UNPKG

hook-engine

Version:

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

109 lines (108 loc) 3.1 kB
import { EventEmitter } from 'events'; import { WebhookEvent } from '../types/webhook'; import { WebhookAdapter } from '../types/adapter'; import { EventProcessor, TenantConfig } from './event-processor'; export interface TenantRateLimit { eventsPerSecond: number; burstSize: number; windowSize: number; } export interface TenantMetrics { totalEvents: number; successfulEvents: number; failedEvents: number; lastEventAt: number; averageProcessingTime: number; rateLimitHits: number; } export interface TenantIsolationConfig { enableResourceIsolation: boolean; maxMemoryPerTenant: number; maxConcurrentEvents: number; enableNetworkIsolation: boolean; allowedDomains?: string[]; blockedDomains?: string[]; } export interface MultiTenantConfig { defaultRateLimit: TenantRateLimit; defaultIsolation: TenantIsolationConfig; enableTenantMetrics: boolean; enableGlobalRateLimit: boolean; globalRateLimit?: TenantRateLimit; } export declare class MultiTenantHandler extends EventEmitter { private config; private eventProcessor; private tenantConfigs; private tenantMetrics; private rateLimitWindows; private tenantResourceUsage; constructor(eventProcessor: EventProcessor, config: MultiTenantConfig); /** * Register tenant configuration */ registerTenant(tenantConfig: TenantConfig): void; /** * Unregister tenant */ unregisterTenant(tenantId: string): boolean; /** * Process webhook event with multi-tenant support */ processWebhookEvent(rawBody: Buffer, headers: Record<string, string>, adapter: WebhookAdapter, tenantId?: string): Promise<WebhookEvent>; /** * Process batch webhook events */ processBatchWebhookEvents(rawBody: Buffer, headers: Record<string, string>, adapter: WebhookAdapter, tenantId?: string): Promise<WebhookEvent[]>; /** * Validate tenant exists and is active */ private validateTenant; /** * Check rate limits for tenant */ private checkRateLimit; /** * Check batch rate limits */ private checkBatchRateLimit; /** * Get batch-specific rate limit (usually more restrictive) */ private getBatchRateLimit; /** * Check resource limits for tenant */ private checkResourceLimits; /** * Validate tenant access to specific event */ private validateTenantEventAccess; /** * Track resource usage for tenant */ private trackResourceUsage; /** * Update tenant metrics */ private updateTenantMetrics; /** * Get tenant metrics */ getTenantMetrics(tenantId: string): TenantMetrics | undefined; /** * Get all tenant metrics */ getAllTenantMetrics(): Map<string, TenantMetrics>; /** * Get tenant resource usage */ getTenantResourceUsage(tenantId: string): { memory: number; activeEvents: number; } | undefined; /** * Reset tenant metrics */ resetTenantMetrics(tenantId: string): void; }