package main import ( "flag" "log" "net" "os" "os/signal" "syscall" "google.golang.org/grpc" pb "northwest.io/nostr-grpc/api/nostr/v1" grpchandler "northwest.io/nostr-grpc/internal/handler/grpc" "northwest.io/nostr-grpc/internal/storage" ) func main() { var ( grpcAddr = flag.String("grpc-addr", ":50051", "gRPC server address") dbPath = flag.String("db", "relay.db", "SQLite database path") ) flag.Parse() store, err := storage.New(*dbPath) if err != nil { log.Fatalf("failed to create storage: %v", err) } defer store.Close() handler := grpchandler.NewServer(store) lis, err := net.Listen("tcp", *grpcAddr) if err != nil { log.Fatalf("failed to listen: %v", err) } grpcServer := grpc.NewServer() pb.RegisterNostrRelayServer(grpcServer, handler) log.Printf("gRPC server listening on %s", *grpcAddr) log.Printf("Database: %s", *dbPath) sigChan := make(chan os.Signal, 1) signal.Notify(sigChan, os.Interrupt, syscall.SIGTERM) go func() { <-sigChan log.Println("Shutting down...") grpcServer.GracefulStop() }() if err := grpcServer.Serve(lis); err != nil { log.Fatalf("failed to serve: %v", err) } }