import { randomBytes } from "node:crypto"; import { once } from "node:events"; import { createRequire } from "node:module"; import { resolve } from "node:path"; import { pathToFileURL } from "node:url"; const { createApp } = await import(pathToFileURL(resolve("apps/server/src/app.ts")).href); const require = createRequire(resolve("apps/server/package.json")); const session = require("express-session"); const app = createApp(() => {}, { middleware: session({ secret: randomBytes(48).toString("hex"), resave: false, saveUninitialized: false, cookie: { secure: true, httpOnly: true, sameSite: "strict" }, }), register: (instance) => instance.get("/api/preflight-session", (request, response) => { request.session.preflightMarker = true; response.json({ secure: request.secure }); }), }); const server = app.listen(0, "127.0.0.1"); try { await once(server, "listening"); const response = await fetch(`http://127.0.0.1:${server.address().port}/api/preflight-session`, { headers: { "x-forwarded-proto": "https" }, signal: AbortSignal.timeout(5000), }); console.log( JSON.stringify({ diagnostic: "TLS termination followed by HTTP to backend", trustProxy: app.get("trust proxy"), http: response.status, ...(await response.json()), sessionCookieIssued: response.headers.has("set-cookie"), databaseUsed: false, }) ); } finally { await new Promise((resolve, reject) => server.close((error) => (error ? reject(error) : resolve())) ); }