@eratu/common 1.0.2 → 1.0.3

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.
@@ -15,7 +15,8 @@ export declare abstract class Listener<T extends Event> {
15
15
  protected ackWait: number;
16
16
  protected codec: import("nats").Codec<unknown>;
17
17
  constructor(js: JetStreamClient, jsm: JetStreamManager);
18
- private ensureStreamAndConsumer;
18
+ private waitForStream;
19
+ private createConsumerIfNotExists;
19
20
  listen(): Promise<void>;
20
21
  private parseMessage;
21
22
  }
@@ -25,8 +25,30 @@ class Listener {
25
25
  this.jsm = jsm;
26
26
  this.js = js;
27
27
  }
28
- ensureStreamAndConsumer() {
28
+ waitForStream() {
29
29
  return __awaiter(this, void 0, void 0, function* () {
30
+ let retryCount = 0;
31
+ while (true) {
32
+ try {
33
+ yield this.jsm.streams.info(this.stream);
34
+ console.log(`✅ Stream "${this.stream}" is ready`);
35
+ return;
36
+ }
37
+ catch (_a) {
38
+ console.log(`⏳ Waiting for stream "${this.stream}"...`);
39
+ yield new Promise((res) => setTimeout(res, 2000));
40
+ }
41
+ retryCount++;
42
+ if (retryCount > 5) {
43
+ console.error(`❌ Stream "${this.stream}" is not ready after 5 attempts`);
44
+ throw new Error(`Stream "${this.stream}" is not ready`);
45
+ }
46
+ }
47
+ });
48
+ }
49
+ createConsumerIfNotExists() {
50
+ return __awaiter(this, void 0, void 0, function* () {
51
+ yield this.waitForStream();
30
52
  // Ensure durable consumer exists
31
53
  try {
32
54
  yield this.jsm.consumers.info(this.stream, this.durableName);
@@ -46,7 +68,7 @@ class Listener {
46
68
  listen() {
47
69
  return __awaiter(this, void 0, void 0, function* () {
48
70
  var _a, e_1, _b, _c;
49
- yield this.ensureStreamAndConsumer();
71
+ yield this.createConsumerIfNotExists();
50
72
  const messages = yield this.consumer.consume();
51
73
  try {
52
74
  for (var _d = true, messages_1 = __asyncValues(messages), messages_1_1; messages_1_1 = yield messages_1.next(), _a = messages_1_1.done, !_a; _d = true) {
@@ -0,0 +1,14 @@
1
+ import { JetStreamClient } from "nats";
2
+ export interface Event {
3
+ subject: string;
4
+ stream: string;
5
+ data: any;
6
+ }
7
+ export declare abstract class Publisher<T extends Event> {
8
+ abstract subject: T["subject"];
9
+ abstract stream: T["stream"];
10
+ protected js: JetStreamClient;
11
+ protected codec: import("nats").Codec<unknown>;
12
+ constructor(js: JetStreamClient);
13
+ publish(data: T["data"]): Promise<void>;
14
+ }
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.Publisher = void 0;
13
+ const nats_1 = require("nats");
14
+ class Publisher {
15
+ constructor(js) {
16
+ this.codec = (0, nats_1.JSONCodec)();
17
+ this.js = js;
18
+ }
19
+ publish(data) {
20
+ return __awaiter(this, void 0, void 0, function* () {
21
+ const message = this.codec.encode(data);
22
+ yield this.js.publish(this.subject, message);
23
+ console.log(`Message published to ${this.subject}:`, data);
24
+ });
25
+ }
26
+ }
27
+ exports.Publisher = Publisher;
package/build/index.d.ts CHANGED
@@ -4,7 +4,8 @@ export * from "./errors/database-connection-error";
4
4
  export * from "./errors/not-authorized-error";
5
5
  export * from "./errors/not-found-error";
6
6
  export * from "./errors/request-validation-error";
7
- export * from "./events/base-listener";
7
+ export * from "./events/listeners/base-listener";
8
+ export * from "./events/publishers/base-publisher";
8
9
  export * from "./events/book-created-event";
9
10
  export * from "./events/subjects";
10
11
  export * from "./events/streams";
package/build/index.js CHANGED
@@ -20,7 +20,8 @@ __exportStar(require("./errors/database-connection-error"), exports);
20
20
  __exportStar(require("./errors/not-authorized-error"), exports);
21
21
  __exportStar(require("./errors/not-found-error"), exports);
22
22
  __exportStar(require("./errors/request-validation-error"), exports);
23
- __exportStar(require("./events/base-listener"), exports);
23
+ __exportStar(require("./events/listeners/base-listener"), exports);
24
+ __exportStar(require("./events/publishers/base-publisher"), exports);
24
25
  __exportStar(require("./events/book-created-event"), exports);
25
26
  __exportStar(require("./events/subjects"), exports);
26
27
  __exportStar(require("./events/streams"), exports);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eratu/common",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "description": "A package for shared code across microservices",
5
5
  "main": "./build/index.js",
6
6
  "types": "./build/index.d.ts",