@abloatai/ablo 0.25.0 → 0.27.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 (425) hide show
  1. package/AGENTS.md +5 -3
  2. package/CHANGELOG.md +34 -0
  3. package/README.md +104 -88
  4. package/dist/BaseSyncedStore.d.ts +140 -266
  5. package/dist/BaseSyncedStore.js +338 -739
  6. package/dist/Database.d.ts +62 -77
  7. package/dist/Database.js +106 -127
  8. package/dist/{ObjectPool.d.ts → InstanceCache.d.ts} +10 -13
  9. package/dist/{ObjectPool.js → InstanceCache.js} +91 -83
  10. package/dist/LazyReferenceCollection.d.ts +11 -15
  11. package/dist/LazyReferenceCollection.js +16 -15
  12. package/dist/Model.d.ts +37 -52
  13. package/dist/Model.js +52 -69
  14. package/dist/ModelRegistry.d.ts +46 -25
  15. package/dist/ModelRegistry.js +32 -30
  16. package/dist/NetworkMonitor.d.ts +5 -6
  17. package/dist/NetworkMonitor.js +6 -7
  18. package/dist/SyncClient.d.ts +119 -109
  19. package/dist/SyncClient.js +303 -224
  20. package/dist/SyncEngineContext.d.ts +1 -3
  21. package/dist/SyncEngineContext.js +1 -2
  22. package/dist/adapters/alwaysOnline.d.ts +6 -8
  23. package/dist/adapters/alwaysOnline.js +6 -8
  24. package/dist/adapters/inMemoryStorage.d.ts +9 -9
  25. package/dist/adapters/inMemoryStorage.js +9 -9
  26. package/dist/agent/Agent.d.ts +39 -31
  27. package/dist/agent/Agent.js +35 -23
  28. package/dist/agent/index.d.ts +4 -4
  29. package/dist/agent/index.js +5 -5
  30. package/dist/agent/session.d.ts +47 -44
  31. package/dist/agent/session.js +37 -48
  32. package/dist/agent/types.d.ts +26 -31
  33. package/dist/agent/types.js +6 -7
  34. package/dist/ai-sdk/coordinatedTool.d.ts +108 -0
  35. package/dist/ai-sdk/{coordinated-tool.js → coordinatedTool.js} +44 -38
  36. package/dist/ai-sdk/coordinationContext.d.ts +46 -0
  37. package/dist/ai-sdk/{coordination-context.js → coordinationContext.js} +30 -31
  38. package/dist/ai-sdk/index.d.ts +25 -22
  39. package/dist/ai-sdk/index.js +25 -22
  40. package/dist/ai-sdk/wrap.d.ts +7 -8
  41. package/dist/ai-sdk/wrap.js +2 -2
  42. package/dist/auth/credentialPolicy.d.ts +74 -71
  43. package/dist/auth/credentialPolicy.js +51 -56
  44. package/dist/auth/credentialSource.d.ts +7 -18
  45. package/dist/auth/credentialSource.js +10 -18
  46. package/dist/auth/index.d.ts +59 -58
  47. package/dist/auth/index.js +34 -40
  48. package/dist/auth/schemas.d.ts +5 -4
  49. package/dist/auth/schemas.js +5 -4
  50. package/dist/batching/index.d.ts +19 -21
  51. package/dist/batching/index.js +14 -17
  52. package/dist/cli.cjs +483 -369
  53. package/dist/client/Ablo.d.ts +107 -836
  54. package/dist/client/Ablo.js +174 -833
  55. package/dist/client/ApiClient.d.ts +44 -20
  56. package/dist/client/ApiClient.js +193 -44
  57. package/dist/client/auth.d.ts +51 -60
  58. package/dist/client/auth.js +137 -110
  59. package/dist/client/claimHeartbeatLoop.d.ts +50 -0
  60. package/dist/client/claimHeartbeatLoop.js +88 -0
  61. package/dist/client/consoleLogger.d.ts +35 -0
  62. package/dist/client/consoleLogger.js +44 -0
  63. package/dist/client/createInternalComponents.d.ts +14 -17
  64. package/dist/client/createInternalComponents.js +26 -31
  65. package/dist/client/createModelProxy.d.ts +130 -120
  66. package/dist/client/createModelProxy.js +158 -124
  67. package/dist/client/credentialEndpoint.d.ts +61 -0
  68. package/dist/client/credentialEndpoint.js +86 -0
  69. package/dist/client/functionalUpdate.d.ts +29 -27
  70. package/dist/client/functionalUpdate.js +21 -21
  71. package/dist/client/hostedEndpoints.d.ts +21 -0
  72. package/dist/client/hostedEndpoints.js +21 -0
  73. package/dist/client/httpClient.d.ts +58 -54
  74. package/dist/client/httpClient.js +29 -31
  75. package/dist/client/identity.d.ts +15 -20
  76. package/dist/client/identity.js +49 -59
  77. package/dist/client/modelRegistration.d.ts +10 -0
  78. package/dist/client/modelRegistration.js +301 -0
  79. package/dist/client/options.d.ts +373 -0
  80. package/dist/client/options.js +6 -0
  81. package/dist/client/registerDataSource.d.ts +9 -9
  82. package/dist/client/registerDataSource.js +15 -16
  83. package/dist/client/resourceTypes.d.ts +333 -0
  84. package/dist/client/resourceTypes.js +7 -0
  85. package/dist/client/schemaConfig.d.ts +44 -0
  86. package/dist/client/schemaConfig.js +176 -0
  87. package/dist/client/sessionMint.d.ts +17 -13
  88. package/dist/client/sessionMint.js +26 -31
  89. package/dist/client/validateAbloOptions.d.ts +12 -14
  90. package/dist/client/validateAbloOptions.js +9 -10
  91. package/dist/client/writeOptionsSchema.d.ts +18 -16
  92. package/dist/client/writeOptionsSchema.js +23 -20
  93. package/dist/client/wsMutationExecutor.d.ts +28 -0
  94. package/dist/client/wsMutationExecutor.js +71 -0
  95. package/dist/context.d.ts +6 -4
  96. package/dist/context.js +6 -7
  97. package/dist/coordination/index.d.ts +13 -4
  98. package/dist/coordination/index.js +29 -4
  99. package/dist/coordination/schema.d.ts +176 -128
  100. package/dist/coordination/schema.js +197 -133
  101. package/dist/coordination/trace.d.ts +9 -11
  102. package/dist/coordination/trace.js +13 -15
  103. package/dist/core/DatabaseManager.d.ts +5 -8
  104. package/dist/core/DatabaseManager.js +38 -40
  105. package/dist/core/QueryProcessor.d.ts +7 -9
  106. package/dist/core/QueryProcessor.js +27 -34
  107. package/dist/core/QueryView.d.ts +17 -5
  108. package/dist/core/QueryView.js +6 -7
  109. package/dist/core/StoreManager.d.ts +14 -16
  110. package/dist/core/StoreManager.js +26 -25
  111. package/dist/core/ViewRegistry.d.ts +5 -5
  112. package/dist/core/ViewRegistry.js +4 -4
  113. package/dist/core/index.d.ts +18 -13
  114. package/dist/core/index.js +32 -26
  115. package/dist/core/openIDBWithTimeout.d.ts +38 -36
  116. package/dist/core/openIDBWithTimeout.js +57 -54
  117. package/dist/core/queryUtils.d.ts +45 -0
  118. package/dist/core/queryUtils.js +69 -0
  119. package/dist/core/storeContract.d.ts +145 -0
  120. package/dist/core/storeContract.js +12 -0
  121. package/dist/environment.d.ts +28 -0
  122. package/dist/environment.js +21 -0
  123. package/dist/errorCodes.d.ts +118 -101
  124. package/dist/errorCodes.js +277 -260
  125. package/dist/errors.d.ts +170 -165
  126. package/dist/errors.js +161 -151
  127. package/dist/index.d.ts +30 -27
  128. package/dist/index.js +90 -82
  129. package/dist/interfaces/index.d.ts +108 -133
  130. package/dist/interfaces/index.js +5 -4
  131. package/dist/keys/index.d.ts +27 -29
  132. package/dist/keys/index.js +59 -49
  133. package/dist/mutators/RecordingTransaction.d.ts +16 -16
  134. package/dist/mutators/RecordingTransaction.js +31 -37
  135. package/dist/mutators/Transaction.d.ts +18 -26
  136. package/dist/mutators/Transaction.js +14 -20
  137. package/dist/mutators/UndoManager.d.ts +122 -131
  138. package/dist/mutators/UndoManager.js +149 -155
  139. package/dist/mutators/defineMutators.d.ts +24 -37
  140. package/dist/mutators/defineMutators.js +14 -20
  141. package/dist/mutators/inverseOp.d.ts +12 -15
  142. package/dist/mutators/inverseOp.js +12 -15
  143. package/dist/mutators/mutateActions.d.ts +10 -9
  144. package/dist/mutators/mutateActions.js +1 -1
  145. package/dist/mutators/readerActions.d.ts +9 -8
  146. package/dist/mutators/readerActions.js +2 -2
  147. package/dist/mutators/undoApply.d.ts +31 -27
  148. package/dist/mutators/undoApply.js +26 -24
  149. package/dist/policy/index.d.ts +5 -3
  150. package/dist/policy/index.js +5 -3
  151. package/dist/policy/types.d.ts +105 -101
  152. package/dist/policy/types.js +67 -66
  153. package/dist/query/client.d.ts +32 -16
  154. package/dist/query/client.js +103 -72
  155. package/dist/query/types.d.ts +37 -60
  156. package/dist/query/types.js +13 -33
  157. package/dist/react/AbloProvider.d.ts +7 -11
  158. package/dist/react/AbloProvider.js +24 -17
  159. package/dist/react/context.d.ts +27 -146
  160. package/dist/react/context.js +9 -10
  161. package/dist/react/index.d.ts +41 -42
  162. package/dist/react/index.js +37 -38
  163. package/dist/react/internalContext.d.ts +17 -19
  164. package/dist/react/useAblo.d.ts +23 -22
  165. package/dist/react/useAblo.js +17 -15
  166. package/dist/react/useCurrentUserId.d.ts +8 -7
  167. package/dist/react/useCurrentUserId.js +8 -7
  168. package/dist/react/useErrorListener.d.ts +7 -7
  169. package/dist/react/useErrorListener.js +11 -12
  170. package/dist/react/useMutationFailureListener.d.ts +8 -8
  171. package/dist/react/useMutationFailureListener.js +9 -9
  172. package/dist/react/useMutators.d.ts +11 -11
  173. package/dist/react/useMutators.js +10 -4
  174. package/dist/react/useReactive.js +2 -3
  175. package/dist/react/useSyncStatus.d.ts +4 -6
  176. package/dist/react/useUndoScope.d.ts +7 -9
  177. package/dist/react/useUndoScope.js +3 -3
  178. package/dist/schema/coordination.d.ts +21 -25
  179. package/dist/schema/coordination.js +21 -25
  180. package/dist/schema/ddl.d.ts +43 -39
  181. package/dist/schema/ddl.js +75 -68
  182. package/dist/schema/ddlLock.d.ts +35 -0
  183. package/dist/schema/ddlLock.js +46 -0
  184. package/dist/schema/diff.d.ts +99 -61
  185. package/dist/schema/diff.js +43 -34
  186. package/dist/schema/field.d.ts +37 -42
  187. package/dist/schema/field.js +36 -49
  188. package/dist/schema/generate.d.ts +12 -12
  189. package/dist/schema/generate.js +12 -12
  190. package/dist/schema/index.d.ts +5 -4
  191. package/dist/schema/index.js +29 -21
  192. package/dist/schema/model.d.ts +121 -146
  193. package/dist/schema/model.js +24 -35
  194. package/dist/schema/openapi.d.ts +10 -9
  195. package/dist/schema/openapi.js +7 -1
  196. package/dist/schema/queries.d.ts +30 -32
  197. package/dist/schema/queries.js +24 -25
  198. package/dist/schema/relation.d.ts +89 -99
  199. package/dist/schema/relation.js +13 -13
  200. package/dist/schema/residency.d.ts +38 -0
  201. package/dist/schema/residency.js +30 -0
  202. package/dist/schema/roles.d.ts +45 -27
  203. package/dist/schema/roles.js +52 -21
  204. package/dist/schema/schema.d.ts +36 -45
  205. package/dist/schema/schema.js +42 -39
  206. package/dist/schema/select.d.ts +13 -13
  207. package/dist/schema/select.js +13 -13
  208. package/dist/schema/serialize.d.ts +36 -39
  209. package/dist/schema/serialize.js +27 -31
  210. package/dist/schema/sugar.d.ts +17 -32
  211. package/dist/schema/sugar.js +14 -29
  212. package/dist/schema/{sync-delta-row.d.ts → syncDeltaRow.d.ts} +27 -50
  213. package/dist/schema/syncDeltaRow.js +89 -0
  214. package/dist/schema/tenancy.d.ts +44 -46
  215. package/dist/schema/tenancy.js +46 -48
  216. package/dist/server/adapter.d.ts +58 -58
  217. package/dist/server/adapter.js +13 -14
  218. package/dist/server/commit.d.ts +60 -64
  219. package/dist/server/index.d.ts +9 -10
  220. package/dist/server/index.js +1 -1
  221. package/dist/server/readConfig.d.ts +70 -0
  222. package/dist/server/readConfig.js +8 -0
  223. package/dist/server/storageMode.d.ts +23 -0
  224. package/dist/server/storageMode.js +17 -0
  225. package/dist/source/adapter.d.ts +31 -26
  226. package/dist/source/adapter.js +10 -10
  227. package/dist/source/adapters/drizzle.d.ts +28 -23
  228. package/dist/source/adapters/drizzle.js +34 -28
  229. package/dist/source/adapters/kysely.d.ts +27 -25
  230. package/dist/source/adapters/kysely.js +28 -26
  231. package/dist/source/adapters/memory.d.ts +8 -7
  232. package/dist/source/adapters/memory.js +10 -9
  233. package/dist/source/adapters/prisma.d.ts +13 -12
  234. package/dist/source/adapters/prisma.js +27 -29
  235. package/dist/source/conformance.d.ts +18 -11
  236. package/dist/source/conformance.js +27 -19
  237. package/dist/source/connector.d.ts +31 -32
  238. package/dist/source/connector.js +30 -28
  239. package/dist/source/connectorProtocol.d.ts +160 -0
  240. package/dist/source/connectorProtocol.js +162 -0
  241. package/dist/source/contract.d.ts +26 -27
  242. package/dist/source/contract.js +28 -29
  243. package/dist/source/factory.d.ts +94 -0
  244. package/dist/source/factory.js +268 -0
  245. package/dist/source/index.d.ts +10 -462
  246. package/dist/source/index.js +17 -421
  247. package/dist/source/migrations.d.ts +9 -9
  248. package/dist/source/migrations.js +9 -9
  249. package/dist/source/next.d.ts +10 -11
  250. package/dist/source/next.js +7 -8
  251. package/dist/source/pushQueue.d.ts +70 -48
  252. package/dist/source/pushQueue.js +36 -29
  253. package/dist/source/signing.d.ts +88 -0
  254. package/dist/source/signing.js +159 -0
  255. package/dist/source/types.d.ts +351 -0
  256. package/dist/source/types.js +43 -0
  257. package/dist/stores/ObjectStore.d.ts +11 -12
  258. package/dist/stores/ObjectStore.js +34 -35
  259. package/dist/stores/ObjectStoreContract.d.ts +12 -15
  260. package/dist/stores/SyncActionStore.d.ts +8 -12
  261. package/dist/stores/SyncActionStore.js +77 -46
  262. package/dist/surface.d.ts +28 -21
  263. package/dist/surface.js +28 -20
  264. package/dist/sync/{BootstrapHelper.d.ts → BootstrapFetcher.d.ts} +37 -45
  265. package/dist/sync/{BootstrapHelper.js → BootstrapFetcher.js} +101 -80
  266. package/dist/sync/ConnectionManager.d.ts +47 -50
  267. package/dist/sync/ConnectionManager.js +74 -70
  268. package/dist/sync/NetworkProbe.d.ts +27 -31
  269. package/dist/sync/NetworkProbe.js +67 -72
  270. package/dist/sync/{HydrationCoordinator.d.ts → OnDemandLoader.d.ts} +49 -36
  271. package/dist/sync/{HydrationCoordinator.js → OnDemandLoader.js} +79 -54
  272. package/dist/sync/{AreaOfInterestManager.d.ts → SubscriptionManager.d.ts} +45 -59
  273. package/dist/sync/{AreaOfInterestManager.js → SubscriptionManager.js} +44 -52
  274. package/dist/sync/SyncWebSocket.d.ts +175 -250
  275. package/dist/sync/SyncWebSocket.js +431 -769
  276. package/dist/sync/awaitClaimGrant.d.ts +18 -18
  277. package/dist/sync/awaitClaimGrant.js +38 -30
  278. package/dist/sync/bootstrapApply.d.ts +70 -0
  279. package/dist/sync/bootstrapApply.js +73 -0
  280. package/dist/sync/commitFrames.d.ts +44 -0
  281. package/dist/sync/commitFrames.js +94 -0
  282. package/dist/sync/createClaimStream.d.ts +23 -22
  283. package/dist/sync/createClaimStream.js +108 -25
  284. package/dist/sync/createPresenceStream.d.ts +19 -18
  285. package/dist/sync/createPresenceStream.js +25 -26
  286. package/dist/sync/createSnapshot.d.ts +13 -17
  287. package/dist/sync/createSnapshot.js +20 -26
  288. package/dist/sync/credentialLifecycle.d.ts +175 -0
  289. package/dist/sync/credentialLifecycle.js +322 -0
  290. package/dist/sync/deltaPipeline.d.ts +113 -0
  291. package/dist/sync/deltaPipeline.js +261 -0
  292. package/dist/sync/groupChange.d.ts +113 -0
  293. package/dist/sync/groupChange.js +242 -0
  294. package/dist/sync/heartbeat.d.ts +63 -0
  295. package/dist/sync/heartbeat.js +91 -0
  296. package/dist/sync/participants.d.ts +27 -27
  297. package/dist/sync/schemas.d.ts +3 -2
  298. package/dist/sync/schemas.js +14 -10
  299. package/dist/sync/syncCursor.d.ts +40 -0
  300. package/dist/sync/syncCursor.js +55 -0
  301. package/dist/sync/syncPlan.d.ts +54 -0
  302. package/dist/sync/syncPlan.js +50 -0
  303. package/dist/sync/syncPosition.d.ts +54 -49
  304. package/dist/sync/syncPosition.js +57 -52
  305. package/dist/sync/wsFrameHandlers.d.ts +116 -0
  306. package/dist/sync/wsFrameHandlers.js +374 -0
  307. package/dist/testing/fixtures/bootstrap.d.ts +21 -17
  308. package/dist/testing/fixtures/bootstrap.js +12 -6
  309. package/dist/testing/fixtures/deltas.d.ts +31 -34
  310. package/dist/testing/fixtures/deltas.js +30 -33
  311. package/dist/testing/fixtures/models.d.ts +11 -10
  312. package/dist/testing/fixtures/models.js +12 -10
  313. package/dist/testing/helpers/{react-wrapper.d.ts → reactWrapper.d.ts} +13 -10
  314. package/dist/testing/helpers/{react-wrapper.js → reactWrapper.js} +15 -12
  315. package/dist/testing/helpers/{sync-engine-harness.d.ts → syncEngineHarness.d.ts} +17 -18
  316. package/dist/testing/helpers/{sync-engine-harness.js → syncEngineHarness.js} +14 -11
  317. package/dist/testing/helpers/wait.d.ts +13 -8
  318. package/dist/testing/helpers/wait.js +13 -8
  319. package/dist/testing/index.d.ts +4 -4
  320. package/dist/testing/index.js +3 -3
  321. package/dist/testing/mocks/MockMutationExecutor.d.ts +18 -17
  322. package/dist/testing/mocks/MockMutationExecutor.js +15 -14
  323. package/dist/testing/mocks/MockNetworkMonitor.d.ts +8 -8
  324. package/dist/testing/mocks/MockNetworkMonitor.js +8 -8
  325. package/dist/testing/mocks/MockSyncContext.d.ts +21 -34
  326. package/dist/testing/mocks/MockSyncContext.js +16 -45
  327. package/dist/testing/mocks/MockSyncStore.d.ts +14 -14
  328. package/dist/testing/mocks/MockSyncStore.js +11 -11
  329. package/dist/testing/mocks/MockWebSocket.d.ts +28 -24
  330. package/dist/testing/mocks/MockWebSocket.js +22 -21
  331. package/dist/transactions/TransactionQueue.d.ts +190 -221
  332. package/dist/transactions/TransactionQueue.js +424 -822
  333. package/dist/transactions/TransactionStore.d.ts +20 -0
  334. package/dist/transactions/TransactionStore.js +53 -0
  335. package/dist/transactions/UnconfirmedWrites.d.ts +82 -0
  336. package/dist/transactions/UnconfirmedWrites.js +104 -0
  337. package/dist/transactions/coalesceRules.d.ts +58 -0
  338. package/dist/transactions/coalesceRules.js +140 -0
  339. package/dist/transactions/commitPayload.d.ts +130 -0
  340. package/dist/transactions/commitPayload.js +143 -0
  341. package/dist/transactions/deltaConfirmation.d.ts +58 -0
  342. package/dist/transactions/deltaConfirmation.js +215 -0
  343. package/dist/transactions/optimisticApply.d.ts +49 -0
  344. package/dist/transactions/optimisticApply.js +65 -0
  345. package/dist/transactions/replayValidation.d.ts +99 -0
  346. package/dist/transactions/replayValidation.js +111 -0
  347. package/dist/types/global.d.ts +46 -41
  348. package/dist/types/global.js +20 -19
  349. package/dist/types/index.d.ts +74 -80
  350. package/dist/types/index.js +22 -27
  351. package/dist/types/modelData.d.ts +10 -0
  352. package/dist/types/modelData.js +9 -0
  353. package/dist/types/participant.d.ts +20 -0
  354. package/dist/types/participant.js +10 -0
  355. package/dist/types/streams.d.ts +216 -209
  356. package/dist/types/streams.js +7 -7
  357. package/dist/utils/asyncIterator.d.ts +25 -32
  358. package/dist/utils/asyncIterator.js +25 -32
  359. package/dist/utils/duration.d.ts +12 -15
  360. package/dist/utils/duration.js +12 -15
  361. package/dist/utils/mobxSetup.d.ts +53 -0
  362. package/dist/utils/{mobx-setup.js → mobxSetup.js} +44 -100
  363. package/dist/webhooks/events.d.ts +21 -16
  364. package/dist/webhooks/events.js +10 -8
  365. package/dist/webhooks/index.d.ts +5 -7
  366. package/dist/webhooks/index.js +5 -7
  367. package/dist/{schema/sync-delta-wire.d.ts → wire/delta.d.ts} +58 -41
  368. package/dist/wire/delta.js +114 -0
  369. package/dist/wire/errorEnvelope.d.ts +35 -27
  370. package/dist/wire/errorEnvelope.js +38 -32
  371. package/dist/wire/frames.d.ts +150 -67
  372. package/dist/wire/frames.js +48 -1
  373. package/dist/wire/index.d.ts +18 -13
  374. package/dist/wire/index.js +36 -13
  375. package/dist/wire/listEnvelope.d.ts +16 -23
  376. package/dist/wire/listEnvelope.js +7 -6
  377. package/dist/wire/protocol.d.ts +38 -0
  378. package/dist/wire/protocol.js +38 -0
  379. package/dist/wire/protocolVersion.d.ts +60 -0
  380. package/dist/wire/protocolVersion.js +67 -0
  381. package/docs/api-keys.md +4 -3
  382. package/docs/coordination.md +59 -0
  383. package/docs/examples/existing-python-backend.md +3 -3
  384. package/docs/identity.md +4 -4
  385. package/docs/integration-guide.md +1 -1
  386. package/docs/react.md +1 -1
  387. package/docs/sessions.md +5 -7
  388. package/package.json +24 -21
  389. package/dist/ai-sdk/coordinated-tool.d.ts +0 -101
  390. package/dist/ai-sdk/coordination-context.d.ts +0 -52
  391. package/dist/client/index.d.ts +0 -36
  392. package/dist/client/index.js +0 -33
  393. package/dist/config/index.d.ts +0 -10
  394. package/dist/config/index.js +0 -12
  395. package/dist/core/query-utils.d.ts +0 -34
  396. package/dist/core/query-utils.js +0 -59
  397. package/dist/interfaces/headless.d.ts +0 -95
  398. package/dist/interfaces/headless.js +0 -41
  399. package/dist/query/index.d.ts +0 -6
  400. package/dist/query/index.js +0 -5
  401. package/dist/realtime/index.d.ts +0 -10
  402. package/dist/realtime/index.js +0 -9
  403. package/dist/schema/plane.d.ts +0 -23
  404. package/dist/schema/plane.js +0 -19
  405. package/dist/schema/sync-delta-row.js +0 -103
  406. package/dist/schema/sync-delta-wire.js +0 -102
  407. package/dist/server/next.d.ts +0 -51
  408. package/dist/server/next.js +0 -47
  409. package/dist/server/read-config.d.ts +0 -67
  410. package/dist/server/read-config.js +0 -8
  411. package/dist/server/storage-mode.d.ts +0 -1
  412. package/dist/server/storage-mode.js +0 -18
  413. package/dist/source/connector-protocol.d.ts +0 -159
  414. package/dist/source/connector-protocol.js +0 -161
  415. package/dist/sync/OfflineFlush.d.ts +0 -9
  416. package/dist/sync/OfflineFlush.js +0 -22
  417. package/dist/sync/OfflineTransactionStore.d.ts +0 -37
  418. package/dist/sync/OfflineTransactionStore.js +0 -263
  419. package/dist/transactions/OptimisticEchoTracker.d.ts +0 -82
  420. package/dist/transactions/OptimisticEchoTracker.js +0 -104
  421. package/dist/transactions/index.d.ts +0 -16
  422. package/dist/transactions/index.js +0 -7
  423. package/dist/transactions/mutation-error-handler.d.ts +0 -5
  424. package/dist/transactions/mutation-error-handler.js +0 -39
  425. package/dist/utils/mobx-setup.d.ts +0 -42
@@ -1,11 +1,15 @@
1
1
  /**
2
- * TransactionQueue - Production-ready transaction management
2
+ * TransactionQueue 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.
3
6
  *
4
- * Key features:
5
- * - Optimistic updates with rollback
6
- * - Conflict resolution strategies
7
- * - LINEAR-style microtask batching (transactions in same event loop share batchId)
8
- * - Proper dependency injection (no singleton)
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.
9
13
  */
10
14
  import { EventEmitter } from 'events';
11
15
  import type { Database } from '../Database.js';
@@ -13,59 +17,21 @@ import { Model } from '../Model.js';
13
17
  import { SyncPosition } from '../sync/syncPosition.js';
14
18
  import type { WriteOptions } from '../interfaces/index.js';
15
19
  import type { StaleNotification, ReadDependency } from '../coordination/schema.js';
16
- export interface UserContext {
17
- userId: string;
18
- organizationId: string;
19
- role?: string;
20
- teamIds?: string[];
21
- }
22
- /** Wire-format mutation payload (post-projection). */
23
- type MutationInput = Record<string, unknown>;
24
- export interface Transaction {
25
- id: string;
26
- type: 'create' | 'update' | 'delete' | 'archive' | 'unarchive';
27
- modelName: string;
28
- modelId: string;
29
- modelKey: string;
30
- data?: MutationInput;
31
- previousData?: MutationInput | null;
32
- context: UserContext;
33
- status: 'pending' | 'executing' | 'awaiting_delta' | 'completed' | 'failed' | 'rolled_back';
34
- createdAt: number;
35
- attempts: number;
36
- priority: 'normal' | 'high';
37
- priorityScore: number;
38
- writeOptions?: WriteOptions;
39
- batchId?: string;
40
- /** Completed locally without a server operation; no sync echo will arrive. */
41
- localOnly?: boolean;
42
- /** LINEAR PATTERN: syncId threshold - transaction confirms when delta.id >= this value */
43
- syncIdNeededForCompletion?: number;
44
- /**
45
- * Resolves when the server has confirmed this transaction (delta arrived
46
- * or HTTP ack). Rejects with the originating error if the transaction is
47
- * permanently rolled back. Name matches the queue's existing `'confirmed'`
48
- * status vocabulary (`commits.create({wait:'confirmed'})`,
49
- * `waitForConfirmation`) — gives call sites a single `await` point for
50
- * "did my write land?", so failures surface at the source instead of
51
- * leaking via silent pool rollback. The rejection error is the same
52
- * `AbloError` recorded on the queue's `transaction:failed` event.
53
- */
54
- confirmation?: Promise<void>;
55
- }
20
+ import { type MutationInput, type Transaction, type UserContext } from './commitPayload.js';
21
+ export type { Transaction, UserContext } from './commitPayload.js';
56
22
  /**
57
- * A raw multi-op commit transaction queued via `ablo.commits.create()`.
58
- *
59
- * Distinct from the per-model `Transaction` above: operations are
60
- * pre-built by the caller and the envelope is atomic — no coalescing,
61
- * no FK reordering, no optimistic local apply. The lane shares the
62
- * same `mutationExecutor.commit()` underneath as the model-proxy
63
- * batch path, so reconnect-retry behavior is identical.
23
+ * A pre-built, multi-operation commit submitted through
24
+ * `ablo.commits.create()`. Unlike the per-model {@link Transaction} (see
25
+ * `./commitPayload.js`), the caller supplies the operations and the whole
26
+ * envelope commits atomically: the queue does not coalesce it, reorder its
27
+ * operations for foreign keys, or apply it optimistically. It runs through the
28
+ * same `mutationExecutor.commit()` as the model batch path, so its
29
+ * retry-on-reconnect behaviour is identical.
64
30
  */
65
31
  interface CommitTransaction {
66
32
  id: string;
67
33
  kind: 'commit';
68
- operations: Array<{
34
+ operations: {
69
35
  type: string;
70
36
  model: string;
71
37
  id: string;
@@ -73,9 +39,9 @@ interface CommitTransaction {
73
39
  transactionId?: string;
74
40
  readAt?: number | null;
75
41
  onStale?: 'reject' | 'overwrite' | 'notify' | null;
76
- }>;
42
+ }[];
77
43
  causedByTaskId?: string | null;
78
- /** Batch-level read dependencies (STORM read-set), forwarded to the executor. */
44
+ /** Read dependencies for the whole batch, forwarded to the executor so the server can detect stale-context writes. */
79
45
  reads?: ReadDependency[] | null;
80
46
  status: 'pending' | 'executing' | 'completed' | 'failed';
81
47
  createdAt: number;
@@ -109,17 +75,16 @@ interface TransactionQueueConfig {
109
75
  capMs: number;
110
76
  };
111
77
  /**
112
- * Grace window in ms before in-flight commit-lane transactions are
113
- * failed with `AbloConnectionError` after the WebSocket transitions
114
- * to `'disconnected'`. Brief disconnects (deploy rotations, mobile
115
- * jitter) are absorbed transparently; only persistent disconnects
116
- * surface as failures. Aligned with the 30s convention from the
117
- * WebSocket reconnection guidance (websocket.org). Set lower for
118
- * human-interactive consumers (e.g. 10s for chat) or higher for
119
- * batch workers (e.g. 60s for agent-worker).
78
+ * How long, in milliseconds, to wait after the connection drops before
79
+ * failing any in-flight commit-lane transaction with an
80
+ * {@link AbloConnectionError}. Brief disconnects, such as a server restart
81
+ * or mobile network jitter, are absorbed transparently; only a disconnect
82
+ * that outlasts this window surfaces as a failure. Set it lower for
83
+ * interactive use (for example 10 seconds for chat) and higher for
84
+ * background batch work. Defaults to 30 seconds.
120
85
  *
121
- * Without this deadline, `commits.create({wait:'confirmed'})` waits
122
- * forever when the WS dies mid-flight see the 2026-05-15 wedge.
86
+ * Without this deadline, `commits.create({ wait: 'confirmed' })` would wait
87
+ * forever if the connection died while a commit was in flight.
123
88
  */
124
89
  commitOfflineGraceMs: number;
125
90
  }
@@ -143,7 +108,6 @@ export declare class TransactionQueue extends EventEmitter {
143
108
  private computePriorityScore;
144
109
  private ensureDerivedFields;
145
110
  private entityKey;
146
- private isTransactionForModel;
147
111
  private resolveConfirmation;
148
112
  private takeUnsentCreateForModel;
149
113
  private cancelUnsentCreateForDelete;
@@ -151,29 +115,24 @@ export declare class TransactionQueue extends EventEmitter {
151
115
  private completeLocalDelete;
152
116
  private deferDeleteUntilCreateSettles;
153
117
  private releaseDeferredDeletesForCreate;
154
- private mergeUpdateData;
155
118
  private config;
156
119
  private executingCount;
157
120
  private optimisticUpdates;
158
121
  private commitNotifications;
159
- private deltaConfirmationTimeouts;
160
- private deltaConfirmationRetries;
122
+ private readonly deltaConfirmation;
161
123
  private isConnectedFn;
162
124
  private commitOfflineGraceTimer;
163
125
  /**
164
- * THE client's place in the global delta order the SHARED instance
165
- * (injected by SyncClient; standalone construction gets its own). The
166
- * queue advances `acked` on commit responses; the store advances
167
- * `applied`/`persisted`; snapshots/claims read `readFloor`. Contract +
168
- * rationale live in `sync/syncPosition.ts`.
126
+ * This client's place in the global order of sync deltas. The instance is
127
+ * shared: the client injects one, and a standalone queue creates its own. The
128
+ * queue advances the `acked` cursor as commit responses arrive, the store
129
+ * advances `applied` and `persisted`, and snapshots and claims read
130
+ * `readFloor`. See `../sync/syncPosition.js` for the full contract.
169
131
  */
170
132
  readonly position: SyncPosition;
171
133
  /** Applied-cursor alias, kept so the many internal read sites stay legible. */
172
134
  private get lastSeenSyncId();
173
135
  private noteAck;
174
- private static readonly DELTA_MAX_RETRIES;
175
- private static readonly DELTA_INITIAL_TIMEOUT_MS;
176
- private static readonly DELTA_MAX_TIMEOUT_MS;
177
136
  private batchIndex;
178
137
  /**
179
138
  * Resolvers for per-transaction `confirmation` promises. Populated in
@@ -185,99 +144,104 @@ export declare class TransactionQueue extends EventEmitter {
185
144
  private confirmationResolvers;
186
145
  constructor(config?: Partial<TransactionQueueConfig>);
187
146
  /**
188
- * Look up the in-flight `confirmation` promise for a (model, id) pair.
189
- * Returns the promise from the most-recent live transaction matching
190
- * the given model+id, or `Promise.resolve()` if none is open (which
191
- * means either "already confirmed" or "never staged" — both safe
192
- * outcomes for the routing-helper grace-window use case).
193
- *
194
- * Looks across `pending`, `executing`, and `awaiting_delta` — these
195
- * are the three non-terminal statuses where rollback is still
196
- * possible. Skips `completed` (already settled) and `failed` /
197
- * `rolled_back` (already rejected; the call site missed the
198
- * `confirmation` window and should rely on `onMutationFailure` toast
199
- * instead).
147
+ * Returns the in-flight confirmation promise for a given model and id. When
148
+ * several transactions match, it returns the most recent one's promise; when
149
+ * none is open it resolves immediately, which covers both "already confirmed"
150
+ * and "never staged".
200
151
  *
201
- * Distinct from `tx.confirmation` on a known transaction used by
202
- * call sites that hold a Model reference (returned by
203
- * `ablo.<model>.create()`) but never see the underlying transaction.
152
+ * It considers the three non-terminal statuses in which the write can still
153
+ * be rolled back `pending`, `executing`, and `awaiting_delta` — and ignores
154
+ * `completed` (already settled) and `failed`/`rolled_back` (already
155
+ * rejected). This complements the `confirmation` promise carried on a known
156
+ * {@link Transaction}: use this method at call sites that hold a model
157
+ * returned by `ablo.<model>.create()` but never see the underlying
158
+ * transaction.
204
159
  */
205
160
  confirmationFor(modelName: string, modelId: string): Promise<void>;
206
161
  /**
207
- * Attach a hot `confirmation` promise to a freshly created transaction.
208
- * Must be called BEFORE the transaction is staged so the call site can
209
- * `await tx.confirmation` synchronously after the create/update/delete
210
- * call returns. Idempotent: returns early if the tx already has one.
162
+ * Attaches a `confirmation` promise to a newly created transaction. Call this
163
+ * before the transaction is staged so a caller can `await tx.confirmation`
164
+ * immediately after a create, update, or delete returns. It is idempotent and
165
+ * returns early if one is already attached.
211
166
  *
212
- * The unhandled-rejection trap is mandatory most call sites won't
213
- * `await confirmation`, and Node/browser would otherwise crash on the
214
- * rejection. Consumers who *do* want failure visibility just attach a
215
- * `.then`/`.catch` and the trap becomes a no-op.
167
+ * It also attaches a no-op rejection handler. Most callers never await the
168
+ * confirmation, and without this the runtime would report an unhandled
169
+ * rejection when a write fails. Callers that do want to observe failure simply
170
+ * attach their own `.then`/`.catch`.
216
171
  */
217
172
  private attachConfirmation;
218
173
  /**
219
- * Set connection state checker - prevents rollbacks during disconnection.
220
- * When disconnected, timeouts re-schedule instead of rolling back.
174
+ * Registers a predicate the queue uses to check whether it is connected.
175
+ * While disconnected, confirmation timeouts re-schedule themselves instead of
176
+ * escalating, so a transaction is never rolled back merely because the client
177
+ * was briefly offline.
221
178
  */
222
179
  setConnectionChecker(fn: () => boolean): void;
223
180
  /**
224
- * Drive the offline-grace timer for in-flight commit-lane transactions.
225
- *
226
- * On `'disconnected'`: start a one-shot timer of
227
- * `config.commitOfflineGraceMs`. If the timer fires (disconnect
228
- * persisted past grace), iterate every commit-lane transaction with
229
- * `status ∈ {'pending', 'executing'}` and emit
230
- * `transaction:failed:${id}` with an `AbloConnectionError`. That
231
- * lets `waitForCommitReceipt` reject in seconds instead of hanging
232
- * forever — which is what wedged the 2026-05-15 subagent run.
181
+ * Drives the offline-grace timer for in-flight commit-lane transactions.
233
182
  *
234
- * On `'connected'`: clear any pending grace timer. Brief blips are
235
- * absorbed transparently; the existing reconnect-retry path in
236
- * `processCommitLane` / `flushOfflineQueue` handles the resumption.
183
+ * On `'disconnected'` it starts a one-shot timer of
184
+ * `config.commitOfflineGraceMs`. If that timer fires meaning the disconnect
185
+ * outlasted the grace window every commit-lane transaction still `pending`
186
+ * or `executing` is failed with an {@link AbloConnectionError}, so
187
+ * {@link waitForCommitReceipt} rejects within seconds instead of hanging.
237
188
  *
238
- * Called from SyncClient's `setConnectionState` after the
239
- * `'connection:disconnected'` / `'connection:established'` events.
189
+ * On `'connected'` it clears any pending grace timer. Brief disconnects are
190
+ * absorbed transparently; {@link processCommitLane} and
191
+ * {@link flushOfflineQueue} resume the work on reconnect.
240
192
  */
241
193
  setConnectionState(state: 'connected' | 'disconnected'): void;
242
194
  private failInFlightCommitsOnOffline;
243
195
  /**
244
- * Bind the executor for this queue instance. Called by the owning Ablo
245
- * right after `BaseSyncedStore` is constructed so the executor's
246
- * `storeHolder.store` closure resolves to *this* Ablo's WS not whichever
247
- * Ablo most recently called `initSyncEngine()`.
196
+ * Binds the mutation executor for this queue instance. The owning client
197
+ * calls this right after construction, so commits made here always dispatch
198
+ * through this instance's connection even when several client instances exist
199
+ * in the same process.
248
200
  */
249
201
  setMutationExecutor(executor: import('../interfaces/index.js').MutationExecutor): void;
250
202
  /**
251
- * Stage a transaction for commit (Linear pattern)
252
- * Transactions staged in the same event loop tick will be committed together
203
+ * Stages a transaction for commit. Transactions staged within the same
204
+ * event-loop tick are committed together.
253
205
  */
254
206
  private stageTransaction;
255
207
  /**
256
- * Schedule commit of staged transactions via microtask
257
- * This ensures all synchronous transaction creates are batched together
208
+ * Schedules the staged transactions to commit on a microtask, so all
209
+ * transactions created synchronously within one tick are batched together.
258
210
  */
259
211
  private scheduleCommit;
260
212
  /**
261
- * Commit all staged transactions to the execution queue (Linear pattern)
262
- * All transactions get the same batchIndex for efficient batching
213
+ * Moves all staged transactions onto the execution queue, assigning them a
214
+ * single shared batch index so they commit together.
263
215
  */
264
216
  private commitCreatedTransactions;
217
+ /**
218
+ * Flushes every pending transaction in one commit, the fast path taken on
219
+ * reconnect. If the batch fails, each transaction falls back to normal,
220
+ * one-by-one processing.
221
+ */
265
222
  flushOfflineQueue(): Promise<void>;
266
223
  /**
267
- * Create operation with optimistic update
224
+ * Records a create and applies it optimistically, then stages it for the next
225
+ * batched commit. Returns the {@link Transaction}, whose `confirmation`
226
+ * promise settles once the server confirms the write.
268
227
  */
269
228
  create(model: Model, context: UserContext, writeOptions?: WriteOptions): Promise<Transaction>;
270
229
  /**
271
- * Update operation with conflict detection
272
- * @param precomputedChanges - Optional pre-captured changes (avoids re-reading from model)
230
+ * Records an update and applies it optimistically, then stages it for the next
231
+ * batched commit. Rapid updates to the same entity coalesce into a single wire
232
+ * operation.
233
+ * @param precomputedChanges - Optional pre-captured changes, used instead of re-reading them from the model.
273
234
  */
274
235
  update(model: Model, context: UserContext, precomputedChanges?: Record<string, unknown>, writeOptions?: WriteOptions): Promise<Transaction>;
275
236
  /**
276
- * Delete operation with cascade handling
237
+ * Records a delete and applies it optimistically. If the row's own create has
238
+ * not yet been sent, both are cancelled locally rather than sending a create
239
+ * followed by a delete; if the create is already in flight, the delete waits
240
+ * until it settles so the server never sees a delete before the create.
277
241
  */
278
242
  delete(model: Model, context: UserContext, writeOptions?: WriteOptions): Promise<Transaction>;
279
243
  /**
280
- * Upload attachment delegates to attachment-uploader.ts
244
+ * Uploads a single attachment, delegating to the mutation executor.
281
245
  */
282
246
  uploadAttachment(_file: File, options: {
283
247
  id: string;
@@ -286,76 +250,79 @@ export declare class TransactionQueue extends EventEmitter {
286
250
  url: string;
287
251
  } | null>;
288
252
  /**
289
- * Batch upload attachments delegates to MutationExecutor
253
+ * Uploads several attachments in one call, delegating to the mutation executor.
290
254
  */
291
- batchUploadAttachments(_files: File[], items: Array<{
255
+ batchUploadAttachments(_files: File[], items: {
292
256
  id: string;
293
257
  [key: string]: unknown;
294
- }>, _context: UserContext): Promise<Array<{
258
+ }[], _context: UserContext): Promise<{
295
259
  id: string;
296
260
  url: string;
297
- }>>;
261
+ }[]>;
298
262
  /**
299
- * Archive operation
263
+ * Records an archive and applies it optimistically, then stages it for the
264
+ * next batched commit.
300
265
  */
301
266
  archive(model: Model, context: UserContext, writeOptions?: WriteOptions): Promise<Transaction>;
302
267
  /**
303
- * Unarchive operation
268
+ * Records an unarchive and applies it optimistically, then stages it for the
269
+ * next batched commit.
304
270
  */
305
271
  unarchive(model: Model, context: UserContext): Promise<Transaction>;
306
272
  /**
307
- * Enqueue transaction for execution
273
+ * Places a transaction on the execution queue, coalescing it into an existing
274
+ * same-entity update where possible so redundant writes collapse.
308
275
  */
309
276
  private enqueue;
310
277
  private scheduleProcessing;
311
278
  /**
312
- * Process batch of transactions using LINEAR-style unified batch execution.
313
- *
314
- * Key optimization: Instead of making separate calls per operation type/model,
315
- * we collect ALL batchable operations and send them in a SINGLE commit call.
316
- * The sync-server handles mixed types atomically inside one transaction.
317
- *
318
- * This reduces N round-trips to 1, dramatically improving batch latency.
279
+ * Processes one batch of transactions in a single commit. Rather than calling
280
+ * the server once per operation type or model, it collects every batchable
281
+ * operation and sends them together; the server applies the mixed operations
282
+ * atomically within one transaction. This turns many round trips into one and
283
+ * greatly reduces batch latency.
319
284
  */
320
285
  private processBatch;
321
286
  /**
322
- * LINEAR PATTERN: Confirm all awaiting transactions when delta with syncId >= threshold arrives.
323
- * This replaces clientMutationId echoing - transactions are confirmed by sync ID threshold.
324
- * @param syncId - The sync ID of the received delta
287
+ * Confirms every awaiting transaction whose sync-id threshold this delta meets
288
+ * or exceeds. The confirmation policy and timeout tracking live in
289
+ * {@link DeltaConfirmationTracker} (`./deltaConfirmation.js`).
290
+ * @param syncId - The sync id of the received delta.
325
291
  */
326
292
  onDeltaReceived(syncId: number): void;
327
293
  private scheduleDeltaConfirmationTimeout;
328
- private cancelDeltaConfirmationTimeout;
329
294
  /**
330
- * Wait for a transaction to be confirmed via delta echo (Linear pattern)
331
- * Reuses existing timeout mechanism from scheduleDeltaConfirmationTimeout
295
+ * Resolves once the given transaction is confirmed and rejects if it fails.
296
+ * The confirming delta's timeout is handled by
297
+ * {@link scheduleDeltaConfirmationTimeout}.
332
298
  */
333
299
  waitForConfirmation(transactionId: string): Promise<void>;
334
300
  hasClientMutationId(id: string): boolean;
335
301
  /**
336
- * Enqueue a raw multi-op atomic commit envelope (the `ablo.commits.create`
337
- * path). Operations are pre-built by the caller; the queue's job is
338
- * retry-on-reconnect + idempotent dedup, NOT optimistic apply or FK
339
- * ordering. Same idempotency key (clientTxId) is dropped on the floor
340
- * if already in flight server-side `mutation_log` handles cross-session
341
- * dedup; this guard handles same-session double-enqueue.
302
+ * Enqueues a pre-built, multi-operation atomic commit the
303
+ * `ablo.commits.create()` path. The caller supplies the operations; the queue
304
+ * only retries on reconnect and de-duplicates, and does not apply the change
305
+ * optimistically or reorder for foreign keys. A duplicate `clientTxId`
306
+ * already in flight is ignored: the server's `mutation_log` de-duplicates
307
+ * across sessions, and this guard covers a double-enqueue within one session.
342
308
  */
343
309
  enqueueCommit(clientTxId: string, operations: CommitTransaction['operations'], options?: {
344
310
  causedByTaskId?: string | null;
345
311
  reads?: ReadDependency[] | null;
346
312
  }): void;
347
313
  /**
348
- * Drain pending commit-lane envelopes serially. Transient failures
349
- * (network, ws_not_ready) leave the head-of-queue tx in `pending` and
350
- * break reconnect handler re-kicks via `flushOfflineQueue`.
351
- * Permanent failures emit `transaction:failed:<id>` and drop the tx.
314
+ * Drains the pending commit-lane envelopes one at a time. A transient
315
+ * failure, such as a network error, leaves the envelope at the head of the
316
+ * lane in `pending` and stops; reconnect re-kicks it through
317
+ * {@link flushOfflineQueue}. A permanent failure emits
318
+ * `transaction:failed:<id>` and drops the envelope.
352
319
  */
353
320
  private processCommitLane;
354
321
  /**
355
- * Promise-based confirmation for a commit-lane transaction. Resolves
356
- * with the server-side `lastSyncId` once `mutation_result` lands;
357
- * rejects on permanent failure. Backs the `wait: 'confirmed'` semantics
358
- * of `ablo.commits.create()`.
322
+ * Resolves once a commit-lane transaction is confirmed, returning the server's
323
+ * `lastSyncId` and any stale-context notifications; rejects on permanent
324
+ * failure. This backs the `wait: 'confirmed'` semantics of
325
+ * `ablo.commits.create()`.
359
326
  */
360
327
  waitForCommitReceipt(clientTxId: string): Promise<{
361
328
  lastSyncId: number;
@@ -363,80 +330,84 @@ export declare class TransactionQueue extends EventEmitter {
363
330
  }>;
364
331
  private isReorderPayload;
365
332
  /**
366
- * Determine if an error is transient (retryable) vs permanent (non-retryable).
367
- *
368
- * IMPORTANT: Uses a BLOCKLIST approach for safety - only retry on known transient errors.
369
- * Any unknown error type defaults to permanent (don't retry) to prevent infinite loops.
333
+ * Classifies an error as transient (worth retrying) or permanent. The
334
+ * approach is deliberately conservative: only known-transient errors are
335
+ * retried, and anything unrecognized is treated as permanent so a failing
336
+ * write cannot loop forever.
370
337
  *
371
- * Transient errors (will retry):
372
- * - Network failures, connection errors, timeouts
373
- * - Server errors (5xx status codes)
374
- * - Rate limiting (429)
338
+ * Transient (retried):
339
+ * - Network failures, connection errors, and timeouts.
340
+ * - Server errors (HTTP 5xx).
341
+ * - Rate limiting (HTTP 429).
375
342
  *
376
- * Permanent errors (won't retry - includes but not limited to):
377
- * - Validation errors, constraint violations
378
- * - Not found, unauthorized, forbidden
379
- * - Any other business logic error from the server
343
+ * Permanent (not retried), among others:
344
+ * - Validation errors and constraint violations.
345
+ * - Not found, unauthorized, and forbidden.
346
+ * - Any other business-logic error from the server.
380
347
  */
381
348
  private isPermanentError;
382
349
  /**
383
- * Handle transaction failure
350
+ * Handles a failed transaction: retries transient failures with backoff and
351
+ * rolls back permanent ones, settling the transaction's confirmation promise
352
+ * either way.
384
353
  */
385
354
  private handleFailure;
386
355
  /**
387
- * Conflict resolution
356
+ * Resolves a conflict against server data using the configured strategy:
357
+ * last-write-wins rolls the local change back, merge and reject re-enqueue it,
358
+ * and custom applies the caller's resolver.
388
359
  */
389
360
  handleConflict(transaction: Transaction, serverData: MutationInput): Promise<void>;
390
361
  /**
391
- * Optimistic updates
362
+ * Optimistic updates. The apply and rollback rules live in `./optimisticApply.js`;
363
+ * these methods bind them to the queue's own tracking map and event emitter.
392
364
  */
393
365
  private applyOptimisticCreate;
394
366
  private applyOptimisticUpdate;
395
367
  private applyOptimisticDelete;
396
368
  private rollbackOptimistic;
397
369
  /**
398
- * Execute individual transaction via the unified commit path
370
+ * Loads transactions persisted from a previous session and re-enqueues them,
371
+ * so writes made while offline survive a restart. Does nothing when
372
+ * persistence is disabled.
399
373
  */
400
- private executeTransaction;
374
+ loadPersistedTransactions(database: Database): Promise<void>;
401
375
  /**
402
- * Persistence
376
+ * Validates and rehydrates one persisted row. Rows written to the same store
377
+ * by other subsystems are skipped, and rows that fail the persisted
378
+ * transaction schema — from an older version or corruption — are dropped and
379
+ * reported rather than replayed as commits.
403
380
  */
404
- loadPersistedTransactions(database: Database): Promise<void>;
405
381
  private deserializeTransaction;
406
382
  /**
407
- * Cancel transactions for a specific model
383
+ * Cancels every pending or executing transaction for a given model id,
384
+ * optionally limited to one operation type, rolling back their optimistic
385
+ * state. Returns the cancelled transactions.
408
386
  */
409
387
  cancelTransactionsForModel(modelId: string, transactionType?: string): Transaction[];
410
388
  /**
411
- * LINEAR PATTERN: Cancel transactions for child entities by foreign key
412
- *
413
- * Used by SyncedStore for cascade cancellation when a parent is deleted.
414
- * This keeps FK relationship knowledge in ModelRegistry/SyncedStore,
415
- * while TransactionQueue just handles the cancellation mechanics.
389
+ * Cancels pending transactions for child rows that reference a deleted parent,
390
+ * used to cascade a parent deletion. The caller supplies the foreign-key
391
+ * relationship; this method performs the cancellation.
416
392
  *
417
- * @param childModelName - The child model type (e.g., 'SlideLayer')
418
- * @param foreignKey - The FK property name (e.g., 'slideId')
419
- * @param parentId - The deleted parent's ID
420
- * @returns Number of transactions cancelled
393
+ * @param childModelName - The child model type (for example 'SlideLayer').
394
+ * @param foreignKey - The foreign-key property name (for example 'slideId').
395
+ * @param parentId - The deleted parent's id.
396
+ * @returns The number of transactions cancelled.
421
397
  */
422
398
  cancelTransactionsByForeignKey(childModelName: string, foreignKey: string, parentId: string): number;
423
399
  /**
424
- * Get count of outstanding transactions
400
+ * Returns the number of transactions still pending or executing.
425
401
  */
426
402
  getOutstandingTransactionCount(): number;
427
- /**
428
- * Utilities
429
- */
403
+ /** Generates a unique local transaction id. */
430
404
  private generateId;
431
405
  private mergeData;
432
406
  private extractCreateData;
433
407
  private mapChangesToInput;
434
408
  private extractUpdateData;
435
- private buildUpdateInput;
436
409
  private extractPreviousData;
437
- /**
438
- * Public API
439
- */
410
+ /** Returns a snapshot of queue counts and the current configuration. */
440
411
  getStats(): {
441
412
  pending: number;
442
413
  executing: number;
@@ -467,24 +438,23 @@ export declare class TransactionQueue extends EventEmitter {
467
438
  capMs: number;
468
439
  };
469
440
  /**
470
- * Grace window in ms before in-flight commit-lane transactions are
471
- * failed with `AbloConnectionError` after the WebSocket transitions
472
- * to `'disconnected'`. Brief disconnects (deploy rotations, mobile
473
- * jitter) are absorbed transparently; only persistent disconnects
474
- * surface as failures. Aligned with the 30s convention from the
475
- * WebSocket reconnection guidance (websocket.org). Set lower for
476
- * human-interactive consumers (e.g. 10s for chat) or higher for
477
- * batch workers (e.g. 60s for agent-worker).
441
+ * How long, in milliseconds, to wait after the connection drops before
442
+ * failing any in-flight commit-lane transaction with an
443
+ * {@link AbloConnectionError}. Brief disconnects, such as a server restart
444
+ * or mobile network jitter, are absorbed transparently; only a disconnect
445
+ * that outlasts this window surfaces as a failure. Set it lower for
446
+ * interactive use (for example 10 seconds for chat) and higher for
447
+ * background batch work. Defaults to 30 seconds.
478
448
  *
479
- * Without this deadline, `commits.create({wait:'confirmed'})` waits
480
- * forever when the WS dies mid-flight see the 2026-05-15 wedge.
449
+ * Without this deadline, `commits.create({ wait: 'confirmed' })` would wait
450
+ * forever if the connection died while a commit was in flight.
481
451
  */
482
452
  commitOfflineGraceMs: number;
483
453
  };
484
454
  };
485
455
  /**
486
- * Get detailed debug info for the sync debug page
487
- * Exposes internal state that helps diagnose delta confirmation issues
456
+ * Returns detailed internal state pending, executing, and awaiting-delta
457
+ * transactions to help diagnose delta-confirmation issues.
488
458
  */
489
459
  getDebugInfo(): {
490
460
  lastSeenSyncId: number;
@@ -511,12 +481,11 @@ export declare class TransactionQueue extends EventEmitter {
511
481
  modelId: string;
512
482
  }[];
513
483
  };
514
- /**
515
- * Set configuration
516
- */
484
+ /** Merges the given options into the queue's configuration. */
517
485
  setConfig(config: Partial<TransactionQueueConfig>): void;
518
486
  /**
519
- * Handle incoming sync delta - simplified for permanent IDs
487
+ * Re-emits an incoming sync delta on the `sync:delta` event for the store to
488
+ * apply. Because rows use stable ids, no id reconciliation is needed here.
520
489
  */
521
490
  handleSyncDelta(delta: {
522
491
  id: string;
@@ -525,8 +494,8 @@ export declare class TransactionQueue extends EventEmitter {
525
494
  data: any;
526
495
  }): boolean;
527
496
  /**
528
- * Cleanup and dispose resources
497
+ * Releases the queue's resources: rolls back outstanding optimistic updates,
498
+ * clears all timers and stored transactions, and removes event listeners.
529
499
  */
530
500
  dispose(): void;
531
501
  }
532
- export {};