Repository Public MIT
1import { createServer, type Server } from "node:http";2import type { AddressInfo } from "node:net";3import { handleApi } from "../apps/web/src/server/api";4import { handleMcpRequest } from "../apps/registry-mcp/src/index";56/** Real HTTP listener in front of the framework-independent handlers, for protocol-level tests. */7export async function startTestServer(): Promise<{ url: string; server: Server; close: () => Promise<void> }> {8 let origin = "";9 const server = createServer(async (req, res) => {10 try {11 const chunks: Buffer[] = [];12 for await (const c of req) chunks.push(c as Buffer);13 const body = Buffer.concat(chunks);14 const headers = new Headers();15 for (const [k, v] of Object.entries(req.headers)) if (typeof v === "string") headers.set(k, v);16 if (!headers.has("x-forwarded-for")) headers.set("x-forwarded-for", "203.0.113.50");17 const request = new Request(`${origin}${req.url}`, { method: req.method, headers, body: body.length ? new Uint8Array(body) : undefined });18 const out = req.url!.startsWith("/mcp") ? await handleMcpRequest(request, { apiBaseUrl: origin, clientIp: "203.0.113.50" }) : await handleApi(request);19 res.statusCode = out.status;20 out.headers.forEach((v, k) => res.setHeader(k, v));21 res.end(Buffer.from(await out.arrayBuffer()));22 } catch (e) {23 res.statusCode = 500;24 res.end(String(e));25 }26 });27 await new Promise<void>((r) => server.listen(0, "127.0.0.1", () => r()));28 origin = `http://127.0.0.1:${(server.address() as AddressInfo).port}`;29 process.env.PUBLIC_URL = origin;30 return { url: origin, server, close: () => new Promise<void>((r) => server.close(() => r())) };31}32