@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,322 @@
1
+ /**
2
+ * The local persistence layer for synced models. It stores rows in the
3
+ * browser's IndexedDB (or in-memory maps when run headlessly), applies inbound
4
+ * deltas to that store, and fetches the bootstrap snapshot from your sync
5
+ * server. {@link BaseSyncedStore} drives it, and {@link InstanceCache} holds the
6
+ * in-memory mirror of what this class persists.
7
+ */
8
+ import { type DatabaseInfo, type WorkspaceMetadata } from './stores/DatabaseManager.js';
9
+ import type { PersistenceIdentity } from './stores/persistenceIdentity.js';
10
+ import { ModelRegistry } from './ModelRegistry.js';
11
+ import { LoadStrategy } from '@abloatai/transaction/types';
12
+ import type { RuntimeContext } from './RuntimeContext.js';
13
+ import type { AppliedChange } from '../plugin.js';
14
+ import type { BootstrapFetcher, BootstrapData } from './sync/BootstrapFetcher.js';
15
+ import { InMemoryObjectStore } from './adapters/inMemoryStorage.js';
16
+ import type { SyncDeltaAction } from '@abloatai/transaction/wire/delta';
17
+ import type { OnStaleMode } from '@abloatai/transaction/coordination/schema';
18
+ import type { BootstrapType } from '@abloatai/transaction/types';
19
+ /** Generic record type for model data */
20
+ type ModelData = Record<string, unknown>;
21
+ /** Persisted mutation in a transaction */
22
+ interface PersistedMutation {
23
+ type: 'create' | 'update' | 'delete' | 'archive';
24
+ modelData: ModelData;
25
+ modelName: string;
26
+ timestamp: string;
27
+ writeOptions?: {
28
+ readAt?: number | null;
29
+ onStale?: OnStaleMode | null;
30
+ };
31
+ }
32
+ /** Persisted transaction for offline/retry support.
33
+ *
34
+ * Index signature is part of the contract: this interface targets
35
+ * the generic record-shaped storage layer (`InMemoryObjectStore.put`
36
+ * + the IDB ObjectStore equivalent), both of which take
37
+ * `Record<string, unknown>`. Every declared field below already
38
+ * satisfies `unknown`; the index signature just makes the
39
+ * interface assignable to the storage parameter without a cast. */
40
+ interface PersistedTransaction {
41
+ id: string;
42
+ type?: string;
43
+ timestamp?: number;
44
+ createdAt?: number;
45
+ mutations?: PersistedMutation[];
46
+ awaitingDelta?: {
47
+ syncIdNeeded: number;
48
+ modelName: string;
49
+ modelId: string;
50
+ operationType: string;
51
+ };
52
+ [key: string]: unknown;
53
+ }
54
+ export type { BootstrapType };
55
+ export interface BootstrapRequirements {
56
+ type: BootstrapType;
57
+ modelsToLoad: string[];
58
+ lastSyncId: number;
59
+ syncGroups: string[];
60
+ }
61
+ export interface BootstrapResult {
62
+ modelsLoaded: number;
63
+ modelsStored: number;
64
+ /** The raw bootstrap response — callers can apply models directly to InstanceCache */
65
+ bootstrapData: BootstrapData;
66
+ /**
67
+ * Results of applying partial-bootstrap deltas to IDB. Present only when
68
+ * `bootstrapData.type === 'partial'` and deltas were processed. Callers
69
+ * forward these to `syncClient.applyDeltaBatchToPool` so the in-memory
70
+ * pool reflects inserts/updates/deletes that arrived while the client
71
+ * was disconnected — without this, DELETE deltas persist to IDB but
72
+ * ghost entities linger in the pool until a full reload.
73
+ */
74
+ deltaResults?: AppliedChange[];
75
+ }
76
+ export declare class Database {
77
+ private databaseManager;
78
+ private storeManager;
79
+ private modelRegistry;
80
+ private bootstrapHelper;
81
+ /** The pre-configured query helper for lazy-loading data from the sync server. */
82
+ get helper(): BootstrapFetcher;
83
+ /**
84
+ * Fetch the current rows of the given sync groups as a side-effect-free
85
+ * snapshot, used to hydrate a scope as the user enters it. Unlike
86
+ * {@link bootstrapFromServer}, it does not persist to IndexedDB and does not
87
+ * change the connection's subscribed sync groups. The caller applies the
88
+ * result to the pool through the scoped apply path.
89
+ */
90
+ fetchScopedBootstrapData(syncGroups: readonly string[]): Promise<BootstrapData>;
91
+ private currentDbInfo;
92
+ private workspaceDb;
93
+ /**
94
+ * Flag to track if database is closing/closed.
95
+ * Used for graceful degradation when operations are attempted during shutdown.
96
+ */
97
+ private isClosing;
98
+ /**
99
+ * When set, forces the next requiredBootstrap() call to return 'full' even if offline.
100
+ * Used when a sync group change delta is received — we must re-bootstrap to purge
101
+ * revoked data, even if the device is currently offline (it will bootstrap when online).
102
+ */
103
+ private _forceFullBootstrap;
104
+ /** Essential fields that must be preserved during partial UPDATE merges.
105
+ * Sourced from SyncEngineConfig.essentialFields — consumers define their own. */
106
+ private get essentialFields();
107
+ /**
108
+ * When true, all IndexedDB operations are replaced with in-memory Maps.
109
+ * Enables the SDK to run headlessly in Node.js / agent workers / tests
110
+ * without requiring a browser environment.
111
+ *
112
+ * Set via createSyncEngine({ storage: inMemoryStorage() }) or directly:
113
+ * new Database(registry, bootstrap, { inMemory: true })
114
+ */
115
+ private readonly inMemory;
116
+ private readonly runtime;
117
+ /** In-memory stores used when inMemory=true. Keyed by model name. */
118
+ private inMemoryStores;
119
+ /** In-memory workspace metadata when inMemory=true. */
120
+ private inMemoryMetadata;
121
+ constructor(modelRegistry: ModelRegistry, bootstrapHelper: BootstrapFetcher, options?: {
122
+ inMemory?: boolean;
123
+ runtime?: RuntimeContext;
124
+ });
125
+ /**
126
+ * Get store for a model, or `undefined` if no store exists.
127
+ *
128
+ * Routes to `inMemoryStores` in inMemory mode and `storeManager`
129
+ * otherwise. Both implementations satisfy `ObjectStoreContract`, so
130
+ * callers don't branch on which one they got back.
131
+ *
132
+ * Pass `context` to emit an observability breadcrumb when the store
133
+ * is missing — useful for hot paths (bootstrap, delta apply, hydrate)
134
+ * where a missing store points to silent data loss. Callers that
135
+ * already expect optional behavior (e.g. lazy lookups) can omit it.
136
+ */
137
+ getStore(modelName: string, context?: string): import("./stores/ObjectStore.js").ObjectStore | InMemoryObjectStore | undefined;
138
+ /** Get store or throw if not found (for operations that require the store). */
139
+ private getRequiredStore;
140
+ /** Log preserved fields during partial UPDATE merge (debug helper) */
141
+ private logPreservedFields;
142
+ open(identity: PersistenceIdentity, version?: number): Promise<void>;
143
+ /**
144
+ * Shrink a record before persisting it. Drops `undefined` fields, empty
145
+ * arrays, empty objects, and the redundant markers `__typename`, `__class`,
146
+ * `clientId`, and `syncStatus`. Explicit `null` values are preserved, since
147
+ * a null is a meaningful "clear this field" in a nullable column.
148
+ *
149
+ * By design this receives plain objects, never live observables: WebSocket
150
+ * deltas arrive already parsed, optimistic updates come through `toJSON()`,
151
+ * and bootstrap data is plain JSON from the server.
152
+ */
153
+ private compactRecord;
154
+ /**
155
+ * Mark that the next bootstrap must be a full bootstrap.
156
+ * Called when a sync group change ("G" delta) is received — the client must
157
+ * re-fetch all data from the server to purge models from revoked sync groups.
158
+ */
159
+ markRequiresFullBootstrap(): void;
160
+ /**
161
+ * Smart bootstrap requirements based on data freshness
162
+ */
163
+ requiredBootstrap(): Promise<BootstrapRequirements>;
164
+ /**
165
+ * Fetch a bootstrap snapshot (or delta batch) from the sync server and load
166
+ * it into the local store, then return a {@link BootstrapResult} the caller
167
+ * applies to the {@link InstanceCache}.
168
+ */
169
+ bootstrapFromServer(requirements: BootstrapRequirements,
170
+ /** Full sync-group subscription list — what the WS subscribes to
171
+ * AND what gets persisted as `subscribedSyncGroups` for the
172
+ * shrinkage check. Caller supplies the complete list, not just
173
+ * team-derived groups. */
174
+ syncGroups: readonly string[], onProgress?: (loaded: number) => void): Promise<BootstrapResult>;
175
+ /**
176
+ * Apply a single inbound delta from the WebSocket to the local store.
177
+ *
178
+ * This handles one delta at a time. To apply several, prefer
179
+ * {@link processDeltaBatch}, which commits them in one IndexedDB transaction
180
+ * rather than two transactions per delta.
181
+ *
182
+ * Update deltas carry only the changed fields, so they are merged onto the
183
+ * existing record rather than replacing it. That preserves fields the delta
184
+ * omits (such as reportId or title), and an explicit null is kept as a value,
185
+ * clearing that field.
186
+ */
187
+ processDelta(delta: {
188
+ syncId?: number;
189
+ /**
190
+ * Includes 'G' and 'S' defensively — those are routed upstream by
191
+ * BaseSyncedStore.processDeltaWithBatching and should not reach here,
192
+ * but the switch returns a no-op verify if one slips through (e.g.
193
+ * replayed from the bootstrap queue) rather than crashing the engine.
194
+ */
195
+ actionType: SyncDeltaAction;
196
+ modelName: string;
197
+ modelId: string;
198
+ data: ModelData | null;
199
+ }, options?: {
200
+ updateCursor?: boolean;
201
+ }): Promise<AppliedChange>;
202
+ /**
203
+ * Apply many deltas to the local store in as few IndexedDB transactions as
204
+ * possible. Deltas are grouped by store, and each store's writes commit in a
205
+ * single transaction, so a batch of 186 deltas becomes roughly one
206
+ * transaction per store instead of two per delta.
207
+ *
208
+ * The method reads the existing records for update deltas up front, then
209
+ * merges each update onto its existing record so fields the delta omits are
210
+ * preserved and an explicit null still clears its field. It advances the
211
+ * persisted sync cursor once, to the highest committed sync id.
212
+ *
213
+ * Conflict resolution follows a delete-wins rule: it first indexes the
214
+ * delete deltas by entity, then skips any insert or update whose sync id is
215
+ * at or below a delete for the same entity. This avoids resurrecting a
216
+ * deleted entity and avoids fetching one that no longer exists.
217
+ */
218
+ processDeltaBatch(deltas: {
219
+ syncId?: number;
220
+ /**
221
+ * Includes 'G' and 'S' defensively — they're routed upstream and
222
+ * shouldn't reach batch processing, but the switch inside returns
223
+ * no-op verify for them if one slips through.
224
+ */
225
+ actionType: SyncDeltaAction;
226
+ modelName: string;
227
+ modelId: string;
228
+ data: ModelData | null;
229
+ /**
230
+ * Server-stamped transaction id from the originating client's
231
+ * commit op. Threaded through to the result so the receive
232
+ * pipeline can recognize echoes of the local client's own
233
+ * mutations and skip the pool mutation in
234
+ * `SyncClient.applyDeltaBatchToPool`. Optional because system-
235
+ * emitted deltas (sync_group changes, schema-derived ops) don't
236
+ * have a client transaction.
237
+ */
238
+ transactionId?: string;
239
+ }[]): Promise<{
240
+ results: AppliedChange[];
241
+ /**
242
+ * Highest syncId whose IDB store transaction actually committed in this
243
+ * batch. The runtime delta cursor (WS `lastSyncId`, server-side
244
+ * `lastAckedSyncId`) must only advance to this value — not the input
245
+ * batch's range max — or it diverges from the persisted view and the
246
+ * next catch-up request skips the un-persisted gap forever. Mirrors
247
+ * the metadata-cursor invariant at `updateWorkspaceMetadata` below.
248
+ * 0 when nothing persisted.
249
+ */
250
+ persistedSyncId: number;
251
+ }>;
252
+ /** Get raw data for hydration */
253
+ hydrateModels(modelName: string): Promise<ModelData[]>;
254
+ /** Put a single record to IndexedDB (for self-healing corrupted records) */
255
+ putRecord(modelName: string, id: string, data: Record<string, unknown>): Promise<void>;
256
+ /** Get data by index. `value` is an IDB key — string, number, Date,
257
+ * BufferSource, or array thereof. */
258
+ getDataByIndex(modelName: string, indexName: string, value: IDBValidKey): Promise<ModelData[]>;
259
+ /** Read workspace metadata from IndexedDB. Returns null when the database is not open. */
260
+ getWorkspaceMetadata(): Promise<WorkspaceMetadata | null>;
261
+ getLastSyncId(): Promise<number>;
262
+ updateWorkspaceMetadata(metadata: Partial<WorkspaceMetadata>): Promise<void>;
263
+ /** Transaction persistence for offline/retry support.
264
+ * Returns either the IDB-backed ObjectStore or its in-memory twin
265
+ * (`InMemoryObjectStore`) — both expose the same async put/get/
266
+ * delete/getAll/getAllFromIndex surface, so callers don't need to
267
+ * branch on which one they got back. */
268
+ private get transactionStore();
269
+ saveTransaction(transaction: PersistedTransaction): Promise<void>;
270
+ /** Persist one burst of journal rows in a single strict durability group. */
271
+ saveTransactions(transactions: readonly PersistedTransaction[]): Promise<void>;
272
+ removeTransaction(id: string): Promise<void>;
273
+ getPersistedTransactions(): Promise<PersistedTransaction[]>;
274
+ getPersistedTransaction(id: string): Promise<PersistedTransaction | undefined>;
275
+ /**
276
+ * Atomically seal one exact commit request and consume the staged mutation
277
+ * records it replaces. The read, optional add, and deletes share one strict
278
+ * IndexedDB transaction, so a crash can expose the staged records or the
279
+ * sealed envelope, never a missing handoff. Returns the pre-existing record
280
+ * when the envelope id was already sealed (retry/re-entrant call).
281
+ */
282
+ sealTransactionRecord(record: PersistedTransaction, consumedRecordIds: readonly string[]): Promise<PersistedTransaction | undefined>;
283
+ cleanupOldTransactions(maxAge: number): Promise<number>;
284
+ /**
285
+ * Store management
286
+ *
287
+ * `getStore(modelName, context?)` is defined near the top of this
288
+ * class — single accessor for both inMemory and IDB modes.
289
+ */
290
+ getAllStores(): Map<string, import("./stores/ObjectStore.js").ObjectStore> | Map<string, InMemoryObjectStore>;
291
+ /**
292
+ * Model persistence tracking
293
+ */
294
+ setModelPersisted(modelName: string, persisted: boolean): Promise<void>;
295
+ isModelPersisted(modelName: string): Promise<boolean>;
296
+ getStats(): Promise<{
297
+ database: DatabaseInfo | null;
298
+ stores: {
299
+ totalStores: number;
300
+ readiness: {
301
+ ready: number;
302
+ notReady: number;
303
+ };
304
+ totalRecords: number;
305
+ storeDetails: {
306
+ modelName: string;
307
+ storeName: string;
308
+ strategy: LoadStrategy;
309
+ ready: boolean;
310
+ count: number;
311
+ }[];
312
+ };
313
+ metadata: WorkspaceMetadata | null;
314
+ }>;
315
+ isOpen(): boolean;
316
+ close(): Promise<void>;
317
+ /** Delegate authenticated local-state teardown to the persistence owner. */
318
+ purgePersistence(): Promise<void>;
319
+ clear(options?: {
320
+ includeWriteJournal?: boolean;
321
+ }): Promise<void>;
322
+ }