@dbos-inc/confluent-kafka-receive 3.0.17-preview → 3.0.19-preview
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/README.md +3 -12
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/index.ts +9 -8
- package/package.json +1 -1
- package/tests/confluent-kafka.test.ts +26 -9
package/README.md
CHANGED
|
@@ -44,10 +44,7 @@ class KafkaExample {
|
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
KafkaExample.registeredConsumerWorkflow = DBOS.registerWorkflow(
|
|
48
|
-
KafkaExample.registeredConsumerWorkflow,
|
|
49
|
-
'registeredConsumerWorkflow',
|
|
50
|
-
);
|
|
47
|
+
KafkaExample.registeredConsumerWorkflow = DBOS.registerWorkflow(KafkaExample.registeredConsumerWorkflow);
|
|
51
48
|
kafkaReceiver.registerConsumer(KafkaExample.registeredConsumerWorkflow, 'another-example-topic');
|
|
52
49
|
```
|
|
53
50
|
|
|
@@ -75,10 +72,7 @@ class KafkaExample {
|
|
|
75
72
|
}
|
|
76
73
|
}
|
|
77
74
|
|
|
78
|
-
KafkaExample.registeredConsumerWorkflow = DBOS.registerWorkflow(
|
|
79
|
-
KafkaExample.registeredConsumerWorkflow,
|
|
80
|
-
'registeredConsumerWorkflow',
|
|
81
|
-
);
|
|
75
|
+
KafkaExample.registeredConsumerWorkflow = DBOS.registerWorkflow(KafkaExample.registeredConsumerWorkflow);
|
|
82
76
|
kafkaReceiver.registerConsumer(KafkaExample.registeredConsumerWorkflow, 'another-example-topic', {
|
|
83
77
|
config: { groupId: 'custom-group-id' },
|
|
84
78
|
});
|
|
@@ -102,10 +96,7 @@ class KafkaExample {
|
|
|
102
96
|
}
|
|
103
97
|
}
|
|
104
98
|
|
|
105
|
-
KafkaExample.registeredConsumerWorkflow = DBOS.registerWorkflow(
|
|
106
|
-
KafkaExample.registeredConsumerWorkflow,
|
|
107
|
-
'registeredConsumerWorkflow',
|
|
108
|
-
);
|
|
99
|
+
KafkaExample.registeredConsumerWorkflow = DBOS.registerWorkflow(KafkaExample.registeredConsumerWorkflow);
|
|
109
100
|
kafkaReceiver.registerConsumer(KafkaExample.registeredConsumerWorkflow, 'another-example-topic', {
|
|
110
101
|
queueName: 'example-queue',
|
|
111
102
|
});
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { DBOSLifecycleCallback } from '@dbos-inc/dbos-sdk';
|
|
2
2
|
import { KafkaJS } from '@confluentinc/kafka-javascript';
|
|
3
|
+
export type KafkaArgs = [string, number, KafkaJS.Message];
|
|
3
4
|
interface KafkaRetryConfig {
|
|
4
5
|
maxRetries: number;
|
|
5
6
|
retryTime: number;
|
|
@@ -14,8 +15,8 @@ export declare class ConfluentKafkaReceiver extends DBOSLifecycleCallback {
|
|
|
14
15
|
initialize(): Promise<void>;
|
|
15
16
|
destroy(): Promise<void>;
|
|
16
17
|
logRegisteredEndpoints(): void;
|
|
17
|
-
registerConsumer<This,
|
|
18
|
-
|
|
18
|
+
registerConsumer<This, Return>(func: (this: This, ...args: KafkaArgs) => Promise<Return>, topics: ConsumerTopics, options?: {
|
|
19
|
+
ctorOrProto?: object;
|
|
19
20
|
className?: string;
|
|
20
21
|
name?: string;
|
|
21
22
|
queueName?: string;
|
|
@@ -24,7 +25,7 @@ export declare class ConfluentKafkaReceiver extends DBOSLifecycleCallback {
|
|
|
24
25
|
consumer(topics: ConsumerTopics, options?: {
|
|
25
26
|
queueName?: string;
|
|
26
27
|
config?: KafkaJS.ConsumerConstructorConfig;
|
|
27
|
-
}): <This,
|
|
28
|
+
}): <This, Return>(target: object, propertyKey: PropertyKey, descriptor: TypedPropertyDescriptor<(this: This, ...args: KafkaArgs) => Promise<Return>>) => TypedPropertyDescriptor<(this: This, args_0: string, args_1: number, args_2: KafkaJS.Message) => Promise<Return>>;
|
|
28
29
|
}
|
|
29
30
|
export {};
|
|
30
31
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAEjE,OAAO,EAAE,OAAO,EAAiC,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAEjE,OAAO,EAAE,OAAO,EAAiC,MAAM,gCAAgC,CAAC;AAExF,MAAM,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;AAW1D,UAAU,gBAAgB;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAiBD,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AAEtE,qBAAa,sBAAuB,SAAQ,qBAAqB;;IAI7D,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,WAAW;gBADX,MAAM,EAAE,OAAO,CAAC,WAAW,EAC3B,WAAW,GAAE,gBAAmE;IAMpF,UAAU;IA+DV,OAAO;IAKb,sBAAsB;IAa/B,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAC3B,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,SAAS,KAAK,OAAO,CAAC,MAAM,CAAC,EACzD,MAAM,EAAE,cAAc,EACtB,OAAO,GAAE;QACP,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,OAAO,CAAC,yBAAyB,CAAC;KACvC;IAcR,QAAQ,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,GAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAC,yBAAyB,CAAA;KAAO,0BAIrG,MAAM,eACD,WAAW,cACZ,wBAAwB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,SAAS,KAAK,QAAQ,MAAM,CAAC,CAAC,oCAA7C,IAAI,8DAAyB,QAAQ,MAAM,CAAC;CAc5F"}
|
package/dist/index.js
CHANGED
|
@@ -101,7 +101,7 @@ class ConfluentKafkaReceiver extends dbos_sdk_1.DBOSLifecycleCallback {
|
|
|
101
101
|
}
|
|
102
102
|
registerConsumer(func, topics, options = {}) {
|
|
103
103
|
const { regInfo } = dbos_sdk_1.DBOS.associateFunctionWithInfo(this, func, {
|
|
104
|
-
|
|
104
|
+
ctorOrProto: options.ctorOrProto,
|
|
105
105
|
className: options.className,
|
|
106
106
|
name: options.name ?? func.name,
|
|
107
107
|
});
|
|
@@ -116,7 +116,7 @@ class ConfluentKafkaReceiver extends dbos_sdk_1.DBOSLifecycleCallback {
|
|
|
116
116
|
function methodDecorator(target, propertyKey, descriptor) {
|
|
117
117
|
if (descriptor.value) {
|
|
118
118
|
$this.registerConsumer(descriptor.value, topics, {
|
|
119
|
-
|
|
119
|
+
ctorOrProto: target,
|
|
120
120
|
name: String(propertyKey),
|
|
121
121
|
queueName: options.queueName,
|
|
122
122
|
config: options.config,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;AAAA,iDAAiE;AAEjE,qEAAwF;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
package/index.ts
CHANGED
|
@@ -2,7 +2,8 @@ import { DBOS, DBOSLifecycleCallback } from '@dbos-inc/dbos-sdk';
|
|
|
2
2
|
|
|
3
3
|
import { KafkaJS, LibrdKafkaError as KafkaError } from '@confluentinc/kafka-javascript';
|
|
4
4
|
|
|
5
|
-
type
|
|
5
|
+
export type KafkaArgs = [string, number, KafkaJS.Message];
|
|
6
|
+
type KafkaMessageHandler<Return> = (...args: KafkaArgs) => Promise<Return>;
|
|
6
7
|
|
|
7
8
|
const sleepms = (ms: number) => new Promise((r) => setTimeout(r, ms));
|
|
8
9
|
|
|
@@ -127,11 +128,11 @@ export class ConfluentKafkaReceiver extends DBOSLifecycleCallback {
|
|
|
127
128
|
}
|
|
128
129
|
}
|
|
129
130
|
|
|
130
|
-
registerConsumer<This,
|
|
131
|
-
func: (this: This, ...args:
|
|
131
|
+
registerConsumer<This, Return>(
|
|
132
|
+
func: (this: This, ...args: KafkaArgs) => Promise<Return>,
|
|
132
133
|
topics: ConsumerTopics,
|
|
133
134
|
options: {
|
|
134
|
-
|
|
135
|
+
ctorOrProto?: object;
|
|
135
136
|
className?: string;
|
|
136
137
|
name?: string;
|
|
137
138
|
queueName?: string;
|
|
@@ -139,7 +140,7 @@ export class ConfluentKafkaReceiver extends DBOSLifecycleCallback {
|
|
|
139
140
|
} = {},
|
|
140
141
|
) {
|
|
141
142
|
const { regInfo } = DBOS.associateFunctionWithInfo(this, func, {
|
|
142
|
-
|
|
143
|
+
ctorOrProto: options.ctorOrProto,
|
|
143
144
|
className: options.className,
|
|
144
145
|
name: options.name ?? func.name,
|
|
145
146
|
});
|
|
@@ -153,14 +154,14 @@ export class ConfluentKafkaReceiver extends DBOSLifecycleCallback {
|
|
|
153
154
|
consumer(topics: ConsumerTopics, options: { queueName?: string; config?: KafkaJS.ConsumerConstructorConfig } = {}) {
|
|
154
155
|
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
155
156
|
const $this = this;
|
|
156
|
-
function methodDecorator<This,
|
|
157
|
+
function methodDecorator<This, Return>(
|
|
157
158
|
target: object,
|
|
158
159
|
propertyKey: PropertyKey,
|
|
159
|
-
descriptor: TypedPropertyDescriptor<(this: This, ...args:
|
|
160
|
+
descriptor: TypedPropertyDescriptor<(this: This, ...args: KafkaArgs) => Promise<Return>>,
|
|
160
161
|
) {
|
|
161
162
|
if (descriptor.value) {
|
|
162
163
|
$this.registerConsumer(descriptor.value, topics, {
|
|
163
|
-
|
|
164
|
+
ctorOrProto: target,
|
|
164
165
|
name: String(propertyKey),
|
|
165
166
|
queueName: options.queueName,
|
|
166
167
|
config: options.config,
|
package/package.json
CHANGED
|
@@ -19,7 +19,13 @@ const kafkaConfig = {
|
|
|
19
19
|
const kafkaReceiver = new ConfluentKafkaReceiver(kafkaConfig);
|
|
20
20
|
|
|
21
21
|
interface KafkaEvents {
|
|
22
|
-
message: (
|
|
22
|
+
message: (
|
|
23
|
+
functionName: string,
|
|
24
|
+
topic: string,
|
|
25
|
+
partition: number,
|
|
26
|
+
message: ConfluentKafkaJS.Message,
|
|
27
|
+
workflowID?: string,
|
|
28
|
+
) => void;
|
|
23
29
|
}
|
|
24
30
|
|
|
25
31
|
class KafkaEmitter extends EventEmitter {
|
|
@@ -37,6 +43,7 @@ type KafkaMessageEvent = {
|
|
|
37
43
|
topic: string;
|
|
38
44
|
partition: number;
|
|
39
45
|
message: ConfluentKafkaJS.Message;
|
|
46
|
+
workflowID?: string;
|
|
40
47
|
};
|
|
41
48
|
|
|
42
49
|
function waitForMessage(
|
|
@@ -47,10 +54,16 @@ function waitForMessage(
|
|
|
47
54
|
): Promise<KafkaMessageEvent> {
|
|
48
55
|
return withTimeout(
|
|
49
56
|
new Promise<KafkaMessageEvent>((resolve) => {
|
|
50
|
-
const handler = (
|
|
57
|
+
const handler = (
|
|
58
|
+
f: string,
|
|
59
|
+
t: string,
|
|
60
|
+
partition: number,
|
|
61
|
+
message: ConfluentKafkaJS.Message,
|
|
62
|
+
workflowID?: string,
|
|
63
|
+
) => {
|
|
51
64
|
if (f === funcName && t === topic) {
|
|
52
65
|
emitter.off('message', handler);
|
|
53
|
-
resolve({ topic: t, partition, message });
|
|
66
|
+
resolve({ topic: t, partition, message, workflowID });
|
|
54
67
|
}
|
|
55
68
|
};
|
|
56
69
|
emitter.on('message', handler);
|
|
@@ -67,37 +80,37 @@ class KafkaTestClass {
|
|
|
67
80
|
@DBOS.workflow()
|
|
68
81
|
static async stringTopic(topic: string, partition: number, message: ConfluentKafkaJS.Message) {
|
|
69
82
|
await Promise.resolve();
|
|
70
|
-
KafkaTestClass.emitter.emit('message', 'stringTopic', topic, partition, message);
|
|
83
|
+
KafkaTestClass.emitter.emit('message', 'stringTopic', topic, partition, message, DBOS.workflowID);
|
|
71
84
|
}
|
|
72
85
|
|
|
73
86
|
@kafkaReceiver.consumer(/^regex-topic-.*/)
|
|
74
87
|
@DBOS.workflow()
|
|
75
88
|
static async regexTopic(topic: string, partition: number, message: ConfluentKafkaJS.Message) {
|
|
76
89
|
await Promise.resolve();
|
|
77
|
-
KafkaTestClass.emitter.emit('message', 'regexTopic', topic, partition, message);
|
|
90
|
+
KafkaTestClass.emitter.emit('message', 'regexTopic', topic, partition, message, DBOS.workflowID);
|
|
78
91
|
}
|
|
79
92
|
|
|
80
93
|
@kafkaReceiver.consumer(['a-topic', 'b-topic'])
|
|
81
94
|
@DBOS.workflow()
|
|
82
95
|
static async stringArrayTopic(topic: string, partition: number, message: ConfluentKafkaJS.Message) {
|
|
83
96
|
await Promise.resolve();
|
|
84
|
-
KafkaTestClass.emitter.emit('message', 'stringArrayTopic', topic, partition, message);
|
|
97
|
+
KafkaTestClass.emitter.emit('message', 'stringArrayTopic', topic, partition, message, DBOS.workflowID);
|
|
85
98
|
}
|
|
86
99
|
|
|
87
100
|
@kafkaReceiver.consumer([/^z-topic-.*/, /^y-topic-.*/])
|
|
88
101
|
@DBOS.workflow()
|
|
89
102
|
static async regexArrayTopic(topic: string, partition: number, message: ConfluentKafkaJS.Message) {
|
|
90
103
|
await Promise.resolve();
|
|
91
|
-
KafkaTestClass.emitter.emit('message', 'regexArrayTopic', topic, partition, message);
|
|
104
|
+
KafkaTestClass.emitter.emit('message', 'regexArrayTopic', topic, partition, message, DBOS.workflowID);
|
|
92
105
|
}
|
|
93
106
|
|
|
94
107
|
static async registeredConsumer(topic: string, partition: number, message: ConfluentKafkaJS.Message) {
|
|
95
108
|
await Promise.resolve();
|
|
96
|
-
KafkaTestClass.emitter.emit('message', 'registeredConsumer', topic, partition, message);
|
|
109
|
+
KafkaTestClass.emitter.emit('message', 'registeredConsumer', topic, partition, message, DBOS.workflowID);
|
|
97
110
|
}
|
|
98
111
|
}
|
|
99
112
|
|
|
100
|
-
KafkaTestClass.registeredConsumer = DBOS.registerWorkflow(KafkaTestClass.registeredConsumer
|
|
113
|
+
KafkaTestClass.registeredConsumer = DBOS.registerWorkflow(KafkaTestClass.registeredConsumer);
|
|
101
114
|
kafkaReceiver.registerConsumer(KafkaTestClass.registeredConsumer, 'registered-topic');
|
|
102
115
|
|
|
103
116
|
async function validateKafka(config: KafkaConfig) {
|
|
@@ -243,6 +256,10 @@ suite('confluent-kafka-receive', async () => {
|
|
|
243
256
|
|
|
244
257
|
assert.equal(topic, result.topic);
|
|
245
258
|
assert.equal(message, String(result.message.value));
|
|
259
|
+
assert(!!result.workflowID);
|
|
260
|
+
|
|
261
|
+
const status = await DBOS.getWorkflowStatus(result.workflowID);
|
|
262
|
+
assert(!!status);
|
|
246
263
|
});
|
|
247
264
|
}
|
|
248
265
|
});
|