metis-desk/.artifacts/resources-global-operating-systems-preflight/proxy-session-diagnostic.mjs

45 lines
1.5 KiB
JavaScript
Raw Normal View History

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()))
);
}