request.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. "use strict";
  2. var __importDefault = (this && this.__importDefault) || function (mod) {
  3. return (mod && mod.__esModule) ? mod : { "default": mod };
  4. };
  5. Object.defineProperty(exports, "__esModule", { value: true });
  6. exports.request = exports.axios = void 0;
  7. const chalk_1 = __importDefault(require("chalk"));
  8. const axios_1 = __importDefault(require("axios"));
  9. const DEF_TIMEOUT = 10000;
  10. const DEF_RETRIES = 2;
  11. 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';
  12. exports.axios = axios_1.default.create({
  13. headers: {
  14. 'user-agent': DEF_UA
  15. },
  16. withCredentials: true
  17. });
  18. const request = (config, retries = 0) => {
  19. config.timeout = config.timeout || DEF_TIMEOUT;
  20. config.maxRetries = config.maxRetries || DEF_RETRIES;
  21. const _config = JSON.stringify(config);
  22. const cancelTokenSource = axios_1.default.CancelToken.source();
  23. config.cancelToken = cancelTokenSource.token;
  24. console.debug(chalk_1.default.white(`[request] ${config.method || 'GET'} ${config.url}`, config.params ? JSON.stringify(config.params) : ''));
  25. return new Promise((resolve, reject) => {
  26. let done = false;
  27. const timer = setTimeout(() => {
  28. if (!done) {
  29. cancelTokenSource.cancel();
  30. // @ts-ignore
  31. if (retries >= config.maxRetries) {
  32. reject(new Error(`max retries exceeded (${retries})`));
  33. }
  34. else {
  35. retries++;
  36. console.info(chalk_1.default.magenta(`[request] ${config.url} timeouted, canceled, retry ${retries}`));
  37. resolve(exports.request(JSON.parse(_config), retries));
  38. }
  39. }
  40. }, config.timeout);
  41. const startAt = Date.now();
  42. exports.axios(config)
  43. .then((res) => {
  44. console.debug(chalk_1.default.white(`└─ ${res.status} ${Date.now() - startAt}ms`));
  45. resolve(res);
  46. })
  47. .catch((e) => {
  48. if (e.response && e.response.data) {
  49. console.error('[error.message]', e.message);
  50. console.error('[error.response]', e.response.data);
  51. }
  52. reject(e);
  53. })
  54. .finally(() => {
  55. done = true;
  56. clearTimeout(timer);
  57. });
  58. });
  59. };
  60. exports.request = request;