@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,56 @@
1
+ /**
2
+ * A small, dependency-free primitive that coalesces work into batches.
3
+ *
4
+ * It accumulates items enqueued close together — the common case being a
5
+ * synchronous burst such as `Promise.all([ a(), b(), c() ])` within one
6
+ * event-loop tick — and dispatches them as a single batch rather than one call
7
+ * each. It is a pure state machine: it stages items on the microtask queue,
8
+ * flushes on size, cost, or time triggers, and applies in-flight backpressure,
9
+ * with no dependency on any data model, storage layer, or network. You supply
10
+ * the dispatch function through {@link BatchSchedulerHooks}.
11
+ *
12
+ * Guarantees:
13
+ * - each batch is a single `dispatchBatch(items)` call, applied atomically.
14
+ * - if a dispatch fails, every enqueued promise in that batch rejects with
15
+ * the same error.
16
+ * - items dispatch in enqueue order, optionally reordered by `compare` just
17
+ * before a batch is cut; batches run first-in, first-out under a
18
+ * `maxInFlight` cap.
19
+ */
20
+ export interface BatchSchedulerOptions<T> {
21
+ /** Master switch. When false, every `enqueue` dispatches solo immediately. Default true. */
22
+ readonly enabled?: boolean;
23
+ /** Coalescing window in ms. `0` (default) → flush on the next microtask (zero added latency). */
24
+ readonly windowMs?: number;
25
+ /** Max items per batch before a forced flush. Default 256. */
26
+ readonly maxBatchSize?: number;
27
+ /** Max accumulated `costOf` per batch before a forced flush. Default `Infinity` (disabled). */
28
+ readonly maxBatchCost?: number;
29
+ /** Per-item cost used by `maxBatchCost` (e.g. serialized bytes). Default `() => 0`. */
30
+ readonly costOf?: (item: T) => number;
31
+ /** Max dispatches in flight at once (backpressure). Default 1 → strictly ordered. */
32
+ readonly maxInFlight?: number;
33
+ }
34
+ export interface BatchSchedulerHooks<T, R> {
35
+ /** The single dispatch for one batch. One call → atomic at this layer. */
36
+ dispatchBatch(items: T[]): Promise<R>;
37
+ /**
38
+ * Optional ordering applied to the staged items just before a batch is cut —
39
+ * for example, to send parent rows ahead of the rows that reference them. Omit
40
+ * for first-in, first-out order. This changes only the order of items within
41
+ * the dispatched array, not which items share a batch.
42
+ */
43
+ compare?(a: T, b: T): number;
44
+ }
45
+ export interface BatchScheduler<T, R> {
46
+ /** Stage one item; resolves with its batch's dispatch result, or rejects with the batch error. */
47
+ enqueue(item: T): Promise<R>;
48
+ /** Stage an item that must dispatch in a batch of its own — for example, one carrying an explicit idempotency key. */
49
+ enqueueSolo(item: T): Promise<R>;
50
+ /** Force-flush the pending batch and resolve once everything in flight has settled. */
51
+ flush(): Promise<void>;
52
+ /** Stop scheduling and clear timers. Pending/in-flight promises still settle. */
53
+ dispose(): void;
54
+ }
55
+ export declare function createBatchScheduler<T, R>(hooks: BatchSchedulerHooks<T, R>, options?: BatchSchedulerOptions<T>): BatchScheduler<T, R>;
56
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/batching/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACtC,4FAA4F;IAC5F,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,iGAAiG;IACjG,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,8DAA8D;IAC9D,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,+FAA+F;IAC/F,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,uFAAuF;IACvF,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;IACtC,qFAAqF;IACrF,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,mBAAmB,CAAC,CAAC,EAAE,CAAC;IACvC,0EAA0E;IAC1E,aAAa,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACtC;;;;;OAKG;IACH,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc,CAAC,CAAC,EAAE,CAAC;IAClC,kGAAkG;IAClG,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC7B,sHAAsH;IACtH,WAAW,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACjC,uFAAuF;IACvF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,iFAAiF;IACjF,OAAO,IAAI,IAAI,CAAC;CACjB;AAaD,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,CAAC,EACvC,KAAK,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,EAChC,OAAO,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,GACjC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CA+HtB"}
@@ -0,0 +1,148 @@
1
+ /**
2
+ * A small, dependency-free primitive that coalesces work into batches.
3
+ *
4
+ * It accumulates items enqueued close together — the common case being a
5
+ * synchronous burst such as `Promise.all([ a(), b(), c() ])` within one
6
+ * event-loop tick — and dispatches them as a single batch rather than one call
7
+ * each. It is a pure state machine: it stages items on the microtask queue,
8
+ * flushes on size, cost, or time triggers, and applies in-flight backpressure,
9
+ * with no dependency on any data model, storage layer, or network. You supply
10
+ * the dispatch function through {@link BatchSchedulerHooks}.
11
+ *
12
+ * Guarantees:
13
+ * - each batch is a single `dispatchBatch(items)` call, applied atomically.
14
+ * - if a dispatch fails, every enqueued promise in that batch rejects with
15
+ * the same error.
16
+ * - items dispatch in enqueue order, optionally reordered by `compare` just
17
+ * before a batch is cut; batches run first-in, first-out under a
18
+ * `maxInFlight` cap.
19
+ */
20
+ export function createBatchScheduler(hooks, options) {
21
+ const enabled = options?.enabled ?? true;
22
+ const windowMs = options?.windowMs ?? 0;
23
+ const maxBatchSize = options?.maxBatchSize ?? 256;
24
+ const maxBatchCost = options?.maxBatchCost ?? Infinity;
25
+ const costOf = options?.costOf ?? (() => 0);
26
+ const maxInFlight = options?.maxInFlight ?? 1;
27
+ let pending = null;
28
+ let timer = null;
29
+ let microtaskScheduled = false;
30
+ const ready = [];
31
+ let inFlight = 0;
32
+ let idleWaiters = [];
33
+ let disposed = false;
34
+ function scheduleFlush() {
35
+ if (microtaskScheduled || timer)
36
+ return;
37
+ if (windowMs > 0) {
38
+ timer = setTimeout(() => {
39
+ timer = null;
40
+ flushPending();
41
+ }, windowMs);
42
+ }
43
+ else {
44
+ microtaskScheduled = true;
45
+ queueMicrotask(() => {
46
+ microtaskScheduled = false;
47
+ flushPending();
48
+ });
49
+ }
50
+ }
51
+ function flushPending() {
52
+ if (timer) {
53
+ clearTimeout(timer);
54
+ timer = null;
55
+ }
56
+ microtaskScheduled = false;
57
+ if (!pending)
58
+ return;
59
+ if (hooks.compare)
60
+ pending.items.sort(hooks.compare);
61
+ ready.push(pending);
62
+ pending = null;
63
+ pump();
64
+ }
65
+ function pump() {
66
+ while (inFlight < maxInFlight && ready.length > 0) {
67
+ const batch = ready.shift();
68
+ if (!batch)
69
+ break;
70
+ inFlight++;
71
+ let dispatched;
72
+ try {
73
+ dispatched = hooks.dispatchBatch(batch.items);
74
+ }
75
+ catch (error) {
76
+ dispatched = Promise.reject(error);
77
+ }
78
+ dispatched
79
+ .then((result) => {
80
+ for (const d of batch.deferreds)
81
+ d.resolve(result);
82
+ }, (error) => {
83
+ for (const d of batch.deferreds)
84
+ d.reject(error);
85
+ })
86
+ .finally(() => {
87
+ inFlight--;
88
+ pump();
89
+ notifyIdleIfDrained();
90
+ });
91
+ }
92
+ }
93
+ function notifyIdleIfDrained() {
94
+ if (inFlight === 0 && ready.length === 0 && idleWaiters.length > 0) {
95
+ const waiters = idleWaiters;
96
+ idleWaiters = [];
97
+ for (const w of waiters)
98
+ w();
99
+ }
100
+ }
101
+ function enqueueSolo(item) {
102
+ return new Promise((resolve, reject) => {
103
+ ready.push({ items: [item], deferreds: [{ resolve, reject }], cost: costOf(item) });
104
+ pump();
105
+ });
106
+ }
107
+ function enqueue(item) {
108
+ if (disposed)
109
+ return Promise.reject(new Error('batch scheduler disposed'));
110
+ if (!enabled)
111
+ return enqueueSolo(item);
112
+ const cost = costOf(item);
113
+ return new Promise((resolve, reject) => {
114
+ const deferred = { resolve, reject };
115
+ // Rollover: if appending would blow a cap, flush the current batch first.
116
+ if (pending && (pending.items.length + 1 > maxBatchSize || pending.cost + cost > maxBatchCost)) {
117
+ flushPending();
118
+ }
119
+ if (!pending)
120
+ pending = { items: [], deferreds: [], cost: 0 };
121
+ pending.items.push(item);
122
+ pending.deferreds.push(deferred);
123
+ pending.cost += cost;
124
+ if (pending.items.length >= maxBatchSize || pending.cost >= maxBatchCost) {
125
+ flushPending();
126
+ }
127
+ else {
128
+ scheduleFlush();
129
+ }
130
+ });
131
+ }
132
+ async function flush() {
133
+ flushPending();
134
+ while (ready.length > 0 || inFlight > 0) {
135
+ await new Promise((resolve) => idleWaiters.push(resolve));
136
+ }
137
+ }
138
+ function dispose() {
139
+ disposed = true;
140
+ if (timer) {
141
+ clearTimeout(timer);
142
+ timer = null;
143
+ }
144
+ microtaskScheduled = false;
145
+ }
146
+ return { enqueue, enqueueSolo, flush, dispose };
147
+ }
148
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/batching/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Waits for a queued claim to reach the head of the line — the client side of
3
+ * the fair-queue handover. When a claim is contended, the server puts it in a
4
+ * queue and replies that it is queued (HTTP 202 on `/v1/claims`, or a
5
+ * `claim_queued` frame over the WebSocket). The grant is delivered later, when
6
+ * the claim reaches the head, as a `claim_granted` frame. This resolves once
7
+ * that frame arrives for the given `claimId`, so the caller's `claim` promise
8
+ * stays pending — event-driven, with no polling — until it is actually the
9
+ * caller's turn. It rejects if the claim is lost (`claim_lost`: taken away by a
10
+ * TTL lapse on disconnect, or revoked) or if an optional timeout elapses.
11
+ *
12
+ * It needs only a minimal `{ subscribe }` transport, so it can be tested
13
+ * against a fake; the duplex `WsTransport` satisfies it.
14
+ */
15
+ import { type Logger } from '../logger.js';
16
+ export interface GrantTransport {
17
+ subscribe(event: 'claim_acquired' | 'claim_granted' | 'claim_lost' | 'claim_queued' | 'claim_rejected', handler: (payload: Record<string, unknown>) => void): () => void;
18
+ }
19
+ export interface ClaimGrantInfo {
20
+ /**
21
+ * True when the grant arrived as `claim_granted` — the target was held when
22
+ * the caller asked, and the caller waited in the FIFO line behind the holder.
23
+ * False for the immediate `claim_acquired`, where the target was free.
24
+ *
25
+ * Callers read this to know the row may have changed while they queued. Claim
26
+ * visibility is scoped to the entity, so a broad, organization-wide
27
+ * subscription receives no presence or claim fan-out, and the local
28
+ * coordination snapshot cannot be trusted to tell whether the caller waited.
29
+ * The grant frame itself is the authoritative signal.
30
+ */
31
+ readonly waited: boolean;
32
+ /**
33
+ * The fencing token the server minted for this grant (Option B), read off the
34
+ * grant frame — the authoritative source, since the token is server-stamped.
35
+ * `undefined` when the server does not fence (no minter wired).
36
+ */
37
+ readonly fenceToken?: number;
38
+ }
39
+ export declare function awaitClaimGrant(transport: GrantTransport, claimId: string, options?: {
40
+ timeoutMs?: number;
41
+ /**
42
+ * Backpressure: reject instead of waiting if, when we join the line, the
43
+ * server reports `position >= maxQueueDepth` (i.e. that many claims are
44
+ * already ahead of us). Omit to wait however deep the queue is.
45
+ */
46
+ maxQueueDepth?: number;
47
+ /**
48
+ * Abort the wait from outside — the same signal that cancels everything
49
+ * else in the program. Rejects with `claim_wait_aborted`; once the grant
50
+ * has arrived the signal is ignored, so a held lease is never torn down
51
+ * by a late abort.
52
+ */
53
+ signal?: AbortSignal;
54
+ /** Where grant transitions are logged. Defaults to silent. */
55
+ logger?: Logger;
56
+ }): Promise<ClaimGrantInfo>;
57
+ //# sourceMappingURL=awaitClaimGrant.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"awaitClaimGrant.d.ts","sourceRoot":"","sources":["../../src/coordination/awaitClaimGrant.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAWH,OAAO,EAAc,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAEvD,MAAM,WAAW,cAAc;IAC7B,SAAS,CACP,KAAK,EACD,gBAAgB,GAChB,eAAe,GACf,YAAY,GACZ,cAAc,GACd,gBAAgB,EACpB,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GAClD,MAAM,IAAI,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAOD,wBAAgB,eAAe,CAC7B,SAAS,EAAE,cAAc,EACzB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;IACR,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GACA,OAAO,CAAC,cAAc,CAAC,CA6JzB"}
@@ -0,0 +1,138 @@
1
+ /**
2
+ * Waits for a queued claim to reach the head of the line — the client side of
3
+ * the fair-queue handover. When a claim is contended, the server puts it in a
4
+ * queue and replies that it is queued (HTTP 202 on `/v1/claims`, or a
5
+ * `claim_queued` frame over the WebSocket). The grant is delivered later, when
6
+ * the claim reaches the head, as a `claim_granted` frame. This resolves once
7
+ * that frame arrives for the given `claimId`, so the caller's `claim` promise
8
+ * stays pending — event-driven, with no polling — until it is actually the
9
+ * caller's turn. It rejects if the claim is lost (`claim_lost`: taken away by a
10
+ * TTL lapse on disconnect, or revoked) or if an optional timeout elapses.
11
+ *
12
+ * It needs only a minimal `{ subscribe }` transport, so it can be tested
13
+ * against a fake; the duplex `WsTransport` satisfies it.
14
+ */
15
+ import { AbloClaimedError, AbloValidationError, CapabilityError, formatClaimedErrorMessage, claimTargetLabel, } from '../errors.js';
16
+ import { modelTarget } from './locator.js';
17
+ import { noopLogger } from '../logger.js';
18
+ /** Read the server-stamped fencing token off a grant frame, if present. */
19
+ function readFenceToken(p) {
20
+ return typeof p.fenceToken === 'number' ? p.fenceToken : undefined;
21
+ }
22
+ export function awaitClaimGrant(transport, claimId, options) {
23
+ const logger = options?.logger ?? noopLogger;
24
+ return new Promise((resolve, reject) => {
25
+ const unsubs = [];
26
+ let timer;
27
+ const settle = (fn) => {
28
+ if (timer)
29
+ clearTimeout(timer);
30
+ for (const u of unsubs)
31
+ u();
32
+ fn();
33
+ };
34
+ // The target was free → `claim_acquired` (immediate); it was contended,
35
+ // we waited in line, and reached the head → `claim_granted`. Either frame
36
+ // means the lease is now ours; `waited` records which path it was.
37
+ unsubs.push(transport.subscribe('claim_acquired', (p) => {
38
+ if (p?.claimId === claimId) {
39
+ logger.debug(`claim: acquired ${claimId} (target was free)`);
40
+ const fenceToken = readFenceToken(p);
41
+ settle(() => {
42
+ resolve({ waited: false, ...(fenceToken !== undefined ? { fenceToken } : {}) });
43
+ });
44
+ }
45
+ }));
46
+ unsubs.push(transport.subscribe('claim_granted', (p) => {
47
+ if (p?.claimId === claimId) {
48
+ // Promoted to the head of the line — the creator's "it's the agent's
49
+ // turn now" moment after waiting behind a holder.
50
+ logger.info(`claim: granted ${claimId} — your turn (waited in queue)`);
51
+ const fenceToken = readFenceToken(p);
52
+ settle(() => {
53
+ resolve({ waited: true, ...(fenceToken !== undefined ? { fenceToken } : {}) });
54
+ });
55
+ }
56
+ }));
57
+ if (options?.maxQueueDepth !== undefined) {
58
+ const max = options.maxQueueDepth;
59
+ unsubs.push(transport.subscribe('claim_queued', (p) => {
60
+ if (p?.claimId !== claimId)
61
+ return;
62
+ const position = typeof p.position === 'number' ? p.position : 0;
63
+ if (position >= max) {
64
+ settle(() => {
65
+ reject(new AbloClaimedError(`Claim queue for ${claimId} is ${position} deep (max ${max}).`, { code: 'queue_too_deep' }));
66
+ });
67
+ }
68
+ }));
69
+ }
70
+ unsubs.push(transport.subscribe('claim_rejected', (p) => {
71
+ const rejection = p;
72
+ if (rejection.claimId !== claimId)
73
+ return;
74
+ const target = rejection.target
75
+ ? claimTargetLabel({
76
+ ...modelTarget(rejection.target),
77
+ field: rejection.target.field,
78
+ })
79
+ : claimId;
80
+ if (rejection.reason === 'capability_denied') {
81
+ settle(() => {
82
+ reject(new CapabilityError('capability_scope_denied', rejection.policyReason ??
83
+ `This credential may not claim ${target}.`));
84
+ });
85
+ return;
86
+ }
87
+ if (rejection.reason === 'invalid_target') {
88
+ settle(() => {
89
+ reject(new AbloValidationError(rejection.policyReason ?? `Invalid claim target ${target}.`, { code: 'invalid_body' }));
90
+ });
91
+ return;
92
+ }
93
+ settle(() => {
94
+ reject(new AbloClaimedError(formatClaimedErrorMessage({
95
+ targetLabel: target,
96
+ heldBy: rejection.heldBy,
97
+ claim: rejection.heldByClaim,
98
+ policyReason: rejection.policyReason,
99
+ fallback: `Claim rejected for ${target}.`,
100
+ }), {
101
+ code: rejection.reason === 'conflict'
102
+ ? 'claim_conflict'
103
+ : 'claim_lease_unavailable',
104
+ claims: rejection.heldByClaim ? [rejection.heldByClaim] : undefined,
105
+ }));
106
+ });
107
+ }));
108
+ unsubs.push(transport.subscribe('claim_lost', (p) => {
109
+ if (p?.claimId === claimId) {
110
+ settle(() => {
111
+ reject(new AbloClaimedError(`Claim lost while queued for ${claimId}.`, {
112
+ code: 'claim_lost',
113
+ }));
114
+ });
115
+ }
116
+ }));
117
+ if (options?.signal) {
118
+ const signal = options.signal;
119
+ const abort = () => settle(() => {
120
+ reject(new AbloClaimedError(`The wait for claim ${claimId} was aborted before the grant arrived.`, { code: 'claim_wait_aborted' }));
121
+ });
122
+ if (signal.aborted) {
123
+ abort();
124
+ return;
125
+ }
126
+ signal.addEventListener('abort', abort, { once: true });
127
+ unsubs.push(() => { signal.removeEventListener('abort', abort); });
128
+ }
129
+ if (options?.timeoutMs && options.timeoutMs > 0) {
130
+ timer = setTimeout(() => {
131
+ settle(() => {
132
+ reject(new AbloClaimedError(`Timed out waiting for the queue grant on claim ${claimId}.`, { code: 'grant_timeout' }));
133
+ });
134
+ }, options.timeoutMs);
135
+ }
136
+ });
137
+ }
138
+ //# sourceMappingURL=awaitClaimGrant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"awaitClaimGrant.js","sourceRoot":"","sources":["../../src/coordination/awaitClaimGrant.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
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
+ import { AbloClaimedError } from '../errors.js';
19
+ import type { ClaimHeartbeat, ClaimHeartbeatOptions, Duration } from '../types/streams.js';
20
+ /**
21
+ * Normalize the public `heartbeat(options?)` argument — a bare Duration is
22
+ * shorthand for `{ ttl }`. Shared by both transports' handle assembly so the
23
+ * shorthand cannot drift.
24
+ */
25
+ export declare function resolveHeartbeatOptions(input: Duration | ClaimHeartbeatOptions | undefined): ClaimHeartbeatOptions;
26
+ /**
27
+ * The structured spelling of the auto-heartbeat — cadence and both callbacks
28
+ * in one place, so the lease axis of a claim is two members (`ttl`,
29
+ * `heartbeat`) rather than four. `true` and a bare Duration remain the
30
+ * shorthands: `heartbeat: '2m'` ≡ `heartbeat: { every: '2m' }`.
31
+ */
32
+ export interface ClaimHeartbeatPlan {
33
+ /** Cadence between beats. Omitted: a third of the TTL, so two beats can
34
+ * fail before the lease is at risk. */
35
+ readonly every?: Duration;
36
+ /** Called after every successful beat (auto or manual) with the server's
37
+ * answer — chiefly `queueDepth`, the cooperative-yield pressure signal. */
38
+ readonly onBeat?: (beat: ClaimHeartbeat) => void;
39
+ /** Called once when a beat learns the lease is no longer yours. The loop
40
+ * has already stopped; abandon the work or re-claim. */
41
+ readonly onLost?: (error: AbloClaimedError) => void;
42
+ }
43
+ /** What the handle assembly reads, whichever spelling the caller used. */
44
+ export interface ResolvedHeartbeatPlan {
45
+ /** Whether the auto-beat loop runs at all. */
46
+ readonly loop: boolean;
47
+ /** Feed for {@link heartbeatCadenceMs} — `true` means the TTL-derived default. */
48
+ readonly cadence: true | Duration;
49
+ readonly onBeat?: (beat: ClaimHeartbeat) => void;
50
+ readonly onLost?: (error: AbloClaimedError) => void;
51
+ }
52
+ /**
53
+ * One reading of the heartbeat option, shared by both transports' handle
54
+ * assembly — cadence and callbacks from whichever spelling the caller used
55
+ * (`true`, a bare Duration, or the structured plan).
56
+ */
57
+ export declare function resolveHeartbeatPlan(options: {
58
+ readonly heartbeat?: true | Duration | ClaimHeartbeatPlan;
59
+ }): ResolvedHeartbeatPlan;
60
+ /**
61
+ * The beat cadence for a lease of `ttlMs`: an explicit duration when the
62
+ * caller set one, otherwise a third of the TTL (floored at 1s) — the
63
+ * DynamoDB-lock-client rule, leaving two missed beats of runway before the
64
+ * lease is at risk while keeping crash recovery within one beat window.
65
+ */
66
+ export declare function heartbeatCadenceMs(ttlMs: number, heartbeat: true | Duration): number;
67
+ export interface ClaimHeartbeatLoopOptions {
68
+ /** Send one beat; resolves while the lease is still ours. */
69
+ beat(): Promise<ClaimHeartbeat>;
70
+ /** Cadence between beats. Callers default this to a third of the TTL. */
71
+ intervalMs: number;
72
+ /**
73
+ * Called once when a beat comes back with a definitive loss — the lease
74
+ * expired or was taken. The loop has already stopped by the time this runs.
75
+ */
76
+ onLost?(error: AbloClaimedError): void;
77
+ }
78
+ /**
79
+ * Start beating. Returns a stop function; callers stop the loop when the
80
+ * claim is released (all held-claim assembly sites tie this to `release`).
81
+ * Beats never overlap: a tick that fires while the previous beat is still
82
+ * in flight is skipped rather than stacked.
83
+ */
84
+ export declare function startClaimHeartbeatLoop(options: ClaimHeartbeatLoopOptions): () => void;
85
+ //# sourceMappingURL=claimHeartbeatLoop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claimHeartbeatLoop.d.ts","sourceRoot":"","sources":["../../src/coordination/claimHeartbeatLoop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACrB,QAAQ,EACT,MAAM,qBAAqB,CAAC;AAG7B;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,QAAQ,GAAG,qBAAqB,GAAG,SAAS,GAClD,qBAAqB,CAMvB;AAED;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC;4CACwC;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC;IAC1B;gFAC4E;IAC5E,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IACjD;6DACyD;IACzD,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;CACrD;AAED,0EAA0E;AAC1E,MAAM,WAAW,qBAAqB;IACpC,8CAA8C;IAC9C,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,kFAAkF;IAClF,QAAQ,CAAC,OAAO,EAAE,IAAI,GAAG,QAAQ,CAAC;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IACjD,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;CACrD;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAC5C,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAI,GAAG,QAAQ,GAAG,kBAAkB,CAAC;CAC3D,GAAG,qBAAqB,CAcxB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,IAAI,GAAG,QAAQ,GACzB,MAAM,CAGR;AAED,MAAM,WAAW,yBAAyB;IACxC,6DAA6D;IAC7D,IAAI,IAAI,OAAO,CAAC,cAAc,CAAC,CAAC;IAChC,yEAAyE;IACzE,UAAU,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,MAAM,CAAC,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAC;CACxC;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,yBAAyB,GACjC,MAAM,IAAI,CAsCZ"}
@@ -0,0 +1,109 @@
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
+ import { AbloClaimedError } from '../errors.js';
19
+ import { toMs } from '../utils/duration.js';
20
+ /**
21
+ * Normalize the public `heartbeat(options?)` argument — a bare Duration is
22
+ * shorthand for `{ ttl }`. Shared by both transports' handle assembly so the
23
+ * shorthand cannot drift.
24
+ */
25
+ export function resolveHeartbeatOptions(input) {
26
+ if (input === undefined)
27
+ return {};
28
+ if (typeof input === 'string' || typeof input === 'number') {
29
+ return { ttl: input };
30
+ }
31
+ return input;
32
+ }
33
+ /**
34
+ * One reading of the heartbeat option, shared by both transports' handle
35
+ * assembly — cadence and callbacks from whichever spelling the caller used
36
+ * (`true`, a bare Duration, or the structured plan).
37
+ */
38
+ export function resolveHeartbeatPlan(options) {
39
+ const { heartbeat } = options;
40
+ if (heartbeat !== undefined && typeof heartbeat === 'object') {
41
+ return {
42
+ loop: true,
43
+ cadence: heartbeat.every ?? true,
44
+ ...(heartbeat.onBeat ? { onBeat: heartbeat.onBeat } : {}),
45
+ ...(heartbeat.onLost ? { onLost: heartbeat.onLost } : {}),
46
+ };
47
+ }
48
+ return {
49
+ loop: Boolean(heartbeat),
50
+ cadence: heartbeat === undefined || heartbeat === true ? true : heartbeat,
51
+ };
52
+ }
53
+ /**
54
+ * The beat cadence for a lease of `ttlMs`: an explicit duration when the
55
+ * caller set one, otherwise a third of the TTL (floored at 1s) — the
56
+ * DynamoDB-lock-client rule, leaving two missed beats of runway before the
57
+ * lease is at risk while keeping crash recovery within one beat window.
58
+ */
59
+ export function heartbeatCadenceMs(ttlMs, heartbeat) {
60
+ if (heartbeat !== true)
61
+ return toMs(heartbeat);
62
+ return Math.max(Math.floor(ttlMs / 3), 1_000);
63
+ }
64
+ /**
65
+ * Start beating. Returns a stop function; callers stop the loop when the
66
+ * claim is released (all held-claim assembly sites tie this to `release`).
67
+ * Beats never overlap: a tick that fires while the previous beat is still
68
+ * in flight is skipped rather than stacked.
69
+ */
70
+ export function startClaimHeartbeatLoop(options) {
71
+ let stopped = false;
72
+ let inFlight = false;
73
+ const stop = () => {
74
+ if (stopped)
75
+ return;
76
+ stopped = true;
77
+ clearInterval(timer);
78
+ };
79
+ const timer = setInterval(() => {
80
+ if (stopped || inFlight)
81
+ return;
82
+ inFlight = true;
83
+ options
84
+ .beat()
85
+ .catch((error) => {
86
+ if (stopped)
87
+ return;
88
+ if (error instanceof AbloClaimedError) {
89
+ stop();
90
+ options.onLost?.(error);
91
+ return;
92
+ }
93
+ // Transient (connection, brief server unavailability): the next tick
94
+ // is the retry — the ttl/3 cadence leaves runway for missed beats.
95
+ })
96
+ .finally(() => {
97
+ inFlight = false;
98
+ });
99
+ }, options.intervalMs);
100
+ // The loop must never be what keeps a Node process alive — the held work
101
+ // is. A worker that finishes without releasing exits anyway, and the lease
102
+ // lapses on schedule. No-op in browsers (where setInterval returns a number
103
+ // without `unref`), which is why the call is optional even though the Node
104
+ // timer type always has it.
105
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
106
+ timer.unref?.();
107
+ return stop;
108
+ }
109
+ //# sourceMappingURL=claimHeartbeatLoop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claimHeartbeatLoop.js","sourceRoot":"","sources":["../../src/coordination/claimHeartbeatLoop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAMhD,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE5C;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CACrC,KAAmD;IAEnD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACnC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC3D,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;IACxB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AA8BD;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAEpC;IACC,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAC9B,IAAI,SAAS,KAAK,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC7D,OAAO;YACL,IAAI,EAAE,IAAI;YACV,OAAO,EAAE,SAAS,CAAC,KAAK,IAAI,IAAI;YAChC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzD,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1D,CAAC;IACJ,CAAC;IACD,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC;QACxB,OAAO,EAAE,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;KAC1E,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAa,EACb,SAA0B;IAE1B,IAAI,SAAS,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC;IAC/C,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAChD,CAAC;AAcD;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAkC;IAElC,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,MAAM,IAAI,GAAG,GAAS,EAAE;QACtB,IAAI,OAAO;YAAE,OAAO;QACpB,OAAO,GAAG,IAAI,CAAC;QACf,aAAa,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7B,IAAI,OAAO,IAAI,QAAQ;YAAE,OAAO;QAChC,QAAQ,GAAG,IAAI,CAAC;QAChB,OAAO;aACJ,IAAI,EAAE;aACN,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YACxB,IAAI,OAAO;gBAAE,OAAO;YACpB,IAAI,KAAK,YAAY,gBAAgB,EAAE,CAAC;gBACtC,IAAI,EAAE,CAAC;gBACP,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC;gBACxB,OAAO;YACT,CAAC;YACD,qEAAqE;YACrE,mEAAmE;QACrE,CAAC,CAAC;aACD,OAAO,CAAC,GAAG,EAAE;YACZ,QAAQ,GAAG,KAAK,CAAC;QACnB,CAAC,CAAC,CAAC;IACP,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IACvB,yEAAyE;IACzE,2EAA2E;IAC3E,4EAA4E;IAC5E,2EAA2E;IAC3E,4BAA4B;IAC5B,uEAAuE;IACvE,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;IAEhB,OAAO,IAAI,CAAC;AACd,CAAC"}