@softchef/cdk-iot-device-management
Version:
IoT device management is composed of things, thing types, thing groups, jobs, files API services. The constructs can be used independently, that are based on full-managed service to create an API Gateway & Lambda function.
35 lines (34 loc) • 1.76 kB
JavaScript
import { __awaiter, __extends, __generator, __rest } from "tslib";
import { RETRY_MODES } from "./config";
import { DefaultRateLimiter } from "./DefaultRateLimiter";
import { StandardRetryStrategy } from "./StandardRetryStrategy";
var AdaptiveRetryStrategy = (function (_super) {
__extends(AdaptiveRetryStrategy, _super);
function AdaptiveRetryStrategy(maxAttemptsProvider, options) {
var _this = this;
var _a = options !== null && options !== void 0 ? options : {}, rateLimiter = _a.rateLimiter, superOptions = __rest(_a, ["rateLimiter"]);
_this = _super.call(this, maxAttemptsProvider, superOptions) || this;
_this.rateLimiter = rateLimiter !== null && rateLimiter !== void 0 ? rateLimiter : new DefaultRateLimiter();
_this.mode = RETRY_MODES.ADAPTIVE;
return _this;
}
AdaptiveRetryStrategy.prototype.retry = function (next, args) {
return __awaiter(this, void 0, void 0, function () {
var _this = this;
return __generator(this, function (_a) {
return [2, _super.prototype.retry.call(this, next, args, {
beforeRequest: function () { return __awaiter(_this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2, this.rateLimiter.getSendToken()];
});
}); },
afterRequest: function (response) {
_this.rateLimiter.updateClientSendingRate(response);
},
})];
});
});
};
return AdaptiveRetryStrategy;
}(StandardRetryStrategy));
export { AdaptiveRetryStrategy };