import { createServer } from "node:http"; import { closeReceiverWorker, RECEIVER_FLOW_QUEUE_NAME, receiverQueue, startReceiverWorker } from "./worker"; const port = Number(process.env.PORT || 8090); const service = "omni_chat"; const server = createServer(async (req, res) => { if (req.method === "GET" && req.url === "/health") { const q = receiverQueue(); const counts = await q.getJobCounts("wait", "active", "failed", "completed", "delayed"); await q.close(); const payload = JSON.stringify({ ok: true, service, receiverFlow: RECEIVER_FLOW_QUEUE_NAME, senderFlow: process.env.SENDER_FLOW_QUEUE_NAME || "sender.flow", queue: counts, now: new Date().toISOString(), }); res.statusCode = 200; res.setHeader("content-type", "application/json; charset=utf-8"); res.end(payload); return; } res.statusCode = 404; res.setHeader("content-type", "application/json; charset=utf-8"); res.end(JSON.stringify({ ok: false, error: "not_found" })); }); startReceiverWorker(); server.listen(port, "0.0.0.0", () => { console.log(`[omni_chat] listening on :${port}`); console.log(`[omni_chat] receiver worker started for queue ${RECEIVER_FLOW_QUEUE_NAME}`); }); async function shutdown(signal: string) { console.log(`[omni_chat] shutting down by ${signal}`); try { await closeReceiverWorker(); } finally { server.close(() => process.exit(0)); } } process.on("SIGINT", () => { void shutdown("SIGINT"); }); process.on("SIGTERM", () => { void shutdown("SIGTERM"); });