import { createApp } from "../app.js"; import { parseConfig } from "../lib/config.js"; import { createDb } from "../lib/db.js"; import { createFlags } from "../lib/flags.js"; import { createLogger } from "../lib/logger.js"; import { createCache } from "../lib/redis.js"; import { createRuntimeConfig } from "../lib/runtime-config.js"; const config = parseConfig(process.env); const logger = createLogger(config); const db = config.DATABASE_URL ? createDb(config.DATABASE_URL) : undefined; const cache = config.REDIS_URL ? createCache(config.REDIS_URL) : undefined; const flags = createFlags(config, logger); const runtimeConfig = await createRuntimeConfig({ path: config.RUNTIME_CONFIG_PATH, logger, }); const server = createApp({ config, logger, db, cache, flags, runtimeConfig, }).listen(config.PORT, () => { logger.info({ port: config.PORT }, "listening"); }); function shutdown(signal: string) { logger.info({ signal }, "shutting down"); runtimeConfig.close(); server.close(async () => { await Promise.allSettled([db?.close(), cache?.close(), flags.close()]); process.exit(0); }); setTimeout(() => process.exit(1), 10_000).unref(); } process.on("SIGTERM", () => shutdown("SIGTERM")); process.on("SIGINT", () => shutdown("SIGINT"));