@enbox/dwn-server 0.0.13 → 0.0.15
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/dist/esm/src/connection/flow-controller.d.ts +3 -3
- package/dist/esm/src/connection/flow-controller.d.ts.map +1 -1
- package/dist/esm/src/connection/flow-controller.js +17 -5
- package/dist/esm/src/connection/flow-controller.js.map +1 -1
- package/dist/esm/src/connection/socket-connection.d.ts +4 -4
- package/dist/esm/src/connection/socket-connection.d.ts.map +1 -1
- package/dist/esm/src/connection/socket-connection.js +2 -2
- package/dist/esm/src/connection/socket-connection.js.map +1 -1
- package/dist/esm/src/json-rpc-handlers/subscription/ack.d.ts +2 -2
- package/dist/esm/src/json-rpc-handlers/subscription/ack.d.ts.map +1 -1
- package/dist/esm/src/json-rpc-handlers/subscription/ack.js +17 -4
- package/dist/esm/src/json-rpc-handlers/subscription/ack.js.map +1 -1
- package/dist/esm/src/plugins/event-log-nats.d.ts +6 -2
- package/dist/esm/src/plugins/event-log-nats.d.ts.map +1 -1
- package/dist/esm/src/plugins/event-log-nats.js +148 -11
- package/dist/esm/src/plugins/event-log-nats.js.map +1 -1
- package/package.json +4 -4
- package/src/connection/flow-controller.ts +25 -8
- package/src/connection/socket-connection.ts +4 -4
- package/src/json-rpc-handlers/subscription/ack.ts +22 -5
- package/src/plugins/event-log-nats.ts +167 -12
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { SubscriptionMessage } from '@enbox/dwn-sdk-js';
|
|
2
1
|
import type { JsonRpcId, JsonRpcSuccessResponse } from '@enbox/dwn-clients';
|
|
2
|
+
import type { ProgressToken, SubscriptionMessage } from '@enbox/dwn-sdk-js';
|
|
3
3
|
/** Default maximum number of unacknowledged events before pausing delivery. */
|
|
4
4
|
export declare const DEFAULT_MAX_IN_FLIGHT = 32;
|
|
5
5
|
/** Maximum buffer size before the subscription is force-closed to prevent OOM. */
|
|
@@ -19,7 +19,7 @@ export declare class FlowController {
|
|
|
19
19
|
private readonly maxInFlight;
|
|
20
20
|
private readonly send;
|
|
21
21
|
private readonly onOverflow;
|
|
22
|
-
/** Ordered list of
|
|
22
|
+
/** Ordered list of progress tokens for events that have been sent but not yet acknowledged. */
|
|
23
23
|
private unacked;
|
|
24
24
|
/** Buffer of events waiting to be sent once the window opens. */
|
|
25
25
|
private buffer;
|
|
@@ -36,7 +36,7 @@ export declare class FlowController {
|
|
|
36
36
|
* to and including the given cursor, then flushes buffered events into the
|
|
37
37
|
* newly opened window slots.
|
|
38
38
|
*/
|
|
39
|
-
ack(cursor:
|
|
39
|
+
ack(cursor: ProgressToken): void;
|
|
40
40
|
/**
|
|
41
41
|
* Returns the number of events currently in flight (sent but unacknowledged).
|
|
42
42
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flow-controller.d.ts","sourceRoot":"","sources":["../../../../src/connection/flow-controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"flow-controller.d.ts","sourceRoot":"","sources":["../../../../src/connection/flow-controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAM5E,+EAA+E;AAC/E,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC,kFAAkF;AAClF,eAAO,MAAM,eAAe,OAAO,CAAC;AAEpC;;;;;;;;;GASG;AACH,qBAAa,cAAc;IAWvB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAb7B,+FAA+F;IAC/F,OAAO,CAAC,OAAO,CAAuB;IAEtC,iEAAiE;IACjE,OAAO,CAAC,MAAM,CAA6B;IAE3C,8DAA8D;IAC9D,OAAO,CAAC,MAAM,CAAS;gBAGJ,cAAc,EAAE,SAAS,EACzB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,CAAC,QAAQ,EAAE,sBAAsB,KAAK,IAAI,EAChD,UAAU,EAAE,MAAM,IAAI;IAGzC;;;OAGG;IACI,IAAI,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI;IAuB/C;;;;OAIG;IACI,GAAG,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAuCvC;;OAEG;IACH,IAAW,aAAa,IAAI,MAAM,CAEjC;IAED;;OAEG;IACH,IAAW,WAAW,IAAI,MAAM,CAE/B;IAED;;OAEG;IACH,OAAO,CAAC,WAAW;CAKpB"}
|
|
@@ -19,7 +19,7 @@ export class FlowController {
|
|
|
19
19
|
maxInFlight;
|
|
20
20
|
send;
|
|
21
21
|
onOverflow;
|
|
22
|
-
/** Ordered list of
|
|
22
|
+
/** Ordered list of progress tokens for events that have been sent but not yet acknowledged. */
|
|
23
23
|
unacked = [];
|
|
24
24
|
/** Buffer of events waiting to be sent once the window opens. */
|
|
25
25
|
buffer = [];
|
|
@@ -63,13 +63,25 @@ export class FlowController {
|
|
|
63
63
|
if (this.closed) {
|
|
64
64
|
return;
|
|
65
65
|
}
|
|
66
|
-
|
|
66
|
+
// Reject tokens from a different stream/epoch — these indicate a client
|
|
67
|
+
// bug or a stale reconnection with an old token domain.
|
|
68
|
+
if (this.unacked.length > 0) {
|
|
69
|
+
const expected = this.unacked[0];
|
|
70
|
+
if (cursor.streamId !== expected.streamId || cursor.epoch !== expected.epoch) {
|
|
71
|
+
log.debug(`FlowController: rejected ack with mismatched token domain for subscription ${String(this.subscriptionId)}: ` +
|
|
72
|
+
`expected streamId=${expected.streamId} epoch=${expected.epoch}, ` +
|
|
73
|
+
`got streamId=${cursor.streamId} epoch=${cursor.epoch}`);
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// Find the matching token by position + messageCid.
|
|
78
|
+
const idx = this.unacked.findIndex((t) => t.position === cursor.position && t.messageCid === cursor.messageCid);
|
|
67
79
|
if (idx === -1) {
|
|
68
|
-
// Unknown
|
|
69
|
-
log.debug(`FlowController: unknown cursor in ack for subscription ${String(this.subscriptionId)}:
|
|
80
|
+
// Unknown token — could be a stale or duplicate ack. Ignore silently.
|
|
81
|
+
log.debug(`FlowController: unknown cursor in ack for subscription ${String(this.subscriptionId)}: position=${cursor.position}`);
|
|
70
82
|
return;
|
|
71
83
|
}
|
|
72
|
-
// Remove all entries up to and including the acked
|
|
84
|
+
// Remove all entries up to and including the acked token.
|
|
73
85
|
this.unacked.splice(0, idx + 1);
|
|
74
86
|
// Flush buffered messages into the freed window slots.
|
|
75
87
|
while (this.buffer.length > 0 && this.unacked.length < this.maxInFlight) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flow-controller.js","sourceRoot":"","sources":["../../../../src/connection/flow-controller.ts"],"names":[],"mappings":"AAGA,OAAO,GAAG,MAAM,UAAU,CAAC;AAE3B,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAElE,+EAA+E;AAC/E,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAExC,kFAAkF;AAClF,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC;AAEpC;;;;;;;;;GASG;AACH,MAAM,OAAO,cAAc;IAWN;IACA;IACA;IACA;IAbnB
|
|
1
|
+
{"version":3,"file":"flow-controller.js","sourceRoot":"","sources":["../../../../src/connection/flow-controller.ts"],"names":[],"mappings":"AAGA,OAAO,GAAG,MAAM,UAAU,CAAC;AAE3B,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAElE,+EAA+E;AAC/E,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAExC,kFAAkF;AAClF,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC;AAEpC;;;;;;;;;GASG;AACH,MAAM,OAAO,cAAc;IAWN;IACA;IACA;IACA;IAbnB,+FAA+F;IACvF,OAAO,GAAoB,EAAE,CAAC;IAEtC,iEAAiE;IACzD,MAAM,GAA0B,EAAE,CAAC;IAE3C,8DAA8D;IACtD,MAAM,GAAG,KAAK,CAAC;IAEvB,YACmB,cAAyB,EACzB,WAAmB,EACnB,IAAgD,EAChD,UAAsB;QAHtB,mBAAc,GAAd,cAAc,CAAW;QACzB,gBAAW,GAAX,WAAW,CAAQ;QACnB,SAAI,GAAJ,IAAI,CAA4C;QAChD,eAAU,GAAV,UAAU,CAAY;IACtC,CAAC;IAEJ;;;OAGG;IACI,IAAI,CAAC,OAA4B;QACtC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YAC3C,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAE1B,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,eAAe,EAAE,CAAC;gBACzC,GAAG,CAAC,IAAI,CACN,oDAAoD,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI;oBACnF,gCAAgC,IAAI,CAAC,MAAM,CAAC,MAAM,aAAa,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CACtF,CAAC;gBACF,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;gBACnB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;gBACjB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;gBAClB,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;OAIG;IACI,GAAG,CAAC,MAAqB;QAC9B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO;QACT,CAAC;QAED,wEAAwE;QACxE,wDAAwD;QACxD,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACjC,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK,EAAE,CAAC;gBAC7E,GAAG,CAAC,KAAK,CACP,8EAA8E,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI;oBAC7G,qBAAqB,QAAQ,CAAC,QAAQ,UAAU,QAAQ,CAAC,KAAK,IAAI;oBAClE,gBAAgB,MAAM,CAAC,QAAQ,UAAU,MAAM,CAAC,KAAK,EAAE,CACxD,CAAC;gBACF,OAAO;YACT,CAAC;QACH,CAAC;QAED,oDAAoD;QACpD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAChC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,UAAU,KAAK,MAAM,CAAC,UAAU,CAC5E,CAAC;QACF,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;YACf,sEAAsE;YACtE,GAAG,CAAC,KAAK,CAAC,0DAA0D,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,cAAc,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YAChI,OAAO;QACT,CAAC;QAED,0DAA0D;QAC1D,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;QAEhC,uDAAuD;QACvD,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YACxE,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAG,CAAC;YACtC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,IAAW,aAAa;QACtB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,IAAW,WAAW;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC5B,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,OAA4B;QAC9C,MAAM,QAAQ,GAAG,4BAA4B,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC;QAC9F,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;CACF"}
|
|
@@ -7,7 +7,7 @@ import type { RateLimiter } from '../rate-limiter.js';
|
|
|
7
7
|
import type { RegistrationStore } from '../registration/registration-store.js';
|
|
8
8
|
import type { ServerWebSocket } from 'bun';
|
|
9
9
|
import type { WsData } from '../http-api.js';
|
|
10
|
-
import type { Dwn } from '@enbox/dwn-sdk-js';
|
|
10
|
+
import type { Dwn, ProgressToken } from '@enbox/dwn-sdk-js';
|
|
11
11
|
import type { JsonRpcId, JsonRpcSubscription } from '@enbox/dwn-clients';
|
|
12
12
|
/**
|
|
13
13
|
* SocketConnection handles a WebSocket connection to a DWN using JSON RPC.
|
|
@@ -57,10 +57,10 @@ export declare class SocketConnection {
|
|
|
57
57
|
*/
|
|
58
58
|
closeSubscription(id: JsonRpcId): Promise<void>;
|
|
59
59
|
/**
|
|
60
|
-
* Acknowledges subscription events up to the given
|
|
61
|
-
* flow-control window for the subscription.
|
|
60
|
+
* Acknowledges subscription events up to the given progress token, advancing
|
|
61
|
+
* the flow-control window for the subscription.
|
|
62
62
|
*/
|
|
63
|
-
ackSubscription(id: JsonRpcId, cursor:
|
|
63
|
+
ackSubscription(id: JsonRpcId, cursor: ProgressToken): void;
|
|
64
64
|
/**
|
|
65
65
|
* Closes the existing connection and cleans up any listeners or subscriptions.
|
|
66
66
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socket-connection.d.ts","sourceRoot":"","sources":["../../../../src/connection/socket-connection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAE/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,KAAK,CAAC;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EAAE,GAAG,
|
|
1
|
+
{"version":3,"file":"socket-connection.d.ts","sourceRoot":"","sources":["../../../../src/connection/socket-connection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAE/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,KAAK,CAAC;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EAAE,GAAG,EAAkB,aAAa,EAAuB,MAAM,mBAAmB,CAAC;AACjG,OAAO,KAAK,EAAwB,SAAS,EAAmC,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAchI;;;;;;;GAOG;AACH,qBAAa,gBAAgB;IAazB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,eAAe,CAAC;IACxB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,WAAW,CAAC;IACpB,OAAO,CAAC,UAAU,CAAC;IACnB,OAAO,CAAC,iBAAiB,CAAC;IAC1B,OAAO,CAAC,YAAY,CAAC;IACrB,OAAO,CAAC,iBAAiB,CAAC;IAC1B,OAAO,CAAC,qBAAqB,CAAC;IArBhC,uEAAuE;IACvE,SAAgB,EAAE,EAAE,MAAM,CAAY;IAEtC,+EAA+E;IAC/E,SAAgB,WAAW,EAAE,MAAM,CAAc;IAEjD,OAAO,CAAC,iBAAiB,CAAiC;IAC1D,OAAO,CAAC,aAAa,CAAkD;IACvE,OAAO,CAAC,eAAe,CAA6C;IACpE,OAAO,CAAC,OAAO,CAAU;gBAGf,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,EAC/B,GAAG,EAAE,GAAG,EACR,eAAe,CAAC,EAAE,MAAM,IAAI,EAC5B,WAAW,GAAE,MAA8B,EAC3C,WAAW,CAAC,EAAE,WAAW,EACzB,UAAU,CAAC,EAAE,UAAU,EACvB,iBAAiB,CAAC,EAAE,iBAAiB,EACrC,YAAY,CAAC,EAAE,eAAe,EAC9B,iBAAiB,CAAC,EAAE,WAAW,EAC/B,qBAAqB,CAAC,EAAE,oBAAoB,EAAE;IAexD;;OAEG;IACH,IAAI,IAAI,IAAI;IAIZ;;OAEG;IACH,eAAe,CAAC,EAAE,EAAE,SAAS,GAAG,OAAO;IAIvC;;;OAGG;IACG,eAAe,CAAC,YAAY,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAWvE;;;;OAIG;IACG,iBAAiB,CAAC,EAAE,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAcrD;;;OAGG;IACH,eAAe,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI;IAO3D;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB5B;;OAEG;IACG,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAMxC;;;OAGG;IACG,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmChD;;OAEG;IACH,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IAED;;OAEG;IACH,UAAU,IAAI,uBAAuB;IAiBrC;;OAEG;IACH,OAAO,CAAC,IAAI;IAIZ;;;;;OAKG;IACH,OAAO,CAAC,yBAAyB;IAsBjC;;OAEG;YACW,mBAAmB;CA4BlC"}
|
|
@@ -94,8 +94,8 @@ export class SocketConnection {
|
|
|
94
94
|
this.flowControllers.delete(id);
|
|
95
95
|
}
|
|
96
96
|
/**
|
|
97
|
-
* Acknowledges subscription events up to the given
|
|
98
|
-
* flow-control window for the subscription.
|
|
97
|
+
* Acknowledges subscription events up to the given progress token, advancing
|
|
98
|
+
* the flow-control window for the subscription.
|
|
99
99
|
*/
|
|
100
100
|
ackSubscription(id, cursor) {
|
|
101
101
|
const fc = this.flowControllers.get(id);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socket-connection.js","sourceRoot":"","sources":["../../../../src/connection/socket-connection.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"socket-connection.js","sourceRoot":"","sources":["../../../../src/connection/socket-connection.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import type { JsonRpcHandler } from '../../lib/json-rpc-router.js';
|
|
2
2
|
/**
|
|
3
3
|
* Handles `rpc.ack` — acknowledges receipt of subscription events up to the
|
|
4
|
-
* given
|
|
4
|
+
* given progress token, advancing the per-subscription flow-control window.
|
|
5
5
|
*
|
|
6
6
|
* Request shape:
|
|
7
7
|
* ```json
|
|
8
8
|
* {
|
|
9
9
|
* "jsonrpc": "2.0",
|
|
10
10
|
* "method": "rpc.ack",
|
|
11
|
-
* "params": { "cursor": "
|
|
11
|
+
* "params": { "cursor": { "streamId": "...", "epoch": "...", "position": "...", "messageCid": "..." } },
|
|
12
12
|
* "subscription": { "id": "<subscription-id>" }
|
|
13
13
|
* }
|
|
14
14
|
* ```
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ack.d.ts","sourceRoot":"","sources":["../../../../../src/json-rpc-handlers/subscription/ack.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ack.d.ts","sourceRoot":"","sources":["../../../../../src/json-rpc-handlers/subscription/ack.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAEV,cAAc,EACf,MAAM,8BAA8B,CAAC;AAkBtC;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,qBAAqB,EAAE,cAoCnC,CAAC"}
|
|
@@ -1,15 +1,28 @@
|
|
|
1
1
|
import { v4 as uuidv4 } from 'uuid';
|
|
2
2
|
import { createJsonRpcErrorResponse, createJsonRpcSuccessResponse, JsonRpcErrorCodes } from '@enbox/dwn-clients';
|
|
3
|
+
/**
|
|
4
|
+
* Validates that a value is a well-formed {@link ProgressToken}.
|
|
5
|
+
*/
|
|
6
|
+
function isProgressToken(value) {
|
|
7
|
+
if (typeof value !== 'object' || value === null) {
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
const obj = value;
|
|
11
|
+
return typeof obj.streamId === 'string' && obj.streamId !== '' &&
|
|
12
|
+
typeof obj.epoch === 'string' && obj.epoch !== '' &&
|
|
13
|
+
typeof obj.position === 'string' && obj.position !== '' &&
|
|
14
|
+
typeof obj.messageCid === 'string' && obj.messageCid !== '';
|
|
15
|
+
}
|
|
3
16
|
/**
|
|
4
17
|
* Handles `rpc.ack` — acknowledges receipt of subscription events up to the
|
|
5
|
-
* given
|
|
18
|
+
* given progress token, advancing the per-subscription flow-control window.
|
|
6
19
|
*
|
|
7
20
|
* Request shape:
|
|
8
21
|
* ```json
|
|
9
22
|
* {
|
|
10
23
|
* "jsonrpc": "2.0",
|
|
11
24
|
* "method": "rpc.ack",
|
|
12
|
-
* "params": { "cursor": "
|
|
25
|
+
* "params": { "cursor": { "streamId": "...", "epoch": "...", "position": "...", "messageCid": "..." } },
|
|
13
26
|
* "subscription": { "id": "<subscription-id>" }
|
|
14
27
|
* }
|
|
15
28
|
* ```
|
|
@@ -29,8 +42,8 @@ export const handleSubscriptionAck = async (jsonRpcRequest, context) => {
|
|
|
29
42
|
}
|
|
30
43
|
const { id: subscriptionId } = jsonRpcRequest.subscription;
|
|
31
44
|
const { cursor } = (jsonRpcRequest.params ?? {});
|
|
32
|
-
if (cursor
|
|
33
|
-
const jsonRpcResponse = createJsonRpcErrorResponse(requestId, JsonRpcErrorCodes.InvalidParams, 'params.cursor is required and must be a
|
|
45
|
+
if (!isProgressToken(cursor)) {
|
|
46
|
+
const jsonRpcResponse = createJsonRpcErrorResponse(requestId, JsonRpcErrorCodes.InvalidParams, 'params.cursor is required and must be a ProgressToken object with streamId, epoch, position, and messageCid');
|
|
34
47
|
return { jsonRpcResponse };
|
|
35
48
|
}
|
|
36
49
|
const { socketConnection } = context;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ack.js","sourceRoot":"","sources":["../../../../../src/json-rpc-handlers/subscription/ack.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ack.js","sourceRoot":"","sources":["../../../../../src/json-rpc-handlers/subscription/ack.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAQpC,OAAO,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEjH;;GAEG;AACH,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,OAAO,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,KAAK,EAAE;QAC5D,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,IAAI,GAAG,CAAC,KAAK,KAAK,EAAE;QACjD,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,KAAK,EAAE;QACvD,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,IAAI,GAAG,CAAC,UAAU,KAAK,EAAE,CAAC;AAChE,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAmB,KAAK,EACxD,cAAc,EACd,OAAO,EACP,EAAE;IACF,MAAM,SAAS,GAAG,cAAc,CAAC,EAAE,IAAI,MAAM,EAAE,CAAC;IAEhD,IAAI,OAAO,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;QAC3C,MAAM,eAAe,GAAG,0BAA0B,CAChD,SAAS,EAAE,iBAAiB,CAAC,cAAc,EAAE,kCAAkC,CAChF,CAAC;QACF,OAAO,EAAE,eAAe,EAAE,CAAC;IAC7B,CAAC;IAED,IAAI,cAAc,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QAC9C,MAAM,eAAe,GAAG,0BAA0B,CAChD,SAAS,EAAE,iBAAiB,CAAC,aAAa,EAAE,mCAAmC,CAChF,CAAC;QACF,OAAO,EAAE,eAAe,EAAE,CAAC;IAC7B,CAAC;IAED,MAAM,EAAE,EAAE,EAAE,cAAc,EAAE,GAAG,cAAc,CAAC,YAAiC,CAAC;IAChF,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,cAAc,CAAC,MAAM,IAAI,EAAE,CAAyB,CAAC;IAEzE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,MAAM,eAAe,GAAG,0BAA0B,CAChD,SAAS,EAAE,iBAAiB,CAAC,aAAa,EAC1C,6GAA6G,CAC9G,CAAC;QACF,OAAO,EAAE,eAAe,EAAE,CAAC;IAC7B,CAAC;IAED,MAAM,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC;IACrC,gBAAgB,CAAC,eAAe,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAEzD,MAAM,eAAe,GAAG,4BAA4B,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IAC1G,OAAO,EAAE,eAAe,EAAqB,CAAC;AAChD,CAAC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { EventLog, EventLogReadOptions, EventLogReadResult, EventLogSubscribeOptions, EventSubscription, KeyValues, MessageEvent, SubscriptionListener } from '@enbox/dwn-sdk-js';
|
|
1
|
+
import type { EventLog, EventLogReadOptions, EventLogReadResult, EventLogSubscribeOptions, EventSubscription, KeyValues, MessageEvent, ProgressToken, SubscriptionListener } from '@enbox/dwn-sdk-js';
|
|
2
2
|
/**
|
|
3
3
|
* Distributed {@link EventLog} implementation backed by NATS JetStream.
|
|
4
4
|
*
|
|
@@ -17,9 +17,13 @@ export default class NatsEventLog implements EventLog {
|
|
|
17
17
|
constructor();
|
|
18
18
|
open(): Promise<void>;
|
|
19
19
|
close(): Promise<void>;
|
|
20
|
-
emit(tenant: string, event: MessageEvent, indexes: KeyValues): Promise<
|
|
20
|
+
emit(tenant: string, event: MessageEvent, indexes: KeyValues, messageCid: string): Promise<ProgressToken | undefined>;
|
|
21
21
|
read(tenant: string, options?: EventLogReadOptions): Promise<EventLogReadResult>;
|
|
22
22
|
subscribe(tenant: string, id: string, listener: SubscriptionListener, options?: EventLogSubscribeOptions): Promise<EventSubscription>;
|
|
23
|
+
getReplayBounds(tenant: string): Promise<{
|
|
24
|
+
oldest: ProgressToken;
|
|
25
|
+
latest: ProgressToken;
|
|
26
|
+
} | undefined>;
|
|
23
27
|
trim(tenant: string, olderThan: number | string): Promise<void>;
|
|
24
28
|
}
|
|
25
29
|
//# sourceMappingURL=event-log-nats.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-log-nats.d.ts","sourceRoot":"","sources":["../../../../src/plugins/event-log-nats.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAiB,mBAAmB,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,iBAAiB,EAAU,SAAS,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"event-log-nats.d.ts","sourceRoot":"","sources":["../../../../src/plugins/event-log-nats.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAiB,mBAAmB,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,iBAAiB,EAAU,SAAS,EAAE,YAAY,EAAsC,aAAa,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAiJjQ;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,OAAO,OAAO,YAAa,YAAW,QAAQ;;;IAqBtC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAwFtB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAWrH,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA+EpF,SAAS,CACpB,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,oBAAoB,EAC9B,OAAO,CAAC,EAAE,wBAAwB,GACjC,OAAO,CAAC,iBAAiB,CAAC;IAoHhB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,aAAa,CAAC;QAAC,MAAM,EAAE,aAAa,CAAA;KAAE,GAAG,SAAS,CAAC;IA6DtG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CA2D7E"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import log from 'loglevel';
|
|
2
|
+
import { DwnError, DwnErrorCode } from '@enbox/dwn-sdk-js';
|
|
2
3
|
import { connect } from '@nats-io/transport-node';
|
|
3
4
|
import { AckPolicy, DeliverPolicy, jetstream, jetstreamManager } from '@nats-io/jetstream';
|
|
4
5
|
function loadConfig() {
|
|
@@ -121,6 +122,11 @@ export default class NatsEventLog {
|
|
|
121
122
|
#jsm;
|
|
122
123
|
/** Active subscription consumers, keyed by consumer name. */
|
|
123
124
|
#activeConsumers = new Map();
|
|
125
|
+
/**
|
|
126
|
+
* Epoch for this EventLog instance. Stable as long as the JetStream stream exists.
|
|
127
|
+
* Generated once at `open()` from the stream's creation timestamp.
|
|
128
|
+
*/
|
|
129
|
+
#epoch = '';
|
|
124
130
|
constructor() {
|
|
125
131
|
this.#config = loadConfig();
|
|
126
132
|
}
|
|
@@ -135,6 +141,9 @@ export default class NatsEventLog {
|
|
|
135
141
|
this.#jsm = await jetstreamManager(this.#nc);
|
|
136
142
|
// Ensure the stream exists (idempotent — update if it already exists).
|
|
137
143
|
await this.#ensureStream();
|
|
144
|
+
// Derive a stable epoch from the stream creation time.
|
|
145
|
+
const streamInfo = await this.#jsm.streams.info(this.#config.streamName);
|
|
146
|
+
this.#epoch = streamInfo.created ?? crypto.randomUUID();
|
|
138
147
|
log.info(`NatsEventLog: connected to ${servers.join(', ')}, stream '${this.#config.streamName}' ready`);
|
|
139
148
|
}
|
|
140
149
|
async close() {
|
|
@@ -157,18 +166,81 @@ export default class NatsEventLog {
|
|
|
157
166
|
this.#jsm = undefined;
|
|
158
167
|
}
|
|
159
168
|
}
|
|
169
|
+
/**
|
|
170
|
+
* Derives a stable streamId from the JetStream stream name and tenant subject.
|
|
171
|
+
*/
|
|
172
|
+
async #getStreamId(tenant) {
|
|
173
|
+
const input = `${this.#config.streamName}/${this.#tenantSubject(tenant)}`;
|
|
174
|
+
const bytes = new TextEncoder().encode(input);
|
|
175
|
+
const hashBuffer = await crypto.subtle.digest('SHA-256', bytes);
|
|
176
|
+
const hashArray = new Uint8Array(hashBuffer);
|
|
177
|
+
return Array.from(hashArray.slice(0, 8), (b) => b.toString(16).padStart(2, '0')).join('');
|
|
178
|
+
}
|
|
179
|
+
async #buildToken(tenant, seq, messageCid) {
|
|
180
|
+
return {
|
|
181
|
+
streamId: await this.#getStreamId(tenant),
|
|
182
|
+
epoch: this.#epoch,
|
|
183
|
+
position: String(seq),
|
|
184
|
+
messageCid,
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Validates a cursor against the current NatsEventLog state.
|
|
189
|
+
* Throws `DwnError(EventLogProgressGap)` if the cursor cannot be resumed.
|
|
190
|
+
*/
|
|
191
|
+
async #validateCursor(tenant, cursor) {
|
|
192
|
+
const expectedStreamId = await this.#getStreamId(tenant);
|
|
193
|
+
let reason;
|
|
194
|
+
if (cursor.streamId !== expectedStreamId) {
|
|
195
|
+
reason = 'stream_mismatch';
|
|
196
|
+
}
|
|
197
|
+
else if (cursor.epoch !== this.#epoch) {
|
|
198
|
+
reason = 'epoch_mismatch';
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
// Check if position is within replay bounds using BigInt
|
|
202
|
+
// for safe handling of NATS sequences beyond Number.MAX_SAFE_INTEGER.
|
|
203
|
+
const bounds = await this.getReplayBounds(tenant);
|
|
204
|
+
if (bounds !== undefined) {
|
|
205
|
+
const cursorSeq = BigInt(cursor.position);
|
|
206
|
+
const oldestSeq = BigInt(bounds.oldest.position);
|
|
207
|
+
if (cursorSeq < oldestSeq - 1n) {
|
|
208
|
+
reason = 'token_too_old';
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
return; // Valid.
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
return; // No events — vacuously valid.
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
const bounds = await this.getReplayBounds(tenant);
|
|
219
|
+
const gapInfo = {
|
|
220
|
+
requested: cursor,
|
|
221
|
+
oldestAvailable: bounds?.oldest ?? cursor,
|
|
222
|
+
latestAvailable: bounds?.latest ?? cursor,
|
|
223
|
+
reason,
|
|
224
|
+
};
|
|
225
|
+
const error = new DwnError(DwnErrorCode.EventLogProgressGap, `progress token gap: ${reason}`);
|
|
226
|
+
error.gapInfo = gapInfo;
|
|
227
|
+
throw error;
|
|
228
|
+
}
|
|
160
229
|
// ---- emit ----------------------------------------------------------------
|
|
161
|
-
async emit(tenant, event, indexes) {
|
|
230
|
+
async emit(tenant, event, indexes, messageCid) {
|
|
162
231
|
this.#assertOpen();
|
|
163
232
|
const subject = this.#tenantSubject(tenant);
|
|
164
233
|
const data = encodePayload({ event, indexes });
|
|
165
234
|
const ack = await this.#js.publish(subject, data);
|
|
166
|
-
return
|
|
235
|
+
return this.#buildToken(tenant, ack.seq, messageCid);
|
|
167
236
|
}
|
|
168
237
|
// ---- read ----------------------------------------------------------------
|
|
169
238
|
async read(tenant, options = {}) {
|
|
170
239
|
this.#assertOpen();
|
|
171
240
|
const { cursor, limit, filters } = options;
|
|
241
|
+
if (cursor !== undefined) {
|
|
242
|
+
await this.#validateCursor(tenant, cursor);
|
|
243
|
+
}
|
|
172
244
|
const subject = this.#tenantSubject(tenant);
|
|
173
245
|
// Create a one-shot ordered consumer for the read.
|
|
174
246
|
const consumerOpts = {
|
|
@@ -177,7 +249,7 @@ export default class NatsEventLog {
|
|
|
177
249
|
};
|
|
178
250
|
if (cursor !== undefined) {
|
|
179
251
|
consumerOpts.deliver_policy = DeliverPolicy.StartSequence;
|
|
180
|
-
consumerOpts.opt_start_seq = Number(cursor) + 1;
|
|
252
|
+
consumerOpts.opt_start_seq = Number(cursor.position) + 1;
|
|
181
253
|
}
|
|
182
254
|
else {
|
|
183
255
|
consumerOpts.deliver_policy = DeliverPolicy.All;
|
|
@@ -185,7 +257,8 @@ export default class NatsEventLog {
|
|
|
185
257
|
const consumer = await this.#jsm.consumers.add(this.#config.streamName, consumerOpts);
|
|
186
258
|
const maxResults = limit ?? Number.MAX_SAFE_INTEGER;
|
|
187
259
|
const events = [];
|
|
188
|
-
let
|
|
260
|
+
let lastSeq;
|
|
261
|
+
let lastMessageCid;
|
|
189
262
|
try {
|
|
190
263
|
const messages = await this.#js.consumers.get(this.#config.streamName, consumer.name);
|
|
191
264
|
const iter = await messages.fetch({ max_messages: maxResults, expires: 2_000 });
|
|
@@ -202,7 +275,9 @@ export default class NatsEventLog {
|
|
|
202
275
|
event: payload.event,
|
|
203
276
|
indexes: payload.indexes,
|
|
204
277
|
});
|
|
205
|
-
|
|
278
|
+
lastSeq = msg.seq;
|
|
279
|
+
// Extract messageCid from the event's message if available.
|
|
280
|
+
lastMessageCid = payload.indexes['messageCid'] ?? '';
|
|
206
281
|
if (events.length >= maxResults) {
|
|
207
282
|
break;
|
|
208
283
|
}
|
|
@@ -217,9 +292,13 @@ export default class NatsEventLog {
|
|
|
217
292
|
// May already be cleaned up.
|
|
218
293
|
}
|
|
219
294
|
}
|
|
295
|
+
if (lastSeq !== undefined) {
|
|
296
|
+
const lastToken = await this.#buildToken(tenant, lastSeq, lastMessageCid ?? '');
|
|
297
|
+
return { events, cursor: lastToken };
|
|
298
|
+
}
|
|
220
299
|
return {
|
|
221
300
|
events,
|
|
222
|
-
cursor
|
|
301
|
+
cursor,
|
|
223
302
|
};
|
|
224
303
|
}
|
|
225
304
|
// ---- subscribe -----------------------------------------------------------
|
|
@@ -227,6 +306,10 @@ export default class NatsEventLog {
|
|
|
227
306
|
this.#assertOpen();
|
|
228
307
|
const subject = this.#tenantSubject(tenant);
|
|
229
308
|
const { cursor, filters } = options ?? {};
|
|
309
|
+
// Validate cursor before subscribing.
|
|
310
|
+
if (cursor !== undefined) {
|
|
311
|
+
await this.#validateCursor(tenant, cursor);
|
|
312
|
+
}
|
|
230
313
|
// Build the consumer config.
|
|
231
314
|
const consumerName = `sub-${id}`;
|
|
232
315
|
const consumerOpts = {
|
|
@@ -237,7 +320,7 @@ export default class NatsEventLog {
|
|
|
237
320
|
};
|
|
238
321
|
if (cursor !== undefined) {
|
|
239
322
|
consumerOpts.deliver_policy = DeliverPolicy.StartSequence;
|
|
240
|
-
consumerOpts.opt_start_seq = Number(cursor) + 1;
|
|
323
|
+
consumerOpts.opt_start_seq = Number(cursor.position) + 1;
|
|
241
324
|
}
|
|
242
325
|
else {
|
|
243
326
|
consumerOpts.deliver_policy = DeliverPolicy.New;
|
|
@@ -265,13 +348,14 @@ export default class NatsEventLog {
|
|
|
265
348
|
msg.ack();
|
|
266
349
|
continue;
|
|
267
350
|
}
|
|
268
|
-
const
|
|
269
|
-
|
|
351
|
+
const msgCid = payload.indexes['messageCid'] ?? '';
|
|
352
|
+
const eventToken = await this.#buildToken(tenant, msg.seq, msgCid);
|
|
353
|
+
listener({ type: 'event', cursor: eventToken, event: payload.event });
|
|
270
354
|
msg.ack();
|
|
271
355
|
// EOSE detection: when pending reaches 0, all stored events have been
|
|
272
356
|
// delivered and we transition to live mode.
|
|
273
357
|
if (!sentEose && msg.info.pending === 0) {
|
|
274
|
-
listener({ type: 'eose', cursor:
|
|
358
|
+
listener({ type: 'eose', cursor: eventToken });
|
|
275
359
|
sentEose = true;
|
|
276
360
|
}
|
|
277
361
|
}
|
|
@@ -295,7 +379,7 @@ export default class NatsEventLog {
|
|
|
295
379
|
}
|
|
296
380
|
try {
|
|
297
381
|
const info = await this.#jsm.consumers.info(this.#config.streamName, consumerName);
|
|
298
|
-
if (info.num_pending === 0 && info.delivered.stream_seq <= Number(cursor)) {
|
|
382
|
+
if (info.num_pending === 0 && info.delivered.stream_seq <= Number(cursor.position)) {
|
|
299
383
|
listener({ type: 'eose', cursor });
|
|
300
384
|
}
|
|
301
385
|
}
|
|
@@ -319,6 +403,59 @@ export default class NatsEventLog {
|
|
|
319
403
|
},
|
|
320
404
|
};
|
|
321
405
|
}
|
|
406
|
+
// ---- getReplayBounds ------------------------------------------------------
|
|
407
|
+
async getReplayBounds(tenant) {
|
|
408
|
+
this.#assertOpen();
|
|
409
|
+
const subject = this.#tenantSubject(tenant);
|
|
410
|
+
// Get stream info to find first/last sequence for this subject.
|
|
411
|
+
const streamInfo = await this.#jsm.streams.info(this.#config.streamName, { subjects_filter: subject });
|
|
412
|
+
const firstSeq = streamInfo.state.first_seq;
|
|
413
|
+
const lastSeq = streamInfo.state.last_seq;
|
|
414
|
+
if (lastSeq === 0 || firstSeq > lastSeq) {
|
|
415
|
+
return undefined;
|
|
416
|
+
}
|
|
417
|
+
// Read boundary messages to extract their real messageCid values.
|
|
418
|
+
// Uses a one-shot ordered consumer to fetch a single message at a given sequence.
|
|
419
|
+
const readBoundaryCid = async (seq) => {
|
|
420
|
+
let consumerName;
|
|
421
|
+
try {
|
|
422
|
+
const consumer = await this.#jsm.consumers.add(this.#config.streamName, {
|
|
423
|
+
filter_subject: subject,
|
|
424
|
+
ack_policy: AckPolicy.None,
|
|
425
|
+
deliver_policy: DeliverPolicy.StartSequence,
|
|
426
|
+
opt_start_seq: seq,
|
|
427
|
+
});
|
|
428
|
+
consumerName = consumer.name;
|
|
429
|
+
const handle = await this.#js.consumers.get(this.#config.streamName, consumerName);
|
|
430
|
+
const iter = await handle.fetch({ max_messages: 1, expires: 2_000 });
|
|
431
|
+
for await (const msg of iter) {
|
|
432
|
+
const payload = decodePayload(msg.data);
|
|
433
|
+
const cid = payload?.indexes?.['messageCid'];
|
|
434
|
+
if (cid && cid !== '') {
|
|
435
|
+
return cid;
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
catch {
|
|
440
|
+
// Fall through to deterministic placeholder.
|
|
441
|
+
}
|
|
442
|
+
finally {
|
|
443
|
+
if (consumerName) {
|
|
444
|
+
try {
|
|
445
|
+
await this.#jsm.consumers.delete(this.#config.streamName, consumerName);
|
|
446
|
+
}
|
|
447
|
+
catch { /* best effort */ }
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
// Deterministic placeholder if the message could not be read.
|
|
451
|
+
return `boundary-seq-${seq}`;
|
|
452
|
+
};
|
|
453
|
+
const oldestCid = await readBoundaryCid(firstSeq);
|
|
454
|
+
const latestCid = await readBoundaryCid(lastSeq);
|
|
455
|
+
const oldest = await this.#buildToken(tenant, firstSeq, oldestCid);
|
|
456
|
+
const latest = await this.#buildToken(tenant, lastSeq, latestCid);
|
|
457
|
+
return { oldest, latest };
|
|
458
|
+
}
|
|
322
459
|
// ---- trim ----------------------------------------------------------------
|
|
323
460
|
async trim(tenant, olderThan) {
|
|
324
461
|
this.#assertOpen();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-log-nats.js","sourceRoot":"","sources":["../../../../src/plugins/event-log-nats.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"event-log-nats.js","sourceRoot":"","sources":["../../../../src/plugins/event-log-nats.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@enbox/dwn-server",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.15",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"files": [
|
|
7
7
|
"dist",
|
|
@@ -33,9 +33,9 @@
|
|
|
33
33
|
"@enbox/common": "0.1.0",
|
|
34
34
|
"@enbox/crypto": "0.1.0",
|
|
35
35
|
"@enbox/dids": "0.1.0",
|
|
36
|
-
"@enbox/dwn-clients": "0.2.
|
|
37
|
-
"@enbox/dwn-sdk-js": "0.
|
|
38
|
-
"@enbox/dwn-sql-store": "0.0.
|
|
36
|
+
"@enbox/dwn-clients": "0.2.5",
|
|
37
|
+
"@enbox/dwn-sdk-js": "0.3.1",
|
|
38
|
+
"@enbox/dwn-sql-store": "0.0.16",
|
|
39
39
|
"@nats-io/jetstream": "3.3.1",
|
|
40
40
|
"@nats-io/transport-node": "3.3.1",
|
|
41
41
|
"@simplewebauthn/server": "13.2.3",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { SubscriptionMessage } from '@enbox/dwn-sdk-js';
|
|
2
1
|
import type { JsonRpcId, JsonRpcSuccessResponse } from '@enbox/dwn-clients';
|
|
2
|
+
import type { ProgressToken, SubscriptionMessage } from '@enbox/dwn-sdk-js';
|
|
3
3
|
|
|
4
4
|
import log from 'loglevel';
|
|
5
5
|
|
|
@@ -22,8 +22,8 @@ export const MAX_BUFFER_SIZE = 1000;
|
|
|
22
22
|
* memory growth.
|
|
23
23
|
*/
|
|
24
24
|
export class FlowController {
|
|
25
|
-
/** Ordered list of
|
|
26
|
-
private unacked:
|
|
25
|
+
/** Ordered list of progress tokens for events that have been sent but not yet acknowledged. */
|
|
26
|
+
private unacked: ProgressToken[] = [];
|
|
27
27
|
|
|
28
28
|
/** Buffer of events waiting to be sent once the window opens. */
|
|
29
29
|
private buffer: SubscriptionMessage[] = [];
|
|
@@ -70,19 +70,36 @@ export class FlowController {
|
|
|
70
70
|
* to and including the given cursor, then flushes buffered events into the
|
|
71
71
|
* newly opened window slots.
|
|
72
72
|
*/
|
|
73
|
-
public ack(cursor:
|
|
73
|
+
public ack(cursor: ProgressToken): void {
|
|
74
74
|
if (this.closed) {
|
|
75
75
|
return;
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
-
|
|
78
|
+
// Reject tokens from a different stream/epoch — these indicate a client
|
|
79
|
+
// bug or a stale reconnection with an old token domain.
|
|
80
|
+
if (this.unacked.length > 0) {
|
|
81
|
+
const expected = this.unacked[0];
|
|
82
|
+
if (cursor.streamId !== expected.streamId || cursor.epoch !== expected.epoch) {
|
|
83
|
+
log.debug(
|
|
84
|
+
`FlowController: rejected ack with mismatched token domain for subscription ${String(this.subscriptionId)}: ` +
|
|
85
|
+
`expected streamId=${expected.streamId} epoch=${expected.epoch}, ` +
|
|
86
|
+
`got streamId=${cursor.streamId} epoch=${cursor.epoch}`
|
|
87
|
+
);
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// Find the matching token by position + messageCid.
|
|
93
|
+
const idx = this.unacked.findIndex(
|
|
94
|
+
(t) => t.position === cursor.position && t.messageCid === cursor.messageCid
|
|
95
|
+
);
|
|
79
96
|
if (idx === -1) {
|
|
80
|
-
// Unknown
|
|
81
|
-
log.debug(`FlowController: unknown cursor in ack for subscription ${String(this.subscriptionId)}:
|
|
97
|
+
// Unknown token — could be a stale or duplicate ack. Ignore silently.
|
|
98
|
+
log.debug(`FlowController: unknown cursor in ack for subscription ${String(this.subscriptionId)}: position=${cursor.position}`);
|
|
82
99
|
return;
|
|
83
100
|
}
|
|
84
101
|
|
|
85
|
-
// Remove all entries up to and including the acked
|
|
102
|
+
// Remove all entries up to and including the acked token.
|
|
86
103
|
this.unacked.splice(0, idx + 1);
|
|
87
104
|
|
|
88
105
|
// Flush buffered messages into the freed window slots.
|
|
@@ -8,7 +8,7 @@ import type { RegistrationStore } from '../registration/registration-store.js';
|
|
|
8
8
|
import type { RequestContext } from '../lib/json-rpc-router.js';
|
|
9
9
|
import type { ServerWebSocket } from 'bun';
|
|
10
10
|
import type { WsData } from '../http-api.js';
|
|
11
|
-
import type { Dwn, GenericMessage, SubscriptionMessage } from '@enbox/dwn-sdk-js';
|
|
11
|
+
import type { Dwn, GenericMessage, ProgressToken, SubscriptionMessage } from '@enbox/dwn-sdk-js';
|
|
12
12
|
import type { JsonRpcErrorResponse, JsonRpcId, JsonRpcRequest, JsonRpcResponse, JsonRpcSubscription } from '@enbox/dwn-clients';
|
|
13
13
|
|
|
14
14
|
import log from 'loglevel';
|
|
@@ -117,10 +117,10 @@ export class SocketConnection {
|
|
|
117
117
|
}
|
|
118
118
|
|
|
119
119
|
/**
|
|
120
|
-
* Acknowledges subscription events up to the given
|
|
121
|
-
* flow-control window for the subscription.
|
|
120
|
+
* Acknowledges subscription events up to the given progress token, advancing
|
|
121
|
+
* the flow-control window for the subscription.
|
|
122
122
|
*/
|
|
123
|
-
ackSubscription(id: JsonRpcId, cursor:
|
|
123
|
+
ackSubscription(id: JsonRpcId, cursor: ProgressToken): void {
|
|
124
124
|
const fc = this.flowControllers.get(id);
|
|
125
125
|
if (fc) {
|
|
126
126
|
fc.ack(cursor);
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { ProgressToken } from '@enbox/dwn-sdk-js';
|
|
2
|
+
|
|
1
3
|
import { v4 as uuidv4 } from 'uuid';
|
|
2
4
|
|
|
3
5
|
import type { JsonRpcId } from '@enbox/dwn-clients';
|
|
@@ -8,16 +10,30 @@ import type {
|
|
|
8
10
|
|
|
9
11
|
import { createJsonRpcErrorResponse, createJsonRpcSuccessResponse, JsonRpcErrorCodes } from '@enbox/dwn-clients';
|
|
10
12
|
|
|
13
|
+
/**
|
|
14
|
+
* Validates that a value is a well-formed {@link ProgressToken}.
|
|
15
|
+
*/
|
|
16
|
+
function isProgressToken(value: unknown): value is ProgressToken {
|
|
17
|
+
if (typeof value !== 'object' || value === null) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
const obj = value as Record<string, unknown>;
|
|
21
|
+
return typeof obj.streamId === 'string' && obj.streamId !== '' &&
|
|
22
|
+
typeof obj.epoch === 'string' && obj.epoch !== '' &&
|
|
23
|
+
typeof obj.position === 'string' && obj.position !== '' &&
|
|
24
|
+
typeof obj.messageCid === 'string' && obj.messageCid !== '';
|
|
25
|
+
}
|
|
26
|
+
|
|
11
27
|
/**
|
|
12
28
|
* Handles `rpc.ack` — acknowledges receipt of subscription events up to the
|
|
13
|
-
* given
|
|
29
|
+
* given progress token, advancing the per-subscription flow-control window.
|
|
14
30
|
*
|
|
15
31
|
* Request shape:
|
|
16
32
|
* ```json
|
|
17
33
|
* {
|
|
18
34
|
* "jsonrpc": "2.0",
|
|
19
35
|
* "method": "rpc.ack",
|
|
20
|
-
* "params": { "cursor": "
|
|
36
|
+
* "params": { "cursor": { "streamId": "...", "epoch": "...", "position": "...", "messageCid": "..." } },
|
|
21
37
|
* "subscription": { "id": "<subscription-id>" }
|
|
22
38
|
* }
|
|
23
39
|
* ```
|
|
@@ -46,11 +62,12 @@ export const handleSubscriptionAck: JsonRpcHandler = async (
|
|
|
46
62
|
}
|
|
47
63
|
|
|
48
64
|
const { id: subscriptionId } = jsonRpcRequest.subscription as { id: JsonRpcId };
|
|
49
|
-
const { cursor } = (jsonRpcRequest.params ?? {}) as { cursor?:
|
|
65
|
+
const { cursor } = (jsonRpcRequest.params ?? {}) as { cursor?: unknown };
|
|
50
66
|
|
|
51
|
-
if (cursor
|
|
67
|
+
if (!isProgressToken(cursor)) {
|
|
52
68
|
const jsonRpcResponse = createJsonRpcErrorResponse(
|
|
53
|
-
requestId, JsonRpcErrorCodes.InvalidParams,
|
|
69
|
+
requestId, JsonRpcErrorCodes.InvalidParams,
|
|
70
|
+
'params.cursor is required and must be a ProgressToken object with streamId, epoch, position, and messageCid'
|
|
54
71
|
);
|
|
55
72
|
return { jsonRpcResponse };
|
|
56
73
|
}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import type { NatsConnection } from '@nats-io/transport-node';
|
|
2
2
|
import type { ConsumerMessages, JetStreamClient, JetStreamManager } from '@nats-io/jetstream';
|
|
3
|
-
import type { EventLog, EventLogEntry, EventLogReadOptions, EventLogReadResult, EventLogSubscribeOptions, EventSubscription, Filter, KeyValues, MessageEvent, SubscriptionListener } from '@enbox/dwn-sdk-js';
|
|
3
|
+
import type { EventLog, EventLogEntry, EventLogReadOptions, EventLogReadResult, EventLogSubscribeOptions, EventSubscription, Filter, KeyValues, MessageEvent, ProgressGapInfo, ProgressGapReason, ProgressToken, SubscriptionListener } from '@enbox/dwn-sdk-js';
|
|
4
4
|
|
|
5
5
|
import log from 'loglevel';
|
|
6
6
|
|
|
7
|
+
import { DwnError, DwnErrorCode } from '@enbox/dwn-sdk-js';
|
|
8
|
+
|
|
7
9
|
import { connect } from '@nats-io/transport-node';
|
|
8
10
|
import { AckPolicy, DeliverPolicy, jetstream, jetstreamManager } from '@nats-io/jetstream';
|
|
9
11
|
|
|
@@ -165,6 +167,12 @@ export default class NatsEventLog implements EventLog {
|
|
|
165
167
|
/** Active subscription consumers, keyed by consumer name. */
|
|
166
168
|
#activeConsumers: Map<string, { messages?: ConsumerMessages; stopped: boolean }> = new Map();
|
|
167
169
|
|
|
170
|
+
/**
|
|
171
|
+
* Epoch for this EventLog instance. Stable as long as the JetStream stream exists.
|
|
172
|
+
* Generated once at `open()` from the stream's creation timestamp.
|
|
173
|
+
*/
|
|
174
|
+
#epoch: string = '';
|
|
175
|
+
|
|
168
176
|
constructor() {
|
|
169
177
|
this.#config = loadConfig();
|
|
170
178
|
}
|
|
@@ -184,6 +192,10 @@ export default class NatsEventLog implements EventLog {
|
|
|
184
192
|
// Ensure the stream exists (idempotent — update if it already exists).
|
|
185
193
|
await this.#ensureStream();
|
|
186
194
|
|
|
195
|
+
// Derive a stable epoch from the stream creation time.
|
|
196
|
+
const streamInfo = await this.#jsm.streams.info(this.#config.streamName);
|
|
197
|
+
this.#epoch = streamInfo.created ?? crypto.randomUUID();
|
|
198
|
+
|
|
187
199
|
log.info(`NatsEventLog: connected to ${servers.join(', ')}, stream '${this.#config.streamName}' ready`);
|
|
188
200
|
}
|
|
189
201
|
|
|
@@ -208,15 +220,80 @@ export default class NatsEventLog implements EventLog {
|
|
|
208
220
|
}
|
|
209
221
|
}
|
|
210
222
|
|
|
223
|
+
/**
|
|
224
|
+
* Derives a stable streamId from the JetStream stream name and tenant subject.
|
|
225
|
+
*/
|
|
226
|
+
async #getStreamId(tenant: string): Promise<string> {
|
|
227
|
+
const input = `${this.#config.streamName}/${this.#tenantSubject(tenant)}`;
|
|
228
|
+
const bytes = new TextEncoder().encode(input);
|
|
229
|
+
const hashBuffer = await crypto.subtle.digest('SHA-256', bytes);
|
|
230
|
+
const hashArray = new Uint8Array(hashBuffer);
|
|
231
|
+
return Array.from(hashArray.slice(0, 8), (b: number) => b.toString(16).padStart(2, '0')).join('');
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
async #buildToken(tenant: string, seq: number, messageCid: string): Promise<ProgressToken> {
|
|
235
|
+
return {
|
|
236
|
+
streamId : await this.#getStreamId(tenant),
|
|
237
|
+
epoch : this.#epoch,
|
|
238
|
+
position : String(seq),
|
|
239
|
+
messageCid,
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* Validates a cursor against the current NatsEventLog state.
|
|
245
|
+
* Throws `DwnError(EventLogProgressGap)` if the cursor cannot be resumed.
|
|
246
|
+
*/
|
|
247
|
+
async #validateCursor(tenant: string, cursor: ProgressToken): Promise<void> {
|
|
248
|
+
const expectedStreamId = await this.#getStreamId(tenant);
|
|
249
|
+
|
|
250
|
+
let reason: ProgressGapReason;
|
|
251
|
+
if (cursor.streamId !== expectedStreamId) {
|
|
252
|
+
reason = 'stream_mismatch';
|
|
253
|
+
} else if (cursor.epoch !== this.#epoch) {
|
|
254
|
+
reason = 'epoch_mismatch';
|
|
255
|
+
} else {
|
|
256
|
+
// Check if position is within replay bounds using BigInt
|
|
257
|
+
// for safe handling of NATS sequences beyond Number.MAX_SAFE_INTEGER.
|
|
258
|
+
const bounds = await this.getReplayBounds(tenant);
|
|
259
|
+
if (bounds !== undefined) {
|
|
260
|
+
const cursorSeq = BigInt(cursor.position);
|
|
261
|
+
const oldestSeq = BigInt(bounds.oldest.position);
|
|
262
|
+
if (cursorSeq < oldestSeq - 1n) {
|
|
263
|
+
reason = 'token_too_old';
|
|
264
|
+
} else {
|
|
265
|
+
return; // Valid.
|
|
266
|
+
}
|
|
267
|
+
} else {
|
|
268
|
+
return; // No events — vacuously valid.
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
const bounds = await this.getReplayBounds(tenant);
|
|
273
|
+
const gapInfo: ProgressGapInfo = {
|
|
274
|
+
requested : cursor,
|
|
275
|
+
oldestAvailable : bounds?.oldest ?? cursor,
|
|
276
|
+
latestAvailable : bounds?.latest ?? cursor,
|
|
277
|
+
reason,
|
|
278
|
+
};
|
|
279
|
+
|
|
280
|
+
const error = new DwnError(
|
|
281
|
+
DwnErrorCode.EventLogProgressGap,
|
|
282
|
+
`progress token gap: ${reason}`
|
|
283
|
+
);
|
|
284
|
+
(error as any).gapInfo = gapInfo;
|
|
285
|
+
throw error;
|
|
286
|
+
}
|
|
287
|
+
|
|
211
288
|
// ---- emit ----------------------------------------------------------------
|
|
212
289
|
|
|
213
|
-
public async emit(tenant: string, event: MessageEvent, indexes: KeyValues): Promise<
|
|
290
|
+
public async emit(tenant: string, event: MessageEvent, indexes: KeyValues, messageCid: string): Promise<ProgressToken | undefined> {
|
|
214
291
|
this.#assertOpen();
|
|
215
292
|
|
|
216
293
|
const subject = this.#tenantSubject(tenant);
|
|
217
294
|
const data = encodePayload({ event, indexes });
|
|
218
295
|
const ack = await this.#js!.publish(subject, data);
|
|
219
|
-
return
|
|
296
|
+
return this.#buildToken(tenant, ack.seq, messageCid);
|
|
220
297
|
}
|
|
221
298
|
|
|
222
299
|
// ---- read ----------------------------------------------------------------
|
|
@@ -225,6 +302,9 @@ export default class NatsEventLog implements EventLog {
|
|
|
225
302
|
this.#assertOpen();
|
|
226
303
|
|
|
227
304
|
const { cursor, limit, filters } = options;
|
|
305
|
+
if (cursor !== undefined) {
|
|
306
|
+
await this.#validateCursor(tenant, cursor);
|
|
307
|
+
}
|
|
228
308
|
const subject = this.#tenantSubject(tenant);
|
|
229
309
|
|
|
230
310
|
// Create a one-shot ordered consumer for the read.
|
|
@@ -235,7 +315,7 @@ export default class NatsEventLog implements EventLog {
|
|
|
235
315
|
|
|
236
316
|
if (cursor !== undefined) {
|
|
237
317
|
consumerOpts.deliver_policy = DeliverPolicy.StartSequence;
|
|
238
|
-
consumerOpts.opt_start_seq = Number(cursor) + 1;
|
|
318
|
+
consumerOpts.opt_start_seq = Number(cursor.position) + 1;
|
|
239
319
|
} else {
|
|
240
320
|
consumerOpts.deliver_policy = DeliverPolicy.All;
|
|
241
321
|
}
|
|
@@ -244,7 +324,8 @@ export default class NatsEventLog implements EventLog {
|
|
|
244
324
|
const maxResults = limit ?? Number.MAX_SAFE_INTEGER;
|
|
245
325
|
|
|
246
326
|
const events: EventLogEntry[] = [];
|
|
247
|
-
let
|
|
327
|
+
let lastSeq: number | undefined;
|
|
328
|
+
let lastMessageCid: string | undefined;
|
|
248
329
|
|
|
249
330
|
try {
|
|
250
331
|
const messages = await this.#js!.consumers.get(this.#config.streamName, consumer.name);
|
|
@@ -266,7 +347,9 @@ export default class NatsEventLog implements EventLog {
|
|
|
266
347
|
indexes : payload.indexes,
|
|
267
348
|
});
|
|
268
349
|
|
|
269
|
-
|
|
350
|
+
lastSeq = msg.seq;
|
|
351
|
+
// Extract messageCid from the event's message if available.
|
|
352
|
+
lastMessageCid = (payload.indexes['messageCid'] as string) ?? '';
|
|
270
353
|
|
|
271
354
|
if (events.length >= maxResults) {
|
|
272
355
|
break;
|
|
@@ -281,9 +364,14 @@ export default class NatsEventLog implements EventLog {
|
|
|
281
364
|
}
|
|
282
365
|
}
|
|
283
366
|
|
|
367
|
+
if (lastSeq !== undefined) {
|
|
368
|
+
const lastToken = await this.#buildToken(tenant, lastSeq, lastMessageCid ?? '');
|
|
369
|
+
return { events, cursor: lastToken };
|
|
370
|
+
}
|
|
371
|
+
|
|
284
372
|
return {
|
|
285
373
|
events,
|
|
286
|
-
cursor
|
|
374
|
+
cursor,
|
|
287
375
|
};
|
|
288
376
|
}
|
|
289
377
|
|
|
@@ -300,6 +388,11 @@ export default class NatsEventLog implements EventLog {
|
|
|
300
388
|
const subject = this.#tenantSubject(tenant);
|
|
301
389
|
const { cursor, filters } = options ?? {};
|
|
302
390
|
|
|
391
|
+
// Validate cursor before subscribing.
|
|
392
|
+
if (cursor !== undefined) {
|
|
393
|
+
await this.#validateCursor(tenant, cursor);
|
|
394
|
+
}
|
|
395
|
+
|
|
303
396
|
// Build the consumer config.
|
|
304
397
|
const consumerName = `sub-${id}`;
|
|
305
398
|
const consumerOpts: Record<string, unknown> = {
|
|
@@ -311,7 +404,7 @@ export default class NatsEventLog implements EventLog {
|
|
|
311
404
|
|
|
312
405
|
if (cursor !== undefined) {
|
|
313
406
|
consumerOpts.deliver_policy = DeliverPolicy.StartSequence;
|
|
314
|
-
consumerOpts.opt_start_seq = Number(cursor) + 1;
|
|
407
|
+
consumerOpts.opt_start_seq = Number(cursor.position) + 1;
|
|
315
408
|
} else {
|
|
316
409
|
consumerOpts.deliver_policy = DeliverPolicy.New;
|
|
317
410
|
}
|
|
@@ -346,14 +439,15 @@ export default class NatsEventLog implements EventLog {
|
|
|
346
439
|
continue;
|
|
347
440
|
}
|
|
348
441
|
|
|
349
|
-
const
|
|
350
|
-
|
|
442
|
+
const msgCid = (payload.indexes['messageCid'] as string) ?? '';
|
|
443
|
+
const eventToken = await this.#buildToken(tenant, msg.seq, msgCid);
|
|
444
|
+
listener({ type: 'event', cursor: eventToken, event: payload.event });
|
|
351
445
|
msg.ack();
|
|
352
446
|
|
|
353
447
|
// EOSE detection: when pending reaches 0, all stored events have been
|
|
354
448
|
// delivered and we transition to live mode.
|
|
355
449
|
if (!sentEose && msg.info.pending === 0) {
|
|
356
|
-
listener({ type: 'eose', cursor:
|
|
450
|
+
listener({ type: 'eose', cursor: eventToken });
|
|
357
451
|
sentEose = true;
|
|
358
452
|
}
|
|
359
453
|
}
|
|
@@ -378,7 +472,7 @@ export default class NatsEventLog implements EventLog {
|
|
|
378
472
|
}
|
|
379
473
|
try {
|
|
380
474
|
const info = await this.#jsm!.consumers.info(this.#config.streamName, consumerName);
|
|
381
|
-
if (info.num_pending === 0 && info.delivered.stream_seq <= Number(cursor)) {
|
|
475
|
+
if (info.num_pending === 0 && info.delivered.stream_seq <= Number(cursor.position)) {
|
|
382
476
|
listener({ type: 'eose', cursor });
|
|
383
477
|
}
|
|
384
478
|
} catch {
|
|
@@ -402,6 +496,67 @@ export default class NatsEventLog implements EventLog {
|
|
|
402
496
|
};
|
|
403
497
|
}
|
|
404
498
|
|
|
499
|
+
// ---- getReplayBounds ------------------------------------------------------
|
|
500
|
+
|
|
501
|
+
public async getReplayBounds(tenant: string): Promise<{ oldest: ProgressToken; latest: ProgressToken } | undefined> {
|
|
502
|
+
this.#assertOpen();
|
|
503
|
+
|
|
504
|
+
const subject = this.#tenantSubject(tenant);
|
|
505
|
+
|
|
506
|
+
// Get stream info to find first/last sequence for this subject.
|
|
507
|
+
const streamInfo = await this.#jsm!.streams.info(this.#config.streamName, { subjects_filter: subject });
|
|
508
|
+
const firstSeq = streamInfo.state.first_seq;
|
|
509
|
+
const lastSeq = streamInfo.state.last_seq;
|
|
510
|
+
|
|
511
|
+
if (lastSeq === 0 || firstSeq > lastSeq) {
|
|
512
|
+
return undefined;
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
// Read boundary messages to extract their real messageCid values.
|
|
516
|
+
// Uses a one-shot ordered consumer to fetch a single message at a given sequence.
|
|
517
|
+
const readBoundaryCid = async (seq: number): Promise<string> => {
|
|
518
|
+
let consumerName: string | undefined;
|
|
519
|
+
try {
|
|
520
|
+
const consumer = await this.#jsm!.consumers.add(this.#config.streamName, {
|
|
521
|
+
filter_subject : subject,
|
|
522
|
+
ack_policy : AckPolicy.None,
|
|
523
|
+
deliver_policy : DeliverPolicy.StartSequence,
|
|
524
|
+
opt_start_seq : seq,
|
|
525
|
+
});
|
|
526
|
+
consumerName = consumer.name;
|
|
527
|
+
|
|
528
|
+
const handle = await this.#js!.consumers.get(this.#config.streamName, consumerName);
|
|
529
|
+
const iter = await handle.fetch({ max_messages: 1, expires: 2_000 });
|
|
530
|
+
|
|
531
|
+
for await (const msg of iter) {
|
|
532
|
+
const payload = decodePayload(msg.data);
|
|
533
|
+
const cid = (payload?.indexes?.['messageCid'] as string);
|
|
534
|
+
if (cid && cid !== '') {
|
|
535
|
+
return cid;
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
} catch {
|
|
539
|
+
// Fall through to deterministic placeholder.
|
|
540
|
+
} finally {
|
|
541
|
+
if (consumerName) {
|
|
542
|
+
try {
|
|
543
|
+
await this.#jsm!.consumers.delete(this.#config.streamName, consumerName);
|
|
544
|
+
} catch { /* best effort */ }
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
// Deterministic placeholder if the message could not be read.
|
|
548
|
+
return `boundary-seq-${seq}`;
|
|
549
|
+
};
|
|
550
|
+
|
|
551
|
+
const oldestCid = await readBoundaryCid(firstSeq);
|
|
552
|
+
const latestCid = await readBoundaryCid(lastSeq);
|
|
553
|
+
|
|
554
|
+
const oldest = await this.#buildToken(tenant, firstSeq, oldestCid);
|
|
555
|
+
const latest = await this.#buildToken(tenant, lastSeq, latestCid);
|
|
556
|
+
|
|
557
|
+
return { oldest, latest };
|
|
558
|
+
}
|
|
559
|
+
|
|
405
560
|
// ---- trim ----------------------------------------------------------------
|
|
406
561
|
|
|
407
562
|
public async trim(tenant: string, olderThan: number | string): Promise<void> {
|