UNPKG

hook-engine

Version:

Production-grade webhook engine with comprehensive adapter support, security, reliability, structured logging, and CLI tools.

101 lines (100 loc) 2.66 kB
import { WebhookEvent } from '../types/webhook'; import { RetryConfig } from '../types/config'; /** * Retry policy types */ export type RetryPolicy = 'exponential' | 'linear' | 'fixed' | 'custom'; /** * Retry attempt context */ export interface RetryAttempt { attempt: number; totalAttempts: number; lastError: Error; elapsedTime: number; nextDelayMs: number; } /** * Retry result */ export interface RetryResult<T> { success: boolean; result?: T; error?: Error; attempts: number; totalTime: number; failureReason?: 'max_attempts' | 'circuit_breaker' | 'timeout' | 'non_retryable'; } /** * Dead letter queue interface */ export interface DeadLetterQueue { add(event: WebhookEvent, error: Error, attempts: number): Promise<void>; getFailedEvents(limit?: number): Promise<Array<{ event: WebhookEvent; error: Error; attempts: number; timestamp: Date; }>>; remove(eventId: string): Promise<void>; clear(): Promise<void>; } /** * Circuit breaker state */ type CircuitBreakerState = 'closed' | 'open' | 'half-open'; /** * Enhanced retry system with advanced features */ export declare class RetryEngine { private config; private circuitBreakerState; private circuitBreakerConfig; private failureCount; private lastFailureTime; private retryBudget; private budgetResetTime; private deadLetterQueue?; constructor(config: RetryConfig, deadLetterQueue?: DeadLetterQueue); /** * Execute function with retry logic */ execute<T>(fn: () => Promise<T>, event: WebhookEvent, policy?: RetryPolicy): Promise<RetryResult<T>>; /** * Batch retry execution */ executeBatch<T>(operations: Array<{ fn: () => Promise<T>; event: WebhookEvent; }>, policy?: RetryPolicy): Promise<Array<RetryResult<T>>>; /** * Get retry statistics */ getStats(): { circuitBreakerState: CircuitBreakerState; failureCount: number; retryBudget: number; budgetResetTime: Date; }; /** * Reset circuit breaker manually */ resetCircuitBreaker(): void; /** * Reset retry budget */ resetRetryBudget(): void; private isRetryableError; private calculateDelay; private isCircuitOpen; private recordSuccess; private recordFailure; private hasRetryBudget; private consumeRetryBudget; private sendToDeadLetter; } /** * Legacy retry function for backwards compatibility */ export declare function retry(event: WebhookEvent, fn: () => Promise<void>, maxAttempts?: number): Promise<void>; export {};