UNPKG

@tigthor/kokocrypt

Version:

Enhanced Fortress Edition - Secure, quantum-resistant, high-performance encryption package

150 lines 5.88 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 ConsumerService_1; Object.defineProperty(exports, "__esModule", { value: true }); exports.ConsumerService = void 0; const common_1 = require("@nestjs/common"); const config_1 = require("@nestjs/config"); const kafkajs_1 = require("kafkajs"); const event_emitter_1 = require("@nestjs/event-emitter"); let ConsumerService = ConsumerService_1 = class ConsumerService { constructor(configService, eventEmitter) { this.configService = configService; this.eventEmitter = eventEmitter; this.logger = new common_1.Logger(ConsumerService_1.name); this.isConnected = false; this.kafka = new kafkajs_1.Kafka({ clientId: this.configService.get('kafka.clientId') || 'api-gateway-client', brokers: [this.configService.get('kafka.broker') || 'localhost:9092'], retry: { initialRetryTime: 300, retries: 10, maxRetryTime: 30000, }, }); this.consumer = this.kafka.consumer({ groupId: this.configService.get('kafka.groupId') || 'api-gateway-group', sessionTimeout: 30000, heartbeatInterval: 3000, rebalanceTimeout: 60000, maxWaitTimeInMs: 1000, maxBytes: 1048576, }); } async onModuleInit() { try { await this.consumer.connect(); this.isConnected = true; this.logger.log('Kafka consumer connected successfully'); const topics = [ 'user-events', 'wallet-events', 'points-events', 'game-events', 'activity-events', 'bonus-events', 'nft-events', 'chat-events', 'report-events', 'socket-topic', ]; for (const topic of topics) { await this.consumer.subscribe({ topic, fromBeginning: false, }); this.logger.log(`Subscribed to topic: ${topic}`); } await this.consumer.run({ autoCommit: true, autoCommitInterval: 5000, partitionsConsumedConcurrently: 3, eachMessage: async (payload) => { await this.handleMessage(payload); }, }); } catch (error) { this.logger.error('Failed to connect Kafka consumer', error); } } async onModuleDestroy() { if (this.isConnected) { try { await this.consumer.disconnect(); this.logger.log('Kafka consumer disconnected successfully'); } catch (error) { this.logger.error('Failed to disconnect Kafka consumer', error); } } } async handleMessage({ topic, partition, message, }) { var _a; try { if (!message.value) return; const messageValue = message.value.toString(); let parsedMessage; try { parsedMessage = JSON.parse(messageValue); } catch (error) { this.logger.warn(`Failed to parse message from topic ${topic}:`, error); return; } this.logger.debug(`Received message from topic ${topic}, partition ${partition}`); const eventName = `kafka.${topic}`; this.eventEmitter.emit(eventName, { value: parsedMessage, topic, partition, offset: message.offset, headers: message.headers, key: (_a = message.key) === null || _a === void 0 ? void 0 : _a.toString(), timestamp: message.timestamp, }); switch (topic) { case 'user-events': break; case 'game-events': break; case 'points-events': break; default: break; } } catch (error) { this.logger.error(`Error handling message from topic ${topic}, partition ${partition}:`, error); } } async subscribeToTopic(topic) { if (!this.isConnected) { throw new Error('Kafka consumer is not connected'); } try { await this.consumer.subscribe({ topic, fromBeginning: false }); this.logger.log(`Dynamically subscribed to topic: ${topic}`); } catch (error) { this.logger.error(`Failed to subscribe to topic ${topic}:`, error); throw error; } } }; exports.ConsumerService = ConsumerService; exports.ConsumerService = ConsumerService = ConsumerService_1 = __decorate([ (0, common_1.Injectable)(), __metadata("design:paramtypes", [config_1.ConfigService, event_emitter_1.EventEmitter2]) ], ConsumerService); //# sourceMappingURL=consumer.service.js.map