UNPKG

@initbit/nestjs-jetstream

Version:
214 lines 10.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.NatsJetStreamModule = void 0; const tslib_1 = require("tslib"); const common_1 = require("@nestjs/common"); const config_1 = require("@nestjs/config"); const microservices_1 = require("@nestjs/microservices"); const nats_constants_1 = require("./nats.constants"); const nats_client_1 = require("./nats.client"); const jetstream_transport_1 = require("./jetstream.transport"); const nats_constants_2 = require("./nats.constants"); let NatsJetStreamModule = (() => { let _classDecorators = [(0, common_1.Module)({ imports: [ microservices_1.ClientsModule.registerAsync([ { name: nats_constants_2.JETSTREAM_CLIENT, imports: [config_1.ConfigModule], inject: [config_1.ConfigService], useFactory: async (config) => ({ customClass: nats_client_1.NatsClient, options: { connection: { servers: config.get('nats.uri') || 'nats://localhost' } } }) } ]) ], providers: [ { provide: nats_constants_2.JETSTREAM_TRANSPORT, inject: [config_1.ConfigService], useFactory: async (config) => { const servers = config.get('nats.uri') || 'nats://localhost'; return new jetstream_transport_1.JetStream({ servers: servers, streamName: config.get('nats.stream') || 'hello.*', durableName: config.get('nats.consumer') || 'APP_SERVICE', queue: config.get('nats.queue'), deliverPolicy: config.get('nats.deliverPolicy'), ackPolicy: config.get('nats.ackPolicy'), ackWait: config.get('nats.ackWait'), filterSubject: config.get('nats.filterSubject'), filterSubjects: config.get('nats.filterSubjects') }); } } ], exports: [nats_constants_2.JETSTREAM_TRANSPORT, nats_constants_2.JETSTREAM_CLIENT] })]; let _classDescriptor; let _classExtraInitializers = []; let _classThis; var NatsJetStreamModule = _classThis = class { /** * Register the NatsJetStream module with static options * @param options Configuration options for the JetStream transport */ static register(options) { const loggerProvider = { provide: nats_constants_1.APP_LOGGER, useFactory: () => { return options.logger || new common_1.Logger('NatsJetStream'); } }; const clientProvider = { provide: nats_constants_2.JETSTREAM_CLIENT, inject: [nats_constants_1.APP_LOGGER], useFactory: (logger) => { return new nats_client_1.NatsClient({ ...options, logger }); } }; const transportProvider = { provide: nats_constants_2.JETSTREAM_TRANSPORT, inject: [nats_constants_1.APP_LOGGER], useFactory: (logger) => { const servers = options.connection?.servers || 'nats://localhost'; // Prepare stream options let streamOpts = options.stream || {}; if (options.streamName) { // If streamName is provided at top level, ensure it's also in stream.name streamOpts = { ...streamOpts, name: options.streamName }; } // Prepare consumer options let consumerOpts = options.consumerOptions || {}; if (options.durableName) { // If durableName is provided at top level, ensure it's also in consumerOptions.name consumerOpts = { ...consumerOpts, name: options.durableName }; } return new jetstream_transport_1.JetStream({ servers: servers, // Keep these for backward compatibility streamName: options.streamName, durableName: options.durableName, queue: options.queue, deliverPolicy: options.deliverPolicy, ackPolicy: options.ackPolicy, ackWait: options.ackWait, filterSubject: options.filterSubject, filterSubjects: options.filterSubjects, consumer: options.consumer, // Updated options stream: streamOpts, consumerOptions: consumerOpts, logger }); } }; return { module: NatsJetStreamModule, providers: [ { provide: nats_constants_2.JETSTREAM_OPTIONS, useValue: options }, loggerProvider, clientProvider, transportProvider ], exports: [nats_constants_2.JETSTREAM_OPTIONS, nats_constants_2.JETSTREAM_CLIENT, nats_constants_2.JETSTREAM_TRANSPORT, nats_constants_1.APP_LOGGER] }; } /** * Register the NatsJetStream module with async options * @param options Async configuration options for the JetStream transport */ static registerAsync(options) { const loggerProvider = { provide: nats_constants_1.APP_LOGGER, inject: [nats_constants_2.JETSTREAM_OPTIONS], useFactory: (options) => { return options.logger || new common_1.Logger('NatsJetStream'); } }; const clientProvider = { provide: nats_constants_2.JETSTREAM_CLIENT, inject: [nats_constants_2.JETSTREAM_OPTIONS, nats_constants_1.APP_LOGGER], useFactory: (options, logger) => { return new nats_client_1.NatsClient({ ...options, logger }); } }; const transportProvider = { provide: nats_constants_2.JETSTREAM_TRANSPORT, inject: [nats_constants_2.JETSTREAM_OPTIONS, nats_constants_1.APP_LOGGER], useFactory: (options, logger) => { const servers = options.connection?.servers || 'nats://localhost'; // Prepare stream options let streamOpts = options.stream || {}; if (options.streamName) { // If streamName is provided at top level, ensure it's also in stream.name streamOpts = { ...streamOpts, name: options.streamName }; } // Prepare consumer options let consumerOpts = options.consumerOptions || {}; if (options.durableName) { // If durableName is provided at top level, ensure it's also in consumerOptions.name consumerOpts = { ...consumerOpts, name: options.durableName }; } return new jetstream_transport_1.JetStream({ servers: servers, // Keep these for backward compatibility streamName: options.streamName, durableName: options.durableName, queue: options.queue, deliverPolicy: options.deliverPolicy, ackPolicy: options.ackPolicy, ackWait: options.ackWait, filterSubject: options.filterSubject, filterSubjects: options.filterSubjects, consumer: options.consumer, // Updated options stream: streamOpts, consumerOptions: consumerOpts, logger }); } }; return { module: NatsJetStreamModule, imports: options.imports || [], providers: [ { provide: nats_constants_2.JETSTREAM_OPTIONS, useFactory: options.useFactory, inject: options.inject || [] }, loggerProvider, clientProvider, transportProvider ], exports: [nats_constants_2.JETSTREAM_OPTIONS, nats_constants_2.JETSTREAM_CLIENT, nats_constants_2.JETSTREAM_TRANSPORT, nats_constants_1.APP_LOGGER] }; } }; tslib_1.__setFunctionName(_classThis, "NatsJetStreamModule"); (() => { const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0; tslib_1.__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers); NatsJetStreamModule = _classThis = _classDescriptor.value; if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata }); tslib_1.__runInitializers(_classThis, _classExtraInitializers); })(); return NatsJetStreamModule = _classThis; })(); exports.NatsJetStreamModule = NatsJetStreamModule; //# sourceMappingURL=nats-jetstream.module.js.map