@easyflow/pixel
Version:
Easyflow client-side pixel SDK
92 lines (91 loc) • 2.59 kB
TypeScript
/**
* Circuit Breaker implementation for robust error handling
*
* States:
* - CLOSED: Normal operation, requests pass through
* - OPEN: Circuit is open, requests fail fast
* - HALF_OPEN: Testing if service has recovered
*/
export declare enum CircuitState {
CLOSED = "CLOSED",
OPEN = "OPEN",
HALF_OPEN = "HALF_OPEN"
}
export interface CircuitBreakerConfig {
/** Number of failures before opening circuit */
failureThreshold: number;
/** Time in ms to wait before trying HALF_OPEN */
recoveryTimeout: number;
/** Number of successful calls needed to close circuit */
successThreshold: number;
/** Time window for counting failures (ms) */
failureWindow: number;
}
export interface CircuitBreakerStats {
state: CircuitState;
failures: number;
successes: number;
lastFailureTime: number | null;
nextAttemptTime: number | null;
}
export declare class CircuitBreaker {
private config;
private state;
private failures;
private successes;
private lastFailureTime;
private nextAttemptTime;
private failureTimes;
constructor(config: CircuitBreakerConfig);
/**
* Execute a function with circuit breaker protection
*/
execute<T>(fn: () => Promise<T>): Promise<T>;
/**
* Check if circuit breaker allows requests
*/
canExecute(): boolean;
/**
* Get current circuit breaker statistics
*/
getStats(): CircuitBreakerStats;
/**
* Reset circuit breaker to initial state
*/
reset(): void;
private onSuccess;
private onFailure;
}
/**
* Exponential backoff with jitter for retry operations
*/
export interface RetryConfig {
/** Maximum number of retry attempts */
maxRetries: number;
/** Base delay in milliseconds */
baseDelay: number;
/** Maximum delay in milliseconds */
maxDelay: number;
/** Multiplier for exponential backoff */
multiplier: number;
/** Jitter factor (0-1) to add randomness */
jitter: number;
}
export declare class ExponentialBackoff {
private config;
constructor(config: RetryConfig);
/**
* Calculate delay for given attempt number
*/
getDelay(attempt: number): number;
/**
* Execute function with exponential backoff retry
*/
execute<T>(fn: () => Promise<T>, circuitBreaker?: CircuitBreaker): Promise<T>;
private sleep;
}
/**
* Default configurations for common use cases
*/
export declare const DEFAULT_CIRCUIT_BREAKER_CONFIG: CircuitBreakerConfig;
export declare const DEFAULT_RETRY_CONFIG: RetryConfig;