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;
|
|
}
|
|
};
|