@abloatai/ablo 0.34.1 → 0.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (536) hide show
  1. package/AGENTS.md +2 -1
  2. package/CHANGELOG.md +758 -5
  3. package/README.md +56 -502
  4. package/bin/ablo.cjs +39 -0
  5. package/dist/BaseSyncedStore.d.ts +176 -48
  6. package/dist/BaseSyncedStore.js +346 -214
  7. package/dist/Database.d.ts +17 -44
  8. package/dist/Database.js +96 -79
  9. package/dist/InstanceCache.d.ts +31 -6
  10. package/dist/InstanceCache.js +65 -30
  11. package/dist/LazyReferenceCollection.d.ts +3 -3
  12. package/dist/LazyReferenceCollection.js +4 -4
  13. package/dist/Model.d.ts +23 -13
  14. package/dist/Model.js +27 -17
  15. package/dist/ModelRegistry.d.ts +8 -4
  16. package/dist/ModelRegistry.js +20 -18
  17. package/dist/NetworkMonitor.d.ts +3 -1
  18. package/dist/NetworkMonitor.js +7 -5
  19. package/dist/{SyncEngineContext.d.ts → RuntimeContext.d.ts} +20 -13
  20. package/dist/{SyncEngineContext.js → RuntimeContext.js} +11 -12
  21. package/dist/SyncClient.d.ts +47 -47
  22. package/dist/SyncClient.js +215 -156
  23. package/dist/ai-sdk/coordinatedTool.d.ts +2 -2
  24. package/dist/ai-sdk/coordinatedTool.js +1 -1
  25. package/dist/ai-sdk/coordinationContext.d.ts +2 -2
  26. package/dist/ai-sdk/coordinationContext.js +1 -1
  27. package/dist/ai-sdk/wrap.d.ts +3 -3
  28. package/dist/ai-sdk/wrap.js +2 -2
  29. package/dist/auth/index.d.ts +1 -156
  30. package/dist/auth/index.js +8 -301
  31. package/dist/client/Ablo.d.ts +42 -287
  32. package/dist/client/Ablo.js +129 -963
  33. package/dist/client/abloClient.d.ts +309 -0
  34. package/dist/client/abloClient.js +13 -0
  35. package/dist/client/clientPrelude.d.ts +52 -0
  36. package/dist/client/clientPrelude.js +60 -0
  37. package/dist/client/consoleLogger.d.ts +2 -2
  38. package/dist/client/coreClient.d.ts +60 -0
  39. package/dist/client/coreClient.js +118 -0
  40. package/dist/client/createInternalComponents.d.ts +8 -4
  41. package/dist/client/createInternalComponents.js +17 -10
  42. package/dist/client/createModelProxy.d.ts +98 -373
  43. package/dist/client/createModelProxy.js +233 -139
  44. package/dist/client/humans.d.ts +69 -0
  45. package/dist/client/humans.js +78 -0
  46. package/dist/client/modelRegistration.d.ts +1 -1
  47. package/dist/client/modelRegistration.js +9 -9
  48. package/dist/client/options.d.ts +73 -17
  49. package/dist/client/reactiveEngine.d.ts +53 -0
  50. package/dist/client/reactiveEngine.js +688 -0
  51. package/dist/client/resourceTypes.d.ts +9 -250
  52. package/dist/client/resourceTypes.js +8 -5
  53. package/dist/client/schemaConfig.d.ts +4 -4
  54. package/dist/client/schemaConfig.js +6 -2
  55. package/dist/client/storeCluster.d.ts +47 -0
  56. package/dist/client/storeCluster.js +118 -0
  57. package/dist/client/storeLifecycle.d.ts +61 -0
  58. package/dist/client/storeLifecycle.js +231 -0
  59. package/dist/client/validateAbloOptions.d.ts +3 -2
  60. package/dist/client/validateAbloOptions.js +1 -1
  61. package/dist/client/wsMutationExecutor.d.ts +3 -3
  62. package/dist/client/wsMutationExecutor.js +3 -3
  63. package/dist/context.d.ts +22 -9
  64. package/dist/context.js +33 -9
  65. package/dist/coordination/ClaimLog.d.ts +26 -0
  66. package/dist/coordination/ClaimLog.js +32 -0
  67. package/dist/coordination/index.d.ts +1 -15
  68. package/dist/coordination/index.js +8 -31
  69. package/dist/core/index.d.ts +3 -3
  70. package/dist/core/index.js +2 -2
  71. package/dist/docs/catalog.d.ts +72 -0
  72. package/dist/docs/catalog.js +230 -0
  73. package/dist/docs/index.d.ts +10 -0
  74. package/dist/docs/index.js +10 -0
  75. package/dist/environment.d.ts +1 -40
  76. package/dist/environment.js +8 -37
  77. package/dist/index.d.ts +44 -36
  78. package/dist/index.js +30 -22
  79. package/dist/interfaces/index.d.ts +44 -134
  80. package/dist/keys/index.d.ts +1 -77
  81. package/dist/keys/index.js +8 -190
  82. package/dist/mutators/{RecordingTransaction.d.ts → RecordingMutation.d.ts} +4 -4
  83. package/dist/mutators/{RecordingTransaction.js → RecordingMutation.js} +2 -2
  84. package/dist/mutators/Transaction.d.ts +1 -1
  85. package/dist/mutators/Transaction.js +1 -1
  86. package/dist/mutators/UndoManager.d.ts +6 -6
  87. package/dist/mutators/UndoManager.js +5 -5
  88. package/dist/mutators/defineMutators.d.ts +3 -3
  89. package/dist/mutators/defineMutators.js +1 -1
  90. package/dist/mutators/inverseOp.js +2 -2
  91. package/dist/mutators/mutateActions.d.ts +3 -3
  92. package/dist/mutators/mutateActions.js +1 -1
  93. package/dist/mutators/readerActions.d.ts +1 -1
  94. package/dist/mutators/undoApply.d.ts +1 -1
  95. package/dist/mutators/undoApply.js +1 -1
  96. package/dist/policy/index.d.ts +2 -2
  97. package/dist/policy/index.js +1 -1
  98. package/dist/query/client.d.ts +5 -2
  99. package/dist/query/client.js +10 -9
  100. package/dist/query/types.d.ts +6 -41
  101. package/dist/query/types.js +2 -2
  102. package/dist/react/AbloProvider.d.ts +18 -8
  103. package/dist/react/AbloProvider.js +10 -9
  104. package/dist/react/context.d.ts +3 -3
  105. package/dist/react/context.js +1 -1
  106. package/dist/react/createAbloReact.d.ts +56 -0
  107. package/dist/react/createAbloReact.js +51 -0
  108. package/dist/react/index.d.ts +6 -5
  109. package/dist/react/index.js +6 -3
  110. package/dist/react/internalContext.d.ts +1 -1
  111. package/dist/react/useAblo.d.ts +12 -5
  112. package/dist/react/useAblo.js +26 -8
  113. package/dist/react/useCurrentUserId.js +1 -1
  114. package/dist/react/useErrorListener.js +1 -1
  115. package/dist/react/useMutationFailureListener.d.ts +2 -2
  116. package/dist/react/useMutationFailureListener.js +1 -1
  117. package/dist/react/useMutators.d.ts +3 -3
  118. package/dist/react/useMutators.js +3 -3
  119. package/dist/react/useUndoScope.d.ts +5 -5
  120. package/dist/react/useUndoScope.js +1 -1
  121. package/dist/schema/coordination.d.ts +69 -10
  122. package/dist/schema/coordination.js +90 -9
  123. package/dist/schema/ddl.js +2 -2
  124. package/dist/schema/diff.d.ts +1 -1
  125. package/dist/schema/generate.js +1 -1
  126. package/dist/schema/index.d.ts +11 -10
  127. package/dist/schema/index.js +22 -18
  128. package/dist/schema/queries.d.ts +27 -27
  129. package/dist/schema/queries.js +23 -23
  130. package/dist/schema/select.d.ts +3 -3
  131. package/dist/schema/select.js +6 -3
  132. package/dist/schema/serialize.d.ts +15 -6
  133. package/dist/schema/serialize.js +20 -3
  134. package/dist/schema/sugar.d.ts +6 -7
  135. package/dist/schema/sugar.js +9 -12
  136. package/dist/schema/syncDeltaRow.d.ts +4 -152
  137. package/dist/schema/syncDeltaRow.js +4 -105
  138. package/dist/server/adapter.d.ts +18 -1
  139. package/dist/server/commit.d.ts +10 -16
  140. package/dist/server/index.d.ts +1 -1
  141. package/dist/server/index.js +1 -1
  142. package/dist/server/readConfig.d.ts +1 -1
  143. package/dist/source/adapter.d.ts +7 -5
  144. package/dist/source/adapter.js +7 -5
  145. package/dist/source/adapters/drizzle.d.ts +1 -1
  146. package/dist/source/adapters/drizzle.js +2 -2
  147. package/dist/source/adapters/kysely.d.ts +1 -1
  148. package/dist/source/adapters/kysely.js +1 -1
  149. package/dist/source/adapters/kyselyMutationCore.d.ts +1 -1
  150. package/dist/source/adapters/kyselyMutationCore.js +2 -2
  151. package/dist/source/adapters/memory.js +1 -1
  152. package/dist/source/adapters/prisma.d.ts +8 -3
  153. package/dist/source/adapters/prisma.js +1 -1
  154. package/dist/source/connector.js +1 -1
  155. package/dist/source/connectorProtocol.d.ts +2 -8
  156. package/dist/source/connectorProtocol.js +3 -2
  157. package/dist/source/contract.d.ts +29 -17
  158. package/dist/source/contract.js +27 -22
  159. package/dist/source/factory.d.ts +1 -1
  160. package/dist/source/idempotency.js +2 -2
  161. package/dist/source/index.d.ts +1 -0
  162. package/dist/source/index.js +3 -0
  163. package/dist/source/next.d.ts +1 -1
  164. package/dist/source/signing.d.ts +9 -2
  165. package/dist/source/signing.js +4 -1
  166. package/dist/source/types.d.ts +6 -4
  167. package/dist/source/types.js +1 -1
  168. package/dist/{core/storeContract.d.ts → storeContract.d.ts} +6 -6
  169. package/dist/{core → stores}/DatabaseManager.d.ts +3 -1
  170. package/dist/{core → stores}/DatabaseManager.js +14 -13
  171. package/dist/stores/ObjectStore.d.ts +1 -1
  172. package/dist/{core → stores}/StoreManager.d.ts +9 -26
  173. package/dist/{core → stores}/StoreManager.js +29 -77
  174. package/dist/stores/SyncActionStore.d.ts +4 -2
  175. package/dist/stores/SyncActionStore.js +11 -17
  176. package/dist/stores/syncAction.d.ts +26 -0
  177. package/dist/stores/syncAction.js +16 -0
  178. package/dist/surface.d.ts +3 -3
  179. package/dist/surface.js +6 -4
  180. package/dist/sync/BootstrapFetcher.d.ts +127 -6
  181. package/dist/sync/BootstrapFetcher.js +511 -83
  182. package/dist/sync/ConnectionManager.d.ts +6 -198
  183. package/dist/sync/ConnectionManager.js +6 -677
  184. package/dist/sync/OnDemandLoader.d.ts +5 -2
  185. package/dist/sync/OnDemandLoader.js +61 -21
  186. package/dist/sync/SubscriptionManager.d.ts +13 -2
  187. package/dist/sync/SubscriptionManager.js +23 -5
  188. package/dist/sync/SyncWebSocket.d.ts +27 -510
  189. package/dist/sync/SyncWebSocket.js +76 -954
  190. package/dist/sync/awaitClaimGrant.d.ts +4 -44
  191. package/dist/sync/awaitClaimGrant.js +4 -109
  192. package/dist/sync/bootstrapApply.d.ts +3 -0
  193. package/dist/sync/bootstrapApply.js +2 -2
  194. package/dist/sync/commitFrames.d.ts +6 -40
  195. package/dist/sync/commitFrames.js +6 -97
  196. package/dist/sync/contextPorts.d.ts +18 -0
  197. package/dist/sync/contextPorts.js +31 -0
  198. package/dist/sync/createClaimStream.d.ts +5 -49
  199. package/dist/sync/createClaimStream.js +5 -469
  200. package/dist/sync/createPresenceStream.d.ts +26 -4
  201. package/dist/sync/createPresenceStream.js +28 -20
  202. package/dist/sync/createSnapshot.d.ts +2 -2
  203. package/dist/sync/createSnapshot.js +1 -1
  204. package/dist/sync/credentialLifecycle.d.ts +5 -173
  205. package/dist/sync/credentialLifecycle.js +5 -320
  206. package/dist/sync/deltaPipeline.d.ts +13 -12
  207. package/dist/sync/deltaPipeline.js +21 -4
  208. package/dist/sync/groupChange.d.ts +3 -0
  209. package/dist/sync/groupChange.js +16 -14
  210. package/dist/sync/participants.d.ts +24 -6
  211. package/dist/sync/participants.js +32 -23
  212. package/dist/sync/schemaDrift.d.ts +55 -0
  213. package/dist/sync/schemaDrift.js +53 -0
  214. package/dist/sync/schemas.d.ts +23 -33
  215. package/dist/sync/schemas.js +29 -20
  216. package/dist/sync/syncPlan.d.ts +3 -3
  217. package/dist/sync/wsFrameHandlers.d.ts +6 -114
  218. package/dist/sync/wsFrameHandlers.js +6 -392
  219. package/dist/syncLog/contract.d.ts +20 -0
  220. package/dist/syncLog/contract.js +19 -0
  221. package/dist/syncLog/index.d.ts +1 -0
  222. package/dist/syncLog/index.js +1 -0
  223. package/dist/transaction/ablo.d.ts +88 -0
  224. package/dist/transaction/ablo.js +33 -0
  225. package/dist/{client/auth.d.ts → transaction/auth/apiKey.d.ts} +43 -8
  226. package/dist/{client/auth.js → transaction/auth/apiKey.js} +19 -0
  227. package/dist/transaction/auth/bootstrapScope.d.ts +15 -0
  228. package/dist/transaction/auth/bootstrapScope.js +1 -0
  229. package/dist/transaction/auth/capability.d.ts +212 -0
  230. package/dist/transaction/auth/capability.js +224 -0
  231. package/dist/{auth → transaction/auth}/credentialSource.d.ts +8 -1
  232. package/dist/{client → transaction/auth}/identity.d.ts +8 -7
  233. package/dist/{client → transaction/auth}/identity.js +1 -1
  234. package/dist/transaction/auth/index.d.ts +162 -0
  235. package/dist/transaction/auth/index.js +304 -0
  236. package/dist/{auth → transaction/auth}/schemas.d.ts +1 -1
  237. package/dist/{auth → transaction/auth}/schemas.js +13 -13
  238. package/dist/{client → transaction/auth}/sessionMint.d.ts +8 -8
  239. package/dist/{client → transaction/auth}/sessionMint.js +4 -7
  240. package/dist/transaction/coordination/awaitClaimGrant.d.ts +56 -0
  241. package/dist/transaction/coordination/awaitClaimGrant.js +124 -0
  242. package/dist/{client → transaction/coordination}/claimHeartbeatLoop.d.ts +34 -0
  243. package/dist/{client → transaction/coordination}/claimHeartbeatLoop.js +20 -0
  244. package/dist/transaction/coordination/claimMeta.d.ts +49 -0
  245. package/dist/transaction/coordination/claimMeta.js +52 -0
  246. package/dist/transaction/coordination/createClaimStream.d.ts +64 -0
  247. package/dist/transaction/coordination/createClaimStream.js +475 -0
  248. package/dist/transaction/coordination/events.d.ts +74 -0
  249. package/dist/transaction/coordination/events.js +7 -0
  250. package/dist/transaction/coordination/index.d.ts +19 -0
  251. package/dist/transaction/coordination/index.js +45 -0
  252. package/dist/transaction/coordination/locator.d.ts +104 -0
  253. package/dist/transaction/coordination/locator.js +102 -0
  254. package/dist/transaction/coordination/schema.d.ts +1536 -0
  255. package/dist/transaction/coordination/schema.js +1177 -0
  256. package/dist/transaction/coordination/targetConflict.d.ts +2 -0
  257. package/dist/transaction/coordination/targetConflict.js +107 -0
  258. package/dist/{coordination → transaction/coordination}/trace.d.ts +7 -18
  259. package/dist/{coordination → transaction/coordination}/trace.js +18 -25
  260. package/dist/transaction/durableWrites.d.ts +62 -0
  261. package/dist/{client → transaction}/durableWrites.js +28 -3
  262. package/dist/transaction/environment.d.ts +105 -0
  263. package/dist/transaction/environment.js +108 -0
  264. package/dist/{errorCodes.d.ts → transaction/errorCodes.d.ts} +12 -12
  265. package/dist/{errorCodes.js → transaction/errorCodes.js} +45 -18
  266. package/dist/{errors.d.ts → transaction/errors.d.ts} +37 -13
  267. package/dist/{errors.js → transaction/errors.js} +85 -16
  268. package/dist/transaction/footprint.d.ts +111 -0
  269. package/dist/transaction/footprint.js +0 -0
  270. package/dist/transaction/index.d.ts +20 -0
  271. package/dist/transaction/index.js +20 -0
  272. package/dist/transaction/keys/index.d.ts +87 -0
  273. package/dist/transaction/keys/index.js +207 -0
  274. package/dist/transaction/log/syncDeltaRow.d.ts +158 -0
  275. package/dist/transaction/log/syncDeltaRow.js +95 -0
  276. package/dist/{sync/syncPosition.d.ts → transaction/logPosition.d.ts} +22 -8
  277. package/dist/{sync/syncPosition.js → transaction/logPosition.js} +15 -6
  278. package/dist/transaction/logger.d.ts +16 -0
  279. package/dist/transaction/logger.js +7 -0
  280. package/dist/transaction/observability.d.ts +53 -0
  281. package/dist/transaction/observability.js +19 -0
  282. package/dist/transaction/plugin.d.ts +285 -0
  283. package/dist/transaction/plugin.js +106 -0
  284. package/dist/{policy → transaction/policy}/types.d.ts +3 -3
  285. package/dist/{policy → transaction/policy}/types.js +2 -0
  286. package/dist/transaction/resources/httpResources.d.ts +321 -0
  287. package/dist/transaction/resources/httpResources.js +7 -0
  288. package/dist/transaction/resources/modelOperations.d.ts +427 -0
  289. package/dist/transaction/resources/modelOperations.js +12 -0
  290. package/dist/transaction/resources/mutationOptions.d.ts +66 -0
  291. package/dist/transaction/resources/mutationOptions.js +9 -0
  292. package/dist/transaction/resources/where.d.ts +101 -0
  293. package/dist/transaction/resources/where.js +115 -0
  294. package/dist/{client → transaction/resources}/writeOptionsSchema.d.ts +2 -6
  295. package/dist/{client → transaction/resources}/writeOptionsSchema.js +9 -5
  296. package/dist/{schema → transaction/schema}/field.d.ts +17 -23
  297. package/dist/{schema → transaction/schema}/field.js +5 -5
  298. package/dist/transaction/schema/fieldRef.d.ts +38 -0
  299. package/dist/transaction/schema/fieldRef.js +11 -0
  300. package/dist/transaction/schema/loadStrategy.d.ts +45 -0
  301. package/dist/transaction/schema/loadStrategy.js +46 -0
  302. package/dist/{schema → transaction/schema}/model.d.ts +50 -35
  303. package/dist/{schema → transaction/schema}/model.js +30 -20
  304. package/dist/transaction/schema/openapi.d.ts +58 -0
  305. package/dist/transaction/schema/openapi.js +501 -0
  306. package/dist/{schema → transaction/schema}/relation.d.ts +21 -16
  307. package/dist/{schema → transaction/schema}/relation.js +7 -7
  308. package/dist/{schema → transaction/schema}/residency.d.ts +0 -9
  309. package/dist/{schema → transaction/schema}/residency.js +0 -5
  310. package/dist/{schema → transaction/schema}/roles.d.ts +5 -5
  311. package/dist/{schema → transaction/schema}/roles.js +5 -5
  312. package/dist/{schema → transaction/schema}/schema.d.ts +39 -10
  313. package/dist/{schema → transaction/schema}/schema.js +24 -3
  314. package/dist/{schema → transaction/schema}/tenancy.d.ts +1 -1
  315. package/dist/{schema → transaction/schema}/tenancy.js +7 -4
  316. package/dist/transaction/transactionLayer.d.ts +82 -0
  317. package/dist/transaction/transactionLayer.js +24 -0
  318. package/dist/{transactions → transaction/transactions/settlement}/commitEnvelope.d.ts +5 -6
  319. package/dist/{transactions → transaction/transactions/settlement}/commitEnvelope.js +9 -13
  320. package/dist/{transactions → transaction/transactions/settlement}/httpCommitEnvelope.d.ts +9 -2
  321. package/dist/{transactions → transaction/transactions/settlement}/httpCommitEnvelope.js +5 -9
  322. package/dist/{transactions/durableWriteStore.d.ts → transaction/transactions/settlement/pendingWrite.d.ts} +11 -37
  323. package/dist/transaction/transactions/settlement/pendingWrite.js +20 -0
  324. package/dist/transaction/transport/commitFrames.d.ts +90 -0
  325. package/dist/transaction/transport/commitFrames.js +134 -0
  326. package/dist/transaction/transport/connectionManager.d.ts +215 -0
  327. package/dist/transaction/transport/connectionManager.js +673 -0
  328. package/dist/transaction/transport/credentialLifecycle.d.ts +177 -0
  329. package/dist/transaction/transport/credentialLifecycle.js +324 -0
  330. package/dist/{sync → transaction/transport}/heartbeat.d.ts +3 -1
  331. package/dist/{sync → transaction/transport}/heartbeat.js +6 -4
  332. package/dist/transaction/transport/httpClient.d.ts +131 -0
  333. package/dist/{client → transaction/transport}/httpClient.js +6 -5
  334. package/dist/transaction/transport/httpOptions.d.ts +33 -0
  335. package/dist/transaction/transport/httpOptions.js +12 -0
  336. package/dist/{client → transaction/transport}/httpTransport.js +295 -97
  337. package/dist/{sync/NetworkProbe.d.ts → transaction/transport/networkProbe.d.ts} +7 -4
  338. package/dist/{sync/NetworkProbe.js → transaction/transport/networkProbe.js} +14 -13
  339. package/dist/transaction/transport/wsFrameHandlers.d.ts +128 -0
  340. package/dist/transaction/transport/wsFrameHandlers.js +429 -0
  341. package/dist/transaction/transport/wsTransport.d.ts +574 -0
  342. package/dist/transaction/transport/wsTransport.js +1023 -0
  343. package/dist/transaction/types/assertExact.d.ts +17 -0
  344. package/dist/transaction/types/assertExact.js +1 -0
  345. package/dist/{types → transaction/types}/global.d.ts +17 -2
  346. package/dist/{types → transaction/types}/global.js +2 -1
  347. package/dist/{types → transaction/types}/index.d.ts +14 -46
  348. package/dist/{types → transaction/types}/index.js +7 -16
  349. package/dist/{types → transaction/types}/streams.d.ts +73 -45
  350. package/dist/transaction/utils/duration.d.ts +50 -0
  351. package/dist/{utils → transaction/utils}/duration.js +32 -0
  352. package/dist/{utils → transaction/utils}/json.d.ts +18 -0
  353. package/dist/transaction/utils/json.js +276 -0
  354. package/dist/transaction/wire/accountResponses.d.ts +420 -0
  355. package/dist/transaction/wire/accountResponses.js +290 -0
  356. package/dist/transaction/wire/auth.d.ts +56 -0
  357. package/dist/transaction/wire/auth.js +63 -0
  358. package/dist/transaction/wire/claimEvent.d.ts +76 -0
  359. package/dist/transaction/wire/claimEvent.js +73 -0
  360. package/dist/transaction/wire/claims.d.ts +530 -0
  361. package/dist/transaction/wire/claims.js +327 -0
  362. package/dist/{wire → transaction/wire}/commit.d.ts +125 -193
  363. package/dist/{wire → transaction/wire}/commit.js +68 -47
  364. package/dist/{wire → transaction/wire}/delta.d.ts +66 -17
  365. package/dist/{wire → transaction/wire}/delta.js +37 -13
  366. package/dist/transaction/wire/errorEnvelope.d.ts +72 -0
  367. package/dist/{wire → transaction/wire}/errorEnvelope.js +36 -5
  368. package/dist/transaction/wire/feedCursor.d.ts +60 -0
  369. package/dist/transaction/wire/feedCursor.js +82 -0
  370. package/dist/transaction/wire/feedEvent.d.ts +204 -0
  371. package/dist/transaction/wire/feedEvent.js +65 -0
  372. package/dist/transaction/wire/frames.d.ts +194 -0
  373. package/dist/transaction/wire/frames.js +50 -0
  374. package/dist/transaction/wire/inboundFrames.d.ts +562 -0
  375. package/dist/transaction/wire/inboundFrames.js +116 -0
  376. package/dist/transaction/wire/index.d.ts +54 -0
  377. package/dist/transaction/wire/index.js +83 -0
  378. package/dist/{wire → transaction/wire}/listEnvelope.d.ts +13 -14
  379. package/dist/transaction/wire/listEnvelope.js +42 -0
  380. package/dist/transaction/wire/modelMutations.d.ts +31 -0
  381. package/dist/transaction/wire/modelMutations.js +52 -0
  382. package/dist/transaction/wire/modelResponses.d.ts +85 -0
  383. package/dist/transaction/wire/modelResponses.js +43 -0
  384. package/dist/transaction/wire/modelShape.d.ts +78 -0
  385. package/dist/transaction/wire/modelShape.js +74 -0
  386. package/dist/transactions/{TransactionQueue.d.ts → mutations/MutationQueue.d.ts} +85 -38
  387. package/dist/transactions/{TransactionQueue.js → mutations/MutationQueue.js} +141 -80
  388. package/dist/transactions/{TransactionStore.d.ts → mutations/MutationStore.d.ts} +8 -8
  389. package/dist/transactions/{TransactionStore.js → mutations/MutationStore.js} +2 -2
  390. package/dist/transactions/{coalesceRules.d.ts → mutations/coalesceRules.d.ts} +10 -10
  391. package/dist/transactions/{coalesceRules.js → mutations/coalesceRules.js} +1 -1
  392. package/dist/transactions/mutations/commitLatency.d.ts +52 -0
  393. package/dist/transactions/mutations/commitLatency.js +130 -0
  394. package/dist/transactions/{commitOutboxStore.d.ts → mutations/commitOutboxStore.d.ts} +1 -5
  395. package/dist/transactions/{commitOutboxStore.js → mutations/commitOutboxStore.js} +1 -1
  396. package/dist/transactions/{commitPayload.d.ts → mutations/commitPayload.d.ts} +18 -16
  397. package/dist/transactions/{commitPayload.js → mutations/commitPayload.js} +15 -15
  398. package/dist/transactions/{deltaConfirmation.d.ts → mutations/deltaConfirmation.d.ts} +15 -11
  399. package/dist/transactions/{deltaConfirmation.js → mutations/deltaConfirmation.js} +14 -12
  400. package/dist/transactions/mutations/durableWriteStore.d.ts +14 -0
  401. package/dist/transactions/mutations/durableWriteStore.js +12 -0
  402. package/dist/transactions/{optimisticApply.d.ts → mutations/optimisticApply.d.ts} +7 -7
  403. package/dist/transactions/{replayValidation.d.ts → mutations/replayValidation.d.ts} +4 -3
  404. package/dist/transactions/{replayValidation.js → mutations/replayValidation.js} +7 -5
  405. package/dist/utils/mobxSetup.d.ts +1 -1
  406. package/dist/utils/mobxSetup.js +5 -2
  407. package/dist/{core → views}/QueryView.d.ts +2 -2
  408. package/dist/{core → views}/QueryView.js +2 -2
  409. package/dist/{core → views}/ViewRegistry.d.ts +1 -1
  410. package/dist/{core/queryUtils.d.ts → views/incrementalView.d.ts} +6 -6
  411. package/dist/{core/queryUtils.js → views/incrementalView.js} +6 -6
  412. package/dist/webhooks/events.d.ts +2 -2
  413. package/dist/wire/index.d.ts +1 -34
  414. package/dist/wire/index.js +8 -49
  415. package/docs/agent-messaging.md +3 -3
  416. package/docs/agents.md +20 -13
  417. package/docs/api-keys.md +14 -10
  418. package/docs/api.md +27 -61
  419. package/docs/audit.md +6 -3
  420. package/docs/cli.md +41 -13
  421. package/docs/client-behavior.md +11 -9
  422. package/docs/concurrency-convention.md +49 -57
  423. package/docs/coordination.md +283 -121
  424. package/docs/data-sources.md +7 -5
  425. package/docs/debugging.md +39 -15
  426. package/docs/deployment.md +267 -0
  427. package/docs/examples/agent-human.md +49 -42
  428. package/docs/examples/ai-sdk-tool.md +69 -44
  429. package/docs/examples/existing-python-backend.md +8 -6
  430. package/docs/examples/nextjs.md +129 -47
  431. package/docs/examples/scoped-agent.md +46 -45
  432. package/docs/examples/server-agent.md +46 -26
  433. package/docs/groups.md +87 -30
  434. package/docs/guarantees.md +41 -12
  435. package/docs/how-it-works.md +38 -12
  436. package/docs/idempotency.md +126 -0
  437. package/docs/identity.md +77 -74
  438. package/docs/index.md +172 -86
  439. package/docs/integration-guide.md +31 -19
  440. package/docs/mcp.md +46 -21
  441. package/docs/migration.md +95 -18
  442. package/docs/operating-on-your-database.md +3 -1
  443. package/docs/projects.md +3 -1
  444. package/docs/quickstart.md +22 -5
  445. package/docs/react.md +31 -18
  446. package/docs/schema-contract.md +5 -3
  447. package/docs/session-settings.md +108 -0
  448. package/docs/sessions.md +4 -2
  449. package/docs/webhooks.md +12 -10
  450. package/llms.txt +48 -18
  451. package/package.json +21 -26
  452. package/dist/agent/Agent.d.ts +0 -366
  453. package/dist/agent/Agent.js +0 -514
  454. package/dist/agent/index.d.ts +0 -115
  455. package/dist/agent/index.js +0 -128
  456. package/dist/agent/session.d.ts +0 -93
  457. package/dist/agent/session.js +0 -149
  458. package/dist/agent/types.d.ts +0 -68
  459. package/dist/agent/types.js +0 -9
  460. package/dist/cli.cjs +0 -286329
  461. package/dist/client/durableWrites.d.ts +0 -21
  462. package/dist/client/httpClient.d.ts +0 -80
  463. package/dist/coordination/schema.d.ts +0 -722
  464. package/dist/coordination/schema.js +0 -578
  465. package/dist/schema/openapi.d.ts +0 -29
  466. package/dist/schema/openapi.js +0 -124
  467. package/dist/testing/fixtures/bootstrap.d.ts +0 -49
  468. package/dist/testing/fixtures/bootstrap.js +0 -59
  469. package/dist/testing/fixtures/deltas.d.ts +0 -83
  470. package/dist/testing/fixtures/deltas.js +0 -136
  471. package/dist/testing/fixtures/models.d.ts +0 -83
  472. package/dist/testing/fixtures/models.js +0 -272
  473. package/dist/testing/helpers/reactWrapper.d.ts +0 -69
  474. package/dist/testing/helpers/reactWrapper.js +0 -67
  475. package/dist/testing/helpers/syncEngineHarness.d.ts +0 -54
  476. package/dist/testing/helpers/syncEngineHarness.js +0 -73
  477. package/dist/testing/helpers/wait.d.ts +0 -30
  478. package/dist/testing/helpers/wait.js +0 -49
  479. package/dist/testing/index.d.ts +0 -23
  480. package/dist/testing/index.js +0 -33
  481. package/dist/testing/mocks/FakeDatabase.d.ts +0 -18
  482. package/dist/testing/mocks/FakeDatabase.js +0 -10
  483. package/dist/testing/mocks/MockMutationExecutor.d.ts +0 -87
  484. package/dist/testing/mocks/MockMutationExecutor.js +0 -192
  485. package/dist/testing/mocks/MockNetworkMonitor.d.ts +0 -20
  486. package/dist/testing/mocks/MockNetworkMonitor.js +0 -46
  487. package/dist/testing/mocks/MockSyncContext.d.ts +0 -51
  488. package/dist/testing/mocks/MockSyncContext.js +0 -71
  489. package/dist/testing/mocks/MockSyncStore.d.ts +0 -88
  490. package/dist/testing/mocks/MockSyncStore.js +0 -171
  491. package/dist/testing/mocks/MockWebSocket.d.ts +0 -71
  492. package/dist/testing/mocks/MockWebSocket.js +0 -118
  493. package/dist/transactions/durableWriteStore.js +0 -30
  494. package/dist/utils/duration.d.ts +0 -25
  495. package/dist/utils/json.js +0 -88
  496. package/dist/wire/errorEnvelope.d.ts +0 -55
  497. package/dist/wire/frames.d.ts +0 -197
  498. package/dist/wire/frames.js +0 -49
  499. package/dist/wire/listEnvelope.js +0 -18
  500. package/docs/interaction-model.md +0 -97
  501. /package/dist/{core → query}/QueryProcessor.d.ts +0 -0
  502. /package/dist/{core → query}/QueryProcessor.js +0 -0
  503. /package/dist/{core/storeContract.js → storeContract.js} +0 -0
  504. /package/dist/{core → stores}/openIDBWithTimeout.d.ts +0 -0
  505. /package/dist/{core → stores}/openIDBWithTimeout.js +0 -0
  506. /package/dist/{client → transaction/auth}/credentialEndpoint.d.ts +0 -0
  507. /package/dist/{client → transaction/auth}/credentialEndpoint.js +0 -0
  508. /package/dist/{auth → transaction/auth}/credentialPolicy.d.ts +0 -0
  509. /package/dist/{auth → transaction/auth}/credentialPolicy.js +0 -0
  510. /package/dist/{auth → transaction/auth}/credentialSource.js +0 -0
  511. /package/dist/{client → transaction/auth}/hostedEndpoints.d.ts +0 -0
  512. /package/dist/{client → transaction/auth}/hostedEndpoints.js +0 -0
  513. /package/dist/{client → transaction}/persistence.d.ts +0 -0
  514. /package/dist/{client → transaction}/persistence.js +0 -0
  515. /package/dist/{client → transaction/resources}/functionalUpdate.d.ts +0 -0
  516. /package/dist/{client → transaction/resources}/functionalUpdate.js +0 -0
  517. /package/dist/{transactions → transaction/transactions/settlement}/idempotencyKey.d.ts +0 -0
  518. /package/dist/{transactions → transaction/transactions/settlement}/idempotencyKey.js +0 -0
  519. /package/dist/{client → transaction/transport}/httpTransport.d.ts +0 -0
  520. /package/dist/{types → transaction/types}/modelData.d.ts +0 -0
  521. /package/dist/{types → transaction/types}/modelData.js +0 -0
  522. /package/dist/{types → transaction/types}/participant.d.ts +0 -0
  523. /package/dist/{types → transaction/types}/participant.js +0 -0
  524. /package/dist/{types → transaction/types}/streams.js +0 -0
  525. /package/dist/{utils → transaction/utils}/asyncIterator.d.ts +0 -0
  526. /package/dist/{utils → transaction/utils}/asyncIterator.js +0 -0
  527. /package/dist/{wire → transaction/wire}/bootstrapReason.d.ts +0 -0
  528. /package/dist/{wire → transaction/wire}/bootstrapReason.js +0 -0
  529. /package/dist/{wire → transaction/wire}/protocol.d.ts +0 -0
  530. /package/dist/{wire → transaction/wire}/protocol.js +0 -0
  531. /package/dist/{wire → transaction/wire}/protocolVersion.d.ts +0 -0
  532. /package/dist/{wire → transaction/wire}/protocolVersion.js +0 -0
  533. /package/dist/transactions/{UnconfirmedWrites.d.ts → mutations/UnconfirmedWrites.d.ts} +0 -0
  534. /package/dist/transactions/{UnconfirmedWrites.js → mutations/UnconfirmedWrites.js} +0 -0
  535. /package/dist/transactions/{optimisticApply.js → mutations/optimisticApply.js} +0 -0
  536. /package/dist/{core → views}/ViewRegistry.js +0 -0
package/dist/index.js CHANGED
@@ -26,14 +26,13 @@
26
26
  * Related surfaces live on their own import subpaths:
27
27
  * @abloatai/ablo/schema — defineSchema, model, z (Zod)
28
28
  * @abloatai/ablo/react — <AbloProvider>, useQuery, useMutate
29
- * @abloatai/ablo/testing — test harnesses and fixtures
30
29
  *
31
30
  * Reads come in two flavors, distinguished by where the data is fetched from.
32
31
  * `ablo.<model>.retrieve({ id })` and `.list({ where })` are asynchronous reads
33
32
  * that consult the local cache first and fall back to the network, de-duplicating
34
33
  * concurrent requests for the same row. They are the default, and the right
35
34
  * choice for stateless callers whose local graph starts empty.
36
- * `ablo.<model>.get(id)`, `.getAll(...)`, and `.getCount(...)` are synchronous
35
+ * `ablo.<model>.local.retrieve(id)`, `.local.list(...)`, and `.local.count(...)` are synchronous
37
36
  * snapshots of the already-loaded local graph with no network round-trip — use
38
37
  * them in reactive React selectors (`useAblo((ablo) => ablo.<model>.get(id))`)
39
38
  * once the graph is warm.
@@ -57,16 +56,19 @@
57
56
  // one name. It is the default export, so `import Ablo from '@abloatai/ablo'`
58
57
  // works, and a named export, so `import { Ablo }` compiles too.
59
58
  export { Ablo } from './client/Ablo.js';
60
- export { DEFAULT_CONTENTION_RETRIES } from './client/functionalUpdate.js';
59
+ // The reactive materialiser as a declared capability (ADR 0016): installed by
60
+ // default on the socket client, named explicitly when the list is written out.
61
+ // `AbloPlugin` is the one uniform shape every capability declares.
62
+ export { humans } from './client/humans.js';
63
+ export { DEFAULT_CONTENTION_RETRIES } from './transaction/resources/functionalUpdate.js';
61
64
  // The stateless HTTP client is constructed through `Ablo({ transport: 'http' })`.
62
65
  // There is no separate constructor to import; annotate values with the
63
66
  // `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';
67
+ export {} from './transaction/transport/httpClient.js';
68
+ export { ABLO_DEFAULT_BASE_URL, ABLO_HOSTED_API_DOMAIN, ABLO_HOSTED_HTTP_BASE_URL, normalizeAbloHostedBaseUrl, } from './transaction/auth/apiKey.js';
69
+ export { durableWritesConfigSchema, durableWriteStoreSchema, pendingWriteSchema, } from './transactions/mutations/durableWriteStore.js';
70
+ export { durableCommitEnvelopeSchema, } from './transaction/transactions/settlement/commitEnvelope.js';
71
+ export { durableHttpCommitEnvelopeSchema, } from './transaction/transactions/settlement/httpCommitEnvelope.js';
70
72
  // Participant types live under `Ablo.Participant.*` —
71
73
  // `Ablo.Participant.Joined`, `Ablo.Participant.Manager`,
72
74
  // `Ablo.Participant.JoinOptions`, etc. Same dot-access shape as
@@ -95,37 +97,44 @@ export { defaultPolicy, capabilityPreemptPolicy, interpretConflictAxis } from '.
95
97
  // The typed error hierarchy. One import brings in every class you need to
96
98
  // tell failures apart — by `e instanceof AbloX` or `e.type === 'AbloX'` — along
97
99
  // 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';
100
+ export { AbloSessionError,
101
+ // Deprecated alias, removed in 0.36.0. The barrel keeps re-exporting it until
102
+ // then so consumers don't lose the name a version early.
103
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
104
+ 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
105
  // The wire contract for errors, with no dependencies: the JSON envelope shape
100
106
  // plus the table mapping each AbloError subclass to an HTTP status. A server
101
107
  // that returns Ablo errors can assert against these so its responses never
102
108
  // 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';
109
+ export { errorEnvelope, statusForType } from './transaction/wire/errorEnvelope.js';
110
+ export { WS_BEARER_SUBPROTOCOL_PREFIX, WS_SYNC_SUBPROTOCOL } from './transaction/auth/credentialSource.js';
111
+ export { ENVIRONMENTS, environmentSchema, normalizeEnvironment, environmentFromKeyPrefix, environmentToKeyPrefix, isSandboxEnvironment, } from './transaction/environment.js';
106
112
  // The write-options contract: the single Zod schema for the option bag every
107
113
  // write accepts (`ablo.<model>.create/update/delete`, `commits.create`, and the
108
114
  // HTTP model routes). The SDK validates against it at each boundary, and it is
109
115
  // exported so you can validate or assemble options before a call — for example,
110
116
  // as the input schema of an agent tool. It is the runtime counterpart of the
111
117
  // `MutationOptions` type.
112
- export { writeOptionsSchema, onStaleModeSchema, assertWriteOptions, } from './client/writeOptionsSchema.js';
118
+ export { writeOptionsSchema, onStaleModeSchema, assertWriteOptions, } from './transaction/resources/writeOptionsSchema.js';
113
119
  // The value handed back to a writer whose change hit a stale-context conflict
114
120
  // under `onStale: 'notify'`. Instead of throwing, the commit succeeds and
115
121
  // returns this notification so the caller can reconcile against the current
116
122
  // value and retry rather than discard its work.
117
- export { staleNotificationSchema, readDependencySchema } from './coordination/schema.js';
123
+ export { staleNotificationSchema, readDependencySchema } from './transaction/coordination/schema.js';
124
+ // The claim-part marker: schema field names typecheck plainly on a claim
125
+ // target; an app-defined part (a cell, a section) is named through `part()`.
126
+ export { part } from './transaction/coordination/schema.js';
118
127
  // Collects claim events and stale-write collisions into an ordered list you can
119
128
  // print to inspect coordination, or read through `collisions()` to assert on in
120
129
  // tests. Pass `new ClaimLog()` as `Ablo({ observability })`.
121
- export { ClaimLog, formatClaim, formatConflict } from './coordination/trace.js';
130
+ export { ClaimLog, formatClaim, formatConflict } from './coordination/ClaimLog.js';
122
131
  // Spread this to provide a custom `observability` that overrides only the hooks
123
132
  // you care about (e.g. captureClaim) and no-ops the rest.
124
- export { noopObservability } from './SyncEngineContext.js';
133
+ export { noopObservability } from './RuntimeContext.js';
125
134
  // Detects a stuck local store: use these to recognize when the browser's
126
135
  // IndexedDB backing store fails to open in time, so your app can show a
127
136
  // recovery screen instead of hanging.
128
- export { IDBOpenTimeoutError, isStorageOpenTimeout } from './core/openIDBWithTimeout.js';
137
+ export { IDBOpenTimeoutError, isStorageOpenTimeout } from './stores/openIDBWithTimeout.js';
129
138
  // A machine-readable manifest of the SDK's public verb and option names, bound
130
139
  // at compile time to the real types so the lists can never name a method or
131
140
  // option the API doesn't have. Useful for generating documentation or tooling
@@ -135,9 +144,8 @@ export { PUBLIC_MODEL_VERBS, PUBLIC_LIST_OPTION_KEYS, PUBLIC_ABLO_OPTION_KEYS, }
135
144
  // `ablo.<model>.create/update/delete`; reach for `defineMutators` only when you
136
145
  // need a named, multi-step mutation with its own undo behavior. The matching
137
146
  // 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
147
+ // Ablo.Mutator.Fn, Ablo.Mutator.Transaction
148
+ // Ablo.Mutator.UndoEntry, Ablo.Mutator.UndoScope, Ablo.Mutator.InverseOp
141
149
  export { defineMutators } from './mutators/defineMutators.js';
142
150
  // `createTransaction` lets callers outside React — server-side workers, agent
143
151
  // runtimes — run custom mutators without the `useMutators` hook. Build a
@@ -152,4 +160,4 @@ export { createTransaction } from './mutators/Transaction.js';
152
160
  // then reports a difference that isn't real — a common trap when reconciling an
153
161
  // Ablo row against external editor state. These compare independent of key
154
162
  // order, so use them instead.
155
- export { deepEqual, stableStringify } from './utils/json.js';
163
+ 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';