import type log from "loglevel"; export interface RetryOptions { maxRetries?: number; /** Base delay used to seed the exponential backoff, in milliseconds. */ retryDelay?: number; /** Upper bound on any single backoff wait, in milliseconds. */ maxRetryDelay?: number; shouldRetry?: (error: any) => boolean; logger?: log.Logger; } export declare const defaultShouldRetry: (error: any) => boolean; /** * Parses a `Retry-After` response header (delay in seconds or an HTTP date) * from an error thrown by the client. Returns the wait in milliseconds, or * `null` when no usable header is present. */ export declare const getRetryAfterMs: (error: any, now?: number) => number | null; /** * Computes how long to wait before the next retry attempt. * * - When the server sent a `Retry-After`, honour it (capped) plus a small * random window so callers don't retry in lockstep. * - Otherwise use exponential backoff with "equal jitter": half the capped * backoff is fixed and the other half is random, which decorrelates retries * across a fleet while still guaranteeing meaningful spacing. * * `attempt` is 0-indexed. `random` is injectable for deterministic tests. */ export declare const computeRetryDelayMs: (attempt: number, { retryDelay, maxRetryDelay, retryAfterMs, }: { retryDelay: number; maxRetryDelay: number; retryAfterMs: number | null; }, random?: () => number) => number; export declare const executeWithRetry: (operation: () => Promise, options?: RetryOptions) => Promise;