UNPKG

@message-in-the-middle/core

Version:

Framework-agnostic middleware pattern for message queue processing. Core package with all middlewares.

60 lines (59 loc) 2.8 kB
import { EventEmitter } from 'events'; import { HealthCheck, InboundMiddleware, ManagerStatistics, MessageContext, OutboundMiddleware } from './types'; export interface ManagerEvents<T = any> { 'message:start': (context: MessageContext<T>) => void; 'message:complete': (context: MessageContext<T>, duration: number) => void; 'message:error': (error: Error, context: MessageContext<T>) => void; 'middleware:before': (middlewareName: string, context: MessageContext<T>) => void; 'middleware:after': (middlewareName: string, context: MessageContext<T>, duration: number) => void; 'middleware:error': (middlewareName: string, error: Error, context: MessageContext<T>) => void; 'slow:processing': (context: MessageContext<T>, duration: number) => void; } export interface ManagerOptions { maxMessageSize?: number; events?: { enabled?: boolean; emitMiddlewareEvents?: boolean; slowProcessingThreshold?: number; }; } export declare class MessageMiddlewareManager<T = any> extends EventEmitter { private inboundPipeline; private outboundPipeline; private resources; private readonly maxMessageSize; private readonly eventsEnabled; private readonly emitMiddlewareEvents; private readonly slowProcessingThreshold; private readonly startedAt; private inboundProcessedCount; private outboundProcessedCount; private inboundErrorCount; private outboundErrorCount; private totalInboundProcessingTime; private totalOutboundProcessingTime; constructor(options?: ManagerOptions); emit<K extends keyof ManagerEvents<T>>(event: K, ...args: Parameters<ManagerEvents<T>[K]>): boolean; on<K extends keyof ManagerEvents<T>>(event: K, listener: ManagerEvents<T>[K]): this; once<K extends keyof ManagerEvents<T>>(event: K, listener: ManagerEvents<T>[K]): this; off<K extends keyof ManagerEvents<T>>(event: K, listener: ManagerEvents<T>[K]): this; use(middleware: InboundMiddleware<T> | OutboundMiddleware<T>): this; addInboundMiddleware(middleware: InboundMiddleware<T>): this; addOutboundMiddleware(middleware: OutboundMiddleware<T>): this; processInbound<R = any>(message: T, raw?: R, attributes?: Record<string, any>): Promise<MessageContext<T, R>>; processOutbound<R = any>(message: T, metadata?: Record<string, any>, attributes?: Record<string, any>): Promise<MessageContext<T, R>>; getMiddlewares(): { inbound: Array<{ name?: string; metadata?: Record<string, any>; }>; outbound: Array<{ name?: string; metadata?: Record<string, any>; }>; }; getStats(): ManagerStatistics; getHealth(): Promise<HealthCheck>; private isHealthable; destroy(): Promise<void>; }