import { CookieJar } from "./cookie_jar.ts";import { setHeader } from "./header_utils.ts";
export type WrapFetchOptions = { fetch?: typeof fetch; cookieJar?: CookieJar;};
export function wrapFetch(options: WrapFetchOptions) { const { cookieJar = new CookieJar(), fetch = globalThis.fetch } = options || {};
async function wrappedFetch( input: string | Request | URL, init?: RequestInit | undefined, ) { if (!input) { return await fetch(input); } const cookieString = cookieJar.getCookieString(input); const interceptedInit = init || {}; if (!interceptedInit.headers) { interceptedInit.headers = new Headers(); }
setHeader(interceptedInit.headers, "cookie", cookieString);
const response = await fetch(input, interceptedInit); response.headers.forEach((value, key) => { if (key.toLowerCase() === "set-cookie") { cookieJar.setCookie(value, input); } }); return response; }
return wrappedFetch;}