UNPKG

nest-nsq-transport

Version:
78 lines 2.87 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.NSQClient = void 0; const common_1 = require("@nestjs/common"); const microservices_1 = require("@nestjs/microservices"); const nsqjs_1 = require("nsqjs"); const errors_1 = require("./errors"); const invariant_1 = require("./invariant"); const serialization_1 = require("./serialization"); class NSQClient extends microservices_1.ClientProxy { opts; writer; logger = new common_1.Logger(NSQClient.name); connected; constructor(opts) { super(); this.opts = opts; if ('nsqdURL' in opts) { const { nsqdURL, serializer: _, ...rest } = opts; const [hostname, port] = opts.nsqdURL.split(':'); if (!hostname || !port) throw new Error('Invalid nsqdURL'); this.writer = new nsqjs_1.Writer(hostname, Number(port), rest); } else { const { nsqdHost, nsqdPort, serializer: _, ...rest } = opts; this.writer = new nsqjs_1.Writer(nsqdHost, nsqdPort, rest); } this.serializer = opts.serializer ?? new serialization_1.StringSerializer(); } connect() { if (this.connected) return this.connected; this.connected = new Promise((resolve, reject) => { this.writer .on('ready', () => { this.logger.debug('NSQ client connected'); resolve(); }) .on('error', (err) => { this.logger.error(`NSQ client connection error: ${err}`); reject(); }); this.writer.connect(); }); return this.connected; } close() { return new Promise((resolve, reject) => { this.writer .on('closed', () => { this.logger.debug('NSQ client closed'); resolve(); }) .on('error', (err) => { this.logger.error(`NSQ client closing error: ${err}`); reject(); }); this.writer.close(); }); } publish(_packet, _callback) { throw new errors_1.RPCNotSupported(); } // something with types, unable to set void // eslint-disable-next-line @typescript-eslint/no-explicit-any async dispatchEvent(packet) { (0, invariant_1.invariant)(typeof packet.pattern === 'string', 'pattern must be a valid topic name'); const data = await this.serializer.serialize(packet); return new Promise((resolve, reject) => this.writer.publish(packet.pattern, data, (err) => err ? reject(err) : resolve())); } // we have multiple underlying writers, so we return all of them unwrap() { return this.writer; } } exports.NSQClient = NSQClient; //# sourceMappingURL=client.js.map