UNPKG

okta-mcp-server

Version:

Model Context Protocol (MCP) server for Okta API operations with support for bulk operations and caching

210 lines 5.71 kB
/** * Circuit Breaker types and interfaces */ import { EventEmitter } from 'events'; /** * Circuit breaker states */ export declare enum CircuitState { CLOSED = "CLOSED",// Normal operation, requests pass through OPEN = "OPEN",// Circuit is tripped, requests fail fast HALF_OPEN = "HALF_OPEN" } /** * Circuit breaker configuration options */ export interface CircuitBreakerOptions { /** * Number of failures before opening the circuit * @default 5 */ failureThreshold: number; /** * Percentage of failures (0-100) before opening the circuit * Used in conjunction with volumeThreshold * @default 50 */ failurePercentageThreshold?: number; /** * Minimum number of requests in the rolling window before * percentage-based failure is calculated * @default 10 */ volumeThreshold?: number; /** * Time in milliseconds before attempting to close the circuit * @default 60000 (1 minute) */ resetTimeout: number; /** * Time window in milliseconds for tracking failures * @default 60000 (1 minute) */ rollingWindowSize?: number; /** * Number of buckets to divide the rolling window into * @default 10 */ rollingWindowBuckets?: number; /** * Number of successful requests required in HALF_OPEN state * before closing the circuit * @default 5 */ successThreshold?: number; /** * Request timeout in milliseconds * @default 3000 (3 seconds) */ timeout?: number; /** * Name for the circuit breaker (for logging/monitoring) */ name?: string; /** * Whether to emit events for monitoring * @default true */ emitEvents?: boolean; /** * Custom error filter to determine if an error should trip the circuit */ isFailure?: (error: Error) => boolean; /** * Fallback function to call when circuit is open */ fallback?: <T>(...args: any[]) => Promise<T> | T; } /** * Circuit breaker statistics */ export interface CircuitBreakerStats { state: CircuitState; failures: number; successes: number; rejections: number; totalRequests: number; consecutiveFailures: number; consecutiveSuccesses: number; lastFailureTime?: number; lastSuccessTime?: number; nextAttempt?: number; failureRate: number; rollingCountFailure: number; rollingCountSuccess: number; rollingCountTimeout: number; rollingCountRejected: number; } /** * Circuit breaker events */ export interface CircuitBreakerEvents { 'state-change': (from: CircuitState, to: CircuitState, stats: CircuitBreakerStats) => void; success: (result: any, latency: number) => void; failure: (error: Error, latency: number) => void; timeout: (latency: number) => void; reject: (reason: string) => void; fallback: (args: any[]) => void; 'half-open-success': (result: any) => void; 'half-open-failure': (error: Error) => void; 'health-check': (stats: CircuitBreakerStats) => void; } /** * Circuit breaker event emitter interface */ export interface ICircuitBreakerEventEmitter extends EventEmitter { on<K extends keyof CircuitBreakerEvents>(event: K, listener: CircuitBreakerEvents[K]): this; emit<K extends keyof CircuitBreakerEvents>(event: K, ...args: Parameters<CircuitBreakerEvents[K]>): boolean; off<K extends keyof CircuitBreakerEvents>(event: K, listener: CircuitBreakerEvents[K]): this; once<K extends keyof CircuitBreakerEvents>(event: K, listener: CircuitBreakerEvents[K]): this; } /** * Circuit breaker interface */ export interface ICircuitBreaker<T = any> { /** * Execute a function through the circuit breaker */ execute<R>(fn: (...args: T[]) => Promise<R>, ...args: T[]): Promise<R>; /** * Get current circuit state */ getState(): CircuitState; /** * Get circuit breaker statistics */ getStats(): CircuitBreakerStats; /** * Manually open the circuit */ open(): void; /** * Manually close the circuit */ close(): void; /** * Reset all statistics */ reset(): void; /** * Check if circuit is allowing requests */ isOpen(): boolean; /** * Get the circuit breaker event emitter */ getEventEmitter(): ICircuitBreakerEventEmitter; /** * Health check for monitoring */ healthCheck(): Promise<CircuitBreakerStats>; } /** * Rolling window for tracking metrics over time */ export interface RollingWindow { /** * Record a successful request */ recordSuccess(timestamp?: number): void; /** * Record a failed request */ recordFailure(timestamp?: number): void; /** * Record a timeout */ recordTimeout(timestamp?: number): void; /** * Record a rejected request */ recordRejection(timestamp?: number): void; /** * Get counts for the current window */ getCounts(): WindowCounts; /** * Reset all metrics */ reset(): void; } /** * Window counts for metrics */ export interface WindowCounts { success: number; failure: number; timeout: number; rejected: number; total: number; errorPercentage: number; } /** * Circuit breaker factory function type */ export type CircuitBreakerFactory = <T = any>(options: CircuitBreakerOptions) => ICircuitBreaker<T>; /** * Circuit breaker middleware for wrapping async functions */ export type CircuitBreakerWrapper = <T extends (...args: any[]) => Promise<any>>(fn: T, options?: Partial<CircuitBreakerOptions>) => T; //# sourceMappingURL=types.d.ts.map