@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,317 @@
1
+ /**
2
+ * The shape of the reactive client — what `Ablo({ schema, apiKey })` hands back.
3
+ *
4
+ * This module owns the declaration; `./Ablo.ts` aliases it as `Ablo<S>` so the
5
+ * factory, the type, and the `Ablo.*` namespace keep merging under one name.
6
+ * The split is what keeps the composition root readable: the contract a caller
7
+ * writes against lives here, the wiring that satisfies it lives there.
8
+ *
9
+ * Type-only, with no runtime imports — the same property that lets `options.ts`
10
+ * and `resourceTypes.ts` be referenced from the HTTP client without importing
11
+ * the factory back and creating a cycle.
12
+ */
13
+ import type { Schema, SchemaRecord, Model, InferCreate, InferRow } from '@abloatai/transaction/schema/schema';
14
+ import type { PresenceStream, Snapshot } from '@abloatai/transaction/types/streams';
15
+ import type { InstanceCache } from './local/InstanceCache.js';
16
+ import type { SyncStoreContract } from './react/context.js';
17
+ import type { SyncWebSocket, CoreSyncEventMap } from './local/sync/SyncWebSocket.js';
18
+ import type { SyncStatus } from './local/BaseSyncedStore.js';
19
+ import type { ModelOperations } from './local/client/createModelProxy.js';
20
+ import type { ClaimResource, CommitResource, CreateAgentClientParams, SessionResource } from '@abloatai/transaction/resources/httpResources';
21
+ export type { LocalReadOptions } from './local/client/resourceTypes.js';
22
+ /** The typed sync engine client — one property per model in the schema */
23
+ export type AbloClient<S extends SchemaRecord> = {
24
+ readonly [K in keyof S & string]: ModelOperations<Model<Schema<S>, K>, InferCreate<Schema<S>, K>>;
25
+ } & {
26
+ /**
27
+ * Wait for the sync engine to finish its initial bootstrap.
28
+ * Resolves once entity data is loaded and the WebSocket is connected.
29
+ *
30
+ * ```ts
31
+ * const sync = Ablo({ schema, user });
32
+ * await sync.ready();
33
+ * const reports = sync.reports.findMany(); // data is available
34
+ * ```
35
+ *
36
+ * If bootstrap fails, this rejects with the underlying error (unreachable
37
+ * server, invalid API key, 500 from bootstrap endpoint, etc.).
38
+ *
39
+ * Idempotent — calling it multiple times returns the same promise.
40
+ */
41
+ ready(): Promise<void>;
42
+ /**
43
+ * Wait for all pending mutations to be confirmed by the server.
44
+ *
45
+ * Sync engine mutations (`create`/`update`/`delete`) are optimistic and
46
+ * resolve immediately. Use this when you need to know the server has
47
+ * acknowledged everything before continuing — for example, before
48
+ * navigating away, before triggering a server-side workflow, or in tests.
49
+ *
50
+ * Resolves when `syncStatus.pendingChanges` reaches 0. If the engine is
51
+ * offline, this waits until reconnect + flush completes.
52
+ *
53
+ * ```ts
54
+ * await sync.reports.create({ data: { title: 'A' } });
55
+ * await sync.reports.create({ data: { title: 'B' } });
56
+ * await sync.waitForFlush(); // server has both reports
57
+ * ```
58
+ *
59
+ * @param timeoutMs - Optional timeout. Default: no timeout (wait forever).
60
+ * Throws `Error('Flush timeout')` if reached with pending changes.
61
+ */
62
+ waitForFlush(timeoutMs?: number): Promise<void>;
63
+ /** Disconnect and clean up */
64
+ dispose(): Promise<void>;
65
+ /**
66
+ * Replace the bearer token used for the WebSocket upgrade and HTTP requests,
67
+ * without tearing down the engine. Use it to push a refreshed short-lived
68
+ * access key (an `ek_` or `rk_`) before it expires — the client's `apiKey`
69
+ * resolver refresh loop calls this for you. It reuses the same rotation path as
70
+ * the internal capability-token refresh and is safe to call before `ready()`.
71
+ * It also nudges a parked connection to re-probe with the new token.
72
+ */
73
+ setAuthToken(token: string): void;
74
+ /**
75
+ * Resolve the active bearer credential this engine authenticates with — the
76
+ * live `ek_` or `rk_` the WebSocket and HTTP transports currently carry (kept
77
+ * fresh by the `apiKey` resolver refresh loop), falling back to a configured
78
+ * API key. Returns `null` when no credential is set yet. Use it to authenticate
79
+ * a side-band request to the same server with the token this client already
80
+ * holds, avoiding an extra mint round-trip.
81
+ */
82
+ getAuthToken(): Promise<string | null>;
83
+ /**
84
+ * Register a re-mint hook for the short-lived access key. The connection layer
85
+ * calls it when it finds the key stale (a `credential_stale` probe) or on an
86
+ * external nudge; the hook mints a fresh `ek_` or `rk_` from the still-valid
87
+ * login. It follows the same contract as the `apiKey` resolver: resolve a
88
+ * token, resolve `null` when the login itself is gone (which signs the user
89
+ * out), or throw on a transient failure (which backs off without signing out).
90
+ * The client wires this automatically from a function `apiKey`. Safe to call
91
+ * before `ready()`.
92
+ */
93
+ setCredentialRefresher(refresher: (() => Promise<string | null>) | null): void;
94
+ /**
95
+ * Ask the connection layer to re-probe and reconnect now, using the current
96
+ * credential. Idempotent and safe in any state (a no-op while connected).
97
+ * Call after an OS-wake signal (Electron `powerMonitor` 'resume') so a
98
+ * connection parked since sleep recovers immediately instead of waiting for
99
+ * the watchdog.
100
+ */
101
+ nudgeReconnect(): void;
102
+ /**
103
+ * Mint a short-lived, scoped session token for one end user. Call this on your
104
+ * backend, where the `sk_` secret key lives, then hand the returned `token` to
105
+ * that user's browser — typically through a token route the browser's `apiKey`
106
+ * resolver fetches. The browser presents the token as its bearer, and the
107
+ * server verifies it. The browser must never see the `sk_` key, only the
108
+ * per-user session token.
109
+ *
110
+ * Pass `{ user: { id }, can: { tasks: ['read', 'update'] } }` for an end-user
111
+ * session. It mints an `ek_` and attributes writes to a user (recorded as
112
+ * `actor_kind` on the delta row). Pass `{ agent: { id }, can: {
113
+ * tasks: ['update'] } }` for a scoped agent session, which mints an `rk_`.
114
+ * Both kinds require `can`, typed against your schema's model names. This
115
+ * always authenticates with the original `sk_`, never the client's exchanged
116
+ * sync credential.
117
+ */
118
+ sessions: SessionResource<S>;
119
+ /**
120
+ * Mint a scoped **agent identity** and return a ready-to-use client bound to
121
+ * it — the `ablo.<resource>.<verb>` shape for the agent use case. One call
122
+ * replaces `sessions.create({ agent, can })` + constructing a second
123
+ * `Ablo({ apiKey: token })`:
124
+ *
125
+ * ```ts
126
+ * const agent = await ablo.agents.create({
127
+ * name: 'researcher', // readable label (optional)
128
+ * can: { documents: ['read', 'update'] },
129
+ * // id omitted → a fresh uuid: a distinct, independent participant
130
+ * });
131
+ * await agent.documents.update({ id, data, claim });
132
+ * await agent.dispose(); // when the agent is done
133
+ * ```
134
+ *
135
+ * Server-side only: it requires the `sk_` secret key (like `sessions.create`)
136
+ * and throws `AbloAuthenticationError` in the browser. The returned client
137
+ * holds its own auto-refreshing `rk_`, so a long run never hits token expiry,
138
+ * and the `sk_` never leaves this process. Each call is a distinct participant
139
+ * by default (omit `id` for a fresh uuid), so even two agents sharing a `name`
140
+ * queue behind one another on a contended row — `name` is display only and
141
+ * never collapses identity. Humans don't get a server-built client; ship them a
142
+ * token via `sessions.create({ user, can })`. If you need the raw token for
143
+ * revocation, or a stable re-attachable id, use `sessions.create({ agent, can })`
144
+ * or pass `id`.
145
+ */
146
+ agents: {
147
+ create(params: CreateAgentClientParams<S>): Promise<AbloClient<S>>;
148
+ };
149
+ /**
150
+ * The organization this client resolved to — `null` until `ready()`
151
+ * completes. Use it instead of scraping CLI output or hardcoding env vars:
152
+ *
153
+ * ```ts
154
+ * await ablo.ready();
155
+ * const org = ablo.organizationId; // 'org_…'
156
+ * ```
157
+ */
158
+ readonly organizationId: string | null;
159
+ /**
160
+ * Destroy every IndexedDB database owned by this engine. Disconnects
161
+ * the WebSocket, releases timers, and deletes all `ablo_*` / `ablo-*`
162
+ * databases. Use on session expiry or explicit logout. Best-effort.
163
+ */
164
+ purge(): Promise<void>;
165
+ /**
166
+ * Subscribe to terminal session events. The client stops network access and
167
+ * completes local authenticated-state cleanup before listeners run. Returns
168
+ * an unsubscribe function; multiple subscribers are supported.
169
+ */
170
+ onSessionError(listener: (error: Error) => void): () => void;
171
+ /**
172
+ * Subscribe to mutation failures with the full payload (transaction,
173
+ * error, permanent flag). Use this for user-visible failure surfaces —
174
+ * toasts keyed by `AbloError.type`, route-level "this entity reverted"
175
+ * boundaries, telemetry. Fires for both permanent rejections and
176
+ * `max_retries_exhausted` rollbacks.
177
+ *
178
+ * Distinct from `onSessionError` (server killed the session, requires
179
+ * re-auth) and from the `tx.isPersisted` per-call promise (call-site
180
+ * await, single transaction). This is the app-wide fan-in.
181
+ */
182
+ onMutationFailure(listener: (payload: {
183
+ transaction: import('./local/transactions/mutations/MutationQueue.js').QueuedMutation;
184
+ error: Error;
185
+ permanent?: boolean;
186
+ }) => void): () => void;
187
+ /**
188
+ * Subscribe to commit round-trip latency — how long each write takes to
189
+ * land, split into the local durable seal (`sealMs`) and the remote
190
+ * acknowledgement (`ackMs`). Fires once per completed commit; returns an
191
+ * unsubscribe function.
192
+ *
193
+ * Use this for latency readouts and performance telemetry. It is the only
194
+ * measurement of the write path: commits travel over the WebSocket, so
195
+ * `fetch`-based instrumentation never observes them.
196
+ */
197
+ onCommitLatency(listener: (sample: import('./local/transactions/mutations/commitLatency.js').CommitLatencySample) => void): () => void;
198
+ /**
199
+ * Wait for the most-recent in-flight transaction for (modelName, modelId)
200
+ * to be confirmed by the server. Rejects with the same error that the
201
+ * queue's `transaction:failed` event would carry if the mutation is
202
+ * permanently rolled back. Resolves immediately when no transaction is
203
+ * in flight (already-confirmed or never-staged).
204
+ *
205
+ * Matches the queue's `'confirmed'` status vocabulary (see also
206
+ * `commits.create({wait:'confirmed'})`). Use this for the routing-
207
+ * grace-window pattern: stage a write, then
208
+ * `Promise.race([ablo.waitForConfirmation(...), gracePromise])` before
209
+ * navigating to a route whose URL depends on the optimistic id.
210
+ */
211
+ waitForConfirmation(modelName: string, modelId: string): Promise<void>;
212
+ /**
213
+ * Reactive sync status — a MobX observable.
214
+ *
215
+ * Single source of truth for "what's the sync engine doing?" Contains:
216
+ * - `state`: `'idle' | 'syncing' | 'error' | 'offline' | 'reconnecting'`
217
+ * - `progress`: 0-100 for bootstrap progress
218
+ * - `error?`: Error object when `state === 'error'`
219
+ * - `pendingChanges`: Number of unconfirmed mutations in the queue
220
+ * - `lastSyncAt?`: Timestamp of the last successful delta processing
221
+ * - `offlineSince?`: When the connection dropped
222
+ * - `isSessionError`: True when the error requires re-authentication
223
+ *
224
+ * React components using `observer()` re-render automatically when
225
+ * any field changes — no manual subscription or polling needed.
226
+ *
227
+ * ```tsx
228
+ * import { observer } from 'mobx-react-lite';
229
+ *
230
+ * const SyncIndicator = observer(() => {
231
+ * if (sync.syncStatus.state === 'syncing') return <Spinner />;
232
+ * if (sync.syncStatus.state === 'error') return <Error msg={sync.syncStatus.error} />;
233
+ * if (sync.syncStatus.state === 'offline') return <OfflineBadge />;
234
+ * return null;
235
+ * });
236
+ * ```
237
+ */
238
+ readonly syncStatus: SyncStatus;
239
+ /** The underlying schema */
240
+ readonly schema: Schema<S>;
241
+ /**
242
+ * A real-time presence livestream — who else is connected on this engine's
243
+ * sync groups, what they're doing, and a write surface for announcing this
244
+ * user's own activity. It rides the engine's existing WebSocket; opening a
245
+ * participant for presence does not open a second socket. See
246
+ * {@link PresenceStream}.
247
+ *
248
+ * The reference is stable for the engine's lifetime — the underlying connection
249
+ * is rotated on `dispose()`, but this object stays the same.
250
+ */
251
+ readonly presence: PresenceStream;
252
+ /**
253
+ * @internal The supported coordination API is `ablo.<model>.claim`. This
254
+ * accessor is the internal stream that surface is built on and is not part of
255
+ * the public API.
256
+ *
257
+ * A cooperative-mutex layer over presence — announce "I'm about to do X on Y"
258
+ * so peers can yield before colliding. It uses the same socket as entity sync.
259
+ */
260
+ readonly claims: ClaimResource;
261
+ /**
262
+ * Canonical low-level mutation API. Every untyped model write compiles
263
+ * down to `commits.create(...)`.
264
+ */
265
+ readonly commits: CommitResource;
266
+ /**
267
+ * Capture a context-staleness watermark over a set of entities.
268
+ * Returns a flat snapshot with `stamp` (thread into writes as
269
+ * `readAt`), `signal` (aborts on any captured-entity delta), and
270
+ * `onChange` (callback form). Reads from the engine's InstanceCache;
271
+ * subscription is on the engine's existing transport.
272
+ *
273
+ * Use before an LLM call to prevent the model from completing
274
+ * against now-stale data:
275
+ * ```ts
276
+ * const snap = engine.snapshot({ sections: report.sectionIds });
277
+ * await streamText({ messages, signal: snap.signal });
278
+ * ```
279
+ */
280
+ snapshot<ModelName extends keyof S & string>(entities: Readonly<Record<ModelName, string | readonly string[]>>): Snapshot<Schema<S>, ModelName>;
281
+ /**
282
+ * Subscribe to pushed frames — deltas, presence updates, claim grants and
283
+ * losses, connection changes. Durable: the subscription survives the
284
+ * socket being rebuilt across reconnects, and one made before the first
285
+ * connection starts delivering when it opens. Returns the unsubscribe
286
+ * function. App-specific collaboration events ride the store's own typed
287
+ * map — see `_store`.
288
+ */
289
+ subscribe<K extends keyof CoreSyncEventMap>(event: K, handler: (...args: CoreSyncEventMap[K]) => void): () => void;
290
+ /**
291
+ * The internal store. It implements {@link SyncStoreContract} — pass it to
292
+ * `SyncContext.Provider` so the SDK's `useModel` / `useModels` / `useMutations`
293
+ * hooks can reach it.
294
+ */
295
+ readonly _store: SyncStoreContract;
296
+ /** The InstanceCache — for demand loaders and direct pool operations. */
297
+ readonly _pool: InstanceCache;
298
+ /**
299
+ * The SyncWebSocket handle — for collaboration events (selection, cursor
300
+ * broadcast). Present for the client's whole lifetime: the connection object
301
+ * is built with the store and holds no socket until `connect()`, so there is
302
+ * no window in which this is absent and nothing needs to guard for one.
303
+ */
304
+ readonly _ws: SyncWebSocket;
305
+ };
306
+ /**
307
+ * The reactive-read client a `useAblo` selector receives. The same surface as
308
+ * {@link AbloClient}, except model reads are typed as reactive rows
309
+ * ({@link InferRow}: data fields + computeds, no relation accessors, no model
310
+ * methods) — the shape a reactive read actually delivers after
311
+ * `toReactiveSnapshot()`. Reading `row.blocks` off a reactive read is a
312
+ * compile error here instead of a silent runtime `undefined`; compose
313
+ * relations through selectors or hooks that resolve the pool's instance.
314
+ */
315
+ export type AbloReads<S extends SchemaRecord> = Omit<AbloClient<S>, keyof S & string> & {
316
+ readonly [K in keyof S & string]: ModelOperations<InferRow<Schema<S>, K>, InferCreate<Schema<S>, K>>;
317
+ };
package/dist/client.js ADDED
@@ -0,0 +1,13 @@
1
+ /**
2
+ * The shape of the reactive client — what `Ablo({ schema, apiKey })` hands back.
3
+ *
4
+ * This module owns the declaration; `./Ablo.ts` aliases it as `Ablo<S>` so the
5
+ * factory, the type, and the `Ablo.*` namespace keep merging under one name.
6
+ * The split is what keeps the composition root readable: the contract a caller
7
+ * writes against lives here, the wiring that satisfies it lives there.
8
+ *
9
+ * Type-only, with no runtime imports — the same property that lets `options.ts`
10
+ * and `resourceTypes.ts` be referenced from the HTTP client without importing
11
+ * the factory back and creating a cycle.
12
+ */
13
+ export {};
package/dist/core.d.ts ADDED
@@ -0,0 +1,35 @@
1
+ /**
2
+ * The framework-extension entry point of this package. Import from here only
3
+ * when you are building on top of the sync engine — wiring your own store and
4
+ * provider stack, writing a sync adapter, or driving a test harness. Everyday
5
+ * application code should use the `Ablo({ schema })` client from the package
6
+ * root instead; the primitives exported here are lower-level building blocks.
7
+ *
8
+ * The surface is deliberately narrow: it exposes only the types and classes an
9
+ * extension actually needs. Anything the engine does not export here is
10
+ * internal and may change.
11
+ */
12
+ export { BaseSyncedStore, type ModelConstructor, type ConcreteModelConstructor, } from './local/BaseSyncedStore.js';
13
+ export { SyncClient } from './local/SyncClient.js';
14
+ export { Database } from './local/Database.js';
15
+ export { InstanceCache, ModelScope } from './local/InstanceCache.js';
16
+ /** @deprecated `ObjectPool` was renamed to {@link InstanceCache} — the class is an
17
+ * identity-map cache of live model instances, not a reuse pool. This alias keeps existing
18
+ * imports working and will be removed in a future major version. */
19
+ export { InstanceCache as ObjectPool } from './local/InstanceCache.js';
20
+ export { Model } from './local/Model.js';
21
+ export { LazyReferenceCollection, type LazyCollectionOptions, } from './local/LazyReferenceCollection.js';
22
+ export { ModelRegistry, getActiveRegistry, } from './local/ModelRegistry.js';
23
+ export { postQuery, type PostQueryOptions } from './local/query/client.js';
24
+ export { computeFKDepthPriority } from './local/client/schemaConfig.js';
25
+ export type { SyncLogger, SyncObservabilityProvider, MutationExecutor, SessionErrorDetector, OnlineStatusProvider, MutationCommitResult, MutationOperation, MutationOptions, } from './local/interfaces/index.js';
26
+ export type { MutationCommitResult as CommitResult, } from './local/interfaces/index.js';
27
+ export { SyncWebSocket, type SyncDelta, type SyncWebSocketOptions, } from './local/sync/SyncWebSocket.js';
28
+ export { BootstrapFetcher } from './local/sync/BootstrapFetcher.js';
29
+ /** @deprecated `BootstrapHelper` was renamed to {@link BootstrapFetcher}. This alias keeps
30
+ * existing imports working and will be removed in a future major version. */
31
+ export { BootstrapFetcher as BootstrapHelper } from './local/sync/BootstrapFetcher.js';
32
+ export { createClaimStream, type AttachableClaimStream, type ClaimStreamConfig, } from './local/sync/createClaimStream.js';
33
+ export { awaitClaimGrant, type GrantTransport, } from '@abloatai/transaction/coordination/awaitClaimGrant';
34
+ export { LoadStrategy } from '@abloatai/transaction/types';
35
+ export type { InternalAbloOptions } from './local/client/options.js';
package/dist/core.js ADDED
@@ -0,0 +1,48 @@
1
+ /**
2
+ * The framework-extension entry point of this package. Import from here only
3
+ * when you are building on top of the sync engine — wiring your own store and
4
+ * provider stack, writing a sync adapter, or driving a test harness. Everyday
5
+ * application code should use the `Ablo({ schema })` client from the package
6
+ * root instead; the primitives exported here are lower-level building blocks.
7
+ *
8
+ * The surface is deliberately narrow: it exposes only the types and classes an
9
+ * extension actually needs. Anything the engine does not export here is
10
+ * internal and may change.
11
+ */
12
+ // The base store class, plus the constructor shapes that subclasses reference.
13
+ export { BaseSyncedStore, } from './local/BaseSyncedStore.js';
14
+ // Core infrastructure classes
15
+ export { SyncClient } from './local/SyncClient.js';
16
+ export { Database } from './local/Database.js';
17
+ export { InstanceCache, ModelScope } from './local/InstanceCache.js';
18
+ /** @deprecated `ObjectPool` was renamed to {@link InstanceCache} — the class is an
19
+ * identity-map cache of live model instances, not a reuse pool. This alias keeps existing
20
+ * imports working and will be removed in a future major version. */
21
+ export { InstanceCache as ObjectPool } from './local/InstanceCache.js';
22
+ export { Model } from './local/Model.js';
23
+ export { LazyReferenceCollection, } from './local/LazyReferenceCollection.js';
24
+ export { ModelRegistry, getActiveRegistry, } from './local/ModelRegistry.js';
25
+ // A lower-level network read primitive. Prefer `ablo.<model>.list(...)` for
26
+ // ordinary reads; reach for this only when writing a custom on-demand loader.
27
+ export { postQuery } from './local/query/client.js';
28
+ // Computes a dependency-safe ordering for a set of models by walking their
29
+ // foreign-key relationships, so writes commit parents before children. Used by
30
+ // schema-aware test fixtures and scaffolding tools.
31
+ export { computeFKDepthPriority } from './local/client/schemaConfig.js';
32
+ // The sync layer: the WebSocket wrapper and the delta shape it carries. Needed
33
+ // when writing a sync adapter or a multi-participant test harness.
34
+ export { SyncWebSocket, } from './local/sync/SyncWebSocket.js';
35
+ export { BootstrapFetcher } from './local/sync/BootstrapFetcher.js';
36
+ /** @deprecated `BootstrapHelper` was renamed to {@link BootstrapFetcher}. This alias keeps
37
+ * existing imports working and will be removed in a future major version. */
38
+ export { BootstrapFetcher as BootstrapHelper } from './local/sync/BootstrapFetcher.js';
39
+ // The lower-level claim-coordination primitives behind the `ablo.<model>.claim`
40
+ // API. `createClaimStream` builds the announce-and-await machinery on top of a
41
+ // `SyncWebSocket`; `awaitClaimGrant` coordinates fair, first-in-first-out
42
+ // grants. These are for extension code and test harnesses; ordinary
43
+ // application code should use `ablo.<model>.claim`.
44
+ export { createClaimStream, } from './local/sync/createClaimStream.js';
45
+ export { awaitClaimGrant, } from '@abloatai/transaction/coordination/awaitClaimGrant';
46
+ // An enum naming the strategies for loading a model's data. Referenced when
47
+ // registering models in extension code.
48
+ export { LoadStrategy } from '@abloatai/transaction/types';
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Public human-facing local-state capability.
3
+ *
4
+ * The plugin and its local-state runtime belong to @abloatai/humans. The
5
+ * shared settlement package supplies only the handoff identity and wire
6
+ * contracts.
7
+ */
8
+ import type { PluginContext, AppliedChange } from './plugin.js';
9
+ import { type AttachablePresenceStream } from './presenceStream.js';
10
+ import { kStoreCluster, type InternalAbloOptions, type StoreCluster } from './local/client/storeCluster.js';
11
+ export interface HumansSurface {
12
+ readonly presence: AttachablePresenceStream;
13
+ readonly [kStoreCluster]?: StoreCluster;
14
+ }
15
+ export declare function humans(): {
16
+ readonly id: "humans";
17
+ readonly requires: {
18
+ readonly duplex: true;
19
+ };
20
+ readonly materialises: true;
21
+ readonly stages: {
22
+ readonly apply: ({ changes }: {
23
+ readonly changes: readonly AppliedChange[];
24
+ }) => void;
25
+ };
26
+ readonly init: (context: PluginContext<InternalAbloOptions>) => HumansSurface;
27
+ };
28
+ export type { AbloClient, AbloReads } from './client.js';
package/dist/humans.js ADDED
@@ -0,0 +1,34 @@
1
+ import { AbloValidationError } from '@abloatai/transaction/errors';
2
+ import { createPresenceStream } from './presenceStream.js';
3
+ import { buildStoreCluster, kStoreCluster, } from './local/client/storeCluster.js';
4
+ export function humans() {
5
+ let applyChanges = null;
6
+ return {
7
+ id: 'humans',
8
+ requires: { duplex: true },
9
+ materialises: true,
10
+ stages: {
11
+ apply: ({ changes }) => {
12
+ applyChanges?.(changes);
13
+ },
14
+ },
15
+ init: (context) => {
16
+ const cluster = buildStoreCluster(context);
17
+ if (cluster) {
18
+ if (applyChanges) {
19
+ throw new AbloValidationError('This humans() instance is already installed on a client. ' +
20
+ 'Construct a fresh humans() for each Ablo({ ... }) call.', { code: 'invalid_options', param: 'plugins' });
21
+ }
22
+ applyChanges = (changes) => { cluster.store.applyChangesToPool(changes); };
23
+ }
24
+ return {
25
+ presence: createPresenceStream({
26
+ participantId: context.participant?.id ?? '',
27
+ syncGroups: [...(context.syncGroups ?? [])],
28
+ isAgent: context.participant?.kind === 'agent',
29
+ }, context.transport ?? null),
30
+ ...(cluster ? { [kStoreCluster]: cluster } : {}),
31
+ };
32
+ },
33
+ };
34
+ }
@@ -0,0 +1,10 @@
1
+ export { Ablo } from './Ablo.js';
2
+ export type { AbloOptions, AbloReads, CredentialProvider, InternalAbloOptions, ModelClaim, ModelTarget, } from './Ablo.js';
3
+ export { humans, type HumansSurface } from './humans.js';
4
+ export type { AbloClient } from './client.js';
5
+ export type { AbloPlugin, MergedSurface, PipelineStage, PluginById, TransportCapabilities, } from './plugin.js';
6
+ export { defineMutators, type MutatorDefs, type MutatorFn, } from './local/mutators/defineMutators.js';
7
+ export { createTransaction, type Transaction, type ReaderFindOptions, } from './local/mutators/Transaction.js';
8
+ export { ClaimLog, formatClaim, formatConflict, type ClaimLogEntry, } from './local/coordination/ClaimLog.js';
9
+ export { isStorageOpenTimeout, } from './local/stores/openIDBWithTimeout.js';
10
+ export type { CommitLatencySample, } from './local/transactions/mutations/commitLatency.js';
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ export { Ablo } from './Ablo.js';
2
+ export { humans } from './humans.js';
3
+ export { defineMutators, } from './local/mutators/defineMutators.js';
4
+ export { createTransaction, } from './local/mutators/Transaction.js';
5
+ export { ClaimLog, formatClaim, formatConflict, } from './local/coordination/ClaimLog.js';
6
+ export { isStorageOpenTimeout, } from './local/stores/openIDBWithTimeout.js';