@abloatai/ablo 0.34.1 → 0.36.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 (536) hide show
  1. package/AGENTS.md +2 -1
  2. package/CHANGELOG.md +758 -5
  3. package/README.md +56 -502
  4. package/bin/ablo.cjs +39 -0
  5. package/dist/BaseSyncedStore.d.ts +176 -48
  6. package/dist/BaseSyncedStore.js +346 -214
  7. package/dist/Database.d.ts +17 -44
  8. package/dist/Database.js +96 -79
  9. package/dist/InstanceCache.d.ts +31 -6
  10. package/dist/InstanceCache.js +65 -30
  11. package/dist/LazyReferenceCollection.d.ts +3 -3
  12. package/dist/LazyReferenceCollection.js +4 -4
  13. package/dist/Model.d.ts +23 -13
  14. package/dist/Model.js +27 -17
  15. package/dist/ModelRegistry.d.ts +8 -4
  16. package/dist/ModelRegistry.js +20 -18
  17. package/dist/NetworkMonitor.d.ts +3 -1
  18. package/dist/NetworkMonitor.js +7 -5
  19. package/dist/{SyncEngineContext.d.ts → RuntimeContext.d.ts} +20 -13
  20. package/dist/{SyncEngineContext.js → RuntimeContext.js} +11 -12
  21. package/dist/SyncClient.d.ts +47 -47
  22. package/dist/SyncClient.js +215 -156
  23. package/dist/ai-sdk/coordinatedTool.d.ts +2 -2
  24. package/dist/ai-sdk/coordinatedTool.js +1 -1
  25. package/dist/ai-sdk/coordinationContext.d.ts +2 -2
  26. package/dist/ai-sdk/coordinationContext.js +1 -1
  27. package/dist/ai-sdk/wrap.d.ts +3 -3
  28. package/dist/ai-sdk/wrap.js +2 -2
  29. package/dist/auth/index.d.ts +1 -156
  30. package/dist/auth/index.js +8 -301
  31. package/dist/client/Ablo.d.ts +42 -287
  32. package/dist/client/Ablo.js +129 -963
  33. package/dist/client/abloClient.d.ts +309 -0
  34. package/dist/client/abloClient.js +13 -0
  35. package/dist/client/clientPrelude.d.ts +52 -0
  36. package/dist/client/clientPrelude.js +60 -0
  37. package/dist/client/consoleLogger.d.ts +2 -2
  38. package/dist/client/coreClient.d.ts +60 -0
  39. package/dist/client/coreClient.js +118 -0
  40. package/dist/client/createInternalComponents.d.ts +8 -4
  41. package/dist/client/createInternalComponents.js +17 -10
  42. package/dist/client/createModelProxy.d.ts +98 -373
  43. package/dist/client/createModelProxy.js +233 -139
  44. package/dist/client/humans.d.ts +69 -0
  45. package/dist/client/humans.js +78 -0
  46. package/dist/client/modelRegistration.d.ts +1 -1
  47. package/dist/client/modelRegistration.js +9 -9
  48. package/dist/client/options.d.ts +73 -17
  49. package/dist/client/reactiveEngine.d.ts +53 -0
  50. package/dist/client/reactiveEngine.js +688 -0
  51. package/dist/client/resourceTypes.d.ts +9 -250
  52. package/dist/client/resourceTypes.js +8 -5
  53. package/dist/client/schemaConfig.d.ts +4 -4
  54. package/dist/client/schemaConfig.js +6 -2
  55. package/dist/client/storeCluster.d.ts +47 -0
  56. package/dist/client/storeCluster.js +118 -0
  57. package/dist/client/storeLifecycle.d.ts +61 -0
  58. package/dist/client/storeLifecycle.js +231 -0
  59. package/dist/client/validateAbloOptions.d.ts +3 -2
  60. package/dist/client/validateAbloOptions.js +1 -1
  61. package/dist/client/wsMutationExecutor.d.ts +3 -3
  62. package/dist/client/wsMutationExecutor.js +3 -3
  63. package/dist/context.d.ts +22 -9
  64. package/dist/context.js +33 -9
  65. package/dist/coordination/ClaimLog.d.ts +26 -0
  66. package/dist/coordination/ClaimLog.js +32 -0
  67. package/dist/coordination/index.d.ts +1 -15
  68. package/dist/coordination/index.js +8 -31
  69. package/dist/core/index.d.ts +3 -3
  70. package/dist/core/index.js +2 -2
  71. package/dist/docs/catalog.d.ts +72 -0
  72. package/dist/docs/catalog.js +230 -0
  73. package/dist/docs/index.d.ts +10 -0
  74. package/dist/docs/index.js +10 -0
  75. package/dist/environment.d.ts +1 -40
  76. package/dist/environment.js +8 -37
  77. package/dist/index.d.ts +44 -36
  78. package/dist/index.js +30 -22
  79. package/dist/interfaces/index.d.ts +44 -134
  80. package/dist/keys/index.d.ts +1 -77
  81. package/dist/keys/index.js +8 -190
  82. package/dist/mutators/{RecordingTransaction.d.ts → RecordingMutation.d.ts} +4 -4
  83. package/dist/mutators/{RecordingTransaction.js → RecordingMutation.js} +2 -2
  84. package/dist/mutators/Transaction.d.ts +1 -1
  85. package/dist/mutators/Transaction.js +1 -1
  86. package/dist/mutators/UndoManager.d.ts +6 -6
  87. package/dist/mutators/UndoManager.js +5 -5
  88. package/dist/mutators/defineMutators.d.ts +3 -3
  89. package/dist/mutators/defineMutators.js +1 -1
  90. package/dist/mutators/inverseOp.js +2 -2
  91. package/dist/mutators/mutateActions.d.ts +3 -3
  92. package/dist/mutators/mutateActions.js +1 -1
  93. package/dist/mutators/readerActions.d.ts +1 -1
  94. package/dist/mutators/undoApply.d.ts +1 -1
  95. package/dist/mutators/undoApply.js +1 -1
  96. package/dist/policy/index.d.ts +2 -2
  97. package/dist/policy/index.js +1 -1
  98. package/dist/query/client.d.ts +5 -2
  99. package/dist/query/client.js +10 -9
  100. package/dist/query/types.d.ts +6 -41
  101. package/dist/query/types.js +2 -2
  102. package/dist/react/AbloProvider.d.ts +18 -8
  103. package/dist/react/AbloProvider.js +10 -9
  104. package/dist/react/context.d.ts +3 -3
  105. package/dist/react/context.js +1 -1
  106. package/dist/react/createAbloReact.d.ts +56 -0
  107. package/dist/react/createAbloReact.js +51 -0
  108. package/dist/react/index.d.ts +6 -5
  109. package/dist/react/index.js +6 -3
  110. package/dist/react/internalContext.d.ts +1 -1
  111. package/dist/react/useAblo.d.ts +12 -5
  112. package/dist/react/useAblo.js +26 -8
  113. package/dist/react/useCurrentUserId.js +1 -1
  114. package/dist/react/useErrorListener.js +1 -1
  115. package/dist/react/useMutationFailureListener.d.ts +2 -2
  116. package/dist/react/useMutationFailureListener.js +1 -1
  117. package/dist/react/useMutators.d.ts +3 -3
  118. package/dist/react/useMutators.js +3 -3
  119. package/dist/react/useUndoScope.d.ts +5 -5
  120. package/dist/react/useUndoScope.js +1 -1
  121. package/dist/schema/coordination.d.ts +69 -10
  122. package/dist/schema/coordination.js +90 -9
  123. package/dist/schema/ddl.js +2 -2
  124. package/dist/schema/diff.d.ts +1 -1
  125. package/dist/schema/generate.js +1 -1
  126. package/dist/schema/index.d.ts +11 -10
  127. package/dist/schema/index.js +22 -18
  128. package/dist/schema/queries.d.ts +27 -27
  129. package/dist/schema/queries.js +23 -23
  130. package/dist/schema/select.d.ts +3 -3
  131. package/dist/schema/select.js +6 -3
  132. package/dist/schema/serialize.d.ts +15 -6
  133. package/dist/schema/serialize.js +20 -3
  134. package/dist/schema/sugar.d.ts +6 -7
  135. package/dist/schema/sugar.js +9 -12
  136. package/dist/schema/syncDeltaRow.d.ts +4 -152
  137. package/dist/schema/syncDeltaRow.js +4 -105
  138. package/dist/server/adapter.d.ts +18 -1
  139. package/dist/server/commit.d.ts +10 -16
  140. package/dist/server/index.d.ts +1 -1
  141. package/dist/server/index.js +1 -1
  142. package/dist/server/readConfig.d.ts +1 -1
  143. package/dist/source/adapter.d.ts +7 -5
  144. package/dist/source/adapter.js +7 -5
  145. package/dist/source/adapters/drizzle.d.ts +1 -1
  146. package/dist/source/adapters/drizzle.js +2 -2
  147. package/dist/source/adapters/kysely.d.ts +1 -1
  148. package/dist/source/adapters/kysely.js +1 -1
  149. package/dist/source/adapters/kyselyMutationCore.d.ts +1 -1
  150. package/dist/source/adapters/kyselyMutationCore.js +2 -2
  151. package/dist/source/adapters/memory.js +1 -1
  152. package/dist/source/adapters/prisma.d.ts +8 -3
  153. package/dist/source/adapters/prisma.js +1 -1
  154. package/dist/source/connector.js +1 -1
  155. package/dist/source/connectorProtocol.d.ts +2 -8
  156. package/dist/source/connectorProtocol.js +3 -2
  157. package/dist/source/contract.d.ts +29 -17
  158. package/dist/source/contract.js +27 -22
  159. package/dist/source/factory.d.ts +1 -1
  160. package/dist/source/idempotency.js +2 -2
  161. package/dist/source/index.d.ts +1 -0
  162. package/dist/source/index.js +3 -0
  163. package/dist/source/next.d.ts +1 -1
  164. package/dist/source/signing.d.ts +9 -2
  165. package/dist/source/signing.js +4 -1
  166. package/dist/source/types.d.ts +6 -4
  167. package/dist/source/types.js +1 -1
  168. package/dist/{core/storeContract.d.ts → storeContract.d.ts} +6 -6
  169. package/dist/{core → stores}/DatabaseManager.d.ts +3 -1
  170. package/dist/{core → stores}/DatabaseManager.js +14 -13
  171. package/dist/stores/ObjectStore.d.ts +1 -1
  172. package/dist/{core → stores}/StoreManager.d.ts +9 -26
  173. package/dist/{core → stores}/StoreManager.js +29 -77
  174. package/dist/stores/SyncActionStore.d.ts +4 -2
  175. package/dist/stores/SyncActionStore.js +11 -17
  176. package/dist/stores/syncAction.d.ts +26 -0
  177. package/dist/stores/syncAction.js +16 -0
  178. package/dist/surface.d.ts +3 -3
  179. package/dist/surface.js +6 -4
  180. package/dist/sync/BootstrapFetcher.d.ts +127 -6
  181. package/dist/sync/BootstrapFetcher.js +511 -83
  182. package/dist/sync/ConnectionManager.d.ts +6 -198
  183. package/dist/sync/ConnectionManager.js +6 -677
  184. package/dist/sync/OnDemandLoader.d.ts +5 -2
  185. package/dist/sync/OnDemandLoader.js +61 -21
  186. package/dist/sync/SubscriptionManager.d.ts +13 -2
  187. package/dist/sync/SubscriptionManager.js +23 -5
  188. package/dist/sync/SyncWebSocket.d.ts +27 -510
  189. package/dist/sync/SyncWebSocket.js +76 -954
  190. package/dist/sync/awaitClaimGrant.d.ts +4 -44
  191. package/dist/sync/awaitClaimGrant.js +4 -109
  192. package/dist/sync/bootstrapApply.d.ts +3 -0
  193. package/dist/sync/bootstrapApply.js +2 -2
  194. package/dist/sync/commitFrames.d.ts +6 -40
  195. package/dist/sync/commitFrames.js +6 -97
  196. package/dist/sync/contextPorts.d.ts +18 -0
  197. package/dist/sync/contextPorts.js +31 -0
  198. package/dist/sync/createClaimStream.d.ts +5 -49
  199. package/dist/sync/createClaimStream.js +5 -469
  200. package/dist/sync/createPresenceStream.d.ts +26 -4
  201. package/dist/sync/createPresenceStream.js +28 -20
  202. package/dist/sync/createSnapshot.d.ts +2 -2
  203. package/dist/sync/createSnapshot.js +1 -1
  204. package/dist/sync/credentialLifecycle.d.ts +5 -173
  205. package/dist/sync/credentialLifecycle.js +5 -320
  206. package/dist/sync/deltaPipeline.d.ts +13 -12
  207. package/dist/sync/deltaPipeline.js +21 -4
  208. package/dist/sync/groupChange.d.ts +3 -0
  209. package/dist/sync/groupChange.js +16 -14
  210. package/dist/sync/participants.d.ts +24 -6
  211. package/dist/sync/participants.js +32 -23
  212. package/dist/sync/schemaDrift.d.ts +55 -0
  213. package/dist/sync/schemaDrift.js +53 -0
  214. package/dist/sync/schemas.d.ts +23 -33
  215. package/dist/sync/schemas.js +29 -20
  216. package/dist/sync/syncPlan.d.ts +3 -3
  217. package/dist/sync/wsFrameHandlers.d.ts +6 -114
  218. package/dist/sync/wsFrameHandlers.js +6 -392
  219. package/dist/syncLog/contract.d.ts +20 -0
  220. package/dist/syncLog/contract.js +19 -0
  221. package/dist/syncLog/index.d.ts +1 -0
  222. package/dist/syncLog/index.js +1 -0
  223. package/dist/transaction/ablo.d.ts +88 -0
  224. package/dist/transaction/ablo.js +33 -0
  225. package/dist/{client/auth.d.ts → transaction/auth/apiKey.d.ts} +43 -8
  226. package/dist/{client/auth.js → transaction/auth/apiKey.js} +19 -0
  227. package/dist/transaction/auth/bootstrapScope.d.ts +15 -0
  228. package/dist/transaction/auth/bootstrapScope.js +1 -0
  229. package/dist/transaction/auth/capability.d.ts +212 -0
  230. package/dist/transaction/auth/capability.js +224 -0
  231. package/dist/{auth → transaction/auth}/credentialSource.d.ts +8 -1
  232. package/dist/{client → transaction/auth}/identity.d.ts +8 -7
  233. package/dist/{client → transaction/auth}/identity.js +1 -1
  234. package/dist/transaction/auth/index.d.ts +162 -0
  235. package/dist/transaction/auth/index.js +304 -0
  236. package/dist/{auth → transaction/auth}/schemas.d.ts +1 -1
  237. package/dist/{auth → transaction/auth}/schemas.js +13 -13
  238. package/dist/{client → transaction/auth}/sessionMint.d.ts +8 -8
  239. package/dist/{client → transaction/auth}/sessionMint.js +4 -7
  240. package/dist/transaction/coordination/awaitClaimGrant.d.ts +56 -0
  241. package/dist/transaction/coordination/awaitClaimGrant.js +124 -0
  242. package/dist/{client → transaction/coordination}/claimHeartbeatLoop.d.ts +34 -0
  243. package/dist/{client → transaction/coordination}/claimHeartbeatLoop.js +20 -0
  244. package/dist/transaction/coordination/claimMeta.d.ts +49 -0
  245. package/dist/transaction/coordination/claimMeta.js +52 -0
  246. package/dist/transaction/coordination/createClaimStream.d.ts +64 -0
  247. package/dist/transaction/coordination/createClaimStream.js +475 -0
  248. package/dist/transaction/coordination/events.d.ts +74 -0
  249. package/dist/transaction/coordination/events.js +7 -0
  250. package/dist/transaction/coordination/index.d.ts +19 -0
  251. package/dist/transaction/coordination/index.js +45 -0
  252. package/dist/transaction/coordination/locator.d.ts +104 -0
  253. package/dist/transaction/coordination/locator.js +102 -0
  254. package/dist/transaction/coordination/schema.d.ts +1536 -0
  255. package/dist/transaction/coordination/schema.js +1177 -0
  256. package/dist/transaction/coordination/targetConflict.d.ts +2 -0
  257. package/dist/transaction/coordination/targetConflict.js +107 -0
  258. package/dist/{coordination → transaction/coordination}/trace.d.ts +7 -18
  259. package/dist/{coordination → transaction/coordination}/trace.js +18 -25
  260. package/dist/transaction/durableWrites.d.ts +62 -0
  261. package/dist/{client → transaction}/durableWrites.js +28 -3
  262. package/dist/transaction/environment.d.ts +105 -0
  263. package/dist/transaction/environment.js +108 -0
  264. package/dist/{errorCodes.d.ts → transaction/errorCodes.d.ts} +12 -12
  265. package/dist/{errorCodes.js → transaction/errorCodes.js} +45 -18
  266. package/dist/{errors.d.ts → transaction/errors.d.ts} +37 -13
  267. package/dist/{errors.js → transaction/errors.js} +85 -16
  268. package/dist/transaction/footprint.d.ts +111 -0
  269. package/dist/transaction/footprint.js +0 -0
  270. package/dist/transaction/index.d.ts +20 -0
  271. package/dist/transaction/index.js +20 -0
  272. package/dist/transaction/keys/index.d.ts +87 -0
  273. package/dist/transaction/keys/index.js +207 -0
  274. package/dist/transaction/log/syncDeltaRow.d.ts +158 -0
  275. package/dist/transaction/log/syncDeltaRow.js +95 -0
  276. package/dist/{sync/syncPosition.d.ts → transaction/logPosition.d.ts} +22 -8
  277. package/dist/{sync/syncPosition.js → transaction/logPosition.js} +15 -6
  278. package/dist/transaction/logger.d.ts +16 -0
  279. package/dist/transaction/logger.js +7 -0
  280. package/dist/transaction/observability.d.ts +53 -0
  281. package/dist/transaction/observability.js +19 -0
  282. package/dist/transaction/plugin.d.ts +285 -0
  283. package/dist/transaction/plugin.js +106 -0
  284. package/dist/{policy → transaction/policy}/types.d.ts +3 -3
  285. package/dist/{policy → transaction/policy}/types.js +2 -0
  286. package/dist/transaction/resources/httpResources.d.ts +321 -0
  287. package/dist/transaction/resources/httpResources.js +7 -0
  288. package/dist/transaction/resources/modelOperations.d.ts +427 -0
  289. package/dist/transaction/resources/modelOperations.js +12 -0
  290. package/dist/transaction/resources/mutationOptions.d.ts +66 -0
  291. package/dist/transaction/resources/mutationOptions.js +9 -0
  292. package/dist/transaction/resources/where.d.ts +101 -0
  293. package/dist/transaction/resources/where.js +115 -0
  294. package/dist/{client → transaction/resources}/writeOptionsSchema.d.ts +2 -6
  295. package/dist/{client → transaction/resources}/writeOptionsSchema.js +9 -5
  296. package/dist/{schema → transaction/schema}/field.d.ts +17 -23
  297. package/dist/{schema → transaction/schema}/field.js +5 -5
  298. package/dist/transaction/schema/fieldRef.d.ts +38 -0
  299. package/dist/transaction/schema/fieldRef.js +11 -0
  300. package/dist/transaction/schema/loadStrategy.d.ts +45 -0
  301. package/dist/transaction/schema/loadStrategy.js +46 -0
  302. package/dist/{schema → transaction/schema}/model.d.ts +50 -35
  303. package/dist/{schema → transaction/schema}/model.js +30 -20
  304. package/dist/transaction/schema/openapi.d.ts +58 -0
  305. package/dist/transaction/schema/openapi.js +501 -0
  306. package/dist/{schema → transaction/schema}/relation.d.ts +21 -16
  307. package/dist/{schema → transaction/schema}/relation.js +7 -7
  308. package/dist/{schema → transaction/schema}/residency.d.ts +0 -9
  309. package/dist/{schema → transaction/schema}/residency.js +0 -5
  310. package/dist/{schema → transaction/schema}/roles.d.ts +5 -5
  311. package/dist/{schema → transaction/schema}/roles.js +5 -5
  312. package/dist/{schema → transaction/schema}/schema.d.ts +39 -10
  313. package/dist/{schema → transaction/schema}/schema.js +24 -3
  314. package/dist/{schema → transaction/schema}/tenancy.d.ts +1 -1
  315. package/dist/{schema → transaction/schema}/tenancy.js +7 -4
  316. package/dist/transaction/transactionLayer.d.ts +82 -0
  317. package/dist/transaction/transactionLayer.js +24 -0
  318. package/dist/{transactions → transaction/transactions/settlement}/commitEnvelope.d.ts +5 -6
  319. package/dist/{transactions → transaction/transactions/settlement}/commitEnvelope.js +9 -13
  320. package/dist/{transactions → transaction/transactions/settlement}/httpCommitEnvelope.d.ts +9 -2
  321. package/dist/{transactions → transaction/transactions/settlement}/httpCommitEnvelope.js +5 -9
  322. package/dist/{transactions/durableWriteStore.d.ts → transaction/transactions/settlement/pendingWrite.d.ts} +11 -37
  323. package/dist/transaction/transactions/settlement/pendingWrite.js +20 -0
  324. package/dist/transaction/transport/commitFrames.d.ts +90 -0
  325. package/dist/transaction/transport/commitFrames.js +134 -0
  326. package/dist/transaction/transport/connectionManager.d.ts +215 -0
  327. package/dist/transaction/transport/connectionManager.js +673 -0
  328. package/dist/transaction/transport/credentialLifecycle.d.ts +177 -0
  329. package/dist/transaction/transport/credentialLifecycle.js +324 -0
  330. package/dist/{sync → transaction/transport}/heartbeat.d.ts +3 -1
  331. package/dist/{sync → transaction/transport}/heartbeat.js +6 -4
  332. package/dist/transaction/transport/httpClient.d.ts +131 -0
  333. package/dist/{client → transaction/transport}/httpClient.js +6 -5
  334. package/dist/transaction/transport/httpOptions.d.ts +33 -0
  335. package/dist/transaction/transport/httpOptions.js +12 -0
  336. package/dist/{client → transaction/transport}/httpTransport.js +295 -97
  337. package/dist/{sync/NetworkProbe.d.ts → transaction/transport/networkProbe.d.ts} +7 -4
  338. package/dist/{sync/NetworkProbe.js → transaction/transport/networkProbe.js} +14 -13
  339. package/dist/transaction/transport/wsFrameHandlers.d.ts +128 -0
  340. package/dist/transaction/transport/wsFrameHandlers.js +429 -0
  341. package/dist/transaction/transport/wsTransport.d.ts +574 -0
  342. package/dist/transaction/transport/wsTransport.js +1023 -0
  343. package/dist/transaction/types/assertExact.d.ts +17 -0
  344. package/dist/transaction/types/assertExact.js +1 -0
  345. package/dist/{types → transaction/types}/global.d.ts +17 -2
  346. package/dist/{types → transaction/types}/global.js +2 -1
  347. package/dist/{types → transaction/types}/index.d.ts +14 -46
  348. package/dist/{types → transaction/types}/index.js +7 -16
  349. package/dist/{types → transaction/types}/streams.d.ts +73 -45
  350. package/dist/transaction/utils/duration.d.ts +50 -0
  351. package/dist/{utils → transaction/utils}/duration.js +32 -0
  352. package/dist/{utils → transaction/utils}/json.d.ts +18 -0
  353. package/dist/transaction/utils/json.js +276 -0
  354. package/dist/transaction/wire/accountResponses.d.ts +420 -0
  355. package/dist/transaction/wire/accountResponses.js +290 -0
  356. package/dist/transaction/wire/auth.d.ts +56 -0
  357. package/dist/transaction/wire/auth.js +63 -0
  358. package/dist/transaction/wire/claimEvent.d.ts +76 -0
  359. package/dist/transaction/wire/claimEvent.js +73 -0
  360. package/dist/transaction/wire/claims.d.ts +530 -0
  361. package/dist/transaction/wire/claims.js +327 -0
  362. package/dist/{wire → transaction/wire}/commit.d.ts +125 -193
  363. package/dist/{wire → transaction/wire}/commit.js +68 -47
  364. package/dist/{wire → transaction/wire}/delta.d.ts +66 -17
  365. package/dist/{wire → transaction/wire}/delta.js +37 -13
  366. package/dist/transaction/wire/errorEnvelope.d.ts +72 -0
  367. package/dist/{wire → transaction/wire}/errorEnvelope.js +36 -5
  368. package/dist/transaction/wire/feedCursor.d.ts +60 -0
  369. package/dist/transaction/wire/feedCursor.js +82 -0
  370. package/dist/transaction/wire/feedEvent.d.ts +204 -0
  371. package/dist/transaction/wire/feedEvent.js +65 -0
  372. package/dist/transaction/wire/frames.d.ts +194 -0
  373. package/dist/transaction/wire/frames.js +50 -0
  374. package/dist/transaction/wire/inboundFrames.d.ts +562 -0
  375. package/dist/transaction/wire/inboundFrames.js +116 -0
  376. package/dist/transaction/wire/index.d.ts +54 -0
  377. package/dist/transaction/wire/index.js +83 -0
  378. package/dist/{wire → transaction/wire}/listEnvelope.d.ts +13 -14
  379. package/dist/transaction/wire/listEnvelope.js +42 -0
  380. package/dist/transaction/wire/modelMutations.d.ts +31 -0
  381. package/dist/transaction/wire/modelMutations.js +52 -0
  382. package/dist/transaction/wire/modelResponses.d.ts +85 -0
  383. package/dist/transaction/wire/modelResponses.js +43 -0
  384. package/dist/transaction/wire/modelShape.d.ts +78 -0
  385. package/dist/transaction/wire/modelShape.js +74 -0
  386. package/dist/transactions/{TransactionQueue.d.ts → mutations/MutationQueue.d.ts} +85 -38
  387. package/dist/transactions/{TransactionQueue.js → mutations/MutationQueue.js} +141 -80
  388. package/dist/transactions/{TransactionStore.d.ts → mutations/MutationStore.d.ts} +8 -8
  389. package/dist/transactions/{TransactionStore.js → mutations/MutationStore.js} +2 -2
  390. package/dist/transactions/{coalesceRules.d.ts → mutations/coalesceRules.d.ts} +10 -10
  391. package/dist/transactions/{coalesceRules.js → mutations/coalesceRules.js} +1 -1
  392. package/dist/transactions/mutations/commitLatency.d.ts +52 -0
  393. package/dist/transactions/mutations/commitLatency.js +130 -0
  394. package/dist/transactions/{commitOutboxStore.d.ts → mutations/commitOutboxStore.d.ts} +1 -5
  395. package/dist/transactions/{commitOutboxStore.js → mutations/commitOutboxStore.js} +1 -1
  396. package/dist/transactions/{commitPayload.d.ts → mutations/commitPayload.d.ts} +18 -16
  397. package/dist/transactions/{commitPayload.js → mutations/commitPayload.js} +15 -15
  398. package/dist/transactions/{deltaConfirmation.d.ts → mutations/deltaConfirmation.d.ts} +15 -11
  399. package/dist/transactions/{deltaConfirmation.js → mutations/deltaConfirmation.js} +14 -12
  400. package/dist/transactions/mutations/durableWriteStore.d.ts +14 -0
  401. package/dist/transactions/mutations/durableWriteStore.js +12 -0
  402. package/dist/transactions/{optimisticApply.d.ts → mutations/optimisticApply.d.ts} +7 -7
  403. package/dist/transactions/{replayValidation.d.ts → mutations/replayValidation.d.ts} +4 -3
  404. package/dist/transactions/{replayValidation.js → mutations/replayValidation.js} +7 -5
  405. package/dist/utils/mobxSetup.d.ts +1 -1
  406. package/dist/utils/mobxSetup.js +5 -2
  407. package/dist/{core → views}/QueryView.d.ts +2 -2
  408. package/dist/{core → views}/QueryView.js +2 -2
  409. package/dist/{core → views}/ViewRegistry.d.ts +1 -1
  410. package/dist/{core/queryUtils.d.ts → views/incrementalView.d.ts} +6 -6
  411. package/dist/{core/queryUtils.js → views/incrementalView.js} +6 -6
  412. package/dist/webhooks/events.d.ts +2 -2
  413. package/dist/wire/index.d.ts +1 -34
  414. package/dist/wire/index.js +8 -49
  415. package/docs/agent-messaging.md +3 -3
  416. package/docs/agents.md +20 -13
  417. package/docs/api-keys.md +14 -10
  418. package/docs/api.md +27 -61
  419. package/docs/audit.md +6 -3
  420. package/docs/cli.md +41 -13
  421. package/docs/client-behavior.md +11 -9
  422. package/docs/concurrency-convention.md +49 -57
  423. package/docs/coordination.md +283 -121
  424. package/docs/data-sources.md +7 -5
  425. package/docs/debugging.md +39 -15
  426. package/docs/deployment.md +267 -0
  427. package/docs/examples/agent-human.md +49 -42
  428. package/docs/examples/ai-sdk-tool.md +69 -44
  429. package/docs/examples/existing-python-backend.md +8 -6
  430. package/docs/examples/nextjs.md +129 -47
  431. package/docs/examples/scoped-agent.md +46 -45
  432. package/docs/examples/server-agent.md +46 -26
  433. package/docs/groups.md +87 -30
  434. package/docs/guarantees.md +41 -12
  435. package/docs/how-it-works.md +38 -12
  436. package/docs/idempotency.md +126 -0
  437. package/docs/identity.md +77 -74
  438. package/docs/index.md +172 -86
  439. package/docs/integration-guide.md +31 -19
  440. package/docs/mcp.md +46 -21
  441. package/docs/migration.md +95 -18
  442. package/docs/operating-on-your-database.md +3 -1
  443. package/docs/projects.md +3 -1
  444. package/docs/quickstart.md +22 -5
  445. package/docs/react.md +31 -18
  446. package/docs/schema-contract.md +5 -3
  447. package/docs/session-settings.md +108 -0
  448. package/docs/sessions.md +4 -2
  449. package/docs/webhooks.md +12 -10
  450. package/llms.txt +48 -18
  451. package/package.json +21 -26
  452. package/dist/agent/Agent.d.ts +0 -366
  453. package/dist/agent/Agent.js +0 -514
  454. package/dist/agent/index.d.ts +0 -115
  455. package/dist/agent/index.js +0 -128
  456. package/dist/agent/session.d.ts +0 -93
  457. package/dist/agent/session.js +0 -149
  458. package/dist/agent/types.d.ts +0 -68
  459. package/dist/agent/types.js +0 -9
  460. package/dist/cli.cjs +0 -286329
  461. package/dist/client/durableWrites.d.ts +0 -21
  462. package/dist/client/httpClient.d.ts +0 -80
  463. package/dist/coordination/schema.d.ts +0 -722
  464. package/dist/coordination/schema.js +0 -578
  465. package/dist/schema/openapi.d.ts +0 -29
  466. package/dist/schema/openapi.js +0 -124
  467. package/dist/testing/fixtures/bootstrap.d.ts +0 -49
  468. package/dist/testing/fixtures/bootstrap.js +0 -59
  469. package/dist/testing/fixtures/deltas.d.ts +0 -83
  470. package/dist/testing/fixtures/deltas.js +0 -136
  471. package/dist/testing/fixtures/models.d.ts +0 -83
  472. package/dist/testing/fixtures/models.js +0 -272
  473. package/dist/testing/helpers/reactWrapper.d.ts +0 -69
  474. package/dist/testing/helpers/reactWrapper.js +0 -67
  475. package/dist/testing/helpers/syncEngineHarness.d.ts +0 -54
  476. package/dist/testing/helpers/syncEngineHarness.js +0 -73
  477. package/dist/testing/helpers/wait.d.ts +0 -30
  478. package/dist/testing/helpers/wait.js +0 -49
  479. package/dist/testing/index.d.ts +0 -23
  480. package/dist/testing/index.js +0 -33
  481. package/dist/testing/mocks/FakeDatabase.d.ts +0 -18
  482. package/dist/testing/mocks/FakeDatabase.js +0 -10
  483. package/dist/testing/mocks/MockMutationExecutor.d.ts +0 -87
  484. package/dist/testing/mocks/MockMutationExecutor.js +0 -192
  485. package/dist/testing/mocks/MockNetworkMonitor.d.ts +0 -20
  486. package/dist/testing/mocks/MockNetworkMonitor.js +0 -46
  487. package/dist/testing/mocks/MockSyncContext.d.ts +0 -51
  488. package/dist/testing/mocks/MockSyncContext.js +0 -71
  489. package/dist/testing/mocks/MockSyncStore.d.ts +0 -88
  490. package/dist/testing/mocks/MockSyncStore.js +0 -171
  491. package/dist/testing/mocks/MockWebSocket.d.ts +0 -71
  492. package/dist/testing/mocks/MockWebSocket.js +0 -118
  493. package/dist/transactions/durableWriteStore.js +0 -30
  494. package/dist/utils/duration.d.ts +0 -25
  495. package/dist/utils/json.js +0 -88
  496. package/dist/wire/errorEnvelope.d.ts +0 -55
  497. package/dist/wire/frames.d.ts +0 -197
  498. package/dist/wire/frames.js +0 -49
  499. package/dist/wire/listEnvelope.js +0 -18
  500. package/docs/interaction-model.md +0 -97
  501. /package/dist/{core → query}/QueryProcessor.d.ts +0 -0
  502. /package/dist/{core → query}/QueryProcessor.js +0 -0
  503. /package/dist/{core/storeContract.js → storeContract.js} +0 -0
  504. /package/dist/{core → stores}/openIDBWithTimeout.d.ts +0 -0
  505. /package/dist/{core → stores}/openIDBWithTimeout.js +0 -0
  506. /package/dist/{client → transaction/auth}/credentialEndpoint.d.ts +0 -0
  507. /package/dist/{client → transaction/auth}/credentialEndpoint.js +0 -0
  508. /package/dist/{auth → transaction/auth}/credentialPolicy.d.ts +0 -0
  509. /package/dist/{auth → transaction/auth}/credentialPolicy.js +0 -0
  510. /package/dist/{auth → transaction/auth}/credentialSource.js +0 -0
  511. /package/dist/{client → transaction/auth}/hostedEndpoints.d.ts +0 -0
  512. /package/dist/{client → transaction/auth}/hostedEndpoints.js +0 -0
  513. /package/dist/{client → transaction}/persistence.d.ts +0 -0
  514. /package/dist/{client → transaction}/persistence.js +0 -0
  515. /package/dist/{client → transaction/resources}/functionalUpdate.d.ts +0 -0
  516. /package/dist/{client → transaction/resources}/functionalUpdate.js +0 -0
  517. /package/dist/{transactions → transaction/transactions/settlement}/idempotencyKey.d.ts +0 -0
  518. /package/dist/{transactions → transaction/transactions/settlement}/idempotencyKey.js +0 -0
  519. /package/dist/{client → transaction/transport}/httpTransport.d.ts +0 -0
  520. /package/dist/{types → transaction/types}/modelData.d.ts +0 -0
  521. /package/dist/{types → transaction/types}/modelData.js +0 -0
  522. /package/dist/{types → transaction/types}/participant.d.ts +0 -0
  523. /package/dist/{types → transaction/types}/participant.js +0 -0
  524. /package/dist/{types → transaction/types}/streams.js +0 -0
  525. /package/dist/{utils → transaction/utils}/asyncIterator.d.ts +0 -0
  526. /package/dist/{utils → transaction/utils}/asyncIterator.js +0 -0
  527. /package/dist/{wire → transaction/wire}/bootstrapReason.d.ts +0 -0
  528. /package/dist/{wire → transaction/wire}/bootstrapReason.js +0 -0
  529. /package/dist/{wire → transaction/wire}/protocol.d.ts +0 -0
  530. /package/dist/{wire → transaction/wire}/protocol.js +0 -0
  531. /package/dist/{wire → transaction/wire}/protocolVersion.d.ts +0 -0
  532. /package/dist/{wire → transaction/wire}/protocolVersion.js +0 -0
  533. /package/dist/transactions/{UnconfirmedWrites.d.ts → mutations/UnconfirmedWrites.d.ts} +0 -0
  534. /package/dist/transactions/{UnconfirmedWrites.js → mutations/UnconfirmedWrites.js} +0 -0
  535. /package/dist/transactions/{optimisticApply.js → mutations/optimisticApply.js} +0 -0
  536. /package/dist/{core → views}/ViewRegistry.js +0 -0
@@ -6,10 +6,12 @@
6
6
  * firing, so returning to the tab emits a recovery signal the store can act on.
7
7
  */
8
8
  import { EventEmitter } from 'events';
9
+ import type { RuntimeContext } from './RuntimeContext.js';
9
10
  export declare class NetworkMonitor extends EventEmitter {
11
+ private readonly runtime;
10
12
  private isOnline;
11
13
  private lastOnlineCheck;
12
- constructor();
14
+ constructor(runtime?: RuntimeContext);
13
15
  private handleOnline;
14
16
  private handleOffline;
15
17
  /**
@@ -6,15 +6,17 @@
6
6
  * firing, so returning to the tab emits a recovery signal the store can act on.
7
7
  */
8
8
  import { EventEmitter } from 'events';
9
- import { getContext } from './context.js';
9
+ import { globalRuntime } from './context.js';
10
10
  export class NetworkMonitor extends EventEmitter {
11
+ runtime;
11
12
  // Only `navigator.onLine === false` means offline. Node 18+ exposes a global
12
13
  // `navigator` with `onLine === undefined`, so the naive `navigator.onLine`
13
14
  // would seed `false` (offline) on every server client — start optimistic.
14
15
  isOnline = !(typeof navigator !== 'undefined' && navigator.onLine === false);
15
16
  lastOnlineCheck = new Date();
16
- constructor() {
17
+ constructor(runtime = globalRuntime) {
17
18
  super();
19
+ this.runtime = runtime;
18
20
  this.setupListeners();
19
21
  }
20
22
  handleOnline = () => {
@@ -22,7 +24,7 @@ export class NetworkMonitor extends EventEmitter {
22
24
  this.isOnline = true;
23
25
  this.lastOnlineCheck = new Date();
24
26
  if (wasOffline) {
25
- getContext().logger.info('Network connection restored');
27
+ this.runtime.logger.info('Network connection restored');
26
28
  this.emit('online');
27
29
  }
28
30
  };
@@ -32,7 +34,7 @@ export class NetworkMonitor extends EventEmitter {
32
34
  if (wasOnline) {
33
35
  // Symmetric with 'Network connection restored' (info) — expected,
34
36
  // transient connectivity state, not an actionable warning.
35
- getContext().logger.info('Network connection lost');
37
+ this.runtime.logger.info('Network connection lost');
36
38
  this.emit('offline');
37
39
  }
38
40
  };
@@ -49,7 +51,7 @@ export class NetworkMonitor extends EventEmitter {
49
51
  this.isOnline = navigator.onLine;
50
52
  this.lastOnlineCheck = new Date();
51
53
  if (this.isOnline) {
52
- getContext().logger.info('Tab became visible with network available — emitting visibility_online');
54
+ this.runtime.logger.info('Tab became visible with network available — emitting visibility_online');
53
55
  this.emit('visibility_online');
54
56
  }
55
57
  };
@@ -1,17 +1,18 @@
1
1
  /**
2
- * SyncEngineContext — Runtime dependency container
2
+ * RuntimeContext — Runtime dependency container
3
3
  *
4
4
  * All SDK classes receive this context at construction time.
5
5
  * It bundles every injectable dependency so constructors stay clean.
6
6
  */
7
- import type { SyncLogger, SyncObservabilityProvider, SyncAnalytics, SessionErrorDetector, OnlineStatusProvider, ModelDebugLoggerContract, MutationExecutor, SyncEngineConfig } from './interfaces/index.js';
8
- export interface SyncEngineContext {
7
+ import type { Logger, ObservabilityProvider, Analytics, SessionErrorDetector, OnlineStatusProvider, ModelDebugLoggerContract, MutationExecutor, RuntimeConfig } from './interfaces/index.js';
8
+ import type { ModelMetadata } from './transaction/types/index.js';
9
+ export interface RuntimeContext {
9
10
  /** Structured logger */
10
- logger: SyncLogger;
11
+ logger: Logger;
11
12
  /** Error tracking & performance monitoring */
12
- observability: SyncObservabilityProvider;
13
+ observability: ObservabilityProvider;
13
14
  /** Product analytics (optional) */
14
- analytics?: SyncAnalytics;
15
+ analytics?: Analytics;
15
16
  /** Session error detection for auth redirect decisions */
16
17
  sessionErrorDetector: SessionErrorDetector;
17
18
  /** Network connectivity detection */
@@ -21,17 +22,23 @@ export interface SyncEngineContext {
21
22
  /** Backend mutation transport (GraphQL, REST, etc.) */
22
23
  mutationExecutor: MutationExecutor;
23
24
  /** Application-specific sync configuration */
24
- config: SyncEngineConfig;
25
+ config: RuntimeConfig;
26
+ /**
27
+ * Model metadata lookup. Injected by the client (it wires this from its
28
+ * `ModelRegistry`) so the settlement core can resolve a model's metadata
29
+ * without importing the registry — the dependency inversion that keeps the
30
+ * core free of the client's `Model` layer (ADR 0013).
31
+ */
32
+ getModelMetadata: (name: string) => ModelMetadata | undefined;
25
33
  }
26
- /** No-op logger silently discards all log calls */
27
- export declare const noopLogger: SyncLogger;
34
+ export { noopLogger } from './transaction/logger.js';
28
35
  /** No-op observability — silently discards all observability calls */
29
- export declare const noopObservability: SyncObservabilityProvider;
36
+ export declare const noopObservability: ObservabilityProvider;
30
37
  /** No-op analytics — silently discards all analytics calls */
31
- export declare const noopAnalytics: SyncAnalytics;
38
+ export declare const noopAnalytics: Analytics;
32
39
  /** Browser-native online status provider */
33
40
  export declare const browserOnlineStatus: OnlineStatusProvider;
34
- /** Session error detector — delegates to SyncSessionError so detection is
41
+ /** Session error detector — delegates to AbloSessionError so detection is
35
42
  * code-aware (only genuine session/JWT expiry counts), not a blunt 401/403. */
36
43
  export declare const defaultSessionErrorDetector: SessionErrorDetector;
37
44
  /**
@@ -42,4 +49,4 @@ export declare const defaultSessionErrorDetector: SessionErrorDetector;
42
49
  * never exercise FK ordering; consumers who do rely on it should finish
43
50
  * wiring the engine before the first `create()` fires.
44
51
  */
45
- export declare const emptyConfig: SyncEngineConfig;
52
+ export declare const emptyConfig: RuntimeConfig;
@@ -1,27 +1,26 @@
1
1
  /**
2
- * SyncEngineContext — Runtime dependency container
2
+ * RuntimeContext — Runtime dependency container
3
3
  *
4
4
  * All SDK classes receive this context at construction time.
5
5
  * It bundles every injectable dependency so constructors stay clean.
6
6
  */
7
- import { SyncSessionError } from './errors.js';
7
+ import { AbloSessionError } from './transaction/errors.js';
8
8
  // ─────────────────────────────────────────────
9
9
  // No-op defaults for optional dependencies
10
10
  // ─────────────────────────────────────────────
11
- /** No-op logger silently discards all log calls */
12
- export const noopLogger = {
13
- debug() { },
14
- info() { },
15
- warn() { },
16
- error() { },
17
- };
11
+ // Re-exported, not redeclared. `@ablo/transaction/logger` owns the no-op that
12
+ // sits beside the `Logger` port. This package held a second, behaviourally
13
+ // identical copy, and half of it imported the canonical one while the other
14
+ // half imported this — so any change of semantics there would have reached
15
+ // only one side, invisibly, because the identifier reads the same at both.
16
+ export { noopLogger } from './transaction/logger.js';
18
17
  /** No-op observability — silently discards all observability calls */
19
18
  export const noopObservability = {
20
19
  setContext() { },
21
20
  setConnectionState() { },
22
21
  breadcrumb() { },
23
22
  captureRollback() { },
24
- captureTransactionFailure() { },
23
+ captureMutationFailure() { },
25
24
  captureBootstrapFailure() { },
26
25
  captureReconciliation() { },
27
26
  captureDeltaRetryExhausted() { },
@@ -51,7 +50,7 @@ export const browserOnlineStatus = {
51
50
  return !(typeof navigator !== 'undefined' && navigator.onLine === false);
52
51
  },
53
52
  };
54
- /** Session error detector — delegates to SyncSessionError so detection is
53
+ /** Session error detector — delegates to AbloSessionError so detection is
55
54
  * code-aware (only genuine session/JWT expiry counts), not a blunt 401/403. */
56
55
  export const defaultSessionErrorDetector = {
57
56
  isSessionError(error) {
@@ -61,7 +60,7 @@ export const defaultSessionErrorDetector = {
61
60
  return false;
62
61
  },
63
62
  isSessionErrorResponse(status, body) {
64
- return SyncSessionError.isSessionErrorResponse(status, body);
63
+ return AbloSessionError.isSessionErrorResponse(status, body);
65
64
  },
66
65
  };
67
66
  /**
@@ -4,18 +4,21 @@
4
4
  * optimistic changes, holds them while the client is offline, sends them to
5
5
  * the server when connectivity returns, and resolves conflicts when the
6
6
  * server's version of a row disagrees with the local one. It sits between the
7
- * reactive object pool and the {@link TransactionQueue} that delivers writes
7
+ * reactive object pool and the {@link MutationQueue} that delivers writes
8
8
  * over the network.
9
9
  */
10
10
  import { InstanceCache } from './InstanceCache.js';
11
11
  import { Model } from './Model.js';
12
+ import type { AppliedChange } from './transaction/plugin.js';
13
+ import type { RuntimeContext } from './RuntimeContext.js';
12
14
  import { EventEmitter } from 'events';
13
- import { TransactionQueue } from './transactions/TransactionQueue.js';
14
- import { type UnconfirmedWritesMetrics } from './transactions/UnconfirmedWrites.js';
15
+ import { MutationQueue } from './transactions/mutations/MutationQueue.js';
16
+ import { type CommitLatencySample } from './transactions/mutations/commitLatency.js';
17
+ import { type UnconfirmedWritesMetrics } from './transactions/mutations/UnconfirmedWrites.js';
15
18
  import type { Database } from './Database.js';
16
19
  import type { WriteOptions } from './interfaces/index.js';
17
- import { SyncPosition } from './sync/syncPosition.js';
18
- import type { DurableWriteStore } from './transactions/durableWriteStore.js';
20
+ import { LogPosition } from './transaction/logPosition.js';
21
+ import type { DurableWriteStore } from './transactions/mutations/durableWriteStore.js';
19
22
  interface SyncObserver {
20
23
  onSync?: (event: SyncEvent) => void;
21
24
  }
@@ -41,6 +44,7 @@ export interface RehydrationStats {
41
44
  elapsedMs: number;
42
45
  }
43
46
  export declare class SyncClient extends EventEmitter {
47
+ private readonly runtime;
44
48
  private objectPool;
45
49
  private database;
46
50
  private get mutationExecutor();
@@ -71,12 +75,12 @@ export declare class SyncClient extends EventEmitter {
71
75
  private isDisposed;
72
76
  /**
73
77
  * The client's position in the global delta order, held as the single
74
- * canonical {@link SyncPosition} instance. The store advances `applied` and
78
+ * canonical {@link LogPosition} instance. The store advances `applied` and
75
79
  * `persisted` as deltas land, the queue advances `acked` on commit
76
80
  * responses, and snapshots and claims read `readFloor`.
77
81
  */
78
- readonly position: SyncPosition;
79
- constructor(objectPool: InstanceCache, database: Database, commitOutbox?: DurableWriteStore, commitOutboxNamespace?: string);
82
+ readonly position: LogPosition;
83
+ constructor(objectPool: InstanceCache, database: Database, commitOutbox?: DurableWriteStore, commitOutboxNamespace?: string, runtime?: RuntimeContext);
80
84
  /**
81
85
  * Setup network monitoring handlers
82
86
  */
@@ -98,13 +102,13 @@ export declare class SyncClient extends EventEmitter {
98
102
  * discard the optimistic state silently.
99
103
  *
100
104
  * Treating both paths the same caused the deletion-flicker bug: every
101
- * cancelled update on a multi-layer chart fired a per-model observer
105
+ * cancelled update on a multi-child record fired a per-model observer
102
106
  * event and a `[SyncClient.rollback]` warn, producing N renders and N
103
107
  * spam log lines for one user-initiated delete.
104
108
  */
105
109
  private setupTransactionRollbackHandling;
106
110
  /**
107
- * Forward reconciliation requests from the {@link TransactionQueue} to the
111
+ * Forward reconciliation requests from the {@link MutationQueue} to the
108
112
  * sync layer. When delta confirmation times out, the queue emits
109
113
  * `reconciliation:needed` instead of rolling back, so optimistic state the
110
114
  * server may already have committed is never destroyed.
@@ -145,7 +149,7 @@ export declare class SyncClient extends EventEmitter {
145
149
  * 2. **Required-field gate** — if the row is missing any field listed
146
150
  * in the model's `requiredFields`, return `null` so the caller
147
151
  * skips this record. Used for FK columns whose absence renders the
148
- * row unrecoverable (e.g. a SlideLayer with no slideId).
152
+ * row unrecoverable (e.g. a Block with no sectionId).
149
153
  *
150
154
  * The engine itself is product-neutral: model identity (which fields
151
155
  * to back-fill, which absences are fatal) lives entirely in the
@@ -196,10 +200,10 @@ export declare class SyncClient extends EventEmitter {
196
200
  /**
197
201
  * Update existing model with pre-computed changes.
198
202
  * Used by saveManyOptimized when incoming models have empty change-tracking
199
- * (e.g. freshly constructed SpreadsheetCellModels from decomposeSpreadsheetDocument).
203
+ * (e.g. freshly constructed cell models from a bulk document decomposition).
200
204
  */
201
205
  updateWithChanges(model: Model, changes?: Record<string, unknown>): void;
202
- /** Expose the GraphQL client for atomic mutations (e.g., createSlideWithLayers).
206
+ /** Expose the GraphQL client for atomic mutations (e.g., createSectionWithBlocks).
203
207
  * Used by SyncedStore for operations that bypass the transaction queue
204
208
  * but still need optimistic pool updates at the sync layer. */
205
209
  get gql(): import("./interfaces/index.js").MutationExecutor;
@@ -207,12 +211,12 @@ export declare class SyncClient extends EventEmitter {
207
211
  delete(model: Model, options?: WriteOptions): void;
208
212
  /**
209
213
  * Clear all pending mutations for a specific model
210
- * Called before deletion to prevent "layer not found" errors on the server
214
+ * Called before deletion to prevent "record not found" errors on the server
211
215
  */
212
216
  private clearPendingMutationsForModel;
213
217
  /**
214
218
  * Upload a file and create its attachment record. The upload runs through
215
- * the {@link TransactionQueue}, and a model is built from the server's
219
+ * the {@link MutationQueue}, and a model is built from the server's
216
220
  * response and added to the pool.
217
221
  */
218
222
  uploadFile(file: File, options: {
@@ -246,7 +250,7 @@ export declare class SyncClient extends EventEmitter {
246
250
  * IndexedDB persistence and the server push are deferred to a microtask, so
247
251
  * many pushes within the same tick collapse into a single serialization and
248
252
  * a single process call. Without the deferral, queueing a hundred mutations
249
- * at once — a large paste, a document import, bulk layer creation — would
253
+ * at once — a large paste, a document import, bulk row creation — would
250
254
  * reserialize the whole growing queue a hundred times, an O(N²) cost in
251
255
  * `model.toJSON()`.
252
256
  *
@@ -275,11 +279,11 @@ export declare class SyncClient extends EventEmitter {
275
279
  *
276
280
  * Best Practice: Only sync models that still exist locally (local-first principle)
277
281
  * - If a model was deleted locally → skip any pending updates/creates for it
278
- * - This prevents "layer not found" errors from fast copy-paste-delete workflows
282
+ * - This prevents "record not found" errors from fast copy-paste-delete workflows
279
283
  */
280
284
  processPendingMutations(): Promise<void>;
281
285
  /**
282
- * Stage mutation to TransactionQueue - mutations in same tick are batched via microtask
286
+ * Stage mutation to MutationQueue - mutations in same tick are batched via microtask
283
287
  *
284
288
  * @param mutation.capturedChanges - Pre-captured changes to use instead of re-reading from model
285
289
  */
@@ -347,7 +351,7 @@ export declare class SyncClient extends EventEmitter {
347
351
  */
348
352
  dispose(): void;
349
353
  /**
350
- * Notify the {@link TransactionQueue} of an incoming delta so it can confirm
354
+ * Notify the {@link MutationQueue} of an incoming delta so it can confirm
351
355
  * hosted writes by sync-id threshold and queued forwards by their echoed
352
356
  * source-batch correlation id.
353
357
  * @param syncId - The sync id of the received delta.
@@ -360,15 +364,15 @@ export declare class SyncClient extends EventEmitter {
360
364
  * deletion. The store calls this when a delete delta arrives for a parent,
361
365
  * cancelling any queued writes on children that reference it.
362
366
  *
363
- * @param childModelName - The child model type (for example, `SlideLayer`).
364
- * @param foreignKey - The foreign-key property name (for example, `slideId`).
367
+ * @param childModelName - The child model type (for example, `Block`).
368
+ * @param foreignKey - The foreign-key property name (for example, `sectionId`).
365
369
  * @param parentId - The id of the deleted parent.
366
370
  * @returns The number of transactions cancelled.
367
371
  */
368
372
  cancelTransactionsByForeignKey(childModelName: string, foreignKey: string, parentId: string): number;
369
373
  /**
370
374
  * Wait for a transaction to be confirmed by its delta echo. Delegates to the
371
- * {@link TransactionQueue}, which handles the confirmation timeout.
375
+ * {@link MutationQueue}, which handles the confirmation timeout.
372
376
  */
373
377
  waitForDeltaConfirmation(transactionId: string): Promise<void>;
374
378
  /**
@@ -386,7 +390,7 @@ export declare class SyncClient extends EventEmitter {
386
390
  objectPoolStats: ReturnType<InstanceCache['getStats']>;
387
391
  };
388
392
  /**
389
- * Get pending transaction count from TransactionQueue
393
+ * Get pending transaction count from MutationQueue
390
394
  * Used by SyncedStore to compute hasUnsyncedChanges
391
395
  */
392
396
  getPendingTransactionCount(): number;
@@ -397,7 +401,7 @@ export declare class SyncClient extends EventEmitter {
397
401
  onTransactionEvent(event: 'created' | 'completed' | 'failed', callback: () => void): () => void;
398
402
  /**
399
403
  * Subscribe to mutation failures with the full payload. Mirrors the
400
- * underlying TransactionQueue 'transaction:failed' shape so consumers
404
+ * underlying MutationQueue 'transaction:failed' shape so consumers
401
405
  * can render typed UI (toast keyed by `AbloError.type`, route-level
402
406
  * "this entity reverted" boundaries, telemetry).
403
407
  *
@@ -407,28 +411,37 @@ export declare class SyncClient extends EventEmitter {
407
411
  * this typed listener drives user-visible surfaces.
408
412
  */
409
413
  onMutationFailure(listener: (payload: {
410
- transaction: import('./transactions/TransactionQueue.js').Transaction;
414
+ transaction: import('./transactions/mutations/MutationQueue.js').QueuedMutation;
411
415
  error: Error;
412
416
  permanent?: boolean;
413
417
  }) => void): () => void;
414
418
  /**
415
- * Subscribe to local transaction creation with the full {@link Transaction}
419
+ * Subscribe to commit round-trip latency, split into the local seal and the
420
+ * remote acknowledgement. Fires once per completed commit.
421
+ *
422
+ * Taps the {@link MutationQueue} emitter for the same reason
423
+ * {@link onMutationFailure} does: the commit lifecycle events originate
424
+ * there and the SyncClient's own emitter never rebroadcasts them.
425
+ */
426
+ onCommitLatency(listener: (sample: CommitLatencySample) => void): () => void;
427
+ /**
428
+ * Subscribe to local transaction creation with the full {@link QueuedMutation}
416
429
  * payload (`type`, `modelName`, `modelId`, `data`, `previousData`). This is
417
430
  * the feed the store's local-mutation subscription taps for undo recording.
418
431
  *
419
- * It subscribes to the {@link TransactionQueue}'s emitter directly, since
432
+ * It subscribes to the {@link MutationQueue}'s emitter directly, since
420
433
  * that is the only emitter that fires `transaction:created`. The SyncClient's
421
434
  * own emitter (reached through {@link subscribe}) never rebroadcasts that
422
435
  * event, so routing undo through `subscribe('transaction:created')` would
423
436
  * record nothing. {@link onMutationFailure} taps the queue for the same
424
437
  * reason.
425
438
  */
426
- onLocalTransaction(listener: (tx: import('./transactions/TransactionQueue.js').Transaction) => void): () => void;
439
+ onLocalTransaction(listener: (tx: import('./transactions/mutations/MutationQueue.js').QueuedMutation) => void): () => void;
427
440
  /**
428
441
  * Wait for the latest in-flight transaction for (modelName, modelId)
429
442
  * to be confirmed by the server, or reject if it's rolled back.
430
443
  * Resolves immediately when no transaction is in flight — see
431
- * `TransactionQueue.confirmationFor` for the lookup contract.
444
+ * `MutationQueue.confirmationFor` for the lookup contract.
432
445
  *
433
446
  * Distinct from `waitForDeltaConfirmation(transactionId)` which keys
434
447
  * off a known tx id; this variant is for call sites that hold a
@@ -441,7 +454,7 @@ export declare class SyncClient extends EventEmitter {
441
454
  getDebugInfo(): {
442
455
  connectionState: "connected" | "disconnected" | "connecting";
443
456
  pendingMutationsCount: number;
444
- transactionQueue: {
457
+ mutationQueue: {
445
458
  lastSeenSyncId: number;
446
459
  awaitingDeltaCount: number;
447
460
  awaitingDeltaTransactions: {
@@ -478,7 +491,7 @@ export declare class SyncClient extends EventEmitter {
478
491
  * Mark a local transaction as optimistically applied. The matching
479
492
  * server delta (when it arrives with the same `transactionId`) will
480
493
  * be recognized as an echo and skip the pool mutation. Called
481
- * automatically by `TransactionQueue` when a transaction is staged;
494
+ * automatically by `MutationQueue` when a transaction is staged;
482
495
  * exposed publicly so tests can drive the API directly.
483
496
  */
484
497
  markTransactionPending(transactionId: string): void;
@@ -490,28 +503,15 @@ export declare class SyncClient extends EventEmitter {
490
503
  */
491
504
  getEchoMetrics(): Readonly<UnconfirmedWritesMetrics>;
492
505
  /**
493
- * Package-internal accessor for the {@link TransactionQueue}. Used by
506
+ * Package-internal accessor for the {@link MutationQueue}. Used by
494
507
  * `Ablo.commits.create()` to route raw multi-operation envelopes through the
495
508
  * same retry-on-reconnect lane as the model proxy path, and by tests to
496
509
  * exercise the queue's interaction with {@link markTransactionPending} on the
497
510
  * real instance the SyncClient subscribes to. It is not re-exported to SDK
498
511
  * consumers; `Ablo` is the public surface.
499
512
  */
500
- getTransactionQueue(): TransactionQueue;
501
- applyDeltaBatchToPool(dbResults: {
502
- action: string;
503
- modelName: string;
504
- modelId: string;
505
- data?: Record<string, unknown> | null;
506
- /**
507
- * Server-stamped transaction id, echoing the client's commit op
508
- * id. Used by echo detection to recognize "this is the
509
- * confirmation of a mutation I've already applied locally."
510
- * Optional because system-emitted deltas (sync_group changes,
511
- * schema-derived deltas, etc.) don't have a client transaction.
512
- */
513
- transactionId?: string;
514
- }[], enrichRelations: (modelName: string, data: Record<string, unknown>) => Record<string, unknown>): void;
513
+ getMutationQueue(): MutationQueue;
514
+ applyDeltaBatchToPool(dbResults: readonly AppliedChange[], enrichRelations: (modelName: string, data: Record<string, unknown>) => Record<string, unknown>): void;
515
515
  /**
516
516
  * Apply bootstrap data to the InstanceCache with ghost removal.
517
517
  * Owns: model creation, batch upsert, ghost detection + removal.