@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.
Files changed (86) hide show
  1. package/README.md +1 -1
  2. package/dist/adapters/index.d.ts +4 -3
  3. package/dist/adapters/index.d.ts.map +1 -1
  4. package/dist/adapters/index.js +2 -1
  5. package/dist/adapters/index.js.map +1 -1
  6. package/dist/audience.d.ts +1 -1
  7. package/dist/audience.d.ts.map +1 -1
  8. package/dist/audience.js +7 -6
  9. package/dist/audience.js.map +1 -1
  10. package/dist/client.d.ts +159 -3
  11. package/dist/client.d.ts.map +1 -1
  12. package/dist/client.js +1112 -102
  13. package/dist/client.js.map +1 -1
  14. package/dist/codec.d.ts +25 -1
  15. package/dist/codec.d.ts.map +1 -1
  16. package/dist/codec.js +44 -0
  17. package/dist/codec.js.map +1 -1
  18. package/dist/crypto/noble.d.ts.map +1 -1
  19. package/dist/crypto/noble.js +19 -1
  20. package/dist/crypto/noble.js.map +1 -1
  21. package/dist/crypto.d.ts +1 -1
  22. package/dist/crypto.d.ts.map +1 -1
  23. package/dist/crypto.js.map +1 -1
  24. package/dist/errors.d.ts +9 -1
  25. package/dist/errors.d.ts.map +1 -1
  26. package/dist/errors.js +2 -1
  27. package/dist/errors.js.map +1 -1
  28. package/dist/identity.d.ts +8 -2
  29. package/dist/identity.d.ts.map +1 -1
  30. package/dist/identity.js +7 -3
  31. package/dist/identity.js.map +1 -1
  32. package/dist/index.d.ts +4 -4
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +2 -2
  35. package/dist/index.js.map +1 -1
  36. package/dist/policy.d.ts +13 -0
  37. package/dist/policy.d.ts.map +1 -1
  38. package/dist/policy.js +12 -1
  39. package/dist/policy.js.map +1 -1
  40. package/dist/rows.d.ts.map +1 -1
  41. package/dist/rows.js +2 -0
  42. package/dist/rows.js.map +1 -1
  43. package/dist/store.d.ts +116 -3
  44. package/dist/store.d.ts.map +1 -1
  45. package/dist/store.js +2 -0
  46. package/dist/store.js.map +1 -1
  47. package/dist/succession.d.ts +108 -0
  48. package/dist/succession.d.ts.map +1 -0
  49. package/dist/succession.js +205 -0
  50. package/dist/succession.js.map +1 -0
  51. package/dist/testing/clock.d.ts.map +1 -1
  52. package/dist/testing/clock.js +1 -0
  53. package/dist/testing/clock.js.map +1 -1
  54. package/dist/testing/fakeHost.d.ts +60 -1
  55. package/dist/testing/fakeHost.d.ts.map +1 -1
  56. package/dist/testing/fakeHost.js +201 -31
  57. package/dist/testing/fakeHost.js.map +1 -1
  58. package/dist/testing/faults.d.ts +7 -3
  59. package/dist/testing/faults.d.ts.map +1 -1
  60. package/dist/testing/faults.js +27 -3
  61. package/dist/testing/faults.js.map +1 -1
  62. package/dist/transactions.d.ts +6 -0
  63. package/dist/transactions.d.ts.map +1 -1
  64. package/dist/transactions.js +11 -5
  65. package/dist/transactions.js.map +1 -1
  66. package/dist/transport.d.ts +66 -2
  67. package/dist/transport.d.ts.map +1 -1
  68. package/package.json +1 -1
  69. package/src/adapters/index.ts +14 -0
  70. package/src/audience.ts +7 -6
  71. package/src/client.ts +1165 -108
  72. package/src/codec.ts +64 -1
  73. package/src/crypto/noble.ts +18 -1
  74. package/src/crypto.ts +1 -0
  75. package/src/errors.ts +13 -1
  76. package/src/identity.ts +13 -3
  77. package/src/index.ts +10 -3
  78. package/src/policy.ts +23 -1
  79. package/src/rows.ts +2 -0
  80. package/src/store.ts +113 -3
  81. package/src/succession.ts +270 -0
  82. package/src/testing/clock.ts +1 -0
  83. package/src/testing/fakeHost.ts +204 -28
  84. package/src/testing/faults.ts +32 -7
  85. package/src/transactions.ts +13 -6
  86. package/src/transport.ts +69 -2
@@ -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
- if (!a)
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.accountByIdentity(toHex(iid)) ?? [...host.accounts.values()].find((x) => x.previousIdentities.has(toHex(iid)));
119
- if (!a)
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.identityId, a.accountName);
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.identityId || !equalBytes(doc.circleId, circleId))
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.identityId, closed: false });
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)?.identityId ?? "")));
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.accountByIdentity(c.ownerIdentityId);
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.accountByIdentity(c.ownerIdentityId);
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.identityId)
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.identityId)
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.vault = { wire: input.newVault, revision: vh.vaultRevision, hash: toHex(vh.hash) };
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.identityId, a.accountName);
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().identityId) };
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.identityId)
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.identityId)
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.identityId)
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.identityId).map((r) => r.certificateHash));
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.identityId)
551
+ if (r.identityId === a.accountId)
385
552
  continue;
386
- const to = host.accountByIdentity(r.identityId)?.accountName ?? r.identityId;
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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"}
@@ -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":"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"}
1
+ {"version":3,"file":"faults.d.ts","sourceRoot":"","sources":["../../src/testing/faults.ts"],"names":[],"mappings":"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"}