import axios from 'axios'; import { HttpsProxyAgent } from 'https-proxy-agent'; import { HttpProxyAgent } from 'http-proxy-agent'; const config = axios.defaults; const httpProxyUrl = process.env.http_proxy; const httpsProxyUrl = process.env.https_proxy; const supportsProxy = httpProxyUrl || httpsProxyUrl; const noProxyEnv = process.env.no_proxy; const noProxyHosts = noProxyEnv ? noProxyEnv.split(',').map(host => host.trim()) : []; if (supportsProxy) { if (httpProxyUrl) { config.httpAgent = new HttpProxyAgent(httpProxyUrl); } if (httpsProxyUrl) { config.httpsAgent = new HttpsProxyAgent(httpsProxyUrl); } config.proxy = false; } const axiosWithProxyInstance = axios.create(config); function shouldSkipProxy(hostname) { return noProxyHosts.some(noProxyHost => { return hostname.endsWith(noProxyHost) || hostname === noProxyHost; }); }; axiosWithProxyInstance.interceptors.request.use(function skipProxyIfInNoProxy(requestConfig) { const hostname = new URL(requestConfig.url).hostname; if (supportsProxy && shouldSkipProxy(hostname)) { requestConfig.httpAgent = undefined; requestConfig.httpsAgent = undefined; } return requestConfig; }); export default axiosWithProxyInstance;