@push.rocks/webrequest
Version:
Modern, fetch-compatible web request library with intelligent HTTP caching, retry strategies, and fault tolerance.
55 lines • 2.99 kB
JavaScript
/**
* Retry backoff strategies
*/
/**
* Exponential backoff strategy
* Delay increases exponentially: initialDelay * 2^attempt
*/
export class ExponentialBackoff {
calculate(attempt, initialDelay, maxDelay) {
const delay = initialDelay * Math.pow(2, attempt - 1);
return Math.min(delay, maxDelay);
}
}
/**
* Linear backoff strategy
* Delay increases linearly: initialDelay * attempt
*/
export class LinearBackoff {
calculate(attempt, initialDelay, maxDelay) {
const delay = initialDelay * attempt;
return Math.min(delay, maxDelay);
}
}
/**
* Constant backoff strategy
* Delay stays constant: initialDelay
*/
export class ConstantBackoff {
calculate(attempt, initialDelay, maxDelay) {
return Math.min(initialDelay, maxDelay);
}
}
/**
* Get backoff calculator for a given strategy
*/
export function getBackoffCalculator(strategy) {
switch (strategy) {
case 'exponential':
return new ExponentialBackoff();
case 'linear':
return new LinearBackoff();
case 'constant':
return new ConstantBackoff();
default:
return new ExponentialBackoff();
}
}
/**
* Add jitter to delay to prevent thundering herd
*/
export function addJitter(delay, jitterFactor = 0.1) {
const jitter = delay * jitterFactor * Math.random();
return delay + jitter;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0cnkuc3RyYXRlZ2llcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL3JldHJ5L3JldHJ5LnN0cmF0ZWdpZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFRSDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBQzdCLFNBQVMsQ0FBQyxPQUFlLEVBQUUsWUFBb0IsRUFBRSxRQUFnQjtRQUMvRCxNQUFNLEtBQUssR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3RELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDbkMsQ0FBQztDQUNGO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGFBQWE7SUFDeEIsU0FBUyxDQUFDLE9BQWUsRUFBRSxZQUFvQixFQUFFLFFBQWdCO1FBQy9ELE1BQU0sS0FBSyxHQUFHLFlBQVksR0FBRyxPQUFPLENBQUM7UUFDckMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNuQyxDQUFDO0NBQ0Y7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sZUFBZTtJQUMxQixTQUFTLENBQUMsT0FBZSxFQUFFLFlBQW9CLEVBQUUsUUFBZ0I7UUFDL0QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMxQyxDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FDbEMsUUFBMEI7SUFFMUIsUUFBUSxRQUFRLEVBQUUsQ0FBQztRQUNqQixLQUFLLGFBQWE7WUFDaEIsT0FBTyxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDbEMsS0FBSyxRQUFRO1lBQ1gsT0FBTyxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQzdCLEtBQUssVUFBVTtZQUNiLE9BQU8sSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUMvQjtZQUNFLE9BQU8sSUFBSSxrQkFBa0IsRUFBRSxDQUFDO0lBQ3BDLENBQUM7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLEtBQWEsRUFBRSxlQUF1QixHQUFHO0lBQ2pFLE1BQU0sTUFBTSxHQUFHLEtBQUssR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3BELE9BQU8sS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUN4QixDQUFDIn0=