import ShutdownService from "./services/shutdown.service"; import express from "express"; import bodyParser from "body-parser"; import logger from "./utils/logger"; import { init } from "./service-init"; import { config } from "./utils/config"; import { metricsMiddleware } from "./middlewares/metrics.middleware"; import { rawBodyParser } from "./middlewares/rawBodyParser.middleware"; import { Server } from "http"; logger.info(`Starting application, environment ==> ${config.OGURY_ENV}`); // Force timezone to UTC process.env.TZ = config.TIMEZONE; let server: Server; export async function start() { const app = express(); app.disable("etag"); app.use(metricsMiddleware); app.use(rawBodyParser); app.use(bodyParser.json()); try { await init(app); await new Promise((resolve) => { server = app.listen(config.LISTEN_PORT, resolve); server.keepAliveTimeout = 61 * 1000; server.headersTimeout = 65 * 1000; }); logger.info(`[EXPRESS] Listening on port ${config.LISTEN_PORT}`); ShutdownService.initShutdownHook(); return app; } catch (err: any) { logger.error(err, "[APP] Failed to start server"); process.exit(1); } } export function closeServer() { server.close(); }