@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
@@ -20,18 +20,19 @@ import type {
20
20
  AdapterReadRequest,
21
21
  DataSourceAdapter,
22
22
  Row,
23
- } from '../adapter.js';
24
- import { defineDatabaseAdapter } from '../adapterFactory.js';
25
- import { postgresAdapterProfile } from '../adapterProfile.js';
26
- import type { ChangeSet, EventsPage, Migration, Operation, OutboxEvent } from '../contract.js';
27
- import { outboxEventSchema } from '../contract.js';
28
- import { adapterTableMigrations } from '../migrations.js';
23
+ } from './adapter.js';
24
+ import { defineDatabaseAdapter } from './adapterFactory.js';
25
+ import { postgresAdapterProfile } from './adapterProfile.js';
26
+ import type { ChangeSet, Operation } from './contract.js';
27
+ import type { Migration } from './migration.js';
28
+ import type { EventsPage, OutboxEvent } from '../outbox/index.js';
29
+ import { adapterTableMigrations } from './migrations.js';
29
30
  import {
30
31
  assertSourceIdempotencyIntent,
31
32
  assertSourceIdempotencyRetention,
32
33
  SOURCE_IDEMPOTENCY_RETENTION,
33
34
  sourceChangeIntentHash,
34
- } from '../idempotency.js';
35
+ } from './idempotency.js';
35
36
  import type { SchemaRecord, Schema } from '../../schema/schema.js';
36
37
  import { toSchemaJSON } from '../../schema/serialize.js';
37
38
  import { camelToSnake } from '../../schema/ddl.js';
@@ -48,7 +49,11 @@ import {
48
49
  sourceSyncGroups,
49
50
  sourceSubjectRule,
50
51
  sourceSubjectValues,
51
- } from '../subjectAuthorization.js';
52
+ } from './subjectAuthorization.js';
53
+ import {
54
+ decodeDatabaseOutboxEvent,
55
+ ENDPOINT_OUTBOX_PRUNE_BATCH_SIZE,
56
+ } from '../outbox/index.js';
52
57
 
53
58
  /** A Prisma model delegate — the subset of its methods the adapter calls. */
54
59
  export interface PrismaDelegate {
@@ -280,9 +285,9 @@ export function prismaDataSource<S extends SchemaRecord>(
280
285
  // Transactional outbox: one event per operation, written in this same transaction.
281
286
  await tx.$executeRawUnsafe(
282
287
  `INSERT INTO ablo_outbox (
283
- id, model, entity_id, type, data, sync_groups,
288
+ id, model, entity_id, type, data, event_version, sync_groups,
284
289
  correlation_id, transaction_id, occurred_at
285
- ) VALUES ($1, $2, $3, $4, $5::jsonb, $6::text[], $7, $8, $9)`,
290
+ ) VALUES ($1, $2, $3, $4, $5::jsonb, 2, $6::text[], $7, $8, $9)`,
286
291
  `${change.correlationId}:${index}`,
287
292
  op.model,
288
293
  entityId,
@@ -319,35 +324,31 @@ export function prismaDataSource<S extends SchemaRecord>(
319
324
  });
320
325
  },
321
326
 
327
+ async acknowledgeEvents(acknowledgedThrough: string): Promise<void> {
328
+ await prisma.$transaction(async (tx) => {
329
+ await tx.$executeRawUnsafe(
330
+ `DELETE FROM ablo_outbox
331
+ WHERE cursor IN (
332
+ SELECT cursor FROM ablo_outbox
333
+ WHERE cursor <= $1 ORDER BY cursor ASC LIMIT $2
334
+ )`,
335
+ acknowledgedThrough,
336
+ ENDPOINT_OUTBOX_PRUNE_BATCH_SIZE,
337
+ );
338
+ });
339
+ },
340
+
322
341
  async events(cursor: string | null, limit: number): Promise<EventsPage> {
323
- const after = cursor ? cursor : '0';
342
+ const after = cursor ?? '0';
324
343
  const rows = await prisma.$queryRawUnsafe<Record<string, unknown>[]>(
325
- `SELECT cursor, id, model, entity_id, type, data, sync_groups, organization_id,
344
+ `SELECT cursor, id, model, entity_id, type, data, event_version, sync_groups, organization_id,
326
345
  client_tx_id, correlation_id, transaction_id, occurred_at
327
346
  FROM ablo_outbox WHERE cursor > $1 ORDER BY cursor ASC LIMIT $2`,
328
347
  after,
329
348
  limit,
330
349
  );
331
- const events: OutboxEvent[] = rows.map((r) =>
332
- outboxEventSchema.parse({
333
- id: r.id,
334
- model: r.model,
335
- entityId: r.entity_id,
336
- type: r.type,
337
- data: r.data ?? null,
338
- syncGroups: r.sync_groups ?? [],
339
- organizationId: r.organization_id ?? null,
340
- clientTxId: r.client_tx_id ?? null,
341
- correlationId: r.correlation_id ?? null,
342
- transactionId: r.transaction_id ?? null,
343
- occurredAt: r.occurred_at != null ? Number(r.occurred_at) : null,
344
- cursor: String(r.cursor),
345
- }),
346
- );
347
- return {
348
- events,
349
- nextCursor: events.at(-1)?.cursor ?? null,
350
- };
350
+ const events: OutboxEvent[] = rows.map(decodeDatabaseOutboxEvent);
351
+ return { events, nextCursor: events.at(-1)?.cursor ?? null };
351
352
  },
352
353
  });
353
354
  }
@@ -1,4 +1,4 @@
1
- import { AbloPermissionError, AbloValidationError } from '../errors.js';
1
+ import { AbloPermissionError, AbloValidationError } from '../../errors.js';
2
2
  import {
3
3
  composeEntitySyncGroups,
4
4
  syncGroupsForRow,
@@ -8,7 +8,7 @@ import {
8
8
  type Schema,
9
9
  type SchemaRecord,
10
10
  type SubjectRule,
11
- } from '../schema/index.js';
11
+ } from '../../schema/index.js';
12
12
  import type { AdapterReadRequest, Row } from './adapter.js';
13
13
  import type { ChangeSet, Operation } from './contract.js';
14
14
 
@@ -26,6 +26,7 @@
26
26
 
27
27
  import {
28
28
  SOURCE_CONNECTOR_PROTOCOL_VERSION,
29
+ SOURCE_CONNECTOR_SUPERSEDED_CLOSE_CODE,
29
30
  SOURCE_CONNECTOR_WS_PATH,
30
31
  sourceConnectorSubprotocols,
31
32
  encodeFrame,
@@ -35,8 +36,8 @@ import {
35
36
  type RequestFrame,
36
37
  type ResponseFrame,
37
38
  type ReadyFrame,
38
- } from './connectorProtocol.js';
39
- import { ABLO_HOSTED_HTTP_BASE_URL } from '../auth/hostedEndpoints.js';
39
+ } from './protocol.js';
40
+ import { ABLO_HOSTED_HTTP_BASE_URL } from '../../auth/hostedEndpoints.js';
40
41
 
41
42
  /**
42
43
  * The default Ablo base URL the connector dials, to which it appends
@@ -130,6 +131,20 @@ export interface SourceConnector {
130
131
  run(signal: AbortSignal): Promise<void>;
131
132
  }
132
133
 
134
+ /** The connector lost its source lease to a newer process and will not reconnect. */
135
+ export class SourceConnectorSupersededError extends Error {
136
+ readonly code = 'source_connector_superseded';
137
+
138
+ constructor() {
139
+ super(
140
+ 'A newer local connector took ownership of this source; this connector has stopped.',
141
+ );
142
+ this.name = 'SourceConnectorSupersededError';
143
+ }
144
+ }
145
+
146
+ type ConnectionOutcome = 'retry' | 'ready' | 'superseded';
147
+
133
148
  export function createSourceConnector(
134
149
  options: SourceConnectorOptions,
135
150
  ): SourceConnector {
@@ -148,7 +163,7 @@ export function createSourceConnector(
148
163
  if (signal.aborted) return;
149
164
 
150
165
  options.onStatus?.('connecting');
151
- const becameReady = await connectOnce({
166
+ const outcome = await connectOnce({
152
167
  url,
153
168
  apiKey: options.apiKey,
154
169
  handler: options.handler,
@@ -158,9 +173,10 @@ export function createSourceConnector(
158
173
  onError: options.onError,
159
174
  signal,
160
175
  });
176
+ if (outcome === 'superseded') return;
161
177
  // A connection that reached `ready` resets the backoff so the next
162
178
  // drop reconnects immediately; one that never readied keeps escalating.
163
- attempt = becameReady ? 0 : attempt + 1;
179
+ attempt = outcome === 'ready' ? 0 : attempt + 1;
164
180
  }
165
181
  },
166
182
  };
@@ -169,8 +185,10 @@ export function createSourceConnector(
169
185
  /**
170
186
  * Runs one connection: open the socket, register, then serve requests until the
171
187
  * socket closes or `signal` aborts. Resolves to whether the connection reached the
172
- * `ready` state, which the caller uses to reset the reconnect backoff. It never
173
- * rejects, because a dropped transport is expected and simply drives a reconnect.
188
+ * `ready` state, which the caller uses to reset the reconnect backoff, or the
189
+ * terminal `superseded` fence, which stops this process from taking ownership
190
+ * back from its replacement. It never rejects because ordinary transport drops
191
+ * are expected and simply drive a reconnect.
174
192
  */
175
193
  function connectOnce(params: {
176
194
  readonly url: string;
@@ -181,8 +199,8 @@ function connectOnce(params: {
181
199
  readonly onStatus: ((status: ConnectorStatus) => void) | undefined;
182
200
  readonly onError: ((error: unknown) => void) | undefined;
183
201
  readonly signal: AbortSignal;
184
- }): Promise<boolean> {
185
- return new Promise<boolean>((resolve) => {
202
+ }): Promise<ConnectionOutcome> {
203
+ return new Promise<ConnectionOutcome>((resolve) => {
186
204
  let ws: ConnectorWebSocket;
187
205
  try {
188
206
  ws = params.factory(
@@ -191,18 +209,18 @@ function connectOnce(params: {
191
209
  );
192
210
  } catch (err) {
193
211
  params.onError?.(err);
194
- resolve(false);
212
+ resolve('retry');
195
213
  return;
196
214
  }
197
215
 
198
216
  let ready = false;
199
217
  let settled = false;
200
- const finish = (): void => {
218
+ const finish = (outcome: ConnectionOutcome = ready ? 'ready' : 'retry'): void => {
201
219
  if (settled) return;
202
220
  settled = true;
203
221
  params.signal.removeEventListener('abort', onAbort);
204
222
  params.onStatus?.('disconnected');
205
- resolve(ready);
223
+ resolve(outcome);
206
224
  };
207
225
 
208
226
  const onAbort = (): void => {
@@ -243,7 +261,12 @@ function connectOnce(params: {
243
261
  // `close` always follows `error`; finish() runs there.
244
262
  });
245
263
 
246
- ws.addEventListener('close', () => {
264
+ ws.addEventListener('close', (event) => {
265
+ if (event.code === SOURCE_CONNECTOR_SUPERSEDED_CLOSE_CODE) {
266
+ params.onError?.(new SourceConnectorSupersededError());
267
+ finish('superseded');
268
+ return;
269
+ }
247
270
  finish();
248
271
  });
249
272
 
@@ -0,0 +1,3 @@
1
+ /** Outbound Data Source connector boundary: client runtime and wire protocol. */
2
+ export * from './client.js';
3
+ export * from './protocol.js';
@@ -22,8 +22,8 @@
22
22
 
23
23
  import { z } from 'zod';
24
24
 
25
- import { environmentSchema } from '../environment.js';
26
- import { WS_BEARER_SUBPROTOCOL_PREFIX } from '../auth/credentialSource.js';
25
+ import { environmentSchema } from '../../environment.js';
26
+ import { WS_BEARER_SUBPROTOCOL_PREFIX } from '../../auth/credentialSource.js';
27
27
 
28
28
  /**
29
29
  * The wire-protocol version. It increases on any breaking change to a frame's
@@ -43,6 +43,14 @@ export const SOURCE_CONNECTOR_WS_PATH = '/v1/source/listen';
43
43
  */
44
44
  export const WS_SOURCE_SUBPROTOCOL = 'ablo.source.v1';
45
45
 
46
+ /**
47
+ * Private WebSocket close code used when a newer connector takes ownership of
48
+ * the same source. This is a fencing decision, not a transient disconnect: the
49
+ * superseded process must stop reconnecting or two `ablo dev --local`
50
+ * processes will continuously replace each other.
51
+ */
52
+ export const SOURCE_CONNECTOR_SUPERSEDED_CLOSE_CODE = 4009;
53
+
46
54
  /**
47
55
  * Builds the `Sec-WebSocket-Protocol` list a connector offers during the
48
56
  * handshake: the source subprotocol followed by the bearer credential, encoded as
@@ -0,0 +1,2 @@
1
+ /** Data Source push-delivery boundary. */
2
+ export * from './pushQueue.js';
@@ -23,8 +23,8 @@
23
23
  * interface against your own outbox table for production durability.
24
24
  */
25
25
 
26
- import { ABLO_SOURCE_HEADERS, signAbloSourceRequest } from './signing.js';
27
- import type { SourceEvent } from './types.js';
26
+ import { ABLO_SOURCE_HEADERS, signAbloSourceRequest } from '../endpoint/signing.js';
27
+ import type { SourceEvent } from '../types.js';
28
28
 
29
29
  /** One queued delivery: a batch of source events plus its retry bookkeeping. */
30
30
  export interface PushQueueItem {
@@ -10,18 +10,18 @@ import type {
10
10
  Schema,
11
11
  SchemaRecord,
12
12
  InferCreate,
13
- } from '../schema/schema.js';
14
- import type { DataSourceAdapter } from './adapter.js';
15
- import type { AdapterReadRequest, Row } from './adapter.js';
16
- import { changeSetSchema } from './contract.js';
17
- import { AbloError, AbloPermissionError } from '../errors.js';
13
+ } from '../../schema/schema.js';
14
+ import type { DataSourceAdapter } from '../adapters/adapter.js';
15
+ import type { AdapterReadRequest, Row } from '../adapters/adapter.js';
16
+ import { changeSetSchema } from '../adapters/contract.js';
17
+ import { AbloError, AbloPermissionError } from '../../errors.js';
18
18
  import {
19
19
  authorizeSourceChange,
20
20
  authorizeSourceRead,
21
21
  lockSourceSubjectCreates,
22
22
  sourceSubjectRule,
23
23
  sourceSubjectValues,
24
- } from './subjectAuthorization.js';
24
+ } from '../adapters/subjectAuthorization.js';
25
25
  import {
26
26
  SourceSignatureError,
27
27
  verifyAbloSourceRequest,
@@ -41,7 +41,7 @@ import type {
41
41
  SourceRequestContext,
42
42
  SourceScope,
43
43
  SourceSubjectTransactionHandler,
44
- } from './types.js';
44
+ } from '../types.js';
45
45
 
46
46
  type SourceModels<S extends SchemaRecord, TAuth> = Partial<{
47
47
  readonly [K in keyof S & string]: SourceModelHandlers<
@@ -204,15 +204,19 @@ async function handleViaAdapter(
204
204
  }
205
205
 
206
206
  if (body.type === 'events') {
207
+ if (body.acknowledgedThrough) {
208
+ await adapter.acknowledgeEvents(body.acknowledgedThrough);
209
+ }
207
210
  const page = await adapter.events(body.cursor ?? null, body.limit ?? 100);
208
211
  return json({
209
212
  events: page.events.map((event) => ({
210
213
  id: event.id,
214
+ version: event.version,
211
215
  model: event.model,
212
216
  entityId: event.entityId,
213
217
  type: event.type,
214
218
  ...(event.data !== undefined && event.data !== null ? { data: event.data } : {}),
215
- syncGroups: event.syncGroups,
219
+ ...(event.syncGroups ? { syncGroups: event.syncGroups } : {}),
216
220
  ...(event.organizationId ? { organizationId: event.organizationId } : {}),
217
221
  ...(event.clientTxId ? { clientTxId: event.clientTxId } : {}),
218
222
  ...(event.correlationId ? { correlationId: event.correlationId } : {}),
@@ -564,6 +568,7 @@ export function dataSource<const S extends SchemaRecord, TAuth = unknown>(
564
568
  }
565
569
  const result = await options.events({
566
570
  cursor: body.cursor,
571
+ acknowledgedThrough: body.acknowledgedThrough,
567
572
  limit: body.limit,
568
573
  context,
569
574
  });
@@ -0,0 +1,4 @@
1
+ /** Signed Data Source endpoint boundary: factory, signing, and framework adapter. */
2
+ export * from './factory.js';
3
+ export * from './signing.js';
4
+ export * from './next.js';
@@ -5,7 +5,7 @@
5
5
  * `POST` so your route file can export it in one line.
6
6
  *
7
7
  * // app/api/ablo/source/route.ts
8
- * import { dataSourceNext } from '@abloatai/transaction/source/next';
8
+ * import { dataSourceNext } from '@abloatai/transaction/source/endpoint';
9
9
  * import { prismaDataSource } from '@abloatai/transaction/source';
10
10
  * import { schema } from '@/ablo/schema';
11
11
  * import { prisma } from '@/lib/prisma';
@@ -20,7 +20,7 @@
20
20
  * directly and export its result however that framework expects.
21
21
  */
22
22
 
23
- import type { SchemaRecord } from '../schema/schema.js';
23
+ import type { SchemaRecord } from '../../schema/schema.js';
24
24
  import { dataSource, type DataSourceOptions } from './factory.js';
25
25
 
26
26
  /**
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Canonically signs and verifies source requests using the Standard Webhooks scheme.
2
+ * Canonically signs and verifies source endpoint requests using the Standard Webhooks scheme.
3
3
  *
4
4
  * Every request Ablo sends to a data source is signed with that source's API
5
5
  * key, and the receiving endpoint verifies the signature before any handler
@@ -56,16 +56,16 @@ export {
56
56
  type SourceSignatureOptions,
57
57
  type SourceSignatureVerificationOptions,
58
58
  type SourceSignatureVerificationResult,
59
- } from './signing.js';
59
+ } from './endpoint/signing.js';
60
60
 
61
61
  export {
62
62
  dataSource,
63
63
  type DataSourceOptions,
64
- } from './factory.js';
64
+ } from './endpoint/factory.js';
65
65
 
66
66
  export {
67
67
  sourceSubjectCreateLockKey,
68
- } from './subjectAuthorization.js';
68
+ } from './adapters/subjectAuthorization.js';
69
69
 
70
70
  export {
71
71
  createPushQueue,
@@ -75,7 +75,7 @@ export {
75
75
  type PushQueueItem,
76
76
  type PushQueueOptions,
77
77
  type PushQueueStorage,
78
- } from './pushQueue.js';
78
+ } from './delivery/pushQueue.js';
79
79
 
80
80
  // The reverse-channel connector — an outbound transport for the load, list, and
81
81
  // commit leg, and the dial-out counterpart to `createPushQueue`. It lets you serve
@@ -84,14 +84,16 @@ export {
84
84
  export {
85
85
  createSourceConnector,
86
86
  DEFAULT_RECONNECT_SCHEDULE,
87
+ SourceConnectorSupersededError,
87
88
  type SourceConnector,
88
89
  type SourceConnectorOptions,
89
90
  type ConnectorWebSocket,
90
91
  type ConnectorWebSocketFactory,
91
92
  type ConnectorStatus,
92
- } from './connector.js';
93
+ } from './connector/client.js';
93
94
  export {
94
95
  SOURCE_CONNECTOR_PROTOCOL_VERSION,
96
+ SOURCE_CONNECTOR_SUPERSEDED_CLOSE_CODE,
95
97
  SOURCE_CONNECTOR_WS_PATH,
96
98
  WS_SOURCE_SUBPROTOCOL,
97
99
  sourceConnectorSubprotocols,
@@ -105,7 +107,7 @@ export {
105
107
  type RequestFrame,
106
108
  type ResponseFrame,
107
109
  type ErrorFrame,
108
- } from './connectorProtocol.js';
110
+ } from './connector/protocol.js';
109
111
 
110
112
  // The Data Source adapter interface and its Zod contract, with per-ORM implementations.
111
113
  export {
@@ -114,7 +116,7 @@ export {
114
116
  type AdapterReadRequest,
115
117
  type AdapterCommitResult,
116
118
  type Row as AdapterRow,
117
- } from './adapter.js';
119
+ } from './adapters/adapter.js';
118
120
  export {
119
121
  adapterBindingSchema,
120
122
  databaseAdapterProfileSchema,
@@ -127,8 +129,8 @@ export {
127
129
  type DatabaseKind,
128
130
  type ObservationProfile,
129
131
  type PostgresBinding,
130
- } from './adapterProfile.js';
131
- export { defineDatabaseAdapter } from './adapterFactory.js';
132
+ } from './adapters/adapterProfile.js';
133
+ export { defineDatabaseAdapter } from './adapters/adapterFactory.js';
132
134
  export {
133
135
  operationSchema,
134
136
  operationTypeSchema,
@@ -137,25 +139,26 @@ export {
137
139
  sourceCommitEchoMarkerSchema,
138
140
  sourceCommitEchoIntentSchema,
139
141
  changeSetSchema,
140
- outboxEventSchema,
141
- eventsPageSchema,
142
- migrationSchema,
143
142
  adapterCapabilitiesSchema,
144
143
  type Operation,
145
144
  type ChangeSet,
146
- type OutboxEvent,
147
- type EventsPage,
148
- type Migration,
149
145
  type AdapterCapabilities,
150
146
  type SourceCommitEchoMarkerWire,
151
147
  type SourceCommitEchoIntent,
152
- } from './contract.js';
148
+ } from './adapters/contract.js';
149
+ export { migrationSchema, type Migration } from './adapters/migration.js';
150
+ export {
151
+ endpointOutboxMigrations,
152
+ eventsPageSchema,
153
+ outboxEventSchema,
154
+ type EventsPage,
155
+ type OutboxEvent,
156
+ } from './outbox/index.js';
153
157
  export { prismaDataSource, type PrismaLike, type PrismaDataSourceOptions } from './adapters/prisma.js';
154
158
  export {
155
159
  adapterTableMigrations,
156
- endpointOutboxMigrations,
157
160
  idempotencyLedgerMigrations,
158
- } from './migrations.js';
161
+ } from './adapters/migrations.js';
159
162
  export {
160
163
  createKyselyMutationAdapter,
161
164
  createKyselyMutationCore,
@@ -183,7 +186,7 @@ export {
183
186
  encodeSourceEchoTransactionId,
184
187
  decodeSourceEchoTransactionId,
185
188
  type SourceEchoTransactionId,
186
- } from './idempotency.js';
189
+ } from './adapters/idempotency.js';
187
190
  // What Ablo leaves inside a customer's database, declared once — read by the
188
191
  // setup SQL, the replication runtime, and the audit that reports it back.
189
192
  export {
@@ -0,0 +1,56 @@
1
+ import { z } from 'zod';
2
+ import { commitOperationTypeSchema } from '../../coordination/schema.js';
3
+ import { correlationIdSchema } from '../../commit/contract.js';
4
+ import { ABLO_SOURCE_CLIENT_TX_ID_MAX_LENGTH } from '../types.js';
5
+
6
+ const jsonObject = z.record(z.string(), z.unknown());
7
+
8
+ /** The immutable, versioned event envelope stored in `ablo_outbox`. */
9
+ export const outboxEventSchema = z.object({
10
+ /** Version 1 predates durable routes; version 2 captures them atomically. */
11
+ version: z.union([z.literal(1), z.literal(2)]),
12
+ /** Stable, globally unique replay-protection identity. */
13
+ id: z.string().min(1),
14
+ model: z.string().min(1),
15
+ entityId: z.string().min(1),
16
+ type: commitOperationTypeSchema,
17
+ /** Declared schema-field names, never physical database column names. */
18
+ data: jsonObject.nullish(),
19
+ /** Exact routes captured in the writing transaction; version 2 requires them. */
20
+ syncGroups: z.array(z.string().min(1)).readonly().optional(),
21
+ organizationId: z.string().nullish(),
22
+ clientTxId: z.string().nullish(),
23
+ correlationId: correlationIdSchema.nullish(),
24
+ transactionId: z
25
+ .string()
26
+ .min(1)
27
+ .max(ABLO_SOURCE_CLIENT_TX_ID_MAX_LENGTH)
28
+ .nullish(),
29
+ occurredAt: z.number().nullish(),
30
+ /** Monotonic database position, represented as a string to preserve bigint. */
31
+ cursor: z.string().min(1),
32
+ }).superRefine((event, ctx) => {
33
+ if (event.version === 1 && event.syncGroups !== undefined) {
34
+ ctx.addIssue({
35
+ code: 'custom',
36
+ path: ['syncGroups'],
37
+ message: 'Outbox event version 1 cannot carry syncGroups',
38
+ });
39
+ }
40
+ if (event.version === 2 && event.syncGroups === undefined) {
41
+ ctx.addIssue({
42
+ code: 'custom',
43
+ path: ['syncGroups'],
44
+ message: 'Outbox event version 2 requires durable syncGroups',
45
+ });
46
+ }
47
+ });
48
+
49
+ export type OutboxEvent = z.infer<typeof outboxEventSchema>;
50
+
51
+ export const eventsPageSchema = z.object({
52
+ events: z.array(outboxEventSchema),
53
+ nextCursor: z.string().nullable(),
54
+ });
55
+
56
+ export type EventsPage = z.infer<typeof eventsPageSchema>;
@@ -0,0 +1,47 @@
1
+ import { AbloValidationError } from '../../errors.js';
2
+ import { outboxEventSchema, type OutboxEvent } from './contract.js';
3
+
4
+ /** Decode the versioned routing envelope without turning absence into `[]`. */
5
+ export function decodeOutboxEventEnvelope(
6
+ eventVersion: unknown,
7
+ syncGroups: unknown,
8
+ cursor: unknown,
9
+ ): { readonly version: 1 | 2; readonly syncGroups?: readonly string[] } {
10
+ const version = eventVersion == null
11
+ ? (Array.isArray(syncGroups) ? 2 : 1)
12
+ : Number(eventVersion);
13
+ if (version !== 1 && version !== 2) {
14
+ throw new AbloValidationError(
15
+ `Endpoint outbox event at cursor ${String(cursor)} has unsupported event version ${String(eventVersion)}.`,
16
+ { code: 'source_event_invalid' },
17
+ );
18
+ }
19
+ if (version === 2 && !Array.isArray(syncGroups)) {
20
+ throw new AbloValidationError(
21
+ `Endpoint outbox event at cursor ${String(cursor)} is version 2 but has no durable sync_groups.`,
22
+ { code: 'source_event_invalid' },
23
+ );
24
+ }
25
+ return version === 2
26
+ ? { version, syncGroups: syncGroups as readonly string[] }
27
+ : { version };
28
+ }
29
+
30
+ /** Canonical snake_case database row → versioned source event decoder. */
31
+ export function decodeDatabaseOutboxEvent(row: Readonly<Record<string, unknown>>): OutboxEvent {
32
+ const envelope = decodeOutboxEventEnvelope(row.event_version, row.sync_groups, row.cursor);
33
+ return outboxEventSchema.parse({
34
+ ...envelope,
35
+ id: row.id,
36
+ model: row.model,
37
+ entityId: row.entity_id,
38
+ type: row.type,
39
+ data: typeof row.data === 'string' ? JSON.parse(row.data) : row.data ?? null,
40
+ organizationId: row.organization_id ?? null,
41
+ clientTxId: row.client_tx_id ?? null,
42
+ correlationId: row.correlation_id ?? null,
43
+ transactionId: row.transaction_id ?? null,
44
+ occurredAt: row.occurred_at != null ? Number(row.occurred_at) : null,
45
+ cursor: String(row.cursor),
46
+ });
47
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Endpoint transactional-outbox subsystem.
3
+ *
4
+ * Start here, then descend into contract, envelope, migrations, or retention.
5
+ * ORM adapters depend on this boundary; the subsystem never depends on them.
6
+ */
7
+ export {
8
+ outboxEventSchema,
9
+ eventsPageSchema,
10
+ type OutboxEvent,
11
+ type EventsPage,
12
+ } from './contract.js';
13
+ export { decodeDatabaseOutboxEvent, decodeOutboxEventEnvelope } from './envelope.js';
14
+ export { endpointOutboxMigrations } from './migrations.js';
15
+ export { ENDPOINT_OUTBOX_PRUNE_BATCH_SIZE } from './retention.js';