UNPKG

@vtexlab/planner-message-bus

Version:

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

56 lines (55 loc) 2.77 kB
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()); }); }; import { createQueue, bindTopic } from './infrastructure/infra'; import { configureLogger, configureTrace } from './utils/opentelemetry/observability'; import { Configuration } from './utils/configuration'; export * as Bus from './services/service'; export class MessageBus { static configureObservability(tracerApi, loggerApi, defaultTracerProperties) { if (tracerApi) { configureTrace(tracerApi); } if (loggerApi) { configureLogger(loggerApi); } if (defaultTracerProperties) { Configuration.configureDefaultTraces(defaultTracerProperties); } return this; } static configureTags(tags) { this.tags = tags; } static configureVariables(config) { process.env.AWS_REGION = config === null || config === void 0 ? void 0 : config.region; process.env.AWS_ACCOUNT = config === null || config === void 0 ? void 0 : config.account; process.env.AWS_ACCESS_KEY_ID = config === null || config === void 0 ? void 0 : config.credentials.accessKeyId; process.env.AWS_SECRET_ACCESS_KEY = config === null || config === void 0 ? void 0 : config.credentials.secretAccessKey; process.env.NODE_ENV = config === null || config === void 0 ? void 0 : config.environment; } static configureEndpoint(endpoints) { return __awaiter(this, void 0, void 0, function* () { let infrastructure = new Array(); for (const endpoint of endpoints) { let queue; if (endpoint.queue) { queue = yield createQueue(endpoint.queue, this.tags); } const topicArn = yield bindTopic(endpoint.topic, endpoint.queue, this.tags); infrastructure.push({ queueArn: queue === null || queue === void 0 ? void 0 : queue.arn, queueUrl: queue === null || queue === void 0 ? void 0 : queue.url, topicArn }); } return infrastructure; }); } }