82 lines
2.4 KiB
JavaScript
82 lines
2.4 KiB
JavaScript
|
"use strict";
|
||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
exports.checkBypass = exports.getProxyUrl = void 0;
|
||
|
function getProxyUrl(reqUrl) {
|
||
|
const usingSsl = reqUrl.protocol === 'https:';
|
||
|
if (checkBypass(reqUrl)) {
|
||
|
return undefined;
|
||
|
}
|
||
|
const proxyVar = (() => {
|
||
|
if (usingSsl) {
|
||
|
return process.env['https_proxy'] || process.env['HTTPS_PROXY'];
|
||
|
}
|
||
|
else {
|
||
|
return process.env['http_proxy'] || process.env['HTTP_PROXY'];
|
||
|
}
|
||
|
})();
|
||
|
if (proxyVar) {
|
||
|
try {
|
||
|
return new URL(proxyVar);
|
||
|
}
|
||
|
catch (_a) {
|
||
|
if (!proxyVar.startsWith('http://') && !proxyVar.startsWith('https://'))
|
||
|
return new URL(`http://${proxyVar}`);
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
return undefined;
|
||
|
}
|
||
|
}
|
||
|
exports.getProxyUrl = getProxyUrl;
|
||
|
function checkBypass(reqUrl) {
|
||
|
if (!reqUrl.hostname) {
|
||
|
return false;
|
||
|
}
|
||
|
const reqHost = reqUrl.hostname;
|
||
|
if (isLoopbackAddress(reqHost)) {
|
||
|
return true;
|
||
|
}
|
||
|
const noProxy = process.env['no_proxy'] || process.env['NO_PROXY'] || '';
|
||
|
if (!noProxy) {
|
||
|
return false;
|
||
|
}
|
||
|
// Determine the request port
|
||
|
let reqPort;
|
||
|
if (reqUrl.port) {
|
||
|
reqPort = Number(reqUrl.port);
|
||
|
}
|
||
|
else if (reqUrl.protocol === 'http:') {
|
||
|
reqPort = 80;
|
||
|
}
|
||
|
else if (reqUrl.protocol === 'https:') {
|
||
|
reqPort = 443;
|
||
|
}
|
||
|
// Format the request hostname and hostname with port
|
||
|
const upperReqHosts = [reqUrl.hostname.toUpperCase()];
|
||
|
if (typeof reqPort === 'number') {
|
||
|
upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`);
|
||
|
}
|
||
|
// Compare request host against noproxy
|
||
|
for (const upperNoProxyItem of noProxy
|
||
|
.split(',')
|
||
|
.map(x => x.trim().toUpperCase())
|
||
|
.filter(x => x)) {
|
||
|
if (upperNoProxyItem === '*' ||
|
||
|
upperReqHosts.some(x => x === upperNoProxyItem ||
|
||
|
x.endsWith(`.${upperNoProxyItem}`) ||
|
||
|
(upperNoProxyItem.startsWith('.') &&
|
||
|
x.endsWith(`${upperNoProxyItem}`)))) {
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
exports.checkBypass = checkBypass;
|
||
|
function isLoopbackAddress(host) {
|
||
|
const hostLower = host.toLowerCase();
|
||
|
return (hostLower === 'localhost' ||
|
||
|
hostLower.startsWith('127.') ||
|
||
|
hostLower.startsWith('[::1]') ||
|
||
|
hostLower.startsWith('[0:0:0:0:0:0:0:1]'));
|
||
|
}
|
||
|
//# sourceMappingURL=proxy.js.map
|