/**
 * Retry Utility with Exponential Backoff
 *
 * Provides configurable retry logic with circuit breaker integration
 */
import type { CircuitBreaker } from './circuitBreaker.js';
/**
 * Retry configuration options
 */
export interface RetryConfig {
    maxAttempts?: number;
    initialDelay?: number;
    maxDelay?: number;
    backoffFactor?: number;
    jitter?: boolean;
    retryableErrors?: Array<string | number>;
    circuitBreaker?: CircuitBreaker;
    onRetry?: (error: unknown, attempt: number) => void;
}
/**
 * Retry statistics
 */
export interface RetryStats {
    attempts: number;
    totalDelay: number;
    lastError?: unknown;
    succeeded: boolean;
}
/**
 * Execute a function with retry logic
 */
export declare function retry<T>(fn: () => Promise<T>, config?: RetryConfig): Promise<T>;
/**
 * Retry decorator for class methods
 */
export declare function Retryable(config?: RetryConfig): (_target: any, _propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
/**
 * Create a retry wrapper with preset configuration
 */
export declare function createRetryWrapper(config: RetryConfig): <T>(fn: () => Promise<T>) => Promise<T>;
/**
 * Retry with linear backoff (for simpler cases)
 */
export declare function retryLinear<T>(fn: () => Promise<T>, maxAttempts?: number, delay?: number): Promise<T>;
/**
 * Retry with immediate first attempt then exponential backoff
 */
export declare function retryImmediate<T>(fn: () => Promise<T>, config?: Omit<RetryConfig, 'initialDelay'>): Promise<T>;
//# sourceMappingURL=retry.d.ts.map