import type { MessageAttributeValue } from '@aws-sdk/client-sqs'; import type { LoggerService, ModuleMetadata, Type } from '@nestjs/common'; import type { Consumer, ConsumerOptions, StopOptions } from 'sqs-consumer'; import type { Producer } from 'sqs-producer'; export type ProducerOptions = Parameters[0]; export type QueueName = string; export type SqsConsumerOptions = Omit & { name: QueueName; stopOptions?: StopOptions; }; export type SqsConsumerMapValues = { instance: Consumer; stopOptions: StopOptions; }; export type SqsProducerOptions = ProducerOptions & { name: QueueName; }; export interface SqsOptions { consumers?: SqsConsumerOptions[]; producers?: SqsProducerOptions[]; logger?: LoggerService; globalStopOptions?: StopOptions; } export interface SqsModuleOptionsFactory { createOptions(): Promise | SqsOptions; } export interface SqsModuleAsyncOptions extends Pick { useExisting?: Type; useClass?: Type; useFactory?: (...args: any[]) => Promise | SqsOptions; inject?: any[]; } export interface Message { id: string; body: T; groupId?: string; deduplicationId?: string; delaySeconds?: number; messageAttributes?: Record; } export interface SqsMessageHandlerMeta { name: string; batch?: boolean; } export interface SqsConsumerEventHandlerMeta { name: string; eventName: string; }