39 lines
1.2 KiB
TypeScript
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;
|
|
}
|