import { ProxyAgent, fetch as undiciFetch } from "undici"; export function makeProxyFetch(proxyUrl: string): typeof fetch { const agent = new ProxyAgent(proxyUrl); // undici's fetch is runtime-compatible with global fetch but the types diverge // on stream/body internals. Single cast at the boundary keeps the rest type-safe. // Keep proxy dispatching request-scoped. Replacing the global dispatcher breaks // env-driven HTTP(S)_PROXY behavior for unrelated outbound requests. const fetcher = ((input: RequestInfo | URL, init?: RequestInit) => undiciFetch(input as string | URL, { ...(init as Record), dispatcher: agent, }) as unknown as Promise) as typeof fetch; // Return raw proxy fetch; call sites that need AbortSignal normalization // should opt into resolveFetch/wrapFetchWithAbortSignal once at the edge. return fetcher; }