@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,37 @@
1
+ /**
2
+ * The interactive resource-type surface.
3
+ *
4
+ * The transport-facing half of these types moved down into the settlement core
5
+ * (ADR 0016). This module keeps the
6
+ * consumer-facing import path intact and rejoins it with the model-proxy types
7
+ * that stay here — `ModelOperations` chief among them, because it returns the
8
+ * live participant handle.
9
+ */
10
+
11
+ export * from '@abloatai/transaction/resources/httpResources';
12
+
13
+ // The request contract for `ablo.<model>` — also core, re-joined here so this
14
+ // module stays the single import path for the whole resource surface.
15
+ export type {
16
+ LocalCountOptions,
17
+ LocalReadOptions,
18
+ ModelListScope,
19
+ ServerReadOptions,
20
+ ModelRetrieveParams,
21
+ ModelCreateParams,
22
+ ModelUpdateParams,
23
+ ModelDeleteParams,
24
+ ClaimOptions,
25
+ ClaimParams,
26
+ ClaimLookupParams,
27
+ ClaimReorderParams,
28
+ Claim,
29
+ ClaimHeartbeat,
30
+ ClaimHeartbeatOptions,
31
+ HeldClaim,
32
+ HeldLease,
33
+ } from '@abloatai/transaction/resources/modelOperations';
34
+
35
+ // `ModelOperations` binds the request contract to reactive model instances, so
36
+ // it lives with the factory that builds it rather than with the core.
37
+ export type { ModelOperations } from './createModelProxy.js';
@@ -0,0 +1,194 @@
1
+ /**
2
+ * Derives engine configuration from a schema. This module holds two pure
3
+ * functions: {@link computeFKDepthPriority} works out a safe row-insertion
4
+ * order from the schema's foreign-key relations, and
5
+ * {@link deriveConfigFromSchema} packages that ordering, together with a few
6
+ * defaults, into the {@link RuntimeConfig} a client uses at startup. Both
7
+ * are deterministic transforms of the schema and hold no engine state.
8
+ */
9
+
10
+ import type { Schema } from '@abloatai/transaction/schema/schema';
11
+ import type { RelationDef } from '@abloatai/transaction/schema/relation';
12
+ import type { RuntimeConfig } from '../interfaces/index.js';
13
+ import { schemaHash, modelHash, toSchemaJSON } from '../schema/serialize.js';
14
+
15
+ // ── Config derivation from schema ─────────────────────────────────────────
16
+
17
+ /**
18
+ * Computes a create-priority map that gives the engine a safe order for
19
+ * inserting rows, so a child row is never written before the parent its
20
+ * foreign key references.
21
+ *
22
+ * Every `belongsTo` relation is an edge from a child model to its parent. This
23
+ * function runs Tarjan's strongly-connected-components algorithm over that
24
+ * graph, which does two things at once: it groups any models that reference
25
+ * each other in a cycle into a single component, and it produces those
26
+ * components in an order where parents come before children. Each model then
27
+ * gets a numeric priority from that order, where a lower number means "insert
28
+ * earlier". Top-level models with no parent — an organization or a theme, say —
29
+ * come first, and the deepest descendants come last.
30
+ *
31
+ * Models in the same cycle share a priority, so within a cycle the order rows
32
+ * were queued in breaks the tie. To break a cycle deterministically instead,
33
+ * mark one side of it with `belongsTo(target, fk, { defer: true })`. A deferred
34
+ * edge is left out of the graph, which turns the cycle into a chain and gives
35
+ * the deferred child a strictly higher priority than its parent. Pair it with a
36
+ * Postgres `DEFERRABLE INITIALLY DEFERRED` constraint if you also want the
37
+ * database to relax its check. See {@link BelongsToOptions.defer}.
38
+ *
39
+ * The returned map is keyed by each model's wire type name
40
+ * ({@link ModelDef.typename}, falling back to the schema key), because that is
41
+ * the name the engine looks up at commit time. Keying by the schema key would
42
+ * miss that lookup, and every model would fall back to the default priority.
43
+ *
44
+ * The result does not depend on which model the walk starts from, and the
45
+ * algorithm runs in time linear in the number of models plus relations.
46
+ * Reference: Tarjan, R. (1972), "Depth-first search and linear graph
47
+ * algorithms."
48
+ */
49
+ export function computeFKDepthPriority(schema: Schema): ReadonlyMap<string, number> {
50
+ // schemaKey → typename (wire name used at transaction time)
51
+ const keyToTypename = new Map<string, string>();
52
+ for (const [key, def] of Object.entries(schema.models)) {
53
+ keyToTypename.set(key, def.typename ?? key);
54
+ }
55
+
56
+ // Adjacency: schemaKey → parent schema keys pulled from `belongsTo`.
57
+ // Parents not in the schema (e.g. external types) are dropped so the
58
+ // graph stays closed. Edges marked `{ defer: true }` are also
59
+ // dropped — the schema author has declared this side of a cycle to
60
+ // be the "soft" one (insert with null FK, patch later), so the
61
+ // dependency-graph walker treats it as if the edge weren't there.
62
+ // That breaks the cycle deterministically and lets the other side
63
+ // become a strict topological predecessor.
64
+ const parentsOf = new Map<string, readonly string[]>();
65
+ for (const [key, def] of Object.entries(schema.models)) {
66
+ const out: string[] = [];
67
+ for (const rel of Object.values(def.relations) as (RelationDef & { options?: { defer?: boolean } })[]) {
68
+ if (rel.type !== 'belongsTo') continue;
69
+ if (!keyToTypename.has(rel.target)) continue;
70
+ if (rel.options?.defer === true) continue;
71
+ out.push(rel.target);
72
+ }
73
+ parentsOf.set(key, out);
74
+ }
75
+
76
+ // Tarjan SCC bookkeeping
77
+ const dfsIndex = new Map<string, number>();
78
+ const lowlink = new Map<string, number>();
79
+ const onStack = new Set<string>();
80
+ const stack: string[] = [];
81
+ const sccs: string[][] = [];
82
+ let counter = 0;
83
+
84
+ function strongconnect(v: string): void {
85
+ dfsIndex.set(v, counter);
86
+ lowlink.set(v, counter);
87
+ counter++;
88
+ stack.push(v);
89
+ onStack.add(v);
90
+
91
+ for (const w of parentsOf.get(v) ?? []) {
92
+ if (!dfsIndex.has(w)) {
93
+ strongconnect(w);
94
+ lowlink.set(v, Math.min(lowlink.get(v)!, lowlink.get(w)!));
95
+ } else if (onStack.has(w)) {
96
+ // Back-edge into the active DFS path — w is in the same SCC as v.
97
+ lowlink.set(v, Math.min(lowlink.get(v)!, dfsIndex.get(w)!));
98
+ }
99
+ }
100
+
101
+ // v is the root of an SCC: pop everything down to v inclusive.
102
+ if (lowlink.get(v) === dfsIndex.get(v)) {
103
+ const component: string[] = [];
104
+ let w: string;
105
+ do {
106
+ w = stack.pop()!;
107
+ onStack.delete(w);
108
+ component.push(w);
109
+ } while (w !== v);
110
+ sccs.push(component);
111
+ }
112
+ }
113
+
114
+ for (const key of keyToTypename.keys()) {
115
+ if (!dfsIndex.has(key)) strongconnect(key);
116
+ }
117
+
118
+ // Tarjan emits SCCs in reverse topological order of the condensation.
119
+ // In our edge convention (child→parent), reverse-topo of the
120
+ // condensation means root-SCCs (no outgoing edges = no parents)
121
+ // first, leaf-SCCs (deepest descendants) last. We could just use
122
+ // emit-order as the priority — but that gives independent sibling
123
+ // SCCs different priorities, which is semantically wrong: siblings
124
+ // don't depend on each other and shouldn't be ordered relative to
125
+ // each other.
126
+ //
127
+ // Instead, do one more pass to compute *longest-path depth* on the
128
+ // condensation DAG: depth(SCC) = max(depth(parent SCC)) + 1, or 0
129
+ // for SCCs with no in-schema parents. SCCs at the same depth get
130
+ // the same priority — siblings stay tied, insertion order in the
131
+ // queue breaks the tie. Priority = (depth + 1) * 10.
132
+ //
133
+ // We can compute this in a single pass over the SCCs because
134
+ // Tarjan's emit-order *is* a valid topological order of the
135
+ // condensation: when we process sccs[i], every parent SCC has
136
+ // already been assigned a depth.
137
+ const nodeToSccIdx = new Map<string, number>();
138
+ sccs.forEach((scc, i) => {
139
+ for (const node of scc) nodeToSccIdx.set(node, i);
140
+ });
141
+
142
+ const sccDepth = new Map<number, number>();
143
+ sccs.forEach((scc, i) => {
144
+ let maxParentDepth = -1;
145
+ for (const node of scc) {
146
+ for (const parent of parentsOf.get(node) ?? []) {
147
+ const parentSccIdx = nodeToSccIdx.get(parent);
148
+ if (parentSccIdx === undefined) continue;
149
+ if (parentSccIdx === i) continue; // intra-SCC edge — not a dep
150
+ const d = sccDepth.get(parentSccIdx);
151
+ if (d !== undefined && d > maxParentDepth) maxParentDepth = d;
152
+ }
153
+ }
154
+ sccDepth.set(i, maxParentDepth + 1);
155
+ });
156
+
157
+ const out = new Map<string, number>();
158
+ sccs.forEach((scc, i) => {
159
+ const priority = (sccDepth.get(i)! + 1) * 10;
160
+ for (const key of scc) {
161
+ out.set(keyToTypename.get(key)!, priority);
162
+ }
163
+ });
164
+ return out;
165
+ }
166
+
167
+ export function deriveConfigFromSchema(schema: Schema): RuntimeConfig {
168
+ // Field-level serialization for commits happens in the transaction queue,
169
+ // which reads each model's declared fields from the model registry at commit
170
+ // time. There is no per-field metadata to configure here, so these maps stay
171
+ // empty.
172
+ return {
173
+ modelCreatePriority: computeFKDepthPriority(schema),
174
+ defaultCreatePriority: 40,
175
+ defaultNonCreatePriority: 50,
176
+ essentialFields: {},
177
+ classNameFallbackMap: {},
178
+ // Hash this schema once, so startup can detect when it has drifted from the
179
+ // schema the server currently has active. The server and the `ablo push`
180
+ // command compute this same hash.
181
+ expectedSchemaHash: schemaHash(schema),
182
+ // Per-model hashes for the SEMANTIC drift check: on a whole-hash mismatch
183
+ // the client compares only the models it declares, so an additive server
184
+ // change stays silent and a real divergence names the exact models.
185
+ expectedModelHashes: Object.fromEntries(
186
+ Object.entries(toSchemaJSON(schema).models).map(([key, model]) => [key, modelHash(model)]),
187
+ ),
188
+ // For a projection (`selectModels`/`omitModels`), also carry the full source
189
+ // schema's hash. The drift check accepts a server match on either hash, so a
190
+ // subset client stays quiet against a server running its full source schema.
191
+ // Undefined for a directly-authored schema — plain equality applies there.
192
+ expectedSourceSchemaHash: schema.sourceSchemaHash,
193
+ };
194
+ }
@@ -0,0 +1,172 @@
1
+ /**
2
+ * The store cluster — what `humans()` constructs at `init` now that the
3
+ * plugin context carries the resolved url and the credential source
4
+ * (ADR 0016; docs/plans/package-split.md, sequence step 2): this client's
5
+ * runtime, the internal component graph, the registered model classes, and
6
+ * the `BaseSyncedStore` that orchestrates them. The engine consumes the
7
+ * cluster instead of constructing it; what remains in the composition root
8
+ * (credential lifecycle, ready(), model proxies, resources) migrates in
9
+ * later steps.
10
+ *
11
+ * The cluster rides the humans surface under {@link kStoreCluster}, a
12
+ * symbol: `layerPluginSurface` merges only string-keyed members onto the
13
+ * client, so the handoff never becomes public client API. When the plugin
14
+ * contract adopts context patches (the decoration end-state), this channel
15
+ * dissolves into them.
16
+ */
17
+
18
+ import type { PluginContext } from '../../plugin.js';
19
+ import { shouldUseInMemoryPersistence } from '../persistence.js';
20
+ import type { MutationExecutor, RuntimeConfig } from '../interfaces/index.js';
21
+ import type { ModelRegistry } from '../ModelRegistry.js';
22
+ import {
23
+ noopObservability,
24
+ browserOnlineStatus,
25
+ defaultSessionErrorDetector,
26
+ noopAnalytics,
27
+ type RuntimeContext,
28
+ } from '../RuntimeContext.js';
29
+ import { initRuntime } from '../context.js';
30
+ import { alwaysOnline } from '../adapters/alwaysOnline.js';
31
+ import { BaseSyncedStore } from '../BaseSyncedStore.js';
32
+ import { SyncWebSocket } from '../sync/SyncWebSocket.js';
33
+ import {
34
+ createInternalComponents,
35
+ type InternalComponents,
36
+ } from './createInternalComponents.js';
37
+ import { registerModelsFromSchema } from './modelRegistration.js';
38
+ import { deriveConfigFromSchema } from './schemaConfig.js';
39
+ import { createDefaultMutationExecutor } from './wsMutationExecutor.js';
40
+ import type { InternalAbloOptions } from './options.js';
41
+ export type { InternalAbloOptions } from './options.js';
42
+
43
+ /**
44
+ * The private handoff slot on the humans surface. Symbol-keyed on purpose:
45
+ * surface members merge onto the client by string key, and the cluster is
46
+ * construction machinery, not client API.
47
+ */
48
+ export const kStoreCluster = Symbol.for('ablo.humans.store-cluster');
49
+
50
+ /** What `humans().init` constructs and the engine consumes. */
51
+ export interface StoreCluster {
52
+ /** This client's runtime — every component below was constructed with it. */
53
+ readonly runtime: RuntimeContext;
54
+ /** The component graph: registry, pool, bootstrap, database, sync client, hydration. */
55
+ readonly components: InternalComponents;
56
+ /** The store orchestrating the graph, holding the host-built connection. */
57
+ readonly store: BaseSyncedStore;
58
+ }
59
+
60
+ /**
61
+ * The contract types the connection as the core `WsTransport`; on the
62
+ * reactive path the factory constructs the materialising subclass with the
63
+ * default collaboration vocabulary, and this guard is where that knowledge
64
+ * becomes a type. A connection that is not the subclass means the cluster
65
+ * cannot be built here.
66
+ */
67
+ function isReactiveSocket(transport: unknown): transport is SyncWebSocket {
68
+ if (!transport || typeof transport !== 'object') return false;
69
+ const candidate = transport as Record<string, unknown>;
70
+ return [
71
+ 'subscribe',
72
+ 'sendCollaborationEvent',
73
+ 'disconnect',
74
+ 'isConnected',
75
+ 'getSyncGroups',
76
+ 'setSyncGroups',
77
+ 'setLastSyncId',
78
+ 'getLastSyncId',
79
+ 'acknowledge',
80
+ 'allowConnect',
81
+ 'connect',
82
+ ].every((method) => typeof candidate[method] === 'function');
83
+ }
84
+
85
+ /**
86
+ * Builds the cluster from what the context carries, or returns `null` when
87
+ * it does not carry enough (no connection, no resolved url, no credential
88
+ * source, or no schema on the options bag) — the same tolerance the
89
+ * presence stream established: `init` constructs what the context can
90
+ * support and no more. The reactive factory always supplies all four and
91
+ * treats a missing cluster as a configuration fault.
92
+ */
93
+ export function buildStoreCluster(
94
+ context: PluginContext<InternalAbloOptions>,
95
+ ): StoreCluster | null {
96
+ const options = context.options;
97
+ const { url, auth, transport, logger } = context;
98
+ if (!options?.schema || !url || !auth || !isReactiveSocket(transport)) {
99
+ return null;
100
+ }
101
+ const schema = options.schema;
102
+
103
+ // Config derives from the schema; caller-supplied overrides layer on top,
104
+ // caller winning per key.
105
+ const config: RuntimeConfig = {
106
+ ...deriveConfigFromSchema(schema),
107
+ ...options.configOverrides,
108
+ };
109
+
110
+ // The default executor sends `{ type: 'commit', ... }` over the context's
111
+ // connection; before it opens, sends reject with the diagnosed not-ready
112
+ // error and the MutationQueue owns the retry. A caller-supplied executor
113
+ // still wins (test mocks, alternative transports).
114
+ const executor: MutationExecutor =
115
+ options.mutationExecutor ?? createDefaultMutationExecutor(() => transport);
116
+
117
+ // This client's runtime — the instance the whole graph is constructed
118
+ // with, so two clients in one process never read each other's logger,
119
+ // config, or executor. `getModelMetadata` closes over this client's own
120
+ // registry (assigned once the graph exists below), never the
121
+ // active-registry global.
122
+ let registryForMetadata: ModelRegistry | undefined = undefined;
123
+ const runtime: RuntimeContext = {
124
+ logger,
125
+ observability: options.observability ?? noopObservability,
126
+ analytics: options.analytics ?? noopAnalytics,
127
+ sessionErrorDetector: options.sessionErrorDetector ?? defaultSessionErrorDetector,
128
+ onlineStatus:
129
+ options.onlineStatus ??
130
+ (shouldUseInMemoryPersistence(options) ? alwaysOnline() : browserOnlineStatus),
131
+ config,
132
+ mutationExecutor: executor,
133
+ getModelMetadata: (name) => registryForMetadata?.getMetadata(name),
134
+ };
135
+ // The module-global bridge: code not yet constructed with an instance
136
+ // (model instances, the react hooks, the socket's context ports) still
137
+ // reads it. Last-writer-wins there, exactly as before the runtime became
138
+ // per-client. Retired reference by reference (docs/plans/package-split.md).
139
+ initRuntime(runtime);
140
+
141
+ const components = createInternalComponents({
142
+ schema,
143
+ url,
144
+ options,
145
+ auth,
146
+ runtime,
147
+ });
148
+ registryForMetadata = components.modelRegistry;
149
+ registerModelsFromSchema(schema, components.modelRegistry);
150
+
151
+ const store = new BaseSyncedStore(
152
+ {
153
+ syncClient: components.syncClient,
154
+ database: components.database,
155
+ objectPool: components.objectPool,
156
+ modelRegistry: components.modelRegistry,
157
+ syncWebSocket: transport,
158
+ schema,
159
+ url,
160
+ auth,
161
+ runtime,
162
+ // The resolved list, so the store's delta pipeline dispatches the
163
+ // declared stage handlers — including this plugin's own `apply`.
164
+ stagePlugins: context.plugins ?? [],
165
+ },
166
+ // Collaboration vocabulary is the application's: the SDK subscribes to
167
+ // the event types the caller declares and to nothing by default.
168
+ { collaborationEvents: options.collaborationEvents ?? [] },
169
+ );
170
+
171
+ return { runtime, components, store };
172
+ }