@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
56 lines (55 loc) • 4.75 kB
TypeScript
import type { Either } from '@lokalise/node-core';
import type { CommonEventDefinition } from '@message-queue-toolkit/schemas';
import type { ZodSchema } from 'zod';
import type { DoNotProcessMessageError } from '../errors/DoNotProcessError';
import type { RetryMessageLaterError } from '../errors/RetryMessageLaterError';
export type PreHandlingOutputs<PrehandlerOutput = undefined, BarrierOutput = undefined> = {
preHandlerOutput: PrehandlerOutput;
barrierOutput: BarrierOutput;
};
export type LogFormatter<MessagePayloadSchema> = (message: MessagePayloadSchema) => unknown;
export type BarrierResult<BarrierOutput> = BarrierResultPositive<BarrierOutput> | BarrierResultNegative;
export type BarrierResultPositive<BarrierOutput> = {
isPassing: true;
output: BarrierOutput;
};
export type BarrierResultNegative = {
isPassing: false;
output?: never;
};
export type PrehandlerResult = Either<DoNotProcessMessageError | RetryMessageLaterError, 'success'>;
export type BarrierCallback<MessagePayloadSchema extends object, ExecutionContext, PrehandlerOutput, BarrierOutput> = (message: MessagePayloadSchema, context: ExecutionContext, preHandlerOutput: PrehandlerOutput) => Promise<BarrierResult<BarrierOutput>>;
export type Prehandler<MessagePayloadSchema extends object, ExecutionContext, PrehandlerOutput> = (message: MessagePayloadSchema, context: ExecutionContext, preHandlerOutput: Partial<PrehandlerOutput>, next: (result: PrehandlerResult) => void) => void;
export declare const defaultLogFormatter: <MessagePayloadSchema>(message: MessagePayloadSchema) => MessagePayloadSchema;
export type HandlerConfigOptions<MessagePayloadSchema extends object, ExecutionContext, PrehandlerOutput, BarrierOutput> = {
messageLogFormatter?: LogFormatter<MessagePayloadSchema>;
preHandlerBarrier?: BarrierCallback<MessagePayloadSchema, ExecutionContext, PrehandlerOutput, BarrierOutput>;
preHandlers?: Prehandler<MessagePayloadSchema, ExecutionContext, PrehandlerOutput>[];
};
export declare class MessageHandlerConfig<const MessagePayloadSchema extends object, const ExecutionContext, const PrehandlerOutput = undefined, const BarrierOutput = unknown> {
readonly schema: ZodSchema<MessagePayloadSchema>;
readonly definition?: CommonEventDefinition;
readonly handler: Handler<MessagePayloadSchema, ExecutionContext, PrehandlerOutput, BarrierOutput>;
readonly messageLogFormatter: LogFormatter<MessagePayloadSchema>;
readonly preHandlerBarrier?: BarrierCallback<MessagePayloadSchema, ExecutionContext, PrehandlerOutput, BarrierOutput>;
readonly preHandlers: Prehandler<MessagePayloadSchema, ExecutionContext, PrehandlerOutput>[];
constructor(schema: ZodSchema<MessagePayloadSchema>, handler: Handler<MessagePayloadSchema, ExecutionContext, PrehandlerOutput, BarrierOutput>, options?: HandlerConfigOptions<MessagePayloadSchema, ExecutionContext, PrehandlerOutput, BarrierOutput>, eventDefinition?: CommonEventDefinition);
}
export declare class MessageHandlerConfigBuilder<MessagePayloadSchemas extends object, ExecutionContext, PrehandlerOutput = undefined> {
private readonly configs;
constructor();
addConfig<MessagePayloadSchema extends MessagePayloadSchemas, const BarrierOutput>(schema: ZodSchema<MessagePayloadSchema> | CommonEventDefinition, handler: Handler<MessagePayloadSchema, ExecutionContext, PrehandlerOutput, BarrierOutput>, options?: HandlerConfigOptions<MessagePayloadSchema, ExecutionContext, PrehandlerOutput, BarrierOutput>): this;
build(): MessageHandlerConfig<MessagePayloadSchemas, ExecutionContext, PrehandlerOutput, any>[];
}
export type Handler<MessagePayloadSchemas, ExecutionContext, PrehandlerOutput = undefined, BarrierOutput = undefined> = (message: MessagePayloadSchemas, context: ExecutionContext, preHandlingOutputs: PreHandlingOutputs<PrehandlerOutput, BarrierOutput>, definition?: CommonEventDefinition) => Promise<Either<'retryLater', 'success'>>;
export type HandlerContainerOptions<MessagePayloadSchemas extends object, ExecutionContext, PrehandlerOutput = undefined> = {
messageHandlers: MessageHandlerConfig<MessagePayloadSchemas, ExecutionContext, PrehandlerOutput>[];
messageTypeField: string;
};
export declare class HandlerContainer<MessagePayloadSchemas extends object, ExecutionContext, PrehandlerOutput = undefined> {
private readonly messageHandlers;
private readonly messageTypeField;
constructor(options: HandlerContainerOptions<MessagePayloadSchemas, ExecutionContext, PrehandlerOutput>);
resolveHandler<PrehandlerOutput = undefined, BarrierOutput = undefined>(messageType: string): MessageHandlerConfig<MessagePayloadSchemas, ExecutionContext, PrehandlerOutput, BarrierOutput>;
private resolveHandlerMap;
}