@tickrorg/common 1.0.15 → 1.0.16

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 CHANGED
@@ -11,7 +11,7 @@ export * from "./middlewares/require-auth";
11
11
  export * from "./middlewares/validate-request";
12
12
  export * from "./middlewares/require-role";
13
13
  export * from "./services/token";
14
- export * from "./services/rabbitmq";
14
+ export * from "./services/kafka";
15
15
  export * from "./services/publisher";
16
16
  export * from "./services/consumer";
17
17
  export * from "./types/events";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,oCAAoC,CAAC;AACnD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AACzC,cAAc,mCAAmC,CAAC;AAClD,cAAc,0BAA0B,CAAC;AAEzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAE3C,cAAc,kBAAkB,CAAC;AAEjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,oCAAoC,CAAC;AACnD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AACzC,cAAc,mCAAmC,CAAC;AAClD,cAAc,0BAA0B,CAAC;AAEzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAE3C,cAAc,kBAAkB,CAAC;AAEjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAA"}
package/dist/index.js CHANGED
@@ -11,7 +11,7 @@ export * from "./middlewares/require-auth";
11
11
  export * from "./middlewares/validate-request";
12
12
  export * from "./middlewares/require-role";
13
13
  export * from "./services/token";
14
- export * from "./services/rabbitmq";
14
+ export * from "./services/kafka";
15
15
  export * from "./services/publisher";
16
16
  export * from "./services/consumer";
17
17
  export * from "./types/events";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,oCAAoC,CAAC;AACnD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AACzC,cAAc,mCAAmC,CAAC;AAClD,cAAc,0BAA0B,CAAC;AAEzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAE3C,cAAc,kBAAkB,CAAC;AAEjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,oCAAoC,CAAC;AACnD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AACzC,cAAc,mCAAmC,CAAC;AAClD,cAAc,0BAA0B,CAAC;AAEzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAE3C,cAAc,kBAAkB,CAAC;AAEjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAA"}
@@ -1,11 +1,8 @@
1
- import { Channel, ConsumeMessage } from "amqplib";
2
1
  import { Event } from "../types/events";
3
2
  export declare abstract class Consumer<T extends Event> {
4
- abstract subject: T["subject"];
5
- abstract queueName: string;
6
- abstract onMessage(data: T["data"], msg: ConsumeMessage): Promise<void>;
7
- protected channel: Channel;
8
- constructor(channel: Channel);
3
+ abstract topic: T["subject"];
4
+ abstract groupId: string;
5
+ abstract onMessage(data: T["data"]): Promise<void>;
9
6
  listen(): Promise<void>;
10
7
  }
11
8
  //# sourceMappingURL=consumer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"consumer.d.ts","sourceRoot":"","sources":["../../src/services/consumer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGxC,8BAAsB,QAAQ,CAAC,CAAC,SAAS,KAAK;IAC5C,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAEvE,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC;gBAEf,OAAO,EAAE,OAAO;IAItB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAuB9B"}
1
+ {"version":3,"file":"consumer.d.ts","sourceRoot":"","sources":["../../src/services/consumer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGxC,8BAAsB,QAAQ,CAAC,CAAC,SAAS,KAAK;IAC5C,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAE5C,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAoE9B"}
@@ -1,28 +1,55 @@
1
- import { EXCHANGE_NAME } from "./rabbitmq";
1
+ import { kafkaClient } from "./kafka";
2
2
  export class Consumer {
3
- constructor(channel) {
4
- this.channel = channel;
5
- }
6
3
  async listen() {
7
- const queue = await this.channel.assertQueue(this.queueName, {
8
- durable: true,
4
+ const consumer = kafkaClient.getConsumer(this.groupId, {
5
+ retry: {
6
+ retries: 3,
7
+ },
8
+ });
9
+ const producer = kafkaClient.getProducer();
10
+ await consumer.connect();
11
+ await producer.connect();
12
+ await consumer.subscribe({
13
+ topic: this.topic,
14
+ fromBeginning: true,
9
15
  });
10
- await this.channel.bindQueue(queue.queue, EXCHANGE_NAME, this.subject);
11
- this.channel.prefetch(1);
12
- await this.channel.consume(queue.queue, async (msg) => {
13
- if (!msg)
14
- return;
15
- try {
16
- const parsed = JSON.parse(msg.content.toString());
17
- await this.onMessage(parsed, msg);
18
- this.channel.ack(msg);
19
- }
20
- catch (err) {
21
- console.error(`[rabbitmq] error in ${this.queueName}`, err);
22
- this.channel.nack(msg, false, false);
23
- }
16
+ await consumer.run({
17
+ eachMessage: async ({ message, partition }) => {
18
+ if (!message.value)
19
+ return;
20
+ try {
21
+ const parsed = JSON.parse(message.value.toString());
22
+ await this.onMessage(parsed);
23
+ }
24
+ catch (err) {
25
+ console.error(`[kafka] error in group ${this.groupId} on topic ${this.topic}`, err);
26
+ try {
27
+ await producer.send({
28
+ topic: `${this.topic}.dlq`,
29
+ acks: -1,
30
+ messages: [
31
+ {
32
+ key: message.key,
33
+ value: message.value,
34
+ headers: {
35
+ error: err instanceof Error ? err.message : "Unknown error",
36
+ originalTopic: this.topic,
37
+ originalPartition: partition.toString(),
38
+ originalOffset: message.offset,
39
+ },
40
+ },
41
+ ],
42
+ });
43
+ console.info(`[kafka] successfully pushed failed message to DLQ: ${this.topic}.dlq`);
44
+ }
45
+ catch (dlqErr) {
46
+ console.error(`[kafka] CRITICAL: Failed to push message to DLQ`, dlqErr);
47
+ throw dlqErr;
48
+ }
49
+ }
50
+ },
24
51
  });
25
- console.info(`[rabbitmq] consuming ${this.queueName}`);
52
+ console.info(`[kafka] consuming topic ${this.topic} (group: ${this.groupId})`);
26
53
  }
27
54
  }
28
55
  //# sourceMappingURL=consumer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"consumer.js","sourceRoot":"","sources":["../../src/services/consumer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,OAAgB,QAAQ;IAO5B,YAAY,OAAgB;QAC1B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,MAAM;QACV,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE;YAC3D,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAEvE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAEzB,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YACpD,IAAI,CAAC,GAAG;gBAAE,OAAO;YACjB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAc,CAAC;gBAC/D,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;gBAClC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACxB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,uBAAuB,IAAI,CAAC,SAAS,EAAE,EAAE,GAAG,CAAC,CAAC;gBAC5D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YACvC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,IAAI,CAAC,wBAAwB,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IACzD,CAAC;CACF"}
1
+ {"version":3,"file":"consumer.js","sourceRoot":"","sources":["../../src/services/consumer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,MAAM,OAAgB,QAAQ;IAK5B,KAAK,CAAC,MAAM;QACV,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE;YACrD,KAAK,EAAE;gBACL,OAAO,EAAE,CAAC;aACX;SACF,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;QAE3C,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;QACzB,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;QAEzB,MAAM,QAAQ,CAAC,SAAS,CAAC;YACvB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,aAAa,EAAE,IAAI;SACpB,CAAC,CAAC;QAEH,MAAM,QAAQ,CAAC,GAAG,CAAC;YACjB,WAAW,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE;gBAC5C,IAAI,CAAC,OAAO,CAAC,KAAK;oBAAE,OAAO;gBAE3B,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAc,CAAC;oBAEjE,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBAC/B,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,CAAC,KAAK,CACX,0BAA0B,IAAI,CAAC,OAAO,aAAa,IAAI,CAAC,KAAK,EAAE,EAC/D,GAAG,CACJ,CAAC;oBAEF,IAAI,CAAC;wBACH,MAAM,QAAQ,CAAC,IAAI,CAAC;4BAClB,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,MAAM;4BAC1B,IAAI,EAAE,CAAC,CAAC;4BACR,QAAQ,EAAE;gCACR;oCACE,GAAG,EAAE,OAAO,CAAC,GAAG;oCAChB,KAAK,EAAE,OAAO,CAAC,KAAK;oCACpB,OAAO,EAAE;wCACP,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;wCAC3D,aAAa,EAAE,IAAI,CAAC,KAAK;wCACzB,iBAAiB,EAAE,SAAS,CAAC,QAAQ,EAAE;wCACvC,cAAc,EAAE,OAAO,CAAC,MAAM;qCAC/B;iCACF;6BACF;yBACF,CAAC,CAAC;wBAEH,OAAO,CAAC,IAAI,CACV,sDAAsD,IAAI,CAAC,KAAK,MAAM,CACvE,CAAC;oBACJ,CAAC;oBAAC,OAAO,MAAM,EAAE,CAAC;wBAChB,OAAO,CAAC,KAAK,CACX,iDAAiD,EACjD,MAAM,CACP,CAAC;wBAEF,MAAM,MAAM,CAAC;oBACf,CAAC;gBACH,CAAC;YACH,CAAC;SACF,CAAC,CAAC;QAEH,OAAO,CAAC,IAAI,CACV,2BAA2B,IAAI,CAAC,KAAK,YAAY,IAAI,CAAC,OAAO,GAAG,CACjE,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ import { Producer, Consumer } from "kafkajs";
2
+ declare class KafkaService {
3
+ private kafka;
4
+ private producer;
5
+ connect(broker: string): Promise<void>;
6
+ getConsumer(groupId: string, config?: any): Consumer;
7
+ getProducer(): Producer;
8
+ close(): Promise<void>;
9
+ }
10
+ export declare const kafkaClient: KafkaService;
11
+ export {};
12
+ //# sourceMappingURL=kafka.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kafka.d.ts","sourceRoot":"","sources":["../../src/services/kafka.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,QAAQ,EAAE,QAAQ,EAAY,MAAM,SAAS,CAAC;AAE9D,cAAM,YAAY;IAChB,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,QAAQ,CAAyB;IAEnC,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAc5C,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,GAAG,QAAQ;IAKpD,WAAW,IAAI,QAAQ;IAKjB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAQ7B;AAED,eAAO,MAAM,WAAW,cAAqB,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { Kafka, logLevel } from "kafkajs";
2
+ class KafkaService {
3
+ constructor() {
4
+ this.kafka = null;
5
+ this.producer = null;
6
+ }
7
+ async connect(broker) {
8
+ if (this.producer)
9
+ return;
10
+ this.kafka = new Kafka({
11
+ clientId: "tickrorg-service",
12
+ brokers: [broker],
13
+ logLevel: logLevel.ERROR,
14
+ });
15
+ this.producer = this.kafka.producer();
16
+ await this.producer.connect();
17
+ }
18
+ getConsumer(groupId, config) {
19
+ if (!this.kafka)
20
+ throw new Error("Kafka not initialized");
21
+ return this.kafka.consumer({ groupId, ...config });
22
+ }
23
+ getProducer() {
24
+ if (!this.producer)
25
+ throw new Error("Kafka not initialized");
26
+ return this.producer;
27
+ }
28
+ async close() {
29
+ try {
30
+ await this.producer?.disconnect();
31
+ }
32
+ finally {
33
+ this.producer = null;
34
+ this.kafka = null;
35
+ }
36
+ }
37
+ }
38
+ export const kafkaClient = new KafkaService();
39
+ //# sourceMappingURL=kafka.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kafka.js","sourceRoot":"","sources":["../../src/services/kafka.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAsB,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE9D,MAAM,YAAY;IAAlB;QACU,UAAK,GAAiB,IAAI,CAAC;QAC3B,aAAQ,GAAoB,IAAI,CAAC;IAkC3C,CAAC;IAhCC,KAAK,CAAC,OAAO,CAAC,MAAc;QAC1B,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAE1B,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC;YACrB,QAAQ,EAAE,kBAAkB;YAC5B,OAAO,EAAE,CAAC,MAAM,CAAC;YACjB,QAAQ,EAAE,QAAQ,CAAC,KAAK;SACzB,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACtC,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;IAChC,CAAC;IAGD,WAAW,CAAC,OAAe,EAAE,MAAY;QACvC,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,WAAW;QACT,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAC;QACpC,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,CAAC;IACH,CAAC;CACF;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,YAAY,EAAE,CAAC"}
@@ -1,9 +1,6 @@
1
- import { Channel } from "amqplib";
2
1
  import { Event } from "../types/events";
3
2
  export declare abstract class Publisher<T extends Event> {
4
- protected channel: Channel;
5
- abstract subject: T["subject"];
6
- constructor(channel: Channel);
3
+ abstract topic: T["subject"];
7
4
  publish(data: T["data"]): Promise<void>;
8
5
  }
9
6
  //# sourceMappingURL=publisher.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"publisher.d.ts","sourceRoot":"","sources":["../../src/services/publisher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGxC,8BAAsB,SAAS,CAAC,CAAC,SAAS,KAAK;IAGjC,SAAS,CAAC,OAAO,EAAE,OAAO;IAFtC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;gBAET,OAAO,EAAE,OAAO;IAEhC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;CAQ9C"}
1
+ {"version":3,"file":"publisher.d.ts","sourceRoot":"","sources":["../../src/services/publisher.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAExC,8BAAsB,SAAS,CAAC,CAAC,SAAS,KAAK;IAC7C,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;IAEvB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;CAQ9C"}
@@ -1,10 +1,11 @@
1
- import { EXCHANGE_NAME } from "./rabbitmq";
1
+ import { kafkaClient } from "./kafka";
2
2
  export class Publisher {
3
- constructor(channel) {
4
- this.channel = channel;
5
- }
6
3
  async publish(data) {
7
- this.channel.publish(EXCHANGE_NAME, this.subject, Buffer.from(JSON.stringify(data)), { persistent: true, contentType: "application/json" });
4
+ const producer = kafkaClient.getProducer();
5
+ await producer.send({
6
+ topic: this.topic,
7
+ messages: [{ value: JSON.stringify(data) }],
8
+ });
8
9
  }
9
10
  }
10
11
  //# sourceMappingURL=publisher.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"publisher.js","sourceRoot":"","sources":["../../src/services/publisher.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,OAAgB,SAAS;IAG7B,YAAsB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;IAAG,CAAC;IAE1C,KAAK,CAAC,OAAO,CAAC,IAAe;QAC3B,IAAI,CAAC,OAAO,CAAC,OAAO,CAClB,aAAa,EACb,IAAI,CAAC,OAAO,EACZ,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EACjC,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,kBAAkB,EAAE,CACtD,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"publisher.js","sourceRoot":"","sources":["../../src/services/publisher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAGtC,MAAM,OAAgB,SAAS;IAG7B,KAAK,CAAC,OAAO,CAAC,IAAe;QAC3B,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;QAE3C,MAAM,QAAQ,CAAC,IAAI,CAAC;YAClB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;SAC5C,CAAC,CAAC;IACL,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tickrorg/common",
3
- "version": "1.0.15",
3
+ "version": "1.0.16",
4
4
  "description": "",
5
5
  "license": "ISC",
6
6
  "author": "",
@@ -18,11 +18,11 @@
18
18
  "pub": "git add . && git commit -m 'update' && npm version patch && npm publish"
19
19
  },
20
20
  "dependencies": {
21
- "amqplib": "^2.2.0",
22
21
  "cookie-parser": "^1.4.7",
23
22
  "express": "^5.2.1",
24
23
  "express-validator": "^7.3.2",
25
- "jsonwebtoken": "^9.0.3"
24
+ "jsonwebtoken": "^9.0.3",
25
+ "kafkajs": "^2.2.4"
26
26
  },
27
27
  "devDependencies": {
28
28
  "@types/amqplib": "^0.10.8",
@@ -1,12 +0,0 @@
1
- import { Channel } from "amqplib";
2
- export declare const EXCHANGE_NAME = "tickrorg.events";
3
- declare class RabbitMQ {
4
- private connection;
5
- private channel;
6
- connect(url: string): Promise<Channel>;
7
- getChannel(): Channel;
8
- close(): Promise<void>;
9
- }
10
- export declare const rabbit: RabbitMQ;
11
- export {};
12
- //# sourceMappingURL=rabbitmq.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rabbitmq.d.ts","sourceRoot":"","sources":["../../src/services/rabbitmq.ts"],"names":[],"mappings":"AAAA,OAAa,EAAE,OAAO,EAAgB,MAAM,SAAS,CAAC;AAEtD,eAAO,MAAM,aAAa,oBAAoB,CAAC;AAE/C,cAAM,QAAQ;IACZ,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,OAAO,CAAwB;IAEjC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAwB5C,UAAU,IAAI,OAAO;IAKf,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAS7B;AAED,eAAO,MAAM,MAAM,UAAiB,CAAC"}
@@ -1,44 +0,0 @@
1
- import amqp from "amqplib";
2
- export const EXCHANGE_NAME = "tickrorg.events";
3
- class RabbitMQ {
4
- constructor() {
5
- this.connection = null;
6
- this.channel = null;
7
- }
8
- async connect(url) {
9
- if (this.channel)
10
- return this.channel;
11
- this.connection = await amqp.connect(url);
12
- this.channel = await this.connection.createChannel();
13
- await this.channel.assertExchange(EXCHANGE_NAME, "topic", {
14
- durable: true,
15
- });
16
- this.connection.on("close", () => {
17
- this.connection = null;
18
- this.channel = null;
19
- console.warn("[rabbitmq] connection closed");
20
- });
21
- this.connection.on("error", (err) => {
22
- console.error("[rabbitmq] connection error", err);
23
- });
24
- console.info("[rabbitmq] connected");
25
- return this.channel;
26
- }
27
- getChannel() {
28
- if (!this.channel)
29
- throw new Error("RabbitMQ not connected");
30
- return this.channel;
31
- }
32
- async close() {
33
- try {
34
- await this.channel?.close();
35
- await this.connection?.close();
36
- }
37
- finally {
38
- this.channel = null;
39
- this.connection = null;
40
- }
41
- }
42
- }
43
- export const rabbit = new RabbitMQ();
44
- //# sourceMappingURL=rabbitmq.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rabbitmq.js","sourceRoot":"","sources":["../../src/services/rabbitmq.ts"],"names":[],"mappings":"AAAA,OAAO,IAA+B,MAAM,SAAS,CAAC;AAEtD,MAAM,CAAC,MAAM,aAAa,GAAG,iBAAiB,CAAC;AAE/C,MAAM,QAAQ;IAAd;QACU,eAAU,GAAwB,IAAI,CAAC;QACvC,YAAO,GAAmB,IAAI,CAAC;IAwCzC,CAAC;IAtCC,KAAK,CAAC,OAAO,CAAC,GAAW;QACvB,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC;QAEtC,IAAI,CAAC,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;QAErD,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,aAAa,EAAE,OAAO,EAAE;YACxD,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAC/B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACvB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YAClC,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,UAAU;QACR,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;YAC5B,MAAM,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC;QACjC,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,CAAC;IACH,CAAC;CACF;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC"}