crypto-aio 0.0.3 → 0.1.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 (691) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +144 -14
  3. package/dist/adapters/avalanche/address.d.ts +15 -0
  4. package/dist/adapters/avalanche/address.js +74 -0
  5. package/dist/adapters/avalanche/address.js.map +1 -0
  6. package/dist/adapters/avalanche/api.d.ts +100 -0
  7. package/dist/adapters/avalanche/api.js +381 -0
  8. package/dist/adapters/avalanche/api.js.map +1 -0
  9. package/dist/adapters/avalanche/builder.d.ts +13 -0
  10. package/dist/adapters/avalanche/builder.js +336 -0
  11. package/dist/adapters/avalanche/builder.js.map +1 -0
  12. package/dist/adapters/avalanche/cb58.d.ts +7 -0
  13. package/dist/adapters/avalanche/cb58.js +49 -0
  14. package/dist/adapters/avalanche/cb58.js.map +1 -0
  15. package/dist/adapters/avalanche/chains.d.ts +21 -0
  16. package/dist/adapters/avalanche/chains.js +79 -0
  17. package/dist/adapters/avalanche/chains.js.map +1 -0
  18. package/dist/adapters/avalanche/codec.d.ts +94 -0
  19. package/dist/adapters/avalanche/codec.js +371 -0
  20. package/dist/adapters/avalanche/codec.js.map +1 -0
  21. package/dist/adapters/avalanche/context.d.ts +59 -0
  22. package/dist/adapters/avalanche/context.js +114 -0
  23. package/dist/adapters/avalanche/context.js.map +1 -0
  24. package/dist/adapters/avalanche/decode.d.ts +16 -0
  25. package/dist/adapters/avalanche/decode.js +101 -0
  26. package/dist/adapters/avalanche/decode.js.map +1 -0
  27. package/dist/adapters/avalanche/driver.d.ts +22 -0
  28. package/dist/adapters/avalanche/driver.js +81 -0
  29. package/dist/adapters/avalanche/driver.js.map +1 -0
  30. package/dist/adapters/avalanche/errors.d.ts +18 -0
  31. package/dist/adapters/avalanche/errors.js +61 -0
  32. package/dist/adapters/avalanche/errors.js.map +1 -0
  33. package/dist/adapters/avalanche/fees.d.ts +23 -0
  34. package/dist/adapters/avalanche/fees.js +105 -0
  35. package/dist/adapters/avalanche/fees.js.map +1 -0
  36. package/dist/adapters/avalanche/index.d.ts +19 -0
  37. package/dist/adapters/avalanche/index.js +8 -0
  38. package/dist/adapters/avalanche/index.js.map +1 -0
  39. package/dist/adapters/avalanche/network.d.ts +37 -0
  40. package/dist/adapters/avalanche/network.js +135 -0
  41. package/dist/adapters/avalanche/network.js.map +1 -0
  42. package/dist/adapters/avalanche/plugin.d.ts +21 -0
  43. package/dist/adapters/avalanche/plugin.js +46 -0
  44. package/dist/adapters/avalanche/plugin.js.map +1 -0
  45. package/dist/adapters/avalanche/presets.d.ts +6 -0
  46. package/dist/adapters/avalanche/presets.js +86 -0
  47. package/dist/adapters/avalanche/presets.js.map +1 -0
  48. package/dist/adapters/avalanche/proofs.d.ts +41 -0
  49. package/dist/adapters/avalanche/proofs.js +270 -0
  50. package/dist/adapters/avalanche/proofs.js.map +1 -0
  51. package/dist/adapters/avalanche/reader.d.ts +40 -0
  52. package/dist/adapters/avalanche/reader.js +231 -0
  53. package/dist/adapters/avalanche/reader.js.map +1 -0
  54. package/dist/adapters/avalanche/sdk.d.ts +182 -0
  55. package/dist/adapters/avalanche/sdk.js +21 -0
  56. package/dist/adapters/avalanche/sdk.js.map +1 -0
  57. package/dist/adapters/avalanche/types.d.ts +86 -0
  58. package/dist/{type/common.js → adapters/avalanche/types.js} +1 -1
  59. package/dist/adapters/avalanche/types.js.map +1 -0
  60. package/dist/adapters/evm/builder.d.ts +11 -0
  61. package/dist/adapters/evm/builder.js +326 -0
  62. package/dist/adapters/evm/builder.js.map +1 -0
  63. package/dist/adapters/evm/chains.d.ts +6 -0
  64. package/dist/adapters/evm/chains.js +203 -0
  65. package/dist/adapters/evm/chains.js.map +1 -0
  66. package/dist/adapters/evm/client.d.ts +84 -0
  67. package/dist/adapters/evm/client.js +335 -0
  68. package/dist/adapters/evm/client.js.map +1 -0
  69. package/dist/adapters/evm/decode.d.ts +35 -0
  70. package/dist/adapters/evm/decode.js +170 -0
  71. package/dist/adapters/evm/decode.js.map +1 -0
  72. package/dist/adapters/evm/driver.d.ts +8 -0
  73. package/dist/adapters/evm/driver.js +61 -0
  74. package/dist/adapters/evm/driver.js.map +1 -0
  75. package/dist/adapters/evm/errors.d.ts +20 -0
  76. package/dist/adapters/evm/errors.js +110 -0
  77. package/dist/adapters/evm/errors.js.map +1 -0
  78. package/dist/adapters/evm/ethers-client.d.ts +43 -0
  79. package/dist/adapters/evm/ethers-client.js +135 -0
  80. package/dist/adapters/evm/ethers-client.js.map +1 -0
  81. package/dist/adapters/evm/fees.d.ts +79 -0
  82. package/dist/adapters/evm/fees.js +234 -0
  83. package/dist/adapters/evm/fees.js.map +1 -0
  84. package/dist/adapters/evm/index.d.ts +20 -0
  85. package/dist/adapters/evm/index.js +11 -0
  86. package/dist/adapters/evm/index.js.map +1 -0
  87. package/dist/adapters/evm/network.d.ts +60 -0
  88. package/dist/adapters/evm/network.js +131 -0
  89. package/dist/adapters/evm/network.js.map +1 -0
  90. package/dist/adapters/evm/plugin.d.ts +36 -0
  91. package/dist/adapters/evm/plugin.js +102 -0
  92. package/dist/adapters/evm/plugin.js.map +1 -0
  93. package/dist/adapters/evm/presets.d.ts +2 -0
  94. package/dist/adapters/evm/presets.js +105 -0
  95. package/dist/adapters/evm/presets.js.map +1 -0
  96. package/dist/adapters/evm/proofs.d.ts +19 -0
  97. package/dist/adapters/evm/proofs.js +358 -0
  98. package/dist/adapters/evm/proofs.js.map +1 -0
  99. package/dist/adapters/evm/rawtx.d.ts +25 -0
  100. package/dist/adapters/evm/rawtx.js +176 -0
  101. package/dist/adapters/evm/rawtx.js.map +1 -0
  102. package/dist/adapters/evm/reader.d.ts +65 -0
  103. package/dist/adapters/evm/reader.js +292 -0
  104. package/dist/adapters/evm/reader.js.map +1 -0
  105. package/dist/adapters/evm/rpc.d.ts +39 -0
  106. package/dist/adapters/evm/rpc.js +152 -0
  107. package/dist/adapters/evm/rpc.js.map +1 -0
  108. package/dist/adapters/evm/tokens.d.ts +7 -0
  109. package/dist/adapters/evm/tokens.js +23 -0
  110. package/dist/adapters/evm/tokens.js.map +1 -0
  111. package/dist/adapters/evm/types.d.ts +255 -0
  112. package/dist/{type/account.js → adapters/evm/types.js} +1 -1
  113. package/dist/adapters/evm/types.js.map +1 -0
  114. package/dist/adapters/evm/web3-client.d.ts +23 -0
  115. package/dist/adapters/evm/web3-client.js +159 -0
  116. package/dist/adapters/evm/web3-client.js.map +1 -0
  117. package/dist/adapters/solana/builder.d.ts +18 -0
  118. package/dist/adapters/solana/builder.js +545 -0
  119. package/dist/adapters/solana/builder.js.map +1 -0
  120. package/dist/adapters/solana/chains.d.ts +13 -0
  121. package/dist/adapters/solana/chains.js +37 -0
  122. package/dist/adapters/solana/chains.js.map +1 -0
  123. package/dist/adapters/solana/decode.d.ts +111 -0
  124. package/dist/adapters/solana/decode.js +595 -0
  125. package/dist/adapters/solana/decode.js.map +1 -0
  126. package/dist/adapters/solana/driver.d.ts +15 -0
  127. package/dist/adapters/solana/driver.js +72 -0
  128. package/dist/adapters/solana/driver.js.map +1 -0
  129. package/dist/adapters/solana/errors.d.ts +36 -0
  130. package/dist/adapters/solana/errors.js +154 -0
  131. package/dist/adapters/solana/errors.js.map +1 -0
  132. package/dist/adapters/solana/fees.d.ts +68 -0
  133. package/dist/adapters/solana/fees.js +205 -0
  134. package/dist/adapters/solana/fees.js.map +1 -0
  135. package/dist/adapters/solana/heights.d.ts +47 -0
  136. package/dist/adapters/solana/heights.js +185 -0
  137. package/dist/adapters/solana/heights.js.map +1 -0
  138. package/dist/adapters/solana/history.d.ts +10 -0
  139. package/dist/adapters/solana/history.js +71 -0
  140. package/dist/adapters/solana/history.js.map +1 -0
  141. package/dist/adapters/solana/index.d.ts +16 -0
  142. package/dist/adapters/solana/index.js +9 -0
  143. package/dist/adapters/solana/index.js.map +1 -0
  144. package/dist/adapters/solana/keys.d.ts +13 -0
  145. package/dist/adapters/solana/keys.js +69 -0
  146. package/dist/adapters/solana/keys.js.map +1 -0
  147. package/dist/adapters/solana/network.d.ts +24 -0
  148. package/dist/adapters/solana/network.js +95 -0
  149. package/dist/adapters/solana/network.js.map +1 -0
  150. package/dist/adapters/solana/plugin.d.ts +18 -0
  151. package/dist/adapters/solana/plugin.js +41 -0
  152. package/dist/adapters/solana/plugin.js.map +1 -0
  153. package/dist/adapters/solana/presets.d.ts +2 -0
  154. package/dist/adapters/solana/presets.js +77 -0
  155. package/dist/adapters/solana/presets.js.map +1 -0
  156. package/dist/adapters/solana/programs.d.ts +44 -0
  157. package/dist/adapters/solana/programs.js +159 -0
  158. package/dist/adapters/solana/programs.js.map +1 -0
  159. package/dist/adapters/solana/proofs.d.ts +56 -0
  160. package/dist/adapters/solana/proofs.js +540 -0
  161. package/dist/adapters/solana/proofs.js.map +1 -0
  162. package/dist/adapters/solana/reader.d.ts +82 -0
  163. package/dist/adapters/solana/reader.js +326 -0
  164. package/dist/adapters/solana/reader.js.map +1 -0
  165. package/dist/adapters/solana/rpc.d.ts +102 -0
  166. package/dist/adapters/solana/rpc.js +301 -0
  167. package/dist/adapters/solana/rpc.js.map +1 -0
  168. package/dist/adapters/solana/tokens.d.ts +7 -0
  169. package/dist/adapters/solana/tokens.js +19 -0
  170. package/dist/adapters/solana/tokens.js.map +1 -0
  171. package/dist/adapters/solana/types.d.ts +121 -0
  172. package/dist/{type/contract.js → adapters/solana/types.js} +1 -1
  173. package/dist/adapters/solana/types.js.map +1 -0
  174. package/dist/adapters/solana/web3.d.ts +5 -0
  175. package/dist/adapters/solana/web3.js +83 -0
  176. package/dist/adapters/solana/web3.js.map +1 -0
  177. package/dist/adapters/solana/wire.d.ts +62 -0
  178. package/dist/adapters/solana/wire.js +168 -0
  179. package/dist/adapters/solana/wire.js.map +1 -0
  180. package/dist/adapters/ton/address.d.ts +43 -0
  181. package/dist/adapters/ton/address.js +168 -0
  182. package/dist/adapters/ton/address.js.map +1 -0
  183. package/dist/adapters/ton/api.d.ts +344 -0
  184. package/dist/adapters/ton/api.js +942 -0
  185. package/dist/adapters/ton/api.js.map +1 -0
  186. package/dist/adapters/ton/builder.d.ts +18 -0
  187. package/dist/adapters/ton/builder.js +701 -0
  188. package/dist/adapters/ton/builder.js.map +1 -0
  189. package/dist/adapters/ton/chains.d.ts +16 -0
  190. package/dist/adapters/ton/chains.js +39 -0
  191. package/dist/adapters/ton/chains.js.map +1 -0
  192. package/dist/adapters/ton/decode.d.ts +43 -0
  193. package/dist/adapters/ton/decode.js +219 -0
  194. package/dist/adapters/ton/decode.js.map +1 -0
  195. package/dist/adapters/ton/driver.d.ts +10 -0
  196. package/dist/adapters/ton/driver.js +117 -0
  197. package/dist/adapters/ton/driver.js.map +1 -0
  198. package/dist/adapters/ton/errors.d.ts +36 -0
  199. package/dist/adapters/ton/errors.js +89 -0
  200. package/dist/adapters/ton/errors.js.map +1 -0
  201. package/dist/adapters/ton/fees.d.ts +28 -0
  202. package/dist/adapters/ton/fees.js +121 -0
  203. package/dist/adapters/ton/fees.js.map +1 -0
  204. package/dist/adapters/ton/index.d.ts +16 -0
  205. package/dist/adapters/ton/index.js +9 -0
  206. package/dist/adapters/ton/index.js.map +1 -0
  207. package/dist/adapters/ton/messages.d.ts +157 -0
  208. package/dist/adapters/ton/messages.js +397 -0
  209. package/dist/adapters/ton/messages.js.map +1 -0
  210. package/dist/adapters/ton/native-client.d.ts +10 -0
  211. package/dist/adapters/ton/native-client.js +47 -0
  212. package/dist/adapters/ton/native-client.js.map +1 -0
  213. package/dist/adapters/ton/network.d.ts +58 -0
  214. package/dist/adapters/ton/network.js +207 -0
  215. package/dist/adapters/ton/network.js.map +1 -0
  216. package/dist/adapters/ton/plugin.d.ts +24 -0
  217. package/dist/adapters/ton/plugin.js +57 -0
  218. package/dist/adapters/ton/plugin.js.map +1 -0
  219. package/dist/adapters/ton/presets.d.ts +6 -0
  220. package/dist/adapters/ton/presets.js +94 -0
  221. package/dist/adapters/ton/presets.js.map +1 -0
  222. package/dist/adapters/ton/proofs.d.ts +66 -0
  223. package/dist/adapters/ton/proofs.js +813 -0
  224. package/dist/adapters/ton/proofs.js.map +1 -0
  225. package/dist/adapters/ton/reader.d.ts +194 -0
  226. package/dist/adapters/ton/reader.js +781 -0
  227. package/dist/adapters/ton/reader.js.map +1 -0
  228. package/dist/adapters/ton/tokens.d.ts +10 -0
  229. package/dist/adapters/ton/tokens.js +27 -0
  230. package/dist/adapters/ton/tokens.js.map +1 -0
  231. package/dist/adapters/ton/trace.d.ts +48 -0
  232. package/dist/adapters/ton/trace.js +277 -0
  233. package/dist/adapters/ton/trace.js.map +1 -0
  234. package/dist/adapters/ton/types.d.ts +105 -0
  235. package/dist/{type/transact.js → adapters/ton/types.js} +1 -1
  236. package/dist/adapters/ton/types.js.map +1 -0
  237. package/dist/adapters/ton/wallets.d.ts +86 -0
  238. package/dist/adapters/ton/wallets.js +373 -0
  239. package/dist/adapters/ton/wallets.js.map +1 -0
  240. package/dist/adapters/tron/abi.d.ts +39 -0
  241. package/dist/adapters/tron/abi.js +110 -0
  242. package/dist/adapters/tron/abi.js.map +1 -0
  243. package/dist/adapters/tron/address.d.ts +20 -0
  244. package/dist/adapters/tron/address.js +110 -0
  245. package/dist/adapters/tron/address.js.map +1 -0
  246. package/dist/adapters/tron/builder.d.ts +12 -0
  247. package/dist/adapters/tron/builder.js +553 -0
  248. package/dist/adapters/tron/builder.js.map +1 -0
  249. package/dist/adapters/tron/chains.d.ts +12 -0
  250. package/dist/adapters/tron/chains.js +35 -0
  251. package/dist/adapters/tron/chains.js.map +1 -0
  252. package/dist/adapters/tron/codec.d.ts +10 -0
  253. package/dist/adapters/tron/codec.js +322 -0
  254. package/dist/adapters/tron/codec.js.map +1 -0
  255. package/dist/adapters/tron/decode.d.ts +50 -0
  256. package/dist/adapters/tron/decode.js +280 -0
  257. package/dist/adapters/tron/decode.js.map +1 -0
  258. package/dist/adapters/tron/driver.d.ts +12 -0
  259. package/dist/adapters/tron/driver.js +106 -0
  260. package/dist/adapters/tron/driver.js.map +1 -0
  261. package/dist/adapters/tron/errors.d.ts +74 -0
  262. package/dist/adapters/tron/errors.js +261 -0
  263. package/dist/adapters/tron/errors.js.map +1 -0
  264. package/dist/adapters/tron/fees.d.ts +49 -0
  265. package/dist/adapters/tron/fees.js +166 -0
  266. package/dist/adapters/tron/fees.js.map +1 -0
  267. package/dist/adapters/tron/http.d.ts +173 -0
  268. package/dist/adapters/tron/http.js +729 -0
  269. package/dist/adapters/tron/http.js.map +1 -0
  270. package/dist/adapters/tron/index.d.ts +16 -0
  271. package/dist/adapters/tron/index.js +15 -0
  272. package/dist/adapters/tron/index.js.map +1 -0
  273. package/dist/adapters/tron/network.d.ts +44 -0
  274. package/dist/adapters/tron/network.js +163 -0
  275. package/dist/adapters/tron/network.js.map +1 -0
  276. package/dist/adapters/tron/plugin.d.ts +17 -0
  277. package/dist/adapters/tron/plugin.js +39 -0
  278. package/dist/adapters/tron/plugin.js.map +1 -0
  279. package/dist/adapters/tron/presets.d.ts +5 -0
  280. package/dist/adapters/tron/presets.js +68 -0
  281. package/dist/adapters/tron/presets.js.map +1 -0
  282. package/dist/adapters/tron/proofs.d.ts +80 -0
  283. package/dist/adapters/tron/proofs.js +370 -0
  284. package/dist/adapters/tron/proofs.js.map +1 -0
  285. package/dist/adapters/tron/protobuf.d.ts +36 -0
  286. package/dist/adapters/tron/protobuf.js +90 -0
  287. package/dist/adapters/tron/protobuf.js.map +1 -0
  288. package/dist/adapters/tron/reader.d.ts +47 -0
  289. package/dist/adapters/tron/reader.js +203 -0
  290. package/dist/adapters/tron/reader.js.map +1 -0
  291. package/dist/adapters/tron/tokens.d.ts +7 -0
  292. package/dist/adapters/tron/tokens.js +14 -0
  293. package/dist/adapters/tron/tokens.js.map +1 -0
  294. package/dist/adapters/tron/types.d.ts +166 -0
  295. package/dist/adapters/tron/types.js +3 -0
  296. package/dist/adapters/tron/types.js.map +1 -0
  297. package/dist/adapters/utxo/address.d.ts +51 -0
  298. package/dist/adapters/utxo/address.js +341 -0
  299. package/dist/adapters/utxo/address.js.map +1 -0
  300. package/dist/adapters/utxo/builder.d.ts +35 -0
  301. package/dist/adapters/utxo/builder.js +380 -0
  302. package/dist/adapters/utxo/builder.js.map +1 -0
  303. package/dist/adapters/utxo/chains.d.ts +17 -0
  304. package/dist/adapters/utxo/chains.js +99 -0
  305. package/dist/adapters/utxo/chains.js.map +1 -0
  306. package/dist/adapters/utxo/codec.d.ts +120 -0
  307. package/dist/adapters/utxo/codec.js +408 -0
  308. package/dist/adapters/utxo/codec.js.map +1 -0
  309. package/dist/adapters/utxo/coinselect.d.ts +48 -0
  310. package/dist/adapters/utxo/coinselect.js +131 -0
  311. package/dist/adapters/utxo/coinselect.js.map +1 -0
  312. package/dist/adapters/utxo/context.d.ts +57 -0
  313. package/dist/adapters/utxo/context.js +118 -0
  314. package/dist/adapters/utxo/context.js.map +1 -0
  315. package/dist/adapters/utxo/decode.d.ts +14 -0
  316. package/dist/adapters/utxo/decode.js +85 -0
  317. package/dist/adapters/utxo/decode.js.map +1 -0
  318. package/dist/adapters/utxo/driver.d.ts +16 -0
  319. package/dist/adapters/utxo/driver.js +74 -0
  320. package/dist/adapters/utxo/driver.js.map +1 -0
  321. package/dist/adapters/utxo/ecc.d.ts +9 -0
  322. package/dist/adapters/utxo/ecc.js +26 -0
  323. package/dist/adapters/utxo/ecc.js.map +1 -0
  324. package/dist/adapters/utxo/errors.d.ts +52 -0
  325. package/dist/adapters/utxo/errors.js +191 -0
  326. package/dist/adapters/utxo/errors.js.map +1 -0
  327. package/dist/adapters/utxo/esplora.d.ts +79 -0
  328. package/dist/adapters/utxo/esplora.js +451 -0
  329. package/dist/adapters/utxo/esplora.js.map +1 -0
  330. package/dist/adapters/utxo/fees.d.ts +41 -0
  331. package/dist/adapters/utxo/fees.js +125 -0
  332. package/dist/adapters/utxo/fees.js.map +1 -0
  333. package/dist/adapters/utxo/index.d.ts +17 -0
  334. package/dist/adapters/utxo/index.js +8 -0
  335. package/dist/adapters/utxo/index.js.map +1 -0
  336. package/dist/adapters/utxo/network.d.ts +50 -0
  337. package/dist/adapters/utxo/network.js +165 -0
  338. package/dist/adapters/utxo/network.js.map +1 -0
  339. package/dist/adapters/utxo/plugin.d.ts +17 -0
  340. package/dist/adapters/utxo/plugin.js +41 -0
  341. package/dist/adapters/utxo/plugin.js.map +1 -0
  342. package/dist/adapters/utxo/presets.d.ts +12 -0
  343. package/dist/adapters/utxo/presets.js +47 -0
  344. package/dist/adapters/utxo/presets.js.map +1 -0
  345. package/dist/adapters/utxo/preview.d.ts +3 -0
  346. package/dist/adapters/utxo/preview.js +65 -0
  347. package/dist/adapters/utxo/preview.js.map +1 -0
  348. package/dist/adapters/utxo/proofs.d.ts +57 -0
  349. package/dist/adapters/utxo/proofs.js +331 -0
  350. package/dist/adapters/utxo/proofs.js.map +1 -0
  351. package/dist/adapters/utxo/rawtx.d.ts +59 -0
  352. package/dist/adapters/utxo/rawtx.js +234 -0
  353. package/dist/adapters/utxo/rawtx.js.map +1 -0
  354. package/dist/adapters/utxo/reader.d.ts +36 -0
  355. package/dist/adapters/utxo/reader.js +265 -0
  356. package/dist/adapters/utxo/reader.js.map +1 -0
  357. package/dist/adapters/utxo/sdk.d.ts +18 -0
  358. package/dist/adapters/utxo/sdk.js +17 -0
  359. package/dist/adapters/utxo/sdk.js.map +1 -0
  360. package/dist/adapters/utxo/signed-psbt.d.ts +36 -0
  361. package/dist/adapters/utxo/signed-psbt.js +428 -0
  362. package/dist/adapters/utxo/signed-psbt.js.map +1 -0
  363. package/dist/adapters/utxo/spend.d.ts +59 -0
  364. package/dist/adapters/utxo/spend.js +230 -0
  365. package/dist/adapters/utxo/spend.js.map +1 -0
  366. package/dist/adapters/utxo/types.d.ts +167 -0
  367. package/dist/adapters/utxo/types.js +3 -0
  368. package/dist/adapters/utxo/types.js.map +1 -0
  369. package/dist/core/assets/service.d.ts +18 -0
  370. package/dist/core/assets/service.js +69 -0
  371. package/dist/core/assets/service.js.map +1 -0
  372. package/dist/core/blockchain/default-ref.d.ts +4 -0
  373. package/dist/core/blockchain/default-ref.js +16 -0
  374. package/dist/core/blockchain/default-ref.js.map +1 -0
  375. package/dist/core/blockchain/handle.d.ts +200 -0
  376. package/dist/core/blockchain/handle.js +579 -0
  377. package/dist/core/blockchain/handle.js.map +1 -0
  378. package/dist/core/blockchain/internal.d.ts +19 -0
  379. package/dist/core/blockchain/internal.js +16 -0
  380. package/dist/core/blockchain/internal.js.map +1 -0
  381. package/dist/core/blockchain/mapping.d.ts +22 -0
  382. package/dist/core/blockchain/mapping.js +136 -0
  383. package/dist/core/blockchain/mapping.js.map +1 -0
  384. package/dist/core/config/env.d.ts +8 -0
  385. package/dist/core/config/env.js +60 -0
  386. package/dist/core/config/env.js.map +1 -0
  387. package/dist/core/config/merge.d.ts +26 -0
  388. package/dist/core/config/merge.js +144 -0
  389. package/dist/core/config/merge.js.map +1 -0
  390. package/dist/core/config/resolve.d.ts +12 -0
  391. package/dist/core/config/resolve.js +251 -0
  392. package/dist/core/config/resolve.js.map +1 -0
  393. package/dist/core/config/types.d.ts +165 -0
  394. package/dist/core/config/types.js +3 -0
  395. package/dist/core/config/types.js.map +1 -0
  396. package/dist/core/container/builtins.d.ts +4 -0
  397. package/dist/core/container/builtins.js +13 -0
  398. package/dist/core/container/builtins.js.map +1 -0
  399. package/dist/core/container/container.d.ts +69 -0
  400. package/dist/core/container/container.js +466 -0
  401. package/dist/core/container/container.js.map +1 -0
  402. package/dist/core/container/default.d.ts +15 -0
  403. package/dist/core/container/default.js +70 -0
  404. package/dist/core/container/default.js.map +1 -0
  405. package/dist/core/container/internals.d.ts +54 -0
  406. package/dist/core/container/internals.js +21 -0
  407. package/dist/core/container/internals.js.map +1 -0
  408. package/dist/core/container/pool.d.ts +27 -0
  409. package/dist/core/container/pool.js +77 -0
  410. package/dist/core/container/pool.js.map +1 -0
  411. package/dist/core/driver/types.d.ts +346 -0
  412. package/dist/core/driver/types.js +3 -0
  413. package/dist/core/driver/types.js.map +1 -0
  414. package/dist/core/errors/codes.d.ts +153 -0
  415. package/dist/core/errors/codes.js +49 -0
  416. package/dist/core/errors/codes.js.map +1 -0
  417. package/dist/core/errors/error.d.ts +66 -0
  418. package/dist/core/errors/error.js +129 -0
  419. package/dist/core/errors/error.js.map +1 -0
  420. package/dist/core/events/bus.d.ts +12 -0
  421. package/dist/core/events/bus.js +46 -0
  422. package/dist/core/events/bus.js.map +1 -0
  423. package/dist/core/events/logger.d.ts +13 -0
  424. package/dist/core/events/logger.js +42 -0
  425. package/dist/core/events/logger.js.map +1 -0
  426. package/dist/core/events/types.d.ts +131 -0
  427. package/dist/core/events/types.js +3 -0
  428. package/dist/core/events/types.js.map +1 -0
  429. package/dist/core/lifecycle/engine-rules.d.ts +107 -0
  430. package/dist/core/lifecycle/engine-rules.js +257 -0
  431. package/dist/core/lifecycle/engine-rules.js.map +1 -0
  432. package/dist/core/lifecycle/engine.d.ts +500 -0
  433. package/dist/core/lifecycle/engine.js +1732 -0
  434. package/dist/core/lifecycle/engine.js.map +1 -0
  435. package/dist/core/lifecycle/evaluate.d.ts +19 -0
  436. package/dist/core/lifecycle/evaluate.js +72 -0
  437. package/dist/core/lifecycle/evaluate.js.map +1 -0
  438. package/dist/core/lifecycle/intent.d.ts +11 -0
  439. package/dist/core/lifecycle/intent.js +88 -0
  440. package/dist/core/lifecycle/intent.js.map +1 -0
  441. package/dist/core/lifecycle/monitor.d.ts +138 -0
  442. package/dist/core/lifecycle/monitor.js +606 -0
  443. package/dist/core/lifecycle/monitor.js.map +1 -0
  444. package/dist/core/lifecycle/observations.d.ts +17 -0
  445. package/dist/core/lifecycle/observations.js +59 -0
  446. package/dist/core/lifecycle/observations.js.map +1 -0
  447. package/dist/core/lifecycle/reconcile.d.ts +58 -0
  448. package/dist/core/lifecycle/reconcile.js +112 -0
  449. package/dist/core/lifecycle/reconcile.js.map +1 -0
  450. package/dist/core/lifecycle/views.d.ts +49 -0
  451. package/dist/core/lifecycle/views.js +57 -0
  452. package/dist/core/lifecycle/views.js.map +1 -0
  453. package/dist/core/lifecycle/workers.d.ts +82 -0
  454. package/dist/core/lifecycle/workers.js +329 -0
  455. package/dist/core/lifecycle/workers.js.map +1 -0
  456. package/dist/core/model/address.d.ts +32 -0
  457. package/dist/core/model/address.js +43 -0
  458. package/dist/core/model/address.js.map +1 -0
  459. package/dist/core/model/amount.d.ts +25 -0
  460. package/dist/core/model/amount.js +102 -0
  461. package/dist/core/model/amount.js.map +1 -0
  462. package/dist/core/model/asset.d.ts +28 -0
  463. package/dist/core/model/asset.js +47 -0
  464. package/dist/core/model/asset.js.map +1 -0
  465. package/dist/core/model/capability.d.ts +3 -0
  466. package/dist/core/model/capability.js +18 -0
  467. package/dist/core/model/capability.js.map +1 -0
  468. package/dist/core/model/chain.d.ts +63 -0
  469. package/dist/core/model/chain.js +8 -0
  470. package/dist/core/model/chain.js.map +1 -0
  471. package/dist/core/model/fee.d.ts +36 -0
  472. package/dist/core/model/fee.js +17 -0
  473. package/dist/core/model/fee.js.map +1 -0
  474. package/dist/core/model/ids.d.ts +37 -0
  475. package/dist/core/model/ids.js +13 -0
  476. package/dist/core/model/ids.js.map +1 -0
  477. package/dist/core/model/intent.d.ts +63 -0
  478. package/dist/core/model/intent.js +81 -0
  479. package/dist/core/model/intent.js.map +1 -0
  480. package/dist/core/model/ordering.d.ts +20 -0
  481. package/dist/core/model/ordering.js +29 -0
  482. package/dist/core/model/ordering.js.map +1 -0
  483. package/dist/core/model/transaction.d.ts +116 -0
  484. package/dist/{type/lib-types.js → core/model/transaction.js} +1 -1
  485. package/dist/core/model/transaction.js.map +1 -0
  486. package/dist/core/observe/scanner.d.ts +135 -0
  487. package/dist/core/observe/scanner.js +355 -0
  488. package/dist/core/observe/scanner.js.map +1 -0
  489. package/dist/core/ordering/reservations.d.ts +16 -0
  490. package/dist/core/ordering/reservations.js +53 -0
  491. package/dist/core/ordering/reservations.js.map +1 -0
  492. package/dist/core/ordering/sequence.d.ts +61 -0
  493. package/dist/core/ordering/sequence.js +155 -0
  494. package/dist/core/ordering/sequence.js.map +1 -0
  495. package/dist/core/registry/adapters.d.ts +10 -0
  496. package/dist/core/registry/adapters.js +56 -0
  497. package/dist/core/registry/adapters.js.map +1 -0
  498. package/dist/core/registry/assets.d.ts +18 -0
  499. package/dist/core/registry/assets.js +90 -0
  500. package/dist/core/registry/assets.js.map +1 -0
  501. package/dist/core/registry/chains.d.ts +10 -0
  502. package/dist/core/registry/chains.js +80 -0
  503. package/dist/core/registry/chains.js.map +1 -0
  504. package/dist/core/registry/plugin.d.ts +41 -0
  505. package/dist/core/registry/plugin.js +109 -0
  506. package/dist/core/registry/plugin.js.map +1 -0
  507. package/dist/core/registry/providers.d.ts +31 -0
  508. package/dist/core/registry/providers.js +43 -0
  509. package/dist/core/registry/providers.js.map +1 -0
  510. package/dist/core/registry/schemes.d.ts +30 -0
  511. package/dist/core/registry/schemes.js +84 -0
  512. package/dist/core/registry/schemes.js.map +1 -0
  513. package/dist/core/secret/fragments.d.ts +33 -0
  514. package/dist/core/secret/fragments.js +110 -0
  515. package/dist/core/secret/fragments.js.map +1 -0
  516. package/dist/core/secret/redact.d.ts +10 -0
  517. package/dist/core/secret/redact.js +110 -0
  518. package/dist/core/secret/redact.js.map +1 -0
  519. package/dist/core/secret/secret.d.ts +14 -0
  520. package/dist/core/secret/secret.js +42 -0
  521. package/dist/core/secret/secret.js.map +1 -0
  522. package/dist/core/signing/callback.d.ts +10 -0
  523. package/dist/core/signing/callback.js +22 -0
  524. package/dist/core/signing/callback.js.map +1 -0
  525. package/dist/core/signing/guard.d.ts +18 -0
  526. package/dist/core/signing/guard.js +72 -0
  527. package/dist/core/signing/guard.js.map +1 -0
  528. package/dist/core/signing/hd.d.ts +36 -0
  529. package/dist/core/signing/hd.js +167 -0
  530. package/dist/core/signing/hd.js.map +1 -0
  531. package/dist/core/signing/local.d.ts +48 -0
  532. package/dist/core/signing/local.js +190 -0
  533. package/dist/core/signing/local.js.map +1 -0
  534. package/dist/core/signing/orchestrator.d.ts +40 -0
  535. package/dist/core/signing/orchestrator.js +300 -0
  536. package/dist/core/signing/orchestrator.js.map +1 -0
  537. package/dist/core/signing/types.d.ts +64 -0
  538. package/dist/core/signing/types.js +3 -0
  539. package/dist/core/signing/types.js.map +1 -0
  540. package/dist/core/signing/wallet.d.ts +48 -0
  541. package/dist/core/signing/wallet.js +153 -0
  542. package/dist/core/signing/wallet.js.map +1 -0
  543. package/dist/core/store/clone.d.ts +25 -0
  544. package/dist/core/store/clone.js +71 -0
  545. package/dist/core/store/clone.js.map +1 -0
  546. package/dist/core/store/memory.d.ts +38 -0
  547. package/dist/core/store/memory.js +325 -0
  548. package/dist/core/store/memory.js.map +1 -0
  549. package/dist/core/store/types.d.ts +246 -0
  550. package/dist/core/store/types.js +117 -0
  551. package/dist/core/store/types.js.map +1 -0
  552. package/dist/core/transport/backoff.d.ts +8 -0
  553. package/dist/core/transport/backoff.js +27 -0
  554. package/dist/core/transport/backoff.js.map +1 -0
  555. package/dist/core/transport/circuit.d.ts +25 -0
  556. package/dist/core/transport/circuit.js +61 -0
  557. package/dist/core/transport/circuit.js.map +1 -0
  558. package/dist/core/transport/http-transport.d.ts +30 -0
  559. package/dist/core/transport/http-transport.js +1695 -0
  560. package/dist/core/transport/http-transport.js.map +1 -0
  561. package/dist/core/transport/rate-limit.d.ts +27 -0
  562. package/dist/core/transport/rate-limit.js +78 -0
  563. package/dist/core/transport/rate-limit.js.map +1 -0
  564. package/dist/core/transport/stale-view.d.ts +11 -0
  565. package/dist/core/transport/stale-view.js +17 -0
  566. package/dist/core/transport/stale-view.js.map +1 -0
  567. package/dist/core/transport/types.d.ts +144 -0
  568. package/dist/core/transport/types.js +6 -0
  569. package/dist/core/transport/types.js.map +1 -0
  570. package/dist/core/util/bytes.d.ts +9 -0
  571. package/dist/core/util/bytes.js +40 -0
  572. package/dist/core/util/bytes.js.map +1 -0
  573. package/dist/core/util/clock.d.ts +6 -0
  574. package/dist/core/util/clock.js +26 -0
  575. package/dist/core/util/clock.js.map +1 -0
  576. package/dist/core/util/freeze.d.ts +8 -0
  577. package/dist/core/util/freeze.js +31 -0
  578. package/dist/core/util/freeze.js.map +1 -0
  579. package/dist/core/util/json.d.ts +29 -0
  580. package/dist/core/util/json.js +165 -0
  581. package/dist/core/util/json.js.map +1 -0
  582. package/dist/core/util/names.d.ts +21 -0
  583. package/dist/core/util/names.js +46 -0
  584. package/dist/core/util/names.js.map +1 -0
  585. package/dist/index.d.ts +64 -14
  586. package/dist/index.js +105 -49
  587. package/dist/index.js.map +1 -1
  588. package/dist/native.d.ts +21 -0
  589. package/dist/native.js +44 -0
  590. package/dist/native.js.map +1 -0
  591. package/dist/testing/contracts/api.d.ts +12 -0
  592. package/dist/testing/contracts/api.js +58 -0
  593. package/dist/testing/contracts/api.js.map +1 -0
  594. package/dist/testing/contracts/cursors.d.ts +6 -0
  595. package/dist/testing/contracts/cursors.js +43 -0
  596. package/dist/testing/contracts/cursors.js.map +1 -0
  597. package/dist/testing/contracts/locks.d.ts +10 -0
  598. package/dist/testing/contracts/locks.js +63 -0
  599. package/dist/testing/contracts/locks.js.map +1 -0
  600. package/dist/testing/contracts/operations.d.ts +21 -0
  601. package/dist/testing/contracts/operations.js +718 -0
  602. package/dist/testing/contracts/operations.js.map +1 -0
  603. package/dist/testing/contracts/sequences.d.ts +6 -0
  604. package/dist/testing/contracts/sequences.js +68 -0
  605. package/dist/testing/contracts/sequences.js.map +1 -0
  606. package/dist/testing/env.d.ts +63 -0
  607. package/dist/testing/env.js +105 -0
  608. package/dist/testing/env.js.map +1 -0
  609. package/dist/testing/fake-chain.d.ts +118 -0
  610. package/dist/testing/fake-chain.js +536 -0
  611. package/dist/testing/fake-chain.js.map +1 -0
  612. package/dist/testing/fake-clock.d.ts +15 -0
  613. package/dist/testing/fake-clock.js +86 -0
  614. package/dist/testing/fake-clock.js.map +1 -0
  615. package/dist/testing/fake-driver.d.ts +15 -0
  616. package/dist/testing/fake-driver.js +458 -0
  617. package/dist/testing/fake-driver.js.map +1 -0
  618. package/dist/testing/fake-fetch.d.ts +32 -0
  619. package/dist/testing/fake-fetch.js +81 -0
  620. package/dist/testing/fake-fetch.js.map +1 -0
  621. package/dist/testing/fake-plugin.d.ts +30 -0
  622. package/dist/testing/fake-plugin.js +66 -0
  623. package/dist/testing/fake-plugin.js.map +1 -0
  624. package/dist/testing/faulty-store.d.ts +36 -0
  625. package/dist/testing/faulty-store.js +66 -0
  626. package/dist/testing/faulty-store.js.map +1 -0
  627. package/dist/testing/generation.d.ts +60 -0
  628. package/dist/testing/generation.js +252 -0
  629. package/dist/testing/generation.js.map +1 -0
  630. package/dist/testing/index.d.ts +28 -0
  631. package/dist/testing/index.js +51 -0
  632. package/dist/testing/index.js.map +1 -0
  633. package/package.json +188 -45
  634. package/dist/libs/eth/account.d.ts +0 -9
  635. package/dist/libs/eth/account.js +0 -58
  636. package/dist/libs/eth/account.js.map +0 -1
  637. package/dist/libs/eth/contract.d.ts +0 -7
  638. package/dist/libs/eth/contract.js +0 -42
  639. package/dist/libs/eth/contract.js.map +0 -1
  640. package/dist/libs/eth/index.d.ts +0 -24
  641. package/dist/libs/eth/index.js +0 -72
  642. package/dist/libs/eth/index.js.map +0 -1
  643. package/dist/libs/eth/transact.d.ts +0 -7
  644. package/dist/libs/eth/transact.js +0 -26
  645. package/dist/libs/eth/transact.js.map +0 -1
  646. package/dist/libs/index.d.ts +0 -2
  647. package/dist/libs/index.js +0 -19
  648. package/dist/libs/index.js.map +0 -1
  649. package/dist/libs/trx/account.d.ts +0 -9
  650. package/dist/libs/trx/account.js +0 -55
  651. package/dist/libs/trx/account.js.map +0 -1
  652. package/dist/libs/trx/contract.d.ts +0 -7
  653. package/dist/libs/trx/contract.js +0 -27
  654. package/dist/libs/trx/contract.js.map +0 -1
  655. package/dist/libs/trx/index.d.ts +0 -22
  656. package/dist/libs/trx/index.js +0 -64
  657. package/dist/libs/trx/index.js.map +0 -1
  658. package/dist/libs/trx/transact.d.ts +0 -7
  659. package/dist/libs/trx/transact.js +0 -26
  660. package/dist/libs/trx/transact.js.map +0 -1
  661. package/dist/tool/common.d.ts +0 -28
  662. package/dist/tool/common.js +0 -33
  663. package/dist/tool/common.js.map +0 -1
  664. package/dist/tool/eth-tools.d.ts +0 -3
  665. package/dist/tool/eth-tools.js +0 -33
  666. package/dist/tool/eth-tools.js.map +0 -1
  667. package/dist/tool/index.d.ts +0 -5
  668. package/dist/tool/index.js +0 -22
  669. package/dist/tool/index.js.map +0 -1
  670. package/dist/tool/logging.d.ts +0 -3
  671. package/dist/tool/logging.js +0 -11
  672. package/dist/tool/logging.js.map +0 -1
  673. package/dist/tool/options.d.ts +0 -6
  674. package/dist/tool/options.js +0 -41
  675. package/dist/tool/options.js.map +0 -1
  676. package/dist/tool/trx-tools.d.ts +0 -3
  677. package/dist/tool/trx-tools.js +0 -20
  678. package/dist/tool/trx-tools.js.map +0 -1
  679. package/dist/type/account.d.ts +0 -9
  680. package/dist/type/account.js.map +0 -1
  681. package/dist/type/common.d.ts +0 -18
  682. package/dist/type/common.js.map +0 -1
  683. package/dist/type/contract.d.ts +0 -10
  684. package/dist/type/contract.js.map +0 -1
  685. package/dist/type/index.d.ts +0 -5
  686. package/dist/type/index.js +0 -22
  687. package/dist/type/index.js.map +0 -1
  688. package/dist/type/lib-types.d.ts +0 -9
  689. package/dist/type/lib-types.js.map +0 -1
  690. package/dist/type/transact.d.ts +0 -7
  691. package/dist/type/transact.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitor.js","sourceRoot":"","sources":["../../../src/core/lifecycle/monitor.ts"],"names":[],"mappings":"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","sourcesContent":["import { statusFromObservation } from '../blockchain/mapping';\nimport type { ResolvedSelection } from '../config/types';\nimport type { ProofSource } from '../driver/types';\nimport {\n ChainError,\n StateError,\n TimeoutError,\n ValidationError,\n isCryptoAioError,\n type SerializedError,\n} from '../errors/error';\nimport type { EventBus } from '../events/bus';\nimport type { Logger } from '../events/logger';\nimport type { TxStatus } from '../model/transaction';\nimport {\n isTerminal,\n type AttemptObservation,\n type AttemptRecord,\n type ClearableField,\n type Fence,\n type OperationPatch,\n type OperationRecord,\n type Stores,\n} from '../store/types';\nimport { isStaleView } from '../transport/stale-view';\nimport type { Clock } from '../util/clock';\nimport {\n PRE_SIGNING_STATES,\n errorCode,\n rehydrateError,\n type OperationEngine,\n type OperationTarget,\n type ReadTarget,\n type ResolvedLifecycle,\n} from './engine';\nimport { evaluateOperation } from './evaluate';\nimport {\n loadObservations,\n writeObservation,\n type ObservationDeps,\n type ObservationPatch,\n} from './observations';\nimport { statusOf, type OperationView } from './views';\nimport { Workers, type RecoveryReport, type WorkerOptions } from './workers';\n\nexport interface WaitOptions {\n /** Default: the handle's `confirmations`. Ignored when `finality: 'final'`. */\n readonly confirmations?: number;\n readonly finality?: 'included' | 'final';\n readonly timeoutMs?: number;\n readonly pollIntervalMs?: number;\n readonly signal?: AbortSignal;\n}\n\nexport interface ConfirmationResult {\n readonly status: TxStatus;\n readonly operation?: OperationView;\n}\n\nexport interface TxStatusEvent {\n readonly status: TxStatus;\n readonly operation?: OperationView;\n}\n\nexport type { RecoveryReport, WorkerOptions } from './workers';\n\n/**\n * Rebuilds the wallet-bound target of a stored Operation (from its `context`); `undefined`\n * (or a rejection) when it cannot be resolved any more, e.g. its wallet config is gone.\n */\nexport type TargetResolver = (\n op: OperationRecord,\n) => Promise<OperationTarget | undefined>;\n\n/** Rebuilds the signer-free read target of a stored Operation; see `TargetResolver`. */\nexport type ReadResolver = (op: OperationRecord) => Promise<ReadTarget | undefined>;\n\nexport interface MonitorDeps {\n readonly engine: OperationEngine;\n readonly stores: Stores;\n readonly events: EventBus;\n readonly clock: Clock;\n readonly log: Logger;\n readonly namespace: string;\n readonly lifecycle: () => ResolvedLifecycle;\n /**\n * Every check, worker pass and recovery read runs on this target (no wallet), so a\n * signer rotated out of config or a hung `getPublicKey` never stalls monitoring.\n */\n readonly resolveRead: ReadResolver;\n /**\n * Resolved lazily, only for the writes that need a wallet-bound target: the\n * all-rejected verdict, nonce reconciliation and recovery's resend (none of them signs).\n * Known gap: for the all-rejected verdict this resolution is bounded neither by the\n * pass `signal` nor by a per-pass cache, so each such Operation of a pass can wait up\n * to `lifecycle.signTimeoutMs` for a wallet whose resolution keeps failing.\n */\n readonly resolveTarget: TargetResolver;\n}\n\ninterface Snapshot {\n readonly status: TxStatus;\n readonly record?: OperationRecord;\n}\n\nconst SETTLED = new Set(['final', 'failed', 'rejected', 'replaced', 'expired']);\nconst UNKNOWN: TxStatus = {\n state: 'unknown',\n evidence: 'observed',\n confirmations: 0,\n finality: 'none',\n};\n\n/** Proven and settled: nothing observed later may overwrite it. */\nfunction isSettled(observation: AttemptObservation | null | undefined): boolean {\n return observation?.evidence === 'proven' && SETTLED.has(observation.state);\n}\n\n/**\n * Watches Attempts on chain and moves their Operation on evidence.\n * Observed data (a single endpoint's view, absence, `dropped`, `refused`, an unfinalized\n * block) only ever produces non-terminal states; a terminal state needs `proven` evidence\n * (finalized data confirmed by quorum proof reads). A stale view decides nothing.\n */\nexport class Monitor {\n /** The worker loop and recovery, over this monitor's checks. */\n readonly #workers: Workers;\n\n constructor(private readonly deps: MonitorDeps) {\n this.#workers = new Workers(deps, {\n checkPass: (target, op, fence, signal) =>\n this.#checkPass(target, op, fence, signal),\n check: (target, op, fence, signal) => this.check(target, op, fence, signal),\n find: (ref) => this.find(ref),\n });\n }\n\n private get observationDeps(): ObservationDeps {\n return {\n operations: this.deps.stores.operations,\n events: this.deps.events,\n namespace: this.deps.namespace,\n };\n }\n\n /** Finds a managed Operation by id, Attempt ref or observed canonical tx hash. */\n async find(ref: string): Promise<OperationRecord | null> {\n const store = this.deps.stores.operations;\n return (\n (await store.get(this.deps.namespace, ref)) ??\n (await store.findByRef(this.deps.namespace, ref))\n );\n }\n\n /**\n * One evaluation pass: observe live Attempts, persist observations, apply the transition.\n * `signal` is checked before every read, so an aborted pass stops after at most the\n * read in flight; it then throws the signal's reason and decides nothing further.\n */\n async check(\n target: ReadTarget,\n op: OperationRecord,\n fence?: Fence,\n signal?: AbortSignal,\n ): Promise<OperationRecord> {\n return (await this.#checkPass(target, op, fence, signal)).record;\n }\n\n /** `check`, also telling whether the view was stale (it then decided nothing). */\n async #checkPass(\n target: ReadTarget,\n op: OperationRecord,\n fence?: Fence,\n signal?: AbortSignal,\n ): Promise<{ readonly record: OperationRecord; readonly stale: boolean }> {\n if (isTerminal(op.state) || PRE_SIGNING_STATES.has(op.state))\n return { record: op, stale: false };\n const { pooled } = target;\n signal?.throwIfAborted();\n await pooled.transport.ensureFreshHealth(signal);\n signal?.throwIfAborted();\n const [head, finalized] = await Promise.all([\n pooled.driver.reader.getBlockHeight(),\n pooled.driver.reader.getFinalizedHeight(),\n ]);\n if (isStaleView(pooled.transport, head)) return { record: op, stale: true };\n const observations = new Map<string, AttemptObservation>();\n for (const attempt of op.attempts) {\n try {\n observations.set(\n attempt.id,\n await this.observeAttempt(target, op, attempt, head, finalized, signal),\n );\n } catch (error) {\n if (signal?.aborted || !isCryptoAioError(error) || !error.retryable) throw error;\n const current = await this.deps.stores.operations.getObservation(attempt.id);\n if (current) observations.set(attempt.id, current);\n }\n }\n return {\n record: await this.applyEvaluation(op, observations, fence, signal),\n stale: false,\n };\n }\n\n /** Current status of a managed Operation (after a check) or of an arbitrary transaction id. */\n async status(target: ReadTarget, ref: string, signal?: AbortSignal): Promise<Snapshot> {\n let record = await this.find(ref);\n if (!record) return { status: await this.rawStatus(target, ref) };\n assertSameNetwork(target.selection, record);\n if (!isTerminal(record.state) && !PRE_SIGNING_STATES.has(record.state)) {\n try {\n record = await this.check(target, record, undefined, signal);\n } catch (error) {\n if (signal?.aborted || !isCryptoAioError(error) || !error.retryable) throw error;\n }\n }\n const observations = await loadObservations(this.deps.stores.operations, record);\n return { status: this.bestStatus(record, observations), record };\n }\n\n /**\n * Polls until the wanted status: `confirmations` (default: the handle's) or, with\n * `finality: 'final'`, proven finality for a managed Operation and observed finality for\n * a transaction it does not manage. The caller's `signal` and the deadline bound\n * every pass and sleep; a pass stops after at most the read in flight.\n */\n async waitFor(\n target: ReadTarget,\n ref: string,\n options: WaitOptions = {},\n ): Promise<Snapshot> {\n const { signal } = options;\n if (signal?.aborted) throw signal.reason;\n const lifecycle = this.deps.lifecycle();\n const deadline =\n this.deps.clock.now() + (options.timeoutMs ?? lifecycle.waitTimeoutMs);\n const poll = options.pollIntervalMs ?? lifecycle.pollIntervalMs;\n const wanted = options.confirmations ?? target.selection.confirmations;\n const wantFinal = options.finality === 'final';\n let last: Snapshot | undefined;\n const stopped = (): unknown =>\n signal?.aborted\n ? signal.reason\n : new TimeoutError(\n 'TIMEOUT',\n 'the transaction was not confirmed before the timeout',\n {\n context: last?.record ? { operationId: last.record.id } : {},\n },\n );\n // One signal for every pass and sleep: the caller's abort or the deadline.\n const bound = new AbortController();\n const finished = new AbortController();\n const onAbort = () => bound.abort();\n signal?.addEventListener('abort', onAbort, { once: true });\n this.deps.clock\n .sleep(Math.max(0, deadline - this.deps.clock.now()), finished.signal)\n .then(onAbort, () => undefined);\n try {\n for (;;) {\n if (bound.signal.aborted || this.deps.clock.now() >= deadline) throw stopped();\n let snapshot: Snapshot | undefined;\n try {\n snapshot = await this.status(target, ref, bound.signal);\n } catch (error) {\n if (bound.signal.aborted) throw stopped();\n if (!isCryptoAioError(error) || !error.retryable) throw error;\n }\n if (snapshot) {\n last = snapshot;\n const { status, record } = snapshot;\n if (record?.state === 'final') return snapshot;\n if (record && (record.state === 'failed' || record.state === 'expired')) {\n throw rehydrateError(record.error ?? this.defaultError(record), record.id);\n }\n if (record?.state === 'abandoned') {\n throw new StateError(\n 'INVALID_TRANSITION',\n `operation '${record.id}' was abandoned`,\n );\n }\n if (!record && status.state === 'failed' && status.finality === 'final') {\n throw new ChainError(\n 'TX_REVERTED',\n 'the transaction was included but failed on chain',\n );\n }\n const reached = wantFinal\n ? status.state === 'final' || unmanagedFinal(snapshot)\n : status.state === 'final' ||\n (status.state === 'included' && status.confirmations >= wanted);\n if (reached) return snapshot;\n }\n try {\n await this.deps.clock.sleep(poll, bound.signal);\n } catch {\n throw stopped();\n }\n }\n } finally {\n finished.abort();\n signal?.removeEventListener('abort', onAbort);\n }\n }\n\n /**\n * Yields each status change until the Operation is terminal, or until a transaction\n * it does not manage reaches observed finality, whether it succeeded or reverted. Ends\n * quietly when `signal` aborts.\n */\n async *watch(\n target: ReadTarget,\n ref: string,\n options: { readonly pollIntervalMs?: number; readonly signal?: AbortSignal } = {},\n ): AsyncGenerator<Snapshot> {\n const { signal } = options;\n const poll = options.pollIntervalMs ?? this.deps.lifecycle().pollIntervalMs;\n let last = '';\n while (!signal?.aborted) {\n let snapshot: Snapshot | undefined;\n try {\n snapshot = await this.status(target, ref, signal);\n } catch (error) {\n if (signal?.aborted) return;\n if (!isCryptoAioError(error) || !error.retryable) throw error;\n }\n if (snapshot) {\n const { status, record } = snapshot;\n const key = [\n status.state,\n status.evidence,\n status.confirmations,\n status.blockHash ?? '',\n record?.state ?? '',\n ].join('|');\n if (key !== last) {\n last = key;\n yield snapshot;\n }\n if (record ? isTerminal(record.state) : unmanagedFinal(snapshot)) return;\n }\n try {\n await this.deps.clock.sleep(poll, signal);\n } catch {\n return;\n }\n }\n }\n\n // ---- workers and recovery ------------------------------------------------------------\n\n /** One worker pass (see `Workers.runOnce`); resolves to how many Operations it claimed. */\n runOnce(options: {\n readonly workerId: string;\n readonly batch?: number;\n readonly signal?: AbortSignal;\n }): Promise<number> {\n return this.#workers.runOnce(options);\n }\n\n /** Runs worker passes until `signal` aborts (see `Workers.start`). */\n start(options: WorkerOptions = {}): Promise<void> {\n return this.#workers.start(options);\n }\n\n /** Startup recovery for this namespace; it never signs (see `Workers.recover`). */\n recover(options: { readonly signal?: AbortSignal } = {}): Promise<RecoveryReport> {\n return this.#workers.recover(options);\n }\n\n // ---- observation ---------------------------------------------------------------------\n\n private async observeAttempt(\n target: ReadTarget,\n op: OperationRecord,\n attempt: AttemptRecord,\n head: bigint,\n finalized: bigint,\n signal?: AbortSignal,\n ): Promise<AttemptObservation> {\n const current = await this.deps.stores.operations.getObservation(attempt.id);\n if (current && isSettled(current)) return current;\n const { driver } = target.pooled;\n const from = op.intent.from;\n const now = this.deps.clock.now();\n signal?.throwIfAborted();\n const seen = await driver.reader.observe(attempt.ref, attempt.ordering, from);\n signal?.throwIfAborted();\n let reorgedFrom: string | undefined;\n let patch: ObservationPatch;\n if (seen.seen === 'block' && seen.blockHeight !== undefined) {\n // The transaction is in another block than recorded: its old block was orphaned, once\n // the quorum confirms it; one endpoint's other block alone decides nothing.\n if (\n current?.blockHash !== undefined &&\n seen.blockHash !== undefined &&\n current.blockHash !== seen.blockHash\n ) {\n if (!(await this.orphaned(target, current))) return current;\n signal?.throwIfAborted();\n reorgedFrom = current.blockHash;\n }\n patch = {\n state: seen.success === false ? 'failed' : 'included',\n evidence: 'observed',\n confirmations: depth(head, seen.blockHeight),\n blockHeight: seen.blockHeight,\n blockHash: seen.blockHash,\n ...(seen.txHash !== undefined ? { txHash: seen.txHash } : {}),\n // Why an included transaction failed, as the driver's fixed text; any earlier\n // reason (a refusal, an old failure) is cleared otherwise.\n reason: seen.success === false ? seen.reason : undefined,\n firstSeenAt: current?.firstSeenAt ?? now,\n lastSeenAt: now,\n };\n if (seen.blockHeight <= finalized)\n patch = await this.proveFinal(target, op, attempt, patch, head, signal);\n } else {\n if (current?.blockHash !== undefined) {\n // Absence (or a mempool sighting) of an included transaction is not evidence of a\n // reorg by itself: a lagging or inconsistent endpoint shows the same. Only a\n // quorum-served different block at the recorded height proves it; otherwise decide\n // nothing.\n if (!(await this.orphaned(target, current))) return current;\n signal?.throwIfAborted();\n reorgedFrom = current.blockHash;\n }\n // Out of a block, an earlier failure's reason no longer applies (a refusal keeps\n // its own, below). Clearing relies on `putObservation` replacing the whole record,\n // a key set to `undefined` being absent.\n const cleared: ObservationPatch = {\n blockHash: undefined,\n blockHeight: undefined,\n confirmations: 0,\n reason: undefined,\n };\n patch =\n seen.seen === 'mempool'\n ? {\n ...cleared,\n state: 'mempool',\n evidence: 'observed',\n firstSeenAt: current?.firstSeenAt ?? now,\n lastSeenAt: now,\n }\n : {\n ...cleared,\n ...(await this.whenAbsent(target, op, attempt, current, now, signal)),\n };\n }\n // This patch was derived from `current`; when another writer changed the\n // observation meanwhile (possibly with stronger evidence), keep theirs and decide nothing.\n let applied = false;\n const saved = await writeObservation(\n this.observationDeps,\n attempt,\n op.id,\n (stored) => {\n applied = (stored?.version ?? null) === (current?.version ?? null);\n return applied ? patch : undefined;\n },\n );\n if (!applied) return saved;\n if (reorgedFrom !== undefined) this.#reorged(op, attempt, reorgedFrom);\n if (\n saved.state === 'dropped' &&\n attempt.id === op.activeAttemptId &&\n op.state !== 'stalled'\n ) {\n signal?.throwIfAborted();\n await this.#rebroadcastDropped(target, op, attempt, saved, now, signal);\n }\n return saved;\n }\n\n /**\n * A block at or below the finalized height becomes `final`/`failed` + `proven` only when\n * the quorum proof confirms it. A retryable proof failure (e.g. PROVIDER_INCONSISTENT)\n * decides nothing: the observed patch is kept.\n */\n private async proveFinal(\n target: ReadTarget,\n op: OperationRecord,\n attempt: AttemptRecord,\n patch: ObservationPatch,\n head: bigint,\n signal?: AbortSignal,\n ): Promise<ObservationPatch> {\n let proof: Awaited<ReturnType<ProofSource['includedFinal']>>;\n signal?.throwIfAborted();\n try {\n proof = await target.pooled.driver.proofs.includedFinal(\n attempt.ref,\n attempt.ordering,\n op.intent.from,\n );\n } catch (error) {\n if (!isCryptoAioError(error) || !error.retryable) throw error;\n return patch;\n }\n if (!proof.included) return patch;\n return {\n ...patch,\n state: proof.success ? 'final' : 'failed',\n evidence: 'proven',\n blockHeight: proof.blockHeight,\n blockHash: proof.blockHash,\n txHash: proof.txHash,\n confirmations: depth(head, proof.blockHeight),\n reason: failureReason(proof),\n };\n }\n\n /**\n * Whether the block recorded for `observation` is no longer the one at its height.\n * Only the quorum-served hash decides; a disagreement or other retryable failure, or no\n * block at that height yet, decides nothing (`false`).\n */\n private async orphaned(\n target: ReadTarget,\n observation: AttemptObservation,\n ): Promise<boolean> {\n const { blockHeight, blockHash } = observation;\n if (blockHeight === undefined || blockHash === undefined) return false;\n let canonical: string | null;\n try {\n canonical = await target.pooled.driver.proofs.blockHash(blockHeight, 'latest');\n } catch (error) {\n if (!isCryptoAioError(error) || !error.retryable) throw error;\n return false;\n }\n return canonical !== null && canonical !== blockHash;\n }\n\n /** The transaction is not visible anywhere we can see: only finalized proofs may declare it dead. */\n private async whenAbsent(\n target: ReadTarget,\n op: OperationRecord,\n attempt: AttemptRecord,\n current: AttemptObservation | null,\n now: number,\n signal?: AbortSignal,\n ): Promise<ObservationPatch> {\n const { proofs } = target.pooled.driver;\n const read = <T>(work: () => Promise<T>): Promise<T> => {\n signal?.throwIfAborted();\n return work();\n };\n // The built ordering (never the reservation, whose seqno `validUntil`\n // the driver may have replaced while building).\n const ordering = attempt.ordering;\n const from = op.intent.from;\n const slotted =\n ordering.kind === 'nonce' ||\n ordering.kind === 'seqno' ||\n ordering.kind === 'inputs';\n const expiring = ordering.kind === 'expiry' || ordering.kind === 'seqno';\n const deadSlot =\n slotted && (await read(() => proofs.slotConsumed(ordering, from, 'finalized')));\n const deadExpiry =\n !deadSlot && expiring && (await read(() => proofs.expired(ordering)));\n if (deadSlot || deadExpiry) {\n const proof = await read(() => proofs.includedFinal(attempt.ref, ordering, from));\n if (proof.included) {\n return {\n state: proof.success ? 'final' : 'failed',\n evidence: 'proven',\n blockHeight: proof.blockHeight,\n blockHash: proof.blockHash,\n txHash: proof.txHash,\n reason: failureReason(proof),\n };\n }\n return { state: deadSlot ? 'replaced' : 'expired', evidence: 'proven' };\n }\n if (slotted && (await read(() => proofs.slotConsumed(ordering, from, 'latest')))) {\n return { state: 'replaced', evidence: 'observed' };\n }\n if (current?.state === 'refused') {\n return { state: 'refused', evidence: 'observed', reason: current.reason };\n }\n const since = current?.lastSeenAt ?? current?.lastBroadcastAt ?? attempt.createdAt;\n const dropped = now - since >= this.deps.lifecycle().droppedGracePeriodMs;\n return { state: dropped ? 'dropped' : 'pending', evidence: 'observed' };\n }\n\n private async applyEvaluation(\n op: OperationRecord,\n observations: ReadonlyMap<string, AttemptObservation>,\n fence?: Fence,\n signal?: AbortSignal,\n ): Promise<OperationRecord> {\n const evaluation = evaluateOperation(op, observations);\n const { winner } = evaluation;\n if (winner) {\n // The winner consumed the ordering slot: every other Attempt is proven replaced by it.\n // As in `whenAbsent`, a proven `replaced` carries no reason: a refusal's no longer\n // applies.\n const linked = (o: AttemptObservation | null | undefined) =>\n isSettled(o) && !(o?.state === 'replaced' && o.replacedBy === undefined);\n for (const attempt of op.attempts) {\n if (attempt.id === winner.id || linked(observations.get(attempt.id))) continue;\n await writeObservation(this.observationDeps, attempt, op.id, (stored) =>\n linked(stored)\n ? undefined\n : {\n state: 'replaced',\n evidence: 'proven',\n replacedBy: winner.ref.id,\n reason: undefined,\n },\n );\n }\n }\n // Failing an all-rejected Operation releases its nonce, so the engine applies it\n // under the address lease; the monitor never makes a reservation-holding transition.\n if (evaluation.error?.code === 'TX_REJECTED')\n return this.failRejected(op, signal, fence);\n const terminal = isTerminal(evaluation.state);\n // A read-only pass (no fence) writes the Operation only when its state, outcome\n // or error changes, never just to schedule it: a version bump would make a concurrent\n // engine write (e.g. right after a broadcast) lose its compare-and-set. Scheduling\n // (`nextCheckAt`) belongs to fenced workers and to engine transitions.\n const changed =\n evaluation.state !== op.state ||\n (evaluation.outcome !== undefined && evaluation.outcome !== op.outcome) ||\n (evaluation.error !== undefined && evaluation.error.code !== op.error?.code);\n if (!changed && !fence) return op;\n const clear: ClearableField[] = [];\n if (terminal) clear.push('nextCheckAt');\n if (op.state === 'stalled' && evaluation.state !== 'stalled' && !evaluation.error)\n clear.push('error');\n const patch: OperationPatch = {\n ...(evaluation.state !== op.state ? { state: evaluation.state } : {}),\n ...(evaluation.outcome ? { outcome: evaluation.outcome } : {}),\n ...(evaluation.error\n ? {\n error: new ChainError(evaluation.error.code, evaluation.error.message, {\n context: { operationId: op.id },\n }).toJSON(),\n }\n : {}),\n ...(fence && !terminal\n ? { nextCheckAt: this.deps.clock.now() + this.deps.lifecycle().pollIntervalMs }\n : {}),\n ...(clear.length > 0 ? { clear } : {}),\n };\n return this.deps.engine.update(op, patch, fence);\n }\n\n /**\n * Hands the all-rejected verdict to the engine: an unfenced pass (`tryOnce`) tries the\n * lease once, a fenced one waits `acquireTimeoutMs`, and either wait is bounded by the\n * pass `signal` (the caller's abort and, in `waitFor`, its deadline). A fenced pass's\n * terminal write carries its claim `fence`, so a worker whose claim was taken over writes\n * nothing. An unresolvable target leaves the Operation non-terminal.\n */\n private async failRejected(\n op: OperationRecord,\n signal: AbortSignal | undefined,\n fence: Fence | undefined,\n ): Promise<OperationRecord> {\n let target: OperationTarget | undefined;\n let failure: unknown;\n try {\n target = await this.deps.resolveTarget(op);\n } catch (error) {\n failure = error;\n }\n if (!target) {\n this.deps.log.warn('cannot resolve the target to fail a rejected operation', {\n operationId: op.id,\n code: errorCode(failure),\n });\n return op;\n }\n // Every unfenced pass (`getTransactionStatus`, `watch`, `waitFor`), signalled or not,\n // tries the lease once: a busy lease leaves the Operation for a later pass. Only a\n // fenced worker pass waits `acquireTimeoutMs`.\n return this.deps.engine.failRejected(target, op, {\n signal,\n ...(fence ? { fence } : { acquireTimeoutMs: 0 }),\n });\n }\n\n private bestStatus(\n record: OperationRecord,\n observations: ReadonlyMap<string, AttemptObservation>,\n ): TxStatus {\n const all = record.attempts\n .map((a) => observations.get(a.id))\n .filter((o): o is AttemptObservation => o !== undefined);\n const chosen =\n all.find(\n (o) => o.state === 'final' || (o.state === 'failed' && o.evidence === 'proven'),\n ) ??\n all\n .filter((o) => o.state === 'included' || o.state === 'failed')\n .sort((a, b) => b.confirmations - a.confirmations)[0] ??\n (record.activeAttemptId ? observations.get(record.activeAttemptId) : undefined);\n return chosen ? statusOf(chosen) : UNKNOWN;\n }\n\n private async rawStatus(target: ReadTarget, id: string): Promise<TxStatus> {\n const { reader } = target.pooled.driver;\n const [observation, head, finalized] = await Promise.all([\n reader.observe({ id, idKind: 'tx-hash', canonical: true }, undefined, undefined),\n reader.getBlockHeight(),\n reader.getFinalizedHeight(),\n ]);\n return statusFromObservation(observation, head, finalized);\n }\n\n private defaultError(record: OperationRecord): SerializedError {\n const code = record.state === 'expired' ? 'TX_EXPIRED' : 'TX_REJECTED';\n return new ChainError(code, `operation ended in state '${record.state}'`).toJSON();\n }\n\n #reorged(op: OperationRecord, attempt: AttemptRecord, previousBlockHash: string): void {\n this.deps.events.emit('tx.reorged', {\n namespace: this.deps.namespace,\n operationId: op.id,\n attemptId: attempt.id,\n previousBlockHash,\n });\n }\n\n /**\n * Resends the stored raw bytes of a dropped active Attempt, at most once per\n * `rebroadcastIntervalMs`. The answer decides nothing: `dropped` is never terminal,\n * and a refusal or rejection of bytes a node once held says nothing about them. An\n * acceptance is remembered (`firstSeenAt`) like the engine's broadcast path does.\n */\n async #rebroadcastDropped(\n target: ReadTarget,\n op: OperationRecord,\n attempt: AttemptRecord,\n observation: AttemptObservation,\n now: number,\n signal?: AbortSignal,\n ): Promise<void> {\n if (\n now - (observation.lastBroadcastAt ?? 0) <\n this.deps.lifecycle().rebroadcastIntervalMs\n )\n return;\n let accepted = false;\n try {\n const result = await target.pooled.driver.broadcaster.broadcast(\n { raw: attempt.raw, ref: attempt.ref },\n signal ? { signal } : {},\n );\n accepted = result.kind === 'accepted' || result.kind === 'already-known';\n } catch (error) {\n // The code only: an error message may carry detail that logs must not.\n this.deps.log.debug('rebroadcast of a dropped attempt failed', {\n operationId: op.id,\n code: errorCode(error),\n });\n }\n await writeObservation(this.observationDeps, attempt, op.id, (stored) => ({\n lastBroadcastAt: now,\n ...(accepted ? { firstSeenAt: stored?.firstSeenAt ?? now } : {}),\n }));\n }\n}\n\n/** Refuses a stored Operation of another chain or network than `selection` (INVALID_INTENT). */\nexport function assertSameNetwork(\n selection: Pick<ResolvedSelection, 'chain' | 'network'>,\n record: OperationRecord,\n): void {\n const { chain, network } = selection;\n if (record.context.chain !== chain.id || record.context.network !== network.id) {\n throw new ValidationError(\n 'INVALID_INTENT',\n `operation '${record.id}' belongs to ${record.context.chain}:${record.context.network}, not ${chain.id}:${network.id}`,\n );\n }\n}\n\n/**\n * An unmanaged transaction has no proofs to wait for: its observed finality is the answer,\n * whether it succeeded or reverted (`waitFor` rejects a reverted one with TX_REVERTED).\n */\nfunction unmanagedFinal({ status, record }: Snapshot): boolean {\n return !record && status.finality === 'final';\n}\n\nfunction depth(head: bigint, height: bigint): number {\n const d = head - height + 1n;\n return d > 0n ? Number(d) : 0;\n}\n\n/**\n * A proven failure's fixed reason; a success clears any earlier reason. Drivers give a\n * fixed text because a node's own text can carry addresses or amounts; the stored reason\n * is sensitive data, and no event carries it.\n */\nfunction failureReason(proof: {\n readonly success: boolean;\n readonly reason?: string;\n}): string | undefined {\n return proof.success ? undefined : proof.reason;\n}\n"]}
@@ -0,0 +1,17 @@
1
+ import type { EventBus } from '../events/bus';
2
+ import type { AttemptObservation, AttemptRecord, OperationRecord, OperationStore } from '../store/types';
3
+ export type ObservationPatch = Partial<Omit<AttemptObservation, 'attemptId' | 'operationId' | 'version'>>;
4
+ export interface ObservationDeps {
5
+ readonly operations: OperationStore;
6
+ readonly events: EventBus;
7
+ readonly namespace: string;
8
+ }
9
+ /**
10
+ * Compare-and-set write of an Attempt observation; emits `attempt.state` on state changes.
11
+ * A function patch sees the stored observation on every try (so a writer can refuse to
12
+ * overwrite stronger evidence) and may return `undefined` to keep a stored
13
+ * observation unchanged: it is then returned without a write (with none stored, the
14
+ * default observation is created as for an empty patch).
15
+ */
16
+ export declare function writeObservation(deps: ObservationDeps, attempt: AttemptRecord, operationId: string, patch: ObservationPatch | ((current: AttemptObservation | null) => ObservationPatch | undefined)): Promise<AttemptObservation>;
17
+ export declare function loadObservations(operations: OperationStore, record: OperationRecord): Promise<Map<string, AttemptObservation>>;
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.writeObservation = writeObservation;
4
+ exports.loadObservations = loadObservations;
5
+ const error_1 = require("../errors/error");
6
+ /**
7
+ * Compare-and-set write of an Attempt observation; emits `attempt.state` on state changes.
8
+ * A function patch sees the stored observation on every try (so a writer can refuse to
9
+ * overwrite stronger evidence) and may return `undefined` to keep a stored
10
+ * observation unchanged: it is then returned without a write (with none stored, the
11
+ * default observation is created as for an empty patch).
12
+ */
13
+ async function writeObservation(deps, attempt, operationId, patch) {
14
+ for (let tries = 0; tries < 5; tries++) {
15
+ const current = await deps.operations.getObservation(attempt.id);
16
+ const proposed = typeof patch === 'function' ? patch(current) : patch;
17
+ if (proposed === undefined && current)
18
+ return current;
19
+ const changes = proposed ?? {};
20
+ const base = current
21
+ ? (({ version: _version, ...rest }) => rest)(current)
22
+ : {
23
+ attemptId: attempt.id,
24
+ operationId,
25
+ state: 'pending',
26
+ evidence: 'observed',
27
+ confirmations: 0,
28
+ };
29
+ try {
30
+ const saved = await deps.operations.putObservation({ ...base, ...changes, attemptId: attempt.id, operationId }, current?.version ?? null);
31
+ if (!current ||
32
+ current.state !== saved.state ||
33
+ current.evidence !== saved.evidence) {
34
+ deps.events.emit('attempt.state', {
35
+ namespace: deps.namespace,
36
+ operationId,
37
+ attemptId: attempt.id,
38
+ state: saved.state,
39
+ evidence: saved.evidence,
40
+ });
41
+ }
42
+ return saved;
43
+ }
44
+ catch (error) {
45
+ if (!(0, error_1.isCryptoAioError)(error, 'VERSION_CONFLICT'))
46
+ throw error;
47
+ }
48
+ }
49
+ throw new error_1.StateError('VERSION_CONFLICT', `observation of attempt '${attempt.id}' kept changing`);
50
+ }
51
+ async function loadObservations(operations, record) {
52
+ const entries = await Promise.all(record.attempts.map(async (attempt) => [attempt.id, await operations.getObservation(attempt.id)]));
53
+ const map = new Map();
54
+ for (const [id, observation] of entries)
55
+ if (observation)
56
+ map.set(id, observation);
57
+ return map;
58
+ }
59
+ //# sourceMappingURL=observations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observations.js","sourceRoot":"","sources":["../../../src/core/lifecycle/observations.ts"],"names":[],"mappings":";;AA0BA,4CAiDC;AAED,4CAaC;AA1FD,2CAA+D;AAmB/D;;;;;;GAMG;AACI,KAAK,UAAU,gBAAgB,CACpC,IAAqB,EACrB,OAAsB,EACtB,WAAmB,EACnB,KAE0E;IAE1E,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACjE,MAAM,QAAQ,GAAG,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACtE,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC;QACtD,MAAM,OAAO,GAAG,QAAQ,IAAI,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAwC,OAAO;YACvD,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;YACrD,CAAC,CAAC;gBACE,SAAS,EAAE,OAAO,CAAC,EAAE;gBACrB,WAAW;gBACX,KAAK,EAAE,SAAS;gBAChB,QAAQ,EAAE,UAAU;gBACpB,aAAa,EAAE,CAAC;aACjB,CAAC;QACN,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,cAAc,CAChD,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,EAC3D,OAAO,EAAE,OAAO,IAAI,IAAI,CACzB,CAAC;YACF,IACE,CAAC,OAAO;gBACR,OAAO,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK;gBAC7B,OAAO,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,EACnC,CAAC;gBACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE;oBAChC,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,WAAW;oBACX,SAAS,EAAE,OAAO,CAAC,EAAE;oBACrB,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;iBACzB,CAAC,CAAC;YACL,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,IAAA,wBAAgB,EAAC,KAAK,EAAE,kBAAkB,CAAC;gBAAE,MAAM,KAAK,CAAC;QAChE,CAAC;IACH,CAAC;IACD,MAAM,IAAI,kBAAU,CAClB,kBAAkB,EAClB,2BAA2B,OAAO,CAAC,EAAE,iBAAiB,CACvD,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,gBAAgB,CACpC,UAA0B,EAC1B,MAAuB;IAEvB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,MAAM,CAAC,QAAQ,CAAC,GAAG,CACjB,KAAK,EAAE,OAAO,EAAE,EAAE,CAChB,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC,CAAU,CACrE,CACF,CAAC;IACF,MAAM,GAAG,GAAG,IAAI,GAAG,EAA8B,CAAC;IAClD,KAAK,MAAM,CAAC,EAAE,EAAE,WAAW,CAAC,IAAI,OAAO;QAAE,IAAI,WAAW;YAAE,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IACnF,OAAO,GAAG,CAAC;AACb,CAAC","sourcesContent":["import { StateError, isCryptoAioError } from '../errors/error';\nimport type { EventBus } from '../events/bus';\nimport type {\n AttemptObservation,\n AttemptRecord,\n OperationRecord,\n OperationStore,\n} from '../store/types';\n\nexport type ObservationPatch = Partial<\n Omit<AttemptObservation, 'attemptId' | 'operationId' | 'version'>\n>;\n\nexport interface ObservationDeps {\n readonly operations: OperationStore;\n readonly events: EventBus;\n readonly namespace: string;\n}\n\n/**\n * Compare-and-set write of an Attempt observation; emits `attempt.state` on state changes.\n * A function patch sees the stored observation on every try (so a writer can refuse to\n * overwrite stronger evidence) and may return `undefined` to keep a stored\n * observation unchanged: it is then returned without a write (with none stored, the\n * default observation is created as for an empty patch).\n */\nexport async function writeObservation(\n deps: ObservationDeps,\n attempt: AttemptRecord,\n operationId: string,\n patch:\n | ObservationPatch\n | ((current: AttemptObservation | null) => ObservationPatch | undefined),\n): Promise<AttemptObservation> {\n for (let tries = 0; tries < 5; tries++) {\n const current = await deps.operations.getObservation(attempt.id);\n const proposed = typeof patch === 'function' ? patch(current) : patch;\n if (proposed === undefined && current) return current;\n const changes = proposed ?? {};\n const base: Omit<AttemptObservation, 'version'> = current\n ? (({ version: _version, ...rest }) => rest)(current)\n : {\n attemptId: attempt.id,\n operationId,\n state: 'pending',\n evidence: 'observed',\n confirmations: 0,\n };\n try {\n const saved = await deps.operations.putObservation(\n { ...base, ...changes, attemptId: attempt.id, operationId },\n current?.version ?? null,\n );\n if (\n !current ||\n current.state !== saved.state ||\n current.evidence !== saved.evidence\n ) {\n deps.events.emit('attempt.state', {\n namespace: deps.namespace,\n operationId,\n attemptId: attempt.id,\n state: saved.state,\n evidence: saved.evidence,\n });\n }\n return saved;\n } catch (error) {\n if (!isCryptoAioError(error, 'VERSION_CONFLICT')) throw error;\n }\n }\n throw new StateError(\n 'VERSION_CONFLICT',\n `observation of attempt '${attempt.id}' kept changing`,\n );\n}\n\nexport async function loadObservations(\n operations: OperationStore,\n record: OperationRecord,\n): Promise<Map<string, AttemptObservation>> {\n const entries = await Promise.all(\n record.attempts.map(\n async (attempt) =>\n [attempt.id, await operations.getObservation(attempt.id)] as const,\n ),\n );\n const map = new Map<string, AttemptObservation>();\n for (const [id, observation] of entries) if (observation) map.set(id, observation);\n return map;\n}\n"]}
@@ -0,0 +1,58 @@
1
+ import type { LeaseHandle } from '../ordering/sequence';
2
+ import { type OperationFilter, type OperationPatch, type OperationRecord } from '../store/types';
3
+ import type { EngineDeps, OperationTarget, ReadTarget } from './engine';
4
+ /** What reconciliation needs from `OperationEngine`: its deps and a few of its steps. */
5
+ export interface Reconciler {
6
+ readonly deps: EngineDeps;
7
+ update(op: OperationRecord, patch: OperationPatch): Promise<OperationRecord>;
8
+ require(operationId: string): Promise<OperationRecord>;
9
+ sequenceKeyOf(op: OperationRecord): string;
10
+ assertOwnedBy(target: OperationTarget, op: OperationRecord): void;
11
+ withAddressLease<T>(target: ReadTarget, op: OperationRecord, fn: (lease: LeaseHandle | undefined) => Promise<T>, signal?: AbortSignal, options?: {
12
+ readonly acquireTimeoutMs?: number;
13
+ }): Promise<T>;
14
+ }
15
+ /**
16
+ * Nonce reconciliation, never a filler transaction. Under the address lease,
17
+ * returns to `released` every value in [floor, next) that no live Operation of
18
+ * `op`'s wallet reserves, so the next allocation reuses it and the transfers waiting
19
+ * behind the gap can land; `floor` is `consumedFloor` (never below a nonce the chain
20
+ * consumed at finality), and the wallet's history is read only when some value is
21
+ * reclaimable at all. It closes the leaks a release cannot: a crash between
22
+ * allocation and the `prepared` write, a store failure inside a release after a terminal
23
+ * write, and a failure recorded without a release. Every live `created` Operation
24
+ * without a reservation is fenced first (`fenceStalePrepare`), so a `prepared` write
25
+ * still in flight from a lapsed lease can never land on a released value (a legitimate
26
+ * transfer re-reads its Operation under the lease). Returns the reclaimed values. The
27
+ * lease wait is bounded by `signal` and `acquireTimeoutMs` (`0` tries once); a busy lease
28
+ * rejects with SEQUENCE_BUSY. A target whose wallet does not own `op` is refused
29
+ * (INVALID_INTENT): its lease guards another sequence.
30
+ */
31
+ export declare function reconcileNonces(engine: Reconciler, target: OperationTarget, op: OperationRecord, options?: {
32
+ readonly signal?: AbortSignal;
33
+ readonly acquireTimeoutMs?: number;
34
+ }): Promise<readonly bigint[]>;
35
+ /**
36
+ * The body of `reconcileNonces`, under the held address lease of `op`'s wallet, with the
37
+ * chain's pending nonce already read. `preparing` is an Operation this lease is preparing
38
+ * right now (`prepareStage`): it is never fenced, since its own write follows.
39
+ */
40
+ export declare function reclaimLeaked(engine: Reconciler, op: OperationRecord, lease: LeaseHandle, chainPending: bigint, preparing?: string): Promise<readonly bigint[]>;
41
+ /**
42
+ * The lowest value reconciliation may reclaim: `chainPending` (a lagging endpoint can
43
+ * under-report it), raised above every nonce the chain consumed at finality, i.e. those
44
+ * of `final` Operations and of failures proven on chain (`TX_REVERTED`, `TX_REPLACED`).
45
+ * A rejection, a failure before signing or an abandoned Operation consumed nothing.
46
+ */
47
+ export declare function consumedFloor(engine: Reconciler, wallet: Omit<OperationFilter, 'states' | 'limit'>, chainPending: bigint): Promise<bigint>;
48
+ /**
49
+ * A `created` Operation without a reservation may still have a `prepared` write in
50
+ * flight from a process whose lease lapsed (it allocated a nonce, renewed, then stalled).
51
+ * A no-effect compare-and-set at the listed version makes that stale write lose its own
52
+ * compare-and-set, so it can never land a reservation on a value this reconciliation
53
+ * releases. This relies on the store bumping `version` on every `update`, a no-op one
54
+ * included (the store contract pins it). After a lost compare-and-set the re-read
55
+ * Operation is returned, and any reservation it now shows counts as held. Other
56
+ * Operations are returned as listed.
57
+ */
58
+ export declare function fenceStalePrepare(engine: Reconciler, record: OperationRecord): Promise<OperationRecord>;
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.reconcileNonces = reconcileNonces;
4
+ exports.reclaimLeaked = reclaimLeaked;
5
+ exports.consumedFloor = consumedFloor;
6
+ exports.fenceStalePrepare = fenceStalePrepare;
7
+ const error_1 = require("../errors/error");
8
+ const types_1 = require("../store/types");
9
+ const engine_rules_1 = require("./engine-rules");
10
+ /**
11
+ * Nonce reconciliation, never a filler transaction. Under the address lease,
12
+ * returns to `released` every value in [floor, next) that no live Operation of
13
+ * `op`'s wallet reserves, so the next allocation reuses it and the transfers waiting
14
+ * behind the gap can land; `floor` is `consumedFloor` (never below a nonce the chain
15
+ * consumed at finality), and the wallet's history is read only when some value is
16
+ * reclaimable at all. It closes the leaks a release cannot: a crash between
17
+ * allocation and the `prepared` write, a store failure inside a release after a terminal
18
+ * write, and a failure recorded without a release. Every live `created` Operation
19
+ * without a reservation is fenced first (`fenceStalePrepare`), so a `prepared` write
20
+ * still in flight from a lapsed lease can never land on a released value (a legitimate
21
+ * transfer re-reads its Operation under the lease). Returns the reclaimed values. The
22
+ * lease wait is bounded by `signal` and `acquireTimeoutMs` (`0` tries once); a busy lease
23
+ * rejects with SEQUENCE_BUSY. A target whose wallet does not own `op` is refused
24
+ * (INVALID_INTENT): its lease guards another sequence.
25
+ */
26
+ async function reconcileNonces(engine, target, op, options = {}) {
27
+ const { driver } = target.pooled;
28
+ const sequence = driver.sequence;
29
+ if (driver.ordering !== 'nonce' || !sequence)
30
+ return [];
31
+ engine.assertOwnedBy(target, op);
32
+ const { signal, acquireTimeoutMs } = options;
33
+ return engine.withAddressLease(target, op, async (lease) => reclaimLeaked(engine, op, lease, await sequence.pending(op.intent.from)), signal, acquireTimeoutMs === undefined ? undefined : { acquireTimeoutMs });
34
+ }
35
+ /**
36
+ * The body of `reconcileNonces`, under the held address lease of `op`'s wallet, with the
37
+ * chain's pending nonce already read. `preparing` is an Operation this lease is preparing
38
+ * right now (`prepareStage`): it is never fenced, since its own write follows.
39
+ */
40
+ async function reclaimLeaked(engine, op, lease, chainPending, preparing) {
41
+ const wallet = {
42
+ namespace: engine.deps.namespace,
43
+ chain: op.context.chain,
44
+ network: op.context.network,
45
+ from: op.intent.from,
46
+ };
47
+ const key = engine.sequenceKeyOf(op);
48
+ // Cheap first: with nothing reclaimable, neither the fencing writes nor the wallet's
49
+ // history are needed (fencing only ever adds held values), and with no value at or
50
+ // above `chainPending` ever allocated, not even the live Operations.
51
+ const state = await engine.deps.stores.sequences.get(key);
52
+ if (!state || state.next <= chainPending)
53
+ return [];
54
+ const live = await engine.deps.stores.operations.list({
55
+ ...wallet,
56
+ states: types_1.NON_TERMINAL_STATES,
57
+ });
58
+ if (!(0, engine_rules_1.hasReclaimable)(state, chainPending, live.flatMap(engine_rules_1.heldNonces)))
59
+ return [];
60
+ const held = [];
61
+ for (const record of live) {
62
+ const current = record.id === preparing ? record : await fenceStalePrepare(engine, record);
63
+ held.push(...(0, engine_rules_1.heldNonces)(current));
64
+ }
65
+ const floor = await consumedFloor(engine, wallet, chainPending);
66
+ await lease.renew();
67
+ return engine.deps.sequences.reclaim(lease, key, floor, held);
68
+ }
69
+ /**
70
+ * The lowest value reconciliation may reclaim: `chainPending` (a lagging endpoint can
71
+ * under-report it), raised above every nonce the chain consumed at finality, i.e. those
72
+ * of `final` Operations and of failures proven on chain (`TX_REVERTED`, `TX_REPLACED`).
73
+ * A rejection, a failure before signing or an abandoned Operation consumed nothing.
74
+ */
75
+ async function consumedFloor(engine, wallet, chainPending) {
76
+ let floor = chainPending;
77
+ const history = await engine.deps.stores.operations.list({
78
+ ...wallet,
79
+ states: ['final', 'failed'],
80
+ });
81
+ for (const record of history) {
82
+ if (record.state === 'failed' && !engine_rules_1.CONSUMED_FAILURES.has(record.error?.code ?? ''))
83
+ continue;
84
+ for (const nonce of (0, engine_rules_1.heldNonces)(record))
85
+ if (nonce >= floor)
86
+ floor = nonce + 1n;
87
+ }
88
+ return floor;
89
+ }
90
+ /**
91
+ * A `created` Operation without a reservation may still have a `prepared` write in
92
+ * flight from a process whose lease lapsed (it allocated a nonce, renewed, then stalled).
93
+ * A no-effect compare-and-set at the listed version makes that stale write lose its own
94
+ * compare-and-set, so it can never land a reservation on a value this reconciliation
95
+ * releases. This relies on the store bumping `version` on every `update`, a no-op one
96
+ * included (the store contract pins it). After a lost compare-and-set the re-read
97
+ * Operation is returned, and any reservation it now shows counts as held. Other
98
+ * Operations are returned as listed.
99
+ */
100
+ async function fenceStalePrepare(engine, record) {
101
+ if (record.state !== 'created' || record.reservation !== undefined)
102
+ return record;
103
+ try {
104
+ return await engine.update(record, { clear: ['error'] });
105
+ }
106
+ catch (error) {
107
+ if (!(0, error_1.isCryptoAioError)(error, 'VERSION_CONFLICT'))
108
+ throw error;
109
+ return engine.require(record.id);
110
+ }
111
+ }
112
+ //# sourceMappingURL=reconcile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconcile.js","sourceRoot":"","sources":["../../../src/core/lifecycle/reconcile.ts"],"names":[],"mappings":"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","sourcesContent":["import { isCryptoAioError } from '../errors/error';\nimport type { LeaseHandle } from '../ordering/sequence';\nimport {\n NON_TERMINAL_STATES,\n type OperationFilter,\n type OperationPatch,\n type OperationRecord,\n} from '../store/types';\nimport type { EngineDeps, OperationTarget, ReadTarget } from './engine';\nimport { CONSUMED_FAILURES, hasReclaimable, heldNonces } from './engine-rules';\n\n/*\n * Nonce reconciliation, as functions over the engine's deps. The\n * engine hands in its deps and the few steps of its own these need (`Reconciler`).\n */\n\n/** What reconciliation needs from `OperationEngine`: its deps and a few of its steps. */\nexport interface Reconciler {\n readonly deps: EngineDeps;\n update(op: OperationRecord, patch: OperationPatch): Promise<OperationRecord>;\n require(operationId: string): Promise<OperationRecord>;\n sequenceKeyOf(op: OperationRecord): string;\n assertOwnedBy(target: OperationTarget, op: OperationRecord): void;\n withAddressLease<T>(\n target: ReadTarget,\n op: OperationRecord,\n fn: (lease: LeaseHandle | undefined) => Promise<T>,\n signal?: AbortSignal,\n options?: { readonly acquireTimeoutMs?: number },\n ): Promise<T>;\n}\n\n/**\n * Nonce reconciliation, never a filler transaction. Under the address lease,\n * returns to `released` every value in [floor, next) that no live Operation of\n * `op`'s wallet reserves, so the next allocation reuses it and the transfers waiting\n * behind the gap can land; `floor` is `consumedFloor` (never below a nonce the chain\n * consumed at finality), and the wallet's history is read only when some value is\n * reclaimable at all. It closes the leaks a release cannot: a crash between\n * allocation and the `prepared` write, a store failure inside a release after a terminal\n * write, and a failure recorded without a release. Every live `created` Operation\n * without a reservation is fenced first (`fenceStalePrepare`), so a `prepared` write\n * still in flight from a lapsed lease can never land on a released value (a legitimate\n * transfer re-reads its Operation under the lease). Returns the reclaimed values. The\n * lease wait is bounded by `signal` and `acquireTimeoutMs` (`0` tries once); a busy lease\n * rejects with SEQUENCE_BUSY. A target whose wallet does not own `op` is refused\n * (INVALID_INTENT): its lease guards another sequence.\n */\nexport async function reconcileNonces(\n engine: Reconciler,\n target: OperationTarget,\n op: OperationRecord,\n options: { readonly signal?: AbortSignal; readonly acquireTimeoutMs?: number } = {},\n): Promise<readonly bigint[]> {\n const { driver } = target.pooled;\n const sequence = driver.sequence;\n if (driver.ordering !== 'nonce' || !sequence) return [];\n engine.assertOwnedBy(target, op);\n const { signal, acquireTimeoutMs } = options;\n return engine.withAddressLease(\n target,\n op,\n async (lease) =>\n reclaimLeaked(\n engine,\n op,\n lease as LeaseHandle,\n await sequence.pending(op.intent.from),\n ),\n signal,\n acquireTimeoutMs === undefined ? undefined : { acquireTimeoutMs },\n );\n}\n\n/**\n * The body of `reconcileNonces`, under the held address lease of `op`'s wallet, with the\n * chain's pending nonce already read. `preparing` is an Operation this lease is preparing\n * right now (`prepareStage`): it is never fenced, since its own write follows.\n */\nexport async function reclaimLeaked(\n engine: Reconciler,\n op: OperationRecord,\n lease: LeaseHandle,\n chainPending: bigint,\n preparing?: string,\n): Promise<readonly bigint[]> {\n const wallet = {\n namespace: engine.deps.namespace,\n chain: op.context.chain,\n network: op.context.network,\n from: op.intent.from,\n };\n const key = engine.sequenceKeyOf(op);\n // Cheap first: with nothing reclaimable, neither the fencing writes nor the wallet's\n // history are needed (fencing only ever adds held values), and with no value at or\n // above `chainPending` ever allocated, not even the live Operations.\n const state = await engine.deps.stores.sequences.get(key);\n if (!state || state.next <= chainPending) return [];\n const live = await engine.deps.stores.operations.list({\n ...wallet,\n states: NON_TERMINAL_STATES,\n });\n if (!hasReclaimable(state, chainPending, live.flatMap(heldNonces))) return [];\n const held: bigint[] = [];\n for (const record of live) {\n const current =\n record.id === preparing ? record : await fenceStalePrepare(engine, record);\n held.push(...heldNonces(current));\n }\n const floor = await consumedFloor(engine, wallet, chainPending);\n await lease.renew();\n return engine.deps.sequences.reclaim(lease, key, floor, held);\n}\n\n/**\n * The lowest value reconciliation may reclaim: `chainPending` (a lagging endpoint can\n * under-report it), raised above every nonce the chain consumed at finality, i.e. those\n * of `final` Operations and of failures proven on chain (`TX_REVERTED`, `TX_REPLACED`).\n * A rejection, a failure before signing or an abandoned Operation consumed nothing.\n */\nexport async function consumedFloor(\n engine: Reconciler,\n wallet: Omit<OperationFilter, 'states' | 'limit'>,\n chainPending: bigint,\n): Promise<bigint> {\n let floor = chainPending;\n const history = await engine.deps.stores.operations.list({\n ...wallet,\n states: ['final', 'failed'],\n });\n for (const record of history) {\n if (record.state === 'failed' && !CONSUMED_FAILURES.has(record.error?.code ?? ''))\n continue;\n for (const nonce of heldNonces(record)) if (nonce >= floor) floor = nonce + 1n;\n }\n return floor;\n}\n\n/**\n * A `created` Operation without a reservation may still have a `prepared` write in\n * flight from a process whose lease lapsed (it allocated a nonce, renewed, then stalled).\n * A no-effect compare-and-set at the listed version makes that stale write lose its own\n * compare-and-set, so it can never land a reservation on a value this reconciliation\n * releases. This relies on the store bumping `version` on every `update`, a no-op one\n * included (the store contract pins it). After a lost compare-and-set the re-read\n * Operation is returned, and any reservation it now shows counts as held. Other\n * Operations are returned as listed.\n */\nexport async function fenceStalePrepare(\n engine: Reconciler,\n record: OperationRecord,\n): Promise<OperationRecord> {\n if (record.state !== 'created' || record.reservation !== undefined) return record;\n try {\n return await engine.update(record, { clear: ['error'] });\n } catch (error) {\n if (!isCryptoAioError(error, 'VERSION_CONFLICT')) throw error;\n return engine.require(record.id);\n }\n}\n"]}
@@ -0,0 +1,49 @@
1
+ import type { SerializedError } from '../errors/error';
2
+ import type { FeeEstimate } from '../model/fee';
3
+ import type { AttemptRef, RawTx, TxStatus } from '../model/transaction';
4
+ import type { SigningRequest } from '../signing/types';
5
+ import type { AttemptObservation, AttemptPurpose, OperationRecord, OperationState } from '../store/types';
6
+ import type { ConfirmationResult, WaitOptions } from './monitor';
7
+ export interface AttemptView {
8
+ readonly id: string;
9
+ readonly ref: AttemptRef;
10
+ readonly purpose: AttemptPurpose;
11
+ readonly supersedes?: string;
12
+ readonly createdAt: number;
13
+ readonly status?: TxStatus;
14
+ }
15
+ /** Public view of an Operation: ids and states only (no payloads, raw transactions or intents). */
16
+ export interface OperationView {
17
+ readonly id: string;
18
+ readonly idempotencyKey: string;
19
+ readonly chain: string;
20
+ readonly network: string;
21
+ readonly state: OperationState;
22
+ readonly outcome?: 'executed' | 'cancelled';
23
+ readonly ambiguous: boolean;
24
+ readonly attempts: readonly AttemptView[];
25
+ readonly activeAttempt?: AttemptRef;
26
+ readonly error?: SerializedError;
27
+ readonly createdAt: number;
28
+ readonly updatedAt: number;
29
+ }
30
+ export interface PreparedOperation {
31
+ readonly operation: OperationView;
32
+ /** Present while the Operation awaits signatures (offline, cold or asynchronous signers). */
33
+ readonly unsigned?: {
34
+ readonly payload: RawTx;
35
+ readonly signingRequests: readonly SigningRequest[];
36
+ readonly expectedRef?: AttemptRef;
37
+ readonly fee: FeeEstimate;
38
+ };
39
+ }
40
+ /** Result of transfer/submitSignatures/rebroadcast: the Operation view plus its active Attempt. */
41
+ export interface Submission extends OperationView {
42
+ readonly operationId: string;
43
+ readonly attempt?: AttemptRef;
44
+ /** Shorthand for `bc.waitForConfirmation(operationId, options)`. */
45
+ wait(options?: WaitOptions): Promise<ConfirmationResult>;
46
+ }
47
+ /** Final finality needs `proven` evidence; an observed-only view is at most probabilistic. */
48
+ export declare function statusOf(observation: AttemptObservation): TxStatus;
49
+ export declare function toView(record: OperationRecord, observations: ReadonlyMap<string, AttemptObservation>): OperationView;
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.statusOf = statusOf;
4
+ exports.toView = toView;
5
+ /** Final finality needs `proven` evidence; an observed-only view is at most probabilistic. */
6
+ function statusOf(observation) {
7
+ const { state } = observation;
8
+ const settled = state === 'final' || state === 'failed';
9
+ const finality = settled && observation.evidence === 'proven'
10
+ ? 'final'
11
+ : settled || state === 'included'
12
+ ? 'probabilistic'
13
+ : 'none';
14
+ return {
15
+ state: observation.state,
16
+ evidence: observation.evidence,
17
+ confirmations: observation.confirmations,
18
+ finality,
19
+ ...(observation.txHash !== undefined ? { txHash: observation.txHash } : {}),
20
+ ...(observation.blockHash !== undefined ? { blockHash: observation.blockHash } : {}),
21
+ ...(observation.blockHeight !== undefined
22
+ ? { blockHeight: observation.blockHeight }
23
+ : {}),
24
+ ...(observation.reason !== undefined ? { reason: observation.reason } : {}),
25
+ ...(observation.replacedBy !== undefined
26
+ ? { replacedBy: observation.replacedBy }
27
+ : {}),
28
+ };
29
+ }
30
+ function toView(record, observations) {
31
+ const active = record.attempts.find((a) => a.id === record.activeAttemptId);
32
+ return {
33
+ id: record.id,
34
+ idempotencyKey: record.idempotencyKey,
35
+ chain: record.context.chain,
36
+ network: record.context.network,
37
+ state: record.state,
38
+ ...(record.outcome ? { outcome: record.outcome } : {}),
39
+ ambiguous: record.ambiguous ?? false,
40
+ attempts: record.attempts.map((attempt) => {
41
+ const observation = observations.get(attempt.id);
42
+ return {
43
+ id: attempt.id,
44
+ ref: attempt.ref,
45
+ purpose: attempt.purpose,
46
+ ...(attempt.supersedes !== undefined ? { supersedes: attempt.supersedes } : {}),
47
+ createdAt: attempt.createdAt,
48
+ ...(observation ? { status: statusOf(observation) } : {}),
49
+ };
50
+ }),
51
+ ...(active ? { activeAttempt: active.ref } : {}),
52
+ ...(record.error ? { error: record.error } : {}),
53
+ createdAt: record.createdAt,
54
+ updatedAt: record.updatedAt,
55
+ };
56
+ }
57
+ //# sourceMappingURL=views.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"views.js","sourceRoot":"","sources":["../../../src/core/lifecycle/views.ts"],"names":[],"mappings":"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","sourcesContent":["import type { SerializedError } from '../errors/error';\nimport type { FeeEstimate } from '../model/fee';\nimport type { AttemptRef, RawTx, TxStatus } from '../model/transaction';\nimport type { SigningRequest } from '../signing/types';\nimport type {\n AttemptObservation,\n AttemptPurpose,\n OperationRecord,\n OperationState,\n} from '../store/types';\nimport type { ConfirmationResult, WaitOptions } from './monitor';\n\nexport interface AttemptView {\n readonly id: string;\n readonly ref: AttemptRef;\n readonly purpose: AttemptPurpose;\n readonly supersedes?: string;\n readonly createdAt: number;\n readonly status?: TxStatus;\n}\n\n/** Public view of an Operation: ids and states only (no payloads, raw transactions or intents). */\nexport interface OperationView {\n readonly id: string;\n readonly idempotencyKey: string;\n readonly chain: string;\n readonly network: string;\n readonly state: OperationState;\n readonly outcome?: 'executed' | 'cancelled';\n readonly ambiguous: boolean;\n readonly attempts: readonly AttemptView[];\n readonly activeAttempt?: AttemptRef;\n readonly error?: SerializedError;\n readonly createdAt: number;\n readonly updatedAt: number;\n}\n\nexport interface PreparedOperation {\n readonly operation: OperationView;\n /** Present while the Operation awaits signatures (offline, cold or asynchronous signers). */\n readonly unsigned?: {\n readonly payload: RawTx;\n readonly signingRequests: readonly SigningRequest[];\n readonly expectedRef?: AttemptRef;\n readonly fee: FeeEstimate;\n };\n}\n\n/** Result of transfer/submitSignatures/rebroadcast: the Operation view plus its active Attempt. */\nexport interface Submission extends OperationView {\n readonly operationId: string;\n readonly attempt?: AttemptRef;\n /** Shorthand for `bc.waitForConfirmation(operationId, options)`. */\n wait(options?: WaitOptions): Promise<ConfirmationResult>;\n}\n\n/** Final finality needs `proven` evidence; an observed-only view is at most probabilistic. */\nexport function statusOf(observation: AttemptObservation): TxStatus {\n const { state } = observation;\n const settled = state === 'final' || state === 'failed';\n const finality =\n settled && observation.evidence === 'proven'\n ? 'final'\n : settled || state === 'included'\n ? 'probabilistic'\n : 'none';\n return {\n state: observation.state,\n evidence: observation.evidence,\n confirmations: observation.confirmations,\n finality,\n ...(observation.txHash !== undefined ? { txHash: observation.txHash } : {}),\n ...(observation.blockHash !== undefined ? { blockHash: observation.blockHash } : {}),\n ...(observation.blockHeight !== undefined\n ? { blockHeight: observation.blockHeight }\n : {}),\n ...(observation.reason !== undefined ? { reason: observation.reason } : {}),\n ...(observation.replacedBy !== undefined\n ? { replacedBy: observation.replacedBy }\n : {}),\n };\n}\n\nexport function toView(\n record: OperationRecord,\n observations: ReadonlyMap<string, AttemptObservation>,\n): OperationView {\n const active = record.attempts.find((a) => a.id === record.activeAttemptId);\n return {\n id: record.id,\n idempotencyKey: record.idempotencyKey,\n chain: record.context.chain,\n network: record.context.network,\n state: record.state,\n ...(record.outcome ? { outcome: record.outcome } : {}),\n ambiguous: record.ambiguous ?? false,\n attempts: record.attempts.map((attempt) => {\n const observation = observations.get(attempt.id);\n return {\n id: attempt.id,\n ref: attempt.ref,\n purpose: attempt.purpose,\n ...(attempt.supersedes !== undefined ? { supersedes: attempt.supersedes } : {}),\n createdAt: attempt.createdAt,\n ...(observation ? { status: statusOf(observation) } : {}),\n };\n }),\n ...(active ? { activeAttempt: active.ref } : {}),\n ...(record.error ? { error: record.error } : {}),\n createdAt: record.createdAt,\n updatedAt: record.updatedAt,\n };\n}\n"]}
@@ -0,0 +1,82 @@
1
+ import { type Fence, type OperationRecord } from '../store/types';
2
+ import type { ReadTarget } from './engine';
3
+ import type { MonitorDeps } from './monitor';
4
+ /**
5
+ * What `recover()` did. The counts are per Operation, except `reconciled`, and they
6
+ * overlap: an Operation whose resend was attempted and whose check then failed counts in
7
+ * both `rebroadcast` and `failed`.
8
+ */
9
+ export interface RecoveryReport {
10
+ /**
11
+ * `signed` or ambiguously `submitted` Operations whose stored bytes were sent again:
12
+ * attempted resends, including ones the node refused or whose outcome is unknown.
13
+ */
14
+ readonly rebroadcast: number;
15
+ /** Operations checked on chain after any resend. */
16
+ readonly checked: number;
17
+ /** Operations that need a caller (see `recovery.skipped`); never resent or checked. */
18
+ readonly skipped: number;
19
+ /** Operations whose target could not be rebuilt, or whose resend or check threw. */
20
+ readonly failed: number;
21
+ /** Leaked nonce values that reconciliation returned for reuse (across all wallets). */
22
+ readonly reconciled: number;
23
+ }
24
+ export interface WorkerOptions {
25
+ /** Default: a random id per `start` call. */
26
+ readonly workerId?: string;
27
+ readonly signal?: AbortSignal;
28
+ /** How many due Operations one pass claims. Default: 50. */
29
+ readonly batch?: number;
30
+ }
31
+ /** What the worker loop and recovery use of the monitor's own checks. */
32
+ export interface MonitorChecks {
33
+ checkPass(target: ReadTarget, op: OperationRecord, fence?: Fence, signal?: AbortSignal): Promise<{
34
+ readonly record: OperationRecord;
35
+ readonly stale: boolean;
36
+ }>;
37
+ check(target: ReadTarget, op: OperationRecord, fence?: Fence, signal?: AbortSignal): Promise<OperationRecord>;
38
+ find(ref: string): Promise<OperationRecord | null>;
39
+ }
40
+ /** Worker passes and startup recovery for one monitor (see `Monitor`). */
41
+ export declare class Workers {
42
+ #private;
43
+ private readonly deps;
44
+ private readonly monitor;
45
+ constructor(deps: MonitorDeps, monitor: MonitorChecks);
46
+ /**
47
+ * One worker pass: claims up to `batch` due Operations, checks each under its claim fence
48
+ * (a stale worker's writes fail), then releases the claim. Every claimed Operation
49
+ * that stays live leaves the pass scheduled a poll interval ahead, including when its
50
+ * check threw, its view was stale or its all-rejected verdict could not run, so no worker
51
+ * claims it again before then. A stale view also skips gap handling and reconciliation.
52
+ * `signal` bounds each check and its lease wait; once it aborts, the Operations not yet
53
+ * checked are only released, still due, for another worker. Returns how many Operations
54
+ * it claimed.
55
+ */
56
+ runOnce(options: {
57
+ readonly workerId: string;
58
+ readonly batch?: number;
59
+ readonly signal?: AbortSignal;
60
+ }): Promise<number>;
61
+ /**
62
+ * Runs worker passes until `signal` aborts. Any number of workers, in any number of
63
+ * processes, may run: claims keep them apart. A full batch is followed by the next pass at
64
+ * once, anything less by a poll-interval sleep. A failed pass (e.g. a store outage) is
65
+ * logged by code and retried after the sleep.
66
+ */
67
+ start(options?: WorkerOptions): Promise<void>;
68
+ /**
69
+ * Startup recovery for this namespace; it never signs. `signed` and ambiguously
70
+ * `submitted` Operations resend their stored raw bytes; every other signed-or-later live
71
+ * Operation is checked. `created`, `prepared`, `awaiting-signature` and `stalled` ones need
72
+ * a caller and are reported through `recovery.skipped` (codes and states only). Then each
73
+ * wallet with a live Operation has its nonces reconciled under its address lease. A
74
+ * failure is logged by code and counted, and the rest go on. `signal` stops recovery
75
+ * between Operations and bounds each check and lease wait. Known gap: a `signed` or
76
+ * ambiguous Operation whose wallet-bound target cannot be resolved is counted `failed`
77
+ * without its check, although the check needs no wallet.
78
+ */
79
+ recover(options?: {
80
+ readonly signal?: AbortSignal;
81
+ }): Promise<RecoveryReport>;
82
+ }