import fs from "node:fs"; import { createRequire } from "node:module"; import type { AddressInfo, Server as NetServer } from "node:net"; import os from "node:os"; import path from "node:path"; import { Server as TlsServer } from "node:tls"; type SupertestServer = NetServer & { address(): ReturnType; listen(port: number): NetServer; }; type SupertestTestInstance = { _server?: SupertestServer; }; type SupertestTestConstructor = { prototype: { serverAddress(this: SupertestTestInstance, app: SupertestServer, path: string): string; __paperclipLoopbackPatched?: boolean; }; }; const require = createRequire(import.meta.url); const SupertestTest = require("supertest/lib/test.js") as SupertestTestConstructor; if (!process.env.CODEX_HOME) { const codexHome = fs.mkdtempSync(path.join(os.tmpdir(), "paperclip-vitest-codex-home-")); fs.writeFileSync(path.join(codexHome, "auth.json"), '{"OPENAI_API_KEY":"sk-vitest"}\n', { mode: 0o600 }); process.env.CODEX_HOME = codexHome; } // The automatic Tailscale HTTPS default (PAP-17158) probes for a real host // broker socket, so leaving it enabled would make every test that starts a // service named `paperclip-dev` behave differently on a broker-capable host // than on CI. Tests that exercise the default opt in explicitly. if (!process.env.PAPERCLIP_MANAGED_RUNTIME_HTTPS) { process.env.PAPERCLIP_MANAGED_RUNTIME_HTTPS = "off"; } if (!SupertestTest.prototype.__paperclipLoopbackPatched) { SupertestTest.prototype.serverAddress = function serverAddress(app, path) { const addr = app.address(); if (!addr) { this._server = app.listen(0) as SupertestServer; } const listeningAddress = app.address() as AddressInfo | string | null; if (!listeningAddress || typeof listeningAddress === "string") { throw new Error("Expected Supertest server to listen on a TCP port"); } const host = listeningAddress.address === "::" ? "[::1]" : listeningAddress.address === "0.0.0.0" ? "127.0.0.1" : listeningAddress.address; const protocol = app instanceof TlsServer ? "https" : "http"; return `${protocol}://${host}:${listeningAddress.port}${path}`; }; SupertestTest.prototype.__paperclipLoopbackPatched = true; }