39 lines
1.1 KiB
TypeScript
39 lines
1.1 KiB
TypeScript
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");
|