26 lines
1.1 KiB
JavaScript
26 lines
1.1 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.AdaptiveRetryStrategy = void 0;
|
|
const config_1 = require("./config");
|
|
const DefaultRateLimiter_1 = require("./DefaultRateLimiter");
|
|
const StandardRetryStrategy_1 = require("./StandardRetryStrategy");
|
|
class AdaptiveRetryStrategy extends StandardRetryStrategy_1.StandardRetryStrategy {
|
|
constructor(maxAttemptsProvider, options) {
|
|
const { rateLimiter, ...superOptions } = options !== null && options !== void 0 ? options : {};
|
|
super(maxAttemptsProvider, superOptions);
|
|
this.rateLimiter = rateLimiter !== null && rateLimiter !== void 0 ? rateLimiter : new DefaultRateLimiter_1.DefaultRateLimiter();
|
|
this.mode = config_1.RETRY_MODES.ADAPTIVE;
|
|
}
|
|
async retry(next, args) {
|
|
return super.retry(next, args, {
|
|
beforeRequest: async () => {
|
|
return this.rateLimiter.getSendToken();
|
|
},
|
|
afterRequest: (response) => {
|
|
this.rateLimiter.updateClientSendingRate(response);
|
|
},
|
|
});
|
|
}
|
|
}
|
|
exports.AdaptiveRetryStrategy = AdaptiveRetryStrategy;
|