@nextage/era-lib 1.0.185 → 1.0.187

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.
Files changed (132) hide show
  1. package/build/constants.d.ts +11 -0
  2. package/build/constants.d.ts.map +1 -1
  3. package/build/constants.js +11 -0
  4. package/build/constants.js.map +1 -1
  5. package/build/enums.d.ts +3 -0
  6. package/build/enums.d.ts.map +1 -1
  7. package/build/enums.js +3 -0
  8. package/build/enums.js.map +1 -1
  9. package/build/errors/app-error.d.ts +6 -0
  10. package/build/errors/app-error.d.ts.map +1 -1
  11. package/build/errors/app-error.js +6 -0
  12. package/build/errors/app-error.js.map +1 -1
  13. package/build/events/access-revoked-publisher.d.ts +1 -1
  14. package/build/events/access-revoked-publisher.d.ts.map +1 -1
  15. package/build/events/access-revoked-publisher.js +1 -1
  16. package/build/events/access-revoked-publisher.js.map +1 -1
  17. package/build/events/{base-event.controller.d.ts → base/base-event.controller.d.ts} +3 -3
  18. package/build/events/base/base-event.controller.d.ts.map +1 -0
  19. package/build/events/{base-event.controller.js → base/base-event.controller.js} +5 -5
  20. package/build/events/base/base-event.controller.js.map +1 -0
  21. package/build/events/{base-listener.d.ts → base/base-listener.d.ts} +17 -4
  22. package/build/events/base/base-listener.d.ts.map +1 -0
  23. package/build/events/base/base-listener.interfaces.d.ts.map +1 -0
  24. package/build/events/base/base-listener.interfaces.js.map +1 -0
  25. package/build/events/{base-listener.js → base/base-listener.js} +34 -10
  26. package/build/events/base/base-listener.js.map +1 -0
  27. package/build/events/{base-msg-listener.d.ts → base/base-msg-listener.d.ts} +15 -6
  28. package/build/events/base/base-msg-listener.d.ts.map +1 -0
  29. package/build/events/{base-msg-listener.js → base/base-msg-listener.js} +14 -5
  30. package/build/events/base/base-msg-listener.js.map +1 -0
  31. package/build/events/base/base-msg-publisher.d.ts +20 -0
  32. package/build/events/base/base-msg-publisher.d.ts.map +1 -0
  33. package/build/events/base/base-msg-publisher.js +24 -0
  34. package/build/events/base/base-msg-publisher.js.map +1 -0
  35. package/build/events/{base-nats-listener.d.ts → base/base-nats-listener.d.ts} +14 -9
  36. package/build/events/base/base-nats-listener.d.ts.map +1 -0
  37. package/build/events/{base-nats-listener.js → base/base-nats-listener.js} +15 -10
  38. package/build/events/base/base-nats-listener.js.map +1 -0
  39. package/build/events/base/base-nats-publisher.d.ts +23 -0
  40. package/build/events/base/base-nats-publisher.d.ts.map +1 -0
  41. package/build/events/base/base-nats-publisher.js +32 -0
  42. package/build/events/base/base-nats-publisher.js.map +1 -0
  43. package/build/events/base/base-publisher.d.ts +34 -0
  44. package/build/events/base/base-publisher.d.ts.map +1 -0
  45. package/build/events/base/base-publisher.js +41 -0
  46. package/build/events/base/base-publisher.js.map +1 -0
  47. package/build/events/dlq-manager.d.ts +1 -1
  48. package/build/events/dlq-manager.d.ts.map +1 -1
  49. package/build/events/event-subscription.d.ts +1 -1
  50. package/build/events/event-subscription.d.ts.map +1 -1
  51. package/build/events/event-subscription.js +2 -2
  52. package/build/events/event-subscription.js.map +1 -1
  53. package/build/events/index.d.ts +13 -11
  54. package/build/events/index.d.ts.map +1 -1
  55. package/build/events/index.js +14 -11
  56. package/build/events/index.js.map +1 -1
  57. package/build/events/interfaces.d.ts +9 -0
  58. package/build/events/interfaces.d.ts.map +1 -1
  59. package/build/events/revocation-listener.d.ts +1 -1
  60. package/build/events/revocation-listener.d.ts.map +1 -1
  61. package/build/events/transport/base-client-wrapper.d.ts +44 -0
  62. package/build/events/transport/base-client-wrapper.d.ts.map +1 -0
  63. package/build/events/transport/base-client-wrapper.js +47 -0
  64. package/build/events/transport/base-client-wrapper.js.map +1 -0
  65. package/build/events/transport/msg-client-manager.d.ts +37 -0
  66. package/build/events/transport/msg-client-manager.d.ts.map +1 -0
  67. package/build/events/{msg-client-manager.js → transport/msg-client-manager.js} +18 -39
  68. package/build/events/transport/msg-client-manager.js.map +1 -0
  69. package/build/events/transport/msg-wrapper.d.ts +15 -0
  70. package/build/events/transport/msg-wrapper.d.ts.map +1 -0
  71. package/build/events/transport/msg-wrapper.js +24 -0
  72. package/build/events/transport/msg-wrapper.js.map +1 -0
  73. package/build/events/{nats-client-manager.d.ts → transport/nats-client-manager.d.ts} +20 -18
  74. package/build/events/transport/nats-client-manager.d.ts.map +1 -0
  75. package/build/events/{nats-client-manager.js → transport/nats-client-manager.js} +20 -18
  76. package/build/events/transport/nats-client-manager.js.map +1 -0
  77. package/build/events/transport/nats-wrapper.d.ts +16 -0
  78. package/build/events/transport/nats-wrapper.d.ts.map +1 -0
  79. package/build/events/transport/nats-wrapper.js +30 -0
  80. package/build/events/transport/nats-wrapper.js.map +1 -0
  81. package/build/interfaces.d.ts +10 -0
  82. package/build/interfaces.d.ts.map +1 -1
  83. package/build/routes/validators.d.ts +4 -2
  84. package/build/routes/validators.d.ts.map +1 -1
  85. package/build/routes/validators.js +4 -2
  86. package/build/routes/validators.js.map +1 -1
  87. package/build/services/password.d.ts +19 -0
  88. package/build/services/password.d.ts.map +1 -1
  89. package/build/services/password.js +19 -0
  90. package/build/services/password.js.map +1 -1
  91. package/build/utils/functs.d.ts +54 -23
  92. package/build/utils/functs.d.ts.map +1 -1
  93. package/build/utils/functs.js +60 -25
  94. package/build/utils/functs.js.map +1 -1
  95. package/package.json +1 -1
  96. package/build/events/base-event.controller.d.ts.map +0 -1
  97. package/build/events/base-event.controller.js.map +0 -1
  98. package/build/events/base-listener.d.ts.map +0 -1
  99. package/build/events/base-listener.interfaces.d.ts.map +0 -1
  100. package/build/events/base-listener.interfaces.js.map +0 -1
  101. package/build/events/base-listener.js.map +0 -1
  102. package/build/events/base-msg-listener.d.ts.map +0 -1
  103. package/build/events/base-msg-listener.js.map +0 -1
  104. package/build/events/base-nats-listener.d.ts.map +0 -1
  105. package/build/events/base-nats-listener.js.map +0 -1
  106. package/build/events/base-nats-publisher.d.ts +0 -20
  107. package/build/events/base-nats-publisher.d.ts.map +0 -1
  108. package/build/events/base-nats-publisher.js +0 -35
  109. package/build/events/base-nats-publisher.js.map +0 -1
  110. package/build/events/base-publisher.d.ts +0 -18
  111. package/build/events/base-publisher.d.ts.map +0 -1
  112. package/build/events/base-publisher.js +0 -28
  113. package/build/events/base-publisher.js.map +0 -1
  114. package/build/events/msg-client-manager.d.ts +0 -38
  115. package/build/events/msg-client-manager.d.ts.map +0 -1
  116. package/build/events/msg-client-manager.js.map +0 -1
  117. package/build/events/msg-wrapper.d.ts +0 -10
  118. package/build/events/msg-wrapper.d.ts.map +0 -1
  119. package/build/events/msg-wrapper.js +0 -18
  120. package/build/events/msg-wrapper.js.map +0 -1
  121. package/build/events/nats-client-manager.d.ts.map +0 -1
  122. package/build/events/nats-client-manager.js.map +0 -1
  123. package/build/events/nats-client-manager.old.d.ts +0 -49
  124. package/build/events/nats-client-manager.old.d.ts.map +0 -1
  125. package/build/events/nats-client-manager.old.js +0 -108
  126. package/build/events/nats-client-manager.old.js.map +0 -1
  127. package/build/events/nats-wrapper.d.ts +0 -14
  128. package/build/events/nats-wrapper.d.ts.map +0 -1
  129. package/build/events/nats-wrapper.js +0 -24
  130. package/build/events/nats-wrapper.js.map +0 -1
  131. /package/build/events/{base-listener.interfaces.d.ts → base/base-listener.interfaces.d.ts} +0 -0
  132. /package/build/events/{base-listener.interfaces.js → base/base-listener.interfaces.js} +0 -0
@@ -1,29 +1,30 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MsgClientManager = void 0;
4
- const ws_1 = require("ws");
4
+ const node_events_1 = require("node:events");
5
5
  const nx_frame_be_1 = require("@nextage/nx-frame-be");
6
- const event_message_1 = require("./event-message");
7
- const event_subscription_1 = require("./event-subscription");
8
- class MsgClientManager extends ws_1.EventEmitter {
9
- constructor(clientId, opts) {
6
+ const event_message_1 = require("../event-message");
7
+ const event_subscription_1 = require("../event-subscription");
8
+ class MsgClientManager extends node_events_1.EventEmitter {
9
+ constructor(clientId) {
10
10
  super();
11
11
  this.subs = {};
12
- this.opts = {};
13
12
  this.clientId = clientId;
14
- this.opts = opts ?? {};
15
13
  }
16
14
  /**
17
- *
15
+ * No real connection to establish for the in-memory bus; logs readiness so the
16
+ * transport lifecycle stays symmetric with the NATS client.
18
17
  */
19
18
  async connect() {
20
19
  nx_frame_be_1.APP.logger.info(`✅ Connected to Event Client Manager`);
21
- //setTimeout(() => this.emit('connect', true), 500);
22
20
  }
23
21
  /**
22
+ * Register a subscription for `subject` and return it so the caller can attach a
23
+ * `message` handler.
24
24
  *
25
- * @param {*} key
26
- * @param {*} method
25
+ * @param subject subject to listen on
26
+ * @param queueGroupName optional group label (informational for the in-memory bus)
27
+ * @param options optional `maxDeliver` / `ackWait` (unused in-memory)
27
28
  */
28
29
  subscribe(subject, queueGroupName, options) {
29
30
  var _a;
@@ -34,17 +35,14 @@ class MsgClientManager extends ws_1.EventEmitter {
34
35
  return sub;
35
36
  }
36
37
  /**
37
- *
38
- * @param {*} key
39
- * @param {*} data
38
+ * Fan out `data` to every subscriber of `subject`; a no-op (with a log) when
39
+ * there is no subscription — the in-memory bus is best-effort.
40
40
  */
41
41
  async publish(subject, data, options) {
42
42
  if (!this.subs[subject]) {
43
43
  nx_frame_be_1.APP.logger.info(`❌ Data won't be published, no subscription for subject: ${subject}`, (0, nx_frame_be_1.logClassCtx)(this));
44
44
  return;
45
45
  }
46
- //throw new Error('MsgClientManager : subject does not exist');
47
- //this.subs[subject] ??= [];
48
46
  this.subs[subject].forEach(sub => {
49
47
  const message = new event_message_1.Message(data);
50
48
  sub.emit('message', message);
@@ -52,36 +50,17 @@ class MsgClientManager extends ws_1.EventEmitter {
52
50
  });
53
51
  }
54
52
  /**
55
- *
56
- * @param {*} id
53
+ * Detach `cb` from `sub` and drop it from the subscription list.
57
54
  */
58
55
  unsubscribe(sub, cb = () => { }) {
59
56
  sub.off('message', cb);
60
- const subs = this.getSubscriptions(sub.subject) || [];
61
- const idx = this.getSubscriptions(sub.subject).findIndex(s => s.id === sub.id);
57
+ const subs = this.getSubscriptions(sub.subject);
58
+ const idx = subs.findIndex(s => s.id === sub.id);
62
59
  if (idx >= 0)
63
60
  subs.splice(idx, 1);
64
61
  }
65
- // /**
66
- // *
67
- // * @param data
68
- // * @returns
69
- // */
70
- // encodeData(data: string): string | Uint8Array {
71
- // return data;
72
- // }
73
- // /**
74
- // *
75
- // * @param data
76
- // * @returns
77
- // */
78
- // decodeData(data: string | Uint8Array): string {
79
- // return data as string;
80
- // }
81
62
  /**
82
- *
83
- * @param sub
84
- * @returns
63
+ * Return the subscription list for `subject`, throwing if none exists.
85
64
  */
86
65
  getSubscriptions(subject) {
87
66
  if (!this.subs[subject])
@@ -0,0 +1 @@
1
+ {"version":3,"file":"msg-client-manager.js","sourceRoot":"","sources":["../../../src/events/transport/msg-client-manager.ts"],"names":[],"mappings":";;;AAAA,6CAAuE;AACvE,sDAAgF;AAChF,oDAA4E;AAC5E,8DAAiF;AAGjF,MAAa,gBAAiB,SAAQ,0BAAY;IAMhD,YAAY,QAAiB;QAE3B,KAAK,EAAE,CAAC;QANV,SAAI,GAAsC,EAAE,CAAC;QAO3C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO;QAEX,iBAAG,CAAC,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IACzD,CAAC;IAED;;;;;;;OAOG;IACH,SAAS,CAAC,OAAe,EAAE,cAAuB,EAAE,OAAyB;;QAE3E,MAAM,GAAG,GAAG,IAAI,sCAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;QAEpE,MAAA,IAAI,CAAC,IAAI,EAAC,OAAO,SAAP,OAAO,IAAM,EAAE,EAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE7B,iBAAG,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,OAAO,MAAM,cAAc,EAAE,EAAE,IAAA,yBAAW,EAAC,IAAI,CAAC,CAAC,CAAC;QACzF,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO,CAAC,OAAe,EAAE,IAA0C,EAAE,OAAkB;QAE3F,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAExB,iBAAG,CAAC,MAAM,CAAC,IAAI,CAAC,2DAA2D,OAAO,EAAE,EAAE,IAAA,yBAAW,EAAC,IAAI,CAAC,CAAC,CAAC;YACzG,OAAO;QACT,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YAE/B,MAAM,OAAO,GAAG,IAAI,uBAAO,CAAC,IAAI,CAAC,CAAC;YAClC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAE7B,iBAAG,CAAC,MAAM,CAAC,IAAI,CAAC,iCAAiC,OAAO,EAAE,EAAE,IAAA,yBAAW,EAAC,IAAI,CAAC,CAAC,CAAC;QACjF,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,GAAsB,EAAE,KAA+B,GAAG,EAAE,GAAE,CAAC;QAEzE,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAEvB,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAChD,MAAM,GAAG,GAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;QAElD,IAAI,GAAG,IAAI,CAAC;YACV,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACxB,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,OAAe;QAEtC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAE/D,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;CACF;AArFD,4CAqFC"}
@@ -0,0 +1,15 @@
1
+ import { AppMessages } from '@nextage/nx-frame-be';
2
+ import { MsgClientManager } from './msg-client-manager';
3
+ import { ClientWrapper } from './base-client-wrapper';
4
+ /**
5
+ * In-memory message bus wrapper. Emulates a queue client (NATS) for best-effort
6
+ * intra-service delivery, so publishers/listeners share the same contract across
7
+ * transports.
8
+ */
9
+ declare class MsgWrapper extends ClientWrapper<MsgClientManager, AppMessages> {
10
+ constructor();
11
+ connect({ clientId }?: AppMessages): Promise<void>;
12
+ }
13
+ export declare const msgWrapper: MsgWrapper;
14
+ export {};
15
+ //# sourceMappingURL=msg-wrapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"msg-wrapper.d.ts","sourceRoot":"","sources":["../../../src/events/transport/msg-wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAU,sBAAsB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAS,uBAAuB,CAAC;AAEzD;;;;GAIG;AACH,cAAM,UAAW,SAAQ,aAAa,CAAC,gBAAgB,EAAE,WAAW,CAAC;;IAO7D,OAAO,CAAC,EAAE,QAAQ,EAAE,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;CAU7D;AAED,eAAO,MAAM,UAAU,YAAmB,CAAC"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.msgWrapper = void 0;
4
+ const msg_client_manager_1 = require("./msg-client-manager");
5
+ const base_client_wrapper_1 = require("./base-client-wrapper");
6
+ /**
7
+ * In-memory message bus wrapper. Emulates a queue client (NATS) for best-effort
8
+ * intra-service delivery, so publishers/listeners share the same contract across
9
+ * transports.
10
+ */
11
+ class MsgWrapper extends base_client_wrapper_1.ClientWrapper {
12
+ constructor() {
13
+ super('Event');
14
+ }
15
+ async connect({ clientId } = {}) {
16
+ // Reconnect guard: tear down a previous client before replacing it.
17
+ if (this._client)
18
+ await this.disconnect();
19
+ this._client = new msg_client_manager_1.MsgClientManager(clientId);
20
+ await this._client.connect();
21
+ }
22
+ }
23
+ exports.msgWrapper = new MsgWrapper();
24
+ //# sourceMappingURL=msg-wrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"msg-wrapper.js","sourceRoot":"","sources":["../../../src/events/transport/msg-wrapper.ts"],"names":[],"mappings":";;;AACA,6DAAwD;AACxD,+DAAyD;AAEzD;;;;GAIG;AACH,MAAM,UAAW,SAAQ,mCAA4C;IAEnE;QAEE,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,EAAE,QAAQ,KAAkB,EAAE;QAE1C,oEAAoE;QACpE,IAAI,IAAI,CAAC,OAAO;YACd,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAE1B,IAAI,CAAC,OAAO,GAAG,IAAI,qCAAgB,CAAC,QAAQ,CAAC,CAAC;QAE9C,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IAC/B,CAAC;CACF;AAEY,QAAA,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC"}
@@ -1,14 +1,13 @@
1
- import { EventEmitter } from 'ws';
1
+ import { EventEmitter } from 'node:events';
2
2
  import { Consumer } from 'nats';
3
3
  import { NatsConnection } from 'nats';
4
4
  import { JetStreamClient, JetStreamManager } from 'nats';
5
5
  import { NxObject, NxTypeObject } from '@nextage/nx-frame-be';
6
- import { MsgClientInterface, EventSubOptions } from './interfaces';
6
+ import { MsgClientInterface, EventSubOptions } from '../interfaces';
7
7
  export declare class NatsClientManager extends EventEmitter implements MsgClientInterface {
8
8
  private readonly servers;
9
9
  private readonly clientName?;
10
10
  subs: NxTypeObject<NxTypeObject<Consumer>>;
11
- private readonly opts;
12
11
  private nc;
13
12
  private js;
14
13
  private jsm;
@@ -17,13 +16,13 @@ export declare class NatsClientManager extends EventEmitter implements MsgClient
17
16
  get jetStream(): JetStreamClient;
18
17
  get jetStreamManager(): JetStreamManager;
19
18
  /**
20
- *
21
- * @param servers
22
- * @returns
19
+ * Connect to NATS and initialise the JetStream client + manager from the
20
+ * `servers`/`clientName` passed at construction. No-op when no server is
21
+ * configured (msg-only mode), so the transport can stay optional.
23
22
  */
24
- connect(servers?: string[]): Promise<void>;
23
+ connect(): Promise<void>;
25
24
  /**
26
- *
25
+ * Close the NATS connection, if open.
27
26
  */
28
27
  disconnect(): Promise<void>;
29
28
  /**
@@ -39,9 +38,14 @@ export declare class NatsClientManager extends EventEmitter implements MsgClient
39
38
  maxMsgs?: number;
40
39
  }): Promise<void>;
41
40
  /**
41
+ * Create (or reuse) a durable, shared-name consumer on `streamName` filtered to
42
+ * `subject`, load-balancing one copy of each message across service instances
43
+ * (work-queue). Recreates the consumer if an existing one has a stale filter.
42
44
  *
43
- * @param {*} key
44
- * @param {*} method
45
+ * @param subject concrete subject filter
46
+ * @param streamName stream carrying that subject
47
+ * @param queueGroupName shared consumer name (durable) → work-queue group
48
+ * @param options optional `maxDeliver` / `ackWait` overrides
45
49
  */
46
50
  subscribe(subject: string, streamName: string, queueGroupName: string, options?: EventSubOptions): Promise<Consumer>;
47
51
  /**
@@ -64,23 +68,21 @@ export declare class NatsClientManager extends EventEmitter implements MsgClient
64
68
  lookbackMs?: number;
65
69
  }): Promise<Consumer>;
66
70
  /**
67
- *
68
- * @param {*} key
69
- * @param {*} data
71
+ * Publish `payload` on `subject` via JetStream (default timeout 5s, overridable
72
+ * through `options`), awaiting the server ack.
70
73
  */
71
74
  publish(subject: string, payload: string, options?: NxObject): Promise<void>;
72
75
  /**
73
- *
74
- * @param {*} id
76
+ * Delete the consumer for `subject` locally and from the JetStream manager.
75
77
  */
76
78
  unsubscribe(subject: string, streamName: string, queueGroupName: string): Promise<void>;
77
79
  /**
78
- *
79
- * @param streamName
80
+ * Delete every consumer on `streamName` (best-effort, logs per-consumer errors).
80
81
  */
81
82
  cleanAllConsumers(streamName: string): Promise<void>;
82
83
  /**
83
- *
84
+ * Delete all consumers across all streams (maintenance helper); consumers are
85
+ * recreated on the next app start.
84
86
  */
85
87
  resetAndRecreateConsumers(): Promise<void>;
86
88
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nats-client-manager.d.ts","sourceRoot":"","sources":["../../../src/events/transport/nats-client-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAmD,aAAa,CAAC;AACxF,OAAO,EAAsB,QAAQ,EAA+B,MAAM,MAAM,CAAC;AACjF,OAAO,EAA2B,cAAc,EAAmB,MAAO,MAAM,CAAC;AACjF,OAAO,EAAiB,eAAe,EAAE,gBAAgB,EAAE,MAAe,MAAM,CAAC;AACjF,OAAO,EAAO,QAAQ,EAAE,YAAY,EAAE,MAAoC,sBAAsB,CAAC;AACjG,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAA4B,eAAe,CAAC;AAE1F,qBAAa,iBAAkB,SAAQ,YAAa,YAAW,kBAAkB;IAQnE,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;IAPxC,IAAI,EAAE,YAAY,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAM;IAEhD,OAAO,CAAC,EAAE,CAAmB;IAC7B,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,GAAG,CAAoB;gBAEF,OAAO,EAAM,MAAM,EAAE,GAAG,MAAM,EAC9B,UAAU,CAAC,EAAE,MAAM,YAAA;IAKhD,IAAI,UAAU,IAAI,cAAc,CAM/B;IAGD,IAAI,SAAS,IAAI,eAAe,CAM/B;IAED,IAAI,gBAAgB,IAAI,gBAAgB,CAEvC;IAED;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAmC9B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAQjC;;;;;;;OAOG;IACG,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAsCzH;;;;;;;;;OASG;IACG,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC;IAuD1H;;;;;;;;;;;;;;;OAeG;IACG,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,QAAQ,CAAC;IAoChH;;;OAGG;IACG,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBlF;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB7F;;OAEG;IACG,iBAAiB,CAAC,UAAU,EAAE,MAAM;IAqB1C;;;OAGG;IACG,yBAAyB;CAwBhC"}
@@ -1,18 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.NatsClientManager = void 0;
4
- const ws_1 = require("ws");
4
+ const node_events_1 = require("node:events");
5
5
  const nats_1 = require("nats");
6
6
  const nats_2 = require("nats");
7
7
  const nats_3 = require("nats");
8
8
  const nx_frame_be_1 = require("@nextage/nx-frame-be");
9
- class NatsClientManager extends ws_1.EventEmitter {
9
+ class NatsClientManager extends node_events_1.EventEmitter {
10
10
  constructor(servers, clientName) {
11
11
  super();
12
12
  this.servers = servers;
13
13
  this.clientName = clientName;
14
14
  this.subs = {};
15
- this.opts = {};
16
15
  }
17
16
  get connection() {
18
17
  if (!this.nc)
@@ -29,11 +28,11 @@ class NatsClientManager extends ws_1.EventEmitter {
29
28
  return this.jsm;
30
29
  }
31
30
  /**
32
- *
33
- * @param servers
34
- * @returns
31
+ * Connect to NATS and initialise the JetStream client + manager from the
32
+ * `servers`/`clientName` passed at construction. No-op when no server is
33
+ * configured (msg-only mode), so the transport can stay optional.
35
34
  */
36
- async connect(servers = ['nats://localhost:4222']) {
35
+ async connect() {
37
36
  if (!this.servers.length) {
38
37
  nx_frame_be_1.APP.logger.info('📪 NATS not defined');
39
38
  return;
@@ -63,7 +62,7 @@ class NatsClientManager extends ws_1.EventEmitter {
63
62
  }
64
63
  }
65
64
  /**
66
- *
65
+ * Close the NATS connection, if open.
67
66
  */
68
67
  async disconnect() {
69
68
  if (this.nc) {
@@ -111,9 +110,14 @@ class NatsClientManager extends ws_1.EventEmitter {
111
110
  }
112
111
  }
113
112
  /**
113
+ * Create (or reuse) a durable, shared-name consumer on `streamName` filtered to
114
+ * `subject`, load-balancing one copy of each message across service instances
115
+ * (work-queue). Recreates the consumer if an existing one has a stale filter.
114
116
  *
115
- * @param {*} key
116
- * @param {*} method
117
+ * @param subject concrete subject filter
118
+ * @param streamName stream carrying that subject
119
+ * @param queueGroupName shared consumer name (durable) → work-queue group
120
+ * @param options optional `maxDeliver` / `ackWait` overrides
117
121
  */
118
122
  async subscribe(subject, streamName, queueGroupName, options) {
119
123
  var _a;
@@ -202,9 +206,8 @@ class NatsClientManager extends ws_1.EventEmitter {
202
206
  }
203
207
  }
204
208
  /**
205
- *
206
- * @param {*} key
207
- * @param {*} data
209
+ * Publish `payload` on `subject` via JetStream (default timeout 5s, overridable
210
+ * through `options`), awaiting the server ack.
208
211
  */
209
212
  async publish(subject, payload, options) {
210
213
  try {
@@ -219,8 +222,7 @@ class NatsClientManager extends ws_1.EventEmitter {
219
222
  }
220
223
  }
221
224
  /**
222
- *
223
- * @param {*} id
225
+ * Delete the consumer for `subject` locally and from the JetStream manager.
224
226
  */
225
227
  async unsubscribe(subject, streamName, queueGroupName) {
226
228
  try {
@@ -235,8 +237,7 @@ class NatsClientManager extends ws_1.EventEmitter {
235
237
  }
236
238
  }
237
239
  /**
238
- *
239
- * @param streamName
240
+ * Delete every consumer on `streamName` (best-effort, logs per-consumer errors).
240
241
  */
241
242
  async cleanAllConsumers(streamName) {
242
243
  try {
@@ -257,7 +258,8 @@ class NatsClientManager extends ws_1.EventEmitter {
257
258
  }
258
259
  }
259
260
  /**
260
- *
261
+ * Delete all consumers across all streams (maintenance helper); consumers are
262
+ * recreated on the next app start.
261
263
  */
262
264
  async resetAndRecreateConsumers() {
263
265
  try {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nats-client-manager.js","sourceRoot":"","sources":["../../../src/events/transport/nats-client-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { NatsClientManager } from './nats-client-manager';
2
+ import { ClientWrapper } from './base-client-wrapper';
3
+ import { NatsWrapperConfig } from '../interfaces';
4
+ /**
5
+ * NATS JetStream wrapper. Durable inter-service delivery: exposes the concrete
6
+ * {@link NatsClientManager} so callers reach transport-specific methods
7
+ * (`createStream`, `subscribeBroadcast`, …).
8
+ */
9
+ declare class NatsWrapper extends ClientWrapper<NatsClientManager, NatsWrapperConfig> {
10
+ constructor();
11
+ connect({ servers, clientName }: NatsWrapperConfig): Promise<void>;
12
+ disconnect(): Promise<void>;
13
+ }
14
+ export declare const natsWrapper: NatsWrapper;
15
+ export {};
16
+ //# sourceMappingURL=nats-wrapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nats-wrapper.d.ts","sourceRoot":"","sources":["../../../src/events/transport/nats-wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAU,uBAAuB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD;;;;GAIG;AACH,cAAM,WAAY,SAAQ,aAAa,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;;IAQrE,OAAO,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAazD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAI3C;AAED,eAAO,MAAM,WAAW,aAAoB,CAAC"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.natsWrapper = void 0;
4
+ const nats_client_manager_1 = require("./nats-client-manager");
5
+ const base_client_wrapper_1 = require("./base-client-wrapper");
6
+ /**
7
+ * NATS JetStream wrapper. Durable inter-service delivery: exposes the concrete
8
+ * {@link NatsClientManager} so callers reach transport-specific methods
9
+ * (`createStream`, `subscribeBroadcast`, …).
10
+ */
11
+ class NatsWrapper extends base_client_wrapper_1.ClientWrapper {
12
+ constructor() {
13
+ super('NATS');
14
+ }
15
+ // Connessione a NATS + JetStream
16
+ async connect({ servers, clientName }) {
17
+ // Reconnect guard: close a previous connection before replacing it, so we
18
+ // never orphan a live NATS connection.
19
+ if (this._client)
20
+ await this.disconnect();
21
+ this._client = new nats_client_manager_1.NatsClientManager(servers, clientName);
22
+ await this._client.connect();
23
+ }
24
+ // Disconnessione pulita
25
+ async disconnect() {
26
+ await this._client?.disconnect();
27
+ }
28
+ }
29
+ exports.natsWrapper = new NatsWrapper();
30
+ //# sourceMappingURL=nats-wrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nats-wrapper.js","sourceRoot":"","sources":["../../../src/events/transport/nats-wrapper.ts"],"names":[],"mappings":";;;AAAA,+DAA0D;AAC1D,+DAA0D;AAG1D;;;;GAIG;AACH,MAAM,WAAY,SAAQ,mCAAmD;IAE3E;QAEE,KAAK,CAAC,MAAM,CAAC,CAAC;IAChB,CAAC;IAED,iCAAiC;IACjC,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,UAAU,EAAqB;QAEtD,0EAA0E;QAC1E,uCAAuC;QACvC,IAAI,IAAI,CAAC,OAAO;YACd,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAE1B,IAAI,CAAC,OAAO,GAAG,IAAI,uCAAiB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAE1D,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IAC/B,CAAC;IAED,wBAAwB;IACf,KAAK,CAAC,UAAU;QAEvB,MAAM,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC;IACnC,CAAC;CACF;AAEY,QAAA,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC"}
@@ -1,6 +1,9 @@
1
1
  import { BaseDBItem, BaseUser, ModelCrudEventType, NxTypeObject } from '@nextage/nx-frame-be';
2
2
  import { SecurityLogLevel, UserCrudEventType } from './enums';
3
3
  export type NxCallback<T> = (err: Error | null, res?: T) => void;
4
+ /**
5
+ * Payload recorded by the security logger for an auditable event.
6
+ */
4
7
  export interface SecurityLogData {
5
8
  userId: string;
6
9
  module: string;
@@ -13,11 +16,18 @@ export interface EmailResult {
13
16
  success: boolean;
14
17
  statusCode?: number;
15
18
  }
19
+ /**
20
+ * Base shape for a versioned MongoDB entity with a plain-string `name`.
21
+ */
16
22
  export interface BaseEntity extends BaseDBItem {
17
23
  code?: string;
18
24
  name?: string;
19
25
  version?: number;
20
26
  }
27
+ /**
28
+ * Base shape for a versioned MongoDB entity whose `name`/`description` are
29
+ * internationalised (per-language map or plain string).
30
+ */
21
31
  export interface BaseI18nEntity extends BaseDBItem {
22
32
  code?: string;
23
33
  name?: NxTypeObject<string> | string;
@@ -1 +1 @@
1
- {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC9F,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAyB,SAAS,CAAC;AAEjF,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,KAAK,IAAI,CAAA;AAEhE,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAI,MAAM,CAAC;IACjB,MAAM,EAAI,MAAM,CAAC;IACjB,MAAM,EAAI,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAI,gBAAgB,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,CAAC,EAAG,MAAM,CAAC;IACpB,OAAO,EAAM,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAW,SAAQ,UAAU;IAC5C,IAAI,CAAC,EAAK,MAAM,CAAC;IACjB,IAAI,CAAC,EAAK,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAe,SAAQ,UAAU;IAChD,IAAI,CAAC,EAAS,MAAM,CAAC;IACrB,IAAI,CAAC,EAAS,YAAY,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;IAC5C,WAAW,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;IAC5C,OAAO,CAAC,EAAM,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,OAAO;IACtB,MAAM,EAAM,MAAM,CAAC;IACnB,IAAI,EAAQ,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAK,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAW,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,GAAG,CAAC,EAAa,MAAM,CAAC;IACxB,MAAM,CAAC,EAAU,MAAM,CAAC;IACxB,MAAM,CAAC,EAAU,MAAM,CAAC;IACxB,MAAM,CAAC,EAAU,MAAM,CAAC;IACxB,OAAO,CAAC,EAAS,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,CAAC,EAAG,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAOD,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAW,QAAQ,CAAC;IACzB,OAAO,CAAC,EAAQ,GAAG,CAAC;IACpB,OAAO,CAAC,EAAQ,kBAAkB,GAAG,iBAAiB,CAAC;IACvD,SAAS,CAAC,EAAM,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB"}
1
+ {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC9F,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAyB,SAAS,CAAC;AAEjF,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,KAAK,IAAI,CAAA;AAEhE;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAI,MAAM,CAAC;IACjB,MAAM,EAAI,MAAM,CAAC;IACjB,MAAM,EAAI,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAI,gBAAgB,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,CAAC,EAAG,MAAM,CAAC;IACpB,OAAO,EAAM,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,UAAW,SAAQ,UAAU;IAC5C,IAAI,CAAC,EAAK,MAAM,CAAC;IACjB,IAAI,CAAC,EAAK,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAe,SAAQ,UAAU;IAChD,IAAI,CAAC,EAAS,MAAM,CAAC;IACrB,IAAI,CAAC,EAAS,YAAY,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;IAC5C,WAAW,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;IAC5C,OAAO,CAAC,EAAM,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,OAAO;IACtB,MAAM,EAAM,MAAM,CAAC;IACnB,IAAI,EAAQ,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAK,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAW,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,GAAG,CAAC,EAAa,MAAM,CAAC;IACxB,MAAM,CAAC,EAAU,MAAM,CAAC;IACxB,MAAM,CAAC,EAAU,MAAM,CAAC;IACxB,MAAM,CAAC,EAAU,MAAM,CAAC;IACxB,OAAO,CAAC,EAAS,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,CAAC,EAAG,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAOD,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAW,QAAQ,CAAC;IACzB,OAAO,CAAC,EAAQ,GAAG,CAAC;IACpB,OAAO,CAAC,EAAQ,kBAAkB,GAAG,iBAAiB,CAAC;IACvD,SAAS,CAAC,EAAM,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB"}
@@ -3,9 +3,11 @@ import { Result, Schema, ValidationError } from 'express-validator';
3
3
  import { DefaultSchemaKeys } from 'express-validator/lib/middlewares/schema';
4
4
  export declare const idSchema: Schema<DefaultSchemaKeys>;
5
5
  /**
6
+ * Formats express-validator errors into the app's standard error result.
6
7
  *
7
- * @param {*} errors
8
- * @returns
8
+ * @param errors the express-validator result set
9
+ * @returns an {@link ExpressErrorResult} carrying the offending fields plus the
10
+ * `INCORRECT_DATA` response code
9
11
  */
10
12
  export declare function formatErrors(errors: Result<ValidationError>): ExpressErrorResult;
11
13
  //# sourceMappingURL=validators.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../src/routes/validators.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAmB,sBAAsB,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAoB,0CAA0C,CAAC;AAG3F,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,iBAAiB,CAE9C,CAAC;AAIF;;;;GAIG;AACF,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC,GAAG,kBAAkB,CAGjF"}
1
+ {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../src/routes/validators.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAmB,sBAAsB,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAoB,0CAA0C,CAAC;AAG3F,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,iBAAiB,CAE9C,CAAC;AAIF;;;;;;GAMG;AACF,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC,GAAG,kBAAkB,CAGjF"}
@@ -7,9 +7,11 @@ exports.idSchema = {
7
7
  id: { in: ['body', 'params', 'query'], isMongoId: true }
8
8
  };
9
9
  /**
10
+ * Formats express-validator errors into the app's standard error result.
10
11
  *
11
- * @param {*} errors
12
- * @returns
12
+ * @param errors the express-validator result set
13
+ * @returns an {@link ExpressErrorResult} carrying the offending fields plus the
14
+ * `INCORRECT_DATA` response code
13
15
  */
14
16
  function formatErrors(errors) {
15
17
  return { result: Object.assign({ fields: errors.array().map((e) => e.params) }, constants_1.RES_CODE.INCORRECT_DATA) };
@@ -1 +1 @@
1
- {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../src/routes/validators.ts"],"names":[],"mappings":";;;AAiBC,oCAGA;AAhBD,4CAA+D;AAElD,QAAA,QAAQ,GAA8B;IACjD,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE;CACzD,CAAC;AAIF;;;;GAIG;AACF,SAAgB,YAAY,CAAC,MAA+B;IAE3D,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,oBAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;AAClH,CAAC"}
1
+ {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../src/routes/validators.ts"],"names":[],"mappings":";;;AAmBC,oCAGA;AAlBD,4CAA+D;AAElD,QAAA,QAAQ,GAA8B;IACjD,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE;CACzD,CAAC;AAIF;;;;;;GAMG;AACF,SAAgB,YAAY,CAAC,MAA+B;IAE3D,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,oBAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;AAClH,CAAC"}
@@ -1,5 +1,24 @@
1
+ /**
2
+ * Password hashing helper (scrypt with a per-password random salt).
3
+ *
4
+ * Stored form is `<hashHex>.<saltHex>`; {@link Password.compare} re-derives the
5
+ * hash with the embedded salt to verify a candidate.
6
+ */
1
7
  export declare class Password {
8
+ /**
9
+ * Hashes a plaintext password with a fresh random salt.
10
+ *
11
+ * @param password the plaintext password
12
+ * @returns the stored representation `<hashHex>.<saltHex>`
13
+ */
2
14
  static toHash(password: string): Promise<string>;
15
+ /**
16
+ * Verifies a candidate password against a stored `<hash>.<salt>` value.
17
+ *
18
+ * @param storedPassword the stored `<hashHex>.<saltHex>` value
19
+ * @param suppliedPassword the plaintext candidate to check
20
+ * @returns `true` when the candidate matches
21
+ */
3
22
  static compare(storedPassword: string, suppliedPassword: string): Promise<boolean>;
4
23
  }
5
24
  //# sourceMappingURL=password.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"password.d.ts","sourceRoot":"","sources":["../../src/services/password.ts"],"names":[],"mappings":"AAKA,qBAAa,QAAQ;WAEN,MAAM,CAAC,QAAQ,EAAE,MAAM;WAQvB,OAAO,CAAC,cAAc,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM;CAMtE"}
1
+ {"version":3,"file":"password.d.ts","sourceRoot":"","sources":["../../src/services/password.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,qBAAa,QAAQ;IAEnB;;;;;OAKG;WACU,MAAM,CAAC,QAAQ,EAAE,MAAM;IAQpC;;;;;;OAMG;WACU,OAAO,CAAC,cAAc,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM;CAMtE"}
@@ -4,12 +4,31 @@ exports.Password = void 0;
4
4
  const crypto_1 = require("crypto");
5
5
  const util_1 = require("util");
6
6
  const scriptAsync = (0, util_1.promisify)(crypto_1.scrypt);
7
+ /**
8
+ * Password hashing helper (scrypt with a per-password random salt).
9
+ *
10
+ * Stored form is `<hashHex>.<saltHex>`; {@link Password.compare} re-derives the
11
+ * hash with the embedded salt to verify a candidate.
12
+ */
7
13
  class Password {
14
+ /**
15
+ * Hashes a plaintext password with a fresh random salt.
16
+ *
17
+ * @param password the plaintext password
18
+ * @returns the stored representation `<hashHex>.<saltHex>`
19
+ */
8
20
  static async toHash(password) {
9
21
  const salt = (0, crypto_1.randomBytes)(8).toString('hex');
10
22
  const buf = (await scriptAsync(password, salt, 64));
11
23
  return `${buf.toString('hex')}.${salt}`;
12
24
  }
25
+ /**
26
+ * Verifies a candidate password against a stored `<hash>.<salt>` value.
27
+ *
28
+ * @param storedPassword the stored `<hashHex>.<saltHex>` value
29
+ * @param suppliedPassword the plaintext candidate to check
30
+ * @returns `true` when the candidate matches
31
+ */
13
32
  static async compare(storedPassword, suppliedPassword) {
14
33
  const [hashedPassword, salt] = storedPassword.split('.');
15
34
  const buf = (await scriptAsync(suppliedPassword, salt, 64));
@@ -1 +1 @@
1
- {"version":3,"file":"password.js","sourceRoot":"","sources":["../../src/services/password.ts"],"names":[],"mappings":";;;AAAA,mCAA6C;AAC7C,+BAA2C;AAE3C,MAAM,WAAW,GAAG,IAAA,gBAAS,EAAC,eAAM,CAAC,CAAC;AAEtC,MAAa,QAAQ;IAEnB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAgB;QAElC,MAAM,IAAI,GAAG,IAAA,oBAAW,EAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAI,CAAC,MAAM,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,CAAW,CAAC;QAE/D,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;IAC1C,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,cAAsB,EAAE,gBAAwB;QACnE,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACzD,MAAM,GAAG,GAAsB,CAAC,MAAM,WAAW,CAAC,gBAAgB,EAAE,IAAI,EAAE,EAAE,CAAC,CAAW,CAAC;QAEzF,OAAO,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,cAAc,CAAC;IAChD,CAAC;CACF;AAhBD,4BAgBC"}
1
+ {"version":3,"file":"password.js","sourceRoot":"","sources":["../../src/services/password.ts"],"names":[],"mappings":";;;AAAA,mCAA6C;AAC7C,+BAA2C;AAE3C,MAAM,WAAW,GAAG,IAAA,gBAAS,EAAC,eAAM,CAAC,CAAC;AAEtC;;;;;GAKG;AACH,MAAa,QAAQ;IAEnB;;;;;OAKG;IACH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAgB;QAElC,MAAM,IAAI,GAAG,IAAA,oBAAW,EAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAI,CAAC,MAAM,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,CAAW,CAAC;QAE/D,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;IAC1C,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,cAAsB,EAAE,gBAAwB;QACnE,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACzD,MAAM,GAAG,GAAsB,CAAC,MAAM,WAAW,CAAC,gBAAgB,EAAE,IAAI,EAAE,EAAE,CAAC,CAAW,CAAC;QAEzF,OAAO,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,cAAc,CAAC;IAChD,CAAC;CACF;AA7BD,4BA6BC"}