@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,85 @@
1
+ /**
2
+ * Structured query types for the `/sync/query` endpoint.
3
+ *
4
+ * A query describes a filtered read in a compact wire format. `where` is a flat
5
+ * list of `[column, operator, value]` conditions combined with AND, and
6
+ * `related` names the schema relations to fetch alongside each row. The server
7
+ * compiles a query against your schema: it reads the model's relation metadata
8
+ * to turn `related: ['blocks']` into the right join, and turns each condition
9
+ * into a WHERE fragment. The protocol carries no model-specific logic, so
10
+ * adding a model or relation is a schema change rather than a server change.
11
+ *
12
+ * The `IN` operator lets you batch a read by any column, including a foreign
13
+ * key — for example, fetching every block whose `sectionId` falls in a set of
14
+ * ids.
15
+ */
16
+ export type { WherePrimitive, WhereOp, WhereClause, LoadWhere, } from '@abloatai/transaction/resources/where';
17
+ import type { WhereClause } from '@abloatai/transaction/resources/where';
18
+ /** A single structured fetch request. */
19
+ export interface Query {
20
+ /**
21
+ * Client-facing model name (e.g. "File", "Block", "Message").
22
+ * The server's adapter maps this to the actual database table.
23
+ */
24
+ model: string;
25
+ /**
26
+ * The conditions to filter by, combined with AND. Empty or omitted returns
27
+ * every row the caller may see; reads are still scoped to the caller's
28
+ * organization on the server. Use `['col', 'IN', values]` to batch a read by
29
+ * any column.
30
+ */
31
+ where?: readonly WhereClause[];
32
+ /**
33
+ * The relations to fetch with each row, named as they are declared on this
34
+ * model in the schema. The server resolves each name from the schema's
35
+ * relation metadata and joins the related rows in. They come back nested
36
+ * under the relation key:
37
+ *
38
+ * { __typename: 'Section', id: '…', blocks: [{ __typename: 'Block', … }] }
39
+ */
40
+ related?: readonly string[];
41
+ /**
42
+ * Row limit. Applied after where + JOIN, before related nesting.
43
+ * Omit for no limit.
44
+ */
45
+ limit?: number;
46
+ /**
47
+ * Column to order by. For stable pagination. Omit for unordered.
48
+ */
49
+ orderBy?: string;
50
+ /** Order direction. Defaults to `'asc'`. */
51
+ order?: 'asc' | 'desc';
52
+ }
53
+ /** Request body for POST /sync/query. */
54
+ export interface QueryBatch {
55
+ /**
56
+ * Batch of queries to execute in one round trip. Results are
57
+ * returned in request order at the same indices. Keep batches
58
+ * small — the server caps at 16 queries per batch by default.
59
+ */
60
+ queries: Query[];
61
+ }
62
+ /** Response body from POST /sync/query. */
63
+ export interface QueryBatchResult {
64
+ /**
65
+ * The result of each query, in request order: `results[i]` corresponds to
66
+ * `queries[i]`. Each element is an array of rows, or an object bundling
67
+ * several named row collections when the source returns more than one. Every
68
+ * row carries a `__typename` field naming its model, so callers can dispatch
69
+ * on it, along with any requested `related` rows nested under their relation
70
+ * key.
71
+ *
72
+ * A query that fails on the server comes back as an empty array, which is
73
+ * indistinguishable from a query that simply matched nothing — treat an empty
74
+ * result as "no rows", not as proof the query succeeded. The element type is
75
+ * `unknown` because one batch can mix row shapes, so narrow each result
76
+ * before use.
77
+ */
78
+ results: unknown[];
79
+ /**
80
+ * The server watermark observed after the batch ran. Model reads expose this
81
+ * as `stamp`, and callers thread it into `commits.create({ readAt })` so the
82
+ * server can reject a write built on stale data.
83
+ */
84
+ lastSyncId?: number;
85
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Structured query types for the `/sync/query` endpoint.
3
+ *
4
+ * A query describes a filtered read in a compact wire format. `where` is a flat
5
+ * list of `[column, operator, value]` conditions combined with AND, and
6
+ * `related` names the schema relations to fetch alongside each row. The server
7
+ * compiles a query against your schema: it reads the model's relation metadata
8
+ * to turn `related: ['blocks']` into the right join, and turns each condition
9
+ * into a WHERE fragment. The protocol carries no model-specific logic, so
10
+ * adding a model or relation is a schema change rather than a server change.
11
+ *
12
+ * The `IN` operator lets you batch a read by any column, including a foreign
13
+ * key — for example, fetching every block whose `sectionId` falls in a set of
14
+ * ids.
15
+ */
16
+ export {};
@@ -0,0 +1 @@
1
+ export * from '@abloatai/transaction/schema/serialize';
@@ -0,0 +1 @@
1
+ export * from '@abloatai/transaction/schema/serialize';
@@ -0,0 +1,13 @@
1
+ import { ModelScope, type InstanceCache } from '../InstanceCache.js';
2
+ import type { Model } from '../Model.js';
3
+ import type { ModelConstructor, QueryResult } from '../BaseSyncedStore.js';
4
+ export interface QueryOptions {
5
+ predicate?: (model: Model) => boolean;
6
+ state?: ModelScope;
7
+ orderBy?: keyof Model;
8
+ order?: 'asc' | 'desc';
9
+ limit?: number;
10
+ offset?: number;
11
+ }
12
+ export declare function queryByClass(objectPool: InstanceCache, pendingDeletes: ReadonlySet<string>, modelClass: ModelConstructor<Model>, options?: QueryOptions): QueryResult<Model>;
13
+ export declare function countModels(objectPool: InstanceCache, modelClass: ModelConstructor<Model>, pendingDeletes: ReadonlySet<string>, predicate?: (model: Model) => boolean): number;
@@ -0,0 +1,35 @@
1
+ import { ModelScope } from '../InstanceCache.js';
2
+ export function queryByClass(objectPool, pendingDeletes, modelClass, options) {
3
+ const modelName = objectPool.registry.getModelNameFromConstructor(modelClass);
4
+ if (!modelName)
5
+ return { data: [], total: 0, hasMore: false };
6
+ let models = objectPool
7
+ .getByType(modelClass, options?.state ?? ModelScope.live)
8
+ .filter((model) => !pendingDeletes.has(model.id));
9
+ if (options?.predicate)
10
+ models = models.filter(options.predicate);
11
+ const total = models.length;
12
+ if (options?.orderBy) {
13
+ const field = options.orderBy;
14
+ const direction = options.order === 'desc' ? -1 : 1;
15
+ models.sort((a, b) => {
16
+ const av = a.getField(field);
17
+ const bv = b.getField(field);
18
+ if (av == null || bv == null)
19
+ return 0;
20
+ return av < bv ? -direction : av > bv ? direction : 0;
21
+ });
22
+ }
23
+ if (options?.offset)
24
+ models = models.slice(options.offset);
25
+ const hasMore = options?.limit ? models.length > options.limit : false;
26
+ if (options?.limit)
27
+ models = models.slice(0, options.limit);
28
+ return { data: models, total, hasMore };
29
+ }
30
+ export function countModels(objectPool, modelClass, pendingDeletes, predicate) {
31
+ const models = objectPool
32
+ .getByType(modelClass, ModelScope.live)
33
+ .filter((model) => !pendingDeletes.has(model.id));
34
+ return predicate ? models.filter(predicate).length : models.length;
35
+ }
@@ -0,0 +1,145 @@
1
+ /**
2
+ * The framework-neutral store contract. {@link SyncStoreContract} is the minimal
3
+ * store interface the SDK's hooks and mutators are written against, and
4
+ * {@link BaseSyncedStore} is the concrete class that implements it. Framework
5
+ * integrations, such as the React bindings, re-export these types, so a hook can
6
+ * accept any store that satisfies the contract without depending on a particular
7
+ * UI framework.
8
+ *
9
+ * This module is type-only: it has no runtime imports and contributes nothing to
10
+ * the runtime bundle beyond the erased interface declarations.
11
+ */
12
+ import type { Model } from './Model.js';
13
+ import type { ModelScope } from '@abloatai/transaction/types';
14
+ import type { QueryView, QueryViewOptions } from './views/QueryView.js';
15
+ import type { ViewRegistry } from './views/ViewRegistry.js';
16
+ import type { ParticipantScope } from './sync/participants.js';
17
+ /**
18
+ * A snapshot of the client's synchronization state, shaped for binding to UI.
19
+ * {@link SyncStoreContract.syncStatus} exposes a reactive instance of this, and
20
+ * the `useSyncStatus()` hook reads its fields to render connection and progress
21
+ * indicators.
22
+ */
23
+ export interface SyncStatus {
24
+ state: 'idle' | 'syncing' | 'error' | 'offline' | 'reconnecting';
25
+ progress: number;
26
+ error?: Error;
27
+ /** When true, the error is a session/auth error requiring re-authentication. */
28
+ isSessionError: boolean;
29
+ lastSyncAt?: Date;
30
+ pendingChanges: number;
31
+ offlineSince?: Date;
32
+ }
33
+ /**
34
+ * A single locally-originated mutation, observed as it flows through the commit
35
+ * stream. The undo system records these to build its inverse operations: one is
36
+ * emitted per local create, update, delete, or archive. Changes arriving from
37
+ * other participants do not appear here — they apply through a separate path
38
+ * that does not queue mutations. Because `previousData` captures the field
39
+ * values as they were before the edit, each event carries everything needed to
40
+ * derive its inverse, with no separate snapshot step. A store exposes this
41
+ * stream through {@link SyncStoreContract.subscribeLocalMutations}.
42
+ */
43
+ export interface LocalMutation {
44
+ type: 'create' | 'update' | 'delete' | 'archive' | 'unarchive';
45
+ /** The registered name of the mutated model, for example `'Block'`. */
46
+ modelName: string;
47
+ modelId: string;
48
+ /** The new field values, for a create or an update. */
49
+ data?: Record<string, unknown> | null;
50
+ /** The field values as they were before the edit. For an update these form
51
+ * the inverse patch; for a delete they hold the full row needed to recreate
52
+ * it. */
53
+ previousData?: Record<string, unknown> | null;
54
+ }
55
+ /**
56
+ * The minimal store interface the SDK's hooks and mutators depend on. Provide a
57
+ * concrete store that implements it — {@link BaseSyncedStore} is the built-in
58
+ * implementation — and the hooks work against your store without knowing its
59
+ * exact type. Optional members exist so lightweight test doubles can implement
60
+ * only the parts they exercise.
61
+ */
62
+ export interface SyncStoreContract {
63
+ /**
64
+ * Subscribes to the stream of local mutations for undo recording, delivering
65
+ * each optimistic write before it is acknowledged by the server. See
66
+ * {@link LocalMutation}. Returns a function that removes the subscription.
67
+ * This is optional: when a store does not implement it, undo scopes simply
68
+ * record nothing.
69
+ */
70
+ subscribeLocalMutations?(handler: (mutation: LocalMutation) => void): () => void;
71
+ retrieve(modelClass: abstract new (...args: never[]) => Model, id: string): Model | undefined;
72
+ queryByClass(modelClass: abstract new (...args: never[]) => Model, options?: {
73
+ predicate?: (model: Model) => boolean;
74
+ scope?: ModelScope;
75
+ orderBy?: keyof Model;
76
+ order?: 'asc' | 'desc';
77
+ limit?: number;
78
+ offset?: number;
79
+ }): {
80
+ data: Model[];
81
+ };
82
+ /**
83
+ * Saves one entity, creating it if new or updating it if it already exists.
84
+ * Calling `save` repeatedly within the same tick is efficient: the writes are
85
+ * coalesced and persisted, then sent to the server, as a single commit. There
86
+ * is deliberately no bulk method — issue one `save` per row and let the tick
87
+ * boundary batch them.
88
+ *
89
+ * Pass `skipValidation` on trusted, high-volume paths — bulk import or
90
+ * hydration, where the data has already been validated — to skip the per-row
91
+ * schema check, which is a measurable cost at that volume.
92
+ */
93
+ save(model: Model, options?: {
94
+ skipValidation?: boolean;
95
+ }): Promise<void>;
96
+ delete(model: Model): Promise<void>;
97
+ archive(model: Model): Promise<void>;
98
+ unarchive(model: Model): Promise<void>;
99
+ /** The in-memory object pool: look up individual entities or collections by
100
+ * id or model name, create views, and resolve foreign-key relationships. */
101
+ pool: {
102
+ get(id: string): Model | undefined;
103
+ getByTypeName(typename: string, scope?: ModelScope): Model[];
104
+ getByForeignKey(modelName: string, fieldName: string, fieldValue: string): Model[];
105
+ createFromData(data: Record<string, unknown>): Model | null;
106
+ hasForeignKeyIndex(typename: string, fieldName: string): boolean;
107
+ createView<T extends Record<string, unknown>>(typename: string, options?: QueryViewOptions<T>): QueryView<T>;
108
+ viewRegistry: ViewRegistry;
109
+ };
110
+ /**
111
+ * Reactive getters for the current sync state. In the built-in store these
112
+ * are backed by observable computeds, so reading them inside a reactive
113
+ * context — an observer component or a reaction — re-runs that context when
114
+ * the state changes. Code that prefers not to work with the reactivity system
115
+ * directly can read the same values through the `useSyncStatus()` hook.
116
+ */
117
+ readonly isReady: boolean;
118
+ readonly isSyncing: boolean;
119
+ readonly isOffline: boolean;
120
+ readonly isReconnecting: boolean;
121
+ readonly isError: boolean;
122
+ readonly hasUnsyncedChanges: boolean;
123
+ /**
124
+ * Manages the connection's area of interest — the dynamic set of data it
125
+ * subscribes to. Call `enterScope` and `leaveScope` to move that interest as
126
+ * the user navigates between documents, and `pinScope` and `unpinScope` to
127
+ * keep a scope subscribed while it stays important, such as while a claim is
128
+ * held. Every scope resolves through the same resolver the claim path uses, so
129
+ * read subscriptions and write claims always agree on which group they refer
130
+ * to. These are optional and do nothing until the connection is open.
131
+ */
132
+ enterScope?(scope: ParticipantScope, opts?: {
133
+ hydrate?: boolean;
134
+ }): Promise<void>;
135
+ leaveScope?(scope: ParticipantScope): Promise<void>;
136
+ pinScope?(scope: ParticipantScope): Promise<void>;
137
+ unpinScope?(scope: ParticipantScope): Promise<void>;
138
+ /**
139
+ * The full reactive {@link SyncStatus} record. The `useSyncStatus()` hook
140
+ * reads its fields — `state`, `progress`, `pendingChanges`, `isSessionError`,
141
+ * and `error` — to present the current sync state. It is part of the contract
142
+ * so hooks and test doubles can read or set it directly.
143
+ */
144
+ readonly syncStatus: SyncStatus;
145
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * The framework-neutral store contract. {@link SyncStoreContract} is the minimal
3
+ * store interface the SDK's hooks and mutators are written against, and
4
+ * {@link BaseSyncedStore} is the concrete class that implements it. Framework
5
+ * integrations, such as the React bindings, re-export these types, so a hook can
6
+ * accept any store that satisfies the contract without depending on a particular
7
+ * UI framework.
8
+ *
9
+ * This module is type-only: it has no runtime imports and contributes nothing to
10
+ * the runtime bundle beyond the erased interface declarations.
11
+ */
12
+ export {};
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Manages the client-side IndexedDB databases the sync engine keeps in the
3
+ * browser. There are two tiers. A single registry database, `ablo_databases`,
4
+ * records metadata about every workspace database. Each user-and-workspace pair
5
+ * then gets its own data database, named `ablo_<hash>`, that holds the synced
6
+ * rows. {@link DatabaseManager} creates, versions, and deletes both tiers.
7
+ */
8
+ import type { RuntimeContext } from '../RuntimeContext.js';
9
+ import { type PersistenceIdentity } from './persistenceIdentity.js';
10
+ export type { PersistenceIdentity } from './persistenceIdentity.js';
11
+ export interface DatabaseInfo {
12
+ name: string;
13
+ namespaceVersion: number;
14
+ userId: string;
15
+ workspaceId: string;
16
+ participantKind: string;
17
+ projectId: string | null;
18
+ environment: 'sandbox' | 'production' | null;
19
+ sandboxId: string | null;
20
+ schemaHash: string;
21
+ schemaVersion: number;
22
+ userVersion?: number;
23
+ createdAt: Date;
24
+ updatedAt: Date;
25
+ }
26
+ export interface WorkspaceMetadata {
27
+ lastSyncId: number;
28
+ firstSyncId: number;
29
+ backendDatabaseVersion: number;
30
+ subscribedSyncGroups: string[];
31
+ updatedAt: Date;
32
+ schemaHash?: string;
33
+ syncGroups?: string[];
34
+ }
35
+ /**
36
+ * DatabaseManager - Manages Ablo's two-tier database architecture
37
+ *
38
+ * Key responsibilities:
39
+ * - Manages ablo_databases (database registry)
40
+ * - Creates workspace-specific databases (ablo_hash)
41
+ * - Handles database migration and versioning
42
+ * - Provides database info and metadata management
43
+ */
44
+ export declare class DatabaseManager {
45
+ private readonly runtime;
46
+ private metaDb;
47
+ private readonly metaDbName;
48
+ constructor(runtime?: RuntimeContext);
49
+ /**
50
+ * Initialize the meta database (ablo_databases)
51
+ */
52
+ initializeMetaDatabase(): Promise<void>;
53
+ /**
54
+ * Calculate database info for a user/workspace combination
55
+ */
56
+ calculateDatabaseInfo(identity: PersistenceIdentity, userVersion?: number): Promise<DatabaseInfo>;
57
+ /**
58
+ * Register database info in ablo_databases
59
+ */
60
+ registerDatabase(info: DatabaseInfo): Promise<void>;
61
+ /**
62
+ * Get database info by name
63
+ */
64
+ getDatabaseInfo(name: string): Promise<DatabaseInfo | null>;
65
+ /** Remove only the named ownership records; the shared registry stays live. */
66
+ unregisterDatabases(names: readonly string[]): Promise<void>;
67
+ /**
68
+ * Get all databases for a user
69
+ */
70
+ getDatabasesForUser(userId: string): Promise<DatabaseInfo[]>;
71
+ /**
72
+ * Open workspace-specific database
73
+ */
74
+ openWorkspaceDatabase(dbInfo: DatabaseInfo, createStoresFn?: (db: IDBDatabase, tx: IDBTransaction) => Promise<void>): Promise<IDBDatabase>;
75
+ /**
76
+ * Read workspace metadata from __meta table
77
+ */
78
+ getWorkspaceMetadata(db: IDBDatabase): Promise<WorkspaceMetadata | null>;
79
+ /**
80
+ * Write workspace metadata to __meta table
81
+ */
82
+ setWorkspaceMetadata(db: IDBDatabase, metadata: WorkspaceMetadata): Promise<void>;
83
+ /**
84
+ * Check if a model is persisted (all instances loaded)
85
+ */
86
+ isModelPersisted(db: IDBDatabase, modelName: string): Promise<boolean>;
87
+ /**
88
+ * Mark a model as persisted
89
+ */
90
+ setModelPersisted(db: IDBDatabase, modelName: string, persisted: boolean): Promise<void>;
91
+ /**
92
+ * Get all model persistence states
93
+ */
94
+ getAllModelPersistenceStates(db: IDBDatabase): Promise<Record<string, boolean>>;
95
+ /**
96
+ * Delete a workspace database
97
+ */
98
+ deleteWorkspaceDatabase(dbInfo: DatabaseInfo): Promise<boolean>;
99
+ /**
100
+ * Get comprehensive database statistics
101
+ */
102
+ getDatabaseStatistics(): Promise<{
103
+ metaDatabaseSize: number;
104
+ totalWorkspaceDatabases: number;
105
+ databasesByUser: Record<string, number>;
106
+ schemaVersions: Record<string, number>;
107
+ }>;
108
+ /**
109
+ * Close all database connections
110
+ */
111
+ close(): Promise<void>;
112
+ }