@abloatai/transaction 0.56.0 → 0.58.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 (769) hide show
  1. package/CONVENTIONS.md +54 -10
  2. package/README.md +3 -1
  3. package/dist/ai-sdk/modelTools.d.ts +3 -3
  4. package/dist/ai-sdk/modelTools.d.ts.map +1 -1
  5. package/dist/ai-sdk/modelTools.js +1 -1
  6. package/dist/ai-sdk/modelTools.js.map +1 -1
  7. package/dist/ai-sdk/updateTool.d.ts +5 -7
  8. package/dist/ai-sdk/updateTool.d.ts.map +1 -1
  9. package/dist/ai-sdk/updateTool.js +3 -5
  10. package/dist/ai-sdk/updateTool.js.map +1 -1
  11. package/dist/auth/capability.d.ts +5 -0
  12. package/dist/auth/capability.d.ts.map +1 -1
  13. package/dist/auth/capability.js +5 -0
  14. package/dist/auth/capability.js.map +1 -1
  15. package/dist/auth/capabilityLifecycle.d.ts +1 -1
  16. package/dist/auth/capabilityLifecycle.d.ts.map +1 -1
  17. package/dist/auth/credentialPolicy.d.ts +1 -1
  18. package/dist/auth/credentialPolicy.d.ts.map +1 -1
  19. package/dist/auth/identity.d.ts +3 -3
  20. package/dist/auth/identity.d.ts.map +1 -1
  21. package/dist/auth/identity.js +5 -5
  22. package/dist/auth/identity.js.map +1 -1
  23. package/dist/auth/index.d.ts +4 -208
  24. package/dist/auth/index.d.ts.map +1 -1
  25. package/dist/auth/index.js +4 -330
  26. package/dist/auth/index.js.map +1 -1
  27. package/dist/auth/runtime.d.ts +218 -0
  28. package/dist/auth/runtime.d.ts.map +1 -0
  29. package/dist/auth/runtime.js +336 -0
  30. package/dist/auth/runtime.js.map +1 -0
  31. package/dist/auth/sessionMint.d.ts +1 -1
  32. package/dist/auth/sessionMint.d.ts.map +1 -1
  33. package/dist/auth/sessionMint.js +2 -1
  34. package/dist/auth/sessionMint.js.map +1 -1
  35. package/dist/branches.d.ts +25 -21
  36. package/dist/branches.d.ts.map +1 -1
  37. package/dist/branches.js +3 -0
  38. package/dist/branches.js.map +1 -1
  39. package/dist/{coordination/awaitClaimGrant.d.ts → claims/awaitGrant.d.ts} +1 -1
  40. package/dist/claims/awaitGrant.d.ts.map +1 -0
  41. package/dist/{coordination/awaitClaimGrant.js → claims/awaitGrant.js} +4 -4
  42. package/dist/claims/awaitGrant.js.map +1 -0
  43. package/dist/{wire/claims.d.ts → claims/contract.d.ts} +1 -1
  44. package/dist/claims/contract.d.ts.map +1 -0
  45. package/dist/{wire/claims.js → claims/contract.js} +2 -2
  46. package/dist/claims/contract.js.map +1 -0
  47. package/dist/{wire/claimEvent.d.ts → claims/eventContract.d.ts} +1 -1
  48. package/dist/claims/eventContract.d.ts.map +1 -0
  49. package/dist/{wire/claimEvent.js → claims/eventContract.js} +1 -1
  50. package/dist/claims/eventContract.js.map +1 -0
  51. package/dist/{coordination → claims}/events.d.ts +7 -11
  52. package/dist/claims/events.d.ts.map +1 -0
  53. package/dist/claims/events.js +8 -0
  54. package/dist/claims/events.js.map +1 -0
  55. package/dist/{coordination/claimHeartbeatLoop.d.ts → claims/heartbeat.d.ts} +1 -1
  56. package/dist/claims/heartbeat.d.ts.map +1 -0
  57. package/dist/{coordination/claimHeartbeatLoop.js → claims/heartbeat.js} +1 -1
  58. package/dist/claims/heartbeat.js.map +1 -0
  59. package/dist/claims/index.d.ts +17 -0
  60. package/dist/claims/index.d.ts.map +1 -0
  61. package/dist/claims/index.js +16 -0
  62. package/dist/claims/index.js.map +1 -0
  63. package/dist/claims/lifetime.d.ts +26 -0
  64. package/dist/claims/lifetime.d.ts.map +1 -0
  65. package/dist/claims/lifetime.js +62 -0
  66. package/dist/claims/lifetime.js.map +1 -0
  67. package/dist/{coordination → claims}/locator.d.ts +1 -1
  68. package/dist/claims/locator.d.ts.map +1 -0
  69. package/dist/{coordination → claims}/locator.js +2 -2
  70. package/dist/claims/locator.js.map +1 -0
  71. package/dist/{coordination/claimMeta.d.ts → claims/meta.d.ts} +1 -1
  72. package/dist/claims/meta.d.ts.map +1 -0
  73. package/dist/{coordination/claimMeta.js → claims/meta.js} +1 -1
  74. package/dist/claims/meta.js.map +1 -0
  75. package/dist/claims/routes.d.ts +59 -0
  76. package/dist/claims/routes.d.ts.map +1 -0
  77. package/dist/claims/routes.js +69 -0
  78. package/dist/claims/routes.js.map +1 -0
  79. package/dist/claims/targetConflict.d.ts.map +1 -0
  80. package/dist/claims/targetConflict.js.map +1 -0
  81. package/dist/{coordination → claims}/trace.d.ts +2 -2
  82. package/dist/claims/trace.d.ts.map +1 -0
  83. package/dist/{coordination → claims}/trace.js +5 -5
  84. package/dist/claims/trace.js.map +1 -0
  85. package/dist/{ablo.d.ts → client/ablo.d.ts} +6 -15
  86. package/dist/client/ablo.d.ts.map +1 -0
  87. package/dist/{ablo.js → client/ablo.js} +2 -2
  88. package/dist/client/ablo.js.map +1 -0
  89. package/dist/{transactionLayer.d.ts → client/contract.d.ts} +12 -14
  90. package/dist/client/contract.d.ts.map +1 -0
  91. package/dist/{transactionLayer.js → client/contract.js} +4 -5
  92. package/dist/client/contract.js.map +1 -0
  93. package/dist/{headlessClient.d.ts → client/headless.d.ts} +4 -4
  94. package/dist/client/headless.d.ts.map +1 -0
  95. package/dist/{headlessClient.js → client/headless.js} +8 -10
  96. package/dist/{headlessClient.js.map → client/headless.js.map} +1 -1
  97. package/dist/client/index.d.ts +11 -0
  98. package/dist/client/index.d.ts.map +1 -0
  99. package/dist/client/index.js +11 -0
  100. package/dist/client/index.js.map +1 -0
  101. package/dist/{resources → client/resources}/functionalUpdate.d.ts +4 -4
  102. package/dist/client/resources/functionalUpdate.d.ts.map +1 -0
  103. package/dist/{resources → client/resources}/functionalUpdate.js +3 -3
  104. package/dist/client/resources/functionalUpdate.js.map +1 -0
  105. package/dist/{resources → client/resources}/httpResources.d.ts +92 -77
  106. package/dist/client/resources/httpResources.d.ts.map +1 -0
  107. package/dist/client/resources/httpResources.js +94 -0
  108. package/dist/client/resources/httpResources.js.map +1 -0
  109. package/dist/client/resources/modelCreate.d.ts +21 -0
  110. package/dist/client/resources/modelCreate.d.ts.map +1 -0
  111. package/dist/client/resources/modelCreate.js +49 -0
  112. package/dist/client/resources/modelCreate.js.map +1 -0
  113. package/dist/{resources → client/resources}/modelOperations.d.ts +57 -51
  114. package/dist/client/resources/modelOperations.d.ts.map +1 -0
  115. package/dist/{resources → client/resources}/modelOperations.js +1 -1
  116. package/dist/client/resources/modelOperations.js.map +1 -0
  117. package/dist/{resources → client/resources}/mutationOptions.d.ts +4 -17
  118. package/dist/client/resources/mutationOptions.d.ts.map +1 -0
  119. package/dist/client/resources/mutationOptions.js.map +1 -0
  120. package/dist/client/resources/where.d.ts.map +1 -0
  121. package/dist/{resources → client/resources}/where.js +1 -1
  122. package/dist/client/resources/where.js.map +1 -0
  123. package/dist/{resources → client/resources}/writeOptionsSchema.d.ts +16 -35
  124. package/dist/client/resources/writeOptionsSchema.d.ts.map +1 -0
  125. package/dist/{resources → client/resources}/writeOptionsSchema.js +25 -18
  126. package/dist/client/resources/writeOptionsSchema.js.map +1 -0
  127. package/dist/{transactions → commit}/confirmation/commitEnvelope.d.ts +1 -37
  128. package/dist/commit/confirmation/commitEnvelope.d.ts.map +1 -0
  129. package/dist/{transactions → commit}/confirmation/commitEnvelope.js +2 -7
  130. package/dist/commit/confirmation/commitEnvelope.js.map +1 -0
  131. package/dist/commit/confirmation/httpCommitEnvelope.d.ts.map +1 -0
  132. package/dist/{transactions → commit}/confirmation/httpCommitEnvelope.js +1 -1
  133. package/dist/commit/confirmation/httpCommitEnvelope.js.map +1 -0
  134. package/dist/commit/confirmation/idempotencyKey.d.ts.map +1 -0
  135. package/dist/commit/confirmation/idempotencyKey.js.map +1 -0
  136. package/dist/{transactions → commit}/confirmation/pendingWrite.d.ts +2 -33
  137. package/dist/commit/confirmation/pendingWrite.d.ts.map +1 -0
  138. package/dist/{transactions → commit}/confirmation/pendingWrite.js +1 -1
  139. package/dist/commit/confirmation/pendingWrite.js.map +1 -0
  140. package/dist/commit/contract.d.ts +1404 -0
  141. package/dist/commit/contract.d.ts.map +1 -0
  142. package/dist/{wire/commit.js → commit/contract.js} +26 -21
  143. package/dist/commit/contract.js.map +1 -0
  144. package/dist/{durableWrites.d.ts → commit/durableWrites.d.ts} +6 -6
  145. package/dist/commit/durableWrites.d.ts.map +1 -0
  146. package/dist/{durableWrites.js → commit/durableWrites.js} +5 -5
  147. package/dist/commit/durableWrites.js.map +1 -0
  148. package/dist/commit/httpRequest.d.ts +45 -0
  149. package/dist/commit/httpRequest.d.ts.map +1 -0
  150. package/dist/commit/httpRequest.js +66 -0
  151. package/dist/commit/httpRequest.js.map +1 -0
  152. package/dist/commit/index.d.ts +17 -0
  153. package/dist/commit/index.d.ts.map +1 -0
  154. package/dist/commit/index.js +17 -0
  155. package/dist/commit/index.js.map +1 -0
  156. package/dist/{readSetContext.d.ts → commit/readSetContext.d.ts} +7 -15
  157. package/dist/commit/readSetContext.d.ts.map +1 -0
  158. package/dist/{readSetContext.js → commit/readSetContext.js} +18 -28
  159. package/dist/commit/readSetContext.js.map +1 -0
  160. package/dist/{commitRecordRuntime.d.ts → commit/recordRuntime.d.ts} +3 -5
  161. package/dist/commit/recordRuntime.d.ts.map +1 -0
  162. package/dist/{commitRecordRuntime.js → commit/recordRuntime.js} +13 -54
  163. package/dist/commit/recordRuntime.js.map +1 -0
  164. package/dist/coordination/index.d.ts +6 -8
  165. package/dist/coordination/index.d.ts.map +1 -1
  166. package/dist/coordination/index.js +3 -9
  167. package/dist/coordination/index.js.map +1 -1
  168. package/dist/coordination/schema.d.ts +11 -466
  169. package/dist/coordination/schema.d.ts.map +1 -1
  170. package/dist/coordination/schema.js +13 -265
  171. package/dist/coordination/schema.js.map +1 -1
  172. package/dist/errorCodes.d.ts +16 -9
  173. package/dist/errorCodes.d.ts.map +1 -1
  174. package/dist/errorCodes.js +14 -6
  175. package/dist/errorCodes.js.map +1 -1
  176. package/dist/errorObservation.d.ts +2 -2
  177. package/dist/errors.d.ts +3 -2
  178. package/dist/errors.d.ts.map +1 -1
  179. package/dist/errors.js +27 -11
  180. package/dist/errors.js.map +1 -1
  181. package/dist/index.d.ts +7 -7
  182. package/dist/index.d.ts.map +1 -1
  183. package/dist/index.js +3 -3
  184. package/dist/index.js.map +1 -1
  185. package/dist/internal/read-set.d.ts +3 -3
  186. package/dist/internal/read-set.d.ts.map +1 -1
  187. package/dist/internal/read-set.js +2 -2
  188. package/dist/internal/read-set.js.map +1 -1
  189. package/dist/observability.d.ts +4 -4
  190. package/dist/observability.d.ts.map +1 -1
  191. package/dist/observability.js +2 -2
  192. package/dist/{wire/delta.d.ts → observation/contract.d.ts} +8 -8
  193. package/dist/observation/contract.d.ts.map +1 -0
  194. package/dist/{wire/delta.js → observation/contract.js} +3 -3
  195. package/dist/observation/contract.js.map +1 -0
  196. package/dist/{wire/feedCursor.d.ts → observation/cursor.d.ts} +1 -1
  197. package/dist/observation/cursor.d.ts.map +1 -0
  198. package/dist/{wire/feedCursor.js → observation/cursor.js} +1 -1
  199. package/dist/observation/cursor.js.map +1 -0
  200. package/dist/{wire/deltaDelivery.d.ts → observation/deliveryContract.d.ts} +1 -1
  201. package/dist/observation/deliveryContract.d.ts.map +1 -0
  202. package/dist/{wire/deltaDelivery.js → observation/deliveryContract.js} +1 -1
  203. package/dist/observation/deliveryContract.js.map +1 -0
  204. package/dist/{wire/feedEvent.d.ts → observation/feedContract.d.ts} +10 -10
  205. package/dist/observation/feedContract.d.ts.map +1 -0
  206. package/dist/{wire/feedEvent.js → observation/feedContract.js} +4 -4
  207. package/dist/observation/feedContract.js.map +1 -0
  208. package/dist/observation/httpFeed.d.ts +4 -0
  209. package/dist/observation/httpFeed.d.ts.map +1 -0
  210. package/dist/{transport → observation}/httpFeed.js +1 -1
  211. package/dist/{transport → observation}/httpFeed.js.map +1 -1
  212. package/dist/observation/index.d.ts +13 -0
  213. package/dist/observation/index.d.ts.map +1 -0
  214. package/dist/observation/index.js +13 -0
  215. package/dist/observation/index.js.map +1 -0
  216. package/dist/{log → observation/persistence}/syncDeltaRow.d.ts +8 -8
  217. package/dist/observation/persistence/syncDeltaRow.d.ts.map +1 -0
  218. package/dist/{log → observation/persistence}/syncDeltaRow.js +4 -4
  219. package/dist/observation/persistence/syncDeltaRow.js.map +1 -0
  220. package/dist/pricing.d.ts +20 -12
  221. package/dist/pricing.d.ts.map +1 -1
  222. package/dist/pricing.js +46 -26
  223. package/dist/pricing.js.map +1 -1
  224. package/dist/schema/audit.d.ts +15 -0
  225. package/dist/schema/audit.d.ts.map +1 -0
  226. package/dist/schema/audit.js +90 -0
  227. package/dist/schema/audit.js.map +1 -0
  228. package/dist/schema/ddl.d.ts.map +1 -1
  229. package/dist/schema/ddl.js +68 -1
  230. package/dist/schema/ddl.js.map +1 -1
  231. package/dist/schema/index.d.ts +7 -6
  232. package/dist/schema/index.d.ts.map +1 -1
  233. package/dist/schema/index.js +6 -7
  234. package/dist/schema/index.js.map +1 -1
  235. package/dist/schema/model.d.ts +14 -27
  236. package/dist/schema/model.d.ts.map +1 -1
  237. package/dist/schema/model.js +2 -2
  238. package/dist/schema/model.js.map +1 -1
  239. package/dist/schema/openapi.d.ts.map +1 -1
  240. package/dist/schema/openapi.js +149 -8
  241. package/dist/schema/openapi.js.map +1 -1
  242. package/dist/schema/roles.d.ts +27 -0
  243. package/dist/schema/roles.d.ts.map +1 -1
  244. package/dist/schema/roles.js +40 -0
  245. package/dist/schema/roles.js.map +1 -1
  246. package/dist/schema/schema.d.ts +34 -7
  247. package/dist/schema/schema.d.ts.map +1 -1
  248. package/dist/schema/schema.js +39 -3
  249. package/dist/schema/schema.js.map +1 -1
  250. package/dist/schema/serialize.d.ts +5 -5
  251. package/dist/schema/serialize.d.ts.map +1 -1
  252. package/dist/schema/serialize.js +5 -5
  253. package/dist/schema/serialize.js.map +1 -1
  254. package/dist/schema/subject.d.ts +18 -0
  255. package/dist/schema/subject.d.ts.map +1 -0
  256. package/dist/schema/subject.js +27 -0
  257. package/dist/schema/subject.js.map +1 -0
  258. package/dist/schema/tenancy.d.ts +1 -1
  259. package/dist/server/adapter.d.ts +3 -1
  260. package/dist/server/adapter.d.ts.map +1 -1
  261. package/dist/server/commit.d.ts +6 -14
  262. package/dist/server/commit.d.ts.map +1 -1
  263. package/dist/server/index.d.ts +1 -1
  264. package/dist/server/index.d.ts.map +1 -1
  265. package/dist/server/index.js +1 -1
  266. package/dist/server/index.js.map +1 -1
  267. package/dist/server/readConfig.d.ts +3 -0
  268. package/dist/server/readConfig.d.ts.map +1 -1
  269. package/dist/server/readConfig.js +0 -21
  270. package/dist/server/readConfig.js.map +1 -1
  271. package/dist/server/storageMode.d.ts +1 -1
  272. package/dist/source/{adapter.d.ts → adapters/adapter.d.ts} +10 -4
  273. package/dist/source/adapters/adapter.d.ts.map +1 -0
  274. package/dist/source/adapters/adapter.js.map +1 -0
  275. package/dist/source/adapters/adapterFactory.d.ts.map +1 -0
  276. package/dist/source/{adapterFactory.js → adapters/adapterFactory.js} +1 -1
  277. package/dist/source/adapters/adapterFactory.js.map +1 -0
  278. package/dist/source/adapters/adapterProfile.d.ts.map +1 -0
  279. package/dist/source/adapters/adapterProfile.js.map +1 -0
  280. package/dist/source/{conformance.d.ts → adapters/conformance.d.ts} +1 -1
  281. package/dist/source/adapters/conformance.d.ts.map +1 -0
  282. package/dist/source/{conformance.js → adapters/conformance.js} +1 -1
  283. package/dist/source/adapters/conformance.js.map +1 -0
  284. package/dist/source/{contract.d.ts → adapters/contract.d.ts} +20 -75
  285. package/dist/source/adapters/contract.d.ts.map +1 -0
  286. package/dist/source/{contract.js → adapters/contract.js} +20 -55
  287. package/dist/source/adapters/contract.js.map +1 -0
  288. package/dist/source/adapters/drizzle.d.ts +1 -1
  289. package/dist/source/adapters/drizzle.d.ts.map +1 -1
  290. package/dist/source/adapters/drizzle.js +54 -25
  291. package/dist/source/adapters/drizzle.js.map +1 -1
  292. package/dist/source/adapters/idempotency.d.ts.map +1 -0
  293. package/dist/source/{idempotency.js → adapters/idempotency.js} +2 -2
  294. package/dist/source/adapters/idempotency.js.map +1 -0
  295. package/dist/source/adapters/index.d.ts +21 -0
  296. package/dist/source/adapters/index.d.ts.map +1 -0
  297. package/dist/source/adapters/index.js +21 -0
  298. package/dist/source/adapters/index.js.map +1 -0
  299. package/dist/source/adapters/kysely.d.ts +3 -1
  300. package/dist/source/adapters/kysely.d.ts.map +1 -1
  301. package/dist/source/adapters/kysely.js +49 -23
  302. package/dist/source/adapters/kysely.js.map +1 -1
  303. package/dist/source/adapters/kyselyMutationCore.d.ts +6 -3
  304. package/dist/source/adapters/kyselyMutationCore.d.ts.map +1 -1
  305. package/dist/source/adapters/kyselyMutationCore.js +17 -8
  306. package/dist/source/adapters/kyselyMutationCore.js.map +1 -1
  307. package/dist/source/adapters/memory.d.ts +3 -3
  308. package/dist/source/adapters/memory.d.ts.map +1 -1
  309. package/dist/source/adapters/memory.js +20 -7
  310. package/dist/source/adapters/memory.js.map +1 -1
  311. package/dist/source/adapters/migration.d.ts +8 -0
  312. package/dist/source/adapters/migration.d.ts.map +1 -0
  313. package/dist/source/adapters/migration.js +9 -0
  314. package/dist/source/adapters/migration.js.map +1 -0
  315. package/dist/source/{migrations.d.ts → adapters/migrations.d.ts} +3 -4
  316. package/dist/source/adapters/migrations.d.ts.map +1 -0
  317. package/dist/source/{migrations.js → adapters/migrations.js} +4 -31
  318. package/dist/source/adapters/migrations.js.map +1 -0
  319. package/dist/source/adapters/prisma.d.ts +1 -1
  320. package/dist/source/adapters/prisma.d.ts.map +1 -1
  321. package/dist/source/adapters/prisma.js +75 -30
  322. package/dist/source/adapters/prisma.js.map +1 -1
  323. package/dist/source/adapters/subjectAuthorization.d.ts +16 -0
  324. package/dist/source/adapters/subjectAuthorization.d.ts.map +1 -0
  325. package/dist/source/adapters/subjectAuthorization.js +126 -0
  326. package/dist/source/adapters/subjectAuthorization.js.map +1 -0
  327. package/dist/source/{connector.d.ts → connector/client.d.ts} +6 -1
  328. package/dist/source/connector/client.d.ts.map +1 -0
  329. package/dist/source/{connector.js → connector/client.js} +28 -11
  330. package/dist/source/connector/client.js.map +1 -0
  331. package/dist/source/connector/index.d.ts +4 -0
  332. package/dist/source/connector/index.d.ts.map +1 -0
  333. package/dist/source/connector/index.js +4 -0
  334. package/dist/source/connector/index.js.map +1 -0
  335. package/dist/source/{connectorProtocol.d.ts → connector/protocol.d.ts} +8 -1
  336. package/dist/source/connector/protocol.d.ts.map +1 -0
  337. package/dist/source/{connectorProtocol.js → connector/protocol.js} +10 -3
  338. package/dist/source/connector/protocol.js.map +1 -0
  339. package/dist/source/delivery/index.d.ts +3 -0
  340. package/dist/source/delivery/index.d.ts.map +1 -0
  341. package/dist/source/delivery/index.js +3 -0
  342. package/dist/source/delivery/index.js.map +1 -0
  343. package/dist/source/{pushQueue.d.ts → delivery/pushQueue.d.ts} +1 -1
  344. package/dist/source/delivery/pushQueue.d.ts.map +1 -0
  345. package/dist/source/{pushQueue.js → delivery/pushQueue.js} +1 -1
  346. package/dist/source/delivery/pushQueue.js.map +1 -0
  347. package/dist/source/{factory.d.ts → endpoint/factory.d.ts} +9 -3
  348. package/dist/source/endpoint/factory.d.ts.map +1 -0
  349. package/dist/source/{factory.js → endpoint/factory.js} +122 -6
  350. package/dist/source/endpoint/factory.js.map +1 -0
  351. package/dist/source/endpoint/index.d.ts +5 -0
  352. package/dist/source/endpoint/index.d.ts.map +1 -0
  353. package/dist/source/endpoint/index.js +5 -0
  354. package/dist/source/endpoint/index.js.map +1 -0
  355. package/dist/source/{next.d.ts → endpoint/next.d.ts} +2 -2
  356. package/dist/source/endpoint/next.d.ts.map +1 -0
  357. package/dist/source/{next.js → endpoint/next.js} +1 -1
  358. package/dist/source/endpoint/next.js.map +1 -0
  359. package/dist/source/{signing.d.ts → endpoint/signing.d.ts} +1 -1
  360. package/dist/source/endpoint/signing.d.ts.map +1 -0
  361. package/dist/source/{signing.js → endpoint/signing.js} +1 -1
  362. package/dist/source/endpoint/signing.js.map +1 -0
  363. package/dist/source/index.d.ts +15 -12
  364. package/dist/source/index.d.ts.map +1 -1
  365. package/dist/source/index.js +13 -10
  366. package/dist/source/index.js.map +1 -1
  367. package/dist/source/outbox/contract.d.ts +50 -0
  368. package/dist/source/outbox/contract.d.ts.map +1 -0
  369. package/dist/source/outbox/contract.js +50 -0
  370. package/dist/source/outbox/contract.js.map +1 -0
  371. package/dist/source/outbox/envelope.d.ts +9 -0
  372. package/dist/source/outbox/envelope.d.ts.map +1 -0
  373. package/dist/source/outbox/envelope.js +36 -0
  374. package/dist/source/outbox/envelope.js.map +1 -0
  375. package/dist/source/outbox/index.d.ts +11 -0
  376. package/dist/source/outbox/index.d.ts.map +1 -0
  377. package/dist/source/outbox/index.js +11 -0
  378. package/dist/source/outbox/index.js.map +1 -0
  379. package/dist/source/outbox/migrations.d.ts +4 -0
  380. package/dist/source/outbox/migrations.d.ts.map +1 -0
  381. package/dist/source/outbox/migrations.js +67 -0
  382. package/dist/source/outbox/migrations.js.map +1 -0
  383. package/dist/source/outbox/retention.d.ts +3 -0
  384. package/dist/source/outbox/retention.d.ts.map +1 -0
  385. package/dist/source/outbox/retention.js +3 -0
  386. package/dist/source/outbox/retention.js.map +1 -0
  387. package/dist/source/types.d.ts +59 -10
  388. package/dist/source/types.d.ts.map +1 -1
  389. package/dist/source/types.js +2 -0
  390. package/dist/source/types.js.map +1 -1
  391. package/dist/syncLog/contract.d.ts +19 -8
  392. package/dist/syncLog/contract.d.ts.map +1 -1
  393. package/dist/syncLog/contract.js +19 -6
  394. package/dist/syncLog/contract.js.map +1 -1
  395. package/dist/testing/fixtures/httpResponses.d.ts +6 -0
  396. package/dist/testing/fixtures/httpResponses.d.ts.map +1 -1
  397. package/dist/testing/fixtures/httpResponses.js +1 -0
  398. package/dist/testing/fixtures/httpResponses.js.map +1 -1
  399. package/dist/transport/{credentialLifecycle.d.ts → connection/credentialLifecycle.d.ts} +3 -3
  400. package/dist/transport/connection/credentialLifecycle.d.ts.map +1 -0
  401. package/dist/transport/{credentialLifecycle.js → connection/credentialLifecycle.js} +2 -2
  402. package/dist/transport/connection/credentialLifecycle.js.map +1 -0
  403. package/dist/transport/connection/index.d.ts +5 -0
  404. package/dist/transport/connection/index.d.ts.map +1 -0
  405. package/dist/transport/connection/index.js +5 -0
  406. package/dist/transport/connection/index.js.map +1 -0
  407. package/dist/transport/{connectionManager.d.ts → connection/manager.d.ts} +13 -5
  408. package/dist/transport/connection/manager.d.ts.map +1 -0
  409. package/dist/transport/{connectionManager.js → connection/manager.js} +6 -4
  410. package/dist/transport/connection/manager.js.map +1 -0
  411. package/dist/transport/{networkProbe.d.ts → connection/networkProbe.d.ts} +2 -2
  412. package/dist/transport/connection/networkProbe.d.ts.map +1 -0
  413. package/dist/transport/{networkProbe.js → connection/networkProbe.js} +4 -4
  414. package/dist/transport/connection/networkProbe.js.map +1 -0
  415. package/dist/transport/{httpClient.d.ts → http/client.d.ts} +32 -44
  416. package/dist/transport/http/client.d.ts.map +1 -0
  417. package/dist/transport/{httpClient.js → http/client.js} +96 -105
  418. package/dist/transport/http/client.js.map +1 -0
  419. package/dist/transport/http/helpers.d.ts +10 -0
  420. package/dist/transport/http/helpers.d.ts.map +1 -0
  421. package/dist/transport/http/helpers.js +46 -0
  422. package/dist/transport/http/helpers.js.map +1 -0
  423. package/dist/transport/http/index.d.ts +6 -0
  424. package/dist/transport/http/index.d.ts.map +1 -0
  425. package/dist/transport/http/index.js +6 -0
  426. package/dist/transport/http/index.js.map +1 -0
  427. package/dist/transport/{httpOptions.d.ts → http/options.d.ts} +7 -7
  428. package/dist/transport/{httpOptions.d.ts.map → http/options.d.ts.map} +1 -1
  429. package/dist/transport/{httpOptions.js → http/options.js} +1 -1
  430. package/dist/transport/http/options.js.map +1 -0
  431. package/dist/transport/http/subscription.d.ts +16 -0
  432. package/dist/transport/http/subscription.d.ts.map +1 -0
  433. package/dist/transport/http/subscription.js +146 -0
  434. package/dist/transport/http/subscription.js.map +1 -0
  435. package/dist/transport/{httpTransport.d.ts → http/transport.d.ts} +9 -6
  436. package/dist/transport/http/transport.d.ts.map +1 -0
  437. package/dist/transport/{httpTransport.js → http/transport.js} +153 -188
  438. package/dist/transport/http/transport.js.map +1 -0
  439. package/dist/transport/index.d.ts +8 -0
  440. package/dist/transport/index.d.ts.map +1 -0
  441. package/dist/transport/index.js +8 -0
  442. package/dist/transport/index.js.map +1 -0
  443. package/dist/transport/{commitFrames.d.ts → websocket/commitFrames.d.ts} +8 -20
  444. package/dist/transport/websocket/commitFrames.d.ts.map +1 -0
  445. package/dist/transport/{commitFrames.js → websocket/commitFrames.js} +6 -25
  446. package/dist/transport/websocket/commitFrames.js.map +1 -0
  447. package/dist/transport/{wsFrameHandlers.d.ts → websocket/frameHandlers.d.ts} +5 -5
  448. package/dist/transport/websocket/frameHandlers.d.ts.map +1 -0
  449. package/dist/transport/{wsFrameHandlers.js → websocket/frameHandlers.js} +10 -51
  450. package/dist/transport/websocket/frameHandlers.js.map +1 -0
  451. package/dist/transport/{heartbeat.d.ts → websocket/heartbeat.d.ts} +1 -1
  452. package/dist/transport/websocket/heartbeat.d.ts.map +1 -0
  453. package/dist/transport/{heartbeat.js → websocket/heartbeat.js} +2 -2
  454. package/dist/transport/websocket/heartbeat.js.map +1 -0
  455. package/dist/transport/websocket/index.d.ts +6 -0
  456. package/dist/transport/websocket/index.d.ts.map +1 -0
  457. package/dist/transport/websocket/index.js +6 -0
  458. package/dist/transport/websocket/index.js.map +1 -0
  459. package/dist/transport/{wsTransport.d.ts → websocket/transport.d.ts} +13 -25
  460. package/dist/transport/websocket/transport.d.ts.map +1 -0
  461. package/dist/transport/{wsTransport.js → websocket/transport.js} +14 -14
  462. package/dist/transport/websocket/transport.js.map +1 -0
  463. package/dist/types/index.d.ts +1 -1
  464. package/dist/types/index.d.ts.map +1 -1
  465. package/dist/types/streams.d.ts +8 -48
  466. package/dist/types/streams.d.ts.map +1 -1
  467. package/dist/types/streams.js +2 -2
  468. package/dist/wire/accountResponses.d.ts +4 -72
  469. package/dist/wire/accountResponses.d.ts.map +1 -1
  470. package/dist/wire/accountResponses.js +2 -10
  471. package/dist/wire/accountResponses.js.map +1 -1
  472. package/dist/wire/apiLifecycle.d.ts +63 -0
  473. package/dist/wire/apiLifecycle.d.ts.map +1 -0
  474. package/dist/wire/apiLifecycle.js +89 -0
  475. package/dist/wire/apiLifecycle.js.map +1 -0
  476. package/dist/wire/frames.d.ts +6 -83
  477. package/dist/wire/frames.d.ts.map +1 -1
  478. package/dist/wire/frames.js +4 -11
  479. package/dist/wire/frames.js.map +1 -1
  480. package/dist/wire/inboundFrames.d.ts +6 -131
  481. package/dist/wire/inboundFrames.d.ts.map +1 -1
  482. package/dist/wire/inboundFrames.js +3 -3
  483. package/dist/wire/inboundFrames.js.map +1 -1
  484. package/dist/wire/index.d.ts +20 -15
  485. package/dist/wire/index.d.ts.map +1 -1
  486. package/dist/wire/index.js +22 -8
  487. package/dist/wire/index.js.map +1 -1
  488. package/dist/wire/modelMutations.d.ts +1 -32
  489. package/dist/wire/modelMutations.d.ts.map +1 -1
  490. package/dist/wire/modelMutations.js +1 -8
  491. package/dist/wire/modelMutations.js.map +1 -1
  492. package/dist/wire/rateLimit.d.ts +82 -0
  493. package/dist/wire/rateLimit.d.ts.map +1 -0
  494. package/dist/wire/rateLimit.js +142 -0
  495. package/dist/wire/rateLimit.js.map +1 -0
  496. package/package.json +130 -10
  497. package/src/ai-sdk/modelTools.ts +5 -5
  498. package/src/ai-sdk/updateTool.ts +5 -7
  499. package/src/auth/capability.ts +5 -0
  500. package/src/auth/capabilityLifecycle.ts +1 -1
  501. package/src/auth/credentialPolicy.ts +1 -1
  502. package/src/auth/identity.ts +7 -7
  503. package/src/auth/index.ts +4 -663
  504. package/src/auth/runtime.ts +669 -0
  505. package/src/auth/sessionMint.ts +3 -2
  506. package/src/branches.ts +3 -0
  507. package/src/{coordination/awaitClaimGrant.ts → claims/awaitGrant.ts} +4 -4
  508. package/src/{wire/claims.ts → claims/contract.ts} +1 -1
  509. package/src/{coordination → claims}/events.ts +7 -11
  510. package/src/claims/index.ts +21 -0
  511. package/src/claims/lifetime.ts +78 -0
  512. package/src/{coordination → claims}/locator.ts +3 -3
  513. package/src/claims/routes.ts +81 -0
  514. package/src/{coordination → claims}/trace.ts +5 -5
  515. package/src/{ablo.ts → client/ablo.ts} +8 -20
  516. package/src/{transactionLayer.ts → client/contract.ts} +11 -13
  517. package/src/{headlessClient.ts → client/headless.ts} +13 -15
  518. package/src/client/index.ts +10 -0
  519. package/src/{resources → client/resources}/functionalUpdate.ts +4 -4
  520. package/src/{resources → client/resources}/httpResources.ts +163 -92
  521. package/src/client/resources/modelCreate.ts +73 -0
  522. package/src/{resources → client/resources}/modelOperations.ts +73 -55
  523. package/src/{resources → client/resources}/mutationOptions.ts +4 -17
  524. package/src/{resources → client/resources}/where.ts +1 -1
  525. package/src/{resources → client/resources}/writeOptionsSchema.ts +35 -27
  526. package/src/{transactions → commit}/confirmation/commitEnvelope.ts +2 -12
  527. package/src/{transactions → commit}/confirmation/httpCommitEnvelope.ts +1 -1
  528. package/src/{transactions → commit}/confirmation/pendingWrite.ts +1 -1
  529. package/src/{wire/commit.ts → commit/contract.ts} +27 -26
  530. package/src/{durableWrites.ts → commit/durableWrites.ts} +7 -7
  531. package/src/commit/httpRequest.ts +103 -0
  532. package/src/commit/index.ts +16 -0
  533. package/src/{readSetContext.ts → commit/readSetContext.ts} +24 -43
  534. package/src/{commitRecordRuntime.ts → commit/recordRuntime.ts} +12 -67
  535. package/src/coordination/index.ts +4 -54
  536. package/src/coordination/schema.ts +15 -309
  537. package/src/errorCodes.ts +62 -10
  538. package/src/errors.ts +32 -10
  539. package/src/index.ts +8 -8
  540. package/src/internal/read-set.ts +3 -6
  541. package/src/observability.ts +4 -4
  542. package/src/{wire/delta.ts → observation/contract.ts} +2 -2
  543. package/src/{wire/feedEvent.ts → observation/feedContract.ts} +3 -4
  544. package/src/{transport → observation}/httpFeed.ts +3 -3
  545. package/src/observation/index.ts +12 -0
  546. package/src/{log → observation/persistence}/syncDeltaRow.ts +6 -7
  547. package/src/pricing.ts +46 -25
  548. package/src/schema/audit.ts +121 -0
  549. package/src/schema/ddl.ts +71 -1
  550. package/src/schema/index.ts +20 -20
  551. package/src/schema/model.ts +17 -33
  552. package/src/schema/openapi.ts +170 -9
  553. package/src/schema/roles.ts +53 -0
  554. package/src/schema/schema.ts +91 -6
  555. package/src/schema/serialize.ts +8 -9
  556. package/src/schema/subject.ts +43 -0
  557. package/src/server/adapter.ts +3 -1
  558. package/src/server/commit.ts +6 -14
  559. package/src/server/index.ts +1 -1
  560. package/src/server/readConfig.ts +4 -0
  561. package/src/source/{adapter.ts → adapters/adapter.ts} +9 -5
  562. package/src/source/{adapterFactory.ts → adapters/adapterFactory.ts} +1 -1
  563. package/src/source/{conformance.ts → adapters/conformance.ts} +1 -1
  564. package/src/source/{contract.ts → adapters/contract.ts} +24 -61
  565. package/src/source/adapters/drizzle.ts +75 -29
  566. package/src/source/{idempotency.ts → adapters/idempotency.ts} +2 -2
  567. package/src/source/adapters/index.ts +20 -0
  568. package/src/source/adapters/kysely.ts +77 -27
  569. package/src/source/adapters/kyselyMutationCore.ts +23 -11
  570. package/src/source/adapters/memory.ts +26 -9
  571. package/src/source/adapters/migration.ts +11 -0
  572. package/src/source/{migrations.ts → adapters/migrations.ts} +6 -33
  573. package/src/source/adapters/prisma.ts +98 -34
  574. package/src/source/adapters/subjectAuthorization.ts +182 -0
  575. package/src/source/{connector.ts → connector/client.ts} +35 -12
  576. package/src/source/connector/index.ts +3 -0
  577. package/src/source/{connectorProtocol.ts → connector/protocol.ts} +10 -2
  578. package/src/source/delivery/index.ts +2 -0
  579. package/src/source/{pushQueue.ts → delivery/pushQueue.ts} +2 -2
  580. package/src/source/{factory.ts → endpoint/factory.ts} +150 -9
  581. package/src/source/endpoint/index.ts +4 -0
  582. package/src/source/{next.ts → endpoint/next.ts} +2 -2
  583. package/src/source/{signing.ts → endpoint/signing.ts} +1 -1
  584. package/src/source/index.ts +27 -18
  585. package/src/source/outbox/contract.ts +56 -0
  586. package/src/source/outbox/envelope.ts +47 -0
  587. package/src/source/outbox/index.ts +15 -0
  588. package/src/source/outbox/migrations.ts +71 -0
  589. package/src/source/outbox/retention.ts +2 -0
  590. package/src/source/types.ts +64 -10
  591. package/src/syncLog/contract.ts +19 -9
  592. package/src/testing/fixtures/httpResponses.ts +7 -0
  593. package/src/transport/{credentialLifecycle.ts → connection/credentialLifecycle.ts} +3 -3
  594. package/src/transport/connection/index.ts +4 -0
  595. package/src/transport/{connectionManager.ts → connection/manager.ts} +13 -4
  596. package/src/transport/{networkProbe.ts → connection/networkProbe.ts} +4 -4
  597. package/src/transport/{httpClient.ts → http/client.ts} +165 -184
  598. package/src/transport/http/helpers.ts +63 -0
  599. package/src/transport/http/index.ts +5 -0
  600. package/src/transport/{httpOptions.ts → http/options.ts} +6 -6
  601. package/src/transport/http/subscription.ts +174 -0
  602. package/src/transport/{httpTransport.ts → http/transport.ts} +210 -246
  603. package/src/transport/index.ts +7 -0
  604. package/src/transport/{commitFrames.ts → websocket/commitFrames.ts} +14 -46
  605. package/src/transport/{wsFrameHandlers.ts → websocket/frameHandlers.ts} +11 -54
  606. package/src/transport/{heartbeat.ts → websocket/heartbeat.ts} +2 -2
  607. package/src/transport/websocket/index.ts +5 -0
  608. package/src/transport/{wsTransport.ts → websocket/transport.ts} +16 -30
  609. package/src/types/index.ts +2 -6
  610. package/src/types/streams.ts +7 -61
  611. package/src/webhooks/events.ts +1 -1
  612. package/src/wire/accountResponses.ts +3 -12
  613. package/src/wire/apiLifecycle.ts +94 -0
  614. package/src/wire/frames.ts +5 -15
  615. package/src/wire/inboundFrames.ts +3 -3
  616. package/src/wire/index.ts +50 -15
  617. package/src/wire/modelMutations.ts +1 -14
  618. package/src/wire/rateLimit.ts +155 -0
  619. package/dist/ablo.d.ts.map +0 -1
  620. package/dist/ablo.js.map +0 -1
  621. package/dist/commitRecordRuntime.d.ts.map +0 -1
  622. package/dist/commitRecordRuntime.js.map +0 -1
  623. package/dist/coordination/awaitClaimGrant.d.ts.map +0 -1
  624. package/dist/coordination/awaitClaimGrant.js.map +0 -1
  625. package/dist/coordination/claimHeartbeatLoop.d.ts.map +0 -1
  626. package/dist/coordination/claimHeartbeatLoop.js.map +0 -1
  627. package/dist/coordination/claimMeta.d.ts.map +0 -1
  628. package/dist/coordination/claimMeta.js.map +0 -1
  629. package/dist/coordination/events.d.ts.map +0 -1
  630. package/dist/coordination/events.js +0 -8
  631. package/dist/coordination/events.js.map +0 -1
  632. package/dist/coordination/locator.d.ts.map +0 -1
  633. package/dist/coordination/locator.js.map +0 -1
  634. package/dist/coordination/targetConflict.d.ts.map +0 -1
  635. package/dist/coordination/targetConflict.js.map +0 -1
  636. package/dist/coordination/trace.d.ts.map +0 -1
  637. package/dist/coordination/trace.js.map +0 -1
  638. package/dist/durableWrites.d.ts.map +0 -1
  639. package/dist/durableWrites.js.map +0 -1
  640. package/dist/headlessClient.d.ts.map +0 -1
  641. package/dist/log/syncDeltaRow.d.ts.map +0 -1
  642. package/dist/log/syncDeltaRow.js.map +0 -1
  643. package/dist/policy/types.d.ts +0 -226
  644. package/dist/policy/types.d.ts.map +0 -1
  645. package/dist/policy/types.js +0 -127
  646. package/dist/policy/types.js.map +0 -1
  647. package/dist/readSetContext.d.ts.map +0 -1
  648. package/dist/readSetContext.js.map +0 -1
  649. package/dist/resources/functionalUpdate.d.ts.map +0 -1
  650. package/dist/resources/functionalUpdate.js.map +0 -1
  651. package/dist/resources/httpResources.d.ts.map +0 -1
  652. package/dist/resources/httpResources.js +0 -17
  653. package/dist/resources/httpResources.js.map +0 -1
  654. package/dist/resources/modelOperations.d.ts.map +0 -1
  655. package/dist/resources/modelOperations.js.map +0 -1
  656. package/dist/resources/mutationOptions.d.ts.map +0 -1
  657. package/dist/resources/mutationOptions.js.map +0 -1
  658. package/dist/resources/where.d.ts.map +0 -1
  659. package/dist/resources/where.js.map +0 -1
  660. package/dist/resources/writeOptionsSchema.d.ts.map +0 -1
  661. package/dist/resources/writeOptionsSchema.js.map +0 -1
  662. package/dist/schema/coordination.d.ts +0 -113
  663. package/dist/schema/coordination.d.ts.map +0 -1
  664. package/dist/schema/coordination.js +0 -134
  665. package/dist/schema/coordination.js.map +0 -1
  666. package/dist/source/adapter.d.ts.map +0 -1
  667. package/dist/source/adapter.js.map +0 -1
  668. package/dist/source/adapterFactory.d.ts.map +0 -1
  669. package/dist/source/adapterFactory.js.map +0 -1
  670. package/dist/source/adapterProfile.d.ts.map +0 -1
  671. package/dist/source/adapterProfile.js.map +0 -1
  672. package/dist/source/conformance.d.ts.map +0 -1
  673. package/dist/source/conformance.js.map +0 -1
  674. package/dist/source/connector.d.ts.map +0 -1
  675. package/dist/source/connector.js.map +0 -1
  676. package/dist/source/connectorProtocol.d.ts.map +0 -1
  677. package/dist/source/connectorProtocol.js.map +0 -1
  678. package/dist/source/contract.d.ts.map +0 -1
  679. package/dist/source/contract.js.map +0 -1
  680. package/dist/source/drizzle.d.ts +0 -2
  681. package/dist/source/drizzle.d.ts.map +0 -1
  682. package/dist/source/drizzle.js +0 -2
  683. package/dist/source/drizzle.js.map +0 -1
  684. package/dist/source/factory.d.ts.map +0 -1
  685. package/dist/source/factory.js.map +0 -1
  686. package/dist/source/idempotency.d.ts.map +0 -1
  687. package/dist/source/idempotency.js.map +0 -1
  688. package/dist/source/kysely.d.ts +0 -3
  689. package/dist/source/kysely.d.ts.map +0 -1
  690. package/dist/source/kysely.js +0 -3
  691. package/dist/source/kysely.js.map +0 -1
  692. package/dist/source/migrations.d.ts.map +0 -1
  693. package/dist/source/migrations.js.map +0 -1
  694. package/dist/source/next.d.ts.map +0 -1
  695. package/dist/source/next.js.map +0 -1
  696. package/dist/source/pushQueue.d.ts.map +0 -1
  697. package/dist/source/pushQueue.js.map +0 -1
  698. package/dist/source/signing.d.ts.map +0 -1
  699. package/dist/source/signing.js.map +0 -1
  700. package/dist/transactionLayer.d.ts.map +0 -1
  701. package/dist/transactionLayer.js.map +0 -1
  702. package/dist/transactions/confirmation/commitEnvelope.d.ts.map +0 -1
  703. package/dist/transactions/confirmation/commitEnvelope.js.map +0 -1
  704. package/dist/transactions/confirmation/httpCommitEnvelope.d.ts.map +0 -1
  705. package/dist/transactions/confirmation/httpCommitEnvelope.js.map +0 -1
  706. package/dist/transactions/confirmation/idempotencyKey.d.ts.map +0 -1
  707. package/dist/transactions/confirmation/idempotencyKey.js.map +0 -1
  708. package/dist/transactions/confirmation/pendingWrite.d.ts.map +0 -1
  709. package/dist/transactions/confirmation/pendingWrite.js.map +0 -1
  710. package/dist/transport/commitFrames.d.ts.map +0 -1
  711. package/dist/transport/commitFrames.js.map +0 -1
  712. package/dist/transport/connectionManager.d.ts.map +0 -1
  713. package/dist/transport/connectionManager.js.map +0 -1
  714. package/dist/transport/credentialLifecycle.d.ts.map +0 -1
  715. package/dist/transport/credentialLifecycle.js.map +0 -1
  716. package/dist/transport/heartbeat.d.ts.map +0 -1
  717. package/dist/transport/heartbeat.js.map +0 -1
  718. package/dist/transport/httpClient.d.ts.map +0 -1
  719. package/dist/transport/httpClient.js.map +0 -1
  720. package/dist/transport/httpFeed.d.ts +0 -4
  721. package/dist/transport/httpFeed.d.ts.map +0 -1
  722. package/dist/transport/httpOptions.js.map +0 -1
  723. package/dist/transport/httpTransport.d.ts.map +0 -1
  724. package/dist/transport/httpTransport.js.map +0 -1
  725. package/dist/transport/networkProbe.d.ts.map +0 -1
  726. package/dist/transport/networkProbe.js.map +0 -1
  727. package/dist/transport/wsFrameHandlers.d.ts.map +0 -1
  728. package/dist/transport/wsFrameHandlers.js.map +0 -1
  729. package/dist/transport/wsTransport.d.ts.map +0 -1
  730. package/dist/transport/wsTransport.js.map +0 -1
  731. package/dist/wire/claimEvent.d.ts.map +0 -1
  732. package/dist/wire/claimEvent.js.map +0 -1
  733. package/dist/wire/claims.d.ts.map +0 -1
  734. package/dist/wire/claims.js.map +0 -1
  735. package/dist/wire/commit.d.ts +0 -2801
  736. package/dist/wire/commit.d.ts.map +0 -1
  737. package/dist/wire/commit.js.map +0 -1
  738. package/dist/wire/delta.d.ts.map +0 -1
  739. package/dist/wire/delta.js.map +0 -1
  740. package/dist/wire/deltaDelivery.d.ts.map +0 -1
  741. package/dist/wire/deltaDelivery.js.map +0 -1
  742. package/dist/wire/feedCursor.d.ts.map +0 -1
  743. package/dist/wire/feedCursor.js.map +0 -1
  744. package/dist/wire/feedEvent.d.ts.map +0 -1
  745. package/dist/wire/feedEvent.js.map +0 -1
  746. package/src/policy/types.ts +0 -300
  747. package/src/schema/coordination.ts +0 -161
  748. package/src/source/drizzle.ts +0 -1
  749. package/src/source/kysely.ts +0 -2
  750. /package/dist/{coordination → claims}/targetConflict.d.ts +0 -0
  751. /package/dist/{coordination → claims}/targetConflict.js +0 -0
  752. /package/dist/{resources → client/resources}/mutationOptions.js +0 -0
  753. /package/dist/{resources → client/resources}/where.d.ts +0 -0
  754. /package/dist/{transactions → commit}/confirmation/httpCommitEnvelope.d.ts +0 -0
  755. /package/dist/{transactions → commit}/confirmation/idempotencyKey.d.ts +0 -0
  756. /package/dist/{transactions → commit}/confirmation/idempotencyKey.js +0 -0
  757. /package/dist/source/{adapter.js → adapters/adapter.js} +0 -0
  758. /package/dist/source/{adapterFactory.d.ts → adapters/adapterFactory.d.ts} +0 -0
  759. /package/dist/source/{adapterProfile.d.ts → adapters/adapterProfile.d.ts} +0 -0
  760. /package/dist/source/{adapterProfile.js → adapters/adapterProfile.js} +0 -0
  761. /package/dist/source/{idempotency.d.ts → adapters/idempotency.d.ts} +0 -0
  762. /package/src/{wire/claimEvent.ts → claims/eventContract.ts} +0 -0
  763. /package/src/{coordination/claimHeartbeatLoop.ts → claims/heartbeat.ts} +0 -0
  764. /package/src/{coordination/claimMeta.ts → claims/meta.ts} +0 -0
  765. /package/src/{coordination → claims}/targetConflict.ts +0 -0
  766. /package/src/{transactions → commit}/confirmation/idempotencyKey.ts +0 -0
  767. /package/src/{wire/feedCursor.ts → observation/cursor.ts} +0 -0
  768. /package/src/{wire/deltaDelivery.ts → observation/deliveryContract.ts} +0 -0
  769. /package/src/source/{adapterProfile.ts → adapters/adapterProfile.ts} +0 -0
@@ -0,0 +1,43 @@
1
+ import { z } from 'zod';
2
+
3
+ /**
4
+ * Row/subject authorization for one model.
5
+ *
6
+ * A row is authorized exactly when the authenticated request carries the sync
7
+ * group `${group}:${row[field]}`. Both values are plain schema data so the rule
8
+ * survives serialization and can be compiled by every storage plane.
9
+ */
10
+ export const subjectRuleSchema = z.strictObject({
11
+ field: z.string().regex(
12
+ /^[a-zA-Z_][a-zA-Z0-9_]*$/,
13
+ 'subject.field must name a model field',
14
+ ),
15
+ group: z.string().regex(
16
+ /^[a-z][a-z0-9_]*$/,
17
+ 'subject.group must be a lowercase identifier, e.g. "workspace"',
18
+ ),
19
+ });
20
+
21
+ export type SubjectRule = z.infer<typeof subjectRuleSchema>;
22
+
23
+ /** The exact trusted group a row must match, or null for a malformed row. */
24
+ export function subjectGroupForRow(
25
+ rule: SubjectRule,
26
+ row: Readonly<Record<string, unknown>>,
27
+ ): string | null {
28
+ const value = row[rule.field];
29
+ return typeof value === 'string' && value.length > 0
30
+ ? `${rule.group}:${value}`
31
+ : null;
32
+ }
33
+
34
+ /** Fail-closed row check shared by endpoint adapters and in-memory log folds. */
35
+ export function subjectAuthorized(
36
+ rule: SubjectRule | undefined,
37
+ row: Readonly<Record<string, unknown>>,
38
+ groups: readonly string[] | null | undefined,
39
+ ): boolean {
40
+ if (!rule) return true;
41
+ const required = subjectGroupForRow(rule, row);
42
+ return required !== null && (groups ?? []).includes(required);
43
+ }
@@ -21,10 +21,11 @@ import type {
21
21
  SourceOperation,
22
22
  SourceRequestContext,
23
23
  } from '../source/index.js';
24
- import type { ServerSyncDelta } from '../wire/delta.js';
24
+ import type { ServerSyncDelta } from '../observation/contract.js';
25
25
  import type { BootstrapModel } from './readConfig.js';
26
26
  import type { CommitContext, CommitExecutionResult } from './commit.js';
27
27
  import type { StorageMode } from './storageMode.js';
28
+ import type { SubjectRule } from '../schema/subject.js';
28
29
 
29
30
  /**
30
31
  * A canonical database row: one record, keyed by column name. The value type is
@@ -141,6 +142,7 @@ export type ReadRequest =
141
142
  readonly sourceModel?: string;
142
143
  /** `__typename` stamped on each returned row. */
143
144
  readonly typename: string;
145
+ readonly subject?: SubjectRule;
144
146
  readonly query: SourceListQuery;
145
147
  readonly scope?: SourceRequestContext;
146
148
  /** Runs the query against a hosted database: compile, take the tenant pool, apply row-level security, unpack the rows. */
@@ -13,11 +13,11 @@
13
13
  * commit time and the shape of a stored or broadcast delta share one definition
14
14
  * rather than being kept in step by hand.
15
15
  */
16
- import type { ParticipantKind, ConfirmationState } from '../log/syncDeltaRow.js';
17
- import type { ParticipantRef } from '../wire/delta.js';
18
- import type { CommitExecutionResultInput } from '../wire/commit.js';
19
- import type { CommitOperationResult } from '../wire/commit.js';
20
- import type { ReadDependency, TrackDependency } from '../coordination/schema.js';
16
+ import type { ParticipantKind, ConfirmationState } from '../observation/persistence/syncDeltaRow.js';
17
+ import type { ParticipantRef } from '../observation/contract.js';
18
+ import type { CommitExecutionResultInput } from '../commit/contract.js';
19
+ import type { CommitOperationResult } from '../commit/contract.js';
20
+ import type { ReadDependency } from '../coordination/schema.js';
21
21
  import type { EffectiveAuthority } from '../auth/capability.js';
22
22
 
23
23
  export interface CommitContext {
@@ -81,18 +81,10 @@ export interface CommitContext {
81
81
  /**
82
82
  * The premise for the whole batch. The committer declares the rows or groups
83
83
  * it read to form this batch; the engine checks that none of them changed since
84
- * each entry's `readAt` timestamp and applies that entry's `onStale` disposition
85
- * across the batch. This differs from the per-operation `readAt` guard, which
84
+ * each entry's `readAt` timestamp and rejects the batch if one moved. This differs from the per-operation `readAt` guard, which
86
85
  * validates only the rows being written. Omit it to check the write targets alone.
87
86
  */
88
87
  reads?: ReadDependency[] | null;
89
- /**
90
- * Durable premises to persist for this commit's participant. Each entry is
91
- * kept in `track_dependencies` and re-checked against every future delta; a
92
- * later match opens a `StaleNotification` delivered out of band. Distinct
93
- * from `reads`, which is checked once here and discarded.
94
- */
95
- track?: TrackDependency[] | null;
96
88
  }
97
89
 
98
90
  /**
@@ -26,7 +26,7 @@ export {
26
26
  commitExecutionResultSchema,
27
27
  commitRecordSchema,
28
28
  type CommitRecord,
29
- } from '../wire/commit.js';
29
+ } from '../commit/contract.js';
30
30
  export { storageModeSchema, type StorageMode } from './storageMode.js';
31
31
  export type {
32
32
  ColumnOverride,
@@ -19,6 +19,8 @@
19
19
  * Plain data, no database driver — it feeds the read side of the data adapter
20
20
  * contract, and your query builder reads it to load a model's initial rows.
21
21
  */
22
+ import type { SubjectRule } from '../schema/subject.js';
23
+
22
24
 
23
25
  /** A mapping from a declared field to a physical column, with the alias to apply after a `SELECT *`. */
24
26
  export interface ColumnOverride {
@@ -88,6 +90,8 @@ export interface ReadModelShape {
88
90
  readonly orgColumn?: string;
89
91
  /** Parent-table scoping for rows with no tenancy column of their own. */
90
92
  readonly scopedVia?: ParentScope;
93
+ /** Credential-bound row authorization compiled by every read plane. */
94
+ readonly subject?: SubjectRule;
91
95
  /** Client-facing field name → physical DB column for declared fields. */
92
96
  readonly fieldColumns?: Readonly<Record<string, string>>;
93
97
  /** Physical-column aliases needed after SELECT * for `.from(...)` fields. */
@@ -24,13 +24,13 @@
24
24
  * you want to override one of those while the adapter serves the rest.
25
25
  */
26
26
 
27
- import type { SourceListQuery, SourceRequestContext } from './types.js';
27
+ import type { SourceListQuery, SourceRequestContext } from '../types.js';
28
28
  import type {
29
29
  AdapterCapabilities,
30
30
  ChangeSet,
31
- EventsPage,
32
- Migration,
33
31
  } from './contract.js';
32
+ import type { Migration } from './migration.js';
33
+ import type { EventsPage } from '../outbox/index.js';
34
34
  import type { DatabaseAdapterProfile } from './adapterProfile.js';
35
35
 
36
36
  /**
@@ -83,8 +83,12 @@ export interface MutationAdapter {
83
83
  */
84
84
  export interface DataSourceAdapter extends MutationAdapter {
85
85
  readonly capabilities: AdapterCapabilities & { readonly outboxEvents: true };
86
- /** Reads outbox events after `cursor` (`null` starts from the beginning), up to `limit` events. */
86
+ /** Pure read of events after `cursor`; `null` starts at the beginning. */
87
87
  events(cursor: string | null, limit: number): Promise<EventsPage>;
88
+ /** Bounded cleanup through a consumer position Ablo has durably committed. */
89
+ acknowledgeEvents(acknowledgedThrough: string): Promise<void>;
88
90
  }
89
91
 
90
- export type { AdapterCapabilities, ChangeSet, Migration, OutboxEvent, EventsPage } from './contract.js';
92
+ export type { AdapterCapabilities, ChangeSet } from './contract.js';
93
+ export type { Migration } from './migration.js';
94
+ export type { EventsPage, OutboxEvent } from '../outbox/index.js';
@@ -6,7 +6,7 @@
6
6
  * binding, observation, and advertised guarantees.
7
7
  */
8
8
 
9
- import { AbloValidationError } from '../errors.js';
9
+ import { AbloValidationError } from '../../errors.js';
10
10
  import type { MutationAdapter } from './adapter.js';
11
11
  import { databaseAdapterProfileSchema } from './adapterProfile.js';
12
12
 
@@ -302,4 +302,4 @@ export function runDataSourceTests(
302
302
  }
303
303
  }
304
304
 
305
- export { memoryDataSource } from './adapters/memory.js';
305
+ export { memoryDataSource } from './memory.js';
@@ -5,8 +5,8 @@
5
5
  * failing deep inside a transaction, and each TypeScript type is inferred from the
6
6
  * one schema that validates it.
7
7
  *
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. The operation
8
+ * These schemas describe the adapter's mutation contract: the change set it
9
+ * commits and the capabilities it advertises. The operation
10
10
  * vocabulary is not restated here — `operationSchema` is projected from the
11
11
  * core's `commitOperationSchema`, so an action or field added to the commit
12
12
  * contract reaches a data source by construction. The assertion at the end of
@@ -16,11 +16,11 @@
16
16
  */
17
17
 
18
18
  import { z } from 'zod';
19
- import { correlationIdSchema } from '../wire/commit.js';
19
+ import { correlationIdSchema } from '../../commit/contract.js';
20
20
  import {
21
21
  commitOperationSchema,
22
22
  commitOperationTypeSchema,
23
- } from '../coordination/schema.js';
23
+ } from '../../coordination/schema.js';
24
24
  import {
25
25
  ABLO_SOURCE_CLIENT_TX_ID_MAX_LENGTH,
26
26
  ABLO_SOURCE_ECHO_MAX_OPERATIONS,
@@ -28,7 +28,8 @@ import {
28
28
  type SourceCommitEcho,
29
29
  type SourceCommitEchoMarker,
30
30
  type SourceOperation,
31
- } from './types.js';
31
+ } from '../types.js';
32
+ import type { SourceRequestContext } from '../types.js';
32
33
 
33
34
  const jsonObject = z.record(z.string(), z.unknown());
34
35
 
@@ -44,15 +45,15 @@ export type OperationType = z.infer<typeof operationTypeSchema>;
44
45
  * A single operation within a change set, and the runtime validator for it.
45
46
  *
46
47
  * The field set is projected from `commitOperationSchema` — an operation
47
- * reaching a data source is a commit operation minus the two fields the core
48
- * settles internally (`bypass`, `fenceToken`). The two `min(1)` overrides are
48
+ * reaching a data source is a commit operation minus the fencing field the
49
+ * core settles internally. The two `min(1)` overrides are
49
50
  * deliberate and local: this is a customer-implemented boundary, so an empty
50
51
  * model name or row id is rejected here rather than forwarded. Stating them as
51
52
  * an extension keeps the tightening visible as a choice instead of hiding it
52
53
  * inside a second copy of the shape.
53
54
  */
54
55
  export const operationSchema = commitOperationSchema
55
- .omit({ bypass: true, fenceToken: true })
56
+ .omit({ fenceToken: true })
56
57
  .extend({
57
58
  model: z.string().min(1),
58
59
  id: z.string().min(1).nullish(),
@@ -149,62 +150,17 @@ export const changeSetSchema = z.object({
149
150
  correlationId: correlationIdSchema,
150
151
  intentHash: z.string().regex(/^[a-f0-9]{64}$/).optional(),
151
152
  echo: sourceCommitEchoSchema.optional(),
153
+ scope: z.object({
154
+ participantId: z.string().optional(),
155
+ participantKind: z.enum(['user', 'agent', 'system']).optional(),
156
+ organizationId: z.string().optional(),
157
+ branchId: z.string().optional(),
158
+ projectId: z.string().optional(),
159
+ syncGroups: z.array(z.string()).optional(),
160
+ }).optional() satisfies z.ZodType<SourceRequestContext | undefined>,
152
161
  });
153
162
  export type ChangeSet = z.infer<typeof changeSetSchema>;
154
163
 
155
- /**
156
- * A row in the adapter's `ablo_outbox` table. The adapter writes it in the same
157
- * transaction as the underlying row change — the transactional-outbox pattern — so
158
- * a change and its event commit together or not at all. The `events()` feed later
159
- * reads these rows back and hands them to Ablo, and `cursor` is the monotonic
160
- * ordering key Ablo round-trips to resume where it left off.
161
- */
162
- export const outboxEventSchema = z.object({
163
- /** Stable, globally-unique id — Ablo's replay-protection key. */
164
- id: z.string().min(1),
165
- model: z.string().min(1),
166
- entityId: z.string().min(1),
167
- type: operationTypeSchema,
168
- /** The changed row, in the key shape `SourceEvent.data` defines: the model's
169
- * declared schema fields, never the table's physical column names. */
170
- data: jsonObject.nullish(),
171
- organizationId: z.string().nullish(),
172
- /** Legacy source transaction id. Never use this field to settle a queued commit. */
173
- clientTxId: z.string().nullish(),
174
- /** Scoped server-authored identity that correlates this event to a queued commit. */
175
- correlationId: correlationIdSchema.nullish(),
176
- /** Stable identity of this operation within the correlated source commit. */
177
- transactionId: z
178
- .string()
179
- .min(1)
180
- .max(ABLO_SOURCE_CLIENT_TX_ID_MAX_LENGTH)
181
- .nullish(),
182
- occurredAt: z.number().nullish(),
183
- /** Monotonic ordering key (bigint as string). `events()` pages by `cursor > ?`. */
184
- cursor: z.string().min(1),
185
- });
186
- export type OutboxEvent = z.infer<typeof outboxEventSchema>;
187
-
188
- /** A page of outbox events returned by `events()`. */
189
- export const eventsPageSchema = z.object({
190
- events: z.array(outboxEventSchema),
191
- nextCursor: z.string().nullable(),
192
- });
193
- export type EventsPage = z.infer<typeof eventsPageSchema>;
194
-
195
- /**
196
- * A table-creation migration an adapter ships, so you never hand-write the
197
- * `ablo_idempotency` and `ablo_outbox` tables yourself. An adapter returns these
198
- * from its `migrations()` method.
199
- */
200
- export const migrationSchema = z.object({
201
- /** Stable name, used as the migration filename + applied-ledger key. */
202
- name: z.string().min(1),
203
- /** The forward SQL. */
204
- up: z.string().min(1),
205
- });
206
- export type Migration = z.infer<typeof migrationSchema>;
207
-
208
164
  /** Describes what an adapter's backend supports, so callers check a capability rather than infer it from behavior. */
209
165
  export const adapterCapabilitiesSchema = z.object({
210
166
  /** `commit` is atomic across all operations in the change set. */
@@ -244,6 +200,13 @@ const _echoContractInSync: [_AssertEchoMatchesWire, _AssertWireMatchesEcho] = [
244
200
  ];
245
201
  void _echoContractInSync;
246
202
 
203
+ // Compatibility façade. New implementation code follows the owned subsystem
204
+ // downward from `outbox/index.ts` and imports migrations from `migration.ts`.
205
+ export { eventsPageSchema, outboxEventSchema } from '../outbox/contract.js';
206
+ export type { EventsPage, OutboxEvent } from '../outbox/contract.js';
207
+ export { migrationSchema } from './migration.js';
208
+ export type { Migration } from './migration.js';
209
+
247
210
  type _AssertEchoMarkerMatchesWire = SourceCommitEchoMarkerWire extends SourceCommitEchoMarker
248
211
  ? true
249
212
  : never;
@@ -41,23 +41,37 @@ import type {
41
41
  AdapterReadRequest,
42
42
  DataSourceAdapter,
43
43
  Row,
44
- } from '../adapter.js';
45
- import { defineDatabaseAdapter } from '../adapterFactory.js';
46
- import { postgresAdapterProfile } from '../adapterProfile.js';
47
- import type { ChangeSet, EventsPage, Migration, Operation } from '../contract.js';
48
- import { outboxEventSchema } from '../contract.js';
49
- import { adapterTableMigrations } from '../migrations.js';
44
+ } from './adapter.js';
45
+ import { defineDatabaseAdapter } from './adapterFactory.js';
46
+ import { postgresAdapterProfile } from './adapterProfile.js';
47
+ import type { ChangeSet, Operation } from './contract.js';
48
+ import type { Migration } from './migration.js';
49
+ import { adapterTableMigrations } from './migrations.js';
50
50
  import {
51
51
  assertSourceIdempotencyIntent,
52
52
  assertSourceIdempotencyRetention,
53
53
  SOURCE_IDEMPOTENCY_RETENTION,
54
54
  sourceChangeIntentHash,
55
- } from '../idempotency.js';
55
+ } from './idempotency.js';
56
56
  import type { Schema, SchemaRecord } from '../../schema/schema.js';
57
57
  import { toSchemaJSON } from '../../schema/serialize.js';
58
58
  import { camelToSnake, snakeToCamel } from '../../schema/ddl.js';
59
59
  import { tenancyColumn } from '../../schema/tenancy.js';
60
60
  import { ABLO_POSTGRES_COMMIT_ECHO_PREFIX } from '../types.js';
61
+ import {
62
+ authorizeSourceChange,
63
+ authorizeSourceRead,
64
+ lockSourceSubjectCreates,
65
+ rethrowStrictCreateConflict,
66
+ sourceSyncGroups,
67
+ sourceSubjectRule,
68
+ sourceSubjectValues,
69
+ } from './subjectAuthorization.js';
70
+ import {
71
+ decodeDatabaseOutboxEvent,
72
+ ENDPOINT_OUTBOX_PRUNE_BATCH_SIZE,
73
+ type EventsPage,
74
+ } from '../outbox/index.js';
61
75
 
62
76
  /** The subset of a Drizzle database/transaction handle the adapter calls. */
63
77
  export interface DrizzleLike {
@@ -214,11 +228,18 @@ export function drizzleDataSource<S extends SchemaRecord>(
214
228
  const table = sql.identifier(mc.table);
215
229
  if (req.kind === 'load') {
216
230
  const rows = rowsOf(await db.execute(sql`SELECT * FROM ${table} WHERE id = ${req.id} LIMIT 1`));
217
- return rows.map((r) => toFields(mc, r));
231
+ return authorizeSourceRead(schema, req, rows.map((r) => toFields(mc, r)));
218
232
  }
219
233
  const limit = req.query?.limit ?? 1000;
220
- const rows = rowsOf(await db.execute(sql`SELECT * FROM ${table} LIMIT ${limit}`));
221
- return rows.map((r) => toFields(mc, r));
234
+ const rule = sourceSubjectRule(schema, req.model);
235
+ const subjects = sourceSubjectValues(rule, req.scope?.syncGroups);
236
+ if (subjects?.length === 0) return [];
237
+ const rows = rowsOf(await db.execute(subjects
238
+ ? sql`SELECT * FROM ${table}
239
+ WHERE ${sql.identifier(columnFor(mc, rule!.field))} = ANY(${subjects})
240
+ LIMIT ${limit}`
241
+ : sql`SELECT * FROM ${table} LIMIT ${limit}`));
242
+ return authorizeSourceRead(schema, req, rows.map((r) => toFields(mc, r)));
222
243
  },
223
244
 
224
245
  async commit(change: ChangeSet): Promise<AdapterCommitResult> {
@@ -238,19 +259,46 @@ export function drizzleDataSource<S extends SchemaRecord>(
238
259
  return { rows: cachedRow.response as Row[] };
239
260
  }
240
261
 
262
+ await lockSourceSubjectCreates(schema, change, async (_operation, key) => {
263
+ await tx.execute(sql`SELECT pg_advisory_xact_lock(hashtextextended(${key}, 0))`);
264
+ });
265
+
266
+ await authorizeSourceChange(schema, change, async (operation) => {
267
+ if (!operation.id) return null;
268
+ const mc = modelColumns(operation.model);
269
+ const found = rowsOf(
270
+ await tx.execute(
271
+ sql`SELECT * FROM ${sql.identifier(mc.table)} WHERE id = ${operation.id} LIMIT 1 FOR UPDATE`,
272
+ ),
273
+ )[0];
274
+ return found ? toFields(mc, found) : null;
275
+ });
276
+
241
277
  const rows: Row[] = [];
242
278
  for (const [index, op] of change.operations.entries()) {
243
- const row = await applyOperation(tx, op);
279
+ let row: Row;
280
+ try {
281
+ row = await applyOperation(tx, op);
282
+ } catch (error) {
283
+ if (op.type === 'CREATE') rethrowStrictCreateConflict(error, op);
284
+ throw error;
285
+ }
244
286
  rows.push(row);
245
287
  const entityId = String(row.id ?? rowId(op));
288
+ const syncGroups = sourceSyncGroups(schema, op.model, row);
289
+ const syncGroupsSql = sql`ARRAY[${sql.join(
290
+ syncGroups.map((group) => sql`${group}`),
291
+ sql`, `,
292
+ )}]::text[]`;
246
293
  await tx.execute(sql`
247
294
  INSERT INTO ablo_outbox (
248
- id, model, entity_id, type, data,
295
+ id, model, entity_id, type, data, event_version, sync_groups,
249
296
  correlation_id, transaction_id, occurred_at
250
297
  )
251
298
  VALUES (
252
299
  ${`${change.correlationId}:${index}`}, ${op.model}, ${entityId}, ${op.type},
253
- ${op.type === 'DELETE' ? null : JSON.stringify(row)}::jsonb,
300
+ ${op.type === 'DELETE' ? null : JSON.stringify(row)}::jsonb, 2,
301
+ ${syncGroupsSql},
254
302
  ${change.correlationId}, ${op.transactionId ?? null}, ${Date.now()}
255
303
  )`);
256
304
  }
@@ -270,29 +318,27 @@ export function drizzleDataSource<S extends SchemaRecord>(
270
318
  });
271
319
  },
272
320
 
321
+ async acknowledgeEvents(acknowledgedThrough: string): Promise<void> {
322
+ await db.transaction(async (tx) => {
323
+ await tx.execute(sql`
324
+ DELETE FROM ablo_outbox
325
+ WHERE cursor IN (
326
+ SELECT cursor FROM ablo_outbox
327
+ WHERE cursor <= ${acknowledgedThrough}
328
+ ORDER BY cursor ASC LIMIT ${ENDPOINT_OUTBOX_PRUNE_BATCH_SIZE}
329
+ )`);
330
+ });
331
+ },
332
+
273
333
  async events(cursor: string | null, limit: number): Promise<EventsPage> {
274
334
  const after = cursor ?? '0';
275
335
  const rows = rowsOf(
276
336
  await db.execute(sql`
277
- SELECT cursor, id, model, entity_id, type, data, organization_id,
337
+ SELECT cursor, id, model, entity_id, type, data, event_version, sync_groups, organization_id,
278
338
  client_tx_id, correlation_id, transaction_id, occurred_at
279
339
  FROM ablo_outbox WHERE cursor > ${after} ORDER BY cursor ASC LIMIT ${limit}`),
280
340
  );
281
- const events = rows.map((r) =>
282
- outboxEventSchema.parse({
283
- id: r.id,
284
- model: r.model,
285
- entityId: r.entity_id,
286
- type: r.type,
287
- data: r.data ?? null,
288
- organizationId: r.organization_id ?? null,
289
- clientTxId: r.client_tx_id ?? null,
290
- correlationId: r.correlation_id ?? null,
291
- transactionId: r.transaction_id ?? null,
292
- occurredAt: r.occurred_at != null ? Number(r.occurred_at) : null,
293
- cursor: String(r.cursor),
294
- }),
295
- );
341
+ const events = rows.map(decodeDatabaseOutboxEvent);
296
342
  return { events, nextCursor: events.at(-1)?.cursor ?? null };
297
343
  },
298
344
  });
@@ -12,11 +12,11 @@
12
12
 
13
13
  import { createHash } from 'node:crypto';
14
14
  import { z } from 'zod';
15
- import { AbloValidationError } from '../errors.js';
15
+ import { AbloValidationError } from '../../errors.js';
16
16
  import {
17
17
  COMMIT_CORRELATION_ID_MAX_LENGTH,
18
18
  correlationIdSchema,
19
- } from '../wire/commit.js';
19
+ } from '../../commit/contract.js';
20
20
  import type { ChangeSet, Operation } from './contract.js';
21
21
 
22
22
  const SOURCE_ECHO_TRANSACTION_ID_PREFIX = 'ablo_echo_tx_v1:';
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Customer-database adapter subsystem.
3
+ *
4
+ * Start here and descend through the behavioral adapter port, mutation
5
+ * contract, profiles, migrations, idempotency, authorization, conformance,
6
+ * and concrete ORM bindings.
7
+ */
8
+ export * from './adapter.js';
9
+ export * from './adapterFactory.js';
10
+ export * from './adapterProfile.js';
11
+ export * from './contract.js';
12
+ export * from './migration.js';
13
+ export * from './migrations.js';
14
+ export * from './idempotency.js';
15
+ export * from './subjectAuthorization.js';
16
+ export * from './conformance.js';
17
+ export * from './memory.js';
18
+ export * from './prisma.js';
19
+ export * from './drizzle.js';
20
+ export * from './kysely.js';