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 { 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; }