@xyo-network/event-kit-statement-graph 0.1.1 → 0.1.3
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/README.md +32 -7
- package/dist/neutral/activeSourceWakeGrantAuthorizer.d.ts +18 -0
- package/dist/neutral/activeSourceWakeGrantAuthorizer.d.ts.map +1 -0
- package/dist/neutral/grantReadModel.d.ts.map +1 -1
- package/dist/neutral/handshakeCatalog.d.ts.map +1 -1
- package/dist/neutral/handshakeReadModel.d.ts.map +1 -1
- package/dist/neutral/handshakeReadModelTypes.d.ts +2 -2
- package/dist/neutral/handshakeReadModelTypes.d.ts.map +1 -1
- package/dist/neutral/index.d.ts +2 -0
- package/dist/neutral/index.d.ts.map +1 -1
- package/dist/neutral/index.mjs +130 -35
- package/dist/neutral/index.mjs.map +4 -4
- package/dist/neutral/replayCheckpoint.d.ts.map +1 -1
- package/dist/neutral/subscriptionLifecycleView.d.ts.map +1 -1
- package/package.json +13 -13
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Finalized Statement Graph replay and Event Kit handshake read models.
|
|
4
4
|
|
|
5
|
-
The package has
|
|
5
|
+
The package has four public seams:
|
|
6
6
|
|
|
7
7
|
- `createFinalizedEventKitReplayController` folds the Event Kit lifecycle
|
|
8
8
|
vocabulary from finalized XL1 blocks and hash-verified bodies;
|
|
@@ -10,7 +10,9 @@ The package has three public seams:
|
|
|
10
10
|
subscription, grant, acceptance, replacement, and revocation views from that
|
|
11
11
|
replay; and
|
|
12
12
|
- `createStatementGraphGrantReadModel` adapts a canonical Statement Graph
|
|
13
|
-
viewer to the narrower wake-admission grant port
|
|
13
|
+
viewer to the narrower wake-admission grant port; and
|
|
14
|
+
- `createActiveSourceWakeGrantAuthorizer` requires the exact active D-005
|
|
15
|
+
subscription and its exact live grant for source-aware delivery.
|
|
14
16
|
|
|
15
17
|
## Finalized replay
|
|
16
18
|
|
|
@@ -48,10 +50,10 @@ claimed objects and acceptance attachments through the datalake. The Gate 2
|
|
|
48
50
|
live rerun against that release remains the acceptance boundary.
|
|
49
51
|
|
|
50
52
|
Statement Graph `0.5.0` uses fold version 4 and scan-checkpoint format 2. Event
|
|
51
|
-
Kit's publisher-scoped outer checkpoint is also format 2.
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
53
|
+
Kit's publisher-scoped outer checkpoint is also format 2. Only the exact
|
|
54
|
+
current checkpoint and ordered Event Kit schema policy are accepted. Missing,
|
|
55
|
+
additional, reordered, or version-suffixed policy entries fail closed as
|
|
56
|
+
invalid content; no alternative-policy reader or in-place migration exists.
|
|
55
57
|
|
|
56
58
|
`status()` exposes two distinct watermarks:
|
|
57
59
|
|
|
@@ -122,7 +124,14 @@ acceptance. Phase 4 adds the resident scanner and service orchestration.
|
|
|
122
124
|
|
|
123
125
|
```ts
|
|
124
126
|
const readModel = createStatementGraphGrantReadModel({ viewer: replay.viewer() })
|
|
125
|
-
const grants =
|
|
127
|
+
const grants = createActiveSourceWakeGrantAuthorizer({
|
|
128
|
+
route,
|
|
129
|
+
publisher,
|
|
130
|
+
serviceHash,
|
|
131
|
+
grantHash,
|
|
132
|
+
viewer: readModel,
|
|
133
|
+
handshake: handshakes,
|
|
134
|
+
})
|
|
126
135
|
```
|
|
127
136
|
|
|
128
137
|
The adapter parses branded addresses and hashes rather than casting them and
|
|
@@ -136,6 +145,22 @@ claimed by the authorized controller. See
|
|
|
136
145
|
|
|
137
146
|
## Evidence boundary
|
|
138
147
|
|
|
148
|
+
For source-aware ingress, construct `createActiveSourceWakeGrantAuthorizer`
|
|
149
|
+
with `{route, publisher, serviceHash, grantHash, viewer, handshake}`. The route
|
|
150
|
+
includes `authorizationChainId`, exact `source`, canonical `filterHash`, and
|
|
151
|
+
immutable `subscriptionHash`. `viewer` is the grant read model and `handshake`
|
|
152
|
+
is the finalized handshake read model over the same pinned chain. Both must
|
|
153
|
+
identify the independently read, uncapped finalized XL1 head. The helper rejects
|
|
154
|
+
pending, expired, revoked, superseded, wrong-service, or stale bindings and will
|
|
155
|
+
not substitute another grant with the same deployment/queue scope. Existing
|
|
156
|
+
accepted subscriptions continue after advertisement retirement as D-005 allows.
|
|
157
|
+
|
|
158
|
+
Discovery and reconciliation use the single source-aware event kind,
|
|
159
|
+
`SOURCE_WAKE_EVENT_KIND`. Source identity remains explicit in the service and
|
|
160
|
+
encrypted filter; it is never inferred from the authorization chain.
|
|
161
|
+
|
|
162
|
+
## Verification scope
|
|
163
|
+
|
|
139
164
|
Offline deterministic-chain specs currently cover:
|
|
140
165
|
|
|
141
166
|
- strict checkpoint round-trip and dataset-identity rejection;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { StatementGraphGrantReadModel, WakeAdmissionRoute, WakeGrantAuthorizer } from '@xyo-network/event-kit-protocol';
|
|
2
|
+
import type { EventKitHandshakeReadModel } from './handshakeReadModelTypes.ts';
|
|
3
|
+
export interface ActiveSourceWakeGrantAuthorizerOptions {
|
|
4
|
+
readonly grantHash: string;
|
|
5
|
+
/** Finalized replay read model over the same pinned authorization chain as viewer. */
|
|
6
|
+
readonly handshake: EventKitHandshakeReadModel;
|
|
7
|
+
readonly publisher: string;
|
|
8
|
+
readonly route: WakeAdmissionRoute;
|
|
9
|
+
readonly serviceHash: string;
|
|
10
|
+
readonly viewer: StatementGraphGrantReadModel;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Production D-006 receiver authorization: one exact active D-005 subscription
|
|
14
|
+
* plus its exact still-live grant. The injected view must be caught up to the
|
|
15
|
+
* receiver's independent uncapped XL1 finalized head before admission.
|
|
16
|
+
*/
|
|
17
|
+
export declare function createActiveSourceWakeGrantAuthorizer(options: ActiveSourceWakeGrantAuthorizerOptions): WakeGrantAuthorizer;
|
|
18
|
+
//# sourceMappingURL=activeSourceWakeGrantAuthorizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activeSourceWakeGrantAuthorizer.d.ts","sourceRoot":"","sources":["../../src/activeSourceWakeGrantAuthorizer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,4BAA4B,EAC5B,kBAAkB,EAElB,mBAAmB,EACpB,MAAM,iCAAiC,CAAA;AAexC,OAAO,KAAK,EACV,0BAA0B,EAE3B,MAAM,8BAA8B,CAAA;AAErC,MAAM,WAAW,sCAAsC;IACrD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,sFAAsF;IACtF,QAAQ,CAAC,SAAS,EAAE,0BAA0B,CAAA;IAC9C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAA;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,MAAM,EAAE,4BAA4B,CAAA;CAC9C;AA4CD;;;;GAIG;AACH,wBAAgB,qCAAqC,CACnD,OAAO,EAAE,sCAAsC,GAC9C,mBAAmB,CA8DrB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grantReadModel.d.ts","sourceRoot":"","sources":["../../src/grantReadModel.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAIV,4BAA4B,EAC7B,MAAM,iCAAiC,CAAA;AAExC,OAAO,KAAK,EAEV,oBAAoB,EACrB,MAAM,yCAAyC,CAAA;
|
|
1
|
+
{"version":3,"file":"grantReadModel.d.ts","sourceRoot":"","sources":["../../src/grantReadModel.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAIV,4BAA4B,EAC7B,MAAM,iCAAiC,CAAA;AAExC,OAAO,KAAK,EAEV,oBAAoB,EACrB,MAAM,yCAAyC,CAAA;AAMhD,MAAM,WAAW,mCAAmC;IAClD;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAA;CACtC;AAED;;;;;;;;;GASG;AACH,wBAAgB,kCAAkC,CAChD,OAAO,EAAE,mCAAmC,GAC3C,4BAA4B,CAqB9B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handshakeCatalog.d.ts","sourceRoot":"","sources":["../../src/handshakeCatalog.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"handshakeCatalog.d.ts","sourceRoot":"","sources":["../../src/handshakeCatalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handshakeReadModel.d.ts","sourceRoot":"","sources":["../../src/handshakeReadModel.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"handshakeReadModel.d.ts","sourceRoot":"","sources":["../../src/handshakeReadModel.ts"],"names":[],"mappings":"AAiDA,OAAO,KAAK,EAEV,0BAA0B,EAC1B,iCAAiC,EAWlC,MAAM,8BAA8B,CAAA;AAiZrC,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,iCAAiC,GACzC,0BAA0B,CA8D5B"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { SubscriptionActivationFailureReason } from '@xyo-network/event-kit-protocol';
|
|
2
|
-
import type { EncryptedWakeSubscription,
|
|
2
|
+
import type { EncryptedWakeSubscription, PublisherEncryptionKey, PublisherService, SOURCE_WAKE_EVENT_KIND, WakeGrantObject, WakeSubscriptionAcceptance } from '@xyo-network/event-kit-schemas';
|
|
3
3
|
import type { StatementGraphViewer } from '@xyo-network/xl1-statement-graph-engine';
|
|
4
4
|
export interface HandshakeClaimEvidence {
|
|
5
5
|
readonly block: number;
|
|
@@ -116,7 +116,7 @@ export interface EventKitHandshakeReadModelOptions {
|
|
|
116
116
|
}
|
|
117
117
|
export interface PublisherHandshakeQuery {
|
|
118
118
|
readonly chainId: string;
|
|
119
|
-
readonly eventKind?: typeof
|
|
119
|
+
readonly eventKind?: typeof SOURCE_WAKE_EVENT_KIND;
|
|
120
120
|
readonly finalizedHead: number;
|
|
121
121
|
readonly publisher: string;
|
|
122
122
|
readonly serviceId?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handshakeReadModelTypes.d.ts","sourceRoot":"","sources":["../../src/handshakeReadModelTypes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mCAAmC,EAAE,MAAM,iCAAiC,CAAA;AAC1F,OAAO,KAAK,EACV,yBAAyB,EACzB,
|
|
1
|
+
{"version":3,"file":"handshakeReadModelTypes.d.ts","sourceRoot":"","sources":["../../src/handshakeReadModelTypes.ts"],"names":[],"mappings":"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"}
|
package/dist/neutral/index.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
export type { ActiveSourceWakeGrantAuthorizerOptions } from './activeSourceWakeGrantAuthorizer.ts';
|
|
2
|
+
export { createActiveSourceWakeGrantAuthorizer } from './activeSourceWakeGrantAuthorizer.ts';
|
|
1
3
|
export { createCheckpointStatementGraphViewer } from './checkpointViewer.ts';
|
|
2
4
|
export { EventKitClaimedObjectSchemas, EventKitClaimedObjectSchemaSet, } from './eventKitSchemaPolicy.ts';
|
|
3
5
|
export type { EventKitReplayCheckpointStore, FinalizedEventKitReplayController, FinalizedEventKitReplayOptions, FinalizedEventKitReplayStatus, } from './finalizedReplayController.ts';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oCAAoC,EAAE,MAAM,uBAAuB,CAAA;AAC5E,OAAO,EACL,4BAA4B,EAC5B,8BAA8B,GAC/B,MAAM,2BAA2B,CAAA;AAClC,YAAY,EACV,6BAA6B,EAC7B,iCAAiC,EACjC,8BAA8B,EAC9B,6BAA6B,GAC9B,MAAM,gCAAgC,CAAA;AACvC,OAAO,EACL,uCAAuC,EACvC,yCAAyC,GAC1C,MAAM,gCAAgC,CAAA;AACvC,YAAY,EAAE,mCAAmC,EAAE,MAAM,qBAAqB,CAAA;AAC9E,OAAO,EAAE,kCAAkC,EAAE,MAAM,qBAAqB,CAAA;AACxE,OAAO,EAAE,gCAAgC,EAAE,MAAM,yBAAyB,CAAA;AAC1E,YAAY,EACV,sBAAsB,EACtB,0BAA0B,EAC1B,iCAAiC,EACjC,0BAA0B,EAC1B,sBAAsB,EACtB,4BAA4B,EAC5B,qCAAqC,EACrC,4CAA4C,EAC5C,iCAAiC,EACjC,uBAAuB,EACvB,sBAAsB,EACtB,6BAA6B,EAC7B,wCAAwC,EACxC,2CAA2C,EAC3C,yBAAyB,EACzB,gCAAgC,EAChC,sCAAsC,EACtC,gCAAgC,EAChC,yBAAyB,EACzB,4BAA4B,EAC5B,mCAAmC,EACnC,8CAA8C,EAC9C,iDAAiD,EACjD,2BAA2B,EAC3B,0BAA0B,EAC1B,0BAA0B,EAC1B,gCAAgC,GACjC,MAAM,8BAA8B,CAAA;AACrC,YAAY,EACV,wBAAwB,EACxB,gCAAgC,EAChC,4BAA4B,EAC5B,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,mCAAmC,EACnC,2BAA2B,EAC3B,4BAA4B,EAC5B,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,uBAAuB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,sCAAsC,EAAE,MAAM,sCAAsC,CAAA;AAClG,OAAO,EAAE,qCAAqC,EAAE,MAAM,sCAAsC,CAAA;AAC5F,OAAO,EAAE,oCAAoC,EAAE,MAAM,uBAAuB,CAAA;AAC5E,OAAO,EACL,4BAA4B,EAC5B,8BAA8B,GAC/B,MAAM,2BAA2B,CAAA;AAClC,YAAY,EACV,6BAA6B,EAC7B,iCAAiC,EACjC,8BAA8B,EAC9B,6BAA6B,GAC9B,MAAM,gCAAgC,CAAA;AACvC,OAAO,EACL,uCAAuC,EACvC,yCAAyC,GAC1C,MAAM,gCAAgC,CAAA;AACvC,YAAY,EAAE,mCAAmC,EAAE,MAAM,qBAAqB,CAAA;AAC9E,OAAO,EAAE,kCAAkC,EAAE,MAAM,qBAAqB,CAAA;AACxE,OAAO,EAAE,gCAAgC,EAAE,MAAM,yBAAyB,CAAA;AAC1E,YAAY,EACV,sBAAsB,EACtB,0BAA0B,EAC1B,iCAAiC,EACjC,0BAA0B,EAC1B,sBAAsB,EACtB,4BAA4B,EAC5B,qCAAqC,EACrC,4CAA4C,EAC5C,iCAAiC,EACjC,uBAAuB,EACvB,sBAAsB,EACtB,6BAA6B,EAC7B,wCAAwC,EACxC,2CAA2C,EAC3C,yBAAyB,EACzB,gCAAgC,EAChC,sCAAsC,EACtC,gCAAgC,EAChC,yBAAyB,EACzB,4BAA4B,EAC5B,mCAAmC,EACnC,8CAA8C,EAC9C,iDAAiD,EACjD,2BAA2B,EAC3B,0BAA0B,EAC1B,0BAA0B,EAC1B,gCAAgC,GACjC,MAAM,8BAA8B,CAAA;AACrC,YAAY,EACV,wBAAwB,EACxB,gCAAgC,EAChC,4BAA4B,EAC5B,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,mCAAmC,EACnC,2BAA2B,EAC3B,4BAA4B,EAC5B,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,uBAAuB,CAAA"}
|
package/dist/neutral/index.mjs
CHANGED
|
@@ -1,3 +1,87 @@
|
|
|
1
|
+
// src/activeSourceWakeGrantAuthorizer.ts
|
|
2
|
+
import {
|
|
3
|
+
createStatementGraphWakeGrantAuthorizer,
|
|
4
|
+
sourceWakeFilterHash,
|
|
5
|
+
WakeAdmissionRouteZod,
|
|
6
|
+
wakeSourceHash,
|
|
7
|
+
wakeSourcesEqual
|
|
8
|
+
} from "@xyo-network/event-kit-protocol";
|
|
9
|
+
import {
|
|
10
|
+
HashZod,
|
|
11
|
+
NormalizedAddressZod,
|
|
12
|
+
SOURCE_WAKE_EVENT_KIND,
|
|
13
|
+
SOURCE_WAKE_FILTER_PROFILE
|
|
14
|
+
} from "@xyo-network/event-kit-schemas";
|
|
15
|
+
function exactActiveTuple(subscriptions, binding, expectedHead) {
|
|
16
|
+
const active = subscriptions.filter((subscription) => subscription.subscriber === binding.route.controller && subscription.state === "active" && subscription.selectedSubscription === binding.route.subscriptionHash && subscription.activeFromBlock !== void 0 && subscription.activeFromBlock <= expectedHead && subscription.acceptance?.body.subscription === binding.route.subscriptionHash && subscription.acceptance.body.service === binding.serviceHash && subscription.acceptance.body.grant === binding.grantHash && subscription.acceptance.evidence.source === binding.publisher);
|
|
17
|
+
if (active.length !== 1) return;
|
|
18
|
+
const selected = active[0];
|
|
19
|
+
const tuples = selected.tuples.filter((tuple2) => tuple2.subscription.objectHash === binding.route.subscriptionHash && tuple2.subscriber === binding.route.controller && tuple2.grant.objectHash === binding.grantHash && tuple2.grant.body.publisher === binding.publisher && tuple2.grant.body.deploymentId === binding.route.deploymentId && tuple2.grant.body.queueId === binding.route.queueId && tuple2.service.objectHash === binding.serviceHash && tuple2.subscription.body.publisher === binding.publisher && tuple2.subscription.body.chainId === binding.route.authorizationChainId && tuple2.subscription.body.eventKind === SOURCE_WAKE_EVENT_KIND && tuple2.subscription.body.expiresAtBlock > expectedHead);
|
|
20
|
+
if (tuples.length !== 1) return;
|
|
21
|
+
const tuple = tuples[0];
|
|
22
|
+
const service = tuple.service.body;
|
|
23
|
+
if (service.authorizationChainId !== binding.route.authorizationChainId || !service.events.some((event) => wakeSourcesEqual(event.source, binding.route.source))) return;
|
|
24
|
+
return { selected, tuple };
|
|
25
|
+
}
|
|
26
|
+
function createActiveSourceWakeGrantAuthorizer(options) {
|
|
27
|
+
const parsedRoute = WakeAdmissionRouteZod.parse(options.route);
|
|
28
|
+
const binding = Object.freeze({
|
|
29
|
+
route: Object.freeze({ ...parsedRoute, source: Object.freeze(parsedRoute.source) }),
|
|
30
|
+
publisher: NormalizedAddressZod.parse(options.publisher),
|
|
31
|
+
serviceHash: HashZod.parse(options.serviceHash),
|
|
32
|
+
grantHash: HashZod.parse(options.grantHash)
|
|
33
|
+
});
|
|
34
|
+
const { handshake, viewer } = options;
|
|
35
|
+
return createStatementGraphWakeGrantAuthorizer({
|
|
36
|
+
authorizationChainId: binding.route.authorizationChainId,
|
|
37
|
+
source: binding.route.source,
|
|
38
|
+
viewer,
|
|
39
|
+
activation: {
|
|
40
|
+
async read(request) {
|
|
41
|
+
if (request.publisher !== binding.publisher || request.controller !== binding.route.controller || request.deploymentId !== binding.route.deploymentId || request.queueId !== binding.route.queueId || request.subscriptionHash !== binding.route.subscriptionHash || request.filterHash !== binding.route.filterHash) return void 0;
|
|
42
|
+
const filterHash = await sourceWakeFilterHash({
|
|
43
|
+
schema: SOURCE_WAKE_FILTER_PROFILE,
|
|
44
|
+
source: binding.route.source,
|
|
45
|
+
fromPosition: binding.route.fromPosition,
|
|
46
|
+
maxPositionsPerWake: binding.route.maxPositionsPerWake
|
|
47
|
+
});
|
|
48
|
+
if (filterHash !== binding.route.filterHash) throw new TypeError("Route filter does not match its canonical hash");
|
|
49
|
+
if (await viewer.head() !== request.expectedHead) throw new Error("Grant projection is not at the trusted finalized head");
|
|
50
|
+
const view = await handshake.subscriber({
|
|
51
|
+
chainId: binding.route.authorizationChainId,
|
|
52
|
+
eventKind: SOURCE_WAKE_EVENT_KIND,
|
|
53
|
+
finalizedHead: request.expectedHead,
|
|
54
|
+
publisher: binding.publisher,
|
|
55
|
+
subscriber: binding.route.controller
|
|
56
|
+
});
|
|
57
|
+
if (!view.ok || view.finalizedHead !== request.expectedHead || view.indexedThrough !== request.expectedHead) {
|
|
58
|
+
throw new Error("Subscription projection is not at the trusted finalized head");
|
|
59
|
+
}
|
|
60
|
+
const exact = exactActiveTuple(view.subscriptions, binding, request.expectedHead);
|
|
61
|
+
if (exact === void 0) return void 0;
|
|
62
|
+
if (await viewer.head() !== request.expectedHead) throw new Error("Grant projection changed during activation lookup");
|
|
63
|
+
const activeFromBlock = exact.selected.activeFromBlock;
|
|
64
|
+
if (activeFromBlock === void 0) return void 0;
|
|
65
|
+
return {
|
|
66
|
+
atBlock: request.expectedHead,
|
|
67
|
+
activeFromBlock,
|
|
68
|
+
expiresAtBlock: exact.tuple.subscription.body.expiresAtBlock,
|
|
69
|
+
authorizationChainId: binding.route.authorizationChainId,
|
|
70
|
+
controller: binding.route.controller,
|
|
71
|
+
publisher: binding.publisher,
|
|
72
|
+
deploymentId: binding.route.deploymentId,
|
|
73
|
+
...binding.route.queueId === void 0 ? {} : { queueId: binding.route.queueId },
|
|
74
|
+
sourceHash: await wakeSourceHash(binding.route.source),
|
|
75
|
+
filterHash,
|
|
76
|
+
subscriptionHash: binding.route.subscriptionHash,
|
|
77
|
+
serviceHash: binding.serviceHash,
|
|
78
|
+
grantHash: binding.grantHash
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
|
|
1
85
|
// src/checkpointViewer.ts
|
|
2
86
|
function eventKey(record) {
|
|
3
87
|
return `${record.txHash}:${record.eventHash}`;
|
|
@@ -133,11 +217,11 @@ var EventKitClaimedObjectSchemas = Object.freeze([
|
|
|
133
217
|
var EventKitClaimedObjectSchemaSet = new Set(EventKitClaimedObjectSchemas);
|
|
134
218
|
|
|
135
219
|
// src/finalizedReplayController.ts
|
|
136
|
-
import { HashZod as
|
|
220
|
+
import { HashZod as HashZod3 } from "@ariestools/sdk";
|
|
137
221
|
import {
|
|
138
222
|
ChainIdZod as ChainIdZod2,
|
|
139
223
|
normalizeAddress as normalizeAddress3,
|
|
140
|
-
NormalizedAddressZod as
|
|
224
|
+
NormalizedAddressZod as NormalizedAddressZod3,
|
|
141
225
|
WakeSubscriptionAcceptanceSchema as WakeSubscriptionAcceptanceSchema2,
|
|
142
226
|
WakeSubscriptionAcceptanceZod
|
|
143
227
|
} from "@xyo-network/event-kit-schemas";
|
|
@@ -148,8 +232,11 @@ import {
|
|
|
148
232
|
} from "@xyo-network/xl1-statement-graph-sdk";
|
|
149
233
|
|
|
150
234
|
// src/replayCheckpoint.ts
|
|
151
|
-
import { HashZod } from "@ariestools/sdk";
|
|
152
|
-
import {
|
|
235
|
+
import { HashZod as HashZod2 } from "@ariestools/sdk";
|
|
236
|
+
import {
|
|
237
|
+
ChainIdZod,
|
|
238
|
+
NormalizedAddressZod as NormalizedAddressZod2
|
|
239
|
+
} from "@xyo-network/event-kit-schemas";
|
|
153
240
|
import { PayloadBuilder } from "@xyo-network/sdk";
|
|
154
241
|
import {
|
|
155
242
|
AppliedEventRecordZod,
|
|
@@ -165,7 +252,7 @@ import { z } from "zod";
|
|
|
165
252
|
var EVENT_KIT_REPLAY_CHECKPOINT_VERSION = 2;
|
|
166
253
|
var ResolvedReplayBodyZod = z.strictObject({
|
|
167
254
|
body: z.record(z.string(), z.unknown()),
|
|
168
|
-
hash:
|
|
255
|
+
hash: HashZod2
|
|
169
256
|
});
|
|
170
257
|
var ReplayCorruptBodyZod = z.strictObject({
|
|
171
258
|
claimedHash: z.string().optional(),
|
|
@@ -174,7 +261,7 @@ var ReplayCorruptBodyZod = z.strictObject({
|
|
|
174
261
|
var ReplayBlockedStateZod = z.strictObject({
|
|
175
262
|
atBlock: BlockNumberZod,
|
|
176
263
|
corrupt: z.array(ReplayCorruptBodyZod),
|
|
177
|
-
objectHashes: z.array(
|
|
264
|
+
objectHashes: z.array(HashZod2),
|
|
178
265
|
unresolvedEvents: z.array(UnresolvedEventReferenceZod)
|
|
179
266
|
});
|
|
180
267
|
var EventKitReplayCheckpointZod = z.strictObject({
|
|
@@ -188,14 +275,11 @@ var EventKitReplayCheckpointZod = z.strictObject({
|
|
|
188
275
|
indexedThrough: z.union([BlockNumberZod, z.null()]),
|
|
189
276
|
network: z.string().min(1),
|
|
190
277
|
objectSchemas: z.tuple(EventKitClaimedObjectSchemas.map((schema) => z.literal(schema))),
|
|
191
|
-
publisher:
|
|
278
|
+
publisher: NormalizedAddressZod2,
|
|
192
279
|
scan: z.union([StatementScanCheckpointZod, z.null()]),
|
|
193
280
|
sourceId: z.string().min(1),
|
|
194
281
|
version: z.literal(EVENT_KIT_REPLAY_CHECKPOINT_VERSION)
|
|
195
282
|
});
|
|
196
|
-
function sameSchemas(actual) {
|
|
197
|
-
return actual.length === EventKitClaimedObjectSchemas.length && actual.every((schema, index) => schema === EventKitClaimedObjectSchemas[index]);
|
|
198
|
-
}
|
|
199
283
|
function appliedKey(record) {
|
|
200
284
|
return `${record.txHash}:${record.eventHash}:${record.hashIndex}`;
|
|
201
285
|
}
|
|
@@ -448,9 +532,6 @@ async function loadEventKitReplayCheckpoint(value, identity) {
|
|
|
448
532
|
if (checkpoint.publisher !== identity.publisher) {
|
|
449
533
|
return { detail: `publisher ${checkpoint.publisher} != ${identity.publisher}`, status: "identity-mismatch" };
|
|
450
534
|
}
|
|
451
|
-
if (!sameSchemas(checkpoint.objectSchemas)) {
|
|
452
|
-
return { detail: "Event Kit indexed schema policy differs", status: "identity-mismatch" };
|
|
453
|
-
}
|
|
454
535
|
const bodyIntegrityError = await persistedBodyIntegrityError(checkpoint);
|
|
455
536
|
if (bodyIntegrityError !== void 0) return { detail: bodyIntegrityError, status: "corrupt" };
|
|
456
537
|
const integrityError = checkpointIntegrityError(checkpoint);
|
|
@@ -532,7 +613,7 @@ function mergeBodies(existing, additions) {
|
|
|
532
613
|
}
|
|
533
614
|
merged.set(hash, body);
|
|
534
615
|
}
|
|
535
|
-
return [...merged].map(([hash, body]) => ({ body, hash:
|
|
616
|
+
return [...merged].map(([hash, body]) => ({ body, hash: HashZod3.parse(hash) })).toSorted((left, right) => left.hash.localeCompare(right.hash));
|
|
536
617
|
}
|
|
537
618
|
async function stageBlock(options, prior, block) {
|
|
538
619
|
const result = await scanFinalizedStatements(
|
|
@@ -573,7 +654,7 @@ async function stageBlock(options, prior, block) {
|
|
|
573
654
|
...missingObjects,
|
|
574
655
|
...schemaMismatchedObjects,
|
|
575
656
|
...missingAttachments
|
|
576
|
-
]).map((hash) =>
|
|
657
|
+
]).map((hash) => HashZod3.parse(hash));
|
|
577
658
|
const isBlocked = result.unresolved.length > 0 || objectHashes.length > 0 || corrupt.length > 0;
|
|
578
659
|
return {
|
|
579
660
|
applied,
|
|
@@ -678,7 +759,7 @@ async function createFinalizedEventKitReplayController(rawOptions) {
|
|
|
678
759
|
chainId: ChainIdZod2.parse(rawOptions.chainId),
|
|
679
760
|
floorBlock: requireFloor(rawOptions.floorBlock),
|
|
680
761
|
network: rawOptions.network.trim(),
|
|
681
|
-
publisher:
|
|
762
|
+
publisher: NormalizedAddressZod3.parse(rawOptions.publisher),
|
|
682
763
|
sourceId: rawOptions.sourceId.trim()
|
|
683
764
|
};
|
|
684
765
|
if (options.network.length === 0) throw new TypeError("network must not be empty");
|
|
@@ -706,7 +787,7 @@ function createMemoryEventKitReplayCheckpointStore(initial) {
|
|
|
706
787
|
}
|
|
707
788
|
|
|
708
789
|
// src/grantReadModel.ts
|
|
709
|
-
import { HashZod as
|
|
790
|
+
import { HashZod as HashZod4 } from "@ariestools/sdk";
|
|
710
791
|
import { XyoAddressZod } from "@xyo-network/sdk-protocol/address";
|
|
711
792
|
function createStatementGraphGrantReadModel(options) {
|
|
712
793
|
const { viewer } = options;
|
|
@@ -719,7 +800,7 @@ function createStatementGraphGrantReadModel(options) {
|
|
|
719
800
|
return Object.freeze(records.map(toGrantClaim));
|
|
720
801
|
},
|
|
721
802
|
async object(objectHash) {
|
|
722
|
-
const record = await viewer.object(
|
|
803
|
+
const record = await viewer.object(HashZod4.parse(objectHash));
|
|
723
804
|
return record === void 0 ? void 0 : toGrantObject(record);
|
|
724
805
|
}
|
|
725
806
|
});
|
|
@@ -728,7 +809,7 @@ function toClaimQuery(query) {
|
|
|
728
809
|
if (query === void 0) return void 0;
|
|
729
810
|
return {
|
|
730
811
|
...query.declaredObjectSchemaPrefix === void 0 ? {} : { declaredObjectSchemaPrefix: query.declaredObjectSchemaPrefix },
|
|
731
|
-
...query.objectHash === void 0 ? {} : { objectHash:
|
|
812
|
+
...query.objectHash === void 0 ? {} : { objectHash: HashZod4.parse(query.objectHash) },
|
|
732
813
|
...query.subject === void 0 ? {} : { subject: XyoAddressZod.parse(query.subject) }
|
|
733
814
|
};
|
|
734
815
|
}
|
|
@@ -758,9 +839,9 @@ import {
|
|
|
758
839
|
EncryptedWakeSubscriptionZod,
|
|
759
840
|
EndpointChallengeResponseZod,
|
|
760
841
|
EndpointChallengeZod,
|
|
761
|
-
FINALIZED_HEAD_EVENT_KIND as FINALIZED_HEAD_EVENT_KIND2,
|
|
762
842
|
HandshakeIdZod,
|
|
763
|
-
|
|
843
|
+
hasMatchingHandshakeProfile,
|
|
844
|
+
NormalizedAddressZod as NormalizedAddressZod5,
|
|
764
845
|
PublisherServiceSchema as PublisherServiceSchema3,
|
|
765
846
|
WakeGrantObjectSchema as WakeGrantObjectSchema2,
|
|
766
847
|
WakeGrantObjectZod,
|
|
@@ -782,8 +863,7 @@ import {
|
|
|
782
863
|
} from "@xyo-network/event-kit-protocol";
|
|
783
864
|
import {
|
|
784
865
|
ChainIdZod as ChainIdZod3,
|
|
785
|
-
|
|
786
|
-
NormalizedAddressZod as NormalizedAddressZod3,
|
|
866
|
+
NormalizedAddressZod as NormalizedAddressZod4,
|
|
787
867
|
PublisherEncryptionKeyRevocationSchema as PublisherEncryptionKeyRevocationSchema2,
|
|
788
868
|
PublisherEncryptionKeyRevocationZod,
|
|
789
869
|
PublisherEncryptionKeySchema as PublisherEncryptionKeySchema2,
|
|
@@ -791,7 +871,8 @@ import {
|
|
|
791
871
|
PublisherServiceRevocationSchema as PublisherServiceRevocationSchema2,
|
|
792
872
|
PublisherServiceRevocationZod,
|
|
793
873
|
PublisherServiceSchema as PublisherServiceSchema2,
|
|
794
|
-
PublisherServiceZod
|
|
874
|
+
PublisherServiceZod,
|
|
875
|
+
SOURCE_WAKE_EVENT_KIND as SOURCE_WAKE_EVENT_KIND2
|
|
795
876
|
} from "@xyo-network/event-kit-schemas";
|
|
796
877
|
import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/sdk";
|
|
797
878
|
import { XyoAddressZod as XyoAddressZod2 } from "@xyo-network/sdk-protocol/address";
|
|
@@ -872,7 +953,7 @@ async function buildHandshakeCatalogs(viewer, publisher) {
|
|
|
872
953
|
const events = await viewer.events(XyoAddressZod2.parse(publisher));
|
|
873
954
|
const services = await parsedHandshakeObjects(
|
|
874
955
|
viewer,
|
|
875
|
-
events.filter((record) => record.objectSchema === PublisherServiceSchema2),
|
|
956
|
+
events.filter((record) => record.objectSchema === PublisherServiceSchema2 || record.objectSchema === PublisherServiceSchema2),
|
|
876
957
|
(value) => PublisherServiceZod.safeParse(value)
|
|
877
958
|
);
|
|
878
959
|
const keys = await parsedHandshakeObjects(
|
|
@@ -965,7 +1046,7 @@ async function viewHead(viewer, finalizedHead) {
|
|
|
965
1046
|
}
|
|
966
1047
|
function exactHandshakeServiceAt(catalogs, service, publisher, finalizedHead) {
|
|
967
1048
|
const selection = selectPublisherService({
|
|
968
|
-
eventKind:
|
|
1049
|
+
eventKind: service.body.events[0].kind,
|
|
969
1050
|
finalizedHead,
|
|
970
1051
|
publisherSource: publisher,
|
|
971
1052
|
serviceId: service.body.serviceId,
|
|
@@ -984,20 +1065,20 @@ function exactHandshakeKeyAt(catalogs, service, keyHash, finalizedHead) {
|
|
|
984
1065
|
return resolution.ok && resolution.key.objectHash === keyHash;
|
|
985
1066
|
}
|
|
986
1067
|
function hasPendingPublisherService(catalogs, query) {
|
|
987
|
-
return catalogs.serviceLifecycles.some((service) => service.source === query.publisher && service.claimedAtBlock <= query.finalizedHead && service.validFromBlock > query.finalizedHead && (service.revokedAtBlock === void 0 || service.revokedAtBlock > query.finalizedHead) && (query.serviceId === void 0 || service.serviceId === query.serviceId) && service.eventKinds.includes(query.eventKind ??
|
|
1068
|
+
return catalogs.serviceLifecycles.some((service) => service.source === query.publisher && service.claimedAtBlock <= query.finalizedHead && service.validFromBlock > query.finalizedHead && (service.revokedAtBlock === void 0 || service.revokedAtBlock > query.finalizedHead) && (query.serviceId === void 0 || service.serviceId === query.serviceId) && service.eventKinds.includes(query.eventKind ?? SOURCE_WAKE_EVENT_KIND2));
|
|
988
1069
|
}
|
|
989
1070
|
async function discoverHandshakeService(options, rawQuery) {
|
|
990
1071
|
const query = {
|
|
991
1072
|
...rawQuery,
|
|
992
1073
|
chainId: ChainIdZod3.parse(rawQuery.chainId),
|
|
993
|
-
eventKind: rawQuery.eventKind ??
|
|
994
|
-
publisher:
|
|
1074
|
+
eventKind: rawQuery.eventKind ?? SOURCE_WAKE_EVENT_KIND2,
|
|
1075
|
+
publisher: NormalizedAddressZod4.parse(rawQuery.publisher)
|
|
995
1076
|
};
|
|
996
1077
|
const head = await viewHead(options.viewer, query.finalizedHead);
|
|
997
1078
|
if ("ok" in head) return { query, result: head };
|
|
998
1079
|
const catalogs = await buildHandshakeCatalogs(options.viewer, query.publisher);
|
|
999
1080
|
const serviceSelection = selectPublisherService({
|
|
1000
|
-
eventKind: query.eventKind ??
|
|
1081
|
+
eventKind: query.eventKind ?? SOURCE_WAKE_EVENT_KIND2,
|
|
1001
1082
|
finalizedHead: query.finalizedHead,
|
|
1002
1083
|
publisherSource: query.publisher,
|
|
1003
1084
|
...query.serviceId === void 0 ? {} : { serviceId: query.serviceId },
|
|
@@ -1018,6 +1099,18 @@ async function discoverHandshakeService(options, rawQuery) {
|
|
|
1018
1099
|
}
|
|
1019
1100
|
const service = catalogs.serviceByHash.get(serviceSelection.service.objectHash);
|
|
1020
1101
|
if (service === void 0) throw new Error("selected service body is unavailable");
|
|
1102
|
+
if (service.body.authorizationChainId !== query.chainId) {
|
|
1103
|
+
return {
|
|
1104
|
+
catalogs,
|
|
1105
|
+
query,
|
|
1106
|
+
result: {
|
|
1107
|
+
finalizedHead: query.finalizedHead,
|
|
1108
|
+
indexedThrough: head.indexedThrough,
|
|
1109
|
+
ok: false,
|
|
1110
|
+
reason: "service-not-found"
|
|
1111
|
+
}
|
|
1112
|
+
};
|
|
1113
|
+
}
|
|
1021
1114
|
const keySelection = resolvePreferredEncryptionKey({
|
|
1022
1115
|
finalizedHead: query.finalizedHead,
|
|
1023
1116
|
keys: catalogs.keyLifecycles,
|
|
@@ -1213,7 +1306,7 @@ function hasExactGrantBinding(grant, publisher) {
|
|
|
1213
1306
|
return grant.publisher === publisher && grant.permissions.length === 1 && grant.permissions[0] === "enqueue";
|
|
1214
1307
|
}
|
|
1215
1308
|
function hasExactSubscriptionBinding(subscription, chainId, publisher, serviceHash, grantHash) {
|
|
1216
|
-
return subscription.publisher === publisher && subscription.chainId === chainId && subscription.service === serviceHash && subscription.grant === grantHash
|
|
1309
|
+
return subscription.publisher === publisher && subscription.chainId === chainId && subscription.service === serviceHash && subscription.grant === grantHash;
|
|
1217
1310
|
}
|
|
1218
1311
|
function hasExactKeyBinding(subscription, service, catalogs, tupleBlock) {
|
|
1219
1312
|
const key = catalogs.keyByHash.get(subscription.encryptionKey);
|
|
@@ -1239,9 +1332,9 @@ async function tupleRevocations(viewer, records) {
|
|
|
1239
1332
|
};
|
|
1240
1333
|
}
|
|
1241
1334
|
async function validateTuple(viewer, records, subscriber, service, catalogs, chainId, publisher, sourceEvents) {
|
|
1242
|
-
const serviceEntries = records.filter((record) => record.objectSchema === PublisherServiceSchema3);
|
|
1335
|
+
const serviceEntries = records.filter((record) => record.objectSchema === PublisherServiceSchema3 || record.objectSchema === PublisherServiceSchema3);
|
|
1243
1336
|
const grantEntries = records.filter((record) => record.objectSchema === WakeGrantObjectSchema2);
|
|
1244
|
-
const subscriptionEntries = records.filter((record) => record.objectSchema === EncryptedWakeSubscriptionSchema2);
|
|
1337
|
+
const subscriptionEntries = records.filter((record) => record.objectSchema === EncryptedWakeSubscriptionSchema2 || record.objectSchema === EncryptedWakeSubscriptionSchema2);
|
|
1245
1338
|
const baseEvidence = handshakeEventEvidence(records[0]);
|
|
1246
1339
|
const reject = (reason) => ({
|
|
1247
1340
|
rejection: {
|
|
@@ -1264,6 +1357,7 @@ async function validateTuple(viewer, records, subscriber, service, catalogs, cha
|
|
|
1264
1357
|
const grant = grantParsed.data;
|
|
1265
1358
|
const subscription = subscriptionParsed.data;
|
|
1266
1359
|
const tupleBlock = subscriptionRecord.block;
|
|
1360
|
+
if (!hasMatchingHandshakeProfile(service.body, subscription, chainId)) return reject("subscription-binding-invalid");
|
|
1267
1361
|
if (!hasExactGrantBinding(grant, publisher)) return reject("grant-binding-invalid");
|
|
1268
1362
|
if (!hasExactSubscriptionBinding(subscription, chainId, publisher, service.objectHash, grantRecord.objectHash)) {
|
|
1269
1363
|
return reject("subscription-binding-invalid");
|
|
@@ -1463,7 +1557,7 @@ function handshakeView(projection) {
|
|
|
1463
1557
|
function createEventKitHandshakeReadModel(options) {
|
|
1464
1558
|
return Object.freeze({
|
|
1465
1559
|
async acceptanceCandidates(rawQuery) {
|
|
1466
|
-
const subscriber = rawQuery.subscriber === void 0 ? void 0 :
|
|
1560
|
+
const subscriber = rawQuery.subscriber === void 0 ? void 0 : NormalizedAddressZod5.parse(rawQuery.subscriber);
|
|
1467
1561
|
const subscriptionId = rawQuery.subscriptionId === void 0 ? void 0 : HandshakeIdZod.parse(rawQuery.subscriptionId);
|
|
1468
1562
|
const projection = await handshakeLifecycle(
|
|
1469
1563
|
options,
|
|
@@ -1507,7 +1601,7 @@ function createEventKitHandshakeReadModel(options) {
|
|
|
1507
1601
|
return handshakeView(await handshakeLifecycle(options, query));
|
|
1508
1602
|
},
|
|
1509
1603
|
async subscriber(rawQuery) {
|
|
1510
|
-
const subscriber =
|
|
1604
|
+
const subscriber = NormalizedAddressZod5.parse(rawQuery.subscriber);
|
|
1511
1605
|
const subscriptionId = rawQuery.subscriptionId === void 0 ? void 0 : HandshakeIdZod.parse(rawQuery.subscriptionId);
|
|
1512
1606
|
const view = handshakeView(await handshakeLifecycle(options, rawQuery, [subscriber], subscriptionId));
|
|
1513
1607
|
return view.ok ? { ...view, subscriber } : view;
|
|
@@ -1522,6 +1616,7 @@ export {
|
|
|
1522
1616
|
ReplayBlockedStateZod,
|
|
1523
1617
|
ReplayCorruptBodyZod,
|
|
1524
1618
|
ResolvedReplayBodyZod,
|
|
1619
|
+
createActiveSourceWakeGrantAuthorizer,
|
|
1525
1620
|
createCheckpointStatementGraphViewer,
|
|
1526
1621
|
createEventKitHandshakeReadModel,
|
|
1527
1622
|
createFinalizedEventKitReplayController,
|