import type { QueuePublisherOptions } from '@message-queue-toolkit/core' import { AbstractSqsPublisher } from '../../lib/sqs/AbstractSqsPublisher.ts' import type { SQSCreationConfig, SQSDependencies, SQSQueueLocatorType, } from '../../lib/sqs/AbstractSqsService.ts' import type { PERMISSIONS_ADD_MESSAGE_TYPE, PERMISSIONS_REMOVE_MESSAGE_TYPE, } from '../consumers/userConsumerSchemas.ts' import { PERMISSIONS_ADD_MESSAGE_SCHEMA, PERMISSIONS_REMOVE_MESSAGE_SCHEMA, } from '../consumers/userConsumerSchemas.ts' type SupportedMessages = PERMISSIONS_ADD_MESSAGE_TYPE | PERMISSIONS_REMOVE_MESSAGE_TYPE export class SqsPermissionPublisher extends AbstractSqsPublisher { public static readonly QUEUE_NAME = 'user_permissions_multi' constructor( dependencies: SQSDependencies, options?: Pick< QueuePublisherOptions, | 'creationConfig' | 'locatorConfig' | 'deletionConfig' | 'logMessages' | 'payloadStoreConfig' | 'messageDeduplicationConfig' | 'enablePublisherDeduplication' | 'codec' | 'skipCompressionBelow' >, ) { super(dependencies, { ...(options?.locatorConfig ? { locatorConfig: options.locatorConfig } : { creationConfig: options?.creationConfig ?? { queue: { QueueName: SqsPermissionPublisher.QUEUE_NAME, }, }, }), logMessages: options?.logMessages, deletionConfig: options?.deletionConfig ?? { deleteIfExists: false, }, handlerSpy: true, messageSchemas: [PERMISSIONS_ADD_MESSAGE_SCHEMA, PERMISSIONS_REMOVE_MESSAGE_SCHEMA], messageTypeResolver: { messageTypePath: 'messageType' }, payloadStoreConfig: options?.payloadStoreConfig, messageDeduplicationConfig: options?.messageDeduplicationConfig, enablePublisherDeduplication: options?.enablePublisherDeduplication, codec: options?.codec, skipCompressionBelow: options?.skipCompressionBelow, messageDeduplicationIdField: 'deduplicationId', messageDeduplicationOptionsField: 'deduplicationOptions', }) } public get queueProps() { return { name: this.queue.name, url: this.queue.url, arn: this.queue.arn, } } }