@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,172 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getSymbiosisTradeStatus = exports.isTronSourceTxFailed = exports.symbiosisErrorToTradeQuoteError = exports.getSymbiosisProtocolFees = exports.getSymbiosisFeeAssetId = exports.isSymbiosisRouteSupported = exports.getSymbiosisTronFallbackEnergy = exports.buildSymbiosisTronCallData = exports.getSymbiosisPartnerAddress = exports.getDefaultUserAddress = exports.getSymbiosisSlippageBps = exports.getSymbiosisTokenAddress = exports.assertValidTrade = void 0;
4
+ const caip_1 = require("@shapeshiftoss/caip");
5
+ const chain_adapters_1 = require("@shapeshiftoss/chain-adapters");
6
+ const unchained_client_1 = require("@shapeshiftoss/unchained-client");
7
+ const utils_1 = require("@shapeshiftoss/utils");
8
+ const monads_1 = require("@sniptt/monads");
9
+ const viem_1 = require("viem");
10
+ const types_1 = require("../../../types");
11
+ const utils_2 = require("../../../utils");
12
+ const constants_1 = require("./constants");
13
+ const types_2 = require("./types");
14
+ const assertValidTrade = ({ sellAsset, buyAsset, }) => {
15
+ const sellSymbiosisChainId = constants_1.chainIdToSymbiosisChainId[sellAsset.chainId];
16
+ const buySymbiosisChainId = constants_1.chainIdToSymbiosisChainId[buyAsset.chainId];
17
+ if (sellSymbiosisChainId === undefined) {
18
+ return (0, monads_1.Err)((0, utils_2.makeSwapErrorRight)({
19
+ message: `Sell asset chain '${sellAsset.chainId}' not supported by Symbiosis`,
20
+ code: types_1.TradeQuoteError.UnsupportedChain,
21
+ }));
22
+ }
23
+ if (buySymbiosisChainId === undefined) {
24
+ return (0, monads_1.Err)((0, utils_2.makeSwapErrorRight)({
25
+ message: `Buy asset chain '${buyAsset.chainId}' not supported by Symbiosis`,
26
+ code: types_1.TradeQuoteError.UnsupportedChain,
27
+ }));
28
+ }
29
+ if (sellAsset.chainId === buyAsset.chainId) {
30
+ return (0, monads_1.Err)((0, utils_2.makeSwapErrorRight)({
31
+ message: 'Symbiosis same-chain swaps are not supported',
32
+ code: types_1.TradeQuoteError.UnsupportedTradePair,
33
+ }));
34
+ }
35
+ return (0, monads_1.Ok)({ sellSymbiosisChainId, buySymbiosisChainId });
36
+ };
37
+ exports.assertValidTrade = assertValidTrade;
38
+ const getSymbiosisTokenAddress = (asset) => {
39
+ if (!(0, utils_1.isToken)(asset.assetId))
40
+ return '';
41
+ const { assetReference } = (0, caip_1.fromAssetId)(asset.assetId);
42
+ if (asset.chainId === caip_1.tronChainId)
43
+ return chain_adapters_1.tron.toTronHex(assetReference);
44
+ return (0, viem_1.getAddress)(assetReference);
45
+ };
46
+ exports.getSymbiosisTokenAddress = getSymbiosisTokenAddress;
47
+ const getSymbiosisSlippageBps = (slippageTolerancePercentageDecimal) => {
48
+ const bps = Math.round((0, utils_1.bnOrZero)(slippageTolerancePercentageDecimal).times(10000).toNumber());
49
+ return Math.min(Math.max(bps, constants_1.SYMBIOSIS_MIN_SLIPPAGE_BPS), constants_1.SYMBIOSIS_MAX_SLIPPAGE_BPS);
50
+ };
51
+ exports.getSymbiosisSlippageBps = getSymbiosisSlippageBps;
52
+ const getDefaultUserAddress = (chainId) => chainId === caip_1.tronChainId ? constants_1.DEFAULT_SYMBIOSIS_TRON_USER_ADDRESS : constants_1.DEFAULT_SYMBIOSIS_EVM_USER_ADDRESS;
53
+ exports.getDefaultUserAddress = getDefaultUserAddress;
54
+ // Symbiosis fixes the partner rate on its side, so only a fee-free swap or the registered rate can be honored
55
+ const getSymbiosisPartnerAddress = (affiliateBps) => {
56
+ const requestedBps = (0, utils_1.bnOrZero)(affiliateBps);
57
+ if (requestedBps.isZero())
58
+ return (0, monads_1.Ok)(undefined);
59
+ if (requestedBps.eq(constants_1.SYMBIOSIS_PARTNER_FEE_BPS))
60
+ return (0, monads_1.Ok)(constants_1.SYMBIOSIS_PARTNER_ADDRESS);
61
+ return (0, monads_1.Err)((0, utils_2.makeSwapErrorRight)({
62
+ message: `Symbiosis only supports a ${constants_1.SYMBIOSIS_PARTNER_FEE_BPS} bps affiliate fee, got ${affiliateBps}`,
63
+ code: types_1.TradeQuoteError.UnsupportedTradePair,
64
+ }));
65
+ };
66
+ exports.getSymbiosisPartnerAddress = getSymbiosisPartnerAddress;
67
+ // Symbiosis returns the function signature and its encoded parameters separately
68
+ const buildSymbiosisTronCallData = ({ functionSelector, data, }) => {
69
+ const selector = (0, viem_1.keccak256)((0, viem_1.toHex)(functionSelector)).slice(0, 10);
70
+ const parameters = data.startsWith('0x') ? data.slice(2) : data;
71
+ return `${selector}${parameters}`;
72
+ };
73
+ exports.buildSymbiosisTronCallData = buildSymbiosisTronCallData;
74
+ const getSymbiosisTronFallbackEnergy = (labels) => labels.includes(constants_1.SYMBIOSIS_SRC_CHAIN_SWAP_LABEL)
75
+ ? constants_1.SYMBIOSIS_TRON_SOURCE_SWAP_ENERGY
76
+ : constants_1.SYMBIOSIS_TRON_BRIDGE_ENERGY;
77
+ exports.getSymbiosisTronFallbackEnergy = getSymbiosisTronFallbackEnergy;
78
+ const isSymbiosisRouteSupported = ({ quote, sellAsset, }) => {
79
+ if (quote.kind !== constants_1.SYMBIOSIS_CROSSCHAIN_SWAP_KIND)
80
+ return false;
81
+ if (quote.labels.includes(constants_1.SYMBIOSIS_PARTNER_SWAP_LABEL))
82
+ return false;
83
+ if (quote.labels.includes(constants_1.SYMBIOSIS_SEMI_CENTRALIZED_LABEL))
84
+ return false;
85
+ const expectedType = sellAsset.chainId === caip_1.tronChainId ? 'tron' : 'evm';
86
+ return quote.type === expectedType;
87
+ };
88
+ exports.isSymbiosisRouteSupported = isSymbiosisRouteSupported;
89
+ const getSymbiosisFeeAssetId = ({ chainId: symbiosisChainId, address, }) => {
90
+ const chainId = constants_1.symbiosisChainIdToChainId[symbiosisChainId];
91
+ if (!chainId)
92
+ return;
93
+ if (!address)
94
+ return (0, utils_1.chainIdToFeeAssetId)(chainId);
95
+ if (chainId === caip_1.tronChainId) {
96
+ return (0, caip_1.toAssetId)({
97
+ chainId,
98
+ assetNamespace: caip_1.ASSET_NAMESPACE.trc20,
99
+ assetReference: chain_adapters_1.tron.toTronBase58(address),
100
+ });
101
+ }
102
+ return (0, caip_1.toAssetId)({
103
+ chainId,
104
+ assetNamespace: caip_1.ASSET_NAMESPACE.erc20,
105
+ assetReference: address.toLowerCase(),
106
+ });
107
+ };
108
+ exports.getSymbiosisFeeAssetId = getSymbiosisFeeAssetId;
109
+ // Fees on the Symbiosis host chain are charged in sTokens we have no asset for - they are already net of the buy amount
110
+ const getSymbiosisProtocolFees = (fees) => fees.reduce((acc, { value }) => {
111
+ const assetId = (0, exports.getSymbiosisFeeAssetId)(value);
112
+ const chainId = constants_1.symbiosisChainIdToChainId[value.chainId];
113
+ if (!assetId || !chainId)
114
+ return acc;
115
+ acc[assetId] = {
116
+ amountCryptoBaseUnit: (0, utils_1.bnOrZero)(acc[assetId]?.amountCryptoBaseUnit)
117
+ .plus(value.amount)
118
+ .toFixed(0),
119
+ asset: { symbol: value.symbol, chainId, precision: value.decimals },
120
+ requiresBalance: false,
121
+ };
122
+ return acc;
123
+ }, {});
124
+ exports.getSymbiosisProtocolFees = getSymbiosisProtocolFees;
125
+ const symbiosisErrorToTradeQuoteError = (message) => {
126
+ if (message?.startsWith('Amount is too low'))
127
+ return types_1.TradeQuoteError.SellAmountBelowTradeFee;
128
+ if (message === 'This swap is not available')
129
+ return types_1.TradeQuoteError.NoRouteFound;
130
+ return types_1.TradeQuoteError.QueryFailed;
131
+ };
132
+ exports.symbiosisErrorToTradeQuoteError = symbiosisErrorToTradeQuoteError;
133
+ // A mined Tron call that did not succeed (REVERT, OUT_OF_ENERGY, ...) never reaches Symbiosis, which answers not found for it
134
+ const isTronSourceTxFailed = (tx) => {
135
+ const contractRet = tx.ret?.[0]?.contractRet;
136
+ return contractRet !== undefined && contractRet !== 'SUCCESS';
137
+ };
138
+ exports.isTronSourceTxFailed = isTronSourceTxFailed;
139
+ const getSymbiosisTradeStatus = ({ response, buySymbiosisChainId, }) => {
140
+ const { status, tx, transitTokenSent } = response;
141
+ switch (status.code) {
142
+ case types_2.SymbiosisStatusCode.Success: {
143
+ // Until the operation is indexed, Symbiosis answers Success for the plain source transaction
144
+ if (tx?.chainId !== buySymbiosisChainId) {
145
+ return { status: unchained_client_1.TxStatus.Pending, buyTxHash: undefined, message: undefined };
146
+ }
147
+ const message = transitTokenSent
148
+ ? `Received ${(0, utils_1.bn)(transitTokenSent.amount)
149
+ .shiftedBy(-transitTokenSent.decimals)
150
+ .toFixed()} ${transitTokenSent.symbol} instead of the buy asset`
151
+ : undefined;
152
+ return { status: unchained_client_1.TxStatus.Confirmed, buyTxHash: tx?.hash, message };
153
+ }
154
+ case types_2.SymbiosisStatusCode.Pending:
155
+ return { status: unchained_client_1.TxStatus.Pending, buyTxHash: undefined, message: undefined };
156
+ case types_2.SymbiosisStatusCode.Stuck:
157
+ return {
158
+ status: unchained_client_1.TxStatus.Pending,
159
+ buyTxHash: undefined,
160
+ message: 'Swap is stuck and is being reverted by Symbiosis',
161
+ };
162
+ case types_2.SymbiosisStatusCode.Reverted:
163
+ return {
164
+ status: unchained_client_1.TxStatus.Failed,
165
+ buyTxHash: undefined,
166
+ message: 'Swap was reverted by Symbiosis',
167
+ };
168
+ default:
169
+ return { status: unchained_client_1.TxStatus.Unknown, buyTxHash: undefined, message: undefined };
170
+ }
171
+ };
172
+ exports.getSymbiosisTradeStatus = getSymbiosisTradeStatus;
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const caip_1 = require("@shapeshiftoss/caip");
4
+ const unchained_client_1 = require("@shapeshiftoss/unchained-client");
5
+ const vitest_1 = require("vitest");
6
+ const constants_1 = require("./constants");
7
+ const helpers_1 = require("./helpers");
8
+ const types_1 = require("./types");
9
+ const BSC_USDC_ADDRESS = '0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d';
10
+ const BSC_USDC_ASSET_ID = 'eip155:56/erc20:0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d';
11
+ // The fees array of a live Arbitrum USDC -> BSC quote: one host chain sToken entry, one destination entry
12
+ const liveFees = [
13
+ {
14
+ provider: 'symbiosis',
15
+ description: 'Cross-chain fee',
16
+ value: {
17
+ symbol: 'sUSDC',
18
+ address: '0xc317169a336b484f65B0AB4A794bBe66a7491E83',
19
+ amount: '250000',
20
+ chainId: 13863860,
21
+ decimals: 6,
22
+ },
23
+ },
24
+ {
25
+ provider: 'symbiosis',
26
+ description: 'Cross-chain fee',
27
+ value: {
28
+ symbol: 'USDC',
29
+ address: BSC_USDC_ADDRESS,
30
+ amount: '250000000000000000',
31
+ chainId: 56,
32
+ decimals: 18,
33
+ },
34
+ },
35
+ ];
36
+ (0, vitest_1.describe)('getSymbiosisSlippageBps', () => {
37
+ (0, vitest_1.it)('raises slippage below the Symbiosis minimum to 10 bps', () => {
38
+ (0, vitest_1.expect)((0, helpers_1.getSymbiosisSlippageBps)('0.0005')).toBe(10);
39
+ (0, vitest_1.expect)((0, helpers_1.getSymbiosisSlippageBps)('0')).toBe(10);
40
+ });
41
+ (0, vitest_1.it)('lowers slippage above the Symbiosis maximum to 1000 bps', () => {
42
+ (0, vitest_1.expect)((0, helpers_1.getSymbiosisSlippageBps)('0.25')).toBe(1000);
43
+ });
44
+ });
45
+ (0, vitest_1.describe)('getSymbiosisPartnerAddress', () => {
46
+ (0, vitest_1.it)('sends the partner address at the registered rate', () => {
47
+ (0, vitest_1.expect)((0, helpers_1.getSymbiosisPartnerAddress)('60').unwrap()).toBe(constants_1.SYMBIOSIS_PARTNER_ADDRESS);
48
+ });
49
+ (0, vitest_1.it)('omits the partner address for a fee-free swap', () => {
50
+ (0, vitest_1.expect)((0, helpers_1.getSymbiosisPartnerAddress)('0').unwrap()).toBeUndefined();
51
+ });
52
+ (0, vitest_1.it)('rejects any other rate instead of silently dropping the fee', () => {
53
+ (0, vitest_1.expect)((0, helpers_1.getSymbiosisPartnerAddress)('30').isErr()).toBe(true);
54
+ (0, vitest_1.expect)((0, helpers_1.getSymbiosisPartnerAddress)('80').isErr()).toBe(true);
55
+ });
56
+ });
57
+ (0, vitest_1.describe)('buildSymbiosisTronCallData', () => {
58
+ const functionSelector = 'metaRoute((bytes,bytes,address[],address,address,uint256,bool,address,bytes))';
59
+ (0, vitest_1.it)('prefixes the parameters with the 4-byte selector of the signature', () => {
60
+ const data = `0x${'00'.repeat(31)}20`;
61
+ (0, vitest_1.expect)((0, helpers_1.buildSymbiosisTronCallData)({ functionSelector, data })).toBe(`0xa11b1198${'00'.repeat(31)}20`);
62
+ });
63
+ });
64
+ (0, vitest_1.describe)('getSymbiosisFeeAssetId', () => {
65
+ (0, vitest_1.it)('maps a Tron hex address to its base58 trc20 asset id', () => {
66
+ (0, vitest_1.expect)((0, helpers_1.getSymbiosisFeeAssetId)({
67
+ chainId: 728126428,
68
+ address: '0xa614f803b6fd780986a42c78ec9c7f77e6ded13c',
69
+ })).toBe(caip_1.usdtOnTronAssetId);
70
+ });
71
+ });
72
+ (0, vitest_1.describe)('getSymbiosisProtocolFees', () => {
73
+ (0, vitest_1.it)('keeps resolvable fees and skips host chain sToken fees', () => {
74
+ (0, vitest_1.expect)((0, helpers_1.getSymbiosisProtocolFees)(liveFees)).toEqual({
75
+ [BSC_USDC_ASSET_ID]: {
76
+ amountCryptoBaseUnit: '250000000000000000',
77
+ asset: { symbol: 'USDC', chainId: 'eip155:56', precision: 18 },
78
+ requiresBalance: false,
79
+ },
80
+ });
81
+ });
82
+ (0, vitest_1.it)('sums fees charged in the same asset', () => {
83
+ const fees = (0, helpers_1.getSymbiosisProtocolFees)([liveFees[1], liveFees[1]]);
84
+ (0, vitest_1.expect)(fees[BSC_USDC_ASSET_ID]?.amountCryptoBaseUnit).toBe('500000000000000000');
85
+ });
86
+ });
87
+ (0, vitest_1.describe)('getSymbiosisTradeStatus', () => {
88
+ const buySymbiosisChainId = 56;
89
+ const makeResponse = (overrides) => ({
90
+ status: { code: types_1.SymbiosisStatusCode.Success, text: 'Success' },
91
+ txIn: { hash: '0xsell', chainId: 42161 },
92
+ tx: { hash: '0xbuy', chainId: 56 },
93
+ ...overrides,
94
+ });
95
+ (0, vitest_1.it)('confirms with the destination hash once the destination tx is on the buy chain', () => {
96
+ (0, vitest_1.expect)((0, helpers_1.getSymbiosisTradeStatus)({ response: makeResponse({}), buySymbiosisChainId })).toEqual({
97
+ status: unchained_client_1.TxStatus.Confirmed,
98
+ buyTxHash: '0xbuy',
99
+ message: undefined,
100
+ });
101
+ });
102
+ (0, vitest_1.it)('stays pending when Success describes the source transaction itself', () => {
103
+ const response = makeResponse({ tx: { hash: '0xsell', chainId: 42161 } });
104
+ (0, vitest_1.expect)((0, helpers_1.getSymbiosisTradeStatus)({ response, buySymbiosisChainId })).toEqual({
105
+ status: unchained_client_1.TxStatus.Pending,
106
+ buyTxHash: undefined,
107
+ message: undefined,
108
+ });
109
+ });
110
+ (0, vitest_1.it)('names the transit token when the destination swap did not complete', () => {
111
+ const response = makeResponse({
112
+ transitTokenSent: {
113
+ chainId: 56,
114
+ address: BSC_USDC_ADDRESS,
115
+ decimals: 18,
116
+ symbol: 'USDC',
117
+ amount: '250000000000000000',
118
+ },
119
+ });
120
+ (0, vitest_1.expect)((0, helpers_1.getSymbiosisTradeStatus)({ response, buySymbiosisChainId })).toEqual({
121
+ status: unchained_client_1.TxStatus.Confirmed,
122
+ buyTxHash: '0xbuy',
123
+ message: 'Received 0.25 USDC instead of the buy asset',
124
+ });
125
+ });
126
+ (0, vitest_1.it)('maps pending, stuck, reverted and not found', () => {
127
+ const pending = makeResponse({ status: { code: types_1.SymbiosisStatusCode.Pending, text: '' } });
128
+ const stuck = makeResponse({ status: { code: types_1.SymbiosisStatusCode.Stuck, text: '' } });
129
+ const reverted = makeResponse({ status: { code: types_1.SymbiosisStatusCode.Reverted, text: '' } });
130
+ const notFound = makeResponse({ status: { code: types_1.SymbiosisStatusCode.NotFound, text: '' } });
131
+ (0, vitest_1.expect)((0, helpers_1.getSymbiosisTradeStatus)({ response: pending, buySymbiosisChainId }).status).toBe(unchained_client_1.TxStatus.Pending);
132
+ (0, vitest_1.expect)((0, helpers_1.getSymbiosisTradeStatus)({ response: stuck, buySymbiosisChainId })).toEqual({
133
+ status: unchained_client_1.TxStatus.Pending,
134
+ buyTxHash: undefined,
135
+ message: 'Swap is stuck and is being reverted by Symbiosis',
136
+ });
137
+ (0, vitest_1.expect)((0, helpers_1.getSymbiosisTradeStatus)({ response: reverted, buySymbiosisChainId })).toEqual({
138
+ status: unchained_client_1.TxStatus.Failed,
139
+ buyTxHash: undefined,
140
+ message: 'Swap was reverted by Symbiosis',
141
+ });
142
+ (0, vitest_1.expect)((0, helpers_1.getSymbiosisTradeStatus)({ response: notFound, buySymbiosisChainId }).status).toBe(unchained_client_1.TxStatus.Unknown);
143
+ });
144
+ });
145
+ (0, vitest_1.describe)('isTronSourceTxFailed', () => {
146
+ (0, vitest_1.it)('is true for any contract result other than SUCCESS', () => {
147
+ (0, vitest_1.expect)((0, helpers_1.isTronSourceTxFailed)({ ret: [{ contractRet: 'REVERT' }] })).toBe(true);
148
+ (0, vitest_1.expect)((0, helpers_1.isTronSourceTxFailed)({ ret: [{ contractRet: 'OUT_OF_ENERGY' }] })).toBe(true);
149
+ (0, vitest_1.expect)((0, helpers_1.isTronSourceTxFailed)({ ret: [{ contractRet: 'SUCCESS' }] })).toBe(false);
150
+ });
151
+ });
@@ -0,0 +1,5 @@
1
+ export declare const symbiosisService: {
2
+ get: <T = any>(url: string, config?: import("axios").AxiosRequestConfig<any> | undefined) => Promise<import("@sniptt/monads").Result<import("axios").AxiosResponse<T, any, {}>, import("../../..").SwapErrorRight>>;
3
+ post: <T_1 = any>(url: string, data: any, config?: import("axios").AxiosRequestConfig<any> | undefined) => Promise<import("@sniptt/monads").Result<import("axios").AxiosResponse<T_1, any, {}>, import("../../..").SwapErrorRight>>;
4
+ delete: <T_2 = any>(url: string, data: any, config?: import("axios").AxiosRequestConfig<any> | undefined) => Promise<import("@sniptt/monads").Result<import("axios").AxiosResponse<T_2, any, {}>, import("../../..").SwapErrorRight>>;
5
+ };
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.symbiosisService = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const utils_1 = require("../../../utils");
9
+ const constants_1 = require("./constants");
10
+ const symbiosisServiceBase = axios_1.default.create({
11
+ timeout: 10000,
12
+ headers: {
13
+ Accept: 'application/json',
14
+ 'Content-Type': 'application/json',
15
+ 'X-Partner-Id': constants_1.SYMBIOSIS_PARTNER_ID,
16
+ },
17
+ });
18
+ exports.symbiosisService = (0, utils_1.makeSwapperAxiosServiceMonadic)(symbiosisServiceBase);
@@ -0,0 +1,83 @@
1
+ import type { GetEvmTradeQuoteInput, GetEvmTradeRateInput, GetTronTradeQuoteInput, GetTronTradeRateInput } from '../../../types';
2
+ export type SymbiosisTradeQuoteInput = GetEvmTradeQuoteInput | GetTronTradeQuoteInput;
3
+ export type SymbiosisTradeRateInput = GetEvmTradeRateInput | GetTronTradeRateInput;
4
+ export type SymbiosisToken = {
5
+ chainId: number;
6
+ address: string;
7
+ decimals: number;
8
+ symbol: string;
9
+ };
10
+ export type SymbiosisTokenAmount = SymbiosisToken & {
11
+ amount: string;
12
+ };
13
+ export type SymbiosisQuoteRequest = {
14
+ tokenAmountIn: Omit<SymbiosisTokenAmount, 'symbol'>;
15
+ tokenOut: Omit<SymbiosisToken, 'symbol'>;
16
+ from: string;
17
+ to: string;
18
+ slippage: number;
19
+ disabledProviders: string;
20
+ partnerAddress?: string;
21
+ };
22
+ export type SymbiosisFee = {
23
+ provider: string;
24
+ description?: string;
25
+ value: SymbiosisTokenAmount;
26
+ };
27
+ export type SymbiosisEvmTx = {
28
+ chainId: number;
29
+ to: string;
30
+ data: string;
31
+ value?: string;
32
+ };
33
+ export type SymbiosisTronTx = {
34
+ chainId: number;
35
+ from: string;
36
+ to: string;
37
+ data: string;
38
+ value?: string;
39
+ feeLimit: number;
40
+ functionSelector?: string;
41
+ };
42
+ export type SymbiosisSwapTx = {
43
+ type: 'evm';
44
+ tx: SymbiosisEvmTx;
45
+ } | {
46
+ type: 'tron';
47
+ tx: SymbiosisTronTx;
48
+ };
49
+ export type SymbiosisQuoteResponse = SymbiosisSwapTx & {
50
+ kind: string;
51
+ labels: string[];
52
+ approveTo?: string;
53
+ tokenAmountOut: SymbiosisTokenAmount;
54
+ tokenAmountOutMin: SymbiosisTokenAmount;
55
+ fees: SymbiosisFee[];
56
+ estimatedTime: number;
57
+ };
58
+ export type SymbiosisErrorResponse = {
59
+ code: number;
60
+ message: string;
61
+ };
62
+ export declare enum SymbiosisStatusCode {
63
+ NotFound = -1,
64
+ Success = 0,
65
+ Pending = 1,
66
+ Stuck = 2,
67
+ Reverted = 3
68
+ }
69
+ export type SymbiosisTxResponse = {
70
+ status: {
71
+ code: SymbiosisStatusCode;
72
+ text: string;
73
+ };
74
+ tx?: {
75
+ hash?: string;
76
+ chainId: number;
77
+ };
78
+ txIn?: {
79
+ hash?: string;
80
+ chainId: number;
81
+ };
82
+ transitTokenSent?: SymbiosisTokenAmount;
83
+ };
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SymbiosisStatusCode = void 0;
4
+ var SymbiosisStatusCode;
5
+ (function (SymbiosisStatusCode) {
6
+ SymbiosisStatusCode[SymbiosisStatusCode["NotFound"] = -1] = "NotFound";
7
+ SymbiosisStatusCode[SymbiosisStatusCode["Success"] = 0] = "Success";
8
+ SymbiosisStatusCode[SymbiosisStatusCode["Pending"] = 1] = "Pending";
9
+ SymbiosisStatusCode[SymbiosisStatusCode["Stuck"] = 2] = "Stuck";
10
+ SymbiosisStatusCode[SymbiosisStatusCode["Reverted"] = 3] = "Reverted";
11
+ })(SymbiosisStatusCode || (exports.SymbiosisStatusCode = SymbiosisStatusCode = {}));
@@ -1017,6 +1017,7 @@
1017
1017
  "eip155:1/erc20:0x2c06ba9e7f0daccbc1f6a33ea67e85bb68fbee3a",
1018
1018
  "eip155:1/erc20:0xcbb8f1bda10b9696c57e13bc128fe674769dcec0",
1019
1019
  "eip155:1/erc20:0x72dfb2e44f59c5ad2bafe84314e5b99a7cd5075e",
1020
+ "eip155:1/erc20:0xce682c89c63d2850cb2ca898e44d6c7c30d897a6",
1020
1021
  "eip155:43114/erc20:0xc891eb4cbdeff6e073e859e987815ed1505c2acd",
1021
1022
  "eip155:43114/erc20:0xd24c2ad096400b6fbcd2ad8b24e7acbc21a1da64",
1022
1023
  "eip155:43114/erc20:0x47c3118ad183712acd42648e9e522e13690f29a0",
@@ -41,5 +41,6 @@
41
41
  "THOR.TCY": "cosmos:thorchain-1/slip44:tcy",
42
42
  "TRON.TRX": "tron:0x2b6653dc/slip44:195",
43
43
  "TRON.USDT-TR7NHQJEKQXGTCI8Q8ZY4PL8OTSZGJLJ6T": "tron:0x2b6653dc/trc20:tr7nhqjekqxgtci8q8zy4pl8otszgjlj6t",
44
+ "ZEC.ZEC": "bip122:00040fe8ec8471911baa1db1266ea15d/slip44:133",
44
45
  "THOR.RUNE": "cosmos:thorchain-1/slip44:931"
45
46
  }
@@ -81,7 +81,7 @@ const expectedQuoteResponse = [
81
81
  asset: assets_1.ETH,
82
82
  },
83
83
  },
84
- networkFeeCryptoBaseUnit: '400000',
84
+ networkFeeCryptoBaseUnit: '480000',
85
85
  },
86
86
  rate: '143505.61489594191334131621',
87
87
  source: types_1.SwapperName.Thorchain,
@@ -132,7 +132,7 @@ const expectedQuoteResponse = [
132
132
  asset: assets_1.ETH,
133
133
  },
134
134
  },
135
- networkFeeCryptoBaseUnit: '400000',
135
+ networkFeeCryptoBaseUnit: '480000',
136
136
  },
137
137
  rate: '157530.57158846677816130059',
138
138
  source: `${types_1.SwapperName.Thorchain} • Streaming`,
@@ -77,7 +77,7 @@ const getLongtailToL1Quote = async (input, deps, streamingInterval, swapperName)
77
77
  return (0, monads_1.Ok)({
78
78
  ...quote,
79
79
  // The aggregator swapIn deadline is tighter than the daemon quote expiry
80
- deadline: Math.min(quote.deadline, Number(deadline) * 1000),
80
+ deadline: Math.min(quote.deadline ?? Infinity, Number(deadline) * 1000),
81
81
  data: data ?? quote.data,
82
82
  // This logic will need to be updated to support multi-hop, if that's ever implemented for THORChain
83
83
  steps: quote.steps.map(s => ({
@@ -7,9 +7,11 @@ const types_1 = require("../../../types");
7
7
  const utils_1 = require("../../../utils");
8
8
  const helpers_1 = require("../../../utils/helpers");
9
9
  const fetchFromZrx_1 = require("../utils/fetchFromZrx");
10
+ const getZrxNativeCheckDeadline_1 = require("../utils/getZrxNativeCheckDeadline");
10
11
  const getZrxStepData_1 = require("../utils/getZrxStepData");
11
12
  const getZrxTradeContext_1 = require("../utils/getZrxTradeContext");
12
13
  const helpers_2 = require("../utils/helpers");
14
+ const isValidDeadlineSeconds = (deadline) => Number.isSafeInteger(deadline) && deadline > 0 && Number.isSafeInteger(deadline * 1000);
13
15
  const getZrxTradeQuote = async (input, deps) => {
14
16
  const { sellAsset, buyAsset, accountNumber, affiliateBps, sellAmountIncludingProtocolFeesCryptoBaseUnit, } = input;
15
17
  const maybeAddresses = (0, utils_1.assertQuoteAddresses)(input);
@@ -40,8 +42,18 @@ const getZrxTradeQuote = async (input, deps) => {
40
42
  });
41
43
  if (maybeZrxQuoteResponse.isErr())
42
44
  return (0, monads_1.Err)(maybeZrxQuoteResponse.unwrapErr());
43
- const { sellAmount, buyAmount, fees, permit2, transaction, route } = maybeZrxQuoteResponse.unwrap();
45
+ const { sellAmount, buyAmount, fees, permit2, transaction, totalNetworkFee, route } = maybeZrxQuoteResponse.unwrap();
44
46
  const permit2Eip712 = permit2?.eip712;
47
+ const permit2Deadline = permit2Eip712 ? Number(permit2Eip712.message.deadline) : undefined;
48
+ if (permit2Deadline !== undefined &&
49
+ ((typeof permit2Eip712?.message.deadline !== 'string' &&
50
+ typeof permit2Eip712?.message.deadline !== 'number') ||
51
+ !isValidDeadlineSeconds(permit2Deadline))) {
52
+ return (0, monads_1.Err)((0, utils_1.makeSwapErrorRight)({
53
+ message: 'Invalid Permit2 deadline from 0x response',
54
+ code: types_1.TradeQuoteError.InvalidResponse,
55
+ }));
56
+ }
45
57
  if (!(0, helpers_1.isNativeEvmAsset)(sellAsset.assetId) && !(0, helpers_2.isWrappedNativeSell)(route) && !permit2Eip712) {
46
58
  return (0, monads_1.Err)((0, utils_1.makeSwapErrorRight)({
47
59
  message: 'Missing required Permit2 metadata from 0x response',
@@ -56,6 +68,17 @@ const getZrxTradeQuote = async (input, deps) => {
56
68
  details: { transaction, permit2Eip712 },
57
69
  }));
58
70
  }
71
+ // Permit2 calldata is not decodable until the signature is spliced in, so only native sells are read
72
+ const nativeCheckDeadline = permit2Eip712
73
+ ? undefined
74
+ : (0, getZrxNativeCheckDeadline_1.getZrxNativeCheckDeadline)(transaction.data);
75
+ if (nativeCheckDeadline !== undefined && !isValidDeadlineSeconds(nativeCheckDeadline)) {
76
+ return (0, monads_1.Err)((0, utils_1.makeSwapErrorRight)({
77
+ message: 'Invalid NATIVE_CHECK deadline in 0x calldata',
78
+ code: types_1.TradeQuoteError.InvalidResponse,
79
+ }));
80
+ }
81
+ const deadlineSeconds = permit2Deadline ?? nativeCheckDeadline;
59
82
  const maybeContext = (0, getZrxTradeContext_1.getZrxTradeContext)({
60
83
  input,
61
84
  deps,
@@ -70,6 +93,8 @@ const getZrxTradeQuote = async (input, deps) => {
70
93
  type: 'quote',
71
94
  input,
72
95
  transaction,
96
+ totalNetworkFee,
97
+ sellAmountCryptoBaseUnit: sellAmountIncludingProtocolFeesCryptoBaseUnit,
73
98
  permit2Eip712,
74
99
  from: receiveAddress,
75
100
  });
@@ -79,7 +104,7 @@ const getZrxTradeQuote = async (input, deps) => {
79
104
  const tradeQuote = {
80
105
  ...tradeCommon,
81
106
  quoteOrRate: 'quote',
82
- deadline: Date.now() + helpers_1.FALLBACK_QUOTE_DEADLINE_MS,
107
+ deadline: deadlineSeconds === undefined ? undefined : deadlineSeconds * 1000,
83
108
  receiveAddress,
84
109
  steps: [
85
110
  {