UNPKG

background-process-js

Version:
63 lines (62 loc) 2.67 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SQSConsumer = void 0; const client_sqs_1 = require("@aws-sdk/client-sqs"); const consumer_1 = require("../../consumer"); const crypto_1 = require("crypto"); class SQSConsumer extends consumer_1.Consumer { constructor(sqsConfig, continuouslyPolling = false) { super({ continuouslyPolling, hasDeadQueue: !!sqsConfig.deadQueueUrl, maxReceivedMessages: sqsConfig.MaxNumberOfMessages, timeoutAfterEndingPollingInMilliseconds: sqsConfig.WaitTimeSeconds, }); this.sqsConfig = sqsConfig; } async getMessages() { const receiveCommand = new client_sqs_1.ReceiveMessageCommand({ QueueUrl: this.sqsConfig.mainQueueUrl, WaitTimeSeconds: this.sqsConfig.WaitTimeSeconds, VisibilityTimeout: this.sqsConfig.VisibilityTimeout, MaxNumberOfMessages: this.sqsConfig.MaxNumberOfMessages, MessageAttributeNames: this.sqsConfig.MessageAttributeNames, MessageSystemAttributeNames: this.sqsConfig.MessageSystemAttributeNames, }); const { Messages } = await this.sqsConfig.client.send(receiveCommand); if (!Messages) return []; return Messages; } async deleteMessages(messages) { if (messages.length === 0) return; const deleteMessageCommand = new client_sqs_1.DeleteMessageBatchCommand({ QueueUrl: this.sqsConfig.mainQueueUrl, Entries: messages.map((message) => ({ Id: message.MessageId, ReceiptHandle: message.ReceiptHandle, })), }); await this.sqsConfig.client.send(deleteMessageCommand); } async markAsDeadMessages(messages) { if (messages.length === 0) return; if (!this.sqsConfig.deadQueueUrl) { throw Error("Need to pass 'deadQueueUrl' in sqs config"); } const isFifoQueue = this.sqsConfig.deadQueueUrl.includes(".fifo"); const sendMessageBatchCommand = new client_sqs_1.SendMessageBatchCommand({ QueueUrl: this.sqsConfig.deadQueueUrl, Entries: messages.map((message) => ({ Id: message.MessageId, MessageBody: message.Body, MessageDeduplicationId: isFifoQueue ? (0, crypto_1.randomUUID)() : undefined, MessageGroupId: isFifoQueue ? this.sqsConfig.deadQueueUrl : undefined, })), }); await this.sqsConfig.client.send(sendMessageBatchCommand); } } exports.SQSConsumer = SQSConsumer;