PayFanout API reference
    Preparing search index...

    Interface RetryPolicy

    Backoff machinery for the PayFanoutError.retryable flag. Every mutating PayFanout call requires an idempotency key, so retrying a transient failure (PSP down, rate limited, network timeout) can never double-charge — this helper is the missing piece that turns the flag into behavior:

    const info = await withRetry(() => payments.capturePayment("stripe", id, amt, key));

    Retries only errors the default predicate accepts (PayFanoutError with retryable: true). Anything else — business rejections, declines, bugs — rethrows immediately.

    interface RetryPolicy {
        jitter?: boolean;
        maxDelayMs?: number;
        minDelayMs?: number;
        onRetry?: (error: unknown, attempt: number, delayMs: number) => void;
        random?: () => number;
        retries?: number;
        shouldRetry?: (error: unknown, attempt: number) => boolean;
        signal?: AbortSignal;
        sleep?: (ms: number) => Promise<void>;
    }
    Index
    jitter?: boolean

    Adds 0–25% random jitter to each delay (default true) to avoid thundering herds.

    maxDelayMs?: number

    Backoff ceiling in ms (default 5000) — a hard cap, jitter included.

    minDelayMs?: number

    First backoff delay in ms (default 200). Doubles per attempt.

    onRetry?: (error: unknown, attempt: number, delayMs: number) => void

    Observability: called before each backoff sleep.

    random?: () => number

    Test seam for jitter; defaults to Math.random.

    retries?: number

    Additional attempts after the first (default 2 → at most 3 calls).

    shouldRetry?: (error: unknown, attempt: number) => boolean

    Which errors to retry. Default: isPayFanoutError(err) && err.retryable.

    signal?: AbortSignal

    Cancels waiting: an aborted signal stops before the next attempt and rejects with the signal's reason (the in-flight attempt itself is the caller's to abort — thread the same signal into it).

    sleep?: (ms: number) => Promise<void>

    Test seam; defaults to a real setTimeout sleep.