@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,43 @@
1
+ import type { BlockchainDataProvider } from '../../interfaces/blockchain.js';
2
+ export interface TxCancelVerification {
3
+ readonly verified: boolean;
4
+ readonly reason: string;
5
+ /** Raw TxCancel hex, present on the success path. Needed by client-side refund. */
6
+ readonly txCancelHex?: string;
7
+ /** TxCancel txid (big-endian display form), present on the success path. */
8
+ readonly txCancelTxid?: string;
9
+ /** Block height at which TxCancel confirmed, present on the success path. */
10
+ readonly blockHeight?: number;
11
+ }
12
+ /**
13
+ * Verify a TxCancel transaction on-chain before sharing s_b.
14
+ *
15
+ * @param blockchain Connected blockchain data provider
16
+ * @param txCancelTxid Transaction ID from the server's cancel response
17
+ * @param txCancelHex Raw transaction hex from the server
18
+ * @param lockAddress The P2WSH lock address our BTC was funded to
19
+ * @param network Bitcoin network
20
+ */
21
+ export declare function verifyTxCancel(blockchain: BlockchainDataProvider, txCancelTxid: string, txCancelHex: string, lockAddress: string, network: 'mainnet' | 'testnet' | 'regtest'): Promise<TxCancelVerification>;
22
+ /**
23
+ * Additional check: verify the lock address has been spent (no remaining UTXOs).
24
+ * This is a secondary confirmation that TxCancel actually consumed the locked funds.
25
+ */
26
+ export declare function verifyLockAddressSpent(blockchain: BlockchainDataProvider, lockAddress: string, network: 'mainnet' | 'testnet' | 'regtest'): Promise<boolean>;
27
+ /**
28
+ * Discover and verify TxCancel entirely from on-chain data.
29
+ *
30
+ * Zero server trust — finds TxCancel by querying the lock address's transaction
31
+ * history via Electrum. The lock address will have exactly 2 transactions:
32
+ * TxLock (the deposit) and TxCancel (the spend).
33
+ *
34
+ * If depositTxid is known, we filter it out. If not, we identify TxCancel by
35
+ * checking which transaction spends FROM the lock address (has it as an input).
36
+ *
37
+ * @param blockchain Connected blockchain data provider
38
+ * @param lockAddress The P2WSH lock address
39
+ * @param depositTxid The known deposit (TxLock) txid, or empty string if unknown
40
+ * @param network Bitcoin network
41
+ */
42
+ export declare function discoverAndVerifyTxCancel(blockchain: BlockchainDataProvider, lockAddress: string, depositTxid: string, network: 'mainnet' | 'testnet' | 'regtest'): Promise<TxCancelVerification>;
43
+ //# sourceMappingURL=tx-verify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tx-verify.d.ts","sourceRoot":"","sources":["../../../src/lib/bitcoin/tx-verify.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAI7E,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,mFAAmF;IACnF,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,4EAA4E;IAC5E,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,6EAA6E;IAC7E,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,sBAAsB,EAClC,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GACzC,OAAO,CAAC,oBAAoB,CAAC,CAuC/B;AAsDD;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,sBAAsB,EAClC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GACzC,OAAO,CAAC,OAAO,CAAC,CAQlB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,yBAAyB,CAC7C,UAAU,EAAE,sBAAsB,EAClC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GACzC,OAAO,CAAC,oBAAoB,CAAC,CA6E/B"}
@@ -0,0 +1,202 @@
1
+ /**
2
+ * Independent on-chain verification of TxCancel before sharing s_b.
3
+ *
4
+ * Prevents the collusion attack where the server lies about TxCancel being
5
+ * confirmed in order to trick the client into revealing s_b. If s_b is leaked
6
+ * without a confirmed TxCancel, the maker can combine s_a + s_b to sweep
7
+ * the XMR while keeping the BTC locked (punishing the client).
8
+ *
9
+ * Verification steps:
10
+ * 1. Fetch raw tx from Electrum independently (not from the server)
11
+ * 2. Confirm the server's hex matches the on-chain hex
12
+ * 3. Decode the tx and verify it spends from our known lock address
13
+ * 4. Confirm the tx is included in a block (height > 0)
14
+ */
15
+ import * as bitcoin from 'bitcoinjs-lib';
16
+ import { addressToScriptHash } from './script-hash.js';
17
+ import { uint8ArrayEquals } from '../crypto/bytes.js';
18
+ /**
19
+ * Verify a TxCancel transaction on-chain before sharing s_b.
20
+ *
21
+ * @param blockchain Connected blockchain data provider
22
+ * @param txCancelTxid Transaction ID from the server's cancel response
23
+ * @param txCancelHex Raw transaction hex from the server
24
+ * @param lockAddress The P2WSH lock address our BTC was funded to
25
+ * @param network Bitcoin network
26
+ */
27
+ export async function verifyTxCancel(blockchain, txCancelTxid, txCancelHex, lockAddress, network) {
28
+ const onChainHex = await blockchain.getTransaction(txCancelTxid);
29
+ if (!onChainHex) {
30
+ return { verified: false, reason: 'TxCancel not found on-chain via Electrum' };
31
+ }
32
+ if (onChainHex !== txCancelHex) {
33
+ return {
34
+ verified: false,
35
+ reason: 'Server tx hex does not match on-chain tx — possible tampering',
36
+ };
37
+ }
38
+ const spendsFromLock = verifyTxSpendsFromAddress(onChainHex, lockAddress, network);
39
+ if (!spendsFromLock) {
40
+ return {
41
+ verified: false,
42
+ reason: 'TxCancel does not spend from the expected lock address',
43
+ };
44
+ }
45
+ const height = await blockchain.getTransactionHeight(txCancelTxid);
46
+ if (height <= 0) {
47
+ return {
48
+ verified: false,
49
+ reason: height === 0
50
+ ? 'TxCancel is in the mempool but not yet confirmed'
51
+ : 'Could not verify TxCancel block inclusion',
52
+ };
53
+ }
54
+ return {
55
+ verified: true,
56
+ reason: `Confirmed at block height ${String(height)}`,
57
+ txCancelHex: onChainHex,
58
+ txCancelTxid,
59
+ blockHeight: height,
60
+ };
61
+ }
62
+ /**
63
+ * Decode a raw Bitcoin transaction and check that at least one input
64
+ * spends from the given address (the P2WSH lock address).
65
+ *
66
+ * For P2WSH inputs, the previous output script is not directly in the tx.
67
+ * Instead, we verify using the script hash of the lock address against
68
+ * the Electrum UTXO list. As a belt-and-suspenders check, we also verify
69
+ * the lock address has no remaining UTXOs (the TxCancel spent them).
70
+ */
71
+ function verifyTxSpendsFromAddress(rawHex, lockAddress, network) {
72
+ try {
73
+ const tx = bitcoin.Transaction.fromHex(rawHex);
74
+ const btcNetwork = network === 'mainnet' ? bitcoin.networks.bitcoin : (network === 'regtest' ? bitcoin.networks.regtest : bitcoin.networks.testnet);
75
+ // For P2WSH, the witness script's last push is the redeem script.
76
+ // We can derive the expected scriptPubKey from the lock address and compare.
77
+ const expectedOutput = bitcoin.address.toOutputScript(lockAddress, btcNetwork);
78
+ // In the atomic swap protocol, TxCancel spends the TxLock output which
79
+ // was sent to the P2WSH lock address. The witness contains the redeem script
80
+ // as the last element; hashing it with OP_0 <SHA256> gives us the scriptPubKey.
81
+ for (const input of tx.ins) {
82
+ if (!input.witness || input.witness.length === 0)
83
+ continue;
84
+ // The last witness element for P2WSH is the witness script
85
+ const witnessScript = input.witness[input.witness.length - 1];
86
+ if (!witnessScript || witnessScript.length === 0)
87
+ continue;
88
+ // Derive P2WSH scriptPubKey from the witness script
89
+ const p2wsh = bitcoin.payments.p2wsh({
90
+ redeem: { output: witnessScript },
91
+ network: btcNetwork,
92
+ });
93
+ if (p2wsh.output &&
94
+ uint8ArrayEquals(new Uint8Array(p2wsh.output), new Uint8Array(expectedOutput))) {
95
+ return true;
96
+ }
97
+ }
98
+ return false;
99
+ }
100
+ catch {
101
+ return false;
102
+ }
103
+ }
104
+ /**
105
+ * Additional check: verify the lock address has been spent (no remaining UTXOs).
106
+ * This is a secondary confirmation that TxCancel actually consumed the locked funds.
107
+ */
108
+ export async function verifyLockAddressSpent(blockchain, lockAddress, network) {
109
+ try {
110
+ const scriptHash = addressToScriptHash(lockAddress, network);
111
+ const utxos = await blockchain.listUnspent(scriptHash);
112
+ return utxos.length === 0;
113
+ }
114
+ catch {
115
+ return false;
116
+ }
117
+ }
118
+ /**
119
+ * Discover and verify TxCancel entirely from on-chain data.
120
+ *
121
+ * Zero server trust — finds TxCancel by querying the lock address's transaction
122
+ * history via Electrum. The lock address will have exactly 2 transactions:
123
+ * TxLock (the deposit) and TxCancel (the spend).
124
+ *
125
+ * If depositTxid is known, we filter it out. If not, we identify TxCancel by
126
+ * checking which transaction spends FROM the lock address (has it as an input).
127
+ *
128
+ * @param blockchain Connected blockchain data provider
129
+ * @param lockAddress The P2WSH lock address
130
+ * @param depositTxid The known deposit (TxLock) txid, or empty string if unknown
131
+ * @param network Bitcoin network
132
+ */
133
+ export async function discoverAndVerifyTxCancel(blockchain, lockAddress, depositTxid, network) {
134
+ const scriptHash = addressToScriptHash(lockAddress, network);
135
+ const history = await blockchain.getHistory(scriptHash);
136
+ if (history.length < 2) {
137
+ return {
138
+ verified: false,
139
+ reason: `Lock address has ${String(history.length)} transaction(s) — TxCancel not yet broadcast`,
140
+ };
141
+ }
142
+ // Strategy A: If we know the deposit txid, filter it out
143
+ // Strategy B: If we don't, check each tx to find the one that spends FROM the lock address
144
+ let cancelTxid = '';
145
+ let cancelHeight = 0;
146
+ if (depositTxid) {
147
+ const cancelEntry = history.find((entry) => entry.tx_hash !== depositTxid);
148
+ if (cancelEntry) {
149
+ cancelTxid = cancelEntry.tx_hash;
150
+ cancelHeight = cancelEntry.height;
151
+ }
152
+ }
153
+ // Fallback: iterate history and find the tx that spends from the lock address
154
+ if (!cancelTxid) {
155
+ for (const entry of history) {
156
+ const hex = await blockchain.getTransaction(entry.tx_hash);
157
+ if (!hex)
158
+ continue;
159
+ if (verifyTxSpendsFromAddress(hex, lockAddress, network)) {
160
+ cancelTxid = entry.tx_hash;
161
+ cancelHeight = entry.height;
162
+ break;
163
+ }
164
+ }
165
+ }
166
+ if (!cancelTxid) {
167
+ return {
168
+ verified: false,
169
+ reason: 'Could not identify TxCancel in lock address history',
170
+ };
171
+ }
172
+ if (cancelHeight <= 0) {
173
+ return {
174
+ verified: false,
175
+ reason: cancelHeight === 0
176
+ ? 'TxCancel is in the mempool but not yet confirmed'
177
+ : 'TxCancel has unknown confirmation status',
178
+ };
179
+ }
180
+ const rawHex = await blockchain.getTransaction(cancelTxid);
181
+ if (!rawHex) {
182
+ return {
183
+ verified: false,
184
+ reason: 'Could not fetch TxCancel raw transaction from Electrum',
185
+ };
186
+ }
187
+ const spendsFromLock = verifyTxSpendsFromAddress(rawHex, lockAddress, network);
188
+ if (!spendsFromLock) {
189
+ return {
190
+ verified: false,
191
+ reason: 'Transaction found but does not spend from the lock address',
192
+ };
193
+ }
194
+ return {
195
+ verified: true,
196
+ reason: `TxCancel ${cancelTxid.slice(0, 12)}... confirmed at height ${String(cancelHeight)}`,
197
+ txCancelHex: rawHex,
198
+ txCancelTxid: cancelTxid,
199
+ blockHeight: cancelHeight,
200
+ };
201
+ }
202
+ //# sourceMappingURL=tx-verify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tx-verify.js","sourceRoot":"","sources":["../../../src/lib/bitcoin/tx-verify.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ declare const ECPair: any;
2
+ export interface TempBtcWallet {
3
+ readonly keyPair: ReturnType<typeof ECPair.makeRandom>;
4
+ readonly address: string;
5
+ readonly publicKey: Buffer;
6
+ readonly wif: string;
7
+ }
8
+ /**
9
+ * Create an ephemeral P2WPKH wallet. The private key is held in memory only
10
+ * and must be persisted via `createKeystore` if the caller needs to resume.
11
+ */
12
+ export declare function createTempWallet(network?: 'mainnet' | 'testnet' | 'regtest'): TempBtcWallet;
13
+ /**
14
+ * Sign every input of a PSBT with the wallet's key pair and finalise.
15
+ * Returns the base64-encoded signed PSBT.
16
+ */
17
+ export declare function signPsbt(psbtBase64: string, wallet: TempBtcWallet, network?: 'mainnet' | 'testnet' | 'regtest'): string;
18
+ /**
19
+ * Identity of the lock transaction derivable from an unsigned PSBT.
20
+ *
21
+ * Segwit txid is invariant to signing — it's hash(version, inputs, outputs,
22
+ * locktime) without witnesses — so callers can trust this matches what the
23
+ * sidecar will broadcast after `signFundingPsbt`.
24
+ */
25
+ export interface UnsignedFundingPsbt {
26
+ /** Base64-encoded UNSIGNED PSBT, ready to send to the sidecar in /presigs. */
27
+ readonly psbtBase64: string;
28
+ /** Big-endian display-form txid of the (eventually-signed) lock tx. */
29
+ readonly txid: string;
30
+ /** Index of the lock output within the tx (always 0 for the simple shape). */
31
+ readonly vout: number;
32
+ /** Lock-output value in satoshis. */
33
+ readonly amountSats: number;
34
+ }
35
+ /**
36
+ * Build an UNSIGNED PSBT that pays from the wallet's UTXOs to a lock address.
37
+ *
38
+ * Returns the unsigned PSBT plus the deterministic txid+vout+value the sidecar
39
+ * uses to drive the libp2p protocol's Message2/3 with Alice. Sign later with
40
+ * `signFundingPsbt` once the encsig has been received and a snapshot persisted.
41
+ *
42
+ * @param lockAmountSats — Exact output amount the protocol negotiated. MUST
43
+ * match what Alice expects in Message2; mismatches cause rejection. When
44
+ * omitted, falls back to the total UTXO value (zero mining fee — testing only).
45
+ */
46
+ export declare function buildUnsignedFundingPsbt(wallet: TempBtcWallet, utxos: readonly {
47
+ readonly txid: string;
48
+ readonly vout: number;
49
+ readonly value: number;
50
+ }[], lockAddress: string, network?: 'mainnet' | 'testnet' | 'regtest', lockAmountSats?: number): UnsignedFundingPsbt;
51
+ /**
52
+ * Sign a previously-built unsigned funding PSBT. Returns the base64 of the
53
+ * fully-signed, finalized PSBT, ready to broadcast (or to forward to the
54
+ * sidecar's /fund endpoint).
55
+ */
56
+ export declare function signFundingPsbt(unsignedPsbtBase64: string, wallet: TempBtcWallet, network?: 'mainnet' | 'testnet' | 'regtest'): string;
57
+ /**
58
+ * Backwards-compatible build+sign in one call. Prefer `buildUnsignedFundingPsbt`
59
+ * + `signFundingPsbt` so the snapshot can be written between the two steps.
60
+ */
61
+ export declare function buildAndSignFundingPsbt(wallet: TempBtcWallet, utxos: readonly {
62
+ readonly txid: string;
63
+ readonly vout: number;
64
+ readonly value: number;
65
+ }[], lockAddress: string, network?: 'mainnet' | 'testnet' | 'regtest', lockAmountSats?: number): string;
66
+ /**
67
+ * Recover a wallet instance from a WIF-encoded private key.
68
+ */
69
+ export declare function walletFromWif(wif: string, network?: 'mainnet' | 'testnet' | 'regtest'): TempBtcWallet;
70
+ export {};
71
+ //# sourceMappingURL=wallet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../../src/lib/bitcoin/wallet.ts"],"names":[],"mappings":"AAUA,QAAA,MAAM,MAAM,KAAqB,CAAC;AAElC,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,MAAM,CAAC,UAAU,CAAC,CAAC;IACvD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,SAAS,GAAG,SAAS,GAAG,SAAqB,GAAG,aAAa,CAiBtG;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CACtB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,aAAa,EACrB,OAAO,GAAE,SAAS,GAAG,SAAS,GAAG,SAAqB,GACrD,MAAM,CAQR;AAED;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB;IAClC,8EAA8E;IAC9E,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,uEAAuE;IACvE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,8EAA8E;IAC9E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,qCAAqC;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,EAC1F,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,SAAS,GAAG,SAAS,GAAG,SAAqB,EACtD,cAAc,CAAC,EAAE,MAAM,GACtB,mBAAmB,CA6DrB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,kBAAkB,EAAE,MAAM,EAC1B,MAAM,EAAE,aAAa,EACrB,OAAO,GAAE,SAAS,GAAG,SAAS,GAAG,SAAqB,GACrD,MAAM,CAER;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,EAC1F,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,SAAS,GAAG,SAAS,GAAG,SAAqB,EACtD,cAAc,CAAC,EAAE,MAAM,GACtB,MAAM,CAGR;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,SAAS,GAAG,SAAS,GAAG,SAAqB,GACrD,aAAa,CAiBf"}
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Ephemeral P2WPKH wallet for atomic swap lock transactions.
3
+ * Keys are generated in-memory and persisted only via the keystore file.
4
+ */
5
+ import * as bitcoin from 'bitcoinjs-lib';
6
+ import { ECPairFactory } from 'ecpair';
7
+ import * as ecc from 'tiny-secp256k1';
8
+ import { VerificationError } from '../../types/index.js';
9
+ bitcoin.initEccLib(ecc);
10
+ const ECPair = ECPairFactory(ecc);
11
+ /**
12
+ * Create an ephemeral P2WPKH wallet. The private key is held in memory only
13
+ * and must be persisted via `createKeystore` if the caller needs to resume.
14
+ */
15
+ export function createTempWallet(network = 'mainnet') {
16
+ const net = network === 'mainnet' ? bitcoin.networks.bitcoin : (network === 'regtest' ? bitcoin.networks.regtest : bitcoin.networks.testnet);
17
+ const keyPair = ECPair.makeRandom({ network: net });
18
+ const { address } = bitcoin.payments.p2wpkh({
19
+ pubkey: Buffer.from(keyPair.publicKey),
20
+ network: net,
21
+ });
22
+ if (!address)
23
+ throw new Error('Failed to derive BTC address');
24
+ return {
25
+ keyPair,
26
+ address,
27
+ publicKey: Buffer.from(keyPair.publicKey),
28
+ wif: keyPair.toWIF(),
29
+ };
30
+ }
31
+ /**
32
+ * Sign every input of a PSBT with the wallet's key pair and finalise.
33
+ * Returns the base64-encoded signed PSBT.
34
+ */
35
+ export function signPsbt(psbtBase64, wallet, network = 'mainnet') {
36
+ const net = network === 'mainnet' ? bitcoin.networks.bitcoin : (network === 'regtest' ? bitcoin.networks.regtest : bitcoin.networks.testnet);
37
+ const psbt = bitcoin.Psbt.fromBase64(psbtBase64, { network: net });
38
+ psbt.signAllInputs(wallet.keyPair);
39
+ psbt.finalizeAllInputs();
40
+ return psbt.toBase64();
41
+ }
42
+ /**
43
+ * Build an UNSIGNED PSBT that pays from the wallet's UTXOs to a lock address.
44
+ *
45
+ * Returns the unsigned PSBT plus the deterministic txid+vout+value the sidecar
46
+ * uses to drive the libp2p protocol's Message2/3 with Alice. Sign later with
47
+ * `signFundingPsbt` once the encsig has been received and a snapshot persisted.
48
+ *
49
+ * @param lockAmountSats — Exact output amount the protocol negotiated. MUST
50
+ * match what Alice expects in Message2; mismatches cause rejection. When
51
+ * omitted, falls back to the total UTXO value (zero mining fee — testing only).
52
+ */
53
+ export function buildUnsignedFundingPsbt(wallet, utxos, lockAddress, network = 'mainnet', lockAmountSats) {
54
+ if (utxos.length === 0)
55
+ throw new Error('At least one UTXO is required');
56
+ const net = network === 'mainnet' ? bitcoin.networks.bitcoin : (network === 'regtest' ? bitcoin.networks.regtest : bitcoin.networks.testnet);
57
+ try {
58
+ bitcoin.address.toOutputScript(lockAddress, net);
59
+ }
60
+ catch {
61
+ throw new VerificationError('E_DEST_ADDR_INVALID', `lockAddress ${lockAddress} is invalid for ${network}`);
62
+ }
63
+ const psbt = new bitcoin.Psbt({ network: net });
64
+ const p2wpkh = bitcoin.payments.p2wpkh({
65
+ pubkey: Buffer.from(wallet.keyPair.publicKey),
66
+ network: net,
67
+ });
68
+ if (!p2wpkh.output)
69
+ throw new Error('Failed to derive P2WPKH script');
70
+ const totalInputValue = utxos.reduce((sum, u) => sum + u.value, 0);
71
+ for (const utxo of utxos) {
72
+ psbt.addInput({
73
+ hash: utxo.txid,
74
+ index: utxo.vout,
75
+ witnessUtxo: {
76
+ script: p2wpkh.output,
77
+ value: BigInt(utxo.value),
78
+ },
79
+ });
80
+ }
81
+ const outputSats = lockAmountSats && lockAmountSats > 0 ? lockAmountSats : totalInputValue;
82
+ psbt.addOutput({
83
+ address: lockAddress,
84
+ value: BigInt(outputSats),
85
+ });
86
+ // Read txid from the unsigned tx; segwit txid is fixed once inputs/outputs
87
+ // are set. bitcoinjs-lib doesn't expose an unsigned-Transaction accessor on
88
+ // Psbt, so reconstruct one from the public input/output lists.
89
+ const tx = new bitcoin.Transaction();
90
+ tx.version = 2;
91
+ tx.locktime = 0;
92
+ for (const input of psbt.txInputs) {
93
+ tx.addInput(input.hash, input.index, input.sequence ?? 0xffffffff);
94
+ }
95
+ for (const output of psbt.txOutputs) {
96
+ tx.addOutput(output.script, BigInt(output.value));
97
+ }
98
+ const txid = tx.getId();
99
+ return {
100
+ psbtBase64: psbt.toBase64(),
101
+ txid,
102
+ vout: 0,
103
+ amountSats: outputSats,
104
+ };
105
+ }
106
+ /**
107
+ * Sign a previously-built unsigned funding PSBT. Returns the base64 of the
108
+ * fully-signed, finalized PSBT, ready to broadcast (or to forward to the
109
+ * sidecar's /fund endpoint).
110
+ */
111
+ export function signFundingPsbt(unsignedPsbtBase64, wallet, network = 'mainnet') {
112
+ return signPsbt(unsignedPsbtBase64, wallet, network);
113
+ }
114
+ /**
115
+ * Backwards-compatible build+sign in one call. Prefer `buildUnsignedFundingPsbt`
116
+ * + `signFundingPsbt` so the snapshot can be written between the two steps.
117
+ */
118
+ export function buildAndSignFundingPsbt(wallet, utxos, lockAddress, network = 'mainnet', lockAmountSats) {
119
+ const unsigned = buildUnsignedFundingPsbt(wallet, utxos, lockAddress, network, lockAmountSats);
120
+ return signFundingPsbt(unsigned.psbtBase64, wallet, network);
121
+ }
122
+ /**
123
+ * Recover a wallet instance from a WIF-encoded private key.
124
+ */
125
+ export function walletFromWif(wif, network = 'mainnet') {
126
+ const net = network === 'mainnet' ? bitcoin.networks.bitcoin : (network === 'regtest' ? bitcoin.networks.regtest : bitcoin.networks.testnet);
127
+ const keyPair = ECPair.fromWIF(wif, net);
128
+ const { address } = bitcoin.payments.p2wpkh({
129
+ pubkey: Buffer.from(keyPair.publicKey),
130
+ network: net,
131
+ });
132
+ if (!address)
133
+ throw new Error('Failed to derive BTC address from WIF');
134
+ return {
135
+ keyPair,
136
+ address,
137
+ publicKey: Buffer.from(keyPair.publicKey),
138
+ wif: keyPair.toWIF(),
139
+ };
140
+ }
141
+ //# sourceMappingURL=wallet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../../src/lib/bitcoin/wallet.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,OAAO,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AACxB,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;AASlC;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAA6C,SAAS;IACrF,MAAM,GAAG,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC7I,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IAEpD,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC1C,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;QACtC,OAAO,EAAE,GAAG;KACb,CAAC,CAAC;IAEH,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAE9D,OAAO;QACL,OAAO;QACP,OAAO;QACP,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;QACzC,GAAG,EAAE,OAAO,CAAC,KAAK,EAAE;KACrB,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ,CACtB,UAAkB,EAClB,MAAqB,EACrB,UAA6C,SAAS;IAEtD,MAAM,GAAG,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC7I,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IAEnE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACnC,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAEzB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;AACzB,CAAC;AAoBD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,wBAAwB,CACtC,MAAqB,EACrB,KAA0F,EAC1F,WAAmB,EACnB,UAA6C,SAAS,EACtD,cAAuB;IAEvB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IAEzE,MAAM,GAAG,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC7I,IAAI,CAAC;QACH,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,iBAAiB,CACzB,qBAAqB,EACrB,eAAe,WAAW,mBAAmB,OAAO,EAAE,CACvD,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IAEhD,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;QACrC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;QAC7C,OAAO,EAAE,GAAG;KACb,CAAC,CAAC;IACH,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAEtE,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAEnE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,QAAQ,CAAC;YACZ,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,IAAI;YAChB,WAAW,EAAE;gBACX,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;aAC1B;SACF,CAAC,CAAC;IACL,CAAC;IAED,MAAM,UAAU,GAAG,cAAc,IAAI,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,eAAe,CAAC;IAE3F,IAAI,CAAC,SAAS,CAAC;QACb,OAAO,EAAE,WAAW;QACpB,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC;KAC1B,CAAC,CAAC;IAEH,2EAA2E;IAC3E,4EAA4E;IAC5E,+DAA+D;IAC/D,MAAM,EAAE,GAAG,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IACrC,EAAE,CAAC,OAAO,GAAG,CAAC,CAAC;IACf,EAAE,CAAC,QAAQ,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,IAAI,UAAU,CAAC,CAAC;IACrE,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACpC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACpD,CAAC;IACD,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC;IAExB,OAAO;QACL,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE;QAC3B,IAAI;QACJ,IAAI,EAAE,CAAC;QACP,UAAU,EAAE,UAAU;KACvB,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAC7B,kBAA0B,EAC1B,MAAqB,EACrB,UAA6C,SAAS;IAEtD,OAAO,QAAQ,CAAC,kBAAkB,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AACvD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAAqB,EACrB,KAA0F,EAC1F,WAAmB,EACnB,UAA6C,SAAS,EACtD,cAAuB;IAEvB,MAAM,QAAQ,GAAG,wBAAwB,CAAC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;IAC/F,OAAO,eAAe,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAC/D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,GAAW,EACX,UAA6C,SAAS;IAEtD,MAAM,GAAG,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC7I,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAEzC,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC1C,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;QACtC,OAAO,EAAE,GAAG;KACb,CAAC,CAAC;IAEH,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAEvE,OAAO;QACL,OAAO;QACP,OAAO;QACP,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;QACzC,GAAG,EAAE,OAAO,CAAC,KAAK,EAAE;KACrB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { bytesToHex as toHex, hexToBytes as fromHex } from '@noble/hashes/utils.js';
2
+ export { toHex as bytesToHex, fromHex as hexToBytes };
3
+ /** Byte-wise equality for two `Uint8Array`s of any length. */
4
+ export declare function uint8ArrayEquals(a: Uint8Array, b: Uint8Array): boolean;
5
+ /**
6
+ * Constant-time equality over two equal-length hex strings. Canonical
7
+ * comparator for hex-encoded bytes in the client; used for digest, pubkey, and
8
+ * txid equality checks.
9
+ *
10
+ * @remarks Hex itself is not secret at the boundaries this function is used
11
+ * today, but keeping one comparator avoids footguns when future code compares
12
+ * a secret-dependent hex value.
13
+ */
14
+ export declare function constantTimeEqualHex(a: string, b: string): boolean;
15
+ /**
16
+ * Zero-fill a buffer holding secret bytes. Best-effort; V8 may copy buffers
17
+ * internally, so this is a defence-in-depth mechanism alongside minimising
18
+ * secret lifetime (AV-G.2).
19
+ */
20
+ export declare function wipe(buf: Uint8Array): void;
21
+ //# sourceMappingURL=bytes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bytes.d.ts","sourceRoot":"","sources":["../../../src/lib/crypto/bytes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,IAAI,KAAK,EAAE,UAAU,IAAI,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEpF,OAAO,EAAE,KAAK,IAAI,UAAU,EAAE,OAAO,IAAI,UAAU,EAAE,CAAC;AAEtD,8DAA8D;AAC9D,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,OAAO,CAMtE;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAOlE;AAED;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI,CAE1C"}
@@ -0,0 +1,39 @@
1
+ import { bytesToHex as toHex, hexToBytes as fromHex } from '@noble/hashes/utils.js';
2
+ export { toHex as bytesToHex, fromHex as hexToBytes };
3
+ /** Byte-wise equality for two `Uint8Array`s of any length. */
4
+ export function uint8ArrayEquals(a, b) {
5
+ if (a.length !== b.length)
6
+ return false;
7
+ for (let i = 0; i < a.length; i++) {
8
+ if (a[i] !== b[i])
9
+ return false;
10
+ }
11
+ return true;
12
+ }
13
+ /**
14
+ * Constant-time equality over two equal-length hex strings. Canonical
15
+ * comparator for hex-encoded bytes in the client; used for digest, pubkey, and
16
+ * txid equality checks.
17
+ *
18
+ * @remarks Hex itself is not secret at the boundaries this function is used
19
+ * today, but keeping one comparator avoids footguns when future code compares
20
+ * a secret-dependent hex value.
21
+ */
22
+ export function constantTimeEqualHex(a, b) {
23
+ if (a.length !== b.length)
24
+ return false;
25
+ let acc = 0;
26
+ for (let i = 0; i < a.length; i++) {
27
+ acc |= a.charCodeAt(i) ^ b.charCodeAt(i);
28
+ }
29
+ return acc === 0;
30
+ }
31
+ /**
32
+ * Zero-fill a buffer holding secret bytes. Best-effort; V8 may copy buffers
33
+ * internally, so this is a defence-in-depth mechanism alongside minimising
34
+ * secret lifetime (AV-G.2).
35
+ */
36
+ export function wipe(buf) {
37
+ buf.fill(0);
38
+ }
39
+ //# sourceMappingURL=bytes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bytes.js","sourceRoot":"","sources":["../../../src/lib/crypto/bytes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,IAAI,KAAK,EAAE,UAAU,IAAI,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEpF,OAAO,EAAE,KAAK,IAAI,UAAU,EAAE,OAAO,IAAI,UAAU,EAAE,CAAC;AAEtD,8DAA8D;AAC9D,MAAM,UAAU,gBAAgB,CAAC,CAAa,EAAE,CAAa;IAC3D,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;IAClC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAAC,CAAS,EAAE,CAAS;IACvD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,GAAG,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,GAAG,KAAK,CAAC,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,IAAI,CAAC,GAAe;IAClC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACd,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Unified error class for every WASM-backed operation.
3
+ * `.code` is a stable string matching the Rust-side MiradexWasmError::code()
4
+ * (see ../../../miradex-rust/src).
5
+ */
6
+ export declare class WasmError extends Error {
7
+ readonly code: string;
8
+ readonly cause?: unknown | undefined;
9
+ readonly name = "WasmError";
10
+ constructor(code: string, message: string, cause?: unknown | undefined);
11
+ }
12
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/lib/crypto/errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,qBAAa,SAAU,SAAQ,KAAK;aAGhB,IAAI,EAAE,MAAM;aAEZ,KAAK,CAAC,EAAE,OAAO;IAJjC,QAAQ,CAAC,IAAI,eAAe;gBAEV,IAAI,EAAE,MAAM,EAC5B,OAAO,EAAE,MAAM,EACC,KAAK,CAAC,EAAE,OAAO,YAAA;CAIlC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Unified error class for every WASM-backed operation.
3
+ * `.code` is a stable string matching the Rust-side MiradexWasmError::code()
4
+ * (see ../../../miradex-rust/src).
5
+ */
6
+ export class WasmError extends Error {
7
+ code;
8
+ cause;
9
+ name = 'WasmError';
10
+ constructor(code, message, cause) {
11
+ super(message);
12
+ this.code = code;
13
+ this.cause = cause;
14
+ }
15
+ }
16
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/lib/crypto/errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,OAAO,SAAU,SAAQ,KAAK;IAGhB;IAEA;IAJT,IAAI,GAAG,WAAW,CAAC;IAC5B,YACkB,IAAY,EAC5B,OAAe,EACC,KAAe;QAE/B,KAAK,CAAC,OAAO,CAAC,CAAC;QAJC,SAAI,GAAJ,IAAI,CAAQ;QAEZ,UAAK,GAAL,KAAK,CAAU;IAGjC,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @deprecated Import directly from '@miradex/client' (or './wasm.js').
3
+ * This file re-exports the unified surface for backwards compatibility.
4
+ * Scheduled for removal in 0.4.0.
5
+ */
6
+ import { WasmError } from './errors.js';
7
+ export { ensureWasm as ensureKeygen, generateClientKeys, generateClientKeysFromSeed, verifyDleqProof, signDigest, encsignDigest, decryptSignature, verifyEncsig, recoverAdaptorScalar, isKeygenAvailable, initKeygen, } from './wasm.js';
8
+ /**
9
+ * Legacy error class retained for downstream `new KeygenError(...)` and
10
+ * `err.name === 'KeygenError'` patterns. Thrown errors from the new unified
11
+ * loader are plain `WasmError` instances; this subclass is for direct
12
+ * construction by consumers.
13
+ */
14
+ export declare class KeygenError extends WasmError {
15
+ constructor(message: string, code?: string, cause?: unknown);
16
+ }
17
+ export type { WasmModule as KeygenWasmModule } from './types.js';
18
+ export type { EnsureWasmOptions as EnsureKeygenOptions } from './wasm.js';
19
+ //# sourceMappingURL=keygen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keygen.d.ts","sourceRoot":"","sources":["../../../src/lib/crypto/keygen.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EACL,UAAU,IAAI,YAAY,EAC1B,kBAAkB,EAClB,0BAA0B,EAC1B,eAAe,EACf,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,oBAAoB,EACpB,iBAAiB,EACjB,UAAU,GACX,MAAM,WAAW,CAAC;AAEnB;;;;;GAKG;AACH,qBAAa,WAAY,SAAQ,SAAS;gBAC5B,OAAO,EAAE,MAAM,EAAE,IAAI,SAAa,EAAE,KAAK,CAAC,EAAE,OAAO;CAQhE;AAED,YAAY,EAAE,UAAU,IAAI,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACjE,YAAY,EAAE,iBAAiB,IAAI,mBAAmB,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * @deprecated Import directly from '@miradex/client' (or './wasm.js').
3
+ * This file re-exports the unified surface for backwards compatibility.
4
+ * Scheduled for removal in 0.4.0.
5
+ */
6
+ import { WasmError } from './errors.js';
7
+ export { ensureWasm as ensureKeygen, generateClientKeys, generateClientKeysFromSeed, verifyDleqProof, signDigest, encsignDigest, decryptSignature, verifyEncsig, recoverAdaptorScalar, isKeygenAvailable, initKeygen, } from './wasm.js';
8
+ /**
9
+ * Legacy error class retained for downstream `new KeygenError(...)` and
10
+ * `err.name === 'KeygenError'` patterns. Thrown errors from the new unified
11
+ * loader are plain `WasmError` instances; this subclass is for direct
12
+ * construction by consumers.
13
+ */
14
+ export class KeygenError extends WasmError {
15
+ constructor(message, code = 'E_KEYGEN', cause) {
16
+ super(code, message, cause);
17
+ Object.defineProperty(this, 'name', {
18
+ value: 'KeygenError',
19
+ writable: false,
20
+ configurable: true,
21
+ });
22
+ }
23
+ }
24
+ //# sourceMappingURL=keygen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keygen.js","sourceRoot":"","sources":["../../../src/lib/crypto/keygen.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EACL,UAAU,IAAI,YAAY,EAC1B,kBAAkB,EAClB,0BAA0B,EAC1B,eAAe,EACf,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,oBAAoB,EACpB,iBAAiB,EACjB,UAAU,GACX,MAAM,WAAW,CAAC;AAEnB;;;;;GAKG;AACH,MAAM,OAAO,WAAY,SAAQ,SAAS;IACxC,YAAY,OAAe,EAAE,IAAI,GAAG,UAAU,EAAE,KAAe;QAC7D,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAC5B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE;YAClC,KAAK,EAAE,aAAa;YACpB,QAAQ,EAAE,KAAK;YACf,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;IACL,CAAC;CACF"}