"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.request = exports.axios = void 0; const chalk_1 = __importDefault(require("chalk")); const axios_1 = __importDefault(require("axios")); const DEF_TIMEOUT = 10000; const DEF_RETRIES = 2; const DEF_UA = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36'; exports.axios = axios_1.default.create({ headers: { 'user-agent': DEF_UA }, withCredentials: true }); const request = (config, retries = 0) => { config.timeout = config.timeout || DEF_TIMEOUT; config.maxRetries = config.maxRetries || DEF_RETRIES; const _config = JSON.stringify(config); const cancelTokenSource = axios_1.default.CancelToken.source(); config.cancelToken = cancelTokenSource.token; console.debug(chalk_1.default.white(`[request] ${config.method || 'GET'} ${config.url}`, config.params ? JSON.stringify(config.params) : '')); return new Promise((resolve, reject) => { let done = false; const timer = setTimeout(() => { if (!done) { cancelTokenSource.cancel(); // @ts-ignore if (retries >= config.maxRetries) { reject(new Error(`max retries exceeded (${retries})`)); } else { retries++; console.info(chalk_1.default.magenta(`[request] ${config.url} timeouted, canceled, retry ${retries}`)); resolve(exports.request(JSON.parse(_config), retries)); } } }, config.timeout); const startAt = Date.now(); exports.axios(config) .then((res) => { console.debug(chalk_1.default.white(`└─ ${res.status} ${Date.now() - startAt}ms`)); resolve(res); }) .catch((e) => { if (e.response && e.response.data) { console.error('[error.message]', e.message); console.error('[error.response]', e.response.data); } reject(e); }) .finally(() => { done = true; clearTimeout(timer); }); }); }; exports.request = request;