routerOnly / src /lib /network /outboundProxy.js
HF Deployer
Init 9Router for HF Space (no binaries)
ebd68ab
Raw
History Blame Contribute Delete
2.54 kB
function normalizeString(value) {
if (value === undefined || value === null) return "";
return String(value).trim();
}
const ALLOWED_PROXY_SCHEMES = ["http:", "https:", "socks5:", "socks4:", "socks5h:", "socks4a:"];
function validateProxyUrl(url) {
if (!url) return null;
if (/[\n\r`$]/.test(url)) return null;
try {
const parsed = new URL(url);
if (!ALLOWED_PROXY_SCHEMES.includes(parsed.protocol)) return null;
return parsed.href;
} catch {
return null;
}
}
export function applyOutboundProxyEnv(
{ outboundProxyEnabled, outboundProxyUrl, outboundNoProxy } = {}
) {
if (typeof process === "undefined" || !process.env) return;
const enabled = Boolean(outboundProxyEnabled);
const proxyUrl = normalizeString(outboundProxyUrl);
const noProxy = normalizeString(outboundNoProxy);
// If disabled, only clear env vars we previously managed.
if (!enabled) {
if (process.env.NINE_ROUTER_PROXY_MANAGED === "1") {
delete process.env.HTTP_PROXY;
delete process.env.HTTPS_PROXY;
delete process.env.ALL_PROXY;
delete process.env.NO_PROXY;
delete process.env.NINE_ROUTER_PROXY_MANAGED;
delete process.env.NINE_ROUTER_PROXY_URL;
delete process.env.NINE_ROUTER_NO_PROXY;
}
return;
}
// When enabled:
// - If values are provided, write them and mark as managed
// - If values are empty, do not touch externally-provided env,
// but do clear values we previously managed.
const wasManaged = process.env.NINE_ROUTER_PROXY_MANAGED === "1";
let managed = false;
if (wasManaged) {
if (!proxyUrl) {
delete process.env.HTTP_PROXY;
delete process.env.HTTPS_PROXY;
delete process.env.ALL_PROXY;
delete process.env.NINE_ROUTER_PROXY_URL;
}
if (!noProxy) {
delete process.env.NO_PROXY;
delete process.env.NINE_ROUTER_NO_PROXY;
}
}
if (proxyUrl) {
const validated = validateProxyUrl(proxyUrl);
if (validated) {
process.env.HTTP_PROXY = validated;
process.env.HTTPS_PROXY = validated;
process.env.ALL_PROXY = validated;
process.env.NINE_ROUTER_PROXY_URL = validated;
managed = true;
}
}
if (noProxy) {
process.env.NO_PROXY = noProxy;
process.env.NINE_ROUTER_NO_PROXY = noProxy;
managed = true;
}
if (managed) {
process.env.NINE_ROUTER_PROXY_MANAGED = "1";
} else if (wasManaged) {
// If we previously managed env but now cleared everything, drop the marker.
delete process.env.NINE_ROUTER_PROXY_MANAGED;
}
}