import { EventEmitter } from 'events'; import type { Request, RequestHandler, Response } from 'express'; export interface CircuitBreakerConfig { failureThreshold?: number; successThreshold?: number; timeWindow?: number; resetTimeout?: number; requestTimeout?: number; errorThresholdPercentage?: number; volumeThreshold?: number; isFailure?: (error: Error | null, response?: Response) => boolean; fallback?: (req: Request, res: Response) => void; onOpen?: (metrics: CircuitMetrics) => void; onClose?: (metrics: CircuitMetrics) => void; onHalfOpen?: (metrics: CircuitMetrics) => void; healthCheck?: () => Promise; healthCheckInterval?: number; } type CircuitState = 'CLOSED' | 'OPEN' | 'HALF_OPEN'; interface CircuitMetrics { failures: number; successes: number; totalRequests: number; errorPercentage: number; lastFailureTime?: Date; lastSuccessTime?: Date; consecutiveFailures: number; consecutiveSuccesses: number; state: CircuitState; stateChangedAt: Date; } export declare class CircuitBreaker extends EventEmitter { private state; private config; private metrics; private requestHistory; private nextAttempt; private healthCheckTimer?; constructor(config?: CircuitBreakerConfig); middleware(routeName?: string): RequestHandler; execute(fn: () => Promise): Promise; getState(): CircuitState; getMetrics(): Readonly; reset(): void; open(): void; close(): void; stop(): void; private initializeMetrics; private recordSuccess; private recordFailure; private shouldOpen; private transitionTo; private cleanupHistory; private getRecentRequests; private updateErrorPercentage; private defaultIsFailure; private defaultFallback; private startHealthCheck; } export declare function createCircuitBreaker(config?: CircuitBreakerConfig): CircuitBreaker; export {}; //# sourceMappingURL=circuit-breaker-middleware.d.ts.map