export type OutboxAwaitable = T | Promise; export interface DurableOutboxEntry { attempts: number; } export interface DurableOutboxFailure { message: string; retryAfterMs?: number; } export interface DurableOutboxRetry { attempts: number; nextTryAt: number; error: string; } export interface DurableOutboxPolicy { pollMs: number; baseDelayMs: number; maxDelayMs: number; maxAttempts: number; } export interface DurableOutboxStore { due(now: number): OutboxAwaitable; hasPending(): OutboxAwaitable; acknowledge(entry: Entry, delivery: Delivery): OutboxAwaitable; discard(entry: Entry): OutboxAwaitable; retry(entry: Entry, retry: DurableOutboxRetry): OutboxAwaitable; deadLetter(entry: Entry, retry: Omit): OutboxAwaitable; } export interface DurableOutboxWorkerOptions> { store: DurableOutboxStore; deliver(entry: Entry): Promise; classifyError(error: unknown): DurableOutboxFailure; policy: DurableOutboxPolicy; shouldDiscard?(entry: Entry): OutboxAwaitable; onEntryStart?(entry: Entry): void; onEntryEnd?(entry: Entry): void; onDeadLetter?(entry: Entry, retry: Omit): void; onError?(error: unknown): void; now?: () => number; schedule?: (callback: () => void, delayMs: number) => Timer; cancel?: (timer: Timer) => void; } export interface DurableOutboxWorker { start(): void; wake(): void; flush(): Promise; stop(): void; } export declare function exponentialOutboxBackoff(attempts: number, policy: Pick): number; /** Drive a durable store without coupling retry policy to a transport or database. */ export declare function createDurableOutboxWorker>(options: DurableOutboxWorkerOptions): DurableOutboxWorker; //# sourceMappingURL=outbox.d.ts.map