@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
@@ -0,0 +1,30 @@
1
+ import { Err, Ok } from '@sniptt/monads';
2
+ import { getSymbiosisStepData } from '../utils/getSymbiosisStepData.js';
3
+ import { getSymbiosisTradeContext } from '../utils/getSymbiosisTradeContext.js';
4
+ import { getDefaultUserAddress } from '../utils/helpers.js';
5
+ export const getTradeRate = async (input, deps) => {
6
+ const { accountNumber, sellAsset, buyAsset, sendAddress, receiveAddress } = input;
7
+ const from = sendAddress ?? getDefaultUserAddress(sellAsset.chainId);
8
+ const to = receiveAddress ?? getDefaultUserAddress(buyAsset.chainId);
9
+ const maybeContext = await getSymbiosisTradeContext({ input, deps, from, to });
10
+ if (maybeContext.isErr())
11
+ return Err(maybeContext.unwrapErr());
12
+ const { tradeCommon, stepCommon, protocolFees, stepDataArgs } = maybeContext.unwrap();
13
+ const maybeStepData = await getSymbiosisStepData({ ...stepDataArgs, type: 'rate', input });
14
+ if (maybeStepData.isErr())
15
+ return Err(maybeStepData.unwrapErr());
16
+ const { networkFeeCryptoBaseUnit } = maybeStepData.unwrap();
17
+ const tradeRate = {
18
+ ...tradeCommon,
19
+ quoteOrRate: 'rate',
20
+ receiveAddress: to,
21
+ steps: [
22
+ {
23
+ ...stepCommon,
24
+ accountNumber,
25
+ feeData: { networkFeeCryptoBaseUnit, protocolFees },
26
+ },
27
+ ],
28
+ };
29
+ return Ok([tradeRate]);
30
+ };
@@ -0,0 +1,2 @@
1
+ export { symbiosisApi } from './endpoints.js';
2
+ export { symbiosisSwapper } from './SymbiosisSwapper.js';
@@ -0,0 +1,2 @@
1
+ export { symbiosisApi } from './endpoints.js';
2
+ export { symbiosisSwapper } from './SymbiosisSwapper.js';
@@ -0,0 +1,19 @@
1
+ import type { ChainId } from '@shapeshiftoss/caip';
2
+ export declare const chainIdToSymbiosisChainId: Partial<Record<ChainId, number>>;
3
+ export declare const symbiosisChainIdToChainId: Partial<Record<number, ChainId>>;
4
+ export declare const SYMBIOSIS_DISABLED_PROVIDERS = "chainflip-bridge,thorchain-bridge,changelly,intent-solver";
5
+ export declare const SYMBIOSIS_CROSSCHAIN_SWAP_KIND = "crosschain-swap";
6
+ export declare const SYMBIOSIS_SRC_CHAIN_SWAP_LABEL = "src-chain-swap";
7
+ export declare const SYMBIOSIS_PARTNER_SWAP_LABEL = "partner-swap";
8
+ export declare const SYMBIOSIS_SEMI_CENTRALIZED_LABEL = "semi-centralized";
9
+ export declare const SYMBIOSIS_MIN_SLIPPAGE_BPS = 10;
10
+ export declare const SYMBIOSIS_MAX_SLIPPAGE_BPS = 1000;
11
+ export declare const SYMBIOSIS_PARTNER_ADDRESS = "0xF5AA59151bE6515C4Ca68A0282CF68B3eA4846fC";
12
+ export declare const SYMBIOSIS_PARTNER_FEE_BPS = "60";
13
+ export declare const SYMBIOSIS_PARTNER_FEE_DESCRIPTION = "Partner fee";
14
+ export declare const SYMBIOSIS_PARTNER_ID = "shapeshift";
15
+ export declare const DEFAULT_SYMBIOSIS_EVM_USER_ADDRESS = "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045";
16
+ export declare const DEFAULT_SYMBIOSIS_TRON_USER_ADDRESS = "TLa2f6VPqDgRE67v1736s7bJ8Ray5wYjU7";
17
+ export declare const SYMBIOSIS_TRON_BRIDGE_ENERGY = "470000";
18
+ export declare const SYMBIOSIS_TRON_SOURCE_SWAP_ENERGY = "580000";
19
+ export declare const SYMBIOSIS_EXPLORER_URL = "https://explorer.symbiosis.finance";
@@ -0,0 +1,61 @@
1
+ import { abstractChainId, arbitrumChainId, avalancheChainId, baseChainId, berachainChainId, bscChainId, cronosChainId, ethChainId, fromChainId, gnosisChainId, hyperEvmChainId, katanaChainId, lineaChainId, mantleChainId, modeChainId, monadChainId, optimismChainId, plasmaChainId, polygonChainId, robinhoodChainId, scrollChainId, seiChainId, soneiumChainId, sonicChainId, tronChainId, unichainChainId, zkSyncEraChainId, } from '@shapeshiftoss/caip';
2
+ const SYMBIOSIS_TRON_CHAIN_ID = 728126428;
3
+ const SYMBIOSIS_SUPPORTED_EVM_CHAIN_IDS = [
4
+ ethChainId,
5
+ bscChainId,
6
+ polygonChainId,
7
+ avalancheChainId,
8
+ arbitrumChainId,
9
+ optimismChainId,
10
+ baseChainId,
11
+ gnosisChainId,
12
+ zkSyncEraChainId,
13
+ lineaChainId,
14
+ scrollChainId,
15
+ mantleChainId,
16
+ modeChainId,
17
+ seiChainId,
18
+ cronosChainId,
19
+ sonicChainId,
20
+ abstractChainId,
21
+ berachainChainId,
22
+ unichainChainId,
23
+ soneiumChainId,
24
+ hyperEvmChainId,
25
+ katanaChainId,
26
+ plasmaChainId,
27
+ monadChainId,
28
+ robinhoodChainId,
29
+ ];
30
+ // Symbiosis uses the EVM chain reference as its chain id, and its own id for Tron
31
+ const SYMBIOSIS_CHAIN_ID_ENTRIES = [
32
+ ...SYMBIOSIS_SUPPORTED_EVM_CHAIN_IDS.map((chainId) => [
33
+ chainId,
34
+ Number(fromChainId(chainId).chainReference),
35
+ ]),
36
+ [tronChainId, SYMBIOSIS_TRON_CHAIN_ID],
37
+ ];
38
+ export const chainIdToSymbiosisChainId = Object.fromEntries(SYMBIOSIS_CHAIN_ID_ENTRIES);
39
+ export const symbiosisChainIdToChainId = Object.fromEntries(SYMBIOSIS_CHAIN_ID_ENTRIES.map(([chainId, symbiosisChainId]) => [symbiosisChainId, chainId]));
40
+ // Disabled liquidity providers: bridges we integrate directly, custodial Changelly, and intent routes that skip the partner fee
41
+ export const SYMBIOSIS_DISABLED_PROVIDERS = 'chainflip-bridge,thorchain-bridge,changelly,intent-solver';
42
+ export const SYMBIOSIS_CROSSCHAIN_SWAP_KIND = 'crosschain-swap';
43
+ export const SYMBIOSIS_SRC_CHAIN_SWAP_LABEL = 'src-chain-swap';
44
+ // Labels on routes with a leg outside Symbiosis
45
+ export const SYMBIOSIS_PARTNER_SWAP_LABEL = 'partner-swap';
46
+ export const SYMBIOSIS_SEMI_CENTRALIZED_LABEL = 'semi-centralized';
47
+ // /v2/quote answers 'Slippage is too low' under 10 and 'too high' over 1000
48
+ export const SYMBIOSIS_MIN_SLIPPAGE_BPS = 10;
49
+ export const SYMBIOSIS_MAX_SLIPPAGE_BPS = 1000;
50
+ // Our registered partner address and the fixed fee rate Symbiosis has configured for it
51
+ export const SYMBIOSIS_PARTNER_ADDRESS = '0xF5AA59151bE6515C4Ca68A0282CF68B3eA4846fC';
52
+ export const SYMBIOSIS_PARTNER_FEE_BPS = '60';
53
+ export const SYMBIOSIS_PARTNER_FEE_DESCRIPTION = 'Partner fee';
54
+ // Sent as X-Partner-Id so Symbiosis attributes our swaps to this client id in its explorer and metrics
55
+ export const SYMBIOSIS_PARTNER_ID = 'shapeshift';
56
+ export const DEFAULT_SYMBIOSIS_EVM_USER_ADDRESS = '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045';
57
+ export const DEFAULT_SYMBIOSIS_TRON_USER_ADDRESS = 'TLa2f6VPqDgRE67v1736s7bJ8Ray5wYjU7';
58
+ // metaRoute energy over 31 mainnet calls on 2026-10-05: up to 467,826 bridging the sell token, up to 578,456 with a source swap first
59
+ export const SYMBIOSIS_TRON_BRIDGE_ENERGY = '470000';
60
+ export const SYMBIOSIS_TRON_SOURCE_SWAP_ENERGY = '580000';
61
+ export const SYMBIOSIS_EXPLORER_URL = 'https://explorer.symbiosis.finance';
@@ -0,0 +1,26 @@
1
+ import type { Result } from '@sniptt/monads';
2
+ import type { StepDataArgs, SwapErrorRight, TxBuildData } from '../../../types.js';
3
+ import type { SymbiosisSwapTx } from './types.js';
4
+ type BaseArgs = {
5
+ swapTx: SymbiosisSwapTx;
6
+ sellAmountCryptoBaseUnit: string;
7
+ spenderAddress: string;
8
+ tronFallbackEnergy: string;
9
+ };
10
+ export type GetSymbiosisStepDataArgs = StepDataArgs<BaseArgs, {
11
+ from: string;
12
+ }>;
13
+ type SymbiosisRateStepData = {
14
+ networkFeeCryptoBaseUnit: string | undefined;
15
+ };
16
+ type SymbiosisQuoteStepData = {
17
+ transactionData: TxBuildData;
18
+ networkFeeCryptoBaseUnit: string;
19
+ };
20
+ export declare function getSymbiosisStepData(args: Extract<GetSymbiosisStepDataArgs, {
21
+ type: 'rate';
22
+ }>): Promise<Result<SymbiosisRateStepData, SwapErrorRight>>;
23
+ export declare function getSymbiosisStepData(args: Extract<GetSymbiosisStepDataArgs, {
24
+ type: 'quote';
25
+ }>): Promise<Result<SymbiosisQuoteStepData, SwapErrorRight>>;
26
+ export {};
@@ -0,0 +1,102 @@
1
+ import { fromChainId } from '@shapeshiftoss/caip';
2
+ import { tron } from '@shapeshiftoss/chain-adapters';
3
+ import { bnOrZero, isToken } from '@shapeshiftoss/utils';
4
+ import { Err, Ok } from '@sniptt/monads';
5
+ import { makeNetworkFeeEstimationFailedErr, makeTradeStepBuildFailedErr } from '../../../utils/index.js';
6
+ import { getEvmNetworkFeeCryptoBaseUnit } from '../../../utils/evm/index.js';
7
+ import { getTronContractCallFallbackFeeCryptoBaseUnit, getTronContractCallNetworkFeeCryptoBaseUnit, } from '../../../utils/tron/index.js';
8
+ import { chainIdToSymbiosisChainId } from './constants.js';
9
+ import { buildSymbiosisTronCallData } from './helpers.js';
10
+ export async function getSymbiosisStepData(args) {
11
+ const { swapTx, sellAsset, sellAmountCryptoBaseUnit, spenderAddress, tronFallbackEnergy, from, type, input, deps, } = args;
12
+ // Symbiosis adds its own fee to the native value on other route kinds - a step must send exactly the sell amount
13
+ const expectedValue = isToken(sellAsset.assetId) ? '0' : sellAmountCryptoBaseUnit;
14
+ if (!bnOrZero(swapTx.tx.value).eq(expectedValue)) {
15
+ return Err(makeTradeStepBuildFailedErr('getSymbiosisStepData'));
16
+ }
17
+ if (swapTx.tx.chainId !== chainIdToSymbiosisChainId[sellAsset.chainId]) {
18
+ return Err(makeTradeStepBuildFailedErr('getSymbiosisStepData'));
19
+ }
20
+ switch (swapTx.type) {
21
+ case 'evm': {
22
+ const { tx } = swapTx;
23
+ const adapter = deps.assertGetEvmChainAdapter(sellAsset.chainId);
24
+ const supportsEIP1559 = 'supportsEIP1559' in input ? input.supportsEIP1559 : false;
25
+ const transactionData = {
26
+ type: 'evm',
27
+ chainId: Number(fromChainId(sellAsset.chainId).chainReference),
28
+ to: tx.to,
29
+ data: tx.data,
30
+ value: tx.value ?? '0',
31
+ };
32
+ const stateOverride = { sellAsset, sellAmountCryptoBaseUnit, spenderAddress };
33
+ if (type === 'rate') {
34
+ const networkFeeCryptoBaseUnit = await getEvmNetworkFeeCryptoBaseUnit({
35
+ adapter,
36
+ transactionData,
37
+ from,
38
+ supportsEIP1559,
39
+ stateOverride,
40
+ }).catch(() => undefined);
41
+ const stepData = { networkFeeCryptoBaseUnit };
42
+ return Ok(stepData);
43
+ }
44
+ try {
45
+ const networkFeeCryptoBaseUnit = await getEvmNetworkFeeCryptoBaseUnit({
46
+ adapter,
47
+ transactionData,
48
+ from,
49
+ supportsEIP1559,
50
+ stateOverride,
51
+ });
52
+ const stepData = { transactionData, networkFeeCryptoBaseUnit };
53
+ return Ok(stepData);
54
+ }
55
+ catch (error) {
56
+ return Err(makeNetworkFeeEstimationFailedErr('getSymbiosisStepData', error));
57
+ }
58
+ }
59
+ case 'tron': {
60
+ const { tx } = swapTx;
61
+ if (!tx.functionSelector)
62
+ return Err(makeTradeStepBuildFailedErr('getSymbiosisStepData'));
63
+ const adapter = deps.assertGetTronChainAdapter(sellAsset.chainId);
64
+ const call = {
65
+ to: tx.to,
66
+ data: buildSymbiosisTronCallData({ functionSelector: tx.functionSelector, data: tx.data }),
67
+ value: tx.value ?? '0',
68
+ };
69
+ if (type === 'rate') {
70
+ const networkFeeCryptoBaseUnit = await getTronContractCallFallbackFeeCryptoBaseUnit({
71
+ adapter,
72
+ energy: tronFallbackEnergy,
73
+ bandwidthBytes: tron.getTronContractCallBandwidthBytes(call.data),
74
+ contractAddress: call.to,
75
+ fullEnergyOnShareLookupFailure: true,
76
+ }).catch(() => undefined);
77
+ const stepData = { networkFeeCryptoBaseUnit };
78
+ return Ok(stepData);
79
+ }
80
+ try {
81
+ const stepData = {
82
+ transactionData: { type: 'tron', ...call },
83
+ networkFeeCryptoBaseUnit: await getTronContractCallNetworkFeeCryptoBaseUnit({
84
+ adapter,
85
+ transactionData: call,
86
+ from,
87
+ sellAsset,
88
+ sellAmountCryptoBaseUnit,
89
+ spenderAddress,
90
+ fallbackEnergy: tronFallbackEnergy,
91
+ }),
92
+ };
93
+ return Ok(stepData);
94
+ }
95
+ catch (error) {
96
+ return Err(makeNetworkFeeEstimationFailedErr('getSymbiosisStepData', error));
97
+ }
98
+ }
99
+ default:
100
+ return Err(makeTradeStepBuildFailedErr('getSymbiosisStepData'));
101
+ }
102
+ }
@@ -0,0 +1,159 @@
1
+ import { tronAssetId, tronChainId } from '@shapeshiftoss/caip';
2
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
3
+ import { TradeQuoteError } from '../../../types.js';
4
+ import { getEvmNetworkFeeCryptoBaseUnit } from '../../../utils/evm/index.js';
5
+ import { ETH, ETH_ARBITRUM, USDC_ARBITRUM } from '../../../utils/test-data/assets.js';
6
+ import { getTronContractCallNetworkFeeCryptoBaseUnit } from '../../../utils/tron/index.js';
7
+ import { getSymbiosisStepData } from './getSymbiosisStepData.js';
8
+ vi.mock('../../../utils/evm', () => ({
9
+ getEvmNetworkFeeCryptoBaseUnit: vi.fn(),
10
+ }));
11
+ vi.mock('../../../utils/tron', () => ({
12
+ getTronContractCallFallbackFeeCryptoBaseUnit: vi.fn(),
13
+ getTronContractCallNetworkFeeCryptoBaseUnit: vi.fn(),
14
+ }));
15
+ const TRX = {
16
+ ...ETH,
17
+ assetId: tronAssetId,
18
+ chainId: tronChainId,
19
+ symbol: 'TRX',
20
+ precision: 6,
21
+ };
22
+ const ROUTER = '0x3743c756b64ECd0770f1d4f47696A73d2A46dcbe';
23
+ const TRON_ROUTER = 'TPuaJ6gnYfE9gLUDFrbWbPx3tMnjG8max1';
24
+ const FROM = '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045';
25
+ const TRON_FROM = 'TLa2f6VPqDgRE67v1736s7bJ8Ray5wYjU7';
26
+ const deps = {
27
+ assertGetEvmChainAdapter: vi.fn(() => ({})),
28
+ assertGetTronChainAdapter: vi.fn(() => ({})),
29
+ };
30
+ const quoteInput = { supportsEIP1559: true };
31
+ const evmSwapTx = {
32
+ type: 'evm',
33
+ tx: { chainId: 42161, to: ROUTER, data: '0xa11b1198', value: '0' },
34
+ };
35
+ const tronSwapTx = {
36
+ type: 'tron',
37
+ tx: {
38
+ chainId: 728126428,
39
+ from: TRON_FROM,
40
+ to: TRON_ROUTER,
41
+ data: '0x0020',
42
+ value: '500000000',
43
+ feeLimit: 200000000,
44
+ functionSelector: 'metaRoute((bytes,bytes,address[],address,address,uint256,bool,address,bytes))',
45
+ },
46
+ };
47
+ const evmArgs = {
48
+ swapTx: evmSwapTx,
49
+ sellAsset: USDC_ARBITRUM,
50
+ sellAmountCryptoBaseUnit: '100000000',
51
+ spenderAddress: ROUTER,
52
+ tronFallbackEnergy: '470000',
53
+ from: FROM,
54
+ deps,
55
+ };
56
+ const tronArgs = {
57
+ swapTx: tronSwapTx,
58
+ sellAsset: TRX,
59
+ sellAmountCryptoBaseUnit: '500000000',
60
+ spenderAddress: '',
61
+ tronFallbackEnergy: '580000',
62
+ from: TRON_FROM,
63
+ deps,
64
+ };
65
+ describe('getSymbiosisStepData', () => {
66
+ beforeEach(() => {
67
+ vi.clearAllMocks();
68
+ });
69
+ describe('evm', () => {
70
+ it('fails to build when a token sell carries native value', async () => {
71
+ const swapTx = {
72
+ type: 'evm',
73
+ tx: { ...evmSwapTx.tx, value: '300000000000000' },
74
+ };
75
+ const result = await getSymbiosisStepData({
76
+ ...evmArgs,
77
+ swapTx,
78
+ type: 'quote',
79
+ input: quoteInput,
80
+ });
81
+ expect(result.unwrapErr().code).toBe(TradeQuoteError.InvalidResponse);
82
+ expect(getEvmNetworkFeeCryptoBaseUnit).not.toHaveBeenCalled();
83
+ });
84
+ it('fails to build when a native sell sends more than the sell amount', async () => {
85
+ const swapTx = {
86
+ type: 'evm',
87
+ tx: { ...evmSwapTx.tx, value: '50300000000000000' },
88
+ };
89
+ const result = await getSymbiosisStepData({
90
+ ...evmArgs,
91
+ swapTx,
92
+ sellAsset: ETH_ARBITRUM,
93
+ sellAmountCryptoBaseUnit: '50000000000000000',
94
+ type: 'quote',
95
+ input: quoteInput,
96
+ });
97
+ expect(result.unwrapErr().code).toBe(TradeQuoteError.InvalidResponse);
98
+ expect(getEvmNetworkFeeCryptoBaseUnit).not.toHaveBeenCalled();
99
+ });
100
+ it('fails to build when the payload is for another chain', async () => {
101
+ const swapTx = { type: 'evm', tx: { ...evmSwapTx.tx, chainId: 1 } };
102
+ const result = await getSymbiosisStepData({
103
+ ...evmArgs,
104
+ swapTx,
105
+ type: 'quote',
106
+ input: quoteInput,
107
+ });
108
+ expect(result.unwrapErr().code).toBe(TradeQuoteError.InvalidResponse);
109
+ expect(getEvmNetworkFeeCryptoBaseUnit).not.toHaveBeenCalled();
110
+ });
111
+ it('builds a native sell whose value is exactly the sell amount', async () => {
112
+ vi.mocked(getEvmNetworkFeeCryptoBaseUnit).mockResolvedValue('1234');
113
+ const swapTx = {
114
+ type: 'evm',
115
+ tx: { ...evmSwapTx.tx, value: '50000000000000000' },
116
+ };
117
+ const result = await getSymbiosisStepData({
118
+ ...evmArgs,
119
+ swapTx,
120
+ sellAsset: ETH_ARBITRUM,
121
+ sellAmountCryptoBaseUnit: '50000000000000000',
122
+ type: 'quote',
123
+ input: quoteInput,
124
+ });
125
+ expect(result.isOk()).toBe(true);
126
+ });
127
+ });
128
+ describe('tron', () => {
129
+ const expectedCall = { to: TRON_ROUTER, data: '0xa11b11980020', value: '500000000' };
130
+ it('assembles the contract call and prices it for a quote', async () => {
131
+ vi.mocked(getTronContractCallNetworkFeeCryptoBaseUnit).mockResolvedValue('45000000');
132
+ const result = await getSymbiosisStepData({ ...tronArgs, type: 'quote', input: quoteInput });
133
+ expect(result.unwrap()).toEqual({
134
+ transactionData: { type: 'tron', ...expectedCall },
135
+ networkFeeCryptoBaseUnit: '45000000',
136
+ });
137
+ expect(getTronContractCallNetworkFeeCryptoBaseUnit).toHaveBeenCalledWith(expect.objectContaining({
138
+ transactionData: expectedCall,
139
+ from: TRON_FROM,
140
+ spenderAddress: '',
141
+ fallbackEnergy: '580000',
142
+ }));
143
+ });
144
+ it('fails to build when the response has no function selector', async () => {
145
+ const swapTx = {
146
+ type: 'tron',
147
+ tx: { ...tronSwapTx.tx, functionSelector: undefined },
148
+ };
149
+ const result = await getSymbiosisStepData({
150
+ ...tronArgs,
151
+ swapTx,
152
+ type: 'quote',
153
+ input: quoteInput,
154
+ });
155
+ expect(result.unwrapErr().code).toBe(TradeQuoteError.InvalidResponse);
156
+ expect(getTronContractCallNetworkFeeCryptoBaseUnit).not.toHaveBeenCalled();
157
+ });
158
+ });
159
+ });
@@ -0,0 +1,17 @@
1
+ import type { Result } from '@sniptt/monads';
2
+ import type { QuoteFeeData, SwapErrorRight, SwapperDeps, TradeCommon, TradeStepCommon } from '../../../types.js';
3
+ import type { GetSymbiosisStepDataArgs } from './getSymbiosisStepData.js';
4
+ import type { SymbiosisTradeQuoteInput, SymbiosisTradeRateInput } from './types.js';
5
+ type SymbiosisTradeContext = {
6
+ tradeCommon: TradeCommon;
7
+ stepCommon: Omit<TradeStepCommon, 'feeData'>;
8
+ protocolFees: QuoteFeeData['protocolFees'];
9
+ stepDataArgs: Omit<GetSymbiosisStepDataArgs, 'type' | 'input'>;
10
+ };
11
+ export declare const getSymbiosisTradeContext: ({ input, deps, from, to, }: {
12
+ input: SymbiosisTradeQuoteInput | SymbiosisTradeRateInput;
13
+ deps: SwapperDeps;
14
+ from: string;
15
+ to: string;
16
+ }) => Promise<Result<SymbiosisTradeContext, SwapErrorRight>>;
17
+ export {};
@@ -0,0 +1,139 @@
1
+ import { bn, isToken } from '@shapeshiftoss/utils';
2
+ import { Err, Ok } from '@sniptt/monads';
3
+ import axios from 'axios';
4
+ import { v4 as uuid } from 'uuid';
5
+ import { getDefaultSlippageDecimalPercentageForSwapper } from '../../../constants.js';
6
+ import { SwapperName, TradeQuoteError } from '../../../types.js';
7
+ import { getInputOutputRate, makeSwapErrorRight } from '../../../utils/index.js';
8
+ import { buildAffiliateFee } from '../../../utils/affiliateFee.js';
9
+ import { SYMBIOSIS_DISABLED_PROVIDERS, SYMBIOSIS_PARTNER_FEE_BPS, SYMBIOSIS_PARTNER_FEE_DESCRIPTION, } from './constants.js';
10
+ import { assertValidTrade, getSymbiosisPartnerAddress, getSymbiosisProtocolFees, getSymbiosisSlippageBps, getSymbiosisTokenAddress, getSymbiosisTronFallbackEnergy, isSymbiosisRouteSupported, symbiosisErrorToTradeQuoteError, } from './helpers.js';
11
+ import { symbiosisService } from './symbiosisService.js';
12
+ export const getSymbiosisTradeContext = async ({ input, deps, from, to, }) => {
13
+ const { sellAsset, buyAsset, sellAmountIncludingProtocolFeesCryptoBaseUnit, affiliateBps } = input;
14
+ const assertion = assertValidTrade({ sellAsset, buyAsset });
15
+ if (assertion.isErr())
16
+ return Err(assertion.unwrapErr());
17
+ const { sellSymbiosisChainId, buySymbiosisChainId } = assertion.unwrap();
18
+ const slippageBps = getSymbiosisSlippageBps(input.slippageTolerancePercentageDecimal ??
19
+ getDefaultSlippageDecimalPercentageForSwapper(SwapperName.Symbiosis));
20
+ const maybePartnerAddress = getSymbiosisPartnerAddress(affiliateBps);
21
+ if (maybePartnerAddress.isErr())
22
+ return Err(maybePartnerAddress.unwrapErr());
23
+ const partnerAddress = maybePartnerAddress.unwrap();
24
+ const request = {
25
+ tokenAmountIn: {
26
+ chainId: sellSymbiosisChainId,
27
+ address: getSymbiosisTokenAddress(sellAsset),
28
+ decimals: sellAsset.precision,
29
+ amount: sellAmountIncludingProtocolFeesCryptoBaseUnit,
30
+ },
31
+ tokenOut: {
32
+ chainId: buySymbiosisChainId,
33
+ address: getSymbiosisTokenAddress(buyAsset),
34
+ decimals: buyAsset.precision,
35
+ },
36
+ from,
37
+ to,
38
+ slippage: slippageBps,
39
+ disabledProviders: SYMBIOSIS_DISABLED_PROVIDERS,
40
+ partnerAddress,
41
+ };
42
+ const maybeQuote = await symbiosisService.post(`${deps.config.VITE_SYMBIOSIS_API_URL}/v2/quote`, request);
43
+ if (maybeQuote.isErr()) {
44
+ const { cause } = maybeQuote.unwrapErr();
45
+ if (!axios.isAxiosError(cause)) {
46
+ return Err(makeSwapErrorRight({
47
+ message: 'Unknown error',
48
+ code: TradeQuoteError.UnknownError,
49
+ cause,
50
+ }));
51
+ }
52
+ if (cause.response?.status === 429) {
53
+ return Err(makeSwapErrorRight({
54
+ message: 'Symbiosis rate limit exceeded',
55
+ code: TradeQuoteError.RateLimitExceeded,
56
+ }));
57
+ }
58
+ const message = cause.response?.data?.message;
59
+ return Err(makeSwapErrorRight({
60
+ message: message ?? 'Symbiosis quote request failed',
61
+ code: symbiosisErrorToTradeQuoteError(message),
62
+ }));
63
+ }
64
+ const { data: quote } = maybeQuote.unwrap();
65
+ if (!isSymbiosisRouteSupported({ quote, sellAsset })) {
66
+ return Err(makeSwapErrorRight({
67
+ message: 'No Symbiosis route through its own liquidity',
68
+ code: TradeQuoteError.NoRouteFound,
69
+ }));
70
+ }
71
+ // The quote must carry the fee we report, otherwise Symbiosis is not collecting it on this route
72
+ if (partnerAddress &&
73
+ !quote.fees.some(fee => fee.description === SYMBIOSIS_PARTNER_FEE_DESCRIPTION)) {
74
+ return Err(makeSwapErrorRight({
75
+ message: 'Symbiosis quote is missing the partner fee',
76
+ code: TradeQuoteError.InvalidResponse,
77
+ }));
78
+ }
79
+ const buyAmountAfterFeesCryptoBaseUnit = quote.tokenAmountOut.amount;
80
+ const protocolFees = getSymbiosisProtocolFees(quote.fees);
81
+ const buyAmountBeforeFeesCryptoBaseUnit = bn(buyAmountAfterFeesCryptoBaseUnit)
82
+ .plus(protocolFees[buyAsset.assetId]?.amountCryptoBaseUnit ?? 0)
83
+ .toFixed(0);
84
+ const rate = getInputOutputRate({
85
+ sellAmountCryptoBaseUnit: sellAmountIncludingProtocolFeesCryptoBaseUnit,
86
+ buyAmountCryptoBaseUnit: buyAmountAfterFeesCryptoBaseUnit,
87
+ sellAsset,
88
+ buyAsset,
89
+ });
90
+ const allowanceContract = isToken(sellAsset.assetId) ? quote.approveTo : '';
91
+ if (allowanceContract === undefined) {
92
+ return Err(makeSwapErrorRight({
93
+ message: 'Symbiosis returned no spender for a token sell',
94
+ code: TradeQuoteError.QueryFailed,
95
+ }));
96
+ }
97
+ return Ok({
98
+ tradeCommon: {
99
+ id: uuid(),
100
+ rate,
101
+ swapperName: SwapperName.Symbiosis,
102
+ affiliateBps: partnerAddress ? SYMBIOSIS_PARTNER_FEE_BPS : '0',
103
+ slippageTolerancePercentageDecimal: bn(slippageBps).div(10000).toString(),
104
+ },
105
+ stepCommon: {
106
+ allowanceContract,
107
+ rate,
108
+ buyAmountBeforeFeesCryptoBaseUnit,
109
+ buyAmountAfterFeesCryptoBaseUnit,
110
+ sellAmountIncludingProtocolFeesCryptoBaseUnit,
111
+ buyAsset,
112
+ sellAsset,
113
+ source: SwapperName.Symbiosis,
114
+ estimatedExecutionTimeMs: quote.estimatedTime * 1000,
115
+ // The fee accrues in sTokens on the Symbiosis chain - the buy asset figure is a display estimate
116
+ affiliateFee: partnerAddress
117
+ ? buildAffiliateFee({
118
+ strategy: 'buy_asset',
119
+ affiliateBps: SYMBIOSIS_PARTNER_FEE_BPS,
120
+ sellAsset,
121
+ buyAsset,
122
+ sellAmountCryptoBaseUnit: sellAmountIncludingProtocolFeesCryptoBaseUnit,
123
+ buyAmountCryptoBaseUnit: buyAmountAfterFeesCryptoBaseUnit,
124
+ isEstimate: true,
125
+ })
126
+ : undefined,
127
+ },
128
+ protocolFees,
129
+ stepDataArgs: {
130
+ swapTx: quote,
131
+ sellAsset,
132
+ sellAmountCryptoBaseUnit: sellAmountIncludingProtocolFeesCryptoBaseUnit,
133
+ spenderAddress: allowanceContract,
134
+ tronFallbackEnergy: getSymbiosisTronFallbackEnergy(quote.labels),
135
+ from,
136
+ deps,
137
+ },
138
+ });
139
+ };
@@ -0,0 +1,38 @@
1
+ import type { AssetId, ChainId } from '@shapeshiftoss/caip';
2
+ import type { Asset } from '@shapeshiftoss/types';
3
+ import type { Result } from '@sniptt/monads';
4
+ import type { QuoteFeeData, SwapErrorRight, TradeStatus } from '../../../types.js';
5
+ import { TradeQuoteError } from '../../../types.js';
6
+ import type { SymbiosisFee, SymbiosisQuoteResponse, SymbiosisToken, SymbiosisTxResponse } from './types.js';
7
+ export declare const assertValidTrade: ({ sellAsset, buyAsset, }: {
8
+ sellAsset: Asset;
9
+ buyAsset: Asset;
10
+ }) => Result<{
11
+ sellSymbiosisChainId: number;
12
+ buySymbiosisChainId: number;
13
+ }, SwapErrorRight>;
14
+ export declare const getSymbiosisTokenAddress: (asset: Asset) => string;
15
+ export declare const getSymbiosisSlippageBps: (slippageTolerancePercentageDecimal: string) => number;
16
+ export declare const getDefaultUserAddress: (chainId: ChainId) => string;
17
+ export declare const getSymbiosisPartnerAddress: (affiliateBps: string) => Result<string | undefined, SwapErrorRight>;
18
+ export declare const buildSymbiosisTronCallData: ({ functionSelector, data, }: {
19
+ functionSelector: string;
20
+ data: string;
21
+ }) => string;
22
+ export declare const getSymbiosisTronFallbackEnergy: (labels: string[]) => string;
23
+ export declare const isSymbiosisRouteSupported: ({ quote, sellAsset, }: {
24
+ quote: SymbiosisQuoteResponse;
25
+ sellAsset: Asset;
26
+ }) => boolean;
27
+ export declare const getSymbiosisFeeAssetId: ({ chainId: symbiosisChainId, address, }: Pick<SymbiosisToken, 'chainId' | 'address'>) => AssetId | undefined;
28
+ export declare const getSymbiosisProtocolFees: (fees: SymbiosisFee[]) => NonNullable<QuoteFeeData['protocolFees']>;
29
+ export declare const symbiosisErrorToTradeQuoteError: (message: string | undefined) => TradeQuoteError;
30
+ export declare const isTronSourceTxFailed: (tx: {
31
+ ret?: {
32
+ contractRet?: string;
33
+ }[];
34
+ }) => boolean;
35
+ export declare const getSymbiosisTradeStatus: ({ response, buySymbiosisChainId, }: {
36
+ response: SymbiosisTxResponse;
37
+ buySymbiosisChainId: number | undefined;
38
+ }) => Pick<TradeStatus, 'status' | 'buyTxHash' | 'message'>;