@abloatai/transaction 0.56.0 → 0.58.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (769) hide show
  1. package/CONVENTIONS.md +54 -10
  2. package/README.md +3 -1
  3. package/dist/ai-sdk/modelTools.d.ts +3 -3
  4. package/dist/ai-sdk/modelTools.d.ts.map +1 -1
  5. package/dist/ai-sdk/modelTools.js +1 -1
  6. package/dist/ai-sdk/modelTools.js.map +1 -1
  7. package/dist/ai-sdk/updateTool.d.ts +5 -7
  8. package/dist/ai-sdk/updateTool.d.ts.map +1 -1
  9. package/dist/ai-sdk/updateTool.js +3 -5
  10. package/dist/ai-sdk/updateTool.js.map +1 -1
  11. package/dist/auth/capability.d.ts +5 -0
  12. package/dist/auth/capability.d.ts.map +1 -1
  13. package/dist/auth/capability.js +5 -0
  14. package/dist/auth/capability.js.map +1 -1
  15. package/dist/auth/capabilityLifecycle.d.ts +1 -1
  16. package/dist/auth/capabilityLifecycle.d.ts.map +1 -1
  17. package/dist/auth/credentialPolicy.d.ts +1 -1
  18. package/dist/auth/credentialPolicy.d.ts.map +1 -1
  19. package/dist/auth/identity.d.ts +3 -3
  20. package/dist/auth/identity.d.ts.map +1 -1
  21. package/dist/auth/identity.js +5 -5
  22. package/dist/auth/identity.js.map +1 -1
  23. package/dist/auth/index.d.ts +4 -208
  24. package/dist/auth/index.d.ts.map +1 -1
  25. package/dist/auth/index.js +4 -330
  26. package/dist/auth/index.js.map +1 -1
  27. package/dist/auth/runtime.d.ts +218 -0
  28. package/dist/auth/runtime.d.ts.map +1 -0
  29. package/dist/auth/runtime.js +336 -0
  30. package/dist/auth/runtime.js.map +1 -0
  31. package/dist/auth/sessionMint.d.ts +1 -1
  32. package/dist/auth/sessionMint.d.ts.map +1 -1
  33. package/dist/auth/sessionMint.js +2 -1
  34. package/dist/auth/sessionMint.js.map +1 -1
  35. package/dist/branches.d.ts +25 -21
  36. package/dist/branches.d.ts.map +1 -1
  37. package/dist/branches.js +3 -0
  38. package/dist/branches.js.map +1 -1
  39. package/dist/{coordination/awaitClaimGrant.d.ts → claims/awaitGrant.d.ts} +1 -1
  40. package/dist/claims/awaitGrant.d.ts.map +1 -0
  41. package/dist/{coordination/awaitClaimGrant.js → claims/awaitGrant.js} +4 -4
  42. package/dist/claims/awaitGrant.js.map +1 -0
  43. package/dist/{wire/claims.d.ts → claims/contract.d.ts} +1 -1
  44. package/dist/claims/contract.d.ts.map +1 -0
  45. package/dist/{wire/claims.js → claims/contract.js} +2 -2
  46. package/dist/claims/contract.js.map +1 -0
  47. package/dist/{wire/claimEvent.d.ts → claims/eventContract.d.ts} +1 -1
  48. package/dist/claims/eventContract.d.ts.map +1 -0
  49. package/dist/{wire/claimEvent.js → claims/eventContract.js} +1 -1
  50. package/dist/claims/eventContract.js.map +1 -0
  51. package/dist/{coordination → claims}/events.d.ts +7 -11
  52. package/dist/claims/events.d.ts.map +1 -0
  53. package/dist/claims/events.js +8 -0
  54. package/dist/claims/events.js.map +1 -0
  55. package/dist/{coordination/claimHeartbeatLoop.d.ts → claims/heartbeat.d.ts} +1 -1
  56. package/dist/claims/heartbeat.d.ts.map +1 -0
  57. package/dist/{coordination/claimHeartbeatLoop.js → claims/heartbeat.js} +1 -1
  58. package/dist/claims/heartbeat.js.map +1 -0
  59. package/dist/claims/index.d.ts +17 -0
  60. package/dist/claims/index.d.ts.map +1 -0
  61. package/dist/claims/index.js +16 -0
  62. package/dist/claims/index.js.map +1 -0
  63. package/dist/claims/lifetime.d.ts +26 -0
  64. package/dist/claims/lifetime.d.ts.map +1 -0
  65. package/dist/claims/lifetime.js +62 -0
  66. package/dist/claims/lifetime.js.map +1 -0
  67. package/dist/{coordination → claims}/locator.d.ts +1 -1
  68. package/dist/claims/locator.d.ts.map +1 -0
  69. package/dist/{coordination → claims}/locator.js +2 -2
  70. package/dist/claims/locator.js.map +1 -0
  71. package/dist/{coordination/claimMeta.d.ts → claims/meta.d.ts} +1 -1
  72. package/dist/claims/meta.d.ts.map +1 -0
  73. package/dist/{coordination/claimMeta.js → claims/meta.js} +1 -1
  74. package/dist/claims/meta.js.map +1 -0
  75. package/dist/claims/routes.d.ts +59 -0
  76. package/dist/claims/routes.d.ts.map +1 -0
  77. package/dist/claims/routes.js +69 -0
  78. package/dist/claims/routes.js.map +1 -0
  79. package/dist/claims/targetConflict.d.ts.map +1 -0
  80. package/dist/claims/targetConflict.js.map +1 -0
  81. package/dist/{coordination → claims}/trace.d.ts +2 -2
  82. package/dist/claims/trace.d.ts.map +1 -0
  83. package/dist/{coordination → claims}/trace.js +5 -5
  84. package/dist/claims/trace.js.map +1 -0
  85. package/dist/{ablo.d.ts → client/ablo.d.ts} +6 -15
  86. package/dist/client/ablo.d.ts.map +1 -0
  87. package/dist/{ablo.js → client/ablo.js} +2 -2
  88. package/dist/client/ablo.js.map +1 -0
  89. package/dist/{transactionLayer.d.ts → client/contract.d.ts} +12 -14
  90. package/dist/client/contract.d.ts.map +1 -0
  91. package/dist/{transactionLayer.js → client/contract.js} +4 -5
  92. package/dist/client/contract.js.map +1 -0
  93. package/dist/{headlessClient.d.ts → client/headless.d.ts} +4 -4
  94. package/dist/client/headless.d.ts.map +1 -0
  95. package/dist/{headlessClient.js → client/headless.js} +8 -10
  96. package/dist/{headlessClient.js.map → client/headless.js.map} +1 -1
  97. package/dist/client/index.d.ts +11 -0
  98. package/dist/client/index.d.ts.map +1 -0
  99. package/dist/client/index.js +11 -0
  100. package/dist/client/index.js.map +1 -0
  101. package/dist/{resources → client/resources}/functionalUpdate.d.ts +4 -4
  102. package/dist/client/resources/functionalUpdate.d.ts.map +1 -0
  103. package/dist/{resources → client/resources}/functionalUpdate.js +3 -3
  104. package/dist/client/resources/functionalUpdate.js.map +1 -0
  105. package/dist/{resources → client/resources}/httpResources.d.ts +92 -77
  106. package/dist/client/resources/httpResources.d.ts.map +1 -0
  107. package/dist/client/resources/httpResources.js +94 -0
  108. package/dist/client/resources/httpResources.js.map +1 -0
  109. package/dist/client/resources/modelCreate.d.ts +21 -0
  110. package/dist/client/resources/modelCreate.d.ts.map +1 -0
  111. package/dist/client/resources/modelCreate.js +49 -0
  112. package/dist/client/resources/modelCreate.js.map +1 -0
  113. package/dist/{resources → client/resources}/modelOperations.d.ts +57 -51
  114. package/dist/client/resources/modelOperations.d.ts.map +1 -0
  115. package/dist/{resources → client/resources}/modelOperations.js +1 -1
  116. package/dist/client/resources/modelOperations.js.map +1 -0
  117. package/dist/{resources → client/resources}/mutationOptions.d.ts +4 -17
  118. package/dist/client/resources/mutationOptions.d.ts.map +1 -0
  119. package/dist/client/resources/mutationOptions.js.map +1 -0
  120. package/dist/client/resources/where.d.ts.map +1 -0
  121. package/dist/{resources → client/resources}/where.js +1 -1
  122. package/dist/client/resources/where.js.map +1 -0
  123. package/dist/{resources → client/resources}/writeOptionsSchema.d.ts +16 -35
  124. package/dist/client/resources/writeOptionsSchema.d.ts.map +1 -0
  125. package/dist/{resources → client/resources}/writeOptionsSchema.js +25 -18
  126. package/dist/client/resources/writeOptionsSchema.js.map +1 -0
  127. package/dist/{transactions → commit}/confirmation/commitEnvelope.d.ts +1 -37
  128. package/dist/commit/confirmation/commitEnvelope.d.ts.map +1 -0
  129. package/dist/{transactions → commit}/confirmation/commitEnvelope.js +2 -7
  130. package/dist/commit/confirmation/commitEnvelope.js.map +1 -0
  131. package/dist/commit/confirmation/httpCommitEnvelope.d.ts.map +1 -0
  132. package/dist/{transactions → commit}/confirmation/httpCommitEnvelope.js +1 -1
  133. package/dist/commit/confirmation/httpCommitEnvelope.js.map +1 -0
  134. package/dist/commit/confirmation/idempotencyKey.d.ts.map +1 -0
  135. package/dist/commit/confirmation/idempotencyKey.js.map +1 -0
  136. package/dist/{transactions → commit}/confirmation/pendingWrite.d.ts +2 -33
  137. package/dist/commit/confirmation/pendingWrite.d.ts.map +1 -0
  138. package/dist/{transactions → commit}/confirmation/pendingWrite.js +1 -1
  139. package/dist/commit/confirmation/pendingWrite.js.map +1 -0
  140. package/dist/commit/contract.d.ts +1404 -0
  141. package/dist/commit/contract.d.ts.map +1 -0
  142. package/dist/{wire/commit.js → commit/contract.js} +26 -21
  143. package/dist/commit/contract.js.map +1 -0
  144. package/dist/{durableWrites.d.ts → commit/durableWrites.d.ts} +6 -6
  145. package/dist/commit/durableWrites.d.ts.map +1 -0
  146. package/dist/{durableWrites.js → commit/durableWrites.js} +5 -5
  147. package/dist/commit/durableWrites.js.map +1 -0
  148. package/dist/commit/httpRequest.d.ts +45 -0
  149. package/dist/commit/httpRequest.d.ts.map +1 -0
  150. package/dist/commit/httpRequest.js +66 -0
  151. package/dist/commit/httpRequest.js.map +1 -0
  152. package/dist/commit/index.d.ts +17 -0
  153. package/dist/commit/index.d.ts.map +1 -0
  154. package/dist/commit/index.js +17 -0
  155. package/dist/commit/index.js.map +1 -0
  156. package/dist/{readSetContext.d.ts → commit/readSetContext.d.ts} +7 -15
  157. package/dist/commit/readSetContext.d.ts.map +1 -0
  158. package/dist/{readSetContext.js → commit/readSetContext.js} +18 -28
  159. package/dist/commit/readSetContext.js.map +1 -0
  160. package/dist/{commitRecordRuntime.d.ts → commit/recordRuntime.d.ts} +3 -5
  161. package/dist/commit/recordRuntime.d.ts.map +1 -0
  162. package/dist/{commitRecordRuntime.js → commit/recordRuntime.js} +13 -54
  163. package/dist/commit/recordRuntime.js.map +1 -0
  164. package/dist/coordination/index.d.ts +6 -8
  165. package/dist/coordination/index.d.ts.map +1 -1
  166. package/dist/coordination/index.js +3 -9
  167. package/dist/coordination/index.js.map +1 -1
  168. package/dist/coordination/schema.d.ts +11 -466
  169. package/dist/coordination/schema.d.ts.map +1 -1
  170. package/dist/coordination/schema.js +13 -265
  171. package/dist/coordination/schema.js.map +1 -1
  172. package/dist/errorCodes.d.ts +16 -9
  173. package/dist/errorCodes.d.ts.map +1 -1
  174. package/dist/errorCodes.js +14 -6
  175. package/dist/errorCodes.js.map +1 -1
  176. package/dist/errorObservation.d.ts +2 -2
  177. package/dist/errors.d.ts +3 -2
  178. package/dist/errors.d.ts.map +1 -1
  179. package/dist/errors.js +27 -11
  180. package/dist/errors.js.map +1 -1
  181. package/dist/index.d.ts +7 -7
  182. package/dist/index.d.ts.map +1 -1
  183. package/dist/index.js +3 -3
  184. package/dist/index.js.map +1 -1
  185. package/dist/internal/read-set.d.ts +3 -3
  186. package/dist/internal/read-set.d.ts.map +1 -1
  187. package/dist/internal/read-set.js +2 -2
  188. package/dist/internal/read-set.js.map +1 -1
  189. package/dist/observability.d.ts +4 -4
  190. package/dist/observability.d.ts.map +1 -1
  191. package/dist/observability.js +2 -2
  192. package/dist/{wire/delta.d.ts → observation/contract.d.ts} +8 -8
  193. package/dist/observation/contract.d.ts.map +1 -0
  194. package/dist/{wire/delta.js → observation/contract.js} +3 -3
  195. package/dist/observation/contract.js.map +1 -0
  196. package/dist/{wire/feedCursor.d.ts → observation/cursor.d.ts} +1 -1
  197. package/dist/observation/cursor.d.ts.map +1 -0
  198. package/dist/{wire/feedCursor.js → observation/cursor.js} +1 -1
  199. package/dist/observation/cursor.js.map +1 -0
  200. package/dist/{wire/deltaDelivery.d.ts → observation/deliveryContract.d.ts} +1 -1
  201. package/dist/observation/deliveryContract.d.ts.map +1 -0
  202. package/dist/{wire/deltaDelivery.js → observation/deliveryContract.js} +1 -1
  203. package/dist/observation/deliveryContract.js.map +1 -0
  204. package/dist/{wire/feedEvent.d.ts → observation/feedContract.d.ts} +10 -10
  205. package/dist/observation/feedContract.d.ts.map +1 -0
  206. package/dist/{wire/feedEvent.js → observation/feedContract.js} +4 -4
  207. package/dist/observation/feedContract.js.map +1 -0
  208. package/dist/observation/httpFeed.d.ts +4 -0
  209. package/dist/observation/httpFeed.d.ts.map +1 -0
  210. package/dist/{transport → observation}/httpFeed.js +1 -1
  211. package/dist/{transport → observation}/httpFeed.js.map +1 -1
  212. package/dist/observation/index.d.ts +13 -0
  213. package/dist/observation/index.d.ts.map +1 -0
  214. package/dist/observation/index.js +13 -0
  215. package/dist/observation/index.js.map +1 -0
  216. package/dist/{log → observation/persistence}/syncDeltaRow.d.ts +8 -8
  217. package/dist/observation/persistence/syncDeltaRow.d.ts.map +1 -0
  218. package/dist/{log → observation/persistence}/syncDeltaRow.js +4 -4
  219. package/dist/observation/persistence/syncDeltaRow.js.map +1 -0
  220. package/dist/pricing.d.ts +20 -12
  221. package/dist/pricing.d.ts.map +1 -1
  222. package/dist/pricing.js +46 -26
  223. package/dist/pricing.js.map +1 -1
  224. package/dist/schema/audit.d.ts +15 -0
  225. package/dist/schema/audit.d.ts.map +1 -0
  226. package/dist/schema/audit.js +90 -0
  227. package/dist/schema/audit.js.map +1 -0
  228. package/dist/schema/ddl.d.ts.map +1 -1
  229. package/dist/schema/ddl.js +68 -1
  230. package/dist/schema/ddl.js.map +1 -1
  231. package/dist/schema/index.d.ts +7 -6
  232. package/dist/schema/index.d.ts.map +1 -1
  233. package/dist/schema/index.js +6 -7
  234. package/dist/schema/index.js.map +1 -1
  235. package/dist/schema/model.d.ts +14 -27
  236. package/dist/schema/model.d.ts.map +1 -1
  237. package/dist/schema/model.js +2 -2
  238. package/dist/schema/model.js.map +1 -1
  239. package/dist/schema/openapi.d.ts.map +1 -1
  240. package/dist/schema/openapi.js +149 -8
  241. package/dist/schema/openapi.js.map +1 -1
  242. package/dist/schema/roles.d.ts +27 -0
  243. package/dist/schema/roles.d.ts.map +1 -1
  244. package/dist/schema/roles.js +40 -0
  245. package/dist/schema/roles.js.map +1 -1
  246. package/dist/schema/schema.d.ts +34 -7
  247. package/dist/schema/schema.d.ts.map +1 -1
  248. package/dist/schema/schema.js +39 -3
  249. package/dist/schema/schema.js.map +1 -1
  250. package/dist/schema/serialize.d.ts +5 -5
  251. package/dist/schema/serialize.d.ts.map +1 -1
  252. package/dist/schema/serialize.js +5 -5
  253. package/dist/schema/serialize.js.map +1 -1
  254. package/dist/schema/subject.d.ts +18 -0
  255. package/dist/schema/subject.d.ts.map +1 -0
  256. package/dist/schema/subject.js +27 -0
  257. package/dist/schema/subject.js.map +1 -0
  258. package/dist/schema/tenancy.d.ts +1 -1
  259. package/dist/server/adapter.d.ts +3 -1
  260. package/dist/server/adapter.d.ts.map +1 -1
  261. package/dist/server/commit.d.ts +6 -14
  262. package/dist/server/commit.d.ts.map +1 -1
  263. package/dist/server/index.d.ts +1 -1
  264. package/dist/server/index.d.ts.map +1 -1
  265. package/dist/server/index.js +1 -1
  266. package/dist/server/index.js.map +1 -1
  267. package/dist/server/readConfig.d.ts +3 -0
  268. package/dist/server/readConfig.d.ts.map +1 -1
  269. package/dist/server/readConfig.js +0 -21
  270. package/dist/server/readConfig.js.map +1 -1
  271. package/dist/server/storageMode.d.ts +1 -1
  272. package/dist/source/{adapter.d.ts → adapters/adapter.d.ts} +10 -4
  273. package/dist/source/adapters/adapter.d.ts.map +1 -0
  274. package/dist/source/adapters/adapter.js.map +1 -0
  275. package/dist/source/adapters/adapterFactory.d.ts.map +1 -0
  276. package/dist/source/{adapterFactory.js → adapters/adapterFactory.js} +1 -1
  277. package/dist/source/adapters/adapterFactory.js.map +1 -0
  278. package/dist/source/adapters/adapterProfile.d.ts.map +1 -0
  279. package/dist/source/adapters/adapterProfile.js.map +1 -0
  280. package/dist/source/{conformance.d.ts → adapters/conformance.d.ts} +1 -1
  281. package/dist/source/adapters/conformance.d.ts.map +1 -0
  282. package/dist/source/{conformance.js → adapters/conformance.js} +1 -1
  283. package/dist/source/adapters/conformance.js.map +1 -0
  284. package/dist/source/{contract.d.ts → adapters/contract.d.ts} +20 -75
  285. package/dist/source/adapters/contract.d.ts.map +1 -0
  286. package/dist/source/{contract.js → adapters/contract.js} +20 -55
  287. package/dist/source/adapters/contract.js.map +1 -0
  288. package/dist/source/adapters/drizzle.d.ts +1 -1
  289. package/dist/source/adapters/drizzle.d.ts.map +1 -1
  290. package/dist/source/adapters/drizzle.js +54 -25
  291. package/dist/source/adapters/drizzle.js.map +1 -1
  292. package/dist/source/adapters/idempotency.d.ts.map +1 -0
  293. package/dist/source/{idempotency.js → adapters/idempotency.js} +2 -2
  294. package/dist/source/adapters/idempotency.js.map +1 -0
  295. package/dist/source/adapters/index.d.ts +21 -0
  296. package/dist/source/adapters/index.d.ts.map +1 -0
  297. package/dist/source/adapters/index.js +21 -0
  298. package/dist/source/adapters/index.js.map +1 -0
  299. package/dist/source/adapters/kysely.d.ts +3 -1
  300. package/dist/source/adapters/kysely.d.ts.map +1 -1
  301. package/dist/source/adapters/kysely.js +49 -23
  302. package/dist/source/adapters/kysely.js.map +1 -1
  303. package/dist/source/adapters/kyselyMutationCore.d.ts +6 -3
  304. package/dist/source/adapters/kyselyMutationCore.d.ts.map +1 -1
  305. package/dist/source/adapters/kyselyMutationCore.js +17 -8
  306. package/dist/source/adapters/kyselyMutationCore.js.map +1 -1
  307. package/dist/source/adapters/memory.d.ts +3 -3
  308. package/dist/source/adapters/memory.d.ts.map +1 -1
  309. package/dist/source/adapters/memory.js +20 -7
  310. package/dist/source/adapters/memory.js.map +1 -1
  311. package/dist/source/adapters/migration.d.ts +8 -0
  312. package/dist/source/adapters/migration.d.ts.map +1 -0
  313. package/dist/source/adapters/migration.js +9 -0
  314. package/dist/source/adapters/migration.js.map +1 -0
  315. package/dist/source/{migrations.d.ts → adapters/migrations.d.ts} +3 -4
  316. package/dist/source/adapters/migrations.d.ts.map +1 -0
  317. package/dist/source/{migrations.js → adapters/migrations.js} +4 -31
  318. package/dist/source/adapters/migrations.js.map +1 -0
  319. package/dist/source/adapters/prisma.d.ts +1 -1
  320. package/dist/source/adapters/prisma.d.ts.map +1 -1
  321. package/dist/source/adapters/prisma.js +75 -30
  322. package/dist/source/adapters/prisma.js.map +1 -1
  323. package/dist/source/adapters/subjectAuthorization.d.ts +16 -0
  324. package/dist/source/adapters/subjectAuthorization.d.ts.map +1 -0
  325. package/dist/source/adapters/subjectAuthorization.js +126 -0
  326. package/dist/source/adapters/subjectAuthorization.js.map +1 -0
  327. package/dist/source/{connector.d.ts → connector/client.d.ts} +6 -1
  328. package/dist/source/connector/client.d.ts.map +1 -0
  329. package/dist/source/{connector.js → connector/client.js} +28 -11
  330. package/dist/source/connector/client.js.map +1 -0
  331. package/dist/source/connector/index.d.ts +4 -0
  332. package/dist/source/connector/index.d.ts.map +1 -0
  333. package/dist/source/connector/index.js +4 -0
  334. package/dist/source/connector/index.js.map +1 -0
  335. package/dist/source/{connectorProtocol.d.ts → connector/protocol.d.ts} +8 -1
  336. package/dist/source/connector/protocol.d.ts.map +1 -0
  337. package/dist/source/{connectorProtocol.js → connector/protocol.js} +10 -3
  338. package/dist/source/connector/protocol.js.map +1 -0
  339. package/dist/source/delivery/index.d.ts +3 -0
  340. package/dist/source/delivery/index.d.ts.map +1 -0
  341. package/dist/source/delivery/index.js +3 -0
  342. package/dist/source/delivery/index.js.map +1 -0
  343. package/dist/source/{pushQueue.d.ts → delivery/pushQueue.d.ts} +1 -1
  344. package/dist/source/delivery/pushQueue.d.ts.map +1 -0
  345. package/dist/source/{pushQueue.js → delivery/pushQueue.js} +1 -1
  346. package/dist/source/delivery/pushQueue.js.map +1 -0
  347. package/dist/source/{factory.d.ts → endpoint/factory.d.ts} +9 -3
  348. package/dist/source/endpoint/factory.d.ts.map +1 -0
  349. package/dist/source/{factory.js → endpoint/factory.js} +122 -6
  350. package/dist/source/endpoint/factory.js.map +1 -0
  351. package/dist/source/endpoint/index.d.ts +5 -0
  352. package/dist/source/endpoint/index.d.ts.map +1 -0
  353. package/dist/source/endpoint/index.js +5 -0
  354. package/dist/source/endpoint/index.js.map +1 -0
  355. package/dist/source/{next.d.ts → endpoint/next.d.ts} +2 -2
  356. package/dist/source/endpoint/next.d.ts.map +1 -0
  357. package/dist/source/{next.js → endpoint/next.js} +1 -1
  358. package/dist/source/endpoint/next.js.map +1 -0
  359. package/dist/source/{signing.d.ts → endpoint/signing.d.ts} +1 -1
  360. package/dist/source/endpoint/signing.d.ts.map +1 -0
  361. package/dist/source/{signing.js → endpoint/signing.js} +1 -1
  362. package/dist/source/endpoint/signing.js.map +1 -0
  363. package/dist/source/index.d.ts +15 -12
  364. package/dist/source/index.d.ts.map +1 -1
  365. package/dist/source/index.js +13 -10
  366. package/dist/source/index.js.map +1 -1
  367. package/dist/source/outbox/contract.d.ts +50 -0
  368. package/dist/source/outbox/contract.d.ts.map +1 -0
  369. package/dist/source/outbox/contract.js +50 -0
  370. package/dist/source/outbox/contract.js.map +1 -0
  371. package/dist/source/outbox/envelope.d.ts +9 -0
  372. package/dist/source/outbox/envelope.d.ts.map +1 -0
  373. package/dist/source/outbox/envelope.js +36 -0
  374. package/dist/source/outbox/envelope.js.map +1 -0
  375. package/dist/source/outbox/index.d.ts +11 -0
  376. package/dist/source/outbox/index.d.ts.map +1 -0
  377. package/dist/source/outbox/index.js +11 -0
  378. package/dist/source/outbox/index.js.map +1 -0
  379. package/dist/source/outbox/migrations.d.ts +4 -0
  380. package/dist/source/outbox/migrations.d.ts.map +1 -0
  381. package/dist/source/outbox/migrations.js +67 -0
  382. package/dist/source/outbox/migrations.js.map +1 -0
  383. package/dist/source/outbox/retention.d.ts +3 -0
  384. package/dist/source/outbox/retention.d.ts.map +1 -0
  385. package/dist/source/outbox/retention.js +3 -0
  386. package/dist/source/outbox/retention.js.map +1 -0
  387. package/dist/source/types.d.ts +59 -10
  388. package/dist/source/types.d.ts.map +1 -1
  389. package/dist/source/types.js +2 -0
  390. package/dist/source/types.js.map +1 -1
  391. package/dist/syncLog/contract.d.ts +19 -8
  392. package/dist/syncLog/contract.d.ts.map +1 -1
  393. package/dist/syncLog/contract.js +19 -6
  394. package/dist/syncLog/contract.js.map +1 -1
  395. package/dist/testing/fixtures/httpResponses.d.ts +6 -0
  396. package/dist/testing/fixtures/httpResponses.d.ts.map +1 -1
  397. package/dist/testing/fixtures/httpResponses.js +1 -0
  398. package/dist/testing/fixtures/httpResponses.js.map +1 -1
  399. package/dist/transport/{credentialLifecycle.d.ts → connection/credentialLifecycle.d.ts} +3 -3
  400. package/dist/transport/connection/credentialLifecycle.d.ts.map +1 -0
  401. package/dist/transport/{credentialLifecycle.js → connection/credentialLifecycle.js} +2 -2
  402. package/dist/transport/connection/credentialLifecycle.js.map +1 -0
  403. package/dist/transport/connection/index.d.ts +5 -0
  404. package/dist/transport/connection/index.d.ts.map +1 -0
  405. package/dist/transport/connection/index.js +5 -0
  406. package/dist/transport/connection/index.js.map +1 -0
  407. package/dist/transport/{connectionManager.d.ts → connection/manager.d.ts} +13 -5
  408. package/dist/transport/connection/manager.d.ts.map +1 -0
  409. package/dist/transport/{connectionManager.js → connection/manager.js} +6 -4
  410. package/dist/transport/connection/manager.js.map +1 -0
  411. package/dist/transport/{networkProbe.d.ts → connection/networkProbe.d.ts} +2 -2
  412. package/dist/transport/connection/networkProbe.d.ts.map +1 -0
  413. package/dist/transport/{networkProbe.js → connection/networkProbe.js} +4 -4
  414. package/dist/transport/connection/networkProbe.js.map +1 -0
  415. package/dist/transport/{httpClient.d.ts → http/client.d.ts} +32 -44
  416. package/dist/transport/http/client.d.ts.map +1 -0
  417. package/dist/transport/{httpClient.js → http/client.js} +96 -105
  418. package/dist/transport/http/client.js.map +1 -0
  419. package/dist/transport/http/helpers.d.ts +10 -0
  420. package/dist/transport/http/helpers.d.ts.map +1 -0
  421. package/dist/transport/http/helpers.js +46 -0
  422. package/dist/transport/http/helpers.js.map +1 -0
  423. package/dist/transport/http/index.d.ts +6 -0
  424. package/dist/transport/http/index.d.ts.map +1 -0
  425. package/dist/transport/http/index.js +6 -0
  426. package/dist/transport/http/index.js.map +1 -0
  427. package/dist/transport/{httpOptions.d.ts → http/options.d.ts} +7 -7
  428. package/dist/transport/{httpOptions.d.ts.map → http/options.d.ts.map} +1 -1
  429. package/dist/transport/{httpOptions.js → http/options.js} +1 -1
  430. package/dist/transport/http/options.js.map +1 -0
  431. package/dist/transport/http/subscription.d.ts +16 -0
  432. package/dist/transport/http/subscription.d.ts.map +1 -0
  433. package/dist/transport/http/subscription.js +146 -0
  434. package/dist/transport/http/subscription.js.map +1 -0
  435. package/dist/transport/{httpTransport.d.ts → http/transport.d.ts} +9 -6
  436. package/dist/transport/http/transport.d.ts.map +1 -0
  437. package/dist/transport/{httpTransport.js → http/transport.js} +153 -188
  438. package/dist/transport/http/transport.js.map +1 -0
  439. package/dist/transport/index.d.ts +8 -0
  440. package/dist/transport/index.d.ts.map +1 -0
  441. package/dist/transport/index.js +8 -0
  442. package/dist/transport/index.js.map +1 -0
  443. package/dist/transport/{commitFrames.d.ts → websocket/commitFrames.d.ts} +8 -20
  444. package/dist/transport/websocket/commitFrames.d.ts.map +1 -0
  445. package/dist/transport/{commitFrames.js → websocket/commitFrames.js} +6 -25
  446. package/dist/transport/websocket/commitFrames.js.map +1 -0
  447. package/dist/transport/{wsFrameHandlers.d.ts → websocket/frameHandlers.d.ts} +5 -5
  448. package/dist/transport/websocket/frameHandlers.d.ts.map +1 -0
  449. package/dist/transport/{wsFrameHandlers.js → websocket/frameHandlers.js} +10 -51
  450. package/dist/transport/websocket/frameHandlers.js.map +1 -0
  451. package/dist/transport/{heartbeat.d.ts → websocket/heartbeat.d.ts} +1 -1
  452. package/dist/transport/websocket/heartbeat.d.ts.map +1 -0
  453. package/dist/transport/{heartbeat.js → websocket/heartbeat.js} +2 -2
  454. package/dist/transport/websocket/heartbeat.js.map +1 -0
  455. package/dist/transport/websocket/index.d.ts +6 -0
  456. package/dist/transport/websocket/index.d.ts.map +1 -0
  457. package/dist/transport/websocket/index.js +6 -0
  458. package/dist/transport/websocket/index.js.map +1 -0
  459. package/dist/transport/{wsTransport.d.ts → websocket/transport.d.ts} +13 -25
  460. package/dist/transport/websocket/transport.d.ts.map +1 -0
  461. package/dist/transport/{wsTransport.js → websocket/transport.js} +14 -14
  462. package/dist/transport/websocket/transport.js.map +1 -0
  463. package/dist/types/index.d.ts +1 -1
  464. package/dist/types/index.d.ts.map +1 -1
  465. package/dist/types/streams.d.ts +8 -48
  466. package/dist/types/streams.d.ts.map +1 -1
  467. package/dist/types/streams.js +2 -2
  468. package/dist/wire/accountResponses.d.ts +4 -72
  469. package/dist/wire/accountResponses.d.ts.map +1 -1
  470. package/dist/wire/accountResponses.js +2 -10
  471. package/dist/wire/accountResponses.js.map +1 -1
  472. package/dist/wire/apiLifecycle.d.ts +63 -0
  473. package/dist/wire/apiLifecycle.d.ts.map +1 -0
  474. package/dist/wire/apiLifecycle.js +89 -0
  475. package/dist/wire/apiLifecycle.js.map +1 -0
  476. package/dist/wire/frames.d.ts +6 -83
  477. package/dist/wire/frames.d.ts.map +1 -1
  478. package/dist/wire/frames.js +4 -11
  479. package/dist/wire/frames.js.map +1 -1
  480. package/dist/wire/inboundFrames.d.ts +6 -131
  481. package/dist/wire/inboundFrames.d.ts.map +1 -1
  482. package/dist/wire/inboundFrames.js +3 -3
  483. package/dist/wire/inboundFrames.js.map +1 -1
  484. package/dist/wire/index.d.ts +20 -15
  485. package/dist/wire/index.d.ts.map +1 -1
  486. package/dist/wire/index.js +22 -8
  487. package/dist/wire/index.js.map +1 -1
  488. package/dist/wire/modelMutations.d.ts +1 -32
  489. package/dist/wire/modelMutations.d.ts.map +1 -1
  490. package/dist/wire/modelMutations.js +1 -8
  491. package/dist/wire/modelMutations.js.map +1 -1
  492. package/dist/wire/rateLimit.d.ts +82 -0
  493. package/dist/wire/rateLimit.d.ts.map +1 -0
  494. package/dist/wire/rateLimit.js +142 -0
  495. package/dist/wire/rateLimit.js.map +1 -0
  496. package/package.json +130 -10
  497. package/src/ai-sdk/modelTools.ts +5 -5
  498. package/src/ai-sdk/updateTool.ts +5 -7
  499. package/src/auth/capability.ts +5 -0
  500. package/src/auth/capabilityLifecycle.ts +1 -1
  501. package/src/auth/credentialPolicy.ts +1 -1
  502. package/src/auth/identity.ts +7 -7
  503. package/src/auth/index.ts +4 -663
  504. package/src/auth/runtime.ts +669 -0
  505. package/src/auth/sessionMint.ts +3 -2
  506. package/src/branches.ts +3 -0
  507. package/src/{coordination/awaitClaimGrant.ts → claims/awaitGrant.ts} +4 -4
  508. package/src/{wire/claims.ts → claims/contract.ts} +1 -1
  509. package/src/{coordination → claims}/events.ts +7 -11
  510. package/src/claims/index.ts +21 -0
  511. package/src/claims/lifetime.ts +78 -0
  512. package/src/{coordination → claims}/locator.ts +3 -3
  513. package/src/claims/routes.ts +81 -0
  514. package/src/{coordination → claims}/trace.ts +5 -5
  515. package/src/{ablo.ts → client/ablo.ts} +8 -20
  516. package/src/{transactionLayer.ts → client/contract.ts} +11 -13
  517. package/src/{headlessClient.ts → client/headless.ts} +13 -15
  518. package/src/client/index.ts +10 -0
  519. package/src/{resources → client/resources}/functionalUpdate.ts +4 -4
  520. package/src/{resources → client/resources}/httpResources.ts +163 -92
  521. package/src/client/resources/modelCreate.ts +73 -0
  522. package/src/{resources → client/resources}/modelOperations.ts +73 -55
  523. package/src/{resources → client/resources}/mutationOptions.ts +4 -17
  524. package/src/{resources → client/resources}/where.ts +1 -1
  525. package/src/{resources → client/resources}/writeOptionsSchema.ts +35 -27
  526. package/src/{transactions → commit}/confirmation/commitEnvelope.ts +2 -12
  527. package/src/{transactions → commit}/confirmation/httpCommitEnvelope.ts +1 -1
  528. package/src/{transactions → commit}/confirmation/pendingWrite.ts +1 -1
  529. package/src/{wire/commit.ts → commit/contract.ts} +27 -26
  530. package/src/{durableWrites.ts → commit/durableWrites.ts} +7 -7
  531. package/src/commit/httpRequest.ts +103 -0
  532. package/src/commit/index.ts +16 -0
  533. package/src/{readSetContext.ts → commit/readSetContext.ts} +24 -43
  534. package/src/{commitRecordRuntime.ts → commit/recordRuntime.ts} +12 -67
  535. package/src/coordination/index.ts +4 -54
  536. package/src/coordination/schema.ts +15 -309
  537. package/src/errorCodes.ts +62 -10
  538. package/src/errors.ts +32 -10
  539. package/src/index.ts +8 -8
  540. package/src/internal/read-set.ts +3 -6
  541. package/src/observability.ts +4 -4
  542. package/src/{wire/delta.ts → observation/contract.ts} +2 -2
  543. package/src/{wire/feedEvent.ts → observation/feedContract.ts} +3 -4
  544. package/src/{transport → observation}/httpFeed.ts +3 -3
  545. package/src/observation/index.ts +12 -0
  546. package/src/{log → observation/persistence}/syncDeltaRow.ts +6 -7
  547. package/src/pricing.ts +46 -25
  548. package/src/schema/audit.ts +121 -0
  549. package/src/schema/ddl.ts +71 -1
  550. package/src/schema/index.ts +20 -20
  551. package/src/schema/model.ts +17 -33
  552. package/src/schema/openapi.ts +170 -9
  553. package/src/schema/roles.ts +53 -0
  554. package/src/schema/schema.ts +91 -6
  555. package/src/schema/serialize.ts +8 -9
  556. package/src/schema/subject.ts +43 -0
  557. package/src/server/adapter.ts +3 -1
  558. package/src/server/commit.ts +6 -14
  559. package/src/server/index.ts +1 -1
  560. package/src/server/readConfig.ts +4 -0
  561. package/src/source/{adapter.ts → adapters/adapter.ts} +9 -5
  562. package/src/source/{adapterFactory.ts → adapters/adapterFactory.ts} +1 -1
  563. package/src/source/{conformance.ts → adapters/conformance.ts} +1 -1
  564. package/src/source/{contract.ts → adapters/contract.ts} +24 -61
  565. package/src/source/adapters/drizzle.ts +75 -29
  566. package/src/source/{idempotency.ts → adapters/idempotency.ts} +2 -2
  567. package/src/source/adapters/index.ts +20 -0
  568. package/src/source/adapters/kysely.ts +77 -27
  569. package/src/source/adapters/kyselyMutationCore.ts +23 -11
  570. package/src/source/adapters/memory.ts +26 -9
  571. package/src/source/adapters/migration.ts +11 -0
  572. package/src/source/{migrations.ts → adapters/migrations.ts} +6 -33
  573. package/src/source/adapters/prisma.ts +98 -34
  574. package/src/source/adapters/subjectAuthorization.ts +182 -0
  575. package/src/source/{connector.ts → connector/client.ts} +35 -12
  576. package/src/source/connector/index.ts +3 -0
  577. package/src/source/{connectorProtocol.ts → connector/protocol.ts} +10 -2
  578. package/src/source/delivery/index.ts +2 -0
  579. package/src/source/{pushQueue.ts → delivery/pushQueue.ts} +2 -2
  580. package/src/source/{factory.ts → endpoint/factory.ts} +150 -9
  581. package/src/source/endpoint/index.ts +4 -0
  582. package/src/source/{next.ts → endpoint/next.ts} +2 -2
  583. package/src/source/{signing.ts → endpoint/signing.ts} +1 -1
  584. package/src/source/index.ts +27 -18
  585. package/src/source/outbox/contract.ts +56 -0
  586. package/src/source/outbox/envelope.ts +47 -0
  587. package/src/source/outbox/index.ts +15 -0
  588. package/src/source/outbox/migrations.ts +71 -0
  589. package/src/source/outbox/retention.ts +2 -0
  590. package/src/source/types.ts +64 -10
  591. package/src/syncLog/contract.ts +19 -9
  592. package/src/testing/fixtures/httpResponses.ts +7 -0
  593. package/src/transport/{credentialLifecycle.ts → connection/credentialLifecycle.ts} +3 -3
  594. package/src/transport/connection/index.ts +4 -0
  595. package/src/transport/{connectionManager.ts → connection/manager.ts} +13 -4
  596. package/src/transport/{networkProbe.ts → connection/networkProbe.ts} +4 -4
  597. package/src/transport/{httpClient.ts → http/client.ts} +165 -184
  598. package/src/transport/http/helpers.ts +63 -0
  599. package/src/transport/http/index.ts +5 -0
  600. package/src/transport/{httpOptions.ts → http/options.ts} +6 -6
  601. package/src/transport/http/subscription.ts +174 -0
  602. package/src/transport/{httpTransport.ts → http/transport.ts} +210 -246
  603. package/src/transport/index.ts +7 -0
  604. package/src/transport/{commitFrames.ts → websocket/commitFrames.ts} +14 -46
  605. package/src/transport/{wsFrameHandlers.ts → websocket/frameHandlers.ts} +11 -54
  606. package/src/transport/{heartbeat.ts → websocket/heartbeat.ts} +2 -2
  607. package/src/transport/websocket/index.ts +5 -0
  608. package/src/transport/{wsTransport.ts → websocket/transport.ts} +16 -30
  609. package/src/types/index.ts +2 -6
  610. package/src/types/streams.ts +7 -61
  611. package/src/webhooks/events.ts +1 -1
  612. package/src/wire/accountResponses.ts +3 -12
  613. package/src/wire/apiLifecycle.ts +94 -0
  614. package/src/wire/frames.ts +5 -15
  615. package/src/wire/inboundFrames.ts +3 -3
  616. package/src/wire/index.ts +50 -15
  617. package/src/wire/modelMutations.ts +1 -14
  618. package/src/wire/rateLimit.ts +155 -0
  619. package/dist/ablo.d.ts.map +0 -1
  620. package/dist/ablo.js.map +0 -1
  621. package/dist/commitRecordRuntime.d.ts.map +0 -1
  622. package/dist/commitRecordRuntime.js.map +0 -1
  623. package/dist/coordination/awaitClaimGrant.d.ts.map +0 -1
  624. package/dist/coordination/awaitClaimGrant.js.map +0 -1
  625. package/dist/coordination/claimHeartbeatLoop.d.ts.map +0 -1
  626. package/dist/coordination/claimHeartbeatLoop.js.map +0 -1
  627. package/dist/coordination/claimMeta.d.ts.map +0 -1
  628. package/dist/coordination/claimMeta.js.map +0 -1
  629. package/dist/coordination/events.d.ts.map +0 -1
  630. package/dist/coordination/events.js +0 -8
  631. package/dist/coordination/events.js.map +0 -1
  632. package/dist/coordination/locator.d.ts.map +0 -1
  633. package/dist/coordination/locator.js.map +0 -1
  634. package/dist/coordination/targetConflict.d.ts.map +0 -1
  635. package/dist/coordination/targetConflict.js.map +0 -1
  636. package/dist/coordination/trace.d.ts.map +0 -1
  637. package/dist/coordination/trace.js.map +0 -1
  638. package/dist/durableWrites.d.ts.map +0 -1
  639. package/dist/durableWrites.js.map +0 -1
  640. package/dist/headlessClient.d.ts.map +0 -1
  641. package/dist/log/syncDeltaRow.d.ts.map +0 -1
  642. package/dist/log/syncDeltaRow.js.map +0 -1
  643. package/dist/policy/types.d.ts +0 -226
  644. package/dist/policy/types.d.ts.map +0 -1
  645. package/dist/policy/types.js +0 -127
  646. package/dist/policy/types.js.map +0 -1
  647. package/dist/readSetContext.d.ts.map +0 -1
  648. package/dist/readSetContext.js.map +0 -1
  649. package/dist/resources/functionalUpdate.d.ts.map +0 -1
  650. package/dist/resources/functionalUpdate.js.map +0 -1
  651. package/dist/resources/httpResources.d.ts.map +0 -1
  652. package/dist/resources/httpResources.js +0 -17
  653. package/dist/resources/httpResources.js.map +0 -1
  654. package/dist/resources/modelOperations.d.ts.map +0 -1
  655. package/dist/resources/modelOperations.js.map +0 -1
  656. package/dist/resources/mutationOptions.d.ts.map +0 -1
  657. package/dist/resources/mutationOptions.js.map +0 -1
  658. package/dist/resources/where.d.ts.map +0 -1
  659. package/dist/resources/where.js.map +0 -1
  660. package/dist/resources/writeOptionsSchema.d.ts.map +0 -1
  661. package/dist/resources/writeOptionsSchema.js.map +0 -1
  662. package/dist/schema/coordination.d.ts +0 -113
  663. package/dist/schema/coordination.d.ts.map +0 -1
  664. package/dist/schema/coordination.js +0 -134
  665. package/dist/schema/coordination.js.map +0 -1
  666. package/dist/source/adapter.d.ts.map +0 -1
  667. package/dist/source/adapter.js.map +0 -1
  668. package/dist/source/adapterFactory.d.ts.map +0 -1
  669. package/dist/source/adapterFactory.js.map +0 -1
  670. package/dist/source/adapterProfile.d.ts.map +0 -1
  671. package/dist/source/adapterProfile.js.map +0 -1
  672. package/dist/source/conformance.d.ts.map +0 -1
  673. package/dist/source/conformance.js.map +0 -1
  674. package/dist/source/connector.d.ts.map +0 -1
  675. package/dist/source/connector.js.map +0 -1
  676. package/dist/source/connectorProtocol.d.ts.map +0 -1
  677. package/dist/source/connectorProtocol.js.map +0 -1
  678. package/dist/source/contract.d.ts.map +0 -1
  679. package/dist/source/contract.js.map +0 -1
  680. package/dist/source/drizzle.d.ts +0 -2
  681. package/dist/source/drizzle.d.ts.map +0 -1
  682. package/dist/source/drizzle.js +0 -2
  683. package/dist/source/drizzle.js.map +0 -1
  684. package/dist/source/factory.d.ts.map +0 -1
  685. package/dist/source/factory.js.map +0 -1
  686. package/dist/source/idempotency.d.ts.map +0 -1
  687. package/dist/source/idempotency.js.map +0 -1
  688. package/dist/source/kysely.d.ts +0 -3
  689. package/dist/source/kysely.d.ts.map +0 -1
  690. package/dist/source/kysely.js +0 -3
  691. package/dist/source/kysely.js.map +0 -1
  692. package/dist/source/migrations.d.ts.map +0 -1
  693. package/dist/source/migrations.js.map +0 -1
  694. package/dist/source/next.d.ts.map +0 -1
  695. package/dist/source/next.js.map +0 -1
  696. package/dist/source/pushQueue.d.ts.map +0 -1
  697. package/dist/source/pushQueue.js.map +0 -1
  698. package/dist/source/signing.d.ts.map +0 -1
  699. package/dist/source/signing.js.map +0 -1
  700. package/dist/transactionLayer.d.ts.map +0 -1
  701. package/dist/transactionLayer.js.map +0 -1
  702. package/dist/transactions/confirmation/commitEnvelope.d.ts.map +0 -1
  703. package/dist/transactions/confirmation/commitEnvelope.js.map +0 -1
  704. package/dist/transactions/confirmation/httpCommitEnvelope.d.ts.map +0 -1
  705. package/dist/transactions/confirmation/httpCommitEnvelope.js.map +0 -1
  706. package/dist/transactions/confirmation/idempotencyKey.d.ts.map +0 -1
  707. package/dist/transactions/confirmation/idempotencyKey.js.map +0 -1
  708. package/dist/transactions/confirmation/pendingWrite.d.ts.map +0 -1
  709. package/dist/transactions/confirmation/pendingWrite.js.map +0 -1
  710. package/dist/transport/commitFrames.d.ts.map +0 -1
  711. package/dist/transport/commitFrames.js.map +0 -1
  712. package/dist/transport/connectionManager.d.ts.map +0 -1
  713. package/dist/transport/connectionManager.js.map +0 -1
  714. package/dist/transport/credentialLifecycle.d.ts.map +0 -1
  715. package/dist/transport/credentialLifecycle.js.map +0 -1
  716. package/dist/transport/heartbeat.d.ts.map +0 -1
  717. package/dist/transport/heartbeat.js.map +0 -1
  718. package/dist/transport/httpClient.d.ts.map +0 -1
  719. package/dist/transport/httpClient.js.map +0 -1
  720. package/dist/transport/httpFeed.d.ts +0 -4
  721. package/dist/transport/httpFeed.d.ts.map +0 -1
  722. package/dist/transport/httpOptions.js.map +0 -1
  723. package/dist/transport/httpTransport.d.ts.map +0 -1
  724. package/dist/transport/httpTransport.js.map +0 -1
  725. package/dist/transport/networkProbe.d.ts.map +0 -1
  726. package/dist/transport/networkProbe.js.map +0 -1
  727. package/dist/transport/wsFrameHandlers.d.ts.map +0 -1
  728. package/dist/transport/wsFrameHandlers.js.map +0 -1
  729. package/dist/transport/wsTransport.d.ts.map +0 -1
  730. package/dist/transport/wsTransport.js.map +0 -1
  731. package/dist/wire/claimEvent.d.ts.map +0 -1
  732. package/dist/wire/claimEvent.js.map +0 -1
  733. package/dist/wire/claims.d.ts.map +0 -1
  734. package/dist/wire/claims.js.map +0 -1
  735. package/dist/wire/commit.d.ts +0 -2801
  736. package/dist/wire/commit.d.ts.map +0 -1
  737. package/dist/wire/commit.js.map +0 -1
  738. package/dist/wire/delta.d.ts.map +0 -1
  739. package/dist/wire/delta.js.map +0 -1
  740. package/dist/wire/deltaDelivery.d.ts.map +0 -1
  741. package/dist/wire/deltaDelivery.js.map +0 -1
  742. package/dist/wire/feedCursor.d.ts.map +0 -1
  743. package/dist/wire/feedCursor.js.map +0 -1
  744. package/dist/wire/feedEvent.d.ts.map +0 -1
  745. package/dist/wire/feedEvent.js.map +0 -1
  746. package/src/policy/types.ts +0 -300
  747. package/src/schema/coordination.ts +0 -161
  748. package/src/source/drizzle.ts +0 -1
  749. package/src/source/kysely.ts +0 -2
  750. /package/dist/{coordination → claims}/targetConflict.d.ts +0 -0
  751. /package/dist/{coordination → claims}/targetConflict.js +0 -0
  752. /package/dist/{resources → client/resources}/mutationOptions.js +0 -0
  753. /package/dist/{resources → client/resources}/where.d.ts +0 -0
  754. /package/dist/{transactions → commit}/confirmation/httpCommitEnvelope.d.ts +0 -0
  755. /package/dist/{transactions → commit}/confirmation/idempotencyKey.d.ts +0 -0
  756. /package/dist/{transactions → commit}/confirmation/idempotencyKey.js +0 -0
  757. /package/dist/source/{adapter.js → adapters/adapter.js} +0 -0
  758. /package/dist/source/{adapterFactory.d.ts → adapters/adapterFactory.d.ts} +0 -0
  759. /package/dist/source/{adapterProfile.d.ts → adapters/adapterProfile.d.ts} +0 -0
  760. /package/dist/source/{adapterProfile.js → adapters/adapterProfile.js} +0 -0
  761. /package/dist/source/{idempotency.d.ts → adapters/idempotency.d.ts} +0 -0
  762. /package/src/{wire/claimEvent.ts → claims/eventContract.ts} +0 -0
  763. /package/src/{coordination/claimHeartbeatLoop.ts → claims/heartbeat.ts} +0 -0
  764. /package/src/{coordination/claimMeta.ts → claims/meta.ts} +0 -0
  765. /package/src/{coordination → claims}/targetConflict.ts +0 -0
  766. /package/src/{transactions → commit}/confirmation/idempotencyKey.ts +0 -0
  767. /package/src/{wire/feedCursor.ts → observation/cursor.ts} +0 -0
  768. /package/src/{wire/deltaDelivery.ts → observation/deliveryContract.ts} +0 -0
  769. /package/src/source/{adapterProfile.ts → adapters/adapterProfile.ts} +0 -0
@@ -7,11 +7,9 @@
7
7
 
8
8
  import type {
9
9
  ClaimHeartbeatAckPayload,
10
- OnStaleMode,
11
10
  ReadDependency,
12
- TrackDependency,
13
- } from '../coordination/schema.js';
14
- import type { ClaimHeartbeatReply, ClaimState } from '../wire/claims.js';
11
+ } from '../../coordination/schema.js';
12
+ import type { ClaimHeartbeatReply, ClaimState } from '../../claims/contract.js';
15
13
  import type {
16
14
  ClientCommitReceipt,
17
15
  CommitWait,
@@ -19,10 +17,13 @@ import type {
19
17
  CommitRecordList,
20
18
  CommitRecordListOptions,
21
19
  CommitRecordWhere,
22
- } from '../wire/commit.js';
23
- import type { LogListResponse, LogQuery } from '../wire/feedEvent.js';
24
- import type { ModelListEvidence } from '../wire/modelResponses.js';
25
- // Re-exported, not redeclared. `wire/commit.ts` owns the commit-status vocabulary
20
+ CommitOperationBody,
21
+ ModelOperationAction,
22
+ } from '../../commit/contract.js';
23
+ import type { LogListResponse, LogQuery } from '../../observation/feedContract.js';
24
+ import type { ModelListEvidence } from '../../wire/modelResponses.js';
25
+ import { AbloValidationError } from '../../errors.js';
26
+ // Re-exported, not redeclared. `commit/contract.ts` owns the commit-status vocabulary
26
27
  // and derives the waitable subset from it; this module serves that name to SDK
27
28
  // consumers. Restating the subset here as its own union produced a type that
28
29
  // matched the canonical one only by both happening to list the same two
@@ -33,36 +34,34 @@ export type { CommitWait };
33
34
  // claim view) are defined in `../coordination/schema`, derived from a single
34
35
  // schema so the client, the HTTP client, and the server share one definition.
35
36
  // They are re-exported here so the resource types live behind one import.
36
- import type { ModelTarget, ModelClaim } from '../coordination/schema.js';
37
+ import type { ModelTarget, ModelClaim } from '../../coordination/schema.js';
37
38
  export type { ModelTarget, ModelClaim };
38
- import type { ResolveClaimMeta } from '../types/global.js';
39
- import type { ParticipantKind } from '../types/participant.js';
40
- import type { SchemaRecord } from '../schema/schema.js';
41
- import type { SyncGroupInput } from '../schema/roles.js';
39
+ import type { ResolveClaimMeta } from '../../types/global.js';
40
+ import type { ParticipantKind } from '../../types/participant.js';
41
+ import type { SchemaRecord } from '../../schema/schema.js';
42
+ import type { SyncGroupInput } from '../../schema/roles.js';
42
43
  // The capability vocabulary — `auth/capability.ts` owns what a grant is on both
43
44
  // axes, and these params are the surface a developer declares it through.
44
45
  import type {
45
46
  CapabilityCan,
46
47
  CapabilityOperation,
47
48
  EffectiveAuthority,
48
- } from '../auth/capability.js';
49
+ } from '../../auth/capability.js';
49
50
  import type {
50
51
  Claim,
51
52
  ClaimStream,
52
53
  ClaimWaitOptions,
53
54
  Duration,
54
55
  HeldClaim,
55
- } from '../types/streams.js';
56
+ } from '../../types/streams.js';
56
57
  import type { ModelUpdater, FunctionalUpdateOptions } from './functionalUpdate.js';
57
58
  import type {
58
59
  ClaimOptions,
59
60
  ClaimAttemptEvent,
60
- ClaimParams,
61
- ClaimSkipParams,
61
+ ClaimCall,
62
62
  ClaimReadApi,
63
63
  AwaitedClaimMethod,
64
- ModelTrackParams,
65
- ModelTrackResult,
64
+ ModelCreateManyParams,
66
65
  ServerReadOptions,
67
66
  } from './modelOperations.js';
68
67
 
@@ -70,19 +69,15 @@ import type {
70
69
 
71
70
  /**
72
71
  * The operations available on each model in the sync engine:
73
- * `get({ id })` — an async single-row server read
72
+ * `get({ id })` — an observational async single-row server read
73
+ * `read({ id })` — an async single-row server read that may guard a write
74
74
  * `list({ where })` — an async collection server read
75
75
  * `local.get(id)` / `local.list(...)` / `local.count(...)` — synchronous local reads
76
76
  * `create({ data })` / `update({ id, data })` / `delete({ id })` — writes
77
77
  * `claim({ id })` — a durable claim handle for coordinated writes
78
78
  */
79
79
 
80
- export type ModelOperationAction =
81
- | 'create'
82
- | 'update'
83
- | 'delete'
84
- | 'archive'
85
- | 'unarchive';
80
+ export type { ModelOperationAction };
86
81
 
87
82
 
88
83
  /** @internal Transport envelope; the public typed client returns the row. */
@@ -130,20 +125,119 @@ export interface HttpTransportList<T = Record<string, unknown>> {
130
125
  * and a complete one the same value, so the caller with 500 matching rows got
131
126
  * 20 and no way to find out.
132
127
  */
133
- export type ModelList<T> = T[] & Pick<HttpTransportList<T>, 'hasMore' | 'nextCursor'>;
128
+ export type ModelList<T> = T[] & Pick<HttpTransportList<T>, 'hasMore' | 'nextCursor'> &
129
+ AsyncIterable<T>;
134
130
 
135
131
  /**
136
- * Attach the page state to the rows. Non-enumerable so the result stays
137
- * indistinguishable from a plain array everywhere the properties aren't read.
132
+ * How far a `for await` over a list will walk before it gives up.
133
+ *
134
+ * A cursor that stops advancing would otherwise spin forever. The bound is
135
+ * high enough that no real collection reaches it and low enough that a broken
136
+ * server is a failed read rather than a hung process.
137
+ */
138
+ const AUTO_PAGE_LIMIT = 10_000;
139
+ const LIST_ALL_PAGE_LIMIT = 100;
140
+
141
+ const nextPageFor = new WeakMap<object, (cursor: string) => Promise<ModelList<unknown>>>();
142
+
143
+ export interface ModelListWalkOptions {
144
+ readonly maxPages?: number;
145
+ readonly signal?: AbortSignal;
146
+ }
147
+
148
+ async function* walkModelList<T>(
149
+ first: ModelList<T>,
150
+ options: ModelListWalkOptions = {},
151
+ ): AsyncGenerator<T> {
152
+ const maxPages = options.maxPages ?? AUTO_PAGE_LIMIT;
153
+ if (!Number.isInteger(maxPages) || maxPages < 1) {
154
+ throw new AbloValidationError('maxPages must be a positive integer.', {
155
+ code: 'invalid_options',
156
+ param: 'maxPages',
157
+ });
158
+ }
159
+
160
+ let current = first;
161
+ for (let visited = 0; visited < maxPages; visited += 1) {
162
+ options.signal?.throwIfAborted();
163
+ for (let i = 0; i < current.length; i += 1) {
164
+ options.signal?.throwIfAborted();
165
+ yield current[i] as T;
166
+ }
167
+ const cursor = current.nextCursor;
168
+ const fetchNext = nextPageFor.get(current) as
169
+ | ((nextCursor: string) => Promise<ModelList<T>>)
170
+ | undefined;
171
+ if (!current.hasMore || cursor === null || fetchNext === undefined) return;
172
+ const next = await fetchNext(cursor);
173
+ if (next.nextCursor === cursor) {
174
+ throw new AbloValidationError(
175
+ `Walking this list received the same continuation cursor twice (${JSON.stringify(cursor)}). ` +
176
+ 'The collection may be incomplete, so traversal stopped with an error.',
177
+ { code: 'malformed_response', param: 'nextCursor' },
178
+ );
179
+ }
180
+ current = next;
181
+ }
182
+ throw new AbloValidationError(
183
+ `Walking this list passed ${maxPages} pages without reaching the end. ` +
184
+ `Narrow the read with \`where\` or raise \`maxPages\` deliberately.`,
185
+ { code: 'invalid_options', param: 'maxPages' },
186
+ );
187
+ }
188
+
189
+ /** Collect a complete list through the same guarded cursor loop as async iteration. */
190
+ export async function collectModelList<T>(
191
+ first: ModelList<T>,
192
+ options: ModelListWalkOptions = {},
193
+ ): Promise<T[]> {
194
+ const rows: T[] = [];
195
+ for await (const row of walkModelList(first, {
196
+ maxPages: options.maxPages ?? LIST_ALL_PAGE_LIMIT,
197
+ signal: options.signal,
198
+ })) rows.push(row);
199
+ return rows;
200
+ }
201
+
202
+ /**
203
+ * Attach the page state to the rows, and make the list walk its own pages.
204
+ *
205
+ * `hasMore` and `nextCursor` are non-enumerable, so the result stays
206
+ * indistinguishable from a plain array everywhere they are not read: it maps,
207
+ * filters, spreads, and `JSON.stringify`s exactly as the rows always did.
208
+ *
209
+ * The async iterator is the answer to the question that shape raises. A list
210
+ * read is a page — the server applies a default size and caps the largest —
211
+ * and a page of 20 looks precisely like a complete answer of 20, so every
212
+ * caller either checked `hasMore` or, far more often, reasoned about a
213
+ * truncated set without knowing it. Hand-rolled page walkers were the common
214
+ * result, and each one re-derived the same cursor loop and the same
215
+ * non-advancing-cursor guard.
216
+ *
217
+ * So iterate the value to get the page, and `for await` it to get the
218
+ * collection:
219
+ *
220
+ * ```ts
221
+ * const page = await ablo.issue.list({ where: { teamId } });
222
+ * for (const issue of page) … // the 20 rows that came back
223
+ * for await (const issue of page) … // every issue, paged as it goes
224
+ * ```
138
225
  */
139
226
  export function modelList<T>(
140
227
  rows: readonly T[],
141
228
  page: Pick<HttpTransportList<unknown>, 'hasMore' | 'nextCursor'>,
229
+ /** Reads the page after `cursor`. Omitted where no transport can follow. */
230
+ fetchNext?: (cursor: string) => Promise<ModelList<T>>,
142
231
  ): ModelList<T> {
143
- return Object.defineProperties([...rows], {
232
+ const list = Object.defineProperties([...rows], {
144
233
  hasMore: { value: page.hasMore, enumerable: false },
145
234
  nextCursor: { value: page.nextCursor, enumerable: false },
235
+ [Symbol.asyncIterator]: { value: () => walkModelList(list), enumerable: false },
146
236
  }) as ModelList<T>;
237
+ if (fetchNext) {
238
+ nextPageFor.set(list, fetchNext as (cursor: string) => Promise<ModelList<unknown>>);
239
+ }
240
+ return list;
147
241
  }
148
242
 
149
243
  export type IfClaimedPolicy = 'return' | 'fail';
@@ -158,7 +252,7 @@ export interface ClaimedOptions {
158
252
  readonly ifClaimed?: IfClaimedPolicy;
159
253
  }
160
254
 
161
- export type { ClaimWaitOptions } from '../types/streams.js';
255
+ export type { ClaimWaitOptions } from '../../types/streams.js';
162
256
 
163
257
  export interface ModelReadOptions extends ClaimedOptions {}
164
258
 
@@ -206,35 +300,22 @@ export interface ClaimCreateOptions {
206
300
  readonly onStatus?: (event: ClaimAttemptEvent) => void;
207
301
  }
208
302
 
209
- export interface CommitOperationInput {
210
- readonly action: ModelOperationAction;
211
- /** The model name — matches `ablo.<model>` and the schema's `model()`. */
212
- readonly model: string;
213
- readonly id?: string | null;
214
- readonly data?: Record<string, unknown> | null;
215
- readonly where?: Record<string, unknown> | null;
216
- readonly transactionId?: string | null;
217
- /** Claim identity derived from a held claim; not an application id. */
218
- readonly claimId?: string | null;
219
- readonly readAt?: number | null;
220
- readonly onStale?: OnStaleMode | null;
221
- /** Fencing token (Option B) from the batch's claim handle; server-validated. */
222
- readonly fenceToken?: number | null;
223
- }
303
+ /** Public commit operation inferred from the canonical request-body schema. */
304
+ export type CommitOperationInput = CommitOperationBody;
305
+
306
+ export type CommitClaim = Omit<Claim<unknown>, 'data'>;
224
307
 
225
- export interface CommitCreateOptions {
308
+ export interface CommitCreateOptions<Read = ReadDependency> {
226
309
  readonly idempotencyKey?: string | null;
227
310
  readonly readAt?: number | null;
228
- readonly onStale?: OnStaleMode | null;
229
311
  /**
230
312
  * A claim handle from `ablo.<model>.claim({ id })` (or the HTTP claim
231
313
  * surface). Same vocabulary as the per-model writes: the handle's
232
- * snapshot watermark becomes the batch `readAt` default and `onStale`
233
- * defaults to `'reject'`, so a commit that follows a claim is guarded
314
+ * snapshot watermark becomes the batch `readAt` default, so a commit that follows a claim is guarded
234
315
  * against concurrent edits without re-stating the watermark by hand.
235
- * Explicit `readAt`/`onStale` on the options win.
316
+ * An explicit `readAt` on the options wins.
236
317
  */
237
- readonly claim?: Claim | null;
318
+ readonly claim?: CommitClaim | null;
238
319
  /** One atomic batch. Use a one-element array for a single operation. */
239
320
  readonly operations: readonly CommitOperationInput[];
240
321
  readonly wait?: CommitWait;
@@ -242,27 +323,17 @@ export interface CommitCreateOptions {
242
323
  * The batch premise — the "did anything I looked at change?" guard.
243
324
  * Declare the rows (`{ model, id, readAt, fields? }`) or sync groups
244
325
  * (`{ group, readAt }`, for example `report:abc`) this batch was premised on; the
245
- * server checks that none moved since `readAt` and fires the entry's `onStale`
246
- * over the batch. This is distinct from the write-target `readAt`: it guards what
326
+ * server rejects the batch if any moved since `readAt`. This is distinct from the write-target `readAt`: it guards what
247
327
  * you read, not what you write.
248
328
  */
249
- readonly reads?: readonly ReadDependency[] | null;
250
- /**
251
- * Durable premises to register as part of this batch — the persisted
252
- * sibling of `reads`. Where `reads` guards only this commit, a `track` entry
253
- * (`{ model, id, readAt? }` for a row or `{ group, readAt? }` for a sync group)
254
- * lives on past it: a later matching change rides back on a future receipt's
255
- * `notifications`. A track-only batch (just `track`, an empty `operations`) is
256
- * the batch form of `ablo.<model>.track()`.
257
- */
258
- readonly track?: readonly TrackDependency[] | null;
329
+ readonly reads?: readonly Read[] | null;
259
330
  }
260
331
 
261
332
  /** Public projection inferred from the canonical runtime schema. */
262
333
  export type CommitReceipt = ClientCommitReceipt;
263
334
 
264
- export interface CommitResource {
265
- create(options: CommitCreateOptions): Promise<CommitReceipt>;
335
+ export interface CommitResource<Read = ReadDependency> {
336
+ create(options: CommitCreateOptions<Read>): Promise<CommitReceipt>;
266
337
  get(options: { readonly id: string }): Promise<CommitRecord | null>;
267
338
  list(options?: CommitRecordListOptions): Promise<CommitRecordList>;
268
339
  }
@@ -330,15 +401,16 @@ export interface HttpClaimsResource {
330
401
  }
331
402
 
332
403
  export interface ModelMutationOptions extends ClaimedOptions {
333
- readonly claimRef?: string | { readonly id: string } | null;
334
404
  readonly idempotencyKey?: string | null;
335
- readonly readAt?: number | null;
336
- readonly onStale?: OnStaleMode | null;
337
405
  /** Commit-lifetime read dependencies checked before this mutation lands. */
338
406
  readonly reads?: readonly ReadDependency[] | null;
339
- /** Persisted read dependencies registered by this mutation. */
340
- readonly track?: readonly TrackDependency[] | null;
341
407
  readonly claim?: Claim | ClaimOptions | null;
408
+ }
409
+
410
+ /** Internal fields derived from a claim or functional update, never authored on a model write. */
411
+ export interface InternalModelMutationOptions extends ModelMutationOptions {
412
+ readonly claimRef?: string | { readonly id: string } | null;
413
+ readonly readAt?: number | null;
342
414
  /** Fencing token (Option B) from the claim; server-validated at commit. */
343
415
  readonly fenceToken?: number | null;
344
416
  }
@@ -349,7 +421,7 @@ export interface ModelMutationOptions extends ClaimedOptions {
349
421
  * namespace for multi-step handles and coordination screens.
350
422
  *
351
423
  * It is the same surface as the reactive claim API, but because every read is a
352
- * server round-trip, `state`, `queue`, and `reorder` are awaited here. The
424
+ * server round-trip, `state`, `list`, `queue`, and `reorder` are awaited here. The
353
425
  * WebSocket client resolves those synchronously from its local cache, which is what
354
426
  * lets it read a claim's state inside a React render; a stateless client has no
355
427
  * cache to read, so the promise is unavoidable.
@@ -357,19 +429,14 @@ export interface ModelMutationOptions extends ClaimedOptions {
357
429
  * It is derived from `ClaimReadApi` through {@link AwaitedClaimMethod} so the two
358
430
  * transports cannot drift: the only difference is the promise wrapper that
359
431
  * statelessness forces. `claim({ id })` is identical on both (already async);
360
- * `state`, `queue`, `reorder`, and `release` are the awaited form.
432
+ * `state`, `list`, `queue`, `reorder`, and `release` are the awaited form.
361
433
  */
362
434
  export type HttpClaimApi<
363
435
  T = Record<string, unknown>,
364
436
  Fields = T,
365
- > =
366
- // The try-claim first: `queue: false` resolves `null` on a held target —
367
- // an expected outcome, not an error — while the queued default always
368
- // resolves a held claim or rejects with a queue error.
369
- ((params: ClaimSkipParams<Fields>) => Promise<HeldClaim<T> | null>) &
370
- ((params: ClaimParams<Fields>) => Promise<HeldClaim<T>>) & {
371
- [K in keyof ClaimReadApi<T>]: AwaitedClaimMethod<ClaimReadApi<T>[K]>;
372
- };
437
+ > = ClaimCall<T, Fields> & {
438
+ [K in keyof ClaimReadApi<T>]: AwaitedClaimMethod<ClaimReadApi<T>[K]>;
439
+ };
373
440
 
374
441
  /** @internal String-keyed model routing owned by the private HTTP transport. */
375
442
  export interface HttpTransportModel<
@@ -385,10 +452,7 @@ export interface HttpTransportModel<
385
452
  *
386
453
  * Public callers never see this shape; `createAbloHttpClient` unwraps it.
387
454
  */
388
- /** Canonical point lookup for the schema-agnostic transport. */
389
- get(params: ModelReadOptions & { readonly id: string }): Promise<HttpTransportRead<T>>;
390
- /** @deprecated Use `get({ id })`; retained for the private transport compatibility seam. */
391
- retrieve(params: ModelReadOptions & { readonly id: string }): Promise<HttpTransportRead<T>>;
455
+ read(params: ModelReadOptions & { readonly id: string }): Promise<HttpTransportRead<T>>;
392
456
  /**
393
457
  * Collection read over HTTP (server round-trip). Equality `where`, `orderBy`,
394
458
  * and `limit`. The typed public client always exposes `ablo.<model>.list`;
@@ -402,6 +466,12 @@ export interface HttpTransportModel<
402
466
  * returned, not the input.
403
467
  */
404
468
  create(params: ModelMutationOptions & { readonly data: Record<string, unknown>; readonly id?: string | null }): Promise<T>;
469
+ /**
470
+ * Creates many rows as one atomic commit and returns them, in the caller's
471
+ * order. One rejected row declines the batch. The rows are the server's own,
472
+ * carried back on the commit rather than read again afterwards.
473
+ */
474
+ createMany(params: ModelCreateManyParams<Record<string, unknown>>): Promise<T[]>;
405
475
  update(params: ModelMutationOptions & { readonly id: string; readonly data: Record<string, unknown> }): Promise<CommitReceipt>;
406
476
  /**
407
477
  * Update under contention with a function of the latest state —
@@ -425,13 +495,6 @@ export interface HttpTransportModel<
425
495
  * schema-agnostic shape stays inside the HTTP transport.
426
496
  */
427
497
  claim: HttpClaimApi<T, Fields>;
428
- /**
429
- * Registers a durable premise on a row — request/response, no socket. A track
430
- * declares what a caller is watching; it keeps no local copy of the row, so it
431
- * belongs to every transport rather than to the reactive client (ADR 0013 §4).
432
- * The typed public clients expose it as `ablo.<model>.track`.
433
- */
434
- track(params: ModelTrackParams): Promise<ModelTrackResult>;
435
498
  }
436
499
 
437
500
  /** A single data operation a scoped **agent** session may perform on a model.
@@ -480,6 +543,11 @@ export interface CreateUserSessionParams<S extends SchemaRecord> {
480
543
  export interface CreateAgentSessionParams<S extends SchemaRecord> {
481
544
  /** Your agent. `id` becomes the token's `participantId`. */
482
545
  agent: { id: string };
546
+ /** The authenticated person who started this agent run. The backend holding
547
+ * the secret key attests this identity, and every resulting delta records
548
+ * the agent as actor plus this user as `onBehalfOf`. Persist the user id on
549
+ * durable work before enqueueing it so a later worker can supply it here. */
550
+ onBehalfOf?: { readonly user: { readonly id: string } };
483
551
  /** Per-model operation allowlist, typed against the schema's model names. */
484
552
  can: CapabilityCan<S>;
485
553
  /** Sync groups this session may subscribe to — typed (`'default'` or
@@ -512,6 +580,9 @@ export interface CreateAgentClientParams<S extends SchemaRecord> {
512
580
  * Pass a stable string only when one logical agent must re-attach to its own
513
581
  * held claims across reconnects or restarts. */
514
582
  id?: string;
583
+ /** The authenticated person who started this run. Preserving it on durable
584
+ * work and supplying it here gives every write dual-principal attribution. */
585
+ onBehalfOf?: { readonly user: { readonly id: string } };
515
586
  /** A human-readable label for logs and attribution (carried in `userMeta.name`).
516
587
  * It is independent of `id`: two agents that share a `name` still receive
517
588
  * distinct ids and coordinate as separate participants — `name` never derives or
@@ -0,0 +1,73 @@
1
+ /** Canonical create identity and result correlation shared by every client. */
2
+
3
+ import { v5 as uuidv5 } from 'uuid';
4
+ import { AbloConnectionError } from '../../errors.js';
5
+ import type { CommitOperationResult } from '../../commit/contract.js';
6
+
7
+ /** Resolve the two supported single-create id spellings. The sibling wins. */
8
+ export function resolveCreateId(
9
+ explicitId: string | null | undefined,
10
+ data: unknown,
11
+ ): string | undefined {
12
+ if (typeof explicitId === 'string' && explicitId.length > 0) return explicitId;
13
+ const inData =
14
+ typeof data === 'object' && data !== null
15
+ ? (data as { readonly id?: unknown }).id
16
+ : undefined;
17
+ return typeof inData === 'string' && inData.length > 0 ? inData : undefined;
18
+ }
19
+
20
+ /** Stable across transports and client instances when an idempotency key is supplied. */
21
+ export function createModelId(
22
+ modelName: string,
23
+ idempotencyKey?: string | null,
24
+ ): string {
25
+ if (idempotencyKey) {
26
+ return uuidv5(
27
+ `${modelName}:${idempotencyKey}`,
28
+ 'aa4ba6d4-bf0b-5b38-9c45-116f79a6e548',
29
+ );
30
+ }
31
+ return typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function'
32
+ ? crypto.randomUUID()
33
+ : `id_${Date.now()}_${Math.random().toString(36).slice(2, 10)}`;
34
+ }
35
+
36
+ /**
37
+ * Return server-authored create rows in input order.
38
+ *
39
+ * Fresh receipts carry operationResults. Durable idempotency replays redact
40
+ * row data, so that path verifies every expected id with a point read. It may
41
+ * fail under a write-only policy, but it can never report a partial collection
42
+ * as success.
43
+ */
44
+ export async function resolveCreatedRows<T>(input: {
45
+ readonly modelName: string;
46
+ readonly ids: readonly string[];
47
+ readonly operationResults?: readonly CommitOperationResult[];
48
+ readonly readRow: (id: string) => Promise<T | undefined>;
49
+ }): Promise<T[]> {
50
+ if (input.operationResults?.length === input.ids.length) {
51
+ const byId = new Map(
52
+ input.operationResults.map((result) => [
53
+ (result.row as { readonly id?: unknown }).id,
54
+ result.row,
55
+ ]),
56
+ );
57
+ const ordered = input.ids.map((id) => byId.get(id));
58
+ if (ordered.every((row): row is Record<string, unknown> => row !== undefined)) {
59
+ return ordered as T[];
60
+ }
61
+ }
62
+
63
+ const rows = await Promise.all(input.ids.map((id) => input.readRow(id)));
64
+ const missing = input.ids.filter((_id, index) => rows[index] === undefined);
65
+ if (missing.length > 0) {
66
+ throw new AbloConnectionError(
67
+ `${input.modelName} create confirmed, but ${missing.length} of ${input.ids.length} ` +
68
+ 'server rows could not be recovered from its receipt or verified by id.',
69
+ { code: 'commit_no_result', details: { missingIds: missing } },
70
+ );
71
+ }
72
+ return rows as T[];
73
+ }