UNPKG

@vtexlab/planner-message-bus

Version:

A Message Bus that uses AWS SNS, AWS SQS, and AWS EventBridge

113 lines (112 loc) 5.24 kB
"use strict"; 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.bindTopic = exports.createQueue = void 0; const sqs_infra_1 = require("./sqs.infra"); const sns_infra_1 = require("./sns.infra"); const observability_1 = require("../utils/opentelemetry/observability"); const configuration_1 = require("../utils/configuration"); const semanticAttributes_1 = require("../utils/opentelemetry/semanticAttributes"); function createQueue(queueName, tags) { return __awaiter(this, void 0, void 0, function* () { var _a, _b, _c; queueName = configuration_1.Configuration.messageSuffix(queueName); try { (_a = (0, observability_1.getLogger)()) === null || _a === void 0 ? void 0 : _a.info({ workflowInstance: 'message-bus-topology', workflowType: 'planne-message-bus', message: 'Configure message queue', data: { [semanticAttributes_1.QUEUE_NAME]: queueName } }); const queue = yield (0, sqs_infra_1.createSqsQueue)(queueName); yield (0, sqs_infra_1.createSqsQueue)(queueName + '-dlq'); yield (0, sqs_infra_1.attachDqlToMainQueue)(queueName); if (tags) { yield (0, sqs_infra_1.tagQueue)(queueName, tags); yield (0, sqs_infra_1.tagQueue)(queueName + '-dlq', tags); } (_b = (0, observability_1.getLogger)()) === null || _b === void 0 ? void 0 : _b.info({ workflowInstance: 'message-bus-topology', workflowType: 'planne-message-bus', message: 'Message queue configured', data: { [semanticAttributes_1.QUEUE_NAME]: queueName } }); return queue; } catch (error) { (_c = (0, observability_1.getLogger)()) === null || _c === void 0 ? void 0 : _c.error({ workflowInstance: 'message-bus-topology', workflowType: 'planne-message-bus', data: { [semanticAttributes_1.QUEUE_NAME]: queueName }, message: 'Failed to configure message queue', error }); throw error; } }); } exports.createQueue = createQueue; function bindTopic(topicName, queueName, tags) { return __awaiter(this, void 0, void 0, function* () { var _a, _b, _c; topicName = configuration_1.Configuration.messageSuffix(topicName); try { (_a = (0, observability_1.getLogger)()) === null || _a === void 0 ? void 0 : _a.info({ workflowInstance: 'message-bus-topology', workflowType: 'planne-message-bus', message: 'Bind message topic', data: { [semanticAttributes_1.QUEUE_NAME]: queueName, [semanticAttributes_1.TOPIC_NAME]: topicName } }); const topicArn = yield (0, sns_infra_1.createSnsTopic)(topicName); if (tags) { yield (0, sns_infra_1.tagTopic)(topicArn, tags); } if (queueName) { queueName = configuration_1.Configuration.messageSuffix(queueName); yield (0, sqs_infra_1.setQueuePolicy)(queueName, topicName); yield (0, sns_infra_1.subscribeSnsTopicToQueue)(topicName, queueName); } (_b = (0, observability_1.getLogger)()) === null || _b === void 0 ? void 0 : _b.info({ workflowInstance: 'message-bus-topology', workflowType: 'planne-message-bus', message: 'Message topic binded', data: { [semanticAttributes_1.QUEUE_NAME]: queueName, [semanticAttributes_1.TOPIC_NAME]: topicName } }); return topicArn; } catch (error) { (_c = (0, observability_1.getLogger)()) === null || _c === void 0 ? void 0 : _c.error({ workflowInstance: 'message-bus-topology', workflowType: 'planne-message-bus', message: 'Message topic binded', error, data: { [semanticAttributes_1.QUEUE_NAME]: queueName, [semanticAttributes_1.TOPIC_NAME]: topicName } }); throw error; } }); } exports.bindTopic = bindTopic;