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
TypeScript
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 {};