@avalabs/fusion-sdk 0.0.0-avalanche-evm-bugs-20260313162813

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 (418) 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 +19 -0
  26. package/dist/mod.d.ts +19 -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/_type-guards.cjs +2 -0
  293. package/dist/transfer-service/markr/_type-guards.cjs.map +1 -0
  294. package/dist/transfer-service/markr/_type-guards.js +2 -0
  295. package/dist/transfer-service/markr/_type-guards.js.map +1 -0
  296. package/dist/transfer-service/markr/_utils.cjs +2 -0
  297. package/dist/transfer-service/markr/_utils.cjs.map +1 -0
  298. package/dist/transfer-service/markr/_utils.js +2 -0
  299. package/dist/transfer-service/markr/_utils.js.map +1 -0
  300. package/dist/transfer-service/markr/constants.cjs +2 -0
  301. package/dist/transfer-service/markr/constants.cjs.map +1 -0
  302. package/dist/transfer-service/markr/constants.js +2 -0
  303. package/dist/transfer-service/markr/constants.js.map +1 -0
  304. package/dist/transfer-service/markr/markr-service.cjs +2 -0
  305. package/dist/transfer-service/markr/markr-service.cjs.map +1 -0
  306. package/dist/transfer-service/markr/markr-service.js +2 -0
  307. package/dist/transfer-service/markr/markr-service.js.map +1 -0
  308. package/dist/transfer-service/service-schemas.cjs +2 -0
  309. package/dist/transfer-service/service-schemas.cjs.map +1 -0
  310. package/dist/transfer-service/service-schemas.js +2 -0
  311. package/dist/transfer-service/service-schemas.js.map +1 -0
  312. package/dist/transfer-service/wrap-unwrap/_handlers/analyze-support.cjs +2 -0
  313. package/dist/transfer-service/wrap-unwrap/_handlers/analyze-support.cjs.map +1 -0
  314. package/dist/transfer-service/wrap-unwrap/_handlers/analyze-support.js +2 -0
  315. package/dist/transfer-service/wrap-unwrap/_handlers/analyze-support.js.map +1 -0
  316. package/dist/transfer-service/wrap-unwrap/_handlers/estimate-native-fee.cjs +2 -0
  317. package/dist/transfer-service/wrap-unwrap/_handlers/estimate-native-fee.cjs.map +1 -0
  318. package/dist/transfer-service/wrap-unwrap/_handlers/estimate-native-fee.js +2 -0
  319. package/dist/transfer-service/wrap-unwrap/_handlers/estimate-native-fee.js.map +1 -0
  320. package/dist/transfer-service/wrap-unwrap/_handlers/get-assets.cjs +2 -0
  321. package/dist/transfer-service/wrap-unwrap/_handlers/get-assets.cjs.map +1 -0
  322. package/dist/transfer-service/wrap-unwrap/_handlers/get-assets.js +2 -0
  323. package/dist/transfer-service/wrap-unwrap/_handlers/get-assets.js.map +1 -0
  324. package/dist/transfer-service/wrap-unwrap/_handlers/get-bridgeable-assets.cjs +2 -0
  325. package/dist/transfer-service/wrap-unwrap/_handlers/get-bridgeable-assets.cjs.map +1 -0
  326. package/dist/transfer-service/wrap-unwrap/_handlers/get-bridgeable-assets.js +2 -0
  327. package/dist/transfer-service/wrap-unwrap/_handlers/get-bridgeable-assets.js.map +1 -0
  328. package/dist/transfer-service/wrap-unwrap/_handlers/get-minimum-transfer-amount.cjs +2 -0
  329. package/dist/transfer-service/wrap-unwrap/_handlers/get-minimum-transfer-amount.cjs.map +1 -0
  330. package/dist/transfer-service/wrap-unwrap/_handlers/get-minimum-transfer-amount.js +2 -0
  331. package/dist/transfer-service/wrap-unwrap/_handlers/get-minimum-transfer-amount.js.map +1 -0
  332. package/dist/transfer-service/wrap-unwrap/_handlers/stream-quotes.cjs +2 -0
  333. package/dist/transfer-service/wrap-unwrap/_handlers/stream-quotes.cjs.map +1 -0
  334. package/dist/transfer-service/wrap-unwrap/_handlers/stream-quotes.js +2 -0
  335. package/dist/transfer-service/wrap-unwrap/_handlers/stream-quotes.js.map +1 -0
  336. package/dist/transfer-service/wrap-unwrap/_handlers/track-transfer.cjs +2 -0
  337. package/dist/transfer-service/wrap-unwrap/_handlers/track-transfer.cjs.map +1 -0
  338. package/dist/transfer-service/wrap-unwrap/_handlers/track-transfer.js +2 -0
  339. package/dist/transfer-service/wrap-unwrap/_handlers/track-transfer.js.map +1 -0
  340. package/dist/transfer-service/wrap-unwrap/_handlers/transfer-asset.cjs +2 -0
  341. package/dist/transfer-service/wrap-unwrap/_handlers/transfer-asset.cjs.map +1 -0
  342. package/dist/transfer-service/wrap-unwrap/_handlers/transfer-asset.js +2 -0
  343. package/dist/transfer-service/wrap-unwrap/_handlers/transfer-asset.js.map +1 -0
  344. package/dist/transfer-service/wrap-unwrap/_utils.cjs +2 -0
  345. package/dist/transfer-service/wrap-unwrap/_utils.cjs.map +1 -0
  346. package/dist/transfer-service/wrap-unwrap/_utils.js +2 -0
  347. package/dist/transfer-service/wrap-unwrap/_utils.js.map +1 -0
  348. package/dist/transfer-service/wrap-unwrap/constants.cjs +2 -0
  349. package/dist/transfer-service/wrap-unwrap/constants.cjs.map +1 -0
  350. package/dist/transfer-service/wrap-unwrap/constants.js +2 -0
  351. package/dist/transfer-service/wrap-unwrap/constants.js.map +1 -0
  352. package/dist/transfer-service/wrap-unwrap/wrap-unwrap-service.cjs +2 -0
  353. package/dist/transfer-service/wrap-unwrap/wrap-unwrap-service.cjs.map +1 -0
  354. package/dist/transfer-service/wrap-unwrap/wrap-unwrap-service.js +2 -0
  355. package/dist/transfer-service/wrap-unwrap/wrap-unwrap-service.js.map +1 -0
  356. package/dist/type-guards.cjs +2 -0
  357. package/dist/type-guards.cjs.map +1 -0
  358. package/dist/type-guards.d.cts +16 -0
  359. package/dist/type-guards.d.ts +16 -0
  360. package/dist/type-guards.js +2 -0
  361. package/dist/type-guards.js.map +1 -0
  362. package/dist/types/asset.d.cts +66 -0
  363. package/dist/types/asset.d.ts +66 -0
  364. package/dist/types/bitcoin.d.cts +66 -0
  365. package/dist/types/bitcoin.d.ts +66 -0
  366. package/dist/types/caip.d.cts +30 -0
  367. package/dist/types/caip.d.ts +30 -0
  368. package/dist/types/chain.d.cts +17 -0
  369. package/dist/types/chain.d.ts +17 -0
  370. package/dist/types/fee.d.cts +13 -0
  371. package/dist/types/fee.d.ts +13 -0
  372. package/dist/types/quote.d.cts +140 -0
  373. package/dist/types/quote.d.ts +140 -0
  374. package/dist/types/service.d.cts +243 -0
  375. package/dist/types/service.d.ts +243 -0
  376. package/dist/types/signer.d.cts +52 -0
  377. package/dist/types/signer.d.ts +52 -0
  378. package/dist/types/transfer-manager.d.cts +119 -0
  379. package/dist/types/transfer-manager.d.ts +119 -0
  380. package/dist/types/transfer.d.cts +126 -0
  381. package/dist/types/transfer.d.ts +126 -0
  382. package/dist/types/utility-types.d.cts +21 -0
  383. package/dist/types/utility-types.d.ts +21 -0
  384. package/dist/utils/asset-id.cjs +2 -0
  385. package/dist/utils/asset-id.cjs.map +1 -0
  386. package/dist/utils/asset-id.js +2 -0
  387. package/dist/utils/asset-id.js.map +1 -0
  388. package/dist/utils/bitcoin-address.cjs +2 -0
  389. package/dist/utils/bitcoin-address.cjs.map +1 -0
  390. package/dist/utils/bitcoin-address.js +2 -0
  391. package/dist/utils/bitcoin-address.js.map +1 -0
  392. package/dist/utils/caip.cjs +2 -0
  393. package/dist/utils/caip.cjs.map +1 -0
  394. package/dist/utils/caip.d.cts +49 -0
  395. package/dist/utils/caip.d.ts +49 -0
  396. package/dist/utils/caip.js +2 -0
  397. package/dist/utils/caip.js.map +1 -0
  398. package/dist/utils/evm-address.cjs +2 -0
  399. package/dist/utils/evm-address.cjs.map +1 -0
  400. package/dist/utils/evm-address.js +2 -0
  401. package/dist/utils/evm-address.js.map +1 -0
  402. package/dist/utils/quote-fees.cjs +2 -0
  403. package/dist/utils/quote-fees.cjs.map +1 -0
  404. package/dist/utils/quote-fees.js +2 -0
  405. package/dist/utils/quote-fees.js.map +1 -0
  406. package/dist/utils/sol-address.cjs +2 -0
  407. package/dist/utils/sol-address.cjs.map +1 -0
  408. package/dist/utils/sol-address.js +2 -0
  409. package/dist/utils/sol-address.js.map +1 -0
  410. package/dist/utils/solana-transaction.d.cts +15 -0
  411. package/dist/utils/solana-transaction.d.ts +17 -0
  412. package/dist/utils/transfer-utils.cjs +2 -0
  413. package/dist/utils/transfer-utils.cjs.map +1 -0
  414. package/dist/utils/transfer-utils.d.cts +8 -0
  415. package/dist/utils/transfer-utils.d.ts +8 -0
  416. package/dist/utils/transfer-utils.js +2 -0
  417. package/dist/utils/transfer-utils.js.map +1 -0
  418. package/package.json +63 -0
@@ -0,0 +1,2 @@
1
+ require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants.cjs`),t=require(`../../errors.cjs`),n=require(`../../utils/caip.cjs`),r=require(`../../_utils/chain.cjs`),i=require(`../../utils/evm-address.cjs`),a=require(`../../_utils/math.cjs`),o=require(`./_api.cjs`),s=require(`../../utils/sol-address.cjs`);let c=require(`viem`);function l(e,t,n){let r=e.get(t),i=e.get(n);return!r||!i?!1:t===n?r.swapEnabled:r.crossChainSwapEnabled&&r.crossChainTargetChainIds.has(n)}async function u(e,r=!1){let i=new Map;try{let t=(await o.markrGetInfoChains(e)).filter(e=>e.chainType===`evm`||e.chainType===`svm`);for(let e of t){let t=typeof e.chainId==`number`?n.eip155ChainIdToCaip2(e.chainId):e.chainId,a=e.enabled_services.includes(`cross-chain-quote`)&&e.enabled_services.includes(`cross-chain-swap`),o=e.enabled_services.includes(`quote`)&&e.enabled_services.includes(`swap`),s=new Set;for(let r of e.lanes){let e=typeof r==`number`?n.eip155ChainIdToCaip2(r):r;e!==t&&s.add(e)}let c=r?!1:a,l=c?s:new Set;!o&&l.size===0||i.set(t,{chainId:e.chainId,crossChainSwapEnabled:c,crossChainTargetChainIds:l,swapEnabled:o,tokenList:e.enabled_services.includes(`token-list`)})}}catch(e){throw new t.SdkError(t.ErrorReason.UNKNOWN,t.ErrorCode.INITIALIZATION_FAILED,{cause:e,details:`Failed to fetch supported chains from Markr API.`})}return i}async function d(e,t){let n=new Map;for(let[r,i]of t.entries())if(typeof i.chainId==`number`&&i.tokenList&&(i.crossChainSwapEnabled||i.swapEnabled))try{let t=o.markrGetTokenList(e,i.chainId);n.set(r,t)}catch{}return n}function f(t){return t===e.ERC_ZERO_ADDRESS||t===e.SOL_MINT_ADDRESS}function p(t,n){return t.type===e.TokenType.NATIVE?r.isSolanaNamespace(n)?e.SOL_MINT_ADDRESS:e.ERC_ZERO_ADDRESS:t.address}function m({amountOut:e,assetOut:t,slippageBps:n}){let r=a.calculateMinimumAmountOut({amountOut:e,assetOut:t,slippageBps:n});return e>0n&&r===0n?1n:r}function h(t,n,r){let i=t.amountOut*BigInt(r)/10000n,a=t.amountOut-i,o=[..._(t.fees),{type:`partner`,name:`Core Fee`,amount:i,chainId:n.targetChain.chainId,token:v(n.targetAsset)}];return{aggregator:{id:t.aggregator.id,logoUrl:t.aggregator.logo_url,name:t.aggregator.name},amountIn:t.amountIn,amountOut:a,assetIn:n.sourceAsset,assetOut:n.targetAsset,expiresAt:t.expiredAt,fees:o,fromAddress:n.fromAddress,gasEstimate:t.gasEstimate,id:t.uuid,partnerFeeBps:r,serviceType:e.ServiceType.MARKR,slippageBps:n.slippageBps??t.recommendedSlippage,sourceChain:n.sourceChain,targetChain:n.targetChain,toAddress:n.toAddress}}async function g(e){try{return(await o.markrGetPartnerInfo(e)).fee}catch(e){throw new t.SdkError(t.ErrorReason.UNKNOWN,t.ErrorCode.INITIALIZATION_FAILED,{cause:e,details:`Failed to fetch partner info from Markr API.`})}}function _(t){if(!t)return[];let r=[];for(let a of t){let t=typeof a.token.chainId==`number`?n.eip155ChainIdToCaip2(a.token.chainId):a.token.chainId,o;f(a.token.address)?o={type:e.TokenType.NATIVE}:i.isEvmAddress(a.token.address)?o={type:e.TokenType.ERC20,address:a.token.address}:s.isSolAddress(a.token.address)&&(o={type:e.TokenType.SPL,address:a.token.address}),o&&r.push({type:a.type,name:a.name,amount:a.amount,chainId:t,token:o})}return r}function v(t){return t.type===e.TokenType.NATIVE?{type:e.TokenType.NATIVE}:t.type===e.TokenType.SPL?{type:e.TokenType.SPL,address:t.address}:{type:e.TokenType.ERC20,address:t.address}}async function y(e){return e?(await Promise.resolve().then(()=>require(`./_abis/cross-chain-swap-wrapper-abi.cjs`))).MARKR_CROSS_CHAIN_SWAP_WRAPPER_ABI:(await Promise.resolve().then(()=>require(`./_abis/swap-wrapper-abi.cjs`))).MARKR_SWAP_WRAPPER_ABI}function b(e){if(e instanceof c.BaseError){let t=e.data;if((0,c.isHex)(t))return t;let n;if(e.walk(e=>{let t=e.data;return!n&&(0,c.isHex)(t)&&(n=t),!1}),n)return n;let r=e.cause?.data;if((0,c.isHex)(r))return r}if(!e||typeof e!=`object`)return;let t=e;if((0,c.isHex)(t.data))return t.data;if((0,c.isHex)(t.error?.data))return t.error.data;if((0,c.isHex)(t.cause?.data))return t.cause.data;if((0,c.isHex)(t.response?.data))return t.response.data;if((0,c.isHex)(t.body?.error?.data))return t.body.error.data}function x(e,t){let n=b(t);if(!n)return null;try{let t=(0,c.decodeErrorResult)({abi:e,data:n}),r=t.args.length>0?`(${t.args.map(String).join(`, `)})`:`()`;return`${t.errorName}${r}`}catch{let t=n.slice(0,10).toLowerCase();for(let n of e)if(n.type===`error`&&(0,c.toFunctionSelector)(`${n.name}(${n.inputs.map(e=>e.type).join(`,`)})`).toLowerCase()===t)return`${n.name}()`}return null}exports.assetToAddressString=p,exports.calculateMarkrMinimumAmountOut=m,exports.decodeMarkrRevertError=x,exports.getMarkrSwapWrapperAbi=y,exports.getPartnerFeeBps=g,exports.getSupportedChains=u,exports.getSupportedTokens=d,exports.isRouteSupported=l,exports.isTokenAddressNative=f,exports.quoteFromMarkrQuoteResponseData=h;
2
+ //# sourceMappingURL=_utils.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_utils.cjs","names":["markrGetInfoChains","eip155ChainIdToCaip2","SdkError","ErrorReason","ErrorCode","markrGetTokenList","ERC_ZERO_ADDRESS","SOL_MINT_ADDRESS","TokenType","isSolanaNamespace","calculateMinimumAmountOut","ServiceType","markrGetPartnerInfo","isEvmAddress","isSolAddress","BaseError"],"sources":["../../../src/transfer-service/markr/_utils.ts"],"sourcesContent":["import { ErrorCode, ErrorReason, SdkError } from '../../errors';\nimport { BaseError, decodeErrorResult, type Hex, isHex, toFunctionSelector } from 'viem';\nimport {\n type QuoteResponseData,\n type SupportedChainsResponseItemEvm,\n type SupportedChainsResponseItemSvm,\n type TokenListResponse,\n} from './_schema';\nimport { ERC_ZERO_ADDRESS, SOL_MINT_ADDRESS, ServiceType, TokenType } from '../../constants';\nimport { isSolanaNamespace } from '../../_utils/chain';\nimport { calculateMinimumAmountOut } from '../../_utils/math';\nimport { eip155ChainIdToCaip2 } from '../../utils/caip';\nimport type { Asset } from '../../types/asset';\nimport type { Caip2ChainId } from '../../types/caip';\nimport type { Quote, QuoteFee, QuoteFees, QuoteFeeToken, QuoterProps } from '../../types/quote';\nimport { markrGetInfoChains, markrGetPartnerInfo, markrGetTokenList, type ApiOptions } from './_api';\nimport { isEvmAddress } from '../../utils/evm-address';\nimport { isSolAddress } from '../../utils/sol-address';\n\nexport type SupportedChainsMap = Map<\n Caip2ChainId,\n {\n /** `number` for EVM, `Caip2ChainId` for SVM */\n chainId: number | Caip2ChainId;\n crossChainSwapEnabled: boolean;\n crossChainTargetChainIds: ReadonlySet<Caip2ChainId>;\n swapEnabled: boolean;\n tokenList: boolean;\n }\n>;\n\n/**\n * Checks whether the given source → target chain route is supported by Markr.\n */\nexport function isRouteSupported(\n supportedChains: SupportedChainsMap,\n sourceChainId: Caip2ChainId,\n targetChainId: Caip2ChainId,\n): boolean {\n const sourceChain = supportedChains.get(sourceChainId);\n const targetChain = supportedChains.get(targetChainId);\n\n if (!sourceChain || !targetChain) return false;\n\n if (sourceChainId === targetChainId) {\n return sourceChain.swapEnabled;\n }\n\n return sourceChain.crossChainSwapEnabled && sourceChain.crossChainTargetChainIds.has(targetChainId);\n}\n\nexport async function getSupportedChains(\n apiOptions: ApiOptions,\n disableCrossChainSwaps = false,\n): Promise<SupportedChainsMap> {\n const supportedChains: SupportedChainsMap = new Map();\n\n try {\n const chains = await markrGetInfoChains(apiOptions);\n const filteredSupportedChains = chains.filter(\n (chain): chain is SupportedChainsResponseItemEvm | SupportedChainsResponseItemSvm => {\n // Only include chains types that we support in the SDK (EVM and Solana for now).\n return chain.chainType === 'evm' || chain.chainType === 'svm';\n },\n );\n\n for (const chain of filteredSupportedChains) {\n const key: Caip2ChainId = typeof chain.chainId === 'number' ? eip155ChainIdToCaip2(chain.chainId) : chain.chainId;\n\n const isCrossChainSwapEnabled =\n chain.enabled_services.includes('cross-chain-quote') && chain.enabled_services.includes('cross-chain-swap');\n const isSwapEnabled = chain.enabled_services.includes('quote') && chain.enabled_services.includes('swap');\n const normalizedLaneChainIds = new Set<Caip2ChainId>();\n\n for (const lane of chain.lanes) {\n const laneChainId = typeof lane === 'number' ? eip155ChainIdToCaip2(lane) : lane;\n\n if (laneChainId !== key) {\n normalizedLaneChainIds.add(laneChainId);\n }\n }\n\n const crossChainSwapEnabled = disableCrossChainSwaps ? false : isCrossChainSwapEnabled;\n const crossChainTargetChainIds = crossChainSwapEnabled ? normalizedLaneChainIds : new Set<Caip2ChainId>();\n\n if (!isSwapEnabled && crossChainTargetChainIds.size === 0) {\n continue;\n }\n\n supportedChains.set(key, {\n chainId: chain.chainId,\n crossChainSwapEnabled,\n crossChainTargetChainIds,\n swapEnabled: isSwapEnabled,\n tokenList: chain.enabled_services.includes('token-list'),\n });\n }\n } catch (error) {\n throw new SdkError(ErrorReason.UNKNOWN, ErrorCode.INITIALIZATION_FAILED, {\n cause: error,\n details: 'Failed to fetch supported chains from Markr API.',\n });\n }\n\n return supportedChains;\n}\n\nexport async function getSupportedTokens(\n apiOptions: ApiOptions,\n supportedChains: SupportedChainsMap,\n): Promise<Map<Caip2ChainId, Promise<TokenListResponse>>> {\n // Parallel fetch token lists for all supported chains.\n const supportedTokens: Map<Caip2ChainId, Promise<TokenListResponse>> = new Map();\n\n for (const [caip2ChainId, chainInfo] of supportedChains.entries()) {\n // Only fetch token list for EVM chains that support swaps.\n if (\n typeof chainInfo.chainId === 'number' &&\n chainInfo.tokenList &&\n (chainInfo.crossChainSwapEnabled || chainInfo.swapEnabled)\n ) {\n try {\n const tokenListPromise = markrGetTokenList(apiOptions, chainInfo.chainId);\n supportedTokens.set(caip2ChainId, tokenListPromise);\n } catch {\n // Ignore errors for individual token list fetches.\n // TODO: Logger?\n }\n }\n }\n\n return supportedTokens;\n}\n\n/**\n * Determine if the provided token address represents the native token for its chain.\n *\n * Markr represents EVM native tokens as the zero address and Solana native SOL\n * as the wrapped SOL mint address.\n */\nexport function isTokenAddressNative(address: string): boolean {\n return address === ERC_ZERO_ADDRESS || address === SOL_MINT_ADDRESS;\n}\n\n/**\n * Convert an `Asset` to the address string expected by the Markr API.\n *\n * For NATIVE assets the representation depends on the chain:\n * - EVM chains: `0x0000...0000` (ERC zero address)\n * - Solana chains: `So11111111111111111111111111111111111111112` (wrapped SOL mint)\n *\n * @param asset The asset to convert.\n * @param chainId CAIP-2 chain ID used to disambiguate NATIVE assets across chain types.\n */\nexport function assetToAddressString(asset: Asset, chainId: Caip2ChainId): string {\n if (asset.type === TokenType.NATIVE) {\n if (isSolanaNamespace(chainId)) {\n return SOL_MINT_ADDRESS;\n }\n\n return ERC_ZERO_ADDRESS;\n }\n\n return asset.address;\n}\n\n/**\n * Markr rejects `minAmountOut=0` for non-zero quotes.\n *\n * For very small quotes, integer truncation after slippage can produce `0`.\n * Clamp to `1` in that edge case to satisfy Markr API validation while\n * preserving normal slippage behavior for larger quotes.\n */\nexport function calculateMarkrMinimumAmountOut({\n amountOut,\n assetOut,\n slippageBps,\n}: Pick<Quote, 'amountOut' | 'assetOut' | 'slippageBps'>): bigint {\n const minAmountOut = calculateMinimumAmountOut({ amountOut, assetOut, slippageBps });\n\n if (amountOut > 0n && minAmountOut === 0n) {\n return 1n;\n }\n\n return minAmountOut;\n}\n\nexport function quoteFromMarkrQuoteResponseData(\n data: QuoteResponseData,\n quoterProps: QuoterProps,\n partnerFeeBps: number,\n): Quote {\n const partnerFee: bigint = (data.amountOut * BigInt(partnerFeeBps)) / 10_000n;\n const amountOutAfterFees: bigint = data.amountOut - partnerFee;\n\n const fees: QuoteFees = [\n ...mapMarkrQuoteResponseDataFeesToQuoteFees(data.fees),\n // Add the partner fee as a QuoteFee component for Markr quotes.\n {\n type: 'partner',\n name: 'Core Fee',\n amount: partnerFee,\n chainId: quoterProps.targetChain.chainId,\n token: assetToFeeToken(quoterProps.targetAsset),\n },\n ];\n\n return {\n aggregator: {\n id: data.aggregator.id,\n logoUrl: data.aggregator.logo_url,\n name: data.aggregator.name,\n },\n amountIn: data.amountIn,\n amountOut: amountOutAfterFees,\n assetIn: quoterProps.sourceAsset,\n assetOut: quoterProps.targetAsset,\n expiresAt: data.expiredAt, // Markr returns `expiredAt` as Unix time in seconds; use as-is.\n fees,\n fromAddress: quoterProps.fromAddress,\n /**\n * This gasEstimate is rough or may be missing.\n * Consumers should use TransferManager.estimateGas for a more accurate estimate.\n */\n gasEstimate: data.gasEstimate,\n id: data.uuid,\n partnerFeeBps,\n serviceType: ServiceType.MARKR,\n slippageBps: quoterProps.slippageBps ?? data.recommendedSlippage,\n sourceChain: quoterProps.sourceChain,\n targetChain: quoterProps.targetChain,\n toAddress: quoterProps.toAddress,\n } satisfies Quote;\n}\n\nexport async function getPartnerFeeBps(apiOptions: ApiOptions): Promise<number> {\n try {\n const partnerInfo = await markrGetPartnerInfo(apiOptions);\n return partnerInfo.fee;\n } catch (error) {\n throw new SdkError(ErrorReason.UNKNOWN, ErrorCode.INITIALIZATION_FAILED, {\n cause: error,\n details: 'Failed to fetch partner info from Markr API.',\n });\n }\n}\n\nexport function mapMarkrQuoteResponseDataFeesToQuoteFees(markrFees: QuoteResponseData['fees']): QuoteFees {\n if (!markrFees) {\n return [];\n }\n\n const fees: QuoteFee[] = [];\n\n for (const fee of markrFees) {\n const chainId = typeof fee.token.chainId === 'number' ? eip155ChainIdToCaip2(fee.token.chainId) : fee.token.chainId;\n\n let token: QuoteFeeToken | undefined;\n\n if (isTokenAddressNative(fee.token.address)) {\n token = { type: TokenType.NATIVE };\n } else if (isEvmAddress(fee.token.address)) {\n token = { type: TokenType.ERC20, address: fee.token.address };\n } else if (isSolAddress(fee.token.address)) {\n token = { type: TokenType.SPL, address: fee.token.address };\n }\n\n if (!token) {\n // Skip fee if we can't determine token type.\n continue;\n }\n\n fees.push({\n type: fee.type,\n name: fee.name,\n amount: fee.amount,\n chainId,\n token,\n });\n }\n\n return fees;\n}\n\nfunction assetToFeeToken(asset: Asset): QuoteFeeToken {\n if (asset.type === TokenType.NATIVE) {\n return { type: TokenType.NATIVE };\n }\n\n if (asset.type === TokenType.SPL) {\n return { type: TokenType.SPL, address: asset.address };\n }\n\n return { type: TokenType.ERC20, address: asset.address };\n}\n\nexport type MarkrRouterAbi =\n | (typeof import('./_abis/swap-wrapper-abi'))['MARKR_SWAP_WRAPPER_ABI']\n | (typeof import('./_abis/cross-chain-swap-wrapper-abi'))['MARKR_CROSS_CHAIN_SWAP_WRAPPER_ABI'];\n\nexport async function getMarkrSwapWrapperAbi(crossChain: boolean): Promise<MarkrRouterAbi> {\n if (crossChain) {\n return (await import('./_abis/cross-chain-swap-wrapper-abi')).MARKR_CROSS_CHAIN_SWAP_WRAPPER_ABI;\n }\n\n return (await import('./_abis/swap-wrapper-abi')).MARKR_SWAP_WRAPPER_ABI;\n}\n\nexport function extractHexDataFromError(error: unknown): Hex | undefined {\n if (error instanceof BaseError) {\n const directData = (error as { data?: unknown }).data;\n if (isHex(directData)) {\n return directData;\n }\n\n let walkedData: Hex | undefined;\n error.walk((walkedError) => {\n const nestedData = (walkedError as { data?: unknown }).data;\n if (!walkedData && isHex(nestedData)) {\n walkedData = nestedData;\n }\n return false;\n });\n\n if (walkedData) {\n return walkedData;\n }\n\n const causeData = (error as { cause?: { data?: unknown } }).cause?.data;\n if (isHex(causeData)) {\n return causeData;\n }\n }\n\n if (!error || typeof error !== 'object') {\n return undefined;\n }\n\n const genericError = error as {\n data?: unknown;\n error?: { data?: unknown };\n cause?: { data?: unknown };\n response?: { data?: unknown };\n body?: { error?: { data?: unknown } };\n };\n\n if (isHex(genericError.data)) {\n return genericError.data;\n }\n\n if (isHex(genericError.error?.data)) {\n return genericError.error.data;\n }\n\n if (isHex(genericError.cause?.data)) {\n return genericError.cause.data;\n }\n\n if (isHex(genericError.response?.data)) {\n return genericError.response.data;\n }\n\n if (isHex(genericError.body?.error?.data)) {\n return genericError.body.error.data;\n }\n\n return undefined;\n}\n\nexport function decodeMarkrRevertError(abi: MarkrRouterAbi, error: unknown): string | null {\n const revertData = extractHexDataFromError(error);\n\n if (!revertData) {\n return null;\n }\n\n try {\n const decoded = decodeErrorResult({ abi, data: revertData });\n const decodedArgs = decoded.args.length > 0 ? `(${decoded.args.map(String).join(', ')})` : '()';\n\n return `${decoded.errorName}${decodedArgs}`;\n } catch {\n const selector = revertData.slice(0, 10).toLowerCase();\n\n for (const abiItem of abi) {\n if (abiItem.type !== 'error') {\n continue;\n }\n\n const signature = `${abiItem.name}(${abiItem.inputs.map((input) => input.type).join(',')})`;\n if (toFunctionSelector(signature).toLowerCase() === selector) {\n return `${abiItem.name}()`;\n }\n }\n }\n\n return null;\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{ERC_ZERO_ADDRESS as e,SOL_MINT_ADDRESS as t,ServiceType as n,TokenType as r}from"../../constants.js";import{ErrorCode as i,ErrorReason as a,SdkError as o}from"../../errors.js";import{eip155ChainIdToCaip2 as s}from"../../utils/caip.js";import{isSolanaNamespace as c}from"../../_utils/chain.js";import{isEvmAddress as l}from"../../utils/evm-address.js";import{calculateMinimumAmountOut as u}from"../../_utils/math.js";import{markrGetInfoChains as d,markrGetPartnerInfo as f,markrGetTokenList as p}from"./_api.js";import{isSolAddress as m}from"../../utils/sol-address.js";import{BaseError as h,decodeErrorResult as g,isHex as _,toFunctionSelector as v}from"viem";function y(e,t,n){let r=e.get(t),i=e.get(n);return!r||!i?!1:t===n?r.swapEnabled:r.crossChainSwapEnabled&&r.crossChainTargetChainIds.has(n)}async function b(e,t=!1){let n=new Map;try{let r=(await d(e)).filter(e=>e.chainType===`evm`||e.chainType===`svm`);for(let e of r){let r=typeof e.chainId==`number`?s(e.chainId):e.chainId,i=e.enabled_services.includes(`cross-chain-quote`)&&e.enabled_services.includes(`cross-chain-swap`),a=e.enabled_services.includes(`quote`)&&e.enabled_services.includes(`swap`),o=new Set;for(let t of e.lanes){let e=typeof t==`number`?s(t):t;e!==r&&o.add(e)}let c=t?!1:i,l=c?o:new Set;!a&&l.size===0||n.set(r,{chainId:e.chainId,crossChainSwapEnabled:c,crossChainTargetChainIds:l,swapEnabled:a,tokenList:e.enabled_services.includes(`token-list`)})}}catch(e){throw new o(a.UNKNOWN,i.INITIALIZATION_FAILED,{cause:e,details:`Failed to fetch supported chains from Markr API.`})}return n}async function x(e,t){let n=new Map;for(let[r,i]of t.entries())if(typeof i.chainId==`number`&&i.tokenList&&(i.crossChainSwapEnabled||i.swapEnabled))try{let t=p(e,i.chainId);n.set(r,t)}catch{}return n}function S(n){return n===e||n===t}function C(n,i){return n.type===r.NATIVE?c(i)?t:e:n.address}function w({amountOut:e,assetOut:t,slippageBps:n}){let r=u({amountOut:e,assetOut:t,slippageBps:n});return e>0n&&r===0n?1n:r}function T(e,t,r){let i=e.amountOut*BigInt(r)/10000n,a=e.amountOut-i,o=[...D(e.fees),{type:`partner`,name:`Core Fee`,amount:i,chainId:t.targetChain.chainId,token:O(t.targetAsset)}];return{aggregator:{id:e.aggregator.id,logoUrl:e.aggregator.logo_url,name:e.aggregator.name},amountIn:e.amountIn,amountOut:a,assetIn:t.sourceAsset,assetOut:t.targetAsset,expiresAt:e.expiredAt,fees:o,fromAddress:t.fromAddress,gasEstimate:e.gasEstimate,id:e.uuid,partnerFeeBps:r,serviceType:n.MARKR,slippageBps:t.slippageBps??e.recommendedSlippage,sourceChain:t.sourceChain,targetChain:t.targetChain,toAddress:t.toAddress}}async function E(e){try{return(await f(e)).fee}catch(e){throw new o(a.UNKNOWN,i.INITIALIZATION_FAILED,{cause:e,details:`Failed to fetch partner info from Markr API.`})}}function D(e){if(!e)return[];let t=[];for(let n of e){let e=typeof n.token.chainId==`number`?s(n.token.chainId):n.token.chainId,i;S(n.token.address)?i={type:r.NATIVE}:l(n.token.address)?i={type:r.ERC20,address:n.token.address}:m(n.token.address)&&(i={type:r.SPL,address:n.token.address}),i&&t.push({type:n.type,name:n.name,amount:n.amount,chainId:e,token:i})}return t}function O(e){return e.type===r.NATIVE?{type:r.NATIVE}:e.type===r.SPL?{type:r.SPL,address:e.address}:{type:r.ERC20,address:e.address}}async function k(e){return e?(await import(`./_abis/cross-chain-swap-wrapper-abi.js`)).MARKR_CROSS_CHAIN_SWAP_WRAPPER_ABI:(await import(`./_abis/swap-wrapper-abi.js`)).MARKR_SWAP_WRAPPER_ABI}function A(e){if(e instanceof h){let t=e.data;if(_(t))return t;let n;if(e.walk(e=>{let t=e.data;return!n&&_(t)&&(n=t),!1}),n)return n;let r=e.cause?.data;if(_(r))return r}if(!e||typeof e!=`object`)return;let t=e;if(_(t.data))return t.data;if(_(t.error?.data))return t.error.data;if(_(t.cause?.data))return t.cause.data;if(_(t.response?.data))return t.response.data;if(_(t.body?.error?.data))return t.body.error.data}function j(e,t){let n=A(t);if(!n)return null;try{let t=g({abi:e,data:n}),r=t.args.length>0?`(${t.args.map(String).join(`, `)})`:`()`;return`${t.errorName}${r}`}catch{let t=n.slice(0,10).toLowerCase();for(let n of e)if(n.type===`error`&&v(`${n.name}(${n.inputs.map(e=>e.type).join(`,`)})`).toLowerCase()===t)return`${n.name}()`}return null}export{C as assetToAddressString,w as calculateMarkrMinimumAmountOut,j as decodeMarkrRevertError,k as getMarkrSwapWrapperAbi,E as getPartnerFeeBps,b as getSupportedChains,x as getSupportedTokens,y as isRouteSupported,S as isTokenAddressNative,T as quoteFromMarkrQuoteResponseData};
2
+ //# sourceMappingURL=_utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_utils.js","names":[],"sources":["../../../src/transfer-service/markr/_utils.ts"],"sourcesContent":["import { ErrorCode, ErrorReason, SdkError } from '../../errors';\nimport { BaseError, decodeErrorResult, type Hex, isHex, toFunctionSelector } from 'viem';\nimport {\n type QuoteResponseData,\n type SupportedChainsResponseItemEvm,\n type SupportedChainsResponseItemSvm,\n type TokenListResponse,\n} from './_schema';\nimport { ERC_ZERO_ADDRESS, SOL_MINT_ADDRESS, ServiceType, TokenType } from '../../constants';\nimport { isSolanaNamespace } from '../../_utils/chain';\nimport { calculateMinimumAmountOut } from '../../_utils/math';\nimport { eip155ChainIdToCaip2 } from '../../utils/caip';\nimport type { Asset } from '../../types/asset';\nimport type { Caip2ChainId } from '../../types/caip';\nimport type { Quote, QuoteFee, QuoteFees, QuoteFeeToken, QuoterProps } from '../../types/quote';\nimport { markrGetInfoChains, markrGetPartnerInfo, markrGetTokenList, type ApiOptions } from './_api';\nimport { isEvmAddress } from '../../utils/evm-address';\nimport { isSolAddress } from '../../utils/sol-address';\n\nexport type SupportedChainsMap = Map<\n Caip2ChainId,\n {\n /** `number` for EVM, `Caip2ChainId` for SVM */\n chainId: number | Caip2ChainId;\n crossChainSwapEnabled: boolean;\n crossChainTargetChainIds: ReadonlySet<Caip2ChainId>;\n swapEnabled: boolean;\n tokenList: boolean;\n }\n>;\n\n/**\n * Checks whether the given source → target chain route is supported by Markr.\n */\nexport function isRouteSupported(\n supportedChains: SupportedChainsMap,\n sourceChainId: Caip2ChainId,\n targetChainId: Caip2ChainId,\n): boolean {\n const sourceChain = supportedChains.get(sourceChainId);\n const targetChain = supportedChains.get(targetChainId);\n\n if (!sourceChain || !targetChain) return false;\n\n if (sourceChainId === targetChainId) {\n return sourceChain.swapEnabled;\n }\n\n return sourceChain.crossChainSwapEnabled && sourceChain.crossChainTargetChainIds.has(targetChainId);\n}\n\nexport async function getSupportedChains(\n apiOptions: ApiOptions,\n disableCrossChainSwaps = false,\n): Promise<SupportedChainsMap> {\n const supportedChains: SupportedChainsMap = new Map();\n\n try {\n const chains = await markrGetInfoChains(apiOptions);\n const filteredSupportedChains = chains.filter(\n (chain): chain is SupportedChainsResponseItemEvm | SupportedChainsResponseItemSvm => {\n // Only include chains types that we support in the SDK (EVM and Solana for now).\n return chain.chainType === 'evm' || chain.chainType === 'svm';\n },\n );\n\n for (const chain of filteredSupportedChains) {\n const key: Caip2ChainId = typeof chain.chainId === 'number' ? eip155ChainIdToCaip2(chain.chainId) : chain.chainId;\n\n const isCrossChainSwapEnabled =\n chain.enabled_services.includes('cross-chain-quote') && chain.enabled_services.includes('cross-chain-swap');\n const isSwapEnabled = chain.enabled_services.includes('quote') && chain.enabled_services.includes('swap');\n const normalizedLaneChainIds = new Set<Caip2ChainId>();\n\n for (const lane of chain.lanes) {\n const laneChainId = typeof lane === 'number' ? eip155ChainIdToCaip2(lane) : lane;\n\n if (laneChainId !== key) {\n normalizedLaneChainIds.add(laneChainId);\n }\n }\n\n const crossChainSwapEnabled = disableCrossChainSwaps ? false : isCrossChainSwapEnabled;\n const crossChainTargetChainIds = crossChainSwapEnabled ? normalizedLaneChainIds : new Set<Caip2ChainId>();\n\n if (!isSwapEnabled && crossChainTargetChainIds.size === 0) {\n continue;\n }\n\n supportedChains.set(key, {\n chainId: chain.chainId,\n crossChainSwapEnabled,\n crossChainTargetChainIds,\n swapEnabled: isSwapEnabled,\n tokenList: chain.enabled_services.includes('token-list'),\n });\n }\n } catch (error) {\n throw new SdkError(ErrorReason.UNKNOWN, ErrorCode.INITIALIZATION_FAILED, {\n cause: error,\n details: 'Failed to fetch supported chains from Markr API.',\n });\n }\n\n return supportedChains;\n}\n\nexport async function getSupportedTokens(\n apiOptions: ApiOptions,\n supportedChains: SupportedChainsMap,\n): Promise<Map<Caip2ChainId, Promise<TokenListResponse>>> {\n // Parallel fetch token lists for all supported chains.\n const supportedTokens: Map<Caip2ChainId, Promise<TokenListResponse>> = new Map();\n\n for (const [caip2ChainId, chainInfo] of supportedChains.entries()) {\n // Only fetch token list for EVM chains that support swaps.\n if (\n typeof chainInfo.chainId === 'number' &&\n chainInfo.tokenList &&\n (chainInfo.crossChainSwapEnabled || chainInfo.swapEnabled)\n ) {\n try {\n const tokenListPromise = markrGetTokenList(apiOptions, chainInfo.chainId);\n supportedTokens.set(caip2ChainId, tokenListPromise);\n } catch {\n // Ignore errors for individual token list fetches.\n // TODO: Logger?\n }\n }\n }\n\n return supportedTokens;\n}\n\n/**\n * Determine if the provided token address represents the native token for its chain.\n *\n * Markr represents EVM native tokens as the zero address and Solana native SOL\n * as the wrapped SOL mint address.\n */\nexport function isTokenAddressNative(address: string): boolean {\n return address === ERC_ZERO_ADDRESS || address === SOL_MINT_ADDRESS;\n}\n\n/**\n * Convert an `Asset` to the address string expected by the Markr API.\n *\n * For NATIVE assets the representation depends on the chain:\n * - EVM chains: `0x0000...0000` (ERC zero address)\n * - Solana chains: `So11111111111111111111111111111111111111112` (wrapped SOL mint)\n *\n * @param asset The asset to convert.\n * @param chainId CAIP-2 chain ID used to disambiguate NATIVE assets across chain types.\n */\nexport function assetToAddressString(asset: Asset, chainId: Caip2ChainId): string {\n if (asset.type === TokenType.NATIVE) {\n if (isSolanaNamespace(chainId)) {\n return SOL_MINT_ADDRESS;\n }\n\n return ERC_ZERO_ADDRESS;\n }\n\n return asset.address;\n}\n\n/**\n * Markr rejects `minAmountOut=0` for non-zero quotes.\n *\n * For very small quotes, integer truncation after slippage can produce `0`.\n * Clamp to `1` in that edge case to satisfy Markr API validation while\n * preserving normal slippage behavior for larger quotes.\n */\nexport function calculateMarkrMinimumAmountOut({\n amountOut,\n assetOut,\n slippageBps,\n}: Pick<Quote, 'amountOut' | 'assetOut' | 'slippageBps'>): bigint {\n const minAmountOut = calculateMinimumAmountOut({ amountOut, assetOut, slippageBps });\n\n if (amountOut > 0n && minAmountOut === 0n) {\n return 1n;\n }\n\n return minAmountOut;\n}\n\nexport function quoteFromMarkrQuoteResponseData(\n data: QuoteResponseData,\n quoterProps: QuoterProps,\n partnerFeeBps: number,\n): Quote {\n const partnerFee: bigint = (data.amountOut * BigInt(partnerFeeBps)) / 10_000n;\n const amountOutAfterFees: bigint = data.amountOut - partnerFee;\n\n const fees: QuoteFees = [\n ...mapMarkrQuoteResponseDataFeesToQuoteFees(data.fees),\n // Add the partner fee as a QuoteFee component for Markr quotes.\n {\n type: 'partner',\n name: 'Core Fee',\n amount: partnerFee,\n chainId: quoterProps.targetChain.chainId,\n token: assetToFeeToken(quoterProps.targetAsset),\n },\n ];\n\n return {\n aggregator: {\n id: data.aggregator.id,\n logoUrl: data.aggregator.logo_url,\n name: data.aggregator.name,\n },\n amountIn: data.amountIn,\n amountOut: amountOutAfterFees,\n assetIn: quoterProps.sourceAsset,\n assetOut: quoterProps.targetAsset,\n expiresAt: data.expiredAt, // Markr returns `expiredAt` as Unix time in seconds; use as-is.\n fees,\n fromAddress: quoterProps.fromAddress,\n /**\n * This gasEstimate is rough or may be missing.\n * Consumers should use TransferManager.estimateGas for a more accurate estimate.\n */\n gasEstimate: data.gasEstimate,\n id: data.uuid,\n partnerFeeBps,\n serviceType: ServiceType.MARKR,\n slippageBps: quoterProps.slippageBps ?? data.recommendedSlippage,\n sourceChain: quoterProps.sourceChain,\n targetChain: quoterProps.targetChain,\n toAddress: quoterProps.toAddress,\n } satisfies Quote;\n}\n\nexport async function getPartnerFeeBps(apiOptions: ApiOptions): Promise<number> {\n try {\n const partnerInfo = await markrGetPartnerInfo(apiOptions);\n return partnerInfo.fee;\n } catch (error) {\n throw new SdkError(ErrorReason.UNKNOWN, ErrorCode.INITIALIZATION_FAILED, {\n cause: error,\n details: 'Failed to fetch partner info from Markr API.',\n });\n }\n}\n\nexport function mapMarkrQuoteResponseDataFeesToQuoteFees(markrFees: QuoteResponseData['fees']): QuoteFees {\n if (!markrFees) {\n return [];\n }\n\n const fees: QuoteFee[] = [];\n\n for (const fee of markrFees) {\n const chainId = typeof fee.token.chainId === 'number' ? eip155ChainIdToCaip2(fee.token.chainId) : fee.token.chainId;\n\n let token: QuoteFeeToken | undefined;\n\n if (isTokenAddressNative(fee.token.address)) {\n token = { type: TokenType.NATIVE };\n } else if (isEvmAddress(fee.token.address)) {\n token = { type: TokenType.ERC20, address: fee.token.address };\n } else if (isSolAddress(fee.token.address)) {\n token = { type: TokenType.SPL, address: fee.token.address };\n }\n\n if (!token) {\n // Skip fee if we can't determine token type.\n continue;\n }\n\n fees.push({\n type: fee.type,\n name: fee.name,\n amount: fee.amount,\n chainId,\n token,\n });\n }\n\n return fees;\n}\n\nfunction assetToFeeToken(asset: Asset): QuoteFeeToken {\n if (asset.type === TokenType.NATIVE) {\n return { type: TokenType.NATIVE };\n }\n\n if (asset.type === TokenType.SPL) {\n return { type: TokenType.SPL, address: asset.address };\n }\n\n return { type: TokenType.ERC20, address: asset.address };\n}\n\nexport type MarkrRouterAbi =\n | (typeof import('./_abis/swap-wrapper-abi'))['MARKR_SWAP_WRAPPER_ABI']\n | (typeof import('./_abis/cross-chain-swap-wrapper-abi'))['MARKR_CROSS_CHAIN_SWAP_WRAPPER_ABI'];\n\nexport async function getMarkrSwapWrapperAbi(crossChain: boolean): Promise<MarkrRouterAbi> {\n if (crossChain) {\n return (await import('./_abis/cross-chain-swap-wrapper-abi')).MARKR_CROSS_CHAIN_SWAP_WRAPPER_ABI;\n }\n\n return (await import('./_abis/swap-wrapper-abi')).MARKR_SWAP_WRAPPER_ABI;\n}\n\nexport function extractHexDataFromError(error: unknown): Hex | undefined {\n if (error instanceof BaseError) {\n const directData = (error as { data?: unknown }).data;\n if (isHex(directData)) {\n return directData;\n }\n\n let walkedData: Hex | undefined;\n error.walk((walkedError) => {\n const nestedData = (walkedError as { data?: unknown }).data;\n if (!walkedData && isHex(nestedData)) {\n walkedData = nestedData;\n }\n return false;\n });\n\n if (walkedData) {\n return walkedData;\n }\n\n const causeData = (error as { cause?: { data?: unknown } }).cause?.data;\n if (isHex(causeData)) {\n return causeData;\n }\n }\n\n if (!error || typeof error !== 'object') {\n return undefined;\n }\n\n const genericError = error as {\n data?: unknown;\n error?: { data?: unknown };\n cause?: { data?: unknown };\n response?: { data?: unknown };\n body?: { error?: { data?: unknown } };\n };\n\n if (isHex(genericError.data)) {\n return genericError.data;\n }\n\n if (isHex(genericError.error?.data)) {\n return genericError.error.data;\n }\n\n if (isHex(genericError.cause?.data)) {\n return genericError.cause.data;\n }\n\n if (isHex(genericError.response?.data)) {\n return genericError.response.data;\n }\n\n if (isHex(genericError.body?.error?.data)) {\n return genericError.body.error.data;\n }\n\n return undefined;\n}\n\nexport function decodeMarkrRevertError(abi: MarkrRouterAbi, error: unknown): string | null {\n const revertData = extractHexDataFromError(error);\n\n if (!revertData) {\n return null;\n }\n\n try {\n const decoded = decodeErrorResult({ abi, data: revertData });\n const decodedArgs = decoded.args.length > 0 ? `(${decoded.args.map(String).join(', ')})` : '()';\n\n return `${decoded.errorName}${decodedArgs}`;\n } catch {\n const selector = revertData.slice(0, 10).toLowerCase();\n\n for (const abiItem of abi) {\n if (abiItem.type !== 'error') {\n continue;\n }\n\n const signature = `${abiItem.name}(${abiItem.inputs.map((input) => input.type).join(',')})`;\n if (toFunctionSelector(signature).toLowerCase() === selector) {\n return `${abiItem.name}()`;\n }\n }\n }\n\n return null;\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ const e={fast:2e3,medium:5e3,slow:3e4,verySlow:18e4},t={fast:6e4,medium:20*6e4,slow:120*6e4},n={apechain:50*6e4,arbitrum:17*6e4,astar:35e3,avalanche:1e3,base:18*6e4,berachain:7e3,bitlayer:6e4,blast:20*6e4,bnbchain:5e3,bob:120*6e4,bsquared:20*6e4,celo:1e3,core:6e4,corn:720*6e4,cronos:1e3,cronoszkevm:1860*6e4,ethereum:15*6e4,fraxtal:30*6e4,gnosis:3*6e4,hashkey:60*6e4,ink:120*6e4,kroma:25*6e4,linea:20*6e4,mantle:28*6e4,metis:120*6e4,mindnetwork:60*6e4,mode:37*6e4,monad:48e3,opmainnet:20*6e4,polygon:17*6e4,polygonzkevm:120*6e4,ronin:1e4,scroll:60*6e4,sei:1e3,shibarium:6e4,solana:1e3,sonic:7e3,soneium:27*6e4,treasure:420*6e4,unichain:24*6e4,wemix:1e3,worldchain:40*6e4,xlayer:60*6e4,zircuit:21*6e4,zksync:20*6e4},r={"eip155:1":`ethereum`,"eip155:10":`opmainnet`,"eip155:25":`cronos`,"eip155:56":`bnbchain`,"eip155:100":`gnosis`,"eip155:137":`polygon`,"eip155:324":`zksync`,"eip155:1101":`polygonzkevm`,"eip155:1116":`core`,"eip155:1329":`sei`,"eip155:196":`xlayer`,"eip155:252":`fraxtal`,"eip155:480":`worldchain`,"eip155:59144":`linea`,"eip155:8453":`base`,"eip155:1088":`metis`,"eip155:2020":`ronin`,"eip155:42220":`celo`,"eip155:43114":`avalanche`,"eip155:48900":`zircuit`,"eip155:5000":`mantle`,"eip155:534352":`scroll`,"eip155:42161":`arbitrum`,"eip155:81457":`blast`,"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp":`solana`},i=[{aliases:[`apechain`],chainKey:`apechain`},{aliases:[`arbitrum`],chainKey:`arbitrum`},{aliases:[`astar`],chainKey:`astar`},{aliases:[`avalanche`],chainKey:`avalanche`},{aliases:[`base`],chainKey:`base`},{aliases:[`berachain`],chainKey:`berachain`},{aliases:[`bitlayer`],chainKey:`bitlayer`},{aliases:[`blast`],chainKey:`blast`},{aliases:[`bnbchain`,`bnbsmartchain`,`binancesmartchain`,`binancechain`],chainKey:`bnbchain`},{aliases:[`bob`],chainKey:`bob`},{aliases:[`b2`,`bsquared`],chainKey:`bsquared`},{aliases:[`celo`],chainKey:`celo`},{aliases:[`core`],chainKey:`core`},{aliases:[`corn`],chainKey:`corn`},{aliases:[`cronoszkevm`],chainKey:`cronoszkevm`},{aliases:[`cronos`],chainKey:`cronos`},{aliases:[`ethereum`],chainKey:`ethereum`},{aliases:[`fraxtal`],chainKey:`fraxtal`},{aliases:[`gnosis`],chainKey:`gnosis`},{aliases:[`hashkey`],chainKey:`hashkey`},{aliases:[`ink`],chainKey:`ink`},{aliases:[`kroma`],chainKey:`kroma`},{aliases:[`linea`],chainKey:`linea`},{aliases:[`mantle`],chainKey:`mantle`},{aliases:[`metis`],chainKey:`metis`},{aliases:[`mindnetwork`],chainKey:`mindnetwork`},{aliases:[`mode`],chainKey:`mode`},{aliases:[`monad`],chainKey:`monad`},{aliases:[`opmainnet`,`optimism`],chainKey:`opmainnet`},{aliases:[`polygonzkevm`],chainKey:`polygonzkevm`},{aliases:[`polygon`],chainKey:`polygon`},{aliases:[`ronin`],chainKey:`ronin`},{aliases:[`scroll`],chainKey:`scroll`},{aliases:[`sei`],chainKey:`sei`},{aliases:[`solana`],chainKey:`solana`},{aliases:[`soneium`],chainKey:`soneium`},{aliases:[`sonic`],chainKey:`sonic`},{aliases:[`shibarium`],chainKey:`shibarium`},{aliases:[`treasure`],chainKey:`treasure`},{aliases:[`unichain`],chainKey:`unichain`},{aliases:[`wemix`],chainKey:`wemix`},{aliases:[`worldchain`],chainKey:`worldchain`},{aliases:[`xlayer`],chainKey:`xlayer`},{aliases:[`zircuit`],chainKey:`zircuit`},{aliases:[`zksync`],chainKey:`zksync`}],a={...Object.fromEntries(Object.entries(r).map(([e,t])=>[e,n[t]]))},o=[...i.map(({aliases:e,chainKey:t})=>({aliases:e,finalityMs:n[t]}))];exports.CROSS_CHAIN_POLLING_INTERVAL_MS=e,exports.DEFAULT_MARKR_API_URL=`https://proxy-api.avax.network/proxy/markr`,exports.FINALITY_MS_BY_CHAIN_ID=a,exports.FINALITY_MS_BY_CHAIN_NAME_ALIAS=o,exports.FINALITY_TIER_MAX_FINALITY_MS=t,exports.SOLANA_POLLING_INTERVAL_MS=2500,exports.SOLANA_REQUIRED_CONFIRMATIONS=32,exports.SOLANA_TX_TIMEOUT_MS=12e4;
2
+ //# sourceMappingURL=constants.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.cjs","names":[],"sources":["../../../src/transfer-service/markr/constants.ts"],"sourcesContent":["import type { Caip2ChainId } from '../../types/caip';\n\nexport const DEFAULT_MARKR_API_URL = 'https://proxy-api.avax.network/proxy/markr' as const;\n\n/**\n * Cross-chain polling tiers used by Markr transfer tracking.\n *\n * Tier boundaries are selected from known destination/source finality windows\n * so we poll fast-finality chains more aggressively and avoid excessive RPC\n * traffic on slow-finality chains.\n *\n * Finality reference:\n * https://docs.chain.link/ccip/ccip-execution-latency#finality-by-blockchain\n */\nexport const CROSS_CHAIN_POLLING_INTERVAL_MS = {\n fast: 2_000, // 2 seconds\n medium: 5_000, // 5 seconds\n slow: 30_000, // 30 seconds\n verySlow: 180_000, // 3 minutes\n} as const;\n\n/**\n * Upper bounds (in ms) used to map known finality time to a polling tier.\n *\n * Values greater than `slow` are classified as `verySlow`.\n */\nexport const FINALITY_TIER_MAX_FINALITY_MS: Readonly<Record<'fast' | 'medium' | 'slow', number>> = {\n fast: 60_000,\n medium: 20 * 60_000,\n slow: 2 * 60 * 60_000,\n};\n\nconst FINALITY_MS_BY_CHAIN_KEY = {\n apechain: 50 * 60_000,\n arbitrum: 17 * 60_000,\n astar: 35_000,\n avalanche: 1_000,\n base: 18 * 60_000,\n berachain: 7_000,\n bitlayer: 60_000,\n blast: 20 * 60_000,\n bnbchain: 5_000,\n bob: 2 * 60 * 60_000,\n bsquared: 20 * 60_000,\n celo: 1_000,\n core: 60_000,\n corn: 12 * 60 * 60_000,\n cronos: 1_000,\n cronoszkevm: 31 * 60 * 60_000,\n ethereum: 15 * 60_000,\n fraxtal: 30 * 60_000,\n gnosis: 3 * 60_000,\n hashkey: 60 * 60_000,\n ink: 2 * 60 * 60_000,\n kroma: 25 * 60_000,\n linea: 20 * 60_000,\n mantle: 28 * 60_000,\n metis: 2 * 60 * 60_000,\n mindnetwork: 60 * 60_000,\n mode: 37 * 60_000,\n monad: 48_000,\n opmainnet: 20 * 60_000,\n polygon: 17 * 60_000,\n polygonzkevm: 2 * 60 * 60_000,\n ronin: 10_000,\n scroll: 60 * 60_000,\n sei: 1_000,\n shibarium: 60_000,\n solana: 1_000,\n sonic: 7_000,\n soneium: 27 * 60_000,\n treasure: 7 * 60 * 60_000,\n unichain: 24 * 60_000,\n wemix: 1_000,\n worldchain: 40 * 60_000,\n xlayer: 60 * 60_000,\n zircuit: 21 * 60_000,\n zksync: 20 * 60_000,\n} as const;\n\ntype FinalityChainKey = keyof typeof FINALITY_MS_BY_CHAIN_KEY;\n\nconst FINALITY_CHAIN_KEY_BY_CHAIN_ID = {\n 'eip155:1': 'ethereum',\n 'eip155:10': 'opmainnet',\n 'eip155:25': 'cronos',\n 'eip155:56': 'bnbchain',\n 'eip155:100': 'gnosis',\n 'eip155:137': 'polygon',\n 'eip155:324': 'zksync',\n 'eip155:1101': 'polygonzkevm',\n 'eip155:1116': 'core',\n 'eip155:1329': 'sei',\n 'eip155:196': 'xlayer',\n 'eip155:252': 'fraxtal',\n 'eip155:480': 'worldchain',\n 'eip155:59144': 'linea',\n 'eip155:8453': 'base',\n 'eip155:1088': 'metis',\n 'eip155:2020': 'ronin',\n 'eip155:42220': 'celo',\n 'eip155:43114': 'avalanche',\n 'eip155:48900': 'zircuit',\n 'eip155:5000': 'mantle',\n 'eip155:534352': 'scroll',\n 'eip155:42161': 'arbitrum',\n 'eip155:81457': 'blast',\n 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp': 'solana',\n} as const satisfies Partial<Record<Caip2ChainId, FinalityChainKey>>;\n\nconst FINALITY_CHAIN_NAME_ALIASES = [\n { aliases: ['apechain'], chainKey: 'apechain' },\n { aliases: ['arbitrum'], chainKey: 'arbitrum' },\n { aliases: ['astar'], chainKey: 'astar' },\n { aliases: ['avalanche'], chainKey: 'avalanche' },\n { aliases: ['base'], chainKey: 'base' },\n { aliases: ['berachain'], chainKey: 'berachain' },\n { aliases: ['bitlayer'], chainKey: 'bitlayer' },\n { aliases: ['blast'], chainKey: 'blast' },\n { aliases: ['bnbchain', 'bnbsmartchain', 'binancesmartchain', 'binancechain'], chainKey: 'bnbchain' },\n { aliases: ['bob'], chainKey: 'bob' },\n { aliases: ['b2', 'bsquared'], chainKey: 'bsquared' },\n { aliases: ['celo'], chainKey: 'celo' },\n { aliases: ['core'], chainKey: 'core' },\n { aliases: ['corn'], chainKey: 'corn' },\n { aliases: ['cronoszkevm'], chainKey: 'cronoszkevm' },\n { aliases: ['cronos'], chainKey: 'cronos' },\n { aliases: ['ethereum'], chainKey: 'ethereum' },\n { aliases: ['fraxtal'], chainKey: 'fraxtal' },\n { aliases: ['gnosis'], chainKey: 'gnosis' },\n { aliases: ['hashkey'], chainKey: 'hashkey' },\n { aliases: ['ink'], chainKey: 'ink' },\n { aliases: ['kroma'], chainKey: 'kroma' },\n { aliases: ['linea'], chainKey: 'linea' },\n { aliases: ['mantle'], chainKey: 'mantle' },\n { aliases: ['metis'], chainKey: 'metis' },\n { aliases: ['mindnetwork'], chainKey: 'mindnetwork' },\n { aliases: ['mode'], chainKey: 'mode' },\n { aliases: ['monad'], chainKey: 'monad' },\n { aliases: ['opmainnet', 'optimism'], chainKey: 'opmainnet' },\n { aliases: ['polygonzkevm'], chainKey: 'polygonzkevm' },\n { aliases: ['polygon'], chainKey: 'polygon' },\n { aliases: ['ronin'], chainKey: 'ronin' },\n { aliases: ['scroll'], chainKey: 'scroll' },\n { aliases: ['sei'], chainKey: 'sei' },\n { aliases: ['solana'], chainKey: 'solana' },\n { aliases: ['soneium'], chainKey: 'soneium' },\n { aliases: ['sonic'], chainKey: 'sonic' },\n { aliases: ['shibarium'], chainKey: 'shibarium' },\n { aliases: ['treasure'], chainKey: 'treasure' },\n { aliases: ['unichain'], chainKey: 'unichain' },\n { aliases: ['wemix'], chainKey: 'wemix' },\n { aliases: ['worldchain'], chainKey: 'worldchain' },\n { aliases: ['xlayer'], chainKey: 'xlayer' },\n { aliases: ['zircuit'], chainKey: 'zircuit' },\n { aliases: ['zksync'], chainKey: 'zksync' },\n] as const satisfies ReadonlyArray<{ aliases: readonly string[]; chainKey: FinalityChainKey }>;\n\n/**\n * Known CAIP-2 chain IDs and their approximate CCIP finality times in\n * milliseconds.\n *\n * Finality reference:\n * https://docs.chain.link/ccip/ccip-execution-latency#finality-by-blockchain\n */\nexport const FINALITY_MS_BY_CHAIN_ID: Partial<Record<Caip2ChainId, number>> = {\n ...Object.fromEntries(\n Object.entries(FINALITY_CHAIN_KEY_BY_CHAIN_ID).map(([chainId, chainKey]) => [\n chainId,\n FINALITY_MS_BY_CHAIN_KEY[chainKey],\n ]),\n ),\n};\n\n/**\n * Chain-name aliases and their approximate CCIP finality times in\n * milliseconds.\n *\n * These aliases are used as a fallback when a chain ID is not present in\n * `FINALITY_MS_BY_CHAIN_ID`.\n *\n * Finality reference:\n * https://docs.chain.link/ccip/ccip-execution-latency#finality-by-blockchain\n */\nexport const FINALITY_MS_BY_CHAIN_NAME_ALIAS: ReadonlyArray<{ aliases: readonly string[]; finalityMs: number }> = [\n ...FINALITY_CHAIN_NAME_ALIASES.map(({ aliases, chainKey }) => ({\n aliases,\n finalityMs: FINALITY_MS_BY_CHAIN_KEY[chainKey],\n })),\n];\n\n// Solana slot time is ~400ms. Polling every 2.5s (~6 slots) balances\n// responsiveness against RPC rate-limits — fast enough to detect finalization\n// promptly, without hammering the endpoint.\nexport const SOLANA_POLLING_INTERVAL_MS = 2_500;\n\n// A Solana blockhash is valid for 150 slots (~60s at 400ms/slot). Validators\n// may hold a transaction for up to ~90s before dropping it. We set a 120s\n// timeout to provide a comfortable buffer above worst-case blockhash expiry,\n// ensuring we don't falsely time out a transaction that is still eligible for\n// inclusion in a block.\nexport const SOLANA_TX_TIMEOUT_MS = 120_000;\n\n// Solana finalizes a block once ≥31 confirmed blocks are built on top of it.\n// `getSignatureStatuses` returns the running `confirmations` count (0 → N),\n// then `null` once the status flips to `finalized`. We use 32 as the\n// required-confirmation target so the progress bar fills smoothly from 0 → 31\n// during polling and snaps to 32 (= done) only when finalization is confirmed.\nexport const SOLANA_REQUIRED_CONFIRMATIONS = 32;\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ const e=`https://proxy-api.avax.network/proxy/markr`,t={fast:2e3,medium:5e3,slow:3e4,verySlow:18e4},n={fast:6e4,medium:20*6e4,slow:120*6e4},r={apechain:50*6e4,arbitrum:17*6e4,astar:35e3,avalanche:1e3,base:18*6e4,berachain:7e3,bitlayer:6e4,blast:20*6e4,bnbchain:5e3,bob:120*6e4,bsquared:20*6e4,celo:1e3,core:6e4,corn:720*6e4,cronos:1e3,cronoszkevm:1860*6e4,ethereum:15*6e4,fraxtal:30*6e4,gnosis:3*6e4,hashkey:60*6e4,ink:120*6e4,kroma:25*6e4,linea:20*6e4,mantle:28*6e4,metis:120*6e4,mindnetwork:60*6e4,mode:37*6e4,monad:48e3,opmainnet:20*6e4,polygon:17*6e4,polygonzkevm:120*6e4,ronin:1e4,scroll:60*6e4,sei:1e3,shibarium:6e4,solana:1e3,sonic:7e3,soneium:27*6e4,treasure:420*6e4,unichain:24*6e4,wemix:1e3,worldchain:40*6e4,xlayer:60*6e4,zircuit:21*6e4,zksync:20*6e4},i={"eip155:1":`ethereum`,"eip155:10":`opmainnet`,"eip155:25":`cronos`,"eip155:56":`bnbchain`,"eip155:100":`gnosis`,"eip155:137":`polygon`,"eip155:324":`zksync`,"eip155:1101":`polygonzkevm`,"eip155:1116":`core`,"eip155:1329":`sei`,"eip155:196":`xlayer`,"eip155:252":`fraxtal`,"eip155:480":`worldchain`,"eip155:59144":`linea`,"eip155:8453":`base`,"eip155:1088":`metis`,"eip155:2020":`ronin`,"eip155:42220":`celo`,"eip155:43114":`avalanche`,"eip155:48900":`zircuit`,"eip155:5000":`mantle`,"eip155:534352":`scroll`,"eip155:42161":`arbitrum`,"eip155:81457":`blast`,"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp":`solana`},a=[{aliases:[`apechain`],chainKey:`apechain`},{aliases:[`arbitrum`],chainKey:`arbitrum`},{aliases:[`astar`],chainKey:`astar`},{aliases:[`avalanche`],chainKey:`avalanche`},{aliases:[`base`],chainKey:`base`},{aliases:[`berachain`],chainKey:`berachain`},{aliases:[`bitlayer`],chainKey:`bitlayer`},{aliases:[`blast`],chainKey:`blast`},{aliases:[`bnbchain`,`bnbsmartchain`,`binancesmartchain`,`binancechain`],chainKey:`bnbchain`},{aliases:[`bob`],chainKey:`bob`},{aliases:[`b2`,`bsquared`],chainKey:`bsquared`},{aliases:[`celo`],chainKey:`celo`},{aliases:[`core`],chainKey:`core`},{aliases:[`corn`],chainKey:`corn`},{aliases:[`cronoszkevm`],chainKey:`cronoszkevm`},{aliases:[`cronos`],chainKey:`cronos`},{aliases:[`ethereum`],chainKey:`ethereum`},{aliases:[`fraxtal`],chainKey:`fraxtal`},{aliases:[`gnosis`],chainKey:`gnosis`},{aliases:[`hashkey`],chainKey:`hashkey`},{aliases:[`ink`],chainKey:`ink`},{aliases:[`kroma`],chainKey:`kroma`},{aliases:[`linea`],chainKey:`linea`},{aliases:[`mantle`],chainKey:`mantle`},{aliases:[`metis`],chainKey:`metis`},{aliases:[`mindnetwork`],chainKey:`mindnetwork`},{aliases:[`mode`],chainKey:`mode`},{aliases:[`monad`],chainKey:`monad`},{aliases:[`opmainnet`,`optimism`],chainKey:`opmainnet`},{aliases:[`polygonzkevm`],chainKey:`polygonzkevm`},{aliases:[`polygon`],chainKey:`polygon`},{aliases:[`ronin`],chainKey:`ronin`},{aliases:[`scroll`],chainKey:`scroll`},{aliases:[`sei`],chainKey:`sei`},{aliases:[`solana`],chainKey:`solana`},{aliases:[`soneium`],chainKey:`soneium`},{aliases:[`sonic`],chainKey:`sonic`},{aliases:[`shibarium`],chainKey:`shibarium`},{aliases:[`treasure`],chainKey:`treasure`},{aliases:[`unichain`],chainKey:`unichain`},{aliases:[`wemix`],chainKey:`wemix`},{aliases:[`worldchain`],chainKey:`worldchain`},{aliases:[`xlayer`],chainKey:`xlayer`},{aliases:[`zircuit`],chainKey:`zircuit`},{aliases:[`zksync`],chainKey:`zksync`}],o={...Object.fromEntries(Object.entries(i).map(([e,t])=>[e,r[t]]))},s=[...a.map(({aliases:e,chainKey:t})=>({aliases:e,finalityMs:r[t]}))],c=2500,l=12e4,u=32;export{t as CROSS_CHAIN_POLLING_INTERVAL_MS,e as DEFAULT_MARKR_API_URL,o as FINALITY_MS_BY_CHAIN_ID,s as FINALITY_MS_BY_CHAIN_NAME_ALIAS,n as FINALITY_TIER_MAX_FINALITY_MS,c as SOLANA_POLLING_INTERVAL_MS,u as SOLANA_REQUIRED_CONFIRMATIONS,l as SOLANA_TX_TIMEOUT_MS};
2
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","names":[],"sources":["../../../src/transfer-service/markr/constants.ts"],"sourcesContent":["import type { Caip2ChainId } from '../../types/caip';\n\nexport const DEFAULT_MARKR_API_URL = 'https://proxy-api.avax.network/proxy/markr' as const;\n\n/**\n * Cross-chain polling tiers used by Markr transfer tracking.\n *\n * Tier boundaries are selected from known destination/source finality windows\n * so we poll fast-finality chains more aggressively and avoid excessive RPC\n * traffic on slow-finality chains.\n *\n * Finality reference:\n * https://docs.chain.link/ccip/ccip-execution-latency#finality-by-blockchain\n */\nexport const CROSS_CHAIN_POLLING_INTERVAL_MS = {\n fast: 2_000, // 2 seconds\n medium: 5_000, // 5 seconds\n slow: 30_000, // 30 seconds\n verySlow: 180_000, // 3 minutes\n} as const;\n\n/**\n * Upper bounds (in ms) used to map known finality time to a polling tier.\n *\n * Values greater than `slow` are classified as `verySlow`.\n */\nexport const FINALITY_TIER_MAX_FINALITY_MS: Readonly<Record<'fast' | 'medium' | 'slow', number>> = {\n fast: 60_000,\n medium: 20 * 60_000,\n slow: 2 * 60 * 60_000,\n};\n\nconst FINALITY_MS_BY_CHAIN_KEY = {\n apechain: 50 * 60_000,\n arbitrum: 17 * 60_000,\n astar: 35_000,\n avalanche: 1_000,\n base: 18 * 60_000,\n berachain: 7_000,\n bitlayer: 60_000,\n blast: 20 * 60_000,\n bnbchain: 5_000,\n bob: 2 * 60 * 60_000,\n bsquared: 20 * 60_000,\n celo: 1_000,\n core: 60_000,\n corn: 12 * 60 * 60_000,\n cronos: 1_000,\n cronoszkevm: 31 * 60 * 60_000,\n ethereum: 15 * 60_000,\n fraxtal: 30 * 60_000,\n gnosis: 3 * 60_000,\n hashkey: 60 * 60_000,\n ink: 2 * 60 * 60_000,\n kroma: 25 * 60_000,\n linea: 20 * 60_000,\n mantle: 28 * 60_000,\n metis: 2 * 60 * 60_000,\n mindnetwork: 60 * 60_000,\n mode: 37 * 60_000,\n monad: 48_000,\n opmainnet: 20 * 60_000,\n polygon: 17 * 60_000,\n polygonzkevm: 2 * 60 * 60_000,\n ronin: 10_000,\n scroll: 60 * 60_000,\n sei: 1_000,\n shibarium: 60_000,\n solana: 1_000,\n sonic: 7_000,\n soneium: 27 * 60_000,\n treasure: 7 * 60 * 60_000,\n unichain: 24 * 60_000,\n wemix: 1_000,\n worldchain: 40 * 60_000,\n xlayer: 60 * 60_000,\n zircuit: 21 * 60_000,\n zksync: 20 * 60_000,\n} as const;\n\ntype FinalityChainKey = keyof typeof FINALITY_MS_BY_CHAIN_KEY;\n\nconst FINALITY_CHAIN_KEY_BY_CHAIN_ID = {\n 'eip155:1': 'ethereum',\n 'eip155:10': 'opmainnet',\n 'eip155:25': 'cronos',\n 'eip155:56': 'bnbchain',\n 'eip155:100': 'gnosis',\n 'eip155:137': 'polygon',\n 'eip155:324': 'zksync',\n 'eip155:1101': 'polygonzkevm',\n 'eip155:1116': 'core',\n 'eip155:1329': 'sei',\n 'eip155:196': 'xlayer',\n 'eip155:252': 'fraxtal',\n 'eip155:480': 'worldchain',\n 'eip155:59144': 'linea',\n 'eip155:8453': 'base',\n 'eip155:1088': 'metis',\n 'eip155:2020': 'ronin',\n 'eip155:42220': 'celo',\n 'eip155:43114': 'avalanche',\n 'eip155:48900': 'zircuit',\n 'eip155:5000': 'mantle',\n 'eip155:534352': 'scroll',\n 'eip155:42161': 'arbitrum',\n 'eip155:81457': 'blast',\n 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp': 'solana',\n} as const satisfies Partial<Record<Caip2ChainId, FinalityChainKey>>;\n\nconst FINALITY_CHAIN_NAME_ALIASES = [\n { aliases: ['apechain'], chainKey: 'apechain' },\n { aliases: ['arbitrum'], chainKey: 'arbitrum' },\n { aliases: ['astar'], chainKey: 'astar' },\n { aliases: ['avalanche'], chainKey: 'avalanche' },\n { aliases: ['base'], chainKey: 'base' },\n { aliases: ['berachain'], chainKey: 'berachain' },\n { aliases: ['bitlayer'], chainKey: 'bitlayer' },\n { aliases: ['blast'], chainKey: 'blast' },\n { aliases: ['bnbchain', 'bnbsmartchain', 'binancesmartchain', 'binancechain'], chainKey: 'bnbchain' },\n { aliases: ['bob'], chainKey: 'bob' },\n { aliases: ['b2', 'bsquared'], chainKey: 'bsquared' },\n { aliases: ['celo'], chainKey: 'celo' },\n { aliases: ['core'], chainKey: 'core' },\n { aliases: ['corn'], chainKey: 'corn' },\n { aliases: ['cronoszkevm'], chainKey: 'cronoszkevm' },\n { aliases: ['cronos'], chainKey: 'cronos' },\n { aliases: ['ethereum'], chainKey: 'ethereum' },\n { aliases: ['fraxtal'], chainKey: 'fraxtal' },\n { aliases: ['gnosis'], chainKey: 'gnosis' },\n { aliases: ['hashkey'], chainKey: 'hashkey' },\n { aliases: ['ink'], chainKey: 'ink' },\n { aliases: ['kroma'], chainKey: 'kroma' },\n { aliases: ['linea'], chainKey: 'linea' },\n { aliases: ['mantle'], chainKey: 'mantle' },\n { aliases: ['metis'], chainKey: 'metis' },\n { aliases: ['mindnetwork'], chainKey: 'mindnetwork' },\n { aliases: ['mode'], chainKey: 'mode' },\n { aliases: ['monad'], chainKey: 'monad' },\n { aliases: ['opmainnet', 'optimism'], chainKey: 'opmainnet' },\n { aliases: ['polygonzkevm'], chainKey: 'polygonzkevm' },\n { aliases: ['polygon'], chainKey: 'polygon' },\n { aliases: ['ronin'], chainKey: 'ronin' },\n { aliases: ['scroll'], chainKey: 'scroll' },\n { aliases: ['sei'], chainKey: 'sei' },\n { aliases: ['solana'], chainKey: 'solana' },\n { aliases: ['soneium'], chainKey: 'soneium' },\n { aliases: ['sonic'], chainKey: 'sonic' },\n { aliases: ['shibarium'], chainKey: 'shibarium' },\n { aliases: ['treasure'], chainKey: 'treasure' },\n { aliases: ['unichain'], chainKey: 'unichain' },\n { aliases: ['wemix'], chainKey: 'wemix' },\n { aliases: ['worldchain'], chainKey: 'worldchain' },\n { aliases: ['xlayer'], chainKey: 'xlayer' },\n { aliases: ['zircuit'], chainKey: 'zircuit' },\n { aliases: ['zksync'], chainKey: 'zksync' },\n] as const satisfies ReadonlyArray<{ aliases: readonly string[]; chainKey: FinalityChainKey }>;\n\n/**\n * Known CAIP-2 chain IDs and their approximate CCIP finality times in\n * milliseconds.\n *\n * Finality reference:\n * https://docs.chain.link/ccip/ccip-execution-latency#finality-by-blockchain\n */\nexport const FINALITY_MS_BY_CHAIN_ID: Partial<Record<Caip2ChainId, number>> = {\n ...Object.fromEntries(\n Object.entries(FINALITY_CHAIN_KEY_BY_CHAIN_ID).map(([chainId, chainKey]) => [\n chainId,\n FINALITY_MS_BY_CHAIN_KEY[chainKey],\n ]),\n ),\n};\n\n/**\n * Chain-name aliases and their approximate CCIP finality times in\n * milliseconds.\n *\n * These aliases are used as a fallback when a chain ID is not present in\n * `FINALITY_MS_BY_CHAIN_ID`.\n *\n * Finality reference:\n * https://docs.chain.link/ccip/ccip-execution-latency#finality-by-blockchain\n */\nexport const FINALITY_MS_BY_CHAIN_NAME_ALIAS: ReadonlyArray<{ aliases: readonly string[]; finalityMs: number }> = [\n ...FINALITY_CHAIN_NAME_ALIASES.map(({ aliases, chainKey }) => ({\n aliases,\n finalityMs: FINALITY_MS_BY_CHAIN_KEY[chainKey],\n })),\n];\n\n// Solana slot time is ~400ms. Polling every 2.5s (~6 slots) balances\n// responsiveness against RPC rate-limits — fast enough to detect finalization\n// promptly, without hammering the endpoint.\nexport const SOLANA_POLLING_INTERVAL_MS = 2_500;\n\n// A Solana blockhash is valid for 150 slots (~60s at 400ms/slot). Validators\n// may hold a transaction for up to ~90s before dropping it. We set a 120s\n// timeout to provide a comfortable buffer above worst-case blockhash expiry,\n// ensuring we don't falsely time out a transaction that is still eligible for\n// inclusion in a block.\nexport const SOLANA_TX_TIMEOUT_MS = 120_000;\n\n// Solana finalizes a block once ≥31 confirmed blocks are built on top of it.\n// `getSignatureStatuses` returns the running `confirmations` count (0 → N),\n// then `null` once the status flips to `finalized`. We use 32 as the\n// required-confirmation target so the progress bar fills smoothly from 0 → 31\n// during polling and snaps to 32 (= done) only when finalization is confirmed.\nexport const SOLANA_REQUIRED_CONFIRMATIONS = 32;\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ const e=require(`../../constants.cjs`),t=require(`./_utils.cjs`),n=require(`./_handlers/analyze-support.cjs`),r=require(`./_handlers/estimate-native-fee.cjs`),i=require(`./_handlers/get-assets.cjs`),a=require(`./_handlers/get-bridgeable-assets.cjs`),o=require(`./_handlers/get-minimum-transfer-amount.cjs`),s=require(`./_handlers/stream-quotes.cjs`),c=require(`./constants.cjs`),l=require(`./_handlers/track-transfer.cjs`),u=require(`./_handlers/transfer-asset.cjs`);async function d({apiBaseUrl:d,apiToken:f,appId:p,disableCrossChainSwaps:m,environment:h,evmSigner:g,fetch:_,getTargetChainAssets:v,solanaSigner:y}){let b={apiBaseUrl:new URL(d??c.DEFAULT_MARKR_API_URL),apiToken:f,fetch:_},[x,S]=await Promise.all([t.getPartnerFeeBps(b),t.getSupportedChains(b,m)]),C=await t.getSupportedTokens(b,S),w=n.analyzeSupportFactory({hasSolanaSigner:!!y,supportedChains:S});return{analyzeSupport:w,estimateNativeFee:r.estimateNativeFeeFactory({apiOptions:b,appId:p}),getAssets:i.getAssetsFactory({supportedChains:S,supportedTokens:C}),getBridgeableAssets:a.getBridgeableAssetsFactory({getTargetChainAssets:v,supportedChains:S}),getMinimumTransferAmount:o.getMinimumTransferAmountFactory({analyzeSupport:w,partnerFeeBps:x}),getSupportedChains:async()=>{let e=new Map;for(let[t,{crossChainTargetChainIds:n,swapEnabled:r}]of S.entries()){if(!r&&n.size===0)continue;let i=new Set;r&&i.add(t);for(let e of n)e!==t&&S.has(e)&&i.add(e);i.size>0&&e.set(t,i)}return e},streamQuotes:s.streamQuotesFactory({apiOptions:b,appId:p,partnerFeeBps:x}),trackTransfer:l.trackTransferFactory({apiOptions:b}),transferAsset:u.transferAssetFactory({apiOptions:b,appId:p,environment:h,evmSigner:g,solanaSigner:y}),type:e.ServiceType.MARKR}}exports.createMarkrService=d;
2
+ //# sourceMappingURL=markr-service.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markr-service.cjs","names":["DEFAULT_MARKR_API_URL","getPartnerFeeBps","getSupportedChains","getSupportedTokens","analyzeSupportFactory","estimateNativeFeeFactory","getAssetsFactory","getBridgeableAssetsFactory","getMinimumTransferAmountFactory","streamQuotesFactory","trackTransferFactory","transferAssetFactory","ServiceType"],"sources":["../../../src/transfer-service/markr/markr-service.ts"],"sourcesContent":["import { ServiceType } from '../../constants';\nimport type { Environment } from '../../constants';\nimport type { Asset } from '../../types/asset';\nimport type { EvmSigner, SolanaSigner } from '../../types/signer';\nimport type { MutableGetSupportedChainsResult, TransferService } from '../../types/service';\nimport { analyzeSupportFactory } from './_handlers/analyze-support';\nimport { estimateNativeFeeFactory } from './_handlers/estimate-native-fee';\nimport { getAssetsFactory } from './_handlers/get-assets';\nimport { getBridgeableAssetsFactory } from './_handlers/get-bridgeable-assets';\nimport { getMinimumTransferAmountFactory } from './_handlers/get-minimum-transfer-amount';\nimport { streamQuotesFactory } from './_handlers/stream-quotes';\nimport { trackTransferFactory } from './_handlers/track-transfer';\nimport { transferAssetFactory } from './_handlers/transfer-asset';\nimport { getPartnerFeeBps, getSupportedChains, getSupportedTokens } from './_utils';\nimport { DEFAULT_MARKR_API_URL } from './constants';\nimport type { ApiOptions } from './_api';\nimport type { Caip2ChainId } from '../../types/caip';\nimport type { Fetch } from '../../types/utility-types';\n\nexport interface MarkrServiceOptions {\n apiBaseUrl?: string;\n apiToken?: string;\n appId: string;\n disableCrossChainSwaps?: boolean;\n environment: Environment;\n evmSigner: EvmSigner;\n fetch?: Fetch;\n getTargetChainAssets: (targetChainId: Caip2ChainId) => Promise<readonly Asset[]>;\n solanaSigner?: SolanaSigner;\n}\n\nexport async function createMarkrService({\n apiBaseUrl: apiBaseUrlString,\n apiToken,\n appId,\n disableCrossChainSwaps,\n environment,\n evmSigner,\n fetch: customFetch,\n getTargetChainAssets,\n solanaSigner,\n}: MarkrServiceOptions): Promise<TransferService> {\n const apiBaseUrl = new URL(apiBaseUrlString ?? DEFAULT_MARKR_API_URL);\n\n const apiOptions: ApiOptions = {\n apiBaseUrl,\n apiToken,\n fetch: customFetch,\n };\n\n // Parallelize fetching.\n const [partnerFeeBps, supportedChains] = await Promise.all([\n getPartnerFeeBps(apiOptions),\n getSupportedChains(apiOptions, disableCrossChainSwaps),\n ]);\n\n const supportedTokens = await getSupportedTokens(apiOptions, supportedChains);\n\n const hasSolanaSigner = Boolean(solanaSigner);\n const analyzeSupport = analyzeSupportFactory({ hasSolanaSigner, supportedChains });\n\n return {\n analyzeSupport,\n estimateNativeFee: estimateNativeFeeFactory({ apiOptions, appId }),\n getAssets: getAssetsFactory({ supportedChains, supportedTokens }),\n getBridgeableAssets: getBridgeableAssetsFactory({ getTargetChainAssets, supportedChains }),\n getMinimumTransferAmount: getMinimumTransferAmountFactory({\n analyzeSupport,\n partnerFeeBps,\n }),\n getSupportedChains: async () => {\n const supportedChainsMap: MutableGetSupportedChainsResult = new Map();\n\n for (const [sourceChainId, { crossChainTargetChainIds, swapEnabled }] of supportedChains.entries()) {\n if (!swapEnabled && crossChainTargetChainIds.size === 0) {\n // If neither swap nor cross-chain swap is enabled, skip this chain as a source.\n continue;\n }\n\n const supportedTargetChainIds = new Set<Caip2ChainId>();\n\n // Add self as supported target if same-chain swap is enabled.\n if (swapEnabled) {\n supportedTargetChainIds.add(sourceChainId);\n }\n\n for (const chainId of crossChainTargetChainIds) {\n if (chainId !== sourceChainId && supportedChains.has(chainId)) {\n supportedTargetChainIds.add(chainId);\n }\n }\n\n if (supportedTargetChainIds.size > 0) {\n supportedChainsMap.set(sourceChainId, supportedTargetChainIds);\n }\n }\n\n return supportedChainsMap;\n },\n streamQuotes: streamQuotesFactory({ apiOptions, appId, partnerFeeBps }),\n trackTransfer: trackTransferFactory({ apiOptions }),\n transferAsset: transferAssetFactory({\n apiOptions,\n appId,\n environment,\n evmSigner,\n solanaSigner,\n }),\n type: ServiceType.MARKR,\n } satisfies TransferService;\n}\n"],"mappings":"mdA+BA,eAAsB,EAAmB,CACvC,WAAY,EACZ,WACA,QACA,yBACA,cACA,YACA,MAAO,EACP,uBACA,gBACgD,CAGhD,IAAM,EAAyB,CAC7B,WAHiB,IAAI,IAAI,GAAoBA,EAAAA,sBAAsB,CAInE,WACA,MAAO,EACR,CAGK,CAAC,EAAe,GAAmB,MAAM,QAAQ,IAAI,CACzDC,EAAAA,iBAAiB,EAAW,CAC5BC,EAAAA,mBAAmB,EAAY,EAAuB,CACvD,CAAC,CAEI,EAAkB,MAAMC,EAAAA,mBAAmB,EAAY,EAAgB,CAGvE,EAAiBC,EAAAA,sBAAsB,CAAE,gBADvB,EAAQ,EACgC,kBAAiB,CAAC,CAElF,MAAO,CACL,iBACA,kBAAmBC,EAAAA,yBAAyB,CAAE,aAAY,QAAO,CAAC,CAClE,UAAWC,EAAAA,iBAAiB,CAAE,kBAAiB,kBAAiB,CAAC,CACjE,oBAAqBC,EAAAA,2BAA2B,CAAE,uBAAsB,kBAAiB,CAAC,CAC1F,yBAA0BC,EAAAA,gCAAgC,CACxD,iBACA,gBACD,CAAC,CACF,mBAAoB,SAAY,CAC9B,IAAM,EAAsD,IAAI,IAEhE,IAAK,GAAM,CAAC,EAAe,CAAE,2BAA0B,kBAAkB,EAAgB,SAAS,CAAE,CAClG,GAAI,CAAC,GAAe,EAAyB,OAAS,EAEpD,SAGF,IAAM,EAA0B,IAAI,IAGhC,GACF,EAAwB,IAAI,EAAc,CAG5C,IAAK,IAAM,KAAW,EAChB,IAAY,GAAiB,EAAgB,IAAI,EAAQ,EAC3D,EAAwB,IAAI,EAAQ,CAIpC,EAAwB,KAAO,GACjC,EAAmB,IAAI,EAAe,EAAwB,CAIlE,OAAO,GAET,aAAcC,EAAAA,oBAAoB,CAAE,aAAY,QAAO,gBAAe,CAAC,CACvE,cAAeC,EAAAA,qBAAqB,CAAE,aAAY,CAAC,CACnD,cAAeC,EAAAA,qBAAqB,CAClC,aACA,QACA,cACA,YACA,eACD,CAAC,CACF,KAAMC,EAAAA,YAAY,MACnB"}
@@ -0,0 +1,2 @@
1
+ import{ServiceType as e}from"../../constants.js";import{getPartnerFeeBps as t,getSupportedChains as n,getSupportedTokens as r}from"./_utils.js";import{analyzeSupportFactory as i}from"./_handlers/analyze-support.js";import{estimateNativeFeeFactory as a}from"./_handlers/estimate-native-fee.js";import{getAssetsFactory as o}from"./_handlers/get-assets.js";import{getBridgeableAssetsFactory as s}from"./_handlers/get-bridgeable-assets.js";import{getMinimumTransferAmountFactory as c}from"./_handlers/get-minimum-transfer-amount.js";import{streamQuotesFactory as l}from"./_handlers/stream-quotes.js";import{DEFAULT_MARKR_API_URL as u}from"./constants.js";import{trackTransferFactory as d}from"./_handlers/track-transfer.js";import{transferAssetFactory as f}from"./_handlers/transfer-asset.js";async function p({apiBaseUrl:p,apiToken:m,appId:h,disableCrossChainSwaps:g,environment:_,evmSigner:v,fetch:y,getTargetChainAssets:b,solanaSigner:x}){let S={apiBaseUrl:new URL(p??u),apiToken:m,fetch:y},[C,w]=await Promise.all([t(S),n(S,g)]),T=await r(S,w),E=i({hasSolanaSigner:!!x,supportedChains:w});return{analyzeSupport:E,estimateNativeFee:a({apiOptions:S,appId:h}),getAssets:o({supportedChains:w,supportedTokens:T}),getBridgeableAssets:s({getTargetChainAssets:b,supportedChains:w}),getMinimumTransferAmount:c({analyzeSupport:E,partnerFeeBps:C}),getSupportedChains:async()=>{let e=new Map;for(let[t,{crossChainTargetChainIds:n,swapEnabled:r}]of w.entries()){if(!r&&n.size===0)continue;let i=new Set;r&&i.add(t);for(let e of n)e!==t&&w.has(e)&&i.add(e);i.size>0&&e.set(t,i)}return e},streamQuotes:l({apiOptions:S,appId:h,partnerFeeBps:C}),trackTransfer:d({apiOptions:S}),transferAsset:f({apiOptions:S,appId:h,environment:_,evmSigner:v,solanaSigner:x}),type:e.MARKR}}export{p as createMarkrService};
2
+ //# sourceMappingURL=markr-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markr-service.js","names":[],"sources":["../../../src/transfer-service/markr/markr-service.ts"],"sourcesContent":["import { ServiceType } from '../../constants';\nimport type { Environment } from '../../constants';\nimport type { Asset } from '../../types/asset';\nimport type { EvmSigner, SolanaSigner } from '../../types/signer';\nimport type { MutableGetSupportedChainsResult, TransferService } from '../../types/service';\nimport { analyzeSupportFactory } from './_handlers/analyze-support';\nimport { estimateNativeFeeFactory } from './_handlers/estimate-native-fee';\nimport { getAssetsFactory } from './_handlers/get-assets';\nimport { getBridgeableAssetsFactory } from './_handlers/get-bridgeable-assets';\nimport { getMinimumTransferAmountFactory } from './_handlers/get-minimum-transfer-amount';\nimport { streamQuotesFactory } from './_handlers/stream-quotes';\nimport { trackTransferFactory } from './_handlers/track-transfer';\nimport { transferAssetFactory } from './_handlers/transfer-asset';\nimport { getPartnerFeeBps, getSupportedChains, getSupportedTokens } from './_utils';\nimport { DEFAULT_MARKR_API_URL } from './constants';\nimport type { ApiOptions } from './_api';\nimport type { Caip2ChainId } from '../../types/caip';\nimport type { Fetch } from '../../types/utility-types';\n\nexport interface MarkrServiceOptions {\n apiBaseUrl?: string;\n apiToken?: string;\n appId: string;\n disableCrossChainSwaps?: boolean;\n environment: Environment;\n evmSigner: EvmSigner;\n fetch?: Fetch;\n getTargetChainAssets: (targetChainId: Caip2ChainId) => Promise<readonly Asset[]>;\n solanaSigner?: SolanaSigner;\n}\n\nexport async function createMarkrService({\n apiBaseUrl: apiBaseUrlString,\n apiToken,\n appId,\n disableCrossChainSwaps,\n environment,\n evmSigner,\n fetch: customFetch,\n getTargetChainAssets,\n solanaSigner,\n}: MarkrServiceOptions): Promise<TransferService> {\n const apiBaseUrl = new URL(apiBaseUrlString ?? DEFAULT_MARKR_API_URL);\n\n const apiOptions: ApiOptions = {\n apiBaseUrl,\n apiToken,\n fetch: customFetch,\n };\n\n // Parallelize fetching.\n const [partnerFeeBps, supportedChains] = await Promise.all([\n getPartnerFeeBps(apiOptions),\n getSupportedChains(apiOptions, disableCrossChainSwaps),\n ]);\n\n const supportedTokens = await getSupportedTokens(apiOptions, supportedChains);\n\n const hasSolanaSigner = Boolean(solanaSigner);\n const analyzeSupport = analyzeSupportFactory({ hasSolanaSigner, supportedChains });\n\n return {\n analyzeSupport,\n estimateNativeFee: estimateNativeFeeFactory({ apiOptions, appId }),\n getAssets: getAssetsFactory({ supportedChains, supportedTokens }),\n getBridgeableAssets: getBridgeableAssetsFactory({ getTargetChainAssets, supportedChains }),\n getMinimumTransferAmount: getMinimumTransferAmountFactory({\n analyzeSupport,\n partnerFeeBps,\n }),\n getSupportedChains: async () => {\n const supportedChainsMap: MutableGetSupportedChainsResult = new Map();\n\n for (const [sourceChainId, { crossChainTargetChainIds, swapEnabled }] of supportedChains.entries()) {\n if (!swapEnabled && crossChainTargetChainIds.size === 0) {\n // If neither swap nor cross-chain swap is enabled, skip this chain as a source.\n continue;\n }\n\n const supportedTargetChainIds = new Set<Caip2ChainId>();\n\n // Add self as supported target if same-chain swap is enabled.\n if (swapEnabled) {\n supportedTargetChainIds.add(sourceChainId);\n }\n\n for (const chainId of crossChainTargetChainIds) {\n if (chainId !== sourceChainId && supportedChains.has(chainId)) {\n supportedTargetChainIds.add(chainId);\n }\n }\n\n if (supportedTargetChainIds.size > 0) {\n supportedChainsMap.set(sourceChainId, supportedTargetChainIds);\n }\n }\n\n return supportedChainsMap;\n },\n streamQuotes: streamQuotesFactory({ apiOptions, appId, partnerFeeBps }),\n trackTransfer: trackTransferFactory({ apiOptions }),\n transferAsset: transferAssetFactory({\n apiOptions,\n appId,\n environment,\n evmSigner,\n solanaSigner,\n }),\n type: ServiceType.MARKR,\n } satisfies TransferService;\n}\n"],"mappings":"qxBA+BA,eAAsB,EAAmB,CACvC,WAAY,EACZ,WACA,QACA,yBACA,cACA,YACA,MAAO,EACP,uBACA,gBACgD,CAGhD,IAAM,EAAyB,CAC7B,WAHiB,IAAI,IAAI,GAAoB,EAAsB,CAInE,WACA,MAAO,EACR,CAGK,CAAC,EAAe,GAAmB,MAAM,QAAQ,IAAI,CACzD,EAAiB,EAAW,CAC5B,EAAmB,EAAY,EAAuB,CACvD,CAAC,CAEI,EAAkB,MAAM,EAAmB,EAAY,EAAgB,CAGvE,EAAiB,EAAsB,CAAE,gBADvB,EAAQ,EACgC,kBAAiB,CAAC,CAElF,MAAO,CACL,iBACA,kBAAmB,EAAyB,CAAE,aAAY,QAAO,CAAC,CAClE,UAAW,EAAiB,CAAE,kBAAiB,kBAAiB,CAAC,CACjE,oBAAqB,EAA2B,CAAE,uBAAsB,kBAAiB,CAAC,CAC1F,yBAA0B,EAAgC,CACxD,iBACA,gBACD,CAAC,CACF,mBAAoB,SAAY,CAC9B,IAAM,EAAsD,IAAI,IAEhE,IAAK,GAAM,CAAC,EAAe,CAAE,2BAA0B,kBAAkB,EAAgB,SAAS,CAAE,CAClG,GAAI,CAAC,GAAe,EAAyB,OAAS,EAEpD,SAGF,IAAM,EAA0B,IAAI,IAGhC,GACF,EAAwB,IAAI,EAAc,CAG5C,IAAK,IAAM,KAAW,EAChB,IAAY,GAAiB,EAAgB,IAAI,EAAQ,EAC3D,EAAwB,IAAI,EAAQ,CAIpC,EAAwB,KAAO,GACjC,EAAmB,IAAI,EAAe,EAAwB,CAIlE,OAAO,GAET,aAAc,EAAoB,CAAE,aAAY,QAAO,gBAAe,CAAC,CACvE,cAAe,EAAqB,CAAE,aAAY,CAAC,CACnD,cAAe,EAAqB,CAClC,aACA,QACA,cACA,YACA,eACD,CAAC,CACF,KAAM,EAAY,MACnB"}
@@ -0,0 +1,2 @@
1
+ require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`../utils/bitcoin-address.cjs`);let t=require(`zod`),n=require(`viem`),r=require(`@solana/kit`);const i=t.z.string().refine(n.isAddress,{message:`Invalid EVM address`}).transform(e=>e),a=t.z.string().refine(n.isHex,{message:`Invalid hex string`}).transform(e=>e),o=t.z.string().refine(e.isBech32Address,{message:`Invalid BTC address`}),s=t.z.string().refine(n.isHash,{message:`Invalid hash string`}).transform(e=>e),c=t.z.string().refine(r.isAddress,{message:`Invalid Solana address`}).transform(e=>e),l=t.z.string().refine(r.isSignature,{message:`Invalid Solana signature`}).transform(e=>e);exports.BtcAddressSchema=o,exports.EvmAddressSchema=i,exports.HashSchema=s,exports.HexSchema=a,exports.SolAddressSchema=c,exports.SolSignatureSchema=l;
2
+ //# sourceMappingURL=service-schemas.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-schemas.cjs","names":["z","isEvmAddress","isHex","isBech32Address","isHash","isSolAddress","isSignature"],"sources":["../../src/transfer-service/service-schemas.ts"],"sourcesContent":["import { type Signature, type Address as SolAddress, isSignature, isAddress as isSolAddress } from '@solana/kit';\nimport { z } from 'zod';\nimport { isAddress as isEvmAddress, isHash, isHex, type Address as EvmAddress, type Hash } from 'viem';\nimport type { Hex } from '../types/signer';\nimport { isBech32Address } from '../utils/bitcoin-address';\n\nexport const EvmAddressSchema: z.ZodType<EvmAddress> = z\n .string()\n .refine(isEvmAddress, { message: 'Invalid EVM address' })\n .transform((addr) => addr as EvmAddress);\n\nexport const HexSchema: z.ZodType<Hex> = z\n .string()\n .refine(isHex, { message: 'Invalid hex string' })\n .transform((hex) => hex as Hex);\n\nexport const BtcAddressSchema: z.ZodType<string> = z\n .string()\n .refine(isBech32Address, { message: 'Invalid BTC address' });\n\nexport const HashSchema: z.ZodType<Hash> = z\n .string()\n .refine(isHash, { message: 'Invalid hash string' })\n .transform((hash) => hash as Hash);\n\nexport const SolAddressSchema: z.ZodType<SolAddress> = z\n .string()\n .refine(isSolAddress, { message: 'Invalid Solana address' })\n .transform((addr) => addr as SolAddress);\n\nexport const SolSignatureSchema: z.ZodType<Signature> = z\n .string()\n .refine(isSignature, { message: 'Invalid Solana signature' })\n .transform((sig) => sig as Signature);\n"],"mappings":"6JAMA,MAAa,EAA0CA,EAAAA,EACpD,QAAQ,CACR,OAAOC,EAAAA,UAAc,CAAE,QAAS,sBAAuB,CAAC,CACxD,UAAW,GAAS,EAAmB,CAE7B,EAA4BD,EAAAA,EACtC,QAAQ,CACR,OAAOE,EAAAA,MAAO,CAAE,QAAS,qBAAsB,CAAC,CAChD,UAAW,GAAQ,EAAW,CAEpB,EAAsCF,EAAAA,EAChD,QAAQ,CACR,OAAOG,EAAAA,gBAAiB,CAAE,QAAS,sBAAuB,CAAC,CAEjD,EAA8BH,EAAAA,EACxC,QAAQ,CACR,OAAOI,EAAAA,OAAQ,CAAE,QAAS,sBAAuB,CAAC,CAClD,UAAW,GAAS,EAAa,CAEvB,EAA0CJ,EAAAA,EACpD,QAAQ,CACR,OAAOK,EAAAA,UAAc,CAAE,QAAS,yBAA0B,CAAC,CAC3D,UAAW,GAAS,EAAmB,CAE7B,EAA2CL,EAAAA,EACrD,QAAQ,CACR,OAAOM,EAAAA,YAAa,CAAE,QAAS,2BAA4B,CAAC,CAC5D,UAAW,GAAQ,EAAiB"}
@@ -0,0 +1,2 @@
1
+ import{isBech32Address as e}from"../utils/bitcoin-address.js";import{z as t}from"zod";import{isAddress as n,isHash as r,isHex as i}from"viem";import{isAddress as a,isSignature as o}from"@solana/kit";const s=t.string().refine(n,{message:`Invalid EVM address`}).transform(e=>e),c=t.string().refine(i,{message:`Invalid hex string`}).transform(e=>e),l=t.string().refine(e,{message:`Invalid BTC address`}),u=t.string().refine(r,{message:`Invalid hash string`}).transform(e=>e),d=t.string().refine(a,{message:`Invalid Solana address`}).transform(e=>e),f=t.string().refine(o,{message:`Invalid Solana signature`}).transform(e=>e);export{l as BtcAddressSchema,s as EvmAddressSchema,u as HashSchema,c as HexSchema,d as SolAddressSchema,f as SolSignatureSchema};
2
+ //# sourceMappingURL=service-schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-schemas.js","names":["isEvmAddress","isSolAddress"],"sources":["../../src/transfer-service/service-schemas.ts"],"sourcesContent":["import { type Signature, type Address as SolAddress, isSignature, isAddress as isSolAddress } from '@solana/kit';\nimport { z } from 'zod';\nimport { isAddress as isEvmAddress, isHash, isHex, type Address as EvmAddress, type Hash } from 'viem';\nimport type { Hex } from '../types/signer';\nimport { isBech32Address } from '../utils/bitcoin-address';\n\nexport const EvmAddressSchema: z.ZodType<EvmAddress> = z\n .string()\n .refine(isEvmAddress, { message: 'Invalid EVM address' })\n .transform((addr) => addr as EvmAddress);\n\nexport const HexSchema: z.ZodType<Hex> = z\n .string()\n .refine(isHex, { message: 'Invalid hex string' })\n .transform((hex) => hex as Hex);\n\nexport const BtcAddressSchema: z.ZodType<string> = z\n .string()\n .refine(isBech32Address, { message: 'Invalid BTC address' });\n\nexport const HashSchema: z.ZodType<Hash> = z\n .string()\n .refine(isHash, { message: 'Invalid hash string' })\n .transform((hash) => hash as Hash);\n\nexport const SolAddressSchema: z.ZodType<SolAddress> = z\n .string()\n .refine(isSolAddress, { message: 'Invalid Solana address' })\n .transform((addr) => addr as SolAddress);\n\nexport const SolSignatureSchema: z.ZodType<Signature> = z\n .string()\n .refine(isSignature, { message: 'Invalid Solana signature' })\n .transform((sig) => sig as Signature);\n"],"mappings":"uMAMA,MAAa,EAA0C,EACpD,QAAQ,CACR,OAAOA,EAAc,CAAE,QAAS,sBAAuB,CAAC,CACxD,UAAW,GAAS,EAAmB,CAE7B,EAA4B,EACtC,QAAQ,CACR,OAAO,EAAO,CAAE,QAAS,qBAAsB,CAAC,CAChD,UAAW,GAAQ,EAAW,CAEpB,EAAsC,EAChD,QAAQ,CACR,OAAO,EAAiB,CAAE,QAAS,sBAAuB,CAAC,CAEjD,EAA8B,EACxC,QAAQ,CACR,OAAO,EAAQ,CAAE,QAAS,sBAAuB,CAAC,CAClD,UAAW,GAAS,EAAa,CAEvB,EAA0C,EACpD,QAAQ,CACR,OAAOC,EAAc,CAAE,QAAS,yBAA0B,CAAC,CAC3D,UAAW,GAAS,EAAmB,CAE7B,EAA2C,EACrD,QAAQ,CACR,OAAO,EAAa,CAAE,QAAS,2BAA4B,CAAC,CAC5D,UAAW,GAAQ,EAAiB"}
@@ -0,0 +1,2 @@
1
+ const e=require(`../_utils.cjs`);function t({chainConfigs:t}){return({sourceAsset:n,sourceChainId:r,targetAsset:i,targetChainId:a})=>r===a?e.getWrapDirection(n,i,r,t)!==null:!1}exports.analyzeSupportFactory=t;
2
+ //# sourceMappingURL=analyze-support.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze-support.cjs","names":["getWrapDirection"],"sources":["../../../../src/transfer-service/wrap-unwrap/_handlers/analyze-support.ts"],"sourcesContent":["import type { TransferService } from '../../../types/service';\nimport type { Caip2ChainId } from '../../../types/caip';\nimport type { WrapChainConfig } from '../constants';\nimport { getWrapDirection } from '../_utils';\n\nexport interface AnalyzeSupportFactoryConfig {\n chainConfigs: ReadonlyMap<Caip2ChainId, WrapChainConfig>;\n}\n\nexport function analyzeSupportFactory({\n chainConfigs,\n}: AnalyzeSupportFactoryConfig): TransferService['analyzeSupport'] {\n return ({ sourceAsset, sourceChainId, targetAsset, targetChainId }) => {\n if (sourceChainId !== targetChainId) {\n return false;\n }\n\n return getWrapDirection(sourceAsset, targetAsset, sourceChainId, chainConfigs) !== null;\n };\n}\n"],"mappings":"iCASA,SAAgB,EAAsB,CACpC,gBACiE,CACjE,OAAQ,CAAE,cAAa,gBAAe,cAAa,mBAC7C,IAAkB,EAIfA,EAAAA,iBAAiB,EAAa,EAAa,EAAe,EAAa,GAAK,KAH1E"}
@@ -0,0 +1,2 @@
1
+ import{getWrapDirection as e}from"../_utils.js";function t({chainConfigs:t}){return({sourceAsset:n,sourceChainId:r,targetAsset:i,targetChainId:a})=>r===a?e(n,i,r,t)!==null:!1}export{t as analyzeSupportFactory};
2
+ //# sourceMappingURL=analyze-support.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze-support.js","names":[],"sources":["../../../../src/transfer-service/wrap-unwrap/_handlers/analyze-support.ts"],"sourcesContent":["import type { TransferService } from '../../../types/service';\nimport type { Caip2ChainId } from '../../../types/caip';\nimport type { WrapChainConfig } from '../constants';\nimport { getWrapDirection } from '../_utils';\n\nexport interface AnalyzeSupportFactoryConfig {\n chainConfigs: ReadonlyMap<Caip2ChainId, WrapChainConfig>;\n}\n\nexport function analyzeSupportFactory({\n chainConfigs,\n}: AnalyzeSupportFactoryConfig): TransferService['analyzeSupport'] {\n return ({ sourceAsset, sourceChainId, targetAsset, targetChainId }) => {\n if (sourceChainId !== targetChainId) {\n return false;\n }\n\n return getWrapDirection(sourceAsset, targetAsset, sourceChainId, chainConfigs) !== null;\n };\n}\n"],"mappings":"gDASA,SAAgB,EAAsB,CACpC,gBACiE,CACjE,OAAQ,CAAE,cAAa,gBAAe,cAAa,mBAC7C,IAAkB,EAIf,EAAiB,EAAa,EAAa,EAAe,EAAa,GAAK,KAH1E"}
@@ -0,0 +1,2 @@
1
+ require(`../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../../constants.cjs`),t=require(`../../../errors.cjs`),n=require(`../../_utils.cjs`),r=require(`../../_evm-gas.cjs`),i=require(`../_utils.cjs`);let a=require(`viem`);function o({chainConfigs:o}){return async(s,c)=>{if(s.serviceType!==e.ServiceType.WRAP_UNWRAP)throw new t.SdkError(t.ErrorReason.INCORRECT_PROVIDER_PROVIDED,t.ErrorCode.INVALID_PARAMS);let l=s.fromAddress;if(!(0,a.isAddress)(l))throw new t.SdkError(t.ErrorReason.INVALID_PARAMS,t.ErrorCode.INVALID_PARAMS,{details:`fromAddress is not a valid EVM address.`});let u=s.sourceChain.chainId,d=i.getWrapDirection(s.assetIn,s.assetOut,u,o);if(!d)throw new t.SdkError(t.ErrorReason.INVALID_PARAMS,t.ErrorCode.INVALID_PARAMS,{details:`Quote does not represent a valid wrap/unwrap pair.`});let f=n.getEvmClientForChain({chain:s.sourceChain}),p=await i.estimateWrapUnwrapGas({direction:d,amountIn:s.amountIn,contractAddress:i.getWrapperContractAddress(u,o),fromAddress:l,client:f,estimateGasMarginBps:c?.feeUnitsMarginBps}),m=await r.estimateEvmFeesPerGas(f,s.sourceChain,c?.overrides?.feeRateTier),h=c?.overrides?.maxFeePerGas??m.maxFeePerGas,g=c?.overrides?.maxPriorityFeePerGas??m.maxPriorityFeePerGas,_=p*h;return{asset:s.sourceChain.networkToken,totalFee:_,meta:{maxFeePerGas:h,maxPriorityFeePerGas:g}}}}exports.estimateNativeFeeFactory=o;
2
+ //# sourceMappingURL=estimate-native-fee.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"estimate-native-fee.cjs","names":["ServiceType","SdkError","ErrorReason","ErrorCode","getWrapDirection","getEvmClientForChain","estimateWrapUnwrapGas","getWrapperContractAddress","estimateEvmFeesPerGas"],"sources":["../../../../src/transfer-service/wrap-unwrap/_handlers/estimate-native-fee.ts"],"sourcesContent":["import { isAddress } from 'viem';\nimport { ServiceType } from '../../../constants';\nimport { ErrorCode, ErrorReason, SdkError } from '../../../errors';\nimport type { TransferService } from '../../../types/service';\nimport type { Caip2ChainId } from '../../../types/caip';\nimport { getWrapDirection, getWrapperContractAddress, estimateWrapUnwrapGas } from '../_utils';\nimport type { WrapChainConfig } from '../constants';\nimport { getEvmClientForChain } from '../../_utils';\nimport { estimateEvmFeesPerGas } from '../../_evm-gas';\n\nexport interface EstimateNativeFeeFactoryConfig {\n chainConfigs: ReadonlyMap<Caip2ChainId, WrapChainConfig>;\n}\n\nexport function estimateNativeFeeFactory({\n chainConfigs,\n}: EstimateNativeFeeFactoryConfig): TransferService['estimateNativeFee'] {\n return async (quote, options) => {\n if (quote.serviceType !== ServiceType.WRAP_UNWRAP) {\n throw new SdkError(ErrorReason.INCORRECT_PROVIDER_PROVIDED, ErrorCode.INVALID_PARAMS);\n }\n\n const fromAddress = quote.fromAddress;\n if (!isAddress(fromAddress)) {\n throw new SdkError(ErrorReason.INVALID_PARAMS, ErrorCode.INVALID_PARAMS, {\n details: 'fromAddress is not a valid EVM address.',\n });\n }\n\n const chainId = quote.sourceChain.chainId;\n const direction = getWrapDirection(quote.assetIn, quote.assetOut, chainId, chainConfigs);\n if (!direction) {\n throw new SdkError(ErrorReason.INVALID_PARAMS, ErrorCode.INVALID_PARAMS, {\n details: 'Quote does not represent a valid wrap/unwrap pair.',\n });\n }\n\n const client = getEvmClientForChain({ chain: quote.sourceChain });\n\n const gasWithMargin = await estimateWrapUnwrapGas({\n direction,\n amountIn: quote.amountIn,\n contractAddress: getWrapperContractAddress(chainId, chainConfigs),\n fromAddress,\n client,\n estimateGasMarginBps: options?.feeUnitsMarginBps,\n });\n\n const fees = await estimateEvmFeesPerGas(client, 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 = gasWithMargin * maxFeePerGas;\n\n return {\n asset: quote.sourceChain.networkToken,\n totalFee,\n meta: {\n maxFeePerGas,\n maxPriorityFeePerGas,\n },\n };\n };\n}\n"],"mappings":"6OAcA,SAAgB,EAAyB,CACvC,gBACuE,CACvE,OAAO,MAAO,EAAO,IAAY,CAC/B,GAAI,EAAM,cAAgBA,EAAAA,YAAY,YACpC,MAAM,IAAIC,EAAAA,SAASC,EAAAA,YAAY,4BAA6BC,EAAAA,UAAU,eAAe,CAGvF,IAAM,EAAc,EAAM,YAC1B,GAAI,EAAA,EAAA,EAAA,WAAW,EAAY,CACzB,MAAM,IAAIF,EAAAA,SAASC,EAAAA,YAAY,eAAgBC,EAAAA,UAAU,eAAgB,CACvE,QAAS,0CACV,CAAC,CAGJ,IAAM,EAAU,EAAM,YAAY,QAC5B,EAAYC,EAAAA,iBAAiB,EAAM,QAAS,EAAM,SAAU,EAAS,EAAa,CACxF,GAAI,CAAC,EACH,MAAM,IAAIH,EAAAA,SAASC,EAAAA,YAAY,eAAgBC,EAAAA,UAAU,eAAgB,CACvE,QAAS,qDACV,CAAC,CAGJ,IAAM,EAASE,EAAAA,qBAAqB,CAAE,MAAO,EAAM,YAAa,CAAC,CAE3D,EAAgB,MAAMC,EAAAA,sBAAsB,CAChD,YACA,SAAU,EAAM,SAChB,gBAAiBC,EAAAA,0BAA0B,EAAS,EAAa,CACjE,cACA,SACA,qBAAsB,GAAS,kBAChC,CAAC,CAEI,EAAO,MAAMC,EAAAA,sBAAsB,EAAQ,EAAM,YAAa,GAAS,WAAW,YAAY,CAE9F,EAAe,GAAS,WAAW,cAAgB,EAAK,aACxD,EAAuB,GAAS,WAAW,sBAAwB,EAAK,qBAExE,EAAW,EAAgB,EAEjC,MAAO,CACL,MAAO,EAAM,YAAY,aACzB,WACA,KAAM,CACJ,eACA,uBACD,CACF"}
@@ -0,0 +1,2 @@
1
+ import{ServiceType as e}from"../../../constants.js";import{ErrorCode as t,ErrorReason as n,SdkError as r}from"../../../errors.js";import{getEvmClientForChain as i}from"../../_utils.js";import{estimateEvmFeesPerGas as a}from"../../_evm-gas.js";import{estimateWrapUnwrapGas as o,getWrapDirection as s,getWrapperContractAddress as c}from"../_utils.js";import{isAddress as l}from"viem";function u({chainConfigs:u}){return async(d,f)=>{if(d.serviceType!==e.WRAP_UNWRAP)throw new r(n.INCORRECT_PROVIDER_PROVIDED,t.INVALID_PARAMS);let p=d.fromAddress;if(!l(p))throw new r(n.INVALID_PARAMS,t.INVALID_PARAMS,{details:`fromAddress is not a valid EVM address.`});let m=d.sourceChain.chainId,h=s(d.assetIn,d.assetOut,m,u);if(!h)throw new r(n.INVALID_PARAMS,t.INVALID_PARAMS,{details:`Quote does not represent a valid wrap/unwrap pair.`});let g=i({chain:d.sourceChain}),_=await o({direction:h,amountIn:d.amountIn,contractAddress:c(m,u),fromAddress:p,client:g,estimateGasMarginBps:f?.feeUnitsMarginBps}),v=await a(g,d.sourceChain,f?.overrides?.feeRateTier),y=f?.overrides?.maxFeePerGas??v.maxFeePerGas,b=f?.overrides?.maxPriorityFeePerGas??v.maxPriorityFeePerGas,x=_*y;return{asset:d.sourceChain.networkToken,totalFee:x,meta:{maxFeePerGas:y,maxPriorityFeePerGas:b}}}}export{u as estimateNativeFeeFactory};
2
+ //# sourceMappingURL=estimate-native-fee.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"estimate-native-fee.js","names":[],"sources":["../../../../src/transfer-service/wrap-unwrap/_handlers/estimate-native-fee.ts"],"sourcesContent":["import { isAddress } from 'viem';\nimport { ServiceType } from '../../../constants';\nimport { ErrorCode, ErrorReason, SdkError } from '../../../errors';\nimport type { TransferService } from '../../../types/service';\nimport type { Caip2ChainId } from '../../../types/caip';\nimport { getWrapDirection, getWrapperContractAddress, estimateWrapUnwrapGas } from '../_utils';\nimport type { WrapChainConfig } from '../constants';\nimport { getEvmClientForChain } from '../../_utils';\nimport { estimateEvmFeesPerGas } from '../../_evm-gas';\n\nexport interface EstimateNativeFeeFactoryConfig {\n chainConfigs: ReadonlyMap<Caip2ChainId, WrapChainConfig>;\n}\n\nexport function estimateNativeFeeFactory({\n chainConfigs,\n}: EstimateNativeFeeFactoryConfig): TransferService['estimateNativeFee'] {\n return async (quote, options) => {\n if (quote.serviceType !== ServiceType.WRAP_UNWRAP) {\n throw new SdkError(ErrorReason.INCORRECT_PROVIDER_PROVIDED, ErrorCode.INVALID_PARAMS);\n }\n\n const fromAddress = quote.fromAddress;\n if (!isAddress(fromAddress)) {\n throw new SdkError(ErrorReason.INVALID_PARAMS, ErrorCode.INVALID_PARAMS, {\n details: 'fromAddress is not a valid EVM address.',\n });\n }\n\n const chainId = quote.sourceChain.chainId;\n const direction = getWrapDirection(quote.assetIn, quote.assetOut, chainId, chainConfigs);\n if (!direction) {\n throw new SdkError(ErrorReason.INVALID_PARAMS, ErrorCode.INVALID_PARAMS, {\n details: 'Quote does not represent a valid wrap/unwrap pair.',\n });\n }\n\n const client = getEvmClientForChain({ chain: quote.sourceChain });\n\n const gasWithMargin = await estimateWrapUnwrapGas({\n direction,\n amountIn: quote.amountIn,\n contractAddress: getWrapperContractAddress(chainId, chainConfigs),\n fromAddress,\n client,\n estimateGasMarginBps: options?.feeUnitsMarginBps,\n });\n\n const fees = await estimateEvmFeesPerGas(client, 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 = gasWithMargin * maxFeePerGas;\n\n return {\n asset: quote.sourceChain.networkToken,\n totalFee,\n meta: {\n maxFeePerGas,\n maxPriorityFeePerGas,\n },\n };\n };\n}\n"],"mappings":"8XAcA,SAAgB,EAAyB,CACvC,gBACuE,CACvE,OAAO,MAAO,EAAO,IAAY,CAC/B,GAAI,EAAM,cAAgB,EAAY,YACpC,MAAM,IAAI,EAAS,EAAY,4BAA6B,EAAU,eAAe,CAGvF,IAAM,EAAc,EAAM,YAC1B,GAAI,CAAC,EAAU,EAAY,CACzB,MAAM,IAAI,EAAS,EAAY,eAAgB,EAAU,eAAgB,CACvE,QAAS,0CACV,CAAC,CAGJ,IAAM,EAAU,EAAM,YAAY,QAC5B,EAAY,EAAiB,EAAM,QAAS,EAAM,SAAU,EAAS,EAAa,CACxF,GAAI,CAAC,EACH,MAAM,IAAI,EAAS,EAAY,eAAgB,EAAU,eAAgB,CACvE,QAAS,qDACV,CAAC,CAGJ,IAAM,EAAS,EAAqB,CAAE,MAAO,EAAM,YAAa,CAAC,CAE3D,EAAgB,MAAM,EAAsB,CAChD,YACA,SAAU,EAAM,SAChB,gBAAiB,EAA0B,EAAS,EAAa,CACjE,cACA,SACA,qBAAsB,GAAS,kBAChC,CAAC,CAEI,EAAO,MAAM,EAAsB,EAAQ,EAAM,YAAa,GAAS,WAAW,YAAY,CAE9F,EAAe,GAAS,WAAW,cAAgB,EAAK,aACxD,EAAuB,GAAS,WAAW,sBAAwB,EAAK,qBAExE,EAAW,EAAgB,EAEjC,MAAO,CACL,MAAO,EAAM,YAAY,aACzB,WACA,KAAM,CACJ,eACA,uBACD,CACF"}
@@ -0,0 +1,2 @@
1
+ const e=require(`../../../constants.cjs`);function t({chainConfigs:t}){return async()=>{let n={};for(let[r,i]of t)n[r]=[{...i.nativeAsset,destinations:{},swapProviders:[e.ServiceType.WRAP_UNWRAP]},{...i.wrappedAsset,destinations:{},swapProviders:[e.ServiceType.WRAP_UNWRAP]}];return n}}exports.getAssetsFactory=t;
2
+ //# sourceMappingURL=get-assets.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-assets.cjs","names":["ServiceType"],"sources":["../../../../src/transfer-service/wrap-unwrap/_handlers/get-assets.ts"],"sourcesContent":["import { ServiceType } from '../../../constants';\nimport type { ChainAssetMap, TransferableAsset } from '../../../types/asset';\nimport type { Caip2ChainId } from '../../../types/caip';\nimport type { TransferService } from '../../../types/service';\nimport type { WrapChainConfig } from '../constants';\n\nexport interface GetAssetsFactoryConfig {\n chainConfigs: ReadonlyMap<Caip2ChainId, WrapChainConfig>;\n}\n\nexport function getAssetsFactory({ chainConfigs }: GetAssetsFactoryConfig): TransferService['getAssets'] {\n return async () => {\n const assets: Record<string, TransferableAsset[]> = {};\n\n for (const [chainId, config] of chainConfigs) {\n const nativeAsset: TransferableAsset = {\n ...config.nativeAsset,\n destinations: {},\n swapProviders: [ServiceType.WRAP_UNWRAP],\n };\n\n const wrappedAsset: TransferableAsset = {\n ...config.wrappedAsset,\n destinations: {},\n swapProviders: [ServiceType.WRAP_UNWRAP],\n };\n\n assets[chainId] = [nativeAsset, wrappedAsset];\n }\n\n return assets as ChainAssetMap;\n };\n}\n"],"mappings":"0CAUA,SAAgB,EAAiB,CAAE,gBAAsE,CACvG,OAAO,SAAY,CACjB,IAAM,EAA8C,EAAE,CAEtD,IAAK,GAAM,CAAC,EAAS,KAAW,EAa9B,EAAO,GAAW,CAZqB,CACrC,GAAG,EAAO,YACV,aAAc,EAAE,CAChB,cAAe,CAACA,EAAAA,YAAY,YAAY,CACzC,CAEuC,CACtC,GAAG,EAAO,aACV,aAAc,EAAE,CAChB,cAAe,CAACA,EAAAA,YAAY,YAAY,CACzC,CAE4C,CAG/C,OAAO"}
@@ -0,0 +1,2 @@
1
+ import{ServiceType as e}from"../../../constants.js";function t({chainConfigs:t}){return async()=>{let n={};for(let[r,i]of t)n[r]=[{...i.nativeAsset,destinations:{},swapProviders:[e.WRAP_UNWRAP]},{...i.wrappedAsset,destinations:{},swapProviders:[e.WRAP_UNWRAP]}];return n}}export{t as getAssetsFactory};
2
+ //# sourceMappingURL=get-assets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-assets.js","names":[],"sources":["../../../../src/transfer-service/wrap-unwrap/_handlers/get-assets.ts"],"sourcesContent":["import { ServiceType } from '../../../constants';\nimport type { ChainAssetMap, TransferableAsset } from '../../../types/asset';\nimport type { Caip2ChainId } from '../../../types/caip';\nimport type { TransferService } from '../../../types/service';\nimport type { WrapChainConfig } from '../constants';\n\nexport interface GetAssetsFactoryConfig {\n chainConfigs: ReadonlyMap<Caip2ChainId, WrapChainConfig>;\n}\n\nexport function getAssetsFactory({ chainConfigs }: GetAssetsFactoryConfig): TransferService['getAssets'] {\n return async () => {\n const assets: Record<string, TransferableAsset[]> = {};\n\n for (const [chainId, config] of chainConfigs) {\n const nativeAsset: TransferableAsset = {\n ...config.nativeAsset,\n destinations: {},\n swapProviders: [ServiceType.WRAP_UNWRAP],\n };\n\n const wrappedAsset: TransferableAsset = {\n ...config.wrappedAsset,\n destinations: {},\n swapProviders: [ServiceType.WRAP_UNWRAP],\n };\n\n assets[chainId] = [nativeAsset, wrappedAsset];\n }\n\n return assets as ChainAssetMap;\n };\n}\n"],"mappings":"oDAUA,SAAgB,EAAiB,CAAE,gBAAsE,CACvG,OAAO,SAAY,CACjB,IAAM,EAA8C,EAAE,CAEtD,IAAK,GAAM,CAAC,EAAS,KAAW,EAa9B,EAAO,GAAW,CAZqB,CACrC,GAAG,EAAO,YACV,aAAc,EAAE,CAChB,cAAe,CAAC,EAAY,YAAY,CACzC,CAEuC,CACtC,GAAG,EAAO,aACV,aAAc,EAAE,CAChB,cAAe,CAAC,EAAY,YAAY,CACzC,CAE4C,CAG/C,OAAO"}
@@ -0,0 +1,2 @@
1
+ const e=require(`../../../constants.cjs`);function t({chainConfigs:t}){return async({sourceAsset:n,sourceChainId:r,targetChainId:i})=>{if(r!==i)return[];let a=t.get(r);return a?n.type===e.TokenType.NATIVE?[{...a.wrappedAsset,bridgeProviders:[e.ServiceType.WRAP_UNWRAP]}]:n.type===e.TokenType.ERC20&&n.address.toLowerCase()===a.wrappedAsset.address.toLowerCase()?[{...a.nativeAsset,bridgeProviders:[e.ServiceType.WRAP_UNWRAP]}]:[]:[]}}exports.getBridgeableAssetsFactory=t;
2
+ //# sourceMappingURL=get-bridgeable-assets.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-bridgeable-assets.cjs","names":["TokenType","ServiceType"],"sources":["../../../../src/transfer-service/wrap-unwrap/_handlers/get-bridgeable-assets.ts"],"sourcesContent":["import { ServiceType, TokenType } from '../../../constants';\nimport type { GetBridgeableAssetsProps, TransferService } from '../../../types/service';\nimport type { BridgeableUiAsset } from '../../../types/asset';\nimport type { Caip2ChainId } from '../../../types/caip';\nimport type { WrapChainConfig } from '../constants';\n\nexport function getBridgeableAssetsFactory({\n chainConfigs,\n}: {\n chainConfigs: ReadonlyMap<Caip2ChainId, WrapChainConfig>;\n}): TransferService['getBridgeableAssets'] {\n return async ({\n sourceAsset,\n sourceChainId,\n targetChainId,\n }: GetBridgeableAssetsProps): Promise<readonly BridgeableUiAsset[]> => {\n if (sourceChainId !== targetChainId) {\n return [];\n }\n const config = chainConfigs.get(sourceChainId);\n if (!config) {\n return [];\n }\n if (sourceAsset.type === TokenType.NATIVE) {\n return [{ ...config.wrappedAsset, bridgeProviders: [ServiceType.WRAP_UNWRAP] }];\n }\n if (\n sourceAsset.type === TokenType.ERC20 &&\n sourceAsset.address.toLowerCase() === config.wrappedAsset.address.toLowerCase()\n ) {\n return [{ ...config.nativeAsset, bridgeProviders: [ServiceType.WRAP_UNWRAP] }];\n }\n return [];\n };\n}\n"],"mappings":"0CAMA,SAAgB,EAA2B,CACzC,gBAGyC,CACzC,OAAO,MAAO,CACZ,cACA,gBACA,mBACqE,CACrE,GAAI,IAAkB,EACpB,MAAO,EAAE,CAEX,IAAM,EAAS,EAAa,IAAI,EAAc,CAa9C,OAZK,EAGD,EAAY,OAASA,EAAAA,UAAU,OAC1B,CAAC,CAAE,GAAG,EAAO,aAAc,gBAAiB,CAACC,EAAAA,YAAY,YAAY,CAAE,CAAC,CAG/E,EAAY,OAASD,EAAAA,UAAU,OAC/B,EAAY,QAAQ,aAAa,GAAK,EAAO,aAAa,QAAQ,aAAa,CAExE,CAAC,CAAE,GAAG,EAAO,YAAa,gBAAiB,CAACC,EAAAA,YAAY,YAAY,CAAE,CAAC,CAEzE,EAAE,CAXA,EAAE"}
@@ -0,0 +1,2 @@
1
+ import{ServiceType as e,TokenType as t}from"../../../constants.js";function n({chainConfigs:n}){return async({sourceAsset:r,sourceChainId:i,targetChainId:a})=>{if(i!==a)return[];let o=n.get(i);return o?r.type===t.NATIVE?[{...o.wrappedAsset,bridgeProviders:[e.WRAP_UNWRAP]}]:r.type===t.ERC20&&r.address.toLowerCase()===o.wrappedAsset.address.toLowerCase()?[{...o.nativeAsset,bridgeProviders:[e.WRAP_UNWRAP]}]:[]:[]}}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/wrap-unwrap/_handlers/get-bridgeable-assets.ts"],"sourcesContent":["import { ServiceType, TokenType } from '../../../constants';\nimport type { GetBridgeableAssetsProps, TransferService } from '../../../types/service';\nimport type { BridgeableUiAsset } from '../../../types/asset';\nimport type { Caip2ChainId } from '../../../types/caip';\nimport type { WrapChainConfig } from '../constants';\n\nexport function getBridgeableAssetsFactory({\n chainConfigs,\n}: {\n chainConfigs: ReadonlyMap<Caip2ChainId, WrapChainConfig>;\n}): TransferService['getBridgeableAssets'] {\n return async ({\n sourceAsset,\n sourceChainId,\n targetChainId,\n }: GetBridgeableAssetsProps): Promise<readonly BridgeableUiAsset[]> => {\n if (sourceChainId !== targetChainId) {\n return [];\n }\n const config = chainConfigs.get(sourceChainId);\n if (!config) {\n return [];\n }\n if (sourceAsset.type === TokenType.NATIVE) {\n return [{ ...config.wrappedAsset, bridgeProviders: [ServiceType.WRAP_UNWRAP] }];\n }\n if (\n sourceAsset.type === TokenType.ERC20 &&\n sourceAsset.address.toLowerCase() === config.wrappedAsset.address.toLowerCase()\n ) {\n return [{ ...config.nativeAsset, bridgeProviders: [ServiceType.WRAP_UNWRAP] }];\n }\n return [];\n };\n}\n"],"mappings":"mEAMA,SAAgB,EAA2B,CACzC,gBAGyC,CACzC,OAAO,MAAO,CACZ,cACA,gBACA,mBACqE,CACrE,GAAI,IAAkB,EACpB,MAAO,EAAE,CAEX,IAAM,EAAS,EAAa,IAAI,EAAc,CAa9C,OAZK,EAGD,EAAY,OAAS,EAAU,OAC1B,CAAC,CAAE,GAAG,EAAO,aAAc,gBAAiB,CAAC,EAAY,YAAY,CAAE,CAAC,CAG/E,EAAY,OAAS,EAAU,OAC/B,EAAY,QAAQ,aAAa,GAAK,EAAO,aAAa,QAAQ,aAAa,CAExE,CAAC,CAAE,GAAG,EAAO,YAAa,gBAAiB,CAAC,EAAY,YAAY,CAAE,CAAC,CAEzE,EAAE,CAXA,EAAE"}
@@ -0,0 +1,2 @@
1
+ function e(){return async()=>1n}exports.getMinimumTransferAmountFactory=e;
2
+ //# sourceMappingURL=get-minimum-transfer-amount.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-minimum-transfer-amount.cjs","names":[],"sources":["../../../../src/transfer-service/wrap-unwrap/_handlers/get-minimum-transfer-amount.ts"],"sourcesContent":["import type { TransferService } from '../../../types/service';\n\nexport function getMinimumTransferAmountFactory(): TransferService['getMinimumTransferAmount'] {\n return async () => 1n;\n}\n"],"mappings":"AAEA,SAAgB,GAA+E,CAC7F,OAAO,SAAY"}
@@ -0,0 +1,2 @@
1
+ function e(){return async()=>1n}export{e as getMinimumTransferAmountFactory};
2
+ //# sourceMappingURL=get-minimum-transfer-amount.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-minimum-transfer-amount.js","names":[],"sources":["../../../../src/transfer-service/wrap-unwrap/_handlers/get-minimum-transfer-amount.ts"],"sourcesContent":["import type { TransferService } from '../../../types/service';\n\nexport function getMinimumTransferAmountFactory(): TransferService['getMinimumTransferAmount'] {\n return async () => 1n;\n}\n"],"mappings":"AAEA,SAAgB,GAA+E,CAC7F,OAAO,SAAY"}
@@ -0,0 +1,2 @@
1
+ const e=require(`../../../constants.cjs`),t=require(`../constants.cjs`);function n({clock:n=()=>Math.floor(Date.now()/1e3)}={}){return(r,i)=>{let a=new AbortController;function o(){if(a.signal.aborted)return;let o=n();i(`quote`,{aggregator:{id:`wrap-unwrap`,name:`Wrap/Unwrap`},amountIn:r.amount,amountOut:r.amount,assetIn:r.sourceAsset,assetOut:r.targetAsset,expiresAt:o+t.WRAP_UNWRAP_QUOTE_TTL_SECONDS,fees:[],fromAddress:r.fromAddress,id:crypto.randomUUID(),partnerFeeBps:null,serviceType:e.ServiceType.WRAP_UNWRAP,slippageBps:0,sourceChain:r.sourceChain,targetChain:r.targetChain,toAddress:r.toAddress}),i(`done`)}return o(),{cancel:()=>a.abort()}}}exports.streamQuotesFactory=n;
2
+ //# sourceMappingURL=stream-quotes.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-quotes.cjs","names":["WRAP_UNWRAP_QUOTE_TTL_SECONDS","ServiceType"],"sources":["../../../../src/transfer-service/wrap-unwrap/_handlers/stream-quotes.ts"],"sourcesContent":["import { ServiceType } from '../../../constants';\nimport type { TransferService } from '../../../types/service';\nimport type { Quote } from '../../../types/quote';\nimport { WRAP_UNWRAP_QUOTE_TTL_SECONDS } from '../constants';\n\nexport interface StreamQuotesFactoryConfig {\n /** Pre-bound clock for deterministic testing; defaults to Date.now/1000. */\n clock?: () => number;\n}\n\nexport function streamQuotesFactory({\n clock = () => Math.floor(Date.now() / 1_000),\n}: StreamQuotesFactoryConfig = {}): TransferService['streamQuotes'] {\n return (props, handler) => {\n const ac = new AbortController();\n\n function emitQuote(): void {\n if (ac.signal.aborted) return;\n\n const now = clock();\n const quote: Quote = {\n aggregator: { id: 'wrap-unwrap', name: 'Wrap/Unwrap' },\n amountIn: props.amount,\n amountOut: props.amount,\n assetIn: props.sourceAsset,\n assetOut: props.targetAsset,\n expiresAt: now + WRAP_UNWRAP_QUOTE_TTL_SECONDS,\n fees: [],\n fromAddress: props.fromAddress,\n id: crypto.randomUUID(),\n partnerFeeBps: null,\n serviceType: ServiceType.WRAP_UNWRAP,\n slippageBps: 0,\n sourceChain: props.sourceChain,\n targetChain: props.targetChain,\n toAddress: props.toAddress,\n };\n\n handler('quote', quote);\n handler('done');\n }\n\n emitQuote();\n\n return {\n cancel: () => ac.abort(),\n };\n };\n}\n"],"mappings":"wEAUA,SAAgB,EAAoB,CAClC,YAAc,KAAK,MAAM,KAAK,KAAK,CAAG,IAAM,EACf,EAAE,CAAmC,CAClE,OAAQ,EAAO,IAAY,CACzB,IAAM,EAAK,IAAI,gBAEf,SAAS,GAAkB,CACzB,GAAI,EAAG,OAAO,QAAS,OAEvB,IAAM,EAAM,GAAO,CAmBnB,EAAQ,QAlBa,CACnB,WAAY,CAAE,GAAI,cAAe,KAAM,cAAe,CACtD,SAAU,EAAM,OAChB,UAAW,EAAM,OACjB,QAAS,EAAM,YACf,SAAU,EAAM,YAChB,UAAW,EAAMA,EAAAA,8BACjB,KAAM,EAAE,CACR,YAAa,EAAM,YACnB,GAAI,OAAO,YAAY,CACvB,cAAe,KACf,YAAaC,EAAAA,YAAY,YACzB,YAAa,EACb,YAAa,EAAM,YACnB,YAAa,EAAM,YACnB,UAAW,EAAM,UAClB,CAEsB,CACvB,EAAQ,OAAO,CAKjB,OAFA,GAAW,CAEJ,CACL,WAAc,EAAG,OAAO,CACzB"}
@@ -0,0 +1,2 @@
1
+ import{ServiceType as e}from"../../../constants.js";import{WRAP_UNWRAP_QUOTE_TTL_SECONDS as t}from"../constants.js";function n({clock:n=()=>Math.floor(Date.now()/1e3)}={}){return(r,i)=>{let a=new AbortController;function o(){if(a.signal.aborted)return;let o=n();i(`quote`,{aggregator:{id:`wrap-unwrap`,name:`Wrap/Unwrap`},amountIn:r.amount,amountOut:r.amount,assetIn:r.sourceAsset,assetOut:r.targetAsset,expiresAt:o+t,fees:[],fromAddress:r.fromAddress,id:crypto.randomUUID(),partnerFeeBps:null,serviceType:e.WRAP_UNWRAP,slippageBps:0,sourceChain:r.sourceChain,targetChain:r.targetChain,toAddress:r.toAddress}),i(`done`)}return o(),{cancel:()=>a.abort()}}}export{n as streamQuotesFactory};
2
+ //# sourceMappingURL=stream-quotes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-quotes.js","names":[],"sources":["../../../../src/transfer-service/wrap-unwrap/_handlers/stream-quotes.ts"],"sourcesContent":["import { ServiceType } from '../../../constants';\nimport type { TransferService } from '../../../types/service';\nimport type { Quote } from '../../../types/quote';\nimport { WRAP_UNWRAP_QUOTE_TTL_SECONDS } from '../constants';\n\nexport interface StreamQuotesFactoryConfig {\n /** Pre-bound clock for deterministic testing; defaults to Date.now/1000. */\n clock?: () => number;\n}\n\nexport function streamQuotesFactory({\n clock = () => Math.floor(Date.now() / 1_000),\n}: StreamQuotesFactoryConfig = {}): TransferService['streamQuotes'] {\n return (props, handler) => {\n const ac = new AbortController();\n\n function emitQuote(): void {\n if (ac.signal.aborted) return;\n\n const now = clock();\n const quote: Quote = {\n aggregator: { id: 'wrap-unwrap', name: 'Wrap/Unwrap' },\n amountIn: props.amount,\n amountOut: props.amount,\n assetIn: props.sourceAsset,\n assetOut: props.targetAsset,\n expiresAt: now + WRAP_UNWRAP_QUOTE_TTL_SECONDS,\n fees: [],\n fromAddress: props.fromAddress,\n id: crypto.randomUUID(),\n partnerFeeBps: null,\n serviceType: ServiceType.WRAP_UNWRAP,\n slippageBps: 0,\n sourceChain: props.sourceChain,\n targetChain: props.targetChain,\n toAddress: props.toAddress,\n };\n\n handler('quote', quote);\n handler('done');\n }\n\n emitQuote();\n\n return {\n cancel: () => ac.abort(),\n };\n };\n}\n"],"mappings":"oHAUA,SAAgB,EAAoB,CAClC,YAAc,KAAK,MAAM,KAAK,KAAK,CAAG,IAAM,EACf,EAAE,CAAmC,CAClE,OAAQ,EAAO,IAAY,CACzB,IAAM,EAAK,IAAI,gBAEf,SAAS,GAAkB,CACzB,GAAI,EAAG,OAAO,QAAS,OAEvB,IAAM,EAAM,GAAO,CAmBnB,EAAQ,QAlBa,CACnB,WAAY,CAAE,GAAI,cAAe,KAAM,cAAe,CACtD,SAAU,EAAM,OAChB,UAAW,EAAM,OACjB,QAAS,EAAM,YACf,SAAU,EAAM,YAChB,UAAW,EAAM,EACjB,KAAM,EAAE,CACR,YAAa,EAAM,YACnB,GAAI,OAAO,YAAY,CACvB,cAAe,KACf,YAAa,EAAY,YACzB,YAAa,EACb,YAAa,EAAM,YACnB,YAAa,EAAM,YACnB,UAAW,EAAM,UAClB,CAEsB,CACvB,EAAQ,OAAO,CAKjB,OAFA,GAAW,CAEJ,CACL,WAAc,EAAG,OAAO,CACzB"}
@@ -0,0 +1,2 @@
1
+ const e=require(`../../_tracking-utilities.cjs`);function t(){return t=>e.trackSameChainEvmTransfer(t)}exports.trackTransferFactory=t;
2
+ //# sourceMappingURL=track-transfer.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"track-transfer.cjs","names":["trackSameChainEvmTransfer"],"sources":["../../../../src/transfer-service/wrap-unwrap/_handlers/track-transfer.ts"],"sourcesContent":["import type { TransferService } from '../../../types/service';\nimport { trackSameChainEvmTransfer } from '../../_tracking-utilities';\n\nexport function trackTransferFactory(): TransferService['trackTransfer'] {\n return (props) => trackSameChainEvmTransfer(props);\n}\n"],"mappings":"iDAGA,SAAgB,GAAyD,CACvE,MAAQ,IAAUA,EAAAA,0BAA0B,EAAM"}
@@ -0,0 +1,2 @@
1
+ import{trackSameChainEvmTransfer as e}from"../../_tracking-utilities.js";function t(){return t=>e(t)}export{t as trackTransferFactory};
2
+ //# sourceMappingURL=track-transfer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"track-transfer.js","names":[],"sources":["../../../../src/transfer-service/wrap-unwrap/_handlers/track-transfer.ts"],"sourcesContent":["import type { TransferService } from '../../../types/service';\nimport { trackSameChainEvmTransfer } from '../../_tracking-utilities';\n\nexport function trackTransferFactory(): TransferService['trackTransfer'] {\n return (props) => trackSameChainEvmTransfer(props);\n}\n"],"mappings":"yEAGA,SAAgB,GAAyD,CACvE,MAAQ,IAAU,EAA0B,EAAM"}
@@ -0,0 +1,2 @@
1
+ require(`../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../../constants.cjs`),t=require(`../../../errors.cjs`),n=require(`../../../utils/caip.cjs`),r=require(`../../_utils.cjs`),i=require(`../_utils.cjs`),a=require(`../../_transfer-utilities.cjs`);let o=require(`viem`);function s({chainConfigs:s,environment:c,evmSigner:l}){return async({quote:u,gasSettings:d,onStepChange:f})=>{if(u.serviceType!==e.ServiceType.WRAP_UNWRAP)throw new t.SdkError(t.ErrorReason.INCORRECT_PROVIDER_PROVIDED,t.ErrorCode.INVALID_PARAMS);let p=Math.floor(Date.now()/1e3);if(u.expiresAt<=p)throw new t.SdkError(t.ErrorReason.QUOTE_EXPIRED,t.ErrorCode.INVALID_PARAMS);let m=u.fromAddress;if(!(0,o.isAddress)(m))throw new t.SdkError(t.ErrorReason.INVALID_PARAMS,t.ErrorCode.INVALID_PARAMS,{details:`fromAddress is not a valid EVM address.`});let h=u.sourceChain.chainId,g=i.getWrapDirection(u.assetIn,u.assetOut,h,s);if(!g)throw new t.SdkError(t.ErrorReason.INVALID_PARAMS,t.ErrorCode.INVALID_PARAMS,{details:`Quote does not represent a valid wrap/unwrap pair.`});let _=i.getWrapperContractAddress(h,s),v=g===`wrap`,y=i.encodeWrapUnwrapData(g,u.amountIn),b=r.getEvmClientForChain({chain:u.sourceChain}),x=await i.estimateWrapUnwrapGas({direction:g,amountIn:u.amountIn,contractAddress:_,fromAddress:m,client:b,estimateGasMarginBps:d?.estimateGasMarginBps}),S={chainId:n.caip2ToEip155HexChainId(u.sourceChain.chainId),data:y,from:m,gas:x,to:_,value:v?u.amountIn:0n,...d?.maxFeePerGas===void 0?null:{maxFeePerGas:d.maxFeePerGas,maxPriorityFeePerGas:d.maxPriorityFeePerGas}},C={currentSignature:1,currentSignatureReason:e.TransferSignatureReason.WrapToken,quote:u,requiredSignatures:1};f?.(C);let w=Date.now();return a.sourcePendingTransferFromQuote(u,{environment:c,txHash:await l.sign(S,async e=>b.sendRawTransaction({serializedTransaction:e}),C),startedAtMs:w,requiredConfirmationCount:1})}}exports.transferAssetFactory=s;
2
+ //# sourceMappingURL=transfer-asset.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transfer-asset.cjs","names":["ServiceType","SdkError","ErrorReason","ErrorCode","getWrapDirection","getWrapperContractAddress","encodeWrapUnwrapData","getEvmClientForChain","estimateWrapUnwrapGas","caip2ToEip155HexChainId","TransferSignatureReason","sourcePendingTransferFromQuote"],"sources":["../../../../src/transfer-service/wrap-unwrap/_handlers/transfer-asset.ts"],"sourcesContent":["import { isAddress } from 'viem';\nimport { ServiceType, TransferSignatureReason } from '../../../constants';\nimport type { Environment } from '../../../constants';\nimport { ErrorCode, ErrorReason, SdkError } from '../../../errors';\nimport type { TransferService } from '../../../types/service';\nimport type { EvmSigner, EvmTransactionRequest } from '../../../types/signer';\nimport type { TransferStepDetails } from '../../../types/transfer';\nimport type { Caip2ChainId } from '../../../types/caip';\nimport { caip2ToEip155HexChainId } from '../../../utils/caip';\nimport { getEvmClientForChain } from '../../_utils';\nimport { sourcePendingTransferFromQuote } from '../../_transfer-utilities';\nimport { getWrapDirection, getWrapperContractAddress, encodeWrapUnwrapData, estimateWrapUnwrapGas } from '../_utils';\nimport type { WrapChainConfig } from '../constants';\n\nexport interface TransferAssetFactoryConfig {\n chainConfigs: ReadonlyMap<Caip2ChainId, WrapChainConfig>;\n environment: Environment;\n evmSigner: EvmSigner;\n}\n\nexport function transferAssetFactory({\n chainConfigs,\n environment,\n evmSigner,\n}: TransferAssetFactoryConfig): TransferService['transferAsset'] {\n return async ({ quote, gasSettings, onStepChange }) => {\n if (quote.serviceType !== ServiceType.WRAP_UNWRAP) {\n throw new SdkError(ErrorReason.INCORRECT_PROVIDER_PROVIDED, ErrorCode.INVALID_PARAMS);\n }\n\n const now = Math.floor(Date.now() / 1_000);\n if (quote.expiresAt <= now) {\n throw new SdkError(ErrorReason.QUOTE_EXPIRED, ErrorCode.INVALID_PARAMS);\n }\n\n const fromAddress = quote.fromAddress;\n if (!isAddress(fromAddress)) {\n throw new SdkError(ErrorReason.INVALID_PARAMS, ErrorCode.INVALID_PARAMS, {\n details: 'fromAddress is not a valid EVM address.',\n });\n }\n\n const chainId = quote.sourceChain.chainId as Caip2ChainId;\n const direction = getWrapDirection(quote.assetIn, quote.assetOut, chainId, chainConfigs);\n if (!direction) {\n throw new SdkError(ErrorReason.INVALID_PARAMS, ErrorCode.INVALID_PARAMS, {\n details: 'Quote does not represent a valid wrap/unwrap pair.',\n });\n }\n\n const contractAddress = getWrapperContractAddress(chainId, chainConfigs);\n const isWrapping = direction === 'wrap';\n const data = encodeWrapUnwrapData(direction, quote.amountIn);\n\n const sourceClient = getEvmClientForChain({ chain: quote.sourceChain });\n\n const gas = await estimateWrapUnwrapGas({\n direction,\n amountIn: quote.amountIn,\n contractAddress,\n fromAddress,\n client: sourceClient,\n estimateGasMarginBps: gasSettings?.estimateGasMarginBps,\n });\n\n const request: EvmTransactionRequest = {\n chainId: caip2ToEip155HexChainId(quote.sourceChain.chainId),\n data,\n from: fromAddress,\n gas,\n to: contractAddress,\n value: isWrapping ? quote.amountIn : 0n,\n ...(gasSettings?.maxFeePerGas !== undefined\n ? {\n maxFeePerGas: gasSettings.maxFeePerGas,\n maxPriorityFeePerGas: gasSettings.maxPriorityFeePerGas,\n }\n : null),\n };\n\n const step: TransferStepDetails = {\n currentSignature: 1,\n currentSignatureReason: TransferSignatureReason.WrapToken,\n quote,\n requiredSignatures: 1,\n };\n\n onStepChange?.(step);\n\n const startedAtMs = Date.now();\n\n const txHash = await evmSigner.sign(\n request,\n async (signedTxHash) => sourceClient.sendRawTransaction({ serializedTransaction: signedTxHash }),\n step,\n );\n\n return sourcePendingTransferFromQuote(quote, {\n environment,\n txHash,\n startedAtMs,\n requiredConfirmationCount: 1,\n });\n };\n}\n"],"mappings":"6RAoBA,SAAgB,EAAqB,CACnC,eACA,cACA,aAC+D,CAC/D,OAAO,MAAO,CAAE,QAAO,cAAa,kBAAmB,CACrD,GAAI,EAAM,cAAgBA,EAAAA,YAAY,YACpC,MAAM,IAAIC,EAAAA,SAASC,EAAAA,YAAY,4BAA6BC,EAAAA,UAAU,eAAe,CAGvF,IAAM,EAAM,KAAK,MAAM,KAAK,KAAK,CAAG,IAAM,CAC1C,GAAI,EAAM,WAAa,EACrB,MAAM,IAAIF,EAAAA,SAASC,EAAAA,YAAY,cAAeC,EAAAA,UAAU,eAAe,CAGzE,IAAM,EAAc,EAAM,YAC1B,GAAI,EAAA,EAAA,EAAA,WAAW,EAAY,CACzB,MAAM,IAAIF,EAAAA,SAASC,EAAAA,YAAY,eAAgBC,EAAAA,UAAU,eAAgB,CACvE,QAAS,0CACV,CAAC,CAGJ,IAAM,EAAU,EAAM,YAAY,QAC5B,EAAYC,EAAAA,iBAAiB,EAAM,QAAS,EAAM,SAAU,EAAS,EAAa,CACxF,GAAI,CAAC,EACH,MAAM,IAAIH,EAAAA,SAASC,EAAAA,YAAY,eAAgBC,EAAAA,UAAU,eAAgB,CACvE,QAAS,qDACV,CAAC,CAGJ,IAAM,EAAkBE,EAAAA,0BAA0B,EAAS,EAAa,CAClE,EAAa,IAAc,OAC3B,EAAOC,EAAAA,qBAAqB,EAAW,EAAM,SAAS,CAEtD,EAAeC,EAAAA,qBAAqB,CAAE,MAAO,EAAM,YAAa,CAAC,CAEjE,EAAM,MAAMC,EAAAA,sBAAsB,CACtC,YACA,SAAU,EAAM,SAChB,kBACA,cACA,OAAQ,EACR,qBAAsB,GAAa,qBACpC,CAAC,CAEI,EAAiC,CACrC,QAASC,EAAAA,wBAAwB,EAAM,YAAY,QAAQ,CAC3D,OACA,KAAM,EACN,MACA,GAAI,EACJ,MAAO,EAAa,EAAM,SAAW,GACrC,GAAI,GAAa,eAAiB,IAAA,GAK9B,KAJA,CACE,aAAc,EAAY,aAC1B,qBAAsB,EAAY,qBACnC,CAEN,CAEK,EAA4B,CAChC,iBAAkB,EAClB,uBAAwBC,EAAAA,wBAAwB,UAChD,QACA,mBAAoB,EACrB,CAED,IAAe,EAAK,CAEpB,IAAM,EAAc,KAAK,KAAK,CAQ9B,OAAOC,EAAAA,+BAA+B,EAAO,CAC3C,cACA,OARa,MAAM,EAAU,KAC7B,EACA,KAAO,IAAiB,EAAa,mBAAmB,CAAE,sBAAuB,EAAc,CAAC,CAChG,EACD,CAKC,cACA,0BAA2B,EAC5B,CAAC"}
@@ -0,0 +1,2 @@
1
+ import{ServiceType as e,TransferSignatureReason as t}from"../../../constants.js";import{ErrorCode as n,ErrorReason as r,SdkError as i}from"../../../errors.js";import{caip2ToEip155HexChainId as a}from"../../../utils/caip.js";import{getEvmClientForChain as o}from"../../_utils.js";import{encodeWrapUnwrapData as s,estimateWrapUnwrapGas as c,getWrapDirection as l,getWrapperContractAddress as u}from"../_utils.js";import{sourcePendingTransferFromQuote as d}from"../../_transfer-utilities.js";import{isAddress as f}from"viem";function p({chainConfigs:p,environment:m,evmSigner:h}){return async({quote:g,gasSettings:_,onStepChange:v})=>{if(g.serviceType!==e.WRAP_UNWRAP)throw new i(r.INCORRECT_PROVIDER_PROVIDED,n.INVALID_PARAMS);let y=Math.floor(Date.now()/1e3);if(g.expiresAt<=y)throw new i(r.QUOTE_EXPIRED,n.INVALID_PARAMS);let b=g.fromAddress;if(!f(b))throw new i(r.INVALID_PARAMS,n.INVALID_PARAMS,{details:`fromAddress is not a valid EVM address.`});let x=g.sourceChain.chainId,S=l(g.assetIn,g.assetOut,x,p);if(!S)throw new i(r.INVALID_PARAMS,n.INVALID_PARAMS,{details:`Quote does not represent a valid wrap/unwrap pair.`});let C=u(x,p),w=S===`wrap`,T=s(S,g.amountIn),E=o({chain:g.sourceChain}),D=await c({direction:S,amountIn:g.amountIn,contractAddress:C,fromAddress:b,client:E,estimateGasMarginBps:_?.estimateGasMarginBps}),O={chainId:a(g.sourceChain.chainId),data:T,from:b,gas:D,to:C,value:w?g.amountIn:0n,..._?.maxFeePerGas===void 0?null:{maxFeePerGas:_.maxFeePerGas,maxPriorityFeePerGas:_.maxPriorityFeePerGas}},k={currentSignature:1,currentSignatureReason:t.WrapToken,quote:g,requiredSignatures:1};v?.(k);let A=Date.now();return d(g,{environment:m,txHash:await h.sign(O,async e=>E.sendRawTransaction({serializedTransaction:e}),k),startedAtMs:A,requiredConfirmationCount:1})}}export{p as transferAssetFactory};
2
+ //# sourceMappingURL=transfer-asset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transfer-asset.js","names":[],"sources":["../../../../src/transfer-service/wrap-unwrap/_handlers/transfer-asset.ts"],"sourcesContent":["import { isAddress } from 'viem';\nimport { ServiceType, TransferSignatureReason } from '../../../constants';\nimport type { Environment } from '../../../constants';\nimport { ErrorCode, ErrorReason, SdkError } from '../../../errors';\nimport type { TransferService } from '../../../types/service';\nimport type { EvmSigner, EvmTransactionRequest } from '../../../types/signer';\nimport type { TransferStepDetails } from '../../../types/transfer';\nimport type { Caip2ChainId } from '../../../types/caip';\nimport { caip2ToEip155HexChainId } from '../../../utils/caip';\nimport { getEvmClientForChain } from '../../_utils';\nimport { sourcePendingTransferFromQuote } from '../../_transfer-utilities';\nimport { getWrapDirection, getWrapperContractAddress, encodeWrapUnwrapData, estimateWrapUnwrapGas } from '../_utils';\nimport type { WrapChainConfig } from '../constants';\n\nexport interface TransferAssetFactoryConfig {\n chainConfigs: ReadonlyMap<Caip2ChainId, WrapChainConfig>;\n environment: Environment;\n evmSigner: EvmSigner;\n}\n\nexport function transferAssetFactory({\n chainConfigs,\n environment,\n evmSigner,\n}: TransferAssetFactoryConfig): TransferService['transferAsset'] {\n return async ({ quote, gasSettings, onStepChange }) => {\n if (quote.serviceType !== ServiceType.WRAP_UNWRAP) {\n throw new SdkError(ErrorReason.INCORRECT_PROVIDER_PROVIDED, ErrorCode.INVALID_PARAMS);\n }\n\n const now = Math.floor(Date.now() / 1_000);\n if (quote.expiresAt <= now) {\n throw new SdkError(ErrorReason.QUOTE_EXPIRED, ErrorCode.INVALID_PARAMS);\n }\n\n const fromAddress = quote.fromAddress;\n if (!isAddress(fromAddress)) {\n throw new SdkError(ErrorReason.INVALID_PARAMS, ErrorCode.INVALID_PARAMS, {\n details: 'fromAddress is not a valid EVM address.',\n });\n }\n\n const chainId = quote.sourceChain.chainId as Caip2ChainId;\n const direction = getWrapDirection(quote.assetIn, quote.assetOut, chainId, chainConfigs);\n if (!direction) {\n throw new SdkError(ErrorReason.INVALID_PARAMS, ErrorCode.INVALID_PARAMS, {\n details: 'Quote does not represent a valid wrap/unwrap pair.',\n });\n }\n\n const contractAddress = getWrapperContractAddress(chainId, chainConfigs);\n const isWrapping = direction === 'wrap';\n const data = encodeWrapUnwrapData(direction, quote.amountIn);\n\n const sourceClient = getEvmClientForChain({ chain: quote.sourceChain });\n\n const gas = await estimateWrapUnwrapGas({\n direction,\n amountIn: quote.amountIn,\n contractAddress,\n fromAddress,\n client: sourceClient,\n estimateGasMarginBps: gasSettings?.estimateGasMarginBps,\n });\n\n const request: EvmTransactionRequest = {\n chainId: caip2ToEip155HexChainId(quote.sourceChain.chainId),\n data,\n from: fromAddress,\n gas,\n to: contractAddress,\n value: isWrapping ? quote.amountIn : 0n,\n ...(gasSettings?.maxFeePerGas !== undefined\n ? {\n maxFeePerGas: gasSettings.maxFeePerGas,\n maxPriorityFeePerGas: gasSettings.maxPriorityFeePerGas,\n }\n : null),\n };\n\n const step: TransferStepDetails = {\n currentSignature: 1,\n currentSignatureReason: TransferSignatureReason.WrapToken,\n quote,\n requiredSignatures: 1,\n };\n\n onStepChange?.(step);\n\n const startedAtMs = Date.now();\n\n const txHash = await evmSigner.sign(\n request,\n async (signedTxHash) => sourceClient.sendRawTransaction({ serializedTransaction: signedTxHash }),\n step,\n );\n\n return sourcePendingTransferFromQuote(quote, {\n environment,\n txHash,\n startedAtMs,\n requiredConfirmationCount: 1,\n });\n };\n}\n"],"mappings":"0gBAoBA,SAAgB,EAAqB,CACnC,eACA,cACA,aAC+D,CAC/D,OAAO,MAAO,CAAE,QAAO,cAAa,kBAAmB,CACrD,GAAI,EAAM,cAAgB,EAAY,YACpC,MAAM,IAAI,EAAS,EAAY,4BAA6B,EAAU,eAAe,CAGvF,IAAM,EAAM,KAAK,MAAM,KAAK,KAAK,CAAG,IAAM,CAC1C,GAAI,EAAM,WAAa,EACrB,MAAM,IAAI,EAAS,EAAY,cAAe,EAAU,eAAe,CAGzE,IAAM,EAAc,EAAM,YAC1B,GAAI,CAAC,EAAU,EAAY,CACzB,MAAM,IAAI,EAAS,EAAY,eAAgB,EAAU,eAAgB,CACvE,QAAS,0CACV,CAAC,CAGJ,IAAM,EAAU,EAAM,YAAY,QAC5B,EAAY,EAAiB,EAAM,QAAS,EAAM,SAAU,EAAS,EAAa,CACxF,GAAI,CAAC,EACH,MAAM,IAAI,EAAS,EAAY,eAAgB,EAAU,eAAgB,CACvE,QAAS,qDACV,CAAC,CAGJ,IAAM,EAAkB,EAA0B,EAAS,EAAa,CAClE,EAAa,IAAc,OAC3B,EAAO,EAAqB,EAAW,EAAM,SAAS,CAEtD,EAAe,EAAqB,CAAE,MAAO,EAAM,YAAa,CAAC,CAEjE,EAAM,MAAM,EAAsB,CACtC,YACA,SAAU,EAAM,SAChB,kBACA,cACA,OAAQ,EACR,qBAAsB,GAAa,qBACpC,CAAC,CAEI,EAAiC,CACrC,QAAS,EAAwB,EAAM,YAAY,QAAQ,CAC3D,OACA,KAAM,EACN,MACA,GAAI,EACJ,MAAO,EAAa,EAAM,SAAW,GACrC,GAAI,GAAa,eAAiB,IAAA,GAK9B,KAJA,CACE,aAAc,EAAY,aAC1B,qBAAsB,EAAY,qBACnC,CAEN,CAEK,EAA4B,CAChC,iBAAkB,EAClB,uBAAwB,EAAwB,UAChD,QACA,mBAAoB,EACrB,CAED,IAAe,EAAK,CAEpB,IAAM,EAAc,KAAK,KAAK,CAQ9B,OAAO,EAA+B,EAAO,CAC3C,cACA,OARa,MAAM,EAAU,KAC7B,EACA,KAAO,IAAiB,EAAa,mBAAmB,CAAE,sBAAuB,EAAc,CAAC,CAChG,EACD,CAKC,cACA,0BAA2B,EAC5B,CAAC"}
@@ -0,0 +1,2 @@
1
+ require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants.cjs`),t=require(`../../errors.cjs`),n=require(`../_utils.cjs`),r=require(`../_abis.cjs`);let i=require(`viem`);function a(t,n,r,a){let o=a.get(r);return o?t.type===e.TokenType.NATIVE&&n.type===e.TokenType.ERC20&&(0,i.isAddressEqual)(n.address,o.wrappedTokenAddress)?`wrap`:n.type===e.TokenType.NATIVE&&t.type===e.TokenType.ERC20&&(0,i.isAddressEqual)(t.address,o.wrappedTokenAddress)?`unwrap`:null:null}function o(e,n){let r=n.get(e);if(!r)throw new t.SdkError(t.ErrorReason.CHAIN_NOT_SUPPORTED,t.ErrorCode.INVALID_PARAMS,{details:`No wrap/unwrap config for chain ${e}`});return r.wrappedTokenAddress}function s(e,t){return e===`wrap`?(0,i.encodeFunctionData)({abi:r.WETH_ABI,functionName:`deposit`}):(0,i.encodeFunctionData)({abi:r.WETH_ABI,functionName:`withdraw`,args:[t]})}async function c(e){let i=e.client;try{return n.applyFeeUnitsBpsMargin(e.direction===`wrap`?await i.estimateContractGas({address:e.contractAddress,abi:r.WETH_ABI,functionName:`deposit`,value:e.amountIn,account:e.fromAddress}):await i.estimateContractGas({address:e.contractAddress,abi:r.WETH_ABI,functionName:`withdraw`,args:[e.amountIn],account:e.fromAddress}),e.estimateGasMarginBps)}catch(n){throw new t.SdkError(`Error during gas estimation`,t.ErrorCode.VIEM_ERROR,{cause:n,details:`Failed to estimate gas for ${e.direction} transaction.`})}}exports.encodeWrapUnwrapData=s,exports.estimateWrapUnwrapGas=c,exports.getWrapDirection=a,exports.getWrapperContractAddress=o;
2
+ //# sourceMappingURL=_utils.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_utils.cjs","names":["TokenType","SdkError","ErrorReason","ErrorCode","WETH_ABI","applyFeeUnitsBpsMargin"],"sources":["../../../src/transfer-service/wrap-unwrap/_utils.ts"],"sourcesContent":["import { encodeFunctionData, isAddressEqual, type Address } from 'viem';\nimport { TokenType } from '../../constants';\nimport { ErrorCode, ErrorReason, SdkError } from '../../errors';\nimport type { Asset } from '../../types/asset';\nimport type { Caip2ChainId } from '../../types/caip';\nimport { applyFeeUnitsBpsMargin, getEvmClientForChain } from '../_utils';\nimport { WETH_ABI } from '../_abis';\nimport type { WrapChainConfig } from './constants';\n\nexport type WrapDirection = 'wrap' | 'unwrap';\n\n/**\n * Determine whether the source->target asset pair represents a wrap or unwrap\n * on the given chain. Returns `null` when the pair is not a valid wrap/unwrap.\n */\nexport function getWrapDirection(\n sourceAsset: Asset,\n targetAsset: Asset,\n chainId: Caip2ChainId,\n chainConfigs: ReadonlyMap<Caip2ChainId, WrapChainConfig>,\n): WrapDirection | null {\n const config = chainConfigs.get(chainId);\n if (!config) return null;\n\n if (sourceAsset.type === TokenType.NATIVE && targetAsset.type === TokenType.ERC20) {\n if (isAddressEqual(targetAsset.address, config.wrappedTokenAddress)) {\n return 'wrap';\n }\n }\n\n if (targetAsset.type === TokenType.NATIVE && sourceAsset.type === TokenType.ERC20) {\n if (isAddressEqual(sourceAsset.address, config.wrappedTokenAddress)) {\n return 'unwrap';\n }\n }\n\n return null;\n}\n\n/**\n * Get the wrapper contract address for a given chain.\n * Throws if the chain is not in the config.\n */\nexport function getWrapperContractAddress(\n chainId: Caip2ChainId,\n chainConfigs: ReadonlyMap<Caip2ChainId, WrapChainConfig>,\n): Address {\n const config = chainConfigs.get(chainId);\n if (!config) {\n throw new SdkError(ErrorReason.CHAIN_NOT_SUPPORTED, ErrorCode.INVALID_PARAMS, {\n details: `No wrap/unwrap config for chain ${chainId}`,\n });\n }\n return config.wrappedTokenAddress;\n}\n\n/**\n * Encode the calldata for a wrap or unwrap operation.\n */\nexport function encodeWrapUnwrapData(direction: WrapDirection, amountIn: bigint): `0x${string}` {\n return direction === 'wrap'\n ? encodeFunctionData({ abi: WETH_ABI, functionName: 'deposit' })\n : encodeFunctionData({ abi: WETH_ABI, functionName: 'withdraw', args: [amountIn] });\n}\n\n/**\n * Estimate gas for a wrap or unwrap transaction.\n */\nexport async function estimateWrapUnwrapGas(opts: {\n client: ReturnType<typeof getEvmClientForChain>;\n direction: WrapDirection;\n amountIn: bigint;\n contractAddress: Address;\n fromAddress: `0x${string}`;\n estimateGasMarginBps?: number;\n}): Promise<bigint> {\n const client = opts.client;\n\n try {\n const gasEstimate =\n opts.direction === 'wrap'\n ? await client.estimateContractGas({\n address: opts.contractAddress,\n abi: WETH_ABI,\n functionName: 'deposit',\n value: opts.amountIn,\n account: opts.fromAddress,\n })\n : await client.estimateContractGas({\n address: opts.contractAddress,\n abi: WETH_ABI,\n functionName: 'withdraw',\n args: [opts.amountIn],\n account: opts.fromAddress,\n });\n\n return applyFeeUnitsBpsMargin(gasEstimate, opts.estimateGasMarginBps);\n } catch (err) {\n throw new SdkError('Error during gas estimation', ErrorCode.VIEM_ERROR, {\n cause: err,\n details: `Failed to estimate gas for ${opts.direction} transaction.`,\n });\n }\n}\n"],"mappings":"gMAeA,SAAgB,EACd,EACA,EACA,EACA,EACsB,CACtB,IAAM,EAAS,EAAa,IAAI,EAAQ,CAexC,OAdK,EAED,EAAY,OAASA,EAAAA,UAAU,QAAU,EAAY,OAASA,EAAAA,UAAU,4BACvD,EAAY,QAAS,EAAO,oBAAoB,CAC1D,OAIP,EAAY,OAASA,EAAAA,UAAU,QAAU,EAAY,OAASA,EAAAA,UAAU,4BACvD,EAAY,QAAS,EAAO,oBAAoB,CAC1D,SAIJ,KAda,KAqBtB,SAAgB,EACd,EACA,EACS,CACT,IAAM,EAAS,EAAa,IAAI,EAAQ,CACxC,GAAI,CAAC,EACH,MAAM,IAAIC,EAAAA,SAASC,EAAAA,YAAY,oBAAqBC,EAAAA,UAAU,eAAgB,CAC5E,QAAS,mCAAmC,IAC7C,CAAC,CAEJ,OAAO,EAAO,oBAMhB,SAAgB,EAAqB,EAA0B,EAAiC,CAC9F,OAAO,IAAc,QAAA,EAAA,EAAA,oBACE,CAAE,IAAKC,EAAAA,SAAU,aAAc,UAAW,CAAC,EAAA,EAAA,EAAA,oBAC3C,CAAE,IAAKA,EAAAA,SAAU,aAAc,WAAY,KAAM,CAAC,EAAS,CAAE,CAAC,CAMvF,eAAsB,EAAsB,EAOxB,CAClB,IAAM,EAAS,EAAK,OAEpB,GAAI,CAkBF,OAAOC,EAAAA,uBAhBL,EAAK,YAAc,OACf,MAAM,EAAO,oBAAoB,CAC/B,QAAS,EAAK,gBACd,IAAKD,EAAAA,SACL,aAAc,UACd,MAAO,EAAK,SACZ,QAAS,EAAK,YACf,CAAC,CACF,MAAM,EAAO,oBAAoB,CAC/B,QAAS,EAAK,gBACd,IAAKA,EAAAA,SACL,aAAc,WACd,KAAM,CAAC,EAAK,SAAS,CACrB,QAAS,EAAK,YACf,CAAC,CAEmC,EAAK,qBAAqB,OAC9D,EAAK,CACZ,MAAM,IAAIH,EAAAA,SAAS,8BAA+BE,EAAAA,UAAU,WAAY,CACtE,MAAO,EACP,QAAS,8BAA8B,EAAK,UAAU,eACvD,CAAC"}
@@ -0,0 +1,2 @@
1
+ import{TokenType as e}from"../../constants.js";import{ErrorCode as t,ErrorReason as n,SdkError as r}from"../../errors.js";import{applyFeeUnitsBpsMargin as i}from"../_utils.js";import{WETH_ABI as a}from"../_abis.js";import{encodeFunctionData as o,isAddressEqual as s}from"viem";function c(t,n,r,i){let a=i.get(r);return a?t.type===e.NATIVE&&n.type===e.ERC20&&s(n.address,a.wrappedTokenAddress)?`wrap`:n.type===e.NATIVE&&t.type===e.ERC20&&s(t.address,a.wrappedTokenAddress)?`unwrap`:null:null}function l(e,i){let a=i.get(e);if(!a)throw new r(n.CHAIN_NOT_SUPPORTED,t.INVALID_PARAMS,{details:`No wrap/unwrap config for chain ${e}`});return a.wrappedTokenAddress}function u(e,t){return o(e===`wrap`?{abi:a,functionName:`deposit`}:{abi:a,functionName:`withdraw`,args:[t]})}async function d(e){let n=e.client;try{return i(e.direction===`wrap`?await n.estimateContractGas({address:e.contractAddress,abi:a,functionName:`deposit`,value:e.amountIn,account:e.fromAddress}):await n.estimateContractGas({address:e.contractAddress,abi:a,functionName:`withdraw`,args:[e.amountIn],account:e.fromAddress}),e.estimateGasMarginBps)}catch(n){throw new r(`Error during gas estimation`,t.VIEM_ERROR,{cause:n,details:`Failed to estimate gas for ${e.direction} transaction.`})}}export{u as encodeWrapUnwrapData,d as estimateWrapUnwrapGas,c as getWrapDirection,l as getWrapperContractAddress};
2
+ //# sourceMappingURL=_utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_utils.js","names":[],"sources":["../../../src/transfer-service/wrap-unwrap/_utils.ts"],"sourcesContent":["import { encodeFunctionData, isAddressEqual, type Address } from 'viem';\nimport { TokenType } from '../../constants';\nimport { ErrorCode, ErrorReason, SdkError } from '../../errors';\nimport type { Asset } from '../../types/asset';\nimport type { Caip2ChainId } from '../../types/caip';\nimport { applyFeeUnitsBpsMargin, getEvmClientForChain } from '../_utils';\nimport { WETH_ABI } from '../_abis';\nimport type { WrapChainConfig } from './constants';\n\nexport type WrapDirection = 'wrap' | 'unwrap';\n\n/**\n * Determine whether the source->target asset pair represents a wrap or unwrap\n * on the given chain. Returns `null` when the pair is not a valid wrap/unwrap.\n */\nexport function getWrapDirection(\n sourceAsset: Asset,\n targetAsset: Asset,\n chainId: Caip2ChainId,\n chainConfigs: ReadonlyMap<Caip2ChainId, WrapChainConfig>,\n): WrapDirection | null {\n const config = chainConfigs.get(chainId);\n if (!config) return null;\n\n if (sourceAsset.type === TokenType.NATIVE && targetAsset.type === TokenType.ERC20) {\n if (isAddressEqual(targetAsset.address, config.wrappedTokenAddress)) {\n return 'wrap';\n }\n }\n\n if (targetAsset.type === TokenType.NATIVE && sourceAsset.type === TokenType.ERC20) {\n if (isAddressEqual(sourceAsset.address, config.wrappedTokenAddress)) {\n return 'unwrap';\n }\n }\n\n return null;\n}\n\n/**\n * Get the wrapper contract address for a given chain.\n * Throws if the chain is not in the config.\n */\nexport function getWrapperContractAddress(\n chainId: Caip2ChainId,\n chainConfigs: ReadonlyMap<Caip2ChainId, WrapChainConfig>,\n): Address {\n const config = chainConfigs.get(chainId);\n if (!config) {\n throw new SdkError(ErrorReason.CHAIN_NOT_SUPPORTED, ErrorCode.INVALID_PARAMS, {\n details: `No wrap/unwrap config for chain ${chainId}`,\n });\n }\n return config.wrappedTokenAddress;\n}\n\n/**\n * Encode the calldata for a wrap or unwrap operation.\n */\nexport function encodeWrapUnwrapData(direction: WrapDirection, amountIn: bigint): `0x${string}` {\n return direction === 'wrap'\n ? encodeFunctionData({ abi: WETH_ABI, functionName: 'deposit' })\n : encodeFunctionData({ abi: WETH_ABI, functionName: 'withdraw', args: [amountIn] });\n}\n\n/**\n * Estimate gas for a wrap or unwrap transaction.\n */\nexport async function estimateWrapUnwrapGas(opts: {\n client: ReturnType<typeof getEvmClientForChain>;\n direction: WrapDirection;\n amountIn: bigint;\n contractAddress: Address;\n fromAddress: `0x${string}`;\n estimateGasMarginBps?: number;\n}): Promise<bigint> {\n const client = opts.client;\n\n try {\n const gasEstimate =\n opts.direction === 'wrap'\n ? await client.estimateContractGas({\n address: opts.contractAddress,\n abi: WETH_ABI,\n functionName: 'deposit',\n value: opts.amountIn,\n account: opts.fromAddress,\n })\n : await client.estimateContractGas({\n address: opts.contractAddress,\n abi: WETH_ABI,\n functionName: 'withdraw',\n args: [opts.amountIn],\n account: opts.fromAddress,\n });\n\n return applyFeeUnitsBpsMargin(gasEstimate, opts.estimateGasMarginBps);\n } catch (err) {\n throw new SdkError('Error during gas estimation', ErrorCode.VIEM_ERROR, {\n cause: err,\n details: `Failed to estimate gas for ${opts.direction} transaction.`,\n });\n }\n}\n"],"mappings":"qRAeA,SAAgB,EACd,EACA,EACA,EACA,EACsB,CACtB,IAAM,EAAS,EAAa,IAAI,EAAQ,CAexC,OAdK,EAED,EAAY,OAAS,EAAU,QAAU,EAAY,OAAS,EAAU,OACtE,EAAe,EAAY,QAAS,EAAO,oBAAoB,CAC1D,OAIP,EAAY,OAAS,EAAU,QAAU,EAAY,OAAS,EAAU,OACtE,EAAe,EAAY,QAAS,EAAO,oBAAoB,CAC1D,SAIJ,KAda,KAqBtB,SAAgB,EACd,EACA,EACS,CACT,IAAM,EAAS,EAAa,IAAI,EAAQ,CACxC,GAAI,CAAC,EACH,MAAM,IAAI,EAAS,EAAY,oBAAqB,EAAU,eAAgB,CAC5E,QAAS,mCAAmC,IAC7C,CAAC,CAEJ,OAAO,EAAO,oBAMhB,SAAgB,EAAqB,EAA0B,EAAiC,CAC9F,OACI,EADG,IAAc,OACE,CAAE,IAAK,EAAU,aAAc,UAAW,CAC1C,CAAE,IAAK,EAAU,aAAc,WAAY,KAAM,CAAC,EAAS,CAAE,CAAC,CAMvF,eAAsB,EAAsB,EAOxB,CAClB,IAAM,EAAS,EAAK,OAEpB,GAAI,CAkBF,OAAO,EAhBL,EAAK,YAAc,OACf,MAAM,EAAO,oBAAoB,CAC/B,QAAS,EAAK,gBACd,IAAK,EACL,aAAc,UACd,MAAO,EAAK,SACZ,QAAS,EAAK,YACf,CAAC,CACF,MAAM,EAAO,oBAAoB,CAC/B,QAAS,EAAK,gBACd,IAAK,EACL,aAAc,WACd,KAAM,CAAC,EAAK,SAAS,CACrB,QAAS,EAAK,YACf,CAAC,CAEmC,EAAK,qBAAqB,OAC9D,EAAK,CACZ,MAAM,IAAI,EAAS,8BAA+B,EAAU,WAAY,CACtE,MAAO,EACP,QAAS,8BAA8B,EAAK,UAAU,eACvD,CAAC"}
@@ -0,0 +1,2 @@
1
+ const e=require(`../../constants.cjs`),t=`0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7`,n=`0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2`,r=`0xd00ae08403B9bbb9124bB305C09058E32C39A48c`,i=`0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14`,a=`https://images.ctfassets.net/gcj8jwzm6086/687e413f-7b24-48ff-a490-e61bd741bc8e/b68081167fa0c23d501092de0e767bd7/1-0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2.png`;function o(t,n){return{type:e.TokenType.ERC20,name:`Wrapped AVAX`,symbol:`WAVAX`,decimals:18,address:t,logoUri:n}}function s(t,n){return{type:e.TokenType.ERC20,name:`Wrapped Ether`,symbol:`WETH`,decimals:18,address:t,logoUri:n}}const c=new Map([[e.AvalancheChainIds.MAINNET,{chain:e.AVALANCHE_MAINNET_CHAIN,wrappedTokenAddress:t,nativeAsset:e.NATIVE_AVAX,wrappedAsset:o(t,`https://images.ctfassets.net/gcj8jwzm6086/0921c633-a8d2-4de6-b9f3-6508c641c44c/8b92abcbf0f59c9ad3188b0d9e8e3e3b/43114-0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7.png`)}],[e.EthereumChainIds.MAINNET,{chain:e.ETHEREUM_MAINNET_CHAIN,wrappedTokenAddress:n,nativeAsset:e.NATIVE_ETH,wrappedAsset:s(n,a)}]]),l=new Map([[e.AvalancheChainIds.FUJI,{chain:e.AVALANCHE_FUJI_CHAIN,wrappedTokenAddress:r,nativeAsset:e.NATIVE_AVAX,wrappedAsset:o(r,`https://images.ctfassets.net/gcj8jwzm6086/55f2e7e7-d9df-4827-ba2f-44f8ea357457/be31ef169362713370499782332df33d/43113-0xd00ae08403B9bbb9124bB305C09058E32C39A48c.png`)}],[e.EthereumChainIds.SEPOLIA,{chain:e.ETHEREUM_SEPOLIA_CHAIN,wrappedTokenAddress:i,nativeAsset:e.NATIVE_ETH,wrappedAsset:s(i,a)}]]);function u(t){return t===e.Environment.TEST?l:c}exports.WRAP_UNWRAP_QUOTE_TTL_SECONDS=3600,exports.getChainConfigs=u;
2
+ //# sourceMappingURL=constants.cjs.map