@abloatai/ablo 0.34.1 → 0.35.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 (483) hide show
  1. package/AGENTS.md +2 -1
  2. package/CHANGELOG.md +674 -5
  3. package/README.md +39 -22
  4. package/dist/BaseSyncedStore.d.ts +152 -44
  5. package/dist/BaseSyncedStore.js +300 -184
  6. package/dist/Database.d.ts +9 -24
  7. package/dist/Database.js +37 -22
  8. package/dist/InstanceCache.d.ts +25 -4
  9. package/dist/InstanceCache.js +48 -15
  10. package/dist/LazyReferenceCollection.d.ts +3 -3
  11. package/dist/LazyReferenceCollection.js +4 -4
  12. package/dist/Model.d.ts +6 -6
  13. package/dist/Model.js +10 -10
  14. package/dist/ModelRegistry.d.ts +4 -4
  15. package/dist/ModelRegistry.js +3 -3
  16. package/dist/{SyncEngineContext.d.ts → RuntimeContext.d.ts} +20 -13
  17. package/dist/{SyncEngineContext.js → RuntimeContext.js} +11 -12
  18. package/dist/SyncClient.d.ts +42 -32
  19. package/dist/SyncClient.js +166 -110
  20. package/dist/ai-sdk/coordinatedTool.d.ts +2 -2
  21. package/dist/ai-sdk/coordinatedTool.js +1 -1
  22. package/dist/ai-sdk/coordinationContext.d.ts +2 -2
  23. package/dist/ai-sdk/coordinationContext.js +1 -1
  24. package/dist/ai-sdk/wrap.d.ts +3 -3
  25. package/dist/ai-sdk/wrap.js +2 -2
  26. package/dist/auth/index.d.ts +1 -156
  27. package/dist/auth/index.js +8 -301
  28. package/dist/cli.cjs +3344 -1073
  29. package/dist/client/Ablo.d.ts +42 -287
  30. package/dist/client/Ablo.js +118 -963
  31. package/dist/client/abloClient.d.ts +309 -0
  32. package/dist/client/abloClient.js +13 -0
  33. package/dist/client/clientPrelude.d.ts +52 -0
  34. package/dist/client/clientPrelude.js +60 -0
  35. package/dist/client/consoleLogger.d.ts +2 -2
  36. package/dist/client/coreClient.d.ts +60 -0
  37. package/dist/client/coreClient.js +118 -0
  38. package/dist/client/createInternalComponents.d.ts +4 -4
  39. package/dist/client/createInternalComponents.js +9 -8
  40. package/dist/client/createModelProxy.d.ts +78 -373
  41. package/dist/client/createModelProxy.js +114 -86
  42. package/dist/client/humans.d.ts +48 -0
  43. package/dist/client/humans.js +52 -0
  44. package/dist/client/modelRegistration.d.ts +1 -1
  45. package/dist/client/modelRegistration.js +9 -9
  46. package/dist/client/options.d.ts +73 -17
  47. package/dist/client/reactiveEngine.d.ts +48 -0
  48. package/dist/client/reactiveEngine.js +910 -0
  49. package/dist/client/resourceTypes.d.ts +9 -250
  50. package/dist/client/resourceTypes.js +8 -5
  51. package/dist/client/schemaConfig.d.ts +4 -4
  52. package/dist/client/schemaConfig.js +6 -2
  53. package/dist/client/validateAbloOptions.d.ts +3 -2
  54. package/dist/client/validateAbloOptions.js +1 -1
  55. package/dist/client/wsMutationExecutor.d.ts +3 -3
  56. package/dist/client/wsMutationExecutor.js +3 -3
  57. package/dist/context.d.ts +9 -9
  58. package/dist/context.js +10 -9
  59. package/dist/coordination/ClaimLog.d.ts +26 -0
  60. package/dist/coordination/ClaimLog.js +32 -0
  61. package/dist/coordination/index.d.ts +1 -15
  62. package/dist/coordination/index.js +8 -31
  63. package/dist/core/DatabaseManager.js +1 -1
  64. package/dist/core/QueryView.d.ts +1 -1
  65. package/dist/core/QueryView.js +1 -1
  66. package/dist/core/StoreManager.d.ts +4 -23
  67. package/dist/core/StoreManager.js +5 -55
  68. package/dist/core/index.d.ts +2 -2
  69. package/dist/core/index.js +2 -2
  70. package/dist/core/storeContract.d.ts +2 -2
  71. package/dist/docs/catalog.d.ts +72 -0
  72. package/dist/docs/catalog.js +227 -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 +40 -34
  78. package/dist/index.js +26 -20
  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 +2 -2
  99. package/dist/query/client.js +4 -4
  100. package/dist/query/types.d.ts +6 -41
  101. package/dist/query/types.js +2 -2
  102. package/dist/react/AbloProvider.d.ts +6 -8
  103. package/dist/react/AbloProvider.js +5 -7
  104. package/dist/react/context.d.ts +1 -1
  105. package/dist/react/context.js +1 -1
  106. package/dist/react/index.d.ts +5 -5
  107. package/dist/react/index.js +3 -3
  108. package/dist/react/internalContext.d.ts +1 -1
  109. package/dist/react/useAblo.d.ts +3 -3
  110. package/dist/react/useAblo.js +1 -1
  111. package/dist/react/useCurrentUserId.js +1 -1
  112. package/dist/react/useErrorListener.js +1 -1
  113. package/dist/react/useMutationFailureListener.d.ts +2 -2
  114. package/dist/react/useMutationFailureListener.js +1 -1
  115. package/dist/react/useMutators.d.ts +3 -3
  116. package/dist/react/useMutators.js +3 -3
  117. package/dist/react/useUndoScope.d.ts +5 -5
  118. package/dist/react/useUndoScope.js +1 -1
  119. package/dist/schema/coordination.d.ts +69 -10
  120. package/dist/schema/coordination.js +86 -9
  121. package/dist/schema/ddl.js +2 -2
  122. package/dist/schema/diff.d.ts +1 -1
  123. package/dist/schema/generate.js +1 -1
  124. package/dist/schema/index.d.ts +10 -10
  125. package/dist/schema/index.js +18 -18
  126. package/dist/schema/queries.d.ts +27 -27
  127. package/dist/schema/queries.js +23 -23
  128. package/dist/schema/select.d.ts +3 -3
  129. package/dist/schema/select.js +3 -3
  130. package/dist/schema/serialize.d.ts +15 -6
  131. package/dist/schema/serialize.js +17 -3
  132. package/dist/schema/sugar.d.ts +6 -7
  133. package/dist/schema/sugar.js +9 -12
  134. package/dist/schema/syncDeltaRow.d.ts +4 -152
  135. package/dist/schema/syncDeltaRow.js +4 -105
  136. package/dist/server/adapter.d.ts +18 -1
  137. package/dist/server/commit.d.ts +10 -16
  138. package/dist/server/index.d.ts +1 -1
  139. package/dist/server/index.js +1 -1
  140. package/dist/server/readConfig.d.ts +1 -1
  141. package/dist/source/adapters/drizzle.d.ts +1 -1
  142. package/dist/source/adapters/drizzle.js +2 -2
  143. package/dist/source/adapters/kysely.d.ts +1 -1
  144. package/dist/source/adapters/kysely.js +1 -1
  145. package/dist/source/adapters/kyselyMutationCore.d.ts +1 -1
  146. package/dist/source/adapters/kyselyMutationCore.js +2 -2
  147. package/dist/source/adapters/memory.js +1 -1
  148. package/dist/source/adapters/prisma.d.ts +8 -3
  149. package/dist/source/adapters/prisma.js +1 -1
  150. package/dist/source/connector.js +1 -1
  151. package/dist/source/connectorProtocol.d.ts +2 -8
  152. package/dist/source/connectorProtocol.js +3 -2
  153. package/dist/source/contract.d.ts +29 -17
  154. package/dist/source/contract.js +27 -22
  155. package/dist/source/factory.d.ts +1 -1
  156. package/dist/source/footprint.d.ts +111 -0
  157. package/dist/source/footprint.js +0 -0
  158. package/dist/source/idempotency.js +2 -2
  159. package/dist/source/index.d.ts +1 -0
  160. package/dist/source/index.js +3 -0
  161. package/dist/source/next.d.ts +1 -1
  162. package/dist/source/signing.d.ts +9 -2
  163. package/dist/source/signing.js +4 -1
  164. package/dist/source/types.d.ts +6 -4
  165. package/dist/source/types.js +1 -1
  166. package/dist/stores/ObjectStore.d.ts +1 -1
  167. package/dist/stores/SyncActionStore.d.ts +1 -1
  168. package/dist/stores/SyncActionStore.js +2 -10
  169. package/dist/stores/syncAction.d.ts +26 -0
  170. package/dist/stores/syncAction.js +16 -0
  171. package/dist/surface.d.ts +3 -3
  172. package/dist/surface.js +6 -4
  173. package/dist/sync/BootstrapFetcher.d.ts +123 -6
  174. package/dist/sync/BootstrapFetcher.js +492 -66
  175. package/dist/sync/ConnectionManager.d.ts +6 -198
  176. package/dist/sync/ConnectionManager.js +6 -677
  177. package/dist/sync/OnDemandLoader.d.ts +2 -2
  178. package/dist/sync/OnDemandLoader.js +60 -21
  179. package/dist/sync/SubscriptionManager.d.ts +13 -2
  180. package/dist/sync/SubscriptionManager.js +23 -5
  181. package/dist/sync/SyncWebSocket.d.ts +27 -510
  182. package/dist/sync/SyncWebSocket.js +76 -954
  183. package/dist/sync/awaitClaimGrant.d.ts +4 -44
  184. package/dist/sync/awaitClaimGrant.js +4 -109
  185. package/dist/sync/commitFrames.d.ts +6 -40
  186. package/dist/sync/commitFrames.js +6 -97
  187. package/dist/sync/contextPorts.d.ts +18 -0
  188. package/dist/sync/contextPorts.js +31 -0
  189. package/dist/sync/createClaimStream.d.ts +5 -49
  190. package/dist/sync/createClaimStream.js +5 -469
  191. package/dist/sync/createPresenceStream.d.ts +26 -4
  192. package/dist/sync/createPresenceStream.js +28 -20
  193. package/dist/sync/createSnapshot.d.ts +2 -2
  194. package/dist/sync/createSnapshot.js +1 -1
  195. package/dist/sync/credentialLifecycle.d.ts +5 -173
  196. package/dist/sync/credentialLifecycle.js +5 -320
  197. package/dist/sync/deltaPipeline.d.ts +1 -1
  198. package/dist/sync/participants.d.ts +5 -4
  199. package/dist/sync/participants.js +29 -22
  200. package/dist/sync/schemaDrift.d.ts +55 -0
  201. package/dist/sync/schemaDrift.js +53 -0
  202. package/dist/sync/schemas.d.ts +21 -32
  203. package/dist/sync/schemas.js +26 -17
  204. package/dist/sync/syncPlan.d.ts +3 -3
  205. package/dist/sync/wsFrameHandlers.d.ts +6 -114
  206. package/dist/sync/wsFrameHandlers.js +6 -392
  207. package/dist/testing/fixtures/bootstrap.d.ts +1 -1
  208. package/dist/testing/fixtures/deltas.d.ts +1 -1
  209. package/dist/testing/fixtures/httpResponses.d.ts +70 -0
  210. package/dist/testing/fixtures/httpResponses.js +90 -0
  211. package/dist/testing/fixtures/models.js +1 -1
  212. package/dist/testing/helpers/wait.js +1 -1
  213. package/dist/testing/mocks/MockMutationExecutor.d.ts +2 -2
  214. package/dist/testing/mocks/MockMutationExecutor.js +8 -14
  215. package/dist/testing/mocks/MockSyncContext.d.ts +11 -11
  216. package/dist/testing/mocks/MockSyncContext.js +10 -9
  217. package/dist/testing/mocks/MockSyncStore.js +1 -1
  218. package/dist/testing/mocks/MockWebSocket.d.ts +2 -2
  219. package/dist/transaction/ablo.d.ts +88 -0
  220. package/dist/transaction/ablo.js +33 -0
  221. package/dist/{client/auth.d.ts → transaction/auth/apiKey.d.ts} +43 -8
  222. package/dist/{client/auth.js → transaction/auth/apiKey.js} +19 -0
  223. package/dist/transaction/auth/bootstrapScope.d.ts +15 -0
  224. package/dist/transaction/auth/bootstrapScope.js +1 -0
  225. package/dist/transaction/auth/capability.d.ts +177 -0
  226. package/dist/transaction/auth/capability.js +199 -0
  227. package/dist/{auth → transaction/auth}/credentialSource.d.ts +8 -1
  228. package/dist/{client → transaction/auth}/identity.d.ts +8 -7
  229. package/dist/{client → transaction/auth}/identity.js +1 -1
  230. package/dist/transaction/auth/index.d.ts +162 -0
  231. package/dist/transaction/auth/index.js +304 -0
  232. package/dist/{auth → transaction/auth}/schemas.d.ts +1 -1
  233. package/dist/{auth → transaction/auth}/schemas.js +13 -13
  234. package/dist/{client → transaction/auth}/sessionMint.d.ts +8 -8
  235. package/dist/{client → transaction/auth}/sessionMint.js +4 -7
  236. package/dist/transaction/coordination/awaitClaimGrant.d.ts +49 -0
  237. package/dist/transaction/coordination/awaitClaimGrant.js +112 -0
  238. package/dist/transaction/coordination/claimMeta.d.ts +49 -0
  239. package/dist/transaction/coordination/claimMeta.js +52 -0
  240. package/dist/transaction/coordination/createClaimStream.d.ts +64 -0
  241. package/dist/transaction/coordination/createClaimStream.js +475 -0
  242. package/dist/transaction/coordination/events.d.ts +74 -0
  243. package/dist/transaction/coordination/events.js +7 -0
  244. package/dist/transaction/coordination/index.d.ts +19 -0
  245. package/dist/transaction/coordination/index.js +44 -0
  246. package/dist/transaction/coordination/locator.d.ts +83 -0
  247. package/dist/transaction/coordination/locator.js +82 -0
  248. package/dist/transaction/coordination/schema.d.ts +1473 -0
  249. package/dist/{coordination → transaction/coordination}/schema.js +490 -55
  250. package/dist/transaction/coordination/targetConflict.d.ts +2 -0
  251. package/dist/transaction/coordination/targetConflict.js +103 -0
  252. package/dist/{coordination → transaction/coordination}/trace.d.ts +7 -18
  253. package/dist/{coordination → transaction/coordination}/trace.js +18 -25
  254. package/dist/transaction/durableWrites.d.ts +62 -0
  255. package/dist/{client → transaction}/durableWrites.js +28 -3
  256. package/dist/transaction/environment.d.ts +105 -0
  257. package/dist/transaction/environment.js +108 -0
  258. package/dist/{errorCodes.d.ts → transaction/errorCodes.d.ts} +11 -11
  259. package/dist/{errorCodes.js → transaction/errorCodes.js} +35 -12
  260. package/dist/{errors.d.ts → transaction/errors.d.ts} +37 -13
  261. package/dist/{errors.js → transaction/errors.js} +85 -16
  262. package/dist/transaction/index.d.ts +20 -0
  263. package/dist/transaction/index.js +20 -0
  264. package/dist/transaction/keys/index.d.ts +87 -0
  265. package/dist/transaction/keys/index.js +207 -0
  266. package/dist/transaction/log/syncDeltaRow.d.ts +158 -0
  267. package/dist/transaction/log/syncDeltaRow.js +95 -0
  268. package/dist/{sync/syncPosition.d.ts → transaction/logPosition.d.ts} +22 -8
  269. package/dist/{sync/syncPosition.js → transaction/logPosition.js} +15 -6
  270. package/dist/transaction/logger.d.ts +16 -0
  271. package/dist/transaction/logger.js +7 -0
  272. package/dist/transaction/observability.d.ts +53 -0
  273. package/dist/transaction/observability.js +19 -0
  274. package/dist/transaction/plugin.d.ts +192 -0
  275. package/dist/transaction/plugin.js +87 -0
  276. package/dist/{policy → transaction/policy}/types.d.ts +3 -3
  277. package/dist/{policy → transaction/policy}/types.js +2 -0
  278. package/dist/transaction/resources/httpResources.d.ts +266 -0
  279. package/dist/transaction/resources/httpResources.js +7 -0
  280. package/dist/transaction/resources/modelOperations.d.ts +319 -0
  281. package/dist/transaction/resources/modelOperations.js +12 -0
  282. package/dist/transaction/resources/mutationOptions.d.ts +66 -0
  283. package/dist/transaction/resources/mutationOptions.js +9 -0
  284. package/dist/transaction/resources/where.d.ts +85 -0
  285. package/dist/transaction/resources/where.js +70 -0
  286. package/dist/{client → transaction/resources}/writeOptionsSchema.d.ts +2 -6
  287. package/dist/{client → transaction/resources}/writeOptionsSchema.js +9 -5
  288. package/dist/{schema → transaction/schema}/field.d.ts +5 -5
  289. package/dist/{schema → transaction/schema}/field.js +5 -5
  290. package/dist/transaction/schema/loadStrategy.d.ts +45 -0
  291. package/dist/transaction/schema/loadStrategy.js +46 -0
  292. package/dist/{schema → transaction/schema}/model.d.ts +50 -35
  293. package/dist/{schema → transaction/schema}/model.js +30 -20
  294. package/dist/transaction/schema/openapi.d.ts +57 -0
  295. package/dist/transaction/schema/openapi.js +340 -0
  296. package/dist/{schema → transaction/schema}/relation.d.ts +14 -14
  297. package/dist/{schema → transaction/schema}/relation.js +7 -7
  298. package/dist/{schema → transaction/schema}/residency.d.ts +0 -9
  299. package/dist/{schema → transaction/schema}/residency.js +0 -5
  300. package/dist/{schema → transaction/schema}/roles.d.ts +5 -5
  301. package/dist/{schema → transaction/schema}/roles.js +5 -5
  302. package/dist/{schema → transaction/schema}/schema.d.ts +12 -10
  303. package/dist/{schema → transaction/schema}/schema.js +4 -3
  304. package/dist/{schema → transaction/schema}/tenancy.d.ts +1 -1
  305. package/dist/{schema → transaction/schema}/tenancy.js +7 -4
  306. package/dist/transaction/transactionLayer.d.ts +82 -0
  307. package/dist/transaction/transactionLayer.js +24 -0
  308. package/dist/{transactions → transaction/transactions/settlement}/commitEnvelope.d.ts +4 -5
  309. package/dist/{transactions → transaction/transactions/settlement}/commitEnvelope.js +9 -13
  310. package/dist/{transactions → transaction/transactions/settlement}/httpCommitEnvelope.d.ts +9 -2
  311. package/dist/{transactions → transaction/transactions/settlement}/httpCommitEnvelope.js +5 -9
  312. package/dist/{transactions/durableWriteStore.d.ts → transaction/transactions/settlement/pendingWrite.d.ts} +10 -36
  313. package/dist/transaction/transactions/settlement/pendingWrite.js +20 -0
  314. package/dist/transaction/transport/commitFrames.d.ts +90 -0
  315. package/dist/transaction/transport/commitFrames.js +134 -0
  316. package/dist/transaction/transport/connectionManager.d.ts +215 -0
  317. package/dist/transaction/transport/connectionManager.js +673 -0
  318. package/dist/transaction/transport/credentialLifecycle.d.ts +177 -0
  319. package/dist/transaction/transport/credentialLifecycle.js +324 -0
  320. package/dist/{sync → transaction/transport}/heartbeat.d.ts +3 -1
  321. package/dist/{sync → transaction/transport}/heartbeat.js +6 -4
  322. package/dist/{client → transaction/transport}/httpClient.d.ts +59 -16
  323. package/dist/{client → transaction/transport}/httpClient.js +5 -5
  324. package/dist/transaction/transport/httpOptions.d.ts +33 -0
  325. package/dist/transaction/transport/httpOptions.js +12 -0
  326. package/dist/{client → transaction/transport}/httpTransport.js +171 -85
  327. package/dist/{sync/NetworkProbe.d.ts → transaction/transport/networkProbe.d.ts} +7 -4
  328. package/dist/{sync/NetworkProbe.js → transaction/transport/networkProbe.js} +14 -13
  329. package/dist/transaction/transport/wsFrameHandlers.d.ts +128 -0
  330. package/dist/transaction/transport/wsFrameHandlers.js +429 -0
  331. package/dist/transaction/transport/wsTransport.d.ts +576 -0
  332. package/dist/transaction/transport/wsTransport.js +1017 -0
  333. package/dist/transaction/types/assertExact.d.ts +17 -0
  334. package/dist/transaction/types/assertExact.js +1 -0
  335. package/dist/{types → transaction/types}/global.d.ts +17 -2
  336. package/dist/{types → transaction/types}/global.js +2 -1
  337. package/dist/{types → transaction/types}/index.d.ts +14 -46
  338. package/dist/{types → transaction/types}/index.js +7 -16
  339. package/dist/{types → transaction/types}/streams.d.ts +63 -45
  340. package/dist/{utils → transaction/utils}/json.d.ts +18 -0
  341. package/dist/transaction/utils/json.js +276 -0
  342. package/dist/transaction/wire/accountResponses.d.ts +351 -0
  343. package/dist/transaction/wire/accountResponses.js +255 -0
  344. package/dist/transaction/wire/auth.d.ts +49 -0
  345. package/dist/transaction/wire/auth.js +57 -0
  346. package/dist/transaction/wire/claimEvent.d.ts +76 -0
  347. package/dist/transaction/wire/claimEvent.js +73 -0
  348. package/dist/transaction/wire/claims.d.ts +463 -0
  349. package/dist/transaction/wire/claims.js +229 -0
  350. package/dist/{wire → transaction/wire}/commit.d.ts +125 -193
  351. package/dist/{wire → transaction/wire}/commit.js +68 -47
  352. package/dist/{wire → transaction/wire}/delta.d.ts +66 -17
  353. package/dist/{wire → transaction/wire}/delta.js +37 -13
  354. package/dist/transaction/wire/errorEnvelope.d.ts +72 -0
  355. package/dist/{wire → transaction/wire}/errorEnvelope.js +36 -5
  356. package/dist/transaction/wire/feedCursor.d.ts +60 -0
  357. package/dist/transaction/wire/feedCursor.js +82 -0
  358. package/dist/transaction/wire/feedEvent.d.ts +177 -0
  359. package/dist/transaction/wire/feedEvent.js +39 -0
  360. package/dist/transaction/wire/frames.d.ts +194 -0
  361. package/dist/transaction/wire/frames.js +50 -0
  362. package/dist/transaction/wire/inboundFrames.d.ts +552 -0
  363. package/dist/transaction/wire/inboundFrames.js +116 -0
  364. package/dist/transaction/wire/index.d.ts +50 -0
  365. package/dist/transaction/wire/index.js +74 -0
  366. package/dist/{wire → transaction/wire}/listEnvelope.d.ts +13 -14
  367. package/dist/transaction/wire/listEnvelope.js +42 -0
  368. package/dist/transaction/wire/modelResponses.d.ts +85 -0
  369. package/dist/transaction/wire/modelResponses.js +43 -0
  370. package/dist/transactions/{TransactionQueue.d.ts → mutations/MutationQueue.d.ts} +79 -38
  371. package/dist/transactions/{TransactionQueue.js → mutations/MutationQueue.js} +110 -59
  372. package/dist/transactions/{TransactionStore.d.ts → mutations/MutationStore.d.ts} +8 -8
  373. package/dist/transactions/{TransactionStore.js → mutations/MutationStore.js} +2 -2
  374. package/dist/transactions/{coalesceRules.d.ts → mutations/coalesceRules.d.ts} +10 -10
  375. package/dist/transactions/{coalesceRules.js → mutations/coalesceRules.js} +1 -1
  376. package/dist/transactions/mutations/commitLatency.d.ts +52 -0
  377. package/dist/transactions/mutations/commitLatency.js +130 -0
  378. package/dist/transactions/{commitOutboxStore.d.ts → mutations/commitOutboxStore.d.ts} +1 -5
  379. package/dist/transactions/{commitOutboxStore.js → mutations/commitOutboxStore.js} +1 -1
  380. package/dist/transactions/{commitPayload.d.ts → mutations/commitPayload.d.ts} +16 -15
  381. package/dist/transactions/{commitPayload.js → mutations/commitPayload.js} +12 -12
  382. package/dist/transactions/{deltaConfirmation.d.ts → mutations/deltaConfirmation.d.ts} +11 -11
  383. package/dist/transactions/{deltaConfirmation.js → mutations/deltaConfirmation.js} +7 -7
  384. package/dist/transactions/mutations/durableWriteStore.d.ts +14 -0
  385. package/dist/transactions/mutations/durableWriteStore.js +12 -0
  386. package/dist/transactions/{optimisticApply.d.ts → mutations/optimisticApply.d.ts} +7 -7
  387. package/dist/transactions/{replayValidation.d.ts → mutations/replayValidation.d.ts} +3 -3
  388. package/dist/transactions/{replayValidation.js → mutations/replayValidation.js} +4 -3
  389. package/dist/utils/mobxSetup.d.ts +1 -1
  390. package/dist/utils/mobxSetup.js +5 -2
  391. package/dist/webhooks/events.d.ts +2 -2
  392. package/dist/wire/index.d.ts +1 -34
  393. package/dist/wire/index.js +8 -49
  394. package/docs/agent-messaging.md +3 -3
  395. package/docs/agents.md +19 -12
  396. package/docs/api-keys.md +8 -4
  397. package/docs/api.md +22 -18
  398. package/docs/audit.md +2 -0
  399. package/docs/cli.md +31 -3
  400. package/docs/client-behavior.md +8 -6
  401. package/docs/concurrency-convention.md +30 -24
  402. package/docs/coordination.md +48 -38
  403. package/docs/data-sources.md +3 -1
  404. package/docs/debugging.md +5 -3
  405. package/docs/deployment.md +267 -0
  406. package/docs/examples/agent-human.md +49 -42
  407. package/docs/examples/ai-sdk-tool.md +69 -44
  408. package/docs/examples/existing-python-backend.md +8 -6
  409. package/docs/examples/nextjs.md +129 -47
  410. package/docs/examples/scoped-agent.md +45 -44
  411. package/docs/examples/server-agent.md +46 -26
  412. package/docs/groups.md +32 -29
  413. package/docs/guarantees.md +4 -2
  414. package/docs/how-it-works.md +9 -7
  415. package/docs/idempotency.md +126 -0
  416. package/docs/identity.md +58 -54
  417. package/docs/index.md +172 -86
  418. package/docs/integration-guide.md +17 -16
  419. package/docs/interaction-model.md +6 -4
  420. package/docs/mcp.md +41 -16
  421. package/docs/migration.md +63 -5
  422. package/docs/operating-on-your-database.md +3 -1
  423. package/docs/projects.md +2 -0
  424. package/docs/quickstart.md +22 -5
  425. package/docs/react.md +12 -10
  426. package/docs/schema-contract.md +5 -3
  427. package/docs/session-settings.md +108 -0
  428. package/docs/sessions.md +3 -1
  429. package/docs/webhooks.md +3 -1
  430. package/llms.txt +47 -17
  431. package/package.json +10 -8
  432. package/dist/agent/Agent.d.ts +0 -366
  433. package/dist/agent/Agent.js +0 -514
  434. package/dist/agent/index.d.ts +0 -115
  435. package/dist/agent/index.js +0 -128
  436. package/dist/agent/session.d.ts +0 -93
  437. package/dist/agent/session.js +0 -149
  438. package/dist/agent/types.d.ts +0 -68
  439. package/dist/agent/types.js +0 -9
  440. package/dist/client/durableWrites.d.ts +0 -21
  441. package/dist/coordination/schema.d.ts +0 -722
  442. package/dist/schema/openapi.d.ts +0 -29
  443. package/dist/schema/openapi.js +0 -124
  444. package/dist/transactions/durableWriteStore.js +0 -30
  445. package/dist/utils/json.js +0 -88
  446. package/dist/wire/errorEnvelope.d.ts +0 -55
  447. package/dist/wire/frames.d.ts +0 -197
  448. package/dist/wire/frames.js +0 -49
  449. package/dist/wire/listEnvelope.js +0 -18
  450. /package/dist/{client → transaction/auth}/credentialEndpoint.d.ts +0 -0
  451. /package/dist/{client → transaction/auth}/credentialEndpoint.js +0 -0
  452. /package/dist/{auth → transaction/auth}/credentialPolicy.d.ts +0 -0
  453. /package/dist/{auth → transaction/auth}/credentialPolicy.js +0 -0
  454. /package/dist/{auth → transaction/auth}/credentialSource.js +0 -0
  455. /package/dist/{client → transaction/auth}/hostedEndpoints.d.ts +0 -0
  456. /package/dist/{client → transaction/auth}/hostedEndpoints.js +0 -0
  457. /package/dist/{client → transaction/coordination}/claimHeartbeatLoop.d.ts +0 -0
  458. /package/dist/{client → transaction/coordination}/claimHeartbeatLoop.js +0 -0
  459. /package/dist/{client → transaction}/persistence.d.ts +0 -0
  460. /package/dist/{client → transaction}/persistence.js +0 -0
  461. /package/dist/{client → transaction/resources}/functionalUpdate.d.ts +0 -0
  462. /package/dist/{client → transaction/resources}/functionalUpdate.js +0 -0
  463. /package/dist/{transactions → transaction/transactions/settlement}/idempotencyKey.d.ts +0 -0
  464. /package/dist/{transactions → transaction/transactions/settlement}/idempotencyKey.js +0 -0
  465. /package/dist/{client → transaction/transport}/httpTransport.d.ts +0 -0
  466. /package/dist/{types → transaction/types}/modelData.d.ts +0 -0
  467. /package/dist/{types → transaction/types}/modelData.js +0 -0
  468. /package/dist/{types → transaction/types}/participant.d.ts +0 -0
  469. /package/dist/{types → transaction/types}/participant.js +0 -0
  470. /package/dist/{types → transaction/types}/streams.js +0 -0
  471. /package/dist/{utils → transaction/utils}/asyncIterator.d.ts +0 -0
  472. /package/dist/{utils → transaction/utils}/asyncIterator.js +0 -0
  473. /package/dist/{utils → transaction/utils}/duration.d.ts +0 -0
  474. /package/dist/{utils → transaction/utils}/duration.js +0 -0
  475. /package/dist/{wire → transaction/wire}/bootstrapReason.d.ts +0 -0
  476. /package/dist/{wire → transaction/wire}/bootstrapReason.js +0 -0
  477. /package/dist/{wire → transaction/wire}/protocol.d.ts +0 -0
  478. /package/dist/{wire → transaction/wire}/protocol.js +0 -0
  479. /package/dist/{wire → transaction/wire}/protocolVersion.d.ts +0 -0
  480. /package/dist/{wire → transaction/wire}/protocolVersion.js +0 -0
  481. /package/dist/transactions/{UnconfirmedWrites.d.ts → mutations/UnconfirmedWrites.d.ts} +0 -0
  482. /package/dist/transactions/{UnconfirmedWrites.js → mutations/UnconfirmedWrites.js} +0 -0
  483. /package/dist/transactions/{optimisticApply.js → mutations/optimisticApply.js} +0 -0
@@ -0,0 +1,55 @@
1
+ /**
2
+ * The semantic schema-drift classifier — the question that matters is not
3
+ * "did the schema change at all?" (one whole-schema hash answers that, and
4
+ * welds every client to every push) but "does THIS client use anything that
5
+ * changed?". This module compares only the models the client declares against
6
+ * the server's per-model surface (`GET /api/schema`), so:
7
+ *
8
+ * - a purely additive server change (models this build never references) is
9
+ * SILENCE — deployed clients don't care what they don't use;
10
+ * - a model this build declares that the server doesn't have is named, with
11
+ * the push as the fix;
12
+ * - a shared model whose content differs is named, so "which field moved"
13
+ * is one `ablo status` away instead of a hash-guessing game.
14
+ *
15
+ * Pure and transport-free; the BootstrapFetcher owns fetching the surface.
16
+ */
17
+ /** One model as the server's schema read-back reports it. */
18
+ export interface ServerSchemaModel {
19
+ readonly key: string;
20
+ /** Per-model content hash; absent on servers older than this check. */
21
+ readonly hash?: string;
22
+ }
23
+ export type SchemaDriftFinding =
24
+ /** Every model this client declares exists server-side with matching content
25
+ * (the server may know more — that's an additive lead, not drift). */
26
+ {
27
+ readonly kind: 'aligned';
28
+ }
29
+ /** Models this build declares that the server has no idea about — writes to
30
+ * them will be declined until the schema is pushed. */
31
+ | {
32
+ readonly kind: 'unpushed';
33
+ readonly models: readonly string[];
34
+ }
35
+ /** Shared models whose content differs between this build and the server
36
+ * (may also carry unpushed models found alongside). */
37
+ | {
38
+ readonly kind: 'changed';
39
+ readonly models: readonly string[];
40
+ readonly unpushed: readonly string[];
41
+ }
42
+ /** The server surface carries no per-model hashes (older server) — the
43
+ * caller falls back to the whole-hash comparison. */
44
+ | {
45
+ readonly kind: 'unknown';
46
+ };
47
+ export declare function classifySchemaDrift(clientModels: Readonly<Record<string, string>>, serverModels: readonly ServerSchemaModel[]): SchemaDriftFinding;
48
+ /**
49
+ * The warning for a real, named divergence. Calm and specific: which models,
50
+ * what that means for this client, and the one next step. Never speaks about
51
+ * hashes — the point of the semantic check is that nobody has to compare hex.
52
+ */
53
+ export declare function describeSchemaDrift(finding: Extract<SchemaDriftFinding, {
54
+ kind: 'unpushed' | 'changed';
55
+ }>, serverLabel: string): string;
@@ -0,0 +1,53 @@
1
+ /**
2
+ * The semantic schema-drift classifier — the question that matters is not
3
+ * "did the schema change at all?" (one whole-schema hash answers that, and
4
+ * welds every client to every push) but "does THIS client use anything that
5
+ * changed?". This module compares only the models the client declares against
6
+ * the server's per-model surface (`GET /api/schema`), so:
7
+ *
8
+ * - a purely additive server change (models this build never references) is
9
+ * SILENCE — deployed clients don't care what they don't use;
10
+ * - a model this build declares that the server doesn't have is named, with
11
+ * the push as the fix;
12
+ * - a shared model whose content differs is named, so "which field moved"
13
+ * is one `ablo status` away instead of a hash-guessing game.
14
+ *
15
+ * Pure and transport-free; the BootstrapFetcher owns fetching the surface.
16
+ */
17
+ export function classifySchemaDrift(clientModels, serverModels) {
18
+ if (serverModels.length > 0 && serverModels.every((m) => !m.hash)) {
19
+ return { kind: 'unknown' };
20
+ }
21
+ const server = new Map(serverModels.map((m) => [m.key, m.hash]));
22
+ const unpushed = [];
23
+ const changed = [];
24
+ for (const [key, hash] of Object.entries(clientModels)) {
25
+ const serverHash = server.get(key);
26
+ if (serverHash === undefined)
27
+ unpushed.push(key);
28
+ else if (serverHash !== hash)
29
+ changed.push(key);
30
+ }
31
+ if (changed.length > 0)
32
+ return { kind: 'changed', models: changed, unpushed };
33
+ if (unpushed.length > 0)
34
+ return { kind: 'unpushed', models: unpushed };
35
+ return { kind: 'aligned' };
36
+ }
37
+ /**
38
+ * The warning for a real, named divergence. Calm and specific: which models,
39
+ * what that means for this client, and the one next step. Never speaks about
40
+ * hashes — the point of the semantic check is that nobody has to compare hex.
41
+ */
42
+ export function describeSchemaDrift(finding, serverLabel) {
43
+ if (finding.kind === 'unpushed') {
44
+ return (`Ablo: This build declares models the server at ${serverLabel} doesn't have yet ` +
45
+ `(${finding.models.join(', ')}). Writes to them will be declined until the schema is ` +
46
+ `pushed — run \`ablo push\` (and \`ablo status\` to confirm it targets this server).`);
47
+ }
48
+ const alsoUnpushed = finding.unpushed.length > 0 ? ` (${finding.unpushed.join(', ')} not pushed yet)` : '';
49
+ return (`Ablo: These models differ between this build and the server at ${serverLabel}: ` +
50
+ `${finding.models.join(', ')}${alsoUnpushed}. Reads and writes touching what changed may be ` +
51
+ `declined — \`ablo status\` shows the deployed shape; pushing your schema or deploying a ` +
52
+ `current build aligns them.`);
53
+ }
@@ -2,22 +2,23 @@
2
2
  * Zod validation schemas for sync engine server responses.
3
3
  *
4
4
  * Validates data at the fetch boundary before it enters the sync engine.
5
- * Uses .passthrough() so the server can add fields without breaking clients.
5
+ * Unknown keys are kept, so a server that adds a field does not break a client
6
+ * that predates it.
6
7
  */
7
8
  import { z } from 'zod';
9
+ /**
10
+ * A delta as it arrives in a bootstrap payload.
11
+ *
12
+ * The bootstrap routes return the same rows the broadcast path does, so the
13
+ * fields are taken from {@link syncDeltaWireCoreSchema} rather than restated
14
+ * here — a delta is one shape, and this is the reader for it, not a second
15
+ * definition of it. Unknown keys are kept, because the server sends its own
16
+ * wider projection (attribution, `projectId`) that later stages may read.
17
+ */
8
18
  export declare const ServerDeltaSchema: z.ZodObject<{
9
19
  id: z.ZodNumber;
10
- operation: z.ZodOptional<z.ZodEnum<{
11
- I: "I";
12
- U: "U";
13
- D: "D";
14
- A: "A";
15
- V: "V";
16
- C: "C";
17
- G: "G";
18
- S: "S";
19
- }>>;
20
- action: z.ZodOptional<z.ZodEnum<{
20
+ data: z.ZodNullable<z.ZodUnion<readonly [z.ZodRecord<z.ZodString, z.ZodUnknown>, z.ZodString]>>;
21
+ actionType: z.ZodEnum<{
21
22
  I: "I";
22
23
  U: "U";
23
24
  D: "D";
@@ -26,33 +27,22 @@ export declare const ServerDeltaSchema: z.ZodObject<{
26
27
  C: "C";
27
28
  G: "G";
28
29
  S: "S";
29
- }>>;
30
+ }>;
30
31
  modelName: z.ZodString;
31
- entityId: z.ZodOptional<z.ZodString>;
32
- modelId: z.ZodOptional<z.ZodString>;
33
- data: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
32
+ modelId: z.ZodString;
34
33
  }, z.core.$loose>;
35
34
  export type ValidatedServerDelta = z.infer<typeof ServerDeltaSchema>;
36
35
  export declare const BootstrapResponseSchema: z.ZodObject<{
37
36
  type: z.ZodEnum<{
38
- partial: "partial";
39
37
  full: "full";
38
+ partial: "partial";
40
39
  }>;
41
40
  lastSyncId: z.ZodNumber;
42
41
  models: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodPipe<z.ZodUnion<readonly [z.ZodArray<z.ZodUnknown>, z.ZodString, z.ZodNull]>, z.ZodTransform<unknown[], string | unknown[] | null>>>>;
43
42
  deltas: z.ZodOptional<z.ZodArray<z.ZodObject<{
44
43
  id: z.ZodNumber;
45
- operation: z.ZodOptional<z.ZodEnum<{
46
- I: "I";
47
- U: "U";
48
- D: "D";
49
- A: "A";
50
- V: "V";
51
- C: "C";
52
- G: "G";
53
- S: "S";
54
- }>>;
55
- action: z.ZodOptional<z.ZodEnum<{
44
+ data: z.ZodNullable<z.ZodUnion<readonly [z.ZodRecord<z.ZodString, z.ZodUnknown>, z.ZodString]>>;
45
+ actionType: z.ZodEnum<{
56
46
  I: "I";
57
47
  U: "U";
58
48
  D: "D";
@@ -61,16 +51,15 @@ export declare const BootstrapResponseSchema: z.ZodObject<{
61
51
  C: "C";
62
52
  G: "G";
63
53
  S: "S";
64
- }>>;
54
+ }>;
65
55
  modelName: z.ZodString;
66
- entityId: z.ZodOptional<z.ZodString>;
67
- modelId: z.ZodOptional<z.ZodString>;
68
- data: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
56
+ modelId: z.ZodString;
69
57
  }, z.core.$loose>>>;
70
58
  deltaCount: z.ZodOptional<z.ZodNumber>;
71
59
  failedModels: z.ZodOptional<z.ZodArray<z.ZodString>>;
72
60
  timestamp: z.ZodDefault<z.ZodNumber>;
73
61
  schemaHash: z.ZodOptional<z.ZodString>;
62
+ nextCursor: z.ZodOptional<z.ZodString>;
74
63
  }, z.core.$loose>;
75
64
  export type ValidatedBootstrapResponse = z.infer<typeof BootstrapResponseSchema>;
76
65
  /**
@@ -2,27 +2,32 @@
2
2
  * Zod validation schemas for sync engine server responses.
3
3
  *
4
4
  * Validates data at the fetch boundary before it enters the sync engine.
5
- * Uses .passthrough() so the server can add fields without breaking clients.
5
+ * Unknown keys are kept, so a server that adds a field does not break a client
6
+ * that predates it.
6
7
  */
7
8
  import { z } from 'zod';
8
9
  import { getContext } from "../context.js";
9
- import { AbloValidationError } from "../errors.js";
10
- // ─── Sync Action Types ───────────────────────────────────────────────────────
11
- // The action codes a server delta can carry, matching the wire protocol's
12
- // action-type set.
13
- const SYNC_ACTION_VALUES = ['I', 'U', 'D', 'A', 'C', 'G', 'S', 'V'];
10
+ import { AbloValidationError } from "../transaction/errors.js";
11
+ import { syncDeltaWireCoreSchema } from '../transaction/wire/delta.js';
14
12
  // ─── Server Delta Schema ─────────────────────────────────────────────────────
15
- export const ServerDeltaSchema = z
16
- .object({
17
- id: z.number(),
18
- operation: z.enum(SYNC_ACTION_VALUES).optional(),
19
- action: z.enum(SYNC_ACTION_VALUES).optional(),
20
- modelName: z.string(),
21
- entityId: z.string().optional(),
22
- modelId: z.string().optional(),
23
- data: z.record(z.string(), z.unknown()).nullable().optional(),
13
+ /**
14
+ * A delta as it arrives in a bootstrap payload.
15
+ *
16
+ * The bootstrap routes return the same rows the broadcast path does, so the
17
+ * fields are taken from {@link syncDeltaWireCoreSchema} rather than restated
18
+ * here — a delta is one shape, and this is the reader for it, not a second
19
+ * definition of it. Unknown keys are kept, because the server sends its own
20
+ * wider projection (attribution, `projectId`) that later stages may read.
21
+ */
22
+ export const ServerDeltaSchema = syncDeltaWireCoreSchema
23
+ .pick({
24
+ id: true,
25
+ actionType: true,
26
+ modelName: true,
27
+ modelId: true,
28
+ data: true,
24
29
  })
25
- .passthrough();
30
+ .loose();
26
31
  // ─── Model Value Schema ─────────────────────────────────────────────────────
27
32
  // A model's values can arrive in more than one shape depending on how the
28
33
  // server serialized them:
@@ -60,8 +65,12 @@ export const BootstrapResponseSchema = z
60
65
  // absent when the server predates this field or the tenant has never
61
66
  // pushed a schema.
62
67
  schemaHash: z.string().optional(),
68
+ // Present when a paged single-model request stopped at its row limit
69
+ // with rows remaining: pass it back as the next page's cursor. Absent
70
+ // on the final page, on unpaged responses, and from older servers.
71
+ nextCursor: z.string().optional(),
63
72
  })
64
- .passthrough();
73
+ .loose();
65
74
  // ─── Parse Helpers ───────────────────────────────────────────────────────────
66
75
  /**
67
76
  * Validates a raw bootstrap response from the server and returns the typed
@@ -5,17 +5,17 @@
5
5
  * object pool, and the enrichment rules that attach related parents to
6
6
  * incoming rows. See {@link deriveSyncPlanFromSchema}.
7
7
  */
8
- import type { Schema } from '../schema/schema.js';
8
+ import type { Schema } from '../transaction/schema/schema.js';
9
9
  /** A foreign-key index to register on the in-memory object pool when the store is constructed. */
10
10
  export interface ForeignKeyIndexSpec {
11
11
  /**
12
12
  * The name of the child model, where the foreign-key field lives, and the
13
13
  * name the object pool indexes by. Use the wire type-name casing (for
14
- * example `'SlideLayer'`, not `'slideLayer'`), since that is the value
14
+ * example `'Block'`, not `'block'`), since that is the value
15
15
  * stamped onto reconstructed models and the key the pool looks up.
16
16
  */
17
17
  readonly modelName: string;
18
- /** The foreign-key field name on the child model, for example `'slideId'`. */
18
+ /** The foreign-key field name on the child model, for example `'sectionId'`. */
19
19
  readonly fieldName: string;
20
20
  }
21
21
  /**
@@ -1,116 +1,8 @@
1
1
  /**
2
- * Routes each inbound frame from the sync WebSocket to the handler for its
3
- * type. Handlers work against a minimal {@link WsSession} interface only
4
- * the members they actually touch, rather than the transport object itself,
5
- * which keeps this module free of an import cycle. Reading a message off the
6
- * socket, parsing its JSON, and tracking heartbeats all happen before this
7
- * point; every parsed frame then passes through {@link dispatchWsFrame}.
2
+ * Moved to the settlement core with the duplex transport (ADR 0016): the
3
+ * inbound frame dispatch is the receiving half of the wire protocol, and the
4
+ * handlers already worked against the minimal `WsSession` port rather than
5
+ * the transport object. This path re-exports it so existing importers stay
6
+ * unchanged.
8
7
  */
9
- import { type CommitAck } from './commitFrames.js';
10
- /**
11
- * In-flight `commit` request record, keyed by clientTxId in the session.
12
- * Resolved when a matching `mutation_result` frame arrives from the
13
- * server, or rejected on timeout / disconnect.
14
- */
15
- export interface PendingCommit {
16
- resolve: (value: CommitAck) => void;
17
- reject: (err: Error) => void;
18
- timeout: ReturnType<typeof setTimeout>;
19
- }
20
- /**
21
- * In-flight `claim` request record, keyed by claimId. Resolved when the
22
- * matching `claim_ack` arrives, or rejected on timeout/disconnect.
23
- */
24
- export interface PendingClaim {
25
- resolve: (value: {
26
- syncGroups: string[];
27
- ttlSeconds?: number;
28
- }) => void;
29
- reject: (err: Error) => void;
30
- timeout: ReturnType<typeof setTimeout>;
31
- }
32
- /**
33
- * An in-flight `update_subscription` request awaiting its
34
- * `subscription_ack`. The wire carries no correlation id, so requests are
35
- * matched to their acknowledgements in first-in, first-out order, the same
36
- * order the server applies them.
37
- */
38
- export interface PendingSubscription {
39
- resolve: (value: {
40
- syncGroups: string[];
41
- }) => void;
42
- reject: (err: Error) => void;
43
- timeout: ReturnType<typeof setTimeout>;
44
- }
45
- /**
46
- * A parsed inbound wire frame, straight from `JSON.parse`. The data is
47
- * untrusted: every payload is loosely typed, and each handler narrows it
48
- * defensively before use.
49
- */
50
- export interface WsInboundFrame {
51
- type?: string;
52
- payload?: unknown;
53
- /** Some delta frames carry their delta fields at the top level rather than under `payload`. */
54
- actionType?: unknown;
55
- modelName?: unknown;
56
- [key: string]: unknown;
57
- }
58
- /** Narrow arbitrary wire data to a plain string-keyed record. */
59
- export declare function isRecord(value: unknown): value is Record<string, unknown>;
60
- /**
61
- * A type guard for the parsed result of an inbound message. A frame is any
62
- * plain object whose `type`, when present, is a string. Validating the
63
- * payload itself is left to each handler; delta payloads, for example, are
64
- * checked against the canonical delta schema before they are applied.
65
- */
66
- export declare function isWsInboundFrame(value: unknown): value is WsInboundFrame;
67
- /**
68
- * The subset of the sync WebSocket that the frame handlers need. The
69
- * transport builds a single object exposing these members over its own
70
- * private state. Handlers read the fields live rather than capturing them,
71
- * so resetting a field elsewhere — such as clearing pending subscriptions
72
- * on close — never leaves a handler holding a stale value.
73
- */
74
- export interface WsSession {
75
- /** EventEmitter surface — handlers emit the typed transport events. */
76
- emit(event: string, ...args: unknown[]): boolean;
77
- /** In-flight commit acks keyed by clientTxId. */
78
- pendingMutations: Map<string, PendingCommit>;
79
- /** In-flight claim acks keyed by claimId. */
80
- pendingClaims: Map<string, PendingClaim>;
81
- /** Removes and returns the oldest in-flight `update_subscription` request. */
82
- shiftPendingSubscription(): PendingSubscription | undefined;
83
- /** Connection options subset the handlers write back (acked sync groups). */
84
- options: {
85
- syncGroups: string[];
86
- };
87
- /** Registered collaboration event keys (colon format). */
88
- collaborationEventTypes: ReadonlySet<string>;
89
- /**
90
- * Processes one inbound delta. The argument is untrusted wire data; the
91
- * transport validates it against the canonical delta schema and drops
92
- * anything malformed, so handlers here never cast.
93
- */
94
- handleDelta(delta: unknown): void;
95
- handleSyncResponse(payload: unknown): void;
96
- handleBootstrapResponse(payload: unknown): void;
97
- handlePresenceUpdate(message: {
98
- payload?: unknown;
99
- [k: string]: unknown;
100
- }): void;
101
- }
102
- export type WsFrameHandler = (session: WsSession, message: WsInboundFrame) => void;
103
- /**
104
- * Maps each frame type to its handler. Every named server frame this
105
- * package understands is dispatched from this table; anything else falls
106
- * through to the collaboration-event and unknown-type path in
107
- * {@link dispatchWsFrame}.
108
- */
109
- export declare const wsFrameHandlers: Record<string, WsFrameHandler>;
110
- /**
111
- * Routes one parsed inbound frame to its handler. Keepalive frames are
112
- * ignored, a missing `type` is treated as a bare delta, and any unknown
113
- * type falls through to the collaboration-event map, whose wire names use
114
- * underscores and whose event keys use colons.
115
- */
116
- export declare function dispatchWsFrame(session: WsSession, message: WsInboundFrame): void;
8
+ export { isRecord, readWsInboundFrame, wsFrameHandlers, dispatchWsFrame, type PendingCommit, type PendingClaim, type PendingSubscription, type WsInboundFrame, type WsSession, type WsFrameHandler, } from '../transaction/transport/wsFrameHandlers.js';