@tickrorg/common 1.0.15 → 1.0.17

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"}
@@ -1,19 +1,24 @@
1
1
  import { Response, Request } from "express";
2
2
  export interface TokenPayload {
3
- id: string;
3
+ _id: string;
4
4
  email: string;
5
5
  type: number;
6
6
  }
7
7
  export declare class Token {
8
+ private static readonly ACCESS_TOKEN_EXPIRY;
9
+ private static readonly REFRESH_TOKEN_EXPIRY;
10
+ private static readonly ACCESS_COOKIE_PATH;
11
+ private static readonly REFRESH_COOKIE_PATH;
8
12
  static generateAccess(payload: TokenPayload): string;
9
- static generateRefresh(payload: TokenPayload): string;
13
+ static generateRefresh(): string;
14
+ static hashRefresh(token: string): string;
10
15
  static generatePair(payload: TokenPayload): {
11
16
  accessToken: string;
12
17
  refreshToken: string;
18
+ refreshTokenHash: string;
13
19
  };
14
20
  static verifyAccess(token: string): TokenPayload | null;
15
- static verifyRefresh(token: string): TokenPayload | null;
16
- static refresh(req: Request, res: Response): TokenPayload | null;
21
+ static getRefreshFromRequest(req: Request): string | null;
17
22
  static fromRequest(req: Request): TokenPayload | null;
18
23
  static setCookies(res: Response, accessToken: string, refreshToken: string): void;
19
24
  static clearCookies(res: Response): void;
@@ -1 +1 @@
1
- {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../src/services/token.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAE5C,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,KAAK;IAChB,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM;IAKpD,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM;IAIrD,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY;;;;IAOzC,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAQvD,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAQxD,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,YAAY,GAAG,IAAI;IAmBhE,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI;IAMrD,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM;IAkB1E,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,QAAQ;CAIlC"}
1
+ {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../src/services/token.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAE5C,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,KAAK;IAChB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAS;IACpD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAA2B;IAEvE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAO;IACjD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAmB;IAE9D,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM;IAOpD,MAAM,CAAC,eAAe,IAAI,MAAM;IAIhC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIzC,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY;;;;;IAUzC,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IA0BvD,MAAM,CAAC,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI;IAMzD,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI;IAQrD,MAAM,CAAC,UAAU,CACf,GAAG,EAAE,QAAQ,EACb,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,IAAI;IAkBP,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI;CASzC"}
@@ -1,52 +1,49 @@
1
+ import crypto from "crypto";
1
2
  import jwt from "jsonwebtoken";
2
3
  export class Token {
3
4
  static generateAccess(payload) {
4
- console.log("Generating access token with payload :", payload);
5
- return jwt.sign(payload, process.env.JWT_ACCESS_KEY, { expiresIn: "15m" });
5
+ return jwt.sign(payload, process.env.JWT_ACCESS_KEY, {
6
+ expiresIn: Token.ACCESS_TOKEN_EXPIRY,
7
+ algorithm: "HS256",
8
+ });
9
+ }
10
+ static generateRefresh() {
11
+ return crypto.randomBytes(32).toString("base64url");
6
12
  }
7
- static generateRefresh(payload) {
8
- return jwt.sign(payload, process.env.JWT_REFRESH_KEY, { expiresIn: "7d" });
13
+ static hashRefresh(token) {
14
+ return crypto.createHash("sha256").update(token).digest("hex");
9
15
  }
10
16
  static generatePair(payload) {
17
+ const refreshToken = Token.generateRefresh();
11
18
  return {
12
19
  accessToken: Token.generateAccess(payload),
13
- refreshToken: Token.generateRefresh(payload),
20
+ refreshToken,
21
+ refreshTokenHash: Token.hashRefresh(refreshToken),
14
22
  };
15
23
  }
16
24
  static verifyAccess(token) {
17
25
  try {
18
- return jwt.verify(token, process.env.JWT_ACCESS_KEY);
26
+ const decoded = jwt.verify(token, process.env.JWT_ACCESS_KEY, { algorithms: ["HS256"] });
27
+ if (typeof decoded === "string")
28
+ return null;
29
+ const { _id, email, type } = decoded;
30
+ if (typeof _id !== "string" ||
31
+ typeof email !== "string" ||
32
+ typeof type !== "number") {
33
+ return null;
34
+ }
35
+ return { _id, email, type };
19
36
  }
20
37
  catch {
21
38
  return null;
22
39
  }
23
40
  }
24
- static verifyRefresh(token) {
25
- try {
26
- return jwt.verify(token, process.env.JWT_REFRESH_KEY);
27
- }
28
- catch {
29
- return null;
30
- }
31
- }
32
- static refresh(req, res) {
33
- const refreshToken = req.cookies.refresh_token;
34
- if (!refreshToken)
35
- return null;
36
- const payload = Token.verifyRefresh(refreshToken);
37
- if (!payload)
38
- return null;
39
- const { id, email, type } = payload;
40
- const { accessToken, refreshToken: newRefreshToken } = Token.generatePair({
41
- id,
42
- email,
43
- type: type,
44
- });
45
- Token.setCookies(res, accessToken, newRefreshToken);
46
- return { id, email, type };
41
+ static getRefreshFromRequest(req) {
42
+ const token = req.cookies?.refresh_token;
43
+ return typeof token === "string" ? token : null;
47
44
  }
48
45
  static fromRequest(req) {
49
- const token = req.cookies.access_token;
46
+ const token = req.cookies?.access_token;
50
47
  if (!token)
51
48
  return null;
52
49
  return Token.verifyAccess(token);
@@ -57,19 +54,27 @@ export class Token {
57
54
  secure: process.env.NODE_ENV === "production",
58
55
  sameSite: "lax",
59
56
  maxAge: 15 * 60 * 1000,
60
- path: "/",
57
+ path: Token.ACCESS_COOKIE_PATH,
61
58
  });
62
59
  res.cookie("refresh_token", refreshToken, {
63
60
  httpOnly: true,
64
61
  secure: process.env.NODE_ENV === "production",
65
62
  sameSite: "lax",
66
- maxAge: 7 * 24 * 60 * 60 * 1000,
67
- path: "/",
63
+ maxAge: Token.REFRESH_TOKEN_EXPIRY,
64
+ path: Token.REFRESH_COOKIE_PATH,
68
65
  });
69
66
  }
70
67
  static clearCookies(res) {
71
- res.clearCookie("access_token");
72
- res.clearCookie("refresh_token", { path: "/api/auth/refresh" });
68
+ res.clearCookie("access_token", {
69
+ path: Token.ACCESS_COOKIE_PATH,
70
+ });
71
+ res.clearCookie("refresh_token", {
72
+ path: Token.REFRESH_COOKIE_PATH,
73
+ });
73
74
  }
74
75
  }
76
+ Token.ACCESS_TOKEN_EXPIRY = "15m";
77
+ Token.REFRESH_TOKEN_EXPIRY = 7 * 24 * 60 * 60 * 1000;
78
+ Token.ACCESS_COOKIE_PATH = "/";
79
+ Token.REFRESH_COOKIE_PATH = "/auth/refresh";
75
80
  //# sourceMappingURL=token.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/services/token.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/services/token.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  export interface UserEventData {
2
- id: string;
2
+ _id: string;
3
3
  email: string;
4
4
  name?: string;
5
5
  phoneNumber?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/types/events.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AACD,oBAAY,aAAa;IACvB,aAAa,mBAAmB;IAChC,aAAa,mBAAmB;IAChC,YAAY,kBAAkB;IAC9B,cAAc,oBAAoB;IAClC,gBAAgB,sBAAsB;IACtC,WAAW,iBAAiB;IAC5B,WAAW,iBAAiB;CAC7B;AAED,MAAM,WAAW,KAAK,CAAC,CAAC,GAAG,OAAO;IAChC,OAAO,EAAE,aAAa,CAAC;IACvB,IAAI,EAAE,CAAC,CAAC;CACT"}
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/types/events.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AACD,oBAAY,aAAa;IACvB,aAAa,mBAAmB;IAChC,aAAa,mBAAmB;IAChC,YAAY,kBAAkB;IAC9B,cAAc,oBAAoB;IAClC,gBAAgB,sBAAsB;IACtC,WAAW,iBAAiB;IAC5B,WAAW,iBAAiB;CAC7B;AAED,MAAM,WAAW,KAAK,CAAC,CAAC,GAAG,OAAO;IAChC,OAAO,EAAE,aAAa,CAAC;IACvB,IAAI,EAAE,CAAC,CAAC;CACT"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tickrorg/common",
3
- "version": "1.0.15",
3
+ "version": "1.0.17",
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"}