gristlabs_grist-core/app/server/lib/ProxyAgent.ts
Dmitry S be5cb9124a (core) Add logging of errors whenever ProxyAgent is used, and a test for it.
Summary:
Also:
- Move ProxyAgent to from app/server/utils to app/server/lib, which is
  the more usual place for such classes.
- Refactor a helper (delayAbort) that node was reporting a leak in.

Test Plan: Added a test case, and tested manually.

Reviewers: JakubSerafin

Reviewed By: JakubSerafin

Subscribers: JakubSerafin, paulfitz

Differential Revision: https://phab.getgrist.com/D3897
2023-05-17 10:21:53 -04:00

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