MCPcopy Create free account
hub / github.com/cortexkit/magic-context / startRpcServer

Function startRpcServer

packages/plugin/src/shared/rpc-client.test.ts:59–100  ·  view source on GitHub ↗
(handler: (method: string) => Response | object)

Source from the content-addressed store, hash-verified

57}
58
59async function startRpcServer(handler: (method: string) => Response | object): Promise<TestServer> {
60 const server = createServer(async (req, res) => {
61 if (req.method === "GET" && req.url === "/health") {
62 res.writeHead(200, { "Content-Type": "application/json" });
63 res.end(JSON.stringify({ ok: true }));
64 return;
65 }
66
67 if (req.method === "POST" && req.url?.startsWith("/rpc/")) {
68 const method = req.url.slice("/rpc/".length);
69 const result = handler(method);
70 if (result instanceof Response) {
71 res.writeHead(result.status, { "Content-Type": "application/json" });
72 res.end(await result.text());
73 return;
74 }
75 res.writeHead(200, { "Content-Type": "application/json" });
76 res.end(JSON.stringify(result));
77 return;
78 }
79
80 res.writeHead(404);
81 res.end("Not Found");
82 });
83
84 await new Promise<void>((resolve, reject) => {
85 server.once("error", reject);
86 server.listen(0, "127.0.0.1", () => resolve());
87 });
88 const addr = server.address();
89 if (!addr || typeof addr === "string") throw new Error("failed to bind test server");
90
91 const testServer = {
92 port: addr.port,
93 close: () =>
94 new Promise<void>((resolve, reject) => {
95 server.close((err) => (err ? reject(err) : resolve()));
96 }),
97 };
98 servers.push(testServer);
99 return testServer;
100}
101
102async function closeServer(server: TestServer): Promise<void> {
103 servers = servers.filter((s) => s !== server);

Callers 1

rpc-client.test.tsFile · 0.85

Calls 4

handlerFunction · 0.85
textMethod · 0.65
resolveFunction · 0.50
closeMethod · 0.45

Tested by

no test coverage detected