Http1.js 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. import AxiosCanceler from "./AxiosCanceler"
  2. import Logger from "./Logger.js"
  3. const logger = new Logger('Http')
  4. class Http1 extends EventEmitter {
  5. constructor() {
  6. super()
  7. this.instatnce = axios.create();
  8. this.canceler = new AxiosCanceler;
  9. }
  10. requestConstant(){
  11. return {
  12. x_nounce: this.randomString(),
  13. x_timestamp: new Date().getTime(),
  14. x_os: "web"
  15. }
  16. }
  17. requestParams(e){
  18. return oe({}, e.params)
  19. }
  20. get(e) {
  21. return this.request(le(oe({}, e), {
  22. method: "GET"
  23. }))
  24. }
  25. post(e) {
  26. return this.request(le(oe({}, e), {
  27. method: "POST"
  28. }))
  29. }
  30. request(e) {
  31. const {url: t, timeout: r=1e4, method: n, key: o, beforeRequest: a, responseType: s, data: l} = e;
  32. let {retry: u=0} = e;
  33. const c = this.patchUrl(t)
  34. , h = this.canceler.addPending(t);
  35. a && isFunction(a) && a(e);
  36. const f = this.requestParams(e);
  37. let d = {
  38. url: c,
  39. method: n,
  40. timeout: r,
  41. cancelToken: h,
  42. responseType: s,
  43. params: f
  44. };
  45. n === "POST" && (d = oe({
  46. data: l
  47. }, d));
  48. const _ = Date.now()
  49. , g = ()=>this.instatnce.request(d).then(m=>(o && logger.infoAndReportMeasurement({
  50. type: "http",
  51. extraData: t,
  52. group: "http",
  53. tag: o
  54. }),
  55. this.canceler.removeCancelToken(t),
  56. m)).catch(m=>{
  57. const v = axios.isCancel(m);
  58. return u > 0 && !v ? (u--,
  59. logger.warn(`request ${t} retry, left retry count`, u),
  60. g()) : (logger.infoAndReportMeasurement({
  61. type: "http",
  62. error: m,
  63. extraData: {
  64. url: t,
  65. isCanceled: v
  66. },
  67. tag: o,
  68. group: "http"
  69. }),
  70. this.canceler.removeCancelToken(t),
  71. Promise.reject(m))
  72. }
  73. );
  74. return g()
  75. }
  76. patchUrl(e) {
  77. return e
  78. }
  79. randomString() {
  80. let e = "";
  81. const t = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
  82. , r = t.length;
  83. for (let n = 0; n < 8; n++)
  84. e += t.charAt(Math.floor(Math.random() * r));
  85. return e
  86. }
  87. }
  88. const http1 = new Http1();
  89. export { http1 };