@agentunion/fastaun 0.5.31 → 0.5.32

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 (81) hide show
  1. package/CHANGELOG.md +39 -1
  2. package/_packed_docs/CHANGELOG.md +39 -1
  3. package/_packed_docs/sdk/0.5.32-SDK/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +350 -0
  4. package/_packed_docs/sdk/0.5.32-SDK/345/274/200/345/217/221/344/270/216/347/247/273/346/244/215/346/214/207/345/215/227.md +319 -0
  5. package/_packed_docs/sdk/AUN_DOCS_GUIDE.md +12 -5
  6. package/_packed_docs/sdk/AUN/344/272/213/344/273/266/345/217/221/345/270/203/350/256/242/351/230/205/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +459 -0
  7. package/_packed_docs/sdk/AUN/344/272/213/344/273/266/345/217/221/345/270/203/350/256/242/351/230/205/345/274/200/345/217/221/347/247/273/346/244/215/346/214/207/345/215/227.md +554 -0
  8. package/_packed_docs/sdk/INDEX.md +27 -5
  9. package/_packed_docs/sdk//345/255/220AID/344/277/256/346/224/271agent.md/351/200/232/347/237/245Owner/345/234/272/346/231/257/346/214/207/345/215/227.md +234 -0
  10. package/dist/client/control-messages.d.ts +22 -6
  11. package/dist/client/control-messages.js +208 -146
  12. package/dist/client/control-messages.js.map +1 -1
  13. package/dist/client/delivery.d.ts +3 -0
  14. package/dist/client/delivery.js +67 -3
  15. package/dist/client/delivery.js.map +1 -1
  16. package/dist/client/group-state.d.ts +3 -0
  17. package/dist/client/group-state.js +48 -14
  18. package/dist/client/group-state.js.map +1 -1
  19. package/dist/client/lifecycle.js +3 -2
  20. package/dist/client/lifecycle.js.map +1 -1
  21. package/dist/client/rpc-pipeline.d.ts +9 -3
  22. package/dist/client/rpc-pipeline.js +53 -22
  23. package/dist/client/rpc-pipeline.js.map +1 -1
  24. package/dist/client/v2-e2ee.d.ts +13 -1
  25. package/dist/client/v2-e2ee.js +32 -19
  26. package/dist/client/v2-e2ee.js.map +1 -1
  27. package/dist/client.d.ts +6 -1
  28. package/dist/client.js +57 -21
  29. package/dist/client.js.map +1 -1
  30. package/dist/group-fs.js +1 -1
  31. package/dist/group-fs.js.map +1 -1
  32. package/dist/index.d.ts +2 -0
  33. package/dist/index.js +1 -0
  34. package/dist/index.js.map +1 -1
  35. package/dist/ownership-workflow.js +3 -3
  36. package/dist/ownership-workflow.js.map +1 -1
  37. package/dist/pubsub/binding.d.ts +54 -0
  38. package/dist/pubsub/binding.js +343 -0
  39. package/dist/pubsub/binding.js.map +1 -0
  40. package/dist/pubsub/channel.d.ts +45 -0
  41. package/dist/pubsub/channel.js +137 -0
  42. package/dist/pubsub/channel.js.map +1 -0
  43. package/dist/pubsub/client.d.ts +93 -0
  44. package/dist/pubsub/client.js +318 -0
  45. package/dist/pubsub/client.js.map +1 -0
  46. package/dist/pubsub/credentials.d.ts +51 -0
  47. package/dist/pubsub/credentials.js +360 -0
  48. package/dist/pubsub/credentials.js.map +1 -0
  49. package/dist/pubsub/errors.d.ts +5 -0
  50. package/dist/pubsub/errors.js +6 -0
  51. package/dist/pubsub/errors.js.map +1 -0
  52. package/dist/pubsub/index.d.ts +48 -0
  53. package/dist/pubsub/index.js +152 -0
  54. package/dist/pubsub/index.js.map +1 -0
  55. package/dist/pubsub/scheduler.d.ts +58 -0
  56. package/dist/pubsub/scheduler.js +249 -0
  57. package/dist/pubsub/scheduler.js.map +1 -0
  58. package/dist/pubsub/service.d.ts +100 -0
  59. package/dist/pubsub/service.js +650 -0
  60. package/dist/pubsub/service.js.map +1 -0
  61. package/dist/pubsub/types.d.ts +119 -0
  62. package/dist/pubsub/types.js +2 -0
  63. package/dist/pubsub/types.js.map +1 -0
  64. package/dist/storage/lowlevel.js +44 -7
  65. package/dist/storage/lowlevel.js.map +1 -1
  66. package/dist/storage/read-cache.d.ts +7 -3
  67. package/dist/storage/read-cache.js +137 -18
  68. package/dist/storage/read-cache.js.map +1 -1
  69. package/dist/storage/vfs.d.ts +1 -0
  70. package/dist/storage/vfs.js +11 -1
  71. package/dist/storage/vfs.js.map +1 -1
  72. package/dist/tools/cross-sdk-agent.d.ts +1 -1
  73. package/dist/tools/pubsub-actor.d.ts +27 -0
  74. package/dist/tools/pubsub-actor.js +260 -0
  75. package/dist/tools/pubsub-actor.js.map +1 -0
  76. package/dist/transport.d.ts +25 -1
  77. package/dist/transport.js +175 -10
  78. package/dist/transport.js.map +1 -1
  79. package/dist/version.d.ts +1 -1
  80. package/dist/version.js +1 -1
  81. package/package.json +1 -1
@@ -0,0 +1,360 @@
1
+ import { buildRequestBinding, createCredential, digest, validateCredentialCapability, verifyCredentialChain, verifyCredentialSignature, verifyRegistrationReceipt } from '../org-protocol.js';
2
+ import { identifier } from './channel.js';
3
+ import { PubSubError } from './errors.js';
4
+ export class SDKCredentials {
5
+ sdk;
6
+ serviceAid;
7
+ options;
8
+ revoked = new Set();
9
+ verified = new Map();
10
+ generation = 0;
11
+ bodyBudget;
12
+ verifiedBytes = 0;
13
+ nextVerifiedExpiry = Infinity;
14
+ verifiedLimits = { items: 4096, bytes: 8 * 1024 * 1024 };
15
+ records;
16
+ loaded;
17
+ tail = Promise.resolve();
18
+ constructor(sdk, serviceAid = String(sdk.aid ?? ''), options = {}) {
19
+ this.sdk = sdk;
20
+ this.serviceAid = serviceAid;
21
+ this.options = options;
22
+ this.records = { version: 1, service_aid: serviceAid, issues: {}, revokes: {} };
23
+ }
24
+ async issue(subjectAid, scope, expiresAt, requestId) {
25
+ return this.serial(async () => {
26
+ await this.load();
27
+ try {
28
+ const input = { subject: subjectAid, scope, expires_at: expiresAt };
29
+ let record = this.records.issues[requestId];
30
+ if (record && digest(record.input) !== digest(input))
31
+ throw new PubSubError('REQUEST_CONFLICT');
32
+ if (!record) {
33
+ const signer = this.options.signer ? await this.options.signer(this.serviceAid) : await this.sdk._credentialRenewalSigner?.(this.serviceAid) ?? await this.sdk._credentialSigningIdentity?.(this.serviceAid) ?? (this.sdk.currentAid?.aid === this.serviceAid ? this.sdk.currentAid : null);
34
+ if (!signer)
35
+ throw new PubSubError('CREDENTIAL_UNAVAILABLE');
36
+ const grant = await createCredential({ sub: subjectAid, aud: [this.serviceAid], delegate: false, exp: Math.floor(expiresAt / 1000), key_version: signer.certFingerprint, cap: scope.map(item => ({ ns: 'event', action: item.action, resource: item.event_name, constraints: [] })) }, signer);
37
+ record = { input: structuredClone(input), grant, request: this.request('credential.register', String(grant.cid), requestId, { credential: grant, registrar_aid: this.serviceAid }) };
38
+ this.records.issues[requestId] = record;
39
+ }
40
+ await this.save();
41
+ if (record.result)
42
+ return structuredClone(record.result);
43
+ let result;
44
+ if (Date.now() / 1000 >= Number(record.request.request_binding.exp)) {
45
+ const proof = await this.recoverRegistration(record);
46
+ result = { grant: record.grant, cid: record.grant.cid, receipt: null, registration_confirmation: proof };
47
+ }
48
+ else {
49
+ const response = await this.register(record);
50
+ const receipt = response?.registrationReceipt ?? response?.receipt;
51
+ if (!receipt || !receipt.signature)
52
+ throw new PubSubError('CREDENTIAL_UNAVAILABLE');
53
+ const certificate = await this.certificate(this.authority, String(receipt.signature.cert_fingerprint));
54
+ await verifyRegistrationReceipt(receipt, record.grant, record.request, () => certificate, this.authority, Math.floor(Date.now() / 1000));
55
+ result = { grant: record.grant, cid: record.grant.cid, receipt };
56
+ }
57
+ record.result = structuredClone(result);
58
+ await this.save();
59
+ return structuredClone(result);
60
+ }
61
+ catch (error) {
62
+ if (error instanceof PubSubError)
63
+ throw error;
64
+ throw new PubSubError('CREDENTIAL_UNAVAILABLE', String(error));
65
+ }
66
+ });
67
+ }
68
+ async verify(grant, subjectAid, scope, request, deadline = request?.expires_at) {
69
+ const generation = this.generation;
70
+ await this.beforeDeadline(deadline, () => this.load());
71
+ if (!scope.length || this.isRevoked(grant))
72
+ throw new PubSubError('FORBIDDEN');
73
+ await this.assertNotRevoked(grant, deadline);
74
+ this.cleanupVerified();
75
+ const facade = this.sdk.credential;
76
+ if (typeof facade?.verify !== 'function')
77
+ throw new PubSubError('CREDENTIAL_UNAVAILABLE');
78
+ const identity = digest([subjectAid, grant]);
79
+ const previous = this.verified.get(identity)?.params;
80
+ if (!request && scope.some(item => !previous?.has(`${item.event_name}\0${item.action}`)))
81
+ throw new PubSubError('FORBIDDEN');
82
+ const documents = [grant, ...(Array.isArray(grant.proof_chain) ? grant.proof_chain : [])];
83
+ if (grant.sub !== subjectAid || documents.at(-1)?.iss !== this.serviceAid || documents.some(document => Number(document.exp) * 1000 <= Date.now()))
84
+ throw new PubSubError('FORBIDDEN');
85
+ const extra = this.options.verificationContext ? await this.beforeDeadline(deadline, () => this.options.verificationContext(subjectAid, request, grant)) : await this.context(grant, deadline);
86
+ if (typeof extra.resolveCertificate !== 'function' || typeof extra.resolveStatusProof !== 'function')
87
+ throw new PubSubError('CREDENTIAL_UNAVAILABLE');
88
+ let proofUntil = Infinity;
89
+ for (const document of documents) {
90
+ const proof = extra.resolveStatusProof(String(document.cid));
91
+ if (!proof || typeof proof.proofExpiresAt !== 'number' || proof.proofExpiresAt * 1000 <= Date.now())
92
+ throw new PubSubError('CREDENTIAL_UNAVAILABLE');
93
+ proofUntil = Math.min(proofUntil, proof.proofExpiresAt * 1000);
94
+ }
95
+ try {
96
+ for (const item of scope) {
97
+ const params = request ?? previous.get(`${item.event_name}\0${item.action}`);
98
+ const context = { ...extra, resolveCertificate: extra.resolveCertificate, audience: this.serviceAid, subject: subjectAid, rootIssuer: this.serviceAid, ns: 'event', action: item.action, resource: item.event_name, params };
99
+ if (request)
100
+ await this.beforeDeadline(deadline, () => facade.verify(grant, { ...context, method: `pubsub.${request.op}`, target: this.serviceAid, requestId: request.request_id, nonce: request.nonce, requestBinding: request.request_binding }));
101
+ else {
102
+ await this.beforeDeadline(deadline, async () => this.sdk._assertCredentialNotRevoked?.(grant));
103
+ await verifyCredentialChain(grant, context.resolveCertificate, cid => extra.resolveStatusProof(cid)?.status, Math.floor(Date.now() / 1000), this.serviceAid);
104
+ await validateCredentialCapability(grant, { ns: 'event', action: item.action, resource: item.event_name, params, now: Math.floor(Date.now() / 1000) });
105
+ }
106
+ }
107
+ }
108
+ catch (error) {
109
+ if (error instanceof PubSubError && error.code === 'TIMEOUT')
110
+ throw error;
111
+ throw new PubSubError('FORBIDDEN', String(error));
112
+ }
113
+ this.checkDeadline(deadline);
114
+ if (generation !== this.generation)
115
+ throw new PubSubError('SERVICE_CLOSED');
116
+ if (request) {
117
+ const saved = new Map(previous);
118
+ for (const item of scope)
119
+ saved.set(`${item.event_name}\0${item.action}`, this.verificationParams(grant, item, request));
120
+ const size = new TextEncoder().encode(JSON.stringify([identity, [...saved]])).byteLength + 128, old = this.verified.get(identity);
121
+ if ((this.bodyBudget && !this.bodyBudget(size - (old?.size ?? 0))) || (!old && this.verified.size >= this.verifiedLimits.items) || this.verifiedBytes + size - (old?.size ?? 0) > this.verifiedLimits.bytes)
122
+ throw new PubSubError('OVERLOADED');
123
+ const expiresAt = Math.min(...documents.map(document => Number(document.exp) * 1000));
124
+ this.verified.set(identity, { params: saved, size, expiresAt });
125
+ this.verifiedBytes += size - (old?.size ?? 0);
126
+ this.nextVerifiedExpiry = Math.min(this.nextVerifiedExpiry, expiresAt);
127
+ }
128
+ await this.assertNotRevoked(grant, deadline);
129
+ if (this.isRevoked(grant))
130
+ throw new PubSubError('FORBIDDEN');
131
+ return { cid: grant.cid, expires_at: Math.min(...documents.map(document => Number(document.exp) * 1000)), proof_expires_at: proofUntil };
132
+ }
133
+ verificationParams(grant, item, request) {
134
+ const result = {};
135
+ for (const capability of (grant.cap ?? [])) {
136
+ if (capability.ns !== 'event' || ![item.action, '*'].includes(String(capability.action)) || ![item.event_name, '*'].includes(String(capability.resource)))
137
+ continue;
138
+ for (const constraint of (capability.constraints ?? [])) {
139
+ const field = String(constraint.field ?? '');
140
+ if (['ns', 'action', 'resource', 'sub', 'delegation_depth', 'operation', 'valid_time', 'now'].includes(field))
141
+ continue;
142
+ const parts = (field.startsWith('params.') ? field.slice(7) : field).split('.');
143
+ let value = request, found = true;
144
+ for (const key of parts) {
145
+ if (!value || typeof value !== 'object' || !Object.hasOwn(value, key)) {
146
+ found = false;
147
+ break;
148
+ }
149
+ value = value[key];
150
+ }
151
+ if (!found)
152
+ continue;
153
+ let target = result;
154
+ for (const key of parts.slice(0, -1)) {
155
+ if (!Object.hasOwn(target, key))
156
+ Object.defineProperty(target, key, { value: {}, enumerable: true, writable: true, configurable: true });
157
+ target = target[key];
158
+ }
159
+ Object.defineProperty(target, parts.at(-1), { value: structuredClone(value), enumerable: true, writable: true, configurable: true });
160
+ }
161
+ }
162
+ return result;
163
+ }
164
+ cleanupVerified() { const now = Date.now(); if (now < this.nextVerifiedExpiry)
165
+ return; this.nextVerifiedExpiry = Infinity; for (const [key, entry] of this.verified) {
166
+ if (entry.expiresAt <= now) {
167
+ this.verified.delete(key);
168
+ this.verifiedBytes -= entry.size;
169
+ }
170
+ else
171
+ this.nextVerifiedExpiry = Math.min(this.nextVerifiedExpiry, entry.expiresAt);
172
+ } }
173
+ async checkVerified(grant, subjectAid, scope) {
174
+ this.cleanupVerified();
175
+ const previous = this.verified.get(digest([subjectAid, grant]))?.params;
176
+ try {
177
+ for (const item of scope) {
178
+ const params = previous?.get(`${item.event_name}\0${item.action}`);
179
+ if (!params)
180
+ throw new PubSubError('FORBIDDEN');
181
+ await validateCredentialCapability(grant, { ns: 'event', action: item.action, resource: item.event_name, params, now: Math.floor(Date.now() / 1000) });
182
+ }
183
+ }
184
+ catch {
185
+ throw new PubSubError('FORBIDDEN');
186
+ }
187
+ }
188
+ retainedBodyBytes() { return this.verifiedBytes; }
189
+ setBodyBudget(available) { this.bodyBudget = available; }
190
+ clearVerified() { this.generation++; this.verified.clear(); this.verifiedBytes = 0; this.nextVerifiedExpiry = Infinity; }
191
+ async assertNotRevoked(grant, deadline) { if (this.isRevoked(grant))
192
+ throw new PubSubError('REAUTH_REQUIRED'); if (typeof grant === 'string')
193
+ return; try {
194
+ await this.beforeDeadline(deadline, async () => { await this.sdk._assertCredentialNotRevoked?.(grant); });
195
+ }
196
+ catch (error) {
197
+ if (error instanceof PubSubError && error.code === 'TIMEOUT')
198
+ throw error;
199
+ throw new PubSubError('REAUTH_REQUIRED');
200
+ } }
201
+ async context(grant, deadline) {
202
+ const manager = this.sdk._getCredentialRenewal?.();
203
+ if (typeof manager?.statusFresh !== 'function')
204
+ throw new PubSubError('CREDENTIAL_UNAVAILABLE');
205
+ const certificates = new Map();
206
+ const proofs = new Map();
207
+ for (const document of [grant, ...(Array.isArray(grant.proof_chain) ? grant.proof_chain : [])]) {
208
+ const proof = {};
209
+ await this.statusFresh(document, undefined, proof, deadline);
210
+ proofs.set(String(document.cid), proof);
211
+ const signature = document.signature;
212
+ const fingerprint = String(signature.cert_fingerprint);
213
+ certificates.set(fingerprint, await this.certificate(String(document.iss), fingerprint, deadline));
214
+ }
215
+ return { resolveCertificate: fingerprint => certificates.get(fingerprint) ?? null, resolveStatusProof: cid => proofs.get(cid) ?? null };
216
+ }
217
+ async revoke(cid, requestId) {
218
+ return this.serial(async () => {
219
+ await this.load();
220
+ try {
221
+ let record = this.records.revokes[requestId];
222
+ if (record && record.cid !== cid)
223
+ throw new PubSubError('REQUEST_CONFLICT');
224
+ this.revoked.add(cid);
225
+ if (!record) {
226
+ record = { cid, request: this.request('credential.revoke', cid, requestId, { credential_cid: cid, registrar_aid: this.serviceAid, reason_code: 'grant_withdrawn', cascade: true }) };
227
+ this.records.revokes[requestId] = record;
228
+ }
229
+ await this.save();
230
+ if (record.result)
231
+ return structuredClone(record.result);
232
+ const revoke = this.sdk.credential?.revoke;
233
+ if (typeof revoke !== 'function')
234
+ throw new PubSubError('CREDENTIAL_UNAVAILABLE');
235
+ const result = await revoke.call(this.sdk.credential, structuredClone(record.request));
236
+ if (!result || result.credentialCid !== cid || result.status !== 'revoked')
237
+ throw new PubSubError('CREDENTIAL_UNAVAILABLE');
238
+ record.result = structuredClone(result);
239
+ await this.save();
240
+ this.sdk._getCredentialRenewal?.().invalidateQueries?.();
241
+ return structuredClone(result);
242
+ }
243
+ catch (error) {
244
+ if (error instanceof PubSubError)
245
+ throw error;
246
+ throw new PubSubError('CREDENTIAL_UNAVAILABLE', String(error));
247
+ }
248
+ });
249
+ }
250
+ get authority() { return 'credential.' + this.serviceAid.split('.').slice(1).join('.'); }
251
+ serial(operation) { const result = this.tail.then(operation); this.tail = result.catch(() => { }); return result; }
252
+ load() {
253
+ return this.loaded ??= (async () => {
254
+ const store = this.sdk._tokenStore;
255
+ let saved;
256
+ if (this.options.state?.load)
257
+ saved = await this.options.state.load();
258
+ else if (typeof store?._getMetadataStrict === 'function' || typeof store?.getMetadata === 'function') {
259
+ const value = await (store._getMetadataStrict?.(this.serviceAid, 'pubsub_credentials_v1') ?? store.getMetadata?.(this.serviceAid, 'pubsub_credentials_v1'));
260
+ saved = typeof value === 'string' && value !== '' ? JSON.parse(value) : value;
261
+ }
262
+ else
263
+ saved = (store?._loadMetadataStrict?.(this.serviceAid) ?? store?.loadMetadata?.(this.serviceAid))?.pubsub_credentials_v1;
264
+ if (saved) {
265
+ if (saved.version !== 1 || saved.service_aid !== this.serviceAid || !saved.issues || !saved.revokes)
266
+ throw new PubSubError('CREDENTIAL_UNAVAILABLE');
267
+ this.records = structuredClone(saved);
268
+ }
269
+ for (const record of Object.values(this.records.revokes))
270
+ this.revoked.add(record.cid);
271
+ })().catch(error => { throw error instanceof PubSubError ? error : new PubSubError('CREDENTIAL_UNAVAILABLE', String(error)); });
272
+ }
273
+ async save() {
274
+ const value = structuredClone(this.records);
275
+ const store = this.sdk._tokenStore;
276
+ if (this.options.state?.save)
277
+ await this.options.state.save(value);
278
+ else if (typeof store?.setMetadata === 'function')
279
+ await store.setMetadata(this.serviceAid, 'pubsub_credentials_v1', JSON.stringify(value));
280
+ else
281
+ await store?.saveMetadata?.(this.serviceAid, { pubsub_credentials_v1: value });
282
+ }
283
+ async certificate(aid, fingerprint, deadline) {
284
+ const resolve = this.sdk._fetchServiceEventCertificate ?? this.sdk._resolveServiceEventCertificate;
285
+ if (typeof resolve !== 'function')
286
+ throw new PubSubError('CREDENTIAL_UNAVAILABLE');
287
+ return this.beforeDeadline(deadline, () => resolve.call(this.sdk, aid, fingerprint));
288
+ }
289
+ async register(record) {
290
+ const pipeline = this.sdk._rpcPipeline;
291
+ if (typeof pipeline?._callWithSent === 'function')
292
+ return pipeline._callWithSent('credential.register', structuredClone(record.request), async () => {
293
+ const now = Math.floor(Date.now() / 1000), binding = record.request.request_binding;
294
+ if (now < Number(binding.iat) || now >= Number(binding.exp))
295
+ throw new PubSubError('CREDENTIAL_UNAVAILABLE');
296
+ if (record.submitted_at === undefined) {
297
+ record.submitted_at = now;
298
+ record.submission_hash = digest(record.request);
299
+ await this.save();
300
+ }
301
+ });
302
+ if (typeof this.sdk.credential?.register !== 'function')
303
+ throw new PubSubError('CREDENTIAL_UNAVAILABLE');
304
+ return this.sdk.credential.register(structuredClone(record.request));
305
+ }
306
+ async recoverRegistration(record) {
307
+ const binding = record.request.request_binding;
308
+ if (!Number.isInteger(record.submitted_at) || record.submitted_at < Number(binding.iat) || record.submitted_at >= Number(binding.exp) || record.submission_hash !== digest(record.request))
309
+ throw new PubSubError('CREDENTIAL_UNAVAILABLE');
310
+ const signature = record.grant.signature;
311
+ const certificate = await this.certificate(String(record.grant.iss), String(signature.cert_fingerprint));
312
+ await verifyCredentialSignature(record.grant, () => certificate, Math.floor(Date.now() / 1000), this.serviceAid);
313
+ const proof = {};
314
+ await this.statusFresh(record.grant, record.submitted_at, proof);
315
+ if (proof.credentialStatus !== 'active' || Number(proof.proofExpiresAt) * 1000 <= Date.now() || Number(record.grant.exp) * 1000 <= Date.now())
316
+ throw new PubSubError('CREDENTIAL_UNAVAILABLE');
317
+ return proof;
318
+ }
319
+ async statusFresh(grant, submittedAt, proof, deadline) {
320
+ this.checkDeadline(deadline);
321
+ const manager = this.sdk._getCredentialRenewal?.();
322
+ if (typeof manager?.statusFresh !== 'function')
323
+ throw new PubSubError('CREDENTIAL_UNAVAILABLE');
324
+ const scoped = Object.create(manager);
325
+ if (manager.ports?.call)
326
+ scoped.ports = { ...manager.ports,
327
+ call: async (method, params, onSent) => { this.checkDeadline(deadline); const result = await manager.ports.call(method, { ...params, _rpc_background_kind: 'event', _rpc_background: 'event', ...(deadline !== undefined ? { _rpc_deadline: deadline } : {}) }, onSent); this.checkDeadline(deadline); return result; },
328
+ certificate: (aid, fingerprint) => this.beforeDeadline(deadline, () => manager.ports.certificate(aid, fingerprint)) };
329
+ await manager.statusFresh.call(scoped, grant, this.serviceAid, false, submittedAt, proof);
330
+ this.checkDeadline(deadline);
331
+ }
332
+ checkDeadline(deadline) { if (deadline !== undefined && deadline <= Date.now())
333
+ throw new PubSubError('TIMEOUT'); }
334
+ async beforeDeadline(deadline, operation) {
335
+ this.checkDeadline(deadline);
336
+ if (deadline === undefined)
337
+ return operation();
338
+ let timer;
339
+ try {
340
+ const result = await Promise.race([operation(), new Promise((_, reject) => { timer = setTimeout(() => reject(new PubSubError('TIMEOUT')), Math.max(0, deadline - Date.now())); })]);
341
+ this.checkDeadline(deadline);
342
+ return result;
343
+ }
344
+ finally {
345
+ if (timer)
346
+ clearTimeout(timer);
347
+ }
348
+ }
349
+ isRevoked(grant) { if (typeof grant === 'string')
350
+ return this.revoked.has(grant); return [grant, ...(Array.isArray(grant.proof_chain) ? grant.proof_chain : [])].some(document => this.revoked.has(String(document.cid ?? ''))); }
351
+ async getIssuedScope(cid) { await this.load(); const record = Object.values(this.records.issues).find(item => item.grant.cid === cid); return record ? structuredClone(record.input.scope) : null; }
352
+ request(method, cid, requestId, fields) {
353
+ const params = { ...fields, request_id: requestId, nonce: identifier() };
354
+ const now = Math.floor(Date.now() / 1000);
355
+ params.request_binding = buildRequestBinding(method, 'credential.' + this.serviceAid.split('.').slice(1).join('.'), params, cid, String(params.nonce), requestId, now, now + 300);
356
+ return params;
357
+ }
358
+ async refreshRevocations() { await this.load(); this.sdk._getCredentialRenewal?.().invalidateQueries?.(); }
359
+ }
360
+ //# sourceMappingURL=credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/pubsub/credentials.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare class PubSubError extends Error {
2
+ readonly code: string;
3
+ readonly details?: unknown;
4
+ constructor(code: string, message?: string, details?: unknown);
5
+ }
@@ -0,0 +1,6 @@
1
+ export class PubSubError extends Error {
2
+ code;
3
+ details;
4
+ constructor(code, message, details) { super(message ? `${code}: ${message}` : code); this.name = 'PubSubError'; this.code = code; this.details = details; }
5
+ }
6
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/pubsub/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,WAAY,SAAQ,KAAK;IAAY,IAAI,CAAS;IAAU,OAAO,CAAW;IAAC,YAAY,IAAY,EAAE,OAAgB,EAAE,OAAiB,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;CAAE"}
@@ -0,0 +1,48 @@
1
+ import { EventService as EventBusCore } from './service.js';
2
+ import { type EventServiceBindingOptions } from './binding.js';
3
+ import { PubSubClient, type PublishOptions } from './client.js';
4
+ import { type SDKCredentialsOptions } from './credentials.js';
5
+ import { type PubSubSDK } from './channel.js';
6
+ import type { CredentialProvider, EventAllowlist, EventCatalog, EventServiceLimits, EventServiceOptions, JsonMap } from './types.js';
7
+ export { PubSubError } from './errors.js';
8
+ export type * from './types.js';
9
+ export type { PublishOptions } from './client.js';
10
+ export type EventRole = 'pub' | 'sub' | 'bus';
11
+ export interface EventServiceStartOptions {
12
+ catalog?: EventCatalog;
13
+ allowlist?: EventAllowlist;
14
+ credentials?: CredentialProvider;
15
+ credentialOptions?: SDKCredentialsOptions;
16
+ state?: EventServiceOptions['state'];
17
+ clock?: () => number;
18
+ limits?: EventServiceLimits;
19
+ bindingOptions?: EventServiceBindingOptions;
20
+ }
21
+ export declare class EventService {
22
+ readonly sdk: PubSubSDK;
23
+ private readonly buses;
24
+ constructor(sdk: PubSubSDK);
25
+ private bindBus;
26
+ private bound;
27
+ private client;
28
+ private serialize;
29
+ start(bus_aid: string, options?: EventServiceStartOptions): Promise<this>;
30
+ drain(bus_aid: string): Promise<void>;
31
+ close(bus_aid: string): Promise<void>;
32
+ private _closeAll;
33
+ updateConfig(bus_aid: string, config: Parameters<EventBusCore['updateConfig']>[0]): Promise<void>;
34
+ authorize(bus_aid: string, role: 'pub' | 'sub', authMode: 'allowlist' | 'credential', events: string[], credential?: JsonMap): Promise<JsonMap>;
35
+ renew(bus_aid: string): Promise<JsonMap>;
36
+ publish(bus_aid: string, eventName: string, data: JsonMap, options?: PublishOptions): Promise<string>;
37
+ waitPublished(bus_aid: string, eventId: string): Promise<JsonMap>;
38
+ onPublish(bus_aid: string, handler: Parameters<PubSubClient['onPublish']>[0]): () => boolean;
39
+ subscribe(bus_aid: string, events: string[]): Promise<JsonMap>;
40
+ unsubscribe(bus_aid: string, events: string[]): Promise<JsonMap>;
41
+ nextEvent(bus_aid: string, timeout?: number): Promise<JsonMap>;
42
+ onEvent(bus_aid: string, handler: Parameters<PubSubClient['onEvent']>[0]): () => boolean;
43
+ catalog(bus_aid: string, params?: JsonMap): Promise<JsonMap>;
44
+ stats(bus_aid: string, params?: JsonMap): Promise<JsonMap>;
45
+ issueGrant(bus_aid: string, params: JsonMap): Promise<JsonMap>;
46
+ revokeGrant(bus_aid: string, params: JsonMap): Promise<JsonMap>;
47
+ private manage;
48
+ }
@@ -0,0 +1,152 @@
1
+ import { EventService as EventBusCore } from './service.js';
2
+ import { EventServiceBinding } from './binding.js';
3
+ import { PubSubClient } from './client.js';
4
+ import { SDKCredentials } from './credentials.js';
5
+ import { PubSubError } from './errors.js';
6
+ import { identifier } from './channel.js';
7
+ export { PubSubError } from './errors.js';
8
+ const bindings = new WeakMap();
9
+ function jsonValue(value, parents = new Set()) {
10
+ if (value === null || typeof value === 'string' || typeof value === 'boolean')
11
+ return true;
12
+ if (typeof value === 'number')
13
+ return Number.isFinite(value);
14
+ if (typeof value !== 'object' || parents.has(value))
15
+ return false;
16
+ if (!Array.isArray(value) && Object.getPrototypeOf(value) !== Object.prototype && Object.getPrototypeOf(value) !== null)
17
+ return false;
18
+ if (Object.getOwnPropertySymbols(value).length)
19
+ return false;
20
+ parents.add(value);
21
+ const valid = Array.isArray(value) ? Array.from(value).every(item => jsonValue(item, parents)) : Object.values(value).every(item => jsonValue(item, parents));
22
+ parents.delete(value);
23
+ return valid;
24
+ }
25
+ export class EventService {
26
+ sdk;
27
+ buses;
28
+ constructor(sdk) {
29
+ this.sdk = sdk;
30
+ let buses = bindings.get(sdk);
31
+ if (!buses) {
32
+ buses = new Map();
33
+ bindings.set(sdk, buses);
34
+ }
35
+ this.buses = buses;
36
+ }
37
+ bindBus(bus_aid, role, options = {}) {
38
+ if (this.sdk._closing)
39
+ throw new PubSubError('CLOSED');
40
+ if (!['pub', 'sub', 'bus'].includes(role))
41
+ throw new PubSubError('INVALID_ROLE');
42
+ const previous = this.buses.get(bus_aid);
43
+ if (previous) {
44
+ if (previous.role !== role)
45
+ throw new PubSubError('BUS_ROLE_CONFLICT');
46
+ return this;
47
+ }
48
+ if (role === 'bus') {
49
+ if (bus_aid !== this.sdk.aid)
50
+ throw new PubSubError('SERVICE_IDENTITY_MISMATCH');
51
+ const service = new EventBusCore(bus_aid, options.catalog ?? {}, options.allowlist ?? {}, {
52
+ send: async () => ({}), credentials: options.credentials ?? new SDKCredentials(this.sdk, bus_aid, options.credentialOptions),
53
+ clock: options.clock, state: options.state, limits: options.limits,
54
+ });
55
+ this.buses.set(bus_aid, { role, service, binding: new EventServiceBinding(service, this.sdk, options.bindingOptions), running: false, lifecycle: Promise.resolve() });
56
+ }
57
+ else {
58
+ this.buses.set(bus_aid, { role, client: new PubSubClient(this.sdk, bus_aid, { clock: options.clock, limits: options.limits }), lifecycle: Promise.resolve() });
59
+ }
60
+ return this;
61
+ }
62
+ bound(bus_aid, roles = ['pub', 'sub', 'bus']) {
63
+ const bound = this.buses.get(bus_aid);
64
+ if (!bound)
65
+ throw new PubSubError('BUS_NOT_BOUND');
66
+ if (!roles.includes(bound.role))
67
+ throw new PubSubError('ROLE_MISMATCH');
68
+ return bound;
69
+ }
70
+ client(bus_aid, role) { return this.bound(bus_aid, role ? [role] : ['pub', 'sub']).client; }
71
+ serialize(bound, action) { const result = bound.lifecycle.then(action); bound.lifecycle = result.catch(() => { }); return result; }
72
+ async start(bus_aid, options = {}) {
73
+ if (this.sdk._closing)
74
+ throw new PubSubError('CLOSED');
75
+ const created = !this.buses.has(bus_aid);
76
+ if (created)
77
+ this.bindBus(bus_aid, 'bus', options);
78
+ const bound = this.bound(bus_aid);
79
+ await this.serialize(bound, async () => {
80
+ if (this.sdk._closing)
81
+ throw new PubSubError('CLOSED');
82
+ if (bound.role !== 'bus') {
83
+ await bound.client.start();
84
+ bound.closed = false;
85
+ return;
86
+ }
87
+ try {
88
+ await bound.binding.start();
89
+ bound.running = true;
90
+ }
91
+ catch (error) {
92
+ if (created && this.buses.get(bus_aid) === bound) {
93
+ await bound.binding.close().catch(() => { });
94
+ this.buses.delete(bus_aid);
95
+ }
96
+ throw error;
97
+ }
98
+ });
99
+ return this;
100
+ }
101
+ async drain(bus_aid) { const bound = this.bound(bus_aid); await bound.lifecycle; if (bound.role === 'bus')
102
+ await bound.binding.drain();
103
+ else
104
+ await bound.client.drain(); }
105
+ async close(bus_aid) { const bound = this.bound(bus_aid); await this.serialize(bound, async () => { if (bound.role === 'bus') {
106
+ bound.running = false;
107
+ await bound.binding.close();
108
+ }
109
+ else {
110
+ bound.closed = true;
111
+ await bound.client.close();
112
+ } }); }
113
+ async _closeAll() { await Promise.allSettled([...this.buses.keys()].map(bus_aid => this.close(bus_aid))); }
114
+ async updateConfig(bus_aid, config) { await this.bound(bus_aid, ['bus']).service.updateConfig(config); }
115
+ async authorize(bus_aid, role, authMode, events, credential) {
116
+ if (role !== 'pub' && role !== 'sub')
117
+ throw new PubSubError('INVALID_ROLE');
118
+ this.bindBus(bus_aid, role);
119
+ await this.start(bus_aid);
120
+ const bound = this.bound(bus_aid, ['pub', 'sub']);
121
+ return bound.client.authorize(authMode, events, [role === 'pub' ? 'publish' : 'subscribe'], credential);
122
+ }
123
+ async renew(bus_aid) { return this.client(bus_aid).renew(); }
124
+ async publish(bus_aid, eventName, data, options = {}) { const client = this.client(bus_aid, 'pub'); if (data === null || Array.isArray(data) || typeof data !== 'object' || !jsonValue(data))
125
+ throw new PubSubError('INVALID_CONTENT'); return client.publish(eventName, data, options); }
126
+ async waitPublished(bus_aid, eventId) { return this.client(bus_aid, 'pub').waitPublished(eventId); }
127
+ onPublish(bus_aid, handler) { return this.client(bus_aid, 'pub').onPublish(handler); }
128
+ async subscribe(bus_aid, events) { return this.client(bus_aid, 'sub').subscribe(events); }
129
+ async unsubscribe(bus_aid, events) { return this.client(bus_aid, 'sub').unsubscribe(events); }
130
+ async nextEvent(bus_aid, timeout) { return { ...await this.client(bus_aid, 'sub').nextEvent(timeout), bus_aid }; }
131
+ onEvent(bus_aid, handler) { return this.client(bus_aid, 'sub').onEvent(event => handler({ ...event, bus_aid })); }
132
+ async catalog(bus_aid, params = {}) { if (this.sdk._closing)
133
+ throw new PubSubError('CLOSED'); const bound = this.bound(bus_aid); return bound.role !== 'bus' ? bound.client.catalog(params) : this.manage(bus_aid, 'catalog', params); }
134
+ async stats(bus_aid, params = {}) { return this.manage(bus_aid, 'stats', params); }
135
+ async issueGrant(bus_aid, params) { return this.manage(bus_aid, 'issue_grant', params); }
136
+ async revokeGrant(bus_aid, params) { return this.manage(bus_aid, 'revoke_grant', params); }
137
+ async manage(bus_aid, op, params) {
138
+ if (this.sdk._closing)
139
+ throw new PubSubError('CLOSED');
140
+ const bound = this.bound(bus_aid, ['bus']);
141
+ await bound.lifecycle;
142
+ if (!bound.running)
143
+ throw new PubSubError('CLOSED');
144
+ const now = bound.service.clock();
145
+ const request = { ...structuredClone(params), type: 'app.pubsub.v1', op, service_aid: bus_aid, request_id: typeof params.request_id === 'string' ? params.request_id : identifier(), nonce: typeof params.nonce === 'string' ? params.nonce : identifier(), issued_at: now, expires_at: Number(params.expires_at ?? now + 60_000) };
146
+ const result = await bound.service._handleLocal(request);
147
+ if (op === 'catalog' && Array.isArray(result.items) && result.events === undefined)
148
+ result.events = structuredClone(result.items);
149
+ return result;
150
+ }
151
+ }
152
+ //# sourceMappingURL=index.js.map