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