UNPKG

infobip-rtc

Version:

Infobip RTC JavaScript SDK - Infobip WebRTC API Implementation

57 lines 2.16 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 + 5 ** .5) / 2, psi = 1 - phi; const fib = (n) => Math.round((phi ** n - psi ** n) / (5 ** .5)); return iteration => baseDelayMs * fib(iteration + 1); } static exponentialDelay(baseDelayMs, factor = 2) { return iteration => 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() { if (this.awaitingTimeout) return this; if (this.iteration >= this.maxRetries) { this.reject?.(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