@epztickets/common 1.0.14 → 1.2.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.
- package/build/events/jetstream-listener.d.ts +16 -0
- package/build/events/jetstream-listener.js +63 -0
- package/build/events/jetstream-publisher.d.ts +13 -0
- package/build/events/jetstream-publisher.js +33 -0
- package/build/events/payment-created-event.d.ts +9 -0
- package/build/events/payment-created-event.js +2 -0
- package/build/events/subjects.d.ts +2 -1
- package/build/events/subjects.js +1 -0
- package/build/index.d.ts +3 -2
- package/build/index.js +3 -2
- package/package.json +9 -4
- package/build/events/base-listener.d.ts +0 -18
- package/build/events/base-listener.js +0 -32
- package/build/events/base-publisher.d.ts +0 -13
- package/build/events/base-publisher.js +0 -20
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { JsMsg, JetStreamClient } from "nats";
|
|
2
|
+
interface Event {
|
|
3
|
+
subject: string;
|
|
4
|
+
data: any;
|
|
5
|
+
}
|
|
6
|
+
export declare abstract class JetStreamListener<T extends Event> {
|
|
7
|
+
abstract subject: T["subject"];
|
|
8
|
+
abstract durableName: string;
|
|
9
|
+
abstract streamName: string;
|
|
10
|
+
protected ackWait: number;
|
|
11
|
+
protected js: JetStreamClient;
|
|
12
|
+
constructor(js: JetStreamClient);
|
|
13
|
+
abstract onMessage(data: T["data"], msg: JsMsg): void | Promise<void>;
|
|
14
|
+
listen(): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,63 @@
|
|
|
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
|
+
var __asyncValues = (this && this.__asyncValues) || function (o) {
|
|
12
|
+
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
13
|
+
var m = o[Symbol.asyncIterator], i;
|
|
14
|
+
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
|
|
15
|
+
function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
|
|
16
|
+
function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
|
|
17
|
+
};
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.JetStreamListener = void 0;
|
|
20
|
+
// src/events/jetstream-listener.ts
|
|
21
|
+
const nats_1 = require("nats");
|
|
22
|
+
class JetStreamListener {
|
|
23
|
+
constructor(js) {
|
|
24
|
+
this.ackWait = 5 * 1000;
|
|
25
|
+
this.js = js;
|
|
26
|
+
}
|
|
27
|
+
listen() {
|
|
28
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
29
|
+
const opts = (0, nats_1.consumerOpts)();
|
|
30
|
+
opts.durable(this.durableName);
|
|
31
|
+
opts.manualAck();
|
|
32
|
+
opts.ackWait(this.ackWait);
|
|
33
|
+
opts.deliverAll();
|
|
34
|
+
const sub = yield this.js.subscribe(this.subject, opts);
|
|
35
|
+
console.log(`Listening for JetStream messages on subject: ${this.subject}`);
|
|
36
|
+
(() => __awaiter(this, void 0, void 0, function* () {
|
|
37
|
+
var _a, e_1, _b, _c;
|
|
38
|
+
try {
|
|
39
|
+
for (var _d = true, sub_1 = __asyncValues(sub), sub_1_1; sub_1_1 = yield sub_1.next(), _a = sub_1_1.done, !_a; _d = true) {
|
|
40
|
+
_c = sub_1_1.value;
|
|
41
|
+
_d = false;
|
|
42
|
+
const msg = _c;
|
|
43
|
+
try {
|
|
44
|
+
const parsedData = JSON.parse(msg.data.toString());
|
|
45
|
+
yield this.onMessage(parsedData, msg);
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
console.error("Error handling JetStream message:", err);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
53
|
+
finally {
|
|
54
|
+
try {
|
|
55
|
+
if (!_d && !_a && (_b = sub_1.return)) yield _b.call(sub_1);
|
|
56
|
+
}
|
|
57
|
+
finally { if (e_1) throw e_1.error; }
|
|
58
|
+
}
|
|
59
|
+
}))();
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
exports.JetStreamListener = JetStreamListener;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { JetStreamClient } from "nats";
|
|
2
|
+
interface Event {
|
|
3
|
+
subject: string;
|
|
4
|
+
data: any;
|
|
5
|
+
}
|
|
6
|
+
export declare abstract class JetStreamPublisher<T extends Event> {
|
|
7
|
+
abstract subject: T["subject"];
|
|
8
|
+
protected js: JetStreamClient;
|
|
9
|
+
protected sc: import("nats").Codec<string>;
|
|
10
|
+
constructor(js: JetStreamClient);
|
|
11
|
+
publish(data: T["data"]): Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,33 @@
|
|
|
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.JetStreamPublisher = void 0;
|
|
13
|
+
const nats_1 = require("nats");
|
|
14
|
+
class JetStreamPublisher {
|
|
15
|
+
constructor(js) {
|
|
16
|
+
this.sc = (0, nats_1.StringCodec)();
|
|
17
|
+
this.js = js;
|
|
18
|
+
}
|
|
19
|
+
publish(data) {
|
|
20
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
21
|
+
const payload = this.sc.encode(JSON.stringify(data));
|
|
22
|
+
try {
|
|
23
|
+
const ack = yield this.js.publish(this.subject, payload);
|
|
24
|
+
console.log(`📤 Event published to ${this.subject}`, ack.seq);
|
|
25
|
+
}
|
|
26
|
+
catch (err) {
|
|
27
|
+
console.error("❌ Failed to publish event", err);
|
|
28
|
+
throw err;
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.JetStreamPublisher = JetStreamPublisher;
|
|
@@ -3,5 +3,6 @@ export declare enum Subjects {
|
|
|
3
3
|
TicketUpdated = "ticket:updated",
|
|
4
4
|
OrderCreated = "order:created",
|
|
5
5
|
OrderCancelled = "order:cancelled",
|
|
6
|
-
ExpirationComplete = "expiratioin:complete"
|
|
6
|
+
ExpirationComplete = "expiratioin:complete",
|
|
7
|
+
PaymentCreated = "payment:created"
|
|
7
8
|
}
|
package/build/events/subjects.js
CHANGED
|
@@ -8,4 +8,5 @@ var Subjects;
|
|
|
8
8
|
Subjects["OrderCreated"] = "order:created";
|
|
9
9
|
Subjects["OrderCancelled"] = "order:cancelled";
|
|
10
10
|
Subjects["ExpirationComplete"] = "expiratioin:complete";
|
|
11
|
+
Subjects["PaymentCreated"] = "payment:created";
|
|
11
12
|
})(Subjects || (exports.Subjects = Subjects = {}));
|
package/build/index.d.ts
CHANGED
|
@@ -8,8 +8,6 @@ export * from "./middlewares/current-user";
|
|
|
8
8
|
export * from "./middlewares/error-handler";
|
|
9
9
|
export * from "./middlewares/require-auth";
|
|
10
10
|
export * from "./middlewares/validate-request";
|
|
11
|
-
export * from "./events/base-listener";
|
|
12
|
-
export * from "./events/base-publisher";
|
|
13
11
|
export * from "./events/subjects";
|
|
14
12
|
export * from "./events/ticket-created-event";
|
|
15
13
|
export * from "./events/ticket-updated-event";
|
|
@@ -17,3 +15,6 @@ export * from "./events/types/order-status";
|
|
|
17
15
|
export * from "./events/order-cancelled-event";
|
|
18
16
|
export * from "./events/order-created-event";
|
|
19
17
|
export * from "./events/expiration-complete-event";
|
|
18
|
+
export * from "./events/payment-created-event";
|
|
19
|
+
export * from "./events/jetstream-listener";
|
|
20
|
+
export * from "./events/jetstream-publisher";
|
package/build/index.js
CHANGED
|
@@ -27,8 +27,6 @@ __exportStar(require("./middlewares/error-handler"), exports);
|
|
|
27
27
|
__exportStar(require("./middlewares/require-auth"), exports);
|
|
28
28
|
__exportStar(require("./middlewares/validate-request"), exports);
|
|
29
29
|
// events
|
|
30
|
-
__exportStar(require("./events/base-listener"), exports);
|
|
31
|
-
__exportStar(require("./events/base-publisher"), exports);
|
|
32
30
|
__exportStar(require("./events/subjects"), exports);
|
|
33
31
|
__exportStar(require("./events/ticket-created-event"), exports);
|
|
34
32
|
__exportStar(require("./events/ticket-updated-event"), exports);
|
|
@@ -36,3 +34,6 @@ __exportStar(require("./events/types/order-status"), exports);
|
|
|
36
34
|
__exportStar(require("./events/order-cancelled-event"), exports);
|
|
37
35
|
__exportStar(require("./events/order-created-event"), exports);
|
|
38
36
|
__exportStar(require("./events/expiration-complete-event"), exports);
|
|
37
|
+
__exportStar(require("./events/payment-created-event"), exports);
|
|
38
|
+
__exportStar(require("./events/jetstream-listener"), exports);
|
|
39
|
+
__exportStar(require("./events/jetstream-publisher"), exports);
|
package/package.json
CHANGED
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@epztickets/common",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"main": "./build/index.js",
|
|
5
5
|
"types": "./build/index.d.ts",
|
|
6
6
|
"files": [
|
|
7
7
|
"build/**/*"
|
|
8
8
|
],
|
|
9
9
|
"scripts": {
|
|
10
|
-
"clean": "
|
|
10
|
+
"clean": "rimraf build",
|
|
11
11
|
"build": "npm run clean && tsc",
|
|
12
|
-
"
|
|
12
|
+
"version:patch": "npm version patch",
|
|
13
|
+
"version:minor": "npm version minor",
|
|
14
|
+
"version:major": "npm version major",
|
|
15
|
+
"pub:patch": "npm run build && git add . && git commit -m \"chore: patch release\" && npm run version:patch && npm publish",
|
|
16
|
+
"pub:minor": "npm run build && git add . && git commit -m \"feat: jetstream support\" && npm run version:minor && npm publish"
|
|
13
17
|
},
|
|
14
18
|
"keywords": [],
|
|
15
19
|
"author": "",
|
|
@@ -17,6 +21,7 @@
|
|
|
17
21
|
"description": "",
|
|
18
22
|
"devDependencies": {
|
|
19
23
|
"del-cli": "^6.0.0",
|
|
24
|
+
"rimraf": "^6.1.2",
|
|
20
25
|
"typescript": "^5.7.3"
|
|
21
26
|
},
|
|
22
27
|
"dependencies": {
|
|
@@ -27,6 +32,6 @@
|
|
|
27
32
|
"express": "^4.21.2",
|
|
28
33
|
"express-validator": "^7.2.1",
|
|
29
34
|
"jsonwebtoken": "^9.0.2",
|
|
30
|
-
"
|
|
35
|
+
"nats": "^2.29.3"
|
|
31
36
|
}
|
|
32
37
|
}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { Message, Stan } from "node-nats-streaming";
|
|
2
|
-
import { Subjects } from "./subjects";
|
|
3
|
-
interface Event {
|
|
4
|
-
subject: Subjects;
|
|
5
|
-
data: any;
|
|
6
|
-
}
|
|
7
|
-
export declare abstract class Listener<T extends Event> {
|
|
8
|
-
abstract subject: T["subject"];
|
|
9
|
-
abstract queueGroupName: string;
|
|
10
|
-
protected client: Stan;
|
|
11
|
-
abstract onMessage(data: T["data"], msg: Message): void;
|
|
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 {};
|
|
@@ -1,32 +0,0 @@
|
|
|
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;
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { Stan } from "node-nats-streaming";
|
|
2
|
-
import { Subjects } from "./subjects";
|
|
3
|
-
interface Event {
|
|
4
|
-
subject: Subjects;
|
|
5
|
-
data: any;
|
|
6
|
-
}
|
|
7
|
-
export declare abstract class Publisher<T extends Event> {
|
|
8
|
-
abstract subject: T["subject"];
|
|
9
|
-
protected client: Stan;
|
|
10
|
-
constructor(client: Stan);
|
|
11
|
-
publish(data: T["data"]): Promise<void>;
|
|
12
|
-
}
|
|
13
|
-
export {};
|
|
@@ -1,20 +0,0 @@
|
|
|
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
|
-
publish(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
|
-
}
|
|
14
|
-
console.log("Event published to", this.subject);
|
|
15
|
-
resolve();
|
|
16
|
-
});
|
|
17
|
-
});
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
exports.Publisher = Publisher;
|