| import axios from 'axios'; |
| import dns from 'dns'; |
| import http from 'http'; |
| import https from 'https'; |
| import config from '../config/config.js'; |
|
|
| |
|
|
| |
| function customLookup(hostname, options, callback) { |
| dns.lookup(hostname, { ...options, family: 4 }, (err4, address4, family4) => { |
| if (!err4 && address4) { |
| return callback(null, address4, family4); |
| } |
| dns.lookup(hostname, { ...options, family: 6 }, (err6, address6, family6) => { |
| if (!err6 && address6) { |
| return callback(null, address6, family6); |
| } |
| callback(err4 || err6); |
| }); |
| }); |
| } |
|
|
| |
| const httpAgent = new http.Agent({ |
| lookup: customLookup, |
| keepAlive: true |
| }); |
|
|
| const httpsAgent = new https.Agent({ |
| lookup: customLookup, |
| keepAlive: true |
| }); |
|
|
| |
| function buildProxyConfig() { |
| if (!config.proxy) return false; |
| try { |
| const proxyUrl = new URL(config.proxy); |
| return { |
| protocol: proxyUrl.protocol.replace(':', ''), |
| host: proxyUrl.hostname, |
| port: parseInt(proxyUrl.port, 10) |
| }; |
| } catch { |
| return false; |
| } |
| } |
|
|
| |
| export function buildAxiosRequestConfig({ method = 'POST', url, headers, data = null, timeout = config.timeout }) { |
| const axiosConfig = { |
| method, |
| url, |
| headers, |
| timeout, |
| httpAgent, |
| httpsAgent, |
| proxy: buildProxyConfig() |
| }; |
|
|
| if (data !== null) axiosConfig.data = data; |
| return axiosConfig; |
| } |
|
|
| |
| export async function httpRequest(configOverrides) { |
| const axiosConfig = buildAxiosRequestConfig(configOverrides); |
| return axios(axiosConfig); |
| } |
|
|
| |
| export async function httpStreamRequest(configOverrides) { |
| const axiosConfig = buildAxiosRequestConfig(configOverrides); |
| axiosConfig.responseType = 'stream'; |
| return axios(axiosConfig); |
| } |
|
|