45 lines
1.0 KiB
Plaintext
45 lines
1.0 KiB
Plaintext
|
// Copyright 2013 Lovell Fuller and others.
|
||
|
// SPDX-License-Identifier: Apache-2.0
|
||
|
|
||
|
'use strict';
|
||
|
|
||
|
const url = require('url');
|
||
|
const tunnelAgent = require('tunnel-agent');
|
||
|
|
||
|
const is = require('./is');
|
||
|
|
||
|
const proxies = [
|
||
|
'HTTPS_PROXY',
|
||
|
'https_proxy',
|
||
|
'HTTP_PROXY',
|
||
|
'http_proxy',
|
||
|
'npm_config_https_proxy',
|
||
|
'npm_config_proxy'
|
||
|
];
|
||
|
|
||
|
function env (key) {
|
||
|
return process.env[key];
|
||
|
}
|
||
|
|
||
|
module.exports = function (log) {
|
||
|
try {
|
||
|
const proxy = new url.URL(proxies.map(env).find(is.string));
|
||
|
const tunnel = proxy.protocol === 'https:'
|
||
|
? tunnelAgent.httpsOverHttps
|
||
|
: tunnelAgent.httpsOverHttp;
|
||
|
const proxyAuth = proxy.username && proxy.password
|
||
|
? `${decodeURIComponent(proxy.username)}:${decodeURIComponent(proxy.password)}`
|
||
|
: null;
|
||
|
log(`Via proxy ${proxy.protocol}//${proxy.hostname}:${proxy.port} ${proxyAuth ? 'with' : 'no'} credentials`);
|
||
|
return tunnel({
|
||
|
proxy: {
|
||
|
port: Number(proxy.port),
|
||
|
host: proxy.hostname,
|
||
|
proxyAuth
|
||
|
}
|
||
|
});
|
||
|
} catch (err) {
|
||
|
return null;
|
||
|
}
|
||
|
};
|