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