2025-04-02 06:50:39 -04:00

44 lines
1.2 KiB
JavaScript

const url = require('url');
const tunnel = require('tunnel-agent');
const util = require('./util');
function applyProxy(reqOpts, opts) {
const log = opts.log || util.noopLogger;
const proxy = opts['https-proxy'] || opts.proxy;
if (proxy) {
// eslint-disable-next-line node/no-deprecated-api
const parsedDownloadUrl = url.parse(reqOpts.url);
// eslint-disable-next-line node/no-deprecated-api
const parsedProxy = url.parse(proxy);
const uriProtocol =
parsedDownloadUrl.protocol === 'https:' ? 'https' : 'http';
const proxyProtocol = parsedProxy.protocol === 'https:' ? 'Https' : 'Http';
const tunnelFnName = [uriProtocol, proxyProtocol].join('Over');
reqOpts.agent = tunnel[tunnelFnName]({
proxy: {
host: parsedProxy.hostname,
port: +parsedProxy.port,
proxyAuth: parsedProxy.auth,
},
});
log.http(
'request',
'Proxy setup detected (Host: ' +
parsedProxy.hostname +
', Port: ' +
parsedProxy.port +
', Authentication: ' +
(parsedProxy.auth ? 'Yes' : 'No') +
')' +
' Tunneling with ' +
tunnelFnName
);
}
return reqOpts;
}
module.exports = applyProxy;