import { base64Decode } from "../../plugos/asset_bundle/base64.ts"; export type SandboxFetchRequest = { method?: string; headers?: Record; body?: string; }; export type SandboxFetchResponse = { ok: boolean; status: number; headers: Record; // We base64 encode the body because the body can be binary data that we have to push through the worker boundary base64Body: string; }; export function sandboxFetch( url: string, options?: SandboxFetchRequest, ): Promise { // @ts-ignore: monkey patching fetch return syscall("sandboxFetch.fetch", url, options); } export function monkeyPatchFetch() { // @ts-ignore: monkey patching fetch globalThis.fetch = async function ( url: string, init?: RequestInit, ): Promise { const r = await sandboxFetch( url, init && { method: init.method, headers: init.headers as Record, body: init.body as string, }, ); return new Response(base64Decode(r.base64Body), { status: r.status, headers: r.headers, }); }; }