@juspay/neurolink
Version:
Universal AI Development Platform with working MCP integration, multi-provider support, and professional CLI. Built-in tools operational, 58+ external MCP servers discoverable. Connect to filesystem, GitHub, database operations, and more. Build, test, and
197 lines (196 loc) • 5.11 kB
TypeScript
/**
* MCP Circuit Breaker
* Implements circuit breaker pattern for external MCP operations
* Provides fault tolerance and prevents cascading failures
*/
import { EventEmitter } from "events";
/**
* Circuit breaker states
*/
export type CircuitBreakerState = "closed" | "open" | "half-open";
/**
* Circuit breaker configuration
*/
export interface CircuitBreakerConfig {
/** Number of failures before opening the circuit */
failureThreshold: number;
/** Time to wait before attempting reset (milliseconds) */
resetTimeout: number;
/** Maximum calls allowed in half-open state */
halfOpenMaxCalls: number;
/** Timeout for individual operations (milliseconds) */
operationTimeout: number;
/** Minimum number of calls before calculating failure rate */
minimumCallsBeforeCalculation: number;
/** Window size for calculating failure rate (milliseconds) */
statisticsWindowSize: number;
}
/**
* Circuit breaker statistics
*/
export interface CircuitBreakerStats {
/** Current state */
state: CircuitBreakerState;
/** Total number of calls */
totalCalls: number;
/** Number of successful calls */
successfulCalls: number;
/** Number of failed calls */
failedCalls: number;
/** Current failure rate (0-1) */
failureRate: number;
/** Calls in current time window */
windowCalls: number;
/** Last state change timestamp */
lastStateChange: Date;
/** Next retry time (for open state) */
nextRetryTime?: Date;
/** Half-open call count */
halfOpenCalls: number;
}
/**
* Circuit breaker events
*/
export interface CircuitBreakerEvents {
stateChange: {
oldState: CircuitBreakerState;
newState: CircuitBreakerState;
reason: string;
timestamp: Date;
};
callSuccess: {
duration: number;
timestamp: Date;
};
callFailure: {
error: string;
duration: number;
timestamp: Date;
};
circuitOpen: {
failureRate: number;
totalCalls: number;
timestamp: Date;
};
circuitHalfOpen: {
timestamp: Date;
};
circuitClosed: {
timestamp: Date;
};
}
/**
* MCPCircuitBreaker
* Implements circuit breaker pattern for fault tolerance
*/
export declare class MCPCircuitBreaker extends EventEmitter {
private name;
private state;
private config;
private callHistory;
private lastFailureTime;
private halfOpenCalls;
private lastStateChange;
private cleanupTimer?;
constructor(name: string, config?: Partial<CircuitBreakerConfig>);
/**
* Execute an operation with circuit breaker protection
*/
execute<T>(operation: () => Promise<T>): Promise<T>;
/**
* Record a call in the history
*/
private recordCall;
/**
* Check if failure threshold is exceeded
*/
private checkFailureThreshold;
/**
* Change circuit breaker state
*/
private changeState;
/**
* Create a timeout promise
*/
private timeoutPromise;
/**
* Clean up old call records
*/
private cleanupCallHistory;
/**
* Get current statistics
*/
getStats(): CircuitBreakerStats;
/**
* Manually reset the circuit breaker
*/
reset(): void;
/**
* Force open the circuit breaker
*/
forceOpen(reason?: string): void;
/**
* Get circuit breaker name
*/
getName(): string;
/**
* Check if circuit is open
*/
isOpen(): boolean;
/**
* Check if circuit is closed
*/
isClosed(): boolean;
/**
* Check if circuit is half-open
*/
isHalfOpen(): boolean;
/**
* Destroy the circuit breaker and clean up resources
* This method should be called when the circuit breaker is no longer needed
* to prevent memory leaks from the cleanup timer
*/
destroy(): void;
}
/**
* Circuit breaker manager for multiple circuit breakers
*/
export declare class CircuitBreakerManager {
private breakers;
/**
* Get or create a circuit breaker
*/
getBreaker(name: string, config?: Partial<CircuitBreakerConfig>): MCPCircuitBreaker;
/**
* Remove a circuit breaker and clean up its resources
*/
removeBreaker(name: string): boolean;
/**
* Get all circuit breaker names
*/
getBreakerNames(): string[];
/**
* Get statistics for all circuit breakers
*/
getAllStats(): Record<string, CircuitBreakerStats>;
/**
* Reset all circuit breakers
*/
resetAll(): void;
/**
* Get health summary
*/
getHealthSummary(): {
totalBreakers: number;
closedBreakers: number;
openBreakers: number;
halfOpenBreakers: number;
unhealthyBreakers: string[];
};
/**
* Destroy all circuit breakers and clean up their resources
* This should be called during application shutdown to prevent memory leaks
*/
destroyAll(): void;
}
export declare const globalCircuitBreakerManager: CircuitBreakerManager;