@abloatai/humans 0.37.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.
Files changed (404) hide show
  1. package/README.md +52 -0
  2. package/dist/Ablo.d.ts +208 -0
  3. package/dist/Ablo.js +120 -0
  4. package/dist/client.d.ts +317 -0
  5. package/dist/client.js +13 -0
  6. package/dist/core.d.ts +35 -0
  7. package/dist/core.js +48 -0
  8. package/dist/humans.d.ts +28 -0
  9. package/dist/humans.js +34 -0
  10. package/dist/index.d.ts +10 -0
  11. package/dist/index.js +6 -0
  12. package/dist/local/BaseSyncedStore.d.ts +807 -0
  13. package/dist/local/BaseSyncedStore.js +1516 -0
  14. package/dist/local/Database.d.ts +322 -0
  15. package/dist/local/Database.js +1589 -0
  16. package/dist/local/InstanceCache.d.ts +255 -0
  17. package/dist/local/InstanceCache.js +1263 -0
  18. package/dist/local/LazyReferenceCollection.d.ts +177 -0
  19. package/dist/local/LazyReferenceCollection.js +461 -0
  20. package/dist/local/Model.d.ts +475 -0
  21. package/dist/local/Model.js +950 -0
  22. package/dist/local/ModelRegistry.d.ts +225 -0
  23. package/dist/local/ModelRegistry.js +539 -0
  24. package/dist/local/NetworkMonitor.d.ts +28 -0
  25. package/dist/local/NetworkMonitor.js +79 -0
  26. package/dist/local/RuntimeContext.d.ts +52 -0
  27. package/dist/local/RuntimeContext.js +80 -0
  28. package/dist/local/SyncClient.d.ts +516 -0
  29. package/dist/local/SyncClient.js +1754 -0
  30. package/dist/local/adapters/alwaysOnline.d.ts +14 -0
  31. package/dist/local/adapters/alwaysOnline.js +17 -0
  32. package/dist/local/adapters/inMemoryStorage.d.ts +37 -0
  33. package/dist/local/adapters/inMemoryStorage.js +122 -0
  34. package/dist/local/client/clientPrelude.d.ts +52 -0
  35. package/dist/local/client/clientPrelude.js +60 -0
  36. package/dist/local/client/consoleLogger.d.ts +35 -0
  37. package/dist/local/client/consoleLogger.js +44 -0
  38. package/dist/local/client/createInternalComponents.d.ts +50 -0
  39. package/dist/local/client/createInternalComponents.js +98 -0
  40. package/dist/local/client/createModelProxy.d.ts +248 -0
  41. package/dist/local/client/createModelProxy.js +880 -0
  42. package/dist/local/client/modelRegistration.d.ts +10 -0
  43. package/dist/local/client/modelRegistration.js +316 -0
  44. package/dist/local/client/options.d.ts +440 -0
  45. package/dist/local/client/options.js +7 -0
  46. package/dist/local/client/reactiveEngine.d.ts +53 -0
  47. package/dist/local/client/reactiveEngine.js +705 -0
  48. package/dist/local/client/resourceTypes.d.ts +12 -0
  49. package/dist/local/client/resourceTypes.js +10 -0
  50. package/dist/local/client/schemaConfig.d.ts +44 -0
  51. package/dist/local/client/schemaConfig.js +185 -0
  52. package/dist/local/client/storeCluster.d.ts +46 -0
  53. package/dist/local/client/storeCluster.js +133 -0
  54. package/dist/local/client/storeLifecycle.d.ts +61 -0
  55. package/dist/local/client/storeLifecycle.js +236 -0
  56. package/dist/local/client/validateAbloOptions.d.ts +42 -0
  57. package/dist/local/client/validateAbloOptions.js +43 -0
  58. package/dist/local/client/wsMutationExecutor.d.ts +27 -0
  59. package/dist/local/client/wsMutationExecutor.js +72 -0
  60. package/dist/local/context.d.ts +42 -0
  61. package/dist/local/context.js +81 -0
  62. package/dist/local/coordination/ClaimLog.d.ts +26 -0
  63. package/dist/local/coordination/ClaimLog.js +32 -0
  64. package/dist/local/interfaces/index.d.ts +311 -0
  65. package/dist/local/interfaces/index.js +9 -0
  66. package/dist/local/localModelContract.d.ts +14 -0
  67. package/dist/local/localModelContract.js +1 -0
  68. package/dist/local/logPosition.d.ts +31 -0
  69. package/dist/local/logPosition.js +53 -0
  70. package/dist/local/mutationPersistence.d.ts +6 -0
  71. package/dist/local/mutationPersistence.js +1 -0
  72. package/dist/local/mutators/RecordingMutation.d.ts +36 -0
  73. package/dist/local/mutators/RecordingMutation.js +182 -0
  74. package/dist/local/mutators/Transaction.d.ts +40 -0
  75. package/dist/local/mutators/Transaction.js +58 -0
  76. package/dist/local/mutators/UndoManager.d.ts +258 -0
  77. package/dist/local/mutators/UndoManager.js +665 -0
  78. package/dist/local/mutators/defineMutators.d.ts +60 -0
  79. package/dist/local/mutators/defineMutators.js +18 -0
  80. package/dist/local/mutators/inverseOp.d.ts +126 -0
  81. package/dist/local/mutators/inverseOp.js +71 -0
  82. package/dist/local/mutators/mutateActions.d.ts +45 -0
  83. package/dist/local/mutators/mutateActions.js +105 -0
  84. package/dist/local/mutators/readerActions.d.ts +33 -0
  85. package/dist/local/mutators/readerActions.js +57 -0
  86. package/dist/local/mutators/undoApply.d.ts +51 -0
  87. package/dist/local/mutators/undoApply.js +117 -0
  88. package/dist/local/persistence.d.ts +7 -0
  89. package/dist/local/persistence.js +9 -0
  90. package/dist/local/query/QueryProcessor.d.ts +75 -0
  91. package/dist/local/query/QueryProcessor.js +255 -0
  92. package/dist/local/query/client.d.ts +64 -0
  93. package/dist/local/query/client.js +138 -0
  94. package/dist/local/query/types.d.ts +85 -0
  95. package/dist/local/query/types.js +16 -0
  96. package/dist/local/schema/serialize.d.ts +1 -0
  97. package/dist/local/schema/serialize.js +1 -0
  98. package/dist/local/store/queryApi.d.ts +13 -0
  99. package/dist/local/store/queryApi.js +35 -0
  100. package/dist/local/storeContract.d.ts +145 -0
  101. package/dist/local/storeContract.js +12 -0
  102. package/dist/local/stores/DatabaseManager.d.ts +112 -0
  103. package/dist/local/stores/DatabaseManager.js +400 -0
  104. package/dist/local/stores/ObjectStore.d.ts +115 -0
  105. package/dist/local/stores/ObjectStore.js +393 -0
  106. package/dist/local/stores/ObjectStoreContract.d.ts +38 -0
  107. package/dist/local/stores/ObjectStoreContract.js +1 -0
  108. package/dist/local/stores/StoreManager.d.ts +114 -0
  109. package/dist/local/stores/StoreManager.js +304 -0
  110. package/dist/local/stores/SyncActionStore.d.ts +99 -0
  111. package/dist/local/stores/SyncActionStore.js +506 -0
  112. package/dist/local/stores/openIDBWithTimeout.d.ts +65 -0
  113. package/dist/local/stores/openIDBWithTimeout.js +153 -0
  114. package/dist/local/stores/persistenceCleanup.d.ts +7 -0
  115. package/dist/local/stores/persistenceCleanup.js +26 -0
  116. package/dist/local/stores/persistenceIdentity.d.ts +27 -0
  117. package/dist/local/stores/persistenceIdentity.js +38 -0
  118. package/dist/local/stores/syncAction.d.ts +26 -0
  119. package/dist/local/stores/syncAction.js +16 -0
  120. package/dist/local/stores/v1PersistenceDeletion.d.ts +8 -0
  121. package/dist/local/stores/v1PersistenceDeletion.js +16 -0
  122. package/dist/local/sync/BootstrapFetcher.d.ts +284 -0
  123. package/dist/local/sync/BootstrapFetcher.js +964 -0
  124. package/dist/local/sync/ConnectionManager.d.ts +8 -0
  125. package/dist/local/sync/ConnectionManager.js +8 -0
  126. package/dist/local/sync/OnDemandLoader.d.ts +231 -0
  127. package/dist/local/sync/OnDemandLoader.js +743 -0
  128. package/dist/local/sync/SubscriptionManager.d.ts +159 -0
  129. package/dist/local/sync/SubscriptionManager.js +243 -0
  130. package/dist/local/sync/SyncWebSocket.d.ts +173 -0
  131. package/dist/local/sync/SyncWebSocket.js +438 -0
  132. package/dist/local/sync/bootstrapApply.d.ts +73 -0
  133. package/dist/local/sync/bootstrapApply.js +73 -0
  134. package/dist/local/sync/commitFrames.d.ts +8 -0
  135. package/dist/local/sync/commitFrames.js +8 -0
  136. package/dist/local/sync/connectionManagerLifecycle.d.ts +23 -0
  137. package/dist/local/sync/connectionManagerLifecycle.js +126 -0
  138. package/dist/local/sync/contextPorts.d.ts +18 -0
  139. package/dist/local/sync/contextPorts.js +31 -0
  140. package/dist/local/sync/createClaimStream.d.ts +64 -0
  141. package/dist/local/sync/createClaimStream.js +475 -0
  142. package/dist/local/sync/createSnapshot.d.ts +29 -0
  143. package/dist/local/sync/createSnapshot.js +116 -0
  144. package/dist/local/sync/credentialLifecycle.d.ts +7 -0
  145. package/dist/local/sync/credentialLifecycle.js +7 -0
  146. package/dist/local/sync/deltaPipeline.d.ts +116 -0
  147. package/dist/local/sync/deltaPipeline.js +357 -0
  148. package/dist/local/sync/groupChange.d.ts +116 -0
  149. package/dist/local/sync/groupChange.js +244 -0
  150. package/dist/local/sync/initialize.d.ts +27 -0
  151. package/dist/local/sync/initialize.js +137 -0
  152. package/dist/local/sync/participants.d.ts +132 -0
  153. package/dist/local/sync/participants.js +342 -0
  154. package/dist/local/sync/persistedPrefix.d.ts +12 -0
  155. package/dist/local/sync/persistedPrefix.js +22 -0
  156. package/dist/local/sync/reconnect.d.ts +23 -0
  157. package/dist/local/sync/reconnect.js +55 -0
  158. package/dist/local/sync/schemaDrift.d.ts +55 -0
  159. package/dist/local/sync/schemaDrift.js +53 -0
  160. package/dist/local/sync/schemas.d.ts +71 -0
  161. package/dist/local/sync/schemas.js +94 -0
  162. package/dist/local/sync/socketEventWiring.d.ts +31 -0
  163. package/dist/local/sync/socketEventWiring.js +130 -0
  164. package/dist/local/sync/syncCursor.d.ts +40 -0
  165. package/dist/local/sync/syncCursor.js +55 -0
  166. package/dist/local/sync/syncPlan.d.ts +54 -0
  167. package/dist/local/sync/syncPlan.js +50 -0
  168. package/dist/local/sync/terminalSessionLifecycle.d.ts +20 -0
  169. package/dist/local/sync/terminalSessionLifecycle.js +50 -0
  170. package/dist/local/sync/wsFrameHandlers.d.ts +8 -0
  171. package/dist/local/sync/wsFrameHandlers.js +8 -0
  172. package/dist/local/transactions/databaseCommitOutbox.d.ts +15 -0
  173. package/dist/local/transactions/databaseCommitOutbox.js +16 -0
  174. package/dist/local/transactions/localMutation.d.ts +10 -0
  175. package/dist/local/transactions/localMutation.js +37 -0
  176. package/dist/local/transactions/mutations/MutationQueue.d.ts +511 -0
  177. package/dist/local/transactions/mutations/MutationQueue.js +1498 -0
  178. package/dist/local/transactions/mutations/MutationStore.d.ts +20 -0
  179. package/dist/local/transactions/mutations/MutationStore.js +53 -0
  180. package/dist/local/transactions/mutations/UnconfirmedWrites.d.ts +82 -0
  181. package/dist/local/transactions/mutations/UnconfirmedWrites.js +104 -0
  182. package/dist/local/transactions/mutations/batchProcessing.d.ts +64 -0
  183. package/dist/local/transactions/mutations/batchProcessing.js +349 -0
  184. package/dist/local/transactions/mutations/coalesceRules.d.ts +58 -0
  185. package/dist/local/transactions/mutations/coalesceRules.js +140 -0
  186. package/dist/local/transactions/mutations/commitApi.d.ts +19 -0
  187. package/dist/local/transactions/mutations/commitApi.js +74 -0
  188. package/dist/local/transactions/mutations/commitLane.d.ts +70 -0
  189. package/dist/local/transactions/mutations/commitLane.js +140 -0
  190. package/dist/local/transactions/mutations/commitLatency.d.ts +52 -0
  191. package/dist/local/transactions/mutations/commitLatency.js +130 -0
  192. package/dist/local/transactions/mutations/commitPayload.d.ts +165 -0
  193. package/dist/local/transactions/mutations/commitPayload.js +152 -0
  194. package/dist/local/transactions/mutations/commitTransport.d.ts +36 -0
  195. package/dist/local/transactions/mutations/commitTransport.js +104 -0
  196. package/dist/local/transactions/mutations/deltaConfirmation.d.ts +63 -0
  197. package/dist/local/transactions/mutations/deltaConfirmation.js +235 -0
  198. package/dist/local/transactions/mutations/durableCommitRestore.d.ts +17 -0
  199. package/dist/local/transactions/mutations/durableCommitRestore.js +95 -0
  200. package/dist/local/transactions/mutations/durableWriteStore.d.ts +14 -0
  201. package/dist/local/transactions/mutations/durableWriteStore.js +12 -0
  202. package/dist/local/transactions/mutations/executionSelection.d.ts +6 -0
  203. package/dist/local/transactions/mutations/executionSelection.js +42 -0
  204. package/dist/local/transactions/mutations/failureHandling.d.ts +16 -0
  205. package/dist/local/transactions/mutations/failureHandling.js +130 -0
  206. package/dist/local/transactions/mutations/failurePolicy.d.ts +13 -0
  207. package/dist/local/transactions/mutations/failurePolicy.js +48 -0
  208. package/dist/local/transactions/mutations/localMutation.d.ts +58 -0
  209. package/dist/local/transactions/mutations/localMutation.js +75 -0
  210. package/dist/local/transactions/mutations/modelOperations.d.ts +44 -0
  211. package/dist/local/transactions/mutations/modelOperations.js +144 -0
  212. package/dist/local/transactions/mutations/mutationPersistence.d.ts +25 -0
  213. package/dist/local/transactions/mutations/mutationPersistence.js +188 -0
  214. package/dist/local/transactions/mutations/pendingDrain.d.ts +33 -0
  215. package/dist/local/transactions/mutations/pendingDrain.js +112 -0
  216. package/dist/local/transactions/mutations/processingScheduler.d.ts +14 -0
  217. package/dist/local/transactions/mutations/processingScheduler.js +24 -0
  218. package/dist/local/transactions/mutations/queueCoalescing.d.ts +13 -0
  219. package/dist/local/transactions/mutations/queueCoalescing.js +35 -0
  220. package/dist/local/transactions/mutations/replayValidation.d.ts +187 -0
  221. package/dist/local/transactions/mutations/replayValidation.js +164 -0
  222. package/dist/local/transactions/reconnectDrain.d.ts +11 -0
  223. package/dist/local/transactions/reconnectDrain.js +13 -0
  224. package/dist/local/utils/mobxSetup.d.ts +53 -0
  225. package/dist/local/utils/mobxSetup.js +330 -0
  226. package/dist/local/views/QueryView.d.ts +79 -0
  227. package/dist/local/views/QueryView.js +218 -0
  228. package/dist/local/views/ViewRegistry.d.ts +20 -0
  229. package/dist/local/views/ViewRegistry.js +57 -0
  230. package/dist/local/views/incrementalView.d.ts +45 -0
  231. package/dist/local/views/incrementalView.js +69 -0
  232. package/dist/plugin.d.ts +285 -0
  233. package/dist/plugin.js +106 -0
  234. package/dist/presenceStream.d.ts +69 -0
  235. package/dist/presenceStream.js +200 -0
  236. package/dist/react/AbloProvider.d.ts +242 -0
  237. package/dist/react/AbloProvider.js +456 -0
  238. package/dist/react/ClientSideSuspense.d.ts +36 -0
  239. package/dist/react/ClientSideSuspense.js +17 -0
  240. package/dist/react/DefaultFallback.d.ts +24 -0
  241. package/dist/react/DefaultFallback.js +43 -0
  242. package/dist/react/context.d.ts +55 -0
  243. package/dist/react/context.js +29 -0
  244. package/dist/react/createAbloReact.d.ts +50 -0
  245. package/dist/react/createAbloReact.js +48 -0
  246. package/dist/react/internalContext.d.ts +33 -0
  247. package/dist/react/internalContext.js +3 -0
  248. package/dist/react/useAblo.d.ts +96 -0
  249. package/dist/react/useAblo.js +120 -0
  250. package/dist/react/useCurrentUserId.d.ts +2 -0
  251. package/dist/react/useCurrentUserId.js +12 -0
  252. package/dist/react/useErrorListener.d.ts +2 -0
  253. package/dist/react/useErrorListener.js +14 -0
  254. package/dist/react/useMutationFailureListener.d.ts +8 -0
  255. package/dist/react/useMutationFailureListener.js +19 -0
  256. package/dist/react/useMutators.d.ts +56 -0
  257. package/dist/react/useMutators.js +84 -0
  258. package/dist/react/useSyncStatus.d.ts +19 -0
  259. package/dist/react/useSyncStatus.js +37 -0
  260. package/dist/react/useUndoScope.d.ts +34 -0
  261. package/dist/react/useUndoScope.js +73 -0
  262. package/dist/react.d.ts +18 -0
  263. package/dist/react.js +14 -0
  264. package/dist/reactRuntime.d.ts +4 -0
  265. package/dist/reactRuntime.js +2 -0
  266. package/dist/surface.d.ts +36 -0
  267. package/dist/surface.js +77 -0
  268. package/dist/useReactive.d.ts +6 -0
  269. package/dist/useReactive.js +43 -0
  270. package/package.json +119 -0
  271. package/src/Ablo.ts +456 -0
  272. package/src/client.ts +374 -0
  273. package/src/core.ts +104 -0
  274. package/src/humans.ts +61 -0
  275. package/src/index.ts +40 -0
  276. package/src/local/BaseSyncedStore.ts +1991 -0
  277. package/src/local/Database.ts +2052 -0
  278. package/src/local/InstanceCache.ts +1503 -0
  279. package/src/local/LazyReferenceCollection.ts +563 -0
  280. package/src/local/Model.ts +1124 -0
  281. package/src/local/ModelRegistry.ts +762 -0
  282. package/src/local/NetworkMonitor.ts +88 -0
  283. package/src/local/RuntimeContext.ts +141 -0
  284. package/src/local/SyncClient.ts +2131 -0
  285. package/src/local/adapters/alwaysOnline.ts +20 -0
  286. package/src/local/adapters/inMemoryStorage.ts +141 -0
  287. package/src/local/client/clientPrelude.ts +112 -0
  288. package/src/local/client/consoleLogger.ts +60 -0
  289. package/src/local/client/createInternalComponents.ts +163 -0
  290. package/src/local/client/createModelProxy.ts +1390 -0
  291. package/src/local/client/modelRegistration.ts +350 -0
  292. package/src/local/client/options.ts +526 -0
  293. package/src/local/client/reactiveEngine.ts +935 -0
  294. package/src/local/client/resourceTypes.ts +37 -0
  295. package/src/local/client/schemaConfig.ts +194 -0
  296. package/src/local/client/storeCluster.ts +172 -0
  297. package/src/local/client/storeLifecycle.ts +343 -0
  298. package/src/local/client/validateAbloOptions.ts +95 -0
  299. package/src/local/client/wsMutationExecutor.ts +110 -0
  300. package/src/local/context.ts +96 -0
  301. package/src/local/coordination/ClaimLog.ts +39 -0
  302. package/src/local/interfaces/index.ts +468 -0
  303. package/src/local/localModelContract.ts +15 -0
  304. package/src/local/logPosition.ts +84 -0
  305. package/src/local/mutationPersistence.ts +7 -0
  306. package/src/local/mutators/RecordingMutation.ts +222 -0
  307. package/src/local/mutators/Transaction.ts +97 -0
  308. package/src/local/mutators/UndoManager.ts +741 -0
  309. package/src/local/mutators/defineMutators.ts +76 -0
  310. package/src/local/mutators/inverseOp.ts +83 -0
  311. package/src/local/mutators/mutateActions.ts +167 -0
  312. package/src/local/mutators/readerActions.ts +99 -0
  313. package/src/local/mutators/undoApply.ts +141 -0
  314. package/src/local/persistence.ts +16 -0
  315. package/src/local/query/QueryProcessor.ts +347 -0
  316. package/src/local/query/client.ts +197 -0
  317. package/src/local/query/types.ts +102 -0
  318. package/src/local/schema/serialize.ts +1 -0
  319. package/src/local/store/queryApi.ts +56 -0
  320. package/src/local/storeContract.ts +146 -0
  321. package/src/local/stores/DatabaseManager.ts +507 -0
  322. package/src/local/stores/ObjectStore.ts +449 -0
  323. package/src/local/stores/ObjectStoreContract.ts +48 -0
  324. package/src/local/stores/StoreManager.ts +388 -0
  325. package/src/local/stores/SyncActionStore.ts +579 -0
  326. package/src/local/stores/openIDBWithTimeout.ts +195 -0
  327. package/src/local/stores/persistenceCleanup.ts +43 -0
  328. package/src/local/stores/persistenceIdentity.ts +83 -0
  329. package/src/local/stores/syncAction.ts +21 -0
  330. package/src/local/stores/v1PersistenceDeletion.ts +21 -0
  331. package/src/local/sync/BootstrapFetcher.ts +1224 -0
  332. package/src/local/sync/ConnectionManager.ts +15 -0
  333. package/src/local/sync/OnDemandLoader.ts +927 -0
  334. package/src/local/sync/SubscriptionManager.ts +300 -0
  335. package/src/local/sync/SyncWebSocket.ts +584 -0
  336. package/src/local/sync/bootstrapApply.ts +130 -0
  337. package/src/local/sync/commitFrames.ts +16 -0
  338. package/src/local/sync/connectionManagerLifecycle.ts +158 -0
  339. package/src/local/sync/contextPorts.ts +37 -0
  340. package/src/local/sync/createClaimStream.ts +668 -0
  341. package/src/local/sync/createSnapshot.ts +160 -0
  342. package/src/local/sync/credentialLifecycle.ts +18 -0
  343. package/src/local/sync/deltaPipeline.ts +473 -0
  344. package/src/local/sync/groupChange.ts +343 -0
  345. package/src/local/sync/initialize.ts +205 -0
  346. package/src/local/sync/participants.ts +564 -0
  347. package/src/local/sync/persistedPrefix.ts +27 -0
  348. package/src/local/sync/reconnect.ts +88 -0
  349. package/src/local/sync/schemaDrift.ts +86 -0
  350. package/src/local/sync/schemas.ts +118 -0
  351. package/src/local/sync/socketEventWiring.ts +196 -0
  352. package/src/local/sync/syncCursor.ts +62 -0
  353. package/src/local/sync/syncPlan.ts +89 -0
  354. package/src/local/sync/terminalSessionLifecycle.ts +66 -0
  355. package/src/local/sync/wsFrameHandlers.ts +20 -0
  356. package/src/local/transactions/databaseCommitOutbox.ts +33 -0
  357. package/src/local/transactions/localMutation.ts +58 -0
  358. package/src/local/transactions/mutations/MutationQueue.ts +1998 -0
  359. package/src/local/transactions/mutations/MutationStore.ts +65 -0
  360. package/src/local/transactions/mutations/UnconfirmedWrites.ts +133 -0
  361. package/src/local/transactions/mutations/batchProcessing.ts +469 -0
  362. package/src/local/transactions/mutations/coalesceRules.ts +192 -0
  363. package/src/local/transactions/mutations/commitApi.ts +97 -0
  364. package/src/local/transactions/mutations/commitLane.ts +191 -0
  365. package/src/local/transactions/mutations/commitLatency.ts +164 -0
  366. package/src/local/transactions/mutations/commitPayload.ts +281 -0
  367. package/src/local/transactions/mutations/commitTransport.ts +174 -0
  368. package/src/local/transactions/mutations/deltaConfirmation.ts +298 -0
  369. package/src/local/transactions/mutations/durableCommitRestore.ts +128 -0
  370. package/src/local/transactions/mutations/durableWriteStore.ts +21 -0
  371. package/src/local/transactions/mutations/executionSelection.ts +42 -0
  372. package/src/local/transactions/mutations/failureHandling.ts +154 -0
  373. package/src/local/transactions/mutations/failurePolicy.ts +61 -0
  374. package/src/local/transactions/mutations/localMutation.ts +135 -0
  375. package/src/local/transactions/mutations/modelOperations.ts +210 -0
  376. package/src/local/transactions/mutations/mutationPersistence.ts +231 -0
  377. package/src/local/transactions/mutations/pendingDrain.ts +160 -0
  378. package/src/local/transactions/mutations/processingScheduler.ts +35 -0
  379. package/src/local/transactions/mutations/queueCoalescing.ts +45 -0
  380. package/src/local/transactions/mutations/replayValidation.ts +192 -0
  381. package/src/local/transactions/reconnectDrain.ts +24 -0
  382. package/src/local/utils/mobxSetup.ts +388 -0
  383. package/src/local/views/QueryView.ts +311 -0
  384. package/src/local/views/ViewRegistry.ts +61 -0
  385. package/src/local/views/incrementalView.ts +92 -0
  386. package/src/plugin.ts +396 -0
  387. package/src/presenceStream.ts +279 -0
  388. package/src/react/AbloProvider.tsx +744 -0
  389. package/src/react/ClientSideSuspense.tsx +57 -0
  390. package/src/react/DefaultFallback.tsx +60 -0
  391. package/src/react/context.ts +89 -0
  392. package/src/react/createAbloReact.ts +116 -0
  393. package/src/react/internalContext.ts +38 -0
  394. package/src/react/useAblo.ts +280 -0
  395. package/src/react/useCurrentUserId.ts +17 -0
  396. package/src/react/useErrorListener.ts +22 -0
  397. package/src/react/useMutationFailureListener.ts +34 -0
  398. package/src/react/useMutators.ts +184 -0
  399. package/src/react/useSyncStatus.ts +42 -0
  400. package/src/react/useUndoScope.ts +143 -0
  401. package/src/react.ts +69 -0
  402. package/src/reactRuntime.ts +10 -0
  403. package/src/surface.ts +106 -0
  404. package/src/useReactive.ts +51 -0
@@ -0,0 +1,12 @@
1
+ /**
2
+ * The interactive resource-type surface.
3
+ *
4
+ * The transport-facing half of these types moved down into the settlement core
5
+ * (ADR 0016). This module keeps the
6
+ * consumer-facing import path intact and rejoins it with the model-proxy types
7
+ * that stay here — `ModelOperations` chief among them, because it returns the
8
+ * live participant handle.
9
+ */
10
+ export * from '@abloatai/transaction/resources/httpResources';
11
+ export type { LocalCountOptions, LocalReadOptions, ModelListScope, ServerReadOptions, ModelRetrieveParams, ModelCreateParams, ModelUpdateParams, ModelDeleteParams, ClaimOptions, ClaimParams, ClaimLookupParams, ClaimReorderParams, Claim, ClaimHeartbeat, ClaimHeartbeatOptions, HeldClaim, HeldLease, } from '@abloatai/transaction/resources/modelOperations';
12
+ export type { ModelOperations } from './createModelProxy.js';
@@ -0,0 +1,10 @@
1
+ /**
2
+ * The interactive resource-type surface.
3
+ *
4
+ * The transport-facing half of these types moved down into the settlement core
5
+ * (ADR 0016). This module keeps the
6
+ * consumer-facing import path intact and rejoins it with the model-proxy types
7
+ * that stay here — `ModelOperations` chief among them, because it returns the
8
+ * live participant handle.
9
+ */
10
+ export * from '@abloatai/transaction/resources/httpResources';
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Derives engine configuration from a schema. This module holds two pure
3
+ * functions: {@link computeFKDepthPriority} works out a safe row-insertion
4
+ * order from the schema's foreign-key relations, and
5
+ * {@link deriveConfigFromSchema} packages that ordering, together with a few
6
+ * defaults, into the {@link RuntimeConfig} a client uses at startup. Both
7
+ * are deterministic transforms of the schema and hold no engine state.
8
+ */
9
+ import type { Schema } from '@abloatai/transaction/schema/schema';
10
+ import type { RuntimeConfig } from '../interfaces/index.js';
11
+ /**
12
+ * Computes a create-priority map that gives the engine a safe order for
13
+ * inserting rows, so a child row is never written before the parent its
14
+ * foreign key references.
15
+ *
16
+ * Every `belongsTo` relation is an edge from a child model to its parent. This
17
+ * function runs Tarjan's strongly-connected-components algorithm over that
18
+ * graph, which does two things at once: it groups any models that reference
19
+ * each other in a cycle into a single component, and it produces those
20
+ * components in an order where parents come before children. Each model then
21
+ * gets a numeric priority from that order, where a lower number means "insert
22
+ * earlier". Top-level models with no parent — an organization or a theme, say —
23
+ * come first, and the deepest descendants come last.
24
+ *
25
+ * Models in the same cycle share a priority, so within a cycle the order rows
26
+ * were queued in breaks the tie. To break a cycle deterministically instead,
27
+ * mark one side of it with `belongsTo(target, fk, { defer: true })`. A deferred
28
+ * edge is left out of the graph, which turns the cycle into a chain and gives
29
+ * the deferred child a strictly higher priority than its parent. Pair it with a
30
+ * Postgres `DEFERRABLE INITIALLY DEFERRED` constraint if you also want the
31
+ * database to relax its check. See {@link BelongsToOptions.defer}.
32
+ *
33
+ * The returned map is keyed by each model's wire type name
34
+ * ({@link ModelDef.typename}, falling back to the schema key), because that is
35
+ * the name the engine looks up at commit time. Keying by the schema key would
36
+ * miss that lookup, and every model would fall back to the default priority.
37
+ *
38
+ * The result does not depend on which model the walk starts from, and the
39
+ * algorithm runs in time linear in the number of models plus relations.
40
+ * Reference: Tarjan, R. (1972), "Depth-first search and linear graph
41
+ * algorithms."
42
+ */
43
+ export declare function computeFKDepthPriority(schema: Schema): ReadonlyMap<string, number>;
44
+ export declare function deriveConfigFromSchema(schema: Schema): RuntimeConfig;
@@ -0,0 +1,185 @@
1
+ /**
2
+ * Derives engine configuration from a schema. This module holds two pure
3
+ * functions: {@link computeFKDepthPriority} works out a safe row-insertion
4
+ * order from the schema's foreign-key relations, and
5
+ * {@link deriveConfigFromSchema} packages that ordering, together with a few
6
+ * defaults, into the {@link RuntimeConfig} a client uses at startup. Both
7
+ * are deterministic transforms of the schema and hold no engine state.
8
+ */
9
+ import { schemaHash, modelHash, toSchemaJSON } from '../schema/serialize.js';
10
+ // ── Config derivation from schema ─────────────────────────────────────────
11
+ /**
12
+ * Computes a create-priority map that gives the engine a safe order for
13
+ * inserting rows, so a child row is never written before the parent its
14
+ * foreign key references.
15
+ *
16
+ * Every `belongsTo` relation is an edge from a child model to its parent. This
17
+ * function runs Tarjan's strongly-connected-components algorithm over that
18
+ * graph, which does two things at once: it groups any models that reference
19
+ * each other in a cycle into a single component, and it produces those
20
+ * components in an order where parents come before children. Each model then
21
+ * gets a numeric priority from that order, where a lower number means "insert
22
+ * earlier". Top-level models with no parent — an organization or a theme, say —
23
+ * come first, and the deepest descendants come last.
24
+ *
25
+ * Models in the same cycle share a priority, so within a cycle the order rows
26
+ * were queued in breaks the tie. To break a cycle deterministically instead,
27
+ * mark one side of it with `belongsTo(target, fk, { defer: true })`. A deferred
28
+ * edge is left out of the graph, which turns the cycle into a chain and gives
29
+ * the deferred child a strictly higher priority than its parent. Pair it with a
30
+ * Postgres `DEFERRABLE INITIALLY DEFERRED` constraint if you also want the
31
+ * database to relax its check. See {@link BelongsToOptions.defer}.
32
+ *
33
+ * The returned map is keyed by each model's wire type name
34
+ * ({@link ModelDef.typename}, falling back to the schema key), because that is
35
+ * the name the engine looks up at commit time. Keying by the schema key would
36
+ * miss that lookup, and every model would fall back to the default priority.
37
+ *
38
+ * The result does not depend on which model the walk starts from, and the
39
+ * algorithm runs in time linear in the number of models plus relations.
40
+ * Reference: Tarjan, R. (1972), "Depth-first search and linear graph
41
+ * algorithms."
42
+ */
43
+ export function computeFKDepthPriority(schema) {
44
+ // schemaKey → typename (wire name used at transaction time)
45
+ const keyToTypename = new Map();
46
+ for (const [key, def] of Object.entries(schema.models)) {
47
+ keyToTypename.set(key, def.typename ?? key);
48
+ }
49
+ // Adjacency: schemaKey → parent schema keys pulled from `belongsTo`.
50
+ // Parents not in the schema (e.g. external types) are dropped so the
51
+ // graph stays closed. Edges marked `{ defer: true }` are also
52
+ // dropped — the schema author has declared this side of a cycle to
53
+ // be the "soft" one (insert with null FK, patch later), so the
54
+ // dependency-graph walker treats it as if the edge weren't there.
55
+ // That breaks the cycle deterministically and lets the other side
56
+ // become a strict topological predecessor.
57
+ const parentsOf = new Map();
58
+ for (const [key, def] of Object.entries(schema.models)) {
59
+ const out = [];
60
+ for (const rel of Object.values(def.relations)) {
61
+ if (rel.type !== 'belongsTo')
62
+ continue;
63
+ if (!keyToTypename.has(rel.target))
64
+ continue;
65
+ if (rel.options?.defer === true)
66
+ continue;
67
+ out.push(rel.target);
68
+ }
69
+ parentsOf.set(key, out);
70
+ }
71
+ // Tarjan SCC bookkeeping
72
+ const dfsIndex = new Map();
73
+ const lowlink = new Map();
74
+ const onStack = new Set();
75
+ const stack = [];
76
+ const sccs = [];
77
+ let counter = 0;
78
+ function strongconnect(v) {
79
+ dfsIndex.set(v, counter);
80
+ lowlink.set(v, counter);
81
+ counter++;
82
+ stack.push(v);
83
+ onStack.add(v);
84
+ for (const w of parentsOf.get(v) ?? []) {
85
+ if (!dfsIndex.has(w)) {
86
+ strongconnect(w);
87
+ lowlink.set(v, Math.min(lowlink.get(v), lowlink.get(w)));
88
+ }
89
+ else if (onStack.has(w)) {
90
+ // Back-edge into the active DFS path — w is in the same SCC as v.
91
+ lowlink.set(v, Math.min(lowlink.get(v), dfsIndex.get(w)));
92
+ }
93
+ }
94
+ // v is the root of an SCC: pop everything down to v inclusive.
95
+ if (lowlink.get(v) === dfsIndex.get(v)) {
96
+ const component = [];
97
+ let w;
98
+ do {
99
+ w = stack.pop();
100
+ onStack.delete(w);
101
+ component.push(w);
102
+ } while (w !== v);
103
+ sccs.push(component);
104
+ }
105
+ }
106
+ for (const key of keyToTypename.keys()) {
107
+ if (!dfsIndex.has(key))
108
+ strongconnect(key);
109
+ }
110
+ // Tarjan emits SCCs in reverse topological order of the condensation.
111
+ // In our edge convention (child→parent), reverse-topo of the
112
+ // condensation means root-SCCs (no outgoing edges = no parents)
113
+ // first, leaf-SCCs (deepest descendants) last. We could just use
114
+ // emit-order as the priority — but that gives independent sibling
115
+ // SCCs different priorities, which is semantically wrong: siblings
116
+ // don't depend on each other and shouldn't be ordered relative to
117
+ // each other.
118
+ //
119
+ // Instead, do one more pass to compute *longest-path depth* on the
120
+ // condensation DAG: depth(SCC) = max(depth(parent SCC)) + 1, or 0
121
+ // for SCCs with no in-schema parents. SCCs at the same depth get
122
+ // the same priority — siblings stay tied, insertion order in the
123
+ // queue breaks the tie. Priority = (depth + 1) * 10.
124
+ //
125
+ // We can compute this in a single pass over the SCCs because
126
+ // Tarjan's emit-order *is* a valid topological order of the
127
+ // condensation: when we process sccs[i], every parent SCC has
128
+ // already been assigned a depth.
129
+ const nodeToSccIdx = new Map();
130
+ sccs.forEach((scc, i) => {
131
+ for (const node of scc)
132
+ nodeToSccIdx.set(node, i);
133
+ });
134
+ const sccDepth = new Map();
135
+ sccs.forEach((scc, i) => {
136
+ let maxParentDepth = -1;
137
+ for (const node of scc) {
138
+ for (const parent of parentsOf.get(node) ?? []) {
139
+ const parentSccIdx = nodeToSccIdx.get(parent);
140
+ if (parentSccIdx === undefined)
141
+ continue;
142
+ if (parentSccIdx === i)
143
+ continue; // intra-SCC edge — not a dep
144
+ const d = sccDepth.get(parentSccIdx);
145
+ if (d !== undefined && d > maxParentDepth)
146
+ maxParentDepth = d;
147
+ }
148
+ }
149
+ sccDepth.set(i, maxParentDepth + 1);
150
+ });
151
+ const out = new Map();
152
+ sccs.forEach((scc, i) => {
153
+ const priority = (sccDepth.get(i) + 1) * 10;
154
+ for (const key of scc) {
155
+ out.set(keyToTypename.get(key), priority);
156
+ }
157
+ });
158
+ return out;
159
+ }
160
+ export function deriveConfigFromSchema(schema) {
161
+ // Field-level serialization for commits happens in the transaction queue,
162
+ // which reads each model's declared fields from the model registry at commit
163
+ // time. There is no per-field metadata to configure here, so these maps stay
164
+ // empty.
165
+ return {
166
+ modelCreatePriority: computeFKDepthPriority(schema),
167
+ defaultCreatePriority: 40,
168
+ defaultNonCreatePriority: 50,
169
+ essentialFields: {},
170
+ classNameFallbackMap: {},
171
+ // Hash this schema once, so startup can detect when it has drifted from the
172
+ // schema the server currently has active. The server and the `ablo push`
173
+ // command compute this same hash.
174
+ expectedSchemaHash: schemaHash(schema),
175
+ // Per-model hashes for the SEMANTIC drift check: on a whole-hash mismatch
176
+ // the client compares only the models it declares, so an additive server
177
+ // change stays silent and a real divergence names the exact models.
178
+ expectedModelHashes: Object.fromEntries(Object.entries(toSchemaJSON(schema).models).map(([key, model]) => [key, modelHash(model)])),
179
+ // For a projection (`selectModels`/`omitModels`), also carry the full source
180
+ // schema's hash. The drift check accepts a server match on either hash, so a
181
+ // subset client stays quiet against a server running its full source schema.
182
+ // Undefined for a directly-authored schema — plain equality applies there.
183
+ expectedSourceSchemaHash: schema.sourceSchemaHash,
184
+ };
185
+ }
@@ -0,0 +1,46 @@
1
+ /**
2
+ * The store cluster — what `humans()` constructs at `init` now that the
3
+ * plugin context carries the resolved url and the credential source
4
+ * (ADR 0016; docs/plans/package-split.md, sequence step 2): this client's
5
+ * runtime, the internal component graph, the registered model classes, and
6
+ * the `BaseSyncedStore` that orchestrates them. The engine consumes the
7
+ * cluster instead of constructing it; what remains in the composition root
8
+ * (credential lifecycle, ready(), model proxies, resources) migrates in
9
+ * later steps.
10
+ *
11
+ * The cluster rides the humans surface under {@link kStoreCluster}, a
12
+ * symbol: `layerPluginSurface` merges only string-keyed members onto the
13
+ * client, so the handoff never becomes public client API. When the plugin
14
+ * contract adopts context patches (the decoration end-state), this channel
15
+ * dissolves into them.
16
+ */
17
+ import type { PluginContext } from '../../plugin.js';
18
+ import { type RuntimeContext } from '../RuntimeContext.js';
19
+ import { BaseSyncedStore } from '../BaseSyncedStore.js';
20
+ import { type InternalComponents } from './createInternalComponents.js';
21
+ import type { InternalAbloOptions } from './options.js';
22
+ export type { InternalAbloOptions } from './options.js';
23
+ /**
24
+ * The private handoff slot on the humans surface. Symbol-keyed on purpose:
25
+ * surface members merge onto the client by string key, and the cluster is
26
+ * construction machinery, not client API.
27
+ */
28
+ export declare const kStoreCluster: unique symbol;
29
+ /** What `humans().init` constructs and the engine consumes. */
30
+ export interface StoreCluster {
31
+ /** This client's runtime — every component below was constructed with it. */
32
+ readonly runtime: RuntimeContext;
33
+ /** The component graph: registry, pool, bootstrap, database, sync client, hydration. */
34
+ readonly components: InternalComponents;
35
+ /** The store orchestrating the graph, holding the host-built connection. */
36
+ readonly store: BaseSyncedStore;
37
+ }
38
+ /**
39
+ * Builds the cluster from what the context carries, or returns `null` when
40
+ * it does not carry enough (no connection, no resolved url, no credential
41
+ * source, or no schema on the options bag) — the same tolerance the
42
+ * presence stream established: `init` constructs what the context can
43
+ * support and no more. The reactive factory always supplies all four and
44
+ * treats a missing cluster as a configuration fault.
45
+ */
46
+ export declare function buildStoreCluster(context: PluginContext<InternalAbloOptions>): StoreCluster | null;
@@ -0,0 +1,133 @@
1
+ /**
2
+ * The store cluster — what `humans()` constructs at `init` now that the
3
+ * plugin context carries the resolved url and the credential source
4
+ * (ADR 0016; docs/plans/package-split.md, sequence step 2): this client's
5
+ * runtime, the internal component graph, the registered model classes, and
6
+ * the `BaseSyncedStore` that orchestrates them. The engine consumes the
7
+ * cluster instead of constructing it; what remains in the composition root
8
+ * (credential lifecycle, ready(), model proxies, resources) migrates in
9
+ * later steps.
10
+ *
11
+ * The cluster rides the humans surface under {@link kStoreCluster}, a
12
+ * symbol: `layerPluginSurface` merges only string-keyed members onto the
13
+ * client, so the handoff never becomes public client API. When the plugin
14
+ * contract adopts context patches (the decoration end-state), this channel
15
+ * dissolves into them.
16
+ */
17
+ import { shouldUseInMemoryPersistence } from '../persistence.js';
18
+ import { noopObservability, browserOnlineStatus, defaultSessionErrorDetector, noopAnalytics, } from '../RuntimeContext.js';
19
+ import { initRuntime } from '../context.js';
20
+ import { alwaysOnline } from '../adapters/alwaysOnline.js';
21
+ import { BaseSyncedStore } from '../BaseSyncedStore.js';
22
+ import { SyncWebSocket } from '../sync/SyncWebSocket.js';
23
+ import { createInternalComponents, } from './createInternalComponents.js';
24
+ import { registerModelsFromSchema } from './modelRegistration.js';
25
+ import { deriveConfigFromSchema } from './schemaConfig.js';
26
+ import { createDefaultMutationExecutor } from './wsMutationExecutor.js';
27
+ /**
28
+ * The private handoff slot on the humans surface. Symbol-keyed on purpose:
29
+ * surface members merge onto the client by string key, and the cluster is
30
+ * construction machinery, not client API.
31
+ */
32
+ export const kStoreCluster = Symbol.for('ablo.humans.store-cluster');
33
+ /**
34
+ * The contract types the connection as the core `WsTransport`; on the
35
+ * reactive path the factory constructs the materialising subclass with the
36
+ * default collaboration vocabulary, and this guard is where that knowledge
37
+ * becomes a type. A connection that is not the subclass means the cluster
38
+ * cannot be built here.
39
+ */
40
+ function isReactiveSocket(transport) {
41
+ if (!transport || typeof transport !== 'object')
42
+ return false;
43
+ const candidate = transport;
44
+ return [
45
+ 'subscribe',
46
+ 'sendCollaborationEvent',
47
+ 'disconnect',
48
+ 'isConnected',
49
+ 'getSyncGroups',
50
+ 'setSyncGroups',
51
+ 'setLastSyncId',
52
+ 'getLastSyncId',
53
+ 'acknowledge',
54
+ 'allowConnect',
55
+ 'connect',
56
+ ].every((method) => typeof candidate[method] === 'function');
57
+ }
58
+ /**
59
+ * Builds the cluster from what the context carries, or returns `null` when
60
+ * it does not carry enough (no connection, no resolved url, no credential
61
+ * source, or no schema on the options bag) — the same tolerance the
62
+ * presence stream established: `init` constructs what the context can
63
+ * support and no more. The reactive factory always supplies all four and
64
+ * treats a missing cluster as a configuration fault.
65
+ */
66
+ export function buildStoreCluster(context) {
67
+ const options = context.options;
68
+ const { url, auth, transport, logger } = context;
69
+ if (!options?.schema || !url || !auth || !isReactiveSocket(transport)) {
70
+ return null;
71
+ }
72
+ const schema = options.schema;
73
+ // Config derives from the schema; caller-supplied overrides layer on top,
74
+ // caller winning per key.
75
+ const config = {
76
+ ...deriveConfigFromSchema(schema),
77
+ ...options.configOverrides,
78
+ };
79
+ // The default executor sends `{ type: 'commit', ... }` over the context's
80
+ // connection; before it opens, sends reject with the diagnosed not-ready
81
+ // error and the MutationQueue owns the retry. A caller-supplied executor
82
+ // still wins (test mocks, alternative transports).
83
+ const executor = options.mutationExecutor ?? createDefaultMutationExecutor(() => transport);
84
+ // This client's runtime — the instance the whole graph is constructed
85
+ // with, so two clients in one process never read each other's logger,
86
+ // config, or executor. `getModelMetadata` closes over this client's own
87
+ // registry (assigned once the graph exists below), never the
88
+ // active-registry global.
89
+ let registryForMetadata = undefined;
90
+ const runtime = {
91
+ logger,
92
+ observability: options.observability ?? noopObservability,
93
+ analytics: options.analytics ?? noopAnalytics,
94
+ sessionErrorDetector: options.sessionErrorDetector ?? defaultSessionErrorDetector,
95
+ onlineStatus: options.onlineStatus ??
96
+ (shouldUseInMemoryPersistence(options) ? alwaysOnline() : browserOnlineStatus),
97
+ config,
98
+ mutationExecutor: executor,
99
+ getModelMetadata: (name) => registryForMetadata?.getMetadata(name),
100
+ };
101
+ // The module-global bridge: code not yet constructed with an instance
102
+ // (model instances, the react hooks, the socket's context ports) still
103
+ // reads it. Last-writer-wins there, exactly as before the runtime became
104
+ // per-client. Retired reference by reference (docs/plans/package-split.md).
105
+ initRuntime(runtime);
106
+ const components = createInternalComponents({
107
+ schema,
108
+ url,
109
+ options,
110
+ auth,
111
+ runtime,
112
+ });
113
+ registryForMetadata = components.modelRegistry;
114
+ registerModelsFromSchema(schema, components.modelRegistry);
115
+ const store = new BaseSyncedStore({
116
+ syncClient: components.syncClient,
117
+ database: components.database,
118
+ objectPool: components.objectPool,
119
+ modelRegistry: components.modelRegistry,
120
+ syncWebSocket: transport,
121
+ schema,
122
+ url,
123
+ auth,
124
+ runtime,
125
+ // The resolved list, so the store's delta pipeline dispatches the
126
+ // declared stage handlers — including this plugin's own `apply`.
127
+ stagePlugins: context.plugins ?? [],
128
+ },
129
+ // Collaboration vocabulary is the application's: the SDK subscribes to
130
+ // the event types the caller declares and to nothing by default.
131
+ { collaborationEvents: options.collaborationEvents ?? [] });
132
+ return { runtime, components, store };
133
+ }
@@ -0,0 +1,61 @@
1
+ /**
2
+ * The materialiser's lifecycle: the first credential mint, identity
3
+ * resolution, the credential-refresh machinery, and the idempotent `ready()`
4
+ * that drives the store's initialize generator to completion. Extracted from
5
+ * the interactive composition root (docs/plans/package-split.md):
6
+ * the engine wires it with the prelude's credential slice and consumes
7
+ * `ready`; resolved identity flows back through one callback, so the
8
+ * engine-side state it seeds (the self locals, the streams) stays with the
9
+ * engine.
10
+ */
11
+ import type { SchemaRecord, Schema } from '@abloatai/transaction/schema/schema';
12
+ import type { ParticipantKind } from '@abloatai/transaction/types/participant';
13
+ import type { Logger } from '@abloatai/transaction/logger';
14
+ import type { AuthCredentialSource } from '@abloatai/transaction/auth/credentialSource';
15
+ import type { CredentialProvider } from '@abloatai/transaction/auth/apiKey';
16
+ import type { AbloError } from '@abloatai/transaction/errors';
17
+ import type { InternalAbloOptions } from './options.js';
18
+ import type { StoreCluster } from './storeCluster.js';
19
+ /** What identity resolution settled, handed back for the engine to seed. */
20
+ export interface IdentitySeed {
21
+ readonly userId: string;
22
+ readonly participantKind: ParticipantKind;
23
+ /** The resolved account scope; null until known. */
24
+ readonly accountScope: string | null;
25
+ readonly syncGroups: readonly string[];
26
+ }
27
+ export interface StoreLifecycle {
28
+ /**
29
+ * Drives initialization to completion: first mint, identity resolution,
30
+ * seeding, then the store's initialize generator. Idempotent — the first
31
+ * call starts it, later calls share the promise; a failed attempt clears
32
+ * the memo so retry triggers can re-bootstrap.
33
+ */
34
+ ready: () => Promise<void>;
35
+ /** Stops the credential refresh scheduler, if identity resolution installed one. */
36
+ dispose(): void;
37
+ }
38
+ export interface StoreLifecycleDeps<S extends SchemaRecord> {
39
+ readonly cluster: StoreCluster;
40
+ readonly schema: Schema<S>;
41
+ readonly internalOptions: InternalAbloOptions<S>;
42
+ readonly authCredentials: AuthCredentialSource;
43
+ readonly credentialResolver: CredentialProvider | null;
44
+ readonly configuredApiKey: string | CredentialProvider | null;
45
+ readonly configuredAuthToken: string | null;
46
+ readonly url: string;
47
+ readonly kind: ParticipantKind;
48
+ readonly logger: Logger;
49
+ /** The engine's up-front options validation; a present error makes `ready()` reject with it. */
50
+ readonly validationError: AbloError | null;
51
+ /** Seeds resolved identity into the engine's own state: the self locals and the streams. */
52
+ readonly onIdentityResolved: (seed: IdentitySeed) => void;
53
+ }
54
+ /**
55
+ * Wires the credential machinery onto the cluster and returns the `ready`
56
+ * the client exposes. Wiring happens now — the refresh lifecycle, the
57
+ * lazy-query auth recovery, the executor binding, and the opt-in auto-start;
58
+ * the first mint waits for `ready()` so the first connection carries a
59
+ * token.
60
+ */
61
+ export declare function startStoreLifecycle<S extends SchemaRecord>(deps: StoreLifecycleDeps<S>): StoreLifecycle;