crypto-aio 0.0.2 → 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 (672) 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/lib-types.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/adapters/ton/types.js +3 -0
  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/core/model/transaction.js +3 -0
  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 -44
  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 -2
  638. package/dist/libs/eth/contract.js +0 -7
  639. package/dist/libs/eth/contract.js.map +0 -1
  640. package/dist/libs/eth/index.d.ts +0 -20
  641. package/dist/libs/eth/index.js +0 -62
  642. package/dist/libs/eth/index.js.map +0 -1
  643. package/dist/libs/eth/transact.d.ts +0 -2
  644. package/dist/libs/eth/transact.js +0 -7
  645. package/dist/libs/eth/transact.js.map +0 -1
  646. package/dist/libs/index.d.ts +0 -1
  647. package/dist/libs/index.js +0 -18
  648. package/dist/libs/index.js.map +0 -1
  649. package/dist/tool/common.d.ts +0 -28
  650. package/dist/tool/common.js +0 -33
  651. package/dist/tool/common.js.map +0 -1
  652. package/dist/tool/eth-tools.d.ts +0 -3
  653. package/dist/tool/eth-tools.js +0 -33
  654. package/dist/tool/eth-tools.js.map +0 -1
  655. package/dist/tool/index.d.ts +0 -4
  656. package/dist/tool/index.js +0 -21
  657. package/dist/tool/index.js.map +0 -1
  658. package/dist/tool/logging.d.ts +0 -3
  659. package/dist/tool/logging.js +0 -11
  660. package/dist/tool/logging.js.map +0 -1
  661. package/dist/tool/options.d.ts +0 -4
  662. package/dist/tool/options.js +0 -28
  663. package/dist/tool/options.js.map +0 -1
  664. package/dist/type/account.d.ts +0 -9
  665. package/dist/type/account.js.map +0 -1
  666. package/dist/type/common.d.ts +0 -18
  667. package/dist/type/common.js.map +0 -1
  668. package/dist/type/index.d.ts +0 -3
  669. package/dist/type/index.js +0 -20
  670. package/dist/type/index.js.map +0 -1
  671. package/dist/type/lib-types.d.ts +0 -7
  672. package/dist/type/lib-types.js.map +0 -1
@@ -0,0 +1,54 @@
1
+ import type { AssetService } from '../assets/service';
2
+ import type { EffectiveOptions, ScopeOptions } from '../config/types';
3
+ import { StateError } from '../errors/error';
4
+ import type { EventBus } from '../events/bus';
5
+ import type { Logger } from '../events/logger';
6
+ import type { OperationEngine } from '../lifecycle/engine';
7
+ import type { Monitor } from '../lifecycle/monitor';
8
+ import type { Catalogs } from '../registry/plugin';
9
+ import type { SignerDeadline } from '../signing/guard';
10
+ import type { Stores } from '../store/types';
11
+ import type { TransportOptions } from '../transport/types';
12
+ import type { Clock } from '../util/clock';
13
+ import type { DriverPool } from './pool';
14
+ /** State shared by a root container and all of its scopes. */
15
+ export interface RootRuntime {
16
+ readonly namespace: string;
17
+ catalogs: Catalogs;
18
+ envLayer: ScopeOptions;
19
+ readonly env: Readonly<Record<string, string | undefined>>;
20
+ readonly profile?: string;
21
+ readonly clock: Clock;
22
+ readonly log: Logger;
23
+ readonly events: EventBus;
24
+ readonly stores: Stores;
25
+ readonly pool: DriverPool;
26
+ readonly assets: AssetService;
27
+ readonly transport: TransportOptions;
28
+ /** Owner id used for leases and claims taken by this process. */
29
+ readonly owner: string;
30
+ /**
31
+ * Set by the root's `close()`; a closed container refuses handle and `native()` work.
32
+ */
33
+ closed: boolean;
34
+ /** Aborted by the root's `close()`, which stops every worker loop and recovery. */
35
+ readonly closing: AbortController;
36
+ /** The `close` of every native SDK client handed out, run by the root's `close()`. */
37
+ readonly natives: Set<() => void | Promise<void>>;
38
+ }
39
+ /** What a closed container's handles and `native()` fail with. */
40
+ export declare function closedError(): StateError;
41
+ export interface ContainerInternals {
42
+ readonly runtime: RootRuntime;
43
+ readonly layers: readonly ScopeOptions[];
44
+ readonly isRoot: boolean;
45
+ effective(): EffectiveOptions;
46
+ /** Lazily created per container (scopes have their own hooks and lifecycle settings). */
47
+ engine(): OperationEngine;
48
+ /** Lazily created per container, on top of its engine. */
49
+ monitor(): Monitor;
50
+ /** The bound on a signer's public-key read (this container's `signTimeoutMs`). */
51
+ signerDeadline(): SignerDeadline;
52
+ }
53
+ export declare function bindContainer(container: object, internals: ContainerInternals): void;
54
+ export declare function containerOf(container: object): ContainerInternals;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.closedError = closedError;
4
+ exports.bindContainer = bindContainer;
5
+ exports.containerOf = containerOf;
6
+ const error_1 = require("../errors/error");
7
+ /** What a closed container's handles and `native()` fail with. */
8
+ function closedError() {
9
+ return new error_1.StateError('INVALID_TRANSITION', 'this crypto-aio container is closed');
10
+ }
11
+ const registry = new WeakMap();
12
+ function bindContainer(container, internals) {
13
+ registry.set(container, internals);
14
+ }
15
+ function containerOf(container) {
16
+ const internals = registry.get(container);
17
+ if (!internals)
18
+ throw new error_1.ConfigError('CONFIG_INVALID', 'not a CryptoAio container');
19
+ return internals;
20
+ }
21
+ //# sourceMappingURL=internals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internals.js","sourceRoot":"","sources":["../../../src/core/container/internals.ts"],"names":[],"mappings":";;AAyCA,kCAEC;AAiBD,sCAEC;AAED,kCAIC;AAlED,2CAA0D;AAsC1D,kEAAkE;AAClE,SAAgB,WAAW;IACzB,OAAO,IAAI,kBAAU,CAAC,oBAAoB,EAAE,qCAAqC,CAAC,CAAC;AACrF,CAAC;AAeD,MAAM,QAAQ,GAAG,IAAI,OAAO,EAA8B,CAAC;AAE3D,SAAgB,aAAa,CAAC,SAAiB,EAAE,SAA6B;IAC5E,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AACrC,CAAC;AAED,SAAgB,WAAW,CAAC,SAAiB;IAC3C,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,CAAC,SAAS;QAAE,MAAM,IAAI,mBAAW,CAAC,gBAAgB,EAAE,2BAA2B,CAAC,CAAC;IACrF,OAAO,SAAS,CAAC;AACnB,CAAC","sourcesContent":["import type { AssetService } from '../assets/service';\nimport type { EffectiveOptions, ScopeOptions } from '../config/types';\nimport { ConfigError, StateError } from '../errors/error';\nimport type { EventBus } from '../events/bus';\nimport type { Logger } from '../events/logger';\nimport type { OperationEngine } from '../lifecycle/engine';\nimport type { Monitor } from '../lifecycle/monitor';\nimport type { Catalogs } from '../registry/plugin';\nimport type { SignerDeadline } from '../signing/guard';\nimport type { Stores } from '../store/types';\nimport type { TransportOptions } from '../transport/types';\nimport type { Clock } from '../util/clock';\nimport type { DriverPool } from './pool';\n\n/** State shared by a root container and all of its scopes. */\nexport interface RootRuntime {\n readonly namespace: string;\n catalogs: Catalogs;\n envLayer: ScopeOptions;\n readonly env: Readonly<Record<string, string | undefined>>;\n readonly profile?: string;\n readonly clock: Clock;\n readonly log: Logger;\n readonly events: EventBus;\n readonly stores: Stores;\n readonly pool: DriverPool;\n readonly assets: AssetService;\n readonly transport: TransportOptions;\n /** Owner id used for leases and claims taken by this process. */\n readonly owner: string;\n /**\n * Set by the root's `close()`; a closed container refuses handle and `native()` work.\n */\n closed: boolean;\n /** Aborted by the root's `close()`, which stops every worker loop and recovery. */\n readonly closing: AbortController;\n /** The `close` of every native SDK client handed out, run by the root's `close()`. */\n readonly natives: Set<() => void | Promise<void>>;\n}\n\n/** What a closed container's handles and `native()` fail with. */\nexport function closedError(): StateError {\n return new StateError('INVALID_TRANSITION', 'this crypto-aio container is closed');\n}\n\nexport interface ContainerInternals {\n readonly runtime: RootRuntime;\n readonly layers: readonly ScopeOptions[];\n readonly isRoot: boolean;\n effective(): EffectiveOptions;\n /** Lazily created per container (scopes have their own hooks and lifecycle settings). */\n engine(): OperationEngine;\n /** Lazily created per container, on top of its engine. */\n monitor(): Monitor;\n /** The bound on a signer's public-key read (this container's `signTimeoutMs`). */\n signerDeadline(): SignerDeadline;\n}\n\nconst registry = new WeakMap<object, ContainerInternals>();\n\nexport function bindContainer(container: object, internals: ContainerInternals): void {\n registry.set(container, internals);\n}\n\nexport function containerOf(container: object): ContainerInternals {\n const internals = registry.get(container);\n if (!internals) throw new ConfigError('CONFIG_INVALID', 'not a CryptoAio container');\n return internals;\n}\n"]}
@@ -0,0 +1,27 @@
1
+ import type { ResolvedSelection } from '../config/types';
2
+ import type { ChainDriver } from '../driver/types';
3
+ import type { EventBus } from '../events/bus';
4
+ import type { Logger } from '../events/logger';
5
+ import type { Catalogs } from '../registry/plugin';
6
+ import type { Transport, TransportOptions } from '../transport/types';
7
+ import type { Clock } from '../util/clock';
8
+ export interface PooledDriver {
9
+ readonly driver: ChainDriver;
10
+ readonly transport: Transport;
11
+ readonly indexer?: Transport;
12
+ }
13
+ export interface DriverPoolDeps {
14
+ readonly catalogs: () => Catalogs;
15
+ readonly clock: Clock;
16
+ readonly events: EventBus;
17
+ readonly log: Logger;
18
+ readonly transport: () => TransportOptions;
19
+ }
20
+ /** Shares one driver + transport per (chain, network, library, provider credentials, options). */
21
+ export declare class DriverPool {
22
+ #private;
23
+ private readonly deps;
24
+ constructor(deps: DriverPoolDeps);
25
+ get(selection: ResolvedSelection): Promise<PooledDriver>;
26
+ close(): Promise<void>;
27
+ }
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DriverPool = void 0;
4
+ const error_1 = require("../errors/error");
5
+ const http_transport_1 = require("../transport/http-transport");
6
+ const bytes_1 = require("../util/bytes");
7
+ /** Shares one driver + transport per (chain, network, library, provider credentials, options). */
8
+ class DriverPool {
9
+ deps;
10
+ #entries = new Map();
11
+ #closed = false;
12
+ constructor(deps) {
13
+ this.deps = deps;
14
+ }
15
+ get(selection) {
16
+ if (this.#closed) {
17
+ return Promise.reject(new error_1.StateError('INVALID_TRANSITION', 'driver pool is closed'));
18
+ }
19
+ let entry = this.#entries.get(selection.poolKey);
20
+ if (!entry) {
21
+ entry = this.#create(selection);
22
+ this.#entries.set(selection.poolKey, entry);
23
+ entry.catch(() => {
24
+ // Only evict THIS entry: a concurrent get() may already have replaced it (e.g. a
25
+ // retry after this one failed), and that newer entry must survive.
26
+ if (this.#entries.get(selection.poolKey) === entry) {
27
+ this.#entries.delete(selection.poolKey);
28
+ }
29
+ });
30
+ }
31
+ return entry;
32
+ }
33
+ async close() {
34
+ this.#closed = true;
35
+ const entries = [...this.#entries.values()];
36
+ this.#entries.clear();
37
+ await Promise.allSettled(entries.map(async (entry) => (await entry).driver.close?.()));
38
+ }
39
+ async #create(selection) {
40
+ const factory = await this.deps.catalogs().adapters.load(selection.manifest);
41
+ const root = this.deps.transport();
42
+ // First match wins: the user's per-chain config, the user's root transport option,
43
+ // the plugin network's own, then (left unset) the transport's built-in default.
44
+ const maxLagBlocks = selection.maxLagBlocks ?? root.maxLagBlocks ?? selection.network.maxLagBlocks;
45
+ const options = {
46
+ ...root,
47
+ ...(maxLagBlocks !== undefined ? { maxLagBlocks } : {}),
48
+ };
49
+ // `poolKey` fingerprints revealed provider URLs and must stay an in-memory map key
50
+ // only (never persisted, emitted or logged); the transport's public id — which flows
51
+ // into every rpc.*/provider.* event — is generated independently of it.
52
+ const id = (0, bytes_1.randomId)('tr');
53
+ const shared = {
54
+ clock: this.deps.clock,
55
+ events: this.deps.events,
56
+ log: this.deps.log.child('transport'),
57
+ options,
58
+ };
59
+ const transport = new http_transport_1.HttpTransport(selection.providers.flatMap((p) => p.endpoints), { ...shared, id });
60
+ const indexer = selection.indexers.length > 0
61
+ ? new http_transport_1.HttpTransport(selection.indexers.flatMap((p) => p.endpoints), { ...shared, id: `${id}_idx` })
62
+ : undefined;
63
+ const driver = await factory.create({
64
+ chain: selection.chain,
65
+ network: selection.network,
66
+ library: selection.library,
67
+ transport,
68
+ ...(indexer ? { indexer } : {}),
69
+ clock: this.deps.clock,
70
+ log: this.deps.log.child(selection.chain.id),
71
+ options: selection.options,
72
+ });
73
+ return { driver, transport, ...(indexer ? { indexer } : {}) };
74
+ }
75
+ }
76
+ exports.DriverPool = DriverPool;
77
+ //# sourceMappingURL=pool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pool.js","sourceRoot":"","sources":["../../../src/core/container/pool.ts"],"names":[],"mappings":";;;AAEA,2CAA6C;AAI7C,gEAA4D;AAE5D,yCAAyC;AAiBzC,kGAAkG;AAClG,MAAa,UAAU;IAIQ;IAHpB,QAAQ,GAAG,IAAI,GAAG,EAAiC,CAAC;IAC7D,OAAO,GAAG,KAAK,CAAC;IAEhB,YAA6B,IAAoB;QAApB,SAAI,GAAJ,IAAI,CAAgB;IAAG,CAAC;IAErD,GAAG,CAAC,SAA4B;QAC9B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,kBAAU,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,CAC9D,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAChC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC5C,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE;gBACf,iFAAiF;gBACjF,mEAAmE;gBACnE,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,KAAK,EAAE,CAAC;oBACnD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBAC1C,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,MAAM,OAAO,CAAC,UAAU,CACtB,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,CAC7D,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,SAA4B;QACxC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC7E,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACnC,mFAAmF;QACnF,gFAAgF;QAChF,MAAM,YAAY,GAChB,SAAS,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,IAAI,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC;QAChF,MAAM,OAAO,GAAqB;YAChC,GAAG,IAAI;YACP,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxD,CAAC;QACF,mFAAmF;QACnF,qFAAqF;QACrF,wEAAwE;QACxE,MAAM,EAAE,GAAG,IAAA,gBAAQ,EAAC,IAAI,CAAC,CAAC;QAC1B,MAAM,MAAM,GAAG;YACb,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK;YACtB,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM;YACxB,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC;YACrC,OAAO;SACR,CAAC;QACF,MAAM,SAAS,GAAG,IAAI,8BAAa,CACjC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,EAC/C,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,CAClB,CAAC;QACF,MAAM,OAAO,GACX,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;YAC3B,CAAC,CAAC,IAAI,8BAAa,CACf,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,EAC9C,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAC/B;YACH,CAAC,CAAC,SAAS,CAAC;QAChB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC;YAClC,KAAK,EAAE,SAAS,CAAC,KAAK;YACtB,OAAO,EAAE,SAAS,CAAC,OAAO;YAC1B,OAAO,EAAE,SAAS,CAAC,OAAO;YAC1B,SAAS;YACT,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/B,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK;YACtB,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5C,OAAO,EAAE,SAAS,CAAC,OAAO;SAC3B,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAChE,CAAC;CACF;AAhFD,gCAgFC","sourcesContent":["import type { ResolvedSelection } from '../config/types';\nimport type { ChainDriver } from '../driver/types';\nimport { StateError } from '../errors/error';\nimport type { EventBus } from '../events/bus';\nimport type { Logger } from '../events/logger';\nimport type { Catalogs } from '../registry/plugin';\nimport { HttpTransport } from '../transport/http-transport';\nimport type { Transport, TransportOptions } from '../transport/types';\nimport { randomId } from '../util/bytes';\nimport type { Clock } from '../util/clock';\n\nexport interface PooledDriver {\n readonly driver: ChainDriver;\n readonly transport: Transport;\n readonly indexer?: Transport;\n}\n\nexport interface DriverPoolDeps {\n readonly catalogs: () => Catalogs;\n readonly clock: Clock;\n readonly events: EventBus;\n readonly log: Logger;\n readonly transport: () => TransportOptions;\n}\n\n/** Shares one driver + transport per (chain, network, library, provider credentials, options). */\nexport class DriverPool {\n readonly #entries = new Map<string, Promise<PooledDriver>>();\n #closed = false;\n\n constructor(private readonly deps: DriverPoolDeps) {}\n\n get(selection: ResolvedSelection): Promise<PooledDriver> {\n if (this.#closed) {\n return Promise.reject(\n new StateError('INVALID_TRANSITION', 'driver pool is closed'),\n );\n }\n let entry = this.#entries.get(selection.poolKey);\n if (!entry) {\n entry = this.#create(selection);\n this.#entries.set(selection.poolKey, entry);\n entry.catch(() => {\n // Only evict THIS entry: a concurrent get() may already have replaced it (e.g. a\n // retry after this one failed), and that newer entry must survive.\n if (this.#entries.get(selection.poolKey) === entry) {\n this.#entries.delete(selection.poolKey);\n }\n });\n }\n return entry;\n }\n\n async close(): Promise<void> {\n this.#closed = true;\n const entries = [...this.#entries.values()];\n this.#entries.clear();\n await Promise.allSettled(\n entries.map(async (entry) => (await entry).driver.close?.()),\n );\n }\n\n async #create(selection: ResolvedSelection): Promise<PooledDriver> {\n const factory = await this.deps.catalogs().adapters.load(selection.manifest);\n const root = this.deps.transport();\n // First match wins: the user's per-chain config, the user's root transport option,\n // the plugin network's own, then (left unset) the transport's built-in default.\n const maxLagBlocks =\n selection.maxLagBlocks ?? root.maxLagBlocks ?? selection.network.maxLagBlocks;\n const options: TransportOptions = {\n ...root,\n ...(maxLagBlocks !== undefined ? { maxLagBlocks } : {}),\n };\n // `poolKey` fingerprints revealed provider URLs and must stay an in-memory map key\n // only (never persisted, emitted or logged); the transport's public id — which flows\n // into every rpc.*/provider.* event — is generated independently of it.\n const id = randomId('tr');\n const shared = {\n clock: this.deps.clock,\n events: this.deps.events,\n log: this.deps.log.child('transport'),\n options,\n };\n const transport = new HttpTransport(\n selection.providers.flatMap((p) => p.endpoints),\n { ...shared, id },\n );\n const indexer =\n selection.indexers.length > 0\n ? new HttpTransport(\n selection.indexers.flatMap((p) => p.endpoints),\n { ...shared, id: `${id}_idx` },\n )\n : undefined;\n const driver = await factory.create({\n chain: selection.chain,\n network: selection.network,\n library: selection.library,\n transport,\n ...(indexer ? { indexer } : {}),\n clock: this.deps.clock,\n log: this.deps.log.child(selection.chain.id),\n options: selection.options,\n });\n return { driver, transport, ...(indexer ? { indexer } : {}) };\n }\n}\n"]}
@@ -0,0 +1,346 @@
1
+ import type { CodesOf } from '../errors/codes';
2
+ import type { Logger } from '../events/logger';
3
+ import type { AddressFormatter, NormalizedAddress } from '../model/address';
4
+ import type { AssetMetadata, AssetRef, TokenRef } from '../model/asset';
5
+ import type { Capability } from '../model/capability';
6
+ import type { ChainInfo, NetworkInfo } from '../model/chain';
7
+ import type { FeeEstimateDraft, FeeOverride, FeeSpeed } from '../model/fee';
8
+ import type { DriverIntent } from '../model/intent';
9
+ import type { OrderingData, OrderingKind } from '../model/ordering';
10
+ import type { AttemptRef, Decoding, RawTx, SignedTx, TransferSource, UnsignedTx } from '../model/transaction';
11
+ import type { KeyRef, SignatureBundle } from '../signing/types';
12
+ import type { Transport } from '../transport/types';
13
+ import type { Clock } from '../util/clock';
14
+ /**
15
+ * Family-specific wallet settings (e.g. `utxo.addressType`, TON wallet identity). The `hd`
16
+ * key is reserved and core-built: the core sets it to the wallet's `WalletHdOptions` when
17
+ * the wallet has an `xpub`, and a user's or caller's `hd` never reaches a driver, since a
18
+ * driver trusts `hd` to validate change addresses.
19
+ */
20
+ export type WalletOptions = Readonly<Record<string, unknown>>;
21
+ export interface WalletKey {
22
+ readonly scheme: string;
23
+ readonly publicKey: Uint8Array;
24
+ readonly keyRef?: KeyRef;
25
+ }
26
+ export interface BuildContext {
27
+ readonly from: string;
28
+ readonly keys: readonly WalletKey[];
29
+ readonly wallet: WalletOptions;
30
+ /** Allocated by the core for `nonce` and `seqno` ordering. */
31
+ readonly ordering?: OrderingData;
32
+ /** Inputs held by other live Operations of this wallet (`inputs` ordering). */
33
+ readonly excludeInputs?: readonly string[];
34
+ readonly signal?: AbortSignal;
35
+ }
36
+ export type FundsCheck = {
37
+ readonly ok: true;
38
+ } | {
39
+ readonly ok: false;
40
+ readonly asset: AssetRef;
41
+ readonly required: bigint;
42
+ readonly available: bigint;
43
+ };
44
+ /**
45
+ * `refused`: state-dependent (may become valid, or may already be included) — observed only.
46
+ * `rejected`: permanently invalid by construction (malformed, bad signature, wrong chain).
47
+ */
48
+ export type BroadcastResult = {
49
+ readonly kind: 'accepted';
50
+ } | {
51
+ readonly kind: 'already-known';
52
+ } | {
53
+ readonly kind: 'refused';
54
+ readonly code: CodesOf<'chain'>;
55
+ readonly reason: string;
56
+ } | {
57
+ readonly kind: 'rejected';
58
+ readonly reason: string;
59
+ };
60
+ export interface DriverTxObservation {
61
+ readonly seen: 'none' | 'mempool' | 'block';
62
+ readonly txHash?: string;
63
+ readonly blockHeight?: bigint;
64
+ readonly blockHash?: string;
65
+ /** For included transactions: false when execution failed or reverted. */
66
+ readonly success?: boolean;
67
+ /**
68
+ * With `success: false`, why, as a short fixed text: no addresses, amounts or node
69
+ * text, which can carry either. The monitor records it on the observation
70
+ * (`TxStatus.reason`).
71
+ */
72
+ readonly reason?: string;
73
+ }
74
+ export interface DriverTransfer {
75
+ /** Deterministic within the transaction, e.g. `native`, `log:3`, `vout:1`, `ix:0.2`. */
76
+ readonly locator: string;
77
+ readonly from: readonly string[];
78
+ readonly to: string;
79
+ readonly asset: AssetRef;
80
+ readonly amount: bigint;
81
+ readonly source: TransferSource;
82
+ readonly memo?: string;
83
+ }
84
+ export interface DriverTransaction {
85
+ readonly id: string;
86
+ readonly observation: DriverTxObservation;
87
+ readonly fee?: readonly {
88
+ readonly asset: AssetRef;
89
+ readonly amount: bigint;
90
+ }[];
91
+ readonly transfers: readonly DriverTransfer[];
92
+ readonly decoding: Decoding;
93
+ readonly raw?: RawTx;
94
+ readonly timestamp?: number;
95
+ readonly details: Readonly<Record<string, unknown>>;
96
+ }
97
+ export interface DriverBlock {
98
+ readonly height: bigint;
99
+ readonly hash: string;
100
+ readonly parentHash: string;
101
+ readonly timestamp?: number;
102
+ readonly transactionIds?: readonly string[];
103
+ }
104
+ export interface AddressCodec {
105
+ validate(address: string): boolean;
106
+ /**
107
+ * Throws `ValidationError('INVALID_ADDRESS')`. The returned `variant` is part of the
108
+ * intent hash: it must hold only JSON scalars (strings, finite numbers, booleans, `null`)
109
+ * and should contain only semantic fields that change what the transfer does (for example
110
+ * TON's `bounceable`), never encoding-only choices, so two spellings of one recipient
111
+ * with the same meaning hash the same.
112
+ */
113
+ normalize(address: string): NormalizedAddress;
114
+ fromPublicKey(publicKey: Uint8Array, wallet?: WalletOptions): NormalizedAddress;
115
+ readonly format?: AddressFormatter;
116
+ }
117
+ export interface ChainReader {
118
+ getBalance(address: string, asset: AssetRef): Promise<bigint>;
119
+ getBlockHeight(): Promise<bigint>;
120
+ /** Highest block satisfying the network's finality policy. */
121
+ getFinalizedHeight(): Promise<bigint>;
122
+ getBlock(ref: bigint | string): Promise<DriverBlock | null>;
123
+ getTransaction(id: string): Promise<DriverTransaction | null>;
124
+ /**
125
+ * Current view of an Attempt (uses `purpose: 'monitor'` reads). `ordering` and `from` are
126
+ * `undefined` for a transaction the library does not manage (a status lookup by id).
127
+ */
128
+ observe(ref: AttemptRef, ordering: OrderingData | undefined, from: string | undefined): Promise<DriverTxObservation>;
129
+ getTokenMetadata?(ref: TokenRef): Promise<AssetMetadata>;
130
+ /** Canonicalizes a token contract (e.g. EIP-55); identity for asset ids. */
131
+ normalizeTokenRef?(ref: TokenRef): TokenRef;
132
+ }
133
+ export interface TxBuilder {
134
+ estimateFee(intent: DriverIntent, ctx: BuildContext): Promise<FeeEstimateDraft>;
135
+ checkFunds(intent: DriverIntent, fee: FeeEstimateDraft, ctx: BuildContext): Promise<FundsCheck>;
136
+ build(intent: DriverIntent, fee: FeeEstimateDraft, ctx: BuildContext): Promise<UnsignedTx>;
137
+ assemble(unsigned: UnsignedTx, signatures: readonly SignatureBundle[]): Promise<SignedTx>;
138
+ /**
139
+ * The signatures a payload signed elsewhere carries for `unsigned`'s requests,
140
+ * e.g. a PSBT a cold signer returned. No I/O. Throws `ValidationError('INVALID_INTENT')`
141
+ * when `signed` is not the prepared transaction; one it does not tell apart still fails
142
+ * the core's check with `SIGNATURE_MISMATCH`. Only signature bytes are taken from it: the
143
+ * core verifies each one against its stored request, as for any bundle. A request
144
+ * without a signature in `signed` is left out (a partial set).
145
+ */
146
+ signaturesFrom?(unsigned: UnsignedTx, signed: RawTx): readonly SignatureBundle[];
147
+ }
148
+ export interface Broadcaster {
149
+ /**
150
+ * Throws (ambiguous) on transport failure; returns a classified result otherwise.
151
+ * `signed.ref.id` is empty for bare broadcasts (`Blockchain.broadcast`); never rely on it.
152
+ */
153
+ broadcast(signed: SignedTx, options?: {
154
+ readonly fanout?: number;
155
+ readonly signal?: AbortSignal;
156
+ }): Promise<BroadcastResult>;
157
+ }
158
+ export type FinalityLevel = 'latest' | 'finalized';
159
+ /**
160
+ * Finalized-state checks behind `proven` verdicts; implementations use quorum reads.
161
+ * Only a definitive negative proof answers "no". Every other RPC error (state or
162
+ * history not available, pruned data, indexing in progress, a non-definitive error) throws
163
+ * a retryable `ProviderError('PROVIDER_UNAVAILABLE')`, which decides nothing.
164
+ */
165
+ export interface ProofSource {
166
+ finalizedHead(): Promise<{
167
+ readonly height: bigint;
168
+ readonly hash: string;
169
+ readonly timestamp?: number;
170
+ }>;
171
+ includedFinal(ref: AttemptRef, ordering: OrderingData, from: string): Promise<{
172
+ readonly included: false;
173
+ } | {
174
+ readonly included: true;
175
+ readonly success: boolean;
176
+ readonly blockHeight: bigint;
177
+ readonly blockHash: string;
178
+ readonly txHash: string;
179
+ /**
180
+ * With `success: false`, a short fixed text, never node text. It is recorded as
181
+ * proven.
182
+ */
183
+ readonly reason?: string;
184
+ }>;
185
+ /** Whether the ordering slot (nonce/seqno/an input) is consumed by ANY transaction at `level`. */
186
+ slotConsumed(ordering: OrderingData, from: string, level: FinalityLevel): Promise<boolean>;
187
+ /** Whether expiry has passed per finalized state (expiry/seqno models; false otherwise). */
188
+ expired(ordering: OrderingData): Promise<boolean>;
189
+ /**
190
+ * The hash of the block at `height` on the chain at `level`, or `null` when there is
191
+ * none yet (above the head, or above the finalized height for `'finalized'`). Confirms
192
+ * the monitor's orphan decisions and the scanner's rollback and TOO_DEEP verdicts.
193
+ */
194
+ blockHash(height: bigint, level: FinalityLevel): Promise<string | null>;
195
+ }
196
+ export interface SequenceSource {
197
+ /** Next nonce/seqno including pending transactions. */
198
+ pending(address: string): Promise<bigint>;
199
+ /** Next nonce/seqno per the latest block. */
200
+ latest(address: string): Promise<bigint>;
201
+ }
202
+ export interface ReplacementPolicy {
203
+ readonly replace: boolean;
204
+ readonly cancel: boolean;
205
+ buildReplacement?(previous: UnsignedTx, fee: FeeSpeed | FeeOverride, ctx: BuildContext): Promise<UnsignedTx>;
206
+ /**
207
+ * A transaction for `previous`'s slot that does not execute the transfer (e.g. a
208
+ * self-transfer). Without `fee` it pays the network's minimum bump over `previous`; with
209
+ * one, that fee, refused (FEE_TOO_LOW) below the bump. `previous` may itself be a cancel
210
+ * (a repeat cancel bumps a stuck one).
211
+ */
212
+ buildCancel?(previous: UnsignedTx, ctx: BuildContext, fee?: FeeSpeed | FeeOverride): Promise<UnsignedTx>;
213
+ }
214
+ export interface ScanFilter {
215
+ readonly addresses?: readonly string[];
216
+ readonly assets?: readonly AssetRef[];
217
+ }
218
+ export interface BlockSource {
219
+ header(height: bigint): Promise<DriverBlock | null>;
220
+ transactions(block: DriverBlock, filter?: ScanFilter): Promise<readonly DriverTransaction[]>;
221
+ }
222
+ export interface AddressHistorySource {
223
+ list(address: string, options: {
224
+ readonly cursor?: string;
225
+ readonly limit: number;
226
+ }): Promise<{
227
+ readonly items: readonly DriverTransaction[];
228
+ readonly next?: string;
229
+ }>;
230
+ }
231
+ export interface DriverLimits {
232
+ readonly maxOutputs: number;
233
+ }
234
+ /**
235
+ * A native SDK client for `crypto-aio/native` and how to release it. `close` frees
236
+ * what the client holds (sockets, timers, workers); the root container's `close()` runs it
237
+ * once, before closing its pooled drivers.
238
+ */
239
+ export interface DisposableNativeClient {
240
+ readonly client: unknown;
241
+ close?(): void | Promise<void>;
242
+ }
243
+ /**
244
+ * The driver port: every method's contract, as the core relies on it. Purpose, retry
245
+ * class and quorum are the `CallOptions` a driver passes to its `Transport` (defaults:
246
+ * purpose `read`, retry `safe`, no quorum). A `monitor` or `proof` read only goes to
247
+ * endpoints that are not lagging.
248
+ *
249
+ * | Method | Purpose | Retry | Quorum | Returns / throws |
250
+ * | --- | --- | --- | --- | --- |
251
+ * | `reader.getBalance`, `getBlock`, `getTransaction` | `read` | `safe` | none | `null` when not found; provider errors propagate |
252
+ * | `reader.getTokenMetadata` | `read` | `safe` | none (a driver may use a quorum) | A token's own unusable metadata (no contract, a reverting or malformed `decimals`/`symbol`) throws `ValidationError('ASSET_RESOLUTION')`, which the core caches per container (only a non-retryable `ASSET_RESOLUTION` is cached); every other failure, e.g. a transient provider failure (propagated retryable) or any other provider error, is not cached and the next lookup queries again. Stricter than this minimum, the EVM driver reads `decimals()` and `symbol()` under `quorum: 'proof'`: the metadata is cached for the container's life, and one endpoint's wrong `decimals` would mis-scale every amount; endpoints that disagree throw retryable `PROVIDER_INCONSISTENT`, which is not cached |
253
+ * | `reader.getBlockHeight`, `getFinalizedHeight` | `monitor` | `safe` | none | propagate; they feed the stale-view guards and confirmation depths |
254
+ * | `reader.observe(ref, ordering, from)` | `monitor` | `safe` | none | `{ seen: 'none' }` when not visible; `ordering` and `from` are `undefined` for a transaction the library does not manage |
255
+ * | `sequence.pending`, `sequence.latest` | `monitor` | `safe` | none | propagate |
256
+ * | `proofs.*` (`finalizedHead`, `includedFinal`, `slotConsumed`, `expired`, `blockHash`) | `proof` | `safe` | `'proof'` | endpoints that disagree throw retryable `PROVIDER_INCONSISTENT`, and the core then decides nothing. Only a definitive negative proof answers "no"; every other RPC error throws retryable `PROVIDER_UNAVAILABLE`, which decides nothing (see below). Only `slotConsumed(…, 'latest')` may be a single `monitor` read: the core records it as observed evidence |
257
+ * | `broadcaster.broadcast` | `broadcast` | `ambiguous-on-failure` | none (passes `fanout` and `signal` through) | classifies a definitive `RPC_ERROR` into a `BroadcastResult`; rethrows an ambiguous one (`error.ambiguous`) and every other failure unclassified |
258
+ * | `builder.estimateFee`, `checkFunds`, `build` | `read` | `safe` | none | `ValidationError` / `UnsupportedCapabilityError` for an intent it cannot build |
259
+ * | `builder.assemble` | no I/O | – | – | `SigningError('SIGNING_FAILED')` when a signature is missing |
260
+ * | `builder.signaturesFrom` (optional) | no I/O | – | – | `ValidationError('INVALID_INTENT')` when the signed payload is not the prepared transaction |
261
+ * | `replacement.buildReplacement`, `buildCancel` | `read` | `safe` | none | `ChainError('FEE_TOO_LOW')` below the network's bump; `buildCancel` honours a given `fee` and never substitutes its own |
262
+ * | `blocks.header` | `monitor` | `safe` | none | `null` while the height is not visible |
263
+ * | `blocks.transactions` | `monitor` | `safe` | none | retryable `PROVIDER_INCONSISTENT` when the block at `block.height` no longer has `block.hash` |
264
+ * | `history.list` | `read` (indexer transport when configured) | `safe` | none | propagate |
265
+ * | `createNativeClient` | no I/O | – | – | a fresh SDK instance on every call, never the pooled one |
266
+ *
267
+ * Further rules:
268
+ * - On a proof path (`proofs.*`), only a definitive negative proof may
269
+ * answer "no" (`included: false`, a slot not consumed, a `null` block hash). Every other
270
+ * RPC error, including state or history not available, pruned data, an index still being
271
+ * built ("transaction indexing is in progress"), or an endpoint's non-definitive error,
272
+ * must surface as a retryable `ProviderError('PROVIDER_UNAVAILABLE')`, which decides
273
+ * nothing: the core looks again later and never takes it for an answer.
274
+ * - `BlockSource` heights are dense: every height up to the head has one block, and
275
+ * `header(h)` is `null` only while `h` is not visible, never for a skipped slot.
276
+ * - A provider must serve headers at least about 2 × `reorgWindow` below the head. A new
277
+ * cursor loads `reorgWindow` blocks below its start, and a rollback refills its window
278
+ * below the common ancestor.
279
+ * - `ScanFilter.addresses`: when non-empty, return at least every transaction with a transfer
280
+ * from or to one of them; empty (`[]`) or absent means no filter. `ScanFilter.assets` is a
281
+ * hint only: a driver may narrow by it or ignore it, and the core does not filter again.
282
+ * - `fee.details.requestedFee` is reserved. On replacements the core records the requested
283
+ * fee spec there, so a driver never sets or reads it.
284
+ * - `DriverContext` has no asset resolver and `DriverIntent` carries no decimals. Amounts
285
+ * reach drivers in base units only; a driver that needs a token's decimals (Solana's
286
+ * `transferChecked`) reads them from the chain itself.
287
+ */
288
+ export interface ChainDriver {
289
+ readonly ordering: OrderingKind;
290
+ readonly capabilities: ReadonlySet<Capability>;
291
+ readonly address: AddressCodec;
292
+ readonly reader: ChainReader;
293
+ readonly builder: TxBuilder;
294
+ readonly broadcaster: Broadcaster;
295
+ readonly proofs: ProofSource;
296
+ readonly sequence?: SequenceSource;
297
+ readonly replacement?: ReplacementPolicy;
298
+ readonly blocks?: BlockSource;
299
+ readonly history?: AddressHistorySource;
300
+ /** Two-level, capability-gated family API: `ext.<family>.<method>(...) → Promise`. */
301
+ readonly ext?: Readonly<Record<string, Readonly<Record<string, (...args: never[]) => Promise<unknown>>>>>;
302
+ limits?(wallet: WalletOptions): DriverLimits;
303
+ /**
304
+ * A fresh, caller-owned SDK client for `crypto-aio/native`: a new SDK instance on every
305
+ * call, never the pooled one.
306
+ */
307
+ createNativeClient?(): DisposableNativeClient;
308
+ close?(): Promise<void>;
309
+ }
310
+ /**
311
+ * A factory's `create()` must call `transport.setProbes(...)` exactly once, before any
312
+ * other traffic, on every `Transport` it receives here — including `indexer`, when present.
313
+ * `setProbes` resets health/identity state, so calling it again later, or skipping it on one
314
+ * of the two transports, leaves that transport's health checks silently unconfigured.
315
+ *
316
+ * There is no asset resolver here, and `DriverIntent` carries no decimals: drivers work
317
+ * in base units only.
318
+ */
319
+ export interface DriverContext {
320
+ readonly chain: ChainInfo;
321
+ readonly network: NetworkInfo;
322
+ readonly library: string;
323
+ readonly transport: Transport;
324
+ readonly indexer?: Transport;
325
+ readonly clock: Clock;
326
+ readonly log: Logger;
327
+ readonly options: Readonly<Record<string, unknown>>;
328
+ }
329
+ export interface DriverFactory {
330
+ create(ctx: DriverContext): Promise<ChainDriver>;
331
+ }
332
+ export interface PeerDependency {
333
+ readonly name: string;
334
+ readonly range: string;
335
+ }
336
+ /** Static metadata (no SDK import) plus a lazy `load()` that `require()`s the driver module. */
337
+ export interface AdapterManifest {
338
+ readonly family: string;
339
+ readonly library: string;
340
+ readonly chains: readonly string[];
341
+ readonly capabilities: readonly Capability[];
342
+ readonly indexerCapabilities?: readonly Capability[];
343
+ readonly requiresIndexer?: boolean;
344
+ readonly peerDependencies: readonly PeerDependency[];
345
+ load(): Promise<DriverFactory>;
346
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/driver/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { CodesOf } from '../errors/codes';\nimport type { Logger } from '../events/logger';\nimport type { AddressFormatter, NormalizedAddress } from '../model/address';\nimport type { AssetMetadata, AssetRef, TokenRef } from '../model/asset';\nimport type { Capability } from '../model/capability';\nimport type { ChainInfo, NetworkInfo } from '../model/chain';\nimport type { FeeEstimateDraft, FeeOverride, FeeSpeed } from '../model/fee';\nimport type { DriverIntent } from '../model/intent';\nimport type { OrderingData, OrderingKind } from '../model/ordering';\nimport type {\n AttemptRef,\n Decoding,\n RawTx,\n SignedTx,\n TransferSource,\n UnsignedTx,\n} from '../model/transaction';\nimport type { KeyRef, SignatureBundle } from '../signing/types';\nimport type { Transport } from '../transport/types';\nimport type { Clock } from '../util/clock';\n\n/**\n * Family-specific wallet settings (e.g. `utxo.addressType`, TON wallet identity). The `hd`\n * key is reserved and core-built: the core sets it to the wallet's `WalletHdOptions` when\n * the wallet has an `xpub`, and a user's or caller's `hd` never reaches a driver, since a\n * driver trusts `hd` to validate change addresses.\n */\nexport type WalletOptions = Readonly<Record<string, unknown>>;\n\nexport interface WalletKey {\n readonly scheme: string;\n readonly publicKey: Uint8Array;\n readonly keyRef?: KeyRef;\n}\n\nexport interface BuildContext {\n readonly from: string;\n readonly keys: readonly WalletKey[];\n readonly wallet: WalletOptions;\n /** Allocated by the core for `nonce` and `seqno` ordering. */\n readonly ordering?: OrderingData;\n /** Inputs held by other live Operations of this wallet (`inputs` ordering). */\n readonly excludeInputs?: readonly string[];\n readonly signal?: AbortSignal;\n}\n\nexport type FundsCheck =\n | { readonly ok: true }\n | {\n readonly ok: false;\n readonly asset: AssetRef;\n readonly required: bigint;\n readonly available: bigint;\n };\n\n/**\n * `refused`: state-dependent (may become valid, or may already be included) — observed only.\n * `rejected`: permanently invalid by construction (malformed, bad signature, wrong chain).\n */\nexport type BroadcastResult =\n | { readonly kind: 'accepted' }\n | { readonly kind: 'already-known' }\n | { readonly kind: 'refused'; readonly code: CodesOf<'chain'>; readonly reason: string }\n | { readonly kind: 'rejected'; readonly reason: string };\n\nexport interface DriverTxObservation {\n readonly seen: 'none' | 'mempool' | 'block';\n readonly txHash?: string;\n readonly blockHeight?: bigint;\n readonly blockHash?: string;\n /** For included transactions: false when execution failed or reverted. */\n readonly success?: boolean;\n /**\n * With `success: false`, why, as a short fixed text: no addresses, amounts or node\n * text, which can carry either. The monitor records it on the observation\n * (`TxStatus.reason`).\n */\n readonly reason?: string;\n}\n\nexport interface DriverTransfer {\n /** Deterministic within the transaction, e.g. `native`, `log:3`, `vout:1`, `ix:0.2`. */\n readonly locator: string;\n readonly from: readonly string[];\n readonly to: string;\n readonly asset: AssetRef;\n readonly amount: bigint;\n readonly source: TransferSource;\n readonly memo?: string;\n}\n\nexport interface DriverTransaction {\n readonly id: string;\n readonly observation: DriverTxObservation;\n readonly fee?: readonly { readonly asset: AssetRef; readonly amount: bigint }[];\n readonly transfers: readonly DriverTransfer[];\n readonly decoding: Decoding;\n readonly raw?: RawTx;\n readonly timestamp?: number;\n readonly details: Readonly<Record<string, unknown>>;\n}\n\nexport interface DriverBlock {\n readonly height: bigint;\n readonly hash: string;\n readonly parentHash: string;\n readonly timestamp?: number;\n readonly transactionIds?: readonly string[];\n}\n\nexport interface AddressCodec {\n validate(address: string): boolean;\n /**\n * Throws `ValidationError('INVALID_ADDRESS')`. The returned `variant` is part of the\n * intent hash: it must hold only JSON scalars (strings, finite numbers, booleans, `null`)\n * and should contain only semantic fields that change what the transfer does (for example\n * TON's `bounceable`), never encoding-only choices, so two spellings of one recipient\n * with the same meaning hash the same.\n */\n normalize(address: string): NormalizedAddress;\n fromPublicKey(publicKey: Uint8Array, wallet?: WalletOptions): NormalizedAddress;\n readonly format?: AddressFormatter;\n}\n\nexport interface ChainReader {\n getBalance(address: string, asset: AssetRef): Promise<bigint>;\n getBlockHeight(): Promise<bigint>;\n /** Highest block satisfying the network's finality policy. */\n getFinalizedHeight(): Promise<bigint>;\n getBlock(ref: bigint | string): Promise<DriverBlock | null>;\n getTransaction(id: string): Promise<DriverTransaction | null>;\n /**\n * Current view of an Attempt (uses `purpose: 'monitor'` reads). `ordering` and `from` are\n * `undefined` for a transaction the library does not manage (a status lookup by id).\n */\n observe(\n ref: AttemptRef,\n ordering: OrderingData | undefined,\n from: string | undefined,\n ): Promise<DriverTxObservation>;\n getTokenMetadata?(ref: TokenRef): Promise<AssetMetadata>;\n /** Canonicalizes a token contract (e.g. EIP-55); identity for asset ids. */\n normalizeTokenRef?(ref: TokenRef): TokenRef;\n}\n\nexport interface TxBuilder {\n estimateFee(intent: DriverIntent, ctx: BuildContext): Promise<FeeEstimateDraft>;\n checkFunds(\n intent: DriverIntent,\n fee: FeeEstimateDraft,\n ctx: BuildContext,\n ): Promise<FundsCheck>;\n build(\n intent: DriverIntent,\n fee: FeeEstimateDraft,\n ctx: BuildContext,\n ): Promise<UnsignedTx>;\n assemble(\n unsigned: UnsignedTx,\n signatures: readonly SignatureBundle[],\n ): Promise<SignedTx>;\n /**\n * The signatures a payload signed elsewhere carries for `unsigned`'s requests,\n * e.g. a PSBT a cold signer returned. No I/O. Throws `ValidationError('INVALID_INTENT')`\n * when `signed` is not the prepared transaction; one it does not tell apart still fails\n * the core's check with `SIGNATURE_MISMATCH`. Only signature bytes are taken from it: the\n * core verifies each one against its stored request, as for any bundle. A request\n * without a signature in `signed` is left out (a partial set).\n */\n signaturesFrom?(unsigned: UnsignedTx, signed: RawTx): readonly SignatureBundle[];\n}\n\nexport interface Broadcaster {\n /**\n * Throws (ambiguous) on transport failure; returns a classified result otherwise.\n * `signed.ref.id` is empty for bare broadcasts (`Blockchain.broadcast`); never rely on it.\n */\n broadcast(\n signed: SignedTx,\n options?: { readonly fanout?: number; readonly signal?: AbortSignal },\n ): Promise<BroadcastResult>;\n}\n\nexport type FinalityLevel = 'latest' | 'finalized';\n\n/**\n * Finalized-state checks behind `proven` verdicts; implementations use quorum reads.\n * Only a definitive negative proof answers \"no\". Every other RPC error (state or\n * history not available, pruned data, indexing in progress, a non-definitive error) throws\n * a retryable `ProviderError('PROVIDER_UNAVAILABLE')`, which decides nothing.\n */\nexport interface ProofSource {\n finalizedHead(): Promise<{\n readonly height: bigint;\n readonly hash: string;\n readonly timestamp?: number;\n }>;\n includedFinal(\n ref: AttemptRef,\n ordering: OrderingData,\n from: string,\n ): Promise<\n | { readonly included: false }\n | {\n readonly included: true;\n readonly success: boolean;\n readonly blockHeight: bigint;\n readonly blockHash: string;\n readonly txHash: string;\n /**\n * With `success: false`, a short fixed text, never node text. It is recorded as\n * proven.\n */\n readonly reason?: string;\n }\n >;\n /** Whether the ordering slot (nonce/seqno/an input) is consumed by ANY transaction at `level`. */\n slotConsumed(\n ordering: OrderingData,\n from: string,\n level: FinalityLevel,\n ): Promise<boolean>;\n /** Whether expiry has passed per finalized state (expiry/seqno models; false otherwise). */\n expired(ordering: OrderingData): Promise<boolean>;\n /**\n * The hash of the block at `height` on the chain at `level`, or `null` when there is\n * none yet (above the head, or above the finalized height for `'finalized'`). Confirms\n * the monitor's orphan decisions and the scanner's rollback and TOO_DEEP verdicts.\n */\n blockHash(height: bigint, level: FinalityLevel): Promise<string | null>;\n}\n\nexport interface SequenceSource {\n /** Next nonce/seqno including pending transactions. */\n pending(address: string): Promise<bigint>;\n /** Next nonce/seqno per the latest block. */\n latest(address: string): Promise<bigint>;\n}\n\nexport interface ReplacementPolicy {\n readonly replace: boolean;\n readonly cancel: boolean;\n buildReplacement?(\n previous: UnsignedTx,\n fee: FeeSpeed | FeeOverride,\n ctx: BuildContext,\n ): Promise<UnsignedTx>;\n /**\n * A transaction for `previous`'s slot that does not execute the transfer (e.g. a\n * self-transfer). Without `fee` it pays the network's minimum bump over `previous`; with\n * one, that fee, refused (FEE_TOO_LOW) below the bump. `previous` may itself be a cancel\n * (a repeat cancel bumps a stuck one).\n */\n buildCancel?(\n previous: UnsignedTx,\n ctx: BuildContext,\n fee?: FeeSpeed | FeeOverride,\n ): Promise<UnsignedTx>;\n}\n\nexport interface ScanFilter {\n readonly addresses?: readonly string[];\n readonly assets?: readonly AssetRef[];\n}\n\nexport interface BlockSource {\n header(height: bigint): Promise<DriverBlock | null>;\n transactions(\n block: DriverBlock,\n filter?: ScanFilter,\n ): Promise<readonly DriverTransaction[]>;\n}\n\nexport interface AddressHistorySource {\n list(\n address: string,\n options: { readonly cursor?: string; readonly limit: number },\n ): Promise<{ readonly items: readonly DriverTransaction[]; readonly next?: string }>;\n}\n\nexport interface DriverLimits {\n readonly maxOutputs: number;\n}\n\n/**\n * A native SDK client for `crypto-aio/native` and how to release it. `close` frees\n * what the client holds (sockets, timers, workers); the root container's `close()` runs it\n * once, before closing its pooled drivers.\n */\nexport interface DisposableNativeClient {\n readonly client: unknown;\n close?(): void | Promise<void>;\n}\n\n/**\n * The driver port: every method's contract, as the core relies on it. Purpose, retry\n * class and quorum are the `CallOptions` a driver passes to its `Transport` (defaults:\n * purpose `read`, retry `safe`, no quorum). A `monitor` or `proof` read only goes to\n * endpoints that are not lagging.\n *\n * | Method | Purpose | Retry | Quorum | Returns / throws |\n * | --- | --- | --- | --- | --- |\n * | `reader.getBalance`, `getBlock`, `getTransaction` | `read` | `safe` | none | `null` when not found; provider errors propagate |\n * | `reader.getTokenMetadata` | `read` | `safe` | none (a driver may use a quorum) | A token's own unusable metadata (no contract, a reverting or malformed `decimals`/`symbol`) throws `ValidationError('ASSET_RESOLUTION')`, which the core caches per container (only a non-retryable `ASSET_RESOLUTION` is cached); every other failure, e.g. a transient provider failure (propagated retryable) or any other provider error, is not cached and the next lookup queries again. Stricter than this minimum, the EVM driver reads `decimals()` and `symbol()` under `quorum: 'proof'`: the metadata is cached for the container's life, and one endpoint's wrong `decimals` would mis-scale every amount; endpoints that disagree throw retryable `PROVIDER_INCONSISTENT`, which is not cached |\n * | `reader.getBlockHeight`, `getFinalizedHeight` | `monitor` | `safe` | none | propagate; they feed the stale-view guards and confirmation depths |\n * | `reader.observe(ref, ordering, from)` | `monitor` | `safe` | none | `{ seen: 'none' }` when not visible; `ordering` and `from` are `undefined` for a transaction the library does not manage |\n * | `sequence.pending`, `sequence.latest` | `monitor` | `safe` | none | propagate |\n * | `proofs.*` (`finalizedHead`, `includedFinal`, `slotConsumed`, `expired`, `blockHash`) | `proof` | `safe` | `'proof'` | endpoints that disagree throw retryable `PROVIDER_INCONSISTENT`, and the core then decides nothing. Only a definitive negative proof answers \"no\"; every other RPC error throws retryable `PROVIDER_UNAVAILABLE`, which decides nothing (see below). Only `slotConsumed(…, 'latest')` may be a single `monitor` read: the core records it as observed evidence |\n * | `broadcaster.broadcast` | `broadcast` | `ambiguous-on-failure` | none (passes `fanout` and `signal` through) | classifies a definitive `RPC_ERROR` into a `BroadcastResult`; rethrows an ambiguous one (`error.ambiguous`) and every other failure unclassified |\n * | `builder.estimateFee`, `checkFunds`, `build` | `read` | `safe` | none | `ValidationError` / `UnsupportedCapabilityError` for an intent it cannot build |\n * | `builder.assemble` | no I/O | – | – | `SigningError('SIGNING_FAILED')` when a signature is missing |\n * | `builder.signaturesFrom` (optional) | no I/O | – | – | `ValidationError('INVALID_INTENT')` when the signed payload is not the prepared transaction |\n * | `replacement.buildReplacement`, `buildCancel` | `read` | `safe` | none | `ChainError('FEE_TOO_LOW')` below the network's bump; `buildCancel` honours a given `fee` and never substitutes its own |\n * | `blocks.header` | `monitor` | `safe` | none | `null` while the height is not visible |\n * | `blocks.transactions` | `monitor` | `safe` | none | retryable `PROVIDER_INCONSISTENT` when the block at `block.height` no longer has `block.hash` |\n * | `history.list` | `read` (indexer transport when configured) | `safe` | none | propagate |\n * | `createNativeClient` | no I/O | – | – | a fresh SDK instance on every call, never the pooled one |\n *\n * Further rules:\n * - On a proof path (`proofs.*`), only a definitive negative proof may\n * answer \"no\" (`included: false`, a slot not consumed, a `null` block hash). Every other\n * RPC error, including state or history not available, pruned data, an index still being\n * built (\"transaction indexing is in progress\"), or an endpoint's non-definitive error,\n * must surface as a retryable `ProviderError('PROVIDER_UNAVAILABLE')`, which decides\n * nothing: the core looks again later and never takes it for an answer.\n * - `BlockSource` heights are dense: every height up to the head has one block, and\n * `header(h)` is `null` only while `h` is not visible, never for a skipped slot.\n * - A provider must serve headers at least about 2 × `reorgWindow` below the head. A new\n * cursor loads `reorgWindow` blocks below its start, and a rollback refills its window\n * below the common ancestor.\n * - `ScanFilter.addresses`: when non-empty, return at least every transaction with a transfer\n * from or to one of them; empty (`[]`) or absent means no filter. `ScanFilter.assets` is a\n * hint only: a driver may narrow by it or ignore it, and the core does not filter again.\n * - `fee.details.requestedFee` is reserved. On replacements the core records the requested\n * fee spec there, so a driver never sets or reads it.\n * - `DriverContext` has no asset resolver and `DriverIntent` carries no decimals. Amounts\n * reach drivers in base units only; a driver that needs a token's decimals (Solana's\n * `transferChecked`) reads them from the chain itself.\n */\nexport interface ChainDriver {\n readonly ordering: OrderingKind;\n readonly capabilities: ReadonlySet<Capability>;\n readonly address: AddressCodec;\n readonly reader: ChainReader;\n readonly builder: TxBuilder;\n readonly broadcaster: Broadcaster;\n readonly proofs: ProofSource;\n readonly sequence?: SequenceSource;\n readonly replacement?: ReplacementPolicy;\n readonly blocks?: BlockSource;\n readonly history?: AddressHistorySource;\n /** Two-level, capability-gated family API: `ext.<family>.<method>(...) → Promise`. */\n readonly ext?: Readonly<\n Record<string, Readonly<Record<string, (...args: never[]) => Promise<unknown>>>>\n >;\n limits?(wallet: WalletOptions): DriverLimits;\n /**\n * A fresh, caller-owned SDK client for `crypto-aio/native`: a new SDK instance on every\n * call, never the pooled one.\n */\n createNativeClient?(): DisposableNativeClient;\n close?(): Promise<void>;\n}\n\n/**\n * A factory's `create()` must call `transport.setProbes(...)` exactly once, before any\n * other traffic, on every `Transport` it receives here — including `indexer`, when present.\n * `setProbes` resets health/identity state, so calling it again later, or skipping it on one\n * of the two transports, leaves that transport's health checks silently unconfigured.\n *\n * There is no asset resolver here, and `DriverIntent` carries no decimals: drivers work\n * in base units only.\n */\nexport interface DriverContext {\n readonly chain: ChainInfo;\n readonly network: NetworkInfo;\n readonly library: string;\n readonly transport: Transport;\n readonly indexer?: Transport;\n readonly clock: Clock;\n readonly log: Logger;\n readonly options: Readonly<Record<string, unknown>>;\n}\n\nexport interface DriverFactory {\n create(ctx: DriverContext): Promise<ChainDriver>;\n}\n\nexport interface PeerDependency {\n readonly name: string;\n readonly range: string;\n}\n\n/** Static metadata (no SDK import) plus a lazy `load()` that `require()`s the driver module. */\nexport interface AdapterManifest {\n readonly family: string;\n readonly library: string;\n readonly chains: readonly string[];\n readonly capabilities: readonly Capability[];\n readonly indexerCapabilities?: readonly Capability[];\n readonly requiresIndexer?: boolean;\n readonly peerDependencies: readonly PeerDependency[];\n load(): Promise<DriverFactory>;\n}\n"]}