2024-05-29 11:51:04 -04:00

58 lines
1.3 KiB
JavaScript

'use strict'
const awsRequest = require('@serverless/test/aws-request')
const SNSService = require('aws-sdk').SNS
async function createSnsTopic(topicName) {
const params = {
Name: topicName,
}
return awsRequest(SNSService, 'createTopic', params)
}
async function resolveTopicArn(topicName, nextToken = null) {
return awsRequest(SNSService, 'listTopics', { NextToken: nextToken }).then(
(data) => {
const targetTopic = data.Topics.find((topic) =>
RegExp(topicName, 'g').test(topic.TopicArn),
)
if (targetTopic) return targetTopic.TopicArn
if (data.NextToken) return resolveTopicArn(topicName, data.NextToken)
return null
},
)
}
async function removeSnsTopic(topicName) {
return resolveTopicArn(topicName).then((topicArn) => {
const params = {
TopicArn: topicArn,
}
return awsRequest(SNSService, 'deleteTopic', params)
})
}
async function publishSnsMessage(topicName, message, messageAttributes = null) {
return resolveTopicArn(topicName).then((topicArn) => {
const params = {
Message: message,
TopicArn: topicArn,
}
if (messageAttributes) {
params.MessageAttributes = messageAttributes
}
return awsRequest(SNSService, 'publish', params)
})
}
module.exports = {
createSnsTopic,
removeSnsTopic,
publishSnsMessage,
}