@abloatai/transaction 0.37.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 (723) hide show
  1. package/CONVENTIONS.md +83 -0
  2. package/README.md +48 -0
  3. package/dist/ablo.d.ts +90 -0
  4. package/dist/ablo.d.ts.map +1 -0
  5. package/dist/ablo.js +34 -0
  6. package/dist/ablo.js.map +1 -0
  7. package/dist/ai-sdk/coordinatedTool.d.ts +123 -0
  8. package/dist/ai-sdk/coordinatedTool.d.ts.map +1 -0
  9. package/dist/ai-sdk/coordinatedTool.js +135 -0
  10. package/dist/ai-sdk/coordinatedTool.js.map +1 -0
  11. package/dist/ai-sdk/index.d.ts +2 -0
  12. package/dist/ai-sdk/index.d.ts.map +1 -0
  13. package/dist/ai-sdk/index.js +2 -0
  14. package/dist/ai-sdk/index.js.map +1 -0
  15. package/dist/auth/apiKey.d.ts +154 -0
  16. package/dist/auth/apiKey.d.ts.map +1 -0
  17. package/dist/auth/apiKey.js +408 -0
  18. package/dist/auth/apiKey.js.map +1 -0
  19. package/dist/auth/bootstrapScope.d.ts +16 -0
  20. package/dist/auth/bootstrapScope.d.ts.map +1 -0
  21. package/dist/auth/bootstrapScope.js +2 -0
  22. package/dist/auth/bootstrapScope.js.map +1 -0
  23. package/dist/auth/browserCredentialSafety.d.ts +7 -0
  24. package/dist/auth/browserCredentialSafety.d.ts.map +1 -0
  25. package/dist/auth/browserCredentialSafety.js +29 -0
  26. package/dist/auth/browserCredentialSafety.js.map +1 -0
  27. package/dist/auth/capability.d.ts +241 -0
  28. package/dist/auth/capability.d.ts.map +1 -0
  29. package/dist/auth/capability.js +253 -0
  30. package/dist/auth/capability.js.map +1 -0
  31. package/dist/auth/capabilityLifecycle.d.ts +47 -0
  32. package/dist/auth/capabilityLifecycle.d.ts.map +1 -0
  33. package/dist/auth/capabilityLifecycle.js +108 -0
  34. package/dist/auth/capabilityLifecycle.js.map +1 -0
  35. package/dist/auth/credentialEndpoint.d.ts +10 -0
  36. package/dist/auth/credentialEndpoint.d.ts.map +1 -0
  37. package/dist/auth/credentialEndpoint.js +58 -0
  38. package/dist/auth/credentialEndpoint.js.map +1 -0
  39. package/dist/auth/credentialEndpointProtocol.d.ts +24 -0
  40. package/dist/auth/credentialEndpointProtocol.d.ts.map +1 -0
  41. package/dist/auth/credentialEndpointProtocol.js +34 -0
  42. package/dist/auth/credentialEndpointProtocol.js.map +1 -0
  43. package/dist/auth/credentialKind.d.ts +4 -0
  44. package/dist/auth/credentialKind.d.ts.map +1 -0
  45. package/dist/auth/credentialKind.js +15 -0
  46. package/dist/auth/credentialKind.js.map +1 -0
  47. package/dist/auth/credentialPolicy.d.ts +141 -0
  48. package/dist/auth/credentialPolicy.d.ts.map +1 -0
  49. package/dist/auth/credentialPolicy.js +113 -0
  50. package/dist/auth/credentialPolicy.js.map +1 -0
  51. package/dist/auth/credentialResult.d.ts +7 -0
  52. package/dist/auth/credentialResult.d.ts.map +1 -0
  53. package/dist/auth/credentialResult.js +9 -0
  54. package/dist/auth/credentialResult.js.map +1 -0
  55. package/dist/auth/credentialSource.d.ts +31 -0
  56. package/dist/auth/credentialSource.d.ts.map +1 -0
  57. package/dist/auth/credentialSource.js +56 -0
  58. package/dist/auth/credentialSource.js.map +1 -0
  59. package/dist/auth/hostedEndpoints.d.ts +22 -0
  60. package/dist/auth/hostedEndpoints.d.ts.map +1 -0
  61. package/dist/auth/hostedEndpoints.js +22 -0
  62. package/dist/auth/hostedEndpoints.js.map +1 -0
  63. package/dist/auth/identity.d.ts +62 -0
  64. package/dist/auth/identity.d.ts.map +1 -0
  65. package/dist/auth/identity.js +224 -0
  66. package/dist/auth/identity.js.map +1 -0
  67. package/dist/auth/index.d.ts +189 -0
  68. package/dist/auth/index.d.ts.map +1 -0
  69. package/dist/auth/index.js +312 -0
  70. package/dist/auth/index.js.map +1 -0
  71. package/dist/auth/schemas.d.ts +41 -0
  72. package/dist/auth/schemas.d.ts.map +1 -0
  73. package/dist/auth/schemas.js +69 -0
  74. package/dist/auth/schemas.js.map +1 -0
  75. package/dist/auth/sessionMint.d.ts +29 -0
  76. package/dist/auth/sessionMint.d.ts.map +1 -0
  77. package/dist/auth/sessionMint.js +92 -0
  78. package/dist/auth/sessionMint.js.map +1 -0
  79. package/dist/auth/token.d.ts +4 -0
  80. package/dist/auth/token.d.ts.map +1 -0
  81. package/dist/auth/token.js +4 -0
  82. package/dist/auth/token.js.map +1 -0
  83. package/dist/batching/index.d.ts +56 -0
  84. package/dist/batching/index.d.ts.map +1 -0
  85. package/dist/batching/index.js +148 -0
  86. package/dist/batching/index.js.map +1 -0
  87. package/dist/coordination/awaitClaimGrant.d.ts +57 -0
  88. package/dist/coordination/awaitClaimGrant.d.ts.map +1 -0
  89. package/dist/coordination/awaitClaimGrant.js +138 -0
  90. package/dist/coordination/awaitClaimGrant.js.map +1 -0
  91. package/dist/coordination/claimHeartbeatLoop.d.ts +85 -0
  92. package/dist/coordination/claimHeartbeatLoop.d.ts.map +1 -0
  93. package/dist/coordination/claimHeartbeatLoop.js +109 -0
  94. package/dist/coordination/claimHeartbeatLoop.js.map +1 -0
  95. package/dist/coordination/claimMeta.d.ts +50 -0
  96. package/dist/coordination/claimMeta.d.ts.map +1 -0
  97. package/dist/coordination/claimMeta.js +53 -0
  98. package/dist/coordination/claimMeta.js.map +1 -0
  99. package/dist/coordination/events.d.ts +75 -0
  100. package/dist/coordination/events.d.ts.map +1 -0
  101. package/dist/coordination/events.js +8 -0
  102. package/dist/coordination/events.js.map +1 -0
  103. package/dist/coordination/index.d.ts +20 -0
  104. package/dist/coordination/index.d.ts.map +1 -0
  105. package/dist/coordination/index.js +46 -0
  106. package/dist/coordination/index.js.map +1 -0
  107. package/dist/coordination/locator.d.ts +106 -0
  108. package/dist/coordination/locator.d.ts.map +1 -0
  109. package/dist/coordination/locator.js +110 -0
  110. package/dist/coordination/locator.js.map +1 -0
  111. package/dist/coordination/schema.d.ts +1332 -0
  112. package/dist/coordination/schema.d.ts.map +1 -0
  113. package/dist/coordination/schema.js +1137 -0
  114. package/dist/coordination/schema.js.map +1 -0
  115. package/dist/coordination/targetConflict.d.ts +3 -0
  116. package/dist/coordination/targetConflict.d.ts.map +1 -0
  117. package/dist/coordination/targetConflict.js +74 -0
  118. package/dist/coordination/targetConflict.js.map +1 -0
  119. package/dist/coordination/trace.d.ts +79 -0
  120. package/dist/coordination/trace.d.ts.map +1 -0
  121. package/dist/coordination/trace.js +139 -0
  122. package/dist/coordination/trace.js.map +1 -0
  123. package/dist/docs/catalog.d.ts +73 -0
  124. package/dist/docs/catalog.d.ts.map +1 -0
  125. package/dist/docs/catalog.js +231 -0
  126. package/dist/docs/catalog.js.map +1 -0
  127. package/dist/docs/index.d.ts +11 -0
  128. package/dist/docs/index.d.ts.map +1 -0
  129. package/dist/docs/index.js +11 -0
  130. package/dist/docs/index.js.map +1 -0
  131. package/dist/durableWrites.d.ts +63 -0
  132. package/dist/durableWrites.d.ts.map +1 -0
  133. package/dist/durableWrites.js +72 -0
  134. package/dist/durableWrites.js.map +1 -0
  135. package/dist/environment.d.ts +106 -0
  136. package/dist/environment.d.ts.map +1 -0
  137. package/dist/environment.js +109 -0
  138. package/dist/environment.js.map +1 -0
  139. package/dist/errorCodes.d.ts +411 -0
  140. package/dist/errorCodes.d.ts.map +1 -0
  141. package/dist/errorCodes.js +500 -0
  142. package/dist/errorCodes.js.map +1 -0
  143. package/dist/errors.d.ts +429 -0
  144. package/dist/errors.d.ts.map +1 -0
  145. package/dist/errors.js +687 -0
  146. package/dist/errors.js.map +1 -0
  147. package/dist/footprint.d.ts +112 -0
  148. package/dist/footprint.d.ts.map +1 -0
  149. package/dist/footprint.js +0 -0
  150. package/dist/footprint.js.map +1 -0
  151. package/dist/headlessClient.d.ts +10 -0
  152. package/dist/headlessClient.d.ts.map +1 -0
  153. package/dist/headlessClient.js +114 -0
  154. package/dist/headlessClient.js.map +1 -0
  155. package/dist/index.d.ts +21 -0
  156. package/dist/index.d.ts.map +1 -0
  157. package/dist/index.js +21 -0
  158. package/dist/index.js.map +1 -0
  159. package/dist/keys/index.d.ts +88 -0
  160. package/dist/keys/index.d.ts.map +1 -0
  161. package/dist/keys/index.js +208 -0
  162. package/dist/keys/index.js.map +1 -0
  163. package/dist/log/syncDeltaRow.d.ts +159 -0
  164. package/dist/log/syncDeltaRow.d.ts.map +1 -0
  165. package/dist/log/syncDeltaRow.js +96 -0
  166. package/dist/log/syncDeltaRow.js.map +1 -0
  167. package/dist/logger.d.ts +17 -0
  168. package/dist/logger.d.ts.map +1 -0
  169. package/dist/logger.js +8 -0
  170. package/dist/logger.js.map +1 -0
  171. package/dist/observability.d.ts +54 -0
  172. package/dist/observability.d.ts.map +1 -0
  173. package/dist/observability.js +20 -0
  174. package/dist/observability.js.map +1 -0
  175. package/dist/policy/types.d.ts +218 -0
  176. package/dist/policy/types.d.ts.map +1 -0
  177. package/dist/policy/types.js +127 -0
  178. package/dist/policy/types.js.map +1 -0
  179. package/dist/resources/functionalUpdate.d.ts +80 -0
  180. package/dist/resources/functionalUpdate.d.ts.map +1 -0
  181. package/dist/resources/functionalUpdate.js +88 -0
  182. package/dist/resources/functionalUpdate.js.map +1 -0
  183. package/dist/resources/httpResources.d.ts +449 -0
  184. package/dist/resources/httpResources.d.ts.map +1 -0
  185. package/dist/resources/httpResources.js +8 -0
  186. package/dist/resources/httpResources.js.map +1 -0
  187. package/dist/resources/modelOperations.d.ts +380 -0
  188. package/dist/resources/modelOperations.d.ts.map +1 -0
  189. package/dist/resources/modelOperations.js +13 -0
  190. package/dist/resources/modelOperations.js.map +1 -0
  191. package/dist/resources/mutationOptions.d.ts +67 -0
  192. package/dist/resources/mutationOptions.d.ts.map +1 -0
  193. package/dist/resources/mutationOptions.js +10 -0
  194. package/dist/resources/mutationOptions.js.map +1 -0
  195. package/dist/resources/where.d.ts +102 -0
  196. package/dist/resources/where.d.ts.map +1 -0
  197. package/dist/resources/where.js +116 -0
  198. package/dist/resources/where.js.map +1 -0
  199. package/dist/resources/writeOptionsSchema.d.ts +48 -0
  200. package/dist/resources/writeOptionsSchema.d.ts.map +1 -0
  201. package/dist/resources/writeOptionsSchema.js +74 -0
  202. package/dist/resources/writeOptionsSchema.js.map +1 -0
  203. package/dist/schema/coordination.d.ts +113 -0
  204. package/dist/schema/coordination.d.ts.map +1 -0
  205. package/dist/schema/coordination.js +134 -0
  206. package/dist/schema/coordination.js.map +1 -0
  207. package/dist/schema/ddl.d.ts +98 -0
  208. package/dist/schema/ddl.d.ts.map +1 -0
  209. package/dist/schema/ddl.js +492 -0
  210. package/dist/schema/ddl.js.map +1 -0
  211. package/dist/schema/ddlLock.d.ts +36 -0
  212. package/dist/schema/ddlLock.d.ts.map +1 -0
  213. package/dist/schema/ddlLock.js +47 -0
  214. package/dist/schema/ddlLock.js.map +1 -0
  215. package/dist/schema/diff.d.ts +226 -0
  216. package/dist/schema/diff.d.ts.map +1 -0
  217. package/dist/schema/diff.js +290 -0
  218. package/dist/schema/diff.js.map +1 -0
  219. package/dist/schema/field.d.ts +121 -0
  220. package/dist/schema/field.d.ts.map +1 -0
  221. package/dist/schema/field.js +266 -0
  222. package/dist/schema/field.js.map +1 -0
  223. package/dist/schema/fieldRef.d.ts +58 -0
  224. package/dist/schema/fieldRef.d.ts.map +1 -0
  225. package/dist/schema/fieldRef.js +26 -0
  226. package/dist/schema/fieldRef.js.map +1 -0
  227. package/dist/schema/generate.d.ts +20 -0
  228. package/dist/schema/generate.d.ts.map +1 -0
  229. package/dist/schema/generate.js +87 -0
  230. package/dist/schema/generate.js.map +1 -0
  231. package/dist/schema/index.d.ts +43 -0
  232. package/dist/schema/index.d.ts.map +1 -0
  233. package/dist/schema/index.js +81 -0
  234. package/dist/schema/index.js.map +1 -0
  235. package/dist/schema/loadStrategy.d.ts +46 -0
  236. package/dist/schema/loadStrategy.d.ts.map +1 -0
  237. package/dist/schema/loadStrategy.js +47 -0
  238. package/dist/schema/loadStrategy.js.map +1 -0
  239. package/dist/schema/model.d.ts +380 -0
  240. package/dist/schema/model.d.ts.map +1 -0
  241. package/dist/schema/model.js +124 -0
  242. package/dist/schema/model.js.map +1 -0
  243. package/dist/schema/openapi.d.ts +59 -0
  244. package/dist/schema/openapi.d.ts.map +1 -0
  245. package/dist/schema/openapi.js +508 -0
  246. package/dist/schema/openapi.js.map +1 -0
  247. package/dist/schema/queries.d.ts +202 -0
  248. package/dist/schema/queries.d.ts.map +1 -0
  249. package/dist/schema/queries.js +144 -0
  250. package/dist/schema/queries.js.map +1 -0
  251. package/dist/schema/relation.d.ts +205 -0
  252. package/dist/schema/relation.d.ts.map +1 -0
  253. package/dist/schema/relation.js +105 -0
  254. package/dist/schema/relation.js.map +1 -0
  255. package/dist/schema/residency.d.ts +30 -0
  256. package/dist/schema/residency.d.ts.map +1 -0
  257. package/dist/schema/residency.js +26 -0
  258. package/dist/schema/residency.js.map +1 -0
  259. package/dist/schema/roles.d.ts +250 -0
  260. package/dist/schema/roles.d.ts.map +1 -0
  261. package/dist/schema/roles.js +231 -0
  262. package/dist/schema/roles.js.map +1 -0
  263. package/dist/schema/schema.d.ts +352 -0
  264. package/dist/schema/schema.d.ts.map +1 -0
  265. package/dist/schema/schema.js +326 -0
  266. package/dist/schema/schema.js.map +1 -0
  267. package/dist/schema/select.d.ts +41 -0
  268. package/dist/schema/select.d.ts.map +1 -0
  269. package/dist/schema/select.js +91 -0
  270. package/dist/schema/select.js.map +1 -0
  271. package/dist/schema/serialize.d.ts +116 -0
  272. package/dist/schema/serialize.d.ts.map +1 -0
  273. package/dist/schema/serialize.js +278 -0
  274. package/dist/schema/serialize.js.map +1 -0
  275. package/dist/schema/sugar.d.ts +110 -0
  276. package/dist/schema/sugar.d.ts.map +1 -0
  277. package/dist/schema/sugar.js +84 -0
  278. package/dist/schema/sugar.js.map +1 -0
  279. package/dist/schema/tenancy.d.ts +140 -0
  280. package/dist/schema/tenancy.d.ts.map +1 -0
  281. package/dist/schema/tenancy.js +191 -0
  282. package/dist/schema/tenancy.js.map +1 -0
  283. package/dist/server/adapter.d.ts +174 -0
  284. package/dist/server/adapter.d.ts.map +1 -0
  285. package/dist/server/adapter.js +19 -0
  286. package/dist/server/adapter.js.map +1 -0
  287. package/dist/server/commit.d.ts +108 -0
  288. package/dist/server/commit.d.ts.map +1 -0
  289. package/dist/server/commit.js +2 -0
  290. package/dist/server/commit.js.map +1 -0
  291. package/dist/server/index.d.ts +15 -0
  292. package/dist/server/index.d.ts.map +1 -0
  293. package/dist/server/index.js +3 -0
  294. package/dist/server/index.js.map +1 -0
  295. package/dist/server/readConfig.d.ts +81 -0
  296. package/dist/server/readConfig.d.ts.map +1 -0
  297. package/dist/server/readConfig.js +9 -0
  298. package/dist/server/readConfig.js.map +1 -0
  299. package/dist/server/storageMode.d.ts +24 -0
  300. package/dist/server/storageMode.d.ts.map +1 -0
  301. package/dist/server/storageMode.js +18 -0
  302. package/dist/server/storageMode.js.map +1 -0
  303. package/dist/source/adapter.d.ts +84 -0
  304. package/dist/source/adapter.d.ts.map +1 -0
  305. package/dist/source/adapter.js +25 -0
  306. package/dist/source/adapter.js.map +1 -0
  307. package/dist/source/adapters/drizzle.d.ts +49 -0
  308. package/dist/source/adapters/drizzle.d.ts.map +1 -0
  309. package/dist/source/adapters/drizzle.js +220 -0
  310. package/dist/source/adapters/drizzle.js.map +1 -0
  311. package/dist/source/adapters/kysely.d.ts +43 -0
  312. package/dist/source/adapters/kysely.d.ts.map +1 -0
  313. package/dist/source/adapters/kysely.js +206 -0
  314. package/dist/source/adapters/kysely.js.map +1 -0
  315. package/dist/source/adapters/kyselyMutationCore.d.ts +77 -0
  316. package/dist/source/adapters/kyselyMutationCore.d.ts.map +1 -0
  317. package/dist/source/adapters/kyselyMutationCore.js +126 -0
  318. package/dist/source/adapters/kyselyMutationCore.js.map +1 -0
  319. package/dist/source/adapters/memory.d.ts +14 -0
  320. package/dist/source/adapters/memory.d.ts.map +1 -0
  321. package/dist/source/adapters/memory.js +131 -0
  322. package/dist/source/adapters/memory.js.map +1 -0
  323. package/dist/source/adapters/prisma.d.ts +64 -0
  324. package/dist/source/adapters/prisma.d.ts.map +1 -0
  325. package/dist/source/adapters/prisma.js +203 -0
  326. package/dist/source/adapters/prisma.js.map +1 -0
  327. package/dist/source/conformance.d.ts +38 -0
  328. package/dist/source/conformance.d.ts.map +1 -0
  329. package/dist/source/conformance.js +216 -0
  330. package/dist/source/conformance.js.map +1 -0
  331. package/dist/source/connector.d.ts +96 -0
  332. package/dist/source/connector.d.ts.map +1 -0
  333. package/dist/source/connector.js +267 -0
  334. package/dist/source/connector.js.map +1 -0
  335. package/dist/source/connectorProtocol.d.ts +155 -0
  336. package/dist/source/connectorProtocol.d.ts.map +1 -0
  337. package/dist/source/connectorProtocol.js +164 -0
  338. package/dist/source/connectorProtocol.js.map +1 -0
  339. package/dist/source/contract.d.ts +196 -0
  340. package/dist/source/contract.d.ts.map +1 -0
  341. package/dist/source/contract.js +165 -0
  342. package/dist/source/contract.js.map +1 -0
  343. package/dist/source/drizzle.d.ts +2 -0
  344. package/dist/source/drizzle.d.ts.map +1 -0
  345. package/dist/source/drizzle.js +2 -0
  346. package/dist/source/drizzle.js.map +1 -0
  347. package/dist/source/factory.d.ts +93 -0
  348. package/dist/source/factory.d.ts.map +1 -0
  349. package/dist/source/factory.js +287 -0
  350. package/dist/source/factory.js.map +1 -0
  351. package/dist/source/idempotency.d.ts +62 -0
  352. package/dist/source/idempotency.d.ts.map +1 -0
  353. package/dist/source/idempotency.js +145 -0
  354. package/dist/source/idempotency.js.map +1 -0
  355. package/dist/source/index.d.ts +24 -0
  356. package/dist/source/index.d.ts.map +1 -0
  357. package/dist/source/index.js +29 -0
  358. package/dist/source/index.js.map +1 -0
  359. package/dist/source/kysely.d.ts +3 -0
  360. package/dist/source/kysely.d.ts.map +1 -0
  361. package/dist/source/kysely.js +3 -0
  362. package/dist/source/kysely.js.map +1 -0
  363. package/dist/source/migrations.d.ts +22 -0
  364. package/dist/source/migrations.d.ts.map +1 -0
  365. package/dist/source/migrations.js +104 -0
  366. package/dist/source/migrations.js.map +1 -0
  367. package/dist/source/next.d.ts +33 -0
  368. package/dist/source/next.d.ts.map +1 -0
  369. package/dist/source/next.js +26 -0
  370. package/dist/source/next.js.map +1 -0
  371. package/dist/source/pushQueue.d.ts +135 -0
  372. package/dist/source/pushQueue.d.ts.map +1 -0
  373. package/dist/source/pushQueue.js +257 -0
  374. package/dist/source/pushQueue.js.map +1 -0
  375. package/dist/source/signing.d.ts +93 -0
  376. package/dist/source/signing.d.ts.map +1 -0
  377. package/dist/source/signing.js +163 -0
  378. package/dist/source/signing.js.map +1 -0
  379. package/dist/source/types.d.ts +402 -0
  380. package/dist/source/types.d.ts.map +1 -0
  381. package/dist/source/types.js +60 -0
  382. package/dist/source/types.js.map +1 -0
  383. package/dist/syncLog/contract.d.ts +21 -0
  384. package/dist/syncLog/contract.d.ts.map +1 -0
  385. package/dist/syncLog/contract.js +20 -0
  386. package/dist/syncLog/contract.js.map +1 -0
  387. package/dist/syncLog/index.d.ts +2 -0
  388. package/dist/syncLog/index.d.ts.map +1 -0
  389. package/dist/syncLog/index.js +2 -0
  390. package/dist/syncLog/index.js.map +1 -0
  391. package/dist/testing/fixtures/httpResponses.d.ts +74 -0
  392. package/dist/testing/fixtures/httpResponses.d.ts.map +1 -0
  393. package/dist/testing/fixtures/httpResponses.js +102 -0
  394. package/dist/testing/fixtures/httpResponses.js.map +1 -0
  395. package/dist/transactionLayer.d.ts +110 -0
  396. package/dist/transactionLayer.d.ts.map +1 -0
  397. package/dist/transactionLayer.js +25 -0
  398. package/dist/transactionLayer.js.map +1 -0
  399. package/dist/transactions/settlement/commitEnvelope.d.ts +144 -0
  400. package/dist/transactions/settlement/commitEnvelope.d.ts.map +1 -0
  401. package/dist/transactions/settlement/commitEnvelope.js +162 -0
  402. package/dist/transactions/settlement/commitEnvelope.js.map +1 -0
  403. package/dist/transactions/settlement/httpCommitEnvelope.d.ts +54 -0
  404. package/dist/transactions/settlement/httpCommitEnvelope.d.ts.map +1 -0
  405. package/dist/transactions/settlement/httpCommitEnvelope.js +208 -0
  406. package/dist/transactions/settlement/httpCommitEnvelope.js.map +1 -0
  407. package/dist/transactions/settlement/idempotencyKey.d.ts +11 -0
  408. package/dist/transactions/settlement/idempotencyKey.d.ts.map +1 -0
  409. package/dist/transactions/settlement/idempotencyKey.js +10 -0
  410. package/dist/transactions/settlement/idempotencyKey.js.map +1 -0
  411. package/dist/transactions/settlement/pendingWrite.d.ts +113 -0
  412. package/dist/transactions/settlement/pendingWrite.d.ts.map +1 -0
  413. package/dist/transactions/settlement/pendingWrite.js +21 -0
  414. package/dist/transactions/settlement/pendingWrite.js.map +1 -0
  415. package/dist/transport/commitFrames.d.ts +91 -0
  416. package/dist/transport/commitFrames.d.ts.map +1 -0
  417. package/dist/transport/commitFrames.js +135 -0
  418. package/dist/transport/commitFrames.js.map +1 -0
  419. package/dist/transport/connectionManager.d.ts +216 -0
  420. package/dist/transport/connectionManager.d.ts.map +1 -0
  421. package/dist/transport/connectionManager.js +674 -0
  422. package/dist/transport/connectionManager.js.map +1 -0
  423. package/dist/transport/credentialLifecycle.d.ts +178 -0
  424. package/dist/transport/credentialLifecycle.d.ts.map +1 -0
  425. package/dist/transport/credentialLifecycle.js +324 -0
  426. package/dist/transport/credentialLifecycle.js.map +1 -0
  427. package/dist/transport/heartbeat.d.ts +66 -0
  428. package/dist/transport/heartbeat.d.ts.map +1 -0
  429. package/dist/transport/heartbeat.js +94 -0
  430. package/dist/transport/heartbeat.js.map +1 -0
  431. package/dist/transport/httpClient.d.ts +143 -0
  432. package/dist/transport/httpClient.d.ts.map +1 -0
  433. package/dist/transport/httpClient.js +150 -0
  434. package/dist/transport/httpClient.js.map +1 -0
  435. package/dist/transport/httpFeed.d.ts +4 -0
  436. package/dist/transport/httpFeed.d.ts.map +1 -0
  437. package/dist/transport/httpFeed.js +94 -0
  438. package/dist/transport/httpFeed.js.map +1 -0
  439. package/dist/transport/httpOptions.d.ts +34 -0
  440. package/dist/transport/httpOptions.d.ts.map +1 -0
  441. package/dist/transport/httpOptions.js +13 -0
  442. package/dist/transport/httpOptions.js.map +1 -0
  443. package/dist/transport/httpTransport.d.ts +68 -0
  444. package/dist/transport/httpTransport.d.ts.map +1 -0
  445. package/dist/transport/httpTransport.js +1433 -0
  446. package/dist/transport/httpTransport.js.map +1 -0
  447. package/dist/transport/networkProbe.d.ts +85 -0
  448. package/dist/transport/networkProbe.d.ts.map +1 -0
  449. package/dist/transport/networkProbe.js +208 -0
  450. package/dist/transport/networkProbe.js.map +1 -0
  451. package/dist/transport/wsFrameHandlers.d.ts +129 -0
  452. package/dist/transport/wsFrameHandlers.d.ts.map +1 -0
  453. package/dist/transport/wsFrameHandlers.js +429 -0
  454. package/dist/transport/wsFrameHandlers.js.map +1 -0
  455. package/dist/transport/wsTransport.d.ts +575 -0
  456. package/dist/transport/wsTransport.d.ts.map +1 -0
  457. package/dist/transport/wsTransport.js +1024 -0
  458. package/dist/transport/wsTransport.js.map +1 -0
  459. package/dist/types/assertExact.d.ts +18 -0
  460. package/dist/types/assertExact.d.ts.map +1 -0
  461. package/dist/types/assertExact.js +2 -0
  462. package/dist/types/assertExact.js.map +1 -0
  463. package/dist/types/global.d.ts +108 -0
  464. package/dist/types/global.d.ts.map +1 -0
  465. package/dist/types/global.js +41 -0
  466. package/dist/types/global.js.map +1 -0
  467. package/dist/types/index.d.ts +206 -0
  468. package/dist/types/index.d.ts.map +1 -0
  469. package/dist/types/index.js +57 -0
  470. package/dist/types/index.js.map +1 -0
  471. package/dist/types/modelData.d.ts +11 -0
  472. package/dist/types/modelData.d.ts.map +1 -0
  473. package/dist/types/modelData.js +10 -0
  474. package/dist/types/modelData.js.map +1 -0
  475. package/dist/types/participant.d.ts +21 -0
  476. package/dist/types/participant.d.ts.map +1 -0
  477. package/dist/types/participant.js +11 -0
  478. package/dist/types/participant.js.map +1 -0
  479. package/dist/types/streams.d.ts +545 -0
  480. package/dist/types/streams.d.ts.map +1 -0
  481. package/dist/types/streams.js +12 -0
  482. package/dist/types/streams.js.map +1 -0
  483. package/dist/utils/asyncIterator.d.ts +35 -0
  484. package/dist/utils/asyncIterator.d.ts.map +1 -0
  485. package/dist/utils/asyncIterator.js +136 -0
  486. package/dist/utils/asyncIterator.js.map +1 -0
  487. package/dist/utils/duration.d.ts +51 -0
  488. package/dist/utils/duration.d.ts.map +1 -0
  489. package/dist/utils/duration.js +78 -0
  490. package/dist/utils/duration.js.map +1 -0
  491. package/dist/utils/json.d.ts +58 -0
  492. package/dist/utils/json.d.ts.map +1 -0
  493. package/dist/utils/json.js +277 -0
  494. package/dist/utils/json.js.map +1 -0
  495. package/dist/webhooks/events.d.ts +44 -0
  496. package/dist/webhooks/events.d.ts.map +1 -0
  497. package/dist/webhooks/events.js +43 -0
  498. package/dist/webhooks/events.js.map +1 -0
  499. package/dist/webhooks/index.d.ts +9 -0
  500. package/dist/webhooks/index.d.ts.map +1 -0
  501. package/dist/webhooks/index.js +9 -0
  502. package/dist/webhooks/index.js.map +1 -0
  503. package/dist/wire/accountResponses.d.ts +463 -0
  504. package/dist/wire/accountResponses.d.ts.map +1 -0
  505. package/dist/wire/accountResponses.js +294 -0
  506. package/dist/wire/accountResponses.js.map +1 -0
  507. package/dist/wire/auth.d.ts +57 -0
  508. package/dist/wire/auth.d.ts.map +1 -0
  509. package/dist/wire/auth.js +71 -0
  510. package/dist/wire/auth.js.map +1 -0
  511. package/dist/wire/bootstrapReason.d.ts +10 -0
  512. package/dist/wire/bootstrapReason.d.ts.map +1 -0
  513. package/dist/wire/bootstrapReason.js +9 -0
  514. package/dist/wire/bootstrapReason.js.map +1 -0
  515. package/dist/wire/claimEvent.d.ts +70 -0
  516. package/dist/wire/claimEvent.d.ts.map +1 -0
  517. package/dist/wire/claimEvent.js +74 -0
  518. package/dist/wire/claimEvent.js.map +1 -0
  519. package/dist/wire/claims.d.ts +475 -0
  520. package/dist/wire/claims.d.ts.map +1 -0
  521. package/dist/wire/claims.js +326 -0
  522. package/dist/wire/claims.js.map +1 -0
  523. package/dist/wire/commit.d.ts +604 -0
  524. package/dist/wire/commit.d.ts.map +1 -0
  525. package/dist/wire/commit.js +322 -0
  526. package/dist/wire/commit.js.map +1 -0
  527. package/dist/wire/delta.d.ts +251 -0
  528. package/dist/wire/delta.d.ts.map +1 -0
  529. package/dist/wire/delta.js +148 -0
  530. package/dist/wire/delta.js.map +1 -0
  531. package/dist/wire/errorEnvelope.d.ts +73 -0
  532. package/dist/wire/errorEnvelope.d.ts.map +1 -0
  533. package/dist/wire/errorEnvelope.js +124 -0
  534. package/dist/wire/errorEnvelope.js.map +1 -0
  535. package/dist/wire/feedCursor.d.ts +61 -0
  536. package/dist/wire/feedCursor.d.ts.map +1 -0
  537. package/dist/wire/feedCursor.js +83 -0
  538. package/dist/wire/feedCursor.js.map +1 -0
  539. package/dist/wire/feedEvent.d.ts +264 -0
  540. package/dist/wire/feedEvent.d.ts.map +1 -0
  541. package/dist/wire/feedEvent.js +66 -0
  542. package/dist/wire/feedEvent.js.map +1 -0
  543. package/dist/wire/frames.d.ts +195 -0
  544. package/dist/wire/frames.d.ts.map +1 -0
  545. package/dist/wire/frames.js +51 -0
  546. package/dist/wire/frames.js.map +1 -0
  547. package/dist/wire/inboundFrames.d.ts +490 -0
  548. package/dist/wire/inboundFrames.d.ts.map +1 -0
  549. package/dist/wire/inboundFrames.js +117 -0
  550. package/dist/wire/inboundFrames.js.map +1 -0
  551. package/dist/wire/index.d.ts +55 -0
  552. package/dist/wire/index.d.ts.map +1 -0
  553. package/dist/wire/index.js +84 -0
  554. package/dist/wire/index.js.map +1 -0
  555. package/dist/wire/listEnvelope.d.ts +38 -0
  556. package/dist/wire/listEnvelope.d.ts.map +1 -0
  557. package/dist/wire/listEnvelope.js +43 -0
  558. package/dist/wire/listEnvelope.js.map +1 -0
  559. package/dist/wire/modelMutations.d.ts +32 -0
  560. package/dist/wire/modelMutations.d.ts.map +1 -0
  561. package/dist/wire/modelMutations.js +53 -0
  562. package/dist/wire/modelMutations.js.map +1 -0
  563. package/dist/wire/modelResponses.d.ts +79 -0
  564. package/dist/wire/modelResponses.d.ts.map +1 -0
  565. package/dist/wire/modelResponses.js +44 -0
  566. package/dist/wire/modelResponses.js.map +1 -0
  567. package/dist/wire/modelShape.d.ts +79 -0
  568. package/dist/wire/modelShape.d.ts.map +1 -0
  569. package/dist/wire/modelShape.js +75 -0
  570. package/dist/wire/modelShape.js.map +1 -0
  571. package/dist/wire/protocol.d.ts +39 -0
  572. package/dist/wire/protocol.d.ts.map +1 -0
  573. package/dist/wire/protocol.js +39 -0
  574. package/dist/wire/protocol.js.map +1 -0
  575. package/dist/wire/protocolVersion.d.ts +74 -0
  576. package/dist/wire/protocolVersion.d.ts.map +1 -0
  577. package/dist/wire/protocolVersion.js +84 -0
  578. package/dist/wire/protocolVersion.js.map +1 -0
  579. package/package.json +187 -0
  580. package/src/ablo.ts +139 -0
  581. package/src/ai-sdk/coordinatedTool.ts +214 -0
  582. package/src/ai-sdk/index.ts +7 -0
  583. package/src/auth/apiKey.ts +540 -0
  584. package/src/auth/bootstrapScope.ts +15 -0
  585. package/src/auth/browserCredentialSafety.ts +48 -0
  586. package/src/auth/capability.ts +326 -0
  587. package/src/auth/capabilityLifecycle.ts +174 -0
  588. package/src/auth/credentialEndpoint.ts +79 -0
  589. package/src/auth/credentialEndpointProtocol.ts +51 -0
  590. package/src/auth/credentialKind.ts +20 -0
  591. package/src/auth/credentialPolicy.ts +244 -0
  592. package/src/auth/credentialResult.ts +23 -0
  593. package/src/auth/credentialSource.ts +99 -0
  594. package/src/auth/hostedEndpoints.ts +24 -0
  595. package/src/auth/identity.ts +330 -0
  596. package/src/auth/index.ts +592 -0
  597. package/src/auth/schemas.ts +94 -0
  598. package/src/auth/sessionMint.ts +126 -0
  599. package/src/auth/token.ts +4 -0
  600. package/src/batching/index.ts +200 -0
  601. package/src/coordination/awaitClaimGrant.ts +243 -0
  602. package/src/coordination/claimHeartbeatLoop.ts +165 -0
  603. package/src/coordination/claimMeta.ts +56 -0
  604. package/src/coordination/events.ts +86 -0
  605. package/src/coordination/index.ts +181 -0
  606. package/src/coordination/locator.ts +200 -0
  607. package/src/coordination/schema.ts +1346 -0
  608. package/src/coordination/targetConflict.ts +85 -0
  609. package/src/coordination/trace.ts +173 -0
  610. package/src/docs/catalog.ts +274 -0
  611. package/src/docs/index.ts +18 -0
  612. package/src/durableWrites.ts +134 -0
  613. package/src/environment.ts +132 -0
  614. package/src/errorCodes.ts +1591 -0
  615. package/src/errors.ts +918 -0
  616. package/src/footprint.ts +0 -0
  617. package/src/headlessClient.ts +161 -0
  618. package/src/index.ts +52 -0
  619. package/src/keys/index.ts +254 -0
  620. package/src/log/syncDeltaRow.ts +119 -0
  621. package/src/logger.ts +22 -0
  622. package/src/observability.ts +85 -0
  623. package/src/policy/types.ts +292 -0
  624. package/src/resources/functionalUpdate.ts +151 -0
  625. package/src/resources/httpResources.ts +520 -0
  626. package/src/resources/modelOperations.ts +444 -0
  627. package/src/resources/mutationOptions.ts +66 -0
  628. package/src/resources/where.ts +160 -0
  629. package/src/resources/writeOptionsSchema.ts +91 -0
  630. package/src/schema/coordination.ts +161 -0
  631. package/src/schema/ddl.ts +593 -0
  632. package/src/schema/ddlLock.ts +53 -0
  633. package/src/schema/diff.ts +489 -0
  634. package/src/schema/field.ts +321 -0
  635. package/src/schema/fieldRef.ts +88 -0
  636. package/src/schema/generate.ts +95 -0
  637. package/src/schema/index.ts +278 -0
  638. package/src/schema/loadStrategy.ts +52 -0
  639. package/src/schema/model.ts +476 -0
  640. package/src/schema/openapi.ts +658 -0
  641. package/src/schema/queries.ts +273 -0
  642. package/src/schema/relation.ts +291 -0
  643. package/src/schema/residency.ts +30 -0
  644. package/src/schema/roles.ts +325 -0
  645. package/src/schema/schema.ts +825 -0
  646. package/src/schema/select.ts +115 -0
  647. package/src/schema/serialize.ts +373 -0
  648. package/src/schema/sugar.ts +194 -0
  649. package/src/schema/tenancy.ts +221 -0
  650. package/src/server/adapter.ts +203 -0
  651. package/src/server/commit.ts +109 -0
  652. package/src/server/index.ts +26 -0
  653. package/src/server/readConfig.ts +82 -0
  654. package/src/server/storageMode.ts +20 -0
  655. package/src/source/adapter.ts +85 -0
  656. package/src/source/adapters/drizzle.ts +291 -0
  657. package/src/source/adapters/kysely.ts +346 -0
  658. package/src/source/adapters/kyselyMutationCore.ts +220 -0
  659. package/src/source/adapters/memory.ts +154 -0
  660. package/src/source/adapters/prisma.ts +282 -0
  661. package/src/source/conformance.ts +287 -0
  662. package/src/source/connector.ts +394 -0
  663. package/src/source/connectorProtocol.ts +189 -0
  664. package/src/source/contract.ts +221 -0
  665. package/src/source/drizzle.ts +1 -0
  666. package/src/source/factory.ts +444 -0
  667. package/src/source/idempotency.ts +189 -0
  668. package/src/source/index.ts +182 -0
  669. package/src/source/kysely.ts +2 -0
  670. package/src/source/migrations.ts +109 -0
  671. package/src/source/next.ts +38 -0
  672. package/src/source/pushQueue.ts +368 -0
  673. package/src/source/signing.ts +279 -0
  674. package/src/source/types.ts +502 -0
  675. package/src/syncLog/contract.ts +32 -0
  676. package/src/syncLog/index.ts +1 -0
  677. package/src/testing/fixtures/httpResponses.ts +155 -0
  678. package/src/transactionLayer.ts +122 -0
  679. package/src/transactions/settlement/commitEnvelope.ts +192 -0
  680. package/src/transactions/settlement/httpCommitEnvelope.ts +250 -0
  681. package/src/transactions/settlement/idempotencyKey.ts +11 -0
  682. package/src/transactions/settlement/pendingWrite.ts +24 -0
  683. package/src/transport/commitFrames.ts +225 -0
  684. package/src/transport/connectionManager.ts +856 -0
  685. package/src/transport/credentialLifecycle.ts +389 -0
  686. package/src/transport/heartbeat.ts +118 -0
  687. package/src/transport/httpClient.ts +354 -0
  688. package/src/transport/httpFeed.ts +111 -0
  689. package/src/transport/httpOptions.ts +41 -0
  690. package/src/transport/httpTransport.ts +1976 -0
  691. package/src/transport/networkProbe.ts +249 -0
  692. package/src/transport/wsFrameHandlers.ts +619 -0
  693. package/src/transport/wsTransport.ts +1491 -0
  694. package/src/types/assertExact.ts +17 -0
  695. package/src/types/global.ts +123 -0
  696. package/src/types/index.ts +270 -0
  697. package/src/types/modelData.ts +11 -0
  698. package/src/types/participant.ts +22 -0
  699. package/src/types/streams.ts +702 -0
  700. package/src/utils/asyncIterator.ts +141 -0
  701. package/src/utils/duration.ts +88 -0
  702. package/src/utils/json.ts +281 -0
  703. package/src/webhooks/events.ts +96 -0
  704. package/src/webhooks/index.ts +12 -0
  705. package/src/wire/accountResponses.ts +328 -0
  706. package/src/wire/auth.ts +86 -0
  707. package/src/wire/bootstrapReason.ts +10 -0
  708. package/src/wire/claimEvent.ts +85 -0
  709. package/src/wire/claims.ts +370 -0
  710. package/src/wire/commit.ts +379 -0
  711. package/src/wire/delta.ts +173 -0
  712. package/src/wire/errorEnvelope.ts +133 -0
  713. package/src/wire/feedCursor.ts +91 -0
  714. package/src/wire/feedEvent.ts +74 -0
  715. package/src/wire/frames.ts +77 -0
  716. package/src/wire/inboundFrames.ts +182 -0
  717. package/src/wire/index.ts +328 -0
  718. package/src/wire/listEnvelope.ts +51 -0
  719. package/src/wire/modelMutations.ts +55 -0
  720. package/src/wire/modelResponses.ts +48 -0
  721. package/src/wire/modelShape.ts +83 -0
  722. package/src/wire/protocol.ts +39 -0
  723. package/src/wire/protocolVersion.ts +97 -0
package/CONVENTIONS.md ADDED
@@ -0,0 +1,83 @@
1
+ # Transaction-core conventions
2
+
3
+ `@abloatai/transaction` is the settlement core. It defines, authorizes, orders, and
4
+ settles changes; it does not materialize a local copy of rows or reconcile an
5
+ optimistic client. Apply ADR 0013's five-second test before adding or moving a
6
+ module:
7
+
8
+ > If there were no UI and no offline mode, would this code still need to exist?
9
+
10
+ Yes belongs here. IndexedDB, local stores, optimistic queues, bootstrap state,
11
+ WebSocket lifecycle and reactive snapshots belong in `@abloatai/humans`.
12
+
13
+ ## One definition for boundary data
14
+
15
+ Any shape that crosses a network boundary or is written to durable storage has
16
+ one authoritative Zod schema. Export its TypeScript shape from that schema with
17
+ `z.infer`, `z.input`, or `z.output`; do not maintain an unchecked parallel
18
+ interface or literal union.
19
+
20
+ Compose variants from the authoritative schema with Zod's `pick`, `omit`,
21
+ `extend`, and unions. A deliberate in-process projection must derive its fields
22
+ from the inferred type with `Pick`, `Omit`, or indexed access and document why it
23
+ differs. The narrow exception is an import-free type leaf needed to break a
24
+ runtime cycle: its one runtime schema must carry a bidirectional exact-type
25
+ assertion and its preamble must name the type leaf as the owner. Do not use an
26
+ equality assertion to justify two otherwise independent definitions.
27
+
28
+ Handwritten interfaces remain appropriate for behavior contracts (methods) and
29
+ in-process options that are neither parsed from the wire nor persisted. Those
30
+ belong outside `src/wire/` and `src/transactions/settlement/`, so the two
31
+ enforced directories keep a zero baseline rather than an exception list. When a
32
+ port and the records crossing it are discovered together, split them: the shape
33
+ stays in `settlement/`, the methods move out.
34
+
35
+ Good definition sites include:
36
+
37
+ - `src/wire/delta.ts` for the shared, client, and server delta projections.
38
+ - `src/transactions/settlement/commitEnvelope.ts` for durable commit identity.
39
+ - `src/transactions/settlement/pendingWrite.ts` for the persisted union a
40
+ durable-write adapter stores.
41
+ - `src/durableWrites.ts` for the port that stores them — methods, so it lives
42
+ outside the enforced directories.
43
+ - `src/transactionLayer.ts` for a behavior contract rather than serialized data.
44
+
45
+ ## File preambles state ownership
46
+
47
+ Every boundary module starts with a short preamble that says:
48
+
49
+ 1. what responsibility the module owns;
50
+ 2. which schema or module is authoritative; and
51
+ 3. which client/server counterpart consumes it, including any intentional
52
+ compatibility or projection difference.
53
+
54
+ Comments explain ownership and invariants. They do not repeat the field names
55
+ that the schema already makes visible.
56
+
57
+ ## Enforcement
58
+
59
+ CI rejects exported interfaces in `src/wire/` and
60
+ `src/transactions/settlement/`. Those directories have a zero baseline: add a
61
+ schema and infer the type instead of adding an exception. The import boundary is
62
+ enforced separately by dependency-cruiser.
63
+
64
+ A shape can also be duplicated without ever declaring a type, by writing a
65
+ projection's output out member by member. CI rejects that for the claim locator,
66
+ whose four projections live in `src/coordination/locator.ts`: a literal that
67
+ assembles a target out of another target instead of spreading `wireTarget`,
68
+ `modelTarget`, `streamTarget`, or `subTarget` fails
69
+ `npm run check:locator-copies`. Its per-file baseline holds the two partial
70
+ locators the projections cannot express, and ratchets down only.
71
+
72
+ Run the focused checks from the repository root:
73
+
74
+ ```sh
75
+ grep -RInE --include='*.ts' \
76
+ '^[[:space:]]*export[[:space:]]+interface[[:space:]]' \
77
+ packages/transaction/src/wire \
78
+ packages/transaction/src/transactions/settlement
79
+ npm run check:locator-copies
80
+ npm run graph:deps
81
+ ```
82
+
83
+ The grep should print nothing; CI turns any match into a failure.
package/README.md ADDED
@@ -0,0 +1,48 @@
1
+ <p align="center">
2
+ <a href="https://abloatai.com">
3
+ <img src="https://raw.githubusercontent.com/Abloatai/ablo/main/assets/banner.png" alt="Ablo" width="480" />
4
+ </a>
5
+ </p>
6
+
7
+ # @abloatai/transaction
8
+
9
+ The canonical transaction contracts and headless HTTP runtime behind Ablo.
10
+
11
+ Authoritative reads, atomic commits, idempotency, settlement, claims, and
12
+ durable observation share one typed protocol here. The package has no React,
13
+ MobX, IndexedDB, or WebSocket runtime.
14
+
15
+ Application code should install the branded Ablo SDK:
16
+
17
+ ```sh
18
+ npm install @abloatai/ablo
19
+ ```
20
+
21
+ ```ts
22
+ import { Ablo } from '@abloatai/ablo';
23
+
24
+ const ablo = Ablo({
25
+ schema,
26
+ apiKey: process.env.ABLO_API_KEY,
27
+ });
28
+
29
+ const order = await ablo.orders.get({ id: orderId });
30
+
31
+ await ablo.orders.update({
32
+ id: orderId,
33
+ data: { status: 'approved' },
34
+ });
35
+ ```
36
+
37
+ Use `@abloatai/transaction` directly only when building Ablo adapters,
38
+ integrations, or infrastructure that must consume the canonical contracts.
39
+ The branded SDK delegates to this package without exposing that ownership map
40
+ in normal application imports.
41
+
42
+ ## Links
43
+
44
+ - [Documentation](https://docs.abloatai.com)
45
+ - [Quickstart](https://docs.abloatai.com/quickstart)
46
+ - [API reference](https://docs.abloatai.com/api)
47
+ - [Source](https://github.com/Abloatai/ablo/tree/main/packages/transaction)
48
+ - [Apache-2.0 license](https://github.com/Abloatai/ablo/blob/main/LICENSE)
package/dist/ablo.d.ts ADDED
@@ -0,0 +1,90 @@
1
+ /**
2
+ * `Ablo` — the entry point to the coordination layer.
3
+ *
4
+ * The factory constructs the stateless client: typed model resources, commits,
5
+ * claims, and session minting over request/response HTTP. It holds no socket,
6
+ * no store, and no local copy of anything — the bearer credential is the
7
+ * identity and the server resolves it on every request. This is the client a
8
+ * server-side actor installs: an agent, a worker, a cron job, a route handler.
9
+ *
10
+ * ```ts
11
+ * import { Ablo } from '@abloatai/ablo';
12
+ * import { schema } from './schema';
13
+ *
14
+ * const ablo = Ablo({ schema, apiKey: process.env.ABLO_API_KEY, transport: 'http' });
15
+ * await ablo.tasks.update({ id: taskId, data: { status: 'done' } });
16
+ * ```
17
+ *
18
+ * The reactive materialiser — local store, live queries, presence rendering —
19
+ * is provided by `@abloatai/humans`, which layers
20
+ * above this one and shares the same `ablo.<model>` surface (ADR 0016).
21
+ */
22
+ import { type AbloHttpClient, type AbloHttpClientOptions } from './transport/httpClient.js';
23
+ import type { SchemaRecord } from './schema/schema.js';
24
+ import type * as _Streams from './types/streams.js';
25
+ import type * as _SchemaTypes from './schema/schema.js';
26
+ import type * as _Global from './types/global.js';
27
+ import type * as _Policy from './policy/types.js';
28
+ import type * as _Http from './resources/httpResources.js';
29
+ /**
30
+ * Create a coordination-layer client in one call.
31
+ *
32
+ * The core carries one transport today — request/response HTTP — so
33
+ * `transport: 'http'` is accepted for symmetry with the reactive package's
34
+ * factory and may be omitted. The duplex transport joins this slot when the
35
+ * socket carve lands (ADR 0016, follow-up 3a).
36
+ */
37
+ export declare function Ablo<const S extends SchemaRecord>(options: AbloHttpClientOptions<S> & {
38
+ transport?: 'http';
39
+ }): AbloHttpClient<S>;
40
+ export declare namespace Ablo {
41
+ type ClaimTarget = _Streams.ClaimTarget;
42
+ type PresenceTarget = _Streams.PresenceTarget;
43
+ type Duration = _Streams.Duration;
44
+ type Peer = _Streams.Peer;
45
+ type Activity = _Streams.Activity;
46
+ type Claim = _Streams.Claim;
47
+ type ClaimHeartbeat = _Streams.ClaimHeartbeat;
48
+ type ClaimHeartbeatOptions = _Streams.ClaimHeartbeatOptions;
49
+ namespace Claim {
50
+ type Held<T = Record<string, unknown>, M = _Global.ResolveClaimMeta> = _Streams.HeldClaim<T, M>;
51
+ type WaitOptions = _Streams.ClaimWaitOptions;
52
+ type LeaseOptions = _Streams.ClaimLeaseOptions;
53
+ }
54
+ type Schema<S extends _SchemaTypes.SchemaRecord = _SchemaTypes.SchemaRecord> = _SchemaTypes.Schema<S>;
55
+ /**
56
+ * The schema this program has registered via `interface Register { Schema }`
57
+ * (falls back to a loose shape when unregistered). Use it where shared code
58
+ * needs "this app's schema" without importing a specific one.
59
+ */
60
+ type ResolveSchema = _Global.ResolveSchema;
61
+ /**
62
+ * The claim metadata shape this program has registered via
63
+ * `interface Register { ClaimMeta }` (falls back to a loose record when
64
+ * unregistered). Every claim surface reads `target.meta` as this.
65
+ */
66
+ type ResolveClaimMeta = _Global.ResolveClaimMeta;
67
+ namespace Schema {
68
+ type Model<S extends _SchemaTypes.Schema, K extends keyof S['models']> = _SchemaTypes.Model<S, K>;
69
+ type InferCreate<S extends _SchemaTypes.Schema, K extends keyof S['models']> = _SchemaTypes.InferCreate<S, K>;
70
+ type InferRow<S extends _SchemaTypes.Schema, K extends keyof S['models']> = _SchemaTypes.InferRow<S, K>;
71
+ type InferModelNames<S extends _SchemaTypes.Schema> = _SchemaTypes.InferModelNames<S>;
72
+ }
73
+ type Conflict = _Policy.Conflict;
74
+ namespace Conflict {
75
+ type Kind = _Policy.ConflictKind;
76
+ type Operation = _Policy.ConflictOperation;
77
+ type Decision = _Policy.ConflictDecision;
78
+ type Policy = _Policy.ConflictPolicy;
79
+ type Axis = _Policy.ConflictAxis;
80
+ }
81
+ namespace Commit {
82
+ type Wait = _Http.CommitWait;
83
+ type OperationAction = _Http.ModelOperationAction;
84
+ type OperationInput = _Http.CommitOperationInput;
85
+ type CreateOptions = _Http.CommitCreateOptions;
86
+ type Receipt = _Http.CommitReceipt;
87
+ type Client = _Http.CommitResource;
88
+ }
89
+ }
90
+ //# sourceMappingURL=ablo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ablo.d.ts","sourceRoot":"","sources":["../src/ablo.ts"],"names":[],"mappings":"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"}
package/dist/ablo.js ADDED
@@ -0,0 +1,34 @@
1
+ /**
2
+ * `Ablo` — the entry point to the coordination layer.
3
+ *
4
+ * The factory constructs the stateless client: typed model resources, commits,
5
+ * claims, and session minting over request/response HTTP. It holds no socket,
6
+ * no store, and no local copy of anything — the bearer credential is the
7
+ * identity and the server resolves it on every request. This is the client a
8
+ * server-side actor installs: an agent, a worker, a cron job, a route handler.
9
+ *
10
+ * ```ts
11
+ * import { Ablo } from '@abloatai/ablo';
12
+ * import { schema } from './schema';
13
+ *
14
+ * const ablo = Ablo({ schema, apiKey: process.env.ABLO_API_KEY, transport: 'http' });
15
+ * await ablo.tasks.update({ id: taskId, data: { status: 'done' } });
16
+ * ```
17
+ *
18
+ * The reactive materialiser — local store, live queries, presence rendering —
19
+ * is provided by `@abloatai/humans`, which layers
20
+ * above this one and shares the same `ablo.<model>` surface (ADR 0016).
21
+ */
22
+ import { createAbloHttpClient, } from './transport/httpClient.js';
23
+ /**
24
+ * Create a coordination-layer client in one call.
25
+ *
26
+ * The core carries one transport today — request/response HTTP — so
27
+ * `transport: 'http'` is accepted for symmetry with the reactive package's
28
+ * factory and may be omitted. The duplex transport joins this slot when the
29
+ * socket carve lands (ADR 0016, follow-up 3a).
30
+ */
31
+ export function Ablo(options) {
32
+ return createAbloHttpClient(options);
33
+ }
34
+ //# sourceMappingURL=ablo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ablo.js","sourceRoot":"","sources":["../src/ablo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EACL,oBAAoB,GAGrB,MAAM,2BAA2B,CAAC;AAQnC;;;;;;;GAOG;AACH,MAAM,UAAU,IAAI,CAClB,OAA0D;IAE1D,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC"}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Turns a write to one of your models into a Vercel AI SDK tool that handles
3
+ * multi-agent coordination for you, so an agent can contribute to shared state
4
+ * without silently overwriting another writer's concurrent change.
5
+ *
6
+ * The lower-level approach is to write your own `tool()` and call
7
+ * `ablo.<model>.update({ id, data, claim })` inside its `execute` — the right
8
+ * amount of control for a bespoke tool. This helper covers the common case
9
+ * instead: the agent produced some content and you want to save it into a shared
10
+ * row, without re-deriving optimistic concurrency each time. You declare the
11
+ * write:
12
+ *
13
+ * ```ts
14
+ * import { coordinatedTool } from '@abloatai/transaction/ai-sdk';
15
+ * import { z } from 'zod';
16
+ *
17
+ * const saveSection = coordinatedTool(ablo.documents, {
18
+ * description: 'Save your section into the shared document.',
19
+ * inputSchema: z.object({ text: z.string() }),
20
+ * id: () => DOC_ID,
21
+ * apply: (current, { text }) => ({ content: appendBlock(current.content, text) }),
22
+ * // strategy: 'merge' ← the default
23
+ * });
24
+ *
25
+ * await streamText({ model, messages, tools: { saveSection } });
26
+ * ```
27
+ *
28
+ * The {@link CoordinatedToolOptions.apply} function is the whole API: a pure
29
+ * function from the freshest row and the tool input to a patch, in the same
30
+ * spirit as a functional state update. Everything beneath it — reading the latest
31
+ * row, the compare-and-swap, backing off between retries, and releasing claims —
32
+ * is the runtime's job.
33
+ *
34
+ * ## Strategies
35
+ *
36
+ * Choose a strategy by how you want concurrent writers to relate. Each is
37
+ * designed to converge under many agents writing at once.
38
+ *
39
+ * - `'merge'` (the default) delegates to the functional update
40
+ * `ablo.<model>.update(id, current => apply(current, input))`. The runtime
41
+ * re-reads and re-applies `apply` on top of every concurrent write, backing off
42
+ * between rounds, so many agents accumulate into one row and the model never
43
+ * sees a conflict. This requires the model's agent conflict policy to be
44
+ * `reject` (the default, or `agentsReject()`). A model that declares
45
+ * `agentsNotify()` holds the losing write instead of rejecting it, which
46
+ * defeats the reconcile loop — there, use `'claim'` or `'queue'`, or change the
47
+ * policy.
48
+ *
49
+ * - `'claim'` gives mutual exclusion. It takes a fail-fast claim; if another
50
+ * participant holds the row, it returns `{ status: 'claimed' }` and leaves the
51
+ * decision to retry up to the model. A visible signal serves the agent better
52
+ * than a hidden wait when it might spend its turn on something else. Works under
53
+ * any conflict policy.
54
+ *
55
+ * - `'queue'` serializes writers over stateless HTTP. The tool polls to acquire
56
+ * the claim until it is granted or `poll.timeoutMs` elapses, so the model calls
57
+ * once and the tool waits its turn. Ordering is approximate rather than strict
58
+ * first-in-first-out, which would require a persistent connection.
59
+ */
60
+ import type { z } from 'zod';
61
+ import type { ClaimParams, ModelRetrieveParams, ModelUpdateParams } from '../resources/modelOperations.js';
62
+ import type { ModelUpdater, ContentionOptions } from '../resources/functionalUpdate.js';
63
+ import type { HeldClaim } from '../types/streams.js';
64
+ export type CoordinationStrategy = 'merge' | 'claim' | 'queue';
65
+ /** The structured result the tool hands back to the model (or the caller). */
66
+ export interface CoordinatedWriteResult<T> {
67
+ /**
68
+ * `'written'` means the change was saved. `'claimed'` means another participant
69
+ * holds the row, so nothing was saved and the model should try again.
70
+ * `'timeout'` means the `'queue'` strategy could not acquire the row within
71
+ * `poll.timeoutMs`.
72
+ */
73
+ status: 'written' | 'claimed' | 'timeout';
74
+ /** The reconciled row, on `'written'`. */
75
+ row?: T;
76
+ message?: string;
77
+ /** On `'written'` via the `queue` strategy, how long the tool waited in line. */
78
+ waitedMs?: number;
79
+ }
80
+ export interface CoordinatedToolOptions<TInput, T> {
81
+ /** Tool description shown to the model. */
82
+ description: string;
83
+ /** The schema of what the model may send, as a standard AI SDK / Zod input schema. */
84
+ inputSchema: z.ZodType<TInput>;
85
+ /** Which row this write targets, derived from the tool input. */
86
+ id: (input: TInput) => string;
87
+ /**
88
+ * Produces the write patch from the freshest current row and the tool input, as
89
+ * a pure function of the two. Under `'merge'` it re-runs on top of every
90
+ * concurrent write, so it must be idempotent with respect to its own
91
+ * contribution — for example, skip its change when its marker is already
92
+ * present — to stay correct across retries.
93
+ */
94
+ apply: (current: T, input: TInput) => Partial<T>;
95
+ /** How concurrent writers relate. Defaults to `'merge'`. */
96
+ strategy?: CoordinationStrategy;
97
+ /** Human-readable coordination metadata attached to the claim, used by the `'claim'` and `'queue'` strategies. */
98
+ claim?: {
99
+ description?: string;
100
+ };
101
+ /** How many reconcile rounds `'merge'` may take before it gives up with `AbloContentionError`. */
102
+ retries?: number;
103
+ /** Poll interval and overall timeout for `'queue'`. Defaults to 250ms and 30s. */
104
+ poll?: {
105
+ intervalMs?: number;
106
+ timeoutMs?: number;
107
+ };
108
+ }
109
+ /**
110
+ * The small model port this helper needs. Both typed transports implement this
111
+ * exact contract; local-cache methods, wire receipts, and transport lifecycle
112
+ * deliberately stay out of an AI tool's dependency surface.
113
+ */
114
+ export interface CoordinatedModel<T> {
115
+ get(params: ModelRetrieveParams): Promise<T | undefined>;
116
+ /** @deprecated Use `get({ id })`. */
117
+ retrieve?(params: ModelRetrieveParams): Promise<T | undefined>;
118
+ update(params: ModelUpdateParams<T>): Promise<T>;
119
+ update(id: string, updater: ModelUpdater<T>, options?: ContentionOptions): Promise<T | undefined>;
120
+ claim(params: ClaimParams<T>): Promise<HeldClaim<T>>;
121
+ }
122
+ export declare function coordinatedTool<TInput, T = Record<string, unknown>>(model: CoordinatedModel<T>, options: CoordinatedToolOptions<TInput, T>): import("ai").Tool<TInput, CoordinatedWriteResult<T>>;
123
+ //# sourceMappingURL=coordinatedTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coordinatedTool.d.ts","sourceRoot":"","sources":["../../src/ai-sdk/coordinatedTool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0DG;AAGH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,OAAO,KAAK,EACV,WAAW,EACX,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACxF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;AAE/D,8EAA8E;AAC9E,MAAM,WAAW,sBAAsB,CAAC,CAAC;IACvC;;;;;OAKG;IACH,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IAC1C,0CAA0C;IAC1C,GAAG,CAAC,EAAE,CAAC,CAAC;IACR,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iFAAiF;IACjF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB,CAAC,MAAM,EAAE,CAAC;IAC/C,2CAA2C;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,sFAAsF;IACtF,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/B,iEAAiE;IACjE,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC9B;;;;;;OAMG;IACH,KAAK,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IACjD,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,kHAAkH;IAClH,KAAK,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACjC,kGAAkG;IAClG,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kFAAkF;IAClF,IAAI,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACpD;AAID;;;;GAIG;AACH,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,GAAG,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IACzD,qCAAqC;IACrC,QAAQ,CAAC,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAC/D,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACjD,MAAM,CACJ,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EACxB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAC1B,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;CACtD;AAED,wBAAgB,eAAe,CAC7B,MAAM,EACN,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3B,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,sBAAsB,CAAC,MAAM,EAAE,CAAC,CAAC,wDA4EvE"}
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Turns a write to one of your models into a Vercel AI SDK tool that handles
3
+ * multi-agent coordination for you, so an agent can contribute to shared state
4
+ * without silently overwriting another writer's concurrent change.
5
+ *
6
+ * The lower-level approach is to write your own `tool()` and call
7
+ * `ablo.<model>.update({ id, data, claim })` inside its `execute` — the right
8
+ * amount of control for a bespoke tool. This helper covers the common case
9
+ * instead: the agent produced some content and you want to save it into a shared
10
+ * row, without re-deriving optimistic concurrency each time. You declare the
11
+ * write:
12
+ *
13
+ * ```ts
14
+ * import { coordinatedTool } from '@abloatai/transaction/ai-sdk';
15
+ * import { z } from 'zod';
16
+ *
17
+ * const saveSection = coordinatedTool(ablo.documents, {
18
+ * description: 'Save your section into the shared document.',
19
+ * inputSchema: z.object({ text: z.string() }),
20
+ * id: () => DOC_ID,
21
+ * apply: (current, { text }) => ({ content: appendBlock(current.content, text) }),
22
+ * // strategy: 'merge' ← the default
23
+ * });
24
+ *
25
+ * await streamText({ model, messages, tools: { saveSection } });
26
+ * ```
27
+ *
28
+ * The {@link CoordinatedToolOptions.apply} function is the whole API: a pure
29
+ * function from the freshest row and the tool input to a patch, in the same
30
+ * spirit as a functional state update. Everything beneath it — reading the latest
31
+ * row, the compare-and-swap, backing off between retries, and releasing claims —
32
+ * is the runtime's job.
33
+ *
34
+ * ## Strategies
35
+ *
36
+ * Choose a strategy by how you want concurrent writers to relate. Each is
37
+ * designed to converge under many agents writing at once.
38
+ *
39
+ * - `'merge'` (the default) delegates to the functional update
40
+ * `ablo.<model>.update(id, current => apply(current, input))`. The runtime
41
+ * re-reads and re-applies `apply` on top of every concurrent write, backing off
42
+ * between rounds, so many agents accumulate into one row and the model never
43
+ * sees a conflict. This requires the model's agent conflict policy to be
44
+ * `reject` (the default, or `agentsReject()`). A model that declares
45
+ * `agentsNotify()` holds the losing write instead of rejecting it, which
46
+ * defeats the reconcile loop — there, use `'claim'` or `'queue'`, or change the
47
+ * policy.
48
+ *
49
+ * - `'claim'` gives mutual exclusion. It takes a fail-fast claim; if another
50
+ * participant holds the row, it returns `{ status: 'claimed' }` and leaves the
51
+ * decision to retry up to the model. A visible signal serves the agent better
52
+ * than a hidden wait when it might spend its turn on something else. Works under
53
+ * any conflict policy.
54
+ *
55
+ * - `'queue'` serializes writers over stateless HTTP. The tool polls to acquire
56
+ * the claim until it is granted or `poll.timeoutMs` elapses, so the model calls
57
+ * once and the tool waits its turn. Ordering is approximate rather than strict
58
+ * first-in-first-out, which would require a persistent connection.
59
+ */
60
+ import { tool } from 'ai';
61
+ import { AbloClaimedError, AbloNotFoundError } from '@abloatai/transaction/errors';
62
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
63
+ export function coordinatedTool(model, options) {
64
+ const strategy = options.strategy ?? 'merge';
65
+ return tool({
66
+ description: options.description,
67
+ inputSchema: options.inputSchema,
68
+ execute: async (input) => {
69
+ const id = options.id(input);
70
+ if (strategy === 'merge') {
71
+ // Read the freshest row, apply the patch, and commit it with a
72
+ // compare-and-swap; on any concurrent write, re-read and re-apply with
73
+ // backoff. The model never sees a conflict.
74
+ const row = await model.update(id, (current) => options.apply(current, input), {
75
+ retries: options.retries,
76
+ });
77
+ return { status: 'written', row: row ?? undefined };
78
+ }
79
+ // The 'claim' and 'queue' strategies both acquire a claim, write under it,
80
+ // and release it. They differ only in what they do when the row is already
81
+ // held: 'claim' returns a signal to the model, while 'queue' waits and
82
+ // retries by polling to acquire.
83
+ const acquireWriteRelease = async () => {
84
+ const claim = await model.claim({
85
+ id,
86
+ queue: false,
87
+ description: options.claim?.description,
88
+ });
89
+ try {
90
+ const current = await model.get({ id });
91
+ if (current === undefined) {
92
+ throw new AbloNotFoundError(`Cannot write ${id}: it does not exist (or is outside this credential's scope).`, [id]);
93
+ }
94
+ const row = await model.update({ id, data: options.apply(current, input), claim, wait: 'confirmed' });
95
+ return { status: 'written', row };
96
+ }
97
+ finally {
98
+ await claim.release();
99
+ }
100
+ };
101
+ if (strategy === 'claim') {
102
+ try {
103
+ return await acquireWriteRelease();
104
+ }
105
+ catch (e) {
106
+ if (e instanceof AbloClaimedError) {
107
+ return { status: 'claimed', message: 'Another participant holds this row right now — it was NOT saved. Wait briefly and try again.' };
108
+ }
109
+ throw e;
110
+ }
111
+ }
112
+ // strategy === 'queue': poll to acquire the claim over stateless HTTP.
113
+ const interval = options.poll?.intervalMs ?? 250;
114
+ const timeout = options.poll?.timeoutMs ?? 30_000;
115
+ const start = Date.now();
116
+ for (;;) {
117
+ try {
118
+ const result = await acquireWriteRelease();
119
+ return { ...result, waitedMs: Date.now() - start };
120
+ }
121
+ catch (e) {
122
+ if (e instanceof AbloClaimedError) {
123
+ if (Date.now() - start >= timeout) {
124
+ return { status: 'timeout', message: `Could not acquire the row within ${timeout}ms.` };
125
+ }
126
+ await sleep(interval);
127
+ continue;
128
+ }
129
+ throw e;
130
+ }
131
+ }
132
+ },
133
+ });
134
+ }
135
+ //# sourceMappingURL=coordinatedTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coordinatedTool.js","sourceRoot":"","sources":["../../src/ai-sdk/coordinatedTool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { coordinatedTool, type CoordinationStrategy, type CoordinatedModel, type CoordinatedToolOptions, type CoordinatedWriteResult, } from './coordinatedTool.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ai-sdk/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,GAC5B,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { coordinatedTool, } from './coordinatedTool.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ai-sdk/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,GAKhB,MAAM,sBAAsB,CAAC"}