import { Logger } from 'pino';
import { RetryPolicyConfig, BackoffStrategy, JitterConfig, RetryCondition, CircuitBreakerConfig } from './RetryPolicy';
/**
 * Environment-specific retry configuration presets
 */
export declare class RetryConfigPresets {
    /**
     * Development environment configuration - aggressive retries for testing
     */
    static development(logger?: Logger): RetryPolicyConfig;
    /**
     * Testing environment configuration - predictable behavior
     */
    static testing(logger?: Logger): RetryPolicyConfig;
    /**
     * Production environment configuration - conservative and reliable
     */
    static production(logger?: Logger): RetryPolicyConfig;
    /**
     * High-frequency operations configuration - optimized for frequent API calls
     */
    static highFrequency(logger?: Logger): RetryPolicyConfig;
    /**
     * Rate-limit aware configuration - optimized for APIs with strict rate limits
     */
    static rateLimitAware(logger?: Logger): RetryPolicyConfig;
    /**
     * Network-resilient configuration - optimized for unreliable networks
     */
    static networkResilient(logger?: Logger): RetryPolicyConfig;
    /**
     * Custom configuration builder for specific use cases
     */
    static custom(): RetryConfigBuilder;
}
/**
 * Fluent builder for creating custom retry configurations
 */
export declare class RetryConfigBuilder {
    private config;
    /**
     * Set backoff strategy
     */
    withBackoff(strategy: BackoffStrategy): this;
    /**
     * Set exponential backoff with defaults
     */
    withExponentialBackoff(initialDelayMs?: number, maxDelayMs?: number, multiplier?: number): this;
    /**
     * Set linear backoff
     */
    withLinearBackoff(initialDelayMs?: number, maxDelayMs?: number): this;
    /**
     * Set fixed backoff
     */
    withFixedBackoff(delayMs?: number): this;
    /**
     * Set custom backoff function
     */
    withCustomBackoff(initialDelayMs: number, maxDelayMs: number, customBackoff: (attempt: number, error: any) => number): this;
    /**
     * Set jitter configuration
     */
    withJitter(jitter: JitterConfig): this;
    /**
     * Set no jitter
     */
    withoutJitter(): this;
    /**
     * Set equal jitter
     */
    withEqualJitter(factor?: number): this;
    /**
     * Set full jitter
     */
    withFullJitter(factor?: number): this;
    /**
     * Set decorrelated jitter
     */
    withDecorrelatedJitter(factor?: number): this;
    /**
     * Set retry conditions
     */
    withConditions(conditions: RetryCondition): this;
    /**
     * Set basic retry conditions
     */
    withBasicConditions(maxAttempts?: number, maxTotalTimeMs?: number, retryableStatusCodes?: number[]): this;
    /**
     * Set circuit breaker configuration
     */
    withCircuitBreaker(circuitBreaker: CircuitBreakerConfig): this;
    /**
     * Enable circuit breaker with defaults
     */
    withBasicCircuitBreaker(failureThreshold?: number, recoveryTimeoutMs?: number, halfOpenSuccessThreshold?: number): this;
    /**
     * Disable circuit breaker
     */
    withoutCircuitBreaker(): this;
    /**
     * Set logger
     */
    withLogger(logger: Logger): this;
    /**
     * Enable or disable metrics
     */
    withMetrics(enabled?: boolean): this;
    /**
     * Build the final configuration
     */
    build(): RetryPolicyConfig;
}
//# sourceMappingURL=RetryConfigPresets.d.ts.map