import { loadEnvFile, getEnv } from "./env.js"; loadEnvFile(); const { buildApp } = await import("./app.js"); const { closeDb } = await import("@dci/db"); const { closeRedis } = await import("./redis.js"); const { closeQueues } = await import("./queues.js"); const { flushRequests, stopTelemetry } = await import("./telemetry.js"); const env = getEnv(); const app = await buildApp(); async function shutdown(signal: string): Promise { app.log.info({ signal }, "shutting down"); try { await app.close(); stopTelemetry(); await flushRequests(); await Promise.allSettled([closeQueues(), closeRedis(), closeDb()]); } finally { process.exit(0); } } process.on("SIGINT", () => void shutdown("SIGINT")); process.on("SIGTERM", () => void shutdown("SIGTERM")); try { await app.listen({ port: env.port, host: env.host }); app.log.info({ port: env.port, docs: `http://127.0.0.1:${env.port}/api/v1/docs`, admin: env.adminToken ? "enabled" : "DISABLED (DCI_ADMIN_TOKEN missing)" }, "dci-api listening"); } catch (e) { app.log.error(e); process.exit(1); }