@avalabs/fusion-sdk 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (398) 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/_utils/merge-assets.cjs +2 -0
  12. package/dist/_utils/merge-assets.cjs.map +1 -0
  13. package/dist/_utils/merge-assets.js +2 -0
  14. package/dist/_utils/merge-assets.js.map +1 -0
  15. package/dist/_virtual/_rolldown/runtime.cjs +1 -0
  16. package/dist/constants.cjs +2 -0
  17. package/dist/constants.cjs.map +1 -0
  18. package/dist/constants.d.cts +102 -0
  19. package/dist/constants.d.ts +102 -0
  20. package/dist/constants.js +2 -0
  21. package/dist/constants.js.map +1 -0
  22. package/dist/errors.cjs +2 -0
  23. package/dist/errors.cjs.map +1 -0
  24. package/dist/errors.d.cts +115 -0
  25. package/dist/errors.d.ts +115 -0
  26. package/dist/errors.js +2 -0
  27. package/dist/errors.js.map +1 -0
  28. package/dist/mod.cjs +1 -0
  29. package/dist/mod.d.cts +19 -0
  30. package/dist/mod.d.ts +19 -0
  31. package/dist/mod.js +1 -0
  32. package/dist/quoter/_utils.cjs +2 -0
  33. package/dist/quoter/_utils.cjs.map +1 -0
  34. package/dist/quoter/_utils.js +2 -0
  35. package/dist/quoter/_utils.js.map +1 -0
  36. package/dist/quoter/constants.cjs +2 -0
  37. package/dist/quoter/constants.cjs.map +1 -0
  38. package/dist/quoter/constants.js +2 -0
  39. package/dist/quoter/constants.js.map +1 -0
  40. package/dist/quoter/quoter.cjs +2 -0
  41. package/dist/quoter/quoter.cjs.map +1 -0
  42. package/dist/quoter/quoter.d.cts +31 -0
  43. package/dist/quoter/quoter.d.ts +34 -0
  44. package/dist/quoter/quoter.js +2 -0
  45. package/dist/quoter/quoter.js.map +1 -0
  46. package/dist/transfer-manager.cjs +2 -0
  47. package/dist/transfer-manager.cjs.map +1 -0
  48. package/dist/transfer-manager.d.cts +17 -0
  49. package/dist/transfer-manager.d.ts +17 -0
  50. package/dist/transfer-manager.js +2 -0
  51. package/dist/transfer-manager.js.map +1 -0
  52. package/dist/transfer-service/_abis.cjs +2 -0
  53. package/dist/transfer-service/_abis.cjs.map +1 -0
  54. package/dist/transfer-service/_abis.js +2 -0
  55. package/dist/transfer-service/_abis.js.map +1 -0
  56. package/dist/transfer-service/_evm-gas.cjs +2 -0
  57. package/dist/transfer-service/_evm-gas.cjs.map +1 -0
  58. package/dist/transfer-service/_evm-gas.js +2 -0
  59. package/dist/transfer-service/_evm-gas.js.map +1 -0
  60. package/dist/transfer-service/_tracking-utilities.cjs +2 -0
  61. package/dist/transfer-service/_tracking-utilities.cjs.map +1 -0
  62. package/dist/transfer-service/_tracking-utilities.js +2 -0
  63. package/dist/transfer-service/_tracking-utilities.js.map +1 -0
  64. package/dist/transfer-service/_transfer-utilities.cjs +2 -0
  65. package/dist/transfer-service/_transfer-utilities.cjs.map +1 -0
  66. package/dist/transfer-service/_transfer-utilities.js +2 -0
  67. package/dist/transfer-service/_transfer-utilities.js.map +1 -0
  68. package/dist/transfer-service/_utils.cjs +2 -0
  69. package/dist/transfer-service/_utils.cjs.map +1 -0
  70. package/dist/transfer-service/_utils.js +2 -0
  71. package/dist/transfer-service/_utils.js.map +1 -0
  72. package/dist/transfer-service/_warden-config-schema.cjs +2 -0
  73. package/dist/transfer-service/_warden-config-schema.cjs.map +1 -0
  74. package/dist/transfer-service/_warden-config-schema.js +2 -0
  75. package/dist/transfer-service/_warden-config-schema.js.map +1 -0
  76. package/dist/transfer-service/_warden-config.cjs +2 -0
  77. package/dist/transfer-service/_warden-config.cjs.map +1 -0
  78. package/dist/transfer-service/_warden-config.js +2 -0
  79. package/dist/transfer-service/_warden-config.js.map +1 -0
  80. package/dist/transfer-service/avalanche-evm/_constants.cjs +2 -0
  81. package/dist/transfer-service/avalanche-evm/_constants.cjs.map +1 -0
  82. package/dist/transfer-service/avalanche-evm/_constants.js +2 -0
  83. package/dist/transfer-service/avalanche-evm/_constants.js.map +1 -0
  84. package/dist/transfer-service/avalanche-evm/_handlers/analyze-support.cjs +2 -0
  85. package/dist/transfer-service/avalanche-evm/_handlers/analyze-support.cjs.map +1 -0
  86. package/dist/transfer-service/avalanche-evm/_handlers/analyze-support.js +2 -0
  87. package/dist/transfer-service/avalanche-evm/_handlers/analyze-support.js.map +1 -0
  88. package/dist/transfer-service/avalanche-evm/_handlers/estimate-native-fee.cjs +2 -0
  89. package/dist/transfer-service/avalanche-evm/_handlers/estimate-native-fee.cjs.map +1 -0
  90. package/dist/transfer-service/avalanche-evm/_handlers/estimate-native-fee.js +2 -0
  91. package/dist/transfer-service/avalanche-evm/_handlers/estimate-native-fee.js.map +1 -0
  92. package/dist/transfer-service/avalanche-evm/_handlers/get-assets.cjs +2 -0
  93. package/dist/transfer-service/avalanche-evm/_handlers/get-assets.cjs.map +1 -0
  94. package/dist/transfer-service/avalanche-evm/_handlers/get-assets.js +2 -0
  95. package/dist/transfer-service/avalanche-evm/_handlers/get-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-minimum-transfer-amount.cjs +2 -0
  185. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-minimum-transfer-amount.cjs.map +1 -0
  186. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-minimum-transfer-amount.js +2 -0
  187. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-minimum-transfer-amount.js.map +1 -0
  188. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/stream-quotes.cjs +2 -0
  189. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/stream-quotes.cjs.map +1 -0
  190. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/stream-quotes.js +2 -0
  191. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/stream-quotes.js.map +1 -0
  192. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/track-transfer.cjs +2 -0
  193. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/track-transfer.cjs.map +1 -0
  194. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/track-transfer.js +2 -0
  195. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/track-transfer.js.map +1 -0
  196. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/transfer-asset.cjs +2 -0
  197. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/transfer-asset.cjs.map +1 -0
  198. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/transfer-asset.js +2 -0
  199. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/transfer-asset.js.map +1 -0
  200. package/dist/transfer-service/lombard/btc-to-btcb-service.cjs +2 -0
  201. package/dist/transfer-service/lombard/btc-to-btcb-service.cjs.map +1 -0
  202. package/dist/transfer-service/lombard/btc-to-btcb-service.js +2 -0
  203. package/dist/transfer-service/lombard/btc-to-btcb-service.js.map +1 -0
  204. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/analyze-support.cjs +2 -0
  205. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/analyze-support.cjs.map +1 -0
  206. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/analyze-support.js +2 -0
  207. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/analyze-support.js.map +1 -0
  208. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/estimate-native-fee.cjs +2 -0
  209. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/estimate-native-fee.cjs.map +1 -0
  210. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/estimate-native-fee.js +2 -0
  211. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/estimate-native-fee.js.map +1 -0
  212. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/get-assets.cjs +2 -0
  213. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/get-assets.cjs.map +1 -0
  214. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/get-assets.js +2 -0
  215. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/get-assets.js.map +1 -0
  216. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/stream-quotes.cjs +2 -0
  217. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/stream-quotes.cjs.map +1 -0
  218. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/stream-quotes.js +2 -0
  219. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/stream-quotes.js.map +1 -0
  220. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/track-transfer.cjs +2 -0
  221. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/track-transfer.cjs.map +1 -0
  222. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/track-transfer.js +2 -0
  223. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/track-transfer.js.map +1 -0
  224. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/transfer-asset.cjs +2 -0
  225. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/transfer-asset.cjs.map +1 -0
  226. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/transfer-asset.js +2 -0
  227. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/transfer-asset.js.map +1 -0
  228. package/dist/transfer-service/lombard/btcb-to-btc-service.cjs +2 -0
  229. package/dist/transfer-service/lombard/btcb-to-btc-service.cjs.map +1 -0
  230. package/dist/transfer-service/lombard/btcb-to-btc-service.js +2 -0
  231. package/dist/transfer-service/lombard/btcb-to-btc-service.js.map +1 -0
  232. package/dist/transfer-service/lombard/constants.cjs +2 -0
  233. package/dist/transfer-service/lombard/constants.cjs.map +1 -0
  234. package/dist/transfer-service/lombard/constants.js +2 -0
  235. package/dist/transfer-service/lombard/constants.js.map +1 -0
  236. package/dist/transfer-service/markr/_abis/cross-chain-swap-wrapper-abi.cjs +2 -0
  237. package/dist/transfer-service/markr/_abis/cross-chain-swap-wrapper-abi.cjs.map +1 -0
  238. package/dist/transfer-service/markr/_abis/cross-chain-swap-wrapper-abi.js +2 -0
  239. package/dist/transfer-service/markr/_abis/cross-chain-swap-wrapper-abi.js.map +1 -0
  240. package/dist/transfer-service/markr/_abis/swap-wrapper-abi.cjs +2 -0
  241. package/dist/transfer-service/markr/_abis/swap-wrapper-abi.cjs.map +1 -0
  242. package/dist/transfer-service/markr/_abis/swap-wrapper-abi.js +2 -0
  243. package/dist/transfer-service/markr/_abis/swap-wrapper-abi.js.map +1 -0
  244. package/dist/transfer-service/markr/_api.cjs +2 -0
  245. package/dist/transfer-service/markr/_api.cjs.map +1 -0
  246. package/dist/transfer-service/markr/_api.js +2 -0
  247. package/dist/transfer-service/markr/_api.js.map +1 -0
  248. package/dist/transfer-service/markr/_handlers/analyze-support.cjs +2 -0
  249. package/dist/transfer-service/markr/_handlers/analyze-support.cjs.map +1 -0
  250. package/dist/transfer-service/markr/_handlers/analyze-support.js +2 -0
  251. package/dist/transfer-service/markr/_handlers/analyze-support.js.map +1 -0
  252. package/dist/transfer-service/markr/_handlers/estimate-native-fee.cjs +2 -0
  253. package/dist/transfer-service/markr/_handlers/estimate-native-fee.cjs.map +1 -0
  254. package/dist/transfer-service/markr/_handlers/estimate-native-fee.js +2 -0
  255. package/dist/transfer-service/markr/_handlers/estimate-native-fee.js.map +1 -0
  256. package/dist/transfer-service/markr/_handlers/get-assets.cjs +2 -0
  257. package/dist/transfer-service/markr/_handlers/get-assets.cjs.map +1 -0
  258. package/dist/transfer-service/markr/_handlers/get-assets.js +2 -0
  259. package/dist/transfer-service/markr/_handlers/get-assets.js.map +1 -0
  260. package/dist/transfer-service/markr/_handlers/get-minimum-transfer-amount.cjs +2 -0
  261. package/dist/transfer-service/markr/_handlers/get-minimum-transfer-amount.cjs.map +1 -0
  262. package/dist/transfer-service/markr/_handlers/get-minimum-transfer-amount.js +2 -0
  263. package/dist/transfer-service/markr/_handlers/get-minimum-transfer-amount.js.map +1 -0
  264. package/dist/transfer-service/markr/_handlers/stream-quotes.cjs +2 -0
  265. package/dist/transfer-service/markr/_handlers/stream-quotes.cjs.map +1 -0
  266. package/dist/transfer-service/markr/_handlers/stream-quotes.js +2 -0
  267. package/dist/transfer-service/markr/_handlers/stream-quotes.js.map +1 -0
  268. package/dist/transfer-service/markr/_handlers/track-transfer.cjs +2 -0
  269. package/dist/transfer-service/markr/_handlers/track-transfer.cjs.map +1 -0
  270. package/dist/transfer-service/markr/_handlers/track-transfer.js +2 -0
  271. package/dist/transfer-service/markr/_handlers/track-transfer.js.map +1 -0
  272. package/dist/transfer-service/markr/_handlers/transfer-asset.cjs +2 -0
  273. package/dist/transfer-service/markr/_handlers/transfer-asset.cjs.map +1 -0
  274. package/dist/transfer-service/markr/_handlers/transfer-asset.js +2 -0
  275. package/dist/transfer-service/markr/_handlers/transfer-asset.js.map +1 -0
  276. package/dist/transfer-service/markr/_schema.cjs +2 -0
  277. package/dist/transfer-service/markr/_schema.cjs.map +1 -0
  278. package/dist/transfer-service/markr/_schema.js +2 -0
  279. package/dist/transfer-service/markr/_schema.js.map +1 -0
  280. package/dist/transfer-service/markr/_type-guards.cjs +2 -0
  281. package/dist/transfer-service/markr/_type-guards.cjs.map +1 -0
  282. package/dist/transfer-service/markr/_type-guards.js +2 -0
  283. package/dist/transfer-service/markr/_type-guards.js.map +1 -0
  284. package/dist/transfer-service/markr/_utils.cjs +2 -0
  285. package/dist/transfer-service/markr/_utils.cjs.map +1 -0
  286. package/dist/transfer-service/markr/_utils.js +2 -0
  287. package/dist/transfer-service/markr/_utils.js.map +1 -0
  288. package/dist/transfer-service/markr/constants.cjs +2 -0
  289. package/dist/transfer-service/markr/constants.cjs.map +1 -0
  290. package/dist/transfer-service/markr/constants.js +2 -0
  291. package/dist/transfer-service/markr/constants.js.map +1 -0
  292. package/dist/transfer-service/markr/markr-service.cjs +2 -0
  293. package/dist/transfer-service/markr/markr-service.cjs.map +1 -0
  294. package/dist/transfer-service/markr/markr-service.js +2 -0
  295. package/dist/transfer-service/markr/markr-service.js.map +1 -0
  296. package/dist/transfer-service/service-schemas.cjs +2 -0
  297. package/dist/transfer-service/service-schemas.cjs.map +1 -0
  298. package/dist/transfer-service/service-schemas.js +2 -0
  299. package/dist/transfer-service/service-schemas.js.map +1 -0
  300. package/dist/transfer-service/wrap-unwrap/_handlers/analyze-support.cjs +2 -0
  301. package/dist/transfer-service/wrap-unwrap/_handlers/analyze-support.cjs.map +1 -0
  302. package/dist/transfer-service/wrap-unwrap/_handlers/analyze-support.js +2 -0
  303. package/dist/transfer-service/wrap-unwrap/_handlers/analyze-support.js.map +1 -0
  304. package/dist/transfer-service/wrap-unwrap/_handlers/estimate-native-fee.cjs +2 -0
  305. package/dist/transfer-service/wrap-unwrap/_handlers/estimate-native-fee.cjs.map +1 -0
  306. package/dist/transfer-service/wrap-unwrap/_handlers/estimate-native-fee.js +2 -0
  307. package/dist/transfer-service/wrap-unwrap/_handlers/estimate-native-fee.js.map +1 -0
  308. package/dist/transfer-service/wrap-unwrap/_handlers/get-assets.cjs +2 -0
  309. package/dist/transfer-service/wrap-unwrap/_handlers/get-assets.cjs.map +1 -0
  310. package/dist/transfer-service/wrap-unwrap/_handlers/get-assets.js +2 -0
  311. package/dist/transfer-service/wrap-unwrap/_handlers/get-assets.js.map +1 -0
  312. package/dist/transfer-service/wrap-unwrap/_handlers/get-minimum-transfer-amount.cjs +2 -0
  313. package/dist/transfer-service/wrap-unwrap/_handlers/get-minimum-transfer-amount.cjs.map +1 -0
  314. package/dist/transfer-service/wrap-unwrap/_handlers/get-minimum-transfer-amount.js +2 -0
  315. package/dist/transfer-service/wrap-unwrap/_handlers/get-minimum-transfer-amount.js.map +1 -0
  316. package/dist/transfer-service/wrap-unwrap/_handlers/stream-quotes.cjs +2 -0
  317. package/dist/transfer-service/wrap-unwrap/_handlers/stream-quotes.cjs.map +1 -0
  318. package/dist/transfer-service/wrap-unwrap/_handlers/stream-quotes.js +2 -0
  319. package/dist/transfer-service/wrap-unwrap/_handlers/stream-quotes.js.map +1 -0
  320. package/dist/transfer-service/wrap-unwrap/_handlers/track-transfer.cjs +2 -0
  321. package/dist/transfer-service/wrap-unwrap/_handlers/track-transfer.cjs.map +1 -0
  322. package/dist/transfer-service/wrap-unwrap/_handlers/track-transfer.js +2 -0
  323. package/dist/transfer-service/wrap-unwrap/_handlers/track-transfer.js.map +1 -0
  324. package/dist/transfer-service/wrap-unwrap/_handlers/transfer-asset.cjs +2 -0
  325. package/dist/transfer-service/wrap-unwrap/_handlers/transfer-asset.cjs.map +1 -0
  326. package/dist/transfer-service/wrap-unwrap/_handlers/transfer-asset.js +2 -0
  327. package/dist/transfer-service/wrap-unwrap/_handlers/transfer-asset.js.map +1 -0
  328. package/dist/transfer-service/wrap-unwrap/_utils.cjs +2 -0
  329. package/dist/transfer-service/wrap-unwrap/_utils.cjs.map +1 -0
  330. package/dist/transfer-service/wrap-unwrap/_utils.js +2 -0
  331. package/dist/transfer-service/wrap-unwrap/_utils.js.map +1 -0
  332. package/dist/transfer-service/wrap-unwrap/constants.cjs +2 -0
  333. package/dist/transfer-service/wrap-unwrap/constants.cjs.map +1 -0
  334. package/dist/transfer-service/wrap-unwrap/constants.js +2 -0
  335. package/dist/transfer-service/wrap-unwrap/constants.js.map +1 -0
  336. package/dist/transfer-service/wrap-unwrap/wrap-unwrap-service.cjs +2 -0
  337. package/dist/transfer-service/wrap-unwrap/wrap-unwrap-service.cjs.map +1 -0
  338. package/dist/transfer-service/wrap-unwrap/wrap-unwrap-service.js +2 -0
  339. package/dist/transfer-service/wrap-unwrap/wrap-unwrap-service.js.map +1 -0
  340. package/dist/type-guards.cjs +2 -0
  341. package/dist/type-guards.cjs.map +1 -0
  342. package/dist/type-guards.d.cts +16 -0
  343. package/dist/type-guards.d.ts +16 -0
  344. package/dist/type-guards.js +2 -0
  345. package/dist/type-guards.js.map +1 -0
  346. package/dist/types/asset.d.cts +61 -0
  347. package/dist/types/asset.d.ts +61 -0
  348. package/dist/types/bitcoin.d.cts +66 -0
  349. package/dist/types/bitcoin.d.ts +66 -0
  350. package/dist/types/caip.d.cts +30 -0
  351. package/dist/types/caip.d.ts +30 -0
  352. package/dist/types/chain.d.cts +17 -0
  353. package/dist/types/chain.d.ts +17 -0
  354. package/dist/types/fee.d.cts +13 -0
  355. package/dist/types/fee.d.ts +13 -0
  356. package/dist/types/quote.d.cts +140 -0
  357. package/dist/types/quote.d.ts +140 -0
  358. package/dist/types/service.d.cts +224 -0
  359. package/dist/types/service.d.ts +224 -0
  360. package/dist/types/signer.d.cts +50 -0
  361. package/dist/types/signer.d.ts +50 -0
  362. package/dist/types/transfer-manager.d.cts +115 -0
  363. package/dist/types/transfer-manager.d.ts +115 -0
  364. package/dist/types/transfer.d.cts +107 -0
  365. package/dist/types/transfer.d.ts +107 -0
  366. package/dist/types/utility-types.d.cts +21 -0
  367. package/dist/types/utility-types.d.ts +21 -0
  368. package/dist/utils/bitcoin-address.cjs +2 -0
  369. package/dist/utils/bitcoin-address.cjs.map +1 -0
  370. package/dist/utils/bitcoin-address.js +2 -0
  371. package/dist/utils/bitcoin-address.js.map +1 -0
  372. package/dist/utils/caip.cjs +2 -0
  373. package/dist/utils/caip.cjs.map +1 -0
  374. package/dist/utils/caip.d.cts +49 -0
  375. package/dist/utils/caip.d.ts +49 -0
  376. package/dist/utils/caip.js +2 -0
  377. package/dist/utils/caip.js.map +1 -0
  378. package/dist/utils/evm-address.cjs +2 -0
  379. package/dist/utils/evm-address.cjs.map +1 -0
  380. package/dist/utils/evm-address.js +2 -0
  381. package/dist/utils/evm-address.js.map +1 -0
  382. package/dist/utils/quote-fees.cjs +2 -0
  383. package/dist/utils/quote-fees.cjs.map +1 -0
  384. package/dist/utils/quote-fees.js +2 -0
  385. package/dist/utils/quote-fees.js.map +1 -0
  386. package/dist/utils/sol-address.cjs +2 -0
  387. package/dist/utils/sol-address.cjs.map +1 -0
  388. package/dist/utils/sol-address.js +2 -0
  389. package/dist/utils/sol-address.js.map +1 -0
  390. package/dist/utils/solana-transaction.d.cts +15 -0
  391. package/dist/utils/solana-transaction.d.ts +17 -0
  392. package/dist/utils/transfer-utils.cjs +2 -0
  393. package/dist/utils/transfer-utils.cjs.map +1 -0
  394. package/dist/utils/transfer-utils.d.cts +8 -0
  395. package/dist/utils/transfer-utils.d.ts +8 -0
  396. package/dist/utils/transfer-utils.js +2 -0
  397. package/dist/utils/transfer-utils.js.map +1 -0
  398. package/package.json +63 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_type-guards.cjs","names":[],"sources":["../../../src/transfer-service/markr/_type-guards.ts"],"sourcesContent":["import type { SolanaSwapTransactionResponse, SwapResponse, WrappedSwapTransactionResponse } from './_schema';\n\nexport function isEvmSwapResponse(swap: SwapResponse): swap is WrappedSwapTransactionResponse {\n return 'data' in swap;\n}\n\nexport function isSolanaSwapResponse(swap: SwapResponse): swap is SolanaSwapTransactionResponse {\n return `chainType` in swap && swap.chainType === 'svm';\n}\n"],"mappings":"AAEA,SAAgB,EAAkB,EAA4D,CAC5F,MAAO,SAAU,EAGnB,SAAgB,EAAqB,EAA2D,CAC9F,MAAO,cAAe,GAAQ,EAAK,YAAc"}
@@ -0,0 +1,2 @@
1
+ function e(e){return`data`in e}function t(e){return`chainType`in e&&e.chainType===`svm`}export{e as isEvmSwapResponse,t as isSolanaSwapResponse};
2
+ //# sourceMappingURL=_type-guards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_type-guards.js","names":[],"sources":["../../../src/transfer-service/markr/_type-guards.ts"],"sourcesContent":["import type { SolanaSwapTransactionResponse, SwapResponse, WrappedSwapTransactionResponse } from './_schema';\n\nexport function isEvmSwapResponse(swap: SwapResponse): swap is WrappedSwapTransactionResponse {\n return 'data' in swap;\n}\n\nexport function isSolanaSwapResponse(swap: SwapResponse): swap is SolanaSwapTransactionResponse {\n return `chainType` in swap && swap.chainType === 'svm';\n}\n"],"mappings":"AAEA,SAAgB,EAAkB,EAA4D,CAC5F,MAAO,SAAU,EAGnB,SAAgB,EAAqB,EAA2D,CAC9F,MAAO,cAAe,GAAQ,EAAK,YAAc"}
@@ -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/evm-address.cjs`),i=require(`../../_utils/chain.cjs`),a=require(`./_api.cjs`),o=require(`../../_utils/math.cjs`);let s=require(`viem`);async function c(e){let r=new Map;try{let t=(await a.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,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`);!i&&!a||r.set(t,{chainId:e.chainId,crossChainSwapEnabled:i,swapEnabled:a,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 r}async function l(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=a.markrGetTokenList(e,i.chainId);n.set(r,t)}catch{}return n}function u(t){return t===e.ERC_ZERO_ADDRESS||t===e.SOL_MINT_ADDRESS}function d(t,n){return t.type===e.TokenType.NATIVE?i.isSolanaNamespace(n)?e.SOL_MINT_ADDRESS:e.ERC_ZERO_ADDRESS:t.address}function f({amountOut:e,assetOut:t,slippageBps:n}){let r=o.calculateMinimumAmountOut({amountOut:e,assetOut:t,slippageBps:n});return e>0n&&r===0n?1n:r}function p(t,n,r){let i=t.amountOut*BigInt(r)/10000n,a=t.amountOut-i,o=[...h(t.fees),{type:`partner`,name:`Core Fee`,amount:i,chainId:n.targetChain.chainId,token:g(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 m(e){try{return(await a.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 h(t){if(!t)return[];let i=[];for(let a of t){let t=n.eip155ChainIdToCaip2(a.token.chainId),o;u(a.token.address)?o={type:e.TokenType.NATIVE}:r.isEvmAddress(a.token.address)&&(o={type:e.TokenType.ERC20,address:a.token.address}),o&&i.push({type:a.type,name:a.name,amount:a.amount,chainId:t,token:o})}return i}function g(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 _(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 v(e){if(e instanceof s.BaseError){let t=e.data;if((0,s.isHex)(t))return t;let n;if(e.walk(e=>{let t=e.data;return!n&&(0,s.isHex)(t)&&(n=t),!1}),n)return n;let r=e.cause?.data;if((0,s.isHex)(r))return r}if(!e||typeof e!=`object`)return;let t=e;if((0,s.isHex)(t.data))return t.data;if((0,s.isHex)(t.error?.data))return t.error.data;if((0,s.isHex)(t.cause?.data))return t.cause.data;if((0,s.isHex)(t.response?.data))return t.response.data;if((0,s.isHex)(t.body?.error?.data))return t.body.error.data}function y(e,t){let n=v(t);if(!n)return null;try{let t=(0,s.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,s.toFunctionSelector)(`${n.name}(${n.inputs.map(e=>e.type).join(`,`)})`).toLowerCase()===t)return`${n.name}()`}return null}exports.assetToAddressString=d,exports.calculateMarkrMinimumAmountOut=f,exports.decodeMarkrRevertError=y,exports.getMarkrSwapWrapperAbi=_,exports.getPartnerFeeBps=m,exports.getSupportedChains=c,exports.getSupportedTokens=l,exports.isTokenAddressNative=u,exports.quoteFromMarkrQuoteResponseData=p;
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","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';\n\nexport type SupportedChainsMap = Map<\n Caip2ChainId,\n {\n /** `number` for EVM, `Caip2ChainId` for SVM */\n chainId: number | Caip2ChainId;\n crossChainSwapEnabled: boolean;\n swapEnabled: boolean;\n tokenList: boolean;\n }\n>;\n\nexport async function getSupportedChains(apiOptions: ApiOptions): 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\n if (!isCrossChainSwapEnabled && !isSwapEnabled) {\n continue;\n }\n\n supportedChains.set(key, {\n chainId: chain.chainId,\n crossChainSwapEnabled: isCrossChainSwapEnabled,\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 = eip155ChainIdToCaip2(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 }\n // We skip \"solana\" here since we expect the chainId to always be EIP-155.\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":"qTA6BA,eAAsB,EAAmB,EAAqD,CAC5F,IAAM,EAAsC,IAAI,IAEhD,GAAI,CAEF,IAAM,GADS,MAAMA,EAAAA,mBAAmB,EAAW,EACZ,OACpC,GAEQ,EAAM,YAAc,OAAS,EAAM,YAAc,MAE3D,CAED,IAAK,IAAM,KAAS,EAAyB,CAC3C,IAAM,EAAoB,OAAO,EAAM,SAAY,SAAWC,EAAAA,qBAAqB,EAAM,QAAQ,CAAG,EAAM,QAEpG,EACJ,EAAM,iBAAiB,SAAS,oBAAoB,EAAI,EAAM,iBAAiB,SAAS,mBAAmB,CACvG,EAAgB,EAAM,iBAAiB,SAAS,QAAQ,EAAI,EAAM,iBAAiB,SAAS,OAAO,CAErG,CAAC,GAA2B,CAAC,GAIjC,EAAgB,IAAI,EAAK,CACvB,QAAS,EAAM,QACf,sBAAuB,EACvB,YAAa,EACb,UAAW,EAAM,iBAAiB,SAAS,aAAa,CACzD,CAAC,QAEG,EAAO,CACd,MAAM,IAAIC,EAAAA,SAASC,EAAAA,YAAY,QAASC,EAAAA,UAAU,sBAAuB,CACvE,MAAO,EACP,QAAS,mDACV,CAAC,CAGJ,OAAO,EAGT,eAAsB,EACpB,EACA,EACwD,CAExD,IAAM,EAAiE,IAAI,IAE3E,IAAK,GAAM,CAAC,EAAc,KAAc,EAAgB,SAAS,CAE/D,GACE,OAAO,EAAU,SAAY,UAC7B,EAAU,YACT,EAAU,uBAAyB,EAAU,aAE9C,GAAI,CACF,IAAM,EAAmBC,EAAAA,kBAAkB,EAAY,EAAU,QAAQ,CACzE,EAAgB,IAAI,EAAc,EAAiB,MAC7C,EAOZ,OAAO,EAST,SAAgB,EAAqB,EAA0B,CAC7D,OAAO,IAAYC,EAAAA,kBAAoB,IAAYC,EAAAA,iBAarD,SAAgB,EAAqB,EAAc,EAA+B,CAShF,OARI,EAAM,OAASC,EAAAA,UAAU,OACvBC,EAAAA,kBAAkB,EAAQ,CACrBF,EAAAA,iBAGFD,EAAAA,iBAGF,EAAM,QAUf,SAAgB,EAA+B,CAC7C,YACA,WACA,eACgE,CAChE,IAAM,EAAeI,EAAAA,0BAA0B,CAAE,YAAW,WAAU,cAAa,CAAC,CAMpF,OAJI,EAAY,IAAM,IAAiB,GAC9B,GAGF,EAGT,SAAgB,EACd,EACA,EACA,EACO,CACP,IAAM,EAAsB,EAAK,UAAY,OAAO,EAAc,CAAI,OAChE,EAA6B,EAAK,UAAY,EAE9C,EAAkB,CACtB,GAAG,EAAyC,EAAK,KAAK,CAEtD,CACE,KAAM,UACN,KAAM,WACN,OAAQ,EACR,QAAS,EAAY,YAAY,QACjC,MAAO,EAAgB,EAAY,YAAY,CAChD,CACF,CAED,MAAO,CACL,WAAY,CACV,GAAI,EAAK,WAAW,GACpB,QAAS,EAAK,WAAW,SACzB,KAAM,EAAK,WAAW,KACvB,CACD,SAAU,EAAK,SACf,UAAW,EACX,QAAS,EAAY,YACrB,SAAU,EAAY,YACtB,UAAW,EAAK,UAChB,OACA,YAAa,EAAY,YAKzB,YAAa,EAAK,YAClB,GAAI,EAAK,KACT,gBACA,YAAaC,EAAAA,YAAY,MACzB,YAAa,EAAY,aAAe,EAAK,oBAC7C,YAAa,EAAY,YACzB,YAAa,EAAY,YACzB,UAAW,EAAY,UACxB,CAGH,eAAsB,EAAiB,EAAyC,CAC9E,GAAI,CAEF,OADoB,MAAMC,EAAAA,oBAAoB,EAAW,EACtC,UACZ,EAAO,CACd,MAAM,IAAIV,EAAAA,SAASC,EAAAA,YAAY,QAASC,EAAAA,UAAU,sBAAuB,CACvE,MAAO,EACP,QAAS,+CACV,CAAC,EAIN,SAAgB,EAAyC,EAAiD,CACxG,GAAI,CAAC,EACH,MAAO,EAAE,CAGX,IAAM,EAAmB,EAAE,CAE3B,IAAK,IAAM,KAAO,EAAW,CAC3B,IAAM,EAAUH,EAAAA,qBAAqB,EAAI,MAAM,QAAQ,CAEnD,EAEA,EAAqB,EAAI,MAAM,QAAQ,CACzC,EAAQ,CAAE,KAAMO,EAAAA,UAAU,OAAQ,CACzBK,EAAAA,aAAa,EAAI,MAAM,QAAQ,GACxC,EAAQ,CAAE,KAAML,EAAAA,UAAU,MAAO,QAAS,EAAI,MAAM,QAAS,EAI1D,GAKL,EAAK,KAAK,CACR,KAAM,EAAI,KACV,KAAM,EAAI,KACV,OAAQ,EAAI,OACZ,UACA,QACD,CAAC,CAGJ,OAAO,EAGT,SAAS,EAAgB,EAA6B,CASpD,OARI,EAAM,OAASA,EAAAA,UAAU,OACpB,CAAE,KAAMA,EAAAA,UAAU,OAAQ,CAG/B,EAAM,OAASA,EAAAA,UAAU,IACpB,CAAE,KAAMA,EAAAA,UAAU,IAAK,QAAS,EAAM,QAAS,CAGjD,CAAE,KAAMA,EAAAA,UAAU,MAAO,QAAS,EAAM,QAAS,CAO1D,eAAsB,EAAuB,EAA8C,CAKzF,OAJI,GACM,MAAA,QAAA,SAAA,CAAA,SAAA,QAAM,2CAAA,CAAA,EAAgD,oCAGxD,MAAA,QAAA,SAAA,CAAA,SAAA,QAAM,+BAAA,CAAA,EAAoC,uBAGpD,SAAgB,EAAwB,EAAiC,CACvE,GAAI,aAAiBM,EAAAA,UAAW,CAC9B,IAAM,EAAc,EAA6B,KACjD,IAAA,EAAA,EAAA,OAAU,EAAW,CACnB,OAAO,EAGT,IAAI,EASJ,GARA,EAAM,KAAM,GAAgB,CAC1B,IAAM,EAAc,EAAmC,KAIvD,MAHI,CAAC,IAAA,EAAA,EAAA,OAAoB,EAAW,GAClC,EAAa,GAER,IACP,CAEE,EACF,OAAO,EAGT,IAAM,EAAa,EAAyC,OAAO,KACnE,IAAA,EAAA,EAAA,OAAU,EAAU,CAClB,OAAO,EAIX,GAAI,CAAC,GAAS,OAAO,GAAU,SAC7B,OAGF,IAAM,EAAe,EAQrB,IAAA,EAAA,EAAA,OAAU,EAAa,KAAK,CAC1B,OAAO,EAAa,KAGtB,IAAA,EAAA,EAAA,OAAU,EAAa,OAAO,KAAK,CACjC,OAAO,EAAa,MAAM,KAG5B,IAAA,EAAA,EAAA,OAAU,EAAa,OAAO,KAAK,CACjC,OAAO,EAAa,MAAM,KAG5B,IAAA,EAAA,EAAA,OAAU,EAAa,UAAU,KAAK,CACpC,OAAO,EAAa,SAAS,KAG/B,IAAA,EAAA,EAAA,OAAU,EAAa,MAAM,OAAO,KAAK,CACvC,OAAO,EAAa,KAAK,MAAM,KAMnC,SAAgB,EAAuB,EAAqB,EAA+B,CACzF,IAAM,EAAa,EAAwB,EAAM,CAEjD,GAAI,CAAC,EACH,OAAO,KAGT,GAAI,CACF,IAAM,GAAA,EAAA,EAAA,mBAA4B,CAAE,MAAK,KAAM,EAAY,CAAC,CACtD,EAAc,EAAQ,KAAK,OAAS,EAAI,IAAI,EAAQ,KAAK,IAAI,OAAO,CAAC,KAAK,KAAK,CAAC,GAAK,KAE3F,MAAO,GAAG,EAAQ,YAAY,SACxB,CACN,IAAM,EAAW,EAAW,MAAM,EAAG,GAAG,CAAC,aAAa,CAEtD,IAAK,IAAM,KAAW,EAChB,KAAQ,OAAS,UAKrB,EAAA,EAAA,oBADkB,GAAG,EAAQ,KAAK,GAAG,EAAQ,OAAO,IAAK,GAAU,EAAM,KAAK,CAAC,KAAK,IAAI,CAAC,GACxD,CAAC,aAAa,GAAK,EAClD,MAAO,GAAG,EAAQ,KAAK,IAK7B,OAAO"}
@@ -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{isEvmAddress as c}from"../../utils/evm-address.js";import{isSolanaNamespace as l}from"../../_utils/chain.js";import{markrGetInfoChains as u,markrGetPartnerInfo as d,markrGetTokenList as f}from"./_api.js";import{calculateMinimumAmountOut as p}from"../../_utils/math.js";import{BaseError as m,decodeErrorResult as h,isHex as g,toFunctionSelector as _}from"viem";async function v(e){let t=new Map;try{let n=(await u(e)).filter(e=>e.chainType===`evm`||e.chainType===`svm`);for(let e of n){let n=typeof e.chainId==`number`?s(e.chainId):e.chainId,r=e.enabled_services.includes(`cross-chain-quote`)&&e.enabled_services.includes(`cross-chain-swap`),i=e.enabled_services.includes(`quote`)&&e.enabled_services.includes(`swap`);!r&&!i||t.set(n,{chainId:e.chainId,crossChainSwapEnabled:r,swapEnabled:i,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 t}async function y(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=f(e,i.chainId);n.set(r,t)}catch{}return n}function b(n){return n===e||n===t}function x(n,i){return n.type===r.NATIVE?l(i)?t:e:n.address}function S({amountOut:e,assetOut:t,slippageBps:n}){let r=p({amountOut:e,assetOut:t,slippageBps:n});return e>0n&&r===0n?1n:r}function C(e,t,r){let i=e.amountOut*BigInt(r)/10000n,a=e.amountOut-i,o=[...T(e.fees),{type:`partner`,name:`Core Fee`,amount:i,chainId:t.targetChain.chainId,token:E(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 w(e){try{return(await d(e)).fee}catch(e){throw new o(a.UNKNOWN,i.INITIALIZATION_FAILED,{cause:e,details:`Failed to fetch partner info from Markr API.`})}}function T(e){if(!e)return[];let t=[];for(let n of e){let e=s(n.token.chainId),i;b(n.token.address)?i={type:r.NATIVE}:c(n.token.address)&&(i={type:r.ERC20,address:n.token.address}),i&&t.push({type:n.type,name:n.name,amount:n.amount,chainId:e,token:i})}return t}function E(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 D(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 O(e){if(e instanceof m){let t=e.data;if(g(t))return t;let n;if(e.walk(e=>{let t=e.data;return!n&&g(t)&&(n=t),!1}),n)return n;let r=e.cause?.data;if(g(r))return r}if(!e||typeof e!=`object`)return;let t=e;if(g(t.data))return t.data;if(g(t.error?.data))return t.error.data;if(g(t.cause?.data))return t.cause.data;if(g(t.response?.data))return t.response.data;if(g(t.body?.error?.data))return t.body.error.data}function k(e,t){let n=O(t);if(!n)return null;try{let t=h({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`&&_(`${n.name}(${n.inputs.map(e=>e.type).join(`,`)})`).toLowerCase()===t)return`${n.name}()`}return null}export{x as assetToAddressString,S as calculateMarkrMinimumAmountOut,k as decodeMarkrRevertError,D as getMarkrSwapWrapperAbi,w as getPartnerFeeBps,v as getSupportedChains,y as getSupportedTokens,b as isTokenAddressNative,C 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';\n\nexport type SupportedChainsMap = Map<\n Caip2ChainId,\n {\n /** `number` for EVM, `Caip2ChainId` for SVM */\n chainId: number | Caip2ChainId;\n crossChainSwapEnabled: boolean;\n swapEnabled: boolean;\n tokenList: boolean;\n }\n>;\n\nexport async function getSupportedChains(apiOptions: ApiOptions): 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\n if (!isCrossChainSwapEnabled && !isSwapEnabled) {\n continue;\n }\n\n supportedChains.set(key, {\n chainId: chain.chainId,\n crossChainSwapEnabled: isCrossChainSwapEnabled,\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 = eip155ChainIdToCaip2(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 }\n // We skip \"solana\" here since we expect the chainId to always be EIP-155.\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
+ exports.DEFAULT_MARKR_API_URL=`https://proxy-api.avax.network/proxy/markr`,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":["export const DEFAULT_MARKR_API_URL = 'https://proxy-api.avax.network/proxy/markr' as const;\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":""}
@@ -0,0 +1,2 @@
1
+ const e=`https://proxy-api.avax.network/proxy/markr`,t=2500,n=12e4,r=32;export{e as DEFAULT_MARKR_API_URL,t as SOLANA_POLLING_INTERVAL_MS,r as SOLANA_REQUIRED_CONFIRMATIONS,n 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":["export const DEFAULT_MARKR_API_URL = 'https://proxy-api.avax.network/proxy/markr' as const;\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":"AAAA,MAAa,EAAwB,6CAKxB,EAA6B,KAO7B,EAAuB,KAOvB,EAAgC"}
@@ -0,0 +1,2 @@
1
+ const e=require(`../../constants.cjs`),t=require(`./_handlers/analyze-support.cjs`),n=require(`./_utils.cjs`),r=require(`./_handlers/estimate-native-fee.cjs`),i=require(`./_handlers/get-assets.cjs`),a=require(`./_handlers/get-minimum-transfer-amount.cjs`),o=require(`./_handlers/stream-quotes.cjs`),s=require(`./constants.cjs`),c=require(`./_handlers/track-transfer.cjs`),l=require(`./_handlers/transfer-asset.cjs`);async function u({apiBaseUrl:u,apiToken:d,appId:f,environment:p,evmSigner:m,fetch:h,solanaSigner:g}){let _={apiBaseUrl:new URL(u??s.DEFAULT_MARKR_API_URL),apiToken:d,fetch:h},[v,y]=await Promise.all([n.getPartnerFeeBps(_),n.getSupportedChains(_)]),b=await n.getSupportedTokens(_,y),x=t.analyzeSupportFactory({hasSolanaSigner:!!g,supportedChains:y});return{analyzeSupport:x,estimateNativeFee:r.estimateNativeFeeFactory({apiOptions:_,appId:f}),getAssets:i.getAssetsFactory({supportedChains:y,supportedTokens:b}),getMinimumTransferAmount:a.getMinimumTransferAmountFactory({analyzeSupport:x,partnerFeeBps:v}),getSupportedChains:async()=>{let e=new Map,t=Array.from(y.entries()).filter(([,e])=>e.crossChainSwapEnabled).map(([e])=>e);for(let[n,{crossChainSwapEnabled:r,swapEnabled:i}]of y.entries()){if(!r&&!i)continue;let a=new Set;if(i&&a.add(n),r)for(let e of t)e!==n&&a.add(e);e.set(n,a)}return e},streamQuotes:o.streamQuotesFactory({apiOptions:_,appId:f,partnerFeeBps:v}),trackTransfer:c.trackTransferFactory({apiOptions:_}),transferAsset:l.transferAssetFactory({apiOptions:_,appId:f,environment:p,evmSigner:m,solanaSigner:g}),type:e.ServiceType.MARKR}}exports.createMarkrService=u;
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","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 { 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 { 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 environment: Environment;\n evmSigner: EvmSigner;\n fetch?: Fetch;\n solanaSigner?: SolanaSigner;\n}\n\nexport async function createMarkrService({\n apiBaseUrl: apiBaseUrlString,\n apiToken,\n appId,\n environment,\n evmSigner,\n fetch: customFetch,\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),\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 getMinimumTransferAmount: getMinimumTransferAmountFactory({\n analyzeSupport,\n partnerFeeBps,\n }),\n getSupportedChains: async () => {\n const supportedChainsMap: MutableGetSupportedChainsResult = new Map();\n const crossChainSwapEnabledChainIds: readonly Caip2ChainId[] = Array.from(supportedChains.entries())\n .filter(([, info]) => info.crossChainSwapEnabled)\n .map(([chainId]) => chainId);\n\n for (const [sourceChainId, { crossChainSwapEnabled, swapEnabled }] of supportedChains.entries()) {\n if (!crossChainSwapEnabled && !swapEnabled) {\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 if (crossChainSwapEnabled) {\n for (const chainId of crossChainSwapEnabledChainIds) {\n if (chainId !== sourceChainId) {\n supportedTargetChainIds.add(chainId);\n }\n }\n }\n\n supportedChainsMap.set(sourceChainId, supportedTargetChainIds);\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":"gaA2BA,eAAsB,EAAmB,CACvC,WAAY,EACZ,WACA,QACA,cACA,YACA,MAAO,EACP,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,EAAW,CAC/B,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,yBAA0BC,EAAAA,gCAAgC,CACxD,iBACA,gBACD,CAAC,CACF,mBAAoB,SAAY,CAC9B,IAAM,EAAsD,IAAI,IAC1D,EAAyD,MAAM,KAAK,EAAgB,SAAS,CAAC,CACjG,QAAQ,EAAG,KAAU,EAAK,sBAAsB,CAChD,KAAK,CAAC,KAAa,EAAQ,CAE9B,IAAK,GAAM,CAAC,EAAe,CAAE,wBAAuB,kBAAkB,EAAgB,SAAS,CAAE,CAC/F,GAAI,CAAC,GAAyB,CAAC,EAE7B,SAGF,IAAM,EAA0B,IAAI,IAOpC,GAJI,GACF,EAAwB,IAAI,EAAc,CAGxC,MACG,IAAM,KAAW,EAChB,IAAY,GACd,EAAwB,IAAI,EAAQ,CAK1C,EAAmB,IAAI,EAAe,EAAwB,CAGhE,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{analyzeSupportFactory as t}from"./_handlers/analyze-support.js";import{getPartnerFeeBps as n,getSupportedChains as r,getSupportedTokens as i}from"./_utils.js";import{estimateNativeFeeFactory as a}from"./_handlers/estimate-native-fee.js";import{getAssetsFactory as o}from"./_handlers/get-assets.js";import{getMinimumTransferAmountFactory as s}from"./_handlers/get-minimum-transfer-amount.js";import{streamQuotesFactory as c}from"./_handlers/stream-quotes.js";import{DEFAULT_MARKR_API_URL as l}from"./constants.js";import{trackTransferFactory as u}from"./_handlers/track-transfer.js";import{transferAssetFactory as d}from"./_handlers/transfer-asset.js";async function f({apiBaseUrl:f,apiToken:p,appId:m,environment:h,evmSigner:g,fetch:_,solanaSigner:v}){let y={apiBaseUrl:new URL(f??l),apiToken:p,fetch:_},[b,x]=await Promise.all([n(y),r(y)]),S=await i(y,x),C=t({hasSolanaSigner:!!v,supportedChains:x});return{analyzeSupport:C,estimateNativeFee:a({apiOptions:y,appId:m}),getAssets:o({supportedChains:x,supportedTokens:S}),getMinimumTransferAmount:s({analyzeSupport:C,partnerFeeBps:b}),getSupportedChains:async()=>{let e=new Map,t=Array.from(x.entries()).filter(([,e])=>e.crossChainSwapEnabled).map(([e])=>e);for(let[n,{crossChainSwapEnabled:r,swapEnabled:i}]of x.entries()){if(!r&&!i)continue;let a=new Set;if(i&&a.add(n),r)for(let e of t)e!==n&&a.add(e);e.set(n,a)}return e},streamQuotes:c({apiOptions:y,appId:m,partnerFeeBps:b}),trackTransfer:u({apiOptions:y}),transferAsset:d({apiOptions:y,appId:m,environment:h,evmSigner:g,solanaSigner:v}),type:e.MARKR}}export{f 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 { 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 { 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 environment: Environment;\n evmSigner: EvmSigner;\n fetch?: Fetch;\n solanaSigner?: SolanaSigner;\n}\n\nexport async function createMarkrService({\n apiBaseUrl: apiBaseUrlString,\n apiToken,\n appId,\n environment,\n evmSigner,\n fetch: customFetch,\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),\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 getMinimumTransferAmount: getMinimumTransferAmountFactory({\n analyzeSupport,\n partnerFeeBps,\n }),\n getSupportedChains: async () => {\n const supportedChainsMap: MutableGetSupportedChainsResult = new Map();\n const crossChainSwapEnabledChainIds: readonly Caip2ChainId[] = Array.from(supportedChains.entries())\n .filter(([, info]) => info.crossChainSwapEnabled)\n .map(([chainId]) => chainId);\n\n for (const [sourceChainId, { crossChainSwapEnabled, swapEnabled }] of supportedChains.entries()) {\n if (!crossChainSwapEnabled && !swapEnabled) {\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 if (crossChainSwapEnabled) {\n for (const chainId of crossChainSwapEnabledChainIds) {\n if (chainId !== sourceChainId) {\n supportedTargetChainIds.add(chainId);\n }\n }\n }\n\n supportedChainsMap.set(sourceChainId, supportedTargetChainIds);\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":"msBA2BA,eAAsB,EAAmB,CACvC,WAAY,EACZ,WACA,QACA,cACA,YACA,MAAO,EACP,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,EAAW,CAC/B,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,yBAA0B,EAAgC,CACxD,iBACA,gBACD,CAAC,CACF,mBAAoB,SAAY,CAC9B,IAAM,EAAsD,IAAI,IAC1D,EAAyD,MAAM,KAAK,EAAgB,SAAS,CAAC,CACjG,QAAQ,EAAG,KAAU,EAAK,sBAAsB,CAChD,KAAK,CAAC,KAAa,EAAQ,CAE9B,IAAK,GAAM,CAAC,EAAe,CAAE,wBAAuB,kBAAkB,EAAgB,SAAS,CAAE,CAC/F,GAAI,CAAC,GAAyB,CAAC,EAE7B,SAGF,IAAM,EAA0B,IAAI,IAOpC,GAJI,GACF,EAAwB,IAAI,EAAc,CAGxC,MACG,IAAM,KAAW,EAChB,IAAY,GACd,EAAwB,IAAI,EAAQ,CAK1C,EAAmB,IAAI,EAAe,EAAwB,CAGhE,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
+ 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`;function a(t){return{type:e.TokenType.ERC20,name:`Wrapped AVAX`,symbol:`WAVAX`,decimals:18,address:t}}function o(t){return{type:e.TokenType.ERC20,name:`Wrapped Ether`,symbol:`WETH`,decimals:18,address:t}}const s=new Map([[e.AvalancheChainIds.MAINNET,{chain:e.AVALANCHE_MAINNET_CHAIN,wrappedTokenAddress:t,nativeAsset:e.NATIVE_AVAX,wrappedAsset:a(t)}],[e.EthereumChainIds.MAINNET,{chain:e.ETHEREUM_MAINNET_CHAIN,wrappedTokenAddress:n,nativeAsset:e.NATIVE_ETH,wrappedAsset:o(n)}]]),c=new Map([[e.AvalancheChainIds.FUJI,{chain:e.AVALANCHE_FUJI_CHAIN,wrappedTokenAddress:r,nativeAsset:e.NATIVE_AVAX,wrappedAsset:a(r)}],[e.EthereumChainIds.SEPOLIA,{chain:e.ETHEREUM_SEPOLIA_CHAIN,wrappedTokenAddress:i,nativeAsset:e.NATIVE_ETH,wrappedAsset:o(i)}]]);function l(t){return t===e.Environment.TEST?c:s}exports.WRAP_UNWRAP_QUOTE_TTL_SECONDS=3600,exports.getChainConfigs=l;
2
+ //# sourceMappingURL=constants.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.cjs","names":["TokenType","AvalancheChainIds","AVALANCHE_MAINNET_CHAIN","NATIVE_AVAX","EthereumChainIds","ETHEREUM_MAINNET_CHAIN","NATIVE_ETH","AVALANCHE_FUJI_CHAIN","ETHEREUM_SEPOLIA_CHAIN","Environment"],"sources":["../../../src/transfer-service/wrap-unwrap/constants.ts"],"sourcesContent":["import type { Address } from 'viem';\nimport {\n AvalancheChainIds,\n Environment,\n EthereumChainIds,\n NATIVE_AVAX,\n NATIVE_ETH,\n TokenType,\n AVALANCHE_FUJI_CHAIN,\n AVALANCHE_MAINNET_CHAIN,\n ETHEREUM_MAINNET_CHAIN,\n ETHEREUM_SEPOLIA_CHAIN,\n} from '../../constants';\nimport type { Erc20Asset, NativeAsset } from '../../types/asset';\nimport type { Caip2ChainId } from '../../types/caip';\nimport type { Chain } from '../../types/chain';\n\nexport const WRAP_UNWRAP_QUOTE_TTL_SECONDS = 3_600;\n\nexport interface WrapChainConfig {\n readonly chain: Chain;\n readonly wrappedTokenAddress: Address;\n readonly nativeAsset: NativeAsset;\n readonly wrappedAsset: Erc20Asset;\n}\n\n// --- Mainnet addresses ---\n\nconst WAVAX_MAINNET: Address = '0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7';\nconst WETH_MAINNET: Address = '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2';\n\n// --- Testnet addresses ---\n\nconst WAVAX_FUJI: Address = '0xd00ae08403B9bbb9124bB305C09058E32C39A48c';\nconst WETH_SEPOLIA: Address = '0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14';\n\n// --- Asset helpers ---\n\nfunction wrappedAvax(address: Address): Erc20Asset {\n return { type: TokenType.ERC20, name: 'Wrapped AVAX', symbol: 'WAVAX', decimals: 18, address };\n}\n\nfunction wrappedEth(address: Address): Erc20Asset {\n return { type: TokenType.ERC20, name: 'Wrapped Ether', symbol: 'WETH', decimals: 18, address };\n}\n\n// --- Per-environment chain configs ---\n\nconst MAINNET_CONFIGS = new Map<Caip2ChainId, WrapChainConfig>([\n [\n AvalancheChainIds.MAINNET,\n {\n chain: AVALANCHE_MAINNET_CHAIN,\n wrappedTokenAddress: WAVAX_MAINNET,\n nativeAsset: NATIVE_AVAX,\n wrappedAsset: wrappedAvax(WAVAX_MAINNET),\n },\n ],\n [\n EthereumChainIds.MAINNET,\n {\n chain: ETHEREUM_MAINNET_CHAIN,\n wrappedTokenAddress: WETH_MAINNET,\n nativeAsset: NATIVE_ETH,\n wrappedAsset: wrappedEth(WETH_MAINNET),\n },\n ],\n]);\n\nconst TESTNET_CONFIGS = new Map<Caip2ChainId, WrapChainConfig>([\n [\n AvalancheChainIds.FUJI,\n {\n chain: AVALANCHE_FUJI_CHAIN,\n wrappedTokenAddress: WAVAX_FUJI,\n nativeAsset: NATIVE_AVAX,\n wrappedAsset: wrappedAvax(WAVAX_FUJI),\n },\n ],\n [\n EthereumChainIds.SEPOLIA,\n {\n chain: ETHEREUM_SEPOLIA_CHAIN,\n wrappedTokenAddress: WETH_SEPOLIA,\n nativeAsset: NATIVE_ETH,\n wrappedAsset: wrappedEth(WETH_SEPOLIA),\n },\n ],\n]);\n\nexport function getChainConfigs(environment: Environment): ReadonlyMap<Caip2ChainId, WrapChainConfig> {\n return environment === Environment.TEST ? TESTNET_CONFIGS : MAINNET_CONFIGS;\n}\n"],"mappings":"uCA4BM,EAAyB,6CACzB,EAAwB,6CAIxB,EAAsB,6CACtB,EAAwB,6CAI9B,SAAS,EAAY,EAA8B,CACjD,MAAO,CAAE,KAAMA,EAAAA,UAAU,MAAO,KAAM,eAAgB,OAAQ,QAAS,SAAU,GAAI,UAAS,CAGhG,SAAS,EAAW,EAA8B,CAChD,MAAO,CAAE,KAAMA,EAAAA,UAAU,MAAO,KAAM,gBAAiB,OAAQ,OAAQ,SAAU,GAAI,UAAS,CAKhG,MAAM,EAAkB,IAAI,IAAmC,CAC7D,CACEC,EAAAA,kBAAkB,QAClB,CACE,MAAOC,EAAAA,wBACP,oBAAqB,EACrB,YAAaC,EAAAA,YACb,aAAc,EAAY,EAAc,CACzC,CACF,CACD,CACEC,EAAAA,iBAAiB,QACjB,CACE,MAAOC,EAAAA,uBACP,oBAAqB,EACrB,YAAaC,EAAAA,WACb,aAAc,EAAW,EAAa,CACvC,CACF,CACF,CAAC,CAEI,EAAkB,IAAI,IAAmC,CAC7D,CACEL,EAAAA,kBAAkB,KAClB,CACE,MAAOM,EAAAA,qBACP,oBAAqB,EACrB,YAAaJ,EAAAA,YACb,aAAc,EAAY,EAAW,CACtC,CACF,CACD,CACEC,EAAAA,iBAAiB,QACjB,CACE,MAAOI,EAAAA,uBACP,oBAAqB,EACrB,YAAaF,EAAAA,WACb,aAAc,EAAW,EAAa,CACvC,CACF,CACF,CAAC,CAEF,SAAgB,EAAgB,EAAsE,CACpG,OAAO,IAAgBG,EAAAA,YAAY,KAAO,EAAkB"}
@@ -0,0 +1,2 @@
1
+ import{AVALANCHE_FUJI_CHAIN as e,AVALANCHE_MAINNET_CHAIN as t,AvalancheChainIds as n,ETHEREUM_MAINNET_CHAIN as r,ETHEREUM_SEPOLIA_CHAIN as i,Environment as a,EthereumChainIds as o,NATIVE_AVAX as s,NATIVE_ETH as c,TokenType as l}from"../../constants.js";const u=3600,d=`0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7`,f=`0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2`,p=`0xd00ae08403B9bbb9124bB305C09058E32C39A48c`,m=`0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14`;function h(e){return{type:l.ERC20,name:`Wrapped AVAX`,symbol:`WAVAX`,decimals:18,address:e}}function g(e){return{type:l.ERC20,name:`Wrapped Ether`,symbol:`WETH`,decimals:18,address:e}}const _=new Map([[n.MAINNET,{chain:t,wrappedTokenAddress:d,nativeAsset:s,wrappedAsset:h(d)}],[o.MAINNET,{chain:r,wrappedTokenAddress:f,nativeAsset:c,wrappedAsset:g(f)}]]),v=new Map([[n.FUJI,{chain:e,wrappedTokenAddress:p,nativeAsset:s,wrappedAsset:h(p)}],[o.SEPOLIA,{chain:i,wrappedTokenAddress:m,nativeAsset:c,wrappedAsset:g(m)}]]);function y(e){return e===a.TEST?v:_}export{u as WRAP_UNWRAP_QUOTE_TTL_SECONDS,y as getChainConfigs};
2
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","names":[],"sources":["../../../src/transfer-service/wrap-unwrap/constants.ts"],"sourcesContent":["import type { Address } from 'viem';\nimport {\n AvalancheChainIds,\n Environment,\n EthereumChainIds,\n NATIVE_AVAX,\n NATIVE_ETH,\n TokenType,\n AVALANCHE_FUJI_CHAIN,\n AVALANCHE_MAINNET_CHAIN,\n ETHEREUM_MAINNET_CHAIN,\n ETHEREUM_SEPOLIA_CHAIN,\n} from '../../constants';\nimport type { Erc20Asset, NativeAsset } from '../../types/asset';\nimport type { Caip2ChainId } from '../../types/caip';\nimport type { Chain } from '../../types/chain';\n\nexport const WRAP_UNWRAP_QUOTE_TTL_SECONDS = 3_600;\n\nexport interface WrapChainConfig {\n readonly chain: Chain;\n readonly wrappedTokenAddress: Address;\n readonly nativeAsset: NativeAsset;\n readonly wrappedAsset: Erc20Asset;\n}\n\n// --- Mainnet addresses ---\n\nconst WAVAX_MAINNET: Address = '0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7';\nconst WETH_MAINNET: Address = '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2';\n\n// --- Testnet addresses ---\n\nconst WAVAX_FUJI: Address = '0xd00ae08403B9bbb9124bB305C09058E32C39A48c';\nconst WETH_SEPOLIA: Address = '0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14';\n\n// --- Asset helpers ---\n\nfunction wrappedAvax(address: Address): Erc20Asset {\n return { type: TokenType.ERC20, name: 'Wrapped AVAX', symbol: 'WAVAX', decimals: 18, address };\n}\n\nfunction wrappedEth(address: Address): Erc20Asset {\n return { type: TokenType.ERC20, name: 'Wrapped Ether', symbol: 'WETH', decimals: 18, address };\n}\n\n// --- Per-environment chain configs ---\n\nconst MAINNET_CONFIGS = new Map<Caip2ChainId, WrapChainConfig>([\n [\n AvalancheChainIds.MAINNET,\n {\n chain: AVALANCHE_MAINNET_CHAIN,\n wrappedTokenAddress: WAVAX_MAINNET,\n nativeAsset: NATIVE_AVAX,\n wrappedAsset: wrappedAvax(WAVAX_MAINNET),\n },\n ],\n [\n EthereumChainIds.MAINNET,\n {\n chain: ETHEREUM_MAINNET_CHAIN,\n wrappedTokenAddress: WETH_MAINNET,\n nativeAsset: NATIVE_ETH,\n wrappedAsset: wrappedEth(WETH_MAINNET),\n },\n ],\n]);\n\nconst TESTNET_CONFIGS = new Map<Caip2ChainId, WrapChainConfig>([\n [\n AvalancheChainIds.FUJI,\n {\n chain: AVALANCHE_FUJI_CHAIN,\n wrappedTokenAddress: WAVAX_FUJI,\n nativeAsset: NATIVE_AVAX,\n wrappedAsset: wrappedAvax(WAVAX_FUJI),\n },\n ],\n [\n EthereumChainIds.SEPOLIA,\n {\n chain: ETHEREUM_SEPOLIA_CHAIN,\n wrappedTokenAddress: WETH_SEPOLIA,\n nativeAsset: NATIVE_ETH,\n wrappedAsset: wrappedEth(WETH_SEPOLIA),\n },\n ],\n]);\n\nexport function getChainConfigs(environment: Environment): ReadonlyMap<Caip2ChainId, WrapChainConfig> {\n return environment === Environment.TEST ? TESTNET_CONFIGS : MAINNET_CONFIGS;\n}\n"],"mappings":"6PAiBA,MAAa,EAAgC,KAWvC,EAAyB,6CACzB,EAAwB,6CAIxB,EAAsB,6CACtB,EAAwB,6CAI9B,SAAS,EAAY,EAA8B,CACjD,MAAO,CAAE,KAAM,EAAU,MAAO,KAAM,eAAgB,OAAQ,QAAS,SAAU,GAAI,UAAS,CAGhG,SAAS,EAAW,EAA8B,CAChD,MAAO,CAAE,KAAM,EAAU,MAAO,KAAM,gBAAiB,OAAQ,OAAQ,SAAU,GAAI,UAAS,CAKhG,MAAM,EAAkB,IAAI,IAAmC,CAC7D,CACE,EAAkB,QAClB,CACE,MAAO,EACP,oBAAqB,EACrB,YAAa,EACb,aAAc,EAAY,EAAc,CACzC,CACF,CACD,CACE,EAAiB,QACjB,CACE,MAAO,EACP,oBAAqB,EACrB,YAAa,EACb,aAAc,EAAW,EAAa,CACvC,CACF,CACF,CAAC,CAEI,EAAkB,IAAI,IAAmC,CAC7D,CACE,EAAkB,KAClB,CACE,MAAO,EACP,oBAAqB,EACrB,YAAa,EACb,aAAc,EAAY,EAAW,CACtC,CACF,CACD,CACE,EAAiB,QACjB,CACE,MAAO,EACP,oBAAqB,EACrB,YAAa,EACb,aAAc,EAAW,EAAa,CACvC,CACF,CACF,CAAC,CAEF,SAAgB,EAAgB,EAAsE,CACpG,OAAO,IAAgB,EAAY,KAAO,EAAkB"}
@@ -0,0 +1,2 @@
1
+ const e=require(`../../constants.cjs`),t=require(`./constants.cjs`),n=require(`./_handlers/analyze-support.cjs`),r=require(`./_handlers/estimate-native-fee.cjs`),i=require(`./_handlers/get-assets.cjs`),a=require(`./_handlers/get-minimum-transfer-amount.cjs`),o=require(`./_handlers/stream-quotes.cjs`),s=require(`./_handlers/track-transfer.cjs`),c=require(`./_handlers/transfer-asset.cjs`);async function l({environment:l,evmSigner:u}){let d=t.getChainConfigs(l);return{analyzeSupport:n.analyzeSupportFactory({chainConfigs:d}),estimateNativeFee:r.estimateNativeFeeFactory({chainConfigs:d}),getAssets:i.getAssetsFactory({chainConfigs:d}),getMinimumTransferAmount:a.getMinimumTransferAmountFactory(),getSupportedChains:async()=>{let e=new Map;for(let t of d.keys())e.set(t,new Set([t]));return e},streamQuotes:o.streamQuotesFactory(),trackTransfer:s.trackTransferFactory(),transferAsset:c.transferAssetFactory({chainConfigs:d,environment:l,evmSigner:u}),type:e.ServiceType.WRAP_UNWRAP}}exports.createWrapUnwrapService=l;
2
+ //# sourceMappingURL=wrap-unwrap-service.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrap-unwrap-service.cjs","names":["getChainConfigs","analyzeSupportFactory","estimateNativeFeeFactory","getAssetsFactory","getMinimumTransferAmountFactory","streamQuotesFactory","trackTransferFactory","transferAssetFactory","ServiceType"],"sources":["../../../src/transfer-service/wrap-unwrap/wrap-unwrap-service.ts"],"sourcesContent":["import { ServiceType } from '../../constants';\nimport type { Environment } from '../../constants';\nimport type { EvmSigner } from '../../types/signer';\nimport type { MutableGetSupportedChainsResult, TransferService } from '../../types/service';\nimport { getChainConfigs } from './constants';\nimport { analyzeSupportFactory } from './_handlers/analyze-support';\nimport { estimateNativeFeeFactory } from './_handlers/estimate-native-fee';\nimport { getAssetsFactory } from './_handlers/get-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 type { Fetch } from '../../types/utility-types';\n\nexport interface WrapUnwrapServiceOptions {\n environment: Environment;\n evmSigner: EvmSigner;\n fetch?: Fetch;\n}\n\nexport async function createWrapUnwrapService({\n environment,\n evmSigner,\n}: WrapUnwrapServiceOptions): Promise<TransferService> {\n const chainConfigs = getChainConfigs(environment);\n\n return {\n analyzeSupport: analyzeSupportFactory({ chainConfigs }),\n estimateNativeFee: estimateNativeFeeFactory({ chainConfigs }),\n getAssets: getAssetsFactory({ chainConfigs }),\n getMinimumTransferAmount: getMinimumTransferAmountFactory(),\n getSupportedChains: async () => {\n const supportedChainsMap: MutableGetSupportedChainsResult = new Map();\n\n for (const chainId of chainConfigs.keys()) {\n supportedChainsMap.set(chainId, new Set([chainId]));\n }\n\n return supportedChainsMap;\n },\n streamQuotes: streamQuotesFactory(),\n trackTransfer: trackTransferFactory(),\n transferAsset: transferAssetFactory({ chainConfigs, environment, evmSigner }),\n type: ServiceType.WRAP_UNWRAP,\n } satisfies TransferService;\n}\n"],"mappings":"sYAoBA,eAAsB,EAAwB,CAC5C,cACA,aACqD,CACrD,IAAM,EAAeA,EAAAA,gBAAgB,EAAY,CAEjD,MAAO,CACL,eAAgBC,EAAAA,sBAAsB,CAAE,eAAc,CAAC,CACvD,kBAAmBC,EAAAA,yBAAyB,CAAE,eAAc,CAAC,CAC7D,UAAWC,EAAAA,iBAAiB,CAAE,eAAc,CAAC,CAC7C,yBAA0BC,EAAAA,iCAAiC,CAC3D,mBAAoB,SAAY,CAC9B,IAAM,EAAsD,IAAI,IAEhE,IAAK,IAAM,KAAW,EAAa,MAAM,CACvC,EAAmB,IAAI,EAAS,IAAI,IAAI,CAAC,EAAQ,CAAC,CAAC,CAGrD,OAAO,GAET,aAAcC,EAAAA,qBAAqB,CACnC,cAAeC,EAAAA,sBAAsB,CACrC,cAAeC,EAAAA,qBAAqB,CAAE,eAAc,cAAa,YAAW,CAAC,CAC7E,KAAMC,EAAAA,YAAY,YACnB"}
@@ -0,0 +1,2 @@
1
+ import{ServiceType as e}from"../../constants.js";import{getChainConfigs as t}from"./constants.js";import{analyzeSupportFactory as n}from"./_handlers/analyze-support.js";import{estimateNativeFeeFactory as r}from"./_handlers/estimate-native-fee.js";import{getAssetsFactory as i}from"./_handlers/get-assets.js";import{getMinimumTransferAmountFactory as a}from"./_handlers/get-minimum-transfer-amount.js";import{streamQuotesFactory as o}from"./_handlers/stream-quotes.js";import{trackTransferFactory as s}from"./_handlers/track-transfer.js";import{transferAssetFactory as c}from"./_handlers/transfer-asset.js";async function l({environment:l,evmSigner:u}){let d=t(l);return{analyzeSupport:n({chainConfigs:d}),estimateNativeFee:r({chainConfigs:d}),getAssets:i({chainConfigs:d}),getMinimumTransferAmount:a(),getSupportedChains:async()=>{let e=new Map;for(let t of d.keys())e.set(t,new Set([t]));return e},streamQuotes:o(),trackTransfer:s(),transferAsset:c({chainConfigs:d,environment:l,evmSigner:u}),type:e.WRAP_UNWRAP}}export{l as createWrapUnwrapService};
2
+ //# sourceMappingURL=wrap-unwrap-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrap-unwrap-service.js","names":[],"sources":["../../../src/transfer-service/wrap-unwrap/wrap-unwrap-service.ts"],"sourcesContent":["import { ServiceType } from '../../constants';\nimport type { Environment } from '../../constants';\nimport type { EvmSigner } from '../../types/signer';\nimport type { MutableGetSupportedChainsResult, TransferService } from '../../types/service';\nimport { getChainConfigs } from './constants';\nimport { analyzeSupportFactory } from './_handlers/analyze-support';\nimport { estimateNativeFeeFactory } from './_handlers/estimate-native-fee';\nimport { getAssetsFactory } from './_handlers/get-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 type { Fetch } from '../../types/utility-types';\n\nexport interface WrapUnwrapServiceOptions {\n environment: Environment;\n evmSigner: EvmSigner;\n fetch?: Fetch;\n}\n\nexport async function createWrapUnwrapService({\n environment,\n evmSigner,\n}: WrapUnwrapServiceOptions): Promise<TransferService> {\n const chainConfigs = getChainConfigs(environment);\n\n return {\n analyzeSupport: analyzeSupportFactory({ chainConfigs }),\n estimateNativeFee: estimateNativeFeeFactory({ chainConfigs }),\n getAssets: getAssetsFactory({ chainConfigs }),\n getMinimumTransferAmount: getMinimumTransferAmountFactory(),\n getSupportedChains: async () => {\n const supportedChainsMap: MutableGetSupportedChainsResult = new Map();\n\n for (const chainId of chainConfigs.keys()) {\n supportedChainsMap.set(chainId, new Set([chainId]));\n }\n\n return supportedChainsMap;\n },\n streamQuotes: streamQuotesFactory(),\n trackTransfer: trackTransferFactory(),\n transferAsset: transferAssetFactory({ chainConfigs, environment, evmSigner }),\n type: ServiceType.WRAP_UNWRAP,\n } satisfies TransferService;\n}\n"],"mappings":"8lBAoBA,eAAsB,EAAwB,CAC5C,cACA,aACqD,CACrD,IAAM,EAAe,EAAgB,EAAY,CAEjD,MAAO,CACL,eAAgB,EAAsB,CAAE,eAAc,CAAC,CACvD,kBAAmB,EAAyB,CAAE,eAAc,CAAC,CAC7D,UAAW,EAAiB,CAAE,eAAc,CAAC,CAC7C,yBAA0B,GAAiC,CAC3D,mBAAoB,SAAY,CAC9B,IAAM,EAAsD,IAAI,IAEhE,IAAK,IAAM,KAAW,EAAa,MAAM,CACvC,EAAmB,IAAI,EAAS,IAAI,IAAI,CAAC,EAAQ,CAAC,CAAC,CAGrD,OAAO,GAET,aAAc,GAAqB,CACnC,cAAe,GAAsB,CACrC,cAAe,EAAqB,CAAE,eAAc,cAAa,YAAW,CAAC,CAC7E,KAAM,EAAY,YACnB"}
@@ -0,0 +1,2 @@
1
+ const e=require(`./constants.cjs`),t=t=>typeof t==`string`&&Object.values(e.Environment).some(e=>e===t),n=t=>e.EVM_SERVICE_TYPES.includes(t.type),r=t=>t.type===e.ServiceType.LOMBARD_BTC_TO_BTCB||t.type===e.ServiceType.LOMBARD_BTCB_TO_BTC,i=t=>t.type===e.ServiceType.MARKR,a=t=>typeof t==`object`&&!!t&&`type`in t&&typeof t.type==`string`&&Object.values(e.ServiceType).some(e=>e===t.type),o=t=>t.type===e.TokenType.ERC20,s=t=>t.type===e.TokenType.NATIVE,c=t=>t.type===e.TokenType.SPL;exports.isEnvironment=t,exports.isErc20Asset=o,exports.isEvmBridgeInitializer=n,exports.isLombardServiceInitializer=r,exports.isMarkrServiceInitializer=i,exports.isNativeAsset=s,exports.isServiceInitializer=a,exports.isSplAsset=c;
2
+ //# sourceMappingURL=type-guards.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-guards.cjs","names":["Environment","EVM_SERVICE_TYPES","ServiceType","TokenType"],"sources":["../src/type-guards.ts"],"sourcesContent":["import { Environment, EVM_SERVICE_TYPES, ServiceType, TokenType } from './constants';\nimport type { Asset, Erc20Asset, NativeAsset, SplAsset } from './types/asset';\nimport type {\n EvmServiceInitializer,\n MarkrServiceInitializer,\n ServiceInitializer,\n LombardServiceInitializer,\n} from './types/service';\n\nexport const isEnvironment = (env: unknown): env is Environment => {\n return typeof env === 'string' && Object.values(Environment).some((e) => e === env);\n};\n\nexport const isEvmBridgeInitializer = (initializer: ServiceInitializer): initializer is EvmServiceInitializer => {\n return (EVM_SERVICE_TYPES as readonly ServiceType[]).includes(initializer.type);\n};\n\nexport const isLombardServiceInitializer = (\n initializer: ServiceInitializer,\n): initializer is LombardServiceInitializer => {\n return initializer.type === ServiceType.LOMBARD_BTC_TO_BTCB || initializer.type === ServiceType.LOMBARD_BTCB_TO_BTC;\n};\n\nexport const isMarkrServiceInitializer = (initializer: ServiceInitializer): initializer is MarkrServiceInitializer => {\n return initializer.type === ServiceType.MARKR;\n};\n\nexport const isServiceInitializer = (initializer: unknown): initializer is ServiceInitializer => {\n return (\n typeof initializer === 'object' &&\n initializer !== null &&\n 'type' in initializer &&\n typeof initializer.type === 'string' &&\n Object.values(ServiceType).some((t) => t === initializer.type)\n );\n};\n\nexport const isErc20Asset = (asset: Asset): asset is Erc20Asset => asset.type === TokenType.ERC20;\nexport const isNativeAsset = (asset: Asset): asset is NativeAsset => asset.type === TokenType.NATIVE;\nexport const isSplAsset = (asset: Asset): asset is SplAsset => asset.type === TokenType.SPL;\n"],"mappings":"mCASa,EAAiB,GACrB,OAAO,GAAQ,UAAY,OAAO,OAAOA,EAAAA,YAAY,CAAC,KAAM,GAAM,IAAM,EAAI,CAGxE,EAA0B,GAC7BC,EAAAA,kBAA6C,SAAS,EAAY,KAAK,CAGpE,EACX,GAEO,EAAY,OAASC,EAAAA,YAAY,qBAAuB,EAAY,OAASA,EAAAA,YAAY,oBAGrF,EAA6B,GACjC,EAAY,OAASA,EAAAA,YAAY,MAG7B,EAAwB,GAEjC,OAAO,GAAgB,YACvB,GACA,SAAU,GACV,OAAO,EAAY,MAAS,UAC5B,OAAO,OAAOA,EAAAA,YAAY,CAAC,KAAM,GAAM,IAAM,EAAY,KAAK,CAIrD,EAAgB,GAAsC,EAAM,OAASC,EAAAA,UAAU,MAC/E,EAAiB,GAAuC,EAAM,OAASA,EAAAA,UAAU,OACjF,EAAc,GAAoC,EAAM,OAASA,EAAAA,UAAU"}
@@ -0,0 +1,16 @@
1
+ import { Environment } from "./constants.cjs";
2
+ import { Asset, Erc20Asset, NativeAsset, SplAsset } from "./types/asset.cjs";
3
+ import { EvmServiceInitializer, LombardServiceInitializer, MarkrServiceInitializer, ServiceInitializer } from "./types/service.cjs";
4
+
5
+ //#region src/type-guards.d.ts
6
+ declare const isEnvironment: (env: unknown) => env is Environment;
7
+ declare const isEvmBridgeInitializer: (initializer: ServiceInitializer) => initializer is EvmServiceInitializer;
8
+ declare const isLombardServiceInitializer: (initializer: ServiceInitializer) => initializer is LombardServiceInitializer;
9
+ declare const isMarkrServiceInitializer: (initializer: ServiceInitializer) => initializer is MarkrServiceInitializer;
10
+ declare const isServiceInitializer: (initializer: unknown) => initializer is ServiceInitializer;
11
+ declare const isErc20Asset: (asset: Asset) => asset is Erc20Asset;
12
+ declare const isNativeAsset: (asset: Asset) => asset is NativeAsset;
13
+ declare const isSplAsset: (asset: Asset) => asset is SplAsset;
14
+ //#endregion
15
+ export { isEnvironment, isErc20Asset, isEvmBridgeInitializer, isLombardServiceInitializer, isMarkrServiceInitializer, isNativeAsset, isServiceInitializer, isSplAsset };
16
+ //# sourceMappingURL=type-guards.d.cts.map