/**
 * Circuit Breaker Pattern Implementation
 *
 * Provides fault tolerance for external API calls by preventing
 * cascading failures and allowing systems to recover
 */
/**
 * Circuit breaker states
 */
export declare enum CircuitState {
    CLOSED = "CLOSED",// Normal operation
    OPEN = "OPEN",// Failing, reject all requests
    HALF_OPEN = "HALF_OPEN"
}
/**
 * Circuit breaker configuration
 */
export interface ICircuitBreakerConfig {
    failureThreshold?: number;
    successThreshold?: number;
    timeout?: number;
    monitoringPeriod?: number;
    fallbackFunction?: () => unknown;
    healthCheckFunction?: () => Promise<boolean>;
}
/**
 * Circuit breaker statistics
 */
export interface ICircuitBreakerStats {
    state: CircuitState;
    failures: number;
    successes: number;
    lastFailureTime?: number;
    lastSuccessTime?: number;
    totalRequests: number;
    rejectedRequests: number;
    fallbacksExecuted: number;
}
/**
 * Circuit breaker implementation
 */
export declare class CircuitBreaker<T = unknown> {
    private state;
    private failureCount;
    private successCount;
    private lastFailureTime;
    private lastSuccessTime;
    private nextAttempt;
    private readonly config;
    private stats;
    constructor(config?: ICircuitBreakerConfig);
    /**
     * Execute a function with circuit breaker protection
     */
    execute<R = T>(fn: () => Promise<R>): Promise<R>;
    /**
     * Handle request when circuit is open
     */
    private handleOpenState;
    /**
     * Handle request when circuit is half-open
     */
    private handleHalfOpenState;
    /**
     * Handle request when circuit is closed
     */
    private handleClosedState;
    /**
     * Record successful execution
     */
    private onSuccess;
    /**
     * Record failed execution
     */
    private onFailure;
    /**
     * Open the circuit
     */
    private open;
    /**
     * Close the circuit
     */
    private close;
    /**
     * Get current state
     */
    getState(): CircuitState;
    /**
     * Get circuit breaker statistics
     */
    getStats(): ICircuitBreakerStats;
    /**
     * Reset circuit breaker to initial state
     */
    reset(): void;
    /**
     * Force circuit to open state (for testing/maintenance)
     */
    forceOpen(): void;
    /**
     * Force circuit to closed state (for testing/recovery)
     */
    forceClose(): void;
}
/**
 * Factory function to create configured circuit breakers
 */
export declare function createCircuitBreaker<T = unknown>(name: string, config?: ICircuitBreakerConfig): CircuitBreaker<T>;
//# sourceMappingURL=circuitBreaker.d.ts.map