@interop/did-cli 0.6.0 → 0.8.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 (57) hide show
  1. package/CHANGELOG.md +64 -1
  2. package/README.md +144 -6
  3. package/dist/commands/did.d.ts.map +1 -1
  4. package/dist/commands/did.js +41 -12
  5. package/dist/commands/did.js.map +1 -1
  6. package/dist/commands/key.d.ts.map +1 -1
  7. package/dist/commands/key.js +46 -8
  8. package/dist/commands/key.js.map +1 -1
  9. package/dist/commands/was/collection.d.ts +121 -0
  10. package/dist/commands/was/collection.d.ts.map +1 -0
  11. package/dist/commands/was/collection.js +316 -0
  12. package/dist/commands/was/collection.js.map +1 -0
  13. package/dist/commands/was/policy.d.ts +50 -0
  14. package/dist/commands/was/policy.d.ts.map +1 -0
  15. package/dist/commands/was/policy.js +133 -0
  16. package/dist/commands/was/policy.js.map +1 -0
  17. package/dist/commands/was/publish.d.ts +67 -0
  18. package/dist/commands/was/publish.d.ts.map +1 -0
  19. package/dist/commands/was/publish.js +151 -0
  20. package/dist/commands/was/publish.js.map +1 -0
  21. package/dist/commands/was/resource.d.ts +148 -0
  22. package/dist/commands/was/resource.d.ts.map +1 -0
  23. package/dist/commands/was/resource.js +402 -0
  24. package/dist/commands/was/resource.js.map +1 -0
  25. package/dist/commands/was/shared.d.ts +156 -0
  26. package/dist/commands/was/shared.d.ts.map +1 -0
  27. package/dist/commands/was/shared.js +237 -0
  28. package/dist/commands/was/shared.js.map +1 -0
  29. package/dist/commands/was/space.d.ts +196 -0
  30. package/dist/commands/was/space.d.ts.map +1 -0
  31. package/dist/commands/was/space.js +516 -0
  32. package/dist/commands/was/space.js.map +1 -0
  33. package/dist/commands/was/tree.d.ts +44 -0
  34. package/dist/commands/was/tree.d.ts.map +1 -0
  35. package/dist/commands/was/tree.js +135 -0
  36. package/dist/commands/was/tree.js.map +1 -0
  37. package/dist/commands/was.d.ts +29 -496
  38. package/dist/commands/was.d.ts.map +1 -1
  39. package/dist/commands/was.js +84 -1473
  40. package/dist/commands/was.js.map +1 -1
  41. package/dist/commands/zcap.d.ts +22 -2
  42. package/dist/commands/zcap.d.ts.map +1 -1
  43. package/dist/commands/zcap.js +6 -20
  44. package/dist/commands/zcap.js.map +1 -1
  45. package/dist/meta.js +1 -1
  46. package/dist/meta.js.map +1 -1
  47. package/dist/was/capability.d.ts +10 -13
  48. package/dist/was/capability.d.ts.map +1 -1
  49. package/dist/was/capability.js +1 -59
  50. package/dist/was/capability.js.map +1 -1
  51. package/dist/zcap/delegate.d.ts +2 -2
  52. package/dist/zcap/delegate.js +2 -2
  53. package/dist/zcap/resolve.d.ts +15 -0
  54. package/dist/zcap/resolve.d.ts.map +1 -0
  55. package/dist/zcap/resolve.js +55 -0
  56. package/dist/zcap/resolve.js.map +1 -0
  57. package/package.json +29 -16
@@ -0,0 +1,402 @@
1
+ /**
2
+ * `was resource` run functions: add (server-generated id), put (upsert at a
3
+ * known id), get (JSON or binary), list, delete, and the resource-metadata
4
+ * verbs `meta get` / `meta put`. Each addressing-capable verb accepts either
5
+ * a path or a `--capability` targeting the resource or its collection.
6
+ */
7
+ import { readFile } from 'node:fs/promises';
8
+ import { resolveWasTarget } from '../../was/client.js';
9
+ import { resolveCapabilityTarget } from '../../was/capability.js';
10
+ import { readPayload, writeResourceOutput } from '../../was/io.js';
11
+ import { assertOneAddressing, printResourceListing, reportError, requireCollectionTarget, requireResourceTarget, wasUrl } from './shared.js';
12
+ /**
13
+ * Resolves a single resource handle and its URL from either a path address
14
+ * or a `--capability` targeting a resource -- the shared addressing logic of
15
+ * the resource verbs that operate on one resource (`put`, `get`, `meta`).
16
+ *
17
+ * @param options {object}
18
+ * @param [options.address] {string} The resource address.
19
+ * @param [options.capability] {string} A capability reference instead of
20
+ * a path.
21
+ * @param options.verb {string} The verb name, for the capability-depth
22
+ * error message.
23
+ * @param [options.server] {string} The server base URL.
24
+ * @param [options.did] {string} The signing DID or stored-DID handle.
25
+ * @returns {Promise<{resource: Resource, url: string}>}
26
+ */
27
+ async function resolveResourceHandle({ address, capability, verb, server, did }) {
28
+ assertOneAddressing({ address, capability });
29
+ if (capability) {
30
+ const resolved = await resolveCapabilityTarget({ ref: capability, did });
31
+ if (resolved.depth !== 'resource') {
32
+ throw new Error(`The capability targets a ${resolved.depth}; ` +
33
+ `${verb} needs a resource capability.`);
34
+ }
35
+ return { resource: resolved.handle, url: resolved.url };
36
+ }
37
+ const target = requireResourceTarget({
38
+ target: await resolveWasTarget({
39
+ address: address,
40
+ server,
41
+ did
42
+ }),
43
+ address: address
44
+ });
45
+ const resource = target.client
46
+ .space(target.spaceId)
47
+ .collection(target.collectionId)
48
+ .resource(target.resourceId);
49
+ const url = wasUrl({
50
+ server: target.server,
51
+ spaceId: target.spaceId,
52
+ collectionId: target.collectionId,
53
+ resourceId: target.resourceId
54
+ });
55
+ return { resource, url };
56
+ }
57
+ /**
58
+ * Adds a resource to a collection (server-generated id) and prints the
59
+ * `{ id, url, contentType }` add result. The collection comes from a path
60
+ * or a `--capability` targeting one.
61
+ *
62
+ * @param options {object}
63
+ * @param [options.address] {string} The collection address.
64
+ * @param [options.capability] {string} A capability reference instead of
65
+ * a path.
66
+ * @param [options.file] {string} The payload file; stdin when omitted.
67
+ * @param [options.contentType] {string} Explicit payload content type.
68
+ * @param [options.server] {string} The server base URL.
69
+ * @param [options.did] {string} The signing DID or stored-DID handle.
70
+ * @returns {Promise<number>} The process exit code.
71
+ */
72
+ export async function runResourceAdd(options) {
73
+ try {
74
+ assertOneAddressing(options);
75
+ let collection;
76
+ if (options.capability) {
77
+ const resolved = await resolveCapabilityTarget({
78
+ ref: options.capability,
79
+ did: options.did
80
+ });
81
+ if (resolved.depth !== 'collection') {
82
+ throw new Error(`The capability targets a ${resolved.depth}; ` +
83
+ 'add needs a collection capability.');
84
+ }
85
+ collection = resolved.handle;
86
+ }
87
+ else {
88
+ const target = requireCollectionTarget({
89
+ target: await resolveWasTarget({
90
+ address: options.address,
91
+ server: options.server,
92
+ did: options.did
93
+ }),
94
+ address: options.address
95
+ });
96
+ collection = target.client
97
+ .space(target.spaceId)
98
+ .collection(target.collectionId);
99
+ }
100
+ const payload = await readPayload({
101
+ file: options.file,
102
+ contentType: options.contentType
103
+ });
104
+ const result = await collection.add(payload.data, {
105
+ ...(payload.contentType !== undefined && {
106
+ contentType: payload.contentType
107
+ })
108
+ });
109
+ console.log(JSON.stringify(result, null, 2));
110
+ return 0;
111
+ }
112
+ catch (err) {
113
+ return reportError({ action: 'add the resource', err });
114
+ }
115
+ }
116
+ /**
117
+ * Creates or replaces a resource at a known id (upsert) and prints
118
+ * `{ id, url }`. The resource comes from a path or a `--capability`
119
+ * targeting one.
120
+ *
121
+ * @param options {object}
122
+ * @param [options.address] {string} The resource address.
123
+ * @param [options.capability] {string} A capability reference instead of
124
+ * a path.
125
+ * @param [options.file] {string} The payload file; stdin when omitted.
126
+ * @param [options.contentType] {string} Explicit payload content type.
127
+ * @param [options.server] {string} The server base URL.
128
+ * @param [options.did] {string} The signing DID or stored-DID handle.
129
+ * @returns {Promise<number>} The process exit code.
130
+ */
131
+ export async function runResourcePut(options) {
132
+ try {
133
+ const { resource, url } = await resolveResourceHandle({
134
+ ...options,
135
+ verb: 'put'
136
+ });
137
+ const payload = await readPayload({
138
+ file: options.file,
139
+ contentType: options.contentType
140
+ });
141
+ await resource.put(payload.data, {
142
+ ...(payload.contentType !== undefined && {
143
+ contentType: payload.contentType
144
+ })
145
+ });
146
+ console.log(JSON.stringify({ id: resource.id, url }, null, 2));
147
+ return 0;
148
+ }
149
+ catch (err) {
150
+ return reportError({ action: 'put the resource', err });
151
+ }
152
+ }
153
+ /**
154
+ * Reads a resource: JSON pretty-printed to stdout, binary written raw
155
+ * (`--output` for files). The resource comes from a path or a
156
+ * `--capability` targeting one.
157
+ *
158
+ * @param options {object}
159
+ * @param [options.address] {string} The resource address.
160
+ * @param [options.capability] {string} A capability reference instead of
161
+ * a path.
162
+ * @param [options.output] {string} The output file path; stdout when
163
+ * omitted.
164
+ * @param [options.server] {string} The server base URL.
165
+ * @param [options.did] {string} The signing DID or stored-DID handle.
166
+ * @returns {Promise<number>} The process exit code.
167
+ */
168
+ export async function runResourceGet(options) {
169
+ try {
170
+ const { resource, url } = await resolveResourceHandle({
171
+ ...options,
172
+ verb: 'get'
173
+ });
174
+ const data = await resource.get();
175
+ if (data === null) {
176
+ console.error(`Not found (or not visible to you): ${url}`);
177
+ return 1;
178
+ }
179
+ await writeResourceOutput({ data, output: options.output });
180
+ return 0;
181
+ }
182
+ catch (err) {
183
+ return reportError({ action: 'get the resource', err });
184
+ }
185
+ }
186
+ /**
187
+ * Reads a resource's metadata object (server-managed `contentType` / `size` /
188
+ * timestamps plus the user-writable `custom`) and pretty-prints it. The
189
+ * resource comes from a path or a `--capability` targeting one.
190
+ *
191
+ * @param options {object}
192
+ * @param [options.address] {string} The resource address.
193
+ * @param [options.capability] {string} A capability reference instead of
194
+ * a path.
195
+ * @param [options.server] {string} The server base URL.
196
+ * @param [options.did] {string} The signing DID or stored-DID handle.
197
+ * @returns {Promise<number>} The process exit code.
198
+ */
199
+ export async function runResourceMetaGet(options) {
200
+ try {
201
+ const { resource, url } = await resolveResourceHandle({
202
+ ...options,
203
+ verb: 'meta get'
204
+ });
205
+ const meta = await resource.meta();
206
+ if (meta === null) {
207
+ console.error(`Not found (or not visible to you): ${url}`);
208
+ return 1;
209
+ }
210
+ console.log(JSON.stringify(meta, null, 2));
211
+ return 0;
212
+ }
213
+ catch (err) {
214
+ return reportError({ action: 'get the resource metadata', err });
215
+ }
216
+ }
217
+ /**
218
+ * Parses the repeatable `--tag key=value` flags into a tags record. Returns
219
+ * `undefined` when no `--tag` was given (so the caller can leave tags
220
+ * untouched).
221
+ *
222
+ * @param rawTags {string[]} The raw `key=value` strings, as collected.
223
+ * @returns {Record<string, string> | undefined}
224
+ */
225
+ function parseTags(rawTags) {
226
+ if (rawTags.length === 0) {
227
+ return undefined;
228
+ }
229
+ const tags = {};
230
+ for (const entry of rawTags) {
231
+ const separator = entry.indexOf('=');
232
+ const key = separator === -1 ? entry : entry.slice(0, separator);
233
+ if (separator === -1 || key === '') {
234
+ throw new Error(`Invalid --tag "${entry}"; expected key=value.`);
235
+ }
236
+ tags[key] = entry.slice(separator + 1);
237
+ }
238
+ return tags;
239
+ }
240
+ /**
241
+ * Parses the `--json` escape hatch -- inline JSON, or a path to a JSON file
242
+ * when the value does not itself parse -- into a `custom` metadata object.
243
+ *
244
+ * @param input {string} Inline JSON or a JSON file path.
245
+ * @returns {Promise<ResourceMetadataCustom>}
246
+ */
247
+ async function parseCustomJson(input) {
248
+ let parsed;
249
+ try {
250
+ parsed = JSON.parse(input);
251
+ }
252
+ catch {
253
+ let contents;
254
+ try {
255
+ contents = await readFile(input, 'utf8');
256
+ }
257
+ catch {
258
+ throw new Error(`--json is neither valid JSON nor a readable file: ${input}`);
259
+ }
260
+ parsed = JSON.parse(contents);
261
+ }
262
+ if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
263
+ throw new Error('--json must be a JSON object (the custom metadata).');
264
+ }
265
+ return parsed;
266
+ }
267
+ /**
268
+ * Updates a resource's user-writable metadata and prints the resulting
269
+ * metadata. `--name`/`--tag` are read-modify-write sugar that preserve the
270
+ * other field; giving both, or `--json`, is a full `custom` replacement so
271
+ * any omitted property is cleared. The resource comes from a path or a
272
+ * `--capability` targeting one.
273
+ *
274
+ * @param options {object}
275
+ * @param [options.address] {string} The resource address.
276
+ * @param [options.capability] {string} A capability reference instead of
277
+ * a path.
278
+ * @param [options.name] {string} The resource's display name.
279
+ * @param options.tag {string[]} Repeatable `key=value` tag pairs.
280
+ * @param [options.json] {string} Full `custom` JSON (inline or a file
281
+ * path); mutually exclusive with `--name`/`--tag`.
282
+ * @param [options.server] {string} The server base URL.
283
+ * @param [options.did] {string} The signing DID or stored-DID handle.
284
+ * @returns {Promise<number>} The process exit code.
285
+ */
286
+ export async function runResourceMetaPut(options) {
287
+ try {
288
+ const tags = parseTags(options.tag);
289
+ const hasName = options.name !== undefined;
290
+ const hasTags = tags !== undefined;
291
+ const hasJson = options.json !== undefined;
292
+ if (hasJson && (hasName || hasTags)) {
293
+ throw new Error('Provide either --json or --name/--tag, not both.');
294
+ }
295
+ if (!hasJson && !hasName && !hasTags) {
296
+ throw new Error('Provide --name, --tag <key=value>, or --json.');
297
+ }
298
+ const { resource, url } = await resolveResourceHandle({
299
+ ...options,
300
+ verb: 'meta put'
301
+ });
302
+ if (hasJson) {
303
+ await resource.setMeta({ custom: await parseCustomJson(options.json) });
304
+ }
305
+ else if (hasName && hasTags) {
306
+ await resource.setMeta({ custom: { name: options.name, tags } });
307
+ }
308
+ else if (hasName) {
309
+ await resource.setName(options.name);
310
+ }
311
+ else {
312
+ await resource.setTags(tags);
313
+ }
314
+ console.error(`Updated metadata for ${url}`);
315
+ const meta = await resource.meta();
316
+ console.log(JSON.stringify(meta, null, 2));
317
+ return 0;
318
+ }
319
+ catch (err) {
320
+ return reportError({ action: 'update the resource metadata', err });
321
+ }
322
+ }
323
+ /**
324
+ * Lists the resources in a collection.
325
+ *
326
+ * @param options {object}
327
+ * @param options.address {string} The collection address.
328
+ * @param [options.json] {boolean} Output the raw listing JSON.
329
+ * @param [options.plain] {boolean} Output one resource id per line.
330
+ * @param [options.server] {string} The server base URL.
331
+ * @param [options.did] {string} The signing DID or stored-DID handle.
332
+ * @returns {Promise<number>} The process exit code.
333
+ */
334
+ export async function runResourceList(options) {
335
+ try {
336
+ const target = requireCollectionTarget({
337
+ target: await resolveWasTarget({
338
+ address: options.address,
339
+ server: options.server,
340
+ did: options.did
341
+ }),
342
+ address: options.address
343
+ });
344
+ const listing = await target.client
345
+ .space(target.spaceId)
346
+ .collection(target.collectionId)
347
+ .list();
348
+ if (listing === null) {
349
+ console.error('Not found (or not visible to you): ' +
350
+ wasUrl({
351
+ server: target.server,
352
+ spaceId: target.spaceId,
353
+ collectionId: target.collectionId
354
+ }));
355
+ return 1;
356
+ }
357
+ printResourceListing({ listing, json: options.json, plain: options.plain });
358
+ return 0;
359
+ }
360
+ catch (err) {
361
+ return reportError({ action: 'list resources', err });
362
+ }
363
+ }
364
+ /**
365
+ * Deletes a resource on the server. Idempotent.
366
+ *
367
+ * @param options {object}
368
+ * @param options.address {string} The resource address.
369
+ * @param [options.server] {string} The server base URL.
370
+ * @param [options.did] {string} The signing DID or stored-DID handle.
371
+ * @returns {Promise<number>} The process exit code.
372
+ */
373
+ export async function runResourceDelete(options) {
374
+ try {
375
+ const target = requireResourceTarget({
376
+ target: await resolveWasTarget({
377
+ address: options.address,
378
+ server: options.server,
379
+ did: options.did
380
+ }),
381
+ address: options.address
382
+ });
383
+ await target.client
384
+ .space(target.spaceId)
385
+ .collection(target.collectionId)
386
+ .resource(target.resourceId)
387
+ .delete();
388
+ console.error('Deleted ' +
389
+ wasUrl({
390
+ server: target.server,
391
+ spaceId: target.spaceId,
392
+ collectionId: target.collectionId,
393
+ resourceId: target.resourceId
394
+ }) +
395
+ ' on the server.');
396
+ return 0;
397
+ }
398
+ catch (err) {
399
+ return reportError({ action: 'delete the resource', err });
400
+ }
401
+ }
402
+ //# sourceMappingURL=resource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource.js","sourceRoot":"","sources":["../../../src/commands/was/resource.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Shared helpers for the `was` command group: option factories, address
3
+ * parsing/assertion, URL building, error reporting, listing renderers, and
4
+ * the run-and-exit wrapper. Commander `Option` instances are bound to the
5
+ * command they are added to, so the options are exposed as factories.
6
+ */
7
+ import { Option } from 'commander';
8
+ import { type Collection, type CollectionsList, type Resource, type CollectionResourcesList, type Space } from '@interop/was-client';
9
+ import { type ResolvedWasTarget } from '../../was/client.js';
10
+ /**
11
+ * Awaits a command's run function and exits the process with its code when
12
+ * non-zero -- the shared tail of every `was` command action.
13
+ *
14
+ * @param run {Promise<number>}
15
+ * @returns {Promise<void>}
16
+ */
17
+ export declare function runAndExit(run: Promise<number>): Promise<void>;
18
+ /**
19
+ * The shared command options, as factories (commander `Option` instances
20
+ * are bound to the command they are added to, so they cannot be shared).
21
+ * Centralizing them keeps the flag names and help text consistent across
22
+ * the whole command tree.
23
+ *
24
+ * @returns {Option}
25
+ */
26
+ export declare function serverOption(): Option;
27
+ export declare function didOption(): Option;
28
+ export declare function capabilityOption(): Option;
29
+ export declare function contentTypeOption(): Option;
30
+ /**
31
+ * Guards a run function against receiving both path- and capability-based
32
+ * addressing (or neither).
33
+ *
34
+ * @param options {object}
35
+ * @param [options.address] {string}
36
+ * @param [options.capability] {string}
37
+ * @returns {void}
38
+ */
39
+ export declare function assertOneAddressing({ address, capability }: {
40
+ address?: string;
41
+ capability?: string;
42
+ }): void;
43
+ /**
44
+ * Builds the canonical URL of a space, collection, or resource on its
45
+ * server, for messages and output.
46
+ *
47
+ * @param options {object}
48
+ * @param options.server {string}
49
+ * @param options.spaceId {string}
50
+ * @param [options.collectionId] {string}
51
+ * @param [options.resourceId] {string}
52
+ * @returns {string}
53
+ */
54
+ export declare function wasUrl({ server, spaceId, collectionId, resourceId }: {
55
+ server: string;
56
+ spaceId: string;
57
+ collectionId?: string;
58
+ resourceId?: string;
59
+ }): string;
60
+ /**
61
+ * Prints a one-line error for a failed command and classifies its exit code:
62
+ * 1 for operation errors (typed WAS errors from the server exchange), 2 for
63
+ * input errors (bad addresses, unknown handles/DIDs, missing server URL).
64
+ *
65
+ * @param options {object}
66
+ * @param options.action {string} What failed, e.g. `create the space`.
67
+ * @param options.err {unknown}
68
+ * @returns {number} The process exit code.
69
+ */
70
+ export declare function reportError({ action, err }: {
71
+ action: string;
72
+ err: unknown;
73
+ }): number;
74
+ /**
75
+ * Parses a WAS address and asserts it addresses a space only (no
76
+ * collection/resource segments), as the `space` subcommands require.
77
+ *
78
+ * @param address {string}
79
+ * @returns {{server?: string, spaceRef: string}}
80
+ */
81
+ export declare function parseSpaceAddress(address: string): {
82
+ server?: string;
83
+ spaceRef: string;
84
+ };
85
+ /**
86
+ * Asserts a resolved target addresses a collection (`SPACE/COLLECTION`,
87
+ * no resource segment) and narrows its type accordingly.
88
+ *
89
+ * @param options {object}
90
+ * @param options.target {ResolvedWasTarget}
91
+ * @param options.address {string} The original address, for error messages.
92
+ * @returns {ResolvedWasTarget & {collectionId: string}}
93
+ */
94
+ export declare function requireCollectionTarget({ target, address }: {
95
+ target: ResolvedWasTarget;
96
+ address: string;
97
+ }): ResolvedWasTarget & {
98
+ collectionId: string;
99
+ };
100
+ /**
101
+ * Asserts a resolved target addresses a resource
102
+ * (`SPACE/COLLECTION/RESOURCE`) and narrows its type accordingly.
103
+ *
104
+ * @param options {object}
105
+ * @param options.target {ResolvedWasTarget}
106
+ * @param options.address {string} The original address, for error messages.
107
+ * @returns {ResolvedWasTarget & {collectionId: string, resourceId: string}}
108
+ */
109
+ export declare function requireResourceTarget({ target, address }: {
110
+ target: ResolvedWasTarget;
111
+ address: string;
112
+ }): ResolvedWasTarget & {
113
+ collectionId: string;
114
+ resourceId: string;
115
+ };
116
+ /**
117
+ * Renders a collection listing as a table, raw JSON, or one id per line.
118
+ *
119
+ * @param options {object}
120
+ * @param options.listing {CollectionsList}
121
+ * @param [options.json] {boolean}
122
+ * @param [options.plain] {boolean}
123
+ * @returns {void}
124
+ */
125
+ export declare function printCollectionListing({ listing, json, plain }: {
126
+ listing: CollectionsList;
127
+ json?: boolean;
128
+ plain?: boolean;
129
+ }): void;
130
+ /**
131
+ * Renders a resource listing as a table, raw JSON, or one id per line.
132
+ *
133
+ * @param options {object}
134
+ * @param options.listing {CollectionResourcesList}
135
+ * @param [options.json] {boolean}
136
+ * @param [options.plain] {boolean}
137
+ * @returns {void}
138
+ */
139
+ export declare function printResourceListing({ listing, json, plain }: {
140
+ listing: CollectionResourcesList;
141
+ json?: boolean;
142
+ plain?: boolean;
143
+ }): void;
144
+ /**
145
+ * Builds the access handle (space, collection, or resource) a resolved
146
+ * target addresses, together with its URL. Policies and publishing work at
147
+ * every depth, so these commands dispatch through this helper.
148
+ *
149
+ * @param target {ResolvedWasTarget}
150
+ * @returns {{handle: Space | Collection | Resource, url: string}}
151
+ */
152
+ export declare function handleForTarget(target: ResolvedWasTarget): {
153
+ handle: Space | Collection | Resource;
154
+ url: string;
155
+ };
156
+ //# sourceMappingURL=shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/commands/was/shared.ts"],"names":[],"mappings":"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"}