@feedb2b-dev/kafka 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +3 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/interface.d.ts +62 -0
- package/dist/interface.js +3 -0
- package/dist/interface.js.map +1 -0
- package/dist/kafka.module.d.ts +21 -0
- package/dist/kafka.module.js +249 -0
- package/dist/kafka.module.js.map +1 -0
- package/dist/tokens.d.ts +1 -0
- package/dist/tokens.js +5 -0
- package/dist/tokens.js.map +1 -0
- package/package.json +45 -0
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./interface"), exports);
|
|
18
|
+
__exportStar(require("./tokens"), exports);
|
|
19
|
+
__exportStar(require("./kafka.module"), exports);
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,2CAAyB;AACzB,iDAA+B"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { ModuleMetadata, Type } from '@nestjs/common';
|
|
2
|
+
import { KafkaConfig, ConsumerConfig as KafkaJSConsumerConfig, ProducerConfig as KafkaJSProducerConfig } from 'kafkajs';
|
|
3
|
+
import { LoggerService } from '@nestjs/common';
|
|
4
|
+
export interface RawKafkaMessage {
|
|
5
|
+
key?: Buffer | string | null;
|
|
6
|
+
value: Buffer | string | null;
|
|
7
|
+
headers?: {
|
|
8
|
+
[key: string]: any;
|
|
9
|
+
} | undefined;
|
|
10
|
+
offset: string;
|
|
11
|
+
timestamp?: string;
|
|
12
|
+
partition: number;
|
|
13
|
+
topic: string;
|
|
14
|
+
}
|
|
15
|
+
export interface KafkaMessageDeserializer {
|
|
16
|
+
deserialize(raw: RawKafkaMessage[]): Promise<RawKafkaMessage | {
|
|
17
|
+
value: any;
|
|
18
|
+
} | any>;
|
|
19
|
+
}
|
|
20
|
+
export interface KafkaModuleOptions {
|
|
21
|
+
consumers?: KafkaConsumerOptions[];
|
|
22
|
+
consumerTokens?: string[];
|
|
23
|
+
producers?: KafkaProducerOptions[];
|
|
24
|
+
logger?: LoggerService;
|
|
25
|
+
}
|
|
26
|
+
export interface KafkaConsumerOptions {
|
|
27
|
+
name: string;
|
|
28
|
+
client: KafkaConfig;
|
|
29
|
+
consumerConfig: KafkaJSConsumerConfig & {
|
|
30
|
+
groupId: string;
|
|
31
|
+
};
|
|
32
|
+
topics: Array<string>;
|
|
33
|
+
handler: Type<KafkaBatchHandler> | string;
|
|
34
|
+
runConfig?: Partial<import('kafkajs').ConsumerRunConfig>;
|
|
35
|
+
fromBeginning?: boolean;
|
|
36
|
+
deserializer?: Type<KafkaMessageDeserializer> | KafkaMessageDeserializer;
|
|
37
|
+
}
|
|
38
|
+
export interface KafkaProducerOptions {
|
|
39
|
+
name: string;
|
|
40
|
+
client: KafkaConfig;
|
|
41
|
+
producerConfig?: KafkaJSProducerConfig;
|
|
42
|
+
}
|
|
43
|
+
export interface KafkaModuleAsyncOptions extends Pick<ModuleMetadata, 'imports'> {
|
|
44
|
+
inject?: any[];
|
|
45
|
+
useFactory: (...args: any[]) => Promise<KafkaModuleOptions> | KafkaModuleOptions;
|
|
46
|
+
producerTokens?: string[];
|
|
47
|
+
consumerTokens?: string[];
|
|
48
|
+
}
|
|
49
|
+
export interface KafkaBatchHandler {
|
|
50
|
+
handleBatch(...args: any[]): Promise<void> | void;
|
|
51
|
+
}
|
|
52
|
+
export interface KafkaIncomingMessage {
|
|
53
|
+
key?: string | Buffer<ArrayBufferLike> | undefined;
|
|
54
|
+
value: any | Buffer<ArrayBufferLike> | null;
|
|
55
|
+
headers?: {
|
|
56
|
+
[key: string]: any;
|
|
57
|
+
} | undefined;
|
|
58
|
+
offset: string;
|
|
59
|
+
timestamp?: string;
|
|
60
|
+
topic: string;
|
|
61
|
+
partition: number;
|
|
62
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interface.js","sourceRoot":"","sources":["../src/interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { DynamicModule, OnModuleDestroy, OnApplicationBootstrap } from '@nestjs/common';
|
|
2
|
+
import { ModuleRef } from '@nestjs/core';
|
|
3
|
+
import { Consumer, Producer } from 'kafkajs';
|
|
4
|
+
import { KafkaModuleOptions, KafkaModuleAsyncOptions } from './interface';
|
|
5
|
+
export declare class KafkaModule implements OnApplicationBootstrap, OnModuleDestroy {
|
|
6
|
+
private options;
|
|
7
|
+
private moduleRef;
|
|
8
|
+
private readonly logger;
|
|
9
|
+
private consumers;
|
|
10
|
+
private isShuttingDown;
|
|
11
|
+
constructor(options: KafkaModuleOptions, moduleRef: ModuleRef);
|
|
12
|
+
static registerAsync(options: KafkaModuleAsyncOptions): DynamicModule;
|
|
13
|
+
onApplicationBootstrap(): Promise<void>;
|
|
14
|
+
onModuleDestroy(): Promise<void>;
|
|
15
|
+
private startConsumer;
|
|
16
|
+
private handleConnectionLoss;
|
|
17
|
+
private resolveHandler;
|
|
18
|
+
private resolveDeserializer;
|
|
19
|
+
getProducer(name: string): Producer | undefined;
|
|
20
|
+
getConsumer(name: string): Consumer | undefined;
|
|
21
|
+
}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
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;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
15
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
16
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
17
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
18
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
19
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
20
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
var KafkaModule_1;
|
|
24
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
exports.KafkaModule = void 0;
|
|
26
|
+
const common_1 = require("@nestjs/common");
|
|
27
|
+
const core_1 = require("@nestjs/core");
|
|
28
|
+
const kafkajs_1 = require("kafkajs");
|
|
29
|
+
const tokens_1 = require("./tokens");
|
|
30
|
+
let KafkaModule = KafkaModule_1 = class KafkaModule {
|
|
31
|
+
constructor(options, moduleRef) {
|
|
32
|
+
this.options = options;
|
|
33
|
+
this.moduleRef = moduleRef;
|
|
34
|
+
this.consumers = new Map();
|
|
35
|
+
this.isShuttingDown = false;
|
|
36
|
+
this.logger = options.logger || new common_1.Logger('KafkaModule');
|
|
37
|
+
}
|
|
38
|
+
static registerAsync(options) {
|
|
39
|
+
const optionsProvider = {
|
|
40
|
+
provide: tokens_1.KAFKA_MODULE_OPTIONS,
|
|
41
|
+
useFactory: options.useFactory,
|
|
42
|
+
inject: options.inject || [],
|
|
43
|
+
};
|
|
44
|
+
const producerTokens = options.producerTokens || [];
|
|
45
|
+
const producerProviders = producerTokens.map((name) => ({
|
|
46
|
+
provide: name,
|
|
47
|
+
inject: [tokens_1.KAFKA_MODULE_OPTIONS],
|
|
48
|
+
useFactory: (options) => __awaiter(this, void 0, void 0, function* () {
|
|
49
|
+
var _a;
|
|
50
|
+
const configs = (_a = options === null || options === void 0 ? void 0 : options.producers) === null || _a === void 0 ? void 0 : _a.find((_producer) => _producer.name === name);
|
|
51
|
+
if (!configs) {
|
|
52
|
+
throw new Error(`Producer config with name "${name}" not found in KafkaModuleOptions.producers`);
|
|
53
|
+
}
|
|
54
|
+
const kafka = new kafkajs_1.Kafka(configs.client);
|
|
55
|
+
const producer = kafka.producer(configs.producerConfig || {});
|
|
56
|
+
yield producer.connect();
|
|
57
|
+
return producer;
|
|
58
|
+
}),
|
|
59
|
+
}));
|
|
60
|
+
return {
|
|
61
|
+
module: KafkaModule_1,
|
|
62
|
+
imports: options.imports || [],
|
|
63
|
+
providers: [optionsProvider, ...producerProviders],
|
|
64
|
+
exports: [...producerProviders],
|
|
65
|
+
global: true,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
onApplicationBootstrap() {
|
|
69
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
70
|
+
if (!this.options) {
|
|
71
|
+
this.logger.warn('No kafka module options provided. Skipping initialization.');
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
if (Array.isArray(this.options.consumers)) {
|
|
75
|
+
for (const currentConsumer of this.options.consumers) {
|
|
76
|
+
try {
|
|
77
|
+
yield this.startConsumer(currentConsumer);
|
|
78
|
+
this.logger.log(`Consumer "${currentConsumer.name}" listening on topics: ${currentConsumer.topics.join(', ')}`);
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
this.logger.error(`Failed to start consumer ${currentConsumer.name}: ${err.message}`, err.stack);
|
|
82
|
+
yield this.handleConnectionLoss(currentConsumer.name, 'consumer', err);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
onModuleDestroy() {
|
|
89
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
90
|
+
var _a;
|
|
91
|
+
if (this.isShuttingDown)
|
|
92
|
+
return;
|
|
93
|
+
this.isShuttingDown = true;
|
|
94
|
+
for (const [name, consumer] of this.consumers) {
|
|
95
|
+
try {
|
|
96
|
+
yield consumer.disconnect();
|
|
97
|
+
this.logger.log(`Consumer ${name} disconnected`);
|
|
98
|
+
}
|
|
99
|
+
catch (err) {
|
|
100
|
+
this.logger.error(`Error disconnecting consumer ${name}: ${err.message}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
const producerNames = (this.options && this.options.producers) ? this.options.producers.map(_producer => _producer.name) : [];
|
|
104
|
+
for (const name of producerNames) {
|
|
105
|
+
const token = name;
|
|
106
|
+
try {
|
|
107
|
+
const producer = this.moduleRef.get(token, { strict: false });
|
|
108
|
+
if (producer) {
|
|
109
|
+
yield producer.disconnect();
|
|
110
|
+
this.logger.log(`Disconnected producer ${name}`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
catch (err) {
|
|
114
|
+
this.logger.error(`Error while disconnecting producer ${name}: ${(_a = err === null || err === void 0 ? void 0 : err.message) !== null && _a !== void 0 ? _a : err}`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
startConsumer(_consumer) {
|
|
120
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
121
|
+
var _a;
|
|
122
|
+
const kafka = new kafkajs_1.Kafka(_consumer.client);
|
|
123
|
+
const consumer = kafka.consumer(_consumer.consumerConfig);
|
|
124
|
+
consumer.on(consumer.events.DISCONNECT, (error) => __awaiter(this, void 0, void 0, function* () {
|
|
125
|
+
yield this.handleConnectionLoss(_consumer.name, 'consumer', error);
|
|
126
|
+
}));
|
|
127
|
+
consumer.on(consumer.events.CRASH, (error) => __awaiter(this, void 0, void 0, function* () {
|
|
128
|
+
yield this.handleConnectionLoss(_consumer.name, 'consumer', error);
|
|
129
|
+
}));
|
|
130
|
+
consumer.on(consumer.events.HEARTBEAT, () => __awaiter(this, void 0, void 0, function* () {
|
|
131
|
+
this.logger.log(`[Consumer] [${_consumer.name}] HeartBeat recevied: ${new Date().toISOString()}`);
|
|
132
|
+
}));
|
|
133
|
+
yield consumer.connect();
|
|
134
|
+
for (const topic of _consumer.topics) {
|
|
135
|
+
yield consumer.subscribe({ topic, fromBeginning: !!_consumer.fromBeginning });
|
|
136
|
+
}
|
|
137
|
+
const runConfig = _consumer.runConfig || {};
|
|
138
|
+
yield consumer.run(Object.assign(Object.assign({}, (runConfig)), { eachBatchAutoResolve: (_a = runConfig.eachBatchAutoResolve) !== null && _a !== void 0 ? _a : true, eachBatch: (payload) => __awaiter(this, void 0, void 0, function* () {
|
|
139
|
+
const handler = this.resolveHandler(_consumer.handler);
|
|
140
|
+
let messages;
|
|
141
|
+
if (!handler || typeof handler.handleBatch !== 'function') {
|
|
142
|
+
this.logger.error(`Handler for consumer ${_consumer.name} not found or does not implement handleBatch()`);
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
const deserializer = this.resolveDeserializer(_consumer.deserializer);
|
|
146
|
+
if (deserializer) {
|
|
147
|
+
messages = yield deserializer.deserialize(payload.batch.messages.map((m) => ({
|
|
148
|
+
key: m.key,
|
|
149
|
+
value: m.value,
|
|
150
|
+
headers: m.headers,
|
|
151
|
+
offset: m.offset,
|
|
152
|
+
timestamp: m.timestamp,
|
|
153
|
+
topic: payload.batch.topic,
|
|
154
|
+
partition: payload.batch.partition,
|
|
155
|
+
})));
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
messages = payload.batch.messages.map((m) => ({
|
|
159
|
+
key: m.key ? m.key : undefined,
|
|
160
|
+
value: m.value ? m.value : null,
|
|
161
|
+
headers: m.headers,
|
|
162
|
+
offset: m.offset,
|
|
163
|
+
timestamp: m.timestamp,
|
|
164
|
+
topic: payload.batch.topic,
|
|
165
|
+
partition: payload.batch.partition,
|
|
166
|
+
}));
|
|
167
|
+
}
|
|
168
|
+
const ctx = {
|
|
169
|
+
heartbeat: payload.heartbeat,
|
|
170
|
+
resolveOffset: (offset) => payload.resolveOffset(offset),
|
|
171
|
+
commitOffsetsIfNecessary: payload.commitOffsetsIfNecessary,
|
|
172
|
+
};
|
|
173
|
+
try {
|
|
174
|
+
yield handler.handleBatch(messages, ctx);
|
|
175
|
+
yield payload.heartbeat();
|
|
176
|
+
}
|
|
177
|
+
catch (err) {
|
|
178
|
+
this.logger.error(`Error in handler for consumer ${_consumer.name}: ${err.message}`, err.stack);
|
|
179
|
+
throw err;
|
|
180
|
+
}
|
|
181
|
+
}) }));
|
|
182
|
+
this.consumers.set(_consumer.name, consumer);
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
handleConnectionLoss(name, type, err) {
|
|
186
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
187
|
+
var _a, _b;
|
|
188
|
+
if (this.isShuttingDown)
|
|
189
|
+
return;
|
|
190
|
+
this.isShuttingDown = true;
|
|
191
|
+
this.logger.error(`${type} "${name}" lost connection: ${(_a = err === null || err === void 0 ? void 0 : err.message) !== null && _a !== void 0 ? _a : err}`);
|
|
192
|
+
this.logger.error('Exiting application due to Kafka connection loss');
|
|
193
|
+
try {
|
|
194
|
+
yield this.onModuleDestroy();
|
|
195
|
+
}
|
|
196
|
+
catch (err) {
|
|
197
|
+
this.logger.error(`Error during shutdown: ${(_b = err === null || err === void 0 ? void 0 : err.message) !== null && _b !== void 0 ? _b : err}`);
|
|
198
|
+
}
|
|
199
|
+
finally {
|
|
200
|
+
process.exit(1);
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
resolveHandler(handlerRef) {
|
|
205
|
+
try {
|
|
206
|
+
if (typeof handlerRef === 'string') {
|
|
207
|
+
return this.moduleRef.get(handlerRef, { strict: false });
|
|
208
|
+
}
|
|
209
|
+
return this.moduleRef.get(handlerRef, { strict: false });
|
|
210
|
+
}
|
|
211
|
+
catch (err) {
|
|
212
|
+
this.logger.error(`Failed to resolve handler: ${err.message}`);
|
|
213
|
+
return null;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
resolveDeserializer(deserializerRef) {
|
|
217
|
+
if (!deserializerRef)
|
|
218
|
+
return null;
|
|
219
|
+
if (typeof deserializerRef === 'object') {
|
|
220
|
+
return deserializerRef;
|
|
221
|
+
}
|
|
222
|
+
try {
|
|
223
|
+
return this.moduleRef.get(deserializerRef, { strict: false });
|
|
224
|
+
}
|
|
225
|
+
catch (err) {
|
|
226
|
+
this.logger.error(`Failed to resolve deserializer: ${err.message}`);
|
|
227
|
+
return null;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
getProducer(name) {
|
|
231
|
+
try {
|
|
232
|
+
return this.moduleRef.get(name, { strict: false });
|
|
233
|
+
}
|
|
234
|
+
catch (_a) {
|
|
235
|
+
return undefined;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
getConsumer(name) {
|
|
239
|
+
return this.consumers.get(name);
|
|
240
|
+
}
|
|
241
|
+
};
|
|
242
|
+
exports.KafkaModule = KafkaModule;
|
|
243
|
+
exports.KafkaModule = KafkaModule = KafkaModule_1 = __decorate([
|
|
244
|
+
(0, common_1.Global)(),
|
|
245
|
+
(0, common_1.Module)({}),
|
|
246
|
+
__param(0, (0, common_1.Inject)(tokens_1.KAFKA_MODULE_OPTIONS)),
|
|
247
|
+
__metadata("design:paramtypes", [Object, core_1.ModuleRef])
|
|
248
|
+
], KafkaModule);
|
|
249
|
+
//# sourceMappingURL=kafka.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kafka.module.js","sourceRoot":"","sources":["../src/kafka.module.ts"],"names":[],"mappings":"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"}
|
package/dist/tokens.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const KAFKA_MODULE_OPTIONS = "KAFKA_MODULE_OPTIONS";
|
package/dist/tokens.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":";;;AAAa,QAAA,oBAAoB,GAAG,sBAAsB,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@feedb2b-dev/kafka",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "High-performance Kafka producers & consumers for NestJS — pluggable, extensible, and built for high-throughput microservices.",
|
|
5
|
+
"main": "dist/index.ts",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist/**/*"
|
|
9
|
+
],
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc -p tsconfig.build.json",
|
|
12
|
+
"prepublishOnly": "npm run build"
|
|
13
|
+
},
|
|
14
|
+
"author": "Zhora",
|
|
15
|
+
"license": "ISC",
|
|
16
|
+
"keywords": [
|
|
17
|
+
"nestjs",
|
|
18
|
+
"nestjs-module",
|
|
19
|
+
"kafka",
|
|
20
|
+
"kafkajs",
|
|
21
|
+
"kafka-consumer",
|
|
22
|
+
"kafka-producer",
|
|
23
|
+
"microservices",
|
|
24
|
+
"high-throughput",
|
|
25
|
+
"highload",
|
|
26
|
+
"event-driven",
|
|
27
|
+
"distributed-systems",
|
|
28
|
+
"typescript",
|
|
29
|
+
"nodejs",
|
|
30
|
+
"scalable",
|
|
31
|
+
"concurrency",
|
|
32
|
+
"feedb2b"
|
|
33
|
+
],
|
|
34
|
+
"devDependencies": {
|
|
35
|
+
"@types/node": "^24.3.0",
|
|
36
|
+
"typescript": "^5.9.2"
|
|
37
|
+
},
|
|
38
|
+
"peerDependencies": {
|
|
39
|
+
"@nestjs/common": "^11.0.0",
|
|
40
|
+
"@nestjs/core": "^11.0.0"
|
|
41
|
+
},
|
|
42
|
+
"dependencies": {
|
|
43
|
+
"kafkajs": "^2.2.4"
|
|
44
|
+
}
|
|
45
|
+
}
|