@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,511 @@
1
+ /**
2
+ * MutationQueue manages the lifecycle of local writes on their way to the
3
+ * server: it applies each change optimistically, batches the writes made in one
4
+ * event-loop tick into a single commit, retries transient failures, and rolls
5
+ * back on permanent rejection.
6
+ *
7
+ * Key behaviours:
8
+ * - Optimistic updates with rollback on failure.
9
+ * - Configurable conflict resolution.
10
+ * - Microtask batching: transactions created in the same event-loop tick share
11
+ * a batch id and commit together in one round trip.
12
+ * - A dependency-injected executor, so several queues can coexist.
13
+ */
14
+ import { EventEmitter } from 'events';
15
+ import type { LocalModel } from '../../localModelContract.js';
16
+ import type { MutationPersistencePort } from '../../mutationPersistence.js';
17
+ import type { RuntimeContext } from '../../RuntimeContext.js';
18
+ import { type LogPositionPort } from '../../logPosition.js';
19
+ import type { WriteOptions } from '../../interfaces/index.js';
20
+ import type { StaleNotification, ReadDependency, TrackDependency } from '@abloatai/transaction/coordination/schema';
21
+ import { type MutationInput, type QueuedMutation, type UserContext } from './commitPayload.js';
22
+ import { type CommitOutboxScope } from '@abloatai/transaction/transactions/settlement/commitEnvelope';
23
+ import type { DurableWriteStore } from './durableWriteStore.js';
24
+ import { type LocalMutationPort } from './localMutation.js';
25
+ import { type CommitTransaction } from './commitLane.js';
26
+ export type { QueuedMutation, UserContext } from './commitPayload.js';
27
+ /**
28
+ * A pre-built, multi-operation commit submitted through
29
+ * `ablo.commits.create()`. Unlike the per-model {@link QueuedMutation} (see
30
+ * `./commitPayload.js`), the caller supplies the operations and the whole
31
+ * envelope commits atomically: the queue does not coalesce it, reorder its
32
+ * operations for foreign keys, or apply it optimistically. It runs through the
33
+ * same `mutationExecutor.commit()` as the model batch path, so its
34
+ * retry-on-reconnect behaviour is identical.
35
+ */
36
+ interface ConflictResolution {
37
+ strategy: 'last-write-wins' | 'merge' | 'reject' | 'custom';
38
+ resolver?: (local: MutationInput | undefined, remote: MutationInput) => MutationInput;
39
+ }
40
+ export interface MutationQueueConfig {
41
+ /** Shared client position (see logPosition.ts). One per client. */
42
+ position?: LogPositionPort;
43
+ /** The owning client's runtime. Defaults to the module-global bridge. */
44
+ runtime?: RuntimeContext;
45
+ maxBatchSize: number;
46
+ batchDelay: number;
47
+ maxRetries: number;
48
+ conflictResolution: ConflictResolution;
49
+ enablePersistence: boolean;
50
+ enableOptimistic: boolean;
51
+ /** Local adapter for applying and rolling back local writes. */
52
+ localMutationPort?: LocalMutationPort;
53
+ maxExecutingTransactions: number;
54
+ deltaConfirmationTimeout: number;
55
+ /**
56
+ * Exponential backoff for retryable server responses (HTTP 429/503).
57
+ * `baseMs` is the first retry delay; each subsequent attempt doubles
58
+ * up to `capMs`. Final delay = min(capMs, baseMs * 2^(attempt-1)) +
59
+ * up to 100ms of jitter. Defaults: 200ms / 1500ms.
60
+ */
61
+ retryBackoff: {
62
+ baseMs: number;
63
+ capMs: number;
64
+ };
65
+ /**
66
+ * How long, in milliseconds, to wait after the connection drops before
67
+ * failing any in-flight commit-lane transaction with an
68
+ * {@link AbloConnectionError}. Brief disconnects, such as a server restart
69
+ * or mobile network jitter, are absorbed transparently; only a disconnect
70
+ * that outlasts this window surfaces as a failure. Set it lower for
71
+ * interactive use (for example 10 seconds for chat) and higher for
72
+ * background batch work. Defaults to 30 seconds.
73
+ *
74
+ * Without this deadline, `commits.create({ wait: 'confirmed' })` would wait
75
+ * forever if the connection died while a commit was in flight.
76
+ */
77
+ commitOfflineGraceMs: number;
78
+ /**
79
+ * How long, in milliseconds, to wait for the transport to acknowledge a
80
+ * dispatched commit before treating the silence as a retryable no-receipt
81
+ * failure. A transport that never answers — a half-open socket, a dropped
82
+ * response frame — would otherwise hold the commit in flight forever, and
83
+ * with it the client's staged-batch lock: every later write in the session
84
+ * queues silently behind the unanswered one. The envelope's idempotency key
85
+ * is stable across retries, so a commit the server DID apply before the
86
+ * timeout is deduplicated on the retry rather than double-applied.
87
+ * Defaults to 30 seconds. Set `0` to disable the bound.
88
+ */
89
+ commitDispatchTimeoutMs: number;
90
+ }
91
+ export declare class MutationQueue extends EventEmitter {
92
+ private static readonly DURABLE_REPLAY_WINDOW_MS;
93
+ private store;
94
+ private lastPermanentErrorSig?;
95
+ private _mutationExecutor;
96
+ private get mutationExecutor();
97
+ private readonly runtime;
98
+ /** Durable transaction journal owned by this queue, before commit sealing. */
99
+ private persistence;
100
+ private deferredMutations;
101
+ private pendingPersistenceStages;
102
+ private persistenceStageScheduled;
103
+ private pendingDrainPromise;
104
+ private executionQueue;
105
+ private isProcessing;
106
+ private processTimer?;
107
+ private processScheduled;
108
+ private createdTransactions;
109
+ private commitScheduled;
110
+ private inFlightByModel;
111
+ private pendingMergeByModel;
112
+ private deferredDeletesByCreate;
113
+ private commitLane;
114
+ private commitStore;
115
+ /**
116
+ * Small race buffer for authoritative echoes that arrive before the queued
117
+ * mutation receipt. The forward and WAL stream are independent channels, so
118
+ * either can win without changing the settlement result.
119
+ */
120
+ private recentDeltaCorrelations;
121
+ /**
122
+ * Client-facing confirmation deadlines for source-forwarded writes. These
123
+ * timers settle only the caller waiting for `confirmed`; the accepted write
124
+ * remains in `awaiting_delta`, with its durable envelope intact, until the
125
+ * authoritative WAL echo arrives.
126
+ */
127
+ private replicationLagTimeouts;
128
+ private replicationLagErrors;
129
+ private commitProcessing;
130
+ private lastCommitSequence;
131
+ private durableReplayBlock;
132
+ /** Browser-backed strict outbox; absent for standalone/in-memory consumers. */
133
+ private commitOutbox;
134
+ private commitOutboxScope;
135
+ private get commitTransportContext();
136
+ private get commitLaneContext();
137
+ private get commitReceiptContext();
138
+ private get commitApiContext();
139
+ private get modelMutationContext();
140
+ private get queueCoalescingContext();
141
+ private get batchProcessingContext();
142
+ private get failureHandlingContext();
143
+ private get conflictPolicyContext();
144
+ private get processingSchedulerContext();
145
+ private get pendingDrainContext();
146
+ private get durableCommitRestoreContext();
147
+ private get persistenceContext();
148
+ private nextCommitSequence;
149
+ private emitCommitLifecycle;
150
+ private assertDurableReplayOpen;
151
+ private assertEnvelopeInsideReplayWindow;
152
+ private computePriorityScore;
153
+ private ensureDerivedFields;
154
+ private entityKey;
155
+ /** Collision-safe receipt target identity across models sharing a row id. */
156
+ private receiptTargetKey;
157
+ /**
158
+ * Relates stale notifications back to write targets without assuming the
159
+ * server's canonical model name uses the same spelling as the public schema
160
+ * key (`Task` versus `tasks`). Exact `(model,id)` wins; a globally unique id
161
+ * is the compatibility fallback. An ambiguous same-id cross-model mismatch
162
+ * is deliberately left unclassified, so it cannot falsely settle a queued
163
+ * write. A notification with no write-target id (or an explicit group) is a
164
+ * declared-read conflict and holds the whole batch.
165
+ */
166
+ private classifyReceiptNotifications;
167
+ private resolveConfirmation;
168
+ private takeUnsentCreateForModel;
169
+ private cancelUnsentCreateForDelete;
170
+ private findCreateBarrierForDelete;
171
+ private completeLocalDelete;
172
+ private deferDeleteUntilCreateSettles;
173
+ private releaseDeferredDeletesForCreate;
174
+ private config;
175
+ private executingCount;
176
+ private readonly localMutationPort;
177
+ private commitNotifications;
178
+ /** Zero-row targets returned on a successful atomic commit receipt. */
179
+ private commitMissingIds;
180
+ private readonly deltaConfirmation;
181
+ private isConnectedFn;
182
+ private commitOfflineGraceTimer;
183
+ /**
184
+ * This client's place in the global order of sync deltas. The instance is
185
+ * shared: the client injects one, and a standalone queue creates its own. The
186
+ * queue advances the `acked` cursor as commit responses arrive, the store
187
+ * advances `applied` and `persisted`, and snapshots and claims read
188
+ * `readFloor`. See `../logPosition.js` for the full contract.
189
+ */
190
+ readonly position: LogPositionPort;
191
+ /** Applied-cursor alias, kept so the many internal read sites stay legible. */
192
+ private get lastSeenSyncId();
193
+ private noteAck;
194
+ private batchIndex;
195
+ /** Mints the request identity once; retry paths only read the stored value. */
196
+ private generateCommitIdempotencyKey;
197
+ /**
198
+ * Binds an ordered transaction batch to one wire-level idempotency key.
199
+ * Existing envelopes are validated and restored to their original order;
200
+ * they are never extended with newly queued work.
201
+ */
202
+ private ensureCommitEnvelope;
203
+ /** Bind the strict local outbox used before any mutation reaches the wire. */
204
+ setCommitOutbox(outbox: DurableWriteStore): void;
205
+ setCommitOutboxScope(scope: CommitOutboxScope): Promise<void>;
206
+ deferMutation(type: 'create' | 'update' | 'delete' | 'archive', model: LocalModel, capturedChanges?: Record<string, unknown>, writeOptions?: WriteOptions): void;
207
+ enqueueModelMutation(type: 'create' | 'update' | 'delete' | 'archive', model: LocalModel, context: UserContext, capturedChanges?: Record<string, unknown>, writeOptions?: WriteOptions): Promise<QueuedMutation>;
208
+ /** Attach the durable journal supplied by the local/materializer layer. */
209
+ setPersistence(persistence: MutationPersistencePort): void;
210
+ private persistQueuedTransaction;
211
+ private persistAndStage;
212
+ private removePersistedTransaction;
213
+ private settlePersistedFailure;
214
+ private sourceMutationIdsFor;
215
+ /** Atomically seals a commit before it is allowed onto the dispatch lane. */
216
+ private sealDurableCommit;
217
+ private removeDurableCommit;
218
+ private persistDurableCommitAcceptance;
219
+ private parseMutationCommitResult;
220
+ private dispatchCommitBounded;
221
+ private clearReplicationLagState;
222
+ /**
223
+ * Bounds the public `wait: 'confirmed'` promise without changing the
224
+ * accepted write's lifecycle. A lag timeout is not a rejection from the
225
+ * source database, so it must never emit `transaction:failed`, roll back
226
+ * optimistic state, or remove the durable replay envelope.
227
+ */
228
+ private scheduleReplicationLagTimeout;
229
+ private takeNextExecutionBatch;
230
+ private takePendingDrainBatch;
231
+ /**
232
+ * Resolvers for per-transaction `confirmation` promises. Populated in
233
+ * `attachConfirmation` at staging time, consumed by the constructor-time
234
+ * listeners on `transaction:completed` / `transaction:failed`. Kept off
235
+ * the QueuedMutation row so the store's iteration order stays plain-data
236
+ * and serialization-friendly.
237
+ */
238
+ private confirmationResolvers;
239
+ constructor(config?: Partial<MutationQueueConfig>);
240
+ /**
241
+ * Returns the in-flight confirmation promise for a given model and id. When
242
+ * several transactions match, it returns the most recent one's promise; when
243
+ * none is open it resolves immediately, which covers both "already confirmed"
244
+ * and "never staged".
245
+ *
246
+ * It considers the three non-terminal statuses in which the write can still
247
+ * be rolled back — `pending`, `executing`, and `awaiting_delta` — and ignores
248
+ * `completed` (already settled) and `failed`/`rolled_back` (already
249
+ * rejected). This complements the `confirmation` promise carried on a known
250
+ * {@link QueuedMutation}: use this method at call sites that hold a model
251
+ * returned by `ablo.<model>.create()` but never see the underlying
252
+ * transaction.
253
+ */
254
+ confirmationFor(modelName: string, modelId: string): Promise<void>;
255
+ /**
256
+ * Attaches a `confirmation` promise to a newly created transaction. Call this
257
+ * before the transaction is staged so a caller can `await tx.confirmation`
258
+ * immediately after a create, update, or delete returns. It is idempotent and
259
+ * returns early if one is already attached.
260
+ *
261
+ * It also attaches a no-op rejection handler. Most callers never await the
262
+ * confirmation, and without this the runtime would report an unhandled
263
+ * rejection when a write fails. Callers that do want to observe failure simply
264
+ * attach their own `.then`/`.catch`.
265
+ */
266
+ private attachConfirmation;
267
+ /**
268
+ * Registers a predicate the queue uses to check whether it is connected.
269
+ * While disconnected, confirmation timeouts re-schedule themselves instead of
270
+ * escalating, so a transaction is never rolled back merely because the client
271
+ * was briefly offline.
272
+ */
273
+ setConnectionChecker(fn: () => boolean): void;
274
+ /**
275
+ * Drives the offline-grace timer for in-flight commit-lane transactions.
276
+ *
277
+ * On `'disconnected'` it starts a one-shot timer of
278
+ * `config.commitOfflineGraceMs`. If that timer fires — meaning the disconnect
279
+ * outlasted the grace window — every commit-lane transaction still `pending`
280
+ * or `executing` is failed with an {@link AbloConnectionError}, so
281
+ * {@link waitForCommitReceipt} rejects within seconds instead of hanging.
282
+ *
283
+ * On `'connected'` it clears any pending grace timer. Brief disconnects are
284
+ * absorbed transparently; {@link processCommitLane} and
285
+ * {@link drainPending} resumes the work when the owner decides to drain.
286
+ */
287
+ setConnectionState(state: 'connected' | 'disconnected'): void;
288
+ private failInFlightCommitsOnOffline;
289
+ /**
290
+ * Binds the mutation executor for this queue instance. The owning client
291
+ * calls this right after construction, so commits made here always dispatch
292
+ * through this instance's connection even when several client instances exist
293
+ * in the same process.
294
+ */
295
+ setMutationExecutor(executor: import('../../interfaces/index.js').MutationExecutor): void;
296
+ /**
297
+ * Stages a transaction for commit. Transactions staged within the same
298
+ * event-loop tick are committed together.
299
+ */
300
+ private stageTransaction;
301
+ /**
302
+ * Schedules the staged transactions to commit on a microtask, so all
303
+ * transactions created synchronously within one tick are batched together.
304
+ */
305
+ private scheduleCommit;
306
+ /**
307
+ * Moves all staged transactions onto the execution queue, assigning them a
308
+ * single shared batch index so they commit together.
309
+ */
310
+ private commitCreatedTransactions;
311
+ /**
312
+ * Flushes every pending transaction in one commit, the fast path taken on
313
+ * reconnect. If transport fails, the transactions retain this exact commit
314
+ * envelope when they fall back to normal queue processing.
315
+ */
316
+ drainPending(): Promise<void>;
317
+ private drainPendingInternal;
318
+ create(model: LocalModel, context: UserContext, writeOptions?: WriteOptions, sourceMutationId?: string): Promise<QueuedMutation>;
319
+ update(model: LocalModel, context: UserContext, precomputedChanges?: Record<string, unknown>, writeOptions?: WriteOptions, sourceMutationId?: string): Promise<QueuedMutation>;
320
+ delete(model: LocalModel, context: UserContext, writeOptions?: WriteOptions, sourceMutationId?: string): Promise<QueuedMutation>;
321
+ uploadAttachment(_file: File, options: {
322
+ id: string;
323
+ [key: string]: unknown;
324
+ }, _context: UserContext): Promise<{
325
+ url: string;
326
+ } | null>;
327
+ batchUploadAttachments(_files: File[], items: {
328
+ id: string;
329
+ [key: string]: unknown;
330
+ }[], _context: UserContext): Promise<{
331
+ id: string;
332
+ url: string;
333
+ }[]>;
334
+ archive(model: LocalModel, context: UserContext, writeOptions?: WriteOptions, sourceMutationId?: string): Promise<QueuedMutation>;
335
+ unarchive(model: LocalModel, context: UserContext): Promise<QueuedMutation>;
336
+ private enqueue;
337
+ private scheduleProcessing;
338
+ private processBatch;
339
+ private rememberDeltaCorrelation;
340
+ private queuedCommitEchoSyncId;
341
+ private queuedCommitMatchesCorrelation;
342
+ private completeQueuedCommit;
343
+ /**
344
+ * Confirms awaiting writes. Hosted/anomaly receipts keep their sync-id
345
+ * threshold semantics; queued forwards require the exact server correlation.
346
+ */
347
+ onDeltaReceived(syncId: number, _transactionId?: string, correlationId?: string): void;
348
+ private scheduleDeltaConfirmationTimeout;
349
+ /**
350
+ * Resolves once the given transaction is confirmed and rejects if it fails.
351
+ * The confirming delta's timeout is handled by
352
+ * {@link scheduleDeltaConfirmationTimeout}.
353
+ */
354
+ waitForConfirmation(transactionId: string): Promise<void>;
355
+ hasClientMutationId(id: string): boolean;
356
+ /** Enqueues a pre-built atomic commit through the commit API coordinator. */
357
+ enqueueCommit(clientTxId: string, operations: CommitTransaction['operations'], options?: {
358
+ reads?: ReadDependency[] | null;
359
+ track?: TrackDependency[] | null;
360
+ }): Promise<void>;
361
+ private processCommitLane;
362
+ waitForCommitReceipt(clientTxId: string): Promise<{
363
+ lastSyncId: number;
364
+ notifications?: StaleNotification[];
365
+ missingIds?: string[];
366
+ }>;
367
+ private isReorderPayload;
368
+ private isPermanentError;
369
+ private isDefinitiveRejection;
370
+ private handleFailure;
371
+ handleConflict(transaction: QueuedMutation, serverData: MutationInput): Promise<void>;
372
+ private applyOptimisticCreate;
373
+ private applyOptimisticUpdate;
374
+ private applyOptimisticDelete;
375
+ private rollbackOptimistic;
376
+ private deserializeLegacyPendingMutation;
377
+ loadPersistedTransactions(persistence: MutationPersistencePort, sealedMutationIds?: ReadonlySet<string>): Promise<void>;
378
+ restoreDurableCommits(): Promise<Set<string>>;
379
+ private deserializeTransaction;
380
+ cancelTransactionsForModel(modelId: string, transactionType?: string): QueuedMutation[];
381
+ /**
382
+ * Cancels pending transactions for child rows that reference a deleted parent,
383
+ * used to cascade a parent deletion. The caller supplies the foreign-key
384
+ * relationship; this method performs the cancellation.
385
+ *
386
+ * @param childModelName - The child model type (for example 'Block').
387
+ * @param foreignKey - The foreign-key property name (for example 'sectionId').
388
+ * @param parentId - The deleted parent's id.
389
+ * @returns The number of transactions cancelled.
390
+ */
391
+ cancelTransactionsByForeignKey(childModelName: string, foreignKey: string, parentId: string): number;
392
+ /**
393
+ * Returns the number of transactions still pending or executing.
394
+ */
395
+ getOutstandingTransactionCount(): number;
396
+ getOutstandingTransactions(): readonly QueuedMutation[];
397
+ /** Generates a unique local transaction id. */
398
+ private generateId;
399
+ private mergeData;
400
+ private extractCreateData;
401
+ private mapChangesToInput;
402
+ private extractUpdateData;
403
+ private extractPreviousData;
404
+ /** Returns a snapshot of queue counts and the current configuration. */
405
+ getStats(): {
406
+ pending: number;
407
+ executing: number;
408
+ completed: number;
409
+ failed: number;
410
+ optimistic: number;
411
+ totalTransactions: number;
412
+ batchIndex: number;
413
+ config: {
414
+ /** Shared client position (see logPosition.ts). One per client. */
415
+ position?: LogPositionPort;
416
+ /** The owning client's runtime. Defaults to the module-global bridge. */
417
+ runtime?: RuntimeContext;
418
+ maxBatchSize: number;
419
+ batchDelay: number;
420
+ maxRetries: number;
421
+ conflictResolution: ConflictResolution;
422
+ enablePersistence: boolean;
423
+ enableOptimistic: boolean;
424
+ /** Local adapter for applying and rolling back local writes. */
425
+ localMutationPort?: LocalMutationPort;
426
+ maxExecutingTransactions: number;
427
+ deltaConfirmationTimeout: number;
428
+ /**
429
+ * Exponential backoff for retryable server responses (HTTP 429/503).
430
+ * `baseMs` is the first retry delay; each subsequent attempt doubles
431
+ * up to `capMs`. Final delay = min(capMs, baseMs * 2^(attempt-1)) +
432
+ * up to 100ms of jitter. Defaults: 200ms / 1500ms.
433
+ */
434
+ retryBackoff: {
435
+ baseMs: number;
436
+ capMs: number;
437
+ };
438
+ /**
439
+ * How long, in milliseconds, to wait after the connection drops before
440
+ * failing any in-flight commit-lane transaction with an
441
+ * {@link AbloConnectionError}. Brief disconnects, such as a server restart
442
+ * or mobile network jitter, are absorbed transparently; only a disconnect
443
+ * that outlasts this window surfaces as a failure. Set it lower for
444
+ * interactive use (for example 10 seconds for chat) and higher for
445
+ * background batch work. Defaults to 30 seconds.
446
+ *
447
+ * Without this deadline, `commits.create({ wait: 'confirmed' })` would wait
448
+ * forever if the connection died while a commit was in flight.
449
+ */
450
+ commitOfflineGraceMs: number;
451
+ /**
452
+ * How long, in milliseconds, to wait for the transport to acknowledge a
453
+ * dispatched commit before treating the silence as a retryable no-receipt
454
+ * failure. A transport that never answers — a half-open socket, a dropped
455
+ * response frame — would otherwise hold the commit in flight forever, and
456
+ * with it the client's staged-batch lock: every later write in the session
457
+ * queues silently behind the unanswered one. The envelope's idempotency key
458
+ * is stable across retries, so a commit the server DID apply before the
459
+ * timeout is deduplicated on the retry rather than double-applied.
460
+ * Defaults to 30 seconds. Set `0` to disable the bound.
461
+ */
462
+ commitDispatchTimeoutMs: number;
463
+ };
464
+ };
465
+ /**
466
+ * Returns detailed internal state — pending, executing, and awaiting-delta
467
+ * transactions — to help diagnose delta-confirmation issues.
468
+ */
469
+ getDebugInfo(): {
470
+ lastSeenSyncId: number;
471
+ awaitingDeltaCount: number;
472
+ awaitingDeltaTransactions: {
473
+ id: string;
474
+ type: "update" | "create" | "delete" | "archive" | "unarchive";
475
+ modelName: string;
476
+ modelId: string;
477
+ syncIdNeeded: number | undefined;
478
+ createdAt: number;
479
+ age: number;
480
+ }[];
481
+ pendingTransactions: {
482
+ id: string;
483
+ type: "update" | "create" | "delete" | "archive" | "unarchive";
484
+ modelName: string;
485
+ modelId: string;
486
+ }[];
487
+ executingTransactions: {
488
+ id: string;
489
+ type: "update" | "create" | "delete" | "archive" | "unarchive";
490
+ modelName: string;
491
+ modelId: string;
492
+ }[];
493
+ };
494
+ /** Merges the given options into the queue's configuration. */
495
+ setConfig(config: Partial<MutationQueueConfig>): void;
496
+ /**
497
+ * Re-emits an incoming sync delta on the `sync:delta` event for the store to
498
+ * apply. Because rows use stable ids, no id reconciliation is needed here.
499
+ */
500
+ handleSyncDelta(delta: {
501
+ id: string;
502
+ modelName: string;
503
+ action: string;
504
+ data: any;
505
+ }): boolean;
506
+ /**
507
+ * Releases the queue's resources: rolls back outstanding optimistic updates,
508
+ * clears all timers and stored transactions, and removes event listeners.
509
+ */
510
+ dispose(): void;
511
+ }