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

52 lines (51 loc) 4.48 kB
import type { z } from 'zod/v4'; import type { EventRegistry } from '../events/EventRegistry.ts'; import type { PublisherBaseEventType } from '../events/baseEventSchemas.ts'; import type { CommonEventDefinition } from '../events/eventTypes.ts'; import type { MetadataFiller } from '../messages/MetadataFiller.ts'; import type { AsyncPublisher, SyncPublisher } from '../types/MessageQueueTypes.ts'; import type { CommonCreationConfigType, QueuePublisherOptions } from '../types/queueOptionsTypes.ts'; import type { PublicHandlerSpy } from './HandlerSpy.ts'; export type MessagePublishType<T extends CommonEventDefinition> = z.input<T['publisherSchema']>; export type MessageSchemaType<T extends CommonEventDefinition> = z.input<T['consumerSchema']>; export type AbstractPublisherFactory<PublisherType extends AsyncPublisher<object, unknown> | SyncPublisher<object, unknown>, DependenciesType, CreationConfigType extends CommonCreationConfigType, QueueLocatorType extends object, EventType extends PublisherBaseEventType, OptionsType extends Omit<QueuePublisherOptions<CreationConfigType, QueueLocatorType, EventType>, 'messageSchemas' | 'creationConfig' | 'locatorConfig'>> = { buildPublisher(dependencies: DependenciesType, options: OptionsType): PublisherType; }; export declare abstract class AbstractPublisherManager<EventDefinitionType extends CommonEventDefinition, EventTargets extends string, PublisherType extends AsyncPublisher<object, unknown> | SyncPublisher<object, unknown>, DependenciesType, CreationConfigType extends CommonCreationConfigType, QueueLocatorType extends object, EventType extends PublisherBaseEventType, OptionsType extends Omit<QueuePublisherOptions<CreationConfigType, QueueLocatorType, EventType>, 'messageSchemas' | 'creationConfig' | 'locatorConfig'>, SupportedEventDefinitions extends EventDefinitionType[], MetadataType, MessageOptionsType> { private readonly publisherFactory; protected readonly newPublisherOptions: OptionsType; protected readonly metadataFiller: MetadataFiller<z.input<SupportedEventDefinitions[number]['publisherSchema']>, MetadataType>; protected readonly metadataField: string; protected readonly targetToEventMap: Record<EventTargets, EventDefinitionType[]>; protected readonly isAsync: boolean; protected targetToPublisherMap: Record<EventTargets, PublisherType>; private readonly publisherDependencies; protected constructor({ publisherFactory, newPublisherOptions, publisherDependencies, metadataFiller, eventRegistry, metadataField, isAsync, }: { publisherFactory: AbstractPublisherFactory<PublisherType, DependenciesType, CreationConfigType, QueueLocatorType, EventType, OptionsType>; newPublisherOptions: OptionsType; publisherDependencies: DependenciesType; metadataFiller: MetadataFiller<z.input<SupportedEventDefinitions[number]['publisherSchema']>, MetadataType>; eventRegistry: EventRegistry<SupportedEventDefinitions>; metadataField: string; isAsync: boolean; }); protected abstract resolveEventTarget(event: EventDefinitionType): EventTargets | undefined; protected abstract resolveCreationConfig(eventTarget: string): CreationConfigType; protected resolvePublisherConfigOverrides(_eventTarget: string): Partial<OptionsType>; private registerEvents; private registerPublishers; initRegisteredPublishers(publishersToInit?: EventTargets[]): Promise<void>; injectPublisher(eventTarget: EventTargets, publisher: PublisherType): void; injectEventDefinition(eventDefinition: EventDefinitionType): void; publish(eventTarget: EventTargets, message: MessagePublishType<SupportedEventDefinitions[number]>, precedingEventMetadata?: Partial<MetadataType>, messageOptions?: MessageOptionsType): Promise<MessageSchemaType<SupportedEventDefinitions[number]>>; protected resolveMessageDefinition(eventTarget: EventTargets, message: MessagePublishType<SupportedEventDefinitions[number]>): EventDefinitionType | undefined; protected resolveMessage(messageDefinition: EventDefinitionType | undefined, message: MessagePublishType<SupportedEventDefinitions[number]>, precedingEventMetadata?: Partial<MetadataType>): MessageSchemaType<SupportedEventDefinitions[number]>; resolveBaseFields(): { id: string; timestamp: string; }; /** * @param eventTarget - topic or exchange */ handlerSpy(eventTarget: EventTargets): PublicHandlerSpy<object>; }