@interop/did-cli 0.13.0 → 0.14.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 (79) hide show
  1. package/CHANGELOG.md +117 -6
  2. package/README.md +157 -17
  3. package/dist/commands/did/create.d.ts +22 -0
  4. package/dist/commands/did/create.d.ts.map +1 -1
  5. package/dist/commands/did/create.js +6 -27
  6. package/dist/commands/did/create.js.map +1 -1
  7. package/dist/commands/did/service.d.ts +19 -4
  8. package/dist/commands/did/service.d.ts.map +1 -1
  9. package/dist/commands/did/service.js +46 -45
  10. package/dist/commands/did/service.js.map +1 -1
  11. package/dist/commands/did/webvh-update.d.ts +72 -9
  12. package/dist/commands/did/webvh-update.d.ts.map +1 -1
  13. package/dist/commands/did/webvh-update.js +177 -61
  14. package/dist/commands/did/webvh-update.js.map +1 -1
  15. package/dist/commands/did.d.ts.map +1 -1
  16. package/dist/commands/did.js +10 -1
  17. package/dist/commands/did.js.map +1 -1
  18. package/dist/commands/key.d.ts.map +1 -1
  19. package/dist/commands/key.js +5 -8
  20. package/dist/commands/key.js.map +1 -1
  21. package/dist/commands/was/request-grant.d.ts +37 -0
  22. package/dist/commands/was/request-grant.d.ts.map +1 -0
  23. package/dist/commands/was/request-grant.js +248 -0
  24. package/dist/commands/was/request-grant.js.map +1 -0
  25. package/dist/commands/was/resource.d.ts +21 -7
  26. package/dist/commands/was/resource.d.ts.map +1 -1
  27. package/dist/commands/was/resource.js +40 -15
  28. package/dist/commands/was/resource.js.map +1 -1
  29. package/dist/commands/was/shared.d.ts +43 -3
  30. package/dist/commands/was/shared.d.ts.map +1 -1
  31. package/dist/commands/was/shared.js +82 -4
  32. package/dist/commands/was/shared.js.map +1 -1
  33. package/dist/commands/was/shell/completer.d.ts +24 -0
  34. package/dist/commands/was/shell/completer.d.ts.map +1 -0
  35. package/dist/commands/was/shell/completer.js +99 -0
  36. package/dist/commands/was/shell/completer.js.map +1 -0
  37. package/dist/commands/was/shell/dispatcher.d.ts +27 -0
  38. package/dist/commands/was/shell/dispatcher.d.ts.map +1 -0
  39. package/dist/commands/was/shell/dispatcher.js +227 -0
  40. package/dist/commands/was/shell/dispatcher.js.map +1 -0
  41. package/dist/commands/was/shell/session.d.ts +37 -0
  42. package/dist/commands/was/shell/session.d.ts.map +1 -0
  43. package/dist/commands/was/shell/session.js +67 -0
  44. package/dist/commands/was/shell/session.js.map +1 -0
  45. package/dist/commands/was/shell/tokenize.d.ts +19 -0
  46. package/dist/commands/was/shell/tokenize.d.ts.map +1 -0
  47. package/dist/commands/was/shell/tokenize.js +77 -0
  48. package/dist/commands/was/shell/tokenize.js.map +1 -0
  49. package/dist/commands/was/shell.d.ts +30 -0
  50. package/dist/commands/was/shell.d.ts.map +1 -0
  51. package/dist/commands/was/shell.js +170 -0
  52. package/dist/commands/was/shell.js.map +1 -0
  53. package/dist/commands/was/tree.d.ts +6 -1
  54. package/dist/commands/was/tree.d.ts.map +1 -1
  55. package/dist/commands/was/tree.js +12 -5
  56. package/dist/commands/was/tree.js.map +1 -1
  57. package/dist/commands/was.d.ts.map +1 -1
  58. package/dist/commands/was.js +31 -1
  59. package/dist/commands/was.js.map +1 -1
  60. package/dist/keys/seed.d.ts +21 -0
  61. package/dist/keys/seed.d.ts.map +1 -0
  62. package/dist/keys/seed.js +41 -0
  63. package/dist/keys/seed.js.map +1 -0
  64. package/dist/keys/webvh-signer.d.ts +18 -13
  65. package/dist/keys/webvh-signer.d.ts.map +1 -1
  66. package/dist/keys/webvh-signer.js +5 -20
  67. package/dist/keys/webvh-signer.js.map +1 -1
  68. package/dist/storage.d.ts.map +1 -1
  69. package/dist/storage.js +57 -10
  70. package/dist/storage.js.map +1 -1
  71. package/dist/was/address.d.ts +24 -0
  72. package/dist/was/address.d.ts.map +1 -1
  73. package/dist/was/address.js +49 -3
  74. package/dist/was/address.js.map +1 -1
  75. package/dist/was/request-grant.d.ts +144 -0
  76. package/dist/was/request-grant.d.ts.map +1 -0
  77. package/dist/was/request-grant.js +249 -0
  78. package/dist/was/request-grant.js.map +1 -0
  79. package/package.json +22 -20
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Requests a capability from a user's wallet: mints the grantee key, opens an
3
+ * ephemeral exchange carrying a zcap-only VPR, prints the interaction URL for
4
+ * the user to open, then waits for their approval and records what came back.
5
+ *
6
+ * @param options {object}
7
+ * @param [options.collection] {string} The collection to request (default
8
+ * `web`).
9
+ * @param [options.action] {string[]} The actions to request.
10
+ * @param [options.reason] {string} Why access is wanted, shown at consent.
11
+ * @param [options.name] {string} The agent's self-declared display name,
12
+ * shown at consent as what it calls itself.
13
+ * @param [options.server] {string} The WAS server base URL.
14
+ * @param [options.wallet] {string} A wallet base URL to print an approval
15
+ * deep link for, beside the interaction URL.
16
+ * @param [options.save] {boolean} Persist the key and capabilities
17
+ * (default true).
18
+ * @param [options.handle] {string} Handle to file them under.
19
+ * @param [options.description] {string} Longer description for the sidecar.
20
+ * @param [options.timeout] {string} Seconds to wait for approval.
21
+ * @param [options.json] {boolean} Print one JSON object instead of prose.
22
+ * @returns {Promise<number>} The process exit code.
23
+ */
24
+ export declare function runRequestGrant(options: {
25
+ collection?: string;
26
+ action?: string[];
27
+ reason?: string;
28
+ name?: string;
29
+ server?: string;
30
+ wallet?: string;
31
+ save?: boolean;
32
+ handle?: string;
33
+ description?: string;
34
+ timeout?: string;
35
+ json?: boolean;
36
+ }): Promise<number>;
37
+ //# sourceMappingURL=request-grant.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-grant.d.ts","sourceRoot":"","sources":["../../../src/commands/was/request-grant.ts"],"names":[],"mappings":"AAsKA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,OAAO,CAAA;CACf,GAAG,OAAO,CAAC,MAAM,CAAC,CAmIlB"}
@@ -0,0 +1,248 @@
1
+ /**
2
+ * `was request-grant` -- ask a user's wallet for a capability on one of its
3
+ * public collections. The inverse of `was grant`: an agent runs this, the user
4
+ * approves in their wallet, and the agent receives a signed zcap it can then
5
+ * invoke with `was put --capability`.
6
+ *
7
+ * The grantee key is minted here rather than passed in, so the agent driving
8
+ * the CLI never handles key material: the secret goes straight to local DID
9
+ * storage and stdout carries only the capabilities (or, with `--json`, one
10
+ * object holding the DID, the handle, the interaction URL, and the
11
+ * capabilities). Everything addressed to the human -- the approval link and
12
+ * the progress notes -- goes to stderr, so stdout stays pipe-clean.
13
+ */
14
+ import { driver } from '@interop/did-method-key';
15
+ import { Ed25519VerificationKey } from '@interop/ed25519-verification-key';
16
+ import { sanitizeStorageId, saveToCollection } from '../../storage.js';
17
+ import { resolveDidRef, resolveZcapRef } from '../../meta.js';
18
+ import { encodeCapability } from '../../zcap/encoding.js';
19
+ import { awaitGrantedCapabilities, buildCapabilityRequest, buildWalletDeepLink, openGrantExchange, walletRequestRoute, GrantRequestError, DEFAULT_COLLECTION, DEFAULT_TIMEOUT_MS, MAX_TIMEOUT_MS } from '../../was/request-grant.js';
20
+ import { saveDidArtifacts } from '../did/create.js';
21
+ import { requireSaveForMetaFlags, writeCreateMeta } from '../collection-command.js';
22
+ import { reportError } from './shared.js';
23
+ /** The zcap wallet collection received capabilities are saved into. */
24
+ const ZCAP_COLLECTION = 'zcaps';
25
+ /** The handle the minted key and received capabilities are filed under. */
26
+ const DEFAULT_HANDLE = 'agent';
27
+ /**
28
+ * Mints the Ed25519 `did:key` the capabilities will be delegated to, holding
29
+ * it in memory only. Nothing is written yet: an exchange that is declined,
30
+ * expires, or times out must not leave a DID behind, since every abandoned run
31
+ * would otherwise file another key under the same handle and make later
32
+ * lookups of that handle ambiguous.
33
+ *
34
+ * @returns {Promise<{did: string, keyPair: Ed25519VerificationKey, didDocument: object}>}
35
+ */
36
+ async function mintAgentKey() {
37
+ const keyPair = await Ed25519VerificationKey.generate();
38
+ const didDriver = driver();
39
+ didDriver.use({ keyPairClass: Ed25519VerificationKey });
40
+ const { didDocument } = await didDriver.fromKeyPair({
41
+ verificationKeyPair: keyPair
42
+ });
43
+ return { did: didDocument.id, keyPair, didDocument };
44
+ }
45
+ /**
46
+ * Writes the minted key to local DID storage, once the grant it was minted for
47
+ * has actually arrived. Only a saved key can sign a later
48
+ * `was put --capability`, since that resolves its signer out of the DID store.
49
+ *
50
+ * @param options {object}
51
+ * @param options.keyPair {Ed25519VerificationKey}
52
+ * @param options.didDocument {object}
53
+ * @param options.handle {string}
54
+ * @param [options.description] {string}
55
+ * @returns {Promise<void>}
56
+ */
57
+ async function saveAgentDid({ keyPair, didDocument, handle, description }) {
58
+ const exported = await keyPair.export({ publicKey: true, secretKey: true });
59
+ await saveDidArtifacts({
60
+ method: 'key',
61
+ didDocument,
62
+ exportedKeys: exported,
63
+ fingerprints: [
64
+ exported.publicKeyMultibase
65
+ ],
66
+ handle,
67
+ description
68
+ });
69
+ }
70
+ /**
71
+ * Reports whether a handle is already filed against a stored DID or zcap. A
72
+ * run claims the handle in both stores at once, so a collision in either makes
73
+ * a later `--did <handle>` or `--capability <handle>` ambiguous.
74
+ *
75
+ * @param options {object}
76
+ * @param options.handle {string}
77
+ * @returns {Promise<boolean>}
78
+ */
79
+ async function isHandleTaken({ handle }) {
80
+ try {
81
+ if (await resolveDidRef({ ref: handle })) {
82
+ return true;
83
+ }
84
+ return (await resolveZcapRef({ ref: handle })) !== undefined;
85
+ }
86
+ catch {
87
+ // Resolution throws when the handle already matches more than one stored
88
+ // item, which is itself proof that it is taken.
89
+ return true;
90
+ }
91
+ }
92
+ /**
93
+ * Files the received capabilities in the local zcap store. The request carries
94
+ * one capability query, so one capability is the expected answer; any extras
95
+ * are saved under the same handle with a numeric suffix, which keeps every
96
+ * handle unambiguous for later lookup.
97
+ *
98
+ * @param options {object}
99
+ * @param options.zcaps {IZcap[]}
100
+ * @param options.handle {string}
101
+ * @param [options.description] {string}
102
+ * @returns {Promise<string[]>} The saved file paths.
103
+ */
104
+ async function saveCapabilities({ zcaps, handle, description }) {
105
+ const savedPaths = [];
106
+ for (const [index, zcap] of zcaps.entries()) {
107
+ const storageId = sanitizeStorageId(zcap.id);
108
+ savedPaths.push(await saveToCollection({
109
+ collection: ZCAP_COLLECTION,
110
+ storageId,
111
+ data: zcap
112
+ }));
113
+ await writeCreateMeta({
114
+ collection: ZCAP_COLLECTION,
115
+ storageId,
116
+ created: new Date().toISOString(),
117
+ handle: index === 0 ? handle : `${handle}-${index + 1}`,
118
+ description
119
+ });
120
+ }
121
+ return savedPaths;
122
+ }
123
+ /**
124
+ * Requests a capability from a user's wallet: mints the grantee key, opens an
125
+ * ephemeral exchange carrying a zcap-only VPR, prints the interaction URL for
126
+ * the user to open, then waits for their approval and records what came back.
127
+ *
128
+ * @param options {object}
129
+ * @param [options.collection] {string} The collection to request (default
130
+ * `web`).
131
+ * @param [options.action] {string[]} The actions to request.
132
+ * @param [options.reason] {string} Why access is wanted, shown at consent.
133
+ * @param [options.name] {string} The agent's self-declared display name,
134
+ * shown at consent as what it calls itself.
135
+ * @param [options.server] {string} The WAS server base URL.
136
+ * @param [options.wallet] {string} A wallet base URL to print an approval
137
+ * deep link for, beside the interaction URL.
138
+ * @param [options.save] {boolean} Persist the key and capabilities
139
+ * (default true).
140
+ * @param [options.handle] {string} Handle to file them under.
141
+ * @param [options.description] {string} Longer description for the sidecar.
142
+ * @param [options.timeout] {string} Seconds to wait for approval.
143
+ * @param [options.json] {boolean} Print one JSON object instead of prose.
144
+ * @returns {Promise<number>} The process exit code.
145
+ */
146
+ export async function runRequestGrant(options) {
147
+ const save = options.save !== false;
148
+ try {
149
+ if (!requireSaveForMetaFlags({
150
+ save,
151
+ ...(options.handle !== undefined && { handle: options.handle }),
152
+ ...(options.description !== undefined && {
153
+ description: options.description
154
+ })
155
+ })) {
156
+ return 2;
157
+ }
158
+ const server = options.server ?? process.env.WAS_SERVER_URL;
159
+ if (!server) {
160
+ throw new Error('No WAS server URL: provide --server or set WAS_SERVER_URL.');
161
+ }
162
+ const timeoutMs = options.timeout === undefined
163
+ ? DEFAULT_TIMEOUT_MS
164
+ : Number(options.timeout) * 1000;
165
+ if (!Number.isFinite(timeoutMs) ||
166
+ timeoutMs <= 0 ||
167
+ timeoutMs > MAX_TIMEOUT_MS) {
168
+ throw new Error(`Invalid --timeout "${options.timeout}": use seconds, up to ` +
169
+ `${Math.floor(MAX_TIMEOUT_MS / 1000)}.`);
170
+ }
171
+ const collection = options.collection ?? DEFAULT_COLLECTION;
172
+ const handle = options.handle ?? DEFAULT_HANDLE;
173
+ if (save && (await isHandleTaken({ handle }))) {
174
+ console.error(`The handle "${handle}" is already taken by a stored DID or ` +
175
+ 'capability; pass a different --handle.');
176
+ return 2;
177
+ }
178
+ const walletRoute = options.wallet === undefined
179
+ ? undefined
180
+ : walletRequestRoute({ wallet: options.wallet });
181
+ const { did: controller, keyPair, didDocument } = await mintAgentKey();
182
+ const request = buildCapabilityRequest({
183
+ controller,
184
+ collection,
185
+ ...(options.action !== undefined && { actions: options.action }),
186
+ ...(options.reason !== undefined && { reason: options.reason }),
187
+ ...(options.name !== undefined && { name: options.name })
188
+ });
189
+ const { exchangeUrl, interactionUrl } = await openGrantExchange({
190
+ server,
191
+ request
192
+ });
193
+ const walletUrl = walletRoute === undefined
194
+ ? undefined
195
+ : buildWalletDeepLink({ route: walletRoute, interactionUrl });
196
+ console.error(`Requesting "${collection}" access for ${controller}.\n` +
197
+ `Open this in your wallet to approve:\n\n ${interactionUrl}\n\n` +
198
+ (walletUrl === undefined
199
+ ? ''
200
+ : `Or open your wallet directly:\n\n ${walletUrl}\n\n`) +
201
+ 'Waiting for approval...');
202
+ const zcaps = await awaitGrantedCapabilities({ exchangeUrl, timeoutMs });
203
+ let savedPaths = [];
204
+ if (save) {
205
+ const description = options.description !== undefined
206
+ ? { description: options.description }
207
+ : {};
208
+ await saveAgentDid({ keyPair, didDocument, handle, ...description });
209
+ savedPaths = await saveCapabilities({ zcaps, handle, ...description });
210
+ }
211
+ for (const savedPath of savedPaths) {
212
+ console.error(`Capability saved to ${savedPath}`);
213
+ }
214
+ if (!save) {
215
+ console.error('Not saved (--no-save): the grantee key was discarded, so these ' +
216
+ 'capabilities cannot be invoked by a later command.');
217
+ }
218
+ const encoded = zcaps.map(zcap => encodeCapability(zcap));
219
+ if (options.json) {
220
+ console.log(JSON.stringify({
221
+ controller,
222
+ ...(save && { handle }),
223
+ interactionUrl,
224
+ ...(walletUrl !== undefined && { walletUrl }),
225
+ capabilities: zcaps,
226
+ encoded
227
+ }, null, 2));
228
+ return 0;
229
+ }
230
+ console.error(save
231
+ ? `Granted. Use it with --capability ${handle}, for example:\n` +
232
+ ` di was put ./index.html --capability ${handle} ` +
233
+ `--did ${handle} --resource index.html --content-type text/html`
234
+ : 'Granted.');
235
+ for (const value of encoded) {
236
+ console.log(value);
237
+ }
238
+ return 0;
239
+ }
240
+ catch (err) {
241
+ if (err instanceof GrantRequestError) {
242
+ console.error(`Could not request a grant: ${err.message}`);
243
+ return 1;
244
+ }
245
+ return reportError({ action: 'request a grant', err });
246
+ }
247
+ }
248
+ //# sourceMappingURL=request-grant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-grant.js","sourceRoot":"","sources":["../../../src/commands/was/request-grant.ts"],"names":[],"mappings":"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"}
@@ -23,13 +23,15 @@ export declare function runResourceAdd(options: {
23
23
  }): Promise<number>;
24
24
  /**
25
25
  * Creates or replaces a resource at a known id (upsert) and prints
26
- * `{ id, url }`. The resource comes from a path or a `--capability`
27
- * targeting one.
26
+ * `{ id, url }`. The resource comes from a path, a `--capability`
27
+ * targeting one, or a collection `--capability` plus `--resource <id>`.
28
28
  *
29
29
  * @param options {object}
30
30
  * @param [options.address] {string} The resource address.
31
31
  * @param [options.capability] {string} A capability reference instead of
32
32
  * a path.
33
+ * @param [options.resource] {string} The resource id beneath a collection
34
+ * capability.
33
35
  * @param [options.file] {string} The payload file; stdin when omitted.
34
36
  * @param [options.contentType] {string} Explicit payload content type.
35
37
  * @param [options.server] {string} The server base URL.
@@ -39,6 +41,7 @@ export declare function runResourceAdd(options: {
39
41
  export declare function runResourcePut(options: {
40
42
  address?: string;
41
43
  capability?: string;
44
+ resource?: string;
42
45
  file?: string;
43
46
  contentType?: string;
44
47
  server?: string;
@@ -46,13 +49,15 @@ export declare function runResourcePut(options: {
46
49
  }): Promise<number>;
47
50
  /**
48
51
  * Reads a resource: JSON pretty-printed to stdout, binary written raw
49
- * (`--output` for files). The resource comes from a path or a
50
- * `--capability` targeting one.
52
+ * (`--output` for files). The resource comes from a path, a `--capability`
53
+ * targeting one, or a collection `--capability` plus `--resource <id>`.
51
54
  *
52
55
  * @param options {object}
53
56
  * @param [options.address] {string} The resource address.
54
57
  * @param [options.capability] {string} A capability reference instead of
55
58
  * a path.
59
+ * @param [options.resource] {string} The resource id beneath a collection
60
+ * capability.
56
61
  * @param [options.output] {string} The output file path; stdout when
57
62
  * omitted.
58
63
  * @param [options.server] {string} The server base URL.
@@ -62,6 +67,7 @@ export declare function runResourcePut(options: {
62
67
  export declare function runResourceGet(options: {
63
68
  address?: string;
64
69
  capability?: string;
70
+ resource?: string;
65
71
  output?: string;
66
72
  server?: string;
67
73
  did?: string;
@@ -69,12 +75,15 @@ export declare function runResourceGet(options: {
69
75
  /**
70
76
  * Reads a resource's metadata object (server-managed `contentType` / `size` /
71
77
  * timestamps plus the user-writable `custom`) and pretty-prints it. The
72
- * resource comes from a path or a `--capability` targeting one.
78
+ * resource comes from a path, a `--capability` targeting one, or a
79
+ * collection `--capability` plus `--resource <id>`.
73
80
  *
74
81
  * @param options {object}
75
82
  * @param [options.address] {string} The resource address.
76
83
  * @param [options.capability] {string} A capability reference instead of
77
84
  * a path.
85
+ * @param [options.resource] {string} The resource id beneath a collection
86
+ * capability.
78
87
  * @param [options.server] {string} The server base URL.
79
88
  * @param [options.did] {string} The signing DID or stored-DID handle.
80
89
  * @returns {Promise<number>} The process exit code.
@@ -82,6 +91,7 @@ export declare function runResourceGet(options: {
82
91
  export declare function runResourceMetaGet(options: {
83
92
  address?: string;
84
93
  capability?: string;
94
+ resource?: string;
85
95
  server?: string;
86
96
  did?: string;
87
97
  }): Promise<number>;
@@ -89,13 +99,16 @@ export declare function runResourceMetaGet(options: {
89
99
  * Updates a resource's user-writable metadata and prints the resulting
90
100
  * metadata. `--name`/`--tag` are read-modify-write sugar that preserve the
91
101
  * other field; giving both, or `--json`, is a full `custom` replacement so
92
- * any omitted property is cleared. The resource comes from a path or a
93
- * `--capability` targeting one.
102
+ * any omitted property is cleared. The resource comes from a path, a
103
+ * `--capability` targeting one, or a collection `--capability` plus
104
+ * `--resource <id>`.
94
105
  *
95
106
  * @param options {object}
96
107
  * @param [options.address] {string} The resource address.
97
108
  * @param [options.capability] {string} A capability reference instead of
98
109
  * a path.
110
+ * @param [options.resource] {string} The resource id beneath a collection
111
+ * capability.
99
112
  * @param [options.name] {string} The resource's display name.
100
113
  * @param options.tag {string[]} Repeatable `key=value` tag pairs.
101
114
  * @param [options.json] {string} Full `custom` JSON (inline or a file
@@ -107,6 +120,7 @@ export declare function runResourceMetaGet(options: {
107
120
  export declare function runResourceMetaPut(options: {
108
121
  address?: string;
109
122
  capability?: string;
123
+ resource?: string;
110
124
  name?: string;
111
125
  tag: string[];
112
126
  json?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../../../src/commands/was/resource.ts"],"names":[],"mappings":"AAkFA;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,GAAG,OAAO,CAAC,MAAM,CAAC,CAwClB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,GAAG,OAAO,CAAC,MAAM,CAAC,CAoBlB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,GAAG,OAAO,CAAC,MAAM,CAAC,CAelB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE;IAChD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,GAAG,OAAO,CAAC,MAAM,CAAC,CAelB;AAsDD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE;IAChD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,EAAE,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,GAAG,OAAO,CAAC,MAAM,CAAC,CAgClB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE;IAC7C,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,GAAG,OAAO,CAAC,MAAM,CAAC,CAqBlB;AAED;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE;IAC/C,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,GAAG,OAAO,CAAC,MAAM,CAAC,CAoBlB"}
1
+ {"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../../../src/commands/was/resource.ts"],"names":[],"mappings":"AAoGA;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,GAAG,OAAO,CAAC,MAAM,CAAC,CAwClB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,GAAG,OAAO,CAAC,MAAM,CAAC,CAoBlB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,GAAG,OAAO,CAAC,MAAM,CAAC,CAelB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE;IAChD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,GAAG,OAAO,CAAC,MAAM,CAAC,CAelB;AAsDD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE;IAChD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,EAAE,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,GAAG,OAAO,CAAC,MAAM,CAAC,CAgClB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE;IAC7C,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,GAAG,OAAO,CAAC,MAAM,CAAC,CAqBlB;AAED;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE;IAC/C,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,GAAG,OAAO,CAAC,MAAM,CAAC,CAoBlB"}
@@ -2,34 +2,49 @@
2
2
  * `was resource` run functions: add (server-generated id), put (upsert at a
3
3
  * known id), get (JSON or binary), list, delete, and the resource-metadata
4
4
  * verbs `meta get` / `meta put`. Each addressing-capable verb accepts either
5
- * a path or a `--capability` targeting the resource or its collection.
5
+ * a path or a `--capability` targeting the resource or its collection. A
6
+ * collection capability names its resource with `--resource <id>`, which is
7
+ * how a grant scoped to a whole collection is invoked at one resource.
6
8
  */
7
9
  import { readFile } from 'node:fs/promises';
8
10
  import { resolveCapabilityTarget } from '../../was/capability.js';
9
11
  import { readPayload, writeResourceOutput } from '../../was/io.js';
10
- import { assertOneAddressing, printResourceListing, reportDeleted, reportError, reportNotFound, resolveCollectionTarget, resolveResourceTarget, wasUrl } from './shared.js';
12
+ import { assertOneAddressing, printResourceListing, reportDeleted, reportError, reportNotFound, resolveCollectionTarget, resolveResourceTarget, wasUrl, withResourceId } from './shared.js';
11
13
  /**
12
14
  * Resolves a single resource handle and its URL from either a path address
13
- * or a `--capability` targeting a resource -- the shared addressing logic of
14
- * the resource verbs that operate on one resource (`put`, `get`, `meta`).
15
+ * or a `--capability` -- the shared addressing logic of the resource verbs
16
+ * that operate on one resource (`put`, `get`, `meta`).
17
+ *
18
+ * The capability may target the resource itself, or the collection holding
19
+ * it together with `--resource <id>`. The second form is what a grant scoped
20
+ * to a whole collection needs: the id is chosen by the caller (unlike `add`,
21
+ * where the server picks it), and the resource handle inherits the
22
+ * collection's bound capability, so the write is still an invocation of the
23
+ * received grant.
15
24
  *
16
25
  * @param options {object}
17
26
  * @param [options.address] {string} The resource address.
18
27
  * @param [options.capability] {string} A capability reference instead of
19
28
  * a path.
29
+ * @param [options.resource] {string} The resource id beneath a collection
30
+ * capability.
20
31
  * @param options.verb {string} The verb name, for the capability-depth
21
32
  * error message.
22
33
  * @param [options.server] {string} The server base URL.
23
34
  * @param [options.did] {string} The signing DID or stored-DID handle.
24
35
  * @returns {Promise<{resource: Resource, url: string}>}
25
36
  */
26
- async function resolveResourceHandle({ address, capability, verb, server, did }) {
27
- assertOneAddressing({ address, capability });
37
+ async function resolveResourceHandle({ address, capability, resource: resourceId, verb, server, did }) {
38
+ assertOneAddressing({ address, capability, resource: resourceId });
28
39
  if (capability) {
29
- const resolved = await resolveCapabilityTarget({ ref: capability, did });
40
+ const resolved = withResourceId({
41
+ resolved: await resolveCapabilityTarget({ ref: capability, did }),
42
+ resourceId
43
+ });
30
44
  if (resolved.depth !== 'resource') {
31
45
  throw new Error(`The capability targets a ${resolved.depth}; ` +
32
- `${verb} needs a resource capability.`);
46
+ `${verb} needs a resource capability, or a collection capability ` +
47
+ 'with --resource <id>.');
33
48
  }
34
49
  return { resource: resolved.handle, url: resolved.url };
35
50
  }
@@ -108,13 +123,15 @@ export async function runResourceAdd(options) {
108
123
  }
109
124
  /**
110
125
  * Creates or replaces a resource at a known id (upsert) and prints
111
- * `{ id, url }`. The resource comes from a path or a `--capability`
112
- * targeting one.
126
+ * `{ id, url }`. The resource comes from a path, a `--capability`
127
+ * targeting one, or a collection `--capability` plus `--resource <id>`.
113
128
  *
114
129
  * @param options {object}
115
130
  * @param [options.address] {string} The resource address.
116
131
  * @param [options.capability] {string} A capability reference instead of
117
132
  * a path.
133
+ * @param [options.resource] {string} The resource id beneath a collection
134
+ * capability.
118
135
  * @param [options.file] {string} The payload file; stdin when omitted.
119
136
  * @param [options.contentType] {string} Explicit payload content type.
120
137
  * @param [options.server] {string} The server base URL.
@@ -145,13 +162,15 @@ export async function runResourcePut(options) {
145
162
  }
146
163
  /**
147
164
  * Reads a resource: JSON pretty-printed to stdout, binary written raw
148
- * (`--output` for files). The resource comes from a path or a
149
- * `--capability` targeting one.
165
+ * (`--output` for files). The resource comes from a path, a `--capability`
166
+ * targeting one, or a collection `--capability` plus `--resource <id>`.
150
167
  *
151
168
  * @param options {object}
152
169
  * @param [options.address] {string} The resource address.
153
170
  * @param [options.capability] {string} A capability reference instead of
154
171
  * a path.
172
+ * @param [options.resource] {string} The resource id beneath a collection
173
+ * capability.
155
174
  * @param [options.output] {string} The output file path; stdout when
156
175
  * omitted.
157
176
  * @param [options.server] {string} The server base URL.
@@ -178,12 +197,15 @@ export async function runResourceGet(options) {
178
197
  /**
179
198
  * Reads a resource's metadata object (server-managed `contentType` / `size` /
180
199
  * timestamps plus the user-writable `custom`) and pretty-prints it. The
181
- * resource comes from a path or a `--capability` targeting one.
200
+ * resource comes from a path, a `--capability` targeting one, or a
201
+ * collection `--capability` plus `--resource <id>`.
182
202
  *
183
203
  * @param options {object}
184
204
  * @param [options.address] {string} The resource address.
185
205
  * @param [options.capability] {string} A capability reference instead of
186
206
  * a path.
207
+ * @param [options.resource] {string} The resource id beneath a collection
208
+ * capability.
187
209
  * @param [options.server] {string} The server base URL.
188
210
  * @param [options.did] {string} The signing DID or stored-DID handle.
189
211
  * @returns {Promise<number>} The process exit code.
@@ -259,13 +281,16 @@ async function parseCustomJson(input) {
259
281
  * Updates a resource's user-writable metadata and prints the resulting
260
282
  * metadata. `--name`/`--tag` are read-modify-write sugar that preserve the
261
283
  * other field; giving both, or `--json`, is a full `custom` replacement so
262
- * any omitted property is cleared. The resource comes from a path or a
263
- * `--capability` targeting one.
284
+ * any omitted property is cleared. The resource comes from a path, a
285
+ * `--capability` targeting one, or a collection `--capability` plus
286
+ * `--resource <id>`.
264
287
  *
265
288
  * @param options {object}
266
289
  * @param [options.address] {string} The resource address.
267
290
  * @param [options.capability] {string} A capability reference instead of
268
291
  * a path.
292
+ * @param [options.resource] {string} The resource id beneath a collection
293
+ * capability.
269
294
  * @param [options.name] {string} The resource's display name.
270
295
  * @param options.tag {string[]} Repeatable `key=value` tag pairs.
271
296
  * @param [options.json] {string} Full `custom` JSON (inline or a file
@@ -1 +1 @@
1
- {"version":3,"file":"resource.js","sourceRoot":"","sources":["../../../src/commands/was/resource.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resource.js","sourceRoot":"","sources":["../../../src/commands/was/resource.ts"],"names":[],"mappings":"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"}