@epztickets/common 1.11.0 → 1.13.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.
@@ -1,6 +1,4 @@
1
1
  "use strict";
2
- // src/events/jetstream-listener.ts
3
- // import { JsMsg, JetStreamClient, consumerOpts } from "nats";
4
2
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
5
3
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
6
4
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -19,40 +17,6 @@ var __asyncValues = (this && this.__asyncValues) || function (o) {
19
17
  };
20
18
  Object.defineProperty(exports, "__esModule", { value: true });
21
19
  exports.JetStreamListener = void 0;
22
- // interface Event {
23
- // subject: string;
24
- // data: any;
25
- // }
26
- // export abstract class JetStreamListener<T extends Event> {
27
- // abstract subject: T["subject"];
28
- // abstract durableName: string;
29
- // abstract streamName: string; // The JetStream stream
30
- // protected ackWait = 5 * 1000;
31
- // protected js: JetStreamClient;
32
- // constructor(js: JetStreamClient) {
33
- // this.js = js;
34
- // }
35
- // abstract onMessage(data: T["data"], msg: JsMsg): void | Promise<void>;
36
- // async listen() {
37
- // const opts = consumerOpts();
38
- // opts.durable(this.durableName);
39
- // opts.manualAck();
40
- // opts.ackWait(this.ackWait);
41
- // opts.deliverAll();
42
- // const sub = await this.js.subscribe(this.subject, opts);
43
- // console.log(`Listening for JetStream messages on subject: ${this.subject}`);
44
- // (async () => {
45
- // for await (const msg of sub) {
46
- // try {
47
- // const parsedData = JSON.parse(msg.data.toString());
48
- // await this.onMessage(parsedData, msg);
49
- // } catch (err) {
50
- // console.error("Error handling JetStream message:", err);
51
- // }
52
- // }
53
- // })();
54
- // }
55
- // }
56
20
  const nats_1 = require("nats");
57
21
  class JetStreamListener {
58
22
  constructor(js) {
@@ -65,7 +29,9 @@ class JetStreamListener {
65
29
  opts.durable(this.durableName);
66
30
  opts.manualAck();
67
31
  opts.ackExplicit();
68
- opts.deliverTo(`${this.queueGroup}.${this.durableName}`); // optional but safe
32
+ opts.deliverAll();
33
+ opts.maxDeliver(5);
34
+ opts.maxDeliver(5);
69
35
  opts.filterSubject(this.subject);
70
36
  const sub = yield this.js.subscribe(this.subject, opts);
71
37
  console.log(`Listening for ${this.subject} with durable ${this.durableName}`);
@@ -1,12 +1,9 @@
1
1
  import { Subjects } from "./subjects";
2
- export interface OrderCancelledEvent {
2
+ export interface OrderReservationCancelledEvent {
3
3
  subject: Subjects.OrderCancelled;
4
4
  data: {
5
5
  id: string;
6
6
  version: number;
7
- ticket: {
8
- id: string;
9
- };
10
7
  reservation: {
11
8
  id: string;
12
9
  roomId: string;
@@ -1,6 +1,6 @@
1
1
  import { Subjects } from "./subjects";
2
2
  import { OrderStatus } from "./types/order-status";
3
- export interface OrderCreatedEvent {
3
+ export interface OrderReservationCreatedEvent {
4
4
  subject: Subjects.OrderCreated;
5
5
  data: {
6
6
  id: string;
@@ -8,10 +8,6 @@ export interface OrderCreatedEvent {
8
8
  status: OrderStatus;
9
9
  userId: string;
10
10
  expiresAt: string;
11
- ticket: {
12
- id: string;
13
- price: number;
14
- };
15
11
  reservation: {
16
12
  id: string;
17
13
  roomId: string;
@@ -0,0 +1,11 @@
1
+ import { Subjects } from "./subjects";
2
+ export interface OrderTicketCancelledEvent {
3
+ subject: Subjects.OrderCancelled;
4
+ data: {
5
+ id: string;
6
+ version: number;
7
+ ticket: {
8
+ id: string;
9
+ };
10
+ };
11
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,16 @@
1
+ import { Subjects } from "./subjects";
2
+ import { OrderStatus } from "./types/order-status";
3
+ export interface OrderTicketCreatedEvent {
4
+ subject: Subjects.OrderCreated;
5
+ data: {
6
+ id: string;
7
+ version: number;
8
+ status: OrderStatus;
9
+ userId: string;
10
+ expiresAt: string;
11
+ ticket: {
12
+ id: string;
13
+ price: number;
14
+ };
15
+ };
16
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -9,5 +9,6 @@ export declare enum Subjects {
9
9
  PaymentCreated = "events.payment.created"
10
10
  }
11
11
  export declare enum Streams {
12
- Events = "events"
12
+ Events = "events",
13
+ Jobs = "jobs"
13
14
  }
@@ -12,7 +12,29 @@ var Subjects;
12
12
  Subjects["ExpirationComplete"] = "events.expiration.complete";
13
13
  Subjects["PaymentCreated"] = "events.payment.created";
14
14
  })(Subjects || (exports.Subjects = Subjects = {}));
15
+ // export enum Subjects {
16
+ // // Ticket
17
+ // TicketCreated = "events.ticket.created",
18
+ // TicketPriceUpdated = "events.ticket.price.updated",
19
+ // TicketOrderLinked = "events.ticket.order.linked",
20
+ // TicketOrderUnlinked = "events.ticket.order.unlinked",
21
+ // // Reservation
22
+ // ReservationCreated = "events.reservation.created",
23
+ // ReservationOrderLinked = "events.reservation.order.linked",
24
+ // ReservationOrderReleased = "events.reservation.order.released",
25
+ // ReservationCancelled = "events.reservation.cancelled",
26
+ // ReservationUpdated = "events.reservation.updated",
27
+ // // Order (orchestrator)
28
+ // OrderCreated = "events.order.created",
29
+ // OrderCancelled = "events.order.cancelled",
30
+ // OrderCompleted = "events.order.completed",
31
+ // // Expiration
32
+ // ExpirationComplete = "events.expiration.complete",
33
+ // // Payment
34
+ // PaymentCreated = "events.payment.created",
35
+ // }
15
36
  var Streams;
16
37
  (function (Streams) {
17
38
  Streams["Events"] = "events";
39
+ Streams["Jobs"] = "jobs";
18
40
  })(Streams || (exports.Streams = Streams = {}));
package/build/index.d.ts CHANGED
@@ -12,8 +12,10 @@ export * from "./events/subjects";
12
12
  export * from "./events/ticket-created-event";
13
13
  export * from "./events/ticket-updated-event";
14
14
  export * from "./events/types/order-status";
15
- export * from "./events/order-cancelled-event";
16
- export * from "./events/order-created-event";
15
+ export * from "./events/order-ticket-cancelled-event";
16
+ export * from "./events/order-ticket-created-event";
17
+ export * from "./events/order-reservation-cancelled-event";
18
+ export * from "./events/order-reservation-created-event";
17
19
  export * from "./events/expiration-complete-event";
18
20
  export * from "./events/payment-created-event";
19
21
  export * from "./events/reservation-created-event";
package/build/index.js CHANGED
@@ -31,8 +31,10 @@ __exportStar(require("./events/subjects"), exports);
31
31
  __exportStar(require("./events/ticket-created-event"), exports);
32
32
  __exportStar(require("./events/ticket-updated-event"), exports);
33
33
  __exportStar(require("./events/types/order-status"), exports);
34
- __exportStar(require("./events/order-cancelled-event"), exports);
35
- __exportStar(require("./events/order-created-event"), exports);
34
+ __exportStar(require("./events/order-ticket-cancelled-event"), exports);
35
+ __exportStar(require("./events/order-ticket-created-event"), exports);
36
+ __exportStar(require("./events/order-reservation-cancelled-event"), exports);
37
+ __exportStar(require("./events/order-reservation-created-event"), exports);
36
38
  __exportStar(require("./events/expiration-complete-event"), exports);
37
39
  __exportStar(require("./events/payment-created-event"), exports);
38
40
  __exportStar(require("./events/reservation-created-event"), exports);
@@ -1,2 +1,2 @@
1
1
  import { JetStreamManager } from "nats";
2
- export declare function ensureEventStream(jsm: JetStreamManager): Promise<void>;
2
+ export declare function ensureStreams(jsm: JetStreamManager): Promise<void>;
@@ -1,4 +1,6 @@
1
1
  "use strict";
2
+ // import { JetStreamManager, RetentionPolicy, StorageType, DiscardPolicy } from "nats";
3
+ // import { Streams } from "../events/subjects";
2
4
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
5
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
6
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -9,25 +11,51 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
11
  });
10
12
  };
11
13
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.ensureEventStream = ensureEventStream;
14
+ exports.ensureStreams = ensureStreams;
15
+ // export async function ensureEventStream(jsm: JetStreamManager) {
16
+ // const streams = await jsm.streams.list().next();
17
+ // const exists = streams.some(s => s.config.name === Streams.Events);
18
+ // if (exists) {
19
+ // console.log("Stream already exists:", Streams.Events);
20
+ // return};
21
+ // await jsm.streams.add({
22
+ // name: Streams.Events,
23
+ // subjects: ["events.>"],
24
+ // // retention: RetentionPolicy.Workqueue, // consumer needs to be unique
25
+ // retention: RetentionPolicy.Limits, // fan-out to multiple services
26
+ // storage: StorageType.File,
27
+ // discard: DiscardPolicy.Old,
28
+ // max_age: 7 * 24 * 60 * 60 * 1000, // 7 days
29
+ // });
30
+ // }
13
31
  const nats_1 = require("nats");
14
32
  const subjects_1 = require("../events/subjects");
15
- function ensureEventStream(jsm) {
33
+ function ensureStreams(jsm) {
16
34
  return __awaiter(this, void 0, void 0, function* () {
17
- const streams = yield jsm.streams.list().next();
18
- const exists = streams.some(s => s.config.name === subjects_1.Streams.Events);
19
- if (exists) {
20
- console.log("Stream already exists:", subjects_1.Streams.Events);
21
- return;
35
+ const existing = yield jsm.streams.list().next();
36
+ const has = (name) => existing.some(s => s.config.name === name);
37
+ /* ---------------- EVENTS STREAM ---------------- */
38
+ if (!has(subjects_1.Streams.Events)) {
39
+ yield jsm.streams.add({
40
+ name: subjects_1.Streams.Events,
41
+ subjects: ["events.>"],
42
+ retention: nats_1.RetentionPolicy.Limits, // FAN-OUT
43
+ storage: nats_1.StorageType.File,
44
+ discard: nats_1.DiscardPolicy.Old,
45
+ max_age: 7 * 24 * 60 * 60 * 1000,
46
+ });
47
+ console.log("Created stream:", subjects_1.Streams.Events);
48
+ }
49
+ /* ---------------- JOBS STREAM ---------------- */
50
+ if (!has(subjects_1.Streams.Jobs)) {
51
+ yield jsm.streams.add({
52
+ name: subjects_1.Streams.Jobs,
53
+ subjects: ["jobs.>"],
54
+ retention: nats_1.RetentionPolicy.Workqueue, // EXACTLY-ONCE
55
+ storage: nats_1.StorageType.File,
56
+ discard: nats_1.DiscardPolicy.Old,
57
+ });
58
+ console.log("Created stream:", subjects_1.Streams.Jobs);
22
59
  }
23
- ;
24
- yield jsm.streams.add({
25
- name: subjects_1.Streams.Events,
26
- subjects: ["events.>"],
27
- retention: nats_1.RetentionPolicy.Workqueue,
28
- storage: nats_1.StorageType.File,
29
- discard: nats_1.DiscardPolicy.Old,
30
- max_age: 7 * 24 * 60 * 60 * 1000, // 7 days
31
- });
32
60
  });
33
61
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@epztickets/common",
3
- "version": "1.11.0",
3
+ "version": "1.13.0",
4
4
  "main": "./build/index.js",
5
5
  "types": "./build/index.d.ts",
6
6
  "files": [
@@ -14,7 +14,7 @@
14
14
  "version:major": "npm version major",
15
15
  "release:minor": "npm version minor && npm run build && npm publish",
16
16
  "pub:patch": "npm run build && git add . && git commit -m \"chore: patch release\" && npm run version:patch && npm publish",
17
- "pub:minor": "npm run build && git add . && git commit -m \"feat: jetstream support\" && npm run version:minor && npm publish"
17
+ "pub:minor": "npm run build && git add . && git commit -m \"feat: order-reservation support\" && npm run version:minor && npm publish"
18
18
  },
19
19
  "keywords": [],
20
20
  "author": "",