MCPcopy Create free account
hub / github.com/acoyfellow/cloudbox / fetch

Function fetch

runner/server.mjs:306–342  ·  view source on GitHub ↗
(request)

Source from the content-addressed store, hash-verified

304}
305
306async function handleLivePreview(runId, request, suffix) {
307 const target = livePreviewTarget(runId, request, suffix, "http");
308 const headers = new Headers(request.headers);
309 headers.set("host", target.host);
310 return fetch(target, new Request(target, {
311 method: request.method,
312 headers,
313 body: request.body,
314 redirect: "manual",
315 duplex: request.body ? "half" : undefined,
316 }));
317}
318
319function upgradeLivePreview(server, request, runId, suffix) {
320 const target = livePreviewTarget(runId, request, suffix, "ws");
321 return server.upgrade(request, { data: { target: target.toString(), upstream: null } });
322}
323
324let bunServer = null;
325
326if (typeof Bun !== "undefined") {
327 bunServer = Bun.serve({
328 port: PORT,
329 async fetch(request) {
330 const url = new URL(request.url);
331 if (url.pathname === "/health") return json({ ok: true });
332 if (url.pathname === "/run" && request.method === "POST") {
333 try { return json(await handleRun(await request.json())); }
334 catch (error) { return json({ ok: false, error: String(error?.message || error) }, 400); }
335 }
336 const previewMatch = url.pathname.match(/^\/live\/(run_[A-Za-z0-9-]+)\/preview\/?(.*)$/);
337 if (previewMatch) {
338 const [, runId, suffix] = previewMatch;
339 try {
340 if (request.headers.get("upgrade")?.toLowerCase() === "websocket") {
341 if (upgradeLivePreview(bunServer, request, runId, suffix)) return;
342 return json({ ok: false, error: "preview_websocket_upgrade_failed" }, 502);
343 }
344 return await handleLivePreview(runId, request, suffix);
345 }

Callers 3

handleLivePreviewFunction · 0.70
makeAuthenticatedRequestFunction · 0.50

Calls 12

handleRunFunction · 0.85
upgradeLivePreviewFunction · 0.85
handleLivePreviewFunction · 0.85
handleLiveExecFunction · 0.85
handleLiveReadFunction · 0.85
handleLiveWriteFunction · 0.85
handleLiveDevFunction · 0.85
handleLiveSnapshotFunction · 0.85
handleLiveRestoreFunction · 0.85
handleLiveDeleteFunction · 0.85
getMethod · 0.80
jsonFunction · 0.70

Tested by

no test coverage detected