// Package main — сервис lk-gateway. BFF слой ЛК клиента: // принимает REST-заявки по контракту ESIA Finance, валидирует, // собирает M2MTransferRequest, отправляет в НРД через nsd-adapter, // эмитит callback статуса обратно в ЛК. // // На M2 — in-memory репозиторий + mock NSDSender (имитация принимающей // стороны через 3 секунды). На M3 переключим на pgx + реальный // nsd-adapter без изменения контракта. package main import ( "context" "log" "os" "os/signal" "syscall" "time" "git.zetit.ru/zuevav/Bridge-and-Join-s/internal/lkgateway" "git.zetit.ru/zuevav/Bridge-and-Join-s/internal/m2m" ) func main() { addr := getenv("BJ_HTTP_ADDR", ":8080") defaultSender := m2m.DeponentCode(getenv("BJ_M2M_SENDER", "MC0079200000")) defaultReceiver := m2m.DeponentCode(getenv("BJ_M2M_RECEIVER", "MC0010300000")) cfg := lkgateway.ServerConfig{ Addr: addr, DefaultSender: defaultSender, DefaultReceiver: defaultReceiver, CheckOptions: func() lkgateway.CheckOptions { return lkgateway.CheckOptions{ PostgresDSN: os.Getenv("BJ_DSN"), CryptoSocket: getenv("BJ_CRYPTO_SOCKET", "/run/bj/crypto.sock"), NSDAdapterURL: os.Getenv("BJ_NSD_ADAPTER_URL"), LKCallbackURL: os.Getenv("BJ_LK_CALLBACK_URL"), Profile: getenv("BJ_NSD_PROFILE", "demo (mock NSD)"), CryptoProvider: getenv("BJ_CRYPTO_PROVIDER", "stub"), Timeout: 2 * time.Second, } }, } srv, err := lkgateway.NewServer(cfg) if err != nil { log.Fatalf("lk-gateway: NewServer: %v", err) } if cb := os.Getenv("BJ_LK_CALLBACK_URL"); cb != "" { srv.SetCallbackURL(cb) } ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM) runErr := srv.Run(ctx) stop() if runErr != nil { log.Printf("lk-gateway: %v", runErr) os.Exit(1) } } func getenv(k, def string) string { if v, ok := os.LookupEnv(k); ok && v != "" { return v } return def }