@agentunion/fastaun 0.5.21 → 0.5.23

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 (75) hide show
  1. package/CHANGELOG.md +58 -1
  2. package/_packed_docs/CHANGELOG.md +58 -1
  3. package/_packed_docs/INDEX.md +469 -453
  4. package/_packed_docs/KITE_DOCS_GUIDE.md +169 -164
  5. package/_packed_docs/aun/345/210/206/345/270/203/345/274/217/346/265/213/350/257/225/350/277/220/350/241/214/346/214/207/345/215/227.md +307 -67
  6. package/_packed_docs/aun/346/265/213/350/257/225/350/277/220/350/241/214/346/214/207/345/215/227.md +41 -15
  7. package/_packed_docs/protocol/06-/346/234/215/345/212/241/345/215/217/350/256/256.md +5 -5
  8. package/_packed_docs/protocol/11-Storage-/345/255/220/345/215/217/350/256/256.md +30 -8
  9. package/_packed_docs/protocol/Ownership/345/215/217/350/256/256/345/256/232/344/271/2112.1.md +669 -666
  10. package/_packed_docs/sdk/0.5.22-SDK/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +212 -0
  11. package/_packed_docs/sdk/0.5.22-SDK/345/274/200/345/217/221/344/270/216/347/247/273/346/244/215/346/214/207/345/215/227.md +199 -0
  12. package/_packed_docs/sdk/06-API/346/211/213/345/206/214.md +16 -0
  13. package/_packed_docs/sdk/09-group-rpc-manual.md +10 -0
  14. package/_packed_docs/sdk/09-storage-rpc-manual.md +64 -7
  15. package/_packed_docs/sdk/09-/345/207/255/350/257/201/346/234/215/345/212/241RPC/346/211/213/345/206/214.md +3 -1
  16. package/_packed_docs/sdk/09-/347/273/204/347/273/207/346/234/215/345/212/241RPC/346/211/213/345/206/214.md +2 -0
  17. package/_packed_docs/sdk/AUN_DOCS_GUIDE.md +138 -134
  18. package/_packed_docs/sdk/INDEX.md +255 -239
  19. package/_packed_docs/sdk/Ownership-SDK/347/274/226/346/216/222/346/214/207/345/215/2272.1.md +939 -930
  20. package/_packed_docs/sdk/Ownership2.1-SDK/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +312 -363
  21. package/_packed_docs/sdk/Ownership2.1-SDK/345/274/200/345/217/221/344/270/216/347/247/273/346/244/215/346/214/207/345/215/227.md +322 -553
  22. package/_packed_docs/sdk/Ownership2.1-TDD/345/210/206/351/230/266/346/256/265/345/256/236/346/226/275/350/256/241/345/210/222.md +4 -4
  23. package/_packed_docs/sdk/Ownership2.1/350/257/246/347/273/206/350/256/276/350/256/241.md +484 -480
  24. package/_packed_docs/sdk//345/207/255/350/257/201/344/270/216/347/273/204/347/273/207/346/234/215/345/212/241SDK/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +190 -97
  25. package/_packed_docs/sdk//345/207/255/350/257/201/344/270/216/347/273/204/347/273/207/346/234/215/345/212/241SDK/345/274/200/345/217/221/344/270/216/347/247/273/346/244/215/346/214/207/345/215/227.md +158 -127
  26. package/dist/agent-md.d.ts +16 -2
  27. package/dist/agent-md.js +59 -23
  28. package/dist/agent-md.js.map +1 -1
  29. package/dist/aid-store.d.ts +1 -0
  30. package/dist/aid-store.js +43 -8
  31. package/dist/aid-store.js.map +1 -1
  32. package/dist/auth.d.ts +7 -0
  33. package/dist/auth.js +222 -70
  34. package/dist/auth.js.map +1 -1
  35. package/dist/client/delivery.d.ts +28 -0
  36. package/dist/client/delivery.js +399 -44
  37. package/dist/client/delivery.js.map +1 -1
  38. package/dist/client/group-state.js +3 -0
  39. package/dist/client/group-state.js.map +1 -1
  40. package/dist/client/rpc-pipeline.js +28 -2
  41. package/dist/client/rpc-pipeline.js.map +1 -1
  42. package/dist/client/v2-e2ee.js +109 -39
  43. package/dist/client/v2-e2ee.js.map +1 -1
  44. package/dist/client.d.ts +3 -0
  45. package/dist/client.js +114 -26
  46. package/dist/client.js.map +1 -1
  47. package/dist/group-fs.d.ts +1 -0
  48. package/dist/group-fs.js +37 -19
  49. package/dist/group-fs.js.map +1 -1
  50. package/dist/org-protocol.d.ts +11 -0
  51. package/dist/org-protocol.js +154 -19
  52. package/dist/org-protocol.js.map +1 -1
  53. package/dist/ownership-v21.d.ts +21 -3
  54. package/dist/ownership-v21.js +135 -37
  55. package/dist/ownership-v21.js.map +1 -1
  56. package/dist/ownership-workflow.d.ts +7 -2
  57. package/dist/ownership-workflow.js +173 -17
  58. package/dist/ownership-workflow.js.map +1 -1
  59. package/dist/storage/lowlevel.d.ts +6 -0
  60. package/dist/storage/lowlevel.js +24 -7
  61. package/dist/storage/lowlevel.js.map +1 -1
  62. package/dist/storage/read-cache.d.ts +70 -0
  63. package/dist/storage/read-cache.js +625 -0
  64. package/dist/storage/read-cache.js.map +1 -0
  65. package/dist/storage/vfs.d.ts +2 -0
  66. package/dist/storage/vfs.js +50 -15
  67. package/dist/storage/vfs.js.map +1 -1
  68. package/dist/tools/cross-sdk-agent.d.ts +21 -1
  69. package/dist/tools/cross-sdk-agent.js +301 -19
  70. package/dist/tools/cross-sdk-agent.js.map +1 -1
  71. package/dist/transport.js +6 -2
  72. package/dist/transport.js.map +1 -1
  73. package/dist/version.d.ts +1 -1
  74. package/dist/version.js +1 -1
  75. package/package.json +1 -1
@@ -2,6 +2,7 @@ import type { DownloadResult, StorageRaw } from './storage/types.js';
2
2
  import type { RpcParams, RpcResult } from './types.js';
3
3
  export interface GroupFSRpcClient {
4
4
  aid?: string | null;
5
+ aunPath?: string | null;
5
6
  call(method: string, params?: RpcParams): Promise<RpcResult>;
6
7
  }
7
8
  type GroupFSSigningAID = {
package/dist/group-fs.js CHANGED
@@ -3,6 +3,7 @@ import { mkdir, readFile, rename, stat, unlink, writeFile } from 'node:fs/promis
3
3
  import { basename, dirname, extname, join } from 'node:path';
4
4
  import { mapStorageError, StorageConflictError, StorageError, StorageExistsError, StorageIsADirectoryError } from './storage/errors.js';
5
5
  import { StorageLowLevel } from './storage/lowlevel.js';
6
+ import { invalidateStorageReadCache, storageReadCache } from './storage/read-cache.js';
6
7
  import { contentTypeForData } from './storage/vfs.js';
7
8
  const WINDOWS_DRIVE_RE = /^[A-Za-z]:[\\/]/;
8
9
  const GROUP_REF_RE = /^[^:/\\][^:]*:\//;
@@ -150,7 +151,11 @@ export class GroupFSVFS {
150
151
  }
151
152
  async call(method, params, path = '') {
152
153
  try {
153
- return await this.client.call(method, await this.prepareParams(params ?? {}));
154
+ const { noCache, no_cache, ...options } = params ?? {};
155
+ const prepared = await this.prepareParams(options);
156
+ const result = await storageReadCache(this.client).metadata(method, prepared, Boolean(noCache ?? no_cache), () => this.client.call(method, prepared));
157
+ invalidateStorageReadCache(this.client, method);
158
+ return result;
154
159
  }
155
160
  catch (exc) {
156
161
  throw mapStorageError(exc, path);
@@ -395,33 +400,46 @@ export class GroupFSVFS {
395
400
  force: undefined,
396
401
  verify_hash: undefined,
397
402
  onProgress: undefined,
403
+ noCache: undefined,
404
+ no_cache: undefined,
405
+ });
406
+ const prepared = await this.prepareParams(ticketParams);
407
+ const body = await storageReadCache(this.client).body('group.fs.create_download_ticket', prepared, Boolean(options.noCache ?? options.no_cache), async (ifSha256) => {
408
+ const ticket = await this.call('group.fs.create_download_ticket', {
409
+ ...prepared,
410
+ ...(ifSha256 ? { if_sha256: ifSha256 } : {}),
411
+ }, groupPath);
412
+ if (!isRecord(ticket)) {
413
+ throw new StorageError('group.fs.create_download_ticket returned invalid response', 'ESTORAGE', groupPath, ticket);
414
+ }
415
+ if (ticket.not_modified === true) {
416
+ return { sha256: stringValue(ticket.sha256), metadata: ticket, notModified: true };
417
+ }
418
+ const downloadUrl = stringValue(ticket.download_url ?? ticket.url);
419
+ if (!downloadUrl) {
420
+ throw new StorageError('group.fs.create_download_ticket did not return download_url', 'ESTORAGE', groupPath, ticket);
421
+ }
422
+ const data = await this.lowlevel.httpGet(downloadUrl, bearerHeaders(this.client));
423
+ const expectedSha = stringValue(ticket.sha256);
424
+ return { data, sha256: expectedSha || sha256Hex(data), metadata: ticket };
398
425
  });
399
- const ticket = await this.call('group.fs.create_download_ticket', ticketParams, groupPath);
400
- if (!isRecord(ticket)) {
401
- throw new StorageError('group.fs.create_download_ticket returned invalid response', 'ESTORAGE', groupPath, ticket);
402
- }
403
- const downloadUrl = stringValue(ticket.download_url ?? ticket.url);
404
- if (!downloadUrl) {
405
- throw new StorageError('group.fs.create_download_ticket did not return download_url', 'ESTORAGE', groupPath, ticket);
406
- }
407
426
  let targetPath = initialTargetPath;
408
427
  const targetInfo = await statOrNull(targetPath);
409
428
  if (targetInfo?.isDirectory()) {
410
- const fileName = stringValue(ticket.file_name ?? ticket.name) || filenameFromGroupPath(groupPath);
429
+ const fileName = stringValue(body.metadata.file_name ?? body.metadata.name) || filenameFromGroupPath(groupPath);
411
430
  targetPath = join(targetPath, fileName);
412
431
  const fileInfo = await statOrNull(targetPath);
413
432
  if (fileInfo && !options.force) {
414
433
  throw new StorageExistsError(`local path already exists: ${targetPath}`, 'EEXIST', targetPath);
415
434
  }
416
435
  }
417
- const data = await this.lowlevel.httpGet(downloadUrl, bearerHeaders(this.client));
418
- options.onProgress?.(data.byteLength, data.byteLength);
419
- const expectedSha = stringValue(ticket.sha256);
420
- const actualSha = sha256Hex(data);
421
- const verified = !options.verify_hash || !expectedSha || actualSha.toLowerCase() === expectedSha.toLowerCase();
422
- if (options.verify_hash && !verified) {
423
- throw new StorageConflictError('download hash verification failed', 'ECONFLICT', groupPath, ticket);
436
+ const { data } = body;
437
+ const hint = body.metadata.read_cache;
438
+ const cacheVerified = isRecord(hint) && hint.inline === true && hint.reusable === true && /^[0-9a-f]{64}$/.test(body.sha256);
439
+ if (options.verify_hash && !cacheVerified && body.sha256 && sha256Hex(data).toLowerCase() !== body.sha256.toLowerCase()) {
440
+ throw new StorageConflictError('download hash verification failed', 'ECONFLICT', groupPath, body.metadata);
424
441
  }
442
+ options.onProgress?.(data.byteLength, data.byteLength);
425
443
  await mkdir(dirname(targetPath), { recursive: true });
426
444
  if (options.force) {
427
445
  const tempPath = join(dirname(targetPath), `.${basename(targetPath)}.${Date.now()}.${Math.random().toString(16).slice(2)}.tmp`);
@@ -461,8 +479,8 @@ export class GroupFSVFS {
461
479
  path: groupPath,
462
480
  localPath: targetPath,
463
481
  size: data.byteLength,
464
- sha256: expectedSha || actualSha,
465
- verified,
482
+ sha256: body.sha256,
483
+ verified: true,
466
484
  };
467
485
  }
468
486
  }
@@ -1 +1 @@
1
- {"version":3,"file":"group-fs.js","sourceRoot":"","sources":["../src/group-fs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"group-fs.js","sourceRoot":"","sources":["../src/group-fs.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,7 @@ type MembershipImportGuard = {
15
15
  };
16
16
  export interface CredentialRenewalPorts {
17
17
  atomicCheckpointSave?(): boolean;
18
+ queryContext?(): string;
18
19
  currentAid(): string;
19
20
  loadRevocations?(aid: string): RenewalObject;
20
21
  saveRevocations?(aid: string, state: RenewalObject, guard?: MembershipImportGuard): void | Promise<void>;
@@ -27,10 +28,18 @@ export interface CredentialRenewalPorts {
27
28
  }
28
29
  export declare class CredentialRenewal {
29
30
  private tail;
31
+ private queryEpoch;
32
+ private readonly verifiedQueries;
33
+ private readonly queryFlights;
30
34
  private readonly ports;
31
35
  private scanGuard?;
32
36
  constructor(ports: CredentialRenewalPorts);
33
37
  private checkScan;
38
+ private queryScope;
39
+ invalidateQueries(): void;
40
+ private invalidateMutation;
41
+ private verifiedQuery;
42
+ private currentMember;
34
43
  private scanOperation;
35
44
  private serial;
36
45
  remember(credential: JsonObject, material?: RenewalObject): Promise<void>;
@@ -42,6 +51,7 @@ export declare class CredentialRenewal {
42
51
  receive(from: string, payload: unknown): Promise<boolean>;
43
52
  private verifyEnvelope;
44
53
  private status;
54
+ private statusFresh;
45
55
  private receiveNow;
46
56
  private recoverRegistration;
47
57
  private receipt;
@@ -50,6 +60,7 @@ export declare class CredentialRenewal {
50
60
  private revocationAuthority;
51
61
  private revocationState;
52
62
  _assertNotRevoked(credential: JsonObject, proofChain?: JsonObject[]): void;
63
+ _receiveRevocations(payload: JsonObject, guard: MembershipImportGuard): Promise<void>;
53
64
  _syncRevocations(guard?: MembershipImportGuard): Promise<void>;
54
65
  }
55
66
  export interface CredentialVerificationContext {
@@ -32,7 +32,7 @@ const SERVICE_EVENTS = new Set([
32
32
  'org.member.join_requested', 'org.member.join_approved', 'org.member.join_rejected',
33
33
  'org.member.invite_created', 'org.member.invite_accepted', 'org.member.invite_rejected',
34
34
  'org.member.changed', 'org.lifecycle.created', 'org.lifecycle.dissolving',
35
- 'org.lifecycle.dissolved', 'credential.revoked',
35
+ 'org.lifecycle.dissolved', 'credential.revoked', 'credential.revocationList',
36
36
  ]);
37
37
  export class ProtocolError extends Error {
38
38
  code;
@@ -46,6 +46,9 @@ export class ProtocolError extends Error {
46
46
  }
47
47
  export class CredentialRenewal {
48
48
  tail = Promise.resolve();
49
+ queryEpoch = 0;
50
+ verifiedQueries = new Map();
51
+ queryFlights = new Map();
49
52
  ports;
50
53
  scanGuard;
51
54
  constructor(ports) {
@@ -59,7 +62,11 @@ export class CredentialRenewal {
59
62
  },
60
63
  signer: (aid) => this.scanOperation(() => ports.signer(aid, this.scanGuard)),
61
64
  certificate: (aid, fingerprint, signedAt) => this.scanOperation(() => ports.certificate(aid, fingerprint, signedAt)),
62
- call: (method, params, onSent) => this.scanOperation(() => onSent ? ports.call(method, params, onSent) : ports.call(method, params)),
65
+ call: (method, params, onSent) => this.scanOperation(async () => {
66
+ const result = await (onSent ? ports.call(method, params, onSent) : ports.call(method, params));
67
+ this.invalidateMutation(method);
68
+ return result;
69
+ }),
63
70
  send: (to, payload) => this.scanOperation(() => ports.send(to, payload)),
64
71
  };
65
72
  }
@@ -67,6 +74,75 @@ export class CredentialRenewal {
67
74
  if (this.scanGuard && !this.scanGuard.current())
68
75
  throw invalid('credential renewal was superseded');
69
76
  }
77
+ queryScope() {
78
+ return JSON.stringify([this.ports.currentAid(), this.ports.queryContext?.() ?? '']);
79
+ }
80
+ invalidateQueries() {
81
+ this.queryEpoch++;
82
+ this.verifiedQueries.clear();
83
+ this.queryFlights.clear();
84
+ }
85
+ invalidateMutation(method) {
86
+ if (method === 'credential.register' || method === 'credential.revoke'
87
+ || method.startsWith('org.') && !['org.lifecycle.get', 'org.lifecycle.list', 'org.member.get', 'org.member.list', 'org.credential.getStatus', 'org.credential.revocationList', 'org.audit.query', 'org.authz.check', 'org.health', 'org.status'].includes(method))
88
+ this.invalidateQueries();
89
+ }
90
+ async verifiedQuery(key, load) {
91
+ const scope = this.queryScope(), cacheKey = scope + ':' + key, now = Date.now() / 1000;
92
+ for (const [entryKey, entry] of this.verifiedQueries)
93
+ if (now >= entry.expiresAt)
94
+ this.verifiedQueries.delete(entryKey);
95
+ const cached = this.verifiedQueries.get(cacheKey);
96
+ if (cached)
97
+ return structuredClone(cached.value);
98
+ const pending = this.queryFlights.get(cacheKey);
99
+ if (pending)
100
+ return structuredClone(await pending);
101
+ const epoch = this.queryEpoch;
102
+ const request = (async () => {
103
+ const result = await load();
104
+ if (epoch !== this.queryEpoch || scope !== this.queryScope())
105
+ throw invalid('verified query was superseded');
106
+ const expiresAt = Math.min(Date.now() / 1000 + 60, result.expiresAt);
107
+ if (Date.now() / 1000 < expiresAt)
108
+ this.verifiedQueries.set(cacheKey, { value: structuredClone(result.value), expiresAt });
109
+ return result.value;
110
+ })();
111
+ this.queryFlights.set(cacheKey, request);
112
+ try {
113
+ return structuredClone(await request);
114
+ }
115
+ finally {
116
+ if (this.queryFlights.get(cacheKey) === request)
117
+ this.queryFlights.delete(cacheKey);
118
+ }
119
+ }
120
+ async currentMember(credential, binding, service, actor, signer) {
121
+ const credentials = { [binding.role === 'admin' ? 'approval_credential' : 'member_credential']: credential, membership_binding: binding };
122
+ const params = { org_id: credential.iss, member_aid: actor, credentials };
123
+ return this.verifiedQuery('org.member.get:' + service + ':' + digest(params), async () => {
124
+ const query = prepareOrganizationRequest('org.member.get', params, service, signer);
125
+ const result = await this.ports.call('org.member.get', query);
126
+ const member = result.member ?? result;
127
+ if (!isInt(member.version) || member.credential_cid !== undefined && member.credential_cid !== credential.cid)
128
+ throw invalid('current membership differs from managed credential');
129
+ const proof = result.membership_status;
130
+ if (!isRecord(proof))
131
+ return { value: member, expiresAt: 0 };
132
+ const now = Math.trunc(Date.now() / 1000);
133
+ if (proof.ver !== 'aun-membership-status/1' || proof.org_id !== credential.iss || proof.member_aid !== actor || proof.credential_cid !== credential.cid
134
+ || proof.membership_id !== binding.membership_id || proof.role !== binding.role || proof.version !== member.version
135
+ || proof.status !== 'active' || proof.credential_status !== 'active' || proof.responder !== service || proof.target !== actor || proof.request_id !== query.request_id || proof.nonce !== query.nonce
136
+ || !isInt(proof.as_of) || proof.as_of > now + 300 || !isInt(proof.expires_at) || proof.expires_at <= now || proof.expires_at <= proof.as_of || proof.expires_at > proof.as_of + 300
137
+ || !isRecord(proof.signature) || proof.signature.timestamp !== proof.as_of)
138
+ throw invalid('current membership proof does not match the query');
139
+ const cert = await this.ports.certificate(service, String(proof.signature.cert_fingerprint));
140
+ const unsigned = { ...proof };
141
+ delete unsigned.signature;
142
+ verifyAgentSignature(proof.signature, unsigned, service, () => cert, Math.trunc(Date.now() / 1000), false);
143
+ return { value: { ...member, version: proof.version }, expiresAt: Math.min(proof.expires_at, Number(credential.exp), Date.parse(new X509Certificate(cert).validTo) / 1000) };
144
+ });
145
+ }
70
146
  async scanOperation(operation) {
71
147
  this.checkScan();
72
148
  const result = await operation();
@@ -93,9 +169,9 @@ export class CredentialRenewal {
93
169
  return records[cid] ? structuredClone(records[cid]) : null;
94
170
  });
95
171
  }
96
- async rememberNow(credential, material, actor = this.ports.currentAid(), guard) {
172
+ async rememberNow(credential, material, actor = this.ports.currentAid(), guard, storeShortTerm = false) {
97
173
  validateCredential(credential);
98
- if (!material.long_term && !guard)
174
+ if (!material.long_term && !guard && !storeShortTerm)
99
175
  return;
100
176
  if (guard && !guard.current())
101
177
  throw invalid('membership event receiver identity changed');
@@ -173,6 +249,7 @@ export class CredentialRenewal {
173
249
  });
174
250
  }
175
251
  observe(method, params, result) {
252
+ this.invalidateMutation(method);
176
253
  if (method !== 'credential.register' && !method.startsWith('org.'))
177
254
  return Promise.resolve();
178
255
  return this.serial(async () => {
@@ -185,6 +262,7 @@ export class CredentialRenewal {
185
262
  if (!isRecord(credential))
186
263
  continue;
187
264
  const member = isRecord(credential.ext) && credential.ext.credential_type === 'member';
265
+ const renewal = member && method === 'org.member.renewCredential';
188
266
  const actor = this.ports.currentAid();
189
267
  const existing = (await this.ports.load(actor))[String(credential.cid)];
190
268
  let longTerm = existing?.long_term === true;
@@ -193,12 +271,13 @@ export class CredentialRenewal {
193
271
  longTerm = credential.exp === Math.min(Math.floor(new Date(new X509Certificate(cert).validTo).getTime() / 1000), Number(credential.proof_chain?.[0]?.exp ?? Infinity));
194
272
  }
195
273
  await this.rememberNow(credential, {
196
- long_term: longTerm, issued: true,
274
+ long_term: longTerm, issued: !renewal,
275
+ ...(renewal ? { registrationReceipt: result.registrationReceipt, credential_authority: 'credential.' + String(credential.iss).split('.').slice(1).join('.') } : {}),
197
276
  ...(member ? { membership_binding: result.membership_binding ?? value.membership_binding,
198
277
  terms: value.terms ?? (value.membership_binding?.role === 'owner' ? { org_id: credential.iss, owner_aid: credential.sub } : undefined),
199
278
  version: result.member?.version ?? result.version ?? value.expected_version ?? (['org.member.approveJoin', 'org.member.inviteAccept'].includes(method) ? 1 : undefined),
200
279
  service_aid: 'org.' + String(credential.iss).split('.').slice(1).join('.') } : {}),
201
- });
280
+ }, actor, undefined, renewal);
202
281
  }
203
282
  });
204
283
  }
@@ -242,12 +321,7 @@ export class CredentialRenewal {
242
321
  delete request.signature;
243
322
  if (record.membership_binding && !request.membership_binding) {
244
323
  if (now < credential.exp) {
245
- const credentials = { [record.membership_binding.role === 'admin' ? 'approval_credential' : 'member_credential']: credential, membership_binding: record.membership_binding };
246
- const query = prepareOrganizationRequest('org.member.get', { org_id: credential.iss, member_aid: actor, credentials }, record.service_aid, signer);
247
- const current = await this.ports.call('org.member.get', query);
248
- const member = current.member ?? current;
249
- if (!isInt(member.version) || member.credential_cid !== undefined && member.credential_cid !== cid)
250
- throw invalid('current membership differs from managed credential');
324
+ const member = await this.currentMember(credential, record.membership_binding, record.service_aid, actor, signer);
251
325
  record.version = member.version;
252
326
  }
253
327
  if (!isInt(record.version))
@@ -304,6 +378,14 @@ export class CredentialRenewal {
304
378
  verifyAgentSignature(payload.signature, unsigned, expected, () => cert, now);
305
379
  }
306
380
  async status(credential, actor, allowExpired = false, registrationConfirmedAt, confirmation) {
381
+ if (registrationConfirmedAt !== undefined || confirmation)
382
+ return this.statusFresh(credential, actor, allowExpired, registrationConfirmedAt, confirmation);
383
+ return this.verifiedQuery('credential.status:' + digest({ credential, actor, allowExpired }), async () => {
384
+ const expiresAt = await this.statusFresh(credential, actor, allowExpired);
385
+ return { value: expiresAt, expiresAt: Math.min(expiresAt, allowExpired ? Infinity : Number(credential.exp)) };
386
+ });
387
+ }
388
+ async statusFresh(credential, actor, allowExpired = false, registrationConfirmedAt, confirmation) {
307
389
  const target = 'credential.' + String(credential.iss).split('.').slice(1).join('.');
308
390
  const query = { credential_cid: credential.cid, request_id: organizationIdentifier(), nonce: organizationNonce(), include_chain: true };
309
391
  const requestedAt = Math.trunc(Date.now() / 1000);
@@ -326,7 +408,7 @@ export class CredentialRenewal {
326
408
  throw new ProtocolError('CREDENTIAL_STATUS_UNKNOWN', 'membership registration confirmation is invalid');
327
409
  if (confirmation)
328
410
  Object.assign(confirmation, structuredClone(proof));
329
- return proof.proofExpiresAt;
411
+ return Math.min(proof.proofExpiresAt, Date.parse(new X509Certificate(cert).validTo) / 1000);
330
412
  }
331
413
  async receiveNow(from, value, localIssuer, replay = false) {
332
414
  if (!isRecord(value) || !['credential.renewal.request', 'credential.renewal.result'].includes(String(value.type)))
@@ -663,7 +745,7 @@ export class CredentialRenewal {
663
745
  if (!/^credential\.[^\s/]+$/.test(authority) || !isRecord(partition) || !isRecord(partition.revoked) || !isInt(partition.since_event_seq) || partition.since_event_seq < 0
664
746
  || typeof partition.cursor !== 'string' || partition.cursor !== '' && (!/^(0|[1-9][0-9]*)$/.test(partition.cursor) || !isInt(Number(partition.cursor)) || Number(partition.cursor) !== partition.since_event_seq)
665
747
  || !isInt(partition.as_of) || !isInt(partition.expires_at) || partition.expires_at <= partition.as_of
666
- || Object.values(partition.revoked).some((sequence) => !isInt(sequence) || sequence <= 0 || sequence > Number(partition.since_event_seq)))
748
+ || Object.values(partition.revoked).some((sequence) => !isInt(sequence) || sequence <= 0))
667
749
  throw new ProtocolError('CREDENTIAL_STATUS_UNKNOWN', 'credential revocation storage is damaged');
668
750
  }
669
751
  return value;
@@ -695,6 +777,48 @@ export class CredentialRenewal {
695
777
  if (this.ports.currentAid() !== actor)
696
778
  throw new ProtocolError('CREDENTIAL_STATUS_UNKNOWN', 'credential receiver identity changed');
697
779
  }
780
+ _receiveRevocations(payload, guard) {
781
+ if (!this.ports.loadRevocations || !this.ports.saveRevocations)
782
+ return Promise.resolve();
783
+ return this.serial(async () => {
784
+ const actor = this.ports.currentAid();
785
+ const current = () => this.ports.currentAid() === actor && guard.current() && Date.now() / 1000 < Number(payload.expires_at);
786
+ if (!current())
787
+ throw new ProtocolError('CREDENTIAL_STATUS_UNKNOWN', 'credential revocation event was superseded');
788
+ const list = payload.type === 'credential.revocationList';
789
+ const since = list ? payload.since_event_seq : null;
790
+ const entries = list ? payload.events : [{ cid: payload.credential_cid, event_seq: payload.event_seq, reason_code: payload.reason_code, revoked_at: payload.revoked_at }];
791
+ if (payload.target !== actor || typeof payload.responder !== 'string' || !AID_RE.test(payload.responder) || !payload.responder.startsWith('credential.')
792
+ || !Array.isArray(entries) || entries.length > 1000 || list && (!isInt(since) || since < 0 || payload.issuer_aid !== '') || !list && payload.status !== 'revoked')
793
+ throw invalid('credential revocation event is invalid');
794
+ let last = list ? Number(since) : 0;
795
+ for (const entry of entries) {
796
+ if (!isRecord(entry) || typeof entry.cid !== 'string' || !entry.cid || !isInt(entry.event_seq) || entry.event_seq <= last
797
+ || typeof entry.reason_code !== 'string' || !entry.reason_code || !isInt(entry.revoked_at) || entry.revoked_at < 0 || entry.revoked_at > Number(payload.as_of)
798
+ || list && (typeof entry.revoked_by_aid !== 'string' || !AID_RE.test(entry.revoked_by_aid)))
799
+ throw invalid('credential revocation event is invalid');
800
+ last = entry.event_seq;
801
+ }
802
+ const cursor = list ? payload.next_cursor : '';
803
+ if (typeof cursor !== 'string' || cursor !== '' && (!/^[1-9][0-9]*$/.test(cursor) || !isInt(Number(cursor)) || Number(cursor) <= Number(since) || Number(cursor) < last))
804
+ throw invalid('credential revocation cursor is invalid');
805
+ const state = structuredClone(this.revocationState(await this.ports.loadRevocations(actor)));
806
+ const previous = state.authorities[payload.responder] ?? { revoked: {}, since_event_seq: 0, cursor: '', as_of: 0, expires_at: 0 };
807
+ const revoked = { ...previous.revoked };
808
+ for (const entry of entries)
809
+ Object.defineProperty(revoked, String(entry.cid), { value: Math.max(Object.hasOwn(revoked, String(entry.cid)) ? Number(revoked[String(entry.cid)]) : 0, Number(entry.event_seq)), enumerable: true, configurable: true, writable: true });
810
+ const advance = list && Number(since) <= previous.since_event_seq && Math.max(last, Number(cursor)) >= previous.since_event_seq;
811
+ state.authorities[payload.responder] = { ...previous, revoked,
812
+ ...(advance ? { since_event_seq: Math.max(last, Number(cursor)), cursor } : {}),
813
+ ...(Number(payload.as_of) >= previous.as_of ? { as_of: payload.as_of, expires_at: payload.expires_at } : {}) };
814
+ if (!current())
815
+ throw new ProtocolError('CREDENTIAL_STATUS_UNKNOWN', 'credential revocation event was superseded');
816
+ await this.ports.saveRevocations(actor, state, { ...guard, current });
817
+ if (!current())
818
+ throw new ProtocolError('CREDENTIAL_STATUS_UNKNOWN', 'credential revocation event was superseded');
819
+ this.invalidateQueries();
820
+ });
821
+ }
698
822
  _syncRevocations(guard) {
699
823
  if (!this.ports.loadRevocations || !this.ports.saveRevocations)
700
824
  return Promise.resolve();
@@ -708,8 +832,6 @@ export class CredentialRenewal {
708
832
  const records = await this.ports.load(actor);
709
833
  check();
710
834
  const authorities = new Set();
711
- if (AID_RE.test(actor))
712
- authorities.add('credential.' + actor.split('.').slice(1).join('.'));
713
835
  for (const record of Object.values(records)) {
714
836
  if (!isRecord(record) || !isRecord(record.credential))
715
837
  continue;
@@ -729,6 +851,12 @@ export class CredentialRenewal {
729
851
  }
730
852
  }
731
853
  for (const authority of authorities) {
854
+ const scope = this.queryScope(), epoch = this.queryEpoch;
855
+ const cachePrefix = scope + ':credential.revocationList:' + authority + ':';
856
+ const cached = this.verifiedQueries.get(cachePrefix + digest(state.authorities[authority] ?? {}));
857
+ if (cached && Date.now() / 1000 < cached.expiresAt)
858
+ continue;
859
+ let expiresAt = Infinity;
732
860
  for (let page = 0; page < 32; page++) {
733
861
  check();
734
862
  const previous = state.authorities[authority] ?? { revoked: {}, since_event_seq: 0, cursor: '' };
@@ -762,17 +890,20 @@ export class CredentialRenewal {
762
890
  const next = structuredClone(state);
763
891
  const revoked = { ...previous.revoked };
764
892
  for (const event of proof.events)
765
- Object.defineProperty(revoked, String(event.cid), { value: event.event_seq, enumerable: true, configurable: true, writable: true });
893
+ Object.defineProperty(revoked, String(event.cid), { value: Math.max(Object.hasOwn(revoked, String(event.cid)) ? Number(revoked[String(event.cid)]) : 0, Number(event.event_seq)), enumerable: true, configurable: true, writable: true });
766
894
  next.authorities[authority] = { revoked, since_event_seq: proof.next_cursor === '' ? last : Number(proof.next_cursor), cursor: proof.next_cursor, as_of: proof.as_of, expires_at: proof.expires_at };
767
- const commitGuard = { ...guard, current: () => this.ports.currentAid() === actor && (!guard || guard.current()) && Date.now() / 1000 < Number(proof.expires_at) };
895
+ expiresAt = Math.min(expiresAt, Number(proof.expires_at), Date.parse(new X509Certificate(certificate).validTo) / 1000);
896
+ const commitGuard = { ...guard, current: () => epoch === this.queryEpoch && scope === this.queryScope() && this.ports.currentAid() === actor && (!guard || guard.current()) && Date.now() / 1000 < expiresAt };
768
897
  if (!commitGuard.current())
769
898
  throw new ProtocolError('CREDENTIAL_STATUS_UNKNOWN', 'revocation list expired before persistence');
770
899
  await this.ports.saveRevocations(actor, next, commitGuard);
771
900
  if (!commitGuard.current())
772
901
  throw new ProtocolError('CREDENTIAL_STATUS_UNKNOWN', 'revocation synchronization was superseded');
773
902
  state = next;
774
- if (proof.next_cursor === '')
903
+ if (proof.next_cursor === '') {
904
+ this.verifiedQueries.set(cachePrefix + digest(state.authorities[authority]), { value: true, expiresAt: Math.min(Date.now() / 1000 + 60, expiresAt) });
775
905
  break;
906
+ }
776
907
  }
777
908
  }
778
909
  });
@@ -811,6 +942,10 @@ export async function verifyServiceEvent(eventName, payload, context) {
811
942
  if (typeof payload.org_id !== 'string' || !AID_RE.test(payload.org_id) || responderKey !== aidKey('org.' + payload.org_id.slice(payload.org_id.indexOf('.') + 1)))
812
943
  throw invalid('organization event authority is invalid');
813
944
  }
945
+ else if (event === 'credential.revocationList') {
946
+ if (!responderKey.startsWith('credential.') || typeof payload.target !== 'string' || !targetAids.has(aidKey(payload.target)) || !Array.isArray(payload.events))
947
+ throw invalid('credential event authority is invalid');
948
+ }
814
949
  else if (event.startsWith('credential.')) {
815
950
  const cid = payload.credential_cid ?? payload.credentialCid;
816
951
  if (typeof cid !== 'string' || !cid || payload.credential_cid !== undefined && payload.credentialCid !== undefined && payload.credential_cid !== payload.credentialCid || !responderKey.startsWith('credential.') || typeof payload.target !== 'string' || !targetAids.has(aidKey(payload.target)))