@vtexlab/planner-message-bus
Version:
A Message Bus that uses AWS SNS, AWS SQS, and AWS EventBridge
56 lines (55 loc) • 2.77 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());
});
};
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;
});
}
}