@nextage/era-lib 1.0.186 → 1.0.188
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/constants.d.ts +11 -0
- package/build/constants.d.ts.map +1 -1
- package/build/constants.js +11 -0
- package/build/constants.js.map +1 -1
- package/build/enums.d.ts +3 -0
- package/build/enums.d.ts.map +1 -1
- package/build/enums.js +3 -0
- package/build/enums.js.map +1 -1
- package/build/errors/app-error.d.ts +6 -0
- package/build/errors/app-error.d.ts.map +1 -1
- package/build/errors/app-error.js +6 -0
- package/build/errors/app-error.js.map +1 -1
- package/build/events/access-revoked-publisher.d.ts +1 -1
- package/build/events/access-revoked-publisher.d.ts.map +1 -1
- package/build/events/access-revoked-publisher.js +1 -1
- package/build/events/access-revoked-publisher.js.map +1 -1
- package/build/events/{base-event.controller.d.ts → base/base-event.controller.d.ts} +3 -3
- package/build/events/base/base-event.controller.d.ts.map +1 -0
- package/build/events/{base-event.controller.js → base/base-event.controller.js} +5 -5
- package/build/events/base/base-event.controller.js.map +1 -0
- package/build/events/{base-listener.d.ts → base/base-listener.d.ts} +2 -2
- package/build/events/base/base-listener.d.ts.map +1 -0
- package/build/events/base/base-listener.interfaces.d.ts.map +1 -0
- package/build/events/base/base-listener.interfaces.js.map +1 -0
- package/build/events/base/base-listener.js.map +1 -0
- package/build/events/{base-msg-listener.d.ts → base/base-msg-listener.d.ts} +15 -6
- package/build/events/base/base-msg-listener.d.ts.map +1 -0
- package/build/events/{base-msg-listener.js → base/base-msg-listener.js} +14 -5
- package/build/events/base/base-msg-listener.js.map +1 -0
- package/build/events/base/base-msg-publisher.d.ts +20 -0
- package/build/events/base/base-msg-publisher.d.ts.map +1 -0
- package/build/events/base/base-msg-publisher.js +24 -0
- package/build/events/base/base-msg-publisher.js.map +1 -0
- package/build/events/{base-nats-listener.d.ts → base/base-nats-listener.d.ts} +14 -9
- package/build/events/base/base-nats-listener.d.ts.map +1 -0
- package/build/events/{base-nats-listener.js → base/base-nats-listener.js} +15 -10
- package/build/events/base/base-nats-listener.js.map +1 -0
- package/build/events/base/base-nats-publisher.d.ts +23 -0
- package/build/events/base/base-nats-publisher.d.ts.map +1 -0
- package/build/events/base/base-nats-publisher.js +32 -0
- package/build/events/base/base-nats-publisher.js.map +1 -0
- package/build/events/base/base-publisher.d.ts +34 -0
- package/build/events/base/base-publisher.d.ts.map +1 -0
- package/build/events/base/base-publisher.js +41 -0
- package/build/events/base/base-publisher.js.map +1 -0
- package/build/events/dlq-manager.d.ts +1 -1
- package/build/events/dlq-manager.d.ts.map +1 -1
- package/build/events/event-subscription.d.ts +1 -1
- package/build/events/event-subscription.d.ts.map +1 -1
- package/build/events/event-subscription.js +2 -2
- package/build/events/event-subscription.js.map +1 -1
- package/build/events/index.d.ts +13 -11
- package/build/events/index.d.ts.map +1 -1
- package/build/events/index.js +14 -11
- package/build/events/index.js.map +1 -1
- package/build/events/interfaces.d.ts +22 -1
- package/build/events/interfaces.d.ts.map +1 -1
- package/build/events/revocation-listener.d.ts +1 -1
- package/build/events/revocation-listener.d.ts.map +1 -1
- package/build/events/transport/base-client-wrapper.d.ts +44 -0
- package/build/events/transport/base-client-wrapper.d.ts.map +1 -0
- package/build/events/transport/base-client-wrapper.js +47 -0
- package/build/events/transport/base-client-wrapper.js.map +1 -0
- package/build/events/transport/msg-client-manager.d.ts +37 -0
- package/build/events/transport/msg-client-manager.d.ts.map +1 -0
- package/build/events/{msg-client-manager.js → transport/msg-client-manager.js} +18 -39
- package/build/events/transport/msg-client-manager.js.map +1 -0
- package/build/events/transport/msg-wrapper.d.ts +15 -0
- package/build/events/transport/msg-wrapper.d.ts.map +1 -0
- package/build/events/transport/msg-wrapper.js +24 -0
- package/build/events/transport/msg-wrapper.js.map +1 -0
- package/build/events/{nats-client-manager.d.ts → transport/nats-client-manager.d.ts} +31 -18
- package/build/events/transport/nats-client-manager.d.ts.map +1 -0
- package/build/events/{nats-client-manager.js → transport/nats-client-manager.js} +53 -31
- package/build/events/transport/nats-client-manager.js.map +1 -0
- package/build/events/transport/nats-wrapper.d.ts +16 -0
- package/build/events/transport/nats-wrapper.d.ts.map +1 -0
- package/build/events/transport/nats-wrapper.js +30 -0
- package/build/events/transport/nats-wrapper.js.map +1 -0
- package/build/events/types/index.d.ts +1 -0
- package/build/events/types/index.d.ts.map +1 -1
- package/build/events/types/index.js +1 -0
- package/build/events/types/index.js.map +1 -1
- package/build/events/types/transport.constants.d.ts +18 -0
- package/build/events/types/transport.constants.d.ts.map +1 -0
- package/build/events/types/transport.constants.js +23 -0
- package/build/events/types/transport.constants.js.map +1 -0
- package/build/interfaces.d.ts +10 -0
- package/build/interfaces.d.ts.map +1 -1
- package/build/routes/validators.d.ts +4 -2
- package/build/routes/validators.d.ts.map +1 -1
- package/build/routes/validators.js +4 -2
- package/build/routes/validators.js.map +1 -1
- package/build/services/password.d.ts +19 -0
- package/build/services/password.d.ts.map +1 -1
- package/build/services/password.js +19 -0
- package/build/services/password.js.map +1 -1
- package/build/utils/functs.d.ts +54 -23
- package/build/utils/functs.d.ts.map +1 -1
- package/build/utils/functs.js +60 -25
- package/build/utils/functs.js.map +1 -1
- package/package.json +1 -1
- package/build/events/base-event.controller.d.ts.map +0 -1
- package/build/events/base-event.controller.js.map +0 -1
- package/build/events/base-listener.d.ts.map +0 -1
- package/build/events/base-listener.interfaces.d.ts.map +0 -1
- package/build/events/base-listener.interfaces.js.map +0 -1
- package/build/events/base-listener.js.map +0 -1
- package/build/events/base-msg-listener.d.ts.map +0 -1
- package/build/events/base-msg-listener.js.map +0 -1
- package/build/events/base-nats-listener.d.ts.map +0 -1
- package/build/events/base-nats-listener.js.map +0 -1
- package/build/events/base-nats-publisher.d.ts +0 -20
- package/build/events/base-nats-publisher.d.ts.map +0 -1
- package/build/events/base-nats-publisher.js +0 -35
- package/build/events/base-nats-publisher.js.map +0 -1
- package/build/events/base-publisher.d.ts +0 -18
- package/build/events/base-publisher.d.ts.map +0 -1
- package/build/events/base-publisher.js +0 -28
- package/build/events/base-publisher.js.map +0 -1
- package/build/events/msg-client-manager.d.ts +0 -38
- package/build/events/msg-client-manager.d.ts.map +0 -1
- package/build/events/msg-client-manager.js.map +0 -1
- package/build/events/msg-wrapper.d.ts +0 -10
- package/build/events/msg-wrapper.d.ts.map +0 -1
- package/build/events/msg-wrapper.js +0 -18
- package/build/events/msg-wrapper.js.map +0 -1
- package/build/events/nats-client-manager.d.ts.map +0 -1
- package/build/events/nats-client-manager.js.map +0 -1
- package/build/events/nats-client-manager.old.d.ts +0 -49
- package/build/events/nats-client-manager.old.d.ts.map +0 -1
- package/build/events/nats-client-manager.old.js +0 -108
- package/build/events/nats-client-manager.old.js.map +0 -1
- package/build/events/nats-wrapper.d.ts +0 -14
- package/build/events/nats-wrapper.d.ts.map +0 -1
- package/build/events/nats-wrapper.js +0 -24
- package/build/events/nats-wrapper.js.map +0 -1
- /package/build/events/{base-listener.interfaces.d.ts → base/base-listener.interfaces.d.ts} +0 -0
- /package/build/events/{base-listener.interfaces.js → base/base-listener.interfaces.js} +0 -0
- /package/build/events/{base-listener.js → base/base-listener.js} +0 -0
|
@@ -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 '
|
|
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 '
|
|
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,21 @@ export declare class NatsClientManager extends EventEmitter implements MsgClient
|
|
|
17
16
|
get jetStream(): JetStreamClient;
|
|
18
17
|
get jetStreamManager(): JetStreamManager;
|
|
19
18
|
/**
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
19
|
+
* Durable consumer name for a `(queueGroupName, subject)` pair. Shared by
|
|
20
|
+
* `subscribe`/`unsubscribe` so both sides resolve the SAME name (the subject is
|
|
21
|
+
* sanitised into the name because NATS consumer names cannot contain `.`/`*`/`>`).
|
|
23
22
|
*/
|
|
24
|
-
|
|
23
|
+
private consumerNameFor;
|
|
24
|
+
/** Local `subs` map key for a consumer on a stream. */
|
|
25
|
+
private subKey;
|
|
25
26
|
/**
|
|
26
|
-
*
|
|
27
|
+
* Connect to NATS and initialise the JetStream client + manager from the
|
|
28
|
+
* `servers`/`clientName` passed at construction. No-op when no server is
|
|
29
|
+
* configured (msg-only mode), so the transport can stay optional.
|
|
30
|
+
*/
|
|
31
|
+
connect(): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* Close the NATS connection, if open.
|
|
27
34
|
*/
|
|
28
35
|
disconnect(): Promise<void>;
|
|
29
36
|
/**
|
|
@@ -39,9 +46,14 @@ export declare class NatsClientManager extends EventEmitter implements MsgClient
|
|
|
39
46
|
maxMsgs?: number;
|
|
40
47
|
}): Promise<void>;
|
|
41
48
|
/**
|
|
49
|
+
* Create (or reuse) a durable, shared-name consumer on `streamName` filtered to
|
|
50
|
+
* `subject`, load-balancing one copy of each message across service instances
|
|
51
|
+
* (work-queue). Recreates the consumer if an existing one has a stale filter.
|
|
42
52
|
*
|
|
43
|
-
* @param
|
|
44
|
-
* @param
|
|
53
|
+
* @param subject concrete subject filter
|
|
54
|
+
* @param streamName stream carrying that subject
|
|
55
|
+
* @param queueGroupName shared consumer name (durable) → work-queue group
|
|
56
|
+
* @param options optional `maxDeliver` / `ackWait` overrides
|
|
45
57
|
*/
|
|
46
58
|
subscribe(subject: string, streamName: string, queueGroupName: string, options?: EventSubOptions): Promise<Consumer>;
|
|
47
59
|
/**
|
|
@@ -64,23 +76,24 @@ export declare class NatsClientManager extends EventEmitter implements MsgClient
|
|
|
64
76
|
lookbackMs?: number;
|
|
65
77
|
}): Promise<Consumer>;
|
|
66
78
|
/**
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
* @param {*} data
|
|
79
|
+
* Publish `payload` on `subject` via JetStream (default timeout 5s, overridable
|
|
80
|
+
* through `options`), awaiting the server ack.
|
|
70
81
|
*/
|
|
71
82
|
publish(subject: string, payload: string, options?: NxObject): Promise<void>;
|
|
72
83
|
/**
|
|
73
|
-
*
|
|
74
|
-
*
|
|
84
|
+
* Delete the consumer for `subject` locally and from the JetStream manager. The
|
|
85
|
+
* durable consumer name is recomputed from `(subject, queueGroupName)` so it
|
|
86
|
+
* matches the one created by {@link subscribe} (both the local `subs` key and
|
|
87
|
+
* the JSM consumer name).
|
|
75
88
|
*/
|
|
76
89
|
unsubscribe(subject: string, streamName: string, queueGroupName: string): Promise<void>;
|
|
77
90
|
/**
|
|
78
|
-
*
|
|
79
|
-
* @param streamName
|
|
91
|
+
* Delete every consumer on `streamName` (best-effort, logs per-consumer errors).
|
|
80
92
|
*/
|
|
81
93
|
cleanAllConsumers(streamName: string): Promise<void>;
|
|
82
94
|
/**
|
|
83
|
-
*
|
|
95
|
+
* Delete all consumers across all streams (maintenance helper); consumers are
|
|
96
|
+
* recreated on the next app start.
|
|
84
97
|
*/
|
|
85
98
|
resetAndRecreateConsumers(): Promise<void>;
|
|
86
99
|
}
|
|
@@ -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;AAM1F,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;IACH,OAAO,CAAC,eAAe;IAKvB,uDAAuD;IACvD,OAAO,CAAC,MAAM;IAKd;;;;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;;;;;OAKG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB7F;;OAEG;IACG,iBAAiB,CAAC,UAAU,EAAE,MAAM;IAqB1C;;;OAGG;IACG,yBAAyB;CAwBhC"}
|
|
@@ -1,18 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.NatsClientManager = void 0;
|
|
4
|
-
const
|
|
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
|
-
|
|
9
|
+
const transport_constants_1 = require("../types/transport.constants");
|
|
10
|
+
const transport_constants_2 = require("../types/transport.constants");
|
|
11
|
+
const transport_constants_3 = require("../types/transport.constants");
|
|
12
|
+
const transport_constants_4 = require("../types/transport.constants");
|
|
13
|
+
class NatsClientManager extends node_events_1.EventEmitter {
|
|
10
14
|
constructor(servers, clientName) {
|
|
11
15
|
super();
|
|
12
16
|
this.servers = servers;
|
|
13
17
|
this.clientName = clientName;
|
|
14
18
|
this.subs = {};
|
|
15
|
-
this.opts = {};
|
|
16
19
|
}
|
|
17
20
|
get connection() {
|
|
18
21
|
if (!this.nc)
|
|
@@ -29,11 +32,23 @@ class NatsClientManager extends ws_1.EventEmitter {
|
|
|
29
32
|
return this.jsm;
|
|
30
33
|
}
|
|
31
34
|
/**
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
+
* Durable consumer name for a `(queueGroupName, subject)` pair. Shared by
|
|
36
|
+
* `subscribe`/`unsubscribe` so both sides resolve the SAME name (the subject is
|
|
37
|
+
* sanitised into the name because NATS consumer names cannot contain `.`/`*`/`>`).
|
|
38
|
+
*/
|
|
39
|
+
consumerNameFor(subject, queueGroupName) {
|
|
40
|
+
return `${queueGroupName}_${subject.replace(/[.*>]/g, '_')}`;
|
|
41
|
+
}
|
|
42
|
+
/** Local `subs` map key for a consumer on a stream. */
|
|
43
|
+
subKey(streamName, consumerName) {
|
|
44
|
+
return `${streamName}.${consumerName}`;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Connect to NATS and initialise the JetStream client + manager from the
|
|
48
|
+
* `servers`/`clientName` passed at construction. No-op when no server is
|
|
49
|
+
* configured (msg-only mode), so the transport can stay optional.
|
|
35
50
|
*/
|
|
36
|
-
async connect(
|
|
51
|
+
async connect() {
|
|
37
52
|
if (!this.servers.length) {
|
|
38
53
|
nx_frame_be_1.APP.logger.info('📪 NATS not defined');
|
|
39
54
|
return;
|
|
@@ -41,10 +56,10 @@ class NatsClientManager extends ws_1.EventEmitter {
|
|
|
41
56
|
try {
|
|
42
57
|
this.nc = await (0, nats_1.connect)({
|
|
43
58
|
servers: this.servers,
|
|
44
|
-
name: this.clientName ??
|
|
59
|
+
name: this.clientName ?? transport_constants_1.DEFAULT_NATS_CLIENT_NAME,
|
|
45
60
|
reconnect: true,
|
|
46
|
-
maxReconnectAttempts:
|
|
47
|
-
reconnectTimeWait:
|
|
61
|
+
maxReconnectAttempts: transport_constants_1.DEFAULT_NATS_MAX_RECONNECT_ATTEMPTS,
|
|
62
|
+
reconnectTimeWait: transport_constants_2.DEFAULT_NATS_RECONNECT_TIME_WAIT_MS
|
|
48
63
|
});
|
|
49
64
|
this.js = this.nc.jetstream();
|
|
50
65
|
this.jsm = await this.nc.jetstreamManager();
|
|
@@ -63,7 +78,7 @@ class NatsClientManager extends ws_1.EventEmitter {
|
|
|
63
78
|
}
|
|
64
79
|
}
|
|
65
80
|
/**
|
|
66
|
-
*
|
|
81
|
+
* Close the NATS connection, if open.
|
|
67
82
|
*/
|
|
68
83
|
async disconnect() {
|
|
69
84
|
if (this.nc) {
|
|
@@ -80,8 +95,8 @@ class NatsClientManager extends ws_1.EventEmitter {
|
|
|
80
95
|
* survive long enough to be inspected and replayed.
|
|
81
96
|
*/
|
|
82
97
|
async createStream(streamName, subjects, opts) {
|
|
83
|
-
const maxAgeNs = (opts?.maxAgeMs ??
|
|
84
|
-
const maxMsgs = opts?.maxMsgs ??
|
|
98
|
+
const maxAgeNs = (opts?.maxAgeMs ?? transport_constants_2.DEFAULT_STREAM_MAX_AGE_MS) * transport_constants_4.NS_PER_MS; // ms → nanoseconds
|
|
99
|
+
const maxMsgs = opts?.maxMsgs ?? transport_constants_3.DEFAULT_STREAM_MAX_MSGS;
|
|
85
100
|
try {
|
|
86
101
|
await this.jsm.streams.add({
|
|
87
102
|
name: streamName,
|
|
@@ -111,15 +126,20 @@ class NatsClientManager extends ws_1.EventEmitter {
|
|
|
111
126
|
}
|
|
112
127
|
}
|
|
113
128
|
/**
|
|
129
|
+
* Create (or reuse) a durable, shared-name consumer on `streamName` filtered to
|
|
130
|
+
* `subject`, load-balancing one copy of each message across service instances
|
|
131
|
+
* (work-queue). Recreates the consumer if an existing one has a stale filter.
|
|
114
132
|
*
|
|
115
|
-
* @param
|
|
116
|
-
* @param
|
|
133
|
+
* @param subject concrete subject filter
|
|
134
|
+
* @param streamName stream carrying that subject
|
|
135
|
+
* @param queueGroupName shared consumer name (durable) → work-queue group
|
|
136
|
+
* @param options optional `maxDeliver` / `ackWait` overrides
|
|
117
137
|
*/
|
|
118
138
|
async subscribe(subject, streamName, queueGroupName, options) {
|
|
119
139
|
var _a;
|
|
120
140
|
// Crea consumer se non esiste
|
|
121
141
|
try {
|
|
122
|
-
const consumerName =
|
|
142
|
+
const consumerName = this.consumerNameFor(subject, queueGroupName);
|
|
123
143
|
const consumerConfig = {
|
|
124
144
|
name: consumerName,
|
|
125
145
|
durable_name: consumerName,
|
|
@@ -149,7 +169,7 @@ class NatsClientManager extends ws_1.EventEmitter {
|
|
|
149
169
|
// Ottieni il consumer per il consumo dei messaggi
|
|
150
170
|
const consumer = await this.js.consumers.get(streamName, consumerName);
|
|
151
171
|
(_a = this.subs)[subject] ?? (_a[subject] = {});
|
|
152
|
-
this.subs[subject][
|
|
172
|
+
this.subs[subject][this.subKey(streamName, consumerName)] = consumer;
|
|
153
173
|
nx_frame_be_1.APP.logger.info(`👂 Listening on '${subject}' with consumer '${consumerName}'`);
|
|
154
174
|
return consumer;
|
|
155
175
|
}
|
|
@@ -184,7 +204,7 @@ class NatsClientManager extends ws_1.EventEmitter {
|
|
|
184
204
|
name: consumerName,
|
|
185
205
|
ack_policy: nats_1.AckPolicy.Explicit,
|
|
186
206
|
filter_subject: subject,
|
|
187
|
-
inactive_threshold:
|
|
207
|
+
inactive_threshold: transport_constants_4.BROADCAST_CONSUMER_INACTIVE_MS * transport_constants_4.NS_PER_MS, // auto-reap when the instance dies
|
|
188
208
|
...(lookbackMs > 0
|
|
189
209
|
? { deliver_policy: nats_3.DeliverPolicy.StartTime, opt_start_time: new Date(Date.now() - lookbackMs).toISOString() }
|
|
190
210
|
: { deliver_policy: nats_3.DeliverPolicy.New }),
|
|
@@ -202,13 +222,12 @@ class NatsClientManager extends ws_1.EventEmitter {
|
|
|
202
222
|
}
|
|
203
223
|
}
|
|
204
224
|
/**
|
|
205
|
-
*
|
|
206
|
-
*
|
|
207
|
-
* @param {*} data
|
|
225
|
+
* Publish `payload` on `subject` via JetStream (default timeout 5s, overridable
|
|
226
|
+
* through `options`), awaiting the server ack.
|
|
208
227
|
*/
|
|
209
228
|
async publish(subject, payload, options) {
|
|
210
229
|
try {
|
|
211
|
-
const defaultOptions = { timeout:
|
|
230
|
+
const defaultOptions = { timeout: transport_constants_3.DEFAULT_PUBLISH_TIMEOUT_MS };
|
|
212
231
|
const publishOptions = { ...defaultOptions, ...options };
|
|
213
232
|
const ack = await this.js.publish(subject, payload, publishOptions);
|
|
214
233
|
nx_frame_be_1.APP.logger.info(`📤 Published event on [${subject}]: message: ${payload.substring(0, 30)}, stream: ${ack.stream}, seq: ${ack.seq}`);
|
|
@@ -219,24 +238,26 @@ class NatsClientManager extends ws_1.EventEmitter {
|
|
|
219
238
|
}
|
|
220
239
|
}
|
|
221
240
|
/**
|
|
222
|
-
*
|
|
223
|
-
*
|
|
241
|
+
* Delete the consumer for `subject` locally and from the JetStream manager. The
|
|
242
|
+
* durable consumer name is recomputed from `(subject, queueGroupName)` so it
|
|
243
|
+
* matches the one created by {@link subscribe} (both the local `subs` key and
|
|
244
|
+
* the JSM consumer name).
|
|
224
245
|
*/
|
|
225
246
|
async unsubscribe(subject, streamName, queueGroupName) {
|
|
247
|
+
const consumerName = this.consumerNameFor(subject, queueGroupName);
|
|
226
248
|
try {
|
|
227
249
|
// delete consumer reference from stack
|
|
228
|
-
delete this.subs[subject][
|
|
229
|
-
// delete consumer
|
|
230
|
-
await this.jsm.consumers.delete(streamName,
|
|
231
|
-
nx_frame_be_1.APP.logger.info(`🛑 Stopped and deleted consumer '${
|
|
250
|
+
delete this.subs[subject]?.[this.subKey(streamName, consumerName)];
|
|
251
|
+
// delete consumer from jetstream manager
|
|
252
|
+
await this.jsm.consumers.delete(streamName, consumerName);
|
|
253
|
+
nx_frame_be_1.APP.logger.info(`🛑 Stopped and deleted consumer '${consumerName}' for '${subject}'`);
|
|
232
254
|
}
|
|
233
255
|
catch (error) {
|
|
234
256
|
nx_frame_be_1.APP.logger.info(`🛑 Stopped listening on '${subject}' (consumer may have been already deleted)`);
|
|
235
257
|
}
|
|
236
258
|
}
|
|
237
259
|
/**
|
|
238
|
-
*
|
|
239
|
-
* @param streamName
|
|
260
|
+
* Delete every consumer on `streamName` (best-effort, logs per-consumer errors).
|
|
240
261
|
*/
|
|
241
262
|
async cleanAllConsumers(streamName) {
|
|
242
263
|
try {
|
|
@@ -257,7 +278,8 @@ class NatsClientManager extends ws_1.EventEmitter {
|
|
|
257
278
|
}
|
|
258
279
|
}
|
|
259
280
|
/**
|
|
260
|
-
*
|
|
281
|
+
* Delete all consumers across all streams (maintenance helper); consumers are
|
|
282
|
+
* recreated on the next app start.
|
|
261
283
|
*/
|
|
262
284
|
async resetAndRecreateConsumers() {
|
|
263
285
|
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"}
|
|
@@ -17,6 +17,7 @@ export * from './dlq.constants';
|
|
|
17
17
|
export * from './event-envelope.constants';
|
|
18
18
|
export * from './relay.constants';
|
|
19
19
|
export * from './revocation.constants';
|
|
20
|
+
export * from './transport.constants';
|
|
20
21
|
export * from './asset.interfaces';
|
|
21
22
|
export * from './control.interfaces';
|
|
22
23
|
export * from './dlq.interfaces';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/events/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AAExB,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AAEtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/events/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AAExB,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AAEtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AAEtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAG3C,cAAc,kBAAkB,CAAC"}
|
|
@@ -33,6 +33,7 @@ __exportStar(require("./dlq.constants"), exports);
|
|
|
33
33
|
__exportStar(require("./event-envelope.constants"), exports);
|
|
34
34
|
__exportStar(require("./relay.constants"), exports);
|
|
35
35
|
__exportStar(require("./revocation.constants"), exports);
|
|
36
|
+
__exportStar(require("./transport.constants"), exports);
|
|
36
37
|
__exportStar(require("./asset.interfaces"), exports);
|
|
37
38
|
__exportStar(require("./control.interfaces"), exports);
|
|
38
39
|
__exportStar(require("./dlq.interfaces"), exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/events/types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AAExB,wDAAsC;AACtC,gDAA8B;AAC9B,sDAAoC;AACpC,wDAAsC;AACtC,uDAAqC;AACrC,kDAAgC;AAChC,4DAA0C;AAC1C,iDAA+B;AAC/B,uDAAqC;AACrC,wDAAsC;AACtC,iDAA+B;AAC/B,oDAAkC;AAClC,wDAAsC;AAEtC,oDAAkC;AAClC,kDAAgC;AAChC,6DAA2C;AAC3C,oDAAkC;AAClC,yDAAuC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/events/types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AAExB,wDAAsC;AACtC,gDAA8B;AAC9B,sDAAoC;AACpC,wDAAsC;AACtC,uDAAqC;AACrC,kDAAgC;AAChC,4DAA0C;AAC1C,iDAA+B;AAC/B,uDAAqC;AACrC,wDAAsC;AACtC,iDAA+B;AAC/B,oDAAkC;AAClC,wDAAsC;AAEtC,oDAAkC;AAClC,kDAAgC;AAChC,6DAA2C;AAC3C,oDAAkC;AAClC,yDAAuC;AACvC,wDAAsC;AAEtC,qDAAmC;AACnC,uDAAqC;AACrC,mDAAiC;AACjC,8DAA4C;AAC5C,sDAAoC;AACpC,sDAAoC;AACpC,qDAAmC;AACnC,0DAAwC;AACxC,6DAA2C;AAC3C,sDAAoC;AACpC,6DAA2C;AAE3C,YAAY;AACZ,mDAAiC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** Fallback client name when the service does not pass one. */
|
|
2
|
+
export declare const DEFAULT_NATS_CLIENT_NAME = "nx-nats-client";
|
|
3
|
+
/** Reconnection policy for the NATS connection. */
|
|
4
|
+
export declare const DEFAULT_NATS_MAX_RECONNECT_ATTEMPTS = 10;
|
|
5
|
+
export declare const DEFAULT_NATS_RECONNECT_TIME_WAIT_MS = 2000;
|
|
6
|
+
/** Default stream retention when no override is passed to `createStream`. */
|
|
7
|
+
export declare const DEFAULT_STREAM_MAX_AGE_MS: number;
|
|
8
|
+
export declare const DEFAULT_STREAM_MAX_MSGS = 1000;
|
|
9
|
+
/** Default JetStream publish ack timeout. */
|
|
10
|
+
export declare const DEFAULT_PUBLISH_TIMEOUT_MS = 5000;
|
|
11
|
+
/**
|
|
12
|
+
* Idle window after which the server auto-reaps an ephemeral broadcast consumer
|
|
13
|
+
* (the instance died). Kept in ms here; converted to ns at the call site.
|
|
14
|
+
*/
|
|
15
|
+
export declare const BROADCAST_CONSUMER_INACTIVE_MS: number;
|
|
16
|
+
/** Nanoseconds per millisecond — JetStream durations are expressed in ns. */
|
|
17
|
+
export declare const NS_PER_MS = 1000000;
|
|
18
|
+
//# sourceMappingURL=transport.constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.constants.d.ts","sourceRoot":"","sources":["../../../src/events/types/transport.constants.ts"],"names":[],"mappings":"AAGA,+DAA+D;AAC/D,eAAO,MAAM,wBAAwB,mBAAmB,CAAC;AAEzD,mDAAmD;AACnD,eAAO,MAAM,mCAAmC,KAAK,CAAC;AACtD,eAAO,MAAM,mCAAmC,OAAQ,CAAC;AAEzD,6EAA6E;AAC7E,eAAO,MAAM,yBAAyB,QAAuB,CAAC;AAC9D,eAAO,MAAM,uBAAuB,OAAU,CAAC;AAE/C,6CAA6C;AAC7C,eAAO,MAAM,0BAA0B,OAAQ,CAAC;AAEhD;;;GAGG;AACH,eAAO,MAAM,8BAA8B,QAAiB,CAAC;AAE7D,6EAA6E;AAC7E,eAAO,MAAM,SAAS,UAAY,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// NATS transport tuning defaults, extracted from the client manager so the
|
|
3
|
+
// magic numbers live in one documented place.
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.NS_PER_MS = exports.BROADCAST_CONSUMER_INACTIVE_MS = exports.DEFAULT_PUBLISH_TIMEOUT_MS = exports.DEFAULT_STREAM_MAX_MSGS = exports.DEFAULT_STREAM_MAX_AGE_MS = exports.DEFAULT_NATS_RECONNECT_TIME_WAIT_MS = exports.DEFAULT_NATS_MAX_RECONNECT_ATTEMPTS = exports.DEFAULT_NATS_CLIENT_NAME = void 0;
|
|
6
|
+
/** Fallback client name when the service does not pass one. */
|
|
7
|
+
exports.DEFAULT_NATS_CLIENT_NAME = 'nx-nats-client';
|
|
8
|
+
/** Reconnection policy for the NATS connection. */
|
|
9
|
+
exports.DEFAULT_NATS_MAX_RECONNECT_ATTEMPTS = 10;
|
|
10
|
+
exports.DEFAULT_NATS_RECONNECT_TIME_WAIT_MS = 2000;
|
|
11
|
+
/** Default stream retention when no override is passed to `createStream`. */
|
|
12
|
+
exports.DEFAULT_STREAM_MAX_AGE_MS = 24 * 60 * 60 * 1000; // 24h
|
|
13
|
+
exports.DEFAULT_STREAM_MAX_MSGS = 1000;
|
|
14
|
+
/** Default JetStream publish ack timeout. */
|
|
15
|
+
exports.DEFAULT_PUBLISH_TIMEOUT_MS = 5000;
|
|
16
|
+
/**
|
|
17
|
+
* Idle window after which the server auto-reaps an ephemeral broadcast consumer
|
|
18
|
+
* (the instance died). Kept in ms here; converted to ns at the call site.
|
|
19
|
+
*/
|
|
20
|
+
exports.BROADCAST_CONSUMER_INACTIVE_MS = 5 * 60 * 1000; // 5min
|
|
21
|
+
/** Nanoseconds per millisecond — JetStream durations are expressed in ns. */
|
|
22
|
+
exports.NS_PER_MS = 1000000;
|
|
23
|
+
//# sourceMappingURL=transport.constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.constants.js","sourceRoot":"","sources":["../../../src/events/types/transport.constants.ts"],"names":[],"mappings":";AAAA,2EAA2E;AAC3E,8CAA8C;;;AAE9C,+DAA+D;AAClD,QAAA,wBAAwB,GAAG,gBAAgB,CAAC;AAEzD,mDAAmD;AACtC,QAAA,mCAAmC,GAAG,EAAE,CAAC;AACzC,QAAA,mCAAmC,GAAG,IAAK,CAAC;AAEzD,6EAA6E;AAChE,QAAA,yBAAyB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAK,CAAC,CAAC,MAAM;AACxD,QAAA,uBAAuB,GAAK,IAAK,CAAC;AAE/C,6CAA6C;AAChC,QAAA,0BAA0B,GAAG,IAAK,CAAC;AAEhD;;;GAGG;AACU,QAAA,8BAA8B,GAAG,CAAC,GAAG,EAAE,GAAG,IAAK,CAAC,CAAC,OAAO;AAErE,6EAA6E;AAChE,QAAA,SAAS,GAAG,OAAS,CAAC"}
|
package/build/interfaces.d.ts
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
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":";;;
|
|
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;
|
|
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;
|
|
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"}
|