@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,130 @@
1
+ /**
2
+ * Applies a bootstrap result to the in-memory object pool. When a client
3
+ * connects, the server sends either a full snapshot of the models it can see or
4
+ * a partial catch-up of the deltas it missed. These functions route that result
5
+ * into the pool, protect entities that arrived mid-bootstrap from being swept
6
+ * away as stale, and replay any deltas that queued while the bootstrap was in
7
+ * flight.
8
+ *
9
+ * The functions here reach their host store only through the small
10
+ * {@link PoolContext} interface, not the store's concrete class, so the two can
11
+ * reference each other without forming an import cycle. The pool writes
12
+ * themselves — creating models, healing partial rows, upserting, and removing
13
+ * stale local copies the server no longer reports — are performed by the sync
14
+ * client behind that interface.
15
+ */
16
+
17
+ import { globalRuntime } from '../context.js';
18
+ import type { RuntimeContext } from '../RuntimeContext.js';
19
+ import type { BootstrapResult } from '../Database.js';
20
+ import type { SyncDelta } from './SyncWebSocket.js';
21
+
22
+ /** Counts describing what applying a bootstrap changed in the pool: entities
23
+ * added, updated, removed, skipped, and healed, plus the elapsed time. */
24
+ export interface RehydrationStats {
25
+ added: number;
26
+ updated: number;
27
+ removed: number;
28
+ skipped: number;
29
+ healed: number;
30
+ elapsedMs: number;
31
+ }
32
+
33
+ /**
34
+ * The methods the bootstrap-apply functions call back into on the host store.
35
+ * The two data-application methods arrive with relation enrichment already
36
+ * bound by the host, so a subclass override of how relations are enriched still
37
+ * takes effect through this interface.
38
+ */
39
+ export interface PoolContext {
40
+ /** The owning client's runtime. Defaults to the module-global bridge. */
41
+ readonly runtime?: RuntimeContext;
42
+ /** Applies persisted delta results to the in-memory pool, with the host's relation enrichment bound. */
43
+ applyDeltaBatchToPool(results: NonNullable<BootstrapResult['deltaResults']>): void;
44
+ /** Writes bootstrap data into the pool: creates models, heals partial rows, upserts, and removes stale local copies the server no longer reports. */
45
+ applyBootstrapDataToPool(
46
+ bootstrapData: { models?: Record<string, unknown[]>; failedModels?: string[] },
47
+ protectedIds?: ReadonlySet<string>,
48
+ ): { added: number; updated: number; removed: number; skipped: number; healed: number };
49
+ /** Pool size — for the completion log line. */
50
+ getPoolSize(): number;
51
+ /** Every id currently in the pool, used to work out which entities must survive the stale-sweep (see {@link collectDeltaProtectedIds}). */
52
+ getAllPoolIds(): string[];
53
+ /** Deltas that queued while a bootstrap was in flight; null when no bootstrap
54
+ * is running. The host backs this with a field exposed through accessors. */
55
+ bootstrapDeltaQueue: SyncDelta[] | null;
56
+ /** Applies a complete set of deltas to the pool atomically — one write, one
57
+ * re-render. This entry point lives on the host, not in this module. */
58
+ applyDeltaFrame(deltas: SyncDelta[]): void;
59
+ }
60
+
61
+ /**
62
+ * Applies a bootstrap result to the in-memory pool and returns what changed.
63
+ * A full bootstrap creates, heals, and upserts models and removes stale local
64
+ * copies the server no longer reports; a partial bootstrap routes the missed
65
+ * deltas through the delta-apply path so deletions evict their entities. See
66
+ * {@link RehydrationStats} for the returned counts.
67
+ */
68
+ export function applyBootstrapToPool(
69
+ ctx: PoolContext,
70
+ bootstrapResult: BootstrapResult,
71
+ protectedIds?: ReadonlySet<string>,
72
+ ): RehydrationStats {
73
+ const { bootstrapData } = bootstrapResult;
74
+
75
+ // Partial bootstrap: the missed deltas are already written to the local
76
+ // store. Route the same results through the delta-apply path so the
77
+ // in-memory pool also evicts deleted entities and updates modified ones.
78
+ // Without this, a reconnect delete persists locally but its stale copy
79
+ // lingers in the pool until a full reload.
80
+ if (bootstrapData.type === 'partial') {
81
+ const deltaResults = bootstrapResult.deltaResults;
82
+ if (deltaResults && deltaResults.length > 0) {
83
+ ctx.applyDeltaBatchToPool(deltaResults);
84
+ }
85
+ return { added: 0, updated: 0, removed: 0, skipped: 0, healed: 0, elapsedMs: 0 };
86
+ }
87
+
88
+ if (!bootstrapData.models) {
89
+ return { added: 0, updated: 0, removed: 0, skipped: 0, healed: 0, elapsedMs: 0 };
90
+ }
91
+
92
+ const start = typeof performance !== 'undefined' ? performance.now() : Date.now();
93
+
94
+ // Creates models, heals partial rows, upserts, and removes stale local copies.
95
+ const stats = ctx.applyBootstrapDataToPool(bootstrapData, protectedIds);
96
+
97
+ const elapsedMs = Math.round((typeof performance !== 'undefined' ? performance.now() : Date.now()) - start);
98
+
99
+ (ctx.runtime ?? globalRuntime).logger.info('[BaseSyncedStore] Bootstrap applied', {
100
+ ...stats, elapsedMs, poolSize: ctx.getPoolSize(),
101
+ });
102
+
103
+ return { ...stats, elapsedMs };
104
+ }
105
+
106
+ /** Collects the ids that must survive the post-bootstrap stale-sweep: entities added by deltas that arrived while the bootstrap was in flight. */
107
+ export function collectDeltaProtectedIds(
108
+ ctx: PoolContext,
109
+ preBootstrapIds: ReadonlySet<string>,
110
+ ): Set<string> {
111
+ const protectedIds = new Set<string>();
112
+ for (const id of ctx.getAllPoolIds()) {
113
+ if (!preBootstrapIds.has(id)) protectedIds.add(id);
114
+ }
115
+ for (const delta of ctx.bootstrapDeltaQueue ?? []) {
116
+ if (delta.actionType !== 'D' && delta.modelId) protectedIds.add(delta.modelId);
117
+ }
118
+ return protectedIds;
119
+ }
120
+
121
+ /** Replays the deltas that queued while a bootstrap was in flight, applying them as one atomic frame. */
122
+ export function replayQueuedDeltas(ctx: PoolContext): void {
123
+ const queue = ctx.bootstrapDeltaQueue;
124
+ ctx.bootstrapDeltaQueue = null;
125
+ if (!queue || queue.length === 0) return;
126
+ // Deltas that landed during bootstrap are a complete frame — apply
127
+ // them atomically (one flush, one re-render) rather than dribbling
128
+ // each back through the live debounce path.
129
+ ctx.applyDeltaFrame(queue);
130
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Moved to the settlement core with the duplex transport (ADR 0016): the
3
+ * commit-path frame builders are stateless wire helpers. This path re-exports
4
+ * them so existing importers stay unchanged. The core's `buildCommitFrame`
5
+ * takes the structural `CommitFrameOperation` slice, which this package's
6
+ * `MutationOperation` satisfies.
7
+ */
8
+
9
+ export {
10
+ buildCommitFrame,
11
+ parseNotifications,
12
+ recordClaim,
13
+ type CommitAck,
14
+ type CommitFrameOperation,
15
+ type ClaimTracePorts,
16
+ } from '@abloatai/transaction/transport/commitFrames';
@@ -0,0 +1,158 @@
1
+ import { AbloSessionError } from '@abloatai/transaction/errors';
2
+ import type { ParticipantKind } from '@abloatai/transaction/types/participant';
3
+ import { ConnectionManager } from './ConnectionManager.js';
4
+ import type { DefaultCollaborationEvents, EventMap, SyncWebSocket } from './SyncWebSocket.js';
5
+ import type { SyncStatus } from '../storeContract.js';
6
+ import type { AuthCredentialSource } from '@abloatai/transaction/auth/credentialSource';
7
+ import type { RuntimeContext } from '../RuntimeContext.js';
8
+ import { contextLogger, contextSocketObservability } from './contextPorts.js';
9
+
10
+ export interface ConnectionManagerHost<
11
+ TCollaboration extends EventMap<TCollaboration> = DefaultCollaborationEvents,
12
+ > {
13
+ connectionManager: ConnectionManager | null;
14
+ onConnectionEvent?: (event: string) => void;
15
+ syncWebSocket: SyncWebSocket<TCollaboration>;
16
+ syncStatus: SyncStatus;
17
+ createConnectionManager(kind?: ParticipantKind): ConnectionManager | null;
18
+ performReconnect(): Promise<'success' | 'session_error' | 'network_error'>;
19
+ performCredentialRefresh(): Promise<'refreshed' | 'session_error' | 'network_error'>;
20
+ handleTerminalSessionError(error: Error): void;
21
+ updateSyncStatus(updates: Partial<SyncStatus>): void;
22
+ syncServerUrl?: string;
23
+ auth?: AuthCredentialSource;
24
+ runtime: RuntimeContext;
25
+ }
26
+
27
+ export function createConnectionManager<TCollaboration extends EventMap<TCollaboration>>(
28
+ host: Pick<ConnectionManagerHost<TCollaboration>, 'syncServerUrl' | 'auth' | 'syncWebSocket'>,
29
+ kind?: ParticipantKind,
30
+ ): ConnectionManager | null {
31
+ if (kind === 'agent') return null;
32
+ return new ConnectionManager({
33
+ baseUrl: host.syncServerUrl,
34
+ getAuthToken: () => host.auth?.getAuthToken() ?? host.syncWebSocket.getAuthToken() ?? null,
35
+ logger: contextLogger,
36
+ observability: contextSocketObservability,
37
+ });
38
+ }
39
+
40
+ export async function waitForWebSocketConnected<TCollaboration extends EventMap<TCollaboration>>(
41
+ host: Pick<ConnectionManagerHost<TCollaboration>, 'syncWebSocket' | 'runtime'>,
42
+ timeoutMs: number,
43
+ ): Promise<boolean> {
44
+ const ws = host.syncWebSocket;
45
+ if (ws.isConnected()) return true;
46
+ return new Promise<boolean>((resolve) => {
47
+ let resolved = false;
48
+ const unsubscribe = ws.subscribe('connected', () => {
49
+ if (resolved) return;
50
+ resolved = true;
51
+ unsubscribe();
52
+ clearTimeout(timer);
53
+ resolve(true);
54
+ });
55
+ const timer = setTimeout(() => {
56
+ if (resolved) return;
57
+ resolved = true;
58
+ unsubscribe();
59
+ host.runtime.logger.debug(
60
+ `[BaseSyncedStore] waitForWebSocketConnected timed out after ${timeoutMs}ms — initialize() will return but the next mutation may race the upgrade.`,
61
+ );
62
+ resolve(false);
63
+ }, timeoutMs);
64
+ });
65
+ }
66
+
67
+ export function startConnectionManager<TCollaboration extends EventMap<TCollaboration>>(
68
+ host: ConnectionManagerHost<TCollaboration>,
69
+ kind?: ParticipantKind,
70
+ ): void {
71
+ host.connectionManager = host.createConnectionManager(kind);
72
+ if (host.connectionManager) {
73
+ const manager = host.connectionManager;
74
+ // Preserve any externally-set onConnectionEvent — chain rather
75
+ // than overwrite, so subclasses that wire a secondary consumer
76
+ // still receive events.
77
+ const priorHook = host.onConnectionEvent;
78
+ host.onConnectionEvent = (event: string) => {
79
+ try { priorHook?.(event); } catch { /* don't let subclass crash the FSM */ }
80
+ switch (event) {
81
+ case 'WS_CONNECTED':
82
+ manager.send({ type: 'WS_CONNECTED' });
83
+ break;
84
+ case 'WS_DISCONNECTED':
85
+ manager.send({ type: 'WS_DISCONNECTED' });
86
+ break;
87
+ case 'WS_SESSION_ERROR':
88
+ manager.send({ type: 'WS_SESSION_ERROR' });
89
+ break;
90
+ case 'WS_HANDSHAKE_FAILED':
91
+ manager.send({ type: 'WS_HANDSHAKE_FAILED' });
92
+ break;
93
+ }
94
+ };
95
+
96
+ manager.start({
97
+ onReconnect: () => host.performReconnect(),
98
+ onRefreshCredential: () => host.performCredentialRefresh(),
99
+ onSessionExpired: () => {
100
+ const err = new AbloSessionError('Session expired');
101
+ host.handleTerminalSessionError(err);
102
+ },
103
+ onDisconnectWebSocket: () => {
104
+ host.syncWebSocket.disconnect();
105
+ },
106
+ // Mirror FSM transitions into the visible `syncStatus.state` so
107
+ // the UI can show "Reconnecting…" while the FSM cycles through
108
+ // probing / reconnecting / backoff. Previously these states
109
+ // were opaque to the UI, leaving the sidebar pinned to
110
+ // "offline" for the entire recovery window — exactly the
111
+ // confusing UX the warning log was trying to surface.
112
+ //
113
+ // We only override `state` here; `error` / `progress` / etc.
114
+ // continue to be set by the WebSocket subscription handlers
115
+ // and bootstrap pipeline, which know more than the FSM does.
116
+ onStateChange: (next) => {
117
+ switch (next) {
118
+ case 'connected':
119
+ // Don't clobber an in-flight 'syncing' / 'idle' update
120
+ // that the bootstrap pipeline might be midway through —
121
+ // those handlers run their own `updateSyncStatus`. Only
122
+ // promote out of an offline / reconnecting / error label.
123
+ if (
124
+ host.syncStatus.state === 'offline' ||
125
+ host.syncStatus.state === 'reconnecting' ||
126
+ host.syncStatus.state === 'error'
127
+ ) {
128
+ host.updateSyncStatus({ state: 'idle', offlineSince: undefined });
129
+ }
130
+ break;
131
+ case 'probing_network':
132
+ case 'refreshing_credential':
133
+ case 'reconnecting':
134
+ case 'backoff':
135
+ // Active recovery — the UI should reflect that the FSM
136
+ // is doing work, not that we've given up. (Re-minting a stale
137
+ // access key is just another recovery step, surfaced the same
138
+ // way; the user never sees a credential-level distinction.)
139
+ if (host.syncStatus.state !== 'reconnecting') {
140
+ host.updateSyncStatus({ state: 'reconnecting' });
141
+ }
142
+ break;
143
+ case 'waiting_for_network':
144
+ case 'offline':
145
+ if (host.syncStatus.state !== 'offline') {
146
+ host.updateSyncStatus({
147
+ state: 'offline',
148
+ offlineSince: host.syncStatus.offlineSince ?? new Date(),
149
+ });
150
+ }
151
+ break;
152
+ // 'session_expired' / 'validating_session' are handled by
153
+ // the existing session-error / WS subscription paths.
154
+ }
155
+ },
156
+ });
157
+ }
158
+ }
@@ -0,0 +1,37 @@
1
+ /**
2
+ * The runtime context, sliced into the ports the settlement core's transport
3
+ * takes. The core is injected, never service-located (ADR 0016), while this
4
+ * package resolves its shared dependencies through `getContext()` — so these
5
+ * adapters bridge the two: each method reads the context at call time, which
6
+ * preserves the lazy semantics of `getContext()` (a context installed after
7
+ * construction is still picked up, and the pre-init fallback still applies).
8
+ */
9
+
10
+ import { getContext } from '../context.js';
11
+ import type { Logger } from '@abloatai/transaction/logger';
12
+ import type { SocketObservability } from '@abloatai/transaction/observability';
13
+
14
+ /** The context's logger, resolved at call time. */
15
+ export const contextLogger: Logger = {
16
+ debug: (message, ...args) => { getContext().logger.debug(message, ...args); },
17
+ info: (message, ...args) => { getContext().logger.info(message, ...args); },
18
+ warn: (message, ...args) => { getContext().logger.warn(message, ...args); },
19
+ error: (message, ...args) => { getContext().logger.error(message, ...args); },
20
+ };
21
+
22
+ /** The context's observability, resolved at call time, in the transport's shape. */
23
+ export const contextSocketObservability: SocketObservability = {
24
+ breadcrumb: (message, category, level, data) => {
25
+ getContext().observability.breadcrumb(message, category, level, data);
26
+ },
27
+ captureWebSocketError: (details) => {
28
+ getContext().observability.captureWebSocketError(details);
29
+ },
30
+ captureClaim: (event) => { getContext().observability.captureClaim(event); },
31
+ captureConflict: (event) => { getContext().observability.captureConflict(event); },
32
+ };
33
+
34
+ /** The context's online-status provider, resolved at call time. */
35
+ export const contextOnlineStatus = {
36
+ isOnline: (): boolean => getContext().onlineStatus.isOnline(),
37
+ };