@articketing2021/common 1.0.6 → 1.0.8

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,9 @@
1
+ import { Message } from "node-nats-streaming";
2
+ import { Subjects } from "../../types/events";
3
+ import { Listener } from "../../events/base-listener";
4
+ import { TicketCreatedEvent } from "../../types";
5
+ export declare class TicketCreatedListener extends Listener<TicketCreatedEvent> {
6
+ readonly subject = Subjects.TicketCreated;
7
+ queueGroupName: string;
8
+ onMessage(data: TicketCreatedEvent["data"], msg: Message): void;
9
+ }
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TicketCreatedListener = void 0;
4
+ const events_1 = require("../../types/events");
5
+ const base_listener_1 = require("../../events/base-listener");
6
+ class TicketCreatedListener extends base_listener_1.Listener {
7
+ constructor() {
8
+ super(...arguments);
9
+ this.subject = events_1.Subjects.TicketCreated;
10
+ this.queueGroupName = "payments-service";
11
+ }
12
+ onMessage(data, msg) {
13
+ console.log("Event data!", data);
14
+ msg.ack();
15
+ }
16
+ }
17
+ exports.TicketCreatedListener = TicketCreatedListener;
@@ -0,0 +1,8 @@
1
+ import { Subjects, TicketUpdatedEvent } from "../../types";
2
+ import { Listener } from "../../events/base-listener";
3
+ import { Message } from "node-nats-streaming";
4
+ export declare class TicketUpdatedListener extends Listener<TicketUpdatedEvent> {
5
+ readonly subject = Subjects.TicketUpdated;
6
+ queueGroupName: string;
7
+ onMessage(data: TicketUpdatedEvent["data"], msg: Message): void;
8
+ }
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TicketUpdatedListener = void 0;
4
+ const types_1 = require("../../types");
5
+ const base_listener_1 = require("../../events/base-listener");
6
+ class TicketUpdatedListener extends base_listener_1.Listener {
7
+ constructor() {
8
+ super(...arguments);
9
+ this.subject = types_1.Subjects.TicketUpdated;
10
+ this.queueGroupName = "payments-service";
11
+ }
12
+ onMessage(data, msg) {
13
+ console.log("Event data!", data);
14
+ msg.ack();
15
+ }
16
+ }
17
+ exports.TicketUpdatedListener = TicketUpdatedListener;
@@ -0,0 +1,18 @@
1
+ import { Subjects } from "../types";
2
+ import { Message, Stan } from "node-nats-streaming";
3
+ interface Event {
4
+ subject: Subjects;
5
+ data: unknown;
6
+ }
7
+ export declare abstract class Listener<T extends Event> {
8
+ abstract subject: T["subject"];
9
+ abstract queueGroupName: string;
10
+ abstract onMessage(data: T["data"], msg: Message): void;
11
+ private client;
12
+ protected ackWait: number;
13
+ constructor(client: Stan);
14
+ subscriptionOptions(): import("node-nats-streaming").SubscriptionOptions;
15
+ listen(): void;
16
+ parseMessage(msg: Message): any;
17
+ }
18
+ export {};
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Listener = void 0;
4
+ class Listener {
5
+ constructor(client) {
6
+ this.ackWait = 5 * 1000;
7
+ this.client = client;
8
+ }
9
+ subscriptionOptions() {
10
+ return this.client
11
+ .subscriptionOptions()
12
+ .setDeliverAllAvailable()
13
+ .setManualAckMode(true)
14
+ .setAckWait(this.ackWait)
15
+ .setDurableName(this.queueGroupName);
16
+ }
17
+ listen() {
18
+ const subscription = this.client.subscribe(this.subject, this.queueGroupName, this.subscriptionOptions());
19
+ subscription.on("message", (msg) => {
20
+ console.log(`Message received ${this.subject} / ${this.queueGroupName}`);
21
+ const parsedData = this.parseMessage(msg);
22
+ this.onMessage(parsedData, msg);
23
+ });
24
+ }
25
+ parseMessage(msg) {
26
+ const data = msg.getData();
27
+ return typeof data === "string"
28
+ ? JSON.parse(data)
29
+ : JSON.parse(data.toString("utf8"));
30
+ }
31
+ }
32
+ exports.Listener = Listener;
@@ -0,0 +1,13 @@
1
+ import { Subjects } from "../types";
2
+ import { Stan } from "node-nats-streaming";
3
+ interface Event {
4
+ subject: Subjects;
5
+ data: unknown;
6
+ }
7
+ export declare abstract class Publisher<T extends Event> {
8
+ abstract subject: T["subject"];
9
+ private client;
10
+ constructor(client: Stan);
11
+ pub(data: T["data"]): Promise<void>;
12
+ }
13
+ export {};
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Publisher = void 0;
4
+ class Publisher {
5
+ constructor(client) {
6
+ this.client = client;
7
+ }
8
+ pub(data) {
9
+ return new Promise((resolve, reject) => {
10
+ this.client.publish(this.subject, JSON.stringify(data), (err) => {
11
+ if (err)
12
+ return reject(err);
13
+ console.log("event publish too subject ", this.subject);
14
+ resolve();
15
+ });
16
+ });
17
+ }
18
+ }
19
+ exports.Publisher = Publisher;
package/build/index.d.ts CHANGED
@@ -9,4 +9,10 @@ export * from "./middleware/current-user";
9
9
  export * from "./middleware/error-handler";
10
10
  export * from "./middleware/require-auth";
11
11
  export * from "./middleware/validate-request";
12
+ export * from "./events/base-listener";
13
+ export * from "./events/base-publisher";
14
+ export * from "./events/Tickets/ticket-created-listener";
15
+ export * from "./events/Tickets/ticket-updated-listener";
12
16
  export * from "./types/index";
17
+ export * from "./types/events";
18
+ export * from "./types/events/tickets";
package/build/index.js CHANGED
@@ -27,5 +27,14 @@ __exportStar(require("./middleware/current-user"), exports);
27
27
  __exportStar(require("./middleware/error-handler"), exports);
28
28
  __exportStar(require("./middleware/require-auth"), exports);
29
29
  __exportStar(require("./middleware/validate-request"), exports);
30
+ //Events
31
+ __exportStar(require("./events/base-listener"), exports);
32
+ __exportStar(require("./events/base-publisher"), exports);
33
+ //Events-tickets
34
+ __exportStar(require("./events/Tickets/ticket-created-listener"), exports);
35
+ __exportStar(require("./events/Tickets/ticket-updated-listener"), exports);
30
36
  //enum
31
37
  __exportStar(require("./types/index"), exports);
38
+ __exportStar(require("./types/events"), exports);
39
+ //interface
40
+ __exportStar(require("./types/events/tickets"), exports);
@@ -0,0 +1,4 @@
1
+ export declare enum Subjects {
2
+ TicketCreated = "ticket:created",
3
+ TicketUpdated = "ticket:updated"
4
+ }
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Subjects = void 0;
4
+ var Subjects;
5
+ (function (Subjects) {
6
+ Subjects["TicketCreated"] = "ticket:created";
7
+ Subjects["TicketUpdated"] = "ticket:updated";
8
+ })(Subjects || (exports.Subjects = Subjects = {}));
@@ -0,0 +1,19 @@
1
+ import { Subjects } from "../../../types/events";
2
+ export interface TicketCreatedEvent {
3
+ subject: Subjects.TicketCreated;
4
+ data: {
5
+ id: string;
6
+ title: string;
7
+ price: number;
8
+ userId: string;
9
+ };
10
+ }
11
+ export interface TicketUpdatedEvent {
12
+ subject: Subjects.TicketUpdated;
13
+ data: {
14
+ id: string;
15
+ title: string;
16
+ price: number;
17
+ userId: string;
18
+ };
19
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1 +1,3 @@
1
- export * from "./users";
1
+ export * from "../types/users";
2
+ export * from "../types/events/tickets";
3
+ export * from "../types/events";
@@ -14,4 +14,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./users"), exports);
17
+ __exportStar(require("../types/users"), exports);
18
+ __exportStar(require("../types/events/tickets"), exports);
19
+ __exportStar(require("../types/events"), exports);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@articketing2021/common",
3
- "version": "1.0.6",
3
+ "version": "1.0.8",
4
4
  "description": "Common reusable utilities, middlewares, and types for Articketing microservices.",
5
5
  "main": "./build/index.js",
6
6
  "types": "./build/index.d.ts",
@@ -20,17 +20,18 @@
20
20
  "@types/cookie-session": "^2.0.49",
21
21
  "@types/express": "^5.0.3",
22
22
  "@types/jsonwebtoken": "^9.0.10",
23
- "typescript": "^5.9.3",
24
- "tsconfig-paths": "^4.2.0",
23
+ "del-cli": "^7.0.0",
25
24
  "ts-node-dev": "^2.0.0",
26
25
  "tsc-alias": "^1.8.9",
27
- "del-cli": "^7.0.0"
26
+ "tsconfig-paths": "^4.2.0",
27
+ "typescript": "^5.9.3"
28
28
  },
29
29
  "dependencies": {
30
30
  "cookie-session": "^2.1.1",
31
31
  "express": "^5.1.0",
32
32
  "express-validator": "^7.2.1",
33
- "jsonwebtoken": "^9.0.2"
33
+ "jsonwebtoken": "^9.0.2",
34
+ "node-nats-streaming": "^0.3.2"
34
35
  },
35
36
  "scripts": {
36
37
  "clean": "del-cli ./build/*",