@plane31/blind-relay 0.1.3 → 0.3.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/README.md +1 -1
- package/dist/adapters/index.d.ts +4 -3
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +2 -1
- package/dist/adapters/index.js.map +1 -1
- package/dist/audience.d.ts +1 -1
- package/dist/audience.d.ts.map +1 -1
- package/dist/audience.js +7 -6
- package/dist/audience.js.map +1 -1
- package/dist/client.d.ts +159 -3
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +1112 -102
- package/dist/client.js.map +1 -1
- package/dist/codec.d.ts +25 -1
- package/dist/codec.d.ts.map +1 -1
- package/dist/codec.js +44 -0
- package/dist/codec.js.map +1 -1
- package/dist/crypto/noble.d.ts.map +1 -1
- package/dist/crypto/noble.js +19 -1
- package/dist/crypto/noble.js.map +1 -1
- package/dist/crypto.d.ts +1 -1
- package/dist/crypto.d.ts.map +1 -1
- package/dist/crypto.js.map +1 -1
- package/dist/errors.d.ts +9 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +2 -1
- package/dist/errors.js.map +1 -1
- package/dist/identity.d.ts +8 -2
- package/dist/identity.d.ts.map +1 -1
- package/dist/identity.js +7 -3
- package/dist/identity.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/policy.d.ts +13 -0
- package/dist/policy.d.ts.map +1 -1
- package/dist/policy.js +12 -1
- package/dist/policy.js.map +1 -1
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +2 -0
- package/dist/rows.js.map +1 -1
- package/dist/store.d.ts +116 -3
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +2 -0
- package/dist/store.js.map +1 -1
- package/dist/succession.d.ts +108 -0
- package/dist/succession.d.ts.map +1 -0
- package/dist/succession.js +205 -0
- package/dist/succession.js.map +1 -0
- package/dist/testing/clock.d.ts.map +1 -1
- package/dist/testing/clock.js +1 -0
- package/dist/testing/clock.js.map +1 -1
- package/dist/testing/fakeHost.d.ts +60 -1
- package/dist/testing/fakeHost.d.ts.map +1 -1
- package/dist/testing/fakeHost.js +201 -31
- package/dist/testing/fakeHost.js.map +1 -1
- package/dist/testing/faults.d.ts +7 -3
- package/dist/testing/faults.d.ts.map +1 -1
- package/dist/testing/faults.js +27 -3
- package/dist/testing/faults.js.map +1 -1
- package/dist/transactions.d.ts +6 -0
- package/dist/transactions.d.ts.map +1 -1
- package/dist/transactions.js +11 -5
- package/dist/transactions.js.map +1 -1
- package/dist/transport.d.ts +66 -2
- package/dist/transport.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/adapters/index.ts +14 -0
- package/src/audience.ts +7 -6
- package/src/client.ts +1165 -108
- package/src/codec.ts +64 -1
- package/src/crypto/noble.ts +18 -1
- package/src/crypto.ts +1 -0
- package/src/errors.ts +13 -1
- package/src/identity.ts +13 -3
- package/src/index.ts +10 -3
- package/src/policy.ts +23 -1
- package/src/rows.ts +2 -0
- package/src/store.ts +113 -3
- package/src/succession.ts +270 -0
- package/src/testing/clock.ts +1 -0
- package/src/testing/fakeHost.ts +204 -28
- package/src/testing/faults.ts +32 -7
- package/src/transactions.ts +13 -6
- package/src/transport.ts +69 -2
package/dist/testing/fakeHost.js
CHANGED
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
* exported under `@plane31/blind-relay/testing` only.
|
|
6
6
|
*/
|
|
7
7
|
import { equalBytes, fromHex, toHex } from "../bytes.js";
|
|
8
|
-
import { DocumentType, buildResetReceipt, expectType, parseDocument, parseVaultHeader, verifyDocument } from "../codec.js";
|
|
9
|
-
import { bodyHash, identityId, streamId as deriveStreamId } from "../crypto.js";
|
|
8
|
+
import { DocumentType, buildResetReceipt, buildSuccession, expectType, parseDocument, parseVaultHeader, verifyDocument } from "../codec.js";
|
|
9
|
+
import { bodyHash, identityId, randomBytes, streamId as deriveStreamId } from "../crypto.js";
|
|
10
10
|
export class FakeHost {
|
|
11
11
|
now = () => 0n;
|
|
12
12
|
deliveryWindowMs = 86400000n;
|
|
@@ -18,6 +18,22 @@ export class FakeHost {
|
|
|
18
18
|
streams = new Map();
|
|
19
19
|
notifications = [];
|
|
20
20
|
receipts = new Map();
|
|
21
|
+
/** Successions by succession id: the committed document and the certificate hash it bound, for idempotent commits. */
|
|
22
|
+
successionLog = new Map();
|
|
23
|
+
/** Replacement authorizations the product's fresh authentication issued (`authorizeReplacement`), single use. */
|
|
24
|
+
authorizations = new Map();
|
|
25
|
+
/** Sharing preferences per (account id, circle id), with the revision that orders them. */
|
|
26
|
+
preferences = new Map();
|
|
27
|
+
authorizationTtlMs = 300000n;
|
|
28
|
+
successionPageSize = 8;
|
|
29
|
+
circlePageSize = 50;
|
|
30
|
+
/** Re-attest a link under the current operational key when its original signer is no longer it (section 7). */
|
|
31
|
+
reattest = true;
|
|
32
|
+
/** Test switch: the n-th call to listCircles (1-based) fails with a transport error, once. */
|
|
33
|
+
failCircleListAt;
|
|
34
|
+
circleListCalls = 0;
|
|
35
|
+
/** Every getSuccessions call, for tests that check where a peer resumes a chain. */
|
|
36
|
+
successionCalls = [];
|
|
21
37
|
resetKeyList;
|
|
22
38
|
resetSigner;
|
|
23
39
|
/** Test switches. */
|
|
@@ -32,6 +48,54 @@ export class FakeHost {
|
|
|
32
48
|
accountByIdentity(iid) {
|
|
33
49
|
return [...this.accounts.values()].find((a) => a.identityId === iid);
|
|
34
50
|
}
|
|
51
|
+
/** The account an id names today: its account id, its current identity, or an identity it retired. */
|
|
52
|
+
accountByAnyId(id) {
|
|
53
|
+
return [...this.accounts.values()].find((a) => a.accountId === id || a.identityId === id || a.previousIdentities.has(id));
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* The product's fresh authentication, as a test hook: an authorization bound to the proposal
|
|
57
|
+
* (account, succession id, expected certificate, the certificate's hash), single use, expiring.
|
|
58
|
+
*/
|
|
59
|
+
authorizeReplacement(input) {
|
|
60
|
+
const doc = expectType(verifyDocument(input.certificate), DocumentType.AccountDevice);
|
|
61
|
+
const token = randomBytes(32);
|
|
62
|
+
this.authorizations.set(toHex(token), { accountName: input.accountName, successionId: toHex(input.successionId), expectedCertificateHash: toHex(input.expectedCertificateHash), certificateHash: toHex(doc.bodyHash), expiresAt: this.now() + this.authorizationTtlMs, used: false });
|
|
63
|
+
return token;
|
|
64
|
+
}
|
|
65
|
+
resolvedOf(a) {
|
|
66
|
+
const r = { accountName: a.accountName, accountKey: a.accountKey, certificate: a.certificate };
|
|
67
|
+
const page = this.successionPage(a, 0n, this.successionPageSize);
|
|
68
|
+
return {
|
|
69
|
+
...r,
|
|
70
|
+
...(a.resetReceipt ? { resetReceipt: a.resetReceipt } : {}),
|
|
71
|
+
...(page.successions.length ? { successions: page.successions } : {}),
|
|
72
|
+
...(page.nextGeneration !== undefined ? { successionsNext: page.nextGeneration } : {}),
|
|
73
|
+
...(page.rootCertificate ? { rootCertificate: page.rootCertificate } : {})
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
successionPage(a, afterGeneration, limit) {
|
|
77
|
+
const gen = (l) => expectType(parseDocument(l.certificate), DocumentType.AccountDevice).generation;
|
|
78
|
+
const rest = a.successions.filter((l) => gen(l) > afterGeneration).map((l) => this.served(l));
|
|
79
|
+
const page = rest.slice(0, Math.max(1, limit));
|
|
80
|
+
const last = page.at(-1);
|
|
81
|
+
const root = afterGeneration === 0n && page.length && a.rootCertificate ? { rootCertificate: a.rootCertificate } : {};
|
|
82
|
+
return rest.length > page.length && last ? { successions: page, nextGeneration: gen(last), ...root } : { successions: page, ...root };
|
|
83
|
+
}
|
|
84
|
+
/** A link as served: re-attested under the current operational key when its signer changed and re-attestation is on. */
|
|
85
|
+
served(l) {
|
|
86
|
+
const signer = this.resetSigner;
|
|
87
|
+
if (!this.reattest || !signer)
|
|
88
|
+
return l;
|
|
89
|
+
const doc = expectType(parseDocument(l.wire), DocumentType.AccountSuccession);
|
|
90
|
+
if (equalBytes(doc.authorityKeyId, signer.keyId))
|
|
91
|
+
return l;
|
|
92
|
+
const fields = { accountName: doc.accountName, accountId: doc.accountId, previousIdentityId: doc.previousIdentityId, newIdentityId: doc.newIdentityId, previousGeneration: doc.previousGeneration, newGeneration: doc.newGeneration, newCertificateHash: doc.newCertificateHash, successionId: doc.successionId };
|
|
93
|
+
return { wire: buildSuccession({ ...fields, issuedAt: this.now(), authorityKeyId: signer.keyId }, signer.key.secretKey), certificate: l.certificate };
|
|
94
|
+
}
|
|
95
|
+
/** The circle fence: is this certificate the account's current device? A retired device is refused reads too. */
|
|
96
|
+
isCurrentDevice(accountName, certificateHash) {
|
|
97
|
+
return this.accounts.get(accountName)?.certificateHash === certificateHash;
|
|
98
|
+
}
|
|
35
99
|
stream(streamHex, authorIdentityId, accountName) {
|
|
36
100
|
let s = this.streams.get(streamHex);
|
|
37
101
|
if (!s) {
|
|
@@ -107,19 +171,13 @@ export class FakeHost {
|
|
|
107
171
|
async resolveAccounts(names) {
|
|
108
172
|
return names.flatMap((n) => {
|
|
109
173
|
const a = host.accounts.get(n);
|
|
110
|
-
|
|
111
|
-
return [];
|
|
112
|
-
const r = { accountName: n, accountKey: a.accountKey, certificate: a.certificate };
|
|
113
|
-
return [a.resetReceipt ? { ...r, resetReceipt: a.resetReceipt } : r];
|
|
174
|
+
return a ? [host.resolvedOf(a)] : [];
|
|
114
175
|
});
|
|
115
176
|
},
|
|
116
177
|
async resolveIdentities(identityIds) {
|
|
117
178
|
return identityIds.flatMap((iid) => {
|
|
118
|
-
const a = host.
|
|
119
|
-
|
|
120
|
-
return [];
|
|
121
|
-
const r = { accountName: a.accountName, accountKey: a.accountKey, certificate: a.certificate };
|
|
122
|
-
return [a.resetReceipt ? { ...r, resetReceipt: a.resetReceipt } : r];
|
|
179
|
+
const a = host.accountByAnyId(toHex(iid));
|
|
180
|
+
return a ? [host.resolvedOf(a)] : [];
|
|
123
181
|
});
|
|
124
182
|
},
|
|
125
183
|
async getCertificate(hash) {
|
|
@@ -130,18 +188,21 @@ export class FakeHost {
|
|
|
130
188
|
const taken = host.accounts.get(doc.accountName);
|
|
131
189
|
if (taken)
|
|
132
190
|
return equalBytes(taken.certificate, certificate) ? { status: "ALREADY_COMMITTED" } : { status: "CONFLICT" };
|
|
133
|
-
const vh = parseVaultHeader(vault);
|
|
191
|
+
const vh = vault ? parseVaultHeader(vault) : undefined;
|
|
134
192
|
const iid = toHex(identityId(doc.accountName, doc.accountKey));
|
|
135
193
|
host.accounts.set(doc.accountName, {
|
|
136
194
|
accountName: doc.accountName,
|
|
137
195
|
accountKey: doc.accountKey,
|
|
138
196
|
identityId: iid,
|
|
197
|
+
accountId: iid,
|
|
198
|
+
successions: [],
|
|
199
|
+
rootCertificate: undefined,
|
|
139
200
|
certificate,
|
|
140
201
|
certificateHash: toHex(doc.bodyHash),
|
|
141
202
|
generation: doc.generation,
|
|
142
203
|
deviceIds: new Set([toHex(doc.deviceId)]),
|
|
143
204
|
retiredCertificates: new Set(),
|
|
144
|
-
vault: { wire: vault, revision: vh.vaultRevision, hash: toHex(vh.hash) },
|
|
205
|
+
vault: vault && vh ? { wire: vault, revision: vh.vaultRevision, hash: toHex(vh.hash) } : undefined,
|
|
145
206
|
retiredIdentity: false,
|
|
146
207
|
previousIdentities: new Set(),
|
|
147
208
|
resetReceipt: undefined
|
|
@@ -171,7 +232,7 @@ export class FakeHost {
|
|
|
171
232
|
a.deviceIds.add(toHex(doc.deviceId));
|
|
172
233
|
a.vault = { wire: input.newVault, revision: vh.vaultRevision, hash: toHex(vh.hash) };
|
|
173
234
|
host.certificates.set(a.certificateHash, input.newCertificate);
|
|
174
|
-
host.stream(toHex(deriveStreamId(fromHex(a.identityId), doc.deviceId)), a.
|
|
235
|
+
host.stream(toHex(deriveStreamId(fromHex(a.identityId), doc.deviceId)), a.accountId, a.accountName);
|
|
175
236
|
return { status: "COMMITTED" };
|
|
176
237
|
},
|
|
177
238
|
async getVault(name) {
|
|
@@ -203,7 +264,7 @@ export class FakeHost {
|
|
|
203
264
|
if (!current())
|
|
204
265
|
return { status: "UNAUTHORIZED" };
|
|
205
266
|
const doc = expectType(verifyDocument(newSnapshot, a.accountKey), DocumentType.CircleSnapshot);
|
|
206
|
-
if (toHex(doc.ownerIdentityId) !== a.
|
|
267
|
+
if (toHex(doc.ownerIdentityId) !== a.accountId || !equalBytes(doc.circleId, circleId))
|
|
207
268
|
return { status: "UNAUTHORIZED" };
|
|
208
269
|
const key = toHex(circleId);
|
|
209
270
|
const existing = host.circles.get(key);
|
|
@@ -216,10 +277,10 @@ export class FakeHost {
|
|
|
216
277
|
}
|
|
217
278
|
else if (expectedRevision !== 0n || doc.revision !== 1n)
|
|
218
279
|
return { status: "CONFLICT" };
|
|
219
|
-
host.circles.set(key, { snapshot: newSnapshot, revision: doc.revision, hash: toHex(doc.bodyHash), ownerIdentityId: a.
|
|
280
|
+
host.circles.set(key, { snapshot: newSnapshot, revision: doc.revision, hash: toHex(doc.bodyHash), ownerIdentityId: a.accountId, closed: false });
|
|
220
281
|
// Requests for accounts now admitted are cleared.
|
|
221
282
|
const members = new Set(doc.members.map(toHex));
|
|
222
|
-
host.requests.set(key, (host.requests.get(key) ?? []).filter((r) => !members.has(host.accounts.get(r.accountName)?.
|
|
283
|
+
host.requests.set(key, (host.requests.get(key) ?? []).filter((r) => !members.has(host.accounts.get(r.accountName)?.accountId ?? "")));
|
|
223
284
|
return { status: "COMMITTED" };
|
|
224
285
|
},
|
|
225
286
|
async requestJoin(circleId) {
|
|
@@ -233,7 +294,7 @@ export class FakeHost {
|
|
|
233
294
|
list.push({ circleId, accountName: a.accountName, action: "join", requestedAt: host.now() });
|
|
234
295
|
host.requests.set(toHex(circleId), list);
|
|
235
296
|
if (!hadLive) {
|
|
236
|
-
const owner = host.
|
|
297
|
+
const owner = host.accountByAnyId(c.ownerIdentityId);
|
|
237
298
|
if (owner)
|
|
238
299
|
host.notifications.push({ kind: "joinRequest", to: owner.accountName, from: a.accountName, circleId: toHex(circleId) });
|
|
239
300
|
}
|
|
@@ -247,7 +308,7 @@ export class FakeHost {
|
|
|
247
308
|
const list = host.requests.get(toHex(circleId)) ?? [];
|
|
248
309
|
list.push({ circleId, accountName: a.accountName, action: "leave", requestedAt: host.now() });
|
|
249
310
|
host.requests.set(toHex(circleId), list);
|
|
250
|
-
const owner = host.
|
|
311
|
+
const owner = host.accountByAnyId(c.ownerIdentityId);
|
|
251
312
|
if (owner)
|
|
252
313
|
host.notifications.push({ kind: "leaveRequest", to: owner.accountName, from: a.accountName, circleId: toHex(circleId) });
|
|
253
314
|
return { status: "COMMITTED" };
|
|
@@ -255,7 +316,7 @@ export class FakeHost {
|
|
|
255
316
|
async readRequests(circleId) {
|
|
256
317
|
const a = caller();
|
|
257
318
|
const c = host.circles.get(toHex(circleId));
|
|
258
|
-
if (!c || c.ownerIdentityId !== a.
|
|
319
|
+
if (!c || c.ownerIdentityId !== a.accountId)
|
|
259
320
|
return [];
|
|
260
321
|
const cutoff = host.now() - 7n * 86400000n;
|
|
261
322
|
return (host.requests.get(toHex(circleId)) ?? []).filter((r) => r.requestedAt > cutoff);
|
|
@@ -280,10 +341,16 @@ export class FakeHost {
|
|
|
280
341
|
const receipt = buildResetReceipt({ accountName: input.accountName, oldIdentityId: input.expectedOldIdentityId, newIdentityId: newIid, resetId: input.resetId, issuedAt: host.now(), authorityKeyId: host.resetSigner.keyId }, host.resetSigner.key.secretKey);
|
|
281
342
|
host.receipts.set(toHex(input.resetId), receipt);
|
|
282
343
|
for (const c of host.circles.values())
|
|
283
|
-
if (c.ownerIdentityId === a.
|
|
344
|
+
if (c.ownerIdentityId === a.accountId)
|
|
284
345
|
c.closed = true;
|
|
285
|
-
const vh = parseVaultHeader(input.newVault);
|
|
346
|
+
const vh = input.newVault ? parseVaultHeader(input.newVault) : undefined;
|
|
347
|
+
// The whole chain is retired; the reset starts a new account root with an empty chain.
|
|
286
348
|
a.previousIdentities.add(a.identityId);
|
|
349
|
+
a.previousIdentities.add(a.accountId);
|
|
350
|
+
for (const l of a.successions)
|
|
351
|
+
a.previousIdentities.add(toHex(expectType(parseDocument(l.wire), DocumentType.AccountSuccession).previousIdentityId));
|
|
352
|
+
a.successions = [];
|
|
353
|
+
a.rootCertificate = undefined;
|
|
287
354
|
a.resetReceipt = receipt;
|
|
288
355
|
a.retiredCertificates.add(a.certificateHash);
|
|
289
356
|
a.accountKey = doc.accountKey;
|
|
@@ -292,10 +359,110 @@ export class FakeHost {
|
|
|
292
359
|
a.certificateHash = toHex(doc.bodyHash);
|
|
293
360
|
a.generation = doc.generation;
|
|
294
361
|
a.deviceIds.add(toHex(doc.deviceId));
|
|
295
|
-
a.
|
|
362
|
+
a.accountId = toHex(newIid);
|
|
363
|
+
a.vault = input.newVault && vh ? { wire: input.newVault, revision: vh.vaultRevision, hash: toHex(vh.hash) } : undefined;
|
|
296
364
|
host.certificates.set(a.certificateHash, input.newCertificate);
|
|
297
|
-
host.stream(toHex(deriveStreamId(newIid, doc.deviceId)), a.
|
|
365
|
+
host.stream(toHex(deriveStreamId(newIid, doc.deviceId)), a.accountId, a.accountName);
|
|
298
366
|
return { status: "COMMITTED", receipt };
|
|
367
|
+
},
|
|
368
|
+
async succeedAccount(input) {
|
|
369
|
+
// The succession id answers first: a device retrying after a lost response finds its
|
|
370
|
+
// proposal committed and its token spent, and must get the document, not UNAUTHORIZED.
|
|
371
|
+
const doc = expectType(verifyDocument(input.newCertificate), DocumentType.AccountDevice);
|
|
372
|
+
const certHash = toHex(doc.bodyHash);
|
|
373
|
+
const known = host.successionLog.get(toHex(input.successionId));
|
|
374
|
+
if (known)
|
|
375
|
+
return known.certificateHash === certHash && known.accountName === input.accountName ? { status: "ALREADY_COMMITTED", succession: known.wire } : { status: "UNAUTHORIZED" };
|
|
376
|
+
const a = host.accounts.get(input.accountName);
|
|
377
|
+
if (!a || doc.accountName !== a.accountName)
|
|
378
|
+
return { status: "UNAUTHORIZED" };
|
|
379
|
+
// The authorization: issued for this proposal, unspent, unexpired.
|
|
380
|
+
const auth = host.authorizations.get(toHex(input.authorization));
|
|
381
|
+
if (!auth || auth.used || auth.expiresAt < host.now() || auth.accountName !== a.accountName || auth.successionId !== toHex(input.successionId) || auth.expectedCertificateHash !== toHex(input.expectedCertificateHash) || auth.certificateHash !== certHash) {
|
|
382
|
+
return { status: "UNAUTHORIZED" };
|
|
383
|
+
}
|
|
384
|
+
if (a.certificateHash !== toHex(input.expectedCertificateHash))
|
|
385
|
+
return { status: "CONFLICT", current: a.certificate };
|
|
386
|
+
if (equalBytes(doc.accountKey, a.accountKey) || doc.generation !== a.generation + 1n || a.deviceIds.has(toHex(doc.deviceId)))
|
|
387
|
+
return { status: "UNAUTHORIZED" };
|
|
388
|
+
if (!host.resetSigner)
|
|
389
|
+
return { status: "PERMANENT_FAILURE" };
|
|
390
|
+
const newIid = identityId(doc.accountName, doc.accountKey);
|
|
391
|
+
const wire = buildSuccession({
|
|
392
|
+
accountName: a.accountName,
|
|
393
|
+
accountId: fromHex(a.accountId),
|
|
394
|
+
previousIdentityId: fromHex(a.identityId),
|
|
395
|
+
newIdentityId: newIid,
|
|
396
|
+
previousGeneration: a.generation,
|
|
397
|
+
newGeneration: doc.generation,
|
|
398
|
+
newCertificateHash: doc.bodyHash,
|
|
399
|
+
successionId: input.successionId,
|
|
400
|
+
issuedAt: host.now(),
|
|
401
|
+
authorityKeyId: host.resetSigner.keyId
|
|
402
|
+
}, host.resetSigner.key.secretKey);
|
|
403
|
+
auth.used = true;
|
|
404
|
+
host.successionLog.set(toHex(input.successionId), { accountName: a.accountName, certificateHash: certHash, wire });
|
|
405
|
+
if (a.successions.length === 0)
|
|
406
|
+
a.rootCertificate = a.certificate;
|
|
407
|
+
a.successions.push({ wire, certificate: input.newCertificate });
|
|
408
|
+
a.previousIdentities.add(a.identityId);
|
|
409
|
+
a.retiredCertificates.add(a.certificateHash);
|
|
410
|
+
a.accountKey = doc.accountKey;
|
|
411
|
+
a.identityId = toHex(newIid);
|
|
412
|
+
a.certificate = input.newCertificate;
|
|
413
|
+
a.certificateHash = certHash;
|
|
414
|
+
a.generation = doc.generation;
|
|
415
|
+
a.deviceIds.add(toHex(doc.deviceId));
|
|
416
|
+
if (input.newVault) {
|
|
417
|
+
const vh = parseVaultHeader(input.newVault);
|
|
418
|
+
a.vault = { wire: input.newVault, revision: vh.vaultRevision, hash: toHex(vh.hash) };
|
|
419
|
+
}
|
|
420
|
+
host.certificates.set(certHash, input.newCertificate);
|
|
421
|
+
host.stream(toHex(deriveStreamId(newIid, doc.deviceId)), a.accountId, a.accountName);
|
|
422
|
+
return { status: "COMMITTED", succession: wire };
|
|
423
|
+
},
|
|
424
|
+
async getSuccessions(accountId, afterGeneration, limit) {
|
|
425
|
+
host.successionCalls.push({ accountId: toHex(accountId), afterGeneration, limit });
|
|
426
|
+
const a = host.accountByAnyId(toHex(accountId));
|
|
427
|
+
if (!a || a.accountId !== toHex(accountId))
|
|
428
|
+
return { successions: [] };
|
|
429
|
+
return host.successionPage(a, afterGeneration, limit);
|
|
430
|
+
},
|
|
431
|
+
async listCircles(cursor) {
|
|
432
|
+
const a = caller();
|
|
433
|
+
if (host.failCircleListAt !== undefined && ++host.circleListCalls === host.failCircleListAt) {
|
|
434
|
+
host.failCircleListAt = undefined;
|
|
435
|
+
throw new Error("transport down");
|
|
436
|
+
}
|
|
437
|
+
if (!current())
|
|
438
|
+
return { circles: [] };
|
|
439
|
+
const mine = [];
|
|
440
|
+
for (const [key, c] of [...host.circles].sort(([x], [y]) => (x < y ? -1 : x > y ? 1 : 0))) {
|
|
441
|
+
if (cursor !== undefined && key <= cursor)
|
|
442
|
+
continue;
|
|
443
|
+
const snap = expectType(parseDocument(c.snapshot), DocumentType.CircleSnapshot);
|
|
444
|
+
const pending = (host.requests.get(key) ?? []).some((r) => r.accountName === a.accountName && r.action === "join");
|
|
445
|
+
const role = c.ownerIdentityId === a.accountId ? "owner" : snap.members.some((m) => toHex(m) === a.accountId) ? "member" : pending ? "pending" : undefined;
|
|
446
|
+
if (!role)
|
|
447
|
+
continue;
|
|
448
|
+
const pref = host.preferences.get(`${a.accountId}:${key}`);
|
|
449
|
+
mine.push({ circleId: fromHex(key), ownerAccountId: fromHex(c.ownerIdentityId), role, snapshot: c.closed ? undefined : c.snapshot, enabled: pref?.enabled, preferenceRevision: pref?.revision ?? 0n });
|
|
450
|
+
}
|
|
451
|
+
const page = mine.slice(0, Math.max(1, host.circlePageSize));
|
|
452
|
+
const last = page.at(-1);
|
|
453
|
+
return mine.length > page.length && last ? { circles: page, cursor: toHex(last.circleId) } : { circles: page };
|
|
454
|
+
},
|
|
455
|
+
async setSharingPreference(circleId, enabled, expectedRevision) {
|
|
456
|
+
const a = caller();
|
|
457
|
+
if (!current())
|
|
458
|
+
return { status: "UNAUTHORIZED", revision: 0n };
|
|
459
|
+
const key = `${a.accountId}:${toHex(circleId)}`;
|
|
460
|
+
const cur = host.preferences.get(key) ?? { enabled: false, revision: 0n };
|
|
461
|
+
if (cur.revision !== expectedRevision)
|
|
462
|
+
return { status: "CONFLICT", revision: cur.revision, enabled: cur.enabled };
|
|
463
|
+
const next = { enabled, revision: cur.revision + 1n };
|
|
464
|
+
host.preferences.set(key, next);
|
|
465
|
+
return { status: "COMMITTED", revision: next.revision };
|
|
299
466
|
}
|
|
300
467
|
};
|
|
301
468
|
const relay = {
|
|
@@ -312,12 +479,12 @@ export class FakeHost {
|
|
|
312
479
|
const e = s?.epochs.get(epoch);
|
|
313
480
|
if (!e)
|
|
314
481
|
return undefined;
|
|
315
|
-
return { manifest: e.manifest, wrap: e.wraps.get(caller().
|
|
482
|
+
return { manifest: e.manifest, wrap: e.wraps.get(caller().accountId) };
|
|
316
483
|
},
|
|
317
484
|
async publishEpoch({ streamId, expectedEpoch, manifest, wraps }) {
|
|
318
485
|
const a = caller();
|
|
319
486
|
const s = host.streams.get(toHex(streamId));
|
|
320
|
-
if (!s || s.authorIdentityId !== a.
|
|
487
|
+
if (!s || s.authorIdentityId !== a.accountId)
|
|
321
488
|
return { status: "UNAUTHORIZED" };
|
|
322
489
|
if (!current())
|
|
323
490
|
return { status: "UNAUTHORIZED" };
|
|
@@ -333,7 +500,7 @@ export class FakeHost {
|
|
|
333
500
|
s.currentEpoch = doc.epoch;
|
|
334
501
|
s.currentManifestHash = toHex(doc.bodyHash);
|
|
335
502
|
for (const r of rows) {
|
|
336
|
-
if (r.identityId === a.
|
|
503
|
+
if (r.identityId === a.accountId)
|
|
337
504
|
continue;
|
|
338
505
|
if (!s.subscriptions.has(r.certificateHash))
|
|
339
506
|
s.subscriptions.set(r.certificateHash, { identityId: r.identityId, cursor: s.tail, startSeq: s.tail });
|
|
@@ -349,7 +516,7 @@ export class FakeHost {
|
|
|
349
516
|
const a = caller();
|
|
350
517
|
const rec = expectType(parseDocument(wire), DocumentType.EncryptedRecord);
|
|
351
518
|
const s = host.streams.get(toHex(rec.streamId));
|
|
352
|
-
if (!s || s.authorIdentityId !== a.
|
|
519
|
+
if (!s || s.authorIdentityId !== a.accountId)
|
|
353
520
|
return { status: "UNAUTHORIZED" };
|
|
354
521
|
if (!current())
|
|
355
522
|
return { status: "SUPERSEDED_DEVICE" };
|
|
@@ -375,15 +542,15 @@ export class FakeHost {
|
|
|
375
542
|
const seq = ++s.tail;
|
|
376
543
|
const acceptedAt = host.now() > s.lastAcceptedAt ? host.now() : s.lastAcceptedAt;
|
|
377
544
|
s.lastAcceptedAt = acceptedAt;
|
|
378
|
-
const required = new Set(epoch.rows.filter((r) => r.identityId !== a.
|
|
545
|
+
const required = new Set(epoch.rows.filter((r) => r.identityId !== a.accountId).map((r) => r.certificateHash));
|
|
379
546
|
s.records.set(seq, { recordId: id, wire, acceptedAt, epoch: rec.epoch, counter: rec.counter, kind: rec.headerClass, required });
|
|
380
547
|
s.highWater = { epoch: rec.epoch, counter: rec.counter };
|
|
381
548
|
const outcome = { status: "ACCEPTED", deliverySeq: seq };
|
|
382
549
|
s.lastAppend = { recordId: id, hash, seq, at: acceptedAt, outcome };
|
|
383
550
|
for (const r of epoch.rows) {
|
|
384
|
-
if (r.identityId === a.
|
|
551
|
+
if (r.identityId === a.accountId)
|
|
385
552
|
continue;
|
|
386
|
-
const to = host.
|
|
553
|
+
const to = host.accountByAnyId(r.identityId)?.accountName ?? r.identityId;
|
|
387
554
|
// By header class, as the test profile declares them: 1 is a visible notification, 2 is
|
|
388
555
|
// silent and needs no wake-up, anything else is a wake-up. The host never sees the kind.
|
|
389
556
|
if (rec.headerClass !== 2)
|
|
@@ -407,6 +574,9 @@ export class FakeHost {
|
|
|
407
574
|
},
|
|
408
575
|
async readRecords(streamId, afterSeq, limit) {
|
|
409
576
|
const s = host.streams.get(toHex(streamId));
|
|
577
|
+
// The fence: a retired device reads nothing more (amendment A1, host rules).
|
|
578
|
+
if (!host.isCurrentDevice(accountName, callerCert))
|
|
579
|
+
throw new Error("SUPERSEDED_DEVICE");
|
|
410
580
|
if (!s)
|
|
411
581
|
return { records: [], nextSeq: afterSeq, tail: 0n, expiredThrough: 0n, committedCursor: 0n };
|
|
412
582
|
if (afterSeq > s.tail)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fakeHost.js","sourceRoot":"","sources":["../../src/testing/fakeHost.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fakeHost.js","sourceRoot":"","sources":["../../src/testing/fakeHost.ts"],"names":[],"mappings":"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"}
|
package/dist/testing/faults.d.ts
CHANGED
|
@@ -37,8 +37,8 @@ export declare class FaultyStore implements Store {
|
|
|
37
37
|
private die;
|
|
38
38
|
private alive;
|
|
39
39
|
}
|
|
40
|
-
export type MutationName = "registerAccount" | "activateDevice" | "publishVault" | "publishOwnedCircle" | "requestJoin" | "requestLeave" | "resetAccount" | "publishEpoch" | "appendRecord" | "ackThrough";
|
|
41
|
-
export type ServedKind = "certificate" | "snapshot" | "vault" | "manifest" | "wrap" | "record" | "keyList" | "receipt";
|
|
40
|
+
export type MutationName = "registerAccount" | "activateDevice" | "publishVault" | "publishOwnedCircle" | "requestJoin" | "requestLeave" | "resetAccount" | "succeedAccount" | "setSharingPreference" | "publishEpoch" | "appendRecord" | "ackThrough";
|
|
41
|
+
export type ServedKind = "certificate" | "snapshot" | "vault" | "manifest" | "wrap" | "record" | "keyList" | "receipt" | "succession";
|
|
42
42
|
export interface MaliciousKnobs {
|
|
43
43
|
/** Mutations whose next response is lost after the host committed it (each name is consumed once). */
|
|
44
44
|
readonly loseResponseOf: Set<MutationName>;
|
|
@@ -46,8 +46,10 @@ export interface MaliciousKnobs {
|
|
|
46
46
|
readonly refuse: Set<MutationName>;
|
|
47
47
|
/** Mutations whose next response waits for the given promise after the host committed (consumed once). */
|
|
48
48
|
readonly hold: Map<MutationName, Promise<void>>;
|
|
49
|
+
/** Called when a held mutation has reached its gate (the host has answered; the response is being held), so a test can act at exactly that point. */
|
|
50
|
+
onHeld?: (name: MutationName) => void;
|
|
49
51
|
/** Reads that answer "nothing" while present. */
|
|
50
|
-
readonly withhold: Set<"snapshots" | "epochs" | "records" | "requests" | "currentEpoch" | "keyList" | "certificates">;
|
|
52
|
+
readonly withhold: Set<"snapshots" | "epochs" | "records" | "requests" | "currentEpoch" | "keyList" | "certificates" | "successions" | "circleList" | "subscriptions">;
|
|
51
53
|
/** Older documents served instead of the current ones. */
|
|
52
54
|
readonly replay: {
|
|
53
55
|
vault?: Uint8Array;
|
|
@@ -88,6 +90,8 @@ export declare class MaliciousTransport implements Transport {
|
|
|
88
90
|
constructor(inner: Transport);
|
|
89
91
|
private serve;
|
|
90
92
|
private mutate;
|
|
93
|
+
/** A resolved account as served: a forked or tampered certificate, and a tampered chain, where the knobs say so. */
|
|
94
|
+
private servedAccount;
|
|
91
95
|
private wrapDirectory;
|
|
92
96
|
private wrapRelay;
|
|
93
97
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"faults.d.ts","sourceRoot":"","sources":["../../src/testing/faults.ts"],"names":[],"mappings":"AASA,OAAO,EAAc,KAAK,KAAK,EAAE,KAAK,EAAE,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"faults.d.ts","sourceRoot":"","sources":["../../src/testing/faults.ts"],"names":[],"mappings":"AASA,OAAO,EAAc,KAAK,KAAK,EAAE,KAAK,EAAE,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,KAAK,EACsB,SAAS,EAAmD,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAIxI,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG,aAAa,CAAC;AAExD,MAAM,WAAW,SAAS;IACxB,qGAAqG;IACrG,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,4GAA4G;IAC5G,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;CAC5B;AAED,iFAAiF;AACjF,qBAAa,cAAe,SAAQ,KAAK;IAErC,QAAQ,CAAC,EAAE,EAAE,MAAM;IACnB,QAAQ,CAAC,KAAK,EAAE,UAAU;gBADjB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,UAAU;CAK7B;AAED,UAAU,YAAY;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,cAAc,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,CAAC;CACtC;AAED;;;;GAIG;AACH,qBAAa,WAAY,YAAW,KAAK;IAIrC,QAAQ,CAAC,KAAK,EAAE,KAAK;IAErB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;IAL7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;gBAG5B,KAAK,EAAE,KAAK,EACrB,IAAI,CAAC,EAAE,SAAS,EACC,SAAS,CAAC,GAAE,MAAM,KAAK,aAAA,EACxC,OAAO,CAAC,EAAE,YAAY;IAKxB,IAAI,OAAO,IAAI,cAAc,GAAG,SAAS,CAExC;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAEK,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAa7C,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAKhF,qDAAqD;IACrD,IAAI,IAAI,WAAW;IAKnB,OAAO,CAAC,GAAG;IAKX,OAAO,CAAC,KAAK;CAGd;AAID,MAAM,MAAM,YAAY,GAAG,iBAAiB,GAAG,gBAAgB,GAAG,cAAc,GAAG,oBAAoB,GAAG,aAAa,GAAG,cAAc,GAAG,cAAc,GAAG,gBAAgB,GAAG,sBAAsB,GAAG,cAAc,GAAG,cAAc,GAAG,YAAY,CAAC;AAEvP,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,YAAY,CAAC;AAEtI,MAAM,WAAW,cAAc;IAC7B,sGAAsG;IACtG,QAAQ,CAAC,cAAc,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;IAC3C,6FAA6F;IAC7F,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;IACnC,0GAA0G;IAC1G,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAChD,qJAAqJ;IACrJ,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACtC,iDAAiD;IACjD,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,cAAc,GAAG,SAAS,GAAG,cAAc,GAAG,aAAa,GAAG,YAAY,GAAG,eAAe,CAAC,CAAC;IACvK,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,EAAE;QACf,KAAK,CAAC,EAAE,UAAU,CAAC;QACnB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACnC,OAAO,CAAC,EAAE,UAAU,CAAC;QACrB,YAAY,CAAC,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,YAAY,EAAE,UAAU,CAAA;SAAE,CAAC;KAC5D,CAAC;IACF,+GAA+G;IAC/G,QAAQ,CAAC,IAAI,EAAE;QACb,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACnC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACnC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACjC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;KACvC,CAAC;IACF,2FAA2F;IAC3F,SAAS,EAAE,OAAO,CAAC;IACnB,qDAAqD;IACrD,OAAO,EAAE,OAAO,CAAC;IACjB,2DAA2D;IAC3D,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;CAClC;AAED,wBAAgB,UAAU,IAAI,cAAc,CAY3C;AASD;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,SAAS;IAQtC,OAAO,CAAC,QAAQ,CAAC,KAAK;IAPlC,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAgB;IAC9C,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAM;IAC9B,mEAAmE;IACnE,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,CAAM;IACrC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;gBAEO,KAAK,EAAE,SAAS;IAK7C,OAAO,CAAC,KAAK;YAKC,MAAM;IAqBpB,oHAAoH;IACpH,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,aAAa;IAoErB,OAAO,CAAC,SAAS;CA4DlB;AAID,kFAAkF;AAClF,wBAAgB,SAAS,CAAC,CAAC,EAAE,UAAU,GAAG,SAAS,EAAE,CAAC,EAAE,UAAU,GAAG,SAAS,GAAG,OAAO,CAEvF"}
|