@interop/was-client 0.66.0 → 0.67.1

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 (95) hide show
  1. package/README.md +30 -28
  2. package/dist/Collection.d.ts +30 -41
  3. package/dist/Collection.d.ts.map +1 -1
  4. package/dist/Collection.js +35 -78
  5. package/dist/Collection.js.map +1 -1
  6. package/dist/Resource.d.ts +28 -41
  7. package/dist/Resource.d.ts.map +1 -1
  8. package/dist/Resource.js +29 -65
  9. package/dist/Resource.js.map +1 -1
  10. package/dist/Space.d.ts +14 -14
  11. package/dist/Space.d.ts.map +1 -1
  12. package/dist/Space.js +16 -16
  13. package/dist/Space.js.map +1 -1
  14. package/dist/WasClient.d.ts +3 -2
  15. package/dist/WasClient.d.ts.map +1 -1
  16. package/dist/WasClient.js +4 -7
  17. package/dist/WasClient.js.map +1 -1
  18. package/dist/codec.d.ts +2 -9
  19. package/dist/codec.d.ts.map +1 -1
  20. package/dist/codec.js +1 -1
  21. package/dist/codec.js.map +1 -1
  22. package/dist/edv/EdvCodec.d.ts +3 -3
  23. package/dist/edv/EdvCodec.d.ts.map +1 -1
  24. package/dist/edv/EdvCodec.js +22 -72
  25. package/dist/edv/EdvCodec.js.map +1 -1
  26. package/dist/edv/WasTransport.d.ts +30 -44
  27. package/dist/edv/WasTransport.d.ts.map +1 -1
  28. package/dist/edv/WasTransport.js +38 -119
  29. package/dist/edv/WasTransport.js.map +1 -1
  30. package/dist/edv/descriptorStore.d.ts +5 -7
  31. package/dist/edv/descriptorStore.d.ts.map +1 -1
  32. package/dist/edv/descriptorStore.js +3 -4
  33. package/dist/edv/descriptorStore.js.map +1 -1
  34. package/dist/edv/docCipher.d.ts +1 -2
  35. package/dist/edv/docCipher.d.ts.map +1 -1
  36. package/dist/edv/docCipher.js +1 -2
  37. package/dist/edv/docCipher.js.map +1 -1
  38. package/dist/edv/logGovernedDescriptorStore.d.ts.map +1 -1
  39. package/dist/edv/logGovernedDescriptorStore.js +1 -2
  40. package/dist/edv/logGovernedDescriptorStore.js.map +1 -1
  41. package/dist/errors.d.ts +8 -7
  42. package/dist/errors.d.ts.map +1 -1
  43. package/dist/errors.js +8 -7
  44. package/dist/errors.js.map +1 -1
  45. package/dist/index.d.ts +0 -1
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js.map +1 -1
  48. package/dist/internal/cas.d.ts +19 -19
  49. package/dist/internal/cas.d.ts.map +1 -1
  50. package/dist/internal/cas.js +30 -23
  51. package/dist/internal/cas.js.map +1 -1
  52. package/dist/internal/conditional.d.ts +17 -63
  53. package/dist/internal/conditional.d.ts.map +1 -1
  54. package/dist/internal/conditional.js +20 -76
  55. package/dist/internal/conditional.js.map +1 -1
  56. package/dist/internal/memo.d.ts +2 -2
  57. package/dist/internal/memo.js +2 -2
  58. package/dist/internal/meta.d.ts +13 -29
  59. package/dist/internal/meta.d.ts.map +1 -1
  60. package/dist/internal/meta.js +22 -41
  61. package/dist/internal/meta.js.map +1 -1
  62. package/dist/internal/paths.d.ts +1 -1
  63. package/dist/internal/paths.js +1 -1
  64. package/dist/internal/request.d.ts +0 -10
  65. package/dist/internal/request.d.ts.map +1 -1
  66. package/dist/internal/request.js.map +1 -1
  67. package/dist/internal/write.d.ts +12 -36
  68. package/dist/internal/write.d.ts.map +1 -1
  69. package/dist/internal/write.js +16 -87
  70. package/dist/internal/write.js.map +1 -1
  71. package/dist/log/logStore.d.ts +6 -8
  72. package/dist/log/logStore.d.ts.map +1 -1
  73. package/dist/log/logStore.js +7 -10
  74. package/dist/log/logStore.js.map +1 -1
  75. package/dist/sync/index.d.ts +9 -5
  76. package/dist/sync/index.d.ts.map +1 -1
  77. package/dist/sync/index.js +9 -5
  78. package/dist/sync/index.js.map +1 -1
  79. package/dist/sync/port.d.ts +3 -7
  80. package/dist/sync/port.d.ts.map +1 -1
  81. package/dist/sync/port.js +4 -20
  82. package/dist/sync/port.js.map +1 -1
  83. package/dist/sync/predicates.d.ts +21 -2
  84. package/dist/sync/predicates.d.ts.map +1 -1
  85. package/dist/sync/predicates.js +23 -2
  86. package/dist/sync/predicates.js.map +1 -1
  87. package/dist/sync/types.d.ts +8 -9
  88. package/dist/sync/types.d.ts.map +1 -1
  89. package/dist/types.d.ts +4 -3
  90. package/dist/types.d.ts.map +1 -1
  91. package/package.json +3 -3
  92. package/dist/internal/features.d.ts +0 -111
  93. package/dist/internal/features.d.ts.map +0 -1
  94. package/dist/internal/features.js +0 -197
  95. package/dist/internal/features.js.map +0 -1
@@ -2,16 +2,15 @@
2
2
  * Copyright (c) 2026 Interop Alliance. All rights reserved.
3
3
  */
4
4
  /**
5
- * Helpers for conditional writes (the server's `conditional-writes` feature):
5
+ * Helpers for conditional writes (a baseline WAS server requirement):
6
6
  * assembling a write's request headers from an optional content-type plus the
7
7
  * `If-Match` / `If-None-Match: *` preconditions, reading the `ETag` a write
8
8
  * response returns, checking a caller's precondition against the document a
9
- * conditional codec's write path pre-read, and refusing a precondition the
10
- * backend cannot be shown to enforce.
9
+ * conditional codec's write path pre-read, and refusing a write whose pin the
10
+ * read it is based on never supplied.
11
11
  */
12
12
  import type { EncodedWrite, ResponseLike } from '../codec.js';
13
13
  import { NotSupportedError } from '../errors.js';
14
- import type { FeatureProbe } from './features.js';
15
14
  /**
16
15
  * The request header the server reads a content write's key-epoch id from,
17
16
  * stamping it onto the Resource's metadata (an absent header clears any prior
@@ -85,73 +84,28 @@ export declare function writeHeaders({ contentType, precondition, epoch }: {
85
84
  epoch?: string;
86
85
  }): Record<string, string> | undefined;
87
86
  /**
88
- * The refusal for a guarded write whose guard the backend cannot be shown to
89
- * enforce. Every such gate builds its error here, so the messages do not
90
- * drift apart. The reasons:
87
+ * The refusal for a guarded write whose pin the read it is based on never
88
+ * supplied: the read returned no `ETag` validator, so the write would go out
89
+ * with no `If-Match` at all. Every such gate builds its error here, so the
90
+ * messages do not drift apart.
91
91
  *
92
- * - `no-validator`: the read the write is pinned to returned no `ETag`, so the
93
- * write would go out with no `If-Match` at all.
94
- * - `no-feature`: the backend descriptor was read and does not list
95
- * `conditional-writes`. Such a backend may serve an `ETag` on reads and still
96
- * ignore `If-Match` / `If-None-Match` on writes.
92
+ * A WAS server versions every resource, so a missing validator is a transport
93
+ * or deployment problem, not a server declining to version. Most often it is a
94
+ * browser client whose CORS configuration does not expose `ETag` to script.
97
95
  *
98
96
  * @param options {object}
99
97
  * @param options.operation {string} what was refused, as the message's
100
98
  * opening clause (e.g. `Cannot append to the resource log`)
101
- * @param options.reason {'no-validator' | 'no-feature'}
102
99
  * @returns {NotSupportedError}
103
100
  */
104
- export declare function unenforcedPreconditionError({ operation, reason }: {
101
+ export declare function unenforcedPreconditionError({ operation }: {
105
102
  operation: string;
106
- reason: 'no-validator' | 'no-feature';
107
103
  }): NotSupportedError;
108
- /**
109
- * Refuses a write that names a precondition the backend cannot be shown to
110
- * enforce, throwing {@link unenforcedPreconditionError}. A write that names
111
- * none (see {@link namedPrecondition}) never probes the backend.
112
- *
113
- * A descriptor that could not be read at all is not evidence either way, and
114
- * the write proceeds. The probe reads a collection-level path
115
- * (`GET .../backend`), so a capability whose `invocationTarget` sits below the
116
- * Collection -- one delegated for a single Resource -- can never read it, and
117
- * WAS masks that as a 404. Refusing there would lock every such capability out
118
- * of conditional writes for the handle's lifetime, and would do the same to a
119
- * handle whose collection was briefly absent, since the probe caches a
120
- * definitive answer. The server still answers the write on its own terms: a
121
- * 412 where the precondition fails, a 404 where the collection is gone.
122
- *
123
- * A transient probe failure (a network error, a `401`, a `5xx`) propagates as
124
- * the probe's own error, so a retrying caller still sees it as transient.
125
- *
126
- * @param options {object}
127
- * @param options.features {FeatureProbe} the handle's backend-feature probe
128
- * @param [options.precondition] {WritePrecondition} the write's precondition
129
- * @param options.operation {string} what would be refused, as the message's
130
- * opening clause
131
- * @returns {Promise<void>}
132
- */
133
- export declare function assertPreconditionEnforced({ features, precondition, operation }: {
134
- features: FeatureProbe;
135
- precondition?: WritePrecondition;
136
- operation: string;
137
- }): Promise<void>;
138
- /**
139
- * Whether a precondition sent to this backend can be relied on: it advertises
140
- * `conditional-writes`, or its descriptor could not be read at all and is
141
- * therefore no evidence against it (see {@link assertPreconditionEnforced}).
142
- *
143
- * The predicate behind the refusal, for the one caller that degrades instead
144
- * of refusing: `patchCustom`'s compare-and-swap, whose pin is its own and
145
- * whose documented fallback is a last-write-wins update.
146
- *
147
- * @param features {FeatureProbe}
148
- * @returns {Promise<boolean>}
149
- */
150
- export declare function preconditionsEnforced(features: FeatureProbe): Promise<boolean>;
151
104
  /**
152
105
  * Reads the strong `ETag` validator a write/read response returned, or
153
- * `undefined` when the backend sent none (it does not advertise the
154
- * `conditional-writes` feature).
106
+ * `undefined` when none reached the client (a WAS server serves one on every
107
+ * resource; a browser client can still be denied it by a CORS configuration
108
+ * that does not expose the header).
155
109
  *
156
110
  * @param response {ResponseLike | null}
157
111
  * @returns {string | undefined}
@@ -172,9 +126,9 @@ export declare function readEtag(response: ResponseLike | null): string | undefi
172
126
  *
173
127
  * The thrown error is the same `PreconditionFailedError` (412) the server
174
128
  * would answer with, so a compare-and-swap retry loop needs no special case
175
- * for an encrypted collection. A backend that returned no `ETag` on the
176
- * pre-read advertises no `conditional-writes` feature, so there is nothing to
177
- * compare against and the caller's `ifMatch` is left to the server.
129
+ * for an encrypted collection. A pre-read that carried no `ETag` leaves
130
+ * nothing to compare against locally, and the caller's `ifMatch` is left to
131
+ * the server.
178
132
  *
179
133
  * @param options {object}
180
134
  * @param options.path {string} the resource path written
@@ -1 +1 @@
1
- {"version":3,"file":"conditional.d.ts","sourceRoot":"","sources":["../../src/internal/conditional.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC7D,OAAO,EACL,iBAAiB,EAGlB,MAAM,cAAc,CAAA;AACrB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAEjD;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,cAAc,CAAA;AAE3C;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,YAAY,GAAG,iBAAiB,CAE5E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,YAAY,CAAC,EAAE,iBAAiB,GAC/B,iBAAiB,GAAG,SAAS,CAK/B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CACtC,YAAY,CAAC,EAAE,iBAAiB,GAC/B,IAAI,CAQN;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,YAAY,CAAC,EAC3B,WAAW,EACX,YAAiB,EACjB,KAAK,EACN,EAAE;IACD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,iBAAiB,CAAA;IAChC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAiBrC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,2BAA2B,CAAC,EAC1C,SAAS,EACT,MAAM,EACP,EAAE;IACD,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,cAAc,GAAG,YAAY,CAAA;CACtC,GAAG,iBAAiB,CAiBpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,0BAA0B,CAAC,EAC/C,QAAQ,EACR,YAAY,EACZ,SAAS,EACV,EAAE;IACD,QAAQ,EAAE,YAAY,CAAA;IACtB,YAAY,CAAC,EAAE,iBAAiB,CAAA;IAChC,SAAS,EAAE,MAAM,CAAA;CAClB,GAAG,OAAO,CAAC,IAAI,CAAC,CAQhB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,YAAY,GACrB,OAAO,CAAC,OAAO,CAAC,CAKlB;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAE1E;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,gCAAgC,CAAC,EAC/C,IAAI,EACJ,OAAO,EACP,YAAY,EACb,EAAE;IACD,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,YAAY,GAAG,IAAI,CAAA;IAC5B,YAAY,CAAC,EAAE,iBAAiB,CAAA;CACjC,GAAG,IAAI,CAkCP"}
1
+ {"version":3,"file":"conditional.d.ts","sourceRoot":"","sources":["../../src/internal/conditional.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC7D,OAAO,EACL,iBAAiB,EAGlB,MAAM,cAAc,CAAA;AAErB;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,cAAc,CAAA;AAE3C;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,YAAY,GAAG,iBAAiB,CAE5E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,YAAY,CAAC,EAAE,iBAAiB,GAC/B,iBAAiB,GAAG,SAAS,CAK/B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CACtC,YAAY,CAAC,EAAE,iBAAiB,GAC/B,IAAI,CAQN;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,YAAY,CAAC,EAC3B,WAAW,EACX,YAAiB,EACjB,KAAK,EACN,EAAE;IACD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,iBAAiB,CAAA;IAChC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAiBrC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,2BAA2B,CAAC,EAC1C,SAAS,EACV,EAAE;IACD,SAAS,EAAE,MAAM,CAAA;CAClB,GAAG,iBAAiB,CASpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAE1E;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,gCAAgC,CAAC,EAC/C,IAAI,EACJ,OAAO,EACP,YAAY,EACb,EAAE;IACD,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,YAAY,GAAG,IAAI,CAAA;IAC5B,YAAY,CAAC,EAAE,iBAAiB,CAAA;CACjC,GAAG,IAAI,CAkCP"}
@@ -88,89 +88,33 @@ export function writeHeaders({ contentType, precondition = {}, epoch }) {
88
88
  return Object.keys(headers).length > 0 ? headers : undefined;
89
89
  }
90
90
  /**
91
- * The refusal for a guarded write whose guard the backend cannot be shown to
92
- * enforce. Every such gate builds its error here, so the messages do not
93
- * drift apart. The reasons:
91
+ * The refusal for a guarded write whose pin the read it is based on never
92
+ * supplied: the read returned no `ETag` validator, so the write would go out
93
+ * with no `If-Match` at all. Every such gate builds its error here, so the
94
+ * messages do not drift apart.
94
95
  *
95
- * - `no-validator`: the read the write is pinned to returned no `ETag`, so the
96
- * write would go out with no `If-Match` at all.
97
- * - `no-feature`: the backend descriptor was read and does not list
98
- * `conditional-writes`. Such a backend may serve an `ETag` on reads and still
99
- * ignore `If-Match` / `If-None-Match` on writes.
96
+ * A WAS server versions every resource, so a missing validator is a transport
97
+ * or deployment problem, not a server declining to version. Most often it is a
98
+ * browser client whose CORS configuration does not expose `ETag` to script.
100
99
  *
101
100
  * @param options {object}
102
101
  * @param options.operation {string} what was refused, as the message's
103
102
  * opening clause (e.g. `Cannot append to the resource log`)
104
- * @param options.reason {'no-validator' | 'no-feature'}
105
103
  * @returns {NotSupportedError}
106
104
  */
107
- export function unenforcedPreconditionError({ operation, reason }) {
108
- const consequence = 'so a concurrent change could be silently overwritten instead of ' +
109
- 'failing with a 412.';
110
- if (reason === 'no-validator') {
111
- return new NotSupportedError(`${operation}: the read it is pinned to returned no ETag validator, ` +
112
- `so the write would go out unconditionally, ${consequence} Use a ` +
113
- "backend that advertises the 'conditional-writes' feature.");
114
- }
115
- return new NotSupportedError(`${operation}: the write carries a precondition, but the collection's ` +
116
- "backend does not advertise the 'conditional-writes' feature and may " +
117
- `ignore it, ${consequence} Use a backend that advertises conditional ` +
118
- 'writes.');
119
- }
120
- /**
121
- * Refuses a write that names a precondition the backend cannot be shown to
122
- * enforce, throwing {@link unenforcedPreconditionError}. A write that names
123
- * none (see {@link namedPrecondition}) never probes the backend.
124
- *
125
- * A descriptor that could not be read at all is not evidence either way, and
126
- * the write proceeds. The probe reads a collection-level path
127
- * (`GET .../backend`), so a capability whose `invocationTarget` sits below the
128
- * Collection -- one delegated for a single Resource -- can never read it, and
129
- * WAS masks that as a 404. Refusing there would lock every such capability out
130
- * of conditional writes for the handle's lifetime, and would do the same to a
131
- * handle whose collection was briefly absent, since the probe caches a
132
- * definitive answer. The server still answers the write on its own terms: a
133
- * 412 where the precondition fails, a 404 where the collection is gone.
134
- *
135
- * A transient probe failure (a network error, a `401`, a `5xx`) propagates as
136
- * the probe's own error, so a retrying caller still sees it as transient.
137
- *
138
- * @param options {object}
139
- * @param options.features {FeatureProbe} the handle's backend-feature probe
140
- * @param [options.precondition] {WritePrecondition} the write's precondition
141
- * @param options.operation {string} what would be refused, as the message's
142
- * opening clause
143
- * @returns {Promise<void>}
144
- */
145
- export async function assertPreconditionEnforced({ features, precondition, operation }) {
146
- if (namedPrecondition(precondition) === undefined) {
147
- return;
148
- }
149
- if (await preconditionsEnforced(features)) {
150
- return;
151
- }
152
- throw unenforcedPreconditionError({ operation, reason: 'no-feature' });
153
- }
154
- /**
155
- * Whether a precondition sent to this backend can be relied on: it advertises
156
- * `conditional-writes`, or its descriptor could not be read at all and is
157
- * therefore no evidence against it (see {@link assertPreconditionEnforced}).
158
- *
159
- * The predicate behind the refusal, for the one caller that degrades instead
160
- * of refusing: `patchCustom`'s compare-and-swap, whose pin is its own and
161
- * whose documented fallback is a last-write-wins update.
162
- *
163
- * @param features {FeatureProbe}
164
- * @returns {Promise<boolean>}
165
- */
166
- export async function preconditionsEnforced(features) {
167
- return ((await features.has('conditional-writes')) ||
168
- (await features.descriptorAbsent()));
105
+ export function unenforcedPreconditionError({ operation }) {
106
+ return new NotSupportedError(`${operation}: the read it is pinned to returned no ETag validator, so ` +
107
+ 'the write would go out unconditionally, and a concurrent change could ' +
108
+ 'be silently overwritten instead of failing with a 412. A WAS server ' +
109
+ 'serves an ETag on every resource read; check that the response is not ' +
110
+ 'losing the header on the way (a browser client needs `ETag` in the ' +
111
+ "server's `Access-Control-Expose-Headers`).");
169
112
  }
170
113
  /**
171
114
  * Reads the strong `ETag` validator a write/read response returned, or
172
- * `undefined` when the backend sent none (it does not advertise the
173
- * `conditional-writes` feature).
115
+ * `undefined` when none reached the client (a WAS server serves one on every
116
+ * resource; a browser client can still be denied it by a CORS configuration
117
+ * that does not expose the header).
174
118
  *
175
119
  * @param response {ResponseLike | null}
176
120
  * @returns {string | undefined}
@@ -193,9 +137,9 @@ export function readEtag(response) {
193
137
  *
194
138
  * The thrown error is the same `PreconditionFailedError` (412) the server
195
139
  * would answer with, so a compare-and-swap retry loop needs no special case
196
- * for an encrypted collection. A backend that returned no `ETag` on the
197
- * pre-read advertises no `conditional-writes` feature, so there is nothing to
198
- * compare against and the caller's `ifMatch` is left to the server.
140
+ * for an encrypted collection. A pre-read that carried no `ETag` leaves
141
+ * nothing to compare against locally, and the caller's `ifMatch` is left to
142
+ * the server.
199
143
  *
200
144
  * @param options {object}
201
145
  * @param options.path {string} the resource path written
@@ -1 +1 @@
1
- {"version":3,"file":"conditional.js","sourceRoot":"","sources":["../../src/internal/conditional.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"conditional.js","sourceRoot":"","sources":["../../src/internal/conditional.ts"],"names":[],"mappings":"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"}
@@ -3,8 +3,8 @@
3
3
  */
4
4
  /**
5
5
  * The shared "memoize an in-flight promise, but only cache a success" helper.
6
- * Several lazily-resolved singletons across the client -- a handle's codec, a
7
- * backend-feature probe, a lazily-unwrapped epoch key -- want the same three
6
+ * Several lazily-resolved singletons across the client -- a handle's codec,
7
+ * the service description, a lazily-unwrapped epoch key -- want the same three
8
8
  * properties: concurrent callers share one round-trip, a rejection is not
9
9
  * cached (so the next call retries rather than replaying a stale failure), and
10
10
  * a reset drops whatever is held. Written once here so the three cannot drift
@@ -3,8 +3,8 @@
3
3
  */
4
4
  /**
5
5
  * The shared "memoize an in-flight promise, but only cache a success" helper.
6
- * Several lazily-resolved singletons across the client -- a handle's codec, a
7
- * backend-feature probe, a lazily-unwrapped epoch key -- want the same three
6
+ * Several lazily-resolved singletons across the client -- a handle's codec,
7
+ * the service description, a lazily-unwrapped epoch key -- want the same three
8
8
  * properties: concurrent callers share one round-trip, a rejection is not
9
9
  * cached (so the next call retries rather than replaying a stale failure), and
10
10
  * a reset drops whatever is held. Written once here so the three cannot drift
@@ -1,6 +1,5 @@
1
1
  import type { MetaReadSlot, MetaWriteSlot, ResourceCodec } from '../codec.js';
2
2
  import type { ClientContext } from './request.js';
3
- import type { FeatureProbe } from './features.js';
4
3
  import type { IZcap, ResourceMetadataCustom, ResourceMetadataCustomInput } from '../types.js';
5
4
  /**
6
5
  * Reads a metadata document and decodes its user-writable `custom` value.
@@ -53,22 +52,16 @@ export declare function readMeta<Metadata extends {
53
52
  * properties, as a full replacement
54
53
  * @param options.slot {MetaWriteSlot} the `meta` slot being written, which
55
54
  * an encrypting codec binds into the envelope
56
- * @param options.features {FeatureProbe} the handle's backend-feature probe.
57
- * A Resource's metadata validator is a Resource-level validator, so a named
58
- * precondition is refused when the backend advertises no `conditional-writes`
59
- * (unlike the Collection Metadata object's `metaVersion`, which a server
60
- * maintains regardless and `Collection.setMeta` therefore does not gate)
61
55
  * @param [options.ifMatch] {string} update only if the `meta` ETag matches
62
56
  * @param [options.ifNoneMatch] {boolean} write only if no metadata is set
63
57
  * @param [options.capability] {IZcap}
64
58
  * @returns {Promise<{ etag?: string }>} the metadata's new ETag
65
59
  */
66
- export declare function writeMeta(context: ClientContext, { metaPath, codec: codecPromise, custom, slot, features, ifMatch, ifNoneMatch, capability }: {
60
+ export declare function writeMeta(context: ClientContext, { metaPath, codec: codecPromise, custom, slot, ifMatch, ifNoneMatch, capability }: {
67
61
  metaPath: string;
68
62
  codec: Promise<ResourceCodec>;
69
63
  custom: ResourceMetadataCustomInput;
70
64
  slot: MetaWriteSlot;
71
- features: FeatureProbe;
72
65
  ifMatch?: string;
73
66
  ifNoneMatch?: boolean;
74
67
  capability?: IZcap;
@@ -78,35 +71,26 @@ export declare function writeMeta(context: ClientContext, { metaPath, codec: cod
78
71
  /**
79
72
  * The shared read-then-CAS body of the handles' `setName` / `setTags`: reads
80
73
  * the current metadata, merges `patch` over its `custom`, and writes it back
81
- * pinned to the read's `etag` (when the backend supports `conditional-writes`),
82
- * so a concurrent metadata write is rebased on rather than silently erased by
83
- * the full-replacement write.
74
+ * pinned to the read's `etag`, so a concurrent metadata write is rebased on
75
+ * rather than silently erased by the full-replacement write.
84
76
  *
85
77
  * A lost race (`412`) re-reads and re-applies the patch, up to the shared
86
- * compare-and-swap attempt limit. A handle whose metadata cannot be read at
87
- * all patches nothing onto an empty object: the write it drives is the one
88
- * that refuses (`Collection.setMeta` throws `NotFoundError`), so a masked 404
89
- * cannot turn a rename into a create. At Collection level that is not a rare event:
90
- * one `metaVersion` covers the configuration members and the annotations
91
- * alike, so a concurrent `configure` -- or an epoch rotation -- legitimately
92
- * invalidates an in-flight annotation write.
78
+ * compare-and-swap attempt limit. That is not a rare event at Collection
79
+ * level: one `metaVersion` covers the configuration members and the
80
+ * annotations alike, so a concurrent `configure` -- or an epoch rotation --
81
+ * legitimately invalidates an in-flight annotation write.
93
82
  *
94
- * `features` is the Resource side's: a Resource's metadata validator is
95
- * gated on `conditional-writes`, so on a backend that advertises none the read
96
- * reports no validator and the loop takes its `allowUnconditional` path -- the
97
- * same last-write-wins update a backend serving no validator at all gets. That
98
- * keeps `setName` / `setTags` working there rather than refusing, which is what
99
- * `setMeta` does for a precondition the caller named itself. The Collection
100
- * side passes none: its `metaVersion` is maintained regardless of the backend
101
- * feature, so its pin always stands.
83
+ * A handle whose metadata cannot be read at all is refused with
84
+ * `NotFoundError` rather than patched onto an empty object, so a masked 404
85
+ * cannot turn a rename into a create. A read that carried no validator is
86
+ * refused by the compare-and-swap loop: the full-replacement write would go
87
+ * out with no `If-Match` at all.
102
88
  *
103
89
  * @param handle {object} the Collection or Resource handle to patch
104
90
  * @param patch {ResourceMetadataCustom} the properties to merge over the
105
91
  * current `custom`
106
92
  * @param operation {string} what the caller is doing, for the exhaustion
107
93
  * error (e.g. `Metadata update`)
108
- * @param [features] {FeatureProbe} the handle's backend-feature probe, when
109
- * its metadata validator is gated on `conditional-writes`
110
94
  * @returns {Promise<void>}
111
95
  */
112
96
  export declare function patchCustom(handle: {
@@ -121,5 +105,5 @@ export declare function patchCustom(handle: {
121
105
  }): Promise<{
122
106
  etag?: string;
123
107
  }>;
124
- }, patch: ResourceMetadataCustom, operation?: string, features?: FeatureProbe): Promise<void>;
108
+ }, patch: ResourceMetadataCustom, operation?: string): Promise<void>;
125
109
  //# sourceMappingURL=meta.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../src/internal/meta.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAQjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAEjD,OAAO,KAAK,EACV,KAAK,EACL,sBAAsB,EACtB,2BAA2B,EAC5B,MAAM,aAAa,CAAA;AAEpB;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,QAAQ,CAC5B,QAAQ,SAAS;IAAE,MAAM,CAAC,EAAE,sBAAsB,CAAA;CAAE,EAEpD,OAAO,EAAE,aAAa,EACtB,EACE,QAAQ,EACR,KAAK,EAAE,YAAY,EACnB,OAAO,EACP,IAAI,EACJ,UAAU,EACV,QAAQ,EACT,EAAE;IACD,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,CAAA;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,YAAY,CAAA;IAClB,UAAU,CAAC,EAAE,KAAK,CAAA;IAClB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE;QAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QACjC,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,KAAK,IAAI,CAAA;CACX,GACA,OAAO,CAAC,CAAC,QAAQ,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,IAAI,CAAC,CA4ChD;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,SAAS,CAC7B,OAAO,EAAE,aAAa,EACtB,EACE,QAAQ,EACR,KAAK,EAAE,YAAY,EACnB,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,WAAW,EACX,UAAU,EACX,EAAE;IACD,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,CAAA;IAC7B,MAAM,EAAE,2BAA2B,CAAA;IACnC,IAAI,EAAE,aAAa,CAAA;IACnB,QAAQ,EAAE,YAAY,CAAA;IACtB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,UAAU,CAAC,EAAE,KAAK,CAAA;CACnB,GACA,OAAO,CAAC;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAgB5B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE;IACN,IAAI,IAAI,OAAO,CAAC;QAAE,MAAM,CAAC,EAAE,sBAAsB,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAA;IAC1E,OAAO,CACL,IAAI,EAAE;QAAE,MAAM,CAAC,EAAE,sBAAsB,CAAA;KAAE,EACzC,OAAO,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5B,OAAO,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAC9B,EACD,KAAK,EAAE,sBAAsB,EAC7B,SAAS,SAAoB,EAC7B,QAAQ,CAAC,EAAE,YAAY,GACtB,OAAO,CAAC,IAAI,CAAC,CAuBf"}
1
+ {"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../src/internal/meta.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAIjD,OAAO,KAAK,EACV,KAAK,EACL,sBAAsB,EACtB,2BAA2B,EAC5B,MAAM,aAAa,CAAA;AAEpB;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,QAAQ,CAC5B,QAAQ,SAAS;IAAE,MAAM,CAAC,EAAE,sBAAsB,CAAA;CAAE,EAEpD,OAAO,EAAE,aAAa,EACtB,EACE,QAAQ,EACR,KAAK,EAAE,YAAY,EACnB,OAAO,EACP,IAAI,EACJ,UAAU,EACV,QAAQ,EACT,EAAE;IACD,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,CAAA;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,YAAY,CAAA;IAClB,UAAU,CAAC,EAAE,KAAK,CAAA;IAClB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE;QAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QACjC,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,KAAK,IAAI,CAAA;CACX,GACA,OAAO,CAAC,CAAC,QAAQ,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,IAAI,CAAC,CA4ChD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,SAAS,CAC7B,OAAO,EAAE,aAAa,EACtB,EACE,QAAQ,EACR,KAAK,EAAE,YAAY,EACnB,MAAM,EACN,IAAI,EACJ,OAAO,EACP,WAAW,EACX,UAAU,EACX,EAAE;IACD,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,CAAA;IAC7B,MAAM,EAAE,2BAA2B,CAAA;IACnC,IAAI,EAAE,aAAa,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,UAAU,CAAC,EAAE,KAAK,CAAA;CACnB,GACA,OAAO,CAAC;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAW5B;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE;IACN,IAAI,IAAI,OAAO,CAAC;QAAE,MAAM,CAAC,EAAE,sBAAsB,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAA;IAC1E,OAAO,CACL,IAAI,EAAE;QAAE,MAAM,CAAC,EAAE,sBAAsB,CAAA;KAAE,EACzC,OAAO,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5B,OAAO,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAC9B,EACD,KAAK,EAAE,sBAAsB,EAC7B,SAAS,SAAoB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAwBf"}
@@ -12,10 +12,10 @@
12
12
  * `Collection`, and `patchCustom` below drives both handles' read-modify-write
13
13
  * helpers through a bounded compare-and-swap.
14
14
  */
15
- import { WasServerError } from '../errors.js';
15
+ import { NotFoundError, WasServerError } from '../errors.js';
16
16
  import { compareAndSwap } from './cas.js';
17
17
  import { send } from './request.js';
18
- import { assertPreconditionEnforced, preconditionsEnforced, readEtag, writeHeaders } from './conditional.js';
18
+ import { readEtag, writeHeaders } from './conditional.js';
19
19
  import { withCodec } from './withCodec.js';
20
20
  /**
21
21
  * Reads a metadata document and decodes its user-writable `custom` value.
@@ -93,22 +93,12 @@ export async function readMeta(context, { metaPath, codec: codecPromise, subject
93
93
  * properties, as a full replacement
94
94
  * @param options.slot {MetaWriteSlot} the `meta` slot being written, which
95
95
  * an encrypting codec binds into the envelope
96
- * @param options.features {FeatureProbe} the handle's backend-feature probe.
97
- * A Resource's metadata validator is a Resource-level validator, so a named
98
- * precondition is refused when the backend advertises no `conditional-writes`
99
- * (unlike the Collection Metadata object's `metaVersion`, which a server
100
- * maintains regardless and `Collection.setMeta` therefore does not gate)
101
96
  * @param [options.ifMatch] {string} update only if the `meta` ETag matches
102
97
  * @param [options.ifNoneMatch] {boolean} write only if no metadata is set
103
98
  * @param [options.capability] {IZcap}
104
99
  * @returns {Promise<{ etag?: string }>} the metadata's new ETag
105
100
  */
106
- export async function writeMeta(context, { metaPath, codec: codecPromise, custom, slot, features, ifMatch, ifNoneMatch, capability }) {
107
- await assertPreconditionEnforced({
108
- features,
109
- precondition: { ifMatch, ifNoneMatch },
110
- operation: `Cannot write the metadata at "${metaPath}"`
111
- });
101
+ export async function writeMeta(context, { metaPath, codec: codecPromise, custom, slot, ifMatch, ifNoneMatch, capability }) {
112
102
  const codec = await codecPromise;
113
103
  const { custom: encoded } = await codec.encodeMeta({ custom, slot });
114
104
  const response = await send(context, {
@@ -123,47 +113,41 @@ export async function writeMeta(context, { metaPath, codec: codecPromise, custom
123
113
  /**
124
114
  * The shared read-then-CAS body of the handles' `setName` / `setTags`: reads
125
115
  * the current metadata, merges `patch` over its `custom`, and writes it back
126
- * pinned to the read's `etag` (when the backend supports `conditional-writes`),
127
- * so a concurrent metadata write is rebased on rather than silently erased by
128
- * the full-replacement write.
116
+ * pinned to the read's `etag`, so a concurrent metadata write is rebased on
117
+ * rather than silently erased by the full-replacement write.
129
118
  *
130
119
  * A lost race (`412`) re-reads and re-applies the patch, up to the shared
131
- * compare-and-swap attempt limit. A handle whose metadata cannot be read at
132
- * all patches nothing onto an empty object: the write it drives is the one
133
- * that refuses (`Collection.setMeta` throws `NotFoundError`), so a masked 404
134
- * cannot turn a rename into a create. At Collection level that is not a rare event:
135
- * one `metaVersion` covers the configuration members and the annotations
136
- * alike, so a concurrent `configure` -- or an epoch rotation -- legitimately
137
- * invalidates an in-flight annotation write.
120
+ * compare-and-swap attempt limit. That is not a rare event at Collection
121
+ * level: one `metaVersion` covers the configuration members and the
122
+ * annotations alike, so a concurrent `configure` -- or an epoch rotation --
123
+ * legitimately invalidates an in-flight annotation write.
138
124
  *
139
- * `features` is the Resource side's: a Resource's metadata validator is
140
- * gated on `conditional-writes`, so on a backend that advertises none the read
141
- * reports no validator and the loop takes its `allowUnconditional` path -- the
142
- * same last-write-wins update a backend serving no validator at all gets. That
143
- * keeps `setName` / `setTags` working there rather than refusing, which is what
144
- * `setMeta` does for a precondition the caller named itself. The Collection
145
- * side passes none: its `metaVersion` is maintained regardless of the backend
146
- * feature, so its pin always stands.
125
+ * A handle whose metadata cannot be read at all is refused with
126
+ * `NotFoundError` rather than patched onto an empty object, so a masked 404
127
+ * cannot turn a rename into a create. A read that carried no validator is
128
+ * refused by the compare-and-swap loop: the full-replacement write would go
129
+ * out with no `If-Match` at all.
147
130
  *
148
131
  * @param handle {object} the Collection or Resource handle to patch
149
132
  * @param patch {ResourceMetadataCustom} the properties to merge over the
150
133
  * current `custom`
151
134
  * @param operation {string} what the caller is doing, for the exhaustion
152
135
  * error (e.g. `Metadata update`)
153
- * @param [features] {FeatureProbe} the handle's backend-feature probe, when
154
- * its metadata validator is gated on `conditional-writes`
155
136
  * @returns {Promise<void>}
156
137
  */
157
- export async function patchCustom(handle, patch, operation = 'Metadata update', features) {
138
+ export async function patchCustom(handle, patch, operation = 'Metadata update') {
158
139
  await compareAndSwap({
159
140
  store: {
160
141
  read: async () => {
161
142
  const current = await handle.meta();
162
- const pinnable = features === undefined || (await preconditionsEnforced(features));
163
- const etag = pinnable ? current?.etag : undefined;
143
+ if (current === null) {
144
+ throw new NotFoundError(`${operation} failed: the metadata is not readable, so there is ` +
145
+ 'nothing to patch -- the target does not exist, or it is not ' +
146
+ 'visible with this capability (WAS returns 404 for both).');
147
+ }
164
148
  return {
165
- value: current?.custom ?? {},
166
- ...(etag !== undefined && { etag })
149
+ value: current.custom ?? {},
150
+ ...(current.etag !== undefined && { etag: current.etag })
167
151
  };
168
152
  },
169
153
  replace: async (custom, { ifMatch }) => {
@@ -171,9 +155,6 @@ export async function patchCustom(handle, patch, operation = 'Metadata update',
171
155
  }
172
156
  },
173
157
  operation,
174
- // A handle's name and tags stay writable on a backend that serves no
175
- // metadata validator; the write is then last-write-wins.
176
- allowUnconditional: true,
177
158
  mutate: custom => ({ ...custom, ...patch })
178
159
  });
179
160
  }
@@ -1 +1 @@
1
- {"version":3,"file":"meta.js","sourceRoot":"","sources":["../../src/internal/meta.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"meta.js","sourceRoot":"","sources":["../../src/internal/meta.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;GAUG;AACH,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAGzC,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAO1C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAG5B,OAAsB,EACtB,EACE,QAAQ,EACR,KAAK,EAAE,YAAY,EACnB,OAAO,EACP,IAAI,EACJ,UAAU,EACV,QAAQ,EAWT;IAED,0EAA0E;IAC1E,mCAAmC;IACnC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,MAAM,SAAS,CACvC,YAAY,EACZ,IAAI,CAAC,OAAO,EAAE;QACZ,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,KAAK;QACb,UAAU;QACV,IAAI,EAAE,IAAI;KACX,CAAC,CACH,CAAA;IACD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,OAAO,IAAI,CAAA;IACb,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAChC,yEAAyE;QACzE,uEAAuE;QACvE,yEAAyE;QACzE,+DAA+D;QAC/D,wEAAwE;QACxE,2EAA2E;QAC3E,6DAA6D;QAC7D,MAAM,IAAI,cAAc,CACtB,yBAAyB,OAAO,wBAAwB;YACtD,gBAAgB;YAChB,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,SAAS,KAAK,CAC7D,CAAA;IACH,CAAC;IACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAgB,CAAA;IAC1C,MAAM,gBAAgB,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAA;IAC3C,QAAQ,EAAE,CAAC;QACT,QAAQ,EAAE,QAAmC;QAC7C,GAAG,CAAC,gBAAgB,KAAK,SAAS,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC;KAClE,CAAC,CAAA;IACF,mEAAmE;IACnE,uEAAuE;IACvE,kEAAkE;IAClE,qEAAqE;IACrE,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,CAAA;IACxE,MAAM,OAAO,GAAG,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,CAAA;IACvC,OAAO,gBAAgB,KAAK,SAAS;QACnC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE;QACxC,CAAC,CAAC,OAAO,CAAA;AACb,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,OAAsB,EACtB,EACE,QAAQ,EACR,KAAK,EAAE,YAAY,EACnB,MAAM,EACN,IAAI,EACJ,OAAO,EACP,WAAW,EACX,UAAU,EASX;IAED,MAAM,KAAK,GAAG,MAAM,YAAY,CAAA;IAChC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;IACpE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE;QACnC,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,KAAK;QACb,UAAU;QACV,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE;QACzB,OAAO,EAAE,YAAY,CAAC,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,CAAC;KAClE,CAAC,CAAA;IACF,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAA;AACrC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,MAMC,EACD,KAA6B,EAC7B,SAAS,GAAG,iBAAiB;IAE7B,MAAM,cAAc,CAAyB;QAC3C,KAAK,EAAE;YACL,IAAI,EAAE,KAAK,IAAI,EAAE;gBACf,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;gBACnC,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;oBACrB,MAAM,IAAI,aAAa,CACrB,GAAG,SAAS,qDAAqD;wBAC/D,8DAA8D;wBAC9D,0DAA0D,CAC7D,CAAA;gBACH,CAAC;gBACD,OAAO;oBACL,KAAK,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;oBAC3B,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;iBAC1D,CAAA;YACH,CAAC;YACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;gBACrC,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;YAC/C,CAAC;SACF;QACD,SAAS;QACT,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;KAC5C,CAAC,CAAA;AACJ,CAAC"}
@@ -122,7 +122,7 @@ export declare function resourceMeta(spaceId: string, collectionId: string, reso
122
122
  export declare function resourcePolicy(spaceId: string, collectionId: string, resourceId: string): string;
123
123
  /**
124
124
  * `/space/:spaceId/:collectionId/:resourceId/chunks/:chunkIndex` -- a single
125
- * stored chunk of a chunked Resource (the `chunked-streams` feature). Member
125
+ * stored chunk of a chunked Resource. Member
126
126
  * form, no trailing slash: get / put / delete one chunk by its ordinal index.
127
127
  * The `chunkIndex` is a non-negative integer, emitted verbatim (it is never a
128
128
  * reserved or dot segment, so it needs no percent-encoding).
@@ -274,7 +274,7 @@ export function resourcePolicy(spaceId, collectionId, resourceId) {
274
274
  }
275
275
  /**
276
276
  * `/space/:spaceId/:collectionId/:resourceId/chunks/:chunkIndex` -- a single
277
- * stored chunk of a chunked Resource (the `chunked-streams` feature). Member
277
+ * stored chunk of a chunked Resource. Member
278
278
  * form, no trailing slash: get / put / delete one chunk by its ordinal index.
279
279
  * The `chunkIndex` is a non-negative integer, emitted verbatim (it is never a
280
280
  * reserved or dot segment, so it needs no percent-encoding).
@@ -13,7 +13,6 @@
13
13
  import type { ZcapClient } from '@interop/ezcap';
14
14
  import type { HttpResponse } from '@interop/http-client';
15
15
  import type { EncryptionProvider } from '../codec.js';
16
- import type { BackendFeatures } from './features.js';
17
16
  import type { IZcap, RequestInput, ServiceInfo } from '../types.js';
18
17
  /**
19
18
  * The shared context threaded through every handle: the server base URL, the
@@ -28,15 +27,6 @@ export interface ClientContext {
28
27
  controllerDid: string;
29
28
  encryption?: EncryptionProvider;
30
29
  service: () => Promise<ServiceInfo>;
31
- /**
32
- * The client's shared backend-feature probes, keyed by descriptor request
33
- * (collection path plus bound capability id). Handles built separately --
34
- * `fromCapability` per resource, `collection(id)` in a loop -- then share one
35
- * `GET .../backend` instead of repeating it per handle. Optional: a context
36
- * assembled without one (a test fixture, `WasTransport`'s own requester)
37
- * simply builds an unshared probe per handle, as before.
38
- */
39
- backendFeatures?: Map<string, BackendFeatures>;
40
30
  }
41
31
  /**
42
32
  * A single signed request: the public `RequestInput` shape (either `path`,
@@ -1 +1 @@
1
- {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/internal/request.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAKxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAErD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AACpD,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEnE;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,UAAU,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,kBAAkB,CAAA;IAC/B,OAAO,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,CAAA;IACnC;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;CAC/C;AAED;;;;GAIG;AACH,MAAM,WAAW,SAAU,SAAQ,YAAY;IAC7C;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IACd;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAYD;;;;;;;;;;GAUG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,SAAS,GACf,OAAO,CAAC,YAAY,CAAC,CAcvB;AAED;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC,QAAQ,CAAC,CAMnB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE;IAC3C,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,IAAI,CAAC,EAAE,OAAO,CAAA;CACf,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CA4B/B;AAED;;;;;;;;GAQG;AACH,wBAAsB,IAAI,CACxB,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,SAAS,GACf,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAe9B;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,QAAQ,CAAC,CAAC,EAC9B,OAAO,EAAE,aAAa,EACtB,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,KAAK,CAAA;CAAE,GACzD,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAQnB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,EACtC,OAAO,EAAE,aAAa,EACtB,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,KAAK,CAAA;CAAE,GACzD,OAAO,CAAC;IAAE,IAAI,EAAE,CAAC,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAY5C"}
1
+ {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/internal/request.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAKxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEnE;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,UAAU,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,kBAAkB,CAAA;IAC/B,OAAO,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,CAAA;CACpC;AAED;;;;GAIG;AACH,MAAM,WAAW,SAAU,SAAQ,YAAY;IAC7C;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IACd;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAYD;;;;;;;;;;GAUG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,SAAS,GACf,OAAO,CAAC,YAAY,CAAC,CAcvB;AAED;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC,QAAQ,CAAC,CAMnB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE;IAC3C,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,IAAI,CAAC,EAAE,OAAO,CAAA;CACf,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CA4B/B;AAED;;;;;;;;GAQG;AACH,wBAAsB,IAAI,CACxB,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,SAAS,GACf,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAe9B;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,QAAQ,CAAC,CAAC,EAC9B,OAAO,EAAE,aAAa,EACtB,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,KAAK,CAAA;CAAE,GACzD,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAQnB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,EACtC,OAAO,EAAE,aAAa,EACtB,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,KAAK,CAAA;CAAE,GACzD,OAAO,CAAC;IAAE,IAAI,EAAE,CAAC,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAY5C"}
@@ -1 +1 @@
1
- {"version":3,"file":"request.js","sourceRoot":"","sources":["../../src/internal/request.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"request.js","sourceRoot":"","sources":["../../src/internal/request.ts"],"names":[],"mappings":"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"}