"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;