@vtexlab/planner-message-bus
Version:
A Message Bus that uses AWS SNS, AWS SQS, and AWS EventBridge
84 lines (83 loc) • 3.55 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.setQueuePolicy = exports.tagQueue = exports.attachDqlToMainQueue = exports.createSqsQueue = void 0;
const constants_1 = require("../utils/constants");
const client_sqs_1 = require("@aws-sdk/client-sqs");
const client = new client_sqs_1.SQSClient();
function createSqsQueue(queueName) {
return __awaiter(this, void 0, void 0, function* () {
var _a;
const output = yield client.send(new client_sqs_1.CreateQueueCommand({ QueueName: queueName }));
return {
arn: (0, constants_1.QUEUE_ARN_TEMPLATE)(queueName),
url: (_a = output.QueueUrl) !== null && _a !== void 0 ? _a : (0, constants_1.QUEUE_URL_TEMPLATE)(queueName)
};
});
}
exports.createSqsQueue = createSqsQueue;
function attachDqlToMainQueue(queueName) {
return __awaiter(this, void 0, void 0, function* () {
const redrivePolicy = {
deadLetterTargetArn: (0, constants_1.QUEUE_ARN_TEMPLATE)(queueName + '-dlq'),
maxReceiveCount: 100
};
yield client.send(new client_sqs_1.SetQueueAttributesCommand({
QueueUrl: (0, constants_1.QUEUE_URL_TEMPLATE)(queueName),
Attributes: { RedrivePolicy: JSON.stringify(redrivePolicy) }
}));
});
}
exports.attachDqlToMainQueue = attachDqlToMainQueue;
function tagQueue(queueName, tags) {
return __awaiter(this, void 0, void 0, function* () {
const awsTags = tags.reduce((accumulator, current) => {
accumulator[current.Key] = current.Value;
return accumulator;
}, {});
yield client.send(new client_sqs_1.TagQueueCommand({
QueueUrl: (0, constants_1.QUEUE_URL_TEMPLATE)(queueName),
Tags: awsTags
}));
});
}
exports.tagQueue = tagQueue;
function setQueuePolicy(queueName, topicName) {
return __awaiter(this, void 0, void 0, function* () {
yield client.send(new client_sqs_1.SetQueueAttributesCommand({
QueueUrl: (0, constants_1.QUEUE_URL_TEMPLATE)(queueName),
Attributes: {
Policy: getPolicyDocument((0, constants_1.QUEUE_ARN_TEMPLATE)(queueName), (0, constants_1.TOPIC_ARN_TEMPLATE)(topicName))
}
}));
});
}
exports.setQueuePolicy = setQueuePolicy;
function getPolicyDocument(queueArn, topicArn) {
return JSON.stringify({
Version: '2012-10-17',
Statement: [
{
Effect: "Allow",
Principal: {
Service: "sns.amazonaws.com"
},
Action: "sqs:SendMessage",
Resource: queueArn,
Condition: {
ArnEquals: {
"aws:SourceArn": topicArn
}
}
}
]
});
}