From a11eea8fc62c7ed87b8cd99c8e4478b400ceb9a7 Mon Sep 17 00:00:00 2001 From: Jimmy Huang Date: Fri, 24 Feb 2023 18:05:29 -0800 Subject: [PATCH] Fix #134 0.76.0: SNS -> publish to subscribed SQS queue, "Records" assumption leads to lost message, empty array. #134 There is no need to check ` if (sub["Attributes"]["RawMessageDelivery"] === "true") ` inside `publishSqs`, this `RawMessageDelivery` check-process is already handled by `publish`. The `event` object is what should be sent directly to an sqs endpoint. This also works with serverless-offline-sqs plugin. --- src/sns-server.ts | 31 ++++++++----------------------- 1 file changed, 8 insertions(+), 23 deletions(-) diff --git a/src/sns-server.ts b/src/sns-server.ts index 88b11fb..e25c4d1 100644 --- a/src/sns-server.ts +++ b/src/sns-server.ts @@ -299,29 +299,14 @@ export class SNSServer implements ISNSServer { const sqsEndpoint = `${subEndpointUrl.protocol}//${subEndpointUrl.host}/`; const sqs = new SQS({ endpoint: sqsEndpoint, region: this.region }); - if (sub["Attributes"]["RawMessageDelivery"] === "true") { - return sqs - .sendMessage({ - QueueUrl: sub.Endpoint, - MessageBody: event, - MessageAttributes: formatMessageAttributes(messageAttributes), - ...(messageGroupId && { MessageGroupId: messageGroupId }), - }) - .promise(); - } else { - const records = JSON.parse(event).Records ?? []; - const messagePromises = records.map((record) => { - return sqs - .sendMessage({ - QueueUrl: sub.Endpoint, - MessageBody: JSON.stringify(record.Sns), - MessageAttributes: formatMessageAttributes(messageAttributes), - ...(messageGroupId && { MessageGroupId: messageGroupId }), - }) - .promise(); - }); - return Promise.all(messagePromises); - } + return sqs + .sendMessage({ + QueueUrl: sub.Endpoint, + MessageBody: event, + MessageAttributes: formatMessageAttributes(messageAttributes), + ...(messageGroupId && { MessageGroupId: messageGroupId }), + }) + .promise(); } public publish(