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,466 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CryptoAio = exports.NATIVE_CLOSE_TIMEOUT_MS = void 0;
4
+ const service_1 = require("../assets/service");
5
+ const handle_1 = require("../blockchain/handle");
6
+ const internal_1 = require("../blockchain/internal");
7
+ const env_1 = require("../config/env");
8
+ const merge_1 = require("../config/merge");
9
+ const resolve_1 = require("../config/resolve");
10
+ const error_1 = require("../errors/error");
11
+ const bus_1 = require("../events/bus");
12
+ const logger_1 = require("../events/logger");
13
+ const engine_1 = require("../lifecycle/engine");
14
+ const monitor_1 = require("../lifecycle/monitor");
15
+ const observations_1 = require("../lifecycle/observations");
16
+ const views_1 = require("../lifecycle/views");
17
+ const sequence_1 = require("../ordering/sequence");
18
+ const plugin_1 = require("../registry/plugin");
19
+ const orchestrator_1 = require("../signing/orchestrator");
20
+ const wallet_1 = require("../signing/wallet");
21
+ const memory_1 = require("../store/memory");
22
+ const bytes_1 = require("../util/bytes");
23
+ const clock_1 = require("../util/clock");
24
+ const builtins_1 = require("./builtins");
25
+ const internals_1 = require("./internals");
26
+ const pool_1 = require("./pool");
27
+ const NAMESPACE = /^[A-Za-z0-9._-]{1,64}$/;
28
+ /**
29
+ * The signal a worker loop, pass or recovery runs under: the caller's, if any, and the
30
+ * root's `closing`, which `close()` aborts. A closed container starts no new work: it
31
+ * stops claiming Operations from a shared store (holding each for a lease) and no longer
32
+ * keeps the process alive.
33
+ */
34
+ function workerSignal(runtime, signal) {
35
+ if (runtime.closed)
36
+ throw (0, internals_1.closedError)();
37
+ return signal
38
+ ? AbortSignal.any([signal, runtime.closing.signal])
39
+ : runtime.closing.signal;
40
+ }
41
+ /** How long `close()` waits for one native client's `close` before moving on. */
42
+ exports.NATIVE_CLOSE_TIMEOUT_MS = 5_000;
43
+ /** Runs `close`, but gives up waiting after `ms` of `clock` time (the close keeps running). */
44
+ async function closeWithin(close, clock, ms) {
45
+ const timer = new AbortController();
46
+ try {
47
+ return await Promise.race([
48
+ Promise.resolve()
49
+ .then(close)
50
+ .then(() => 'closed'),
51
+ clock.sleep(ms, timer.signal).then(() => 'timeout'),
52
+ ]);
53
+ }
54
+ finally {
55
+ timer.abort();
56
+ }
57
+ }
58
+ /**
59
+ * Deep-clones plain objects/arrays into a frozen copy so a later mutation of the caller's
60
+ * own input can never reach a layer already captured by a container. Class instances
61
+ * (Signer, Secret, ...) are referenced, not cloned — they're already immutable.
62
+ */
63
+ function cloneFrozen(value, ancestors = new Set()) {
64
+ if (!Array.isArray(value) && !(0, merge_1.isPlainObject)(value))
65
+ return value;
66
+ (0, merge_1.assertNoCycle)(value, ancestors);
67
+ ancestors.add(value);
68
+ try {
69
+ if (Array.isArray(value)) {
70
+ return Object.freeze(value.map((item) => cloneFrozen(item, ancestors)));
71
+ }
72
+ const out = {};
73
+ for (const [key, v] of Object.entries(value))
74
+ out[key] = cloneFrozen(v, ancestors);
75
+ return Object.freeze(out);
76
+ }
77
+ finally {
78
+ ancestors.delete(value);
79
+ }
80
+ }
81
+ /** `chains`/`providers`/`wallets`/`signers`/`hooks`/`lifecycle` are all cloned and
82
+ * deep-frozen at construction, so mutating the caller's options object afterwards never
83
+ * affects handles already built from this layer. For `signers`, only the map OBJECT is
84
+ * cloned (a fresh, frozen copy so adding/replacing a key on the caller's own map can't reach
85
+ * an existing layer) — the `Signer` values it holds are opaque and always taken by reference,
86
+ * never cloned or frozen, even a plain-object signer (`Signer` is an interface), so it keeps
87
+ * its identity and its own mutable state. */
88
+ function scopePart(options) {
89
+ const { chains, providers, signers, wallets, hooks, lifecycle } = options;
90
+ return {
91
+ ...(chains ? { chains: cloneFrozen(chains) } : {}),
92
+ ...(providers ? { providers: cloneFrozen(providers) } : {}),
93
+ ...(signers ? { signers: Object.freeze({ ...signers }) } : {}),
94
+ ...(wallets ? { wallets: cloneFrozen(wallets) } : {}),
95
+ ...(hooks ? { hooks: cloneFrozen(hooks) } : {}),
96
+ ...(lifecycle ? { lifecycle: cloneFrozen(lifecycle) } : {}),
97
+ };
98
+ }
99
+ function createEngine(runtime, effective) {
100
+ const lifecycle = () => (0, engine_1.withLifecycleDefaults)(effective().lifecycle);
101
+ const { leaseMs } = lifecycle();
102
+ const log = runtime.log.child('lifecycle');
103
+ return new engine_1.OperationEngine({
104
+ namespace: runtime.namespace,
105
+ stores: runtime.stores,
106
+ events: runtime.events,
107
+ clock: runtime.clock,
108
+ log,
109
+ orchestrator: new orchestrator_1.SigningOrchestrator({
110
+ schemes: () => runtime.catalogs.schemes,
111
+ events: runtime.events,
112
+ clock: runtime.clock,
113
+ hooks: () => effective().hooks,
114
+ }),
115
+ sequences: new sequence_1.SequenceCoordinator({
116
+ locks: runtime.stores.locks,
117
+ sequences: runtime.stores.sequences,
118
+ clock: runtime.clock,
119
+ owner: runtime.owner,
120
+ leaseMs,
121
+ acquireTimeoutMs: leaseMs,
122
+ // The code only: a store's error message may carry detail that logs must not.
123
+ onReleaseError: (error) => log.warn('lease release failed', { code: (0, engine_1.errorCode)(error) }),
124
+ }),
125
+ lifecycle,
126
+ });
127
+ }
128
+ /**
129
+ * The signer-free read target of a stored Operation, for every check,
130
+ * worker pass and recovery read: its chain, network and library over its own named
131
+ * providers first, then the current defaults when those no longer resolve (inline configs
132
+ * are recorded by hash only and cannot be rebuilt). No wallet or signer is selected, not
133
+ * even a chain default one, so a rotated signer, a removed wallet or a hung custody
134
+ * backend never stops monitoring.
135
+ */
136
+ async function readTarget(container, record) {
137
+ const internals = (0, internals_1.containerOf)(container);
138
+ const { runtime } = internals;
139
+ const { chain, network, library } = record.context;
140
+ const effective = internals.effective();
141
+ const { wallet: _wallet, signer: _signer, ...defaults } = effective.chains[chain] ?? {};
142
+ const signerFree = { ...effective, chains: { ...effective.chains, [chain]: defaults } };
143
+ const select = (provider) => (0, resolve_1.resolveSelection)({
144
+ handle: { chain, network, library, ...(provider ? { provider } : {}) },
145
+ effective: signerFree,
146
+ catalogs: runtime.catalogs,
147
+ log: runtime.log,
148
+ });
149
+ const named = record.context.providers.filter((name) => !name.startsWith('inline:'));
150
+ let selection;
151
+ try {
152
+ selection = select(named.length > 0 ? named : undefined);
153
+ }
154
+ catch (error) {
155
+ // Only a config that no longer resolves (e.g. a renamed provider) falls back.
156
+ if (!(error instanceof error_1.ConfigError))
157
+ throw error;
158
+ selection = select();
159
+ }
160
+ if (runtime.closed)
161
+ throw (0, internals_1.closedError)();
162
+ return { selection, pooled: await runtime.pool.get(selection) };
163
+ }
164
+ /**
165
+ * The wallets the monitor resolved for its writes, cached per container (one public-key
166
+ * read per wallet selection, not one per pass) and bounded by `lifecycle.signTimeoutMs`. A
167
+ * failed resolution is not kept. The cache is dropped when the config changes: a container's
168
+ * layers are frozen, so only a plugin (`use()`, new catalogs and env layer) changes it.
169
+ */
170
+ function walletCache(runtime, internals) {
171
+ let catalogs = runtime.catalogs;
172
+ const wallets = new Map();
173
+ return (selection, driver) => {
174
+ if (runtime.catalogs !== catalogs) {
175
+ catalogs = runtime.catalogs;
176
+ wallets.clear();
177
+ }
178
+ const key = selection.configHash;
179
+ const cached = wallets.get(key);
180
+ if (cached)
181
+ return cached;
182
+ const { effective, signerDeadline } = internals();
183
+ const resolving = (0, wallet_1.resolveWallet)(selection, driver, effective().signers, catalogs.schemes, signerDeadline()).catch((error) => {
184
+ if (wallets.get(key) === resolving)
185
+ wallets.delete(key);
186
+ throw error;
187
+ });
188
+ wallets.set(key, resolving);
189
+ return resolving;
190
+ };
191
+ }
192
+ /**
193
+ * The wallet-bound target of a stored Operation, resolved lazily and only for the
194
+ * writes that need one: the all-rejected verdict, nonce reconciliation and recovery's
195
+ * resend. None of them signs, and their address lease is keyed on the Operation itself.
196
+ * Its frozen context (chain, network, library, wallet, signer) is rebuilt against the
197
+ * container's current config with its own named providers first; when that no longer
198
+ * resolves (a renamed provider, a rotated signer), the wallet alone over the current
199
+ * defaults, with neither the recorded signer nor the providers: the wallet's current
200
+ * signer, public key or address then stands for it (a watch-only wallet is enough). The
201
+ * engine checks the resolved wallet still owns the Operation before using it.
202
+ */
203
+ async function operationTarget(container, runtime, record, wallets) {
204
+ const { chain, network, library, wallet, signer, providers } = record.context;
205
+ const base = { chain, network, library, wallet };
206
+ const named = providers.filter((name) => !name.startsWith('inline:'));
207
+ let handle;
208
+ try {
209
+ handle = container.blockchain({
210
+ ...base,
211
+ ...(signer !== undefined ? { signer } : {}),
212
+ ...(named.length > 0 ? { provider: named } : {}),
213
+ });
214
+ }
215
+ catch (error) {
216
+ if (!(error instanceof error_1.ConfigError))
217
+ throw error;
218
+ handle = container.blockchain(base);
219
+ }
220
+ const internals = (0, internal_1.internalsOf)(handle);
221
+ const pooled = await internals.pooled();
222
+ return {
223
+ selection: internals.selection,
224
+ pooled,
225
+ wallet: await wallets(internals.selection, pooled.driver),
226
+ assets: runtime.assets,
227
+ };
228
+ }
229
+ /**
230
+ * Dependency container: stores, signers, wallets, hooks, plugins and a shared driver pool.
231
+ * Separate `new CryptoAio()` instances are fully isolated (use one per tenant).
232
+ */
233
+ class CryptoAio {
234
+ namespace;
235
+ constructor(options = {}, scope) {
236
+ if (scope) {
237
+ const parent = (0, internals_1.containerOf)(scope.parent);
238
+ this.namespace = parent.runtime.namespace;
239
+ this.#bind(parent.runtime, [...parent.layers, scopePart(scope.overrides)], false);
240
+ return;
241
+ }
242
+ const namespace = options.namespace ?? 'default';
243
+ if (!NAMESPACE.test(namespace))
244
+ throw new error_1.ConfigError('CONFIG_INVALID', 'invalid namespace: use 1 to 64 letters, digits, dots, underscores or hyphens');
245
+ const clock = options.clock ?? clock_1.systemClock;
246
+ const log = options.logger ?? (0, logger_1.createLogger)();
247
+ const catalogs = (0, plugin_1.createCatalogs)();
248
+ for (const plugin of [...(0, builtins_1.builtinPlugins)(), ...(options.plugins ?? [])])
249
+ (0, plugin_1.applyPlugin)(catalogs, plugin);
250
+ const env = options.env === false ? {} : (options.env ?? process.env);
251
+ const events = new bus_1.EventBus(clock, log);
252
+ // eslint-disable-next-line prefer-const -- closures below read it after assignment
253
+ let runtime;
254
+ const pool = new pool_1.DriverPool({
255
+ catalogs: () => runtime.catalogs,
256
+ clock,
257
+ events,
258
+ log,
259
+ transport: () => runtime.transport,
260
+ });
261
+ runtime = {
262
+ namespace,
263
+ catalogs,
264
+ envLayer: {
265
+ chains: (0, env_1.readEnvChains)(env, catalogs.chains.list().map((c) => c.id), options.profile),
266
+ },
267
+ env,
268
+ ...(options.profile !== undefined ? { profile: options.profile } : {}),
269
+ clock,
270
+ log,
271
+ events,
272
+ stores: {
273
+ ...(0, memory_1.createMemoryStores)(clock),
274
+ ...Object.fromEntries(Object.entries(options.stores ?? {}).filter(([, store]) => store !== undefined)),
275
+ },
276
+ pool,
277
+ assets: new service_1.AssetService(() => runtime.catalogs),
278
+ transport: options.transport ?? {},
279
+ owner: (0, bytes_1.randomId)('aio'),
280
+ closed: false,
281
+ closing: new AbortController(),
282
+ natives: new Set(),
283
+ };
284
+ this.namespace = namespace;
285
+ this.#bind(runtime, [scopePart(options)], true);
286
+ }
287
+ /**
288
+ * Child container: inherits config, pool, stores and namespace; overrides merge on top.
289
+ * Not a tenant boundary — a scope shares its root's pool and stores. Use a separate
290
+ * `new CryptoAio({ namespace })` when isolation between tenants is required.
291
+ */
292
+ scope(overrides) {
293
+ return new CryptoAio({}, { parent: this, overrides });
294
+ }
295
+ blockchain(config) {
296
+ const internals = (0, internals_1.containerOf)(this);
297
+ const { runtime } = internals;
298
+ const selection = (0, resolve_1.resolveSelection)({
299
+ handle: config,
300
+ effective: internals.effective(),
301
+ catalogs: runtime.catalogs,
302
+ log: runtime.log,
303
+ });
304
+ let pooled;
305
+ let wallet;
306
+ const handle = {
307
+ container: this,
308
+ selection,
309
+ nativeClients: new Map(),
310
+ assertOpen: () => {
311
+ if (runtime.closed)
312
+ throw (0, internals_1.closedError)();
313
+ },
314
+ registerNative: (native) => {
315
+ if (runtime.closed)
316
+ throw (0, internals_1.closedError)();
317
+ if (native.close)
318
+ runtime.natives.add(() => native.close?.());
319
+ },
320
+ // A closed root refuses work even through a pooled driver this handle holds.
321
+ pooled: () => {
322
+ if (runtime.closed)
323
+ return Promise.reject((0, internals_1.closedError)());
324
+ pooled ??= runtime.pool.get(selection).catch((error) => {
325
+ pooled = undefined;
326
+ throw error;
327
+ });
328
+ return pooled;
329
+ },
330
+ wallet: () => {
331
+ if (runtime.closed)
332
+ return Promise.reject((0, internals_1.closedError)());
333
+ wallet ??= handle
334
+ .pooled()
335
+ .then(({ driver }) => (0, wallet_1.resolveWallet)(selection, driver, internals.effective().signers, runtime.catalogs.schemes, internals.signerDeadline()))
336
+ .catch((error) => {
337
+ wallet = undefined;
338
+ throw error;
339
+ });
340
+ return wallet;
341
+ },
342
+ };
343
+ return new handle_1.Blockchain(handle);
344
+ }
345
+ /** Registers a plugin on this root container (copy-on-write catalogs). */
346
+ use(plugin) {
347
+ const internals = (0, internals_1.containerOf)(this);
348
+ if (!internals.isRoot)
349
+ throw new error_1.ConfigError('CONFIG_INVALID', 'plugins can only be added to a root container');
350
+ const { runtime } = internals;
351
+ const next = (0, plugin_1.cloneCatalogs)(runtime.catalogs);
352
+ (0, plugin_1.applyPlugin)(next, plugin);
353
+ runtime.catalogs = next;
354
+ runtime.envLayer = {
355
+ chains: (0, env_1.readEnvChains)(runtime.env, next.chains.list().map((c) => c.id), runtime.profile),
356
+ };
357
+ return this;
358
+ }
359
+ on(type, handler) {
360
+ return (0, internals_1.containerOf)(this).runtime.events.on(type, handler);
361
+ }
362
+ onAny(handler) {
363
+ return (0, internals_1.containerOf)(this).runtime.events.onAny(handler);
364
+ }
365
+ /** Stored Operations of this namespace, as views, and startup recovery. */
366
+ get operations() {
367
+ const internals = (0, internals_1.containerOf)(this);
368
+ const store = internals.runtime.stores.operations;
369
+ const namespace = internals.runtime.namespace;
370
+ const view = async (record) => (0, views_1.toView)(record, await (0, observations_1.loadObservations)(store, record));
371
+ return {
372
+ get: async (id) => {
373
+ const record = await store.get(namespace, id);
374
+ return record ? view(record) : null;
375
+ },
376
+ list: async (filter = {}) => Promise.all((await store.list({
377
+ namespace,
378
+ ...(filter.states ? { states: filter.states } : {}),
379
+ ...(filter.chain ? { chain: filter.chain } : {}),
380
+ ...(filter.network ? { network: filter.network } : {}),
381
+ ...(filter.limit !== undefined ? { limit: filter.limit } : {}),
382
+ })).map(view)),
383
+ recover: async (options = {}) => internals.monitor().recover({
384
+ ...options,
385
+ signal: workerSignal(internals.runtime, options.signal),
386
+ }),
387
+ };
388
+ }
389
+ /** Background workers that check due Operations without anyone waiting on them. */
390
+ get monitor() {
391
+ const internals = (0, internals_1.containerOf)(this);
392
+ return {
393
+ start: async (options = {}) => internals.monitor().start({
394
+ ...options,
395
+ signal: workerSignal(internals.runtime, options.signal),
396
+ }),
397
+ runOnce: async (options = {}) => internals.monitor().runOnce({
398
+ workerId: options.workerId ?? internals.runtime.owner,
399
+ ...(options.batch !== undefined ? { batch: options.batch } : {}),
400
+ signal: workerSignal(internals.runtime, options.signal),
401
+ }),
402
+ };
403
+ }
404
+ /**
405
+ * Closes the root container: runs the `close` of every native client that
406
+ * `crypto-aio/native` handed out (a failing one is logged by code and skipped), then
407
+ * closes the pooled drivers. Its handles and `native()` then fail with
408
+ * `INVALID_TRANSITION`. A scope's `close()` does nothing; scopes share their root's pool.
409
+ */
410
+ async close() {
411
+ const internals = (0, internals_1.containerOf)(this);
412
+ if (!internals.isRoot)
413
+ return;
414
+ const { runtime } = internals;
415
+ runtime.closed = true;
416
+ // Every worker loop, pass and recovery stops at its next check, and its sleeps end.
417
+ runtime.closing.abort();
418
+ const natives = [...runtime.natives];
419
+ runtime.natives.clear();
420
+ await Promise.all(natives.map(async (close) => {
421
+ try {
422
+ const outcome = await closeWithin(close, runtime.clock, exports.NATIVE_CLOSE_TIMEOUT_MS);
423
+ if (outcome === 'timeout') {
424
+ runtime.log.warn('native client close timed out', {
425
+ timeoutMs: exports.NATIVE_CLOSE_TIMEOUT_MS,
426
+ });
427
+ }
428
+ }
429
+ catch (error) {
430
+ runtime.log.warn('native client close failed', { code: (0, engine_1.errorCode)(error) });
431
+ }
432
+ }));
433
+ await runtime.pool.close();
434
+ }
435
+ #bind(runtime, layers, isRoot) {
436
+ const effective = () => (0, merge_1.mergeScopes)([runtime.envLayer, ...layers]);
437
+ let engine;
438
+ let monitor;
439
+ const getEngine = () => (engine ??= createEngine(runtime, effective));
440
+ const wallets = walletCache(runtime, () => (0, internals_1.containerOf)(this));
441
+ (0, internals_1.bindContainer)(this, {
442
+ runtime,
443
+ layers,
444
+ isRoot,
445
+ effective,
446
+ signerDeadline: () => ({
447
+ clock: runtime.clock,
448
+ timeoutMs: (0, engine_1.withLifecycleDefaults)(effective().lifecycle).signTimeoutMs,
449
+ }),
450
+ engine: getEngine,
451
+ monitor: () => (monitor ??= new monitor_1.Monitor({
452
+ engine: getEngine(),
453
+ stores: runtime.stores,
454
+ events: runtime.events,
455
+ clock: runtime.clock,
456
+ log: runtime.log.child('monitor'),
457
+ namespace: runtime.namespace,
458
+ lifecycle: () => (0, engine_1.withLifecycleDefaults)(effective().lifecycle),
459
+ resolveRead: (record) => readTarget(this, record),
460
+ resolveTarget: (record) => operationTarget(this, runtime, record, wallets),
461
+ })),
462
+ });
463
+ }
464
+ }
465
+ exports.CryptoAio = CryptoAio;
466
+ //# sourceMappingURL=container.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container.js","sourceRoot":"","sources":["../../../src/core/container/container.ts"],"names":[],"mappings":"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","sourcesContent":["import { AssetService } from '../assets/service';\nimport { Blockchain } from '../blockchain/handle';\nimport { internalsOf, type HandleInternals } from '../blockchain/internal';\nimport { readEnvChains } from '../config/env';\nimport { assertNoCycle, isPlainObject, mergeScopes } from '../config/merge';\nimport { resolveSelection } from '../config/resolve';\nimport type {\n AioOptions,\n EffectiveOptions,\n HandleConfig,\n HandleOptions,\n ResolvedSelection,\n ScopeOptions,\n} from '../config/types';\nimport type { ChainDriver } from '../driver/types';\nimport { ConfigError } from '../errors/error';\nimport { EventBus } from '../events/bus';\nimport { createLogger } from '../events/logger';\nimport type { AioEvent, AioEventName } from '../events/types';\nimport {\n OperationEngine,\n errorCode,\n withLifecycleDefaults,\n type OperationTarget,\n type ReadTarget,\n} from '../lifecycle/engine';\nimport { Monitor, type RecoveryReport, type WorkerOptions } from '../lifecycle/monitor';\nimport { loadObservations } from '../lifecycle/observations';\nimport { toView, type OperationView } from '../lifecycle/views';\nimport type { ChainId } from '../model/ids';\nimport { SequenceCoordinator } from '../ordering/sequence';\nimport {\n applyPlugin,\n cloneCatalogs,\n createCatalogs,\n type Catalogs,\n type Plugin,\n} from '../registry/plugin';\nimport { SigningOrchestrator } from '../signing/orchestrator';\nimport { resolveWallet, type ResolvedWallet } from '../signing/wallet';\nimport { createMemoryStores } from '../store/memory';\nimport type { OperationRecord, OperationState, Stores } from '../store/types';\nimport { randomId } from '../util/bytes';\nimport { systemClock, type Clock } from '../util/clock';\nimport { builtinPlugins } from './builtins';\nimport {\n bindContainer,\n closedError,\n containerOf,\n type ContainerInternals,\n type RootRuntime,\n} from './internals';\nimport { DriverPool, type PooledDriver } from './pool';\n\nconst NAMESPACE = /^[A-Za-z0-9._-]{1,64}$/;\n\n/**\n * The signal a worker loop, pass or recovery runs under: the caller's, if any, and the\n * root's `closing`, which `close()` aborts. A closed container starts no new work: it\n * stops claiming Operations from a shared store (holding each for a lease) and no longer\n * keeps the process alive.\n */\nfunction workerSignal(\n runtime: RootRuntime,\n signal: AbortSignal | undefined,\n): AbortSignal {\n if (runtime.closed) throw closedError();\n return signal\n ? AbortSignal.any([signal, runtime.closing.signal])\n : runtime.closing.signal;\n}\n\n/** How long `close()` waits for one native client's `close` before moving on. */\nexport const NATIVE_CLOSE_TIMEOUT_MS = 5_000;\n\n/** Runs `close`, but gives up waiting after `ms` of `clock` time (the close keeps running). */\nasync function closeWithin(\n close: () => unknown,\n clock: Clock,\n ms: number,\n): Promise<'closed' | 'timeout'> {\n const timer = new AbortController();\n try {\n return await Promise.race([\n Promise.resolve()\n .then(close)\n .then(() => 'closed' as const),\n clock.sleep(ms, timer.signal).then(() => 'timeout' as const),\n ]);\n } finally {\n timer.abort();\n }\n}\n\ninterface ScopeInit {\n readonly parent: CryptoAio;\n readonly overrides: ScopeOptions;\n}\n\n/**\n * Deep-clones plain objects/arrays into a frozen copy so a later mutation of the caller's\n * own input can never reach a layer already captured by a container. Class instances\n * (Signer, Secret, ...) are referenced, not cloned — they're already immutable.\n */\nfunction cloneFrozen<T>(value: T, ancestors: Set<object> = new Set()): T {\n if (!Array.isArray(value) && !isPlainObject(value)) return value;\n assertNoCycle(value, ancestors);\n ancestors.add(value);\n try {\n if (Array.isArray(value)) {\n return Object.freeze(\n value.map((item: unknown) => cloneFrozen(item, ancestors)),\n ) as T;\n }\n const out: Record<string, unknown> = {};\n for (const [key, v] of Object.entries(value)) out[key] = cloneFrozen(v, ancestors);\n return Object.freeze(out) as T;\n } finally {\n ancestors.delete(value);\n }\n}\n\n/** `chains`/`providers`/`wallets`/`signers`/`hooks`/`lifecycle` are all cloned and\n * deep-frozen at construction, so mutating the caller's options object afterwards never\n * affects handles already built from this layer. For `signers`, only the map OBJECT is\n * cloned (a fresh, frozen copy so adding/replacing a key on the caller's own map can't reach\n * an existing layer) — the `Signer` values it holds are opaque and always taken by reference,\n * never cloned or frozen, even a plain-object signer (`Signer` is an interface), so it keeps\n * its identity and its own mutable state. */\nfunction scopePart(options: ScopeOptions): ScopeOptions {\n const { chains, providers, signers, wallets, hooks, lifecycle } = options;\n return {\n ...(chains ? { chains: cloneFrozen(chains) } : {}),\n ...(providers ? { providers: cloneFrozen(providers) } : {}),\n ...(signers ? { signers: Object.freeze({ ...signers }) } : {}),\n ...(wallets ? { wallets: cloneFrozen(wallets) } : {}),\n ...(hooks ? { hooks: cloneFrozen(hooks) } : {}),\n ...(lifecycle ? { lifecycle: cloneFrozen(lifecycle) } : {}),\n };\n}\n\nfunction createEngine(\n runtime: RootRuntime,\n effective: () => EffectiveOptions,\n): OperationEngine {\n const lifecycle = () => withLifecycleDefaults(effective().lifecycle);\n const { leaseMs } = lifecycle();\n const log = runtime.log.child('lifecycle');\n return new OperationEngine({\n namespace: runtime.namespace,\n stores: runtime.stores,\n events: runtime.events,\n clock: runtime.clock,\n log,\n orchestrator: new SigningOrchestrator({\n schemes: () => runtime.catalogs.schemes,\n events: runtime.events,\n clock: runtime.clock,\n hooks: () => effective().hooks,\n }),\n sequences: new SequenceCoordinator({\n locks: runtime.stores.locks,\n sequences: runtime.stores.sequences,\n clock: runtime.clock,\n owner: runtime.owner,\n leaseMs,\n acquireTimeoutMs: leaseMs,\n // The code only: a store's error message may carry detail that logs must not.\n onReleaseError: (error) =>\n log.warn('lease release failed', { code: errorCode(error) }),\n }),\n lifecycle,\n });\n}\n\n/**\n * The signer-free read target of a stored Operation, for every check,\n * worker pass and recovery read: its chain, network and library over its own named\n * providers first, then the current defaults when those no longer resolve (inline configs\n * are recorded by hash only and cannot be rebuilt). No wallet or signer is selected, not\n * even a chain default one, so a rotated signer, a removed wallet or a hung custody\n * backend never stops monitoring.\n */\nasync function readTarget(\n container: CryptoAio,\n record: OperationRecord,\n): Promise<ReadTarget> {\n const internals = containerOf(container);\n const { runtime } = internals;\n const { chain, network, library } = record.context;\n const effective = internals.effective();\n const { wallet: _wallet, signer: _signer, ...defaults } = effective.chains[chain] ?? {};\n const signerFree = { ...effective, chains: { ...effective.chains, [chain]: defaults } };\n const select = (provider?: readonly string[]) =>\n resolveSelection({\n handle: { chain, network, library, ...(provider ? { provider } : {}) },\n effective: signerFree,\n catalogs: runtime.catalogs,\n log: runtime.log,\n });\n const named = record.context.providers.filter((name) => !name.startsWith('inline:'));\n let selection: ResolvedSelection;\n try {\n selection = select(named.length > 0 ? named : undefined);\n } catch (error) {\n // Only a config that no longer resolves (e.g. a renamed provider) falls back.\n if (!(error instanceof ConfigError)) throw error;\n selection = select();\n }\n if (runtime.closed) throw closedError();\n return { selection, pooled: await runtime.pool.get(selection) };\n}\n\n/**\n * The wallets the monitor resolved for its writes, cached per container (one public-key\n * read per wallet selection, not one per pass) and bounded by `lifecycle.signTimeoutMs`. A\n * failed resolution is not kept. The cache is dropped when the config changes: a container's\n * layers are frozen, so only a plugin (`use()`, new catalogs and env layer) changes it.\n */\nfunction walletCache(\n runtime: RootRuntime,\n internals: () => ContainerInternals,\n): (selection: ResolvedSelection, driver: ChainDriver) => Promise<ResolvedWallet> {\n let catalogs: Catalogs = runtime.catalogs;\n const wallets = new Map<string, Promise<ResolvedWallet>>();\n return (selection, driver) => {\n if (runtime.catalogs !== catalogs) {\n catalogs = runtime.catalogs;\n wallets.clear();\n }\n const key = selection.configHash;\n const cached = wallets.get(key);\n if (cached) return cached;\n const { effective, signerDeadline } = internals();\n const resolving = resolveWallet(\n selection,\n driver,\n effective().signers,\n catalogs.schemes,\n signerDeadline(),\n ).catch((error: unknown) => {\n if (wallets.get(key) === resolving) wallets.delete(key);\n throw error;\n });\n wallets.set(key, resolving);\n return resolving;\n };\n}\n\n/**\n * The wallet-bound target of a stored Operation, resolved lazily and only for the\n * writes that need one: the all-rejected verdict, nonce reconciliation and recovery's\n * resend. None of them signs, and their address lease is keyed on the Operation itself.\n * Its frozen context (chain, network, library, wallet, signer) is rebuilt against the\n * container's current config with its own named providers first; when that no longer\n * resolves (a renamed provider, a rotated signer), the wallet alone over the current\n * defaults, with neither the recorded signer nor the providers: the wallet's current\n * signer, public key or address then stands for it (a watch-only wallet is enough). The\n * engine checks the resolved wallet still owns the Operation before using it.\n */\nasync function operationTarget(\n container: CryptoAio,\n runtime: RootRuntime,\n record: OperationRecord,\n wallets: (selection: ResolvedSelection, driver: ChainDriver) => Promise<ResolvedWallet>,\n): Promise<OperationTarget> {\n const { chain, network, library, wallet, signer, providers } = record.context;\n const base = { chain, network, library, wallet } as HandleConfig<ChainId>;\n const named = providers.filter((name) => !name.startsWith('inline:'));\n let handle: Blockchain<ChainId>;\n try {\n handle = container.blockchain({\n ...base,\n ...(signer !== undefined ? { signer } : {}),\n ...(named.length > 0 ? { provider: named } : {}),\n });\n } catch (error) {\n if (!(error instanceof ConfigError)) throw error;\n handle = container.blockchain(base);\n }\n const internals = internalsOf(handle);\n const pooled = await internals.pooled();\n return {\n selection: internals.selection,\n pooled,\n wallet: await wallets(internals.selection, pooled.driver),\n assets: runtime.assets,\n };\n}\n\nexport interface OperationsFilter {\n readonly states?: readonly OperationState[];\n readonly chain?: string;\n readonly network?: string;\n readonly limit?: number;\n}\n\nexport interface OperationsApi {\n get(id: string): Promise<OperationView | null>;\n /** In creation order. */\n list(filter?: OperationsFilter): Promise<OperationView[]>;\n /** Startup recovery for this namespace (see RecoveryReport); it never signs. */\n recover(options?: { readonly signal?: AbortSignal }): Promise<RecoveryReport>;\n}\n\nexport interface MonitorApi {\n /** Runs worker passes until `signal` aborts; any number of workers may run. */\n start(options?: WorkerOptions): Promise<void>;\n /** One worker pass; resolves to the number of Operations it claimed. */\n runOnce(options?: WorkerOptions): Promise<number>;\n}\n\n/**\n * Dependency container: stores, signers, wallets, hooks, plugins and a shared driver pool.\n * Separate `new CryptoAio()` instances are fully isolated (use one per tenant).\n */\nexport class CryptoAio {\n readonly namespace: string;\n\n constructor(options?: AioOptions);\n /** @internal */\n constructor(options: AioOptions, scope: ScopeInit);\n constructor(options: AioOptions = {}, scope?: ScopeInit) {\n if (scope) {\n const parent = containerOf(scope.parent);\n this.namespace = parent.runtime.namespace;\n this.#bind(parent.runtime, [...parent.layers, scopePart(scope.overrides)], false);\n return;\n }\n const namespace = options.namespace ?? 'default';\n if (!NAMESPACE.test(namespace))\n throw new ConfigError(\n 'CONFIG_INVALID',\n 'invalid namespace: use 1 to 64 letters, digits, dots, underscores or hyphens',\n );\n const clock = options.clock ?? systemClock;\n const log = options.logger ?? createLogger();\n const catalogs = createCatalogs();\n for (const plugin of [...builtinPlugins(), ...(options.plugins ?? [])])\n applyPlugin(catalogs, plugin);\n const env = options.env === false ? {} : (options.env ?? process.env);\n const events = new EventBus(clock, log);\n // eslint-disable-next-line prefer-const -- closures below read it after assignment\n let runtime: RootRuntime;\n const pool = new DriverPool({\n catalogs: () => runtime.catalogs,\n clock,\n events,\n log,\n transport: () => runtime.transport,\n });\n runtime = {\n namespace,\n catalogs,\n envLayer: {\n chains: readEnvChains(\n env,\n catalogs.chains.list().map((c) => c.id),\n options.profile,\n ),\n },\n env,\n ...(options.profile !== undefined ? { profile: options.profile } : {}),\n clock,\n log,\n events,\n stores: {\n ...createMemoryStores(clock),\n ...(Object.fromEntries(\n Object.entries(options.stores ?? {}).filter(([, store]) => store !== undefined),\n ) as Partial<Stores>),\n },\n pool,\n assets: new AssetService(() => runtime.catalogs),\n transport: options.transport ?? {},\n owner: randomId('aio'),\n closed: false,\n closing: new AbortController(),\n natives: new Set(),\n };\n this.namespace = namespace;\n this.#bind(runtime, [scopePart(options)], true);\n }\n\n /**\n * Child container: inherits config, pool, stores and namespace; overrides merge on top.\n * Not a tenant boundary — a scope shares its root's pool and stores. Use a separate\n * `new CryptoAio({ namespace })` when isolation between tenants is required.\n */\n scope(overrides: ScopeOptions): CryptoAio {\n return new CryptoAio({}, { parent: this, overrides });\n }\n\n blockchain<C extends ChainId>(config: HandleConfig<C>): Blockchain<C> {\n const internals = containerOf(this);\n const { runtime } = internals;\n const selection = resolveSelection({\n handle: config as HandleOptions,\n effective: internals.effective(),\n catalogs: runtime.catalogs,\n log: runtime.log,\n });\n let pooled: Promise<PooledDriver> | undefined;\n let wallet: Promise<ResolvedWallet> | undefined;\n const handle: HandleInternals = {\n container: this,\n selection,\n nativeClients: new Map(),\n assertOpen: () => {\n if (runtime.closed) throw closedError();\n },\n registerNative: (native) => {\n if (runtime.closed) throw closedError();\n if (native.close) runtime.natives.add(() => native.close?.());\n },\n // A closed root refuses work even through a pooled driver this handle holds.\n pooled: () => {\n if (runtime.closed) return Promise.reject(closedError());\n pooled ??= runtime.pool.get(selection).catch((error: unknown) => {\n pooled = undefined;\n throw error;\n });\n return pooled;\n },\n wallet: () => {\n if (runtime.closed) return Promise.reject(closedError());\n wallet ??= handle\n .pooled()\n .then(({ driver }) =>\n resolveWallet(\n selection,\n driver,\n internals.effective().signers,\n runtime.catalogs.schemes,\n internals.signerDeadline(),\n ),\n )\n .catch((error: unknown) => {\n wallet = undefined;\n throw error;\n });\n return wallet;\n },\n };\n return new Blockchain<C>(handle);\n }\n\n /** Registers a plugin on this root container (copy-on-write catalogs). */\n use(plugin: Plugin): this {\n const internals = containerOf(this);\n if (!internals.isRoot)\n throw new ConfigError(\n 'CONFIG_INVALID',\n 'plugins can only be added to a root container',\n );\n const { runtime } = internals;\n const next = cloneCatalogs(runtime.catalogs);\n applyPlugin(next, plugin);\n runtime.catalogs = next;\n runtime.envLayer = {\n chains: readEnvChains(\n runtime.env,\n next.chains.list().map((c) => c.id),\n runtime.profile,\n ),\n };\n return this;\n }\n\n on<E extends AioEventName>(type: E, handler: (event: AioEvent<E>) => void): () => void {\n return containerOf(this).runtime.events.on(type, handler);\n }\n\n onAny(handler: (event: AioEvent) => void): () => void {\n return containerOf(this).runtime.events.onAny(handler);\n }\n\n /** Stored Operations of this namespace, as views, and startup recovery. */\n get operations(): OperationsApi {\n const internals = containerOf(this);\n const store = internals.runtime.stores.operations;\n const namespace = internals.runtime.namespace;\n const view = async (record: OperationRecord) =>\n toView(record, await loadObservations(store, record));\n return {\n get: async (id) => {\n const record = await store.get(namespace, id);\n return record ? view(record) : null;\n },\n list: async (filter = {}) =>\n Promise.all(\n (\n await store.list({\n namespace,\n ...(filter.states ? { states: filter.states } : {}),\n ...(filter.chain ? { chain: filter.chain } : {}),\n ...(filter.network ? { network: filter.network } : {}),\n ...(filter.limit !== undefined ? { limit: filter.limit } : {}),\n })\n ).map(view),\n ),\n recover: async (options = {}) =>\n internals.monitor().recover({\n ...options,\n signal: workerSignal(internals.runtime, options.signal),\n }),\n };\n }\n\n /** Background workers that check due Operations without anyone waiting on them. */\n get monitor(): MonitorApi {\n const internals = containerOf(this);\n return {\n start: async (options = {}) =>\n internals.monitor().start({\n ...options,\n signal: workerSignal(internals.runtime, options.signal),\n }),\n runOnce: async (options = {}) =>\n internals.monitor().runOnce({\n workerId: options.workerId ?? internals.runtime.owner,\n ...(options.batch !== undefined ? { batch: options.batch } : {}),\n signal: workerSignal(internals.runtime, options.signal),\n }),\n };\n }\n\n /**\n * Closes the root container: runs the `close` of every native client that\n * `crypto-aio/native` handed out (a failing one is logged by code and skipped), then\n * closes the pooled drivers. Its handles and `native()` then fail with\n * `INVALID_TRANSITION`. A scope's `close()` does nothing; scopes share their root's pool.\n */\n async close(): Promise<void> {\n const internals = containerOf(this);\n if (!internals.isRoot) return;\n const { runtime } = internals;\n runtime.closed = true;\n // Every worker loop, pass and recovery stops at its next check, and its sleeps end.\n runtime.closing.abort();\n const natives = [...runtime.natives];\n runtime.natives.clear();\n await Promise.all(\n natives.map(async (close) => {\n try {\n const outcome = await closeWithin(\n close,\n runtime.clock,\n NATIVE_CLOSE_TIMEOUT_MS,\n );\n if (outcome === 'timeout') {\n runtime.log.warn('native client close timed out', {\n timeoutMs: NATIVE_CLOSE_TIMEOUT_MS,\n });\n }\n } catch (error) {\n runtime.log.warn('native client close failed', { code: errorCode(error) });\n }\n }),\n );\n await runtime.pool.close();\n }\n\n #bind(runtime: RootRuntime, layers: readonly ScopeOptions[], isRoot: boolean): void {\n const effective = () => mergeScopes([runtime.envLayer, ...layers]);\n let engine: OperationEngine | undefined;\n let monitor: Monitor | undefined;\n const getEngine = () => (engine ??= createEngine(runtime, effective));\n const wallets = walletCache(runtime, () => containerOf(this));\n bindContainer(this, {\n runtime,\n layers,\n isRoot,\n effective,\n signerDeadline: () => ({\n clock: runtime.clock,\n timeoutMs: withLifecycleDefaults(effective().lifecycle).signTimeoutMs,\n }),\n engine: getEngine,\n monitor: () =>\n (monitor ??= new Monitor({\n engine: getEngine(),\n stores: runtime.stores,\n events: runtime.events,\n clock: runtime.clock,\n log: runtime.log.child('monitor'),\n namespace: runtime.namespace,\n lifecycle: () => withLifecycleDefaults(effective().lifecycle),\n resolveRead: (record) => readTarget(this, record),\n resolveTarget: (record) => operationTarget(this, runtime, record, wallets),\n })),\n });\n }\n}\n"]}
@@ -0,0 +1,15 @@
1
+ import type { AioOptions } from '../config/types';
2
+ import { CryptoAio } from './container';
3
+ /** The container behind `Blockchain.create`. Prefer explicit containers for multi-tenant use. */
4
+ export declare function defaultContainer(): CryptoAio;
5
+ /**
6
+ * Merges options into the default container. Existing handles keep their frozen config; the
7
+ * stores are carried over key by key (not wholesale) so Operations stay visible even across
8
+ * a `configure()` call that names only some of them. Intended for application startup.
9
+ *
10
+ * Each call starts a new generation of the default container (a new event bus, owner id and
11
+ * driver pool); it never closes the previous one.
12
+ */
13
+ export declare function configure(options: AioOptions): CryptoAio;
14
+ /** Forgets the default container (tests). */
15
+ export declare function resetDefaultContainer(): void;
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.defaultContainer = defaultContainer;
4
+ exports.configure = configure;
5
+ exports.resetDefaultContainer = resetDefaultContainer;
6
+ const default_ref_1 = require("../blockchain/default-ref");
7
+ const merge_1 = require("../config/merge");
8
+ const container_1 = require("./container");
9
+ const internals_1 = require("./internals");
10
+ let instance;
11
+ let accumulated = {};
12
+ /** Merges an options object field by field, by the same rules as a named map. */
13
+ function perField(base, next) {
14
+ return (0, merge_1.byReference)(base, next);
15
+ }
16
+ /**
17
+ * The same rules as scopes: `undefined` never overrides, and no
18
+ * `__proto__`, `constructor` or `prototype` key is copied into a map.
19
+ */
20
+ function mergeAioOptions(base, next) {
21
+ const chains = (0, merge_1.byReference)(base.chains, undefined);
22
+ for (const [id, defaults] of Object.entries(next.chains ?? {})) {
23
+ if (defaults === undefined || (0, merge_1.isUnsafeKey)(id))
24
+ continue;
25
+ chains[id] = (0, merge_1.mergeChainDefaults)(Object.hasOwn(chains, id) ? chains[id] : undefined, defaults);
26
+ }
27
+ const defined = Object.fromEntries(Object.entries(next).filter(([, value]) => value !== undefined));
28
+ return {
29
+ ...base,
30
+ ...defined,
31
+ chains,
32
+ providers: (0, merge_1.byReference)(base.providers, next.providers),
33
+ signers: (0, merge_1.byReference)(base.signers, next.signers),
34
+ wallets: (0, merge_1.byReference)(base.wallets, next.wallets),
35
+ hooks: perField(base.hooks, next.hooks),
36
+ lifecycle: perField(base.lifecycle, next.lifecycle),
37
+ transport: perField(base.transport, next.transport),
38
+ plugins: [...(base.plugins ?? []), ...(next.plugins ?? [])],
39
+ };
40
+ }
41
+ /** The container behind `Blockchain.create`. Prefer explicit containers for multi-tenant use. */
42
+ function defaultContainer() {
43
+ instance ??= new container_1.CryptoAio(accumulated);
44
+ return instance;
45
+ }
46
+ function definedStores(stores) {
47
+ return Object.fromEntries(Object.entries(stores ?? {}).filter(([, store]) => store !== undefined));
48
+ }
49
+ /**
50
+ * Merges options into the default container. Existing handles keep their frozen config; the
51
+ * stores are carried over key by key (not wholesale) so Operations stay visible even across
52
+ * a `configure()` call that names only some of them. Intended for application startup.
53
+ *
54
+ * Each call starts a new generation of the default container (a new event bus, owner id and
55
+ * driver pool); it never closes the previous one.
56
+ */
57
+ function configure(options) {
58
+ const previousStores = instance ? (0, internals_1.containerOf)(instance).runtime.stores : undefined;
59
+ const stores = { ...previousStores, ...definedStores(options.stores) };
60
+ accumulated = mergeAioOptions(accumulated, options);
61
+ instance = new container_1.CryptoAio({ ...accumulated, stores });
62
+ return instance;
63
+ }
64
+ /** Forgets the default container (tests). */
65
+ function resetDefaultContainer() {
66
+ instance = undefined;
67
+ accumulated = {};
68
+ }
69
+ (0, default_ref_1.setDefaultBlockchainFactory)((config) => defaultContainer().blockchain(config));
70
+ //# sourceMappingURL=default.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default.js","sourceRoot":"","sources":["../../../src/core/container/default.ts"],"names":[],"mappings":"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","sourcesContent":["import { setDefaultBlockchainFactory } from '../blockchain/default-ref';\nimport { byReference, isUnsafeKey, mergeChainDefaults } from '../config/merge';\nimport type { AioOptions, ChainDefaults, HandleOptions } from '../config/types';\nimport type { Stores } from '../store/types';\nimport { CryptoAio } from './container';\nimport { containerOf } from './internals';\n\nlet instance: CryptoAio | undefined;\nlet accumulated: AioOptions = {};\n\n/** Merges an options object field by field, by the same rules as a named map. */\nfunction perField<T extends object>(base: T | undefined, next: T | undefined): T {\n type Fields = Readonly<Record<string, unknown>>;\n return byReference(base as Fields | undefined, next as Fields | undefined) as T;\n}\n\n/**\n * The same rules as scopes: `undefined` never overrides, and no\n * `__proto__`, `constructor` or `prototype` key is copied into a map.\n */\nfunction mergeAioOptions(base: AioOptions, next: AioOptions): AioOptions {\n const chains: Record<string, ChainDefaults> = byReference(base.chains, undefined);\n for (const [id, defaults] of Object.entries(next.chains ?? {})) {\n if (defaults === undefined || isUnsafeKey(id)) continue;\n chains[id] = mergeChainDefaults(\n Object.hasOwn(chains, id) ? chains[id] : undefined,\n defaults,\n );\n }\n const defined = Object.fromEntries(\n Object.entries(next).filter(([, value]) => value !== undefined),\n ) as AioOptions;\n return {\n ...base,\n ...defined,\n chains,\n providers: byReference(base.providers, next.providers),\n signers: byReference(base.signers, next.signers),\n wallets: byReference(base.wallets, next.wallets),\n hooks: perField(base.hooks, next.hooks),\n lifecycle: perField(base.lifecycle, next.lifecycle),\n transport: perField(base.transport, next.transport),\n plugins: [...(base.plugins ?? []), ...(next.plugins ?? [])],\n };\n}\n\n/** The container behind `Blockchain.create`. Prefer explicit containers for multi-tenant use. */\nexport function defaultContainer(): CryptoAio {\n instance ??= new CryptoAio(accumulated);\n return instance;\n}\n\nfunction definedStores(stores: Partial<Stores> | undefined): Partial<Stores> {\n return Object.fromEntries(\n Object.entries(stores ?? {}).filter(([, store]) => store !== undefined),\n ) as Partial<Stores>;\n}\n\n/**\n * Merges options into the default container. Existing handles keep their frozen config; the\n * stores are carried over key by key (not wholesale) so Operations stay visible even across\n * a `configure()` call that names only some of them. Intended for application startup.\n *\n * Each call starts a new generation of the default container (a new event bus, owner id and\n * driver pool); it never closes the previous one.\n */\nexport function configure(options: AioOptions): CryptoAio {\n const previousStores = instance ? containerOf(instance).runtime.stores : undefined;\n const stores: Partial<Stores> = { ...previousStores, ...definedStores(options.stores) };\n accumulated = mergeAioOptions(accumulated, options);\n instance = new CryptoAio({ ...accumulated, stores });\n return instance;\n}\n\n/** Forgets the default container (tests). */\nexport function resetDefaultContainer(): void {\n instance = undefined;\n accumulated = {};\n}\n\nsetDefaultBlockchainFactory((config: HandleOptions) =>\n defaultContainer().blockchain(config as never),\n);\n"]}