{"version":3,"sources":["../src/error-message.map.ts","../src/http-client.ts"],"names":["errorMessageMap","HttpStatusCode","axios","_instance","_instanceOptions","_interceptorsLoaded","_isTokenRefreshing","_pendingQueue","_HttpClient_instances","initRequestInterceptor_fn","initResponseInterceptor_fn","addLanguage_fn","addAuthorization_fn","handleMessage_fn","pendingRequest_fn","handleStatusCode_fn","handleUnauthorized_fn","refresh_fn","HttpClient","options","config","__privateAdd","__privateSet","__async","__privateGet","router","message","i18n","__privateMethod","url","params","__spreadValues","data","req","err","res","_a","msg","response","newResponse","LangUtils","AuthUtils","messageType","m","resolve","_b","status","errorMsg","e","unauthorizedRedirectUrl","currentPath","token","accessToken","refreshToken","__spreadProps","task"],"mappings":"wkCAEaA,IAAAA,CAAAA,CAAkB,IAAI,GAAI,CAAA,CACrC,CAACC,cAAAA,CAAe,YAAc,CAAA,oBAAoB,EAClD,CAACA,cAAAA,CAAe,SAAW,CAAA,iBAAiB,CAC5C,CAAA,CAACA,eAAe,QAAU,CAAA,gBAAgB,CAC1C,CAAA,CAACA,cAAe,CAAA,gBAAA,CAAkB,0BAA0B,CAC5D,CAAA,CAACA,cAAe,CAAA,QAAA,CAAU,gBAAgB,CAAA,CAC1C,CAACA,cAAe,CAAA,mBAAA,CAAqB,4BAA4B,CAAA,CACjE,CAACA,cAAAA,CAAe,gBAAiB,yBAAyB,CAAA,CAC1D,CAACA,cAAAA,CAAe,mBAAqB,CAAA,6BAA6B,CAClE,CAAA,CAACA,cAAe,CAAA,UAAA,CAAY,mBAAmB,CAAA,CAC/C,CAACA,cAAAA,CAAe,WAAY,uBAAuB,CACrD,CAAC,ECQDC,CAAAA,CAAM,QAAS,CAAA,OAAA,CAAU,GACzBA,CAAAA,CAAAA,CAAM,SAAS,OAAQ,CAAA,MAAA,CAAO,cAAc,CAAA,CAAI,gCAtBhD,CAAA,IAAAC,EAAAC,CAAAC,CAAAA,CAAAA,CAAAC,CAAAC,CAAAA,CAAAA,CAAAC,CAAAC,CAAAA,CAAAA,CAAAC,EAAAC,CAAAC,CAAAA,CAAAA,CAAAC,CAAAC,CAAAA,CAAAA,CAAAC,CAAAC,CAAAA,CAAAA,CAAAC,EAwBaC,CAAN,CAAA,KAAiB,CA2BtB,WAAA,CAAYC,CAAgCC,CAAAA,CAAAA,CAA8B,CA3BrEC,CAAAA,CAAA,IAAAb,CAAAA,CAAAA,CAAAA,CAILa,CAAA,CAAA,IAAA,CAAAlB,CAKAkB,CAAAA,CAAAA,CAAAA,CAAA,KAAAjB,CAAyC,CAAA,EAKzCiB,CAAAA,CAAAA,CAAAA,CAAA,IAAAhB,CAAAA,CAAAA,CAAsB,OAMtBgB,CAAA,CAAA,IAAA,CAAAf,CAAqB,CAAA,KAAA,CAAA,CAKrBe,CAAA,CAAA,IAAA,CAAAd,EAAkC,EAAC,CAAA,CAGjCe,CAAA,CAAA,IAAA,CAAKnB,CAAYD,CAAAA,CAAAA,CAAM,OAAOkB,CAAM,CAAA,CAAA,CACpCE,CAAA,CAAA,IAAA,CAAKlB,CAAmBe,CAAAA,CAAAA,EAAA,KAAAA,CAAW,CAAA,EACrC,EAAA,CAKM,gBAAiBA,CAAAA,CAAAA,CAAkC,QAAAI,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,WAAA,CAEvD,GAAIC,CAAAA,CAAA,IAAKnB,CAAAA,CAAAA,CAAAA,CACP,OAEFiB,CAAA,CAAA,IAAA,CAAKjB,CAAsB,CAAA,IAAA,CAAA,CAE3B,GAAM,CAAE,MAAAoB,CAAAA,CAAAA,CAAQ,OAAAC,CAAAA,CAAAA,CAAS,IAAAC,CAAAA,CAAK,CAAIR,CAAAA,CAAAA,EAAA,KAAAA,CAAW,CAAA,EAE7CS,CAAAA,CAAAA,CAAA,IAAKpB,CAAAA,CAAAA,CAAAC,GAAL,IACAmB,CAAAA,IAAAA,CAAAA,CAAAA,CAAAA,CAAA,IAAKpB,CAAAA,CAAAA,CAAAE,CAAL,CAAA,CAAA,IAAA,CAAA,IAAA,CAA8B,CAAE,MAAAe,CAAAA,CAAAA,CAAQ,OAAAC,CAAAA,CAAQ,CAClD,EAAA,CAAA,CAAA,CAqPA,QAAWN,CAAwC,CAAA,CACjD,OAAOI,CAAAA,CAAA,IAAKrB,CAAAA,CAAAA,CAAAA,CAAU,QAAQiB,CAAM,CACtC,CAUA,GAAA,CACES,CACAC,CAAAA,CAAAA,CACAV,EACY,CACZ,OAAOI,CAAA,CAAA,IAAA,CAAKrB,CAAU,CAAA,CAAA,GAAA,CAAI0B,EAAKE,CAAA,CAAA,CAAE,MAAAD,CAAAA,CAAAA,CAAAA,CAAWV,CAAQ,CAAA,CACtD,CAUA,IAAA,CAAiBS,CAAaG,CAAAA,CAAAA,CAAUZ,CAA4C,CAAA,CAClF,OAAOI,CAAAA,CAAA,KAAKrB,CAAU,CAAA,CAAA,IAAA,CAAK0B,CAAKG,CAAAA,CAAAA,CAAMZ,CAAM,CAC9C,CAUA,GAAgBS,CAAAA,CAAAA,CAAaG,CAAUZ,CAAAA,CAAAA,CAA4C,CACjF,OAAOI,EAAA,IAAKrB,CAAAA,CAAAA,CAAAA,CAAU,GAAI0B,CAAAA,CAAAA,CAAKG,CAAMZ,CAAAA,CAAM,CAC7C,CAUA,MAAA,CAAmBS,CAAaT,CAAAA,CAAAA,CAA4C,CAC1E,OAAOI,EAAA,IAAKrB,CAAAA,CAAAA,CAAAA,CAAU,MAAO0B,CAAAA,CAAAA,CAAKT,CAAM,CAC1C,CAUA,KAAkBS,CAAAA,CAAAA,CAAaG,CAAUZ,CAAAA,CAAAA,CAA4C,CACnF,OAAOI,EAAA,IAAKrB,CAAAA,CAAAA,CAAAA,CAAU,KAAM0B,CAAAA,CAAAA,CAAKG,CAAMZ,CAAAA,CAAM,CAC/C,CAWA,GACES,CAAAA,CAAAA,CACAC,CACAV,CAAAA,CAAAA,CACY,CACZ,OAAOI,EAAA,IAAKrB,CAAAA,CAAAA,CAAAA,CAAU,GAAI0B,CAAAA,CAAAA,CAAKE,CAAA,CAAA,CAAE,OAAAD,CAAWV,CAAAA,CAAAA,CAAAA,CAAQ,CACtD,CAWA,IAAiBS,CAAAA,CAAAA,CAAaG,EAAUZ,CAA4C,CAAA,CAClF,OAAOI,CAAAA,CAAA,IAAKrB,CAAAA,CAAAA,CAAAA,CAAU,KAAK0B,CAAKG,CAAAA,CAAAA,CAAMZ,CAAM,CAC9C,CAWA,GAAA,CAAgBS,EAAaG,CAAUZ,CAAAA,CAAAA,CAA4C,CACjF,OAAOI,CAAA,CAAA,IAAA,CAAKrB,GAAU,GAAI0B,CAAAA,CAAAA,CAAKG,CAAMZ,CAAAA,CAAM,CAC7C,CAWA,OAAmBS,CAAaT,CAAAA,CAAAA,CAA4C,CAC1E,OAAOI,CAAA,CAAA,IAAA,CAAKrB,CAAU,CAAA,CAAA,MAAA,CAAO0B,CAAKT,CAAAA,CAAM,CAC1C,CAWA,KAAkBS,CAAAA,CAAAA,CAAaG,EAAUZ,CAA4C,CAAA,CACnF,OAAOI,CAAAA,CAAA,IAAKrB,CAAAA,CAAAA,CAAAA,CAAU,MAAM0B,CAAKG,CAAAA,CAAAA,CAAMZ,CAAM,CAC/C,CACF,EAvaEjB,EAAA,IAKAC,OAAAA,CAAAA,CAAAA,CAAA,IAKAC,OAAAA,CAAAA,CAAAA,CAAA,IAMAC,OAAAA,CAAAA,CAAAA,CAAA,YAKAC,CAAA,CAAA,IAAA,OAAA,CAzBKC,CAAA,CAAA,IAAA,OAAA,CAmDLC,CAAuB,CAAA,UAAG,CACxBe,CAAA,CAAA,IAAA,CAAKrB,CAAU,CAAA,CAAA,YAAA,CAAa,OAAQ,CAAA,GAAA,CACjC8B,IACCL,CAAA,CAAA,IAAA,CAAKpB,CAAAG,CAAAA,CAAAA,CAAAA,CAAL,IAAkBsB,CAAAA,IAAAA,CAAAA,CAAAA,CAAAA,CAClBL,EAAA,IAAKpB,CAAAA,CAAAA,CAAAI,CAAL,CAAA,CAAA,IAAA,CAAA,IAAA,CAAuBqB,CAChBA,CAAAA,CAAAA,CAAAA,CAAAA,CAERC,CAAoB,EAAA,OAAA,CAAQ,MAAOA,CAAAA,CAAG,CACzC,EACF,CAKAxB,CAAAA,CAAAA,CAAwB,SAACS,CAAiC,CAAA,CACxD,GAAM,CAAE,OAAAO,CAAAA,CAAQ,EAAIP,CACpBK,CAAAA,CAAAA,CAAA,IAAKrB,CAAAA,CAAAA,CAAAA,CAAU,YAAa,CAAA,QAAA,CAAS,IAClCgC,CAA0B,EAAA,CA5FjC,IAAAC,CAAAA,CA6FQ,GAAIA,CAAAA,CAAAA,CAAAD,EAAI,MAAJ,GAAA,IAAA,EAAAC,CAAY,CAAA,WAAA,CACd,OAAOD,CAAAA,CAET,GAAM,CAAE,IAAA,CAAAH,CAAM,CAAA,GAAA,CAAAK,CAAI,CAAA,CAAIF,EAAI,IAE1B,CAAA,OAAAP,CAAA,CAAA,IAAA,CAAKpB,CAAAK,CAAAA,CAAAA,CAAAA,CAAL,UAAoBwB,CAAKX,CAAAA,CAAAA,CAAAA,CAElBM,CACT,CAAA,CACOE,CAAuBX,EAAAA,CAAAA,CAAA,IAC5B,CAAA,IAAA,CAAA,WAAA,CAAA,GAAM,CAAE,QAAA,CAAAe,CAAU,CAAA,MAAA,CAAAlB,CAAO,CAAA,CAAIc,EAG7B,GAAIhC,CAAAA,CAAM,QAASgC,CAAAA,CAAG,CACpB,CAAA,MAAMA,EAIR,GAAId,CAAAA,EAAA,IAAAA,EAAAA,CAAAA,CAAQ,gBACV,CAAA,MAAAE,EAAA,IAAKhB,CAAAA,CAAAA,CAAqB,KACpBgC,CAAAA,CAAAA,CAAAA,EAAA,IAAAA,CAAAA,MAAAA,CAAAA,CAAAA,CAAU,KAAK,IAIvB,CAAA,GAAId,CAAA,CAAA,IAAA,CAAKlB,CACP,CAAA,CAAA,OAAOsB,EAAA,IAAKpB,CAAAA,CAAAA,CAAAM,CAAL,CAAA,CAAA,IAAA,CAAA,IAAA,CAAqBM,CAI9B,CAAA,CAAA,IAAMmB,EAAc,MAAMX,CAAAA,CAAA,IAAKpB,CAAAA,CAAAA,CAAAO,CAAL,CAAA,CAAA,IAAA,CAAA,IAAA,CAAuBuB,EAAUnB,CAC3D,CAAA,CAAA,GAAIoB,CACF,CAAA,OAAOA,CAGT,CAAA,MAAMD,CAAA,EAAA,IAAA,CAAA,MAAA,CAAAA,CAAU,CAAA,IAClB,CACF,CAAA,EACF,CAKA3B,CAAAA,CAAAA,CAAY,SAACsB,CAAiC,CAAA,CAC5CA,CAAI,CAAA,OAAA,CAAQ,iBAAiB,CAAA,CAAIO,UAAU,cAAe,GAC5D,CAKA5B,CAAAA,CAAAA,CAAiB,SAACqB,CAAAA,CAAiC,CAC7CQ,SAAU,CAAA,eAAA,EACZR,GAAAA,CAAAA,CAAI,OAAQ,CAAA,aAAA,CAAgBQ,UAAU,gBAAiB,EAAA,EAE3D,CASA5B,CAAAA,CAAAA,CAAc,SACZwB,CAAAA,CACAX,EACAgB,CAA0B,CAAA,SAAA,CAC1B,CACI,CAAChB,CAAW,EAAA,CAACW,IAGb,KAAM,CAAA,OAAA,CAAQA,CAAG,CAAA,CACnBA,CAAI,CAAA,OAAA,CAASM,GAAMjB,CAAQgB,CAAAA,CAAW,CAAEC,CAAAA,CAAC,CAAC,CAAA,CAE1CjB,CAAQgB,CAAAA,CAAW,CAAEL,CAAAA,CAAG,CAE5B,EAAA,CAAA,CAKAvB,CAAe,CAAA,SAACM,EAA6B,CAC3C,OAAO,IAAI,OAAA,CAASwB,CAAY,EAAA,CAC9BpB,EAAA,IAAKjB,CAAAA,CAAAA,CAAAA,CAAc,IAAK,CAAA,CAAE,MAAAa,CAAAA,CAAAA,CAAQ,QAAAwB,CAAQ,CAAC,EAC7C,CAAC,CACH,CAAA,CAUM7B,EAAiB,SAACoB,CAAAA,CAAwBhB,CAAkC,CAAA,CAAA,OAAAI,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,WAAA,CA3LpF,IAAAa,CAAAS,CAAAA,CAAAA,CA4LI,GAAM,CAAE,MAAAC,CAAAA,CAAAA,CAAS,EAAG,IAAAd,CAAAA,CAAAA,CAAM,MAAAZ,CAAAA,CAAO,CAAIe,CAAAA,CAAAA,EAAA,KAAAA,CAAO,CAAA,EACtC,CAAA,CAAE,OAAAT,CAAAA,CAAAA,CAAS,MAAAD,CAAAA,CAAO,CAAIN,CAAAA,CAAAA,EAAA,IAAAA,CAAAA,CAAAA,CAAW,EAAC,CAOlC4B,GAAWF,CAAAT,CAAAA,CAAAA,CAAAA,CAAAJ,CAAA,EAAA,IAAA,CAAA,MAAA,CAAAA,CAAM,CAAA,GAAA,GAAN,KAAAI,CAAapC,CAAAA,CAAAA,CAAgB,GAAI8C,CAAAA,CAAM,CAAvC,GAAA,IAAA,CAAAD,EAA4C,gBAE7D,CAAA,OAAQC,CAAQ,EACd,KAAK7C,cAAAA,CAAe,aAAc,CAChC,GAAI,CAIF,GAAIuB,CAAA,CAAA,IAAA,CAAKpB,GAAiB,kBAAoB,CAAA,CAC5C,IAAMmC,CAAAA,CAAc,MAAMX,CAAAA,CAAA,KAAKpB,CAAAS,CAAAA,CAAAA,CAAAA,CAAL,IAAcG,CAAAA,IAAAA,CAAAA,CAAAA,CAAAA,CACxC,GAAImB,CAAAA,CACF,OAAOA,CAEX,CACF,CAAQS,MAAAA,CAAAA,CAAA,EAGRpB,CAAA,CAAA,IAAA,CAAKpB,CAAAK,CAAAA,CAAAA,CAAAA,CAAL,IAAoBkC,CAAAA,IAAAA,CAAAA,CAAAA,CAAUrB,CAAS,CAAA,OAAA,CAAA,CACvCE,EAAA,IAAKpB,CAAAA,CAAAA,CAAAQ,CAAL,CAAA,CAAA,IAAA,CAAA,IAAA,CAAyBS,CACzB,CAAA,CAAA,KACF,CACA,KAAKxB,cAAAA,CAAe,SAAW,CAAA,CAC7BwB,CAAA,EAAA,IAAA,EAAAA,EAAQ,QAAS,CAAA,CAAE,EAAI,CAAA,MAAA,CAAQ,OAAS,CAAA,IAAK,GAC7CG,CAAA,CAAA,IAAA,CAAKpB,CAAAK,CAAAA,CAAAA,CAAAA,CAAL,IAAoBkC,CAAAA,IAAAA,CAAAA,CAAAA,CAAUrB,EAAS,OACvC,CAAA,CAAA,KACF,CACA,KAAKzB,cAAe,CAAA,mBAAA,CACpB,KAAKA,cAAe,CAAA,UAAA,CACpB,KAAKA,cAAAA,CAAe,cAAgB,CAAA,CAClCwB,GAAA,IAAAA,EAAAA,CAAAA,CAAQ,QAAS,CAAA,CAAE,EAAI,CAAA,MAAA,CAAQ,OAAS,CAAA,IAAK,CAC7CG,CAAAA,CAAAA,CAAAA,CAAA,IAAKpB,CAAAA,CAAAA,CAAAK,CAAL,CAAA,CAAA,IAAA,CAAA,IAAA,CAAoBkC,EAAUrB,CAAS,CAAA,OAAA,CAAA,CACvC,KACF,CACA,QAAS,CACPE,EAAA,IAAKpB,CAAAA,CAAAA,CAAAK,CAAL,CAAA,CAAA,IAAA,CAAA,IAAA,CAAoBkC,CAAUrB,CAAAA,CAAAA,CAAS,SACvC,KACF,CACF,CACA,OAAO,MACT,CAAA,CAAA,CAAA,CAQAV,EAAmB,SAACS,CAAAA,CAA0C,CAC5D,GAAM,CAAE,uBAAA,CAAAwB,EAA0B,QAAS,CAAA,CAAIzB,CAAA,CAAA,IAAA,CAAKpB,CAEpDqC,CAAAA,CAAAA,SAAAA,CAAU,kBACVA,CAAAA,SAAAA,CAAU,iBAAkB,EAAA,CAE5B,IAAMS,CAAAA,CAAczB,GAAA,IAAAA,CAAAA,MAAAA,CAAAA,CAAAA,CAAQ,KAAM,CAAA,QAAA,CAAS,QAEvCyB,CAAAA,CAAAA,GAAgBD,CAClBxB,GAAAA,CAAAA,EAAA,IAAAA,EAAAA,CAAAA,CAAQ,QAAS,CAAA,CACf,EAAIwB,CAAAA,CAAAA,CACJ,QAAS,IACT,CAAA,MAAA,CAAQC,CAAgBD,GAAAA,CAAAA,CAA0B,MAAY,CAAA,CAAE,SAAUC,CAAY,CACxF,CAEJ,CAAA,EAAA,CAAA,CAUMjC,CAAQ,CAAA,SAACG,EAA6B,CAAAG,OAAAA,CAAAA,CAAA,IAC1CD,CAAAA,IAAAA,CAAAA,WAAAA,CAAAA,CAAAA,CAAA,IAAKhB,CAAAA,CAAAA,CAAqB,MAE1B,IAAM6C,CAAAA,CAAQV,SAAU,CAAA,eAAA,EAElB,CAAA,CAAE,YAAAW,CAAa,CAAA,YAAA,CAAAC,CAAa,CAAA,CAAI,MAAM,IAAA,CAAK,KAC/C,eACA,CAAA,CACE,KAAAF,CAAAA,CACF,CACA,CAAA,CACE,iBAAkB,IACpB,CACF,CAQA,CAAA,GANAV,SAAU,CAAA,cAAA,CAAeW,CAAW,CAAA,CACpCX,SAAU,CAAA,eAAA,CAAgBY,CAAY,CAAA,CAEtC/B,CAAA,CAAA,IAAA,CAAKhB,EAAqB,KAGtBc,CAAAA,CAAAA,CAAAA,CAAQ,CACV,IAAMmB,CAAc,CAAA,MAAM,KAAK,OAAQe,CAAAA,CAAAA,CAAAvB,CAAA,CAAA,EAAA,CAClCX,CADkC,CAAA,CAAA,CAErC,QAASkC,CAAAvB,CAAAA,CAAAA,CAAA,EACJX,CAAAA,CAAAA,CAAO,OADH,CAAA,CAAA,CAEP,aAAeqB,CAAAA,SAAAA,CAAU,gBAAiB,EAC5C,CACF,CAAA,CAAA,CAAC,CAED,CAAA,OAAIjB,EAAA,IAAKjB,CAAAA,CAAAA,CAAAA,CAAc,MAAS,CAAA,CAAA,GAC9BiB,CAAA,CAAA,IAAA,CAAKjB,GAAc,OAASgD,CAAAA,CAAAA,EAASA,CAAK,CAAA,OAAA,CAAQ,IAAK,CAAA,OAAA,CAAQA,EAAK,MAAO,CAAC,CAAC,CAAA,CAC7EjC,CAAA,CAAA,IAAA,CAAKf,CAAgB,CAAA,EAEhBgC,CAAAA,CAAAA,CAAAA,CACT,CACA,OAAO,MACT,CAAA,CAAA,CAAA","file":"index.mjs","sourcesContent":["import { HttpStatusCode } from 'axios'\n\nexport const errorMessageMap = new Map([\n  [HttpStatusCode.Unauthorized, '401: Unauthorized!'],\n  [HttpStatusCode.Forbidden, '403: Forbidden!'],\n  [HttpStatusCode.NotFound, '404: NotFound!'],\n  [HttpStatusCode.MethodNotAllowed, '405: Method Not Allowed!'],\n  [HttpStatusCode.Conflict, '409: Conflict!'],\n  [HttpStatusCode.UnprocessableEntity, '422: Unprocessable Entity!'],\n  [HttpStatusCode.TooManyRequests, '429: Too Many Requests!'],\n  [HttpStatusCode.InternalServerError, '500: Internal Server Error!'],\n  [HttpStatusCode.BadRequest, '502: Bad Gateway!'],\n  [HttpStatusCode.BadGateway, '504: Gateway Timeout!']\n])\n","import { AuthUtils, LangUtils } from '@bit-ocean/utils'\nimport type { NoticeType } from 'antd/es/message/interface'\nimport type {\n  AxiosError,\n  AxiosInstance,\n  AxiosRequestConfig,\n  AxiosResponse,\n  CreateAxiosDefaults,\n  InternalAxiosRequestConfig\n} from 'axios'\nimport axios, { HttpStatusCode } from 'axios'\n\nimport { errorMessageMap } from './error-message.map'\nimport type {\n  AxiosInstanceOptions,\n  InterceptorInitOptions,\n  PendingRequest,\n  R,\n  Tokens\n} from './types'\n\naxios.defaults.timeout = 30_000\naxios.defaults.headers.common['Content-Type'] = 'application/json;charset=utf-8'\n\nexport class HttpClient {\n  /**\n   * The instance of Axios.\n   */\n  #instance: AxiosInstance\n\n  /**\n   * The extra custom options for the instance.\n   */\n  #instanceOptions: AxiosInstanceOptions = {}\n\n  /**\n   * The flag to indicate whether the interceptors are loaded.\n   */\n  #interceptorsLoaded = false\n\n  /**\n   * The flag to indicate whether the token is refreshing.\n   * @description If the token is refreshing, the request will be added to the pending list.\n   */\n  #isTokenRefreshing = false\n\n  /**\n   * The pending requests.\n   */\n  #pendingQueue: PendingRequest[] = []\n\n  constructor(options?: AxiosInstanceOptions, config?: CreateAxiosDefaults) {\n    this.#instance = axios.create(config)\n    this.#instanceOptions = options ?? {}\n  }\n\n  /**\n   * Initialize the interceptors.\n   */\n  async initInterceptors(options?: InterceptorInitOptions) {\n    // NOTE: Prevent repeating the initialization.\n    if (this.#interceptorsLoaded) {\n      return\n    }\n    this.#interceptorsLoaded = true\n\n    const { router, message, i18n } = options ?? {}\n\n    this.#initRequestInterceptor()\n    this.#initResponseInterceptor({ router, message })\n  }\n\n  /**\n   * Initialize the request interceptor.\n   */\n  #initRequestInterceptor() {\n    this.#instance.interceptors.request.use(\n      (req: InternalAxiosRequestConfig) => {\n        this.#addLanguage(req)\n        this.#addAuthorization(req)\n        return req\n      },\n      (err: AxiosError) => Promise.reject(err)\n    )\n  }\n\n  /**\n   * Initialize the response interceptor.\n   */\n  #initResponseInterceptor(options: InterceptorInitOptions) {\n    const { message } = options\n    this.#instance.interceptors.response.use(\n      (res: AxiosResponse<R>) => {\n        if (res.config?.rawResponse) {\n          return res\n        }\n        const { data, msg } = res.data\n\n        this.#handleMessage(msg, message)\n\n        return data\n      },\n      async (err: AxiosError<R>) => {\n        const { response, config } = err\n\n        // If the request is canceled, throw the error.\n        if (axios.isCancel(err)) {\n          throw err\n        }\n\n        // Process the refresh token API error.\n        if (config?.isRefreshRequest) {\n          this.#isTokenRefreshing = false\n          throw response?.data.data\n        }\n\n        // If the token is refreshing, add the request to the pending queue.\n        if (this.#isTokenRefreshing) {\n          return this.#pendingRequest(config)\n        }\n\n        // Handle by status code.\n        const newResponse = await this.#handleStatusCode(response, options)\n        if (newResponse) {\n          return newResponse\n        }\n\n        throw response?.data\n      }\n    )\n  }\n\n  /**\n   * Add the current language to the request header.\n   */\n  #addLanguage(req: InternalAxiosRequestConfig) {\n    req.headers['Accept-Language'] = LangUtils.getDefaultLang()\n  }\n\n  /**\n   * Add the authorization to the request header.\n   */\n  #addAuthorization(req: InternalAxiosRequestConfig) {\n    if (AuthUtils.isAuthenticated()) {\n      req.headers.Authorization = AuthUtils.getAuthorization()\n    }\n  }\n\n  /**\n   * Handle the message.\n   * @description\n   * - If the message is an array, show each message.\n   * - If the message is a string, show the message.\n   * - Default message type is `success`.\n   */\n  #handleMessage(\n    msg?: string | string[],\n    message?: InterceptorInitOptions['message'],\n    messageType: NoticeType = 'success'\n  ) {\n    if (!message || !msg) {\n      return\n    }\n    if (Array.isArray(msg)) {\n      msg.forEach((m) => message[messageType](m))\n    } else {\n      message[messageType](msg)\n    }\n  }\n\n  /**\n   * Add the request to the pending queue.\n   */\n  #pendingRequest(config?: AxiosRequestConfig) {\n    return new Promise((resolve) => {\n      this.#pendingQueue.push({ config, resolve })\n    })\n  }\n\n  /**\n   * Error handling by status code.\n   * @description\n   * - If the status code is `401`, handle the unauthorized logic.\n   * - If the status code is `403`, redirect to the `403` page.\n   * - If the status code is `500`, redirect to the `500` page.\n   * - If the status code is not in the above, do nothing.\n   */\n  async #handleStatusCode(res?: AxiosResponse<R>, options?: InterceptorInitOptions) {\n    const { status = 0, data, config } = res ?? {}\n    const { message, router } = options ?? {}\n\n    /**\n     * 1. Use the `msg` from the response data.\n     * 2. Check the `errorMessageMap` by status code.\n     * 3. Use the default message `Unknown error!`.\n     */\n    const errorMsg = data?.msg ?? errorMessageMap.get(status) ?? 'Unknown error!'\n\n    switch (status) {\n      case HttpStatusCode.Unauthorized: {\n        try {\n          /**\n           * If the refresh token logic is enabled, try to refresh the token.\n           */\n          if (this.#instanceOptions.enableRefreshToken) {\n            const newResponse = await this.#refresh(config)\n            if (newResponse) {\n              return newResponse\n            }\n          }\n        } catch {\n          //\n        }\n        this.#handleMessage(errorMsg, message, 'error')\n        this.#handleUnauthorized(router)\n        break\n      }\n      case HttpStatusCode.Forbidden: {\n        router?.navigate({ to: '/403', replace: true })\n        this.#handleMessage(errorMsg, message, 'error')\n        break\n      }\n      case HttpStatusCode.InternalServerError:\n      case HttpStatusCode.BadGateway:\n      case HttpStatusCode.GatewayTimeout: {\n        router?.navigate({ to: '/500', replace: true })\n        this.#handleMessage(errorMsg, message, 'error')\n        break\n      }\n      default: {\n        this.#handleMessage(errorMsg, message, 'error')\n        break\n      }\n    }\n    return false\n  }\n\n  /**\n   * Handle the unauthorized logic.\n   * @description\n   * - Clear the access token and refresh token.\n   * - Redirect to the public page (`/login` by default) with query `?redirect=${currentPath}`.\n   */\n  #handleUnauthorized(router: InterceptorInitOptions['router']) {\n    const { unauthorizedRedirectUrl = '/login' } = this.#instanceOptions\n\n    AuthUtils.clearAccessToken()\n    AuthUtils.clearRefreshToken()\n\n    const currentPath = router?.state.location.pathname\n\n    if (currentPath !== unauthorizedRedirectUrl) {\n      router?.navigate({\n        to: unauthorizedRedirectUrl,\n        replace: true,\n        search: currentPath === unauthorizedRedirectUrl ? undefined : { redirect: currentPath }\n      })\n    }\n  }\n\n  /**\n   * Refresh the token.\n   * @description\n   * - Get the refresh token from the local storage.\n   * - Send a request to the refresh token API.\n   * - Set the new access token and refresh token.\n   * - Retry the current request and pending requests after get new tokens.\n   */\n  async #refresh(config?: AxiosRequestConfig) {\n    this.#isTokenRefreshing = true\n\n    const token = AuthUtils.getRefreshToken()\n\n    const { accessToken, refreshToken } = await this.POST<Tokens>(\n      '/auth/refresh',\n      {\n        token\n      },\n      {\n        isRefreshRequest: true\n      }\n    )\n\n    AuthUtils.setAccessToken(accessToken)\n    AuthUtils.setRefreshToken(refreshToken)\n\n    this.#isTokenRefreshing = false\n\n    // Retry the current request after get new tokens.\n    if (config) {\n      const newResponse = await this.request({\n        ...config,\n        headers: {\n          ...config.headers,\n          Authorization: AuthUtils.getAuthorization()\n        }\n      })\n\n      if (this.#pendingQueue.length > 0) {\n        this.#pendingQueue.forEach((task) => task.resolve(this.request(task.config!)))\n        this.#pendingQueue = []\n      }\n      return newResponse\n    }\n    return false\n  }\n\n  /**\n   * The method to send a request.\n   * @example\n   * ```ts\n   * const httpClient = new HttpClient()\n   * httpClient.request({ url: '/api/users', method: 'GET' })\n   * ```\n   */\n  request<T>(config: AxiosRequestConfig): Promise<T> {\n    return this.#instance.request(config)\n  }\n\n  /**\n   * The method to send a `GET` request.\n   * @example\n   * ```ts\n   * const httpClient = new HttpClient()\n   * httpClient.GET('/api/users')\n   * ```\n   */\n  get<T, D = any>(\n    url: string,\n    params?: Record<string, any>,\n    config?: AxiosRequestConfig<D>\n  ): Promise<T> {\n    return this.#instance.get(url, { params, ...config })\n  }\n\n  /**\n   * The method to send a `POST` request.\n   * @example\n   * ```ts\n   * const httpClient = new HttpClient()\n   * httpClient.POST('/api/users', { id: 1, name: 'Bruce' })\n   * ```\n   */\n  post<T, D = any>(url: string, data?: D, config?: AxiosRequestConfig<D>): Promise<T> {\n    return this.#instance.post(url, data, config)\n  }\n\n  /**\n   * The method to send a `PUT` request.\n   * @example\n   * ```ts\n   * const httpClient = new HttpClient()\n   * httpClient.PUT('/api/users/1', { name: 'Bruce' })\n   * ```\n   */\n  put<T, D = any>(url: string, data?: D, config?: AxiosRequestConfig<D>): Promise<T> {\n    return this.#instance.put(url, data, config)\n  }\n\n  /**\n   * The method to send a `DELETE` request.\n   * @example\n   * ```ts\n   * const httpClient = new HttpClient()\n   * httpClient.DELETE('/api/users/1')\n   * ```\n   */\n  delete<T, D = any>(url: string, config?: AxiosRequestConfig<D>): Promise<T> {\n    return this.#instance.delete(url, config)\n  }\n\n  /**\n   * The method to send a `PATCH` request.\n   * @example\n   * ```ts\n   * const httpClient = new HttpClient()\n   * httpClient.PATCH('/api/users/1', { name: 'Bruce' })\n   * ```\n   */\n  patch<T, D = any>(url: string, data?: D, config?: AxiosRequestConfig<D>): Promise<T> {\n    return this.#instance.patch(url, data, config)\n  }\n\n  /**\n   * The method to send a `GET` request.\n   * @description In order to highlight the method of request, also support the upper case methods.\n   * @example\n   * ```ts\n   * const httpClient = new HttpClient()\n   * httpClient.GET('/api/users')\n   * ```\n   */\n  GET<T, D = any>(\n    url: string,\n    params?: Record<string, any>,\n    config?: AxiosRequestConfig<D>\n  ): Promise<T> {\n    return this.#instance.get(url, { params, ...config })\n  }\n\n  /**\n   * The method to send a `POST` request.\n   * @description In order to highlight the method of request, also support the upper case methods.\n   * @example\n   * ```ts\n   * const httpClient = new HttpClient()\n   * httpClient.POST('/api/users', { id: 1, name: 'Bruce' })\n   * ```\n   */\n  POST<T, D = any>(url: string, data?: D, config?: AxiosRequestConfig<D>): Promise<T> {\n    return this.#instance.post(url, data, config)\n  }\n\n  /**\n   * The method to send a `PUT` request.\n   * @description In order to highlight the method of request, also support the upper case methods.\n   * @example\n   * ```ts\n   * const httpClient = new HttpClient()\n   * httpClient.PUT('/api/users/1', { name: 'Bruce' })\n   * ```\n   */\n  PUT<T, D = any>(url: string, data?: D, config?: AxiosRequestConfig<D>): Promise<T> {\n    return this.#instance.put(url, data, config)\n  }\n\n  /**\n   * The method to send a `DELETE` request.\n   * @description In order to highlight the method of request, also support the upper case methods.\n   * @example\n   * ```ts\n   * const httpClient = new HttpClient()\n   * httpClient.DELETE('/api/users/1')\n   * ```\n   */\n  DELETE<T, D = any>(url: string, config?: AxiosRequestConfig<D>): Promise<T> {\n    return this.#instance.delete(url, config)\n  }\n\n  /**\n   * The method to send a `PATCH` request.\n   * @description In order to highlight the method of request, also support the upper case methods.\n   * @example\n   * ```ts\n   * const httpClient = new HttpClient()\n   * httpClient.PATCH('/api/users/1', { name: 'Bruce' })\n   * ```\n   */\n  PATCH<T, D = any>(url: string, data?: D, config?: AxiosRequestConfig<D>): Promise<T> {\n    return this.#instance.patch(url, data, config)\n  }\n}\n"]}