UNPKG

@message-queue-toolkit/core

Version:

Useful utilities, interfaces and base classes for message queue handling. Supports AMQP and SQS with a common abstraction on top currently

45 lines (44 loc) 2.74 kB
import { type CommonLogger, type ErrorReporter, type TransactionObservabilityManager } from '@lokalise/node-core'; import type { MetadataFiller } from '../messages/MetadataFiller'; import type { HandlerSpy, HandlerSpyParams, PublicHandlerSpy } from '../queues/HandlerSpy'; import type { ConsumerMessageMetadataType } from '@message-queue-toolkit/schemas'; import type { EventRegistry } from './EventRegistry'; import type { AnyEventHandler, CommonEventDefinition, CommonEventDefinitionConsumerSchemaType, CommonEventDefinitionPublisherSchemaType, EventTypeNames, SingleEventHandler } from './eventTypes'; export type DomainEventEmitterDependencies<SupportedEvents extends CommonEventDefinition[]> = { eventRegistry: EventRegistry<SupportedEvents>; metadataFiller: MetadataFiller; logger: CommonLogger; errorReporter?: ErrorReporter; transactionObservabilityManager?: TransactionObservabilityManager; }; export declare class DomainEventEmitter<SupportedEvents extends CommonEventDefinition[]> { private readonly eventRegistry; private readonly metadataFiller; private readonly logger; private readonly errorReporter?; private readonly transactionObservabilityManager?; private readonly _handlerSpy?; private readonly eventHandlerMap; private readonly inProgressBackgroundHandlerByEventId; constructor(deps: DomainEventEmitterDependencies<SupportedEvents>, options?: { handlerSpy?: HandlerSpy<object> | HandlerSpyParams | boolean; }); get handlerSpy(): PublicHandlerSpy<CommonEventDefinitionPublisherSchemaType<SupportedEvents[number]>>; dispose(): Promise<void>; emit<SupportedEvent extends SupportedEvents[number]>(supportedEvent: SupportedEvent, data: Omit<CommonEventDefinitionPublisherSchemaType<SupportedEvent>, 'type'>, precedingMessageMetadata?: Partial<ConsumerMessageMetadataType>): Promise<Omit<CommonEventDefinitionConsumerSchemaType<SupportedEvent>, 'type'>>; /** * Register handler for a specific event */ on<EventTypeName extends EventTypeNames<SupportedEvents[number]>>(eventTypeName: EventTypeName, handler: SingleEventHandler<SupportedEvents, EventTypeName>, isBackgroundHandler?: boolean): void; /** * Register handler for multiple events */ onMany<EventTypeName extends EventTypeNames<SupportedEvents[number]>>(eventTypeNames: EventTypeName[], handler: SingleEventHandler<SupportedEvents, EventTypeName>, isBackgroundHandler?: boolean): void; /** * Register handler for all events supported by the emitter */ onAny(handler: AnyEventHandler<SupportedEvents>, isBackgroundHandler?: boolean): void; private handleEvent; private executeEventHandler; private buildTransactionKey; }