@xyo-network/event-kit-node 0.0.1 → 0.1.1
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/LICENSE +310 -0
- package/README.md +37 -3
- package/dist/node/filesystemDurability.d.ts +11 -0
- package/dist/node/filesystemDurability.d.ts.map +1 -0
- package/dist/node/filesystemEventKitReplayCheckpointStore.d.ts +8 -0
- package/dist/node/filesystemEventKitReplayCheckpointStore.d.ts.map +1 -0
- package/dist/node/filesystemFinalizedStatementPublicationJournal.d.ts +14 -0
- package/dist/node/filesystemFinalizedStatementPublicationJournal.d.ts.map +1 -0
- package/dist/node/filesystemHandshakeMutationIntentStore.d.ts +12 -0
- package/dist/node/filesystemHandshakeMutationIntentStore.d.ts.map +1 -0
- package/dist/node/filesystemJson.d.ts +14 -0
- package/dist/node/filesystemJson.d.ts.map +1 -0
- package/dist/node/filesystemPublisherEncryptionKeyStore.d.ts +15 -0
- package/dist/node/filesystemPublisherEncryptionKeyStore.d.ts.map +1 -0
- package/dist/node/filesystemPublisherEndpointChallengeStore.d.ts +12 -0
- package/dist/node/filesystemPublisherEndpointChallengeStore.d.ts.map +1 -0
- package/dist/node/filesystemWakeQueue.d.ts +2 -8
- package/dist/node/filesystemWakeQueue.d.ts.map +1 -1
- package/dist/node/handshake.d.ts +16 -0
- package/dist/node/handshake.d.ts.map +1 -0
- package/dist/node/handshake.mjs +1977 -0
- package/dist/node/handshake.mjs.map +7 -0
- package/dist/node/handshakeClients.d.ts +287 -0
- package/dist/node/handshakeClients.d.ts.map +1 -0
- package/dist/node/handshakeMutationIntent.d.ts +606 -0
- package/dist/node/handshakeMutationIntent.d.ts.map +1 -0
- package/dist/node/index.d.ts +1 -0
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.mjs +2015 -61
- package/dist/node/index.mjs.map +4 -4
- package/package.json +37 -19
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
import type { HashedHandshakeObject, PublisherEncryptionKeyStore, PublisherEndpointChallengeStore, WakeSubscriptionPrivateKey } from '@xyo-network/event-kit-protocol';
|
|
2
|
+
import { createPublisherEncryptionKeyRevocation, createPublisherServiceRevocation, createWakeGrantRevocation, createWakeSubscriptionRevocation } from '@xyo-network/event-kit-protocol';
|
|
3
|
+
import type { Base64Url32Bytes, ChainId, EncryptedWakeSubscription, EndpointChallenge, EndpointChallengeResponse, HandshakeId, Hash, NormalizedAddress, PublisherEncryptionKey, PublisherService, WakeGrantObject, WakeSubscriptionAcceptance } from '@xyo-network/event-kit-schemas';
|
|
4
|
+
import type { EventKitHandshakeReadModel, FinalizedEventKitReplayController, FinalizedSubscriptionTuple, PublisherAcceptanceCandidateDiscovery, PublisherHandshakeView, PublisherServiceDiscovery, PublisherServiceDiscoveryFailure, PublisherSubscriptionView, ReplayBlockedState, SubscriberSubscriptionLookup, SubscriberSubscriptionLookupSuccess } from '@xyo-network/event-kit-statement-graph';
|
|
5
|
+
import type { EventKitChainIdViewer, EventKitNetworkSession, HandshakePublicationResult, HandshakePublicationTransport, PublishPublisherEncryptionKeyRevocationOptions } from '@xyo-network/event-kit-xl1';
|
|
6
|
+
import type { HandshakeMutationIntentDisposition, HandshakeMutationIntentStore } from './handshakeMutationIntent.ts';
|
|
7
|
+
export type EventKitHandshakeClientErrorCode = 'candidate-ambiguous' | 'candidate-not-found' | 'challenge-context-invalid' | 'challenge-not-found' | 'challenge-rejected' | 'identity-mismatch' | 'key-mismatch' | 'key-custody-failed' | 'mutation-intent-conflict' | 'mutation-intent-unavailable' | 'projection-blocked' | 'projection-stale' | 'service-already-exists' | 'service-root-requires-fresh-id' | 'service-mismatch' | 'service-unavailable' | 'subscription-invalid' | 'subscription-not-found';
|
|
8
|
+
/** Stable, machine-readable failure raised before an unsafe handshake mutation. */
|
|
9
|
+
export declare class EventKitHandshakeClientError extends Error {
|
|
10
|
+
readonly code: EventKitHandshakeClientErrorCode;
|
|
11
|
+
constructor(code: EventKitHandshakeClientErrorCode, message: string);
|
|
12
|
+
}
|
|
13
|
+
export interface SynchronizedEventKitHandshakeSnapshot {
|
|
14
|
+
readonly blocked?: ReplayBlockedState;
|
|
15
|
+
readonly finalizedHead: number;
|
|
16
|
+
readonly indexedThrough: number | null;
|
|
17
|
+
readonly readModel: EventKitHandshakeReadModel;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* A publisher-scoped finalized projection. Every call creates a fresh read
|
|
21
|
+
* model after replay synchronization; callers never retain a stale viewer.
|
|
22
|
+
*/
|
|
23
|
+
export interface SynchronizedEventKitHandshakeReader {
|
|
24
|
+
readonly chainId: ChainId;
|
|
25
|
+
readonly publisher: NormalizedAddress;
|
|
26
|
+
sync(): Promise<SynchronizedEventKitHandshakeSnapshot>;
|
|
27
|
+
}
|
|
28
|
+
export interface CreateSynchronizedEventKitHandshakeReaderOptions {
|
|
29
|
+
/** Live chain identity port; checked both before and after every replay sync. */
|
|
30
|
+
readonly chain: EventKitChainIdViewer;
|
|
31
|
+
readonly publisher: string;
|
|
32
|
+
readonly replay: FinalizedEventKitReplayController;
|
|
33
|
+
readonly session: EventKitNetworkSession;
|
|
34
|
+
}
|
|
35
|
+
/** Compose finalized replay with the public Statement Graph handshake model. */
|
|
36
|
+
export declare function createSynchronizedEventKitHandshakeReader(options: CreateSynchronizedEventKitHandshakeReaderOptions): SynchronizedEventKitHandshakeReader;
|
|
37
|
+
export interface EventKitHandshakePublicationPort {
|
|
38
|
+
readonly chainId: ChainId;
|
|
39
|
+
publishPublisherEncryptionKeyRevocation(input: Pick<PublishPublisherEncryptionKeyRevocationOptions, 'revocation'> & {
|
|
40
|
+
readonly operationId: string;
|
|
41
|
+
}): Promise<HandshakePublicationResult>;
|
|
42
|
+
publishPublisherService(input: {
|
|
43
|
+
readonly encryptionKeys: readonly PublisherEncryptionKey[];
|
|
44
|
+
readonly operationId: string;
|
|
45
|
+
readonly service: PublisherService;
|
|
46
|
+
}): Promise<HandshakePublicationResult>;
|
|
47
|
+
publishPublisherServiceRevocation(input: {
|
|
48
|
+
readonly operationId: string;
|
|
49
|
+
readonly revocation: ReturnType<typeof createPublisherServiceRevocation>;
|
|
50
|
+
}): Promise<HandshakePublicationResult>;
|
|
51
|
+
publishWakeGrantRevocation(input: {
|
|
52
|
+
readonly operationId: string;
|
|
53
|
+
readonly publisher: NormalizedAddress;
|
|
54
|
+
readonly revocation: ReturnType<typeof createWakeGrantRevocation>;
|
|
55
|
+
}): Promise<HandshakePublicationResult>;
|
|
56
|
+
publishWakeSubscription(input: {
|
|
57
|
+
readonly encryptionKey: PublisherEncryptionKey;
|
|
58
|
+
readonly grant: WakeGrantObject;
|
|
59
|
+
readonly operationId: string;
|
|
60
|
+
readonly service: PublisherService;
|
|
61
|
+
readonly subscription: EncryptedWakeSubscription;
|
|
62
|
+
}): Promise<HandshakePublicationResult>;
|
|
63
|
+
publishWakeSubscriptionAcceptance(input: {
|
|
64
|
+
readonly acceptance: WakeSubscriptionAcceptance;
|
|
65
|
+
readonly challenge: EndpointChallenge;
|
|
66
|
+
readonly operationId: string;
|
|
67
|
+
readonly response: EndpointChallengeResponse;
|
|
68
|
+
}): Promise<HandshakePublicationResult>;
|
|
69
|
+
publishWakeSubscriptionRevocation(input: {
|
|
70
|
+
readonly operationId: string;
|
|
71
|
+
readonly publisher: NormalizedAddress;
|
|
72
|
+
readonly revocation: ReturnType<typeof createWakeSubscriptionRevocation>;
|
|
73
|
+
}): Promise<HandshakePublicationResult>;
|
|
74
|
+
/** Canonical address that will sign the next publication. */
|
|
75
|
+
source(): Promise<NormalizedAddress>;
|
|
76
|
+
}
|
|
77
|
+
/** Bind all XL1 writes to one chain-pinned, Mainnet-interlocked transport. */
|
|
78
|
+
export declare function createEventKitHandshakePublicationPort(transport: HandshakePublicationTransport): EventKitHandshakePublicationPort;
|
|
79
|
+
export interface PublisherEncryptionKeyCustody extends PublisherEncryptionKeyStore {
|
|
80
|
+
/** Must durably retain the exact private key before resolving. */
|
|
81
|
+
putPrivateKey(input: {
|
|
82
|
+
readonly key: WakeSubscriptionPrivateKey;
|
|
83
|
+
readonly publisher: string;
|
|
84
|
+
}): Promise<'duplicate' | 'stored'>;
|
|
85
|
+
}
|
|
86
|
+
export interface PublishPublisherServiceInput {
|
|
87
|
+
readonly expiresAtBlock?: number;
|
|
88
|
+
readonly maxBlocksPerWake: number;
|
|
89
|
+
readonly maxSubscriptionLifetimeBlocks: number;
|
|
90
|
+
readonly operationId: HandshakeId;
|
|
91
|
+
readonly validFromBlock?: number;
|
|
92
|
+
}
|
|
93
|
+
export interface RotatePublisherEncryptionKeyInput {
|
|
94
|
+
readonly expiresAtBlock?: number;
|
|
95
|
+
readonly keyExpiresAtBlock?: number;
|
|
96
|
+
readonly maxBlocksPerWake?: number;
|
|
97
|
+
readonly maxSubscriptionLifetimeBlocks?: number;
|
|
98
|
+
readonly operationId: HandshakeId;
|
|
99
|
+
/** Exact currently selected service object hash expected by the operator. */
|
|
100
|
+
readonly service: string;
|
|
101
|
+
readonly validFromBlock?: number;
|
|
102
|
+
}
|
|
103
|
+
export interface PublisherServicePublicationResult {
|
|
104
|
+
readonly encryptionKey: HashedHandshakeObject<PublisherEncryptionKey>;
|
|
105
|
+
readonly intentDisposition: HandshakeMutationIntentDisposition;
|
|
106
|
+
readonly keyCustody: 'duplicate' | 'stored';
|
|
107
|
+
readonly operationId: HandshakeId;
|
|
108
|
+
readonly publication: HandshakePublicationResult;
|
|
109
|
+
readonly service: HashedHandshakeObject<PublisherService>;
|
|
110
|
+
}
|
|
111
|
+
export interface PublisherServiceRetirementResult {
|
|
112
|
+
readonly intentDisposition: HandshakeMutationIntentDisposition;
|
|
113
|
+
readonly operationId: Hash;
|
|
114
|
+
readonly publication: HandshakePublicationResult;
|
|
115
|
+
readonly revocation: HashedHandshakeObject<ReturnType<typeof createPublisherServiceRevocation>>;
|
|
116
|
+
readonly service: Hash;
|
|
117
|
+
}
|
|
118
|
+
export interface PublisherKeyRetirementResult {
|
|
119
|
+
readonly intentDisposition: HandshakeMutationIntentDisposition;
|
|
120
|
+
readonly key: Hash;
|
|
121
|
+
readonly operationId: Hash;
|
|
122
|
+
readonly publication: HandshakePublicationResult;
|
|
123
|
+
readonly revocation: HashedHandshakeObject<ReturnType<typeof createPublisherEncryptionKeyRevocation>>;
|
|
124
|
+
}
|
|
125
|
+
export interface PublisherSubscriptionSelector {
|
|
126
|
+
readonly subscriber: string;
|
|
127
|
+
/** Optional exact object hash; when omitted, exactly one candidate must exist for the stable identity. */
|
|
128
|
+
readonly subscription?: string;
|
|
129
|
+
readonly subscriptionId?: string;
|
|
130
|
+
}
|
|
131
|
+
export interface IssuePublisherChallengeInput extends PublisherSubscriptionSelector {
|
|
132
|
+
readonly issuedAt: number;
|
|
133
|
+
readonly lifetimeSeconds?: number;
|
|
134
|
+
}
|
|
135
|
+
export interface IssuedPublisherChallenge {
|
|
136
|
+
readonly challenge: EndpointChallenge;
|
|
137
|
+
readonly challengeHash: Hash;
|
|
138
|
+
readonly disposition: 'duplicate' | 'issued';
|
|
139
|
+
readonly subscriber: NormalizedAddress;
|
|
140
|
+
readonly subscription: Hash;
|
|
141
|
+
}
|
|
142
|
+
/** Decrypted routing data. It is required for the outbound call and MUST NOT be logged as evidence. */
|
|
143
|
+
export interface PublisherChallengeDeliveryTarget {
|
|
144
|
+
readonly audience: string;
|
|
145
|
+
readonly endpoint: string;
|
|
146
|
+
}
|
|
147
|
+
export type BeginPublisherChallengeResult = {
|
|
148
|
+
readonly challenge: EndpointChallenge;
|
|
149
|
+
readonly challengeHash: Hash;
|
|
150
|
+
readonly kind: 'started';
|
|
151
|
+
readonly subscriber: NormalizedAddress;
|
|
152
|
+
readonly subscription: Hash;
|
|
153
|
+
readonly target: PublisherChallengeDeliveryTarget;
|
|
154
|
+
} | {
|
|
155
|
+
readonly kind: 'already-attempted' | 'expired' | 'missing' | 'verified';
|
|
156
|
+
};
|
|
157
|
+
export interface CompletePublisherChallengeInput {
|
|
158
|
+
readonly challengeHash: string;
|
|
159
|
+
/** Publisher-local Unix clock, sampled inside the client at the proof-decision boundary. */
|
|
160
|
+
readonly nowSeconds: () => number;
|
|
161
|
+
readonly response: EndpointChallengeResponse;
|
|
162
|
+
/** Expected Claim source, independently supplied by the caller. */
|
|
163
|
+
readonly subscriber: string;
|
|
164
|
+
/** Expected encrypted-subscription object hash, independently supplied by the caller. */
|
|
165
|
+
readonly subscription: string;
|
|
166
|
+
}
|
|
167
|
+
export type PublisherAcceptanceReconciliation = {
|
|
168
|
+
readonly finalizedHead: number;
|
|
169
|
+
readonly indexedThrough: number;
|
|
170
|
+
readonly lifecycle: PublisherSubscriptionView;
|
|
171
|
+
readonly status: 'active' | 'not-active';
|
|
172
|
+
} | {
|
|
173
|
+
readonly finalizedHead: number;
|
|
174
|
+
readonly indexedThrough: number;
|
|
175
|
+
readonly status: 'not-found';
|
|
176
|
+
} | {
|
|
177
|
+
readonly finalizedHead?: number;
|
|
178
|
+
readonly indexedThrough?: number | null;
|
|
179
|
+
readonly reason: 'ambiguous-lifecycle' | 'projection-blocked' | 'projection-stale' | 'publication-not-indexed' | 'synchronization-failed' | PublisherServiceDiscoveryFailure['reason'];
|
|
180
|
+
readonly status: 'unavailable';
|
|
181
|
+
};
|
|
182
|
+
/** A finalized acceptance publication plus its best-effort post-finality lifecycle reconciliation. */
|
|
183
|
+
export interface PublisherAcceptancePublicationResult {
|
|
184
|
+
readonly acceptance: HashedHandshakeObject<WakeSubscriptionAcceptance>;
|
|
185
|
+
readonly challenge: Hash;
|
|
186
|
+
readonly intentDisposition: HandshakeMutationIntentDisposition;
|
|
187
|
+
readonly operationId: Hash;
|
|
188
|
+
readonly publication: HandshakePublicationResult;
|
|
189
|
+
readonly reconciliation: PublisherAcceptanceReconciliation;
|
|
190
|
+
readonly response: Hash;
|
|
191
|
+
readonly subscriber: NormalizedAddress;
|
|
192
|
+
readonly subscription: Hash;
|
|
193
|
+
}
|
|
194
|
+
export interface PublisherHandshakeClient {
|
|
195
|
+
acceptanceCandidates(selector?: Partial<PublisherSubscriptionSelector>): Promise<PublisherAcceptanceCandidateDiscovery>;
|
|
196
|
+
beginChallenge(input: {
|
|
197
|
+
readonly challengeHash: string;
|
|
198
|
+
readonly nowSeconds: () => number;
|
|
199
|
+
}): Promise<BeginPublisherChallengeResult>;
|
|
200
|
+
completeChallengeAndAccept(input: CompletePublisherChallengeInput): Promise<PublisherAcceptancePublicationResult>;
|
|
201
|
+
issueChallenge(input: IssuePublisherChallengeInput): Promise<IssuedPublisherChallenge>;
|
|
202
|
+
key(): Promise<PublisherServiceDiscovery>;
|
|
203
|
+
publishService(input: PublishPublisherServiceInput): Promise<PublisherServicePublicationResult>;
|
|
204
|
+
retireEncryptionKey(key: string): Promise<PublisherKeyRetirementResult>;
|
|
205
|
+
retireService(service: string): Promise<PublisherServiceRetirementResult>;
|
|
206
|
+
rotateEncryptionKey(input: RotatePublisherEncryptionKeyInput): Promise<PublisherServicePublicationResult>;
|
|
207
|
+
service(): Promise<PublisherServiceDiscovery>;
|
|
208
|
+
subscriptions(): Promise<PublisherHandshakeView>;
|
|
209
|
+
}
|
|
210
|
+
export interface CreatePublisherHandshakeClientOptions {
|
|
211
|
+
readonly challenges: PublisherEndpointChallengeStore;
|
|
212
|
+
readonly intents: HandshakeMutationIntentStore;
|
|
213
|
+
readonly keys: PublisherEncryptionKeyCustody;
|
|
214
|
+
readonly publication: EventKitHandshakePublicationPort;
|
|
215
|
+
readonly reader: SynchronizedEventKitHandshakeReader;
|
|
216
|
+
readonly serviceId?: string;
|
|
217
|
+
}
|
|
218
|
+
/** Publisher-side handshake orchestration shared by automation, CLI, and the resident runtime. */
|
|
219
|
+
export declare function createPublisherHandshakeClient(options: CreatePublisherHandshakeClientOptions): PublisherHandshakeClient;
|
|
220
|
+
export interface CreateSubscriberHandshakeClientOptions {
|
|
221
|
+
readonly intents: HandshakeMutationIntentStore;
|
|
222
|
+
readonly publication: EventKitHandshakePublicationPort;
|
|
223
|
+
readonly reader: SynchronizedEventKitHandshakeReader;
|
|
224
|
+
readonly serviceId?: string;
|
|
225
|
+
readonly subscriber: string;
|
|
226
|
+
}
|
|
227
|
+
export interface SubscribeToPublisherInput {
|
|
228
|
+
readonly audience: string;
|
|
229
|
+
/** Subscriber-owned secret already provisioned at the endpoint; it is never returned or published. */
|
|
230
|
+
readonly challengeSecret: Base64Url32Bytes;
|
|
231
|
+
readonly deploymentId: string;
|
|
232
|
+
readonly endpoint: string;
|
|
233
|
+
readonly expiresAtBlock: number;
|
|
234
|
+
readonly grantId?: string;
|
|
235
|
+
readonly maxBlocksPerWake?: number;
|
|
236
|
+
readonly operationId: HandshakeId;
|
|
237
|
+
readonly queueId?: string | null;
|
|
238
|
+
readonly revision?: number;
|
|
239
|
+
readonly subscriptionId?: HandshakeId;
|
|
240
|
+
readonly supersedes?: Hash;
|
|
241
|
+
}
|
|
242
|
+
export interface SubscriberSubscriptionPublicationResult {
|
|
243
|
+
readonly grant: HashedHandshakeObject<WakeGrantObject>;
|
|
244
|
+
readonly intentDisposition: HandshakeMutationIntentDisposition;
|
|
245
|
+
readonly operationId: HandshakeId;
|
|
246
|
+
readonly publication: HandshakePublicationResult;
|
|
247
|
+
readonly service: Hash;
|
|
248
|
+
readonly subscription: HashedHandshakeObject<EncryptedWakeSubscription>;
|
|
249
|
+
}
|
|
250
|
+
export interface SubscriberSubscriptionRevocationResult {
|
|
251
|
+
readonly intentDisposition: HandshakeMutationIntentDisposition;
|
|
252
|
+
readonly operationId: Hash;
|
|
253
|
+
readonly publication: HandshakePublicationResult;
|
|
254
|
+
readonly revocation: HashedHandshakeObject<ReturnType<typeof createWakeSubscriptionRevocation>>;
|
|
255
|
+
readonly subscription: Hash;
|
|
256
|
+
}
|
|
257
|
+
export interface SubscriberGrantRevocationResult {
|
|
258
|
+
readonly grant: Hash;
|
|
259
|
+
readonly intentDisposition: HandshakeMutationIntentDisposition;
|
|
260
|
+
readonly operationId: Hash;
|
|
261
|
+
readonly publication: HandshakePublicationResult;
|
|
262
|
+
readonly revocation: HashedHandshakeObject<ReturnType<typeof createWakeGrantRevocation>>;
|
|
263
|
+
}
|
|
264
|
+
export interface SubscriberHandshakeClient {
|
|
265
|
+
revokeGrant(grant: string): Promise<SubscriberGrantRevocationResult>;
|
|
266
|
+
revokeSubscription(subscription: string): Promise<SubscriberSubscriptionRevocationResult>;
|
|
267
|
+
service(): Promise<PublisherServiceDiscovery>;
|
|
268
|
+
subscribe(input: SubscribeToPublisherInput): Promise<SubscriberSubscriptionPublicationResult>;
|
|
269
|
+
subscription(subscription: string): Promise<SubscriberExactSubscriptionLookup>;
|
|
270
|
+
subscriptions(subscriptionId?: string): Promise<SubscriberSubscriptionLookup>;
|
|
271
|
+
}
|
|
272
|
+
export interface SubscriberExactSubscriptionLookupSuccess {
|
|
273
|
+
readonly found: true;
|
|
274
|
+
readonly lifecycle: PublisherSubscriptionView;
|
|
275
|
+
readonly lookup: SubscriberSubscriptionLookupSuccess;
|
|
276
|
+
readonly ok: true;
|
|
277
|
+
readonly tuple: FinalizedSubscriptionTuple;
|
|
278
|
+
}
|
|
279
|
+
export interface SubscriberExactSubscriptionLookupNotFound {
|
|
280
|
+
readonly found: false;
|
|
281
|
+
readonly lookup: SubscriberSubscriptionLookupSuccess;
|
|
282
|
+
readonly ok: true;
|
|
283
|
+
}
|
|
284
|
+
export type SubscriberExactSubscriptionLookup = PublisherServiceDiscoveryFailure | SubscriberExactSubscriptionLookupNotFound | SubscriberExactSubscriptionLookupSuccess;
|
|
285
|
+
/** Subscriber-side discovery, encryption, exact tuple publication, and revocation. */
|
|
286
|
+
export declare function createSubscriberHandshakeClient(options: CreateSubscriberHandshakeClientOptions): SubscriberHandshakeClient;
|
|
287
|
+
//# sourceMappingURL=handshakeClients.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handshakeClients.d.ts","sourceRoot":"","sources":["../../src/handshakeClients.ts"],"names":[],"mappings":"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"}
|