@dnlycticket/common 1.0.4 → 1.0.6

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,18 @@
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
+ 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,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Listener = void 0;
4
+ var Listener = /** @class */ (function () {
5
+ function Listener(client) {
6
+ this.ackWait = 5 * 1000;
7
+ this.client = client;
8
+ }
9
+ Listener.prototype.subscriptionOptions = function () {
10
+ return this.client
11
+ .subscriptionOptions()
12
+ // 发送所有历史消息
13
+ // 同时使用setDurableName,则第一次连接发送全部消息,后续链接发送其他没有确认的消息
14
+ .setDeliverAllAvailable()
15
+ // 手动告诉nats完成,否则自动完成
16
+ .setManualAckMode(true)
17
+ .setAckWait(this.ackWait)
18
+ // 获取收到DurableName的断线钱积压的消息
19
+ .setDurableName(this.queueGroupName);
20
+ };
21
+ Listener.prototype.listen = function () {
22
+ var _this = this;
23
+ // 第二个参数为群组,多个listen,消息指挥随机发送给一个群组实例
24
+ var subscription = this.client.subscribe(this.subject, this.queueGroupName, this.subscriptionOptions());
25
+ subscription.on('message', function (msg) {
26
+ console.log("Message received: ".concat(_this.subject, " / ").concat(_this.queueGroupName));
27
+ var parsedData = _this.parseMessage(msg);
28
+ _this.onMessage(parsedData, msg);
29
+ });
30
+ };
31
+ Listener.prototype.parseMessage = function (msg) {
32
+ var data = msg.getData();
33
+ return typeof data === 'string' ? JSON.parse(data) : JSON.parse(data.toString('utf8'));
34
+ };
35
+ return Listener;
36
+ }());
37
+ exports.Listener = Listener;
@@ -0,0 +1,13 @@
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
+ private client;
10
+ constructor(client: Stan);
11
+ publish(data: T['data']): Promise<void>;
12
+ }
13
+ export {};
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Publisher = void 0;
4
+ var Publisher = /** @class */ (function () {
5
+ function Publisher(client) {
6
+ this.client = client;
7
+ }
8
+ Publisher.prototype.publish = function (data) {
9
+ var _this = this;
10
+ return new Promise(function (resolve, reject) {
11
+ _this.client.publish(_this.subject, JSON.stringify(data), function (err) {
12
+ if (err)
13
+ return reject(err);
14
+ console.log('Event published to subject:', _this.subject);
15
+ resolve();
16
+ });
17
+ });
18
+ };
19
+ return Publisher;
20
+ }());
21
+ exports.Publisher = Publisher;
@@ -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,10 @@
1
+ import { Subjects } from "./subjects";
2
+ export interface TicketCreatedEvent {
3
+ subject: Subjects.TicketCreated;
4
+ data: {
5
+ id: string;
6
+ title: string;
7
+ price: number;
8
+ userId: string;
9
+ };
10
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,10 @@
1
+ import { Subjects } from "./subjects";
2
+ export interface TicketUpdatedEvent {
3
+ subject: Subjects.TicketUpdated;
4
+ data: {
5
+ id: string;
6
+ title: string;
7
+ price: number;
8
+ userId: string;
9
+ };
10
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
package/build/index.d.ts CHANGED
@@ -7,3 +7,8 @@ export * from './middlewares/current-user';
7
7
  export * from './middlewares/error-handler';
8
8
  export * from './middlewares/require-auth';
9
9
  export * from './middlewares/validate-request';
10
+ export * from './events/base-listener';
11
+ export * from './events/base-publisher';
12
+ export * from './events/subjects';
13
+ export * from './events/ticket-created-event';
14
+ export * from './events/ticket-updated-event';
package/build/index.js CHANGED
@@ -14,6 +14,9 @@ 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
+ // npm run pub
18
+ // 更新插件npm update @dnlycticket/common --registry=https://registry.npmjs.org/
19
+ // 因为使用镜像下载,所以不会很快刷新
17
20
  __exportStar(require("./errors/base-request-error"), exports);
18
21
  __exportStar(require("./errors/database-connect-error"), exports);
19
22
  __exportStar(require("./errors/not-authorized-error"), exports);
@@ -23,3 +26,8 @@ __exportStar(require("./middlewares/current-user"), exports);
23
26
  __exportStar(require("./middlewares/error-handler"), exports);
24
27
  __exportStar(require("./middlewares/require-auth"), exports);
25
28
  __exportStar(require("./middlewares/validate-request"), exports);
29
+ __exportStar(require("./events/base-listener"), exports);
30
+ __exportStar(require("./events/base-publisher"), exports);
31
+ __exportStar(require("./events/subjects"), exports);
32
+ __exportStar(require("./events/ticket-created-event"), exports);
33
+ __exportStar(require("./events/ticket-updated-event"), exports);
@@ -1,9 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.requireAuth = void 0;
4
+ var not_authorized_error_1 = require("../errors/not-authorized-error");
4
5
  var requireAuth = function (req, res, next) {
5
6
  if (!req.currentUser) {
6
- // throw new NotAuthorizedError();
7
+ throw new not_authorized_error_1.NotAuthorizedError();
7
8
  }
8
9
  next();
9
10
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dnlycticket/common",
3
- "version": "1.0.4",
3
+ "version": "1.0.6",
4
4
  "publishConfig": {
5
5
  "registry": "https://registry.npmjs.org/"
6
6
  },
@@ -31,6 +31,7 @@
31
31
  "express": "^5.2.1",
32
32
  "express-validator": "^7.3.1",
33
33
  "jsonwebtoken": "^9.0.3",
34
+ "node-nats-streaming": "^0.3.2",
34
35
  "package": "^1.0.1"
35
36
  }
36
37
  }