balena-cli
Version:
The official balena Command Line Interface
70 lines • 2.45 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.setupGlobalHttpProxy = setupGlobalHttpProxy;
exports.makeUrlFromTunnelNgConfig = makeUrlFromTunnelNgConfig;
async function setupGlobalHttpProxy(settings) {
const { env } = process;
if (env.http_proxy) {
env.HTTP_PROXY = env.http_proxy;
}
if (env.https_proxy) {
env.HTTPS_PROXY = env.https_proxy;
}
delete env.http_proxy;
delete env.https_proxy;
const proxy = settings.getCatch('proxy');
if (proxy || env.HTTPS_PROXY || env.HTTP_PROXY) {
const semver = await Promise.resolve().then(() => require('semver'));
if (semver.lt(process.version, '10.16.0')) {
await setupGlobalTunnelNgProxy(proxy);
}
else {
await setupGlobalAgentProxy(settings, proxy);
}
}
}
async function setupGlobalTunnelNgProxy(proxy) {
const globalTunnel = await Promise.resolve().then(() => require('global-tunnel-ng'));
globalTunnel.initialize(proxy);
global.PROXY_CONFIG = globalTunnel.proxyConfig;
}
async function setupGlobalAgentProxy(settings, proxy) {
const noProxy = settings.getCatch('noProxy');
const requiredNoProxy = ['localhost', '127.0.0.1'];
const privateNoProxy = ['*.local', '10.*', '192.168.*'];
for (let i = 16; i <= 31; i++) {
privateNoProxy.push(`172.${i}.*`);
}
const doProxy = (process.env.BALENARC_DO_PROXY || '').split(',');
const env = process.env;
env.GLOBAL_AGENT_ENVIRONMENT_VARIABLE_NAMESPACE = '';
env.NO_PROXY = [
...requiredNoProxy,
...(noProxy ? noProxy.split(',').filter((v) => v) : privateNoProxy),
]
.filter((i) => !doProxy.includes(i))
.join(',');
if (proxy) {
const proxyUrl = typeof proxy === 'string' ? proxy : makeUrlFromTunnelNgConfig(proxy);
env.HTTPS_PROXY = env.HTTP_PROXY = proxyUrl;
}
const { bootstrap } = await Promise.resolve().then(() => require('global-agent'));
bootstrap();
}
function makeUrlFromTunnelNgConfig(cfg) {
let url = cfg.host;
if (cfg.proxyAuth) {
url = `${cfg.proxyAuth}@${url}`;
}
if (cfg.protocol) {
const match = cfg.protocol.match(/^[^:/]+/);
if (match) {
url = `${match[0].toLowerCase()}://${url}`;
}
}
if (cfg.port) {
url = `${url}:${cfg.port}`;
}
return url;
}
//# sourceMappingURL=proxy.js.map