@interop/did-cli 0.7.1 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/CHANGELOG.md +130 -0
  2. package/README.md +335 -6
  3. package/dist/commands/did.d.ts.map +1 -1
  4. package/dist/commands/did.js +66 -18
  5. package/dist/commands/did.js.map +1 -1
  6. package/dist/commands/edv.d.ts +63 -0
  7. package/dist/commands/edv.d.ts.map +1 -0
  8. package/dist/commands/edv.js +627 -0
  9. package/dist/commands/edv.js.map +1 -0
  10. package/dist/commands/key.d.ts.map +1 -1
  11. package/dist/commands/key.js +87 -13
  12. package/dist/commands/key.js.map +1 -1
  13. package/dist/commands/was/collection.d.ts +121 -0
  14. package/dist/commands/was/collection.d.ts.map +1 -0
  15. package/dist/commands/was/collection.js +316 -0
  16. package/dist/commands/was/collection.js.map +1 -0
  17. package/dist/commands/was/policy.d.ts +50 -0
  18. package/dist/commands/was/policy.d.ts.map +1 -0
  19. package/dist/commands/was/policy.js +133 -0
  20. package/dist/commands/was/policy.js.map +1 -0
  21. package/dist/commands/was/publish.d.ts +67 -0
  22. package/dist/commands/was/publish.d.ts.map +1 -0
  23. package/dist/commands/was/publish.js +151 -0
  24. package/dist/commands/was/publish.js.map +1 -0
  25. package/dist/commands/was/resource.d.ts +148 -0
  26. package/dist/commands/was/resource.d.ts.map +1 -0
  27. package/dist/commands/was/resource.js +402 -0
  28. package/dist/commands/was/resource.js.map +1 -0
  29. package/dist/commands/was/shared.d.ts +156 -0
  30. package/dist/commands/was/shared.d.ts.map +1 -0
  31. package/dist/commands/was/shared.js +237 -0
  32. package/dist/commands/was/shared.js.map +1 -0
  33. package/dist/commands/was/space.d.ts +196 -0
  34. package/dist/commands/was/space.d.ts.map +1 -0
  35. package/dist/commands/was/space.js +516 -0
  36. package/dist/commands/was/space.js.map +1 -0
  37. package/dist/commands/was/tree.d.ts +44 -0
  38. package/dist/commands/was/tree.d.ts.map +1 -0
  39. package/dist/commands/was/tree.js +135 -0
  40. package/dist/commands/was/tree.js.map +1 -0
  41. package/dist/commands/was.d.ts +29 -496
  42. package/dist/commands/was.d.ts.map +1 -1
  43. package/dist/commands/was.js +84 -1473
  44. package/dist/commands/was.js.map +1 -1
  45. package/dist/commands/zcap.d.ts +22 -2
  46. package/dist/commands/zcap.d.ts.map +1 -1
  47. package/dist/commands/zcap.js +6 -20
  48. package/dist/commands/zcap.js.map +1 -1
  49. package/dist/edv/core.d.ts +60 -0
  50. package/dist/edv/core.d.ts.map +1 -0
  51. package/dist/edv/core.js +75 -0
  52. package/dist/edv/core.js.map +1 -0
  53. package/dist/edv/document.d.ts +25 -0
  54. package/dist/edv/document.d.ts.map +1 -0
  55. package/dist/edv/document.js +19 -0
  56. package/dist/edv/document.js.map +1 -0
  57. package/dist/edv/hmac.d.ts +26 -0
  58. package/dist/edv/hmac.d.ts.map +1 -0
  59. package/dist/edv/hmac.js +67 -0
  60. package/dist/edv/hmac.js.map +1 -0
  61. package/dist/edv/recipients.d.ts +65 -0
  62. package/dist/edv/recipients.d.ts.map +1 -0
  63. package/dist/edv/recipients.js +253 -0
  64. package/dist/edv/recipients.js.map +1 -0
  65. package/dist/edv/stream.d.ts +69 -0
  66. package/dist/edv/stream.d.ts.map +1 -0
  67. package/dist/edv/stream.js +169 -0
  68. package/dist/edv/stream.js.map +1 -0
  69. package/dist/index.js +2 -0
  70. package/dist/index.js.map +1 -1
  71. package/dist/meta.d.ts +1 -0
  72. package/dist/meta.d.ts.map +1 -1
  73. package/dist/meta.js +1 -1
  74. package/dist/meta.js.map +1 -1
  75. package/dist/storage.d.ts +6 -4
  76. package/dist/storage.d.ts.map +1 -1
  77. package/dist/storage.js +6 -5
  78. package/dist/storage.js.map +1 -1
  79. package/dist/was/capability.d.ts +10 -13
  80. package/dist/was/capability.d.ts.map +1 -1
  81. package/dist/was/capability.js +1 -59
  82. package/dist/was/capability.js.map +1 -1
  83. package/dist/was/io.d.ts +14 -0
  84. package/dist/was/io.d.ts.map +1 -1
  85. package/dist/was/io.js +20 -7
  86. package/dist/was/io.js.map +1 -1
  87. package/dist/zcap/delegate.d.ts +2 -2
  88. package/dist/zcap/delegate.js +2 -2
  89. package/dist/zcap/resolve.d.ts +15 -0
  90. package/dist/zcap/resolve.d.ts.map +1 -0
  91. package/dist/zcap/resolve.js +55 -0
  92. package/dist/zcap/resolve.js.map +1 -0
  93. package/package.json +17 -14
@@ -0,0 +1,65 @@
1
+ import { X25519KeyAgreementKey2020 } from '@interop/x25519-key-agreement-key';
2
+ /** The X25519 key-agreement verification-method type minimal-cipher expects. */
3
+ export declare const KEY_AGREEMENT_TYPE = "X25519KeyAgreementKey2020";
4
+ /**
5
+ * An X25519 key-agreement key instance with its `.id` (`kid`) populated. Used
6
+ * both as a resolved recipient (encrypt reads `id` + `publicKeyMultibase`) and
7
+ * as the decryption key (decrypt reads `id` + `deriveSecret`).
8
+ */
9
+ export type KeyAgreementKey = InstanceType<typeof X25519KeyAgreementKey2020> & {
10
+ id: string;
11
+ };
12
+ /**
13
+ * Resolve one `--recipient` value to a recipient key. Resolution order: a raw
14
+ * X25519 `publicKeyMultibase` (starts `z6LS`), then a DID / DID URL, then a
15
+ * wallet key fingerprint or handle.
16
+ *
17
+ * @param options {object}
18
+ * @param options.ref {string}
19
+ * @returns {Promise<KeyAgreementKey>}
20
+ */
21
+ export declare function resolveRecipient({ ref }: {
22
+ ref: string;
23
+ }): Promise<KeyAgreementKey>;
24
+ /**
25
+ * Load and validate a key-document JSON file holding an X25519 public key, and
26
+ * construct its key-agreement key.
27
+ *
28
+ * @param options {object}
29
+ * @param options.path {string}
30
+ * @returns {Promise<KeyAgreementKey>}
31
+ */
32
+ export declare function resolveRecipientFile({ path }: {
33
+ path: string;
34
+ }): Promise<KeyAgreementKey>;
35
+ /**
36
+ * Resolve a `--key` reference (fingerprint or handle) to a reconstructed
37
+ * X25519 key-agreement key. The referenced key must be a stored X25519 key
38
+ * with its secret half.
39
+ *
40
+ * @param options {object}
41
+ * @param options.ref {string}
42
+ * @returns {Promise<KeyAgreementKey>}
43
+ */
44
+ export declare function loadKeyAgreementKey({ ref }: {
45
+ ref: string;
46
+ }): Promise<KeyAgreementKey>;
47
+ /**
48
+ * Auto-select the decryption key when `--key` is omitted: scan the stored
49
+ * X25519 secret keys and return the one whose `id` (`kid`) matches a recipient
50
+ * of the JWE. Throws when none match or more than one does.
51
+ *
52
+ * @param options {object}
53
+ * @param options.jwe {{recipients?: {header?: {kid?: string}}[]}}
54
+ * @returns {Promise<KeyAgreementKey>}
55
+ */
56
+ export declare function autoSelectKeyAgreementKey({ jwe }: {
57
+ jwe: {
58
+ recipients?: {
59
+ header?: {
60
+ kid?: string;
61
+ };
62
+ }[];
63
+ };
64
+ }): Promise<KeyAgreementKey>;
65
+ //# sourceMappingURL=recipients.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recipients.d.ts","sourceRoot":"","sources":["../../src/edv/recipients.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAA;AAI7E,gFAAgF;AAChF,eAAO,MAAM,kBAAkB,8BAA8B,CAAA;AAW7D;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG,YAAY,CAAC,OAAO,yBAAyB,CAAC,GAAG;IAC7E,EAAE,EAAE,MAAM,CAAA;CACX,CAAA;AAqKD;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CAAC,EACrC,GAAG,EACJ,EAAE;IACD,GAAG,EAAE,MAAM,CAAA;CACZ,GAAG,OAAO,CAAC,eAAe,CAAC,CAmB3B;AAED;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CAAC,EACzC,IAAI,EACL,EAAE;IACD,IAAI,EAAE,MAAM,CAAA;CACb,GAAG,OAAO,CAAC,eAAe,CAAC,CAa3B;AAED;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CAAC,EACxC,GAAG,EACJ,EAAE;IACD,GAAG,EAAE,MAAM,CAAA;CACZ,GAAG,OAAO,CAAC,eAAe,CAAC,CAa3B;AAED;;;;;;;;GAQG;AACH,wBAAsB,yBAAyB,CAAC,EAC9C,GAAG,EACJ,EAAE;IACD,GAAG,EAAE;QAAE,UAAU,CAAC,EAAE;YAAE,MAAM,CAAC,EAAE;gBAAE,GAAG,CAAC,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,EAAE,CAAA;KAAE,CAAA;CACtD,GAAG,OAAO,CAAC,eAAe,CAAC,CAsC3B"}
@@ -0,0 +1,253 @@
1
+ /**
2
+ * Recipient and key-agreement resolution for the `edv encrypt`/`edv decrypt`
3
+ * commands. Normalizes the several recipient reference forms (a raw X25519
4
+ * `publicKeyMultibase`, a wallet key fingerprint or handle, a DID or DID URL,
5
+ * and a key-document JSON file) into `X25519KeyAgreementKey2020` instances --
6
+ * the shape `@interop/minimal-cipher`'s `keyResolver` returns (the cipher reads
7
+ * `id` and `publicKeyMultibase` from a recipient on encrypt, and `id` and
8
+ * `deriveSecret` from the key on decrypt, all of which an instance provides).
9
+ * Builds the recipients array plus that resolver, and reconstructs stored keys
10
+ * for decrypt.
11
+ */
12
+ import { readFile } from 'node:fs/promises';
13
+ import { securityLoader } from '@interop/security-document-loader';
14
+ import { X25519KeyAgreementKey2020 } from '@interop/x25519-key-agreement-key';
15
+ import { listCollection, loadFromCollection } from '../storage.js';
16
+ import { resolveKeyRef } from '../meta.js';
17
+ /** The X25519 key-agreement verification-method type minimal-cipher expects. */
18
+ export const KEY_AGREEMENT_TYPE = 'X25519KeyAgreementKey2020';
19
+ /**
20
+ * Document loader for DID-URL recipient resolution: resolves a bare DID to its
21
+ * DID document and dereferences a `did#fragment` URL straight to its
22
+ * verification-method node, for both did:key (offline) and did:web (fetched).
23
+ * Built once and reused. (Per project convention, DID/JSON-LD resolution goes
24
+ * through `@interop/security-document-loader`, never a hand-rolled loader.)
25
+ */
26
+ const documentLoader = securityLoader().build();
27
+ /**
28
+ * Construct an X25519 key-agreement key from a verification method or stored
29
+ * key pair. `didKey: true` defaults a source with no `controller`/`id` to its
30
+ * `did:key` form, so the key class derives `.id` as `did:key:<mb>#<mb>` -- the
31
+ * `kid` encrypt and decrypt both match on -- while a source that already
32
+ * carries an `id`/`controller` (e.g. a DID verification method) keeps it. A
33
+ * `type: 'Multikey'` source is normalized via `fromMultikey`. The constructor
34
+ * validates the multibase header bytes.
35
+ *
36
+ * @param source {Record<string, any>}
37
+ * @returns {Promise<KeyAgreementKey>}
38
+ */
39
+ async function keyAgreementKeyFrom(source) {
40
+ const key = await X25519KeyAgreementKey2020.from({ didKey: true, ...source });
41
+ return key;
42
+ }
43
+ /**
44
+ * Split a DID URL into its base DID and `#fragment` (undefined when absent).
45
+ *
46
+ * @param options {object}
47
+ * @param options.ref {string}
48
+ * @returns {{did: string, fragment?: string}}
49
+ */
50
+ function splitFragment({ ref }) {
51
+ const hash = ref.indexOf('#');
52
+ if (hash === -1) {
53
+ return { did: ref };
54
+ }
55
+ return { did: ref.slice(0, hash), fragment: ref.slice(hash + 1) };
56
+ }
57
+ /**
58
+ * Resolve a DID URL through the security document loader. A bare DID resolves
59
+ * to its DID document; a `did#fragment` URL is dereferenced straight to its
60
+ * verification-method node.
61
+ *
62
+ * @param options {object}
63
+ * @param options.url {string}
64
+ * @returns {Promise<Record<string, any>>}
65
+ */
66
+ async function resolveDidUrl({ url }) {
67
+ const { document } = (await documentLoader(url));
68
+ return document;
69
+ }
70
+ /**
71
+ * True when a `publicKeyMultibase` carries the X25519 multicodec header. This
72
+ * is the type-agnostic discriminator for a usable key-agreement key: it accepts
73
+ * both an `X25519KeyAgreementKey2020` and a `Multikey` whose key is X25519,
74
+ * while rejecting an Ed25519/other key, regardless of the `type` string a DID
75
+ * document happens to use.
76
+ *
77
+ * @param publicKeyMultibase {string | undefined}
78
+ * @returns {boolean}
79
+ */
80
+ function isX25519PublicKey(publicKeyMultibase) {
81
+ if (!publicKeyMultibase) {
82
+ return false;
83
+ }
84
+ try {
85
+ // The constructor validates the X25519 header bytes and throws otherwise.
86
+ X25519KeyAgreementKey2020.fromFingerprint({
87
+ fingerprint: publicKeyMultibase
88
+ });
89
+ return true;
90
+ }
91
+ catch {
92
+ return false;
93
+ }
94
+ }
95
+ /**
96
+ * Validate that a verification method is a usable X25519 key-agreement key
97
+ * (an `X25519KeyAgreementKey2020` or a `Multikey` whose public key is X25519)
98
+ * and construct it.
99
+ *
100
+ * @param options {object}
101
+ * @param options.method {Record<string, any>}
102
+ * @param options.ref {string}
103
+ * @returns {Promise<KeyAgreementKey>}
104
+ */
105
+ async function toKeyAgreementKey({ method, ref }) {
106
+ if (!isX25519PublicKey(method.publicKeyMultibase)) {
107
+ throw new Error(`Recipient "${ref}" is not an ${KEY_AGREEMENT_TYPE} key.`);
108
+ }
109
+ return keyAgreementKeyFrom(method);
110
+ }
111
+ /**
112
+ * Resolve a DID or DID URL recipient to its X25519 key-agreement key. A bare
113
+ * DID with a single keyAgreement key uses that key; one with several requires
114
+ * the `#fragment` form to disambiguate.
115
+ *
116
+ * @param options {object}
117
+ * @param options.ref {string}
118
+ * @returns {Promise<KeyAgreementKey>}
119
+ */
120
+ async function resolveDidRecipient({ ref }) {
121
+ const { did, fragment } = splitFragment({ ref });
122
+ // A fragment URL dereferences straight to its verification-method node.
123
+ if (fragment !== undefined) {
124
+ return toKeyAgreementKey({ method: await resolveDidUrl({ url: ref }), ref });
125
+ }
126
+ // A bare DID: pick the single keyAgreement key, dereferencing any entries
127
+ // that are id references rather than embedded verification methods.
128
+ const didDocument = await resolveDidUrl({ url: did });
129
+ const entries = (didDocument.keyAgreement ?? []);
130
+ const methods = [];
131
+ for (const entry of entries) {
132
+ methods.push(typeof entry === 'string' ? await resolveDidUrl({ url: entry }) : entry);
133
+ }
134
+ const usable = methods.filter(method => method.type === KEY_AGREEMENT_TYPE && method.publicKeyMultibase);
135
+ if (usable.length === 0) {
136
+ throw new Error(`DID ${did} has no ${KEY_AGREEMENT_TYPE} keyAgreement key.`);
137
+ }
138
+ if (usable.length > 1) {
139
+ throw new Error(`DID ${did} has ${usable.length} keyAgreement keys; ` +
140
+ 'use the did#fragment form to choose one.');
141
+ }
142
+ return toKeyAgreementKey({ method: usable[0], ref });
143
+ }
144
+ /**
145
+ * Resolve one `--recipient` value to a recipient key. Resolution order: a raw
146
+ * X25519 `publicKeyMultibase` (starts `z6LS`), then a DID / DID URL, then a
147
+ * wallet key fingerprint or handle.
148
+ *
149
+ * @param options {object}
150
+ * @param options.ref {string}
151
+ * @returns {Promise<KeyAgreementKey>}
152
+ */
153
+ export async function resolveRecipient({ ref }) {
154
+ if (ref.startsWith('z6LS')) {
155
+ return toKeyAgreementKey({
156
+ method: { type: KEY_AGREEMENT_TYPE, publicKeyMultibase: ref },
157
+ ref
158
+ });
159
+ }
160
+ if (ref.startsWith('did:')) {
161
+ return resolveDidRecipient({ ref });
162
+ }
163
+ const resolved = await resolveKeyRef({ ref });
164
+ if (!resolved?.key.publicKeyMultibase) {
165
+ throw new Error(`Could not resolve recipient "${ref}".`);
166
+ }
167
+ const stored = resolved.key;
168
+ if (stored.type !== KEY_AGREEMENT_TYPE) {
169
+ throw new Error(`Wallet key "${ref}" is not an ${KEY_AGREEMENT_TYPE} key.`);
170
+ }
171
+ return keyAgreementKeyFrom(stored);
172
+ }
173
+ /**
174
+ * Load and validate a key-document JSON file holding an X25519 public key, and
175
+ * construct its key-agreement key.
176
+ *
177
+ * @param options {object}
178
+ * @param options.path {string}
179
+ * @returns {Promise<KeyAgreementKey>}
180
+ */
181
+ export async function resolveRecipientFile({ path }) {
182
+ let method;
183
+ try {
184
+ method = JSON.parse(await readFile(path, 'utf8'));
185
+ }
186
+ catch (err) {
187
+ throw new Error(`Could not read key document "${path}": ${err.message}`, {
188
+ cause: err
189
+ });
190
+ }
191
+ return toKeyAgreementKey({ method, ref: path });
192
+ }
193
+ /**
194
+ * Resolve a `--key` reference (fingerprint or handle) to a reconstructed
195
+ * X25519 key-agreement key. The referenced key must be a stored X25519 key
196
+ * with its secret half.
197
+ *
198
+ * @param options {object}
199
+ * @param options.ref {string}
200
+ * @returns {Promise<KeyAgreementKey>}
201
+ */
202
+ export async function loadKeyAgreementKey({ ref }) {
203
+ const resolved = await resolveKeyRef({ ref });
204
+ if (!resolved) {
205
+ throw new Error(`No locally stored key found for "${ref}".`);
206
+ }
207
+ const stored = resolved.key;
208
+ if (stored.type !== KEY_AGREEMENT_TYPE) {
209
+ throw new Error(`Wallet key "${ref}" is not an ${KEY_AGREEMENT_TYPE} key.`);
210
+ }
211
+ if (!stored.privateKeyMultibase) {
212
+ throw new Error(`Wallet key "${ref}" has no secret key to decrypt with.`);
213
+ }
214
+ return keyAgreementKeyFrom(stored);
215
+ }
216
+ /**
217
+ * Auto-select the decryption key when `--key` is omitted: scan the stored
218
+ * X25519 secret keys and return the one whose `id` (`kid`) matches a recipient
219
+ * of the JWE. Throws when none match or more than one does.
220
+ *
221
+ * @param options {object}
222
+ * @param options.jwe {{recipients?: {header?: {kid?: string}}[]}}
223
+ * @returns {Promise<KeyAgreementKey>}
224
+ */
225
+ export async function autoSelectKeyAgreementKey({ jwe }) {
226
+ const kids = new Set((jwe.recipients ?? [])
227
+ .map(recipient => recipient?.header?.kid)
228
+ .filter((kid) => typeof kid === 'string'));
229
+ const storageIds = await listCollection('keys');
230
+ const matches = [];
231
+ for (const storageId of storageIds) {
232
+ const stored = await loadFromCollection('keys', storageId);
233
+ if (stored.type !== KEY_AGREEMENT_TYPE ||
234
+ !stored.privateKeyMultibase ||
235
+ !stored.publicKeyMultibase) {
236
+ continue;
237
+ }
238
+ const key = await keyAgreementKeyFrom(stored);
239
+ if (kids.has(key.id)) {
240
+ matches.push(key);
241
+ }
242
+ }
243
+ if (matches.length === 0) {
244
+ throw new Error('No stored X25519 key matches any recipient of this JWE; ' +
245
+ 'pass --key to choose one.');
246
+ }
247
+ if (matches.length > 1) {
248
+ throw new Error(`${matches.length} stored X25519 keys match this JWE; ` +
249
+ 'pass --key to choose one.');
250
+ }
251
+ return matches[0];
252
+ }
253
+ //# sourceMappingURL=recipients.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recipients.js","sourceRoot":"","sources":["../../src/edv/recipients.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ import type { Cipher } from '@interop/minimal-cipher';
2
+ import type { IEDVChunk, IEncryptedDocument, IKeyResolver, IRecipientTemplate } from '@interop/data-integrity-core';
3
+ import type { KeyAgreementKey } from './recipients.js';
4
+ /**
5
+ * Encrypt `data` as a stream of chunks for the given recipients, stamping the
6
+ * document `sequence` onto each chunk (as `EdvClientCore._updateStream` does).
7
+ *
8
+ * @param options {object}
9
+ * @param options.cipher {Cipher}
10
+ * @param options.data {Uint8Array}
11
+ * @param options.recipients {IRecipientTemplate[]}
12
+ * @param options.keyResolver {IKeyResolver}
13
+ * @param [options.chunkSize] {number} Bytes per chunk (cipher default 1 MiB).
14
+ * @param options.sequence {number} The owning document's sequence.
15
+ * @returns {Promise<IEDVChunk[]>}
16
+ */
17
+ export declare function encryptToChunks({ cipher, data, recipients, keyResolver, chunkSize, sequence }: {
18
+ cipher: Cipher;
19
+ data: Uint8Array;
20
+ recipients: IRecipientTemplate[];
21
+ keyResolver: IKeyResolver;
22
+ chunkSize?: number;
23
+ sequence: number;
24
+ }): Promise<IEDVChunk[]>;
25
+ /**
26
+ * Decrypt a document's chunks (in `index` order) back into the original bytes.
27
+ * A wrong key surfaces as a thrown `DataError` from the decrypt transformer.
28
+ *
29
+ * @param options {object}
30
+ * @param options.cipher {Cipher}
31
+ * @param options.chunks {IEDVChunk[]}
32
+ * @param options.keyAgreementKey {KeyAgreementKey}
33
+ * @returns {Promise<Uint8Array>}
34
+ */
35
+ export declare function decryptChunks({ cipher, chunks, keyAgreementKey }: {
36
+ cipher: Cipher;
37
+ chunks: IEDVChunk[];
38
+ keyAgreementKey: KeyAgreementKey;
39
+ }): Promise<Uint8Array>;
40
+ /**
41
+ * Write a streamed EDV Document as a bundle directory: `document.json` plus
42
+ * `chunks/<index>.jwe.json` for each chunk.
43
+ *
44
+ * @param options {object}
45
+ * @param options.dir {string} The bundle directory path.
46
+ * @param options.document {IEncryptedDocument}
47
+ * @param options.chunks {IEDVChunk[]}
48
+ * @returns {Promise<void>}
49
+ */
50
+ export declare function writeDocumentBundle({ dir, document, chunks }: {
51
+ dir: string;
52
+ document: IEncryptedDocument;
53
+ chunks: IEDVChunk[];
54
+ }): Promise<void>;
55
+ /**
56
+ * Read a bundle directory back into its document envelope and chunks (sorted by
57
+ * `index`).
58
+ *
59
+ * @param options {object}
60
+ * @param options.dir {string} The bundle directory path.
61
+ * @returns {Promise<{document: IEncryptedDocument, chunks: IEDVChunk[]}>}
62
+ */
63
+ export declare function readDocumentBundle({ dir }: {
64
+ dir: string;
65
+ }): Promise<{
66
+ document: IEncryptedDocument;
67
+ chunks: IEDVChunk[];
68
+ }>;
69
+ //# sourceMappingURL=stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/edv/stream.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AACrD,OAAO,KAAK,EACV,SAAS,EACT,kBAAkB,EAElB,YAAY,EACZ,kBAAkB,EACnB,MAAM,8BAA8B,CAAA;AAErC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AA6DtD;;;;;;;;;;;;GAYG;AACH,wBAAsB,eAAe,CAAC,EACpC,MAAM,EACN,IAAI,EACJ,UAAU,EACV,WAAW,EACX,SAAS,EACT,QAAQ,EACT,EAAE;IACD,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,UAAU,CAAA;IAChB,UAAU,EAAE,kBAAkB,EAAE,CAAA;IAChC,WAAW,EAAE,YAAY,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;CACjB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAgBvB;AAED;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CAAC,EAClC,MAAM,EACN,MAAM,EACN,eAAe,EAChB,EAAE;IACD,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,SAAS,EAAE,CAAA;IACnB,eAAe,EAAE,eAAe,CAAA;CACjC,GAAG,OAAO,CAAC,UAAU,CAAC,CAUtB;AAED;;;;;;;;;GASG;AACH,wBAAsB,mBAAmB,CAAC,EACxC,GAAG,EACH,QAAQ,EACR,MAAM,EACP,EAAE;IACD,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,MAAM,EAAE,SAAS,EAAE,CAAA;CACpB,GAAG,OAAO,CAAC,IAAI,CAAC,CAehB;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CAAC,EAAE,GAAG,EAAE,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC;IAC1E,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,MAAM,EAAE,SAAS,EAAE,CAAA;CACpB,CAAC,CA0BD"}
@@ -0,0 +1,169 @@
1
+ /**
2
+ * Chunked-stream support for EDV Documents (Layer 2, Phase 2): encrypt a large
3
+ * input as a sequence of fixed-size encrypted chunks instead of a single JWE,
4
+ * and decrypt the chunks back into the original bytes. A streamed document
5
+ * carries a cleartext `stream: { sequence, chunks }` descriptor; the bytes
6
+ * themselves live in separate chunk JWEs, each `{ sequence, index, offset, jwe }`
7
+ * (`IEDVChunk`), mirroring how an EDV / WAS server stores stream resources apart
8
+ * from the document.
9
+ *
10
+ * On disk the document and its chunks are a **bundle directory** (convention
11
+ * `*.edvdoc/`): `document.json` (the `{ id, sequence, indexed, stream, jwe }`
12
+ * envelope) and `chunks/<index>.jwe.json` (one file per chunk). This keeps the
13
+ * chunks as distinct resources, faithful to the server model.
14
+ *
15
+ * The cipher driving mirrors `@interop/edv-client`'s `_updateStream` /
16
+ * `EdvDocument.getStream` without taking that dependency: it pumps the input
17
+ * through `cipher.createEncryptStream`, stamps the document `sequence` onto each
18
+ * emitted chunk, and feeds chunks back (in `index` order) through
19
+ * `cipher.createDecryptStream`.
20
+ */
21
+ import { mkdir, readFile, readdir, writeFile } from 'node:fs/promises';
22
+ import { join } from 'node:path';
23
+ import { isEncryptedDocument } from './document.js';
24
+ /** The envelope file within a bundle directory. */
25
+ const BUNDLE_DOCUMENT_FILE = 'document.json';
26
+ /** The subdirectory holding the chunk JWE files within a bundle directory. */
27
+ const BUNDLE_CHUNKS_DIR = 'chunks';
28
+ /**
29
+ * Drain a TransformStream: write each input value, then read every output
30
+ * value. Reads run concurrently with the single write so a large input cannot
31
+ * deadlock against the stream's internal backpressure.
32
+ *
33
+ * @param options {object}
34
+ * @param options.stream {TransformStream}
35
+ * @param options.inputs {unknown[]} Values to write to the writable side.
36
+ * @returns {Promise<T[]>} The values emitted on the readable side.
37
+ */
38
+ async function pump({ stream, inputs }) {
39
+ const writer = stream.writable.getWriter();
40
+ const reader = stream.readable.getReader();
41
+ const outputs = [];
42
+ const reading = (async () => {
43
+ for (;;) {
44
+ const { value, done } = await reader.read();
45
+ if (done) {
46
+ break;
47
+ }
48
+ outputs.push(value);
49
+ }
50
+ })();
51
+ for (const input of inputs) {
52
+ await writer.write(input);
53
+ }
54
+ await writer.close();
55
+ await reading;
56
+ return outputs;
57
+ }
58
+ /**
59
+ * Concatenate Uint8Array parts into a single buffer.
60
+ *
61
+ * @param parts {Uint8Array[]}
62
+ * @returns {Uint8Array}
63
+ */
64
+ function concatBytes(parts) {
65
+ const total = parts.reduce((sum, part) => sum + part.byteLength, 0);
66
+ const result = new Uint8Array(total);
67
+ let offset = 0;
68
+ for (const part of parts) {
69
+ result.set(part, offset);
70
+ offset += part.byteLength;
71
+ }
72
+ return result;
73
+ }
74
+ /**
75
+ * Encrypt `data` as a stream of chunks for the given recipients, stamping the
76
+ * document `sequence` onto each chunk (as `EdvClientCore._updateStream` does).
77
+ *
78
+ * @param options {object}
79
+ * @param options.cipher {Cipher}
80
+ * @param options.data {Uint8Array}
81
+ * @param options.recipients {IRecipientTemplate[]}
82
+ * @param options.keyResolver {IKeyResolver}
83
+ * @param [options.chunkSize] {number} Bytes per chunk (cipher default 1 MiB).
84
+ * @param options.sequence {number} The owning document's sequence.
85
+ * @returns {Promise<IEDVChunk[]>}
86
+ */
87
+ export async function encryptToChunks({ cipher, data, recipients, keyResolver, chunkSize, sequence }) {
88
+ const stream = await cipher.createEncryptStream({
89
+ recipients,
90
+ keyResolver,
91
+ chunkSize
92
+ });
93
+ const emitted = await pump({
94
+ stream,
95
+ inputs: [data]
96
+ });
97
+ return emitted.map(chunk => ({
98
+ sequence,
99
+ index: chunk.index,
100
+ offset: chunk.offset,
101
+ jwe: chunk.jwe
102
+ }));
103
+ }
104
+ /**
105
+ * Decrypt a document's chunks (in `index` order) back into the original bytes.
106
+ * A wrong key surfaces as a thrown `DataError` from the decrypt transformer.
107
+ *
108
+ * @param options {object}
109
+ * @param options.cipher {Cipher}
110
+ * @param options.chunks {IEDVChunk[]}
111
+ * @param options.keyAgreementKey {KeyAgreementKey}
112
+ * @returns {Promise<Uint8Array>}
113
+ */
114
+ export async function decryptChunks({ cipher, chunks, keyAgreementKey }) {
115
+ const ordered = [...chunks].sort((first, second) => first.index - second.index);
116
+ const stream = await cipher.createDecryptStream({ keyAgreementKey });
117
+ const parts = await pump({
118
+ stream,
119
+ inputs: ordered.map(chunk => ({ jwe: chunk.jwe }))
120
+ });
121
+ return concatBytes(parts);
122
+ }
123
+ /**
124
+ * Write a streamed EDV Document as a bundle directory: `document.json` plus
125
+ * `chunks/<index>.jwe.json` for each chunk.
126
+ *
127
+ * @param options {object}
128
+ * @param options.dir {string} The bundle directory path.
129
+ * @param options.document {IEncryptedDocument}
130
+ * @param options.chunks {IEDVChunk[]}
131
+ * @returns {Promise<void>}
132
+ */
133
+ export async function writeDocumentBundle({ dir, document, chunks }) {
134
+ const chunksDir = join(dir, BUNDLE_CHUNKS_DIR);
135
+ await mkdir(chunksDir, { recursive: true });
136
+ await writeFile(join(dir, BUNDLE_DOCUMENT_FILE), `${JSON.stringify(document, null, 2)}\n`, 'utf8');
137
+ for (const chunk of chunks) {
138
+ await writeFile(join(chunksDir, `${chunk.index}.jwe.json`), `${JSON.stringify(chunk, null, 2)}\n`, 'utf8');
139
+ }
140
+ }
141
+ /**
142
+ * Read a bundle directory back into its document envelope and chunks (sorted by
143
+ * `index`).
144
+ *
145
+ * @param options {object}
146
+ * @param options.dir {string} The bundle directory path.
147
+ * @returns {Promise<{document: IEncryptedDocument, chunks: IEDVChunk[]}>}
148
+ */
149
+ export async function readDocumentBundle({ dir }) {
150
+ let document;
151
+ try {
152
+ document = JSON.parse(await readFile(join(dir, BUNDLE_DOCUMENT_FILE), 'utf8'));
153
+ }
154
+ catch (err) {
155
+ throw new Error(`Could not read ${BUNDLE_DOCUMENT_FILE} in bundle "${dir}": ${err.message}`, { cause: err });
156
+ }
157
+ if (!isEncryptedDocument(document)) {
158
+ throw new Error(`Bundle "${dir}" does not contain an EDV Document.`);
159
+ }
160
+ const chunksDir = join(dir, BUNDLE_CHUNKS_DIR);
161
+ const names = (await readdir(chunksDir).catch(() => [])).filter(name => name.endsWith('.jwe.json'));
162
+ const chunks = [];
163
+ for (const name of names) {
164
+ chunks.push(JSON.parse(await readFile(join(chunksDir, name), 'utf8')));
165
+ }
166
+ chunks.sort((first, second) => first.index - second.index);
167
+ return { document, chunks };
168
+ }
169
+ //# sourceMappingURL=stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/edv/stream.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -2,6 +2,7 @@
2
2
  import { createRequire } from 'node:module';
3
3
  import { Command } from 'commander';
4
4
  import { makeDidCommand } from './commands/did.js';
5
+ import { makeEdvCommand } from './commands/edv.js';
5
6
  import { makeKeyCommand } from './commands/key.js';
6
7
  import { makeVcCommand } from './commands/vc.js';
7
8
  import { makeWalletCommand } from './commands/wallet.js';
@@ -11,6 +12,7 @@ const { version } = createRequire(import.meta.url)('../package.json');
11
12
  const program = new Command();
12
13
  program.name('di').description('DID CLI tool').version(version);
13
14
  program.addCommand(makeDidCommand());
15
+ program.addCommand(makeEdvCommand());
14
16
  program.addCommand(makeKeyCommand());
15
17
  program.addCommand(makeVcCommand());
16
18
  program.addCommand(makeWalletCommand());
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAEpD,MAAM,EAAE,OAAO,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,iBAAiB,CAEnE,CAAA;AAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;AAE/D,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAA;AACpC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAA;AACpC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAA;AACnC,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAA;AACvC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAA;AACpC,OAAO,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,CAAA;AAErC,OAAO,CAAC,KAAK,EAAE,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAEpD,MAAM,EAAE,OAAO,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,iBAAiB,CAEnE,CAAA;AAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;AAE/D,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAA;AACpC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAA;AACpC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAA;AACpC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAA;AACnC,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAA;AACvC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAA;AACpC,OAAO,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,CAAA;AAErC,OAAO,CAAC,KAAK,EAAE,CAAA"}
package/dist/meta.d.ts CHANGED
@@ -156,6 +156,7 @@ export declare function resolveKeyRef({ ref }: {
156
156
  }): Promise<{
157
157
  storageId: string;
158
158
  key: {
159
+ id?: string;
159
160
  publicKeyMultibase?: string;
160
161
  secretKeyMultibase?: string;
161
162
  };
@@ -1 +1 @@
1
- {"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../src/meta.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../src/meta.ts"],"names":[],"mappings":"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"}
package/dist/meta.js CHANGED
@@ -16,7 +16,7 @@ import { findStoredKey, listCollection, listDids, loadDidDocument, loadDidMeta,
16
16
  * @returns {{date?: string, type?: string, curve?: string}}
17
17
  */
18
18
  export function parseKeyStorageId({ storageId }) {
19
- const match = storageId.match(/^(\d{4}-\d{2}-\d{2})-(ed25519|ecdsa)(?:-(p\d{3}))?-/);
19
+ const match = storageId.match(/^(\d{4}-\d{2}-\d{2})-(ed25519|ecdsa|x25519|hmac)(?:-(p\d{3}))?-/);
20
20
  if (!match) {
21
21
  return {};
22
22
  }