@shapeshiftoss/swapper 20.3.0 → 20.5.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 (327) hide show
  1. package/dist/cjs/.tsbuildinfo +1 -1
  2. package/dist/cjs/constants.js +21 -0
  3. package/dist/cjs/index.d.ts +3 -0
  4. package/dist/cjs/index.js +3 -0
  5. package/dist/cjs/swappers/AcrossSwapper/utils/getAcrossStepData.js +7 -15
  6. package/dist/cjs/swappers/ArbitrumBridgeSwapper/getTradeQuote/getTradeQuote.js +0 -2
  7. package/dist/cjs/swappers/AvnuSwapper/endpoints.js +17 -12
  8. package/dist/cjs/swappers/AvnuSwapper/swapperApi/getTradeQuote.js +1 -2
  9. package/dist/cjs/swappers/BebopSwapper/utils/fetchFromBebop.d.ts +2 -1
  10. package/dist/cjs/swappers/BebopSwapper/utils/fetchFromBebop.js +21 -15
  11. package/dist/cjs/swappers/BebopSwapper/utils/getBebopSolanaTradeContext.js +1 -0
  12. package/dist/cjs/swappers/BebopSwapper/utils/getBebopStepData.js +17 -22
  13. package/dist/cjs/swappers/BobGatewaySwapper/swapperApi/getTradeQuote.js +0 -2
  14. package/dist/cjs/swappers/ButterSwap/swapperApi/getTradeQuote.js +0 -2
  15. package/dist/cjs/swappers/ButterSwap/swapperApi/getTradeQuote.test.js +1 -0
  16. package/dist/cjs/swappers/ButterSwap/swapperApi/getTradeRate.test.js +1 -0
  17. package/dist/cjs/swappers/ButterSwap/utils/getButterSwapStepData.js +3 -4
  18. package/dist/cjs/swappers/ButterSwap/utils/getButterSwapStepData.test.js +2 -2
  19. package/dist/cjs/swappers/CetusSwapper/endpoints.js +2 -3
  20. package/dist/cjs/swappers/CetusSwapper/swapperApi/getCetusStepData.js +13 -8
  21. package/dist/cjs/swappers/CetusSwapper/swapperApi/getCetusTradeContext.js +1 -2
  22. package/dist/cjs/swappers/CetusSwapper/swapperApi/getTradeQuote.js +0 -2
  23. package/dist/cjs/swappers/CetusSwapper/utils/constants.d.ts +0 -1
  24. package/dist/cjs/swappers/CetusSwapper/utils/constants.js +1 -2
  25. package/dist/cjs/swappers/CetusSwapper/utils/helpers.d.ts +3 -3
  26. package/dist/cjs/swappers/CetusSwapper/utils/helpers.js +6 -17
  27. package/dist/cjs/swappers/ChainflipSwapper/swapperApi/getTradeQuote.js +1 -2
  28. package/dist/cjs/swappers/ChainflipSwapper/types.d.ts +1 -0
  29. package/dist/cjs/swappers/DebridgeSwapper/getTradeQuote/getTradeQuote.js +0 -2
  30. package/dist/cjs/swappers/DebridgeSwapper/utils/getDebridgeStepData.d.ts +0 -1
  31. package/dist/cjs/swappers/DebridgeSwapper/utils/getDebridgeStepData.js +9 -16
  32. package/dist/cjs/swappers/DebridgeSwapper/utils/getDebridgeTradeContext.js +0 -3
  33. package/dist/cjs/swappers/FyndSwapper/FyndSwapper.d.ts +2 -0
  34. package/dist/cjs/swappers/FyndSwapper/FyndSwapper.js +5 -0
  35. package/dist/cjs/swappers/FyndSwapper/endpoints.d.ts +2 -0
  36. package/dist/cjs/swappers/FyndSwapper/endpoints.js +14 -0
  37. package/dist/cjs/swappers/FyndSwapper/getTradeQuote/getTradeQuote.d.ts +4 -0
  38. package/dist/cjs/swappers/FyndSwapper/getTradeQuote/getTradeQuote.js +43 -0
  39. package/dist/cjs/swappers/FyndSwapper/getTradeRate/getTradeRate.d.ts +4 -0
  40. package/dist/cjs/swappers/FyndSwapper/getTradeRate/getTradeRate.js +34 -0
  41. package/dist/cjs/swappers/FyndSwapper/index.d.ts +2 -0
  42. package/dist/cjs/swappers/FyndSwapper/index.js +7 -0
  43. package/dist/cjs/swappers/FyndSwapper/types.d.ts +41 -0
  44. package/dist/cjs/swappers/FyndSwapper/types.js +2 -0
  45. package/dist/cjs/swappers/FyndSwapper/utils/constants.d.ts +33 -0
  46. package/dist/cjs/swappers/FyndSwapper/utils/constants.js +38 -0
  47. package/dist/cjs/swappers/FyndSwapper/utils/fetchFromFynd.d.ts +13 -0
  48. package/dist/cjs/swappers/FyndSwapper/utils/fetchFromFynd.js +42 -0
  49. package/dist/cjs/swappers/FyndSwapper/utils/fyndService.d.ts +5 -0
  50. package/dist/cjs/swappers/FyndSwapper/utils/fyndService.js +9 -0
  51. package/dist/cjs/swappers/FyndSwapper/utils/getFyndStepData.d.ts +25 -0
  52. package/dist/cjs/swappers/FyndSwapper/utils/getFyndStepData.js +46 -0
  53. package/dist/cjs/swappers/FyndSwapper/utils/getFyndTradeContext.d.ts +18 -0
  54. package/dist/cjs/swappers/FyndSwapper/utils/getFyndTradeContext.js +94 -0
  55. package/dist/cjs/swappers/FyndSwapper/utils/helpers.d.ts +24 -0
  56. package/dist/cjs/swappers/FyndSwapper/utils/helpers.js +174 -0
  57. package/dist/cjs/swappers/FyndSwapper/utils/helpers.test.d.ts +1 -0
  58. package/dist/cjs/swappers/FyndSwapper/utils/helpers.test.js +101 -0
  59. package/dist/cjs/swappers/KyberSwapper/KyberSwapper.d.ts +2 -0
  60. package/dist/cjs/swappers/KyberSwapper/KyberSwapper.js +5 -0
  61. package/dist/cjs/swappers/KyberSwapper/endpoints.d.ts +2 -0
  62. package/dist/cjs/swappers/KyberSwapper/endpoints.js +14 -0
  63. package/dist/cjs/swappers/KyberSwapper/index.d.ts +2 -0
  64. package/dist/cjs/swappers/KyberSwapper/index.js +7 -0
  65. package/dist/cjs/swappers/KyberSwapper/swapperApi/getKyberTradeQuote.d.ts +4 -0
  66. package/dist/cjs/swappers/KyberSwapper/swapperApi/getKyberTradeQuote.js +64 -0
  67. package/dist/cjs/swappers/KyberSwapper/swapperApi/getKyberTradeRate.d.ts +4 -0
  68. package/dist/cjs/swappers/KyberSwapper/swapperApi/getKyberTradeRate.js +31 -0
  69. package/dist/cjs/swappers/KyberSwapper/types.d.ts +62 -0
  70. package/dist/cjs/swappers/KyberSwapper/types.js +2 -0
  71. package/dist/cjs/swappers/KyberSwapper/utils/constants.d.ts +21 -0
  72. package/dist/cjs/swappers/KyberSwapper/utils/constants.js +24 -0
  73. package/dist/cjs/swappers/KyberSwapper/utils/fetchFromKyber.d.ts +23 -0
  74. package/dist/cjs/swappers/KyberSwapper/utils/fetchFromKyber.js +38 -0
  75. package/dist/cjs/swappers/KyberSwapper/utils/getKyberStepData.d.ts +27 -0
  76. package/dist/cjs/swappers/KyberSwapper/utils/getKyberStepData.js +47 -0
  77. package/dist/cjs/swappers/KyberSwapper/utils/getKyberStepData.test.d.ts +1 -0
  78. package/dist/cjs/swappers/KyberSwapper/utils/getKyberStepData.test.js +92 -0
  79. package/dist/cjs/swappers/KyberSwapper/utils/getKyberTradeContext.d.ts +20 -0
  80. package/dist/cjs/swappers/KyberSwapper/utils/getKyberTradeContext.js +63 -0
  81. package/dist/cjs/swappers/KyberSwapper/utils/helpers.d.ts +27 -0
  82. package/dist/cjs/swappers/KyberSwapper/utils/helpers.js +172 -0
  83. package/dist/cjs/swappers/KyberSwapper/utils/helpers.test.d.ts +1 -0
  84. package/dist/cjs/swappers/KyberSwapper/utils/helpers.test.js +110 -0
  85. package/dist/cjs/swappers/KyberSwapper/utils/kyberService.d.ts +5 -0
  86. package/dist/cjs/swappers/KyberSwapper/utils/kyberService.js +9 -0
  87. package/dist/cjs/swappers/MayachainSwapper/generated/generatedTradableAssetMap.json +0 -1
  88. package/dist/cjs/swappers/NearIntentsSwapper/NearIntentsSwapper.js +1 -0
  89. package/dist/cjs/swappers/NearIntentsSwapper/endpoints.js +13 -14
  90. package/dist/cjs/swappers/NearIntentsSwapper/swapperApi/getTradeRate.js +1 -1
  91. package/dist/cjs/swappers/NearIntentsSwapper/types.d.ts +4 -4
  92. package/dist/cjs/swappers/NearIntentsSwapper/types.js +2 -0
  93. package/dist/cjs/swappers/NearIntentsSwapper/utils/getNearIntentsStepData.js +28 -0
  94. package/dist/cjs/swappers/NearIntentsSwapper/utils/helpers.js +2 -2
  95. package/dist/cjs/swappers/PortalsSwapper/endpoints.js +4 -1
  96. package/dist/cjs/swappers/PortalsSwapper/getPortalsTradeQuote/getPortalsTradeQuote.js +1 -1
  97. package/dist/cjs/swappers/PortalsSwapper/utils/getPortalsStepData.js +36 -55
  98. package/dist/cjs/swappers/PortalsSwapper/utils/getPortalsStepData.test.js +2 -2
  99. package/dist/cjs/swappers/RelaySwapper/getTradeQuote/getTradeQuote.js +2 -3
  100. package/dist/cjs/swappers/RelaySwapper/utils/getRelayStepData.js +7 -15
  101. package/dist/cjs/swappers/RelaySwapper/utils/getRelayTradeContext.d.ts +1 -0
  102. package/dist/cjs/swappers/RelaySwapper/utils/getRelayTradeContext.js +4 -0
  103. package/dist/cjs/swappers/RelaySwapper/utils/relayStatus.js +3 -3
  104. package/dist/cjs/swappers/RelaySwapper/utils/types.d.ts +9 -4
  105. package/dist/cjs/swappers/SymbiosisSwapper/SymbiosisSwapper.d.ts +2 -0
  106. package/dist/cjs/swappers/SymbiosisSwapper/SymbiosisSwapper.js +8 -0
  107. package/dist/cjs/swappers/SymbiosisSwapper/endpoints.d.ts +2 -0
  108. package/dist/cjs/swappers/SymbiosisSwapper/endpoints.js +66 -0
  109. package/dist/cjs/swappers/SymbiosisSwapper/getTradeQuote/getTradeQuote.d.ts +4 -0
  110. package/dist/cjs/swappers/SymbiosisSwapper/getTradeQuote/getTradeQuote.js +42 -0
  111. package/dist/cjs/swappers/SymbiosisSwapper/getTradeRate/getTradeRate.d.ts +4 -0
  112. package/dist/cjs/swappers/SymbiosisSwapper/getTradeRate/getTradeRate.js +34 -0
  113. package/dist/cjs/swappers/SymbiosisSwapper/index.d.ts +2 -0
  114. package/dist/cjs/swappers/SymbiosisSwapper/index.js +7 -0
  115. package/dist/cjs/swappers/SymbiosisSwapper/utils/constants.d.ts +19 -0
  116. package/dist/cjs/swappers/SymbiosisSwapper/utils/constants.js +64 -0
  117. package/dist/cjs/swappers/SymbiosisSwapper/utils/getSymbiosisStepData.d.ts +26 -0
  118. package/dist/cjs/swappers/SymbiosisSwapper/utils/getSymbiosisStepData.js +106 -0
  119. package/dist/cjs/swappers/SymbiosisSwapper/utils/getSymbiosisStepData.test.d.ts +1 -0
  120. package/dist/cjs/swappers/SymbiosisSwapper/utils/getSymbiosisStepData.test.js +161 -0
  121. package/dist/cjs/swappers/SymbiosisSwapper/utils/getSymbiosisTradeContext.d.ts +17 -0
  122. package/dist/cjs/swappers/SymbiosisSwapper/utils/getSymbiosisTradeContext.js +146 -0
  123. package/dist/cjs/swappers/SymbiosisSwapper/utils/helpers.d.ts +38 -0
  124. package/dist/cjs/swappers/SymbiosisSwapper/utils/helpers.js +172 -0
  125. package/dist/cjs/swappers/SymbiosisSwapper/utils/helpers.test.d.ts +1 -0
  126. package/dist/cjs/swappers/SymbiosisSwapper/utils/helpers.test.js +151 -0
  127. package/dist/cjs/swappers/SymbiosisSwapper/utils/symbiosisService.d.ts +5 -0
  128. package/dist/cjs/swappers/SymbiosisSwapper/utils/symbiosisService.js +18 -0
  129. package/dist/cjs/swappers/SymbiosisSwapper/utils/types.d.ts +83 -0
  130. package/dist/cjs/swappers/SymbiosisSwapper/utils/types.js +11 -0
  131. package/dist/cjs/swappers/ThorchainSwapper/generated/generatedThorLongtailTokens.json +1 -0
  132. package/dist/cjs/swappers/ThorchainSwapper/generated/generatedTradableAssetMap.json +1 -0
  133. package/dist/cjs/swappers/ThorchainSwapper/getTradeQuote/getTradeQuote.test.js +2 -2
  134. package/dist/cjs/swappers/ThorchainSwapper/utils/getLongtailQuote.js +1 -1
  135. package/dist/cjs/swappers/ZrxSwapper/getZrxTradeQuote/getZrxTradeQuote.js +27 -2
  136. package/dist/cjs/swappers/ZrxSwapper/getZrxTradeQuote/getZrxTradeQuote.test.d.ts +1 -0
  137. package/dist/cjs/swappers/ZrxSwapper/getZrxTradeQuote/getZrxTradeQuote.test.js +110 -0
  138. package/dist/cjs/swappers/ZrxSwapper/types.d.ts +2 -1
  139. package/dist/cjs/swappers/ZrxSwapper/utils/getZrxNativeCheckDeadline.d.ts +1 -0
  140. package/dist/cjs/swappers/ZrxSwapper/utils/getZrxNativeCheckDeadline.js +26 -0
  141. package/dist/cjs/swappers/ZrxSwapper/utils/getZrxStepData.d.ts +3 -1
  142. package/dist/cjs/swappers/ZrxSwapper/utils/getZrxStepData.js +29 -10
  143. package/dist/cjs/types.d.ts +41 -12
  144. package/dist/cjs/types.js +3 -0
  145. package/dist/cjs/utils/aptos/constants.d.ts +2 -0
  146. package/dist/cjs/utils/aptos/constants.js +7 -0
  147. package/dist/cjs/utils/aptos/getAptosTransactionFees.d.ts +2 -0
  148. package/dist/cjs/utils/aptos/getAptosTransactionFees.js +13 -0
  149. package/dist/cjs/utils/aptos/getUnsignedAptosTransaction.d.ts +2 -0
  150. package/dist/cjs/utils/aptos/getUnsignedAptosTransaction.js +16 -0
  151. package/dist/cjs/utils/aptos/index.d.ts +3 -0
  152. package/dist/cjs/utils/aptos/index.js +19 -0
  153. package/dist/cjs/utils/evm/getEvmNetworkFeeCryptoBaseUnit.d.ts +19 -6
  154. package/dist/cjs/utils/evm/getEvmNetworkFeeCryptoBaseUnit.js +45 -35
  155. package/dist/cjs/utils/evm/getEvmNetworkFeeCryptoBaseUnit.test.d.ts +1 -0
  156. package/dist/cjs/utils/evm/getEvmNetworkFeeCryptoBaseUnit.test.js +103 -0
  157. package/dist/cjs/utils/evm/stateOverride.d.ts +3 -0
  158. package/dist/cjs/utils/evm/stateOverride.js +10 -4
  159. package/dist/cjs/utils/helpers.d.ts +1 -2
  160. package/dist/cjs/utils/helpers.js +9 -32
  161. package/dist/cjs/utils/helpers.test.js +7 -2
  162. package/dist/cjs/utils/index.d.ts +3 -2
  163. package/dist/cjs/utils/index.js +11 -27
  164. package/dist/esm/.tsbuildinfo +1 -1
  165. package/dist/esm/constants.js +21 -0
  166. package/dist/esm/index.d.ts +3 -0
  167. package/dist/esm/index.js +3 -0
  168. package/dist/esm/swappers/AcrossSwapper/utils/getAcrossStepData.js +8 -16
  169. package/dist/esm/swappers/ArbitrumBridgeSwapper/getTradeQuote/getTradeQuote.js +0 -2
  170. package/dist/esm/swappers/AvnuSwapper/endpoints.js +18 -13
  171. package/dist/esm/swappers/AvnuSwapper/swapperApi/getTradeQuote.js +1 -2
  172. package/dist/esm/swappers/BebopSwapper/utils/fetchFromBebop.d.ts +2 -1
  173. package/dist/esm/swappers/BebopSwapper/utils/fetchFromBebop.js +21 -15
  174. package/dist/esm/swappers/BebopSwapper/utils/getBebopSolanaTradeContext.js +1 -0
  175. package/dist/esm/swappers/BebopSwapper/utils/getBebopStepData.js +18 -23
  176. package/dist/esm/swappers/BobGatewaySwapper/swapperApi/getTradeQuote.js +0 -2
  177. package/dist/esm/swappers/ButterSwap/swapperApi/getTradeQuote.js +0 -2
  178. package/dist/esm/swappers/ButterSwap/swapperApi/getTradeQuote.test.js +1 -0
  179. package/dist/esm/swappers/ButterSwap/swapperApi/getTradeRate.test.js +1 -0
  180. package/dist/esm/swappers/ButterSwap/utils/getButterSwapStepData.js +4 -5
  181. package/dist/esm/swappers/ButterSwap/utils/getButterSwapStepData.test.js +2 -2
  182. package/dist/esm/swappers/CetusSwapper/endpoints.js +3 -4
  183. package/dist/esm/swappers/CetusSwapper/swapperApi/getCetusStepData.js +13 -8
  184. package/dist/esm/swappers/CetusSwapper/swapperApi/getCetusTradeContext.js +2 -3
  185. package/dist/esm/swappers/CetusSwapper/swapperApi/getTradeQuote.js +0 -2
  186. package/dist/esm/swappers/CetusSwapper/utils/constants.d.ts +0 -1
  187. package/dist/esm/swappers/CetusSwapper/utils/constants.js +0 -1
  188. package/dist/esm/swappers/CetusSwapper/utils/helpers.d.ts +3 -3
  189. package/dist/esm/swappers/CetusSwapper/utils/helpers.js +4 -15
  190. package/dist/esm/swappers/ChainflipSwapper/swapperApi/getTradeQuote.js +1 -2
  191. package/dist/esm/swappers/ChainflipSwapper/types.d.ts +1 -0
  192. package/dist/esm/swappers/DebridgeSwapper/getTradeQuote/getTradeQuote.js +0 -2
  193. package/dist/esm/swappers/DebridgeSwapper/utils/getDebridgeStepData.d.ts +0 -1
  194. package/dist/esm/swappers/DebridgeSwapper/utils/getDebridgeStepData.js +9 -16
  195. package/dist/esm/swappers/DebridgeSwapper/utils/getDebridgeTradeContext.js +0 -3
  196. package/dist/esm/swappers/FyndSwapper/FyndSwapper.d.ts +2 -0
  197. package/dist/esm/swappers/FyndSwapper/FyndSwapper.js +2 -0
  198. package/dist/esm/swappers/FyndSwapper/endpoints.d.ts +2 -0
  199. package/dist/esm/swappers/FyndSwapper/endpoints.js +11 -0
  200. package/dist/esm/swappers/FyndSwapper/getTradeQuote/getTradeQuote.d.ts +4 -0
  201. package/dist/esm/swappers/FyndSwapper/getTradeQuote/getTradeQuote.js +39 -0
  202. package/dist/esm/swappers/FyndSwapper/getTradeRate/getTradeRate.d.ts +4 -0
  203. package/dist/esm/swappers/FyndSwapper/getTradeRate/getTradeRate.js +30 -0
  204. package/dist/esm/swappers/FyndSwapper/index.d.ts +2 -0
  205. package/dist/esm/swappers/FyndSwapper/index.js +2 -0
  206. package/dist/esm/swappers/FyndSwapper/types.d.ts +41 -0
  207. package/dist/esm/swappers/FyndSwapper/types.js +1 -0
  208. package/dist/esm/swappers/FyndSwapper/utils/constants.d.ts +33 -0
  209. package/dist/esm/swappers/FyndSwapper/utils/constants.js +35 -0
  210. package/dist/esm/swappers/FyndSwapper/utils/fetchFromFynd.d.ts +13 -0
  211. package/dist/esm/swappers/FyndSwapper/utils/fetchFromFynd.js +38 -0
  212. package/dist/esm/swappers/FyndSwapper/utils/fyndService.d.ts +5 -0
  213. package/dist/esm/swappers/FyndSwapper/utils/fyndService.js +3 -0
  214. package/dist/esm/swappers/FyndSwapper/utils/getFyndStepData.d.ts +25 -0
  215. package/dist/esm/swappers/FyndSwapper/utils/getFyndStepData.js +42 -0
  216. package/dist/esm/swappers/FyndSwapper/utils/getFyndTradeContext.d.ts +18 -0
  217. package/dist/esm/swappers/FyndSwapper/utils/getFyndTradeContext.js +90 -0
  218. package/dist/esm/swappers/FyndSwapper/utils/helpers.d.ts +24 -0
  219. package/dist/esm/swappers/FyndSwapper/utils/helpers.js +162 -0
  220. package/dist/esm/swappers/FyndSwapper/utils/helpers.test.d.ts +1 -0
  221. package/dist/esm/swappers/FyndSwapper/utils/helpers.test.js +99 -0
  222. package/dist/esm/swappers/KyberSwapper/KyberSwapper.d.ts +2 -0
  223. package/dist/esm/swappers/KyberSwapper/KyberSwapper.js +2 -0
  224. package/dist/esm/swappers/KyberSwapper/endpoints.d.ts +2 -0
  225. package/dist/esm/swappers/KyberSwapper/endpoints.js +11 -0
  226. package/dist/esm/swappers/KyberSwapper/index.d.ts +2 -0
  227. package/dist/esm/swappers/KyberSwapper/index.js +2 -0
  228. package/dist/esm/swappers/KyberSwapper/swapperApi/getKyberTradeQuote.d.ts +4 -0
  229. package/dist/esm/swappers/KyberSwapper/swapperApi/getKyberTradeQuote.js +60 -0
  230. package/dist/esm/swappers/KyberSwapper/swapperApi/getKyberTradeRate.d.ts +4 -0
  231. package/dist/esm/swappers/KyberSwapper/swapperApi/getKyberTradeRate.js +27 -0
  232. package/dist/esm/swappers/KyberSwapper/types.d.ts +62 -0
  233. package/dist/esm/swappers/KyberSwapper/types.js +1 -0
  234. package/dist/esm/swappers/KyberSwapper/utils/constants.d.ts +21 -0
  235. package/dist/esm/swappers/KyberSwapper/utils/constants.js +21 -0
  236. package/dist/esm/swappers/KyberSwapper/utils/fetchFromKyber.d.ts +23 -0
  237. package/dist/esm/swappers/KyberSwapper/utils/fetchFromKyber.js +33 -0
  238. package/dist/esm/swappers/KyberSwapper/utils/getKyberStepData.d.ts +27 -0
  239. package/dist/esm/swappers/KyberSwapper/utils/getKyberStepData.js +43 -0
  240. package/dist/esm/swappers/KyberSwapper/utils/getKyberStepData.test.d.ts +1 -0
  241. package/dist/esm/swappers/KyberSwapper/utils/getKyberStepData.test.js +90 -0
  242. package/dist/esm/swappers/KyberSwapper/utils/getKyberTradeContext.d.ts +20 -0
  243. package/dist/esm/swappers/KyberSwapper/utils/getKyberTradeContext.js +59 -0
  244. package/dist/esm/swappers/KyberSwapper/utils/helpers.d.ts +27 -0
  245. package/dist/esm/swappers/KyberSwapper/utils/helpers.js +158 -0
  246. package/dist/esm/swappers/KyberSwapper/utils/helpers.test.d.ts +1 -0
  247. package/dist/esm/swappers/KyberSwapper/utils/helpers.test.js +108 -0
  248. package/dist/esm/swappers/KyberSwapper/utils/kyberService.d.ts +5 -0
  249. package/dist/esm/swappers/KyberSwapper/utils/kyberService.js +3 -0
  250. package/dist/esm/swappers/MayachainSwapper/generated/generatedTradableAssetMap.json +0 -1
  251. package/dist/esm/swappers/NearIntentsSwapper/NearIntentsSwapper.js +2 -1
  252. package/dist/esm/swappers/NearIntentsSwapper/endpoints.js +13 -14
  253. package/dist/esm/swappers/NearIntentsSwapper/swapperApi/getTradeRate.js +1 -1
  254. package/dist/esm/swappers/NearIntentsSwapper/types.d.ts +4 -4
  255. package/dist/esm/swappers/NearIntentsSwapper/types.js +2 -0
  256. package/dist/esm/swappers/NearIntentsSwapper/utils/getNearIntentsStepData.js +29 -1
  257. package/dist/esm/swappers/NearIntentsSwapper/utils/helpers.js +2 -2
  258. package/dist/esm/swappers/PortalsSwapper/endpoints.js +4 -1
  259. package/dist/esm/swappers/PortalsSwapper/getPortalsTradeQuote/getPortalsTradeQuote.js +2 -2
  260. package/dist/esm/swappers/PortalsSwapper/utils/getPortalsStepData.js +34 -53
  261. package/dist/esm/swappers/PortalsSwapper/utils/getPortalsStepData.test.js +2 -2
  262. package/dist/esm/swappers/RelaySwapper/getTradeQuote/getTradeQuote.js +2 -3
  263. package/dist/esm/swappers/RelaySwapper/utils/getRelayStepData.js +9 -17
  264. package/dist/esm/swappers/RelaySwapper/utils/getRelayTradeContext.d.ts +1 -0
  265. package/dist/esm/swappers/RelaySwapper/utils/getRelayTradeContext.js +5 -1
  266. package/dist/esm/swappers/RelaySwapper/utils/relayStatus.js +3 -3
  267. package/dist/esm/swappers/RelaySwapper/utils/types.d.ts +9 -4
  268. package/dist/esm/swappers/SymbiosisSwapper/SymbiosisSwapper.d.ts +2 -0
  269. package/dist/esm/swappers/SymbiosisSwapper/SymbiosisSwapper.js +5 -0
  270. package/dist/esm/swappers/SymbiosisSwapper/endpoints.d.ts +2 -0
  271. package/dist/esm/swappers/SymbiosisSwapper/endpoints.js +63 -0
  272. package/dist/esm/swappers/SymbiosisSwapper/getTradeQuote/getTradeQuote.d.ts +4 -0
  273. package/dist/esm/swappers/SymbiosisSwapper/getTradeQuote/getTradeQuote.js +38 -0
  274. package/dist/esm/swappers/SymbiosisSwapper/getTradeRate/getTradeRate.d.ts +4 -0
  275. package/dist/esm/swappers/SymbiosisSwapper/getTradeRate/getTradeRate.js +30 -0
  276. package/dist/esm/swappers/SymbiosisSwapper/index.d.ts +2 -0
  277. package/dist/esm/swappers/SymbiosisSwapper/index.js +2 -0
  278. package/dist/esm/swappers/SymbiosisSwapper/utils/constants.d.ts +19 -0
  279. package/dist/esm/swappers/SymbiosisSwapper/utils/constants.js +61 -0
  280. package/dist/esm/swappers/SymbiosisSwapper/utils/getSymbiosisStepData.d.ts +26 -0
  281. package/dist/esm/swappers/SymbiosisSwapper/utils/getSymbiosisStepData.js +102 -0
  282. package/dist/esm/swappers/SymbiosisSwapper/utils/getSymbiosisStepData.test.d.ts +1 -0
  283. package/dist/esm/swappers/SymbiosisSwapper/utils/getSymbiosisStepData.test.js +159 -0
  284. package/dist/esm/swappers/SymbiosisSwapper/utils/getSymbiosisTradeContext.d.ts +17 -0
  285. package/dist/esm/swappers/SymbiosisSwapper/utils/getSymbiosisTradeContext.js +139 -0
  286. package/dist/esm/swappers/SymbiosisSwapper/utils/helpers.d.ts +38 -0
  287. package/dist/esm/swappers/SymbiosisSwapper/utils/helpers.js +156 -0
  288. package/dist/esm/swappers/SymbiosisSwapper/utils/helpers.test.d.ts +1 -0
  289. package/dist/esm/swappers/SymbiosisSwapper/utils/helpers.test.js +149 -0
  290. package/dist/esm/swappers/SymbiosisSwapper/utils/symbiosisService.d.ts +5 -0
  291. package/dist/esm/swappers/SymbiosisSwapper/utils/symbiosisService.js +12 -0
  292. package/dist/esm/swappers/SymbiosisSwapper/utils/types.d.ts +83 -0
  293. package/dist/esm/swappers/SymbiosisSwapper/utils/types.js +8 -0
  294. package/dist/esm/swappers/ThorchainSwapper/generated/generatedThorLongtailTokens.json +1 -0
  295. package/dist/esm/swappers/ThorchainSwapper/generated/generatedTradableAssetMap.json +1 -0
  296. package/dist/esm/swappers/ThorchainSwapper/getTradeQuote/getTradeQuote.test.js +2 -2
  297. package/dist/esm/swappers/ThorchainSwapper/utils/getLongtailQuote.js +1 -1
  298. package/dist/esm/swappers/ZrxSwapper/getZrxTradeQuote/getZrxTradeQuote.js +28 -3
  299. package/dist/esm/swappers/ZrxSwapper/getZrxTradeQuote/getZrxTradeQuote.test.d.ts +1 -0
  300. package/dist/esm/swappers/ZrxSwapper/getZrxTradeQuote/getZrxTradeQuote.test.js +108 -0
  301. package/dist/esm/swappers/ZrxSwapper/types.d.ts +2 -1
  302. package/dist/esm/swappers/ZrxSwapper/utils/getZrxNativeCheckDeadline.d.ts +1 -0
  303. package/dist/esm/swappers/ZrxSwapper/utils/getZrxNativeCheckDeadline.js +22 -0
  304. package/dist/esm/swappers/ZrxSwapper/utils/getZrxStepData.d.ts +3 -1
  305. package/dist/esm/swappers/ZrxSwapper/utils/getZrxStepData.js +31 -12
  306. package/dist/esm/types.d.ts +41 -12
  307. package/dist/esm/types.js +3 -0
  308. package/dist/esm/utils/aptos/constants.d.ts +2 -0
  309. package/dist/esm/utils/aptos/constants.js +4 -0
  310. package/dist/esm/utils/aptos/getAptosTransactionFees.d.ts +2 -0
  311. package/dist/esm/utils/aptos/getAptosTransactionFees.js +9 -0
  312. package/dist/esm/utils/aptos/getUnsignedAptosTransaction.d.ts +2 -0
  313. package/dist/esm/utils/aptos/getUnsignedAptosTransaction.js +12 -0
  314. package/dist/esm/utils/aptos/index.d.ts +3 -0
  315. package/dist/esm/utils/aptos/index.js +3 -0
  316. package/dist/esm/utils/evm/getEvmNetworkFeeCryptoBaseUnit.d.ts +19 -6
  317. package/dist/esm/utils/evm/getEvmNetworkFeeCryptoBaseUnit.js +42 -35
  318. package/dist/esm/utils/evm/getEvmNetworkFeeCryptoBaseUnit.test.d.ts +1 -0
  319. package/dist/esm/utils/evm/getEvmNetworkFeeCryptoBaseUnit.test.js +101 -0
  320. package/dist/esm/utils/evm/stateOverride.d.ts +3 -0
  321. package/dist/esm/utils/evm/stateOverride.js +8 -3
  322. package/dist/esm/utils/helpers.d.ts +1 -2
  323. package/dist/esm/utils/helpers.js +10 -33
  324. package/dist/esm/utils/helpers.test.js +7 -2
  325. package/dist/esm/utils/index.d.ts +3 -2
  326. package/dist/esm/utils/index.js +9 -26
  327. package/package.json +10 -11
@@ -9,12 +9,15 @@ import { cetusApi, cetusSwapper } from './swappers/CetusSwapper/index.js';
9
9
  import { chainflipApi, chainflipSwapper } from './swappers/ChainflipSwapper/index.js';
10
10
  import { cowApi, cowSwapper } from './swappers/CowSwapper/index.js';
11
11
  import { debridgeApi, debridgeSwapper } from './swappers/DebridgeSwapper/index.js';
12
+ import { fyndApi, fyndSwapper } from './swappers/FyndSwapper/index.js';
13
+ import { kyberApi, kyberSwapper } from './swappers/KyberSwapper/index.js';
12
14
  import { mayachainApi, mayachainSwapper } from './swappers/MayachainSwapper/index.js';
13
15
  import { nearIntentsApi, nearIntentsSwapper } from './swappers/NearIntentsSwapper/index.js';
14
16
  import { portalsApi, portalsSwapper } from './swappers/PortalsSwapper/index.js';
15
17
  import { relayApi, relaySwapper } from './swappers/RelaySwapper/index.js';
16
18
  import { stonfiApi, stonfiSwapper } from './swappers/StonfiSwapper/index.js';
17
19
  import { sunioApi, sunioSwapper } from './swappers/SunioSwapper/index.js';
20
+ import { symbiosisApi, symbiosisSwapper } from './swappers/SymbiosisSwapper/index.js';
18
21
  import { thorchainApi, thorchainSwapper } from './swappers/ThorchainSwapper/index.js';
19
22
  import { zrxApi, zrxSwapper } from './swappers/ZrxSwapper/index.js';
20
23
  import { SwapperName, TradeQuoteError } from './types.js';
@@ -99,6 +102,18 @@ export const swappers = {
99
102
  ...bobGatewaySwapper,
100
103
  ...bobGatewayApi,
101
104
  },
105
+ [SwapperName.Symbiosis]: {
106
+ ...symbiosisSwapper,
107
+ ...symbiosisApi,
108
+ },
109
+ [SwapperName.Fynd]: {
110
+ ...fyndSwapper,
111
+ ...fyndApi,
112
+ },
113
+ [SwapperName.KyberSwap]: {
114
+ ...kyberSwapper,
115
+ ...kyberApi,
116
+ },
102
117
  [SwapperName.Test]: undefined,
103
118
  };
104
119
  const DEFAULT_SLIPPAGE_DECIMAL_PERCENTAGE = '0.002';
@@ -118,12 +133,16 @@ const DEFAULT_STONFI_SLIPPAGE_DECIMAL_PERCENTAGE = '0.01';
118
133
  // deBridge API off-chain simulation overestimates output on some chains (e.g. SEI ~2.4%), so auto slippage (1%) is insufficient
119
134
  const DEFAULT_DEBRIDGE_SLIPPAGE_DECIMAL_PERCENTAGE = '0.03';
120
135
  const DEFAULT_BOB_GATEWAY_SLIPPAGE_DECIMAL_PERCENTAGE = '0.03';
136
+ // Symbiosis splits the tolerance across up to three legs, and a destination leg over its share pays out the transit token instead of reverting
137
+ const DEFAULT_SYMBIOSIS_SLIPPAGE_DECIMAL_PERCENTAGE = '0.01';
121
138
  export const getDefaultSlippageDecimalPercentageForSwapper = (swapperName) => {
122
139
  if (swapperName === undefined)
123
140
  return DEFAULT_SLIPPAGE_DECIMAL_PERCENTAGE;
124
141
  switch (swapperName) {
125
142
  case SwapperName.Zrx:
126
143
  case SwapperName.Bebop:
144
+ case SwapperName.Fynd:
145
+ case SwapperName.KyberSwap:
127
146
  case SwapperName.Test:
128
147
  return DEFAULT_SLIPPAGE_DECIMAL_PERCENTAGE;
129
148
  case SwapperName.CowSwap:
@@ -158,6 +177,8 @@ export const getDefaultSlippageDecimalPercentageForSwapper = (swapperName) => {
158
177
  return DEFAULT_STONFI_SLIPPAGE_DECIMAL_PERCENTAGE;
159
178
  case SwapperName.BobGateway:
160
179
  return DEFAULT_BOB_GATEWAY_SLIPPAGE_DECIMAL_PERCENTAGE;
180
+ case SwapperName.Symbiosis:
181
+ return DEFAULT_SYMBIOSIS_SLIPPAGE_DECIMAL_PERCENTAGE;
161
182
  default:
162
183
  return assertUnreachable(swapperName);
163
184
  }
@@ -15,11 +15,14 @@ export * from './swappers/ChainflipSwapper/index.js';
15
15
  export * from './swappers/SunioSwapper/index.js';
16
16
  export * from './swappers/CowSwapper/index.js';
17
17
  export * from './swappers/DebridgeSwapper/index.js';
18
+ export * from './swappers/FyndSwapper/index.js';
19
+ export * from './swappers/KyberSwapper/index.js';
18
20
  export * from './swappers/PortalsSwapper/index.js';
19
21
  export * from './swappers/ThorchainSwapper/index.js';
20
22
  export * from './swappers/MayachainSwapper/index.js';
21
23
  export * from './swappers/ButterSwap/index.js';
22
24
  export * from './swappers/RelaySwapper/index.js';
25
+ export * from './swappers/SymbiosisSwapper/index.js';
23
26
  export * from './utils/helpers.js';
24
27
  export * from './utils/thorchain/index.js';
25
28
  export * from './types.js';
package/dist/esm/index.js CHANGED
@@ -15,11 +15,14 @@ export * from './swappers/ChainflipSwapper/index.js';
15
15
  export * from './swappers/SunioSwapper/index.js';
16
16
  export * from './swappers/CowSwapper/index.js';
17
17
  export * from './swappers/DebridgeSwapper/index.js';
18
+ export * from './swappers/FyndSwapper/index.js';
19
+ export * from './swappers/KyberSwapper/index.js';
18
20
  export * from './swappers/PortalsSwapper/index.js';
19
21
  export * from './swappers/ThorchainSwapper/index.js';
20
22
  export * from './swappers/MayachainSwapper/index.js';
21
23
  export * from './swappers/ButterSwap/index.js';
22
24
  export * from './swappers/RelaySwapper/index.js';
25
+ export * from './swappers/SymbiosisSwapper/index.js';
23
26
  export * from './utils/helpers.js';
24
27
  export * from './utils/thorchain/index.js';
25
28
  export * from './types.js';
@@ -4,7 +4,7 @@ import { Err, Ok } from '@sniptt/monads';
4
4
  import { AddressLookupTableAccount, PublicKey, TransactionMessage, VersionedTransaction, } from '@solana/web3.js';
5
5
  import { TradeQuoteError } from '../../../types.js';
6
6
  import { makeNetworkFeeEstimationFailedErr, makeSwapErrorRight, makeTradeStepBuildFailedErr, } from '../../../utils/index.js';
7
- import { getEvmNetworkFeeCryptoBaseUnit } from '../../../utils/evm/index.js';
7
+ import { getEvmNetworkFeeCryptoBaseUnit, getEvmRateNetworkFeeCryptoBaseUnit, } from '../../../utils/evm/index.js';
8
8
  import { getSolanaNetworkFeeCryptoBaseUnit } from '../../../utils/solana/index.js';
9
9
  export async function getAcrossStepData(args) {
10
10
  const { swapTx, sellAsset, sellAmountCryptoBaseUnit, spenderAddress, from, type, input, fallbackNetworkFeeCryptoBaseUnit, deps, } = args;
@@ -18,7 +18,6 @@ export async function getAcrossStepData(args) {
18
18
  to: swapTx.to,
19
19
  data: swapTx.data,
20
20
  value: swapTx.value ?? '0',
21
- gasLimit: swapTx.gas,
22
21
  };
23
22
  const stateOverride = {
24
23
  sellAsset,
@@ -26,20 +25,12 @@ export async function getAcrossStepData(args) {
26
25
  spenderAddress,
27
26
  };
28
27
  if (type === 'rate') {
29
- const networkFeeCryptoBaseUnit = await (async () => {
30
- try {
31
- return await getEvmNetworkFeeCryptoBaseUnit({
32
- adapter,
33
- transactionData,
34
- from,
35
- supportsEIP1559,
36
- stateOverride,
37
- });
38
- }
39
- catch {
40
- return fallbackNetworkFeeCryptoBaseUnit;
41
- }
42
- })();
28
+ const networkFeeCryptoBaseUnit = await getEvmRateNetworkFeeCryptoBaseUnit({
29
+ adapter,
30
+ supportsEIP1559,
31
+ providerGasLimit: swapTx.gas,
32
+ simulation: { transactionData, from, stateOverride },
33
+ }).catch(() => fallbackNetworkFeeCryptoBaseUnit);
43
34
  const stepData = { networkFeeCryptoBaseUnit };
44
35
  return Ok(stepData);
45
36
  }
@@ -50,6 +41,7 @@ export async function getAcrossStepData(args) {
50
41
  from,
51
42
  supportsEIP1559,
52
43
  stateOverride,
44
+ providerGasLimit: swapTx.gas,
53
45
  });
54
46
  const stepData = { transactionData, networkFeeCryptoBaseUnit };
55
47
  return Ok(stepData);
@@ -1,7 +1,6 @@
1
1
  import { supportsETH } from '@shapeshiftoss/hdwallet-core';
2
2
  import { Err, Ok } from '@sniptt/monads';
3
3
  import { assertQuoteAddresses } from '../../../utils/index.js';
4
- import { FALLBACK_QUOTE_DEADLINE_MS } from '../../../utils/helpers.js';
5
4
  import { getArbitrumBridgeStepData } from '../utils/getArbitrumBridgeStepData.js';
6
5
  import { getArbitrumBridgeTradeContext } from '../utils/getArbitrumBridgeTradeContext.js';
7
6
  export const getTradeQuoteWithWallet = async (inputWithWallet, deps) => {
@@ -33,7 +32,6 @@ export const getTradeQuote = async (input, deps) => {
33
32
  const tradeQuote = {
34
33
  ...tradeCommon,
35
34
  quoteOrRate: 'quote',
36
- deadline: Date.now() + FALLBACK_QUOTE_DEADLINE_MS,
37
35
  receiveAddress,
38
36
  steps: [
39
37
  {
@@ -1,6 +1,6 @@
1
1
  import { quoteToCalls } from '@avnu/avnu-sdk';
2
2
  import { toAddressNList } from '@shapeshiftoss/chain-adapters';
3
- import { CallData, hash, validateAndParseAddress } from 'starknet';
3
+ import { CallData, hash, transaction, validateAndParseAddress } from 'starknet';
4
4
  import { checkStarknetSwapStatus, createDefaultStatusResponse, getExecutableTradeStep, getSwapMetadata, isExecutableTradeQuote, } from '../../utils/index.js';
5
5
  import { getTradeQuote } from './swapperApi/getTradeQuote.js';
6
6
  import { getTradeRate } from './swapperApi/getTradeRate.js';
@@ -8,7 +8,7 @@ import { toHexString } from './utils/helpers.js';
8
8
  export const avnuApi = {
9
9
  getTradeQuote: (input, deps) => getTradeQuote(input, deps),
10
10
  getTradeRate: (input, deps) => getTradeRate(input, deps),
11
- getUnsignedStarknetTransaction: async ({ stepIndex, tradeQuote, from, slippageTolerancePercentageDecimal, assertGetStarknetChainAdapter, }) => {
11
+ getUnsignedStarknetTransaction: async ({ stepIndex, tradeQuote, from, callsOnly, slippageTolerancePercentageDecimal, assertGetStarknetChainAdapter, }) => {
12
12
  if (!isExecutableTradeQuote(tradeQuote))
13
13
  throw new Error('Unable to execute a trade rate quote');
14
14
  const step = getExecutableTradeStep(tradeQuote, stepIndex);
@@ -34,19 +34,23 @@ export const avnuApi = {
34
34
  if (!avnuCalls || avnuCalls.length === 0) {
35
35
  throw new Error('No swap calls returned from AVNU - quote may have expired');
36
36
  }
37
- // Build the full invoke transaction calldata from AVNU calls
38
- // Format: [call_array_length, contract1, selector1, calldata_len1, ...calldata1, ...]
39
- const fullCalldata = [avnuCalls.length.toString()];
40
- for (const call of avnuCalls) {
37
+ const calls = avnuCalls.map(call => {
41
38
  const rawCalldata = call.calldata ?? [];
42
- const calldataArray = Array.isArray(rawCalldata) ? rawCalldata : CallData.compile(rawCalldata);
43
- const selector = hash.getSelectorFromName(call.entrypoint);
44
- // Normalize contract address from AVNU to ensure consistent format
45
- const normalizedContractAddress = validateAndParseAddress(call.contractAddress);
46
- fullCalldata.push(normalizedContractAddress, selector, calldataArray.length.toString(), ...calldataArray.map(cd => String(cd)));
39
+ const calldata = Array.isArray(rawCalldata) ? rawCalldata : CallData.compile(rawCalldata);
40
+ return {
41
+ contractAddress: validateAndParseAddress(call.contractAddress),
42
+ entrypoint: call.entrypoint,
43
+ calldata: calldata.map(String),
44
+ };
45
+ });
46
+ if (callsOnly) {
47
+ return {
48
+ addressNList: toAddressNList(adapter.getBip44Params({ accountNumber })),
49
+ txHash: '',
50
+ calls,
51
+ };
47
52
  }
48
- // Format calldata for RPC (convert all values to proper hex format)
49
- const formattedCalldata = fullCalldata.map(toHexString);
53
+ const formattedCalldata = transaction.getExecuteCalldata(calls, '1').map(toHexString);
50
54
  // Get nonce using adapter method (checks deployment status and returns appropriate nonce)
51
55
  const chainIdHex = await adapter.getStarknetProvider().getChainId();
52
56
  const nonce = await adapter.getNonce(normalizedFrom);
@@ -144,6 +148,7 @@ export const avnuApi = {
144
148
  return {
145
149
  addressNList: toAddressNList(adapter.getBip44Params({ accountNumber })),
146
150
  txHash,
151
+ calls,
147
152
  _txDetails: {
148
153
  fromAddress: normalizedFrom,
149
154
  calldata: formattedCalldata,
@@ -2,7 +2,6 @@ import { Err, Ok } from '@sniptt/monads';
2
2
  import { validateAndParseAddress } from 'starknet';
3
3
  import { TradeQuoteError } from '../../../types.js';
4
4
  import { assertQuoteAddresses, makeSwapErrorRight } from '../../../utils/index.js';
5
- import { FALLBACK_QUOTE_DEADLINE_MS } from '../../../utils/helpers.js';
6
5
  import { getAvnuTradeContext } from '../utils/getAvnuTradeContext.js';
7
6
  export const getTradeQuote = async (input, deps) => {
8
7
  const { sellAsset, accountNumber } = input;
@@ -33,7 +32,7 @@ export const getTradeQuote = async (input, deps) => {
33
32
  ...tradeCommon,
34
33
  receiveAddress: normalizedReceiveAddress,
35
34
  quoteOrRate: 'quote',
36
- deadline: deadline ?? Date.now() + FALLBACK_QUOTE_DEADLINE_MS,
35
+ deadline,
37
36
  steps: [
38
37
  {
39
38
  ...stepCommon,
@@ -13,12 +13,13 @@ export declare const fetchBebopQuote: ({ buyAsset, sellAsset, sellAmountIncludin
13
13
  affiliateBps?: string | undefined;
14
14
  apiKey: string;
15
15
  }) => Promise<Result<BebopQuoteResponse, SwapErrorRight>>;
16
- export declare const fetchBebopSolanaQuote: ({ buyAsset, sellAsset, sellAmountIncludingProtocolFeesCryptoBaseUnit, takerAddress, receiverAddress, slippageTolerancePercentageDecimal, apiKey, }: {
16
+ export declare const fetchBebopSolanaQuote: ({ buyAsset, sellAsset, sellAmountIncludingProtocolFeesCryptoBaseUnit, takerAddress, receiverAddress, slippageTolerancePercentageDecimal, affiliateBps, apiKey, }: {
17
17
  buyAsset: Asset;
18
18
  sellAsset: Asset;
19
19
  sellAmountIncludingProtocolFeesCryptoBaseUnit: string;
20
20
  takerAddress: string;
21
21
  receiverAddress: string;
22
22
  slippageTolerancePercentageDecimal: string;
23
+ affiliateBps?: string | undefined;
23
24
  apiKey: string;
24
25
  }) => Promise<Result<BebopSolanaQuoteResponse, SwapErrorRight>>;
@@ -8,6 +8,9 @@ import { getTreasuryAddressFromChainId } from '../../../utils/helpers.js';
8
8
  import { chainIdToBebopChain } from '../types.js';
9
9
  import { bebopServiceFactory } from './bebopService.js';
10
10
  import { assetIdToBebopSolanaToken, assetIdToBebopToken } from './helpers.js';
11
+ // PMM charges the fee set against our api key, which nets exactly this bps
12
+ const BEBOP_PMM_AFFILIATE_BPS = '60';
13
+ const isPmmEligible = (affiliateBps) => bnOrZero(affiliateBps).eq(BEBOP_PMM_AFFILIATE_BPS);
11
14
  export const fetchBebopQuote = async ({ buyAsset, sellAsset, sellAmountIncludingProtocolFeesCryptoBaseUnit, takerAddress, receiverAddress, slippageTolerancePercentageDecimal, affiliateBps, apiKey, }) => {
12
15
  try {
13
16
  const sellToken = assetIdToBebopToken(sellAsset.assetId);
@@ -27,26 +30,24 @@ export const fetchBebopQuote = async ({ buyAsset, sellAsset, sellAmountIncluding
27
30
  approval_type: 'Standard',
28
31
  skip_validation: 'true',
29
32
  gasless: 'false',
30
- // PMM fees are configured against our api key on Bebop's side, not sent per quote
31
33
  source: 'shapeshift',
32
34
  };
33
35
  const jamParams = new URLSearchParams(baseParams);
34
- const pmmParams = new URLSearchParams(baseParams);
35
- // JAM settles the fee on-chain, so it still takes our bps and a recipient per quote
36
- if (affiliateBps && affiliateBps !== '0') {
37
- jamParams.set('fee', affiliateBps);
38
- jamParams.set('fee_recipient', getAddress(getTreasuryAddressFromChainId(buyAsset.chainId)));
39
- }
36
+ // Without an explicit fee JAM charges our api key's flat fee, so 1 bps is the lowest it can go
37
+ jamParams.set('fee', affiliateBps && bnOrZero(affiliateBps).gt(0) ? affiliateBps : '1');
38
+ jamParams.set('fee_recipient', getAddress(getTreasuryAddressFromChainId(buyAsset.chainId)));
40
39
  const service = bebopServiceFactory({ apiKey });
41
- const [maybeJam, maybePmm] = await Promise.all([
40
+ const requests = [
42
41
  service.get(`https://api.bebop.xyz/jam/${chainName}/v2/quote`, {
43
42
  params: jamParams,
44
43
  }),
45
- service.get(`https://api.bebop.xyz/pmm/${chainName}/v3/quote`, {
46
- params: pmmParams,
47
- }),
48
- ]);
49
- const maybeResponses = [maybeJam, maybePmm];
44
+ ];
45
+ if (isPmmEligible(affiliateBps)) {
46
+ requests.push(service.get(`https://api.bebop.xyz/pmm/${chainName}/v3/quote`, {
47
+ params: new URLSearchParams(baseParams),
48
+ }));
49
+ }
50
+ const maybeResponses = await Promise.all(requests);
50
51
  if (maybeResponses.every(maybeResponse => maybeResponse.isErr())) {
51
52
  return Err(makeSwapErrorRight({
52
53
  message: 'Failed to fetch quote from Bebop',
@@ -76,8 +77,14 @@ export const fetchBebopQuote = async ({ buyAsset, sellAsset, sellAmountIncluding
76
77
  }));
77
78
  }
78
79
  };
79
- export const fetchBebopSolanaQuote = async ({ buyAsset, sellAsset, sellAmountIncludingProtocolFeesCryptoBaseUnit, takerAddress, receiverAddress, slippageTolerancePercentageDecimal, apiKey, }) => {
80
+ export const fetchBebopSolanaQuote = async ({ buyAsset, sellAsset, sellAmountIncludingProtocolFeesCryptoBaseUnit, takerAddress, receiverAddress, slippageTolerancePercentageDecimal, affiliateBps, apiKey, }) => {
80
81
  try {
82
+ if (!isPmmEligible(affiliateBps)) {
83
+ return Err(makeSwapErrorRight({
84
+ message: 'Bebop Solana is PMM only and cannot take the requested bps',
85
+ code: TradeQuoteError.NoRouteFound,
86
+ }));
87
+ }
81
88
  // Bebop's Solana routes don't wrap native SOL on the input side, so selling native SOL
82
89
  // always fails on-chain. Reject up front instead of returning an unexecutable quote.
83
90
  if (sellAsset.assetId === solAssetId) {
@@ -100,7 +107,6 @@ export const fetchBebopSolanaQuote = async ({ buyAsset, sellAsset, sellAmountInc
100
107
  approval_type: 'Standard',
101
108
  skip_validation: 'false',
102
109
  gasless: 'true',
103
- // Solana is PMM only, so its fees are configured against our api key on Bebop's side
104
110
  source: 'shapeshift',
105
111
  });
106
112
  const maybeResponse = await bebopServiceFactory({ apiKey }).get('https://api.bebop.xyz/pmm/solana/v3/quote', { params });
@@ -19,6 +19,7 @@ export const getBebopSolanaTradeContext = async ({ input, deps, takerAddress, re
19
19
  takerAddress,
20
20
  receiverAddress,
21
21
  slippageTolerancePercentageDecimal,
22
+ affiliateBps,
22
23
  apiKey: deps.config.VITE_BEBOP_API_KEY,
23
24
  });
24
25
  if (maybeBebopQuoteResponse.isErr())
@@ -3,46 +3,41 @@ import { bnOrZero } from '@shapeshiftoss/utils';
3
3
  import { Err, Ok } from '@sniptt/monads';
4
4
  import { fromHex } from 'viem';
5
5
  import { makeNetworkFeeEstimationFailedErr } from '../../../utils/index.js';
6
- import { getEvmNetworkFeeCryptoBaseUnit } from '../../../utils/evm/index.js';
6
+ import { getEvmNetworkFeeCryptoBaseUnit, getEvmRateNetworkFeeCryptoBaseUnit, } from '../../../utils/evm/index.js';
7
7
  export async function getBebopStepData(args) {
8
8
  const { tx, spenderAddress, sellAsset, sellAmountCryptoBaseUnit, type, input, from, deps } = args;
9
9
  const adapter = deps.assertGetEvmChainAdapter(sellAsset.chainId);
10
10
  const supportsEIP1559 = 'supportsEIP1559' in input ? input.supportsEIP1559 : false;
11
- if (type === 'rate') {
12
- const networkFeeCryptoBaseUnit = await (async () => {
13
- try {
14
- return await getEvmNetworkFeeCryptoBaseUnit({
15
- adapter,
16
- supportsEIP1559,
17
- gasLimit: bnOrZero(tx.gas).toString(),
18
- });
19
- }
20
- catch {
21
- return bnOrZero(tx.gas).times(bnOrZero(tx.gasPrice)).toFixed(0);
22
- }
23
- })();
24
- const stepData = { networkFeeCryptoBaseUnit };
25
- return Ok(stepData);
26
- }
27
11
  const transactionData = {
28
12
  type: 'evm',
29
13
  chainId: Number(fromChainId(sellAsset.chainId).chainReference),
30
14
  to: tx.to,
31
15
  data: tx.data,
32
16
  value: fromHex(tx.value, 'bigint').toString(),
33
- gasLimit: tx.gas?.toString(),
34
17
  };
18
+ const stateOverride = {
19
+ sellAsset,
20
+ sellAmountCryptoBaseUnit,
21
+ spenderAddress,
22
+ };
23
+ if (type === 'rate') {
24
+ const networkFeeCryptoBaseUnit = await getEvmRateNetworkFeeCryptoBaseUnit({
25
+ adapter,
26
+ supportsEIP1559,
27
+ providerGasLimit: tx.gas?.toString(),
28
+ simulation: { transactionData, from, stateOverride },
29
+ }).catch(() => bnOrZero(tx.gas).times(bnOrZero(tx.gasPrice)).toFixed(0));
30
+ const stepData = { networkFeeCryptoBaseUnit };
31
+ return Ok(stepData);
32
+ }
35
33
  try {
36
34
  const networkFeeCryptoBaseUnit = await getEvmNetworkFeeCryptoBaseUnit({
37
35
  adapter,
38
36
  transactionData,
39
37
  from,
40
38
  supportsEIP1559,
41
- stateOverride: {
42
- sellAsset,
43
- sellAmountCryptoBaseUnit,
44
- spenderAddress,
45
- },
39
+ stateOverride,
40
+ providerGasLimit: tx.gas?.toString(),
46
41
  });
47
42
  const stepData = { transactionData, networkFeeCryptoBaseUnit };
48
43
  return Ok(stepData);
@@ -1,7 +1,6 @@
1
1
  import { btcChainId } from '@shapeshiftoss/caip';
2
2
  import { Err, Ok } from '@sniptt/monads';
3
3
  import { assertQuoteAddresses } from '../../../utils/index.js';
4
- import { FALLBACK_QUOTE_DEADLINE_MS } from '../../../utils/helpers.js';
5
4
  import { getBobGatewayStepData } from '../utils/getBobGatewayStepData.js';
6
5
  import { getBobGatewayTradeContext } from '../utils/getBobGatewayTradeContext.js';
7
6
  export const getBobGatewayTradeQuote = async (input, deps) => {
@@ -35,7 +34,6 @@ export const getBobGatewayTradeQuote = async (input, deps) => {
35
34
  const tradeQuote = {
36
35
  ...tradeCommon,
37
36
  quoteOrRate: 'quote',
38
- deadline: Date.now() + FALLBACK_QUOTE_DEADLINE_MS,
39
37
  receiveAddress,
40
38
  steps: [
41
39
  {
@@ -4,7 +4,6 @@ import { Err, Ok } from '@sniptt/monads';
4
4
  import { getDefaultSlippageDecimalPercentageForSwapper } from '../../../constants.js';
5
5
  import { SwapperName, TradeQuoteError } from '../../../types.js';
6
6
  import { assertQuoteAddresses, makeSwapErrorRight } from '../../../utils/index.js';
7
- import { FALLBACK_QUOTE_DEADLINE_MS } from '../../../utils/helpers.js';
8
7
  import { getButterSwapStepData } from '../utils/getButterSwapStepData.js';
9
8
  import { getButterSwapTradeContext } from '../utils/getButterSwapTradeContext.js';
10
9
  import { fetchTxData, isBuildTxSuccess } from '../xhr.js';
@@ -60,7 +59,6 @@ export const getTradeQuote = async (input, deps) => {
60
59
  const tradeQuote = {
61
60
  ...tradeCommon,
62
61
  quoteOrRate: 'quote',
63
- deadline: Date.now() + FALLBACK_QUOTE_DEADLINE_MS,
64
62
  receiveAddress,
65
63
  steps: [
66
64
  {
@@ -54,6 +54,7 @@ describe('getTradeQuote', () => {
54
54
  assertGetNearChainAdapter: () => vi.fn(),
55
55
  assertGetStarknetChainAdapter: () => vi.fn(),
56
56
  assertGetTonChainAdapter: () => vi.fn(),
57
+ assertGetAptosChainAdapter: () => vi.fn(),
57
58
  config: {
58
59
  VITE_BUTTERSWAP_CLIENT_ID: 'test',
59
60
  },
@@ -34,6 +34,7 @@ describe('getTradeRate', () => {
34
34
  assertGetNearChainAdapter: () => vi.fn(),
35
35
  assertGetStarknetChainAdapter: () => vi.fn(),
36
36
  assertGetTonChainAdapter: () => vi.fn(),
37
+ assertGetAptosChainAdapter: () => vi.fn(),
37
38
  config: {
38
39
  VITE_BUTTERSWAP_CLIENT_ID: 'test',
39
40
  },
@@ -5,7 +5,7 @@ import { AddressLookupTableAccount, PublicKey, TransactionMessage, VersionedTran
5
5
  import { fromHex } from 'viem';
6
6
  import { TradeQuoteError } from '../../../types.js';
7
7
  import { makeNetworkFeeEstimationFailedErr, makeSwapErrorRight, makeTradeStepBuildFailedErr, } from '../../../utils/index.js';
8
- import { getEvmNetworkFeeCryptoBaseUnit } from '../../../utils/evm/index.js';
8
+ import { getEvmNetworkFeeCryptoBaseUnit, getEvmRateNetworkFeeCryptoBaseUnit, } from '../../../utils/evm/index.js';
9
9
  import { getSolanaNetworkFeeCryptoBaseUnit, omitComputeBudgetInstructions, withComputeUnitLimit, } from '../../../utils/solana/index.js';
10
10
  import { getTronContractCallFallbackFeeCryptoBaseUnit, getTronContractCallNetworkFeeCryptoBaseUnit, } from '../../../utils/tron/index.js';
11
11
  import { BUTTERSWAP_TRON_DEFAULT_BANDWIDTH_BYTES, BUTTERSWAP_TRON_FALLBACK_SWAP_ENERGY, } from './constants.js';
@@ -25,10 +25,10 @@ export async function getButterSwapStepData(args) {
25
25
  if (args.type === 'rate') {
26
26
  const networkFeeCryptoBaseUnit = await (async () => {
27
27
  try {
28
- return await getEvmNetworkFeeCryptoBaseUnit({
28
+ return await getEvmRateNetworkFeeCryptoBaseUnit({
29
29
  adapter,
30
30
  supportsEIP1559,
31
- gasLimit: bnOrZero(route.gasEstimatedTarget).toFixed(),
31
+ providerGasLimit: bnOrZero(route.gasEstimatedTarget).toFixed(),
32
32
  });
33
33
  }
34
34
  catch {
@@ -52,13 +52,12 @@ export async function getButterSwapStepData(args) {
52
52
  supportsEIP1559,
53
53
  transactionData,
54
54
  from,
55
- // Butter's gasEstimatedTarget lands short on chain (observed 24% under actual, causing
56
- // in-flight OOG/SWAP_FAIL reverts) - estimate ourselves instead
57
55
  stateOverride: {
58
56
  sellAsset,
59
57
  sellAmountCryptoBaseUnit,
60
58
  spenderAddress,
61
59
  },
60
+ providerGasLimit: bnOrZero(route.gasEstimatedTarget).toFixed(),
62
61
  });
63
62
  const stepData = { transactionData, networkFeeCryptoBaseUnit };
64
63
  return Ok(stepData);
@@ -94,7 +94,7 @@ describe('getButterSwapStepData', () => {
94
94
  });
95
95
  // gasEstimatedTarget 1159118 is ignored - the tx carries the buffered on chain estimate
96
96
  expect(actual.unwrap()).toEqual({
97
- networkFeeCryptoBaseUnit: '500000000000000',
97
+ networkFeeCryptoBaseUnit: '600000000000000',
98
98
  transactionData: {
99
99
  type: 'evm',
100
100
  chainId: 1,
@@ -121,7 +121,7 @@ describe('getButterSwapStepData', () => {
121
121
  const { transactionData, networkFeeCryptoBaseUnit } = actual.unwrap();
122
122
  // The buffered limit is set on the tx data in place, so the executable tx always carries one
123
123
  expect(transactionData).toMatchObject({ gasLimit: '600000' });
124
- expect(networkFeeCryptoBaseUnit).toBe('500000000000000');
124
+ expect(networkFeeCryptoBaseUnit).toBe('600000000000000');
125
125
  });
126
126
  it('errors rather than falling back to the provider fee when quote estimation fails', async () => {
127
127
  const actual = await getButterSwapStepData({
@@ -1,4 +1,4 @@
1
- import { getProvidersExcluding } from '@cetusprotocol/aggregator-sdk';
1
+ import { getProvidersExcluding, PYTH_ORACLE_BASED_DEXES } from '@cetusprotocol/aggregator-sdk';
2
2
  import { Transaction } from '@mysten/sui/transactions';
3
3
  import { toAddressNList } from '@shapeshiftoss/chain-adapters';
4
4
  import { TxStatus } from '@shapeshiftoss/unchained-client';
@@ -8,7 +8,6 @@ import { SwapperName } from '../../types.js';
8
8
  import { checkSuiSwapStatus, getExecutableTradeStep, isExecutableTradeQuote } from '../../utils/index.js';
9
9
  import { getTradeQuote } from './swapperApi/getTradeQuote.js';
10
10
  import { getTradeRate } from './swapperApi/getTradeRate.js';
11
- import { PYTH_DEPENDENT_PROVIDERS } from './utils/constants.js';
12
11
  import { findBestRoute, getAggregatorClient, getCoinType, getSuiClient } from './utils/helpers.js';
13
12
  export const cetusApi = {
14
13
  getTradeQuote: (input, deps) => getTradeQuote(input, deps),
@@ -20,12 +19,12 @@ export const cetusApi = {
20
19
  const { accountNumber, sellAsset, buyAsset, sellAmountIncludingProtocolFeesCryptoBaseUnit } = step;
21
20
  const adapter = assertGetSuiChainAdapter(sellAsset.chainId);
22
21
  const rpcUrl = config.VITE_SUI_NODE_URL;
23
- const client = getAggregatorClient(rpcUrl);
22
+ const client = getAggregatorClient(rpcUrl, from);
24
23
  const suiClient = getSuiClient(rpcUrl);
25
24
  const sellCoinType = getCoinType(sellAsset);
26
25
  const buyCoinType = getCoinType(buyAsset);
27
26
  // Exclude Pyth-dependent providers to avoid oracle failures
28
- const providersWithoutPyth = getProvidersExcluding(PYTH_DEPENDENT_PROVIDERS);
27
+ const providersWithoutPyth = getProvidersExcluding(PYTH_ORACLE_BASED_DEXES);
29
28
  const routerData = await findBestRoute(client, sellCoinType, buyCoinType, sellAmountIncludingProtocolFeesCryptoBaseUnit, providersWithoutPyth);
30
29
  if (!routerData) {
31
30
  throw new Error(`No route found for ${sellAsset.symbol}/${buyAsset.symbol}`);
@@ -5,9 +5,11 @@ import { getDefaultSlippageDecimalPercentageForSwapper } from '../../../constant
5
5
  import { SwapperName } from '../../../types.js';
6
6
  import { makeNetworkFeeEstimationFailedErr } from '../../../utils/index.js';
7
7
  import { getAggregatorClient, getSuiClient } from '../utils/helpers.js';
8
+ // The 0x0 dummy sender only holds dust SUI, so server-side gas selection exceeds the payment object limit
9
+ const UNFUNDED_SENDER_ERRORS = ['Insufficient balance of', 'maximum number of gas payment objects'];
8
10
  export async function getCetusStepData(args) {
9
11
  const { routerData, rpcUrl, slippageTolerancePercentageDecimal, from } = args;
10
- const client = getAggregatorClient(rpcUrl);
12
+ const client = getAggregatorClient(rpcUrl, from);
11
13
  const suiClient = getSuiClient(rpcUrl);
12
14
  const slippage = bnOrZero(slippageTolerancePercentageDecimal ??
13
15
  getDefaultSlippageDecimalPercentageForSwapper(SwapperName.Cetus)).toNumber();
@@ -17,12 +19,14 @@ export async function getCetusStepData(args) {
17
19
  txb.setSender(from);
18
20
  await client.fastRouterSwap({ router: routerData, slippage, txb, refreshAllCoins: true });
19
21
  const transactionBytes = await txb.build({ client: suiClient });
20
- const dryRunResult = await suiClient.dryRunTransactionBlock({
21
- transactionBlock: transactionBytes,
22
+ const dryRunResult = await suiClient.simulateTransaction({
23
+ transaction: transactionBytes,
24
+ include: { effects: true },
22
25
  });
23
- const computationCost = BigInt(dryRunResult.effects.gasUsed.computationCost);
24
- const storageCost = BigInt(dryRunResult.effects.gasUsed.storageCost);
25
- const storageRebate = BigInt(dryRunResult.effects.gasUsed.storageRebate);
26
+ const { gasUsed } = (dryRunResult.Transaction ?? dryRunResult.FailedTransaction).effects;
27
+ const computationCost = BigInt(gasUsed.computationCost);
28
+ const storageCost = BigInt(gasUsed.storageCost);
29
+ const storageRebate = BigInt(gasUsed.storageRebate);
26
30
  const netStorageCost = storageCost > storageRebate ? storageCost - storageRebate : 0n;
27
31
  return (computationCost + netStorageCost).toString();
28
32
  };
@@ -33,8 +37,9 @@ export async function getCetusStepData(args) {
33
37
  return Ok(stepData);
34
38
  }
35
39
  catch (error) {
36
- // Walletless rates have no coins to dry-run against - degrade to an unknown fee, but a real route/build error still fails
37
- if (error instanceof Error && error.message.includes('Not enough coins of type')) {
40
+ // Walletless rates have no usable coins to dry-run against - degrade to an unknown fee, but a real route/build error still fails
41
+ const errorMessage = error instanceof Error ? error.message : '';
42
+ if (UNFUNDED_SENDER_ERRORS.some(message => errorMessage.includes(message))) {
38
43
  const stepData = { networkFeeCryptoBaseUnit: undefined };
39
44
  return Ok(stepData);
40
45
  }
@@ -1,10 +1,9 @@
1
- import { getProvidersExcluding } from '@cetusprotocol/aggregator-sdk';
1
+ import { getProvidersExcluding, PYTH_ORACLE_BASED_DEXES } from '@cetusprotocol/aggregator-sdk';
2
2
  import { Err, Ok } from '@sniptt/monads';
3
3
  import { v4 as uuid } from 'uuid';
4
4
  import { SwapperName, TradeQuoteError } from '../../../types.js';
5
5
  import { getInputOutputRate, makeSwapErrorRight } from '../../../utils/index.js';
6
6
  import { buildAffiliateFee } from '../../../utils/affiliateFee.js';
7
- import { PYTH_DEPENDENT_PROVIDERS } from '../utils/constants.js';
8
7
  import { assertValidTrade, findBestRoute, getAggregatorClient, getCoinType } from '../utils/helpers.js';
9
8
  export const getCetusTradeContext = async (input, deps) => {
10
9
  const { sellAsset, buyAsset, sellAmountIncludingProtocolFeesCryptoBaseUnit, affiliateBps } = input;
@@ -17,7 +16,7 @@ export const getCetusTradeContext = async (input, deps) => {
17
16
  const sellCoinType = getCoinType(sellAsset);
18
17
  const buyCoinType = getCoinType(buyAsset);
19
18
  // Exclude Pyth-dependent providers to avoid oracle failures
20
- const providersWithoutPyth = getProvidersExcluding(PYTH_DEPENDENT_PROVIDERS);
19
+ const providersWithoutPyth = getProvidersExcluding(PYTH_ORACLE_BASED_DEXES);
21
20
  const routerData = await findBestRoute(client, sellCoinType, buyCoinType, sellAmountIncludingProtocolFeesCryptoBaseUnit, providersWithoutPyth);
22
21
  if (!routerData) {
23
22
  return Err(makeSwapErrorRight({
@@ -1,6 +1,5 @@
1
1
  import { Err, Ok } from '@sniptt/monads';
2
2
  import { assertQuoteAddresses } from '../../../utils/index.js';
3
- import { FALLBACK_QUOTE_DEADLINE_MS } from '../../../utils/helpers.js';
4
3
  import { getCetusStepData } from './getCetusStepData.js';
5
4
  import { getCetusTradeContext } from './getCetusTradeContext.js';
6
5
  export const getTradeQuote = async (input, deps) => {
@@ -25,7 +24,6 @@ export const getTradeQuote = async (input, deps) => {
25
24
  const tradeQuote = {
26
25
  ...tradeCommon,
27
26
  quoteOrRate: 'quote',
28
- deadline: Date.now() + FALLBACK_QUOTE_DEADLINE_MS,
29
27
  receiveAddress,
30
28
  steps: [
31
29
  {
@@ -1,5 +1,4 @@
1
1
  import type { ChainId } from '@shapeshiftoss/caip';
2
2
  export declare const SUPPORTED_CETUS_CHAIN_IDS: readonly ChainId[];
3
3
  export declare const isSupportedChainId: (chainId: ChainId) => chainId is ChainId;
4
- export declare const PYTH_DEPENDENT_PROVIDERS: string[];
5
4
  export declare const CETUS_FEE_ESTIMATE_DUMMY_ADDRESS = "0x0000000000000000000000000000000000000000000000000000000000000000";