@enbox/agent 0.1.5 → 0.1.7

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 (79) hide show
  1. package/dist/browser.mjs +11 -11
  2. package/dist/browser.mjs.map +4 -4
  3. package/dist/esm/anonymous-dwn-api.js +184 -0
  4. package/dist/esm/anonymous-dwn-api.js.map +1 -0
  5. package/dist/esm/dwn-api.js +85 -785
  6. package/dist/esm/dwn-api.js.map +1 -1
  7. package/dist/esm/dwn-encryption.js +342 -0
  8. package/dist/esm/dwn-encryption.js.map +1 -0
  9. package/dist/esm/dwn-key-delivery.js +256 -0
  10. package/dist/esm/dwn-key-delivery.js.map +1 -0
  11. package/dist/esm/dwn-record-upgrade.js +119 -0
  12. package/dist/esm/dwn-record-upgrade.js.map +1 -0
  13. package/dist/esm/dwn-type-guards.js +23 -0
  14. package/dist/esm/dwn-type-guards.js.map +1 -0
  15. package/dist/esm/index.js +6 -0
  16. package/dist/esm/index.js.map +1 -1
  17. package/dist/esm/permissions-api.js +43 -2
  18. package/dist/esm/permissions-api.js.map +1 -1
  19. package/dist/esm/protocol-utils.js +158 -0
  20. package/dist/esm/protocol-utils.js.map +1 -0
  21. package/dist/esm/store-data-protocols.js +1 -1
  22. package/dist/esm/store-data-protocols.js.map +1 -1
  23. package/dist/esm/store-data.js +3 -0
  24. package/dist/esm/store-data.js.map +1 -1
  25. package/dist/esm/sync-engine-level.js +23 -354
  26. package/dist/esm/sync-engine-level.js.map +1 -1
  27. package/dist/esm/sync-messages.js +237 -0
  28. package/dist/esm/sync-messages.js.map +1 -0
  29. package/dist/esm/sync-topological-sort.js +143 -0
  30. package/dist/esm/sync-topological-sort.js.map +1 -0
  31. package/dist/esm/test-harness.js +20 -0
  32. package/dist/esm/test-harness.js.map +1 -1
  33. package/dist/types/anonymous-dwn-api.d.ts +140 -0
  34. package/dist/types/anonymous-dwn-api.d.ts.map +1 -0
  35. package/dist/types/dwn-api.d.ts +36 -184
  36. package/dist/types/dwn-api.d.ts.map +1 -1
  37. package/dist/types/dwn-encryption.d.ts +144 -0
  38. package/dist/types/dwn-encryption.d.ts.map +1 -0
  39. package/dist/types/dwn-key-delivery.d.ts +112 -0
  40. package/dist/types/dwn-key-delivery.d.ts.map +1 -0
  41. package/dist/types/dwn-record-upgrade.d.ts +33 -0
  42. package/dist/types/dwn-record-upgrade.d.ts.map +1 -0
  43. package/dist/types/dwn-type-guards.d.ts +9 -0
  44. package/dist/types/dwn-type-guards.d.ts.map +1 -0
  45. package/dist/types/index.d.ts +6 -0
  46. package/dist/types/index.d.ts.map +1 -1
  47. package/dist/types/permissions-api.d.ts +6 -1
  48. package/dist/types/permissions-api.d.ts.map +1 -1
  49. package/dist/types/protocol-utils.d.ts +70 -0
  50. package/dist/types/protocol-utils.d.ts.map +1 -0
  51. package/dist/types/store-data.d.ts +4 -0
  52. package/dist/types/store-data.d.ts.map +1 -1
  53. package/dist/types/sync-engine-level.d.ts +5 -42
  54. package/dist/types/sync-engine-level.d.ts.map +1 -1
  55. package/dist/types/sync-messages.d.ts +76 -0
  56. package/dist/types/sync-messages.d.ts.map +1 -0
  57. package/dist/types/sync-topological-sort.d.ts +15 -0
  58. package/dist/types/sync-topological-sort.d.ts.map +1 -0
  59. package/dist/types/test-harness.d.ts +10 -0
  60. package/dist/types/test-harness.d.ts.map +1 -1
  61. package/dist/types/types/permissions.d.ts +2 -0
  62. package/dist/types/types/permissions.d.ts.map +1 -1
  63. package/package.json +5 -5
  64. package/src/anonymous-dwn-api.ts +263 -0
  65. package/src/dwn-api.ts +158 -1024
  66. package/src/dwn-encryption.ts +481 -0
  67. package/src/dwn-key-delivery.ts +370 -0
  68. package/src/dwn-record-upgrade.ts +166 -0
  69. package/src/dwn-type-guards.ts +43 -0
  70. package/src/index.ts +6 -0
  71. package/src/permissions-api.ts +54 -2
  72. package/src/protocol-utils.ts +185 -0
  73. package/src/store-data-protocols.ts +1 -1
  74. package/src/store-data.ts +5 -2
  75. package/src/sync-engine-level.ts +25 -414
  76. package/src/sync-messages.ts +279 -0
  77. package/src/sync-topological-sort.ts +167 -0
  78. package/src/test-harness.ts +19 -0
  79. package/src/types/permissions.ts +2 -0
@@ -0,0 +1,256 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { ContentEncryptionAlgorithm, DataStream, KeyDerivationScheme, Message, Protocols, Records, } from '@enbox/dwn-sdk-js';
11
+ import { getDwnServiceEndpointUrls } from './utils.js';
12
+ import { KeyDeliveryProtocolDefinition } from './store-data-protocols.js';
13
+ import { buildEncryptionInput, encryptAndComputeCid, getEncryptionKeyDeriver, getKeyDecrypter, ivLength } from './dwn-encryption.js';
14
+ import { DwnInterface, dwnMessageConstructors } from './types/dwn.js';
15
+ /**
16
+ * Ensures the key delivery protocol is installed on the given tenant's DWN,
17
+ * with `$encryption` keys injected. Uses the same lazy initialization pattern
18
+ * as `DwnDataStore.initialize()`.
19
+ *
20
+ * @param agent - The platform agent
21
+ * @param tenantDid - The DID of the DWN owner
22
+ * @param processRequest - The agent's processRequest method (bound)
23
+ * @param getProtocolDefinition - Function to get a protocol definition
24
+ * @param installedCache - Cache for installation status
25
+ */
26
+ export function ensureKeyDeliveryProtocol(agent, tenantDid, processRequest, getProtocolDefinition, installedCache, protocolDefinitionCache) {
27
+ return __awaiter(this, void 0, void 0, function* () {
28
+ if (installedCache.get(tenantDid)) {
29
+ return;
30
+ }
31
+ const protocolUri = KeyDeliveryProtocolDefinition.protocol;
32
+ const existing = yield getProtocolDefinition(tenantDid, protocolUri);
33
+ if (!existing) {
34
+ // Derive and inject $encryption keys for each type path
35
+ const keyDeriver = yield getEncryptionKeyDeriver(agent, tenantDid);
36
+ const definitionWithKeys = yield Protocols.deriveAndInjectPublicEncryptionKeys(KeyDeliveryProtocolDefinition, keyDeriver);
37
+ const { reply: { status } } = yield processRequest({
38
+ author: tenantDid,
39
+ target: tenantDid,
40
+ messageType: DwnInterface.ProtocolsConfigure,
41
+ messageParams: { definition: definitionWithKeys },
42
+ });
43
+ if (status.code !== 202) {
44
+ throw new Error(`AgentDwnApi: Failed to install key delivery protocol: ${status.code} - ${status.detail}`);
45
+ }
46
+ // Invalidate protocol definition cache so subsequent reads pick up the new definition
47
+ protocolDefinitionCache.delete(`${tenantDid}~${protocolUri}`);
48
+ }
49
+ installedCache.set(tenantDid, true);
50
+ });
51
+ }
52
+ /**
53
+ * Writes a `contextKey` record to the owner's DWN, delivering an encrypted
54
+ * context key to a participant.
55
+ *
56
+ * The payload is encrypted to the **recipient's** ProtocolPath-derived public
57
+ * key on the key-delivery protocol, so only the recipient can decrypt it.
58
+ *
59
+ * @param agent - The platform agent
60
+ * @param params - The write parameters
61
+ * @param processRequest - The agent's processRequest method (bound)
62
+ * @param ensureProtocol - Function to ensure key delivery protocol is installed
63
+ * @param eagerSend - Function to eagerly send the record to the remote DWN
64
+ * @returns The recordId of the written contextKey record
65
+ */
66
+ export function writeContextKeyRecord(agent, params, processRequest, ensureProtocol, eagerSend) {
67
+ return __awaiter(this, void 0, void 0, function* () {
68
+ const { tenantDid, recipientDid, contextKeyData, sourceProtocol, sourceContextId, recipientKeyDeliveryPublicKey } = params;
69
+ // Ensure the key delivery protocol is installed on the owner's DWN
70
+ yield ensureProtocol(tenantDid);
71
+ const protocolUri = KeyDeliveryProtocolDefinition.protocol;
72
+ // Serialize the payload to JSON bytes
73
+ const plaintextBytes = new TextEncoder().encode(JSON.stringify(contextKeyData));
74
+ // Common contextKey record parameters
75
+ const contextKeyParams = {
76
+ protocol: protocolUri,
77
+ protocolPath: 'contextKey',
78
+ dataFormat: 'application/json',
79
+ recipient: recipientDid,
80
+ tags: { protocol: sourceProtocol, contextId: sourceContextId },
81
+ };
82
+ let message;
83
+ let status;
84
+ if (recipientKeyDeliveryPublicKey) {
85
+ // --- Encrypt to the recipient's ProtocolPath key (cross-DWN delivery) ---
86
+ // Manually build encryption input targeting the recipient's key so the
87
+ // record is decryptable only by the recipient.
88
+ const algorithm = ContentEncryptionAlgorithm.A256GCM;
89
+ const dataEncryptionKey = crypto.getRandomValues(new Uint8Array(32));
90
+ const dataEncryptionIV = crypto.getRandomValues(new Uint8Array(ivLength(algorithm)));
91
+ const { encryptedBytes, dataCid, dataSize, authenticationTag } = yield encryptAndComputeCid(plaintextBytes, dataEncryptionKey, dataEncryptionIV, algorithm);
92
+ const encryptionInput = Object.assign(Object.assign({}, buildEncryptionInput(dataEncryptionKey, dataEncryptionIV, recipientKeyDeliveryPublicKey.rootKeyId, recipientKeyDeliveryPublicKey.publicKeyJwk, KeyDerivationScheme.ProtocolPath)), { authenticationTag });
93
+ ({ message, reply: { status } } = yield processRequest({
94
+ author: tenantDid,
95
+ target: tenantDid,
96
+ messageType: DwnInterface.RecordsWrite,
97
+ messageParams: Object.assign(Object.assign({}, contextKeyParams), { dataCid, dataSize, encryptionInput }),
98
+ dataStream: new Blob([encryptedBytes]),
99
+ }));
100
+ }
101
+ else {
102
+ // --- Fallback: encrypt to the owner's key (local self-delivery) ---
103
+ // When no recipient key is provided, use the generic processRequest
104
+ // encryption path which encrypts to the DWN owner's ProtocolPath key.
105
+ ({ message, reply: { status } } = yield processRequest({
106
+ author: tenantDid,
107
+ target: tenantDid,
108
+ messageType: DwnInterface.RecordsWrite,
109
+ messageParams: contextKeyParams,
110
+ dataStream: new Blob([plaintextBytes], { type: 'application/json' }),
111
+ encryption: true,
112
+ }));
113
+ }
114
+ if (!(message && status.code === 202)) {
115
+ throw new Error(`AgentDwnApi: Failed to write contextKey record for ${recipientDid}: ${status.code} - ${status.detail}`);
116
+ }
117
+ // Eagerly send the contextKey record to the tenant's remote DWN so that
118
+ // participants can fetch it immediately without waiting for sync.
119
+ // This is fire-and-forget — sync will guarantee eventual consistency.
120
+ eagerSend(tenantDid, message).catch((err) => {
121
+ console.warn(`AgentDwnApi: Eager send of contextKey record '${message.recordId}' ` +
122
+ `to remote DWN failed: ${err.message}. Sync will deliver it later.`);
123
+ });
124
+ return message.recordId;
125
+ });
126
+ }
127
+ /**
128
+ * Eagerly sends a contextKey record to the tenant's remote DWN.
129
+ * This is best-effort — sync guarantees eventual consistency regardless.
130
+ *
131
+ * @param agent - The platform agent
132
+ * @param tenantDid - The DWN owner's DID
133
+ * @param contextKeyMessage - The context key message to send
134
+ * @param getDwnMessage - Function to read a full message from local DWN
135
+ * @param sendDwnRpcRequest - Function to send a DWN RPC request
136
+ */
137
+ export function eagerSendContextKeyRecord(agent, tenantDid, contextKeyMessage, getDwnMessage, sendDwnRpcRequest) {
138
+ return __awaiter(this, void 0, void 0, function* () {
139
+ let dwnEndpointUrls;
140
+ try {
141
+ dwnEndpointUrls = yield getDwnServiceEndpointUrls(tenantDid, agent.did);
142
+ }
143
+ catch (_a) {
144
+ // DID resolution or endpoint lookup failed — not fatal, sync will handle it.
145
+ return;
146
+ }
147
+ if (dwnEndpointUrls.length === 0) {
148
+ return;
149
+ }
150
+ // Read the full message (including data blob) from the local DWN
151
+ const { data } = yield getDwnMessage({
152
+ author: tenantDid,
153
+ messageType: DwnInterface.RecordsWrite,
154
+ messageCid: yield Message.getCid(contextKeyMessage),
155
+ });
156
+ yield sendDwnRpcRequest({
157
+ targetDid: tenantDid,
158
+ dwnEndpointUrls,
159
+ message: contextKeyMessage,
160
+ data,
161
+ });
162
+ });
163
+ }
164
+ /**
165
+ * Fetches and decrypts a `contextKey` record from a DWN, returning the
166
+ * `DerivedPrivateJwk` payload.
167
+ *
168
+ * Supports both local reads (tenant queries own DWN) and remote reads
169
+ * (participant queries the context owner's DWN).
170
+ *
171
+ * @param agent - The platform agent
172
+ * @param params - The fetch parameters
173
+ * @param processRequest - The agent's processRequest method (bound)
174
+ * @param getSigner - Function to get a signer for a DID
175
+ * @param sendDwnRpcRequest - Function to send a DWN RPC request
176
+ * @returns The decrypted `DerivedPrivateJwk`, or `undefined` if no matching record found
177
+ */
178
+ export function fetchContextKeyRecord(agent, params, processRequest, getSigner, sendDwnRpcRequest) {
179
+ return __awaiter(this, void 0, void 0, function* () {
180
+ var _a, _b, _c, _d, _e;
181
+ const { ownerDid, requesterDid, sourceProtocol, sourceContextId } = params;
182
+ const protocolUri = KeyDeliveryProtocolDefinition.protocol;
183
+ const isLocal = ownerDid === requesterDid;
184
+ // Shared query filter for both local and remote paths
185
+ const contextKeyFilter = {
186
+ protocol: protocolUri,
187
+ protocolPath: 'contextKey',
188
+ recipient: requesterDid,
189
+ tags: { protocol: sourceProtocol, contextId: sourceContextId },
190
+ };
191
+ /** Parse decrypted bytes into a DerivedPrivateJwk. */
192
+ const parsePayload = (bytes) => JSON.parse(new TextDecoder().decode(bytes));
193
+ if (isLocal) {
194
+ // Local query: owner queries their own DWN
195
+ const { reply } = yield processRequest({
196
+ author: requesterDid,
197
+ target: ownerDid,
198
+ messageType: DwnInterface.RecordsQuery,
199
+ messageParams: { filter: contextKeyFilter },
200
+ });
201
+ if (reply.status.code !== 200 || !((_a = reply.entries) === null || _a === void 0 ? void 0 : _a.length)) {
202
+ return undefined;
203
+ }
204
+ // Read the full record to get the data (auto-decrypted by processRequest)
205
+ const recordId = reply.entries[0].recordId;
206
+ const { reply: readReply } = yield processRequest({
207
+ author: requesterDid,
208
+ target: ownerDid,
209
+ messageType: DwnInterface.RecordsRead,
210
+ messageParams: { filter: { recordId } },
211
+ encryption: true,
212
+ });
213
+ const readResult = readReply;
214
+ if (!((_b = readResult.entry) === null || _b === void 0 ? void 0 : _b.data)) {
215
+ return undefined;
216
+ }
217
+ return parsePayload(yield DataStream.toBytes(readResult.entry.data));
218
+ }
219
+ else {
220
+ // Remote query: participant queries the context owner's DWN
221
+ const signer = yield getSigner(requesterDid);
222
+ const dwnEndpointUrls = yield getDwnServiceEndpointUrls(ownerDid, agent.did);
223
+ const recordsQuery = yield dwnMessageConstructors[DwnInterface.RecordsQuery].create({
224
+ signer,
225
+ filter: contextKeyFilter,
226
+ });
227
+ const queryReply = yield sendDwnRpcRequest({
228
+ targetDid: ownerDid,
229
+ dwnEndpointUrls,
230
+ message: recordsQuery.message,
231
+ });
232
+ if (queryReply.status.code !== 200 || !((_c = queryReply.entries) === null || _c === void 0 ? void 0 : _c.length)) {
233
+ return undefined;
234
+ }
235
+ // Read the full record remotely
236
+ const recordId = queryReply.entries[0].recordId;
237
+ const recordsRead = yield dwnMessageConstructors[DwnInterface.RecordsRead].create({
238
+ signer,
239
+ filter: { recordId },
240
+ });
241
+ const readReply = yield sendDwnRpcRequest({
242
+ targetDid: ownerDid,
243
+ dwnEndpointUrls,
244
+ message: recordsRead.message,
245
+ });
246
+ if (!((_d = readReply.entry) === null || _d === void 0 ? void 0 : _d.data) || !((_e = readReply.entry) === null || _e === void 0 ? void 0 : _e.recordsWrite)) {
247
+ return undefined;
248
+ }
249
+ // Decrypt the contextKey payload using the requester's key-delivery protocol path key
250
+ const keyDecrypter = yield getKeyDecrypter(agent, requesterDid);
251
+ const decryptedStream = yield Records.decrypt(readReply.entry.recordsWrite, keyDecrypter, readReply.entry.data);
252
+ return parsePayload(yield DataStream.toBytes(decryptedStream));
253
+ }
254
+ });
255
+ }
256
+ //# sourceMappingURL=dwn-key-delivery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dwn-key-delivery.js","sourceRoot":"","sources":["../../src/dwn-key-delivery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,119 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { Encoder, KeyDerivationScheme, Message, Records, } from '@enbox/dwn-sdk-js';
11
+ import { deriveContextEncryptionInput, getKeyDecrypter } from './dwn-encryption.js';
12
+ import { DwnInterface, dwnMessageConstructors } from './types/dwn.js';
13
+ /**
14
+ * Reactively upgrades an externally-authored root record that has only
15
+ * ProtocolPath encryption by appending a ProtocolContext recipient entry.
16
+ *
17
+ * After the upgrade, both the owner (ProtocolPath) and context key holders —
18
+ * including the external author (ProtocolContext) — can decrypt the record.
19
+ *
20
+ * Steps:
21
+ * 1. Decrypt the DEK using the owner's ProtocolPath-derived private key
22
+ * 2. Derive the context public key from the owner's #enc key
23
+ * 3. ECIES-encrypt the same DEK to the context public key
24
+ * 4. Append the ProtocolContext recipient entry (using PR 0b append mode)
25
+ * 5. Re-sign the record as owner
26
+ *
27
+ * @param agent - The platform agent
28
+ * @param tenantDid - The DWN owner's DID
29
+ * @param recordsWrite - The RecordsWrite message to upgrade
30
+ * @param dwn - The DWN instance
31
+ * @param getSigner - Function to get a DWN signer
32
+ * @param contextKeyCache - Cache for context key info
33
+ */
34
+ export function upgradeExternalRootRecord(agent, tenantDid, recordsWrite, dwn, getSigner, contextKeyCache) {
35
+ return __awaiter(this, void 0, void 0, function* () {
36
+ const { encryption } = recordsWrite;
37
+ if (!encryption) {
38
+ return;
39
+ }
40
+ // Verify: has ProtocolPath but NOT ProtocolContext
41
+ const hasProtocolPath = encryption.recipients.some((r) => r.header.derivationScheme === KeyDerivationScheme.ProtocolPath);
42
+ const hasProtocolContext = encryption.recipients.some((r) => r.header.derivationScheme === KeyDerivationScheme.ProtocolContext);
43
+ if (!hasProtocolPath || hasProtocolContext) {
44
+ return;
45
+ }
46
+ // 1. Decrypt the DEK using the owner's ProtocolPath key
47
+ const keyDecrypter = yield getKeyDecrypter(agent, tenantDid);
48
+ // Find the ProtocolPath recipient entry
49
+ const pathRecipient = encryption.recipients.find((r) => r.header.derivationScheme === KeyDerivationScheme.ProtocolPath);
50
+ const fullDerivationPath = Records.constructKeyDerivationPathUsingProtocolPathScheme(recordsWrite.descriptor);
51
+ const dataEncryptionKey = yield keyDecrypter.decrypt(fullDerivationPath, {
52
+ encryptedKey: Encoder.base64UrlToBytes(pathRecipient.encrypted_key),
53
+ ephemeralPublicKey: pathRecipient.header.epk,
54
+ });
55
+ // 2. Derive the context public key — contextId = recordId for root records
56
+ const contextId = recordsWrite.recordId;
57
+ const encryptionIV = Encoder.base64UrlToBytes(encryption.iv);
58
+ // 3 & 4. Append the ProtocolContext recipient entry using append mode.
59
+ // Append mode preserves the author's identity and authorization so that
60
+ // signAsOwner() can be called in step 5.
61
+ const { encryptionInput: contextEncryptionInput, keyId, keyUri, contextDerivationPath } = yield deriveContextEncryptionInput(agent, tenantDid, contextId, dataEncryptionKey, encryptionIV);
62
+ // Set the authentication tag from the existing JWE encryption property
63
+ const fullContextInput = Object.assign(Object.assign({}, contextEncryptionInput), { authenticationTag: Encoder.base64UrlToBytes(encryption.tag) });
64
+ // Parse the message to get a RecordsWrite instance we can mutate
65
+ const recordsWriteInstance = yield dwnMessageConstructors[DwnInterface.RecordsWrite].parse(recordsWrite);
66
+ yield recordsWriteInstance.encryptSymmetricEncryptionKey(fullContextInput, { append: true });
67
+ // 5. Re-sign as owner — the author's signature is preserved but its
68
+ // encryptionCid is now stale; the owner's signature vouches for the
69
+ // updated encryption property.
70
+ const signer = yield getSigner(tenantDid);
71
+ yield recordsWriteInstance.signAsOwner(signer);
72
+ // Store the upgraded message directly via the message store, bypassing
73
+ // the handler's conflict resolution which doesn't support same-timestamp
74
+ // owner-augmented replacements. The data is unchanged — only the encryption
75
+ // metadata and authorization are updated.
76
+ //
77
+ // We must also update the state index and event stream to keep sync and
78
+ // real-time subscribers consistent — without this, the upgraded record
79
+ // would never propagate to remote DWNs or notify subscribers.
80
+ const { messageStore, stateIndex, eventStream } = dwn.storage;
81
+ // Validate the upgrade only changed encryption and authorization fields.
82
+ // The descriptor, recordId, contextId, and data must remain identical.
83
+ // Note: parse() may produce a new descriptor object, so we compare by value.
84
+ const upgradedMessage = recordsWriteInstance.message;
85
+ if (JSON.stringify(upgradedMessage.descriptor) !== JSON.stringify(recordsWrite.descriptor)) {
86
+ throw new Error('AgentDwnApi: upgradeExternalRootRecord() must not modify the descriptor.');
87
+ }
88
+ if (upgradedMessage.recordId !== recordsWrite.recordId) {
89
+ throw new Error('AgentDwnApi: upgradeExternalRootRecord() must not modify the recordId.');
90
+ }
91
+ // Fetch the stored original (which carries encodedData for small payloads)
92
+ const originalCid = yield Message.getCid(recordsWrite);
93
+ const storedOriginal = yield messageStore.get(tenantDid, originalCid);
94
+ // Build indexes for the upgraded message (mark as latest base state)
95
+ const isLatestBaseState = true;
96
+ const upgradedIndexes = yield recordsWriteInstance.constructIndexes(isLatestBaseState);
97
+ // Carry over the encoded data from the stored original (the handler
98
+ // base64url-encodes small payloads into encodedData during processMessage)
99
+ if (storedOriginal === null || storedOriginal === void 0 ? void 0 : storedOriginal.encodedData) {
100
+ upgradedMessage.encodedData = storedOriginal.encodedData;
101
+ }
102
+ // Use put-before-delete ordering: if a crash occurs after the put but
103
+ // before the delete, we end up with a duplicate (recoverable via the
104
+ // isLatestBaseState index) rather than data loss (unrecoverable).
105
+ const upgradedCid = yield Message.getCid(upgradedMessage);
106
+ yield messageStore.put(tenantDid, upgradedMessage, upgradedIndexes);
107
+ yield stateIndex.insert(tenantDid, upgradedCid, upgradedIndexes);
108
+ // Now remove the original message and its state index entry.
109
+ yield messageStore.delete(tenantDid, originalCid);
110
+ yield stateIndex.delete(tenantDid, [originalCid]);
111
+ // Notify real-time subscribers (mirrors handler behavior)
112
+ if (eventStream !== undefined) {
113
+ eventStream.emit(tenantDid, { message: upgradedMessage }, upgradedIndexes);
114
+ }
115
+ // Cache context key info for subsequent writes in this context
116
+ contextKeyCache.set(contextId, { keyId, keyUri, contextDerivationPath });
117
+ });
118
+ }
119
+ //# sourceMappingURL=dwn-record-upgrade.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dwn-record-upgrade.js","sourceRoot":"","sources":["../../src/dwn-record-upgrade.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { DwnInterfaceName } from '@enbox/dwn-sdk-js';
2
+ import { DwnInterface } from './types/dwn.js';
3
+ export function isDwnRequest(dwnRequest, messageType) {
4
+ return dwnRequest.messageType === messageType;
5
+ }
6
+ export function isDwnMessage(messageType, message) {
7
+ const incomingMessageInterfaceName = message.descriptor.interface + message.descriptor.method;
8
+ return incomingMessageInterfaceName === messageType;
9
+ }
10
+ export function isRecordsType(messageType) {
11
+ return messageType === DwnInterface.RecordsDelete ||
12
+ messageType === DwnInterface.RecordsQuery ||
13
+ messageType === DwnInterface.RecordsRead ||
14
+ messageType === DwnInterface.RecordsSubscribe ||
15
+ messageType === DwnInterface.RecordsWrite;
16
+ }
17
+ export function isRecordPermissionScope(scope) {
18
+ return scope.interface === DwnInterfaceName.Records;
19
+ }
20
+ export function isMessagesPermissionScope(scope) {
21
+ return scope.interface === DwnInterfaceName.Messages;
22
+ }
23
+ //# sourceMappingURL=dwn-type-guards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dwn-type-guards.js","sourceRoot":"","sources":["../../src/dwn-type-guards.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,UAAU,YAAY,CAC1B,UAA2C,EAAE,WAAc;IAE3D,OAAO,UAAU,CAAC,WAAW,KAAK,WAAW,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,WAAc,EAAE,OAAuB;IAEvC,MAAM,4BAA4B,GAAG,OAAO,CAAC,UAAU,CAAC,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC;IAC9F,OAAO,4BAA4B,KAAK,WAAW,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,WAAyB;IACrD,OAAO,WAAW,KAAK,YAAY,CAAC,aAAa;QAC/C,WAAW,KAAK,YAAY,CAAC,YAAY;QACzC,WAAW,KAAK,YAAY,CAAC,WAAW;QACxC,WAAW,KAAK,YAAY,CAAC,gBAAgB;QAC7C,WAAW,KAAK,YAAY,CAAC,YAAY,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAyB;IAC/D,OAAO,KAAK,CAAC,SAAS,KAAK,gBAAgB,CAAC,OAAO,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,KAAyB;IACjE,OAAO,KAAK,CAAC,SAAS,KAAK,gBAAgB,CAAC,QAAQ,CAAC;AACvD,CAAC"}
package/dist/esm/index.js CHANGED
@@ -1,9 +1,15 @@
1
1
  export * from './types/dwn.js';
2
2
  export * from './agent-did-resolver-cache.js';
3
+ export * from './anonymous-dwn-api.js';
3
4
  export * from './bearer-identity.js';
4
5
  export * from './crypto-api.js';
5
6
  export * from './did-api.js';
6
7
  export * from './dwn-api.js';
8
+ export * from './dwn-encryption.js';
9
+ export * from './dwn-key-delivery.js';
10
+ export * from './dwn-record-upgrade.js';
11
+ export * from './dwn-type-guards.js';
12
+ export * from './protocol-utils.js';
7
13
  export * from './hd-identity-vault.js';
8
14
  export * from './identity-api.js';
9
15
  export * from './local-key-manager.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,cAAc,gBAAgB,CAAC;AAQ/B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,cAAc,gBAAgB,CAAC;AAQ/B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,sBAAsB,CAAC"}
@@ -62,7 +62,7 @@ export class AgentPermissionsApi {
62
62
  });
63
63
  }
64
64
  fetchGrants(_a) {
65
- return __awaiter(this, arguments, void 0, function* ({ author, target, grantee, grantor, protocol, remote = false }) {
65
+ return __awaiter(this, arguments, void 0, function* ({ author, target, grantee, grantor, protocol, remote = false, checkRevoked = true, }) {
66
66
  // filter by a protocol using tags if provided
67
67
  const tags = protocol ? { protocol } : undefined;
68
68
  const params = {
@@ -83,15 +83,56 @@ export class AgentPermissionsApi {
83
83
  if (reply.status.code !== 200) {
84
84
  throw new Error(`PermissionsApi: Failed to fetch grants: ${reply.status.detail}`);
85
85
  }
86
+ // Build a set of revoked grant IDs so that revoked grants can be filtered out.
87
+ // Uses a single batch query for all revocations rather than N individual reads.
88
+ const revokedGrantIds = checkRevoked
89
+ ? yield this.fetchRevokedGrantIds({ author, target, grantor, remote, tags })
90
+ : new Set();
86
91
  const grants = [];
87
92
  for (const entry of reply.entries) {
88
- // TODO: Check for revocation status based on a request parameter and filter out revoked grants
93
+ if (revokedGrantIds.has(entry.recordId)) {
94
+ continue;
95
+ }
89
96
  const grant = yield DwnPermissionGrant.parse(entry);
90
97
  grants.push({ grant, message: entry });
91
98
  }
92
99
  return grants;
93
100
  });
94
101
  }
102
+ /**
103
+ * Fetch all revocation record IDs for grants, returned as a Set of parent grant record IDs.
104
+ * Issues a single RecordsQuery for all revocation records, optionally scoped to a grantor and protocol.
105
+ */
106
+ fetchRevokedGrantIds(_a) {
107
+ return __awaiter(this, arguments, void 0, function* ({ author, target, grantor, remote, tags }) {
108
+ const revocationParams = {
109
+ author,
110
+ target,
111
+ messageType: DwnInterface.RecordsQuery,
112
+ messageParams: {
113
+ filter: {
114
+ author: grantor, // revocations are authored by the same grantor
115
+ protocol: PermissionsProtocol.uri,
116
+ protocolPath: PermissionsProtocol.revocationPath,
117
+ tags,
118
+ }
119
+ }
120
+ };
121
+ const { reply: revocationReply } = remote
122
+ ? yield this.agent.sendDwnRequest(revocationParams)
123
+ : yield this.agent.processDwnRequest(revocationParams);
124
+ if (revocationReply.status.code !== 200) {
125
+ throw new Error(`PermissionsApi: Failed to fetch revocations: ${revocationReply.status.detail}`);
126
+ }
127
+ const revokedGrantIds = new Set();
128
+ for (const entry of revocationReply.entries) {
129
+ if (entry.descriptor.parentId !== undefined) {
130
+ revokedGrantIds.add(entry.descriptor.parentId);
131
+ }
132
+ }
133
+ return revokedGrantIds;
134
+ });
135
+ }
95
136
  fetchRequests(_a) {
96
137
  return __awaiter(this, arguments, void 0, function* ({ author, target, protocol, remote = false }) {
97
138
  // filter by a protocol using tags if provided
@@ -1 +1 @@
1
- {"version":3,"file":"permissions-api.js","sourceRoot":"","sources":["../../src/permissions-api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"permissions-api.js","sourceRoot":"","sources":["../../src/permissions-api.ts"],"names":[],"mappings":"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"}