* Fix env proxy bootstrap for model traffic * Address proxy dispatcher review followups * Fix proxy env precedence for empty lowercase vars
56 lines
1.7 KiB
TypeScript
56 lines
1.7 KiB
TypeScript
export const PROXY_ENV_KEYS = [
|
|
"HTTP_PROXY",
|
|
"HTTPS_PROXY",
|
|
"ALL_PROXY",
|
|
"http_proxy",
|
|
"https_proxy",
|
|
"all_proxy",
|
|
] as const;
|
|
|
|
export function hasProxyEnvConfigured(env: NodeJS.ProcessEnv = process.env): boolean {
|
|
for (const key of PROXY_ENV_KEYS) {
|
|
const value = env[key];
|
|
if (typeof value === "string" && value.trim().length > 0) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function normalizeProxyEnvValue(value: string | undefined): string | null | undefined {
|
|
if (typeof value !== "string") {
|
|
return undefined;
|
|
}
|
|
const trimmed = value.trim();
|
|
return trimmed.length > 0 ? trimmed : null;
|
|
}
|
|
|
|
/**
|
|
* Match undici EnvHttpProxyAgent semantics for env-based HTTP/S proxy selection:
|
|
* - lower-case vars take precedence over upper-case
|
|
* - HTTPS requests prefer https_proxy/HTTPS_PROXY, then fall back to http_proxy/HTTP_PROXY
|
|
* - ALL_PROXY is ignored by EnvHttpProxyAgent
|
|
*/
|
|
export function resolveEnvHttpProxyUrl(
|
|
protocol: "http" | "https",
|
|
env: NodeJS.ProcessEnv = process.env,
|
|
): string | undefined {
|
|
const lowerHttpProxy = normalizeProxyEnvValue(env.http_proxy);
|
|
const lowerHttpsProxy = normalizeProxyEnvValue(env.https_proxy);
|
|
const httpProxy =
|
|
lowerHttpProxy !== undefined ? lowerHttpProxy : normalizeProxyEnvValue(env.HTTP_PROXY);
|
|
const httpsProxy =
|
|
lowerHttpsProxy !== undefined ? lowerHttpsProxy : normalizeProxyEnvValue(env.HTTPS_PROXY);
|
|
if (protocol === "https") {
|
|
return httpsProxy ?? httpProxy ?? undefined;
|
|
}
|
|
return httpProxy ?? undefined;
|
|
}
|
|
|
|
export function hasEnvHttpProxyConfigured(
|
|
protocol: "http" | "https" = "https",
|
|
env: NodeJS.ProcessEnv = process.env,
|
|
): boolean {
|
|
return resolveEnvHttpProxyUrl(protocol, env) !== undefined;
|
|
}
|