@abloatai/transaction 0.57.0 → 0.59.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 (781) 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} +8 -18
  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/client/surface.d.ts +15 -0
  128. package/dist/client/surface.d.ts.map +1 -0
  129. package/dist/client/surface.js +29 -0
  130. package/dist/client/surface.js.map +1 -0
  131. package/dist/{transactions → commit}/confirmation/commitEnvelope.d.ts +1 -37
  132. package/dist/commit/confirmation/commitEnvelope.d.ts.map +1 -0
  133. package/dist/{transactions → commit}/confirmation/commitEnvelope.js +2 -7
  134. package/dist/commit/confirmation/commitEnvelope.js.map +1 -0
  135. package/dist/commit/confirmation/httpCommitEnvelope.d.ts.map +1 -0
  136. package/dist/{transactions → commit}/confirmation/httpCommitEnvelope.js +1 -1
  137. package/dist/commit/confirmation/httpCommitEnvelope.js.map +1 -0
  138. package/dist/commit/confirmation/idempotencyKey.d.ts.map +1 -0
  139. package/dist/commit/confirmation/idempotencyKey.js.map +1 -0
  140. package/dist/{transactions → commit}/confirmation/pendingWrite.d.ts +2 -33
  141. package/dist/commit/confirmation/pendingWrite.d.ts.map +1 -0
  142. package/dist/{transactions → commit}/confirmation/pendingWrite.js +1 -1
  143. package/dist/commit/confirmation/pendingWrite.js.map +1 -0
  144. package/dist/commit/contract.d.ts +1404 -0
  145. package/dist/commit/contract.d.ts.map +1 -0
  146. package/dist/{wire/commit.js → commit/contract.js} +13 -20
  147. package/dist/commit/contract.js.map +1 -0
  148. package/dist/{durableWrites.d.ts → commit/durableWrites.d.ts} +6 -6
  149. package/dist/commit/durableWrites.d.ts.map +1 -0
  150. package/dist/{durableWrites.js → commit/durableWrites.js} +5 -5
  151. package/dist/commit/durableWrites.js.map +1 -0
  152. package/dist/{transport/httpCommitRequest.d.ts → commit/httpRequest.d.ts} +6 -6
  153. package/dist/commit/httpRequest.d.ts.map +1 -0
  154. package/dist/{transport/httpCommitRequest.js → commit/httpRequest.js} +2 -3
  155. package/dist/commit/httpRequest.js.map +1 -0
  156. package/dist/commit/index.d.ts +17 -0
  157. package/dist/commit/index.d.ts.map +1 -0
  158. package/dist/commit/index.js +17 -0
  159. package/dist/commit/index.js.map +1 -0
  160. package/dist/{readSetContext.d.ts → commit/readSetContext.d.ts} +7 -15
  161. package/dist/commit/readSetContext.d.ts.map +1 -0
  162. package/dist/{readSetContext.js → commit/readSetContext.js} +10 -25
  163. package/dist/commit/readSetContext.js.map +1 -0
  164. package/dist/{commitRecordRuntime.d.ts → commit/recordRuntime.d.ts} +3 -5
  165. package/dist/commit/recordRuntime.d.ts.map +1 -0
  166. package/dist/{commitRecordRuntime.js → commit/recordRuntime.js} +13 -54
  167. package/dist/commit/recordRuntime.js.map +1 -0
  168. package/dist/coordination/index.d.ts +6 -8
  169. package/dist/coordination/index.d.ts.map +1 -1
  170. package/dist/coordination/index.js +3 -9
  171. package/dist/coordination/index.js.map +1 -1
  172. package/dist/coordination/schema.d.ts +11 -459
  173. package/dist/coordination/schema.d.ts.map +1 -1
  174. package/dist/coordination/schema.js +13 -261
  175. package/dist/coordination/schema.js.map +1 -1
  176. package/dist/errorCodes.d.ts +15 -9
  177. package/dist/errorCodes.d.ts.map +1 -1
  178. package/dist/errorCodes.js +13 -6
  179. package/dist/errorCodes.js.map +1 -1
  180. package/dist/errorObservation.d.ts +2 -2
  181. package/dist/errors.d.ts +3 -2
  182. package/dist/errors.d.ts.map +1 -1
  183. package/dist/errors.js +27 -11
  184. package/dist/errors.js.map +1 -1
  185. package/dist/index.d.ts +7 -7
  186. package/dist/index.d.ts.map +1 -1
  187. package/dist/index.js +3 -3
  188. package/dist/index.js.map +1 -1
  189. package/dist/internal/read-set.d.ts +3 -3
  190. package/dist/internal/read-set.d.ts.map +1 -1
  191. package/dist/internal/read-set.js +2 -2
  192. package/dist/internal/read-set.js.map +1 -1
  193. package/dist/observability.d.ts +4 -4
  194. package/dist/observability.d.ts.map +1 -1
  195. package/dist/observability.js +2 -2
  196. package/dist/{wire/delta.d.ts → observation/contract.d.ts} +8 -8
  197. package/dist/observation/contract.d.ts.map +1 -0
  198. package/dist/{wire/delta.js → observation/contract.js} +3 -3
  199. package/dist/observation/contract.js.map +1 -0
  200. package/dist/{wire/feedCursor.d.ts → observation/cursor.d.ts} +1 -1
  201. package/dist/observation/cursor.d.ts.map +1 -0
  202. package/dist/{wire/feedCursor.js → observation/cursor.js} +1 -1
  203. package/dist/observation/cursor.js.map +1 -0
  204. package/dist/{wire/deltaDelivery.d.ts → observation/deliveryContract.d.ts} +1 -1
  205. package/dist/observation/deliveryContract.d.ts.map +1 -0
  206. package/dist/{wire/deltaDelivery.js → observation/deliveryContract.js} +1 -1
  207. package/dist/observation/deliveryContract.js.map +1 -0
  208. package/dist/{wire/feedEvent.d.ts → observation/feedContract.d.ts} +10 -10
  209. package/dist/observation/feedContract.d.ts.map +1 -0
  210. package/dist/{wire/feedEvent.js → observation/feedContract.js} +4 -4
  211. package/dist/observation/feedContract.js.map +1 -0
  212. package/dist/observation/httpFeed.d.ts +4 -0
  213. package/dist/observation/httpFeed.d.ts.map +1 -0
  214. package/dist/{transport → observation}/httpFeed.js +1 -1
  215. package/dist/{transport → observation}/httpFeed.js.map +1 -1
  216. package/dist/observation/index.d.ts +13 -0
  217. package/dist/observation/index.d.ts.map +1 -0
  218. package/dist/observation/index.js +13 -0
  219. package/dist/observation/index.js.map +1 -0
  220. package/dist/{log → observation/persistence}/syncDeltaRow.d.ts +8 -8
  221. package/dist/observation/persistence/syncDeltaRow.d.ts.map +1 -0
  222. package/dist/{log → observation/persistence}/syncDeltaRow.js +4 -4
  223. package/dist/observation/persistence/syncDeltaRow.js.map +1 -0
  224. package/dist/pricing.d.ts +26 -12
  225. package/dist/pricing.d.ts.map +1 -1
  226. package/dist/pricing.js +61 -27
  227. package/dist/pricing.js.map +1 -1
  228. package/dist/schema/ddl.d.ts.map +1 -1
  229. package/dist/schema/ddl.js +1 -1
  230. package/dist/schema/ddl.js.map +1 -1
  231. package/dist/schema/deployment/backfill.d.ts +44 -0
  232. package/dist/schema/deployment/backfill.d.ts.map +1 -0
  233. package/dist/schema/deployment/backfill.js +57 -0
  234. package/dist/schema/deployment/backfill.js.map +1 -0
  235. package/dist/schema/deployment/contracts.d.ts +526 -0
  236. package/dist/schema/deployment/contracts.d.ts.map +1 -0
  237. package/dist/schema/deployment/contracts.js +77 -0
  238. package/dist/schema/deployment/contracts.js.map +1 -0
  239. package/dist/schema/deployment/fingerprint.d.ts +3 -0
  240. package/dist/schema/deployment/fingerprint.d.ts.map +1 -0
  241. package/dist/schema/deployment/fingerprint.js +18 -0
  242. package/dist/schema/deployment/fingerprint.js.map +1 -0
  243. package/dist/schema/deployment/index.d.ts +18 -0
  244. package/dist/schema/deployment/index.d.ts.map +1 -0
  245. package/dist/schema/deployment/index.js +71 -0
  246. package/dist/schema/deployment/index.js.map +1 -0
  247. package/dist/schema/deployment/postgresCatalog.d.ts +39 -0
  248. package/dist/schema/deployment/postgresCatalog.d.ts.map +1 -0
  249. package/dist/schema/deployment/postgresCatalog.js +86 -0
  250. package/dist/schema/deployment/postgresCatalog.js.map +1 -0
  251. package/dist/schema/deployment/reconcile.d.ts +20 -0
  252. package/dist/schema/deployment/reconcile.d.ts.map +1 -0
  253. package/dist/schema/deployment/reconcile.js +226 -0
  254. package/dist/schema/deployment/reconcile.js.map +1 -0
  255. package/dist/schema/deployment/sequence.d.ts +4 -0
  256. package/dist/schema/deployment/sequence.d.ts.map +1 -0
  257. package/dist/schema/deployment/sequence.js +71 -0
  258. package/dist/schema/deployment/sequence.js.map +1 -0
  259. package/dist/schema/index.d.ts +6 -6
  260. package/dist/schema/index.d.ts.map +1 -1
  261. package/dist/schema/index.js +8 -7
  262. package/dist/schema/index.js.map +1 -1
  263. package/dist/schema/model.d.ts +0 -27
  264. package/dist/schema/model.d.ts.map +1 -1
  265. package/dist/schema/model.js +0 -2
  266. package/dist/schema/model.js.map +1 -1
  267. package/dist/schema/openapi.d.ts.map +1 -1
  268. package/dist/schema/openapi.js +45 -6
  269. package/dist/schema/openapi.js.map +1 -1
  270. package/dist/schema/schema.d.ts +11 -3
  271. package/dist/schema/schema.d.ts.map +1 -1
  272. package/dist/schema/schema.js +9 -2
  273. package/dist/schema/schema.js.map +1 -1
  274. package/dist/schema/serialize.d.ts +1 -4
  275. package/dist/schema/serialize.d.ts.map +1 -1
  276. package/dist/schema/serialize.js +0 -4
  277. package/dist/schema/serialize.js.map +1 -1
  278. package/dist/schema/tenancy.d.ts +1 -1
  279. package/dist/server/adapter.d.ts +1 -1
  280. package/dist/server/adapter.d.ts.map +1 -1
  281. package/dist/server/commit.d.ts +6 -14
  282. package/dist/server/commit.d.ts.map +1 -1
  283. package/dist/server/index.d.ts +1 -1
  284. package/dist/server/index.d.ts.map +1 -1
  285. package/dist/server/index.js +1 -1
  286. package/dist/server/index.js.map +1 -1
  287. package/dist/server/storageMode.d.ts +1 -1
  288. package/dist/source/{adapter.d.ts → adapters/adapter.d.ts} +10 -4
  289. package/dist/source/adapters/adapter.d.ts.map +1 -0
  290. package/dist/source/adapters/adapter.js.map +1 -0
  291. package/dist/source/adapters/adapterFactory.d.ts.map +1 -0
  292. package/dist/source/{adapterFactory.js → adapters/adapterFactory.js} +1 -1
  293. package/dist/source/adapters/adapterFactory.js.map +1 -0
  294. package/dist/source/adapters/adapterProfile.d.ts.map +1 -0
  295. package/dist/source/adapters/adapterProfile.js.map +1 -0
  296. package/dist/source/{conformance.d.ts → adapters/conformance.d.ts} +1 -1
  297. package/dist/source/adapters/conformance.d.ts.map +1 -0
  298. package/dist/source/{conformance.js → adapters/conformance.js} +1 -1
  299. package/dist/source/adapters/conformance.js.map +1 -0
  300. package/dist/source/{contract.d.ts → adapters/contract.d.ts} +8 -77
  301. package/dist/source/adapters/contract.d.ts.map +1 -0
  302. package/dist/source/{contract.js → adapters/contract.js} +12 -57
  303. package/dist/source/adapters/contract.js.map +1 -0
  304. package/dist/source/adapters/drizzle.d.ts +1 -1
  305. package/dist/source/adapters/drizzle.d.ts.map +1 -1
  306. package/dist/source/adapters/drizzle.js +21 -23
  307. package/dist/source/adapters/drizzle.js.map +1 -1
  308. package/dist/source/adapters/idempotency.d.ts.map +1 -0
  309. package/dist/source/{idempotency.js → adapters/idempotency.js} +2 -2
  310. package/dist/source/adapters/idempotency.js.map +1 -0
  311. package/dist/source/adapters/index.d.ts +21 -0
  312. package/dist/source/adapters/index.d.ts.map +1 -0
  313. package/dist/source/adapters/index.js +21 -0
  314. package/dist/source/adapters/index.js.map +1 -0
  315. package/dist/source/adapters/kysely.d.ts +1 -1
  316. package/dist/source/adapters/kysely.d.ts.map +1 -1
  317. package/dist/source/adapters/kysely.js +18 -20
  318. package/dist/source/adapters/kysely.js.map +1 -1
  319. package/dist/source/adapters/kyselyMutationCore.d.ts +2 -2
  320. package/dist/source/adapters/kyselyMutationCore.d.ts.map +1 -1
  321. package/dist/source/adapters/kyselyMutationCore.js +1 -1
  322. package/dist/source/adapters/kyselyMutationCore.js.map +1 -1
  323. package/dist/source/adapters/memory.d.ts +3 -3
  324. package/dist/source/adapters/memory.d.ts.map +1 -1
  325. package/dist/source/adapters/memory.js +19 -7
  326. package/dist/source/adapters/memory.js.map +1 -1
  327. package/dist/source/adapters/migration.d.ts +8 -0
  328. package/dist/source/adapters/migration.d.ts.map +1 -0
  329. package/dist/source/adapters/migration.js +9 -0
  330. package/dist/source/adapters/migration.js.map +1 -0
  331. package/dist/source/{migrations.d.ts → adapters/migrations.d.ts} +3 -4
  332. package/dist/source/adapters/migrations.d.ts.map +1 -0
  333. package/dist/source/{migrations.js → adapters/migrations.js} +4 -52
  334. package/dist/source/adapters/migrations.js.map +1 -0
  335. package/dist/source/adapters/prisma.d.ts +1 -1
  336. package/dist/source/adapters/prisma.d.ts.map +1 -1
  337. package/dist/source/adapters/prisma.js +21 -28
  338. package/dist/source/adapters/prisma.js.map +1 -1
  339. package/dist/source/{subjectAuthorization.d.ts → adapters/subjectAuthorization.d.ts} +1 -1
  340. package/dist/source/adapters/subjectAuthorization.d.ts.map +1 -0
  341. package/dist/source/{subjectAuthorization.js → adapters/subjectAuthorization.js} +2 -2
  342. package/dist/source/adapters/subjectAuthorization.js.map +1 -0
  343. package/dist/source/{connector.d.ts → connector/client.d.ts} +6 -1
  344. package/dist/source/connector/client.d.ts.map +1 -0
  345. package/dist/source/{connector.js → connector/client.js} +28 -11
  346. package/dist/source/connector/client.js.map +1 -0
  347. package/dist/source/connector/index.d.ts +4 -0
  348. package/dist/source/connector/index.d.ts.map +1 -0
  349. package/dist/source/connector/index.js +4 -0
  350. package/dist/source/connector/index.js.map +1 -0
  351. package/dist/source/{connectorProtocol.d.ts → connector/protocol.d.ts} +8 -1
  352. package/dist/source/connector/protocol.d.ts.map +1 -0
  353. package/dist/source/{connectorProtocol.js → connector/protocol.js} +10 -3
  354. package/dist/source/connector/protocol.js.map +1 -0
  355. package/dist/source/delivery/index.d.ts +3 -0
  356. package/dist/source/delivery/index.d.ts.map +1 -0
  357. package/dist/source/delivery/index.js +3 -0
  358. package/dist/source/delivery/index.js.map +1 -0
  359. package/dist/source/{pushQueue.d.ts → delivery/pushQueue.d.ts} +1 -1
  360. package/dist/source/delivery/pushQueue.d.ts.map +1 -0
  361. package/dist/source/{pushQueue.js → delivery/pushQueue.js} +1 -1
  362. package/dist/source/delivery/pushQueue.js.map +1 -0
  363. package/dist/source/{factory.d.ts → endpoint/factory.d.ts} +3 -3
  364. package/dist/source/endpoint/factory.d.ts.map +1 -0
  365. package/dist/source/{factory.js → endpoint/factory.js} +9 -4
  366. package/dist/source/endpoint/factory.js.map +1 -0
  367. package/dist/source/endpoint/index.d.ts +5 -0
  368. package/dist/source/endpoint/index.d.ts.map +1 -0
  369. package/dist/source/endpoint/index.js +5 -0
  370. package/dist/source/endpoint/index.js.map +1 -0
  371. package/dist/source/{next.d.ts → endpoint/next.d.ts} +2 -2
  372. package/dist/source/endpoint/next.d.ts.map +1 -0
  373. package/dist/source/{next.js → endpoint/next.js} +1 -1
  374. package/dist/source/endpoint/next.js.map +1 -0
  375. package/dist/source/{signing.d.ts → endpoint/signing.d.ts} +1 -1
  376. package/dist/source/endpoint/signing.d.ts.map +1 -0
  377. package/dist/source/{signing.js → endpoint/signing.js} +1 -1
  378. package/dist/source/endpoint/signing.js.map +1 -0
  379. package/dist/source/index.d.ts +14 -12
  380. package/dist/source/index.d.ts.map +1 -1
  381. package/dist/source/index.js +13 -11
  382. package/dist/source/index.js.map +1 -1
  383. package/dist/source/outbox/contract.d.ts +50 -0
  384. package/dist/source/outbox/contract.d.ts.map +1 -0
  385. package/dist/source/outbox/contract.js +50 -0
  386. package/dist/source/outbox/contract.js.map +1 -0
  387. package/dist/source/outbox/envelope.d.ts +9 -0
  388. package/dist/source/outbox/envelope.d.ts.map +1 -0
  389. package/dist/source/outbox/envelope.js +36 -0
  390. package/dist/source/outbox/envelope.js.map +1 -0
  391. package/dist/source/outbox/index.d.ts +11 -0
  392. package/dist/source/outbox/index.d.ts.map +1 -0
  393. package/dist/source/outbox/index.js +11 -0
  394. package/dist/source/outbox/index.js.map +1 -0
  395. package/dist/source/outbox/migrations.d.ts +4 -0
  396. package/dist/source/outbox/migrations.d.ts.map +1 -0
  397. package/dist/source/outbox/migrations.js +67 -0
  398. package/dist/source/outbox/migrations.js.map +1 -0
  399. package/dist/source/outbox/retention.d.ts +3 -0
  400. package/dist/source/outbox/retention.d.ts.map +1 -0
  401. package/dist/source/outbox/retention.js +3 -0
  402. package/dist/source/outbox/retention.js.map +1 -0
  403. package/dist/source/types.d.ts +16 -17
  404. package/dist/source/types.d.ts.map +1 -1
  405. package/dist/source/types.js +1 -0
  406. package/dist/source/types.js.map +1 -1
  407. package/dist/syncLog/contract.d.ts +19 -2
  408. package/dist/syncLog/contract.d.ts.map +1 -1
  409. package/dist/syncLog/contract.js +19 -2
  410. package/dist/syncLog/contract.js.map +1 -1
  411. package/dist/transport/{credentialLifecycle.d.ts → connection/credentialLifecycle.d.ts} +3 -3
  412. package/dist/transport/connection/credentialLifecycle.d.ts.map +1 -0
  413. package/dist/transport/{credentialLifecycle.js → connection/credentialLifecycle.js} +2 -2
  414. package/dist/transport/connection/credentialLifecycle.js.map +1 -0
  415. package/dist/transport/connection/index.d.ts +5 -0
  416. package/dist/transport/connection/index.d.ts.map +1 -0
  417. package/dist/transport/connection/index.js +5 -0
  418. package/dist/transport/connection/index.js.map +1 -0
  419. package/dist/transport/{connectionManager.d.ts → connection/manager.d.ts} +13 -5
  420. package/dist/transport/connection/manager.d.ts.map +1 -0
  421. package/dist/transport/{connectionManager.js → connection/manager.js} +6 -4
  422. package/dist/transport/connection/manager.js.map +1 -0
  423. package/dist/transport/{networkProbe.d.ts → connection/networkProbe.d.ts} +2 -2
  424. package/dist/transport/connection/networkProbe.d.ts.map +1 -0
  425. package/dist/transport/{networkProbe.js → connection/networkProbe.js} +4 -4
  426. package/dist/transport/connection/networkProbe.js.map +1 -0
  427. package/dist/transport/{httpClient.d.ts → http/client.d.ts} +26 -45
  428. package/dist/transport/http/client.d.ts.map +1 -0
  429. package/dist/transport/{httpClient.js → http/client.js} +84 -124
  430. package/dist/transport/http/client.js.map +1 -0
  431. package/dist/transport/{httpTransportHelpers.d.ts → http/helpers.d.ts} +5 -5
  432. package/dist/transport/http/helpers.d.ts.map +1 -0
  433. package/dist/transport/{httpTransportHelpers.js → http/helpers.js} +5 -5
  434. package/dist/transport/http/helpers.js.map +1 -0
  435. package/dist/transport/http/index.d.ts +6 -0
  436. package/dist/transport/http/index.d.ts.map +1 -0
  437. package/dist/transport/http/index.js +6 -0
  438. package/dist/transport/http/index.js.map +1 -0
  439. package/dist/transport/{httpOptions.d.ts → http/options.d.ts} +7 -7
  440. package/dist/transport/{httpOptions.d.ts.map → http/options.d.ts.map} +1 -1
  441. package/dist/transport/{httpOptions.js → http/options.js} +1 -1
  442. package/dist/transport/http/options.js.map +1 -0
  443. package/dist/transport/http/subscription.d.ts +16 -0
  444. package/dist/transport/http/subscription.d.ts.map +1 -0
  445. package/dist/transport/http/subscription.js +146 -0
  446. package/dist/transport/http/subscription.js.map +1 -0
  447. package/dist/transport/{httpTransport.d.ts → http/transport.d.ts} +9 -6
  448. package/dist/transport/http/transport.d.ts.map +1 -0
  449. package/dist/transport/{httpTransport.js → http/transport.js} +95 -93
  450. package/dist/transport/http/transport.js.map +1 -0
  451. package/dist/transport/index.d.ts +8 -0
  452. package/dist/transport/index.d.ts.map +1 -0
  453. package/dist/transport/index.js +8 -0
  454. package/dist/transport/index.js.map +1 -0
  455. package/dist/transport/{commitFrames.d.ts → websocket/commitFrames.d.ts} +8 -20
  456. package/dist/transport/websocket/commitFrames.d.ts.map +1 -0
  457. package/dist/transport/{commitFrames.js → websocket/commitFrames.js} +6 -25
  458. package/dist/transport/websocket/commitFrames.js.map +1 -0
  459. package/dist/transport/{wsFrameHandlers.d.ts → websocket/frameHandlers.d.ts} +5 -5
  460. package/dist/transport/websocket/frameHandlers.d.ts.map +1 -0
  461. package/dist/transport/{wsFrameHandlers.js → websocket/frameHandlers.js} +10 -51
  462. package/dist/transport/websocket/frameHandlers.js.map +1 -0
  463. package/dist/transport/{heartbeat.d.ts → websocket/heartbeat.d.ts} +1 -1
  464. package/dist/transport/websocket/heartbeat.d.ts.map +1 -0
  465. package/dist/transport/{heartbeat.js → websocket/heartbeat.js} +2 -2
  466. package/dist/transport/websocket/heartbeat.js.map +1 -0
  467. package/dist/transport/websocket/index.d.ts +6 -0
  468. package/dist/transport/websocket/index.d.ts.map +1 -0
  469. package/dist/transport/websocket/index.js +6 -0
  470. package/dist/transport/websocket/index.js.map +1 -0
  471. package/dist/transport/{wsTransport.d.ts → websocket/transport.d.ts} +13 -25
  472. package/dist/transport/websocket/transport.d.ts.map +1 -0
  473. package/dist/transport/{wsTransport.js → websocket/transport.js} +14 -14
  474. package/dist/transport/websocket/transport.js.map +1 -0
  475. package/dist/types/index.d.ts +1 -1
  476. package/dist/types/index.d.ts.map +1 -1
  477. package/dist/types/streams.d.ts +8 -48
  478. package/dist/types/streams.d.ts.map +1 -1
  479. package/dist/types/streams.js +2 -2
  480. package/dist/wire/accountResponses.d.ts +4 -72
  481. package/dist/wire/accountResponses.d.ts.map +1 -1
  482. package/dist/wire/accountResponses.js +2 -10
  483. package/dist/wire/accountResponses.js.map +1 -1
  484. package/dist/wire/frames.d.ts +6 -83
  485. package/dist/wire/frames.d.ts.map +1 -1
  486. package/dist/wire/frames.js +4 -11
  487. package/dist/wire/frames.js.map +1 -1
  488. package/dist/wire/inboundFrames.d.ts +6 -131
  489. package/dist/wire/inboundFrames.d.ts.map +1 -1
  490. package/dist/wire/inboundFrames.js +3 -3
  491. package/dist/wire/inboundFrames.js.map +1 -1
  492. package/dist/wire/index.d.ts +17 -15
  493. package/dist/wire/index.d.ts.map +1 -1
  494. package/dist/wire/index.js +11 -8
  495. package/dist/wire/index.js.map +1 -1
  496. package/dist/wire/modelMutations.d.ts +1 -32
  497. package/dist/wire/modelMutations.d.ts.map +1 -1
  498. package/dist/wire/modelMutations.js +1 -8
  499. package/dist/wire/modelMutations.js.map +1 -1
  500. package/package.json +130 -10
  501. package/src/ai-sdk/modelTools.ts +5 -5
  502. package/src/ai-sdk/updateTool.ts +5 -7
  503. package/src/auth/capability.ts +5 -0
  504. package/src/auth/capabilityLifecycle.ts +1 -1
  505. package/src/auth/credentialPolicy.ts +1 -1
  506. package/src/auth/identity.ts +7 -7
  507. package/src/auth/index.ts +4 -663
  508. package/src/auth/runtime.ts +669 -0
  509. package/src/auth/sessionMint.ts +3 -2
  510. package/src/branches.ts +3 -0
  511. package/src/{coordination/awaitClaimGrant.ts → claims/awaitGrant.ts} +4 -4
  512. package/src/{wire/claims.ts → claims/contract.ts} +1 -1
  513. package/src/{coordination → claims}/events.ts +7 -11
  514. package/src/claims/index.ts +21 -0
  515. package/src/claims/lifetime.ts +78 -0
  516. package/src/{coordination → claims}/locator.ts +3 -3
  517. package/src/claims/routes.ts +81 -0
  518. package/src/{coordination → claims}/trace.ts +5 -5
  519. package/src/{ablo.ts → client/ablo.ts} +10 -22
  520. package/src/{transactionLayer.ts → client/contract.ts} +11 -13
  521. package/src/{headlessClient.ts → client/headless.ts} +13 -15
  522. package/src/client/index.ts +10 -0
  523. package/src/{resources → client/resources}/functionalUpdate.ts +4 -4
  524. package/src/{resources → client/resources}/httpResources.ts +48 -68
  525. package/src/{resources → client/resources}/modelCreate.ts +2 -2
  526. package/src/{resources → client/resources}/modelOperations.ts +46 -55
  527. package/src/{resources → client/resources}/mutationOptions.ts +4 -17
  528. package/src/{resources → client/resources}/where.ts +1 -1
  529. package/src/{resources → client/resources}/writeOptionsSchema.ts +7 -27
  530. package/src/client/surface.ts +50 -0
  531. package/src/{transactions → commit}/confirmation/commitEnvelope.ts +2 -12
  532. package/src/{transactions → commit}/confirmation/httpCommitEnvelope.ts +1 -1
  533. package/src/{transactions → commit}/confirmation/pendingWrite.ts +1 -1
  534. package/src/{wire/commit.ts → commit/contract.ts} +11 -25
  535. package/src/{durableWrites.ts → commit/durableWrites.ts} +7 -7
  536. package/src/{transport/httpCommitRequest.ts → commit/httpRequest.ts} +6 -7
  537. package/src/commit/index.ts +16 -0
  538. package/src/{readSetContext.ts → commit/readSetContext.ts} +16 -41
  539. package/src/{commitRecordRuntime.ts → commit/recordRuntime.ts} +12 -67
  540. package/src/coordination/index.ts +4 -52
  541. package/src/coordination/schema.ts +15 -302
  542. package/src/errorCodes.ts +56 -10
  543. package/src/errors.ts +32 -10
  544. package/src/index.ts +8 -8
  545. package/src/internal/read-set.ts +3 -6
  546. package/src/observability.ts +4 -4
  547. package/src/{wire/delta.ts → observation/contract.ts} +2 -2
  548. package/src/{wire/feedEvent.ts → observation/feedContract.ts} +3 -4
  549. package/src/{transport → observation}/httpFeed.ts +3 -3
  550. package/src/observation/index.ts +12 -0
  551. package/src/{log → observation/persistence}/syncDeltaRow.ts +6 -7
  552. package/src/pricing.ts +61 -26
  553. package/src/schema/ddl.ts +3 -1
  554. package/src/schema/deployment/backfill.ts +88 -0
  555. package/src/schema/deployment/contracts.ts +119 -0
  556. package/src/schema/deployment/fingerprint.ts +13 -0
  557. package/src/schema/deployment/index.ts +81 -0
  558. package/src/schema/deployment/postgresCatalog.ts +131 -0
  559. package/src/schema/deployment/reconcile.ts +219 -0
  560. package/src/schema/deployment/sequence.ts +85 -0
  561. package/src/schema/index.ts +9 -20
  562. package/src/schema/model.ts +0 -33
  563. package/src/schema/openapi.ts +47 -7
  564. package/src/schema/schema.ts +23 -3
  565. package/src/schema/serialize.ts +0 -8
  566. package/src/server/adapter.ts +1 -1
  567. package/src/server/commit.ts +6 -14
  568. package/src/server/index.ts +1 -1
  569. package/src/source/{adapter.ts → adapters/adapter.ts} +9 -5
  570. package/src/source/{adapterFactory.ts → adapters/adapterFactory.ts} +1 -1
  571. package/src/source/{conformance.ts → adapters/conformance.ts} +1 -1
  572. package/src/source/{contract.ts → adapters/contract.ts} +16 -64
  573. package/src/source/adapters/drizzle.ts +29 -27
  574. package/src/source/{idempotency.ts → adapters/idempotency.ts} +2 -2
  575. package/src/source/adapters/index.ts +20 -0
  576. package/src/source/adapters/kysely.ts +32 -25
  577. package/src/source/adapters/kyselyMutationCore.ts +3 -3
  578. package/src/source/adapters/memory.ts +25 -9
  579. package/src/source/adapters/migration.ts +11 -0
  580. package/src/source/{migrations.ts → adapters/migrations.ts} +6 -54
  581. package/src/source/adapters/prisma.ts +33 -32
  582. package/src/source/{subjectAuthorization.ts → adapters/subjectAuthorization.ts} +2 -2
  583. package/src/source/{connector.ts → connector/client.ts} +35 -12
  584. package/src/source/connector/index.ts +3 -0
  585. package/src/source/{connectorProtocol.ts → connector/protocol.ts} +10 -2
  586. package/src/source/delivery/index.ts +2 -0
  587. package/src/source/{pushQueue.ts → delivery/pushQueue.ts} +2 -2
  588. package/src/source/{factory.ts → endpoint/factory.ts} +13 -8
  589. package/src/source/endpoint/index.ts +4 -0
  590. package/src/source/{next.ts → endpoint/next.ts} +2 -2
  591. package/src/source/{signing.ts → endpoint/signing.ts} +1 -1
  592. package/src/source/index.ts +22 -19
  593. package/src/source/outbox/contract.ts +56 -0
  594. package/src/source/outbox/envelope.ts +47 -0
  595. package/src/source/outbox/index.ts +15 -0
  596. package/src/source/outbox/migrations.ts +71 -0
  597. package/src/source/outbox/retention.ts +2 -0
  598. package/src/source/types.ts +17 -17
  599. package/src/syncLog/contract.ts +19 -2
  600. package/src/transport/{credentialLifecycle.ts → connection/credentialLifecycle.ts} +3 -3
  601. package/src/transport/connection/index.ts +4 -0
  602. package/src/transport/{connectionManager.ts → connection/manager.ts} +13 -4
  603. package/src/transport/{networkProbe.ts → connection/networkProbe.ts} +4 -4
  604. package/src/transport/{httpClient.ts → http/client.ts} +128 -209
  605. package/src/transport/{httpTransportHelpers.ts → http/helpers.ts} +7 -7
  606. package/src/transport/http/index.ts +5 -0
  607. package/src/transport/{httpOptions.ts → http/options.ts} +6 -6
  608. package/src/transport/http/subscription.ts +174 -0
  609. package/src/transport/{httpTransport.ts → http/transport.ts} +127 -113
  610. package/src/transport/index.ts +7 -0
  611. package/src/transport/{commitFrames.ts → websocket/commitFrames.ts} +14 -46
  612. package/src/transport/{wsFrameHandlers.ts → websocket/frameHandlers.ts} +11 -54
  613. package/src/transport/{heartbeat.ts → websocket/heartbeat.ts} +2 -2
  614. package/src/transport/websocket/index.ts +5 -0
  615. package/src/transport/{wsTransport.ts → websocket/transport.ts} +16 -30
  616. package/src/types/index.ts +2 -6
  617. package/src/types/streams.ts +7 -61
  618. package/src/webhooks/events.ts +1 -1
  619. package/src/wire/accountResponses.ts +3 -12
  620. package/src/wire/frames.ts +5 -15
  621. package/src/wire/inboundFrames.ts +3 -3
  622. package/src/wire/index.ts +19 -15
  623. package/src/wire/modelMutations.ts +1 -14
  624. package/dist/ablo.d.ts.map +0 -1
  625. package/dist/ablo.js.map +0 -1
  626. package/dist/commitRecordRuntime.d.ts.map +0 -1
  627. package/dist/commitRecordRuntime.js.map +0 -1
  628. package/dist/coordination/awaitClaimGrant.d.ts.map +0 -1
  629. package/dist/coordination/awaitClaimGrant.js.map +0 -1
  630. package/dist/coordination/claimHeartbeatLoop.d.ts.map +0 -1
  631. package/dist/coordination/claimHeartbeatLoop.js.map +0 -1
  632. package/dist/coordination/claimMeta.d.ts.map +0 -1
  633. package/dist/coordination/claimMeta.js.map +0 -1
  634. package/dist/coordination/events.d.ts.map +0 -1
  635. package/dist/coordination/events.js +0 -8
  636. package/dist/coordination/events.js.map +0 -1
  637. package/dist/coordination/locator.d.ts.map +0 -1
  638. package/dist/coordination/locator.js.map +0 -1
  639. package/dist/coordination/targetConflict.d.ts.map +0 -1
  640. package/dist/coordination/targetConflict.js.map +0 -1
  641. package/dist/coordination/trace.d.ts.map +0 -1
  642. package/dist/coordination/trace.js.map +0 -1
  643. package/dist/durableWrites.d.ts.map +0 -1
  644. package/dist/durableWrites.js.map +0 -1
  645. package/dist/headlessClient.d.ts.map +0 -1
  646. package/dist/log/syncDeltaRow.d.ts.map +0 -1
  647. package/dist/log/syncDeltaRow.js.map +0 -1
  648. package/dist/policy/types.d.ts +0 -226
  649. package/dist/policy/types.d.ts.map +0 -1
  650. package/dist/policy/types.js +0 -127
  651. package/dist/policy/types.js.map +0 -1
  652. package/dist/readSetContext.d.ts.map +0 -1
  653. package/dist/readSetContext.js.map +0 -1
  654. package/dist/resources/functionalUpdate.d.ts.map +0 -1
  655. package/dist/resources/functionalUpdate.js.map +0 -1
  656. package/dist/resources/httpResources.d.ts.map +0 -1
  657. package/dist/resources/httpResources.js.map +0 -1
  658. package/dist/resources/modelCreate.d.ts.map +0 -1
  659. package/dist/resources/modelCreate.js.map +0 -1
  660. package/dist/resources/modelOperations.d.ts.map +0 -1
  661. package/dist/resources/modelOperations.js.map +0 -1
  662. package/dist/resources/mutationOptions.d.ts.map +0 -1
  663. package/dist/resources/mutationOptions.js.map +0 -1
  664. package/dist/resources/where.d.ts.map +0 -1
  665. package/dist/resources/where.js.map +0 -1
  666. package/dist/resources/writeOptionsSchema.d.ts.map +0 -1
  667. package/dist/resources/writeOptionsSchema.js.map +0 -1
  668. package/dist/schema/coordination.d.ts +0 -113
  669. package/dist/schema/coordination.d.ts.map +0 -1
  670. package/dist/schema/coordination.js +0 -134
  671. package/dist/schema/coordination.js.map +0 -1
  672. package/dist/source/adapter.d.ts.map +0 -1
  673. package/dist/source/adapter.js.map +0 -1
  674. package/dist/source/adapterFactory.d.ts.map +0 -1
  675. package/dist/source/adapterFactory.js.map +0 -1
  676. package/dist/source/adapterProfile.d.ts.map +0 -1
  677. package/dist/source/adapterProfile.js.map +0 -1
  678. package/dist/source/conformance.d.ts.map +0 -1
  679. package/dist/source/conformance.js.map +0 -1
  680. package/dist/source/connector.d.ts.map +0 -1
  681. package/dist/source/connector.js.map +0 -1
  682. package/dist/source/connectorProtocol.d.ts.map +0 -1
  683. package/dist/source/connectorProtocol.js.map +0 -1
  684. package/dist/source/contract.d.ts.map +0 -1
  685. package/dist/source/contract.js.map +0 -1
  686. package/dist/source/drizzle.d.ts +0 -2
  687. package/dist/source/drizzle.d.ts.map +0 -1
  688. package/dist/source/drizzle.js +0 -2
  689. package/dist/source/drizzle.js.map +0 -1
  690. package/dist/source/factory.d.ts.map +0 -1
  691. package/dist/source/factory.js.map +0 -1
  692. package/dist/source/idempotency.d.ts.map +0 -1
  693. package/dist/source/idempotency.js.map +0 -1
  694. package/dist/source/kysely.d.ts +0 -3
  695. package/dist/source/kysely.d.ts.map +0 -1
  696. package/dist/source/kysely.js +0 -3
  697. package/dist/source/kysely.js.map +0 -1
  698. package/dist/source/migrations.d.ts.map +0 -1
  699. package/dist/source/migrations.js.map +0 -1
  700. package/dist/source/next.d.ts.map +0 -1
  701. package/dist/source/next.js.map +0 -1
  702. package/dist/source/pushQueue.d.ts.map +0 -1
  703. package/dist/source/pushQueue.js.map +0 -1
  704. package/dist/source/signing.d.ts.map +0 -1
  705. package/dist/source/signing.js.map +0 -1
  706. package/dist/source/subjectAuthorization.d.ts.map +0 -1
  707. package/dist/source/subjectAuthorization.js.map +0 -1
  708. package/dist/transactionLayer.d.ts.map +0 -1
  709. package/dist/transactionLayer.js.map +0 -1
  710. package/dist/transactions/confirmation/commitEnvelope.d.ts.map +0 -1
  711. package/dist/transactions/confirmation/commitEnvelope.js.map +0 -1
  712. package/dist/transactions/confirmation/httpCommitEnvelope.d.ts.map +0 -1
  713. package/dist/transactions/confirmation/httpCommitEnvelope.js.map +0 -1
  714. package/dist/transactions/confirmation/idempotencyKey.d.ts.map +0 -1
  715. package/dist/transactions/confirmation/idempotencyKey.js.map +0 -1
  716. package/dist/transactions/confirmation/pendingWrite.d.ts.map +0 -1
  717. package/dist/transactions/confirmation/pendingWrite.js.map +0 -1
  718. package/dist/transport/commitFrames.d.ts.map +0 -1
  719. package/dist/transport/commitFrames.js.map +0 -1
  720. package/dist/transport/connectionManager.d.ts.map +0 -1
  721. package/dist/transport/connectionManager.js.map +0 -1
  722. package/dist/transport/credentialLifecycle.d.ts.map +0 -1
  723. package/dist/transport/credentialLifecycle.js.map +0 -1
  724. package/dist/transport/heartbeat.d.ts.map +0 -1
  725. package/dist/transport/heartbeat.js.map +0 -1
  726. package/dist/transport/httpClient.d.ts.map +0 -1
  727. package/dist/transport/httpClient.js.map +0 -1
  728. package/dist/transport/httpCommitRequest.d.ts.map +0 -1
  729. package/dist/transport/httpCommitRequest.js.map +0 -1
  730. package/dist/transport/httpFeed.d.ts +0 -4
  731. package/dist/transport/httpFeed.d.ts.map +0 -1
  732. package/dist/transport/httpOptions.js.map +0 -1
  733. package/dist/transport/httpTransport.d.ts.map +0 -1
  734. package/dist/transport/httpTransport.js.map +0 -1
  735. package/dist/transport/httpTransportHelpers.d.ts.map +0 -1
  736. package/dist/transport/httpTransportHelpers.js.map +0 -1
  737. package/dist/transport/networkProbe.d.ts.map +0 -1
  738. package/dist/transport/networkProbe.js.map +0 -1
  739. package/dist/transport/wsFrameHandlers.d.ts.map +0 -1
  740. package/dist/transport/wsFrameHandlers.js.map +0 -1
  741. package/dist/transport/wsTransport.d.ts.map +0 -1
  742. package/dist/transport/wsTransport.js.map +0 -1
  743. package/dist/wire/claimEvent.d.ts.map +0 -1
  744. package/dist/wire/claimEvent.js.map +0 -1
  745. package/dist/wire/claims.d.ts.map +0 -1
  746. package/dist/wire/claims.js.map +0 -1
  747. package/dist/wire/commit.d.ts +0 -2866
  748. package/dist/wire/commit.d.ts.map +0 -1
  749. package/dist/wire/commit.js.map +0 -1
  750. package/dist/wire/delta.d.ts.map +0 -1
  751. package/dist/wire/delta.js.map +0 -1
  752. package/dist/wire/deltaDelivery.d.ts.map +0 -1
  753. package/dist/wire/deltaDelivery.js.map +0 -1
  754. package/dist/wire/feedCursor.d.ts.map +0 -1
  755. package/dist/wire/feedCursor.js.map +0 -1
  756. package/dist/wire/feedEvent.d.ts.map +0 -1
  757. package/dist/wire/feedEvent.js.map +0 -1
  758. package/src/policy/types.ts +0 -300
  759. package/src/schema/coordination.ts +0 -161
  760. package/src/source/drizzle.ts +0 -1
  761. package/src/source/kysely.ts +0 -2
  762. /package/dist/{coordination → claims}/targetConflict.d.ts +0 -0
  763. /package/dist/{coordination → claims}/targetConflict.js +0 -0
  764. /package/dist/{resources → client/resources}/mutationOptions.js +0 -0
  765. /package/dist/{resources → client/resources}/where.d.ts +0 -0
  766. /package/dist/{transactions → commit}/confirmation/httpCommitEnvelope.d.ts +0 -0
  767. /package/dist/{transactions → commit}/confirmation/idempotencyKey.d.ts +0 -0
  768. /package/dist/{transactions → commit}/confirmation/idempotencyKey.js +0 -0
  769. /package/dist/source/{adapter.js → adapters/adapter.js} +0 -0
  770. /package/dist/source/{adapterFactory.d.ts → adapters/adapterFactory.d.ts} +0 -0
  771. /package/dist/source/{adapterProfile.d.ts → adapters/adapterProfile.d.ts} +0 -0
  772. /package/dist/source/{adapterProfile.js → adapters/adapterProfile.js} +0 -0
  773. /package/dist/source/{idempotency.d.ts → adapters/idempotency.d.ts} +0 -0
  774. /package/src/{wire/claimEvent.ts → claims/eventContract.ts} +0 -0
  775. /package/src/{coordination/claimHeartbeatLoop.ts → claims/heartbeat.ts} +0 -0
  776. /package/src/{coordination/claimMeta.ts → claims/meta.ts} +0 -0
  777. /package/src/{coordination → claims}/targetConflict.ts +0 -0
  778. /package/src/{transactions → commit}/confirmation/idempotencyKey.ts +0 -0
  779. /package/src/{wire/feedCursor.ts → observation/cursor.ts} +0 -0
  780. /package/src/{wire/deltaDelivery.ts → observation/deliveryContract.ts} +0 -0
  781. /package/src/source/{adapterProfile.ts → adapters/adapterProfile.ts} +0 -0
@@ -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
  }
@@ -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