/** * Retry Queue - Exponential Backoff (PostHog-style) * * Retries failed requests with jittered exponential backoff. * Detects online/offline status and pauses retries when offline. * * Features: * - Exponential backoff: 3s, 6s, 12s, 24s... up to 30 minutes * - Jitter: +/- 50% to prevent thundering herd * - Online/offline detection * - Max 10 retries before giving up * - Uses sendBeacon on page unload for final attempt */ import type { BatchedRequest } from "./request-queue"; /** * Generates a jittered exponential backoff delay in milliseconds * * Base value is 3 seconds, doubled with each retry up to 30 minutes max. * Each value has +/- 50% jitter. * * @param retriesPerformedSoFar - Number of retries already attempted * @returns Delay in milliseconds */ export declare function pickNextRetryDelay(retriesPerformedSoFar: number): number; export interface RetryQueueConfig { sendRequest: (req: BatchedRequest) => Promise<{ statusCode: number; }>; sendBeacon: (req: BatchedRequest) => void; } export declare class RetryQueue { private _isPolling; private _poller?; private _pollIntervalMs; private _queue; private _areWeOnline; private _sendRequest; private _sendBeacon; constructor(config: RetryQueueConfig); /** * Get current queue length */ get length(): number; /** * Enqueue a failed request for retry */ enqueue(request: BatchedRequest, retriesPerformedSoFar?: number): void; /** * Attempt to send a request with retry on failure */ retriableRequest(request: BatchedRequest): Promise; /** * Start polling for retries */ private _poll; /** * Flush ready items from the queue */ private _flush; /** * Flush all queued requests using sendBeacon on page unload */ unload(): void; }