Files
ts-scripts/libraries/deno-fetch-auto-proxy-mod.ts

39 lines
1.2 KiB
TypeScript

export function getEnvironmentProxy(): string | undefined {
return Deno.env.get("ALL_PROXY") || Deno.env.get("HTTPS_PROXY") ||
Deno.env.get("HTTP_PROXY");
}
export function getFetchAutoProxyInit(): RequestInit | undefined {
const environmentProxy = getEnvironmentProxy();
if (environmentProxy) {
return {
client: Deno.createHttpClient({
proxy: {
url: environmentProxy,
},
}),
} as RequestInit;
}
return undefined;
}
export async function fetchWithTimoutAndAutoProxy(
input: URL | Request | string,
timeout?: number,
initCallback?: (init: RequestInit) => RequestInit,
): Promise<Response> {
const fetchTimeout = timeout || 10000;
const abortController = new AbortController();
const timoutHandler = setTimeout(() => {
abortController.abort(`Timout ${fetchTimeout} ms`);
}, fetchTimeout);
let init = getFetchAutoProxyInit() || {};
init.signal = abortController.signal;
if (initCallback) {
init = initCallback(init);
}
const response = await fetch(input, init);
clearTimeout(timoutHandler);
return response;
}