@abloatai/ablo 0.34.1 → 0.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (536) hide show
  1. package/AGENTS.md +2 -1
  2. package/CHANGELOG.md +758 -5
  3. package/README.md +56 -502
  4. package/bin/ablo.cjs +39 -0
  5. package/dist/BaseSyncedStore.d.ts +176 -48
  6. package/dist/BaseSyncedStore.js +346 -214
  7. package/dist/Database.d.ts +17 -44
  8. package/dist/Database.js +96 -79
  9. package/dist/InstanceCache.d.ts +31 -6
  10. package/dist/InstanceCache.js +65 -30
  11. package/dist/LazyReferenceCollection.d.ts +3 -3
  12. package/dist/LazyReferenceCollection.js +4 -4
  13. package/dist/Model.d.ts +23 -13
  14. package/dist/Model.js +27 -17
  15. package/dist/ModelRegistry.d.ts +8 -4
  16. package/dist/ModelRegistry.js +20 -18
  17. package/dist/NetworkMonitor.d.ts +3 -1
  18. package/dist/NetworkMonitor.js +7 -5
  19. package/dist/{SyncEngineContext.d.ts → RuntimeContext.d.ts} +20 -13
  20. package/dist/{SyncEngineContext.js → RuntimeContext.js} +11 -12
  21. package/dist/SyncClient.d.ts +47 -47
  22. package/dist/SyncClient.js +215 -156
  23. package/dist/ai-sdk/coordinatedTool.d.ts +2 -2
  24. package/dist/ai-sdk/coordinatedTool.js +1 -1
  25. package/dist/ai-sdk/coordinationContext.d.ts +2 -2
  26. package/dist/ai-sdk/coordinationContext.js +1 -1
  27. package/dist/ai-sdk/wrap.d.ts +3 -3
  28. package/dist/ai-sdk/wrap.js +2 -2
  29. package/dist/auth/index.d.ts +1 -156
  30. package/dist/auth/index.js +8 -301
  31. package/dist/client/Ablo.d.ts +42 -287
  32. package/dist/client/Ablo.js +129 -963
  33. package/dist/client/abloClient.d.ts +309 -0
  34. package/dist/client/abloClient.js +13 -0
  35. package/dist/client/clientPrelude.d.ts +52 -0
  36. package/dist/client/clientPrelude.js +60 -0
  37. package/dist/client/consoleLogger.d.ts +2 -2
  38. package/dist/client/coreClient.d.ts +60 -0
  39. package/dist/client/coreClient.js +118 -0
  40. package/dist/client/createInternalComponents.d.ts +8 -4
  41. package/dist/client/createInternalComponents.js +17 -10
  42. package/dist/client/createModelProxy.d.ts +98 -373
  43. package/dist/client/createModelProxy.js +233 -139
  44. package/dist/client/humans.d.ts +69 -0
  45. package/dist/client/humans.js +78 -0
  46. package/dist/client/modelRegistration.d.ts +1 -1
  47. package/dist/client/modelRegistration.js +9 -9
  48. package/dist/client/options.d.ts +73 -17
  49. package/dist/client/reactiveEngine.d.ts +53 -0
  50. package/dist/client/reactiveEngine.js +688 -0
  51. package/dist/client/resourceTypes.d.ts +9 -250
  52. package/dist/client/resourceTypes.js +8 -5
  53. package/dist/client/schemaConfig.d.ts +4 -4
  54. package/dist/client/schemaConfig.js +6 -2
  55. package/dist/client/storeCluster.d.ts +47 -0
  56. package/dist/client/storeCluster.js +118 -0
  57. package/dist/client/storeLifecycle.d.ts +61 -0
  58. package/dist/client/storeLifecycle.js +231 -0
  59. package/dist/client/validateAbloOptions.d.ts +3 -2
  60. package/dist/client/validateAbloOptions.js +1 -1
  61. package/dist/client/wsMutationExecutor.d.ts +3 -3
  62. package/dist/client/wsMutationExecutor.js +3 -3
  63. package/dist/context.d.ts +22 -9
  64. package/dist/context.js +33 -9
  65. package/dist/coordination/ClaimLog.d.ts +26 -0
  66. package/dist/coordination/ClaimLog.js +32 -0
  67. package/dist/coordination/index.d.ts +1 -15
  68. package/dist/coordination/index.js +8 -31
  69. package/dist/core/index.d.ts +3 -3
  70. package/dist/core/index.js +2 -2
  71. package/dist/docs/catalog.d.ts +72 -0
  72. package/dist/docs/catalog.js +230 -0
  73. package/dist/docs/index.d.ts +10 -0
  74. package/dist/docs/index.js +10 -0
  75. package/dist/environment.d.ts +1 -40
  76. package/dist/environment.js +8 -37
  77. package/dist/index.d.ts +44 -36
  78. package/dist/index.js +30 -22
  79. package/dist/interfaces/index.d.ts +44 -134
  80. package/dist/keys/index.d.ts +1 -77
  81. package/dist/keys/index.js +8 -190
  82. package/dist/mutators/{RecordingTransaction.d.ts → RecordingMutation.d.ts} +4 -4
  83. package/dist/mutators/{RecordingTransaction.js → RecordingMutation.js} +2 -2
  84. package/dist/mutators/Transaction.d.ts +1 -1
  85. package/dist/mutators/Transaction.js +1 -1
  86. package/dist/mutators/UndoManager.d.ts +6 -6
  87. package/dist/mutators/UndoManager.js +5 -5
  88. package/dist/mutators/defineMutators.d.ts +3 -3
  89. package/dist/mutators/defineMutators.js +1 -1
  90. package/dist/mutators/inverseOp.js +2 -2
  91. package/dist/mutators/mutateActions.d.ts +3 -3
  92. package/dist/mutators/mutateActions.js +1 -1
  93. package/dist/mutators/readerActions.d.ts +1 -1
  94. package/dist/mutators/undoApply.d.ts +1 -1
  95. package/dist/mutators/undoApply.js +1 -1
  96. package/dist/policy/index.d.ts +2 -2
  97. package/dist/policy/index.js +1 -1
  98. package/dist/query/client.d.ts +5 -2
  99. package/dist/query/client.js +10 -9
  100. package/dist/query/types.d.ts +6 -41
  101. package/dist/query/types.js +2 -2
  102. package/dist/react/AbloProvider.d.ts +18 -8
  103. package/dist/react/AbloProvider.js +10 -9
  104. package/dist/react/context.d.ts +3 -3
  105. package/dist/react/context.js +1 -1
  106. package/dist/react/createAbloReact.d.ts +56 -0
  107. package/dist/react/createAbloReact.js +51 -0
  108. package/dist/react/index.d.ts +6 -5
  109. package/dist/react/index.js +6 -3
  110. package/dist/react/internalContext.d.ts +1 -1
  111. package/dist/react/useAblo.d.ts +12 -5
  112. package/dist/react/useAblo.js +26 -8
  113. package/dist/react/useCurrentUserId.js +1 -1
  114. package/dist/react/useErrorListener.js +1 -1
  115. package/dist/react/useMutationFailureListener.d.ts +2 -2
  116. package/dist/react/useMutationFailureListener.js +1 -1
  117. package/dist/react/useMutators.d.ts +3 -3
  118. package/dist/react/useMutators.js +3 -3
  119. package/dist/react/useUndoScope.d.ts +5 -5
  120. package/dist/react/useUndoScope.js +1 -1
  121. package/dist/schema/coordination.d.ts +69 -10
  122. package/dist/schema/coordination.js +90 -9
  123. package/dist/schema/ddl.js +2 -2
  124. package/dist/schema/diff.d.ts +1 -1
  125. package/dist/schema/generate.js +1 -1
  126. package/dist/schema/index.d.ts +11 -10
  127. package/dist/schema/index.js +22 -18
  128. package/dist/schema/queries.d.ts +27 -27
  129. package/dist/schema/queries.js +23 -23
  130. package/dist/schema/select.d.ts +3 -3
  131. package/dist/schema/select.js +6 -3
  132. package/dist/schema/serialize.d.ts +15 -6
  133. package/dist/schema/serialize.js +20 -3
  134. package/dist/schema/sugar.d.ts +6 -7
  135. package/dist/schema/sugar.js +9 -12
  136. package/dist/schema/syncDeltaRow.d.ts +4 -152
  137. package/dist/schema/syncDeltaRow.js +4 -105
  138. package/dist/server/adapter.d.ts +18 -1
  139. package/dist/server/commit.d.ts +10 -16
  140. package/dist/server/index.d.ts +1 -1
  141. package/dist/server/index.js +1 -1
  142. package/dist/server/readConfig.d.ts +1 -1
  143. package/dist/source/adapter.d.ts +7 -5
  144. package/dist/source/adapter.js +7 -5
  145. package/dist/source/adapters/drizzle.d.ts +1 -1
  146. package/dist/source/adapters/drizzle.js +2 -2
  147. package/dist/source/adapters/kysely.d.ts +1 -1
  148. package/dist/source/adapters/kysely.js +1 -1
  149. package/dist/source/adapters/kyselyMutationCore.d.ts +1 -1
  150. package/dist/source/adapters/kyselyMutationCore.js +2 -2
  151. package/dist/source/adapters/memory.js +1 -1
  152. package/dist/source/adapters/prisma.d.ts +8 -3
  153. package/dist/source/adapters/prisma.js +1 -1
  154. package/dist/source/connector.js +1 -1
  155. package/dist/source/connectorProtocol.d.ts +2 -8
  156. package/dist/source/connectorProtocol.js +3 -2
  157. package/dist/source/contract.d.ts +29 -17
  158. package/dist/source/contract.js +27 -22
  159. package/dist/source/factory.d.ts +1 -1
  160. package/dist/source/idempotency.js +2 -2
  161. package/dist/source/index.d.ts +1 -0
  162. package/dist/source/index.js +3 -0
  163. package/dist/source/next.d.ts +1 -1
  164. package/dist/source/signing.d.ts +9 -2
  165. package/dist/source/signing.js +4 -1
  166. package/dist/source/types.d.ts +6 -4
  167. package/dist/source/types.js +1 -1
  168. package/dist/{core/storeContract.d.ts → storeContract.d.ts} +6 -6
  169. package/dist/{core → stores}/DatabaseManager.d.ts +3 -1
  170. package/dist/{core → stores}/DatabaseManager.js +14 -13
  171. package/dist/stores/ObjectStore.d.ts +1 -1
  172. package/dist/{core → stores}/StoreManager.d.ts +9 -26
  173. package/dist/{core → stores}/StoreManager.js +29 -77
  174. package/dist/stores/SyncActionStore.d.ts +4 -2
  175. package/dist/stores/SyncActionStore.js +11 -17
  176. package/dist/stores/syncAction.d.ts +26 -0
  177. package/dist/stores/syncAction.js +16 -0
  178. package/dist/surface.d.ts +3 -3
  179. package/dist/surface.js +6 -4
  180. package/dist/sync/BootstrapFetcher.d.ts +127 -6
  181. package/dist/sync/BootstrapFetcher.js +511 -83
  182. package/dist/sync/ConnectionManager.d.ts +6 -198
  183. package/dist/sync/ConnectionManager.js +6 -677
  184. package/dist/sync/OnDemandLoader.d.ts +5 -2
  185. package/dist/sync/OnDemandLoader.js +61 -21
  186. package/dist/sync/SubscriptionManager.d.ts +13 -2
  187. package/dist/sync/SubscriptionManager.js +23 -5
  188. package/dist/sync/SyncWebSocket.d.ts +27 -510
  189. package/dist/sync/SyncWebSocket.js +76 -954
  190. package/dist/sync/awaitClaimGrant.d.ts +4 -44
  191. package/dist/sync/awaitClaimGrant.js +4 -109
  192. package/dist/sync/bootstrapApply.d.ts +3 -0
  193. package/dist/sync/bootstrapApply.js +2 -2
  194. package/dist/sync/commitFrames.d.ts +6 -40
  195. package/dist/sync/commitFrames.js +6 -97
  196. package/dist/sync/contextPorts.d.ts +18 -0
  197. package/dist/sync/contextPorts.js +31 -0
  198. package/dist/sync/createClaimStream.d.ts +5 -49
  199. package/dist/sync/createClaimStream.js +5 -469
  200. package/dist/sync/createPresenceStream.d.ts +26 -4
  201. package/dist/sync/createPresenceStream.js +28 -20
  202. package/dist/sync/createSnapshot.d.ts +2 -2
  203. package/dist/sync/createSnapshot.js +1 -1
  204. package/dist/sync/credentialLifecycle.d.ts +5 -173
  205. package/dist/sync/credentialLifecycle.js +5 -320
  206. package/dist/sync/deltaPipeline.d.ts +13 -12
  207. package/dist/sync/deltaPipeline.js +21 -4
  208. package/dist/sync/groupChange.d.ts +3 -0
  209. package/dist/sync/groupChange.js +16 -14
  210. package/dist/sync/participants.d.ts +24 -6
  211. package/dist/sync/participants.js +32 -23
  212. package/dist/sync/schemaDrift.d.ts +55 -0
  213. package/dist/sync/schemaDrift.js +53 -0
  214. package/dist/sync/schemas.d.ts +23 -33
  215. package/dist/sync/schemas.js +29 -20
  216. package/dist/sync/syncPlan.d.ts +3 -3
  217. package/dist/sync/wsFrameHandlers.d.ts +6 -114
  218. package/dist/sync/wsFrameHandlers.js +6 -392
  219. package/dist/syncLog/contract.d.ts +20 -0
  220. package/dist/syncLog/contract.js +19 -0
  221. package/dist/syncLog/index.d.ts +1 -0
  222. package/dist/syncLog/index.js +1 -0
  223. package/dist/transaction/ablo.d.ts +88 -0
  224. package/dist/transaction/ablo.js +33 -0
  225. package/dist/{client/auth.d.ts → transaction/auth/apiKey.d.ts} +43 -8
  226. package/dist/{client/auth.js → transaction/auth/apiKey.js} +19 -0
  227. package/dist/transaction/auth/bootstrapScope.d.ts +15 -0
  228. package/dist/transaction/auth/bootstrapScope.js +1 -0
  229. package/dist/transaction/auth/capability.d.ts +212 -0
  230. package/dist/transaction/auth/capability.js +224 -0
  231. package/dist/{auth → transaction/auth}/credentialSource.d.ts +8 -1
  232. package/dist/{client → transaction/auth}/identity.d.ts +8 -7
  233. package/dist/{client → transaction/auth}/identity.js +1 -1
  234. package/dist/transaction/auth/index.d.ts +162 -0
  235. package/dist/transaction/auth/index.js +304 -0
  236. package/dist/{auth → transaction/auth}/schemas.d.ts +1 -1
  237. package/dist/{auth → transaction/auth}/schemas.js +13 -13
  238. package/dist/{client → transaction/auth}/sessionMint.d.ts +8 -8
  239. package/dist/{client → transaction/auth}/sessionMint.js +4 -7
  240. package/dist/transaction/coordination/awaitClaimGrant.d.ts +56 -0
  241. package/dist/transaction/coordination/awaitClaimGrant.js +124 -0
  242. package/dist/{client → transaction/coordination}/claimHeartbeatLoop.d.ts +34 -0
  243. package/dist/{client → transaction/coordination}/claimHeartbeatLoop.js +20 -0
  244. package/dist/transaction/coordination/claimMeta.d.ts +49 -0
  245. package/dist/transaction/coordination/claimMeta.js +52 -0
  246. package/dist/transaction/coordination/createClaimStream.d.ts +64 -0
  247. package/dist/transaction/coordination/createClaimStream.js +475 -0
  248. package/dist/transaction/coordination/events.d.ts +74 -0
  249. package/dist/transaction/coordination/events.js +7 -0
  250. package/dist/transaction/coordination/index.d.ts +19 -0
  251. package/dist/transaction/coordination/index.js +45 -0
  252. package/dist/transaction/coordination/locator.d.ts +104 -0
  253. package/dist/transaction/coordination/locator.js +102 -0
  254. package/dist/transaction/coordination/schema.d.ts +1536 -0
  255. package/dist/transaction/coordination/schema.js +1177 -0
  256. package/dist/transaction/coordination/targetConflict.d.ts +2 -0
  257. package/dist/transaction/coordination/targetConflict.js +107 -0
  258. package/dist/{coordination → transaction/coordination}/trace.d.ts +7 -18
  259. package/dist/{coordination → transaction/coordination}/trace.js +18 -25
  260. package/dist/transaction/durableWrites.d.ts +62 -0
  261. package/dist/{client → transaction}/durableWrites.js +28 -3
  262. package/dist/transaction/environment.d.ts +105 -0
  263. package/dist/transaction/environment.js +108 -0
  264. package/dist/{errorCodes.d.ts → transaction/errorCodes.d.ts} +12 -12
  265. package/dist/{errorCodes.js → transaction/errorCodes.js} +45 -18
  266. package/dist/{errors.d.ts → transaction/errors.d.ts} +37 -13
  267. package/dist/{errors.js → transaction/errors.js} +85 -16
  268. package/dist/transaction/footprint.d.ts +111 -0
  269. package/dist/transaction/footprint.js +0 -0
  270. package/dist/transaction/index.d.ts +20 -0
  271. package/dist/transaction/index.js +20 -0
  272. package/dist/transaction/keys/index.d.ts +87 -0
  273. package/dist/transaction/keys/index.js +207 -0
  274. package/dist/transaction/log/syncDeltaRow.d.ts +158 -0
  275. package/dist/transaction/log/syncDeltaRow.js +95 -0
  276. package/dist/{sync/syncPosition.d.ts → transaction/logPosition.d.ts} +22 -8
  277. package/dist/{sync/syncPosition.js → transaction/logPosition.js} +15 -6
  278. package/dist/transaction/logger.d.ts +16 -0
  279. package/dist/transaction/logger.js +7 -0
  280. package/dist/transaction/observability.d.ts +53 -0
  281. package/dist/transaction/observability.js +19 -0
  282. package/dist/transaction/plugin.d.ts +285 -0
  283. package/dist/transaction/plugin.js +106 -0
  284. package/dist/{policy → transaction/policy}/types.d.ts +3 -3
  285. package/dist/{policy → transaction/policy}/types.js +2 -0
  286. package/dist/transaction/resources/httpResources.d.ts +321 -0
  287. package/dist/transaction/resources/httpResources.js +7 -0
  288. package/dist/transaction/resources/modelOperations.d.ts +427 -0
  289. package/dist/transaction/resources/modelOperations.js +12 -0
  290. package/dist/transaction/resources/mutationOptions.d.ts +66 -0
  291. package/dist/transaction/resources/mutationOptions.js +9 -0
  292. package/dist/transaction/resources/where.d.ts +101 -0
  293. package/dist/transaction/resources/where.js +115 -0
  294. package/dist/{client → transaction/resources}/writeOptionsSchema.d.ts +2 -6
  295. package/dist/{client → transaction/resources}/writeOptionsSchema.js +9 -5
  296. package/dist/{schema → transaction/schema}/field.d.ts +17 -23
  297. package/dist/{schema → transaction/schema}/field.js +5 -5
  298. package/dist/transaction/schema/fieldRef.d.ts +38 -0
  299. package/dist/transaction/schema/fieldRef.js +11 -0
  300. package/dist/transaction/schema/loadStrategy.d.ts +45 -0
  301. package/dist/transaction/schema/loadStrategy.js +46 -0
  302. package/dist/{schema → transaction/schema}/model.d.ts +50 -35
  303. package/dist/{schema → transaction/schema}/model.js +30 -20
  304. package/dist/transaction/schema/openapi.d.ts +58 -0
  305. package/dist/transaction/schema/openapi.js +501 -0
  306. package/dist/{schema → transaction/schema}/relation.d.ts +21 -16
  307. package/dist/{schema → transaction/schema}/relation.js +7 -7
  308. package/dist/{schema → transaction/schema}/residency.d.ts +0 -9
  309. package/dist/{schema → transaction/schema}/residency.js +0 -5
  310. package/dist/{schema → transaction/schema}/roles.d.ts +5 -5
  311. package/dist/{schema → transaction/schema}/roles.js +5 -5
  312. package/dist/{schema → transaction/schema}/schema.d.ts +39 -10
  313. package/dist/{schema → transaction/schema}/schema.js +24 -3
  314. package/dist/{schema → transaction/schema}/tenancy.d.ts +1 -1
  315. package/dist/{schema → transaction/schema}/tenancy.js +7 -4
  316. package/dist/transaction/transactionLayer.d.ts +82 -0
  317. package/dist/transaction/transactionLayer.js +24 -0
  318. package/dist/{transactions → transaction/transactions/settlement}/commitEnvelope.d.ts +5 -6
  319. package/dist/{transactions → transaction/transactions/settlement}/commitEnvelope.js +9 -13
  320. package/dist/{transactions → transaction/transactions/settlement}/httpCommitEnvelope.d.ts +9 -2
  321. package/dist/{transactions → transaction/transactions/settlement}/httpCommitEnvelope.js +5 -9
  322. package/dist/{transactions/durableWriteStore.d.ts → transaction/transactions/settlement/pendingWrite.d.ts} +11 -37
  323. package/dist/transaction/transactions/settlement/pendingWrite.js +20 -0
  324. package/dist/transaction/transport/commitFrames.d.ts +90 -0
  325. package/dist/transaction/transport/commitFrames.js +134 -0
  326. package/dist/transaction/transport/connectionManager.d.ts +215 -0
  327. package/dist/transaction/transport/connectionManager.js +673 -0
  328. package/dist/transaction/transport/credentialLifecycle.d.ts +177 -0
  329. package/dist/transaction/transport/credentialLifecycle.js +324 -0
  330. package/dist/{sync → transaction/transport}/heartbeat.d.ts +3 -1
  331. package/dist/{sync → transaction/transport}/heartbeat.js +6 -4
  332. package/dist/transaction/transport/httpClient.d.ts +131 -0
  333. package/dist/{client → transaction/transport}/httpClient.js +6 -5
  334. package/dist/transaction/transport/httpOptions.d.ts +33 -0
  335. package/dist/transaction/transport/httpOptions.js +12 -0
  336. package/dist/{client → transaction/transport}/httpTransport.js +295 -97
  337. package/dist/{sync/NetworkProbe.d.ts → transaction/transport/networkProbe.d.ts} +7 -4
  338. package/dist/{sync/NetworkProbe.js → transaction/transport/networkProbe.js} +14 -13
  339. package/dist/transaction/transport/wsFrameHandlers.d.ts +128 -0
  340. package/dist/transaction/transport/wsFrameHandlers.js +429 -0
  341. package/dist/transaction/transport/wsTransport.d.ts +574 -0
  342. package/dist/transaction/transport/wsTransport.js +1023 -0
  343. package/dist/transaction/types/assertExact.d.ts +17 -0
  344. package/dist/transaction/types/assertExact.js +1 -0
  345. package/dist/{types → transaction/types}/global.d.ts +17 -2
  346. package/dist/{types → transaction/types}/global.js +2 -1
  347. package/dist/{types → transaction/types}/index.d.ts +14 -46
  348. package/dist/{types → transaction/types}/index.js +7 -16
  349. package/dist/{types → transaction/types}/streams.d.ts +73 -45
  350. package/dist/transaction/utils/duration.d.ts +50 -0
  351. package/dist/{utils → transaction/utils}/duration.js +32 -0
  352. package/dist/{utils → transaction/utils}/json.d.ts +18 -0
  353. package/dist/transaction/utils/json.js +276 -0
  354. package/dist/transaction/wire/accountResponses.d.ts +420 -0
  355. package/dist/transaction/wire/accountResponses.js +290 -0
  356. package/dist/transaction/wire/auth.d.ts +56 -0
  357. package/dist/transaction/wire/auth.js +63 -0
  358. package/dist/transaction/wire/claimEvent.d.ts +76 -0
  359. package/dist/transaction/wire/claimEvent.js +73 -0
  360. package/dist/transaction/wire/claims.d.ts +530 -0
  361. package/dist/transaction/wire/claims.js +327 -0
  362. package/dist/{wire → transaction/wire}/commit.d.ts +125 -193
  363. package/dist/{wire → transaction/wire}/commit.js +68 -47
  364. package/dist/{wire → transaction/wire}/delta.d.ts +66 -17
  365. package/dist/{wire → transaction/wire}/delta.js +37 -13
  366. package/dist/transaction/wire/errorEnvelope.d.ts +72 -0
  367. package/dist/{wire → transaction/wire}/errorEnvelope.js +36 -5
  368. package/dist/transaction/wire/feedCursor.d.ts +60 -0
  369. package/dist/transaction/wire/feedCursor.js +82 -0
  370. package/dist/transaction/wire/feedEvent.d.ts +204 -0
  371. package/dist/transaction/wire/feedEvent.js +65 -0
  372. package/dist/transaction/wire/frames.d.ts +194 -0
  373. package/dist/transaction/wire/frames.js +50 -0
  374. package/dist/transaction/wire/inboundFrames.d.ts +562 -0
  375. package/dist/transaction/wire/inboundFrames.js +116 -0
  376. package/dist/transaction/wire/index.d.ts +54 -0
  377. package/dist/transaction/wire/index.js +83 -0
  378. package/dist/{wire → transaction/wire}/listEnvelope.d.ts +13 -14
  379. package/dist/transaction/wire/listEnvelope.js +42 -0
  380. package/dist/transaction/wire/modelMutations.d.ts +31 -0
  381. package/dist/transaction/wire/modelMutations.js +52 -0
  382. package/dist/transaction/wire/modelResponses.d.ts +85 -0
  383. package/dist/transaction/wire/modelResponses.js +43 -0
  384. package/dist/transaction/wire/modelShape.d.ts +78 -0
  385. package/dist/transaction/wire/modelShape.js +74 -0
  386. package/dist/transactions/{TransactionQueue.d.ts → mutations/MutationQueue.d.ts} +85 -38
  387. package/dist/transactions/{TransactionQueue.js → mutations/MutationQueue.js} +141 -80
  388. package/dist/transactions/{TransactionStore.d.ts → mutations/MutationStore.d.ts} +8 -8
  389. package/dist/transactions/{TransactionStore.js → mutations/MutationStore.js} +2 -2
  390. package/dist/transactions/{coalesceRules.d.ts → mutations/coalesceRules.d.ts} +10 -10
  391. package/dist/transactions/{coalesceRules.js → mutations/coalesceRules.js} +1 -1
  392. package/dist/transactions/mutations/commitLatency.d.ts +52 -0
  393. package/dist/transactions/mutations/commitLatency.js +130 -0
  394. package/dist/transactions/{commitOutboxStore.d.ts → mutations/commitOutboxStore.d.ts} +1 -5
  395. package/dist/transactions/{commitOutboxStore.js → mutations/commitOutboxStore.js} +1 -1
  396. package/dist/transactions/{commitPayload.d.ts → mutations/commitPayload.d.ts} +18 -16
  397. package/dist/transactions/{commitPayload.js → mutations/commitPayload.js} +15 -15
  398. package/dist/transactions/{deltaConfirmation.d.ts → mutations/deltaConfirmation.d.ts} +15 -11
  399. package/dist/transactions/{deltaConfirmation.js → mutations/deltaConfirmation.js} +14 -12
  400. package/dist/transactions/mutations/durableWriteStore.d.ts +14 -0
  401. package/dist/transactions/mutations/durableWriteStore.js +12 -0
  402. package/dist/transactions/{optimisticApply.d.ts → mutations/optimisticApply.d.ts} +7 -7
  403. package/dist/transactions/{replayValidation.d.ts → mutations/replayValidation.d.ts} +4 -3
  404. package/dist/transactions/{replayValidation.js → mutations/replayValidation.js} +7 -5
  405. package/dist/utils/mobxSetup.d.ts +1 -1
  406. package/dist/utils/mobxSetup.js +5 -2
  407. package/dist/{core → views}/QueryView.d.ts +2 -2
  408. package/dist/{core → views}/QueryView.js +2 -2
  409. package/dist/{core → views}/ViewRegistry.d.ts +1 -1
  410. package/dist/{core/queryUtils.d.ts → views/incrementalView.d.ts} +6 -6
  411. package/dist/{core/queryUtils.js → views/incrementalView.js} +6 -6
  412. package/dist/webhooks/events.d.ts +2 -2
  413. package/dist/wire/index.d.ts +1 -34
  414. package/dist/wire/index.js +8 -49
  415. package/docs/agent-messaging.md +3 -3
  416. package/docs/agents.md +20 -13
  417. package/docs/api-keys.md +14 -10
  418. package/docs/api.md +27 -61
  419. package/docs/audit.md +6 -3
  420. package/docs/cli.md +41 -13
  421. package/docs/client-behavior.md +11 -9
  422. package/docs/concurrency-convention.md +49 -57
  423. package/docs/coordination.md +283 -121
  424. package/docs/data-sources.md +7 -5
  425. package/docs/debugging.md +39 -15
  426. package/docs/deployment.md +267 -0
  427. package/docs/examples/agent-human.md +49 -42
  428. package/docs/examples/ai-sdk-tool.md +69 -44
  429. package/docs/examples/existing-python-backend.md +8 -6
  430. package/docs/examples/nextjs.md +129 -47
  431. package/docs/examples/scoped-agent.md +46 -45
  432. package/docs/examples/server-agent.md +46 -26
  433. package/docs/groups.md +87 -30
  434. package/docs/guarantees.md +41 -12
  435. package/docs/how-it-works.md +38 -12
  436. package/docs/idempotency.md +126 -0
  437. package/docs/identity.md +77 -74
  438. package/docs/index.md +172 -86
  439. package/docs/integration-guide.md +31 -19
  440. package/docs/mcp.md +46 -21
  441. package/docs/migration.md +95 -18
  442. package/docs/operating-on-your-database.md +3 -1
  443. package/docs/projects.md +3 -1
  444. package/docs/quickstart.md +22 -5
  445. package/docs/react.md +31 -18
  446. package/docs/schema-contract.md +5 -3
  447. package/docs/session-settings.md +108 -0
  448. package/docs/sessions.md +4 -2
  449. package/docs/webhooks.md +12 -10
  450. package/llms.txt +48 -18
  451. package/package.json +21 -26
  452. package/dist/agent/Agent.d.ts +0 -366
  453. package/dist/agent/Agent.js +0 -514
  454. package/dist/agent/index.d.ts +0 -115
  455. package/dist/agent/index.js +0 -128
  456. package/dist/agent/session.d.ts +0 -93
  457. package/dist/agent/session.js +0 -149
  458. package/dist/agent/types.d.ts +0 -68
  459. package/dist/agent/types.js +0 -9
  460. package/dist/cli.cjs +0 -286329
  461. package/dist/client/durableWrites.d.ts +0 -21
  462. package/dist/client/httpClient.d.ts +0 -80
  463. package/dist/coordination/schema.d.ts +0 -722
  464. package/dist/coordination/schema.js +0 -578
  465. package/dist/schema/openapi.d.ts +0 -29
  466. package/dist/schema/openapi.js +0 -124
  467. package/dist/testing/fixtures/bootstrap.d.ts +0 -49
  468. package/dist/testing/fixtures/bootstrap.js +0 -59
  469. package/dist/testing/fixtures/deltas.d.ts +0 -83
  470. package/dist/testing/fixtures/deltas.js +0 -136
  471. package/dist/testing/fixtures/models.d.ts +0 -83
  472. package/dist/testing/fixtures/models.js +0 -272
  473. package/dist/testing/helpers/reactWrapper.d.ts +0 -69
  474. package/dist/testing/helpers/reactWrapper.js +0 -67
  475. package/dist/testing/helpers/syncEngineHarness.d.ts +0 -54
  476. package/dist/testing/helpers/syncEngineHarness.js +0 -73
  477. package/dist/testing/helpers/wait.d.ts +0 -30
  478. package/dist/testing/helpers/wait.js +0 -49
  479. package/dist/testing/index.d.ts +0 -23
  480. package/dist/testing/index.js +0 -33
  481. package/dist/testing/mocks/FakeDatabase.d.ts +0 -18
  482. package/dist/testing/mocks/FakeDatabase.js +0 -10
  483. package/dist/testing/mocks/MockMutationExecutor.d.ts +0 -87
  484. package/dist/testing/mocks/MockMutationExecutor.js +0 -192
  485. package/dist/testing/mocks/MockNetworkMonitor.d.ts +0 -20
  486. package/dist/testing/mocks/MockNetworkMonitor.js +0 -46
  487. package/dist/testing/mocks/MockSyncContext.d.ts +0 -51
  488. package/dist/testing/mocks/MockSyncContext.js +0 -71
  489. package/dist/testing/mocks/MockSyncStore.d.ts +0 -88
  490. package/dist/testing/mocks/MockSyncStore.js +0 -171
  491. package/dist/testing/mocks/MockWebSocket.d.ts +0 -71
  492. package/dist/testing/mocks/MockWebSocket.js +0 -118
  493. package/dist/transactions/durableWriteStore.js +0 -30
  494. package/dist/utils/duration.d.ts +0 -25
  495. package/dist/utils/json.js +0 -88
  496. package/dist/wire/errorEnvelope.d.ts +0 -55
  497. package/dist/wire/frames.d.ts +0 -197
  498. package/dist/wire/frames.js +0 -49
  499. package/dist/wire/listEnvelope.js +0 -18
  500. package/docs/interaction-model.md +0 -97
  501. /package/dist/{core → query}/QueryProcessor.d.ts +0 -0
  502. /package/dist/{core → query}/QueryProcessor.js +0 -0
  503. /package/dist/{core/storeContract.js → storeContract.js} +0 -0
  504. /package/dist/{core → stores}/openIDBWithTimeout.d.ts +0 -0
  505. /package/dist/{core → stores}/openIDBWithTimeout.js +0 -0
  506. /package/dist/{client → transaction/auth}/credentialEndpoint.d.ts +0 -0
  507. /package/dist/{client → transaction/auth}/credentialEndpoint.js +0 -0
  508. /package/dist/{auth → transaction/auth}/credentialPolicy.d.ts +0 -0
  509. /package/dist/{auth → transaction/auth}/credentialPolicy.js +0 -0
  510. /package/dist/{auth → transaction/auth}/credentialSource.js +0 -0
  511. /package/dist/{client → transaction/auth}/hostedEndpoints.d.ts +0 -0
  512. /package/dist/{client → transaction/auth}/hostedEndpoints.js +0 -0
  513. /package/dist/{client → transaction}/persistence.d.ts +0 -0
  514. /package/dist/{client → transaction}/persistence.js +0 -0
  515. /package/dist/{client → transaction/resources}/functionalUpdate.d.ts +0 -0
  516. /package/dist/{client → transaction/resources}/functionalUpdate.js +0 -0
  517. /package/dist/{transactions → transaction/transactions/settlement}/idempotencyKey.d.ts +0 -0
  518. /package/dist/{transactions → transaction/transactions/settlement}/idempotencyKey.js +0 -0
  519. /package/dist/{client → transaction/transport}/httpTransport.d.ts +0 -0
  520. /package/dist/{types → transaction/types}/modelData.d.ts +0 -0
  521. /package/dist/{types → transaction/types}/modelData.js +0 -0
  522. /package/dist/{types → transaction/types}/participant.d.ts +0 -0
  523. /package/dist/{types → transaction/types}/participant.js +0 -0
  524. /package/dist/{types → transaction/types}/streams.js +0 -0
  525. /package/dist/{utils → transaction/utils}/asyncIterator.d.ts +0 -0
  526. /package/dist/{utils → transaction/utils}/asyncIterator.js +0 -0
  527. /package/dist/{wire → transaction/wire}/bootstrapReason.d.ts +0 -0
  528. /package/dist/{wire → transaction/wire}/bootstrapReason.js +0 -0
  529. /package/dist/{wire → transaction/wire}/protocol.d.ts +0 -0
  530. /package/dist/{wire → transaction/wire}/protocol.js +0 -0
  531. /package/dist/{wire → transaction/wire}/protocolVersion.d.ts +0 -0
  532. /package/dist/{wire → transaction/wire}/protocolVersion.js +0 -0
  533. /package/dist/transactions/{UnconfirmedWrites.d.ts → mutations/UnconfirmedWrites.d.ts} +0 -0
  534. /package/dist/transactions/{UnconfirmedWrites.js → mutations/UnconfirmedWrites.js} +0 -0
  535. /package/dist/transactions/{optimisticApply.js → mutations/optimisticApply.js} +0 -0
  536. /package/dist/{core → views}/ViewRegistry.js +0 -0
@@ -10,7 +10,7 @@
10
10
  * queue, {@link Database} owns local persistence, {@link InstanceCache} holds the
11
11
  * in-memory models, and {@link ModelRegistry} holds their metadata.
12
12
  */
13
- import type { RecoveryClass } from './errorCodes.js';
13
+ import type { RecoveryClass } from './transaction/errorCodes.js';
14
14
  import { ConnectionManager } from './sync/ConnectionManager.js';
15
15
  import { SubscriptionManager } from './sync/SubscriptionManager.js';
16
16
  import { type ParticipantScope } from './sync/participants.js';
@@ -18,22 +18,25 @@ import type { SyncClient } from './SyncClient.js';
18
18
  import type { Database, BootstrapResult } from './Database.js';
19
19
  import type { InstanceCache } from './InstanceCache.js';
20
20
  import { ModelRegistry } from './ModelRegistry.js';
21
- import { SyncWebSocket, type SyncDelta, type SyncGroupChangePayload, type GroupAddedPayload, type GroupRemovedPayload, type BootstrapHint, type BootstrapDataEvent, type PresenceUpdateEvent, type EventMap, type DefaultCollaborationEvents } from './sync/SyncWebSocket.js';
22
- import { QueryProcessor } from './core/QueryProcessor.js';
21
+ import { SyncWebSocket, type SyncDelta, type SyncGroupChangePayload, type GroupAddedPayload, type GroupRemovedPayload, type BootstrapHint, type BootstrapDataEvent, type PresenceUpdate, type EventMap, type DefaultCollaborationEvents, type SyncWebSocketEventMap } from './sync/SyncWebSocket.js';
22
+ import { QueryProcessor } from './query/QueryProcessor.js';
23
23
  import { Model } from './Model.js';
24
+ import type { RuntimeContext } from './RuntimeContext.js';
25
+ import type { AbloPlugin, AppliedChange } from './transaction/plugin.js';
24
26
  import { ModelScope } from './InstanceCache.js';
25
- import type { Schema } from './schema/schema.js';
26
- import type { SyncStatus, LocalMutation } from './core/storeContract.js';
27
- import type { AuthCredentialSource } from './auth/credentialSource.js';
28
- import type { ModelData } from './types/modelData.js';
27
+ import type { Schema } from './transaction/schema/schema.js';
28
+ import type { SyncStatus, LocalMutation } from './storeContract.js';
29
+ import type { AuthCredentialSource } from './transaction/auth/credentialSource.js';
30
+ import type { ModelData } from './transaction/types/modelData.js';
29
31
  import type { EnrichmentPlanEntry, ForeignKeyIndexSpec } from './sync/syncPlan.js';
30
32
  import { type CredentialRefresher } from './sync/credentialLifecycle.js';
31
33
  import type { RehydrationStats } from './sync/bootstrapApply.js';
34
+ import type { ParticipantKind } from './transaction/types/participant.js';
32
35
  /** Constructor type for Model subclasses (accepts abstract classes) */
33
36
  export type ModelConstructor<T extends Model> = abstract new (...args: never[]) => T;
34
37
  /** Concrete constructor type for instantiation */
35
38
  export type ConcreteModelConstructor<T extends Model> = new (data?: any) => T;
36
- export type { ModelData } from './types/modelData.js';
39
+ export type { ModelData } from './transaction/types/modelData.js';
37
40
  /** Query result interface */
38
41
  export interface QueryResult<T extends Model> {
39
42
  data: T[];
@@ -47,6 +50,16 @@ export interface SyncedStoreConfig {
47
50
  enableOffline?: boolean;
48
51
  enableCache?: boolean;
49
52
  enableTelemetry?: boolean;
53
+ /**
54
+ * Wire message types to surface as collaboration events, e.g.
55
+ * `['document:selection', 'document:cursor']`.
56
+ *
57
+ * The vocabulary belongs to the application, not the SDK — these name the
58
+ * application's own concepts, and a schema with no documents should never see
59
+ * them. Defaults to none, so an application opts in by naming the events it
60
+ * actually broadcasts.
61
+ */
62
+ collaborationEvents?: readonly string[];
50
63
  /**
51
64
  * Declarative enrichment plan consumed by `enrichRelations`. Replaces
52
65
  * the subclass override of `enrichRelations` for per-model parent
@@ -64,7 +77,7 @@ export interface SyncedStoreConfig {
64
77
  */
65
78
  foreignKeyIndexes?: readonly ForeignKeyIndexSpec[];
66
79
  }
67
- export type { SyncStatus } from './core/storeContract.js';
80
+ export type { SyncStatus } from './storeContract.js';
68
81
  /** User context for initialization */
69
82
  export interface UserContext {
70
83
  userId: string;
@@ -75,7 +88,7 @@ export interface UserContext {
75
88
  * sessions; 'agent' for headless bots / worker processes. The
76
89
  * store routes this to SyncWebSocket so the WS URL carries
77
90
  * `kind=agent` and the server applies capability-token auth. */
78
- kind?: 'user' | 'agent' | 'system';
91
+ kind?: ParticipantKind;
79
92
  /** Restricted (`rk_`) API key for `kind: 'agent'` — the agent's
80
93
  * bearer credential. Sent in the `ablo.bearer.<token>` WebSocket
81
94
  * subprotocol, never in the URL. */
@@ -107,14 +120,20 @@ export interface SmartSyncOptions {
107
120
  maxBatchSize?: number;
108
121
  }
109
122
  export type { RehydrationStats } from './sync/bootstrapApply.js';
110
- /** Bootstrap timeout configuration */
123
+ /**
124
+ * Bootstrap retry configuration.
125
+ *
126
+ * There is deliberately no overall timeout here. How long one attempt may run
127
+ * is not a policy this layer gets to invent — it is a property of the fetcher's
128
+ * watchdogs, read from `BootstrapFetcher.budgetMs`. A second number kept here
129
+ * would only be able to disagree with them, which is exactly what it used to do.
130
+ */
111
131
  export declare const BOOTSTRAP_CONFIG: {
112
- readonly OVERALL_TIMEOUT_MS: 15000;
113
132
  readonly MAX_RETRY_ATTEMPTS: 3;
114
133
  readonly RETRY_DELAY_MS: 500;
115
134
  };
116
135
  export { ModelScope };
117
- export type { SyncDelta, SyncGroupChangePayload, GroupAddedPayload, GroupRemovedPayload, BootstrapHint, BootstrapDataEvent, PresenceUpdateEvent, };
136
+ export type { SyncDelta, SyncGroupChangePayload, GroupAddedPayload, GroupRemovedPayload, BootstrapHint, BootstrapDataEvent, PresenceUpdate, };
118
137
  export { deriveSyncPlanFromSchema } from './sync/syncPlan.js';
119
138
  /**
120
139
  * The abstract base class that application-specific sync stores extend. It
@@ -133,18 +152,22 @@ export { deriveSyncPlanFromSchema } from './sync/syncPlan.js';
133
152
  * the underlying SyncWebSocket without casts:
134
153
  *
135
154
  * @example
136
- * interface AbloEvents {
137
- * 'sheet:selection': [SheetSelectionEvent];
138
- * 'slide:cursor': [SlideCursorEvent];
155
+ * interface EditorEvents {
156
+ * 'document:selection': [SelectionEvent];
157
+ * 'document:cursor': [CursorEvent];
139
158
  * }
140
- * class SyncedStore extends BaseSyncedStore<AbloEvents> {
141
- * subscribeToSlideCursor(handler: (e: SlideCursorEvent) => void) {
142
- * return this.syncWebSocket?.subscribe('slide:cursor', handler);
159
+ * class EditorStore extends BaseSyncedStore<EditorEvents> {
160
+ * subscribeToCursor(handler: (e: CursorEvent) => void) {
161
+ * return this.syncWebSocket.subscribe('document:cursor', handler);
143
162
  * }
144
163
  * }
145
164
  */
146
165
  export declare class BaseSyncedStore<TCollaboration extends EventMap<TCollaboration> = DefaultCollaborationEvents, TSchema extends Schema = Schema> {
147
166
  syncStatus: SyncStatus;
167
+ /** The owning client's runtime; the module-global bridge when constructed directly. */
168
+ protected readonly runtime: RuntimeContext;
169
+ /** The installed plugins the delta pipeline dispatches stage handlers to. */
170
+ protected readonly stagePlugins: readonly AbloPlugin[];
148
171
  protected readonly syncClient: SyncClient;
149
172
  protected readonly database: Database;
150
173
  protected readonly objectPool: InstanceCache;
@@ -155,15 +178,20 @@ export declare class BaseSyncedStore<TCollaboration extends EventMap<TCollaborat
155
178
  * `create(key, data)` factory and model self-healing.
156
179
  */
157
180
  protected readonly schema?: TSchema;
158
- protected syncWebSocket: SyncWebSocket<TCollaboration> | null;
181
+ /**
182
+ * The connection, owned by whoever built this store (ADR 0016 follow-up
183
+ * 3b): the host constructs it and hands it in, the store seeds its late
184
+ * values during `initialize()` and owns the lifecycle from there. One
185
+ * instance for the store's whole lifetime — reconnects replace the socket
186
+ * inside it, never the object.
187
+ */
188
+ protected readonly syncWebSocket: SyncWebSocket<TCollaboration>;
159
189
  /**
160
190
  * Dynamic read interest (area-of-interest) over the connection's sync
161
- * groups. Lives alongside `syncWebSocket` and is recreated with it; the
162
- * stable `enterScope`/`leaveScope`/`pinScope`/`unpinScope` methods forward
163
- * to whichever instance is current, so callers (the React participant
164
- * hook) never hold a stale reference. Null until `setupWebSocketSync`.
191
+ * groups. Constructed with the connection; the permanent base scopes are
192
+ * seeded in `setupWebSocketSync` once identity resolves.
165
193
  */
166
- protected areaOfInterest: SubscriptionManager | null;
194
+ protected readonly areaOfInterest: SubscriptionManager;
167
195
  /** Sync groups whose current state has been backfilled into the pool
168
196
  * (hydrate-on-enter). Cleared when the pool is reset on (re)bootstrap. */
169
197
  private readonly hydratedGroups;
@@ -171,15 +199,32 @@ export declare class BaseSyncedStore<TCollaboration extends EventMap<TCollaborat
171
199
  * enters of the same scope so they share one fetch. */
172
200
  private readonly hydratingGroups;
173
201
  private _syncServerUrl?;
202
+ /** Application-declared collaboration event types; empty unless configured. */
203
+ private _collaborationEvents;
174
204
  /**
175
205
  * Public accessor for the underlying SyncWebSocket. Used by the
176
206
  * factory in `createSyncEngine` to wire the default mutation
177
207
  * executor — the executor needs the WS handle to send commit
178
208
  * frames, and the factory can't reach `protected` state through
179
- * normal typing. Returns null until WS is initialized during
180
- * `initialize()`.
209
+ * normal typing.
181
210
  */
182
- getSyncWebSocket(): SyncWebSocket<TCollaboration> | null;
211
+ getSyncWebSocket(): SyncWebSocket<TCollaboration>;
212
+ /**
213
+ * Subscribe to pushed frames — deltas, presence updates, claim grants and
214
+ * losses, connection changes, and this store's collaboration events.
215
+ * Durable by construction: the connection object exists for the store's
216
+ * whole lifetime (reconnects replace only the socket inside it), so a
217
+ * subscription made before the first connect starts delivering when the
218
+ * socket opens and keeps delivering across every reconnect. Returns the
219
+ * unsubscribe function.
220
+ */
221
+ subscribe<K extends keyof SyncWebSocketEventMap<TCollaboration>>(event: K, handler: (...args: SyncWebSocketEventMap<TCollaboration>[K]) => void): () => void;
222
+ /**
223
+ * Send a collaboration event (an app-specific real-time message from this
224
+ * store's `TCollaboration` map). A no-op while the connection is down —
225
+ * presence-grade traffic is not queued.
226
+ */
227
+ sendCollaborationEvent<K extends string & keyof TCollaboration>(messageType: K, payload: TCollaboration[K] extends [infer P] ? Omit<P & Record<string, unknown>, 'timestamp'> : never): void;
183
228
  private scopeToGroups;
184
229
  /**
185
230
  * Bring a scope into view and subscribe to its sync groups. With
@@ -230,13 +275,15 @@ export declare class BaseSyncedStore<TCollaboration extends EventMap<TCollaborat
230
275
  protected pendingDeltas: SyncDelta[];
231
276
  protected batchTimer: ReturnType<typeof setTimeout> | null;
232
277
  protected syncPromise: Promise<void> | null;
233
- /** Resume/ack cursor — delegates to the shared SyncPosition (see
234
- * sync/syncPosition.ts). Advances only after IDB persistence. */
278
+ /** Resume/ack cursor — delegates to the shared LogPosition (see
279
+ * logPosition.ts). Advances only after IDB persistence. */
235
280
  protected get lastAckedId(): number;
236
- /** Pool-applied cursor — delegates to the shared SyncPosition. */
281
+ /** Pool-applied cursor — delegates to the shared LogPosition. */
237
282
  protected get highestProcessedSyncId(): number;
238
283
  protected bootstrapDeltaQueue: SyncDelta[] | null;
239
284
  protected activeBootstrapCount: number;
285
+ /** The live deadline for the bootstrap attempt in flight, if any. */
286
+ private bootstrapDeadlineTimer;
240
287
  protected pendingDeletes: Set<string>;
241
288
  protected modelTypesHydrated: Set<string>;
242
289
  protected modelTypeHydrationInFlight: Map<string, Promise<void>>;
@@ -245,6 +292,15 @@ export declare class BaseSyncedStore<TCollaboration extends EventMap<TCollaborat
245
292
  database: Database;
246
293
  objectPool: InstanceCache;
247
294
  modelRegistry: ModelRegistry;
295
+ /**
296
+ * The connection, built by the host. When omitted, the store constructs
297
+ * its own from `url` and the collaboration-event config — the
298
+ * self-contained path subclasses and tests use. Either way the store
299
+ * owns the lifecycle from here: it seeds the late values (identity,
300
+ * read scope, resume cursor) during `initialize()` and releases the
301
+ * first connect.
302
+ */
303
+ syncWebSocket?: SyncWebSocket<TCollaboration>;
248
304
  /**
249
305
  * Optional schema. When provided, {@link deriveSyncPlanFromSchema} walks
250
306
  * the schema's models and relations to auto-populate foreign-key indexes
@@ -257,6 +313,14 @@ export declare class BaseSyncedStore<TCollaboration extends EventMap<TCollaborat
257
313
  url?: string;
258
314
  /** Shared bearer credential source for every auth-aware transport. */
259
315
  auth?: AuthCredentialSource;
316
+ /** The owning client's runtime. Defaults to the module-global bridge. */
317
+ runtime?: RuntimeContext;
318
+ /**
319
+ * The installed plugins, whose declared stage handlers the delta
320
+ * pipeline dispatches. Empty on direct construction — the store's own
321
+ * apply is then the whole pipeline.
322
+ */
323
+ stagePlugins?: readonly AbloPlugin[];
260
324
  }, config?: SyncedStoreConfig);
261
325
  /**
262
326
  * Register foreign-key indexes for constant-time lookups.
@@ -331,7 +395,7 @@ export declare class BaseSyncedStore<TCollaboration extends EventMap<TCollaborat
331
395
  subscribeSessionError(listener: (error: Error) => void): () => void;
332
396
  /**
333
397
  * Subscribe to per-mutation failure payloads. Forwarded from the
334
- * underlying `SyncClient.transactionQueue` so consumers (toast layer,
398
+ * underlying `SyncClient.mutationQueue` so consumers (toast layer,
335
399
  * route-level reverted boundaries, telemetry) can react without
336
400
  * reaching across the store. Returns an unsubscribe function.
337
401
  *
@@ -342,10 +406,17 @@ export declare class BaseSyncedStore<TCollaboration extends EventMap<TCollaborat
342
406
  * same shape, same lifecycle.
343
407
  */
344
408
  subscribeMutationFailure(listener: (payload: {
345
- transaction: import('./transactions/TransactionQueue.js').Transaction;
409
+ transaction: import('./transactions/mutations/MutationQueue.js').QueuedMutation;
346
410
  error: Error;
347
411
  permanent?: boolean;
348
412
  }) => void): () => void;
413
+ /**
414
+ * Subscribe to commit round-trip latency. Forwarded from the underlying
415
+ * `SyncClient` for the same reason as `subscribeMutationFailure` — the
416
+ * React provider binds against this surface, so the engine's wiring stays
417
+ * private while the SDK keeps one hook to expose.
418
+ */
419
+ subscribeCommitLatency(listener: (sample: import('./transactions/mutations/commitLatency.js').CommitLatencySample) => void): () => void;
349
420
  /**
350
421
  * Wait for the in-flight transaction for (modelName, modelId) to be
351
422
  * confirmed by the server. See `SyncClient.waitForConfirmation` for the
@@ -354,8 +425,8 @@ export declare class BaseSyncedStore<TCollaboration extends EventMap<TCollaborat
354
425
  waitForConfirmation(modelName: string, modelId: string): Promise<void>;
355
426
  /**
356
427
  * Observe the LOCAL mutation stream for undo recording (see
357
- * {@link import('./core/storeContract.js').LocalMutation}). Taps the
358
- * TransactionQueue's `transaction:created` event — fired once per local
428
+ * {@link import('./storeContract.js').LocalMutation}). Taps the
429
+ * MutationQueue's `transaction:created` event — fired once per local
359
430
  * create/update/delete/archive with `previousData` already captured.
360
431
  * Remote/collaborator deltas apply via `applyDeltaBatchToPool` and never
361
432
  * emit here, so undo is naturally local-only (you can't undo a teammate).
@@ -366,8 +437,29 @@ export declare class BaseSyncedStore<TCollaboration extends EventMap<TCollaborat
366
437
  * Prevents the common issue where bootstrap hangs on startup.
367
438
  */
368
439
  protected executeBootstrapWithTimeout<T>(bootstrapFn: () => Promise<T>, _context: UserContext, signal?: AbortSignal): Promise<T>;
369
- /** Create a timeout promise for bootstrap attempts */
440
+ /**
441
+ * The outer deadline for one bootstrap attempt.
442
+ *
443
+ * The length is DERIVED from the fetcher's own watchdog budget, not chosen. A
444
+ * chosen number is what broke this: the previous fixed 15s was shorter than a
445
+ * single model chunk's allowance — 20s waiting for response headers plus 15s
446
+ * of stall grace — so on any workspace with one slow model the deadline fired
447
+ * before the watchdogs it was meant to backstop, and every attempt timed out
448
+ * by construction. The watchdogs below are progress-based and already
449
+ * guarantee termination; this deadline exists only for a hang somewhere other
450
+ * than the network, so it must sit above them, and it can only do that
451
+ * reliably by asking them how long they take.
452
+ *
453
+ * Reaching it aborts the work in flight. `Promise.race` merely stops waiting:
454
+ * without the abort the losing bootstrap keeps running, keeps its sockets, and
455
+ * races the retry that replaced it — which is how one page load turned into
456
+ * dozens of overlapping requests.
457
+ */
370
458
  protected createBootstrapTimeout(attempt: number): Promise<never>;
459
+ /** Disarm the deadline once its attempt has settled. Load-bearing now that
460
+ * firing it aborts real work: a leftover timer would cancel a later,
461
+ * unrelated bootstrap. */
462
+ private clearBootstrapDeadline;
371
463
  /** Reset bootstrap-related state for a clean retry */
372
464
  protected resetBootstrapState(): void;
373
465
  /** Perform reconnect: bootstrap + WS reconnect. Returns outcome for state machine. */
@@ -495,8 +587,15 @@ export declare class BaseSyncedStore<TCollaboration extends EventMap<TCollaborat
495
587
  * driven session" vs "is this a server agent". The latter never has
496
588
  * a tab to lose focus or a network adapter to wake up.
497
589
  */
498
- protected createConnectionManager(kind?: 'user' | 'agent' | 'system'): ConnectionManager | null;
499
- /** Disconnect and clean up all resources */
590
+ protected createConnectionManager(kind?: ParticipantKind): ConnectionManager | null;
591
+ /**
592
+ * Disconnect and clean up all resources. Terminal: this means "the client
593
+ * is finished", not "close and reopen later" — the connection object stays
594
+ * assigned but closed, the event wiring is torn down, and nothing
595
+ * re-initializes a disconnected store. (Mid-session closes during recovery
596
+ * go through the connection FSM's `onDisconnectWebSocket`, which closes
597
+ * the transport without touching the store.)
598
+ */
500
599
  disconnect(): Promise<void>;
501
600
  /**
502
601
  * Destroy every IndexedDB database owned by the sync engine.
@@ -535,12 +634,41 @@ export declare class BaseSyncedStore<TCollaboration extends EventMap<TCollaborat
535
634
  * mutation attempt surface a clearer error.
536
635
  */
537
636
  protected waitForWebSocketConnected(timeoutMs: number): Promise<boolean>;
637
+ /**
638
+ * Seed the connection's late values and open it. The socket itself exists
639
+ * from construction; what identity resolution supplies — the participant
640
+ * kind, the credential, the read scope, and the resume cursor — is seeded
641
+ * here, and only then is the held first connect released. A retried
642
+ * `initialize()` after a failed `ready()` re-runs this against the same
643
+ * connection object: the reconnect counter is reset for a clean slate,
644
+ * while the session-error latch deliberately survives (only the
645
+ * credential-expiry recovery clears it).
646
+ */
538
647
  protected setupWebSocketSync(context: UserContext, lastSyncId: number): void;
648
+ /**
649
+ * Wire the store's handlers onto the connection. Runs once, at
650
+ * construction — the connection object is stable for the store's
651
+ * lifetime, so the wiring is too.
652
+ */
653
+ protected wireSocketEvents(): void;
654
+ /**
655
+ * Build and start the connection FSM. The `onConnectionEvent` hook is the
656
+ * bridge — WS events fire the hook, the hook forwards into the FSM. Called
657
+ * from `setupWebSocketSync` because the FSM's shape depends on the resolved
658
+ * participant kind (agents get none — see {@link createConnectionManager}).
659
+ */
660
+ private startConnectionManager;
539
661
  /** Memoized pipeline context — `enqueueDelta` runs once per delta, so the
540
662
  * accessor object is built once and reused (the get/set accessors always
541
663
  * read the live host fields). */
542
664
  private _deltaPipelineContext;
543
665
  private get deltaPipelineContext();
666
+ /**
667
+ * Lands persisted changes in the in-memory pool, with this store's
668
+ * relation enrichment bound. The one apply path: the pipeline's bridge
669
+ * (no plugins installed) and the `humans()` apply handler both call it.
670
+ */
671
+ applyChangesToPool(changes: readonly AppliedChange[]): void;
544
672
  /** Get fields that represent meaningful state for deduplication. Override for model-specific fields. */
545
673
  protected getStateFields(_modelName: string): string[];
546
674
  /** Deduplicate deltas to the same entity — keep meaningful state transitions only */
@@ -590,7 +718,7 @@ export declare class BaseSyncedStore<TCollaboration extends EventMap<TCollaborat
590
718
  * schema build time) to find children. The previous implementation did
591
719
  * `getByType(ctor).filter(e => e.toJSON()[foreignKey] === parentId)` —
592
720
  * a full pool scan per child model + a `toJSON()` allocation per
593
- * candidate. For a deck delete with 10K layers in the pool, that was
721
+ * candidate. For a report delete with 10K blocks in the pool, that was
594
722
  * 10K toJSON allocations per cascade level. The FK-indexed lookup
595
723
  * skips both the scan AND the allocation.
596
724
  */
@@ -605,7 +733,7 @@ export declare class BaseSyncedStore<TCollaboration extends EventMap<TCollaborat
605
733
  * Save a model (create or update).
606
734
  *
607
735
  * Accepts any entity shape with `{ id: string }` so consumers can pass the
608
- * Zod-inferred model types from `InferModel<Schema, K>` without knowing
736
+ * Zod-inferred model types from `Model<Schema, K>` without knowing
609
737
  * about the internal `Model` base class. At runtime, every entity reaching
610
738
  * this method came through the object pool (via `store.create`, a query
611
739
  * accessor, or an optimistic insert) and IS a `Model` instance — the one
@@ -618,7 +746,7 @@ export declare class BaseSyncedStore<TCollaboration extends EventMap<TCollaborat
618
746
  }>(entity: T, options?: {
619
747
  skipValidation?: boolean;
620
748
  }): Promise<void>;
621
- /** Save with an atomic server mutation (e.g., createSlideWithLayers) */
749
+ /** Save with an atomic server mutation (e.g., createSectionWithBlocks) */
622
750
  saveWithAtomicMutation(model: Model, mutation: (gql: unknown) => Promise<unknown>): Promise<void>;
623
751
  /** Delete a model. Accepts schema-inferred entity shapes (see `save`). */
624
752
  delete<T extends {
@@ -648,17 +776,17 @@ export declare class BaseSyncedStore<TCollaboration extends EventMap<TCollaborat
648
776
  * Create a model instance locally, typed via the schema.
649
777
  *
650
778
  * ```ts
651
- * const sheet = store.create('spreadsheetSheets', { name, spreadsheetId });
652
- * // sheet: SpreadsheetSheet | null — no cast needed
779
+ * const ledger = store.create('ledgers', { name, reportId });
780
+ * // ledger: Ledger | null — no cast needed
653
781
  * ```
654
782
  *
655
783
  * The `typename` arg is the schema key (camelCase plural, e.g.
656
- * `'spreadsheetSheets'`); the returned instance has the
657
- * `InferModel<Schema, K>` shape including computeds + relation accessors.
784
+ * `'ledgers'`); the returned instance has the
785
+ * `Model<Schema, K>` shape including computeds + relation accessors.
658
786
  * Wraps `pool.create(...)` — the underlying runtime is unchanged, just
659
787
  * type-narrowed.
660
788
  */
661
- create<K extends keyof TSchema['models'] & string>(typename: K, data: Record<string, unknown>): import('./schema/schema.js').InferModel<TSchema, K> | null;
789
+ create<K extends keyof TSchema['models'] & string>(typename: K, data: Record<string, unknown>): import('./transaction/schema/schema.js').Model<TSchema, K> | null;
662
790
  /**
663
791
  * Query entry point for callers that hold a {@link Model} constructor and an
664
792
  * options object. It filters, orders, and paginates the matching models from
@@ -676,7 +804,7 @@ export declare class BaseSyncedStore<TCollaboration extends EventMap<TCollaborat
676
804
  /**
677
805
  * Get all models of a type. Returns Model[] honestly — callers that need
678
806
  * narrow types should use `useAblo((ablo) => ablo.<model>.list(...))`
679
- * which does proper inference via `InferModel<S, K>`.
807
+ * which does proper inference via `Model<S, K>`.
680
808
  */
681
809
  allModelsOfType(modelClass: ModelConstructor<Model>, scope?: ModelScope): Model[];
682
810
  /** Error handler for fire-and-forget flushPendingDeltas calls */
@@ -688,7 +816,7 @@ export declare class BaseSyncedStore<TCollaboration extends EventMap<TCollaborat
688
816
  /** Handle bootstrap_data event. Override in subclass. */
689
817
  protected handleBootstrapData(_data: BootstrapDataEvent): void;
690
818
  /** Handle presence_update event. Override in subclass. */
691
- protected handlePresenceUpdate(_data: PresenceUpdateEvent): void;
819
+ protected handlePresenceUpdate(_data: PresenceUpdate): void;
692
820
  protected incrementPendingChanges(): void;
693
821
  protected decrementPendingChanges(): void;
694
822
  protected updateSyncStatus(updates: Partial<SyncStatus>): void;