| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- /**
- * Pure-JS port of `src/cli/proxy.ts` — installs a global undici
- * ProxyAgent so Node native `fetch()` honors `PILOTDECK_PROXY` /
- * `HTTPS_PROXY` / `HTTP_PROXY`. Node's native fetch does NOT respect
- * those env vars by default; this closes the gap.
- *
- * Living in `ui/server/utils/` lets the express bridge run from
- * source without depending on `dist/src/cli/proxy.js`.
- */
- import { ProxyAgent, setGlobalDispatcher } from 'undici';
- function getProxyUrl(env = process.env) {
- return (
- env.PILOTDECK_PROXY ||
- env.https_proxy ||
- env.HTTPS_PROXY ||
- env.http_proxy ||
- env.HTTP_PROXY
- );
- }
- let installed = false;
- /**
- * Install a global undici ProxyAgent. Safe to call multiple times —
- * only the first effective call wins. Returns the proxy URL that was
- * activated, or undefined if no proxy is configured.
- *
- * @param {string} [explicitUrl] Override the env-driven proxy URL.
- * @returns {string | undefined} The activated proxy URL.
- */
- export function installGlobalProxy(explicitUrl) {
- if (installed) return undefined;
- const proxyUrl = explicitUrl ?? getProxyUrl();
- if (!proxyUrl) return undefined;
- try {
- const agent = new ProxyAgent(proxyUrl);
- setGlobalDispatcher(agent);
- installed = true;
- console.log(`[proxy] Global fetch proxy → ${proxyUrl}`);
- return proxyUrl;
- } catch (error) {
- console.warn(
- `[proxy] Failed to install global proxy (${proxyUrl}):`,
- error instanceof Error ? error.message : String(error),
- );
- return undefined;
- }
- }
|