@miradexio/client 0.1.1 → 0.1.3

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 (317) hide show
  1. package/README.md +57 -292
  2. package/dist/address/base58.d.ts.map +1 -1
  3. package/dist/address/base58.js +1 -2
  4. package/dist/address/base58.js.map +1 -1
  5. package/dist/address/bech32.d.ts +0 -8
  6. package/dist/address/bech32.d.ts.map +1 -1
  7. package/dist/address/bech32.js +3 -9
  8. package/dist/address/bech32.js.map +1 -1
  9. package/dist/address/evm.d.ts.map +1 -1
  10. package/dist/address/evm.js +1 -2
  11. package/dist/address/evm.js.map +1 -1
  12. package/dist/address/index.d.ts +0 -6
  13. package/dist/address/index.d.ts.map +1 -1
  14. package/dist/address/index.js +6 -9
  15. package/dist/address/index.js.map +1 -1
  16. package/dist/address/monero.d.ts +0 -10
  17. package/dist/address/monero.d.ts.map +1 -1
  18. package/dist/address/monero.js +4 -10
  19. package/dist/address/monero.js.map +1 -1
  20. package/dist/address/polkadot.d.ts +0 -5
  21. package/dist/address/polkadot.d.ts.map +1 -1
  22. package/dist/address/polkadot.js +2 -6
  23. package/dist/address/polkadot.js.map +1 -1
  24. package/dist/address/ton.d.ts +0 -6
  25. package/dist/address/ton.d.ts.map +1 -1
  26. package/dist/address/ton.js +3 -8
  27. package/dist/address/ton.js.map +1 -1
  28. package/dist/api/index.d.ts +0 -19
  29. package/dist/api/index.d.ts.map +1 -1
  30. package/dist/api/index.js +18 -37
  31. package/dist/api/index.js.map +1 -1
  32. package/dist/atomic-swap/drive.d.ts +0 -13
  33. package/dist/atomic-swap/drive.d.ts.map +1 -1
  34. package/dist/atomic-swap/drive.js +72 -114
  35. package/dist/atomic-swap/drive.js.map +1 -1
  36. package/dist/atomic-swap/extract.d.ts +0 -23
  37. package/dist/atomic-swap/extract.d.ts.map +1 -1
  38. package/dist/atomic-swap/extract.js +6 -16
  39. package/dist/atomic-swap/extract.js.map +1 -1
  40. package/dist/atomic-swap/index.d.ts +0 -7
  41. package/dist/atomic-swap/index.d.ts.map +1 -1
  42. package/dist/atomic-swap/index.js +1 -7
  43. package/dist/atomic-swap/index.js.map +1 -1
  44. package/dist/atomic-swap/monero-sweep/errors.d.ts.map +1 -1
  45. package/dist/atomic-swap/monero-sweep/errors.js +5 -20
  46. package/dist/atomic-swap/monero-sweep/errors.js.map +1 -1
  47. package/dist/atomic-swap/monero-sweep/index.d.ts +1 -13
  48. package/dist/atomic-swap/monero-sweep/index.d.ts.map +1 -1
  49. package/dist/atomic-swap/monero-sweep/index.js +36 -65
  50. package/dist/atomic-swap/monero-sweep/index.js.map +1 -1
  51. package/dist/atomic-swap/monero-sweep/ring-select.d.ts +0 -4
  52. package/dist/atomic-swap/monero-sweep/ring-select.d.ts.map +1 -1
  53. package/dist/atomic-swap/monero-sweep/ring-select.js +9 -21
  54. package/dist/atomic-swap/monero-sweep/ring-select.js.map +1 -1
  55. package/dist/atomic-swap/presign.d.ts +0 -63
  56. package/dist/atomic-swap/presign.d.ts.map +1 -1
  57. package/dist/atomic-swap/presign.js +30 -90
  58. package/dist/atomic-swap/presign.js.map +1 -1
  59. package/dist/atomic-swap/refund.d.ts +0 -18
  60. package/dist/atomic-swap/refund.d.ts.map +1 -1
  61. package/dist/atomic-swap/refund.js +16 -32
  62. package/dist/atomic-swap/refund.js.map +1 -1
  63. package/dist/atomic-swap/run.d.ts +0 -17
  64. package/dist/atomic-swap/run.d.ts.map +1 -1
  65. package/dist/atomic-swap/run.js +11 -25
  66. package/dist/atomic-swap/run.js.map +1 -1
  67. package/dist/atomic-swap/snapshot.d.ts +0 -30
  68. package/dist/atomic-swap/snapshot.d.ts.map +1 -1
  69. package/dist/atomic-swap/snapshot.js +8 -23
  70. package/dist/atomic-swap/snapshot.js.map +1 -1
  71. package/dist/atomic-swap/submit-encsig.d.ts +0 -7
  72. package/dist/atomic-swap/submit-encsig.d.ts.map +1 -1
  73. package/dist/atomic-swap/submit-encsig.js +8 -15
  74. package/dist/atomic-swap/submit-encsig.js.map +1 -1
  75. package/dist/atomic-swap/types.d.ts +2 -55
  76. package/dist/atomic-swap/types.d.ts.map +1 -1
  77. package/dist/atomic-swap/types.js +2 -3
  78. package/dist/atomic-swap/types.js.map +1 -1
  79. package/dist/blockchain/quorum-provider.d.ts +0 -15
  80. package/dist/blockchain/quorum-provider.d.ts.map +1 -1
  81. package/dist/blockchain/quorum-provider.js +7 -9
  82. package/dist/blockchain/quorum-provider.js.map +1 -1
  83. package/dist/cooperative-redeem.d.ts +5 -14
  84. package/dist/cooperative-redeem.d.ts.map +1 -1
  85. package/dist/cooperative-redeem.js +3 -20
  86. package/dist/cooperative-redeem.js.map +1 -1
  87. package/dist/engine/blockchain-querier.d.ts +0 -22
  88. package/dist/engine/blockchain-querier.d.ts.map +1 -1
  89. package/dist/engine/engine-state.d.ts +0 -8
  90. package/dist/engine/engine-state.d.ts.map +1 -1
  91. package/dist/engine/engine-state.js.map +1 -1
  92. package/dist/engine/flow-context.d.ts +0 -20
  93. package/dist/engine/flow-context.d.ts.map +1 -1
  94. package/dist/engine/flow-context.js +17 -41
  95. package/dist/engine/flow-context.js.map +1 -1
  96. package/dist/engine/flows/atomic-flow-state.d.ts +8 -1
  97. package/dist/engine/flows/atomic-flow-state.d.ts.map +1 -1
  98. package/dist/engine/flows/atomic-flow.d.ts +1 -28
  99. package/dist/engine/flows/atomic-flow.d.ts.map +1 -1
  100. package/dist/engine/flows/atomic-flow.js +98 -128
  101. package/dist/engine/flows/atomic-flow.js.map +1 -1
  102. package/dist/engine/flows/error-routing.d.ts +11 -0
  103. package/dist/engine/flows/error-routing.d.ts.map +1 -0
  104. package/dist/engine/flows/error-routing.js +17 -0
  105. package/dist/engine/flows/error-routing.js.map +1 -0
  106. package/dist/engine/flows/swap-flow.d.ts +0 -19
  107. package/dist/engine/flows/swap-flow.d.ts.map +1 -1
  108. package/dist/engine/flows/swap-flow.js +41 -83
  109. package/dist/engine/flows/swap-flow.js.map +1 -1
  110. package/dist/engine/miradex-engine.d.ts +1 -62
  111. package/dist/engine/miradex-engine.d.ts.map +1 -1
  112. package/dist/engine/miradex-engine.js +18 -50
  113. package/dist/engine/miradex-engine.js.map +1 -1
  114. package/dist/engine/pipeline.d.ts +0 -11
  115. package/dist/engine/pipeline.d.ts.map +1 -1
  116. package/dist/engine/pipeline.js +11 -21
  117. package/dist/engine/pipeline.js.map +1 -1
  118. package/dist/engine/platform.d.ts +0 -160
  119. package/dist/engine/platform.d.ts.map +1 -1
  120. package/dist/engine/platform.js +2 -0
  121. package/dist/engine/platform.js.map +1 -1
  122. package/dist/index.d.ts.map +1 -1
  123. package/dist/index.js +7 -11
  124. package/dist/index.js.map +1 -1
  125. package/dist/interfaces/blockchain.d.ts +1 -13
  126. package/dist/interfaces/blockchain.d.ts.map +1 -1
  127. package/dist/interfaces/blockchain.js +1 -0
  128. package/dist/interfaces/blockchain.js.map +1 -1
  129. package/dist/interfaces/logger.d.ts +0 -6
  130. package/dist/interfaces/logger.d.ts.map +1 -1
  131. package/dist/interfaces/logger.js.map +1 -1
  132. package/dist/lib/bitcoin/deposit-watcher.d.ts +0 -23
  133. package/dist/lib/bitcoin/deposit-watcher.d.ts.map +1 -1
  134. package/dist/lib/bitcoin/deposit-watcher.js +7 -31
  135. package/dist/lib/bitcoin/deposit-watcher.js.map +1 -1
  136. package/dist/lib/bitcoin/script-hash.d.ts.map +1 -1
  137. package/dist/lib/bitcoin/script-hash.js +2 -6
  138. package/dist/lib/bitcoin/script-hash.js.map +1 -1
  139. package/dist/lib/bitcoin/sweep.d.ts +0 -30
  140. package/dist/lib/bitcoin/sweep.d.ts.map +1 -1
  141. package/dist/lib/bitcoin/sweep.js +11 -40
  142. package/dist/lib/bitcoin/sweep.js.map +1 -1
  143. package/dist/lib/bitcoin/tx-verify.d.ts +0 -28
  144. package/dist/lib/bitcoin/tx-verify.d.ts.map +1 -1
  145. package/dist/lib/bitcoin/tx-verify.js +20 -61
  146. package/dist/lib/bitcoin/tx-verify.js.map +1 -1
  147. package/dist/lib/bitcoin/wallet.d.ts +0 -38
  148. package/dist/lib/bitcoin/wallet.d.ts.map +1 -1
  149. package/dist/lib/bitcoin/wallet.js +13 -38
  150. package/dist/lib/bitcoin/wallet.js.map +1 -1
  151. package/dist/lib/crypto/bytes.d.ts +0 -14
  152. package/dist/lib/crypto/bytes.d.ts.map +1 -1
  153. package/dist/lib/crypto/bytes.js +5 -14
  154. package/dist/lib/crypto/bytes.js.map +1 -1
  155. package/dist/lib/crypto/errors.d.ts +0 -5
  156. package/dist/lib/crypto/errors.d.ts.map +1 -1
  157. package/dist/lib/crypto/errors.js +2 -5
  158. package/dist/lib/crypto/errors.js.map +1 -1
  159. package/dist/lib/crypto/libp2p-identity.d.ts +0 -15
  160. package/dist/lib/crypto/libp2p-identity.d.ts.map +1 -1
  161. package/dist/lib/crypto/libp2p-identity.js +16 -28
  162. package/dist/lib/crypto/libp2p-identity.js.map +1 -1
  163. package/dist/lib/crypto/mnemonic.d.ts +0 -9
  164. package/dist/lib/crypto/mnemonic.d.ts.map +1 -1
  165. package/dist/lib/crypto/mnemonic.js +11 -27
  166. package/dist/lib/crypto/mnemonic.js.map +1 -1
  167. package/dist/lib/crypto/platform.d.ts +0 -6
  168. package/dist/lib/crypto/platform.d.ts.map +1 -1
  169. package/dist/lib/crypto/platform.js +2 -6
  170. package/dist/lib/crypto/platform.js.map +1 -1
  171. package/dist/lib/crypto/scalars.d.ts +0 -23
  172. package/dist/lib/crypto/scalars.d.ts.map +1 -1
  173. package/dist/lib/crypto/scalars.js +10 -23
  174. package/dist/lib/crypto/scalars.js.map +1 -1
  175. package/dist/lib/crypto/types.d.ts +0 -4
  176. package/dist/lib/crypto/types.d.ts.map +1 -1
  177. package/dist/lib/crypto/wasm.d.ts +0 -23
  178. package/dist/lib/crypto/wasm.d.ts.map +1 -1
  179. package/dist/lib/crypto/wasm.js +9 -16
  180. package/dist/lib/crypto/wasm.js.map +1 -1
  181. package/dist/lib/default-config.d.ts +1 -59
  182. package/dist/lib/default-config.d.ts.map +1 -1
  183. package/dist/lib/default-config.js +22 -61
  184. package/dist/lib/default-config.js.map +1 -1
  185. package/dist/lib/errors.d.ts +0 -54
  186. package/dist/lib/errors.d.ts.map +1 -1
  187. package/dist/lib/errors.js +12 -35
  188. package/dist/lib/errors.js.map +1 -1
  189. package/dist/lib/keystore.d.ts +0 -24
  190. package/dist/lib/keystore.d.ts.map +1 -1
  191. package/dist/lib/keystore.js +3 -10
  192. package/dist/lib/keystore.js.map +1 -1
  193. package/dist/lib/monero/output-scanner.d.ts +0 -18
  194. package/dist/lib/monero/output-scanner.d.ts.map +1 -1
  195. package/dist/lib/monero/output-scanner.js +17 -40
  196. package/dist/lib/monero/output-scanner.js.map +1 -1
  197. package/dist/lib/monero/rpc.d.ts +0 -64
  198. package/dist/lib/monero/rpc.d.ts.map +1 -1
  199. package/dist/lib/monero/rpc.js +17 -59
  200. package/dist/lib/monero/rpc.js.map +1 -1
  201. package/dist/lib/monero/verify-lock.d.ts +0 -12
  202. package/dist/lib/monero/verify-lock.d.ts.map +1 -1
  203. package/dist/lib/monero/verify-lock.js +9 -24
  204. package/dist/lib/monero/verify-lock.js.map +1 -1
  205. package/dist/lib/monero/verify-sweep.d.ts +0 -20
  206. package/dist/lib/monero/verify-sweep.d.ts.map +1 -1
  207. package/dist/lib/monero/verify-sweep.js +7 -25
  208. package/dist/lib/monero/verify-sweep.js.map +1 -1
  209. package/dist/lib/pow-solver.d.ts.map +1 -1
  210. package/dist/lib/pow-solver.js +3 -8
  211. package/dist/lib/pow-solver.js.map +1 -1
  212. package/dist/lib/retry.d.ts +7 -64
  213. package/dist/lib/retry.d.ts.map +1 -1
  214. package/dist/lib/retry.js +13 -13
  215. package/dist/lib/retry.js.map +1 -1
  216. package/dist/portable.d.ts.map +1 -1
  217. package/dist/portable.js +3 -4
  218. package/dist/portable.js.map +1 -1
  219. package/dist/quote-binding.d.ts +0 -13
  220. package/dist/quote-binding.d.ts.map +1 -1
  221. package/dist/quote-binding.js +3 -18
  222. package/dist/quote-binding.js.map +1 -1
  223. package/dist/swap-executor.d.ts +1 -5
  224. package/dist/swap-executor.d.ts.map +1 -1
  225. package/dist/swap-executor.js +1 -1
  226. package/dist/swap-executor.js.map +1 -1
  227. package/dist/types/api.d.ts +0 -6
  228. package/dist/types/api.d.ts.map +1 -1
  229. package/dist/types/api.js +6 -9
  230. package/dist/types/api.js.map +1 -1
  231. package/dist/types/errors.d.ts +0 -7
  232. package/dist/types/errors.d.ts.map +1 -1
  233. package/dist/types/errors.js +2 -7
  234. package/dist/types/errors.js.map +1 -1
  235. package/dist/types/index.js +1 -1
  236. package/dist/types/index.js.map +1 -1
  237. package/dist/types/keys.d.ts +0 -15
  238. package/dist/types/keys.d.ts.map +1 -1
  239. package/dist/types/protocol.d.ts +0 -51
  240. package/dist/types/protocol.d.ts.map +1 -1
  241. package/dist/types/protocol.js +3 -8
  242. package/dist/types/protocol.js.map +1 -1
  243. package/dist/types/status.d.ts +2 -0
  244. package/dist/types/status.d.ts.map +1 -1
  245. package/dist/types/status.js +17 -14
  246. package/dist/types/status.js.map +1 -1
  247. package/dist/types/verification.d.ts +0 -10
  248. package/dist/types/verification.d.ts.map +1 -1
  249. package/dist/types/verification.js +7 -15
  250. package/dist/types/verification.js.map +1 -1
  251. package/dist/verification/chainflip-networks.d.ts +2 -35
  252. package/dist/verification/chainflip-networks.d.ts.map +1 -1
  253. package/dist/verification/chainflip-networks.js +12 -4
  254. package/dist/verification/chainflip-networks.js.map +1 -1
  255. package/dist/verification/chainflip.d.ts +0 -40
  256. package/dist/verification/chainflip.d.ts.map +1 -1
  257. package/dist/verification/chainflip.js +49 -129
  258. package/dist/verification/chainflip.js.map +1 -1
  259. package/dist/verification/constants.d.ts +0 -40
  260. package/dist/verification/constants.d.ts.map +1 -1
  261. package/dist/verification/constants.js +14 -40
  262. package/dist/verification/constants.js.map +1 -1
  263. package/dist/verification/index.d.ts +0 -26
  264. package/dist/verification/index.d.ts.map +1 -1
  265. package/dist/verification/index.js +8 -12
  266. package/dist/verification/index.js.map +1 -1
  267. package/dist/verification/memo.d.ts +0 -15
  268. package/dist/verification/memo.d.ts.map +1 -1
  269. package/dist/verification/memo.js +9 -27
  270. package/dist/verification/memo.js.map +1 -1
  271. package/dist/verification/near-intents.d.ts +0 -63
  272. package/dist/verification/near-intents.d.ts.map +1 -1
  273. package/dist/verification/near-intents.js +25 -67
  274. package/dist/verification/near-intents.js.map +1 -1
  275. package/dist/verification/rate-oracle.d.ts +0 -22
  276. package/dist/verification/rate-oracle.d.ts.map +1 -1
  277. package/dist/verification/rate-oracle.js +6 -11
  278. package/dist/verification/rate-oracle.js.map +1 -1
  279. package/dist/verification/thorchain-networks.d.ts +0 -27
  280. package/dist/verification/thorchain-networks.d.ts.map +1 -1
  281. package/dist/verification/thorchain-networks.js +13 -15
  282. package/dist/verification/thorchain-networks.js.map +1 -1
  283. package/dist/verification/thorchain.d.ts +0 -30
  284. package/dist/verification/thorchain.d.ts.map +1 -1
  285. package/dist/verification/thorchain.js +24 -47
  286. package/dist/verification/thorchain.js.map +1 -1
  287. package/dist/wasm-pins.d.ts +3 -3
  288. package/dist/wasm-pins.js +1 -1
  289. package/dist/wire/near-intents.zod.d.ts +0 -27
  290. package/dist/wire/near-intents.zod.d.ts.map +1 -1
  291. package/dist/wire/near-intents.zod.js +15 -23
  292. package/dist/wire/near-intents.zod.js.map +1 -1
  293. package/dist/wire/server/action.zod.d.ts +0 -10
  294. package/dist/wire/server/action.zod.d.ts.map +1 -1
  295. package/dist/wire/server/action.zod.js +8 -14
  296. package/dist/wire/server/action.zod.js.map +1 -1
  297. package/dist/wire/server/common.zod.d.ts +0 -13
  298. package/dist/wire/server/common.zod.d.ts.map +1 -1
  299. package/dist/wire/server/common.zod.js +6 -14
  300. package/dist/wire/server/common.zod.js.map +1 -1
  301. package/dist/wire/server/quotes.zod.d.ts +35 -20
  302. package/dist/wire/server/quotes.zod.d.ts.map +1 -1
  303. package/dist/wire/server/quotes.zod.js +1 -0
  304. package/dist/wire/server/quotes.zod.js.map +1 -1
  305. package/dist/wire/server/swap.zod.d.ts +0 -42
  306. package/dist/wire/server/swap.zod.d.ts.map +1 -1
  307. package/dist/wire/server/swap.zod.js +12 -26
  308. package/dist/wire/server/swap.zod.js.map +1 -1
  309. package/dist/wire/thorchain.zod.d.ts +0 -8
  310. package/dist/wire/thorchain.zod.d.ts.map +1 -1
  311. package/dist/wire/thorchain.zod.js +3 -8
  312. package/dist/wire/thorchain.zod.js.map +1 -1
  313. package/package.json +4 -4
  314. package/wasm/miradex-rust/README.md +3 -4
  315. package/wasm/miradex-rust/miradex_rust.d.ts +4 -6
  316. package/wasm/miradex-rust/miradex_rust.js +4 -6
  317. package/wasm/miradex-rust/miradex_rust_bg.wasm +0 -0
package/README.md CHANGED
@@ -1,72 +1,25 @@
1
- # @miradex/client
1
+ # @miradexio/client
2
2
 
3
- Headless TypeScript SDK for cross-chain swaps. Runs entirely in your
4
- process browser, Node.js and does the
5
- security-critical work itself: key generation, signing, deposit
6
- verification, adaptor-signature handling, on-chain state recovery,
7
- and the BTC↔XMR atomic-swap drive loop. The server proposes state;
8
- the SDK verifies every claim against an independent on-chain source.
9
- A compromised server cannot move user funds.
10
-
11
- ## Providers
12
-
13
- | Provider | Pairs | Settlement model |
14
- | --- | --- | --- |
15
- | `atomicswap` | BTC ↔ XMR | Cryptographic atomic swap (HTLC + adaptor signatures) |
16
- | `thorchain` | 13 native gas assets (BTC, ETH, BSC, AVAX, …) | THORChain TSS-managed vaults |
17
- | `chainflip` | BTC, ETH, ARB, DOT, SOL — multiple assets | Chainflip state-chain deposit channels |
18
- | `near_intents` | 16 chains | Solver-pulled intent settlement (Defuse 1Click) |
19
-
20
- `atomicswap` is the only provider that is non-custodial in the strict
21
- cryptographic sense — funds are never under any third-party control
22
- at any step. The other three move funds through validator-managed
23
- vaults or solver escrows; the SDK still verifies every state claim
24
- against the upstream's own infrastructure, but the atomic-swap
25
- protocol's trust model is qualitatively different and is documented
26
- separately in
27
- [`ATOMIC-SWAP-PAPER.md`](./ATOMIC-SWAP-PAPER.md).
28
- Per-provider trust analysis is in [`PROTOCOLS.md`](./PROTOCOLS.md).
29
-
30
- ---
31
-
32
- ## Table of contents
33
-
34
- - [@miradex/client](#miradexclient)
35
- - [Providers](#providers)
36
- - [Table of contents](#table-of-contents)
37
- - [Quick start](#quick-start)
38
- - [Providers](#providers-1)
39
- - [`atomicswap`](#atomicswap)
40
- - [`thorchain`](#thorchain)
41
- - [`chainflip`](#chainflip)
42
- - [`near_intents`](#near_intents)
43
- - [The SDK surface](#the-sdk-surface)
44
- - [Sub-path exports](#sub-path-exports)
45
- - [`PlatformAdapter`](#platformadapter)
46
- - [Direct entry points](#direct-entry-points)
47
- - [Events](#events)
48
- - [Security model](#security-model)
49
- - [Configuration](#configuration)
50
- - [`EngineConfig`](#engineconfig)
51
- - [Errors](#errors)
52
- - [Build](#build)
53
- - [Building from source](#building-from-source)
54
- - [License](#license)
55
-
56
- ---
3
+ TypeScript SDK for cross-chain swaps. Runs in-process in the
4
+ browser or in Node, holding keys and signing locally. The server
5
+ is untrusted: every state claim is verified on-chain. For BTC↔XMR
6
+ the SDK runs the full atomic-swap drive loop itself; for THORChain,
7
+ Chainflip, and NEAR Intents it verifies the deposit binding against
8
+ the upstream's own infrastructure (THORNode/Midgard, Chainflip
9
+ broker, 1Click).
57
10
 
58
11
  ## Quick start
59
12
 
60
13
  ```bash
61
- pnpm add @miradex/client
14
+ pnpm add @miradexio/client
62
15
  # or
63
- npm install @miradex/client
16
+ npm install @miradexio/client
64
17
  ```
65
18
 
66
19
  ```ts
67
- import { MiradexEngine, type PlatformAdapter } from '@miradex/client';
20
+ import { MiradexEngine, type PlatformAdapter } from '@miradexio/client';
68
21
 
69
- const platform: PlatformAdapter = /* see §PlatformAdapter */;
22
+ const platform: PlatformAdapter = /* see PlatformAdapter below */;
70
23
 
71
24
  const engine = new MiradexEngine(
72
25
  {
@@ -88,7 +41,7 @@ await engine.startAtomicSwap({
88
41
  refundAddress: 'bc1q...',
89
42
  });
90
43
 
91
- // Anything else (thorchain, chainflip, near_intents)
44
+ // Routed providers (thorchain, chainflip, near_intents)
92
45
  const { quotes } = await engine.apiClient.getQuotes({
93
46
  from: 'BTC',
94
47
  to: 'ETH',
@@ -106,170 +59,52 @@ await engine.startSwap({
106
59
  });
107
60
  ```
108
61
 
109
- The engine takes care of quoting via the server, generating
110
- client-side keys and persisting the keystore (atomic-swap only),
111
- driving the swap state machine with verification at every step, and
112
- emitting `EngineEvents` so a UI can render progress.
113
-
114
- The full per-provider drive — every protocol step, every
115
- verification, every error — lives in
116
- [`PROTOCOLS.md`](./PROTOCOLS.md). The BTC↔XMR atomic-swap protocol gets
117
- its own attack-by-attack analysis in
118
- [`ATOMIC-SWAP-PAPER.md`](./ATOMIC-SWAP-PAPER.md).
119
-
120
62
  ---
121
63
 
122
64
  ## Providers
123
65
 
124
- ### `atomicswap`
125
-
126
- BTC XMR via the eigenwallet-style two-curve atomic-swap protocol.
127
- The only provider that is non-custodial in the strict cryptographic
128
- sense: BTC is locked into a 2-of-2 P2WSH
129
- (`<A> CHECKSIGVERIFY <B> CHECKSIG`) before XMR is locked, and the
130
- adaptor-signature construction binds Alice's BTC redemption to
131
- revealing the Monero scalar Bob needs to derive the joint Monero
132
- spend key. Refund and punish paths are timelocked Bitcoin script;
133
- liveness past the cancel window is the only operational requirement
134
- on Bob.
135
-
136
- The SDK independently:
137
-
138
- - Verifies Alice's DLEQ proof in WASM before any BTC is broadcast.
139
- - Derives the lock address locally from `(A, B)` and rejects any
140
- server-supplied address that does not match.
141
- - Recomputes the BIP143 sighash for `TxRedeem` and constant-time
142
- compares it against the server's claim before adaptor-signing.
143
- - Fetches the XMR lock tx from a quorum of monerod nodes, re-derives
144
- the joint output key, and rejects `unlock_time != 0`.
145
- - Verifies the recovered `s_a` satisfies `s_a · G == S_a_monero`
146
- before sweeping.
147
- - Bounds-checks every BIP68 sequence, every fee, and the amnesty
148
- amount against the configured policy.
149
- - Refuses to broadcast `TxLock` without first persisting a recovery
150
- snapshot.
151
-
152
- If anything goes wrong the SDK can refund autonomously without the
153
- server: `verifyTxCancel` reads `TxCancel` from Electrum, decrypts
154
- Alice's `tx_full_refund_encsig` with `s_b`, signs with `b`, and
155
- broadcasts.
156
-
157
- ### `thorchain`
158
-
159
- 13 native gas assets (BTC, ETH, BSC, AVAX, …) via THORChain's Asgard
160
- threshold-signature vaults. The user deposits the source asset to a
161
- vault address; THORChain's validator set synthesises the destination
162
- asset from its liquidity pools and broadcasts an outbound tx to the
163
- destination address. Failed trades auto-refund to the inbound
164
- sender.
165
-
166
- The SDK independently:
167
-
168
- - Reads the active vault list from THORNode and Midgard directly
169
- (hardcoded URLs per network in
170
- [`thorchain-networks.ts`](./src/verification/thorchain-networks.ts)
171
- — the server cannot redirect verification to its own nodes).
172
- - Confirms the deposit address is an active vault.
173
- - Parses the registered memo and confirms it binds to the user's
174
- destination address.
175
-
176
- ### `chainflip`
177
-
178
- BTC, ETH, ARB, DOT, SOL via Chainflip's per-swap deposit channels.
179
- Each trade gets a unique deposit address with an explicit
180
- destination + refund-address binding committed at channel creation.
181
- The validator set executes the swap and sends the output to the
182
- bound destination; failures or expiries auto-refund.
183
-
184
- The SDK independently:
185
-
186
- - Reads the channel from the Chainflip broker REST or state-chain
187
- JSON-RPC (hardcoded broker endpoints per network).
188
- - Confirms the channel's destination and refund addresses match
189
- what the user supplied.
190
- - Confirms the source/destination chains match the requested swap.
191
-
192
- ### `near_intents`
193
-
194
- 16 chains (TRON, TON, XRP, Optimism, Doge, BCH, …) via Defuse 1Click.
195
- The 1Click backend returns a per-quote deposit address; a solver
196
- fronts the destination asset on the destination chain and claims the
197
- deposit on the source chain after settlement. 1Click auto-refunds to
198
- `refundTo` if the deposit lands after deadline or no solver bids.
199
-
200
- The SDK independently:
201
-
202
- - Reads the intent status from 1Click directly and confirms it is
203
- registered.
204
- - Confirms the deposit address is the one 1Click expects.
205
- - Surfaces 1Click's terminal status (`SUCCESS` / `FAILED`) verbatim.
66
+ **`atomicswap`** — BTC ↔ XMR via the btc-xmr two-curve
67
+ atomic-swap protocol. BTC locks into a 2-of-2 P2WSH; adaptor
68
+ signatures tie Alice's BTC redemption to revealing the Monero
69
+ scalar Bob needs to sweep. Refund is timelocked Bitcoin script
70
+ and the SDK builds and broadcasts it without the server.
206
71
 
207
- ---
72
+ **`thorchain`** — 12 connected chains (BTC, ETH, BSC, AVAX,
73
+ BASE, SOL, TRON, XRP, …) via THORChain Asgard TSS vaults. The
74
+ SDK reads the active vault list from THORNode and Midgard
75
+ directly.
208
76
 
209
- ## The SDK surface
77
+ **`chainflip`** Bitcoin, Ethereum, Arbitrum, Solana, Polkadot,
78
+ and Polkadot Assethub via per-swap deposit channels with
79
+ destination and Fill-or-Kill refund addresses bound at channel
80
+ creation. The SDK reads the channel from the broker and
81
+ confirms.
210
82
 
211
- ### Sub-path exports
83
+ **`near_intents`** roughly 45 chains via NEAR Intents 1Click
84
+ solver settlement. The SDK reads intent status from 1Click
85
+ directly.
212
86
 
213
- For consumers that want only part of the SDK:
87
+ ---
214
88
 
215
- | Sub-path | Contents | When to use |
216
- | --- | --- | --- |
217
- | `@miradex/client` | The full SDK (`MiradexEngine`, all flows, all verifiers) | Default |
218
- | `@miradex/client/portable` | Browser/RN-safe subset; no Node built-ins | Bundlers that fail on Node imports |
219
- | `@miradex/client/api` | `ApiClient` transport only | Building your own UI without the engine |
220
- | `@miradex/client/atomic-swap` | BTC↔XMR protocol surface (`runAtomicSwap`, `resumeAtomicSwap`, `submitEncsigWhenReady`) | Standalone atomic-swap consumer |
221
- | `@miradex/client/atomic-swap/presign` | Pre-sig computation, redeem-digest recompute, `deriveLockAddress` | Independent verification & recovery binaries |
222
- | `@miradex/client/atomic-swap/refund` | TxFullRefund / TxPartialRefund builders + signer | Standalone refund / recovery tools |
223
- | `@miradex/client/atomic-swap/monero-sweep` | Monero sweep pipeline | Standalone sweep tool, e.g. for cooperative-redeem |
224
- | `@miradex/client/verification` | Umbrella for all provider verifiers + helpers | Verify-only consumers (audit logs, watchtowers) |
225
- | `@miradex/client/verification/{thorchain,chainflip,near-intents}` | Per-provider verifier | Light-touch integration |
226
- | `@miradex/client/lib/bitcoin/tx-verify` | TxCancel independent verifier | Refund tools |
227
- | `@miradex/client/lib/monero/verify-lock` | XMR lock independent verifier | Auditing, watchtowers |
89
+ ## The SDK surface
90
+
91
+ The default import is `@miradexio/client`. Sub-path exports cover
92
+ atomic-swap-only, verification-only, and bundler-friendly subsets;
93
+ see the `exports` field in `package.json`.
228
94
 
229
95
  ### `PlatformAdapter`
230
96
 
231
- The engine is decoupled from platform I/O via a `PlatformAdapter`
232
- interface ([`src/engine/platform.ts`](./src/engine/platform.ts)).
233
- You implement it once for your environment; the engine consumes it.
234
-
235
- Required methods:
236
-
237
- - `watchDeposit(address, network, signal, onStatus?)` /
238
- `checkDeposit(address, network)` / `fetchUtxo(address, network)` —
239
- Bitcoin deposit detection.
240
- - `saveKeystore(keystore, label)` / `loadKeystore(id)` /
241
- `listKeystores()` / `deleteKeystore(id)` — keystore persistence.
242
- - `estimateFee(network)` — fee-rate query.
243
- - `broadcastTx(rawHex, network)` — Bitcoin broadcast.
244
- - `createBlockchainQuerier(network)` /
245
- `createBlockchainProvider(network)` — Electrum-equivalent on Node,
246
- mempool.space-equivalent in browsers.
247
- - `generateQr(text)` — QR rendering for deposit addresses.
248
- - `logger: Logger` — structured logger.
249
-
250
- Optional methods (recovery + cache):
251
-
252
- - `saveSwapProtocol(swapId, params)` / `loadSwapProtocol(swapId)` —
253
- write-through cache of public per-swap params.
254
- - `saveProtocolSnapshot(swapId, json)` /
255
- `loadProtocolSnapshot(swapId)` — one-shot recovery snapshot
256
- written between `/presigs` and `/fund`.
257
-
258
- Reference implementations:
259
-
260
- - **Browser:** the miradex-web adapter
261
- ([`miradex-web/lib/miradex-web/browser-adapter.ts`](https://github.com/miradexio/miradex-web/blob/main/lib/miradex-web/browser-adapter.ts))
262
- — uses `idb` for IndexedDB, mempool.space + electrs CORS endpoints
263
- for Bitcoin queries, `qrcode.react` for QR, browser file download
264
- for keystore export.
265
- - **Node / Electron:** — SQLite + Electrum + filesystem keystore.
97
+ The engine is decoupled from host I/O. Implement
98
+ [`PlatformAdapter`](./src/engine/platform.ts) for your environment;
99
+ see the [miradex-web browser adapter](https://github.com/miradexio/miradex-web/blob/main/lib/miradex-web/browser-adapter.ts)
100
+ for a reference.
266
101
 
267
102
  ### Direct entry points
268
103
 
269
- If you do not want the engine, drive flows directly:
104
+ Drive flows without the engine:
270
105
 
271
106
  ```ts
272
- import { runAtomicSwap, SwapExecutor } from '@miradex/client';
107
+ import { runAtomicSwap, SwapExecutor } from '@miradexio/client';
273
108
 
274
109
  // Atomic swap, low-level:
275
110
  await runAtomicSwap({
@@ -288,32 +123,14 @@ const result = await executor.executeSwap({
288
123
  });
289
124
  ```
290
125
 
291
- Cancellation: pass an `AbortController.signal` and call `.abort()`.
292
- The flow throws `SwapCancelledError`. The keystore (and any partial
293
- on-chain progress) survives.
294
-
295
- ### Events
296
-
297
- `MiradexEngine extends EventEmitter`; useful events are:
298
-
299
- - `state` — fires whenever the engine's `EngineState` changes.
300
- - `flow:progress` — fires when an active flow's pipeline phase
301
- changes.
302
- - `flow:complete` / `flow:error` — terminal-state notifications.
303
126
 
304
- See [`src/engine/miradex-engine.ts`](./src/engine/miradex-engine.ts).
305
127
 
306
128
  ---
307
129
 
308
130
  ## Security model
309
131
 
310
- The SDK does not trust the server beyond reachability and HTTPS message
311
- integrity: every state claim is verified against an independent
312
- source — Electrum quorum for Bitcoin, monerod RPC quorum for Monero,
313
- THORNode + Midgard for THORChain, the Chainflip broker for
314
- Chainflip, the 1Click backend for NEAR Intents. The full
315
- attack-by-attack analysis for the BTC↔XMR atomic swap is in
316
- [`ATOMIC-SWAP-PAPER.md`](./ATOMIC-SWAP-PAPER.md).
132
+ The server is untrusted. Bitcoin state is verified against Electrum servers, Monero against monerod RPC servers, THORChain against THORNode + Midgard, Chainflip against the broker, NEAR
133
+ Intents against 1Click.
317
134
 
318
135
  ---
319
136
 
@@ -323,79 +140,27 @@ attack-by-attack analysis for the BTC↔XMR atomic swap is in
323
140
 
324
141
  The first argument to `new MiradexEngine`:
325
142
 
326
- | Field | Type | Default | Notes |
327
- | --- | --- | --- | --- |
328
- | `apiUrl` | `string` | required | Base URL of the server |
329
- | `network` | `'mainnet' \| 'testnet' \| 'regtest'` | `'mainnet'` | |
330
- | `slippageBps` | `number` | `100` (1.00%) | Bounded `[10, 500]` on mainnet/testnet, `[10, 10000]` on regtest. Out-of-range throws `E_SLIPPAGE_OUT_OF_RANGE` |
331
- | `apiTimeout` | `number` | `60_000` ms | Per-request timeout |
332
- | `apiMaxRetries` | `number` | `3` | Bounded retry count |
333
- | `monerodNodes` | `readonly string[]` | network default | Quorum verifier requires ≥ 2 of N to agree |
334
- | `fetchFn` | `typeof fetch` | `globalThis.fetch` | Override for Tor-proxied fetch |
335
-
336
- Sources of network defaults:
337
-
338
- - Bitcoin Electrum servers in
339
- [`src/lib/default-config.ts`](./src/lib/default-config.ts) (use
340
- `ELECTRUM_SERVERS` / `electrumUrlForNetwork`).
341
- - Monero RPC nodes — `MONERO_MAINNET_NODES` / `MONERO_STAGENET_NODES`
342
- re-exported from `@miradex/client`.
343
-
344
- ---
345
-
346
- ## Errors
347
-
348
- Every verification and protocol error carries a stable `code` string.
349
- Handle them by code, not by message text — the messages may change
350
- between releases. Codes are exported from `@miradex/client` as
351
- `ERROR_CODES`.
352
-
353
- ```ts
354
- import { VerificationError, ProtocolError } from '@miradex/client';
355
-
356
- try {
357
- await engine.startAtomicSwap(params);
358
- } catch (err) {
359
- if (err instanceof VerificationError && err.code === 'E_LOCK_ADDR_MISMATCH') {
360
- // Server tried to make us fund an attacker-controlled address.
361
- }
362
- }
363
- ```
143
+ | Field | Type | Default |
144
+ | --- | --- | --- |
145
+ | `apiUrl` | `string` | required |
146
+ | `network` | `'mainnet' \| 'testnet' \| 'regtest'` | `'mainnet'` |
147
+ | `slippageBps` | `number` | `100` (1.00%) |
148
+ | `apiTimeout` | `number` | `60_000` ms |
149
+ | `apiMaxRetries` | `number` | `3` |
150
+ | `monerodNodes` | `readonly string[]` | network default |
151
+ | `fetchFn` | `typeof fetch` | `globalThis.fetch` |
364
152
 
365
- Selected codes (full list in the technical paper appendix):
366
-
367
- | Code | Cause |
368
- | --- | --- |
369
- | `E_LOCK_ADDR_MISMATCH` | Locally-derived P2WSH ≠ server's claim — refusing to fund |
370
- | `E_DLEQ_PROOF_INVALID` | Alice's DLEQ proof failed verification |
371
- | `E_DLEQ_PROOF_REQUIRED` | Alice provided keys without a DLEQ proof |
372
- | `E_REDEEM_DIGEST_MISMATCH` | Locally-recomputed redeem digest ≠ server's claim — refusing encsig |
373
- | `E_XMR_LOCK_FAILED` | XMR lock did not verify against quorum |
374
- | `E_S_A_MISMATCH` | `s_a` returned by server does not satisfy `s_a · G == S_a_monero` |
375
- | `E_S_A_MONERO_MISSING` | `S_a_monero` absent — refusing to release encsig |
376
- | `E_TIMELOCK_OUT_OF_RANGE` | A BIP68 sequence was outside accepted range |
377
- | `E_FEE_BELOW_RELAY` / `E_FEE_ABOVE_CAP` | Fee outside policy band |
378
- | `E_AMNESTY_EXCEEDS_CAP` | Amnesty amount exceeded the configured ratio of lock |
379
- | `E_SNAPSHOT_WRITE_FAILED` | Refusing to broadcast TxLock without persisting recovery snapshot first |
380
- | `E_PRESIGS_WEDGED` | Server repeatedly rejected `/presigs` — swap is wedged, fail to surface restart UI |
381
- | `E_THORCHAIN_VAULT_MISMATCH` | Deposit address not in active THORChain vaults |
382
- | `E_CHAINFLIP_CHANNEL_MISBINDING` | Chainflip channel binding does not match user's expected destination |
383
- | `E_NEAR_INTENT_NOT_REGISTERED` | Deposit address unknown to 1Click (HTTP 404) |
384
- | `E_NEAR_INTENT_FAILED` | 1Click reports `FAILED` |
385
- | `E_RATE_DRIFT` | Engine's expected output drifted from the accepted quote beyond `slippageBps` |
386
- | `E_SLIPPAGE_OUT_OF_RANGE` | `slippageBps` outside the network's allowed band |
153
+ Defaults are exported from [`src/lib/default-config.ts`](./src/lib/default-config.ts).
387
154
 
388
155
  ---
389
156
 
390
157
  ## Build
391
158
 
392
- ### Building from source
393
-
394
159
  ```bash
395
160
  pnpm install
396
- pnpm -F @miradex/client build # tsc → dist/
397
- pnpm -F @miradex/client typecheck
398
- pnpm -F @miradex/client test
161
+ pnpm -F @miradexio/client build # tsc → dist/
162
+ pnpm -F @miradexio/client typecheck
163
+ pnpm -F @miradexio/client test
399
164
  ```
400
165
 
401
166
  ---
@@ -1 +1 @@
1
- {"version":3,"file":"base58.d.ts","sourceRoot":"","sources":["../../src/address/base58.ts"],"names":[],"mappings":"AAKA,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,SAAS,MAAM,EAAE,GAClC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAcrC;AAKD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAavF"}
1
+ {"version":3,"file":"base58.d.ts","sourceRoot":"","sources":["../../src/address/base58.ts"],"names":[],"mappings":"AAKA,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,SAAS,MAAM,EAAE,GAClC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAcrC;AAKD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAYvF"}
@@ -16,13 +16,12 @@ export function validateBase58Check(address, expectedVersions) {
16
16
  return { valid: false, reason: 'Invalid base58check encoding' };
17
17
  }
18
18
  }
19
- // XRP uses a different base58 alphabet
19
+ // XRP uses a different base58 alphabet.
20
20
  const XRP_ALPHABET = 'rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz';
21
21
  export function validateXrpAddress(address) {
22
22
  if (!address.startsWith('r') || address.length < 25 || address.length > 35) {
23
23
  return { valid: false, reason: 'XRP address must start with r and be 25-35 chars' };
24
24
  }
25
- // Validate characters are in XRP alphabet
26
25
  for (const c of address) {
27
26
  if (!XRP_ALPHABET.includes(c)) {
28
27
  return { valid: false, reason: `Invalid character '${c}' in XRP address` };
@@ -1 +1 @@
1
- {"version":3,"file":"base58.js","sourceRoot":"","sources":["../../src/address/base58.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,IAAI,IAAI,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AAE/B,MAAM,UAAU,mBAAmB,CACjC,OAAe,EACf,gBAAmC;IAEnC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;QAErE,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;QAC5B,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACxC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,2BAA2B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACrF,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,8BAA8B,EAAE,CAAC;IAClE,CAAC;AACH,CAAC;AAED,uCAAuC;AACvC,MAAM,YAAY,GAAG,4DAA4D,CAAC;AAElF,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QAC3E,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,kDAAkD,EAAE,CAAC;IACtF,CAAC;IAED,0CAA0C;IAC1C,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,sBAAsB,CAAC,kBAAkB,EAAE,CAAC;QAC7E,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC"}
1
+ {"version":3,"file":"base58.js","sourceRoot":"","sources":["../../src/address/base58.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,IAAI,IAAI,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AAE/B,MAAM,UAAU,mBAAmB,CACjC,OAAe,EACf,gBAAmC;IAEnC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;QAErE,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;QAC5B,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACxC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,2BAA2B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACrF,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,8BAA8B,EAAE,CAAC;IAClE,CAAC;AACH,CAAC;AAED,wCAAwC;AACxC,MAAM,YAAY,GAAG,4DAA4D,CAAC;AAElF,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QAC3E,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,kDAAkD,EAAE,CAAC;IACtF,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,sBAAsB,CAAC,kBAAkB,EAAE,CAAC;QAC7E,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC"}
@@ -1,11 +1,3 @@
1
- /**
2
- * Validate a bech32/bech32m address.
3
- *
4
- * For segwit addresses (BTC bc1, LTC ltc1), the first word is the witness
5
- * version and is skipped before fromWords conversion.
6
- *
7
- * For non-segwit bech32 (Cosmos, THORChain), all words are data.
8
- */
9
1
  export declare function validateBech32(address: string, expectedHrp: string, minDataLen?: number, maxDataLen?: number): {
10
2
  valid: boolean;
11
3
  reason?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"bech32.d.ts","sourceRoot":"","sources":["../../src/address/bech32.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,UAAU,SAAK,EACf,UAAU,SAAK,GACd;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAiCrC"}
1
+ {"version":3,"file":"bech32.d.ts","sourceRoot":"","sources":["../../src/address/bech32.ts"],"names":[],"mappings":"AAIA,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,UAAU,SAAK,EACf,UAAU,SAAK,GACd;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAiCrC"}
@@ -1,12 +1,6 @@
1
1
  import { bech32, bech32m } from '@scure/base';
2
- /**
3
- * Validate a bech32/bech32m address.
4
- *
5
- * For segwit addresses (BTC bc1, LTC ltc1), the first word is the witness
6
- * version and is skipped before fromWords conversion.
7
- *
8
- * For non-segwit bech32 (Cosmos, THORChain), all words are data.
9
- */
2
+ // Segwit (BTC bc1, LTC ltc1, etc.): first word is the witness version, skip
3
+ // it before fromWords. Non-segwit (Cosmos, THORChain): all words are data.
10
4
  export function validateBech32(address, expectedHrp, minDataLen = 20, maxDataLen = 40) {
11
5
  try {
12
6
  let decoded;
@@ -19,7 +13,7 @@ export function validateBech32(address, expectedHrp, minDataLen = 20, maxDataLen
19
13
  if (decoded.prefix !== expectedHrp) {
20
14
  return { valid: false, reason: `Expected HRP '${expectedHrp}', got '${decoded.prefix}'` };
21
15
  }
22
- // Segwit addresses (bc, ltc) have a witness version as the first word
16
+ // Segwit (bc, ltc, ...) carries the witness version as the first word.
23
17
  const isSegwit = expectedHrp === 'bc' ||
24
18
  expectedHrp === 'ltc' ||
25
19
  expectedHrp === 'tb' ||
@@ -1 +1 @@
1
- {"version":3,"file":"bech32.js","sourceRoot":"","sources":["../../src/address/bech32.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE9C;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAC5B,OAAe,EACf,WAAmB,EACnB,UAAU,GAAG,EAAE,EACf,UAAU,GAAG,EAAE;IAEf,IAAI,CAAC;QACH,IAAI,OAA4C,CAAC;QACjD,IAAI,CAAC;YACH,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,OAAgC,CAAC,CAAC;QAC7D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,OAAgC,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YACnC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,WAAW,WAAW,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC;QAC5F,CAAC;QAED,sEAAsE;QACtE,MAAM,QAAQ,GACZ,WAAW,KAAK,IAAI;YACpB,WAAW,KAAK,KAAK;YACrB,WAAW,KAAK,IAAI;YACpB,WAAW,KAAK,MAAM,CAAC;QACzB,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;QAEhE,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,IAAI,CAAC,MAAM,GAAG,UAAU,IAAI,IAAI,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;YACzD,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,eAAe,IAAI,CAAC,MAAM,kBAAkB,UAAU,KAAK,UAAU,GAAG;aACjF,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,yBAAyB,EAAE,CAAC;IAC7D,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"bech32.js","sourceRoot":"","sources":["../../src/address/bech32.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE9C,4EAA4E;AAC5E,2EAA2E;AAC3E,MAAM,UAAU,cAAc,CAC5B,OAAe,EACf,WAAmB,EACnB,UAAU,GAAG,EAAE,EACf,UAAU,GAAG,EAAE;IAEf,IAAI,CAAC;QACH,IAAI,OAA4C,CAAC;QACjD,IAAI,CAAC;YACH,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,OAAgC,CAAC,CAAC;QAC7D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,OAAgC,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YACnC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,WAAW,WAAW,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC;QAC5F,CAAC;QAED,uEAAuE;QACvE,MAAM,QAAQ,GACZ,WAAW,KAAK,IAAI;YACpB,WAAW,KAAK,KAAK;YACrB,WAAW,KAAK,IAAI;YACpB,WAAW,KAAK,MAAM,CAAC;QACzB,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;QAEhE,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,IAAI,CAAC,MAAM,GAAG,UAAU,IAAI,IAAI,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;YACzD,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,eAAe,IAAI,CAAC,MAAM,kBAAkB,UAAU,KAAK,UAAU,GAAG;aACjF,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,yBAAyB,EAAE,CAAC;IAC7D,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"evm.d.ts","sourceRoot":"","sources":["../../src/address/evm.ts"],"names":[],"mappings":"AAGA,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CA4BvF"}
1
+ {"version":3,"file":"evm.d.ts","sourceRoot":"","sources":["../../src/address/evm.ts"],"names":[],"mappings":"AAGA,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CA2BvF"}
@@ -4,12 +4,11 @@ export function validateEvmAddress(address) {
4
4
  if (!/^0x[0-9a-fA-F]{40}$/.test(address)) {
5
5
  return { valid: false, reason: 'Must be 0x followed by 40 hex characters' };
6
6
  }
7
- // If address is all-lowercase or all-uppercase, skip checksum (valid but unchecksummed)
7
+ // All-lower or all-upper = valid but unchecksummed; skip the EIP-55 check.
8
8
  const hex = address.slice(2);
9
9
  if (hex === hex.toLowerCase() || hex === hex.toUpperCase()) {
10
10
  return { valid: true };
11
11
  }
12
- // EIP-55 mixed-case checksum validation
13
12
  const hashHex = bytesToHex(keccak_256(new TextEncoder().encode(hex.toLowerCase())));
14
13
  for (let i = 0; i < 40; i++) {
15
14
  const c = hex.charAt(i);
@@ -1 +1 @@
1
- {"version":3,"file":"evm.js","sourceRoot":"","sources":["../../src/address/evm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACzC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,0CAA0C,EAAE,CAAC;IAC9E,CAAC;IAED,wFAAwF;IACxF,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7B,IAAI,GAAG,KAAK,GAAG,CAAC,WAAW,EAAE,IAAI,GAAG,KAAK,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;QAC3D,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,wCAAwC;IACxC,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;IAEpF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAE1C,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACvB,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,CAAC;YAC7B,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;YACtC,IAAI,aAAa,KAAK,OAAO,EAAE,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,yBAAyB,EAAE,CAAC;YAC7D,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC"}
1
+ {"version":3,"file":"evm.js","sourceRoot":"","sources":["../../src/address/evm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACzC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,0CAA0C,EAAE,CAAC;IAC9E,CAAC;IAED,2EAA2E;IAC3E,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7B,IAAI,GAAG,KAAK,GAAG,CAAC,WAAW,EAAE,IAAI,GAAG,KAAK,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;QAC3D,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;IAEpF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAE1C,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACvB,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,CAAC;YAC7B,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;YACtC,IAAI,aAAa,KAAK,OAAO,EAAE,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,yBAAyB,EAAE,CAAC;YAC7D,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC"}
@@ -2,14 +2,8 @@ export interface ValidationResult {
2
2
  readonly valid: boolean;
3
3
  readonly reason?: string;
4
4
  }
5
- /**
6
- * Validate a cryptocurrency address for a given token or chain.
7
- * Pure function — works identically in Node.js and browser.
8
- */
9
5
  export declare function validateAddress(address: string, tokenOrChain: string): ValidationResult;
10
6
  export declare function resolveChain(tokenOrChain: string): string;
11
7
  export declare function getSupportedChains(): readonly string[];
12
- /** Tokens commonly received on a given chain. Used to populate the
13
- * Tokens column in the address book without per-row tagging. */
14
8
  export declare function tokensForChain(chain: string): readonly string[];
15
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/address/index.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAoGD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,gBAAgB,CAYvF;AAED,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAgB,kBAAkB,IAAI,SAAS,MAAM,EAAE,CAEtD;AAcD;iEACiE;AACjE,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAE/D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/address/index.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAqGD,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,gBAAgB,CAYvF;AAED,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAgB,kBAAkB,IAAI,SAAS,MAAM,EAAE,CAEtD;AAgBD,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAE/D"}
@@ -92,17 +92,14 @@ const TOKEN_TO_CHAIN = {
92
92
  ZEC: 'zcash',
93
93
  XMR: 'monero',
94
94
  };
95
- /**
96
- * Validate a cryptocurrency address for a given token or chain.
97
- * Pure function — works identically in Node.js and browser.
98
- */
95
+ // Pure function; works identically in Node and browser.
99
96
  export function validateAddress(address, tokenOrChain) {
100
97
  if (!address || !address.trim())
101
98
  return { valid: false, reason: 'Address is empty' };
102
99
  const chain = resolveChain(tokenOrChain);
103
100
  const validator = CHAIN_VALIDATORS[chain];
104
101
  if (!validator) {
105
- // Unknown chain accept any non-empty address
102
+ // Unknown chain: accept any non-empty address.
106
103
  return { valid: true };
107
104
  }
108
105
  return validator(address.trim());
@@ -120,14 +117,14 @@ const CHAIN_TO_TOKENS = (() => {
120
117
  out[chain] = [];
121
118
  out[chain].push(token);
122
119
  }
123
- // Base shares stablecoins with Ethereum in practice; surface the common set
124
- // so the address book and pickers don't render an empty Tokens column.
120
+ // Base shares stablecoins with Ethereum; surface the common set so the
121
+ // address-book/picker doesn't render an empty Tokens column.
125
122
  if (!out['base'])
126
123
  out['base'] = ['ETH', 'USDC'];
127
124
  return out;
128
125
  })();
129
- /** Tokens commonly received on a given chain. Used to populate the
130
- * Tokens column in the address book without per-row tagging. */
126
+ // Tokens commonly received on a given chain. Drives the Tokens column in the
127
+ // address book without per-row tagging.
131
128
  export function tokensForChain(chain) {
132
129
  return CHAIN_TO_TOKENS[resolveChain(chain)] ?? [];
133
130
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/address/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/address/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AASxD,MAAM,gBAAgB,GAA8B;IAClD,mDAAmD;IACnD,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QAChB,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE,OAAO,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC9D,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE,OAAO,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC9D,0DAA0D;QAC1D,OAAO,mBAAmB,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,gCAAgC;IAChC,QAAQ,EAAE,kBAAkB;IAC5B,GAAG,EAAE,kBAAkB;IACvB,OAAO,EAAE,kBAAkB;IAC3B,QAAQ,EAAE,kBAAkB;IAC5B,SAAS,EAAE,kBAAkB;IAC7B,IAAI,EAAE,kBAAkB;IAExB,kEAAkE;IAClE,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;QACjB,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAChE,OAAO,mBAAmB,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IACvD,CAAC;IAED,6DAA6D;IAC7D,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE;QACpB,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACpF,kEAAkE;YAClE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;YAClD,IAAI,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAChE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,yBAAyB,EAAE,CAAC;QAC7D,CAAC;QACD,OAAO,mBAAmB,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,EAAE,qBAAqB;IAC7B,MAAM,EAAE,qBAAqB;IAE7B,wDAAwD;IACxD,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC;IAEjD,GAAG,EAAE,kBAAkB;IACvB,QAAQ,EAAE,uBAAuB;IAEjC,mCAAmC;IACnC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC;IAEhD,oCAAoC;IACpC,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC;IAEjD,GAAG,EAAE,kBAAkB;IAEvB,2CAA2C;IAC3C,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAE3D,qCAAqC;IACrC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAEvD,4DAA4D;IAC5D,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE;QACd,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE,OAAO,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC9D,iDAAiD;QACjD,8CAA8C;QAC9C,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACnD,OAAO,mBAAmB,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,+BAA+B;QAC3E,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,8CAA8C,EAAE,CAAC;IAClF,CAAC;CACF,CAAC;AAEF,MAAM,cAAc,GAA2B;IAC7C,GAAG,EAAE,SAAS;IACd,QAAQ,EAAE,SAAS;IACnB,GAAG,EAAE,UAAU;IACf,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,UAAU;IAChB,GAAG,EAAE,UAAU;IACf,IAAI,EAAE,UAAU;IAChB,GAAG,EAAE,UAAU;IACf,GAAG,EAAE,aAAa;IAClB,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,SAAS;IACd,GAAG,EAAE,UAAU;IACf,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,UAAU;IACf,IAAI,EAAE,WAAW;IACjB,IAAI,EAAE,QAAQ;IACd,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,WAAW;IACjB,GAAG,EAAE,OAAO;IACZ,GAAG,EAAE,QAAQ;CACd,CAAC;AAEF,wDAAwD;AACxD,MAAM,UAAU,eAAe,CAAC,OAAe,EAAE,YAAoB;IACnE,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAErF,MAAM,KAAK,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAE1C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,+CAA+C;QAC/C,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,OAAO,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,YAAoB;IAC/C,OAAO,cAAc,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,IAAI,YAAY,CAAC,WAAW,EAAE,CAAC;AAClF,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,eAAe,GAAsC,CAAC,GAAG,EAAE;IAC/D,MAAM,GAAG,GAA6B,EAAE,CAAC;IACzC,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;QAC5D,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACjC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IACD,uEAAuE;IACvE,6DAA6D;IAC7D,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAChD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC,EAAE,CAAC;AAEL,6EAA6E;AAC7E,wCAAwC;AACxC,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,OAAO,eAAe,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;AACpD,CAAC"}
@@ -1,13 +1,3 @@
1
- /**
2
- * Monero address validation.
3
- * Standard: 95 chars, starts with 4 (mainnet) or 5 (testnet)
4
- * Subaddress: 95 chars, starts with 8 (mainnet) or 7 (testnet)
5
- * Integrated: 106 chars, starts with 4 (mainnet)
6
- *
7
- * Uses Monero's modified base58 which encodes in 8-byte blocks.
8
- * We validate format + length rather than full checksum because
9
- * Monero base58 is non-standard (no base58check).
10
- */
11
1
  export declare function validateMoneroAddress(address: string): {
12
2
  valid: boolean;
13
3
  reason?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"monero.d.ts","sourceRoot":"","sources":["../../src/address/monero.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAoB1F"}
1
+ {"version":3,"file":"monero.d.ts","sourceRoot":"","sources":["../../src/address/monero.ts"],"names":[],"mappings":"AAOA,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAoB1F"}