@cfworker/cosmos
Version:
Azure Cosmos DB client for Cloudflare Workers and service workers
30 lines (29 loc) • 1.22 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.defaultRetryPolicy = exports.DefaultRetryPolicy = void 0;
const session_js_1 = require("./session.js");
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 ((0, session_js_1.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 };
}
}
exports.DefaultRetryPolicy = DefaultRetryPolicy;
exports.defaultRetryPolicy = new DefaultRetryPolicy();