@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.
- package/build/events/Tickets/ticket-created-listener.d.ts +9 -0
- package/build/events/Tickets/ticket-created-listener.js +17 -0
- package/build/events/Tickets/ticket-updated-listener.d.ts +8 -0
- package/build/events/Tickets/ticket-updated-listener.js +17 -0
- package/build/events/base-listener.d.ts +18 -0
- package/build/events/base-listener.js +32 -0
- package/build/events/base-publisher.d.ts +13 -0
- package/build/events/base-publisher.js +19 -0
- package/build/index.d.ts +6 -0
- package/build/index.js +9 -0
- package/build/types/events/index.d.ts +4 -0
- package/build/types/events/index.js +8 -0
- package/build/types/events/tickets/index.d.ts +19 -0
- package/build/types/events/tickets/index.js +2 -0
- package/build/types/index.d.ts +3 -1
- package/build/types/index.js +3 -1
- package/package.json +6 -5
|
@@ -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,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
|
+
}
|
package/build/types/index.d.ts
CHANGED
package/build/types/index.js
CHANGED
|
@@ -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("
|
|
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.
|
|
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
|
-
"
|
|
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
|
-
"
|
|
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/*",
|