@interop/was-react 0.1.0 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/README.md +9 -1
  2. package/dist/auth/chapi.d.ts +3 -1
  3. package/dist/auth/chapi.d.ts.map +1 -1
  4. package/dist/auth/chapi.js +6 -2
  5. package/dist/auth/chapi.js.map +1 -1
  6. package/dist/auth/loginFlow.d.ts +30 -10
  7. package/dist/auth/loginFlow.d.ts.map +1 -1
  8. package/dist/auth/loginFlow.js +3 -1
  9. package/dist/auth/loginFlow.js.map +1 -1
  10. package/dist/auth/loginRequest.d.ts +9 -3
  11. package/dist/auth/loginRequest.d.ts.map +1 -1
  12. package/dist/auth/loginRequest.js +9 -3
  13. package/dist/auth/loginRequest.js.map +1 -1
  14. package/dist/auth/verifyResponse.d.ts +9 -3
  15. package/dist/auth/verifyResponse.d.ts.map +1 -1
  16. package/dist/auth/verifyResponse.js +6 -2
  17. package/dist/auth/verifyResponse.js.map +1 -1
  18. package/dist/config.d.ts +60 -20
  19. package/dist/config.d.ts.map +1 -1
  20. package/dist/config.js +12 -4
  21. package/dist/config.js.map +1 -1
  22. package/dist/dev/cli.d.ts.map +1 -1
  23. package/dist/dev/cli.js +4 -7
  24. package/dist/dev/cli.js.map +1 -1
  25. package/dist/dev/provisionDevGrants.d.ts +15 -5
  26. package/dist/dev/provisionDevGrants.d.ts.map +1 -1
  27. package/dist/dev/provisionDevGrants.js +2 -2
  28. package/dist/dev/provisionDevGrants.js.map +1 -1
  29. package/dist/grants.d.ts +7 -19
  30. package/dist/grants.d.ts.map +1 -1
  31. package/dist/grants.js +28 -7
  32. package/dist/grants.js.map +1 -1
  33. package/dist/identity/appSession.d.ts +9 -3
  34. package/dist/identity/appSession.d.ts.map +1 -1
  35. package/dist/identity/appSession.js +3 -1
  36. package/dist/identity/appSession.js.map +1 -1
  37. package/dist/identity/documentLoader.d.ts +3 -1
  38. package/dist/identity/documentLoader.d.ts.map +1 -1
  39. package/dist/identity/documentLoader.js +6 -2
  40. package/dist/identity/documentLoader.js.map +1 -1
  41. package/dist/identity/seedCredential.d.ts +9 -3
  42. package/dist/identity/seedCredential.d.ts.map +1 -1
  43. package/dist/identity/seedCredential.js +9 -15
  44. package/dist/identity/seedCredential.js.map +1 -1
  45. package/dist/identity/seedStore.d.ts +18 -6
  46. package/dist/identity/seedStore.d.ts.map +1 -1
  47. package/dist/identity/seedStore.js.map +1 -1
  48. package/dist/index.d.ts +1 -1
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +1 -1
  51. package/dist/index.js.map +1 -1
  52. package/dist/react/WasSessionProvider.d.ts.map +1 -1
  53. package/dist/react/WasSessionProvider.js +10 -1
  54. package/dist/react/WasSessionProvider.js.map +1 -1
  55. package/dist/react/hooks.d.ts +10 -5
  56. package/dist/react/hooks.d.ts.map +1 -1
  57. package/dist/react/hooks.js +6 -30
  58. package/dist/react/hooks.js.map +1 -1
  59. package/dist/session/authStore.d.ts +29 -7
  60. package/dist/session/authStore.d.ts.map +1 -1
  61. package/dist/session/authStore.js +123 -63
  62. package/dist/session/authStore.js.map +1 -1
  63. package/dist/storage/entityStore.d.ts +32 -9
  64. package/dist/storage/entityStore.d.ts.map +1 -1
  65. package/dist/storage/entityStore.js +88 -48
  66. package/dist/storage/entityStore.js.map +1 -1
  67. package/dist/storage/localStore.d.ts +13 -0
  68. package/dist/storage/localStore.d.ts.map +1 -1
  69. package/dist/storage/localStore.js +17 -0
  70. package/dist/storage/localStore.js.map +1 -1
  71. package/dist/storage/rehydrate.d.ts.map +1 -1
  72. package/dist/storage/rehydrate.js +3 -1
  73. package/dist/storage/rehydrate.js.map +1 -1
  74. package/dist/storage/syncController.d.ts +7 -3
  75. package/dist/storage/syncController.d.ts.map +1 -1
  76. package/dist/storage/syncController.js +28 -15
  77. package/dist/storage/syncController.js.map +1 -1
  78. package/dist/storage/syncStatusStore.d.ts +26 -1
  79. package/dist/storage/syncStatusStore.d.ts.map +1 -1
  80. package/dist/storage/syncStatusStore.js +40 -0
  81. package/dist/storage/syncStatusStore.js.map +1 -1
  82. package/dist/storage/wasRemoteStore.d.ts +3 -1
  83. package/dist/storage/wasRemoteStore.d.ts.map +1 -1
  84. package/dist/storage/wasRemoteStore.js +3 -3
  85. package/dist/storage/wasRemoteStore.js.map +1 -1
  86. package/dist/sync/feedMasterPort.d.ts +21 -19
  87. package/dist/sync/feedMasterPort.d.ts.map +1 -1
  88. package/dist/sync/feedMasterPort.js +18 -5
  89. package/dist/sync/feedMasterPort.js.map +1 -1
  90. package/dist/sync/index.d.ts +3 -3
  91. package/dist/sync/index.d.ts.map +1 -1
  92. package/dist/sync/index.js +2 -2
  93. package/dist/sync/index.js.map +1 -1
  94. package/dist/sync/lwwConflictHandler.d.ts +35 -2
  95. package/dist/sync/lwwConflictHandler.d.ts.map +1 -1
  96. package/dist/sync/lwwConflictHandler.js +47 -9
  97. package/dist/sync/lwwConflictHandler.js.map +1 -1
  98. package/dist/sync/pushWrites.d.ts +27 -8
  99. package/dist/sync/pushWrites.d.ts.map +1 -1
  100. package/dist/sync/pushWrites.js +43 -15
  101. package/dist/sync/pushWrites.js.map +1 -1
  102. package/dist/sync/types.d.ts +49 -16
  103. package/dist/sync/types.d.ts.map +1 -1
  104. package/dist/sync/types.js +17 -0
  105. package/dist/sync/types.js.map +1 -1
  106. package/dist/sync/wasReplication.d.ts.map +1 -1
  107. package/dist/sync/wasReplication.js +38 -1
  108. package/dist/sync/wasReplication.js.map +1 -1
  109. package/dist/sync/wasSyncPort.d.ts +29 -6
  110. package/dist/sync/wasSyncPort.d.ts.map +1 -1
  111. package/dist/sync/wasSyncPort.js +105 -101
  112. package/dist/sync/wasSyncPort.js.map +1 -1
  113. package/package.json +7 -5
  114. package/dist/auth/verifyResponse.test.d.ts +0 -2
  115. package/dist/auth/verifyResponse.test.d.ts.map +0 -1
  116. package/dist/auth/verifyResponse.test.js +0 -282
  117. package/dist/auth/verifyResponse.test.js.map +0 -1
  118. package/dist/dev/cli.test.d.ts +0 -2
  119. package/dist/dev/cli.test.d.ts.map +0 -1
  120. package/dist/dev/cli.test.js +0 -39
  121. package/dist/dev/cli.test.js.map +0 -1
  122. package/dist/grants.test.d.ts +0 -2
  123. package/dist/grants.test.d.ts.map +0 -1
  124. package/dist/grants.test.js +0 -79
  125. package/dist/grants.test.js.map +0 -1
  126. package/dist/identity/seedCredential.test.d.ts +0 -2
  127. package/dist/identity/seedCredential.test.d.ts.map +0 -1
  128. package/dist/identity/seedCredential.test.js +0 -205
  129. package/dist/identity/seedCredential.test.js.map +0 -1
  130. package/dist/storage/rehydrate.test.d.ts +0 -2
  131. package/dist/storage/rehydrate.test.d.ts.map +0 -1
  132. package/dist/storage/rehydrate.test.js +0 -172
  133. package/dist/storage/rehydrate.test.js.map +0 -1
  134. package/dist/sync/changesQuery.test.d.ts +0 -2
  135. package/dist/sync/changesQuery.test.d.ts.map +0 -1
  136. package/dist/sync/changesQuery.test.js +0 -145
  137. package/dist/sync/changesQuery.test.js.map +0 -1
  138. package/dist/sync/lww.test.d.ts +0 -2
  139. package/dist/sync/lww.test.d.ts.map +0 -1
  140. package/dist/sync/lww.test.js +0 -28
  141. package/dist/sync/lww.test.js.map +0 -1
  142. package/dist/sync/lwwConflictHandler.test.d.ts +0 -2
  143. package/dist/sync/lwwConflictHandler.test.d.ts.map +0 -1
  144. package/dist/sync/lwwConflictHandler.test.js +0 -78
  145. package/dist/sync/lwwConflictHandler.test.js.map +0 -1
  146. package/dist/sync/pushWrites.test.d.ts +0 -2
  147. package/dist/sync/pushWrites.test.d.ts.map +0 -1
  148. package/dist/sync/pushWrites.test.js +0 -287
  149. package/dist/sync/pushWrites.test.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/react/hooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/react/hooks.ts"],"names":[],"mappings":"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"}
@@ -27,25 +27,47 @@ import { type LoginPhase } from '../auth/loginFlow.js';
27
27
  export type AuthStatus = 'idle' | 'restoring' | 'unauthenticated' | 'authenticating' | 'authenticated';
28
28
  export interface AuthState {
29
29
  status: AuthStatus;
30
- /** The current login phase, for the login page's progress line. */
30
+ /**
31
+ * The current login phase, for the login page's progress line.
32
+ */
31
33
  phase: LoginPhase | null;
32
34
  error: string | null;
33
35
  controllerDid: string | null;
34
- /** ISO expiry of the current grant set (earliest zcap expiry). */
36
+ /**
37
+ * ISO expiry of the current grant set (earliest zcap expiry).
38
+ */
35
39
  expires: string | null;
36
- /** A live 401/403 was seen mid-session: show the reconnect banner. */
40
+ /**
41
+ * A live 401/403 was seen mid-session: show the reconnect banner.
42
+ */
37
43
  accessExpired: boolean;
38
44
  reconnecting: boolean;
39
- /** Hot restore from the persisted session; falls to `unauthenticated`. */
45
+ /**
46
+ * Hot restore from the persisted session; falls to `unauthenticated`.
47
+ */
40
48
  restore: () => Promise<void>;
41
- /** Full Login With Wallet (first-run or returning). */
49
+ /**
50
+ * Full Login With Wallet (first-run or returning).
51
+ */
42
52
  login: () => Promise<void>;
43
- /** Re-run the grants flow with the existing seed (expired access). */
53
+ /**
54
+ * Re-run the grants flow with the existing seed (expired access).
55
+ */
44
56
  reconnect: () => Promise<void>;
45
57
  logout: () => Promise<void>;
46
58
  notifyAccessExpired: () => void;
59
+ /**
60
+ * Tears down the live session (expiry watch, controller, local store) WITHOUT
61
+ * wiping the persisted session record, and returns to `idle` so a fresh
62
+ * `restore()` can re-open it. Called from the provider's unmount cleanup so an
63
+ * unmount (or a React StrictMode dev remount) never orphans the replication
64
+ * loop or the expiry-watch interval.
65
+ */
66
+ destroy: () => Promise<void>;
47
67
  }
48
- /** The vanilla zustand store returned by {@link createAuthStore}. */
68
+ /**
69
+ * The vanilla zustand store returned by {@link createAuthStore}.
70
+ */
49
71
  export type WasAuthStore = StoreApi<AuthState>;
50
72
  /**
51
73
  * Builds the wallet-mode auth store bound to an app's config and store registry.
@@ -1 +1 @@
1
- {"version":3,"file":"authStore.d.ts","sourceRoot":"","sources":["../../src/session/authStore.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAe,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAElD,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,YAAY,EAClB,MAAM,cAAc,CAAA;AAIrB,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAO1E,OAAO,EAKL,KAAK,UAAU,EAChB,MAAM,sBAAsB,CAAA;AAsB7B,MAAM,MAAM,UAAU,GACpB,MAAM,GAAG,WAAW,GAAG,iBAAiB,GAAG,gBAAgB,GAAG,eAAe,CAAA;AAU/E,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,UAAU,CAAA;IAClB,mEAAmE;IACnE,KAAK,EAAE,UAAU,GAAG,IAAI,CAAA;IACxB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,kEAAkE;IAClE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,sEAAsE;IACtE,aAAa,EAAE,OAAO,CAAA;IACtB,YAAY,EAAE,OAAO,CAAA;IACrB,0EAA0E;IAC1E,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5B,uDAAuD;IACvD,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1B,sEAAsE;IACtE,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9B,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3B,mBAAmB,EAAE,MAAM,IAAI,CAAA;CAChC;AAED,qEAAqE;AACrE,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAA;AAE9C;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,QAAQ,EACR,SAAS,EACT,OAAO,EACR,EAAE;IACD,MAAM,EAAE,YAAY,CAAA;IACpB,QAAQ,EAAE,aAAa,CAAA;IACvB,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,OAAO,CAAC,EAAE,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;CACtC,GAAG,YAAY,CAkUf"}
1
+ {"version":3,"file":"authStore.d.ts","sourceRoot":"","sources":["../../src/session/authStore.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAe,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAElD,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,YAAY,EAClB,MAAM,cAAc,CAAA;AAIrB,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAO1E,OAAO,EAKL,KAAK,UAAU,EAChB,MAAM,sBAAsB,CAAA;AAuB7B,MAAM,MAAM,UAAU,GACpB,MAAM,GAAG,WAAW,GAAG,iBAAiB,GAAG,gBAAgB,GAAG,eAAe,CAAA;AAU/E,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,UAAU,CAAA;IAClB;;OAEG;IACH,KAAK,EAAE,UAAU,GAAG,IAAI,CAAA;IACxB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B;;OAEG;IACH,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB;;OAEG;IACH,aAAa,EAAE,OAAO,CAAA;IACtB,YAAY,EAAE,OAAO,CAAA;IACrB;;OAEG;IACH,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5B;;OAEG;IACH,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1B;;OAEG;IACH,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9B,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3B,mBAAmB,EAAE,MAAM,IAAI,CAAA;IAC/B;;;;;;OAMG;IACH,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7B;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAA;AAE9C;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,QAAQ,EACR,SAAS,EACT,OAAO,EACR,EAAE;IACD,MAAM,EAAE,YAAY,CAAA;IACpB,QAAQ,EAAE,aAAa,CAAA;IACvB,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,OAAO,CAAC,EAAE,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;CACtC,GAAG,YAAY,CA0Yf"}
@@ -27,10 +27,11 @@ import { createSeedStore } from '../identity/seedStore.js';
27
27
  import { clearAppSession, persistAppSession, restoreAppSession, isNearExpiry } from '../identity/appSession.js';
28
28
  import { loginWithWallet, requestGrants, LoginCancelledError } from '../auth/loginFlow.js';
29
29
  import { parseGrants } from '../grants.js';
30
- import { LocalStore } from '../storage/localStore.js';
30
+ import { LocalStore, dbNameForController } from '../storage/localStore.js';
31
31
  import { clearLocalStore, hasStore, requireStore, setLocalStore } from '../storage/storageManager.js';
32
32
  import { clearAllEntityStores, hydrateAll, patchFromChange } from '../storage/rehydrate.js';
33
33
  import { startWasSync } from '../storage/wasSync.js';
34
+ import { errorMessage } from '../sync/index.js';
34
35
  import { createSyncController } from '../storage/syncController.js';
35
36
  import { useSyncStatusStore } from '../storage/syncStatusStore.js';
36
37
  import { useAppReady } from './appReadyStore.js';
@@ -76,13 +77,21 @@ export function createAuthStore({ config, registry, seedStore, storage }) {
76
77
  * TTL, so a short lead time never fires spuriously mid-session.
77
78
  */
78
79
  const warningMs = config.expiry?.warningMs ?? DEFAULT_EXPIRY_WARNING_MS;
79
- /** Poll interval for the near-expiry watch (grant expiry is coarse-grained). */
80
+ /**
81
+ * Poll interval for the near-expiry watch (grant expiry is coarse-grained).
82
+ */
80
83
  const watchMs = config.expiry?.watchMs ?? DEFAULT_EXPIRY_WATCH_MS;
81
84
  let expiryTimer;
82
85
  // The per-session controller: single-use, stopped on logout and replaced on a
83
86
  // reconnect (started once per grant set).
84
87
  let controller = null;
85
- /** Stops the near-expiry watch (logout / re-grant). */
88
+ // The in-flight `beginSync` promise (controller.start() awaits network round
89
+ // trips first). Awaited before teardown so a logout racing the bootstrap
90
+ // cannot stop the controller before it has finished starting.
91
+ let pendingSync = null;
92
+ /**
93
+ * Stops the near-expiry watch (logout / re-grant).
94
+ */
86
95
  function disarmExpiryWatch() {
87
96
  if (expiryTimer) {
88
97
  clearInterval(expiryTimer);
@@ -104,15 +113,6 @@ export function createAuthStore({ config, registry, seedStore, storage }) {
104
113
  check();
105
114
  expiryTimer = setInterval(check, watchMs);
106
115
  }
107
- /** A stable, RxDB-safe database name per controller DID (FNV-1a hex). */
108
- function dbNameForController(controllerDid) {
109
- let hash = 0x811c9dc5;
110
- for (let i = 0; i < controllerDid.length; i++) {
111
- hash ^= controllerDid.charCodeAt(i);
112
- hash = Math.imul(hash, 0x01000193) >>> 0;
113
- }
114
- return `${dbName}-${hash.toString(16).padStart(8, '0')}`;
115
- }
116
116
  /**
117
117
  * Starts a fresh per-session controller replicating the granted collections,
118
118
  * wiring reactive per-doc store patching and the auth-error (401/403) signal.
@@ -132,46 +132,99 @@ export function createAuthStore({ config, registry, seedStore, storage }) {
132
132
  });
133
133
  }
134
134
  /**
135
- * Opens storage + hydrates + starts sync for a validated session, persists it,
136
- * and flips the ready gate. Shared by login and restore.
135
+ * Persists the session record, kicks off background replication, and arms the
136
+ * near-expiry watch. Shared by the login/restore activation and the reconnect
137
+ * re-grant paths (identical persist + begin-sync + arm sequence).
138
+ *
139
+ * @param options {object}
140
+ * @param options.seed {Uint8Array}
141
+ * @param options.identity {IdentityAgents}
142
+ * @param options.parsed {ParsedGrants}
143
+ * @param options.grants {IZcap[]}
144
+ * @param options.expires {string}
145
+ * @returns {Promise<void>}
137
146
  */
138
- async function activateSession(session) {
139
- if (!hasStore()) {
140
- const local = await LocalStore.init({
141
- seed: session.seed,
142
- collections: config.collections,
143
- dbName: dbNameForController(session.identity.controllerDid),
144
- ...(storage && { storage })
145
- });
146
- setLocalStore(local);
147
- }
148
- await hydrateAll(registry);
149
- useAppReady.getState().setReady();
147
+ async function persistAndStartSync({ seed, identity, parsed, grants, expires }) {
150
148
  await persistAppSession({
151
149
  session: {
152
- seed: session.seed,
153
- controllerDid: session.identity.controllerDid,
154
- serverUrl: session.parsed.serverUrl,
155
- spaceId: session.parsed.spaceId,
156
- grants: session.grants,
157
- expires: session.expires
150
+ seed,
151
+ controllerDid: identity.controllerDid,
152
+ serverUrl: parsed.serverUrl,
153
+ spaceId: parsed.spaceId,
154
+ grants,
155
+ expires
158
156
  },
159
157
  store: sessionStore
160
158
  });
161
159
  // Replication starts in the background; a down server never blocks entry.
162
- void beginSync({
163
- parsed: session.parsed,
164
- zcapClient: session.identity.zcapClient
165
- }).catch(err => console.warn('WAS sync failed to start:', err));
166
- armExpiryWatch(session.expires);
160
+ pendingSync = beginSync({ parsed, zcapClient: identity.zcapClient });
161
+ void pendingSync.catch(err => console.warn('WAS sync failed to start:', err));
162
+ armExpiryWatch(expires);
167
163
  }
168
- /** Tears down storage + sync + entity stores (logout and re-login paths). */
169
- async function deactivateSession() {
170
- disarmExpiryWatch();
164
+ /**
165
+ * Awaits any in-flight `beginSync` (so the controller has finished starting)
166
+ * and then stops and releases the controller. Idempotent.
167
+ */
168
+ async function stopController() {
169
+ if (pendingSync) {
170
+ try {
171
+ await pendingSync;
172
+ }
173
+ catch {
174
+ // A failed bootstrap is already logged by the `.catch` on `pendingSync`.
175
+ }
176
+ pendingSync = null;
177
+ }
171
178
  if (controller) {
172
179
  await controller.stop();
173
180
  controller = null;
174
181
  }
182
+ }
183
+ /**
184
+ * Opens storage + hydrates + starts sync for a validated session, persists it,
185
+ * and flips the ready gate. Shared by login and restore. Any failure after the
186
+ * store is installed tears the store back down (so a later login never reuses a
187
+ * half-open controller's database) and surfaces the open error before
188
+ * rethrowing.
189
+ */
190
+ async function activateSession(session) {
191
+ try {
192
+ if (!hasStore()) {
193
+ const local = await LocalStore.init({
194
+ seed: session.seed,
195
+ collections: config.collections,
196
+ dbName: dbNameForController({
197
+ dbName,
198
+ controllerDid: session.identity.controllerDid
199
+ }),
200
+ ...(storage && { storage })
201
+ });
202
+ setLocalStore(local);
203
+ }
204
+ await hydrateAll(registry);
205
+ // Flip the ready gate only once the session is durably persisted.
206
+ await persistAndStartSync({
207
+ seed: session.seed,
208
+ identity: session.identity,
209
+ parsed: session.parsed,
210
+ grants: session.grants,
211
+ expires: session.expires
212
+ });
213
+ useAppReady.getState().setReady();
214
+ }
215
+ catch (err) {
216
+ await deactivateSession();
217
+ const message = errorMessage(err);
218
+ useAppReady.getState().setError(message);
219
+ throw err;
220
+ }
221
+ }
222
+ /**
223
+ * Tears down storage + sync + entity stores (logout and re-login paths).
224
+ */
225
+ async function deactivateSession() {
226
+ disarmExpiryWatch();
227
+ await stopController();
175
228
  if (hasStore()) {
176
229
  try {
177
230
  await requireStore().close();
@@ -220,6 +273,11 @@ export function createAuthStore({ config, registry, seedStore, storage }) {
220
273
  set({ status: 'unauthenticated' });
221
274
  return;
222
275
  }
276
+ // Unlike login/reconnect (which run `checkGrants`), a hot restore trusts
277
+ // the persisted grants; re-check that they still cover every configured
278
+ // collection so a partially-covered grant set raises the reconnect banner
279
+ // proactively rather than waiting for a per-collection 403 mid-session.
280
+ const uncovered = config.collections.filter(collection => parsed.byCollectionId[collection.id] === undefined);
223
281
  await activateSession({
224
282
  seed: restored.seed,
225
283
  identity,
@@ -231,7 +289,8 @@ export function createAuthStore({ config, registry, seedStore, storage }) {
231
289
  status: 'authenticated',
232
290
  controllerDid: identity.controllerDid,
233
291
  expires: restored.expires,
234
- error: null
292
+ error: null,
293
+ accessExpired: uncovered.length > 0
235
294
  });
236
295
  }
237
296
  catch (err) {
@@ -282,36 +341,25 @@ export function createAuthStore({ config, registry, seedStore, storage }) {
282
341
  }
283
342
  set({ reconnecting: true, error: null });
284
343
  try {
285
- const restored = await restoreAppSession({ store: sessionStore });
286
- // The seed survives grant expiry; only the grants need renewing. A
344
+ // The seed survives grant expiry; only the grants need renewing. Read it
345
+ // directly (not via `restoreAppSession`, which WIPES an expired record
346
+ // -- seed included -- exactly in the case reconnect exists for). A
287
347
  // missing seed means the session is unrecoverable in place.
288
- const seed = restored?.seed;
348
+ const seed = await sessionStore.loadSeed();
289
349
  if (!seed) {
290
350
  await get().logout();
291
351
  return;
292
352
  }
293
353
  const identity = await initAppSession({ seed });
294
354
  const checked = await requestGrants({ identity, config: loginConfig });
295
- if (controller) {
296
- await controller.stop();
297
- controller = null;
298
- }
299
- await persistAppSession({
300
- session: {
301
- seed,
302
- controllerDid: identity.controllerDid,
303
- serverUrl: checked.parsed.serverUrl,
304
- spaceId: checked.parsed.spaceId,
305
- grants: checked.grants,
306
- expires: checked.expires
307
- },
308
- store: sessionStore
309
- });
310
- void beginSync({
355
+ await stopController();
356
+ await persistAndStartSync({
357
+ seed,
358
+ identity,
311
359
  parsed: checked.parsed,
312
- zcapClient: identity.zcapClient
313
- }).catch(err => console.warn('WAS sync failed to restart:', err));
314
- armExpiryWatch(checked.expires);
360
+ grants: checked.grants,
361
+ expires: checked.expires
362
+ });
315
363
  set({
316
364
  accessExpired: false,
317
365
  expires: checked.expires,
@@ -340,6 +388,18 @@ export function createAuthStore({ config, registry, seedStore, storage }) {
340
388
  if (!get().accessExpired) {
341
389
  set({ accessExpired: true });
342
390
  }
391
+ },
392
+ destroy: async () => {
393
+ await deactivateSession();
394
+ // Back to `idle` (not `unauthenticated`) and the record left intact: a
395
+ // StrictMode remount's `restore()` re-opens the same session from disk.
396
+ set({
397
+ status: 'idle',
398
+ phase: null,
399
+ error: null,
400
+ accessExpired: false,
401
+ reconnecting: false
402
+ });
343
403
  }
344
404
  }));
345
405
  return store;
@@ -1 +1 @@
1
- {"version":3,"file":"authStore.js","sourceRoot":"","sources":["../../src/session/authStore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"authStore.js","sourceRoot":"","sources":["../../src/session/authStore.ts"],"names":[],"mappings":"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"}
@@ -11,32 +11,55 @@
11
11
  * Reactivity note: local writes patch the Map optimistically after the localStore
12
12
  * write resolves. Pulled remote changes are applied per-doc by the sync layer
13
13
  * through `patch` / `drop` (no whole-collection re-hydrate), keeping multi-device
14
- * edits and tombstones live without re-hydrate storms.
14
+ * edits and tombstones live without re-hydrate storms. Those per-doc remote
15
+ * patches are coalesced: a pull burst is buffered and flushed on a microtask as a
16
+ * single Map clone + single `set`, so an initial device sync of N docs is one
17
+ * re-render rather than N (and O(N) Map copies rather than O(N^2)). Interactive
18
+ * local writes stay immediate so a single edit is snappy.
15
19
  */
16
20
  import { type UseBoundStore, type StoreApi } from 'zustand';
17
21
  export interface EntityStore<T extends {
18
22
  id: string;
19
23
  }> {
20
- /** Decrypted payloads keyed by logical uuid. */
24
+ /**
25
+ * Decrypted payloads keyed by logical uuid.
26
+ */
21
27
  byId: Map<string, T>;
22
28
  hydrated: boolean;
23
- /** Decrypt every live row of the collection into the Map. */
29
+ /**
30
+ * Decrypt every live row of the collection into the Map.
31
+ */
24
32
  hydrate: () => Promise<void>;
25
- /** Encrypt+insert a new doc, then add it to the Map. */
33
+ /**
34
+ * Encrypt+insert a new doc, then add it to the Map.
35
+ */
26
36
  insert: (doc: T) => Promise<void>;
27
- /** Re-encrypt a doc in place (sequence+1), then replace it in the Map. */
37
+ /**
38
+ * Re-encrypt a doc in place (sequence+1), then replace it in the Map.
39
+ */
28
40
  update: (doc: T) => Promise<void>;
29
- /** Tombstone a doc, then drop it from the Map. */
41
+ /**
42
+ * Tombstone a doc, then drop it from the Map.
43
+ */
30
44
  remove: (uuid: string) => Promise<void>;
31
- /** Replace the whole Map (used by hydrate and, later, the sync stream). */
45
+ /**
46
+ * Replace the whole Map WITHOUT persisting. This is the app-facing bulk
47
+ * reset verb: the registry pattern wires `StoreRegistryEntry.clear` to
48
+ * `replaceAll([])` on logout (see the README). Discards any buffered pull
49
+ * burst so it cannot resurrect docs past the reset.
50
+ */
32
51
  replaceAll: (docs: T[]) => void;
33
52
  /**
34
53
  * Upsert one already-decrypted doc into the Map WITHOUT persisting (the sync
35
54
  * stream owns the persisted row already). Used for per-doc reactive patching
36
- * of pulled/conflict-resolved remote changes.
55
+ * of pulled/conflict-resolved remote changes; coalesced into one store update
56
+ * per pull burst (see the reactivity note above).
37
57
  */
38
58
  patch: (doc: T) => void;
39
- /** Drop one doc from the Map WITHOUT persisting (remote tombstone patch). */
59
+ /**
60
+ * Drop one doc from the Map WITHOUT persisting (remote tombstone patch);
61
+ * coalesced with `patch` into one store update per pull burst.
62
+ */
40
63
  drop: (uuid: string) => void;
41
64
  }
42
65
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"entityStore.d.ts","sourceRoot":"","sources":["../../src/storage/entityStore.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;GAWG;AACH,OAAO,EAAU,KAAK,aAAa,EAAE,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAA;AAGnE,MAAM,WAAW,WAAW,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE;IACnD,gDAAgD;IAChD,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACpB,QAAQ,EAAE,OAAO,CAAA;IACjB,6DAA6D;IAC7D,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5B,wDAAwD;IACxD,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACjC,0EAA0E;IAC1E,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACjC,kDAAkD;IAClD,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACvC,2EAA2E;IAC3E,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,IAAI,CAAA;IAC/B;;;;OAIG;IACH,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAA;IACvB,6EAA6E;IAC7E,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CAC7B;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EACxD,aAAa,EAAE,MAAM,GACpB,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAqDzC"}
1
+ {"version":3,"file":"entityStore.d.ts","sourceRoot":"","sources":["../../src/storage/entityStore.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAU,KAAK,aAAa,EAAE,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAA;AAGnE,MAAM,WAAW,WAAW,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE;IACnD;;OAEG;IACH,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACpB,QAAQ,EAAE,OAAO,CAAA;IACjB;;OAEG;IACH,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5B;;OAEG;IACH,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACjC;;OAEG;IACH,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACjC;;OAEG;IACH,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACvC;;;;;OAKG;IACH,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,IAAI,CAAA;IAC/B;;;;;OAKG;IACH,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAA;IACvB;;;OAGG;IACH,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CAC7B;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EACxD,aAAa,EAAE,MAAM,GACpB,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CA6FzC"}
@@ -11,7 +11,11 @@
11
11
  * Reactivity note: local writes patch the Map optimistically after the localStore
12
12
  * write resolves. Pulled remote changes are applied per-doc by the sync layer
13
13
  * through `patch` / `drop` (no whole-collection re-hydrate), keeping multi-device
14
- * edits and tombstones live without re-hydrate storms.
14
+ * edits and tombstones live without re-hydrate storms. Those per-doc remote
15
+ * patches are coalesced: a pull burst is buffered and flushed on a microtask as a
16
+ * single Map clone + single `set`, so an initial device sync of N docs is one
17
+ * re-render rather than N (and O(N) Map copies rather than O(N^2)). Interactive
18
+ * local writes stay immediate so a single edit is snappy.
15
19
  */
16
20
  import { create } from 'zustand';
17
21
  import { requireStore } from './storageManager.js';
@@ -22,57 +26,93 @@ import { requireStore } from './storageManager.js';
22
26
  * @returns {UseBoundStore<StoreApi<EntityStore<T>>>}
23
27
  */
24
28
  export function createEntityStore(collectionKey) {
25
- return create(set => ({
26
- byId: new Map(),
27
- hydrated: false,
28
- hydrate: async () => {
29
- const docs = await requireStore().listEntities(collectionKey);
30
- set({ byId: new Map(docs.map(d => [d.id, d])), hydrated: true });
31
- },
32
- insert: async (doc) => {
33
- await requireStore().insertEntity(collectionKey, doc);
29
+ return create(set => {
30
+ // The pull path (`patch` / `drop`) can fire once per remote change; an
31
+ // initial device sync of N docs would otherwise clone the byId Map N times
32
+ // and push N separate store updates (O(N^2) copies + N re-renders). Buffer
33
+ // the per-doc remote patches and flush the whole burst in ONE Map clone +
34
+ // ONE `set` on a microtask, preserving per-event insert/drop ordering.
35
+ const pending = [];
36
+ let flushScheduled = false;
37
+ /**
38
+ * Applies the buffered pull burst in one Map clone + one `set`.
39
+ */
40
+ function flushPending() {
41
+ flushScheduled = false;
42
+ if (pending.length === 0) {
43
+ return;
44
+ }
45
+ const ops = pending.splice(0);
34
46
  set(state => {
47
+ let changed = false;
35
48
  const byId = new Map(state.byId);
36
- byId.set(doc.id, doc);
37
- return { byId };
38
- });
39
- },
40
- update: async (doc) => {
41
- await requireStore().updateEntity(collectionKey, doc);
42
- set(state => {
43
- const byId = new Map(state.byId);
44
- byId.set(doc.id, doc);
45
- return { byId };
46
- });
47
- },
48
- remove: async (uuid) => {
49
- await requireStore().deleteEntity(collectionKey, uuid);
50
- set(state => {
51
- const byId = new Map(state.byId);
52
- byId.delete(uuid);
53
- return { byId };
54
- });
55
- },
56
- replaceAll: docs => {
57
- set({ byId: new Map(docs.map(d => [d.id, d])), hydrated: true });
58
- },
59
- patch: doc => {
60
- set(state => {
61
- const byId = new Map(state.byId);
62
- byId.set(doc.id, doc);
63
- return { byId };
64
- });
65
- },
66
- drop: uuid => {
67
- set(state => {
68
- if (!state.byId.has(uuid)) {
69
- return state;
49
+ for (const op of ops) {
50
+ if (op.type === 'upsert') {
51
+ byId.set(op.doc.id, op.doc);
52
+ changed = true;
53
+ }
54
+ else if (byId.delete(op.uuid)) {
55
+ changed = true;
56
+ }
70
57
  }
71
- const byId = new Map(state.byId);
72
- byId.delete(uuid);
73
- return { byId };
58
+ // A burst of stray drops (ids not present) leaves the Map untouched;
59
+ // keep the old reference so no needless re-render fires.
60
+ return changed ? { byId } : state;
74
61
  });
75
62
  }
76
- }));
63
+ /**
64
+ * Schedules a single microtask flush per pull burst.
65
+ */
66
+ function schedulePendingFlush() {
67
+ if (!flushScheduled) {
68
+ flushScheduled = true;
69
+ queueMicrotask(flushPending);
70
+ }
71
+ }
72
+ return {
73
+ byId: new Map(),
74
+ hydrated: false,
75
+ hydrate: async () => {
76
+ const docs = await requireStore().listEntities(collectionKey);
77
+ set({ byId: new Map(docs.map(d => [d.id, d])), hydrated: true });
78
+ },
79
+ insert: async (doc) => {
80
+ await requireStore().insertEntity(collectionKey, doc);
81
+ set(state => {
82
+ const byId = new Map(state.byId);
83
+ byId.set(doc.id, doc);
84
+ return { byId };
85
+ });
86
+ },
87
+ update: async (doc) => {
88
+ await requireStore().updateEntity(collectionKey, doc);
89
+ set(state => {
90
+ const byId = new Map(state.byId);
91
+ byId.set(doc.id, doc);
92
+ return { byId };
93
+ });
94
+ },
95
+ remove: async (uuid) => {
96
+ await requireStore().deleteEntity(collectionKey, uuid);
97
+ set(state => {
98
+ const byId = new Map(state.byId);
99
+ byId.delete(uuid);
100
+ return { byId };
101
+ });
102
+ },
103
+ replaceAll: docs => {
104
+ pending.length = 0;
105
+ set({ byId: new Map(docs.map(doc => [doc.id, doc])), hydrated: true });
106
+ },
107
+ patch: doc => {
108
+ pending.push({ type: 'upsert', doc });
109
+ schedulePendingFlush();
110
+ },
111
+ drop: uuid => {
112
+ pending.push({ type: 'drop', uuid });
113
+ schedulePendingFlush();
114
+ }
115
+ };
116
+ });
77
117
  }
78
118
  //# sourceMappingURL=entityStore.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"entityStore.js","sourceRoot":"","sources":["../../src/storage/entityStore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"entityStore.js","sourceRoot":"","sources":["../../src/storage/entityStore.ts"],"names":[],"mappings":"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"}