@interop/was-client 0.13.3 → 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.
- package/README.md +33 -0
- package/dist/Space.d.ts +27 -0
- package/dist/Space.d.ts.map +1 -1
- package/dist/Space.js +30 -0
- package/dist/Space.js.map +1 -1
- package/dist/WasClient.d.ts +14 -0
- package/dist/WasClient.d.ts.map +1 -1
- package/dist/WasClient.js +21 -0
- package/dist/WasClient.js.map +1 -1
- package/dist/edv/WasTransport.d.ts +67 -19
- package/dist/edv/WasTransport.d.ts.map +1 -1
- package/dist/edv/WasTransport.js +154 -35
- package/dist/edv/WasTransport.js.map +1 -1
- package/dist/internal/grant.d.ts +11 -1
- package/dist/internal/grant.d.ts.map +1 -1
- package/dist/internal/grant.js +32 -3
- package/dist/internal/grant.js.map +1 -1
- package/dist/internal/paths.d.ts +28 -0
- package/dist/internal/paths.d.ts.map +1 -1
- package/dist/internal/paths.js +42 -0
- package/dist/internal/paths.js.map +1 -1
- package/dist/internal/revoke.d.ts +34 -0
- package/dist/internal/revoke.d.ts.map +1 -0
- package/dist/internal/revoke.js +106 -0
- package/dist/internal/revoke.js.map +1 -0
- package/dist/types.d.ts +2 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
- [Collections](#collections)
|
|
18
18
|
- [Resources: JSON and binary](#resources-json-and-binary)
|
|
19
19
|
- [Delegation and sharing](#delegation-and-sharing)
|
|
20
|
+
- [Revoking a capability](#revoking-a-capability)
|
|
20
21
|
- [Public sharing and access-control policies](#public-sharing-and-access-control-policies)
|
|
21
22
|
- [Resource metadata](#resource-metadata)
|
|
22
23
|
- [Conditional writes (optimistic concurrency)](#conditional-writes-optimistic-concurrency)
|
|
@@ -315,6 +316,38 @@ authorizes on these case-sensitively (uppercase), but `grant()` also accepts the
|
|
|
315
316
|
lowercase forms and normalizes them to uppercase in the signed zcap -- so
|
|
316
317
|
`actions: ['get']` still validates server-side.
|
|
317
318
|
|
|
319
|
+
### Revoking a capability
|
|
320
|
+
|
|
321
|
+
`space.revoke(zcap)` undoes a `grant()`, so a leaked capability need not be
|
|
322
|
+
waited out to its `expires`. `was.revoke(zcap)` is the same operation with the
|
|
323
|
+
Space derived from the capability.
|
|
324
|
+
|
|
325
|
+
```ts
|
|
326
|
+
const zcap = await collection.grant({ to: appDid, actions: ['GET', 'PUT'] })
|
|
327
|
+
// ... the capability leaks ...
|
|
328
|
+
await space.revoke(zcap) // from now on the capability is rejected
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
Two parties may revoke: the Space's controller, and any controller in the
|
|
332
|
+
capability's own delegation chain -- so an application can revoke the capability
|
|
333
|
+
it holds, without being granted anything extra. Anyone else gets a
|
|
334
|
+
`NotFoundError`, WAS's mask for "not visible to you".
|
|
335
|
+
|
|
336
|
+
Three properties are easy to get wrong:
|
|
337
|
+
|
|
338
|
+
- **Revocation is Space-scoped.** There is no global or cross-Space revocation;
|
|
339
|
+
submitting a capability rooted in another Space throws `ValidationError`.
|
|
340
|
+
- **It withdraws the capability, not a policy grant.** Access-control policies
|
|
341
|
+
are permissive, so a `PublicCanRead` target stays world-readable after you
|
|
342
|
+
revoke a capability naming it. What dies is the capability: on such a target
|
|
343
|
+
the revoked zcap's read still succeeds while its write does not.
|
|
344
|
+
- **It is prospective, and not idempotent.** A revoked reader of an encrypted
|
|
345
|
+
Collection keeps the keys for ciphertext it already fetched. And revoking an
|
|
346
|
+
already-revoked capability throws `ValidationError`: the server reports it
|
|
347
|
+
with the same 400 it uses for a tampered or expired capability, so the client
|
|
348
|
+
cannot tell them apart and does not swallow any of them. Catch
|
|
349
|
+
`ValidationError` if you want revoking twice to be a no-op.
|
|
350
|
+
|
|
318
351
|
### Public sharing and access-control policies
|
|
319
352
|
|
|
320
353
|
A Space, Collection, or Resource can carry an access-control **policy** that
|
package/dist/Space.d.ts
CHANGED
|
@@ -164,6 +164,33 @@ export declare class Space {
|
|
|
164
164
|
* @returns {Promise<IDelegatedZcap>}
|
|
165
165
|
*/
|
|
166
166
|
grant(options: GrantOptions): Promise<IDelegatedZcap>;
|
|
167
|
+
/**
|
|
168
|
+
* Revokes a capability rooted in this space -- the inverse of {@link grant}.
|
|
169
|
+
* From then on the capability is rejected wherever a Space-rooted chain is
|
|
170
|
+
* verified: writes, privileged routes, and the capability leg of reads.
|
|
171
|
+
*
|
|
172
|
+
* Two callers are authorized: this space's controller, and any controller in
|
|
173
|
+
* the capability's own delegation chain (so a delegee can revoke the
|
|
174
|
+
* capability it holds, without a separate grant). Anyone else gets a
|
|
175
|
+
* `NotFoundError`, as does a capability rooted in a different space.
|
|
176
|
+
*
|
|
177
|
+
* Revocation withdraws only what the *capability* granted. Access an
|
|
178
|
+
* access-control policy grants independently survives it, so a `PublicCanRead`
|
|
179
|
+
* target stays publicly readable afterwards. It is also prospective: a revoked
|
|
180
|
+
* reader of an encrypted collection still holds the keys for ciphertext it
|
|
181
|
+
* already fetched.
|
|
182
|
+
*
|
|
183
|
+
* **Not idempotent.** Revoking an already-revoked capability throws
|
|
184
|
+
* `ValidationError` (the server's 400), because its chain now contains a
|
|
185
|
+
* revoked link. The server reports that with the same problem type it uses for
|
|
186
|
+
* a tampered, expired, or foreign-rooted capability, so this method cannot
|
|
187
|
+
* distinguish them and does not swallow any of them. Catch `ValidationError`
|
|
188
|
+
* if you want revoking twice to be a no-op.
|
|
189
|
+
*
|
|
190
|
+
* @param zcap {IDelegatedZcap} the delegated capability to revoke
|
|
191
|
+
* @returns {Promise<void>}
|
|
192
|
+
*/
|
|
193
|
+
revoke(zcap: IDelegatedZcap): Promise<void>;
|
|
167
194
|
/**
|
|
168
195
|
* Sends the export request and returns the raw response with its body stream
|
|
169
196
|
* intact, shared by `export`/`exportBlob`/`exportStream`.
|
package/dist/Space.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Space.d.ts","sourceRoot":"","sources":["../src/Space.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Space.d.ts","sourceRoot":"","sources":["../src/Space.ts"],"names":[],"mappings":"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"}
|
package/dist/Space.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { spacePath, spaceItems, spaceCollections, spaceExport, spaceImport, spaceBackends, registeredBackend, spaceQuotas, spacePolicy, spaceLinkset } from './internal/paths.js';
|
|
2
2
|
import { assertNotReserved } from './internal/reserved.js';
|
|
3
3
|
import { delegateGrantAt } from './internal/grant.js';
|
|
4
|
+
import { submitRevocation } from './internal/revoke.js';
|
|
4
5
|
import { send, readData } from './internal/request.js';
|
|
5
6
|
import { WasServerError } from './errors.js';
|
|
6
7
|
import { createdId, dataOrNull, toPlainBytes } from './internal/content.js';
|
|
@@ -281,6 +282,35 @@ export class Space {
|
|
|
281
282
|
capability: this._capability
|
|
282
283
|
});
|
|
283
284
|
}
|
|
285
|
+
/**
|
|
286
|
+
* Revokes a capability rooted in this space -- the inverse of {@link grant}.
|
|
287
|
+
* From then on the capability is rejected wherever a Space-rooted chain is
|
|
288
|
+
* verified: writes, privileged routes, and the capability leg of reads.
|
|
289
|
+
*
|
|
290
|
+
* Two callers are authorized: this space's controller, and any controller in
|
|
291
|
+
* the capability's own delegation chain (so a delegee can revoke the
|
|
292
|
+
* capability it holds, without a separate grant). Anyone else gets a
|
|
293
|
+
* `NotFoundError`, as does a capability rooted in a different space.
|
|
294
|
+
*
|
|
295
|
+
* Revocation withdraws only what the *capability* granted. Access an
|
|
296
|
+
* access-control policy grants independently survives it, so a `PublicCanRead`
|
|
297
|
+
* target stays publicly readable afterwards. It is also prospective: a revoked
|
|
298
|
+
* reader of an encrypted collection still holds the keys for ciphertext it
|
|
299
|
+
* already fetched.
|
|
300
|
+
*
|
|
301
|
+
* **Not idempotent.** Revoking an already-revoked capability throws
|
|
302
|
+
* `ValidationError` (the server's 400), because its chain now contains a
|
|
303
|
+
* revoked link. The server reports that with the same problem type it uses for
|
|
304
|
+
* a tampered, expired, or foreign-rooted capability, so this method cannot
|
|
305
|
+
* distinguish them and does not swallow any of them. Catch `ValidationError`
|
|
306
|
+
* if you want revoking twice to be a no-op.
|
|
307
|
+
*
|
|
308
|
+
* @param zcap {IDelegatedZcap} the delegated capability to revoke
|
|
309
|
+
* @returns {Promise<void>}
|
|
310
|
+
*/
|
|
311
|
+
async revoke(zcap) {
|
|
312
|
+
return submitRevocation(this._context, { spaceId: this.id, zcap });
|
|
313
|
+
}
|
|
284
314
|
/**
|
|
285
315
|
* Sends the export request and returns the raw response with its body stream
|
|
286
316
|
* intact, shared by `export`/`exportBlob`/`exportStream`.
|
package/dist/Space.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Space.js","sourceRoot":"","sources":["../src/Space.ts"],"names":[],"mappings":"AAUA,OAAO,EACL,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,WAAW,EACX,YAAY,EACb,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"Space.js","sourceRoot":"","sources":["../src/Space.ts"],"names":[],"mappings":"AAUA,OAAO,EACL,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,WAAW,EACX,YAAY,EACb,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAEvD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAC3E,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAkB5C,MAAM,OAAO,KAAK;IACP,EAAE,CAAQ;IAEF,QAAQ,CAAe;IACvB,WAAW,CAAQ;IAEpC;;;;;OAKG;IACH,YAAY,EACV,OAAO,EACP,OAAO,EACP,UAAU,EAKX;QACC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;QACvB,IAAI,CAAC,EAAE,GAAG,OAAO,CAAA;QACjB,IAAI,CAAC,WAAW,GAAG,UAAU,CAAA;IAC/B,CAAC;IAED,IAAY,KAAK;QACf,OAAO,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC3B,CAAC;IAED,IAAY,WAAW;QACrB,OAAO,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC7B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,QAAQ;QACZ,OAAO,QAAQ,CAAmB,IAAI,CAAC,QAAQ,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,UAAU,EAAE,IAAI,CAAC,WAAW;SAC7B,CAAC,CAAA;IACJ,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,SAAS,CAAC,IAGf;QACC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAA;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,OAAO,EAAE,IAAI,CAAA;QACvC,MAAM,UAAU,GACd,IAAI,CAAC,UAAU,IAAI,OAAO,EAAE,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAA;QACvE,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YACxB,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,MAAM,EAAE,KAAK;YACb,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;SACxC,CAAC,CAAA;QACF,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC;YAChC,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvC,uEAAuE;YACvE,qEAAqE;YACrE,UAAU,EAAE,UAA4C;SACzD,CAAA;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAM;QACV,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YACxB,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,MAAM,EAAE,QAAQ;YAChB,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,UAAU,EAAE,IAAI;SACjB,CAAC,CAAA;IACJ,CAAC;IAED;;;;;;;OAOG;IACH,UAAU,CAAC,YAAoB,EAAE,UAAyB,EAAE;QAC1D,OAAO,IAAI,UAAU,CAAC;YACpB,OAAO,EAAE,IAAI,CAAC,QAAQ;YACtB,OAAO,EAAE,IAAI,CAAC,EAAE;YAChB,YAAY;YACZ,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW;YAClD,UAAU,EAAE,OAAO,CAAC,UAAU;SAC/B,CAAC,CAAA;IACJ,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,gBAAgB,CACpB,OAKI,EAAE;QAEN,IAAI,IAAI,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;YAC1B,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAA;QACxD,CAAC;QACD,MAAM,IAAI,GAA4B,EAAE,CAAA;QACxC,IAAI,IAAI,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;YAC1B,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAA;QACnB,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;QACvB,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;QAC7B,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAA;QACnC,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YACzC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,MAAM,EAAE,MAAM;YACd,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,IAAI,EAAE,IAAI;SACX,CAAC,CAAA;QACF,4EAA4E;QAC5E,yEAAyE;QACzE,qEAAqE;QACrE,wEAAwE;QACxE,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;YAC1C,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAC,CAAA;IACJ,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,WAAW;QACf,OAAO,QAAQ,CAAkB,IAAI,CAAC,QAAQ,EAAE;YAC9C,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,UAAU,EAAE,IAAI,CAAC,WAAW;SAC7B,CAAC,CAAA;IACJ,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,QAAQ;QACZ,OAAO,QAAQ,CAAsB,IAAI,CAAC,QAAQ,EAAE;YAClD,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,UAAU,EAAE,IAAI,CAAC,WAAW;SAC7B,CAAC,CAAA;IACJ,CAAC;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,KAAK,CAAC,eAAe,CACnB,YAAiC;QAEjC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YACzC,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,MAAM,EAAE,MAAM;YACd,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,IAAI,EAAE,YAAY;SACnB,CAAC,CAAA;QACF,0EAA0E;QAC1E,OAAO,UAAU,CAAoB,QAAQ,CAAE,CAAA;IACjD,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,KAAK,CAAC,aAAa,CACjB,YAAiC;QAEjC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YACzC,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC,EAAE,EAAE,YAAY,CAAC,EAAE,CAAC;YACjD,MAAM,EAAE,KAAK;YACb,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,IAAI,EAAE,YAAY;SACnB,CAAC,CAAA;QACF,wEAAwE;QACxE,sDAAsD;QACtD,OAAO,UAAU,CAAoB,QAAQ,CAAC,CAAA;IAChD,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,iBAAiB,CAAC,SAAiB;QACvC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YACxB,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC;YAC3C,MAAM,EAAE,QAAQ;YAChB,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,UAAU,EAAE,IAAI;SACjB,CAAC,CAAA;IACJ,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,MAAM,CAAC,EACX,kBAAkB,GAAG,KAAK,KACU,EAAE;QACtC,MAAM,IAAI,GAAG,kBAAkB;YAC7B,CAAC,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,sBAAsB;YAC/C,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACxB,OAAO,QAAQ,CAAmB,IAAI,CAAC,QAAQ,EAAE;YAC/C,IAAI;YACJ,UAAU,EAAE,IAAI,CAAC,WAAW;SAC7B,CAAC,CAAA;IACJ,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,KAAK,CAAC,OAAqB;QAC/B,OAAO,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE;YACpC,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,OAAO;YACP,UAAU,EAAE,IAAI,CAAC,WAAW;SAC7B,CAAC,CAAA;IACJ,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,KAAK,CAAC,MAAM,CAAC,IAAoB;QAC/B,OAAO,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;IACpE,CAAC;IAED;;;;;;;;;;;;OAYG;IACK,KAAK,CAAC,eAAe;QAC3B,MAAM,QAAQ,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAC1C,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,MAAM,EAAE,MAAM;YACd,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,2EAA2E;SAC5E,CAAC,CAAiB,CAAA;QACnB,IAAI,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACrD,MAAM,WAAW,GACf,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,yBAAyB,CAAA;YACnE,MAAM,IAAI,cAAc,CACtB,2DAA2D;gBACzD,GAAG,WAAW,gCAAgC,CACjD,CAAA;QACH,CAAC;QACD,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,MAAM;QACV,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAA;QAC7C,OAAO,IAAI,UAAU,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAA;IACrD,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;QACxD,0EAA0E;QAC1E,sEAAsE;QACtE,OAAO,IAAI,CAAC,IAAI,KAAK,mBAAmB;YACtC,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAA;IACrD,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,YAAY;QAChB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAA;QAC7C,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YAC3B,sEAAsE;YACtE,6CAA6C;YAC7C,MAAM,IAAI,cAAc,CAAC,yCAAyC,CAAC,CAAA;QACrE,CAAC;QACD,OAAO,QAAQ,CAAC,IAAkC,CAAA;IACpD,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,MAAM,CAAC,GAAsB;QACjC,MAAM,IAAI,GAAG,GAAG,YAAY,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;QAChE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YACzC,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,MAAM,EAAE,MAAM;YACd,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,IAAI;YACJ,OAAO,EAAE,EAAE,cAAc,EAAE,mBAAmB,EAAE;SACjD,CAAC,CAAA;QACF,qDAAqD;QACrD,OAAO,UAAU,CAAc,QAAQ,CAAE,CAAA;IAC3C,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,SAAS;QACb,OAAO,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE;YAC/B,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,UAAU,EAAE,IAAI,CAAC,WAAW;SAC7B,CAAC,CAAA;IACJ,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,SAAS,CAAC,MAAsB;QACpC,OAAO,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE;YAChC,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,MAAM;YACN,UAAU,EAAE,IAAI,CAAC,WAAW;SAC7B,CAAC,CAAA;IACJ,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,QAAQ;QACZ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAA;QACrC,OAAO,MAAM,EAAE,IAAI,KAAK,eAAe,CAAA;IACzC,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,SAAS;QACb,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAA;IACjD,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,WAAW;QACf,OAAO,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE;YACjC,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,UAAU,EAAE,IAAI,CAAC,WAAW;SAC7B,CAAC,CAAA;IACJ,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,OAAO;QACX,OAAO,QAAQ,CAAU,IAAI,CAAC,QAAQ,EAAE;YACtC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,UAAU,EAAE,IAAI,CAAC,WAAW;SAC7B,CAAC,CAAA;IACJ,CAAC;CACF"}
|
package/dist/WasClient.d.ts
CHANGED
|
@@ -183,6 +183,20 @@ export declare class WasClient {
|
|
|
183
183
|
* @returns {Promise<IDelegatedZcap>}
|
|
184
184
|
*/
|
|
185
185
|
grant(options: GrantOptions): Promise<IDelegatedZcap>;
|
|
186
|
+
/**
|
|
187
|
+
* The general revocation primitive -- the inverse of {@link grant}. Derives the
|
|
188
|
+
* owning space from the capability's `invocationTarget` (which a Space-rooted
|
|
189
|
+
* capability always addresses at or beneath) and submits it to that space's
|
|
190
|
+
* revocation endpoint. Equivalent to `was.space(id).revoke(zcap)`.
|
|
191
|
+
*
|
|
192
|
+
* Revocation is scoped to one space: there is no cross-space or global
|
|
193
|
+
* revocation. See {@link Space.revoke} for who may call it, what it does and
|
|
194
|
+
* does not withdraw, and why it is not idempotent.
|
|
195
|
+
*
|
|
196
|
+
* @param zcap {IDelegatedZcap} the delegated capability to revoke
|
|
197
|
+
* @returns {Promise<void>}
|
|
198
|
+
*/
|
|
199
|
+
revoke(zcap: IDelegatedZcap): Promise<void>;
|
|
186
200
|
/**
|
|
187
201
|
* The signed escape hatch, mirroring ezcap's generic `request()`. Resolves
|
|
188
202
|
* `path` against `serverUrl`, defaults `action` to `method`, and signs via the
|
package/dist/WasClient.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WasClient.d.ts","sourceRoot":"","sources":["../src/WasClient.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;GAOG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAE3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"WasClient.d.ts","sourceRoot":"","sources":["../src/WasClient.ts"],"names":[],"mappings":"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"}
|
package/dist/WasClient.js
CHANGED
|
@@ -16,6 +16,7 @@ import { send, rawRequest, unsignedRequest } from './internal/request.js';
|
|
|
16
16
|
import { createdId, dataOrNull, parseResource, readJsonData } from './internal/content.js';
|
|
17
17
|
import { buildPageWalk, collectPages, walkPages } from './internal/pagination.js';
|
|
18
18
|
import { delegateGrant } from './internal/grant.js';
|
|
19
|
+
import { spaceIdOf, submitRevocation } from './internal/revoke.js';
|
|
19
20
|
import { ValidationError } from './errors.js';
|
|
20
21
|
import { Space } from './Space.js';
|
|
21
22
|
import { Collection } from './Collection.js';
|
|
@@ -306,6 +307,26 @@ export class WasClient {
|
|
|
306
307
|
async grant(options) {
|
|
307
308
|
return delegateGrant(this._context, options);
|
|
308
309
|
}
|
|
310
|
+
/**
|
|
311
|
+
* The general revocation primitive -- the inverse of {@link grant}. Derives the
|
|
312
|
+
* owning space from the capability's `invocationTarget` (which a Space-rooted
|
|
313
|
+
* capability always addresses at or beneath) and submits it to that space's
|
|
314
|
+
* revocation endpoint. Equivalent to `was.space(id).revoke(zcap)`.
|
|
315
|
+
*
|
|
316
|
+
* Revocation is scoped to one space: there is no cross-space or global
|
|
317
|
+
* revocation. See {@link Space.revoke} for who may call it, what it does and
|
|
318
|
+
* does not withdraw, and why it is not idempotent.
|
|
319
|
+
*
|
|
320
|
+
* @param zcap {IDelegatedZcap} the delegated capability to revoke
|
|
321
|
+
* @returns {Promise<void>}
|
|
322
|
+
*/
|
|
323
|
+
async revoke(zcap) {
|
|
324
|
+
const context = this._context;
|
|
325
|
+
return submitRevocation(context, {
|
|
326
|
+
spaceId: spaceIdOf(context, zcap),
|
|
327
|
+
zcap
|
|
328
|
+
});
|
|
329
|
+
}
|
|
309
330
|
/**
|
|
310
331
|
* The signed escape hatch, mirroring ezcap's generic `request()`. Resolves
|
|
311
332
|
* `path` against `serverUrl`, defaults `action` to `method`, and signs via the
|
package/dist/WasClient.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WasClient.js","sourceRoot":"","sources":["../src/WasClient.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"WasClient.js","sourceRoot":"","sources":["../src/WasClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,17 +26,22 @@
|
|
|
26
26
|
* server that does not will reject it with 415). Pass `contentType:
|
|
27
27
|
* JOSE_CONTENT_TYPE` to opt into it where the server supports it.
|
|
28
28
|
*
|
|
29
|
-
* Scope: documents
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
29
|
+
* Scope: documents (`insert` / `update` / `get`) plus blinded-index content
|
|
30
|
+
* query (`find`, the `blinded-index` profile of the reserved Collection
|
|
31
|
+
* `POST .../query` endpoint -- the server's `blinded-index-query` backend
|
|
32
|
+
* feature). `updateIndex` throws: in this profile the `indexed` array rides
|
|
33
|
+
* inside the stored document envelope, so `update()` IS the re-index
|
|
34
|
+
* operation and no separate index endpoint exists. Chunked streams
|
|
35
|
+
* (`storeChunk` / `getChunk`) still require the server's `chunked-streams`
|
|
36
|
+
* affordance (the reserved `/{id}/chunks/{n}` sub-segment), which neither
|
|
37
|
+
* reference backend provides, so they throw.
|
|
38
|
+
* `insert` uses an atomic `If-None-Match: *` create when the backend
|
|
34
39
|
* advertises the optional `conditional-writes` feature; otherwise (and for
|
|
35
40
|
* `update`) writes are advisory -- the EDV `sequence` is not enforced
|
|
36
41
|
* (last-writer-wins on `update`).
|
|
37
42
|
*/
|
|
38
43
|
import { Transport } from '@interop/edv-client';
|
|
39
|
-
import type { IEncryptedDocument } from '@interop/data-integrity-core';
|
|
44
|
+
import type { IEDVQuery, IEncryptedDocument } from '@interop/data-integrity-core';
|
|
40
45
|
import type { WasClient } from '../WasClient.js';
|
|
41
46
|
import { JOSE_CONTENT_TYPE } from './constants.js';
|
|
42
47
|
export { JOSE_CONTENT_TYPE };
|
|
@@ -50,7 +55,7 @@ export declare class WasTransport extends Transport {
|
|
|
50
55
|
readonly collectionId: string;
|
|
51
56
|
readonly contentType: string;
|
|
52
57
|
private readonly _was;
|
|
53
|
-
private
|
|
58
|
+
private _backendFeaturesPromise?;
|
|
54
59
|
/**
|
|
55
60
|
* @param options {object}
|
|
56
61
|
* @param options.was {WasClient} a WAS client holding the signer
|
|
@@ -90,11 +95,20 @@ export declare class WasTransport extends Transport {
|
|
|
90
95
|
*/
|
|
91
96
|
private _put;
|
|
92
97
|
/**
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
* memoized for the transport's
|
|
96
|
-
* (404, 501 on a server without
|
|
97
|
-
*
|
|
98
|
+
* The feature tokens the collection's backend advertises in its "Collection
|
|
99
|
+
* Backend Selected" descriptor (e.g. `conditional-writes`,
|
|
100
|
+
* `blinded-index-query`). Read once and memoized for the transport's
|
|
101
|
+
* lifetime; any failure to read the descriptor (404, 501 on a server without
|
|
102
|
+
* backend support, network error) resolves `[]`, so every affordance gate
|
|
103
|
+
* falls closed.
|
|
104
|
+
*
|
|
105
|
+
* @returns {Promise<string[]>}
|
|
106
|
+
*/
|
|
107
|
+
private _backendFeatures;
|
|
108
|
+
/**
|
|
109
|
+
* Whether the collection's backend advertises the optional
|
|
110
|
+
* `conditional-writes` feature, so `insert` can use an atomic
|
|
111
|
+
* `If-None-Match: *` create instead of the advisory existence-check path.
|
|
98
112
|
*
|
|
99
113
|
* @returns {Promise<boolean>}
|
|
100
114
|
*/
|
|
@@ -108,7 +122,9 @@ export declare class WasTransport extends Transport {
|
|
|
108
122
|
* `PUT` with `If-None-Match: *`, and the server's 412 maps to
|
|
109
123
|
* `DuplicateError`. Otherwise it degrades to a bodiless existence check
|
|
110
124
|
* (`HEAD`) before the `PUT` -- advisory and non-atomic, but no longer
|
|
111
|
-
* downloading the whole stored envelope just to discard it.
|
|
125
|
+
* downloading the whole stored envelope just to discard it. In either path a
|
|
126
|
+
* 409 (a `unique: true` blinded attribute already held by another document)
|
|
127
|
+
* likewise maps to `DuplicateError`.
|
|
112
128
|
*
|
|
113
129
|
* @param options {object}
|
|
114
130
|
* @param options.encrypted {IEncryptedDocument} the document to insert
|
|
@@ -124,6 +140,14 @@ export declare class WasTransport extends Transport {
|
|
|
124
140
|
* here -- without server-side conditional writes, a stale write is not
|
|
125
141
|
* rejected (last-writer-wins).
|
|
126
142
|
*
|
|
143
|
+
* Two write-time conflicts are mapped to the names `EdvClientCore` dispatches
|
|
144
|
+
* on. A server enforcing conditional writes rejects a stale/sequence
|
|
145
|
+
* conflict with 412 (precondition-failed), which surfaces as
|
|
146
|
+
* `InvalidStateError` -- the recoverable case, by re-fetching the current
|
|
147
|
+
* document and retrying. A 409 is the EDV unique-attribute collision (a
|
|
148
|
+
* `unique: true` blinded attribute already held by another document), which
|
|
149
|
+
* is NOT recoverable by re-fetch-and-retry; it surfaces as `DuplicateError`.
|
|
150
|
+
*
|
|
127
151
|
* @param options {object}
|
|
128
152
|
* @param options.encrypted {IEncryptedDocument} the document to update
|
|
129
153
|
* @returns {Promise<void>}
|
|
@@ -156,14 +180,36 @@ export declare class WasTransport extends Transport {
|
|
|
156
180
|
/**
|
|
157
181
|
* @inheritdoc
|
|
158
182
|
*
|
|
159
|
-
*
|
|
160
|
-
*
|
|
183
|
+
* Runs a blinded-index content query: a signed `POST` of
|
|
184
|
+
* `{ profile: 'blinded-index', ...query }` to the Collection's reserved
|
|
185
|
+
* `/query` endpoint. Requires the backend's `blinded-index-query` affordance
|
|
186
|
+
* (throws `NotSupportedError` when it is absent). The server evaluates the
|
|
187
|
+
* blinded `equals` / `has` filters against the `indexed` entries of stored
|
|
188
|
+
* documents (opaque string comparison -- it does no crypto) and returns
|
|
189
|
+
* `{ documents, hasMore, cursor? }` (the encrypted envelopes verbatim, in
|
|
190
|
+
* ascending resource-id order, with `cursor` present iff `hasMore`), or a
|
|
191
|
+
* bare `{ count }` when `query.count` is `true`. The body is returned
|
|
192
|
+
* untouched: `EdvClientCore.find` decrypts `documents` and passes
|
|
193
|
+
* `hasMore` / `cursor` through.
|
|
194
|
+
*
|
|
195
|
+
* @param options {object}
|
|
196
|
+
* @param options.query {IEDVQuery} the blinded query (`index` plus one of
|
|
197
|
+
* `equals` / `has`, and optional `count` / `limit` / `cursor`), as built
|
|
198
|
+
* by `EdvClientCore`'s `IndexHelper.buildQuery`
|
|
199
|
+
* @returns {Promise<object>} the server's response body verbatim
|
|
161
200
|
*/
|
|
162
|
-
find(
|
|
201
|
+
find({ query }?: {
|
|
202
|
+
query?: IEDVQuery;
|
|
203
|
+
}): Promise<object>;
|
|
163
204
|
/**
|
|
164
205
|
* @inheritdoc
|
|
165
206
|
*
|
|
166
|
-
*
|
|
207
|
+
* Not supported, deliberately: in the EDV-over-WAS profile, index entries
|
|
208
|
+
* are not a separate server-side resource -- the `indexed` array rides
|
|
209
|
+
* inside the stored document envelope, and every `insert` / `update`
|
|
210
|
+
* already carries it. Re-indexing a document is therefore an ordinary
|
|
211
|
+
* `update()` of the full envelope; there is no `/{id}/index` endpoint to
|
|
212
|
+
* bind this to.
|
|
167
213
|
*/
|
|
168
214
|
updateIndex(): Promise<never>;
|
|
169
215
|
/**
|
|
@@ -179,8 +225,10 @@ export declare class WasTransport extends Transport {
|
|
|
179
225
|
*/
|
|
180
226
|
getChunk(): Promise<never>;
|
|
181
227
|
/**
|
|
182
|
-
* Throws a uniform "not supported in this profile" error for
|
|
183
|
-
*
|
|
228
|
+
* Throws a uniform "not supported in this profile" error for the chunked-
|
|
229
|
+
* stream operations, which depend on a server-side affordance (the reserved
|
|
230
|
+
* `/{id}/chunks/{n}` sub-segment, the `chunked-streams` backend feature)
|
|
231
|
+
* that neither reference backend provides yet.
|
|
184
232
|
*
|
|
185
233
|
* @param operation {string}
|
|
186
234
|
* @returns {never}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WasTransport.d.ts","sourceRoot":"","sources":["../../src/edv/WasTransport.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH
|
|
1
|
+
{"version":3,"file":"WasTransport.d.ts","sourceRoot":"","sources":["../../src/edv/WasTransport.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAE/C,OAAO,KAAK,EACV,SAAS,EACT,kBAAkB,EACnB,MAAM,8BAA8B,CAAA;AACrC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAQhD,OAAO,EAGL,iBAAiB,EAClB,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EAAE,iBAAiB,EAAE,CAAA;AAE5B;;;GAGG;AACH,KAAK,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;AA8B9C,qBAAa,YAAa,SAAQ,SAAS;IACzC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAE5B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAc;IACnC,OAAO,CAAC,uBAAuB,CAAC,CAAmB;IAEnD;;;;;;;;;OASG;gBACS,EACV,GAAG,EACH,OAAO,EACP,YAAY,EACZ,WAAkC,EACnC,EAAE;QACD,GAAG,EAAE,YAAY,CAAA;QACjB,OAAO,EAAE,MAAM,CAAA;QACf,YAAY,EAAE,MAAM,CAAA;QACpB,WAAW,CAAC,EAAE,MAAM,CAAA;KACrB;IAQD;;;;;;;;OAQG;IACH,OAAO,CAAC,aAAa;IAIrB;;;;;;;;;;OAUG;YACW,IAAI;IAclB;;;;;;;;;OASG;IACH,OAAO,CAAC,gBAAgB;IAsBxB;;;;;;OAMG;YACW,kBAAkB;IAIhC;;;;;;;;;;;;;;;;OAgBG;IACY,MAAM,CAAC,EACpB,SAAS,EACV,GAAE;QAAE,SAAS,CAAC,EAAE,kBAAkB,CAAA;KAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAkD1D;;;;;;;;;;;;;;;;;;OAkBG;IACY,MAAM,CAAC,EACpB,SAAS,EACV,GAAE;QAAE,SAAS,CAAC,EAAE,kBAAkB,CAAA;KAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA6B1D;;;;;;;;;OASG;IACY,GAAG,CAAC,EACjB,EAAE,EACH,GAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAuBrD;;;;;;;OAOG;YACW,OAAO;IAYrB;;;;;;;;;;;;;;;;;;;;OAoBG;IACY,IAAI,CAAC,EAAE,KAAK,EAAE,GAAE;QAAE,KAAK,CAAC,EAAE,SAAS,CAAA;KAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAyC3E;;;;;;;;;OASG;IACY,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC;IAU5C;;;;OAIG;IACY,UAAU,IAAI,OAAO,CAAC,KAAK,CAAC;IAI3C;;;;OAIG;IACY,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC;IAIzC;;;;;;;;OAQG;IACH,OAAO,CAAC,YAAY;CAQrB"}
|
package/dist/edv/WasTransport.js
CHANGED
|
@@ -26,11 +26,16 @@
|
|
|
26
26
|
* server that does not will reject it with 415). Pass `contentType:
|
|
27
27
|
* JOSE_CONTENT_TYPE` to opt into it where the server supports it.
|
|
28
28
|
*
|
|
29
|
-
* Scope: documents
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
29
|
+
* Scope: documents (`insert` / `update` / `get`) plus blinded-index content
|
|
30
|
+
* query (`find`, the `blinded-index` profile of the reserved Collection
|
|
31
|
+
* `POST .../query` endpoint -- the server's `blinded-index-query` backend
|
|
32
|
+
* feature). `updateIndex` throws: in this profile the `indexed` array rides
|
|
33
|
+
* inside the stored document envelope, so `update()` IS the re-index
|
|
34
|
+
* operation and no separate index endpoint exists. Chunked streams
|
|
35
|
+
* (`storeChunk` / `getChunk`) still require the server's `chunked-streams`
|
|
36
|
+
* affordance (the reserved `/{id}/chunks/{n}` sub-segment), which neither
|
|
37
|
+
* reference backend provides, so they throw.
|
|
38
|
+
* `insert` uses an atomic `If-None-Match: *` create when the backend
|
|
34
39
|
* advertises the optional `conditional-writes` feature; otherwise (and for
|
|
35
40
|
* `update`) writes are advisory -- the EDV `sequence` is not enforced
|
|
36
41
|
* (last-writer-wins on `update`).
|
|
@@ -38,7 +43,7 @@
|
|
|
38
43
|
import { Transport } from '@interop/edv-client';
|
|
39
44
|
import { httpStatus } from '../errors.js';
|
|
40
45
|
import { readJsonData } from '../internal/content.js';
|
|
41
|
-
import { collectionBackend, resourcePath } from '../internal/paths.js';
|
|
46
|
+
import { collectionBackend, collectionQuery, resourcePath } from '../internal/paths.js';
|
|
42
47
|
import { DEFAULT_CONTENT_TYPE, envelopeBytes, JOSE_CONTENT_TYPE } from './constants.js';
|
|
43
48
|
export { JOSE_CONTENT_TYPE };
|
|
44
49
|
/**
|
|
@@ -65,7 +70,7 @@ export class WasTransport extends Transport {
|
|
|
65
70
|
collectionId;
|
|
66
71
|
contentType;
|
|
67
72
|
_was;
|
|
68
|
-
|
|
73
|
+
_backendFeaturesPromise;
|
|
69
74
|
/**
|
|
70
75
|
* @param options {object}
|
|
71
76
|
* @param options.was {WasClient} a WAS client holding the signer
|
|
@@ -116,30 +121,42 @@ export class WasTransport extends Transport {
|
|
|
116
121
|
});
|
|
117
122
|
}
|
|
118
123
|
/**
|
|
119
|
-
*
|
|
120
|
-
*
|
|
121
|
-
* memoized for the transport's
|
|
122
|
-
* (404, 501 on a server without
|
|
123
|
-
*
|
|
124
|
+
* The feature tokens the collection's backend advertises in its "Collection
|
|
125
|
+
* Backend Selected" descriptor (e.g. `conditional-writes`,
|
|
126
|
+
* `blinded-index-query`). Read once and memoized for the transport's
|
|
127
|
+
* lifetime; any failure to read the descriptor (404, 501 on a server without
|
|
128
|
+
* backend support, network error) resolves `[]`, so every affordance gate
|
|
129
|
+
* falls closed.
|
|
124
130
|
*
|
|
125
|
-
* @returns {Promise<
|
|
131
|
+
* @returns {Promise<string[]>}
|
|
126
132
|
*/
|
|
127
|
-
|
|
128
|
-
this.
|
|
133
|
+
_backendFeatures() {
|
|
134
|
+
this._backendFeaturesPromise ??= (async () => {
|
|
129
135
|
try {
|
|
130
136
|
const response = await this._was.request({
|
|
131
137
|
path: collectionBackend(this.spaceId, this.collectionId),
|
|
132
138
|
method: 'GET'
|
|
133
139
|
});
|
|
134
140
|
const descriptor = (await readJsonData(response));
|
|
135
|
-
return
|
|
136
|
-
descriptor.features.
|
|
141
|
+
return Array.isArray(descriptor?.features)
|
|
142
|
+
? descriptor.features.filter((feature) => typeof feature === 'string')
|
|
143
|
+
: [];
|
|
137
144
|
}
|
|
138
145
|
catch {
|
|
139
|
-
return
|
|
146
|
+
return [];
|
|
140
147
|
}
|
|
141
148
|
})();
|
|
142
|
-
return this.
|
|
149
|
+
return this._backendFeaturesPromise;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Whether the collection's backend advertises the optional
|
|
153
|
+
* `conditional-writes` feature, so `insert` can use an atomic
|
|
154
|
+
* `If-None-Match: *` create instead of the advisory existence-check path.
|
|
155
|
+
*
|
|
156
|
+
* @returns {Promise<boolean>}
|
|
157
|
+
*/
|
|
158
|
+
async _conditionalWrites() {
|
|
159
|
+
return (await this._backendFeatures()).includes('conditional-writes');
|
|
143
160
|
}
|
|
144
161
|
/**
|
|
145
162
|
* @inheritdoc
|
|
@@ -150,7 +167,9 @@ export class WasTransport extends Transport {
|
|
|
150
167
|
* `PUT` with `If-None-Match: *`, and the server's 412 maps to
|
|
151
168
|
* `DuplicateError`. Otherwise it degrades to a bodiless existence check
|
|
152
169
|
* (`HEAD`) before the `PUT` -- advisory and non-atomic, but no longer
|
|
153
|
-
* downloading the whole stored envelope just to discard it.
|
|
170
|
+
* downloading the whole stored envelope just to discard it. In either path a
|
|
171
|
+
* 409 (a `unique: true` blinded attribute already held by another document)
|
|
172
|
+
* likewise maps to `DuplicateError`.
|
|
154
173
|
*
|
|
155
174
|
* @param options {object}
|
|
156
175
|
* @param options.encrypted {IEncryptedDocument} the document to insert
|
|
@@ -172,6 +191,14 @@ export class WasTransport extends Transport {
|
|
|
172
191
|
cause: err
|
|
173
192
|
});
|
|
174
193
|
}
|
|
194
|
+
if (httpStatus(err) === 409) {
|
|
195
|
+
throw namedError({
|
|
196
|
+
name: 'DuplicateError',
|
|
197
|
+
message: 'A unique indexed attribute value is already held by another ' +
|
|
198
|
+
'document in this collection.',
|
|
199
|
+
cause: err
|
|
200
|
+
});
|
|
201
|
+
}
|
|
175
202
|
throw err;
|
|
176
203
|
}
|
|
177
204
|
return;
|
|
@@ -182,7 +209,20 @@ export class WasTransport extends Transport {
|
|
|
182
209
|
message: `A document with id "${encrypted.id}" already exists.`
|
|
183
210
|
});
|
|
184
211
|
}
|
|
185
|
-
|
|
212
|
+
try {
|
|
213
|
+
await this._put(encrypted.id, encrypted);
|
|
214
|
+
}
|
|
215
|
+
catch (err) {
|
|
216
|
+
if (httpStatus(err) === 409) {
|
|
217
|
+
throw namedError({
|
|
218
|
+
name: 'DuplicateError',
|
|
219
|
+
message: 'A unique indexed attribute value is already held by another ' +
|
|
220
|
+
'document in this collection.',
|
|
221
|
+
cause: err
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
throw err;
|
|
225
|
+
}
|
|
186
226
|
}
|
|
187
227
|
/**
|
|
188
228
|
* @inheritdoc
|
|
@@ -191,6 +231,14 @@ export class WasTransport extends Transport {
|
|
|
191
231
|
* here -- without server-side conditional writes, a stale write is not
|
|
192
232
|
* rejected (last-writer-wins).
|
|
193
233
|
*
|
|
234
|
+
* Two write-time conflicts are mapped to the names `EdvClientCore` dispatches
|
|
235
|
+
* on. A server enforcing conditional writes rejects a stale/sequence
|
|
236
|
+
* conflict with 412 (precondition-failed), which surfaces as
|
|
237
|
+
* `InvalidStateError` -- the recoverable case, by re-fetching the current
|
|
238
|
+
* document and retrying. A 409 is the EDV unique-attribute collision (a
|
|
239
|
+
* `unique: true` blinded attribute already held by another document), which
|
|
240
|
+
* is NOT recoverable by re-fetch-and-retry; it surfaces as `DuplicateError`.
|
|
241
|
+
*
|
|
194
242
|
* @param options {object}
|
|
195
243
|
* @param options.encrypted {IEncryptedDocument} the document to update
|
|
196
244
|
* @returns {Promise<void>}
|
|
@@ -203,12 +251,19 @@ export class WasTransport extends Transport {
|
|
|
203
251
|
await this._put(encrypted.id, encrypted);
|
|
204
252
|
}
|
|
205
253
|
catch (err) {
|
|
206
|
-
|
|
207
|
-
// with 409; surface it the way `EdvClientCore` expects.
|
|
208
|
-
if (httpStatus(err) === 409) {
|
|
254
|
+
if (httpStatus(err) === 412) {
|
|
209
255
|
throw namedError({
|
|
210
256
|
name: 'InvalidStateError',
|
|
211
|
-
message: '
|
|
257
|
+
message: 'Document update conflict: the stored document changed since it ' +
|
|
258
|
+
'was read. Re-fetch the current document and retry.',
|
|
259
|
+
cause: err
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
if (httpStatus(err) === 409) {
|
|
263
|
+
throw namedError({
|
|
264
|
+
name: 'DuplicateError',
|
|
265
|
+
message: 'A unique indexed attribute value is already held by another ' +
|
|
266
|
+
'document in this collection.',
|
|
212
267
|
cause: err
|
|
213
268
|
});
|
|
214
269
|
}
|
|
@@ -271,19 +326,81 @@ export class WasTransport extends Transport {
|
|
|
271
326
|
/**
|
|
272
327
|
* @inheritdoc
|
|
273
328
|
*
|
|
274
|
-
*
|
|
275
|
-
*
|
|
329
|
+
* Runs a blinded-index content query: a signed `POST` of
|
|
330
|
+
* `{ profile: 'blinded-index', ...query }` to the Collection's reserved
|
|
331
|
+
* `/query` endpoint. Requires the backend's `blinded-index-query` affordance
|
|
332
|
+
* (throws `NotSupportedError` when it is absent). The server evaluates the
|
|
333
|
+
* blinded `equals` / `has` filters against the `indexed` entries of stored
|
|
334
|
+
* documents (opaque string comparison -- it does no crypto) and returns
|
|
335
|
+
* `{ documents, hasMore, cursor? }` (the encrypted envelopes verbatim, in
|
|
336
|
+
* ascending resource-id order, with `cursor` present iff `hasMore`), or a
|
|
337
|
+
* bare `{ count }` when `query.count` is `true`. The body is returned
|
|
338
|
+
* untouched: `EdvClientCore.find` decrypts `documents` and passes
|
|
339
|
+
* `hasMore` / `cursor` through.
|
|
340
|
+
*
|
|
341
|
+
* @param options {object}
|
|
342
|
+
* @param options.query {IEDVQuery} the blinded query (`index` plus one of
|
|
343
|
+
* `equals` / `has`, and optional `count` / `limit` / `cursor`), as built
|
|
344
|
+
* by `EdvClientCore`'s `IndexHelper.buildQuery`
|
|
345
|
+
* @returns {Promise<object>} the server's response body verbatim
|
|
276
346
|
*/
|
|
277
|
-
async find() {
|
|
278
|
-
|
|
347
|
+
async find({ query } = {}) {
|
|
348
|
+
if (!query) {
|
|
349
|
+
throw new TypeError('"query" is required.');
|
|
350
|
+
}
|
|
351
|
+
if (!(await this._backendFeatures()).includes('blinded-index-query')) {
|
|
352
|
+
throw namedError({
|
|
353
|
+
name: 'NotSupportedError',
|
|
354
|
+
message: "Blinded-index query is not supported: the collection's backend " +
|
|
355
|
+
'does not advertise the "blinded-index-query" affordance.'
|
|
356
|
+
});
|
|
357
|
+
}
|
|
358
|
+
// `returnDocuments` is a first-class `IEDVQuery` field, but the WAS profile
|
|
359
|
+
// has no ids-only mode, so it is dropped (whatever its value) and full
|
|
360
|
+
// documents come back -- the best-effort degradation `EdvClientCore.find`
|
|
361
|
+
// documents for this option.
|
|
362
|
+
const { returnDocuments: _returnDocuments, ...blindedQuery } = query;
|
|
363
|
+
let response;
|
|
364
|
+
try {
|
|
365
|
+
response = await this._was.request({
|
|
366
|
+
path: collectionQuery(this.spaceId, this.collectionId),
|
|
367
|
+
method: 'POST',
|
|
368
|
+
json: { profile: 'blinded-index', ...blindedQuery }
|
|
369
|
+
});
|
|
370
|
+
}
|
|
371
|
+
catch (err) {
|
|
372
|
+
if (httpStatus(err) === 404) {
|
|
373
|
+
throw namedError({
|
|
374
|
+
name: 'NotFoundError',
|
|
375
|
+
message: 'Collection not found.',
|
|
376
|
+
cause: err
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
throw err;
|
|
380
|
+
}
|
|
381
|
+
const result = await readJsonData(response);
|
|
382
|
+
if (result === null || typeof result !== 'object') {
|
|
383
|
+
throw new Error('Malformed blinded-index query response.');
|
|
384
|
+
}
|
|
385
|
+
return result;
|
|
279
386
|
}
|
|
280
387
|
/**
|
|
281
388
|
* @inheritdoc
|
|
282
389
|
*
|
|
283
|
-
*
|
|
390
|
+
* Not supported, deliberately: in the EDV-over-WAS profile, index entries
|
|
391
|
+
* are not a separate server-side resource -- the `indexed` array rides
|
|
392
|
+
* inside the stored document envelope, and every `insert` / `update`
|
|
393
|
+
* already carries it. Re-indexing a document is therefore an ordinary
|
|
394
|
+
* `update()` of the full envelope; there is no `/{id}/index` endpoint to
|
|
395
|
+
* bind this to.
|
|
284
396
|
*/
|
|
285
397
|
async updateIndex() {
|
|
286
|
-
|
|
398
|
+
throw namedError({
|
|
399
|
+
name: 'NotSupportedError',
|
|
400
|
+
message: '"updateIndex" is not supported by the EDV-over-WAS profile: index ' +
|
|
401
|
+
'entries ride inside the stored document envelope, so re-index a ' +
|
|
402
|
+
'document with an ordinary "update()" of the full document.'
|
|
403
|
+
});
|
|
287
404
|
}
|
|
288
405
|
/**
|
|
289
406
|
* @inheritdoc
|
|
@@ -302,8 +419,10 @@ export class WasTransport extends Transport {
|
|
|
302
419
|
return this._unsupported('getChunk (chunked streams)');
|
|
303
420
|
}
|
|
304
421
|
/**
|
|
305
|
-
* Throws a uniform "not supported in this profile" error for
|
|
306
|
-
*
|
|
422
|
+
* Throws a uniform "not supported in this profile" error for the chunked-
|
|
423
|
+
* stream operations, which depend on a server-side affordance (the reserved
|
|
424
|
+
* `/{id}/chunks/{n}` sub-segment, the `chunked-streams` backend feature)
|
|
425
|
+
* that neither reference backend provides yet.
|
|
307
426
|
*
|
|
308
427
|
* @param operation {string}
|
|
309
428
|
* @returns {never}
|
|
@@ -311,8 +430,8 @@ export class WasTransport extends Transport {
|
|
|
311
430
|
_unsupported(operation) {
|
|
312
431
|
throw namedError({
|
|
313
432
|
name: 'NotSupportedError',
|
|
314
|
-
message: `"${operation}" is not supported by the
|
|
315
|
-
'
|
|
433
|
+
message: `"${operation}" is not supported by the EDV-over-WAS profile ` +
|
|
434
|
+
'(requires the server\'s "chunked-streams" affordance).'
|
|
316
435
|
});
|
|
317
436
|
}
|
|
318
437
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WasTransport.js","sourceRoot":"","sources":["../../src/edv/WasTransport.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH
|
|
1
|
+
{"version":3,"file":"WasTransport.js","sourceRoot":"","sources":["../../src/edv/WasTransport.ts"],"names":[],"mappings":"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"}
|
package/dist/internal/grant.d.ts
CHANGED
|
@@ -6,12 +6,22 @@
|
|
|
6
6
|
* grant sugar. Maps `GrantOptions` onto `zcapClient.delegate(...)`, normalizing
|
|
7
7
|
* action verbs to uppercase so a lowercase grant (`'get'`) still validates on
|
|
8
8
|
* the server (which matches actions case-sensitively against `'GET'`).
|
|
9
|
+
*
|
|
10
|
+
* An unparented grant whose target lies in the server's Space tree is delegated
|
|
11
|
+
* from that **Space's** root capability, with the target carried as an
|
|
12
|
+
* attenuated `invocationTarget`, rather than from the target's own root
|
|
13
|
+
* capability. Both forms grant the same access (the server verifies WAS routes
|
|
14
|
+
* with target attenuation allowed), but only a Space-rooted chain can be revoked
|
|
15
|
+
* -- revocation is Space-scoped, and the endpoint requires the chain to root
|
|
16
|
+
* exactly in the Space (see `revoke.ts`).
|
|
9
17
|
*/
|
|
10
18
|
import type { ClientContext } from './request.js';
|
|
11
19
|
import type { GrantOptions, IDelegatedZcap, IZcap } from '../types.js';
|
|
12
20
|
/**
|
|
13
21
|
* Delegates a capability per `GrantOptions`, returning the signed zcap to hand
|
|
14
|
-
* off out-of-band.
|
|
22
|
+
* off out-of-band. An explicit `capability` (re-delegation of a parent zcap)
|
|
23
|
+
* always wins; otherwise a Space-tree target is rooted at its Space, so the
|
|
24
|
+
* resulting capability is revocable via `space.revoke()` / `was.revoke()`.
|
|
15
25
|
*
|
|
16
26
|
* @param context {ClientContext}
|
|
17
27
|
* @param options {GrantOptions}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grant.d.ts","sourceRoot":"","sources":["../../src/internal/grant.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH
|
|
1
|
+
{"version":3,"file":"grant.d.ts","sourceRoot":"","sources":["../../src/internal/grant.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAEjD,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAgCtE;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,aAAa,EACtB,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,YAAY,GACzD,OAAO,CAAC,cAAc,CAAC,CAazB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,aAAa,EACtB,EACE,IAAI,EACJ,OAAO,EACP,UAAU,EACX,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,YAAY,CAAC;IAAC,UAAU,CAAC,EAAE,KAAK,CAAA;CAAE,GAC7D,OAAO,CAAC,cAAc,CAAC,CAMzB"}
|
package/dist/internal/grant.js
CHANGED
|
@@ -1,19 +1,48 @@
|
|
|
1
|
-
import { toUrl } from './paths.js';
|
|
1
|
+
import { parseSpaceTarget, spacePath, toUrl } from './paths.js';
|
|
2
|
+
/**
|
|
3
|
+
* The root capability id (`urn:zcap:root:<encoded target>`) of the Space
|
|
4
|
+
* containing `target`, or `undefined` when `target` is not a URL beneath this
|
|
5
|
+
* server's `/space` tree (e.g. a `/kms` target, or another origin) -- in which
|
|
6
|
+
* case the caller lets ezcap default to the target's own root capability.
|
|
7
|
+
*
|
|
8
|
+
* The id is returned as a string, which `zcapClient.delegate(...)` accepts for a
|
|
9
|
+
* root parent capability. (Its sibling `request(...)` does not, for a non-`https:`
|
|
10
|
+
* target -- hence the object form in `revoke.ts`.)
|
|
11
|
+
*
|
|
12
|
+
* @param options {object}
|
|
13
|
+
* @param options.serverUrl {string} the client's server base URL
|
|
14
|
+
* @param options.target {string} the absolute grant target URL
|
|
15
|
+
* @returns {string | undefined}
|
|
16
|
+
*/
|
|
17
|
+
function spaceRootCapabilityId({ serverUrl, target }) {
|
|
18
|
+
const parsed = parseSpaceTarget({ serverUrl, target });
|
|
19
|
+
if (parsed === null) {
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
const spaceUrl = toUrl({ serverUrl, path: spacePath(parsed.spaceId) });
|
|
23
|
+
return `urn:zcap:root:${encodeURIComponent(spaceUrl)}`;
|
|
24
|
+
}
|
|
2
25
|
/**
|
|
3
26
|
* Delegates a capability per `GrantOptions`, returning the signed zcap to hand
|
|
4
|
-
* off out-of-band.
|
|
27
|
+
* off out-of-band. An explicit `capability` (re-delegation of a parent zcap)
|
|
28
|
+
* always wins; otherwise a Space-tree target is rooted at its Space, so the
|
|
29
|
+
* resulting capability is revocable via `space.revoke()` / `was.revoke()`.
|
|
5
30
|
*
|
|
6
31
|
* @param context {ClientContext}
|
|
7
32
|
* @param options {GrantOptions}
|
|
8
33
|
* @returns {Promise<IDelegatedZcap>}
|
|
9
34
|
*/
|
|
10
35
|
export async function delegateGrant(context, { to, actions, expires, target, capability }) {
|
|
36
|
+
const parent = capability ??
|
|
37
|
+
(target === undefined
|
|
38
|
+
? undefined
|
|
39
|
+
: spaceRootCapabilityId({ serverUrl: context.serverUrl, target }));
|
|
11
40
|
return context.zcapClient.delegate({
|
|
12
41
|
controller: to,
|
|
13
42
|
invocationTarget: target,
|
|
14
43
|
allowedActions: actions.map(action => action.toUpperCase()),
|
|
15
44
|
expires,
|
|
16
|
-
capability
|
|
45
|
+
capability: parent
|
|
17
46
|
});
|
|
18
47
|
}
|
|
19
48
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grant.js","sourceRoot":"","sources":["../../src/internal/grant.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"grant.js","sourceRoot":"","sources":["../../src/internal/grant.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAG/D;;;;;;;;;;;;;;GAcG;AACH,SAAS,qBAAqB,CAAC,EAC7B,SAAS,EACT,MAAM,EAIP;IACC,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAA;IACtD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IACtE,OAAO,iBAAiB,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAA;AACxD,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAsB,EACtB,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAgB;IAE1D,MAAM,MAAM,GACV,UAAU;QACV,CAAC,MAAM,KAAK,SAAS;YACnB,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,qBAAqB,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;IACtE,OAAO,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC;QACjC,UAAU,EAAE,EAAE;QACd,gBAAgB,EAAE,MAAM;QACxB,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QAC3D,OAAO;QACP,UAAU,EAAE,MAAM;KACnB,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAsB,EACtB,EACE,IAAI,EACJ,OAAO,EACP,UAAU,EACkD;IAE9D,OAAO,aAAa,CAAC,OAAO,EAAE;QAC5B,GAAG,OAAO;QACV,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC;QACvE,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,UAAU;KAC7C,CAAC,CAAA;AACJ,CAAC"}
|
package/dist/internal/paths.d.ts
CHANGED
|
@@ -44,6 +44,15 @@ export declare function spacePolicy(spaceId: string): string;
|
|
|
44
44
|
* `/space/:spaceId/linkset` -- the space-level linkset (policy discovery).
|
|
45
45
|
*/
|
|
46
46
|
export declare function spaceLinkset(spaceId: string): string;
|
|
47
|
+
/**
|
|
48
|
+
* `/space/:spaceId/zcaps/revocations/:capabilityId` -- submit a revocation of a
|
|
49
|
+
* Space-rooted capability. The capability's `id` (typically a `urn:uuid:`) is
|
|
50
|
+
* percent-encoded into the single final segment.
|
|
51
|
+
*
|
|
52
|
+
* `zcaps` is not a reserved path segment: the route sits four segments deep,
|
|
53
|
+
* deeper than any Collection or Resource route, so it shadows nothing.
|
|
54
|
+
*/
|
|
55
|
+
export declare function spaceRevocation(spaceId: string, capabilityId: string): string;
|
|
47
56
|
/**
|
|
48
57
|
* `/space/:spaceId/:collectionId` -- get / update / delete a collection
|
|
49
58
|
* (no trailing slash).
|
|
@@ -145,6 +154,25 @@ export type ParsedSpacePath = {
|
|
|
145
154
|
spaceId: string;
|
|
146
155
|
segments: string[];
|
|
147
156
|
};
|
|
157
|
+
/**
|
|
158
|
+
* Classifies an absolute `target` URL that is expected to live on this server,
|
|
159
|
+
* relative to `serverUrl`'s base path -- so a WAS mounted under a sub-path (e.g.
|
|
160
|
+
* `https://host/was/`) resolves just as a bare-origin deployment does, which
|
|
161
|
+
* `parseSpacePath` alone cannot do (it would see a leading `was` segment).
|
|
162
|
+
*
|
|
163
|
+
* Returns `null` when `target` is not beneath `serverUrl` (another origin, or
|
|
164
|
+
* another base path) or addresses something outside the `/space` tree (e.g.
|
|
165
|
+
* `/kms`). The caller chooses whether that is an error.
|
|
166
|
+
*
|
|
167
|
+
* @param options {object}
|
|
168
|
+
* @param options.serverUrl {string} the client's server base URL
|
|
169
|
+
* @param options.target {string} an absolute URL on that server
|
|
170
|
+
* @returns {ParsedSpacePath | null}
|
|
171
|
+
*/
|
|
172
|
+
export declare function parseSpaceTarget({ serverUrl, target }: {
|
|
173
|
+
serverUrl: string;
|
|
174
|
+
target: string;
|
|
175
|
+
}): ParsedSpacePath | null;
|
|
148
176
|
/**
|
|
149
177
|
* Parses a server pathname back into the containment depth it addresses -- the
|
|
150
178
|
* inverse of the builders above, kept next to them so the grammar is owned in
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/internal/paths.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/internal/paths.ts"],"names":[],"mappings":"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"}
|
package/dist/internal/paths.js
CHANGED
|
@@ -107,6 +107,17 @@ export function spacePolicy(spaceId) {
|
|
|
107
107
|
export function spaceLinkset(spaceId) {
|
|
108
108
|
return `/space/${encode(spaceId)}/linkset`;
|
|
109
109
|
}
|
|
110
|
+
/**
|
|
111
|
+
* `/space/:spaceId/zcaps/revocations/:capabilityId` -- submit a revocation of a
|
|
112
|
+
* Space-rooted capability. The capability's `id` (typically a `urn:uuid:`) is
|
|
113
|
+
* percent-encoded into the single final segment.
|
|
114
|
+
*
|
|
115
|
+
* `zcaps` is not a reserved path segment: the route sits four segments deep,
|
|
116
|
+
* deeper than any Collection or Resource route, so it shadows nothing.
|
|
117
|
+
*/
|
|
118
|
+
export function spaceRevocation(spaceId, capabilityId) {
|
|
119
|
+
return `/space/${encode(spaceId)}/zcaps/revocations/${encode(capabilityId)}`;
|
|
120
|
+
}
|
|
110
121
|
/**
|
|
111
122
|
* `/space/:spaceId/:collectionId` -- get / update / delete a collection
|
|
112
123
|
* (no trailing slash).
|
|
@@ -210,6 +221,37 @@ export function toUrl({ serverUrl, path }) {
|
|
|
210
221
|
export function collectionItemsUrl(collectionUrl) {
|
|
211
222
|
return collectionUrl.endsWith('/') ? collectionUrl : `${collectionUrl}/`;
|
|
212
223
|
}
|
|
224
|
+
/**
|
|
225
|
+
* Classifies an absolute `target` URL that is expected to live on this server,
|
|
226
|
+
* relative to `serverUrl`'s base path -- so a WAS mounted under a sub-path (e.g.
|
|
227
|
+
* `https://host/was/`) resolves just as a bare-origin deployment does, which
|
|
228
|
+
* `parseSpacePath` alone cannot do (it would see a leading `was` segment).
|
|
229
|
+
*
|
|
230
|
+
* Returns `null` when `target` is not beneath `serverUrl` (another origin, or
|
|
231
|
+
* another base path) or addresses something outside the `/space` tree (e.g.
|
|
232
|
+
* `/kms`). The caller chooses whether that is an error.
|
|
233
|
+
*
|
|
234
|
+
* @param options {object}
|
|
235
|
+
* @param options.serverUrl {string} the client's server base URL
|
|
236
|
+
* @param options.target {string} an absolute URL on that server
|
|
237
|
+
* @returns {ParsedSpacePath | null}
|
|
238
|
+
*/
|
|
239
|
+
export function parseSpaceTarget({ serverUrl, target }) {
|
|
240
|
+
const base = serverUrl.endsWith('/') ? serverUrl : `${serverUrl}/`;
|
|
241
|
+
if (!target.startsWith(base)) {
|
|
242
|
+
return null;
|
|
243
|
+
}
|
|
244
|
+
let pathname;
|
|
245
|
+
try {
|
|
246
|
+
;
|
|
247
|
+
({ pathname } = new URL(target));
|
|
248
|
+
}
|
|
249
|
+
catch {
|
|
250
|
+
return null;
|
|
251
|
+
}
|
|
252
|
+
const basePathname = new URL(base).pathname;
|
|
253
|
+
return parseSpacePath(`/${pathname.slice(basePathname.length)}`);
|
|
254
|
+
}
|
|
213
255
|
/**
|
|
214
256
|
* Parses a server pathname back into the containment depth it addresses -- the
|
|
215
257
|
* inverse of the builders above, kept next to them so the grammar is owned in
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/internal/paths.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/internal/paths.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { ClientContext } from './request.js';
|
|
2
|
+
import type { IDelegatedZcap, IZcap } from '../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Derives the id of the Space a capability is rooted in, from its
|
|
5
|
+
* `invocationTarget`. A Space-rooted capability's target is the Space URL or a
|
|
6
|
+
* path beneath it (the server enforces this when it verifies the chain), so
|
|
7
|
+
* every depth `parseSpaceTarget` recognizes -- Space, Collection, Resource, or a
|
|
8
|
+
* reserved sub-resource such as `/space/s/c/r/meta` -- carries the Space id.
|
|
9
|
+
*
|
|
10
|
+
* @param context {ClientContext}
|
|
11
|
+
* @param zcap {IZcap} the capability to locate
|
|
12
|
+
* @returns {string}
|
|
13
|
+
*/
|
|
14
|
+
export declare function spaceIdOf(context: ClientContext, zcap: IZcap): string;
|
|
15
|
+
/**
|
|
16
|
+
* Revokes a Space-rooted delegated capability: `POST`s it to
|
|
17
|
+
* `/space/:spaceId/zcaps/revocations/:capabilityId`, invoking that URL's own
|
|
18
|
+
* root capability. Resolves on the server's 204.
|
|
19
|
+
*
|
|
20
|
+
* The `action` is deliberately left unset: `send()` defaults it to the HTTP
|
|
21
|
+
* method, and this route expects `POST` (WAS capabilities are scoped by HTTP
|
|
22
|
+
* method, unlike the webkms `/kms` revocation route's `write`).
|
|
23
|
+
*
|
|
24
|
+
* @param context {ClientContext}
|
|
25
|
+
* @param options {object}
|
|
26
|
+
* @param options.spaceId {string} the Space the capability is rooted in
|
|
27
|
+
* @param options.zcap {IDelegatedZcap} the capability to revoke
|
|
28
|
+
* @returns {Promise<void>}
|
|
29
|
+
*/
|
|
30
|
+
export declare function submitRevocation(context: ClientContext, { spaceId, zcap }: {
|
|
31
|
+
spaceId: string;
|
|
32
|
+
zcap: IDelegatedZcap;
|
|
33
|
+
}): Promise<void>;
|
|
34
|
+
//# sourceMappingURL=revoke.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"revoke.d.ts","sourceRoot":"","sources":["../../src/internal/revoke.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAGjD,OAAO,KAAK,EAAE,cAAc,EAAa,KAAK,EAAE,MAAM,aAAa,CAAA;AAsCnE;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,GAAG,MAAM,CAarE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,aAAa,EACtB,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,cAAc,CAAA;CAAE,GAC3D,OAAO,CAAC,IAAI,CAAC,CAmBf"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) 2026 Interop Alliance. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* The revocation primitive shared by `was.revoke()` and `space.revoke()` -- the
|
|
6
|
+
* inverse of `grant.ts`. Submits a delegated capability to its Space's
|
|
7
|
+
* revocation endpoint (`POST /space/:spaceId/zcaps/revocations/:capabilityId`),
|
|
8
|
+
* where the URL names the capability's `id` and the body is that capability
|
|
9
|
+
* verbatim, proof and capability chain included.
|
|
10
|
+
*
|
|
11
|
+
* The submission invokes the revocation URL's **own** root capability, whose
|
|
12
|
+
* controller the server synthesizes as every controller in the to-be-revoked
|
|
13
|
+
* capability's delegation chain. That chain is dereferenced root-first, so it
|
|
14
|
+
* includes the root capability -- whose controller is the Space controller.
|
|
15
|
+
* A single invocation therefore authorizes both legitimate callers of the
|
|
16
|
+
* server's dual-root rule ("the delegator revokes" and "a delegee revokes its
|
|
17
|
+
* own capability"), with no need to know which one this client is.
|
|
18
|
+
*/
|
|
19
|
+
import { spaceRevocation, toUrl, parseSpaceTarget } from './paths.js';
|
|
20
|
+
import { send } from './request.js';
|
|
21
|
+
import { ValidationError } from '../errors.js';
|
|
22
|
+
/**
|
|
23
|
+
* The zcap JSON-LD context URL, the sole `@context` of a root capability.
|
|
24
|
+
*/
|
|
25
|
+
const ZCAP_CONTEXT_URL = 'https://w3id.org/zcap/v1';
|
|
26
|
+
/**
|
|
27
|
+
* Builds the root capability for `target` in **object** form.
|
|
28
|
+
*
|
|
29
|
+
* The object form is load-bearing: `@interop/ezcap` accepts a *string* root
|
|
30
|
+
* capability id only when its invocation target is `https:`, which would break
|
|
31
|
+
* against an `http://localhost` server. Both forms reduce to the same
|
|
32
|
+
* `zcap id="..."` invocation header.
|
|
33
|
+
*
|
|
34
|
+
* `controller` is client-side only -- the server re-derives the real controller
|
|
35
|
+
* when it synthesizes the root capability -- so the caller's own DID is fine.
|
|
36
|
+
*
|
|
37
|
+
* @param options {object}
|
|
38
|
+
* @param options.target {string} the absolute invocation target URL
|
|
39
|
+
* @param options.controller {string} the invoking client's DID
|
|
40
|
+
* @returns {IRootZcap}
|
|
41
|
+
*/
|
|
42
|
+
function rootCapability({ target, controller }) {
|
|
43
|
+
return {
|
|
44
|
+
'@context': ZCAP_CONTEXT_URL,
|
|
45
|
+
id: `urn:zcap:root:${encodeURIComponent(target)}`,
|
|
46
|
+
invocationTarget: target,
|
|
47
|
+
controller
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Derives the id of the Space a capability is rooted in, from its
|
|
52
|
+
* `invocationTarget`. A Space-rooted capability's target is the Space URL or a
|
|
53
|
+
* path beneath it (the server enforces this when it verifies the chain), so
|
|
54
|
+
* every depth `parseSpaceTarget` recognizes -- Space, Collection, Resource, or a
|
|
55
|
+
* reserved sub-resource such as `/space/s/c/r/meta` -- carries the Space id.
|
|
56
|
+
*
|
|
57
|
+
* @param context {ClientContext}
|
|
58
|
+
* @param zcap {IZcap} the capability to locate
|
|
59
|
+
* @returns {string}
|
|
60
|
+
*/
|
|
61
|
+
export function spaceIdOf(context, zcap) {
|
|
62
|
+
const parsed = parseSpaceTarget({
|
|
63
|
+
serverUrl: context.serverUrl,
|
|
64
|
+
target: zcap.invocationTarget
|
|
65
|
+
});
|
|
66
|
+
if (parsed === null) {
|
|
67
|
+
throw new ValidationError(`Cannot derive a Space from invocationTarget ` +
|
|
68
|
+
`"${zcap.invocationTarget}": it does not address a Space on ` +
|
|
69
|
+
`"${context.serverUrl}". Revocation is scoped to one Space.`);
|
|
70
|
+
}
|
|
71
|
+
return parsed.spaceId;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Revokes a Space-rooted delegated capability: `POST`s it to
|
|
75
|
+
* `/space/:spaceId/zcaps/revocations/:capabilityId`, invoking that URL's own
|
|
76
|
+
* root capability. Resolves on the server's 204.
|
|
77
|
+
*
|
|
78
|
+
* The `action` is deliberately left unset: `send()` defaults it to the HTTP
|
|
79
|
+
* method, and this route expects `POST` (WAS capabilities are scoped by HTTP
|
|
80
|
+
* method, unlike the webkms `/kms` revocation route's `write`).
|
|
81
|
+
*
|
|
82
|
+
* @param context {ClientContext}
|
|
83
|
+
* @param options {object}
|
|
84
|
+
* @param options.spaceId {string} the Space the capability is rooted in
|
|
85
|
+
* @param options.zcap {IDelegatedZcap} the capability to revoke
|
|
86
|
+
* @returns {Promise<void>}
|
|
87
|
+
*/
|
|
88
|
+
export async function submitRevocation(context, { spaceId, zcap }) {
|
|
89
|
+
if (!('parentCapability' in zcap)) {
|
|
90
|
+
throw new ValidationError('A root capability cannot be revoked; only a delegated capability can.');
|
|
91
|
+
}
|
|
92
|
+
const url = toUrl({
|
|
93
|
+
serverUrl: context.serverUrl,
|
|
94
|
+
path: spaceRevocation(spaceId, zcap.id)
|
|
95
|
+
});
|
|
96
|
+
await send(context, {
|
|
97
|
+
url,
|
|
98
|
+
method: 'POST',
|
|
99
|
+
capability: rootCapability({
|
|
100
|
+
target: url,
|
|
101
|
+
controller: context.controllerDid
|
|
102
|
+
}),
|
|
103
|
+
json: zcap
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=revoke.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"revoke.js","sourceRoot":"","sources":["../../src/internal/revoke.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAErE,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAG9C;;GAEG;AACH,MAAM,gBAAgB,GAAG,0BAA0B,CAAA;AAEnD;;;;;;;;;;;;;;;GAeG;AACH,SAAS,cAAc,CAAC,EACtB,MAAM,EACN,UAAU,EAIX;IACC,OAAO;QACL,UAAU,EAAE,gBAAgB;QAC5B,EAAE,EAAE,iBAAiB,kBAAkB,CAAC,MAAM,CAAC,EAAE;QACjD,gBAAgB,EAAE,MAAM;QACxB,UAAU;KACX,CAAA;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,SAAS,CAAC,OAAsB,EAAE,IAAW;IAC3D,MAAM,MAAM,GAAG,gBAAgB,CAAC;QAC9B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,MAAM,EAAE,IAAI,CAAC,gBAAgB;KAC9B,CAAC,CAAA;IACF,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,MAAM,IAAI,eAAe,CACvB,8CAA8C;YAC5C,IAAI,IAAI,CAAC,gBAAgB,oCAAoC;YAC7D,IAAI,OAAO,CAAC,SAAS,uCAAuC,CAC/D,CAAA;IACH,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,CAAA;AACvB,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAsB,EACtB,EAAE,OAAO,EAAE,IAAI,EAA6C;IAE5D,IAAI,CAAC,CAAC,kBAAkB,IAAI,IAAI,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,eAAe,CACvB,uEAAuE,CACxE,CAAA;IACH,CAAC;IACD,MAAM,GAAG,GAAG,KAAK,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,IAAI,EAAE,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;KACxC,CAAC,CAAA;IACF,MAAM,IAAI,CAAC,OAAO,EAAE;QAClB,GAAG;QACH,MAAM,EAAE,MAAM;QACd,UAAU,EAAE,cAAc,CAAC;YACzB,MAAM,EAAE,GAAG;YACX,UAAU,EAAE,OAAO,CAAC,aAAa;SAClC,CAAC;QACF,IAAI,EAAE,IAAI;KACX,CAAC,CAAA;AACJ,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -12,10 +12,10 @@
|
|
|
12
12
|
* the handle/delegation options, and the low-level `request()` input. ZCap and
|
|
13
13
|
* signer types are re-used from `@interop/data-integrity-core`.
|
|
14
14
|
*/
|
|
15
|
-
import type { IZcap, IDelegatedZcap } from '@interop/data-integrity-core/zcap';
|
|
15
|
+
import type { IZcap, IDelegatedZcap, IRootZcap } from '@interop/data-integrity-core/zcap';
|
|
16
16
|
import type { ISigner } from '@interop/data-integrity-core';
|
|
17
17
|
import type { ActionInput } from '@interop/storage-core';
|
|
18
|
-
export type { IZcap, IDelegatedZcap, ISigner };
|
|
18
|
+
export type { IZcap, IDelegatedZcap, IRootZcap, ISigner };
|
|
19
19
|
/**
|
|
20
20
|
* Re-export the shared WAS wire model from `@interop/storage-core`. The
|
|
21
21
|
* resources-in-a-collection listing is `CollectionResourcesList` (formerly
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;GAUG;AACH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EACV,KAAK,EACL,cAAc,EACd,SAAS,EACV,MAAM,mCAAmC,CAAA;AAC1C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AAE3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAExD,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,OAAO,EAAE,CAAA;AAEzD;;;;;GAKG;AACH,YAAY,EACV,MAAM,EACN,WAAW,EACX,gBAAgB,EAChB,qBAAqB,EACrB,oBAAoB,EACpB,cAAc,EACd,OAAO,EACP,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,uBAAuB,EACvB,gBAAgB,EAChB,sBAAsB,EACtB,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACvB,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,gBAAgB,EACjB,MAAM,uBAAuB,CAAA;AAE9B;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAA;AAC5D,MAAM,WAAW,UAAU;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CACpB;AACD,MAAM,MAAM,SAAS,GAAG,IAAI,EAAE,CAAA;AAC9B,MAAM,MAAM,IAAI,GAAG,aAAa,GAAG,UAAU,GAAG,SAAS,CAAA;AAEzD;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,SAAS,GAAG,IAAI,GAAG,UAAU,CAAA;AAErE;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,kBAAkB,GAC5B;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,WAAW,CAAA;AAElD;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,UAAU,CAAC,EAAE,KAAK,CAAA;IAClB;;;OAGG;IACH,UAAU,CAAC,EAAE,kBAAkB,CAAA;CAChC;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,WAAW,EAAE,CAAA;IACtB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,KAAK,CAAA;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,IAAI,GAAG,UAAU,CAAA;IACxB,UAAU,CAAC,EAAE,KAAK,CAAA;CACnB"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@interop/was-client",
|
|
3
3
|
"description": "A developer-friendly client for Wallet Attached Storage (WAS) servers.",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.14.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"build": "pnpm run clear && tsc",
|
|
@@ -42,9 +42,9 @@
|
|
|
42
42
|
"types": "dist/index.d.ts",
|
|
43
43
|
"sideEffects": false,
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@interop/data-integrity-core": "^8.
|
|
45
|
+
"@interop/data-integrity-core": "^8.2.0",
|
|
46
46
|
"@interop/ed25519-signature": "^7.1.3",
|
|
47
|
-
"@interop/edv-client": "^17.
|
|
47
|
+
"@interop/edv-client": "^17.6.0",
|
|
48
48
|
"@interop/ezcap": "^7.3.2",
|
|
49
49
|
"@interop/http-client": "^1.0.4",
|
|
50
50
|
"@interop/storage-core": "^0.3.3"
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
"devDependencies": {
|
|
53
53
|
"@eslint/js": "^10.0.1",
|
|
54
54
|
"@interop/ed25519-verification-key": "^8.0.2",
|
|
55
|
-
"@interop/x25519-key-agreement-key": "^5.1.
|
|
55
|
+
"@interop/x25519-key-agreement-key": "^5.1.2",
|
|
56
56
|
"@playwright/test": "^1.60.0",
|
|
57
57
|
"@types/node": "^25.9.1",
|
|
58
58
|
"@vitest/coverage-v8": "^4.1.7",
|