export interface RetryOptions { retries?: number; baseMs?: number; factor?: number; jitter?: boolean; } export interface FallbackOptions { onFallback?: (error: unknown, index: number) => void; } export declare function withRetry(fn: (req: TReq, signal?: AbortSignal) => Promise, opts?: RetryOptions): (req: TReq, signal?: AbortSignal) => Promise; export declare function withFallback(fns: Array<(req: TReq, signal?: AbortSignal) => Promise>, opts?: FallbackOptions): (req: TReq, signal?: AbortSignal) => Promise; export declare function withStreamRetry(fn: (req: TReq, signal?: AbortSignal) => AsyncIterable, opts?: RetryOptions): (req: TReq, signal?: AbortSignal) => AsyncIterable; export declare function withStreamFallback(fns: Array<(req: TReq, signal?: AbortSignal) => AsyncIterable>, opts?: FallbackOptions): (req: TReq, signal?: AbortSignal) => AsyncIterable; export interface RateLimiterOptions { /** Maximum requests per minute (sliding window). Default: Infinity */ rpm?: number; /** Maximum concurrent in-flight requests. Default: Infinity */ concurrent?: number; /** Maximum time (ms) a request will wait in queue. Default: 60000 */ maxQueueMs?: number; } export interface RateLimiter { /** Current number of in-flight requests */ readonly active: number; /** Current number of queued requests waiting for a slot */ readonly queued: number; /** Reject all queued requests and clean up timers */ dispose(): void; } export interface RateLimitOptions { /** Override maxQueueMs for this particular wrapped function */ maxQueueMs?: number; } export declare function createRateLimiter(opts?: RateLimiterOptions): RateLimiter; export declare function withRateLimit(fn: (req: TReq, signal?: AbortSignal) => Promise, limiter: RateLimiter, opts?: RateLimitOptions): (req: TReq, signal?: AbortSignal) => Promise; //# sourceMappingURL=middleware.d.ts.map