CoolFace
Datasetpublic

basant307/AI_Governance_Project

sourceHugging Faceapache-2.0updated 2mo agoView on Hugging Face
0likes48downloads
proxy.js89 linesDownload Raw Back to lib
1'use strict'2 3const { HttpProxyAgent } = require('http-proxy-agent')4const { HttpsProxyAgent } = require('https-proxy-agent')5const { SocksProxyAgent } = require('socks-proxy-agent')6const { LRUCache } = require('lru-cache')7const { InvalidProxyProtocolError } = require('./errors.js')8 9const PROXY_CACHE = new LRUCache({ max: 20 })10 11const SOCKS_PROTOCOLS = new Set(SocksProxyAgent.protocols)12 13const PROXY_ENV_KEYS = new Set(['https_proxy', 'http_proxy', 'proxy', 'no_proxy'])14 15const PROXY_ENV = Object.entries(process.env).reduce((acc, [key, value]) => {16  key = key.toLowerCase()17  if (PROXY_ENV_KEYS.has(key)) {18    acc[key] = value19  }20  return acc21}, {})22 23const getProxyAgent = (url) => {24  url = new URL(url)25 26  const protocol = url.protocol.slice(0, -1)27  if (SOCKS_PROTOCOLS.has(protocol)) {28    return SocksProxyAgent29  }30  if (protocol === 'https' || protocol === 'http') {31    return [HttpProxyAgent, HttpsProxyAgent]32  }33 34  throw new InvalidProxyProtocolError(url)35}36 37const isNoProxy = (url, noProxy) => {38  if (typeof noProxy === 'string') {39    noProxy = noProxy.split(',').map((p) => p.trim()).filter(Boolean)40  }41 42  if (!noProxy || !noProxy.length) {43    return false44  }45 46  const hostSegments = url.hostname.split('.').reverse()47 48  return noProxy.some((no) => {49    const noSegments = no.split('.').filter(Boolean).reverse()50    if (!noSegments.length) {51      return false52    }53 54    for (let i = 0; i < noSegments.length; i++) {55      if (hostSegments[i] !== noSegments[i]) {56        return false57      }58    }59 60    return true61  })62}63 64const getProxy = (url, { proxy, noProxy }) => {65  url = new URL(url)66 67  if (!proxy) {68    proxy = url.protocol === 'https:'69      ? PROXY_ENV.https_proxy70      : PROXY_ENV.https_proxy || PROXY_ENV.http_proxy || PROXY_ENV.proxy71  }72 73  if (!noProxy) {74    noProxy = PROXY_ENV.no_proxy75  }76 77  if (!proxy || isNoProxy(url, noProxy)) {78    return null79  }80 81  return new URL(proxy)82}83 84module.exports = {85  getProxyAgent,86  getProxy,87  proxyCache: PROXY_CACHE,88}89 
basant307/AI_Governance_Project · CoolFace