@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
@@ -0,0 +1,165 @@
1
+ /**
2
+ * The auto-heartbeat loop behind `claim({ id, heartbeat: true })` — one
3
+ * implementation shared by both transports (the WebSocket claim stream and the
4
+ * private HTTP transport), so the cadence and failure semantics cannot drift.
5
+ *
6
+ * A beat is the "still working" signal that keeps a lease alive for the
7
+ * duration of real work. The loop's failure handling follows the lease-system
8
+ * convention (SQS visibility heartbeats, Kubernetes leases): a beat that fails
9
+ * for a transient reason — the network blipped, the server was briefly
10
+ * unavailable — is simply retried on the next tick, because the lease has
11
+ * runway to spare by construction (the default cadence is a third of the TTL,
12
+ * so two consecutive beats can fail before the lease is even at risk). Only a
13
+ * definitive answer from the server — the lease lapsed and may have been
14
+ * granted to the next in line ({@link AbloClaimedError}) — stops the loop and
15
+ * surfaces the loss, because for a caller with no push channel the failed beat
16
+ * IS the loss notification.
17
+ */
18
+
19
+ import { AbloClaimedError } from '../errors.js';
20
+ import type {
21
+ ClaimHeartbeat,
22
+ ClaimHeartbeatOptions,
23
+ Duration,
24
+ } from '../types/streams.js';
25
+ import { toMs } from '../utils/duration.js';
26
+
27
+ /**
28
+ * Normalize the public `heartbeat(options?)` argument — a bare Duration is
29
+ * shorthand for `{ ttl }`. Shared by both transports' handle assembly so the
30
+ * shorthand cannot drift.
31
+ */
32
+ export function resolveHeartbeatOptions(
33
+ input: Duration | ClaimHeartbeatOptions | undefined,
34
+ ): ClaimHeartbeatOptions {
35
+ if (input === undefined) return {};
36
+ if (typeof input === 'string' || typeof input === 'number') {
37
+ return { ttl: input };
38
+ }
39
+ return input;
40
+ }
41
+
42
+ /**
43
+ * The structured spelling of the auto-heartbeat — cadence and both callbacks
44
+ * in one place, so the lease axis of a claim is two members (`ttl`,
45
+ * `heartbeat`) rather than four. `true` and a bare Duration remain the
46
+ * shorthands: `heartbeat: '2m'` ≡ `heartbeat: { every: '2m' }`.
47
+ */
48
+ export interface ClaimHeartbeatPlan {
49
+ /** Cadence between beats. Omitted: a third of the TTL, so two beats can
50
+ * fail before the lease is at risk. */
51
+ readonly every?: Duration;
52
+ /** Called after every successful beat (auto or manual) with the server's
53
+ * answer — chiefly `queueDepth`, the cooperative-yield pressure signal. */
54
+ readonly onBeat?: (beat: ClaimHeartbeat) => void;
55
+ /** Called once when a beat learns the lease is no longer yours. The loop
56
+ * has already stopped; abandon the work or re-claim. */
57
+ readonly onLost?: (error: AbloClaimedError) => void;
58
+ }
59
+
60
+ /** What the handle assembly reads, whichever spelling the caller used. */
61
+ export interface ResolvedHeartbeatPlan {
62
+ /** Whether the auto-beat loop runs at all. */
63
+ readonly loop: boolean;
64
+ /** Feed for {@link heartbeatCadenceMs} — `true` means the TTL-derived default. */
65
+ readonly cadence: true | Duration;
66
+ readonly onBeat?: (beat: ClaimHeartbeat) => void;
67
+ readonly onLost?: (error: AbloClaimedError) => void;
68
+ }
69
+
70
+ /**
71
+ * One reading of the heartbeat option, shared by both transports' handle
72
+ * assembly — cadence and callbacks from whichever spelling the caller used
73
+ * (`true`, a bare Duration, or the structured plan).
74
+ */
75
+ export function resolveHeartbeatPlan(options: {
76
+ readonly heartbeat?: true | Duration | ClaimHeartbeatPlan;
77
+ }): ResolvedHeartbeatPlan {
78
+ const { heartbeat } = options;
79
+ if (heartbeat !== undefined && typeof heartbeat === 'object') {
80
+ return {
81
+ loop: true,
82
+ cadence: heartbeat.every ?? true,
83
+ ...(heartbeat.onBeat ? { onBeat: heartbeat.onBeat } : {}),
84
+ ...(heartbeat.onLost ? { onLost: heartbeat.onLost } : {}),
85
+ };
86
+ }
87
+ return {
88
+ loop: Boolean(heartbeat),
89
+ cadence: heartbeat === undefined || heartbeat === true ? true : heartbeat,
90
+ };
91
+ }
92
+
93
+ /**
94
+ * The beat cadence for a lease of `ttlMs`: an explicit duration when the
95
+ * caller set one, otherwise a third of the TTL (floored at 1s) — the
96
+ * DynamoDB-lock-client rule, leaving two missed beats of runway before the
97
+ * lease is at risk while keeping crash recovery within one beat window.
98
+ */
99
+ export function heartbeatCadenceMs(
100
+ ttlMs: number,
101
+ heartbeat: true | Duration,
102
+ ): number {
103
+ if (heartbeat !== true) return toMs(heartbeat);
104
+ return Math.max(Math.floor(ttlMs / 3), 1_000);
105
+ }
106
+
107
+ export interface ClaimHeartbeatLoopOptions {
108
+ /** Send one beat; resolves while the lease is still ours. */
109
+ beat(): Promise<ClaimHeartbeat>;
110
+ /** Cadence between beats. Callers default this to a third of the TTL. */
111
+ intervalMs: number;
112
+ /**
113
+ * Called once when a beat comes back with a definitive loss — the lease
114
+ * expired or was taken. The loop has already stopped by the time this runs.
115
+ */
116
+ onLost?(error: AbloClaimedError): void;
117
+ }
118
+
119
+ /**
120
+ * Start beating. Returns a stop function; callers stop the loop when the
121
+ * claim is released (all held-claim assembly sites tie this to `release`).
122
+ * Beats never overlap: a tick that fires while the previous beat is still
123
+ * in flight is skipped rather than stacked.
124
+ */
125
+ export function startClaimHeartbeatLoop(
126
+ options: ClaimHeartbeatLoopOptions,
127
+ ): () => void {
128
+ let stopped = false;
129
+ let inFlight = false;
130
+
131
+ const stop = (): void => {
132
+ if (stopped) return;
133
+ stopped = true;
134
+ clearInterval(timer);
135
+ };
136
+
137
+ const timer = setInterval(() => {
138
+ if (stopped || inFlight) return;
139
+ inFlight = true;
140
+ options
141
+ .beat()
142
+ .catch((error: unknown) => {
143
+ if (stopped) return;
144
+ if (error instanceof AbloClaimedError) {
145
+ stop();
146
+ options.onLost?.(error);
147
+ return;
148
+ }
149
+ // Transient (connection, brief server unavailability): the next tick
150
+ // is the retry — the ttl/3 cadence leaves runway for missed beats.
151
+ })
152
+ .finally(() => {
153
+ inFlight = false;
154
+ });
155
+ }, options.intervalMs);
156
+ // The loop must never be what keeps a Node process alive — the held work
157
+ // is. A worker that finishes without releasing exits anyway, and the lease
158
+ // lapses on schedule. No-op in browsers (where setInterval returns a number
159
+ // without `unref`), which is why the call is optional even though the Node
160
+ // timer type always has it.
161
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
162
+ timer.unref?.();
163
+
164
+ return stop;
165
+ }
@@ -0,0 +1,56 @@
1
+ /**
2
+ * A claim's application metadata, crossing between the wire and the shape the
3
+ * program declared for it.
4
+ *
5
+ * The wire contract for `meta` is deliberately permissive — `targetRefSchema`
6
+ * parses it as `z.record(z.string(), z.unknown())` and always will, because a
7
+ * newer peer must be able to send a field this build has never heard of and
8
+ * still be understood. The read surface is the opposite: `Register`'s
9
+ * `ClaimMeta` slot names the one shape this program's claims carry, so
10
+ * `claim.state({ id })?.target.meta` reads without a guard.
11
+ *
12
+ * Those two facts meet here, and only here, in both directions. A decode calls
13
+ * {@link declaredMeta} on its way from a parsed record to a public `Claim`; the
14
+ * locator projection calls {@link wireMeta} on the way back out, where a
15
+ * caller's declared value is put on the socket or in the HTTP body. Between
16
+ * them they are the one place the SDK takes the caller's word for a shape it
17
+ * did not check — written down once, with the reason, instead of being asserted
18
+ * at each crossing.
19
+ *
20
+ * The two directions are not symmetric in cost. Losing the declared shape on
21
+ * the way out is harmless, because the wire has always accepted any record;
22
+ * gaining it on the way in is the promise the read surface makes, so
23
+ * `declaredMeta` is the one to audit when a claim reads back a shape its holder
24
+ * never wrote.
25
+ */
26
+
27
+ import type { ResolveClaimMeta } from '../types/global.js';
28
+
29
+ /**
30
+ * Read a parsed `meta` as the declared shape. Call it only where a decode hands
31
+ * a wire value to a public claim, and only for a value already known present —
32
+ * the absent case is an omitted member, not a declared-shaped `undefined`.
33
+ *
34
+ * The exported names are `declaredMeta` and `wireMeta` rather than a `claimMeta`
35
+ * pair because two claim surfaces already read a caller's `meta` back off the
36
+ * options it passed in, and spell that local reader `claimMeta`.
37
+ */
38
+ export function declaredMeta(raw: unknown): ResolveClaimMeta {
39
+ return raw as ResolveClaimMeta;
40
+ }
41
+
42
+ /**
43
+ * Write a declared `meta` as the permissive record the wire carries. Every path
44
+ * from a caller's target to a frame or request body goes through `subTarget`,
45
+ * so this has exactly one caller — widening it is how the declared shape stops
46
+ * being a compile error at the edge of the protocol instead of stopping there.
47
+ *
48
+ * The parameter is `unknown` rather than {@link ResolveClaimMeta} on purpose: a
49
+ * program may register an `interface` for its claim metadata, and an interface
50
+ * carries no implicit index signature, so a directly-typed parameter would make
51
+ * the conversion itself unrepresentable at the one site that needs it. Widening
52
+ * the input is what keeps the assertion single.
53
+ */
54
+ export function wireMeta(meta: unknown): Record<string, unknown> {
55
+ return meta as Record<string, unknown>;
56
+ }
@@ -0,0 +1,86 @@
1
+ /**
2
+ * In-process observation events emitted by the transaction layer's
3
+ * coordination protocol. The wire claim and stale-write contracts live in
4
+ * `coordination/schema.ts`; these two projections are the stable event shapes
5
+ * an observer receives after those frames have been interpreted.
6
+ */
7
+
8
+ import type { ParticipantKind } from '../types/participant.js';
9
+
10
+ export type { ClaimEventReason } from './schema.js';
11
+ import type { ClaimEventReason } from './schema.js';
12
+
13
+ /** The participant that blocked a claim — present on `rejected`. */
14
+ export interface ClaimCounterparty {
15
+ /** Who holds it. */
16
+ actor?: string;
17
+ /**
18
+ * Whether the holder is a person, an agent, or the system — the distinction
19
+ * a caller acts on, since yielding to a person and queueing behind an agent
20
+ * are different decisions. It lives here rather than on the event because
21
+ * only a counterparty has a kind worth reporting: on an acquisition the
22
+ * participant is you, and you already know what you are.
23
+ */
24
+ participantKind?: ParticipantKind;
25
+ /** The lease they hold, so a caller can poll or wait on it by id. */
26
+ claimId?: string;
27
+ /** When their lease lapses without a heartbeat. */
28
+ expiresAt?: number;
29
+ /** What they said they were doing — prose, for a person to read. */
30
+ description?: string;
31
+ }
32
+
33
+ /** A single state transition in the lifecycle of a claim. */
34
+ export interface ClaimEvent {
35
+ phase:
36
+ | 'acquired'
37
+ | 'queued'
38
+ | 'granted'
39
+ | 'lost'
40
+ | 'rejected'
41
+ | 'expired';
42
+ claimId?: string;
43
+ model?: string;
44
+ id?: string;
45
+ field?: string;
46
+ actor?: string;
47
+ position?: number;
48
+ /**
49
+ * What this claim's holder said they were doing — prose, written for a
50
+ * person. Separate from {@link ClaimEvent.reason}, which is machine-readable
51
+ * and only ever says why a claim ended. One field used to carry both, so an
52
+ * `acquired` event's "reason" was really a description and a `rejected`
53
+ * event's was really a cause.
54
+ */
55
+ description?: string;
56
+ /** Why the claim ended or was refused. Absent while it is simply alive. */
57
+ reason?: ClaimEventReason;
58
+ /**
59
+ * A policy's own words when a policy decided the outcome — free text by
60
+ * nature, and kept beside the closed {@link ClaimEvent.reason} rather than
61
+ * collapsed into it.
62
+ */
63
+ policyReason?: string;
64
+ /**
65
+ * Who blocked this claim. Present on `rejected`, where the wire already
66
+ * carried the holder and this projection used to discard it.
67
+ */
68
+ heldBy?: ClaimCounterparty;
69
+ }
70
+
71
+ /** A committed notify-instead-of-abort stale-write collision. */
72
+ export interface ConflictEvent {
73
+ clientTxId: string;
74
+ rows: readonly {
75
+ model: string;
76
+ id: string;
77
+ fields: readonly string[];
78
+ writtenBy?: ParticipantKind;
79
+ }[];
80
+ }
81
+
82
+ /** The narrow behavior a transaction-layer coordination observer implements. */
83
+ export interface CoordinationObserver {
84
+ captureClaim(event: ClaimEvent): void;
85
+ captureConflict(event: ConflictEvent): void;
86
+ }
@@ -0,0 +1,181 @@
1
+ /**
2
+ * The `@abloatai/transaction/coordination` entry point. It re-exports the wire
3
+ * schemas and inferred types for the three coordination layers: presence (who
4
+ * is currently active), claims (taking exclusive hold of a target before
5
+ * writing it), and stale-context guards (rejecting a write that was based on an
6
+ * out-of-date read). The definitions themselves live in the sibling schema
7
+ * module.
8
+ *
9
+ * Exports are listed by name rather than re-exported wholesale, so every symbol
10
+ * that becomes part of this package's public API is a deliberate choice.
11
+ */
12
+
13
+ // Runtime schemas + helpers.
14
+ export {
15
+ // Shared primitives
16
+ participantKindSchema,
17
+ wireParticipantKindSchema,
18
+ participantKindFromWire,
19
+ descriptionFromMeta,
20
+ claimDescription,
21
+ DEFAULT_CLAIM_DESCRIPTION,
22
+ targetRefSchema,
23
+ // Layer 3 — optimistic stale-context
24
+ onStaleModeSchema,
25
+ writeGuardSchema,
26
+ staleNotificationSchema,
27
+ readDependencySchema,
28
+ trackDependencySchema,
29
+ // Layer 2 — pessimistic claim / claim-lease
30
+ claimStatusSchema,
31
+ wireClaimStatusSchema,
32
+ wireClaimSummarySchema,
33
+ claimErrorSchema,
34
+ wireClaimSchema,
35
+ claimRejectionSchema,
36
+ // The rest of the claim frames, each the validation boundary for one
37
+ // server-sent event — see WS_INBOUND_FRAMES for where they are applied.
38
+ claimLostSchema,
39
+ claimAcquiredSchema,
40
+ claimGrantedSchema,
41
+ claimQueuedSchema,
42
+ claimQueueSchema,
43
+ claimQueueEntrySchema,
44
+ claimExpiredSchema,
45
+ claimEventReasonSchema,
46
+ modelTargetSchema,
47
+ // The one claim record, and the peer-visible projection of it.
48
+ claimRecordSchema,
49
+ heldClaimStatusSchema,
50
+ modelClaimSchema,
51
+ claimBeginPayloadSchema,
52
+ claimAbandonPayloadSchema,
53
+ claimReorderPayloadSchema,
54
+ claimHeartbeatPayloadSchema,
55
+ claimHeartbeatAckPayloadSchema,
56
+ claimHeartbeatBatchPayloadSchema,
57
+ claimHeartbeatBatchAckPayloadSchema,
58
+ // Read interest — what a connection receives, leased (`claim`/`release`,
59
+ // the frames behind `join`) and unleased (`update_subscription`).
60
+ MAX_FRAME_SYNC_GROUPS,
61
+ participantClaimPayloadSchema,
62
+ participantReleasePayloadSchema,
63
+ updateSubscriptionPayloadSchema,
64
+ subscriptionAckPayloadSchema,
65
+ // Commit operation — carries the optimistic write-guard
66
+ commitOperationTypeSchema,
67
+ commitOperationSchema,
68
+ // Layer 1 — presence
69
+ presenceKindSchema,
70
+ presenceActivitySchema,
71
+ presenceUpdateSchema,
72
+ presenceUpdatePayloadSchema,
73
+ // Deprecated alias, removed in 0.36.0 — this line publishes it.
74
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
75
+ presenceUpdateFrameSchema,
76
+ } from './schema.js';
77
+
78
+ // Conflict-policy runtime — the engine detects a conflict, and the policy
79
+ // decides what to do about it. These are re-exported here so that server-side
80
+ // code can reach both the coordination vocabulary and its default conflict
81
+ // resolution from this one subpath, without importing the full client from the
82
+ // package root.
83
+ export { defaultPolicy, capabilityPreemptPolicy, interpretConflictAxis } from '../policy/types.js';
84
+ export type {
85
+ Conflict,
86
+ ConflictAxis,
87
+ ConflictDecision,
88
+ ConflictKind,
89
+ ConflictOperation,
90
+ ConflictPolicy,
91
+ StaleContextConflict,
92
+ ClaimHeldConflict,
93
+ } from '../policy/types.js';
94
+
95
+ // Inferred types, one per schema (plus the standalone aliases).
96
+ export type {
97
+ // Shared primitives
98
+ ParticipantKind,
99
+ TargetRef,
100
+ // Layer 3 — optimistic stale-context
101
+ OnStaleMode,
102
+ WriteGuard,
103
+ StaleNotification,
104
+ ReadDependency,
105
+ TrackDependency,
106
+ // Layer 2 — pessimistic claim / claim-lease
107
+ ClaimStatus,
108
+ WireClaimStatus,
109
+ WireClaimSummary,
110
+ ClaimError,
111
+ WireClaim,
112
+ ClaimRejection,
113
+ ClaimLost,
114
+ ClaimAcquired,
115
+ ClaimGranted,
116
+ ClaimQueued,
117
+ ClaimQueue,
118
+ ClaimQueueEntry,
119
+ ClaimExpired,
120
+ ClaimEventReason,
121
+ ModelTarget,
122
+ ClaimRecord,
123
+ HeldClaimStatus,
124
+ ModelClaim,
125
+ ClaimBeginPayload,
126
+ ClaimAbandonPayload,
127
+ ClaimReorderPayload,
128
+ ClaimHeartbeatPayload,
129
+ ClaimHeartbeatAckPayload,
130
+ ClaimHeartbeatBatchPayload,
131
+ ClaimHeartbeatBatchAckPayload,
132
+ // Read interest — leased and unleased
133
+ ParticipantClaimPayload,
134
+ ParticipantReleasePayload,
135
+ UpdateSubscriptionPayload,
136
+ SubscriptionAckPayload,
137
+ // Commit operation — carries the optimistic write-guard
138
+ CommitOperationType,
139
+ CommitOperation,
140
+ AnyCommitOperation,
141
+ // Layer 1 — presence
142
+ PresenceKind,
143
+ PresenceActivity,
144
+ PresenceUpdate,
145
+ PresenceUpdatePayload,
146
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
147
+ PresenceUpdateFrame,
148
+ } from './schema.js';
149
+
150
+ // In-process observation events. These are behavior-facing projections, not
151
+ // duplicate wire declarations; the wire contracts remain in schema.ts.
152
+ export type {
153
+ ClaimEvent,
154
+ ClaimCounterparty,
155
+ ConflictEvent,
156
+ CoordinationObserver,
157
+ } from './events.js';
158
+
159
+ // The conflict rule itself — whether two claims on one row collide. It is the
160
+ // protocol's decision, not the server's deployment of it, so it lives here and
161
+ // every claim authority imports it.
162
+ export { targetsConflict } from './targetConflict.js';
163
+
164
+ // The locator itself — what a claim points at, and the projections that keep
165
+ // its three entity spellings (`entityType`/`entityId`, `model`/`id`,
166
+ // `type`/`id`) saying the same thing while they coexist.
167
+ export type {
168
+ BatchFence,
169
+ ClaimTargetDetails,
170
+ ClaimTargetSource,
171
+ EntityLocator,
172
+ } from './locator.js';
173
+ export {
174
+ batchFence,
175
+ fenceTokenFor,
176
+ isTargetTuple,
177
+ subTarget,
178
+ wireTarget,
179
+ modelTarget,
180
+ streamTarget,
181
+ } from './locator.js';
@@ -0,0 +1,200 @@
1
+ /**
2
+ * The locator — what a claim points at, in every spelling it travels under.
3
+ *
4
+ * A target has two halves. The sub-entity half (`path`, `range`, `field`,
5
+ * `fields`, `meta`) is spelled identically everywhere; the entity half is not.
6
+ * It is `entityType`/`entityId` on the wire, `model`/`id` on the HTTP DTO and
7
+ * the SDK's model surface, and `type`/`id` on the claim handle and the wait
8
+ * line. The three coexist deliberately — unifying them changes every surface at
9
+ * once, and that is scheduled behind the protocol version — but while they
10
+ * coexist, the translation between them belongs in one place.
11
+ *
12
+ * It was copied member by member at more than twenty sites instead, which is
13
+ * how `fields` came to be added to the schema and to the conflict rule while
14
+ * several hops quietly dropped it: the rule learned to compare field sets while
15
+ * no path carried one, so the fix looked complete and changed nothing. Widening
16
+ * the locator again should touch this module and the schema, not every hop.
17
+ */
18
+
19
+ import type { ClaimPart, ModelTarget, TargetRef, WireClaim } from './schema.js';
20
+ import {
21
+ fieldSelection,
22
+ type FieldRef,
23
+ type FieldSelector,
24
+ } from '../schema/fieldRef.js';
25
+ import { partName } from './schema.js';
26
+ import type { ClaimTarget, PresenceTarget } from '../types/streams.js';
27
+ import type { ResolveClaimMeta } from '../types/global.js';
28
+ // The one declared→wire conversion for claim metadata; `declaredMeta` is its
29
+ // counterpart, called by the decodes that build a public claim.
30
+ import { wireMeta } from './claimMeta.js';
31
+
32
+ /**
33
+ * The part of a claim that narrows it below the whole entity. A claim with none
34
+ * of these set is a claim on the entity itself.
35
+ *
36
+ * `meta` is carried because it travels with the target everywhere else, not
37
+ * because the rule reads it: application metadata is opaque to coordination and
38
+ * never decides a conflict.
39
+ */
40
+ export type ClaimTargetDetails = Pick<
41
+ WireClaim,
42
+ 'field' | 'fields' | 'meta'
43
+ >;
44
+
45
+ /**
46
+ * A locator as a *caller* may hold it — identical to {@link ClaimTargetDetails}
47
+ * except that `meta` may already be the shape the program registered on
48
+ * `Register`'s `ClaimMeta` slot, which an `interface` registration makes
49
+ * distinct from the wire's open record.
50
+ *
51
+ * A projection that only accepted the wire spelling would push the conversion
52
+ * back out to every call site that starts from a public target — the claim
53
+ * handle, the model surface, the HTTP claim params — which is the same
54
+ * member-by-member copying this module exists to end.
55
+ */
56
+ export type ClaimTargetSource<T = Record<string, unknown>> =
57
+ Omit<ClaimTargetDetails, 'meta' | 'field' | 'fields'> & {
58
+ /** A schema field reference, wire name, or low-level app-defined part. */
59
+ readonly field?: string | ClaimPart | FieldRef;
60
+ readonly fields?:
61
+ | readonly (string | ClaimPart | FieldRef)[]
62
+ | FieldSelector<T>;
63
+ readonly meta?: ClaimTargetDetails['meta'] | ResolveClaimMeta;
64
+ };
65
+
66
+ /**
67
+ * Copy the sub-entity part of a locator from one target shape to another.
68
+ *
69
+ * These five members are spelled identically wherever a target appears, so this
70
+ * owns all of them and the entity half is handled by its own projections below.
71
+ *
72
+ * Absent members are omitted rather than set to `undefined`, so a projected
73
+ * target can be spread into an object under `exactOptionalPropertyTypes`.
74
+ *
75
+ * The result is wire-shaped, `meta` included: this is the projection every path
76
+ * out of the SDK goes through, so it is also the single declared→wire crossing
77
+ * for claim metadata. The way back is {@link declaredMeta}, at the two decodes
78
+ * that build a public claim.
79
+ */
80
+ export function subTarget<T = Record<string, unknown>>(
81
+ // `null` as well as absent, because the claim body declares its target
82
+ // nullish and the projection is most useful exactly where that body is read.
83
+ source: ClaimTargetSource<T> | null | undefined,
84
+ model?: string,
85
+ ): ClaimTargetDetails {
86
+ if (!source) return {};
87
+ const selection =
88
+ typeof source.fields === 'function'
89
+ ? source.fields(fieldSelection(model ?? ''))
90
+ : source.fields;
91
+ const selectedFields =
92
+ selection === undefined
93
+ ? undefined
94
+ : Array.isArray(selection)
95
+ ? selection
96
+ : [selection];
97
+ return {
98
+ // Part names cross to their wire spelling here — the one declared→wire
99
+ // seam — so a `part('B2')` object never leaks into a frame or a URL.
100
+ ...(source.field !== undefined ? { field: partName(source.field) } : {}),
101
+ ...(selectedFields !== undefined ? { fields: selectedFields.map(partName) } : {}),
102
+ ...(source.meta !== undefined ? { meta: wireMeta(source.meta) } : {}),
103
+ };
104
+ }
105
+
106
+ /**
107
+ * Whether a target was given in the `[type, id]` shorthand rather than the
108
+ * object form.
109
+ *
110
+ * A predicate rather than an assertion, because `Array.isArray` leaves a
111
+ * readonly tuple in both branches and the alternative — asserting the object
112
+ * form — describes the locator by hand at every call site that resolves one.
113
+ */
114
+ export function isTargetTuple(
115
+ target: PresenceTarget,
116
+ ): target is readonly [type: string, id: string] {
117
+ return Array.isArray(target);
118
+ }
119
+
120
+ /**
121
+ * An entity named in any of the three spellings a claim travels under.
122
+ *
123
+ * The union is discriminated by which key is present, and `{ model, id }` and
124
+ * `{ type, id }` share `id` — so the read below tests `entityType` first, then
125
+ * `model`, and falls through to `type`. A source carrying both `model` and
126
+ * `type` is not expressible here and does not occur; it would take the earlier
127
+ * branch if it did.
128
+ */
129
+ export type EntityLocator =
130
+ | Pick<TargetRef, 'entityType' | 'entityId'>
131
+ | Pick<ModelTarget, 'model' | 'id'>
132
+ | Pick<ClaimTarget, 'type' | 'id'>;
133
+
134
+ /** The entity as a name and an identifier, whichever spelling named it. */
135
+ function entityOf(source: EntityLocator): readonly [string, string] {
136
+ if ('entityType' in source) return [source.entityType, source.entityId];
137
+ if ('model' in source) return [source.model, source.id];
138
+ return [source.type, source.id];
139
+ }
140
+
141
+ /** The entity half in the wire's spelling — claim frames, presence activity. */
142
+ export function wireTarget(
143
+ source: EntityLocator,
144
+ ): Pick<TargetRef, 'entityType' | 'entityId'> {
145
+ const [entityType, entityId] = entityOf(source);
146
+ return { entityType, entityId };
147
+ }
148
+
149
+ /** The entity half in the spelling SDK callers and the HTTP routes read. */
150
+ export function modelTarget(
151
+ source: EntityLocator,
152
+ ): Pick<ModelTarget, 'model' | 'id'> {
153
+ const [model, id] = entityOf(source);
154
+ return { model, id };
155
+ }
156
+
157
+ /** The entity half as the claim handle and the wait line carry it. */
158
+ export function streamTarget(
159
+ source: EntityLocator,
160
+ ): Pick<ClaimTarget, 'type' | 'id'> {
161
+ const [type, id] = entityOf(source);
162
+ return { type, id };
163
+ }
164
+
165
+ /**
166
+ * A batch claim's grant: its fencing token, and the one row it was granted over.
167
+ *
168
+ * A claim's `readAt` generalises across a batch; its token does not. The token
169
+ * is evidence of one row's place in the grant order, so it belongs only on the
170
+ * operation writing the row the claim covers. Presented anywhere else the server
171
+ * refuses it, because a token that travels is a fence any writer can raise.
172
+ */
173
+ export type BatchFence = Pick<ModelTarget, 'model' | 'id'> & {
174
+ readonly token: number;
175
+ };
176
+
177
+ /** The batch's grant, or nothing when there is no claim, or none with a token. */
178
+ export function batchFence(
179
+ source: EntityLocator | null | undefined,
180
+ token: number | null | undefined,
181
+ ): BatchFence | null {
182
+ return source == null || token == null
183
+ ? null
184
+ : { ...modelTarget(source), token };
185
+ }
186
+
187
+ /**
188
+ * The token an operation carries: its own if it names one, the batch's when it
189
+ * writes the claimed row, otherwise none.
190
+ */
191
+ export function fenceTokenFor(
192
+ fence: BatchFence | null,
193
+ model: string,
194
+ id: string | null,
195
+ ): number | null {
196
+ if (fence === null || id === null) return null;
197
+ return model.toLowerCase() === fence.model.toLowerCase() && id === fence.id
198
+ ? fence.token
199
+ : null;
200
+ }