@message-queue-toolkit/sqs
Version:
SQS adapter for message-queue-toolkit
64 lines (63 loc) • 3.92 kB
TypeScript
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 { ZodSchema } from 'zod/v4';
import type { SQSMessage } from '../types/MessageTypes.ts';
import type { SQSCreationConfig, SQSDependencies, SQSOptions, SQSQueueLocatorType } from './AbstractSqsService.ts';
import { AbstractSqsService } from './AbstractSqsService.ts';
export type SQSMessageOptions = {
MessageGroupId?: string;
MessageDeduplicationId?: string;
};
type BaseSQSPublisherOptions<MessagePayloadType extends object, CreationConfigType extends SQSCreationConfig = SQSCreationConfig, QueueLocatorType extends SQSQueueLocatorType = SQSQueueLocatorType> = QueuePublisherOptions<CreationConfigType, QueueLocatorType, MessagePayloadType> & Omit<SQSOptions<CreationConfigType, QueueLocatorType>, 'fifoQueue'>;
/**
* SQS Publisher options with type-safe FIFO queue configuration.
* When fifoQueue is true, messageGroupIdField and defaultMessageGroupId are available.
* When fifoQueue is false or omitted, these fields are not allowed.
*/
export type SQSPublisherOptions<MessagePayloadType extends object, CreationConfigType extends SQSCreationConfig = SQSCreationConfig, QueueLocatorType extends SQSQueueLocatorType = SQSQueueLocatorType> = BaseSQSPublisherOptions<MessagePayloadType, CreationConfigType, QueueLocatorType> & ({
/**
* Set to true for FIFO queues. Enables messageGroupIdField and defaultMessageGroupId options.
*/
fifoQueue: true;
/**
* Field name in the message payload to use as MessageGroupId for FIFO queues.
* 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) queues.
*/
fifoQueue?: false;
messageGroupIdField?: never;
defaultMessageGroupId?: never;
});
export declare const PAYLOAD_OFFLOADING_ATTRIBUTE_PREFIX = "payloadOffloading.";
export declare const OFFLOADED_PAYLOAD_SIZE_ATTRIBUTE = "payloadOffloading.size";
export declare abstract class AbstractSqsPublisher<MessagePayloadType extends object> extends AbstractSqsService<MessagePayloadType> implements AsyncPublisher<MessagePayloadType, SQSMessageOptions> {
private readonly messageSchemaContainer;
private readonly isDeduplicationEnabled;
private readonly messageGroupIdField?;
private readonly defaultMessageGroupId?;
private initPromise?;
constructor(dependencies: SQSDependencies, options: SQSPublisherOptions<MessagePayloadType>);
publish(message: MessagePayloadType, options?: SQSMessageOptions): Promise<void>;
protected resolveNextFunction(): () => void;
protected resolveMessage(_message: SQSMessage): Either<MessageInvalidFormatError | MessageValidationError, ResolvedMessage>;
protected processPrehandlers(): Promise<unknown>;
protected preHandlerBarrier<BarrierOutput>(): Promise<BarrierResult<BarrierOutput>>;
processMessage(): Promise<Either<'retryLater', 'success'>>;
protected isDeduplicationEnabledForMessage(message: MessagePayloadType): boolean;
protected resolveSchema(message: MessagePayloadType): Either<Error, ZodSchema<MessagePayloadType>>;
protected sendMessage(payload: MessagePayloadType | OffloadedPayloadPointerPayload, options: SQSMessageOptions): Promise<void>;
/**
* Resolves FIFO-specific options (MessageGroupId, MessageDeduplicationId)
*/
private resolveFifoOptions;
}
export {};