UNPKG

bb-inspired

Version:

Core library for BB-inspired NestJS backend

96 lines 4.37 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var __param = (this && this.__param) || function (paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex); } }; var MessagingService_1; Object.defineProperty(exports, "__esModule", { value: true }); exports.MessagingService = void 0; const common_1 = require("@nestjs/common"); const rabbitmq_service_1 = require("./rabbitmq.service"); const event_bus_service_1 = require("./event-bus.service"); const logger_1 = require("../../utils/logger"); let MessagingService = MessagingService_1 = class MessagingService { constructor(options, rabbitMQService, eventBusService) { this.options = options; this.rabbitMQService = rabbitMQService; this.eventBusService = eventBusService; this.logger = new logger_1.AppLogger(MessagingService_1.name); } async publish(topic, payload, options = {}) { const { metadata = {}, localOnly = false, externalOnly = false } = options; const messageType = topic.includes('.') ? topic.split('.').pop() : topic; if (!externalOnly) { const event = { name: topic, payload, timestamp: new Date(), metadata, }; this.eventBusService.publish(event); } if (!localOnly) { const message = { type: messageType, payload, metadata, }; await this.rabbitMQService.publish(topic, message); } this.logger.verbose(`Published message to ${topic}`, { metadata: { localOnly, externalOnly, type: messageType } }); } async subscribe(topic, handler, options = {}) { const { localOnly = false, externalOnly = false, messageType } = options; const derivedMessageType = messageType || (topic.includes('.') ? topic.split('.').pop() : topic); if (!externalOnly) { this.eventBusService.register(topic, (event) => { return handler(event.payload, event.metadata); }); } if (!localOnly) { const messageHandler = { messageType: derivedMessageType, handle: async (message) => { return handler(message.payload, message.metadata); }, }; await this.rabbitMQService.subscribe(topic, messageHandler); } this.logger.verbose(`Subscribed to ${topic}`, { metadata: { localOnly, externalOnly, type: derivedMessageType } }); } async unsubscribe(topic, handler, options = {}) { const { localOnly = false, externalOnly = false } = options; if (!externalOnly && handler) { this.eventBusService.unregister(topic, handler); } if (!localOnly) { await this.rabbitMQService.unsubscribe(topic); } this.logger.verbose(`Unsubscribed from ${topic}`, { metadata: { localOnly, externalOnly } }); } isConnected() { return this.rabbitMQService.getConnectionStatus(); } getEventBus() { return this.eventBusService; } getRabbitMQ() { return this.rabbitMQService; } }; exports.MessagingService = MessagingService; exports.MessagingService = MessagingService = MessagingService_1 = __decorate([ (0, common_1.Injectable)(), __param(0, (0, common_1.Inject)('MESSAGING_OPTIONS')), __metadata("design:paramtypes", [Object, rabbitmq_service_1.RabbitMQService, event_bus_service_1.EventBusService]) ], MessagingService); //# sourceMappingURL=messaging.service.js.map