Download src/plugin-sdk/test-helpers/http-test-server.ts from SaylorTwift/openclaw: direct link, hf CLI and curl.
- Browser
- Download file 1.18 kB
-
https://huggingface.co/SaylorTwift/openclaw/resolve/main/src/plugin-sdk/test-helpers/http-test-server.ts
- Command line
-
hf download hf://SaylorTwift/openclaw/src/plugin-sdk/test-helpers/http-test-server.ts
-
curl -L -o http-test-server.ts https://huggingface.co/SaylorTwift/openclaw/resolve/main/src/plugin-sdk/test-helpers/http-test-server.ts
1.18 kB
| // Plugin SDK test helper for temporary local HTTP servers. | |
| import { createServer, type RequestListener } from "node:http"; | |
| import type { AddressInfo, Socket } from "node:net"; | |
| /** Run an ephemeral loopback HTTP server for the duration of an async test callback. */ | |
| export async function withServer(handler: RequestListener, fn: (baseUrl: string) => Promise<void>) { | |
| const server = createServer(handler); | |
| const sockets = new Set<Socket>(); | |
| server.on("connection", (socket) => { | |
| sockets.add(socket); | |
| socket.once("close", () => sockets.delete(socket)); | |
| }); | |
| await new Promise<void>((resolve) => { | |
| server.listen(0, "127.0.0.1", () => resolve()); | |
| }); | |
| const address = server.address() as AddressInfo | null; | |
| if (!address) { | |
| throw new Error("missing server address"); | |
| } | |
| try { | |
| await fn(`http://127.0.0.1:${address.port}`); | |
| } finally { | |
| await new Promise<void>((resolve, reject) => { | |
| server.close((error) => (error ? reject(error) : resolve())); | |
| // Bun clears its native handle in close(), so closeAllConnections cannot finish active streams. | |
| for (const socket of sockets) { | |
| socket.destroy(); | |
| } | |
| }); | |
| } | |
| } | |