crypto-aio 0.0.3 → 0.2.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 (700) hide show
  1. package/CHANGELOG.md +167 -0
  2. package/README.md +163 -13
  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 +386 -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 +175 -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 +139 -0
  80. package/dist/adapters/evm/ethers-client.js.map +1 -0
  81. package/dist/adapters/evm/fees.d.ts +103 -0
  82. package/dist/adapters/evm/fees.js +277 -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 +12 -0
  86. package/dist/adapters/evm/index.js.map +1 -0
  87. package/dist/adapters/evm/network.d.ts +65 -0
  88. package/dist/adapters/evm/network.js +150 -0
  89. package/dist/adapters/evm/network.js.map +1 -0
  90. package/dist/adapters/evm/plugin.d.ts +35 -0
  91. package/dist/adapters/evm/plugin.js +150 -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 +370 -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 +83 -0
  103. package/dist/adapters/evm/reader.js +326 -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 +10 -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 +265 -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 +26 -0
  115. package/dist/adapters/evm/web3-client.js +176 -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 +556 -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 +77 -0
  133. package/dist/adapters/solana/fees.js +214 -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/message.d.ts +15 -0
  148. package/dist/adapters/solana/message.js +120 -0
  149. package/dist/adapters/solana/message.js.map +1 -0
  150. package/dist/adapters/solana/network.d.ts +24 -0
  151. package/dist/adapters/solana/network.js +95 -0
  152. package/dist/adapters/solana/network.js.map +1 -0
  153. package/dist/adapters/solana/plugin.d.ts +18 -0
  154. package/dist/adapters/solana/plugin.js +44 -0
  155. package/dist/adapters/solana/plugin.js.map +1 -0
  156. package/dist/adapters/solana/presets.d.ts +2 -0
  157. package/dist/adapters/solana/presets.js +77 -0
  158. package/dist/adapters/solana/presets.js.map +1 -0
  159. package/dist/adapters/solana/programs.d.ts +44 -0
  160. package/dist/adapters/solana/programs.js +159 -0
  161. package/dist/adapters/solana/programs.js.map +1 -0
  162. package/dist/adapters/solana/proofs.d.ts +56 -0
  163. package/dist/adapters/solana/proofs.js +540 -0
  164. package/dist/adapters/solana/proofs.js.map +1 -0
  165. package/dist/adapters/solana/reader.d.ts +82 -0
  166. package/dist/adapters/solana/reader.js +326 -0
  167. package/dist/adapters/solana/reader.js.map +1 -0
  168. package/dist/adapters/solana/rpc.d.ts +102 -0
  169. package/dist/adapters/solana/rpc.js +301 -0
  170. package/dist/adapters/solana/rpc.js.map +1 -0
  171. package/dist/adapters/solana/tokens.d.ts +7 -0
  172. package/dist/adapters/solana/tokens.js +19 -0
  173. package/dist/adapters/solana/tokens.js.map +1 -0
  174. package/dist/adapters/solana/types.d.ts +124 -0
  175. package/dist/{type/contract.js → adapters/solana/types.js} +1 -1
  176. package/dist/adapters/solana/types.js.map +1 -0
  177. package/dist/adapters/solana/web3.d.ts +5 -0
  178. package/dist/adapters/solana/web3.js +61 -0
  179. package/dist/adapters/solana/web3.js.map +1 -0
  180. package/dist/adapters/solana/wire.d.ts +62 -0
  181. package/dist/adapters/solana/wire.js +168 -0
  182. package/dist/adapters/solana/wire.js.map +1 -0
  183. package/dist/adapters/ton/address.d.ts +43 -0
  184. package/dist/adapters/ton/address.js +168 -0
  185. package/dist/adapters/ton/address.js.map +1 -0
  186. package/dist/adapters/ton/api.d.ts +344 -0
  187. package/dist/adapters/ton/api.js +942 -0
  188. package/dist/adapters/ton/api.js.map +1 -0
  189. package/dist/adapters/ton/builder.d.ts +18 -0
  190. package/dist/adapters/ton/builder.js +701 -0
  191. package/dist/adapters/ton/builder.js.map +1 -0
  192. package/dist/adapters/ton/chains.d.ts +16 -0
  193. package/dist/adapters/ton/chains.js +39 -0
  194. package/dist/adapters/ton/chains.js.map +1 -0
  195. package/dist/adapters/ton/decode.d.ts +43 -0
  196. package/dist/adapters/ton/decode.js +219 -0
  197. package/dist/adapters/ton/decode.js.map +1 -0
  198. package/dist/adapters/ton/driver.d.ts +10 -0
  199. package/dist/adapters/ton/driver.js +117 -0
  200. package/dist/adapters/ton/driver.js.map +1 -0
  201. package/dist/adapters/ton/errors.d.ts +36 -0
  202. package/dist/adapters/ton/errors.js +89 -0
  203. package/dist/adapters/ton/errors.js.map +1 -0
  204. package/dist/adapters/ton/fees.d.ts +28 -0
  205. package/dist/adapters/ton/fees.js +121 -0
  206. package/dist/adapters/ton/fees.js.map +1 -0
  207. package/dist/adapters/ton/index.d.ts +16 -0
  208. package/dist/adapters/ton/index.js +9 -0
  209. package/dist/adapters/ton/index.js.map +1 -0
  210. package/dist/adapters/ton/messages.d.ts +157 -0
  211. package/dist/adapters/ton/messages.js +397 -0
  212. package/dist/adapters/ton/messages.js.map +1 -0
  213. package/dist/adapters/ton/native-client.d.ts +10 -0
  214. package/dist/adapters/ton/native-client.js +47 -0
  215. package/dist/adapters/ton/native-client.js.map +1 -0
  216. package/dist/adapters/ton/network.d.ts +58 -0
  217. package/dist/adapters/ton/network.js +207 -0
  218. package/dist/adapters/ton/network.js.map +1 -0
  219. package/dist/adapters/ton/plugin.d.ts +24 -0
  220. package/dist/adapters/ton/plugin.js +57 -0
  221. package/dist/adapters/ton/plugin.js.map +1 -0
  222. package/dist/adapters/ton/presets.d.ts +6 -0
  223. package/dist/adapters/ton/presets.js +94 -0
  224. package/dist/adapters/ton/presets.js.map +1 -0
  225. package/dist/adapters/ton/proofs.d.ts +66 -0
  226. package/dist/adapters/ton/proofs.js +755 -0
  227. package/dist/adapters/ton/proofs.js.map +1 -0
  228. package/dist/adapters/ton/reader.d.ts +235 -0
  229. package/dist/adapters/ton/reader.js +976 -0
  230. package/dist/adapters/ton/reader.js.map +1 -0
  231. package/dist/adapters/ton/tokens.d.ts +10 -0
  232. package/dist/adapters/ton/tokens.js +27 -0
  233. package/dist/adapters/ton/tokens.js.map +1 -0
  234. package/dist/adapters/ton/trace.d.ts +74 -0
  235. package/dist/adapters/ton/trace.js +303 -0
  236. package/dist/adapters/ton/trace.js.map +1 -0
  237. package/dist/adapters/ton/types.d.ts +105 -0
  238. package/dist/{type/transact.js → adapters/ton/types.js} +1 -1
  239. package/dist/adapters/ton/types.js.map +1 -0
  240. package/dist/adapters/ton/wallets.d.ts +86 -0
  241. package/dist/adapters/ton/wallets.js +373 -0
  242. package/dist/adapters/ton/wallets.js.map +1 -0
  243. package/dist/adapters/tron/abi.d.ts +41 -0
  244. package/dist/adapters/tron/abi.js +112 -0
  245. package/dist/adapters/tron/abi.js.map +1 -0
  246. package/dist/adapters/tron/address.d.ts +20 -0
  247. package/dist/adapters/tron/address.js +110 -0
  248. package/dist/adapters/tron/address.js.map +1 -0
  249. package/dist/adapters/tron/builder.d.ts +12 -0
  250. package/dist/adapters/tron/builder.js +569 -0
  251. package/dist/adapters/tron/builder.js.map +1 -0
  252. package/dist/adapters/tron/chains.d.ts +12 -0
  253. package/dist/adapters/tron/chains.js +35 -0
  254. package/dist/adapters/tron/chains.js.map +1 -0
  255. package/dist/adapters/tron/codec.d.ts +10 -0
  256. package/dist/adapters/tron/codec.js +322 -0
  257. package/dist/adapters/tron/codec.js.map +1 -0
  258. package/dist/adapters/tron/decode.d.ts +52 -0
  259. package/dist/adapters/tron/decode.js +280 -0
  260. package/dist/adapters/tron/decode.js.map +1 -0
  261. package/dist/adapters/tron/driver.d.ts +12 -0
  262. package/dist/adapters/tron/driver.js +106 -0
  263. package/dist/adapters/tron/driver.js.map +1 -0
  264. package/dist/adapters/tron/errors.d.ts +74 -0
  265. package/dist/adapters/tron/errors.js +261 -0
  266. package/dist/adapters/tron/errors.js.map +1 -0
  267. package/dist/adapters/tron/fees.d.ts +49 -0
  268. package/dist/adapters/tron/fees.js +166 -0
  269. package/dist/adapters/tron/fees.js.map +1 -0
  270. package/dist/adapters/tron/http.d.ts +173 -0
  271. package/dist/adapters/tron/http.js +729 -0
  272. package/dist/adapters/tron/http.js.map +1 -0
  273. package/dist/adapters/tron/index.d.ts +16 -0
  274. package/dist/adapters/tron/index.js +15 -0
  275. package/dist/adapters/tron/index.js.map +1 -0
  276. package/dist/adapters/tron/network.d.ts +44 -0
  277. package/dist/adapters/tron/network.js +163 -0
  278. package/dist/adapters/tron/network.js.map +1 -0
  279. package/dist/adapters/tron/plugin.d.ts +17 -0
  280. package/dist/adapters/tron/plugin.js +39 -0
  281. package/dist/adapters/tron/plugin.js.map +1 -0
  282. package/dist/adapters/tron/presets.d.ts +5 -0
  283. package/dist/adapters/tron/presets.js +68 -0
  284. package/dist/adapters/tron/presets.js.map +1 -0
  285. package/dist/adapters/tron/proofs.d.ts +80 -0
  286. package/dist/adapters/tron/proofs.js +371 -0
  287. package/dist/adapters/tron/proofs.js.map +1 -0
  288. package/dist/adapters/tron/protobuf.d.ts +36 -0
  289. package/dist/adapters/tron/protobuf.js +90 -0
  290. package/dist/adapters/tron/protobuf.js.map +1 -0
  291. package/dist/adapters/tron/reader.d.ts +57 -0
  292. package/dist/adapters/tron/reader.js +220 -0
  293. package/dist/adapters/tron/reader.js.map +1 -0
  294. package/dist/adapters/tron/tokens.d.ts +9 -0
  295. package/dist/adapters/tron/tokens.js +14 -0
  296. package/dist/adapters/tron/tokens.js.map +1 -0
  297. package/dist/adapters/tron/types.d.ts +166 -0
  298. package/dist/adapters/tron/types.js +3 -0
  299. package/dist/adapters/tron/types.js.map +1 -0
  300. package/dist/adapters/utxo/address.d.ts +51 -0
  301. package/dist/adapters/utxo/address.js +341 -0
  302. package/dist/adapters/utxo/address.js.map +1 -0
  303. package/dist/adapters/utxo/builder.d.ts +35 -0
  304. package/dist/adapters/utxo/builder.js +380 -0
  305. package/dist/adapters/utxo/builder.js.map +1 -0
  306. package/dist/adapters/utxo/chains.d.ts +17 -0
  307. package/dist/adapters/utxo/chains.js +100 -0
  308. package/dist/adapters/utxo/chains.js.map +1 -0
  309. package/dist/adapters/utxo/codec.d.ts +120 -0
  310. package/dist/adapters/utxo/codec.js +408 -0
  311. package/dist/adapters/utxo/codec.js.map +1 -0
  312. package/dist/adapters/utxo/coinselect.d.ts +48 -0
  313. package/dist/adapters/utxo/coinselect.js +131 -0
  314. package/dist/adapters/utxo/coinselect.js.map +1 -0
  315. package/dist/adapters/utxo/context.d.ts +63 -0
  316. package/dist/adapters/utxo/context.js +125 -0
  317. package/dist/adapters/utxo/context.js.map +1 -0
  318. package/dist/adapters/utxo/decode.d.ts +22 -0
  319. package/dist/adapters/utxo/decode.js +121 -0
  320. package/dist/adapters/utxo/decode.js.map +1 -0
  321. package/dist/adapters/utxo/driver.d.ts +16 -0
  322. package/dist/adapters/utxo/driver.js +79 -0
  323. package/dist/adapters/utxo/driver.js.map +1 -0
  324. package/dist/adapters/utxo/ecc.d.ts +9 -0
  325. package/dist/adapters/utxo/ecc.js +26 -0
  326. package/dist/adapters/utxo/ecc.js.map +1 -0
  327. package/dist/adapters/utxo/errors.d.ts +52 -0
  328. package/dist/adapters/utxo/errors.js +191 -0
  329. package/dist/adapters/utxo/errors.js.map +1 -0
  330. package/dist/adapters/utxo/esplora.d.ts +100 -0
  331. package/dist/adapters/utxo/esplora.js +498 -0
  332. package/dist/adapters/utxo/esplora.js.map +1 -0
  333. package/dist/adapters/utxo/fees.d.ts +41 -0
  334. package/dist/adapters/utxo/fees.js +125 -0
  335. package/dist/adapters/utxo/fees.js.map +1 -0
  336. package/dist/adapters/utxo/index.d.ts +17 -0
  337. package/dist/adapters/utxo/index.js +8 -0
  338. package/dist/adapters/utxo/index.js.map +1 -0
  339. package/dist/adapters/utxo/network.d.ts +50 -0
  340. package/dist/adapters/utxo/network.js +165 -0
  341. package/dist/adapters/utxo/network.js.map +1 -0
  342. package/dist/adapters/utxo/plugin.d.ts +17 -0
  343. package/dist/adapters/utxo/plugin.js +41 -0
  344. package/dist/adapters/utxo/plugin.js.map +1 -0
  345. package/dist/adapters/utxo/presets.d.ts +12 -0
  346. package/dist/adapters/utxo/presets.js +47 -0
  347. package/dist/adapters/utxo/presets.js.map +1 -0
  348. package/dist/adapters/utxo/preview.d.ts +3 -0
  349. package/dist/adapters/utxo/preview.js +65 -0
  350. package/dist/adapters/utxo/preview.js.map +1 -0
  351. package/dist/adapters/utxo/proofs.d.ts +66 -0
  352. package/dist/adapters/utxo/proofs.js +469 -0
  353. package/dist/adapters/utxo/proofs.js.map +1 -0
  354. package/dist/adapters/utxo/rawblock.d.ts +46 -0
  355. package/dist/adapters/utxo/rawblock.js +159 -0
  356. package/dist/adapters/utxo/rawblock.js.map +1 -0
  357. package/dist/adapters/utxo/rawtx.d.ts +73 -0
  358. package/dist/adapters/utxo/rawtx.js +264 -0
  359. package/dist/adapters/utxo/rawtx.js.map +1 -0
  360. package/dist/adapters/utxo/reader.d.ts +36 -0
  361. package/dist/adapters/utxo/reader.js +265 -0
  362. package/dist/adapters/utxo/reader.js.map +1 -0
  363. package/dist/adapters/utxo/sdk.d.ts +18 -0
  364. package/dist/adapters/utxo/sdk.js +17 -0
  365. package/dist/adapters/utxo/sdk.js.map +1 -0
  366. package/dist/adapters/utxo/signed-psbt.d.ts +36 -0
  367. package/dist/adapters/utxo/signed-psbt.js +428 -0
  368. package/dist/adapters/utxo/signed-psbt.js.map +1 -0
  369. package/dist/adapters/utxo/spend.d.ts +59 -0
  370. package/dist/adapters/utxo/spend.js +230 -0
  371. package/dist/adapters/utxo/spend.js.map +1 -0
  372. package/dist/adapters/utxo/types.d.ts +167 -0
  373. package/dist/adapters/utxo/types.js +3 -0
  374. package/dist/adapters/utxo/types.js.map +1 -0
  375. package/dist/core/assets/service.d.ts +18 -0
  376. package/dist/core/assets/service.js +69 -0
  377. package/dist/core/assets/service.js.map +1 -0
  378. package/dist/core/blockchain/default-ref.d.ts +4 -0
  379. package/dist/core/blockchain/default-ref.js +16 -0
  380. package/dist/core/blockchain/default-ref.js.map +1 -0
  381. package/dist/core/blockchain/handle.d.ts +179 -0
  382. package/dist/core/blockchain/handle.js +579 -0
  383. package/dist/core/blockchain/handle.js.map +1 -0
  384. package/dist/core/blockchain/internal.d.ts +19 -0
  385. package/dist/core/blockchain/internal.js +16 -0
  386. package/dist/core/blockchain/internal.js.map +1 -0
  387. package/dist/core/blockchain/mapping.d.ts +22 -0
  388. package/dist/core/blockchain/mapping.js +136 -0
  389. package/dist/core/blockchain/mapping.js.map +1 -0
  390. package/dist/core/config/env.d.ts +8 -0
  391. package/dist/core/config/env.js +60 -0
  392. package/dist/core/config/env.js.map +1 -0
  393. package/dist/core/config/merge.d.ts +26 -0
  394. package/dist/core/config/merge.js +144 -0
  395. package/dist/core/config/merge.js.map +1 -0
  396. package/dist/core/config/resolve.d.ts +12 -0
  397. package/dist/core/config/resolve.js +251 -0
  398. package/dist/core/config/resolve.js.map +1 -0
  399. package/dist/core/config/types.d.ts +180 -0
  400. package/dist/core/config/types.js +3 -0
  401. package/dist/core/config/types.js.map +1 -0
  402. package/dist/core/container/builtins.d.ts +4 -0
  403. package/dist/core/container/builtins.js +13 -0
  404. package/dist/core/container/builtins.js.map +1 -0
  405. package/dist/core/container/container.d.ts +62 -0
  406. package/dist/core/container/container.js +500 -0
  407. package/dist/core/container/container.js.map +1 -0
  408. package/dist/core/container/default.d.ts +15 -0
  409. package/dist/core/container/default.js +70 -0
  410. package/dist/core/container/default.js.map +1 -0
  411. package/dist/core/container/internals.d.ts +54 -0
  412. package/dist/core/container/internals.js +21 -0
  413. package/dist/core/container/internals.js.map +1 -0
  414. package/dist/core/container/pool.d.ts +27 -0
  415. package/dist/core/container/pool.js +77 -0
  416. package/dist/core/container/pool.js.map +1 -0
  417. package/dist/core/driver/types.d.ts +379 -0
  418. package/dist/core/driver/types.js +3 -0
  419. package/dist/core/driver/types.js.map +1 -0
  420. package/dist/core/errors/codes.d.ts +163 -0
  421. package/dist/core/errors/codes.js +53 -0
  422. package/dist/core/errors/codes.js.map +1 -0
  423. package/dist/core/errors/error.d.ts +66 -0
  424. package/dist/core/errors/error.js +129 -0
  425. package/dist/core/errors/error.js.map +1 -0
  426. package/dist/core/events/bus.d.ts +12 -0
  427. package/dist/core/events/bus.js +46 -0
  428. package/dist/core/events/bus.js.map +1 -0
  429. package/dist/core/events/logger.d.ts +13 -0
  430. package/dist/core/events/logger.js +42 -0
  431. package/dist/core/events/logger.js.map +1 -0
  432. package/dist/core/events/types.d.ts +131 -0
  433. package/dist/core/events/types.js +3 -0
  434. package/dist/core/events/types.js.map +1 -0
  435. package/dist/core/lifecycle/engine-rules.d.ts +106 -0
  436. package/dist/core/lifecycle/engine-rules.js +267 -0
  437. package/dist/core/lifecycle/engine-rules.js.map +1 -0
  438. package/dist/core/lifecycle/engine.d.ts +502 -0
  439. package/dist/core/lifecycle/engine.js +1750 -0
  440. package/dist/core/lifecycle/engine.js.map +1 -0
  441. package/dist/core/lifecycle/evaluate.d.ts +19 -0
  442. package/dist/core/lifecycle/evaluate.js +77 -0
  443. package/dist/core/lifecycle/evaluate.js.map +1 -0
  444. package/dist/core/lifecycle/intent.d.ts +11 -0
  445. package/dist/core/lifecycle/intent.js +88 -0
  446. package/dist/core/lifecycle/intent.js.map +1 -0
  447. package/dist/core/lifecycle/monitor.d.ts +138 -0
  448. package/dist/core/lifecycle/monitor.js +616 -0
  449. package/dist/core/lifecycle/monitor.js.map +1 -0
  450. package/dist/core/lifecycle/observations.d.ts +17 -0
  451. package/dist/core/lifecycle/observations.js +59 -0
  452. package/dist/core/lifecycle/observations.js.map +1 -0
  453. package/dist/core/lifecycle/reconcile.d.ts +58 -0
  454. package/dist/core/lifecycle/reconcile.js +112 -0
  455. package/dist/core/lifecycle/reconcile.js.map +1 -0
  456. package/dist/core/lifecycle/views.d.ts +49 -0
  457. package/dist/core/lifecycle/views.js +57 -0
  458. package/dist/core/lifecycle/views.js.map +1 -0
  459. package/dist/core/lifecycle/workers.d.ts +88 -0
  460. package/dist/core/lifecycle/workers.js +347 -0
  461. package/dist/core/lifecycle/workers.js.map +1 -0
  462. package/dist/core/model/address.d.ts +32 -0
  463. package/dist/core/model/address.js +43 -0
  464. package/dist/core/model/address.js.map +1 -0
  465. package/dist/core/model/amount.d.ts +25 -0
  466. package/dist/core/model/amount.js +102 -0
  467. package/dist/core/model/amount.js.map +1 -0
  468. package/dist/core/model/asset.d.ts +28 -0
  469. package/dist/core/model/asset.js +47 -0
  470. package/dist/core/model/asset.js.map +1 -0
  471. package/dist/core/model/capability.d.ts +3 -0
  472. package/dist/core/model/capability.js +18 -0
  473. package/dist/core/model/capability.js.map +1 -0
  474. package/dist/core/model/chain.d.ts +63 -0
  475. package/dist/core/model/chain.js +8 -0
  476. package/dist/core/model/chain.js.map +1 -0
  477. package/dist/core/model/fee.d.ts +36 -0
  478. package/dist/core/model/fee.js +17 -0
  479. package/dist/core/model/fee.js.map +1 -0
  480. package/dist/core/model/ids.d.ts +38 -0
  481. package/dist/core/model/ids.js +14 -0
  482. package/dist/core/model/ids.js.map +1 -0
  483. package/dist/core/model/intent.d.ts +63 -0
  484. package/dist/core/model/intent.js +81 -0
  485. package/dist/core/model/intent.js.map +1 -0
  486. package/dist/core/model/ordering.d.ts +28 -0
  487. package/dist/core/model/ordering.js +29 -0
  488. package/dist/core/model/ordering.js.map +1 -0
  489. package/dist/core/model/transaction.d.ts +123 -0
  490. package/dist/{type/lib-types.js → core/model/transaction.js} +1 -1
  491. package/dist/core/model/transaction.js.map +1 -0
  492. package/dist/core/observe/scanner.d.ts +135 -0
  493. package/dist/core/observe/scanner.js +358 -0
  494. package/dist/core/observe/scanner.js.map +1 -0
  495. package/dist/core/ordering/reservations.d.ts +16 -0
  496. package/dist/core/ordering/reservations.js +53 -0
  497. package/dist/core/ordering/reservations.js.map +1 -0
  498. package/dist/core/ordering/sequence.d.ts +61 -0
  499. package/dist/core/ordering/sequence.js +155 -0
  500. package/dist/core/ordering/sequence.js.map +1 -0
  501. package/dist/core/registry/adapters.d.ts +10 -0
  502. package/dist/core/registry/adapters.js +56 -0
  503. package/dist/core/registry/adapters.js.map +1 -0
  504. package/dist/core/registry/assets.d.ts +18 -0
  505. package/dist/core/registry/assets.js +90 -0
  506. package/dist/core/registry/assets.js.map +1 -0
  507. package/dist/core/registry/chains.d.ts +10 -0
  508. package/dist/core/registry/chains.js +80 -0
  509. package/dist/core/registry/chains.js.map +1 -0
  510. package/dist/core/registry/plugin.d.ts +41 -0
  511. package/dist/core/registry/plugin.js +109 -0
  512. package/dist/core/registry/plugin.js.map +1 -0
  513. package/dist/core/registry/providers.d.ts +31 -0
  514. package/dist/core/registry/providers.js +43 -0
  515. package/dist/core/registry/providers.js.map +1 -0
  516. package/dist/core/registry/schemes.d.ts +30 -0
  517. package/dist/core/registry/schemes.js +84 -0
  518. package/dist/core/registry/schemes.js.map +1 -0
  519. package/dist/core/secret/fragments.d.ts +33 -0
  520. package/dist/core/secret/fragments.js +110 -0
  521. package/dist/core/secret/fragments.js.map +1 -0
  522. package/dist/core/secret/redact.d.ts +10 -0
  523. package/dist/core/secret/redact.js +110 -0
  524. package/dist/core/secret/redact.js.map +1 -0
  525. package/dist/core/secret/secret.d.ts +14 -0
  526. package/dist/core/secret/secret.js +42 -0
  527. package/dist/core/secret/secret.js.map +1 -0
  528. package/dist/core/signing/callback.d.ts +10 -0
  529. package/dist/core/signing/callback.js +22 -0
  530. package/dist/core/signing/callback.js.map +1 -0
  531. package/dist/core/signing/guard.d.ts +18 -0
  532. package/dist/core/signing/guard.js +72 -0
  533. package/dist/core/signing/guard.js.map +1 -0
  534. package/dist/core/signing/hd.d.ts +36 -0
  535. package/dist/core/signing/hd.js +167 -0
  536. package/dist/core/signing/hd.js.map +1 -0
  537. package/dist/core/signing/local.d.ts +48 -0
  538. package/dist/core/signing/local.js +190 -0
  539. package/dist/core/signing/local.js.map +1 -0
  540. package/dist/core/signing/orchestrator.d.ts +40 -0
  541. package/dist/core/signing/orchestrator.js +300 -0
  542. package/dist/core/signing/orchestrator.js.map +1 -0
  543. package/dist/core/signing/types.d.ts +64 -0
  544. package/dist/core/signing/types.js +3 -0
  545. package/dist/core/signing/types.js.map +1 -0
  546. package/dist/core/signing/wallet.d.ts +48 -0
  547. package/dist/core/signing/wallet.js +161 -0
  548. package/dist/core/signing/wallet.js.map +1 -0
  549. package/dist/core/store/clone.d.ts +25 -0
  550. package/dist/core/store/clone.js +71 -0
  551. package/dist/core/store/clone.js.map +1 -0
  552. package/dist/core/store/format.d.ts +20 -0
  553. package/dist/core/store/format.js +86 -0
  554. package/dist/core/store/format.js.map +1 -0
  555. package/dist/core/store/memory.d.ts +38 -0
  556. package/dist/core/store/memory.js +325 -0
  557. package/dist/core/store/memory.js.map +1 -0
  558. package/dist/core/store/types.d.ts +258 -0
  559. package/dist/core/store/types.js +119 -0
  560. package/dist/core/store/types.js.map +1 -0
  561. package/dist/core/transport/backoff.d.ts +8 -0
  562. package/dist/core/transport/backoff.js +27 -0
  563. package/dist/core/transport/backoff.js.map +1 -0
  564. package/dist/core/transport/circuit.d.ts +25 -0
  565. package/dist/core/transport/circuit.js +61 -0
  566. package/dist/core/transport/circuit.js.map +1 -0
  567. package/dist/core/transport/http-transport.d.ts +30 -0
  568. package/dist/core/transport/http-transport.js +1703 -0
  569. package/dist/core/transport/http-transport.js.map +1 -0
  570. package/dist/core/transport/rate-limit.d.ts +27 -0
  571. package/dist/core/transport/rate-limit.js +78 -0
  572. package/dist/core/transport/rate-limit.js.map +1 -0
  573. package/dist/core/transport/stale-view.d.ts +11 -0
  574. package/dist/core/transport/stale-view.js +17 -0
  575. package/dist/core/transport/stale-view.js.map +1 -0
  576. package/dist/core/transport/types.d.ts +159 -0
  577. package/dist/core/transport/types.js +6 -0
  578. package/dist/core/transport/types.js.map +1 -0
  579. package/dist/core/util/bytes.d.ts +9 -0
  580. package/dist/core/util/bytes.js +40 -0
  581. package/dist/core/util/bytes.js.map +1 -0
  582. package/dist/core/util/clock.d.ts +6 -0
  583. package/dist/core/util/clock.js +26 -0
  584. package/dist/core/util/clock.js.map +1 -0
  585. package/dist/core/util/freeze.d.ts +8 -0
  586. package/dist/core/util/freeze.js +31 -0
  587. package/dist/core/util/freeze.js.map +1 -0
  588. package/dist/core/util/json.d.ts +35 -0
  589. package/dist/core/util/json.js +174 -0
  590. package/dist/core/util/json.js.map +1 -0
  591. package/dist/core/util/names.d.ts +27 -0
  592. package/dist/core/util/names.js +56 -0
  593. package/dist/core/util/names.js.map +1 -0
  594. package/dist/index.d.ts +65 -14
  595. package/dist/index.js +107 -49
  596. package/dist/index.js.map +1 -1
  597. package/dist/native.d.ts +21 -0
  598. package/dist/native.js +44 -0
  599. package/dist/native.js.map +1 -0
  600. package/dist/testing/contracts/api.d.ts +12 -0
  601. package/dist/testing/contracts/api.js +58 -0
  602. package/dist/testing/contracts/api.js.map +1 -0
  603. package/dist/testing/contracts/cursors.d.ts +6 -0
  604. package/dist/testing/contracts/cursors.js +43 -0
  605. package/dist/testing/contracts/cursors.js.map +1 -0
  606. package/dist/testing/contracts/locks.d.ts +10 -0
  607. package/dist/testing/contracts/locks.js +63 -0
  608. package/dist/testing/contracts/locks.js.map +1 -0
  609. package/dist/testing/contracts/operations.d.ts +21 -0
  610. package/dist/testing/contracts/operations.js +737 -0
  611. package/dist/testing/contracts/operations.js.map +1 -0
  612. package/dist/testing/contracts/sequences.d.ts +6 -0
  613. package/dist/testing/contracts/sequences.js +68 -0
  614. package/dist/testing/contracts/sequences.js.map +1 -0
  615. package/dist/testing/env.d.ts +68 -0
  616. package/dist/testing/env.js +105 -0
  617. package/dist/testing/env.js.map +1 -0
  618. package/dist/testing/fake-chain.d.ts +118 -0
  619. package/dist/testing/fake-chain.js +536 -0
  620. package/dist/testing/fake-chain.js.map +1 -0
  621. package/dist/testing/fake-clock.d.ts +15 -0
  622. package/dist/testing/fake-clock.js +86 -0
  623. package/dist/testing/fake-clock.js.map +1 -0
  624. package/dist/testing/fake-driver.d.ts +15 -0
  625. package/dist/testing/fake-driver.js +458 -0
  626. package/dist/testing/fake-driver.js.map +1 -0
  627. package/dist/testing/fake-fetch.d.ts +32 -0
  628. package/dist/testing/fake-fetch.js +81 -0
  629. package/dist/testing/fake-fetch.js.map +1 -0
  630. package/dist/testing/fake-plugin.d.ts +30 -0
  631. package/dist/testing/fake-plugin.js +66 -0
  632. package/dist/testing/fake-plugin.js.map +1 -0
  633. package/dist/testing/faulty-store.d.ts +38 -0
  634. package/dist/testing/faulty-store.js +71 -0
  635. package/dist/testing/faulty-store.js.map +1 -0
  636. package/dist/testing/generation.d.ts +60 -0
  637. package/dist/testing/generation.js +252 -0
  638. package/dist/testing/generation.js.map +1 -0
  639. package/dist/testing/index.d.ts +28 -0
  640. package/dist/testing/index.js +51 -0
  641. package/dist/testing/index.js.map +1 -0
  642. package/package.json +198 -45
  643. package/dist/libs/eth/account.d.ts +0 -9
  644. package/dist/libs/eth/account.js +0 -58
  645. package/dist/libs/eth/account.js.map +0 -1
  646. package/dist/libs/eth/contract.d.ts +0 -7
  647. package/dist/libs/eth/contract.js +0 -42
  648. package/dist/libs/eth/contract.js.map +0 -1
  649. package/dist/libs/eth/index.d.ts +0 -24
  650. package/dist/libs/eth/index.js +0 -72
  651. package/dist/libs/eth/index.js.map +0 -1
  652. package/dist/libs/eth/transact.d.ts +0 -7
  653. package/dist/libs/eth/transact.js +0 -26
  654. package/dist/libs/eth/transact.js.map +0 -1
  655. package/dist/libs/index.d.ts +0 -2
  656. package/dist/libs/index.js +0 -19
  657. package/dist/libs/index.js.map +0 -1
  658. package/dist/libs/trx/account.d.ts +0 -9
  659. package/dist/libs/trx/account.js +0 -55
  660. package/dist/libs/trx/account.js.map +0 -1
  661. package/dist/libs/trx/contract.d.ts +0 -7
  662. package/dist/libs/trx/contract.js +0 -27
  663. package/dist/libs/trx/contract.js.map +0 -1
  664. package/dist/libs/trx/index.d.ts +0 -22
  665. package/dist/libs/trx/index.js +0 -64
  666. package/dist/libs/trx/index.js.map +0 -1
  667. package/dist/libs/trx/transact.d.ts +0 -7
  668. package/dist/libs/trx/transact.js +0 -26
  669. package/dist/libs/trx/transact.js.map +0 -1
  670. package/dist/tool/common.d.ts +0 -28
  671. package/dist/tool/common.js +0 -33
  672. package/dist/tool/common.js.map +0 -1
  673. package/dist/tool/eth-tools.d.ts +0 -3
  674. package/dist/tool/eth-tools.js +0 -33
  675. package/dist/tool/eth-tools.js.map +0 -1
  676. package/dist/tool/index.d.ts +0 -5
  677. package/dist/tool/index.js +0 -22
  678. package/dist/tool/index.js.map +0 -1
  679. package/dist/tool/logging.d.ts +0 -3
  680. package/dist/tool/logging.js +0 -11
  681. package/dist/tool/logging.js.map +0 -1
  682. package/dist/tool/options.d.ts +0 -6
  683. package/dist/tool/options.js +0 -41
  684. package/dist/tool/options.js.map +0 -1
  685. package/dist/tool/trx-tools.d.ts +0 -3
  686. package/dist/tool/trx-tools.js +0 -20
  687. package/dist/tool/trx-tools.js.map +0 -1
  688. package/dist/type/account.d.ts +0 -9
  689. package/dist/type/account.js.map +0 -1
  690. package/dist/type/common.d.ts +0 -18
  691. package/dist/type/common.js.map +0 -1
  692. package/dist/type/contract.d.ts +0 -10
  693. package/dist/type/contract.js.map +0 -1
  694. package/dist/type/index.d.ts +0 -5
  695. package/dist/type/index.js +0 -22
  696. package/dist/type/index.js.map +0 -1
  697. package/dist/type/lib-types.d.ts +0 -9
  698. package/dist/type/lib-types.js.map +0 -1
  699. package/dist/type/transact.d.ts +0 -7
  700. package/dist/type/transact.js.map +0 -1
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FakeFetch = void 0;
4
+ exports.hang = hang;
5
+ exports.rpcResult = rpcResult;
6
+ exports.rpcError = rpcError;
7
+ /** Scripted fetch: routes by longest URL prefix; unknown hosts fail like a DNS error. */
8
+ class FakeFetch {
9
+ calls = [];
10
+ #routes = [];
11
+ route(prefix, handler) {
12
+ this.#routes.push({ prefix, handler });
13
+ this.#routes.sort((a, b) => b.prefix.length - a.prefix.length);
14
+ return this;
15
+ }
16
+ callsTo(prefix) {
17
+ return this.calls.filter((call) => call.url.startsWith(prefix));
18
+ }
19
+ fetch = (async (input, init) => {
20
+ const url = new URL(typeof input === 'string' ? input : input instanceof URL ? input.href : input.url);
21
+ const headers = new Headers(init?.headers);
22
+ const rawBody = init?.body;
23
+ const body = typeof rawBody === 'string'
24
+ ? rawBody
25
+ : rawBody instanceof Uint8Array
26
+ ? new TextDecoder().decode(rawBody)
27
+ : undefined;
28
+ const method = init?.method ?? 'GET';
29
+ this.calls.push({
30
+ url: url.href,
31
+ method,
32
+ headers: Object.fromEntries(headers.entries()),
33
+ ...(body !== undefined ? { body } : {}),
34
+ });
35
+ const route = this.#routes.find((r) => url.href.startsWith(r.prefix));
36
+ if (!route) {
37
+ throw new TypeError('fetch failed', {
38
+ cause: new Error(`getaddrinfo ENOTFOUND ${url.host}`),
39
+ });
40
+ }
41
+ const signal = init?.signal ?? undefined;
42
+ if (signal?.aborted)
43
+ throw signal.reason;
44
+ const reply = await route.handler({ url, method, headers, body, json: () => JSON.parse(body ?? 'null') }, signal);
45
+ if (reply instanceof Response)
46
+ return reply;
47
+ const text = reply.text ?? (reply.json === undefined ? '' : JSON.stringify(reply.json));
48
+ return new Response(text, {
49
+ status: reply.status ?? 200,
50
+ headers: {
51
+ 'content-type': reply.text !== undefined ? 'text/plain' : 'application/json',
52
+ 'content-length': String(new TextEncoder().encode(text).length),
53
+ ...reply.headers,
54
+ },
55
+ });
56
+ });
57
+ }
58
+ exports.FakeFetch = FakeFetch;
59
+ /** A reply that never arrives; rejects with the abort reason when the request is aborted. */
60
+ function hang(signal) {
61
+ return new Promise((_resolve, reject) => {
62
+ if (signal?.aborted) {
63
+ reject(signal.reason);
64
+ return;
65
+ }
66
+ signal?.addEventListener('abort', () => reject(signal.reason), { once: true });
67
+ });
68
+ }
69
+ function rpcResult(request, result) {
70
+ return { json: { jsonrpc: '2.0', id: request.json().id, result } };
71
+ }
72
+ function rpcError(request, code, message) {
73
+ return {
74
+ json: {
75
+ jsonrpc: '2.0',
76
+ id: request.json().id,
77
+ error: { code, message },
78
+ },
79
+ };
80
+ }
81
+ //# sourceMappingURL=fake-fetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fake-fetch.js","sourceRoot":"","sources":["../../src/testing/fake-fetch.ts"],"names":[],"mappings":"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","sourcesContent":["export interface FakeRequest {\n readonly url: URL;\n readonly method: string;\n readonly headers: Headers;\n readonly body: string | undefined;\n json<T = Record<string, unknown>>(): T;\n}\n\nexport type FakeReply =\n | Response\n | {\n readonly status?: number;\n readonly json?: unknown;\n readonly text?: string;\n readonly headers?: Readonly<Record<string, string>>;\n };\n\nexport type FakeHandler = (\n request: FakeRequest,\n signal: AbortSignal | undefined,\n) => FakeReply | Promise<FakeReply>;\n\nexport interface RecordedCall {\n readonly url: string;\n readonly method: string;\n readonly headers: Readonly<Record<string, string>>;\n readonly body?: string;\n}\n\n/** Scripted fetch: routes by longest URL prefix; unknown hosts fail like a DNS error. */\nexport class FakeFetch {\n readonly calls: RecordedCall[] = [];\n readonly #routes: { prefix: string; handler: FakeHandler }[] = [];\n\n route(prefix: string, handler: FakeHandler): this {\n this.#routes.push({ prefix, handler });\n this.#routes.sort((a, b) => b.prefix.length - a.prefix.length);\n return this;\n }\n\n callsTo(prefix: string): RecordedCall[] {\n return this.calls.filter((call) => call.url.startsWith(prefix));\n }\n\n readonly fetch = (async (\n input: string | URL | Request,\n init?: RequestInit,\n ): Promise<Response> => {\n const url = new URL(\n typeof input === 'string' ? input : input instanceof URL ? input.href : input.url,\n );\n const headers = new Headers(init?.headers);\n const rawBody = init?.body;\n const body =\n typeof rawBody === 'string'\n ? rawBody\n : rawBody instanceof Uint8Array\n ? new TextDecoder().decode(rawBody)\n : undefined;\n const method = init?.method ?? 'GET';\n this.calls.push({\n url: url.href,\n method,\n headers: Object.fromEntries(headers.entries()),\n ...(body !== undefined ? { body } : {}),\n });\n const route = this.#routes.find((r) => url.href.startsWith(r.prefix));\n if (!route) {\n throw new TypeError('fetch failed', {\n cause: new Error(`getaddrinfo ENOTFOUND ${url.host}`),\n });\n }\n const signal = init?.signal ?? undefined;\n if (signal?.aborted) throw signal.reason;\n const reply = await route.handler(\n { url, method, headers, body, json: <T>() => JSON.parse(body ?? 'null') as T },\n signal,\n );\n if (reply instanceof Response) return reply;\n const text =\n reply.text ?? (reply.json === undefined ? '' : JSON.stringify(reply.json));\n return new Response(text, {\n status: reply.status ?? 200,\n headers: {\n 'content-type': reply.text !== undefined ? 'text/plain' : 'application/json',\n 'content-length': String(new TextEncoder().encode(text).length),\n ...reply.headers,\n },\n });\n }) as typeof fetch;\n}\n\n/** A reply that never arrives; rejects with the abort reason when the request is aborted. */\nexport function hang(signal: AbortSignal | undefined): Promise<never> {\n return new Promise<never>((_resolve, reject) => {\n if (signal?.aborted) {\n reject(signal.reason);\n return;\n }\n signal?.addEventListener('abort', () => reject(signal.reason), { once: true });\n });\n}\n\nexport function rpcResult(request: FakeRequest, result: unknown): FakeReply {\n return { json: { jsonrpc: '2.0', id: request.json<{ id: unknown }>().id, result } };\n}\n\nexport function rpcError(request: FakeRequest, code: number, message: string): FakeReply {\n return {\n json: {\n jsonrpc: '2.0',\n id: request.json<{ id: unknown }>().id,\n error: { code, message },\n },\n };\n}\n"]}
@@ -0,0 +1,30 @@
1
+ import type { AdapterManifest } from '../core/driver/types';
2
+ import type { Plugin } from '../core/registry/plugin';
3
+ import type { FakeExt, FakeNativeClient } from './fake-driver';
4
+ declare module '../index' {
5
+ interface ChainRegistry {
6
+ fakechain: {
7
+ family: 'fake';
8
+ network: 'local';
9
+ };
10
+ fakeexpiry: {
11
+ family: 'fake';
12
+ network: 'local';
13
+ };
14
+ fakeseqno: {
15
+ family: 'fake';
16
+ network: 'local';
17
+ };
18
+ }
19
+ interface FamilyRegistry {
20
+ fake: {
21
+ library: 'fake-sdk';
22
+ ext: FakeExt;
23
+ };
24
+ }
25
+ interface NativeClientMap {
26
+ 'fake-sdk': FakeNativeClient;
27
+ }
28
+ }
29
+ export declare const fakeManifest: AdapterManifest;
30
+ export declare function fakePlugin(): Plugin;
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fakeManifest = void 0;
4
+ exports.fakePlugin = fakePlugin;
5
+ const network = (extra = {}) => ({
6
+ id: 'local',
7
+ identity: 'fake-local',
8
+ testnet: true,
9
+ feeModel: 'fake',
10
+ finality: { kind: 'tag', tag: 'finalized', fallbackConfirmations: 3 },
11
+ defaultConfirmations: 2,
12
+ reorgWindow: 16,
13
+ maxLagBlocks: 2,
14
+ replacement: { minBumpPercent: 10 },
15
+ explorer: {
16
+ tx: 'https://explorer.fake/tx/{id}',
17
+ address: 'https://explorer.fake/address/{address}',
18
+ },
19
+ ...extra,
20
+ });
21
+ const chain = (id, ordering, extra = {}) => ({
22
+ id,
23
+ family: 'fake',
24
+ model: 'account',
25
+ ordering,
26
+ schemes: ['secp256k1-ecdsa'],
27
+ nativeAsset: { symbol: 'FAKE', decimals: 8, name: 'Fake coin' },
28
+ defaultNetwork: 'local',
29
+ networks: { local: network(extra) },
30
+ });
31
+ exports.fakeManifest = {
32
+ family: 'fake',
33
+ library: 'fake-sdk',
34
+ chains: ['fakechain', 'fakeexpiry', 'fakeseqno'],
35
+ capabilities: [
36
+ 'memo',
37
+ 'block-scan',
38
+ 'replace-fee',
39
+ 'cancel',
40
+ 'finality-tag',
41
+ 'hd-public-derivation',
42
+ ],
43
+ peerDependencies: [],
44
+ load: async () => {
45
+ // Mirrors real adapters: the driver module is only loaded on first use.
46
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
47
+ const mod = require('./fake-driver');
48
+ return mod.fakeDriverFactory;
49
+ },
50
+ };
51
+ function fakePlugin() {
52
+ return {
53
+ name: 'fake',
54
+ chains: [
55
+ chain('fakechain', 'nonce'),
56
+ chain('fakeexpiry', 'expiry', {
57
+ capabilities: { add: ['expiry'], remove: ['replace-fee', 'cancel'] },
58
+ }),
59
+ chain('fakeseqno', 'seqno', {
60
+ capabilities: { remove: ['replace-fee', 'cancel'] },
61
+ }),
62
+ ],
63
+ adapters: [exports.fakeManifest],
64
+ };
65
+ }
66
+ //# sourceMappingURL=fake-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fake-plugin.js","sourceRoot":"","sources":["../../src/testing/fake-plugin.ts"],"names":[],"mappings":";;;AA2EA,gCAcC;AAnED,MAAM,OAAO,GAAG,CAAC,QAA8B,EAAE,EAAe,EAAE,CAAC,CAAC;IAClE,EAAE,EAAE,OAAO;IACX,QAAQ,EAAE,YAAY;IACtB,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE,MAAM;IAChB,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,qBAAqB,EAAE,CAAC,EAAE;IACrE,oBAAoB,EAAE,CAAC;IACvB,WAAW,EAAE,EAAE;IACf,YAAY,EAAE,CAAC;IACf,WAAW,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE;IACnC,QAAQ,EAAE;QACR,EAAE,EAAE,+BAA+B;QACnC,OAAO,EAAE,yCAAyC;KACnD;IACD,GAAG,KAAK;CACT,CAAC,CAAC;AAEH,MAAM,KAAK,GAAG,CACZ,EAAU,EACV,QAA+B,EAC/B,QAA8B,EAAE,EACrB,EAAE,CAAC,CAAC;IACf,EAAE;IACF,MAAM,EAAE,MAAM;IACd,KAAK,EAAE,SAAS;IAChB,QAAQ;IACR,OAAO,EAAE,CAAC,iBAAiB,CAAC;IAC5B,WAAW,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE;IAC/D,cAAc,EAAE,OAAO;IACvB,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE;CACpC,CAAC,CAAC;AAEU,QAAA,YAAY,GAAoB;IAC3C,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,UAAU;IACnB,MAAM,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,WAAW,CAAC;IAChD,YAAY,EAAE;QACZ,MAAM;QACN,YAAY;QACZ,aAAa;QACb,QAAQ;QACR,cAAc;QACd,sBAAsB;KACvB;IACD,gBAAgB,EAAE,EAAE;IACpB,IAAI,EAAE,KAAK,IAA4B,EAAE;QACvC,wEAAwE;QACxE,iEAAiE;QACjE,MAAM,GAAG,GAAG,OAAO,CAAC,eAAe,CAAmC,CAAC;QACvE,OAAO,GAAG,CAAC,iBAAiB,CAAC;IAC/B,CAAC;CACF,CAAC;AAEF,SAAgB,UAAU;IACxB,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE;YACN,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC;YAC3B,KAAK,CAAC,YAAY,EAAE,QAAQ,EAAE;gBAC5B,YAAY,EAAE,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC,aAAa,EAAE,QAAQ,CAAC,EAAE;aACrE,CAAC;YACF,KAAK,CAAC,WAAW,EAAE,OAAO,EAAE;gBAC1B,YAAY,EAAE,EAAE,MAAM,EAAE,CAAC,aAAa,EAAE,QAAQ,CAAC,EAAE;aACpD,CAAC;SACH;QACD,QAAQ,EAAE,CAAC,oBAAY,CAAC;KACzB,CAAC;AACJ,CAAC","sourcesContent":["import type { AdapterManifest, DriverFactory } from '../core/driver/types';\nimport type { ChainInfo, NetworkInfo } from '../core/model/chain';\nimport type { Plugin } from '../core/registry/plugin';\nimport type { FakeExt, FakeNativeClient } from './fake-driver';\n\n// Augment the registries through the public entry module, as users do with\n// 'crypto-aio'. Augmenting core/model/ids directly makes a user's own augmentation depend on\n// the order in which the compiler reads files.\ndeclare module '../index' {\n interface ChainRegistry {\n fakechain: { family: 'fake'; network: 'local' };\n fakeexpiry: { family: 'fake'; network: 'local' };\n fakeseqno: { family: 'fake'; network: 'local' };\n }\n interface FamilyRegistry {\n fake: { library: 'fake-sdk'; ext: FakeExt };\n }\n interface NativeClientMap {\n 'fake-sdk': FakeNativeClient;\n }\n}\n\nconst network = (extra: Partial<NetworkInfo> = {}): NetworkInfo => ({\n id: 'local',\n identity: 'fake-local',\n testnet: true,\n feeModel: 'fake',\n finality: { kind: 'tag', tag: 'finalized', fallbackConfirmations: 3 },\n defaultConfirmations: 2,\n reorgWindow: 16,\n maxLagBlocks: 2,\n replacement: { minBumpPercent: 10 },\n explorer: {\n tx: 'https://explorer.fake/tx/{id}',\n address: 'https://explorer.fake/address/{address}',\n },\n ...extra,\n});\n\nconst chain = (\n id: string,\n ordering: ChainInfo['ordering'],\n extra: Partial<NetworkInfo> = {},\n): ChainInfo => ({\n id,\n family: 'fake',\n model: 'account',\n ordering,\n schemes: ['secp256k1-ecdsa'],\n nativeAsset: { symbol: 'FAKE', decimals: 8, name: 'Fake coin' },\n defaultNetwork: 'local',\n networks: { local: network(extra) },\n});\n\nexport const fakeManifest: AdapterManifest = {\n family: 'fake',\n library: 'fake-sdk',\n chains: ['fakechain', 'fakeexpiry', 'fakeseqno'],\n capabilities: [\n 'memo',\n 'block-scan',\n 'replace-fee',\n 'cancel',\n 'finality-tag',\n 'hd-public-derivation',\n ],\n peerDependencies: [],\n load: async (): Promise<DriverFactory> => {\n // Mirrors real adapters: the driver module is only loaded on first use.\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const mod = require('./fake-driver') as typeof import('./fake-driver');\n return mod.fakeDriverFactory;\n },\n};\n\nexport function fakePlugin(): Plugin {\n return {\n name: 'fake',\n chains: [\n chain('fakechain', 'nonce'),\n chain('fakeexpiry', 'expiry', {\n capabilities: { add: ['expiry'], remove: ['replace-fee', 'cancel'] },\n }),\n chain('fakeseqno', 'seqno', {\n capabilities: { remove: ['replace-fee', 'cancel'] },\n }),\n ],\n adapters: [fakeManifest],\n };\n}\n"]}
@@ -0,0 +1,38 @@
1
+ import type { AttemptObservation, AttemptRecord, CreateResult, Fence, NewOperation, OperationFilter, OperationPatch, OperationRecord, OperationStore } from '../core/store/types';
2
+ export declare class CrashError extends Error {
3
+ constructor();
4
+ }
5
+ export interface FaultPoint {
6
+ readonly method: 'create' | 'update' | 'appendAttempt' | 'putObservation';
7
+ /**
8
+ * Receives the method's arguments, which differ by method; defaults to "always".
9
+ * - `create`: `[operation]`
10
+ * - `update`: `[namespace, id, patch, expectedVersion]` (the patch is `args[2]`)
11
+ * - `appendAttempt`: `[namespace, id, attempt, patch]`, without `expectedVersion`, so the
12
+ * patch is `args[3]` and `args[2]` is the Attempt
13
+ * - `putObservation`: `[observation]`
14
+ */
15
+ readonly when?: (args: readonly unknown[]) => boolean;
16
+ /** `before`: the write never happens. `after`: the write happens, then the process "dies". */
17
+ readonly timing: 'before' | 'after';
18
+ }
19
+ /** Wraps a store and throws `CrashError` at chosen write boundaries (one-shot faults). */
20
+ export declare class FaultyOperationStore implements OperationStore {
21
+ #private;
22
+ private readonly inner;
23
+ /** The inner store's `purge`, when it has one. */
24
+ readonly purge?: (filter: OperationFilter) => Promise<number>;
25
+ constructor(inner: OperationStore);
26
+ crashOn(fault: FaultPoint): void;
27
+ create(operation: NewOperation): Promise<CreateResult>;
28
+ get(namespace: string, id: string): Promise<OperationRecord | null>;
29
+ getByKey(namespace: string, key: string): Promise<OperationRecord | null>;
30
+ findByRef(namespace: string, ref: string): Promise<OperationRecord | null>;
31
+ update(namespace: string, id: string, patch: OperationPatch, expectedVersion: number, fence?: Fence): Promise<OperationRecord>;
32
+ appendAttempt(namespace: string, id: string, attempt: AttemptRecord, patch: OperationPatch, expectedVersion: number, fence?: Fence): Promise<OperationRecord>;
33
+ getObservation(attemptId: string): Promise<AttemptObservation | null>;
34
+ putObservation(observation: Omit<AttemptObservation, 'version'>, expectedVersion: number | null): Promise<AttemptObservation>;
35
+ claimDue(namespace: string, workerId: string, now: number, leaseMs: number, limit: number): Promise<OperationRecord[]>;
36
+ releaseClaim(namespace: string, id: string, fence: Fence): Promise<void>;
37
+ list(filter: OperationFilter): Promise<OperationRecord[]>;
38
+ }
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FaultyOperationStore = exports.CrashError = void 0;
4
+ class CrashError extends Error {
5
+ constructor() {
6
+ super('injected crash');
7
+ this.name = 'CrashError';
8
+ }
9
+ }
10
+ exports.CrashError = CrashError;
11
+ /** Wraps a store and throws `CrashError` at chosen write boundaries (one-shot faults). */
12
+ class FaultyOperationStore {
13
+ inner;
14
+ #faults = [];
15
+ /** The inner store's `purge`, when it has one. */
16
+ purge;
17
+ constructor(inner) {
18
+ this.inner = inner;
19
+ const purge = inner.purge?.bind(inner);
20
+ if (purge)
21
+ this.purge = (filter) => purge(filter);
22
+ }
23
+ crashOn(fault) {
24
+ this.#faults.push(fault);
25
+ }
26
+ create(operation) {
27
+ return this.#guard('create', [operation], () => this.inner.create(operation));
28
+ }
29
+ get(namespace, id) {
30
+ return this.inner.get(namespace, id);
31
+ }
32
+ getByKey(namespace, key) {
33
+ return this.inner.getByKey(namespace, key);
34
+ }
35
+ findByRef(namespace, ref) {
36
+ return this.inner.findByRef(namespace, ref);
37
+ }
38
+ update(namespace, id, patch, expectedVersion, fence) {
39
+ return this.#guard('update', [namespace, id, patch, expectedVersion], () => this.inner.update(namespace, id, patch, expectedVersion, fence));
40
+ }
41
+ appendAttempt(namespace, id, attempt, patch, expectedVersion, fence) {
42
+ return this.#guard('appendAttempt', [namespace, id, attempt, patch], () => this.inner.appendAttempt(namespace, id, attempt, patch, expectedVersion, fence));
43
+ }
44
+ getObservation(attemptId) {
45
+ return this.inner.getObservation(attemptId);
46
+ }
47
+ putObservation(observation, expectedVersion) {
48
+ return this.#guard('putObservation', [observation], () => this.inner.putObservation(observation, expectedVersion));
49
+ }
50
+ claimDue(namespace, workerId, now, leaseMs, limit) {
51
+ return this.inner.claimDue(namespace, workerId, now, leaseMs, limit);
52
+ }
53
+ releaseClaim(namespace, id, fence) {
54
+ return this.inner.releaseClaim(namespace, id, fence);
55
+ }
56
+ list(filter) {
57
+ return this.inner.list(filter);
58
+ }
59
+ async #guard(method, args, run) {
60
+ const index = this.#faults.findIndex((f) => f.method === method && (f.when?.(args) ?? true));
61
+ if (index < 0)
62
+ return run();
63
+ const [fault] = this.#faults.splice(index, 1);
64
+ if (fault?.timing === 'before')
65
+ throw new CrashError();
66
+ await run();
67
+ throw new CrashError();
68
+ }
69
+ }
70
+ exports.FaultyOperationStore = FaultyOperationStore;
71
+ //# sourceMappingURL=faulty-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"faulty-store.js","sourceRoot":"","sources":["../../src/testing/faulty-store.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n AttemptObservation,\n AttemptRecord,\n CreateResult,\n Fence,\n NewOperation,\n OperationFilter,\n OperationPatch,\n OperationRecord,\n OperationStore,\n} from '../core/store/types';\n\nexport class CrashError extends Error {\n constructor() {\n super('injected crash');\n this.name = 'CrashError';\n }\n}\n\nexport interface FaultPoint {\n readonly method: 'create' | 'update' | 'appendAttempt' | 'putObservation';\n /**\n * Receives the method's arguments, which differ by method; defaults to \"always\".\n * - `create`: `[operation]`\n * - `update`: `[namespace, id, patch, expectedVersion]` (the patch is `args[2]`)\n * - `appendAttempt`: `[namespace, id, attempt, patch]`, without `expectedVersion`, so the\n * patch is `args[3]` and `args[2]` is the Attempt\n * - `putObservation`: `[observation]`\n */\n readonly when?: (args: readonly unknown[]) => boolean;\n /** `before`: the write never happens. `after`: the write happens, then the process \"dies\". */\n readonly timing: 'before' | 'after';\n}\n\n/** Wraps a store and throws `CrashError` at chosen write boundaries (one-shot faults). */\nexport class FaultyOperationStore implements OperationStore {\n readonly #faults: FaultPoint[] = [];\n\n /** The inner store's `purge`, when it has one. */\n readonly purge?: (filter: OperationFilter) => Promise<number>;\n\n constructor(private readonly inner: OperationStore) {\n const purge = inner.purge?.bind(inner);\n if (purge) this.purge = (filter) => purge(filter);\n }\n\n crashOn(fault: FaultPoint): void {\n this.#faults.push(fault);\n }\n\n create(operation: NewOperation): Promise<CreateResult> {\n return this.#guard('create', [operation], () => this.inner.create(operation));\n }\n\n get(namespace: string, id: string): Promise<OperationRecord | null> {\n return this.inner.get(namespace, id);\n }\n\n getByKey(namespace: string, key: string): Promise<OperationRecord | null> {\n return this.inner.getByKey(namespace, key);\n }\n\n findByRef(namespace: string, ref: string): Promise<OperationRecord | null> {\n return this.inner.findByRef(namespace, ref);\n }\n\n update(\n namespace: string,\n id: string,\n patch: OperationPatch,\n expectedVersion: number,\n fence?: Fence,\n ): Promise<OperationRecord> {\n return this.#guard('update', [namespace, id, patch, expectedVersion], () =>\n this.inner.update(namespace, id, patch, expectedVersion, fence),\n );\n }\n\n appendAttempt(\n namespace: string,\n id: string,\n attempt: AttemptRecord,\n patch: OperationPatch,\n expectedVersion: number,\n fence?: Fence,\n ): Promise<OperationRecord> {\n return this.#guard('appendAttempt', [namespace, id, attempt, patch], () =>\n this.inner.appendAttempt(namespace, id, attempt, patch, expectedVersion, fence),\n );\n }\n\n getObservation(attemptId: string): Promise<AttemptObservation | null> {\n return this.inner.getObservation(attemptId);\n }\n\n putObservation(\n observation: Omit<AttemptObservation, 'version'>,\n expectedVersion: number | null,\n ): Promise<AttemptObservation> {\n return this.#guard('putObservation', [observation], () =>\n this.inner.putObservation(observation, expectedVersion),\n );\n }\n\n claimDue(\n namespace: string,\n workerId: string,\n now: number,\n leaseMs: number,\n limit: number,\n ): Promise<OperationRecord[]> {\n return this.inner.claimDue(namespace, workerId, now, leaseMs, limit);\n }\n\n releaseClaim(namespace: string, id: string, fence: Fence): Promise<void> {\n return this.inner.releaseClaim(namespace, id, fence);\n }\n\n list(filter: OperationFilter): Promise<OperationRecord[]> {\n return this.inner.list(filter);\n }\n\n async #guard<T>(\n method: FaultPoint['method'],\n args: readonly unknown[],\n run: () => Promise<T>,\n ): Promise<T> {\n const index = this.#faults.findIndex(\n (f) => f.method === method && (f.when?.(args) ?? true),\n );\n if (index < 0) return run();\n const [fault] = this.#faults.splice(index, 1);\n if (fault?.timing === 'before') throw new CrashError();\n await run();\n throw new CrashError();\n }\n}\n"]}
@@ -0,0 +1,60 @@
1
+ import type { Signer } from '../core/signing/types';
2
+ import type { Stores } from '../core/store/types';
3
+ import type { Clock } from '../core/util/clock';
4
+ import type { FakeClock } from './fake-clock';
5
+ /**
6
+ * Flipped to `false` by `restart({ killPrevious: true })`; every wrapper built for this
7
+ * generation (clock, fetch, the fetched Response's body readers, the shared signer, the store
8
+ * proxies) checks it both when invoked and when the real call underneath settles, so a dead
9
+ * generation can neither start nor finish any of them.
10
+ *
11
+ * The fence only becomes complete once the microtask queue has drained past the point
12
+ * where `generation.alive` was flipped. Code from the old generation that was already past a
13
+ * *settled* fenced call (holding a plain value, not awaiting anything) keeps running
14
+ * synchronously — nothing here can interrupt a synchronous continuation mid-expression — right
15
+ * up until it reaches its *next* fenced call, which then never lets it proceed further (or, for
16
+ * a synchronous wrapped call, throws instead — see `generationProxy`).
17
+ */
18
+ export interface Generation {
19
+ alive: boolean;
20
+ }
21
+ /**
22
+ * Fences one generation's view of the parts every generation shares. A family env builds
23
+ * each container from the result, never from `parts` directly, and keeps `generation` so a
24
+ * restart can kill it:
25
+ *
26
+ * ```ts
27
+ * const generation = { alive: true };
28
+ * const fenced = fenceGeneration(
29
+ * { clock, fetch: node.fetch.fetch, stores, signers: { [signer.id]: signer } },
30
+ * generation,
31
+ * );
32
+ * const aio = new CryptoAio({
33
+ * clock: fenced.clock,
34
+ * stores: fenced.stores,
35
+ * signers: fenced.signers,
36
+ * transport: { fetch: fenced.fetch },
37
+ * // ...providers, wallets, chains
38
+ * });
39
+ * // restart({ killPrevious: true }): kill this generation, then fence a new one over the
40
+ * // same parts (same clock, node, stores and signer objects).
41
+ * generation.alive = false;
42
+ * ```
43
+ *
44
+ * Once `generation.alive` is `false`, every clock sleep, fetch (and body read), store call
45
+ * and signer call of this generation, in flight or issued later, never settles; a
46
+ * synchronous port method throws `StateError`. `clock.now()` stays live. Keep the raw
47
+ * `clock` for driving time (`drive`, `advance`, `pending`) and the raw `stores` for test
48
+ * assertions: they belong to no generation.
49
+ */
50
+ export declare function fenceGeneration(parts: {
51
+ readonly clock: FakeClock;
52
+ readonly fetch: typeof fetch;
53
+ readonly stores: Stores;
54
+ readonly signers: Readonly<Record<string, Signer>>;
55
+ }, generation: Generation): {
56
+ readonly clock: Clock;
57
+ readonly fetch: typeof fetch;
58
+ readonly stores: Stores;
59
+ readonly signers: Readonly<Record<string, Signer>>;
60
+ };
@@ -0,0 +1,252 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fenceGeneration = fenceGeneration;
4
+ /**
5
+ * The restart generation fence: `restart({ killPrevious: true })` simulates a
6
+ * process that died, so nothing the old generation started may make further progress or
7
+ * write to shared state. `createFakeEnv` uses it, and so does every family's end-to-end env
8
+ * built on its own scripted node. Test-only: not part of `crypto-aio/testing`.
9
+ */
10
+ const error_1 = require("../core/errors/error");
11
+ /** Runs `start` unless the generation is already dead, and settles like its result only while
12
+ * the generation is still alive; otherwise the returned promise never settles. */
13
+ function fenced(generation, start) {
14
+ return new Promise((resolve, reject) => {
15
+ if (!generation.alive)
16
+ return; // never settles: already dead at call time.
17
+ Promise.resolve(start()).then((value) => {
18
+ if (generation.alive)
19
+ resolve(value); // else: never settles, dead before it settled.
20
+ }, (error) => {
21
+ if (generation.alive)
22
+ reject(error);
23
+ });
24
+ });
25
+ }
26
+ /** Per-generation clock: `now()` stays live (harmless to read); `sleep()` is fenced. */
27
+ function generationClock(shared, generation) {
28
+ return {
29
+ now: () => shared.now(),
30
+ sleep: (ms, signal) => fenced(generation, () => shared.sleep(ms, signal)),
31
+ };
32
+ }
33
+ /** Body-reading methods fenced on a fetched Response (`bytes` only where the runtime
34
+ * has it). `clone()` and `body` are fenced separately; everything else (status, ok, headers,
35
+ * ...) passes straight through. */
36
+ const FENCED_RESPONSE_READERS = new Set([
37
+ 'text',
38
+ 'json',
39
+ 'arrayBuffer',
40
+ 'blob',
41
+ 'bytes',
42
+ 'formData',
43
+ ]);
44
+ /**
45
+ * A stand-in for `response.body` whose every chunk is pulled from the real body through
46
+ * the fence, so a `read()` (via `getReader()`, async iteration, `pipeTo`, `tee`, ...) never
47
+ * settles once the generation is dead. `highWaterMark: 0` means nothing is pulled — and the
48
+ * real body isn't even locked — until a consumer actually reads, so merely touching `.body`
49
+ * (e.g. `if (res.body) await res.text()`) still leaves the real body readable by `text()`.
50
+ */
51
+ function generationBody(body, generation) {
52
+ let reader;
53
+ return new ReadableStream({
54
+ pull: (controller) => fenced(generation, () => (reader ??= body.getReader()).read()).then((chunk) => {
55
+ if (chunk.done)
56
+ controller.close();
57
+ else
58
+ controller.enqueue(chunk.value);
59
+ }),
60
+ cancel: (reason) => (reader ? reader.cancel(reason) : body.cancel(reason)),
61
+ }, { highWaterMark: 0 });
62
+ }
63
+ /**
64
+ * Wraps a fetched Response so reading its body is fenced too — once a generation is
65
+ * dead, every body reader (`text()`, `json()`, `blob()`, ...), a read of the `body` stream,
66
+ * and the same on any `clone()` of it (itself a fenced Response) must never settle either,
67
+ * exactly like the fetch call that produced it (a caller may have obtained the Response while
68
+ * still alive and only read its body afterwards). Every other property or method is bound to
69
+ * the real `target` (never invoked through the Proxy itself), so a native accessor like
70
+ * `.ok`/`.status` still sees a genuine `Response` as `this`.
71
+ */
72
+ function generationResponse(response, generation) {
73
+ let body;
74
+ return new Proxy(response, {
75
+ get(target, prop) {
76
+ if (prop === 'body') {
77
+ // Memoized: like the real getter, every access returns the same stream.
78
+ if (body === undefined)
79
+ body = target.body === null ? null : generationBody(target.body, generation);
80
+ return body;
81
+ }
82
+ const value = Reflect.get(target, prop); // no receiver: see generationProxy.
83
+ if (typeof value !== 'function')
84
+ return value;
85
+ const bound = value.bind(target);
86
+ if (prop === 'clone')
87
+ return () => generationResponse(target.clone(), generation);
88
+ if (typeof prop !== 'string' || !FENCED_RESPONSE_READERS.has(prop))
89
+ return bound;
90
+ return (...args) => fenced(generation, () => bound(...args));
91
+ },
92
+ });
93
+ }
94
+ /** Per-generation fetch, fenced the same way as the clock; the Response it resolves with is
95
+ * itself fenced, so a body read issued on it after the kill never settles either. */
96
+ function generationFetch(shared, generation) {
97
+ return ((...args) => fenced(generation, () => shared(...args).then((response) => generationResponse(response, generation))));
98
+ }
99
+ /**
100
+ * Every async method of the `Stores` ports and of `Signer`. Exhaustive at compile time (a
101
+ * port method added later fails the build until it's listed here), and independent of how an
102
+ * implementation spells the method — a non-`async` function returning a Promise counts too.
103
+ */
104
+ const ASYNC_PORT_METHODS = {
105
+ create: true,
106
+ get: true,
107
+ getByKey: true,
108
+ findByRef: true,
109
+ update: true,
110
+ appendAttempt: true,
111
+ getObservation: true,
112
+ putObservation: true,
113
+ claimDue: true,
114
+ releaseClaim: true,
115
+ list: true,
116
+ purge: true,
117
+ acquire: true,
118
+ renew: true,
119
+ release: true,
120
+ put: true,
121
+ getPublicKey: true,
122
+ sign: true,
123
+ cancelRequest: true,
124
+ exportKey: true,
125
+ };
126
+ /**
127
+ * Diagnostics that must keep working on a dead proxy (`JSON.stringify`, `util.inspect`).
128
+ */
129
+ const PASSTHROUGH = new Set([
130
+ 'toJSON',
131
+ 'inspect',
132
+ Symbol.for('nodejs.util.inspect.custom'),
133
+ ]);
134
+ function isAsyncMethod(prop, fn) {
135
+ return ((typeof prop === 'string' && Object.hasOwn(ASYNC_PORT_METHODS, prop)) ||
136
+ Object.prototype.toString.call(fn) === '[object AsyncFunction]');
137
+ }
138
+ /**
139
+ * Wraps every method of `target` so a generation's death fences it, and generalizes the
140
+ * old `generationStore` to any shared object with async methods (`Stores`, `Signer`). An async
141
+ * method (a port method named in `ASYNC_PORT_METHODS`, or a native `async` function) is
142
+ * fenced the way `sleep`/`fetch` are: once the generation is dead it never settles and never
143
+ * throws, whether it was already in flight or is only called afterwards. A genuinely
144
+ * synchronous method throws `StateError` when called on an already-dead generation — there's
145
+ * no "never resolve" for a call that must return synchronously. `toJSON`/`inspect` pass
146
+ * through unfenced.
147
+ */
148
+ function generationProxy(target, generation) {
149
+ // The Proxy wraps an empty, extensible stand-in, never `target` itself: a frozen target
150
+ // (e.g. a `callbackSigner`) has non-configurable read-only properties, and the Proxy
151
+ // invariants would then forbid returning the fenced wrapper instead of the real value.
152
+ // Every read is forwarded to the real object; descriptors are reported configurable.
153
+ // Writes are refused loudly: they would otherwise land silently on the stand-in.
154
+ const refuse = (trap) => {
155
+ throw new TypeError(`crypto-aio/testing: '${trap}' is not supported on a fenced object`);
156
+ };
157
+ return new Proxy({}, {
158
+ set: () => refuse('set'),
159
+ defineProperty: () => refuse('defineProperty'),
160
+ deleteProperty: () => refuse('deleteProperty'),
161
+ has: (_stand, prop) => Reflect.has(target, prop),
162
+ ownKeys: () => Reflect.ownKeys(target),
163
+ getPrototypeOf: () => Reflect.getPrototypeOf(target),
164
+ getOwnPropertyDescriptor: (_stand, prop) => {
165
+ const descriptor = Reflect.getOwnPropertyDescriptor(target, prop);
166
+ return descriptor ? { ...descriptor, configurable: true } : undefined;
167
+ },
168
+ get(_stand, prop) {
169
+ // No receiver, so a native/data getter runs with the real target as `this`.
170
+ const value = Reflect.get(target, prop);
171
+ if (typeof value !== 'function')
172
+ return value;
173
+ const fn = value;
174
+ if (PASSTHROUGH.has(prop))
175
+ return fn.bind(target);
176
+ const isAsync = isAsyncMethod(prop, fn);
177
+ return (...args) => {
178
+ if (!generation.alive) {
179
+ // A call issued once the generation is already dead never invokes the real method
180
+ // (no side effect from a dead continuation). An async one just never settles; a
181
+ // synchronous one can't be left "hanging", so it fails fast instead.
182
+ if (isAsync)
183
+ return new Promise(() => undefined);
184
+ throw new error_1.StateError('INVALID_TRANSITION', 'crypto-aio/testing: this generation was killed by restart({ killPrevious: true })');
185
+ }
186
+ const result = fn.apply(target, args);
187
+ const thenable = typeof result === 'object' &&
188
+ result !== null &&
189
+ typeof result.then === 'function';
190
+ if (!thenable)
191
+ return result; // A synchronous result passes straight through.
192
+ return fenced(generation, () => result);
193
+ };
194
+ },
195
+ });
196
+ }
197
+ function generationStores(stores, generation) {
198
+ return {
199
+ operations: generationProxy(stores.operations, generation),
200
+ locks: generationProxy(stores.locks, generation),
201
+ sequences: generationProxy(stores.sequences, generation),
202
+ cursors: generationProxy(stores.cursors, generation),
203
+ };
204
+ }
205
+ /** The shared signer (see the doc comment on `signers` in `assemble`, `env.ts` — it's
206
+ * stateless and never rebuilt across generations) still has its `sign`/`getPublicKey` calls
207
+ * fenced per generation, the same as any other in-flight call; the underlying `Signer`
208
+ * instance is unchanged, just wrapped. */
209
+ function generationSigner(shared, generation) {
210
+ return generationProxy(shared, generation);
211
+ }
212
+ /**
213
+ * Fences one generation's view of the parts every generation shares. A family env builds
214
+ * each container from the result, never from `parts` directly, and keeps `generation` so a
215
+ * restart can kill it:
216
+ *
217
+ * ```ts
218
+ * const generation = { alive: true };
219
+ * const fenced = fenceGeneration(
220
+ * { clock, fetch: node.fetch.fetch, stores, signers: { [signer.id]: signer } },
221
+ * generation,
222
+ * );
223
+ * const aio = new CryptoAio({
224
+ * clock: fenced.clock,
225
+ * stores: fenced.stores,
226
+ * signers: fenced.signers,
227
+ * transport: { fetch: fenced.fetch },
228
+ * // ...providers, wallets, chains
229
+ * });
230
+ * // restart({ killPrevious: true }): kill this generation, then fence a new one over the
231
+ * // same parts (same clock, node, stores and signer objects).
232
+ * generation.alive = false;
233
+ * ```
234
+ *
235
+ * Once `generation.alive` is `false`, every clock sleep, fetch (and body read), store call
236
+ * and signer call of this generation, in flight or issued later, never settles; a
237
+ * synchronous port method throws `StateError`. `clock.now()` stays live. Keep the raw
238
+ * `clock` for driving time (`drive`, `advance`, `pending`) and the raw `stores` for test
239
+ * assertions: they belong to no generation.
240
+ */
241
+ function fenceGeneration(parts, generation) {
242
+ return {
243
+ clock: generationClock(parts.clock, generation),
244
+ fetch: generationFetch(parts.fetch, generation),
245
+ stores: generationStores(parts.stores, generation),
246
+ signers: Object.fromEntries(Object.entries(parts.signers).map(([id, signer]) => [
247
+ id,
248
+ generationSigner(signer, generation),
249
+ ])),
250
+ };
251
+ }
252
+ //# sourceMappingURL=generation.js.map