@abloatai/ablo 0.36.0 → 0.37.1

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 (597) hide show
  1. package/AGENTS.md +2 -2
  2. package/CHANGELOG.md +55 -2014
  3. package/NOTICE +2 -2
  4. package/README.md +45 -63
  5. package/assets/banner.png +0 -0
  6. package/dist/auth.d.ts +2 -0
  7. package/dist/auth.d.ts.map +1 -0
  8. package/dist/auth.js +2 -0
  9. package/dist/auth.js.map +1 -0
  10. package/dist/client.d.ts +3 -0
  11. package/dist/client.d.ts.map +1 -0
  12. package/dist/client.js +3 -0
  13. package/dist/client.js.map +1 -0
  14. package/dist/coordination.d.ts +2 -0
  15. package/dist/coordination.d.ts.map +1 -0
  16. package/dist/coordination.js +2 -0
  17. package/dist/coordination.js.map +1 -0
  18. package/dist/index.d.ts +3 -114
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +3 -163
  21. package/dist/index.js.map +1 -0
  22. package/dist/react.d.ts +4 -0
  23. package/dist/react.d.ts.map +1 -0
  24. package/dist/react.js +3 -0
  25. package/dist/react.js.map +1 -0
  26. package/dist/schema.d.ts +2 -0
  27. package/dist/schema.d.ts.map +1 -0
  28. package/dist/schema.js +2 -0
  29. package/dist/schema.js.map +1 -0
  30. package/dist/server.d.ts +2 -0
  31. package/dist/server.d.ts.map +1 -0
  32. package/dist/server.js +2 -0
  33. package/dist/server.js.map +1 -0
  34. package/dist/source-conformance.d.ts +2 -0
  35. package/dist/source-conformance.d.ts.map +1 -0
  36. package/dist/source-conformance.js +2 -0
  37. package/dist/source-conformance.js.map +1 -0
  38. package/dist/source-drizzle.d.ts +2 -0
  39. package/dist/source-drizzle.d.ts.map +1 -0
  40. package/dist/source-drizzle.js +2 -0
  41. package/dist/source-drizzle.js.map +1 -0
  42. package/dist/source-kysely.d.ts +2 -0
  43. package/dist/source-kysely.d.ts.map +1 -0
  44. package/dist/source-kysely.js +2 -0
  45. package/dist/source-kysely.js.map +1 -0
  46. package/dist/source-next.d.ts +2 -0
  47. package/dist/source-next.d.ts.map +1 -0
  48. package/dist/source-next.js +2 -0
  49. package/dist/source-next.js.map +1 -0
  50. package/dist/source.d.ts +2 -0
  51. package/dist/source.d.ts.map +1 -0
  52. package/dist/source.js +2 -0
  53. package/dist/source.js.map +1 -0
  54. package/dist/wire.d.ts +2 -0
  55. package/dist/wire.d.ts.map +1 -0
  56. package/dist/wire.js +2 -0
  57. package/dist/wire.js.map +1 -0
  58. package/docs/agents.md +1 -1
  59. package/docs/api-keys.md +7 -6
  60. package/docs/api.md +10 -10
  61. package/docs/client-behavior.md +5 -5
  62. package/docs/coordination.md +52 -62
  63. package/docs/data-sources.md +1 -1
  64. package/docs/examples/agent-human.md +4 -4
  65. package/docs/examples/ai-sdk-tool.md +1 -1
  66. package/docs/examples/existing-python-backend.md +15 -4
  67. package/docs/examples/nextjs.md +27 -6
  68. package/docs/examples/server-agent.md +2 -2
  69. package/docs/how-it-works.md +4 -4
  70. package/docs/identity.md +2 -1
  71. package/docs/integration-guide.md +24 -13
  72. package/docs/internal/README.md +18 -0
  73. package/docs/internal/agent-fleet-coordination-design.md +171 -0
  74. package/docs/internal/agent-orchestration.md +58 -0
  75. package/docs/internal/commit-identifiers.md +91 -0
  76. package/docs/internal/concurrency-open-decisions.md +37 -0
  77. package/docs/internal/data-source-reverse-channel.md +150 -0
  78. package/docs/internal/per-field-conflict-detection.md +165 -0
  79. package/docs/internal/postgres-replication.md +64 -0
  80. package/docs/internal/serializable-schema.md +119 -0
  81. package/docs/internal/structure.md +32 -0
  82. package/docs/mcp.md +2 -2
  83. package/docs/migration.md +3 -3
  84. package/docs/quickstart.md +2 -2
  85. package/docs/react.md +5 -5
  86. package/docs/schema-contract.md +3 -3
  87. package/docs/sessions.md +91 -37
  88. package/examples/README.md +2 -2
  89. package/examples/data-source/README.md +1 -1
  90. package/examples/data-source/ablo-driver.ts +1 -1
  91. package/examples/data-source/customer-server.ts +1 -1
  92. package/examples/data-source/run.ts +1 -1
  93. package/examples/data-source/schema.ts +1 -1
  94. package/examples/quickstart.ts +2 -2
  95. package/llms.txt +8 -8
  96. package/package.json +63 -166
  97. package/bin/ablo.cjs +0 -39
  98. package/dist/BaseSyncedStore.d.ts +0 -843
  99. package/dist/BaseSyncedStore.js +0 -1971
  100. package/dist/Database.d.ts +0 -323
  101. package/dist/Database.js +0 -1502
  102. package/dist/InstanceCache.d.ts +0 -237
  103. package/dist/InstanceCache.js +0 -1166
  104. package/dist/LazyReferenceCollection.d.ts +0 -177
  105. package/dist/LazyReferenceCollection.js +0 -461
  106. package/dist/Model.d.ts +0 -454
  107. package/dist/Model.js +0 -919
  108. package/dist/ModelRegistry.d.ts +0 -225
  109. package/dist/ModelRegistry.js +0 -539
  110. package/dist/NetworkMonitor.d.ts +0 -28
  111. package/dist/NetworkMonitor.js +0 -79
  112. package/dist/RuntimeContext.d.ts +0 -52
  113. package/dist/RuntimeContext.js +0 -80
  114. package/dist/SyncClient.d.ts +0 -541
  115. package/dist/SyncClient.js +0 -2202
  116. package/dist/adapters/alwaysOnline.d.ts +0 -14
  117. package/dist/adapters/alwaysOnline.js +0 -17
  118. package/dist/adapters/inMemoryStorage.d.ts +0 -31
  119. package/dist/adapters/inMemoryStorage.js +0 -110
  120. package/dist/ai-sdk/coordinatedTool.d.ts +0 -120
  121. package/dist/ai-sdk/coordinatedTool.js +0 -134
  122. package/dist/ai-sdk/coordinationContext.d.ts +0 -46
  123. package/dist/ai-sdk/coordinationContext.js +0 -106
  124. package/dist/ai-sdk/index.d.ts +0 -121
  125. package/dist/ai-sdk/index.js +0 -121
  126. package/dist/ai-sdk/wrap.d.ts +0 -65
  127. package/dist/ai-sdk/wrap.js +0 -39
  128. package/dist/auth/index.d.ts +0 -1
  129. package/dist/auth/index.js +0 -8
  130. package/dist/batching/index.d.ts +0 -55
  131. package/dist/batching/index.js +0 -147
  132. package/dist/client/Ablo.d.ts +0 -231
  133. package/dist/client/Ablo.js +0 -160
  134. package/dist/client/abloClient.d.ts +0 -309
  135. package/dist/client/abloClient.js +0 -13
  136. package/dist/client/clientPrelude.d.ts +0 -52
  137. package/dist/client/clientPrelude.js +0 -60
  138. package/dist/client/consoleLogger.d.ts +0 -35
  139. package/dist/client/consoleLogger.js +0 -44
  140. package/dist/client/coreClient.d.ts +0 -60
  141. package/dist/client/coreClient.js +0 -118
  142. package/dist/client/createInternalComponents.d.ts +0 -50
  143. package/dist/client/createInternalComponents.js +0 -98
  144. package/dist/client/createModelProxy.d.ts +0 -248
  145. package/dist/client/createModelProxy.js +0 -884
  146. package/dist/client/humans.d.ts +0 -69
  147. package/dist/client/humans.js +0 -78
  148. package/dist/client/modelRegistration.d.ts +0 -10
  149. package/dist/client/modelRegistration.js +0 -312
  150. package/dist/client/options.d.ts +0 -461
  151. package/dist/client/options.js +0 -7
  152. package/dist/client/reactiveEngine.d.ts +0 -53
  153. package/dist/client/reactiveEngine.js +0 -688
  154. package/dist/client/resourceTypes.d.ts +0 -12
  155. package/dist/client/resourceTypes.js +0 -10
  156. package/dist/client/schemaConfig.d.ts +0 -44
  157. package/dist/client/schemaConfig.js +0 -185
  158. package/dist/client/storeCluster.d.ts +0 -47
  159. package/dist/client/storeCluster.js +0 -118
  160. package/dist/client/storeLifecycle.d.ts +0 -61
  161. package/dist/client/storeLifecycle.js +0 -231
  162. package/dist/client/validateAbloOptions.d.ts +0 -42
  163. package/dist/client/validateAbloOptions.js +0 -43
  164. package/dist/client/wsMutationExecutor.d.ts +0 -27
  165. package/dist/client/wsMutationExecutor.js +0 -72
  166. package/dist/context.d.ts +0 -42
  167. package/dist/context.js +0 -81
  168. package/dist/coordination/ClaimLog.d.ts +0 -26
  169. package/dist/coordination/ClaimLog.js +0 -32
  170. package/dist/coordination/index.d.ts +0 -1
  171. package/dist/coordination/index.js +0 -8
  172. package/dist/core/index.d.ts +0 -33
  173. package/dist/core/index.js +0 -48
  174. package/dist/docs/catalog.d.ts +0 -72
  175. package/dist/docs/catalog.js +0 -230
  176. package/dist/docs/index.d.ts +0 -10
  177. package/dist/docs/index.js +0 -10
  178. package/dist/environment.d.ts +0 -1
  179. package/dist/environment.js +0 -8
  180. package/dist/interfaces/index.d.ts +0 -311
  181. package/dist/interfaces/index.js +0 -9
  182. package/dist/keys/index.d.ts +0 -1
  183. package/dist/keys/index.js +0 -8
  184. package/dist/mutators/RecordingMutation.d.ts +0 -36
  185. package/dist/mutators/RecordingMutation.js +0 -182
  186. package/dist/mutators/Transaction.d.ts +0 -40
  187. package/dist/mutators/Transaction.js +0 -58
  188. package/dist/mutators/UndoManager.d.ts +0 -258
  189. package/dist/mutators/UndoManager.js +0 -658
  190. package/dist/mutators/defineMutators.d.ts +0 -60
  191. package/dist/mutators/defineMutators.js +0 -18
  192. package/dist/mutators/inverseOp.d.ts +0 -126
  193. package/dist/mutators/inverseOp.js +0 -71
  194. package/dist/mutators/mutateActions.d.ts +0 -45
  195. package/dist/mutators/mutateActions.js +0 -105
  196. package/dist/mutators/readerActions.d.ts +0 -33
  197. package/dist/mutators/readerActions.js +0 -57
  198. package/dist/mutators/undoApply.d.ts +0 -51
  199. package/dist/mutators/undoApply.js +0 -117
  200. package/dist/policy/index.d.ts +0 -21
  201. package/dist/policy/index.js +0 -20
  202. package/dist/query/QueryProcessor.d.ts +0 -75
  203. package/dist/query/QueryProcessor.js +0 -255
  204. package/dist/query/client.d.ts +0 -64
  205. package/dist/query/client.js +0 -138
  206. package/dist/query/types.d.ts +0 -85
  207. package/dist/query/types.js +0 -16
  208. package/dist/react/AbloProvider.d.ts +0 -242
  209. package/dist/react/AbloProvider.js +0 -458
  210. package/dist/react/ClientSideSuspense.d.ts +0 -36
  211. package/dist/react/ClientSideSuspense.js +0 -17
  212. package/dist/react/DefaultFallback.d.ts +0 -24
  213. package/dist/react/DefaultFallback.js +0 -43
  214. package/dist/react/context.d.ts +0 -55
  215. package/dist/react/context.js +0 -29
  216. package/dist/react/createAbloReact.d.ts +0 -56
  217. package/dist/react/createAbloReact.js +0 -51
  218. package/dist/react/index.d.ts +0 -62
  219. package/dist/react/index.js +0 -69
  220. package/dist/react/internalContext.d.ts +0 -33
  221. package/dist/react/internalContext.js +0 -3
  222. package/dist/react/useAblo.d.ts +0 -82
  223. package/dist/react/useAblo.js +0 -120
  224. package/dist/react/useCurrentUserId.d.ts +0 -22
  225. package/dist/react/useCurrentUserId.js +0 -34
  226. package/dist/react/useErrorListener.d.ts +0 -20
  227. package/dist/react/useErrorListener.js +0 -38
  228. package/dist/react/useMutationFailureListener.d.ts +0 -26
  229. package/dist/react/useMutationFailureListener.js +0 -38
  230. package/dist/react/useMutators.d.ts +0 -56
  231. package/dist/react/useMutators.js +0 -84
  232. package/dist/react/useReactive.d.ts +0 -35
  233. package/dist/react/useReactive.js +0 -123
  234. package/dist/react/useSyncStatus.d.ts +0 -59
  235. package/dist/react/useSyncStatus.js +0 -76
  236. package/dist/react/useUndoScope.d.ts +0 -34
  237. package/dist/react/useUndoScope.js +0 -81
  238. package/dist/schema/coordination.d.ts +0 -112
  239. package/dist/schema/coordination.js +0 -133
  240. package/dist/schema/ddl.d.ts +0 -97
  241. package/dist/schema/ddl.js +0 -491
  242. package/dist/schema/ddlLock.d.ts +0 -35
  243. package/dist/schema/ddlLock.js +0 -46
  244. package/dist/schema/diff.d.ts +0 -225
  245. package/dist/schema/diff.js +0 -289
  246. package/dist/schema/generate.d.ts +0 -19
  247. package/dist/schema/generate.js +0 -86
  248. package/dist/schema/index.d.ts +0 -42
  249. package/dist/schema/index.js +0 -80
  250. package/dist/schema/queries.d.ts +0 -201
  251. package/dist/schema/queries.js +0 -144
  252. package/dist/schema/select.d.ts +0 -40
  253. package/dist/schema/select.js +0 -90
  254. package/dist/schema/serialize.d.ts +0 -115
  255. package/dist/schema/serialize.js +0 -265
  256. package/dist/schema/sugar.d.ts +0 -109
  257. package/dist/schema/sugar.js +0 -83
  258. package/dist/schema/syncDeltaRow.d.ts +0 -6
  259. package/dist/schema/syncDeltaRow.js +0 -6
  260. package/dist/server/adapter.d.ts +0 -173
  261. package/dist/server/adapter.js +0 -18
  262. package/dist/server/commit.d.ts +0 -107
  263. package/dist/server/commit.js +0 -1
  264. package/dist/server/index.d.ts +0 -14
  265. package/dist/server/index.js +0 -2
  266. package/dist/server/readConfig.d.ts +0 -80
  267. package/dist/server/readConfig.js +0 -8
  268. package/dist/server/storageMode.d.ts +0 -23
  269. package/dist/server/storageMode.js +0 -17
  270. package/dist/source/adapter.d.ts +0 -83
  271. package/dist/source/adapter.js +0 -24
  272. package/dist/source/adapters/drizzle.d.ts +0 -48
  273. package/dist/source/adapters/drizzle.js +0 -219
  274. package/dist/source/adapters/kysely.d.ts +0 -42
  275. package/dist/source/adapters/kysely.js +0 -205
  276. package/dist/source/adapters/kyselyMutationCore.d.ts +0 -76
  277. package/dist/source/adapters/kyselyMutationCore.js +0 -125
  278. package/dist/source/adapters/memory.d.ts +0 -13
  279. package/dist/source/adapters/memory.js +0 -130
  280. package/dist/source/adapters/prisma.d.ts +0 -63
  281. package/dist/source/adapters/prisma.js +0 -202
  282. package/dist/source/conformance.d.ts +0 -37
  283. package/dist/source/conformance.js +0 -215
  284. package/dist/source/connector.d.ts +0 -95
  285. package/dist/source/connector.js +0 -266
  286. package/dist/source/connectorProtocol.d.ts +0 -154
  287. package/dist/source/connectorProtocol.js +0 -163
  288. package/dist/source/contract.d.ts +0 -195
  289. package/dist/source/contract.js +0 -164
  290. package/dist/source/factory.d.ts +0 -92
  291. package/dist/source/factory.js +0 -286
  292. package/dist/source/idempotency.d.ts +0 -61
  293. package/dist/source/idempotency.js +0 -144
  294. package/dist/source/index.d.ts +0 -23
  295. package/dist/source/index.js +0 -30
  296. package/dist/source/migrations.d.ts +0 -21
  297. package/dist/source/migrations.js +0 -103
  298. package/dist/source/next.d.ts +0 -32
  299. package/dist/source/next.js +0 -25
  300. package/dist/source/pushQueue.d.ts +0 -134
  301. package/dist/source/pushQueue.js +0 -256
  302. package/dist/source/signing.d.ts +0 -92
  303. package/dist/source/signing.js +0 -162
  304. package/dist/source/types.d.ts +0 -401
  305. package/dist/source/types.js +0 -59
  306. package/dist/storeContract.d.ts +0 -145
  307. package/dist/storeContract.js +0 -12
  308. package/dist/stores/DatabaseManager.d.ts +0 -107
  309. package/dist/stores/DatabaseManager.js +0 -388
  310. package/dist/stores/ObjectStore.d.ts +0 -115
  311. package/dist/stores/ObjectStore.js +0 -393
  312. package/dist/stores/ObjectStoreContract.d.ts +0 -38
  313. package/dist/stores/ObjectStoreContract.js +0 -1
  314. package/dist/stores/StoreManager.d.ts +0 -114
  315. package/dist/stores/StoreManager.js +0 -304
  316. package/dist/stores/SyncActionStore.d.ts +0 -99
  317. package/dist/stores/SyncActionStore.js +0 -506
  318. package/dist/stores/openIDBWithTimeout.d.ts +0 -65
  319. package/dist/stores/openIDBWithTimeout.js +0 -153
  320. package/dist/stores/syncAction.d.ts +0 -26
  321. package/dist/stores/syncAction.js +0 -16
  322. package/dist/surface.d.ts +0 -36
  323. package/dist/surface.js +0 -75
  324. package/dist/sync/BootstrapFetcher.d.ts +0 -284
  325. package/dist/sync/BootstrapFetcher.js +0 -964
  326. package/dist/sync/ConnectionManager.d.ts +0 -8
  327. package/dist/sync/ConnectionManager.js +0 -8
  328. package/dist/sync/OnDemandLoader.d.ts +0 -231
  329. package/dist/sync/OnDemandLoader.js +0 -743
  330. package/dist/sync/SubscriptionManager.d.ts +0 -159
  331. package/dist/sync/SubscriptionManager.js +0 -243
  332. package/dist/sync/SyncWebSocket.d.ts +0 -173
  333. package/dist/sync/SyncWebSocket.js +0 -438
  334. package/dist/sync/awaitClaimGrant.d.ts +0 -6
  335. package/dist/sync/awaitClaimGrant.js +0 -6
  336. package/dist/sync/bootstrapApply.d.ts +0 -73
  337. package/dist/sync/bootstrapApply.js +0 -73
  338. package/dist/sync/commitFrames.d.ts +0 -8
  339. package/dist/sync/commitFrames.js +0 -8
  340. package/dist/sync/contextPorts.d.ts +0 -18
  341. package/dist/sync/contextPorts.js +0 -31
  342. package/dist/sync/createClaimStream.d.ts +0 -7
  343. package/dist/sync/createClaimStream.js +0 -7
  344. package/dist/sync/createPresenceStream.d.ts +0 -69
  345. package/dist/sync/createPresenceStream.js +0 -200
  346. package/dist/sync/createSnapshot.d.ts +0 -29
  347. package/dist/sync/createSnapshot.js +0 -118
  348. package/dist/sync/credentialLifecycle.d.ts +0 -7
  349. package/dist/sync/credentialLifecycle.js +0 -7
  350. package/dist/sync/deltaPipeline.d.ts +0 -114
  351. package/dist/sync/deltaPipeline.js +0 -278
  352. package/dist/sync/groupChange.d.ts +0 -116
  353. package/dist/sync/groupChange.js +0 -244
  354. package/dist/sync/participants.d.ts +0 -132
  355. package/dist/sync/participants.js +0 -346
  356. package/dist/sync/persistedPrefix.d.ts +0 -12
  357. package/dist/sync/persistedPrefix.js +0 -22
  358. package/dist/sync/schemaDrift.d.ts +0 -55
  359. package/dist/sync/schemaDrift.js +0 -53
  360. package/dist/sync/schemas.d.ts +0 -71
  361. package/dist/sync/schemas.js +0 -94
  362. package/dist/sync/syncCursor.d.ts +0 -40
  363. package/dist/sync/syncCursor.js +0 -55
  364. package/dist/sync/syncPlan.d.ts +0 -54
  365. package/dist/sync/syncPlan.js +0 -50
  366. package/dist/sync/wsFrameHandlers.d.ts +0 -8
  367. package/dist/sync/wsFrameHandlers.js +0 -8
  368. package/dist/syncLog/contract.d.ts +0 -20
  369. package/dist/syncLog/contract.js +0 -19
  370. package/dist/syncLog/index.d.ts +0 -1
  371. package/dist/syncLog/index.js +0 -1
  372. package/dist/transaction/ablo.d.ts +0 -88
  373. package/dist/transaction/ablo.js +0 -33
  374. package/dist/transaction/auth/apiKey.d.ts +0 -152
  375. package/dist/transaction/auth/apiKey.js +0 -419
  376. package/dist/transaction/auth/bootstrapScope.d.ts +0 -15
  377. package/dist/transaction/auth/bootstrapScope.js +0 -1
  378. package/dist/transaction/auth/capability.d.ts +0 -212
  379. package/dist/transaction/auth/capability.js +0 -224
  380. package/dist/transaction/auth/credentialEndpoint.d.ts +0 -61
  381. package/dist/transaction/auth/credentialEndpoint.js +0 -86
  382. package/dist/transaction/auth/credentialPolicy.d.ts +0 -148
  383. package/dist/transaction/auth/credentialPolicy.js +0 -125
  384. package/dist/transaction/auth/credentialSource.d.ts +0 -30
  385. package/dist/transaction/auth/credentialSource.js +0 -55
  386. package/dist/transaction/auth/hostedEndpoints.d.ts +0 -21
  387. package/dist/transaction/auth/hostedEndpoints.js +0 -21
  388. package/dist/transaction/auth/identity.d.ts +0 -55
  389. package/dist/transaction/auth/identity.js +0 -210
  390. package/dist/transaction/auth/index.d.ts +0 -162
  391. package/dist/transaction/auth/index.js +0 -304
  392. package/dist/transaction/auth/schemas.d.ts +0 -59
  393. package/dist/transaction/auth/schemas.js +0 -85
  394. package/dist/transaction/auth/sessionMint.d.ts +0 -28
  395. package/dist/transaction/auth/sessionMint.js +0 -85
  396. package/dist/transaction/coordination/awaitClaimGrant.d.ts +0 -56
  397. package/dist/transaction/coordination/awaitClaimGrant.js +0 -124
  398. package/dist/transaction/coordination/claimHeartbeatLoop.d.ts +0 -84
  399. package/dist/transaction/coordination/claimHeartbeatLoop.js +0 -108
  400. package/dist/transaction/coordination/claimMeta.d.ts +0 -49
  401. package/dist/transaction/coordination/claimMeta.js +0 -52
  402. package/dist/transaction/coordination/createClaimStream.d.ts +0 -64
  403. package/dist/transaction/coordination/createClaimStream.js +0 -475
  404. package/dist/transaction/coordination/events.d.ts +0 -74
  405. package/dist/transaction/coordination/events.js +0 -7
  406. package/dist/transaction/coordination/index.d.ts +0 -19
  407. package/dist/transaction/coordination/index.js +0 -45
  408. package/dist/transaction/coordination/locator.d.ts +0 -104
  409. package/dist/transaction/coordination/locator.js +0 -102
  410. package/dist/transaction/coordination/schema.d.ts +0 -1536
  411. package/dist/transaction/coordination/schema.js +0 -1177
  412. package/dist/transaction/coordination/targetConflict.d.ts +0 -2
  413. package/dist/transaction/coordination/targetConflict.js +0 -107
  414. package/dist/transaction/coordination/trace.d.ts +0 -78
  415. package/dist/transaction/coordination/trace.js +0 -138
  416. package/dist/transaction/durableWrites.d.ts +0 -62
  417. package/dist/transaction/durableWrites.js +0 -71
  418. package/dist/transaction/environment.d.ts +0 -105
  419. package/dist/transaction/environment.js +0 -108
  420. package/dist/transaction/errorCodes.d.ts +0 -403
  421. package/dist/transaction/errorCodes.js +0 -484
  422. package/dist/transaction/errors.d.ts +0 -428
  423. package/dist/transaction/errors.js +0 -686
  424. package/dist/transaction/footprint.d.ts +0 -111
  425. package/dist/transaction/footprint.js +0 -0
  426. package/dist/transaction/index.d.ts +0 -20
  427. package/dist/transaction/index.js +0 -20
  428. package/dist/transaction/keys/index.d.ts +0 -87
  429. package/dist/transaction/keys/index.js +0 -207
  430. package/dist/transaction/log/syncDeltaRow.d.ts +0 -158
  431. package/dist/transaction/log/syncDeltaRow.js +0 -95
  432. package/dist/transaction/logPosition.d.ts +0 -97
  433. package/dist/transaction/logPosition.js +0 -125
  434. package/dist/transaction/logger.d.ts +0 -16
  435. package/dist/transaction/logger.js +0 -7
  436. package/dist/transaction/observability.d.ts +0 -53
  437. package/dist/transaction/observability.js +0 -19
  438. package/dist/transaction/persistence.d.ts +0 -12
  439. package/dist/transaction/persistence.js +0 -11
  440. package/dist/transaction/plugin.d.ts +0 -285
  441. package/dist/transaction/plugin.js +0 -106
  442. package/dist/transaction/policy/types.d.ts +0 -217
  443. package/dist/transaction/policy/types.js +0 -126
  444. package/dist/transaction/resources/functionalUpdate.d.ts +0 -79
  445. package/dist/transaction/resources/functionalUpdate.js +0 -87
  446. package/dist/transaction/resources/httpResources.d.ts +0 -321
  447. package/dist/transaction/resources/httpResources.js +0 -7
  448. package/dist/transaction/resources/modelOperations.d.ts +0 -427
  449. package/dist/transaction/resources/modelOperations.js +0 -12
  450. package/dist/transaction/resources/mutationOptions.d.ts +0 -66
  451. package/dist/transaction/resources/mutationOptions.js +0 -9
  452. package/dist/transaction/resources/where.d.ts +0 -101
  453. package/dist/transaction/resources/where.js +0 -115
  454. package/dist/transaction/resources/writeOptionsSchema.d.ts +0 -47
  455. package/dist/transaction/resources/writeOptionsSchema.js +0 -73
  456. package/dist/transaction/schema/field.d.ts +0 -120
  457. package/dist/transaction/schema/field.js +0 -265
  458. package/dist/transaction/schema/fieldRef.d.ts +0 -38
  459. package/dist/transaction/schema/fieldRef.js +0 -11
  460. package/dist/transaction/schema/loadStrategy.d.ts +0 -45
  461. package/dist/transaction/schema/loadStrategy.js +0 -46
  462. package/dist/transaction/schema/model.d.ts +0 -379
  463. package/dist/transaction/schema/model.js +0 -123
  464. package/dist/transaction/schema/openapi.d.ts +0 -58
  465. package/dist/transaction/schema/openapi.js +0 -501
  466. package/dist/transaction/schema/relation.d.ts +0 -204
  467. package/dist/transaction/schema/relation.js +0 -104
  468. package/dist/transaction/schema/residency.d.ts +0 -29
  469. package/dist/transaction/schema/residency.js +0 -25
  470. package/dist/transaction/schema/roles.d.ts +0 -249
  471. package/dist/transaction/schema/roles.js +0 -230
  472. package/dist/transaction/schema/schema.d.ts +0 -351
  473. package/dist/transaction/schema/schema.js +0 -325
  474. package/dist/transaction/schema/tenancy.d.ts +0 -139
  475. package/dist/transaction/schema/tenancy.js +0 -190
  476. package/dist/transaction/transactionLayer.d.ts +0 -82
  477. package/dist/transaction/transactionLayer.js +0 -24
  478. package/dist/transaction/transactions/settlement/commitEnvelope.d.ts +0 -143
  479. package/dist/transaction/transactions/settlement/commitEnvelope.js +0 -161
  480. package/dist/transaction/transactions/settlement/httpCommitEnvelope.d.ts +0 -53
  481. package/dist/transaction/transactions/settlement/httpCommitEnvelope.js +0 -207
  482. package/dist/transaction/transactions/settlement/idempotencyKey.d.ts +0 -10
  483. package/dist/transaction/transactions/settlement/idempotencyKey.js +0 -9
  484. package/dist/transaction/transactions/settlement/pendingWrite.d.ts +0 -112
  485. package/dist/transaction/transactions/settlement/pendingWrite.js +0 -20
  486. package/dist/transaction/transport/commitFrames.d.ts +0 -90
  487. package/dist/transaction/transport/commitFrames.js +0 -134
  488. package/dist/transaction/transport/connectionManager.d.ts +0 -215
  489. package/dist/transaction/transport/connectionManager.js +0 -673
  490. package/dist/transaction/transport/credentialLifecycle.d.ts +0 -177
  491. package/dist/transaction/transport/credentialLifecycle.js +0 -324
  492. package/dist/transaction/transport/heartbeat.d.ts +0 -65
  493. package/dist/transaction/transport/heartbeat.js +0 -93
  494. package/dist/transaction/transport/httpClient.d.ts +0 -131
  495. package/dist/transaction/transport/httpClient.js +0 -146
  496. package/dist/transaction/transport/httpOptions.d.ts +0 -33
  497. package/dist/transaction/transport/httpOptions.js +0 -12
  498. package/dist/transaction/transport/httpTransport.d.ts +0 -8
  499. package/dist/transaction/transport/httpTransport.js +0 -1388
  500. package/dist/transaction/transport/networkProbe.d.ts +0 -84
  501. package/dist/transaction/transport/networkProbe.js +0 -207
  502. package/dist/transaction/transport/wsFrameHandlers.d.ts +0 -128
  503. package/dist/transaction/transport/wsFrameHandlers.js +0 -429
  504. package/dist/transaction/transport/wsTransport.d.ts +0 -574
  505. package/dist/transaction/transport/wsTransport.js +0 -1023
  506. package/dist/transaction/types/assertExact.d.ts +0 -17
  507. package/dist/transaction/types/assertExact.js +0 -1
  508. package/dist/transaction/types/global.d.ts +0 -107
  509. package/dist/transaction/types/global.js +0 -40
  510. package/dist/transaction/types/index.d.ts +0 -205
  511. package/dist/transaction/types/index.js +0 -56
  512. package/dist/transaction/types/modelData.d.ts +0 -10
  513. package/dist/transaction/types/modelData.js +0 -9
  514. package/dist/transaction/types/participant.d.ts +0 -20
  515. package/dist/transaction/types/participant.js +0 -10
  516. package/dist/transaction/types/streams.d.ts +0 -550
  517. package/dist/transaction/types/streams.js +0 -11
  518. package/dist/transaction/utils/asyncIterator.d.ts +0 -34
  519. package/dist/transaction/utils/asyncIterator.js +0 -135
  520. package/dist/transaction/utils/duration.d.ts +0 -50
  521. package/dist/transaction/utils/duration.js +0 -77
  522. package/dist/transaction/utils/json.d.ts +0 -57
  523. package/dist/transaction/utils/json.js +0 -276
  524. package/dist/transaction/wire/accountResponses.d.ts +0 -420
  525. package/dist/transaction/wire/accountResponses.js +0 -290
  526. package/dist/transaction/wire/auth.d.ts +0 -56
  527. package/dist/transaction/wire/auth.js +0 -63
  528. package/dist/transaction/wire/bootstrapReason.d.ts +0 -9
  529. package/dist/transaction/wire/bootstrapReason.js +0 -8
  530. package/dist/transaction/wire/claimEvent.d.ts +0 -76
  531. package/dist/transaction/wire/claimEvent.js +0 -73
  532. package/dist/transaction/wire/claims.d.ts +0 -530
  533. package/dist/transaction/wire/claims.js +0 -327
  534. package/dist/transaction/wire/commit.d.ts +0 -603
  535. package/dist/transaction/wire/commit.js +0 -321
  536. package/dist/transaction/wire/delta.d.ts +0 -250
  537. package/dist/transaction/wire/delta.js +0 -147
  538. package/dist/transaction/wire/errorEnvelope.d.ts +0 -72
  539. package/dist/transaction/wire/errorEnvelope.js +0 -123
  540. package/dist/transaction/wire/feedCursor.d.ts +0 -60
  541. package/dist/transaction/wire/feedCursor.js +0 -82
  542. package/dist/transaction/wire/feedEvent.d.ts +0 -204
  543. package/dist/transaction/wire/feedEvent.js +0 -65
  544. package/dist/transaction/wire/frames.d.ts +0 -194
  545. package/dist/transaction/wire/frames.js +0 -50
  546. package/dist/transaction/wire/inboundFrames.d.ts +0 -562
  547. package/dist/transaction/wire/inboundFrames.js +0 -116
  548. package/dist/transaction/wire/index.d.ts +0 -54
  549. package/dist/transaction/wire/index.js +0 -83
  550. package/dist/transaction/wire/listEnvelope.d.ts +0 -37
  551. package/dist/transaction/wire/listEnvelope.js +0 -42
  552. package/dist/transaction/wire/modelMutations.d.ts +0 -31
  553. package/dist/transaction/wire/modelMutations.js +0 -52
  554. package/dist/transaction/wire/modelResponses.d.ts +0 -85
  555. package/dist/transaction/wire/modelResponses.js +0 -43
  556. package/dist/transaction/wire/modelShape.d.ts +0 -78
  557. package/dist/transaction/wire/modelShape.js +0 -74
  558. package/dist/transaction/wire/protocol.d.ts +0 -38
  559. package/dist/transaction/wire/protocol.js +0 -38
  560. package/dist/transaction/wire/protocolVersion.d.ts +0 -73
  561. package/dist/transaction/wire/protocolVersion.js +0 -83
  562. package/dist/transactions/mutations/MutationQueue.d.ts +0 -661
  563. package/dist/transactions/mutations/MutationQueue.js +0 -2807
  564. package/dist/transactions/mutations/MutationStore.d.ts +0 -20
  565. package/dist/transactions/mutations/MutationStore.js +0 -53
  566. package/dist/transactions/mutations/UnconfirmedWrites.d.ts +0 -82
  567. package/dist/transactions/mutations/UnconfirmedWrites.js +0 -104
  568. package/dist/transactions/mutations/coalesceRules.d.ts +0 -58
  569. package/dist/transactions/mutations/coalesceRules.js +0 -140
  570. package/dist/transactions/mutations/commitLatency.d.ts +0 -52
  571. package/dist/transactions/mutations/commitLatency.js +0 -130
  572. package/dist/transactions/mutations/commitOutboxStore.d.ts +0 -28
  573. package/dist/transactions/mutations/commitOutboxStore.js +0 -26
  574. package/dist/transactions/mutations/commitPayload.d.ts +0 -165
  575. package/dist/transactions/mutations/commitPayload.js +0 -152
  576. package/dist/transactions/mutations/deltaConfirmation.d.ts +0 -63
  577. package/dist/transactions/mutations/deltaConfirmation.js +0 -235
  578. package/dist/transactions/mutations/durableWriteStore.d.ts +0 -14
  579. package/dist/transactions/mutations/durableWriteStore.js +0 -12
  580. package/dist/transactions/mutations/optimisticApply.d.ts +0 -49
  581. package/dist/transactions/mutations/optimisticApply.js +0 -65
  582. package/dist/transactions/mutations/replayValidation.d.ts +0 -187
  583. package/dist/transactions/mutations/replayValidation.js +0 -164
  584. package/dist/utils/mobxSetup.d.ts +0 -53
  585. package/dist/utils/mobxSetup.js +0 -330
  586. package/dist/views/QueryView.d.ts +0 -79
  587. package/dist/views/QueryView.js +0 -218
  588. package/dist/views/ViewRegistry.d.ts +0 -20
  589. package/dist/views/ViewRegistry.js +0 -55
  590. package/dist/views/incrementalView.d.ts +0 -45
  591. package/dist/views/incrementalView.js +0 -69
  592. package/dist/webhooks/events.d.ts +0 -43
  593. package/dist/webhooks/events.js +0 -42
  594. package/dist/webhooks/index.d.ts +0 -8
  595. package/dist/webhooks/index.js +0 -8
  596. package/dist/wire/index.d.ts +0 -1
  597. package/dist/wire/index.js +0 -8
@@ -1,661 +0,0 @@
1
- /**
2
- * MutationQueue manages the lifecycle of local writes on their way to the
3
- * server: it applies each change optimistically, batches the writes made in one
4
- * event-loop tick into a single commit, retries transient failures, and rolls
5
- * back on permanent rejection.
6
- *
7
- * Key behaviours:
8
- * - Optimistic updates with rollback on failure.
9
- * - Configurable conflict resolution.
10
- * - Microtask batching: transactions created in the same event-loop tick share
11
- * a batch id and commit together in one round trip.
12
- * - A dependency-injected executor, so several queues can coexist.
13
- */
14
- import { EventEmitter } from 'events';
15
- import type { Database } from '../../Database.js';
16
- import { Model } from '../../Model.js';
17
- import type { RuntimeContext } from '../../RuntimeContext.js';
18
- import { LogPosition } from '../../transaction/logPosition.js';
19
- import type { WriteOptions } from '../../interfaces/index.js';
20
- import type { OnStaleMode, StaleNotification, ReadDependency, TrackDependency } from '../../transaction/coordination/schema.js';
21
- import { type MutationInput, type QueuedMutation, type UserContext } from './commitPayload.js';
22
- import { type DurableCommitEnvelope, type DurableCommitOperation, type CommitOutboxScope } from '../../transaction/transactions/settlement/commitEnvelope.js';
23
- import type { DurableWriteStore } from './durableWriteStore.js';
24
- export type { QueuedMutation, UserContext } from './commitPayload.js';
25
- /**
26
- * A pre-built, multi-operation commit submitted through
27
- * `ablo.commits.create()`. Unlike the per-model {@link QueuedMutation} (see
28
- * `./commitPayload.js`), the caller supplies the operations and the whole
29
- * envelope commits atomically: the queue does not coalesce it, reorder its
30
- * operations for foreign keys, or apply it optimistically. It runs through the
31
- * same `mutationExecutor.commit()` as the model batch path, so its
32
- * retry-on-reconnect behaviour is identical.
33
- */
34
- interface CommitTransaction {
35
- id: string;
36
- kind: 'commit';
37
- operations: {
38
- type: DurableCommitOperation['type'];
39
- model: string;
40
- id: string;
41
- input?: Record<string, unknown>;
42
- transactionId?: string;
43
- readAt?: number | null;
44
- onStale?: OnStaleMode | null;
45
- }[];
46
- /** The premise for the whole batch, forwarded to the executor so the server can detect stale-context writes. */
47
- reads?: ReadDependency[] | null;
48
- /** Durable premises (`track`) to register for the batch's participant, forwarded to the executor. */
49
- track?: TrackDependency[] | null;
50
- status: 'pending' | 'executing' | 'awaiting_delta' | 'completed' | 'failed';
51
- createdAt: number;
52
- attempts: number;
53
- /**
54
- * Transient failures that were NOT the transport being down. Waiting out a
55
- * dropped connection is unbounded on purpose — that is what lets a commit
56
- * survive a reconnect — so connection errors are deliberately not counted
57
- * here, and only a server that keeps rejecting can exhaust the lane.
58
- */
59
- transientAttempts?: number;
60
- lastSyncId?: number;
61
- /** Opaque customer-side batch ledger key returned by a queued receipt. */
62
- correlationId?: string;
63
- error?: Error;
64
- sealedAt: number;
65
- sequence: number;
66
- sealPromise?: Promise<void>;
67
- durableEnvelope?: DurableCommitEnvelope;
68
- /** Journal entries atomically consumed when this request was sealed. */
69
- sourceMutationIds?: string[];
70
- }
71
- interface ConflictResolution {
72
- strategy: 'last-write-wins' | 'merge' | 'reject' | 'custom';
73
- resolver?: (local: MutationInput | undefined, remote: MutationInput) => MutationInput;
74
- }
75
- interface MutationQueueConfig {
76
- /** Shared client position (see logPosition.ts). One per client. */
77
- position?: LogPosition;
78
- /** The owning client's runtime. Defaults to the module-global bridge. */
79
- runtime?: RuntimeContext;
80
- maxBatchSize: number;
81
- batchDelay: number;
82
- maxRetries: number;
83
- conflictResolution: ConflictResolution;
84
- enablePersistence: boolean;
85
- enableOptimistic: boolean;
86
- maxExecutingTransactions: number;
87
- deltaConfirmationTimeout: number;
88
- /**
89
- * Exponential backoff for retryable server responses (HTTP 429/503).
90
- * `baseMs` is the first retry delay; each subsequent attempt doubles
91
- * up to `capMs`. Final delay = min(capMs, baseMs * 2^(attempt-1)) +
92
- * up to 100ms of jitter. Defaults: 200ms / 1500ms.
93
- */
94
- retryBackoff: {
95
- baseMs: number;
96
- capMs: number;
97
- };
98
- /**
99
- * How long, in milliseconds, to wait after the connection drops before
100
- * failing any in-flight commit-lane transaction with an
101
- * {@link AbloConnectionError}. Brief disconnects, such as a server restart
102
- * or mobile network jitter, are absorbed transparently; only a disconnect
103
- * that outlasts this window surfaces as a failure. Set it lower for
104
- * interactive use (for example 10 seconds for chat) and higher for
105
- * background batch work. Defaults to 30 seconds.
106
- *
107
- * Without this deadline, `commits.create({ wait: 'confirmed' })` would wait
108
- * forever if the connection died while a commit was in flight.
109
- */
110
- commitOfflineGraceMs: number;
111
- /**
112
- * How long, in milliseconds, to wait for the transport to acknowledge a
113
- * dispatched commit before treating the silence as a retryable no-receipt
114
- * failure. A transport that never answers — a half-open socket, a dropped
115
- * response frame — would otherwise hold the commit in flight forever, and
116
- * with it the client's staged-batch lock: every later write in the session
117
- * queues silently behind the unanswered one. The envelope's idempotency key
118
- * is stable across retries, so a commit the server DID apply before the
119
- * timeout is deduplicated on the retry rather than double-applied.
120
- * Defaults to 30 seconds. Set `0` to disable the bound.
121
- */
122
- commitDispatchTimeoutMs: number;
123
- }
124
- export declare class MutationQueue extends EventEmitter {
125
- private static readonly DURABLE_REPLAY_WINDOW_MS;
126
- private store;
127
- private lastPermanentErrorSig?;
128
- private _mutationExecutor;
129
- private get mutationExecutor();
130
- private readonly runtime;
131
- private executionQueue;
132
- private isProcessing;
133
- private processTimer?;
134
- private processScheduled;
135
- private createdTransactions;
136
- private commitScheduled;
137
- private inFlightByModel;
138
- private pendingMergeByModel;
139
- private deferredDeletesByCreate;
140
- private commitLane;
141
- private commitStore;
142
- /**
143
- * Small race buffer for authoritative echoes that arrive before the queued
144
- * mutation receipt. The forward and WAL stream are independent channels, so
145
- * either can win without changing the settlement result.
146
- */
147
- private recentDeltaCorrelations;
148
- /**
149
- * Client-facing confirmation deadlines for source-forwarded writes. These
150
- * timers settle only the caller waiting for `confirmed`; the accepted write
151
- * remains in `awaiting_delta`, with its durable envelope intact, until the
152
- * authoritative WAL echo arrives.
153
- */
154
- private replicationLagTimeouts;
155
- private replicationLagErrors;
156
- private commitProcessing;
157
- private lastCommitSequence;
158
- private durableReplayBlock;
159
- /** Browser-backed strict outbox; absent for standalone/in-memory consumers. */
160
- private commitOutbox;
161
- private commitOutboxScope;
162
- private nextCommitSequence;
163
- private emitCommitLifecycle;
164
- private assertDurableReplayOpen;
165
- private assertEnvelopeInsideReplayWindow;
166
- private computePriorityScore;
167
- private ensureDerivedFields;
168
- private entityKey;
169
- /** Collision-safe receipt target identity across models sharing a row id. */
170
- private receiptTargetKey;
171
- /**
172
- * Relates stale notifications back to write targets without assuming the
173
- * server's canonical model name uses the same spelling as the public schema
174
- * key (`Task` versus `tasks`). Exact `(model,id)` wins; a globally unique id
175
- * is the compatibility fallback. An ambiguous same-id cross-model mismatch
176
- * is deliberately left unclassified, so it cannot falsely settle a queued
177
- * write. A notification with no write-target id (or an explicit group) is a
178
- * declared-read conflict and holds the whole batch.
179
- */
180
- private classifyReceiptNotifications;
181
- private resolveConfirmation;
182
- private takeUnsentCreateForModel;
183
- private cancelUnsentCreateForDelete;
184
- private findCreateBarrierForDelete;
185
- private completeLocalDelete;
186
- private deferDeleteUntilCreateSettles;
187
- private releaseDeferredDeletesForCreate;
188
- private config;
189
- private executingCount;
190
- private optimisticUpdates;
191
- private commitNotifications;
192
- /** Zero-row targets returned on a successful atomic commit receipt. */
193
- private commitMissingIds;
194
- private readonly deltaConfirmation;
195
- private isConnectedFn;
196
- private commitOfflineGraceTimer;
197
- /**
198
- * This client's place in the global order of sync deltas. The instance is
199
- * shared: the client injects one, and a standalone queue creates its own. The
200
- * queue advances the `acked` cursor as commit responses arrive, the store
201
- * advances `applied` and `persisted`, and snapshots and claims read
202
- * `readFloor`. See `../logPosition.js` for the full contract.
203
- */
204
- readonly position: LogPosition;
205
- /** Applied-cursor alias, kept so the many internal read sites stay legible. */
206
- private get lastSeenSyncId();
207
- private noteAck;
208
- private batchIndex;
209
- /** Mints the request identity once; retry paths only read the stored value. */
210
- private generateCommitIdempotencyKey;
211
- /**
212
- * Binds an ordered transaction batch to one wire-level idempotency key.
213
- * Existing envelopes are validated and restored to their original order;
214
- * they are never extended with newly queued work.
215
- */
216
- private ensureCommitEnvelope;
217
- /** Bind the strict local outbox used before any mutation reaches the wire. */
218
- setCommitOutbox(outbox: DurableWriteStore): void;
219
- setCommitOutboxScope(scope: CommitOutboxScope): void;
220
- private sourceMutationIdsFor;
221
- /**
222
- * Atomically replaces staged mutation journal rows with one exact request.
223
- * The returned operations are the JSON-normalized values that must be sent;
224
- * callers never send a separately reconstructed payload after sealing.
225
- */
226
- private sealDurableCommit;
227
- /** Best-effort cleanup after a definitive rejection, confirmed ack, or echo. */
228
- private removeDurableCommit;
229
- /**
230
- * Upgrade a sealed request with permanent connected-source acceptance before
231
- * exposing the queued receipt. This is not completion: the envelope remains
232
- * until the matching WAL correlation arrives. The upgrade only makes a
233
- * crash/restart safe after the hosted 24-hour replay window has elapsed.
234
- */
235
- private persistDurableCommitAcceptance;
236
- /** Parse an untrusted/custom executor receipt without making ambiguity fatal. */
237
- private parseMutationCommitResult;
238
- /**
239
- * Dispatch a sealed envelope to the transport, bounded by
240
- * `commitDispatchTimeoutMs`. Every executor call site routes through here:
241
- * a transport that never answers must become a retryable no-receipt failure
242
- * (the same class as a malformed receipt) instead of an eternally in-flight
243
- * commit, because an unanswered commit holds the staged-batch lock and
244
- * silently stalls every later write in the session. The abandoned commit's
245
- * eventual result, if it ever arrives, is discarded; the retry re-sends the
246
- * identical idempotency key, so the server deduplicates an already-applied
247
- * write.
248
- */
249
- private dispatchCommitBounded;
250
- private clearReplicationLagState;
251
- /**
252
- * Bounds the public `wait: 'confirmed'` promise without changing the
253
- * accepted write's lifecycle. A lag timeout is not a rejection from the
254
- * source database, so it must never emit `transaction:failed`, roll back
255
- * optimistic state, or remove the durable replay envelope.
256
- */
257
- private scheduleReplicationLagTimeout;
258
- /**
259
- * Takes either one complete retry envelope or a fresh batch. A retry waits
260
- * until every original member has re-entered the queue, preventing an
261
- * ambiguous A+B commit from being replayed later as A and B separately.
262
- */
263
- private takeNextExecutionBatch;
264
- /**
265
- * Selects one reconnect batch without changing the request identity of work
266
- * that was already attempted. Explicit caller keys remain one-call batches;
267
- * an existing envelope is replayed only with all of its original members.
268
- */
269
- private takeOfflineFlushBatch;
270
- /**
271
- * Resolvers for per-transaction `confirmation` promises. Populated in
272
- * `attachConfirmation` at staging time, consumed by the constructor-time
273
- * listeners on `transaction:completed` / `transaction:failed`. Kept off
274
- * the QueuedMutation row so the store's iteration order stays plain-data
275
- * and serialization-friendly.
276
- */
277
- private confirmationResolvers;
278
- constructor(config?: Partial<MutationQueueConfig>);
279
- /**
280
- * Returns the in-flight confirmation promise for a given model and id. When
281
- * several transactions match, it returns the most recent one's promise; when
282
- * none is open it resolves immediately, which covers both "already confirmed"
283
- * and "never staged".
284
- *
285
- * It considers the three non-terminal statuses in which the write can still
286
- * be rolled back — `pending`, `executing`, and `awaiting_delta` — and ignores
287
- * `completed` (already settled) and `failed`/`rolled_back` (already
288
- * rejected). This complements the `confirmation` promise carried on a known
289
- * {@link QueuedMutation}: use this method at call sites that hold a model
290
- * returned by `ablo.<model>.create()` but never see the underlying
291
- * transaction.
292
- */
293
- confirmationFor(modelName: string, modelId: string): Promise<void>;
294
- /**
295
- * Attaches a `confirmation` promise to a newly created transaction. Call this
296
- * before the transaction is staged so a caller can `await tx.confirmation`
297
- * immediately after a create, update, or delete returns. It is idempotent and
298
- * returns early if one is already attached.
299
- *
300
- * It also attaches a no-op rejection handler. Most callers never await the
301
- * confirmation, and without this the runtime would report an unhandled
302
- * rejection when a write fails. Callers that do want to observe failure simply
303
- * attach their own `.then`/`.catch`.
304
- */
305
- private attachConfirmation;
306
- /**
307
- * Registers a predicate the queue uses to check whether it is connected.
308
- * While disconnected, confirmation timeouts re-schedule themselves instead of
309
- * escalating, so a transaction is never rolled back merely because the client
310
- * was briefly offline.
311
- */
312
- setConnectionChecker(fn: () => boolean): void;
313
- /**
314
- * Drives the offline-grace timer for in-flight commit-lane transactions.
315
- *
316
- * On `'disconnected'` it starts a one-shot timer of
317
- * `config.commitOfflineGraceMs`. If that timer fires — meaning the disconnect
318
- * outlasted the grace window — every commit-lane transaction still `pending`
319
- * or `executing` is failed with an {@link AbloConnectionError}, so
320
- * {@link waitForCommitReceipt} rejects within seconds instead of hanging.
321
- *
322
- * On `'connected'` it clears any pending grace timer. Brief disconnects are
323
- * absorbed transparently; {@link processCommitLane} and
324
- * {@link flushOfflineQueue} resume the work on reconnect.
325
- */
326
- setConnectionState(state: 'connected' | 'disconnected'): void;
327
- private failInFlightCommitsOnOffline;
328
- /**
329
- * Binds the mutation executor for this queue instance. The owning client
330
- * calls this right after construction, so commits made here always dispatch
331
- * through this instance's connection even when several client instances exist
332
- * in the same process.
333
- */
334
- setMutationExecutor(executor: import('../../interfaces/index.js').MutationExecutor): void;
335
- /**
336
- * Stages a transaction for commit. Transactions staged within the same
337
- * event-loop tick are committed together.
338
- */
339
- private stageTransaction;
340
- /**
341
- * Schedules the staged transactions to commit on a microtask, so all
342
- * transactions created synchronously within one tick are batched together.
343
- */
344
- private scheduleCommit;
345
- /**
346
- * Moves all staged transactions onto the execution queue, assigning them a
347
- * single shared batch index so they commit together.
348
- */
349
- private commitCreatedTransactions;
350
- /**
351
- * Flushes every pending transaction in one commit, the fast path taken on
352
- * reconnect. If transport fails, the transactions retain this exact commit
353
- * envelope when they fall back to normal queue processing.
354
- */
355
- flushOfflineQueue(): Promise<void>;
356
- /**
357
- * Records a create and applies it optimistically, then stages it for the next
358
- * batched commit. Returns the {@link QueuedMutation}, whose `confirmation`
359
- * promise settles once the server confirms the write.
360
- */
361
- create(model: Model, context: UserContext, writeOptions?: WriteOptions, sourceMutationId?: string): Promise<QueuedMutation>;
362
- /**
363
- * Records an update and applies it optimistically, then stages it for the next
364
- * batched commit. Rapid updates to the same entity coalesce into a single wire
365
- * operation.
366
- * @param precomputedChanges - Optional pre-captured changes, used instead of re-reading them from the model.
367
- */
368
- update(model: Model, context: UserContext, precomputedChanges?: Record<string, unknown>, writeOptions?: WriteOptions, sourceMutationId?: string): Promise<QueuedMutation>;
369
- /**
370
- * Records a delete and applies it optimistically. If the row's own create has
371
- * not yet been sent, both are cancelled locally rather than sending a create
372
- * followed by a delete; if the create is already in flight, the delete waits
373
- * until it settles so the server never sees a delete before the create.
374
- */
375
- delete(model: Model, context: UserContext, writeOptions?: WriteOptions, sourceMutationId?: string): Promise<QueuedMutation>;
376
- /**
377
- * Uploads a single attachment, delegating to the mutation executor.
378
- */
379
- uploadAttachment(_file: File, options: {
380
- id: string;
381
- [key: string]: unknown;
382
- }, _context: UserContext): Promise<{
383
- url: string;
384
- } | null>;
385
- /**
386
- * Uploads several attachments in one call, delegating to the mutation executor.
387
- */
388
- batchUploadAttachments(_files: File[], items: {
389
- id: string;
390
- [key: string]: unknown;
391
- }[], _context: UserContext): Promise<{
392
- id: string;
393
- url: string;
394
- }[]>;
395
- /**
396
- * Records an archive and applies it optimistically, then stages it for the
397
- * next batched commit.
398
- */
399
- archive(model: Model, context: UserContext, writeOptions?: WriteOptions, sourceMutationId?: string): Promise<QueuedMutation>;
400
- /**
401
- * Records an unarchive and applies it optimistically, then stages it for the
402
- * next batched commit.
403
- */
404
- unarchive(model: Model, context: UserContext): Promise<QueuedMutation>;
405
- /**
406
- * Places a transaction on the execution queue, coalescing it into an existing
407
- * same-entity update where possible so redundant writes collapse.
408
- */
409
- private enqueue;
410
- private scheduleProcessing;
411
- /**
412
- * Processes one batch of transactions in a single commit. Rather than calling
413
- * the server once per operation type or model, it collects every batchable
414
- * operation and sends them together; the server applies the mixed operations
415
- * atomically within one transaction. This turns many round trips into one and
416
- * greatly reduces batch latency.
417
- */
418
- private processBatch;
419
- private rememberDeltaCorrelation;
420
- private queuedCommitEchoSyncId;
421
- private queuedCommitMatchesCorrelation;
422
- private completeQueuedCommit;
423
- /**
424
- * Confirms awaiting writes. Hosted/anomaly receipts keep their sync-id
425
- * threshold semantics; queued forwards require the exact server correlation.
426
- */
427
- onDeltaReceived(syncId: number, _transactionId?: string, correlationId?: string): void;
428
- private scheduleDeltaConfirmationTimeout;
429
- /**
430
- * Resolves once the given transaction is confirmed and rejects if it fails.
431
- * The confirming delta's timeout is handled by
432
- * {@link scheduleDeltaConfirmationTimeout}.
433
- */
434
- waitForConfirmation(transactionId: string): Promise<void>;
435
- hasClientMutationId(id: string): boolean;
436
- /**
437
- * Enqueues a pre-built, multi-operation atomic commit — the
438
- * `ablo.commits.create()` path. The caller supplies the operations; the queue
439
- * only retries on reconnect and de-duplicates, and does not apply the change
440
- * optimistically or reorder for foreign keys. A duplicate `clientTxId`
441
- * already in flight is ignored. After an accepted write exceeds its
442
- * replication-confirmation deadline, an explicit same-key retry reuses the
443
- * exact sealed envelope as an idempotent status probe; the server's
444
- * `mutation_log` still prevents a second logical write.
445
- */
446
- enqueueCommit(clientTxId: string, operations: CommitTransaction['operations'], options?: {
447
- reads?: ReadDependency[] | null;
448
- track?: TrackDependency[] | null;
449
- }): Promise<void>;
450
- /**
451
- * Drains the pending commit-lane envelopes one at a time. A transient
452
- * failure, such as a network error, leaves the envelope at the head of the
453
- * lane in `pending` and stops; reconnect re-kicks it through
454
- * {@link flushOfflineQueue}. A permanent failure emits
455
- * `transaction:failed:<id>` and drops the envelope.
456
- */
457
- private processCommitLane;
458
- /**
459
- * Resolves once a commit-lane transaction is confirmed, returning the server's
460
- * `lastSyncId` and any stale-context notifications; rejects on permanent
461
- * failure. This backs the `wait: 'confirmed'` semantics of
462
- * `ablo.commits.create()`.
463
- */
464
- waitForCommitReceipt(clientTxId: string): Promise<{
465
- lastSyncId: number;
466
- notifications?: StaleNotification[];
467
- missingIds?: string[];
468
- }>;
469
- private isReorderPayload;
470
- /**
471
- * Classifies an error as transient (worth retrying) or permanent. The
472
- * approach is deliberately conservative: only known-transient errors are
473
- * retried, and anything unrecognized is treated as permanent so a failing
474
- * write cannot loop forever.
475
- *
476
- * Transient (retried):
477
- * - Network failures, connection errors, and timeouts.
478
- * - Server errors (HTTP 5xx).
479
- * - Rate limiting (HTTP 429).
480
- *
481
- * Permanent (not retried), among others:
482
- * - Validation errors and constraint violations.
483
- * - Not found, unauthorized, and forbidden.
484
- * - Any other business-logic error from the server.
485
- */
486
- private isPermanentError;
487
- /** True only when the server definitively rejected before applying. */
488
- private isDefinitiveRejection;
489
- /**
490
- * Handles a failed transaction: retries transient failures with backoff and
491
- * rolls back permanent ones, settling the transaction's confirmation promise
492
- * either way.
493
- */
494
- private handleFailure;
495
- /**
496
- * Resolves a conflict against server data using the configured strategy:
497
- * last-write-wins rolls the local change back, merge and reject re-enqueue it,
498
- * and custom applies the caller's resolver.
499
- */
500
- handleConflict(transaction: QueuedMutation, serverData: MutationInput): Promise<void>;
501
- /**
502
- * Optimistic updates. The apply and rollback rules live in `./optimisticApply.js`;
503
- * these methods bind them to the queue's own tracking map and event emitter.
504
- */
505
- private applyOptimisticCreate;
506
- private applyOptimisticUpdate;
507
- private applyOptimisticDelete;
508
- private rollbackOptimistic;
509
- /**
510
- * Loads transactions persisted from a previous session and re-enqueues them,
511
- * so writes made while offline survive a restart. Does nothing when
512
- * persistence is disabled.
513
- */
514
- loadPersistedTransactions(database: Database): Promise<void>;
515
- /**
516
- * Restore exact sealed requests after the local database is open. Sealed
517
- * envelopes replay through the atomic commit lane and are never re-projected
518
- * through model/schema state from the new process.
519
- */
520
- restoreDurableCommits(): Promise<Set<string>>;
521
- /**
522
- * Validates and rehydrates one persisted row. Rows written to the same store
523
- * by other subsystems are skipped, and rows that fail the persisted
524
- * transaction schema — from an older version or corruption — are dropped and
525
- * reported rather than replayed as commits.
526
- */
527
- private deserializeTransaction;
528
- /**
529
- * Cancels every pending or executing transaction for a given model id,
530
- * optionally limited to one operation type, rolling back their optimistic
531
- * state. Returns the cancelled transactions.
532
- */
533
- cancelTransactionsForModel(modelId: string, transactionType?: string): QueuedMutation[];
534
- /**
535
- * Cancels pending transactions for child rows that reference a deleted parent,
536
- * used to cascade a parent deletion. The caller supplies the foreign-key
537
- * relationship; this method performs the cancellation.
538
- *
539
- * @param childModelName - The child model type (for example 'Block').
540
- * @param foreignKey - The foreign-key property name (for example 'sectionId').
541
- * @param parentId - The deleted parent's id.
542
- * @returns The number of transactions cancelled.
543
- */
544
- cancelTransactionsByForeignKey(childModelName: string, foreignKey: string, parentId: string): number;
545
- /**
546
- * Returns the number of transactions still pending or executing.
547
- */
548
- getOutstandingTransactionCount(): number;
549
- /** Generates a unique local transaction id. */
550
- private generateId;
551
- private mergeData;
552
- private extractCreateData;
553
- private mapChangesToInput;
554
- private extractUpdateData;
555
- private extractPreviousData;
556
- /** Returns a snapshot of queue counts and the current configuration. */
557
- getStats(): {
558
- pending: number;
559
- executing: number;
560
- completed: number;
561
- failed: number;
562
- optimistic: number;
563
- totalTransactions: number;
564
- batchIndex: number;
565
- config: {
566
- /** Shared client position (see logPosition.ts). One per client. */
567
- position?: LogPosition;
568
- /** The owning client's runtime. Defaults to the module-global bridge. */
569
- runtime?: RuntimeContext;
570
- maxBatchSize: number;
571
- batchDelay: number;
572
- maxRetries: number;
573
- conflictResolution: ConflictResolution;
574
- enablePersistence: boolean;
575
- enableOptimistic: boolean;
576
- maxExecutingTransactions: number;
577
- deltaConfirmationTimeout: number;
578
- /**
579
- * Exponential backoff for retryable server responses (HTTP 429/503).
580
- * `baseMs` is the first retry delay; each subsequent attempt doubles
581
- * up to `capMs`. Final delay = min(capMs, baseMs * 2^(attempt-1)) +
582
- * up to 100ms of jitter. Defaults: 200ms / 1500ms.
583
- */
584
- retryBackoff: {
585
- baseMs: number;
586
- capMs: number;
587
- };
588
- /**
589
- * How long, in milliseconds, to wait after the connection drops before
590
- * failing any in-flight commit-lane transaction with an
591
- * {@link AbloConnectionError}. Brief disconnects, such as a server restart
592
- * or mobile network jitter, are absorbed transparently; only a disconnect
593
- * that outlasts this window surfaces as a failure. Set it lower for
594
- * interactive use (for example 10 seconds for chat) and higher for
595
- * background batch work. Defaults to 30 seconds.
596
- *
597
- * Without this deadline, `commits.create({ wait: 'confirmed' })` would wait
598
- * forever if the connection died while a commit was in flight.
599
- */
600
- commitOfflineGraceMs: number;
601
- /**
602
- * How long, in milliseconds, to wait for the transport to acknowledge a
603
- * dispatched commit before treating the silence as a retryable no-receipt
604
- * failure. A transport that never answers — a half-open socket, a dropped
605
- * response frame — would otherwise hold the commit in flight forever, and
606
- * with it the client's staged-batch lock: every later write in the session
607
- * queues silently behind the unanswered one. The envelope's idempotency key
608
- * is stable across retries, so a commit the server DID apply before the
609
- * timeout is deduplicated on the retry rather than double-applied.
610
- * Defaults to 30 seconds. Set `0` to disable the bound.
611
- */
612
- commitDispatchTimeoutMs: number;
613
- };
614
- };
615
- /**
616
- * Returns detailed internal state — pending, executing, and awaiting-delta
617
- * transactions — to help diagnose delta-confirmation issues.
618
- */
619
- getDebugInfo(): {
620
- lastSeenSyncId: number;
621
- awaitingDeltaCount: number;
622
- awaitingDeltaTransactions: {
623
- id: string;
624
- type: "update" | "create" | "delete" | "archive" | "unarchive";
625
- modelName: string;
626
- modelId: string;
627
- syncIdNeeded: number | undefined;
628
- createdAt: number;
629
- age: number;
630
- }[];
631
- pendingTransactions: {
632
- id: string;
633
- type: "update" | "create" | "delete" | "archive" | "unarchive";
634
- modelName: string;
635
- modelId: string;
636
- }[];
637
- executingTransactions: {
638
- id: string;
639
- type: "update" | "create" | "delete" | "archive" | "unarchive";
640
- modelName: string;
641
- modelId: string;
642
- }[];
643
- };
644
- /** Merges the given options into the queue's configuration. */
645
- setConfig(config: Partial<MutationQueueConfig>): void;
646
- /**
647
- * Re-emits an incoming sync delta on the `sync:delta` event for the store to
648
- * apply. Because rows use stable ids, no id reconciliation is needed here.
649
- */
650
- handleSyncDelta(delta: {
651
- id: string;
652
- modelName: string;
653
- action: string;
654
- data: any;
655
- }): boolean;
656
- /**
657
- * Releases the queue's resources: rolls back outstanding optimistic updates,
658
- * clears all timers and stored transactions, and removes event listeners.
659
- */
660
- dispose(): void;
661
- }