@miradexio/client 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 (405) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +405 -0
  3. package/dist/address/base58.d.ts +9 -0
  4. package/dist/address/base58.d.ts.map +1 -0
  5. package/dist/address/base58.js +33 -0
  6. package/dist/address/base58.js.map +1 -0
  7. package/dist/address/bech32.d.ts +13 -0
  8. package/dist/address/bech32.d.ts.map +1 -0
  9. package/dist/address/bech32.js +41 -0
  10. package/dist/address/bech32.js.map +1 -0
  11. package/dist/address/evm.d.ts +5 -0
  12. package/dist/address/evm.d.ts.map +1 -0
  13. package/dist/address/evm.js +27 -0
  14. package/dist/address/evm.js.map +1 -0
  15. package/dist/address/index.d.ts +15 -0
  16. package/dist/address/index.d.ts.map +1 -0
  17. package/dist/address/index.js +134 -0
  18. package/dist/address/index.js.map +1 -0
  19. package/dist/address/monero.d.ts +15 -0
  20. package/dist/address/monero.d.ts.map +1 -0
  21. package/dist/address/monero.js +30 -0
  22. package/dist/address/monero.js.map +1 -0
  23. package/dist/address/polkadot.d.ts +10 -0
  24. package/dist/address/polkadot.d.ts.map +1 -0
  25. package/dist/address/polkadot.js +36 -0
  26. package/dist/address/polkadot.js.map +1 -0
  27. package/dist/address/solana.d.ts +5 -0
  28. package/dist/address/solana.d.ts.map +1 -0
  29. package/dist/address/solana.js +17 -0
  30. package/dist/address/solana.js.map +1 -0
  31. package/dist/address/ton.d.ts +11 -0
  32. package/dist/address/ton.d.ts.map +1 -0
  33. package/dist/address/ton.js +28 -0
  34. package/dist/address/ton.js.map +1 -0
  35. package/dist/api/index.d.ts +80 -0
  36. package/dist/api/index.d.ts.map +1 -0
  37. package/dist/api/index.js +213 -0
  38. package/dist/api/index.js.map +1 -0
  39. package/dist/atomic-swap/drive.d.ts +22 -0
  40. package/dist/atomic-swap/drive.d.ts.map +1 -0
  41. package/dist/atomic-swap/drive.js +713 -0
  42. package/dist/atomic-swap/drive.js.map +1 -0
  43. package/dist/atomic-swap/extract.d.ts +46 -0
  44. package/dist/atomic-swap/extract.d.ts.map +1 -0
  45. package/dist/atomic-swap/extract.js +55 -0
  46. package/dist/atomic-swap/extract.js.map +1 -0
  47. package/dist/atomic-swap/index.d.ts +15 -0
  48. package/dist/atomic-swap/index.d.ts.map +1 -0
  49. package/dist/atomic-swap/index.js +13 -0
  50. package/dist/atomic-swap/index.js.map +1 -0
  51. package/dist/atomic-swap/monero-sweep/errors.d.ts +2 -0
  52. package/dist/atomic-swap/monero-sweep/errors.d.ts.map +1 -0
  53. package/dist/atomic-swap/monero-sweep/errors.js +43 -0
  54. package/dist/atomic-swap/monero-sweep/errors.js.map +1 -0
  55. package/dist/atomic-swap/monero-sweep/index.d.ts +33 -0
  56. package/dist/atomic-swap/monero-sweep/index.d.ts.map +1 -0
  57. package/dist/atomic-swap/monero-sweep/index.js +415 -0
  58. package/dist/atomic-swap/monero-sweep/index.js.map +1 -0
  59. package/dist/atomic-swap/monero-sweep/ring-select.d.ts +12 -0
  60. package/dist/atomic-swap/monero-sweep/ring-select.d.ts.map +1 -0
  61. package/dist/atomic-swap/monero-sweep/ring-select.js +61 -0
  62. package/dist/atomic-swap/monero-sweep/ring-select.js.map +1 -0
  63. package/dist/atomic-swap/presign.d.ts +101 -0
  64. package/dist/atomic-swap/presign.d.ts.map +1 -0
  65. package/dist/atomic-swap/presign.js +460 -0
  66. package/dist/atomic-swap/presign.js.map +1 -0
  67. package/dist/atomic-swap/refund.d.ts +72 -0
  68. package/dist/atomic-swap/refund.d.ts.map +1 -0
  69. package/dist/atomic-swap/refund.js +224 -0
  70. package/dist/atomic-swap/refund.js.map +1 -0
  71. package/dist/atomic-swap/run.d.ts +27 -0
  72. package/dist/atomic-swap/run.d.ts.map +1 -0
  73. package/dist/atomic-swap/run.js +282 -0
  74. package/dist/atomic-swap/run.js.map +1 -0
  75. package/dist/atomic-swap/snapshot.d.ts +111 -0
  76. package/dist/atomic-swap/snapshot.d.ts.map +1 -0
  77. package/dist/atomic-swap/snapshot.js +69 -0
  78. package/dist/atomic-swap/snapshot.js.map +1 -0
  79. package/dist/atomic-swap/submit-encsig.d.ts +10 -0
  80. package/dist/atomic-swap/submit-encsig.d.ts.map +1 -0
  81. package/dist/atomic-swap/submit-encsig.js +56 -0
  82. package/dist/atomic-swap/submit-encsig.js.map +1 -0
  83. package/dist/atomic-swap/types.d.ts +168 -0
  84. package/dist/atomic-swap/types.d.ts.map +1 -0
  85. package/dist/atomic-swap/types.js +5 -0
  86. package/dist/atomic-swap/types.js.map +1 -0
  87. package/dist/blockchain/quorum-provider.d.ts +25 -0
  88. package/dist/blockchain/quorum-provider.d.ts.map +1 -0
  89. package/dist/blockchain/quorum-provider.js +144 -0
  90. package/dist/blockchain/quorum-provider.js.map +1 -0
  91. package/dist/cooperative-redeem.d.ts +23 -0
  92. package/dist/cooperative-redeem.d.ts.map +1 -0
  93. package/dist/cooperative-redeem.js +40 -0
  94. package/dist/cooperative-redeem.js.map +1 -0
  95. package/dist/engine/blockchain-querier.d.ts +34 -0
  96. package/dist/engine/blockchain-querier.d.ts.map +1 -0
  97. package/dist/engine/blockchain-querier.js +2 -0
  98. package/dist/engine/blockchain-querier.js.map +1 -0
  99. package/dist/engine/engine-state.d.ts +20 -0
  100. package/dist/engine/engine-state.d.ts.map +1 -0
  101. package/dist/engine/engine-state.js +9 -0
  102. package/dist/engine/engine-state.js.map +1 -0
  103. package/dist/engine/flow-context.d.ts +494 -0
  104. package/dist/engine/flow-context.d.ts.map +1 -0
  105. package/dist/engine/flow-context.js +147 -0
  106. package/dist/engine/flow-context.js.map +1 -0
  107. package/dist/engine/flows/atomic-flow-state.d.ts +124 -0
  108. package/dist/engine/flows/atomic-flow-state.d.ts.map +1 -0
  109. package/dist/engine/flows/atomic-flow-state.js +2 -0
  110. package/dist/engine/flows/atomic-flow-state.js.map +1 -0
  111. package/dist/engine/flows/atomic-flow.d.ts +88 -0
  112. package/dist/engine/flows/atomic-flow.d.ts.map +1 -0
  113. package/dist/engine/flows/atomic-flow.js +1192 -0
  114. package/dist/engine/flows/atomic-flow.js.map +1 -0
  115. package/dist/engine/flows/history-flow-state.d.ts +19 -0
  116. package/dist/engine/flows/history-flow-state.d.ts.map +1 -0
  117. package/dist/engine/flows/history-flow-state.js +2 -0
  118. package/dist/engine/flows/history-flow-state.js.map +1 -0
  119. package/dist/engine/flows/providers-flow-state.d.ts +14 -0
  120. package/dist/engine/flows/providers-flow-state.d.ts.map +1 -0
  121. package/dist/engine/flows/providers-flow-state.js +2 -0
  122. package/dist/engine/flows/providers-flow-state.js.map +1 -0
  123. package/dist/engine/flows/quote-flow-state.d.ts +20 -0
  124. package/dist/engine/flows/quote-flow-state.d.ts.map +1 -0
  125. package/dist/engine/flows/quote-flow-state.js +2 -0
  126. package/dist/engine/flows/quote-flow-state.js.map +1 -0
  127. package/dist/engine/flows/swap-flow-state.d.ts +155 -0
  128. package/dist/engine/flows/swap-flow-state.d.ts.map +1 -0
  129. package/dist/engine/flows/swap-flow-state.js +2 -0
  130. package/dist/engine/flows/swap-flow-state.js.map +1 -0
  131. package/dist/engine/flows/swap-flow.d.ts +81 -0
  132. package/dist/engine/flows/swap-flow.d.ts.map +1 -0
  133. package/dist/engine/flows/swap-flow.js +720 -0
  134. package/dist/engine/flows/swap-flow.js.map +1 -0
  135. package/dist/engine/flows/tokens-flow-state.d.ts +16 -0
  136. package/dist/engine/flows/tokens-flow-state.d.ts.map +1 -0
  137. package/dist/engine/flows/tokens-flow-state.js +2 -0
  138. package/dist/engine/flows/tokens-flow-state.js.map +1 -0
  139. package/dist/engine/miradex-engine.d.ts +152 -0
  140. package/dist/engine/miradex-engine.d.ts.map +1 -0
  141. package/dist/engine/miradex-engine.js +278 -0
  142. package/dist/engine/miradex-engine.js.map +1 -0
  143. package/dist/engine/pipeline.d.ts +27 -0
  144. package/dist/engine/pipeline.d.ts.map +1 -0
  145. package/dist/engine/pipeline.js +166 -0
  146. package/dist/engine/pipeline.js.map +1 -0
  147. package/dist/engine/platform.d.ts +220 -0
  148. package/dist/engine/platform.d.ts.map +1 -0
  149. package/dist/engine/platform.js +2 -0
  150. package/dist/engine/platform.js.map +1 -0
  151. package/dist/index.d.ts +85 -0
  152. package/dist/index.d.ts.map +1 -0
  153. package/dist/index.js +62 -0
  154. package/dist/index.js.map +1 -0
  155. package/dist/interfaces/blockchain.d.ts +33 -0
  156. package/dist/interfaces/blockchain.d.ts.map +1 -0
  157. package/dist/interfaces/blockchain.js +2 -0
  158. package/dist/interfaces/blockchain.js.map +1 -0
  159. package/dist/interfaces/logger.d.ts +14 -0
  160. package/dist/interfaces/logger.d.ts.map +1 -0
  161. package/dist/interfaces/logger.js +7 -0
  162. package/dist/interfaces/logger.js.map +1 -0
  163. package/dist/lib/bitcoin/deposit-watcher.d.ts +66 -0
  164. package/dist/lib/bitcoin/deposit-watcher.d.ts.map +1 -0
  165. package/dist/lib/bitcoin/deposit-watcher.js +218 -0
  166. package/dist/lib/bitcoin/deposit-watcher.js.map +1 -0
  167. package/dist/lib/bitcoin/script-hash.d.ts +8 -0
  168. package/dist/lib/bitcoin/script-hash.d.ts.map +1 -0
  169. package/dist/lib/bitcoin/script-hash.js +29 -0
  170. package/dist/lib/bitcoin/script-hash.js.map +1 -0
  171. package/dist/lib/bitcoin/sweep.d.ts +56 -0
  172. package/dist/lib/bitcoin/sweep.d.ts.map +1 -0
  173. package/dist/lib/bitcoin/sweep.js +185 -0
  174. package/dist/lib/bitcoin/sweep.js.map +1 -0
  175. package/dist/lib/bitcoin/tx-verify.d.ts +43 -0
  176. package/dist/lib/bitcoin/tx-verify.d.ts.map +1 -0
  177. package/dist/lib/bitcoin/tx-verify.js +202 -0
  178. package/dist/lib/bitcoin/tx-verify.js.map +1 -0
  179. package/dist/lib/bitcoin/wallet.d.ts +71 -0
  180. package/dist/lib/bitcoin/wallet.d.ts.map +1 -0
  181. package/dist/lib/bitcoin/wallet.js +141 -0
  182. package/dist/lib/bitcoin/wallet.js.map +1 -0
  183. package/dist/lib/crypto/bytes.d.ts +21 -0
  184. package/dist/lib/crypto/bytes.d.ts.map +1 -0
  185. package/dist/lib/crypto/bytes.js +39 -0
  186. package/dist/lib/crypto/bytes.js.map +1 -0
  187. package/dist/lib/crypto/errors.d.ts +12 -0
  188. package/dist/lib/crypto/errors.d.ts.map +1 -0
  189. package/dist/lib/crypto/errors.js +16 -0
  190. package/dist/lib/crypto/errors.js.map +1 -0
  191. package/dist/lib/crypto/keygen.d.ts +19 -0
  192. package/dist/lib/crypto/keygen.d.ts.map +1 -0
  193. package/dist/lib/crypto/keygen.js +24 -0
  194. package/dist/lib/crypto/keygen.js.map +1 -0
  195. package/dist/lib/crypto/libp2p-identity.d.ts +25 -0
  196. package/dist/lib/crypto/libp2p-identity.d.ts.map +1 -0
  197. package/dist/lib/crypto/libp2p-identity.js +80 -0
  198. package/dist/lib/crypto/libp2p-identity.js.map +1 -0
  199. package/dist/lib/crypto/mnemonic.d.ts +28 -0
  200. package/dist/lib/crypto/mnemonic.d.ts.map +1 -0
  201. package/dist/lib/crypto/mnemonic.js +97 -0
  202. package/dist/lib/crypto/mnemonic.js.map +1 -0
  203. package/dist/lib/crypto/platform.d.ts +10 -0
  204. package/dist/lib/crypto/platform.d.ts.map +1 -0
  205. package/dist/lib/crypto/platform.js +38 -0
  206. package/dist/lib/crypto/platform.js.map +1 -0
  207. package/dist/lib/crypto/scalars.d.ts +33 -0
  208. package/dist/lib/crypto/scalars.d.ts.map +1 -0
  209. package/dist/lib/crypto/scalars.js +81 -0
  210. package/dist/lib/crypto/scalars.js.map +1 -0
  211. package/dist/lib/crypto/types.d.ts +24 -0
  212. package/dist/lib/crypto/types.d.ts.map +1 -0
  213. package/dist/lib/crypto/types.js +2 -0
  214. package/dist/lib/crypto/types.js.map +1 -0
  215. package/dist/lib/crypto/wasm.d.ts +51 -0
  216. package/dist/lib/crypto/wasm.d.ts.map +1 -0
  217. package/dist/lib/crypto/wasm.js +192 -0
  218. package/dist/lib/crypto/wasm.js.map +1 -0
  219. package/dist/lib/default-config.d.ts +140 -0
  220. package/dist/lib/default-config.d.ts.map +1 -0
  221. package/dist/lib/default-config.js +239 -0
  222. package/dist/lib/default-config.js.map +1 -0
  223. package/dist/lib/delay.d.ts +6 -0
  224. package/dist/lib/delay.d.ts.map +1 -0
  225. package/dist/lib/delay.js +20 -0
  226. package/dist/lib/delay.js.map +1 -0
  227. package/dist/lib/errors.d.ts +90 -0
  228. package/dist/lib/errors.d.ts.map +1 -0
  229. package/dist/lib/errors.js +129 -0
  230. package/dist/lib/errors.js.map +1 -0
  231. package/dist/lib/format.d.ts +7 -0
  232. package/dist/lib/format.d.ts.map +1 -0
  233. package/dist/lib/format.js +43 -0
  234. package/dist/lib/format.js.map +1 -0
  235. package/dist/lib/keystore.d.ts +85 -0
  236. package/dist/lib/keystore.d.ts.map +1 -0
  237. package/dist/lib/keystore.js +105 -0
  238. package/dist/lib/keystore.js.map +1 -0
  239. package/dist/lib/monero/output-scanner.d.ts +53 -0
  240. package/dist/lib/monero/output-scanner.d.ts.map +1 -0
  241. package/dist/lib/monero/output-scanner.js +180 -0
  242. package/dist/lib/monero/output-scanner.js.map +1 -0
  243. package/dist/lib/monero/rpc.d.ts +131 -0
  244. package/dist/lib/monero/rpc.d.ts.map +1 -0
  245. package/dist/lib/monero/rpc.js +267 -0
  246. package/dist/lib/monero/rpc.js.map +1 -0
  247. package/dist/lib/monero/verify-lock.d.ts +50 -0
  248. package/dist/lib/monero/verify-lock.d.ts.map +1 -0
  249. package/dist/lib/monero/verify-lock.js +161 -0
  250. package/dist/lib/monero/verify-lock.js.map +1 -0
  251. package/dist/lib/monero/verify-sweep.d.ts +59 -0
  252. package/dist/lib/monero/verify-sweep.d.ts.map +1 -0
  253. package/dist/lib/monero/verify-sweep.js +82 -0
  254. package/dist/lib/monero/verify-sweep.js.map +1 -0
  255. package/dist/lib/monero/wasm.d.ts +19 -0
  256. package/dist/lib/monero/wasm.d.ts.map +1 -0
  257. package/dist/lib/monero/wasm.js +24 -0
  258. package/dist/lib/monero/wasm.js.map +1 -0
  259. package/dist/lib/pow-solver.d.ts +4 -0
  260. package/dist/lib/pow-solver.d.ts.map +1 -0
  261. package/dist/lib/pow-solver.js +37 -0
  262. package/dist/lib/pow-solver.js.map +1 -0
  263. package/dist/lib/retry.d.ts +86 -0
  264. package/dist/lib/retry.d.ts.map +1 -0
  265. package/dist/lib/retry.js +104 -0
  266. package/dist/lib/retry.js.map +1 -0
  267. package/dist/portable.d.ts +23 -0
  268. package/dist/portable.d.ts.map +1 -0
  269. package/dist/portable.js +13 -0
  270. package/dist/portable.js.map +1 -0
  271. package/dist/quote-binding.d.ts +31 -0
  272. package/dist/quote-binding.d.ts.map +1 -0
  273. package/dist/quote-binding.js +40 -0
  274. package/dist/quote-binding.js.map +1 -0
  275. package/dist/swap-executor.d.ts +51 -0
  276. package/dist/swap-executor.d.ts.map +1 -0
  277. package/dist/swap-executor.js +138 -0
  278. package/dist/swap-executor.js.map +1 -0
  279. package/dist/types/api.d.ts +34 -0
  280. package/dist/types/api.d.ts.map +1 -0
  281. package/dist/types/api.js +18 -0
  282. package/dist/types/api.js.map +1 -0
  283. package/dist/types/errors.d.ts +94 -0
  284. package/dist/types/errors.d.ts.map +1 -0
  285. package/dist/types/errors.js +93 -0
  286. package/dist/types/errors.js.map +1 -0
  287. package/dist/types/index.d.ts +8 -0
  288. package/dist/types/index.d.ts.map +1 -0
  289. package/dist/types/index.js +10 -0
  290. package/dist/types/index.js.map +1 -0
  291. package/dist/types/keys.d.ts +33 -0
  292. package/dist/types/keys.d.ts.map +1 -0
  293. package/dist/types/keys.js +2 -0
  294. package/dist/types/keys.js.map +1 -0
  295. package/dist/types/protocol.d.ts +93 -0
  296. package/dist/types/protocol.d.ts.map +1 -0
  297. package/dist/types/protocol.js +18 -0
  298. package/dist/types/protocol.js.map +1 -0
  299. package/dist/types/status.d.ts +3 -0
  300. package/dist/types/status.d.ts.map +1 -0
  301. package/dist/types/status.js +23 -0
  302. package/dist/types/status.js.map +1 -0
  303. package/dist/types/verification.d.ts +49 -0
  304. package/dist/types/verification.d.ts.map +1 -0
  305. package/dist/types/verification.js +34 -0
  306. package/dist/types/verification.js.map +1 -0
  307. package/dist/verification/atomic-swap.d.ts +9 -0
  308. package/dist/verification/atomic-swap.d.ts.map +1 -0
  309. package/dist/verification/atomic-swap.js +22 -0
  310. package/dist/verification/atomic-swap.js.map +1 -0
  311. package/dist/verification/chainflip-networks.d.ts +46 -0
  312. package/dist/verification/chainflip-networks.d.ts.map +1 -0
  313. package/dist/verification/chainflip-networks.js +24 -0
  314. package/dist/verification/chainflip-networks.js.map +1 -0
  315. package/dist/verification/chainflip.d.ts +61 -0
  316. package/dist/verification/chainflip.d.ts.map +1 -0
  317. package/dist/verification/chainflip.js +377 -0
  318. package/dist/verification/chainflip.js.map +1 -0
  319. package/dist/verification/constants.d.ts +52 -0
  320. package/dist/verification/constants.d.ts.map +1 -0
  321. package/dist/verification/constants.js +54 -0
  322. package/dist/verification/constants.js.map +1 -0
  323. package/dist/verification/index.d.ts +71 -0
  324. package/dist/verification/index.d.ts.map +1 -0
  325. package/dist/verification/index.js +91 -0
  326. package/dist/verification/index.js.map +1 -0
  327. package/dist/verification/memo.d.ts +27 -0
  328. package/dist/verification/memo.d.ts.map +1 -0
  329. package/dist/verification/memo.js +52 -0
  330. package/dist/verification/memo.js.map +1 -0
  331. package/dist/verification/near-intents.d.ts +91 -0
  332. package/dist/verification/near-intents.d.ts.map +1 -0
  333. package/dist/verification/near-intents.js +213 -0
  334. package/dist/verification/near-intents.js.map +1 -0
  335. package/dist/verification/rate-oracle.d.ts +32 -0
  336. package/dist/verification/rate-oracle.d.ts.map +1 -0
  337. package/dist/verification/rate-oracle.js +43 -0
  338. package/dist/verification/rate-oracle.js.map +1 -0
  339. package/dist/verification/shared.d.ts +20 -0
  340. package/dist/verification/shared.d.ts.map +1 -0
  341. package/dist/verification/shared.js +25 -0
  342. package/dist/verification/shared.js.map +1 -0
  343. package/dist/verification/thorchain-networks.d.ts +35 -0
  344. package/dist/verification/thorchain-networks.d.ts.map +1 -0
  345. package/dist/verification/thorchain-networks.js +35 -0
  346. package/dist/verification/thorchain-networks.js.map +1 -0
  347. package/dist/verification/thorchain.d.ts +55 -0
  348. package/dist/verification/thorchain.d.ts.map +1 -0
  349. package/dist/verification/thorchain.js +232 -0
  350. package/dist/verification/thorchain.js.map +1 -0
  351. package/dist/wasm-pins.d.ts +4 -0
  352. package/dist/wasm-pins.d.ts.map +1 -0
  353. package/dist/wasm-pins.js +6 -0
  354. package/dist/wasm-pins.js.map +1 -0
  355. package/dist/wire/chainflip.zod.d.ts +144 -0
  356. package/dist/wire/chainflip.zod.d.ts.map +1 -0
  357. package/dist/wire/chainflip.zod.js +33 -0
  358. package/dist/wire/chainflip.zod.js.map +1 -0
  359. package/dist/wire/near-intents.zod.d.ts +376 -0
  360. package/dist/wire/near-intents.zod.d.ts.map +1 -0
  361. package/dist/wire/near-intents.zod.js +101 -0
  362. package/dist/wire/near-intents.zod.js.map +1 -0
  363. package/dist/wire/server/action.zod.d.ts +1119 -0
  364. package/dist/wire/server/action.zod.d.ts.map +1 -0
  365. package/dist/wire/server/action.zod.js +173 -0
  366. package/dist/wire/server/action.zod.js.map +1 -0
  367. package/dist/wire/server/common.zod.d.ts +62 -0
  368. package/dist/wire/server/common.zod.d.ts.map +1 -0
  369. package/dist/wire/server/common.zod.js +43 -0
  370. package/dist/wire/server/common.zod.js.map +1 -0
  371. package/dist/wire/server/index.d.ts +8 -0
  372. package/dist/wire/server/index.d.ts.map +1 -0
  373. package/dist/wire/server/index.js +8 -0
  374. package/dist/wire/server/index.js.map +1 -0
  375. package/dist/wire/server/pow.zod.d.ts +45 -0
  376. package/dist/wire/server/pow.zod.d.ts.map +1 -0
  377. package/dist/wire/server/pow.zod.js +18 -0
  378. package/dist/wire/server/pow.zod.js.map +1 -0
  379. package/dist/wire/server/quotes.zod.d.ts +694 -0
  380. package/dist/wire/server/quotes.zod.d.ts.map +1 -0
  381. package/dist/wire/server/quotes.zod.js +103 -0
  382. package/dist/wire/server/quotes.zod.js.map +1 -0
  383. package/dist/wire/server/swap.zod.d.ts +1981 -0
  384. package/dist/wire/server/swap.zod.d.ts.map +1 -0
  385. package/dist/wire/server/swap.zod.js +270 -0
  386. package/dist/wire/server/swap.zod.js.map +1 -0
  387. package/dist/wire/server/tokens.zod.d.ts +93 -0
  388. package/dist/wire/server/tokens.zod.d.ts.map +1 -0
  389. package/dist/wire/server/tokens.zod.js +28 -0
  390. package/dist/wire/server/tokens.zod.js.map +1 -0
  391. package/dist/wire/server/verify.zod.d.ts +30 -0
  392. package/dist/wire/server/verify.zod.d.ts.map +1 -0
  393. package/dist/wire/server/verify.zod.js +12 -0
  394. package/dist/wire/server/verify.zod.js.map +1 -0
  395. package/dist/wire/thorchain.zod.d.ts +224 -0
  396. package/dist/wire/thorchain.zod.d.ts.map +1 -0
  397. package/dist/wire/thorchain.zod.js +51 -0
  398. package/dist/wire/thorchain.zod.js.map +1 -0
  399. package/package.json +128 -0
  400. package/wasm/miradex-rust/README.md +74 -0
  401. package/wasm/miradex-rust/miradex_rust.d.ts +149 -0
  402. package/wasm/miradex-rust/miradex_rust.js +943 -0
  403. package/wasm/miradex-rust/miradex_rust_bg.wasm +0 -0
  404. package/wasm/miradex-rust/miradex_rust_bg.wasm.d.ts +31 -0
  405. package/wasm/miradex-rust/package.json +24 -0
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Unified error taxonomy for the miradex-client SDK.
3
+ *
4
+ * Every error thrown out of the SDK is either a {@link MiradexError} subclass
5
+ * (carrying a `category`) or a foreign error that {@link classifyError} can
6
+ * map to a category. The category drives retry policy via {@link withRetry}.
7
+ *
8
+ * Cross-platform: this module uses only platform-neutral primitives (`Error`,
9
+ * `TypeError`, `DOMException`). It never references Node-only APIs (`Buffer`,
10
+ * `process`, `fs`) and never assumes a particular fetch implementation. Both
11
+ * the browser and Node 20+ runtimes throw `TypeError("fetch failed")` /
12
+ * `DOMException("AbortError")` for the same underlying conditions, so a single
13
+ * classifier covers both.
14
+ *
15
+ * Category meaning:
16
+ * - `network` : transient — DNS, TLS, connection reset, fetch timeout. Retry indefinitely.
17
+ * - `server` : HTTP 5xx. Server fault, retry indefinitely.
18
+ * - `rate-limit` : HTTP 429. Server-controlled throttling. Bounded retry.
19
+ * - `client-bounded` : HTTP 4xx that may resolve on retry (404 freshly-created, 408, 409, 422). Bounded retry.
20
+ * - `client-fatal` : HTTP 4xx that won't resolve (400, 401, 403, 405, 410, ...). Fail immediately.
21
+ * - `protocol` : Contract violation (schema mismatch, missing required field). Fail immediately.
22
+ * - `verification` : Independent crypto/security check failed. Fail immediately.
23
+ * - `cancelled` : User/engine cancellation. Propagate.
24
+ * - `unknown` : Unclassified. Bounded retry as a safety net.
25
+ */
26
+ export type ErrorCategory = 'network' | 'server' | 'rate-limit' | 'client-bounded' | 'client-fatal' | 'protocol' | 'verification' | 'cancelled' | 'unknown';
27
+ export interface MiradexErrorOptions {
28
+ readonly cause?: unknown;
29
+ readonly details?: Readonly<Record<string, unknown>>;
30
+ }
31
+ /**
32
+ * Base for every error the SDK emits. Subclasses set `name` and `category`.
33
+ * `cause` and `details` are optional and travel with the error for diagnostics.
34
+ */
35
+ export declare class MiradexError extends Error {
36
+ readonly name: string;
37
+ readonly category: ErrorCategory;
38
+ readonly details: Readonly<Record<string, unknown>> | undefined;
39
+ readonly cause: unknown;
40
+ constructor(message: string, category: ErrorCategory, options?: MiradexErrorOptions);
41
+ }
42
+ /**
43
+ * Determine the retry category for any value thrown from the SDK boundary.
44
+ *
45
+ * Already-classified {@link MiradexError}s short-circuit. Everything else is
46
+ * matched against the platform-neutral fingerprints of fetch / DNS / TLS
47
+ * failures.
48
+ */
49
+ export declare function classifyError(err: unknown): ErrorCategory;
50
+ /** Convenience: shorthand string from an unknown thrown value. */
51
+ export declare function errorMessage(err: unknown): string;
52
+ /**
53
+ * User / engine cancellation. Raised when an `AbortSignal` aborts an
54
+ * in-flight retry loop or a long-running drive call.
55
+ */
56
+ export declare class SwapCancelledError extends MiradexError {
57
+ readonly name = "SwapCancelledError";
58
+ constructor(message?: string);
59
+ }
60
+ /**
61
+ * Transient network / fetch failure. The category is always `'network'`,
62
+ * which means {@link withRetry} retries indefinitely with capped backoff.
63
+ */
64
+ export declare class NetworkError extends MiradexError {
65
+ readonly name = "NetworkError";
66
+ constructor(message: string, options?: MiradexErrorOptions);
67
+ }
68
+ /**
69
+ * HTTP-level error. The {@link MiradexError.category} is derived from the
70
+ * status code + server-emitted error code, so a single class covers the four
71
+ * HTTP categories (`client-bounded`, `client-fatal`, `rate-limit`, `server`)
72
+ * while keeping `instanceof ApiError` working for legacy callers.
73
+ *
74
+ * Special case: `code === 'SCHEMA_MISMATCH'` is `protocol` regardless of
75
+ * status, because a schema mismatch indicates a code-level contract violation
76
+ * — retrying will not fix it.
77
+ */
78
+ export declare class ApiError extends MiradexError {
79
+ readonly name = "ApiError";
80
+ readonly statusCode: number;
81
+ readonly code: string;
82
+ constructor(message: string, statusCode: number, code: string, options?: MiradexErrorOptions);
83
+ }
84
+ /** Map an HTTP status + server code to a retry category. */
85
+ export declare function deriveApiCategory(statusCode: number, code: string): ErrorCategory;
86
+ /** Whether the SDK should retry this error at all. */
87
+ export declare function isRetryable(err: unknown): boolean;
88
+ /** Whether the SDK should retry this error indefinitely (capped backoff). */
89
+ export declare function isUnboundedRetry(err: unknown): boolean;
90
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,MAAM,aAAa,GACrB,SAAS,GACT,QAAQ,GACR,YAAY,GACZ,gBAAgB,GAChB,cAAc,GACd,UAAU,GACV,cAAc,GACd,WAAW,GACX,SAAS,CAAC;AAEd,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACtD;AAED;;;GAGG;AACH,qBAAa,YAAa,SAAQ,KAAK;IACrC,SAAkB,IAAI,EAAE,MAAM,CAAkB;IAChD,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAChE,SAAkB,KAAK,EAAE,OAAO,CAAC;gBAErB,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,mBAAmB;CAMpF;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa,CA+BzD;AASD,kEAAkE;AAClE,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAGjD;AAED;;;GAGG;AACH,qBAAa,kBAAmB,SAAQ,YAAY;IAClD,SAAkB,IAAI,wBAAwB;gBAClC,OAAO,SAA2B;CAG/C;AAED;;;GAGG;AACH,qBAAa,YAAa,SAAQ,YAAY;IAC5C,SAAkB,IAAI,kBAAkB;gBAC5B,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB;CAG3D;AAED;;;;;;;;;GASG;AACH,qBAAa,QAAS,SAAQ,YAAY;IACxC,SAAkB,IAAI,cAAc;IACpC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEpB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,mBAAmB;CAMhC;AAED,4DAA4D;AAC5D,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,CAQjF;AAED,sDAAsD;AACtD,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAGjD;AAED,6EAA6E;AAC7E,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAGtD"}
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Base for every error the SDK emits. Subclasses set `name` and `category`.
3
+ * `cause` and `details` are optional and travel with the error for diagnostics.
4
+ */
5
+ export class MiradexError extends Error {
6
+ name = 'MiradexError';
7
+ category;
8
+ details;
9
+ cause;
10
+ constructor(message, category, options) {
11
+ super(message);
12
+ this.category = category;
13
+ this.cause = options?.cause;
14
+ this.details = options?.details;
15
+ }
16
+ }
17
+ /**
18
+ * Determine the retry category for any value thrown from the SDK boundary.
19
+ *
20
+ * Already-classified {@link MiradexError}s short-circuit. Everything else is
21
+ * matched against the platform-neutral fingerprints of fetch / DNS / TLS
22
+ * failures.
23
+ */
24
+ export function classifyError(err) {
25
+ if (err instanceof MiradexError)
26
+ return err.category;
27
+ // Native fetch failure (undici on Node, browser fetch).
28
+ // Node 20+: `TypeError: fetch failed` (with .cause carrying the underlying ECONN…).
29
+ // Browser: `TypeError: Failed to fetch` (no cause).
30
+ if (err instanceof TypeError) {
31
+ if (/^(?:fetch failed|failed to fetch|networkerror|load failed)/i.test(err.message)) {
32
+ return 'network';
33
+ }
34
+ }
35
+ // Per-request timeout: AbortController.abort() raises DOMException('AbortError').
36
+ if (typeof DOMException !== 'undefined' && err instanceof DOMException && err.name === 'AbortError') {
37
+ return 'network';
38
+ }
39
+ if (err instanceof Error) {
40
+ // Last-resort fingerprinting for environments that surface Node-style
41
+ // codes embedded in message / cause without extending TypeError.
42
+ const merged = `${err.message} ${cause(err)}`.toLowerCase();
43
+ if (/\b(?:econnrefused|econnreset|enotfound|eai_again|etimedout|epipe|ehostunreach|enetunreach|socket hang up|getaddrinfo|other side closed|terminated)\b/.test(merged)) {
44
+ return 'network';
45
+ }
46
+ }
47
+ return 'unknown';
48
+ }
49
+ function cause(err) {
50
+ const c = err.cause;
51
+ if (c === undefined || c === null)
52
+ return '';
53
+ if (c instanceof Error)
54
+ return c.message;
55
+ return String(c);
56
+ }
57
+ /** Convenience: shorthand string from an unknown thrown value. */
58
+ export function errorMessage(err) {
59
+ if (err instanceof Error)
60
+ return err.message;
61
+ return String(err);
62
+ }
63
+ /**
64
+ * User / engine cancellation. Raised when an `AbortSignal` aborts an
65
+ * in-flight retry loop or a long-running drive call.
66
+ */
67
+ export class SwapCancelledError extends MiradexError {
68
+ name = 'SwapCancelledError';
69
+ constructor(message = 'Swap cancelled by user') {
70
+ super(message, 'cancelled');
71
+ }
72
+ }
73
+ /**
74
+ * Transient network / fetch failure. The category is always `'network'`,
75
+ * which means {@link withRetry} retries indefinitely with capped backoff.
76
+ */
77
+ export class NetworkError extends MiradexError {
78
+ name = 'NetworkError';
79
+ constructor(message, options) {
80
+ super(message, 'network', options);
81
+ }
82
+ }
83
+ /**
84
+ * HTTP-level error. The {@link MiradexError.category} is derived from the
85
+ * status code + server-emitted error code, so a single class covers the four
86
+ * HTTP categories (`client-bounded`, `client-fatal`, `rate-limit`, `server`)
87
+ * while keeping `instanceof ApiError` working for legacy callers.
88
+ *
89
+ * Special case: `code === 'SCHEMA_MISMATCH'` is `protocol` regardless of
90
+ * status, because a schema mismatch indicates a code-level contract violation
91
+ * — retrying will not fix it.
92
+ */
93
+ export class ApiError extends MiradexError {
94
+ name = 'ApiError';
95
+ statusCode;
96
+ code;
97
+ constructor(message, statusCode, code, options) {
98
+ super(message, deriveApiCategory(statusCode, code), options);
99
+ this.statusCode = statusCode;
100
+ this.code = code;
101
+ }
102
+ }
103
+ /** Map an HTTP status + server code to a retry category. */
104
+ export function deriveApiCategory(statusCode, code) {
105
+ if (code === 'SCHEMA_MISMATCH')
106
+ return 'protocol';
107
+ if (statusCode >= 500)
108
+ return 'server';
109
+ if (statusCode === 429)
110
+ return 'rate-limit';
111
+ if (statusCode === 408 || statusCode === 409 || statusCode === 422)
112
+ return 'client-bounded';
113
+ if (statusCode === 404)
114
+ return 'client-bounded';
115
+ if (statusCode >= 400)
116
+ return 'client-fatal';
117
+ return 'unknown';
118
+ }
119
+ /** Whether the SDK should retry this error at all. */
120
+ export function isRetryable(err) {
121
+ const c = classifyError(err);
122
+ return c !== 'protocol' && c !== 'verification' && c !== 'client-fatal' && c !== 'cancelled';
123
+ }
124
+ /** Whether the SDK should retry this error indefinitely (capped backoff). */
125
+ export function isUnboundedRetry(err) {
126
+ const c = classifyError(err);
127
+ return c === 'network' || c === 'server';
128
+ }
129
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare function formatAmount(value: string | number, maxDecimals?: number): string;
2
+ export declare function formatDuration(seconds: number): string;
3
+ export declare function formatEta(seconds: number): string;
4
+ export declare function formatTimeAgo(iso: string): string;
5
+ export declare function truncAddr(addr: string, start?: number, end?: number): string;
6
+ export declare function bpsToPercent(bps: number): string;
7
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/lib/format.ts"],"names":[],"mappings":"AAAA,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,WAAW,SAAI,GAAG,MAAM,CAQ5E;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAUtD;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMjD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,SAAI,EAAE,GAAG,SAAI,GAAG,MAAM,CAGlE;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEhD"}
@@ -0,0 +1,43 @@
1
+ export function formatAmount(value, maxDecimals = 8) {
2
+ const num = typeof value === 'string' ? parseFloat(value) : value;
3
+ if (isNaN(num))
4
+ return '0';
5
+ const fixed = num.toFixed(maxDecimals).replace(/\.?0+$/, '') || '0';
6
+ const [int, dec] = fixed.split('.');
7
+ const withCommas = (int ?? '0').replace(/\B(?=(\d{3})+(?!\d))/g, ',');
8
+ return dec ? `${withCommas}.${dec}` : withCommas;
9
+ }
10
+ export function formatDuration(seconds) {
11
+ if (seconds < 60)
12
+ return `${seconds}s`;
13
+ if (seconds < 3600) {
14
+ const m = Math.floor(seconds / 60);
15
+ const s = seconds % 60;
16
+ return s ? `${m}m ${s}s` : `${m}m`;
17
+ }
18
+ const h = Math.floor(seconds / 3600);
19
+ const m = Math.floor((seconds % 3600) / 60);
20
+ return m ? `${h}h ${m}m` : `${h}h`;
21
+ }
22
+ export function formatEta(seconds) {
23
+ return `~${formatDuration(seconds)}`;
24
+ }
25
+ export function formatTimeAgo(iso) {
26
+ const sec = Math.floor((Date.now() - new Date(iso).getTime()) / 1000);
27
+ if (sec < 60)
28
+ return `${sec}s ago`;
29
+ if (sec < 3600)
30
+ return `${Math.floor(sec / 60)}m ago`;
31
+ if (sec < 86400)
32
+ return `${Math.floor(sec / 3600)}h ago`;
33
+ return `${Math.floor(sec / 86400)}d ago`;
34
+ }
35
+ export function truncAddr(addr, start = 8, end = 6) {
36
+ if (addr.length <= start + end + 3)
37
+ return addr;
38
+ return `${addr.slice(0, start)}...${addr.slice(-end)}`;
39
+ }
40
+ export function bpsToPercent(bps) {
41
+ return `${(bps / 100).toFixed(2)}%`;
42
+ }
43
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/lib/format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Records how keys were derived so future code changes never break recovery.
3
+ */
4
+ export interface KeystoreDerivation {
5
+ /** Scheme identifier (e.g. "miradex-v0") */
6
+ readonly scheme: string;
7
+ /** BIP32 derivation path used for the BTC key */
8
+ readonly btcPath: string;
9
+ /** HMAC domain string used to derive s_b from the BIP32 seed */
10
+ readonly scalarDomain: string;
11
+ /** HMAC domain string used to derive v_b from the BIP32 seed */
12
+ readonly viewKeyDomain: string;
13
+ }
14
+ /**
15
+ * Keystore file format v3.
16
+ *
17
+ * Adds eigenwallet_master_seed + libp2p_peer_id so a recovery binary
18
+ * (eigenwallet's swap CLI) can re-derive the same libp2p identity Bob used
19
+ * for the swap setup. Required for cross-binary recovery.
20
+ *
21
+ * Naming convention follows the atomic swap protocol:
22
+ * lowercase s = private (secret scalar)
23
+ * uppercase S = public (curve point)
24
+ */
25
+ export interface SwapKeystore {
26
+ readonly version: 3;
27
+ readonly createdAt: string;
28
+ readonly warning: string;
29
+ /** BIP39 24-word mnemonic — THE master recovery key. Optional for pre-mnemonic keystores. */
30
+ readonly mnemonic?: string;
31
+ /** Derivation parameters used to produce all keys from the mnemonic. */
32
+ readonly derivation?: KeystoreDerivation;
33
+ readonly btc: {
34
+ readonly wif: string;
35
+ readonly address: string;
36
+ readonly network: 'mainnet' | 'testnet' | 'regtest';
37
+ };
38
+ readonly keys: {
39
+ readonly s_b: string;
40
+ readonly v_b: string;
41
+ readonly S_b_bitcoin: string;
42
+ readonly S_b_monero: string;
43
+ readonly dleq_proof: string;
44
+ readonly b: string;
45
+ readonly B: string;
46
+ /** 32-byte hex master seed — feeds the libp2p identity HMAC chain. */
47
+ readonly eigenwallet_master_seed: string;
48
+ /** base58btc PeerId derived from `eigenwallet_master_seed`. Cached for logs. */
49
+ readonly libp2p_peer_id: string;
50
+ };
51
+ readonly swap: {
52
+ readonly receiveAddress: string;
53
+ readonly refundAddress: string;
54
+ };
55
+ }
56
+ export declare function createKeystore(params: {
57
+ readonly wif: string;
58
+ readonly btcAddress: string;
59
+ readonly network: 'mainnet' | 'testnet' | 'regtest';
60
+ readonly s_b: string;
61
+ readonly v_b: string;
62
+ readonly S_b_bitcoin: string;
63
+ readonly S_b_monero: string;
64
+ readonly dleq_proof: string;
65
+ readonly b: string;
66
+ readonly B: string;
67
+ readonly eigenwallet_master_seed: string;
68
+ readonly libp2p_peer_id: string;
69
+ readonly receiveAddress: string;
70
+ readonly refundAddress: string;
71
+ readonly mnemonic?: string;
72
+ readonly derivation?: KeystoreDerivation;
73
+ }): SwapKeystore;
74
+ /**
75
+ * Parse a raw JSON string into a SwapKeystore.
76
+ * Handles v1, v2 (migrated), and v3 keystore formats.
77
+ *
78
+ * V2→V3 migration: existing V2 keystores have no `eigenwallet_master_seed`.
79
+ * The migrator stamps an empty string for both libp2p fields; recovery for
80
+ * those swaps is keystore-only (mnemonic still works), but the eigenwallet
81
+ * binary won't reproduce the original peer-id. Newly-created keystores at V3
82
+ * have the field populated.
83
+ */
84
+ export declare function parseKeystore(rawJson: string): SwapKeystore;
85
+ //# sourceMappingURL=keystore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keystore.d.ts","sourceRoot":"","sources":["../../src/lib/keystore.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,4CAA4C;IAC5C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,iDAAiD;IACjD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,gEAAgE;IAChE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,gEAAgE;IAChE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,6FAA6F;IAC7F,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,wEAAwE;IACxE,QAAQ,CAAC,UAAU,CAAC,EAAE,kBAAkB,CAAC;IACzC,QAAQ,CAAC,GAAG,EAAE;QACZ,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;KACrD,CAAC;IACF,QAAQ,CAAC,IAAI,EAAE;QACb,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;QACnB,sEAAsE;QACtE,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;QACzC,gFAAgF;QAChF,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;KACjC,CAAC;IACF,QAAQ,CAAC,IAAI,EAAE;QACb,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;QAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;KAChC,CAAC;CACH;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE;IACrC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;IACzC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,kBAAkB,CAAC;CAC1C,GAAG,YAAY,CA+Bf;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAuB3D"}
@@ -0,0 +1,105 @@
1
+ export function createKeystore(params) {
2
+ const hasMnemonic = params.mnemonic !== undefined && params.mnemonic.length > 0;
3
+ return {
4
+ version: 3,
5
+ createdAt: new Date().toISOString(),
6
+ warning: hasMnemonic
7
+ ? 'DO NOT SHARE. Contains private keys and recovery mnemonic for your atomic swap.'
8
+ : 'DO NOT SHARE. Contains private keys for your atomic swap.',
9
+ ...(params.mnemonic ? { mnemonic: params.mnemonic } : {}),
10
+ ...(params.derivation ? { derivation: params.derivation } : {}),
11
+ btc: {
12
+ wif: params.wif,
13
+ address: params.btcAddress,
14
+ network: params.network,
15
+ },
16
+ keys: {
17
+ s_b: params.s_b,
18
+ v_b: params.v_b,
19
+ S_b_bitcoin: params.S_b_bitcoin,
20
+ S_b_monero: params.S_b_monero,
21
+ dleq_proof: params.dleq_proof,
22
+ b: params.b,
23
+ B: params.B,
24
+ eigenwallet_master_seed: params.eigenwallet_master_seed,
25
+ libp2p_peer_id: params.libp2p_peer_id,
26
+ },
27
+ swap: {
28
+ receiveAddress: params.receiveAddress,
29
+ refundAddress: params.refundAddress,
30
+ },
31
+ };
32
+ }
33
+ /**
34
+ * Parse a raw JSON string into a SwapKeystore.
35
+ * Handles v1, v2 (migrated), and v3 keystore formats.
36
+ *
37
+ * V2→V3 migration: existing V2 keystores have no `eigenwallet_master_seed`.
38
+ * The migrator stamps an empty string for both libp2p fields; recovery for
39
+ * those swaps is keystore-only (mnemonic still works), but the eigenwallet
40
+ * binary won't reproduce the original peer-id. Newly-created keystores at V3
41
+ * have the field populated.
42
+ */
43
+ export function parseKeystore(rawJson) {
44
+ const raw = JSON.parse(rawJson);
45
+ if (typeof raw !== 'object' || raw === null) {
46
+ throw new Error('Invalid keystore format');
47
+ }
48
+ const obj = raw;
49
+ const version = obj['version'];
50
+ if (version === 3) {
51
+ return raw;
52
+ }
53
+ if (version === 2) {
54
+ return migrateV2toV3(obj);
55
+ }
56
+ if (version === 1) {
57
+ return migrateV2toV3(migrateV1toV2(obj));
58
+ }
59
+ throw new Error(`Unsupported keystore version: ${String(version)}`);
60
+ }
61
+ function migrateV2toV3(raw) {
62
+ const v2 = raw;
63
+ return {
64
+ version: 3,
65
+ createdAt: v2.createdAt,
66
+ warning: v2.warning,
67
+ ...(v2.mnemonic ? { mnemonic: v2.mnemonic } : {}),
68
+ ...(v2.derivation ? { derivation: v2.derivation } : {}),
69
+ btc: v2.btc,
70
+ keys: {
71
+ ...v2.keys,
72
+ eigenwallet_master_seed: '',
73
+ libp2p_peer_id: '',
74
+ },
75
+ swap: v2.swap,
76
+ };
77
+ }
78
+ function migrateV1toV2(raw) {
79
+ const v1 = raw;
80
+ return {
81
+ version: 2,
82
+ createdAt: raw['createdAt'] ?? new Date().toISOString(),
83
+ warning: 'DO NOT SHARE. Contains private keys for your atomic swap.',
84
+ btc: {
85
+ wif: v1.btc.wif,
86
+ address: v1.btc.address,
87
+ network: (v1.btc.network || 'mainnet'),
88
+ },
89
+ keys: {
90
+ // s_b: v1 keystores may have dleq.sB (if created after partial fix) or nothing
91
+ s_b: v1.dleq?.sB ?? '',
92
+ v_b: v1.monero?.privateViewKey ?? '',
93
+ S_b_bitcoin: v1.dleq?.sBitcoin ?? '',
94
+ S_b_monero: v1.dleq?.sMonero ?? v1.monero?.publicSpendKey ?? '',
95
+ dleq_proof: v1.dleq?.proof ?? '',
96
+ b: '',
97
+ B: '',
98
+ },
99
+ swap: {
100
+ receiveAddress: v1.swap?.receiveAddress ?? '',
101
+ refundAddress: v1.swap?.refundAddress ?? '',
102
+ },
103
+ };
104
+ }
105
+ //# sourceMappingURL=keystore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keystore.js","sourceRoot":"","sources":["../../src/lib/keystore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import type { Logger } from '../../interfaces/logger.js';
2
+ import type { MoneroTxJson } from './rpc.js';
3
+ /** A scanned output with all fields needed for SweepConstructionData. */
4
+ export interface ScannedOutput {
5
+ /** One-time public key P (32 bytes hex). */
6
+ readonly oneTimePublicKey: string;
7
+ /** Transaction public key R (32 bytes hex). */
8
+ readonly txPublicKey: string;
9
+ /** Index of this output within its transaction. */
10
+ readonly outputIndex: number;
11
+ /** Global output index on the blockchain. */
12
+ readonly globalOutputIndex: number;
13
+ /** Decrypted amount in piconeros. */
14
+ readonly amount: bigint;
15
+ /** RCT commitment blinding factor (32 bytes hex). Computed via WASM. */
16
+ readonly rctMask: string;
17
+ }
18
+ /**
19
+ * Scan a transaction's outputs to find ones belonging to the given keys.
20
+ *
21
+ * @param txJson - Parsed transaction JSON from monerod
22
+ * @param globalOutputIndices - Global indices for each output (from get_transactions response)
23
+ * @param viewKeyHex - Combined private view key (32 bytes hex)
24
+ * @param spendPubHex - Combined public spend key S_a + S_b (32 bytes hex)
25
+ * @param computeMask - Function to compute commitment mask (typically WASM compute_commitment_mask)
26
+ * @param decryptAmountFn - Function to decrypt RCT amount (typically WASM decrypt_amount). If not provided, uses TS fallback.
27
+ * @param logger - Optional structured logger
28
+ * @returns Array of matching outputs with all metadata
29
+ */
30
+ export declare function scanTransactionOutputs(params: {
31
+ readonly txJson: MoneroTxJson;
32
+ readonly globalOutputIndices: readonly number[];
33
+ readonly viewKeyHex: string;
34
+ readonly spendPubHex: string;
35
+ readonly computeMask: (viewKeyHex: string, txPubKeyHex: string, outputIndex: number) => string;
36
+ readonly decryptAmountFn?: (viewKeyHex: string, txPubKeyHex: string, outputIndex: number, encryptedHex: string) => bigint;
37
+ readonly logger?: Logger;
38
+ }): ScannedOutput[];
39
+ /** Extract the tx public key R from the extra field. Tag 0x01 = 32-byte pubkey. */
40
+ export declare function extractTxPubKey(extra: readonly number[]): Uint8Array | null;
41
+ /** Decode a hex-encoded little-endian scalar reduced mod L. */
42
+ export declare function hexToScalar(hex: string): bigint;
43
+ /** Hs(D8 || varint(i)) mod L: keccak output interpreted as a little-endian scalar. */
44
+ export declare function deriveScalar(d8Bytes: Uint8Array, outputIndex: number): bigint;
45
+ /** Keccak256(D8 || varint(i)) as raw 32 bytes. */
46
+ export declare function deriveScalarBytes(d8Bytes: Uint8Array, outputIndex: number): Uint8Array;
47
+ /** Decrypt a Monero RingCT amount (Bulletproofs+ style, 8-byte XOR). */
48
+ export declare function decryptAmount(d8Bytes: Uint8Array, outputIndex: number, ecdhInfo: {
49
+ readonly amount: string;
50
+ } | undefined): bigint;
51
+ /** Encode a number as a Monero varint (unsigned LEB128). */
52
+ export declare function encodeVarint(value: number): Uint8Array;
53
+ //# sourceMappingURL=output-scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-scanner.d.ts","sourceRoot":"","sources":["../../../src/lib/monero/output-scanner.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAQzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,yEAAyE;AACzE,MAAM,WAAW,aAAa;IAC5B,4CAA4C;IAC5C,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,+CAA+C;IAC/C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,mDAAmD;IACnD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,6CAA6C;IAC7C,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,qCAAqC;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,wEAAwE;IACxE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC7C,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,mBAAmB,EAAE,SAAS,MAAM,EAAE,CAAC;IAChD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,MAAM,CAAC;IAC/F,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,MAAM,CAAC;IAC1H,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,aAAa,EAAE,CAuGlB;AAED,mFAAmF;AACnF,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,GAAG,IAAI,CAO3E;AAED,+DAA+D;AAC/D,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,sFAAsF;AACtF,wBAAgB,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAI7E;AAED,kDAAkD;AAClD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,GAAG,UAAU,CAMtF;AAED,wEAAwE;AACxE,wBAAgB,aAAa,CAC3B,OAAO,EAAE,UAAU,EACnB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,GAChD,MAAM,CAiCR;AAED,4DAA4D;AAC5D,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAUtD"}