Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | 17x 17x 17x 2x 2x 2x 2x | import type { RetryConfig } from '../types/index.js';
/** Default retry configuration */
export const DEFAULT_RETRY_CONFIG: Required<RetryConfig> = {
maxRetries: 3,
initialDelayMs: 1000,
backoffMultiplier: 2,
maxDelayMs: 30000,
};
/**
* Calculate delay for a retry attempt using exponential backoff.
*/
export function calculateRetryDelay(
attempt: number,
config: Required<RetryConfig>
): number {
const delay = config.initialDelayMs * Math.pow(config.backoffMultiplier, attempt);
return Math.min(delay, config.maxDelayMs);
}
/**
* Sleep for a specified duration, respecting abort signal.
*/
export async function sleep(ms: number, abortSignal?: AbortSignal): Promise<void> {
return new Promise((resolve, reject) => {
Iif (abortSignal?.aborted) {
reject(new Error('Aborted'));
return;
}
const timeout = setTimeout(resolve, ms);
abortSignal?.addEventListener('abort', () => {
clearTimeout(timeout);
reject(new Error('Aborted'));
}, { once: true });
});
}
|