Spaces:
Paused
Paused
| import process from 'node:process'; | |
| import http from 'node:http'; | |
| import https from 'node:https'; | |
| import { ProxyAgent } from 'proxy-agent'; | |
| import { isValidUrl, color } from './util.js'; | |
| const LOG_HEADER = '[Request Proxy]'; | |
| /** | |
| * Initialize request proxy. | |
| * @param {ProxySettings} settings Proxy settings. | |
| * @typedef {object} ProxySettings | |
| * @property {boolean} enabled Whether proxy is enabled. | |
| * @property {string} url Proxy URL. | |
| * @property {string[]} bypass List of URLs to bypass proxy. | |
| */ | |
| export default function initRequestProxy({ enabled, url, bypass }) { | |
| try { | |
| // No proxy is enabled, so return | |
| if (!enabled) { | |
| return; | |
| } | |
| if (!url) { | |
| console.error(color.red(LOG_HEADER), 'No proxy URL provided'); | |
| return; | |
| } | |
| if (!isValidUrl(url)) { | |
| console.error(color.red(LOG_HEADER), 'Invalid proxy URL provided'); | |
| return; | |
| } | |
| // ProxyAgent uses proxy-from-env under the hood | |
| // Reference: https://github.com/Rob--W/proxy-from-env | |
| process.env.all_proxy = url; | |
| if (Array.isArray(bypass) && bypass.length > 0) { | |
| process.env.no_proxy = bypass.join(','); | |
| } | |
| const proxyAgent = new ProxyAgent(); | |
| http.globalAgent = proxyAgent; | |
| https.globalAgent = proxyAgent; | |
| console.info(); | |
| console.info(color.green(LOG_HEADER), 'Proxy URL is used:', color.blue(url)); | |
| console.info(); | |
| } catch (error) { | |
| console.error(color.red(LOG_HEADER), 'Failed to initialize request proxy:', error); | |
| } | |
| } | |