@initbit/nestjs-jetstream
Version:
NestJS custom NATS JetStream transport
214 lines • 10.4 kB
JavaScript
"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