@shapeshiftoss/swapper 17.6.9 → 17.6.11

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 (324) hide show
  1. package/LICENSE.md +21 -0
  2. package/dist/cjs/.tsbuildinfo +1 -1
  3. package/dist/cjs/constants.js +72 -43
  4. package/dist/cjs/cowswap-utils/constants.js +3 -0
  5. package/dist/cjs/cowswap-utils/index.js +6 -0
  6. package/dist/cjs/index.d.ts +1 -0
  7. package/dist/cjs/index.js +1 -0
  8. package/dist/cjs/swappers/AcrossSwapper/AcrossSwapper.d.ts +2 -0
  9. package/dist/cjs/swappers/AcrossSwapper/AcrossSwapper.js +8 -0
  10. package/dist/cjs/swappers/AcrossSwapper/constant.d.ts +9 -0
  11. package/dist/cjs/swappers/AcrossSwapper/constant.js +50 -0
  12. package/dist/cjs/swappers/AcrossSwapper/endpoints.d.ts +2 -0
  13. package/dist/cjs/swappers/AcrossSwapper/endpoints.js +113 -0
  14. package/dist/cjs/swappers/AcrossSwapper/getTradeQuote/getTradeQuote.d.ts +3 -0
  15. package/dist/cjs/swappers/AcrossSwapper/getTradeQuote/getTradeQuote.js +31 -0
  16. package/dist/cjs/swappers/AcrossSwapper/getTradeRate/getTradeRate.d.ts +3 -0
  17. package/dist/cjs/swappers/AcrossSwapper/getTradeRate/getTradeRate.js +19 -0
  18. package/dist/cjs/swappers/AcrossSwapper/index.d.ts +1 -0
  19. package/dist/cjs/swappers/AcrossSwapper/index.js +5 -0
  20. package/dist/cjs/swappers/AcrossSwapper/utils/acrossService.d.ts +5 -0
  21. package/dist/cjs/swappers/AcrossSwapper/utils/acrossService.js +17 -0
  22. package/dist/cjs/swappers/AcrossSwapper/utils/fetchAcrossTrade.d.ts +19 -0
  23. package/dist/cjs/swappers/AcrossSwapper/utils/fetchAcrossTrade.js +27 -0
  24. package/dist/cjs/swappers/AcrossSwapper/utils/getTrade.d.ts +11 -0
  25. package/dist/cjs/swappers/AcrossSwapper/utils/getTrade.js +349 -0
  26. package/dist/cjs/swappers/AcrossSwapper/utils/types.d.ts +177 -0
  27. package/dist/cjs/swappers/AcrossSwapper/utils/types.js +17 -0
  28. package/dist/cjs/swappers/AvnuSwapper/endpoints.js +42 -14
  29. package/dist/cjs/swappers/AvnuSwapper/swapperApi/getTradeQuote.js +19 -5
  30. package/dist/cjs/swappers/AvnuSwapper/swapperApi/getTradeRate.js +17 -4
  31. package/dist/cjs/swappers/BebopSwapper/BebopSwapper.js +2 -0
  32. package/dist/cjs/swappers/BebopSwapper/endpoints.js +35 -2
  33. package/dist/cjs/swappers/BebopSwapper/executeSolanaMessage.d.ts +2 -0
  34. package/dist/cjs/swappers/BebopSwapper/executeSolanaMessage.js +47 -0
  35. package/dist/cjs/swappers/BebopSwapper/getBebopSolanaTradeQuote/getBebopSolanaTradeQuote.d.ts +4 -0
  36. package/dist/cjs/swappers/BebopSwapper/getBebopSolanaTradeQuote/getBebopSolanaTradeQuote.js +91 -0
  37. package/dist/cjs/swappers/BebopSwapper/getBebopSolanaTradeRate/getBebopSolanaTradeRate.d.ts +4 -0
  38. package/dist/cjs/swappers/BebopSwapper/getBebopSolanaTradeRate/getBebopSolanaTradeRate.js +88 -0
  39. package/dist/cjs/swappers/BebopSwapper/getBebopTradeQuote/getBebopTradeQuote.js +10 -0
  40. package/dist/cjs/swappers/BebopSwapper/getBebopTradeRate/getBebopTradeRate.js +10 -0
  41. package/dist/cjs/swappers/BebopSwapper/types.d.ts +49 -1
  42. package/dist/cjs/swappers/BebopSwapper/types.js +9 -2
  43. package/dist/cjs/swappers/BebopSwapper/utils/fetchFromBebop.d.ts +19 -1
  44. package/dist/cjs/swappers/BebopSwapper/utils/fetchFromBebop.js +86 -1
  45. package/dist/cjs/swappers/BebopSwapper/utils/helpers/helpers.d.ts +14 -2
  46. package/dist/cjs/swappers/BebopSwapper/utils/helpers/helpers.js +47 -1
  47. package/dist/cjs/swappers/ButterSwap/ButterSwap.js +1 -0
  48. package/dist/cjs/swappers/ButterSwap/endpoints.js +56 -0
  49. package/dist/cjs/swappers/ButterSwap/swapperApi/checkTradeStatus.js +19 -0
  50. package/dist/cjs/swappers/ButterSwap/swapperApi/getTradeQuote.js +44 -15
  51. package/dist/cjs/swappers/ButterSwap/swapperApi/getTradeQuote.test.js +1 -0
  52. package/dist/cjs/swappers/ButterSwap/swapperApi/getTradeRate.js +33 -16
  53. package/dist/cjs/swappers/ButterSwap/swapperApi/getTradeRate.test.js +2 -0
  54. package/dist/cjs/swappers/ButterSwap/types.d.ts +1 -0
  55. package/dist/cjs/swappers/ButterSwap/utils/helpers.js +1 -0
  56. package/dist/cjs/swappers/ButterSwap/xhr.d.ts +2 -2
  57. package/dist/cjs/swappers/ButterSwap/xhr.js +7 -2
  58. package/dist/cjs/swappers/CetusSwapper/endpoints.js +3 -8
  59. package/dist/cjs/swappers/CetusSwapper/swapperApi/getTradeQuote.js +11 -1
  60. package/dist/cjs/swappers/CetusSwapper/swapperApi/getTradeRate.js +11 -1
  61. package/dist/cjs/swappers/CetusSwapper/utils/helpers.d.ts +1 -1
  62. package/dist/cjs/swappers/CetusSwapper/utils/helpers.js +1 -1
  63. package/dist/cjs/swappers/ChainflipSwapper/constants.js +7 -3
  64. package/dist/cjs/swappers/ChainflipSwapper/utils/getQuoteOrRate.js +28 -5
  65. package/dist/cjs/swappers/ChainflipSwapper/utils/helpers.js +8 -2
  66. package/dist/cjs/swappers/CowSwapper/CowSwapper.js +1 -1
  67. package/dist/cjs/swappers/CowSwapper/getCowSwapTradeQuote/getCowSwapTradeQuote.js +11 -1
  68. package/dist/cjs/swappers/CowSwapper/getCowSwapTradeQuote/getCowSwapTradeQuote.test.js +5 -5
  69. package/dist/cjs/swappers/CowSwapper/getCowSwapTradeRate/getCowSwapTradeRate.js +10 -1
  70. package/dist/cjs/swappers/CowSwapper/utils/helpers/helpers.js +8 -2
  71. package/dist/cjs/swappers/DebridgeSwapper/DebridgeSwapper.d.ts +2 -0
  72. package/dist/cjs/swappers/DebridgeSwapper/DebridgeSwapper.js +7 -0
  73. package/dist/cjs/swappers/DebridgeSwapper/constant.d.ts +5 -0
  74. package/dist/cjs/swappers/DebridgeSwapper/constant.js +36 -0
  75. package/dist/cjs/swappers/DebridgeSwapper/endpoints.d.ts +2 -0
  76. package/dist/cjs/swappers/DebridgeSwapper/endpoints.js +217 -0
  77. package/dist/cjs/swappers/DebridgeSwapper/getTradeQuote/getTradeQuote.d.ts +3 -0
  78. package/dist/cjs/swappers/DebridgeSwapper/getTradeQuote/getTradeQuote.js +31 -0
  79. package/dist/cjs/swappers/DebridgeSwapper/getTradeRate/getTradeRate.d.ts +3 -0
  80. package/dist/cjs/swappers/DebridgeSwapper/getTradeRate/getTradeRate.js +19 -0
  81. package/dist/cjs/swappers/DebridgeSwapper/index.d.ts +1 -0
  82. package/dist/cjs/swappers/DebridgeSwapper/index.js +5 -0
  83. package/dist/cjs/swappers/DebridgeSwapper/utils/debridgeService.d.ts +5 -0
  84. package/dist/cjs/swappers/DebridgeSwapper/utils/debridgeService.js +17 -0
  85. package/dist/cjs/swappers/DebridgeSwapper/utils/fetchDebridgeSingleChainTrade.d.ts +16 -0
  86. package/dist/cjs/swappers/DebridgeSwapper/utils/fetchDebridgeSingleChainTrade.js +23 -0
  87. package/dist/cjs/swappers/DebridgeSwapper/utils/fetchDebridgeTrade.d.ts +20 -0
  88. package/dist/cjs/swappers/DebridgeSwapper/utils/fetchDebridgeTrade.js +29 -0
  89. package/dist/cjs/swappers/DebridgeSwapper/utils/getTrade.d.ts +11 -0
  90. package/dist/cjs/swappers/DebridgeSwapper/utils/getTrade.js +369 -0
  91. package/dist/cjs/swappers/DebridgeSwapper/utils/types.d.ts +155 -0
  92. package/dist/cjs/swappers/DebridgeSwapper/utils/types.js +9 -0
  93. package/dist/cjs/swappers/JupiterSwapper/swapperApi/getTradeQuote.js +32 -0
  94. package/dist/cjs/swappers/JupiterSwapper/swapperApi/getTradeRate.js +9 -0
  95. package/dist/cjs/swappers/MayachainSwapper/utils/poolAssetHelpers/poolAssetHelpers.js +1 -1
  96. package/dist/cjs/swappers/NearIntentsSwapper/NearIntentsSwapper.js +1 -0
  97. package/dist/cjs/swappers/NearIntentsSwapper/endpoints.js +31 -0
  98. package/dist/cjs/swappers/NearIntentsSwapper/swapperApi/getTradeQuote.js +48 -1
  99. package/dist/cjs/swappers/NearIntentsSwapper/swapperApi/getTradeRate.js +73 -1
  100. package/dist/cjs/swappers/NearIntentsSwapper/types.d.ts +1 -1
  101. package/dist/cjs/swappers/NearIntentsSwapper/types.js +6 -0
  102. package/dist/cjs/swappers/NearIntentsSwapper/utils/helpers/helpers.js +23 -4
  103. package/dist/cjs/swappers/PortalsSwapper/getPortalsTradeQuote/getPortalsTradeQuote.js +10 -0
  104. package/dist/cjs/swappers/PortalsSwapper/getPortalsTradeRate/getPortalsTradeRate.js +8 -3
  105. package/dist/cjs/swappers/RelaySwapper/constant.js +27 -1
  106. package/dist/cjs/swappers/RelaySwapper/utils/getRelayDefaultUserAddress.d.ts +1 -1
  107. package/dist/cjs/swappers/RelaySwapper/utils/getTrade.js +57 -7
  108. package/dist/cjs/swappers/RelaySwapper/utils/relayTokenToAssetId.js +110 -0
  109. package/dist/cjs/swappers/RelaySwapper/utils/types.d.ts +15 -0
  110. package/dist/cjs/swappers/StonfiSwapper/StonfiSwapper.d.ts +2 -0
  111. package/dist/cjs/swappers/StonfiSwapper/StonfiSwapper.js +8 -0
  112. package/dist/cjs/swappers/StonfiSwapper/endpoints.d.ts +2 -0
  113. package/dist/cjs/swappers/StonfiSwapper/endpoints.js +227 -0
  114. package/dist/cjs/swappers/StonfiSwapper/index.d.ts +4 -0
  115. package/dist/cjs/swappers/StonfiSwapper/index.js +25 -0
  116. package/dist/cjs/swappers/StonfiSwapper/swapperApi/getTradeQuote.d.ts +2 -0
  117. package/dist/cjs/swappers/StonfiSwapper/swapperApi/getTradeQuote.js +129 -0
  118. package/dist/cjs/swappers/StonfiSwapper/swapperApi/getTradeRate.d.ts +2 -0
  119. package/dist/cjs/swappers/StonfiSwapper/swapperApi/getTradeRate.js +115 -0
  120. package/dist/cjs/swappers/StonfiSwapper/types.d.ts +60 -0
  121. package/dist/cjs/swappers/StonfiSwapper/types.js +5 -0
  122. package/dist/cjs/swappers/StonfiSwapper/utils/constants.d.ts +5 -0
  123. package/dist/cjs/swappers/StonfiSwapper/utils/constants.js +8 -0
  124. package/dist/cjs/swappers/StonfiSwapper/utils/helpers.d.ts +11 -0
  125. package/dist/cjs/swappers/StonfiSwapper/utils/helpers.js +135 -0
  126. package/dist/cjs/swappers/StonfiSwapper/utils/omnistonManager.d.ts +5 -0
  127. package/dist/cjs/swappers/StonfiSwapper/utils/omnistonManager.js +20 -0
  128. package/dist/cjs/swappers/SunioSwapper/endpoints.js +1 -1
  129. package/dist/cjs/swappers/SunioSwapper/utils/getQuoteOrRate.js +14 -3
  130. package/dist/cjs/swappers/ThorchainSwapper/ThorchainSwapper.js +3 -0
  131. package/dist/cjs/swappers/ThorchainSwapper/endpoints.js +2 -0
  132. package/dist/cjs/swappers/ThorchainSwapper/generated/generatedTradableAssetMap.json +1 -0
  133. package/dist/cjs/swappers/ThorchainSwapper/utils/poolAssetHelpers/poolAssetHelpers.d.ts +1 -1
  134. package/dist/cjs/swappers/ThorchainSwapper/utils/poolAssetHelpers/poolAssetHelpers.js +2 -1
  135. package/dist/cjs/swappers/ThorchainSwapper/utils/poolAssetHelpers/poolAssetHelpers.test.js +10 -0
  136. package/dist/cjs/swappers/ZrxSwapper/getZrxTradeQuote/getZrxTradeQuote.js +9 -0
  137. package/dist/cjs/swappers/ZrxSwapper/getZrxTradeRate/getZrxTradeRate.js +9 -0
  138. package/dist/cjs/swappers/ZrxSwapper/utils/helpers/helpers.d.ts +1 -1
  139. package/dist/cjs/swappers/utils/affiliateFee.d.ts +17 -0
  140. package/dist/cjs/swappers/utils/affiliateFee.js +43 -0
  141. package/dist/cjs/swappers/utils/filterBuyAssetsBySellAssetId/filterBuyAssetsBySellAssetId.js +2 -5
  142. package/dist/cjs/swappers/utils/helpers/helpers.js +3 -0
  143. package/dist/cjs/thorchain-utils/getCallDataFromQuote.d.ts +1 -1
  144. package/dist/cjs/thorchain-utils/getL1RateOrQuote.js +87 -9
  145. package/dist/cjs/thorchain-utils/getQuote.js +8 -2
  146. package/dist/cjs/thorchain-utils/index.d.ts +2 -1
  147. package/dist/cjs/thorchain-utils/index.js +2 -1
  148. package/dist/cjs/thorchain-utils/solana/constants.d.ts +1 -0
  149. package/dist/cjs/thorchain-utils/solana/constants.js +6 -0
  150. package/dist/cjs/thorchain-utils/solana/getSolanaTransactionFees.d.ts +2 -0
  151. package/dist/cjs/thorchain-utils/solana/getSolanaTransactionFees.js +41 -0
  152. package/dist/cjs/thorchain-utils/solana/getThorTxData.d.ts +12 -0
  153. package/dist/cjs/thorchain-utils/solana/getThorTxData.js +14 -0
  154. package/dist/cjs/thorchain-utils/solana/getUnsignedSolanaTransaction.d.ts +3 -0
  155. package/dist/cjs/thorchain-utils/solana/getUnsignedSolanaTransaction.js +64 -0
  156. package/dist/cjs/thorchain-utils/solana/index.d.ts +3 -0
  157. package/dist/cjs/thorchain-utils/solana/index.js +19 -0
  158. package/dist/cjs/tron-utils/getUnsignedTronTransaction.js +22 -2
  159. package/dist/cjs/types.d.ts +118 -8
  160. package/dist/cjs/types.js +3 -0
  161. package/dist/cjs/utils.d.ts +4 -3
  162. package/dist/cjs/utils.js +35 -7
  163. package/dist/esm/.tsbuildinfo +1 -1
  164. package/dist/esm/constants.js +42 -13
  165. package/dist/esm/cowswap-utils/constants.js +3 -0
  166. package/dist/esm/cowswap-utils/index.js +6 -0
  167. package/dist/esm/index.d.ts +1 -0
  168. package/dist/esm/index.js +1 -0
  169. package/dist/esm/swappers/AcrossSwapper/AcrossSwapper.d.ts +2 -0
  170. package/dist/esm/swappers/AcrossSwapper/AcrossSwapper.js +5 -0
  171. package/dist/esm/swappers/AcrossSwapper/constant.d.ts +9 -0
  172. package/dist/esm/swappers/AcrossSwapper/constant.js +44 -0
  173. package/dist/esm/swappers/AcrossSwapper/endpoints.d.ts +2 -0
  174. package/dist/esm/swappers/AcrossSwapper/endpoints.js +107 -0
  175. package/dist/esm/swappers/AcrossSwapper/getTradeQuote/getTradeQuote.d.ts +3 -0
  176. package/dist/esm/swappers/AcrossSwapper/getTradeQuote/getTradeQuote.js +27 -0
  177. package/dist/esm/swappers/AcrossSwapper/getTradeRate/getTradeRate.d.ts +3 -0
  178. package/dist/esm/swappers/AcrossSwapper/getTradeRate/getTradeRate.js +15 -0
  179. package/dist/esm/swappers/AcrossSwapper/index.d.ts +1 -0
  180. package/dist/esm/swappers/AcrossSwapper/index.js +1 -0
  181. package/dist/esm/swappers/AcrossSwapper/utils/acrossService.d.ts +5 -0
  182. package/dist/esm/swappers/AcrossSwapper/utils/acrossService.js +11 -0
  183. package/dist/esm/swappers/AcrossSwapper/utils/fetchAcrossTrade.d.ts +19 -0
  184. package/dist/esm/swappers/AcrossSwapper/utils/fetchAcrossTrade.js +23 -0
  185. package/dist/esm/swappers/AcrossSwapper/utils/getTrade.d.ts +11 -0
  186. package/dist/esm/swappers/AcrossSwapper/utils/getTrade.js +342 -0
  187. package/dist/esm/swappers/AcrossSwapper/utils/types.d.ts +177 -0
  188. package/dist/esm/swappers/AcrossSwapper/utils/types.js +13 -0
  189. package/dist/esm/swappers/AvnuSwapper/endpoints.js +43 -15
  190. package/dist/esm/swappers/AvnuSwapper/swapperApi/getTradeQuote.js +19 -5
  191. package/dist/esm/swappers/AvnuSwapper/swapperApi/getTradeRate.js +17 -4
  192. package/dist/esm/swappers/BebopSwapper/BebopSwapper.js +2 -0
  193. package/dist/esm/swappers/BebopSwapper/endpoints.js +36 -3
  194. package/dist/esm/swappers/BebopSwapper/executeSolanaMessage.d.ts +2 -0
  195. package/dist/esm/swappers/BebopSwapper/executeSolanaMessage.js +40 -0
  196. package/dist/esm/swappers/BebopSwapper/getBebopSolanaTradeQuote/getBebopSolanaTradeQuote.d.ts +4 -0
  197. package/dist/esm/swappers/BebopSwapper/getBebopSolanaTradeQuote/getBebopSolanaTradeQuote.js +87 -0
  198. package/dist/esm/swappers/BebopSwapper/getBebopSolanaTradeRate/getBebopSolanaTradeRate.d.ts +4 -0
  199. package/dist/esm/swappers/BebopSwapper/getBebopSolanaTradeRate/getBebopSolanaTradeRate.js +84 -0
  200. package/dist/esm/swappers/BebopSwapper/getBebopTradeQuote/getBebopTradeQuote.js +10 -0
  201. package/dist/esm/swappers/BebopSwapper/getBebopTradeRate/getBebopTradeRate.js +10 -0
  202. package/dist/esm/swappers/BebopSwapper/types.d.ts +49 -1
  203. package/dist/esm/swappers/BebopSwapper/types.js +8 -1
  204. package/dist/esm/swappers/BebopSwapper/utils/fetchFromBebop.d.ts +19 -1
  205. package/dist/esm/swappers/BebopSwapper/utils/fetchFromBebop.js +85 -2
  206. package/dist/esm/swappers/BebopSwapper/utils/helpers/helpers.d.ts +14 -2
  207. package/dist/esm/swappers/BebopSwapper/utils/helpers/helpers.js +44 -1
  208. package/dist/esm/swappers/ButterSwap/ButterSwap.js +2 -1
  209. package/dist/esm/swappers/ButterSwap/endpoints.js +56 -0
  210. package/dist/esm/swappers/ButterSwap/swapperApi/checkTradeStatus.js +20 -1
  211. package/dist/esm/swappers/ButterSwap/swapperApi/getTradeQuote.js +46 -17
  212. package/dist/esm/swappers/ButterSwap/swapperApi/getTradeQuote.test.js +1 -0
  213. package/dist/esm/swappers/ButterSwap/swapperApi/getTradeRate.js +35 -18
  214. package/dist/esm/swappers/ButterSwap/swapperApi/getTradeRate.test.js +2 -0
  215. package/dist/esm/swappers/ButterSwap/types.d.ts +1 -0
  216. package/dist/esm/swappers/ButterSwap/utils/helpers.js +1 -0
  217. package/dist/esm/swappers/ButterSwap/xhr.d.ts +2 -2
  218. package/dist/esm/swappers/ButterSwap/xhr.js +8 -3
  219. package/dist/esm/swappers/CetusSwapper/endpoints.js +3 -8
  220. package/dist/esm/swappers/CetusSwapper/swapperApi/getTradeQuote.js +11 -1
  221. package/dist/esm/swappers/CetusSwapper/swapperApi/getTradeRate.js +11 -1
  222. package/dist/esm/swappers/CetusSwapper/utils/helpers.d.ts +1 -1
  223. package/dist/esm/swappers/CetusSwapper/utils/helpers.js +1 -1
  224. package/dist/esm/swappers/ChainflipSwapper/constants.js +8 -4
  225. package/dist/esm/swappers/ChainflipSwapper/utils/getQuoteOrRate.js +29 -6
  226. package/dist/esm/swappers/ChainflipSwapper/utils/helpers.js +9 -3
  227. package/dist/esm/swappers/CowSwapper/CowSwapper.js +1 -1
  228. package/dist/esm/swappers/CowSwapper/getCowSwapTradeQuote/getCowSwapTradeQuote.js +11 -1
  229. package/dist/esm/swappers/CowSwapper/getCowSwapTradeQuote/getCowSwapTradeQuote.test.js +5 -5
  230. package/dist/esm/swappers/CowSwapper/getCowSwapTradeRate/getCowSwapTradeRate.js +10 -1
  231. package/dist/esm/swappers/CowSwapper/utils/helpers/helpers.js +9 -3
  232. package/dist/esm/swappers/DebridgeSwapper/DebridgeSwapper.d.ts +2 -0
  233. package/dist/esm/swappers/DebridgeSwapper/DebridgeSwapper.js +4 -0
  234. package/dist/esm/swappers/DebridgeSwapper/constant.d.ts +5 -0
  235. package/dist/esm/swappers/DebridgeSwapper/constant.js +30 -0
  236. package/dist/esm/swappers/DebridgeSwapper/endpoints.d.ts +2 -0
  237. package/dist/esm/swappers/DebridgeSwapper/endpoints.js +211 -0
  238. package/dist/esm/swappers/DebridgeSwapper/getTradeQuote/getTradeQuote.d.ts +3 -0
  239. package/dist/esm/swappers/DebridgeSwapper/getTradeQuote/getTradeQuote.js +27 -0
  240. package/dist/esm/swappers/DebridgeSwapper/getTradeRate/getTradeRate.d.ts +3 -0
  241. package/dist/esm/swappers/DebridgeSwapper/getTradeRate/getTradeRate.js +15 -0
  242. package/dist/esm/swappers/DebridgeSwapper/index.d.ts +1 -0
  243. package/dist/esm/swappers/DebridgeSwapper/index.js +1 -0
  244. package/dist/esm/swappers/DebridgeSwapper/utils/debridgeService.d.ts +5 -0
  245. package/dist/esm/swappers/DebridgeSwapper/utils/debridgeService.js +11 -0
  246. package/dist/esm/swappers/DebridgeSwapper/utils/fetchDebridgeSingleChainTrade.d.ts +16 -0
  247. package/dist/esm/swappers/DebridgeSwapper/utils/fetchDebridgeSingleChainTrade.js +19 -0
  248. package/dist/esm/swappers/DebridgeSwapper/utils/fetchDebridgeTrade.d.ts +20 -0
  249. package/dist/esm/swappers/DebridgeSwapper/utils/fetchDebridgeTrade.js +25 -0
  250. package/dist/esm/swappers/DebridgeSwapper/utils/getTrade.d.ts +11 -0
  251. package/dist/esm/swappers/DebridgeSwapper/utils/getTrade.js +362 -0
  252. package/dist/esm/swappers/DebridgeSwapper/utils/types.d.ts +155 -0
  253. package/dist/esm/swappers/DebridgeSwapper/utils/types.js +5 -0
  254. package/dist/esm/swappers/JupiterSwapper/swapperApi/getTradeQuote.js +33 -1
  255. package/dist/esm/swappers/JupiterSwapper/swapperApi/getTradeRate.js +9 -0
  256. package/dist/esm/swappers/MayachainSwapper/utils/poolAssetHelpers/poolAssetHelpers.js +1 -1
  257. package/dist/esm/swappers/NearIntentsSwapper/NearIntentsSwapper.js +2 -1
  258. package/dist/esm/swappers/NearIntentsSwapper/endpoints.js +31 -0
  259. package/dist/esm/swappers/NearIntentsSwapper/swapperApi/getTradeQuote.js +50 -3
  260. package/dist/esm/swappers/NearIntentsSwapper/swapperApi/getTradeRate.js +75 -3
  261. package/dist/esm/swappers/NearIntentsSwapper/types.d.ts +1 -1
  262. package/dist/esm/swappers/NearIntentsSwapper/types.js +6 -0
  263. package/dist/esm/swappers/NearIntentsSwapper/utils/helpers/helpers.js +23 -4
  264. package/dist/esm/swappers/PortalsSwapper/getPortalsTradeQuote/getPortalsTradeQuote.js +10 -0
  265. package/dist/esm/swappers/PortalsSwapper/getPortalsTradeRate/getPortalsTradeRate.js +8 -3
  266. package/dist/esm/swappers/RelaySwapper/constant.js +29 -3
  267. package/dist/esm/swappers/RelaySwapper/utils/getRelayDefaultUserAddress.d.ts +1 -1
  268. package/dist/esm/swappers/RelaySwapper/utils/getTrade.js +60 -10
  269. package/dist/esm/swappers/RelaySwapper/utils/relayTokenToAssetId.js +110 -0
  270. package/dist/esm/swappers/RelaySwapper/utils/types.d.ts +15 -0
  271. package/dist/esm/swappers/StonfiSwapper/StonfiSwapper.d.ts +2 -0
  272. package/dist/esm/swappers/StonfiSwapper/StonfiSwapper.js +5 -0
  273. package/dist/esm/swappers/StonfiSwapper/endpoints.d.ts +2 -0
  274. package/dist/esm/swappers/StonfiSwapper/endpoints.js +224 -0
  275. package/dist/esm/swappers/StonfiSwapper/index.d.ts +4 -0
  276. package/dist/esm/swappers/StonfiSwapper/index.js +4 -0
  277. package/dist/esm/swappers/StonfiSwapper/swapperApi/getTradeQuote.d.ts +2 -0
  278. package/dist/esm/swappers/StonfiSwapper/swapperApi/getTradeQuote.js +125 -0
  279. package/dist/esm/swappers/StonfiSwapper/swapperApi/getTradeRate.d.ts +2 -0
  280. package/dist/esm/swappers/StonfiSwapper/swapperApi/getTradeRate.js +111 -0
  281. package/dist/esm/swappers/StonfiSwapper/types.d.ts +60 -0
  282. package/dist/esm/swappers/StonfiSwapper/types.js +2 -0
  283. package/dist/esm/swappers/StonfiSwapper/utils/constants.d.ts +5 -0
  284. package/dist/esm/swappers/StonfiSwapper/utils/constants.js +5 -0
  285. package/dist/esm/swappers/StonfiSwapper/utils/helpers.d.ts +11 -0
  286. package/dist/esm/swappers/StonfiSwapper/utils/helpers.js +124 -0
  287. package/dist/esm/swappers/StonfiSwapper/utils/omnistonManager.d.ts +5 -0
  288. package/dist/esm/swappers/StonfiSwapper/utils/omnistonManager.js +17 -0
  289. package/dist/esm/swappers/SunioSwapper/endpoints.js +1 -1
  290. package/dist/esm/swappers/SunioSwapper/utils/getQuoteOrRate.js +15 -4
  291. package/dist/esm/swappers/ThorchainSwapper/ThorchainSwapper.js +3 -0
  292. package/dist/esm/swappers/ThorchainSwapper/endpoints.js +3 -1
  293. package/dist/esm/swappers/ThorchainSwapper/generated/generatedTradableAssetMap.json +1 -0
  294. package/dist/esm/swappers/ThorchainSwapper/utils/poolAssetHelpers/poolAssetHelpers.d.ts +1 -1
  295. package/dist/esm/swappers/ThorchainSwapper/utils/poolAssetHelpers/poolAssetHelpers.js +2 -1
  296. package/dist/esm/swappers/ThorchainSwapper/utils/poolAssetHelpers/poolAssetHelpers.test.js +11 -1
  297. package/dist/esm/swappers/ZrxSwapper/getZrxTradeQuote/getZrxTradeQuote.js +9 -0
  298. package/dist/esm/swappers/ZrxSwapper/getZrxTradeRate/getZrxTradeRate.js +9 -0
  299. package/dist/esm/swappers/ZrxSwapper/utils/helpers/helpers.d.ts +1 -1
  300. package/dist/esm/swappers/utils/affiliateFee.d.ts +17 -0
  301. package/dist/esm/swappers/utils/affiliateFee.js +39 -0
  302. package/dist/esm/swappers/utils/filterBuyAssetsBySellAssetId/filterBuyAssetsBySellAssetId.js +2 -5
  303. package/dist/esm/swappers/utils/helpers/helpers.js +4 -1
  304. package/dist/esm/thorchain-utils/getCallDataFromQuote.d.ts +1 -1
  305. package/dist/esm/thorchain-utils/getL1RateOrQuote.js +88 -10
  306. package/dist/esm/thorchain-utils/getQuote.js +9 -3
  307. package/dist/esm/thorchain-utils/index.d.ts +2 -1
  308. package/dist/esm/thorchain-utils/index.js +1 -0
  309. package/dist/esm/thorchain-utils/solana/constants.d.ts +1 -0
  310. package/dist/esm/thorchain-utils/solana/constants.js +3 -0
  311. package/dist/esm/thorchain-utils/solana/getSolanaTransactionFees.d.ts +2 -0
  312. package/dist/esm/thorchain-utils/solana/getSolanaTransactionFees.js +37 -0
  313. package/dist/esm/thorchain-utils/solana/getThorTxData.d.ts +12 -0
  314. package/dist/esm/thorchain-utils/solana/getThorTxData.js +10 -0
  315. package/dist/esm/thorchain-utils/solana/getUnsignedSolanaTransaction.d.ts +3 -0
  316. package/dist/esm/thorchain-utils/solana/getUnsignedSolanaTransaction.js +60 -0
  317. package/dist/esm/thorchain-utils/solana/index.d.ts +3 -0
  318. package/dist/esm/thorchain-utils/solana/index.js +3 -0
  319. package/dist/esm/tron-utils/getUnsignedTronTransaction.js +22 -2
  320. package/dist/esm/types.d.ts +118 -8
  321. package/dist/esm/types.js +3 -0
  322. package/dist/esm/utils.d.ts +4 -3
  323. package/dist/esm/utils.js +34 -7
  324. package/package.json +27 -24
@@ -1,11 +1,13 @@
1
1
  import { getQuotes } from '@avnu/avnu-sdk';
2
2
  import { bn } from '@shapeshiftoss/utils';
3
3
  import { Err, Ok } from '@sniptt/monads';
4
- import { getTreasuryAddressFromChainId } from '../../utils/helpers/helpers.js';
4
+ import { validateAndParseAddress } from 'starknet';
5
5
  import { v4 as uuid } from 'uuid';
6
6
  import { getDefaultSlippageDecimalPercentageForSwapper } from '../../../constants.js';
7
7
  import { SwapperName, TradeQuoteError } from '../../../types.js';
8
8
  import { getInputOutputRate, makeSwapErrorRight } from '../../../utils.js';
9
+ import { buildAffiliateFee } from '../../utils/affiliateFee.js';
10
+ import { getTreasuryAddressFromChainId } from '../../utils/helpers/helpers.js';
9
11
  import { AVNU_SUPPORTED_CHAIN_IDS } from '../utils/constants.js';
10
12
  import { getTokenAddress } from '../utils/helpers.js';
11
13
  export const getTradeQuote = async (input, deps) => {
@@ -43,11 +45,15 @@ export const getTradeQuote = async (input, deps) => {
43
45
  try {
44
46
  const sellTokenAddress = getTokenAddress(sellAsset);
45
47
  const buyTokenAddress = getTokenAddress(buyAsset);
48
+ // Normalize addresses to ensure consistent format across quote and execution
49
+ // Starknet addresses can have different representations (with/without leading zeros)
50
+ const normalizedSendAddress = validateAndParseAddress(sendAddress);
51
+ const normalizedReceiveAddress = validateAndParseAddress(receiveAddress);
46
52
  const quotes = await getQuotes({
47
53
  sellTokenAddress,
48
54
  buyTokenAddress,
49
55
  sellAmount: BigInt(sellAmount),
50
- takerAddress: sendAddress,
56
+ takerAddress: normalizedSendAddress,
51
57
  size: 1,
52
58
  integratorFees: affiliateBps ? BigInt(affiliateBps) : undefined,
53
59
  integratorFeeRecipient: getTreasuryAddressFromChainId(sellAsset.chainId),
@@ -68,10 +74,10 @@ export const getTradeQuote = async (input, deps) => {
68
74
  const buyAmountAfterFeesCryptoBaseUnit = bestQuote.buyAmount.toString();
69
75
  const sellAdapter = deps.assertGetStarknetChainAdapter(sellAsset.chainId);
70
76
  const feeData = await sellAdapter.getFeeData({
71
- to: receiveAddress,
77
+ to: normalizedReceiveAddress,
72
78
  value: sellAmount,
73
79
  chainSpecific: {
74
- from: sendAddress,
80
+ from: normalizedSendAddress,
75
81
  tokenContractAddress: sellTokenAddress,
76
82
  },
77
83
  sendMax: false,
@@ -96,7 +102,7 @@ export const getTradeQuote = async (input, deps) => {
96
102
  : {};
97
103
  const tradeQuote = {
98
104
  id: uuid(),
99
- receiveAddress,
105
+ receiveAddress: normalizedReceiveAddress,
100
106
  affiliateBps,
101
107
  rate,
102
108
  slippageTolerancePercentageDecimal: slippageTolerancePercentageDecimal ??
@@ -123,6 +129,14 @@ export const getTradeQuote = async (input, deps) => {
123
129
  quoteId: bestQuote.quoteId,
124
130
  routes: bestQuote.routes,
125
131
  },
132
+ affiliateFee: buildAffiliateFee({
133
+ strategy: 'buy_asset',
134
+ affiliateBps,
135
+ sellAsset,
136
+ buyAsset,
137
+ sellAmountCryptoBaseUnit: sellAmount,
138
+ buyAmountCryptoBaseUnit: buyAmountAfterFeesCryptoBaseUnit,
139
+ }),
126
140
  },
127
141
  ],
128
142
  };
@@ -1,11 +1,13 @@
1
1
  import { getQuotes } from '@avnu/avnu-sdk';
2
2
  import { bn } from '@shapeshiftoss/utils';
3
3
  import { Err, Ok } from '@sniptt/monads';
4
- import { getTreasuryAddressFromChainId } from '../../utils/helpers/helpers.js';
4
+ import { validateAndParseAddress } from 'starknet';
5
5
  import { v4 as uuid } from 'uuid';
6
6
  import { getDefaultSlippageDecimalPercentageForSwapper } from '../../../constants.js';
7
7
  import { SwapperName, TradeQuoteError } from '../../../types.js';
8
8
  import { getInputOutputRate, makeSwapErrorRight } from '../../../utils.js';
9
+ import { buildAffiliateFee } from '../../utils/affiliateFee.js';
10
+ import { getTreasuryAddressFromChainId } from '../../utils/helpers/helpers.js';
9
11
  import { AVNU_SUPPORTED_CHAIN_IDS } from '../utils/constants.js';
10
12
  import { getTokenAddress } from '../utils/helpers.js';
11
13
  export const getTradeRate = async (input, deps) => {
@@ -25,6 +27,9 @@ export const getTradeRate = async (input, deps) => {
25
27
  try {
26
28
  const sellTokenAddress = getTokenAddress(sellAsset);
27
29
  const buyTokenAddress = getTokenAddress(buyAsset);
30
+ // Normalize receive address if provided (for fee estimation)
31
+ // Rate quotes may not have a receive address, so this is optional
32
+ const normalizedReceiveAddress = receiveAddress ? validateAndParseAddress(receiveAddress) : '';
28
33
  const quotes = await getQuotes({
29
34
  sellTokenAddress,
30
35
  buyTokenAddress,
@@ -50,10 +55,10 @@ export const getTradeRate = async (input, deps) => {
50
55
  const sellAdapter = deps.assertGetStarknetChainAdapter(sellAsset.chainId);
51
56
  // For rate quotes, use receiveAddress as a dummy from/to for fee estimation
52
57
  const feeData = await sellAdapter.getFeeData({
53
- to: receiveAddress ?? '',
58
+ to: normalizedReceiveAddress,
54
59
  value: sellAmount,
55
60
  chainSpecific: {
56
- from: receiveAddress ?? '',
61
+ from: normalizedReceiveAddress,
57
62
  tokenContractAddress: sellTokenAddress,
58
63
  },
59
64
  sendMax: false,
@@ -78,7 +83,7 @@ export const getTradeRate = async (input, deps) => {
78
83
  : {};
79
84
  const tradeRate = {
80
85
  id: uuid(),
81
- receiveAddress,
86
+ receiveAddress: normalizedReceiveAddress || receiveAddress,
82
87
  affiliateBps,
83
88
  rate,
84
89
  slippageTolerancePercentageDecimal: slippageTolerancePercentageDecimal ??
@@ -101,6 +106,14 @@ export const getTradeRate = async (input, deps) => {
101
106
  sellAsset,
102
107
  source: SwapperName.Avnu,
103
108
  estimatedExecutionTimeMs: undefined,
109
+ affiliateFee: buildAffiliateFee({
110
+ strategy: 'buy_asset',
111
+ affiliateBps,
112
+ sellAsset,
113
+ buyAsset,
114
+ sellAmountCryptoBaseUnit: sellAmount,
115
+ buyAmountCryptoBaseUnit: buyAmountAfterFeesCryptoBaseUnit,
116
+ }),
104
117
  },
105
118
  ],
106
119
  };
@@ -1,4 +1,6 @@
1
1
  import { executeEvmTransaction } from '../../utils.js';
2
+ import { executeSolanaMessage } from './executeSolanaMessage.js';
2
3
  export const bebopSwapper = {
3
4
  executeEvmTransaction,
5
+ executeSolanaMessage,
4
6
  };
@@ -1,15 +1,27 @@
1
+ import { solanaChainId } from '@shapeshiftoss/caip';
1
2
  import { evm } from '@shapeshiftoss/chain-adapters';
2
3
  import BigNumber from 'bignumber.js';
3
4
  import { fromHex } from 'viem';
4
- import { checkEvmSwapStatus, getExecutableTradeStep, isExecutableTradeQuote } from '../../utils.js';
5
+ import { checkEvmSwapStatus, checkSolanaSwapStatus, getExecutableTradeStep, isExecutableTradeQuote, } from '../../utils.js';
6
+ import { getBebopSolanaTradeQuote } from './getBebopSolanaTradeQuote/getBebopSolanaTradeQuote.js';
7
+ import { getBebopSolanaTradeRate } from './getBebopSolanaTradeRate/getBebopSolanaTradeRate.js';
5
8
  import { getBebopTradeQuote } from './getBebopTradeQuote/getBebopTradeQuote.js';
6
9
  import { getBebopTradeRate } from './getBebopTradeRate/getBebopTradeRate.js';
10
+ import { isSolanaChainId } from './utils/helpers/helpers.js';
7
11
  export const bebopApi = {
8
12
  getTradeQuote: async (input, { assertGetEvmChainAdapter, assetsById, config }) => {
13
+ if (isSolanaChainId(input.sellAsset.chainId)) {
14
+ const tradeQuoteResult = await getBebopSolanaTradeQuote(input, assetsById, config.VITE_BEBOP_API_KEY);
15
+ return tradeQuoteResult.map(tradeQuote => [tradeQuote]);
16
+ }
9
17
  const tradeQuoteResult = await getBebopTradeQuote(input, assertGetEvmChainAdapter, assetsById, config.VITE_BEBOP_API_KEY);
10
18
  return tradeQuoteResult.map(tradeQuote => [tradeQuote]);
11
19
  },
12
20
  getTradeRate: async (input, { assertGetEvmChainAdapter, assetsById, config }) => {
21
+ if (isSolanaChainId(input.sellAsset.chainId)) {
22
+ const tradeRateResult = await getBebopSolanaTradeRate(input, assetsById, config.VITE_BEBOP_API_KEY);
23
+ return tradeRateResult.map(tradeRate => [tradeRate]);
24
+ }
13
25
  const tradeRateResult = await getBebopTradeRate(input, assertGetEvmChainAdapter, assetsById, config.VITE_BEBOP_API_KEY);
14
26
  return tradeRateResult.map(tradeRate => [tradeRate]);
15
27
  },
@@ -34,10 +46,22 @@ export const bebopApi = {
34
46
  to,
35
47
  value,
36
48
  ...feeData,
37
- // Use the higher amount of the node or the API, as the node doesn't always provide enough gas padding
38
49
  gasLimit: BigNumber.max(feeData.gasLimit, gas).toFixed(),
39
50
  });
40
51
  },
52
+ getUnsignedSolanaMessage: ({ tradeQuote, stepIndex }) => {
53
+ if (!isExecutableTradeQuote(tradeQuote))
54
+ throw new Error('Unable to execute a trade rate quote');
55
+ const step = getExecutableTradeStep(tradeQuote, stepIndex);
56
+ const { bebopSolanaSerializedTx, bebopQuoteId } = step;
57
+ if (!bebopSolanaSerializedTx || !bebopQuoteId) {
58
+ throw new Error('Bebop Solana transaction metadata is required');
59
+ }
60
+ return Promise.resolve({
61
+ serializedTx: bebopSolanaSerializedTx,
62
+ quoteId: bebopQuoteId,
63
+ });
64
+ },
41
65
  getEvmTransactionFees: async ({ from, stepIndex, tradeQuote, supportsEIP1559, assertGetEvmChainAdapter, }) => {
42
66
  if (!isExecutableTradeQuote(tradeQuote))
43
67
  throw new Error('Unable to execute a trade rate quote');
@@ -51,5 +75,14 @@ export const bebopApi = {
51
75
  const feeData = await evm.getFees({ adapter, data, to, value, from, supportsEIP1559 });
52
76
  return feeData.networkFeeCryptoBaseUnit;
53
77
  },
54
- checkTradeStatus: checkEvmSwapStatus,
78
+ checkTradeStatus: input => {
79
+ if (input.chainId === solanaChainId) {
80
+ return checkSolanaSwapStatus({
81
+ txHash: input.txHash,
82
+ address: input.address,
83
+ assertGetSolanaChainAdapter: input.assertGetSolanaChainAdapter,
84
+ });
85
+ }
86
+ return checkEvmSwapStatus(input);
87
+ },
55
88
  };
@@ -0,0 +1,2 @@
1
+ import type { SolanaMessageExecutionProps, SolanaMessageToSign, SwapperConfig } from '../../types.js';
2
+ export declare const executeSolanaMessage: (messageData: SolanaMessageToSign, { signSerializedTransaction }: SolanaMessageExecutionProps, config: SwapperConfig) => Promise<string>;
@@ -0,0 +1,40 @@
1
+ import bs58 from 'bs58';
2
+ import { bebopServiceFactory } from './utils/bebopService.js';
3
+ export const executeSolanaMessage = async (messageData, { signSerializedTransaction }, config) => {
4
+ const { serializedTx, quoteId } = messageData;
5
+ if (!serializedTx || !quoteId) {
6
+ throw new Error('Missing serializedTx or quoteId in message data');
7
+ }
8
+ const signatures = await signSerializedTransaction(serializedTx);
9
+ if (!signatures.length) {
10
+ throw new Error('No signatures returned from wallet');
11
+ }
12
+ // Find the actual non-zero user signature (skip empty placeholder slots from co-signers)
13
+ const nonZeroSigIndex = signatures.findIndex(sig => {
14
+ const bytes = Buffer.from(sig, 'base64');
15
+ return !bytes.every(b => b === 0);
16
+ });
17
+ if (nonZeroSigIndex === -1) {
18
+ throw new Error('No non-zero signatures found after signing');
19
+ }
20
+ const userSignatureBase64 = signatures[nonZeroSigIndex];
21
+ const userSignatureBytes = Buffer.from(userSignatureBase64, 'base64');
22
+ const userSignatureBase58 = bs58.encode(userSignatureBytes);
23
+ const bebopService = bebopServiceFactory({ apiKey: config.VITE_BEBOP_API_KEY });
24
+ const maybeOrderResponse = await bebopService.post('https://api.bebop.xyz/pmm/solana/v3/order', {
25
+ quote_id: quoteId,
26
+ signature: userSignatureBase58,
27
+ });
28
+ if (maybeOrderResponse.isErr()) {
29
+ const error = maybeOrderResponse.unwrapErr();
30
+ throw new Error(`Bebop order submission failed: ${error.cause ?? error.message}`);
31
+ }
32
+ const { data: orderResponse } = maybeOrderResponse.unwrap();
33
+ if (orderResponse.error) {
34
+ throw new Error(`Bebop order failed: ${orderResponse.error.message} (code ${orderResponse.error.errorCode})`);
35
+ }
36
+ if (!orderResponse.txHash) {
37
+ throw new Error(`Bebop order response missing txHash: ${JSON.stringify(orderResponse)}`);
38
+ }
39
+ return orderResponse.txHash;
40
+ };
@@ -0,0 +1,4 @@
1
+ import type { AssetsByIdPartial } from '@shapeshiftoss/types';
2
+ import type { Result } from '@sniptt/monads';
3
+ import type { GetSolanaTradeQuoteInput, SwapErrorRight, TradeQuote } from '../../../types.js';
4
+ export declare function getBebopSolanaTradeQuote(input: GetSolanaTradeQuoteInput, _assetsById: AssetsByIdPartial, apiKey: string): Promise<Result<TradeQuote, SwapErrorRight>>;
@@ -0,0 +1,87 @@
1
+ import { Err, Ok } from '@sniptt/monads';
2
+ import { v4 as uuid } from 'uuid';
3
+ import { getDefaultSlippageDecimalPercentageForSwapper } from '../../../constants.js';
4
+ import { SwapperName, TradeQuoteError } from '../../../types.js';
5
+ import { makeSwapErrorRight } from '../../../utils.js';
6
+ import { fetchBebopSolanaQuote } from '../utils/fetchFromBebop.js';
7
+ import { assertValidTrade, calculateRate, isBebopSolanaTxSafe } from '../utils/helpers/helpers.js';
8
+ export async function getBebopSolanaTradeQuote(input, _assetsById, apiKey) {
9
+ const { sellAsset, buyAsset, accountNumber, sendAddress, receiveAddress, affiliateBps, sellAmountIncludingProtocolFeesCryptoBaseUnit, } = input;
10
+ const assertion = assertValidTrade({ buyAsset, sellAsset });
11
+ if (assertion.isErr())
12
+ return Err(assertion.unwrapErr());
13
+ const takerAddress = sendAddress || receiveAddress;
14
+ if (!takerAddress) {
15
+ return Err(makeSwapErrorRight({
16
+ message: 'Cannot execute quote without a wallet address',
17
+ code: TradeQuoteError.UnknownError,
18
+ }));
19
+ }
20
+ const slippageTolerancePercentageDecimal = input.slippageTolerancePercentageDecimal ??
21
+ getDefaultSlippageDecimalPercentageForSwapper(SwapperName.Bebop);
22
+ const maybeBebopQuoteResponse = await fetchBebopSolanaQuote({
23
+ buyAsset,
24
+ sellAsset,
25
+ sellAmountIncludingProtocolFeesCryptoBaseUnit,
26
+ takerAddress,
27
+ receiverAddress: receiveAddress ?? takerAddress,
28
+ slippageTolerancePercentageDecimal,
29
+ affiliateBps,
30
+ apiKey,
31
+ });
32
+ if (maybeBebopQuoteResponse.isErr())
33
+ return Err(maybeBebopQuoteResponse.unwrapErr());
34
+ const bebopQuoteResponse = maybeBebopQuoteResponse.unwrap();
35
+ const sellTokenAddress = Object.keys(bebopQuoteResponse.sellTokens)[0];
36
+ const buyTokenAddress = Object.keys(bebopQuoteResponse.buyTokens)[0];
37
+ if (!sellTokenAddress || !buyTokenAddress) {
38
+ return Err(makeSwapErrorRight({
39
+ message: 'Invalid token addresses in response',
40
+ code: TradeQuoteError.InvalidResponse,
41
+ }));
42
+ }
43
+ if (bebopQuoteResponse.solana_tx &&
44
+ !isBebopSolanaTxSafe(bebopQuoteResponse.solana_tx, takerAddress)) {
45
+ return Err(makeSwapErrorRight({
46
+ message: 'Bebop signer index mismatch - taker not at expected position',
47
+ code: TradeQuoteError.NoRouteFound,
48
+ }));
49
+ }
50
+ const sellAmount = bebopQuoteResponse.sellTokens[sellTokenAddress].amount;
51
+ const buyAmount = bebopQuoteResponse.buyTokens[buyTokenAddress].amount;
52
+ const rate = calculateRate({ buyAmount, sellAmount, buyAsset, sellAsset });
53
+ const buyTokenData = bebopQuoteResponse.buyTokens[buyTokenAddress];
54
+ const buyAmountBeforeFeesCryptoBaseUnit = buyTokenData.amountBeforeFee || buyAmount;
55
+ const buyAmountAfterFeesCryptoBaseUnit = buyAmount;
56
+ // Bebop Solana is gasless - Bebop pays the network fees via co-signing
57
+ const networkFeeCryptoBaseUnit = '0';
58
+ return Ok({
59
+ id: uuid(),
60
+ quoteOrRate: 'quote',
61
+ receiveAddress: receiveAddress ?? takerAddress,
62
+ affiliateBps,
63
+ slippageTolerancePercentageDecimal,
64
+ rate,
65
+ swapperName: SwapperName.Bebop,
66
+ steps: [
67
+ {
68
+ estimatedExecutionTimeMs: 0,
69
+ allowanceContract: '0x0',
70
+ buyAsset,
71
+ sellAsset,
72
+ accountNumber,
73
+ rate,
74
+ feeData: {
75
+ protocolFees: {},
76
+ networkFeeCryptoBaseUnit,
77
+ },
78
+ buyAmountBeforeFeesCryptoBaseUnit,
79
+ buyAmountAfterFeesCryptoBaseUnit,
80
+ sellAmountIncludingProtocolFeesCryptoBaseUnit,
81
+ source: SwapperName.Bebop,
82
+ bebopSolanaSerializedTx: bebopQuoteResponse.solana_tx,
83
+ bebopQuoteId: bebopQuoteResponse.quoteId,
84
+ },
85
+ ],
86
+ });
87
+ }
@@ -0,0 +1,4 @@
1
+ import type { AssetsByIdPartial } from '@shapeshiftoss/types';
2
+ import type { Result } from '@sniptt/monads';
3
+ import type { GetSolanaTradeRateInput, SwapErrorRight, TradeRate } from '../../../types.js';
4
+ export declare function getBebopSolanaTradeRate(input: GetSolanaTradeRateInput, _assetsById: AssetsByIdPartial, apiKey: string): Promise<Result<TradeRate, SwapErrorRight>>;
@@ -0,0 +1,84 @@
1
+ import { Err, Ok } from '@sniptt/monads';
2
+ import { v4 as uuid } from 'uuid';
3
+ import { getDefaultSlippageDecimalPercentageForSwapper } from '../../../constants.js';
4
+ import { SwapperName, TradeQuoteError } from '../../../types.js';
5
+ import { makeSwapErrorRight } from '../../../utils.js';
6
+ import { fetchBebopSolanaPrice } from '../utils/fetchFromBebop.js';
7
+ import { assertValidTrade, calculateRate, isBebopSolanaTxSafe } from '../utils/helpers/helpers.js';
8
+ export async function getBebopSolanaTradeRate(input, _assetsById, apiKey) {
9
+ const { sellAsset, buyAsset, accountNumber, receiveAddress, affiliateBps, sellAmountIncludingProtocolFeesCryptoBaseUnit, } = input;
10
+ const assertion = assertValidTrade({ buyAsset, sellAsset });
11
+ if (assertion.isErr())
12
+ return Err(assertion.unwrapErr());
13
+ const slippageTolerancePercentageDecimal = input.slippageTolerancePercentageDecimal ??
14
+ getDefaultSlippageDecimalPercentageForSwapper(SwapperName.Bebop);
15
+ const maybeBebopPriceResponse = await fetchBebopSolanaPrice({
16
+ buyAsset,
17
+ sellAsset,
18
+ sellAmountIncludingProtocolFeesCryptoBaseUnit,
19
+ receiveAddress,
20
+ affiliateBps,
21
+ apiKey,
22
+ });
23
+ if (maybeBebopPriceResponse.isErr())
24
+ return Err(maybeBebopPriceResponse.unwrapErr());
25
+ const bebopPriceResponse = maybeBebopPriceResponse.unwrap();
26
+ const sellTokenAddress = Object.keys(bebopPriceResponse.sellTokens)[0];
27
+ const buyTokenAddress = Object.keys(bebopPriceResponse.buyTokens)[0];
28
+ if (!sellTokenAddress || !buyTokenAddress) {
29
+ return Err(makeSwapErrorRight({
30
+ message: 'Invalid token addresses in response',
31
+ code: TradeQuoteError.InvalidResponse,
32
+ }));
33
+ }
34
+ if (bebopPriceResponse.solana_tx) {
35
+ if (!receiveAddress) {
36
+ return Err(makeSwapErrorRight({
37
+ message: 'Cannot validate Bebop Solana tx without a taker address',
38
+ code: TradeQuoteError.NoRouteFound,
39
+ }));
40
+ }
41
+ if (!isBebopSolanaTxSafe(bebopPriceResponse.solana_tx, receiveAddress)) {
42
+ return Err(makeSwapErrorRight({
43
+ message: 'Bebop signer index mismatch - taker not at expected position',
44
+ code: TradeQuoteError.NoRouteFound,
45
+ }));
46
+ }
47
+ }
48
+ const sellAmount = bebopPriceResponse.sellTokens[sellTokenAddress].amount;
49
+ const buyAmount = bebopPriceResponse.buyTokens[buyTokenAddress].amount;
50
+ const rate = calculateRate({ buyAmount, sellAmount, buyAsset, sellAsset });
51
+ const buyTokenData = bebopPriceResponse.buyTokens[buyTokenAddress];
52
+ const buyAmountBeforeFeesCryptoBaseUnit = buyTokenData.amountBeforeFee || buyAmount;
53
+ const buyAmountAfterFeesCryptoBaseUnit = buyAmount;
54
+ // Bebop Solana is gasless - Bebop pays the network fees via co-signing
55
+ const networkFeeCryptoBaseUnit = '0';
56
+ return Ok({
57
+ id: uuid(),
58
+ quoteOrRate: 'rate',
59
+ accountNumber: undefined,
60
+ receiveAddress,
61
+ affiliateBps,
62
+ slippageTolerancePercentageDecimal,
63
+ rate,
64
+ swapperName: SwapperName.Bebop,
65
+ steps: [
66
+ {
67
+ estimatedExecutionTimeMs: 0,
68
+ allowanceContract: '0x0',
69
+ buyAsset,
70
+ sellAsset,
71
+ accountNumber,
72
+ rate,
73
+ feeData: {
74
+ protocolFees: {},
75
+ networkFeeCryptoBaseUnit,
76
+ },
77
+ buyAmountBeforeFeesCryptoBaseUnit,
78
+ buyAmountAfterFeesCryptoBaseUnit,
79
+ sellAmountIncludingProtocolFeesCryptoBaseUnit,
80
+ source: SwapperName.Bebop,
81
+ },
82
+ ],
83
+ });
84
+ }
@@ -6,6 +6,7 @@ import { isAddress } from 'viem';
6
6
  import { getDefaultSlippageDecimalPercentageForSwapper } from '../../../constants.js';
7
7
  import { SwapperName, TradeQuoteError } from '../../../types.js';
8
8
  import { makeSwapErrorRight } from '../../../utils.js';
9
+ import { buildAffiliateFee } from '../../utils/affiliateFee.js';
9
10
  import { isNativeEvmAsset } from '../../utils/helpers/helpers.js';
10
11
  import { BEBOP_DUMMY_ADDRESS } from '../types.js';
11
12
  import { fetchBebopQuote } from '../utils/fetchFromBebop.js';
@@ -99,6 +100,15 @@ export async function getBebopTradeQuote(input, assertGetEvmChainAdapter, _asset
99
100
  sellAmountIncludingProtocolFeesCryptoBaseUnit,
100
101
  source: SwapperName.Bebop,
101
102
  bebopTransactionMetadata: transactionMetadata,
103
+ affiliateFee: buildAffiliateFee({
104
+ strategy: 'buy_asset',
105
+ affiliateBps,
106
+ sellAsset,
107
+ buyAsset,
108
+ sellAmountCryptoBaseUnit: sellAmountIncludingProtocolFeesCryptoBaseUnit,
109
+ buyAmountCryptoBaseUnit: buyAmountAfterFeesCryptoBaseUnit,
110
+ isEstimate: true,
111
+ }),
102
112
  },
103
113
  ],
104
114
  });
@@ -6,6 +6,7 @@ import { isAddress } from 'viem';
6
6
  import { getDefaultSlippageDecimalPercentageForSwapper } from '../../../constants.js';
7
7
  import { SwapperName, TradeQuoteError } from '../../../types.js';
8
8
  import { makeSwapErrorRight } from '../../../utils.js';
9
+ import { buildAffiliateFee } from '../../utils/affiliateFee.js';
9
10
  import { isNativeEvmAsset } from '../../utils/helpers/helpers.js';
10
11
  import { fetchBebopPrice } from '../utils/fetchFromBebop.js';
11
12
  import { assertValidTrade, calculateRate } from '../utils/helpers/helpers.js';
@@ -82,6 +83,15 @@ export async function getBebopTradeRate(input, assertGetEvmChainAdapter, _assets
82
83
  buyAmountAfterFeesCryptoBaseUnit,
83
84
  sellAmountIncludingProtocolFeesCryptoBaseUnit,
84
85
  source: SwapperName.Bebop,
86
+ affiliateFee: buildAffiliateFee({
87
+ strategy: 'buy_asset',
88
+ affiliateBps,
89
+ sellAsset,
90
+ buyAsset,
91
+ sellAmountCryptoBaseUnit: sellAmountIncludingProtocolFeesCryptoBaseUnit,
92
+ buyAmountCryptoBaseUnit: buyAmountAfterFeesCryptoBaseUnit,
93
+ isEstimate: true,
94
+ }),
85
95
  },
86
96
  ],
87
97
  });
@@ -1,6 +1,7 @@
1
1
  import { KnownChainIds } from '@shapeshiftoss/types';
2
2
  import type { Address, Hex } from 'viem';
3
- export declare const bebopSupportedChainIds: readonly [KnownChainIds.EthereumMainnet, KnownChainIds.PolygonMainnet, KnownChainIds.ArbitrumMainnet, KnownChainIds.BaseMainnet, KnownChainIds.AvalancheMainnet, KnownChainIds.OptimismMainnet, KnownChainIds.BnbSmartChainMainnet];
3
+ export declare const bebopSupportedEvmChainIds: readonly [KnownChainIds.EthereumMainnet, KnownChainIds.PolygonMainnet, KnownChainIds.ArbitrumMainnet, KnownChainIds.BaseMainnet, KnownChainIds.AvalancheMainnet, KnownChainIds.OptimismMainnet, KnownChainIds.BnbSmartChainMainnet];
4
+ export declare const bebopSupportedChainIds: readonly [KnownChainIds.EthereumMainnet, KnownChainIds.PolygonMainnet, KnownChainIds.ArbitrumMainnet, KnownChainIds.BaseMainnet, KnownChainIds.AvalancheMainnet, KnownChainIds.OptimismMainnet, KnownChainIds.BnbSmartChainMainnet, KnownChainIds.SolanaMainnet];
4
5
  export type BebopSupportedChainId = (typeof bebopSupportedChainIds)[number];
5
6
  export type BebopQuoteRoute = {
6
7
  type: string;
@@ -87,3 +88,50 @@ export type BebopQuoteResponse = {
87
88
  export declare const chainIdToBebopChain: Record<BebopSupportedChainId, string>;
88
89
  export declare const BEBOP_NATIVE_MARKER = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE";
89
90
  export declare const BEBOP_DUMMY_ADDRESS: `0x${string}`;
91
+ export declare const BEBOP_SOLANA_DUMMY_ADDRESS = "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA";
92
+ export type BebopSolanaQuoteResponse = {
93
+ requestId: string;
94
+ type: string;
95
+ status: 'QUOTE_SUCCESS' | 'QUOTE_INDIC_ROUTE';
96
+ quoteId: string;
97
+ chainId: number;
98
+ approvalType: string;
99
+ nativeToken: string;
100
+ taker: string;
101
+ receiver: string;
102
+ expiry: number;
103
+ slippage: number;
104
+ gasFee: {
105
+ native: string;
106
+ usd: number;
107
+ };
108
+ buyTokens: Record<string, {
109
+ amount: string;
110
+ decimals: number;
111
+ priceUsd: number;
112
+ symbol: string;
113
+ minimumAmount: string;
114
+ price: number;
115
+ priceBeforeFee: number;
116
+ amountBeforeFee: string;
117
+ deltaFromExpected: number;
118
+ }>;
119
+ sellTokens: Record<string, {
120
+ amount: string;
121
+ decimals: number;
122
+ priceUsd: number;
123
+ symbol: string;
124
+ price: number;
125
+ priceBeforeFee: number;
126
+ }>;
127
+ settlementAddress: string;
128
+ approvalTarget: string;
129
+ requiredSignatures: string[];
130
+ priceImpact: number;
131
+ warnings: string[];
132
+ solana_tx: string;
133
+ blockhash: string;
134
+ makers: string[];
135
+ partnerFee?: Record<string, string>;
136
+ protocolFee?: Record<string, string>;
137
+ };
@@ -1,5 +1,5 @@
1
1
  import { KnownChainIds } from '@shapeshiftoss/types';
2
- export const bebopSupportedChainIds = [
2
+ export const bebopSupportedEvmChainIds = [
3
3
  KnownChainIds.EthereumMainnet,
4
4
  KnownChainIds.PolygonMainnet,
5
5
  KnownChainIds.ArbitrumMainnet,
@@ -8,6 +8,10 @@ export const bebopSupportedChainIds = [
8
8
  KnownChainIds.OptimismMainnet,
9
9
  KnownChainIds.BnbSmartChainMainnet,
10
10
  ];
11
+ export const bebopSupportedChainIds = [
12
+ ...bebopSupportedEvmChainIds,
13
+ KnownChainIds.SolanaMainnet,
14
+ ];
11
15
  export const chainIdToBebopChain = {
12
16
  [KnownChainIds.EthereumMainnet]: 'ethereum',
13
17
  [KnownChainIds.PolygonMainnet]: 'polygon',
@@ -16,9 +20,12 @@ export const chainIdToBebopChain = {
16
20
  [KnownChainIds.AvalancheMainnet]: 'avalanche',
17
21
  [KnownChainIds.OptimismMainnet]: 'optimism',
18
22
  [KnownChainIds.BnbSmartChainMainnet]: 'bsc',
23
+ [KnownChainIds.SolanaMainnet]: 'solana',
19
24
  };
20
25
  export const BEBOP_NATIVE_MARKER = '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE';
21
26
  // Dummy address used for rate quotes when no wallet is connected.
22
27
  // This is Vitalik's address, same as what Bebop's own UI uses for price-only quotes.
23
28
  // MUST NEVER be used for executable quote transactions.
24
29
  export const BEBOP_DUMMY_ADDRESS = '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045';
30
+ // Solana dummy address for rate quotes - uses the Token Program address which cannot be a real wallet
31
+ export const BEBOP_SOLANA_DUMMY_ADDRESS = 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA';
@@ -2,7 +2,7 @@ import type { Asset } from '@shapeshiftoss/types';
2
2
  import type { Result } from '@sniptt/monads';
3
3
  import type { Address } from 'viem';
4
4
  import type { SwapErrorRight } from '../../../types.js';
5
- import type { BebopQuoteResponse } from '../types.js';
5
+ import type { BebopQuoteResponse, BebopSolanaQuoteResponse } from '../types.js';
6
6
  export declare const fetchBebopQuote: ({ buyAsset, sellAsset, sellAmountIncludingProtocolFeesCryptoBaseUnit, takerAddress, receiverAddress, slippageTolerancePercentageDecimal, affiliateBps, apiKey, }: {
7
7
  buyAsset: Asset;
8
8
  sellAsset: Asset;
@@ -21,3 +21,21 @@ export declare const fetchBebopPrice: ({ buyAsset, sellAsset, sellAmountIncludin
21
21
  affiliateBps?: string | undefined;
22
22
  apiKey: string;
23
23
  }) => Promise<Result<BebopQuoteResponse, SwapErrorRight>>;
24
+ export declare const fetchBebopSolanaQuote: ({ buyAsset, sellAsset, sellAmountIncludingProtocolFeesCryptoBaseUnit, takerAddress, receiverAddress, slippageTolerancePercentageDecimal, affiliateBps, apiKey, }: {
25
+ buyAsset: Asset;
26
+ sellAsset: Asset;
27
+ sellAmountIncludingProtocolFeesCryptoBaseUnit: string;
28
+ takerAddress: string;
29
+ receiverAddress: string;
30
+ slippageTolerancePercentageDecimal: string;
31
+ affiliateBps?: string | undefined;
32
+ apiKey: string;
33
+ }) => Promise<Result<BebopSolanaQuoteResponse, SwapErrorRight>>;
34
+ export declare const fetchBebopSolanaPrice: ({ buyAsset, sellAsset, sellAmountIncludingProtocolFeesCryptoBaseUnit, receiveAddress, affiliateBps, apiKey, }: {
35
+ buyAsset: Asset;
36
+ sellAsset: Asset;
37
+ sellAmountIncludingProtocolFeesCryptoBaseUnit: string;
38
+ receiveAddress: string | undefined;
39
+ affiliateBps?: string | undefined;
40
+ apiKey: string;
41
+ }) => Promise<Result<BebopSolanaQuoteResponse, SwapErrorRight>>;