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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (428) hide show
  1. package/LICENSE +9 -0
  2. package/README.md +264 -0
  3. package/dist/_utils/chain.cjs +2 -0
  4. package/dist/_utils/chain.cjs.map +1 -0
  5. package/dist/_utils/chain.js +2 -0
  6. package/dist/_utils/chain.js.map +1 -0
  7. package/dist/_utils/math.cjs +2 -0
  8. package/dist/_utils/math.cjs.map +1 -0
  9. package/dist/_utils/math.js +2 -0
  10. package/dist/_utils/math.js.map +1 -0
  11. package/dist/_virtual/_rolldown/runtime.cjs +1 -0
  12. package/dist/constants.cjs +2 -0
  13. package/dist/constants.cjs.map +1 -0
  14. package/dist/constants.d.cts +102 -0
  15. package/dist/constants.d.ts +102 -0
  16. package/dist/constants.js +2 -0
  17. package/dist/constants.js.map +1 -0
  18. package/dist/errors.cjs +2 -0
  19. package/dist/errors.cjs.map +1 -0
  20. package/dist/errors.d.cts +117 -0
  21. package/dist/errors.d.ts +117 -0
  22. package/dist/errors.js +2 -0
  23. package/dist/errors.js.map +1 -0
  24. package/dist/mod.cjs +1 -0
  25. package/dist/mod.d.cts +20 -0
  26. package/dist/mod.d.ts +20 -0
  27. package/dist/mod.js +1 -0
  28. package/dist/quoter/_utils.cjs +2 -0
  29. package/dist/quoter/_utils.cjs.map +1 -0
  30. package/dist/quoter/_utils.js +2 -0
  31. package/dist/quoter/_utils.js.map +1 -0
  32. package/dist/quoter/constants.cjs +2 -0
  33. package/dist/quoter/constants.cjs.map +1 -0
  34. package/dist/quoter/constants.js +2 -0
  35. package/dist/quoter/constants.js.map +1 -0
  36. package/dist/quoter/quoter.cjs +2 -0
  37. package/dist/quoter/quoter.cjs.map +1 -0
  38. package/dist/quoter/quoter.d.cts +31 -0
  39. package/dist/quoter/quoter.d.ts +34 -0
  40. package/dist/quoter/quoter.js +2 -0
  41. package/dist/quoter/quoter.js.map +1 -0
  42. package/dist/transfer-manager.cjs +2 -0
  43. package/dist/transfer-manager.cjs.map +1 -0
  44. package/dist/transfer-manager.d.cts +17 -0
  45. package/dist/transfer-manager.d.ts +17 -0
  46. package/dist/transfer-manager.js +2 -0
  47. package/dist/transfer-manager.js.map +1 -0
  48. package/dist/transfer-service/_abis.cjs +2 -0
  49. package/dist/transfer-service/_abis.cjs.map +1 -0
  50. package/dist/transfer-service/_abis.js +2 -0
  51. package/dist/transfer-service/_abis.js.map +1 -0
  52. package/dist/transfer-service/_evm-gas.cjs +2 -0
  53. package/dist/transfer-service/_evm-gas.cjs.map +1 -0
  54. package/dist/transfer-service/_evm-gas.js +2 -0
  55. package/dist/transfer-service/_evm-gas.js.map +1 -0
  56. package/dist/transfer-service/_tracking-utilities.cjs +2 -0
  57. package/dist/transfer-service/_tracking-utilities.cjs.map +1 -0
  58. package/dist/transfer-service/_tracking-utilities.js +2 -0
  59. package/dist/transfer-service/_tracking-utilities.js.map +1 -0
  60. package/dist/transfer-service/_transfer-utilities.cjs +2 -0
  61. package/dist/transfer-service/_transfer-utilities.cjs.map +1 -0
  62. package/dist/transfer-service/_transfer-utilities.js +2 -0
  63. package/dist/transfer-service/_transfer-utilities.js.map +1 -0
  64. package/dist/transfer-service/_utils.cjs +2 -0
  65. package/dist/transfer-service/_utils.cjs.map +1 -0
  66. package/dist/transfer-service/_utils.js +2 -0
  67. package/dist/transfer-service/_utils.js.map +1 -0
  68. package/dist/transfer-service/_warden-config-schema.cjs +2 -0
  69. package/dist/transfer-service/_warden-config-schema.cjs.map +1 -0
  70. package/dist/transfer-service/_warden-config-schema.js +2 -0
  71. package/dist/transfer-service/_warden-config-schema.js.map +1 -0
  72. package/dist/transfer-service/_warden-config.cjs +2 -0
  73. package/dist/transfer-service/_warden-config.cjs.map +1 -0
  74. package/dist/transfer-service/_warden-config.js +2 -0
  75. package/dist/transfer-service/_warden-config.js.map +1 -0
  76. package/dist/transfer-service/avalanche-evm/_constants.cjs +2 -0
  77. package/dist/transfer-service/avalanche-evm/_constants.cjs.map +1 -0
  78. package/dist/transfer-service/avalanche-evm/_constants.js +2 -0
  79. package/dist/transfer-service/avalanche-evm/_constants.js.map +1 -0
  80. package/dist/transfer-service/avalanche-evm/_handlers/analyze-support.cjs +2 -0
  81. package/dist/transfer-service/avalanche-evm/_handlers/analyze-support.cjs.map +1 -0
  82. package/dist/transfer-service/avalanche-evm/_handlers/analyze-support.js +2 -0
  83. package/dist/transfer-service/avalanche-evm/_handlers/analyze-support.js.map +1 -0
  84. package/dist/transfer-service/avalanche-evm/_handlers/estimate-native-fee.cjs +2 -0
  85. package/dist/transfer-service/avalanche-evm/_handlers/estimate-native-fee.cjs.map +1 -0
  86. package/dist/transfer-service/avalanche-evm/_handlers/estimate-native-fee.js +2 -0
  87. package/dist/transfer-service/avalanche-evm/_handlers/estimate-native-fee.js.map +1 -0
  88. package/dist/transfer-service/avalanche-evm/_handlers/get-assets.cjs +2 -0
  89. package/dist/transfer-service/avalanche-evm/_handlers/get-assets.cjs.map +1 -0
  90. package/dist/transfer-service/avalanche-evm/_handlers/get-assets.js +2 -0
  91. package/dist/transfer-service/avalanche-evm/_handlers/get-assets.js.map +1 -0
  92. package/dist/transfer-service/avalanche-evm/_handlers/get-bridgeable-assets.cjs +2 -0
  93. package/dist/transfer-service/avalanche-evm/_handlers/get-bridgeable-assets.cjs.map +1 -0
  94. package/dist/transfer-service/avalanche-evm/_handlers/get-bridgeable-assets.js +2 -0
  95. package/dist/transfer-service/avalanche-evm/_handlers/get-bridgeable-assets.js.map +1 -0
  96. package/dist/transfer-service/avalanche-evm/_handlers/get-minimum-transfer-amount.cjs +2 -0
  97. package/dist/transfer-service/avalanche-evm/_handlers/get-minimum-transfer-amount.cjs.map +1 -0
  98. package/dist/transfer-service/avalanche-evm/_handlers/get-minimum-transfer-amount.js +2 -0
  99. package/dist/transfer-service/avalanche-evm/_handlers/get-minimum-transfer-amount.js.map +1 -0
  100. package/dist/transfer-service/avalanche-evm/_handlers/get-supported-chains.cjs +2 -0
  101. package/dist/transfer-service/avalanche-evm/_handlers/get-supported-chains.cjs.map +1 -0
  102. package/dist/transfer-service/avalanche-evm/_handlers/get-supported-chains.js +2 -0
  103. package/dist/transfer-service/avalanche-evm/_handlers/get-supported-chains.js.map +1 -0
  104. package/dist/transfer-service/avalanche-evm/_handlers/stream-quotes.cjs +2 -0
  105. package/dist/transfer-service/avalanche-evm/_handlers/stream-quotes.cjs.map +1 -0
  106. package/dist/transfer-service/avalanche-evm/_handlers/stream-quotes.js +2 -0
  107. package/dist/transfer-service/avalanche-evm/_handlers/stream-quotes.js.map +1 -0
  108. package/dist/transfer-service/avalanche-evm/_handlers/track-transfer.cjs +2 -0
  109. package/dist/transfer-service/avalanche-evm/_handlers/track-transfer.cjs.map +1 -0
  110. package/dist/transfer-service/avalanche-evm/_handlers/track-transfer.js +2 -0
  111. package/dist/transfer-service/avalanche-evm/_handlers/track-transfer.js.map +1 -0
  112. package/dist/transfer-service/avalanche-evm/_handlers/transfer-asset.cjs +2 -0
  113. package/dist/transfer-service/avalanche-evm/_handlers/transfer-asset.cjs.map +1 -0
  114. package/dist/transfer-service/avalanche-evm/_handlers/transfer-asset.js +2 -0
  115. package/dist/transfer-service/avalanche-evm/_handlers/transfer-asset.js.map +1 -0
  116. package/dist/transfer-service/avalanche-evm/_utils/fee.cjs +2 -0
  117. package/dist/transfer-service/avalanche-evm/_utils/fee.cjs.map +1 -0
  118. package/dist/transfer-service/avalanche-evm/_utils/fee.js +2 -0
  119. package/dist/transfer-service/avalanche-evm/_utils/fee.js.map +1 -0
  120. package/dist/transfer-service/avalanche-evm/_utils/get-config.cjs +2 -0
  121. package/dist/transfer-service/avalanche-evm/_utils/get-config.cjs.map +1 -0
  122. package/dist/transfer-service/avalanche-evm/_utils/get-config.js +2 -0
  123. package/dist/transfer-service/avalanche-evm/_utils/get-config.js.map +1 -0
  124. package/dist/transfer-service/avalanche-evm/_utils/transfer-data.cjs +2 -0
  125. package/dist/transfer-service/avalanche-evm/_utils/transfer-data.cjs.map +1 -0
  126. package/dist/transfer-service/avalanche-evm/_utils/transfer-data.js +2 -0
  127. package/dist/transfer-service/avalanche-evm/_utils/transfer-data.js.map +1 -0
  128. package/dist/transfer-service/avalanche-evm/_utils/unwrap.cjs +2 -0
  129. package/dist/transfer-service/avalanche-evm/_utils/unwrap.cjs.map +1 -0
  130. package/dist/transfer-service/avalanche-evm/_utils/unwrap.js +2 -0
  131. package/dist/transfer-service/avalanche-evm/_utils/unwrap.js.map +1 -0
  132. package/dist/transfer-service/avalanche-evm/_utils/validations.cjs +2 -0
  133. package/dist/transfer-service/avalanche-evm/_utils/validations.cjs.map +1 -0
  134. package/dist/transfer-service/avalanche-evm/_utils/validations.js +2 -0
  135. package/dist/transfer-service/avalanche-evm/_utils/validations.js.map +1 -0
  136. package/dist/transfer-service/avalanche-evm/_utils/wrap.cjs +2 -0
  137. package/dist/transfer-service/avalanche-evm/_utils/wrap.cjs.map +1 -0
  138. package/dist/transfer-service/avalanche-evm/_utils/wrap.js +2 -0
  139. package/dist/transfer-service/avalanche-evm/_utils/wrap.js.map +1 -0
  140. package/dist/transfer-service/avalanche-evm/avalanche-evm-service.cjs +2 -0
  141. package/dist/transfer-service/avalanche-evm/avalanche-evm-service.cjs.map +1 -0
  142. package/dist/transfer-service/avalanche-evm/avalanche-evm-service.js +2 -0
  143. package/dist/transfer-service/avalanche-evm/avalanche-evm-service.js.map +1 -0
  144. package/dist/transfer-service/fetch-utilities.cjs +4 -0
  145. package/dist/transfer-service/fetch-utilities.cjs.map +1 -0
  146. package/dist/transfer-service/fetch-utilities.js +4 -0
  147. package/dist/transfer-service/fetch-utilities.js.map +1 -0
  148. package/dist/transfer-service/lombard/_schema.cjs +2 -0
  149. package/dist/transfer-service/lombard/_schema.cjs.map +1 -0
  150. package/dist/transfer-service/lombard/_schema.js +2 -0
  151. package/dist/transfer-service/lombard/_schema.js.map +1 -0
  152. package/dist/transfer-service/lombard/_utils/asset.cjs +2 -0
  153. package/dist/transfer-service/lombard/_utils/asset.cjs.map +1 -0
  154. package/dist/transfer-service/lombard/_utils/asset.js +2 -0
  155. package/dist/transfer-service/lombard/_utils/asset.js.map +1 -0
  156. package/dist/transfer-service/lombard/_utils/chain.cjs +2 -0
  157. package/dist/transfer-service/lombard/_utils/chain.cjs.map +1 -0
  158. package/dist/transfer-service/lombard/_utils/chain.js +2 -0
  159. package/dist/transfer-service/lombard/_utils/chain.js.map +1 -0
  160. package/dist/transfer-service/lombard/_utils/fee.cjs +2 -0
  161. package/dist/transfer-service/lombard/_utils/fee.cjs.map +1 -0
  162. package/dist/transfer-service/lombard/_utils/fee.js +2 -0
  163. package/dist/transfer-service/lombard/_utils/fee.js.map +1 -0
  164. package/dist/transfer-service/lombard/_utils/metadata.cjs +2 -0
  165. package/dist/transfer-service/lombard/_utils/metadata.cjs.map +1 -0
  166. package/dist/transfer-service/lombard/_utils/metadata.js +2 -0
  167. package/dist/transfer-service/lombard/_utils/metadata.js.map +1 -0
  168. package/dist/transfer-service/lombard/_utils/utxo.cjs +2 -0
  169. package/dist/transfer-service/lombard/_utils/utxo.cjs.map +1 -0
  170. package/dist/transfer-service/lombard/_utils/utxo.js +2 -0
  171. package/dist/transfer-service/lombard/_utils/utxo.js.map +1 -0
  172. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/analyze-support.cjs +2 -0
  173. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/analyze-support.cjs.map +1 -0
  174. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/analyze-support.js +2 -0
  175. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/analyze-support.js.map +1 -0
  176. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/estimate-native-fee.cjs +2 -0
  177. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/estimate-native-fee.cjs.map +1 -0
  178. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/estimate-native-fee.js +2 -0
  179. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/estimate-native-fee.js.map +1 -0
  180. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-assets.cjs +2 -0
  181. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-assets.cjs.map +1 -0
  182. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-assets.js +2 -0
  183. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-assets.js.map +1 -0
  184. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-bridgeable-assets.cjs +2 -0
  185. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-bridgeable-assets.cjs.map +1 -0
  186. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-bridgeable-assets.js +2 -0
  187. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-bridgeable-assets.js.map +1 -0
  188. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-minimum-transfer-amount.cjs +2 -0
  189. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-minimum-transfer-amount.cjs.map +1 -0
  190. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-minimum-transfer-amount.js +2 -0
  191. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/get-minimum-transfer-amount.js.map +1 -0
  192. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/stream-quotes.cjs +2 -0
  193. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/stream-quotes.cjs.map +1 -0
  194. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/stream-quotes.js +2 -0
  195. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/stream-quotes.js.map +1 -0
  196. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/track-transfer.cjs +2 -0
  197. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/track-transfer.cjs.map +1 -0
  198. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/track-transfer.js +2 -0
  199. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/track-transfer.js.map +1 -0
  200. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/transfer-asset.cjs +2 -0
  201. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/transfer-asset.cjs.map +1 -0
  202. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/transfer-asset.js +2 -0
  203. package/dist/transfer-service/lombard/btc-to-btcb/_handlers/transfer-asset.js.map +1 -0
  204. package/dist/transfer-service/lombard/btc-to-btcb-service.cjs +2 -0
  205. package/dist/transfer-service/lombard/btc-to-btcb-service.cjs.map +1 -0
  206. package/dist/transfer-service/lombard/btc-to-btcb-service.js +2 -0
  207. package/dist/transfer-service/lombard/btc-to-btcb-service.js.map +1 -0
  208. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/analyze-support.cjs +2 -0
  209. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/analyze-support.cjs.map +1 -0
  210. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/analyze-support.js +2 -0
  211. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/analyze-support.js.map +1 -0
  212. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/estimate-native-fee.cjs +2 -0
  213. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/estimate-native-fee.cjs.map +1 -0
  214. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/estimate-native-fee.js +2 -0
  215. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/estimate-native-fee.js.map +1 -0
  216. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/get-assets.cjs +2 -0
  217. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/get-assets.cjs.map +1 -0
  218. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/get-assets.js +2 -0
  219. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/get-assets.js.map +1 -0
  220. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/get-bridgeable-assets.cjs +2 -0
  221. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/get-bridgeable-assets.cjs.map +1 -0
  222. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/get-bridgeable-assets.js +2 -0
  223. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/get-bridgeable-assets.js.map +1 -0
  224. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/stream-quotes.cjs +2 -0
  225. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/stream-quotes.cjs.map +1 -0
  226. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/stream-quotes.js +2 -0
  227. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/stream-quotes.js.map +1 -0
  228. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/track-transfer.cjs +2 -0
  229. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/track-transfer.cjs.map +1 -0
  230. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/track-transfer.js +2 -0
  231. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/track-transfer.js.map +1 -0
  232. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/transfer-asset.cjs +2 -0
  233. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/transfer-asset.cjs.map +1 -0
  234. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/transfer-asset.js +2 -0
  235. package/dist/transfer-service/lombard/btcb-to-btc/_handlers/transfer-asset.js.map +1 -0
  236. package/dist/transfer-service/lombard/btcb-to-btc-service.cjs +2 -0
  237. package/dist/transfer-service/lombard/btcb-to-btc-service.cjs.map +1 -0
  238. package/dist/transfer-service/lombard/btcb-to-btc-service.js +2 -0
  239. package/dist/transfer-service/lombard/btcb-to-btc-service.js.map +1 -0
  240. package/dist/transfer-service/lombard/constants.cjs +2 -0
  241. package/dist/transfer-service/lombard/constants.cjs.map +1 -0
  242. package/dist/transfer-service/lombard/constants.js +2 -0
  243. package/dist/transfer-service/lombard/constants.js.map +1 -0
  244. package/dist/transfer-service/markr/_abis/cross-chain-swap-wrapper-abi.cjs +2 -0
  245. package/dist/transfer-service/markr/_abis/cross-chain-swap-wrapper-abi.cjs.map +1 -0
  246. package/dist/transfer-service/markr/_abis/cross-chain-swap-wrapper-abi.js +2 -0
  247. package/dist/transfer-service/markr/_abis/cross-chain-swap-wrapper-abi.js.map +1 -0
  248. package/dist/transfer-service/markr/_abis/swap-wrapper-abi.cjs +2 -0
  249. package/dist/transfer-service/markr/_abis/swap-wrapper-abi.cjs.map +1 -0
  250. package/dist/transfer-service/markr/_abis/swap-wrapper-abi.js +2 -0
  251. package/dist/transfer-service/markr/_abis/swap-wrapper-abi.js.map +1 -0
  252. package/dist/transfer-service/markr/_api.cjs +2 -0
  253. package/dist/transfer-service/markr/_api.cjs.map +1 -0
  254. package/dist/transfer-service/markr/_api.js +2 -0
  255. package/dist/transfer-service/markr/_api.js.map +1 -0
  256. package/dist/transfer-service/markr/_handlers/analyze-support.cjs +2 -0
  257. package/dist/transfer-service/markr/_handlers/analyze-support.cjs.map +1 -0
  258. package/dist/transfer-service/markr/_handlers/analyze-support.js +2 -0
  259. package/dist/transfer-service/markr/_handlers/analyze-support.js.map +1 -0
  260. package/dist/transfer-service/markr/_handlers/estimate-native-fee.cjs +2 -0
  261. package/dist/transfer-service/markr/_handlers/estimate-native-fee.cjs.map +1 -0
  262. package/dist/transfer-service/markr/_handlers/estimate-native-fee.js +2 -0
  263. package/dist/transfer-service/markr/_handlers/estimate-native-fee.js.map +1 -0
  264. package/dist/transfer-service/markr/_handlers/get-assets.cjs +2 -0
  265. package/dist/transfer-service/markr/_handlers/get-assets.cjs.map +1 -0
  266. package/dist/transfer-service/markr/_handlers/get-assets.js +2 -0
  267. package/dist/transfer-service/markr/_handlers/get-assets.js.map +1 -0
  268. package/dist/transfer-service/markr/_handlers/get-bridgeable-assets.cjs +2 -0
  269. package/dist/transfer-service/markr/_handlers/get-bridgeable-assets.cjs.map +1 -0
  270. package/dist/transfer-service/markr/_handlers/get-bridgeable-assets.js +2 -0
  271. package/dist/transfer-service/markr/_handlers/get-bridgeable-assets.js.map +1 -0
  272. package/dist/transfer-service/markr/_handlers/get-minimum-transfer-amount.cjs +2 -0
  273. package/dist/transfer-service/markr/_handlers/get-minimum-transfer-amount.cjs.map +1 -0
  274. package/dist/transfer-service/markr/_handlers/get-minimum-transfer-amount.js +2 -0
  275. package/dist/transfer-service/markr/_handlers/get-minimum-transfer-amount.js.map +1 -0
  276. package/dist/transfer-service/markr/_handlers/stream-quotes.cjs +2 -0
  277. package/dist/transfer-service/markr/_handlers/stream-quotes.cjs.map +1 -0
  278. package/dist/transfer-service/markr/_handlers/stream-quotes.js +2 -0
  279. package/dist/transfer-service/markr/_handlers/stream-quotes.js.map +1 -0
  280. package/dist/transfer-service/markr/_handlers/track-transfer.cjs +2 -0
  281. package/dist/transfer-service/markr/_handlers/track-transfer.cjs.map +1 -0
  282. package/dist/transfer-service/markr/_handlers/track-transfer.js +2 -0
  283. package/dist/transfer-service/markr/_handlers/track-transfer.js.map +1 -0
  284. package/dist/transfer-service/markr/_handlers/transfer-asset.cjs +2 -0
  285. package/dist/transfer-service/markr/_handlers/transfer-asset.cjs.map +1 -0
  286. package/dist/transfer-service/markr/_handlers/transfer-asset.js +2 -0
  287. package/dist/transfer-service/markr/_handlers/transfer-asset.js.map +1 -0
  288. package/dist/transfer-service/markr/_schema.cjs +2 -0
  289. package/dist/transfer-service/markr/_schema.cjs.map +1 -0
  290. package/dist/transfer-service/markr/_schema.js +2 -0
  291. package/dist/transfer-service/markr/_schema.js.map +1 -0
  292. package/dist/transfer-service/markr/_solana-utils.cjs +2 -0
  293. package/dist/transfer-service/markr/_solana-utils.cjs.map +1 -0
  294. package/dist/transfer-service/markr/_solana-utils.js +2 -0
  295. package/dist/transfer-service/markr/_solana-utils.js.map +1 -0
  296. package/dist/transfer-service/markr/_type-guards.cjs +2 -0
  297. package/dist/transfer-service/markr/_type-guards.cjs.map +1 -0
  298. package/dist/transfer-service/markr/_type-guards.js +2 -0
  299. package/dist/transfer-service/markr/_type-guards.js.map +1 -0
  300. package/dist/transfer-service/markr/_utils.cjs +2 -0
  301. package/dist/transfer-service/markr/_utils.cjs.map +1 -0
  302. package/dist/transfer-service/markr/_utils.js +2 -0
  303. package/dist/transfer-service/markr/_utils.js.map +1 -0
  304. package/dist/transfer-service/markr/constants.cjs +2 -0
  305. package/dist/transfer-service/markr/constants.cjs.map +1 -0
  306. package/dist/transfer-service/markr/constants.js +2 -0
  307. package/dist/transfer-service/markr/constants.js.map +1 -0
  308. package/dist/transfer-service/markr/markr-service.cjs +2 -0
  309. package/dist/transfer-service/markr/markr-service.cjs.map +1 -0
  310. package/dist/transfer-service/markr/markr-service.js +2 -0
  311. package/dist/transfer-service/markr/markr-service.js.map +1 -0
  312. package/dist/transfer-service/service-schemas.cjs +2 -0
  313. package/dist/transfer-service/service-schemas.cjs.map +1 -0
  314. package/dist/transfer-service/service-schemas.js +2 -0
  315. package/dist/transfer-service/service-schemas.js.map +1 -0
  316. package/dist/transfer-service/wrap-unwrap/_handlers/analyze-support.cjs +2 -0
  317. package/dist/transfer-service/wrap-unwrap/_handlers/analyze-support.cjs.map +1 -0
  318. package/dist/transfer-service/wrap-unwrap/_handlers/analyze-support.js +2 -0
  319. package/dist/transfer-service/wrap-unwrap/_handlers/analyze-support.js.map +1 -0
  320. package/dist/transfer-service/wrap-unwrap/_handlers/estimate-native-fee.cjs +2 -0
  321. package/dist/transfer-service/wrap-unwrap/_handlers/estimate-native-fee.cjs.map +1 -0
  322. package/dist/transfer-service/wrap-unwrap/_handlers/estimate-native-fee.js +2 -0
  323. package/dist/transfer-service/wrap-unwrap/_handlers/estimate-native-fee.js.map +1 -0
  324. package/dist/transfer-service/wrap-unwrap/_handlers/get-assets.cjs +2 -0
  325. package/dist/transfer-service/wrap-unwrap/_handlers/get-assets.cjs.map +1 -0
  326. package/dist/transfer-service/wrap-unwrap/_handlers/get-assets.js +2 -0
  327. package/dist/transfer-service/wrap-unwrap/_handlers/get-assets.js.map +1 -0
  328. package/dist/transfer-service/wrap-unwrap/_handlers/get-bridgeable-assets.cjs +2 -0
  329. package/dist/transfer-service/wrap-unwrap/_handlers/get-bridgeable-assets.cjs.map +1 -0
  330. package/dist/transfer-service/wrap-unwrap/_handlers/get-bridgeable-assets.js +2 -0
  331. package/dist/transfer-service/wrap-unwrap/_handlers/get-bridgeable-assets.js.map +1 -0
  332. package/dist/transfer-service/wrap-unwrap/_handlers/get-minimum-transfer-amount.cjs +2 -0
  333. package/dist/transfer-service/wrap-unwrap/_handlers/get-minimum-transfer-amount.cjs.map +1 -0
  334. package/dist/transfer-service/wrap-unwrap/_handlers/get-minimum-transfer-amount.js +2 -0
  335. package/dist/transfer-service/wrap-unwrap/_handlers/get-minimum-transfer-amount.js.map +1 -0
  336. package/dist/transfer-service/wrap-unwrap/_handlers/stream-quotes.cjs +2 -0
  337. package/dist/transfer-service/wrap-unwrap/_handlers/stream-quotes.cjs.map +1 -0
  338. package/dist/transfer-service/wrap-unwrap/_handlers/stream-quotes.js +2 -0
  339. package/dist/transfer-service/wrap-unwrap/_handlers/stream-quotes.js.map +1 -0
  340. package/dist/transfer-service/wrap-unwrap/_handlers/track-transfer.cjs +2 -0
  341. package/dist/transfer-service/wrap-unwrap/_handlers/track-transfer.cjs.map +1 -0
  342. package/dist/transfer-service/wrap-unwrap/_handlers/track-transfer.js +2 -0
  343. package/dist/transfer-service/wrap-unwrap/_handlers/track-transfer.js.map +1 -0
  344. package/dist/transfer-service/wrap-unwrap/_handlers/transfer-asset.cjs +2 -0
  345. package/dist/transfer-service/wrap-unwrap/_handlers/transfer-asset.cjs.map +1 -0
  346. package/dist/transfer-service/wrap-unwrap/_handlers/transfer-asset.js +2 -0
  347. package/dist/transfer-service/wrap-unwrap/_handlers/transfer-asset.js.map +1 -0
  348. package/dist/transfer-service/wrap-unwrap/_utils.cjs +2 -0
  349. package/dist/transfer-service/wrap-unwrap/_utils.cjs.map +1 -0
  350. package/dist/transfer-service/wrap-unwrap/_utils.js +2 -0
  351. package/dist/transfer-service/wrap-unwrap/_utils.js.map +1 -0
  352. package/dist/transfer-service/wrap-unwrap/constants.cjs +2 -0
  353. package/dist/transfer-service/wrap-unwrap/constants.cjs.map +1 -0
  354. package/dist/transfer-service/wrap-unwrap/constants.js +2 -0
  355. package/dist/transfer-service/wrap-unwrap/constants.js.map +1 -0
  356. package/dist/transfer-service/wrap-unwrap/wrap-unwrap-service.cjs +2 -0
  357. package/dist/transfer-service/wrap-unwrap/wrap-unwrap-service.cjs.map +1 -0
  358. package/dist/transfer-service/wrap-unwrap/wrap-unwrap-service.js +2 -0
  359. package/dist/transfer-service/wrap-unwrap/wrap-unwrap-service.js.map +1 -0
  360. package/dist/type-guards.cjs +2 -0
  361. package/dist/type-guards.cjs.map +1 -0
  362. package/dist/type-guards.d.cts +16 -0
  363. package/dist/type-guards.d.ts +16 -0
  364. package/dist/type-guards.js +2 -0
  365. package/dist/type-guards.js.map +1 -0
  366. package/dist/types/asset.d.cts +66 -0
  367. package/dist/types/asset.d.ts +66 -0
  368. package/dist/types/bitcoin.d.cts +66 -0
  369. package/dist/types/bitcoin.d.ts +66 -0
  370. package/dist/types/caip.d.cts +30 -0
  371. package/dist/types/caip.d.ts +30 -0
  372. package/dist/types/chain.d.cts +17 -0
  373. package/dist/types/chain.d.ts +17 -0
  374. package/dist/types/fee.d.cts +13 -0
  375. package/dist/types/fee.d.ts +13 -0
  376. package/dist/types/quote.d.cts +165 -0
  377. package/dist/types/quote.d.ts +165 -0
  378. package/dist/types/service.d.cts +247 -0
  379. package/dist/types/service.d.ts +247 -0
  380. package/dist/types/signer.d.cts +52 -0
  381. package/dist/types/signer.d.ts +52 -0
  382. package/dist/types/transfer-manager.d.cts +119 -0
  383. package/dist/types/transfer-manager.d.ts +119 -0
  384. package/dist/types/transfer.d.cts +126 -0
  385. package/dist/types/transfer.d.ts +126 -0
  386. package/dist/types/utility-types.d.cts +21 -0
  387. package/dist/types/utility-types.d.ts +21 -0
  388. package/dist/utils/asset-id.cjs +2 -0
  389. package/dist/utils/asset-id.cjs.map +1 -0
  390. package/dist/utils/asset-id.js +2 -0
  391. package/dist/utils/asset-id.js.map +1 -0
  392. package/dist/utils/bitcoin-address.cjs +2 -0
  393. package/dist/utils/bitcoin-address.cjs.map +1 -0
  394. package/dist/utils/bitcoin-address.js +2 -0
  395. package/dist/utils/bitcoin-address.js.map +1 -0
  396. package/dist/utils/caip.cjs +2 -0
  397. package/dist/utils/caip.cjs.map +1 -0
  398. package/dist/utils/caip.d.cts +49 -0
  399. package/dist/utils/caip.d.ts +49 -0
  400. package/dist/utils/caip.js +2 -0
  401. package/dist/utils/caip.js.map +1 -0
  402. package/dist/utils/evm-address.cjs +2 -0
  403. package/dist/utils/evm-address.cjs.map +1 -0
  404. package/dist/utils/evm-address.js +2 -0
  405. package/dist/utils/evm-address.js.map +1 -0
  406. package/dist/utils/price-impact.cjs +2 -0
  407. package/dist/utils/price-impact.cjs.map +1 -0
  408. package/dist/utils/price-impact.d.cts +31 -0
  409. package/dist/utils/price-impact.d.ts +31 -0
  410. package/dist/utils/price-impact.js +2 -0
  411. package/dist/utils/price-impact.js.map +1 -0
  412. package/dist/utils/quote-fees.cjs +2 -0
  413. package/dist/utils/quote-fees.cjs.map +1 -0
  414. package/dist/utils/quote-fees.js +2 -0
  415. package/dist/utils/quote-fees.js.map +1 -0
  416. package/dist/utils/sol-address.cjs +2 -0
  417. package/dist/utils/sol-address.cjs.map +1 -0
  418. package/dist/utils/sol-address.js +2 -0
  419. package/dist/utils/sol-address.js.map +1 -0
  420. package/dist/utils/solana-transaction.d.cts +15 -0
  421. package/dist/utils/solana-transaction.d.ts +17 -0
  422. package/dist/utils/transfer-utils.cjs +2 -0
  423. package/dist/utils/transfer-utils.cjs.map +1 -0
  424. package/dist/utils/transfer-utils.d.cts +8 -0
  425. package/dist/utils/transfer-utils.d.ts +8 -0
  426. package/dist/utils/transfer-utils.js +2 -0
  427. package/dist/utils/transfer-utils.js.map +1 -0
  428. package/package.json +63 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_schema.js","names":[],"sources":["../../../src/transfer-service/markr/_schema.ts"],"sourcesContent":["import type { Signature, Address as SolAddress } from '@solana/kit';\nimport { z } from 'zod';\nimport type { Address as EvmAddress, Hash } from 'viem';\nimport { EvmAddressSchema, HashSchema, HexSchema, SolAddressSchema, SolSignatureSchema } from '../service-schemas';\nimport { isCaip2ChainId } from '../../utils/caip';\nimport type { Caip2ChainId } from '../../types/caip';\nimport type { Hex } from '../../types/signer';\n\ninterface SupportedChainsResponseItemBase {\n chainId: number | string;\n chainType: string;\n /** Available services on the chain. Each service has specific functionality */\n enabled_services: Array<'cross-chain-swap' | 'cross-chain-quote' | 'quote' | 'swap' | 'token-list'>;\n /** Chain logo URL */\n logo_url: string;\n /** Chain display name */\n name: string;\n /**\n * List of chain IDs that this chain can swap to via cross-chain aggregators.\n *\n * Empty array means no cross-chain routes available.\n */\n lanes: ReadonlyArray<number | Caip2ChainId>;\n}\n\nexport interface SupportedChainsResponseItemEvm extends SupportedChainsResponseItemBase {\n /** Chain identifier */\n chainId: number;\n /** Chain virtual machine type */\n chainType: 'evm';\n /** Router contract address */\n router?: EvmAddress;\n /** Native token wrapped contract address */\n wrapped_token?: EvmAddress;\n}\n\nexport interface SupportedChainsResponseItemSvm extends SupportedChainsResponseItemBase {\n /** Chain identifier */\n chainId: Caip2ChainId;\n /** Chain virtual machine type */\n chainType: 'svm';\n}\n\nexport type SupportedChainsResponse = Array<\n SupportedChainsResponseItemEvm | SupportedChainsResponseItemSvm | SupportedChainsResponseItemBase\n>;\n\nexport const Caip2ChainIdSchema: z.ZodType<Caip2ChainId> = z\n .string()\n .refine((value) => isCaip2ChainId(value), {\n message: 'Invalid CAIP-2 chain ID',\n })\n .transform((value) => value as Caip2ChainId);\n\nconst SupportedChainsResponseItemBaseSchema = z.object({\n chainId: z.union([z.number(), z.string()]),\n chainType: z.string(),\n enabled_services: z.array(z.enum(['cross-chain-swap', 'cross-chain-quote', 'quote', 'swap', 'token-list'])),\n logo_url: z.url(),\n name: z.string(),\n lanes: z.array(z.union([z.coerce.number().int().nonnegative(), Caip2ChainIdSchema])),\n});\n\nconst SupportedChainsResponseItemEvmSchema: z.ZodType<SupportedChainsResponseItemEvm> =\n SupportedChainsResponseItemBaseSchema.extend({\n chainId: z.coerce.number().int().nonnegative(),\n chainType: z.literal('evm'),\n router: EvmAddressSchema.optional(),\n wrapped_token: EvmAddressSchema.optional(),\n });\n\nconst SupportedChainsResponseItemSvmSchema: z.ZodType<SupportedChainsResponseItemSvm> =\n SupportedChainsResponseItemBaseSchema.extend({\n chainId: z\n .string()\n .refine((value) => isCaip2ChainId(value) && value.startsWith('solana:'), {\n error: 'Is not a valid Solana CAIP-2 ID',\n })\n .transform((value) => value as Caip2ChainId),\n chainType: z.literal('svm'),\n });\n\n/**\n * Schema for the response from Markr's /info/chains endpoint.\n *\n * @see https://orchestrator-docs.markr.io/#/paths/~1info~1chains/get\n */\nexport const SupportedChainsResponseSchema: z.ZodType<SupportedChainsResponse> = z.array(\n z.union([\n SupportedChainsResponseItemEvmSchema,\n SupportedChainsResponseItemSvmSchema,\n SupportedChainsResponseItemBaseSchema.refine(\n (item) => item.chainType !== 'evm' && item.chainType !== 'svm',\n 'Known chain types must match their expected schema',\n ),\n ]),\n);\n\nexport type TokenListResponse = Array<{\n address: EvmAddress;\n decimals: number;\n logo_url: string;\n name: string;\n symbol: string;\n}>;\n\n/**\n * Schema for the response Markr's /tokens/{chainId}/list endpoint.\n *\n * @see https://orchestrator-docs.markr.io/#/paths/~1tokens~1%7BchainId%7D~1list/get\n */\nexport const TokenListResponseSchema: z.ZodType<TokenListResponse> = z.array(\n z.object({\n address: EvmAddressSchema,\n decimals: z.number().int().nonnegative().max(18),\n logo_url: z.url(),\n name: z.string(),\n symbol: z.string(),\n }),\n);\n\nexport interface QuoteResponseData {\n aggregator: {\n id: string;\n logo_url: string;\n name: string;\n };\n amountIn: bigint;\n amountOut: bigint;\n /** Chain identifier (number for EVM chains, CAIP-2 ID for SVM chains) */\n chainId: number | Caip2ChainId;\n expiredAt: number;\n /**\n * Fee breakdown for cross-chain bridge transactions.\n *\n * Only included in quotes from cross-chain aggregators (DeBridge, LiFi).\n */\n fees?: ReadonlyArray<{\n type: 'protocol' | 'gas' | 'bridge' | 'slippage' | 'swap' | 'other';\n /** Human-readable fee name */\n name: string;\n /** Fee amount in token's smallest unit */\n amount: bigint;\n /**\n * When `true`, indicates the fee is an additional fee on top of the input\n * amount that the user needs to pay. These fees need checked against the user's\n * balance to prevent insufficient balance errors.\n */\n extra?: boolean;\n /** Token the fee is deducted from */\n token: {\n /** Chain ID where fee is deducted */\n chainId: number | Caip2ChainId;\n /** Token address (EVM hex or Solana base58) */\n address: EvmAddress | SolAddress;\n };\n }>;\n gasEstimate?: bigint;\n recommendedSlippage: number;\n /** Input token address (EVM hex or Solana base58) */\n tokenIn: EvmAddress | SolAddress;\n tokenInDecimals: number;\n /** Output token address (EVM hex or Solana base58) */\n tokenOut: EvmAddress | SolAddress;\n tokenOutDecimals: number;\n uuid: string;\n}\n\nexport interface QuoteResponseDataDone {\n done: true;\n}\n\nexport type QuoteResponse = QuoteResponseData | QuoteResponseDataDone;\n\n/**\n * Schema for the response from Markr's /quote endpoint.\n *\n * @see https://orchestrator-docs.markr.io/#/paths/~1quote/post\n */\nexport const QuoteResponseSchema: z.ZodType<QuoteResponse> = z.union([\n z.object({\n aggregator: z.object({\n id: z.string(),\n logo_url: z.url(),\n name: z.string(),\n }),\n amountIn: z.coerce.bigint().nonnegative(),\n amountOut: z.coerce.bigint().nonnegative(),\n chainId: z.union([z.number().int().nonnegative(), Caip2ChainIdSchema]),\n /**\n * Unix time in seconds when the quote expires.\n */\n expiredAt: z.number().int().nonnegative(),\n fees: z\n .array(\n z.object({\n type: z.enum(['protocol', 'gas', 'bridge', 'slippage', 'swap', 'other']),\n name: z.string(),\n amount: z.coerce.bigint().nonnegative(),\n token: z.object({\n chainId: z.union([z.number().int().nonnegative(), Caip2ChainIdSchema]),\n address: z.union([EvmAddressSchema, SolAddressSchema]),\n }),\n extra: z.boolean().optional(),\n }),\n )\n .optional(),\n /**\n * Estimated gas for the swap transaction.\n * Markr estimates already include a buffer.\n *\n * The API docs do not specify this field as optional, but in practice it can be missing.\n */\n gasEstimate: z.coerce.bigint().nonnegative().optional(),\n /** Recommended slippage in basis points. */\n recommendedSlippage: z.number().int().nonnegative(),\n tokenIn: z.union([EvmAddressSchema, SolAddressSchema]),\n tokenInDecimals: z.number().int().nonnegative().max(18),\n tokenOut: z.union([EvmAddressSchema, SolAddressSchema]),\n tokenOutDecimals: z.number().int().nonnegative().max(18),\n uuid: z.uuid(),\n }),\n z.object({\n done: z.literal(true),\n }),\n]);\n\n/**\n * Response type for Markr's /swap endpoint.\n *\n * @see https://orchestrator-docs.markr.io/#/paths/~1swap/post\n */\nexport interface WrappedSwapTransactionResponse {\n data: Hex;\n to: EvmAddress;\n value: bigint;\n}\n\nexport const WrappedSwapTransactionResponseSchema: z.ZodType<WrappedSwapTransactionResponse> = z.object({\n data: HexSchema,\n to: EvmAddressSchema,\n value: z.coerce.bigint().nonnegative(),\n});\n\n/**\n * Solana swap transaction (returned for SVM chains).\n */\nexport interface SolanaSwapTransactionResponse {\n /** Chain type identifier */\n chainType: 'svm';\n /** Base64-encoded Solana transaction to be signed and sent by the client */\n swapTransaction: string;\n}\n\nexport const SolanaSwapTransactionResponseSchema: z.ZodType<SolanaSwapTransactionResponse> = z.object({\n chainType: z.literal('svm'),\n swapTransaction: z.base64(),\n});\n\nexport type SwapResponse = WrappedSwapTransactionResponse | SolanaSwapTransactionResponse;\n\nexport const SwapResponseSchema: z.ZodType<SwapResponse> = z.union([\n WrappedSwapTransactionResponseSchema,\n SolanaSwapTransactionResponseSchema,\n]);\n\nexport interface PartnerInfoResponse {\n /**\n * The partner fee in basis points collected on each swap.\n */\n fee: number;\n name: string;\n}\n\nexport const PartnerInfoResponseSchema: z.ZodType<PartnerInfoResponse> = z.object({\n fee: z.int().nonnegative(),\n name: z.string(),\n});\n\n/**\n * If the destination token is USDC, the flow is:\n * - pending -> committed -> completed\n *\n * If the destination token is not USDC, the flow is:\n * - pending -> committed -> pending_execution -> completed\n *\n * If the transaction fails at any point, the status will be 'failed'.\n */\nexport type CrossChainStatus =\n | /** Transaction submitted to CCIP */\n 'pending'\n /** Message committed, awaiting execution on destination chain */\n | 'committed'\n /** Message received on destination, swap pending execution by relayer */\n | 'pending_execution'\n /** Message executed successfully on destination chain */\n | 'completed'\n /** Swap expired, and funds were refunded (CCIP only) */\n | 'refunded'\n /** Execution failed */\n | 'failed'\n /** Unknown state */\n | 'unknown';\n\nexport interface CrossChainStatusResponse {\n /**\n * Cross-chain transaction identifier.\n *\n * For CCIP: The CCIP message ID.\n * For DeBridge: The DeBridge order ID.\n */\n messageId: string | null;\n /** Current status of the cross-chain transaction. */\n status: CrossChainStatus;\n /** Human-readable status description */\n description: string;\n /** Source chain information */\n sourceChain: {\n /** Source chain network name */\n name: string;\n /** Source chain transaction hash */\n transactionHash: Hash | Signature;\n /** Transaction timestamp on source chain (ISO 8601) */\n timestamp: string;\n /** When the source transaction was finalized (ISO 8601) */\n finalized: string | boolean | null;\n };\n /** Destination chain information */\n destinationChain: {\n /** Destination chain network name */\n name: string | null;\n /**\n * Destination chain tx hash.\n *\n * - For direct transfers (USDC -> USDC): The CCIP bridge transaction hash.\n * - For successful swaps: The actual swap transaction hash from the relayer.\n * - For pending swaps: null (swap not yet executed).\n */\n transactionHash: Hash | Signature | null;\n /**\n * CCIP bridge tx hash (only present for swaps, not direct transfers).\n *\n * This is the transaction that delivered USDC to the destination chain via CCIP.\n * The `transactionHash` field contains the subsequent swap transaction.\n */\n bridgeHash?: Hash | Signature | null;\n /** Transaction timestamp on destination chain (null if not yet executed) (ISO 8601) */\n timestamp: string | null;\n /** When the destination transaction was finalized (null if not yet executed) (ISO 8601) */\n finalized: string | null;\n };\n /** Transaction progress information */\n progress: {\n /** Whether the message has been committed on destination chain */\n committed: boolean;\n /** When the message was committed (null if not committed) (ISO 8601) */\n commitTimestamp?: string | null;\n /** Whether the message has been executed on destination chain */\n executed: boolean;\n };\n /** Fee information */\n fees: {\n /** Fee token address */\n token: EvmAddress | SolAddress | null;\n /** Fee amount in wei */\n amount: bigint | null;\n } | null;\n /** Tokens transferred in this cross-chain transaction */\n transferredTokens: ReadonlyArray<{\n /** Token address */\n token: EvmAddress | SolAddress;\n /** Token amount */\n amount: bigint;\n }>;\n /**\n * Debug information from Markr transaction API (only present for swaps that have been executed).\n *\n * Contains detailed information about the relayer execution, retry attempts, and transaction details.\n */\n debug?: Partial<{\n /** CCIP message ID */\n messageId: string;\n /** Execution status from relayer */\n status: string;\n /** Destination chain name */\n destinationChain: string;\n /** Destination swap transaction hash */\n destinationTxHash: string;\n /** Relay transaction hash */\n relayTxHash: string;\n /** Number of retry attempts */\n retryCount: number;\n /** Timestamp of last retry attempt (ISO 8601) */\n lastRetryAt: string;\n /** Source chain name */\n sourceChain: string;\n /** Source transaction hash */\n sourceTxHash: string;\n /** When the record was created (ISO 8601) */\n createdAt: string;\n }> | null;\n}\n\nconst ISO_8601_TIMEZONE_DESIGNATOR_REGEX = /[zZ]|[+-]\\d{2}:?\\d{2}$/;\n\n// Markr API returns ISO-8601 datetime strings that are sometimes missing a timezone designator (\"local\" ISO).\n// We assume these are meant to be UTC and append 'Z' if missing, then validate as strict ISO-8601 with timezone.\nconst datetime = z.iso\n .datetime({ local: true })\n .refine(\n (value) => {\n // Accept at least local ISO format\n // If missing timezone, treat as UTC\n const hasTimezone = ISO_8601_TIMEZONE_DESIGNATOR_REGEX.test(value);\n const isoString = hasTimezone ? value : value + 'Z';\n // Validate as strict ISO-8601 with timezone\n return z.iso.datetime().safeParse(isoString).success;\n },\n {\n error: 'Invalid ISO-8601 datetime (must be valid with timezone, or local assumed UTC)',\n },\n )\n .transform((value) => {\n const hasTimezone = ISO_8601_TIMEZONE_DESIGNATOR_REGEX.test(value);\n return hasTimezone ? value : value + 'Z';\n });\n\nexport const CrossChainStatusResponseSchema: z.ZodType<CrossChainStatusResponse> = z.object({\n messageId: z.string().nullable(),\n status: z.enum(['pending', 'committed', 'pending_execution', 'completed', 'failed', 'refunded', 'unknown']),\n description: z.string(),\n sourceChain: z.object({\n name: z.string(),\n transactionHash: z.union([HashSchema, SolSignatureSchema]),\n timestamp: datetime,\n finalized: datetime.or(z.boolean()).nullable(),\n }),\n destinationChain: z.object({\n name: z.string().nullable(),\n transactionHash: z.union([HashSchema, SolSignatureSchema]).nullable(),\n bridgeHash: z.union([HashSchema, SolSignatureSchema]).nullable().optional(),\n timestamp: datetime.nullable(),\n finalized: datetime.nullable(),\n }),\n progress: z.object({\n committed: z.boolean(),\n commitTimestamp: datetime.nullable().optional(),\n executed: z.boolean(),\n }),\n fees: z\n .object({\n token: z.union([EvmAddressSchema, SolAddressSchema]).nullable(),\n amount: z.coerce.bigint().nonnegative().nullable(),\n })\n .nullable(),\n transferredTokens: z.array(\n z.object({\n token: z.union([EvmAddressSchema, SolAddressSchema]),\n amount: z.coerce.bigint().nonnegative(),\n }),\n ),\n debug: z\n .looseObject({\n messageId: z.string(),\n status: z.string(),\n destinationChain: z.string(),\n destinationTxHash: z.string(),\n relayTxHash: z.string(),\n retryCount: z.number().int().nonnegative(),\n lastRetryAt: z.iso.datetime(),\n sourceChain: z.string(),\n sourceTxHash: z.string(),\n createdAt: z.iso.datetime(),\n })\n .partial()\n .nullable()\n .optional(),\n});\n\nexport interface SpenderAddressResponse {\n address: EvmAddress;\n}\n\nexport const SpenderAddressResponseSchema: z.ZodType<SpenderAddressResponse> = z.object({\n address: EvmAddressSchema,\n});\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../errors.cjs`);let t=require(`zod`);require(`viem`);let n=require(`@solana/kit`);const r=t.z.base64();function i(t){if(!r.safeParse(t).success)throw new e.InvalidParamsError(`Not a valid base64 string`,`Expected a base64-encoded Solana Transaction string.`);let i=Uint8Array.from(atob(t),e=>e.charCodeAt(0)),a;try{a=(0,n.getTransactionDecoder)().decode(i)}catch(t){throw new e.SdkError(`Failed to decode transaction.`,e.ErrorCode.SOLANA_ERROR,{cause:t})}return a}async function a(e,t){return await(0,n.decompileTransactionMessageFetchingLookupTables)((0,n.getCompiledTransactionMessageDecoder)().decode(e.messageBytes),t)}async function o(e,t){let r=i(e),[o,s]=await Promise.all([a(r,t),t.getLatestBlockhash().send()]);return(0,n.getBase64EncodedWireTransaction)((0,n.compileTransaction)((0,n.setTransactionMessageLifetimeUsingBlockhash)(s.value,o)))}exports.decodeSolanaTransactionBase64=i,exports.refreshSolanaSwapTransactionBlockhash=o;
2
+ //# sourceMappingURL=_solana-utils.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_solana-utils.cjs","names":["z","InvalidParamsError","SdkError","ErrorCode"],"sources":["../../../src/transfer-service/markr/_solana-utils.ts"],"sourcesContent":["import {\n compileTransaction,\n decompileTransactionMessageFetchingLookupTables,\n getBase64EncodedWireTransaction,\n getCompiledTransactionMessageDecoder,\n getTransactionDecoder,\n setTransactionMessageLifetimeUsingBlockhash,\n type Base64EncodedWireTransaction,\n type Rpc,\n type SolanaRpcApi,\n type Transaction,\n} from '@solana/kit';\nimport { bytesToHex, bytesToString } from 'viem';\nimport { z } from 'zod';\nimport { ErrorCode, InvalidParamsError, SdkError } from '../../errors';\n\nconst SolanaSwapTransactionBase64Schema = z.base64();\n\nexport interface DecodedSolanaInstructionDebug {\n index: number;\n programAddressIndex: number;\n programAddress: string | undefined;\n accountIndices: number[];\n accountAddresses: Array<string | undefined>;\n dataBase64: string;\n dataHex: string;\n}\n\nfunction _bytesToBase64(bytes: Uint8Array): string {\n return btoa(bytesToString(bytes));\n}\n\n/**\n * Decodes a base64-encoded serialized Solana transaction.\n *\n * Validates that the input is base64 before attempting to deserialize.\n * Throws SDK errors with stable codes so callers can map failures.\n */\nexport function decodeSolanaTransactionBase64(swapTransactionBase64: string): Transaction {\n const parsedBase64 = SolanaSwapTransactionBase64Schema.safeParse(swapTransactionBase64);\n\n if (!parsedBase64.success) {\n throw new InvalidParamsError('Not a valid base64 string', 'Expected a base64-encoded Solana Transaction string.');\n }\n\n const txBytes = Uint8Array.from(atob(swapTransactionBase64), (character) => character.charCodeAt(0));\n\n let tx: Transaction;\n\n try {\n tx = getTransactionDecoder().decode(txBytes);\n } catch (error) {\n throw new SdkError('Failed to decode transaction.', ErrorCode.SOLANA_ERROR, { cause: error });\n }\n\n return tx;\n}\n\n/**\n * Returns a normalized, readable instruction list from a base64 Solana transaction.\n *\n * This is intended for debugging and inspection. Account addresses are resolved\n * from the decoded message static account list when available.\n */\nexport function decodeSolanaInstructionListFromSwapTransactionBase64(\n swapTransactionBase64: string,\n): DecodedSolanaInstructionDebug[] {\n const tx = decodeSolanaTransactionBase64(swapTransactionBase64);\n const compiledMessage = getCompiledTransactionMessageDecoder().decode(tx.messageBytes);\n\n return compiledMessage.instructions.map((instruction, index) => {\n const accountIndices = instruction.accountIndices ? [...instruction.accountIndices] : [];\n const data = instruction.data ? new Uint8Array(instruction.data) : new Uint8Array();\n\n return {\n index,\n programAddressIndex: instruction.programAddressIndex,\n programAddress: compiledMessage.staticAccounts[instruction.programAddressIndex],\n accountIndices,\n accountAddresses: accountIndices.map((accountIndex) => compiledMessage.staticAccounts[accountIndex]),\n dataBase64: _bytesToBase64(data),\n dataHex: bytesToHex(data),\n };\n });\n}\n\n/**\n * Decompiles a transaction message, resolving address lookup tables via RPC.\n *\n * This returns a message shape that can be mutated (for example, to refresh\n * blockhash lifetime) and recompiled into a new transaction.\n */\nexport async function getDecompiledMessageFromTransaction(\n tx: Transaction,\n rpc: Rpc<SolanaRpcApi>,\n): Promise<ReturnType<typeof decompileTransactionMessageFetchingLookupTables>> {\n const compiledMessageWithLifetime = getCompiledTransactionMessageDecoder().decode(tx.messageBytes);\n\n return await decompileTransactionMessageFetchingLookupTables(compiledMessageWithLifetime, rpc);\n}\n\n/**\n * Refreshes a serialized Solana swap transaction to use the latest blockhash.\n *\n * The returned value is a base64-encoded serialized transaction suitable for\n * signing and broadcast.\n */\nexport async function refreshSolanaSwapTransactionBlockhash(\n swapTransactionBase64: string,\n rpc: Rpc<SolanaRpcApi>,\n): Promise<Base64EncodedWireTransaction> {\n const tx = decodeSolanaTransactionBase64(swapTransactionBase64);\n const [decompiledMessage, latestBlockhashResponse] = await Promise.all([\n getDecompiledMessageFromTransaction(tx, rpc),\n rpc.getLatestBlockhash().send(),\n ]);\n\n const refreshedTxMessage = setTransactionMessageLifetimeUsingBlockhash(\n latestBlockhashResponse.value,\n decompiledMessage,\n );\n\n const refreshedTx = compileTransaction(refreshedTxMessage);\n\n return getBase64EncodedWireTransaction(refreshedTx);\n}\n"],"mappings":"sJAgBA,MAAM,EAAoCA,EAAAA,EAAE,QAAQ,CAsBpD,SAAgB,EAA8B,EAA4C,CAGxF,GAAI,CAFiB,EAAkC,UAAU,EAAsB,CAErE,QAChB,MAAM,IAAIC,EAAAA,mBAAmB,4BAA6B,uDAAuD,CAGnH,IAAM,EAAU,WAAW,KAAK,KAAK,EAAsB,CAAG,GAAc,EAAU,WAAW,EAAE,CAAC,CAEhG,EAEJ,GAAI,CACF,GAAA,EAAA,EAAA,wBAA4B,CAAC,OAAO,EAAQ,OACrC,EAAO,CACd,MAAM,IAAIC,EAAAA,SAAS,gCAAiCC,EAAAA,UAAU,aAAc,CAAE,MAAO,EAAO,CAAC,CAG/F,OAAO,EAqCT,eAAsB,EACpB,EACA,EAC6E,CAG7E,OAAO,MAAA,EAAA,EAAA,kDAAA,EAAA,EAAA,uCAFmE,CAAC,OAAO,EAAG,aAAa,CAER,EAAI,CAShG,eAAsB,EACpB,EACA,EACuC,CACvC,IAAM,EAAK,EAA8B,EAAsB,CACzD,CAAC,EAAmB,GAA2B,MAAM,QAAQ,IAAI,CACrE,EAAoC,EAAI,EAAI,CAC5C,EAAI,oBAAoB,CAAC,MAAM,CAChC,CAAC,CASF,OAAA,EAAA,EAAA,kCAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,6CANE,EAAwB,MACxB,EACD,CAEyD,CAEP"}
@@ -0,0 +1,2 @@
1
+ import{ErrorCode as e,InvalidParamsError as t,SdkError as n}from"../../errors.js";import{z as r}from"zod";import"viem";import{compileTransaction as i,decompileTransactionMessageFetchingLookupTables as a,getBase64EncodedWireTransaction as o,getCompiledTransactionMessageDecoder as s,getTransactionDecoder as c,setTransactionMessageLifetimeUsingBlockhash as l}from"@solana/kit";const u=r.base64();function d(r){if(!u.safeParse(r).success)throw new t(`Not a valid base64 string`,`Expected a base64-encoded Solana Transaction string.`);let i=Uint8Array.from(atob(r),e=>e.charCodeAt(0)),a;try{a=c().decode(i)}catch(t){throw new n(`Failed to decode transaction.`,e.SOLANA_ERROR,{cause:t})}return a}async function f(e,t){return await a(s().decode(e.messageBytes),t)}async function p(e,t){let n=d(e),[r,a]=await Promise.all([f(n,t),t.getLatestBlockhash().send()]);return o(i(l(a.value,r)))}export{d as decodeSolanaTransactionBase64,p as refreshSolanaSwapTransactionBlockhash};
2
+ //# sourceMappingURL=_solana-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_solana-utils.js","names":[],"sources":["../../../src/transfer-service/markr/_solana-utils.ts"],"sourcesContent":["import {\n compileTransaction,\n decompileTransactionMessageFetchingLookupTables,\n getBase64EncodedWireTransaction,\n getCompiledTransactionMessageDecoder,\n getTransactionDecoder,\n setTransactionMessageLifetimeUsingBlockhash,\n type Base64EncodedWireTransaction,\n type Rpc,\n type SolanaRpcApi,\n type Transaction,\n} from '@solana/kit';\nimport { bytesToHex, bytesToString } from 'viem';\nimport { z } from 'zod';\nimport { ErrorCode, InvalidParamsError, SdkError } from '../../errors';\n\nconst SolanaSwapTransactionBase64Schema = z.base64();\n\nexport interface DecodedSolanaInstructionDebug {\n index: number;\n programAddressIndex: number;\n programAddress: string | undefined;\n accountIndices: number[];\n accountAddresses: Array<string | undefined>;\n dataBase64: string;\n dataHex: string;\n}\n\nfunction _bytesToBase64(bytes: Uint8Array): string {\n return btoa(bytesToString(bytes));\n}\n\n/**\n * Decodes a base64-encoded serialized Solana transaction.\n *\n * Validates that the input is base64 before attempting to deserialize.\n * Throws SDK errors with stable codes so callers can map failures.\n */\nexport function decodeSolanaTransactionBase64(swapTransactionBase64: string): Transaction {\n const parsedBase64 = SolanaSwapTransactionBase64Schema.safeParse(swapTransactionBase64);\n\n if (!parsedBase64.success) {\n throw new InvalidParamsError('Not a valid base64 string', 'Expected a base64-encoded Solana Transaction string.');\n }\n\n const txBytes = Uint8Array.from(atob(swapTransactionBase64), (character) => character.charCodeAt(0));\n\n let tx: Transaction;\n\n try {\n tx = getTransactionDecoder().decode(txBytes);\n } catch (error) {\n throw new SdkError('Failed to decode transaction.', ErrorCode.SOLANA_ERROR, { cause: error });\n }\n\n return tx;\n}\n\n/**\n * Returns a normalized, readable instruction list from a base64 Solana transaction.\n *\n * This is intended for debugging and inspection. Account addresses are resolved\n * from the decoded message static account list when available.\n */\nexport function decodeSolanaInstructionListFromSwapTransactionBase64(\n swapTransactionBase64: string,\n): DecodedSolanaInstructionDebug[] {\n const tx = decodeSolanaTransactionBase64(swapTransactionBase64);\n const compiledMessage = getCompiledTransactionMessageDecoder().decode(tx.messageBytes);\n\n return compiledMessage.instructions.map((instruction, index) => {\n const accountIndices = instruction.accountIndices ? [...instruction.accountIndices] : [];\n const data = instruction.data ? new Uint8Array(instruction.data) : new Uint8Array();\n\n return {\n index,\n programAddressIndex: instruction.programAddressIndex,\n programAddress: compiledMessage.staticAccounts[instruction.programAddressIndex],\n accountIndices,\n accountAddresses: accountIndices.map((accountIndex) => compiledMessage.staticAccounts[accountIndex]),\n dataBase64: _bytesToBase64(data),\n dataHex: bytesToHex(data),\n };\n });\n}\n\n/**\n * Decompiles a transaction message, resolving address lookup tables via RPC.\n *\n * This returns a message shape that can be mutated (for example, to refresh\n * blockhash lifetime) and recompiled into a new transaction.\n */\nexport async function getDecompiledMessageFromTransaction(\n tx: Transaction,\n rpc: Rpc<SolanaRpcApi>,\n): Promise<ReturnType<typeof decompileTransactionMessageFetchingLookupTables>> {\n const compiledMessageWithLifetime = getCompiledTransactionMessageDecoder().decode(tx.messageBytes);\n\n return await decompileTransactionMessageFetchingLookupTables(compiledMessageWithLifetime, rpc);\n}\n\n/**\n * Refreshes a serialized Solana swap transaction to use the latest blockhash.\n *\n * The returned value is a base64-encoded serialized transaction suitable for\n * signing and broadcast.\n */\nexport async function refreshSolanaSwapTransactionBlockhash(\n swapTransactionBase64: string,\n rpc: Rpc<SolanaRpcApi>,\n): Promise<Base64EncodedWireTransaction> {\n const tx = decodeSolanaTransactionBase64(swapTransactionBase64);\n const [decompiledMessage, latestBlockhashResponse] = await Promise.all([\n getDecompiledMessageFromTransaction(tx, rpc),\n rpc.getLatestBlockhash().send(),\n ]);\n\n const refreshedTxMessage = setTransactionMessageLifetimeUsingBlockhash(\n latestBlockhashResponse.value,\n decompiledMessage,\n );\n\n const refreshedTx = compileTransaction(refreshedTxMessage);\n\n return getBase64EncodedWireTransaction(refreshedTx);\n}\n"],"mappings":"wXAgBA,MAAM,EAAoC,EAAE,QAAQ,CAsBpD,SAAgB,EAA8B,EAA4C,CAGxF,GAAI,CAFiB,EAAkC,UAAU,EAAsB,CAErE,QAChB,MAAM,IAAI,EAAmB,4BAA6B,uDAAuD,CAGnH,IAAM,EAAU,WAAW,KAAK,KAAK,EAAsB,CAAG,GAAc,EAAU,WAAW,EAAE,CAAC,CAEhG,EAEJ,GAAI,CACF,EAAK,GAAuB,CAAC,OAAO,EAAQ,OACrC,EAAO,CACd,MAAM,IAAI,EAAS,gCAAiC,EAAU,aAAc,CAAE,MAAO,EAAO,CAAC,CAG/F,OAAO,EAqCT,eAAsB,EACpB,EACA,EAC6E,CAG7E,OAAO,MAAM,EAFuB,GAAsC,CAAC,OAAO,EAAG,aAAa,CAER,EAAI,CAShG,eAAsB,EACpB,EACA,EACuC,CACvC,IAAM,EAAK,EAA8B,EAAsB,CACzD,CAAC,EAAmB,GAA2B,MAAM,QAAQ,IAAI,CACrE,EAAoC,EAAI,EAAI,CAC5C,EAAI,oBAAoB,CAAC,MAAM,CAChC,CAAC,CASF,OAAO,EAFa,EALO,EACzB,EAAwB,MACxB,EACD,CAEyD,CAEP"}
@@ -0,0 +1,2 @@
1
+ function e(e){return`data`in e}function t(e){return`chainType`in e&&e.chainType===`svm`}exports.isEvmSwapResponse=e,exports.isSolanaSwapResponse=t;
2
+ //# sourceMappingURL=_type-guards.cjs.map
@@ -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/chain.cjs`),i=require(`../../utils/evm-address.cjs`),a=require(`../../_utils/math.cjs`),o=require(`./_api.cjs`),s=require(`../../utils/sol-address.cjs`);let c=require(`viem`);function l(e,t,n){let r=e.get(t),i=e.get(n);return!r||!i?!1:t===n?r.swapEnabled:r.crossChainSwapEnabled&&r.crossChainTargetChainIds.has(n)}async function u(e,r=!1){let i=new Map;try{let t=(await o.markrGetInfoChains(e)).filter(e=>e.chainType===`evm`||e.chainType===`svm`);for(let e of t){let t=typeof e.chainId==`number`?n.eip155ChainIdToCaip2(e.chainId):e.chainId,a=e.enabled_services.includes(`cross-chain-quote`)&&e.enabled_services.includes(`cross-chain-swap`),o=e.enabled_services.includes(`quote`)&&e.enabled_services.includes(`swap`),s=new Set;for(let r of e.lanes){let e=typeof r==`number`?n.eip155ChainIdToCaip2(r):r;e!==t&&s.add(e)}let c=r?!1:a,l=c?s:new Set;!o&&l.size===0||i.set(t,{chainId:e.chainId,crossChainSwapEnabled:c,crossChainTargetChainIds:l,swapEnabled:o,tokenList:e.enabled_services.includes(`token-list`)})}}catch(e){throw new t.SdkError(t.ErrorReason.UNKNOWN,t.ErrorCode.INITIALIZATION_FAILED,{cause:e,details:`Failed to fetch supported chains from Markr API.`})}return i}async function d(e,t){let n=new Map;for(let[r,i]of t.entries())if(typeof i.chainId==`number`&&i.tokenList&&(i.crossChainSwapEnabled||i.swapEnabled))try{let t=o.markrGetTokenList(e,i.chainId);n.set(r,t)}catch{}return n}function f(t){return t===e.ERC_ZERO_ADDRESS||t===e.NATIVE_SOL_ADDRESS}function p(t,n){return t.type===e.TokenType.NATIVE?r.isSolanaNamespace(n)?e.NATIVE_SOL_ADDRESS:e.ERC_ZERO_ADDRESS:t.address}function m({amountOut:e,assetOut:t,slippageBps:n}){let r=a.calculateMinimumAmountOut({amountOut:e,assetOut:t,slippageBps:n});return e>0n&&r===0n?1n:r}function h({assetIn:t,fees:n,sourceChain:r},i=3e3){return n.reduce((n,i)=>i.fundingModel!==`additive`||i.chainId!==r.chainId?n:t.type===e.TokenType.NATIVE?i.token.type===e.TokenType.NATIVE?n+i.amount:n:t.type===e.TokenType.ERC20?i.token.type===e.TokenType.ERC20&&(0,c.isAddressEqual)(i.token.address,t.address)?n+i.amount:n:i.token.type===e.TokenType.SPL&&i.token.address===t.address?n+i.amount:n,0n)*BigInt(1e4+i)/10000n}function g(t,n,r){let i=t.amountOut*BigInt(r)/10000n,a=t.amountOut-i,o=[...v(t.fees),{type:`partner`,fundingModel:`included`,name:`Core Fee`,amount:i,chainId:n.targetChain.chainId,token:y(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 _(e){try{return(await o.markrGetPartnerInfo(e)).fee}catch(e){throw new t.SdkError(t.ErrorReason.UNKNOWN,t.ErrorCode.INITIALIZATION_FAILED,{cause:e,details:`Failed to fetch partner info from Markr API.`})}}function v(t){if(!t)return[];let r=[];for(let a of t){let t=typeof a.token.chainId==`number`?n.eip155ChainIdToCaip2(a.token.chainId):a.token.chainId,o;f(a.token.address)?o={type:e.TokenType.NATIVE}:i.isEvmAddress(a.token.address)?o={type:e.TokenType.ERC20,address:a.token.address}:s.isSolAddress(a.token.address)&&(o={type:e.TokenType.SPL,address:a.token.address}),o&&r.push({type:a.type,fundingModel:a.extra?`additive`:`included`,name:a.name,amount:a.amount,chainId:t,token:o})}return r}function y(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 b(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 x(e){if(e instanceof c.BaseError){let t=e.data;if((0,c.isHex)(t))return t;let n;if(e.walk(e=>{let t=e.data;return!n&&(0,c.isHex)(t)&&(n=t),!1}),n)return n;let r=e.cause?.data;if((0,c.isHex)(r))return r}if(!e||typeof e!=`object`)return;let t=e;if((0,c.isHex)(t.data))return t.data;if((0,c.isHex)(t.error?.data))return t.error.data;if((0,c.isHex)(t.cause?.data))return t.cause.data;if((0,c.isHex)(t.response?.data))return t.response.data;if((0,c.isHex)(t.body?.error?.data))return t.body.error.data}function S(e,t){let n=x(t);if(!n)return null;try{let t=(0,c.decodeErrorResult)({abi:e,data:n}),r=t.args.length>0?`(${t.args.map(String).join(`, `)})`:`()`;return`${t.errorName}${r}`}catch{let t=n.slice(0,10).toLowerCase();for(let n of e)if(n.type===`error`&&(0,c.toFunctionSelector)(`${n.name}(${n.inputs.map(e=>e.type).join(`,`)})`).toLowerCase()===t)return`${n.name}()`}return null}exports.assetToAddressString=p,exports.calculateMarkrMinimumAmountOut=m,exports.decodeMarkrRevertError=S,exports.getAdditiveSourceAssetFeeAmount=h,exports.getMarkrSwapWrapperAbi=b,exports.getPartnerFeeBps=_,exports.getSupportedChains=u,exports.getSupportedTokens=d,exports.isRouteSupported=l,exports.isTokenAddressNative=f,exports.quoteFromMarkrQuoteResponseData=g;
2
+ //# sourceMappingURL=_utils.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_utils.cjs","names":["markrGetInfoChains","eip155ChainIdToCaip2","SdkError","ErrorReason","ErrorCode","markrGetTokenList","ERC_ZERO_ADDRESS","NATIVE_SOL_ADDRESS","TokenType","isSolanaNamespace","calculateMinimumAmountOut","ServiceType","markrGetPartnerInfo","isEvmAddress","isSolAddress","BaseError"],"sources":["../../../src/transfer-service/markr/_utils.ts"],"sourcesContent":["import { ErrorCode, ErrorReason, SdkError } from '../../errors';\nimport { BaseError, decodeErrorResult, type Hex, isAddressEqual, isHex, toFunctionSelector } from 'viem';\nimport {\n type QuoteResponseData,\n type SupportedChainsResponseItemEvm,\n type SupportedChainsResponseItemSvm,\n type TokenListResponse,\n} from './_schema';\nimport { ERC_ZERO_ADDRESS, NATIVE_SOL_ADDRESS, ServiceType, TokenType } from '../../constants';\nimport { isSolanaNamespace } from '../../_utils/chain';\nimport { calculateMinimumAmountOut } from '../../_utils/math';\nimport { eip155ChainIdToCaip2 } from '../../utils/caip';\nimport type { Asset } from '../../types/asset';\nimport type { Caip2ChainId } from '../../types/caip';\nimport type { Quote, QuoteFee, QuoteFees, QuoteFeeToken, QuoterProps } from '../../types/quote';\nimport { markrGetInfoChains, markrGetPartnerInfo, markrGetTokenList, type ApiOptions } from './_api';\nimport { isEvmAddress } from '../../utils/evm-address';\nimport { isSolAddress } from '../../utils/sol-address';\n\nexport type SupportedChainsMap = Map<\n Caip2ChainId,\n {\n /** `number` for EVM, `Caip2ChainId` for SVM */\n chainId: number | Caip2ChainId;\n crossChainSwapEnabled: boolean;\n crossChainTargetChainIds: ReadonlySet<Caip2ChainId>;\n swapEnabled: boolean;\n tokenList: boolean;\n }\n>;\n\n/**\n * Checks whether the given source → target chain route is supported by Markr.\n */\nexport function isRouteSupported(\n supportedChains: SupportedChainsMap,\n sourceChainId: Caip2ChainId,\n targetChainId: Caip2ChainId,\n): boolean {\n const sourceChain = supportedChains.get(sourceChainId);\n const targetChain = supportedChains.get(targetChainId);\n\n if (!sourceChain || !targetChain) return false;\n\n if (sourceChainId === targetChainId) {\n return sourceChain.swapEnabled;\n }\n\n return sourceChain.crossChainSwapEnabled && sourceChain.crossChainTargetChainIds.has(targetChainId);\n}\n\nexport async function getSupportedChains(\n apiOptions: ApiOptions,\n disableCrossChainSwaps = false,\n): Promise<SupportedChainsMap> {\n const supportedChains: SupportedChainsMap = new Map();\n\n try {\n const chains = await markrGetInfoChains(apiOptions);\n const filteredSupportedChains = chains.filter(\n (chain): chain is SupportedChainsResponseItemEvm | SupportedChainsResponseItemSvm => {\n // Only include chains types that we support in the SDK (EVM and Solana for now).\n return chain.chainType === 'evm' || chain.chainType === 'svm';\n },\n );\n\n for (const chain of filteredSupportedChains) {\n const key: Caip2ChainId = typeof chain.chainId === 'number' ? eip155ChainIdToCaip2(chain.chainId) : chain.chainId;\n\n const isCrossChainSwapEnabled =\n chain.enabled_services.includes('cross-chain-quote') && chain.enabled_services.includes('cross-chain-swap');\n const isSwapEnabled = chain.enabled_services.includes('quote') && chain.enabled_services.includes('swap');\n const normalizedLaneChainIds = new Set<Caip2ChainId>();\n\n for (const lane of chain.lanes) {\n const laneChainId = typeof lane === 'number' ? eip155ChainIdToCaip2(lane) : lane;\n\n if (laneChainId !== key) {\n normalizedLaneChainIds.add(laneChainId);\n }\n }\n\n const crossChainSwapEnabled = disableCrossChainSwaps ? false : isCrossChainSwapEnabled;\n const crossChainTargetChainIds = crossChainSwapEnabled ? normalizedLaneChainIds : new Set<Caip2ChainId>();\n\n if (!isSwapEnabled && crossChainTargetChainIds.size === 0) {\n continue;\n }\n\n supportedChains.set(key, {\n chainId: chain.chainId,\n crossChainSwapEnabled,\n crossChainTargetChainIds,\n swapEnabled: isSwapEnabled,\n tokenList: chain.enabled_services.includes('token-list'),\n });\n }\n } catch (error) {\n throw new SdkError(ErrorReason.UNKNOWN, ErrorCode.INITIALIZATION_FAILED, {\n cause: error,\n details: 'Failed to fetch supported chains from Markr API.',\n });\n }\n\n return supportedChains;\n}\n\nexport async function getSupportedTokens(\n apiOptions: ApiOptions,\n supportedChains: SupportedChainsMap,\n): Promise<Map<Caip2ChainId, Promise<TokenListResponse>>> {\n // Parallel fetch token lists for all supported chains.\n const supportedTokens: Map<Caip2ChainId, Promise<TokenListResponse>> = new Map();\n\n for (const [caip2ChainId, chainInfo] of supportedChains.entries()) {\n // Only fetch token list for EVM chains that support swaps.\n if (\n typeof chainInfo.chainId === 'number' &&\n chainInfo.tokenList &&\n (chainInfo.crossChainSwapEnabled || chainInfo.swapEnabled)\n ) {\n try {\n const tokenListPromise = markrGetTokenList(apiOptions, chainInfo.chainId);\n supportedTokens.set(caip2ChainId, tokenListPromise);\n } catch {\n // Ignore errors for individual token list fetches.\n // TODO: Logger?\n }\n }\n }\n\n return supportedTokens;\n}\n\n/**\n * Determine if the provided token address represents the native token for its chain.\n *\n * Markr represents EVM native tokens as the zero address and Solana native SOL\n * as the wrapped SOL mint address.\n */\nexport function isTokenAddressNative(address: string): boolean {\n return address === ERC_ZERO_ADDRESS || address === NATIVE_SOL_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 NATIVE_SOL_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\n/**\n * Returns additive fee amount charged in the source asset on the source chain.\n *\n * This is used for allowance/balance checks where users must fund both the\n * transfer input and any additive source-asset fee components. A safety buffer\n * is applied to the additive fee total to reduce the chance of under-approvals.\n *\n * @see https://docs.debridge.com/dln-details/overview/fee-structure#best-practice-checklist-for-integrators\n *\n * @param quote The quote containing the fees to analyze.\n * @param bufferBps Buffer in basis points applied to the additive fee total.\n * Defaults to 3000 bps (30%).\n */\nexport function getAdditiveSourceAssetFeeAmount(\n { assetIn, fees, sourceChain }: Pick<Quote, 'assetIn' | 'fees' | 'sourceChain'>,\n bufferBps = 3_000,\n): bigint {\n const additiveSourceAssetFeeAmount = fees.reduce((total, fee) => {\n if (fee.fundingModel !== 'additive' || fee.chainId !== sourceChain.chainId) {\n return total;\n }\n\n if (assetIn.type === TokenType.NATIVE) {\n return fee.token.type === TokenType.NATIVE ? total + fee.amount : total;\n }\n\n if (assetIn.type === TokenType.ERC20) {\n return fee.token.type === TokenType.ERC20 && isAddressEqual(fee.token.address, assetIn.address)\n ? total + fee.amount\n : total;\n }\n\n return fee.token.type === TokenType.SPL && fee.token.address === assetIn.address ? total + fee.amount : total;\n }, 0n);\n\n return (additiveSourceAssetFeeAmount * BigInt(10_000 + bufferBps)) / 10_000n;\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 fundingModel: 'included',\n name: 'Core Fee',\n amount: partnerFee,\n chainId: quoterProps.targetChain.chainId,\n token: assetToFeeToken(quoterProps.targetAsset),\n },\n ];\n\n return {\n aggregator: {\n id: data.aggregator.id,\n logoUrl: data.aggregator.logo_url,\n name: data.aggregator.name,\n },\n amountIn: data.amountIn,\n amountOut: amountOutAfterFees,\n assetIn: quoterProps.sourceAsset,\n assetOut: quoterProps.targetAsset,\n expiresAt: data.expiredAt, // Markr returns `expiredAt` as Unix time in seconds; use as-is.\n fees,\n fromAddress: quoterProps.fromAddress,\n /**\n * This gasEstimate is rough or may be missing.\n * Consumers should use TransferManager.estimateGas for a more accurate estimate.\n */\n gasEstimate: data.gasEstimate,\n id: data.uuid,\n partnerFeeBps,\n serviceType: ServiceType.MARKR,\n slippageBps: quoterProps.slippageBps ?? data.recommendedSlippage,\n sourceChain: quoterProps.sourceChain,\n targetChain: quoterProps.targetChain,\n toAddress: quoterProps.toAddress,\n } satisfies Quote;\n}\n\nexport async function getPartnerFeeBps(apiOptions: ApiOptions): Promise<number> {\n try {\n const partnerInfo = await markrGetPartnerInfo(apiOptions);\n return partnerInfo.fee;\n } catch (error) {\n throw new SdkError(ErrorReason.UNKNOWN, ErrorCode.INITIALIZATION_FAILED, {\n cause: error,\n details: 'Failed to fetch partner info from Markr API.',\n });\n }\n}\n\nexport function mapMarkrQuoteResponseDataFeesToQuoteFees(markrFees: QuoteResponseData['fees']): QuoteFees {\n if (!markrFees) {\n return [];\n }\n\n const fees: QuoteFee[] = [];\n\n for (const fee of markrFees) {\n const chainId = typeof fee.token.chainId === 'number' ? eip155ChainIdToCaip2(fee.token.chainId) : fee.token.chainId;\n\n let token: QuoteFeeToken | undefined;\n\n if (isTokenAddressNative(fee.token.address)) {\n token = { type: TokenType.NATIVE };\n } else if (isEvmAddress(fee.token.address)) {\n token = { type: TokenType.ERC20, address: fee.token.address };\n } else if (isSolAddress(fee.token.address)) {\n token = { type: TokenType.SPL, address: fee.token.address };\n }\n\n if (!token) {\n // Skip fee if we can't determine token type.\n continue;\n }\n\n fees.push({\n type: fee.type,\n fundingModel: fee.extra ? 'additive' : 'included',\n name: fee.name,\n amount: fee.amount,\n chainId,\n token,\n });\n }\n\n return fees;\n}\n\nfunction assetToFeeToken(asset: Asset): QuoteFeeToken {\n if (asset.type === TokenType.NATIVE) {\n return { type: TokenType.NATIVE };\n }\n\n if (asset.type === TokenType.SPL) {\n return { type: TokenType.SPL, address: asset.address };\n }\n\n return { type: TokenType.ERC20, address: asset.address };\n}\n\nexport type MarkrRouterAbi =\n | (typeof import('./_abis/swap-wrapper-abi'))['MARKR_SWAP_WRAPPER_ABI']\n | (typeof import('./_abis/cross-chain-swap-wrapper-abi'))['MARKR_CROSS_CHAIN_SWAP_WRAPPER_ABI'];\n\nexport async function getMarkrSwapWrapperAbi(crossChain: boolean): Promise<MarkrRouterAbi> {\n if (crossChain) {\n return (await import('./_abis/cross-chain-swap-wrapper-abi')).MARKR_CROSS_CHAIN_SWAP_WRAPPER_ABI;\n }\n\n return (await import('./_abis/swap-wrapper-abi')).MARKR_SWAP_WRAPPER_ABI;\n}\n\nexport function extractHexDataFromError(error: unknown): Hex | undefined {\n if (error instanceof BaseError) {\n const directData = (error as { data?: unknown }).data;\n if (isHex(directData)) {\n return directData;\n }\n\n let walkedData: Hex | undefined;\n error.walk((walkedError) => {\n const nestedData = (walkedError as { data?: unknown }).data;\n if (!walkedData && isHex(nestedData)) {\n walkedData = nestedData;\n }\n return false;\n });\n\n if (walkedData) {\n return walkedData;\n }\n\n const causeData = (error as { cause?: { data?: unknown } }).cause?.data;\n if (isHex(causeData)) {\n return causeData;\n }\n }\n\n if (!error || typeof error !== 'object') {\n return undefined;\n }\n\n const genericError = error as {\n data?: unknown;\n error?: { data?: unknown };\n cause?: { data?: unknown };\n response?: { data?: unknown };\n body?: { error?: { data?: unknown } };\n };\n\n if (isHex(genericError.data)) {\n return genericError.data;\n }\n\n if (isHex(genericError.error?.data)) {\n return genericError.error.data;\n }\n\n if (isHex(genericError.cause?.data)) {\n return genericError.cause.data;\n }\n\n if (isHex(genericError.response?.data)) {\n return genericError.response.data;\n }\n\n if (isHex(genericError.body?.error?.data)) {\n return genericError.body.error.data;\n }\n\n return undefined;\n}\n\nexport function decodeMarkrRevertError(abi: MarkrRouterAbi, error: unknown): string | null {\n const revertData = extractHexDataFromError(error);\n\n if (!revertData) {\n return null;\n }\n\n try {\n const decoded = decodeErrorResult({ abi, data: revertData });\n const decodedArgs = decoded.args.length > 0 ? `(${decoded.args.map(String).join(', ')})` : '()';\n\n return `${decoded.errorName}${decodedArgs}`;\n } catch {\n const selector = revertData.slice(0, 10).toLowerCase();\n\n for (const abiItem of abi) {\n if (abiItem.type !== 'error') {\n continue;\n }\n\n const signature = `${abiItem.name}(${abiItem.inputs.map((input) => input.type).join(',')})`;\n if (toFunctionSelector(signature).toLowerCase() === selector) {\n return `${abiItem.name}()`;\n }\n }\n }\n\n return null;\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{ERC_ZERO_ADDRESS as e,NATIVE_SOL_ADDRESS as t,ServiceType as n,TokenType as r}from"../../constants.js";import{ErrorCode as i,ErrorReason as a,SdkError as o}from"../../errors.js";import{eip155ChainIdToCaip2 as s}from"../../utils/caip.js";import{isSolanaNamespace as c}from"../../_utils/chain.js";import{isEvmAddress as l}from"../../utils/evm-address.js";import{calculateMinimumAmountOut as u}from"../../_utils/math.js";import{markrGetInfoChains as d,markrGetPartnerInfo as f,markrGetTokenList as p}from"./_api.js";import{isSolAddress as m}from"../../utils/sol-address.js";import{BaseError as h,decodeErrorResult as g,isAddressEqual as _,isHex as v,toFunctionSelector as y}from"viem";function b(e,t,n){let r=e.get(t),i=e.get(n);return!r||!i?!1:t===n?r.swapEnabled:r.crossChainSwapEnabled&&r.crossChainTargetChainIds.has(n)}async function x(e,t=!1){let n=new Map;try{let r=(await d(e)).filter(e=>e.chainType===`evm`||e.chainType===`svm`);for(let e of r){let r=typeof e.chainId==`number`?s(e.chainId):e.chainId,i=e.enabled_services.includes(`cross-chain-quote`)&&e.enabled_services.includes(`cross-chain-swap`),a=e.enabled_services.includes(`quote`)&&e.enabled_services.includes(`swap`),o=new Set;for(let t of e.lanes){let e=typeof t==`number`?s(t):t;e!==r&&o.add(e)}let c=t?!1:i,l=c?o:new Set;!a&&l.size===0||n.set(r,{chainId:e.chainId,crossChainSwapEnabled:c,crossChainTargetChainIds:l,swapEnabled:a,tokenList:e.enabled_services.includes(`token-list`)})}}catch(e){throw new o(a.UNKNOWN,i.INITIALIZATION_FAILED,{cause:e,details:`Failed to fetch supported chains from Markr API.`})}return n}async function S(e,t){let n=new Map;for(let[r,i]of t.entries())if(typeof i.chainId==`number`&&i.tokenList&&(i.crossChainSwapEnabled||i.swapEnabled))try{let t=p(e,i.chainId);n.set(r,t)}catch{}return n}function C(n){return n===e||n===t}function w(n,i){return n.type===r.NATIVE?c(i)?t:e:n.address}function T({amountOut:e,assetOut:t,slippageBps:n}){let r=u({amountOut:e,assetOut:t,slippageBps:n});return e>0n&&r===0n?1n:r}function E({assetIn:e,fees:t,sourceChain:n},i=3e3){return t.reduce((t,i)=>i.fundingModel!==`additive`||i.chainId!==n.chainId?t:e.type===r.NATIVE?i.token.type===r.NATIVE?t+i.amount:t:e.type===r.ERC20?i.token.type===r.ERC20&&_(i.token.address,e.address)?t+i.amount:t:i.token.type===r.SPL&&i.token.address===e.address?t+i.amount:t,0n)*BigInt(1e4+i)/10000n}function D(e,t,r){let i=e.amountOut*BigInt(r)/10000n,a=e.amountOut-i,o=[...k(e.fees),{type:`partner`,fundingModel:`included`,name:`Core Fee`,amount:i,chainId:t.targetChain.chainId,token:A(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 O(e){try{return(await f(e)).fee}catch(e){throw new o(a.UNKNOWN,i.INITIALIZATION_FAILED,{cause:e,details:`Failed to fetch partner info from Markr API.`})}}function k(e){if(!e)return[];let t=[];for(let n of e){let e=typeof n.token.chainId==`number`?s(n.token.chainId):n.token.chainId,i;C(n.token.address)?i={type:r.NATIVE}:l(n.token.address)?i={type:r.ERC20,address:n.token.address}:m(n.token.address)&&(i={type:r.SPL,address:n.token.address}),i&&t.push({type:n.type,fundingModel:n.extra?`additive`:`included`,name:n.name,amount:n.amount,chainId:e,token:i})}return t}function A(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 j(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 M(e){if(e instanceof h){let t=e.data;if(v(t))return t;let n;if(e.walk(e=>{let t=e.data;return!n&&v(t)&&(n=t),!1}),n)return n;let r=e.cause?.data;if(v(r))return r}if(!e||typeof e!=`object`)return;let t=e;if(v(t.data))return t.data;if(v(t.error?.data))return t.error.data;if(v(t.cause?.data))return t.cause.data;if(v(t.response?.data))return t.response.data;if(v(t.body?.error?.data))return t.body.error.data}function N(e,t){let n=M(t);if(!n)return null;try{let t=g({abi:e,data:n}),r=t.args.length>0?`(${t.args.map(String).join(`, `)})`:`()`;return`${t.errorName}${r}`}catch{let t=n.slice(0,10).toLowerCase();for(let n of e)if(n.type===`error`&&y(`${n.name}(${n.inputs.map(e=>e.type).join(`,`)})`).toLowerCase()===t)return`${n.name}()`}return null}export{w as assetToAddressString,T as calculateMarkrMinimumAmountOut,N as decodeMarkrRevertError,E as getAdditiveSourceAssetFeeAmount,j as getMarkrSwapWrapperAbi,O as getPartnerFeeBps,x as getSupportedChains,S as getSupportedTokens,b as isRouteSupported,C as isTokenAddressNative,D 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, isAddressEqual, isHex, toFunctionSelector } from 'viem';\nimport {\n type QuoteResponseData,\n type SupportedChainsResponseItemEvm,\n type SupportedChainsResponseItemSvm,\n type TokenListResponse,\n} from './_schema';\nimport { ERC_ZERO_ADDRESS, NATIVE_SOL_ADDRESS, ServiceType, TokenType } from '../../constants';\nimport { isSolanaNamespace } from '../../_utils/chain';\nimport { calculateMinimumAmountOut } from '../../_utils/math';\nimport { eip155ChainIdToCaip2 } from '../../utils/caip';\nimport type { Asset } from '../../types/asset';\nimport type { Caip2ChainId } from '../../types/caip';\nimport type { Quote, QuoteFee, QuoteFees, QuoteFeeToken, QuoterProps } from '../../types/quote';\nimport { markrGetInfoChains, markrGetPartnerInfo, markrGetTokenList, type ApiOptions } from './_api';\nimport { isEvmAddress } from '../../utils/evm-address';\nimport { isSolAddress } from '../../utils/sol-address';\n\nexport type SupportedChainsMap = Map<\n Caip2ChainId,\n {\n /** `number` for EVM, `Caip2ChainId` for SVM */\n chainId: number | Caip2ChainId;\n crossChainSwapEnabled: boolean;\n crossChainTargetChainIds: ReadonlySet<Caip2ChainId>;\n swapEnabled: boolean;\n tokenList: boolean;\n }\n>;\n\n/**\n * Checks whether the given source → target chain route is supported by Markr.\n */\nexport function isRouteSupported(\n supportedChains: SupportedChainsMap,\n sourceChainId: Caip2ChainId,\n targetChainId: Caip2ChainId,\n): boolean {\n const sourceChain = supportedChains.get(sourceChainId);\n const targetChain = supportedChains.get(targetChainId);\n\n if (!sourceChain || !targetChain) return false;\n\n if (sourceChainId === targetChainId) {\n return sourceChain.swapEnabled;\n }\n\n return sourceChain.crossChainSwapEnabled && sourceChain.crossChainTargetChainIds.has(targetChainId);\n}\n\nexport async function getSupportedChains(\n apiOptions: ApiOptions,\n disableCrossChainSwaps = false,\n): Promise<SupportedChainsMap> {\n const supportedChains: SupportedChainsMap = new Map();\n\n try {\n const chains = await markrGetInfoChains(apiOptions);\n const filteredSupportedChains = chains.filter(\n (chain): chain is SupportedChainsResponseItemEvm | SupportedChainsResponseItemSvm => {\n // Only include chains types that we support in the SDK (EVM and Solana for now).\n return chain.chainType === 'evm' || chain.chainType === 'svm';\n },\n );\n\n for (const chain of filteredSupportedChains) {\n const key: Caip2ChainId = typeof chain.chainId === 'number' ? eip155ChainIdToCaip2(chain.chainId) : chain.chainId;\n\n const isCrossChainSwapEnabled =\n chain.enabled_services.includes('cross-chain-quote') && chain.enabled_services.includes('cross-chain-swap');\n const isSwapEnabled = chain.enabled_services.includes('quote') && chain.enabled_services.includes('swap');\n const normalizedLaneChainIds = new Set<Caip2ChainId>();\n\n for (const lane of chain.lanes) {\n const laneChainId = typeof lane === 'number' ? eip155ChainIdToCaip2(lane) : lane;\n\n if (laneChainId !== key) {\n normalizedLaneChainIds.add(laneChainId);\n }\n }\n\n const crossChainSwapEnabled = disableCrossChainSwaps ? false : isCrossChainSwapEnabled;\n const crossChainTargetChainIds = crossChainSwapEnabled ? normalizedLaneChainIds : new Set<Caip2ChainId>();\n\n if (!isSwapEnabled && crossChainTargetChainIds.size === 0) {\n continue;\n }\n\n supportedChains.set(key, {\n chainId: chain.chainId,\n crossChainSwapEnabled,\n crossChainTargetChainIds,\n swapEnabled: isSwapEnabled,\n tokenList: chain.enabled_services.includes('token-list'),\n });\n }\n } catch (error) {\n throw new SdkError(ErrorReason.UNKNOWN, ErrorCode.INITIALIZATION_FAILED, {\n cause: error,\n details: 'Failed to fetch supported chains from Markr API.',\n });\n }\n\n return supportedChains;\n}\n\nexport async function getSupportedTokens(\n apiOptions: ApiOptions,\n supportedChains: SupportedChainsMap,\n): Promise<Map<Caip2ChainId, Promise<TokenListResponse>>> {\n // Parallel fetch token lists for all supported chains.\n const supportedTokens: Map<Caip2ChainId, Promise<TokenListResponse>> = new Map();\n\n for (const [caip2ChainId, chainInfo] of supportedChains.entries()) {\n // Only fetch token list for EVM chains that support swaps.\n if (\n typeof chainInfo.chainId === 'number' &&\n chainInfo.tokenList &&\n (chainInfo.crossChainSwapEnabled || chainInfo.swapEnabled)\n ) {\n try {\n const tokenListPromise = markrGetTokenList(apiOptions, chainInfo.chainId);\n supportedTokens.set(caip2ChainId, tokenListPromise);\n } catch {\n // Ignore errors for individual token list fetches.\n // TODO: Logger?\n }\n }\n }\n\n return supportedTokens;\n}\n\n/**\n * Determine if the provided token address represents the native token for its chain.\n *\n * Markr represents EVM native tokens as the zero address and Solana native SOL\n * as the wrapped SOL mint address.\n */\nexport function isTokenAddressNative(address: string): boolean {\n return address === ERC_ZERO_ADDRESS || address === NATIVE_SOL_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 NATIVE_SOL_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\n/**\n * Returns additive fee amount charged in the source asset on the source chain.\n *\n * This is used for allowance/balance checks where users must fund both the\n * transfer input and any additive source-asset fee components. A safety buffer\n * is applied to the additive fee total to reduce the chance of under-approvals.\n *\n * @see https://docs.debridge.com/dln-details/overview/fee-structure#best-practice-checklist-for-integrators\n *\n * @param quote The quote containing the fees to analyze.\n * @param bufferBps Buffer in basis points applied to the additive fee total.\n * Defaults to 3000 bps (30%).\n */\nexport function getAdditiveSourceAssetFeeAmount(\n { assetIn, fees, sourceChain }: Pick<Quote, 'assetIn' | 'fees' | 'sourceChain'>,\n bufferBps = 3_000,\n): bigint {\n const additiveSourceAssetFeeAmount = fees.reduce((total, fee) => {\n if (fee.fundingModel !== 'additive' || fee.chainId !== sourceChain.chainId) {\n return total;\n }\n\n if (assetIn.type === TokenType.NATIVE) {\n return fee.token.type === TokenType.NATIVE ? total + fee.amount : total;\n }\n\n if (assetIn.type === TokenType.ERC20) {\n return fee.token.type === TokenType.ERC20 && isAddressEqual(fee.token.address, assetIn.address)\n ? total + fee.amount\n : total;\n }\n\n return fee.token.type === TokenType.SPL && fee.token.address === assetIn.address ? total + fee.amount : total;\n }, 0n);\n\n return (additiveSourceAssetFeeAmount * BigInt(10_000 + bufferBps)) / 10_000n;\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 fundingModel: 'included',\n name: 'Core Fee',\n amount: partnerFee,\n chainId: quoterProps.targetChain.chainId,\n token: assetToFeeToken(quoterProps.targetAsset),\n },\n ];\n\n return {\n aggregator: {\n id: data.aggregator.id,\n logoUrl: data.aggregator.logo_url,\n name: data.aggregator.name,\n },\n amountIn: data.amountIn,\n amountOut: amountOutAfterFees,\n assetIn: quoterProps.sourceAsset,\n assetOut: quoterProps.targetAsset,\n expiresAt: data.expiredAt, // Markr returns `expiredAt` as Unix time in seconds; use as-is.\n fees,\n fromAddress: quoterProps.fromAddress,\n /**\n * This gasEstimate is rough or may be missing.\n * Consumers should use TransferManager.estimateGas for a more accurate estimate.\n */\n gasEstimate: data.gasEstimate,\n id: data.uuid,\n partnerFeeBps,\n serviceType: ServiceType.MARKR,\n slippageBps: quoterProps.slippageBps ?? data.recommendedSlippage,\n sourceChain: quoterProps.sourceChain,\n targetChain: quoterProps.targetChain,\n toAddress: quoterProps.toAddress,\n } satisfies Quote;\n}\n\nexport async function getPartnerFeeBps(apiOptions: ApiOptions): Promise<number> {\n try {\n const partnerInfo = await markrGetPartnerInfo(apiOptions);\n return partnerInfo.fee;\n } catch (error) {\n throw new SdkError(ErrorReason.UNKNOWN, ErrorCode.INITIALIZATION_FAILED, {\n cause: error,\n details: 'Failed to fetch partner info from Markr API.',\n });\n }\n}\n\nexport function mapMarkrQuoteResponseDataFeesToQuoteFees(markrFees: QuoteResponseData['fees']): QuoteFees {\n if (!markrFees) {\n return [];\n }\n\n const fees: QuoteFee[] = [];\n\n for (const fee of markrFees) {\n const chainId = typeof fee.token.chainId === 'number' ? eip155ChainIdToCaip2(fee.token.chainId) : fee.token.chainId;\n\n let token: QuoteFeeToken | undefined;\n\n if (isTokenAddressNative(fee.token.address)) {\n token = { type: TokenType.NATIVE };\n } else if (isEvmAddress(fee.token.address)) {\n token = { type: TokenType.ERC20, address: fee.token.address };\n } else if (isSolAddress(fee.token.address)) {\n token = { type: TokenType.SPL, address: fee.token.address };\n }\n\n if (!token) {\n // Skip fee if we can't determine token type.\n continue;\n }\n\n fees.push({\n type: fee.type,\n fundingModel: fee.extra ? 'additive' : 'included',\n name: fee.name,\n amount: fee.amount,\n chainId,\n token,\n });\n }\n\n return fees;\n}\n\nfunction assetToFeeToken(asset: Asset): QuoteFeeToken {\n if (asset.type === TokenType.NATIVE) {\n return { type: TokenType.NATIVE };\n }\n\n if (asset.type === TokenType.SPL) {\n return { type: TokenType.SPL, address: asset.address };\n }\n\n return { type: TokenType.ERC20, address: asset.address };\n}\n\nexport type MarkrRouterAbi =\n | (typeof import('./_abis/swap-wrapper-abi'))['MARKR_SWAP_WRAPPER_ABI']\n | (typeof import('./_abis/cross-chain-swap-wrapper-abi'))['MARKR_CROSS_CHAIN_SWAP_WRAPPER_ABI'];\n\nexport async function getMarkrSwapWrapperAbi(crossChain: boolean): Promise<MarkrRouterAbi> {\n if (crossChain) {\n return (await import('./_abis/cross-chain-swap-wrapper-abi')).MARKR_CROSS_CHAIN_SWAP_WRAPPER_ABI;\n }\n\n return (await import('./_abis/swap-wrapper-abi')).MARKR_SWAP_WRAPPER_ABI;\n}\n\nexport function extractHexDataFromError(error: unknown): Hex | undefined {\n if (error instanceof BaseError) {\n const directData = (error as { data?: unknown }).data;\n if (isHex(directData)) {\n return directData;\n }\n\n let walkedData: Hex | undefined;\n error.walk((walkedError) => {\n const nestedData = (walkedError as { data?: unknown }).data;\n if (!walkedData && isHex(nestedData)) {\n walkedData = nestedData;\n }\n return false;\n });\n\n if (walkedData) {\n return walkedData;\n }\n\n const causeData = (error as { cause?: { data?: unknown } }).cause?.data;\n if (isHex(causeData)) {\n return causeData;\n }\n }\n\n if (!error || typeof error !== 'object') {\n return undefined;\n }\n\n const genericError = error as {\n data?: unknown;\n error?: { data?: unknown };\n cause?: { data?: unknown };\n response?: { data?: unknown };\n body?: { error?: { data?: unknown } };\n };\n\n if (isHex(genericError.data)) {\n return genericError.data;\n }\n\n if (isHex(genericError.error?.data)) {\n return genericError.error.data;\n }\n\n if (isHex(genericError.cause?.data)) {\n return genericError.cause.data;\n }\n\n if (isHex(genericError.response?.data)) {\n return genericError.response.data;\n }\n\n if (isHex(genericError.body?.error?.data)) {\n return genericError.body.error.data;\n }\n\n return undefined;\n}\n\nexport function decodeMarkrRevertError(abi: MarkrRouterAbi, error: unknown): string | null {\n const revertData = extractHexDataFromError(error);\n\n if (!revertData) {\n return null;\n }\n\n try {\n const decoded = decodeErrorResult({ abi, data: revertData });\n const decodedArgs = decoded.args.length > 0 ? `(${decoded.args.map(String).join(', ')})` : '()';\n\n return `${decoded.errorName}${decodedArgs}`;\n } catch {\n const selector = revertData.slice(0, 10).toLowerCase();\n\n for (const abiItem of abi) {\n if (abiItem.type !== 'error') {\n continue;\n }\n\n const signature = `${abiItem.name}(${abiItem.inputs.map((input) => input.type).join(',')})`;\n if (toFunctionSelector(signature).toLowerCase() === selector) {\n return `${abiItem.name}()`;\n }\n }\n }\n\n return null;\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ const e={fast:2e3,medium:5e3,slow:3e4,verySlow:18e4},t={fast:6e4,medium:20*6e4,slow:120*6e4},n={apechain:50*6e4,arbitrum:17*6e4,astar:35e3,avalanche:1e3,base:18*6e4,berachain:7e3,bitlayer:6e4,blast:20*6e4,bnbchain:5e3,bob:120*6e4,bsquared:20*6e4,celo:1e3,core:6e4,corn:720*6e4,cronos:1e3,cronoszkevm:1860*6e4,ethereum:15*6e4,fraxtal:30*6e4,gnosis:3*6e4,hashkey:60*6e4,ink:120*6e4,kroma:25*6e4,linea:20*6e4,mantle:28*6e4,metis:120*6e4,mindnetwork:60*6e4,mode:37*6e4,monad:48e3,opmainnet:20*6e4,polygon:17*6e4,polygonzkevm:120*6e4,ronin:1e4,scroll:60*6e4,sei:1e3,shibarium:6e4,solana:1e3,sonic:7e3,soneium:27*6e4,treasure:420*6e4,unichain:24*6e4,wemix:1e3,worldchain:40*6e4,xlayer:60*6e4,zircuit:21*6e4,zksync:20*6e4},r={"eip155:1":`ethereum`,"eip155:10":`opmainnet`,"eip155:25":`cronos`,"eip155:56":`bnbchain`,"eip155:100":`gnosis`,"eip155:137":`polygon`,"eip155:324":`zksync`,"eip155:1101":`polygonzkevm`,"eip155:1116":`core`,"eip155:1329":`sei`,"eip155:196":`xlayer`,"eip155:252":`fraxtal`,"eip155:480":`worldchain`,"eip155:59144":`linea`,"eip155:8453":`base`,"eip155:1088":`metis`,"eip155:2020":`ronin`,"eip155:42220":`celo`,"eip155:43114":`avalanche`,"eip155:48900":`zircuit`,"eip155:5000":`mantle`,"eip155:534352":`scroll`,"eip155:42161":`arbitrum`,"eip155:81457":`blast`,"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp":`solana`},i=[{aliases:[`apechain`],chainKey:`apechain`},{aliases:[`arbitrum`],chainKey:`arbitrum`},{aliases:[`astar`],chainKey:`astar`},{aliases:[`avalanche`],chainKey:`avalanche`},{aliases:[`base`],chainKey:`base`},{aliases:[`berachain`],chainKey:`berachain`},{aliases:[`bitlayer`],chainKey:`bitlayer`},{aliases:[`blast`],chainKey:`blast`},{aliases:[`bnbchain`,`bnbsmartchain`,`binancesmartchain`,`binancechain`],chainKey:`bnbchain`},{aliases:[`bob`],chainKey:`bob`},{aliases:[`b2`,`bsquared`],chainKey:`bsquared`},{aliases:[`celo`],chainKey:`celo`},{aliases:[`core`],chainKey:`core`},{aliases:[`corn`],chainKey:`corn`},{aliases:[`cronoszkevm`],chainKey:`cronoszkevm`},{aliases:[`cronos`],chainKey:`cronos`},{aliases:[`ethereum`],chainKey:`ethereum`},{aliases:[`fraxtal`],chainKey:`fraxtal`},{aliases:[`gnosis`],chainKey:`gnosis`},{aliases:[`hashkey`],chainKey:`hashkey`},{aliases:[`ink`],chainKey:`ink`},{aliases:[`kroma`],chainKey:`kroma`},{aliases:[`linea`],chainKey:`linea`},{aliases:[`mantle`],chainKey:`mantle`},{aliases:[`metis`],chainKey:`metis`},{aliases:[`mindnetwork`],chainKey:`mindnetwork`},{aliases:[`mode`],chainKey:`mode`},{aliases:[`monad`],chainKey:`monad`},{aliases:[`opmainnet`,`optimism`],chainKey:`opmainnet`},{aliases:[`polygonzkevm`],chainKey:`polygonzkevm`},{aliases:[`polygon`],chainKey:`polygon`},{aliases:[`ronin`],chainKey:`ronin`},{aliases:[`scroll`],chainKey:`scroll`},{aliases:[`sei`],chainKey:`sei`},{aliases:[`solana`],chainKey:`solana`},{aliases:[`soneium`],chainKey:`soneium`},{aliases:[`sonic`],chainKey:`sonic`},{aliases:[`shibarium`],chainKey:`shibarium`},{aliases:[`treasure`],chainKey:`treasure`},{aliases:[`unichain`],chainKey:`unichain`},{aliases:[`wemix`],chainKey:`wemix`},{aliases:[`worldchain`],chainKey:`worldchain`},{aliases:[`xlayer`],chainKey:`xlayer`},{aliases:[`zircuit`],chainKey:`zircuit`},{aliases:[`zksync`],chainKey:`zksync`}],a={...Object.fromEntries(Object.entries(r).map(([e,t])=>[e,n[t]]))},o=[...i.map(({aliases:e,chainKey:t})=>({aliases:e,finalityMs:n[t]}))];exports.CROSS_CHAIN_POLLING_INTERVAL_MS=e,exports.DEFAULT_MARKR_API_URL=`https://proxy-api.avax.network/proxy/markr-helium`,exports.FINALITY_MS_BY_CHAIN_ID=a,exports.FINALITY_MS_BY_CHAIN_NAME_ALIAS=o,exports.FINALITY_TIER_MAX_FINALITY_MS=t,exports.SOLANA_POLLING_INTERVAL_MS=2500,exports.SOLANA_REQUIRED_CONFIRMATIONS=32,exports.SOLANA_TX_TIMEOUT_MS=12e4;
2
+ //# sourceMappingURL=constants.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.cjs","names":[],"sources":["../../../src/transfer-service/markr/constants.ts"],"sourcesContent":["import type { Caip2ChainId } from '../../types/caip';\n\nexport const DEFAULT_MARKR_API_URL = 'https://proxy-api.avax.network/proxy/markr-helium' as const;\n\n/**\n * Cross-chain polling tiers used by Markr transfer tracking.\n *\n * Tier boundaries are selected from known destination/source finality windows\n * so we poll fast-finality chains more aggressively and avoid excessive RPC\n * traffic on slow-finality chains.\n *\n * Finality reference:\n * https://docs.chain.link/ccip/ccip-execution-latency#finality-by-blockchain\n */\nexport const CROSS_CHAIN_POLLING_INTERVAL_MS = {\n fast: 2_000, // 2 seconds\n medium: 5_000, // 5 seconds\n slow: 30_000, // 30 seconds\n verySlow: 180_000, // 3 minutes\n} as const;\n\n/**\n * Upper bounds (in ms) used to map known finality time to a polling tier.\n *\n * Values greater than `slow` are classified as `verySlow`.\n */\nexport const FINALITY_TIER_MAX_FINALITY_MS: Readonly<Record<'fast' | 'medium' | 'slow', number>> = {\n fast: 60_000,\n medium: 20 * 60_000,\n slow: 2 * 60 * 60_000,\n};\n\nconst FINALITY_MS_BY_CHAIN_KEY = {\n apechain: 50 * 60_000,\n arbitrum: 17 * 60_000,\n astar: 35_000,\n avalanche: 1_000,\n base: 18 * 60_000,\n berachain: 7_000,\n bitlayer: 60_000,\n blast: 20 * 60_000,\n bnbchain: 5_000,\n bob: 2 * 60 * 60_000,\n bsquared: 20 * 60_000,\n celo: 1_000,\n core: 60_000,\n corn: 12 * 60 * 60_000,\n cronos: 1_000,\n cronoszkevm: 31 * 60 * 60_000,\n ethereum: 15 * 60_000,\n fraxtal: 30 * 60_000,\n gnosis: 3 * 60_000,\n hashkey: 60 * 60_000,\n ink: 2 * 60 * 60_000,\n kroma: 25 * 60_000,\n linea: 20 * 60_000,\n mantle: 28 * 60_000,\n metis: 2 * 60 * 60_000,\n mindnetwork: 60 * 60_000,\n mode: 37 * 60_000,\n monad: 48_000,\n opmainnet: 20 * 60_000,\n polygon: 17 * 60_000,\n polygonzkevm: 2 * 60 * 60_000,\n ronin: 10_000,\n scroll: 60 * 60_000,\n sei: 1_000,\n shibarium: 60_000,\n solana: 1_000,\n sonic: 7_000,\n soneium: 27 * 60_000,\n treasure: 7 * 60 * 60_000,\n unichain: 24 * 60_000,\n wemix: 1_000,\n worldchain: 40 * 60_000,\n xlayer: 60 * 60_000,\n zircuit: 21 * 60_000,\n zksync: 20 * 60_000,\n} as const;\n\ntype FinalityChainKey = keyof typeof FINALITY_MS_BY_CHAIN_KEY;\n\nconst FINALITY_CHAIN_KEY_BY_CHAIN_ID = {\n 'eip155:1': 'ethereum',\n 'eip155:10': 'opmainnet',\n 'eip155:25': 'cronos',\n 'eip155:56': 'bnbchain',\n 'eip155:100': 'gnosis',\n 'eip155:137': 'polygon',\n 'eip155:324': 'zksync',\n 'eip155:1101': 'polygonzkevm',\n 'eip155:1116': 'core',\n 'eip155:1329': 'sei',\n 'eip155:196': 'xlayer',\n 'eip155:252': 'fraxtal',\n 'eip155:480': 'worldchain',\n 'eip155:59144': 'linea',\n 'eip155:8453': 'base',\n 'eip155:1088': 'metis',\n 'eip155:2020': 'ronin',\n 'eip155:42220': 'celo',\n 'eip155:43114': 'avalanche',\n 'eip155:48900': 'zircuit',\n 'eip155:5000': 'mantle',\n 'eip155:534352': 'scroll',\n 'eip155:42161': 'arbitrum',\n 'eip155:81457': 'blast',\n 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp': 'solana',\n} as const satisfies Partial<Record<Caip2ChainId, FinalityChainKey>>;\n\nconst FINALITY_CHAIN_NAME_ALIASES = [\n { aliases: ['apechain'], chainKey: 'apechain' },\n { aliases: ['arbitrum'], chainKey: 'arbitrum' },\n { aliases: ['astar'], chainKey: 'astar' },\n { aliases: ['avalanche'], chainKey: 'avalanche' },\n { aliases: ['base'], chainKey: 'base' },\n { aliases: ['berachain'], chainKey: 'berachain' },\n { aliases: ['bitlayer'], chainKey: 'bitlayer' },\n { aliases: ['blast'], chainKey: 'blast' },\n { aliases: ['bnbchain', 'bnbsmartchain', 'binancesmartchain', 'binancechain'], chainKey: 'bnbchain' },\n { aliases: ['bob'], chainKey: 'bob' },\n { aliases: ['b2', 'bsquared'], chainKey: 'bsquared' },\n { aliases: ['celo'], chainKey: 'celo' },\n { aliases: ['core'], chainKey: 'core' },\n { aliases: ['corn'], chainKey: 'corn' },\n { aliases: ['cronoszkevm'], chainKey: 'cronoszkevm' },\n { aliases: ['cronos'], chainKey: 'cronos' },\n { aliases: ['ethereum'], chainKey: 'ethereum' },\n { aliases: ['fraxtal'], chainKey: 'fraxtal' },\n { aliases: ['gnosis'], chainKey: 'gnosis' },\n { aliases: ['hashkey'], chainKey: 'hashkey' },\n { aliases: ['ink'], chainKey: 'ink' },\n { aliases: ['kroma'], chainKey: 'kroma' },\n { aliases: ['linea'], chainKey: 'linea' },\n { aliases: ['mantle'], chainKey: 'mantle' },\n { aliases: ['metis'], chainKey: 'metis' },\n { aliases: ['mindnetwork'], chainKey: 'mindnetwork' },\n { aliases: ['mode'], chainKey: 'mode' },\n { aliases: ['monad'], chainKey: 'monad' },\n { aliases: ['opmainnet', 'optimism'], chainKey: 'opmainnet' },\n { aliases: ['polygonzkevm'], chainKey: 'polygonzkevm' },\n { aliases: ['polygon'], chainKey: 'polygon' },\n { aliases: ['ronin'], chainKey: 'ronin' },\n { aliases: ['scroll'], chainKey: 'scroll' },\n { aliases: ['sei'], chainKey: 'sei' },\n { aliases: ['solana'], chainKey: 'solana' },\n { aliases: ['soneium'], chainKey: 'soneium' },\n { aliases: ['sonic'], chainKey: 'sonic' },\n { aliases: ['shibarium'], chainKey: 'shibarium' },\n { aliases: ['treasure'], chainKey: 'treasure' },\n { aliases: ['unichain'], chainKey: 'unichain' },\n { aliases: ['wemix'], chainKey: 'wemix' },\n { aliases: ['worldchain'], chainKey: 'worldchain' },\n { aliases: ['xlayer'], chainKey: 'xlayer' },\n { aliases: ['zircuit'], chainKey: 'zircuit' },\n { aliases: ['zksync'], chainKey: 'zksync' },\n] as const satisfies ReadonlyArray<{ aliases: readonly string[]; chainKey: FinalityChainKey }>;\n\n/**\n * Known CAIP-2 chain IDs and their approximate CCIP finality times in\n * milliseconds.\n *\n * Finality reference:\n * https://docs.chain.link/ccip/ccip-execution-latency#finality-by-blockchain\n */\nexport const FINALITY_MS_BY_CHAIN_ID: Partial<Record<Caip2ChainId, number>> = {\n ...Object.fromEntries(\n Object.entries(FINALITY_CHAIN_KEY_BY_CHAIN_ID).map(([chainId, chainKey]) => [\n chainId,\n FINALITY_MS_BY_CHAIN_KEY[chainKey],\n ]),\n ),\n};\n\n/**\n * Chain-name aliases and their approximate CCIP finality times in\n * milliseconds.\n *\n * These aliases are used as a fallback when a chain ID is not present in\n * `FINALITY_MS_BY_CHAIN_ID`.\n *\n * Finality reference:\n * https://docs.chain.link/ccip/ccip-execution-latency#finality-by-blockchain\n */\nexport const FINALITY_MS_BY_CHAIN_NAME_ALIAS: ReadonlyArray<{ aliases: readonly string[]; finalityMs: number }> = [\n ...FINALITY_CHAIN_NAME_ALIASES.map(({ aliases, chainKey }) => ({\n aliases,\n finalityMs: FINALITY_MS_BY_CHAIN_KEY[chainKey],\n })),\n];\n\n// Solana slot time is ~400ms. Polling every 2.5s (~6 slots) balances\n// responsiveness against RPC rate-limits — fast enough to detect finalization\n// promptly, without hammering the endpoint.\nexport const SOLANA_POLLING_INTERVAL_MS = 2_500;\n\n// A Solana blockhash is valid for 150 slots (~60s at 400ms/slot). Validators\n// may hold a transaction for up to ~90s before dropping it. We set a 120s\n// timeout to provide a comfortable buffer above worst-case blockhash expiry,\n// ensuring we don't falsely time out a transaction that is still eligible for\n// inclusion in a block.\nexport const SOLANA_TX_TIMEOUT_MS = 120_000;\n\n// Solana finalizes a block once ≥31 confirmed blocks are built on top of it.\n// `getSignatureStatuses` returns the running `confirmations` count (0 → N),\n// then `null` once the status flips to `finalized`. We use 32 as the\n// required-confirmation target so the progress bar fills smoothly from 0 → 31\n// during polling and snaps to 32 (= done) only when finalization is confirmed.\nexport const SOLANA_REQUIRED_CONFIRMATIONS = 32;\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ const e=`https://proxy-api.avax.network/proxy/markr-helium`,t={fast:2e3,medium:5e3,slow:3e4,verySlow:18e4},n={fast:6e4,medium:20*6e4,slow:120*6e4},r={apechain:50*6e4,arbitrum:17*6e4,astar:35e3,avalanche:1e3,base:18*6e4,berachain:7e3,bitlayer:6e4,blast:20*6e4,bnbchain:5e3,bob:120*6e4,bsquared:20*6e4,celo:1e3,core:6e4,corn:720*6e4,cronos:1e3,cronoszkevm:1860*6e4,ethereum:15*6e4,fraxtal:30*6e4,gnosis:3*6e4,hashkey:60*6e4,ink:120*6e4,kroma:25*6e4,linea:20*6e4,mantle:28*6e4,metis:120*6e4,mindnetwork:60*6e4,mode:37*6e4,monad:48e3,opmainnet:20*6e4,polygon:17*6e4,polygonzkevm:120*6e4,ronin:1e4,scroll:60*6e4,sei:1e3,shibarium:6e4,solana:1e3,sonic:7e3,soneium:27*6e4,treasure:420*6e4,unichain:24*6e4,wemix:1e3,worldchain:40*6e4,xlayer:60*6e4,zircuit:21*6e4,zksync:20*6e4},i={"eip155:1":`ethereum`,"eip155:10":`opmainnet`,"eip155:25":`cronos`,"eip155:56":`bnbchain`,"eip155:100":`gnosis`,"eip155:137":`polygon`,"eip155:324":`zksync`,"eip155:1101":`polygonzkevm`,"eip155:1116":`core`,"eip155:1329":`sei`,"eip155:196":`xlayer`,"eip155:252":`fraxtal`,"eip155:480":`worldchain`,"eip155:59144":`linea`,"eip155:8453":`base`,"eip155:1088":`metis`,"eip155:2020":`ronin`,"eip155:42220":`celo`,"eip155:43114":`avalanche`,"eip155:48900":`zircuit`,"eip155:5000":`mantle`,"eip155:534352":`scroll`,"eip155:42161":`arbitrum`,"eip155:81457":`blast`,"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp":`solana`},a=[{aliases:[`apechain`],chainKey:`apechain`},{aliases:[`arbitrum`],chainKey:`arbitrum`},{aliases:[`astar`],chainKey:`astar`},{aliases:[`avalanche`],chainKey:`avalanche`},{aliases:[`base`],chainKey:`base`},{aliases:[`berachain`],chainKey:`berachain`},{aliases:[`bitlayer`],chainKey:`bitlayer`},{aliases:[`blast`],chainKey:`blast`},{aliases:[`bnbchain`,`bnbsmartchain`,`binancesmartchain`,`binancechain`],chainKey:`bnbchain`},{aliases:[`bob`],chainKey:`bob`},{aliases:[`b2`,`bsquared`],chainKey:`bsquared`},{aliases:[`celo`],chainKey:`celo`},{aliases:[`core`],chainKey:`core`},{aliases:[`corn`],chainKey:`corn`},{aliases:[`cronoszkevm`],chainKey:`cronoszkevm`},{aliases:[`cronos`],chainKey:`cronos`},{aliases:[`ethereum`],chainKey:`ethereum`},{aliases:[`fraxtal`],chainKey:`fraxtal`},{aliases:[`gnosis`],chainKey:`gnosis`},{aliases:[`hashkey`],chainKey:`hashkey`},{aliases:[`ink`],chainKey:`ink`},{aliases:[`kroma`],chainKey:`kroma`},{aliases:[`linea`],chainKey:`linea`},{aliases:[`mantle`],chainKey:`mantle`},{aliases:[`metis`],chainKey:`metis`},{aliases:[`mindnetwork`],chainKey:`mindnetwork`},{aliases:[`mode`],chainKey:`mode`},{aliases:[`monad`],chainKey:`monad`},{aliases:[`opmainnet`,`optimism`],chainKey:`opmainnet`},{aliases:[`polygonzkevm`],chainKey:`polygonzkevm`},{aliases:[`polygon`],chainKey:`polygon`},{aliases:[`ronin`],chainKey:`ronin`},{aliases:[`scroll`],chainKey:`scroll`},{aliases:[`sei`],chainKey:`sei`},{aliases:[`solana`],chainKey:`solana`},{aliases:[`soneium`],chainKey:`soneium`},{aliases:[`sonic`],chainKey:`sonic`},{aliases:[`shibarium`],chainKey:`shibarium`},{aliases:[`treasure`],chainKey:`treasure`},{aliases:[`unichain`],chainKey:`unichain`},{aliases:[`wemix`],chainKey:`wemix`},{aliases:[`worldchain`],chainKey:`worldchain`},{aliases:[`xlayer`],chainKey:`xlayer`},{aliases:[`zircuit`],chainKey:`zircuit`},{aliases:[`zksync`],chainKey:`zksync`}],o={...Object.fromEntries(Object.entries(i).map(([e,t])=>[e,r[t]]))},s=[...a.map(({aliases:e,chainKey:t})=>({aliases:e,finalityMs:r[t]}))],c=2500,l=12e4,u=32;export{t as CROSS_CHAIN_POLLING_INTERVAL_MS,e as DEFAULT_MARKR_API_URL,o as FINALITY_MS_BY_CHAIN_ID,s as FINALITY_MS_BY_CHAIN_NAME_ALIAS,n as FINALITY_TIER_MAX_FINALITY_MS,c as SOLANA_POLLING_INTERVAL_MS,u as SOLANA_REQUIRED_CONFIRMATIONS,l as SOLANA_TX_TIMEOUT_MS};
2
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","names":[],"sources":["../../../src/transfer-service/markr/constants.ts"],"sourcesContent":["import type { Caip2ChainId } from '../../types/caip';\n\nexport const DEFAULT_MARKR_API_URL = 'https://proxy-api.avax.network/proxy/markr-helium' as const;\n\n/**\n * Cross-chain polling tiers used by Markr transfer tracking.\n *\n * Tier boundaries are selected from known destination/source finality windows\n * so we poll fast-finality chains more aggressively and avoid excessive RPC\n * traffic on slow-finality chains.\n *\n * Finality reference:\n * https://docs.chain.link/ccip/ccip-execution-latency#finality-by-blockchain\n */\nexport const CROSS_CHAIN_POLLING_INTERVAL_MS = {\n fast: 2_000, // 2 seconds\n medium: 5_000, // 5 seconds\n slow: 30_000, // 30 seconds\n verySlow: 180_000, // 3 minutes\n} as const;\n\n/**\n * Upper bounds (in ms) used to map known finality time to a polling tier.\n *\n * Values greater than `slow` are classified as `verySlow`.\n */\nexport const FINALITY_TIER_MAX_FINALITY_MS: Readonly<Record<'fast' | 'medium' | 'slow', number>> = {\n fast: 60_000,\n medium: 20 * 60_000,\n slow: 2 * 60 * 60_000,\n};\n\nconst FINALITY_MS_BY_CHAIN_KEY = {\n apechain: 50 * 60_000,\n arbitrum: 17 * 60_000,\n astar: 35_000,\n avalanche: 1_000,\n base: 18 * 60_000,\n berachain: 7_000,\n bitlayer: 60_000,\n blast: 20 * 60_000,\n bnbchain: 5_000,\n bob: 2 * 60 * 60_000,\n bsquared: 20 * 60_000,\n celo: 1_000,\n core: 60_000,\n corn: 12 * 60 * 60_000,\n cronos: 1_000,\n cronoszkevm: 31 * 60 * 60_000,\n ethereum: 15 * 60_000,\n fraxtal: 30 * 60_000,\n gnosis: 3 * 60_000,\n hashkey: 60 * 60_000,\n ink: 2 * 60 * 60_000,\n kroma: 25 * 60_000,\n linea: 20 * 60_000,\n mantle: 28 * 60_000,\n metis: 2 * 60 * 60_000,\n mindnetwork: 60 * 60_000,\n mode: 37 * 60_000,\n monad: 48_000,\n opmainnet: 20 * 60_000,\n polygon: 17 * 60_000,\n polygonzkevm: 2 * 60 * 60_000,\n ronin: 10_000,\n scroll: 60 * 60_000,\n sei: 1_000,\n shibarium: 60_000,\n solana: 1_000,\n sonic: 7_000,\n soneium: 27 * 60_000,\n treasure: 7 * 60 * 60_000,\n unichain: 24 * 60_000,\n wemix: 1_000,\n worldchain: 40 * 60_000,\n xlayer: 60 * 60_000,\n zircuit: 21 * 60_000,\n zksync: 20 * 60_000,\n} as const;\n\ntype FinalityChainKey = keyof typeof FINALITY_MS_BY_CHAIN_KEY;\n\nconst FINALITY_CHAIN_KEY_BY_CHAIN_ID = {\n 'eip155:1': 'ethereum',\n 'eip155:10': 'opmainnet',\n 'eip155:25': 'cronos',\n 'eip155:56': 'bnbchain',\n 'eip155:100': 'gnosis',\n 'eip155:137': 'polygon',\n 'eip155:324': 'zksync',\n 'eip155:1101': 'polygonzkevm',\n 'eip155:1116': 'core',\n 'eip155:1329': 'sei',\n 'eip155:196': 'xlayer',\n 'eip155:252': 'fraxtal',\n 'eip155:480': 'worldchain',\n 'eip155:59144': 'linea',\n 'eip155:8453': 'base',\n 'eip155:1088': 'metis',\n 'eip155:2020': 'ronin',\n 'eip155:42220': 'celo',\n 'eip155:43114': 'avalanche',\n 'eip155:48900': 'zircuit',\n 'eip155:5000': 'mantle',\n 'eip155:534352': 'scroll',\n 'eip155:42161': 'arbitrum',\n 'eip155:81457': 'blast',\n 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp': 'solana',\n} as const satisfies Partial<Record<Caip2ChainId, FinalityChainKey>>;\n\nconst FINALITY_CHAIN_NAME_ALIASES = [\n { aliases: ['apechain'], chainKey: 'apechain' },\n { aliases: ['arbitrum'], chainKey: 'arbitrum' },\n { aliases: ['astar'], chainKey: 'astar' },\n { aliases: ['avalanche'], chainKey: 'avalanche' },\n { aliases: ['base'], chainKey: 'base' },\n { aliases: ['berachain'], chainKey: 'berachain' },\n { aliases: ['bitlayer'], chainKey: 'bitlayer' },\n { aliases: ['blast'], chainKey: 'blast' },\n { aliases: ['bnbchain', 'bnbsmartchain', 'binancesmartchain', 'binancechain'], chainKey: 'bnbchain' },\n { aliases: ['bob'], chainKey: 'bob' },\n { aliases: ['b2', 'bsquared'], chainKey: 'bsquared' },\n { aliases: ['celo'], chainKey: 'celo' },\n { aliases: ['core'], chainKey: 'core' },\n { aliases: ['corn'], chainKey: 'corn' },\n { aliases: ['cronoszkevm'], chainKey: 'cronoszkevm' },\n { aliases: ['cronos'], chainKey: 'cronos' },\n { aliases: ['ethereum'], chainKey: 'ethereum' },\n { aliases: ['fraxtal'], chainKey: 'fraxtal' },\n { aliases: ['gnosis'], chainKey: 'gnosis' },\n { aliases: ['hashkey'], chainKey: 'hashkey' },\n { aliases: ['ink'], chainKey: 'ink' },\n { aliases: ['kroma'], chainKey: 'kroma' },\n { aliases: ['linea'], chainKey: 'linea' },\n { aliases: ['mantle'], chainKey: 'mantle' },\n { aliases: ['metis'], chainKey: 'metis' },\n { aliases: ['mindnetwork'], chainKey: 'mindnetwork' },\n { aliases: ['mode'], chainKey: 'mode' },\n { aliases: ['monad'], chainKey: 'monad' },\n { aliases: ['opmainnet', 'optimism'], chainKey: 'opmainnet' },\n { aliases: ['polygonzkevm'], chainKey: 'polygonzkevm' },\n { aliases: ['polygon'], chainKey: 'polygon' },\n { aliases: ['ronin'], chainKey: 'ronin' },\n { aliases: ['scroll'], chainKey: 'scroll' },\n { aliases: ['sei'], chainKey: 'sei' },\n { aliases: ['solana'], chainKey: 'solana' },\n { aliases: ['soneium'], chainKey: 'soneium' },\n { aliases: ['sonic'], chainKey: 'sonic' },\n { aliases: ['shibarium'], chainKey: 'shibarium' },\n { aliases: ['treasure'], chainKey: 'treasure' },\n { aliases: ['unichain'], chainKey: 'unichain' },\n { aliases: ['wemix'], chainKey: 'wemix' },\n { aliases: ['worldchain'], chainKey: 'worldchain' },\n { aliases: ['xlayer'], chainKey: 'xlayer' },\n { aliases: ['zircuit'], chainKey: 'zircuit' },\n { aliases: ['zksync'], chainKey: 'zksync' },\n] as const satisfies ReadonlyArray<{ aliases: readonly string[]; chainKey: FinalityChainKey }>;\n\n/**\n * Known CAIP-2 chain IDs and their approximate CCIP finality times in\n * milliseconds.\n *\n * Finality reference:\n * https://docs.chain.link/ccip/ccip-execution-latency#finality-by-blockchain\n */\nexport const FINALITY_MS_BY_CHAIN_ID: Partial<Record<Caip2ChainId, number>> = {\n ...Object.fromEntries(\n Object.entries(FINALITY_CHAIN_KEY_BY_CHAIN_ID).map(([chainId, chainKey]) => [\n chainId,\n FINALITY_MS_BY_CHAIN_KEY[chainKey],\n ]),\n ),\n};\n\n/**\n * Chain-name aliases and their approximate CCIP finality times in\n * milliseconds.\n *\n * These aliases are used as a fallback when a chain ID is not present in\n * `FINALITY_MS_BY_CHAIN_ID`.\n *\n * Finality reference:\n * https://docs.chain.link/ccip/ccip-execution-latency#finality-by-blockchain\n */\nexport const FINALITY_MS_BY_CHAIN_NAME_ALIAS: ReadonlyArray<{ aliases: readonly string[]; finalityMs: number }> = [\n ...FINALITY_CHAIN_NAME_ALIASES.map(({ aliases, chainKey }) => ({\n aliases,\n finalityMs: FINALITY_MS_BY_CHAIN_KEY[chainKey],\n })),\n];\n\n// Solana slot time is ~400ms. Polling every 2.5s (~6 slots) balances\n// responsiveness against RPC rate-limits — fast enough to detect finalization\n// promptly, without hammering the endpoint.\nexport const SOLANA_POLLING_INTERVAL_MS = 2_500;\n\n// A Solana blockhash is valid for 150 slots (~60s at 400ms/slot). Validators\n// may hold a transaction for up to ~90s before dropping it. We set a 120s\n// timeout to provide a comfortable buffer above worst-case blockhash expiry,\n// ensuring we don't falsely time out a transaction that is still eligible for\n// inclusion in a block.\nexport const SOLANA_TX_TIMEOUT_MS = 120_000;\n\n// Solana finalizes a block once ≥31 confirmed blocks are built on top of it.\n// `getSignatureStatuses` returns the running `confirmations` count (0 → N),\n// then `null` once the status flips to `finalized`. We use 32 as the\n// required-confirmation target so the progress bar fills smoothly from 0 → 31\n// during polling and snaps to 32 (= done) only when finalization is confirmed.\nexport const SOLANA_REQUIRED_CONFIRMATIONS = 32;\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ const e=require(`../../constants.cjs`),t=require(`./_utils.cjs`),n=require(`./_handlers/analyze-support.cjs`),r=require(`./_handlers/estimate-native-fee.cjs`),i=require(`./_handlers/get-assets.cjs`),a=require(`./_handlers/get-bridgeable-assets.cjs`),o=require(`./_handlers/get-minimum-transfer-amount.cjs`),s=require(`./_handlers/stream-quotes.cjs`),c=require(`./constants.cjs`),l=require(`./_handlers/track-transfer.cjs`),u=require(`./_handlers/transfer-asset.cjs`);async function d({apiBaseUrl:d,apiToken:f,appId:p,disableCrossChainSwaps:m,environment:h,evmSigner:g,fetch:_,getTargetChainAssets:v,solanaSigner:y}){let b={apiBaseUrl:new URL(d??c.DEFAULT_MARKR_API_URL),apiToken:f,fetch:_},[x,S]=await Promise.all([t.getPartnerFeeBps(b),t.getSupportedChains(b,m)]),C=await t.getSupportedTokens(b,S),w=n.analyzeSupportFactory({hasSolanaSigner:!!y,supportedChains:S});return{analyzeSupport:w,estimateNativeFee:r.estimateNativeFeeFactory({apiOptions:b,appId:p}),getAssets:i.getAssetsFactory({supportedChains:S,supportedTokens:C}),getBridgeableAssets:a.getBridgeableAssetsFactory({getTargetChainAssets:v,supportedChains:S}),getMinimumTransferAmount:o.getMinimumTransferAmountFactory({analyzeSupport:w,partnerFeeBps:x}),getSupportedChains:async()=>{let e=new Map;for(let[t,{crossChainTargetChainIds:n,swapEnabled:r}]of S.entries()){if(!r&&n.size===0)continue;let i=new Set;r&&i.add(t);for(let e of n)e!==t&&S.has(e)&&i.add(e);i.size>0&&e.set(t,i)}return e},streamQuotes:s.streamQuotesFactory({apiOptions:b,appId:p,partnerFeeBps:x}),trackTransfer:l.trackTransferFactory({apiOptions:b}),transferAsset:u.transferAssetFactory({apiOptions:b,appId:p,environment:h,evmSigner:g,solanaSigner:y}),type:e.ServiceType.MARKR}}exports.createMarkrService=d;
2
+ //# sourceMappingURL=markr-service.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markr-service.cjs","names":["DEFAULT_MARKR_API_URL","getPartnerFeeBps","getSupportedChains","getSupportedTokens","analyzeSupportFactory","estimateNativeFeeFactory","getAssetsFactory","getBridgeableAssetsFactory","getMinimumTransferAmountFactory","streamQuotesFactory","trackTransferFactory","transferAssetFactory","ServiceType"],"sources":["../../../src/transfer-service/markr/markr-service.ts"],"sourcesContent":["import { ServiceType } from '../../constants';\nimport type { Environment } from '../../constants';\nimport type { Asset } from '../../types/asset';\nimport type { EvmSigner, SolanaSigner } from '../../types/signer';\nimport type { MutableGetSupportedChainsResult, TransferService } from '../../types/service';\nimport { analyzeSupportFactory } from './_handlers/analyze-support';\nimport { estimateNativeFeeFactory } from './_handlers/estimate-native-fee';\nimport { getAssetsFactory } from './_handlers/get-assets';\nimport { getBridgeableAssetsFactory } from './_handlers/get-bridgeable-assets';\nimport { getMinimumTransferAmountFactory } from './_handlers/get-minimum-transfer-amount';\nimport { streamQuotesFactory } from './_handlers/stream-quotes';\nimport { trackTransferFactory } from './_handlers/track-transfer';\nimport { transferAssetFactory } from './_handlers/transfer-asset';\nimport { getPartnerFeeBps, getSupportedChains, getSupportedTokens } from './_utils';\nimport { DEFAULT_MARKR_API_URL } from './constants';\nimport type { ApiOptions } from './_api';\nimport type { Caip2ChainId } from '../../types/caip';\nimport type { Fetch } from '../../types/utility-types';\n\nexport interface MarkrServiceOptions {\n apiBaseUrl?: string;\n apiToken?: string;\n appId: string;\n disableCrossChainSwaps?: boolean;\n environment: Environment;\n evmSigner: EvmSigner;\n fetch?: Fetch;\n getTargetChainAssets: (targetChainId: Caip2ChainId) => Promise<readonly Asset[]>;\n solanaSigner?: SolanaSigner;\n}\n\nexport async function createMarkrService({\n apiBaseUrl: apiBaseUrlString,\n apiToken,\n appId,\n disableCrossChainSwaps,\n environment,\n evmSigner,\n fetch: customFetch,\n getTargetChainAssets,\n solanaSigner,\n}: MarkrServiceOptions): Promise<TransferService> {\n const apiBaseUrl = new URL(apiBaseUrlString ?? DEFAULT_MARKR_API_URL);\n\n const apiOptions: ApiOptions = {\n apiBaseUrl,\n apiToken,\n fetch: customFetch,\n };\n\n // Parallelize fetching.\n const [partnerFeeBps, supportedChains] = await Promise.all([\n getPartnerFeeBps(apiOptions),\n getSupportedChains(apiOptions, disableCrossChainSwaps),\n ]);\n\n const supportedTokens = await getSupportedTokens(apiOptions, supportedChains);\n\n const hasSolanaSigner = Boolean(solanaSigner);\n const analyzeSupport = analyzeSupportFactory({ hasSolanaSigner, supportedChains });\n\n return {\n analyzeSupport,\n estimateNativeFee: estimateNativeFeeFactory({ apiOptions, appId }),\n getAssets: getAssetsFactory({ supportedChains, supportedTokens }),\n getBridgeableAssets: getBridgeableAssetsFactory({ getTargetChainAssets, supportedChains }),\n getMinimumTransferAmount: getMinimumTransferAmountFactory({\n analyzeSupport,\n partnerFeeBps,\n }),\n getSupportedChains: async () => {\n const supportedChainsMap: MutableGetSupportedChainsResult = new Map();\n\n for (const [sourceChainId, { crossChainTargetChainIds, swapEnabled }] of supportedChains.entries()) {\n if (!swapEnabled && crossChainTargetChainIds.size === 0) {\n // If neither swap nor cross-chain swap is enabled, skip this chain as a source.\n continue;\n }\n\n const supportedTargetChainIds = new Set<Caip2ChainId>();\n\n // Add self as supported target if same-chain swap is enabled.\n if (swapEnabled) {\n supportedTargetChainIds.add(sourceChainId);\n }\n\n for (const chainId of crossChainTargetChainIds) {\n if (chainId !== sourceChainId && supportedChains.has(chainId)) {\n supportedTargetChainIds.add(chainId);\n }\n }\n\n if (supportedTargetChainIds.size > 0) {\n supportedChainsMap.set(sourceChainId, supportedTargetChainIds);\n }\n }\n\n return supportedChainsMap;\n },\n streamQuotes: streamQuotesFactory({ apiOptions, appId, partnerFeeBps }),\n trackTransfer: trackTransferFactory({ apiOptions }),\n transferAsset: transferAssetFactory({\n apiOptions,\n appId,\n environment,\n evmSigner,\n solanaSigner,\n }),\n type: ServiceType.MARKR,\n } satisfies TransferService;\n}\n"],"mappings":"mdA+BA,eAAsB,EAAmB,CACvC,WAAY,EACZ,WACA,QACA,yBACA,cACA,YACA,MAAO,EACP,uBACA,gBACgD,CAGhD,IAAM,EAAyB,CAC7B,WAHiB,IAAI,IAAI,GAAoBA,EAAAA,sBAAsB,CAInE,WACA,MAAO,EACR,CAGK,CAAC,EAAe,GAAmB,MAAM,QAAQ,IAAI,CACzDC,EAAAA,iBAAiB,EAAW,CAC5BC,EAAAA,mBAAmB,EAAY,EAAuB,CACvD,CAAC,CAEI,EAAkB,MAAMC,EAAAA,mBAAmB,EAAY,EAAgB,CAGvE,EAAiBC,EAAAA,sBAAsB,CAAE,gBADvB,EAAQ,EACgC,kBAAiB,CAAC,CAElF,MAAO,CACL,iBACA,kBAAmBC,EAAAA,yBAAyB,CAAE,aAAY,QAAO,CAAC,CAClE,UAAWC,EAAAA,iBAAiB,CAAE,kBAAiB,kBAAiB,CAAC,CACjE,oBAAqBC,EAAAA,2BAA2B,CAAE,uBAAsB,kBAAiB,CAAC,CAC1F,yBAA0BC,EAAAA,gCAAgC,CACxD,iBACA,gBACD,CAAC,CACF,mBAAoB,SAAY,CAC9B,IAAM,EAAsD,IAAI,IAEhE,IAAK,GAAM,CAAC,EAAe,CAAE,2BAA0B,kBAAkB,EAAgB,SAAS,CAAE,CAClG,GAAI,CAAC,GAAe,EAAyB,OAAS,EAEpD,SAGF,IAAM,EAA0B,IAAI,IAGhC,GACF,EAAwB,IAAI,EAAc,CAG5C,IAAK,IAAM,KAAW,EAChB,IAAY,GAAiB,EAAgB,IAAI,EAAQ,EAC3D,EAAwB,IAAI,EAAQ,CAIpC,EAAwB,KAAO,GACjC,EAAmB,IAAI,EAAe,EAAwB,CAIlE,OAAO,GAET,aAAcC,EAAAA,oBAAoB,CAAE,aAAY,QAAO,gBAAe,CAAC,CACvE,cAAeC,EAAAA,qBAAqB,CAAE,aAAY,CAAC,CACnD,cAAeC,EAAAA,qBAAqB,CAClC,aACA,QACA,cACA,YACA,eACD,CAAC,CACF,KAAMC,EAAAA,YAAY,MACnB"}
@@ -0,0 +1,2 @@
1
+ import{ServiceType as e}from"../../constants.js";import{getPartnerFeeBps as t,getSupportedChains as n,getSupportedTokens as r}from"./_utils.js";import{analyzeSupportFactory as i}from"./_handlers/analyze-support.js";import{estimateNativeFeeFactory as a}from"./_handlers/estimate-native-fee.js";import{getAssetsFactory as o}from"./_handlers/get-assets.js";import{getBridgeableAssetsFactory as s}from"./_handlers/get-bridgeable-assets.js";import{getMinimumTransferAmountFactory as c}from"./_handlers/get-minimum-transfer-amount.js";import{streamQuotesFactory as l}from"./_handlers/stream-quotes.js";import{DEFAULT_MARKR_API_URL as u}from"./constants.js";import{trackTransferFactory as d}from"./_handlers/track-transfer.js";import{transferAssetFactory as f}from"./_handlers/transfer-asset.js";async function p({apiBaseUrl:p,apiToken:m,appId:h,disableCrossChainSwaps:g,environment:_,evmSigner:v,fetch:y,getTargetChainAssets:b,solanaSigner:x}){let S={apiBaseUrl:new URL(p??u),apiToken:m,fetch:y},[C,w]=await Promise.all([t(S),n(S,g)]),T=await r(S,w),E=i({hasSolanaSigner:!!x,supportedChains:w});return{analyzeSupport:E,estimateNativeFee:a({apiOptions:S,appId:h}),getAssets:o({supportedChains:w,supportedTokens:T}),getBridgeableAssets:s({getTargetChainAssets:b,supportedChains:w}),getMinimumTransferAmount:c({analyzeSupport:E,partnerFeeBps:C}),getSupportedChains:async()=>{let e=new Map;for(let[t,{crossChainTargetChainIds:n,swapEnabled:r}]of w.entries()){if(!r&&n.size===0)continue;let i=new Set;r&&i.add(t);for(let e of n)e!==t&&w.has(e)&&i.add(e);i.size>0&&e.set(t,i)}return e},streamQuotes:l({apiOptions:S,appId:h,partnerFeeBps:C}),trackTransfer:d({apiOptions:S}),transferAsset:f({apiOptions:S,appId:h,environment:_,evmSigner:v,solanaSigner:x}),type:e.MARKR}}export{p as createMarkrService};
2
+ //# sourceMappingURL=markr-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markr-service.js","names":[],"sources":["../../../src/transfer-service/markr/markr-service.ts"],"sourcesContent":["import { ServiceType } from '../../constants';\nimport type { Environment } from '../../constants';\nimport type { Asset } from '../../types/asset';\nimport type { EvmSigner, SolanaSigner } from '../../types/signer';\nimport type { MutableGetSupportedChainsResult, TransferService } from '../../types/service';\nimport { analyzeSupportFactory } from './_handlers/analyze-support';\nimport { estimateNativeFeeFactory } from './_handlers/estimate-native-fee';\nimport { getAssetsFactory } from './_handlers/get-assets';\nimport { getBridgeableAssetsFactory } from './_handlers/get-bridgeable-assets';\nimport { getMinimumTransferAmountFactory } from './_handlers/get-minimum-transfer-amount';\nimport { streamQuotesFactory } from './_handlers/stream-quotes';\nimport { trackTransferFactory } from './_handlers/track-transfer';\nimport { transferAssetFactory } from './_handlers/transfer-asset';\nimport { getPartnerFeeBps, getSupportedChains, getSupportedTokens } from './_utils';\nimport { DEFAULT_MARKR_API_URL } from './constants';\nimport type { ApiOptions } from './_api';\nimport type { Caip2ChainId } from '../../types/caip';\nimport type { Fetch } from '../../types/utility-types';\n\nexport interface MarkrServiceOptions {\n apiBaseUrl?: string;\n apiToken?: string;\n appId: string;\n disableCrossChainSwaps?: boolean;\n environment: Environment;\n evmSigner: EvmSigner;\n fetch?: Fetch;\n getTargetChainAssets: (targetChainId: Caip2ChainId) => Promise<readonly Asset[]>;\n solanaSigner?: SolanaSigner;\n}\n\nexport async function createMarkrService({\n apiBaseUrl: apiBaseUrlString,\n apiToken,\n appId,\n disableCrossChainSwaps,\n environment,\n evmSigner,\n fetch: customFetch,\n getTargetChainAssets,\n solanaSigner,\n}: MarkrServiceOptions): Promise<TransferService> {\n const apiBaseUrl = new URL(apiBaseUrlString ?? DEFAULT_MARKR_API_URL);\n\n const apiOptions: ApiOptions = {\n apiBaseUrl,\n apiToken,\n fetch: customFetch,\n };\n\n // Parallelize fetching.\n const [partnerFeeBps, supportedChains] = await Promise.all([\n getPartnerFeeBps(apiOptions),\n getSupportedChains(apiOptions, disableCrossChainSwaps),\n ]);\n\n const supportedTokens = await getSupportedTokens(apiOptions, supportedChains);\n\n const hasSolanaSigner = Boolean(solanaSigner);\n const analyzeSupport = analyzeSupportFactory({ hasSolanaSigner, supportedChains });\n\n return {\n analyzeSupport,\n estimateNativeFee: estimateNativeFeeFactory({ apiOptions, appId }),\n getAssets: getAssetsFactory({ supportedChains, supportedTokens }),\n getBridgeableAssets: getBridgeableAssetsFactory({ getTargetChainAssets, supportedChains }),\n getMinimumTransferAmount: getMinimumTransferAmountFactory({\n analyzeSupport,\n partnerFeeBps,\n }),\n getSupportedChains: async () => {\n const supportedChainsMap: MutableGetSupportedChainsResult = new Map();\n\n for (const [sourceChainId, { crossChainTargetChainIds, swapEnabled }] of supportedChains.entries()) {\n if (!swapEnabled && crossChainTargetChainIds.size === 0) {\n // If neither swap nor cross-chain swap is enabled, skip this chain as a source.\n continue;\n }\n\n const supportedTargetChainIds = new Set<Caip2ChainId>();\n\n // Add self as supported target if same-chain swap is enabled.\n if (swapEnabled) {\n supportedTargetChainIds.add(sourceChainId);\n }\n\n for (const chainId of crossChainTargetChainIds) {\n if (chainId !== sourceChainId && supportedChains.has(chainId)) {\n supportedTargetChainIds.add(chainId);\n }\n }\n\n if (supportedTargetChainIds.size > 0) {\n supportedChainsMap.set(sourceChainId, supportedTargetChainIds);\n }\n }\n\n return supportedChainsMap;\n },\n streamQuotes: streamQuotesFactory({ apiOptions, appId, partnerFeeBps }),\n trackTransfer: trackTransferFactory({ apiOptions }),\n transferAsset: transferAssetFactory({\n apiOptions,\n appId,\n environment,\n evmSigner,\n solanaSigner,\n }),\n type: ServiceType.MARKR,\n } satisfies TransferService;\n}\n"],"mappings":"qxBA+BA,eAAsB,EAAmB,CACvC,WAAY,EACZ,WACA,QACA,yBACA,cACA,YACA,MAAO,EACP,uBACA,gBACgD,CAGhD,IAAM,EAAyB,CAC7B,WAHiB,IAAI,IAAI,GAAoB,EAAsB,CAInE,WACA,MAAO,EACR,CAGK,CAAC,EAAe,GAAmB,MAAM,QAAQ,IAAI,CACzD,EAAiB,EAAW,CAC5B,EAAmB,EAAY,EAAuB,CACvD,CAAC,CAEI,EAAkB,MAAM,EAAmB,EAAY,EAAgB,CAGvE,EAAiB,EAAsB,CAAE,gBADvB,EAAQ,EACgC,kBAAiB,CAAC,CAElF,MAAO,CACL,iBACA,kBAAmB,EAAyB,CAAE,aAAY,QAAO,CAAC,CAClE,UAAW,EAAiB,CAAE,kBAAiB,kBAAiB,CAAC,CACjE,oBAAqB,EAA2B,CAAE,uBAAsB,kBAAiB,CAAC,CAC1F,yBAA0B,EAAgC,CACxD,iBACA,gBACD,CAAC,CACF,mBAAoB,SAAY,CAC9B,IAAM,EAAsD,IAAI,IAEhE,IAAK,GAAM,CAAC,EAAe,CAAE,2BAA0B,kBAAkB,EAAgB,SAAS,CAAE,CAClG,GAAI,CAAC,GAAe,EAAyB,OAAS,EAEpD,SAGF,IAAM,EAA0B,IAAI,IAGhC,GACF,EAAwB,IAAI,EAAc,CAG5C,IAAK,IAAM,KAAW,EAChB,IAAY,GAAiB,EAAgB,IAAI,EAAQ,EAC3D,EAAwB,IAAI,EAAQ,CAIpC,EAAwB,KAAO,GACjC,EAAmB,IAAI,EAAe,EAAwB,CAIlE,OAAO,GAET,aAAc,EAAoB,CAAE,aAAY,QAAO,gBAAe,CAAC,CACvE,cAAe,EAAqB,CAAE,aAAY,CAAC,CACnD,cAAe,EAAqB,CAClC,aACA,QACA,cACA,YACA,eACD,CAAC,CACF,KAAM,EAAY,MACnB"}
@@ -0,0 +1,2 @@
1
+ require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`../utils/bitcoin-address.cjs`);let t=require(`zod`),n=require(`viem`),r=require(`@solana/kit`);const i=t.z.string().refine(n.isAddress,{message:`Invalid EVM address`}).transform(e=>e),a=t.z.string().refine(n.isHex,{message:`Invalid hex string`}).transform(e=>e),o=t.z.string().refine(e.isBech32Address,{message:`Invalid BTC address`}),s=t.z.string().refine(n.isHash,{message:`Invalid hash string`}).transform(e=>e),c=t.z.string().refine(r.isAddress,{message:`Invalid Solana address`}).transform(e=>e),l=t.z.string().refine(r.isSignature,{message:`Invalid Solana signature`}).transform(e=>e);exports.BtcAddressSchema=o,exports.EvmAddressSchema=i,exports.HashSchema=s,exports.HexSchema=a,exports.SolAddressSchema=c,exports.SolSignatureSchema=l;
2
+ //# sourceMappingURL=service-schemas.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-schemas.cjs","names":["z","isEvmAddress","isHex","isBech32Address","isHash","isSolAddress","isSignature"],"sources":["../../src/transfer-service/service-schemas.ts"],"sourcesContent":["import { type Signature, type Address as SolAddress, isSignature, isAddress as isSolAddress } from '@solana/kit';\nimport { z } from 'zod';\nimport { isAddress as isEvmAddress, isHash, isHex, type Address as EvmAddress, type Hash } from 'viem';\nimport type { Hex } from '../types/signer';\nimport { isBech32Address } from '../utils/bitcoin-address';\n\nexport const EvmAddressSchema: z.ZodType<EvmAddress> = z\n .string()\n .refine(isEvmAddress, { message: 'Invalid EVM address' })\n .transform((addr) => addr as EvmAddress);\n\nexport const HexSchema: z.ZodType<Hex> = z\n .string()\n .refine(isHex, { message: 'Invalid hex string' })\n .transform((hex) => hex as Hex);\n\nexport const BtcAddressSchema: z.ZodType<string> = z\n .string()\n .refine(isBech32Address, { message: 'Invalid BTC address' });\n\nexport const HashSchema: z.ZodType<Hash> = z\n .string()\n .refine(isHash, { message: 'Invalid hash string' })\n .transform((hash) => hash as Hash);\n\nexport const SolAddressSchema: z.ZodType<SolAddress> = z\n .string()\n .refine(isSolAddress, { message: 'Invalid Solana address' })\n .transform((addr) => addr as SolAddress);\n\nexport const SolSignatureSchema: z.ZodType<Signature> = z\n .string()\n .refine(isSignature, { message: 'Invalid Solana signature' })\n .transform((sig) => sig as Signature);\n"],"mappings":"6JAMA,MAAa,EAA0CA,EAAAA,EACpD,QAAQ,CACR,OAAOC,EAAAA,UAAc,CAAE,QAAS,sBAAuB,CAAC,CACxD,UAAW,GAAS,EAAmB,CAE7B,EAA4BD,EAAAA,EACtC,QAAQ,CACR,OAAOE,EAAAA,MAAO,CAAE,QAAS,qBAAsB,CAAC,CAChD,UAAW,GAAQ,EAAW,CAEpB,EAAsCF,EAAAA,EAChD,QAAQ,CACR,OAAOG,EAAAA,gBAAiB,CAAE,QAAS,sBAAuB,CAAC,CAEjD,EAA8BH,EAAAA,EACxC,QAAQ,CACR,OAAOI,EAAAA,OAAQ,CAAE,QAAS,sBAAuB,CAAC,CAClD,UAAW,GAAS,EAAa,CAEvB,EAA0CJ,EAAAA,EACpD,QAAQ,CACR,OAAOK,EAAAA,UAAc,CAAE,QAAS,yBAA0B,CAAC,CAC3D,UAAW,GAAS,EAAmB,CAE7B,EAA2CL,EAAAA,EACrD,QAAQ,CACR,OAAOM,EAAAA,YAAa,CAAE,QAAS,2BAA4B,CAAC,CAC5D,UAAW,GAAQ,EAAiB"}
@@ -0,0 +1,2 @@
1
+ import{isBech32Address as e}from"../utils/bitcoin-address.js";import{z as t}from"zod";import{isAddress as n,isHash as r,isHex as i}from"viem";import{isAddress as a,isSignature as o}from"@solana/kit";const s=t.string().refine(n,{message:`Invalid EVM address`}).transform(e=>e),c=t.string().refine(i,{message:`Invalid hex string`}).transform(e=>e),l=t.string().refine(e,{message:`Invalid BTC address`}),u=t.string().refine(r,{message:`Invalid hash string`}).transform(e=>e),d=t.string().refine(a,{message:`Invalid Solana address`}).transform(e=>e),f=t.string().refine(o,{message:`Invalid Solana signature`}).transform(e=>e);export{l as BtcAddressSchema,s as EvmAddressSchema,u as HashSchema,c as HexSchema,d as SolAddressSchema,f as SolSignatureSchema};
2
+ //# sourceMappingURL=service-schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-schemas.js","names":["isEvmAddress","isSolAddress"],"sources":["../../src/transfer-service/service-schemas.ts"],"sourcesContent":["import { type Signature, type Address as SolAddress, isSignature, isAddress as isSolAddress } from '@solana/kit';\nimport { z } from 'zod';\nimport { isAddress as isEvmAddress, isHash, isHex, type Address as EvmAddress, type Hash } from 'viem';\nimport type { Hex } from '../types/signer';\nimport { isBech32Address } from '../utils/bitcoin-address';\n\nexport const EvmAddressSchema: z.ZodType<EvmAddress> = z\n .string()\n .refine(isEvmAddress, { message: 'Invalid EVM address' })\n .transform((addr) => addr as EvmAddress);\n\nexport const HexSchema: z.ZodType<Hex> = z\n .string()\n .refine(isHex, { message: 'Invalid hex string' })\n .transform((hex) => hex as Hex);\n\nexport const BtcAddressSchema: z.ZodType<string> = z\n .string()\n .refine(isBech32Address, { message: 'Invalid BTC address' });\n\nexport const HashSchema: z.ZodType<Hash> = z\n .string()\n .refine(isHash, { message: 'Invalid hash string' })\n .transform((hash) => hash as Hash);\n\nexport const SolAddressSchema: z.ZodType<SolAddress> = z\n .string()\n .refine(isSolAddress, { message: 'Invalid Solana address' })\n .transform((addr) => addr as SolAddress);\n\nexport const SolSignatureSchema: z.ZodType<Signature> = z\n .string()\n .refine(isSignature, { message: 'Invalid Solana signature' })\n .transform((sig) => sig as Signature);\n"],"mappings":"uMAMA,MAAa,EAA0C,EACpD,QAAQ,CACR,OAAOA,EAAc,CAAE,QAAS,sBAAuB,CAAC,CACxD,UAAW,GAAS,EAAmB,CAE7B,EAA4B,EACtC,QAAQ,CACR,OAAO,EAAO,CAAE,QAAS,qBAAsB,CAAC,CAChD,UAAW,GAAQ,EAAW,CAEpB,EAAsC,EAChD,QAAQ,CACR,OAAO,EAAiB,CAAE,QAAS,sBAAuB,CAAC,CAEjD,EAA8B,EACxC,QAAQ,CACR,OAAO,EAAQ,CAAE,QAAS,sBAAuB,CAAC,CAClD,UAAW,GAAS,EAAa,CAEvB,EAA0C,EACpD,QAAQ,CACR,OAAOC,EAAc,CAAE,QAAS,yBAA0B,CAAC,CAC3D,UAAW,GAAS,EAAmB,CAE7B,EAA2C,EACrD,QAAQ,CACR,OAAO,EAAa,CAAE,QAAS,2BAA4B,CAAC,CAC5D,UAAW,GAAQ,EAAiB"}
@@ -0,0 +1,2 @@
1
+ const e=require(`../_utils.cjs`);function t({chainConfigs:t}){return({sourceAsset:n,sourceChainId:r,targetAsset:i,targetChainId:a})=>r===a?e.getWrapDirection(n,i,r,t)!==null:!1}exports.analyzeSupportFactory=t;
2
+ //# sourceMappingURL=analyze-support.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze-support.cjs","names":["getWrapDirection"],"sources":["../../../../src/transfer-service/wrap-unwrap/_handlers/analyze-support.ts"],"sourcesContent":["import type { TransferService } from '../../../types/service';\nimport type { Caip2ChainId } from '../../../types/caip';\nimport type { WrapChainConfig } from '../constants';\nimport { getWrapDirection } from '../_utils';\n\nexport interface AnalyzeSupportFactoryConfig {\n chainConfigs: ReadonlyMap<Caip2ChainId, WrapChainConfig>;\n}\n\nexport function analyzeSupportFactory({\n chainConfigs,\n}: AnalyzeSupportFactoryConfig): TransferService['analyzeSupport'] {\n return ({ sourceAsset, sourceChainId, targetAsset, targetChainId }) => {\n if (sourceChainId !== targetChainId) {\n return false;\n }\n\n return getWrapDirection(sourceAsset, targetAsset, sourceChainId, chainConfigs) !== null;\n };\n}\n"],"mappings":"iCASA,SAAgB,EAAsB,CACpC,gBACiE,CACjE,OAAQ,CAAE,cAAa,gBAAe,cAAa,mBAC7C,IAAkB,EAIfA,EAAAA,iBAAiB,EAAa,EAAa,EAAe,EAAa,GAAK,KAH1E"}
@@ -0,0 +1,2 @@
1
+ import{getWrapDirection as e}from"../_utils.js";function t({chainConfigs:t}){return({sourceAsset:n,sourceChainId:r,targetAsset:i,targetChainId:a})=>r===a?e(n,i,r,t)!==null:!1}export{t as analyzeSupportFactory};
2
+ //# sourceMappingURL=analyze-support.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze-support.js","names":[],"sources":["../../../../src/transfer-service/wrap-unwrap/_handlers/analyze-support.ts"],"sourcesContent":["import type { TransferService } from '../../../types/service';\nimport type { Caip2ChainId } from '../../../types/caip';\nimport type { WrapChainConfig } from '../constants';\nimport { getWrapDirection } from '../_utils';\n\nexport interface AnalyzeSupportFactoryConfig {\n chainConfigs: ReadonlyMap<Caip2ChainId, WrapChainConfig>;\n}\n\nexport function analyzeSupportFactory({\n chainConfigs,\n}: AnalyzeSupportFactoryConfig): TransferService['analyzeSupport'] {\n return ({ sourceAsset, sourceChainId, targetAsset, targetChainId }) => {\n if (sourceChainId !== targetChainId) {\n return false;\n }\n\n return getWrapDirection(sourceAsset, targetAsset, sourceChainId, chainConfigs) !== null;\n };\n}\n"],"mappings":"gDASA,SAAgB,EAAsB,CACpC,gBACiE,CACjE,OAAQ,CAAE,cAAa,gBAAe,cAAa,mBAC7C,IAAkB,EAIf,EAAiB,EAAa,EAAa,EAAe,EAAa,GAAK,KAH1E"}
@@ -0,0 +1,2 @@
1
+ require(`../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../../constants.cjs`),t=require(`../../../errors.cjs`),n=require(`../../_utils.cjs`),r=require(`../../_evm-gas.cjs`),i=require(`../_utils.cjs`);let a=require(`viem`);function o({chainConfigs:o}){return async(s,c)=>{if(s.serviceType!==e.ServiceType.WRAP_UNWRAP)throw new t.SdkError(t.ErrorReason.INCORRECT_PROVIDER_PROVIDED,t.ErrorCode.INVALID_PARAMS);let l=s.fromAddress;if(!(0,a.isAddress)(l))throw new t.SdkError(t.ErrorReason.INVALID_PARAMS,t.ErrorCode.INVALID_PARAMS,{details:`fromAddress is not a valid EVM address.`});let u=s.sourceChain.chainId,d=i.getWrapDirection(s.assetIn,s.assetOut,u,o);if(!d)throw new t.SdkError(t.ErrorReason.INVALID_PARAMS,t.ErrorCode.INVALID_PARAMS,{details:`Quote does not represent a valid wrap/unwrap pair.`});let f=n.getEvmClientForChain({chain:s.sourceChain}),p=await i.estimateWrapUnwrapGas({direction:d,amountIn:s.amountIn,contractAddress:i.getWrapperContractAddress(u,o),fromAddress:l,client:f,estimateGasMarginBps:c?.feeUnitsMarginBps}),m=await r.estimateEvmFeesPerGas(f,s.sourceChain,c?.overrides?.feeRateTier),h=c?.overrides?.maxFeePerGas??m.maxFeePerGas,g=c?.overrides?.maxPriorityFeePerGas??m.maxPriorityFeePerGas,_=p*h;return{asset:s.sourceChain.networkToken,totalFee:_,totalUpfrontFee:_,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 totalUpfrontFee: 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,gBAAiB,EACjB,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,totalUpfrontFee: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 totalUpfrontFee: 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,gBAAiB,EACjB,KAAM,CACJ,eACA,uBACD,CACF"}
@@ -0,0 +1,2 @@
1
+ const e=require(`../../../constants.cjs`);function t({chainConfigs:t}){return async()=>{let n={};for(let[r,i]of t)n[r]=[{...i.nativeAsset,destinations:{},swapProviders:[e.ServiceType.WRAP_UNWRAP]},{...i.wrappedAsset,destinations:{},swapProviders:[e.ServiceType.WRAP_UNWRAP]}];return n}}exports.getAssetsFactory=t;
2
+ //# sourceMappingURL=get-assets.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-assets.cjs","names":["ServiceType"],"sources":["../../../../src/transfer-service/wrap-unwrap/_handlers/get-assets.ts"],"sourcesContent":["import { ServiceType } from '../../../constants';\nimport type { ChainAssetMap, TransferableAsset } from '../../../types/asset';\nimport type { Caip2ChainId } from '../../../types/caip';\nimport type { TransferService } from '../../../types/service';\nimport type { WrapChainConfig } from '../constants';\n\nexport interface GetAssetsFactoryConfig {\n chainConfigs: ReadonlyMap<Caip2ChainId, WrapChainConfig>;\n}\n\nexport function getAssetsFactory({ chainConfigs }: GetAssetsFactoryConfig): TransferService['getAssets'] {\n return async () => {\n const assets: Record<string, TransferableAsset[]> = {};\n\n for (const [chainId, config] of chainConfigs) {\n const nativeAsset: TransferableAsset = {\n ...config.nativeAsset,\n destinations: {},\n swapProviders: [ServiceType.WRAP_UNWRAP],\n };\n\n const wrappedAsset: TransferableAsset = {\n ...config.wrappedAsset,\n destinations: {},\n swapProviders: [ServiceType.WRAP_UNWRAP],\n };\n\n assets[chainId] = [nativeAsset, wrappedAsset];\n }\n\n return assets as ChainAssetMap;\n };\n}\n"],"mappings":"0CAUA,SAAgB,EAAiB,CAAE,gBAAsE,CACvG,OAAO,SAAY,CACjB,IAAM,EAA8C,EAAE,CAEtD,IAAK,GAAM,CAAC,EAAS,KAAW,EAa9B,EAAO,GAAW,CAZqB,CACrC,GAAG,EAAO,YACV,aAAc,EAAE,CAChB,cAAe,CAACA,EAAAA,YAAY,YAAY,CACzC,CAEuC,CACtC,GAAG,EAAO,aACV,aAAc,EAAE,CAChB,cAAe,CAACA,EAAAA,YAAY,YAAY,CACzC,CAE4C,CAG/C,OAAO"}
@@ -0,0 +1,2 @@
1
+ import{ServiceType as e}from"../../../constants.js";function t({chainConfigs:t}){return async()=>{let n={};for(let[r,i]of t)n[r]=[{...i.nativeAsset,destinations:{},swapProviders:[e.WRAP_UNWRAP]},{...i.wrappedAsset,destinations:{},swapProviders:[e.WRAP_UNWRAP]}];return n}}export{t as getAssetsFactory};
2
+ //# sourceMappingURL=get-assets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-assets.js","names":[],"sources":["../../../../src/transfer-service/wrap-unwrap/_handlers/get-assets.ts"],"sourcesContent":["import { ServiceType } from '../../../constants';\nimport type { ChainAssetMap, TransferableAsset } from '../../../types/asset';\nimport type { Caip2ChainId } from '../../../types/caip';\nimport type { TransferService } from '../../../types/service';\nimport type { WrapChainConfig } from '../constants';\n\nexport interface GetAssetsFactoryConfig {\n chainConfigs: ReadonlyMap<Caip2ChainId, WrapChainConfig>;\n}\n\nexport function getAssetsFactory({ chainConfigs }: GetAssetsFactoryConfig): TransferService['getAssets'] {\n return async () => {\n const assets: Record<string, TransferableAsset[]> = {};\n\n for (const [chainId, config] of chainConfigs) {\n const nativeAsset: TransferableAsset = {\n ...config.nativeAsset,\n destinations: {},\n swapProviders: [ServiceType.WRAP_UNWRAP],\n };\n\n const wrappedAsset: TransferableAsset = {\n ...config.wrappedAsset,\n destinations: {},\n swapProviders: [ServiceType.WRAP_UNWRAP],\n };\n\n assets[chainId] = [nativeAsset, wrappedAsset];\n }\n\n return assets as ChainAssetMap;\n };\n}\n"],"mappings":"oDAUA,SAAgB,EAAiB,CAAE,gBAAsE,CACvG,OAAO,SAAY,CACjB,IAAM,EAA8C,EAAE,CAEtD,IAAK,GAAM,CAAC,EAAS,KAAW,EAa9B,EAAO,GAAW,CAZqB,CACrC,GAAG,EAAO,YACV,aAAc,EAAE,CAChB,cAAe,CAAC,EAAY,YAAY,CACzC,CAEuC,CACtC,GAAG,EAAO,aACV,aAAc,EAAE,CAChB,cAAe,CAAC,EAAY,YAAY,CACzC,CAE4C,CAG/C,OAAO"}
@@ -0,0 +1,2 @@
1
+ const e=require(`../../../constants.cjs`);function t({chainConfigs:t}){return async({sourceAsset:n,sourceChainId:r,targetChainId:i})=>{if(r!==i)return[];let a=t.get(r);return a?n.type===e.TokenType.NATIVE?[{...a.wrappedAsset,bridgeProviders:[e.ServiceType.WRAP_UNWRAP]}]:n.type===e.TokenType.ERC20&&n.address.toLowerCase()===a.wrappedAsset.address.toLowerCase()?[{...a.nativeAsset,bridgeProviders:[e.ServiceType.WRAP_UNWRAP]}]:[]:[]}}exports.getBridgeableAssetsFactory=t;
2
+ //# sourceMappingURL=get-bridgeable-assets.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-bridgeable-assets.cjs","names":["TokenType","ServiceType"],"sources":["../../../../src/transfer-service/wrap-unwrap/_handlers/get-bridgeable-assets.ts"],"sourcesContent":["import { ServiceType, TokenType } from '../../../constants';\nimport type { GetBridgeableAssetsProps, TransferService } from '../../../types/service';\nimport type { BridgeableUiAsset } from '../../../types/asset';\nimport type { Caip2ChainId } from '../../../types/caip';\nimport type { WrapChainConfig } from '../constants';\n\nexport function getBridgeableAssetsFactory({\n chainConfigs,\n}: {\n chainConfigs: ReadonlyMap<Caip2ChainId, WrapChainConfig>;\n}): TransferService['getBridgeableAssets'] {\n return async ({\n sourceAsset,\n sourceChainId,\n targetChainId,\n }: GetBridgeableAssetsProps): Promise<readonly BridgeableUiAsset[]> => {\n if (sourceChainId !== targetChainId) {\n return [];\n }\n const config = chainConfigs.get(sourceChainId);\n if (!config) {\n return [];\n }\n if (sourceAsset.type === TokenType.NATIVE) {\n return [{ ...config.wrappedAsset, bridgeProviders: [ServiceType.WRAP_UNWRAP] }];\n }\n if (\n sourceAsset.type === TokenType.ERC20 &&\n sourceAsset.address.toLowerCase() === config.wrappedAsset.address.toLowerCase()\n ) {\n return [{ ...config.nativeAsset, bridgeProviders: [ServiceType.WRAP_UNWRAP] }];\n }\n return [];\n };\n}\n"],"mappings":"0CAMA,SAAgB,EAA2B,CACzC,gBAGyC,CACzC,OAAO,MAAO,CACZ,cACA,gBACA,mBACqE,CACrE,GAAI,IAAkB,EACpB,MAAO,EAAE,CAEX,IAAM,EAAS,EAAa,IAAI,EAAc,CAa9C,OAZK,EAGD,EAAY,OAASA,EAAAA,UAAU,OAC1B,CAAC,CAAE,GAAG,EAAO,aAAc,gBAAiB,CAACC,EAAAA,YAAY,YAAY,CAAE,CAAC,CAG/E,EAAY,OAASD,EAAAA,UAAU,OAC/B,EAAY,QAAQ,aAAa,GAAK,EAAO,aAAa,QAAQ,aAAa,CAExE,CAAC,CAAE,GAAG,EAAO,YAAa,gBAAiB,CAACC,EAAAA,YAAY,YAAY,CAAE,CAAC,CAEzE,EAAE,CAXA,EAAE"}
@@ -0,0 +1,2 @@
1
+ import{ServiceType as e,TokenType as t}from"../../../constants.js";function n({chainConfigs:n}){return async({sourceAsset:r,sourceChainId:i,targetChainId:a})=>{if(i!==a)return[];let o=n.get(i);return o?r.type===t.NATIVE?[{...o.wrappedAsset,bridgeProviders:[e.WRAP_UNWRAP]}]:r.type===t.ERC20&&r.address.toLowerCase()===o.wrappedAsset.address.toLowerCase()?[{...o.nativeAsset,bridgeProviders:[e.WRAP_UNWRAP]}]:[]:[]}}export{n as getBridgeableAssetsFactory};
2
+ //# sourceMappingURL=get-bridgeable-assets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-bridgeable-assets.js","names":[],"sources":["../../../../src/transfer-service/wrap-unwrap/_handlers/get-bridgeable-assets.ts"],"sourcesContent":["import { ServiceType, TokenType } from '../../../constants';\nimport type { GetBridgeableAssetsProps, TransferService } from '../../../types/service';\nimport type { BridgeableUiAsset } from '../../../types/asset';\nimport type { Caip2ChainId } from '../../../types/caip';\nimport type { WrapChainConfig } from '../constants';\n\nexport function getBridgeableAssetsFactory({\n chainConfigs,\n}: {\n chainConfigs: ReadonlyMap<Caip2ChainId, WrapChainConfig>;\n}): TransferService['getBridgeableAssets'] {\n return async ({\n sourceAsset,\n sourceChainId,\n targetChainId,\n }: GetBridgeableAssetsProps): Promise<readonly BridgeableUiAsset[]> => {\n if (sourceChainId !== targetChainId) {\n return [];\n }\n const config = chainConfigs.get(sourceChainId);\n if (!config) {\n return [];\n }\n if (sourceAsset.type === TokenType.NATIVE) {\n return [{ ...config.wrappedAsset, bridgeProviders: [ServiceType.WRAP_UNWRAP] }];\n }\n if (\n sourceAsset.type === TokenType.ERC20 &&\n sourceAsset.address.toLowerCase() === config.wrappedAsset.address.toLowerCase()\n ) {\n return [{ ...config.nativeAsset, bridgeProviders: [ServiceType.WRAP_UNWRAP] }];\n }\n return [];\n };\n}\n"],"mappings":"mEAMA,SAAgB,EAA2B,CACzC,gBAGyC,CACzC,OAAO,MAAO,CACZ,cACA,gBACA,mBACqE,CACrE,GAAI,IAAkB,EACpB,MAAO,EAAE,CAEX,IAAM,EAAS,EAAa,IAAI,EAAc,CAa9C,OAZK,EAGD,EAAY,OAAS,EAAU,OAC1B,CAAC,CAAE,GAAG,EAAO,aAAc,gBAAiB,CAAC,EAAY,YAAY,CAAE,CAAC,CAG/E,EAAY,OAAS,EAAU,OAC/B,EAAY,QAAQ,aAAa,GAAK,EAAO,aAAa,QAAQ,aAAa,CAExE,CAAC,CAAE,GAAG,EAAO,YAAa,gBAAiB,CAAC,EAAY,YAAY,CAAE,CAAC,CAEzE,EAAE,CAXA,EAAE"}
@@ -0,0 +1,2 @@
1
+ function e(){return async()=>1n}exports.getMinimumTransferAmountFactory=e;
2
+ //# sourceMappingURL=get-minimum-transfer-amount.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-minimum-transfer-amount.cjs","names":[],"sources":["../../../../src/transfer-service/wrap-unwrap/_handlers/get-minimum-transfer-amount.ts"],"sourcesContent":["import type { TransferService } from '../../../types/service';\n\nexport function getMinimumTransferAmountFactory(): TransferService['getMinimumTransferAmount'] {\n return async () => 1n;\n}\n"],"mappings":"AAEA,SAAgB,GAA+E,CAC7F,OAAO,SAAY"}
@@ -0,0 +1,2 @@
1
+ function e(){return async()=>1n}export{e as getMinimumTransferAmountFactory};
2
+ //# sourceMappingURL=get-minimum-transfer-amount.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-minimum-transfer-amount.js","names":[],"sources":["../../../../src/transfer-service/wrap-unwrap/_handlers/get-minimum-transfer-amount.ts"],"sourcesContent":["import type { TransferService } from '../../../types/service';\n\nexport function getMinimumTransferAmountFactory(): TransferService['getMinimumTransferAmount'] {\n return async () => 1n;\n}\n"],"mappings":"AAEA,SAAgB,GAA+E,CAC7F,OAAO,SAAY"}
@@ -0,0 +1,2 @@
1
+ const e=require(`../../../constants.cjs`),t=require(`../constants.cjs`);function n({clock:n=()=>Math.floor(Date.now()/1e3)}={}){return(r,i)=>{let a=new AbortController;function o(){if(a.signal.aborted)return;let o=n();i(`quote`,{aggregator:{id:`wrap-unwrap`,name:`Wrap/Unwrap`},amountIn:r.amount,amountOut:r.amount,assetIn:r.sourceAsset,assetOut:r.targetAsset,expiresAt:o+t.WRAP_UNWRAP_QUOTE_TTL_SECONDS,fees:[],fromAddress:r.fromAddress,id:crypto.randomUUID(),partnerFeeBps:null,serviceType:e.ServiceType.WRAP_UNWRAP,slippageBps:0,sourceChain:r.sourceChain,targetChain:r.targetChain,toAddress:r.toAddress}),i(`done`)}return o(),{cancel:()=>a.abort()}}}exports.streamQuotesFactory=n;
2
+ //# sourceMappingURL=stream-quotes.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-quotes.cjs","names":["WRAP_UNWRAP_QUOTE_TTL_SECONDS","ServiceType"],"sources":["../../../../src/transfer-service/wrap-unwrap/_handlers/stream-quotes.ts"],"sourcesContent":["import { ServiceType } from '../../../constants';\nimport type { TransferService } from '../../../types/service';\nimport type { Quote } from '../../../types/quote';\nimport { WRAP_UNWRAP_QUOTE_TTL_SECONDS } from '../constants';\n\nexport interface StreamQuotesFactoryConfig {\n /** Pre-bound clock for deterministic testing; defaults to Date.now/1000. */\n clock?: () => number;\n}\n\nexport function streamQuotesFactory({\n clock = () => Math.floor(Date.now() / 1_000),\n}: StreamQuotesFactoryConfig = {}): TransferService['streamQuotes'] {\n return (props, handler) => {\n const ac = new AbortController();\n\n function emitQuote(): void {\n if (ac.signal.aborted) return;\n\n const now = clock();\n const quote: Quote = {\n aggregator: { id: 'wrap-unwrap', name: 'Wrap/Unwrap' },\n amountIn: props.amount,\n amountOut: props.amount,\n assetIn: props.sourceAsset,\n assetOut: props.targetAsset,\n expiresAt: now + WRAP_UNWRAP_QUOTE_TTL_SECONDS,\n fees: [],\n fromAddress: props.fromAddress,\n id: crypto.randomUUID(),\n partnerFeeBps: null,\n serviceType: ServiceType.WRAP_UNWRAP,\n slippageBps: 0,\n sourceChain: props.sourceChain,\n targetChain: props.targetChain,\n toAddress: props.toAddress,\n };\n\n handler('quote', quote);\n handler('done');\n }\n\n emitQuote();\n\n return {\n cancel: () => ac.abort(),\n };\n };\n}\n"],"mappings":"wEAUA,SAAgB,EAAoB,CAClC,YAAc,KAAK,MAAM,KAAK,KAAK,CAAG,IAAM,EACf,EAAE,CAAmC,CAClE,OAAQ,EAAO,IAAY,CACzB,IAAM,EAAK,IAAI,gBAEf,SAAS,GAAkB,CACzB,GAAI,EAAG,OAAO,QAAS,OAEvB,IAAM,EAAM,GAAO,CAmBnB,EAAQ,QAlBa,CACnB,WAAY,CAAE,GAAI,cAAe,KAAM,cAAe,CACtD,SAAU,EAAM,OAChB,UAAW,EAAM,OACjB,QAAS,EAAM,YACf,SAAU,EAAM,YAChB,UAAW,EAAMA,EAAAA,8BACjB,KAAM,EAAE,CACR,YAAa,EAAM,YACnB,GAAI,OAAO,YAAY,CACvB,cAAe,KACf,YAAaC,EAAAA,YAAY,YACzB,YAAa,EACb,YAAa,EAAM,YACnB,YAAa,EAAM,YACnB,UAAW,EAAM,UAClB,CAEsB,CACvB,EAAQ,OAAO,CAKjB,OAFA,GAAW,CAEJ,CACL,WAAc,EAAG,OAAO,CACzB"}
@@ -0,0 +1,2 @@
1
+ import{ServiceType as e}from"../../../constants.js";import{WRAP_UNWRAP_QUOTE_TTL_SECONDS as t}from"../constants.js";function n({clock:n=()=>Math.floor(Date.now()/1e3)}={}){return(r,i)=>{let a=new AbortController;function o(){if(a.signal.aborted)return;let o=n();i(`quote`,{aggregator:{id:`wrap-unwrap`,name:`Wrap/Unwrap`},amountIn:r.amount,amountOut:r.amount,assetIn:r.sourceAsset,assetOut:r.targetAsset,expiresAt:o+t,fees:[],fromAddress:r.fromAddress,id:crypto.randomUUID(),partnerFeeBps:null,serviceType:e.WRAP_UNWRAP,slippageBps:0,sourceChain:r.sourceChain,targetChain:r.targetChain,toAddress:r.toAddress}),i(`done`)}return o(),{cancel:()=>a.abort()}}}export{n as streamQuotesFactory};
2
+ //# sourceMappingURL=stream-quotes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-quotes.js","names":[],"sources":["../../../../src/transfer-service/wrap-unwrap/_handlers/stream-quotes.ts"],"sourcesContent":["import { ServiceType } from '../../../constants';\nimport type { TransferService } from '../../../types/service';\nimport type { Quote } from '../../../types/quote';\nimport { WRAP_UNWRAP_QUOTE_TTL_SECONDS } from '../constants';\n\nexport interface StreamQuotesFactoryConfig {\n /** Pre-bound clock for deterministic testing; defaults to Date.now/1000. */\n clock?: () => number;\n}\n\nexport function streamQuotesFactory({\n clock = () => Math.floor(Date.now() / 1_000),\n}: StreamQuotesFactoryConfig = {}): TransferService['streamQuotes'] {\n return (props, handler) => {\n const ac = new AbortController();\n\n function emitQuote(): void {\n if (ac.signal.aborted) return;\n\n const now = clock();\n const quote: Quote = {\n aggregator: { id: 'wrap-unwrap', name: 'Wrap/Unwrap' },\n amountIn: props.amount,\n amountOut: props.amount,\n assetIn: props.sourceAsset,\n assetOut: props.targetAsset,\n expiresAt: now + WRAP_UNWRAP_QUOTE_TTL_SECONDS,\n fees: [],\n fromAddress: props.fromAddress,\n id: crypto.randomUUID(),\n partnerFeeBps: null,\n serviceType: ServiceType.WRAP_UNWRAP,\n slippageBps: 0,\n sourceChain: props.sourceChain,\n targetChain: props.targetChain,\n toAddress: props.toAddress,\n };\n\n handler('quote', quote);\n handler('done');\n }\n\n emitQuote();\n\n return {\n cancel: () => ac.abort(),\n };\n };\n}\n"],"mappings":"oHAUA,SAAgB,EAAoB,CAClC,YAAc,KAAK,MAAM,KAAK,KAAK,CAAG,IAAM,EACf,EAAE,CAAmC,CAClE,OAAQ,EAAO,IAAY,CACzB,IAAM,EAAK,IAAI,gBAEf,SAAS,GAAkB,CACzB,GAAI,EAAG,OAAO,QAAS,OAEvB,IAAM,EAAM,GAAO,CAmBnB,EAAQ,QAlBa,CACnB,WAAY,CAAE,GAAI,cAAe,KAAM,cAAe,CACtD,SAAU,EAAM,OAChB,UAAW,EAAM,OACjB,QAAS,EAAM,YACf,SAAU,EAAM,YAChB,UAAW,EAAM,EACjB,KAAM,EAAE,CACR,YAAa,EAAM,YACnB,GAAI,OAAO,YAAY,CACvB,cAAe,KACf,YAAa,EAAY,YACzB,YAAa,EACb,YAAa,EAAM,YACnB,YAAa,EAAM,YACnB,UAAW,EAAM,UAClB,CAEsB,CACvB,EAAQ,OAAO,CAKjB,OAFA,GAAW,CAEJ,CACL,WAAc,EAAG,OAAO,CACzB"}