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,117 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DATA_CLASSIFICATION = exports.OPERATION_PATCH_KEYS = exports.CLEARABLE_FIELDS = exports.NON_TERMINAL_STATES = exports.TERMINAL_STATES = void 0;
4
+ exports.isTerminal = isTerminal;
5
+ // The exported tables in this module are frozen: they are shared by every caller.
6
+ exports.TERMINAL_STATES = Object.freeze([
7
+ 'final',
8
+ 'failed',
9
+ 'expired',
10
+ 'abandoned',
11
+ ]);
12
+ exports.NON_TERMINAL_STATES = Object.freeze([
13
+ 'created',
14
+ 'prepared',
15
+ 'awaiting-signature',
16
+ 'signed',
17
+ 'submitted',
18
+ 'stalled',
19
+ 'included',
20
+ ]);
21
+ /** A private copy taken at load, so `isTerminal` never reads an exported value. */
22
+ const TERMINAL = new Set(exports.TERMINAL_STATES);
23
+ function isTerminal(state) {
24
+ return TERMINAL.has(state);
25
+ }
26
+ exports.CLEARABLE_FIELDS = Object.freeze([
27
+ 'outcome',
28
+ 'unsigned',
29
+ 'reservation',
30
+ 'signerTickets',
31
+ 'partialSignatures',
32
+ 'activeAttemptId',
33
+ 'ambiguous',
34
+ 'error',
35
+ 'nextCheckAt',
36
+ ]);
37
+ /** Runtime whitelist of writable `OperationPatch` fields (everything but `clear`). */
38
+ exports.OPERATION_PATCH_KEYS = Object.freeze([
39
+ 'state',
40
+ 'outcome',
41
+ 'unsigned',
42
+ 'reservation',
43
+ 'signerTickets',
44
+ 'partialSignatures',
45
+ 'activeAttemptId',
46
+ 'ambiguous',
47
+ 'error',
48
+ 'nextCheckAt',
49
+ ]);
50
+ const _assertNoMissingPatchKeys = true;
51
+ const _assertNoExtraPatchKeys = true;
52
+ const _assertClearableIsWritable = true;
53
+ /**
54
+ * Field classification so backing stores can apply encryption and retention per field.
55
+ *
56
+ * `operation.reservation` and `attempt.ordering` are `sensitive` because an `inputs`
57
+ * ordering lists UTXO outpoints, which tie a wallet to its coins. A nonce or seqno value
58
+ * on its own is an operational identifier, like an Operation id: the `nonce.allocated`
59
+ * and `nonce.gap` events carry it, and logs may too.
60
+ */
61
+ exports.DATA_CLASSIFICATION = Object.freeze({
62
+ operation: Object.freeze({
63
+ id: 'operational',
64
+ namespace: 'operational',
65
+ idempotencyKey: 'sensitive',
66
+ intentHash: 'operational',
67
+ context: 'sensitive',
68
+ kind: 'operational',
69
+ state: 'operational',
70
+ outcome: 'operational',
71
+ intent: 'sensitive',
72
+ unsigned: 'sensitive',
73
+ // `inputs` orderings carry UTXO outpoints; nonce and seqno values are operational.
74
+ reservation: 'sensitive',
75
+ signerTickets: 'sensitive',
76
+ partialSignatures: 'sensitive',
77
+ attempts: 'sensitive-until-broadcast',
78
+ activeAttemptId: 'operational',
79
+ ambiguous: 'operational',
80
+ version: 'operational',
81
+ claim: 'operational',
82
+ error: 'sensitive',
83
+ createdAt: 'operational',
84
+ updatedAt: 'operational',
85
+ nextCheckAt: 'operational',
86
+ }),
87
+ attempt: Object.freeze({
88
+ id: 'operational',
89
+ ref: 'sensitive-until-broadcast',
90
+ raw: 'sensitive-until-broadcast',
91
+ // As `operation.reservation`.
92
+ ordering: 'sensitive',
93
+ fee: 'sensitive',
94
+ unsigned: 'sensitive',
95
+ purpose: 'operational',
96
+ supersedes: 'operational',
97
+ createdAt: 'operational',
98
+ }),
99
+ observation: Object.freeze({
100
+ attemptId: 'operational',
101
+ operationId: 'operational',
102
+ state: 'operational',
103
+ evidence: 'operational',
104
+ txHash: 'operational',
105
+ blockHash: 'operational',
106
+ blockHeight: 'operational',
107
+ confirmations: 'operational',
108
+ firstSeenAt: 'operational',
109
+ lastSeenAt: 'operational',
110
+ lastBroadcastAt: 'operational',
111
+ // A node's refusal or rejection text can carry addresses or amounts.
112
+ reason: 'sensitive',
113
+ replacedBy: 'operational',
114
+ version: 'operational',
115
+ }),
116
+ });
117
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/store/types.ts"],"names":[],"mappings":";;;AAgDA,gCAEC;AAxBD,kFAAkF;AAErE,QAAA,eAAe,GAA8B,MAAM,CAAC,MAAM,CAAC;IACtE,OAAO;IACP,QAAQ;IACR,SAAS;IACT,WAAW;CACZ,CAAC,CAAC;AAEU,QAAA,mBAAmB,GAA8B,MAAM,CAAC,MAAM,CAAC;IAC1E,SAAS;IACT,UAAU;IACV,oBAAoB;IACpB,QAAQ;IACR,WAAW;IACX,SAAS;IACT,UAAU;CACX,CAAC,CAAC;AAEH,mFAAmF;AACnF,MAAM,QAAQ,GAAgC,IAAI,GAAG,CAAC,uBAAe,CAAC,CAAC;AAEvE,SAAgB,UAAU,CAAC,KAAqB;IAC9C,OAAO,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC;AAqFY,QAAA,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC5C,SAAS;IACT,UAAU;IACV,aAAa;IACb,eAAe;IACf,mBAAmB;IACnB,iBAAiB;IACjB,WAAW;IACX,OAAO;IACP,aAAa;CACL,CAAC,CAAC;AAoBZ,sFAAsF;AACzE,QAAA,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC;IAChD,OAAO;IACP,SAAS;IACT,UAAU;IACV,aAAa;IACb,eAAe;IACf,mBAAmB;IACnB,iBAAiB;IACjB,WAAW;IACX,OAAO;IACP,aAAa;CACL,CAAC,CAAC;AASZ,MAAM,yBAAyB,GAA6B,IAAI,CAAC;AACjE,MAAM,uBAAuB,GAA2B,IAAI,CAAC;AAQ7D,MAAM,0BAA0B,GAA8B,IAAI,CAAC;AA0KnE;;;;;;;GAOG;AACU,QAAA,mBAAmB,GAI5B,MAAM,CAAC,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;QACvB,EAAE,EAAE,aAAa;QACjB,SAAS,EAAE,aAAa;QACxB,cAAc,EAAE,WAAW;QAC3B,UAAU,EAAE,aAAa;QACzB,OAAO,EAAE,WAAW;QACpB,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,aAAa;QACpB,OAAO,EAAE,aAAa;QACtB,MAAM,EAAE,WAAW;QACnB,QAAQ,EAAE,WAAW;QACrB,mFAAmF;QACnF,WAAW,EAAE,WAAW;QACxB,aAAa,EAAE,WAAW;QAC1B,iBAAiB,EAAE,WAAW;QAC9B,QAAQ,EAAE,2BAA2B;QACrC,eAAe,EAAE,aAAa;QAC9B,SAAS,EAAE,aAAa;QACxB,OAAO,EAAE,aAAa;QACtB,KAAK,EAAE,aAAa;QACpB,KAAK,EAAE,WAAW;QAClB,SAAS,EAAE,aAAa;QACxB,SAAS,EAAE,aAAa;QACxB,WAAW,EAAE,aAAa;KAC3B,CAAC;IACF,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC;QACrB,EAAE,EAAE,aAAa;QACjB,GAAG,EAAE,2BAA2B;QAChC,GAAG,EAAE,2BAA2B;QAChC,8BAA8B;QAC9B,QAAQ,EAAE,WAAW;QACrB,GAAG,EAAE,WAAW;QAChB,QAAQ,EAAE,WAAW;QACrB,OAAO,EAAE,aAAa;QACtB,UAAU,EAAE,aAAa;QACzB,SAAS,EAAE,aAAa;KACzB,CAAC;IACF,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC;QACzB,SAAS,EAAE,aAAa;QACxB,WAAW,EAAE,aAAa;QAC1B,KAAK,EAAE,aAAa;QACpB,QAAQ,EAAE,aAAa;QACvB,MAAM,EAAE,aAAa;QACrB,SAAS,EAAE,aAAa;QACxB,WAAW,EAAE,aAAa;QAC1B,aAAa,EAAE,aAAa;QAC5B,WAAW,EAAE,aAAa;QAC1B,UAAU,EAAE,aAAa;QACzB,eAAe,EAAE,aAAa;QAC9B,qEAAqE;QACrE,MAAM,EAAE,WAAW;QACnB,UAAU,EAAE,aAAa;QACzB,OAAO,EAAE,aAAa;KACvB,CAAC;CACH,CAAC,CAAC","sourcesContent":["import type { SerializedError } from '../errors/error';\nimport type { FeeEstimateDraft } from '../model/fee';\nimport type { StoredIntent } from '../model/intent';\nimport type { OrderingData } from '../model/ordering';\nimport type {\n AttemptRef,\n Evidence,\n RawTx,\n TxState,\n UnsignedTx,\n} from '../model/transaction';\nimport type { SignatureBundle, SignerTicket } from '../signing/types';\n\nexport type OperationState =\n | 'created'\n | 'prepared'\n | 'awaiting-signature'\n | 'signed'\n | 'submitted'\n | 'stalled'\n | 'included'\n | 'final'\n | 'failed'\n | 'expired'\n | 'abandoned';\n\n// The exported tables in this module are frozen: they are shared by every caller.\n\nexport const TERMINAL_STATES: readonly OperationState[] = Object.freeze([\n 'final',\n 'failed',\n 'expired',\n 'abandoned',\n]);\n\nexport const NON_TERMINAL_STATES: readonly OperationState[] = Object.freeze([\n 'created',\n 'prepared',\n 'awaiting-signature',\n 'signed',\n 'submitted',\n 'stalled',\n 'included',\n]);\n\n/** A private copy taken at load, so `isTerminal` never reads an exported value. */\nconst TERMINAL: ReadonlySet<OperationState> = new Set(TERMINAL_STATES);\n\nexport function isTerminal(state: OperationState): boolean {\n return TERMINAL.has(state);\n}\n\n/** Frozen at Operation creation; later handle or config changes never affect it. */\nexport interface ExecutionContext {\n readonly chain: string;\n readonly network: string;\n readonly library: string;\n /** Provider names, or `inline:<hash>` for inline configs (never secrets). */\n readonly providers: readonly string[];\n readonly indexers: readonly string[];\n readonly wallet: string;\n readonly signer?: string;\n readonly configHash: string;\n}\n\nexport type AttemptPurpose = 'original' | 'replacement' | 'cancel' | 'rebuild';\n\n/** One concrete signed transaction. Immutable after insertion. */\nexport interface AttemptRecord {\n readonly id: string;\n readonly ref: AttemptRef;\n readonly raw: RawTx;\n readonly ordering: OrderingData;\n readonly fee: FeeEstimateDraft;\n readonly unsigned: UnsignedTx;\n readonly purpose: AttemptPurpose;\n readonly supersedes?: string;\n readonly createdAt: number;\n}\n\n/** Mutable, versioned view of what the chain says about an Attempt. */\nexport interface AttemptObservation {\n readonly attemptId: string;\n readonly operationId: string;\n readonly state: TxState;\n readonly evidence: Evidence;\n readonly txHash?: string;\n readonly blockHash?: string;\n readonly blockHeight?: bigint;\n readonly confirmations: number;\n readonly firstSeenAt?: number;\n readonly lastSeenAt?: number;\n readonly lastBroadcastAt?: number;\n readonly reason?: string;\n readonly replacedBy?: string;\n readonly version: number;\n}\n\nexport interface OperationClaim {\n readonly workerId: string;\n /** Strictly increasing per store (decimal string of a bigint). */\n readonly token: string;\n readonly until: number;\n}\n\nexport interface OperationRecord {\n readonly id: string;\n readonly namespace: string;\n readonly idempotencyKey: string;\n readonly intentHash: string;\n readonly context: ExecutionContext;\n readonly kind: 'transfer';\n readonly state: OperationState;\n readonly outcome?: 'executed' | 'cancelled';\n readonly intent: StoredIntent;\n readonly unsigned?: UnsignedTx;\n readonly reservation?: OrderingData;\n readonly signerTickets?: readonly SignerTicket[];\n readonly partialSignatures?: readonly SignatureBundle[];\n readonly attempts: readonly AttemptRecord[];\n readonly activeAttemptId?: string;\n readonly ambiguous?: boolean;\n readonly version: number;\n readonly claim?: OperationClaim;\n readonly error?: SerializedError;\n readonly createdAt: number;\n readonly updatedAt: number;\n readonly nextCheckAt?: number;\n}\n\nexport type NewOperation = Omit<\n OperationRecord,\n 'version' | 'createdAt' | 'updatedAt' | 'claim'\n>;\n\nexport const CLEARABLE_FIELDS = Object.freeze([\n 'outcome',\n 'unsigned',\n 'reservation',\n 'signerTickets',\n 'partialSignatures',\n 'activeAttemptId',\n 'ambiguous',\n 'error',\n 'nextCheckAt',\n] as const);\n\n/** The only fields an `OperationPatch` may `clear`; never store-owned state or `state`. */\nexport type ClearableField = (typeof CLEARABLE_FIELDS)[number];\n\nexport interface OperationPatch {\n readonly state?: OperationState;\n readonly outcome?: 'executed' | 'cancelled';\n readonly unsigned?: UnsignedTx;\n readonly reservation?: OrderingData;\n readonly signerTickets?: readonly SignerTicket[];\n readonly partialSignatures?: readonly SignatureBundle[];\n readonly activeAttemptId?: string;\n readonly ambiguous?: boolean;\n readonly error?: SerializedError;\n readonly nextCheckAt?: number;\n /** Fields to delete; applied after the values above. */\n readonly clear?: readonly ClearableField[];\n}\n\n/** Runtime whitelist of writable `OperationPatch` fields (everything but `clear`). */\nexport const OPERATION_PATCH_KEYS = Object.freeze([\n 'state',\n 'outcome',\n 'unsigned',\n 'reservation',\n 'signerTickets',\n 'partialSignatures',\n 'activeAttemptId',\n 'ambiguous',\n 'error',\n 'nextCheckAt',\n] as const);\n\n// Compile-time check, in both directions: OPERATION_PATCH_KEYS must list exactly the\n// writable (non-'clear') fields of OperationPatch, so a future field added to one but\n// not the other fails the build instead of silently opening a hole in `update`.\ntype PatchFieldKeys = Exclude<keyof OperationPatch, 'clear'>;\ntype ListedPatchKeys = (typeof OPERATION_PATCH_KEYS)[number];\ntype AssertNoMissingPatchKeys = PatchFieldKeys extends ListedPatchKeys ? true : never;\ntype AssertNoExtraPatchKeys = ListedPatchKeys extends PatchFieldKeys ? true : never;\nconst _assertNoMissingPatchKeys: AssertNoMissingPatchKeys = true;\nconst _assertNoExtraPatchKeys: AssertNoExtraPatchKeys = true;\n\n// Compile-time check: every CLEARABLE_FIELDS entry must be a writable patch field\n// other than 'state' (which is written but never cleared). Fails the build if\n// 'attempts', 'claim', or any other non-writable field is ever added to\n// CLEARABLE_FIELDS, since that would let `clear` reach into store-owned state.\ntype AssertClearableIsWritable =\n ClearableField extends Exclude<ListedPatchKeys, 'state'> ? true : never;\nconst _assertClearableIsWritable: AssertClearableIsWritable = true;\n\nexport interface Fence {\n readonly claimToken: string;\n}\n\nexport interface OperationFilter {\n readonly namespace: string;\n readonly chain?: string;\n readonly network?: string;\n readonly from?: string;\n readonly states?: readonly OperationState[];\n readonly limit?: number;\n}\n\nexport interface CreateResult {\n readonly created: boolean;\n readonly record: OperationRecord;\n}\n\n/**\n * Durable Operation storage. Required guarantees (verified by the contract suite),\n * binding on every implementation (memory, Redis, Postgres, ...):\n * - `create` is create-if-absent on `(namespace, idempotencyKey)`: a second `create`\n * for an existing key returns the stored record unchanged, regardless of\n * `intentHash` — this store never performs the idempotency-conflict check itself;\n * the calling engine does.\n * - `update`/`appendAttempt` are version-checked (compare-and-set on\n * `expectedVersion`) and optionally fenced by a claim token. Both are restricted to\n * the same runtime patch whitelist (`OPERATION_PATCH_KEYS`), and `clear` may only\n * name `CLEARABLE_FIELDS`; any other key anywhere in the patch rejects the whole\n * call with `INVALID_TRANSITION` before any mutation. An explicit `undefined` value\n * for a writable field is a no-op (the stored value survives); only `clear` removes\n * a field.\n * - `appendAttempt` is atomic with its accompanying patch, never rewrites a\n * previously stored `AttemptRecord`, and rejects a duplicate attempt id. Attempt ids\n * are globally unique across every Operation and namespace (observations are keyed\n * by attempt id alone).\n * - `claimDue` and `list` are scoped by namespace: they never return a record of another\n * namespace, even one with the same id.\n * - `claimDue` returns only non-terminal operations with `nextCheckAt` set and `<=\n * now`, ordered by `(nextCheckAt, createdAt)` with a stable tie-break for equal\n * values, and returns `[]` for `limit <= 0`. A claimed Operation is excluded until\n * its `claim.until <= now`; then another worker may take it over. Claim tokens are\n * strictly increasing per store; fenced writes are rejected after a takeover.\n * - `list` returns matches in creation order.\n * - `ClearableField` is restricted on purpose: `clear` can never remove store-owned or\n * identity fields (`attempts`, `claim`, `version`, `id`, ...) or `state`. An\n * implementation reads the caller's `clear` list once, so the list it validates is\n * the list it applies.\n * - A key set to `undefined`, in an observation or a patch, is never persisted as a value\n * such as `null`. In a patch, the stored field keeps its value. In an\n * observation, which replaces the whole record, the field reads back `undefined` (never\n * `null`).\n */\nexport interface OperationStore {\n create(operation: NewOperation): Promise<CreateResult>;\n get(namespace: string, id: string): Promise<OperationRecord | null>;\n getByKey(namespace: string, idempotencyKey: string): Promise<OperationRecord | null>;\n /**\n * Finds by an Attempt ref id or by an observed canonical tx hash. The engine's\n * AttemptRef guard, which refuses an Attempt whose ref another Operation of the\n * namespace holds, relies on this read being read-your-writes consistent across every\n * process that shares the store: it must see any `appendAttempt` that another store\n * instance committed before it was called (no read replica, no eventually consistent\n * index).\n */\n findByRef(namespace: string, refOrTxHash: string): Promise<OperationRecord | null>;\n /**\n * Compare-and-set on `expectedVersion`, optionally fenced. Every successful update bumps\n * version, even when the patch changes no field (the engine fences stale writers\n * with such a no-effect update).\n */\n update(\n namespace: string,\n id: string,\n patch: OperationPatch,\n expectedVersion: number,\n fence?: Fence,\n ): Promise<OperationRecord>;\n appendAttempt(\n namespace: string,\n id: string,\n attempt: AttemptRecord,\n patch: OperationPatch,\n expectedVersion: number,\n fence?: Fence,\n ): Promise<OperationRecord>;\n getObservation(attemptId: string): Promise<AttemptObservation | null>;\n /**\n * Stores `observation` as the whole new record, version-checked. An optional field left\n * out of it or set to `undefined` (a cleared `reason`, `blockHash` or `blockHeight`)\n * reads back `undefined` (never `null`) afterwards. A store must replace the record, never\n * merge fields into the old one. The monitor relies on this to clear stale values.\n */\n putObservation(\n observation: Omit<AttemptObservation, 'version'>,\n expectedVersion: number | null,\n ): Promise<AttemptObservation>;\n /** Claims non-terminal operations whose `nextCheckAt` is set and <= now (unscheduled ones are never due). */\n claimDue(\n namespace: string,\n workerId: string,\n now: number,\n leaseMs: number,\n limit: number,\n ): Promise<OperationRecord[]>;\n releaseClaim(namespace: string, id: string, fence: Fence): Promise<void>;\n list(filter: OperationFilter): Promise<OperationRecord[]>;\n purge?(filter: OperationFilter): Promise<number>;\n}\n\nexport interface Lease {\n readonly key: string;\n readonly owner: string;\n /** Strictly increasing per key across all acquisitions. */\n readonly token: bigint;\n readonly expiresAt: number;\n}\n\nexport interface LockManager {\n acquire(key: string, owner: string, ttlMs: number): Promise<Lease | null>;\n renew(lease: Lease, ttlMs: number): Promise<Lease | null>;\n release(lease: Lease): Promise<void>;\n}\n\nexport interface SequenceState {\n readonly next: bigint;\n readonly released: readonly bigint[];\n readonly fence: bigint;\n readonly version: number;\n}\n\nexport interface SequenceStore {\n get(key: string): Promise<SequenceState | null>;\n /** Rejects on version mismatch (`VERSION_CONFLICT`) or when `fence` < stored fence (`FENCING`). */\n put(\n key: string,\n state: Omit<SequenceState, 'version'>,\n expectedVersion: number | null,\n ): Promise<void>;\n}\n\nexport interface ScanCursor {\n readonly height: bigint;\n readonly hash: string;\n readonly recent: readonly { readonly height: bigint; readonly hash: string }[];\n}\n\nexport interface StoredCursor {\n readonly cursor: ScanCursor;\n readonly version: number;\n}\n\nexport interface CursorStore {\n get(key: string): Promise<StoredCursor | null>;\n /** Returns the new version. */\n put(key: string, cursor: ScanCursor, expectedVersion: number | null): Promise<number>;\n}\n\nexport interface Stores {\n readonly operations: OperationStore;\n readonly locks: LockManager;\n readonly sequences: SequenceStore;\n readonly cursors: CursorStore;\n}\n\nexport type DataClass =\n 'secret' | 'sensitive' | 'sensitive-until-broadcast' | 'operational';\n\n/**\n * Field classification so backing stores can apply encryption and retention per field.\n *\n * `operation.reservation` and `attempt.ordering` are `sensitive` because an `inputs`\n * ordering lists UTXO outpoints, which tie a wallet to its coins. A nonce or seqno value\n * on its own is an operational identifier, like an Operation id: the `nonce.allocated`\n * and `nonce.gap` events carry it, and logs may too.\n */\nexport const DATA_CLASSIFICATION: {\n readonly operation: Readonly<Record<keyof OperationRecord, DataClass>>;\n readonly attempt: Readonly<Record<keyof AttemptRecord, DataClass>>;\n readonly observation: Readonly<Record<keyof AttemptObservation, DataClass>>;\n} = Object.freeze({\n operation: Object.freeze({\n id: 'operational',\n namespace: 'operational',\n idempotencyKey: 'sensitive',\n intentHash: 'operational',\n context: 'sensitive',\n kind: 'operational',\n state: 'operational',\n outcome: 'operational',\n intent: 'sensitive',\n unsigned: 'sensitive',\n // `inputs` orderings carry UTXO outpoints; nonce and seqno values are operational.\n reservation: 'sensitive',\n signerTickets: 'sensitive',\n partialSignatures: 'sensitive',\n attempts: 'sensitive-until-broadcast',\n activeAttemptId: 'operational',\n ambiguous: 'operational',\n version: 'operational',\n claim: 'operational',\n error: 'sensitive',\n createdAt: 'operational',\n updatedAt: 'operational',\n nextCheckAt: 'operational',\n }),\n attempt: Object.freeze({\n id: 'operational',\n ref: 'sensitive-until-broadcast',\n raw: 'sensitive-until-broadcast',\n // As `operation.reservation`.\n ordering: 'sensitive',\n fee: 'sensitive',\n unsigned: 'sensitive',\n purpose: 'operational',\n supersedes: 'operational',\n createdAt: 'operational',\n }),\n observation: Object.freeze({\n attemptId: 'operational',\n operationId: 'operational',\n state: 'operational',\n evidence: 'operational',\n txHash: 'operational',\n blockHash: 'operational',\n blockHeight: 'operational',\n confirmations: 'operational',\n firstSeenAt: 'operational',\n lastSeenAt: 'operational',\n lastBroadcastAt: 'operational',\n // A node's refusal or rejection text can carry addresses or amounts.\n reason: 'sensitive',\n replacedBy: 'operational',\n version: 'operational',\n }),\n});\n"]}
@@ -0,0 +1,8 @@
1
+ export interface BackoffOptions {
2
+ readonly baseDelayMs: number;
3
+ readonly maxDelayMs: number;
4
+ }
5
+ /** Full-jitter exponential backoff: uniform in [0, min(max, base · 2^attempt)). */
6
+ export declare function backoffDelay(attempt: number, options: BackoffOptions, random?: () => number): number;
7
+ /** Parses `Retry-After` (delta-seconds or HTTP-date) into milliseconds. */
8
+ export declare function parseRetryAfter(value: string | null | undefined, now: number): number | undefined;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.backoffDelay = backoffDelay;
4
+ exports.parseRetryAfter = parseRetryAfter;
5
+ /** Full-jitter exponential backoff: uniform in [0, min(max, base · 2^attempt)). */
6
+ function backoffDelay(attempt, options, random = Math.random) {
7
+ const clamped = Math.min(attempt, 30);
8
+ const cap = Math.min(options.maxDelayMs, options.baseDelayMs * 2 ** clamped);
9
+ return Math.floor(random() * cap);
10
+ }
11
+ /** Parses `Retry-After` (delta-seconds or HTTP-date) into milliseconds. */
12
+ function parseRetryAfter(value, now) {
13
+ if (!value)
14
+ return undefined;
15
+ // Delta-seconds: 1-10 digits only
16
+ if (/^\d{1,10}$/.test(value))
17
+ return Number(value) * 1_000;
18
+ // IMF-fixdate (RFC 7231): e.g. "Wed, 21 Oct 2015 07:28:00 GMT"
19
+ if (/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), \d{2} (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \d{4} \d{2}:\d{2}:\d{2} GMT$/.test(value)) {
20
+ const at = Date.parse(value);
21
+ if (Number.isNaN(at))
22
+ return undefined;
23
+ return Math.max(0, at - now);
24
+ }
25
+ return undefined;
26
+ }
27
+ //# sourceMappingURL=backoff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backoff.js","sourceRoot":"","sources":["../../../src/core/transport/backoff.ts"],"names":[],"mappings":";;AAMA,oCAQC;AAGD,0CAkBC;AA9BD,mFAAmF;AACnF,SAAgB,YAAY,CAC1B,OAAe,EACf,OAAuB,EACvB,SAAuB,IAAI,CAAC,MAAM;IAElC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,WAAW,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC;IAC7E,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC;AACpC,CAAC;AAED,2EAA2E;AAC3E,SAAgB,eAAe,CAC7B,KAAgC,EAChC,GAAW;IAEX,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,kCAAkC;IAClC,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;IAC3D,+DAA+D;IAC/D,IACE,sHAAsH,CAAC,IAAI,CACzH,KAAK,CACN,EACD,CAAC;QACD,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAAE,OAAO,SAAS,CAAC;QACvC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC","sourcesContent":["export interface BackoffOptions {\n readonly baseDelayMs: number;\n readonly maxDelayMs: number;\n}\n\n/** Full-jitter exponential backoff: uniform in [0, min(max, base · 2^attempt)). */\nexport function backoffDelay(\n attempt: number,\n options: BackoffOptions,\n random: () => number = Math.random,\n): number {\n const clamped = Math.min(attempt, 30);\n const cap = Math.min(options.maxDelayMs, options.baseDelayMs * 2 ** clamped);\n return Math.floor(random() * cap);\n}\n\n/** Parses `Retry-After` (delta-seconds or HTTP-date) into milliseconds. */\nexport function parseRetryAfter(\n value: string | null | undefined,\n now: number,\n): number | undefined {\n if (!value) return undefined;\n // Delta-seconds: 1-10 digits only\n if (/^\\d{1,10}$/.test(value)) return Number(value) * 1_000;\n // IMF-fixdate (RFC 7231): e.g. \"Wed, 21 Oct 2015 07:28:00 GMT\"\n if (\n /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), \\d{2} (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \\d{4} \\d{2}:\\d{2}:\\d{2} GMT$/.test(\n value,\n )\n ) {\n const at = Date.parse(value);\n if (Number.isNaN(at)) return undefined;\n return Math.max(0, at - now);\n }\n return undefined;\n}\n"]}
@@ -0,0 +1,25 @@
1
+ import type { Clock } from '../util/clock';
2
+ export type CircuitState = 'closed' | 'open' | 'half-open';
3
+ export interface CircuitOptions {
4
+ readonly failureThreshold: number;
5
+ readonly openMs: number;
6
+ }
7
+ export declare class CircuitBreaker {
8
+ #private;
9
+ private readonly options;
10
+ private readonly clock;
11
+ constructor(options: CircuitOptions, clock: Clock);
12
+ get state(): CircuitState;
13
+ canRequest(): boolean;
14
+ /** Returns true when this call actually took the half-open probe slot, so the caller
15
+ * can track ownership of it (e.g. to decide whether it may later abandon it). A slot
16
+ * another attempt already holds is not taken again — false. Known gap: the slot is
17
+ * claimed here, as the request is sent, not when the endpoint is picked, so a second
18
+ * request picked while the slot was free still goes out; claiming it earlier would
19
+ * change how proof reads try a recovering endpoint. */
20
+ onAttempt(): boolean;
21
+ /** Clears a half-open probe slot without changing state (e.g. the probe was abandoned). */
22
+ onAbandon(): void;
23
+ onSuccess(): void;
24
+ onFailure(): void;
25
+ }
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CircuitBreaker = void 0;
4
+ class CircuitBreaker {
5
+ options;
6
+ clock;
7
+ #failures = 0;
8
+ #openedAt;
9
+ #probing = false;
10
+ constructor(options, clock) {
11
+ this.options = options;
12
+ this.clock = clock;
13
+ }
14
+ get state() {
15
+ if (this.#openedAt === undefined)
16
+ return 'closed';
17
+ return this.clock.now() - this.#openedAt >= this.options.openMs
18
+ ? 'half-open'
19
+ : 'open';
20
+ }
21
+ canRequest() {
22
+ const state = this.state;
23
+ if (state === 'closed')
24
+ return true;
25
+ return state === 'half-open' && !this.#probing;
26
+ }
27
+ /** Returns true when this call actually took the half-open probe slot, so the caller
28
+ * can track ownership of it (e.g. to decide whether it may later abandon it). A slot
29
+ * another attempt already holds is not taken again — false. Known gap: the slot is
30
+ * claimed here, as the request is sent, not when the endpoint is picked, so a second
31
+ * request picked while the slot was free still goes out; claiming it earlier would
32
+ * change how proof reads try a recovering endpoint. */
33
+ onAttempt() {
34
+ if (this.state !== 'half-open' || this.#probing)
35
+ return false;
36
+ this.#probing = true;
37
+ return true;
38
+ }
39
+ /** Clears a half-open probe slot without changing state (e.g. the probe was abandoned). */
40
+ onAbandon() {
41
+ this.#probing = false;
42
+ }
43
+ onSuccess() {
44
+ this.#failures = 0;
45
+ this.#openedAt = undefined;
46
+ this.#probing = false;
47
+ }
48
+ onFailure() {
49
+ this.#probing = false;
50
+ if (this.state === 'half-open') {
51
+ this.#openedAt = this.clock.now();
52
+ return;
53
+ }
54
+ this.#failures += 1;
55
+ if (this.#failures >= this.options.failureThreshold) {
56
+ this.#openedAt = this.clock.now();
57
+ }
58
+ }
59
+ }
60
+ exports.CircuitBreaker = CircuitBreaker;
61
+ //# sourceMappingURL=circuit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circuit.js","sourceRoot":"","sources":["../../../src/core/transport/circuit.ts"],"names":[],"mappings":";;;AASA,MAAa,cAAc;IAMN;IACA;IANnB,SAAS,GAAG,CAAC,CAAC;IACd,SAAS,CAAqB;IAC9B,QAAQ,GAAG,KAAK,CAAC;IAEjB,YACmB,OAAuB,EACvB,KAAY;QADZ,YAAO,GAAP,OAAO,CAAgB;QACvB,UAAK,GAAL,KAAK,CAAO;IAC5B,CAAC;IAEJ,IAAI,KAAK;QACP,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;YAAE,OAAO,QAAQ,CAAC;QAClD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM;YAC7D,CAAC,CAAC,WAAW;YACb,CAAC,CAAC,MAAM,CAAC;IACb,CAAC;IAED,UAAU;QACR,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,KAAK,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACpC,OAAO,KAAK,KAAK,WAAW,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;IACjD,CAAC;IAED;;;;;2DAKuD;IACvD,SAAS;QACP,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC9D,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,2FAA2F;IAC3F,SAAS;QACP,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;IACxB,CAAC;IAED,SAAS;QACP,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;IACxB,CAAC;IAED,SAAS;QACP,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YAC/B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;YAClC,OAAO;QACT,CAAC;QACD,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC;QACpB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;YACpD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACpC,CAAC;IACH,CAAC;CACF;AAzDD,wCAyDC","sourcesContent":["import type { Clock } from '../util/clock';\n\nexport type CircuitState = 'closed' | 'open' | 'half-open';\n\nexport interface CircuitOptions {\n readonly failureThreshold: number;\n readonly openMs: number;\n}\n\nexport class CircuitBreaker {\n #failures = 0;\n #openedAt: number | undefined;\n #probing = false;\n\n constructor(\n private readonly options: CircuitOptions,\n private readonly clock: Clock,\n ) {}\n\n get state(): CircuitState {\n if (this.#openedAt === undefined) return 'closed';\n return this.clock.now() - this.#openedAt >= this.options.openMs\n ? 'half-open'\n : 'open';\n }\n\n canRequest(): boolean {\n const state = this.state;\n if (state === 'closed') return true;\n return state === 'half-open' && !this.#probing;\n }\n\n /** Returns true when this call actually took the half-open probe slot, so the caller\n * can track ownership of it (e.g. to decide whether it may later abandon it). A slot\n * another attempt already holds is not taken again — false. Known gap: the slot is\n * claimed here, as the request is sent, not when the endpoint is picked, so a second\n * request picked while the slot was free still goes out; claiming it earlier would\n * change how proof reads try a recovering endpoint. */\n onAttempt(): boolean {\n if (this.state !== 'half-open' || this.#probing) return false;\n this.#probing = true;\n return true;\n }\n\n /** Clears a half-open probe slot without changing state (e.g. the probe was abandoned). */\n onAbandon(): void {\n this.#probing = false;\n }\n\n onSuccess(): void {\n this.#failures = 0;\n this.#openedAt = undefined;\n this.#probing = false;\n }\n\n onFailure(): void {\n this.#probing = false;\n if (this.state === 'half-open') {\n this.#openedAt = this.clock.now();\n return;\n }\n this.#failures += 1;\n if (this.#failures >= this.options.failureThreshold) {\n this.#openedAt = this.clock.now();\n }\n }\n}\n"]}
@@ -0,0 +1,30 @@
1
+ import type { EventBus } from '../events/bus';
2
+ import type { Logger } from '../events/logger';
3
+ import type { Clock } from '../util/clock';
4
+ import { type CallOptions, type EndpointConfig, type EndpointStatus, type HealthProbes, type HttpRequest, type Transport, type TransportOptions } from './types';
5
+ export interface HttpTransportDeps {
6
+ readonly clock: Clock;
7
+ readonly events: EventBus;
8
+ readonly log: Logger;
9
+ readonly options?: TransportOptions;
10
+ readonly id?: string;
11
+ readonly random?: () => number;
12
+ }
13
+ export declare class HttpTransport implements Transport {
14
+ #private;
15
+ readonly id: string;
16
+ constructor(endpoints: readonly EndpointConfig[], deps: HttpTransportDeps);
17
+ rpc<T = unknown>(method: string, params?: unknown, options?: CallOptions): Promise<T>;
18
+ rpcRaw(payload: unknown, options?: CallOptions): Promise<unknown>;
19
+ http<T = unknown>(request: HttpRequest, options?: CallOptions): Promise<T>;
20
+ createFetch(classify?: (url: URL, init: RequestInit | undefined) => CallOptions): typeof fetch;
21
+ /** Least-invasive detector for "no health probe was ever configured" — mirrors the same
22
+ * condition `ensureFreshHealth` already uses to skip probing entirely. */
23
+ hasProbes(): boolean;
24
+ setProbes(probes: HealthProbes): void;
25
+ ensureFreshHealth(signal?: AbortSignal): Promise<void>;
26
+ refreshHealth(signal?: AbortSignal): Promise<void>;
27
+ status(): EndpointStatus[];
28
+ highestHeight(): bigint | undefined;
29
+ get maxLagBlocks(): number;
30
+ }