@shapeshiftoss/swapper 17.6.10 → 17.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/LICENSE.md +21 -0
  2. package/dist/cjs/.tsbuildinfo +1 -1
  3. package/dist/cjs/constants.js +11 -10
  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 -1
  7. package/dist/cjs/index.js +1 -1
  8. package/dist/cjs/solana-utils/getUnsignedSolanaTransaction.js +4 -2
  9. package/dist/cjs/swappers/AcrossSwapper/constant.js +2 -0
  10. package/dist/cjs/swappers/AcrossSwapper/utils/getTrade.js +15 -1
  11. package/dist/cjs/swappers/AvnuSwapper/swapperApi/getTradeQuote.js +12 -1
  12. package/dist/cjs/swappers/AvnuSwapper/swapperApi/getTradeRate.js +9 -0
  13. package/dist/cjs/swappers/BebopSwapper/BebopSwapper.js +2 -0
  14. package/dist/cjs/swappers/BebopSwapper/endpoints.js +35 -2
  15. package/dist/cjs/swappers/BebopSwapper/executeSolanaMessage.d.ts +2 -0
  16. package/dist/cjs/swappers/BebopSwapper/executeSolanaMessage.js +47 -0
  17. package/dist/cjs/swappers/BebopSwapper/getBebopSolanaTradeQuote/getBebopSolanaTradeQuote.d.ts +4 -0
  18. package/dist/cjs/swappers/BebopSwapper/getBebopSolanaTradeQuote/getBebopSolanaTradeQuote.js +91 -0
  19. package/dist/cjs/swappers/BebopSwapper/getBebopSolanaTradeRate/getBebopSolanaTradeRate.d.ts +4 -0
  20. package/dist/cjs/swappers/BebopSwapper/getBebopSolanaTradeRate/getBebopSolanaTradeRate.js +88 -0
  21. package/dist/cjs/swappers/BebopSwapper/getBebopTradeQuote/getBebopTradeQuote.js +10 -0
  22. package/dist/cjs/swappers/BebopSwapper/getBebopTradeRate/getBebopTradeRate.js +10 -0
  23. package/dist/cjs/swappers/BebopSwapper/types.d.ts +49 -1
  24. package/dist/cjs/swappers/BebopSwapper/types.js +9 -2
  25. package/dist/cjs/swappers/BebopSwapper/utils/fetchFromBebop.d.ts +19 -1
  26. package/dist/cjs/swappers/BebopSwapper/utils/fetchFromBebop.js +86 -1
  27. package/dist/cjs/swappers/BebopSwapper/utils/helpers/helpers.d.ts +13 -1
  28. package/dist/cjs/swappers/BebopSwapper/utils/helpers/helpers.js +47 -1
  29. package/dist/cjs/swappers/ButterSwap/swapperApi/getTradeQuote.js +17 -1
  30. package/dist/cjs/swappers/ButterSwap/swapperApi/getTradeRate.js +10 -0
  31. package/dist/cjs/swappers/CetusSwapper/swapperApi/getTradeQuote.js +10 -0
  32. package/dist/cjs/swappers/CetusSwapper/swapperApi/getTradeRate.js +10 -0
  33. package/dist/cjs/swappers/CetusSwapper/utils/helpers.d.ts +1 -1
  34. package/dist/cjs/swappers/CetusSwapper/utils/helpers.js +1 -1
  35. package/dist/cjs/swappers/ChainflipSwapper/constants.js +7 -3
  36. package/dist/cjs/swappers/ChainflipSwapper/endpoints.js +14 -4
  37. package/dist/cjs/swappers/ChainflipSwapper/types.d.ts +1 -0
  38. package/dist/cjs/swappers/ChainflipSwapper/utils/getQuoteOrRate.js +17 -0
  39. package/dist/cjs/swappers/CowSwapper/getCowSwapTradeQuote/getCowSwapTradeQuote.js +10 -0
  40. package/dist/cjs/swappers/CowSwapper/getCowSwapTradeRate/getCowSwapTradeRate.js +9 -0
  41. package/dist/cjs/swappers/DebridgeSwapper/DebridgeSwapper.d.ts +2 -0
  42. package/dist/cjs/swappers/DebridgeSwapper/DebridgeSwapper.js +7 -0
  43. package/dist/cjs/swappers/DebridgeSwapper/constant.d.ts +5 -0
  44. package/dist/cjs/swappers/DebridgeSwapper/constant.js +36 -0
  45. package/dist/cjs/swappers/{JupiterSwapper → DebridgeSwapper}/endpoints.d.ts +1 -1
  46. package/dist/cjs/swappers/DebridgeSwapper/endpoints.js +217 -0
  47. package/dist/cjs/swappers/DebridgeSwapper/getTradeQuote/getTradeQuote.js +31 -0
  48. package/dist/cjs/swappers/DebridgeSwapper/getTradeRate/getTradeRate.js +19 -0
  49. package/dist/cjs/swappers/DebridgeSwapper/index.d.ts +1 -0
  50. package/dist/cjs/swappers/DebridgeSwapper/index.js +5 -0
  51. package/dist/cjs/swappers/{JupiterSwapper/utils/jupiterService.d.ts → DebridgeSwapper/utils/debridgeService.d.ts} +1 -1
  52. package/dist/cjs/swappers/DebridgeSwapper/utils/debridgeService.js +17 -0
  53. package/dist/cjs/swappers/DebridgeSwapper/utils/fetchDebridgeSingleChainTrade.d.ts +16 -0
  54. package/dist/cjs/swappers/DebridgeSwapper/utils/fetchDebridgeSingleChainTrade.js +23 -0
  55. package/dist/cjs/swappers/DebridgeSwapper/utils/fetchDebridgeTrade.d.ts +20 -0
  56. package/dist/cjs/swappers/DebridgeSwapper/utils/fetchDebridgeTrade.js +29 -0
  57. package/dist/cjs/swappers/DebridgeSwapper/utils/getTrade.d.ts +11 -0
  58. package/dist/cjs/swappers/DebridgeSwapper/utils/getTrade.js +367 -0
  59. package/dist/cjs/swappers/DebridgeSwapper/utils/types.d.ts +155 -0
  60. package/dist/cjs/swappers/DebridgeSwapper/utils/types.js +9 -0
  61. package/dist/cjs/swappers/MayachainSwapper/utils/poolAssetHelpers/poolAssetHelpers.js +1 -1
  62. package/dist/cjs/swappers/NearIntentsSwapper/swapperApi/getTradeQuote.js +12 -0
  63. package/dist/cjs/swappers/NearIntentsSwapper/swapperApi/getTradeRate.js +12 -0
  64. package/dist/cjs/swappers/PortalsSwapper/getPortalsTradeQuote/getPortalsTradeQuote.js +10 -0
  65. package/dist/cjs/swappers/RelaySwapper/constant.js +7 -10
  66. package/dist/cjs/swappers/RelaySwapper/endpoints.js +1 -1
  67. package/dist/cjs/swappers/RelaySwapper/utils/getTrade.js +56 -7
  68. package/dist/cjs/swappers/RelaySwapper/utils/relayTokenToAssetId.js +22 -7
  69. package/dist/cjs/swappers/StonfiSwapper/swapperApi/getTradeQuote.js +12 -1
  70. package/dist/cjs/swappers/StonfiSwapper/swapperApi/getTradeRate.js +10 -0
  71. package/dist/cjs/swappers/SunioSwapper/utils/getQuoteOrRate.js +10 -0
  72. package/dist/cjs/swappers/ThorchainSwapper/ThorchainSwapper.js +3 -0
  73. package/dist/cjs/swappers/ThorchainSwapper/endpoints.js +2 -0
  74. package/dist/cjs/swappers/ThorchainSwapper/generated/generatedTradableAssetMap.json +1 -0
  75. package/dist/cjs/swappers/ThorchainSwapper/utils/poolAssetHelpers/poolAssetHelpers.d.ts +1 -1
  76. package/dist/cjs/swappers/ThorchainSwapper/utils/poolAssetHelpers/poolAssetHelpers.js +2 -1
  77. package/dist/cjs/swappers/ThorchainSwapper/utils/poolAssetHelpers/poolAssetHelpers.test.js +10 -0
  78. package/dist/cjs/swappers/ZrxSwapper/getZrxTradeQuote/getZrxTradeQuote.js +9 -0
  79. package/dist/cjs/swappers/ZrxSwapper/getZrxTradeRate/getZrxTradeRate.js +9 -0
  80. package/dist/cjs/swappers/utils/affiliateFee.d.ts +17 -0
  81. package/dist/cjs/swappers/utils/affiliateFee.js +43 -0
  82. package/dist/cjs/thorchain-utils/getL1RateOrQuote.js +57 -4
  83. package/dist/cjs/thorchain-utils/index.d.ts +2 -1
  84. package/dist/cjs/thorchain-utils/index.js +2 -1
  85. package/dist/cjs/thorchain-utils/solana/constants.d.ts +1 -0
  86. package/dist/cjs/thorchain-utils/solana/constants.js +6 -0
  87. package/dist/cjs/thorchain-utils/solana/getSolanaTransactionFees.d.ts +2 -0
  88. package/dist/cjs/thorchain-utils/solana/getSolanaTransactionFees.js +41 -0
  89. package/dist/cjs/thorchain-utils/solana/getThorTxData.d.ts +12 -0
  90. package/dist/cjs/thorchain-utils/solana/getThorTxData.js +14 -0
  91. package/dist/cjs/thorchain-utils/solana/getUnsignedSolanaTransaction.d.ts +3 -0
  92. package/dist/cjs/thorchain-utils/solana/getUnsignedSolanaTransaction.js +64 -0
  93. package/dist/cjs/thorchain-utils/solana/index.d.ts +3 -0
  94. package/dist/cjs/{swappers/JupiterSwapper → thorchain-utils/solana}/index.js +3 -2
  95. package/dist/cjs/tron-utils/getUnsignedTronTransaction.js +16 -0
  96. package/dist/cjs/types.d.ts +47 -11
  97. package/dist/cjs/types.js +1 -1
  98. package/dist/cjs/utils.d.ts +3 -0
  99. package/dist/cjs/utils.js +9 -3
  100. package/dist/esm/.tsbuildinfo +1 -1
  101. package/dist/esm/constants.js +11 -10
  102. package/dist/esm/cowswap-utils/constants.js +3 -0
  103. package/dist/esm/cowswap-utils/index.js +6 -0
  104. package/dist/esm/index.d.ts +1 -1
  105. package/dist/esm/index.js +1 -1
  106. package/dist/esm/solana-utils/getUnsignedSolanaTransaction.js +3 -1
  107. package/dist/esm/swappers/AcrossSwapper/constant.js +4 -2
  108. package/dist/esm/swappers/AcrossSwapper/utils/getTrade.js +15 -1
  109. package/dist/esm/swappers/AvnuSwapper/swapperApi/getTradeQuote.js +12 -1
  110. package/dist/esm/swappers/AvnuSwapper/swapperApi/getTradeRate.js +9 -0
  111. package/dist/esm/swappers/BebopSwapper/BebopSwapper.js +2 -0
  112. package/dist/esm/swappers/BebopSwapper/endpoints.js +36 -3
  113. package/dist/esm/swappers/BebopSwapper/executeSolanaMessage.d.ts +2 -0
  114. package/dist/esm/swappers/BebopSwapper/executeSolanaMessage.js +40 -0
  115. package/dist/esm/swappers/BebopSwapper/getBebopSolanaTradeQuote/getBebopSolanaTradeQuote.d.ts +4 -0
  116. package/dist/esm/swappers/BebopSwapper/getBebopSolanaTradeQuote/getBebopSolanaTradeQuote.js +87 -0
  117. package/dist/esm/swappers/BebopSwapper/getBebopSolanaTradeRate/getBebopSolanaTradeRate.d.ts +4 -0
  118. package/dist/esm/swappers/BebopSwapper/getBebopSolanaTradeRate/getBebopSolanaTradeRate.js +84 -0
  119. package/dist/esm/swappers/BebopSwapper/getBebopTradeQuote/getBebopTradeQuote.js +10 -0
  120. package/dist/esm/swappers/BebopSwapper/getBebopTradeRate/getBebopTradeRate.js +10 -0
  121. package/dist/esm/swappers/BebopSwapper/types.d.ts +49 -1
  122. package/dist/esm/swappers/BebopSwapper/types.js +8 -1
  123. package/dist/esm/swappers/BebopSwapper/utils/fetchFromBebop.d.ts +19 -1
  124. package/dist/esm/swappers/BebopSwapper/utils/fetchFromBebop.js +85 -2
  125. package/dist/esm/swappers/BebopSwapper/utils/helpers/helpers.d.ts +13 -1
  126. package/dist/esm/swappers/BebopSwapper/utils/helpers/helpers.js +44 -1
  127. package/dist/esm/swappers/ButterSwap/swapperApi/getTradeQuote.js +17 -1
  128. package/dist/esm/swappers/ButterSwap/swapperApi/getTradeRate.js +10 -0
  129. package/dist/esm/swappers/CetusSwapper/swapperApi/getTradeQuote.js +10 -0
  130. package/dist/esm/swappers/CetusSwapper/swapperApi/getTradeRate.js +10 -0
  131. package/dist/esm/swappers/CetusSwapper/utils/helpers.d.ts +1 -1
  132. package/dist/esm/swappers/CetusSwapper/utils/helpers.js +1 -1
  133. package/dist/esm/swappers/ChainflipSwapper/constants.js +8 -4
  134. package/dist/esm/swappers/ChainflipSwapper/endpoints.js +14 -4
  135. package/dist/esm/swappers/ChainflipSwapper/types.d.ts +1 -0
  136. package/dist/esm/swappers/ChainflipSwapper/utils/getQuoteOrRate.js +17 -0
  137. package/dist/esm/swappers/CowSwapper/getCowSwapTradeQuote/getCowSwapTradeQuote.js +10 -0
  138. package/dist/esm/swappers/CowSwapper/getCowSwapTradeRate/getCowSwapTradeRate.js +9 -0
  139. package/dist/esm/swappers/{JupiterSwapper/JupiterSwapper.d.ts → DebridgeSwapper/DebridgeSwapper.d.ts} +1 -1
  140. package/dist/esm/swappers/DebridgeSwapper/DebridgeSwapper.js +4 -0
  141. package/dist/esm/swappers/DebridgeSwapper/constant.d.ts +5 -0
  142. package/dist/esm/swappers/DebridgeSwapper/constant.js +30 -0
  143. package/dist/esm/swappers/{JupiterSwapper → DebridgeSwapper}/endpoints.d.ts +1 -1
  144. package/dist/esm/swappers/DebridgeSwapper/endpoints.js +211 -0
  145. package/dist/esm/swappers/DebridgeSwapper/getTradeQuote/getTradeQuote.js +27 -0
  146. package/dist/esm/swappers/DebridgeSwapper/getTradeRate/getTradeRate.js +15 -0
  147. package/dist/esm/swappers/DebridgeSwapper/index.d.ts +1 -0
  148. package/dist/esm/swappers/DebridgeSwapper/index.js +1 -0
  149. package/dist/esm/swappers/{JupiterSwapper/utils/jupiterService.d.ts → DebridgeSwapper/utils/debridgeService.d.ts} +1 -1
  150. package/dist/esm/swappers/DebridgeSwapper/utils/debridgeService.js +11 -0
  151. package/dist/esm/swappers/DebridgeSwapper/utils/fetchDebridgeSingleChainTrade.d.ts +16 -0
  152. package/dist/esm/swappers/DebridgeSwapper/utils/fetchDebridgeSingleChainTrade.js +19 -0
  153. package/dist/esm/swappers/DebridgeSwapper/utils/fetchDebridgeTrade.d.ts +20 -0
  154. package/dist/esm/swappers/DebridgeSwapper/utils/fetchDebridgeTrade.js +25 -0
  155. package/dist/esm/swappers/DebridgeSwapper/utils/getTrade.d.ts +11 -0
  156. package/dist/esm/swappers/DebridgeSwapper/utils/getTrade.js +360 -0
  157. package/dist/esm/swappers/DebridgeSwapper/utils/types.d.ts +155 -0
  158. package/dist/esm/swappers/DebridgeSwapper/utils/types.js +5 -0
  159. package/dist/esm/swappers/MayachainSwapper/utils/poolAssetHelpers/poolAssetHelpers.js +1 -1
  160. package/dist/esm/swappers/NearIntentsSwapper/swapperApi/getTradeQuote.js +14 -2
  161. package/dist/esm/swappers/NearIntentsSwapper/swapperApi/getTradeRate.js +14 -2
  162. package/dist/esm/swappers/PortalsSwapper/getPortalsTradeQuote/getPortalsTradeQuote.js +10 -0
  163. package/dist/esm/swappers/RelaySwapper/constant.js +9 -12
  164. package/dist/esm/swappers/RelaySwapper/endpoints.js +2 -2
  165. package/dist/esm/swappers/RelaySwapper/utils/getTrade.js +59 -10
  166. package/dist/esm/swappers/RelaySwapper/utils/relayTokenToAssetId.js +22 -7
  167. package/dist/esm/swappers/StonfiSwapper/swapperApi/getTradeQuote.js +12 -1
  168. package/dist/esm/swappers/StonfiSwapper/swapperApi/getTradeRate.js +10 -0
  169. package/dist/esm/swappers/SunioSwapper/utils/getQuoteOrRate.js +10 -0
  170. package/dist/esm/swappers/ThorchainSwapper/ThorchainSwapper.js +3 -0
  171. package/dist/esm/swappers/ThorchainSwapper/endpoints.js +3 -1
  172. package/dist/esm/swappers/ThorchainSwapper/generated/generatedTradableAssetMap.json +1 -0
  173. package/dist/esm/swappers/ThorchainSwapper/utils/poolAssetHelpers/poolAssetHelpers.d.ts +1 -1
  174. package/dist/esm/swappers/ThorchainSwapper/utils/poolAssetHelpers/poolAssetHelpers.js +2 -1
  175. package/dist/esm/swappers/ThorchainSwapper/utils/poolAssetHelpers/poolAssetHelpers.test.js +11 -1
  176. package/dist/esm/swappers/ZrxSwapper/getZrxTradeQuote/getZrxTradeQuote.js +9 -0
  177. package/dist/esm/swappers/ZrxSwapper/getZrxTradeRate/getZrxTradeRate.js +9 -0
  178. package/dist/esm/swappers/utils/affiliateFee.d.ts +17 -0
  179. package/dist/esm/swappers/utils/affiliateFee.js +39 -0
  180. package/dist/esm/thorchain-utils/getL1RateOrQuote.js +57 -4
  181. package/dist/esm/thorchain-utils/index.d.ts +2 -1
  182. package/dist/esm/thorchain-utils/index.js +1 -0
  183. package/dist/esm/thorchain-utils/solana/constants.d.ts +1 -0
  184. package/dist/esm/thorchain-utils/solana/constants.js +3 -0
  185. package/dist/esm/thorchain-utils/solana/getSolanaTransactionFees.d.ts +2 -0
  186. package/dist/esm/thorchain-utils/solana/getSolanaTransactionFees.js +37 -0
  187. package/dist/esm/thorchain-utils/solana/getThorTxData.d.ts +12 -0
  188. package/dist/esm/thorchain-utils/solana/getThorTxData.js +10 -0
  189. package/dist/esm/thorchain-utils/solana/getUnsignedSolanaTransaction.d.ts +3 -0
  190. package/dist/esm/thorchain-utils/solana/getUnsignedSolanaTransaction.js +60 -0
  191. package/dist/esm/thorchain-utils/solana/index.d.ts +3 -0
  192. package/dist/esm/thorchain-utils/solana/index.js +3 -0
  193. package/dist/esm/tron-utils/getUnsignedTronTransaction.js +16 -0
  194. package/dist/esm/types.d.ts +47 -11
  195. package/dist/esm/types.js +1 -1
  196. package/dist/esm/utils.d.ts +3 -0
  197. package/dist/esm/utils.js +7 -2
  198. package/package.json +19 -19
  199. package/dist/cjs/swappers/JupiterSwapper/JupiterSwapper.d.ts +0 -2
  200. package/dist/cjs/swappers/JupiterSwapper/JupiterSwapper.js +0 -27
  201. package/dist/cjs/swappers/JupiterSwapper/endpoints.js +0 -15
  202. package/dist/cjs/swappers/JupiterSwapper/errorPatterns.d.ts +0 -15
  203. package/dist/cjs/swappers/JupiterSwapper/errorPatterns.js +0 -29
  204. package/dist/cjs/swappers/JupiterSwapper/idls/referral.d.ts +0 -739
  205. package/dist/cjs/swappers/JupiterSwapper/idls/referral.js +0 -741
  206. package/dist/cjs/swappers/JupiterSwapper/index.d.ts +0 -2
  207. package/dist/cjs/swappers/JupiterSwapper/swapperApi/getTradeQuote.js +0 -191
  208. package/dist/cjs/swappers/JupiterSwapper/swapperApi/getTradeRate.js +0 -172
  209. package/dist/cjs/swappers/JupiterSwapper/utils/constants.d.ts +0 -9
  210. package/dist/cjs/swappers/JupiterSwapper/utils/constants.js +0 -14
  211. package/dist/cjs/swappers/JupiterSwapper/utils/helpers.d.ts +0 -56
  212. package/dist/cjs/swappers/JupiterSwapper/utils/helpers.js +0 -178
  213. package/dist/cjs/swappers/JupiterSwapper/utils/jupiterService.js +0 -15
  214. package/dist/esm/swappers/JupiterSwapper/JupiterSwapper.js +0 -24
  215. package/dist/esm/swappers/JupiterSwapper/endpoints.js +0 -12
  216. package/dist/esm/swappers/JupiterSwapper/errorPatterns.d.ts +0 -15
  217. package/dist/esm/swappers/JupiterSwapper/errorPatterns.js +0 -25
  218. package/dist/esm/swappers/JupiterSwapper/idls/referral.d.ts +0 -739
  219. package/dist/esm/swappers/JupiterSwapper/idls/referral.js +0 -738
  220. package/dist/esm/swappers/JupiterSwapper/index.d.ts +0 -2
  221. package/dist/esm/swappers/JupiterSwapper/index.js +0 -2
  222. package/dist/esm/swappers/JupiterSwapper/swapperApi/getTradeQuote.js +0 -187
  223. package/dist/esm/swappers/JupiterSwapper/swapperApi/getTradeRate.js +0 -168
  224. package/dist/esm/swappers/JupiterSwapper/utils/constants.d.ts +0 -9
  225. package/dist/esm/swappers/JupiterSwapper/utils/constants.js +0 -11
  226. package/dist/esm/swappers/JupiterSwapper/utils/helpers.d.ts +0 -56
  227. package/dist/esm/swappers/JupiterSwapper/utils/helpers.js +0 -169
  228. package/dist/esm/swappers/JupiterSwapper/utils/jupiterService.js +0 -12
  229. /package/dist/cjs/swappers/{JupiterSwapper/swapperApi → DebridgeSwapper/getTradeQuote}/getTradeQuote.d.ts +0 -0
  230. /package/dist/cjs/swappers/{JupiterSwapper/swapperApi → DebridgeSwapper/getTradeRate}/getTradeRate.d.ts +0 -0
  231. /package/dist/esm/swappers/{JupiterSwapper/swapperApi → DebridgeSwapper/getTradeQuote}/getTradeQuote.d.ts +0 -0
  232. /package/dist/esm/swappers/{JupiterSwapper/swapperApi → DebridgeSwapper/getTradeRate}/getTradeRate.d.ts +0 -0
@@ -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,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BEBOP_DUMMY_ADDRESS = exports.BEBOP_NATIVE_MARKER = exports.chainIdToBebopChain = exports.bebopSupportedChainIds = void 0;
3
+ exports.BEBOP_SOLANA_DUMMY_ADDRESS = exports.BEBOP_DUMMY_ADDRESS = exports.BEBOP_NATIVE_MARKER = exports.chainIdToBebopChain = exports.bebopSupportedChainIds = exports.bebopSupportedEvmChainIds = void 0;
4
4
  const types_1 = require("@shapeshiftoss/types");
5
- exports.bebopSupportedChainIds = [
5
+ exports.bebopSupportedEvmChainIds = [
6
6
  types_1.KnownChainIds.EthereumMainnet,
7
7
  types_1.KnownChainIds.PolygonMainnet,
8
8
  types_1.KnownChainIds.ArbitrumMainnet,
@@ -11,6 +11,10 @@ exports.bebopSupportedChainIds = [
11
11
  types_1.KnownChainIds.OptimismMainnet,
12
12
  types_1.KnownChainIds.BnbSmartChainMainnet,
13
13
  ];
14
+ exports.bebopSupportedChainIds = [
15
+ ...exports.bebopSupportedEvmChainIds,
16
+ types_1.KnownChainIds.SolanaMainnet,
17
+ ];
14
18
  exports.chainIdToBebopChain = {
15
19
  [types_1.KnownChainIds.EthereumMainnet]: 'ethereum',
16
20
  [types_1.KnownChainIds.PolygonMainnet]: 'polygon',
@@ -19,9 +23,12 @@ exports.chainIdToBebopChain = {
19
23
  [types_1.KnownChainIds.AvalancheMainnet]: 'avalanche',
20
24
  [types_1.KnownChainIds.OptimismMainnet]: 'optimism',
21
25
  [types_1.KnownChainIds.BnbSmartChainMainnet]: 'bsc',
26
+ [types_1.KnownChainIds.SolanaMainnet]: 'solana',
22
27
  };
23
28
  exports.BEBOP_NATIVE_MARKER = '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE';
24
29
  // Dummy address used for rate quotes when no wallet is connected.
25
30
  // This is Vitalik's address, same as what Bebop's own UI uses for price-only quotes.
26
31
  // MUST NEVER be used for executable quote transactions.
27
32
  exports.BEBOP_DUMMY_ADDRESS = '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045';
33
+ // Solana dummy address for rate quotes - uses the Token Program address which cannot be a real wallet
34
+ exports.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';
5
- import type { BebopQuoteResponse } from '../types';
5
+ import type { BebopQuoteResponse, BebopSolanaQuoteResponse } from '../types';
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>>;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.fetchBebopPrice = exports.fetchBebopQuote = void 0;
3
+ exports.fetchBebopSolanaPrice = exports.fetchBebopSolanaQuote = exports.fetchBebopPrice = exports.fetchBebopQuote = void 0;
4
4
  const utils_1 = require("@shapeshiftoss/utils");
5
5
  const monads_1 = require("@sniptt/monads");
6
6
  const viem_1 = require("viem");
@@ -91,3 +91,88 @@ const fetchBebopPrice = ({ buyAsset, sellAsset, sellAmountIncludingProtocolFeesC
91
91
  });
92
92
  };
93
93
  exports.fetchBebopPrice = fetchBebopPrice;
94
+ const fetchBebopSolanaQuote = async ({ buyAsset, sellAsset, sellAmountIncludingProtocolFeesCryptoBaseUnit, takerAddress, receiverAddress, slippageTolerancePercentageDecimal, affiliateBps, apiKey, }) => {
95
+ try {
96
+ const sellToken = (0, helpers_1.assetIdToBebopSolanaToken)(sellAsset.assetId);
97
+ const buyToken = (0, helpers_1.assetIdToBebopSolanaToken)(buyAsset.assetId);
98
+ const sellAmountFormatted = (0, utils_1.bn)(sellAmountIncludingProtocolFeesCryptoBaseUnit).toFixed(0);
99
+ const slippagePercentage = (0, utils_1.bn)(slippageTolerancePercentageDecimal ?? 0.003)
100
+ .times(100)
101
+ .toNumber();
102
+ const url = 'https://api.bebop.xyz/pmm/solana/v3/quote';
103
+ const params = new URLSearchParams({
104
+ sell_tokens: sellToken,
105
+ buy_tokens: buyToken,
106
+ sell_amounts: sellAmountFormatted,
107
+ taker_address: takerAddress,
108
+ receiver_address: receiverAddress,
109
+ slippage: slippagePercentage.toString(),
110
+ approval_type: 'Standard',
111
+ skip_validation: 'false',
112
+ gasless: 'true',
113
+ source: 'shapeshift',
114
+ });
115
+ if (affiliateBps && affiliateBps !== '0') {
116
+ params.set('fee', affiliateBps);
117
+ }
118
+ const bebopService = (0, bebopService_1.bebopServiceFactory)({ apiKey });
119
+ const maybeResponse = await bebopService.get(`${url}?${params}`);
120
+ if (maybeResponse.isErr()) {
121
+ const err = maybeResponse.unwrapErr();
122
+ return (0, monads_1.Err)((0, utils_2.makeSwapErrorRight)({
123
+ message: 'Failed to fetch quote from Bebop Solana',
124
+ cause: err.cause,
125
+ code: types_1.TradeQuoteError.QueryFailed,
126
+ }));
127
+ }
128
+ const response = maybeResponse.unwrap();
129
+ if (response.data.status !== 'QUOTE_SUCCESS') {
130
+ return (0, monads_1.Err)((0, utils_2.makeSwapErrorRight)({
131
+ message: `Bebop Solana quote not executable: ${response.data.status}`,
132
+ code: types_1.TradeQuoteError.InvalidResponse,
133
+ }));
134
+ }
135
+ if (!response.data.solana_tx) {
136
+ return (0, monads_1.Err)((0, utils_2.makeSwapErrorRight)({
137
+ message: 'Missing solana_tx in response',
138
+ code: types_1.TradeQuoteError.InvalidResponse,
139
+ }));
140
+ }
141
+ // Reject routes containing ANY AMM/CLMM makers - these produce malformed txs
142
+ // (wrong signature count in wire format) and require pre-existing ATAs that
143
+ // Bebop's gasless co-signed flow can't create. This includes mixed routes
144
+ // like ["raydium clmm-rfqm", "🦊"] where Bebop serializes the tx with fewer
145
+ // signature slots than the message header requires.
146
+ // When rejected, other swappers like Jupiter will handle these pairs instead.
147
+ const hasAmmRoute = response.data.makers.some(maker => maker.toLowerCase().includes('clmm') || maker.toLowerCase().includes('amm'));
148
+ if (hasAmmRoute) {
149
+ return (0, monads_1.Err)((0, utils_2.makeSwapErrorRight)({
150
+ message: `Bebop Solana quote contains AMM routing (${response.data.makers.join(', ')}), which produces malformed txs`,
151
+ code: types_1.TradeQuoteError.NoRouteFound,
152
+ }));
153
+ }
154
+ return (0, monads_1.Ok)(response.data);
155
+ }
156
+ catch (error) {
157
+ return (0, monads_1.Err)((0, utils_2.makeSwapErrorRight)({
158
+ message: 'Unexpected error fetching Bebop Solana quote',
159
+ cause: error,
160
+ code: types_1.TradeQuoteError.QueryFailed,
161
+ }));
162
+ }
163
+ };
164
+ exports.fetchBebopSolanaQuote = fetchBebopSolanaQuote;
165
+ const fetchBebopSolanaPrice = ({ buyAsset, sellAsset, sellAmountIncludingProtocolFeesCryptoBaseUnit, receiveAddress, affiliateBps, apiKey, }) => {
166
+ const address = receiveAddress || types_2.BEBOP_SOLANA_DUMMY_ADDRESS;
167
+ return (0, exports.fetchBebopSolanaQuote)({
168
+ buyAsset,
169
+ sellAsset,
170
+ sellAmountIncludingProtocolFeesCryptoBaseUnit,
171
+ takerAddress: address,
172
+ receiverAddress: address,
173
+ slippageTolerancePercentageDecimal: '0.01',
174
+ affiliateBps,
175
+ apiKey,
176
+ });
177
+ };
178
+ exports.fetchBebopSolanaPrice = fetchBebopSolanaPrice;
@@ -1,11 +1,23 @@
1
1
  import type { AssetId, ChainId } from '@shapeshiftoss/caip';
2
2
  import type { Asset } from '@shapeshiftoss/types';
3
+ export declare const isSolanaChainId: (chainId: ChainId) => boolean;
3
4
  export declare const assetIdToBebopToken: (assetId: AssetId) => string;
4
- export declare const isSupportedChainId: (chainId: ChainId) => chainId is import("@shapeshiftoss/types").KnownChainIds.EthereumMainnet | import("@shapeshiftoss/types").KnownChainIds.AvalancheMainnet | import("@shapeshiftoss/types").KnownChainIds.OptimismMainnet | import("@shapeshiftoss/types").KnownChainIds.BnbSmartChainMainnet | import("@shapeshiftoss/types").KnownChainIds.PolygonMainnet | import("@shapeshiftoss/types").KnownChainIds.ArbitrumMainnet | import("@shapeshiftoss/types").KnownChainIds.BaseMainnet;
5
+ export declare const assetIdToBebopSolanaToken: (assetId: AssetId) => string;
6
+ export declare const isSupportedChainId: (chainId: ChainId) => chainId is import("@shapeshiftoss/types").KnownChainIds.EthereumMainnet | import("@shapeshiftoss/types").KnownChainIds.AvalancheMainnet | import("@shapeshiftoss/types").KnownChainIds.OptimismMainnet | import("@shapeshiftoss/types").KnownChainIds.BnbSmartChainMainnet | import("@shapeshiftoss/types").KnownChainIds.PolygonMainnet | import("@shapeshiftoss/types").KnownChainIds.ArbitrumMainnet | import("@shapeshiftoss/types").KnownChainIds.BaseMainnet | import("@shapeshiftoss/types").KnownChainIds.SolanaMainnet;
5
7
  export declare const assertValidTrade: ({ buyAsset, sellAsset, }: {
6
8
  buyAsset: Asset;
7
9
  sellAsset: Asset;
8
10
  }) => import("@sniptt/monads/build/result/result").ResErr<unknown, import("../../../../types").SwapErrorRight> | import("@sniptt/monads/build/result/result").ResOk<boolean, never>;
11
+ /**
12
+ * Bebop's /order endpoint has a bug where it hardcodes the taker signature placement
13
+ * at the last signer index. When the taker's pubkey bytes sort before the maker's,
14
+ * the taker ends up at an earlier index, and Bebop places the sig in the wrong slot.
15
+ * This causes ghost txs (order returns "Success" but tx silently fails on-chain).
16
+ *
17
+ * Returns true if the taker is at the expected index (safe to execute), false otherwise.
18
+ * Returns false on decode failure.
19
+ */
20
+ export declare const isBebopSolanaTxSafe: (solanaTxBase64: string, takerAddress: string) => boolean;
9
21
  export declare const calculateRate: ({ buyAmount, sellAmount, buyAsset, sellAsset, }: {
10
22
  buyAmount: string;
11
23
  sellAmount: string;
@@ -1,13 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.calculateRate = exports.assertValidTrade = exports.isSupportedChainId = exports.assetIdToBebopToken = void 0;
3
+ exports.calculateRate = exports.isBebopSolanaTxSafe = exports.assertValidTrade = exports.isSupportedChainId = exports.assetIdToBebopSolanaToken = exports.assetIdToBebopToken = exports.isSolanaChainId = void 0;
4
4
  const caip_1 = require("@shapeshiftoss/caip");
5
5
  const utils_1 = require("@shapeshiftoss/utils");
6
6
  const monads_1 = require("@sniptt/monads");
7
+ const web3_js_1 = require("@solana/web3.js");
7
8
  const viem_1 = require("viem");
8
9
  const types_1 = require("../../../../types");
9
10
  const utils_2 = require("../../../../utils");
10
11
  const types_2 = require("../../types");
12
+ const isSolanaChainId = (chainId) => {
13
+ return chainId === caip_1.solanaChainId;
14
+ };
15
+ exports.isSolanaChainId = isSolanaChainId;
11
16
  const assetIdToBebopToken = (assetId) => {
12
17
  if (!(0, utils_1.isToken)(assetId))
13
18
  return types_2.BEBOP_NATIVE_MARKER;
@@ -15,6 +20,14 @@ const assetIdToBebopToken = (assetId) => {
15
20
  return (0, viem_1.getAddress)(assetReference);
16
21
  };
17
22
  exports.assetIdToBebopToken = assetIdToBebopToken;
23
+ const assetIdToBebopSolanaToken = (assetId) => {
24
+ const { assetReference, chainId } = (0, caip_1.fromAssetId)(assetId);
25
+ if (chainId === caip_1.solanaChainId && !(0, utils_1.isToken)(assetId)) {
26
+ return 'So11111111111111111111111111111111111111112';
27
+ }
28
+ return assetReference;
29
+ };
30
+ exports.assetIdToBebopSolanaToken = assetIdToBebopSolanaToken;
18
31
  const isSupportedChainId = (chainId) => {
19
32
  return types_2.bebopSupportedChainIds.includes(chainId);
20
33
  };
@@ -46,6 +59,39 @@ const assertValidTrade = ({ buyAsset, sellAsset, }) => {
46
59
  return (0, monads_1.Ok)(true);
47
60
  };
48
61
  exports.assertValidTrade = assertValidTrade;
62
+ /**
63
+ * Bebop's /order endpoint has a bug where it hardcodes the taker signature placement
64
+ * at the last signer index. When the taker's pubkey bytes sort before the maker's,
65
+ * the taker ends up at an earlier index, and Bebop places the sig in the wrong slot.
66
+ * This causes ghost txs (order returns "Success" but tx silently fails on-chain).
67
+ *
68
+ * Returns true if the taker is at the expected index (safe to execute), false otherwise.
69
+ * Returns false on decode failure.
70
+ */
71
+ const isBebopSolanaTxSafe = (solanaTxBase64, takerAddress) => {
72
+ try {
73
+ const tx = web3_js_1.VersionedTransaction.deserialize(Buffer.from(solanaTxBase64, 'base64'));
74
+ const numSigners = tx.message.header.numRequiredSignatures;
75
+ if (numSigners < 1) {
76
+ console.warn('[Bebop Solana] Transaction has no required signers. Rejecting as malformed.');
77
+ return false;
78
+ }
79
+ const signerKeys = tx.message.staticAccountKeys.slice(0, numSigners);
80
+ const takerPubkey = new web3_js_1.PublicKey(takerAddress);
81
+ const takerIndex = signerKeys.findIndex(key => key.equals(takerPubkey));
82
+ const expectedIndex = numSigners - 1; // Bebop hardcodes to last signer slot
83
+ if (takerIndex !== expectedIndex) {
84
+ console.warn(`[Bebop Solana] Taker signer index ${takerIndex}, expected ${expectedIndex}. Rejecting to avoid ghost tx.`);
85
+ return false;
86
+ }
87
+ return true;
88
+ }
89
+ catch (e) {
90
+ console.error(`[Bebop Solana] Failed to decode tx for signer check: ${e.message}`);
91
+ return false;
92
+ }
93
+ };
94
+ exports.isBebopSolanaTxSafe = isBebopSolanaTxSafe;
49
95
  const calculateRate = ({ buyAmount, sellAmount, buyAsset, sellAsset, }) => {
50
96
  return (0, utils_1.convertPrecision)({
51
97
  value: buyAmount,
@@ -9,6 +9,7 @@ const web3_js_1 = require("@solana/web3.js");
9
9
  const constants_1 = require("../../../constants");
10
10
  const types_1 = require("../../../types");
11
11
  const utils_2 = require("../../../utils");
12
+ const affiliateFee_1 = require("../../utils/affiliateFee");
12
13
  const constants_2 = require("../utils/constants");
13
14
  const xhr_1 = require("../xhr");
14
15
  const getTradeQuote = async (input, _deps) => {
@@ -125,7 +126,12 @@ const getTradeQuote = async (input, _deps) => {
125
126
  if (sellAsset.chainId !== caip_1.solanaChainId)
126
127
  return (0, monads_1.Ok)(undefined);
127
128
  const txData = buildTx.data.startsWith('0x') ? buildTx.data.slice(2) : buildTx.data;
128
- const versionedTransaction = web3_js_1.VersionedTransaction.deserialize(new Uint8Array(Buffer.from(txData, 'hex')));
129
+ const txBytes = Buffer.from(txData, 'hex');
130
+ // Solana transactions are limited to 1232 bytes. If Butter returns a larger tx,
131
+ // we need to split it into a Jito bundle (2 txs with tip in the last one).
132
+ const SOLANA_TX_SIZE_LIMIT = 1232;
133
+ const isOversized = txBytes.length > SOLANA_TX_SIZE_LIMIT;
134
+ const versionedTransaction = web3_js_1.VersionedTransaction.deserialize(new Uint8Array(txBytes));
129
135
  const adapter = _deps.assertGetSolanaChainAdapter(sellAsset.chainId);
130
136
  try {
131
137
  const addressLookupTableAccountKeys = versionedTransaction.message.addressTableLookups.map(lookup => lookup.accountKey.toString());
@@ -144,6 +150,7 @@ const getTradeQuote = async (input, _deps) => {
144
150
  return (0, monads_1.Ok)({
145
151
  instructions,
146
152
  addressLookupTableAddresses: addressLookupTableAccountKeys,
153
+ isOversized,
147
154
  });
148
155
  }
149
156
  catch (error) {
@@ -187,6 +194,15 @@ const getTradeQuote = async (input, _deps) => {
187
194
  ...(solanaTransactionMetadata && {
188
195
  solanaTransactionMetadata,
189
196
  }),
197
+ affiliateFee: (0, affiliateFee_1.buildAffiliateFee)({
198
+ strategy: 'buy_asset',
199
+ affiliateBps,
200
+ sellAsset,
201
+ buyAsset,
202
+ sellAmountCryptoBaseUnit: sellAmountIncludingProtocolFeesCryptoBaseUnit,
203
+ buyAmountCryptoBaseUnit: buyAmountAfterFeesCryptoBaseUnit,
204
+ isEstimate: true,
205
+ }),
190
206
  };
191
207
  const tradeQuote = {
192
208
  id: route.hash,
@@ -8,6 +8,7 @@ const monads_1 = require("@sniptt/monads");
8
8
  const constants_1 = require("../../../constants");
9
9
  const types_1 = require("../../../types");
10
10
  const utils_2 = require("../../../utils");
11
+ const affiliateFee_1 = require("../../utils/affiliateFee");
11
12
  const constants_2 = require("../utils/constants");
12
13
  const xhr_1 = require("../xhr");
13
14
  const getTradeRate = async (input, _deps) => {
@@ -110,6 +111,15 @@ const getTradeRate = async (input, _deps) => {
110
111
  accountNumber,
111
112
  allowanceContract: route.contract ?? '0x0',
112
113
  estimatedExecutionTimeMs: route.timeEstimated * 1000,
114
+ affiliateFee: (0, affiliateFee_1.buildAffiliateFee)({
115
+ strategy: 'buy_asset',
116
+ affiliateBps,
117
+ sellAsset,
118
+ buyAsset,
119
+ sellAmountCryptoBaseUnit: sellAmountIncludingProtocolFeesCryptoBaseUnit,
120
+ buyAmountCryptoBaseUnit: buyAmountAfterFeesCryptoBaseUnit,
121
+ isEstimate: true,
122
+ }),
113
123
  };
114
124
  const tradeRate = {
115
125
  id: route.hash,
@@ -8,6 +8,7 @@ const uuid_1 = require("uuid");
8
8
  const constants_1 = require("../../../constants");
9
9
  const types_1 = require("../../../types");
10
10
  const utils_2 = require("../../../utils");
11
+ const affiliateFee_1 = require("../../utils/affiliateFee");
11
12
  const helpers_1 = require("../utils/helpers");
12
13
  const getCetusTradeData_1 = require("./getCetusTradeData");
13
14
  const getTradeQuote = async (input, deps) => {
@@ -81,6 +82,15 @@ const getTradeQuote = async (input, deps) => {
81
82
  sellAsset,
82
83
  allowanceContract: '0x0',
83
84
  estimatedExecutionTimeMs: undefined,
85
+ affiliateFee: (0, affiliateFee_1.buildAffiliateFee)({
86
+ strategy: 'buy_asset',
87
+ affiliateBps,
88
+ sellAsset,
89
+ buyAsset,
90
+ sellAmountCryptoBaseUnit: sellAmount,
91
+ buyAmountCryptoBaseUnit: buyAmountAfterFeesCryptoBaseUnit,
92
+ isEstimate: true,
93
+ }),
84
94
  },
85
95
  ],
86
96
  };
@@ -8,6 +8,7 @@ const uuid_1 = require("uuid");
8
8
  const constants_1 = require("../../../constants");
9
9
  const types_1 = require("../../../types");
10
10
  const utils_2 = require("../../../utils");
11
+ const affiliateFee_1 = require("../../utils/affiliateFee");
11
12
  const helpers_1 = require("../utils/helpers");
12
13
  const getCetusTradeData_1 = require("./getCetusTradeData");
13
14
  const getTradeRate = async (input, deps) => {
@@ -79,6 +80,15 @@ const getTradeRate = async (input, deps) => {
79
80
  sellAsset,
80
81
  allowanceContract: '0x0',
81
82
  estimatedExecutionTimeMs: undefined,
83
+ affiliateFee: (0, affiliateFee_1.buildAffiliateFee)({
84
+ strategy: 'buy_asset',
85
+ affiliateBps,
86
+ sellAsset,
87
+ buyAsset,
88
+ sellAmountCryptoBaseUnit: sellAmount,
89
+ buyAmountCryptoBaseUnit: buyAmountAfterFeesCryptoBaseUnit,
90
+ isEstimate: true,
91
+ }),
82
92
  },
83
93
  ],
84
94
  };
@@ -1,6 +1,6 @@
1
1
  import type { RouterDataV3 } from '@cetusprotocol/aggregator-sdk';
2
2
  import { AggregatorClient } from '@cetusprotocol/aggregator-sdk';
3
- import { SuiClient } from '@cetusprotocol/aggregator-sdk/node_modules/@mysten/sui/client';
3
+ import { SuiClient } from '@mysten/sui/client';
4
4
  import type { Asset } from '@shapeshiftoss/types';
5
5
  export declare const getAggregatorClient: (rpcUrl: string) => AggregatorClient;
6
6
  export declare const getSuiClient: (rpcUrl: string) => SuiClient;
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.findBestRoute = exports.getCoinType = exports.getSuiClient = exports.getAggregatorClient = void 0;
4
4
  const aggregator_sdk_1 = require("@cetusprotocol/aggregator-sdk");
5
- const client_1 = require("@cetusprotocol/aggregator-sdk/node_modules/@mysten/sui/client");
5
+ const client_1 = require("@mysten/sui/client");
6
6
  const caip_1 = require("@shapeshiftoss/caip");
7
7
  let suiClientInstance;
8
8
  let aggregatorClientInstance;
@@ -14,10 +14,14 @@ exports.ChainflipSupportedChainIds = [
14
14
  types_1.KnownChainIds.SolanaMainnet,
15
15
  ];
16
16
  exports.ChainflipSupportedAssetIdsByChainId = {
17
- [types_1.KnownChainIds.EthereumMainnet]: [caip_1.ethAssetId, caip_1.flipAssetId, caip_1.usdcAssetId, caip_1.usdtAssetId],
18
- [types_1.KnownChainIds.ArbitrumMainnet]: [caip_1.arbitrumAssetId, caip_1.usdcOnArbitrumOneAssetId],
17
+ [types_1.KnownChainIds.EthereumMainnet]: [caip_1.ethAssetId, caip_1.flipAssetId, caip_1.usdcAssetId, caip_1.usdtAssetId, caip_1.wbtcAssetId],
18
+ [types_1.KnownChainIds.ArbitrumMainnet]: [
19
+ caip_1.arbitrumAssetId,
20
+ caip_1.usdcOnArbitrumOneAssetId,
21
+ caip_1.usdtOnArbitrumOneAssetId,
22
+ ],
19
23
  [types_1.KnownChainIds.BitcoinMainnet]: [caip_1.btcAssetId],
20
- [types_1.KnownChainIds.SolanaMainnet]: [caip_1.solAssetId, caip_1.usdcOnSolanaAssetId],
24
+ [types_1.KnownChainIds.SolanaMainnet]: [caip_1.solAssetId, caip_1.usdcOnSolanaAssetId, caip_1.usdtOnSolanaAssetId],
21
25
  };
22
26
  exports.chainIdToChainflipNetwork = {
23
27
  [types_1.KnownChainIds.EthereumMainnet]: types_3.ChainflipNetwork.Ethereum,
@@ -126,6 +126,9 @@ exports.chainflipApi = {
126
126
  value,
127
127
  chainSpecific: { from, tokenId },
128
128
  });
129
+ // Chainflip deposit addresses are program-owned accounts that require more compute
130
+ // than a regular SOL transfer. Apply a safety margin to avoid "Computational budget exceeded".
131
+ const computeUnits = Math.ceil(Math.max(Number(fast.chainSpecific.computeUnits), 50_000) * 1.6);
129
132
  return adapter.buildSendApiTransaction({
130
133
  to,
131
134
  from,
@@ -133,7 +136,7 @@ exports.chainflipApi = {
133
136
  accountNumber,
134
137
  chainSpecific: {
135
138
  tokenId,
136
- computeUnitLimit: fast.chainSpecific.computeUnits,
139
+ computeUnitLimit: String(computeUnits),
137
140
  computeUnitPrice: fast.chainSpecific.priorityFee,
138
141
  },
139
142
  });
@@ -156,11 +159,16 @@ exports.chainflipApi = {
156
159
  tokenId: (0, utils_1.contractAddressOrUndefined)(sellAsset.assetId),
157
160
  },
158
161
  });
159
- return fast.txFee;
162
+ // Mirror the same compute budget boost as getUnsignedSolanaTransaction
163
+ // to avoid underquoting fees for Chainflip deposit addresses
164
+ const simulatedUnits = Number(fast.chainSpecific.computeUnits);
165
+ const boostedUnits = Math.ceil(Math.max(simulatedUnits, 50_000) * 1.6);
166
+ const ratio = simulatedUnits > 0 ? boostedUnits / simulatedUnits : 1;
167
+ return String(Math.ceil(Number(fast.txFee) * ratio));
160
168
  },
161
169
  checkTradeStatus: async ({ config, swap }) => {
162
170
  const chainflipSwapId = swap?.metadata.chainflipSwapId;
163
- if (!chainflipSwapId)
171
+ if (chainflipSwapId == null)
164
172
  throw Error(`chainflipSwapId is required`);
165
173
  const brokerUrl = config.VITE_CHAINFLIP_API_URL;
166
174
  const apiKey = config.VITE_CHAINFLIP_API_KEY;
@@ -174,13 +182,14 @@ exports.chainflipApi = {
174
182
  };
175
183
  }
176
184
  const { data: statusResponse } = maybeStatusResponse.unwrap();
177
- const { status: { swapEgress }, } = statusResponse;
185
+ const { status: { swapEgress, swapId }, } = statusResponse;
178
186
  // Assume no outbound Tx is a pending Tx
179
187
  if (!swapEgress?.transactionReference) {
180
188
  return {
181
189
  buyTxHash: undefined,
182
190
  status: unchained_client_1.TxStatus.Pending,
183
191
  message: (0, getLatestChainflipStatusMessage_1.getLatestChainflipStatusMessage)(statusResponse),
192
+ chainflipSwapId: swapId ?? undefined,
184
193
  };
185
194
  }
186
195
  // Assume as soon as we have an outbound Tx, the swap is complete.
@@ -189,6 +198,7 @@ exports.chainflipApi = {
189
198
  buyTxHash: swapEgress.transactionReference,
190
199
  status: unchained_client_1.TxStatus.Confirmed,
191
200
  message: undefined,
201
+ chainflipSwapId: swapId ?? undefined,
192
202
  };
193
203
  },
194
204
  };
@@ -3,6 +3,7 @@ import type { ChainflipBaasStatusSwap } from './models/ChainflipBaasStatusSwap';
3
3
  export type ChainFlipStatus = {
4
4
  status: {
5
5
  state: 'waiting' | 'receiving' | 'swapping' | 'sending' | 'sent' | 'completed' | 'failed';
6
+ swapId?: string;
6
7
  swap?: ChainflipBaasStatusSwap;
7
8
  swapEgress?: ChainflipBaasStatusEgress;
8
9
  };
@@ -8,6 +8,7 @@ const uuid_1 = require("uuid");
8
8
  const constants_1 = require("../../../constants");
9
9
  const types_1 = require("../../../types");
10
10
  const utils_2 = require("../../../utils");
11
+ const affiliateFee_1 = require("../../utils/affiliateFee");
11
12
  const constants_2 = require("../constants");
12
13
  const chainflipService_1 = require("./chainflipService");
13
14
  const getEvmTxFees_1 = require("./getEvmTxFees");
@@ -242,6 +243,14 @@ const getQuoteOrRate = async (input, deps) => {
242
243
  : undefined,
243
244
  chainflipMaxBoostFee: getMaxBoostFee(),
244
245
  },
246
+ affiliateFee: (0, affiliateFee_1.buildAffiliateFee)({
247
+ strategy: 'buy_asset',
248
+ affiliateBps: commissionBps,
249
+ sellAsset,
250
+ buyAsset,
251
+ sellAmountCryptoBaseUnit: singleQuoteResponse.boostQuote.ingressAmountNative,
252
+ buyAmountCryptoBaseUnit: singleQuoteResponse.boostQuote.egressAmountNative,
253
+ }),
245
254
  },
246
255
  ],
247
256
  };
@@ -293,6 +302,14 @@ const getQuoteOrRate = async (input, deps) => {
293
302
  : undefined,
294
303
  chainflipMaxBoostFee: 0,
295
304
  },
305
+ affiliateFee: (0, affiliateFee_1.buildAffiliateFee)({
306
+ strategy: 'buy_asset',
307
+ affiliateBps: commissionBps,
308
+ sellAsset,
309
+ buyAsset,
310
+ sellAmountCryptoBaseUnit: singleQuoteResponse.ingressAmountNative ?? '0',
311
+ buyAmountCryptoBaseUnit: singleQuoteResponse.egressAmountNative ?? '0',
312
+ }),
296
313
  },
297
314
  ],
298
315
  };
@@ -11,6 +11,7 @@ const cowswap_utils_1 = require("../../../cowswap-utils");
11
11
  const constants_2 = require("../../../cowswap-utils/constants");
12
12
  const types_2 = require("../../../types");
13
13
  const utils_2 = require("../../../utils");
14
+ const affiliateFee_1 = require("../../utils/affiliateFee");
14
15
  const helpers_1 = require("../../utils/helpers/helpers");
15
16
  const cowService_1 = require("../utils/cowService");
16
17
  const helpers_2 = require("../utils/helpers/helpers");
@@ -116,6 +117,15 @@ async function getCowSwapTradeQuote(input, config) {
116
117
  buyAmountBeforeFeesCryptoBaseUnit,
117
118
  buyAmountAfterFeesCryptoBaseUnit,
118
119
  source: types_2.SwapperName.CowSwap,
120
+ affiliateFee: (0, affiliateFee_1.buildAffiliateFee)({
121
+ strategy: 'buy_asset',
122
+ affiliateBps,
123
+ sellAsset,
124
+ buyAsset,
125
+ sellAmountCryptoBaseUnit: sellAmountIncludingProtocolFeesCryptoBaseUnit,
126
+ buyAmountCryptoBaseUnit: buyAmountAfterFeesCryptoBaseUnit,
127
+ isEstimate: true,
128
+ }),
119
129
  buyAsset,
120
130
  sellAsset,
121
131
  accountNumber,
@@ -11,6 +11,7 @@ const cowswap_utils_1 = require("../../../cowswap-utils");
11
11
  const constants_2 = require("../../../cowswap-utils/constants");
12
12
  const types_2 = require("../../../types");
13
13
  const utils_2 = require("../../../utils");
14
+ const affiliateFee_1 = require("../../utils/affiliateFee");
14
15
  const helpers_1 = require("../../utils/helpers/helpers");
15
16
  const cowService_1 = require("../utils/cowService");
16
17
  const helpers_2 = require("../utils/helpers/helpers");
@@ -116,6 +117,14 @@ async function getCowSwapTradeRate(input, config) {
116
117
  buyAmountBeforeFeesCryptoBaseUnit,
117
118
  buyAmountAfterFeesCryptoBaseUnit,
118
119
  source: types_2.SwapperName.CowSwap,
120
+ affiliateFee: (0, affiliateFee_1.buildAffiliateFee)({
121
+ strategy: 'buy_asset',
122
+ affiliateBps,
123
+ sellAsset,
124
+ buyAsset,
125
+ sellAmountCryptoBaseUnit: sellAmountIncludingProtocolFeesCryptoBaseUnit,
126
+ buyAmountCryptoBaseUnit: buyAmountAfterFeesCryptoBaseUnit,
127
+ }),
119
128
  buyAsset,
120
129
  sellAsset,
121
130
  accountNumber,
@@ -0,0 +1,2 @@
1
+ import type { Swapper } from '../../types';
2
+ export declare const debridgeSwapper: Swapper;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.debridgeSwapper = void 0;
4
+ const utils_1 = require("../../utils");
5
+ exports.debridgeSwapper = {
6
+ executeEvmTransaction: utils_1.executeEvmTransaction,
7
+ };