export interface CircuitBreakerOptions {
    failureThreshold: number;
    timeout: number;
    resetTimeout: number;
    onOpen?: (breaker: CircuitBreaker) => void;
    onHalfOpen?: (breaker: CircuitBreaker) => void;
    onClose?: (breaker: CircuitBreaker) => void;
    name?: string;
}
export interface CircuitBreakerState {
    state: 'closed' | 'open' | 'half-open';
    failures: number;
    successes: number;
    lastFailureTime: number;
    lastSuccessTime: number;
    nextAttempt: number;
}
export declare class CircuitBreaker {
    private readonly options;
    private readonly logger;
    private state;
    private failures;
    private successes;
    private lastFailureTime;
    private lastSuccessTime;
    private nextAttempt;
    constructor(options: CircuitBreakerOptions);
    execute<T>(operation: () => Promise<T>): Promise<T>;
    private onSuccess;
    private onFailure;
    getState(): CircuitBreakerState;
    getFailureCount(): number;
    getSuccessCount(): number;
    getLastFailureTime(): number;
    getLastSuccessTime(): number;
    getCurrentState(): 'closed' | 'open' | 'half-open';
    isOpen(): boolean;
    isClosed(): boolean;
    isHalfOpen(): boolean;
    forceOpen(): void;
    forceClose(): void;
    reset(): void;
    getHealthInfo(): {
        isHealthy: boolean;
        state: string;
        failureRate: number;
        successRate: number;
        uptime: number;
    };
}
export declare class CircuitBreakerOpenError extends Error {
    constructor(message: string);
}
export declare class CircuitBreakerFactory {
    static createForStorage(name?: string): CircuitBreaker;
    static createForDevTools(name?: string): CircuitBreaker;
    static createForNetwork(name?: string): CircuitBreaker;
    static createCustom(options: CircuitBreakerOptions): CircuitBreaker;
}
export declare class CircuitBreakerRegistry {
    private readonly logger;
    private breakers;
    register(name: string, breaker: CircuitBreaker): void;
    get(name: string): CircuitBreaker | undefined;
    getAll(): Map<string, CircuitBreaker>;
    getAllStates(): Record<string, CircuitBreakerState>;
    getHealthStatus(): {
        healthy: number;
        unhealthy: number;
        total: number;
        details: Record<string, any>;
    };
    resetAll(): void;
    remove(name: string): boolean;
    clear(): void;
}
