axios-retryer
Version:
axios-retryer is an advanced Axios request manager offering intelligent retry logic with token refresh, concurrency control, priority queuing, and a flexible plugin architecture, all built with TypeScript for robust HTTP client integrations.
2 lines (1 loc) • 25.8 kB
JavaScript
"use strict";var e=require("axios"),t={AUTOMATIC:"automatic",MANUAL:"manual"},r={CRITICAL:4,HIGHEST:3,HIGH:2,MEDIUM:1,LOW:0},i={STATIC:0,LINEAR:1,EXPONENTIAL:2},s=function(){return s=Object.assign||function(e){for(var t,r=1,i=arguments.length;r<i;r++)for(var s in t=arguments[r])Object.prototype.hasOwnProperty.call(t,s)&&(e[s]=t[s]);return e},s.apply(this,arguments)};function n(e,t,r,i){return new(r||(r=Promise))((function(s,n){function o(e){try{a(i.next(e))}catch(e){n(e)}}function u(e){try{a(i.throw(e))}catch(e){n(e)}}function a(e){var t;e.done?s(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(o,u)}a((i=i.apply(e,t||[])).next())}))}function o(e,t){var r,i,s,n={label:0,sent:function(){if(1&s[0])throw s[1];return s[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return o.next=u(0),o.throw=u(1),o.return=u(2),"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function u(u){return function(a){return function(u){if(r)throw new TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(n=0)),n;)try{if(r=1,i&&(s=2&u[0]?i.return:u[0]?i.throw||((s=i.return)&&s.call(i),0):i.next)&&!(s=s.call(i,u[1])).done)return s;switch(i=0,s&&(u=[2&u[0],s.value]),u[0]){case 0:case 1:s=u;break;case 4:return n.label++,{value:u[1],done:!1};case 5:n.label++,i=u[1],u=[0];continue;case 7:u=n.ops.pop(),n.trys.pop();continue;default:if(!(s=n.trys,(s=s.length>0&&s[s.length-1])||6!==u[0]&&2!==u[0])){n=0;continue}if(3===u[0]&&(!s||u[1]>s[0]&&u[1]<s[3])){n.label=u[1];break}if(6===u[0]&&n.label<s[1]){n.label=s[1],s=u;break}if(s&&n.label<s[2]){n.label=s[2],n.ops.push(u);break}s[2]&&n.ops.pop(),n.trys.pop();continue}u=t.call(e,n)}catch(e){u=[6,e],i=0}finally{r=s=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}([u,a])}}}function u(e,t,r){if(r||2===arguments.length)for(var i,s=0,n=t.length;s<n;s++)!i&&s in t||(i||(i=Array.prototype.slice.call(t,0,s)),i[s]=t[s]);return e.concat(i||Array.prototype.slice.call(t))}"function"==typeof SuppressedError&&SuppressedError;var a=function(){function e(e){void 0===e&&(e=!1),this.debugMode=e}return e.prototype.log=function(e,t){console.log("[AXIOS_RETRYER] ".concat(e),t?JSON.stringify(t):"")},e.prototype.error=function(e,t){console.error("[AXIOS_RETRYER] ".concat(e),t)},e.prototype.warn=function(e,t){console.warn("[AXIOS_RETRYER] ".concat(e),t?JSON.stringify(t):"")},e.prototype.debug=function(e,t){this.debugMode&&console.debug("[AXIOS_RETRYER] ".concat(e),t||"")},e}(),c=function(){function e(e,t){void 0===e&&(e=200),this.maxStoreSize=e,this.emit=t,this.requests=[]}return e.prototype.add=function(e){if(this.requests.push(e),this.requests.length>this.maxStoreSize){var t=this.requests.pop();t&&this.emit("onRequestRemovedFromStore",t)}},e.prototype.remove=function(e){var t=e.__requestId;this.requests=this.requests.filter((function(e){return e.__requestId!==t}))},e.prototype.getAll=function(){return this.requests.slice()},e.prototype.clear=function(){this.requests=[]},e}();var l=[408,429,500,502,503,504,[520,527]],h=["GET","HEAD","OPTIONS"],d=function(){function e(e,t,r,s,n){void 0===e&&(e=l),void 0===t&&(t=h),void 0===r&&(r=i.EXPONENTIAL),void 0===s&&(s=["Idempotency-Key"]);var o=this;this.retryableStatuses=e,this.retryableMethods=t,this.backoffType=r,this.idempotencyHeaders=s,this.logger=n,this.getIsRetryable=function(e){var t,r,i,s,n,u;if(!e.response)return null===(t=o.logger)||void 0===t||t.debug("Retrying due to network error"),!0;var a=e.config,c=null===(r=null==a?void 0:a.method)||void 0===r?void 0:r.toLowerCase(),l=e.response.status,h=null!==(i=null==a?void 0:a.__retryableStatuses)&&void 0!==i?i:o.retryableStatuses;return c&&o.retryableMethodsLower.includes(c)&&o.isRetryableStatus(l,h)?(null===(s=o.logger)||void 0===s||s.debug("Retrying request with status ".concat(l," and method ").concat(c)),!0):"post"!==c&&"put"!==c&&"patch"!==c||!o.idempotencyHeaders.some((function(e){var t;return!!(null===(t=a.headers)||void 0===t?void 0:t[e])}))?(null===(u=o.logger)||void 0===u||u.debug("Not retrying request with method ".concat(c," and status ").concat(l)),!1):(null===(n=o.logger)||void 0===n||n.debug("Retrying idempotent request with method ".concat(c)),!0)},this.shouldRetry=function(e,t,r){return o.getIsRetryable(e)&&t<=r},this.getDelay=function(e,t,r){var s,n=function(e,t){var r=0;if(e<=0)return r;switch(t){case i.STATIC:r=1e3;break;case i.LINEAR:r=1e3*e;break;default:r=1e3*Math.pow(2,e-1)}return r}(e,r||o.backoffType);return null===(s=o.logger)||void 0===s||s.debug("Retry delay for attempt ".concat(e,": ").concat(n,"ms; MaxRetries: ").concat(t)),n},this.retryableMethodsLower=this.retryableMethods.map((function(e){return e.toLowerCase()})),this.defaultStatusSet=new Set,this.defaultRanges=[];for(var u=0,a=e;u<a.length;u++){var c=a[u];"number"==typeof c?this.defaultStatusSet.add(c):Array.isArray(c)&&this.defaultRanges.push(c)}}return e.prototype.isRetryableStatus=function(e,t){if(t===this.retryableStatuses)return this.defaultStatusSet.has(e)||this.defaultRanges.some((function(t){var r=t[0],i=t[1];return e>=r&&e<=i}));var r=new Set,i=[];return t.forEach((function(e){"number"==typeof e?r.add(e):Array.isArray(e)&&i.push(e)})),r.has(e)||i.some((function(t){var r=t[0],i=t[1];return e>=r&&e<=i}))},e}(),g=function(){function t(e,t,r,i){void 0===e&&(e=5),void 0===t&&(t=100);var s=this;if(this.waiting=[],this.inProgressCount=0,this.tryDequeue=function(){return n(s,void 0,void 0,(function(){var e,t,r,i=this;return o(this,(function(s){switch(s.label){case 0:return[4,new Promise((function(e){return setTimeout(e,i.queueDelay)}))];case 1:for(s.sent();this.inProgressCount<this.maxConcurrent&&this.waiting.length>0&&(e=this.waiting[0],t=e.config,r=e.resolve,this.isCriticalRequest(t)||!this.hasActiveCriticalRequests());)this.waiting.shift(),this.inProgressCount++,r(t);return[2]}}))}))},e<1)throw new Error("maxConcurrent must be >= 1. Received: ".concat(e));this.maxConcurrent=e,this.queueDelay=t,this.hasActiveCriticalRequests=r,this.isCriticalRequest=i}return t.prototype.enqueue=function(e){var t=this;return new Promise((function(r,i){var s={config:e,resolve:r,reject:i};t.insertByPriority(s),t.tryDequeue()}))},t.prototype.markComplete=function(){this.inProgressCount=Math.max(0,this.inProgressCount-1),this.tryDequeue()},t.prototype.getWaitingCount=function(){return this.waiting.length},t.prototype.getWaiting=function(){return u([],this.waiting,!0)},Object.defineProperty(t.prototype,"isBusy",{get:function(){return 0===this.waiting.length&&0===this.inProgressCount},enumerable:!1,configurable:!0}),t.prototype.cancelQueuedRequest=function(t){var r=this.waiting.findIndex((function(e){return e.config.__requestId===t}));if(-1===r)return!1;var i=this.waiting.splice(r,1)[0];return i.reject(new e.AxiosError("Request is cancelled ID: ".concat(t),"REQUEST_CANCELED",i.config)),!0},t.prototype.insertByPriority=function(e){for(var t=0,r=this.waiting.length-1;t<=r;){var i=t+r>>1;this.comparePriority(e,this.waiting[i])<0?r=i-1:t=i+1}this.waiting.splice(t,0,e)},t.prototype.comparePriority=function(e,t){var i,s,n,o,u=null!==(i=e.config.__priority)&&void 0!==i?i:r.MEDIUM,a=null!==(s=t.config.__priority)&&void 0!==s?s:r.MEDIUM;return u!==a?a-u:(null!==(n=e.config.__timestamp)&&void 0!==n?n:0)-(null!==(o=t.config.__timestamp)&&void 0!==o?o:0)},t}(),f={MODE:t.AUTOMATIC,RETRIES:3,THROW_ON_FAILED_RETRIES:!0,THROW_ON_CANCEL:!0,DEBUG:!1,MAX_REQUESTS_TO_STORE:200,MAX_CONCURRENT_REQUESTS:5},p={totalRequests:0,successfulRetries:0,failedRetries:0,completelyFailedRequests:0,canceledRequests:0,completelyFailedCriticalRequests:0,errorTypes:{network:0,server5xx:0,client4xx:0,cancelled:0},retryAttemptsDistribution:{},retryPrioritiesDistribution:{},requestCountsByPriority:{},queueWaitDuration:0,retryDelayDuration:0},y={total:0,successes:0,failures:0},R=function(){function i(e){void 0===e&&(e={});var i,l,h,R,m,v,q,_,b=this;this.inRetryProgress=!1,this.requestIndex=0,this.listeners={},this.requestInterceptorId=null,this.responseInterceptorId=null,this.setupInterceptors=function(){b.logger.debug("Setting up Axios interceptors"),b.requestInterceptorId=b._axiosInstance.interceptors.request.use(b.onRequest,b.onRequestError),b.responseInterceptorId=b._axiosInstance.interceptors.response.use(b.onSuccessfulResponse,b.handleError)},this.onRequestError=function(e){return b.logger.error("Request interceptor error",{message:e.message,code:e.code,stack:e.stack}),Promise.reject(e)},this.onRequest=function(e){return n(b,void 0,void 0,(function(){var t,i,s,n,u,a,c,l;return o(this,(function(o){switch(o.label){case 0:return t=new AbortController,i=null!==(a=e.__requestId)&&void 0!==a?a:this.generateRequestId(e.url),e.__requestId=i,e.__timestamp=Date.now(),e.__priority=null!==(c=e.__priority)&&void 0!==c?c:r.MEDIUM,e.signal=t.signal,t.__priority=e.__priority,this.activeRequests.set(i,t),this.metrics.totalRequests++,this.logger.debug("New request created",{requestId:i,url:e.url,method:null===(l=e.method)||void 0===l?void 0:l.toUpperCase(),priority:e.__priority}),this.metrics.requestCountsByPriority[e.__priority]||(this.metrics.requestCountsByPriority[e.__priority]=0),this.metrics.requestCountsByPriority[e.__priority]++,s=this.requestQueue.getWaitingCount(),[4,this.requestQueue.enqueue(e)];case 1:return n=o.sent(),u=Date.now()-e.__timestamp,this.logger.debug("Request enqueued",{requestId:i,queueWaitMs:u,queueSizeBefore:s,queueSizeAfter:this.requestQueue.getWaitingCount()}),this.metrics.queueWaitDuration+=u,this.triggerAndEmit("onMetricsUpdated",this.getMetrics()),[2,n]}}))}))},this.handleRetryProcessFinish=function(){if(0===b.activeRequests.size&&b.inRetryProgress){var e=b.requestStore.getAll()||[],t=e.length,r=e.filter(b.isCriticalRequest).length;b.metrics.completelyFailedRequests+=t,b.metrics.completelyFailedCriticalRequests+=r,b.logger.debug("Retry process finished",{failedRequests:t,failedCriticalRequests:r}),b.triggerAndEmit("onRetryProcessFinished",b.getMetrics()),b.inRetryProgress=!1}},this.onSuccessfulResponse=function(e){var t=e.config,r=t.__requestId;return r&&b.activeRequests.delete(r),b.requestQueue.markComplete(),b.logger.debug("Request succeeded",{requestId:r,status:e.status,retrying:t.__isRetrying}),t.__isRetrying&&null!=t.__priority&&(b.metrics.successfulRetries++,b.metrics.retryPrioritiesDistribution[t.__priority]||(b.metrics.retryPrioritiesDistribution[t.__priority]=s({},y)),b.metrics.retryPrioritiesDistribution[t.__priority].successes++,b.triggerAndEmit("afterRetry",t,!0),t.__isRetrying=!1),b.isCriticalRequest(t)&&!b.checkCriticalRequests()&&b.triggerAndEmit("onAllCriticalRequestsResolved"),b.handleRetryProcessFinish(),b.triggerAndEmit("onMetricsUpdated",b.getMetrics()),e},this.handleError=function(e){return n(b,void 0,void 0,(function(){var i,n,u,a,c,l,h;return o(this,(function(o){return i=!1,n=e.config,this.triggerAndEmit("onMetricsUpdated",this.getMetrics()),n&&0!==Object.values(n).length?("REQUEST_CANCELED"===e.code&&(i=!0),this.requestQueue.markComplete(),this.logger.warn("Request failed",{requestId:n.__requestId,status:null===(l=e.response)||void 0===l?void 0:l.status,code:e.code,attempt:n.__retryAttempt||0}),!i&&n.__isRetrying&&null!=n.__priority&&(this.metrics.failedRetries++,e.response?e.response.status>=500?this.metrics.errorTypes.server5xx++:e.response.status>=400&&this.metrics.errorTypes.client4xx++:this.metrics.errorTypes.network++,this.metrics.retryPrioritiesDistribution[n.__priority]||(this.metrics.retryPrioritiesDistribution[n.__priority]=s({},y)),this.metrics.retryPrioritiesDistribution[n.__priority].failures++,this.triggerAndEmit("afterRetry",n,!1)),n.__priority=null!==(h=n.__priority)&&void 0!==h?h:r.MEDIUM,u=n.__requestRetries||this.retries,a=n.__requestMode||this.mode,c=(n.__retryAttempt||0)+1,a===t.AUTOMATIC&&this.retryStrategy.shouldRetry(e,c,u)?(this.logger.debug("Auto-retrying request",{requestId:n.__requestId,attempt:c,maxRetries:u}),[2,this.scheduleRetry(n,c,u,i)]):[2,this.handleNoRetriesAction(e,this.retryStrategy.getIsRetryable(e))]):(this.logger.error("Handling error without valid config",{error:e.message}),[2,Promise.reject(e)])}))}))},this.isCriticalRequest=function(e){return null!=b.blockingQueueThreshold&&Number(e.__priority)>=b.blockingQueueThreshold},this.checkCriticalRequests=function(){var e=!1;return b.activeRequests.forEach((function(t){b.isCriticalRequest(t)&&(e=!0)})),e},this.emit=function(e){for(var t,r=[],i=1;i<arguments.length;i++)r[i-1]=arguments[i];null===(t=b.listeners[e])||void 0===t||t.forEach((function(e){e.apply(void 0,r)}))},this.triggerAndEmit=function(e){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];b.triggerHook.apply(b,u([e],t,!1)),b.emit.apply(b,u([e],t,!1))},this.use=function(e,t){if(void 0===t&&(t=!0),b.plugins.has(e.name))throw b.logger.error("Plugin already registered",{plugin:e.name}),new Error('Plugin "'.concat(e.name,'" is already registered.'));if(!b.validatePluginVersion(e.version))throw b.logger.error("Invalid plugin version",{version:e.version}),new Error("Invalid plugin version format: ".concat(e.version));b.plugins.set(e.name,e),t&&(null!==b.requestInterceptorId&&b.axiosInstance.interceptors.request.eject(b.requestInterceptorId),null!==b.responseInterceptorId&&b.axiosInstance.interceptors.response.eject(b.responseInterceptorId)),e.initialize(b),t&&b.setupInterceptors(),b.logger.log("Plugin registered",{name:e.name,version:e.version})},this.unuse=function(e){var t=b.plugins.get(e);return t?("function"==typeof t.onBeforeDestroyed&&t.onBeforeDestroyed(b),b.plugins.delete(e),b.logger.log("Plugin removed",{name:t.name,version:t.version}),!0):(b.logger.debug("Plugin removal failed - not found",{pluginName:e}),!1)},this.listPlugins=function(){return Array.from(b.plugins.values()).map((function(e){return{name:e.name,version:e.version}}))},this.on=function(e,t){var r;return b.listeners[e]||(b.listeners[e]=[]),null===(r=b.listeners[e])||void 0===r||r.push(t),b.logger.debug("Event listener added",{event:e}),b},this.off=function(e,t){var r=b.listeners[e];if(!r)return!1;var i=r.indexOf(t);return-1!==i&&(r.splice(i,1),0===r.length&&delete b.listeners[e],b.logger.debug("Event listener removed",{event:e}),!0)},this.retryFailedRequests=function(){return n(b,void 0,void 0,(function(){var e,t=this;return o(this,(function(r){return e=this.requestStore.getAll(),this.requestStore.clear(),e.length>0&&(this.logger.debug("Starting manual retry process",{count:e.length}),this.triggerAndEmit("onManualRetryProcessStarted")),[2,Promise.all(e.map((function(e){return n(t,void 0,void 0,(function(){return o(this,(function(t){return e.__retryAttempt=1,[2,this.scheduleRetry(e,e.__retryAttempt,e.__requestRetries||this.retries)]}))}))})))]}))}))},this.cancelRequest=function(e){var t=b.activeRequests.get(e);if(t){var r=b.requestQueue.cancelQueuedRequest(e);b.logger.debug("Cancelling request",{requestId:e,wasActive:!0,wasQueued:r}),t.abort(),b.activeRequests.delete(e),b.metrics.canceledRequests++,b.triggerAndEmit("onRequestCancelled",e)}},this.cancelAllRequests=function(){b.logger.warn("Cancelling all requests",{activeCount:b.activeRequests.size,queuedCount:b.requestQueue.getWaitingCount()}),b.activeRequests.forEach((function(e,t){e.abort(),b.metrics.canceledRequests++,b.requestQueue.cancelQueuedRequest(t),b.triggerAndEmit("onRequestCancelled",t)})),b.activeRequests.clear()},this.getMetrics=function(){b.logger.debug("Generating metrics snapshot");var e=b.metrics.failedRetries+b.metrics.successfulRetries;return{totalRequests:b.metrics.totalRequests,successfulRetries:b.metrics.successfulRetries,failedRetries:b.metrics.failedRetries,completelyFailedRequests:b.metrics.completelyFailedRequests,canceledRequests:b.metrics.canceledRequests,completelyFailedCriticalRequests:b.metrics.completelyFailedCriticalRequests,errorTypesDistribution:b.metrics.errorTypes,retryAttemptsDistribution:b.metrics.retryAttemptsDistribution,requestCountsByPriority:b.metrics.requestCountsByPriority,avgQueueWait:b.metrics.queueWaitDuration/b.metrics.totalRequests*.001,avgRetryDelay:b.metrics.retryDelayDuration/e*.001,priorityMetrics:Object.entries(b.metrics.retryPrioritiesDistribution).map((function(e){var t=e[0],r=e[1];return s(s({priority:Number(t)},r),{successRate:r.total>0?r.successes/r.total*100:0,failureRate:r.total>0?r.failures/r.total*100:0})}))}},this.validateOptions(e),this.debug=null!==(i=e.debug)&&void 0!==i?i:f.DEBUG,this.logger=new a(this.debug),this.logger.debug("Initializing RetryManager",{options:{mode:e.mode,retries:e.retries,maxConcurrent:e.maxConcurrentRequests}}),this.mode=null!==(l=e.mode)&&void 0!==l?l:f.MODE,this.retries=null!==(h=e.retries)&&void 0!==h?h:f.RETRIES,this.throwErrorOnFailedRetries=null!==(R=e.throwErrorOnFailedRetries)&&void 0!==R?R:f.THROW_ON_FAILED_RETRIES,this.throwErrorOnCancelRequest=null!==(m=e.throwErrorOnCancelRequest)&&void 0!==m?m:f.THROW_ON_CANCEL,this.retryStrategy=null!==(v=e.retryStrategy)&&void 0!==v?v:new d(e.retryableStatuses,e.retryableMethods,e.backoffType,void 0,this.logger),this.requestStore=new c(null!==(q=e.maxRequestsToStore)&&void 0!==q?q:f.MAX_REQUESTS_TO_STORE,this.triggerAndEmit),this.hooks=e.hooks,this.activeRequests=new Map,this.plugins=new Map,this.inRetryProgress=!1,this.requestQueue=new g(null!==(_=e.maxConcurrentRequests)&&void 0!==_?_:f.MAX_CONCURRENT_REQUESTS,e.queueDelay,this.checkCriticalRequests,this.isCriticalRequest),this.blockingQueueThreshold=e.blockingQueueThreshold,this._axiosInstance=e.axiosInstance||this.createAxiosInstance(),this.metrics=s({},p),this.setupInterceptors(),this.logger.debug("RetryManager initialized successfully")}return i.prototype.validateOptions=function(e){if(void 0!==e.retries&&e.retries<0)throw this.logger.error("Invalid retries configuration",{retries:e.retries}),new Error("Retries must be a non-negative number")},i.prototype.createAxiosInstance=function(){return this.logger.debug("Creating default Axios instance"),e.create({timeout:3e4,validateStatus:function(e){return e>=200&&e<300}})},i.prototype.generateRequestId=function(e){var t=Date.now(),r=Math.random().toString(36).substring(7),i=e?e.substring(0,40):"unknown";return"".concat(i,"-").concat(t,"-").concat(r,"-").concat(++this.requestIndex)},i.prototype.scheduleRetry=function(e,t,r){return n(this,arguments,void 0,(function(e,t,r,i){var n,u,a;return void 0===i&&(i=!1),o(this,(function(o){switch(o.label){case 0:return this.inRetryProgress||(this.logger.debug("Starting retry process"),this.triggerAndEmit("onRetryProcessStarted"),this.inRetryProgress=!0),e.__retryAttempt=t,e.__isRetrying=!0,n=this.retryStrategy.getDelay(Number(e.__retryAttempt),r,e.__backoffType),this.logger.debug("Scheduling retry attempt",{requestId:e.__requestId,attempt:t,maxRetries:r,delayMs:n,backoffType:e.__backoffType||"default"}),[4,this.sleep(n)];case 1:return o.sent(),this.metrics.retryDelayDuration+=n,this.logger.debug("Executing retry attempt",{requestId:e.__requestId,timeSinceFirstAttempt:Date.now()-(e.__timestamp||0)}),e.__requestId&&this.activeRequests.delete(e.__requestId),i||(null===(u=e.signal)||void 0===u?void 0:u.aborted)?(this.logger.warn("Retry cancelled",{requestId:e.__requestId,source:i?"queue":"user"}),this.metrics.canceledRequests++,this.metrics.errorTypes.cancelled++,i&&this.requestStore.add(e),[2,this.handleCancelAction(e)]):(this.metrics.retryAttemptsDistribution[t]=(null!==(a=this.metrics.retryAttemptsDistribution[t])&&void 0!==a?a:0)+1,this.triggerAndEmit("beforeRetry",e),null!=e.__priority&&(this.metrics.retryPrioritiesDistribution[e.__priority]||(this.metrics.retryPrioritiesDistribution[e.__priority]=s({},y)),this.metrics.retryPrioritiesDistribution[e.__priority].total++),[2,this._axiosInstance.request(e)])}}))}))},i.prototype.sleep=function(e){var t=this;return new Promise((function(r){t.logger.debug("Sleeping between retries",{durationMs:e}),setTimeout(r,e)}))},i.prototype.handleCancelAction=function(e){return e.__isRetrying=!1,this.logger.warn("Handling request cancellation",{requestId:e.__requestId}),this.handleRetryProcessFinish(),this.throwErrorOnCancelRequest?Promise.reject(new Error("Request aborted. ID: ".concat(e.__requestId))):Promise.resolve(null)},i.prototype.handleNoRetriesAction=function(e,t){var r=this;void 0===t&&(t=!0);var i=e.config;return i.__isRetrying=!1,this.logger.warn("Final request failure",{requestId:i.__requestId,finalAttempt:i.__retryAttempt||0,stored:t}),this.triggerAndEmit("onFailure",i),t&&this.requestStore.add(i),i.__requestId&&this.activeRequests.delete(i.__requestId),this.handleRetryProcessFinish(),e.response||this.triggerAndEmit("onInternetConnectionError",i),this.isCriticalRequest(i)&&(this.logger.warn("Critical request failed",{requestId:i.__requestId}),this.triggerAndEmit("onCriticalRequestFailed"),this.activeRequests.forEach((function(e,t){r.requestQueue.cancelQueuedRequest(t)}))),this.throwErrorOnFailedRetries?Promise.reject(e):Promise.resolve(null)},i.prototype.triggerHook=function(e){for(var t,r,i=[],s=1;s<arguments.length;s++)i[s-1]=arguments[s];try{var n=null===(t=this.hooks)||void 0===t?void 0:t[e];n&&n.apply(void 0,i),this.plugins.forEach((function(t){var r,s=null===(r=t.hooks)||void 0===r?void 0:r[e];s&&s.apply(void 0,i)})),this.logger.debug('Hook "'.concat(e,'" executed'),null===(r=i[0])||void 0===r?void 0:r.__requestId)}catch(t){this.logger.error('Error executing "'.concat(e,'" hook:'),t)}},i.prototype.validatePluginVersion=function(e){return/^\d+\.\d+\.\d+$/.test(e)},i.prototype.getLogger=function(){return this.logger},Object.defineProperty(i.prototype,"axiosInstance",{get:function(){return this._axiosInstance},enumerable:!1,configurable:!0}),i}(),m={maxRefreshAttempts:3,authHeaderName:"Authorization",refreshStatusCodes:[401],refreshTimeout:15e3,retryOnRefreshFail:!0,tokenPrefix:"Bearer "},v=function(){function t(e,t){this.name="TokenRefreshPlugin",this.version="1.0.0",this.interceptorId=null,this.isRefreshing=!1,this.refreshQueue=[],this.logger=null,this.refreshToken=e,this.options=s(s({},m),t)}return t.prototype.initialize=function(t){var r=this;this.manager=t,this.refreshAxios=e.create(t.axiosInstance.defaults),this.logger=t.getLogger(),this.interceptorId=t.axiosInstance.interceptors.response.use((function(e){return e}),(function(e){return r.handleResponseError(e)}))},t.prototype.onBeforeDestroyed=function(e){null!=this.interceptorId&&e.axiosInstance.interceptors.response.eject(this.interceptorId)},t.prototype.handleResponseError=function(e){return n(this,void 0,void 0,(function(){var t;return o(this,(function(r){return(t=e.config)?t.__isRetryRefreshRequest?[2,Promise.reject(e)]:this.isRefreshableError(e)?this.isRefreshing?[2,this.queueRefreshRequest(t)]:[2,this.handleTokenRefresh(t)]:[2,Promise.reject(e)]:[2,Promise.reject(e)]}))}))},t.prototype.isRefreshableError=function(e){var t,r,i=null!==(r=null===(t=e.response)||void 0===t?void 0:t.status)&&void 0!==r?r:-1;return this.options.refreshStatusCodes.includes(i)},t.prototype.handleTokenRefresh=function(e){return n(this,void 0,void 0,(function(){var t,r;return o(this,(function(i){switch(i.label){case 0:this.isRefreshing=!0,e.__isRetryRefreshRequest||this.manager.triggerAndEmit("onBeforeTokenRefresh"),i.label=1;case 1:return i.trys.push([1,3,4,5]),[4,this.executeTokenRefresh()];case 2:return t=i.sent(),this.updateAuthHeader(t),this.retryQueuedRequests(t),[2,this.retryRequest(e,t)];case 3:return r=i.sent(),this.handleRefreshFailure(),[2,Promise.reject(r)];case 4:return this.isRefreshing=!1,[7];case 5:return[2]}}))}))},t.prototype.executeTokenRefresh=function(){return n(this,void 0,void 0,(function(){var e,t,r,i,s,n,u,a,c,l,h,d=this;return o(this,(function(o){switch(o.label){case 0:if(!this.refreshToken)throw new Error("No token refresh handler provided");e=this.options,t=e.maxRefreshAttempts,r=e.refreshTimeout,i=e.retryOnRefreshFail,n=1,o.label=1;case 1:if(!(n<=t))return[3,6];null===(c=this.logger)||void 0===c||c.debug("[".concat(this.name,"] Refresh attempt ").concat(n,"/").concat(t)),o.label=2;case 2:return o.trys.push([2,4,,5]),[4,new Promise((function(e,t){var i=setTimeout((function(){return t(new Error("Token refresh timeout"))}),r);d.refreshToken(d.refreshAxios).then((function(t){clearTimeout(i),e(t)})).catch((function(e){clearTimeout(i),t(e)}))}))];case 3:return u=o.sent().token,this.manager.triggerAndEmit("onTokenRefreshed",u),null===(l=this.logger)||void 0===l||l.debug("[".concat(this.name,"] Token successfully refreshed")),[2,u];case 4:return a=o.sent(),s=a,i&&n<t+1?(null===(h=this.logger)||void 0===h||h.debug("[".concat(this.name,"] Refresh attempt failed, retrying...")),[3,5]):[3,6];case 5:return n++,[3,1];case 6:throw s}}))}))},t.prototype.updateAuthHeader=function(e){var t=this.options,r=t.authHeaderName,i=t.tokenPrefix;this.manager.axiosInstance.defaults.headers.common[r]="".concat(i).concat(e)},t.prototype.retryRequest=function(e,t){var r,i=this.options,n=i.authHeaderName,o=i.tokenPrefix;return e.__isRetryRefreshRequest=!0,e.headers=s(s({},e.headers),((r={})[n]="".concat(o).concat(t),r)),this.refreshAxios(e)},t.prototype.queueRefreshRequest=function(e){var t=this;return new Promise((function(r,i){t.refreshQueue.push({resolve:function(i){return r(t.retryRequest(e,i))},reject:i})}))},t.prototype.retryQueuedRequests=function(e){this.refreshQueue.forEach((function(t){return(0,t.resolve)(e)})),this.refreshQueue=[]},t.prototype.handleRefreshFailure=function(){var e,t=new Error("Token refresh failed");this.refreshQueue.forEach((function(e){return(0,e.reject)(t)})),this.refreshQueue=[],this.manager.triggerAndEmit("onTokenRefreshFailed"),null===(e=this.logger)||void 0===e||e.error("".concat(this.name," Token refresh failed - clearing queue"))},t}();exports.AXIOS_RETRYER_BACKOFF_TYPES=i,exports.AXIOS_RETRYER_REQUEST_PRIORITIES=r,exports.RETRY_MODES=t,exports.RetryManager=R,exports.TokenRefreshPlugin=v;