UNPKG

infobip-rtc

Version:

Infobip RTC JavaScript SDK - Infobip WebRTC API Implementation

58 lines 2.27 kB
export var RetryFailReason; (function (RetryFailReason) { RetryFailReason[RetryFailReason["MaxRetries"] = 0] = "MaxRetries"; })(RetryFailReason || (RetryFailReason = {})); export default class Retry { static linearDelay(baseDelayMs, baseIncrementMs) { baseIncrementMs = baseIncrementMs || baseDelayMs; return iteration => baseDelayMs + iteration * baseIncrementMs; } static fibonacciDelay(baseDelayMs) { const phi = (1 + Math.pow(5, .5)) / 2, psi = 1 - phi; const fib = (n) => Math.round((Math.pow(phi, n) - Math.pow(psi, n)) / (Math.pow(5, .5))); return iteration => baseDelayMs * fib(iteration + 1); } static exponentialDelay(baseDelayMs, factor = 2) { return iteration => Math.pow(factor, iteration) * baseDelayMs; } constructor(callable, delayFunction, maxDelayMs = 5000, maxRetries = 5, timeoutFunction = window.setTimeout.bind(window), cancelTimeoutFunction = (ref) => window.clearTimeout(ref)) { this.callable = callable; this.delayFunction = delayFunction; this.maxDelayMs = maxDelayMs; this.maxRetries = maxRetries; this.timeoutFunction = timeoutFunction; this.cancelTimeoutFunction = cancelTimeoutFunction; this.awaitingTimeout = false; this.timeoutRef = null; this.iteration = 0; } cancel() { if (this.awaitingTimeout) { this.cancelTimeoutFunction(this.timeoutRef); return true; } return false; } retry() { var _a; if (this.awaitingTimeout) return this; if (this.iteration >= this.maxRetries) { (_a = this.reject) === null || _a === void 0 ? void 0 : _a.call(this, RetryFailReason.MaxRetries); return this; } let timeoutMs = Math.min(this.maxDelayMs, this.delayFunction(this.iteration)); this.awaitingTimeout = true; this.timeoutRef = this.timeoutFunction(() => { this.awaitingTimeout = false; this.timeoutRef = null; this.callable(this.iteration++); }, timeoutMs); return this; } catch(reject) { this.reject = reject; return this; } } //# sourceMappingURL=Retry.js.map