@dispatch-foo/protocol 0.0.0 → 0.2.0
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 +21 -0
- package/README.md +25 -0
- package/dist/browser.d.ts +2 -0
- package/dist/browser.js +3 -0
- package/dist/conformance-adapter.d.ts +1 -0
- package/dist/conformance-adapter.js +11 -0
- package/dist/conformance-adapter.js.map +1 -0
- package/dist/conformance.d.ts +243 -0
- package/dist/conformance.d.ts.map +1 -0
- package/dist/conformance.js +5 -0
- package/dist/constants-CRXF4f7g.js +89 -0
- package/dist/constants-CRXF4f7g.js.map +1 -0
- package/dist/constants-CUM7Sm5u.d.ts +36 -0
- package/dist/constants-CUM7Sm5u.d.ts.map +1 -0
- package/dist/federation/index.d.ts +360 -0
- package/dist/federation/index.d.ts.map +1 -0
- package/dist/federation/index.js +628 -0
- package/dist/federation/index.js.map +1 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/serve-CVPZbCpT.js +672 -0
- package/dist/serve-CVPZbCpT.js.map +1 -0
- package/dist/sqliteStore-BtFP1f8O.d.ts +376 -0
- package/dist/sqliteStore-BtFP1f8O.d.ts.map +1 -0
- package/dist/untrusted-DJNiucEX-tUd9XZzz.d.ts +388 -0
- package/dist/untrusted-DJNiucEX-tUd9XZzz.d.ts.map +1 -0
- package/dist/version-Ds8ZFZLh.js +2490 -0
- package/dist/version-Ds8ZFZLh.js.map +1 -0
- package/package.json +54 -1
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
import "../constants-CUM7Sm5u.js";
|
|
2
|
+
import { C as JsonValue, F as Address, T as Message, f as DeliveryVia, i as RevisionCause, n as LinkRel, r as LinkTarget, t as DocStatus } from "../untrusted-DJNiucEX-tUd9XZzz.js";
|
|
3
|
+
|
|
4
|
+
//#region src/federation/ops.d.ts
|
|
5
|
+
type OpType = 'key' | 'roster' | 'task' | 'presence' | 'agent' | 'channel' | 'mail' | 'state' | 'memory' | 'doc' | 'a2a';
|
|
6
|
+
declare const OP_TYPES: readonly OpType[];
|
|
7
|
+
declare const SEALED_TYPES: ReadonlySet<string>;
|
|
8
|
+
declare const STUBBABLE_TYPES: ReadonlySet<string>;
|
|
9
|
+
declare const MAX_OP_BYTES = 1048576;
|
|
10
|
+
declare const MAX_SEALED_RECIPIENTS = 256;
|
|
11
|
+
declare const MAX_STATE_ENTRIES = 500;
|
|
12
|
+
declare const REPLICA_ID: RegExp;
|
|
13
|
+
declare const ZERO_HASH: string;
|
|
14
|
+
declare const TAG: {
|
|
15
|
+
readonly op: "dispatch-op-v2";
|
|
16
|
+
readonly sealed: "dispatch-sealed-v1";
|
|
17
|
+
readonly ack: "dispatch-ack-v1";
|
|
18
|
+
readonly relay: "dispatch-relay-v1";
|
|
19
|
+
readonly invite: "dispatch-invite-v1";
|
|
20
|
+
readonly recovery: "dispatch-recovery-v1";
|
|
21
|
+
readonly fingerprint: "dispatch-fp-v1";
|
|
22
|
+
};
|
|
23
|
+
interface OpHeader {
|
|
24
|
+
v: 2;
|
|
25
|
+
replica: string;
|
|
26
|
+
seq: number;
|
|
27
|
+
prev: string;
|
|
28
|
+
hlc: string;
|
|
29
|
+
type: string;
|
|
30
|
+
to?: string[];
|
|
31
|
+
bodyHash: string;
|
|
32
|
+
}
|
|
33
|
+
interface Sealed {
|
|
34
|
+
nonce: string;
|
|
35
|
+
ct: string;
|
|
36
|
+
keys: Record<string, {
|
|
37
|
+
enc: string;
|
|
38
|
+
ct: string;
|
|
39
|
+
}>;
|
|
40
|
+
}
|
|
41
|
+
interface FederatedOp extends OpHeader {
|
|
42
|
+
body?: JsonValue;
|
|
43
|
+
sealed?: Sealed;
|
|
44
|
+
sig: string;
|
|
45
|
+
}
|
|
46
|
+
interface OpStub extends OpHeader {
|
|
47
|
+
sig: string;
|
|
48
|
+
pruned: true;
|
|
49
|
+
}
|
|
50
|
+
type LogEntry = FederatedOp | OpStub;
|
|
51
|
+
interface MailPayload {
|
|
52
|
+
message: Message;
|
|
53
|
+
targets: MailTarget[];
|
|
54
|
+
}
|
|
55
|
+
interface MailTarget {
|
|
56
|
+
recipient: Address;
|
|
57
|
+
via: DeliveryVia;
|
|
58
|
+
homes: string[];
|
|
59
|
+
wakeAt?: string;
|
|
60
|
+
}
|
|
61
|
+
interface ForwardPayload {
|
|
62
|
+
target: Address;
|
|
63
|
+
key: string;
|
|
64
|
+
}
|
|
65
|
+
interface StatePayload {
|
|
66
|
+
entries: ({
|
|
67
|
+
t: 'delivery';
|
|
68
|
+
message: string;
|
|
69
|
+
recipient: Address;
|
|
70
|
+
state: 'held' | 'pushed' | 'notified' | 'read' | 'answered';
|
|
71
|
+
at: string;
|
|
72
|
+
} | {
|
|
73
|
+
t: 'settle';
|
|
74
|
+
question: string;
|
|
75
|
+
answer: string;
|
|
76
|
+
closed?: string;
|
|
77
|
+
at: string;
|
|
78
|
+
} | {
|
|
79
|
+
t: 'refused';
|
|
80
|
+
message: string;
|
|
81
|
+
reason: string;
|
|
82
|
+
at: string;
|
|
83
|
+
})[];
|
|
84
|
+
}
|
|
85
|
+
interface KeyBody {
|
|
86
|
+
handle: string;
|
|
87
|
+
device: string;
|
|
88
|
+
build: string;
|
|
89
|
+
signPub: string;
|
|
90
|
+
sealPub: string;
|
|
91
|
+
legacy: {
|
|
92
|
+
throughSeq: number;
|
|
93
|
+
digest: string;
|
|
94
|
+
} | null;
|
|
95
|
+
invite?: {
|
|
96
|
+
id: string;
|
|
97
|
+
sig: string;
|
|
98
|
+
};
|
|
99
|
+
caps?: string[];
|
|
100
|
+
}
|
|
101
|
+
type RosterBody = {
|
|
102
|
+
rv: 1;
|
|
103
|
+
} & ({
|
|
104
|
+
action: 'found';
|
|
105
|
+
name: string;
|
|
106
|
+
legacy: LegacyAttestation[];
|
|
107
|
+
recoveryPub: string;
|
|
108
|
+
} | {
|
|
109
|
+
action: 'admit';
|
|
110
|
+
replica: string;
|
|
111
|
+
handle: string;
|
|
112
|
+
role: 'member' | 'admin';
|
|
113
|
+
fingerprint: string;
|
|
114
|
+
hosts?: string[];
|
|
115
|
+
observer?: true;
|
|
116
|
+
} | {
|
|
117
|
+
action: 'revoke';
|
|
118
|
+
replica: string;
|
|
119
|
+
afterSeq: number;
|
|
120
|
+
afterHash: string;
|
|
121
|
+
reason: string;
|
|
122
|
+
} | {
|
|
123
|
+
action: 'role';
|
|
124
|
+
replica: string;
|
|
125
|
+
role: 'member' | 'admin';
|
|
126
|
+
afterSeq?: number;
|
|
127
|
+
afterHash?: string;
|
|
128
|
+
} | {
|
|
129
|
+
action: 'hosts';
|
|
130
|
+
replica: string;
|
|
131
|
+
hosts: string[];
|
|
132
|
+
afterSeq?: number;
|
|
133
|
+
afterHash?: string;
|
|
134
|
+
} | {
|
|
135
|
+
action: 'close-legacy';
|
|
136
|
+
entries: LegacyAttestation[];
|
|
137
|
+
} | {
|
|
138
|
+
action: 'license';
|
|
139
|
+
key: string;
|
|
140
|
+
} | {
|
|
141
|
+
action: 'invite';
|
|
142
|
+
id: string;
|
|
143
|
+
pub: string;
|
|
144
|
+
handle: string;
|
|
145
|
+
expires: string;
|
|
146
|
+
} | {
|
|
147
|
+
action: 'recover';
|
|
148
|
+
proof: string;
|
|
149
|
+
} | {
|
|
150
|
+
action: 'recovery-key';
|
|
151
|
+
pub: string;
|
|
152
|
+
} | {
|
|
153
|
+
action: 'transport';
|
|
154
|
+
kind: 'git' | 'relay';
|
|
155
|
+
url?: string;
|
|
156
|
+
} | {
|
|
157
|
+
action: 'dismiss';
|
|
158
|
+
replica: string;
|
|
159
|
+
seq: number;
|
|
160
|
+
hash: string;
|
|
161
|
+
});
|
|
162
|
+
interface LegacyAttestation {
|
|
163
|
+
replica: string;
|
|
164
|
+
throughSeq: number;
|
|
165
|
+
digest: string;
|
|
166
|
+
}
|
|
167
|
+
type PresenceBody = {
|
|
168
|
+
kind: 'replica';
|
|
169
|
+
build: string;
|
|
170
|
+
device: string;
|
|
171
|
+
wall: number;
|
|
172
|
+
} | {
|
|
173
|
+
kind: 'replica';
|
|
174
|
+
build: string;
|
|
175
|
+
device: string;
|
|
176
|
+
wall: number;
|
|
177
|
+
caps: string[];
|
|
178
|
+
} | {
|
|
179
|
+
kind: 'run';
|
|
180
|
+
run: string;
|
|
181
|
+
task: string | null;
|
|
182
|
+
runKind: string;
|
|
183
|
+
live: boolean;
|
|
184
|
+
waitingOn?: string;
|
|
185
|
+
} | {
|
|
186
|
+
kind: 'resolve';
|
|
187
|
+
run: string;
|
|
188
|
+
replica: string;
|
|
189
|
+
};
|
|
190
|
+
interface AgentBody {
|
|
191
|
+
address: Address;
|
|
192
|
+
displayName: string;
|
|
193
|
+
client: string;
|
|
194
|
+
status: 'pending' | 'approved' | 'revoked';
|
|
195
|
+
}
|
|
196
|
+
interface ChannelBody {
|
|
197
|
+
channel: string;
|
|
198
|
+
member: Address;
|
|
199
|
+
joined: boolean;
|
|
200
|
+
}
|
|
201
|
+
interface MemoryBody {
|
|
202
|
+
memory: string;
|
|
203
|
+
kind: 'put' | 'remove';
|
|
204
|
+
fields?: Record<string, unknown>;
|
|
205
|
+
trust: 'human' | 'confirmed' | 'agent';
|
|
206
|
+
by?: string;
|
|
207
|
+
}
|
|
208
|
+
interface DocBody {
|
|
209
|
+
doc: string;
|
|
210
|
+
kind: 'put' | 'remove';
|
|
211
|
+
by: Address;
|
|
212
|
+
revision?: {
|
|
213
|
+
id: string;
|
|
214
|
+
parents: string[];
|
|
215
|
+
title: string;
|
|
216
|
+
body: string;
|
|
217
|
+
hash: string;
|
|
218
|
+
author: Address;
|
|
219
|
+
cause: RevisionCause;
|
|
220
|
+
summary: string;
|
|
221
|
+
createdAt: string;
|
|
222
|
+
approval?: {
|
|
223
|
+
by: Address;
|
|
224
|
+
policy?: {
|
|
225
|
+
rung: number;
|
|
226
|
+
};
|
|
227
|
+
};
|
|
228
|
+
task?: string;
|
|
229
|
+
};
|
|
230
|
+
meta?: {
|
|
231
|
+
slug?: string;
|
|
232
|
+
aliases?: string[];
|
|
233
|
+
title?: string;
|
|
234
|
+
status?: DocStatus;
|
|
235
|
+
links?: {
|
|
236
|
+
target: LinkTarget;
|
|
237
|
+
rel: LinkRel;
|
|
238
|
+
}[];
|
|
239
|
+
};
|
|
240
|
+
review?: {
|
|
241
|
+
rev: string;
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
declare function isStub(e: LogEntry): e is OpStub;
|
|
245
|
+
declare function headerOf(e: LogEntry): OpHeader;
|
|
246
|
+
declare function contentHash(content: {
|
|
247
|
+
body?: JsonValue;
|
|
248
|
+
sealed?: Sealed;
|
|
249
|
+
}): string;
|
|
250
|
+
declare function opHash(e: LogEntry): string;
|
|
251
|
+
declare function stubOf(op: FederatedOp): OpStub;
|
|
252
|
+
//#endregion
|
|
253
|
+
//#region src/federation/chain.d.ts
|
|
254
|
+
interface ChainHead {
|
|
255
|
+
seq: number;
|
|
256
|
+
hash: string;
|
|
257
|
+
hlc: string;
|
|
258
|
+
}
|
|
259
|
+
declare function buildOp(fields: {
|
|
260
|
+
replica: string;
|
|
261
|
+
seq: number;
|
|
262
|
+
prev: string;
|
|
263
|
+
hlc: string;
|
|
264
|
+
type: string;
|
|
265
|
+
body?: JsonValue;
|
|
266
|
+
to?: string[];
|
|
267
|
+
sealed?: Sealed;
|
|
268
|
+
}, signPriv: string): FederatedOp;
|
|
269
|
+
declare function verifyEntry(head: ChainHead | null, e: LogEntry, signPub: string): {
|
|
270
|
+
ok: true;
|
|
271
|
+
head: ChainHead;
|
|
272
|
+
} | {
|
|
273
|
+
ok: false;
|
|
274
|
+
reason: string;
|
|
275
|
+
};
|
|
276
|
+
//#endregion
|
|
277
|
+
//#region src/federation/encoding.d.ts
|
|
278
|
+
declare function b64u(bytes: Uint8Array): string;
|
|
279
|
+
declare function fromB64u(text: string): Buffer;
|
|
280
|
+
declare function sha256Hex(data: string | Uint8Array): string;
|
|
281
|
+
declare function crockford32(bytes: Uint8Array): string;
|
|
282
|
+
//#endregion
|
|
283
|
+
//#region src/federation/fingerprint.d.ts
|
|
284
|
+
declare function fingerprint(signPub: string, sealPub: string): string;
|
|
285
|
+
//#endregion
|
|
286
|
+
//#region src/federation/hlc.d.ts
|
|
287
|
+
declare const MAX_HLC_COUNTER = 999999999;
|
|
288
|
+
interface ParsedHlc {
|
|
289
|
+
ms: number;
|
|
290
|
+
counter: number;
|
|
291
|
+
replica: string;
|
|
292
|
+
}
|
|
293
|
+
declare function parseOpHlc(hlc: string): ParsedHlc | null;
|
|
294
|
+
declare function compareHlc(a: ParsedHlc, b: ParsedHlc): number;
|
|
295
|
+
declare const MAX_CLOCK_LEAD_MS: number;
|
|
296
|
+
/** Whether a reading's wall time is past the bound for the wall time `nowMs`. */
|
|
297
|
+
declare function aheadOfClock(hlc: string, nowMs: number): boolean;
|
|
298
|
+
declare function hlcWallMs(hlc: string): number | null;
|
|
299
|
+
declare class OpClock {
|
|
300
|
+
private readonly replica;
|
|
301
|
+
private readonly now;
|
|
302
|
+
private ms;
|
|
303
|
+
private counter;
|
|
304
|
+
constructor(replica: string, last?: string | null, now?: () => number);
|
|
305
|
+
/** A reading for a change made now, after every reading seen so far. */
|
|
306
|
+
tick(): string;
|
|
307
|
+
/** Moves past a reading from elsewhere, so the next tick sorts after it,
|
|
308
|
+
* unless it is past the bound (FW-R21); false when it refused. */
|
|
309
|
+
observe(remote: string): boolean;
|
|
310
|
+
/** The latest reading, for persisting across restarts. */
|
|
311
|
+
get last(): string;
|
|
312
|
+
}
|
|
313
|
+
//#endregion
|
|
314
|
+
//#region src/federation/jcs.d.ts
|
|
315
|
+
declare class CanonicalizeError extends TypeError {
|
|
316
|
+
name: string;
|
|
317
|
+
}
|
|
318
|
+
declare const MAX_JSON_DEPTH = 256;
|
|
319
|
+
declare function canonicalize(value: unknown): string;
|
|
320
|
+
//#endregion
|
|
321
|
+
//#region src/federation/keys.d.ts
|
|
322
|
+
interface ReplicaKeys {
|
|
323
|
+
signPriv: string;
|
|
324
|
+
signPub: string;
|
|
325
|
+
sealPriv: string;
|
|
326
|
+
sealPub: string;
|
|
327
|
+
}
|
|
328
|
+
declare function generateReplicaKeys(): ReplicaKeys;
|
|
329
|
+
declare function ed25519FromSeed(seed: Uint8Array): {
|
|
330
|
+
signPriv: string;
|
|
331
|
+
signPub: string;
|
|
332
|
+
};
|
|
333
|
+
declare function publicOfPrivate(der: string): string;
|
|
334
|
+
declare function signText(signPriv: string, text: string): string;
|
|
335
|
+
declare function verifyText(signPub: string, text: string, sig: string): boolean;
|
|
336
|
+
//#endregion
|
|
337
|
+
//#region src/federation/seal.d.ts
|
|
338
|
+
declare function sealedAad(replica: string, seq: number, type: string): string;
|
|
339
|
+
declare function sealPayload(input: {
|
|
340
|
+
replica: string;
|
|
341
|
+
seq: number;
|
|
342
|
+
type: 'mail' | 'state' | 'a2a';
|
|
343
|
+
payload: JsonValue;
|
|
344
|
+
recipients: ReadonlyMap<string, string>;
|
|
345
|
+
}): {
|
|
346
|
+
to: string[];
|
|
347
|
+
sealed: Sealed;
|
|
348
|
+
key: Buffer;
|
|
349
|
+
};
|
|
350
|
+
declare function canSealTo(sealPub: string): boolean;
|
|
351
|
+
declare function wrapContentKey(key: Buffer, aad: string, recipient: string, sealPub: string): {
|
|
352
|
+
enc: string;
|
|
353
|
+
ct: string;
|
|
354
|
+
};
|
|
355
|
+
declare function unwrapContentKey(op: FederatedOp, me: string, sealPriv: string): Buffer | null;
|
|
356
|
+
declare function openWithKey(op: FederatedOp, key: Buffer): JsonValue | null;
|
|
357
|
+
declare function openPayload(op: FederatedOp, me: string, sealPriv: string): JsonValue | null;
|
|
358
|
+
//#endregion
|
|
359
|
+
export { type AgentBody, CanonicalizeError, type ChainHead, type ChannelBody, type DocBody, type FederatedOp, type ForwardPayload, type KeyBody, type LegacyAttestation, type LogEntry, MAX_CLOCK_LEAD_MS, MAX_HLC_COUNTER, MAX_JSON_DEPTH, MAX_OP_BYTES, MAX_SEALED_RECIPIENTS, MAX_STATE_ENTRIES, type MailPayload, type MailTarget, type MemoryBody, OP_TYPES, OpClock, type OpHeader, type OpStub, type OpType, type ParsedHlc, type PresenceBody, REPLICA_ID, type ReplicaKeys, type RosterBody, SEALED_TYPES, STUBBABLE_TYPES, type Sealed, type StatePayload, TAG, ZERO_HASH, aheadOfClock, b64u, buildOp, canSealTo, canonicalize, compareHlc, contentHash, crockford32, ed25519FromSeed, fingerprint, fromB64u, generateReplicaKeys, headerOf, hlcWallMs, isStub, opHash, openPayload, openWithKey, parseOpHlc, publicOfPrivate, sealPayload, sealedAad, sha256Hex, signText, stubOf, unwrapContentKey, verifyEntry, verifyText, wrapContentKey };
|
|
360
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/federation/ops.ts","../../src/federation/chain.ts","../../src/federation/encoding.ts","../../src/federation/fingerprint.ts","../../src/federation/hlc.ts","../../src/federation/jcs.ts","../../src/federation/keys.ts","../../src/federation/seal.ts"],"sourcesContent":[],"mappings":"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"}
|