Files
clawdbot/src/infra/backoff.ts
2026-01-07 23:22:12 +00:00

27 lines
714 B
TypeScript

import { setTimeout as delay } from "node:timers/promises";
export type BackoffPolicy = {
initialMs: number;
maxMs: number;
factor: number;
jitter: number;
};
export function computeBackoff(policy: BackoffPolicy, attempt: number) {
const base = policy.initialMs * policy.factor ** Math.max(attempt - 1, 0);
const jitter = base * policy.jitter * Math.random();
return Math.min(policy.maxMs, Math.round(base + jitter));
}
export async function sleepWithAbort(ms: number, abortSignal?: AbortSignal) {
if (ms <= 0) return;
try {
await delay(ms, undefined, { signal: abortSignal });
} catch (err) {
if (abortSignal?.aborted) {
throw new Error("aborted");
}
throw err;
}
}