@cfworker/cosmos
Version:
Azure Cosmos DB client for Cloudflare Workers and service workers
26 lines (25 loc) • 1.03 kB
JavaScript
import { readSessionNotAvailable } from './session.js';
export class DefaultRetryPolicy {
maxAttempts;
maxCumulativeWaitTimeMs;
defaultRetryDelayMs;
constructor(maxAttempts = 10, maxCumulativeWaitTimeMs = 30000, defaultRetryDelayMs = 5000) {
this.maxAttempts = maxAttempts;
this.maxCumulativeWaitTimeMs = maxCumulativeWaitTimeMs;
this.defaultRetryDelayMs = defaultRetryDelayMs;
}
async shouldRetry(context) {
if (readSessionNotAvailable(context.response)) {
return { retry: true, delayMs: 0 };
}
if (context.response.status !== 429 ||
context.attempts >= this.maxAttempts ||
context.cumulativeWaitMs >= this.maxCumulativeWaitTimeMs) {
return { retry: false, delayMs: 0 };
}
const delayMs = +(context.response.headers.get('x-ms-retry-after-ms') ||
this.defaultRetryDelayMs);
return { retry: true, delayMs };
}
}
export const defaultRetryPolicy = new DefaultRetryPolicy();