@interop/was-client 0.64.0 → 0.66.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +31 -23
- package/dist/Collection.d.ts +26 -2
- package/dist/Collection.d.ts.map +1 -1
- package/dist/Collection.js +49 -39
- package/dist/Collection.js.map +1 -1
- package/dist/Resource.d.ts +10 -4
- package/dist/Resource.d.ts.map +1 -1
- package/dist/Resource.js +21 -9
- package/dist/Resource.js.map +1 -1
- package/dist/Space.d.ts +32 -14
- package/dist/Space.d.ts.map +1 -1
- package/dist/Space.js +104 -42
- package/dist/Space.js.map +1 -1
- package/dist/WasClient.d.ts.map +1 -1
- package/dist/WasClient.js +5 -1
- package/dist/WasClient.js.map +1 -1
- package/dist/codec.d.ts +6 -5
- package/dist/codec.d.ts.map +1 -1
- package/dist/codec.js +1 -1
- package/dist/codec.js.map +1 -1
- package/dist/edv/EdvCodec.d.ts.map +1 -1
- package/dist/edv/EdvCodec.js +3 -2
- package/dist/edv/EdvCodec.js.map +1 -1
- package/dist/edv/descriptorStore.d.ts +14 -11
- package/dist/edv/descriptorStore.d.ts.map +1 -1
- package/dist/edv/descriptorStore.js +7 -5
- package/dist/edv/descriptorStore.js.map +1 -1
- package/dist/edv/docCipher.d.ts +11 -1
- package/dist/edv/docCipher.d.ts.map +1 -1
- package/dist/edv/docCipher.js +24 -6
- package/dist/edv/docCipher.js.map +1 -1
- package/dist/edv/epochRoster.d.ts +20 -11
- package/dist/edv/epochRoster.d.ts.map +1 -1
- package/dist/edv/epochRoster.js +29 -16
- package/dist/edv/epochRoster.js.map +1 -1
- package/dist/edv/index.d.ts +3 -1
- package/dist/edv/index.d.ts.map +1 -1
- package/dist/edv/index.js +3 -1
- package/dist/edv/index.js.map +1 -1
- package/dist/edv/logGovernedDescriptorStore.d.ts.map +1 -1
- package/dist/edv/logGovernedDescriptorStore.js +5 -2
- package/dist/edv/logGovernedDescriptorStore.js.map +1 -1
- package/dist/edv/refreshingDocCipher.d.ts +4 -1
- package/dist/edv/refreshingDocCipher.d.ts.map +1 -1
- package/dist/edv/refreshingDocCipher.js +7 -4
- package/dist/edv/refreshingDocCipher.js.map +1 -1
- package/dist/errors.d.ts +17 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +20 -1
- package/dist/errors.js.map +1 -1
- package/dist/internal/cas.d.ts +58 -1
- package/dist/internal/cas.d.ts.map +1 -1
- package/dist/internal/cas.js +79 -3
- package/dist/internal/cas.js.map +1 -1
- package/dist/internal/conditional.d.ts +85 -4
- package/dist/internal/conditional.d.ts.map +1 -1
- package/dist/internal/conditional.js +102 -2
- package/dist/internal/conditional.js.map +1 -1
- package/dist/internal/features.d.ts +9 -3
- package/dist/internal/features.d.ts.map +1 -1
- package/dist/internal/features.js +33 -4
- package/dist/internal/features.js.map +1 -1
- package/dist/internal/meta.d.ts +20 -2
- package/dist/internal/meta.d.ts.map +1 -1
- package/dist/internal/meta.js +30 -4
- package/dist/internal/meta.js.map +1 -1
- package/dist/internal/request.d.ts +10 -0
- package/dist/internal/request.d.ts.map +1 -1
- package/dist/internal/request.js.map +1 -1
- package/dist/internal/write.d.ts +9 -2
- package/dist/internal/write.d.ts.map +1 -1
- package/dist/internal/write.js +18 -3
- package/dist/internal/write.js.map +1 -1
- package/dist/log/logStore.d.ts +11 -5
- package/dist/log/logStore.d.ts.map +1 -1
- package/dist/log/logStore.js +18 -5
- package/dist/log/logStore.js.map +1 -1
- package/dist/sync/index.d.ts +8 -5
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +8 -5
- package/dist/sync/index.js.map +1 -1
- package/dist/sync/plaintextCipher.d.ts +6 -4
- package/dist/sync/plaintextCipher.d.ts.map +1 -1
- package/dist/sync/plaintextCipher.js +19 -6
- package/dist/sync/plaintextCipher.js.map +1 -1
- package/dist/sync/port.d.ts +7 -1
- package/dist/sync/port.d.ts.map +1 -1
- package/dist/sync/port.js +18 -2
- package/dist/sync/port.js.map +1 -1
- package/dist/sync/predicates.d.ts +14 -3
- package/dist/sync/predicates.d.ts.map +1 -1
- package/dist/sync/predicates.js +16 -3
- package/dist/sync/predicates.js.map +1 -1
- package/dist/sync/types.d.ts +21 -1
- package/dist/sync/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logGovernedDescriptorStore.js","sourceRoot":"","sources":["../../src/edv/logGovernedDescriptorStore.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"logGovernedDescriptorStore.js","sourceRoot":"","sources":["../../src/edv/logGovernedDescriptorStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -48,6 +48,8 @@ import { type EncryptionDescriptorCache, type EncryptionDescriptorSource } from
|
|
|
48
48
|
* collection's envelopes are sealed to
|
|
49
49
|
* @param options.keyResolver {IKeyResolver}
|
|
50
50
|
* @param options.collectionId {string}
|
|
51
|
+
* @param [options.spaceId] {string} the WAS Space holding the collection,
|
|
52
|
+
* which lets a `decrypt` given a request context read a chunked envelope
|
|
51
53
|
* @param [options.idDerivation] {'content' | 'random'} defaults to
|
|
52
54
|
* `'content'`
|
|
53
55
|
* @param [options.source] {EncryptionDescriptorSource}
|
|
@@ -56,10 +58,11 @@ import { type EncryptionDescriptorCache, type EncryptionDescriptorSource } from
|
|
|
56
58
|
* descriptor-fetch failures
|
|
57
59
|
* @returns {Promise<DocCipher>}
|
|
58
60
|
*/
|
|
59
|
-
export declare function createRefreshingEdvDocCipher({ keyAgreementKey, keyResolver, collectionId, idDerivation, source, cache, onFetchError }: {
|
|
61
|
+
export declare function createRefreshingEdvDocCipher({ keyAgreementKey, keyResolver, collectionId, spaceId, idDerivation, source, cache, onFetchError }: {
|
|
60
62
|
keyAgreementKey: IKeyAgreementKey;
|
|
61
63
|
keyResolver: IKeyResolver;
|
|
62
64
|
collectionId: string;
|
|
65
|
+
spaceId?: string;
|
|
63
66
|
idDerivation?: 'content' | 'random';
|
|
64
67
|
source?: EncryptionDescriptorSource;
|
|
65
68
|
cache: EncryptionDescriptorCache;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"refreshingDocCipher.d.ts","sourceRoot":"","sources":["../../src/edv/refreshingDocCipher.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACb,MAAM,8BAA8B,CAAA;AAErC,OAAO,EAAsB,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AACnE,OAAO,EAEL,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAChC,MAAM,cAAc,CAAA;AAErB
|
|
1
|
+
{"version":3,"file":"refreshingDocCipher.d.ts","sourceRoot":"","sources":["../../src/edv/refreshingDocCipher.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACb,MAAM,8BAA8B,CAAA;AAErC,OAAO,EAAsB,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AACnE,OAAO,EAEL,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAChC,MAAM,cAAc,CAAA;AAErB;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,4BAA4B,CAAC,EACjD,eAAe,EACf,WAAW,EACX,YAAY,EACZ,OAAO,EACP,YAAY,EACZ,MAAM,EACN,KAAK,EACL,YAAY,EACb,EAAE;IACD,eAAe,EAAE,gBAAgB,CAAA;IACjC,WAAW,EAAE,YAAY,CAAA;IACzB,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAA;IACnC,MAAM,CAAC,EAAE,0BAA0B,CAAA;IACnC,KAAK,EAAE,yBAAyB,CAAA;IAChC,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;CACtE,GAAG,OAAO,CAAC,SAAS,CAAC,CA0FrB"}
|
|
@@ -15,6 +15,8 @@ import { acquireDescriptor } from './acquire.js';
|
|
|
15
15
|
* collection's envelopes are sealed to
|
|
16
16
|
* @param options.keyResolver {IKeyResolver}
|
|
17
17
|
* @param options.collectionId {string}
|
|
18
|
+
* @param [options.spaceId] {string} the WAS Space holding the collection,
|
|
19
|
+
* which lets a `decrypt` given a request context read a chunked envelope
|
|
18
20
|
* @param [options.idDerivation] {'content' | 'random'} defaults to
|
|
19
21
|
* `'content'`
|
|
20
22
|
* @param [options.source] {EncryptionDescriptorSource}
|
|
@@ -23,7 +25,7 @@ import { acquireDescriptor } from './acquire.js';
|
|
|
23
25
|
* descriptor-fetch failures
|
|
24
26
|
* @returns {Promise<DocCipher>}
|
|
25
27
|
*/
|
|
26
|
-
export async function createRefreshingEdvDocCipher({ keyAgreementKey, keyResolver, collectionId, idDerivation, source, cache, onFetchError }) {
|
|
28
|
+
export async function createRefreshingEdvDocCipher({ keyAgreementKey, keyResolver, collectionId, spaceId, idDerivation, source, cache, onFetchError }) {
|
|
27
29
|
const build = async () => {
|
|
28
30
|
const encryption = await acquireDescriptor({
|
|
29
31
|
source,
|
|
@@ -40,6 +42,7 @@ export async function createRefreshingEdvDocCipher({ keyAgreementKey, keyResolve
|
|
|
40
42
|
keyAgreementKey,
|
|
41
43
|
keyResolver,
|
|
42
44
|
collectionId,
|
|
45
|
+
spaceId,
|
|
43
46
|
idDerivation,
|
|
44
47
|
encryption
|
|
45
48
|
});
|
|
@@ -57,9 +60,9 @@ export async function createRefreshingEdvDocCipher({ keyAgreementKey, keyResolve
|
|
|
57
60
|
}
|
|
58
61
|
return inner.encryptUpdate(options);
|
|
59
62
|
},
|
|
60
|
-
async decrypt(
|
|
63
|
+
async decrypt(options) {
|
|
61
64
|
try {
|
|
62
|
-
return await inner.decrypt(
|
|
65
|
+
return await inner.decrypt(options);
|
|
63
66
|
}
|
|
64
67
|
catch (err) {
|
|
65
68
|
// `instanceof` is safe here and only here: `inner` is built in this
|
|
@@ -102,7 +105,7 @@ export async function createRefreshingEdvDocCipher({ keyAgreementKey, keyResolve
|
|
|
102
105
|
// no-network decrypt that fails the same way -- so a genuinely
|
|
103
106
|
// foreign envelope still surfaces UnknownEpochError, and never a
|
|
104
107
|
// second description read.
|
|
105
|
-
return inner.decrypt(
|
|
108
|
+
return inner.decrypt(options);
|
|
106
109
|
}
|
|
107
110
|
}
|
|
108
111
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"refreshingDocCipher.js","sourceRoot":"","sources":["../../src/edv/refreshingDocCipher.ts"],"names":[],"mappings":"AAqCA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAChD,OAAO,EAAE,kBAAkB,EAAkB,MAAM,gBAAgB,CAAA;AACnE,OAAO,EACL,iBAAiB,EAGlB,MAAM,cAAc,CAAA;AAErB
|
|
1
|
+
{"version":3,"file":"refreshingDocCipher.js","sourceRoot":"","sources":["../../src/edv/refreshingDocCipher.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
CHANGED
|
@@ -181,7 +181,10 @@ export declare class KeyUnwrapError extends EncryptionError {
|
|
|
181
181
|
/**
|
|
182
182
|
* A fail-closed integrity error: a stored EDV envelope this reader DOES hold a
|
|
183
183
|
* key for failed to authenticate on decrypt -- its AEAD tag did not verify, so
|
|
184
|
-
* the ciphertext is corrupt or has been tampered with
|
|
184
|
+
* the ciphertext is corrupt or has been tampered with -- or a stored body does
|
|
185
|
+
* not verify against the resource id it was read under (an envelope bound to
|
|
186
|
+
* another resource, or a content-addressed document whose content id differs
|
|
187
|
+
* from its resource id). Distinct from
|
|
185
188
|
* {@link KeyUnwrapError}: that is the read/membership axis ("no key for this
|
|
186
189
|
* epoch"), whereas this is a data-integrity failure by a legitimate recipient.
|
|
187
190
|
* A subtype of {@link EncryptionError}, so existing `catch (EncryptionError)`
|
|
@@ -290,6 +293,19 @@ export declare function httpStatus(err: unknown): number | undefined;
|
|
|
290
293
|
* @returns {string}
|
|
291
294
|
*/
|
|
292
295
|
export declare function errorMessage(err: unknown): string;
|
|
296
|
+
/**
|
|
297
|
+
* Refuses a `DocCipher.decrypt` call that carries no resource id. Both
|
|
298
|
+
* built-in ciphers verify the stored body against that id, and a missing one
|
|
299
|
+
* would silently skip the check.
|
|
300
|
+
*
|
|
301
|
+
* @param options {object}
|
|
302
|
+
* @param options.id {string} the resource id the replica read the body under
|
|
303
|
+
* @param options.collectionId {string} labels the error
|
|
304
|
+
*/
|
|
305
|
+
export declare function requireResourceId({ id, collectionId }: {
|
|
306
|
+
id: string;
|
|
307
|
+
collectionId: string;
|
|
308
|
+
}): void;
|
|
293
309
|
/**
|
|
294
310
|
* Translates a thrown ky/ezcap error into the appropriate `WasError` subclass,
|
|
295
311
|
* carrying through the server's `problem+json` fields. Dispatches on the
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAWA;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED;;GAEG;AACH,qBAAa,QAAS,SAAQ,KAAK;IACjC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;gBAEP,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAU3D;AAED;;;;GAIG;AACH,qBAAa,aAAc,SAAQ,QAAQ;IAChC,IAAI,SAAkB;CAChC;AAED;;;;;;;GAOG;AACH,qBAAa,sBAAuB,SAAQ,aAAa;IAC9C,IAAI,SAA2B;CACzC;AAED;;;;GAIG;AACH,qBAAa,sBAAuB,SAAQ,aAAa;IAC9C,IAAI,SAA2B;CACzC;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,QAAQ;IAClC,IAAI,SAAoB;CAClC;AAED;;;;;;;;GAQG;AACH,qBAAa,mBAAoB,SAAQ,eAAe;IAC7C,IAAI,SAAwB;CACtC;AAED;;;;GAIG;AACH,qBAAa,iBAAkB,SAAQ,QAAQ;IACpC,IAAI,SAAsB;CACpC;AAED;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,QAAQ;IACtC,IAAI,SAAwB;CACtC;AAED;;;;;;;GAOG;AACH,qBAAa,iBAAkB,SAAQ,QAAQ;IACpC,IAAI,SAAsB;CACpC;AAED;;;;;;;;;GASG;AACH,qBAAa,uBAAwB,SAAQ,QAAQ;IAC1C,IAAI,SAA4B;CAC1C;AAED;;;;;GAKG;AACH,qBAAa,aAAc,SAAQ,QAAQ;IAChC,IAAI,SAAkB;CAChC;AAED;;;;;;;GAOG;AACH,qBAAa,uBAAwB,SAAQ,QAAQ;IAC1C,IAAI,SAA4B;CAC1C;AAED;;;;GAIG;AACH,qBAAa,oBAAqB,SAAQ,QAAQ;IACvC,IAAI,SAAyB;CACvC;AAED;;;;GAIG;AACH,qBAAa,kBAAmB,SAAQ,QAAQ;IACrC,IAAI,SAAuB;CACrC;AAED;;;;;;;;GAQG;AACH,qBAAa,eAAgB,SAAQ,QAAQ;IAClC,IAAI,SAAoB;CAClC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,cAAe,SAAQ,eAAe;IACxC,IAAI,SAAmB;CACjC;AAED
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.js
CHANGED
|
@@ -184,7 +184,10 @@ export class KeyUnwrapError extends EncryptionError {
|
|
|
184
184
|
/**
|
|
185
185
|
* A fail-closed integrity error: a stored EDV envelope this reader DOES hold a
|
|
186
186
|
* key for failed to authenticate on decrypt -- its AEAD tag did not verify, so
|
|
187
|
-
* the ciphertext is corrupt or has been tampered with
|
|
187
|
+
* the ciphertext is corrupt or has been tampered with -- or a stored body does
|
|
188
|
+
* not verify against the resource id it was read under (an envelope bound to
|
|
189
|
+
* another resource, or a content-addressed document whose content id differs
|
|
190
|
+
* from its resource id). Distinct from
|
|
188
191
|
* {@link KeyUnwrapError}: that is the read/membership axis ("no key for this
|
|
189
192
|
* epoch"), whereas this is a data-integrity failure by a legitimate recipient.
|
|
190
193
|
* A subtype of {@link EncryptionError}, so existing `catch (EncryptionError)`
|
|
@@ -353,6 +356,22 @@ export function httpStatus(err) {
|
|
|
353
356
|
export function errorMessage(err) {
|
|
354
357
|
return err instanceof Error ? err.message : String(err);
|
|
355
358
|
}
|
|
359
|
+
/**
|
|
360
|
+
* Refuses a `DocCipher.decrypt` call that carries no resource id. Both
|
|
361
|
+
* built-in ciphers verify the stored body against that id, and a missing one
|
|
362
|
+
* would silently skip the check.
|
|
363
|
+
*
|
|
364
|
+
* @param options {object}
|
|
365
|
+
* @param options.id {string} the resource id the replica read the body under
|
|
366
|
+
* @param options.collectionId {string} labels the error
|
|
367
|
+
*/
|
|
368
|
+
export function requireResourceId({ id, collectionId }) {
|
|
369
|
+
if (typeof id !== 'string' || id === '') {
|
|
370
|
+
throw new ValidationError(`Cannot decrypt a resource of collection "${collectionId}" without its ` +
|
|
371
|
+
'resource id: pass the id the replica read it under, so the stored ' +
|
|
372
|
+
'body can be verified against it.');
|
|
373
|
+
}
|
|
374
|
+
}
|
|
356
375
|
/**
|
|
357
376
|
* Translates a thrown ky/ezcap error into the appropriate `WasError` subclass,
|
|
358
377
|
* carrying through the server's `problem+json` fields. Dispatches on the
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;GAKG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAmBpD;;GAEG;AACH,MAAM,OAAO,QAAS,SAAQ,KAAK;IACjC,MAAM,CAAS;IACf,IAAI,CAAS;IACb,KAAK,CAAS;IACd,OAAO,CAAW;IAClB,UAAU,CAAS;IAEnB,YAAY,OAAe,EAAE,UAA2B,EAAE;QACxD,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,OAAO,CAAA;QACnE,KAAK,CAAC,OAAO,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;QAC3D,IAAI,CAAC,IAAI,GAAG,UAAU,CAAA;QACtB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;IAC9B,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,aAAc,SAAQ,QAAQ;IAChC,IAAI,GAAG,eAAe,CAAA;CAChC;AAED;;;;;;;GAOG;AACH,MAAM,OAAO,sBAAuB,SAAQ,aAAa;IAC9C,IAAI,GAAG,wBAAwB,CAAA;CACzC;AAED;;;;GAIG;AACH,MAAM,OAAO,sBAAuB,SAAQ,aAAa;IAC9C,IAAI,GAAG,wBAAwB,CAAA;CACzC;AAED;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,QAAQ;IAClC,IAAI,GAAG,iBAAiB,CAAA;CAClC;AAED;;;;;;;;GAQG;AACH,MAAM,OAAO,mBAAoB,SAAQ,eAAe;IAC7C,IAAI,GAAG,qBAAqB,CAAA;CACtC;AAED;;;;GAIG;AACH,MAAM,OAAO,iBAAkB,SAAQ,QAAQ;IACpC,IAAI,GAAG,mBAAmB,CAAA;CACpC;AAED;;;GAGG;AACH,MAAM,OAAO,mBAAoB,SAAQ,QAAQ;IACtC,IAAI,GAAG,qBAAqB,CAAA;CACtC;AAED;;;;;;;GAOG;AACH,MAAM,OAAO,iBAAkB,SAAQ,QAAQ;IACpC,IAAI,GAAG,mBAAmB,CAAA;CACpC;AAED;;;;;;;;;GASG;AACH,MAAM,OAAO,uBAAwB,SAAQ,QAAQ;IAC1C,IAAI,GAAG,yBAAyB,CAAA;CAC1C;AAED;;;;;GAKG;AACH,MAAM,OAAO,aAAc,SAAQ,QAAQ;IAChC,IAAI,GAAG,eAAe,CAAA;CAChC;AAED;;;;;;;GAOG;AACH,MAAM,OAAO,uBAAwB,SAAQ,QAAQ;IAC1C,IAAI,GAAG,yBAAyB,CAAA;CAC1C;AAED;;;;GAIG;AACH,MAAM,OAAO,oBAAqB,SAAQ,QAAQ;IACvC,IAAI,GAAG,sBAAsB,CAAA;CACvC;AAED;;;;GAIG;AACH,MAAM,OAAO,kBAAmB,SAAQ,QAAQ;IACrC,IAAI,GAAG,oBAAoB,CAAA;CACrC;AAED;;;;;;;;GAQG;AACH,MAAM,OAAO,eAAgB,SAAQ,QAAQ;IAClC,IAAI,GAAG,iBAAiB,CAAA;CAClC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,OAAO,cAAe,SAAQ,eAAe;IACxC,IAAI,GAAG,gBAAgB,CAAA;CACjC;AAED
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
|
package/dist/internal/cas.d.ts
CHANGED
|
@@ -70,6 +70,13 @@ export declare function isPreconditionFailed(err: unknown): boolean;
|
|
|
70
70
|
* retry): nothing is written and the current value is returned as-is. Any other error `mutate` throws
|
|
71
71
|
* propagates unchanged.
|
|
72
72
|
*
|
|
73
|
+
* A read that returns a value with no validator is refused before the write
|
|
74
|
+
* with `NotSupportedError`: the replace would carry no `If-Match`, so a lost
|
|
75
|
+
* race would silently overwrite the rival write instead of rebasing on it. A
|
|
76
|
+
* caller whose host legitimately offers only the unconditional write passes
|
|
77
|
+
* `allowUnconditional`. A `mutate` that resolves `null` writes nothing and so
|
|
78
|
+
* is never refused.
|
|
79
|
+
*
|
|
73
80
|
* When the store reports no value yet (`read()` resolves `null`), the optional
|
|
74
81
|
* `onAbsent` supplies the seed to mutate instead, and the result is written
|
|
75
82
|
* with the store's create-if-absent guard. Without `onAbsent`, or on a store
|
|
@@ -86,13 +93,63 @@ export declare function isPreconditionFailed(err: unknown): boolean;
|
|
|
86
93
|
* @param [options.onAbsent] {function} returns the seed to mutate when the
|
|
87
94
|
* store holds no value yet; may throw a caller-specific refusal
|
|
88
95
|
* @param [options.maxAttempts] {number} defaults to {@link DEFAULT_CAS_ATTEMPTS}
|
|
96
|
+
* @param [options.allowUnconditional] {boolean} send the replace without
|
|
97
|
+
* `If-Match` when the read returned no validator, instead of refusing
|
|
89
98
|
* @returns {Promise<T>} the written (or current) value
|
|
90
99
|
*/
|
|
91
|
-
export declare function compareAndSwap<T>({ store, mutate, operation, onAbsent, maxAttempts }: {
|
|
100
|
+
export declare function compareAndSwap<T>({ store, mutate, operation, onAbsent, maxAttempts, allowUnconditional }: {
|
|
92
101
|
store: CasStore<T>;
|
|
93
102
|
mutate: (value: T) => T | null | Promise<T | null>;
|
|
94
103
|
operation: string;
|
|
95
104
|
onAbsent?: () => T;
|
|
96
105
|
maxAttempts?: number;
|
|
106
|
+
allowUnconditional?: boolean;
|
|
97
107
|
}): Promise<T>;
|
|
108
|
+
/**
|
|
109
|
+
* A merging write over a versioned object, run through {@link compareAndSwap}.
|
|
110
|
+
* `compose` is handed a baseline read and returns the write body, and `write`
|
|
111
|
+
* sends that body pinned to the baseline's validator. A lost race (a `412`)
|
|
112
|
+
* re-reads, re-composes, and re-sends, so a merge is only applied over a
|
|
113
|
+
* version this write observed. A baseline carrying no validator makes its
|
|
114
|
+
* attempt an unconditional write (`ifMatch` is `undefined`), which is all a
|
|
115
|
+
* backend without `conditional-writes` offers. This is the loop's
|
|
116
|
+
* `allowUnconditional` opt-out: the Collection and Space Metadata writes that
|
|
117
|
+
* drive it keep working on such a backend.
|
|
118
|
+
*
|
|
119
|
+
* Unlike a plain {@link CasStore}, the body is not the stored value itself.
|
|
120
|
+
* The stored value may be `null` (an absent or unreadable object), and
|
|
121
|
+
* `compose` decides whether proceeding from it is safe; a refusal it throws
|
|
122
|
+
* propagates unchanged. `compose` runs once per attempt, so a caller that
|
|
123
|
+
* needs what was merged reads it from the value `write` resolves, which is the
|
|
124
|
+
* last attempt's.
|
|
125
|
+
*
|
|
126
|
+
* @param options {object}
|
|
127
|
+
* @param options.read {function} reads a fresh baseline and its validator;
|
|
128
|
+
* may throw a caller-specific refusal (e.g. for an unreadable object)
|
|
129
|
+
* @param [options.current] {object} a baseline the caller has already read,
|
|
130
|
+
* used for the first attempt only; a rebase calls `read`
|
|
131
|
+
* @param options.compose {function} baseline to write body (may be async)
|
|
132
|
+
* @param options.write {function} sends the body under `ifMatch`; a stale
|
|
133
|
+
* validator throws `PreconditionFailedError` (412)
|
|
134
|
+
* @param options.operation {string} what the caller is doing, for the
|
|
135
|
+
* exhaustion error's message
|
|
136
|
+
* @param [options.maxAttempts] {number} defaults to {@link DEFAULT_CAS_ATTEMPTS}
|
|
137
|
+
* @returns {Promise<R>} what the successful `write` resolved
|
|
138
|
+
*/
|
|
139
|
+
export declare function composeAndSwap<B, W extends object, R>({ read, current, compose, write, operation, maxAttempts }: {
|
|
140
|
+
read: () => Promise<{
|
|
141
|
+
value: B;
|
|
142
|
+
etag?: string;
|
|
143
|
+
}>;
|
|
144
|
+
current?: {
|
|
145
|
+
value: B;
|
|
146
|
+
etag?: string;
|
|
147
|
+
};
|
|
148
|
+
compose: (baseline: B) => W | Promise<W>;
|
|
149
|
+
write: (body: W, precondition: {
|
|
150
|
+
ifMatch?: string;
|
|
151
|
+
}) => Promise<R>;
|
|
152
|
+
operation: string;
|
|
153
|
+
maxAttempts?: number;
|
|
154
|
+
}): Promise<R>;
|
|
98
155
|
//# sourceMappingURL=cas.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cas.d.ts","sourceRoot":"","sources":["../../src/internal/cas.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cas.d.ts","sourceRoot":"","sources":["../../src/internal/cas.ts"],"names":[],"mappings":"AAgBA;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,IAAI,CAAA;AAErC;;;;GAIG;AACH,MAAM,WAAW,QAAQ,CAAC,CAAC;IACzB;;;;;;;;;OASG;IACH,IAAI,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,CAAC,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAA;IAEnD;;;;;;;;OAQG;IACH,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAE/D;;;;;;;OAOG;IACH,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACjC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAK1D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAsB,cAAc,CAAC,CAAC,EAAE,EACtC,KAAK,EACL,MAAM,EACN,SAAS,EACT,QAAQ,EACR,WAAkC,EAClC,kBAA0B,EAC3B,EAAE;IACD,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAA;IAClB,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;IAClD,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B,GAAG,OAAO,CAAC,CAAC,CAAC,CA2Eb;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAsB,cAAc,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,EAC3D,IAAI,EACJ,OAAO,EACP,OAAO,EACP,KAAK,EACL,SAAS,EACT,WAAW,EACZ,EAAE;IACD,IAAI,EAAE,MAAM,OAAO,CAAC;QAAE,KAAK,EAAE,CAAC,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAChD,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,CAAC,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACrC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IACxC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,YAAY,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,CAAC,CAAC,CAAA;IAClE,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,GAAG,OAAO,CAAC,CAAC,CAAC,CA0Bb"}
|
package/dist/internal/cas.js
CHANGED
|
@@ -6,10 +6,13 @@
|
|
|
6
6
|
* caller's change against it, write it back under `If-Match`, and rebase on a
|
|
7
7
|
* lost race (a `412`) by re-reading. The recipient primitives drive it with an
|
|
8
8
|
* `EncryptionDescriptorStore`; `Collection.declareIndex` drives it with a
|
|
9
|
-
* `/meta`-backed store.
|
|
10
|
-
* {@link
|
|
9
|
+
* `/meta`-backed store. The Collection and Space Metadata writes drive it
|
|
10
|
+
* through {@link composeAndSwap}, which builds a write body from the stored
|
|
11
|
+
* value. A new caller wanting CAS adapts its host to {@link CasStore} rather
|
|
12
|
+
* than hand-rolling another loop.
|
|
11
13
|
*/
|
|
12
14
|
import { PreconditionFailedError, ValidationError } from '../errors.js';
|
|
15
|
+
import { unenforcedPreconditionError } from './conditional.js';
|
|
13
16
|
/**
|
|
14
17
|
* How many times {@link compareAndSwap} retries a stale (`412`) write before
|
|
15
18
|
* surfacing `PreconditionFailedError`. One shared default, so two callers do
|
|
@@ -43,6 +46,13 @@ export function isPreconditionFailed(err) {
|
|
|
43
46
|
* retry): nothing is written and the current value is returned as-is. Any other error `mutate` throws
|
|
44
47
|
* propagates unchanged.
|
|
45
48
|
*
|
|
49
|
+
* A read that returns a value with no validator is refused before the write
|
|
50
|
+
* with `NotSupportedError`: the replace would carry no `If-Match`, so a lost
|
|
51
|
+
* race would silently overwrite the rival write instead of rebasing on it. A
|
|
52
|
+
* caller whose host legitimately offers only the unconditional write passes
|
|
53
|
+
* `allowUnconditional`. A `mutate` that resolves `null` writes nothing and so
|
|
54
|
+
* is never refused.
|
|
55
|
+
*
|
|
46
56
|
* When the store reports no value yet (`read()` resolves `null`), the optional
|
|
47
57
|
* `onAbsent` supplies the seed to mutate instead, and the result is written
|
|
48
58
|
* with the store's create-if-absent guard. Without `onAbsent`, or on a store
|
|
@@ -59,9 +69,11 @@ export function isPreconditionFailed(err) {
|
|
|
59
69
|
* @param [options.onAbsent] {function} returns the seed to mutate when the
|
|
60
70
|
* store holds no value yet; may throw a caller-specific refusal
|
|
61
71
|
* @param [options.maxAttempts] {number} defaults to {@link DEFAULT_CAS_ATTEMPTS}
|
|
72
|
+
* @param [options.allowUnconditional] {boolean} send the replace without
|
|
73
|
+
* `If-Match` when the read returned no validator, instead of refusing
|
|
62
74
|
* @returns {Promise<T>} the written (or current) value
|
|
63
75
|
*/
|
|
64
|
-
export async function compareAndSwap({ store, mutate, operation, onAbsent, maxAttempts = DEFAULT_CAS_ATTEMPTS }) {
|
|
76
|
+
export async function compareAndSwap({ store, mutate, operation, onAbsent, maxAttempts = DEFAULT_CAS_ATTEMPTS, allowUnconditional = false }) {
|
|
65
77
|
let lastError;
|
|
66
78
|
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
67
79
|
let current;
|
|
@@ -110,6 +122,12 @@ export async function compareAndSwap({ store, mutate, operation, onAbsent, maxAt
|
|
|
110
122
|
// The value already reflects the desired state: nothing to write.
|
|
111
123
|
return current.value;
|
|
112
124
|
}
|
|
125
|
+
if (current.etag === undefined && !allowUnconditional) {
|
|
126
|
+
throw unenforcedPreconditionError({
|
|
127
|
+
operation: `${operation} was refused`,
|
|
128
|
+
reason: 'no-validator'
|
|
129
|
+
});
|
|
130
|
+
}
|
|
113
131
|
try {
|
|
114
132
|
await store.replace(next, { ifMatch: current.etag });
|
|
115
133
|
return next;
|
|
@@ -127,4 +145,62 @@ export async function compareAndSwap({ store, mutate, operation, onAbsent, maxAt
|
|
|
127
145
|
'attempts (another writer kept updating the stored value). Retry the ' +
|
|
128
146
|
'operation.', { cause: lastError });
|
|
129
147
|
}
|
|
148
|
+
/**
|
|
149
|
+
* A merging write over a versioned object, run through {@link compareAndSwap}.
|
|
150
|
+
* `compose` is handed a baseline read and returns the write body, and `write`
|
|
151
|
+
* sends that body pinned to the baseline's validator. A lost race (a `412`)
|
|
152
|
+
* re-reads, re-composes, and re-sends, so a merge is only applied over a
|
|
153
|
+
* version this write observed. A baseline carrying no validator makes its
|
|
154
|
+
* attempt an unconditional write (`ifMatch` is `undefined`), which is all a
|
|
155
|
+
* backend without `conditional-writes` offers. This is the loop's
|
|
156
|
+
* `allowUnconditional` opt-out: the Collection and Space Metadata writes that
|
|
157
|
+
* drive it keep working on such a backend.
|
|
158
|
+
*
|
|
159
|
+
* Unlike a plain {@link CasStore}, the body is not the stored value itself.
|
|
160
|
+
* The stored value may be `null` (an absent or unreadable object), and
|
|
161
|
+
* `compose` decides whether proceeding from it is safe; a refusal it throws
|
|
162
|
+
* propagates unchanged. `compose` runs once per attempt, so a caller that
|
|
163
|
+
* needs what was merged reads it from the value `write` resolves, which is the
|
|
164
|
+
* last attempt's.
|
|
165
|
+
*
|
|
166
|
+
* @param options {object}
|
|
167
|
+
* @param options.read {function} reads a fresh baseline and its validator;
|
|
168
|
+
* may throw a caller-specific refusal (e.g. for an unreadable object)
|
|
169
|
+
* @param [options.current] {object} a baseline the caller has already read,
|
|
170
|
+
* used for the first attempt only; a rebase calls `read`
|
|
171
|
+
* @param options.compose {function} baseline to write body (may be async)
|
|
172
|
+
* @param options.write {function} sends the body under `ifMatch`; a stale
|
|
173
|
+
* validator throws `PreconditionFailedError` (412)
|
|
174
|
+
* @param options.operation {string} what the caller is doing, for the
|
|
175
|
+
* exhaustion error's message
|
|
176
|
+
* @param [options.maxAttempts] {number} defaults to {@link DEFAULT_CAS_ATTEMPTS}
|
|
177
|
+
* @returns {Promise<R>} what the successful `write` resolved
|
|
178
|
+
*/
|
|
179
|
+
export async function composeAndSwap({ read, current, compose, write, operation, maxAttempts }) {
|
|
180
|
+
let seed = current;
|
|
181
|
+
let written;
|
|
182
|
+
await compareAndSwap({
|
|
183
|
+
store: {
|
|
184
|
+
read: async () => {
|
|
185
|
+
// The caller's baseline is consumed once, so a rebase always re-reads.
|
|
186
|
+
const baseline = seed ?? (await read());
|
|
187
|
+
seed = undefined;
|
|
188
|
+
return { value: baseline.value, etag: baseline.etag };
|
|
189
|
+
},
|
|
190
|
+
replace: async (body, { ifMatch }) => {
|
|
191
|
+
written = { result: await write(body, { ifMatch }) };
|
|
192
|
+
}
|
|
193
|
+
},
|
|
194
|
+
// The store only ever reads a baseline and only ever replaces a body.
|
|
195
|
+
mutate: value => compose(value),
|
|
196
|
+
operation,
|
|
197
|
+
allowUnconditional: true,
|
|
198
|
+
...(maxAttempts !== undefined && { maxAttempts })
|
|
199
|
+
});
|
|
200
|
+
if (written === undefined) {
|
|
201
|
+
// Unreachable for a typed caller: `compose` always returns a body.
|
|
202
|
+
throw new ValidationError(`${operation} composed no write body.`);
|
|
203
|
+
}
|
|
204
|
+
return written.result;
|
|
205
|
+
}
|
|
130
206
|
//# sourceMappingURL=cas.js.map
|
package/dist/internal/cas.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cas.js","sourceRoot":"","sources":["../../src/internal/cas.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH
|
|
1
|
+
{"version":3,"file":"cas.js","sourceRoot":"","sources":["../../src/internal/cas.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,10 +5,13 @@
|
|
|
5
5
|
* Helpers for conditional writes (the server's `conditional-writes` feature):
|
|
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
|
-
* response returns,
|
|
9
|
-
* conditional codec's write path pre-read
|
|
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.
|
|
10
11
|
*/
|
|
11
12
|
import type { EncodedWrite, ResponseLike } from '../codec.js';
|
|
13
|
+
import { NotSupportedError } from '../errors.js';
|
|
14
|
+
import type { FeatureProbe } from './features.js';
|
|
12
15
|
/**
|
|
13
16
|
* The request header the server reads a content write's key-epoch id from,
|
|
14
17
|
* stamping it onto the Resource's metadata (an absent header clears any prior
|
|
@@ -18,7 +21,8 @@ export declare const KEY_EPOCH_HEADER = "Key-Epoch";
|
|
|
18
21
|
/**
|
|
19
22
|
* A conditional-write precondition: `ifMatch` is the quoted ETag an
|
|
20
23
|
* update-if-unchanged write must match; `ifNoneMatch` requests a create-if-absent
|
|
21
|
-
* (`If-None-Match: *`). At most one
|
|
24
|
+
* (`If-None-Match: *`). At most one may be set; {@link assertSinglePrecondition}
|
|
25
|
+
* rejects both.
|
|
22
26
|
*/
|
|
23
27
|
export interface WritePrecondition {
|
|
24
28
|
ifMatch?: string;
|
|
@@ -46,11 +50,24 @@ export declare function encodedPrecondition(encoded: EncodedWrite): WritePrecond
|
|
|
46
50
|
* @returns {WritePrecondition | undefined}
|
|
47
51
|
*/
|
|
48
52
|
export declare function namedPrecondition(precondition?: WritePrecondition): WritePrecondition | undefined;
|
|
53
|
+
/**
|
|
54
|
+
* Throws `ValidationError` when a precondition names both `ifMatch` and
|
|
55
|
+
* `ifNoneMatch`. `If-Match` needs a current representation and
|
|
56
|
+
* `If-None-Match: *` needs none, so no server state satisfies the pair. Every
|
|
57
|
+
* write route checks this before acting on either member, so the caller bug
|
|
58
|
+
* surfaces as itself rather than as a create that dropped `ifMatch` or as a
|
|
59
|
+
* 412 that looks like a lost race.
|
|
60
|
+
*
|
|
61
|
+
* @param [precondition] {WritePrecondition}
|
|
62
|
+
* @returns {void}
|
|
63
|
+
*/
|
|
64
|
+
export declare function assertSinglePrecondition(precondition?: WritePrecondition): void;
|
|
49
65
|
/**
|
|
50
66
|
* Builds the headers for a write request: the content-type (when present) and
|
|
51
67
|
* the conditional-write precondition headers (`If-Match` / `If-None-Match: *`).
|
|
52
68
|
* Returns `undefined` when no header is needed, matching the request layer's
|
|
53
|
-
* optional `headers`.
|
|
69
|
+
* optional `headers`. Throws `ValidationError` when the precondition names both
|
|
70
|
+
* `ifMatch` and `ifNoneMatch`, a pair no server state can satisfy.
|
|
54
71
|
*
|
|
55
72
|
* @param options {object}
|
|
56
73
|
* @param [options.contentType] {string} the body content-type, if any
|
|
@@ -67,6 +84,70 @@ export declare function writeHeaders({ contentType, precondition, epoch }: {
|
|
|
67
84
|
precondition?: WritePrecondition;
|
|
68
85
|
epoch?: string;
|
|
69
86
|
}): Record<string, string> | undefined;
|
|
87
|
+
/**
|
|
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:
|
|
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.
|
|
97
|
+
*
|
|
98
|
+
* @param options {object}
|
|
99
|
+
* @param options.operation {string} what was refused, as the message's
|
|
100
|
+
* opening clause (e.g. `Cannot append to the resource log`)
|
|
101
|
+
* @param options.reason {'no-validator' | 'no-feature'}
|
|
102
|
+
* @returns {NotSupportedError}
|
|
103
|
+
*/
|
|
104
|
+
export declare function unenforcedPreconditionError({ operation, reason }: {
|
|
105
|
+
operation: string;
|
|
106
|
+
reason: 'no-validator' | 'no-feature';
|
|
107
|
+
}): 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>;
|
|
70
151
|
/**
|
|
71
152
|
* Reads the strong `ETag` validator a write/read response returned, or
|
|
72
153
|
* `undefined` when the backend sent none (it does not advertise the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conditional.d.ts","sourceRoot":"","sources":["../../src/internal/conditional.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH
|
|
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"}
|