@avalabs/fusion-sdk 0.0.0-additive-fee-allowance-buffer-20260325170134

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 (428) hide show
  1. package/LICENSE +9 -0
  2. package/README.md +264 -0
  3. package/dist/_utils/chain.cjs +2 -0
  4. package/dist/_utils/chain.cjs.map +1 -0
  5. package/dist/_utils/chain.js +2 -0
  6. package/dist/_utils/chain.js.map +1 -0
  7. package/dist/_utils/math.cjs +2 -0
  8. package/dist/_utils/math.cjs.map +1 -0
  9. package/dist/_utils/math.js +2 -0
  10. package/dist/_utils/math.js.map +1 -0
  11. package/dist/_virtual/_rolldown/runtime.cjs +1 -0
  12. package/dist/constants.cjs +2 -0
  13. package/dist/constants.cjs.map +1 -0
  14. package/dist/constants.d.cts +102 -0
  15. package/dist/constants.d.ts +102 -0
  16. package/dist/constants.js +2 -0
  17. package/dist/constants.js.map +1 -0
  18. package/dist/errors.cjs +2 -0
  19. package/dist/errors.cjs.map +1 -0
  20. package/dist/errors.d.cts +117 -0
  21. package/dist/errors.d.ts +117 -0
  22. package/dist/errors.js +2 -0
  23. package/dist/errors.js.map +1 -0
  24. package/dist/mod.cjs +1 -0
  25. package/dist/mod.d.cts +20 -0
  26. package/dist/mod.d.ts +20 -0
  27. package/dist/mod.js +1 -0
  28. package/dist/quoter/_utils.cjs +2 -0
  29. package/dist/quoter/_utils.cjs.map +1 -0
  30. package/dist/quoter/_utils.js +2 -0
  31. package/dist/quoter/_utils.js.map +1 -0
  32. package/dist/quoter/constants.cjs +2 -0
  33. package/dist/quoter/constants.cjs.map +1 -0
  34. package/dist/quoter/constants.js +2 -0
  35. package/dist/quoter/constants.js.map +1 -0
  36. package/dist/quoter/quoter.cjs +2 -0
  37. package/dist/quoter/quoter.cjs.map +1 -0
  38. package/dist/quoter/quoter.d.cts +31 -0
  39. package/dist/quoter/quoter.d.ts +34 -0
  40. package/dist/quoter/quoter.js +2 -0
  41. package/dist/quoter/quoter.js.map +1 -0
  42. package/dist/transfer-manager.cjs +2 -0
  43. package/dist/transfer-manager.cjs.map +1 -0
  44. package/dist/transfer-manager.d.cts +17 -0
  45. package/dist/transfer-manager.d.ts +17 -0
  46. package/dist/transfer-manager.js +2 -0
  47. package/dist/transfer-manager.js.map +1 -0
  48. package/dist/transfer-service/_abis.cjs +2 -0
  49. package/dist/transfer-service/_abis.cjs.map +1 -0
  50. package/dist/transfer-service/_abis.js +2 -0
  51. package/dist/transfer-service/_abis.js.map +1 -0
  52. package/dist/transfer-service/_evm-gas.cjs +2 -0
  53. package/dist/transfer-service/_evm-gas.cjs.map +1 -0
  54. package/dist/transfer-service/_evm-gas.js +2 -0
  55. package/dist/transfer-service/_evm-gas.js.map +1 -0
  56. package/dist/transfer-service/_tracking-utilities.cjs +2 -0
  57. package/dist/transfer-service/_tracking-utilities.cjs.map +1 -0
  58. package/dist/transfer-service/_tracking-utilities.js +2 -0
  59. package/dist/transfer-service/_tracking-utilities.js.map +1 -0
  60. package/dist/transfer-service/_transfer-utilities.cjs +2 -0
  61. package/dist/transfer-service/_transfer-utilities.cjs.map +1 -0
  62. package/dist/transfer-service/_transfer-utilities.js +2 -0
  63. package/dist/transfer-service/_transfer-utilities.js.map +1 -0
  64. package/dist/transfer-service/_utils.cjs +2 -0
  65. package/dist/transfer-service/_utils.cjs.map +1 -0
  66. package/dist/transfer-service/_utils.js +2 -0
  67. package/dist/transfer-service/_utils.js.map +1 -0
  68. package/dist/transfer-service/_warden-config-schema.cjs +2 -0
  69. package/dist/transfer-service/_warden-config-schema.cjs.map +1 -0
  70. package/dist/transfer-service/_warden-config-schema.js +2 -0
  71. package/dist/transfer-service/_warden-config-schema.js.map +1 -0
  72. package/dist/transfer-service/_warden-config.cjs +2 -0
  73. package/dist/transfer-service/_warden-config.cjs.map +1 -0
  74. package/dist/transfer-service/_warden-config.js +2 -0
  75. package/dist/transfer-service/_warden-config.js.map +1 -0
  76. package/dist/transfer-service/avalanche-evm/_constants.cjs +2 -0
  77. package/dist/transfer-service/avalanche-evm/_constants.cjs.map +1 -0
  78. package/dist/transfer-service/avalanche-evm/_constants.js +2 -0
  79. package/dist/transfer-service/avalanche-evm/_constants.js.map +1 -0
  80. package/dist/transfer-service/avalanche-evm/_handlers/analyze-support.cjs +2 -0
  81. package/dist/transfer-service/avalanche-evm/_handlers/analyze-support.cjs.map +1 -0
  82. package/dist/transfer-service/avalanche-evm/_handlers/analyze-support.js +2 -0
  83. package/dist/transfer-service/avalanche-evm/_handlers/analyze-support.js.map +1 -0
  84. package/dist/transfer-service/avalanche-evm/_handlers/estimate-native-fee.cjs +2 -0
  85. package/dist/transfer-service/avalanche-evm/_handlers/estimate-native-fee.cjs.map +1 -0
  86. package/dist/transfer-service/avalanche-evm/_handlers/estimate-native-fee.js +2 -0
  87. package/dist/transfer-service/avalanche-evm/_handlers/estimate-native-fee.js.map +1 -0
  88. package/dist/transfer-service/avalanche-evm/_handlers/get-assets.cjs +2 -0
  89. package/dist/transfer-service/avalanche-evm/_handlers/get-assets.cjs.map +1 -0
  90. package/dist/transfer-service/avalanche-evm/_handlers/get-assets.js +2 -0
  91. package/dist/transfer-service/avalanche-evm/_handlers/get-assets.js.map +1 -0
  92. package/dist/transfer-service/avalanche-evm/_handlers/get-bridgeable-assets.cjs +2 -0
  93. package/dist/transfer-service/avalanche-evm/_handlers/get-bridgeable-assets.cjs.map +1 -0
  94. package/dist/transfer-service/avalanche-evm/_handlers/get-bridgeable-assets.js +2 -0
  95. package/dist/transfer-service/avalanche-evm/_handlers/get-bridgeable-assets.js.map +1 -0
  96. package/dist/transfer-service/avalanche-evm/_handlers/get-minimum-transfer-amount.cjs +2 -0
  97. package/dist/transfer-service/avalanche-evm/_handlers/get-minimum-transfer-amount.cjs.map +1 -0
  98. package/dist/transfer-service/avalanche-evm/_handlers/get-minimum-transfer-amount.js +2 -0
  99. package/dist/transfer-service/avalanche-evm/_handlers/get-minimum-transfer-amount.js.map +1 -0
  100. package/dist/transfer-service/avalanche-evm/_handlers/get-supported-chains.cjs +2 -0
  101. package/dist/transfer-service/avalanche-evm/_handlers/get-supported-chains.cjs.map +1 -0
  102. package/dist/transfer-service/avalanche-evm/_handlers/get-supported-chains.js +2 -0
  103. package/dist/transfer-service/avalanche-evm/_handlers/get-supported-chains.js.map +1 -0
  104. package/dist/transfer-service/avalanche-evm/_handlers/stream-quotes.cjs +2 -0
  105. package/dist/transfer-service/avalanche-evm/_handlers/stream-quotes.cjs.map +1 -0
  106. package/dist/transfer-service/avalanche-evm/_handlers/stream-quotes.js +2 -0
  107. package/dist/transfer-service/avalanche-evm/_handlers/stream-quotes.js.map +1 -0
  108. package/dist/transfer-service/avalanche-evm/_handlers/track-transfer.cjs +2 -0
  109. package/dist/transfer-service/avalanche-evm/_handlers/track-transfer.cjs.map +1 -0
  110. package/dist/transfer-service/avalanche-evm/_handlers/track-transfer.js +2 -0
  111. package/dist/transfer-service/avalanche-evm/_handlers/track-transfer.js.map +1 -0
  112. package/dist/transfer-service/avalanche-evm/_handlers/transfer-asset.cjs +2 -0
  113. package/dist/transfer-service/avalanche-evm/_handlers/transfer-asset.cjs.map +1 -0
  114. package/dist/transfer-service/avalanche-evm/_handlers/transfer-asset.js +2 -0
  115. package/dist/transfer-service/avalanche-evm/_handlers/transfer-asset.js.map +1 -0
  116. package/dist/transfer-service/avalanche-evm/_utils/fee.cjs +2 -0
  117. package/dist/transfer-service/avalanche-evm/_utils/fee.cjs.map +1 -0
  118. package/dist/transfer-service/avalanche-evm/_utils/fee.js +2 -0
  119. package/dist/transfer-service/avalanche-evm/_utils/fee.js.map +1 -0
  120. package/dist/transfer-service/avalanche-evm/_utils/get-config.cjs +2 -0
  121. package/dist/transfer-service/avalanche-evm/_utils/get-config.cjs.map +1 -0
  122. package/dist/transfer-service/avalanche-evm/_utils/get-config.js +2 -0
  123. package/dist/transfer-service/avalanche-evm/_utils/get-config.js.map +1 -0
  124. package/dist/transfer-service/avalanche-evm/_utils/transfer-data.cjs +2 -0
  125. package/dist/transfer-service/avalanche-evm/_utils/transfer-data.cjs.map +1 -0
  126. package/dist/transfer-service/avalanche-evm/_utils/transfer-data.js +2 -0
  127. package/dist/transfer-service/avalanche-evm/_utils/transfer-data.js.map +1 -0
  128. package/dist/transfer-service/avalanche-evm/_utils/unwrap.cjs +2 -0
  129. package/dist/transfer-service/avalanche-evm/_utils/unwrap.cjs.map +1 -0
  130. package/dist/transfer-service/avalanche-evm/_utils/unwrap.js +2 -0
  131. package/dist/transfer-service/avalanche-evm/_utils/unwrap.js.map +1 -0
  132. package/dist/transfer-service/avalanche-evm/_utils/validations.cjs +2 -0
  133. package/dist/transfer-service/avalanche-evm/_utils/validations.cjs.map +1 -0
  134. package/dist/transfer-service/avalanche-evm/_utils/validations.js +2 -0
  135. package/dist/transfer-service/avalanche-evm/_utils/validations.js.map +1 -0
  136. package/dist/transfer-service/avalanche-evm/_utils/wrap.cjs +2 -0
  137. package/dist/transfer-service/avalanche-evm/_utils/wrap.cjs.map +1 -0
  138. package/dist/transfer-service/avalanche-evm/_utils/wrap.js +2 -0
  139. package/dist/transfer-service/avalanche-evm/_utils/wrap.js.map +1 -0
  140. package/dist/transfer-service/avalanche-evm/avalanche-evm-service.cjs +2 -0
  141. package/dist/transfer-service/avalanche-evm/avalanche-evm-service.cjs.map +1 -0
  142. package/dist/transfer-service/avalanche-evm/avalanche-evm-service.js +2 -0
  143. package/dist/transfer-service/avalanche-evm/avalanche-evm-service.js.map +1 -0
  144. package/dist/transfer-service/fetch-utilities.cjs +4 -0
  145. package/dist/transfer-service/fetch-utilities.cjs.map +1 -0
  146. package/dist/transfer-service/fetch-utilities.js +4 -0
  147. package/dist/transfer-service/fetch-utilities.js.map +1 -0
  148. package/dist/transfer-service/lombard/_schema.cjs +2 -0
  149. package/dist/transfer-service/lombard/_schema.cjs.map +1 -0
  150. package/dist/transfer-service/lombard/_schema.js +2 -0
  151. package/dist/transfer-service/lombard/_schema.js.map +1 -0
  152. package/dist/transfer-service/lombard/_utils/asset.cjs +2 -0
  153. package/dist/transfer-service/lombard/_utils/asset.cjs.map +1 -0
  154. package/dist/transfer-service/lombard/_utils/asset.js +2 -0
  155. package/dist/transfer-service/lombard/_utils/asset.js.map +1 -0
  156. package/dist/transfer-service/lombard/_utils/chain.cjs +2 -0
  157. package/dist/transfer-service/lombard/_utils/chain.cjs.map +1 -0
  158. package/dist/transfer-service/lombard/_utils/chain.js +2 -0
  159. package/dist/transfer-service/lombard/_utils/chain.js.map +1 -0
  160. package/dist/transfer-service/lombard/_utils/fee.cjs +2 -0
  161. package/dist/transfer-service/lombard/_utils/fee.cjs.map +1 -0
  162. package/dist/transfer-service/lombard/_utils/fee.js +2 -0
  163. package/dist/transfer-service/lombard/_utils/fee.js.map +1 -0
  164. package/dist/transfer-service/lombard/_utils/metadata.cjs +2 -0
  165. package/dist/transfer-service/lombard/_utils/metadata.cjs.map +1 -0
  166. package/dist/transfer-service/lombard/_utils/metadata.js +2 -0
  167. package/dist/transfer-service/lombard/_utils/metadata.js.map +1 -0
  168. package/dist/transfer-service/lombard/_utils/utxo.cjs +2 -0
  169. package/dist/transfer-service/lombard/_utils/utxo.cjs.map +1 -0
  170. package/dist/transfer-service/lombard/_utils/utxo.js +2 -0
  171. package/dist/transfer-service/lombard/_utils/utxo.js.map +1 -0
  172. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/analyze-support.cjs +2 -0
  173. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/analyze-support.cjs.map +1 -0
  174. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/analyze-support.js +2 -0
  175. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/analyze-support.js.map +1 -0
  176. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/estimate-native-fee.cjs +2 -0
  177. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/estimate-native-fee.cjs.map +1 -0
  178. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/estimate-native-fee.js +2 -0
  179. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/estimate-native-fee.js.map +1 -0
  180. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-assets.cjs +2 -0
  181. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-assets.cjs.map +1 -0
  182. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-assets.js +2 -0
  183. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-assets.js.map +1 -0
  184. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-bridgeable-assets.cjs +2 -0
  185. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-bridgeable-assets.cjs.map +1 -0
  186. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-bridgeable-assets.js +2 -0
  187. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-bridgeable-assets.js.map +1 -0
  188. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-minimum-transfer-amount.cjs +2 -0
  189. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-minimum-transfer-amount.cjs.map +1 -0
  190. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-minimum-transfer-amount.js +2 -0
  191. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-minimum-transfer-amount.js.map +1 -0
  192. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/stream-quotes.cjs +2 -0
  193. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/stream-quotes.cjs.map +1 -0
  194. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/stream-quotes.js +2 -0
  195. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/stream-quotes.js.map +1 -0
  196. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/track-transfer.cjs +2 -0
  197. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/track-transfer.cjs.map +1 -0
  198. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/track-transfer.js +2 -0
  199. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/track-transfer.js.map +1 -0
  200. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/transfer-asset.cjs +2 -0
  201. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/transfer-asset.cjs.map +1 -0
  202. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/transfer-asset.js +2 -0
  203. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/transfer-asset.js.map +1 -0
  204. package/dist/transfer-service/lombard/btc-to-btcb-service.cjs +2 -0
  205. package/dist/transfer-service/lombard/btc-to-btcb-service.cjs.map +1 -0
  206. package/dist/transfer-service/lombard/btc-to-btcb-service.js +2 -0
  207. package/dist/transfer-service/lombard/btc-to-btcb-service.js.map +1 -0
  208. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/analyze-support.cjs +2 -0
  209. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/analyze-support.cjs.map +1 -0
  210. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/analyze-support.js +2 -0
  211. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/analyze-support.js.map +1 -0
  212. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/estimate-native-fee.cjs +2 -0
  213. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/estimate-native-fee.cjs.map +1 -0
  214. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/estimate-native-fee.js +2 -0
  215. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/estimate-native-fee.js.map +1 -0
  216. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/get-assets.cjs +2 -0
  217. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/get-assets.cjs.map +1 -0
  218. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/get-assets.js +2 -0
  219. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/get-assets.js.map +1 -0
  220. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/get-bridgeable-assets.cjs +2 -0
  221. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/get-bridgeable-assets.cjs.map +1 -0
  222. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/get-bridgeable-assets.js +2 -0
  223. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/get-bridgeable-assets.js.map +1 -0
  224. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/stream-quotes.cjs +2 -0
  225. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/stream-quotes.cjs.map +1 -0
  226. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/stream-quotes.js +2 -0
  227. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/stream-quotes.js.map +1 -0
  228. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/track-transfer.cjs +2 -0
  229. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/track-transfer.cjs.map +1 -0
  230. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/track-transfer.js +2 -0
  231. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/track-transfer.js.map +1 -0
  232. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/transfer-asset.cjs +2 -0
  233. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/transfer-asset.cjs.map +1 -0
  234. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/transfer-asset.js +2 -0
  235. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/transfer-asset.js.map +1 -0
  236. package/dist/transfer-service/lombard/btcb-to-btc-service.cjs +2 -0
  237. package/dist/transfer-service/lombard/btcb-to-btc-service.cjs.map +1 -0
  238. package/dist/transfer-service/lombard/btcb-to-btc-service.js +2 -0
  239. package/dist/transfer-service/lombard/btcb-to-btc-service.js.map +1 -0
  240. package/dist/transfer-service/lombard/constants.cjs +2 -0
  241. package/dist/transfer-service/lombard/constants.cjs.map +1 -0
  242. package/dist/transfer-service/lombard/constants.js +2 -0
  243. package/dist/transfer-service/lombard/constants.js.map +1 -0
  244. package/dist/transfer-service/markr/_abis/cross-chain-swap-wrapper-abi.cjs +2 -0
  245. package/dist/transfer-service/markr/_abis/cross-chain-swap-wrapper-abi.cjs.map +1 -0
  246. package/dist/transfer-service/markr/_abis/cross-chain-swap-wrapper-abi.js +2 -0
  247. package/dist/transfer-service/markr/_abis/cross-chain-swap-wrapper-abi.js.map +1 -0
  248. package/dist/transfer-service/markr/_abis/swap-wrapper-abi.cjs +2 -0
  249. package/dist/transfer-service/markr/_abis/swap-wrapper-abi.cjs.map +1 -0
  250. package/dist/transfer-service/markr/_abis/swap-wrapper-abi.js +2 -0
  251. package/dist/transfer-service/markr/_abis/swap-wrapper-abi.js.map +1 -0
  252. package/dist/transfer-service/markr/_api.cjs +2 -0
  253. package/dist/transfer-service/markr/_api.cjs.map +1 -0
  254. package/dist/transfer-service/markr/_api.js +2 -0
  255. package/dist/transfer-service/markr/_api.js.map +1 -0
  256. package/dist/transfer-service/markr/_handlers/analyze-support.cjs +2 -0
  257. package/dist/transfer-service/markr/_handlers/analyze-support.cjs.map +1 -0
  258. package/dist/transfer-service/markr/_handlers/analyze-support.js +2 -0
  259. package/dist/transfer-service/markr/_handlers/analyze-support.js.map +1 -0
  260. package/dist/transfer-service/markr/_handlers/estimate-native-fee.cjs +2 -0
  261. package/dist/transfer-service/markr/_handlers/estimate-native-fee.cjs.map +1 -0
  262. package/dist/transfer-service/markr/_handlers/estimate-native-fee.js +2 -0
  263. package/dist/transfer-service/markr/_handlers/estimate-native-fee.js.map +1 -0
  264. package/dist/transfer-service/markr/_handlers/get-assets.cjs +2 -0
  265. package/dist/transfer-service/markr/_handlers/get-assets.cjs.map +1 -0
  266. package/dist/transfer-service/markr/_handlers/get-assets.js +2 -0
  267. package/dist/transfer-service/markr/_handlers/get-assets.js.map +1 -0
  268. package/dist/transfer-service/markr/_handlers/get-bridgeable-assets.cjs +2 -0
  269. package/dist/transfer-service/markr/_handlers/get-bridgeable-assets.cjs.map +1 -0
  270. package/dist/transfer-service/markr/_handlers/get-bridgeable-assets.js +2 -0
  271. package/dist/transfer-service/markr/_handlers/get-bridgeable-assets.js.map +1 -0
  272. package/dist/transfer-service/markr/_handlers/get-minimum-transfer-amount.cjs +2 -0
  273. package/dist/transfer-service/markr/_handlers/get-minimum-transfer-amount.cjs.map +1 -0
  274. package/dist/transfer-service/markr/_handlers/get-minimum-transfer-amount.js +2 -0
  275. package/dist/transfer-service/markr/_handlers/get-minimum-transfer-amount.js.map +1 -0
  276. package/dist/transfer-service/markr/_handlers/stream-quotes.cjs +2 -0
  277. package/dist/transfer-service/markr/_handlers/stream-quotes.cjs.map +1 -0
  278. package/dist/transfer-service/markr/_handlers/stream-quotes.js +2 -0
  279. package/dist/transfer-service/markr/_handlers/stream-quotes.js.map +1 -0
  280. package/dist/transfer-service/markr/_handlers/track-transfer.cjs +2 -0
  281. package/dist/transfer-service/markr/_handlers/track-transfer.cjs.map +1 -0
  282. package/dist/transfer-service/markr/_handlers/track-transfer.js +2 -0
  283. package/dist/transfer-service/markr/_handlers/track-transfer.js.map +1 -0
  284. package/dist/transfer-service/markr/_handlers/transfer-asset.cjs +2 -0
  285. package/dist/transfer-service/markr/_handlers/transfer-asset.cjs.map +1 -0
  286. package/dist/transfer-service/markr/_handlers/transfer-asset.js +2 -0
  287. package/dist/transfer-service/markr/_handlers/transfer-asset.js.map +1 -0
  288. package/dist/transfer-service/markr/_schema.cjs +2 -0
  289. package/dist/transfer-service/markr/_schema.cjs.map +1 -0
  290. package/dist/transfer-service/markr/_schema.js +2 -0
  291. package/dist/transfer-service/markr/_schema.js.map +1 -0
  292. package/dist/transfer-service/markr/_solana-utils.cjs +2 -0
  293. package/dist/transfer-service/markr/_solana-utils.cjs.map +1 -0
  294. package/dist/transfer-service/markr/_solana-utils.js +2 -0
  295. package/dist/transfer-service/markr/_solana-utils.js.map +1 -0
  296. package/dist/transfer-service/markr/_type-guards.cjs +2 -0
  297. package/dist/transfer-service/markr/_type-guards.cjs.map +1 -0
  298. package/dist/transfer-service/markr/_type-guards.js +2 -0
  299. package/dist/transfer-service/markr/_type-guards.js.map +1 -0
  300. package/dist/transfer-service/markr/_utils.cjs +2 -0
  301. package/dist/transfer-service/markr/_utils.cjs.map +1 -0
  302. package/dist/transfer-service/markr/_utils.js +2 -0
  303. package/dist/transfer-service/markr/_utils.js.map +1 -0
  304. package/dist/transfer-service/markr/constants.cjs +2 -0
  305. package/dist/transfer-service/markr/constants.cjs.map +1 -0
  306. package/dist/transfer-service/markr/constants.js +2 -0
  307. package/dist/transfer-service/markr/constants.js.map +1 -0
  308. package/dist/transfer-service/markr/markr-service.cjs +2 -0
  309. package/dist/transfer-service/markr/markr-service.cjs.map +1 -0
  310. package/dist/transfer-service/markr/markr-service.js +2 -0
  311. package/dist/transfer-service/markr/markr-service.js.map +1 -0
  312. package/dist/transfer-service/service-schemas.cjs +2 -0
  313. package/dist/transfer-service/service-schemas.cjs.map +1 -0
  314. package/dist/transfer-service/service-schemas.js +2 -0
  315. package/dist/transfer-service/service-schemas.js.map +1 -0
  316. package/dist/transfer-service/wrap-unwrap/_handlers/analyze-support.cjs +2 -0
  317. package/dist/transfer-service/wrap-unwrap/_handlers/analyze-support.cjs.map +1 -0
  318. package/dist/transfer-service/wrap-unwrap/_handlers/analyze-support.js +2 -0
  319. package/dist/transfer-service/wrap-unwrap/_handlers/analyze-support.js.map +1 -0
  320. package/dist/transfer-service/wrap-unwrap/_handlers/estimate-native-fee.cjs +2 -0
  321. package/dist/transfer-service/wrap-unwrap/_handlers/estimate-native-fee.cjs.map +1 -0
  322. package/dist/transfer-service/wrap-unwrap/_handlers/estimate-native-fee.js +2 -0
  323. package/dist/transfer-service/wrap-unwrap/_handlers/estimate-native-fee.js.map +1 -0
  324. package/dist/transfer-service/wrap-unwrap/_handlers/get-assets.cjs +2 -0
  325. package/dist/transfer-service/wrap-unwrap/_handlers/get-assets.cjs.map +1 -0
  326. package/dist/transfer-service/wrap-unwrap/_handlers/get-assets.js +2 -0
  327. package/dist/transfer-service/wrap-unwrap/_handlers/get-assets.js.map +1 -0
  328. package/dist/transfer-service/wrap-unwrap/_handlers/get-bridgeable-assets.cjs +2 -0
  329. package/dist/transfer-service/wrap-unwrap/_handlers/get-bridgeable-assets.cjs.map +1 -0
  330. package/dist/transfer-service/wrap-unwrap/_handlers/get-bridgeable-assets.js +2 -0
  331. package/dist/transfer-service/wrap-unwrap/_handlers/get-bridgeable-assets.js.map +1 -0
  332. package/dist/transfer-service/wrap-unwrap/_handlers/get-minimum-transfer-amount.cjs +2 -0
  333. package/dist/transfer-service/wrap-unwrap/_handlers/get-minimum-transfer-amount.cjs.map +1 -0
  334. package/dist/transfer-service/wrap-unwrap/_handlers/get-minimum-transfer-amount.js +2 -0
  335. package/dist/transfer-service/wrap-unwrap/_handlers/get-minimum-transfer-amount.js.map +1 -0
  336. package/dist/transfer-service/wrap-unwrap/_handlers/stream-quotes.cjs +2 -0
  337. package/dist/transfer-service/wrap-unwrap/_handlers/stream-quotes.cjs.map +1 -0
  338. package/dist/transfer-service/wrap-unwrap/_handlers/stream-quotes.js +2 -0
  339. package/dist/transfer-service/wrap-unwrap/_handlers/stream-quotes.js.map +1 -0
  340. package/dist/transfer-service/wrap-unwrap/_handlers/track-transfer.cjs +2 -0
  341. package/dist/transfer-service/wrap-unwrap/_handlers/track-transfer.cjs.map +1 -0
  342. package/dist/transfer-service/wrap-unwrap/_handlers/track-transfer.js +2 -0
  343. package/dist/transfer-service/wrap-unwrap/_handlers/track-transfer.js.map +1 -0
  344. package/dist/transfer-service/wrap-unwrap/_handlers/transfer-asset.cjs +2 -0
  345. package/dist/transfer-service/wrap-unwrap/_handlers/transfer-asset.cjs.map +1 -0
  346. package/dist/transfer-service/wrap-unwrap/_handlers/transfer-asset.js +2 -0
  347. package/dist/transfer-service/wrap-unwrap/_handlers/transfer-asset.js.map +1 -0
  348. package/dist/transfer-service/wrap-unwrap/_utils.cjs +2 -0
  349. package/dist/transfer-service/wrap-unwrap/_utils.cjs.map +1 -0
  350. package/dist/transfer-service/wrap-unwrap/_utils.js +2 -0
  351. package/dist/transfer-service/wrap-unwrap/_utils.js.map +1 -0
  352. package/dist/transfer-service/wrap-unwrap/constants.cjs +2 -0
  353. package/dist/transfer-service/wrap-unwrap/constants.cjs.map +1 -0
  354. package/dist/transfer-service/wrap-unwrap/constants.js +2 -0
  355. package/dist/transfer-service/wrap-unwrap/constants.js.map +1 -0
  356. package/dist/transfer-service/wrap-unwrap/wrap-unwrap-service.cjs +2 -0
  357. package/dist/transfer-service/wrap-unwrap/wrap-unwrap-service.cjs.map +1 -0
  358. package/dist/transfer-service/wrap-unwrap/wrap-unwrap-service.js +2 -0
  359. package/dist/transfer-service/wrap-unwrap/wrap-unwrap-service.js.map +1 -0
  360. package/dist/type-guards.cjs +2 -0
  361. package/dist/type-guards.cjs.map +1 -0
  362. package/dist/type-guards.d.cts +16 -0
  363. package/dist/type-guards.d.ts +16 -0
  364. package/dist/type-guards.js +2 -0
  365. package/dist/type-guards.js.map +1 -0
  366. package/dist/types/asset.d.cts +66 -0
  367. package/dist/types/asset.d.ts +66 -0
  368. package/dist/types/bitcoin.d.cts +66 -0
  369. package/dist/types/bitcoin.d.ts +66 -0
  370. package/dist/types/caip.d.cts +30 -0
  371. package/dist/types/caip.d.ts +30 -0
  372. package/dist/types/chain.d.cts +17 -0
  373. package/dist/types/chain.d.ts +17 -0
  374. package/dist/types/fee.d.cts +13 -0
  375. package/dist/types/fee.d.ts +13 -0
  376. package/dist/types/quote.d.cts +165 -0
  377. package/dist/types/quote.d.ts +165 -0
  378. package/dist/types/service.d.cts +247 -0
  379. package/dist/types/service.d.ts +247 -0
  380. package/dist/types/signer.d.cts +52 -0
  381. package/dist/types/signer.d.ts +52 -0
  382. package/dist/types/transfer-manager.d.cts +119 -0
  383. package/dist/types/transfer-manager.d.ts +119 -0
  384. package/dist/types/transfer.d.cts +126 -0
  385. package/dist/types/transfer.d.ts +126 -0
  386. package/dist/types/utility-types.d.cts +21 -0
  387. package/dist/types/utility-types.d.ts +21 -0
  388. package/dist/utils/asset-id.cjs +2 -0
  389. package/dist/utils/asset-id.cjs.map +1 -0
  390. package/dist/utils/asset-id.js +2 -0
  391. package/dist/utils/asset-id.js.map +1 -0
  392. package/dist/utils/bitcoin-address.cjs +2 -0
  393. package/dist/utils/bitcoin-address.cjs.map +1 -0
  394. package/dist/utils/bitcoin-address.js +2 -0
  395. package/dist/utils/bitcoin-address.js.map +1 -0
  396. package/dist/utils/caip.cjs +2 -0
  397. package/dist/utils/caip.cjs.map +1 -0
  398. package/dist/utils/caip.d.cts +49 -0
  399. package/dist/utils/caip.d.ts +49 -0
  400. package/dist/utils/caip.js +2 -0
  401. package/dist/utils/caip.js.map +1 -0
  402. package/dist/utils/evm-address.cjs +2 -0
  403. package/dist/utils/evm-address.cjs.map +1 -0
  404. package/dist/utils/evm-address.js +2 -0
  405. package/dist/utils/evm-address.js.map +1 -0
  406. package/dist/utils/price-impact.cjs +2 -0
  407. package/dist/utils/price-impact.cjs.map +1 -0
  408. package/dist/utils/price-impact.d.cts +31 -0
  409. package/dist/utils/price-impact.d.ts +31 -0
  410. package/dist/utils/price-impact.js +2 -0
  411. package/dist/utils/price-impact.js.map +1 -0
  412. package/dist/utils/quote-fees.cjs +2 -0
  413. package/dist/utils/quote-fees.cjs.map +1 -0
  414. package/dist/utils/quote-fees.js +2 -0
  415. package/dist/utils/quote-fees.js.map +1 -0
  416. package/dist/utils/sol-address.cjs +2 -0
  417. package/dist/utils/sol-address.cjs.map +1 -0
  418. package/dist/utils/sol-address.js +2 -0
  419. package/dist/utils/sol-address.js.map +1 -0
  420. package/dist/utils/solana-transaction.d.cts +15 -0
  421. package/dist/utils/solana-transaction.d.ts +17 -0
  422. package/dist/utils/transfer-utils.cjs +2 -0
  423. package/dist/utils/transfer-utils.cjs.map +1 -0
  424. package/dist/utils/transfer-utils.d.cts +8 -0
  425. package/dist/utils/transfer-utils.d.ts +8 -0
  426. package/dist/utils/transfer-utils.js +2 -0
  427. package/dist/utils/transfer-utils.js.map +1 -0
  428. package/package.json +63 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swap-wrapper-abi.cjs","names":[],"sources":["../../../../src/transfer-service/markr/_abis/swap-wrapper-abi.ts"],"sourcesContent":["export const MARKR_SWAP_WRAPPER_ABI = [\n {\n inputs: [\n {\n internalType: 'address',\n name: '_protocolFeeCollector',\n type: 'address',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'constructor',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'target',\n type: 'address',\n },\n ],\n name: 'AddressEmptyCode',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'account',\n type: 'address',\n },\n ],\n name: 'AddressInsufficientBalance',\n type: 'error',\n },\n {\n inputs: [],\n name: 'EmptyCallData',\n type: 'error',\n },\n {\n inputs: [],\n name: 'EnforcedPause',\n type: 'error',\n },\n {\n inputs: [],\n name: 'ExpectedPause',\n type: 'error',\n },\n {\n inputs: [],\n name: 'FailedInnerCall',\n type: 'error',\n },\n {\n inputs: [],\n name: 'FeesExceedAmount',\n type: 'error',\n },\n {\n inputs: [],\n name: 'IncorrectMsgValue',\n type: 'error',\n },\n {\n inputs: [],\n name: 'InvalidToken',\n type: 'error',\n },\n {\n inputs: [],\n name: 'NativeTransferFailed',\n type: 'error',\n },\n {\n inputs: [],\n name: 'NotAuthorized',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'OwnableInvalidOwner',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'account',\n type: 'address',\n },\n ],\n name: 'OwnableUnauthorizedAccount',\n type: 'error',\n },\n {\n inputs: [],\n name: 'PartnerAlreadyRegistered',\n type: 'error',\n },\n {\n inputs: [],\n name: 'PartnerFeeTooHigh',\n type: 'error',\n },\n {\n inputs: [],\n name: 'ProtocolFeeTooHigh',\n type: 'error',\n },\n {\n inputs: [],\n name: 'ReentrancyGuardReentrantCall',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n ],\n name: 'SafeERC20FailedOperation',\n type: 'error',\n },\n {\n inputs: [],\n name: 'SameToken',\n type: 'error',\n },\n {\n inputs: [],\n name: 'SlippageTooHigh',\n type: 'error',\n },\n {\n inputs: [],\n name: 'TargetAlreadyWhitelisted',\n type: 'error',\n },\n {\n inputs: [],\n name: 'TargetCallFailed',\n type: 'error',\n },\n {\n inputs: [],\n name: 'TargetHasNoCode',\n type: 'error',\n },\n {\n inputs: [],\n name: 'TargetNotWhitelisted',\n type: 'error',\n },\n {\n inputs: [],\n name: 'TransactionExpired',\n type: 'error',\n },\n {\n inputs: [],\n name: 'UnknownPartner',\n type: 'error',\n },\n {\n inputs: [],\n name: 'UnsupportedToken',\n type: 'error',\n },\n {\n inputs: [],\n name: 'UnsupportedTokenOut',\n type: 'error',\n },\n {\n inputs: [],\n name: 'ZeroAddress',\n type: 'error',\n },\n {\n inputs: [],\n name: 'ZeroAmount',\n type: 'error',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'LeftoverDetected',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'previousOwner',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'newOwner',\n type: 'address',\n },\n ],\n name: 'OwnershipTransferStarted',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'previousOwner',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'newOwner',\n type: 'address',\n },\n ],\n name: 'OwnershipTransferred',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'bytes32',\n name: 'partnerId',\n type: 'bytes32',\n },\n {\n indexed: false,\n internalType: 'address',\n name: 'newUpdater',\n type: 'address',\n },\n ],\n name: 'PartnerAuthorizedUpdaterUpdated',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'bytes32',\n name: 'partnerId',\n type: 'bytes32',\n },\n {\n indexed: false,\n internalType: 'address',\n name: 'newCollector',\n type: 'address',\n },\n ],\n name: 'PartnerFeeCollectorUpdated',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'bytes32',\n name: 'partnerId',\n type: 'bytes32',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'newBps',\n type: 'uint256',\n },\n ],\n name: 'PartnerFeeUpdated',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'bytes32',\n name: 'partnerId',\n type: 'bytes32',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'collector',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'address',\n name: 'tokenOut',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'amountOut',\n type: 'uint256',\n },\n ],\n name: 'PartnerFeesDistributed',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'bytes32',\n name: 'partnerId',\n type: 'bytes32',\n },\n {\n indexed: false,\n internalType: 'address',\n name: 'authorizedUpdater',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'address',\n name: 'collector',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'bps',\n type: 'uint256',\n },\n ],\n name: 'PartnerRegistered',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'address',\n name: 'account',\n type: 'address',\n },\n ],\n name: 'Paused',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'address',\n name: 'oldCollector',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'address',\n name: 'newCollector',\n type: 'address',\n },\n ],\n name: 'ProtocolFeeCollectorUpdated',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'uint256',\n name: 'newBps',\n type: 'uint256',\n },\n ],\n name: 'ProtocolFeeUpdated',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'bytes32',\n name: 'partnerId',\n type: 'bytes32',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'collector',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'address',\n name: 'tokenOut',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'amountOut',\n type: 'uint256',\n },\n ],\n name: 'ProtocolFeesDistributed',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'bytes32',\n name: 'partnerId',\n type: 'bytes32',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'address',\n name: 'tokenIn',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'address',\n name: 'tokenOut',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'amountIn',\n type: 'uint256',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'amountOut',\n type: 'uint256',\n },\n ],\n name: 'SwapExecuted',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'address',\n name: 'target',\n type: 'address',\n },\n ],\n name: 'TargetRemoved',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'address',\n name: 'target',\n type: 'address',\n },\n ],\n name: 'TargetWhitelisted',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'TokensRescued',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'address',\n name: 'account',\n type: 'address',\n },\n ],\n name: 'Unpaused',\n type: 'event',\n },\n {\n inputs: [],\n name: 'MAX_PARTNER_FEE_BPS',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'MAX_PROTOCOL_FEE_BPS',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'acceptOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n name: 'isTargetAllowed',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'owner',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes32',\n name: '',\n type: 'bytes32',\n },\n ],\n name: 'partners',\n outputs: [\n {\n internalType: 'address',\n name: 'partnerFeeCollector',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'authorizedUpdater',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'partnerFeeBps',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'pause',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'paused',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'pendingOwner',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'protocolFeeBps',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'protocolFeeCollector',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes32',\n name: 'partnerId',\n type: 'bytes32',\n },\n {\n internalType: 'address',\n name: 'authorizedUpdater',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'feeCollector',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'feeBps',\n type: 'uint256',\n },\n ],\n name: 'registerPartner',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'target',\n type: 'address',\n },\n ],\n name: 'removeTarget',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'renounceOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n ],\n name: 'rescueNative',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n ],\n name: 'rescueTokens',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'target',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'tokenIn',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'tokenOut',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amountIn',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'minAmountOut',\n type: 'uint256',\n },\n {\n internalType: 'bytes32',\n name: 'partnerId',\n type: 'bytes32',\n },\n {\n internalType: 'bytes',\n name: 'callData',\n type: 'bytes',\n },\n {\n internalType: 'uint256',\n name: 'deadline',\n type: 'uint256',\n },\n {\n internalType: 'address',\n name: 'recipient',\n type: 'address',\n },\n ],\n name: 'swap',\n outputs: [],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'newOwner',\n type: 'address',\n },\n ],\n name: 'transferOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'unpause',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes32',\n name: 'partnerId',\n type: 'bytes32',\n },\n {\n internalType: 'address',\n name: 'newUpdater',\n type: 'address',\n },\n ],\n name: 'updatePartnerAuthorizedUpdater',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes32',\n name: 'partnerId',\n type: 'bytes32',\n },\n {\n internalType: 'uint256',\n name: 'newFeeBps',\n type: 'uint256',\n },\n ],\n name: 'updatePartnerFeeBps',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes32',\n name: 'partnerId',\n type: 'bytes32',\n },\n {\n internalType: 'address',\n name: 'newCollector',\n type: 'address',\n },\n ],\n name: 'updatePartnerFeeCollector',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'newFeeBps',\n type: 'uint256',\n },\n ],\n name: 'updateProtocolFeeBps',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'newCollector',\n type: 'address',\n },\n ],\n name: 'updateProtocolFeeCollector',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'target',\n type: 'address',\n },\n ],\n name: 'whitelistTarget',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n stateMutability: 'payable',\n type: 'receive',\n },\n] as const;\n"],"mappings":"AAAA,MAAa,EAAyB,CACpC,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,wBACN,KAAM,UACP,CACF,CACD,gBAAiB,aACjB,KAAM,cACP,CACD,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,SACN,KAAM,UACP,CACF,CACD,KAAM,mBACN,KAAM,QACP,CACD,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,UACN,KAAM,UACP,CACF,CACD,KAAM,6BACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,gBACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,gBACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,gBACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,kBACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,mBACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,oBACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,eACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,uBACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,gBACN,KAAM,QACP,CACD,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,QACN,KAAM,UACP,CACF,CACD,KAAM,sBACN,KAAM,QACP,CACD,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,UACN,KAAM,UACP,CACF,CACD,KAAM,6BACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,2BACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,oBACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,qBACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,+BACN,KAAM,QACP,CACD,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,QACN,KAAM,UACP,CACF,CACD,KAAM,2BACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,YACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,kBACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,2BACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,mBACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,kBACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,uBACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,qBACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,iBACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,mBACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,sBACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,cACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,aACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,QACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,SACN,KAAM,UACP,CACF,CACD,KAAM,mBACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,gBACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,WACN,KAAM,UACP,CACF,CACD,KAAM,2BACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,gBACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,WACN,KAAM,UACP,CACF,CACD,KAAM,uBACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,aACN,KAAM,UACP,CACF,CACD,KAAM,kCACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,eACN,KAAM,UACP,CACF,CACD,KAAM,6BACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,SACN,KAAM,UACP,CACF,CACD,KAAM,oBACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,WACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,UACP,CACF,CACD,KAAM,yBACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,oBACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,MACN,KAAM,UACP,CACF,CACD,KAAM,oBACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,UACN,KAAM,UACP,CACF,CACD,KAAM,SACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,eACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,eACN,KAAM,UACP,CACF,CACD,KAAM,8BACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,SACN,KAAM,UACP,CACF,CACD,KAAM,qBACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,WACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,UACP,CACF,CACD,KAAM,0BACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,OACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,UACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,WACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,WACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,UACP,CACF,CACD,KAAM,eACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,SACN,KAAM,UACP,CACF,CACD,KAAM,gBACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,SACN,KAAM,UACP,CACF,CACD,KAAM,oBACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,QACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,KACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,SACN,KAAM,UACP,CACF,CACD,KAAM,gBACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,UACN,KAAM,UACP,CACF,CACD,KAAM,WACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,sBACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,UACP,CACF,CACD,gBAAiB,OACjB,KAAM,WACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,uBACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,UACP,CACF,CACD,gBAAiB,OACjB,KAAM,WACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,kBACN,QAAS,EAAE,CACX,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,GACN,KAAM,UACP,CACF,CACD,KAAM,kBACN,QAAS,CACP,CACE,aAAc,OACd,KAAM,GACN,KAAM,OACP,CACF,CACD,gBAAiB,OACjB,KAAM,WACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,QACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,UACP,CACF,CACD,gBAAiB,OACjB,KAAM,WACP,CACD,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,GACN,KAAM,UACP,CACF,CACD,KAAM,WACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,sBACN,KAAM,UACP,CACD,CACE,aAAc,UACd,KAAM,oBACN,KAAM,UACP,CACD,CACE,aAAc,UACd,KAAM,gBACN,KAAM,UACP,CACF,CACD,gBAAiB,OACjB,KAAM,WACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,QACN,QAAS,EAAE,CACX,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,SACN,QAAS,CACP,CACE,aAAc,OACd,KAAM,GACN,KAAM,OACP,CACF,CACD,gBAAiB,OACjB,KAAM,WACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,eACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,UACP,CACF,CACD,gBAAiB,OACjB,KAAM,WACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,iBACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,UACP,CACF,CACD,gBAAiB,OACjB,KAAM,WACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,uBACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,UACP,CACF,CACD,gBAAiB,OACjB,KAAM,WACP,CACD,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,YACN,KAAM,UACP,CACD,CACE,aAAc,UACd,KAAM,oBACN,KAAM,UACP,CACD,CACE,aAAc,UACd,KAAM,eACN,KAAM,UACP,CACD,CACE,aAAc,UACd,KAAM,SACN,KAAM,UACP,CACF,CACD,KAAM,kBACN,QAAS,EAAE,CACX,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,SACN,KAAM,UACP,CACF,CACD,KAAM,eACN,QAAS,EAAE,CACX,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,oBACN,QAAS,EAAE,CACX,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,KACN,KAAM,UACP,CACF,CACD,KAAM,eACN,QAAS,EAAE,CACX,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,QACN,KAAM,UACP,CACD,CACE,aAAc,UACd,KAAM,KACN,KAAM,UACP,CACF,CACD,KAAM,eACN,QAAS,EAAE,CACX,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,SACN,KAAM,UACP,CACD,CACE,aAAc,UACd,KAAM,UACN,KAAM,UACP,CACD,CACE,aAAc,UACd,KAAM,WACN,KAAM,UACP,CACD,CACE,aAAc,UACd,KAAM,WACN,KAAM,UACP,CACD,CACE,aAAc,UACd,KAAM,eACN,KAAM,UACP,CACD,CACE,aAAc,UACd,KAAM,YACN,KAAM,UACP,CACD,CACE,aAAc,QACd,KAAM,WACN,KAAM,QACP,CACD,CACE,aAAc,UACd,KAAM,WACN,KAAM,UACP,CACD,CACE,aAAc,UACd,KAAM,YACN,KAAM,UACP,CACF,CACD,KAAM,OACN,QAAS,EAAE,CACX,gBAAiB,UACjB,KAAM,WACP,CACD,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,WACN,KAAM,UACP,CACF,CACD,KAAM,oBACN,QAAS,EAAE,CACX,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,UACN,QAAS,EAAE,CACX,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,YACN,KAAM,UACP,CACD,CACE,aAAc,UACd,KAAM,aACN,KAAM,UACP,CACF,CACD,KAAM,iCACN,QAAS,EAAE,CACX,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,YACN,KAAM,UACP,CACD,CACE,aAAc,UACd,KAAM,YACN,KAAM,UACP,CACF,CACD,KAAM,sBACN,QAAS,EAAE,CACX,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,YACN,KAAM,UACP,CACD,CACE,aAAc,UACd,KAAM,eACN,KAAM,UACP,CACF,CACD,KAAM,4BACN,QAAS,EAAE,CACX,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,YACN,KAAM,UACP,CACF,CACD,KAAM,uBACN,QAAS,EAAE,CACX,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,eACN,KAAM,UACP,CACF,CACD,KAAM,6BACN,QAAS,EAAE,CACX,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,SACN,KAAM,UACP,CACF,CACD,KAAM,kBACN,QAAS,EAAE,CACX,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,gBAAiB,UACjB,KAAM,UACP,CACF"}
@@ -0,0 +1,2 @@
1
+ const e=[{inputs:[{internalType:`address`,name:`_protocolFeeCollector`,type:`address`}],stateMutability:`nonpayable`,type:`constructor`},{inputs:[{internalType:`address`,name:`target`,type:`address`}],name:`AddressEmptyCode`,type:`error`},{inputs:[{internalType:`address`,name:`account`,type:`address`}],name:`AddressInsufficientBalance`,type:`error`},{inputs:[],name:`EmptyCallData`,type:`error`},{inputs:[],name:`EnforcedPause`,type:`error`},{inputs:[],name:`ExpectedPause`,type:`error`},{inputs:[],name:`FailedInnerCall`,type:`error`},{inputs:[],name:`FeesExceedAmount`,type:`error`},{inputs:[],name:`IncorrectMsgValue`,type:`error`},{inputs:[],name:`InvalidToken`,type:`error`},{inputs:[],name:`NativeTransferFailed`,type:`error`},{inputs:[],name:`NotAuthorized`,type:`error`},{inputs:[{internalType:`address`,name:`owner`,type:`address`}],name:`OwnableInvalidOwner`,type:`error`},{inputs:[{internalType:`address`,name:`account`,type:`address`}],name:`OwnableUnauthorizedAccount`,type:`error`},{inputs:[],name:`PartnerAlreadyRegistered`,type:`error`},{inputs:[],name:`PartnerFeeTooHigh`,type:`error`},{inputs:[],name:`ProtocolFeeTooHigh`,type:`error`},{inputs:[],name:`ReentrancyGuardReentrantCall`,type:`error`},{inputs:[{internalType:`address`,name:`token`,type:`address`}],name:`SafeERC20FailedOperation`,type:`error`},{inputs:[],name:`SameToken`,type:`error`},{inputs:[],name:`SlippageTooHigh`,type:`error`},{inputs:[],name:`TargetAlreadyWhitelisted`,type:`error`},{inputs:[],name:`TargetCallFailed`,type:`error`},{inputs:[],name:`TargetHasNoCode`,type:`error`},{inputs:[],name:`TargetNotWhitelisted`,type:`error`},{inputs:[],name:`TransactionExpired`,type:`error`},{inputs:[],name:`UnknownPartner`,type:`error`},{inputs:[],name:`UnsupportedToken`,type:`error`},{inputs:[],name:`UnsupportedTokenOut`,type:`error`},{inputs:[],name:`ZeroAddress`,type:`error`},{inputs:[],name:`ZeroAmount`,type:`error`},{anonymous:!1,inputs:[{indexed:!1,internalType:`address`,name:`token`,type:`address`},{indexed:!1,internalType:`uint256`,name:`amount`,type:`uint256`}],name:`LeftoverDetected`,type:`event`},{anonymous:!1,inputs:[{indexed:!0,internalType:`address`,name:`previousOwner`,type:`address`},{indexed:!0,internalType:`address`,name:`newOwner`,type:`address`}],name:`OwnershipTransferStarted`,type:`event`},{anonymous:!1,inputs:[{indexed:!0,internalType:`address`,name:`previousOwner`,type:`address`},{indexed:!0,internalType:`address`,name:`newOwner`,type:`address`}],name:`OwnershipTransferred`,type:`event`},{anonymous:!1,inputs:[{indexed:!0,internalType:`bytes32`,name:`partnerId`,type:`bytes32`},{indexed:!1,internalType:`address`,name:`newUpdater`,type:`address`}],name:`PartnerAuthorizedUpdaterUpdated`,type:`event`},{anonymous:!1,inputs:[{indexed:!0,internalType:`bytes32`,name:`partnerId`,type:`bytes32`},{indexed:!1,internalType:`address`,name:`newCollector`,type:`address`}],name:`PartnerFeeCollectorUpdated`,type:`event`},{anonymous:!1,inputs:[{indexed:!0,internalType:`bytes32`,name:`partnerId`,type:`bytes32`},{indexed:!1,internalType:`uint256`,name:`newBps`,type:`uint256`}],name:`PartnerFeeUpdated`,type:`event`},{anonymous:!1,inputs:[{indexed:!0,internalType:`bytes32`,name:`partnerId`,type:`bytes32`},{indexed:!0,internalType:`address`,name:`collector`,type:`address`},{indexed:!1,internalType:`address`,name:`tokenOut`,type:`address`},{indexed:!1,internalType:`uint256`,name:`amountOut`,type:`uint256`}],name:`PartnerFeesDistributed`,type:`event`},{anonymous:!1,inputs:[{indexed:!0,internalType:`bytes32`,name:`partnerId`,type:`bytes32`},{indexed:!1,internalType:`address`,name:`authorizedUpdater`,type:`address`},{indexed:!1,internalType:`address`,name:`collector`,type:`address`},{indexed:!1,internalType:`uint256`,name:`bps`,type:`uint256`}],name:`PartnerRegistered`,type:`event`},{anonymous:!1,inputs:[{indexed:!1,internalType:`address`,name:`account`,type:`address`}],name:`Paused`,type:`event`},{anonymous:!1,inputs:[{indexed:!1,internalType:`address`,name:`oldCollector`,type:`address`},{indexed:!1,internalType:`address`,name:`newCollector`,type:`address`}],name:`ProtocolFeeCollectorUpdated`,type:`event`},{anonymous:!1,inputs:[{indexed:!1,internalType:`uint256`,name:`newBps`,type:`uint256`}],name:`ProtocolFeeUpdated`,type:`event`},{anonymous:!1,inputs:[{indexed:!0,internalType:`bytes32`,name:`partnerId`,type:`bytes32`},{indexed:!0,internalType:`address`,name:`collector`,type:`address`},{indexed:!1,internalType:`address`,name:`tokenOut`,type:`address`},{indexed:!1,internalType:`uint256`,name:`amountOut`,type:`uint256`}],name:`ProtocolFeesDistributed`,type:`event`},{anonymous:!1,inputs:[{indexed:!0,internalType:`bytes32`,name:`partnerId`,type:`bytes32`},{indexed:!0,internalType:`address`,name:`user`,type:`address`},{indexed:!1,internalType:`address`,name:`tokenIn`,type:`address`},{indexed:!1,internalType:`address`,name:`tokenOut`,type:`address`},{indexed:!1,internalType:`uint256`,name:`amountIn`,type:`uint256`},{indexed:!1,internalType:`uint256`,name:`amountOut`,type:`uint256`}],name:`SwapExecuted`,type:`event`},{anonymous:!1,inputs:[{indexed:!1,internalType:`address`,name:`target`,type:`address`}],name:`TargetRemoved`,type:`event`},{anonymous:!1,inputs:[{indexed:!1,internalType:`address`,name:`target`,type:`address`}],name:`TargetWhitelisted`,type:`event`},{anonymous:!1,inputs:[{indexed:!1,internalType:`address`,name:`token`,type:`address`},{indexed:!1,internalType:`address`,name:`to`,type:`address`},{indexed:!1,internalType:`uint256`,name:`amount`,type:`uint256`}],name:`TokensRescued`,type:`event`},{anonymous:!1,inputs:[{indexed:!1,internalType:`address`,name:`account`,type:`address`}],name:`Unpaused`,type:`event`},{inputs:[],name:`MAX_PARTNER_FEE_BPS`,outputs:[{internalType:`uint256`,name:``,type:`uint256`}],stateMutability:`view`,type:`function`},{inputs:[],name:`MAX_PROTOCOL_FEE_BPS`,outputs:[{internalType:`uint256`,name:``,type:`uint256`}],stateMutability:`view`,type:`function`},{inputs:[],name:`acceptOwnership`,outputs:[],stateMutability:`nonpayable`,type:`function`},{inputs:[{internalType:`address`,name:``,type:`address`}],name:`isTargetAllowed`,outputs:[{internalType:`bool`,name:``,type:`bool`}],stateMutability:`view`,type:`function`},{inputs:[],name:`owner`,outputs:[{internalType:`address`,name:``,type:`address`}],stateMutability:`view`,type:`function`},{inputs:[{internalType:`bytes32`,name:``,type:`bytes32`}],name:`partners`,outputs:[{internalType:`address`,name:`partnerFeeCollector`,type:`address`},{internalType:`address`,name:`authorizedUpdater`,type:`address`},{internalType:`uint256`,name:`partnerFeeBps`,type:`uint256`}],stateMutability:`view`,type:`function`},{inputs:[],name:`pause`,outputs:[],stateMutability:`nonpayable`,type:`function`},{inputs:[],name:`paused`,outputs:[{internalType:`bool`,name:``,type:`bool`}],stateMutability:`view`,type:`function`},{inputs:[],name:`pendingOwner`,outputs:[{internalType:`address`,name:``,type:`address`}],stateMutability:`view`,type:`function`},{inputs:[],name:`protocolFeeBps`,outputs:[{internalType:`uint256`,name:``,type:`uint256`}],stateMutability:`view`,type:`function`},{inputs:[],name:`protocolFeeCollector`,outputs:[{internalType:`address`,name:``,type:`address`}],stateMutability:`view`,type:`function`},{inputs:[{internalType:`bytes32`,name:`partnerId`,type:`bytes32`},{internalType:`address`,name:`authorizedUpdater`,type:`address`},{internalType:`address`,name:`feeCollector`,type:`address`},{internalType:`uint256`,name:`feeBps`,type:`uint256`}],name:`registerPartner`,outputs:[],stateMutability:`nonpayable`,type:`function`},{inputs:[{internalType:`address`,name:`target`,type:`address`}],name:`removeTarget`,outputs:[],stateMutability:`nonpayable`,type:`function`},{inputs:[],name:`renounceOwnership`,outputs:[],stateMutability:`nonpayable`,type:`function`},{inputs:[{internalType:`address`,name:`to`,type:`address`}],name:`rescueNative`,outputs:[],stateMutability:`nonpayable`,type:`function`},{inputs:[{internalType:`address`,name:`token`,type:`address`},{internalType:`address`,name:`to`,type:`address`}],name:`rescueTokens`,outputs:[],stateMutability:`nonpayable`,type:`function`},{inputs:[{internalType:`address`,name:`target`,type:`address`},{internalType:`address`,name:`tokenIn`,type:`address`},{internalType:`address`,name:`tokenOut`,type:`address`},{internalType:`uint256`,name:`amountIn`,type:`uint256`},{internalType:`uint256`,name:`minAmountOut`,type:`uint256`},{internalType:`bytes32`,name:`partnerId`,type:`bytes32`},{internalType:`bytes`,name:`callData`,type:`bytes`},{internalType:`uint256`,name:`deadline`,type:`uint256`},{internalType:`address`,name:`recipient`,type:`address`}],name:`swap`,outputs:[],stateMutability:`payable`,type:`function`},{inputs:[{internalType:`address`,name:`newOwner`,type:`address`}],name:`transferOwnership`,outputs:[],stateMutability:`nonpayable`,type:`function`},{inputs:[],name:`unpause`,outputs:[],stateMutability:`nonpayable`,type:`function`},{inputs:[{internalType:`bytes32`,name:`partnerId`,type:`bytes32`},{internalType:`address`,name:`newUpdater`,type:`address`}],name:`updatePartnerAuthorizedUpdater`,outputs:[],stateMutability:`nonpayable`,type:`function`},{inputs:[{internalType:`bytes32`,name:`partnerId`,type:`bytes32`},{internalType:`uint256`,name:`newFeeBps`,type:`uint256`}],name:`updatePartnerFeeBps`,outputs:[],stateMutability:`nonpayable`,type:`function`},{inputs:[{internalType:`bytes32`,name:`partnerId`,type:`bytes32`},{internalType:`address`,name:`newCollector`,type:`address`}],name:`updatePartnerFeeCollector`,outputs:[],stateMutability:`nonpayable`,type:`function`},{inputs:[{internalType:`uint256`,name:`newFeeBps`,type:`uint256`}],name:`updateProtocolFeeBps`,outputs:[],stateMutability:`nonpayable`,type:`function`},{inputs:[{internalType:`address`,name:`newCollector`,type:`address`}],name:`updateProtocolFeeCollector`,outputs:[],stateMutability:`nonpayable`,type:`function`},{inputs:[{internalType:`address`,name:`target`,type:`address`}],name:`whitelistTarget`,outputs:[],stateMutability:`nonpayable`,type:`function`},{stateMutability:`payable`,type:`receive`}];export{e as MARKR_SWAP_WRAPPER_ABI};
2
+ //# sourceMappingURL=swap-wrapper-abi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swap-wrapper-abi.js","names":[],"sources":["../../../../src/transfer-service/markr/_abis/swap-wrapper-abi.ts"],"sourcesContent":["export const MARKR_SWAP_WRAPPER_ABI = [\n {\n inputs: [\n {\n internalType: 'address',\n name: '_protocolFeeCollector',\n type: 'address',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'constructor',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'target',\n type: 'address',\n },\n ],\n name: 'AddressEmptyCode',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'account',\n type: 'address',\n },\n ],\n name: 'AddressInsufficientBalance',\n type: 'error',\n },\n {\n inputs: [],\n name: 'EmptyCallData',\n type: 'error',\n },\n {\n inputs: [],\n name: 'EnforcedPause',\n type: 'error',\n },\n {\n inputs: [],\n name: 'ExpectedPause',\n type: 'error',\n },\n {\n inputs: [],\n name: 'FailedInnerCall',\n type: 'error',\n },\n {\n inputs: [],\n name: 'FeesExceedAmount',\n type: 'error',\n },\n {\n inputs: [],\n name: 'IncorrectMsgValue',\n type: 'error',\n },\n {\n inputs: [],\n name: 'InvalidToken',\n type: 'error',\n },\n {\n inputs: [],\n name: 'NativeTransferFailed',\n type: 'error',\n },\n {\n inputs: [],\n name: 'NotAuthorized',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'OwnableInvalidOwner',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'account',\n type: 'address',\n },\n ],\n name: 'OwnableUnauthorizedAccount',\n type: 'error',\n },\n {\n inputs: [],\n name: 'PartnerAlreadyRegistered',\n type: 'error',\n },\n {\n inputs: [],\n name: 'PartnerFeeTooHigh',\n type: 'error',\n },\n {\n inputs: [],\n name: 'ProtocolFeeTooHigh',\n type: 'error',\n },\n {\n inputs: [],\n name: 'ReentrancyGuardReentrantCall',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n ],\n name: 'SafeERC20FailedOperation',\n type: 'error',\n },\n {\n inputs: [],\n name: 'SameToken',\n type: 'error',\n },\n {\n inputs: [],\n name: 'SlippageTooHigh',\n type: 'error',\n },\n {\n inputs: [],\n name: 'TargetAlreadyWhitelisted',\n type: 'error',\n },\n {\n inputs: [],\n name: 'TargetCallFailed',\n type: 'error',\n },\n {\n inputs: [],\n name: 'TargetHasNoCode',\n type: 'error',\n },\n {\n inputs: [],\n name: 'TargetNotWhitelisted',\n type: 'error',\n },\n {\n inputs: [],\n name: 'TransactionExpired',\n type: 'error',\n },\n {\n inputs: [],\n name: 'UnknownPartner',\n type: 'error',\n },\n {\n inputs: [],\n name: 'UnsupportedToken',\n type: 'error',\n },\n {\n inputs: [],\n name: 'UnsupportedTokenOut',\n type: 'error',\n },\n {\n inputs: [],\n name: 'ZeroAddress',\n type: 'error',\n },\n {\n inputs: [],\n name: 'ZeroAmount',\n type: 'error',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'LeftoverDetected',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'previousOwner',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'newOwner',\n type: 'address',\n },\n ],\n name: 'OwnershipTransferStarted',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'previousOwner',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'newOwner',\n type: 'address',\n },\n ],\n name: 'OwnershipTransferred',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'bytes32',\n name: 'partnerId',\n type: 'bytes32',\n },\n {\n indexed: false,\n internalType: 'address',\n name: 'newUpdater',\n type: 'address',\n },\n ],\n name: 'PartnerAuthorizedUpdaterUpdated',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'bytes32',\n name: 'partnerId',\n type: 'bytes32',\n },\n {\n indexed: false,\n internalType: 'address',\n name: 'newCollector',\n type: 'address',\n },\n ],\n name: 'PartnerFeeCollectorUpdated',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'bytes32',\n name: 'partnerId',\n type: 'bytes32',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'newBps',\n type: 'uint256',\n },\n ],\n name: 'PartnerFeeUpdated',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'bytes32',\n name: 'partnerId',\n type: 'bytes32',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'collector',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'address',\n name: 'tokenOut',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'amountOut',\n type: 'uint256',\n },\n ],\n name: 'PartnerFeesDistributed',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'bytes32',\n name: 'partnerId',\n type: 'bytes32',\n },\n {\n indexed: false,\n internalType: 'address',\n name: 'authorizedUpdater',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'address',\n name: 'collector',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'bps',\n type: 'uint256',\n },\n ],\n name: 'PartnerRegistered',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'address',\n name: 'account',\n type: 'address',\n },\n ],\n name: 'Paused',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'address',\n name: 'oldCollector',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'address',\n name: 'newCollector',\n type: 'address',\n },\n ],\n name: 'ProtocolFeeCollectorUpdated',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'uint256',\n name: 'newBps',\n type: 'uint256',\n },\n ],\n name: 'ProtocolFeeUpdated',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'bytes32',\n name: 'partnerId',\n type: 'bytes32',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'collector',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'address',\n name: 'tokenOut',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'amountOut',\n type: 'uint256',\n },\n ],\n name: 'ProtocolFeesDistributed',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'bytes32',\n name: 'partnerId',\n type: 'bytes32',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'address',\n name: 'tokenIn',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'address',\n name: 'tokenOut',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'amountIn',\n type: 'uint256',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'amountOut',\n type: 'uint256',\n },\n ],\n name: 'SwapExecuted',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'address',\n name: 'target',\n type: 'address',\n },\n ],\n name: 'TargetRemoved',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'address',\n name: 'target',\n type: 'address',\n },\n ],\n name: 'TargetWhitelisted',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'TokensRescued',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'address',\n name: 'account',\n type: 'address',\n },\n ],\n name: 'Unpaused',\n type: 'event',\n },\n {\n inputs: [],\n name: 'MAX_PARTNER_FEE_BPS',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'MAX_PROTOCOL_FEE_BPS',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'acceptOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n name: 'isTargetAllowed',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'owner',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes32',\n name: '',\n type: 'bytes32',\n },\n ],\n name: 'partners',\n outputs: [\n {\n internalType: 'address',\n name: 'partnerFeeCollector',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'authorizedUpdater',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'partnerFeeBps',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'pause',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'paused',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'pendingOwner',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'protocolFeeBps',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'protocolFeeCollector',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes32',\n name: 'partnerId',\n type: 'bytes32',\n },\n {\n internalType: 'address',\n name: 'authorizedUpdater',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'feeCollector',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'feeBps',\n type: 'uint256',\n },\n ],\n name: 'registerPartner',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'target',\n type: 'address',\n },\n ],\n name: 'removeTarget',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'renounceOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n ],\n name: 'rescueNative',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n ],\n name: 'rescueTokens',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'target',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'tokenIn',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'tokenOut',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amountIn',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'minAmountOut',\n type: 'uint256',\n },\n {\n internalType: 'bytes32',\n name: 'partnerId',\n type: 'bytes32',\n },\n {\n internalType: 'bytes',\n name: 'callData',\n type: 'bytes',\n },\n {\n internalType: 'uint256',\n name: 'deadline',\n type: 'uint256',\n },\n {\n internalType: 'address',\n name: 'recipient',\n type: 'address',\n },\n ],\n name: 'swap',\n outputs: [],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'newOwner',\n type: 'address',\n },\n ],\n name: 'transferOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'unpause',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes32',\n name: 'partnerId',\n type: 'bytes32',\n },\n {\n internalType: 'address',\n name: 'newUpdater',\n type: 'address',\n },\n ],\n name: 'updatePartnerAuthorizedUpdater',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes32',\n name: 'partnerId',\n type: 'bytes32',\n },\n {\n internalType: 'uint256',\n name: 'newFeeBps',\n type: 'uint256',\n },\n ],\n name: 'updatePartnerFeeBps',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes32',\n name: 'partnerId',\n type: 'bytes32',\n },\n {\n internalType: 'address',\n name: 'newCollector',\n type: 'address',\n },\n ],\n name: 'updatePartnerFeeCollector',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'newFeeBps',\n type: 'uint256',\n },\n ],\n name: 'updateProtocolFeeBps',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'newCollector',\n type: 'address',\n },\n ],\n name: 'updateProtocolFeeCollector',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'target',\n type: 'address',\n },\n ],\n name: 'whitelistTarget',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n stateMutability: 'payable',\n type: 'receive',\n },\n] as const;\n"],"mappings":"AAAA,MAAa,EAAyB,CACpC,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,wBACN,KAAM,UACP,CACF,CACD,gBAAiB,aACjB,KAAM,cACP,CACD,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,SACN,KAAM,UACP,CACF,CACD,KAAM,mBACN,KAAM,QACP,CACD,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,UACN,KAAM,UACP,CACF,CACD,KAAM,6BACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,gBACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,gBACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,gBACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,kBACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,mBACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,oBACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,eACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,uBACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,gBACN,KAAM,QACP,CACD,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,QACN,KAAM,UACP,CACF,CACD,KAAM,sBACN,KAAM,QACP,CACD,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,UACN,KAAM,UACP,CACF,CACD,KAAM,6BACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,2BACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,oBACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,qBACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,+BACN,KAAM,QACP,CACD,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,QACN,KAAM,UACP,CACF,CACD,KAAM,2BACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,YACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,kBACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,2BACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,mBACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,kBACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,uBACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,qBACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,iBACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,mBACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,sBACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,cACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,aACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,QACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,SACN,KAAM,UACP,CACF,CACD,KAAM,mBACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,gBACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,WACN,KAAM,UACP,CACF,CACD,KAAM,2BACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,gBACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,WACN,KAAM,UACP,CACF,CACD,KAAM,uBACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,aACN,KAAM,UACP,CACF,CACD,KAAM,kCACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,eACN,KAAM,UACP,CACF,CACD,KAAM,6BACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,SACN,KAAM,UACP,CACF,CACD,KAAM,oBACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,WACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,UACP,CACF,CACD,KAAM,yBACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,oBACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,MACN,KAAM,UACP,CACF,CACD,KAAM,oBACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,UACN,KAAM,UACP,CACF,CACD,KAAM,SACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,eACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,eACN,KAAM,UACP,CACF,CACD,KAAM,8BACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,SACN,KAAM,UACP,CACF,CACD,KAAM,qBACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,WACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,UACP,CACF,CACD,KAAM,0BACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,OACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,UACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,WACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,WACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,UACP,CACF,CACD,KAAM,eACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,SACN,KAAM,UACP,CACF,CACD,KAAM,gBACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,SACN,KAAM,UACP,CACF,CACD,KAAM,oBACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,QACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,KACN,KAAM,UACP,CACD,CACE,QAAS,GACT,aAAc,UACd,KAAM,SACN,KAAM,UACP,CACF,CACD,KAAM,gBACN,KAAM,QACP,CACD,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,aAAc,UACd,KAAM,UACN,KAAM,UACP,CACF,CACD,KAAM,WACN,KAAM,QACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,sBACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,UACP,CACF,CACD,gBAAiB,OACjB,KAAM,WACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,uBACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,UACP,CACF,CACD,gBAAiB,OACjB,KAAM,WACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,kBACN,QAAS,EAAE,CACX,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,GACN,KAAM,UACP,CACF,CACD,KAAM,kBACN,QAAS,CACP,CACE,aAAc,OACd,KAAM,GACN,KAAM,OACP,CACF,CACD,gBAAiB,OACjB,KAAM,WACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,QACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,UACP,CACF,CACD,gBAAiB,OACjB,KAAM,WACP,CACD,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,GACN,KAAM,UACP,CACF,CACD,KAAM,WACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,sBACN,KAAM,UACP,CACD,CACE,aAAc,UACd,KAAM,oBACN,KAAM,UACP,CACD,CACE,aAAc,UACd,KAAM,gBACN,KAAM,UACP,CACF,CACD,gBAAiB,OACjB,KAAM,WACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,QACN,QAAS,EAAE,CACX,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,SACN,QAAS,CACP,CACE,aAAc,OACd,KAAM,GACN,KAAM,OACP,CACF,CACD,gBAAiB,OACjB,KAAM,WACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,eACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,UACP,CACF,CACD,gBAAiB,OACjB,KAAM,WACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,iBACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,UACP,CACF,CACD,gBAAiB,OACjB,KAAM,WACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,uBACN,QAAS,CACP,CACE,aAAc,UACd,KAAM,GACN,KAAM,UACP,CACF,CACD,gBAAiB,OACjB,KAAM,WACP,CACD,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,YACN,KAAM,UACP,CACD,CACE,aAAc,UACd,KAAM,oBACN,KAAM,UACP,CACD,CACE,aAAc,UACd,KAAM,eACN,KAAM,UACP,CACD,CACE,aAAc,UACd,KAAM,SACN,KAAM,UACP,CACF,CACD,KAAM,kBACN,QAAS,EAAE,CACX,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,SACN,KAAM,UACP,CACF,CACD,KAAM,eACN,QAAS,EAAE,CACX,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,oBACN,QAAS,EAAE,CACX,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,KACN,KAAM,UACP,CACF,CACD,KAAM,eACN,QAAS,EAAE,CACX,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,QACN,KAAM,UACP,CACD,CACE,aAAc,UACd,KAAM,KACN,KAAM,UACP,CACF,CACD,KAAM,eACN,QAAS,EAAE,CACX,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,SACN,KAAM,UACP,CACD,CACE,aAAc,UACd,KAAM,UACN,KAAM,UACP,CACD,CACE,aAAc,UACd,KAAM,WACN,KAAM,UACP,CACD,CACE,aAAc,UACd,KAAM,WACN,KAAM,UACP,CACD,CACE,aAAc,UACd,KAAM,eACN,KAAM,UACP,CACD,CACE,aAAc,UACd,KAAM,YACN,KAAM,UACP,CACD,CACE,aAAc,QACd,KAAM,WACN,KAAM,QACP,CACD,CACE,aAAc,UACd,KAAM,WACN,KAAM,UACP,CACD,CACE,aAAc,UACd,KAAM,YACN,KAAM,UACP,CACF,CACD,KAAM,OACN,QAAS,EAAE,CACX,gBAAiB,UACjB,KAAM,WACP,CACD,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,WACN,KAAM,UACP,CACF,CACD,KAAM,oBACN,QAAS,EAAE,CACX,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,OAAQ,EAAE,CACV,KAAM,UACN,QAAS,EAAE,CACX,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,YACN,KAAM,UACP,CACD,CACE,aAAc,UACd,KAAM,aACN,KAAM,UACP,CACF,CACD,KAAM,iCACN,QAAS,EAAE,CACX,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,YACN,KAAM,UACP,CACD,CACE,aAAc,UACd,KAAM,YACN,KAAM,UACP,CACF,CACD,KAAM,sBACN,QAAS,EAAE,CACX,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,YACN,KAAM,UACP,CACD,CACE,aAAc,UACd,KAAM,eACN,KAAM,UACP,CACF,CACD,KAAM,4BACN,QAAS,EAAE,CACX,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,YACN,KAAM,UACP,CACF,CACD,KAAM,uBACN,QAAS,EAAE,CACX,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,eACN,KAAM,UACP,CACF,CACD,KAAM,6BACN,QAAS,EAAE,CACX,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,OAAQ,CACN,CACE,aAAc,UACd,KAAM,SACN,KAAM,UACP,CACF,CACD,KAAM,kBACN,QAAS,EAAE,CACX,gBAAiB,aACjB,KAAM,WACP,CACD,CACE,gBAAiB,UACjB,KAAM,UACP,CACF"}
@@ -0,0 +1,2 @@
1
+ const e=require(`../../errors.cjs`),t=require(`./_schema.cjs`),n=require(`../fetch-utilities.cjs`);function r(e){if(e)return{Authorization:`Bearer ${e}`}}async function i({apiBaseUrl:i,apiToken:a,fetch:o}){let s=`/info/chains`,c=await n.fetchJson(n.combineUrlPathnames(i,s),{headers:r(a),fetch:o}),l=t.SupportedChainsResponseSchema.safeParse(c);if(!l.success)throw new e.ResponseValidationError(`Invalid response from Markr "${s}" endpoint.`,l.error.issues);return l.data}async function a({apiBaseUrl:i,apiToken:a,fetch:o},s){let c=`/tokens/${s}/list`,l=await n.fetchJson(n.combineUrlPathnames(i,c),{headers:r(a),fetch:o}),u=t.TokenListResponseSchema.safeParse(l);if(!u.success)throw new e.ResponseValidationError(`Invalid response from Markr "${c}" endpoint.`,u.error.issues);return u.data}async function o({apiBaseUrl:i,apiToken:a,fetch:o},s,{onDone:c,onError:l,onQuote:u,signal:d}){let f=`/quote`,p=n.combineUrlPathnames(i,f),m=[];try{for await(let i of n.fetchEventStream(p,{body:JSON.stringify(s),fetch:o,headers:r(a),signal:d})){let n=t.QuoteResponseSchema.safeParse(JSON.parse(i.data));if(!n.success){l(new e.ResponseValidationError(`Invalid quote data received from Markr "${f}" endpoint.`,n.error.issues));continue}`done`in n.data?c():(u(n.data),m.push(n.data))}}catch(e){e instanceof Error?l(e):l(Error(`An unknown error occurred during the quote stream.`,{cause:e})),c()}return m}async function s({apiBaseUrl:i,apiToken:a,fetch:o},s){let c=`/swap`,l=await n.fetchJson(n.combineUrlPathnames(i,c),{body:JSON.stringify(s),fetch:o,headers:r(a),method:`POST`}),u=t.SwapResponseSchema.safeParse(l);if(!u.success)throw new e.ResponseValidationError(`Invalid response from Markr "${c}" endpoint.`,u.error.issues);return u.data}async function c({apiBaseUrl:i,apiToken:a,fetch:o}){let s=`/info/partner`,c=await n.fetchJson(n.combineUrlPathnames(i,s),{headers:r(a),fetch:o}),l=t.PartnerInfoResponseSchema.safeParse(c);if(!l.success)throw new e.ResponseValidationError(`Invalid response from Markr "${s}" endpoint.`,l.error.issues);return l.data}async function l({apiBaseUrl:i,apiToken:a,fetch:o},s,{signal:c}={}){let l=`/cross-chain/status/${s}`,u=await n.fetchJson(n.combineUrlPathnames(i,l),{headers:r(a),fetch:o,retries:10,retryOn(t){let n=(t.init.method??`GET`).toUpperCase();if(![`GET`,`HEAD`,`OPTIONS`,`TRACE`].includes(n))return!1;if(t.error)return!(t.error instanceof e.AbortedError);let r=t.response?.status??0;return r===404||r===408||r===425||r===429||r>=500&&r<=599},signal:c}),d=t.CrossChainStatusResponseSchema.safeParse(u);if(!d.success)throw new e.ResponseValidationError(`Invalid response from Markr "${l}" endpoint.`,d.error.issues,u);return d.data}async function u({apiBaseUrl:i,apiToken:a,fetch:o},{chainId:s,crossChainSwap:c,quoteId:l}){let u=`/spender-address?chainId=${s}&cross=${c?`true`:`false`}&uuid=${l}`,d=await n.fetchJson(n.combineUrlPathnames(i,u),{headers:r(a),fetch:o}),f=t.SpenderAddressResponseSchema.safeParse(d);if(!f.success)throw new e.ResponseValidationError(`Invalid response from Markr "${u}" endpoint.`,f.error.issues);return f.data}exports.markrGetCrossChainStatus=l,exports.markrGetInfoChains=i,exports.markrGetPartnerInfo=c,exports.markrGetSpenderAddress=u,exports.markrGetTokenList=a,exports.markrStreamQuote=o,exports.markrSwap=s;
2
+ //# sourceMappingURL=_api.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_api.cjs","names":["fetchJson","combineUrlPathnames","SupportedChainsResponseSchema","ResponseValidationError","TokenListResponseSchema","fetchEventStream","QuoteResponseSchema","SwapResponseSchema","PartnerInfoResponseSchema","AbortedError","CrossChainStatusResponseSchema","SpenderAddressResponseSchema"],"sources":["../../../src/transfer-service/markr/_api.ts"],"sourcesContent":["import type { Address as SolanaAddress } from '@solana/kit';\nimport type { Address as EvmAddress } from 'viem';\nimport { AbortedError, ResponseValidationError } from '../../errors';\nimport { combineUrlPathnames, fetchEventStream, fetchJson } from '../fetch-utilities';\nimport {\n CrossChainStatusResponseSchema,\n PartnerInfoResponseSchema,\n QuoteResponseSchema,\n SpenderAddressResponseSchema,\n SupportedChainsResponseSchema,\n SwapResponseSchema,\n TokenListResponseSchema,\n type CrossChainStatusResponse,\n type PartnerInfoResponse,\n type QuoteResponseData,\n type SpenderAddressResponse,\n type SupportedChainsResponse,\n type SwapResponse,\n type TokenListResponse,\n} from './_schema';\nimport type { Caip2ChainId } from '../../types/caip';\nimport type { Fetch } from '../../types/utility-types';\n\nexport interface ApiOptions {\n apiBaseUrl: URL;\n apiToken?: string;\n fetch?: Fetch;\n}\n\nfunction getAuthHeaders(apiToken?: string): Record<string, string> | undefined {\n if (!apiToken) {\n return undefined;\n }\n\n return { Authorization: `Bearer ${apiToken}` };\n}\n\nexport async function markrGetInfoChains({\n apiBaseUrl,\n apiToken,\n fetch: customFetch,\n}: ApiOptions): Promise<SupportedChainsResponse> {\n const endpoint = '/info/chains';\n const url = combineUrlPathnames(apiBaseUrl, endpoint);\n\n const rawJson = await fetchJson(url, { headers: getAuthHeaders(apiToken), fetch: customFetch });\n\n const parsed = SupportedChainsResponseSchema.safeParse(rawJson);\n\n if (!parsed.success) {\n throw new ResponseValidationError(`Invalid response from Markr \"${endpoint}\" endpoint.`, parsed.error.issues);\n }\n\n return parsed.data;\n}\n\nexport async function markrGetTokenList(\n { apiBaseUrl, apiToken, fetch: customFetch }: ApiOptions,\n chainId: number,\n): Promise<TokenListResponse> {\n const endpoint = `/tokens/${chainId}/list`;\n const url = combineUrlPathnames(apiBaseUrl, endpoint);\n\n const rawJson = await fetchJson(url, { headers: getAuthHeaders(apiToken), fetch: customFetch });\n\n const parsed = TokenListResponseSchema.safeParse(rawJson);\n\n if (!parsed.success) {\n throw new ResponseValidationError(`Invalid response from Markr \"${endpoint}\" endpoint.`, parsed.error.issues);\n }\n\n return parsed.data;\n}\n\nexport interface MarkrStreamQuoteParams {\n amount: string;\n appId: string;\n chainId: number | Caip2ChainId;\n destinationChainId?: number | Caip2ChainId;\n slippage?: number;\n tokenIn: string;\n tokenInDecimals: number;\n tokenOut: string;\n tokenOutDecimals: number;\n /**\n * Required ONLY for cross-chain swaps involving EVM.\n *\n * EVM -> EVM (different chains)\n * EVM -> Solana\n * Solana -> EVM\n */\n userEvmAddress?: EvmAddress;\n /**\n * Required ONLY for cross-chain swaps involving Solana.\n *\n * Solana -> EVM\n * EVM -> Solana\n * Solana -> Solana\n */\n userSolanaAddress?: SolanaAddress;\n}\n\nexport interface MarkrStreamQuoteOptions {\n onDone: () => void;\n onError: (error: Error) => void;\n onQuote: (data: QuoteResponseData) => void;\n signal?: AbortSignal;\n}\n\nexport async function markrStreamQuote(\n { apiBaseUrl, apiToken, fetch: customFetch }: ApiOptions,\n params: MarkrStreamQuoteParams,\n { onDone, onError, onQuote, signal }: MarkrStreamQuoteOptions,\n): Promise<ReadonlyArray<QuoteResponseData>> {\n const endpoint = '/quote';\n const url = combineUrlPathnames(apiBaseUrl, endpoint);\n\n const quotes: QuoteResponseData[] = [];\n\n try {\n for await (const event of fetchEventStream(url, {\n body: JSON.stringify(params),\n fetch: customFetch,\n headers: getAuthHeaders(apiToken),\n signal,\n })) {\n const parsedData = QuoteResponseSchema.safeParse(JSON.parse(event.data));\n\n if (!parsedData.success) {\n onError(\n new ResponseValidationError(\n `Invalid quote data received from Markr \"${endpoint}\" endpoint.`,\n parsedData.error.issues,\n ),\n );\n continue;\n }\n\n if (!('done' in parsedData.data)) {\n onQuote(parsedData.data);\n quotes.push(parsedData.data);\n } else {\n onDone();\n }\n }\n } catch (error) {\n if (error instanceof Error) {\n onError(error);\n } else {\n onError(new Error('An unknown error occurred during the quote stream.', { cause: error }));\n }\n\n onDone();\n }\n\n return quotes;\n}\n\nexport interface MarkrGetSwapParams {\n appId: string;\n /** Input amount in token's smallest unit */\n amountIn: string;\n /** Return raw transaction data alongside wrapped data */\n debug?: boolean;\n /** Minimum expected output amount */\n minAmountOut: string;\n /** Input token contract address */\n tokenIn: string;\n /** Output token contract address */\n tokenOut: string;\n /** Solana wallet public key (required for Solana swaps) */\n userPublicKey?: string;\n /** Quote UUID from previous quote request */\n uuid: string;\n}\n\nexport async function markrSwap(\n { apiBaseUrl, apiToken, fetch: customFetch }: ApiOptions,\n params: MarkrGetSwapParams,\n): Promise<SwapResponse> {\n const endpoint = '/swap';\n const url = combineUrlPathnames(apiBaseUrl, endpoint);\n\n const rawJson = await fetchJson(url, {\n body: JSON.stringify(params),\n fetch: customFetch,\n headers: getAuthHeaders(apiToken),\n method: 'POST',\n });\n\n const parsed = SwapResponseSchema.safeParse(rawJson);\n\n if (!parsed.success) {\n throw new ResponseValidationError(`Invalid response from Markr \"${endpoint}\" endpoint.`, parsed.error.issues);\n }\n\n return parsed.data;\n}\n\nexport async function markrGetPartnerInfo({\n apiBaseUrl,\n apiToken,\n fetch: customFetch,\n}: ApiOptions): Promise<PartnerInfoResponse> {\n const endpoint = '/info/partner';\n const url = combineUrlPathnames(apiBaseUrl, endpoint);\n\n const rawJson = await fetchJson(url, { headers: getAuthHeaders(apiToken), fetch: customFetch });\n\n const parsed = PartnerInfoResponseSchema.safeParse(rawJson);\n\n if (!parsed.success) {\n throw new ResponseValidationError(`Invalid response from Markr \"${endpoint}\" endpoint.`, parsed.error.issues);\n }\n\n return parsed.data;\n}\n\nexport async function markrGetCrossChainStatus(\n { apiBaseUrl, apiToken, fetch: customFetch }: ApiOptions,\n sourceTxHash: string,\n { signal }: { signal?: AbortSignal } = {},\n): Promise<CrossChainStatusResponse> {\n const endpoint = `/cross-chain/status/${sourceTxHash}`;\n const url = combineUrlPathnames(apiBaseUrl, endpoint);\n\n const rawJson = await fetchJson(url, {\n headers: getAuthHeaders(apiToken),\n fetch: customFetch,\n retries: 10,\n retryOn(ctx) {\n const method = (ctx.init.method ?? 'GET').toUpperCase();\n\n if (!['GET', 'HEAD', 'OPTIONS', 'TRACE'].includes(method)) {\n return false;\n }\n\n if (ctx.error) {\n if (ctx.error instanceof AbortedError) {\n return false;\n }\n\n return true;\n }\n\n const status = ctx.response?.status ?? 0;\n\n // Retry on 404 requests since the endpoint may not return a result immediately after the source transaction is executed.\n if (status === 404 || status === 408 || status === 425 || status === 429 || (status >= 500 && status <= 599)) {\n return true;\n }\n\n return false;\n },\n signal,\n });\n\n const parsed = CrossChainStatusResponseSchema.safeParse(rawJson);\n\n if (!parsed.success) {\n throw new ResponseValidationError(\n `Invalid response from Markr \"${endpoint}\" endpoint.`,\n parsed.error.issues,\n rawJson,\n );\n }\n\n return parsed.data;\n}\n\n/**\n * Returns the spender address (wrapped contract) that needs to be approved\n * for token swaps on the specified chain.\n *\n * Not applicable for Solana.\n */\nexport async function markrGetSpenderAddress(\n { apiBaseUrl, apiToken, fetch: customFetch }: ApiOptions,\n {\n chainId,\n crossChainSwap,\n quoteId,\n }: {\n chainId: number;\n crossChainSwap?: boolean;\n quoteId: string;\n },\n): Promise<SpenderAddressResponse> {\n const endpoint = `/spender-address?chainId=${chainId}&cross=${crossChainSwap ? 'true' : 'false'}&uuid=${quoteId}`;\n const url = combineUrlPathnames(apiBaseUrl, endpoint);\n\n const rawJson = await fetchJson(url, { headers: getAuthHeaders(apiToken), fetch: customFetch });\n\n const parsed = SpenderAddressResponseSchema.safeParse(rawJson);\n\n if (!parsed.success) {\n throw new ResponseValidationError(`Invalid response from Markr \"${endpoint}\" endpoint.`, parsed.error.issues);\n }\n\n return parsed.data;\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{AbortedError as e,ResponseValidationError as t}from"../../errors.js";import{CrossChainStatusResponseSchema as n,PartnerInfoResponseSchema as r,QuoteResponseSchema as i,SpenderAddressResponseSchema as a,SupportedChainsResponseSchema as o,SwapResponseSchema as s,TokenListResponseSchema as c}from"./_schema.js";import{combineUrlPathnames as l,fetchEventStream as u,fetchJson as d}from"../fetch-utilities.js";function f(e){if(e)return{Authorization:`Bearer ${e}`}}async function p({apiBaseUrl:e,apiToken:n,fetch:r}){let i=`/info/chains`,a=await d(l(e,i),{headers:f(n),fetch:r}),s=o.safeParse(a);if(!s.success)throw new t(`Invalid response from Markr "${i}" endpoint.`,s.error.issues);return s.data}async function m({apiBaseUrl:e,apiToken:n,fetch:r},i){let a=`/tokens/${i}/list`,o=await d(l(e,a),{headers:f(n),fetch:r}),s=c.safeParse(o);if(!s.success)throw new t(`Invalid response from Markr "${a}" endpoint.`,s.error.issues);return s.data}async function h({apiBaseUrl:e,apiToken:n,fetch:r},a,{onDone:o,onError:s,onQuote:c,signal:d}){let p=`/quote`,m=l(e,p),h=[];try{for await(let e of u(m,{body:JSON.stringify(a),fetch:r,headers:f(n),signal:d})){let n=i.safeParse(JSON.parse(e.data));if(!n.success){s(new t(`Invalid quote data received from Markr "${p}" endpoint.`,n.error.issues));continue}`done`in n.data?o():(c(n.data),h.push(n.data))}}catch(e){e instanceof Error?s(e):s(Error(`An unknown error occurred during the quote stream.`,{cause:e})),o()}return h}async function g({apiBaseUrl:e,apiToken:n,fetch:r},i){let a=`/swap`,o=await d(l(e,a),{body:JSON.stringify(i),fetch:r,headers:f(n),method:`POST`}),c=s.safeParse(o);if(!c.success)throw new t(`Invalid response from Markr "${a}" endpoint.`,c.error.issues);return c.data}async function _({apiBaseUrl:e,apiToken:n,fetch:i}){let a=`/info/partner`,o=await d(l(e,a),{headers:f(n),fetch:i}),s=r.safeParse(o);if(!s.success)throw new t(`Invalid response from Markr "${a}" endpoint.`,s.error.issues);return s.data}async function v({apiBaseUrl:r,apiToken:i,fetch:a},o,{signal:s}={}){let c=`/cross-chain/status/${o}`,u=await d(l(r,c),{headers:f(i),fetch:a,retries:10,retryOn(t){let n=(t.init.method??`GET`).toUpperCase();if(![`GET`,`HEAD`,`OPTIONS`,`TRACE`].includes(n))return!1;if(t.error)return!(t.error instanceof e);let r=t.response?.status??0;return r===404||r===408||r===425||r===429||r>=500&&r<=599},signal:s}),p=n.safeParse(u);if(!p.success)throw new t(`Invalid response from Markr "${c}" endpoint.`,p.error.issues,u);return p.data}async function y({apiBaseUrl:e,apiToken:n,fetch:r},{chainId:i,crossChainSwap:o,quoteId:s}){let c=`/spender-address?chainId=${i}&cross=${o?`true`:`false`}&uuid=${s}`,u=await d(l(e,c),{headers:f(n),fetch:r}),p=a.safeParse(u);if(!p.success)throw new t(`Invalid response from Markr "${c}" endpoint.`,p.error.issues);return p.data}export{v as markrGetCrossChainStatus,p as markrGetInfoChains,_ as markrGetPartnerInfo,y as markrGetSpenderAddress,m as markrGetTokenList,h as markrStreamQuote,g as markrSwap};
2
+ //# sourceMappingURL=_api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_api.js","names":[],"sources":["../../../src/transfer-service/markr/_api.ts"],"sourcesContent":["import type { Address as SolanaAddress } from '@solana/kit';\nimport type { Address as EvmAddress } from 'viem';\nimport { AbortedError, ResponseValidationError } from '../../errors';\nimport { combineUrlPathnames, fetchEventStream, fetchJson } from '../fetch-utilities';\nimport {\n CrossChainStatusResponseSchema,\n PartnerInfoResponseSchema,\n QuoteResponseSchema,\n SpenderAddressResponseSchema,\n SupportedChainsResponseSchema,\n SwapResponseSchema,\n TokenListResponseSchema,\n type CrossChainStatusResponse,\n type PartnerInfoResponse,\n type QuoteResponseData,\n type SpenderAddressResponse,\n type SupportedChainsResponse,\n type SwapResponse,\n type TokenListResponse,\n} from './_schema';\nimport type { Caip2ChainId } from '../../types/caip';\nimport type { Fetch } from '../../types/utility-types';\n\nexport interface ApiOptions {\n apiBaseUrl: URL;\n apiToken?: string;\n fetch?: Fetch;\n}\n\nfunction getAuthHeaders(apiToken?: string): Record<string, string> | undefined {\n if (!apiToken) {\n return undefined;\n }\n\n return { Authorization: `Bearer ${apiToken}` };\n}\n\nexport async function markrGetInfoChains({\n apiBaseUrl,\n apiToken,\n fetch: customFetch,\n}: ApiOptions): Promise<SupportedChainsResponse> {\n const endpoint = '/info/chains';\n const url = combineUrlPathnames(apiBaseUrl, endpoint);\n\n const rawJson = await fetchJson(url, { headers: getAuthHeaders(apiToken), fetch: customFetch });\n\n const parsed = SupportedChainsResponseSchema.safeParse(rawJson);\n\n if (!parsed.success) {\n throw new ResponseValidationError(`Invalid response from Markr \"${endpoint}\" endpoint.`, parsed.error.issues);\n }\n\n return parsed.data;\n}\n\nexport async function markrGetTokenList(\n { apiBaseUrl, apiToken, fetch: customFetch }: ApiOptions,\n chainId: number,\n): Promise<TokenListResponse> {\n const endpoint = `/tokens/${chainId}/list`;\n const url = combineUrlPathnames(apiBaseUrl, endpoint);\n\n const rawJson = await fetchJson(url, { headers: getAuthHeaders(apiToken), fetch: customFetch });\n\n const parsed = TokenListResponseSchema.safeParse(rawJson);\n\n if (!parsed.success) {\n throw new ResponseValidationError(`Invalid response from Markr \"${endpoint}\" endpoint.`, parsed.error.issues);\n }\n\n return parsed.data;\n}\n\nexport interface MarkrStreamQuoteParams {\n amount: string;\n appId: string;\n chainId: number | Caip2ChainId;\n destinationChainId?: number | Caip2ChainId;\n slippage?: number;\n tokenIn: string;\n tokenInDecimals: number;\n tokenOut: string;\n tokenOutDecimals: number;\n /**\n * Required ONLY for cross-chain swaps involving EVM.\n *\n * EVM -> EVM (different chains)\n * EVM -> Solana\n * Solana -> EVM\n */\n userEvmAddress?: EvmAddress;\n /**\n * Required ONLY for cross-chain swaps involving Solana.\n *\n * Solana -> EVM\n * EVM -> Solana\n * Solana -> Solana\n */\n userSolanaAddress?: SolanaAddress;\n}\n\nexport interface MarkrStreamQuoteOptions {\n onDone: () => void;\n onError: (error: Error) => void;\n onQuote: (data: QuoteResponseData) => void;\n signal?: AbortSignal;\n}\n\nexport async function markrStreamQuote(\n { apiBaseUrl, apiToken, fetch: customFetch }: ApiOptions,\n params: MarkrStreamQuoteParams,\n { onDone, onError, onQuote, signal }: MarkrStreamQuoteOptions,\n): Promise<ReadonlyArray<QuoteResponseData>> {\n const endpoint = '/quote';\n const url = combineUrlPathnames(apiBaseUrl, endpoint);\n\n const quotes: QuoteResponseData[] = [];\n\n try {\n for await (const event of fetchEventStream(url, {\n body: JSON.stringify(params),\n fetch: customFetch,\n headers: getAuthHeaders(apiToken),\n signal,\n })) {\n const parsedData = QuoteResponseSchema.safeParse(JSON.parse(event.data));\n\n if (!parsedData.success) {\n onError(\n new ResponseValidationError(\n `Invalid quote data received from Markr \"${endpoint}\" endpoint.`,\n parsedData.error.issues,\n ),\n );\n continue;\n }\n\n if (!('done' in parsedData.data)) {\n onQuote(parsedData.data);\n quotes.push(parsedData.data);\n } else {\n onDone();\n }\n }\n } catch (error) {\n if (error instanceof Error) {\n onError(error);\n } else {\n onError(new Error('An unknown error occurred during the quote stream.', { cause: error }));\n }\n\n onDone();\n }\n\n return quotes;\n}\n\nexport interface MarkrGetSwapParams {\n appId: string;\n /** Input amount in token's smallest unit */\n amountIn: string;\n /** Return raw transaction data alongside wrapped data */\n debug?: boolean;\n /** Minimum expected output amount */\n minAmountOut: string;\n /** Input token contract address */\n tokenIn: string;\n /** Output token contract address */\n tokenOut: string;\n /** Solana wallet public key (required for Solana swaps) */\n userPublicKey?: string;\n /** Quote UUID from previous quote request */\n uuid: string;\n}\n\nexport async function markrSwap(\n { apiBaseUrl, apiToken, fetch: customFetch }: ApiOptions,\n params: MarkrGetSwapParams,\n): Promise<SwapResponse> {\n const endpoint = '/swap';\n const url = combineUrlPathnames(apiBaseUrl, endpoint);\n\n const rawJson = await fetchJson(url, {\n body: JSON.stringify(params),\n fetch: customFetch,\n headers: getAuthHeaders(apiToken),\n method: 'POST',\n });\n\n const parsed = SwapResponseSchema.safeParse(rawJson);\n\n if (!parsed.success) {\n throw new ResponseValidationError(`Invalid response from Markr \"${endpoint}\" endpoint.`, parsed.error.issues);\n }\n\n return parsed.data;\n}\n\nexport async function markrGetPartnerInfo({\n apiBaseUrl,\n apiToken,\n fetch: customFetch,\n}: ApiOptions): Promise<PartnerInfoResponse> {\n const endpoint = '/info/partner';\n const url = combineUrlPathnames(apiBaseUrl, endpoint);\n\n const rawJson = await fetchJson(url, { headers: getAuthHeaders(apiToken), fetch: customFetch });\n\n const parsed = PartnerInfoResponseSchema.safeParse(rawJson);\n\n if (!parsed.success) {\n throw new ResponseValidationError(`Invalid response from Markr \"${endpoint}\" endpoint.`, parsed.error.issues);\n }\n\n return parsed.data;\n}\n\nexport async function markrGetCrossChainStatus(\n { apiBaseUrl, apiToken, fetch: customFetch }: ApiOptions,\n sourceTxHash: string,\n { signal }: { signal?: AbortSignal } = {},\n): Promise<CrossChainStatusResponse> {\n const endpoint = `/cross-chain/status/${sourceTxHash}`;\n const url = combineUrlPathnames(apiBaseUrl, endpoint);\n\n const rawJson = await fetchJson(url, {\n headers: getAuthHeaders(apiToken),\n fetch: customFetch,\n retries: 10,\n retryOn(ctx) {\n const method = (ctx.init.method ?? 'GET').toUpperCase();\n\n if (!['GET', 'HEAD', 'OPTIONS', 'TRACE'].includes(method)) {\n return false;\n }\n\n if (ctx.error) {\n if (ctx.error instanceof AbortedError) {\n return false;\n }\n\n return true;\n }\n\n const status = ctx.response?.status ?? 0;\n\n // Retry on 404 requests since the endpoint may not return a result immediately after the source transaction is executed.\n if (status === 404 || status === 408 || status === 425 || status === 429 || (status >= 500 && status <= 599)) {\n return true;\n }\n\n return false;\n },\n signal,\n });\n\n const parsed = CrossChainStatusResponseSchema.safeParse(rawJson);\n\n if (!parsed.success) {\n throw new ResponseValidationError(\n `Invalid response from Markr \"${endpoint}\" endpoint.`,\n parsed.error.issues,\n rawJson,\n );\n }\n\n return parsed.data;\n}\n\n/**\n * Returns the spender address (wrapped contract) that needs to be approved\n * for token swaps on the specified chain.\n *\n * Not applicable for Solana.\n */\nexport async function markrGetSpenderAddress(\n { apiBaseUrl, apiToken, fetch: customFetch }: ApiOptions,\n {\n chainId,\n crossChainSwap,\n quoteId,\n }: {\n chainId: number;\n crossChainSwap?: boolean;\n quoteId: string;\n },\n): Promise<SpenderAddressResponse> {\n const endpoint = `/spender-address?chainId=${chainId}&cross=${crossChainSwap ? 'true' : 'false'}&uuid=${quoteId}`;\n const url = combineUrlPathnames(apiBaseUrl, endpoint);\n\n const rawJson = await fetchJson(url, { headers: getAuthHeaders(apiToken), fetch: customFetch });\n\n const parsed = SpenderAddressResponseSchema.safeParse(rawJson);\n\n if (!parsed.success) {\n throw new ResponseValidationError(`Invalid response from Markr \"${endpoint}\" endpoint.`, parsed.error.issues);\n }\n\n return parsed.data;\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ const e=require(`../../../constants.cjs`),t=require(`../_utils.cjs`);function n({hasSolanaSigner:n,supportedChains:r}){return({sourceAsset:i,sourceChainId:a,targetAsset:o,targetChainId:s})=>{let c=i.type===e.TokenType.NATIVE||i.type===e.TokenType.ERC20||i.type===e.TokenType.SPL&&n,l=o.type===e.TokenType.NATIVE||o.type===e.TokenType.ERC20||o.type===e.TokenType.SPL&&n;return!c||!l?!1:t.isRouteSupported(r,a,s)}}exports.analyzeSupportFactory=n;
2
+ //# sourceMappingURL=analyze-support.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze-support.cjs","names":["TokenType","isRouteSupported"],"sources":["../../../../src/transfer-service/markr/_handlers/analyze-support.ts"],"sourcesContent":["import { TokenType } from '../../../constants';\nimport type { TransferService } from '../../../types/service';\nimport { isRouteSupported, type SupportedChainsMap } from '../_utils';\n\nexport interface AnalyzeSupportFactoryConfig {\n hasSolanaSigner: boolean;\n supportedChains: SupportedChainsMap;\n}\n\nexport function analyzeSupportFactory({\n hasSolanaSigner,\n supportedChains,\n}: AnalyzeSupportFactoryConfig): TransferService['analyzeSupport'] {\n return ({ sourceAsset, sourceChainId, targetAsset, targetChainId }) => {\n const validSourceAssetType =\n sourceAsset.type === TokenType.NATIVE ||\n sourceAsset.type === TokenType.ERC20 ||\n (sourceAsset.type === TokenType.SPL && hasSolanaSigner);\n const validTargetAssetType =\n targetAsset.type === TokenType.NATIVE ||\n targetAsset.type === TokenType.ERC20 ||\n (targetAsset.type === TokenType.SPL && hasSolanaSigner);\n\n if (!validSourceAssetType || !validTargetAssetType) {\n return false;\n }\n\n return isRouteSupported(supportedChains, sourceChainId, targetChainId);\n };\n}\n"],"mappings":"qEASA,SAAgB,EAAsB,CACpC,kBACA,mBACiE,CACjE,OAAQ,CAAE,cAAa,gBAAe,cAAa,mBAAoB,CACrE,IAAM,EACJ,EAAY,OAASA,EAAAA,UAAU,QAC/B,EAAY,OAASA,EAAAA,UAAU,OAC9B,EAAY,OAASA,EAAAA,UAAU,KAAO,EACnC,EACJ,EAAY,OAASA,EAAAA,UAAU,QAC/B,EAAY,OAASA,EAAAA,UAAU,OAC9B,EAAY,OAASA,EAAAA,UAAU,KAAO,EAMzC,MAJI,CAAC,GAAwB,CAAC,EACrB,GAGFC,EAAAA,iBAAiB,EAAiB,EAAe,EAAc"}
@@ -0,0 +1,2 @@
1
+ import{TokenType as e}from"../../../constants.js";import{isRouteSupported as t}from"../_utils.js";function n({hasSolanaSigner:n,supportedChains:r}){return({sourceAsset:i,sourceChainId:a,targetAsset:o,targetChainId:s})=>{let c=i.type===e.NATIVE||i.type===e.ERC20||i.type===e.SPL&&n,l=o.type===e.NATIVE||o.type===e.ERC20||o.type===e.SPL&&n;return!c||!l?!1:t(r,a,s)}}export{n as analyzeSupportFactory};
2
+ //# sourceMappingURL=analyze-support.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze-support.js","names":[],"sources":["../../../../src/transfer-service/markr/_handlers/analyze-support.ts"],"sourcesContent":["import { TokenType } from '../../../constants';\nimport type { TransferService } from '../../../types/service';\nimport { isRouteSupported, type SupportedChainsMap } from '../_utils';\n\nexport interface AnalyzeSupportFactoryConfig {\n hasSolanaSigner: boolean;\n supportedChains: SupportedChainsMap;\n}\n\nexport function analyzeSupportFactory({\n hasSolanaSigner,\n supportedChains,\n}: AnalyzeSupportFactoryConfig): TransferService['analyzeSupport'] {\n return ({ sourceAsset, sourceChainId, targetAsset, targetChainId }) => {\n const validSourceAssetType =\n sourceAsset.type === TokenType.NATIVE ||\n sourceAsset.type === TokenType.ERC20 ||\n (sourceAsset.type === TokenType.SPL && hasSolanaSigner);\n const validTargetAssetType =\n targetAsset.type === TokenType.NATIVE ||\n targetAsset.type === TokenType.ERC20 ||\n (targetAsset.type === TokenType.SPL && hasSolanaSigner);\n\n if (!validSourceAssetType || !validTargetAssetType) {\n return false;\n }\n\n return isRouteSupported(supportedChains, sourceChainId, targetChainId);\n };\n}\n"],"mappings":"kGASA,SAAgB,EAAsB,CACpC,kBACA,mBACiE,CACjE,OAAQ,CAAE,cAAa,gBAAe,cAAa,mBAAoB,CACrE,IAAM,EACJ,EAAY,OAAS,EAAU,QAC/B,EAAY,OAAS,EAAU,OAC9B,EAAY,OAAS,EAAU,KAAO,EACnC,EACJ,EAAY,OAAS,EAAU,QAC/B,EAAY,OAAS,EAAU,OAC9B,EAAY,OAAS,EAAU,KAAO,EAMzC,MAJI,CAAC,GAAwB,CAAC,EACrB,GAGF,EAAiB,EAAiB,EAAe,EAAc"}
@@ -0,0 +1,2 @@
1
+ require(`../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../../errors.cjs`),t=require(`../../../utils/caip.cjs`),n=require(`../../../_utils/chain.cjs`),r=require(`../../_utils.cjs`),i=require(`../../_evm-gas.cjs`),a=require(`../_api.cjs`),o=require(`../_utils.cjs`),s=require(`../_type-guards.cjs`),c=require(`../_solana-utils.cjs`);let l=require(`viem`),u=require(`@solana/kit`);const d=1000000n;function f(t){return async(r,i)=>{if(n.isEvmNamespace(r.sourceChain.chainId))return await p(r,i,t);if(n.isSolanaNamespace(r.sourceChain.chainId))return await m(r,i,t);throw new e.InvalidParamsError(e.ErrorReason.INVALID_PARAMS,`Unsupported source chain namespace for estimateNativeFee: ${r.sourceChain.chainId}`)}}async function p(n,c,{apiOptions:u,appId:d}){if(!(0,l.isAddress)(n.fromAddress))throw new e.InvalidParamsError(e.ErrorReason.INVALID_PARAMS,`Invalid fromAddress: ${n.fromAddress}`);let f=r.getEvmClientForChain({chain:n.sourceChain}),p=o.assetToAddressString(n.assetIn,n.sourceChain.chainId);if(!(0,l.isAddress)(p))throw new e.SdkError(e.ErrorReason.INVALID_PARAMS,e.ErrorCode.INVALID_PARAMS,{details:`assetIn address is not a valid EVM address. Can not call estimateGas.`});let m=o.isTokenAddressNative(p),g=n.sourceChain.chainId.toLowerCase()!==n.targetChain.chainId.toLowerCase(),_=n.amountIn+o.getAdditiveSourceAssetFeeAmount(n),v=0n;if(!m){let r,{address:i}=await a.markrGetSpenderAddress(u,{chainId:t.caip2ToEip155ChainId(n.sourceChain.chainId),crossChainSwap:g,quoteId:n.id});try{r=await f.readContract({address:p,abi:l.erc20Abi,functionName:`allowance`,args:[n.fromAddress,i]})}catch(t){throw new e.SdkError(`Error during allowance check`,e.ErrorCode.VIEM_ERROR,{cause:t,details:`Failed to read ERC20 allowance for Markr spender.`})}if(r<_)try{v=await f.estimateGas({account:n.fromAddress,to:p,data:(0,l.encodeFunctionData)({abi:l.erc20Abi,functionName:`approve`,args:[i,_]}),value:0n})}catch(t){throw new e.SdkError(`Error during gas estimation`,e.ErrorCode.VIEM_ERROR,{cause:t,details:`Failed to estimate gas for ERC20 approval transaction.`})}}let y=v>0n,b=o.calculateMarkrMinimumAmountOut({amountOut:n.amountOut,assetOut:n.assetOut,slippageBps:n.slippageBps}),x=await a.markrSwap(u,{amountIn:n.amountIn.toString(),appId:d,minAmountOut:b.toString(),tokenIn:p,tokenOut:o.assetToAddressString(n.assetOut,n.targetChain.chainId),uuid:n.id});if(!s.isEvmSwapResponse(x))throw new e.SdkError(e.ErrorReason.CHAIN_NOT_SUPPORTED,e.ErrorCode.INVALID_PARAMS,{details:`Received non-EVM swap response from Markr. Expected EVM transaction data for gas estimation, but got response with chainType ${x.chainType}.`});let S=0n;S=y?n.gasEstimate?r.applyFeeUnitsBpsMargin(n.gasEstimate,c?.feeUnitsMarginBps):r.applyFeeUnitsBpsMargin(n.fees.filter(e=>e.type===`gas`&&e.chainId===n.sourceChain.chainId).reduce((e,t)=>e+t.amount,0n)||700000n,c?.feeUnitsMarginBps):await h({crossChain:g,feeUnitsMarginBps:c?.feeUnitsMarginBps,fromAddress:n.fromAddress,sourceClient:f,swap:x});let C=await i.estimateEvmFeesPerGas(f,n.sourceChain,c?.overrides?.feeRateTier),w=c?.overrides?.maxFeePerGas??C.maxFeePerGas,T=c?.overrides?.maxPriorityFeePerGas??C.maxPriorityFeePerGas,E=(S+r.applyFeeUnitsBpsMargin(v,c?.feeUnitsMarginBps))*w;return{asset:n.sourceChain.networkToken,totalFee:E,totalUpfrontFee:E,meta:{approvalFee:y?r.applyFeeUnitsBpsMargin(v,c?.feeUnitsMarginBps)*w:void 0,maxFeePerGas:w,maxPriorityFeePerGas:T}}}async function m(t,n,{apiOptions:i,appId:l}){let d=o.assetToAddressString(t.assetIn,t.sourceChain.chainId);if(!(0,u.isAddress)(d))throw new e.SdkError(e.ErrorReason.INVALID_PARAMS,e.ErrorCode.INVALID_PARAMS,{details:`assetIn address is not a valid Solana address. Can not call estimateGas.`});let f=o.calculateMarkrMinimumAmountOut({amountOut:t.amountOut,assetOut:t.assetOut,slippageBps:t.slippageBps}),p=await a.markrSwap(i,{amountIn:t.amountIn.toString(),appId:l,minAmountOut:f.toString(),tokenIn:d,tokenOut:o.assetToAddressString(t.assetOut,t.targetChain.chainId),userPublicKey:t.fromAddress,uuid:t.id});if(!s.isSolanaSwapResponse(p))throw new e.SdkError(e.ErrorReason.CHAIN_NOT_SUPPORTED,e.ErrorCode.INVALID_PARAMS,{details:`Received non-Solana swap response from Markr. Expected Solana transaction data for fee estimation.`});let m=r.getSolanaRpcForChain({chain:t.sourceChain}),h=await c.refreshSolanaSwapTransactionBlockhash(p.swapTransaction,m),b=c.decodeSolanaTransactionBase64(h),x=b.messageBytes,S=v(b)*5000n,{computeUnitLimit:C,computeUnitPriceMicroLamports:w}=g(x),T=_(C,w),E=S+T,D=r.applyFeeUnitsBpsMargin(E,n?.feeUnitsMarginBps),O=(await m.simulateTransaction(h,{encoding:`base64`,sigVerify:!1,replaceRecentBlockhash:!0}).send()).value.unitsConsumed??0n,k=await y({fromAddress:t.fromAddress,rpc:m,transaction:b}),A=D+k.rentFee;return{asset:t.sourceChain.networkToken,totalFee:A,totalUpfrontFee:A,refundable:k.refundable,meta:{baseFee:S,priorityFee:T,transactionFee:E,transactionFeeWithMargin:D,computeUnitLimit:C,computeUnitPriceMicroLamports:w,unitsConsumed:O,createdAccounts:k.createdAccounts,rentFee:k.rentFee,rentFeeNet:k.rentFeeNet}}}async function h({crossChain:t,feeUnitsMarginBps:n,fromAddress:i,sourceClient:a,swap:s}){try{return r.applyFeeUnitsBpsMargin(await a.estimateGas({account:i,to:s.to,data:s.data,value:s.value}),n)}catch(n){let r=`Failed to estimate gas for Markr swap transaction.`;try{let e=o.decodeMarkrRevertError(await o.getMarkrSwapWrapperAbi(t),n);e&&(r=`${r} Markr revert: ${e}.`)}catch{}throw new e.SdkError(`Error during gas estimation`,e.ErrorCode.VIEM_ERROR,{cause:n,details:r})}}function g(e){let t=(0,u.getCompiledTransactionMessageDecoder)().decode(e),n=0n,r=0n;for(let e of t.instructions){if(t.staticAccounts[e.programAddressIndex]!==`ComputeBudget111111111111111111111111111111`)continue;let i=e.data;if(!i||i.length<1)continue;let a=i[0],o=new DataView(i.buffer,i.byteOffset,i.byteLength);if(a===2&&i.length>=5){n=BigInt(o.getUint32(1,!0));continue}a===3&&i.length>=9&&(r=o.getBigUint64(1,!0))}return{computeUnitLimit:n,computeUnitPriceMicroLamports:r}}function _(e,t){return e<=0n||t<=0n?0n:(e*t+(d-1n))/d}function v(e){let t=e.signatures;return Array.isArray(t)?BigInt(t.length):t&&typeof t==`object`?BigInt(Object.keys(t).length):0n}async function y({fromAddress:e,rpc:t,transaction:n}){let r=(0,u.getCompiledTransactionMessageDecoder)().decode(n.messageBytes),i=await D(r,t),a=new Map,o=new Map,s;for(let e of r.instructions){let n=i[e.programAddressIndex];if(n===`11111111111111111111111111111111`){let t=O(i,e,1),n=k(e.data);t&&n>0n&&a.set(t,{address:t,kind:`system`,lamports:n});continue}if(n===`ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL`){let n=e.data?.[0];if(!(n===void 0||n===0||n===1))continue;let r=O(i,e,1);if(!r||!(0,u.isAddress)(r)||(await t.getAccountInfo(r).send()).value)continue;s===void 0&&(s=await t.getMinimumBalanceForRentExemption(165n).send()),a.set(r,{address:r,kind:`ata`,lamports:s});continue}if(!(n===`TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA`||n===`TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb`)||e.data?.[0]!==9)continue;let r=O(i,e,0),c=O(i,e,1);r&&c&&o.set(r,c)}let c=(0,u.isAddress)(e)?e:void 0,l=Array.from(a.values()).map(e=>{let t=o.get(e.address),n=c!==void 0&&t===c;return{...e,refunded:n}}),d=l.reduce((e,t)=>e+t.lamports,0n),f=l.reduce((e,t)=>e+(t.refunded?t.lamports:0n),0n);return{createdAccounts:l,rentFee:d,rentFeeNet:d-f,refundable:f}}function b(e){return!!e&&typeof e==`object`}function x(e,t){if(b(e))return Reflect.get(e,t)}function S(e){if(e instanceof Uint8Array)return Array.from(e);if(Array.isArray(e)&&e.every(e=>Number.isInteger(e)&&e>=0))return e}function C(e){let t=x(e,`addressTableLookups`);if(!Array.isArray(t))return[];let n=[];for(let e of t){let t=x(e,`accountKey`),r=S(x(e,`writableIndexes`)),i=S(x(e,`readonlyIndexes`));typeof t!=`string`||!r||!i||n.push({accountKey:t,writableIndexes:r,readonlyIndexes:i})}return n}function w(e){let t=x(e,`value`);if(!b(t))return[];let n=x(t,`addresses`);return Array.isArray(n)?n.filter(e=>typeof e==`string`):[]}async function T(e,t){let n=[],r=[],i=C(e);for(let e of i){if(!(0,u.isAddress)(e.accountKey))continue;let i=await E(t,e.accountKey);for(let t of e.writableIndexes){let e=i[t];e&&n.push(e)}for(let t of e.readonlyIndexes){let e=i[t];e&&r.push(e)}}return{writableAddresses:n,readonlyAddresses:r}}async function E(e,t){let n=x(e,`getAddressLookupTable`);if(typeof n!=`function`)return[];let r=Reflect.apply(n,e,[t]),i=x(r,`send`);return typeof i==`function`?w(await Reflect.apply(i,r,[])):[]}async function D(e,t){let{writableAddresses:n,readonlyAddresses:r}=await T(e,t);return[...e.staticAccounts,...n,...r]}function O(e,t,n){let r=t.accountIndices?.[n];if(r!==void 0)return e[r]}function k(e){if(!e||e.length<12)return 0n;let t=new DataView(e.buffer,e.byteOffset,e.byteLength),n=t.getUint32(0,!0);if(n===0&&e.length>=12)return t.getBigUint64(4,!0);if(n===3&&e.length>=44){let n=Number(t.getBigUint64(36,!0));if(!Number.isSafeInteger(n)||n<0)return 0n;let r=44+n;return r+8>e.length?0n:new DataView(e.buffer,e.byteOffset+r,8).getBigUint64(0,!0)}return 0n}exports._estimateGasFromSwapResponse=h,exports.estimateNativeFeeFactory=f;
2
+ //# sourceMappingURL=estimate-native-fee.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"estimate-native-fee.cjs","names":["isEvmNamespace","isSolanaNamespace","InvalidParamsError","ErrorReason","getEvmClientForChain","assetToAddressString","SdkError","ErrorCode","isTokenAddressNative","getAdditiveSourceAssetFeeAmount","markrGetSpenderAddress","caip2ToEip155ChainId","erc20Abi","calculateMarkrMinimumAmountOut","markrSwap","isEvmSwapResponse","applyFeeUnitsBpsMargin","estimateEvmFeesPerGas","isSolanaSwapResponse","getSolanaRpcForChain","refreshSolanaSwapTransactionBlockhash","decodeSolanaTransactionBase64","decodeMarkrRevertError","getMarkrSwapWrapperAbi"],"sources":["../../../../src/transfer-service/markr/_handlers/estimate-native-fee.ts"],"sourcesContent":["import {\n type Address as SolanaAddress,\n type CompiledTransactionMessage,\n getCompiledTransactionMessageDecoder,\n isAddress as isSolanaAddress,\n type Rpc,\n type SolanaRpcApi,\n type Transaction,\n type TransactionMessageBytes,\n} from '@solana/kit';\nimport { encodeFunctionData, erc20Abi, type Address as EvmAddress, isAddress as isEvmAddress } from 'viem';\nimport { ErrorCode, ErrorReason, InvalidParamsError, SdkError } from '../../../errors';\nimport type { EstimateNativeFeeOptions, NativeFeeEstimate, TransferService } from '../../../types/service';\nimport { applyFeeUnitsBpsMargin, getEvmClientForChain, getSolanaRpcForChain } from '../../_utils';\nimport { estimateEvmFeesPerGas } from '../../_evm-gas';\nimport { markrGetSpenderAddress, markrSwap, type ApiOptions } from '../_api';\nimport {\n assetToAddressString,\n calculateMarkrMinimumAmountOut,\n decodeMarkrRevertError,\n getAdditiveSourceAssetFeeAmount,\n getMarkrSwapWrapperAbi,\n isTokenAddressNative,\n} from '../_utils';\nimport type { WrappedSwapTransactionResponse } from '../_schema';\nimport { isEvmSwapResponse, isSolanaSwapResponse } from '../_type-guards';\nimport { caip2ToEip155ChainId } from '../../../utils/caip';\nimport type { Quote } from '../../../types/quote';\nimport { isEvmNamespace, isSolanaNamespace } from '../../../_utils/chain';\nimport { decodeSolanaTransactionBase64, refreshSolanaSwapTransactionBlockhash } from '../_solana-utils';\n\n/**\n * This is just a fallback value used in the case that an\n * allowance approval is needed, and Markr didn't return us any gas estimate data.\n *\n * Just based on my review of some quotes, I think this is a reasonable estimate\n * left on the higher end.\n *\n * Assume this could need to change.\n */\nconst EVM_SWAP_FALLBACK_GAS_ESTIMATE = 700_000n;\n\n/**\n * Compute Budget program address.\n *\n * Used to detect `SetComputeUnitPrice` instructions when deriving\n * the Solana priority fee component from transaction message bytes.\n */\nconst SOLANA_COMPUTE_BUDGET_PROGRAM = 'ComputeBudget111111111111111111111111111111';\n\n/**\n * System Program address.\n *\n * Used to detect account-creation instructions and extract lamports\n * funded upfront for newly created system accounts.\n */\nconst SOLANA_SYSTEM_PROGRAM = '11111111111111111111111111111111';\n\n/**\n * Associated Token Account (ATA) program address.\n *\n * Used to detect ATA create instructions so the estimator can include\n * rent-exempt funding when the ATA does not already exist on-chain.\n */\nconst SOLANA_ASSOCIATED_TOKEN_PROGRAM = 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL';\n\n/**\n * Legacy SPL Token program address.\n *\n * Used to detect close-account instructions that may refund lamports\n * from temporary token accounts back to the sender.\n */\nconst SOLANA_SPL_TOKEN_PROGRAM = 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA';\n\n/**\n * SPL Token-2022 program address.\n *\n * Used alongside the legacy token program for close-account detection\n * when computing expected refundable lamports.\n */\nconst SOLANA_SPL_TOKEN_2022_PROGRAM = 'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb';\n\n/**\n * SPL token account size for rent-exemption calculations.\n *\n * Used with `getMinimumBalanceForRentExemption` to estimate ATA\n * creation funding requirements.\n */\nconst SPL_TOKEN_ACCOUNT_SIZE_BYTES = 165n;\nconst SOLANA_BASE_FEE_PER_SIGNATURE_LAMPORTS = 5_000n;\nconst MICRO_LAMPORTS_PER_LAMPORT = 1_000_000n;\n\nexport interface EstimateNativeFeeFactoryConfig {\n apiOptions: ApiOptions;\n appId: string;\n}\n\ninterface CreatedRentAccount {\n address: string;\n kind: 'ata' | 'system';\n lamports: bigint;\n refunded: boolean;\n}\n\ninterface SolanaRentEstimate {\n createdAccounts: CreatedRentAccount[];\n rentFee: bigint;\n rentFeeNet: bigint;\n refundable: bigint;\n}\n\ninterface CompiledMessageAddressTableLookup {\n accountKey: string;\n writableIndexes: readonly number[];\n readonlyIndexes: readonly number[];\n}\n\ninterface LookupTableAddresses {\n writableAddresses: string[];\n readonlyAddresses: string[];\n}\n\nexport function estimateNativeFeeFactory(config: EstimateNativeFeeFactoryConfig): TransferService['estimateNativeFee'] {\n return async (quote, options) => {\n // Either the source chain is EVM or Solana, we need to call different functions that\n // calculate the native fee depending on the chain kind.\n\n if (isEvmNamespace(quote.sourceChain.chainId)) {\n return await _estimateNativeFeeEvm(quote, options, config);\n }\n\n if (isSolanaNamespace(quote.sourceChain.chainId)) {\n return await _estimateNativeFeeSolana(quote, options, config);\n }\n\n throw new InvalidParamsError(\n ErrorReason.INVALID_PARAMS,\n `Unsupported source chain namespace for estimateNativeFee: ${quote.sourceChain.chainId}`,\n );\n };\n}\n\n/** @internal */\nexport async function _estimateNativeFeeEvm(\n quote: Quote,\n options: EstimateNativeFeeOptions | undefined,\n { apiOptions, appId }: EstimateNativeFeeFactoryConfig,\n): Promise<NativeFeeEstimate> {\n if (!isEvmAddress(quote.fromAddress)) {\n throw new InvalidParamsError(ErrorReason.INVALID_PARAMS, `Invalid fromAddress: ${quote.fromAddress}`);\n }\n\n const sourceClient = getEvmClientForChain({ chain: quote.sourceChain });\n\n const assetInAddressString = assetToAddressString(quote.assetIn, quote.sourceChain.chainId);\n\n if (!isEvmAddress(assetInAddressString)) {\n throw new SdkError(ErrorReason.INVALID_PARAMS, ErrorCode.INVALID_PARAMS, {\n details: `assetIn address is not a valid EVM address. Can not call estimateGas.`,\n });\n }\n\n const isAssetInNative = isTokenAddressNative(assetInAddressString);\n const isCrossChainSwap = quote.sourceChain.chainId.toLowerCase() !== quote.targetChain.chainId.toLowerCase();\n const allowanceAmount = quote.amountIn + getAdditiveSourceAssetFeeAmount(quote);\n\n let allowanceApprovalGas = 0n;\n if (!isAssetInNative) {\n // Check if approval is needed, and if so, calculate the gas cost for the approval.\n let allowance: bigint;\n\n const { address: spenderAddress } = await markrGetSpenderAddress(apiOptions, {\n chainId: caip2ToEip155ChainId(quote.sourceChain.chainId),\n crossChainSwap: isCrossChainSwap,\n quoteId: quote.id,\n });\n\n try {\n allowance = await sourceClient.readContract({\n address: assetInAddressString,\n abi: erc20Abi,\n functionName: 'allowance',\n args: [quote.fromAddress, spenderAddress],\n });\n } catch (error) {\n throw new SdkError('Error during allowance check', ErrorCode.VIEM_ERROR, {\n cause: error,\n details: 'Failed to read ERC20 allowance for Markr spender.',\n });\n }\n\n const approvalNeeded = allowance < allowanceAmount;\n\n if (approvalNeeded) {\n try {\n allowanceApprovalGas = await sourceClient.estimateGas({\n account: quote.fromAddress,\n to: assetInAddressString,\n data: encodeFunctionData({\n abi: erc20Abi,\n functionName: 'approve',\n args: [spenderAddress, allowanceAmount],\n }),\n value: 0n,\n });\n } catch (error) {\n throw new SdkError('Error during gas estimation', ErrorCode.VIEM_ERROR, {\n cause: error,\n details: 'Failed to estimate gas for ERC20 approval transaction.',\n });\n }\n }\n }\n\n const allowanceApprovalIsNeeded = allowanceApprovalGas > 0n;\n\n const minAmountOut = calculateMarkrMinimumAmountOut({\n amountOut: quote.amountOut,\n assetOut: quote.assetOut,\n slippageBps: quote.slippageBps,\n });\n\n const swap = await markrSwap(apiOptions, {\n amountIn: quote.amountIn.toString(),\n appId,\n minAmountOut: minAmountOut.toString(),\n tokenIn: assetInAddressString,\n tokenOut: assetToAddressString(quote.assetOut, quote.targetChain.chainId),\n uuid: quote.id,\n });\n\n if (!isEvmSwapResponse(swap)) {\n // Should hopefully never happen.\n throw new SdkError(ErrorReason.CHAIN_NOT_SUPPORTED, ErrorCode.INVALID_PARAMS, {\n details: `Received non-EVM swap response from Markr. Expected EVM transaction data for gas estimation, but got response with chainType ${swap.chainType}.`,\n });\n }\n\n let gasWithMargin = 0n;\n\n // If an approval is needed, we can't call `eth_estimateGas` on the\n // swap transaction because no actual allowance approval was performed yet,\n // so a gas estimation would fail due to needing allowance.\n //\n // So if an allowance approval is needed, we fall back to some other logic for\n // estimating the swap tx gas.\n if (allowanceApprovalIsNeeded) {\n // Attempt to use the Markr provided `gasEstimate` first if available.\n // Otherwise we attempt to get the gas from the `fees` component that are applicable\n // to the source chain. If neither of those are available, we fall back to a hardcoded value.\n if (quote.gasEstimate) {\n gasWithMargin = applyFeeUnitsBpsMargin(quote.gasEstimate, options?.feeUnitsMarginBps);\n } else {\n const sourceGasFee = quote.fees\n .filter((fee) => fee.type === 'gas' && fee.chainId === quote.sourceChain.chainId)\n .reduce((acc, fee) => acc + fee.amount, 0n);\n\n gasWithMargin = applyFeeUnitsBpsMargin(\n sourceGasFee || EVM_SWAP_FALLBACK_GAS_ESTIMATE,\n options?.feeUnitsMarginBps,\n );\n }\n } else {\n gasWithMargin = await _estimateGasFromSwapResponse({\n crossChain: isCrossChainSwap,\n feeUnitsMarginBps: options?.feeUnitsMarginBps,\n fromAddress: quote.fromAddress,\n sourceClient,\n swap,\n });\n }\n\n const fees = await estimateEvmFeesPerGas(sourceClient, quote.sourceChain, options?.overrides?.feeRateTier);\n\n const maxFeePerGas = options?.overrides?.maxFeePerGas ?? fees.maxFeePerGas;\n const maxPriorityFeePerGas = options?.overrides?.maxPriorityFeePerGas ?? fees.maxPriorityFeePerGas;\n\n const totalFee =\n (gasWithMargin + applyFeeUnitsBpsMargin(allowanceApprovalGas, options?.feeUnitsMarginBps)) * maxFeePerGas;\n\n return {\n asset: quote.sourceChain.networkToken,\n totalFee,\n totalUpfrontFee: totalFee,\n meta: {\n approvalFee: allowanceApprovalIsNeeded\n ? applyFeeUnitsBpsMargin(allowanceApprovalGas, options?.feeUnitsMarginBps) * maxFeePerGas\n : undefined,\n maxFeePerGas,\n maxPriorityFeePerGas,\n },\n };\n}\n\n/** @internal */\nexport async function _estimateNativeFeeSolana(\n quote: Quote,\n options: EstimateNativeFeeOptions | undefined,\n { apiOptions, appId }: EstimateNativeFeeFactoryConfig,\n): Promise<NativeFeeEstimate> {\n const assetInAddressString = assetToAddressString(quote.assetIn, quote.sourceChain.chainId);\n\n if (!isSolanaAddress(assetInAddressString)) {\n throw new SdkError(ErrorReason.INVALID_PARAMS, ErrorCode.INVALID_PARAMS, {\n details: `assetIn address is not a valid Solana address. Can not call estimateGas.`,\n });\n }\n\n const minAmountOut = calculateMarkrMinimumAmountOut({\n amountOut: quote.amountOut,\n assetOut: quote.assetOut,\n slippageBps: quote.slippageBps,\n });\n\n const swap = await markrSwap(apiOptions, {\n amountIn: quote.amountIn.toString(),\n appId,\n minAmountOut: minAmountOut.toString(),\n tokenIn: assetInAddressString,\n tokenOut: assetToAddressString(quote.assetOut, quote.targetChain.chainId),\n userPublicKey: quote.fromAddress,\n uuid: quote.id,\n });\n\n if (!isSolanaSwapResponse(swap)) {\n // Should hopefully never happen.\n throw new SdkError(ErrorReason.CHAIN_NOT_SUPPORTED, ErrorCode.INVALID_PARAMS, {\n details: 'Received non-Solana swap response from Markr. Expected Solana transaction data for fee estimation.',\n });\n }\n\n const rpc = getSolanaRpcForChain({ chain: quote.sourceChain });\n const refreshedSwapTransactionBase64 = await refreshSolanaSwapTransactionBlockhash(swap.swapTransaction, rpc);\n const decodedTransaction = decodeSolanaTransactionBase64(refreshedSwapTransactionBase64);\n const transactionMessageBytes = decodedTransaction.messageBytes;\n const signatureCount = _getSignatureCount(decodedTransaction);\n const baseFeeLamports = signatureCount * SOLANA_BASE_FEE_PER_SIGNATURE_LAMPORTS;\n const { computeUnitLimit, computeUnitPriceMicroLamports } = _getComputeBudgetPriceAndLimit(transactionMessageBytes);\n const priorityFee = _calculatePriorityFeeLamports(computeUnitLimit, computeUnitPriceMicroLamports);\n const transactionFee = baseFeeLamports + priorityFee;\n const transactionFeeWithMargin = applyFeeUnitsBpsMargin(transactionFee, options?.feeUnitsMarginBps);\n\n const sim = await rpc\n .simulateTransaction(refreshedSwapTransactionBase64, {\n encoding: 'base64',\n sigVerify: false,\n replaceRecentBlockhash: true, // Helps prevent block hash expiration issues during simulation.\n })\n .send();\n\n const unitsConsumed = sim.value.unitsConsumed ?? 0n;\n const rentEstimate = await _estimateRentFeesFromTransaction({\n fromAddress: quote.fromAddress,\n rpc,\n transaction: decodedTransaction,\n });\n const totalLamports = transactionFeeWithMargin + rentEstimate.rentFee;\n\n return {\n asset: quote.sourceChain.networkToken,\n totalFee: totalLamports,\n totalUpfrontFee: totalLamports,\n refundable: rentEstimate.refundable,\n meta: {\n baseFee: baseFeeLamports,\n priorityFee,\n transactionFee,\n transactionFeeWithMargin,\n computeUnitLimit,\n computeUnitPriceMicroLamports,\n unitsConsumed,\n createdAccounts: rentEstimate.createdAccounts,\n rentFee: rentEstimate.rentFee,\n rentFeeNet: rentEstimate.rentFeeNet,\n },\n };\n}\n\n/** @internal */\nexport async function _estimateGasFromSwapResponse({\n crossChain,\n feeUnitsMarginBps,\n fromAddress,\n sourceClient,\n swap,\n}: {\n crossChain: boolean;\n feeUnitsMarginBps?: number;\n fromAddress: EvmAddress;\n sourceClient: ReturnType<typeof getEvmClientForChain>;\n swap: WrappedSwapTransactionResponse;\n}): Promise<bigint> {\n try {\n const gasEstimate = await sourceClient.estimateGas({\n account: fromAddress,\n to: swap.to,\n data: swap.data,\n value: swap.value,\n });\n\n return applyFeeUnitsBpsMargin(gasEstimate, feeUnitsMarginBps);\n } catch (err) {\n let details = 'Failed to estimate gas for Markr swap transaction.';\n\n try {\n const markrSwapWrapperAbi = await getMarkrSwapWrapperAbi(crossChain);\n const decodedRevert = decodeMarkrRevertError(markrSwapWrapperAbi, err);\n\n if (decodedRevert) {\n details = `${details} Markr revert: ${decodedRevert}.`;\n }\n } catch {\n // Keep the base details message if revert decoding fails.\n }\n\n throw new SdkError('Error during gas estimation', ErrorCode.VIEM_ERROR, {\n cause: err,\n details,\n });\n }\n}\n\nfunction _getComputeBudgetPriceAndLimit(transactionMessageBytes: TransactionMessageBytes): {\n computeUnitLimit: bigint;\n computeUnitPriceMicroLamports: bigint;\n} {\n const compiledTxMessage = getCompiledTransactionMessageDecoder().decode(transactionMessageBytes);\n let computeUnitLimit = 0n;\n let computeUnitPriceMicroLamports = 0n;\n\n for (const instruction of compiledTxMessage.instructions) {\n const programAddress = compiledTxMessage.staticAccounts[instruction.programAddressIndex];\n if (programAddress !== SOLANA_COMPUTE_BUDGET_PROGRAM) {\n continue;\n }\n\n const data = instruction.data;\n\n if (!data || data.length < 1) {\n continue;\n }\n\n const discriminator = data[0];\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n // ComputeBudget::SetComputeUnitLimit(u32)\n if (discriminator === 2 && data.length >= 1 + 4) {\n computeUnitLimit = BigInt(view.getUint32(1, true));\n continue;\n }\n\n // ComputeBudget::SetComputeUnitPrice(u64)\n if (discriminator === 3 && data.length >= 1 + 8) {\n computeUnitPriceMicroLamports = view.getBigUint64(1, true);\n }\n }\n\n return {\n computeUnitLimit,\n computeUnitPriceMicroLamports,\n };\n}\n\nfunction _calculatePriorityFeeLamports(computeUnitLimit: bigint, computeUnitPriceMicroLamports: bigint): bigint {\n if (computeUnitLimit <= 0n || computeUnitPriceMicroLamports <= 0n) {\n return 0n;\n }\n\n return (\n (computeUnitLimit * computeUnitPriceMicroLamports + (MICRO_LAMPORTS_PER_LAMPORT - 1n)) / MICRO_LAMPORTS_PER_LAMPORT\n );\n}\n\nfunction _getSignatureCount(transaction: Transaction): bigint {\n const signatures = (transaction as { signatures?: unknown }).signatures;\n\n if (Array.isArray(signatures)) {\n return BigInt(signatures.length);\n }\n\n if (signatures && typeof signatures === 'object') {\n return BigInt(Object.keys(signatures).length);\n }\n\n return 0n;\n}\n\nasync function _estimateRentFeesFromTransaction({\n fromAddress,\n rpc,\n transaction,\n}: {\n fromAddress: string;\n rpc: Rpc<SolanaRpcApi>;\n transaction: Transaction;\n}): Promise<SolanaRentEstimate> {\n const compiledMessage: CompiledTransactionMessage = getCompiledTransactionMessageDecoder().decode(\n transaction.messageBytes,\n );\n const allAccounts = await _resolveAllTransactionAccounts(compiledMessage, rpc);\n\n const createdAccounts = new Map<string, Omit<CreatedRentAccount, 'refunded'>>();\n const closedAccountDestinationByAddress = new Map<string, string>();\n\n let ataRentLamports: bigint | undefined;\n\n for (const instruction of compiledMessage.instructions) {\n const programAddress = allAccounts[instruction.programAddressIndex];\n\n if (programAddress === SOLANA_SYSTEM_PROGRAM) {\n const createdAccountAddress = _getInstructionAccountAddress(allAccounts, instruction, 1);\n const lamports = _getSystemCreateAccountLamports(instruction.data);\n if (createdAccountAddress && lamports > 0n) {\n createdAccounts.set(createdAccountAddress, {\n address: createdAccountAddress,\n kind: 'system',\n lamports,\n });\n }\n continue;\n }\n\n if (programAddress === SOLANA_ASSOCIATED_TOKEN_PROGRAM) {\n const discriminator = instruction.data?.[0];\n const isAssociatedTokenCreateInstruction =\n discriminator === undefined || discriminator === 0 || discriminator === 1;\n\n if (!isAssociatedTokenCreateInstruction) {\n continue;\n }\n\n const associatedTokenAddress = _getInstructionAccountAddress(allAccounts, instruction, 1);\n if (!associatedTokenAddress || !isSolanaAddress(associatedTokenAddress)) {\n continue;\n }\n\n const accountInfo = await rpc.getAccountInfo(associatedTokenAddress).send();\n if (accountInfo.value) {\n continue;\n }\n\n if (ataRentLamports === undefined) {\n ataRentLamports = await rpc.getMinimumBalanceForRentExemption(SPL_TOKEN_ACCOUNT_SIZE_BYTES).send();\n }\n\n createdAccounts.set(associatedTokenAddress, {\n address: associatedTokenAddress,\n kind: 'ata',\n lamports: ataRentLamports,\n });\n\n continue;\n }\n\n const isSplTokenProgram =\n programAddress === SOLANA_SPL_TOKEN_PROGRAM || programAddress === SOLANA_SPL_TOKEN_2022_PROGRAM;\n if (!isSplTokenProgram) {\n continue;\n }\n\n const discriminator = instruction.data?.[0];\n if (discriminator !== 9) {\n continue;\n }\n\n const closedAccountAddress = _getInstructionAccountAddress(allAccounts, instruction, 0);\n const refundDestinationAddress = _getInstructionAccountAddress(allAccounts, instruction, 1);\n\n if (closedAccountAddress && refundDestinationAddress) {\n closedAccountDestinationByAddress.set(closedAccountAddress, refundDestinationAddress);\n }\n }\n\n const normalizedFromAddress = isSolanaAddress(fromAddress) ? fromAddress : undefined;\n const createdAccountEntries = Array.from(createdAccounts.values()).map((createdAccount) => {\n const refundDestinationAddress = closedAccountDestinationByAddress.get(createdAccount.address);\n const refunded = normalizedFromAddress !== undefined && refundDestinationAddress === normalizedFromAddress;\n\n return {\n ...createdAccount,\n refunded,\n } satisfies CreatedRentAccount;\n });\n\n const rentLamportsUpfront = createdAccountEntries.reduce((acc, account) => acc + account.lamports, 0n);\n const refundedLamports = createdAccountEntries.reduce(\n (acc, account) => acc + (account.refunded ? account.lamports : 0n),\n 0n,\n );\n const rentFeeNet = rentLamportsUpfront - refundedLamports;\n\n return {\n createdAccounts: createdAccountEntries,\n rentFee: rentLamportsUpfront,\n rentFeeNet,\n refundable: refundedLamports,\n };\n}\n\nfunction _isObject(value: unknown): value is object {\n return !!value && typeof value === 'object';\n}\n\nfunction _getObjectProperty(value: unknown, key: string): unknown {\n if (!_isObject(value)) {\n return undefined;\n }\n\n return Reflect.get(value, key);\n}\n\nfunction _toNumberIndexArray(value: unknown): number[] | undefined {\n if (value instanceof Uint8Array) {\n return Array.from(value);\n }\n\n if (Array.isArray(value) && value.every((entry) => Number.isInteger(entry) && entry >= 0)) {\n return value;\n }\n\n return undefined;\n}\n\nfunction _getCompiledMessageAddressTableLookups(\n compiledMessage: CompiledTransactionMessage,\n): CompiledMessageAddressTableLookup[] {\n const addressTableLookupsRaw = _getObjectProperty(compiledMessage, 'addressTableLookups');\n if (!Array.isArray(addressTableLookupsRaw)) {\n return [];\n }\n\n const lookups: CompiledMessageAddressTableLookup[] = [];\n\n for (const lookupRaw of addressTableLookupsRaw) {\n const accountKey = _getObjectProperty(lookupRaw, 'accountKey');\n const writableIndexes = _toNumberIndexArray(_getObjectProperty(lookupRaw, 'writableIndexes'));\n const readonlyIndexes = _toNumberIndexArray(_getObjectProperty(lookupRaw, 'readonlyIndexes'));\n\n if (typeof accountKey !== 'string' || !writableIndexes || !readonlyIndexes) {\n continue;\n }\n\n lookups.push({\n accountKey,\n writableIndexes,\n readonlyIndexes,\n });\n }\n\n return lookups;\n}\n\nfunction _extractLookupTableAddresses(response: unknown): string[] {\n const lookupTableValue = _getObjectProperty(response, 'value');\n if (!_isObject(lookupTableValue)) {\n return [];\n }\n\n const addresses = _getObjectProperty(lookupTableValue, 'addresses');\n if (!Array.isArray(addresses)) {\n return [];\n }\n\n return addresses.filter((entry): entry is string => typeof entry === 'string');\n}\n\nasync function _loadLookupTableAddresses(\n compiledMessage: CompiledTransactionMessage,\n rpc: Rpc<SolanaRpcApi>,\n): Promise<LookupTableAddresses> {\n const writableAddresses: string[] = [];\n const readonlyAddresses: string[] = [];\n const addressTableLookups = _getCompiledMessageAddressTableLookups(compiledMessage);\n\n for (const lookup of addressTableLookups) {\n if (!isSolanaAddress(lookup.accountKey)) {\n continue;\n }\n\n const tableAddresses = await _fetchAddressLookupTableAddresses(rpc, lookup.accountKey);\n\n for (const index of lookup.writableIndexes) {\n const address = tableAddresses[index];\n if (address) {\n writableAddresses.push(address);\n }\n }\n\n for (const index of lookup.readonlyIndexes) {\n const address = tableAddresses[index];\n if (address) {\n readonlyAddresses.push(address);\n }\n }\n }\n\n return {\n writableAddresses,\n readonlyAddresses,\n };\n}\n\nasync function _fetchAddressLookupTableAddresses(rpc: Rpc<SolanaRpcApi>, accountKey: SolanaAddress): Promise<string[]> {\n const getAddressLookupTable = _getObjectProperty(rpc, 'getAddressLookupTable');\n if (typeof getAddressLookupTable !== 'function') {\n return [];\n }\n\n const request = Reflect.apply(getAddressLookupTable, rpc, [accountKey]);\n const send = _getObjectProperty(request, 'send');\n\n if (typeof send !== 'function') {\n return [];\n }\n\n const response = await Reflect.apply(send, request, []);\n return _extractLookupTableAddresses(response);\n}\n\nasync function _resolveAllTransactionAccounts(\n compiledMessage: CompiledTransactionMessage,\n rpc: Rpc<SolanaRpcApi>,\n): Promise<string[]> {\n const { writableAddresses, readonlyAddresses } = await _loadLookupTableAddresses(compiledMessage, rpc);\n\n return [...compiledMessage.staticAccounts, ...writableAddresses, ...readonlyAddresses];\n}\n\n/**\n * Resolves an account address used by a compiled instruction.\n *\n * Compiled instructions reference accounts by index into the transaction\n * message account list. For versioned transactions this includes static\n * accounts followed by writable and readonly addresses loaded from lookup\n * tables. This helper converts an instruction-local `accountIndex` into the\n * corresponding account address.\n *\n * Returns `undefined` when the instruction does not provide an account at the\n * requested index.\n */\nfunction _getInstructionAccountAddress(\n allAccounts: readonly string[],\n instruction: CompiledTransactionMessage['instructions'][number],\n accountIndex: number,\n): string | undefined {\n const messageAccountIndex = instruction.accountIndices?.[accountIndex];\n\n if (messageAccountIndex === undefined) {\n return undefined;\n }\n\n return allAccounts[messageAccountIndex];\n}\n\n/**\n * Extracts lamports from System Program account-creation instruction data.\n *\n * Supported instruction layouts:\n * - `CreateAccount` (`u32 discriminator = 0`): lamports at byte offset `4`.\n * - `CreateAccountWithSeed` (`u32 discriminator = 3`): lamports are located\n * after the variable-length seed field.\n *\n * Returns `0n` when data is missing, malformed, or not one of the supported\n * System Program create-account variants.\n */\nfunction _getSystemCreateAccountLamports(data: CompiledTransactionMessage['instructions'][number]['data']): bigint {\n if (!data || data.length < 12) {\n return 0n;\n }\n\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n const instructionDiscriminator = view.getUint32(0, true);\n\n if (instructionDiscriminator === 0 && data.length >= 12) {\n return view.getBigUint64(4, true);\n }\n\n if (instructionDiscriminator === 3 && data.length >= 44) {\n const seedLenOffset = 36;\n const seedLength = Number(view.getBigUint64(seedLenOffset, true));\n if (!Number.isSafeInteger(seedLength) || seedLength < 0) {\n return 0n;\n }\n\n const lamportsOffset = seedLenOffset + 8 + seedLength;\n if (lamportsOffset + 8 > data.length) {\n return 0n;\n }\n\n return new DataView(data.buffer, data.byteOffset + lamportsOffset, 8).getBigUint64(0, true);\n }\n\n return 0n;\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{ErrorCode as e,ErrorReason as t,InvalidParamsError as n,SdkError as r}from"../../../errors.js";import{caip2ToEip155ChainId as i}from"../../../utils/caip.js";import{isEvmNamespace as a,isSolanaNamespace as o}from"../../../_utils/chain.js";import{applyFeeUnitsBpsMargin as s,getEvmClientForChain as c,getSolanaRpcForChain as l}from"../../_utils.js";import{estimateEvmFeesPerGas as u}from"../../_evm-gas.js";import{markrGetSpenderAddress as d,markrSwap as f}from"../_api.js";import{assetToAddressString as p,calculateMarkrMinimumAmountOut as m,decodeMarkrRevertError as h,getAdditiveSourceAssetFeeAmount as g,getMarkrSwapWrapperAbi as _,isTokenAddressNative as v}from"../_utils.js";import{isEvmSwapResponse as y,isSolanaSwapResponse as b}from"../_type-guards.js";import{decodeSolanaTransactionBase64 as x,refreshSolanaSwapTransactionBlockhash as S}from"../_solana-utils.js";import{encodeFunctionData as C,erc20Abi as w,isAddress as T}from"viem";import{getCompiledTransactionMessageDecoder as E,isAddress as D}from"@solana/kit";const O=1000000n;function k(e){return async(r,i)=>{if(a(r.sourceChain.chainId))return await A(r,i,e);if(o(r.sourceChain.chainId))return await j(r,i,e);throw new n(t.INVALID_PARAMS,`Unsupported source chain namespace for estimateNativeFee: ${r.sourceChain.chainId}`)}}async function A(a,o,{apiOptions:l,appId:h}){if(!T(a.fromAddress))throw new n(t.INVALID_PARAMS,`Invalid fromAddress: ${a.fromAddress}`);let _=c({chain:a.sourceChain}),b=p(a.assetIn,a.sourceChain.chainId);if(!T(b))throw new r(t.INVALID_PARAMS,e.INVALID_PARAMS,{details:`assetIn address is not a valid EVM address. Can not call estimateGas.`});let x=v(b),S=a.sourceChain.chainId.toLowerCase()!==a.targetChain.chainId.toLowerCase(),E=a.amountIn+g(a),D=0n;if(!x){let t,{address:n}=await d(l,{chainId:i(a.sourceChain.chainId),crossChainSwap:S,quoteId:a.id});try{t=await _.readContract({address:b,abi:w,functionName:`allowance`,args:[a.fromAddress,n]})}catch(t){throw new r(`Error during allowance check`,e.VIEM_ERROR,{cause:t,details:`Failed to read ERC20 allowance for Markr spender.`})}if(t<E)try{D=await _.estimateGas({account:a.fromAddress,to:b,data:C({abi:w,functionName:`approve`,args:[n,E]}),value:0n})}catch(t){throw new r(`Error during gas estimation`,e.VIEM_ERROR,{cause:t,details:`Failed to estimate gas for ERC20 approval transaction.`})}}let O=D>0n,k=m({amountOut:a.amountOut,assetOut:a.assetOut,slippageBps:a.slippageBps}),A=await f(l,{amountIn:a.amountIn.toString(),appId:h,minAmountOut:k.toString(),tokenIn:b,tokenOut:p(a.assetOut,a.targetChain.chainId),uuid:a.id});if(!y(A))throw new r(t.CHAIN_NOT_SUPPORTED,e.INVALID_PARAMS,{details:`Received non-EVM swap response from Markr. Expected EVM transaction data for gas estimation, but got response with chainType ${A.chainType}.`});let j=0n;j=O?a.gasEstimate?s(a.gasEstimate,o?.feeUnitsMarginBps):s(a.fees.filter(e=>e.type===`gas`&&e.chainId===a.sourceChain.chainId).reduce((e,t)=>e+t.amount,0n)||700000n,o?.feeUnitsMarginBps):await M({crossChain:S,feeUnitsMarginBps:o?.feeUnitsMarginBps,fromAddress:a.fromAddress,sourceClient:_,swap:A});let N=await u(_,a.sourceChain,o?.overrides?.feeRateTier),P=o?.overrides?.maxFeePerGas??N.maxFeePerGas,F=o?.overrides?.maxPriorityFeePerGas??N.maxPriorityFeePerGas,I=(j+s(D,o?.feeUnitsMarginBps))*P;return{asset:a.sourceChain.networkToken,totalFee:I,totalUpfrontFee:I,meta:{approvalFee:O?s(D,o?.feeUnitsMarginBps)*P:void 0,maxFeePerGas:P,maxPriorityFeePerGas:F}}}async function j(n,i,{apiOptions:a,appId:o}){let c=p(n.assetIn,n.sourceChain.chainId);if(!D(c))throw new r(t.INVALID_PARAMS,e.INVALID_PARAMS,{details:`assetIn address is not a valid Solana address. Can not call estimateGas.`});let u=m({amountOut:n.amountOut,assetOut:n.assetOut,slippageBps:n.slippageBps}),d=await f(a,{amountIn:n.amountIn.toString(),appId:o,minAmountOut:u.toString(),tokenIn:c,tokenOut:p(n.assetOut,n.targetChain.chainId),userPublicKey:n.fromAddress,uuid:n.id});if(!b(d))throw new r(t.CHAIN_NOT_SUPPORTED,e.INVALID_PARAMS,{details:`Received non-Solana swap response from Markr. Expected Solana transaction data for fee estimation.`});let h=l({chain:n.sourceChain}),g=await S(d.swapTransaction,h),_=x(g),v=_.messageBytes,y=F(_)*5000n,{computeUnitLimit:C,computeUnitPriceMicroLamports:w}=N(v),T=P(C,w),E=y+T,O=s(E,i?.feeUnitsMarginBps),k=(await h.simulateTransaction(g,{encoding:`base64`,sigVerify:!1,replaceRecentBlockhash:!0}).send()).value.unitsConsumed??0n,A=await I({fromAddress:n.fromAddress,rpc:h,transaction:_}),j=O+A.rentFee;return{asset:n.sourceChain.networkToken,totalFee:j,totalUpfrontFee:j,refundable:A.refundable,meta:{baseFee:y,priorityFee:T,transactionFee:E,transactionFeeWithMargin:O,computeUnitLimit:C,computeUnitPriceMicroLamports:w,unitsConsumed:k,createdAccounts:A.createdAccounts,rentFee:A.rentFee,rentFeeNet:A.rentFeeNet}}}async function M({crossChain:t,feeUnitsMarginBps:n,fromAddress:i,sourceClient:a,swap:o}){try{return s(await a.estimateGas({account:i,to:o.to,data:o.data,value:o.value}),n)}catch(n){let i=`Failed to estimate gas for Markr swap transaction.`;try{let e=h(await _(t),n);e&&(i=`${i} Markr revert: ${e}.`)}catch{}throw new r(`Error during gas estimation`,e.VIEM_ERROR,{cause:n,details:i})}}function N(e){let t=E().decode(e),n=0n,r=0n;for(let e of t.instructions){if(t.staticAccounts[e.programAddressIndex]!==`ComputeBudget111111111111111111111111111111`)continue;let i=e.data;if(!i||i.length<1)continue;let a=i[0],o=new DataView(i.buffer,i.byteOffset,i.byteLength);if(a===2&&i.length>=5){n=BigInt(o.getUint32(1,!0));continue}a===3&&i.length>=9&&(r=o.getBigUint64(1,!0))}return{computeUnitLimit:n,computeUnitPriceMicroLamports:r}}function P(e,t){return e<=0n||t<=0n?0n:(e*t+(O-1n))/O}function F(e){let t=e.signatures;return Array.isArray(t)?BigInt(t.length):t&&typeof t==`object`?BigInt(Object.keys(t).length):0n}async function I({fromAddress:e,rpc:t,transaction:n}){let r=E().decode(n.messageBytes),i=await W(r,t),a=new Map,o=new Map,s;for(let e of r.instructions){let n=i[e.programAddressIndex];if(n===`11111111111111111111111111111111`){let t=G(i,e,1),n=K(e.data);t&&n>0n&&a.set(t,{address:t,kind:`system`,lamports:n});continue}if(n===`ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL`){let n=e.data?.[0];if(!(n===void 0||n===0||n===1))continue;let r=G(i,e,1);if(!r||!D(r)||(await t.getAccountInfo(r).send()).value)continue;s===void 0&&(s=await t.getMinimumBalanceForRentExemption(165n).send()),a.set(r,{address:r,kind:`ata`,lamports:s});continue}if(!(n===`TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA`||n===`TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb`)||e.data?.[0]!==9)continue;let r=G(i,e,0),c=G(i,e,1);r&&c&&o.set(r,c)}let c=D(e)?e:void 0,l=Array.from(a.values()).map(e=>{let t=o.get(e.address),n=c!==void 0&&t===c;return{...e,refunded:n}}),u=l.reduce((e,t)=>e+t.lamports,0n),d=l.reduce((e,t)=>e+(t.refunded?t.lamports:0n),0n);return{createdAccounts:l,rentFee:u,rentFeeNet:u-d,refundable:d}}function L(e){return!!e&&typeof e==`object`}function R(e,t){if(L(e))return Reflect.get(e,t)}function z(e){if(e instanceof Uint8Array)return Array.from(e);if(Array.isArray(e)&&e.every(e=>Number.isInteger(e)&&e>=0))return e}function B(e){let t=R(e,`addressTableLookups`);if(!Array.isArray(t))return[];let n=[];for(let e of t){let t=R(e,`accountKey`),r=z(R(e,`writableIndexes`)),i=z(R(e,`readonlyIndexes`));typeof t!=`string`||!r||!i||n.push({accountKey:t,writableIndexes:r,readonlyIndexes:i})}return n}function V(e){let t=R(e,`value`);if(!L(t))return[];let n=R(t,`addresses`);return Array.isArray(n)?n.filter(e=>typeof e==`string`):[]}async function H(e,t){let n=[],r=[],i=B(e);for(let e of i){if(!D(e.accountKey))continue;let i=await U(t,e.accountKey);for(let t of e.writableIndexes){let e=i[t];e&&n.push(e)}for(let t of e.readonlyIndexes){let e=i[t];e&&r.push(e)}}return{writableAddresses:n,readonlyAddresses:r}}async function U(e,t){let n=R(e,`getAddressLookupTable`);if(typeof n!=`function`)return[];let r=Reflect.apply(n,e,[t]),i=R(r,`send`);return typeof i==`function`?V(await Reflect.apply(i,r,[])):[]}async function W(e,t){let{writableAddresses:n,readonlyAddresses:r}=await H(e,t);return[...e.staticAccounts,...n,...r]}function G(e,t,n){let r=t.accountIndices?.[n];if(r!==void 0)return e[r]}function K(e){if(!e||e.length<12)return 0n;let t=new DataView(e.buffer,e.byteOffset,e.byteLength),n=t.getUint32(0,!0);if(n===0&&e.length>=12)return t.getBigUint64(4,!0);if(n===3&&e.length>=44){let n=Number(t.getBigUint64(36,!0));if(!Number.isSafeInteger(n)||n<0)return 0n;let r=44+n;return r+8>e.length?0n:new DataView(e.buffer,e.byteOffset+r,8).getBigUint64(0,!0)}return 0n}export{M as _estimateGasFromSwapResponse,k as estimateNativeFeeFactory};
2
+ //# sourceMappingURL=estimate-native-fee.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"estimate-native-fee.js","names":["isEvmAddress","isSolanaAddress"],"sources":["../../../../src/transfer-service/markr/_handlers/estimate-native-fee.ts"],"sourcesContent":["import {\n type Address as SolanaAddress,\n type CompiledTransactionMessage,\n getCompiledTransactionMessageDecoder,\n isAddress as isSolanaAddress,\n type Rpc,\n type SolanaRpcApi,\n type Transaction,\n type TransactionMessageBytes,\n} from '@solana/kit';\nimport { encodeFunctionData, erc20Abi, type Address as EvmAddress, isAddress as isEvmAddress } from 'viem';\nimport { ErrorCode, ErrorReason, InvalidParamsError, SdkError } from '../../../errors';\nimport type { EstimateNativeFeeOptions, NativeFeeEstimate, TransferService } from '../../../types/service';\nimport { applyFeeUnitsBpsMargin, getEvmClientForChain, getSolanaRpcForChain } from '../../_utils';\nimport { estimateEvmFeesPerGas } from '../../_evm-gas';\nimport { markrGetSpenderAddress, markrSwap, type ApiOptions } from '../_api';\nimport {\n assetToAddressString,\n calculateMarkrMinimumAmountOut,\n decodeMarkrRevertError,\n getAdditiveSourceAssetFeeAmount,\n getMarkrSwapWrapperAbi,\n isTokenAddressNative,\n} from '../_utils';\nimport type { WrappedSwapTransactionResponse } from '../_schema';\nimport { isEvmSwapResponse, isSolanaSwapResponse } from '../_type-guards';\nimport { caip2ToEip155ChainId } from '../../../utils/caip';\nimport type { Quote } from '../../../types/quote';\nimport { isEvmNamespace, isSolanaNamespace } from '../../../_utils/chain';\nimport { decodeSolanaTransactionBase64, refreshSolanaSwapTransactionBlockhash } from '../_solana-utils';\n\n/**\n * This is just a fallback value used in the case that an\n * allowance approval is needed, and Markr didn't return us any gas estimate data.\n *\n * Just based on my review of some quotes, I think this is a reasonable estimate\n * left on the higher end.\n *\n * Assume this could need to change.\n */\nconst EVM_SWAP_FALLBACK_GAS_ESTIMATE = 700_000n;\n\n/**\n * Compute Budget program address.\n *\n * Used to detect `SetComputeUnitPrice` instructions when deriving\n * the Solana priority fee component from transaction message bytes.\n */\nconst SOLANA_COMPUTE_BUDGET_PROGRAM = 'ComputeBudget111111111111111111111111111111';\n\n/**\n * System Program address.\n *\n * Used to detect account-creation instructions and extract lamports\n * funded upfront for newly created system accounts.\n */\nconst SOLANA_SYSTEM_PROGRAM = '11111111111111111111111111111111';\n\n/**\n * Associated Token Account (ATA) program address.\n *\n * Used to detect ATA create instructions so the estimator can include\n * rent-exempt funding when the ATA does not already exist on-chain.\n */\nconst SOLANA_ASSOCIATED_TOKEN_PROGRAM = 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL';\n\n/**\n * Legacy SPL Token program address.\n *\n * Used to detect close-account instructions that may refund lamports\n * from temporary token accounts back to the sender.\n */\nconst SOLANA_SPL_TOKEN_PROGRAM = 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA';\n\n/**\n * SPL Token-2022 program address.\n *\n * Used alongside the legacy token program for close-account detection\n * when computing expected refundable lamports.\n */\nconst SOLANA_SPL_TOKEN_2022_PROGRAM = 'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb';\n\n/**\n * SPL token account size for rent-exemption calculations.\n *\n * Used with `getMinimumBalanceForRentExemption` to estimate ATA\n * creation funding requirements.\n */\nconst SPL_TOKEN_ACCOUNT_SIZE_BYTES = 165n;\nconst SOLANA_BASE_FEE_PER_SIGNATURE_LAMPORTS = 5_000n;\nconst MICRO_LAMPORTS_PER_LAMPORT = 1_000_000n;\n\nexport interface EstimateNativeFeeFactoryConfig {\n apiOptions: ApiOptions;\n appId: string;\n}\n\ninterface CreatedRentAccount {\n address: string;\n kind: 'ata' | 'system';\n lamports: bigint;\n refunded: boolean;\n}\n\ninterface SolanaRentEstimate {\n createdAccounts: CreatedRentAccount[];\n rentFee: bigint;\n rentFeeNet: bigint;\n refundable: bigint;\n}\n\ninterface CompiledMessageAddressTableLookup {\n accountKey: string;\n writableIndexes: readonly number[];\n readonlyIndexes: readonly number[];\n}\n\ninterface LookupTableAddresses {\n writableAddresses: string[];\n readonlyAddresses: string[];\n}\n\nexport function estimateNativeFeeFactory(config: EstimateNativeFeeFactoryConfig): TransferService['estimateNativeFee'] {\n return async (quote, options) => {\n // Either the source chain is EVM or Solana, we need to call different functions that\n // calculate the native fee depending on the chain kind.\n\n if (isEvmNamespace(quote.sourceChain.chainId)) {\n return await _estimateNativeFeeEvm(quote, options, config);\n }\n\n if (isSolanaNamespace(quote.sourceChain.chainId)) {\n return await _estimateNativeFeeSolana(quote, options, config);\n }\n\n throw new InvalidParamsError(\n ErrorReason.INVALID_PARAMS,\n `Unsupported source chain namespace for estimateNativeFee: ${quote.sourceChain.chainId}`,\n );\n };\n}\n\n/** @internal */\nexport async function _estimateNativeFeeEvm(\n quote: Quote,\n options: EstimateNativeFeeOptions | undefined,\n { apiOptions, appId }: EstimateNativeFeeFactoryConfig,\n): Promise<NativeFeeEstimate> {\n if (!isEvmAddress(quote.fromAddress)) {\n throw new InvalidParamsError(ErrorReason.INVALID_PARAMS, `Invalid fromAddress: ${quote.fromAddress}`);\n }\n\n const sourceClient = getEvmClientForChain({ chain: quote.sourceChain });\n\n const assetInAddressString = assetToAddressString(quote.assetIn, quote.sourceChain.chainId);\n\n if (!isEvmAddress(assetInAddressString)) {\n throw new SdkError(ErrorReason.INVALID_PARAMS, ErrorCode.INVALID_PARAMS, {\n details: `assetIn address is not a valid EVM address. Can not call estimateGas.`,\n });\n }\n\n const isAssetInNative = isTokenAddressNative(assetInAddressString);\n const isCrossChainSwap = quote.sourceChain.chainId.toLowerCase() !== quote.targetChain.chainId.toLowerCase();\n const allowanceAmount = quote.amountIn + getAdditiveSourceAssetFeeAmount(quote);\n\n let allowanceApprovalGas = 0n;\n if (!isAssetInNative) {\n // Check if approval is needed, and if so, calculate the gas cost for the approval.\n let allowance: bigint;\n\n const { address: spenderAddress } = await markrGetSpenderAddress(apiOptions, {\n chainId: caip2ToEip155ChainId(quote.sourceChain.chainId),\n crossChainSwap: isCrossChainSwap,\n quoteId: quote.id,\n });\n\n try {\n allowance = await sourceClient.readContract({\n address: assetInAddressString,\n abi: erc20Abi,\n functionName: 'allowance',\n args: [quote.fromAddress, spenderAddress],\n });\n } catch (error) {\n throw new SdkError('Error during allowance check', ErrorCode.VIEM_ERROR, {\n cause: error,\n details: 'Failed to read ERC20 allowance for Markr spender.',\n });\n }\n\n const approvalNeeded = allowance < allowanceAmount;\n\n if (approvalNeeded) {\n try {\n allowanceApprovalGas = await sourceClient.estimateGas({\n account: quote.fromAddress,\n to: assetInAddressString,\n data: encodeFunctionData({\n abi: erc20Abi,\n functionName: 'approve',\n args: [spenderAddress, allowanceAmount],\n }),\n value: 0n,\n });\n } catch (error) {\n throw new SdkError('Error during gas estimation', ErrorCode.VIEM_ERROR, {\n cause: error,\n details: 'Failed to estimate gas for ERC20 approval transaction.',\n });\n }\n }\n }\n\n const allowanceApprovalIsNeeded = allowanceApprovalGas > 0n;\n\n const minAmountOut = calculateMarkrMinimumAmountOut({\n amountOut: quote.amountOut,\n assetOut: quote.assetOut,\n slippageBps: quote.slippageBps,\n });\n\n const swap = await markrSwap(apiOptions, {\n amountIn: quote.amountIn.toString(),\n appId,\n minAmountOut: minAmountOut.toString(),\n tokenIn: assetInAddressString,\n tokenOut: assetToAddressString(quote.assetOut, quote.targetChain.chainId),\n uuid: quote.id,\n });\n\n if (!isEvmSwapResponse(swap)) {\n // Should hopefully never happen.\n throw new SdkError(ErrorReason.CHAIN_NOT_SUPPORTED, ErrorCode.INVALID_PARAMS, {\n details: `Received non-EVM swap response from Markr. Expected EVM transaction data for gas estimation, but got response with chainType ${swap.chainType}.`,\n });\n }\n\n let gasWithMargin = 0n;\n\n // If an approval is needed, we can't call `eth_estimateGas` on the\n // swap transaction because no actual allowance approval was performed yet,\n // so a gas estimation would fail due to needing allowance.\n //\n // So if an allowance approval is needed, we fall back to some other logic for\n // estimating the swap tx gas.\n if (allowanceApprovalIsNeeded) {\n // Attempt to use the Markr provided `gasEstimate` first if available.\n // Otherwise we attempt to get the gas from the `fees` component that are applicable\n // to the source chain. If neither of those are available, we fall back to a hardcoded value.\n if (quote.gasEstimate) {\n gasWithMargin = applyFeeUnitsBpsMargin(quote.gasEstimate, options?.feeUnitsMarginBps);\n } else {\n const sourceGasFee = quote.fees\n .filter((fee) => fee.type === 'gas' && fee.chainId === quote.sourceChain.chainId)\n .reduce((acc, fee) => acc + fee.amount, 0n);\n\n gasWithMargin = applyFeeUnitsBpsMargin(\n sourceGasFee || EVM_SWAP_FALLBACK_GAS_ESTIMATE,\n options?.feeUnitsMarginBps,\n );\n }\n } else {\n gasWithMargin = await _estimateGasFromSwapResponse({\n crossChain: isCrossChainSwap,\n feeUnitsMarginBps: options?.feeUnitsMarginBps,\n fromAddress: quote.fromAddress,\n sourceClient,\n swap,\n });\n }\n\n const fees = await estimateEvmFeesPerGas(sourceClient, quote.sourceChain, options?.overrides?.feeRateTier);\n\n const maxFeePerGas = options?.overrides?.maxFeePerGas ?? fees.maxFeePerGas;\n const maxPriorityFeePerGas = options?.overrides?.maxPriorityFeePerGas ?? fees.maxPriorityFeePerGas;\n\n const totalFee =\n (gasWithMargin + applyFeeUnitsBpsMargin(allowanceApprovalGas, options?.feeUnitsMarginBps)) * maxFeePerGas;\n\n return {\n asset: quote.sourceChain.networkToken,\n totalFee,\n totalUpfrontFee: totalFee,\n meta: {\n approvalFee: allowanceApprovalIsNeeded\n ? applyFeeUnitsBpsMargin(allowanceApprovalGas, options?.feeUnitsMarginBps) * maxFeePerGas\n : undefined,\n maxFeePerGas,\n maxPriorityFeePerGas,\n },\n };\n}\n\n/** @internal */\nexport async function _estimateNativeFeeSolana(\n quote: Quote,\n options: EstimateNativeFeeOptions | undefined,\n { apiOptions, appId }: EstimateNativeFeeFactoryConfig,\n): Promise<NativeFeeEstimate> {\n const assetInAddressString = assetToAddressString(quote.assetIn, quote.sourceChain.chainId);\n\n if (!isSolanaAddress(assetInAddressString)) {\n throw new SdkError(ErrorReason.INVALID_PARAMS, ErrorCode.INVALID_PARAMS, {\n details: `assetIn address is not a valid Solana address. Can not call estimateGas.`,\n });\n }\n\n const minAmountOut = calculateMarkrMinimumAmountOut({\n amountOut: quote.amountOut,\n assetOut: quote.assetOut,\n slippageBps: quote.slippageBps,\n });\n\n const swap = await markrSwap(apiOptions, {\n amountIn: quote.amountIn.toString(),\n appId,\n minAmountOut: minAmountOut.toString(),\n tokenIn: assetInAddressString,\n tokenOut: assetToAddressString(quote.assetOut, quote.targetChain.chainId),\n userPublicKey: quote.fromAddress,\n uuid: quote.id,\n });\n\n if (!isSolanaSwapResponse(swap)) {\n // Should hopefully never happen.\n throw new SdkError(ErrorReason.CHAIN_NOT_SUPPORTED, ErrorCode.INVALID_PARAMS, {\n details: 'Received non-Solana swap response from Markr. Expected Solana transaction data for fee estimation.',\n });\n }\n\n const rpc = getSolanaRpcForChain({ chain: quote.sourceChain });\n const refreshedSwapTransactionBase64 = await refreshSolanaSwapTransactionBlockhash(swap.swapTransaction, rpc);\n const decodedTransaction = decodeSolanaTransactionBase64(refreshedSwapTransactionBase64);\n const transactionMessageBytes = decodedTransaction.messageBytes;\n const signatureCount = _getSignatureCount(decodedTransaction);\n const baseFeeLamports = signatureCount * SOLANA_BASE_FEE_PER_SIGNATURE_LAMPORTS;\n const { computeUnitLimit, computeUnitPriceMicroLamports } = _getComputeBudgetPriceAndLimit(transactionMessageBytes);\n const priorityFee = _calculatePriorityFeeLamports(computeUnitLimit, computeUnitPriceMicroLamports);\n const transactionFee = baseFeeLamports + priorityFee;\n const transactionFeeWithMargin = applyFeeUnitsBpsMargin(transactionFee, options?.feeUnitsMarginBps);\n\n const sim = await rpc\n .simulateTransaction(refreshedSwapTransactionBase64, {\n encoding: 'base64',\n sigVerify: false,\n replaceRecentBlockhash: true, // Helps prevent block hash expiration issues during simulation.\n })\n .send();\n\n const unitsConsumed = sim.value.unitsConsumed ?? 0n;\n const rentEstimate = await _estimateRentFeesFromTransaction({\n fromAddress: quote.fromAddress,\n rpc,\n transaction: decodedTransaction,\n });\n const totalLamports = transactionFeeWithMargin + rentEstimate.rentFee;\n\n return {\n asset: quote.sourceChain.networkToken,\n totalFee: totalLamports,\n totalUpfrontFee: totalLamports,\n refundable: rentEstimate.refundable,\n meta: {\n baseFee: baseFeeLamports,\n priorityFee,\n transactionFee,\n transactionFeeWithMargin,\n computeUnitLimit,\n computeUnitPriceMicroLamports,\n unitsConsumed,\n createdAccounts: rentEstimate.createdAccounts,\n rentFee: rentEstimate.rentFee,\n rentFeeNet: rentEstimate.rentFeeNet,\n },\n };\n}\n\n/** @internal */\nexport async function _estimateGasFromSwapResponse({\n crossChain,\n feeUnitsMarginBps,\n fromAddress,\n sourceClient,\n swap,\n}: {\n crossChain: boolean;\n feeUnitsMarginBps?: number;\n fromAddress: EvmAddress;\n sourceClient: ReturnType<typeof getEvmClientForChain>;\n swap: WrappedSwapTransactionResponse;\n}): Promise<bigint> {\n try {\n const gasEstimate = await sourceClient.estimateGas({\n account: fromAddress,\n to: swap.to,\n data: swap.data,\n value: swap.value,\n });\n\n return applyFeeUnitsBpsMargin(gasEstimate, feeUnitsMarginBps);\n } catch (err) {\n let details = 'Failed to estimate gas for Markr swap transaction.';\n\n try {\n const markrSwapWrapperAbi = await getMarkrSwapWrapperAbi(crossChain);\n const decodedRevert = decodeMarkrRevertError(markrSwapWrapperAbi, err);\n\n if (decodedRevert) {\n details = `${details} Markr revert: ${decodedRevert}.`;\n }\n } catch {\n // Keep the base details message if revert decoding fails.\n }\n\n throw new SdkError('Error during gas estimation', ErrorCode.VIEM_ERROR, {\n cause: err,\n details,\n });\n }\n}\n\nfunction _getComputeBudgetPriceAndLimit(transactionMessageBytes: TransactionMessageBytes): {\n computeUnitLimit: bigint;\n computeUnitPriceMicroLamports: bigint;\n} {\n const compiledTxMessage = getCompiledTransactionMessageDecoder().decode(transactionMessageBytes);\n let computeUnitLimit = 0n;\n let computeUnitPriceMicroLamports = 0n;\n\n for (const instruction of compiledTxMessage.instructions) {\n const programAddress = compiledTxMessage.staticAccounts[instruction.programAddressIndex];\n if (programAddress !== SOLANA_COMPUTE_BUDGET_PROGRAM) {\n continue;\n }\n\n const data = instruction.data;\n\n if (!data || data.length < 1) {\n continue;\n }\n\n const discriminator = data[0];\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n // ComputeBudget::SetComputeUnitLimit(u32)\n if (discriminator === 2 && data.length >= 1 + 4) {\n computeUnitLimit = BigInt(view.getUint32(1, true));\n continue;\n }\n\n // ComputeBudget::SetComputeUnitPrice(u64)\n if (discriminator === 3 && data.length >= 1 + 8) {\n computeUnitPriceMicroLamports = view.getBigUint64(1, true);\n }\n }\n\n return {\n computeUnitLimit,\n computeUnitPriceMicroLamports,\n };\n}\n\nfunction _calculatePriorityFeeLamports(computeUnitLimit: bigint, computeUnitPriceMicroLamports: bigint): bigint {\n if (computeUnitLimit <= 0n || computeUnitPriceMicroLamports <= 0n) {\n return 0n;\n }\n\n return (\n (computeUnitLimit * computeUnitPriceMicroLamports + (MICRO_LAMPORTS_PER_LAMPORT - 1n)) / MICRO_LAMPORTS_PER_LAMPORT\n );\n}\n\nfunction _getSignatureCount(transaction: Transaction): bigint {\n const signatures = (transaction as { signatures?: unknown }).signatures;\n\n if (Array.isArray(signatures)) {\n return BigInt(signatures.length);\n }\n\n if (signatures && typeof signatures === 'object') {\n return BigInt(Object.keys(signatures).length);\n }\n\n return 0n;\n}\n\nasync function _estimateRentFeesFromTransaction({\n fromAddress,\n rpc,\n transaction,\n}: {\n fromAddress: string;\n rpc: Rpc<SolanaRpcApi>;\n transaction: Transaction;\n}): Promise<SolanaRentEstimate> {\n const compiledMessage: CompiledTransactionMessage = getCompiledTransactionMessageDecoder().decode(\n transaction.messageBytes,\n );\n const allAccounts = await _resolveAllTransactionAccounts(compiledMessage, rpc);\n\n const createdAccounts = new Map<string, Omit<CreatedRentAccount, 'refunded'>>();\n const closedAccountDestinationByAddress = new Map<string, string>();\n\n let ataRentLamports: bigint | undefined;\n\n for (const instruction of compiledMessage.instructions) {\n const programAddress = allAccounts[instruction.programAddressIndex];\n\n if (programAddress === SOLANA_SYSTEM_PROGRAM) {\n const createdAccountAddress = _getInstructionAccountAddress(allAccounts, instruction, 1);\n const lamports = _getSystemCreateAccountLamports(instruction.data);\n if (createdAccountAddress && lamports > 0n) {\n createdAccounts.set(createdAccountAddress, {\n address: createdAccountAddress,\n kind: 'system',\n lamports,\n });\n }\n continue;\n }\n\n if (programAddress === SOLANA_ASSOCIATED_TOKEN_PROGRAM) {\n const discriminator = instruction.data?.[0];\n const isAssociatedTokenCreateInstruction =\n discriminator === undefined || discriminator === 0 || discriminator === 1;\n\n if (!isAssociatedTokenCreateInstruction) {\n continue;\n }\n\n const associatedTokenAddress = _getInstructionAccountAddress(allAccounts, instruction, 1);\n if (!associatedTokenAddress || !isSolanaAddress(associatedTokenAddress)) {\n continue;\n }\n\n const accountInfo = await rpc.getAccountInfo(associatedTokenAddress).send();\n if (accountInfo.value) {\n continue;\n }\n\n if (ataRentLamports === undefined) {\n ataRentLamports = await rpc.getMinimumBalanceForRentExemption(SPL_TOKEN_ACCOUNT_SIZE_BYTES).send();\n }\n\n createdAccounts.set(associatedTokenAddress, {\n address: associatedTokenAddress,\n kind: 'ata',\n lamports: ataRentLamports,\n });\n\n continue;\n }\n\n const isSplTokenProgram =\n programAddress === SOLANA_SPL_TOKEN_PROGRAM || programAddress === SOLANA_SPL_TOKEN_2022_PROGRAM;\n if (!isSplTokenProgram) {\n continue;\n }\n\n const discriminator = instruction.data?.[0];\n if (discriminator !== 9) {\n continue;\n }\n\n const closedAccountAddress = _getInstructionAccountAddress(allAccounts, instruction, 0);\n const refundDestinationAddress = _getInstructionAccountAddress(allAccounts, instruction, 1);\n\n if (closedAccountAddress && refundDestinationAddress) {\n closedAccountDestinationByAddress.set(closedAccountAddress, refundDestinationAddress);\n }\n }\n\n const normalizedFromAddress = isSolanaAddress(fromAddress) ? fromAddress : undefined;\n const createdAccountEntries = Array.from(createdAccounts.values()).map((createdAccount) => {\n const refundDestinationAddress = closedAccountDestinationByAddress.get(createdAccount.address);\n const refunded = normalizedFromAddress !== undefined && refundDestinationAddress === normalizedFromAddress;\n\n return {\n ...createdAccount,\n refunded,\n } satisfies CreatedRentAccount;\n });\n\n const rentLamportsUpfront = createdAccountEntries.reduce((acc, account) => acc + account.lamports, 0n);\n const refundedLamports = createdAccountEntries.reduce(\n (acc, account) => acc + (account.refunded ? account.lamports : 0n),\n 0n,\n );\n const rentFeeNet = rentLamportsUpfront - refundedLamports;\n\n return {\n createdAccounts: createdAccountEntries,\n rentFee: rentLamportsUpfront,\n rentFeeNet,\n refundable: refundedLamports,\n };\n}\n\nfunction _isObject(value: unknown): value is object {\n return !!value && typeof value === 'object';\n}\n\nfunction _getObjectProperty(value: unknown, key: string): unknown {\n if (!_isObject(value)) {\n return undefined;\n }\n\n return Reflect.get(value, key);\n}\n\nfunction _toNumberIndexArray(value: unknown): number[] | undefined {\n if (value instanceof Uint8Array) {\n return Array.from(value);\n }\n\n if (Array.isArray(value) && value.every((entry) => Number.isInteger(entry) && entry >= 0)) {\n return value;\n }\n\n return undefined;\n}\n\nfunction _getCompiledMessageAddressTableLookups(\n compiledMessage: CompiledTransactionMessage,\n): CompiledMessageAddressTableLookup[] {\n const addressTableLookupsRaw = _getObjectProperty(compiledMessage, 'addressTableLookups');\n if (!Array.isArray(addressTableLookupsRaw)) {\n return [];\n }\n\n const lookups: CompiledMessageAddressTableLookup[] = [];\n\n for (const lookupRaw of addressTableLookupsRaw) {\n const accountKey = _getObjectProperty(lookupRaw, 'accountKey');\n const writableIndexes = _toNumberIndexArray(_getObjectProperty(lookupRaw, 'writableIndexes'));\n const readonlyIndexes = _toNumberIndexArray(_getObjectProperty(lookupRaw, 'readonlyIndexes'));\n\n if (typeof accountKey !== 'string' || !writableIndexes || !readonlyIndexes) {\n continue;\n }\n\n lookups.push({\n accountKey,\n writableIndexes,\n readonlyIndexes,\n });\n }\n\n return lookups;\n}\n\nfunction _extractLookupTableAddresses(response: unknown): string[] {\n const lookupTableValue = _getObjectProperty(response, 'value');\n if (!_isObject(lookupTableValue)) {\n return [];\n }\n\n const addresses = _getObjectProperty(lookupTableValue, 'addresses');\n if (!Array.isArray(addresses)) {\n return [];\n }\n\n return addresses.filter((entry): entry is string => typeof entry === 'string');\n}\n\nasync function _loadLookupTableAddresses(\n compiledMessage: CompiledTransactionMessage,\n rpc: Rpc<SolanaRpcApi>,\n): Promise<LookupTableAddresses> {\n const writableAddresses: string[] = [];\n const readonlyAddresses: string[] = [];\n const addressTableLookups = _getCompiledMessageAddressTableLookups(compiledMessage);\n\n for (const lookup of addressTableLookups) {\n if (!isSolanaAddress(lookup.accountKey)) {\n continue;\n }\n\n const tableAddresses = await _fetchAddressLookupTableAddresses(rpc, lookup.accountKey);\n\n for (const index of lookup.writableIndexes) {\n const address = tableAddresses[index];\n if (address) {\n writableAddresses.push(address);\n }\n }\n\n for (const index of lookup.readonlyIndexes) {\n const address = tableAddresses[index];\n if (address) {\n readonlyAddresses.push(address);\n }\n }\n }\n\n return {\n writableAddresses,\n readonlyAddresses,\n };\n}\n\nasync function _fetchAddressLookupTableAddresses(rpc: Rpc<SolanaRpcApi>, accountKey: SolanaAddress): Promise<string[]> {\n const getAddressLookupTable = _getObjectProperty(rpc, 'getAddressLookupTable');\n if (typeof getAddressLookupTable !== 'function') {\n return [];\n }\n\n const request = Reflect.apply(getAddressLookupTable, rpc, [accountKey]);\n const send = _getObjectProperty(request, 'send');\n\n if (typeof send !== 'function') {\n return [];\n }\n\n const response = await Reflect.apply(send, request, []);\n return _extractLookupTableAddresses(response);\n}\n\nasync function _resolveAllTransactionAccounts(\n compiledMessage: CompiledTransactionMessage,\n rpc: Rpc<SolanaRpcApi>,\n): Promise<string[]> {\n const { writableAddresses, readonlyAddresses } = await _loadLookupTableAddresses(compiledMessage, rpc);\n\n return [...compiledMessage.staticAccounts, ...writableAddresses, ...readonlyAddresses];\n}\n\n/**\n * Resolves an account address used by a compiled instruction.\n *\n * Compiled instructions reference accounts by index into the transaction\n * message account list. For versioned transactions this includes static\n * accounts followed by writable and readonly addresses loaded from lookup\n * tables. This helper converts an instruction-local `accountIndex` into the\n * corresponding account address.\n *\n * Returns `undefined` when the instruction does not provide an account at the\n * requested index.\n */\nfunction _getInstructionAccountAddress(\n allAccounts: readonly string[],\n instruction: CompiledTransactionMessage['instructions'][number],\n accountIndex: number,\n): string | undefined {\n const messageAccountIndex = instruction.accountIndices?.[accountIndex];\n\n if (messageAccountIndex === undefined) {\n return undefined;\n }\n\n return allAccounts[messageAccountIndex];\n}\n\n/**\n * Extracts lamports from System Program account-creation instruction data.\n *\n * Supported instruction layouts:\n * - `CreateAccount` (`u32 discriminator = 0`): lamports at byte offset `4`.\n * - `CreateAccountWithSeed` (`u32 discriminator = 3`): lamports are located\n * after the variable-length seed field.\n *\n * Returns `0n` when data is missing, malformed, or not one of the supported\n * System Program create-account variants.\n */\nfunction _getSystemCreateAccountLamports(data: CompiledTransactionMessage['instructions'][number]['data']): bigint {\n if (!data || data.length < 12) {\n return 0n;\n }\n\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n const instructionDiscriminator = view.getUint32(0, true);\n\n if (instructionDiscriminator === 0 && data.length >= 12) {\n return view.getBigUint64(4, true);\n }\n\n if (instructionDiscriminator === 3 && data.length >= 44) {\n const seedLenOffset = 36;\n const seedLength = Number(view.getBigUint64(seedLenOffset, true));\n if (!Number.isSafeInteger(seedLength) || seedLength < 0) {\n return 0n;\n }\n\n const lamportsOffset = seedLenOffset + 8 + seedLength;\n if (lamportsOffset + 8 > data.length) {\n return 0n;\n }\n\n return new DataView(data.buffer, data.byteOffset + lamportsOffset, 8).getBigUint64(0, true);\n }\n\n return 0n;\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ const e=require(`../../../constants.cjs`),t=require(`../../../utils/evm-address.cjs`),n=require(`../_utils.cjs`);function r({supportedChains:r,supportedTokens:i}){return async()=>{let a=Array.from(r.entries()).filter(([,e])=>e.swapEnabled).map(([e])=>e),o={};for(let[r,s]of i.entries())try{o[r]=(await s).map(i=>{let o=a.includes(r)?[e.ServiceType.MARKR]:[];return n.isTokenAddressNative(i.address)?{decimals:i.decimals,destinations:{},name:i.name,symbol:i.symbol,swapProviders:o,type:e.TokenType.NATIVE}:{address:t.formatEvmAddress(i.address),decimals:i.decimals,destinations:{},name:i.name,symbol:i.symbol,swapProviders:o,type:e.TokenType.ERC20}})}catch{continue}return o}}exports.getAssetsFactory=r;
2
+ //# sourceMappingURL=get-assets.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-assets.cjs","names":["ServiceType","isTokenAddressNative","TokenType","formatEvmAddress"],"sources":["../../../../src/transfer-service/markr/_handlers/get-assets.ts"],"sourcesContent":["import { ServiceType, TokenType } from '../../../constants';\nimport type { ChainAssetMap, TransferableAsset } from '../../../types/asset';\nimport type { TransferService } from '../../../types/service';\nimport type { Mutable } from '../../../types/utility-types';\nimport { formatEvmAddress } from '../../../utils/evm-address';\nimport { isTokenAddressNative, type getSupportedTokens, type SupportedChainsMap } from '../_utils';\n\nexport interface GetAssetsFactoryConfig {\n supportedChains: SupportedChainsMap;\n supportedTokens: Awaited<ReturnType<typeof getSupportedTokens>>;\n}\n\nexport function getAssetsFactory({\n supportedChains,\n supportedTokens,\n}: GetAssetsFactoryConfig): TransferService['getAssets'] {\n return async () => {\n const swapEnabledChainIds = Array.from(supportedChains.entries())\n .filter(([, info]) => info.swapEnabled)\n .map(([chainId]) => chainId);\n const chainAssetMap: Mutable<ChainAssetMap> = {};\n\n for (const [caip2ChainId, tokenListPromise] of supportedTokens.entries()) {\n try {\n const tokenList = await tokenListPromise;\n\n chainAssetMap[caip2ChainId] = tokenList.map((token) => {\n const swapProviders: TransferableAsset['swapProviders'] = swapEnabledChainIds.includes(caip2ChainId)\n ? [ServiceType.MARKR]\n : [];\n\n if (isTokenAddressNative(token.address)) {\n return {\n decimals: token.decimals,\n destinations: {},\n name: token.name,\n symbol: token.symbol,\n swapProviders,\n type: TokenType.NATIVE,\n } satisfies TransferableAsset;\n } else {\n return {\n address: formatEvmAddress(token.address),\n decimals: token.decimals,\n destinations: {},\n name: token.name,\n symbol: token.symbol,\n swapProviders,\n type: TokenType.ERC20,\n } satisfies TransferableAsset;\n }\n });\n } catch {\n // Ignore token list fetch errors for individual chains.\n // TODO: Logger?\n continue;\n }\n }\n\n return chainAssetMap;\n };\n}\n"],"mappings":"iHAYA,SAAgB,EAAiB,CAC/B,kBACA,mBACuD,CACvD,OAAO,SAAY,CACjB,IAAM,EAAsB,MAAM,KAAK,EAAgB,SAAS,CAAC,CAC9D,QAAQ,EAAG,KAAU,EAAK,YAAY,CACtC,KAAK,CAAC,KAAa,EAAQ,CACxB,EAAwC,EAAE,CAEhD,IAAK,GAAM,CAAC,EAAc,KAAqB,EAAgB,SAAS,CACtE,GAAI,CAGF,EAAc,IAFI,MAAM,GAEgB,IAAK,GAAU,CACrD,IAAM,EAAoD,EAAoB,SAAS,EAAa,CAChG,CAACA,EAAAA,YAAY,MAAM,CACnB,EAAE,CAYJ,OAVEC,EAAAA,qBAAqB,EAAM,QAAQ,CAC9B,CACL,SAAU,EAAM,SAChB,aAAc,EAAE,CAChB,KAAM,EAAM,KACZ,OAAQ,EAAM,OACd,gBACA,KAAMC,EAAAA,UAAU,OACjB,CAEM,CACL,QAASC,EAAAA,iBAAiB,EAAM,QAAQ,CACxC,SAAU,EAAM,SAChB,aAAc,EAAE,CAChB,KAAM,EAAM,KACZ,OAAQ,EAAM,OACd,gBACA,KAAMD,EAAAA,UAAU,MACjB,EAEH,MACI,CAGN,SAIJ,OAAO"}
@@ -0,0 +1,2 @@
1
+ import{ServiceType as e,TokenType as t}from"../../../constants.js";import{formatEvmAddress as n}from"../../../utils/evm-address.js";import{isTokenAddressNative as r}from"../_utils.js";function i({supportedChains:i,supportedTokens:a}){return async()=>{let o=Array.from(i.entries()).filter(([,e])=>e.swapEnabled).map(([e])=>e),s={};for(let[i,c]of a.entries())try{s[i]=(await c).map(a=>{let s=o.includes(i)?[e.MARKR]:[];return r(a.address)?{decimals:a.decimals,destinations:{},name:a.name,symbol:a.symbol,swapProviders:s,type:t.NATIVE}:{address:n(a.address),decimals:a.decimals,destinations:{},name:a.name,symbol:a.symbol,swapProviders:s,type:t.ERC20}})}catch{continue}return s}}export{i as getAssetsFactory};
2
+ //# sourceMappingURL=get-assets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-assets.js","names":[],"sources":["../../../../src/transfer-service/markr/_handlers/get-assets.ts"],"sourcesContent":["import { ServiceType, TokenType } from '../../../constants';\nimport type { ChainAssetMap, TransferableAsset } from '../../../types/asset';\nimport type { TransferService } from '../../../types/service';\nimport type { Mutable } from '../../../types/utility-types';\nimport { formatEvmAddress } from '../../../utils/evm-address';\nimport { isTokenAddressNative, type getSupportedTokens, type SupportedChainsMap } from '../_utils';\n\nexport interface GetAssetsFactoryConfig {\n supportedChains: SupportedChainsMap;\n supportedTokens: Awaited<ReturnType<typeof getSupportedTokens>>;\n}\n\nexport function getAssetsFactory({\n supportedChains,\n supportedTokens,\n}: GetAssetsFactoryConfig): TransferService['getAssets'] {\n return async () => {\n const swapEnabledChainIds = Array.from(supportedChains.entries())\n .filter(([, info]) => info.swapEnabled)\n .map(([chainId]) => chainId);\n const chainAssetMap: Mutable<ChainAssetMap> = {};\n\n for (const [caip2ChainId, tokenListPromise] of supportedTokens.entries()) {\n try {\n const tokenList = await tokenListPromise;\n\n chainAssetMap[caip2ChainId] = tokenList.map((token) => {\n const swapProviders: TransferableAsset['swapProviders'] = swapEnabledChainIds.includes(caip2ChainId)\n ? [ServiceType.MARKR]\n : [];\n\n if (isTokenAddressNative(token.address)) {\n return {\n decimals: token.decimals,\n destinations: {},\n name: token.name,\n symbol: token.symbol,\n swapProviders,\n type: TokenType.NATIVE,\n } satisfies TransferableAsset;\n } else {\n return {\n address: formatEvmAddress(token.address),\n decimals: token.decimals,\n destinations: {},\n name: token.name,\n symbol: token.symbol,\n swapProviders,\n type: TokenType.ERC20,\n } satisfies TransferableAsset;\n }\n });\n } catch {\n // Ignore token list fetch errors for individual chains.\n // TODO: Logger?\n continue;\n }\n }\n\n return chainAssetMap;\n };\n}\n"],"mappings":"wLAYA,SAAgB,EAAiB,CAC/B,kBACA,mBACuD,CACvD,OAAO,SAAY,CACjB,IAAM,EAAsB,MAAM,KAAK,EAAgB,SAAS,CAAC,CAC9D,QAAQ,EAAG,KAAU,EAAK,YAAY,CACtC,KAAK,CAAC,KAAa,EAAQ,CACxB,EAAwC,EAAE,CAEhD,IAAK,GAAM,CAAC,EAAc,KAAqB,EAAgB,SAAS,CACtE,GAAI,CAGF,EAAc,IAFI,MAAM,GAEgB,IAAK,GAAU,CACrD,IAAM,EAAoD,EAAoB,SAAS,EAAa,CAChG,CAAC,EAAY,MAAM,CACnB,EAAE,CAYJ,OAVE,EAAqB,EAAM,QAAQ,CAC9B,CACL,SAAU,EAAM,SAChB,aAAc,EAAE,CAChB,KAAM,EAAM,KACZ,OAAQ,EAAM,OACd,gBACA,KAAM,EAAU,OACjB,CAEM,CACL,QAAS,EAAiB,EAAM,QAAQ,CACxC,SAAU,EAAM,SAChB,aAAc,EAAE,CAChB,KAAM,EAAM,KACZ,OAAQ,EAAM,OACd,gBACA,KAAM,EAAU,MACjB,EAEH,MACI,CAGN,SAIJ,OAAO"}
@@ -0,0 +1,2 @@
1
+ const e=require(`../../../constants.cjs`),t=require(`../_utils.cjs`);function n({getTargetChainAssets:n,supportedChains:r}){return async({sourceChainId:i,targetChainId:a})=>t.isRouteSupported(r,i,a)?(await n(a)).map(t=>({...t,bridgeProviders:[e.ServiceType.MARKR]})):[]}exports.getBridgeableAssetsFactory=n;
2
+ //# sourceMappingURL=get-bridgeable-assets.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-bridgeable-assets.cjs","names":["isRouteSupported","ServiceType"],"sources":["../../../../src/transfer-service/markr/_handlers/get-bridgeable-assets.ts"],"sourcesContent":["import { ServiceType } from '../../../constants';\nimport type { Asset, BridgeableUiAsset } from '../../../types/asset';\nimport type { GetBridgeableAssetsProps, TransferService } from '../../../types/service';\nimport type { Caip2ChainId } from '../../../types/caip';\nimport { isRouteSupported, type SupportedChainsMap } from '../_utils';\n\nexport function getBridgeableAssetsFactory({\n getTargetChainAssets,\n supportedChains,\n}: {\n getTargetChainAssets: (targetChainId: Caip2ChainId) => Promise<readonly Asset[]>;\n supportedChains: SupportedChainsMap;\n}): TransferService['getBridgeableAssets'] {\n return async ({ sourceChainId, targetChainId }: GetBridgeableAssetsProps): Promise<readonly BridgeableUiAsset[]> => {\n if (!isRouteSupported(supportedChains, sourceChainId, targetChainId)) return [];\n\n const assets = await getTargetChainAssets(targetChainId);\n return assets.map((asset) => ({ ...asset, bridgeProviders: [ServiceType.MARKR] as const }));\n };\n}\n"],"mappings":"qEAMA,SAAgB,EAA2B,CACzC,uBACA,mBAIyC,CACzC,OAAO,MAAO,CAAE,gBAAe,mBACxBA,EAAAA,iBAAiB,EAAiB,EAAe,EAAc,EAErD,MAAM,EAAqB,EAAc,EAC1C,IAAK,IAAW,CAAE,GAAG,EAAO,gBAAiB,CAACC,EAAAA,YAAY,MAAM,CAAW,EAAE,CAHd,EAAE"}
@@ -0,0 +1,2 @@
1
+ import{ServiceType as e}from"../../../constants.js";import{isRouteSupported as t}from"../_utils.js";function n({getTargetChainAssets:n,supportedChains:r}){return async({sourceChainId:i,targetChainId:a})=>t(r,i,a)?(await n(a)).map(t=>({...t,bridgeProviders:[e.MARKR]})):[]}export{n as getBridgeableAssetsFactory};
2
+ //# sourceMappingURL=get-bridgeable-assets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-bridgeable-assets.js","names":[],"sources":["../../../../src/transfer-service/markr/_handlers/get-bridgeable-assets.ts"],"sourcesContent":["import { ServiceType } from '../../../constants';\nimport type { Asset, BridgeableUiAsset } from '../../../types/asset';\nimport type { GetBridgeableAssetsProps, TransferService } from '../../../types/service';\nimport type { Caip2ChainId } from '../../../types/caip';\nimport { isRouteSupported, type SupportedChainsMap } from '../_utils';\n\nexport function getBridgeableAssetsFactory({\n getTargetChainAssets,\n supportedChains,\n}: {\n getTargetChainAssets: (targetChainId: Caip2ChainId) => Promise<readonly Asset[]>;\n supportedChains: SupportedChainsMap;\n}): TransferService['getBridgeableAssets'] {\n return async ({ sourceChainId, targetChainId }: GetBridgeableAssetsProps): Promise<readonly BridgeableUiAsset[]> => {\n if (!isRouteSupported(supportedChains, sourceChainId, targetChainId)) return [];\n\n const assets = await getTargetChainAssets(targetChainId);\n return assets.map((asset) => ({ ...asset, bridgeProviders: [ServiceType.MARKR] as const }));\n };\n}\n"],"mappings":"oGAMA,SAAgB,EAA2B,CACzC,uBACA,mBAIyC,CACzC,OAAO,MAAO,CAAE,gBAAe,mBACxB,EAAiB,EAAiB,EAAe,EAAc,EAErD,MAAM,EAAqB,EAAc,EAC1C,IAAK,IAAW,CAAE,GAAG,EAAO,gBAAiB,CAAC,EAAY,MAAM,CAAW,EAAE,CAHd,EAAE"}
@@ -0,0 +1,2 @@
1
+ const e=require(`../../../constants.cjs`),t=require(`../../../errors.cjs`),n=require(`../../../_utils/chain.cjs`),r=1n,i=10000n;function a({analyzeSupport:e,partnerFeeBps:n}){return async({sourceAsset:r,sourceChainId:i,targetAsset:a,targetChainId:o})=>{if(!Number.isInteger(n)||n<0)throw new t.SdkError(t.ErrorReason.UNKNOWN,t.ErrorCode.INVALID_PARAMS,{details:`Invalid partner fee basis points: ${n}`});if(!e({sourceAsset:r,sourceChainId:i,targetAsset:a,targetChainId:o}))throw new t.SdkError(t.ErrorReason.UNKNOWN,t.ErrorCode.INVALID_PARAMS,{details:`Transfer not supported by Markr. Unable to get minimum transfer amount.`});c(r.decimals);let l=u(n),p=f({sourceAssetType:r.type,sourceChainId:i,targetChainId:o,targetAssetType:a.type});return s(l,d(r.decimals,p))}}function o(e,t){return(e+t-1n)/t}function s(e,t){return e>t?e:t}function c(e){if(!Number.isInteger(e)||e<0)throw new t.SdkError(t.ErrorReason.UNKNOWN,t.ErrorCode.INVALID_PARAMS,{details:`Invalid source asset decimals: ${e}`})}function l(e,t,n){return o(10n**BigInt(e)*t,n)}function u(e){return o((e===0?r:o(r*i,BigInt(e)))*(i+500n),i)}function d(e,t){return l(e,t,100000n)}function f({sourceAssetType:t,sourceChainId:r,targetChainId:i,targetAssetType:a}){return t===e.TokenType.NATIVE&&n.isCaip2AvalancheChainId(r)&&n.isSolanaNamespace(i)&&a===e.TokenType.NATIVE?1000n:10n}exports.getMinimumTransferAmountFactory=a;
2
+ //# sourceMappingURL=get-minimum-transfer-amount.cjs.map