@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
@@ -0,0 +1,72 @@
1
+ /**
2
+ * The catalog of documentation this package ships.
3
+ *
4
+ * One definition of *which docs exist*, read from the files themselves. Every
5
+ * reader — `ablo docs`, the public `/api/docs/*` routes, the MCP docs tools —
6
+ * resolves through here rather than keeping its own list, because a
7
+ * hand-maintained index of a directory is a copy that drifts the moment a page
8
+ * is added and nothing fails when it does. Before this module the public web
9
+ * allowlist had fallen 21 pages behind the corpus, including `coordination`.
10
+ *
11
+ * Title and description are DERIVED from each file's own convention: an H1,
12
+ * then a one-paragraph blockquote stating what the page is for. That blockquote
13
+ * is the description everywhere it is needed — the site frontmatter lifts the
14
+ * same line — so a page states its own promise exactly once, in the source that
15
+ * ships in the npm tarball and still reads correctly as plain markdown.
16
+ *
17
+ * The published set mirrors the tarball's `files` globs (`docs/*.md`,
18
+ * `docs/examples/*.md`, plus the three root files). Anything else under `docs/`
19
+ * — `docs/internal/**` above all — is neither shipped nor catalogued, and that
20
+ * exclusion is the only thing keeping internal notes off the public routes now
21
+ * that they read from here.
22
+ */
23
+ /** Where a page sits in the corpus, and how a reader should group it. */
24
+ export type DocKind = 'guide' | 'example' | 'package';
25
+ /** One documentation page, as shipped. */
26
+ export interface DocEntry {
27
+ /** Stable reference: `quickstart`, `examples/nextjs`, `agents`. */
28
+ readonly slug: string;
29
+ /** Human-readable title — the file's H1, or curated for the root files. */
30
+ readonly title: string;
31
+ /** One line stating what the page is for — the file's promise blockquote. */
32
+ readonly description: string;
33
+ readonly kind: DocKind;
34
+ /** Absolute path on disk. */
35
+ readonly path: string;
36
+ readonly mime: string;
37
+ }
38
+ /**
39
+ * Read the catalog from a package root — the directory holding `docs/` and the
40
+ * three root files.
41
+ *
42
+ * The root is a parameter rather than resolved here because each reader knows
43
+ * it differently and they are genuinely different facts: the CLI resolves it
44
+ * against its own bundle inside `node_modules`, while the web app resolves it
45
+ * against the monorepo checkout. Nothing is cached; callers that serve many
46
+ * requests should memoize the returned array.
47
+ */
48
+ export declare function readDocsCatalog(packageRoot: string): Promise<DocEntry[]>;
49
+ /**
50
+ * Pull a page's title and promise line out of its markdown.
51
+ *
52
+ * The convention every page follows: an H1, then a blockquote paragraph saying
53
+ * what the page is for. A page missing either simply reports what it has — the
54
+ * catalog never invents prose.
55
+ */
56
+ export declare function parseDocHeader(body: string): {
57
+ readonly title: string | null;
58
+ readonly description: string;
59
+ };
60
+ /**
61
+ * Resolve a reference to a page. Accepts the slug (`coordination`), a curated
62
+ * alias (`storage`), or a repo-relative path (`docs/coordination.md`,
63
+ * `AGENTS.md`) — the three forms readers actually arrive with. Returns null
64
+ * rather than throwing so a caller can render its own not-found.
65
+ */
66
+ export declare function findDoc(catalog: readonly DocEntry[], reference: string): DocEntry | null;
67
+ /**
68
+ * Slugs closest to a miss, for a "did you mean" line. Ranks by shared prefix,
69
+ * then substring containment — enough to catch a typo or a half-remembered
70
+ * name without pulling in a distance library.
71
+ */
72
+ export declare function suggestSlugs(catalog: readonly DocEntry[], reference: string, limit?: number): string[];
@@ -0,0 +1,230 @@
1
+ /**
2
+ * The catalog of documentation this package ships.
3
+ *
4
+ * One definition of *which docs exist*, read from the files themselves. Every
5
+ * reader — `ablo docs`, the public `/api/docs/*` routes, the MCP docs tools —
6
+ * resolves through here rather than keeping its own list, because a
7
+ * hand-maintained index of a directory is a copy that drifts the moment a page
8
+ * is added and nothing fails when it does. Before this module the public web
9
+ * allowlist had fallen 21 pages behind the corpus, including `coordination`.
10
+ *
11
+ * Title and description are DERIVED from each file's own convention: an H1,
12
+ * then a one-paragraph blockquote stating what the page is for. That blockquote
13
+ * is the description everywhere it is needed — the site frontmatter lifts the
14
+ * same line — so a page states its own promise exactly once, in the source that
15
+ * ships in the npm tarball and still reads correctly as plain markdown.
16
+ *
17
+ * The published set mirrors the tarball's `files` globs (`docs/*.md`,
18
+ * `docs/examples/*.md`, plus the three root files). Anything else under `docs/`
19
+ * — `docs/internal/**` above all — is neither shipped nor catalogued, and that
20
+ * exclusion is the only thing keeping internal notes off the public routes now
21
+ * that they read from here.
22
+ */
23
+ import { readdir, readFile } from 'node:fs/promises';
24
+ import { basename, join } from 'node:path';
25
+ const MARKDOWN_MIME = 'text/markdown; charset=utf-8';
26
+ const TEXT_MIME = 'text/plain; charset=utf-8';
27
+ /**
28
+ * The three files that document the package itself rather than a topic. They
29
+ * live at the package root, not under `docs/`, and none follows the H1 +
30
+ * blockquote convention — `llms.txt` opens with a prose paragraph and
31
+ * `README.md` with a banner — so their titles and descriptions are curated
32
+ * here, the one place that knows they are a different kind of artifact.
33
+ *
34
+ * Their slug is their filename, because the filename IS how these are referred
35
+ * to everywhere (`AGENTS.md` is an ecosystem convention, not a topic name) and
36
+ * because a bare word would collide: `docs/agents.md` is a published guide that
37
+ * the docs index cross-links as `agents`, and whichever of the two won that
38
+ * name would silently shadow the other. Friendlier spellings are aliases below.
39
+ */
40
+ const PACKAGE_FILES = [
41
+ {
42
+ filename: 'AGENTS.md',
43
+ title: 'AGENTS.md',
44
+ description: 'The playbook a coding agent follows to install and drive Ablo without hanging on a prompt.',
45
+ mime: MARKDOWN_MIME,
46
+ },
47
+ {
48
+ filename: 'README.md',
49
+ title: 'README',
50
+ description: 'Package overview — what Ablo is and the shape of the API.',
51
+ mime: MARKDOWN_MIME,
52
+ },
53
+ {
54
+ filename: 'llms.txt',
55
+ title: 'llms.txt',
56
+ description: 'The curated single-file index of the whole API, for machine readers.',
57
+ mime: TEXT_MIME,
58
+ },
59
+ ];
60
+ /**
61
+ * Curated redirects for references that are not a slug: the friendly spellings
62
+ * of the root files, plus the renames the public URLs carried before this
63
+ * module existed, kept so old links and any agent working from a cached page
64
+ * still resolve. Identity mappings are NOT listed — a slug resolves to itself
65
+ * by derivation, and restating the other 30 here would rebuild the
66
+ * hand-maintained list this module exists to delete.
67
+ */
68
+ const SLUG_ALIASES = {
69
+ readme: 'README.md',
70
+ overview: 'README.md',
71
+ llms: 'llms.txt',
72
+ storage: 'data-sources',
73
+ 'docs/storage.md': 'data-sources',
74
+ };
75
+ /**
76
+ * Read the catalog from a package root — the directory holding `docs/` and the
77
+ * three root files.
78
+ *
79
+ * The root is a parameter rather than resolved here because each reader knows
80
+ * it differently and they are genuinely different facts: the CLI resolves it
81
+ * against its own bundle inside `node_modules`, while the web app resolves it
82
+ * against the monorepo checkout. Nothing is cached; callers that serve many
83
+ * requests should memoize the returned array.
84
+ */
85
+ export async function readDocsCatalog(packageRoot) {
86
+ const docsDir = join(packageRoot, 'docs');
87
+ const entries = [];
88
+ entries.push(...(await readDocsDirectory(docsDir, 'guide')));
89
+ entries.push(...(await readDocsDirectory(join(docsDir, 'examples'), 'example')));
90
+ for (const file of PACKAGE_FILES) {
91
+ const path = join(packageRoot, file.filename);
92
+ const body = await readFileOrNull(path);
93
+ if (body === null)
94
+ continue;
95
+ entries.push({
96
+ slug: file.filename,
97
+ title: file.title,
98
+ description: file.description,
99
+ kind: 'package',
100
+ path,
101
+ mime: file.mime,
102
+ });
103
+ }
104
+ return entries.sort((a, b) => a.slug.localeCompare(b.slug));
105
+ }
106
+ /**
107
+ * Read one flat directory of markdown. Deliberately non-recursive: the shipped
108
+ * set is `docs/*.md` plus `docs/examples/*.md`, so descending would catalogue
109
+ * `docs/internal/**` — notes that are not in the tarball and must not reach a
110
+ * public route.
111
+ */
112
+ async function readDocsDirectory(dir, kind) {
113
+ let names;
114
+ try {
115
+ const found = await readdir(dir, { withFileTypes: true });
116
+ names = found.filter((e) => e.isFile() && e.name.endsWith('.md')).map((e) => e.name);
117
+ }
118
+ catch {
119
+ return [];
120
+ }
121
+ const entries = [];
122
+ for (const name of names) {
123
+ const path = join(dir, name);
124
+ const body = await readFileOrNull(path);
125
+ if (body === null)
126
+ continue;
127
+ const stem = basename(name, '.md');
128
+ const { title, description } = parseDocHeader(body);
129
+ entries.push({
130
+ slug: kind === 'example' ? `examples/${stem}` : stem,
131
+ title: title ?? stem,
132
+ description,
133
+ kind,
134
+ path,
135
+ mime: MARKDOWN_MIME,
136
+ });
137
+ }
138
+ return entries;
139
+ }
140
+ /** The H1 a page opens with, and the blockquote paragraph that follows it. */
141
+ const H1_LINE = /^#[ \t]+(.+?)[ \t]*$/m;
142
+ const PROMISE_BLOCKQUOTE = /^\s*\n((?:>.*\n)+)/;
143
+ /**
144
+ * Pull a page's title and promise line out of its markdown.
145
+ *
146
+ * The convention every page follows: an H1, then a blockquote paragraph saying
147
+ * what the page is for. A page missing either simply reports what it has — the
148
+ * catalog never invents prose.
149
+ */
150
+ export function parseDocHeader(body) {
151
+ const heading = H1_LINE.exec(body);
152
+ const title = heading?.[1] ?? null;
153
+ const afterHeading = heading === null ? body : body.slice(heading.index + heading[0].length);
154
+ const promise = PROMISE_BLOCKQUOTE.exec(afterHeading);
155
+ const description = promise?.[1]
156
+ ?.split('\n')
157
+ .filter(Boolean)
158
+ .map((line) => line.replace(/^>\s?/, ''))
159
+ .join(' ')
160
+ .trim() ?? '';
161
+ return { title, description };
162
+ }
163
+ /**
164
+ * Resolve a reference to a page. Accepts the slug (`coordination`), a curated
165
+ * alias (`storage`), or a repo-relative path (`docs/coordination.md`,
166
+ * `AGENTS.md`) — the three forms readers actually arrive with. Returns null
167
+ * rather than throwing so a caller can render its own not-found.
168
+ */
169
+ export function findDoc(catalog, reference) {
170
+ const trimmed = reference.trim();
171
+ if (trimmed === '')
172
+ return null;
173
+ const direct = matchSlug(catalog, trimmed);
174
+ if (direct)
175
+ return direct;
176
+ const aliased = SLUG_ALIASES[trimmed.toLowerCase()];
177
+ if (aliased) {
178
+ const target = matchSlug(catalog, aliased);
179
+ if (target)
180
+ return target;
181
+ }
182
+ // Path form: `docs/coordination.md`, `docs/examples/nextjs.md`, `llms.txt`.
183
+ const asSlug = trimmed
184
+ .replace(/^\.?\//, '')
185
+ .replace(/^docs\//, '')
186
+ .replace(/\.(md|txt)$/i, '');
187
+ return matchSlug(catalog, asSlug);
188
+ }
189
+ function matchSlug(catalog, slug) {
190
+ const needle = slug.toLowerCase();
191
+ return catalog.find((entry) => entry.slug.toLowerCase() === needle) ?? null;
192
+ }
193
+ /**
194
+ * Slugs closest to a miss, for a "did you mean" line. Ranks by shared prefix,
195
+ * then substring containment — enough to catch a typo or a half-remembered
196
+ * name without pulling in a distance library.
197
+ */
198
+ export function suggestSlugs(catalog, reference, limit = 3) {
199
+ const needle = reference.trim().toLowerCase();
200
+ if (needle === '')
201
+ return [];
202
+ return catalog
203
+ .map((entry) => {
204
+ const slug = entry.slug.toLowerCase();
205
+ let score = 0;
206
+ if (slug.includes(needle) || needle.includes(slug))
207
+ score += 10;
208
+ score += sharedPrefixLength(slug, needle);
209
+ return { slug: entry.slug, score };
210
+ })
211
+ .filter(({ score }) => score > 2)
212
+ .sort((a, b) => b.score - a.score)
213
+ .slice(0, limit)
214
+ .map(({ slug }) => slug);
215
+ }
216
+ function sharedPrefixLength(a, b) {
217
+ const max = Math.min(a.length, b.length);
218
+ let i = 0;
219
+ while (i < max && a[i] === b[i])
220
+ i += 1;
221
+ return i;
222
+ }
223
+ async function readFileOrNull(path) {
224
+ try {
225
+ return await readFile(path, 'utf8');
226
+ }
227
+ catch {
228
+ return null;
229
+ }
230
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Programmatic access to the documentation this package ships.
3
+ *
4
+ * The docs travel in the npm tarball beside the code they describe, so a reader
5
+ * that resolves them through here is reading the pages for the version actually
6
+ * installed — not whatever the website is serving today. That is the whole
7
+ * point of the subpath: a published version is frozen, its docs are frozen with
8
+ * it, and `retrieve` never turns back into `get` behind a pinned dependency.
9
+ */
10
+ export { readDocsCatalog, findDoc, parseDocHeader, suggestSlugs, type DocEntry, type DocKind, } from './catalog.js';
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Programmatic access to the documentation this package ships.
3
+ *
4
+ * The docs travel in the npm tarball beside the code they describe, so a reader
5
+ * that resolves them through here is reading the pages for the version actually
6
+ * installed — not whatever the website is serving today. That is the whole
7
+ * point of the subpath: a published version is frozen, its docs are frozen with
8
+ * it, and `retrieve` never turns back into `get` behind a pinned dependency.
9
+ */
10
+ export { readDocsCatalog, findDoc, parseDocHeader, suggestSlugs, } from './catalog.js';
@@ -1,40 +1 @@
1
- import { z } from 'zod';
2
- /**
3
- * The two environments an Ablo project runs in: `production` for live data and
4
- * `sandbox` for isolated test data. Every credential and every stored row
5
- * belongs to exactly one of them.
6
- */
7
- export declare const ENVIRONMENTS: readonly ["production", "sandbox"];
8
- /**
9
- * How an environment is spelled inside an API-key prefix: a `live` key acts on
10
- * the production environment and a `test` key acts on the sandbox. Convert
11
- * between this spelling and {@link Environment} with
12
- * {@link environmentFromKeyPrefix} and {@link environmentToKeyPrefix}.
13
- */
14
- export type KeyPrefixEnvironment = 'live' | 'test';
15
- /** A Zod schema that validates a value as one of the {@link ENVIRONMENTS}. */
16
- export declare const environmentSchema: z.ZodEnum<{
17
- production: "production";
18
- sandbox: "sandbox";
19
- }>;
20
- /** One of the {@link ENVIRONMENTS} — either `'production'` or `'sandbox'`. */
21
- export type Environment = z.infer<typeof environmentSchema>;
22
- /**
23
- * Coerces an untrusted value into a valid {@link Environment}, returning
24
- * `fallback` (which defaults to `'production'`) when the value is not a
25
- * recognized environment. Use it when reading an environment from configuration
26
- * or off the wire.
27
- */
28
- export declare function normalizeEnvironment(value: unknown, fallback?: Environment): Environment;
29
- /**
30
- * Maps an API-key prefix spelling to its {@link Environment}: a `'test'` key
31
- * operates on the sandbox, and anything else on production.
32
- */
33
- export declare function environmentFromKeyPrefix(value: KeyPrefixEnvironment): Environment;
34
- /**
35
- * Maps an {@link Environment} to the spelling used in an API-key prefix: the
36
- * sandbox is `'test'` and production is `'live'`.
37
- */
38
- export declare function environmentToKeyPrefix(value: Environment): KeyPrefixEnvironment;
39
- /** Returns true when the given environment is the sandbox. */
40
- export declare function isSandboxEnvironment(value: Environment): boolean;
1
+ export * from './transaction/environment.js';
@@ -1,37 +1,8 @@
1
- import { z } from 'zod';
2
- /**
3
- * The two environments an Ablo project runs in: `production` for live data and
4
- * `sandbox` for isolated test data. Every credential and every stored row
5
- * belongs to exactly one of them.
6
- */
7
- export const ENVIRONMENTS = ['production', 'sandbox'];
8
- /** A Zod schema that validates a value as one of the {@link ENVIRONMENTS}. */
9
- export const environmentSchema = z.enum(ENVIRONMENTS);
10
- /**
11
- * Coerces an untrusted value into a valid {@link Environment}, returning
12
- * `fallback` (which defaults to `'production'`) when the value is not a
13
- * recognized environment. Use it when reading an environment from configuration
14
- * or off the wire.
15
- */
16
- export function normalizeEnvironment(value, fallback = 'production') {
17
- const parsed = environmentSchema.safeParse(value);
18
- return parsed.success ? parsed.data : fallback;
19
- }
20
- /**
21
- * Maps an API-key prefix spelling to its {@link Environment}: a `'test'` key
22
- * operates on the sandbox, and anything else on production.
23
- */
24
- export function environmentFromKeyPrefix(value) {
25
- return value === 'test' ? 'sandbox' : 'production';
26
- }
27
- /**
28
- * Maps an {@link Environment} to the spelling used in an API-key prefix: the
29
- * sandbox is `'test'` and production is `'live'`.
30
- */
31
- export function environmentToKeyPrefix(value) {
32
- return value === 'sandbox' ? 'test' : 'live';
33
- }
34
- /** Returns true when the given environment is the sandbox. */
35
- export function isSandboxEnvironment(value) {
36
- return value === 'sandbox';
37
- }
1
+ // Moved to @ablo/transaction (ADR 0013 — the settlement core extraction).
2
+ // This shim re-exports it at the original path so in-package importers of
3
+ // `../environment.js` keep working; rewire to `@ablo/transaction/environment`
4
+ // and delete this shim once the core package is fully wired.
5
+ //
6
+ // Line comments on purpose: tsc copies a leading JSDoc block into the
7
+ // published `.d.ts`, and this note names a package npm has never heard of.
8
+ export * from './transaction/environment.js';
package/dist/index.d.ts 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.
@@ -51,56 +50,65 @@
51
50
  * If you don't recognize one of these, you don't need it.
52
51
  */
53
52
  export { Ablo } from './client/Ablo.js';
53
+ export { humans } from './client/humans.js';
54
+ export type { HumansSurface } from './client/humans.js';
55
+ export type { AbloCoreClient } from './client/coreClient.js';
56
+ export type { AbloPlugin, PipelineStage, TransportCapabilities } from './transaction/plugin.js';
54
57
  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';
58
+ export type { ModelUpdater, ContentionOptions } from './transaction/resources/functionalUpdate.js';
59
+ export { DEFAULT_CONTENTION_RETRIES } from './transaction/resources/functionalUpdate.js';
60
+ export type { AbloReads } from './client/abloClient.js';
61
+ export { type AbloHttpClientOptions, type AbloHttpClient, type HttpModelClient, } from './transaction/transport/httpClient.js';
62
+ export { ABLO_DEFAULT_BASE_URL, ABLO_HOSTED_API_DOMAIN, ABLO_HOSTED_HTTP_BASE_URL, normalizeAbloHostedBaseUrl, } from './transaction/auth/apiKey.js';
63
+ export type { AbloOptions } from './client/Ablo.js';
64
+ export type { LocalCountOptions, LocalReadOptions, ModelListScope, ServerReadOptions, ModelRetrieveParams, ModelCreateParams, ModelUpdateParams, ModelDeleteParams, } from './client/resourceTypes.js';
61
65
  /**
62
66
  * @deprecated Use `Ablo.Claim.Held`. This compatibility export remains until
63
67
  * the next major release because it was explicitly documented in 0.20.1.
64
68
  */
65
- export type { HeldClaim } from './client/Ablo.js';
69
+ export type { HeldClaim } from './client/resourceTypes.js';
66
70
  /** The resolved value of the row-free `ablo.<model>.claim(id)` overload — a
67
71
  * held lease on a key whose row Ablo does not hold (a {@link HeldClaim} with
68
72
  * 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';
73
+ export type { HeldLease } from './client/resourceTypes.js';
74
+ export type { AbloPersistence } from './transaction/persistence.js';
75
+ export { durableWritesConfigSchema, durableWriteStoreSchema, pendingWriteSchema, } from './transactions/mutations/durableWriteStore.js';
76
+ export type { DurableWritesConfig, DurableWriteStore, PendingWrite, } from './transactions/mutations/durableWriteStore.js';
77
+ export { durableCommitEnvelopeSchema, } from './transaction/transactions/settlement/commitEnvelope.js';
78
+ export type { CommitOutboxScope, DurableCommitEnvelope, } from './transaction/transactions/settlement/commitEnvelope.js';
79
+ export { durableHttpCommitEnvelopeSchema, } from './transaction/transactions/settlement/httpCommitEnvelope.js';
80
+ export type { DurableHttpCommitEnvelope, } from './transaction/transactions/settlement/httpCommitEnvelope.js';
78
81
  import { Ablo } from './client/Ablo.js';
79
82
  export default Ablo;
80
83
  export { dataSource, sourceEventForOperation, signAbloSourceRequest, verifyAbloSourceRequest, } from './source/index.js';
81
84
  export { createSourceConnector, type SourceConnector, type SourceConnectorOptions, type ConnectorStatus, } from './source/connector.js';
82
85
  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';
86
+ 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';
87
+ export type { RequiredCapability } from './transaction/errors.js';
88
+ export type { ErrorCode, WireErrorCode, ErrorCategory, ErrorCodeSpec, RecoveryClass } from './transaction/errors.js';
89
+ export { errorEnvelope, statusForType } from './transaction/wire/errorEnvelope.js';
90
+ export type { ErrorEnvelope } from './transaction/wire/errorEnvelope.js';
91
+ export { WS_BEARER_SUBPROTOCOL_PREFIX, WS_SYNC_SUBPROTOCOL } from './transaction/auth/credentialSource.js';
92
+ export { ENVIRONMENTS, environmentSchema, normalizeEnvironment, environmentFromKeyPrefix, environmentToKeyPrefix, isSandboxEnvironment, } from './transaction/environment.js';
93
+ export type { Environment, KeyPrefixEnvironment } from './transaction/environment.js';
94
+ export { writeOptionsSchema, onStaleModeSchema, assertWriteOptions, } from './transaction/resources/writeOptionsSchema.js';
95
+ export type { WriteOptionsInput } from './transaction/resources/writeOptionsSchema.js';
96
+ export type { OnStaleMode } from './transaction/coordination/schema.js';
93
97
  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';
98
+ export { staleNotificationSchema, readDependencySchema } from './transaction/coordination/schema.js';
99
+ export { part } from './transaction/coordination/schema.js';
100
+ export type { ClaimPart } from './transaction/coordination/schema.js';
101
+ export type { ClaimField } from './transaction/resources/modelOperations.js';
102
+ export type { StaleNotification, ReadDependency } from './transaction/coordination/schema.js';
103
+ export { ClaimLog, formatClaim, formatConflict } from './coordination/ClaimLog.js';
104
+ export type { ClaimLogEntry } from './coordination/ClaimLog.js';
98
105
  export type { ClaimEvent, ConflictEvent, SyncObservabilityProvider, } from './interfaces/index.js';
99
- export { noopObservability } from './SyncEngineContext.js';
100
- export { IDBOpenTimeoutError, isStorageOpenTimeout } from './core/openIDBWithTimeout.js';
106
+ export { noopObservability } from './RuntimeContext.js';
107
+ export { IDBOpenTimeoutError, isStorageOpenTimeout } from './stores/openIDBWithTimeout.js';
108
+ export type { CommitLatencySample } from './transactions/mutations/commitLatency.js';
101
109
  export { PUBLIC_MODEL_VERBS, PUBLIC_LIST_OPTION_KEYS, PUBLIC_ABLO_OPTION_KEYS, } from './surface.js';
102
110
  export type { ModelVerb, ListOptionKey, AbloOptionKey } from './surface.js';
103
- export type { Register, DefaultSyncShape } from './types/global.js';
111
+ export type { Register, DefaultSyncShape } from './transaction/types/global.js';
104
112
  export { defineMutators } from './mutators/defineMutators.js';
105
113
  export { createTransaction, type Transaction } from './mutators/Transaction.js';
106
- export { deepEqual, stableStringify } from './utils/json.js';
114
+ export { deepEqual, stableStringify } from './transaction/utils/json.js';