UNPKG

axios-retryer

Version:

TypeScript-first Axios retry library with concurrency limits, request priority, token refresh, response caching, and circuit breaker plugins.

2 lines (1 loc) 4.61 kB
"use strict";function e(e){if(e)return e.__axiosRetryer}const t=["authorization","x-api-key","api-key","apikey","password","x-auth-token","token","refresh-token","x-refresh-token","secret","x-api-secret","client-secret","x-client-secret","access-token","api-token"],i=["password","token","accessToken","access_token","refreshToken","refresh_token","secret","apiKey","api_key","apiSecret","api_secret","clientSecret","client_secret","credentials","credential","private_key","privateKey"],s={sensitiveHeaders:[],sensitiveFields:[],redactionChar:"*",sanitizeRequestData:!0,sanitizeResponseData:!0,sanitizeUrlParams:!0,allowedFields:[],allowlistOnly:!0},n=e=>e.repeat(8),r=new Map;function o(e){return Array.from(new Set(e.map(e=>e.trim().toLowerCase()).filter(Boolean))).sort()}function a(e){const s=o([...i,...e.sensitiveFields]),n=o([...t,...e.sensitiveHeaders]),a=o(e.allowedFields),c=[s.join("|"),n.join("|"),a.join("|")].join("::"),l=r.get(c);if(l)return l;const d={sensitiveFields:s,sensitiveFieldsSet:new Set(s),sensitiveHeaders:n,sensitiveHeadersSet:new Set(n),allowedFieldsSet:new Set(a)};return r.set(c,d),d}function c(e,t){return t.has(e.toLowerCase())}function l(e,t,i){const s=e.toLowerCase();if(t.has(s))return!0;for(const e of i)if(s.includes(e))return!0;return!1}function d(e,t={}){if(!e)return e;const i={...s,...t},r=a(i),o=n(i.redactionChar),d=new WeakMap,u=(e,t)=>{if(null==e)return e;if("object"!=typeof e)return i.allowlistOnly?t&&c(t,r.allowedFieldsSet)?e:o:e;if(e instanceof Date)return!i.allowlistOnly||t&&c(t,r.allowedFieldsSet)?new Date(e.getTime()):o;const s=d.get(e);if(s)return s;if(Array.isArray(e)){const t=[];return d.set(e,t),e.forEach((e,i)=>{t[i]=u(e)}),t}const n={};return d.set(e,n),Object.keys(e).forEach(t=>{const s=e[t];n[t]=l(t,r.sensitiveFieldsSet,r.sensitiveFields)?o:s&&"object"==typeof s?u(s,t):!i.allowlistOnly||c(t,r.allowedFieldsSet)?s:o}),n};return u(e)}function u(e,t={}){if(!e)return e;const i={...s,...t},r=a(i),o=n(i.redactionChar),c={...e};for(const e of Object.keys(c)){const t=e.toLowerCase();(r.sensitiveHeadersSet.has(t)||r.sensitiveHeaders.some(e=>t.includes(e)))&&(c[e]=o)}return c}function p(e,t={}){if(!e)return e;const i={...s,...t};if(!i.sanitizeUrlParams)return e;const r=a(i),o=n(i.redactionChar);try{if(!e.includes("?"))return e;const t=e.indexOf("#"),i=-1===t?"":e.slice(t),s=-1===t?e:e.slice(0,t),n=s.indexOf("?");if(-1===n)return e;const a=s.slice(0,n),c=s.slice(n+1);if(!c)return e;const d=new URLSearchParams(c);let u=!1;const p=new Set;return d.forEach((e,t)=>{p.add(t)}),p.forEach(e=>{l(e,r.sensitiveFieldsSet,r.sensitiveFields)&&(d.set(e,o),u=!0)}),u?`${a}?${d.toString()}${i}`:e}catch{return e}}class h{constructor(e={}){this.name="DebugSanitizationPlugin",this.version="1.0.0",this.interceptorIdReq=null,this.interceptorIdRes=null,this.sanitizeOptions=function(e={}){var t;return null!==(t=e.sanitizeOptions)&&void 0!==t?t:{}}(e)}initialize(e){this.context=e,this.interceptorIdReq=e.axiosInstance.interceptors.request.use(e=>(this.logSanitizedRequest(e),e)),this.interceptorIdRes=e.axiosInstance.interceptors.response.use(void 0,e=>(e.config&&this.logSanitizedError(e.config,e),Promise.reject(e)))}onBeforeDestroyed(e){null!==this.interceptorIdReq&&e.axiosInstance.interceptors.request.eject(this.interceptorIdReq),null!==this.interceptorIdRes&&e.axiosInstance.interceptors.response.eject(this.interceptorIdRes)}logSanitizedRequest(t){var i,s;const n=e(t);null===(i=this.context.getLogger())||void 0===i||i.debug("[DebugSanitizationPlugin] Sanitized request",{requestId:null==n?void 0:n.requestId,url:p(t.url||"",this.sanitizeOptions),method:null===(s=t.method)||void 0===s?void 0:s.toUpperCase(),headers:u(t.headers,this.sanitizeOptions),priority:null==n?void 0:n.priority})}logSanitizedError(t,i){var s,n,r,o;const a=e(t);null===(s=this.context.getLogger())||void 0===s||s.debug("[DebugSanitizationPlugin] Sanitized error",{requestId:null==a?void 0:a.requestId,url:p(t.url||"",this.sanitizeOptions),method:null===(n=t.method)||void 0===n?void 0:n.toUpperCase(),status:null===(r=i.response)||void 0===r?void 0:r.status,statusText:null===(o=i.response)||void 0===o?void 0:o.statusText,code:i.code,message:i.message,headers:u(t.headers,this.sanitizeOptions),data:!1!==this.sanitizeOptions.sanitizeRequestData?d(t.data,this.sanitizeOptions):void 0,response:i.response?{data:!1!==this.sanitizeOptions.sanitizeResponseData?d(i.response.data,this.sanitizeOptions):void 0,headers:u(i.response.headers,this.sanitizeOptions)}:void 0})}}exports.DebugSanitizationPlugin=h,exports.createDebugSanitizationPlugin=function(e){return new h(e)};