import Fastify from "fastify"; import cors from "@fastify/cors"; import mercurius from "mercurius"; import * as Sentry from "@sentry/node"; import { resolvers, typeDefs } from "./schema.js"; const PORT = Number.parseInt(process.env.PORT || "8000", 10); const SENTRY_DSN = process.env.SENTRY_DSN || ""; const corsOrigins = ( process.env.CORS_ORIGINS || "https://optovia.ru,https://app.optovia.ru" ) .split(",") .map((origin) => origin.trim()) .filter((origin) => origin.length > 0); if (SENTRY_DSN) { Sentry.init({ dsn: SENTRY_DSN, tracesSampleRate: 0.01, release: process.env.RELEASE_VERSION || "1.0.0", environment: process.env.ENVIRONMENT || "production", }); } const app = Fastify(); await app.register(cors, { origin: corsOrigins, credentials: true }); await app.register(mercurius, { schema: typeDefs, resolvers, path: "/graphql", graphiql: true, }); app.get("/health", async () => ({ status: "ok", service: "exchange" })); await app.listen({ port: PORT, host: "0.0.0.0" }); console.log(`Exchange server ready on port ${PORT}`); console.log(" /graphql - suppliers, products, quotes");