@interop/wallet-core 0.20.0 → 0.22.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 +5 -2
- package/dist/descriptors/cipher.d.ts +4 -1
- package/dist/descriptors/cipher.d.ts.map +1 -1
- package/dist/descriptors/cipher.js +16 -8
- package/dist/descriptors/cipher.js.map +1 -1
- package/dist/keyring/record.d.ts +69 -18
- package/dist/keyring/record.d.ts.map +1 -1
- package/dist/keyring/record.js +90 -23
- package/dist/keyring/record.js.map +1 -1
- package/dist/keys/index.d.ts +4 -0
- package/dist/keys/index.d.ts.map +1 -1
- package/dist/keys/index.js +4 -0
- package/dist/keys/index.js.map +1 -1
- package/dist/keys/spaceEpochs.d.ts +56 -0
- package/dist/keys/spaceEpochs.d.ts.map +1 -0
- package/dist/keys/spaceEpochs.js +55 -0
- package/dist/keys/spaceEpochs.js.map +1 -0
- package/dist/keys/userKeyCascade.d.ts +14 -16
- package/dist/keys/userKeyCascade.d.ts.map +1 -1
- package/dist/keys/userKeyCascade.js +9 -43
- package/dist/keys/userKeyCascade.js.map +1 -1
- package/dist/recovery/recoveryRecord.d.ts +16 -13
- package/dist/recovery/recoveryRecord.d.ts.map +1 -1
- package/dist/recovery/recoveryRecord.js +14 -17
- package/dist/recovery/recoveryRecord.js.map +1 -1
- package/dist/recovery/recoveryWebvh.d.ts.map +1 -1
- package/dist/recovery/recoveryWebvh.js +4 -0
- package/dist/recovery/recoveryWebvh.js.map +1 -1
- package/dist/space/collections.d.ts +66 -32
- package/dist/space/collections.d.ts.map +1 -1
- package/dist/space/collections.js +88 -12
- package/dist/space/collections.js.map +1 -1
- package/dist/space/index.d.ts +13 -5
- package/dist/space/index.d.ts.map +1 -1
- package/dist/space/index.js +12 -4
- package/dist/space/index.js.map +1 -1
- package/dist/space/provisioning.d.ts +46 -0
- package/dist/space/provisioning.d.ts.map +1 -0
- package/dist/space/provisioning.js +52 -0
- package/dist/space/provisioning.js.map +1 -0
- package/dist/sync/engine.d.ts +17 -1
- package/dist/sync/engine.d.ts.map +1 -1
- package/dist/sync/engine.js +5 -0
- package/dist/sync/engine.js.map +1 -1
- package/dist/sync/index.d.ts +8 -3
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +8 -3
- package/dist/sync/index.js.map +1 -1
- package/dist/sync/push.d.ts.map +1 -1
- package/dist/sync/push.js +3 -2
- package/dist/sync/push.js.map +1 -1
- package/dist/sync/remint.d.ts +78 -0
- package/dist/sync/remint.d.ts.map +1 -0
- package/dist/sync/remint.js +73 -0
- package/dist/sync/remint.js.map +1 -0
- package/dist/sync/types.d.ts +26 -4
- package/dist/sync/types.d.ts.map +1 -1
- package/dist/sync/types.js +4 -4
- package/dist/sync/types.js.map +1 -1
- package/dist/webvh/didWebvh.d.ts.map +1 -1
- package/dist/webvh/didWebvh.js +3 -0
- package/dist/webvh/didWebvh.js.map +1 -1
- package/dist/webvh/revokeClient.d.ts.map +1 -1
- package/dist/webvh/revokeClient.js +1 -0
- package/dist/webvh/revokeClient.js.map +1 -1
- package/package.json +5 -5
|
@@ -10,15 +10,19 @@
|
|
|
10
10
|
* `isPublic` decide how it is stored and who can read it. A disagreement splits
|
|
11
11
|
* the feed into separate or incompatibly-shaped collections that never converge.
|
|
12
12
|
*
|
|
13
|
-
* The contacts collections (`contacts`, `contacts-history`)
|
|
14
|
-
*
|
|
15
|
-
* (`CONTACTS_COLLECTION_SPEC` / `CONTACTS_HISTORY_COLLECTION_SPEC`)
|
|
16
|
-
*
|
|
13
|
+
* The contacts collections (`contacts`, `contacts-history`) keep their identity
|
|
14
|
+
* contract (`collectionId`, `idDerivation`, `mutable`) in `@interop/social-core`
|
|
15
|
+
* (`CONTACTS_COLLECTION_SPEC` / `CONTACTS_HISTORY_COLLECTION_SPEC`) -- the field
|
|
16
|
+
* vocabulary below mirrors that spec. This module does not redeclare those
|
|
17
|
+
* fields; the wallet-Space rosters spread them in and add only the storage
|
|
18
|
+
* attributes that are wallet-Space layout (display name, `encryption`,
|
|
19
|
+
* `isPublic`).
|
|
17
20
|
*/
|
|
21
|
+
import { CONTACTS_COLLECTION_SPEC, CONTACTS_HISTORY_COLLECTION_SPEC } from '@interop/social-core';
|
|
18
22
|
/**
|
|
19
23
|
* The app-neutral display name every wallet passes when provisioning the
|
|
20
|
-
* shared Space (
|
|
21
|
-
* per-app name would
|
|
24
|
+
* shared Space (the name is set by whichever wallet happens to create the
|
|
25
|
+
* Space, so a per-app name would brand the account with that one app).
|
|
22
26
|
*/
|
|
23
27
|
export const WALLET_SPACE_NAME = 'Wallet Space';
|
|
24
28
|
/**
|
|
@@ -39,6 +43,7 @@ export const WALLET_ACTIVITY_COLLECTION = 'wallet-activity';
|
|
|
39
43
|
*/
|
|
40
44
|
export const PRIVATE_CREDENTIALS_COLLECTION_SPEC = {
|
|
41
45
|
collectionId: PRIVATE_CREDENTIALS_COLLECTION,
|
|
46
|
+
name: 'Verifiable Credentials',
|
|
42
47
|
idDerivation: 'content',
|
|
43
48
|
mutable: false,
|
|
44
49
|
encryption: 'edv',
|
|
@@ -51,6 +56,7 @@ export const PRIVATE_CREDENTIALS_COLLECTION_SPEC = {
|
|
|
51
56
|
*/
|
|
52
57
|
export const PUBLIC_CREDENTIALS_COLLECTION_SPEC = {
|
|
53
58
|
collectionId: PUBLIC_CREDENTIALS_COLLECTION,
|
|
59
|
+
name: 'Verifiable Credentials (Publicly Shared)',
|
|
54
60
|
idDerivation: 'content',
|
|
55
61
|
mutable: false,
|
|
56
62
|
encryption: 'plaintext',
|
|
@@ -63,19 +69,36 @@ export const PUBLIC_CREDENTIALS_COLLECTION_SPEC = {
|
|
|
63
69
|
*/
|
|
64
70
|
export const WALLET_ACTIVITY_COLLECTION_SPEC = {
|
|
65
71
|
collectionId: WALLET_ACTIVITY_COLLECTION,
|
|
72
|
+
name: 'Wallet Activity Log',
|
|
66
73
|
idDerivation: 'content',
|
|
67
74
|
mutable: false,
|
|
68
75
|
encryption: 'edv',
|
|
69
76
|
isPublic: false
|
|
70
77
|
};
|
|
71
78
|
/**
|
|
72
|
-
* The
|
|
79
|
+
* The contacts head collection as it sits in the wallet Space: the identity
|
|
80
|
+
* contract (`collectionId`, `idDerivation`, `mutable`) spread from
|
|
81
|
+
* `@interop/social-core`'s `CONTACTS_COLLECTION_SPEC` (which stays its owner),
|
|
82
|
+
* plus the storage attributes that are wallet-Space layout -- each contact a
|
|
83
|
+
* mutable EDV envelope, never public.
|
|
73
84
|
*/
|
|
74
|
-
export const
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
85
|
+
export const CONTACTS_SPACE_COLLECTION_SPEC = {
|
|
86
|
+
...CONTACTS_COLLECTION_SPEC,
|
|
87
|
+
name: 'Contacts',
|
|
88
|
+
encryption: 'edv',
|
|
89
|
+
isPublic: false
|
|
90
|
+
};
|
|
91
|
+
/**
|
|
92
|
+
* The contacts history log in the wallet Space: identity contract spread from
|
|
93
|
+
* `@interop/social-core`'s `CONTACTS_HISTORY_COLLECTION_SPEC`, stored as
|
|
94
|
+
* append-only, content-addressed EDV envelopes, never public.
|
|
95
|
+
*/
|
|
96
|
+
export const CONTACTS_HISTORY_SPACE_COLLECTION_SPEC = {
|
|
97
|
+
...CONTACTS_HISTORY_COLLECTION_SPEC,
|
|
98
|
+
name: 'Contacts History',
|
|
99
|
+
encryption: 'edv',
|
|
100
|
+
isPublic: false
|
|
101
|
+
};
|
|
79
102
|
/**
|
|
80
103
|
* The system collections and resource names that carry an account's identity
|
|
81
104
|
* and key material. They sit deliberately OUTSIDE the synced collection specs
|
|
@@ -97,6 +120,59 @@ export const WALLET_SPACE_COLLECTION_SPECS = [
|
|
|
97
120
|
export const ID_COLLECTION = { id: 'id', name: 'Identity' };
|
|
98
121
|
export const KEY_MAP_COLLECTION = { id: 'key-map', name: 'Key Map' };
|
|
99
122
|
export const KEYRING_COLLECTION = { id: 'keyring', name: 'Keyring' };
|
|
123
|
+
/**
|
|
124
|
+
* The `id` collection's provisioning attributes: plaintext (it holds only
|
|
125
|
+
* world-readable DID artifacts) with a collection-level public-read grant.
|
|
126
|
+
*/
|
|
127
|
+
export const ID_COLLECTION_SPEC = {
|
|
128
|
+
collectionId: ID_COLLECTION.id,
|
|
129
|
+
name: ID_COLLECTION.name,
|
|
130
|
+
encryption: 'plaintext',
|
|
131
|
+
isPublic: true
|
|
132
|
+
};
|
|
133
|
+
/**
|
|
134
|
+
* The `key-map` collection's provisioning attributes: plaintext (its resources
|
|
135
|
+
* are wrap-sets and key-id maps, protected by capability, not by an EDV
|
|
136
|
+
* envelope) and capability-only -- never public, exactly so `id` can be
|
|
137
|
+
* world-readable without exposing key material.
|
|
138
|
+
*/
|
|
139
|
+
export const KEY_MAP_COLLECTION_SPEC = {
|
|
140
|
+
collectionId: KEY_MAP_COLLECTION.id,
|
|
141
|
+
name: KEY_MAP_COLLECTION.name,
|
|
142
|
+
encryption: 'plaintext',
|
|
143
|
+
isPublic: false
|
|
144
|
+
};
|
|
145
|
+
/**
|
|
146
|
+
* The synced wallet Space collections, in provision order: the feeds a wallet
|
|
147
|
+
* both provisions and replicates (each gets a local replica and a sync engine).
|
|
148
|
+
*/
|
|
149
|
+
export const WALLET_SPACE_SYNCED_SPECS = [
|
|
150
|
+
PRIVATE_CREDENTIALS_COLLECTION_SPEC,
|
|
151
|
+
PUBLIC_CREDENTIALS_COLLECTION_SPEC,
|
|
152
|
+
WALLET_ACTIVITY_COLLECTION_SPEC,
|
|
153
|
+
CONTACTS_SPACE_COLLECTION_SPEC,
|
|
154
|
+
CONTACTS_HISTORY_SPACE_COLLECTION_SPEC
|
|
155
|
+
];
|
|
156
|
+
/**
|
|
157
|
+
* The provisioned-but-not-synced system collections: part of every wallet
|
|
158
|
+
* Space's layout, but no wallet mints a replication feed for them -- their
|
|
159
|
+
* resources (`did.json`, `keys.json`, `user-key.json`, ...) are read and
|
|
160
|
+
* written directly. `keyring` is deliberately absent: it lives in the separate
|
|
161
|
+
* unlock Space, never in the wallet data Space this roster lays out.
|
|
162
|
+
*/
|
|
163
|
+
export const WALLET_SPACE_SYSTEM_SPECS = [
|
|
164
|
+
ID_COLLECTION_SPEC,
|
|
165
|
+
KEY_MAP_COLLECTION_SPEC
|
|
166
|
+
];
|
|
167
|
+
/**
|
|
168
|
+
* The full wallet Space layout -- every collection the provisioning wallet
|
|
169
|
+
* ensures, synced feeds first. A Space provisioned from this roster is
|
|
170
|
+
* identical no matter which wallet app created it.
|
|
171
|
+
*/
|
|
172
|
+
export const WALLET_SPACE_PROVISION_ROSTER = [
|
|
173
|
+
...WALLET_SPACE_SYNCED_SPECS,
|
|
174
|
+
...WALLET_SPACE_SYSTEM_SPECS
|
|
175
|
+
];
|
|
100
176
|
/**
|
|
101
177
|
* The world-readable DID document, served as `application/did+json`.
|
|
102
178
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collections.js","sourceRoot":"","sources":["../../src/space/collections.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH
|
|
1
|
+
{"version":3,"file":"collections.js","sourceRoot":"","sources":["../../src/space/collections.ts"],"names":[],"mappings":"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"}
|
package/dist/space/index.d.ts
CHANGED
|
@@ -6,11 +6,18 @@
|
|
|
6
6
|
* WAS-enabled wallet apps share.
|
|
7
7
|
*
|
|
8
8
|
* - The shared collection ids and descriptive specs (`private-credentials`,
|
|
9
|
-
* `public-credentials`, `wallet-activity
|
|
10
|
-
* `@interop/social-core
|
|
9
|
+
* `public-credentials`, `wallet-activity`; the contacts identity contract
|
|
10
|
+
* stays in `@interop/social-core`, spread into the wallet-Space specs here),
|
|
11
|
+
* and the provisioning rosters that split them into synced feeds vs.
|
|
12
|
+
* provisioned-but-not-synced system collections.
|
|
11
13
|
* - The system collections and resource names that carry identity and key
|
|
12
14
|
* material (`id`, `key-map`, `keyring`; `did.json`, `did.jsonl`, `keys.json`,
|
|
13
15
|
* `user-key.json`, `keyring.json`) -- outside the synced set, never replicated.
|
|
16
|
+
* - `provisionWalletSpace`, the one-shot full-roster provisioner every
|
|
17
|
+
* controller-tier wallet client runs (create-if-absent, never clobbering
|
|
18
|
+
* settled configuration). It declares the encrypted collections; their
|
|
19
|
+
* epoch[0] install is the EDV-bearing `ensureWalletSpaceEpochs` in
|
|
20
|
+
* `@interop/wallet-core/keys`, kept out of this crypto-free module.
|
|
14
21
|
* - The `wallet-activity` wire shape (`WalletActivity`) and the pure
|
|
15
22
|
* `addHistory*` payload builders.
|
|
16
23
|
* - `publicCredentialUrl`, the world-readable shared-credential URL both
|
|
@@ -18,9 +25,10 @@
|
|
|
18
25
|
* - The `was-link` QR hand-off contract (`buildWasLinkPayload` /
|
|
19
26
|
* `parseWasLinkPayload` / `encodeWasLinkSecret`).
|
|
20
27
|
*/
|
|
21
|
-
export { WALLET_SPACE_NAME, PRIVATE_CREDENTIALS_COLLECTION, PUBLIC_CREDENTIALS_COLLECTION, WALLET_ACTIVITY_COLLECTION, PRIVATE_CREDENTIALS_COLLECTION_SPEC, PUBLIC_CREDENTIALS_COLLECTION_SPEC, WALLET_ACTIVITY_COLLECTION_SPEC,
|
|
22
|
-
export { ID_COLLECTION, KEY_MAP_COLLECTION, KEYRING_COLLECTION, DID_DOCUMENT_RESOURCE, DID_LOG_RESOURCE, DID_KEYS_RESOURCE, USER_KEY_ROSTER_RESOURCE, CLIENT_LABELS_RESOURCE, KEYRING_RESOURCE } from './collections.js';
|
|
23
|
-
export type { SpaceCollectionSpec } from './collections.js';
|
|
28
|
+
export { WALLET_SPACE_NAME, PRIVATE_CREDENTIALS_COLLECTION, PUBLIC_CREDENTIALS_COLLECTION, WALLET_ACTIVITY_COLLECTION, PRIVATE_CREDENTIALS_COLLECTION_SPEC, PUBLIC_CREDENTIALS_COLLECTION_SPEC, WALLET_ACTIVITY_COLLECTION_SPEC, CONTACTS_SPACE_COLLECTION_SPEC, CONTACTS_HISTORY_SPACE_COLLECTION_SPEC, WALLET_SPACE_SYNCED_SPECS, WALLET_SPACE_SYSTEM_SPECS, WALLET_SPACE_PROVISION_ROSTER } from './collections.js';
|
|
29
|
+
export { ID_COLLECTION, KEY_MAP_COLLECTION, KEYRING_COLLECTION, ID_COLLECTION_SPEC, KEY_MAP_COLLECTION_SPEC, DID_DOCUMENT_RESOURCE, DID_LOG_RESOURCE, DID_KEYS_RESOURCE, USER_KEY_ROSTER_RESOURCE, CLIENT_LABELS_RESOURCE, KEYRING_RESOURCE } from './collections.js';
|
|
30
|
+
export type { SpaceProvisionSpec, SpaceCollectionSpec } from './collections.js';
|
|
31
|
+
export { provisionWalletSpace } from './provisioning.js';
|
|
24
32
|
export { ACTIVITY_TYPE, addHistoryNewAccount, addHistorySpaceCreated, addHistoryCredentialCreated, addHistoryCredentialDeleted, addHistoryCredentialShared, addHistoryCredentialUnshared, addHistoryLogin, addHistoryWalletLogin, addHistoryAppRevoke, addHistoryClientRevoked } from './activity.js';
|
|
25
33
|
export type { WalletActivity, ActivityGrant } from './activity.js';
|
|
26
34
|
export { publicCredentialUrl } from './publicLink.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/space/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/space/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EACL,iBAAiB,EACjB,8BAA8B,EAC9B,6BAA6B,EAC7B,0BAA0B,EAC1B,mCAAmC,EACnC,kCAAkC,EAClC,+BAA+B,EAC/B,8BAA8B,EAC9B,sCAAsC,EACtC,yBAAyB,EACzB,yBAAyB,EACzB,6BAA6B,EAC9B,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EACjB,wBAAwB,EACxB,sBAAsB,EACtB,gBAAgB,EACjB,MAAM,kBAAkB,CAAA;AACzB,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAE/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAExD,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,EAC3B,2BAA2B,EAC3B,0BAA0B,EAC1B,4BAA4B,EAC5B,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,EACxB,MAAM,eAAe,CAAA;AACtB,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAElE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAErD,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,cAAc,CAAA;AACrB,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAElD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA"}
|
package/dist/space/index.js
CHANGED
|
@@ -6,11 +6,18 @@
|
|
|
6
6
|
* WAS-enabled wallet apps share.
|
|
7
7
|
*
|
|
8
8
|
* - The shared collection ids and descriptive specs (`private-credentials`,
|
|
9
|
-
* `public-credentials`, `wallet-activity
|
|
10
|
-
* `@interop/social-core
|
|
9
|
+
* `public-credentials`, `wallet-activity`; the contacts identity contract
|
|
10
|
+
* stays in `@interop/social-core`, spread into the wallet-Space specs here),
|
|
11
|
+
* and the provisioning rosters that split them into synced feeds vs.
|
|
12
|
+
* provisioned-but-not-synced system collections.
|
|
11
13
|
* - The system collections and resource names that carry identity and key
|
|
12
14
|
* material (`id`, `key-map`, `keyring`; `did.json`, `did.jsonl`, `keys.json`,
|
|
13
15
|
* `user-key.json`, `keyring.json`) -- outside the synced set, never replicated.
|
|
16
|
+
* - `provisionWalletSpace`, the one-shot full-roster provisioner every
|
|
17
|
+
* controller-tier wallet client runs (create-if-absent, never clobbering
|
|
18
|
+
* settled configuration). It declares the encrypted collections; their
|
|
19
|
+
* epoch[0] install is the EDV-bearing `ensureWalletSpaceEpochs` in
|
|
20
|
+
* `@interop/wallet-core/keys`, kept out of this crypto-free module.
|
|
14
21
|
* - The `wallet-activity` wire shape (`WalletActivity`) and the pure
|
|
15
22
|
* `addHistory*` payload builders.
|
|
16
23
|
* - `publicCredentialUrl`, the world-readable shared-credential URL both
|
|
@@ -18,8 +25,9 @@
|
|
|
18
25
|
* - The `was-link` QR hand-off contract (`buildWasLinkPayload` /
|
|
19
26
|
* `parseWasLinkPayload` / `encodeWasLinkSecret`).
|
|
20
27
|
*/
|
|
21
|
-
export { WALLET_SPACE_NAME, PRIVATE_CREDENTIALS_COLLECTION, PUBLIC_CREDENTIALS_COLLECTION, WALLET_ACTIVITY_COLLECTION, PRIVATE_CREDENTIALS_COLLECTION_SPEC, PUBLIC_CREDENTIALS_COLLECTION_SPEC, WALLET_ACTIVITY_COLLECTION_SPEC,
|
|
22
|
-
export { ID_COLLECTION, KEY_MAP_COLLECTION, KEYRING_COLLECTION, DID_DOCUMENT_RESOURCE, DID_LOG_RESOURCE, DID_KEYS_RESOURCE, USER_KEY_ROSTER_RESOURCE, CLIENT_LABELS_RESOURCE, KEYRING_RESOURCE } from './collections.js';
|
|
28
|
+
export { WALLET_SPACE_NAME, PRIVATE_CREDENTIALS_COLLECTION, PUBLIC_CREDENTIALS_COLLECTION, WALLET_ACTIVITY_COLLECTION, PRIVATE_CREDENTIALS_COLLECTION_SPEC, PUBLIC_CREDENTIALS_COLLECTION_SPEC, WALLET_ACTIVITY_COLLECTION_SPEC, CONTACTS_SPACE_COLLECTION_SPEC, CONTACTS_HISTORY_SPACE_COLLECTION_SPEC, WALLET_SPACE_SYNCED_SPECS, WALLET_SPACE_SYSTEM_SPECS, WALLET_SPACE_PROVISION_ROSTER } from './collections.js';
|
|
29
|
+
export { ID_COLLECTION, KEY_MAP_COLLECTION, KEYRING_COLLECTION, ID_COLLECTION_SPEC, KEY_MAP_COLLECTION_SPEC, DID_DOCUMENT_RESOURCE, DID_LOG_RESOURCE, DID_KEYS_RESOURCE, USER_KEY_ROSTER_RESOURCE, CLIENT_LABELS_RESOURCE, KEYRING_RESOURCE } from './collections.js';
|
|
30
|
+
export { provisionWalletSpace } from './provisioning.js';
|
|
23
31
|
export { ACTIVITY_TYPE, addHistoryNewAccount, addHistorySpaceCreated, addHistoryCredentialCreated, addHistoryCredentialDeleted, addHistoryCredentialShared, addHistoryCredentialUnshared, addHistoryLogin, addHistoryWalletLogin, addHistoryAppRevoke, addHistoryClientRevoked } from './activity.js';
|
|
24
32
|
export { publicCredentialUrl } from './publicLink.js';
|
|
25
33
|
export { encodeWasLinkSecret, buildWasLinkPayload, parseWasLinkPayload } from './wasLink.js';
|
package/dist/space/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/space/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/space/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EACL,iBAAiB,EACjB,8BAA8B,EAC9B,6BAA6B,EAC7B,0BAA0B,EAC1B,mCAAmC,EACnC,kCAAkC,EAClC,+BAA+B,EAC/B,8BAA8B,EAC9B,sCAAsC,EACtC,yBAAyB,EACzB,yBAAyB,EACzB,6BAA6B,EAC9B,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EACjB,wBAAwB,EACxB,sBAAsB,EACtB,gBAAgB,EACjB,MAAM,kBAAkB,CAAA;AAGzB,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAExD,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,EAC3B,2BAA2B,EAC3B,0BAA0B,EAC1B,4BAA4B,EAC5B,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,EACxB,MAAM,eAAe,CAAA;AAGtB,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAErD,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,cAAc,CAAA;AAGrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) 2026 Interop Alliance. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* One-shot wallet Space provisioning: the single mechanism every wallet client
|
|
6
|
+
* runs to create (or re-ensure) a Space, walking the full
|
|
7
|
+
* `WALLET_SPACE_PROVISION_ROSTER` -- the synced feeds plus the non-synced
|
|
8
|
+
* system collections (`id`, `key-map`) -- so a Space's layout never depends on
|
|
9
|
+
* which app happened to provision it.
|
|
10
|
+
*/
|
|
11
|
+
import type { WasClient } from '@interop/was-client';
|
|
12
|
+
/**
|
|
13
|
+
* Ensures the Space exists and every collection in the wallet Space roster is
|
|
14
|
+
* configured, concurrently -- each collection depends only on the Space
|
|
15
|
+
* existing, and every step is create-if-absent (`ensureSpaceAndCollection` is
|
|
16
|
+
* non-clobbering: an existing Space description, encryption descriptor, or
|
|
17
|
+
* access policy is never overwritten), so an interrupted run is completed by
|
|
18
|
+
* simply re-running. A Space created here gets the app-neutral
|
|
19
|
+
* `WALLET_SPACE_NAME` and each collection its roster display name. Runs
|
|
20
|
+
* controller-tier, but is safe for ANY client the server authorizes as the
|
|
21
|
+
* controller -- the wallet that holds the Space's own root authority AND an
|
|
22
|
+
* enrolled client signing under the account's did:webvh -- because on an
|
|
23
|
+
* already-provisioned Space it only reads; an enrolled client re-running it
|
|
24
|
+
* heals a torn signup's missing collections without touching settled
|
|
25
|
+
* configuration.
|
|
26
|
+
*
|
|
27
|
+
* This declares the encrypted collections but installs no key material: every
|
|
28
|
+
* encrypted collection's descriptor must then get its epoch[0] from
|
|
29
|
+
* `ensureWalletSpaceEpochs` (`@interop/wallet-core/keys`), the EDV-bearing
|
|
30
|
+
* second step kept out of this module so the root barrel stays crypto-free.
|
|
31
|
+
* Reads and writes on an encrypted collection are refused fail-closed until
|
|
32
|
+
* that install lands.
|
|
33
|
+
*
|
|
34
|
+
* @param options {object}
|
|
35
|
+
* @param options.was {WasClient}
|
|
36
|
+
* @param options.spaceId {string}
|
|
37
|
+
* @param options.controllerDid {string} the Space controller; used only when
|
|
38
|
+
* the Space does not exist yet
|
|
39
|
+
* @returns {Promise<void>}
|
|
40
|
+
*/
|
|
41
|
+
export declare function provisionWalletSpace({ was, spaceId, controllerDid }: {
|
|
42
|
+
was: WasClient;
|
|
43
|
+
spaceId: string;
|
|
44
|
+
controllerDid: string;
|
|
45
|
+
}): Promise<void>;
|
|
46
|
+
//# sourceMappingURL=provisioning.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provisioning.d.ts","sourceRoot":"","sources":["../../src/space/provisioning.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AASpD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAsB,oBAAoB,CAAC,EACzC,GAAG,EACH,OAAO,EACP,aAAa,EACd,EAAE;IACD,GAAG,EAAE,SAAS,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,EAAE,MAAM,CAAA;CACtB,GAAG,OAAO,CAAC,IAAI,CAAC,CAMhB"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { ensureSpaceAndCollection } from '@interop/was-client/sync';
|
|
2
|
+
import { WALLET_SPACE_NAME, WALLET_SPACE_PROVISION_ROSTER } from './collections.js';
|
|
3
|
+
/**
|
|
4
|
+
* Ensures the Space exists and every collection in the wallet Space roster is
|
|
5
|
+
* configured, concurrently -- each collection depends only on the Space
|
|
6
|
+
* existing, and every step is create-if-absent (`ensureSpaceAndCollection` is
|
|
7
|
+
* non-clobbering: an existing Space description, encryption descriptor, or
|
|
8
|
+
* access policy is never overwritten), so an interrupted run is completed by
|
|
9
|
+
* simply re-running. A Space created here gets the app-neutral
|
|
10
|
+
* `WALLET_SPACE_NAME` and each collection its roster display name. Runs
|
|
11
|
+
* controller-tier, but is safe for ANY client the server authorizes as the
|
|
12
|
+
* controller -- the wallet that holds the Space's own root authority AND an
|
|
13
|
+
* enrolled client signing under the account's did:webvh -- because on an
|
|
14
|
+
* already-provisioned Space it only reads; an enrolled client re-running it
|
|
15
|
+
* heals a torn signup's missing collections without touching settled
|
|
16
|
+
* configuration.
|
|
17
|
+
*
|
|
18
|
+
* This declares the encrypted collections but installs no key material: every
|
|
19
|
+
* encrypted collection's descriptor must then get its epoch[0] from
|
|
20
|
+
* `ensureWalletSpaceEpochs` (`@interop/wallet-core/keys`), the EDV-bearing
|
|
21
|
+
* second step kept out of this module so the root barrel stays crypto-free.
|
|
22
|
+
* Reads and writes on an encrypted collection are refused fail-closed until
|
|
23
|
+
* that install lands.
|
|
24
|
+
*
|
|
25
|
+
* @param options {object}
|
|
26
|
+
* @param options.was {WasClient}
|
|
27
|
+
* @param options.spaceId {string}
|
|
28
|
+
* @param options.controllerDid {string} the Space controller; used only when
|
|
29
|
+
* the Space does not exist yet
|
|
30
|
+
* @returns {Promise<void>}
|
|
31
|
+
*/
|
|
32
|
+
export async function provisionWalletSpace({ was, spaceId, controllerDid }) {
|
|
33
|
+
await Promise.all(WALLET_SPACE_PROVISION_ROSTER.map(spec => ensureCollection({ was, spaceId, controllerDid, spec })));
|
|
34
|
+
}
|
|
35
|
+
async function ensureCollection({ was, spaceId, controllerDid, spec: { collectionId, name, encryption, isPublic } }) {
|
|
36
|
+
try {
|
|
37
|
+
await ensureSpaceAndCollection({
|
|
38
|
+
was,
|
|
39
|
+
spaceId,
|
|
40
|
+
controllerDid,
|
|
41
|
+
collectionId,
|
|
42
|
+
collectionName: name,
|
|
43
|
+
encryption,
|
|
44
|
+
isPublic,
|
|
45
|
+
spaceName: WALLET_SPACE_NAME
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
throw new Error(`Error provisioning collection "${collectionId}" in space "${spaceId}".`, { cause: err });
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=provisioning.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provisioning.js","sourceRoot":"","sources":["../../src/space/provisioning.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAA;AAEnE,OAAO,EACL,iBAAiB,EACjB,6BAA6B,EAC9B,MAAM,kBAAkB,CAAA;AAGzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,EACzC,GAAG,EACH,OAAO,EACP,aAAa,EAKd;IACC,MAAM,OAAO,CAAC,GAAG,CACf,6BAA6B,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CACvC,gBAAgB,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CACxD,CACF,CAAA;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,EAC9B,GAAG,EACH,OAAO,EACP,aAAa,EACb,IAAI,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,EAMnD;IACC,IAAI,CAAC;QACH,MAAM,wBAAwB,CAAC;YAC7B,GAAG;YACH,OAAO;YACP,aAAa;YACb,YAAY;YACZ,cAAc,EAAE,IAAI;YACpB,UAAU;YACV,QAAQ;YACR,SAAS,EAAE,iBAAiB;SAC7B,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,kCAAkC,YAAY,eAAe,OAAO,IAAI,EACxE,EAAE,KAAK,EAAE,GAAG,EAAE,CACf,CAAA;IACH,CAAC;AACH,CAAC"}
|
package/dist/sync/engine.d.ts
CHANGED
|
@@ -44,7 +44,18 @@ export interface SyncEngineDeps {
|
|
|
44
44
|
resolveConflict?: ResolveConflict;
|
|
45
45
|
batchSize?: number;
|
|
46
46
|
/**
|
|
47
|
-
* Idempotent space + collection provisioning.
|
|
47
|
+
* Idempotent space + collection provisioning. For an encrypted collection
|
|
48
|
+
* this MUST include publishing the collection's encryption descriptor with
|
|
49
|
+
* its key-epoch roster (the wallet Space two-step: `provisionWalletSpace`,
|
|
50
|
+
* then `ensureWalletSpaceEpochs` from `@interop/wallet-core/keys`). The
|
|
51
|
+
* engine runs it before every cycle's migration sweep and push, which is
|
|
52
|
+
* what enforces the descriptor-before-first-content-push ordering
|
|
53
|
+
* invariant: no envelope reaches the feed sealed under an epoch the
|
|
54
|
+
* published descriptor does not carry. A consumer that instead mints
|
|
55
|
+
* envelopes eagerly against a cached descriptor must, on losing the
|
|
56
|
+
* descriptor create to another provisioner, adopt the winner's descriptor
|
|
57
|
+
* and re-mint its pending envelopes here before the push (see
|
|
58
|
+
* `remintPendingEnvelopes` in `remint.ts`).
|
|
48
59
|
*/
|
|
49
60
|
ensureProvisioned: () => Promise<void>;
|
|
50
61
|
/**
|
|
@@ -129,6 +140,11 @@ export declare class SyncEngine {
|
|
|
129
140
|
* and fell back to a plain insert -- are still picked up and pushed (it is a
|
|
130
141
|
* cheap no-op when there are none). Steady state is sweep-then-push-then-pull:
|
|
131
142
|
* our own writes echo back in the same cycle's pull, idempotently.
|
|
143
|
+
*
|
|
144
|
+
* `ensureProvisioned` runs first, unconditionally: everything that mints or
|
|
145
|
+
* pushes envelopes is downstream of it, which is what enforces the
|
|
146
|
+
* descriptor-before-first-content-push invariant (see its doc on
|
|
147
|
+
* {@link SyncEngineDeps}).
|
|
132
148
|
*/
|
|
133
149
|
private runCycle;
|
|
134
150
|
private pull;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/sync/engine.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAI/E;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAA;AAMhE;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,WAAW,CAAA;IACjB,KAAK,EAAE,SAAS,CAAA;IAChB;;OAEG;IACH,UAAU,EAAE,CAAC,QAAQ,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7C;;;OAGG;IACH,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,KAAK,OAAO,CAAA;IAC5C;;;;OAIG;IACH,eAAe,CAAC,EAAE,eAAe,CAAA;IACjC,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/sync/engine.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAI/E;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAA;AAMhE;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,WAAW,CAAA;IACjB,KAAK,EAAE,SAAS,CAAA;IAChB;;OAEG;IACH,UAAU,EAAE,CAAC,QAAQ,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7C;;;OAGG;IACH,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,KAAK,OAAO,CAAA;IAC5C;;;;OAIG;IACH,eAAe,CAAC,EAAE,eAAe,CAAA;IACjC,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB;;;;;;;;;;;;;OAaG;IACH,iBAAiB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACtC;;OAEG;IACH,UAAU,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IAClC;;OAEG;IACH,gBAAgB,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACxD;;OAEG;IACH,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAClC;;OAEG;IACH,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAEpC;;OAEG;IACH,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAA;IAC7C;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,IAAI,CAAA;IAE1B,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACvD;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE,OAAO,EAAE,MAAM,KAAK,MAAM,IAAI,CAAA;IAC1D;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,MAAM,CAAA;CACtB;AAOD,qBAAa,UAAU;IAiBT,OAAO,CAAC,QAAQ,CAAC,IAAI;IAhBjC,MAAM,EAAE,UAAU,CAAS;IAE3B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiD;IAC1E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IAErC,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,YAAY,CAAI;IACxB,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,eAAe,CAA+B;IACtD,OAAO,CAAC,WAAW,CAA4B;gBAElB,IAAI,EAAE,cAAc;IAQjD;;;;;;;;OAQG;IACH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAYrB;;;;;OAKG;IACH,IAAI,IAAI,IAAI;YAOE,GAAG;IA8BjB;;;;;;;;;;;;;;;;OAgBG;YACW,QAAQ;YAoDR,IAAI;IAYlB,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,SAAS;CAOlB"}
|
package/dist/sync/engine.js
CHANGED
|
@@ -103,6 +103,11 @@ export class SyncEngine {
|
|
|
103
103
|
* and fell back to a plain insert -- are still picked up and pushed (it is a
|
|
104
104
|
* cheap no-op when there are none). Steady state is sweep-then-push-then-pull:
|
|
105
105
|
* our own writes echo back in the same cycle's pull, idempotently.
|
|
106
|
+
*
|
|
107
|
+
* `ensureProvisioned` runs first, unconditionally: everything that mints or
|
|
108
|
+
* pushes envelopes is downstream of it, which is what enforces the
|
|
109
|
+
* descriptor-before-first-content-push invariant (see its doc on
|
|
110
|
+
* {@link SyncEngineDeps}).
|
|
106
111
|
*/
|
|
107
112
|
async runCycle(signal) {
|
|
108
113
|
await this.deps.ensureProvisioned();
|
package/dist/sync/engine.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/sync/engine.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAOnC,MAAM,kBAAkB,GAAG,GAAG,CAAA;AAC9B,MAAM,qBAAqB,GAAG,KAAK,CAAA;AACnC,MAAM,oBAAoB,GAAG,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/sync/engine.ts"],"names":[],"mappings":"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"}
|
package/dist/sync/index.d.ts
CHANGED
|
@@ -8,12 +8,16 @@
|
|
|
8
8
|
*
|
|
9
9
|
* - The wire contract and port seam (`WasSyncPort`, `SyncCheckpoint`, `WireDoc`,
|
|
10
10
|
* `Json`, `DocCipher`, `MasterState`, and the `WasSyncConflictError` /
|
|
11
|
-
* `WasSyncNotFoundError` signals) come from
|
|
12
|
-
* re-exported here so an engine consumer
|
|
11
|
+
* `WasSyncNotFoundError` / `UnknownEpochError` signals) come from
|
|
12
|
+
* `@interop/was-client/sync` and are re-exported here so an engine consumer
|
|
13
|
+
* imports one package.
|
|
13
14
|
* - `SyncStore` / `SyncedRow` / `ProjectionAction` / `ResolveConflict` are the
|
|
14
15
|
* replica-side persistence seam.
|
|
15
16
|
* - `runPull` / `projectionForDoc`, `runPush`, and `SyncEngine` are the pull,
|
|
16
17
|
* push, and orchestration algorithms.
|
|
18
|
+
* - `remintPendingEnvelopes` is the create-loss re-mint for an eager-minting
|
|
19
|
+
* replica: the descriptor-before-first-content-push invariant's remedy when
|
|
20
|
+
* another provisioner's descriptor create won (see `remint.ts`).
|
|
17
21
|
* - `SyncedCollectionSpec` is the generic per-collection spec shape a concrete
|
|
18
22
|
* registry implements.
|
|
19
23
|
* - `resolveContactHeadConflict` / `contactHeadPayloadOf` are the
|
|
@@ -25,11 +29,12 @@
|
|
|
25
29
|
* metadata (`putMeta` / `metaVersion`) push half stays driver-side. See
|
|
26
30
|
* `push.ts` for why the metadata half is left out of the shared core.
|
|
27
31
|
*/
|
|
28
|
-
export { WasSyncConflictError, WasSyncNotFoundError } from '@interop/was-client/sync';
|
|
32
|
+
export { UnknownEpochError, WasSyncConflictError, WasSyncNotFoundError } from '@interop/was-client/sync';
|
|
29
33
|
export type { Json, SyncCheckpoint, WireDoc, MasterState, WasSyncPort, DocCipher } from '@interop/was-client/sync';
|
|
30
34
|
export type { SyncStore, SyncedRow, ProjectionAction, ResolveConflict } from './types.js';
|
|
31
35
|
export { runPull, projectionForDoc } from './pull.js';
|
|
32
36
|
export { runPush, formatEtag } from './push.js';
|
|
37
|
+
export { remintPendingEnvelopes } from './remint.js';
|
|
33
38
|
export { SyncEngine } from './engine.js';
|
|
34
39
|
export type { SyncEngineDeps, SyncStatus } from './engine.js';
|
|
35
40
|
export type { SyncedCollectionSpec } from './collections.js';
|
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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACrB,MAAM,0BAA0B,CAAA;AACjC,YAAY,EACV,IAAI,EACJ,cAAc,EACd,OAAO,EACP,WAAW,EACX,WAAW,EACX,SAAS,EACV,MAAM,0BAA0B,CAAA;AAEjC,YAAY,EACV,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,eAAe,EAChB,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AACrD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC7D,YAAY,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAE5D,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC3B,MAAM,uBAAuB,CAAA;AAC9B,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA"}
|
package/dist/sync/index.js
CHANGED
|
@@ -8,12 +8,16 @@
|
|
|
8
8
|
*
|
|
9
9
|
* - The wire contract and port seam (`WasSyncPort`, `SyncCheckpoint`, `WireDoc`,
|
|
10
10
|
* `Json`, `DocCipher`, `MasterState`, and the `WasSyncConflictError` /
|
|
11
|
-
* `WasSyncNotFoundError` signals) come from
|
|
12
|
-
* re-exported here so an engine consumer
|
|
11
|
+
* `WasSyncNotFoundError` / `UnknownEpochError` signals) come from
|
|
12
|
+
* `@interop/was-client/sync` and are re-exported here so an engine consumer
|
|
13
|
+
* imports one package.
|
|
13
14
|
* - `SyncStore` / `SyncedRow` / `ProjectionAction` / `ResolveConflict` are the
|
|
14
15
|
* replica-side persistence seam.
|
|
15
16
|
* - `runPull` / `projectionForDoc`, `runPush`, and `SyncEngine` are the pull,
|
|
16
17
|
* push, and orchestration algorithms.
|
|
18
|
+
* - `remintPendingEnvelopes` is the create-loss re-mint for an eager-minting
|
|
19
|
+
* replica: the descriptor-before-first-content-push invariant's remedy when
|
|
20
|
+
* another provisioner's descriptor create won (see `remint.ts`).
|
|
17
21
|
* - `SyncedCollectionSpec` is the generic per-collection spec shape a concrete
|
|
18
22
|
* registry implements.
|
|
19
23
|
* - `resolveContactHeadConflict` / `contactHeadPayloadOf` are the
|
|
@@ -25,9 +29,10 @@
|
|
|
25
29
|
* metadata (`putMeta` / `metaVersion`) push half stays driver-side. See
|
|
26
30
|
* `push.ts` for why the metadata half is left out of the shared core.
|
|
27
31
|
*/
|
|
28
|
-
export { WasSyncConflictError, WasSyncNotFoundError } from '@interop/was-client/sync';
|
|
32
|
+
export { UnknownEpochError, WasSyncConflictError, WasSyncNotFoundError } from '@interop/was-client/sync';
|
|
29
33
|
export { runPull, projectionForDoc } from './pull.js';
|
|
30
34
|
export { runPush, formatEtag } from './push.js';
|
|
35
|
+
export { remintPendingEnvelopes } from './remint.js';
|
|
31
36
|
export { SyncEngine } from './engine.js';
|
|
32
37
|
export { contactHeadPayloadOf, resolveContactHeadConflict } from './contactsConflict.js';
|
|
33
38
|
//# 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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACrB,MAAM,0BAA0B,CAAA;AAiBjC,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AACrD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAIxC,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC3B,MAAM,uBAAuB,CAAA"}
|
package/dist/sync/push.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../src/sync/push.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AACrD,OAAO,KAAK,EAAQ,eAAe,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAM/E,OAAO,EAAE,UAAU,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../src/sync/push.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AACrD,OAAO,KAAK,EAAQ,eAAe,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAM/E,OAAO,EAAE,UAAU,EAAE,CAAA;AA+KrB;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,OAAO,CAAC,EAC5B,IAAI,EACJ,KAAK,EACL,eAAe,EACf,MAAM,EACP,EAAE;IACD,IAAI,EAAE,WAAW,CAAA;IACjB,KAAK,EAAE,SAAS,CAAA;IAChB,eAAe,CAAC,EAAE,eAAe,CAAA;IACjC,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAA;CAAE,CAAC,CAwBzD"}
|
package/dist/sync/push.js
CHANGED
|
@@ -81,7 +81,8 @@ async function pushUpsert({ port, store, row, resolveConflict }) {
|
|
|
81
81
|
return { conflictResolved: true };
|
|
82
82
|
}
|
|
83
83
|
const master = await port.get({ id: row.id });
|
|
84
|
-
|
|
84
|
+
// An absent or tombstoned resource surfaces as `get` resolving null.
|
|
85
|
+
if (master === null) {
|
|
85
86
|
await store.adoptLatest({
|
|
86
87
|
id: row.id,
|
|
87
88
|
latest: null,
|
|
@@ -148,7 +149,7 @@ async function pushDelete({ port, store, row }) {
|
|
|
148
149
|
return;
|
|
149
150
|
}
|
|
150
151
|
const master = await port.get({ id: row.id });
|
|
151
|
-
if (master === null
|
|
152
|
+
if (master === null) {
|
|
152
153
|
// delete/delete race -- the resource is already a tombstone / absent.
|
|
153
154
|
await store.markDeletedPushed({ id: row.id, ...revisionAck });
|
|
154
155
|
return;
|
package/dist/sync/push.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/sync/push.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAErD,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAEvE,0EAA0E;AAC1E,+EAA+E;AAC/E,0BAA0B;AAC1B,OAAO,EAAE,UAAU,EAAE,CAAA;AAErB;;;;;;;;;;;;;;;;;;GAkBG;AACH,KAAK,UAAU,UAAU,CAAC,EACxB,IAAI,EACJ,KAAK,EACL,GAAG,EACH,eAAe,EAWhB;IACC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC;YACpC,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,IAAI;YACtB,GAAG,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC;gBACjB,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;gBACtC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;SAC3B,CAAC,CAAA;QACF,MAAM,KAAK,CAAC,UAAU,CAAC;YACrB,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,OAAO;YACP,GAAG,CAAC,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;SAC9D,CAAC,CAAA;QACF,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAA;IACpC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,CAAC,GAAG,YAAY,oBAAoB,CAAC,EAAE,CAAC;YAC3C,MAAM,GAAG,CAAA;QACX,CAAC;QACD,IAAI,eAAe,EAAE,CAAC;YACpB,MAAM,eAAe,CAAC;gBACpB,EAAE,EAAE,GAAG,CAAC,EAAE;gBACV,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,IAAI,EAAE,GAAG,CAAC,IAAI;aACf,CAAC,CAAA;YACF,wEAAwE;YACxE,iEAAiE;YACjE,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAA;QACnC,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAA;QAC7C,IAAI,MAAM,KAAK,IAAI,
|
|
1
|
+
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/sync/push.ts"],"names":[],"mappings":"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"}
|