@abloatai/ablo 0.34.1 → 0.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (483) hide show
  1. package/AGENTS.md +2 -1
  2. package/CHANGELOG.md +674 -5
  3. package/README.md +39 -22
  4. package/dist/BaseSyncedStore.d.ts +152 -44
  5. package/dist/BaseSyncedStore.js +300 -184
  6. package/dist/Database.d.ts +9 -24
  7. package/dist/Database.js +37 -22
  8. package/dist/InstanceCache.d.ts +25 -4
  9. package/dist/InstanceCache.js +48 -15
  10. package/dist/LazyReferenceCollection.d.ts +3 -3
  11. package/dist/LazyReferenceCollection.js +4 -4
  12. package/dist/Model.d.ts +6 -6
  13. package/dist/Model.js +10 -10
  14. package/dist/ModelRegistry.d.ts +4 -4
  15. package/dist/ModelRegistry.js +3 -3
  16. package/dist/{SyncEngineContext.d.ts → RuntimeContext.d.ts} +20 -13
  17. package/dist/{SyncEngineContext.js → RuntimeContext.js} +11 -12
  18. package/dist/SyncClient.d.ts +42 -32
  19. package/dist/SyncClient.js +166 -110
  20. package/dist/ai-sdk/coordinatedTool.d.ts +2 -2
  21. package/dist/ai-sdk/coordinatedTool.js +1 -1
  22. package/dist/ai-sdk/coordinationContext.d.ts +2 -2
  23. package/dist/ai-sdk/coordinationContext.js +1 -1
  24. package/dist/ai-sdk/wrap.d.ts +3 -3
  25. package/dist/ai-sdk/wrap.js +2 -2
  26. package/dist/auth/index.d.ts +1 -156
  27. package/dist/auth/index.js +8 -301
  28. package/dist/cli.cjs +3344 -1073
  29. package/dist/client/Ablo.d.ts +42 -287
  30. package/dist/client/Ablo.js +118 -963
  31. package/dist/client/abloClient.d.ts +309 -0
  32. package/dist/client/abloClient.js +13 -0
  33. package/dist/client/clientPrelude.d.ts +52 -0
  34. package/dist/client/clientPrelude.js +60 -0
  35. package/dist/client/consoleLogger.d.ts +2 -2
  36. package/dist/client/coreClient.d.ts +60 -0
  37. package/dist/client/coreClient.js +118 -0
  38. package/dist/client/createInternalComponents.d.ts +4 -4
  39. package/dist/client/createInternalComponents.js +9 -8
  40. package/dist/client/createModelProxy.d.ts +78 -373
  41. package/dist/client/createModelProxy.js +114 -86
  42. package/dist/client/humans.d.ts +48 -0
  43. package/dist/client/humans.js +52 -0
  44. package/dist/client/modelRegistration.d.ts +1 -1
  45. package/dist/client/modelRegistration.js +9 -9
  46. package/dist/client/options.d.ts +73 -17
  47. package/dist/client/reactiveEngine.d.ts +48 -0
  48. package/dist/client/reactiveEngine.js +910 -0
  49. package/dist/client/resourceTypes.d.ts +9 -250
  50. package/dist/client/resourceTypes.js +8 -5
  51. package/dist/client/schemaConfig.d.ts +4 -4
  52. package/dist/client/schemaConfig.js +6 -2
  53. package/dist/client/validateAbloOptions.d.ts +3 -2
  54. package/dist/client/validateAbloOptions.js +1 -1
  55. package/dist/client/wsMutationExecutor.d.ts +3 -3
  56. package/dist/client/wsMutationExecutor.js +3 -3
  57. package/dist/context.d.ts +9 -9
  58. package/dist/context.js +10 -9
  59. package/dist/coordination/ClaimLog.d.ts +26 -0
  60. package/dist/coordination/ClaimLog.js +32 -0
  61. package/dist/coordination/index.d.ts +1 -15
  62. package/dist/coordination/index.js +8 -31
  63. package/dist/core/DatabaseManager.js +1 -1
  64. package/dist/core/QueryView.d.ts +1 -1
  65. package/dist/core/QueryView.js +1 -1
  66. package/dist/core/StoreManager.d.ts +4 -23
  67. package/dist/core/StoreManager.js +5 -55
  68. package/dist/core/index.d.ts +2 -2
  69. package/dist/core/index.js +2 -2
  70. package/dist/core/storeContract.d.ts +2 -2
  71. package/dist/docs/catalog.d.ts +72 -0
  72. package/dist/docs/catalog.js +227 -0
  73. package/dist/docs/index.d.ts +10 -0
  74. package/dist/docs/index.js +10 -0
  75. package/dist/environment.d.ts +1 -40
  76. package/dist/environment.js +8 -37
  77. package/dist/index.d.ts +40 -34
  78. package/dist/index.js +26 -20
  79. package/dist/interfaces/index.d.ts +44 -134
  80. package/dist/keys/index.d.ts +1 -77
  81. package/dist/keys/index.js +8 -190
  82. package/dist/mutators/{RecordingTransaction.d.ts → RecordingMutation.d.ts} +4 -4
  83. package/dist/mutators/{RecordingTransaction.js → RecordingMutation.js} +2 -2
  84. package/dist/mutators/Transaction.d.ts +1 -1
  85. package/dist/mutators/Transaction.js +1 -1
  86. package/dist/mutators/UndoManager.d.ts +6 -6
  87. package/dist/mutators/UndoManager.js +5 -5
  88. package/dist/mutators/defineMutators.d.ts +3 -3
  89. package/dist/mutators/defineMutators.js +1 -1
  90. package/dist/mutators/inverseOp.js +2 -2
  91. package/dist/mutators/mutateActions.d.ts +3 -3
  92. package/dist/mutators/mutateActions.js +1 -1
  93. package/dist/mutators/readerActions.d.ts +1 -1
  94. package/dist/mutators/undoApply.d.ts +1 -1
  95. package/dist/mutators/undoApply.js +1 -1
  96. package/dist/policy/index.d.ts +2 -2
  97. package/dist/policy/index.js +1 -1
  98. package/dist/query/client.d.ts +2 -2
  99. package/dist/query/client.js +4 -4
  100. package/dist/query/types.d.ts +6 -41
  101. package/dist/query/types.js +2 -2
  102. package/dist/react/AbloProvider.d.ts +6 -8
  103. package/dist/react/AbloProvider.js +5 -7
  104. package/dist/react/context.d.ts +1 -1
  105. package/dist/react/context.js +1 -1
  106. package/dist/react/index.d.ts +5 -5
  107. package/dist/react/index.js +3 -3
  108. package/dist/react/internalContext.d.ts +1 -1
  109. package/dist/react/useAblo.d.ts +3 -3
  110. package/dist/react/useAblo.js +1 -1
  111. package/dist/react/useCurrentUserId.js +1 -1
  112. package/dist/react/useErrorListener.js +1 -1
  113. package/dist/react/useMutationFailureListener.d.ts +2 -2
  114. package/dist/react/useMutationFailureListener.js +1 -1
  115. package/dist/react/useMutators.d.ts +3 -3
  116. package/dist/react/useMutators.js +3 -3
  117. package/dist/react/useUndoScope.d.ts +5 -5
  118. package/dist/react/useUndoScope.js +1 -1
  119. package/dist/schema/coordination.d.ts +69 -10
  120. package/dist/schema/coordination.js +86 -9
  121. package/dist/schema/ddl.js +2 -2
  122. package/dist/schema/diff.d.ts +1 -1
  123. package/dist/schema/generate.js +1 -1
  124. package/dist/schema/index.d.ts +10 -10
  125. package/dist/schema/index.js +18 -18
  126. package/dist/schema/queries.d.ts +27 -27
  127. package/dist/schema/queries.js +23 -23
  128. package/dist/schema/select.d.ts +3 -3
  129. package/dist/schema/select.js +3 -3
  130. package/dist/schema/serialize.d.ts +15 -6
  131. package/dist/schema/serialize.js +17 -3
  132. package/dist/schema/sugar.d.ts +6 -7
  133. package/dist/schema/sugar.js +9 -12
  134. package/dist/schema/syncDeltaRow.d.ts +4 -152
  135. package/dist/schema/syncDeltaRow.js +4 -105
  136. package/dist/server/adapter.d.ts +18 -1
  137. package/dist/server/commit.d.ts +10 -16
  138. package/dist/server/index.d.ts +1 -1
  139. package/dist/server/index.js +1 -1
  140. package/dist/server/readConfig.d.ts +1 -1
  141. package/dist/source/adapters/drizzle.d.ts +1 -1
  142. package/dist/source/adapters/drizzle.js +2 -2
  143. package/dist/source/adapters/kysely.d.ts +1 -1
  144. package/dist/source/adapters/kysely.js +1 -1
  145. package/dist/source/adapters/kyselyMutationCore.d.ts +1 -1
  146. package/dist/source/adapters/kyselyMutationCore.js +2 -2
  147. package/dist/source/adapters/memory.js +1 -1
  148. package/dist/source/adapters/prisma.d.ts +8 -3
  149. package/dist/source/adapters/prisma.js +1 -1
  150. package/dist/source/connector.js +1 -1
  151. package/dist/source/connectorProtocol.d.ts +2 -8
  152. package/dist/source/connectorProtocol.js +3 -2
  153. package/dist/source/contract.d.ts +29 -17
  154. package/dist/source/contract.js +27 -22
  155. package/dist/source/factory.d.ts +1 -1
  156. package/dist/source/footprint.d.ts +111 -0
  157. package/dist/source/footprint.js +0 -0
  158. package/dist/source/idempotency.js +2 -2
  159. package/dist/source/index.d.ts +1 -0
  160. package/dist/source/index.js +3 -0
  161. package/dist/source/next.d.ts +1 -1
  162. package/dist/source/signing.d.ts +9 -2
  163. package/dist/source/signing.js +4 -1
  164. package/dist/source/types.d.ts +6 -4
  165. package/dist/source/types.js +1 -1
  166. package/dist/stores/ObjectStore.d.ts +1 -1
  167. package/dist/stores/SyncActionStore.d.ts +1 -1
  168. package/dist/stores/SyncActionStore.js +2 -10
  169. package/dist/stores/syncAction.d.ts +26 -0
  170. package/dist/stores/syncAction.js +16 -0
  171. package/dist/surface.d.ts +3 -3
  172. package/dist/surface.js +6 -4
  173. package/dist/sync/BootstrapFetcher.d.ts +123 -6
  174. package/dist/sync/BootstrapFetcher.js +492 -66
  175. package/dist/sync/ConnectionManager.d.ts +6 -198
  176. package/dist/sync/ConnectionManager.js +6 -677
  177. package/dist/sync/OnDemandLoader.d.ts +2 -2
  178. package/dist/sync/OnDemandLoader.js +60 -21
  179. package/dist/sync/SubscriptionManager.d.ts +13 -2
  180. package/dist/sync/SubscriptionManager.js +23 -5
  181. package/dist/sync/SyncWebSocket.d.ts +27 -510
  182. package/dist/sync/SyncWebSocket.js +76 -954
  183. package/dist/sync/awaitClaimGrant.d.ts +4 -44
  184. package/dist/sync/awaitClaimGrant.js +4 -109
  185. package/dist/sync/commitFrames.d.ts +6 -40
  186. package/dist/sync/commitFrames.js +6 -97
  187. package/dist/sync/contextPorts.d.ts +18 -0
  188. package/dist/sync/contextPorts.js +31 -0
  189. package/dist/sync/createClaimStream.d.ts +5 -49
  190. package/dist/sync/createClaimStream.js +5 -469
  191. package/dist/sync/createPresenceStream.d.ts +26 -4
  192. package/dist/sync/createPresenceStream.js +28 -20
  193. package/dist/sync/createSnapshot.d.ts +2 -2
  194. package/dist/sync/createSnapshot.js +1 -1
  195. package/dist/sync/credentialLifecycle.d.ts +5 -173
  196. package/dist/sync/credentialLifecycle.js +5 -320
  197. package/dist/sync/deltaPipeline.d.ts +1 -1
  198. package/dist/sync/participants.d.ts +5 -4
  199. package/dist/sync/participants.js +29 -22
  200. package/dist/sync/schemaDrift.d.ts +55 -0
  201. package/dist/sync/schemaDrift.js +53 -0
  202. package/dist/sync/schemas.d.ts +21 -32
  203. package/dist/sync/schemas.js +26 -17
  204. package/dist/sync/syncPlan.d.ts +3 -3
  205. package/dist/sync/wsFrameHandlers.d.ts +6 -114
  206. package/dist/sync/wsFrameHandlers.js +6 -392
  207. package/dist/testing/fixtures/bootstrap.d.ts +1 -1
  208. package/dist/testing/fixtures/deltas.d.ts +1 -1
  209. package/dist/testing/fixtures/httpResponses.d.ts +70 -0
  210. package/dist/testing/fixtures/httpResponses.js +90 -0
  211. package/dist/testing/fixtures/models.js +1 -1
  212. package/dist/testing/helpers/wait.js +1 -1
  213. package/dist/testing/mocks/MockMutationExecutor.d.ts +2 -2
  214. package/dist/testing/mocks/MockMutationExecutor.js +8 -14
  215. package/dist/testing/mocks/MockSyncContext.d.ts +11 -11
  216. package/dist/testing/mocks/MockSyncContext.js +10 -9
  217. package/dist/testing/mocks/MockSyncStore.js +1 -1
  218. package/dist/testing/mocks/MockWebSocket.d.ts +2 -2
  219. package/dist/transaction/ablo.d.ts +88 -0
  220. package/dist/transaction/ablo.js +33 -0
  221. package/dist/{client/auth.d.ts → transaction/auth/apiKey.d.ts} +43 -8
  222. package/dist/{client/auth.js → transaction/auth/apiKey.js} +19 -0
  223. package/dist/transaction/auth/bootstrapScope.d.ts +15 -0
  224. package/dist/transaction/auth/bootstrapScope.js +1 -0
  225. package/dist/transaction/auth/capability.d.ts +177 -0
  226. package/dist/transaction/auth/capability.js +199 -0
  227. package/dist/{auth → transaction/auth}/credentialSource.d.ts +8 -1
  228. package/dist/{client → transaction/auth}/identity.d.ts +8 -7
  229. package/dist/{client → transaction/auth}/identity.js +1 -1
  230. package/dist/transaction/auth/index.d.ts +162 -0
  231. package/dist/transaction/auth/index.js +304 -0
  232. package/dist/{auth → transaction/auth}/schemas.d.ts +1 -1
  233. package/dist/{auth → transaction/auth}/schemas.js +13 -13
  234. package/dist/{client → transaction/auth}/sessionMint.d.ts +8 -8
  235. package/dist/{client → transaction/auth}/sessionMint.js +4 -7
  236. package/dist/transaction/coordination/awaitClaimGrant.d.ts +49 -0
  237. package/dist/transaction/coordination/awaitClaimGrant.js +112 -0
  238. package/dist/transaction/coordination/claimMeta.d.ts +49 -0
  239. package/dist/transaction/coordination/claimMeta.js +52 -0
  240. package/dist/transaction/coordination/createClaimStream.d.ts +64 -0
  241. package/dist/transaction/coordination/createClaimStream.js +475 -0
  242. package/dist/transaction/coordination/events.d.ts +74 -0
  243. package/dist/transaction/coordination/events.js +7 -0
  244. package/dist/transaction/coordination/index.d.ts +19 -0
  245. package/dist/transaction/coordination/index.js +44 -0
  246. package/dist/transaction/coordination/locator.d.ts +83 -0
  247. package/dist/transaction/coordination/locator.js +82 -0
  248. package/dist/transaction/coordination/schema.d.ts +1473 -0
  249. package/dist/{coordination → transaction/coordination}/schema.js +490 -55
  250. package/dist/transaction/coordination/targetConflict.d.ts +2 -0
  251. package/dist/transaction/coordination/targetConflict.js +103 -0
  252. package/dist/{coordination → transaction/coordination}/trace.d.ts +7 -18
  253. package/dist/{coordination → transaction/coordination}/trace.js +18 -25
  254. package/dist/transaction/durableWrites.d.ts +62 -0
  255. package/dist/{client → transaction}/durableWrites.js +28 -3
  256. package/dist/transaction/environment.d.ts +105 -0
  257. package/dist/transaction/environment.js +108 -0
  258. package/dist/{errorCodes.d.ts → transaction/errorCodes.d.ts} +11 -11
  259. package/dist/{errorCodes.js → transaction/errorCodes.js} +35 -12
  260. package/dist/{errors.d.ts → transaction/errors.d.ts} +37 -13
  261. package/dist/{errors.js → transaction/errors.js} +85 -16
  262. package/dist/transaction/index.d.ts +20 -0
  263. package/dist/transaction/index.js +20 -0
  264. package/dist/transaction/keys/index.d.ts +87 -0
  265. package/dist/transaction/keys/index.js +207 -0
  266. package/dist/transaction/log/syncDeltaRow.d.ts +158 -0
  267. package/dist/transaction/log/syncDeltaRow.js +95 -0
  268. package/dist/{sync/syncPosition.d.ts → transaction/logPosition.d.ts} +22 -8
  269. package/dist/{sync/syncPosition.js → transaction/logPosition.js} +15 -6
  270. package/dist/transaction/logger.d.ts +16 -0
  271. package/dist/transaction/logger.js +7 -0
  272. package/dist/transaction/observability.d.ts +53 -0
  273. package/dist/transaction/observability.js +19 -0
  274. package/dist/transaction/plugin.d.ts +192 -0
  275. package/dist/transaction/plugin.js +87 -0
  276. package/dist/{policy → transaction/policy}/types.d.ts +3 -3
  277. package/dist/{policy → transaction/policy}/types.js +2 -0
  278. package/dist/transaction/resources/httpResources.d.ts +266 -0
  279. package/dist/transaction/resources/httpResources.js +7 -0
  280. package/dist/transaction/resources/modelOperations.d.ts +319 -0
  281. package/dist/transaction/resources/modelOperations.js +12 -0
  282. package/dist/transaction/resources/mutationOptions.d.ts +66 -0
  283. package/dist/transaction/resources/mutationOptions.js +9 -0
  284. package/dist/transaction/resources/where.d.ts +85 -0
  285. package/dist/transaction/resources/where.js +70 -0
  286. package/dist/{client → transaction/resources}/writeOptionsSchema.d.ts +2 -6
  287. package/dist/{client → transaction/resources}/writeOptionsSchema.js +9 -5
  288. package/dist/{schema → transaction/schema}/field.d.ts +5 -5
  289. package/dist/{schema → transaction/schema}/field.js +5 -5
  290. package/dist/transaction/schema/loadStrategy.d.ts +45 -0
  291. package/dist/transaction/schema/loadStrategy.js +46 -0
  292. package/dist/{schema → transaction/schema}/model.d.ts +50 -35
  293. package/dist/{schema → transaction/schema}/model.js +30 -20
  294. package/dist/transaction/schema/openapi.d.ts +57 -0
  295. package/dist/transaction/schema/openapi.js +340 -0
  296. package/dist/{schema → transaction/schema}/relation.d.ts +14 -14
  297. package/dist/{schema → transaction/schema}/relation.js +7 -7
  298. package/dist/{schema → transaction/schema}/residency.d.ts +0 -9
  299. package/dist/{schema → transaction/schema}/residency.js +0 -5
  300. package/dist/{schema → transaction/schema}/roles.d.ts +5 -5
  301. package/dist/{schema → transaction/schema}/roles.js +5 -5
  302. package/dist/{schema → transaction/schema}/schema.d.ts +12 -10
  303. package/dist/{schema → transaction/schema}/schema.js +4 -3
  304. package/dist/{schema → transaction/schema}/tenancy.d.ts +1 -1
  305. package/dist/{schema → transaction/schema}/tenancy.js +7 -4
  306. package/dist/transaction/transactionLayer.d.ts +82 -0
  307. package/dist/transaction/transactionLayer.js +24 -0
  308. package/dist/{transactions → transaction/transactions/settlement}/commitEnvelope.d.ts +4 -5
  309. package/dist/{transactions → transaction/transactions/settlement}/commitEnvelope.js +9 -13
  310. package/dist/{transactions → transaction/transactions/settlement}/httpCommitEnvelope.d.ts +9 -2
  311. package/dist/{transactions → transaction/transactions/settlement}/httpCommitEnvelope.js +5 -9
  312. package/dist/{transactions/durableWriteStore.d.ts → transaction/transactions/settlement/pendingWrite.d.ts} +10 -36
  313. package/dist/transaction/transactions/settlement/pendingWrite.js +20 -0
  314. package/dist/transaction/transport/commitFrames.d.ts +90 -0
  315. package/dist/transaction/transport/commitFrames.js +134 -0
  316. package/dist/transaction/transport/connectionManager.d.ts +215 -0
  317. package/dist/transaction/transport/connectionManager.js +673 -0
  318. package/dist/transaction/transport/credentialLifecycle.d.ts +177 -0
  319. package/dist/transaction/transport/credentialLifecycle.js +324 -0
  320. package/dist/{sync → transaction/transport}/heartbeat.d.ts +3 -1
  321. package/dist/{sync → transaction/transport}/heartbeat.js +6 -4
  322. package/dist/{client → transaction/transport}/httpClient.d.ts +59 -16
  323. package/dist/{client → transaction/transport}/httpClient.js +5 -5
  324. package/dist/transaction/transport/httpOptions.d.ts +33 -0
  325. package/dist/transaction/transport/httpOptions.js +12 -0
  326. package/dist/{client → transaction/transport}/httpTransport.js +171 -85
  327. package/dist/{sync/NetworkProbe.d.ts → transaction/transport/networkProbe.d.ts} +7 -4
  328. package/dist/{sync/NetworkProbe.js → transaction/transport/networkProbe.js} +14 -13
  329. package/dist/transaction/transport/wsFrameHandlers.d.ts +128 -0
  330. package/dist/transaction/transport/wsFrameHandlers.js +429 -0
  331. package/dist/transaction/transport/wsTransport.d.ts +576 -0
  332. package/dist/transaction/transport/wsTransport.js +1017 -0
  333. package/dist/transaction/types/assertExact.d.ts +17 -0
  334. package/dist/transaction/types/assertExact.js +1 -0
  335. package/dist/{types → transaction/types}/global.d.ts +17 -2
  336. package/dist/{types → transaction/types}/global.js +2 -1
  337. package/dist/{types → transaction/types}/index.d.ts +14 -46
  338. package/dist/{types → transaction/types}/index.js +7 -16
  339. package/dist/{types → transaction/types}/streams.d.ts +63 -45
  340. package/dist/{utils → transaction/utils}/json.d.ts +18 -0
  341. package/dist/transaction/utils/json.js +276 -0
  342. package/dist/transaction/wire/accountResponses.d.ts +351 -0
  343. package/dist/transaction/wire/accountResponses.js +255 -0
  344. package/dist/transaction/wire/auth.d.ts +49 -0
  345. package/dist/transaction/wire/auth.js +57 -0
  346. package/dist/transaction/wire/claimEvent.d.ts +76 -0
  347. package/dist/transaction/wire/claimEvent.js +73 -0
  348. package/dist/transaction/wire/claims.d.ts +463 -0
  349. package/dist/transaction/wire/claims.js +229 -0
  350. package/dist/{wire → transaction/wire}/commit.d.ts +125 -193
  351. package/dist/{wire → transaction/wire}/commit.js +68 -47
  352. package/dist/{wire → transaction/wire}/delta.d.ts +66 -17
  353. package/dist/{wire → transaction/wire}/delta.js +37 -13
  354. package/dist/transaction/wire/errorEnvelope.d.ts +72 -0
  355. package/dist/{wire → transaction/wire}/errorEnvelope.js +36 -5
  356. package/dist/transaction/wire/feedCursor.d.ts +60 -0
  357. package/dist/transaction/wire/feedCursor.js +82 -0
  358. package/dist/transaction/wire/feedEvent.d.ts +177 -0
  359. package/dist/transaction/wire/feedEvent.js +39 -0
  360. package/dist/transaction/wire/frames.d.ts +194 -0
  361. package/dist/transaction/wire/frames.js +50 -0
  362. package/dist/transaction/wire/inboundFrames.d.ts +552 -0
  363. package/dist/transaction/wire/inboundFrames.js +116 -0
  364. package/dist/transaction/wire/index.d.ts +50 -0
  365. package/dist/transaction/wire/index.js +74 -0
  366. package/dist/{wire → transaction/wire}/listEnvelope.d.ts +13 -14
  367. package/dist/transaction/wire/listEnvelope.js +42 -0
  368. package/dist/transaction/wire/modelResponses.d.ts +85 -0
  369. package/dist/transaction/wire/modelResponses.js +43 -0
  370. package/dist/transactions/{TransactionQueue.d.ts → mutations/MutationQueue.d.ts} +79 -38
  371. package/dist/transactions/{TransactionQueue.js → mutations/MutationQueue.js} +110 -59
  372. package/dist/transactions/{TransactionStore.d.ts → mutations/MutationStore.d.ts} +8 -8
  373. package/dist/transactions/{TransactionStore.js → mutations/MutationStore.js} +2 -2
  374. package/dist/transactions/{coalesceRules.d.ts → mutations/coalesceRules.d.ts} +10 -10
  375. package/dist/transactions/{coalesceRules.js → mutations/coalesceRules.js} +1 -1
  376. package/dist/transactions/mutations/commitLatency.d.ts +52 -0
  377. package/dist/transactions/mutations/commitLatency.js +130 -0
  378. package/dist/transactions/{commitOutboxStore.d.ts → mutations/commitOutboxStore.d.ts} +1 -5
  379. package/dist/transactions/{commitOutboxStore.js → mutations/commitOutboxStore.js} +1 -1
  380. package/dist/transactions/{commitPayload.d.ts → mutations/commitPayload.d.ts} +16 -15
  381. package/dist/transactions/{commitPayload.js → mutations/commitPayload.js} +12 -12
  382. package/dist/transactions/{deltaConfirmation.d.ts → mutations/deltaConfirmation.d.ts} +11 -11
  383. package/dist/transactions/{deltaConfirmation.js → mutations/deltaConfirmation.js} +7 -7
  384. package/dist/transactions/mutations/durableWriteStore.d.ts +14 -0
  385. package/dist/transactions/mutations/durableWriteStore.js +12 -0
  386. package/dist/transactions/{optimisticApply.d.ts → mutations/optimisticApply.d.ts} +7 -7
  387. package/dist/transactions/{replayValidation.d.ts → mutations/replayValidation.d.ts} +3 -3
  388. package/dist/transactions/{replayValidation.js → mutations/replayValidation.js} +4 -3
  389. package/dist/utils/mobxSetup.d.ts +1 -1
  390. package/dist/utils/mobxSetup.js +5 -2
  391. package/dist/webhooks/events.d.ts +2 -2
  392. package/dist/wire/index.d.ts +1 -34
  393. package/dist/wire/index.js +8 -49
  394. package/docs/agent-messaging.md +3 -3
  395. package/docs/agents.md +19 -12
  396. package/docs/api-keys.md +8 -4
  397. package/docs/api.md +22 -18
  398. package/docs/audit.md +2 -0
  399. package/docs/cli.md +31 -3
  400. package/docs/client-behavior.md +8 -6
  401. package/docs/concurrency-convention.md +30 -24
  402. package/docs/coordination.md +48 -38
  403. package/docs/data-sources.md +3 -1
  404. package/docs/debugging.md +5 -3
  405. package/docs/deployment.md +267 -0
  406. package/docs/examples/agent-human.md +49 -42
  407. package/docs/examples/ai-sdk-tool.md +69 -44
  408. package/docs/examples/existing-python-backend.md +8 -6
  409. package/docs/examples/nextjs.md +129 -47
  410. package/docs/examples/scoped-agent.md +45 -44
  411. package/docs/examples/server-agent.md +46 -26
  412. package/docs/groups.md +32 -29
  413. package/docs/guarantees.md +4 -2
  414. package/docs/how-it-works.md +9 -7
  415. package/docs/idempotency.md +126 -0
  416. package/docs/identity.md +58 -54
  417. package/docs/index.md +172 -86
  418. package/docs/integration-guide.md +17 -16
  419. package/docs/interaction-model.md +6 -4
  420. package/docs/mcp.md +41 -16
  421. package/docs/migration.md +63 -5
  422. package/docs/operating-on-your-database.md +3 -1
  423. package/docs/projects.md +2 -0
  424. package/docs/quickstart.md +22 -5
  425. package/docs/react.md +12 -10
  426. package/docs/schema-contract.md +5 -3
  427. package/docs/session-settings.md +108 -0
  428. package/docs/sessions.md +3 -1
  429. package/docs/webhooks.md +3 -1
  430. package/llms.txt +47 -17
  431. package/package.json +10 -8
  432. package/dist/agent/Agent.d.ts +0 -366
  433. package/dist/agent/Agent.js +0 -514
  434. package/dist/agent/index.d.ts +0 -115
  435. package/dist/agent/index.js +0 -128
  436. package/dist/agent/session.d.ts +0 -93
  437. package/dist/agent/session.js +0 -149
  438. package/dist/agent/types.d.ts +0 -68
  439. package/dist/agent/types.js +0 -9
  440. package/dist/client/durableWrites.d.ts +0 -21
  441. package/dist/coordination/schema.d.ts +0 -722
  442. package/dist/schema/openapi.d.ts +0 -29
  443. package/dist/schema/openapi.js +0 -124
  444. package/dist/transactions/durableWriteStore.js +0 -30
  445. package/dist/utils/json.js +0 -88
  446. package/dist/wire/errorEnvelope.d.ts +0 -55
  447. package/dist/wire/frames.d.ts +0 -197
  448. package/dist/wire/frames.js +0 -49
  449. package/dist/wire/listEnvelope.js +0 -18
  450. /package/dist/{client → transaction/auth}/credentialEndpoint.d.ts +0 -0
  451. /package/dist/{client → transaction/auth}/credentialEndpoint.js +0 -0
  452. /package/dist/{auth → transaction/auth}/credentialPolicy.d.ts +0 -0
  453. /package/dist/{auth → transaction/auth}/credentialPolicy.js +0 -0
  454. /package/dist/{auth → transaction/auth}/credentialSource.js +0 -0
  455. /package/dist/{client → transaction/auth}/hostedEndpoints.d.ts +0 -0
  456. /package/dist/{client → transaction/auth}/hostedEndpoints.js +0 -0
  457. /package/dist/{client → transaction/coordination}/claimHeartbeatLoop.d.ts +0 -0
  458. /package/dist/{client → transaction/coordination}/claimHeartbeatLoop.js +0 -0
  459. /package/dist/{client → transaction}/persistence.d.ts +0 -0
  460. /package/dist/{client → transaction}/persistence.js +0 -0
  461. /package/dist/{client → transaction/resources}/functionalUpdate.d.ts +0 -0
  462. /package/dist/{client → transaction/resources}/functionalUpdate.js +0 -0
  463. /package/dist/{transactions → transaction/transactions/settlement}/idempotencyKey.d.ts +0 -0
  464. /package/dist/{transactions → transaction/transactions/settlement}/idempotencyKey.js +0 -0
  465. /package/dist/{client → transaction/transport}/httpTransport.d.ts +0 -0
  466. /package/dist/{types → transaction/types}/modelData.d.ts +0 -0
  467. /package/dist/{types → transaction/types}/modelData.js +0 -0
  468. /package/dist/{types → transaction/types}/participant.d.ts +0 -0
  469. /package/dist/{types → transaction/types}/participant.js +0 -0
  470. /package/dist/{types → transaction/types}/streams.js +0 -0
  471. /package/dist/{utils → transaction/utils}/asyncIterator.d.ts +0 -0
  472. /package/dist/{utils → transaction/utils}/asyncIterator.js +0 -0
  473. /package/dist/{utils → transaction/utils}/duration.d.ts +0 -0
  474. /package/dist/{utils → transaction/utils}/duration.js +0 -0
  475. /package/dist/{wire → transaction/wire}/bootstrapReason.d.ts +0 -0
  476. /package/dist/{wire → transaction/wire}/bootstrapReason.js +0 -0
  477. /package/dist/{wire → transaction/wire}/protocol.d.ts +0 -0
  478. /package/dist/{wire → transaction/wire}/protocol.js +0 -0
  479. /package/dist/{wire → transaction/wire}/protocolVersion.d.ts +0 -0
  480. /package/dist/{wire → transaction/wire}/protocolVersion.js +0 -0
  481. /package/dist/transactions/{UnconfirmedWrites.d.ts → mutations/UnconfirmedWrites.d.ts} +0 -0
  482. /package/dist/transactions/{UnconfirmedWrites.js → mutations/UnconfirmedWrites.js} +0 -0
  483. /package/dist/transactions/{optimisticApply.js → mutations/optimisticApply.js} +0 -0
@@ -1,107 +1,6 @@
1
1
  /**
2
- * Zod schemas that describe the `sync_deltas` storage row the durable record of
3
- * one committed change. The row is split into three slices by the concern each one
4
- * serves:
5
- *
6
- * - {@link syncDeltaCoreSchema} — the sync-protocol slice: everything a client
7
- * needs to reconstruct the change, plus the tenant key. This is a portable
8
- * payload shape; it is not a statement that the row is physically stored in
9
- * the customer's database.
10
- * - {@link deltaAttributionSchema} — who made the change, and on whose authority.
11
- * - {@link deltaProvenanceSchema} — which AI task, if any, produced it.
12
- *
13
- * {@link syncDeltaRowSchema} composes all three into the full stored row.
14
- * {@link DELTA_DATA_CLASSIFICATION} states which slices contain customer data,
15
- * while {@link DELTA_PHYSICAL_STORAGE} states where the runtime persists them.
16
- * Keeping those axes separate prevents a portable schema slice from being cited
17
- * incorrectly as a physical-residency guarantee.
18
- *
19
- * This is the stored shape. The delta broadcast to clients is a narrower projection
20
- * of it — see {@link import('../wire/delta.js').syncDeltaWireCoreSchema} — and
21
- * the field names here mirror those on that wire delta.
2
+ * Compatibility entry point for the durable `sync_deltas` row contract, which
3
+ * is owned by the transaction layer. The schema barrel continues to re-export
4
+ * this path so existing `@abloatai/ablo/schema` consumers do not change.
22
5
  */
23
- import { z } from 'zod';
24
- import { participantKindSchema, confirmationStateSchema } from '../wire/delta.js';
25
- // ── Enumerations that mirror the corresponding Postgres enum types ────────────
26
- // `participant_kind` and `confirmation_state` are shared with the wire delta and
27
- // live at the wire layer (see `../wire/delta.js`); they are re-exported here so
28
- // code that imports them from `schema` keeps resolving.
29
- export { participantKindSchema, confirmationStateSchema } from '../wire/delta.js';
30
- /** `backfill_provenance` */
31
- export const backfillProvenanceSchema = z.enum(['exact', 'inferred', 'unknown']);
32
- /** A delta payload: the full post-mutation row (or null for deletes). */
33
- const deltaDataSchema = z.record(z.string(), z.unknown()).nullable();
34
- // ── Core — the sync-protocol slice ────────────────────────────────────────────
35
- /**
36
- * Everything a client needs to materialize the change, plus the tenant key. This
37
- * is the portable shape an authoritative WAL change or endpoint event carries.
38
- * The runtime persists the resulting full row in Ablo's tenant-scoped ordered
39
- * sync log; it is not written atomically with a direct application-row mutation.
40
- * `id`, `createdAt`, and `syncGroups` are assigned when the source change is
41
- * appended, so they are optional at the ingestion boundary.
42
- */
43
- export const syncDeltaCoreSchema = z.object({
44
- /** Monotonically increasing sync id, assigned by the server when the delta is appended; absent on an outbox marker. */
45
- id: z.union([z.bigint(), z.number()]).optional(),
46
- /** The `action_type` column: a single character, `I` (insert), `U` (update), or `D` (delete). */
47
- actionType: z.string().min(1).max(1),
48
- modelName: z.string().min(1),
49
- modelId: z.string().min(1),
50
- data: deltaDataSchema,
51
- previousData: deltaDataSchema.optional(),
52
- /** Routing keys that decide which subscribers receive this delta; computed by the server at append time. */
53
- syncGroups: z.array(z.string()).optional(),
54
- /** The committing organization id — the coarse-grained tenant-isolation boundary. */
55
- organizationId: z.string().nullable(),
56
- /** ISO 8601 timestamp, assigned by the server when the delta is appended. */
57
- createdAt: z.string().optional(),
58
- transactionId: z.string().nullable(),
59
- /**
60
- * Stable identity of the authoritative WAL row or endpoint event. It is
61
- * nullable for hosted/legacy rows and is never exposed as the optimistic
62
- * client transaction id.
63
- */
64
- sourceChangeId: z.string().min(1).nullable().optional(),
65
- });
66
- // ── Attribution — who made the change, and on whose authority ─────────────────
67
- export const deltaAttributionSchema = z.object({
68
- /** The acting participant, recorded as a single column for compatibility; the structured pair below is the richer form. */
69
- createdBy: z.string().nullable(),
70
- actorId: z.string().nullable(),
71
- actorKind: participantKindSchema.nullable(),
72
- onBehalfOfId: z.string().nullable(),
73
- onBehalfOfKind: participantKindSchema.nullable(),
74
- capabilityId: z.string().nullable(),
75
- delegationChainRootUserId: z.string().nullable().optional(),
76
- confirmationState: confirmationStateSchema.nullable(),
77
- backfillProvenance: backfillProvenanceSchema.nullable(),
78
- });
79
- // ── Provenance — which AI task produced the change ────────────────────────────
80
- export const deltaProvenanceSchema = z.object({
81
- /** Foreign key to the task record for the AI turn that produced this commit; null when no task applies. */
82
- causedByTaskId: z.string().nullable(),
83
- });
84
- // ── Full stored row, classification, and physical storage ─────────────────────
85
- /** The complete `sync_deltas` row: core, attribution, and provenance combined. */
86
- export const syncDeltaRowSchema = syncDeltaCoreSchema
87
- .extend(deltaAttributionSchema.shape)
88
- .extend(deltaProvenanceSchema.shape);
89
- /** Which slices contain retained customer row data versus control metadata. */
90
- export const DELTA_DATA_CLASSIFICATION = {
91
- core: 'customer-data',
92
- attribution: 'control-metadata',
93
- provenance: 'control-metadata',
94
- };
95
- /**
96
- * Where the current runtime physically persists each slice. All three live in
97
- * Ablo's tenant-scoped `sync_deltas` log. `core` contains full post-change row
98
- * payloads (and optional previous payloads), so `control` here must not be read
99
- * as "metadata only."
100
- */
101
- export const DELTA_PHYSICAL_STORAGE = {
102
- core: 'control',
103
- attribution: 'control',
104
- provenance: 'control',
105
- };
106
- /** @deprecated Use `DELTA_PHYSICAL_STORAGE`; classification is a separate axis. */
107
- export const DELTA_RESIDENCY = DELTA_PHYSICAL_STORAGE;
6
+ export * from '../transaction/log/syncDeltaRow.js';
@@ -16,7 +16,7 @@
16
16
  * database row that the rest of the engine reads and writes.
17
17
  */
18
18
  import type { SourceListQuery, SourceOperation, SourceRequestContext } from '../source/index.js';
19
- import type { ServerSyncDelta } from '../wire/delta.js';
19
+ import type { ServerSyncDelta } from '../transaction/wire/delta.js';
20
20
  import type { BootstrapModel } from './readConfig.js';
21
21
  import type { CommitContext, CommitResult } from './commit.js';
22
22
  import type { StorageMode } from './storageMode.js';
@@ -41,6 +41,12 @@ export type ReadResult = {
41
41
  readonly models: Record<string, Row[]>;
42
42
  /** Models whose read failed (partial success), if any. */
43
43
  readonly failedModels?: string[];
44
+ /**
45
+ * Present when a paged read (`ReadRequest.page`) stopped at its row
46
+ * limit with rows remaining: pass it back as the next page's cursor.
47
+ * Absent on the final page and on unpaged reads.
48
+ */
49
+ readonly nextCursor?: string;
44
50
  } | {
45
51
  readonly kind: 'query';
46
52
  readonly rows: readonly Row[];
@@ -93,6 +99,17 @@ export type ReadRequest = {
93
99
  readonly models: readonly BootstrapModel[];
94
100
  readonly requestedModels?: readonly string[];
95
101
  readonly scope?: SourceRequestContext;
102
+ /**
103
+ * Keyset pagination for a SINGLE-model read (`requestedModels` names
104
+ * exactly one model): return at most `limit` rows, starting after the
105
+ * row whose id equals `cursor`. The result carries `nextCursor` while
106
+ * rows remain. Ignored for multi-model reads and by adapters whose
107
+ * backend pages upstream on its own.
108
+ */
109
+ readonly page?: {
110
+ readonly cursor?: string;
111
+ readonly limit: number;
112
+ };
96
113
  } | {
97
114
  readonly kind: 'query';
98
115
  readonly model: string;
@@ -14,10 +14,10 @@
14
14
  * rather than being kept in step by hand.
15
15
  */
16
16
  import type { ParticipantKind, ConfirmationState } from '../schema/syncDeltaRow.js';
17
- import type { ParticipantRef } from '../wire/delta.js';
18
- import type { CommitExecutionResultInput } from '../wire/commit.js';
19
- import type { Environment } from '../environment.js';
20
- import type { ReadDependency, TrackDependency } from '../coordination/schema.js';
17
+ import type { ParticipantRef } from '../transaction/wire/delta.js';
18
+ import type { CommitExecutionResultInput } from '../transaction/wire/commit.js';
19
+ import type { Environment } from '../transaction/environment.js';
20
+ import type { ReadDependency, TrackDependency } from '../transaction/coordination/schema.js';
21
21
  export interface CommitContext {
22
22
  participantId: string;
23
23
  /**
@@ -45,7 +45,7 @@ export interface CommitContext {
45
45
  * The sync groups this participant subscribes to, taken from the connection
46
46
  * upgrade or the capability token. Each is appended to every delta's `sync_groups`
47
47
  * so that writes fan out to subscribers of entity-level groups (such as
48
- * `deck:abc`), not only the default `org:X` and `user:Y` groups. When omitted, the
48
+ * `report:abc`), not only the default `org:X` and `user:Y` groups. When omitted, the
49
49
  * commit fans out to just the organization and user groups.
50
50
  */
51
51
  syncGroups?: readonly string[];
@@ -84,13 +84,7 @@ export interface CommitContext {
84
84
  */
85
85
  confirmationState?: ConfirmationState;
86
86
  /**
87
- * Optional foreign key to the task that caused the change, written to the
88
- * `caused_by_task_id` column when present. Validated when set; clients typically
89
- * leave it null and let attribution ride on the actor and capability instead.
90
- */
91
- causedByTaskId?: string | null;
92
- /**
93
- * Read dependencies for the whole batch. The committer declares the rows or groups
87
+ * The premise for the whole batch. The committer declares the rows or groups
94
88
  * it read to form this batch; the engine checks that none of them changed since
95
89
  * each entry's `readAt` timestamp and applies that entry's `onStale` disposition
96
90
  * across the batch. This differs from the per-operation `readAt` guard, which
@@ -98,10 +92,10 @@ export interface CommitContext {
98
92
  */
99
93
  reads?: ReadDependency[] | null;
100
94
  /**
101
- * Durable read-dependencies to persist for this commit's participant. Each entry
102
- * is kept in `track_dependencies` and re-checked against every future delta; a
103
- * later match opens a `StaleNotification` delivered out of band. Distinct from
104
- * `reads`, which is checked once here and discarded.
95
+ * Durable premises to persist for this commit's participant. Each entry is
96
+ * kept in `track_dependencies` and re-checked against every future delta; a
97
+ * later match opens a `StaleNotification` delivered out of band. Distinct
98
+ * from `reads`, which is checked once here and discarded.
105
99
  */
106
100
  track?: TrackDependency[] | null;
107
101
  }
@@ -9,6 +9,6 @@
9
9
  */
10
10
  export type { Row, ReadResult, SyncCursor, DataAdapterCapabilities, ProposalResult, ReadRequest, ChangeSet, SyncResult, DataAdapter, ProposableDataAdapter, AdapterResolver, } from './adapter.js';
11
11
  export type { CommitContext, CommitResult } from './commit.js';
12
- export { commitExecutionResultSchema } from '../wire/commit.js';
12
+ export { commitExecutionResultSchema } from '../transaction/wire/commit.js';
13
13
  export { storageModeSchema, type StorageMode } from './storageMode.js';
14
14
  export type { ColumnOverride, BootstrapModel } from './readConfig.js';
@@ -1,2 +1,2 @@
1
- export { commitExecutionResultSchema } from '../wire/commit.js';
1
+ export { commitExecutionResultSchema } from '../transaction/wire/commit.js';
2
2
  export { storageModeSchema } from './storageMode.js';
@@ -23,7 +23,7 @@ export interface BootstrapModel {
23
23
  /**
24
24
  * The schema key used by source endpoints. `name` stays the wire and result model
25
25
  * name (usually the typename), while source handlers are keyed by the developer's
26
- * schema key, such as `files` or `slideLayers`.
26
+ * schema key, such as `files` or `blocks`.
27
27
  */
28
28
  sourceModel?: string;
29
29
  table: string;
@@ -35,7 +35,7 @@
35
35
  */
36
36
  import { type SQL } from 'drizzle-orm';
37
37
  import type { DataSourceAdapter, Row } from '../adapter.js';
38
- import type { Schema, SchemaRecord } from '../../schema/schema.js';
38
+ import type { Schema, SchemaRecord } from '../../transaction/schema/schema.js';
39
39
  /** The subset of a Drizzle database/transaction handle the adapter calls. */
40
40
  export interface DrizzleLike {
41
41
  execute(query: SQL): Promise<DrizzleExecuteResult>;
@@ -33,14 +33,14 @@
33
33
  * which keeps the adapter one small, fully typed unit with no per-driver builder
34
34
  * generics.
35
35
  */
36
- import { AbloValidationError } from '../../errors.js';
36
+ import { AbloValidationError } from '../../transaction/errors.js';
37
37
  import { sql } from 'drizzle-orm';
38
38
  import { outboxEventSchema } from '../contract.js';
39
39
  import { adapterTableMigrations } from '../migrations.js';
40
40
  import { assertSourceIdempotencyIntent, assertSourceIdempotencyRetention, SOURCE_IDEMPOTENCY_RETENTION, sourceChangeIntentHash, } from '../idempotency.js';
41
41
  import { toSchemaJSON } from '../../schema/serialize.js';
42
42
  import { camelToSnake, snakeToCamel } from '../../schema/ddl.js';
43
- import { tenancyColumn } from '../../schema/tenancy.js';
43
+ import { tenancyColumn } from '../../transaction/schema/tenancy.js';
44
44
  import { ABLO_POSTGRES_COMMIT_ECHO_PREFIX } from '../types.js';
45
45
  function rowsOf(result) {
46
46
  return Array.isArray(result) ? result : result.rows;
@@ -16,7 +16,7 @@
16
16
  * If the owner rolls back, the waiter acquires the reservation and performs the
17
17
  * mutation. This gives same-key concurrency one database arbiter and one effect.
18
18
  */
19
- import type { Schema, SchemaRecord } from '../../schema/schema.js';
19
+ import type { Schema, SchemaRecord } from '../../transaction/schema/schema.js';
20
20
  import type { DataSourceAdapter, MutationAdapter } from '../adapter.js';
21
21
  import { type KyselyLike, type KyselyMutationCore } from './kyselyMutationCore.js';
22
22
  export { createKyselyMutationCore, kyselyOperationRowId, type KyselyCompiledQuery, type KyselyDeleteBuilder, type KyselyInsertBuilder, type KyselyInsertValuesBuilder, type KyselyLike, type KyselyMutationCore, type KyselyReturningExecutable, type KyselySelectBuilder, type KyselyTransactionBuilder, type KyselyUpdateBuilder, type KyselyUpdateSetBuilder, } from './kyselyMutationCore.js';
@@ -16,7 +16,7 @@
16
16
  * If the owner rolls back, the waiter acquires the reservation and performs the
17
17
  * mutation. This gives same-key concurrency one database arbiter and one effect.
18
18
  */
19
- import { AbloValidationError } from '../../errors.js';
19
+ import { AbloValidationError } from '../../transaction/errors.js';
20
20
  import { changeSetSchema, outboxEventSchema, sourceCommitEchoMarkerSchema, } from '../contract.js';
21
21
  import { assertSourceIdempotencyIntent, assertSourceIdempotencyRetention, sourceChangeIntentHash, SOURCE_IDEMPOTENCY_RETENTION, } from '../idempotency.js';
22
22
  import { adapterTableMigrations, idempotencyLedgerMigrations, } from '../migrations.js';
@@ -7,7 +7,7 @@
7
7
  * the same `applyOperation` implementation, so direct and endpoint DML cannot
8
8
  * drift into separate hand-written mappers.
9
9
  */
10
- import type { Schema, SchemaRecord } from '../../schema/schema.js';
10
+ import type { Schema, SchemaRecord } from '../../transaction/schema/schema.js';
11
11
  import type { AdapterReadRequest, Row } from '../adapter.js';
12
12
  import type { Operation } from '../contract.js';
13
13
  /** The subset of a Kysely instance, or transaction handle, used by the core. */
@@ -7,10 +7,10 @@
7
7
  * the same `applyOperation` implementation, so direct and endpoint DML cannot
8
8
  * drift into separate hand-written mappers.
9
9
  */
10
- import { AbloValidationError } from '../../errors.js';
10
+ import { AbloValidationError } from '../../transaction/errors.js';
11
11
  import { toSchemaJSON } from '../../schema/serialize.js';
12
12
  import { camelToSnake, snakeToCamel } from '../../schema/ddl.js';
13
- import { tenancyColumn } from '../../schema/tenancy.js';
13
+ import { tenancyColumn } from '../../transaction/schema/tenancy.js';
14
14
  function buildColumnMaps(schema) {
15
15
  const json = toSchemaJSON(schema);
16
16
  const out = new Map();
@@ -9,7 +9,7 @@
9
9
  * idempotency ledger keyed by scoped correlation, and an append-only outbox with a
10
10
  * monotonic cursor.
11
11
  */
12
- import { AbloValidationError } from '../../errors.js';
12
+ import { AbloValidationError } from '../../transaction/errors.js';
13
13
  import { assertSourceIdempotencyIntent, sourceChangeIntentHash, } from '../idempotency.js';
14
14
  function rowId(op) {
15
15
  const id = op.id ?? op.input?.id;
@@ -14,7 +14,7 @@
14
14
  * call site.
15
15
  */
16
16
  import type { DataSourceAdapter, Row } from '../adapter.js';
17
- import type { SchemaRecord, Schema } from '../../schema/schema.js';
17
+ import type { SchemaRecord, Schema } from '../../transaction/schema/schema.js';
18
18
  /** A Prisma model delegate — the subset of its methods the adapter calls. */
19
19
  export interface PrismaDelegate {
20
20
  findUnique(args: {
@@ -47,9 +47,14 @@ export interface PrismaRaw {
47
47
  $executeRawUnsafe(query: string, ...values: unknown[]): Promise<number>;
48
48
  $queryRawUnsafe<T = unknown>(query: string, ...values: unknown[]): Promise<T>;
49
49
  }
50
- /** A Prisma client, or its interactive-transaction client, as a structural shape that needs no `@prisma/client` import. */
50
+ /**
51
+ * A Prisma client as a structural shape that needs no `@prisma/client` import.
52
+ * The interactive-transaction callback receives only {@link PrismaRaw}: Prisma's
53
+ * own tx client strips `$transaction` (no nesting), so requiring it there made
54
+ * a real `PrismaClient` unassignable to this shape.
55
+ */
51
56
  export interface PrismaLike extends PrismaRaw {
52
- $transaction<T>(fn: (tx: PrismaLike & PrismaRaw) => Promise<T>): Promise<T>;
57
+ $transaction<T>(fn: (tx: PrismaRaw) => Promise<T>): Promise<T>;
53
58
  }
54
59
  export interface PrismaDataSourceOptions {
55
60
  /** Map a schema model name → its Prisma delegate name. Default: lower-first-letter. */
@@ -13,7 +13,7 @@
13
13
  * be tested with a fake, while a real `PrismaClient` satisfies the shape at the
14
14
  * call site.
15
15
  */
16
- import { AbloValidationError } from '../../errors.js';
16
+ import { AbloValidationError } from '../../transaction/errors.js';
17
17
  import { outboxEventSchema } from '../contract.js';
18
18
  import { adapterTableMigrations } from '../migrations.js';
19
19
  import { assertSourceIdempotencyIntent, assertSourceIdempotencyRetention, SOURCE_IDEMPOTENCY_RETENTION, sourceChangeIntentHash, } from '../idempotency.js';
@@ -24,7 +24,7 @@
24
24
  * the trust model does not.
25
25
  */
26
26
  import { SOURCE_CONNECTOR_PROTOCOL_VERSION, SOURCE_CONNECTOR_WS_PATH, sourceConnectorSubprotocols, encodeFrame, decodeFrame, ConnectorProtocolError, } from './connectorProtocol.js';
27
- import { ABLO_HOSTED_HTTP_BASE_URL } from '../client/hostedEndpoints.js';
27
+ import { ABLO_HOSTED_HTTP_BASE_URL } from '../transaction/auth/hostedEndpoints.js';
28
28
  /**
29
29
  * The default Ablo base URL the connector dials, to which it appends
30
30
  * `SOURCE_CONNECTOR_WS_PATH`.
@@ -64,10 +64,7 @@ export declare const readyFrameSchema: z.ZodObject<{
64
64
  protocolVersion: z.ZodNumber;
65
65
  sourceId: z.ZodOptional<z.ZodString>;
66
66
  organizationId: z.ZodOptional<z.ZodString>;
67
- environment: z.ZodOptional<z.ZodEnum<{
68
- production: "production";
69
- sandbox: "sandbox";
70
- }>>;
67
+ environment: z.ZodOptional<z.ZodString>;
71
68
  }, z.core.$strip>;
72
69
  export type ReadyFrame = z.infer<typeof readyFrameSchema>;
73
70
  /**
@@ -120,10 +117,7 @@ export declare const connectorFrameSchema: z.ZodDiscriminatedUnion<[z.ZodObject<
120
117
  protocolVersion: z.ZodNumber;
121
118
  sourceId: z.ZodOptional<z.ZodString>;
122
119
  organizationId: z.ZodOptional<z.ZodString>;
123
- environment: z.ZodOptional<z.ZodEnum<{
124
- production: "production";
125
- sandbox: "sandbox";
126
- }>>;
120
+ environment: z.ZodOptional<z.ZodString>;
127
121
  }, z.core.$strip>, z.ZodObject<{
128
122
  type: z.ZodLiteral<"request">;
129
123
  id: z.ZodString;
@@ -20,7 +20,8 @@
20
20
  * sides infer every wire type from one schema so they cannot silently drift.
21
21
  */
22
22
  import { z } from 'zod';
23
- import { WS_BEARER_SUBPROTOCOL_PREFIX } from '../auth/credentialSource.js';
23
+ import { environmentSchema } from '../transaction/environment.js';
24
+ import { WS_BEARER_SUBPROTOCOL_PREFIX } from '../transaction/auth/credentialSource.js';
24
25
  /**
25
26
  * The wire-protocol version. It increases on any breaking change to a frame's
26
27
  * shape, so a connector and server on mismatched versions fail fast during
@@ -71,7 +72,7 @@ export const readyFrameSchema = z.object({
71
72
  protocolVersion: z.number().int(),
72
73
  sourceId: z.string().optional(),
73
74
  organizationId: z.string().optional(),
74
- environment: z.enum(['production', 'sandbox']).optional(),
75
+ environment: environmentSchema.optional(),
75
76
  });
76
77
  /**
77
78
  * A single load, list, or commit request the server forwards to the connector.
@@ -6,14 +6,20 @@
6
6
  * one schema that validates it.
7
7
  *
8
8
  * These schemas describe the adapter's own contract: the change set it commits,
9
- * the outbox row it stores, and the table migrations it ships. They do not
10
- * redefine the shared `SourceOperation` and `SourceEvent` wire types, which live
11
- * in `types.ts`; instead `operationSchema` is kept structurally compatible with
12
- * `SourceOperation`, a compatibility the assertion at the end of this file proves
13
- * at compile time so the schema and the interface cannot drift apart.
9
+ * the outbox row it stores, and the table migrations it ships. The operation
10
+ * vocabulary is not restated here `operationSchema` is projected from the
11
+ * core's `commitOperationSchema`, so an action or field added to the commit
12
+ * contract reaches a data source by construction. The assertion at the end of
13
+ * this file then pins the published `SourceOperation` interface to that
14
+ * projection, which is what keeps the interface tied to the core rather than
15
+ * merely tied to a second local copy of it.
14
16
  */
15
17
  import { z } from 'zod';
16
- /** Mirrors `SourceOperation['type']`. */
18
+ /**
19
+ * Served, not mirrored. The commit vocabulary is declared once in the core; a
20
+ * data source speaks the same five actions, so it re-exports them rather than
21
+ * listing them again under a second name.
22
+ */
17
23
  export declare const operationTypeSchema: z.ZodEnum<{
18
24
  CREATE: "CREATE";
19
25
  UPDATE: "UPDATE";
@@ -23,9 +29,15 @@ export declare const operationTypeSchema: z.ZodEnum<{
23
29
  }>;
24
30
  export type OperationType = z.infer<typeof operationTypeSchema>;
25
31
  /**
26
- * A single operation within a change set, and the runtime validator for it. It is
27
- * structurally compatible with the shared `SourceOperation` type, as the assertion
28
- * at the end of this file confirms.
32
+ * A single operation within a change set, and the runtime validator for it.
33
+ *
34
+ * The field set is projected from `commitOperationSchema` — an operation
35
+ * reaching a data source is a commit operation minus the two fields the core
36
+ * settles internally (`bypass`, `fenceToken`). The two `min(1)` overrides are
37
+ * deliberate and local: this is a customer-implemented boundary, so an empty
38
+ * model name or row id is rejected here rather than forwarded. Stating them as
39
+ * an extension keeps the tightening visible as a choice instead of hiding it
40
+ * inside a second copy of the shape.
29
41
  */
30
42
  export declare const operationSchema: z.ZodObject<{
31
43
  type: z.ZodEnum<{
@@ -35,16 +47,16 @@ export declare const operationSchema: z.ZodObject<{
35
47
  ARCHIVE: "ARCHIVE";
36
48
  UNARCHIVE: "UNARCHIVE";
37
49
  }>;
38
- model: z.ZodString;
39
- id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
40
- input: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
41
- transactionId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
42
50
  readAt: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
43
51
  onStale: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
44
52
  reject: "reject";
45
53
  overwrite: "overwrite";
46
54
  notify: "notify";
47
55
  }>>>;
56
+ transactionId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
57
+ model: z.ZodString;
58
+ id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
59
+ input: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
48
60
  }, z.core.$strip>;
49
61
  export type Operation = z.infer<typeof operationSchema>;
50
62
  /** The supported customer-transaction echo mechanism. */
@@ -92,16 +104,16 @@ export declare const changeSetSchema: z.ZodObject<{
92
104
  ARCHIVE: "ARCHIVE";
93
105
  UNARCHIVE: "UNARCHIVE";
94
106
  }>;
95
- model: z.ZodString;
96
- id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
97
- input: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
98
- transactionId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
99
107
  readAt: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
100
108
  onStale: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
101
109
  reject: "reject";
102
110
  overwrite: "overwrite";
103
111
  notify: "notify";
104
112
  }>>>;
113
+ transactionId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
114
+ model: z.ZodString;
115
+ id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
116
+ input: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
105
117
  }, z.core.$strip>>;
106
118
  correlationId: z.ZodString;
107
119
  intentHash: z.ZodOptional<z.ZodString>;
@@ -6,37 +6,42 @@
6
6
  * one schema that validates it.
7
7
  *
8
8
  * These schemas describe the adapter's own contract: the change set it commits,
9
- * the outbox row it stores, and the table migrations it ships. They do not
10
- * redefine the shared `SourceOperation` and `SourceEvent` wire types, which live
11
- * in `types.ts`; instead `operationSchema` is kept structurally compatible with
12
- * `SourceOperation`, a compatibility the assertion at the end of this file proves
13
- * at compile time so the schema and the interface cannot drift apart.
9
+ * the outbox row it stores, and the table migrations it ships. The operation
10
+ * vocabulary is not restated here `operationSchema` is projected from the
11
+ * core's `commitOperationSchema`, so an action or field added to the commit
12
+ * contract reaches a data source by construction. The assertion at the end of
13
+ * this file then pins the published `SourceOperation` interface to that
14
+ * projection, which is what keeps the interface tied to the core rather than
15
+ * merely tied to a second local copy of it.
14
16
  */
15
17
  import { z } from 'zod';
16
- import { correlationIdSchema } from '../wire/commit.js';
18
+ import { correlationIdSchema } from '../transaction/wire/commit.js';
19
+ import { commitOperationSchema, commitOperationTypeSchema, } from '../transaction/coordination/schema.js';
17
20
  import { ABLO_SOURCE_CLIENT_TX_ID_MAX_LENGTH, ABLO_SOURCE_ECHO_MAX_OPERATIONS, ABLO_SOURCE_ECHO_MAX_PAYLOAD_BYTES, } from './types.js';
18
21
  const jsonObject = z.record(z.string(), z.unknown());
19
- /** Mirrors `SourceOperation['type']`. */
20
- export const operationTypeSchema = z.enum([
21
- 'CREATE',
22
- 'UPDATE',
23
- 'DELETE',
24
- 'ARCHIVE',
25
- 'UNARCHIVE',
26
- ]);
27
22
  /**
28
- * A single operation within a change set, and the runtime validator for it. It is
29
- * structurally compatible with the shared `SourceOperation` type, as the assertion
30
- * at the end of this file confirms.
23
+ * Served, not mirrored. The commit vocabulary is declared once in the core; a
24
+ * data source speaks the same five actions, so it re-exports them rather than
25
+ * listing them again under a second name.
31
26
  */
32
- export const operationSchema = z.object({
33
- type: operationTypeSchema,
27
+ export const operationTypeSchema = commitOperationTypeSchema;
28
+ /**
29
+ * A single operation within a change set, and the runtime validator for it.
30
+ *
31
+ * The field set is projected from `commitOperationSchema` — an operation
32
+ * reaching a data source is a commit operation minus the two fields the core
33
+ * settles internally (`bypass`, `fenceToken`). The two `min(1)` overrides are
34
+ * deliberate and local: this is a customer-implemented boundary, so an empty
35
+ * model name or row id is rejected here rather than forwarded. Stating them as
36
+ * an extension keeps the tightening visible as a choice instead of hiding it
37
+ * inside a second copy of the shape.
38
+ */
39
+ export const operationSchema = commitOperationSchema
40
+ .omit({ bypass: true, fenceToken: true })
41
+ .extend({
34
42
  model: z.string().min(1),
35
43
  id: z.string().min(1).nullish(),
36
44
  input: jsonObject.nullish(),
37
- transactionId: z.string().nullish(),
38
- readAt: z.number().nullish(),
39
- onStale: z.enum(['reject', 'overwrite', 'notify']).nullish(),
40
45
  });
41
46
  /** The supported customer-transaction echo mechanism. */
42
47
  export const sourceCommitEchoSchema = z.object({
@@ -5,7 +5,7 @@
5
5
  * enforces the per-key scopes, and routes the four wire operations (`load`,
6
6
  * `list`, `commit`, and `events`) to whichever handlers you configured.
7
7
  */
8
- import type { Schema, SchemaRecord, InferCreate } from '../schema/schema.js';
8
+ import type { Schema, SchemaRecord, InferCreate } from '../transaction/schema/schema.js';
9
9
  import type { DataSourceAdapter } from './adapter.js';
10
10
  import type { SourceApiKey, SourceAuthorizeContext, SourceCommitHandler, SourceEventsHandler, SourceModelHandlers, SourceRequest, SourceScope } from './types.js';
11
11
  type SourceModels<S extends SchemaRecord, TAuth> = Partial<{