@enxoval/messaging 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.
@@ -0,0 +1,2 @@
1
+ export declare function ensureTopics(): Promise<void>;
2
+ //# sourceMappingURL=admin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../admin.ts"],"names":[],"mappings":"AAgBA,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAgBlD"}
package/dist/admin.js ADDED
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ensureTopics = ensureTopics;
4
+ const kafka_1 = require("./kafka");
5
+ const node_fs_1 = require("node:fs");
6
+ const node_path_1 = require("node:path");
7
+ const { kafka_topics } = JSON.parse((0, node_fs_1.readFileSync)((0, node_path_1.resolve)(process.cwd(), 'student-journey.json'), 'utf-8'));
8
+ async function ensureTopics() {
9
+ const admin = kafka_1.kafka.admin();
10
+ await admin.connect();
11
+ const existing = new Set(await admin.listTopics());
12
+ const toCreate = Object.values(kafka_topics)
13
+ .map(({ topic }) => topic)
14
+ .filter((topic) => !existing.has(topic));
15
+ if (toCreate.length > 0) {
16
+ await admin.createTopics({
17
+ topics: toCreate.map((topic) => ({ topic, numPartitions: 1, replicationFactor: 1 })),
18
+ });
19
+ }
20
+ await admin.disconnect();
21
+ }
22
+ //# sourceMappingURL=admin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.js","sourceRoot":"","sources":["../admin.ts"],"names":[],"mappings":";;AAgBA,oCAgBC;AAhCD,mCAAgC;AAChC,qCAAuC;AACvC,yCAAoC;AAUpC,MAAM,EAAE,YAAY,EAAE,GAAe,IAAI,CAAC,KAAK,CAC7C,IAAA,sBAAY,EAAC,IAAA,mBAAO,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,sBAAsB,CAAC,EAAE,OAAO,CAAC,CACtE,CAAC;AAEK,KAAK,UAAU,YAAY;IAChC,MAAM,KAAK,GAAG,aAAK,CAAC,KAAK,EAAE,CAAC;IAC5B,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;IAEtB,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;SACzC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC;SACzB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAE3C,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,KAAK,CAAC,YAAY,CAAC;YACvB,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC,CAAC;SACrF,CAAC,CAAC;IACL,CAAC;IAED,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare function getKafkaTopic(name: string): string;
2
+ export declare function getHttpEndpoint(name: string): {
3
+ url: string;
4
+ };
5
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../config.ts"],"names":[],"mappings":"AAwBA,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMlD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAS7D"}
package/dist/config.js ADDED
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getKafkaTopic = getKafkaTopic;
4
+ exports.getHttpEndpoint = getHttpEndpoint;
5
+ const node_fs_1 = require("node:fs");
6
+ const node_path_1 = require("node:path");
7
+ const config = JSON.parse((0, node_fs_1.readFileSync)((0, node_path_1.resolve)(process.cwd(), 'student-journey.json'), 'utf-8'));
8
+ function getKafkaTopic(name) {
9
+ const entry = config.kafka_topics?.[name];
10
+ if (!entry) {
11
+ throw new Error(`Kafka topic "${name}" is not configured in student-journey.json`);
12
+ }
13
+ return entry.topic;
14
+ }
15
+ function getHttpEndpoint(name) {
16
+ const entry = config.http_mapped?.[name];
17
+ if (!entry) {
18
+ throw new Error(`HTTP endpoint "${name}" is not configured in student-journey.json`);
19
+ }
20
+ if (!entry.service) {
21
+ throw new Error(`HTTP endpoint "${name}" has no service configured in student-journey.json`);
22
+ }
23
+ return { url: `${entry.service}${entry.path}` };
24
+ }
25
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../config.ts"],"names":[],"mappings":";;AAwBA,sCAMC;AAED,0CASC;AAzCD,qCAAuC;AACvC,yCAAoC;AAmBpC,MAAM,MAAM,GAAc,IAAI,CAAC,KAAK,CAClC,IAAA,sBAAY,EAAC,IAAA,mBAAO,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,sBAAsB,CAAC,EAAE,OAAO,CAAC,CACtE,CAAC;AAEF,SAAgB,aAAa,CAAC,IAAY;IACxC,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,6CAA6C,CAAC,CAAC;IACrF,CAAC;IACD,OAAO,KAAK,CAAC,KAAK,CAAC;AACrB,CAAC;AAED,SAAgB,eAAe,CAAC,IAAY;IAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,6CAA6C,CAAC,CAAC;IACvF,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,qDAAqD,CAAC,CAAC;IAC/F,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;AAClD,CAAC"}
@@ -0,0 +1,7 @@
1
+ export type MessageHandler<T = unknown> = (message: T) => Promise<void> | void;
2
+ export declare function subscribe<T extends {
3
+ cid?: string;
4
+ eventId?: string;
5
+ journeyId?: string;
6
+ }>(name: string, handler: MessageHandler<T>): void;
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../consumer/index.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,cAAc,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAmB/E,wBAAgB,SAAS,CAAC,CAAC,SAAS;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,EACxF,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,GACzB,IAAI,CAoCN"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.subscribe = subscribe;
4
+ const observability_1 = require("@enxoval/observability");
5
+ const config_1 = require("../config");
6
+ const observability_2 = require("@enxoval/observability");
7
+ const kafka_1 = require("../kafka");
8
+ const index_1 = require("../producer/index");
9
+ const MAX_RETRIES = 3;
10
+ const DLQ_TOPIC = 'student-journey-dlq';
11
+ function sleep(ms) {
12
+ return new Promise((resolve) => setTimeout(resolve, ms));
13
+ }
14
+ async function withRetry(fn, attemptsLeft, delayMs) {
15
+ try {
16
+ await fn();
17
+ }
18
+ catch (err) {
19
+ if (attemptsLeft <= 0)
20
+ throw err;
21
+ await sleep(delayMs);
22
+ await withRetry(fn, attemptsLeft - 1, delayMs * 2);
23
+ }
24
+ }
25
+ function subscribe(name, handler) {
26
+ const topic = (0, config_1.getKafkaTopic)(name);
27
+ const consumer = kafka_1.kafka.consumer({ groupId: `student-journey-${name}` });
28
+ consumer
29
+ .connect()
30
+ .then(() => consumer.subscribe({ topic, fromBeginning: false }))
31
+ .then(() => {
32
+ observability_1.logger.info({ topic, name }, 'consumer: subscribed');
33
+ return consumer.run({
34
+ eachMessage: async ({ message }) => {
35
+ const raw = message.value?.toString();
36
+ if (!raw)
37
+ return;
38
+ const payload = JSON.parse(raw);
39
+ const incoming = payload.cid;
40
+ const cid = incoming ? (0, observability_2.nextCid)(incoming) : undefined;
41
+ observability_1.logger.info({ cid, topic, name, eventId: payload.eventId }, 'consumer: message received');
42
+ try {
43
+ await withRetry(() => Promise.resolve(handler(payload)), MAX_RETRIES, 500);
44
+ }
45
+ catch (err) {
46
+ observability_1.logger.error({ err, cid, topic, name, payload }, 'consumer: message failed after retries, sending to DLQ');
47
+ await (0, index_1.publishRaw)(DLQ_TOPIC, {
48
+ originalTopic: topic,
49
+ name,
50
+ payload,
51
+ error: err instanceof Error ? err.message : String(err),
52
+ failedAt: new Date().toISOString(),
53
+ });
54
+ }
55
+ },
56
+ });
57
+ })
58
+ .catch((err) => {
59
+ observability_1.logger.error({ err, topic, name }, 'consumer: failed to start');
60
+ });
61
+ }
62
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../consumer/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Kafka } from 'kafkajs';
2
+ export declare const kafka: Kafka;
3
+ //# sourceMappingURL=kafka.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kafka.d.ts","sourceRoot":"","sources":["../kafka.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,eAAO,MAAM,KAAK,OAOhB,CAAC"}
package/dist/kafka.js ADDED
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.kafka = void 0;
4
+ const kafkajs_1 = require("kafkajs");
5
+ exports.kafka = new kafkajs_1.Kafka({
6
+ clientId: 'student-journey',
7
+ brokers: [process.env.KAFKA_BROKER || 'localhost:29092'],
8
+ retry: {
9
+ initialRetryTime: 300,
10
+ retries: 10,
11
+ },
12
+ });
13
+ //# sourceMappingURL=kafka.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kafka.js","sourceRoot":"","sources":["../kafka.ts"],"names":[],"mappings":";;;AAAA,qCAAgC;AAEnB,QAAA,KAAK,GAAG,IAAI,eAAK,CAAC;IAC7B,QAAQ,EAAE,iBAAiB;IAC3B,OAAO,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,iBAAiB,CAAC;IACxD,KAAK,EAAE;QACL,gBAAgB,EAAE,GAAG;QACrB,OAAO,EAAE,EAAE;KACZ;CACF,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ export declare function connect(): Promise<void>;
2
+ export declare function disconnect(): Promise<void>;
3
+ export declare function publish<T extends {
4
+ cid?: string;
5
+ eventId?: string;
6
+ journeyId?: string;
7
+ }>(name: string, message: T): Promise<void>;
8
+ export declare function publishRaw(topic: string, message: unknown): Promise<void>;
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../producer/index.ts"],"names":[],"mappings":"AAOA,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAG7C;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAGhD;AAED,wBAAsB,OAAO,CAAC,CAAC,SAAS;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,EAC5F,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,CAAC,GACT,OAAO,CAAC,IAAI,CAAC,CAQf;AAED,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAK/E"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.connect = connect;
4
+ exports.disconnect = disconnect;
5
+ exports.publish = publish;
6
+ exports.publishRaw = publishRaw;
7
+ const observability_1 = require("@enxoval/observability");
8
+ const config_1 = require("../config");
9
+ const observability_2 = require("@enxoval/observability");
10
+ const kafka_1 = require("../kafka");
11
+ const producer = kafka_1.kafka.producer();
12
+ async function connect() {
13
+ await producer.connect();
14
+ observability_1.logger.info('producer: connected');
15
+ }
16
+ async function disconnect() {
17
+ await producer.disconnect();
18
+ observability_1.logger.info('producer: disconnected');
19
+ }
20
+ async function publish(name, message) {
21
+ const topic = (0, config_1.getKafkaTopic)(name);
22
+ const cid = message.cid ? (0, observability_2.nextCid)(message.cid) : undefined;
23
+ observability_1.logger.info({ cid, topic, name, eventId: message.eventId }, 'producer: message published');
24
+ await producer.send({
25
+ topic,
26
+ messages: [{ value: JSON.stringify({ ...message, cid }) }],
27
+ });
28
+ }
29
+ async function publishRaw(topic, message) {
30
+ await producer.send({
31
+ topic,
32
+ messages: [{ value: JSON.stringify(message) }],
33
+ });
34
+ }
35
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../producer/index.ts"],"names":[],"mappings":";;AAOA,0BAGC;AAED,gCAGC;AAED,0BAWC;AAED,gCAKC;AAnCD,0DAAgD;AAChD,sCAA0C;AAC1C,0DAAiD;AACjD,oCAAiC;AAEjC,MAAM,QAAQ,GAAG,aAAK,CAAC,QAAQ,EAAE,CAAC;AAE3B,KAAK,UAAU,OAAO;IAC3B,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;IACzB,sBAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;AACrC,CAAC;AAEM,KAAK,UAAU,UAAU;IAC9B,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;IAC5B,sBAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;AACxC,CAAC;AAEM,KAAK,UAAU,OAAO,CAC3B,IAAY,EACZ,OAAU;IAEV,MAAM,KAAK,GAAG,IAAA,sBAAa,EAAC,IAAI,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAA,uBAAO,EAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3D,sBAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,6BAA6B,CAAC,CAAC;IAC3F,MAAM,QAAQ,CAAC,IAAI,CAAC;QAClB,KAAK;QACL,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;KAC3D,CAAC,CAAC;AACL,CAAC;AAEM,KAAK,UAAU,UAAU,CAAC,KAAa,EAAE,OAAgB;IAC9D,MAAM,QAAQ,CAAC,IAAI,CAAC;QAClB,KAAK;QACL,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;KAC/C,CAAC,CAAC;AACL,CAAC"}
package/package.json ADDED
@@ -0,0 +1,27 @@
1
+ {
2
+ "name": "@enxoval/messaging",
3
+ "version": "1.0.0",
4
+ "description": "KafkaJS wrapper exposing publish, subscribe and ensureTopics",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "files": [
8
+ "dist"
9
+ ],
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "prepublishOnly": "npm run build"
13
+ },
14
+ "keywords": [
15
+ "kafka",
16
+ "messaging",
17
+ "typescript"
18
+ ],
19
+ "license": "MIT",
20
+ "dependencies": {
21
+ "kafkajs": "^2.2.4",
22
+ "@enxoval/observability": "^1.0.0"
23
+ },
24
+ "devDependencies": {
25
+ "typescript": "^5.7.2"
26
+ }
27
+ }