@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
package/dist/index.d.ts CHANGED
@@ -33,7 +33,7 @@
33
33
  * that consult the local cache first and fall back to the network, de-duplicating
34
34
  * concurrent requests for the same row. They are the default, and the right
35
35
  * choice for stateless callers whose local graph starts empty.
36
- * `ablo.<model>.get(id)`, `.getAll(...)`, and `.getCount(...)` are synchronous
36
+ * `ablo.<model>.local.retrieve(id)`, `.local.list(...)`, and `.local.count(...)` are synchronous
37
37
  * snapshots of the already-loaded local graph with no network round-trip — use
38
38
  * them in reactive React selectors (`useAblo((ablo) => ablo.<model>.get(id))`)
39
39
  * once the graph is warm.
@@ -51,56 +51,62 @@
51
51
  * If you don't recognize one of these, you don't need it.
52
52
  */
53
53
  export { Ablo } from './client/Ablo.js';
54
+ export { humans } from './client/humans.js';
55
+ export type { HumansSurface } from './client/humans.js';
56
+ export type { AbloCoreClient } from './client/coreClient.js';
57
+ export type { AbloPlugin, PipelineStage, TransportCapabilities } from './transaction/plugin.js';
54
58
  export type { MutationExecutor } from './interfaces/index.js';
55
- export type { ModelUpdater, ContentionOptions } from './client/functionalUpdate.js';
56
- export { DEFAULT_CONTENTION_RETRIES } from './client/functionalUpdate.js';
57
- export type { AbloReads } from './client/Ablo.js';
58
- export { type AbloHttpClientOptions, type AbloHttpClient, type HttpModelClient, } from './client/httpClient.js';
59
- export { ABLO_DEFAULT_BASE_URL, ABLO_HOSTED_API_DOMAIN, ABLO_HOSTED_HTTP_BASE_URL, normalizeAbloHostedBaseUrl, } from './client/auth.js';
60
- export type { AbloOptions, LocalCountOptions, LocalReadOptions, ModelListScope, ServerReadOptions, ModelRetrieveParams, ModelCreateParams, ModelUpdateParams, ModelDeleteParams, } from './client/Ablo.js';
59
+ export type { ModelUpdater, ContentionOptions } from './transaction/resources/functionalUpdate.js';
60
+ export { DEFAULT_CONTENTION_RETRIES } from './transaction/resources/functionalUpdate.js';
61
+ export type { AbloReads } from './client/abloClient.js';
62
+ export { type AbloHttpClientOptions, type AbloHttpClient, type HttpModelClient, } from './transaction/transport/httpClient.js';
63
+ export { ABLO_DEFAULT_BASE_URL, ABLO_HOSTED_API_DOMAIN, ABLO_HOSTED_HTTP_BASE_URL, normalizeAbloHostedBaseUrl, } from './transaction/auth/apiKey.js';
64
+ export type { AbloOptions } from './client/Ablo.js';
65
+ export type { LocalCountOptions, LocalReadOptions, ModelListScope, ServerReadOptions, ModelRetrieveParams, ModelCreateParams, ModelUpdateParams, ModelDeleteParams, } from './client/resourceTypes.js';
61
66
  /**
62
67
  * @deprecated Use `Ablo.Claim.Held`. This compatibility export remains until
63
68
  * the next major release because it was explicitly documented in 0.20.1.
64
69
  */
65
- export type { HeldClaim } from './client/Ablo.js';
70
+ export type { HeldClaim } from './client/resourceTypes.js';
66
71
  /** The resolved value of the row-free `ablo.<model>.claim(id)` overload — a
67
72
  * held lease on a key whose row Ablo does not hold (a {@link HeldClaim} with
68
73
  * no `.data`). */
69
- export type { HeldLease } from './client/Ablo.js';
70
- export type { AbloPersistence } from './client/persistence.js';
71
- export { durableWritesConfigSchema, durableWriteStoreSchema, pendingWriteSchema, } from './transactions/durableWriteStore.js';
72
- export type { DurableWritesConfig, DurableWriteStore, PendingWrite, } from './transactions/durableWriteStore.js';
73
- export type { CommitOutboxRecord, CommitOutboxStore, } from './transactions/commitOutboxStore.js';
74
- export { durableCommitEnvelopeSchema, } from './transactions/commitEnvelope.js';
75
- export type { CommitOutboxScope, DurableCommitEnvelope, } from './transactions/commitEnvelope.js';
76
- export { durableHttpCommitEnvelopeSchema, } from './transactions/httpCommitEnvelope.js';
77
- export type { DurableHttpCommitEnvelope, } from './transactions/httpCommitEnvelope.js';
74
+ export type { HeldLease } from './client/resourceTypes.js';
75
+ export type { AbloPersistence } from './transaction/persistence.js';
76
+ export { durableWritesConfigSchema, durableWriteStoreSchema, pendingWriteSchema, } from './transactions/mutations/durableWriteStore.js';
77
+ export type { DurableWritesConfig, DurableWriteStore, PendingWrite, } from './transactions/mutations/durableWriteStore.js';
78
+ export { durableCommitEnvelopeSchema, } from './transaction/transactions/settlement/commitEnvelope.js';
79
+ export type { CommitOutboxScope, DurableCommitEnvelope, } from './transaction/transactions/settlement/commitEnvelope.js';
80
+ export { durableHttpCommitEnvelopeSchema, } from './transaction/transactions/settlement/httpCommitEnvelope.js';
81
+ export type { DurableHttpCommitEnvelope, } from './transaction/transactions/settlement/httpCommitEnvelope.js';
78
82
  import { Ablo } from './client/Ablo.js';
79
83
  export default Ablo;
80
84
  export { dataSource, sourceEventForOperation, signAbloSourceRequest, verifyAbloSourceRequest, } from './source/index.js';
81
85
  export { createSourceConnector, type SourceConnector, type SourceConnectorOptions, type ConnectorStatus, } from './source/connector.js';
82
86
  export { defaultPolicy, capabilityPreemptPolicy, interpretConflictAxis } from './policy/index.js';
83
- export { SyncSessionError, AbloError, AbloAuthenticationError, AbloPermissionError, AbloRateLimitError, AbloIdempotencyError, AbloConnectionError, AbloValidationError, AbloNotFoundError, AbloServerError, AbloStaleContextError, AbloClaimedError, AbloContentionError, CapabilityError, translateHttpError, hasWireCode, errorFromWire, toAbloError, ERROR_CODES, ERROR_CONTRACT_VERSION, errorCodeSpec, isRetryableCode, classifyRecovery, recoveryClassSchema, RECOVERY_CLASSES, } from './errors.js';
84
- export type { RequiredCapability } from './errors.js';
85
- export type { ErrorCode, WireErrorCode, ErrorCategory, ErrorCodeSpec, RecoveryClass } from './errors.js';
86
- export { errorEnvelope, statusForType } from './wire/errorEnvelope.js';
87
- export type { ErrorEnvelope } from './wire/errorEnvelope.js';
88
- export { WS_BEARER_SUBPROTOCOL_PREFIX, WS_SYNC_SUBPROTOCOL } from './auth/credentialSource.js';
89
- export { ENVIRONMENTS, environmentSchema, normalizeEnvironment, environmentFromKeyPrefix, environmentToKeyPrefix, isSandboxEnvironment, } from './environment.js';
90
- export type { Environment, KeyPrefixEnvironment } from './environment.js';
91
- export { writeOptionsSchema, onStaleModeSchema, assertWriteOptions, } from './client/writeOptionsSchema.js';
92
- export type { WriteOptionsInput } from './client/writeOptionsSchema.js';
87
+ export { AbloSessionError, SyncSessionError, AbloError, AbloAuthenticationError, AbloPermissionError, AbloRateLimitError, AbloIdempotencyError, AbloConnectionError, AbloValidationError, AbloNotFoundError, AbloServerError, AbloStaleContextError, AbloClaimedError, AbloContentionError, CapabilityError, translateHttpError, hasWireCode, errorFromWire, toAbloError, ERROR_CODES, ERROR_CONTRACT_VERSION, errorCodeSpec, isRetryableCode, classifyRecovery, recoveryClassSchema, RECOVERY_CLASSES, } from './transaction/errors.js';
88
+ export type { RequiredCapability } from './transaction/errors.js';
89
+ export type { ErrorCode, WireErrorCode, ErrorCategory, ErrorCodeSpec, RecoveryClass } from './transaction/errors.js';
90
+ export { errorEnvelope, statusForType } from './transaction/wire/errorEnvelope.js';
91
+ export type { ErrorEnvelope } from './transaction/wire/errorEnvelope.js';
92
+ export { WS_BEARER_SUBPROTOCOL_PREFIX, WS_SYNC_SUBPROTOCOL } from './transaction/auth/credentialSource.js';
93
+ export { ENVIRONMENTS, environmentSchema, normalizeEnvironment, environmentFromKeyPrefix, environmentToKeyPrefix, isSandboxEnvironment, } from './transaction/environment.js';
94
+ export type { Environment, KeyPrefixEnvironment } from './transaction/environment.js';
95
+ export { writeOptionsSchema, onStaleModeSchema, assertWriteOptions, } from './transaction/resources/writeOptionsSchema.js';
96
+ export type { WriteOptionsInput } from './transaction/resources/writeOptionsSchema.js';
97
+ export type { OnStaleMode } from './transaction/coordination/schema.js';
93
98
  export type { WriteOptions, MutationOptions } from './interfaces/index.js';
94
- export { staleNotificationSchema, readDependencySchema } from './coordination/schema.js';
95
- export type { StaleNotification, ReadDependency } from './coordination/schema.js';
96
- export { ClaimLog, formatClaim, formatConflict } from './coordination/trace.js';
97
- export type { ClaimLogEntry } from './coordination/trace.js';
99
+ export { staleNotificationSchema, readDependencySchema } from './transaction/coordination/schema.js';
100
+ export type { StaleNotification, ReadDependency } from './transaction/coordination/schema.js';
101
+ export { ClaimLog, formatClaim, formatConflict } from './coordination/ClaimLog.js';
102
+ export type { ClaimLogEntry } from './coordination/ClaimLog.js';
98
103
  export type { ClaimEvent, ConflictEvent, SyncObservabilityProvider, } from './interfaces/index.js';
99
- export { noopObservability } from './SyncEngineContext.js';
104
+ export { noopObservability } from './RuntimeContext.js';
100
105
  export { IDBOpenTimeoutError, isStorageOpenTimeout } from './core/openIDBWithTimeout.js';
106
+ export type { CommitLatencySample } from './transactions/mutations/commitLatency.js';
101
107
  export { PUBLIC_MODEL_VERBS, PUBLIC_LIST_OPTION_KEYS, PUBLIC_ABLO_OPTION_KEYS, } from './surface.js';
102
108
  export type { ModelVerb, ListOptionKey, AbloOptionKey } from './surface.js';
103
- export type { Register, DefaultSyncShape } from './types/global.js';
109
+ export type { Register, DefaultSyncShape } from './transaction/types/global.js';
104
110
  export { defineMutators } from './mutators/defineMutators.js';
105
111
  export { createTransaction, type Transaction } from './mutators/Transaction.js';
106
- export { deepEqual, stableStringify } from './utils/json.js';
112
+ export { deepEqual, stableStringify } from './transaction/utils/json.js';
package/dist/index.js CHANGED
@@ -33,7 +33,7 @@
33
33
  * that consult the local cache first and fall back to the network, de-duplicating
34
34
  * concurrent requests for the same row. They are the default, and the right
35
35
  * choice for stateless callers whose local graph starts empty.
36
- * `ablo.<model>.get(id)`, `.getAll(...)`, and `.getCount(...)` are synchronous
36
+ * `ablo.<model>.local.retrieve(id)`, `.local.list(...)`, and `.local.count(...)` are synchronous
37
37
  * snapshots of the already-loaded local graph with no network round-trip — use
38
38
  * them in reactive React selectors (`useAblo((ablo) => ablo.<model>.get(id))`)
39
39
  * once the graph is warm.
@@ -57,16 +57,19 @@
57
57
  // one name. It is the default export, so `import Ablo from '@abloatai/ablo'`
58
58
  // works, and a named export, so `import { Ablo }` compiles too.
59
59
  export { Ablo } from './client/Ablo.js';
60
- export { DEFAULT_CONTENTION_RETRIES } from './client/functionalUpdate.js';
60
+ // The reactive materialiser as a declared capability (ADR 0016): installed by
61
+ // default on the socket client, named explicitly when the list is written out.
62
+ // `AbloPlugin` is the one uniform shape every capability declares.
63
+ export { humans } from './client/humans.js';
64
+ export { DEFAULT_CONTENTION_RETRIES } from './transaction/resources/functionalUpdate.js';
61
65
  // The stateless HTTP client is constructed through `Ablo({ transport: 'http' })`.
62
66
  // There is no separate constructor to import; annotate values with the
63
67
  // `AbloHttpClient` type, which is the return type of that call.
64
- export {} from './client/httpClient.js';
65
- export { ABLO_DEFAULT_BASE_URL, ABLO_HOSTED_API_DOMAIN, ABLO_HOSTED_HTTP_BASE_URL, normalizeAbloHostedBaseUrl, } from './client/auth.js';
66
- export { durableWritesConfigSchema, durableWriteStoreSchema, pendingWriteSchema, } from './transactions/durableWriteStore.js';
67
- /* eslint-enable @typescript-eslint/no-deprecated */
68
- export { durableCommitEnvelopeSchema, } from './transactions/commitEnvelope.js';
69
- export { durableHttpCommitEnvelopeSchema, } from './transactions/httpCommitEnvelope.js';
68
+ export {} from './transaction/transport/httpClient.js';
69
+ export { ABLO_DEFAULT_BASE_URL, ABLO_HOSTED_API_DOMAIN, ABLO_HOSTED_HTTP_BASE_URL, normalizeAbloHostedBaseUrl, } from './transaction/auth/apiKey.js';
70
+ export { durableWritesConfigSchema, durableWriteStoreSchema, pendingWriteSchema, } from './transactions/mutations/durableWriteStore.js';
71
+ export { durableCommitEnvelopeSchema, } from './transaction/transactions/settlement/commitEnvelope.js';
72
+ export { durableHttpCommitEnvelopeSchema, } from './transaction/transactions/settlement/httpCommitEnvelope.js';
70
73
  // Participant types live under `Ablo.Participant.*` —
71
74
  // `Ablo.Participant.Joined`, `Ablo.Participant.Manager`,
72
75
  // `Ablo.Participant.JoinOptions`, etc. Same dot-access shape as
@@ -95,33 +98,37 @@ export { defaultPolicy, capabilityPreemptPolicy, interpretConflictAxis } from '.
95
98
  // The typed error hierarchy. One import brings in every class you need to
96
99
  // tell failures apart — by `e instanceof AbloX` or `e.type === 'AbloX'` — along
97
100
  // with the helper that translates an HTTP response into the right class.
98
- export { SyncSessionError, AbloError, AbloAuthenticationError, AbloPermissionError, AbloRateLimitError, AbloIdempotencyError, AbloConnectionError, AbloValidationError, AbloNotFoundError, AbloServerError, AbloStaleContextError, AbloClaimedError, AbloContentionError, CapabilityError, translateHttpError, hasWireCode, errorFromWire, toAbloError, ERROR_CODES, ERROR_CONTRACT_VERSION, errorCodeSpec, isRetryableCode, classifyRecovery, recoveryClassSchema, RECOVERY_CLASSES, } from './errors.js';
101
+ export { AbloSessionError,
102
+ // Deprecated alias, removed in 0.36.0. The barrel keeps re-exporting it until
103
+ // then so consumers don't lose the name a version early.
104
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
105
+ SyncSessionError, AbloError, AbloAuthenticationError, AbloPermissionError, AbloRateLimitError, AbloIdempotencyError, AbloConnectionError, AbloValidationError, AbloNotFoundError, AbloServerError, AbloStaleContextError, AbloClaimedError, AbloContentionError, CapabilityError, translateHttpError, hasWireCode, errorFromWire, toAbloError, ERROR_CODES, ERROR_CONTRACT_VERSION, errorCodeSpec, isRetryableCode, classifyRecovery, recoveryClassSchema, RECOVERY_CLASSES, } from './transaction/errors.js';
99
106
  // The wire contract for errors, with no dependencies: the JSON envelope shape
100
107
  // plus the table mapping each AbloError subclass to an HTTP status. A server
101
108
  // that returns Ablo errors can assert against these so its responses never
102
109
  // drift from what the client expects.
103
- export { errorEnvelope, statusForType } from './wire/errorEnvelope.js';
104
- export { WS_BEARER_SUBPROTOCOL_PREFIX, WS_SYNC_SUBPROTOCOL } from './auth/credentialSource.js';
105
- export { ENVIRONMENTS, environmentSchema, normalizeEnvironment, environmentFromKeyPrefix, environmentToKeyPrefix, isSandboxEnvironment, } from './environment.js';
110
+ export { errorEnvelope, statusForType } from './transaction/wire/errorEnvelope.js';
111
+ export { WS_BEARER_SUBPROTOCOL_PREFIX, WS_SYNC_SUBPROTOCOL } from './transaction/auth/credentialSource.js';
112
+ export { ENVIRONMENTS, environmentSchema, normalizeEnvironment, environmentFromKeyPrefix, environmentToKeyPrefix, isSandboxEnvironment, } from './transaction/environment.js';
106
113
  // The write-options contract: the single Zod schema for the option bag every
107
114
  // write accepts (`ablo.<model>.create/update/delete`, `commits.create`, and the
108
115
  // HTTP model routes). The SDK validates against it at each boundary, and it is
109
116
  // exported so you can validate or assemble options before a call — for example,
110
117
  // as the input schema of an agent tool. It is the runtime counterpart of the
111
118
  // `MutationOptions` type.
112
- export { writeOptionsSchema, onStaleModeSchema, assertWriteOptions, } from './client/writeOptionsSchema.js';
119
+ export { writeOptionsSchema, onStaleModeSchema, assertWriteOptions, } from './transaction/resources/writeOptionsSchema.js';
113
120
  // The value handed back to a writer whose change hit a stale-context conflict
114
121
  // under `onStale: 'notify'`. Instead of throwing, the commit succeeds and
115
122
  // returns this notification so the caller can reconcile against the current
116
123
  // value and retry rather than discard its work.
117
- export { staleNotificationSchema, readDependencySchema } from './coordination/schema.js';
124
+ export { staleNotificationSchema, readDependencySchema } from './transaction/coordination/schema.js';
118
125
  // Collects claim events and stale-write collisions into an ordered list you can
119
126
  // print to inspect coordination, or read through `collisions()` to assert on in
120
127
  // tests. Pass `new ClaimLog()` as `Ablo({ observability })`.
121
- export { ClaimLog, formatClaim, formatConflict } from './coordination/trace.js';
128
+ export { ClaimLog, formatClaim, formatConflict } from './coordination/ClaimLog.js';
122
129
  // Spread this to provide a custom `observability` that overrides only the hooks
123
130
  // you care about (e.g. captureClaim) and no-ops the rest.
124
- export { noopObservability } from './SyncEngineContext.js';
131
+ export { noopObservability } from './RuntimeContext.js';
125
132
  // Detects a stuck local store: use these to recognize when the browser's
126
133
  // IndexedDB backing store fails to open in time, so your app can show a
127
134
  // recovery screen instead of hanging.
@@ -135,9 +142,8 @@ export { PUBLIC_MODEL_VERBS, PUBLIC_LIST_OPTION_KEYS, PUBLIC_ABLO_OPTION_KEYS, }
135
142
  // `ablo.<model>.create/update/delete`; reach for `defineMutators` only when you
136
143
  // need a named, multi-step mutation with its own undo behavior. The matching
137
144
  // types live under the `Ablo` namespace:
138
- // Ablo.Mutator.Fn, Ablo.Transaction
139
- // Ablo.Mutator.UndoEntry, Ablo.Mutator.InverseOp
140
- // Ablo.Query, Ablo.QueryBatch, Ablo.QueryBatchResult
145
+ // Ablo.Mutator.Fn, Ablo.Mutator.Transaction
146
+ // Ablo.Mutator.UndoEntry, Ablo.Mutator.UndoScope, Ablo.Mutator.InverseOp
141
147
  export { defineMutators } from './mutators/defineMutators.js';
142
148
  // `createTransaction` lets callers outside React — server-side workers, agent
143
149
  // runtimes — run custom mutators without the `useMutators` hook. Build a
@@ -152,4 +158,4 @@ export { createTransaction } from './mutators/Transaction.js';
152
158
  // then reports a difference that isn't real — a common trap when reconciling an
153
159
  // Ablo row against external editor state. These compare independent of key
154
160
  // order, so use them instead.
155
- export { deepEqual, stableStringify } from './utils/json.js';
161
+ export { deepEqual, stableStringify } from './transaction/utils/json.js';
@@ -6,18 +6,15 @@
6
6
  * session-error detection, online-status checks, and the transport that carries
7
7
  * mutations to your backend. The SDK ships sensible no-op defaults where it can.
8
8
  */
9
- import type { ReadDependency, TrackDependency, ParticipantKind } from '../coordination/schema.js';
10
- import type { CommitStatus, MutationCommitResultInput } from '../wire/commit.js';
11
- export interface SyncLogger {
12
- debug(message: string, ...args: unknown[]): void;
13
- info(message: string, ...args: unknown[]): void;
14
- warn(message: string, ...args: unknown[]): void;
15
- error(message: string, ...args: unknown[]): void;
16
- }
17
- /** Breadcrumb severity levels */
18
- export type BreadcrumbLevel = 'debug' | 'info' | 'warning' | 'error';
19
- /** Breadcrumb categories for sync engine lifecycle events */
20
- export type SyncBreadcrumbCategory = 'sync.bootstrap' | 'sync.transaction' | 'sync.websocket' | 'sync.offline' | 'sync.database' | 'sync.conflict' | 'sync.coordination' | 'sync.groups';
9
+ import type { MutationCommitResultInput } from '../transaction/wire/commit.js';
10
+ import type { OnStaleMode } from '../transaction/coordination/schema.js';
11
+ export type { ClaimEvent, ConflictEvent } from '../transaction/coordination/events.js';
12
+ import type { CoordinationObservability } from '../transaction/observability.js';
13
+ export type { CoordinationObservability } from '../transaction/observability.js';
14
+ export type { Logger } from '../transaction/logger.js';
15
+ import type { Logger } from '../transaction/logger.js';
16
+ export type { BreadcrumbLevel, BreadcrumbCategory, WebSocketErrorDetails, TransportObservability, } from '../transaction/observability.js';
17
+ import type { BreadcrumbCategory, TransportObservability } from '../transaction/observability.js';
21
18
  export interface RollbackDetails {
22
19
  transactionType: string;
23
20
  modelName: string;
@@ -54,12 +51,6 @@ export interface DeltaRetryExhaustedDetails {
54
51
  retryCount: number;
55
52
  syncIdNeeded?: number;
56
53
  }
57
- export interface WebSocketErrorDetails {
58
- context: string;
59
- error?: string;
60
- code?: number;
61
- reason?: string;
62
- }
63
54
  export interface SelfHealingDetails {
64
55
  modelName: string;
65
56
  modelId: string;
@@ -70,46 +61,6 @@ export interface CommitZeroSyncIdDetails {
70
61
  operationCount: number;
71
62
  operations: string[];
72
63
  }
73
- /**
74
- * A single event in the life of a claim. `phase` is the state the claim has just
75
- * entered, and the sequence of phases is the trail you follow to see how two
76
- * participants collided on a row — who asked for it, who waited behind whom, who
77
- * was turned away, and whose lease lapsed. Each phase corresponds to a `claim_*`
78
- * frame on the wire.
79
- */
80
- export interface ClaimEvent {
81
- phase: 'acquired' | 'queued' | 'granted' | 'lost' | 'rejected' | 'expired';
82
- /** Server claim id, when the frame carries one. */
83
- claimId?: string;
84
- /** The claimed row + optional field scope. */
85
- model?: string;
86
- id?: string;
87
- field?: string;
88
- /** Participant that owns or blocks the lease (on `rejected`, the holder). */
89
- actor?: string;
90
- participantKind?: ParticipantKind;
91
- /** FIFO position when `queued`. */
92
- position?: number;
93
- /** Rejection or policy reason, when the server supplied one. */
94
- reason?: string;
95
- }
96
- /**
97
- * A committed `onStale: 'notify'` write whose premise had moved. The commit
98
- * succeeded, but the guarded operations were not written because the row had
99
- * changed since the caller's `readAt`, and the engine returned the current value
100
- * so the caller can reconcile. Records which rows and fields collided.
101
- */
102
- export interface ConflictEvent {
103
- /** The client idempotency key whose write was notified. */
104
- clientTxId: string;
105
- /** The conflicted rows + the fields that collided. */
106
- rows: readonly {
107
- model: string;
108
- id: string;
109
- fields: readonly string[];
110
- writtenBy?: ParticipantKind;
111
- }[];
112
- }
113
64
  /** Span attributes for performance monitoring */
114
65
  export type SpanAttributes = Record<string, string | number | boolean | undefined>;
115
66
  /**
@@ -117,31 +68,29 @@ export type SpanAttributes = Record<string, string | number | boolean | undefine
117
68
  * ships a no-op default; provide your own to forward these events to a monitoring
118
69
  * tool such as Sentry, Datadog, or OpenTelemetry.
119
70
  */
120
- export interface SyncObservabilityProvider {
71
+ export interface ObservabilityProvider extends CoordinationObservability, TransportObservability {
121
72
  /** Set user/org context for error grouping */
122
73
  setContext(userId: string, organizationId: string): void;
123
74
  /** Update connection state tag */
124
75
  setConnectionState(state: 'connected' | 'disconnected' | 'connecting'): void;
125
- /** Add a breadcrumb for sync lifecycle events */
126
- breadcrumb(message: string, category: SyncBreadcrumbCategory, level?: BreadcrumbLevel, data?: Record<string, string | number | boolean | undefined>): void;
127
76
  /** Capture optimistic rollback (data reverted) */
128
77
  captureRollback(details: RollbackDetails): void;
129
- /** Capture permanent transaction failure */
130
- captureTransactionFailure(details: TransactionFailureDetails): void;
78
+ /**
79
+ * Capture permanent mutation failure. Named `captureTransactionFailure`
80
+ * before 0.35.0; the rename is announced in that release note rather than
81
+ * aliased, because this member is required — a provider still carrying the
82
+ * old spelling fails to satisfy the interface and the compiler names the
83
+ * member, which an optional alias would only have hidden.
84
+ */
85
+ captureMutationFailure(details: TransactionFailureDetails): void;
131
86
  /** Capture bootstrap failure */
132
87
  captureBootstrapFailure(error: Error | unknown, details?: BootstrapFailureDetails): void;
133
88
  /** Capture reconciliation needed (delta confirmation timeout) */
134
89
  captureReconciliation(details: ReconciliationDetails): void;
135
90
  /** Capture delta retry exhausted */
136
91
  captureDeltaRetryExhausted(details: DeltaRetryExhaustedDetails): void;
137
- /** Capture WebSocket error */
138
- captureWebSocketError(details: WebSocketErrorDetails): void;
139
92
  /** Capture self-healing event */
140
93
  captureSelfHealing(details: SelfHealingDetails): void;
141
- /** Capture a claim state change (acquired / queued / granted / lost / rejected / expired) */
142
- captureClaim(event: ClaimEvent): void;
143
- /** Capture a notify-instead-of-abort stale-write collision */
144
- captureConflict(event: ConflictEvent): void;
145
94
  /** Capture commit returning lastSyncId: 0 */
146
95
  captureCommitZeroSyncId(details: CommitZeroSyncIdDetails): void;
147
96
  /** Wrap a synchronous function in a performance span */
@@ -149,7 +98,7 @@ export interface SyncObservabilityProvider {
149
98
  /** Wrap an async function in a performance span */
150
99
  startSpanAsync<T>(name: string, op: string, fn: () => Promise<T>, attributes?: SpanAttributes): Promise<T>;
151
100
  }
152
- export interface SyncAnalytics {
101
+ export interface Analytics {
153
102
  capture(event: string, properties?: Record<string, unknown>): void;
154
103
  }
155
104
  /**
@@ -184,67 +133,8 @@ export interface ModelDebugLoggerContract {
184
133
  * while every explicit queued result requires a WAL correlation.
185
134
  */
186
135
  export type CommitResult = MutationCommitResultInput;
187
- /**
188
- * Per-call options accepted by any mutation, passed as the last argument.
189
- * Every field is optional; omitted fields fall back to sensible defaults.
190
- *
191
- * - `idempotencyKey` — when set, the server caches the response for 24 hours and
192
- * returns the cached result on any retry using the same key. When omitted, the
193
- * SDK generates a fresh UUID per mutation, so every call is retry-safe by
194
- * default. `null` is retained for source compatibility and is treated like
195
- * omission; write retries never opt out of request identity.
196
- * - `label` — a human-readable tag recorded with the mutation for debugging, such
197
- * as "nightly cleanup" or "user click".
198
- */
199
- export interface MutationOptions {
200
- idempotencyKey?: string | null;
201
- label?: string;
202
- wait?: CommitStatus;
203
- readAt?: number | null;
204
- onStale?: 'reject' | 'overwrite' | 'notify' | null;
205
- /**
206
- * The fencing token (Option B) of the held claim this write belongs to. The
207
- * server validates it against the entity's persisted high-water and rejects a
208
- * stale token. Sourced from the claim handle, never set by hand.
209
- */
210
- fenceToken?: number | null;
211
- /** The id (or `{ id }`) of the claim this write belongs to. This is the
212
- * low-level reference the commit carries so the write is attributed to a claim
213
- * and can pass the holder's own lock. It is distinct from the `claim` handle on
214
- * the model write parameters, which is the higher-level object you usually pass. */
215
- claimRef?: string | {
216
- readonly id: string;
217
- } | null;
218
- /**
219
- * Reserved lineage field, forwarded on the wire as `causedByTaskId`. The client
220
- * always sends `null`; write attribution now travels on the claim id instead.
221
- */
222
- causedByTaskId?: string | null;
223
- /**
224
- * Batch-level read dependencies — the answer to "did anything I looked at
225
- * change?" Each entry is a row (`{ model, id, readAt, fields? }`) or a sync
226
- * group (`{ group, readAt }`) that this write was premised on. The server
227
- * checks that none of them moved since their `readAt` and applies the entry's
228
- * `onStale` behavior to the whole batch. This is distinct from the per-operation
229
- * `readAt`, which guards only the row being written.
230
- *
231
- * See `packages/sync-engine/docs/concurrency-convention.md` (§3 the two
232
- * footprints, §4 the read-set) for the governing convention.
233
- */
234
- reads?: ReadDependency[] | null;
235
- /**
236
- * Durable read-dependencies — what this write (or the record it produces) should
237
- * keep watching. Unlike `reads`, which is checked once at commit and discarded,
238
- * each `track` entry is persisted and re-checked against every future delta; a
239
- * later matching change opens a `StaleNotification` for the tracking participant,
240
- * delivered at their next commit or live to a held claim. Each entry is a row
241
- * (`{ model, id }`) or a sync group (`{ group }`), optionally pinned to a `readAt`
242
- * baseline (defaults to this commit's watermark).
243
- *
244
- * See `packages/sync-engine/docs/groups.md` for how `track` drives propagation.
245
- */
246
- track?: TrackDependency[] | null;
247
- }
136
+ export type { MutationOptions } from '../transaction/resources/mutationOptions.js';
137
+ import type { MutationOptions } from '../transaction/resources/mutationOptions.js';
248
138
  /**
249
139
  * The subset of {@link MutationOptions} that travels with each write as it is
250
140
  * queued offline and sent on the wire. A single shared type keeps the public
@@ -273,7 +163,7 @@ export interface MutationOperation {
273
163
  */
274
164
  transactionId?: string;
275
165
  readAt?: number | null;
276
- onStale?: 'reject' | 'overwrite' | 'notify' | null;
166
+ onStale?: OnStaleMode | null;
277
167
  /**
278
168
  * The fencing token (Option B) carried on the wire for this op — the held
279
169
  * claim's token, validated against the entity's high-water at commit.
@@ -333,7 +223,7 @@ export interface MutationExecutor {
333
223
  * Application-specific configuration for the sync engine, describing how your
334
224
  * models relate so the engine can order and merge writes correctly.
335
225
  */
336
- export interface SyncEngineConfig {
226
+ export interface RuntimeConfig {
337
227
  /**
338
228
  * The order in which to create models, so a row is never inserted before the
339
229
  * parent row its foreign key points at. Keyed by each model's type name, with
@@ -361,7 +251,7 @@ export interface SyncEngineConfig {
361
251
  * Fields to preserve when merging a partial update into the local store. A
362
252
  * change usually carries only the fields that changed; listing a model's
363
253
  * essential fields here keeps them from being dropped during that merge.
364
- * For example: `{ Task: ['title', 'projectId'], Slide: ['deckId', 'order'] }`.
254
+ * For example: `{ Task: ['title', 'projectId'], Section: ['reportId', 'order'] }`.
365
255
  */
366
256
  essentialFields: Readonly<Record<string, readonly string[]>>;
367
257
  /**
@@ -389,6 +279,16 @@ export interface SyncEngineConfig {
389
279
  * hash above.
390
280
  */
391
281
  expectedSourceSchemaHash?: string;
282
+ /**
283
+ * Per-model content hashes of the schema this client was built against,
284
+ * keyed by schema key (`tasks` → hash of that model's serialized JSON). The
285
+ * semantic layer of the drift check: on a whole-schema mismatch the client
286
+ * compares only the models IT declares against the server's per-model
287
+ * surface, so a purely additive server-side change (new models this build
288
+ * never references) is silence, and real divergence names the exact models.
289
+ * Advisory, like the hashes above.
290
+ */
291
+ expectedModelHashes?: Readonly<Record<string, string>>;
392
292
  }
393
293
  /**
394
294
  * Extends the WebSocket event map with your own collaboration events, such as
@@ -399,3 +299,13 @@ export interface WebSocketEventConfig {
399
299
  /** Additional event type names beyond the core delta/presence/bootstrap events */
400
300
  customEventTypes?: readonly string[];
401
301
  }
302
+ /** @deprecated Renamed to {@link Logger}. Removed in 0.36.0. */
303
+ export type SyncLogger = Logger;
304
+ /** @deprecated Renamed to {@link ObservabilityProvider}. Removed in 0.36.0. */
305
+ export type SyncObservabilityProvider = ObservabilityProvider;
306
+ /** @deprecated Renamed to {@link Analytics}. Removed in 0.36.0. */
307
+ export type SyncAnalytics = Analytics;
308
+ /** @deprecated Renamed to {@link RuntimeConfig}. Removed in 0.36.0. */
309
+ export type SyncEngineConfig = RuntimeConfig;
310
+ /** @deprecated Renamed to {@link BreadcrumbCategory}. Removed in 0.36.0. */
311
+ export type SyncBreadcrumbCategory = BreadcrumbCategory;
@@ -1,77 +1 @@
1
- /**
2
- * The Ablo API-key format: how keys are minted, hashed, and validated, in one
3
- * place so every component that issues or checks a key agrees on the format.
4
- *
5
- * This module uses `node:crypto` and is therefore Node-only. It is published on
6
- * the `@abloatai/ablo/keys` subpath and kept off the main browser-facing entry
7
- * so a browser bundle never pulls in `node:crypto`.
8
- *
9
- * A key looks like `<sk|rk|ek|pk>_<live|test>_<30 base62 chars><6-char base62
10
- * CRC32 checksum>`. The middle segment is the stable environment prefix, mapped
11
- * on parse to `production` or `sandbox`. The recognizable prefix lets secret
12
- * scanners spot a leaked key, and the trailing checksum lets the format reject a
13
- * mistyped or forged key locally, without a database round-trip. Older keys
14
- * (roughly a 43-character base64url body with no checksum) still validate by hash
15
- * and parse here with `checksummed: false`.
16
- */
17
- import { z } from 'zod';
18
- import { type Environment } from '../environment.js';
19
- export declare const API_KEY_KINDS: readonly ["secret", "restricted", "ephemeral", "publishable"];
20
- export type ApiKeyKind = (typeof API_KEY_KINDS)[number];
21
- export declare const API_KEY_ENVS: readonly ["production", "sandbox"];
22
- export type ApiKeyEnv = Environment;
23
- /** A structurally-valid Ablo API key, parsed into its parts. */
24
- export interface ParsedApiKey {
25
- /** The original plaintext. */
26
- raw: string;
27
- kind: ApiKeyKind;
28
- env: ApiKeyEnv;
29
- /** The chars after `<prefix>_<env>_` (body + checksum for new keys). */
30
- body: string;
31
- /** True when this is the new checksummed format (36-char base62 body). */
32
- checksummed: boolean;
33
- }
34
- /**
35
- * The Zod schema for an Ablo API key. `parse` and `safeParse` return a typed
36
- * {@link ParsedApiKey}. A checksummed-format key whose checksum does not match is
37
- * rejected without any network call; an older key with no checksum parses with
38
- * `checksummed: false` and is left for the server to validate by hash.
39
- */
40
- export declare const apiKeySchema: z.ZodPipe<z.ZodString, z.ZodTransform<ParsedApiKey, string>>;
41
- /** Parse + fully validate (incl. checksum). Returns null when invalid. */
42
- export declare function parseApiKey(raw: string): ParsedApiKey | null;
43
- /** True when the key uses the new checksummed format (regardless of validity). */
44
- export declare function isChecksummedKey(raw: string): boolean;
45
- /** Verify the embedded checksum. Meaningful only for checksummed-format keys. */
46
- export declare function keyChecksumMatches(raw: string): boolean;
47
- /**
48
- * Mint a key: `<prefix>_<env>_<body><checksum>`. Returns the plaintext (shown
49
- * once), its SHA-256 hash (persisted), and the 12-char display prefix.
50
- */
51
- export declare function generateApiKey(env?: ApiKeyEnv, kind?: ApiKeyKind): {
52
- plaintext: string;
53
- hash: string;
54
- prefix: string;
55
- };
56
- /**
57
- * The stable SHA-256 hex digest of a plaintext key, computed both when a key is
58
- * minted and when one is looked up. A fast hash is the right choice here rather
59
- * than a password hash like bcrypt: API keys are long random strings, so there is
60
- * no dictionary of guesses to slow down.
61
- */
62
- export declare function hashApiKey(plaintext: string): string;
63
- /** `whsec_` label prefix per the Standard Webhooks spec (not part of the key material). */
64
- export declare const WEBHOOK_SECRET_PREFIX = "whsec_";
65
- /**
66
- * Mints a webhook signing secret following the Standard Webhooks specification
67
- * (https://www.standardwebhooks.com): a base64-encoded random key of 24–64 bytes,
68
- * labelled with the `whsec_` prefix. This uses 32 bytes (256 bits), comfortably
69
- * inside that range. Unlike an API key, a signing secret is not hashed at rest,
70
- * because signing a request with {@link signAbloSourceRequest} needs the live
71
- * value. It is therefore kept in a secret store, returned to the customer once at
72
- * creation, and never shown again.
73
- */
74
- export declare function generateWebhookSecret(): {
75
- plaintext: string;
76
- last4: string;
77
- };
1
+ export * from '../transaction/keys/index.js';