@interop/was-client 0.53.0 → 0.55.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 +70 -14
- package/dist/WasClient.d.ts +1 -1
- package/dist/WasClient.d.ts.map +1 -1
- package/dist/WasClient.js +5 -18
- package/dist/WasClient.js.map +1 -1
- package/dist/edv/acquire.d.ts +98 -0
- package/dist/edv/acquire.d.ts.map +1 -0
- package/dist/edv/acquire.js +130 -0
- package/dist/edv/acquire.js.map +1 -0
- package/dist/edv/index.d.ts +35 -2
- package/dist/edv/index.d.ts.map +1 -1
- package/dist/edv/index.js +34 -2
- package/dist/edv/index.js.map +1 -1
- package/dist/edv/refresh.d.ts +62 -0
- package/dist/edv/refresh.d.ts.map +1 -0
- package/dist/edv/refresh.js +69 -0
- package/dist/edv/refresh.js.map +1 -0
- package/dist/edv/refreshingDocCipher.d.ts +70 -0
- package/dist/edv/refreshingDocCipher.d.ts.map +1 -0
- package/dist/edv/refreshingDocCipher.js +110 -0
- package/dist/edv/refreshingDocCipher.js.map +1 -0
- package/dist/errors.d.ts +4 -3
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +4 -3
- package/dist/errors.js.map +1 -1
- package/dist/identity/agents.d.ts +84 -0
- package/dist/identity/agents.d.ts.map +1 -0
- package/dist/identity/agents.js +104 -0
- package/dist/identity/agents.js.map +1 -0
- package/dist/identity/index.d.ts +15 -0
- package/dist/identity/index.d.ts.map +1 -0
- package/dist/identity/index.js +14 -0
- package/dist/identity/index.js.map +1 -0
- package/dist/identity/keyResolver.d.ts +30 -0
- package/dist/identity/keyResolver.d.ts.map +1 -0
- package/dist/identity/keyResolver.js +25 -0
- package/dist/identity/keyResolver.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/sync/index.d.ts +1 -1
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +1 -1
- package/dist/sync/index.js.map +1 -1
- package/dist/sync/port.d.ts +5 -1
- package/dist/sync/port.d.ts.map +1 -1
- package/dist/sync/port.js +27 -11
- package/dist/sync/port.js.map +1 -1
- package/dist/sync/predicates.d.ts +21 -4
- package/dist/sync/predicates.d.ts.map +1 -1
- package/dist/sync/predicates.js +23 -4
- package/dist/sync/predicates.js.map +1 -1
- package/dist/sync/provisioning.d.ts +13 -5
- package/dist/sync/provisioning.d.ts.map +1 -1
- package/dist/sync/provisioning.js +13 -7
- package/dist/sync/provisioning.js.map +1 -1
- package/dist/sync/types.d.ts +23 -14
- package/dist/sync/types.d.ts.map +1 -1
- package/dist/zcapClient.d.ts +19 -0
- package/dist/zcapClient.d.ts.map +1 -0
- package/dist/zcapClient.js +32 -0
- package/dist/zcapClient.js.map +1 -0
- package/package.json +9 -2
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Builds an `IKeyResolver` that resolves exactly one key -- the supplied key
|
|
3
|
+
* agreement key -- and throws for any other id.
|
|
4
|
+
*
|
|
5
|
+
* @param options {object}
|
|
6
|
+
* @param options.keyAgreementKey {object} the one KAK this resolver answers
|
|
7
|
+
* for; only its `id`, `type`, and `publicKeyMultibase` are read
|
|
8
|
+
* @param [options.keyAgreementKey.id] {string}
|
|
9
|
+
* @param [options.keyAgreementKey.type] {string}
|
|
10
|
+
* @param [options.keyAgreementKey.publicKeyMultibase] {string}
|
|
11
|
+
* @returns {IKeyResolver}
|
|
12
|
+
*/
|
|
13
|
+
export function singleKeyResolver({ keyAgreementKey }) {
|
|
14
|
+
return async ({ id }) => {
|
|
15
|
+
if (id === undefined || id !== keyAgreementKey.id) {
|
|
16
|
+
throw new Error(`Unknown key id "${id}".`);
|
|
17
|
+
}
|
|
18
|
+
return {
|
|
19
|
+
id: keyAgreementKey.id,
|
|
20
|
+
type: keyAgreementKey.type,
|
|
21
|
+
publicKeyMultibase: keyAgreementKey.publicKeyMultibase
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=keyResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keyResolver.js","sourceRoot":"","sources":["../../src/identity/keyResolver.ts"],"names":[],"mappings":"AAWA;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAChC,eAAe,EAOhB;IACC,OAAO,KAAK,EAAE,EAAE,EAAE,EAAmB,EAAE,EAAE;QACvC,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,eAAe,CAAC,EAAE,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAA;QAC5C,CAAC;QACD,OAAO;YACL,EAAE,EAAE,eAAe,CAAC,EAAE;YACtB,IAAI,EAAE,eAAe,CAAC,IAAI;YAC1B,kBAAkB,EAAE,eAAe,CAAC,kBAAkB;SACvD,CAAA;IACH,CAAC,CAAA;AACH,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ export { WasClient } from './WasClient.js';
|
|
|
9
9
|
export { Space } from './Space.js';
|
|
10
10
|
export { Collection } from './Collection.js';
|
|
11
11
|
export { Resource } from './Resource.js';
|
|
12
|
+
export { zcapClientForSigner } from './zcapClient.js';
|
|
12
13
|
export { parseSpaceTarget } from './internal/paths.js';
|
|
13
14
|
export type { ParsedSpacePath } from './internal/paths.js';
|
|
14
15
|
export { readEtag, writeHeaders } from './internal/conditional.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;GAGG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;GAGG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAErD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAClE,YAAY,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAElE,OAAO,EACL,QAAQ,EACR,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,sBAAsB,EACtB,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,cAAc,EACd,QAAQ,EACT,MAAM,aAAa,CAAA;AAEpB,YAAY,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAE1D,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3C,YAAY,EACV,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,mBAAmB,EACnB,UAAU,EACV,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,WAAW,EACZ,MAAM,YAAY,CAAA;AAEnB,YAAY,EACV,IAAI,EACJ,aAAa,EACb,UAAU,EACV,SAAS,EACT,YAAY,EACZ,MAAM,EACN,WAAW,EACX,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,qBAAqB,EACrB,wBAAwB,EACxB,oBAAoB,EACpB,yBAAyB,EACzB,6BAA6B,EAC7B,wBAAwB,EACxB,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,uBAAuB,EACvB,gBAAgB,EAChB,sBAAsB,EACtB,2BAA2B,EAC3B,kBAAkB,EAClB,SAAS,EACT,QAAQ,EACR,WAAW,EACX,cAAc,EACd,OAAO,EACP,YAAY,EACZ,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACvB,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,KAAK,EACL,cAAc,EACd,OAAO,EACR,MAAM,YAAY,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -9,6 +9,7 @@ export { WasClient } from './WasClient.js';
|
|
|
9
9
|
export { Space } from './Space.js';
|
|
10
10
|
export { Collection } from './Collection.js';
|
|
11
11
|
export { Resource } from './Resource.js';
|
|
12
|
+
export { zcapClientForSigner } from './zcapClient.js';
|
|
12
13
|
export { parseSpaceTarget } from './internal/paths.js';
|
|
13
14
|
export { readEtag, writeHeaders } from './internal/conditional.js';
|
|
14
15
|
export { WasError, NotFoundError, ValidationError, AuthRequiredError, NotImplementedError, NotSupportedError, ConflictError, PreconditionFailedError, PayloadTooLargeError, QuotaExceededError, EncryptionError, EncryptOnlyCipherError, KeyUnwrapError, IntegrityError, WasSyncAuthError, WasSyncConflictError, WasSyncNotFoundError, WasServerError, mapError } from './errors.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;GAGG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;GAGG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAErD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAEtD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAGlE,OAAO,EACL,QAAQ,EACR,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,sBAAsB,EACtB,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,cAAc,EACd,QAAQ,EACT,MAAM,aAAa,CAAA;AAIpB,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA"}
|
package/dist/sync/index.d.ts
CHANGED
|
@@ -45,7 +45,7 @@ export { contentCid, cidFrom, deriveSpaceId } from './cid.js';
|
|
|
45
45
|
export { isEncryptedEnvelope } from './envelope.js';
|
|
46
46
|
export { createPlaintextDocCipher } from './plaintextCipher.js';
|
|
47
47
|
export { ensureSpace, ensureSpaceAndCollection } from './provisioning.js';
|
|
48
|
-
export { isSyncAuthError, isSyncConflictError, isSyncNotFoundError, isUnknownEpochError } from './predicates.js';
|
|
48
|
+
export { isSyncAuthError, isSyncConflictError, isSyncNotFoundError, isKeyUnwrapError, isUnknownEpochError } from './predicates.js';
|
|
49
49
|
export { EncryptionError, KeyUnwrapError, UnknownEpochError, WasSyncAuthError, WasSyncConflictError, WasSyncNotFoundError } from '../errors.js';
|
|
50
50
|
export type { Json, SyncCheckpoint, WireDoc, SyncPage, MasterState, WriteAck, SyncStatus, WasSyncPort, DocCipher } from './types.js';
|
|
51
51
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/sync/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAI1E,OAAO,EAAE,UAAU,IAAI,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AACtE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAA;AAC/D,OAAO,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAA;AACzE,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACrB,MAAM,cAAc,CAAA;AAErB,YAAY,EACV,IAAI,EACJ,cAAc,EACd,OAAO,EACP,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,UAAU,EACV,WAAW,EACX,SAAS,EACV,MAAM,YAAY,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAI1E,OAAO,EAAE,UAAU,IAAI,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AACtE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAA;AAC/D,OAAO,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAA;AACzE,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACrB,MAAM,cAAc,CAAA;AAErB,YAAY,EACV,IAAI,EACJ,cAAc,EACd,OAAO,EACP,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,UAAU,EACV,WAAW,EACX,SAAS,EACV,MAAM,YAAY,CAAA"}
|
package/dist/sync/index.js
CHANGED
|
@@ -48,6 +48,6 @@ export { contentCid, cidFrom, deriveSpaceId } from './cid.js';
|
|
|
48
48
|
export { isEncryptedEnvelope } from './envelope.js';
|
|
49
49
|
export { createPlaintextDocCipher } from './plaintextCipher.js';
|
|
50
50
|
export { ensureSpace, ensureSpaceAndCollection } from './provisioning.js';
|
|
51
|
-
export { isSyncAuthError, isSyncConflictError, isSyncNotFoundError, isUnknownEpochError } from './predicates.js';
|
|
51
|
+
export { isSyncAuthError, isSyncConflictError, isSyncNotFoundError, isKeyUnwrapError, isUnknownEpochError } from './predicates.js';
|
|
52
52
|
export { EncryptionError, KeyUnwrapError, UnknownEpochError, WasSyncAuthError, WasSyncConflictError, WasSyncNotFoundError } from '../errors.js';
|
|
53
53
|
//# sourceMappingURL=index.js.map
|
package/dist/sync/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAC1E,sEAAsE;AACtE,6EAA6E;AAC7E,SAAS;AACT,OAAO,EAAE,UAAU,IAAI,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AACtE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAA;AAC/D,OAAO,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAA;AACzE,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACrB,MAAM,cAAc,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAC1E,sEAAsE;AACtE,6EAA6E;AAC7E,SAAS;AACT,OAAO,EAAE,UAAU,IAAI,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AACtE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAA;AAC/D,OAAO,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAA;AACzE,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACrB,MAAM,cAAc,CAAA"}
|
package/dist/sync/port.d.ts
CHANGED
|
@@ -81,7 +81,11 @@ export declare function parseEtag(etag: string | null | undefined): number | und
|
|
|
81
81
|
* `404` is a modeled outcome rather than an anomaly: `deleteContent` resolves
|
|
82
82
|
* (the tombstone's goal state already holds -- an idempotent delete), and `get`
|
|
83
83
|
* resolves `null` (absent or tombstoned -- the deletion-wins input its callers
|
|
84
|
-
* depend on).
|
|
84
|
+
* depend on). A `putMeta` `404` is ambiguous by design: it is either the
|
|
85
|
+
* masked authorization failure or a delete race (the resource was deleted by
|
|
86
|
+
* another replica after this one read it), and the option maps it to a
|
|
87
|
+
* {@link WasSyncAuthError} whose `status` a push loop can corroborate against
|
|
88
|
+
* a re-read. Revoked access still surfaces within one poll on `query` and on
|
|
85
89
|
* the content/metadata writes.
|
|
86
90
|
*
|
|
87
91
|
* @param options {object}
|
package/dist/sync/port.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"port.d.ts","sourceRoot":"","sources":["../../src/sync/port.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAEhD,OAAO,EACL,gBAAgB,EAGjB,MAAM,4BAA4B,CAAA;AAWnC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"port.d.ts","sourceRoot":"","sources":["../../src/sync/port.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAEhD,OAAO,EACL,gBAAgB,EAGjB,MAAM,4BAA4B,CAAA;AAWnC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,KAAK,EAIV,WAAW,EAEZ,MAAM,YAAY,CAAA;AAEnB;;;;;GAKG;AACH,OAAO,EAAE,gBAAgB,EAAE,CAAA;AAyG3B;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAW7E;AAwBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,GAAG,EACH,OAAO,EACP,YAAY,EACZ,UAAU,EACV,aAAqB,EACtB,EAAE;IACD,GAAG,EAAE,SAAS,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,KAAK,CAAA;IAClB,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB,GAAG,WAAW,CA6Nd"}
|
package/dist/sync/port.js
CHANGED
|
@@ -66,12 +66,13 @@ function isPortSignal(mapped) {
|
|
|
66
66
|
* (so a status outside this list -- a `500`, a `507` quota-exceeded -- still
|
|
67
67
|
* leaves the sync subpath typed and carrying the server's problem details).
|
|
68
68
|
* A rejected precondition becomes a {@link WasSyncConflictError} for every
|
|
69
|
-
* write. `notFound` opts in to the not-found mapping, which
|
|
70
|
-
* `
|
|
71
|
-
* delete
|
|
69
|
+
* write. `notFound` opts in to the not-found mapping, which `deleteContent`
|
|
70
|
+
* and `putMeta` perform on the default port (an already-gone target is a
|
|
71
|
+
* settled outcome for a delete and a delete race for a metadata write, but a
|
|
72
|
+
* hard error for a content write). `authErrors` is
|
|
72
73
|
* the port's `mapAuthErrors` option: it maps `401` / `403` / the masked `404`
|
|
73
74
|
* to a {@link WasSyncAuthError}. `notFound` is checked first, so a port that
|
|
74
|
-
* asked for both still gets the
|
|
75
|
+
* asked for both still gets the not-found signal.
|
|
75
76
|
*
|
|
76
77
|
* @param err {unknown} the caught error
|
|
77
78
|
* @param [options] {object}
|
|
@@ -161,7 +162,11 @@ function versionedEtag(response) {
|
|
|
161
162
|
* `404` is a modeled outcome rather than an anomaly: `deleteContent` resolves
|
|
162
163
|
* (the tombstone's goal state already holds -- an idempotent delete), and `get`
|
|
163
164
|
* resolves `null` (absent or tombstoned -- the deletion-wins input its callers
|
|
164
|
-
* depend on).
|
|
165
|
+
* depend on). A `putMeta` `404` is ambiguous by design: it is either the
|
|
166
|
+
* masked authorization failure or a delete race (the resource was deleted by
|
|
167
|
+
* another replica after this one read it), and the option maps it to a
|
|
168
|
+
* {@link WasSyncAuthError} whose `status` a push loop can corroborate against
|
|
169
|
+
* a re-read. Revoked access still surfaces within one poll on `query` and on
|
|
165
170
|
* the content/metadata writes.
|
|
166
171
|
*
|
|
167
172
|
* @param options {object}
|
|
@@ -228,10 +233,19 @@ export function createWasSyncPort({ was, spaceId, collectionId, capability, mapA
|
|
|
228
233
|
const { etag, version } = versionedEtag(response);
|
|
229
234
|
return { version: version ?? 0, etag };
|
|
230
235
|
};
|
|
236
|
+
// The signals `deleteContent` and `putMeta` ask `mapWriteError` for: the
|
|
237
|
+
// not-found mapping on the default port, the auth mapping under
|
|
238
|
+
// `mapAuthErrors`.
|
|
239
|
+
const writeSignals = { notFound: !mapAuthErrors, authErrors: mapAuthErrors };
|
|
231
240
|
return {
|
|
232
241
|
async query({ checkpoint, limit }) {
|
|
233
242
|
try {
|
|
234
|
-
|
|
243
|
+
// The feed's bodies are parsed JSON, so the shared page's `unknown`
|
|
244
|
+
// bodies narrow to the `Json` the port contract promises.
|
|
245
|
+
return (await changesCollection.changes({
|
|
246
|
+
checkpoint,
|
|
247
|
+
limit
|
|
248
|
+
}));
|
|
235
249
|
}
|
|
236
250
|
catch (err) {
|
|
237
251
|
// The pull path is where revoked access surfaces reliably: unlike a
|
|
@@ -283,10 +297,7 @@ export function createWasSyncPort({ was, spaceId, collectionId, capability, mapA
|
|
|
283
297
|
if (mapAuthErrors && mapped instanceof NotFoundError) {
|
|
284
298
|
return undefined;
|
|
285
299
|
}
|
|
286
|
-
mapWriteError(mapped,
|
|
287
|
-
notFound: !mapAuthErrors,
|
|
288
|
-
authErrors: mapAuthErrors
|
|
289
|
-
});
|
|
300
|
+
mapWriteError(mapped, writeSignals);
|
|
290
301
|
}
|
|
291
302
|
},
|
|
292
303
|
async putMeta({ id, custom, ifMatch, ifNoneMatch }) {
|
|
@@ -307,7 +318,12 @@ export function createWasSyncPort({ was, spaceId, collectionId, capability, mapA
|
|
|
307
318
|
return etag !== undefined ? { version: version ?? 0, etag } : undefined;
|
|
308
319
|
}
|
|
309
320
|
catch (err) {
|
|
310
|
-
|
|
321
|
+
// A `/meta` write against a nonexistent resource legitimately `404`s
|
|
322
|
+
// (the resource was deleted by another replica after this one read
|
|
323
|
+
// it), so the default port raises the not-found signal a push loop
|
|
324
|
+
// can corroborate. Under `mapAuthErrors` the masked `404` stays the
|
|
325
|
+
// auth signal, `status` telling the two apart.
|
|
326
|
+
mapWriteError(err, writeSignals);
|
|
311
327
|
}
|
|
312
328
|
},
|
|
313
329
|
async get({ id }) {
|
package/dist/sync/port.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"port.js","sourceRoot":"","sources":["../../src/sync/port.ts"],"names":[],"mappings":"AAuCA,OAAO,EACL,gBAAgB,EAChB,QAAQ,EACR,YAAY,EACb,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACjE,OAAO,EACL,QAAQ,EACR,aAAa,EACb,uBAAuB,EACvB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACrB,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"port.js","sourceRoot":"","sources":["../../src/sync/port.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,8 +5,9 @@
|
|
|
5
5
|
* The `err.name` predicates that classify the errors a replication path can
|
|
6
6
|
* meet: the port's two wire signals (`WasSyncConflictError` /
|
|
7
7
|
* `WasSyncNotFoundError`), its opt-in revoked-access signal
|
|
8
|
-
* (`WasSyncAuthError`), and the cipher's
|
|
9
|
-
* (`UnknownEpochError`)
|
|
8
|
+
* (`WasSyncAuthError`), and the cipher's two no-key signals: the
|
|
9
|
+
* stale-descriptor one (`UnknownEpochError`) and the not-a-recipient one
|
|
10
|
+
* (`KeyUnwrapError`).
|
|
10
11
|
*
|
|
11
12
|
* They live beside the classes that assign the names they match (`errors.ts`)
|
|
12
13
|
* because every one of those errors is raised inside a seam the consuming app
|
|
@@ -36,8 +37,10 @@
|
|
|
36
37
|
export declare function isSyncConflictError(err: unknown): boolean;
|
|
37
38
|
/**
|
|
38
39
|
* Whether an error is the replication port's absent-target signal
|
|
39
|
-
* (`WasSyncNotFoundError`, HTTP 404)
|
|
40
|
-
*
|
|
40
|
+
* (`WasSyncNotFoundError`, HTTP 404), raised by the default port's
|
|
41
|
+
* `deleteContent` and `putMeta`. On a delete that is a settled outcome --
|
|
42
|
+
* already gone, or the write never reached the server -- not a conflict. On a
|
|
43
|
+
* metadata write it marks a race with a remote delete.
|
|
41
44
|
*
|
|
42
45
|
* @param err {unknown}
|
|
43
46
|
* @returns {boolean}
|
|
@@ -64,4 +67,18 @@ export declare function isSyncAuthError(err: unknown): boolean;
|
|
|
64
67
|
* @returns {boolean}
|
|
65
68
|
*/
|
|
66
69
|
export declare function isUnknownEpochError(err: unknown): boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Whether an error is the cipher's not-a-recipient signal (`KeyUnwrapError`):
|
|
72
|
+
* the envelope's epoch IS on the descriptor this reader holds, but the reader
|
|
73
|
+
* has no key for it -- never a recipient of that epoch, or removed and the
|
|
74
|
+
* epoch rotated since. Real data, unreadable by this reader, and never
|
|
75
|
+
* garbage: a caller scanning rows skips such a row and leaves it in place,
|
|
76
|
+
* where a scan that missed the class would drop it into an undecryptable
|
|
77
|
+
* bucket a host is entitled to purge. Re-reading the descriptor cannot help,
|
|
78
|
+
* which is what tells it from `isUnknownEpochError`.
|
|
79
|
+
*
|
|
80
|
+
* @param err {unknown} the caught error
|
|
81
|
+
* @returns {boolean}
|
|
82
|
+
*/
|
|
83
|
+
export declare function isKeyUnwrapError(err: unknown): boolean;
|
|
67
84
|
//# sourceMappingURL=predicates.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"predicates.d.ts","sourceRoot":"","sources":["../../src/sync/predicates.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH
|
|
1
|
+
{"version":3,"file":"predicates.d.ts","sourceRoot":"","sources":["../../src/sync/predicates.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAaH;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAEzD;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAEzD;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAErD;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAEzD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAEtD"}
|
package/dist/sync/predicates.js
CHANGED
|
@@ -5,8 +5,9 @@
|
|
|
5
5
|
* The `err.name` predicates that classify the errors a replication path can
|
|
6
6
|
* meet: the port's two wire signals (`WasSyncConflictError` /
|
|
7
7
|
* `WasSyncNotFoundError`), its opt-in revoked-access signal
|
|
8
|
-
* (`WasSyncAuthError`), and the cipher's
|
|
9
|
-
* (`UnknownEpochError`)
|
|
8
|
+
* (`WasSyncAuthError`), and the cipher's two no-key signals: the
|
|
9
|
+
* stale-descriptor one (`UnknownEpochError`) and the not-a-recipient one
|
|
10
|
+
* (`KeyUnwrapError`).
|
|
10
11
|
*
|
|
11
12
|
* They live beside the classes that assign the names they match (`errors.ts`)
|
|
12
13
|
* because every one of those errors is raised inside a seam the consuming app
|
|
@@ -48,8 +49,10 @@ export function isSyncConflictError(err) {
|
|
|
48
49
|
}
|
|
49
50
|
/**
|
|
50
51
|
* Whether an error is the replication port's absent-target signal
|
|
51
|
-
* (`WasSyncNotFoundError`, HTTP 404)
|
|
52
|
-
*
|
|
52
|
+
* (`WasSyncNotFoundError`, HTTP 404), raised by the default port's
|
|
53
|
+
* `deleteContent` and `putMeta`. On a delete that is a settled outcome --
|
|
54
|
+
* already gone, or the write never reached the server -- not a conflict. On a
|
|
55
|
+
* metadata write it marks a race with a remote delete.
|
|
53
56
|
*
|
|
54
57
|
* @param err {unknown}
|
|
55
58
|
* @returns {boolean}
|
|
@@ -82,4 +85,20 @@ export function isSyncAuthError(err) {
|
|
|
82
85
|
export function isUnknownEpochError(err) {
|
|
83
86
|
return nameOf(err) === 'UnknownEpochError';
|
|
84
87
|
}
|
|
88
|
+
/**
|
|
89
|
+
* Whether an error is the cipher's not-a-recipient signal (`KeyUnwrapError`):
|
|
90
|
+
* the envelope's epoch IS on the descriptor this reader holds, but the reader
|
|
91
|
+
* has no key for it -- never a recipient of that epoch, or removed and the
|
|
92
|
+
* epoch rotated since. Real data, unreadable by this reader, and never
|
|
93
|
+
* garbage: a caller scanning rows skips such a row and leaves it in place,
|
|
94
|
+
* where a scan that missed the class would drop it into an undecryptable
|
|
95
|
+
* bucket a host is entitled to purge. Re-reading the descriptor cannot help,
|
|
96
|
+
* which is what tells it from `isUnknownEpochError`.
|
|
97
|
+
*
|
|
98
|
+
* @param err {unknown} the caught error
|
|
99
|
+
* @returns {boolean}
|
|
100
|
+
*/
|
|
101
|
+
export function isKeyUnwrapError(err) {
|
|
102
|
+
return nameOf(err) === 'KeyUnwrapError';
|
|
103
|
+
}
|
|
85
104
|
//# sourceMappingURL=predicates.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"predicates.js","sourceRoot":"","sources":["../../src/sync/predicates.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH
|
|
1
|
+
{"version":3,"file":"predicates.js","sourceRoot":"","sources":["../../src/sync/predicates.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH;;;;;;GAMG;AACH,SAAS,MAAM,CAAC,GAAY;IAC1B,OAAQ,GAAiC,EAAE,IAAI,CAAA;AACjD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAY;IAC9C,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,sBAAsB,CAAA;AAC/C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAY;IAC9C,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,sBAAsB,CAAA;AAC/C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAAC,GAAY;IAC1C,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,kBAAkB,CAAA;AAC3C,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAY;IAC9C,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,mBAAmB,CAAA;AAC5C,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,gBAAgB,CAAA;AACzC,CAAC"}
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
* collection is created descriptor-less here and declared governed afterwards,
|
|
23
23
|
* by the caller's guarded create of the log.
|
|
24
24
|
*/
|
|
25
|
-
import type { SpaceDescription } from '../types.js';
|
|
25
|
+
import type { IZcap, SpaceDescription } from '../types.js';
|
|
26
26
|
import type { WasClient } from '../WasClient.js';
|
|
27
27
|
/**
|
|
28
28
|
* Ensures the controller's Space exists and one synced collection is
|
|
@@ -56,8 +56,8 @@ import type { WasClient } from '../WasClient.js';
|
|
|
56
56
|
* `ValidationError` here rather than letting the caller's log create fail
|
|
57
57
|
* with the server's 409. A public collection gets the collection-level
|
|
58
58
|
* world-read grant (`setPublic`, what makes a resource URL in it resolve for
|
|
59
|
-
* anyone) only when its policy does not already say so.
|
|
60
|
-
*
|
|
59
|
+
* anyone) only when its policy does not already say so. Every request invokes
|
|
60
|
+
* the root capability, or `capability` when the caller holds a delegated one.
|
|
61
61
|
*
|
|
62
62
|
* @param options {object}
|
|
63
63
|
* @param options.was {WasClient}
|
|
@@ -86,9 +86,13 @@ import type { WasClient } from '../WasClient.js';
|
|
|
86
86
|
* be `spaceId` -- a description of some other Space throws
|
|
87
87
|
* `ValidationError`, since skipping the ensure would leave that Space
|
|
88
88
|
* unprovisioned
|
|
89
|
+
* @param [options.capability] {IZcap} an invocation capability every
|
|
90
|
+
* request rides (a delegated Space-subtree zcap, say); the root capability
|
|
91
|
+
* is invoked otherwise. A capability scoped below the bare Space URL cannot
|
|
92
|
+
* reach the Space half, so a caller holding one supplies `spaceDescription`
|
|
89
93
|
* @returns {Promise<void>}
|
|
90
94
|
*/
|
|
91
|
-
export declare function ensureSpaceAndCollection({ was, spaceId, controllerDid, collectionId, encryption, isPublic, spaceName, collectionName, spaceDescription }: {
|
|
95
|
+
export declare function ensureSpaceAndCollection({ was, spaceId, controllerDid, collectionId, encryption, isPublic, spaceName, collectionName, spaceDescription, capability }: {
|
|
92
96
|
was: WasClient;
|
|
93
97
|
spaceId: string;
|
|
94
98
|
controllerDid: string;
|
|
@@ -98,6 +102,7 @@ export declare function ensureSpaceAndCollection({ was, spaceId, controllerDid,
|
|
|
98
102
|
spaceName?: string;
|
|
99
103
|
collectionName?: string;
|
|
100
104
|
spaceDescription?: SpaceDescription;
|
|
105
|
+
capability?: IZcap;
|
|
101
106
|
}): Promise<void>;
|
|
102
107
|
/**
|
|
103
108
|
* Ensures the controller's Space exists, without overwriting anything already
|
|
@@ -119,14 +124,17 @@ export declare function ensureSpaceAndCollection({ was, spaceId, controllerDid,
|
|
|
119
124
|
* `did:key`); used only when the Space does not exist yet
|
|
120
125
|
* @param [options.spaceName] {string} the Space display name, applied only at
|
|
121
126
|
* Space creation; defaults to `'WAS Space'`
|
|
127
|
+
* @param [options.capability] {IZcap} an invocation capability both
|
|
128
|
+
* requests ride; the root capability is invoked otherwise
|
|
122
129
|
* @returns {Promise<SpaceDescription>} the Space's description, existing or
|
|
123
130
|
* just written -- pass it to {@link ensureSpaceAndCollection} as
|
|
124
131
|
* `spaceDescription` so each collection skips the Space ensure
|
|
125
132
|
*/
|
|
126
|
-
export declare function ensureSpace({ was, spaceId, controllerDid, spaceName }: {
|
|
133
|
+
export declare function ensureSpace({ was, spaceId, controllerDid, spaceName, capability }: {
|
|
127
134
|
was: WasClient;
|
|
128
135
|
spaceId: string;
|
|
129
136
|
controllerDid: string;
|
|
130
137
|
spaceName?: string;
|
|
138
|
+
capability?: IZcap;
|
|
131
139
|
}): Promise<SpaceDescription>;
|
|
132
140
|
//# sourceMappingURL=provisioning.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provisioning.d.ts","sourceRoot":"","sources":["../../src/sync/provisioning.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"provisioning.d.ts","sourceRoot":"","sources":["../../src/sync/provisioning.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,EAEV,KAAK,EACL,gBAAgB,EACjB,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAkGhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmEG;AACH,wBAAsB,wBAAwB,CAAC,EAC7C,GAAG,EACH,OAAO,EACP,aAAa,EACb,YAAY,EACZ,UAAkB,EAClB,QAAgB,EAChB,SAA8B,EAC9B,cAA6B,EAC7B,gBAAgB,EAChB,UAAU,EACX,EAAE;IACD,GAAG,EAAE,SAAS,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,KAAK,GAAG,WAAW,GAAG,UAAU,CAAA;IAC7C,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC,UAAU,CAAC,EAAE,KAAK,CAAA;CACnB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuGhB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,WAAW,CAAC,EAChC,GAAG,EACH,OAAO,EACP,aAAa,EACb,SAA8B,EAC9B,UAAU,EACX,EAAE;IACD,GAAG,EAAE,SAAS,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,KAAK,CAAA;CACnB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAqB5B"}
|
|
@@ -115,8 +115,8 @@ async function readOrCreate({ read, create, unreadable }) {
|
|
|
115
115
|
* `ValidationError` here rather than letting the caller's log create fail
|
|
116
116
|
* with the server's 409. A public collection gets the collection-level
|
|
117
117
|
* world-read grant (`setPublic`, what makes a resource URL in it resolve for
|
|
118
|
-
* anyone) only when its policy does not already say so.
|
|
119
|
-
*
|
|
118
|
+
* anyone) only when its policy does not already say so. Every request invokes
|
|
119
|
+
* the root capability, or `capability` when the caller holds a delegated one.
|
|
120
120
|
*
|
|
121
121
|
* @param options {object}
|
|
122
122
|
* @param options.was {WasClient}
|
|
@@ -145,12 +145,16 @@ async function readOrCreate({ read, create, unreadable }) {
|
|
|
145
145
|
* be `spaceId` -- a description of some other Space throws
|
|
146
146
|
* `ValidationError`, since skipping the ensure would leave that Space
|
|
147
147
|
* unprovisioned
|
|
148
|
+
* @param [options.capability] {IZcap} an invocation capability every
|
|
149
|
+
* request rides (a delegated Space-subtree zcap, say); the root capability
|
|
150
|
+
* is invoked otherwise. A capability scoped below the bare Space URL cannot
|
|
151
|
+
* reach the Space half, so a caller holding one supplies `spaceDescription`
|
|
148
152
|
* @returns {Promise<void>}
|
|
149
153
|
*/
|
|
150
|
-
export async function ensureSpaceAndCollection({ was, spaceId, controllerDid, collectionId, encryption = 'edv', isPublic = false, spaceName = DEFAULT_SPACE_NAME, collectionName = collectionId, spaceDescription }) {
|
|
151
|
-
const space = was.space(spaceId);
|
|
154
|
+
export async function ensureSpaceAndCollection({ was, spaceId, controllerDid, collectionId, encryption = 'edv', isPublic = false, spaceName = DEFAULT_SPACE_NAME, collectionName = collectionId, spaceDescription, capability }) {
|
|
155
|
+
const space = was.space(spaceId, { capability });
|
|
152
156
|
if (spaceDescription === undefined) {
|
|
153
|
-
await ensureSpace({ was, spaceId, controllerDid, spaceName });
|
|
157
|
+
await ensureSpace({ was, spaceId, controllerDid, spaceName, capability });
|
|
154
158
|
}
|
|
155
159
|
else if (spaceDescription.id !== spaceId) {
|
|
156
160
|
// Supplying a description skips the Space half entirely, so a caller
|
|
@@ -250,12 +254,14 @@ export async function ensureSpaceAndCollection({ was, spaceId, controllerDid, co
|
|
|
250
254
|
* `did:key`); used only when the Space does not exist yet
|
|
251
255
|
* @param [options.spaceName] {string} the Space display name, applied only at
|
|
252
256
|
* Space creation; defaults to `'WAS Space'`
|
|
257
|
+
* @param [options.capability] {IZcap} an invocation capability both
|
|
258
|
+
* requests ride; the root capability is invoked otherwise
|
|
253
259
|
* @returns {Promise<SpaceDescription>} the Space's description, existing or
|
|
254
260
|
* just written -- pass it to {@link ensureSpaceAndCollection} as
|
|
255
261
|
* `spaceDescription` so each collection skips the Space ensure
|
|
256
262
|
*/
|
|
257
|
-
export async function ensureSpace({ was, spaceId, controllerDid, spaceName = DEFAULT_SPACE_NAME }) {
|
|
258
|
-
const space = was.space(spaceId);
|
|
263
|
+
export async function ensureSpace({ was, spaceId, controllerDid, spaceName = DEFAULT_SPACE_NAME, capability }) {
|
|
264
|
+
const space = was.space(spaceId, { capability });
|
|
259
265
|
try {
|
|
260
266
|
const { value } = await readOrCreate({
|
|
261
267
|
read: () => space.describe(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provisioning.js","sourceRoot":"","sources":["../../src/sync/provisioning.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"provisioning.js","sourceRoot":"","sources":["../../src/sync/provisioning.ts"],"names":[],"mappings":"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"}
|
package/dist/sync/types.d.ts
CHANGED
|
@@ -33,17 +33,25 @@ export type SyncCheckpoint = ChangesCheckpoint;
|
|
|
33
33
|
* exactly as the server emits them, so a puller passes one back verbatim as a
|
|
34
34
|
* conditional write's `ifMatch` without a {@link WasSyncPort.get} first. A
|
|
35
35
|
* tombstone carries `_deleted: true` with no `data`. This is the shared
|
|
36
|
-
* `ChangeDocument` from `@interop/storage-core
|
|
37
|
-
* `
|
|
38
|
-
*
|
|
36
|
+
* `ChangeDocument` from `@interop/storage-core` with its two bodies typed as
|
|
37
|
+
* `Json`, the parsed JSON they always are on the wire (the shared type leaves
|
|
38
|
+
* them `unknown`); on an encrypted collection `data`/`custom` are the opaque
|
|
39
|
+
* stored envelope, moved verbatim (decrypt is a projection-time concern the
|
|
40
|
+
* engine's `DocCipher` handles, never the port).
|
|
39
41
|
*/
|
|
40
|
-
export
|
|
42
|
+
export interface WireDoc extends Omit<ChangeDocument, 'data' | 'custom'> {
|
|
43
|
+
data?: Json;
|
|
44
|
+
custom?: Json;
|
|
45
|
+
}
|
|
41
46
|
/**
|
|
42
47
|
* One page of the `changes` feed -- the return shape of {@link
|
|
43
|
-
* WasSyncPort.query} (the shared `ChangesPage
|
|
44
|
-
*
|
|
48
|
+
* WasSyncPort.query} (the shared `ChangesPage`, its documents typed as
|
|
49
|
+
* {@link WireDoc}): the page's `documents` and its resume `checkpoint`, or
|
|
50
|
+
* `checkpoint: null` for an empty (no-change) page.
|
|
45
51
|
*/
|
|
46
|
-
export
|
|
52
|
+
export interface SyncPage extends Omit<ChangesPage, 'documents'> {
|
|
53
|
+
documents: WireDoc[];
|
|
54
|
+
}
|
|
47
55
|
/**
|
|
48
56
|
* The current master state of a single resource, read back for the 412-conflict
|
|
49
57
|
* path ({@link WasSyncPort.get}). An absent or tombstoned resource surfaces as
|
|
@@ -87,10 +95,8 @@ export interface WriteAck {
|
|
|
87
95
|
* The injected WAS-access seam. `createWasSyncPort` implements this over
|
|
88
96
|
* `@interop/was-client`'s `was.request()` and the `Collection.changes()` feed;
|
|
89
97
|
* a change engine depends only on this interface. Every method moves the stored
|
|
90
|
-
* body verbatim -- no codec, no key handling.
|
|
91
|
-
*
|
|
92
|
-
* `putMeta` is optional: a replica that syncs only content (never the user-
|
|
93
|
-
* writable `/meta` `custom`) may omit it. All other methods are required.
|
|
98
|
+
* body verbatim -- no codec, no key handling. Every method is required,
|
|
99
|
+
* `putMeta` included: a replica that syncs content only simply never calls it.
|
|
94
100
|
*/
|
|
95
101
|
export interface WasSyncPort {
|
|
96
102
|
/**
|
|
@@ -135,14 +141,17 @@ export interface WasSyncPort {
|
|
|
135
141
|
}): Promise<WriteAck | undefined>;
|
|
136
142
|
/**
|
|
137
143
|
* Conditionally writes the user-writable metadata `custom` (`PUT /:id/meta`).
|
|
138
|
-
*
|
|
144
|
+
* The write fully
|
|
139
145
|
* replaces `custom`, so omitting it writes the CLEARED state (the server
|
|
140
146
|
* clears every property the body leaves out) -- that is how a metadata clear
|
|
141
147
|
* replicates. Returns the new metadata {@link WriteAck}, or `undefined` when
|
|
142
148
|
* the response carried no `ETag`. Throws {@link WasSyncConflictError} on
|
|
143
|
-
* `412
|
|
149
|
+
* `412`, and {@link WasSyncNotFoundError} on `404` (the resource is gone: a
|
|
150
|
+
* delete race the caller corroborates). A port built with
|
|
151
|
+
* `mapAuthErrors: true` raises {@link WasSyncAuthError} with `status: 404`
|
|
152
|
+
* there instead, since the masked `404` is ambiguous.
|
|
144
153
|
*/
|
|
145
|
-
putMeta
|
|
154
|
+
putMeta(options: {
|
|
146
155
|
id: string;
|
|
147
156
|
custom?: Json;
|
|
148
157
|
ifMatch?: string;
|
package/dist/sync/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sync/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,WAAW,EACZ,MAAM,uBAAuB,CAAA;AAC9B,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAEvC,YAAY,EAAE,IAAI,EAAE,CAAA;AAEpB;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GAAG,iBAAiB,CAAA;AAE9C
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sync/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ZcapClient } from '@interop/ezcap';
|
|
2
|
+
import type { ISigner } from '@interop/data-integrity-core';
|
|
3
|
+
/**
|
|
4
|
+
* A `ZcapClient` signing invocations and delegations alike with one signer,
|
|
5
|
+
* under `eddsa-jcs-2022` -- the suite every zcap this library and its
|
|
6
|
+
* consumers mint is signed with. The suite is hard-coded rather than threaded
|
|
7
|
+
* as a caller option: a wrong setting would surface only as an interop failure
|
|
8
|
+
* at the server, so a second copy is a setting someone has to remember.
|
|
9
|
+
* Callers that sign under a different key id (a did:webvh verification
|
|
10
|
+
* method, a ladder VM) build the signer and hand it here.
|
|
11
|
+
*
|
|
12
|
+
* @param options {object}
|
|
13
|
+
* @param options.signer {ISigner} signs invocations and delegations alike
|
|
14
|
+
* @returns {ZcapClient}
|
|
15
|
+
*/
|
|
16
|
+
export declare function zcapClientForSigner({ signer }: {
|
|
17
|
+
signer: ISigner;
|
|
18
|
+
}): ZcapClient;
|
|
19
|
+
//# sourceMappingURL=zcapClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zcapClient.d.ts","sourceRoot":"","sources":["../src/zcapClient.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AAE3D;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,MAAM,EACP,EAAE;IACD,MAAM,EAAE,OAAO,CAAA;CAChB,GAAG,UAAU,CAMb"}
|