UNPKG

@message-queue-toolkit/sns

Version:
67 lines (66 loc) 3.81 kB
import type { Either } from '@lokalise/node-core'; import { type AsyncPublisher, type BarrierResult, type MessageInvalidFormatError, type MessageValidationError, type OffloadedPayloadPointerPayload, type QueuePublisherOptions, type ResolvedMessage } from '@message-queue-toolkit/core'; import type { SNSCreationConfig, SNSDependencies, SNSTopicLocatorType } from './AbstractSnsService.ts'; import { AbstractSnsService } from './AbstractSnsService.ts'; export type SNSMessageOptions = { MessageGroupId?: string; MessageDeduplicationId?: string; }; export type SNSPublisherOptionsBase<MessagePayloadType extends object> = QueuePublisherOptions<SNSCreationConfig, SNSTopicLocatorType, MessagePayloadType>; /** * SNS Publisher options with type-safe FIFO topic configuration. * When fifoTopic is true, messageGroupIdField and defaultMessageGroupId are available. * When fifoTopic is false or omitted, these fields are not allowed. */ export type SNSPublisherOptions<MessagePayloadType extends object> = SNSPublisherOptionsBase<MessagePayloadType> & ({ /** * Set to true for FIFO topics. Enables messageGroupIdField and defaultMessageGroupId options. */ fifoTopic: true; /** * Field name in the message payload to use as MessageGroupId for FIFO topics. * If not provided, MessageGroupId must be specified in publish options. */ messageGroupIdField?: string; /** * Default MessageGroupId to use when messageGroupIdField is not present in the message. * If not provided and messageGroupIdField is not found, MessageGroupId must be specified in publish options. */ defaultMessageGroupId?: string; } | { /** * Set to false or omit for standard (non-FIFO) topics. */ fifoTopic?: false; messageGroupIdField?: never; defaultMessageGroupId?: never; }); export declare abstract class AbstractSnsPublisher<MessagePayloadType extends object> extends AbstractSnsService<MessagePayloadType, MessagePayloadType> implements AsyncPublisher<MessagePayloadType, SNSMessageOptions> { private readonly messageSchemaContainer; private readonly isDeduplicationEnabled; private readonly isFifoTopic; private readonly messageGroupIdField?; private readonly defaultMessageGroupId?; private initPromise?; constructor(dependencies: SNSDependencies, options: SNSPublisherOptions<MessagePayloadType>); init(): Promise<void>; publish(message: MessagePayloadType, options?: SNSMessageOptions): Promise<void>; protected resolveMessage(): Either<MessageInvalidFormatError | MessageValidationError, ResolvedMessage>; protected resolveSchema(message: MessagePayloadType): Either<Error, import("zod/v4").ZodType<MessagePayloadType, unknown, import("zod/v4/core").$ZodTypeInternals<MessagePayloadType, unknown>>>; protected resolveNextFunction(): () => void; protected processPrehandlers(): Promise<undefined>; protected preHandlerBarrier<BarrierOutput>(): Promise<BarrierResult<BarrierOutput>>; processMessage(): Promise<Either<'retryLater', 'success'>>; protected isDeduplicationEnabledForMessage(message: MessagePayloadType): boolean; protected sendMessage(payload: MessagePayloadType | OffloadedPayloadPointerPayload, options: SNSMessageOptions): Promise<void>; /** * Resolves FIFO-specific options (MessageGroupId) from the message payload. * This must be called BEFORE payload offloading, as the offloaded payload * won't contain the user fields needed for messageGroupIdField resolution. * * @param payload - The original (non-offloaded) message payload * @param options - The SNS message options to augment with FIFO settings * @returns The options with resolved MessageGroupId for FIFO topics */ private resolveFifoOptions; }