mirror of
https://github.com/gristlabs/grist-core.git
synced 2024-10-27 20:44:07 +00:00
27 lines
962 B
TypeScript
27 lines
962 B
TypeScript
|
import {HttpsProxyAgent} from "https-proxy-agent";
|
||
|
import {HttpProxyAgent} from "http-proxy-agent";
|
||
|
import log from 'app/server/lib/log';
|
||
|
|
||
|
export function proxyAgent(requestUrl: URL): HttpProxyAgent | HttpsProxyAgent | undefined {
|
||
|
const proxy = process.env.GRIST_HTTPS_PROXY;
|
||
|
if (!proxy) {
|
||
|
return undefined;
|
||
|
}
|
||
|
const ProxyAgent = requestUrl.protocol === "https:" ? HttpsProxyAgent : HttpProxyAgent;
|
||
|
const agent = new ProxyAgent(proxy);
|
||
|
|
||
|
// Wrap the main method of ProxyAgent into a wrapper that logs errors.
|
||
|
const callback = agent.callback;
|
||
|
agent.callback = async function () {
|
||
|
try {
|
||
|
return await callback.apply(this, arguments as any);
|
||
|
} catch (e) {
|
||
|
// Include info helpful for diagnosing issues (but not the potentially sensitive full requestUrl).
|
||
|
log.rawWarn(`ProxyAgent error ${e}`,
|
||
|
{proxy, reqProtocol: requestUrl.protocol, requestOrigin: requestUrl.origin});
|
||
|
throw e;
|
||
|
}
|
||
|
};
|
||
|
return agent;
|
||
|
}
|