@message-queue-toolkit/kafka 0.1.3 → 0.2.1
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/AbstractKafkaConsumer.d.ts +7 -4
- package/dist/AbstractKafkaConsumer.js +52 -7
- package/dist/AbstractKafkaConsumer.js.map +1 -1
- package/dist/handler-container/KafkaHandlerConfig.d.ts +4 -4
- package/dist/handler-container/KafkaHandlerConfig.js.map +1 -1
- package/dist/handler-container/KafkaHandlerContainer.d.ts +3 -3
- package/dist/handler-container/KafkaHandlerContainer.js.map +1 -1
- package/dist/handler-container/KafkaHandlerRoutingBuilder.d.ts +4 -4
- package/dist/handler-container/KafkaHandlerRoutingBuilder.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/utils/errorCodes.d.ts +3 -0
- package/dist/utils/errorCodes.js +5 -0
- package/dist/utils/errorCodes.js.map +1 -0
- package/package.json +9 -9
|
@@ -4,19 +4,22 @@ import { AbstractKafkaService, type BaseKafkaOptions } from './AbstractKafkaServ
|
|
|
4
4
|
import type { KafkaHandlerRouting } from './handler-container/KafkaHandlerRoutingBuilder.ts';
|
|
5
5
|
import type { KafkaConfig, KafkaDependencies, TopicConfig } from './types.ts';
|
|
6
6
|
export type KafkaConsumerDependencies = KafkaDependencies & Pick<QueueConsumerDependencies, 'transactionObservabilityManager'>;
|
|
7
|
-
export type KafkaConsumerOptions<TopicsConfig extends TopicConfig[]> = BaseKafkaOptions & Omit<ConsumerOptions<string, object, string, string>, 'deserializers' | 'autocommit' | keyof KafkaConfig> & Omit<ConsumeOptions<string, object, string, string>, 'topics'> & {
|
|
8
|
-
handlers: KafkaHandlerRouting<TopicsConfig>;
|
|
7
|
+
export type KafkaConsumerOptions<TopicsConfig extends TopicConfig[], ExecutionContext> = BaseKafkaOptions & Omit<ConsumerOptions<string, object, string, string>, 'deserializers' | 'autocommit' | keyof KafkaConfig> & Omit<ConsumeOptions<string, object, string, string>, 'topics'> & {
|
|
8
|
+
handlers: KafkaHandlerRouting<TopicsConfig, ExecutionContext>;
|
|
9
9
|
};
|
|
10
|
-
export declare abstract class AbstractKafkaConsumer<TopicsConfig extends TopicConfig[]> extends AbstractKafkaService<TopicsConfig, KafkaConsumerOptions<TopicsConfig>> {
|
|
10
|
+
export declare abstract class AbstractKafkaConsumer<TopicsConfig extends TopicConfig[], ExecutionContext> extends AbstractKafkaService<TopicsConfig, KafkaConsumerOptions<TopicsConfig, ExecutionContext>> {
|
|
11
11
|
private readonly consumer;
|
|
12
12
|
private consumerStream?;
|
|
13
13
|
private readonly transactionObservabilityManager;
|
|
14
14
|
private readonly handlerContainer;
|
|
15
|
-
|
|
15
|
+
private readonly executionContext;
|
|
16
|
+
constructor(dependencies: KafkaConsumerDependencies, options: KafkaConsumerOptions<TopicsConfig, ExecutionContext>, executionContext: ExecutionContext);
|
|
16
17
|
init(): Promise<void>;
|
|
17
18
|
close(): Promise<void>;
|
|
18
19
|
private consume;
|
|
19
20
|
private tryToConsume;
|
|
21
|
+
private commitMessage;
|
|
22
|
+
private handleResponseErrorOnCommit;
|
|
20
23
|
private buildTransactionName;
|
|
21
24
|
private getRequestContext;
|
|
22
25
|
}
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
import { randomUUID } from 'node:crypto';
|
|
2
2
|
import { setTimeout } from 'node:timers/promises';
|
|
3
3
|
import { InternalError, stringValueSerializer, } from '@lokalise/node-core';
|
|
4
|
-
import { Consumer, stringDeserializer, } from '@platformatic/kafka';
|
|
4
|
+
import { Consumer, ProtocolError, ResponseError, stringDeserializer, } from '@platformatic/kafka';
|
|
5
5
|
import { AbstractKafkaService } from "./AbstractKafkaService.js";
|
|
6
6
|
import { KafkaHandlerContainer } from "./handler-container/KafkaHandlerContainer.js";
|
|
7
|
+
import { ILLEGAL_GENERATION, REBALANCE_IN_PROGRESS, UNKNOWN_MEMBER_ID } from './utils/errorCodes.js';
|
|
7
8
|
import { safeJsonDeserializer } from './utils/safeJsonDeserializer.js';
|
|
9
|
+
const commitErrorCodesToIgnore = new Set([
|
|
10
|
+
ILLEGAL_GENERATION,
|
|
11
|
+
UNKNOWN_MEMBER_ID,
|
|
12
|
+
REBALANCE_IN_PROGRESS,
|
|
13
|
+
]);
|
|
8
14
|
/*
|
|
9
15
|
TODO: Proper retry mechanism + DLQ -> https://lokalise.atlassian.net/browse/EDEXP-498
|
|
10
16
|
In the meantime, we will retry in memory up to 3 times
|
|
@@ -15,10 +21,12 @@ export class AbstractKafkaConsumer extends AbstractKafkaService {
|
|
|
15
21
|
consumerStream;
|
|
16
22
|
transactionObservabilityManager;
|
|
17
23
|
handlerContainer;
|
|
18
|
-
|
|
24
|
+
executionContext;
|
|
25
|
+
constructor(dependencies, options, executionContext) {
|
|
19
26
|
super(dependencies, options);
|
|
20
27
|
this.transactionObservabilityManager = dependencies.transactionObservabilityManager;
|
|
21
28
|
this.handlerContainer = new KafkaHandlerContainer(options.handlers, options.messageTypeField);
|
|
29
|
+
this.executionContext = executionContext;
|
|
22
30
|
this.consumer = new Consumer({
|
|
23
31
|
...this.options.kafka,
|
|
24
32
|
...this.options,
|
|
@@ -30,6 +38,11 @@ export class AbstractKafkaConsumer extends AbstractKafkaService {
|
|
|
30
38
|
headerValue: stringDeserializer,
|
|
31
39
|
},
|
|
32
40
|
});
|
|
41
|
+
const logDetails = { origin: this.constructor.name, groupId: this.options.groupId };
|
|
42
|
+
this.consumer.on('consumer:group:join', (_) => this.logger.debug(logDetails, 'Consumer is joining a group'));
|
|
43
|
+
this.consumer.on('consumer:rejoin', (_) => this.logger.debug(logDetails, 'Consumer is re-joining a group after a rebalance'));
|
|
44
|
+
this.consumer.on('consumer:group:leave', (_) => this.logger.debug(logDetails, 'Consumer is leaving the group'));
|
|
45
|
+
this.consumer.on('consumer:group:rebalance', (_) => this.logger.debug(logDetails, 'Group is rebalancing'));
|
|
33
46
|
}
|
|
34
47
|
async init() {
|
|
35
48
|
if (this.consumerStream)
|
|
@@ -61,11 +74,11 @@ export class AbstractKafkaConsumer extends AbstractKafkaService {
|
|
|
61
74
|
async consume(message) {
|
|
62
75
|
// message.value can be undefined if the message is not JSON-serializable
|
|
63
76
|
if (!message.value)
|
|
64
|
-
return
|
|
77
|
+
return this.commitMessage(message);
|
|
65
78
|
const handler = this.handlerContainer.resolveHandler(message.topic, message.value);
|
|
66
79
|
// if there is no handler for the message, we ignore it (simulating subscription)
|
|
67
80
|
if (!handler)
|
|
68
|
-
return
|
|
81
|
+
return this.commitMessage(message);
|
|
69
82
|
/* v8 ignore next */
|
|
70
83
|
const transactionId = this.resolveMessageId(message.value) ?? randomUUID();
|
|
71
84
|
this.transactionObservabilityManager?.start(this.buildTransactionName(message), transactionId);
|
|
@@ -80,7 +93,7 @@ export class AbstractKafkaConsumer extends AbstractKafkaService {
|
|
|
80
93
|
message: message.value,
|
|
81
94
|
processingResult: { status: 'error', errorReason: 'invalidMessage' },
|
|
82
95
|
});
|
|
83
|
-
return
|
|
96
|
+
return this.commitMessage(message);
|
|
84
97
|
}
|
|
85
98
|
const validatedMessage = parseResult.data;
|
|
86
99
|
const requestContext = this.getRequestContext(message);
|
|
@@ -110,11 +123,11 @@ export class AbstractKafkaConsumer extends AbstractKafkaService {
|
|
|
110
123
|
});
|
|
111
124
|
}
|
|
112
125
|
this.transactionObservabilityManager?.stop(transactionId);
|
|
113
|
-
return
|
|
126
|
+
return this.commitMessage(message);
|
|
114
127
|
}
|
|
115
128
|
async tryToConsume(message, handler, requestContext) {
|
|
116
129
|
try {
|
|
117
|
-
await handler(message, requestContext);
|
|
130
|
+
await handler(message, this.executionContext, requestContext);
|
|
118
131
|
return true;
|
|
119
132
|
}
|
|
120
133
|
catch (error) {
|
|
@@ -125,6 +138,38 @@ export class AbstractKafkaConsumer extends AbstractKafkaService {
|
|
|
125
138
|
}
|
|
126
139
|
return false;
|
|
127
140
|
}
|
|
141
|
+
async commitMessage(message) {
|
|
142
|
+
try {
|
|
143
|
+
this.logger.debug({ topic: message.topic, offset: message.offset, timestamp: message.timestamp }, 'Trying to commit message');
|
|
144
|
+
await message.commit();
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
if (error instanceof ResponseError) {
|
|
148
|
+
return this.handleResponseErrorOnCommit(error);
|
|
149
|
+
}
|
|
150
|
+
throw error;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
handleResponseErrorOnCommit(responseError) {
|
|
154
|
+
// Some errors are expected during group rebalancing, so we handle them gracefully
|
|
155
|
+
for (const error of responseError.errors) {
|
|
156
|
+
if (error instanceof ProtocolError &&
|
|
157
|
+
error.apiCode &&
|
|
158
|
+
commitErrorCodesToIgnore.has(error.apiCode)) {
|
|
159
|
+
this.logger.error({
|
|
160
|
+
apiCode: error.apiCode,
|
|
161
|
+
apiId: error.apiId,
|
|
162
|
+
responseErrorMessage: responseError.message,
|
|
163
|
+
protocolErrorMessage: error.message,
|
|
164
|
+
error: responseError,
|
|
165
|
+
}, `Failed to commit message: ${error.message}`);
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
// If error is not recognized, rethrow it
|
|
169
|
+
throw responseError;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
128
173
|
buildTransactionName(message) {
|
|
129
174
|
const messageType = this.resolveMessageType(message.value);
|
|
130
175
|
let name = `kafka:${message.topic}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractKafkaConsumer.js","sourceRoot":"","sources":["../lib/AbstractKafkaConsumer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EACL,aAAa,EAEb,qBAAqB,GACtB,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EAEL,QAAQ,EAIR,kBAAkB,GACnB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,oBAAoB,EAAyB,MAAM,2BAA2B,CAAA;AACvF,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAA;AAIpF,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;
|
|
1
|
+
{"version":3,"file":"AbstractKafkaConsumer.js","sourceRoot":"","sources":["../lib/AbstractKafkaConsumer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EACL,aAAa,EAEb,qBAAqB,GACtB,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EAEL,QAAQ,EAIR,aAAa,EACb,aAAa,EACb,kBAAkB,GACnB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,oBAAoB,EAAyB,MAAM,2BAA2B,CAAA;AACvF,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAA;AAIpF,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACpG,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;AAiBtE,MAAM,wBAAwB,GAAG,IAAI,GAAG,CAAC;IACvC,kBAAkB;IAClB,iBAAiB;IACjB,qBAAqB;CACtB,CAAC,CAAA;AAEF;;;GAGG;AACH,MAAM,qBAAqB,GAAG,CAAC,CAAA;AAE/B,MAAM,OAAgB,qBAGpB,SAAQ,oBAAwF;IAC/E,QAAQ,CAA0C;IAC3D,cAAc,CAAiD;IAEtD,+BAA+B,CAAiC;IAChE,gBAAgB,CAAuD;IACvE,gBAAgB,CAAkB;IAEnD,YACE,YAAuC,EACvC,OAA6D,EAC7D,gBAAkC;QAElC,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;QAE5B,IAAI,CAAC,+BAA+B,GAAG,YAAY,CAAC,+BAA+B,CAAA;QACnF,IAAI,CAAC,gBAAgB,GAAG,IAAI,qBAAqB,CAC/C,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,gBAAgB,CACzB,CAAA;QACD,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAA;QAExC,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC;YAC3B,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK;YACrB,GAAG,IAAI,CAAC,OAAO;YACf,UAAU,EAAE,KAAK,EAAE,4BAA4B;YAC/C,aAAa,EAAE;gBACb,GAAG,EAAE,kBAAkB;gBACvB,KAAK,EAAE,oBAAoB;gBAC3B,SAAS,EAAE,kBAAkB;gBAC7B,WAAW,EAAE,kBAAkB;aAChC;SACF,CAAC,CAAA;QAEF,MAAM,UAAU,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAA;QACnF,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC,CAAC,EAAE,EAAE,CAC5C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,6BAA6B,CAAC,CAC7D,CAAA;QACD,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE,EAAE,CACxC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,kDAAkD,CAAC,CAClF,CAAA;QACD,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,sBAAsB,EAAE,CAAC,CAAC,EAAE,EAAE,CAC7C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,+BAA+B,CAAC,CAC/D,CAAA;QACD,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,0BAA0B,EAAE,CAAC,CAAC,EAAE,EAAE,CACjD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,sBAAsB,CAAC,CACtD,CAAA;IACH,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,IAAI,CAAC,cAAc;YAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAA;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAA;QAC3C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;QAE9E,IAAI,CAAC;YACH,MAAM,EAAE,QAAQ,EAAE,GAAG,cAAc,EAAE,GAAG,IAAI,CAAC,OAAO,CAAA,CAAC,8CAA8C;YACnG,IAAI,CAAC,cAAc,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,GAAG,cAAc,EAAE,MAAM,EAAE,CAAC,CAAA;QAClF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,aAAa,CAAC;gBACtB,OAAO,EAAE,sBAAsB;gBAC/B,SAAS,EAAE,2BAA2B;gBACtC,KAAK,EAAE,KAAK;aACb,CAAC,CAAA;QACJ,CAAC;QAED,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAA;QAClE,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAA;IACtE,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAA;QAElD,MAAM,IAAI,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;QAC7D,IAAI,CAAC,cAAc,GAAG,SAAS,CAAA;QAC/B,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAA;IAC7B,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,OAAgD;QACpE,yEAAyE;QACzE,IAAI,CAAC,OAAO,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;QAEtD,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;QAClF,iFAAiF;QACjF,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;QAEhD,oBAAoB;QACpB,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,UAAU,EAAE,CAAA;QAC1E,IAAI,CAAC,+BAA+B,EAAE,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,CAAA;QAE9F,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAC3D,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YACzB,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,EAAE;gBACnC,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,OAAO,EAAE,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC;aAC9C,CAAC,CAAA;YACF,IAAI,CAAC,sBAAsB,CAAC;gBAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,OAAO,EAAE,OAAO,CAAC,KAAK;gBACtB,gBAAgB,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE;aACrE,CAAC,CAAA;YAEF,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;QACpC,CAAC;QAED,MAAM,gBAAgB,GAAG,WAAW,CAAC,IAAI,CAAA;QAEzC,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAA;QAEtD,IAAI,OAAO,GAAG,CAAC,CAAA;QACf,IAAI,QAAQ,GAAG,KAAK,CAAA;QACpB,GAAG,CAAC;YACF,qCAAqC;YACrC,IAAI,OAAO,GAAG,CAAC;gBAAE,MAAM,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAA;YAE3D,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAChC,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,EACvC,OAAO,CAAC,OAAO,EACf,cAAc,CACf,CAAA;YACD,IAAI,QAAQ;gBAAE,MAAK;YAEnB,OAAO,EAAE,CAAA;QACX,CAAC,QAAQ,OAAO,GAAG,qBAAqB,EAAC;QAEzC,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,sBAAsB,CAAC;gBAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,OAAO,EAAE,gBAAgB;gBACzB,gBAAgB,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;aACzC,CAAC,CAAA;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,sBAAsB,CAAC;gBAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,OAAO,EAAE,gBAAgB;gBACzB,gBAAgB,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE;aACnE,CAAC,CAAA;QACJ,CAAC;QAED,IAAI,CAAC,+BAA+B,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;QAEzD,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;IACpC,CAAC;IAEO,KAAK,CAAC,YAAY,CACxB,OAAsD,EACtD,OAAqD,EACrD,cAA8B;QAE9B,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAA;YAC7D,OAAO,IAAI,CAAA;QACb,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;gBACvB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,OAAO,EAAE,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC;aAC9C,CAAC,CAAA;QACJ,CAAC;QAED,OAAO,KAAK,CAAA;IACd,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,OAAgD;QAC1E,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,EAC9E,0BAA0B,CAC3B,CAAA;YACD,MAAM,OAAO,CAAC,MAAM,EAAE,CAAA;QACxB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,aAAa,EAAE,CAAC;gBACnC,OAAO,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAA;YAChD,CAAC;YACD,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC;IAEO,2BAA2B,CAAC,aAA4B;QAC9D,kFAAkF;QAClF,KAAK,MAAM,KAAK,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;YACzC,IACE,KAAK,YAAY,aAAa;gBAC9B,KAAK,CAAC,OAAO;gBACb,wBAAwB,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAC3C,CAAC;gBACD,IAAI,CAAC,MAAM,CAAC,KAAK,CACf;oBACE,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,oBAAoB,EAAE,aAAa,CAAC,OAAO;oBAC3C,oBAAoB,EAAE,KAAK,CAAC,OAAO;oBACnC,KAAK,EAAE,aAAa;iBACrB,EACD,6BAA6B,KAAK,CAAC,OAAO,EAAE,CAC7C,CAAA;YACH,CAAC;iBAAM,CAAC;gBACN,yCAAyC;gBACzC,MAAM,aAAa,CAAA;YACrB,CAAC;QACH,CAAC;IACH,CAAC;IAEO,oBAAoB,CAAC,OAAgD;QAC3E,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAE1D,IAAI,IAAI,GAAG,SAAS,OAAO,CAAC,KAAK,EAAE,CAAA;QACnC,IAAI,WAAW,EAAE,IAAI,EAAE,CAAC,MAAM;YAAE,IAAI,IAAI,IAAI,WAAW,CAAC,IAAI,EAAE,EAAE,CAAA;QAEhE,OAAO,IAAI,CAAA;IACb,CAAC;IAEO,iBAAiB,CAAC,OAAgD;QACxE,IAAI,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,2BAA2B,EAAE,CAAC,CAAA;QACnE,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;YAAE,KAAK,GAAG,UAAU,EAAE,CAAA;QAE7D,OAAO;YACL,KAAK;YACL,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;gBACxB,cAAc,EAAE,KAAK;gBACrB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,UAAU,EAAE,OAAO,CAAC,GAAG;aACxB,CAAC;SACH,CAAA;IACH,CAAC;CACF"}
|
|
@@ -5,9 +5,9 @@ export interface RequestContext {
|
|
|
5
5
|
logger: CommonLogger;
|
|
6
6
|
reqId: string;
|
|
7
7
|
}
|
|
8
|
-
export type KafkaHandler<MessageValue extends object> = (message: Message<string, MessageValue, string, string>, requestContext: RequestContext) => Promise<void> | void;
|
|
9
|
-
export declare class KafkaHandlerConfig<MessageValue extends object> {
|
|
8
|
+
export type KafkaHandler<MessageValue extends object, ExecutionContext> = (message: Message<string, MessageValue, string, string>, context: ExecutionContext, requestContext: RequestContext) => Promise<void> | void;
|
|
9
|
+
export declare class KafkaHandlerConfig<MessageValue extends object, ExecutionContext> {
|
|
10
10
|
readonly schema: ZodSchema<MessageValue>;
|
|
11
|
-
readonly handler: KafkaHandler<MessageValue>;
|
|
12
|
-
constructor(schema: ZodSchema<MessageValue>, handler: KafkaHandler<MessageValue>);
|
|
11
|
+
readonly handler: KafkaHandler<MessageValue, ExecutionContext>;
|
|
12
|
+
constructor(schema: ZodSchema<MessageValue>, handler: KafkaHandler<MessageValue, ExecutionContext>);
|
|
13
13
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KafkaHandlerConfig.js","sourceRoot":"","sources":["../../lib/handler-container/KafkaHandlerConfig.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"KafkaHandlerConfig.js","sourceRoot":"","sources":["../../lib/handler-container/KafkaHandlerConfig.ts"],"names":[],"mappings":"AAeA,MAAM,OAAO,kBAAkB;IACb,MAAM,CAAyB;IAC/B,OAAO,CAA8C;IAErE,YACE,MAA+B,EAC/B,OAAqD;QAErD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;CACF"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import type { SupportedMessageValuesForTopic, SupportedTopics, TopicConfig } from '../types.ts';
|
|
2
2
|
import type { KafkaHandlerConfig } from './KafkaHandlerConfig.ts';
|
|
3
3
|
import type { KafkaHandlerRouting } from './KafkaHandlerRoutingBuilder.ts';
|
|
4
|
-
export declare class KafkaHandlerContainer<TopicsConfig extends TopicConfig[]> {
|
|
4
|
+
export declare class KafkaHandlerContainer<TopicsConfig extends TopicConfig[], ExecutionContext> {
|
|
5
5
|
private readonly handlers;
|
|
6
6
|
private readonly messageTypeField?;
|
|
7
|
-
constructor(topicHandlers: KafkaHandlerRouting<TopicsConfig>, messageTypeField?: string);
|
|
7
|
+
constructor(topicHandlers: KafkaHandlerRouting<TopicsConfig, ExecutionContext>, messageTypeField?: string);
|
|
8
8
|
private mapTopicHandlers;
|
|
9
|
-
resolveHandler<Topic extends SupportedTopics<TopicsConfig>>(topic: Topic, messageValue: SupportedMessageValuesForTopic<TopicsConfig, Topic>): KafkaHandlerConfig<SupportedMessageValuesForTopic<TopicsConfig, Topic
|
|
9
|
+
resolveHandler<Topic extends SupportedTopics<TopicsConfig>>(topic: Topic, messageValue: SupportedMessageValuesForTopic<TopicsConfig, Topic>): KafkaHandlerConfig<SupportedMessageValuesForTopic<TopicsConfig, Topic>, ExecutionContext> | undefined;
|
|
10
10
|
get topics(): SupportedTopics<TopicsConfig>[];
|
|
11
11
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KafkaHandlerContainer.js","sourceRoot":"","sources":["../../lib/handler-container/KafkaHandlerContainer.ts"],"names":[],"mappings":"AASA,MAAM,mBAAmB,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"KafkaHandlerContainer.js","sourceRoot":"","sources":["../../lib/handler-container/KafkaHandlerContainer.ts"],"names":[],"mappings":"AASA,MAAM,mBAAmB,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAA;AAUrD,MAAM,OAAO,qBAAqB;IACf,QAAQ,CAA0C;IAClD,gBAAgB,CAAS;IAE1C,YACE,aAAkE,EAClE,gBAAyB;QAEzB,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAA;QACxC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAA;IACtD,CAAC;IAEO,gBAAgB,CACtB,mBAAwE;QAExE,MAAM,MAAM,GAA6C,EAAE,CAAA;QAE3D,KAAK,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACzE,IAAI,CAAC,aAAa,CAAC,MAAM;gBAAE,SAAQ;YACnC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAA;YAElB,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;gBACpC,IAAI,UAAU,GAAG,IAAI,CAAC,gBAAgB;oBACpC,CAAC,CAAC,mBAAmB;wBACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,KAAK;oBACpD,CAAC,CAAC,SAAS,CAAA;gBACb,UAAU,KAAK,mBAAmB,CAAA;gBAClC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC9B,MAAM,IAAI,KAAK,CAAC,+BAA+B,KAAK,EAAE,CAAC,CAAA;gBACzD,CAAC;gBAED,MAAM,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,GAAG,OAAO,CAAA;YACrC,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAED,cAAc,CACZ,KAAY,EACZ,YAAiE;QAIjE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QACrC,IAAI,CAAC,QAAQ;YAAE,OAAO,SAAS,CAAA;QAE/B,IAAI,gBAAgB,GAAuB,SAAS,CAAA;QACpD,IAAI,IAAI,CAAC,gBAAgB;YAAE,gBAAgB,GAAG,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;QAEjF,OAAO,gBAAgB;YACrB,CAAC,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,QAAQ,CAAC,mBAAmB,CAAC,CAAC;YAC/D,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAA;IACnC,CAAC;IAED,IAAI,MAAM;QACR,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACnC,CAAC;CACF"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { SupportedMessageValues, SupportedMessageValuesForTopic, SupportedTopics, TopicConfig } from '../types.ts';
|
|
2
2
|
import type { KafkaHandlerConfig } from './KafkaHandlerConfig.ts';
|
|
3
|
-
export type KafkaHandlerRouting<TopicsConfig extends TopicConfig[], MessageValue extends SupportedMessageValues<TopicsConfig> = SupportedMessageValues<TopicsConfig>> = Record<string, KafkaHandlerConfig<MessageValue>[]>;
|
|
4
|
-
export declare class KafkaHandlerRoutingBuilder<TopicsConfig extends TopicConfig[]> {
|
|
3
|
+
export type KafkaHandlerRouting<TopicsConfig extends TopicConfig[], ExecutionContext, MessageValue extends SupportedMessageValues<TopicsConfig> = SupportedMessageValues<TopicsConfig>> = Record<string, KafkaHandlerConfig<MessageValue, ExecutionContext>[]>;
|
|
4
|
+
export declare class KafkaHandlerRoutingBuilder<const TopicsConfig extends TopicConfig[], ExecutionContext> {
|
|
5
5
|
private readonly configs;
|
|
6
|
-
addConfig<Topic extends SupportedTopics<TopicsConfig>, MessageValue extends SupportedMessageValuesForTopic<TopicsConfig, Topic>>(topic: Topic, config: KafkaHandlerConfig<MessageValue>): this;
|
|
7
|
-
build(): KafkaHandlerRouting<TopicsConfig>;
|
|
6
|
+
addConfig<Topic extends SupportedTopics<TopicsConfig>, MessageValue extends SupportedMessageValuesForTopic<TopicsConfig, Topic>>(topic: Topic, config: KafkaHandlerConfig<MessageValue, ExecutionContext>): this;
|
|
7
|
+
build(): KafkaHandlerRouting<TopicsConfig, ExecutionContext>;
|
|
8
8
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KafkaHandlerRoutingBuilder.js","sourceRoot":"","sources":["../../lib/handler-container/KafkaHandlerRoutingBuilder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"KafkaHandlerRoutingBuilder.js","sourceRoot":"","sources":["../../lib/handler-container/KafkaHandlerRoutingBuilder.ts"],"names":[],"mappings":"AAcA,MAAM,OAAO,0BAA0B;IAIpB,OAAO,GAAwD,EAAE,CAAA;IAElF,SAAS,CAGP,KAAY,EAAE,MAA0D;QACxE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;QAC1B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAEhC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;CACF"}
|
package/dist/types.d.ts
CHANGED
|
@@ -16,7 +16,7 @@ type MessageSchemasForTopic<TopicsConfig extends TopicConfig[], Topic extends Su
|
|
|
16
16
|
topic: Topic;
|
|
17
17
|
}>['schemas'][number];
|
|
18
18
|
export type SupportedMessageValuesInputForTopic<TopicsConfig extends TopicConfig[], Topic extends SupportedTopics<TopicsConfig>> = z.input<MessageSchemasForTopic<TopicsConfig, Topic>>;
|
|
19
|
-
export type SupportedMessageValuesForTopic<TopicsConfig extends TopicConfig[], Topic extends SupportedTopics<TopicsConfig>> = z.
|
|
19
|
+
export type SupportedMessageValuesForTopic<TopicsConfig extends TopicConfig[], Topic extends SupportedTopics<TopicsConfig>> = z.output<MessageSchemasForTopic<TopicsConfig, Topic>>;
|
|
20
20
|
type MessageSchemas<TopicsConfig extends TopicConfig[]> = TopicsConfig[number]['schemas'][number];
|
|
21
21
|
export type SupportedMessageValuesInput<TopicsConfig extends TopicConfig[]> = z.input<MessageSchemas<TopicsConfig>>;
|
|
22
22
|
export type SupportedMessageValues<TopicsConfig extends TopicConfig[]> = z.input<MessageSchemas<TopicsConfig>>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errorCodes.js","sourceRoot":"","sources":["../../lib/utils/errorCodes.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAA;AACpC,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAA;AACnC,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@message-queue-toolkit/kafka",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"engines": {
|
|
5
5
|
"node": ">= 22.14.0"
|
|
6
6
|
},
|
|
@@ -50,20 +50,20 @@
|
|
|
50
50
|
"@confluentinc/kafka-javascript": "^1.3.0",
|
|
51
51
|
"@lokalise/node-core": "^14.1.0",
|
|
52
52
|
"@lokalise/universal-ts-utils": "^4.4.1",
|
|
53
|
-
"@platformatic/kafka": "^1.
|
|
53
|
+
"@platformatic/kafka": "^1.7.0",
|
|
54
54
|
"zod": "^3.25.7"
|
|
55
55
|
},
|
|
56
56
|
"peerDependencies": {
|
|
57
|
-
"@message-queue-toolkit/core": "
|
|
58
|
-
"@message-queue-toolkit/schemas": "
|
|
57
|
+
"@message-queue-toolkit/core": "21.3.0",
|
|
58
|
+
"@message-queue-toolkit/schemas": "6.2.0"
|
|
59
59
|
},
|
|
60
60
|
"devDependencies": {
|
|
61
|
-
"@biomejs/biome": "1.9.4",
|
|
61
|
+
"@biomejs/biome": "^1.9.4",
|
|
62
62
|
"@lokalise/biome-config": "^2.0.0",
|
|
63
|
-
"@lokalise/tsconfig": "^
|
|
64
|
-
"@message-queue-toolkit/core": "
|
|
65
|
-
"@message-queue-toolkit/schemas": "
|
|
66
|
-
"@types/node": "^
|
|
63
|
+
"@lokalise/tsconfig": "^2.0.0",
|
|
64
|
+
"@message-queue-toolkit/core": "21.3.0",
|
|
65
|
+
"@message-queue-toolkit/schemas": "6.2.0",
|
|
66
|
+
"@types/node": "^24.0.3",
|
|
67
67
|
"@vitest/coverage-v8": "^3.0.7",
|
|
68
68
|
"awilix": "^12.0.1",
|
|
69
69
|
"awilix-manager": "^6.0.0",
|