@abloatai/transaction 0.57.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 (737) hide show
  1. package/CONVENTIONS.md +51 -41
  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 +51 -57
  106. package/dist/client/resources/httpResources.d.ts.map +1 -0
  107. package/dist/{resources → client/resources}/httpResources.js +1 -1
  108. package/dist/client/resources/httpResources.js.map +1 -0
  109. package/dist/{resources → client/resources}/modelCreate.d.ts +1 -1
  110. package/dist/client/resources/modelCreate.d.ts.map +1 -0
  111. package/dist/{resources → client/resources}/modelCreate.js +1 -1
  112. package/dist/client/resources/modelCreate.js.map +1 -0
  113. package/dist/{resources → client/resources}/modelOperations.d.ts +35 -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 +2 -35
  124. package/dist/client/resources/writeOptionsSchema.d.ts.map +1 -0
  125. package/dist/{resources → client/resources}/writeOptionsSchema.js +5 -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} +13 -20
  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/{transport/httpCommitRequest.d.ts → commit/httpRequest.d.ts} +6 -6
  149. package/dist/commit/httpRequest.d.ts.map +1 -0
  150. package/dist/{transport/httpCommitRequest.js → commit/httpRequest.js} +2 -3
  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} +10 -25
  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 -459
  169. package/dist/coordination/schema.d.ts.map +1 -1
  170. package/dist/coordination/schema.js +13 -261
  171. package/dist/coordination/schema.js.map +1 -1
  172. package/dist/errorCodes.d.ts +15 -9
  173. package/dist/errorCodes.d.ts.map +1 -1
  174. package/dist/errorCodes.js +13 -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/index.d.ts +5 -6
  225. package/dist/schema/index.d.ts.map +1 -1
  226. package/dist/schema/index.js +4 -7
  227. package/dist/schema/index.js.map +1 -1
  228. package/dist/schema/model.d.ts +0 -27
  229. package/dist/schema/model.d.ts.map +1 -1
  230. package/dist/schema/model.js +0 -2
  231. package/dist/schema/model.js.map +1 -1
  232. package/dist/schema/openapi.d.ts.map +1 -1
  233. package/dist/schema/openapi.js +45 -6
  234. package/dist/schema/openapi.js.map +1 -1
  235. package/dist/schema/schema.d.ts +11 -3
  236. package/dist/schema/schema.d.ts.map +1 -1
  237. package/dist/schema/schema.js +9 -2
  238. package/dist/schema/schema.js.map +1 -1
  239. package/dist/schema/serialize.d.ts +1 -4
  240. package/dist/schema/serialize.d.ts.map +1 -1
  241. package/dist/schema/serialize.js +0 -4
  242. package/dist/schema/serialize.js.map +1 -1
  243. package/dist/schema/tenancy.d.ts +1 -1
  244. package/dist/server/adapter.d.ts +1 -1
  245. package/dist/server/adapter.d.ts.map +1 -1
  246. package/dist/server/commit.d.ts +6 -14
  247. package/dist/server/commit.d.ts.map +1 -1
  248. package/dist/server/index.d.ts +1 -1
  249. package/dist/server/index.d.ts.map +1 -1
  250. package/dist/server/index.js +1 -1
  251. package/dist/server/index.js.map +1 -1
  252. package/dist/server/storageMode.d.ts +1 -1
  253. package/dist/source/{adapter.d.ts → adapters/adapter.d.ts} +10 -4
  254. package/dist/source/adapters/adapter.d.ts.map +1 -0
  255. package/dist/source/adapters/adapter.js.map +1 -0
  256. package/dist/source/adapters/adapterFactory.d.ts.map +1 -0
  257. package/dist/source/{adapterFactory.js → adapters/adapterFactory.js} +1 -1
  258. package/dist/source/adapters/adapterFactory.js.map +1 -0
  259. package/dist/source/adapters/adapterProfile.d.ts.map +1 -0
  260. package/dist/source/adapters/adapterProfile.js.map +1 -0
  261. package/dist/source/{conformance.d.ts → adapters/conformance.d.ts} +1 -1
  262. package/dist/source/adapters/conformance.d.ts.map +1 -0
  263. package/dist/source/{conformance.js → adapters/conformance.js} +1 -1
  264. package/dist/source/adapters/conformance.js.map +1 -0
  265. package/dist/source/{contract.d.ts → adapters/contract.d.ts} +8 -77
  266. package/dist/source/adapters/contract.d.ts.map +1 -0
  267. package/dist/source/{contract.js → adapters/contract.js} +12 -57
  268. package/dist/source/adapters/contract.js.map +1 -0
  269. package/dist/source/adapters/drizzle.d.ts +1 -1
  270. package/dist/source/adapters/drizzle.d.ts.map +1 -1
  271. package/dist/source/adapters/drizzle.js +21 -23
  272. package/dist/source/adapters/drizzle.js.map +1 -1
  273. package/dist/source/adapters/idempotency.d.ts.map +1 -0
  274. package/dist/source/{idempotency.js → adapters/idempotency.js} +2 -2
  275. package/dist/source/adapters/idempotency.js.map +1 -0
  276. package/dist/source/adapters/index.d.ts +21 -0
  277. package/dist/source/adapters/index.d.ts.map +1 -0
  278. package/dist/source/adapters/index.js +21 -0
  279. package/dist/source/adapters/index.js.map +1 -0
  280. package/dist/source/adapters/kysely.d.ts +1 -1
  281. package/dist/source/adapters/kysely.d.ts.map +1 -1
  282. package/dist/source/adapters/kysely.js +18 -20
  283. package/dist/source/adapters/kysely.js.map +1 -1
  284. package/dist/source/adapters/kyselyMutationCore.d.ts +2 -2
  285. package/dist/source/adapters/kyselyMutationCore.d.ts.map +1 -1
  286. package/dist/source/adapters/kyselyMutationCore.js +1 -1
  287. package/dist/source/adapters/kyselyMutationCore.js.map +1 -1
  288. package/dist/source/adapters/memory.d.ts +3 -3
  289. package/dist/source/adapters/memory.d.ts.map +1 -1
  290. package/dist/source/adapters/memory.js +19 -7
  291. package/dist/source/adapters/memory.js.map +1 -1
  292. package/dist/source/adapters/migration.d.ts +8 -0
  293. package/dist/source/adapters/migration.d.ts.map +1 -0
  294. package/dist/source/adapters/migration.js +9 -0
  295. package/dist/source/adapters/migration.js.map +1 -0
  296. package/dist/source/{migrations.d.ts → adapters/migrations.d.ts} +3 -4
  297. package/dist/source/adapters/migrations.d.ts.map +1 -0
  298. package/dist/source/{migrations.js → adapters/migrations.js} +4 -52
  299. package/dist/source/adapters/migrations.js.map +1 -0
  300. package/dist/source/adapters/prisma.d.ts +1 -1
  301. package/dist/source/adapters/prisma.d.ts.map +1 -1
  302. package/dist/source/adapters/prisma.js +21 -28
  303. package/dist/source/adapters/prisma.js.map +1 -1
  304. package/dist/source/{subjectAuthorization.d.ts → adapters/subjectAuthorization.d.ts} +1 -1
  305. package/dist/source/adapters/subjectAuthorization.d.ts.map +1 -0
  306. package/dist/source/{subjectAuthorization.js → adapters/subjectAuthorization.js} +2 -2
  307. package/dist/source/adapters/subjectAuthorization.js.map +1 -0
  308. package/dist/source/{connector.d.ts → connector/client.d.ts} +6 -1
  309. package/dist/source/connector/client.d.ts.map +1 -0
  310. package/dist/source/{connector.js → connector/client.js} +28 -11
  311. package/dist/source/connector/client.js.map +1 -0
  312. package/dist/source/connector/index.d.ts +4 -0
  313. package/dist/source/connector/index.d.ts.map +1 -0
  314. package/dist/source/connector/index.js +4 -0
  315. package/dist/source/connector/index.js.map +1 -0
  316. package/dist/source/{connectorProtocol.d.ts → connector/protocol.d.ts} +8 -1
  317. package/dist/source/connector/protocol.d.ts.map +1 -0
  318. package/dist/source/{connectorProtocol.js → connector/protocol.js} +10 -3
  319. package/dist/source/connector/protocol.js.map +1 -0
  320. package/dist/source/delivery/index.d.ts +3 -0
  321. package/dist/source/delivery/index.d.ts.map +1 -0
  322. package/dist/source/delivery/index.js +3 -0
  323. package/dist/source/delivery/index.js.map +1 -0
  324. package/dist/source/{pushQueue.d.ts → delivery/pushQueue.d.ts} +1 -1
  325. package/dist/source/delivery/pushQueue.d.ts.map +1 -0
  326. package/dist/source/{pushQueue.js → delivery/pushQueue.js} +1 -1
  327. package/dist/source/delivery/pushQueue.js.map +1 -0
  328. package/dist/source/{factory.d.ts → endpoint/factory.d.ts} +3 -3
  329. package/dist/source/endpoint/factory.d.ts.map +1 -0
  330. package/dist/source/{factory.js → endpoint/factory.js} +9 -4
  331. package/dist/source/endpoint/factory.js.map +1 -0
  332. package/dist/source/endpoint/index.d.ts +5 -0
  333. package/dist/source/endpoint/index.d.ts.map +1 -0
  334. package/dist/source/endpoint/index.js +5 -0
  335. package/dist/source/endpoint/index.js.map +1 -0
  336. package/dist/source/{next.d.ts → endpoint/next.d.ts} +2 -2
  337. package/dist/source/endpoint/next.d.ts.map +1 -0
  338. package/dist/source/{next.js → endpoint/next.js} +1 -1
  339. package/dist/source/endpoint/next.js.map +1 -0
  340. package/dist/source/{signing.d.ts → endpoint/signing.d.ts} +1 -1
  341. package/dist/source/endpoint/signing.d.ts.map +1 -0
  342. package/dist/source/{signing.js → endpoint/signing.js} +1 -1
  343. package/dist/source/endpoint/signing.js.map +1 -0
  344. package/dist/source/index.d.ts +14 -12
  345. package/dist/source/index.d.ts.map +1 -1
  346. package/dist/source/index.js +13 -11
  347. package/dist/source/index.js.map +1 -1
  348. package/dist/source/outbox/contract.d.ts +50 -0
  349. package/dist/source/outbox/contract.d.ts.map +1 -0
  350. package/dist/source/outbox/contract.js +50 -0
  351. package/dist/source/outbox/contract.js.map +1 -0
  352. package/dist/source/outbox/envelope.d.ts +9 -0
  353. package/dist/source/outbox/envelope.d.ts.map +1 -0
  354. package/dist/source/outbox/envelope.js +36 -0
  355. package/dist/source/outbox/envelope.js.map +1 -0
  356. package/dist/source/outbox/index.d.ts +11 -0
  357. package/dist/source/outbox/index.d.ts.map +1 -0
  358. package/dist/source/outbox/index.js +11 -0
  359. package/dist/source/outbox/index.js.map +1 -0
  360. package/dist/source/outbox/migrations.d.ts +4 -0
  361. package/dist/source/outbox/migrations.d.ts.map +1 -0
  362. package/dist/source/outbox/migrations.js +67 -0
  363. package/dist/source/outbox/migrations.js.map +1 -0
  364. package/dist/source/outbox/retention.d.ts +3 -0
  365. package/dist/source/outbox/retention.d.ts.map +1 -0
  366. package/dist/source/outbox/retention.js +3 -0
  367. package/dist/source/outbox/retention.js.map +1 -0
  368. package/dist/source/types.d.ts +16 -17
  369. package/dist/source/types.d.ts.map +1 -1
  370. package/dist/source/types.js +1 -0
  371. package/dist/source/types.js.map +1 -1
  372. package/dist/syncLog/contract.d.ts +19 -2
  373. package/dist/syncLog/contract.d.ts.map +1 -1
  374. package/dist/syncLog/contract.js +19 -2
  375. package/dist/syncLog/contract.js.map +1 -1
  376. package/dist/transport/{credentialLifecycle.d.ts → connection/credentialLifecycle.d.ts} +3 -3
  377. package/dist/transport/connection/credentialLifecycle.d.ts.map +1 -0
  378. package/dist/transport/{credentialLifecycle.js → connection/credentialLifecycle.js} +2 -2
  379. package/dist/transport/connection/credentialLifecycle.js.map +1 -0
  380. package/dist/transport/connection/index.d.ts +5 -0
  381. package/dist/transport/connection/index.d.ts.map +1 -0
  382. package/dist/transport/connection/index.js +5 -0
  383. package/dist/transport/connection/index.js.map +1 -0
  384. package/dist/transport/{connectionManager.d.ts → connection/manager.d.ts} +13 -5
  385. package/dist/transport/connection/manager.d.ts.map +1 -0
  386. package/dist/transport/{connectionManager.js → connection/manager.js} +6 -4
  387. package/dist/transport/connection/manager.js.map +1 -0
  388. package/dist/transport/{networkProbe.d.ts → connection/networkProbe.d.ts} +2 -2
  389. package/dist/transport/connection/networkProbe.d.ts.map +1 -0
  390. package/dist/transport/{networkProbe.js → connection/networkProbe.js} +4 -4
  391. package/dist/transport/connection/networkProbe.js.map +1 -0
  392. package/dist/transport/{httpClient.d.ts → http/client.d.ts} +26 -45
  393. package/dist/transport/http/client.d.ts.map +1 -0
  394. package/dist/transport/{httpClient.js → http/client.js} +84 -124
  395. package/dist/transport/http/client.js.map +1 -0
  396. package/dist/transport/{httpTransportHelpers.d.ts → http/helpers.d.ts} +5 -5
  397. package/dist/transport/http/helpers.d.ts.map +1 -0
  398. package/dist/transport/{httpTransportHelpers.js → http/helpers.js} +5 -5
  399. package/dist/transport/http/helpers.js.map +1 -0
  400. package/dist/transport/http/index.d.ts +6 -0
  401. package/dist/transport/http/index.d.ts.map +1 -0
  402. package/dist/transport/http/index.js +6 -0
  403. package/dist/transport/http/index.js.map +1 -0
  404. package/dist/transport/{httpOptions.d.ts → http/options.d.ts} +7 -7
  405. package/dist/transport/{httpOptions.d.ts.map → http/options.d.ts.map} +1 -1
  406. package/dist/transport/{httpOptions.js → http/options.js} +1 -1
  407. package/dist/transport/http/options.js.map +1 -0
  408. package/dist/transport/http/subscription.d.ts +16 -0
  409. package/dist/transport/http/subscription.d.ts.map +1 -0
  410. package/dist/transport/http/subscription.js +146 -0
  411. package/dist/transport/http/subscription.js.map +1 -0
  412. package/dist/transport/{httpTransport.d.ts → http/transport.d.ts} +9 -6
  413. package/dist/transport/http/transport.d.ts.map +1 -0
  414. package/dist/transport/{httpTransport.js → http/transport.js} +95 -93
  415. package/dist/transport/http/transport.js.map +1 -0
  416. package/dist/transport/index.d.ts +8 -0
  417. package/dist/transport/index.d.ts.map +1 -0
  418. package/dist/transport/index.js +8 -0
  419. package/dist/transport/index.js.map +1 -0
  420. package/dist/transport/{commitFrames.d.ts → websocket/commitFrames.d.ts} +8 -20
  421. package/dist/transport/websocket/commitFrames.d.ts.map +1 -0
  422. package/dist/transport/{commitFrames.js → websocket/commitFrames.js} +6 -25
  423. package/dist/transport/websocket/commitFrames.js.map +1 -0
  424. package/dist/transport/{wsFrameHandlers.d.ts → websocket/frameHandlers.d.ts} +5 -5
  425. package/dist/transport/websocket/frameHandlers.d.ts.map +1 -0
  426. package/dist/transport/{wsFrameHandlers.js → websocket/frameHandlers.js} +10 -51
  427. package/dist/transport/websocket/frameHandlers.js.map +1 -0
  428. package/dist/transport/{heartbeat.d.ts → websocket/heartbeat.d.ts} +1 -1
  429. package/dist/transport/websocket/heartbeat.d.ts.map +1 -0
  430. package/dist/transport/{heartbeat.js → websocket/heartbeat.js} +2 -2
  431. package/dist/transport/websocket/heartbeat.js.map +1 -0
  432. package/dist/transport/websocket/index.d.ts +6 -0
  433. package/dist/transport/websocket/index.d.ts.map +1 -0
  434. package/dist/transport/websocket/index.js +6 -0
  435. package/dist/transport/websocket/index.js.map +1 -0
  436. package/dist/transport/{wsTransport.d.ts → websocket/transport.d.ts} +13 -25
  437. package/dist/transport/websocket/transport.d.ts.map +1 -0
  438. package/dist/transport/{wsTransport.js → websocket/transport.js} +14 -14
  439. package/dist/transport/websocket/transport.js.map +1 -0
  440. package/dist/types/index.d.ts +1 -1
  441. package/dist/types/index.d.ts.map +1 -1
  442. package/dist/types/streams.d.ts +8 -48
  443. package/dist/types/streams.d.ts.map +1 -1
  444. package/dist/types/streams.js +2 -2
  445. package/dist/wire/accountResponses.d.ts +4 -72
  446. package/dist/wire/accountResponses.d.ts.map +1 -1
  447. package/dist/wire/accountResponses.js +2 -10
  448. package/dist/wire/accountResponses.js.map +1 -1
  449. package/dist/wire/frames.d.ts +6 -83
  450. package/dist/wire/frames.d.ts.map +1 -1
  451. package/dist/wire/frames.js +4 -11
  452. package/dist/wire/frames.js.map +1 -1
  453. package/dist/wire/inboundFrames.d.ts +6 -131
  454. package/dist/wire/inboundFrames.d.ts.map +1 -1
  455. package/dist/wire/inboundFrames.js +3 -3
  456. package/dist/wire/inboundFrames.js.map +1 -1
  457. package/dist/wire/index.d.ts +17 -15
  458. package/dist/wire/index.d.ts.map +1 -1
  459. package/dist/wire/index.js +11 -8
  460. package/dist/wire/index.js.map +1 -1
  461. package/dist/wire/modelMutations.d.ts +1 -32
  462. package/dist/wire/modelMutations.d.ts.map +1 -1
  463. package/dist/wire/modelMutations.js +1 -8
  464. package/dist/wire/modelMutations.js.map +1 -1
  465. package/package.json +130 -10
  466. package/src/ai-sdk/modelTools.ts +5 -5
  467. package/src/ai-sdk/updateTool.ts +5 -7
  468. package/src/auth/capability.ts +5 -0
  469. package/src/auth/capabilityLifecycle.ts +1 -1
  470. package/src/auth/credentialPolicy.ts +1 -1
  471. package/src/auth/identity.ts +7 -7
  472. package/src/auth/index.ts +4 -663
  473. package/src/auth/runtime.ts +669 -0
  474. package/src/auth/sessionMint.ts +3 -2
  475. package/src/branches.ts +3 -0
  476. package/src/{coordination/awaitClaimGrant.ts → claims/awaitGrant.ts} +4 -4
  477. package/src/{wire/claims.ts → claims/contract.ts} +1 -1
  478. package/src/{coordination → claims}/events.ts +7 -11
  479. package/src/claims/index.ts +21 -0
  480. package/src/claims/lifetime.ts +78 -0
  481. package/src/{coordination → claims}/locator.ts +3 -3
  482. package/src/claims/routes.ts +81 -0
  483. package/src/{coordination → claims}/trace.ts +5 -5
  484. package/src/{ablo.ts → client/ablo.ts} +8 -20
  485. package/src/{transactionLayer.ts → client/contract.ts} +11 -13
  486. package/src/{headlessClient.ts → client/headless.ts} +13 -15
  487. package/src/client/index.ts +10 -0
  488. package/src/{resources → client/resources}/functionalUpdate.ts +4 -4
  489. package/src/{resources → client/resources}/httpResources.ts +48 -68
  490. package/src/{resources → client/resources}/modelCreate.ts +2 -2
  491. package/src/{resources → client/resources}/modelOperations.ts +46 -55
  492. package/src/{resources → client/resources}/mutationOptions.ts +4 -17
  493. package/src/{resources → client/resources}/where.ts +1 -1
  494. package/src/{resources → client/resources}/writeOptionsSchema.ts +7 -27
  495. package/src/{transactions → commit}/confirmation/commitEnvelope.ts +2 -12
  496. package/src/{transactions → commit}/confirmation/httpCommitEnvelope.ts +1 -1
  497. package/src/{transactions → commit}/confirmation/pendingWrite.ts +1 -1
  498. package/src/{wire/commit.ts → commit/contract.ts} +11 -25
  499. package/src/{durableWrites.ts → commit/durableWrites.ts} +7 -7
  500. package/src/{transport/httpCommitRequest.ts → commit/httpRequest.ts} +6 -7
  501. package/src/commit/index.ts +16 -0
  502. package/src/{readSetContext.ts → commit/readSetContext.ts} +16 -41
  503. package/src/{commitRecordRuntime.ts → commit/recordRuntime.ts} +12 -67
  504. package/src/coordination/index.ts +4 -52
  505. package/src/coordination/schema.ts +15 -302
  506. package/src/errorCodes.ts +56 -10
  507. package/src/errors.ts +32 -10
  508. package/src/index.ts +8 -8
  509. package/src/internal/read-set.ts +3 -6
  510. package/src/observability.ts +4 -4
  511. package/src/{wire/delta.ts → observation/contract.ts} +2 -2
  512. package/src/{wire/feedEvent.ts → observation/feedContract.ts} +3 -4
  513. package/src/{transport → observation}/httpFeed.ts +3 -3
  514. package/src/observation/index.ts +12 -0
  515. package/src/{log → observation/persistence}/syncDeltaRow.ts +6 -7
  516. package/src/pricing.ts +46 -25
  517. package/src/schema/index.ts +4 -20
  518. package/src/schema/model.ts +0 -33
  519. package/src/schema/openapi.ts +47 -7
  520. package/src/schema/schema.ts +23 -3
  521. package/src/schema/serialize.ts +0 -8
  522. package/src/server/adapter.ts +1 -1
  523. package/src/server/commit.ts +6 -14
  524. package/src/server/index.ts +1 -1
  525. package/src/source/{adapter.ts → adapters/adapter.ts} +9 -5
  526. package/src/source/{adapterFactory.ts → adapters/adapterFactory.ts} +1 -1
  527. package/src/source/{conformance.ts → adapters/conformance.ts} +1 -1
  528. package/src/source/{contract.ts → adapters/contract.ts} +16 -64
  529. package/src/source/adapters/drizzle.ts +29 -27
  530. package/src/source/{idempotency.ts → adapters/idempotency.ts} +2 -2
  531. package/src/source/adapters/index.ts +20 -0
  532. package/src/source/adapters/kysely.ts +32 -25
  533. package/src/source/adapters/kyselyMutationCore.ts +3 -3
  534. package/src/source/adapters/memory.ts +25 -9
  535. package/src/source/adapters/migration.ts +11 -0
  536. package/src/source/{migrations.ts → adapters/migrations.ts} +6 -54
  537. package/src/source/adapters/prisma.ts +33 -32
  538. package/src/source/{subjectAuthorization.ts → adapters/subjectAuthorization.ts} +2 -2
  539. package/src/source/{connector.ts → connector/client.ts} +35 -12
  540. package/src/source/connector/index.ts +3 -0
  541. package/src/source/{connectorProtocol.ts → connector/protocol.ts} +10 -2
  542. package/src/source/delivery/index.ts +2 -0
  543. package/src/source/{pushQueue.ts → delivery/pushQueue.ts} +2 -2
  544. package/src/source/{factory.ts → endpoint/factory.ts} +13 -8
  545. package/src/source/endpoint/index.ts +4 -0
  546. package/src/source/{next.ts → endpoint/next.ts} +2 -2
  547. package/src/source/{signing.ts → endpoint/signing.ts} +1 -1
  548. package/src/source/index.ts +22 -19
  549. package/src/source/outbox/contract.ts +56 -0
  550. package/src/source/outbox/envelope.ts +47 -0
  551. package/src/source/outbox/index.ts +15 -0
  552. package/src/source/outbox/migrations.ts +71 -0
  553. package/src/source/outbox/retention.ts +2 -0
  554. package/src/source/types.ts +17 -17
  555. package/src/syncLog/contract.ts +19 -2
  556. package/src/transport/{credentialLifecycle.ts → connection/credentialLifecycle.ts} +3 -3
  557. package/src/transport/connection/index.ts +4 -0
  558. package/src/transport/{connectionManager.ts → connection/manager.ts} +13 -4
  559. package/src/transport/{networkProbe.ts → connection/networkProbe.ts} +4 -4
  560. package/src/transport/{httpClient.ts → http/client.ts} +128 -209
  561. package/src/transport/{httpTransportHelpers.ts → http/helpers.ts} +7 -7
  562. package/src/transport/http/index.ts +5 -0
  563. package/src/transport/{httpOptions.ts → http/options.ts} +6 -6
  564. package/src/transport/http/subscription.ts +174 -0
  565. package/src/transport/{httpTransport.ts → http/transport.ts} +127 -113
  566. package/src/transport/index.ts +7 -0
  567. package/src/transport/{commitFrames.ts → websocket/commitFrames.ts} +14 -46
  568. package/src/transport/{wsFrameHandlers.ts → websocket/frameHandlers.ts} +11 -54
  569. package/src/transport/{heartbeat.ts → websocket/heartbeat.ts} +2 -2
  570. package/src/transport/websocket/index.ts +5 -0
  571. package/src/transport/{wsTransport.ts → websocket/transport.ts} +16 -30
  572. package/src/types/index.ts +2 -6
  573. package/src/types/streams.ts +7 -61
  574. package/src/webhooks/events.ts +1 -1
  575. package/src/wire/accountResponses.ts +3 -12
  576. package/src/wire/frames.ts +5 -15
  577. package/src/wire/inboundFrames.ts +3 -3
  578. package/src/wire/index.ts +19 -15
  579. package/src/wire/modelMutations.ts +1 -14
  580. package/dist/ablo.d.ts.map +0 -1
  581. package/dist/ablo.js.map +0 -1
  582. package/dist/commitRecordRuntime.d.ts.map +0 -1
  583. package/dist/commitRecordRuntime.js.map +0 -1
  584. package/dist/coordination/awaitClaimGrant.d.ts.map +0 -1
  585. package/dist/coordination/awaitClaimGrant.js.map +0 -1
  586. package/dist/coordination/claimHeartbeatLoop.d.ts.map +0 -1
  587. package/dist/coordination/claimHeartbeatLoop.js.map +0 -1
  588. package/dist/coordination/claimMeta.d.ts.map +0 -1
  589. package/dist/coordination/claimMeta.js.map +0 -1
  590. package/dist/coordination/events.d.ts.map +0 -1
  591. package/dist/coordination/events.js +0 -8
  592. package/dist/coordination/events.js.map +0 -1
  593. package/dist/coordination/locator.d.ts.map +0 -1
  594. package/dist/coordination/locator.js.map +0 -1
  595. package/dist/coordination/targetConflict.d.ts.map +0 -1
  596. package/dist/coordination/targetConflict.js.map +0 -1
  597. package/dist/coordination/trace.d.ts.map +0 -1
  598. package/dist/coordination/trace.js.map +0 -1
  599. package/dist/durableWrites.d.ts.map +0 -1
  600. package/dist/durableWrites.js.map +0 -1
  601. package/dist/headlessClient.d.ts.map +0 -1
  602. package/dist/log/syncDeltaRow.d.ts.map +0 -1
  603. package/dist/log/syncDeltaRow.js.map +0 -1
  604. package/dist/policy/types.d.ts +0 -226
  605. package/dist/policy/types.d.ts.map +0 -1
  606. package/dist/policy/types.js +0 -127
  607. package/dist/policy/types.js.map +0 -1
  608. package/dist/readSetContext.d.ts.map +0 -1
  609. package/dist/readSetContext.js.map +0 -1
  610. package/dist/resources/functionalUpdate.d.ts.map +0 -1
  611. package/dist/resources/functionalUpdate.js.map +0 -1
  612. package/dist/resources/httpResources.d.ts.map +0 -1
  613. package/dist/resources/httpResources.js.map +0 -1
  614. package/dist/resources/modelCreate.d.ts.map +0 -1
  615. package/dist/resources/modelCreate.js.map +0 -1
  616. package/dist/resources/modelOperations.d.ts.map +0 -1
  617. package/dist/resources/modelOperations.js.map +0 -1
  618. package/dist/resources/mutationOptions.d.ts.map +0 -1
  619. package/dist/resources/mutationOptions.js.map +0 -1
  620. package/dist/resources/where.d.ts.map +0 -1
  621. package/dist/resources/where.js.map +0 -1
  622. package/dist/resources/writeOptionsSchema.d.ts.map +0 -1
  623. package/dist/resources/writeOptionsSchema.js.map +0 -1
  624. package/dist/schema/coordination.d.ts +0 -113
  625. package/dist/schema/coordination.d.ts.map +0 -1
  626. package/dist/schema/coordination.js +0 -134
  627. package/dist/schema/coordination.js.map +0 -1
  628. package/dist/source/adapter.d.ts.map +0 -1
  629. package/dist/source/adapter.js.map +0 -1
  630. package/dist/source/adapterFactory.d.ts.map +0 -1
  631. package/dist/source/adapterFactory.js.map +0 -1
  632. package/dist/source/adapterProfile.d.ts.map +0 -1
  633. package/dist/source/adapterProfile.js.map +0 -1
  634. package/dist/source/conformance.d.ts.map +0 -1
  635. package/dist/source/conformance.js.map +0 -1
  636. package/dist/source/connector.d.ts.map +0 -1
  637. package/dist/source/connector.js.map +0 -1
  638. package/dist/source/connectorProtocol.d.ts.map +0 -1
  639. package/dist/source/connectorProtocol.js.map +0 -1
  640. package/dist/source/contract.d.ts.map +0 -1
  641. package/dist/source/contract.js.map +0 -1
  642. package/dist/source/drizzle.d.ts +0 -2
  643. package/dist/source/drizzle.d.ts.map +0 -1
  644. package/dist/source/drizzle.js +0 -2
  645. package/dist/source/drizzle.js.map +0 -1
  646. package/dist/source/factory.d.ts.map +0 -1
  647. package/dist/source/factory.js.map +0 -1
  648. package/dist/source/idempotency.d.ts.map +0 -1
  649. package/dist/source/idempotency.js.map +0 -1
  650. package/dist/source/kysely.d.ts +0 -3
  651. package/dist/source/kysely.d.ts.map +0 -1
  652. package/dist/source/kysely.js +0 -3
  653. package/dist/source/kysely.js.map +0 -1
  654. package/dist/source/migrations.d.ts.map +0 -1
  655. package/dist/source/migrations.js.map +0 -1
  656. package/dist/source/next.d.ts.map +0 -1
  657. package/dist/source/next.js.map +0 -1
  658. package/dist/source/pushQueue.d.ts.map +0 -1
  659. package/dist/source/pushQueue.js.map +0 -1
  660. package/dist/source/signing.d.ts.map +0 -1
  661. package/dist/source/signing.js.map +0 -1
  662. package/dist/source/subjectAuthorization.d.ts.map +0 -1
  663. package/dist/source/subjectAuthorization.js.map +0 -1
  664. package/dist/transactionLayer.d.ts.map +0 -1
  665. package/dist/transactionLayer.js.map +0 -1
  666. package/dist/transactions/confirmation/commitEnvelope.d.ts.map +0 -1
  667. package/dist/transactions/confirmation/commitEnvelope.js.map +0 -1
  668. package/dist/transactions/confirmation/httpCommitEnvelope.d.ts.map +0 -1
  669. package/dist/transactions/confirmation/httpCommitEnvelope.js.map +0 -1
  670. package/dist/transactions/confirmation/idempotencyKey.d.ts.map +0 -1
  671. package/dist/transactions/confirmation/idempotencyKey.js.map +0 -1
  672. package/dist/transactions/confirmation/pendingWrite.d.ts.map +0 -1
  673. package/dist/transactions/confirmation/pendingWrite.js.map +0 -1
  674. package/dist/transport/commitFrames.d.ts.map +0 -1
  675. package/dist/transport/commitFrames.js.map +0 -1
  676. package/dist/transport/connectionManager.d.ts.map +0 -1
  677. package/dist/transport/connectionManager.js.map +0 -1
  678. package/dist/transport/credentialLifecycle.d.ts.map +0 -1
  679. package/dist/transport/credentialLifecycle.js.map +0 -1
  680. package/dist/transport/heartbeat.d.ts.map +0 -1
  681. package/dist/transport/heartbeat.js.map +0 -1
  682. package/dist/transport/httpClient.d.ts.map +0 -1
  683. package/dist/transport/httpClient.js.map +0 -1
  684. package/dist/transport/httpCommitRequest.d.ts.map +0 -1
  685. package/dist/transport/httpCommitRequest.js.map +0 -1
  686. package/dist/transport/httpFeed.d.ts +0 -4
  687. package/dist/transport/httpFeed.d.ts.map +0 -1
  688. package/dist/transport/httpOptions.js.map +0 -1
  689. package/dist/transport/httpTransport.d.ts.map +0 -1
  690. package/dist/transport/httpTransport.js.map +0 -1
  691. package/dist/transport/httpTransportHelpers.d.ts.map +0 -1
  692. package/dist/transport/httpTransportHelpers.js.map +0 -1
  693. package/dist/transport/networkProbe.d.ts.map +0 -1
  694. package/dist/transport/networkProbe.js.map +0 -1
  695. package/dist/transport/wsFrameHandlers.d.ts.map +0 -1
  696. package/dist/transport/wsFrameHandlers.js.map +0 -1
  697. package/dist/transport/wsTransport.d.ts.map +0 -1
  698. package/dist/transport/wsTransport.js.map +0 -1
  699. package/dist/wire/claimEvent.d.ts.map +0 -1
  700. package/dist/wire/claimEvent.js.map +0 -1
  701. package/dist/wire/claims.d.ts.map +0 -1
  702. package/dist/wire/claims.js.map +0 -1
  703. package/dist/wire/commit.d.ts +0 -2866
  704. package/dist/wire/commit.d.ts.map +0 -1
  705. package/dist/wire/commit.js.map +0 -1
  706. package/dist/wire/delta.d.ts.map +0 -1
  707. package/dist/wire/delta.js.map +0 -1
  708. package/dist/wire/deltaDelivery.d.ts.map +0 -1
  709. package/dist/wire/deltaDelivery.js.map +0 -1
  710. package/dist/wire/feedCursor.d.ts.map +0 -1
  711. package/dist/wire/feedCursor.js.map +0 -1
  712. package/dist/wire/feedEvent.d.ts.map +0 -1
  713. package/dist/wire/feedEvent.js.map +0 -1
  714. package/src/policy/types.ts +0 -300
  715. package/src/schema/coordination.ts +0 -161
  716. package/src/source/drizzle.ts +0 -1
  717. package/src/source/kysely.ts +0 -2
  718. /package/dist/{coordination → claims}/targetConflict.d.ts +0 -0
  719. /package/dist/{coordination → claims}/targetConflict.js +0 -0
  720. /package/dist/{resources → client/resources}/mutationOptions.js +0 -0
  721. /package/dist/{resources → client/resources}/where.d.ts +0 -0
  722. /package/dist/{transactions → commit}/confirmation/httpCommitEnvelope.d.ts +0 -0
  723. /package/dist/{transactions → commit}/confirmation/idempotencyKey.d.ts +0 -0
  724. /package/dist/{transactions → commit}/confirmation/idempotencyKey.js +0 -0
  725. /package/dist/source/{adapter.js → adapters/adapter.js} +0 -0
  726. /package/dist/source/{adapterFactory.d.ts → adapters/adapterFactory.d.ts} +0 -0
  727. /package/dist/source/{adapterProfile.d.ts → adapters/adapterProfile.d.ts} +0 -0
  728. /package/dist/source/{adapterProfile.js → adapters/adapterProfile.js} +0 -0
  729. /package/dist/source/{idempotency.d.ts → adapters/idempotency.d.ts} +0 -0
  730. /package/src/{wire/claimEvent.ts → claims/eventContract.ts} +0 -0
  731. /package/src/{coordination/claimHeartbeatLoop.ts → claims/heartbeat.ts} +0 -0
  732. /package/src/{coordination/claimMeta.ts → claims/meta.ts} +0 -0
  733. /package/src/{coordination → claims}/targetConflict.ts +0 -0
  734. /package/src/{transactions → commit}/confirmation/idempotencyKey.ts +0 -0
  735. /package/src/{wire/feedCursor.ts → observation/cursor.ts} +0 -0
  736. /package/src/{wire/deltaDelivery.ts → observation/deliveryContract.ts} +0 -0
  737. /package/src/source/{adapterProfile.ts → adapters/adapterProfile.ts} +0 -0
@@ -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,8 +28,8 @@ import {
28
28
  type SourceCommitEcho,
29
29
  type SourceCommitEchoMarker,
30
30
  type SourceOperation,
31
- } from './types.js';
32
- import type { SourceRequestContext } from './types.js';
31
+ } from '../types.js';
32
+ import type { SourceRequestContext } from '../types.js';
33
33
 
34
34
  const jsonObject = z.record(z.string(), z.unknown());
35
35
 
@@ -45,15 +45,15 @@ export type OperationType = z.infer<typeof operationTypeSchema>;
45
45
  * A single operation within a change set, and the runtime validator for it.
46
46
  *
47
47
  * The field set is projected from `commitOperationSchema` — an operation
48
- * reaching a data source is a commit operation minus the two fields the core
49
- * 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
50
50
  * deliberate and local: this is a customer-implemented boundary, so an empty
51
51
  * model name or row id is rejected here rather than forwarded. Stating them as
52
52
  * an extension keeps the tightening visible as a choice instead of hiding it
53
53
  * inside a second copy of the shape.
54
54
  */
55
55
  export const operationSchema = commitOperationSchema
56
- .omit({ bypass: true, fenceToken: true })
56
+ .omit({ fenceToken: true })
57
57
  .extend({
58
58
  model: z.string().min(1),
59
59
  id: z.string().min(1).nullish(),
@@ -161,61 +161,6 @@ export const changeSetSchema = z.object({
161
161
  });
162
162
  export type ChangeSet = z.infer<typeof changeSetSchema>;
163
163
 
164
- /**
165
- * A row in the adapter's `ablo_outbox` table. The adapter writes it in the same
166
- * transaction as the underlying row change — the transactional-outbox pattern — so
167
- * a change and its event commit together or not at all. The `events()` feed later
168
- * reads these rows back and hands them to Ablo, and `cursor` is the monotonic
169
- * ordering key Ablo round-trips to resume where it left off.
170
- */
171
- export const outboxEventSchema = z.object({
172
- /** Stable, globally-unique id — Ablo's replay-protection key. */
173
- id: z.string().min(1),
174
- model: z.string().min(1),
175
- entityId: z.string().min(1),
176
- type: operationTypeSchema,
177
- /** The changed row, in the key shape `SourceEvent.data` defines: the model's
178
- * declared schema fields, never the table's physical column names. */
179
- data: jsonObject.nullish(),
180
- /** Exact record routes captured in the same transaction as the row change. */
181
- syncGroups: z.array(z.string().min(1)).readonly(),
182
- organizationId: z.string().nullish(),
183
- /** Legacy source transaction id. Never use this field to settle a queued commit. */
184
- clientTxId: z.string().nullish(),
185
- /** Scoped server-authored identity that correlates this event to a queued commit. */
186
- correlationId: correlationIdSchema.nullish(),
187
- /** Stable identity of this operation within the correlated source commit. */
188
- transactionId: z
189
- .string()
190
- .min(1)
191
- .max(ABLO_SOURCE_CLIENT_TX_ID_MAX_LENGTH)
192
- .nullish(),
193
- occurredAt: z.number().nullish(),
194
- /** Monotonic ordering key (bigint as string). `events()` pages by `cursor > ?`. */
195
- cursor: z.string().min(1),
196
- });
197
- export type OutboxEvent = z.infer<typeof outboxEventSchema>;
198
-
199
- /** A page of outbox events returned by `events()`. */
200
- export const eventsPageSchema = z.object({
201
- events: z.array(outboxEventSchema),
202
- nextCursor: z.string().nullable(),
203
- });
204
- export type EventsPage = z.infer<typeof eventsPageSchema>;
205
-
206
- /**
207
- * A table-creation migration an adapter ships, so you never hand-write the
208
- * `ablo_idempotency` and `ablo_outbox` tables yourself. An adapter returns these
209
- * from its `migrations()` method.
210
- */
211
- export const migrationSchema = z.object({
212
- /** Stable name, used as the migration filename + applied-ledger key. */
213
- name: z.string().min(1),
214
- /** The forward SQL. */
215
- up: z.string().min(1),
216
- });
217
- export type Migration = z.infer<typeof migrationSchema>;
218
-
219
164
  /** Describes what an adapter's backend supports, so callers check a capability rather than infer it from behavior. */
220
165
  export const adapterCapabilitiesSchema = z.object({
221
166
  /** `commit` is atomic across all operations in the change set. */
@@ -255,6 +200,13 @@ const _echoContractInSync: [_AssertEchoMatchesWire, _AssertWireMatchesEcho] = [
255
200
  ];
256
201
  void _echoContractInSync;
257
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
+
258
210
  type _AssertEchoMarkerMatchesWire = SourceCommitEchoMarkerWire extends SourceCommitEchoMarker
259
211
  ? true
260
212
  : never;
@@ -41,18 +41,18 @@ 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';
@@ -66,7 +66,12 @@ import {
66
66
  sourceSyncGroups,
67
67
  sourceSubjectRule,
68
68
  sourceSubjectValues,
69
- } from '../subjectAuthorization.js';
69
+ } from './subjectAuthorization.js';
70
+ import {
71
+ decodeDatabaseOutboxEvent,
72
+ ENDPOINT_OUTBOX_PRUNE_BATCH_SIZE,
73
+ type EventsPage,
74
+ } from '../outbox/index.js';
70
75
 
71
76
  /** The subset of a Drizzle database/transaction handle the adapter calls. */
72
77
  export interface DrizzleLike {
@@ -287,12 +292,12 @@ export function drizzleDataSource<S extends SchemaRecord>(
287
292
  )}]::text[]`;
288
293
  await tx.execute(sql`
289
294
  INSERT INTO ablo_outbox (
290
- id, model, entity_id, type, data, sync_groups,
295
+ id, model, entity_id, type, data, event_version, sync_groups,
291
296
  correlation_id, transaction_id, occurred_at
292
297
  )
293
298
  VALUES (
294
299
  ${`${change.correlationId}:${index}`}, ${op.model}, ${entityId}, ${op.type},
295
- ${op.type === 'DELETE' ? null : JSON.stringify(row)}::jsonb,
300
+ ${op.type === 'DELETE' ? null : JSON.stringify(row)}::jsonb, 2,
296
301
  ${syncGroupsSql},
297
302
  ${change.correlationId}, ${op.transactionId ?? null}, ${Date.now()}
298
303
  )`);
@@ -313,30 +318,27 @@ export function drizzleDataSource<S extends SchemaRecord>(
313
318
  });
314
319
  },
315
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
+
316
333
  async events(cursor: string | null, limit: number): Promise<EventsPage> {
317
334
  const after = cursor ?? '0';
318
335
  const rows = rowsOf(
319
336
  await db.execute(sql`
320
- SELECT cursor, id, model, entity_id, type, data, sync_groups, organization_id,
337
+ SELECT cursor, id, model, entity_id, type, data, event_version, sync_groups, organization_id,
321
338
  client_tx_id, correlation_id, transaction_id, occurred_at
322
339
  FROM ablo_outbox WHERE cursor > ${after} ORDER BY cursor ASC LIMIT ${limit}`),
323
340
  );
324
- const events = rows.map((r) =>
325
- outboxEventSchema.parse({
326
- id: r.id,
327
- model: r.model,
328
- entityId: r.entity_id,
329
- type: r.type,
330
- data: r.data ?? null,
331
- syncGroups: r.sync_groups ?? [],
332
- organizationId: r.organization_id ?? null,
333
- clientTxId: r.client_tx_id ?? null,
334
- correlationId: r.correlation_id ?? null,
335
- transactionId: r.transaction_id ?? null,
336
- occurredAt: r.occurred_at != null ? Number(r.occurred_at) : null,
337
- cursor: String(r.cursor),
338
- }),
339
- );
341
+ const events = rows.map(decodeDatabaseOutboxEvent);
340
342
  return { events, nextCursor: events.at(-1)?.cursor ?? null };
341
343
  },
342
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';
@@ -24,27 +24,27 @@ import type {
24
24
  DataSourceAdapter,
25
25
  MutationAdapter,
26
26
  Row,
27
- } from '../adapter.js';
28
- import { defineDatabaseAdapter } from '../adapterFactory.js';
29
- import { postgresAdapterProfile } from '../adapterProfile.js';
30
- import type { ChangeSet, EventsPage, Migration } from '../contract.js';
27
+ } from './adapter.js';
28
+ import { defineDatabaseAdapter } from './adapterFactory.js';
29
+ import { postgresAdapterProfile } from './adapterProfile.js';
30
+ import type { ChangeSet } from './contract.js';
31
+ import type { Migration } from './migration.js';
31
32
  import {
32
33
  changeSetSchema,
33
- outboxEventSchema,
34
34
  sourceCommitEchoMarkerSchema,
35
35
  sourceCommitEchoIntentSchema,
36
36
  type SourceCommitEchoIntent,
37
- } from '../contract.js';
37
+ } from './contract.js';
38
38
  import {
39
39
  assertSourceIdempotencyIntent,
40
40
  assertSourceIdempotencyRetention,
41
41
  sourceChangeIntentHash,
42
42
  SOURCE_IDEMPOTENCY_RETENTION,
43
- } from '../idempotency.js';
43
+ } from './idempotency.js';
44
44
  import {
45
45
  adapterTableMigrations,
46
46
  idempotencyLedgerMigrations,
47
- } from '../migrations.js';
47
+ } from './migrations.js';
48
48
  import { ABLO_POSTGRES_COMMIT_ECHO_PREFIX } from '../types.js';
49
49
  import {
50
50
  authorizeSourceChange,
@@ -52,7 +52,12 @@ import {
52
52
  lockSourceSubjectCreates,
53
53
  rethrowStrictCreateConflict,
54
54
  sourceSyncGroups,
55
- } from '../subjectAuthorization.js';
55
+ } from './subjectAuthorization.js';
56
+ import {
57
+ decodeDatabaseOutboxEvent,
58
+ ENDPOINT_OUTBOX_PRUNE_BATCH_SIZE,
59
+ type EventsPage,
60
+ } from '../outbox/index.js';
56
61
  import {
57
62
  createKyselyMutationCore,
58
63
  kyselyOperationRowId,
@@ -403,6 +408,7 @@ export function createKyselyMutationAdapter(
403
408
  entity_id: entityId,
404
409
  type: operation.type,
405
410
  data: operation.type === 'DELETE' ? null : JSON.stringify(row),
411
+ event_version: 2,
406
412
  sync_groups: options.schema
407
413
  ? sourceSyncGroups(options.schema, operation.model, row)
408
414
  : [],
@@ -449,6 +455,22 @@ export function kyselyDataSource<S extends SchemaRecord>(
449
455
  ...mutation,
450
456
  capabilities: { ...mutation.capabilities, outboxEvents: true },
451
457
 
458
+ async acknowledgeEvents(acknowledgedThrough: string): Promise<void> {
459
+ await db.transaction().execute(async (transaction) => {
460
+ await transaction.executeQuery(
461
+ rawQuery(
462
+ 'ablo-outbox-prune-acknowledged',
463
+ `DELETE FROM ablo_outbox
464
+ WHERE cursor IN (
465
+ SELECT cursor FROM ablo_outbox
466
+ WHERE cursor <= $1 ORDER BY cursor ASC LIMIT $2
467
+ )`,
468
+ [acknowledgedThrough, ENDPOINT_OUTBOX_PRUNE_BATCH_SIZE],
469
+ ),
470
+ );
471
+ });
472
+ },
473
+
452
474
  async events(cursor: string | null, limit: number): Promise<EventsPage> {
453
475
  const rows = await db
454
476
  .selectFrom('ablo_outbox')
@@ -457,22 +479,7 @@ export function kyselyDataSource<S extends SchemaRecord>(
457
479
  .orderBy('cursor', 'asc')
458
480
  .limit(limit)
459
481
  .execute();
460
- const events = rows.map((row) =>
461
- outboxEventSchema.parse({
462
- id: row.id,
463
- model: row.model,
464
- entityId: row.entity_id,
465
- type: row.type,
466
- data: typeof row.data === 'string' ? JSON.parse(row.data) : row.data ?? null,
467
- syncGroups: row.sync_groups ?? [],
468
- organizationId: row.organization_id ?? null,
469
- clientTxId: row.client_tx_id ?? null,
470
- correlationId: row.correlation_id ?? null,
471
- transactionId: row.transaction_id ?? null,
472
- occurredAt: row.occurred_at != null ? Number(row.occurred_at) : null,
473
- cursor: String(row.cursor),
474
- }),
475
- );
482
+ const events = rows.map(decodeDatabaseOutboxEvent);
476
483
  return { events, nextCursor: events.at(-1)?.cursor ?? null };
477
484
  },
478
485
  });
@@ -13,9 +13,9 @@ import type { Schema, SchemaRecord } from '../../schema/schema.js';
13
13
  import { toSchemaJSON } from '../../schema/serialize.js';
14
14
  import { camelToSnake, snakeToCamel } from '../../schema/ddl.js';
15
15
  import { tenancyColumn } from '../../schema/tenancy.js';
16
- import type { AdapterReadRequest, Row } from '../adapter.js';
17
- import type { Operation } from '../contract.js';
18
- import { sourceSubjectRule, sourceSubjectValues } from '../subjectAuthorization.js';
16
+ import type { AdapterReadRequest, Row } from './adapter.js';
17
+ import type { Operation } from './contract.js';
18
+ import { sourceSubjectRule, sourceSubjectValues } from './subjectAuthorization.js';
19
19
 
20
20
  /** The subset of a Kysely instance, or transaction handle, used by the core. */
21
21
  export interface KyselyLike {
@@ -6,8 +6,8 @@
6
6
  * mapper is complete when it passes the same suite this one passes.
7
7
  *
8
8
  * It models the semantics minimally but faithfully: one row store per model, an
9
- * idempotency ledger keyed by scoped correlation, and an append-only outbox with a
10
- * monotonic cursor.
9
+ * idempotency ledger keyed by scoped correlation, and an acknowledgement-pruned
10
+ * outbox with a monotonic cursor.
11
11
  */
12
12
 
13
13
  import { AbloValidationError } from '../../errors.js';
@@ -16,14 +16,16 @@ import type {
16
16
  AdapterReadRequest,
17
17
  DataSourceAdapter,
18
18
  Row,
19
- } from '../adapter.js';
20
- import { defineDatabaseAdapter } from '../adapterFactory.js';
21
- import { memoryAdapterProfile } from '../adapterProfile.js';
22
- import type { ChangeSet, EventsPage, Migration, Operation, OutboxEvent } from '../contract.js';
19
+ } from './adapter.js';
20
+ import { defineDatabaseAdapter } from './adapterFactory.js';
21
+ import { memoryAdapterProfile } from './adapterProfile.js';
22
+ import type { ChangeSet, Operation } from './contract.js';
23
+ import type { Migration } from './migration.js';
24
+ import type { EventsPage, OutboxEvent } from '../outbox/index.js';
23
25
  import {
24
26
  assertSourceIdempotencyIntent,
25
27
  sourceChangeIntentHash,
26
- } from '../idempotency.js';
28
+ } from './idempotency.js';
27
29
 
28
30
  function rowId(op: Operation): string {
29
31
  const id = op.id ?? (op.input?.id as string | undefined);
@@ -41,8 +43,9 @@ export function memoryDataSource(): DataSourceAdapter {
41
43
  string,
42
44
  { readonly requestHash: string; readonly rows: Row[] }
43
45
  >();
44
- /** Append-only outbox; `cursor` is the 1-based index as a string. */
46
+ /** Acknowledgement-pruned outbox with a monotonic cursor. */
45
47
  const outbox: OutboxEvent[] = [];
48
+ let nextOutboxCursor = 1;
46
49
 
47
50
  const modelStore = (model: string): Map<string, Row> => {
48
51
  let m = store.get(model);
@@ -136,6 +139,7 @@ export function memoryDataSource(): DataSourceAdapter {
136
139
  rows.push(row);
137
140
  // Transactional outbox: one event per op, monotonic cursor.
138
141
  outbox.push({
142
+ version: 2,
139
143
  id: `${change.correlationId}:${index}`,
140
144
  model: op.model,
141
145
  entityId: String(row.id ?? rowId(op)),
@@ -144,13 +148,25 @@ export function memoryDataSource(): DataSourceAdapter {
144
148
  syncGroups: [],
145
149
  correlationId: change.correlationId,
146
150
  ...(op.transactionId ? { transactionId: op.transactionId } : {}),
147
- cursor: String(outbox.length + 1),
151
+ cursor: String(nextOutboxCursor++),
148
152
  });
149
153
  }
150
154
  idempotency.set(change.correlationId, { requestHash, rows });
151
155
  return { rows };
152
156
  },
153
157
 
158
+ async acknowledgeEvents(acknowledgedThrough: string): Promise<void> {
159
+ const after = Number(acknowledgedThrough);
160
+ let acknowledgedCount = 0;
161
+ while (
162
+ acknowledgedCount < outbox.length &&
163
+ Number(outbox[acknowledgedCount]?.cursor) <= after
164
+ ) {
165
+ acknowledgedCount += 1;
166
+ }
167
+ if (acknowledgedCount > 0) outbox.splice(0, acknowledgedCount);
168
+ },
169
+
154
170
  async events(cursor: string | null, limit: number): Promise<EventsPage> {
155
171
  const after = cursor ? Number(cursor) : 0;
156
172
  const page = outbox.filter((e) => Number(e.cursor) > after).slice(0, limit);
@@ -0,0 +1,11 @@
1
+ import { z } from 'zod';
2
+
3
+ /** One forward-only infrastructure migration shipped by an adapter. */
4
+ export const migrationSchema = z.object({
5
+ /** Stable name, used as the migration filename + applied-ledger key. */
6
+ name: z.string().min(1),
7
+ /** The forward SQL. */
8
+ up: z.string().min(1),
9
+ });
10
+
11
+ export type Migration = z.infer<typeof migrationSchema>;
@@ -10,7 +10,10 @@
10
10
  * it records changes in its own `sync_deltas` log instead.
11
11
  */
12
12
 
13
- import type { Migration } from './contract.js';
13
+ import type { Migration } from './migration.js';
14
+ import { endpointOutboxMigrations } from '../outbox/index.js';
15
+
16
+ export { endpointOutboxMigrations } from '../outbox/index.js';
14
17
 
15
18
  /**
16
19
  * Add a column to `ablo_idempotency` only when it is genuinely missing.
@@ -87,58 +90,7 @@ export function idempotencyLedgerMigrations(schema = 'public'): readonly Migrati
87
90
  ];
88
91
  }
89
92
 
90
- /** Endpoint-only transactional outbox and its correlation columns. */
91
- export function endpointOutboxMigrations(): readonly Migration[] {
92
- return [
93
- {
94
- name: 'ablo_outbox',
95
- up: `CREATE TABLE IF NOT EXISTS ablo_outbox (
96
- cursor BIGSERIAL PRIMARY KEY,
97
- id TEXT NOT NULL UNIQUE,
98
- model TEXT NOT NULL,
99
- entity_id TEXT NOT NULL,
100
- type TEXT NOT NULL,
101
- data JSONB,
102
- sync_groups TEXT[] NOT NULL,
103
- organization_id TEXT,
104
- client_tx_id TEXT,
105
- correlation_id TEXT,
106
- transaction_id TEXT,
107
- occurred_at BIGINT,
108
- created_at TIMESTAMPTZ NOT NULL DEFAULT now()
109
- );`,
110
- },
111
- {
112
- name: 'ablo_outbox_correlation',
113
- up: `ALTER TABLE ablo_outbox
114
- ADD COLUMN IF NOT EXISTS correlation_id TEXT;
115
- ALTER TABLE ablo_outbox
116
- ADD COLUMN IF NOT EXISTS transaction_id TEXT;`,
117
- },
118
- {
119
- name: 'ablo_outbox_sync_groups',
120
- up: `DO $$
121
- BEGIN
122
- IF NOT EXISTS (
123
- SELECT 1 FROM information_schema.columns
124
- WHERE table_schema = current_schema()
125
- AND table_name = 'ablo_outbox'
126
- AND column_name = 'sync_groups'
127
- ) AND EXISTS (SELECT 1 FROM ablo_outbox) THEN
128
- RAISE EXCEPTION USING
129
- ERRCODE = '55000',
130
- MESSAGE = 'ablo_outbox contains legacy events; verify the previous release consumed them, then purge those rows before adding sync_groups';
131
- END IF;
132
- END $$;
133
- ALTER TABLE ablo_outbox
134
- ADD COLUMN IF NOT EXISTS sync_groups TEXT[];
135
- ALTER TABLE ablo_outbox
136
- ALTER COLUMN sync_groups SET NOT NULL;`,
137
- },
138
- ];
139
- }
140
-
141
93
  /** Full endpoint adapter migrations (ledger + outbox). */
142
- export function adapterTableMigrations(): readonly Migration[] {
143
- return [...idempotencyLedgerMigrations(), ...endpointOutboxMigrations()];
94
+ export function adapterTableMigrations(schema = 'public'): readonly Migration[] {
95
+ return [...idempotencyLedgerMigrations(schema), ...endpointOutboxMigrations(schema)];
144
96
  }