@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
@@ -1 +1 @@
1
- {"version":3,"file":"memo.d.ts","sourceRoot":"","sources":["../../src/verification/memo.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAepE;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAQ3F"}
1
+ {"version":3,"file":"memo.d.ts","sourceRoot":"","sources":["../../src/verification/memo.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAMD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAepE;AAGD,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAQ3F"}
@@ -1,26 +1,13 @@
1
- /**
2
- * THORChain memo parsing and strict binding.
3
- *
4
- * Old code used `memo.includes(destAddress)` which matches any memo where the
5
- * destination address is a substring. An attacker-controlled memo of the form
6
- * `SWAP:ETH.ETH:0xATTACKER:0:affid_<USER_ADDR>:10` would pass that check.
7
- *
8
- * The strict parser matches the THORChain memo ABI and compares the
9
- * destination field only.
10
- *
11
- * @security Closes AV-A.14 variant / AV-K.6.
12
- */
1
+ // AV-A.14 / AV-K.6: strict THORChain memo parser.
2
+ // memo.includes(destAddress) was vulnerable: a memo like
3
+ // SWAP:ETH.ETH:0xATTACKER:0:affid_<USER_ADDR>:10 passes a substring check.
4
+ // The parser here matches the memo ABI and compares the destination field only.
13
5
  import { VerificationError } from '../types/index.js';
14
6
  const THORCHAIN_MEMO_RE = /^(?:SWAP|=|s):([A-Z0-9./-]+):([A-Za-z0-9_./]+)(?::(\d+)(?:\/(\d+)\/(\d+))?)?(?::([A-Za-z0-9]+))?(?::(\d+))?$/;
15
- /**
16
- * Parse a THORChain memo string. Accepts `SWAP:`, `=:`, and `s:` prefixes
17
- * followed by asset, destination, optional min-out (either a plain integer
18
- * or the streaming form `LIMIT/INTERVAL/QUANTITY`), optional affiliate,
19
- * optional affiliate fee in bps.
20
- *
21
- * @throws {VerificationError} `E_MEMO_MALFORMED` when the memo does not
22
- * match the canonical ABI.
23
- */
7
+ // Accepts SWAP:, =:, and s: prefixes plus asset, destination, optional
8
+ // min-out (integer or streaming LIMIT/INTERVAL/QUANTITY), optional
9
+ // affiliate, optional affiliate fee bps. Throws E_MEMO_MALFORMED on a
10
+ // memo that doesn't match the canonical ABI.
24
11
  export function parseThorchainMemo(memo) {
25
12
  const match = memo.trim().match(THORCHAIN_MEMO_RE);
26
13
  if (!match) {
@@ -37,12 +24,7 @@ export function parseThorchainMemo(memo) {
37
24
  affiliateFeeBps: feeBps !== undefined ? Number(feeBps) : undefined,
38
25
  };
39
26
  }
40
- /**
41
- * Assert the parsed memo's destination field equals the expected address.
42
- *
43
- * @throws {VerificationError} `E_MEMO_DEST_MISMATCH` on mismatch.
44
- * @throws {VerificationError} `E_MEMO_MALFORMED` if the memo fails to parse.
45
- */
27
+ // Throws E_MEMO_DEST_MISMATCH on mismatch, E_MEMO_MALFORMED if memo doesn't parse.
46
28
  export function requireMemoBindsDestination(memo, expectedDestAddress) {
47
29
  const parsed = parseThorchainMemo(memo);
48
30
  if (parsed.destAddress !== expectedDestAddress) {
@@ -1 +1 @@
1
- {"version":3,"file":"memo.js","sourceRoot":"","sources":["../../src/verification/memo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,iBAAiB,GACrB,8GAA8G,CAAC;AAYjH;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACnD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,iBAAiB,CAAC,kBAAkB,EAAE,wBAAwB,IAAI,EAAE,CAAC,CAAC;IAClF,CAAC;IACD,MAAM,CAAC,EAAE,KAAK,GAAG,EAAE,EAAE,WAAW,GAAG,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;IAChH,OAAO;QACL,KAAK;QACL,WAAW;QACX,MAAM,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;QACzD,iBAAiB,EAAE,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS;QAC1F,iBAAiB,EAAE,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS;QAC1F,SAAS;QACT,eAAe,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;KACnE,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,2BAA2B,CAAC,IAAY,EAAE,mBAA2B;IACnF,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,MAAM,CAAC,WAAW,KAAK,mBAAmB,EAAE,CAAC;QAC/C,MAAM,IAAI,iBAAiB,CACzB,sBAAsB,EACtB,oBAAoB,MAAM,CAAC,WAAW,0BAA0B,mBAAmB,EAAE,CACtF,CAAC;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"memo.js","sourceRoot":"","sources":["../../src/verification/memo.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,yDAAyD;AACzD,2EAA2E;AAC3E,gFAAgF;AAEhF,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,iBAAiB,GACrB,8GAA8G,CAAC;AAYjH,uEAAuE;AACvE,mEAAmE;AACnE,sEAAsE;AACtE,6CAA6C;AAC7C,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACnD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,iBAAiB,CAAC,kBAAkB,EAAE,wBAAwB,IAAI,EAAE,CAAC,CAAC;IAClF,CAAC;IACD,MAAM,CAAC,EAAE,KAAK,GAAG,EAAE,EAAE,WAAW,GAAG,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;IAChH,OAAO;QACL,KAAK;QACL,WAAW;QACX,MAAM,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;QACzD,iBAAiB,EAAE,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS;QAC1F,iBAAiB,EAAE,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS;QAC1F,SAAS;QACT,eAAe,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;KACnE,CAAC;AACJ,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,2BAA2B,CAAC,IAAY,EAAE,mBAA2B;IACnF,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,MAAM,CAAC,WAAW,KAAK,mBAAmB,EAAE,CAAC;QAC/C,MAAM,IAAI,iBAAiB,CACzB,sBAAsB,EACtB,oBAAoB,MAAM,CAAC,WAAW,0BAA0B,mBAAmB,EAAE,CACtF,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -1,64 +1,18 @@
1
1
  import type { NearIntentsVerification, VerificationResult } from '../types/index.js';
2
2
  import { type NearIntentStatusResponse } from '../wire/near-intents.zod.js';
3
- /**
4
- * Verify a NEAR-Intents deposit address against the 1Click status endpoint.
5
- * Uses an explicit status enum switch (no `!== 'NOT_FOUND'` substring).
6
- */
7
3
  export declare function verifyNearIntents(v: NearIntentsVerification, fetchFn: typeof globalThis.fetch, externalSignal?: AbortSignal): Promise<VerificationResult>;
8
4
  export interface FetchNearIntentStatusInput {
9
5
  readonly statusUrl: string;
10
6
  readonly fetchFn: typeof globalThis.fetch;
11
7
  readonly timeoutMs?: number;
12
8
  }
13
- /**
14
- * Fetch 1Click `/v0/status` and return a flattened intent view. Performs an
15
- * exhaustive enum switch over the 7 real status values.
16
- *
17
- * Mapping of HTTP / status to error codes:
18
- * - HTTP 404 → `E_NEAR_INTENT_NOT_REGISTERED` (deposit address unknown to 1Click)
19
- * - HTTP non-2xx (non-404) → `E_NEAR_INTENT_FAILED` (network / server error)
20
- * - status === 'FAILED' → `E_NEAR_INTENT_FAILED`
21
- * - status in {PENDING_DEPOSIT, KNOWN_DEPOSIT_TX, INCOMPLETE_DEPOSIT,
22
- * PROCESSING, SUCCESS, REFUNDED} → returns the flattened response.
23
- *
24
- * 1Click does not surface an "EXPIRED" status. Past-deadline detection is
25
- * performed via `requireIntentDeadlineMargin` against `quote.deadline`.
26
- *
27
- * @throws {VerificationError} `E_NEAR_INTENT_NOT_REGISTERED` on HTTP 404.
28
- * @throws {VerificationError} `E_NEAR_INTENT_FAILED` on HTTP error or
29
- * `status === 'FAILED'`.
30
- */
31
9
  export declare function fetchNearIntentStatus(input: FetchNearIntentStatusInput): Promise<NearIntentStatusResponse>;
32
10
  export interface RequireIntentBindsInput {
33
11
  readonly destinationAddress: string;
34
- /**
35
- * Optional 1Click destination-asset ID (e.g.
36
- * `nep141:eth-0xa0b8…omft.near`). Pass it to assert the intent really
37
- * targets the destination chain you expect — 1Click's `/v0/status`
38
- * exposes the chain only inside this asset ID, not as a separate field.
39
- */
40
12
  readonly destinationAssetId?: string;
41
13
  readonly refundAddress?: string;
42
14
  }
43
- /**
44
- * Assert the returned intent binds the caller's expected destination address,
45
- * destination asset, and (optional) refund address.
46
- *
47
- * @throws {VerificationError} `E_NEAR_INTENT_MISBINDING` on any mismatch.
48
- */
49
15
  export declare function requireIntentBinds(intent: NearIntentStatusResponse, expected: RequireIntentBindsInput): void;
50
- /**
51
- * Enforce the quote deadline has at least the safety margin (90 min) before
52
- * it expires relative to `Date.now()`. The deadline lives at
53
- * `quoteResponse.quote.deadline` in the raw 1Click response and is surfaced
54
- * as `intent.deadline` after flattening.
55
- *
56
- * Returns silently if `intent.deadline` is null (1Click's dry-run quotes
57
- * omit the deadline; we cannot enforce expiry against an absent value).
58
- *
59
- * @throws {VerificationError} `E_NEAR_INTENT_EXPIRING` when the deadline is
60
- * sooner than the safety margin.
61
- */
62
16
  export declare function requireIntentDeadlineMargin(intent: NearIntentStatusResponse): void;
63
17
  export interface VerifyNearIntentOnChainInput {
64
18
  readonly intentHash: string;
@@ -70,22 +24,5 @@ export interface VerifyNearIntentOnChainInput {
70
24
  readonly fetchFn: typeof globalThis.fetch;
71
25
  readonly timeoutMs?: number;
72
26
  }
73
- /**
74
- * **Direct-blockchain near-intents only — NOT for 1Click swaps.**
75
- *
76
- * Queries the NEAR contract `intents.near` via JSON-RPC `get_intent` and
77
- * cross-checks that an intent hash binds the expected destination + amount.
78
- * This is the verification path for swaps that go through the solver-relay
79
- * directly. 1Click swaps do not surface usable on-chain intent hashes
80
- * suitable for this query — for 1Click, use `fetchNearIntentStatus` +
81
- * `requireIntentBinds` against the `/v0/status` URL instead.
82
- *
83
- * Kept available for a future direct-blockchain near_intents provider
84
- * (`packages/miradex-client/src/...` / `daemons/near/`).
85
- *
86
- * @throws {VerificationError} `E_NEAR_INTENT_FAILED` on RPC error.
87
- * @throws {VerificationError} `E_NEAR_INTENT_CHAIN_DEST` on destination mismatch.
88
- * @throws {VerificationError} `E_NEAR_INTENT_CHAIN_AMOUNT` on amount mismatch.
89
- */
90
27
  export declare function verifyNearIntentOnChain(input: VerifyNearIntentOnChainInput): Promise<void>;
91
28
  //# sourceMappingURL=near-intents.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"near-intents.d.ts","sourceRoot":"","sources":["../../src/verification/near-intents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAqB,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAGxG,OAAO,EAIL,KAAK,wBAAwB,EAC9B,MAAM,6BAA6B,CAAC;AAkBrC;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,CAAC,EAAE,uBAAuB,EAC1B,OAAO,EAAE,OAAO,UAAU,CAAC,KAAK,EAChC,cAAc,CAAC,EAAE,WAAW,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CA2C7B;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAC1C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,0BAA0B,GAChC,OAAO,CAAC,wBAAwB,CAAC,CAoDnC;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC;;;;;OAKG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,wBAAwB,EAChC,QAAQ,EAAE,uBAAuB,GAChC,IAAI,CAyBN;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,wBAAwB,GAC/B,IAAI,CAWN;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE;QAAE,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAA;KAAE,CAAC;IAClG,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAC1C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,4BAA4B,GAClC,OAAO,CAAC,IAAI,CAAC,CA4Cf"}
1
+ {"version":3,"file":"near-intents.d.ts","sourceRoot":"","sources":["../../src/verification/near-intents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAqB,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAGxG,OAAO,EAIL,KAAK,wBAAwB,EAC9B,MAAM,6BAA6B,CAAC;AAkBrC,wBAAsB,iBAAiB,CACrC,CAAC,EAAE,uBAAuB,EAC1B,OAAO,EAAE,OAAO,UAAU,CAAC,KAAK,EAChC,cAAc,CAAC,EAAE,WAAW,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CAyC7B;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAC1C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AASD,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,0BAA0B,GAChC,OAAO,CAAC,wBAAwB,CAAC,CAoDnC;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IAIpC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAGD,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,wBAAwB,EAChC,QAAQ,EAAE,uBAAuB,GAChC,IAAI,CAyBN;AAKD,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,wBAAwB,GAC/B,IAAI,CAWN;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE;QAAE,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAA;KAAE,CAAC;IAClG,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAC1C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAQD,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,4BAA4B,GAClC,OAAO,CAAC,IAAI,CAAC,CA4Cf"}
@@ -2,10 +2,9 @@ import { check, errMsg, failOf, resultOf } from './shared.js';
2
2
  import { VerificationError } from '../types/index.js';
3
3
  import { NearIntentRawStatusSchema, NearIntentOnChainSchema, NearRpcResponseSchema, } from '../wire/near-intents.zod.js';
4
4
  import { VERIFY_FETCH_TIMEOUT_MS } from './constants.js';
5
- // Mirrors the canonical 1Click status enum (7 values). INCOMPLETE_DEPOSIT
6
- // means "deposit observed but below bridge minimum"; from a verification
7
- // standpoint the intent is registered and the address is real, so it counts
8
- // as active. Source: 1Click OpenAPI v0.1.10 + live captures.
5
+ // 1Click status enum (7 values). INCOMPLETE_DEPOSIT means "deposit observed
6
+ // but below bridge minimum" intent is registered and the address is real,
7
+ // so it counts as active here. Source: 1Click OpenAPI v0.1.10.
9
8
  const ACTIVE_STATUSES = [
10
9
  'PENDING_DEPOSIT',
11
10
  'KNOWN_DEPOSIT_TX',
@@ -15,15 +14,10 @@ const ACTIVE_STATUSES = [
15
14
  'REFUNDED',
16
15
  ];
17
16
  const INTENT_DEADLINE_MARGIN_MS = 90 * 60 * 1000;
18
- /**
19
- * Verify a NEAR-Intents deposit address against the 1Click status endpoint.
20
- * Uses an explicit status enum switch (no `!== 'NOT_FOUND'` substring).
21
- */
17
+ // Explicit status enum switch (no '!== NOT_FOUND' substring matching).
22
18
  export async function verifyNearIntents(v, fetchFn, externalSignal) {
23
19
  const checks = [];
24
- // Server schema permits a null status_url (e.g. when the engine declines to
25
- // emit a public-clickable URL). Without one we cannot run the live check —
26
- // surface that explicitly rather than calling fetch() on null.
20
+ // Schema permits null status_url; surface explicitly rather than fetch(null).
27
21
  if (!v.status_url) {
28
22
  return failOf('near_intents', [
29
23
  check('NEAR reachable', false, 'No public status URL available'),
@@ -53,24 +47,13 @@ export async function verifyNearIntents(v, fetchFn, externalSignal) {
53
47
  }
54
48
  return resultOf('near_intents', checks);
55
49
  }
56
- /**
57
- * Fetch 1Click `/v0/status` and return a flattened intent view. Performs an
58
- * exhaustive enum switch over the 7 real status values.
59
- *
60
- * Mapping of HTTP / status to error codes:
61
- * - HTTP 404 `E_NEAR_INTENT_NOT_REGISTERED` (deposit address unknown to 1Click)
62
- * - HTTP non-2xx (non-404) → `E_NEAR_INTENT_FAILED` (network / server error)
63
- * - status === 'FAILED' → `E_NEAR_INTENT_FAILED`
64
- * - status in {PENDING_DEPOSIT, KNOWN_DEPOSIT_TX, INCOMPLETE_DEPOSIT,
65
- * PROCESSING, SUCCESS, REFUNDED} → returns the flattened response.
66
- *
67
- * 1Click does not surface an "EXPIRED" status. Past-deadline detection is
68
- * performed via `requireIntentDeadlineMargin` against `quote.deadline`.
69
- *
70
- * @throws {VerificationError} `E_NEAR_INTENT_NOT_REGISTERED` on HTTP 404.
71
- * @throws {VerificationError} `E_NEAR_INTENT_FAILED` on HTTP error or
72
- * `status === 'FAILED'`.
73
- */
50
+ // HTTP/status -> error code:
51
+ // 404 -> E_NEAR_INTENT_NOT_REGISTERED
52
+ // non-2xx (non-404) -> E_NEAR_INTENT_FAILED
53
+ // status === FAILED -> E_NEAR_INTENT_FAILED
54
+ // PENDING_DEPOSIT/PROCESSING/SUCCESS/REFUNDED/... -> flattened response
55
+ // 1Click has no EXPIRED status; past-deadline is detected via
56
+ // requireIntentDeadlineMargin against quote.deadline.
74
57
  export async function fetchNearIntentStatus(input) {
75
58
  const timeoutMs = input.timeoutMs ?? VERIFY_FETCH_TIMEOUT_MS;
76
59
  const res = await input.fetchFn(input.statusUrl, { signal: AbortSignal.timeout(timeoutMs) });
@@ -85,9 +68,9 @@ export async function fetchNearIntentStatus(input) {
85
68
  if (parsed.status === 'FAILED') {
86
69
  throw new VerificationError('E_NEAR_INTENT_FAILED', `intent failed on 1Click${parsed.swapDetails.refundReason ? ` (${parsed.swapDetails.refundReason})` : ''}`);
87
70
  }
88
- // Flatten the nested response. The user-visible binding fields live under
89
- // `quoteResponse.quoteRequest` (recipient, refundTo, originAsset, …) and
90
- // `quoteResponse.quote` (depositAddress, depositMemo, deadline, amounts).
71
+ // Binding fields live under quoteResponse.quoteRequest (recipient, refundTo,
72
+ // originAsset, ...) and quoteResponse.quote (depositAddress, depositMemo,
73
+ // deadline, amounts).
91
74
  const qr = parsed.quoteResponse;
92
75
  const request = qr?.quoteRequest ?? {};
93
76
  const quote = qr?.quote;
@@ -112,12 +95,7 @@ export async function fetchNearIntentStatus(input) {
112
95
  refundReason: parsed.swapDetails.refundReason ?? null,
113
96
  };
114
97
  }
115
- /**
116
- * Assert the returned intent binds the caller's expected destination address,
117
- * destination asset, and (optional) refund address.
118
- *
119
- * @throws {VerificationError} `E_NEAR_INTENT_MISBINDING` on any mismatch.
120
- */
98
+ // Throws E_NEAR_INTENT_MISBINDING on any mismatch.
121
99
  export function requireIntentBinds(intent, expected) {
122
100
  if (intent.destinationAddress !== expected.destinationAddress) {
123
101
  throw new VerificationError('E_NEAR_INTENT_MISBINDING', `intent destination ${String(intent.destinationAddress)} != expected ${expected.destinationAddress}`);
@@ -131,18 +109,9 @@ export function requireIntentBinds(intent, expected) {
131
109
  throw new VerificationError('E_NEAR_INTENT_MISBINDING', `intent refund ${String(intent.refundAddress)} != expected ${expected.refundAddress}`);
132
110
  }
133
111
  }
134
- /**
135
- * Enforce the quote deadline has at least the safety margin (90 min) before
136
- * it expires relative to `Date.now()`. The deadline lives at
137
- * `quoteResponse.quote.deadline` in the raw 1Click response and is surfaced
138
- * as `intent.deadline` after flattening.
139
- *
140
- * Returns silently if `intent.deadline` is null (1Click's dry-run quotes
141
- * omit the deadline; we cannot enforce expiry against an absent value).
142
- *
143
- * @throws {VerificationError} `E_NEAR_INTENT_EXPIRING` when the deadline is
144
- * sooner than the safety margin.
145
- */
112
+ // 90-minute safety margin against intent.deadline. Silent no-op when
113
+ // deadline is null (1Click dry-run quotes). Throws E_NEAR_INTENT_EXPIRING
114
+ // when remaining < margin.
146
115
  export function requireIntentDeadlineMargin(intent) {
147
116
  if (intent.deadline === null)
148
117
  return;
@@ -154,23 +123,12 @@ export function requireIntentDeadlineMargin(intent) {
154
123
  throw new VerificationError('E_NEAR_INTENT_EXPIRING', `intent deadline in ${(remaining / 60_000).toFixed(1)} minutes, below safety margin`);
155
124
  }
156
125
  }
157
- /**
158
- * **Direct-blockchain near-intents only NOT for 1Click swaps.**
159
- *
160
- * Queries the NEAR contract `intents.near` via JSON-RPC `get_intent` and
161
- * cross-checks that an intent hash binds the expected destination + amount.
162
- * This is the verification path for swaps that go through the solver-relay
163
- * directly. 1Click swaps do not surface usable on-chain intent hashes
164
- * suitable for this query — for 1Click, use `fetchNearIntentStatus` +
165
- * `requireIntentBinds` against the `/v0/status` URL instead.
166
- *
167
- * Kept available for a future direct-blockchain near_intents provider
168
- * (`packages/miradex-client/src/...` / `daemons/near/`).
169
- *
170
- * @throws {VerificationError} `E_NEAR_INTENT_FAILED` on RPC error.
171
- * @throws {VerificationError} `E_NEAR_INTENT_CHAIN_DEST` on destination mismatch.
172
- * @throws {VerificationError} `E_NEAR_INTENT_CHAIN_AMOUNT` on amount mismatch.
173
- */
126
+ // Direct-blockchain near-intents only, NOT for 1Click. Queries
127
+ // intents.near via JSON-RPC get_intent and confirms the intent hash binds
128
+ // the expected destination + amount. Kept around for a future
129
+ // direct-blockchain provider; 1Click swaps use fetchNearIntentStatus +
130
+ // requireIntentBinds against /v0/status instead.
131
+ // Throws E_NEAR_INTENT_FAILED (RPC), E_NEAR_INTENT_CHAIN_DEST, E_NEAR_INTENT_CHAIN_AMOUNT.
174
132
  export async function verifyNearIntentOnChain(input) {
175
133
  const timeoutMs = input.timeoutMs ?? VERIFY_FETCH_TIMEOUT_MS;
176
134
  const body = {
@@ -1 +1 @@
1
- {"version":3,"file":"near-intents.js","sourceRoot":"","sources":["../../src/verification/near-intents.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"near-intents.js","sourceRoot":"","sources":["../../src/verification/near-intents.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,qBAAqB,GAEtB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAEzD,4EAA4E;AAC5E,4EAA4E;AAC5E,+DAA+D;AAC/D,MAAM,eAAe,GAAsB;IACzC,iBAAiB;IACjB,kBAAkB;IAClB,oBAAoB;IACpB,YAAY;IACZ,SAAS;IACT,UAAU;CACX,CAAC;AAEF,MAAM,yBAAyB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEjD,uEAAuE;AACvE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,CAA0B,EAC1B,OAAgC,EAChC,cAA4B;IAE5B,MAAM,MAAM,GAAwB,EAAE,CAAC;IAEvC,8EAA8E;IAC9E,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;QAClB,OAAO,MAAM,CAAC,cAAc,EAAE;YAC5B,KAAK,CAAC,gBAAgB,EAAE,KAAK,EAAE,gCAAgC,CAAC;SACjE,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,UAAU,EAAE;YACtC,MAAM,EAAE,cAAc,KAAK,SAAS;gBAClC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,uBAAuB,CAAC,EAAE,cAAc,CAAC,CAAC;gBACjF,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,uBAAuB,CAAC;SACjD,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,OAAO,MAAM,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,EAAE,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;QACxF,CAAC;QAED,MAAM,OAAO,GAAY,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC1C,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACpD,OAAO,MAAM,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;QACpF,CAAC;QACD,MAAM,IAAI,GAAG,OAA8B,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,IAAI,EAAE,2BAA2B,CAAC,CAAC,CAAC;QAExE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,UAAU,GAAG,OAAO,MAAM,KAAK,QAAQ,IAAI,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAClF,MAAM,CAAC,IAAI,CACT,KAAK,CACH,mBAAmB,EACnB,UAAU,EACV,UAAU,CAAC,CAAC,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC,CAAC,WAAW,MAAM,IAAI,SAAS,EAAE,CACpE,CACF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;AAC1C,CAAC;AAQD,6BAA6B;AAC7B,iEAAiE;AACjE,yDAAyD;AACzD,yDAAyD;AACzD,0EAA0E;AAC1E,8DAA8D;AAC9D,sDAAsD;AACtD,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,KAAiC;IAEjC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,uBAAuB,CAAC;IAC7D,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAC7F,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACvB,MAAM,IAAI,iBAAiB,CACzB,8BAA8B,EAC9B,8CAA8C,CAC/C,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,iBAAiB,CAAC,sBAAsB,EAAE,QAAQ,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACpF,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,yBAAyB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpD,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,IAAI,iBAAiB,CACzB,sBAAsB,EACtB,0BACE,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,WAAW,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,EAC9E,EAAE,CACH,CAAC;IACJ,CAAC;IAED,6EAA6E;IAC7E,0EAA0E;IAC1E,sBAAsB;IACtB,MAAM,EAAE,GAAG,MAAM,CAAC,aAAa,CAAC;IAChC,MAAM,OAAO,GAAG,EAAE,EAAE,YAAY,IAAI,EAAE,CAAC;IACvC,MAAM,KAAK,GAAG,EAAE,EAAE,KAAK,CAAC;IAExB,MAAM,SAAS,GAAG,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IACnF,MAAM,QAAQ,GAAG,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;IAChF,MAAM,gBAAgB,GACpB,OAAO,OAAO,CAAC,gBAAgB,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC;IAEjF,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,cAAc,EAAE,KAAK,EAAE,cAAc,IAAI,IAAI;QAC7C,WAAW,EAAE,KAAK,EAAE,WAAW,IAAI,IAAI;QACvC,kBAAkB,EAAE,SAAS;QAC7B,kBAAkB,EAAE,gBAAgB;QACpC,aAAa,EAAE,QAAQ;QACvB,QAAQ,EAAE,KAAK,EAAE,QAAQ,IAAI,IAAI;QACjC,oBAAoB,EAAE,KAAK,EAAE,SAAS,IAAI,IAAI;QAC9C,kBAAkB,EAAE,MAAM,CAAC,WAAW,CAAC,SAAS,IAAI,IAAI;QACxD,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,IAAI;QACtD,cAAc,EAAE,MAAM,CAAC,WAAW,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACzE,mBAAmB,EAAE,MAAM,CAAC,WAAW,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACnF,YAAY,EAAE,MAAM,CAAC,WAAW,CAAC,YAAY,IAAI,IAAI;KACtD,CAAC;AACJ,CAAC;AAWD,mDAAmD;AACnD,MAAM,UAAU,kBAAkB,CAChC,MAAgC,EAChC,QAAiC;IAEjC,IAAI,MAAM,CAAC,kBAAkB,KAAK,QAAQ,CAAC,kBAAkB,EAAE,CAAC;QAC9D,MAAM,IAAI,iBAAiB,CACzB,0BAA0B,EAC1B,sBAAsB,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,gBAAgB,QAAQ,CAAC,kBAAkB,EAAE,CACrG,CAAC;IACJ,CAAC;IACD,IACE,QAAQ,CAAC,kBAAkB,KAAK,SAAS;QACzC,MAAM,CAAC,kBAAkB,KAAK,QAAQ,CAAC,kBAAkB,EACzD,CAAC;QACD,MAAM,IAAI,iBAAiB,CACzB,0BAA0B,EAC1B,2BAA2B,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,gBAAgB,QAAQ,CAAC,kBAAkB,EAAE,CAC1G,CAAC;IACJ,CAAC;IACD,IACE,QAAQ,CAAC,aAAa,KAAK,SAAS;QACpC,MAAM,CAAC,aAAa,KAAK,QAAQ,CAAC,aAAa,EAC/C,CAAC;QACD,MAAM,IAAI,iBAAiB,CACzB,0BAA0B,EAC1B,iBAAiB,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,gBAAgB,QAAQ,CAAC,aAAa,EAAE,CACtF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,qEAAqE;AACrE,0EAA0E;AAC1E,2BAA2B;AAC3B,MAAM,UAAU,2BAA2B,CACzC,MAAgC;IAEhC,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI;QAAE,OAAO;IACrC,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;IACvD,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;QAAE,OAAO;IACrC,MAAM,SAAS,GAAG,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC1C,IAAI,SAAS,GAAG,yBAAyB,EAAE,CAAC;QAC1C,MAAM,IAAI,iBAAiB,CACzB,wBAAwB,EACxB,sBAAsB,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,+BAA+B,CACrF,CAAC;IACJ,CAAC;AACH,CAAC;AAUD,+DAA+D;AAC/D,0EAA0E;AAC1E,8DAA8D;AAC9D,uEAAuE;AACvE,iDAAiD;AACjD,2FAA2F;AAC3F,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,KAAmC;IAEnC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,uBAAuB,CAAC;IAC7D,MAAM,IAAI,GAAG;QACX,OAAO,EAAE,KAAK;QACd,EAAE,EAAE,CAAC;QACL,MAAM,EAAE,OAAO;QACf,MAAM,EAAE;YACN,YAAY,EAAE,eAAe;YAC7B,QAAQ,EAAE,OAAO;YACjB,UAAU,EAAE,cAAc;YAC1B,WAAW,EAAE,YAAY;YACzB,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;SACxF;KACF,CAAC;IACF,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE;QAChD,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QAC1B,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC;KACvC,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,iBAAiB,CAAC,sBAAsB,EAAE,iBAAiB,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC7F,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAsC,CAAC;IAC/D,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,iBAAiB,CAAC,4BAA4B,EAAE,sCAAsC,CAAC,CAAC;IACpG,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,uBAAuB,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAClE,IAAI,MAAM,CAAC,kBAAkB,KAAK,KAAK,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC;QACpE,MAAM,IAAI,iBAAiB,CACzB,0BAA0B,EAC1B,wBAAwB,MAAM,CAAC,kBAAkB,cAAc,CAChE,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;QACxF,MAAM,IAAI,iBAAiB,CACzB,4BAA4B,EAC5B,mBAAmB,MAAM,CAAC,oBAAoB,gBAAgB,KAAK,CAAC,QAAQ,CAAC,oBAAoB,EAAE,CACpG,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -1,14 +1,3 @@
1
- /**
2
- * External rate oracles for cross-checking engine quotes.
3
- *
4
- * The client queries two independent oracles (e.g., CoinGecko + CryptoCompare)
5
- * and demands they agree within a band before allowing a swap to proceed.
6
- * Any wider disagreement surfaces as `E_ORACLE_SPREAD`; too few responses as
7
- * `E_ORACLE_QUORUM`.
8
- *
9
- * @security Closes AV-D.4 / AV-H.12 — protects against sidecar + proxy
10
- * collusion on rate quotes.
11
- */
12
1
  import type { Logger } from '../interfaces/logger.js';
13
2
  export interface RateOracleConfig {
14
3
  readonly oracleUrls: ReadonlyArray<string>;
@@ -17,16 +6,5 @@ export interface RateOracleConfig {
17
6
  readonly quorum: number;
18
7
  readonly logger?: Logger;
19
8
  }
20
- /**
21
- * Query every configured oracle in parallel, extract a numeric rate from each
22
- * response, and return the median if at least `quorum` oracles agree within
23
- * a 2 % band.
24
- *
25
- * @param input Oracle URLs, fetch function, timeout, quorum, logger.
26
- * @param extractRate Per-oracle adapter that pulls the rate out of the body.
27
- * @returns The median rate across all agreeing oracles.
28
- * @throws {VerificationError} `E_ORACLE_QUORUM` when fewer than `quorum`
29
- * oracles respond; `E_ORACLE_SPREAD` when the rates span more than 2 %.
30
- */
31
9
  export declare function fetchConsensusRate(input: RateOracleConfig, extractRate: (url: string, body: unknown) => number): Promise<number>;
32
10
  //# sourceMappingURL=rate-oracle.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rate-oracle.d.ts","sourceRoot":"","sources":["../../src/verification/rate-oracle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAKtD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC3C,QAAQ,CAAC,OAAO,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAC1C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAID;;;;;;;;;;GAUG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,gBAAgB,EACvB,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,MAAM,GAClD,OAAO,CAAC,MAAM,CAAC,CAoCjB"}
1
+ {"version":3,"file":"rate-oracle.d.ts","sourceRoot":"","sources":["../../src/verification/rate-oracle.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAKtD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC3C,QAAQ,CAAC,OAAO,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAC1C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAOD,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,gBAAgB,EACvB,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,MAAM,GAClD,OAAO,CAAC,MAAM,CAAC,CAoCjB"}
@@ -1,18 +1,13 @@
1
+ // AV-D.4 / AV-H.12: rate-oracle quorum. Query two independent oracles
2
+ // (CoinGecko + CryptoCompare etc.) and require agreement within a band.
3
+ // E_ORACLE_SPREAD on wider disagreement, E_ORACLE_QUORUM on too few responses.
1
4
  import { noopLogger } from '../interfaces/logger.js';
2
5
  import { VerificationError } from '../types/index.js';
3
6
  import { VERIFY_FETCH_TIMEOUT_MS } from './constants.js';
4
7
  const DEFAULT_SPREAD_CAP = 0.02; // 2 %
5
- /**
6
- * Query every configured oracle in parallel, extract a numeric rate from each
7
- * response, and return the median if at least `quorum` oracles agree within
8
- * a 2 % band.
9
- *
10
- * @param input Oracle URLs, fetch function, timeout, quorum, logger.
11
- * @param extractRate Per-oracle adapter that pulls the rate out of the body.
12
- * @returns The median rate across all agreeing oracles.
13
- * @throws {VerificationError} `E_ORACLE_QUORUM` when fewer than `quorum`
14
- * oracles respond; `E_ORACLE_SPREAD` when the rates span more than 2 %.
15
- */
8
+ // Returns the median rate across oracles that agree within 2%.
9
+ // Throws E_ORACLE_QUORUM if fewer than `quorum` responded,
10
+ // E_ORACLE_SPREAD if disagreement exceeds the cap.
16
11
  export async function fetchConsensusRate(input, extractRate) {
17
12
  const timeoutMs = input.timeoutMs ?? VERIFY_FETCH_TIMEOUT_MS;
18
13
  const log = input.logger ?? noopLogger;
@@ -1 +1 @@
1
- {"version":3,"file":"rate-oracle.js","sourceRoot":"","sources":["../../src/verification/rate-oracle.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAUzD,MAAM,kBAAkB,GAAG,IAAI,CAAC,CAAC,MAAM;AAEvC;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAAuB,EACvB,WAAmD;IAEnD,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,uBAAuB,CAAC;IAC7D,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,IAAI,UAAU,CAAC;IAEvC,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QAClD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACjF,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC3D,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,OAAO,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,OAAO;SAClB,MAAM,CAAC,CAAC,CAAC,EAAuC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC;SAC5E,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;SACnB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAE9C,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QAChC,MAAM,IAAI,iBAAiB,CACzB,iBAAiB,EACjB,QAAQ,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,oBAAoB,CACvF,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC;IAClE,IAAI,MAAM,GAAG,kBAAkB,EAAE,CAAC;QAChC,MAAM,IAAI,iBAAiB,CACzB,iBAAiB,EACjB,uBAAuB,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,kBAAkB,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CACpG,CAAC;IACJ,CAAC;IAED,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,0BAA0B,CAAC,CAAC;IACjF,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"rate-oracle.js","sourceRoot":"","sources":["../../src/verification/rate-oracle.ts"],"names":[],"mappings":"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"}
@@ -1,33 +1,6 @@
1
- /**
2
- * SDK-owned THORChain verification endpoints. Same shape as the chainflip
3
- * registry: hardcoded per network so the SDK never trusts the server-supplied
4
- * `verification.inbound_addresses_url`.
5
- *
6
- * On regtest the URL points at the system-tests fake-verifier
7
- * (`system-tests/verifier/`), which serves a `ThornodeInboundAddressesSchema`-
8
- * shaped response built from the swap row in Postgres.
9
- *
10
- * Returns `undefined` for any network without configured endpoints — the SDK
11
- * fails closed rather than falling back to server-supplied URLs.
12
- */
13
1
  export type ThorchainNetwork = 'mainnet' | 'testnet' | 'regtest';
14
2
  export interface ThorchainVerificationEndpoints {
15
- /**
16
- * `GET ${inboundAddressesUrl}` returns an array of
17
- * `ThornodeInboundAddress` objects (chain, address, halted, ...). This
18
- * is THORNode's *primary* inbound per chain — exactly one entry per
19
- * chain. On regtest the verifier echoes the swap row back as a
20
- * single-vault array.
21
- */
22
3
  readonly inboundAddressesUrl: string;
23
- /**
24
- * `GET ${asgardVaultsUrl}` returns every Asgard vault (not just the
25
- * primary), used as a fallback when the primary check misses. During
26
- * THORChain churn the primary inbound rotates ahead of the retiring
27
- * vault, but the retiring vault still legitimately accepts in-flight
28
- * deposits — the wider asgard list catches that case. Optional: if
29
- * unset (e.g. regtest), the verifier skips the fallback.
30
- */
31
4
  readonly asgardVaultsUrl?: string;
32
5
  }
33
6
  export declare const THORCHAIN_VERIFICATION_NETWORKS: Readonly<Partial<Record<ThorchainNetwork, ThorchainVerificationEndpoints>>>;
@@ -1 +1 @@
1
- {"version":3,"file":"thorchain-networks.d.ts","sourceRoot":"","sources":["../../src/verification/thorchain-networks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAEjE,MAAM,WAAW,8BAA8B;IAC7C;;;;;;OAMG;IACH,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC;;;;;;;OAOG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAwBD,eAAO,MAAM,+BAA+B,EAAE,QAAQ,CACpD,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,8BAA8B,CAAC,CAAC,CAalE,CAAC;AAEF,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,gBAAgB,GACxB,8BAA8B,GAAG,SAAS,CAE5C"}
1
+ {"version":3,"file":"thorchain-networks.d.ts","sourceRoot":"","sources":["../../src/verification/thorchain-networks.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAEjE,MAAM,WAAW,8BAA8B;IAE7C,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IAIrC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAiBD,eAAO,MAAM,+BAA+B,EAAE,QAAQ,CACpD,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,8BAA8B,CAAC,CAAC,CAalE,CAAC;AAEF,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,gBAAgB,GACxB,8BAA8B,GAAG,SAAS,CAE5C"}
@@ -1,21 +1,19 @@
1
- // Distinct from chainflip's verifier port (9099) so the two regtest stacks
2
- // (system-tests-chainflip / system-tests-thorchain) can run side-by-side
3
- // without contending on the same TCP port.
1
+ // Hardcoded per network so the SDK never trusts a server-supplied
2
+ // verification.inbound_addresses_url. On regtest the URL points at the
3
+ // system-tests fake-verifier (system-tests/verifier/), which serves a
4
+ // ThornodeInboundAddressesSchema-shaped response from the swap row.
5
+ // Returns undefined for unconfigured networks — SDK fails closed.
6
+ // Distinct from chainflip's regtest port (9099) so both stacks can run
7
+ // side-by-side.
4
8
  const DEFAULT_REGTEST_VERIFIER_URL = 'http://127.0.0.1:9098/thorchain/inbound_addresses';
5
- // THORNode public endpoints. Liquify is the primary because
6
- // `*.thorchain.network` gates aggressively with HTTP 403 for some IPs.
7
- // (Nine Realms `*.ninerealms.com` endpoints were retired April 2025.)
9
+ // Liquify is primary because *.thorchain.network HTTP-403s some IPs.
10
+ // Nine Realms (*.ninerealms.com) was retired April 2025.
8
11
  const THORCHAIN_MAINNET_INBOUND_ADDRESSES = 'https://gateway.liquify.com/chain/thorchain_api/thorchain/inbound_addresses';
9
12
  const THORCHAIN_MAINNET_ASGARD_VAULTS = 'https://gateway.liquify.com/chain/thorchain_api/thorchain/vaults/asgard';
10
- // Note on the missing stagenet entry: THORChain has no usable public
11
- // stagenet today (the legacy `stagenet-thornode.ninerealms.com` was
12
- // retired April 2025 and no replacement was published). The
13
- // product-level decision is that the `testnet` network flag governs
14
- // **atomic swaps only** — every other provider (thorchain, chainflip,
15
- // near-intents) executes on mainnet regardless of the flag, because
16
- // no usable testnet exists for them. So testnet here mirrors mainnet
17
- // — verification still hits real THORNode, swaps are real-money. The
18
- // UI surfaces this with the testnet banner so users aren't surprised.
13
+ // No usable public THORChain stagenet exists (legacy stagenet-thornode.ninerealms.com
14
+ // was retired April 2025, no replacement). The `testnet` flag governs
15
+ // atomicswap only; thorchain/chainflip/near-intents run on mainnet
16
+ // regardless. Testnet swaps are real-money UI shows a banner.
19
17
  export const THORCHAIN_VERIFICATION_NETWORKS = {
20
18
  mainnet: {
21
19
  inboundAddressesUrl: THORCHAIN_MAINNET_INBOUND_ADDRESSES,
@@ -1 +1 @@
1
- {"version":3,"file":"thorchain-networks.js","sourceRoot":"","sources":["../../src/verification/thorchain-networks.ts"],"names":[],"mappings":"AAkCA,2EAA2E;AAC3E,yEAAyE;AACzE,2CAA2C;AAC3C,MAAM,4BAA4B,GAAG,mDAAmD,CAAC;AAEzF,4DAA4D;AAC5D,uEAAuE;AACvE,sEAAsE;AACtE,MAAM,mCAAmC,GACvC,6EAA6E,CAAC;AAChF,MAAM,+BAA+B,GACnC,yEAAyE,CAAC;AAE5E,qEAAqE;AACrE,oEAAoE;AACpE,4DAA4D;AAC5D,oEAAoE;AACpE,sEAAsE;AACtE,oEAAoE;AACpE,qEAAqE;AACrE,qEAAqE;AACrE,sEAAsE;AACtE,MAAM,CAAC,MAAM,+BAA+B,GAExC;IACF,OAAO,EAAE;QACP,mBAAmB,EAAE,mCAAmC;QACxD,eAAe,EAAE,+BAA+B;KACjD;IACD,OAAO,EAAE;QACP,mBAAmB,EAAE,mCAAmC;QACxD,eAAe,EAAE,+BAA+B;KACjD;IACD,OAAO,EAAE;QACP,mBAAmB,EAAE,4BAA4B;KAClD;CACF,CAAC;AAEF,MAAM,UAAU,4BAA4B,CAC1C,OAAyB;IAEzB,OAAO,+BAA+B,CAAC,OAAO,CAAC,CAAC;AAClD,CAAC"}
1
+ {"version":3,"file":"thorchain-networks.js","sourceRoot":"","sources":["../../src/verification/thorchain-networks.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,uEAAuE;AACvE,sEAAsE;AACtE,oEAAoE;AACpE,kEAAkE;AAalE,uEAAuE;AACvE,gBAAgB;AAChB,MAAM,4BAA4B,GAAG,mDAAmD,CAAC;AAEzF,qEAAqE;AACrE,yDAAyD;AACzD,MAAM,mCAAmC,GACvC,6EAA6E,CAAC;AAChF,MAAM,+BAA+B,GACnC,yEAAyE,CAAC;AAE5E,sFAAsF;AACtF,sEAAsE;AACtE,mEAAmE;AACnE,gEAAgE;AAChE,MAAM,CAAC,MAAM,+BAA+B,GAExC;IACF,OAAO,EAAE;QACP,mBAAmB,EAAE,mCAAmC;QACxD,eAAe,EAAE,+BAA+B;KACjD;IACD,OAAO,EAAE;QACP,mBAAmB,EAAE,mCAAmC;QACxD,eAAe,EAAE,+BAA+B;KACjD;IACD,OAAO,EAAE;QACP,mBAAmB,EAAE,4BAA4B;KAClD;CACF,CAAC;AAEF,MAAM,UAAU,4BAA4B,CAC1C,OAAyB;IAEzB,OAAO,+BAA+B,CAAC,OAAO,CAAC,CAAC;AAClD,CAAC"}
@@ -3,34 +3,12 @@ import type { Logger } from '../interfaces/logger.js';
3
3
  import { type VerifyParams } from './shared.js';
4
4
  import { type ThornodeInboundAddress } from '../wire/thorchain.zod.js';
5
5
  import { type ThorchainNetwork } from './thorchain-networks.js';
6
- /**
7
- * Verify a THORChain deposit address against the SDK-owned inbound-addresses
8
- * endpoint. The endpoint is hardcoded per network in `thorchain-networks.ts`
9
- * — `v.inbound_addresses_url` from the server is intentionally ignored so a
10
- * compromised server cannot redirect verification to its own infrastructure.
11
- *
12
- * Memo is parsed strictly (no substring matching) per AV-A.14 / AV-K.6.
13
- * Vault quorum and quote cross-check live in separate helpers used by the
14
- * swap-executor layer.
15
- *
16
- * Fails closed when the network has no configured verifier endpoints.
17
- */
18
6
  export declare function verifyThorchain(depositAddress: string, v: ThorchainVerification, params: VerifyParams, fetchFn: typeof globalThis.fetch, network: ThorchainNetwork, resume?: boolean, externalSignal?: AbortSignal): Promise<VerificationResult>;
19
7
  export interface FetchThorchainVaultsInput {
20
8
  readonly fetchFn: typeof globalThis.fetch;
21
9
  readonly timeoutMs?: number;
22
10
  readonly logger?: Logger;
23
11
  }
24
- /**
25
- * Fetch THORChain inbound addresses from THORNode and Midgard in parallel.
26
- * Returns the list of vaults that appear in at least two independent sources
27
- * agreeing on `(chain, address)` and are not halted / paused.
28
- *
29
- * @throws {VerificationError} `E_THORCHAIN_QUORUM` when fewer than 2 sources
30
- * respond successfully.
31
- * @throws {VerificationError} `E_THORCHAIN_VAULT_DISAGREE` when no vault is
32
- * reported by at least 2 sources for the requested chain.
33
- */
34
12
  export declare function fetchThorchainVaults(input: FetchThorchainVaultsInput): Promise<readonly ThornodeInboundAddress[]>;
35
13
  export interface VerifyThorchainQuoteInput {
36
14
  readonly fromAsset: string;
@@ -43,13 +21,5 @@ export interface VerifyThorchainQuoteInput {
43
21
  readonly timeoutMs?: number;
44
22
  readonly thornodeUrls?: readonly string[];
45
23
  }
46
- /**
47
- * Cross-check the engine's `expectedOutput` against a live THORNode quote
48
- * fetched from ≥ 2 independent sources. Rejects when the engine value falls
49
- * outside the slippage band from the median of the node quotes.
50
- *
51
- * @throws {VerificationError} `E_THORNODE_QUOTE_UNAVAILABLE` when no source responds.
52
- * @throws {VerificationError} `E_RATE_DRIFT` when the engine value is out of band.
53
- */
54
24
  export declare function verifyThorchainQuote(input: VerifyThorchainQuoteInput): Promise<void>;
55
25
  //# sourceMappingURL=thorchain.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"thorchain.d.ts","sourceRoot":"","sources":["../../src/verification/thorchain.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAqB,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACtG,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAmC,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAGjF,OAAO,EAEL,KAAK,sBAAsB,EAI5B,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAgC,KAAK,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAmB9F;;;;;;;;;;;GAWG;AACH,wBAAsB,eAAe,CACnC,cAAc,EAAE,MAAM,EACtB,CAAC,EAAE,qBAAqB,EACxB,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,OAAO,UAAU,CAAC,KAAK,EAChC,OAAO,EAAE,gBAAgB,EACzB,MAAM,CAAC,EAAE,OAAO,EAChB,cAAc,CAAC,EAAE,WAAW,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CAqH7B;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,OAAO,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAC1C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,yBAAyB,GAC/B,OAAO,CAAC,SAAS,sBAAsB,EAAE,CAAC,CAe5C;AA0CD,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAC1C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3C;AAED;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkC1F"}
1
+ {"version":3,"file":"thorchain.d.ts","sourceRoot":"","sources":["../../src/verification/thorchain.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAqB,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACtG,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAmC,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAGjF,OAAO,EAEL,KAAK,sBAAsB,EAI5B,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAgC,KAAK,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAsB9F,wBAAsB,eAAe,CACnC,cAAc,EAAE,MAAM,EACtB,CAAC,EAAE,qBAAqB,EACxB,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,OAAO,UAAU,CAAC,KAAK,EAChC,OAAO,EAAE,gBAAgB,EACzB,MAAM,CAAC,EAAE,OAAO,EAChB,cAAc,CAAC,EAAE,WAAW,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CAkH7B;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,OAAO,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAC1C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAKD,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,yBAAyB,GAC/B,OAAO,CAAC,SAAS,sBAAsB,EAAE,CAAC,CAe5C;AA0CD,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAC1C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3C;AAMD,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkC1F"}