@interop/was-client 0.15.0 → 0.16.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 (83) hide show
  1. package/dist/Collection.d.ts +17 -26
  2. package/dist/Collection.d.ts.map +1 -1
  3. package/dist/Collection.js +60 -59
  4. package/dist/Collection.js.map +1 -1
  5. package/dist/Resource.d.ts +27 -3
  6. package/dist/Resource.d.ts.map +1 -1
  7. package/dist/Resource.js +60 -22
  8. package/dist/Resource.js.map +1 -1
  9. package/dist/Space.d.ts.map +1 -1
  10. package/dist/Space.js +19 -11
  11. package/dist/Space.js.map +1 -1
  12. package/dist/WasClient.d.ts.map +1 -1
  13. package/dist/WasClient.js +4 -13
  14. package/dist/WasClient.js.map +1 -1
  15. package/dist/edv/EdvCodec.d.ts +11 -2
  16. package/dist/edv/EdvCodec.d.ts.map +1 -1
  17. package/dist/edv/EdvCodec.js +79 -67
  18. package/dist/edv/EdvCodec.js.map +1 -1
  19. package/dist/edv/WasTransport.d.ts +23 -44
  20. package/dist/edv/WasTransport.d.ts.map +1 -1
  21. package/dist/edv/WasTransport.js +109 -155
  22. package/dist/edv/WasTransport.js.map +1 -1
  23. package/dist/edv/constants.d.ts +0 -14
  24. package/dist/edv/constants.d.ts.map +1 -1
  25. package/dist/edv/constants.js +4 -8
  26. package/dist/edv/constants.js.map +1 -1
  27. package/dist/edv/epochCrypto.d.ts +1 -1
  28. package/dist/edv/epochCrypto.d.ts.map +1 -1
  29. package/dist/edv/epochCrypto.js +33 -4
  30. package/dist/edv/epochCrypto.js.map +1 -1
  31. package/dist/edv/epochKeys.js +11 -1
  32. package/dist/edv/epochKeys.js.map +1 -1
  33. package/dist/edv/recipients.d.ts +5 -1
  34. package/dist/edv/recipients.d.ts.map +1 -1
  35. package/dist/edv/recipients.js +38 -16
  36. package/dist/edv/recipients.js.map +1 -1
  37. package/dist/index.d.ts +1 -1
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/internal/codec.d.ts +19 -0
  40. package/dist/internal/codec.d.ts.map +1 -1
  41. package/dist/internal/codec.js +26 -8
  42. package/dist/internal/codec.js.map +1 -1
  43. package/dist/internal/conditional.d.ts +11 -0
  44. package/dist/internal/conditional.d.ts.map +1 -1
  45. package/dist/internal/conditional.js +12 -0
  46. package/dist/internal/conditional.js.map +1 -1
  47. package/dist/internal/content.d.ts +7 -0
  48. package/dist/internal/content.d.ts.map +1 -1
  49. package/dist/internal/content.js +5 -3
  50. package/dist/internal/content.js.map +1 -1
  51. package/dist/internal/describe.d.ts +49 -1
  52. package/dist/internal/describe.d.ts.map +1 -1
  53. package/dist/internal/describe.js +47 -6
  54. package/dist/internal/describe.js.map +1 -1
  55. package/dist/internal/features.d.ts +73 -0
  56. package/dist/internal/features.d.ts.map +1 -0
  57. package/dist/internal/features.js +129 -0
  58. package/dist/internal/features.js.map +1 -0
  59. package/dist/internal/grant.d.ts.map +1 -1
  60. package/dist/internal/grant.js +2 -1
  61. package/dist/internal/grant.js.map +1 -1
  62. package/dist/internal/pagination.d.ts +30 -1
  63. package/dist/internal/pagination.d.ts.map +1 -1
  64. package/dist/internal/pagination.js +44 -1
  65. package/dist/internal/pagination.js.map +1 -1
  66. package/dist/internal/paths.d.ts.map +1 -1
  67. package/dist/internal/paths.js +38 -10
  68. package/dist/internal/paths.js.map +1 -1
  69. package/dist/internal/policy.d.ts +28 -0
  70. package/dist/internal/policy.d.ts.map +1 -1
  71. package/dist/internal/policy.js +31 -0
  72. package/dist/internal/policy.js.map +1 -1
  73. package/dist/internal/revoke.d.ts +11 -0
  74. package/dist/internal/revoke.d.ts.map +1 -1
  75. package/dist/internal/revoke.js +14 -1
  76. package/dist/internal/revoke.js.map +1 -1
  77. package/dist/internal/write.d.ts +10 -1
  78. package/dist/internal/write.d.ts.map +1 -1
  79. package/dist/internal/write.js +29 -4
  80. package/dist/internal/write.js.map +1 -1
  81. package/dist/types.d.ts +12 -0
  82. package/dist/types.d.ts.map +1 -1
  83. package/package.json +3 -3
@@ -18,6 +18,7 @@
18
18
  */
19
19
  import { RESERVED_COLLECTION_IDS, RESERVED_RESOURCE_IDS } from '@interop/storage-core';
20
20
  import { ValidationError } from '../errors.js';
21
+ import { assertNotReserved } from './reserved.js';
21
22
  /**
22
23
  * Rejects an id that would escape its path slot even after percent-encoding:
23
24
  * `encodeURIComponent` leaves `.` and `..` intact, and WHATWG URL resolution
@@ -39,6 +40,33 @@ function encode(segment) {
39
40
  assertValidId(segment);
40
41
  return encodeURIComponent(segment);
41
42
  }
43
+ /**
44
+ * Encodes a collection-id slot, additionally rejecting an id from the Reserved
45
+ * Path Segment Registry: `collectionPath(s, 'policy')` is byte-identical to
46
+ * the space policy path, so a reserved id would silently mis-target a
47
+ * space-level endpoint. Guarding in the builders covers every URL-forming
48
+ * entry point (handle constructors guard too, for the earlier failure).
49
+ *
50
+ * @param collectionId {string}
51
+ * @returns {string}
52
+ */
53
+ function encodeCollectionId(collectionId) {
54
+ assertNotReserved({ id: collectionId, kind: 'collection' });
55
+ return encode(collectionId);
56
+ }
57
+ /**
58
+ * Encodes a resource-id slot, additionally rejecting an id from the Reserved
59
+ * Path Segment Registry: `resourcePath(s, c, 'policy')` is byte-identical to
60
+ * the collection policy path, so a reserved id would silently mis-target a
61
+ * collection-level endpoint.
62
+ *
63
+ * @param resourceId {string}
64
+ * @returns {string}
65
+ */
66
+ function encodeResourceId(resourceId) {
67
+ assertNotReserved({ id: resourceId, kind: 'resource' });
68
+ return encode(resourceId);
69
+ }
42
70
  /**
43
71
  * `/spaces/` -- the SpacesRepository (create / list spaces).
44
72
  */
@@ -123,70 +151,70 @@ export function spaceRevocation(spaceId, capabilityId) {
123
151
  * (no trailing slash).
124
152
  */
125
153
  export function collectionPath(spaceId, collectionId) {
126
- return `/space/${encode(spaceId)}/${encode(collectionId)}`;
154
+ return `/space/${encode(spaceId)}/${encodeCollectionId(collectionId)}`;
127
155
  }
128
156
  /**
129
157
  * `/space/:spaceId/:collectionId/` -- list items / add a resource
130
158
  * (trailing slash).
131
159
  */
132
160
  export function collectionItems(spaceId, collectionId) {
133
- return `/space/${encode(spaceId)}/${encode(collectionId)}/`;
161
+ return `/space/${encode(spaceId)}/${encodeCollectionId(collectionId)}/`;
134
162
  }
135
163
  /**
136
164
  * `/space/:spaceId/:collectionId/policy` -- the collection-level access-control
137
165
  * policy resource.
138
166
  */
139
167
  export function collectionPolicy(spaceId, collectionId) {
140
- return `/space/${encode(spaceId)}/${encode(collectionId)}/policy`;
168
+ return `/space/${encode(spaceId)}/${encodeCollectionId(collectionId)}/policy`;
141
169
  }
142
170
  /**
143
171
  * `/space/:spaceId/:collectionId/linkset` -- the collection-level linkset
144
172
  * (policy discovery).
145
173
  */
146
174
  export function collectionLinkset(spaceId, collectionId) {
147
- return `/space/${encode(spaceId)}/${encode(collectionId)}/linkset`;
175
+ return `/space/${encode(spaceId)}/${encodeCollectionId(collectionId)}/linkset`;
148
176
  }
149
177
  /**
150
178
  * `/space/:spaceId/:collectionId/backend` -- the "Collection Backend Selected"
151
179
  * descriptor (the backend this collection is stored on).
152
180
  */
153
181
  export function collectionBackend(spaceId, collectionId) {
154
- return `/space/${encode(spaceId)}/${encode(collectionId)}/backend`;
182
+ return `/space/${encode(spaceId)}/${encodeCollectionId(collectionId)}/backend`;
155
183
  }
156
184
  /**
157
185
  * `/space/:spaceId/:collectionId/quota` -- the per-collection storage quota
158
186
  * report (spec "Quotas").
159
187
  */
160
188
  export function collectionQuota(spaceId, collectionId) {
161
- return `/space/${encode(spaceId)}/${encode(collectionId)}/quota`;
189
+ return `/space/${encode(spaceId)}/${encodeCollectionId(collectionId)}/quota`;
162
190
  }
163
191
  /**
164
192
  * `/space/:spaceId/:collectionId/query` -- the collection-level query endpoint,
165
193
  * whose body's `profile` selects the query (e.g. `changes`, `blinded-index`).
166
194
  */
167
195
  export function collectionQuery(spaceId, collectionId) {
168
- return `/space/${encode(spaceId)}/${encode(collectionId)}/query`;
196
+ return `/space/${encode(spaceId)}/${encodeCollectionId(collectionId)}/query`;
169
197
  }
170
198
  /**
171
199
  * `/space/:spaceId/:collectionId/:resourceId` -- get / put / delete a resource
172
200
  * (no trailing slash).
173
201
  */
174
202
  export function resourcePath(spaceId, collectionId, resourceId) {
175
- return `/space/${encode(spaceId)}/${encode(collectionId)}/${encode(resourceId)}`;
203
+ return `/space/${encode(spaceId)}/${encodeCollectionId(collectionId)}/${encodeResourceId(resourceId)}`;
176
204
  }
177
205
  /**
178
206
  * `/space/:spaceId/:collectionId/:resourceId/meta` -- the resource metadata
179
207
  * object (server-managed properties plus the user-writable `custom` object).
180
208
  */
181
209
  export function resourceMeta(spaceId, collectionId, resourceId) {
182
- return `/space/${encode(spaceId)}/${encode(collectionId)}/${encode(resourceId)}/meta`;
210
+ return `/space/${encode(spaceId)}/${encodeCollectionId(collectionId)}/${encodeResourceId(resourceId)}/meta`;
183
211
  }
184
212
  /**
185
213
  * `/space/:spaceId/:collectionId/:resourceId/policy` -- the resource-level
186
214
  * access-control policy resource.
187
215
  */
188
216
  export function resourcePolicy(spaceId, collectionId, resourceId) {
189
- return `/space/${encode(spaceId)}/${encode(collectionId)}/${encode(resourceId)}/policy`;
217
+ return `/space/${encode(spaceId)}/${encodeCollectionId(collectionId)}/${encodeResourceId(resourceId)}/policy`;
190
218
  }
191
219
  /**
192
220
  * `/space/:spaceId/:collectionId/:resourceId/chunks/:chunkIndex` -- a single
@@ -1 +1 @@
1
- {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/internal/paths.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;GAcG;AACH,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACtB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAE9C;;;;;;;;;;GAUG;AACH,SAAS,aAAa,CAAC,OAAe;IACpC,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QAC1D,MAAM,IAAI,eAAe,CACvB,cAAc,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,+BAA+B;YAClE,qDAAqD,CACxD,CAAA;IACH,CAAC;AACH,CAAC;AAED,SAAS,MAAM,CAAC,OAAe;IAC7B,aAAa,CAAC,OAAO,CAAC,CAAA;IACtB,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAA;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO,UAAU,CAAA;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,OAAO,UAAU,MAAM,CAAC,OAAO,CAAC,EAAE,CAAA;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,OAAO,UAAU,MAAM,CAAC,OAAO,CAAC,GAAG,CAAA;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,OAAO,UAAU,MAAM,CAAC,OAAO,CAAC,eAAe,CAAA;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,UAAU,MAAM,CAAC,OAAO,CAAC,SAAS,CAAA;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,UAAU,MAAM,CAAC,OAAO,CAAC,SAAS,CAAA;AAC3C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,OAAO,UAAU,MAAM,CAAC,OAAO,CAAC,WAAW,CAAA;AAC7C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe,EAAE,SAAiB;IAClE,OAAO,UAAU,MAAM,CAAC,OAAO,CAAC,aAAa,MAAM,CAAC,SAAS,CAAC,EAAE,CAAA;AAClE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,UAAU,MAAM,CAAC,OAAO,CAAC,SAAS,CAAA;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,UAAU,MAAM,CAAC,OAAO,CAAC,SAAS,CAAA;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,OAAO,UAAU,MAAM,CAAC,OAAO,CAAC,UAAU,CAAA;AAC5C,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe,EAAE,YAAoB;IACnE,OAAO,UAAU,MAAM,CAAC,OAAO,CAAC,sBAAsB,MAAM,CAAC,YAAY,CAAC,EAAE,CAAA;AAC9E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe,EAAE,YAAoB;IAClE,OAAO,UAAU,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,YAAY,CAAC,EAAE,CAAA;AAC5D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe,EAAE,YAAoB;IACnE,OAAO,UAAU,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,CAAA;AAC7D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,OAAe,EACf,YAAoB;IAEpB,OAAO,UAAU,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,YAAY,CAAC,SAAS,CAAA;AACnE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAe,EACf,YAAoB;IAEpB,OAAO,UAAU,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,YAAY,CAAC,UAAU,CAAA;AACpE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAe,EACf,YAAoB;IAEpB,OAAO,UAAU,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,YAAY,CAAC,UAAU,CAAA;AACpE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe,EAAE,YAAoB;IACnE,OAAO,UAAU,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAA;AAClE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe,EAAE,YAAoB;IACnE,OAAO,UAAU,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAA;AAClE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAC1B,OAAe,EACf,YAAoB,EACpB,UAAkB;IAElB,OAAO,UAAU,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,EAAE,CAAA;AAClF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAC1B,OAAe,EACf,YAAoB,EACpB,UAAkB;IAElB,OAAO,UAAU,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,CAAA;AACvF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAC5B,OAAe,EACf,YAAoB,EACpB,UAAkB;IAElB,OAAO,UAAU,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,SAAS,CAAA;AACzF,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAe,EACf,YAAoB,EACpB,UAAkB,EAClB,UAAkB;IAElB,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,YAAY,EAAE,UAAU,CAAC,WAAW,UAAU,EAAE,CAAA;AAClF,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAAe,EACf,YAAoB,EACpB,UAAkB;IAElB,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,YAAY,EAAE,UAAU,CAAC,UAAU,CAAA;AACrE,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,KAAK,CAAC,EACpB,SAAS,EACT,IAAI,EAIL;IACC,2EAA2E;IAC3E,2EAA2E;IAC3E,qDAAqD;IACrD,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,CAAA;IAClE,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC5D,OAAO,IAAI,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAA;AAC3C,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,aAAqB;IACtD,OAAO,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,aAAa,GAAG,CAAA;AAC1E,CAAC;AAoBD;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAC/B,SAAS,EACT,MAAM,EAIP;IACC,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,CAAA;IAClE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAA;IACb,CAAC;IACD,IAAI,QAAgB,CAAA;IACpB,IAAI,CAAC;QACH,CAAC;QAAA,CAAC,EAAE,QAAQ,EAAE,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;IACD,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAA;IAC3C,OAAO,cAAc,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;AAClE,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,IAAI,QAAkB,CAAA;IACtB,IAAI,CAAC;QACH,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;IACxE,CAAC;IAAC,MAAM,CAAC;QACP,2EAA2E;QAC3E,4EAA4E;QAC5E,mEAAmE;QACnE,OAAO,IAAI,CAAA;IACb,CAAC;IACD,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;QACzD,OAAO,IAAI,CAAA;IACb,CAAC;IACD,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,QAAyC,CAAA;IACtE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAA;IACnC,CAAC;IACD,qEAAqE;IACrE,wEAAwE;IACxE,uDAAuD;IACvD,IAAI,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAW,CAAC,EAAE,CAAC;QACnD,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;IAC1D,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC,CAAW,EAAE,CAAA;IACzE,CAAC;IACD,yEAAyE;IACzE,kDAAkD;IAClD,IAAI,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAW,CAAC,EAAE,CAAC;QACjD,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;IAC1D,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,OAAO;YACP,YAAY,EAAE,IAAI,CAAC,CAAC,CAAW;YAC/B,UAAU,EAAE,IAAI,CAAC,CAAC,CAAW;SAC9B,CAAA;IACH,CAAC;IACD,qEAAqE;IACrE,uDAAuD;IACvD,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;AAC1D,CAAC"}
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/internal/paths.ts"],"names":[],"mappings":"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"}
@@ -37,6 +37,34 @@ export declare function writePolicy(context: ClientContext, { policyPath, policy
37
37
  policy: PolicyDocument;
38
38
  capability?: IZcap;
39
39
  }): Promise<void>;
40
+ /**
41
+ * Whether the policy at `policyPath` is `PublicCanRead` -- the shared body of
42
+ * the `isPublic()` sugar on the three handle classes.
43
+ *
44
+ * @param context {ClientContext}
45
+ * @param options {object}
46
+ * @param options.policyPath {string} the policy sub-resource path
47
+ * @param [options.capability] {IZcap}
48
+ * @returns {Promise<boolean>}
49
+ */
50
+ export declare function isPublicPolicy(context: ClientContext, options: {
51
+ policyPath: string;
52
+ capability?: IZcap;
53
+ }): Promise<boolean>;
54
+ /**
55
+ * Sets the policy at `policyPath` to `PublicCanRead` -- the shared body of the
56
+ * `setPublic()` sugar on the three handle classes.
57
+ *
58
+ * @param context {ClientContext}
59
+ * @param options {object}
60
+ * @param options.policyPath {string} the policy sub-resource path
61
+ * @param [options.capability] {IZcap}
62
+ * @returns {Promise<void>}
63
+ */
64
+ export declare function setPublicPolicy(context: ClientContext, { policyPath, capability }: {
65
+ policyPath: string;
66
+ capability?: IZcap;
67
+ }): Promise<void>;
40
68
  /**
41
69
  * Removes the access-control policy at `policyPath`, reverting to
42
70
  * capability-only access. Idempotent.
@@ -1 +1 @@
1
- {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/internal/policy.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;GAIG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAGjD,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAExD;;;;;;;;;GASG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,aAAa,EACtB,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,KAAK,CAAA;CAAE,GACrE,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAQhC;AAED;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,aAAa,EACtB,EACE,UAAU,EACV,MAAM,EACN,UAAU,EACX,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,cAAc,CAAC;IAAC,UAAU,CAAC,EAAE,KAAK,CAAA;CAAE,GACpE,OAAO,CAAC,IAAI,CAAC,CAOf;AAED;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,aAAa,EACtB,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,KAAK,CAAA;CAAE,GACrE,OAAO,CAAC,IAAI,CAAC,CAOf"}
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/internal/policy.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;GAIG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAGjD,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAExD;;;;;;;;;GASG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,aAAa,EACtB,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,KAAK,CAAA;CAAE,GACrE,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAQhC;AAED;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,aAAa,EACtB,EACE,UAAU,EACV,MAAM,EACN,UAAU,EACX,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,cAAc,CAAC;IAAC,UAAU,CAAC,EAAE,KAAK,CAAA;CAAE,GACpE,OAAO,CAAC,IAAI,CAAC,CAOf;AAED;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,KAAK,CAAA;CAAE,GAClD,OAAO,CAAC,OAAO,CAAC,CAGlB;AAED;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,aAAa,EACtB,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,KAAK,CAAA;CAAE,GACrE,OAAO,CAAC,IAAI,CAAC,CAMf;AAED;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,aAAa,EACtB,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,KAAK,CAAA;CAAE,GACrE,OAAO,CAAC,IAAI,CAAC,CAOf"}
@@ -37,6 +37,37 @@ export async function writePolicy(context, { policyPath, policy, capability }) {
37
37
  json: policy
38
38
  });
39
39
  }
40
+ /**
41
+ * Whether the policy at `policyPath` is `PublicCanRead` -- the shared body of
42
+ * the `isPublic()` sugar on the three handle classes.
43
+ *
44
+ * @param context {ClientContext}
45
+ * @param options {object}
46
+ * @param options.policyPath {string} the policy sub-resource path
47
+ * @param [options.capability] {IZcap}
48
+ * @returns {Promise<boolean>}
49
+ */
50
+ export async function isPublicPolicy(context, options) {
51
+ const policy = await readPolicy(context, options);
52
+ return policy?.type === 'PublicCanRead';
53
+ }
54
+ /**
55
+ * Sets the policy at `policyPath` to `PublicCanRead` -- the shared body of the
56
+ * `setPublic()` sugar on the three handle classes.
57
+ *
58
+ * @param context {ClientContext}
59
+ * @param options {object}
60
+ * @param options.policyPath {string} the policy sub-resource path
61
+ * @param [options.capability] {IZcap}
62
+ * @returns {Promise<void>}
63
+ */
64
+ export async function setPublicPolicy(context, { policyPath, capability }) {
65
+ await writePolicy(context, {
66
+ policyPath,
67
+ policy: { type: 'PublicCanRead' },
68
+ capability
69
+ });
70
+ }
40
71
  /**
41
72
  * Removes the access-control policy at `policyPath`, reverting to
42
73
  * capability-only access. Idempotent.
@@ -1 +1 @@
1
- {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../src/internal/policy.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAGzC;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,OAAsB,EACtB,EAAE,UAAU,EAAE,UAAU,EAA8C;IAEtE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE;QACnC,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE,KAAK;QACb,UAAU;QACV,IAAI,EAAE,IAAI;KACX,CAAC,CAAA;IACF,OAAO,UAAU,CAAiB,QAAQ,CAAC,CAAA;AAC7C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAsB,EACtB,EACE,UAAU,EACV,MAAM,EACN,UAAU,EACyD;IAErE,MAAM,IAAI,CAAC,OAAO,EAAE;QAClB,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE,KAAK;QACb,UAAU;QACV,IAAI,EAAE,MAAM;KACb,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAAsB,EACtB,EAAE,UAAU,EAAE,UAAU,EAA8C;IAEtE,MAAM,IAAI,CAAC,OAAO,EAAE;QAClB,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE,QAAQ;QAChB,UAAU;QACV,UAAU,EAAE,IAAI;KACjB,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../src/internal/policy.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAGzC;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,OAAsB,EACtB,EAAE,UAAU,EAAE,UAAU,EAA8C;IAEtE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE;QACnC,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE,KAAK;QACb,UAAU;QACV,IAAI,EAAE,IAAI;KACX,CAAC,CAAA;IACF,OAAO,UAAU,CAAiB,QAAQ,CAAC,CAAA;AAC7C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAsB,EACtB,EACE,UAAU,EACV,MAAM,EACN,UAAU,EACyD;IAErE,MAAM,IAAI,CAAC,OAAO,EAAE;QAClB,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE,KAAK;QACb,UAAU;QACV,IAAI,EAAE,MAAM;KACb,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAsB,EACtB,OAAmD;IAEnD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IACjD,OAAO,MAAM,EAAE,IAAI,KAAK,eAAe,CAAA;AACzC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAsB,EACtB,EAAE,UAAU,EAAE,UAAU,EAA8C;IAEtE,MAAM,WAAW,CAAC,OAAO,EAAE;QACzB,UAAU;QACV,MAAM,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE;QACjC,UAAU;KACX,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAAsB,EACtB,EAAE,UAAU,EAAE,UAAU,EAA8C;IAEtE,MAAM,IAAI,CAAC,OAAO,EAAE;QAClB,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE,QAAQ;QAChB,UAAU;QACV,UAAU,EAAE,IAAI;KACjB,CAAC,CAAA;AACJ,CAAC"}
@@ -1,5 +1,16 @@
1
1
  import type { ClientContext } from './request.js';
2
2
  import type { IDelegatedZcap, IZcap } from '../types.js';
3
+ /**
4
+ * The root capability id for an invocation target URL
5
+ * (`urn:zcap:root:<encoded target>`) -- the id grammar shared by revocation
6
+ * (which invokes the revocation URL's own root capability in object form) and
7
+ * grant rooting (which parents an unparented grant on its Space's root
8
+ * capability id).
9
+ *
10
+ * @param target {string} the absolute invocation target URL
11
+ * @returns {string}
12
+ */
13
+ export declare function rootCapabilityId(target: string): string;
3
14
  /**
4
15
  * Derives the id of the Space a capability is rooted in, from its
5
16
  * `invocationTarget`. A Space-rooted capability's target is the Space URL or a
@@ -1 +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"}
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;AAOnE;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEvD;AAiCD;;;;;;;;;;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"}
@@ -23,6 +23,19 @@ import { ValidationError } from '../errors.js';
23
23
  * The zcap JSON-LD context URL, the sole `@context` of a root capability.
24
24
  */
25
25
  const ZCAP_CONTEXT_URL = 'https://w3id.org/zcap/v1';
26
+ /**
27
+ * The root capability id for an invocation target URL
28
+ * (`urn:zcap:root:<encoded target>`) -- the id grammar shared by revocation
29
+ * (which invokes the revocation URL's own root capability in object form) and
30
+ * grant rooting (which parents an unparented grant on its Space's root
31
+ * capability id).
32
+ *
33
+ * @param target {string} the absolute invocation target URL
34
+ * @returns {string}
35
+ */
36
+ export function rootCapabilityId(target) {
37
+ return `urn:zcap:root:${encodeURIComponent(target)}`;
38
+ }
26
39
  /**
27
40
  * Builds the root capability for `target` in **object** form.
28
41
  *
@@ -42,7 +55,7 @@ const ZCAP_CONTEXT_URL = 'https://w3id.org/zcap/v1';
42
55
  function rootCapability({ target, controller }) {
43
56
  return {
44
57
  '@context': ZCAP_CONTEXT_URL,
45
- id: `urn:zcap:root:${encodeURIComponent(target)}`,
58
+ id: rootCapabilityId(target),
46
59
  invocationTarget: target,
47
60
  controller
48
61
  };
@@ -1 +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"}
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;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,OAAO,iBAAiB,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAA;AACtD,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,SAAS,cAAc,CAAC,EACtB,MAAM,EACN,UAAU,EAIX;IACC,OAAO;QACL,UAAU,EAAE,gBAAgB;QAC5B,EAAE,EAAE,gBAAgB,CAAC,MAAM,CAAC;QAC5B,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"}
@@ -53,6 +53,11 @@ export declare function sendEncodedWrite(context: ClientContext, { path, method,
53
53
  * that 412 is re-thrown here with a message naming the real cause, instead
54
54
  * of surfacing as an inexplicable failed create. Conditional codecs
55
55
  * therefore need read access to update an existing document.
56
+ * - A backend that does NOT advertise `conditional-writes` ignores the
57
+ * `If-None-Match: *` guard, so the 412 safety net above never fires there: a
58
+ * masked-404 insert would silently overwrite the existing document and reset
59
+ * its sequence. The insert-after-null-pre-read is therefore refused (fail
60
+ * closed) unless the backend advertises the feature.
56
61
  *
57
62
  * @param context {ClientContext}
58
63
  * @param options {object}
@@ -60,17 +65,21 @@ export declare function sendEncodedWrite(context: ClientContext, { path, method,
60
65
  * @param options.codec {ResourceCodec} the collection's resolved codec
61
66
  * @param options.id {string} the resource id
62
67
  * @param options.data {ResourceData} the plaintext value
68
+ * @param options.features {function} resolves the backend's
69
+ * advertised feature tokens (the handle's shared `BackendFeatures` probe);
70
+ * consulted only for a conditional codec's insert-after-null-pre-read
63
71
  * @param [options.contentType] {string} caller-supplied content type
64
72
  * @param [options.capability] {IZcap}
65
73
  * @param [options.precondition] {WritePrecondition} the caller's explicit
66
74
  * precondition (used only for a non-conditional codec)
67
75
  * @returns {Promise<HttpResponse>}
68
76
  */
69
- export declare function upsertResource(context: ClientContext, { path, codec, id, data, contentType, capability, precondition }: {
77
+ export declare function upsertResource(context: ClientContext, { path, codec, id, data, features, contentType, capability, precondition }: {
70
78
  path: string;
71
79
  codec: ResourceCodec;
72
80
  id: string;
73
81
  data: ResourceData;
82
+ features: () => Promise<string[]>;
74
83
  contentType?: string;
75
84
  capability?: IZcap;
76
85
  precondition?: WritePrecondition;
@@ -1 +1 @@
1
- {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/internal/write.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAE9D,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAGjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEzD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,aAAa,EACtB,EACE,IAAI,EACJ,MAAM,EACN,OAAO,EACP,UAAU,EACV,YAAY,EACb,EAAE;IACD,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,YAAY,CAAA;IACrB,UAAU,CAAC,EAAE,KAAK,CAAA;IAClB,YAAY,CAAC,EAAE,iBAAiB,CAAA;CACjC,GACA,OAAO,CAAC,YAAY,CAAC,CAcvB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,aAAa,EACtB,EACE,IAAI,EACJ,KAAK,EACL,EAAE,EACF,IAAI,EACJ,WAAW,EACX,UAAU,EACV,YAAY,EACb,EAAE;IACD,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,aAAa,CAAA;IACpB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,YAAY,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,KAAK,CAAA;IAClB,YAAY,CAAC,EAAE,iBAAiB,CAAA;CACjC,GACA,OAAO,CAAC,YAAY,CAAC,CA2CvB"}
1
+ {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/internal/write.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAE9D,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAGjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEzD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,aAAa,EACtB,EACE,IAAI,EACJ,MAAM,EACN,OAAO,EACP,UAAU,EACV,YAAY,EACb,EAAE;IACD,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,YAAY,CAAA;IACrB,UAAU,CAAC,EAAE,KAAK,CAAA;IAClB,YAAY,CAAC,EAAE,iBAAiB,CAAA;CACjC,GACA,OAAO,CAAC,YAAY,CAAC,CAcvB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,aAAa,EACtB,EACE,IAAI,EACJ,KAAK,EACL,EAAE,EACF,IAAI,EACJ,QAAQ,EACR,WAAW,EACX,UAAU,EACV,YAAY,EACb,EAAE;IACD,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,aAAa,CAAA;IACpB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,YAAY,CAAA;IAClB,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IACjC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,KAAK,CAAA;IAClB,YAAY,CAAC,EAAE,iBAAiB,CAAA;CACjC,GACA,OAAO,CAAC,YAAY,CAAC,CAgEvB"}
@@ -1,6 +1,6 @@
1
- import { PreconditionFailedError } from '../errors.js';
1
+ import { PreconditionFailedError, ValidationError } from '../errors.js';
2
2
  import { send } from './request.js';
3
- import { writeHeaders } from './conditional.js';
3
+ import { encodedPrecondition, writeHeaders } from './conditional.js';
4
4
  /**
5
5
  * Sends an encoded write (`PUT`/`POST`) to a resource path, applying the
6
6
  * encoded body (`json` or `body`), its content-type, and the conditional-write
@@ -47,6 +47,11 @@ export async function sendEncodedWrite(context, { path, method, encoded, capabil
47
47
  * that 412 is re-thrown here with a message naming the real cause, instead
48
48
  * of surfacing as an inexplicable failed create. Conditional codecs
49
49
  * therefore need read access to update an existing document.
50
+ * - A backend that does NOT advertise `conditional-writes` ignores the
51
+ * `If-None-Match: *` guard, so the 412 safety net above never fires there: a
52
+ * masked-404 insert would silently overwrite the existing document and reset
53
+ * its sequence. The insert-after-null-pre-read is therefore refused (fail
54
+ * closed) unless the backend advertises the feature.
50
55
  *
51
56
  * @param context {ClientContext}
52
57
  * @param options {object}
@@ -54,13 +59,16 @@ export async function sendEncodedWrite(context, { path, method, encoded, capabil
54
59
  * @param options.codec {ResourceCodec} the collection's resolved codec
55
60
  * @param options.id {string} the resource id
56
61
  * @param options.data {ResourceData} the plaintext value
62
+ * @param options.features {function} resolves the backend's
63
+ * advertised feature tokens (the handle's shared `BackendFeatures` probe);
64
+ * consulted only for a conditional codec's insert-after-null-pre-read
57
65
  * @param [options.contentType] {string} caller-supplied content type
58
66
  * @param [options.capability] {IZcap}
59
67
  * @param [options.precondition] {WritePrecondition} the caller's explicit
60
68
  * precondition (used only for a non-conditional codec)
61
69
  * @returns {Promise<HttpResponse>}
62
70
  */
63
- export async function upsertResource(context, { path, codec, id, data, contentType, capability, precondition }) {
71
+ export async function upsertResource(context, { path, codec, id, data, features, contentType, capability, precondition }) {
64
72
  let current;
65
73
  if (codec.conditionalWrites) {
66
74
  current = await send(context, {
@@ -69,12 +77,29 @@ export async function upsertResource(context, { path, codec, id, data, contentTy
69
77
  capability,
70
78
  read: true
71
79
  });
80
+ if (current === null &&
81
+ !(await features()).includes('conditional-writes')) {
82
+ // The write would be encoded as a fresh insert guarded only by
83
+ // `If-None-Match: *`, which this backend ignores -- so if the document in
84
+ // fact exists but is unreadable with this capability (the masked-404
85
+ // ambiguity), the PUT would silently destroy it. Refuse rather than risk
86
+ // the clobber.
87
+ throw new ValidationError(`Cannot create the document at "${path}": no current document is ` +
88
+ 'readable there, which cannot distinguish "absent" from "exists ' +
89
+ 'but unreadable with this capability" (WAS masks unauthorized ' +
90
+ "reads as 404), and the collection's backend does not advertise " +
91
+ "the 'conditional-writes' feature -- so the server could not " +
92
+ 'reject the write either, and an existing document would be ' +
93
+ 'silently overwritten. Use a backend with conditional writes, a ' +
94
+ 'capability that can read the current document and the backend ' +
95
+ 'descriptor, or add() to mint a fresh document id.');
96
+ }
72
97
  }
73
98
  const encoded = await codec.encode({ id, data, contentType, current });
74
99
  // A conditional codec computes the precondition itself (from the sequence /
75
100
  // ETag); a plaintext codec defers to the caller's explicit options.
76
101
  const chosen = codec.conditionalWrites
77
- ? { ifMatch: encoded.ifMatch, ifNoneMatch: encoded.ifNoneMatch }
102
+ ? encodedPrecondition(encoded)
78
103
  : precondition;
79
104
  try {
80
105
  return await sendEncodedWrite(context, {
@@ -1 +1 @@
1
- {"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/internal/write.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAA;AAGtD,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAG/C;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAsB,EACtB,EACE,IAAI,EACJ,MAAM,EACN,OAAO,EACP,UAAU,EACV,YAAY,EAOb;IAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE;QACnC,IAAI;QACJ,MAAM;QACN,UAAU;QACV,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,OAAO,EAAE,YAAY,CAAC;YACpB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,YAAY;YACZ,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC;KACH,CAAC,CAAA;IACF,OAAO,QAAwB,CAAA;AACjC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAsB,EACtB,EACE,IAAI,EACJ,KAAK,EACL,EAAE,EACF,IAAI,EACJ,WAAW,EACX,UAAU,EACV,YAAY,EASb;IAED,IAAI,OAAwC,CAAA;IAC5C,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC5B,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE;YAC5B,IAAI;YACJ,MAAM,EAAE,KAAK;YACb,UAAU;YACV,IAAI,EAAE,IAAI;SACX,CAAC,CAAA;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAA;IACtE,4EAA4E;IAC5E,oEAAoE;IACpE,MAAM,MAAM,GAAG,KAAK,CAAC,iBAAiB;QACpC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE;QAChE,CAAC,CAAC,YAAY,CAAA;IAChB,IAAI,CAAC;QACH,OAAO,MAAM,gBAAgB,CAAC,OAAO,EAAE;YACrC,IAAI;YACJ,MAAM,EAAE,KAAK;YACb,UAAU;YACV,OAAO;YACP,YAAY,EAAE,MAAM;SACrB,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IACE,GAAG,YAAY,uBAAuB;YACtC,KAAK,CAAC,iBAAiB;YACvB,OAAO,KAAK,IAAI,EAChB,CAAC;YACD,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,GAAG,CAAA;YACxD,MAAM,IAAI,uBAAuB,CAC/B,kCAAkC,IAAI,gCAAgC;gBACpE,0DAA0D;gBAC1D,kEAAkE;gBAClE,gEAAgE;gBAChE,+DAA+D;gBAC/D,WAAW,EACb,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,CACzD,CAAA;QACH,CAAC;QACD,MAAM,GAAG,CAAA;IACX,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/internal/write.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -23,6 +23,18 @@ export type { IZcap, IDelegatedZcap, IRootZcap, ISigner };
23
23
  * (formerly `CollectionListing`).
24
24
  */
25
25
  export type { Action, ActionInput, SpaceDescription, CollectionDescription, CollectionEncryption, CollectionEncryptionEpoch, CollectionEncryptionRecipient, PolicyDocument, LinkSet, LinkSetEntry, CollectionSummary, CollectionsList, SpaceSummary, SpaceListing, ResourceSummary, CollectionResourcesList, ResourceMetadata, ResourceMetadataCustom, ImportStats, BackendReference, BackendDescriptor, BackendRegistration, BackendConnectionInput, BackendConnectionPublic, StorageLimit, CollectionUsage, BackendUsage, SpaceQuotaReport } from '@interop/storage-core';
26
+ import type { BackendReference, CollectionEncryption } from '@interop/storage-core';
27
+ /**
28
+ * The client-writable fields of a Collection Description -- the shape shared
29
+ * by `Collection.configure` and `Collection.replaceDescription` and the single
30
+ * place a new writable field is declared (the body/echo inclusion rule lives
31
+ * in `Collection._writableFields`).
32
+ */
33
+ export interface CollectionWritableFields {
34
+ name?: string;
35
+ backend?: BackendReference;
36
+ encryption?: CollectionEncryption;
37
+ }
26
38
  /**
27
39
  * A JSON-serializable value, the shape stored for JSON resources and
28
40
  * descriptions.
@@ -1 +1 @@
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,yBAAyB,EACzB,6BAA6B,EAC7B,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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
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.15.0",
4
+ "version": "0.16.0",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "build": "pnpm run clear && tsc",
@@ -44,10 +44,10 @@
44
44
  "dependencies": {
45
45
  "@interop/data-integrity-core": "^8.3.0",
46
46
  "@interop/ed25519-signature": "^7.1.4",
47
- "@interop/edv-client": "^17.6.1",
47
+ "@interop/edv-client": "^17.7.0",
48
48
  "@interop/ezcap": "^7.4.1",
49
49
  "@interop/http-client": "^1.0.4",
50
- "@interop/minimal-cipher": "^7.6.2",
50
+ "@interop/minimal-cipher": "^7.7.0",
51
51
  "@interop/storage-core": "^0.3.5",
52
52
  "@interop/x25519-key-agreement-key": "^5.2.1",
53
53
  "@scure/base": "^2.2.0"