@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
@@ -1,7 +1,7 @@
1
1
  import type { ClientContext } from './internal/request.js';
2
2
  import { Resource } from './Resource.js';
3
3
  import type { ChangesCheckpoint, ChangesPage } from '@interop/storage-core';
4
- import type { AddResult, BackendDescriptor, BackendReference, BackendUsage, CollectionDescription, CollectionEncryption, EncryptionOverride, GrantOptions, HandleOptions, IDelegatedZcap, IZcap, Json, ResourceData, LinkSet, PolicyDocument, CollectionResourcesList, ResourceSummary } from './types.js';
4
+ import type { AddResult, BackendDescriptor, BackendUsage, CollectionDescription, CollectionWritableFields, EncryptionOverride, GrantOptions, HandleOptions, IDelegatedZcap, IZcap, Json, ResourceData, LinkSet, PolicyDocument, CollectionResourcesList, ResourceSummary } from './types.js';
5
5
  export declare class Collection {
6
6
  readonly spaceId: string;
7
7
  readonly id: string;
@@ -9,6 +9,12 @@ export declare class Collection {
9
9
  private readonly _capability?;
10
10
  private readonly _encryptionOverride?;
11
11
  private readonly _codecHolder;
12
+ /**
13
+ * The shared backend-feature probe for this collection (memoized on a
14
+ * definitive answer), consulted by the conditional-codec write path and
15
+ * shared with child resource handles the way the codec is.
16
+ */
17
+ private readonly _features;
12
18
  /**
13
19
  * @param options {object}
14
20
  * @param options.context {ClientContext} - Shared context (serverUrl, ezcap
@@ -36,11 +42,8 @@ export declare class Collection {
36
42
  * `replaceDescription` request bodies and their echoed return descriptions, so
37
43
  * the two paths cannot drift and a new writable field is added in one place.
38
44
  *
39
- * @param fields {object}
40
- * @param [fields.name] {string}
41
- * @param [fields.backend] {BackendReference}
42
- * @param [fields.encryption] {CollectionEncryption}
43
- * @returns {object}
45
+ * @param fields {CollectionWritableFields}
46
+ * @returns {CollectionWritableFields}
44
47
  */
45
48
  private _writableFields;
46
49
  /**
@@ -80,21 +83,16 @@ export declare class Collection {
80
83
  * -- e.g. when creating a new collection through a handle (or use
81
84
  * `space.createCollection()`, which does not merge).
82
85
  *
83
- * @param desc {object}
84
- * @param [desc.name] {string}
85
- * @param [desc.backend] {BackendReference}
86
- * @param [desc.encryption] {CollectionEncryption} declare the client-side
87
- * encryption marker. Set-once on the server: it may be added to a Collection
88
- * that lacks one, but changing/clearing an existing marker is rejected
89
- * (`ConflictError`, `encryption-immutable`).
86
+ * @param desc {CollectionWritableFields} the fields to merge; `encryption`
87
+ * declares the client-side encryption marker, which is set-once on the
88
+ * server (it may be added to a Collection that lacks one, but
89
+ * changing/clearing an existing marker is rejected -- `ConflictError`,
90
+ * `encryption-immutable`)
90
91
  * @param [desc.force] {boolean} proceed even when the current description
91
92
  * is unreadable and `backend`/`encryption` are omitted (see above)
92
93
  * @returns {Promise<CollectionDescription>}
93
94
  */
94
- configure(desc: {
95
- name?: string;
96
- backend?: BackendReference;
97
- encryption?: CollectionEncryption;
95
+ configure(desc: CollectionWritableFields & {
98
96
  force?: boolean;
99
97
  }): Promise<CollectionDescription>;
100
98
  /**
@@ -123,20 +121,13 @@ export declare class Collection {
123
121
  * operations build on (add/remove a reader is a CAS of the `encryption`
124
122
  * marker); it is not epoch-specific.
125
123
  *
126
- * @param description {object}
127
- * @param [description.name] {string}
128
- * @param [description.backend] {BackendReference}
129
- * @param [description.encryption] {CollectionEncryption}
124
+ * @param description {CollectionWritableFields}
130
125
  * @param options {object}
131
126
  * @param [options.ifMatch] {string} the prior `ETag`; the write applies only
132
127
  * if the description is unchanged
133
128
  * @returns {Promise<{ description: CollectionDescription; etag?: string }>}
134
129
  */
135
- replaceDescription(description: {
136
- name?: string;
137
- backend?: BackendReference;
138
- encryption?: CollectionEncryption;
139
- }, options?: {
130
+ replaceDescription(description: CollectionWritableFields, options?: {
140
131
  ifMatch?: string;
141
132
  }): Promise<{
142
133
  description: CollectionDescription;
@@ -1 +1 @@
1
- {"version":3,"file":"Collection.d.ts","sourceRoot":"","sources":["../src/Collection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Collection.d.ts","sourceRoot":"","sources":["../src/Collection.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAiC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAC3E,OAAO,KAAK,EACV,SAAS,EACT,iBAAiB,EACjB,YAAY,EACZ,qBAAqB,EACrB,wBAAwB,EACxB,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,cAAc,EACd,KAAK,EACL,IAAI,EACJ,YAAY,EACZ,OAAO,EACP,cAAc,EACd,uBAAuB,EACvB,eAAe,EAChB,MAAM,YAAY,CAAA;AAEnB,qBAAa,UAAU;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IAEnB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAO;IACpC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAoB;IACzD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAa;IAC1C;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiB;IAE3C;;;;;;;;;;OAUG;gBACS,EACV,OAAO,EACP,OAAO,EACP,YAAY,EACZ,UAAU,EACV,UAAU,EACX,EAAE;QACD,OAAO,EAAE,aAAa,CAAA;QACtB,OAAO,EAAE,MAAM,CAAA;QACf,YAAY,EAAE,MAAM,CAAA;QACpB,UAAU,CAAC,EAAE,KAAK,CAAA;QAClB,UAAU,CAAC,EAAE,kBAAkB,CAAA;KAChC;IA6BD,OAAO,KAAK,KAAK,GAEhB;IAED,OAAO,KAAK,UAAU,GAErB;IAED,OAAO,KAAK,WAAW,GAEtB;IAED;;;;;;;;OAQG;IACH,OAAO,CAAC,eAAe;IAYvB;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,MAAM;IAId;;;;;;OAMG;IACG,QAAQ,IAAI,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC;IAQvD;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACG,SAAS,CACb,IAAI,EAAE,wBAAwB,GAAG;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GACnD,OAAO,CAAC,qBAAqB,CAAC;IAiDjC;;;;;;;;;OASG;IACG,gBAAgB,IAAI,OAAO,CAAC;QAChC,WAAW,EAAE,qBAAqB,CAAA;QAClC,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,GAAG,IAAI,CAAC;IAkBT;;;;;;;;;;;;;;;;;OAiBG;IACG,kBAAkB,CACtB,WAAW,EAAE,wBAAwB,EACrC,OAAO,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAO,GACjC,OAAO,CAAC;QAAE,WAAW,EAAE,qBAAqB,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IA8BjE;;;;;OAKG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAS7B;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,QAAQ;IAqBnE;;;;;;;;;OASG;IACG,GAAG,CACP,IAAI,EAAE,YAAY,EAClB,OAAO,GAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAO,GACrC,OAAO,CAAC,SAAS,CAAC;IAuErB;;;;;;;OAOG;IACG,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAM1D;;;;;;;;;;;;OAYG;IACG,GAAG,CACP,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,YAAY,EAClB,OAAO,GAAE;QACP,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,WAAW,CAAC,EAAE,OAAO,CAAA;KACjB,GACL,OAAO,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAI7B;;;;;;OAMG;YACW,SAAS;IAkBvB;;;;;;;;;OASG;IACG,IAAI,IAAI,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC;IAIrD;;;;;;;;;OASG;IACI,SAAS,IAAI,cAAc,CAAC,uBAAuB,CAAC;IAI3D;;;;;;;OAOG;IACI,SAAS,IAAI,cAAc,CAAC,eAAe,CAAC;IAInD;;;;;;;;;;;;;;;;;;;;;OAqBG;IACG,OAAO,CACX,OAAO,GAAE;QAAE,UAAU,CAAC,EAAE,iBAAiB,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO,GAC/D,OAAO,CAAC,WAAW,CAAC;IAmBvB;;;;;;OAMG;IACG,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC;IAQ3D;;;;;;;OAOG;IACG,SAAS,IAAI,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAOjD;;;;;OAKG;IACG,SAAS,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAQtD;;;;OAIG;IACG,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC;IAOlC;;;;;;OAMG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAOhC;;;;;OAKG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAOlC;;;;;OAKG;IACG,OAAO,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAOxC;;;;;;;;;;;;;;OAcG;IACG,OAAO,IAAI,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAOlD;;;;;;;OAOG;IACG,KAAK,IAAI,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;CAM5C"}
@@ -8,15 +8,15 @@
8
8
  */
9
9
  import { collectionPath, collectionItems, collectionPolicy, collectionLinkset, collectionBackend, collectionQuota, collectionQuery, resourcePath, toUrl } from './internal/paths.js';
10
10
  import { assertNotReserved } from './internal/reserved.js';
11
- import { ValidationError } from './errors.js';
12
11
  import { delegateGrantAt } from './internal/grant.js';
13
12
  import { send, readData } from './internal/request.js';
14
- import { CodecHolder, resolveCodec } from './internal/codec.js';
15
- import { buildPageWalk, collectPages, walkPages } from './internal/pagination.js';
16
- import { describeCollection } from './internal/describe.js';
17
- import { readEtag, writeHeaders } from './internal/conditional.js';
13
+ import { collectionCodecHolder } from './internal/codec.js';
14
+ import { collectionBackendFeatures } from './internal/features.js';
15
+ import { buildPageWalk, collectWalk, walkItems, walkPagesOrEmpty } from './internal/pagination.js';
16
+ import { describeCollection, describeCollectionResponse, unreadableDescriptionError } from './internal/describe.js';
17
+ import { encodedPrecondition, readEtag, writeHeaders } from './internal/conditional.js';
18
18
  import { sendEncodedWrite } from './internal/write.js';
19
- import { readPolicy, writePolicy, deletePolicy } from './internal/policy.js';
19
+ import { readPolicy, writePolicy, deletePolicy, isPublicPolicy, setPublicPolicy } from './internal/policy.js';
20
20
  import { createdId, dataOrNull } from './internal/content.js';
21
21
  import { Resource } from './Resource.js';
22
22
  export class Collection {
@@ -26,6 +26,12 @@ export class Collection {
26
26
  _capability;
27
27
  _encryptionOverride;
28
28
  _codecHolder;
29
+ /**
30
+ * The shared backend-feature probe for this collection (memoized on a
31
+ * definitive answer), consulted by the conditional-codec write path and
32
+ * shared with child resource handles the way the codec is.
33
+ */
34
+ _features;
29
35
  /**
30
36
  * @param options {object}
31
37
  * @param options.context {ClientContext} - Shared context (serverUrl, ezcap
@@ -53,12 +59,17 @@ export class Collection {
53
59
  this.id = collectionId;
54
60
  this._capability = capability;
55
61
  this._encryptionOverride = encryption;
56
- this._codecHolder = new CodecHolder(() => resolveCodec(this._context, {
57
- spaceId: this.spaceId,
58
- collectionId: this.id,
59
- override: this._encryptionOverride,
60
- capability: this._capability
61
- }));
62
+ this._codecHolder = collectionCodecHolder(context, {
63
+ spaceId,
64
+ collectionId,
65
+ override: encryption,
66
+ capability
67
+ });
68
+ this._features = collectionBackendFeatures(context, {
69
+ spaceId,
70
+ collectionId,
71
+ capability
72
+ });
62
73
  }
63
74
  get _path() {
64
75
  return collectionPath(this.spaceId, this.id);
@@ -75,11 +86,8 @@ export class Collection {
75
86
  * `replaceDescription` request bodies and their echoed return descriptions, so
76
87
  * the two paths cannot drift and a new writable field is added in one place.
77
88
  *
78
- * @param fields {object}
79
- * @param [fields.name] {string}
80
- * @param [fields.backend] {BackendReference}
81
- * @param [fields.encryption] {CollectionEncryption}
82
- * @returns {object}
89
+ * @param fields {CollectionWritableFields}
90
+ * @returns {CollectionWritableFields}
83
91
  */
84
92
  _writableFields(fields) {
85
93
  return {
@@ -135,13 +143,11 @@ export class Collection {
135
143
  * -- e.g. when creating a new collection through a handle (or use
136
144
  * `space.createCollection()`, which does not merge).
137
145
  *
138
- * @param desc {object}
139
- * @param [desc.name] {string}
140
- * @param [desc.backend] {BackendReference}
141
- * @param [desc.encryption] {CollectionEncryption} declare the client-side
142
- * encryption marker. Set-once on the server: it may be added to a Collection
143
- * that lacks one, but changing/clearing an existing marker is rejected
144
- * (`ConflictError`, `encryption-immutable`).
146
+ * @param desc {CollectionWritableFields} the fields to merge; `encryption`
147
+ * declares the client-side encryption marker, which is set-once on the
148
+ * server (it may be added to a Collection that lacks one, but
149
+ * changing/clearing an existing marker is rejected -- `ConflictError`,
150
+ * `encryption-immutable`)
145
151
  * @param [desc.force] {boolean} proceed even when the current description
146
152
  * is unreadable and `backend`/`encryption` are omitted (see above)
147
153
  * @returns {Promise<CollectionDescription>}
@@ -152,13 +158,14 @@ export class Collection {
152
158
  desc.backend === undefined &&
153
159
  desc.encryption === undefined &&
154
160
  !desc.force) {
155
- throw new ValidationError(`Cannot configure collection "${this.id}": its current description ` +
156
- 'is not readable with this capability (WAS returns 404 for both ' +
157
- 'not-found and unauthorized), so merging forward could silently ' +
158
- "drop an existing collection's backend or encryption marker. " +
159
- 'Supply `backend`/`encryption` explicitly, use a read-capable ' +
160
- 'capability, or pass `force: true` if you are creating a new ' +
161
- 'collection.');
161
+ throw unreadableDescriptionError({
162
+ operation: `configure collection "${this.id}"`,
163
+ consequence: "merging forward could silently drop an existing collection's " +
164
+ 'backend or encryption marker',
165
+ advice: 'Supply `backend`/`encryption` explicitly, use a read-capable ' +
166
+ 'capability, or pass `force: true` if you are creating a new ' +
167
+ 'collection.'
168
+ });
162
169
  }
163
170
  // Merge every current field forward (mirror `Space.configure`): a
164
171
  // replace-semantics server drops anything omitted from the PUT body, so
@@ -200,14 +207,13 @@ export class Collection {
200
207
  * @returns {Promise<{ description: CollectionDescription; etag?: string } | null>}
201
208
  */
202
209
  async describeWithEtag() {
203
- const response = await send(this._context, {
204
- path: this._path,
205
- method: 'GET',
206
- capability: this._capability,
207
- read: true
210
+ // The same GET as `describe()` (via the shared request shape), keeping the
211
+ // raw response so the ETag header can be read alongside the body.
212
+ const response = await describeCollectionResponse(this._context, {
213
+ spaceId: this.spaceId,
214
+ collectionId: this.id,
215
+ capability: this._capability
208
216
  });
209
- // `send({ read: true })` returns null on a masked 404; otherwise the body is
210
- // the description and the response carries the ETag header.
211
217
  const description = dataOrNull(response);
212
218
  if (response === null || description === null) {
213
219
  return null;
@@ -229,10 +235,7 @@ export class Collection {
229
235
  * operations build on (add/remove a reader is a CAS of the `encryption`
230
236
  * marker); it is not epoch-specific.
231
237
  *
232
- * @param description {object}
233
- * @param [description.name] {string}
234
- * @param [description.backend] {BackendReference}
235
- * @param [description.encryption] {CollectionEncryption}
238
+ * @param description {CollectionWritableFields}
236
239
  * @param options {object}
237
240
  * @param [options.ifMatch] {string} the prior `ETag`; the write applies only
238
241
  * if the description is unchanged
@@ -299,6 +302,9 @@ export class Collection {
299
302
  collectionId: this.id,
300
303
  resourceId,
301
304
  capability: options.capability ?? this._capability,
305
+ // Share this collection's memoized feature probe so per-resource handles
306
+ // do not each repeat the backend-descriptor round-trip.
307
+ features: () => this._features.get(),
302
308
  // A per-resource encryption override resolves its own codec (honoring the
303
309
  // override); without one, share this collection's resolved codec so the
304
310
  // resource handle does not repeat the marker-discovery round-trip. The two
@@ -328,10 +334,7 @@ export class Collection {
328
334
  // A codec may attach a create-if-absent precondition for its minted id (the
329
335
  // EDV codec guards a fresh insert with `If-None-Match: *`); plaintext add
330
336
  // carries none.
331
- const precondition = {
332
- ifMatch: encoded.ifMatch,
333
- ifNoneMatch: encoded.ifNoneMatch
334
- };
337
+ const precondition = encodedPrecondition(encoded);
335
338
  // A codec that mints its own id (e.g. the encrypting codec's EDV id) writes
336
339
  // by `PUT`; the identity codec returns no id and lets the server mint one
337
340
  // via `POST`.
@@ -447,8 +450,7 @@ export class Collection {
447
450
  * @returns {Promise<CollectionResourcesList | null>}
448
451
  */
449
452
  async list() {
450
- const walk = await this._listWalk();
451
- return walk === null ? null : collectPages(walk);
453
+ return collectWalk(await this._listWalk());
452
454
  }
453
455
  /**
454
456
  * Lazily yields the listing one page at a time, following the server's `next`
@@ -461,11 +463,7 @@ export class Collection {
461
463
  * @returns {AsyncGenerator<CollectionResourcesList>}
462
464
  */
463
465
  async *listPages() {
464
- const walk = await this._listWalk();
465
- if (walk === null) {
466
- return;
467
- }
468
- yield* walkPages(walk);
466
+ yield* walkPagesOrEmpty(await this._listWalk());
469
467
  }
470
468
  /**
471
469
  * Lazily yields each item across every page, flattening `listPages()`. Yields
@@ -476,9 +474,7 @@ export class Collection {
476
474
  * @returns {AsyncGenerator<ResourceSummary>}
477
475
  */
478
476
  async *listItems() {
479
- for await (const page of this.listPages()) {
480
- yield* page.items;
481
- }
477
+ yield* walkItems(this.listPages());
482
478
  }
483
479
  /**
484
480
  * Reads one page of the collection's replication change feed (the `changes`
@@ -567,8 +563,10 @@ export class Collection {
567
563
  * @returns {Promise<boolean>}
568
564
  */
569
565
  async isPublic() {
570
- const policy = await this.getPolicy();
571
- return policy?.type === 'PublicCanRead';
566
+ return isPublicPolicy(this._context, {
567
+ policyPath: this._policyPath,
568
+ capability: this._capability
569
+ });
572
570
  }
573
571
  /**
574
572
  * Makes the collection world-readable: every resource in it becomes readable
@@ -578,7 +576,10 @@ export class Collection {
578
576
  * @returns {Promise<void>}
579
577
  */
580
578
  async setPublic() {
581
- await this.setPolicy({ type: 'PublicCanRead' });
579
+ return setPublicPolicy(this._context, {
580
+ policyPath: this._policyPath,
581
+ capability: this._capability
582
+ });
582
583
  }
583
584
  /**
584
585
  * Removes the collection's access-control policy, reverting it to
@@ -1 +1 @@
1
- {"version":3,"file":"Collection.js","sourceRoot":"","sources":["../src/Collection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Collection.js","sourceRoot":"","sources":["../src/Collection.ts"],"names":[],"mappings":"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"}
@@ -25,6 +25,13 @@ export declare class Resource {
25
25
  * reset (e.g. after `configure()` adds the encryption marker) propagate here.
26
26
  */
27
27
  private readonly _codec;
28
+ /**
29
+ * Resolves the backend's advertised feature tokens: the parent collection's
30
+ * shared probe when this handle came from `collection.resource(id)`,
31
+ * otherwise one built (and memoized) for this handle. Consulted by the
32
+ * conditional-codec write path (see `upsertResource`).
33
+ */
34
+ private readonly _features;
28
35
  /**
29
36
  * @param options {object}
30
37
  * @param options.context {ClientContext}
@@ -36,17 +43,20 @@ export declare class Resource {
36
43
  * codec, so a resource handle obtained via `collection.resource(id)` does
37
44
  * not repeat the backend() round-trip. A standalone resource resolves its
38
45
  * own.
46
+ * @param [options.features] {function} resolver sharing the parent
47
+ * collection's backend-feature probe. A standalone resource probes its own.
39
48
  * @param [options.encryption] {EncryptionOverride} per-handle encryption
40
49
  * override for a standalone resource (ignored when `codec` is supplied --
41
50
  * the shared parent codec wins)
42
51
  */
43
- constructor({ context, spaceId, collectionId, resourceId, capability, codec, encryption }: {
52
+ constructor({ context, spaceId, collectionId, resourceId, capability, codec, features, encryption }: {
44
53
  context: ClientContext;
45
54
  spaceId: string;
46
55
  collectionId: string;
47
56
  resourceId: string;
48
57
  capability?: IZcap;
49
58
  codec?: () => Promise<ResourceCodec>;
59
+ features?: () => Promise<string[]>;
50
60
  encryption?: EncryptionOverride;
51
61
  });
52
62
  private get _path();
@@ -114,8 +124,9 @@ export declare class Resource {
114
124
  * automatically by the codec (the EDV `sequence` becomes the enforced ETag), so
115
125
  * the explicit options are for plaintext collections -- and because the codec
116
126
  * pre-reads the current document to compute them, updating an existing
117
- * encrypted document needs read access (a PUT-only capability can only create;
118
- * see `upsertResource`). Returns the new `etag`.
127
+ * encrypted document needs read access (a PUT-only capability can only
128
+ * create, and only against a backend advertising `conditional-writes`; see
129
+ * `upsertResource`). Returns the new `etag`.
119
130
  *
120
131
  * @param data {ResourceData}
121
132
  * @param options {object}
@@ -198,6 +209,19 @@ export declare class Resource {
198
209
  }): Promise<{
199
210
  etag?: string;
200
211
  }>;
212
+ /**
213
+ * The shared read-then-CAS body of {@link setName} / {@link setTags}: reads
214
+ * the current metadata, merges `patch` over its `custom`, and writes it back
215
+ * pinned to the read's `etag` (when the backend supports
216
+ * `conditional-writes`), so a concurrent metadata write surfaces as
217
+ * `PreconditionFailedError` instead of being silently erased by the
218
+ * full-replacement write.
219
+ *
220
+ * @param patch {ResourceMetadataCustom} the properties to merge over the
221
+ * current `custom`
222
+ * @returns {Promise<void>}
223
+ */
224
+ private _patchCustom;
201
225
  /**
202
226
  * Sets the resource's human-readable `name` (the value surfaced in collection
203
227
  * listings), preserving any existing `tags`. Convenience over `setMeta()`.
@@ -1 +1 @@
1
- {"version":3,"file":"Resource.d.ts","sourceRoot":"","sources":["../src/Resource.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Resource.d.ts","sourceRoot":"","sources":["../src/Resource.ts"],"names":[],"mappings":"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"}
package/dist/Resource.js CHANGED
@@ -2,15 +2,12 @@ import { resourcePath, resourcePolicy, resourceMeta } from './internal/paths.js'
2
2
  import { assertNotReserved } from './internal/reserved.js';
3
3
  import { WasServerError } from './errors.js';
4
4
  import { send } from './internal/request.js';
5
- import { CodecHolder, resolveCodec } from './internal/codec.js';
5
+ import { collectionCodecHolder } from './internal/codec.js';
6
+ import { collectionBackendFeatures } from './internal/features.js';
6
7
  import { writeHeaders, readEtag } from './internal/conditional.js';
8
+ import { ENCODER } from './internal/content.js';
7
9
  import { upsertResource } from './internal/write.js';
8
- import { readPolicy, writePolicy, deletePolicy } from './internal/policy.js';
9
- /**
10
- * A shared `TextEncoder` for re-serializing a pre-parsed JSON body to bytes in
11
- * `getBytes()` (stateless, so one instance is reused).
12
- */
13
- const ENCODER = new TextEncoder();
10
+ import { readPolicy, writePolicy, deletePolicy, isPublicPolicy, setPublicPolicy } from './internal/policy.js';
14
11
  /**
15
12
  * Re-serializes a read response's pre-parsed JSON body to a string, or returns
16
13
  * `undefined` when the body was not pre-parsed (a non-JSON content-type, whose
@@ -50,6 +47,13 @@ export class Resource {
50
47
  * reset (e.g. after `configure()` adds the encryption marker) propagate here.
51
48
  */
52
49
  _codec;
50
+ /**
51
+ * Resolves the backend's advertised feature tokens: the parent collection's
52
+ * shared probe when this handle came from `collection.resource(id)`,
53
+ * otherwise one built (and memoized) for this handle. Consulted by the
54
+ * conditional-codec write path (see `upsertResource`).
55
+ */
56
+ _features;
53
57
  /**
54
58
  * @param options {object}
55
59
  * @param options.context {ClientContext}
@@ -61,11 +65,13 @@ export class Resource {
61
65
  * codec, so a resource handle obtained via `collection.resource(id)` does
62
66
  * not repeat the backend() round-trip. A standalone resource resolves its
63
67
  * own.
68
+ * @param [options.features] {function} resolver sharing the parent
69
+ * collection's backend-feature probe. A standalone resource probes its own.
64
70
  * @param [options.encryption] {EncryptionOverride} per-handle encryption
65
71
  * override for a standalone resource (ignored when `codec` is supplied --
66
72
  * the shared parent codec wins)
67
73
  */
68
- constructor({ context, spaceId, collectionId, resourceId, capability, codec, encryption }) {
74
+ constructor({ context, spaceId, collectionId, resourceId, capability, codec, features, encryption }) {
69
75
  // Guard the id against the Reserved Path Segment Registry up front, so a
70
76
  // reserved id from caller input can never be mis-targeted at a
71
77
  // collection-level endpoint. `resourcePath(s, c, 'policy')` is byte-identical
@@ -84,14 +90,25 @@ export class Resource {
84
90
  this._codec = codec;
85
91
  }
86
92
  else {
87
- const holder = new CodecHolder(() => resolveCodec(this._context, {
88
- spaceId: this.spaceId,
89
- collectionId: this.collectionId,
93
+ const holder = collectionCodecHolder(context, {
94
+ spaceId,
95
+ collectionId,
90
96
  override: encryption,
91
- capability: this._capability
92
- }));
97
+ capability
98
+ });
93
99
  this._codec = () => holder.get();
94
100
  }
101
+ if (features) {
102
+ this._features = features;
103
+ }
104
+ else {
105
+ const probe = collectionBackendFeatures(context, {
106
+ spaceId,
107
+ collectionId,
108
+ capability
109
+ });
110
+ this._features = () => probe.get();
111
+ }
95
112
  }
96
113
  get _path() {
97
114
  return resourcePath(this.spaceId, this.collectionId, this.id);
@@ -187,8 +204,9 @@ export class Resource {
187
204
  * automatically by the codec (the EDV `sequence` becomes the enforced ETag), so
188
205
  * the explicit options are for plaintext collections -- and because the codec
189
206
  * pre-reads the current document to compute them, updating an existing
190
- * encrypted document needs read access (a PUT-only capability can only create;
191
- * see `upsertResource`). Returns the new `etag`.
207
+ * encrypted document needs read access (a PUT-only capability can only
208
+ * create, and only against a backend advertising `conditional-writes`; see
209
+ * `upsertResource`). Returns the new `etag`.
192
210
  *
193
211
  * @param data {ResourceData}
194
212
  * @param options {object}
@@ -204,6 +222,7 @@ export class Resource {
204
222
  codec,
205
223
  id: this.id,
206
224
  data,
225
+ features: this._features,
207
226
  contentType: options.contentType,
208
227
  capability: this._capability,
209
228
  precondition: {
@@ -327,6 +346,22 @@ export class Resource {
327
346
  });
328
347
  return { etag: readEtag(response) };
329
348
  }
349
+ /**
350
+ * The shared read-then-CAS body of {@link setName} / {@link setTags}: reads
351
+ * the current metadata, merges `patch` over its `custom`, and writes it back
352
+ * pinned to the read's `etag` (when the backend supports
353
+ * `conditional-writes`), so a concurrent metadata write surfaces as
354
+ * `PreconditionFailedError` instead of being silently erased by the
355
+ * full-replacement write.
356
+ *
357
+ * @param patch {ResourceMetadataCustom} the properties to merge over the
358
+ * current `custom`
359
+ * @returns {Promise<void>}
360
+ */
361
+ async _patchCustom(patch) {
362
+ const current = await this.meta();
363
+ await this.setMeta({ custom: { ...current?.custom, ...patch } }, { ifMatch: current?.etag });
364
+ }
330
365
  /**
331
366
  * Sets the resource's human-readable `name` (the value surfaced in collection
332
367
  * listings), preserving any existing `tags`. Convenience over `setMeta()`.
@@ -339,8 +374,7 @@ export class Resource {
339
374
  * @returns {Promise<void>}
340
375
  */
341
376
  async setName(name) {
342
- const current = await this.meta();
343
- await this.setMeta({ custom: { ...current?.custom, name } }, { ifMatch: current?.etag });
377
+ return this._patchCustom({ name });
344
378
  }
345
379
  /**
346
380
  * Sets the resource's `tags`, preserving any existing `name`. Convenience over
@@ -350,8 +384,7 @@ export class Resource {
350
384
  * @returns {Promise<void>}
351
385
  */
352
386
  async setTags(tags) {
353
- const current = await this.meta();
354
- await this.setMeta({ custom: { ...current?.custom, tags } }, { ifMatch: current?.etag });
387
+ return this._patchCustom({ tags });
355
388
  }
356
389
  get _policyPath() {
357
390
  return resourcePolicy(this.spaceId, this.collectionId, this.id);
@@ -389,7 +422,10 @@ export class Resource {
389
422
  * @returns {Promise<void>}
390
423
  */
391
424
  async setPublic() {
392
- await this.setPolicy({ type: 'PublicCanRead' });
425
+ return setPublicPolicy(this._context, {
426
+ policyPath: this._policyPath,
427
+ capability: this._capability
428
+ });
393
429
  }
394
430
  /**
395
431
  * Returns `true` when this resource policy is `PublicCanRead`.
@@ -397,8 +433,10 @@ export class Resource {
397
433
  * @returns {Promise<boolean>}
398
434
  */
399
435
  async isPublic() {
400
- const policy = await this.getPolicy();
401
- return policy?.type === 'PublicCanRead';
436
+ return isPublicPolicy(this._context, {
437
+ policyPath: this._policyPath,
438
+ capability: this._capability
439
+ });
402
440
  }
403
441
  /**
404
442
  * Removes the resource's access-control policy, reverting it to