summaryrefslogtreecommitdiff
path: root/src/misc/fetch.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/misc/fetch.ts')
-rw-r--r--src/misc/fetch.ts49
1 files changed, 39 insertions, 10 deletions
diff --git a/src/misc/fetch.ts b/src/misc/fetch.ts
index 887aae1659..358bc25030 100644
--- a/src/misc/fetch.ts
+++ b/src/misc/fetch.ts
@@ -13,7 +13,7 @@ export async function getJson(url: string, accept = 'application/json, */*', tim
Accept: accept
}, headers || {}),
timeout,
- agent: u => u.protocol == 'http:' ? httpAgent : httpsAgent,
+ agent: getAgentByUrl,
});
if (!res.ok) {
@@ -27,17 +27,46 @@ export async function getJson(url: string, accept = 'application/json, */*', tim
return await res.json();
}
+/**
+ * Get http non-proxy agent
+ */
+const _http = new http.Agent({
+ keepAlive: true,
+ keepAliveMsecs: 30 * 1000,
+});
+
+/**
+ * Get https non-proxy agent
+ */
+const _https = new https.Agent({
+ keepAlive: true,
+ keepAliveMsecs: 30 * 1000,
+ lookup: cache.lookup,
+});
+
+/**
+ * Get http proxy or non-proxy agent
+ */
export const httpAgent = config.proxy
? new HttpProxyAgent(config.proxy)
- : new http.Agent({
- keepAlive: true,
- keepAliveMsecs: 30 * 1000,
- });
+ : _http;
+/**
+ * Get https proxy or non-proxy agent
+ */
export const httpsAgent = config.proxy
? new HttpsProxyAgent(config.proxy)
- : new https.Agent({
- keepAlive: true,
- keepAliveMsecs: 30 * 1000,
- lookup: cache.lookup,
- });
+ : _https;
+
+/**
+ * Get agent by URL
+ * @param url URL
+ * @param bypassProxy Allways bypass proxy
+ */
+export function getAgentByUrl(url: URL, bypassProxy = false) {
+ if (bypassProxy || (config.proxyBypassHosts || []).includes(url.hostname)) {
+ return url.protocol == 'http:' ? _http : _https;
+ } else {
+ return url.protocol == 'http:' ? httpAgent : httpsAgent;
+ }
+}