import http from "node:http"; import { Readable } from "node:stream"; import app from "./dist/server/server.js"; const port = Number.parseInt(process.env.PORT ?? "3000", 10); const host = "0.0.0.0"; function toRequestHeaders(headers) { const requestHeaders = new Headers(); for (const [key, value] of Object.entries(headers)) { if (Array.isArray(value)) { for (const item of value) { requestHeaders.append(key, item); } continue; } if (typeof value === "string") { requestHeaders.set(key, value); } } return requestHeaders; } function getRequestBody(req) { if (req.method === "GET" || req.method === "HEAD") { return undefined; } return Readable.toWeb(req); } const server = http.createServer(async (req, res) => { try { const origin = `http://${req.headers.host ?? `localhost:${port}`}`; const url = new URL(req.url ?? "/", origin); // Fast kube probe endpoint that does not depend on app rendering. if (url.pathname === "/healthz") { res.statusCode = 200; res.setHeader("content-type", "text/plain; charset=utf-8"); res.end("ok"); return; } const body = getRequestBody(req); const request = new Request(url, { method: req.method, headers: toRequestHeaders(req.headers), body, duplex: body ? "half" : undefined, }); const response = await app.fetch(request); res.statusCode = response.status; res.statusMessage = response.statusText; const setCookies = typeof response.headers.getSetCookie === "function" ? response.headers.getSetCookie() : []; if (setCookies.length > 0) { res.setHeader("set-cookie", setCookies); } response.headers.forEach((value, key) => { if (key.toLowerCase() !== "set-cookie") { res.setHeader(key, value); } }); if (!response.body) { res.end(); return; } Readable.fromWeb(response.body).pipe(res); } catch (error) { console.error("Request handling failed:", error); if (!res.headersSent) { res.statusCode = 500; res.setHeader("content-type", "text/plain; charset=utf-8"); } res.end("Internal Server Error"); } }); server.listen(port, host, () => { console.log(`Monie landing server listening on http://${host}:${port}`); });