@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,33 @@
1
+ import { convertDecimalPercentageToBasisPoints } from '@shapeshiftoss/utils';
2
+ import { Err } from '@sniptt/monads';
3
+ import { KYBER_CHAINS, KYBER_CLIENT_ID } from './constants.js';
4
+ import { getKyberRequestError, validateKyberBuild, validateKyberRoute } from './helpers.js';
5
+ import { kyberService } from './kyberService.js';
6
+ export const fetchKyberRoute = async ({ chainId, tokenIn, tokenOut, sellAmountCryptoBaseUnit, feeParams, sendAddress, baseUrl, }) => {
7
+ const maybeResponse = await kyberService.get(`${baseUrl}/${KYBER_CHAINS[chainId]}/api/v1/routes`, {
8
+ params: {
9
+ tokenIn,
10
+ tokenOut,
11
+ amountIn: sellAmountCryptoBaseUnit,
12
+ ...(sendAddress ? { origin: sendAddress } : {}),
13
+ ...feeParams,
14
+ },
15
+ });
16
+ if (maybeResponse.isErr())
17
+ return Err(getKyberRequestError(maybeResponse.unwrapErr()));
18
+ return validateKyberRoute(maybeResponse.unwrap().data, feeParams);
19
+ };
20
+ export const fetchKyberBuild = async ({ chainId, route, slippageTolerancePercentageDecimal, baseUrl, sendAddress, receiveAddress, deadline, }) => {
21
+ const maybeResponse = await kyberService.post(`${baseUrl}/${KYBER_CHAINS[chainId]}/api/v1/route/build`, {
22
+ routeSummary: route,
23
+ sender: sendAddress,
24
+ recipient: receiveAddress,
25
+ origin: sendAddress,
26
+ slippageTolerance: convertDecimalPercentageToBasisPoints(slippageTolerancePercentageDecimal).toNumber(),
27
+ deadline,
28
+ source: KYBER_CLIENT_ID,
29
+ });
30
+ if (maybeResponse.isErr())
31
+ return Err(getKyberRequestError(maybeResponse.unwrapErr()));
32
+ return validateKyberBuild(maybeResponse.unwrap().data);
33
+ };
@@ -0,0 +1,27 @@
1
+ import type { Result } from '@sniptt/monads';
2
+ import type { StepDataArgs, SwapErrorRight, TxBuildData } from '../../../types.js';
3
+ import type { KyberBuildData, KyberRouteSummary } from '../types.js';
4
+ type BaseArgs = {
5
+ sellAmountCryptoBaseUnit: string;
6
+ spenderAddress: string;
7
+ route: KyberRouteSummary;
8
+ };
9
+ export type GetKyberStepDataArgs = StepDataArgs<BaseArgs, {
10
+ build?: undefined;
11
+ }, {
12
+ build: KyberBuildData;
13
+ }>;
14
+ type KyberRateStepData = {
15
+ networkFeeCryptoBaseUnit: string;
16
+ };
17
+ type KyberQuoteStepData = {
18
+ transactionData: TxBuildData;
19
+ networkFeeCryptoBaseUnit: string;
20
+ };
21
+ export declare function getKyberStepData(args: Extract<GetKyberStepDataArgs, {
22
+ type: 'rate';
23
+ }>): Promise<Result<KyberRateStepData, SwapErrorRight>>;
24
+ export declare function getKyberStepData(args: Extract<GetKyberStepDataArgs, {
25
+ type: 'quote';
26
+ }>): Promise<Result<KyberQuoteStepData, SwapErrorRight>>;
27
+ export {};
@@ -0,0 +1,43 @@
1
+ import { fromChainId } from '@shapeshiftoss/caip';
2
+ import { bnOrZero } from '@shapeshiftoss/utils';
3
+ import { Err, Ok } from '@sniptt/monads';
4
+ import { makeNetworkFeeEstimationFailedErr } from '../../../utils/index.js';
5
+ import { getEvmNetworkFeeCryptoBaseUnit, getEvmRateNetworkFeeCryptoBaseUnit, } from '../../../utils/evm/index.js';
6
+ import { KYBER_ROUTER_ADDRESS } from './constants.js';
7
+ export async function getKyberStepData(args) {
8
+ const { sellAsset, sellAmountCryptoBaseUnit, spenderAddress, route, input, deps } = args;
9
+ const adapter = deps.assertGetEvmChainAdapter(sellAsset.chainId);
10
+ const supportsEIP1559 = 'supportsEIP1559' in input ? input.supportsEIP1559 : false;
11
+ if (args.type === 'rate') {
12
+ const networkFeeCryptoBaseUnit = await getEvmRateNetworkFeeCryptoBaseUnit({
13
+ adapter,
14
+ supportsEIP1559,
15
+ providerGasLimit: route.gas,
16
+ }).catch(() => bnOrZero(route.gas).times(bnOrZero(route.gasPrice)).toFixed(0));
17
+ const stepData = { networkFeeCryptoBaseUnit };
18
+ return Ok(stepData);
19
+ }
20
+ const { build, from } = args;
21
+ const transactionData = {
22
+ type: 'evm',
23
+ chainId: Number(fromChainId(sellAsset.chainId).chainReference),
24
+ to: KYBER_ROUTER_ADDRESS,
25
+ data: build.data,
26
+ value: build.transactionValue,
27
+ };
28
+ try {
29
+ const networkFeeCryptoBaseUnit = await getEvmNetworkFeeCryptoBaseUnit({
30
+ adapter,
31
+ supportsEIP1559,
32
+ transactionData,
33
+ from,
34
+ stateOverride: { sellAsset, sellAmountCryptoBaseUnit, spenderAddress },
35
+ providerGasLimit: build.gas,
36
+ });
37
+ const stepData = { transactionData, networkFeeCryptoBaseUnit };
38
+ return Ok(stepData);
39
+ }
40
+ catch (error) {
41
+ return Err(makeNetworkFeeEstimationFailedErr('getKyberStepData', error));
42
+ }
43
+ }
@@ -0,0 +1,90 @@
1
+ import { KnownChainIds } from '@shapeshiftoss/types';
2
+ import { describe, expect, it, vi } from 'vitest';
3
+ import { ETH } from '../../../utils/test-data/assets.js';
4
+ import { KYBER_ROUTER_ADDRESS } from './constants.js';
5
+ import { getKyberStepData } from './getKyberStepData.js';
6
+ // The override path reads live chain state, so resolve to no override and hit the mocked adapter
7
+ vi.mock('../../../utils/evm/stateOverride', async (importOriginal) => ({
8
+ ...(await importOriginal()),
9
+ getMinimalStateOverride: vi.fn().mockResolvedValue(undefined),
10
+ }));
11
+ const HYPE = {
12
+ ...ETH,
13
+ assetId: 'eip155:999/slip44:60',
14
+ chainId: KnownChainIds.HyperEvmMainnet,
15
+ symbol: 'HYPE',
16
+ name: 'HYPE',
17
+ };
18
+ const build = {
19
+ amountOut: '255332539',
20
+ gas: '679101',
21
+ data: '0xe21fd0e9',
22
+ routerAddress: '0x6131B5fae19EA4f9D964eAc0408E4408b66337b5',
23
+ transactionValue: '3000000000000000000',
24
+ };
25
+ const makeDeps = (adapter) => ({ assertGetEvmChainAdapter: () => adapter });
26
+ const evmAdapter = ({ gasPrice = '1000000000', estimatedGasLimit = '500000', throwOnGasFeeData = false, throwOnFeeData = false, } = {}) => ({
27
+ getGasFeeData: () => {
28
+ if (throwOnGasFeeData)
29
+ return Promise.reject(new Error('rpc down'));
30
+ return Promise.resolve({ average: { gasPrice, maxFeePerGas: '0', maxPriorityFeePerGas: '0' } });
31
+ },
32
+ getFeeData: () => {
33
+ if (throwOnFeeData)
34
+ return Promise.reject(new Error('execution reverted'));
35
+ return Promise.resolve({
36
+ average: { chainSpecific: { gasLimit: estimatedGasLimit, gasPrice } },
37
+ });
38
+ },
39
+ });
40
+ const rateInput = { supportsEIP1559: false };
41
+ const quoteInput = { supportsEIP1559: false };
42
+ const baseArgs = {
43
+ sellAsset: HYPE,
44
+ sellAmountCryptoBaseUnit: '3000000000000000000',
45
+ spenderAddress: '',
46
+ route: { gas: '679101', gasPrice: '2000000000' },
47
+ };
48
+ describe('getKyberStepData', () => {
49
+ it('prices the provider gas limit for a rate', async () => {
50
+ const actual = await getKyberStepData({
51
+ ...baseArgs,
52
+ type: 'rate',
53
+ input: rateInput,
54
+ deps: makeDeps(evmAdapter()),
55
+ });
56
+ // gas 679101 * gasPrice 1000000000
57
+ expect(actual.unwrap()).toEqual({ networkFeeCryptoBaseUnit: '679101000000000' });
58
+ });
59
+ it('falls back to the provider gas price when rate pricing fails', async () => {
60
+ const actual = await getKyberStepData({
61
+ ...baseArgs,
62
+ type: 'rate',
63
+ input: rateInput,
64
+ deps: makeDeps(evmAdapter({ throwOnGasFeeData: true })),
65
+ });
66
+ // gas 679101 * provider gasPrice 2000000000
67
+ expect(actual.unwrap()).toEqual({ networkFeeCryptoBaseUnit: '1358202000000000' });
68
+ });
69
+ it('builds the router transaction and sets the buffered on chain estimate for a quote', async () => {
70
+ const actual = await getKyberStepData({
71
+ ...baseArgs,
72
+ type: 'quote',
73
+ input: quoteInput,
74
+ from: '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045',
75
+ build,
76
+ deps: makeDeps(evmAdapter({ estimatedGasLimit: '500000' })),
77
+ });
78
+ expect(actual.unwrap()).toEqual({
79
+ networkFeeCryptoBaseUnit: '600000000000000',
80
+ transactionData: {
81
+ type: 'evm',
82
+ chainId: 999,
83
+ to: KYBER_ROUTER_ADDRESS,
84
+ data: build.data,
85
+ value: '3000000000000000000',
86
+ gasLimit: '600000',
87
+ },
88
+ });
89
+ });
90
+ });
@@ -0,0 +1,20 @@
1
+ import type { Result } from '@sniptt/monads';
2
+ import type { QuoteFeeData, SwapErrorRight, SwapperDeps, TradeCommon, TradeStepCommon } from '../../../types.js';
3
+ import type { KyberRouteSummary, KyberTradeQuoteInput, KyberTradeRateInput } from '../types.js';
4
+ import type { KyberSupportedChainId } from './constants.js';
5
+ import type { GetKyberStepDataArgs } from './getKyberStepData.js';
6
+ type KyberTradeContext = {
7
+ tradeCommon: TradeCommon & {
8
+ slippageTolerancePercentageDecimal: string;
9
+ };
10
+ stepCommon: Omit<TradeStepCommon, 'feeData'>;
11
+ protocolFees: QuoteFeeData['protocolFees'];
12
+ chainId: KyberSupportedChainId;
13
+ route: KyberRouteSummary;
14
+ stepDataArgs: Omit<GetKyberStepDataArgs, 'type' | 'input' | 'from' | 'build'>;
15
+ };
16
+ export declare const getKyberTradeContext: ({ input, deps, }: {
17
+ input: KyberTradeQuoteInput | KyberTradeRateInput;
18
+ deps: SwapperDeps;
19
+ }) => Promise<Result<KyberTradeContext, SwapErrorRight>>;
20
+ export {};
@@ -0,0 +1,59 @@
1
+ import { Err, Ok } from '@sniptt/monads';
2
+ import { v4 as uuid } from 'uuid';
3
+ import { getDefaultSlippageDecimalPercentageForSwapper } from '../../../constants.js';
4
+ import { SwapperName } from '../../../types.js';
5
+ import { isNativeEvmAsset } from '../../../utils/helpers.js';
6
+ import { KYBER_ROUTER_ADDRESS } from './constants.js';
7
+ import { fetchKyberRoute } from './fetchFromKyber.js';
8
+ import { assertValidTrade, assetIdToKyberToken, getKyberFeeParams, getKyberTradeAmounts, } from './helpers.js';
9
+ export const getKyberTradeContext = async ({ input, deps, }) => {
10
+ const { sellAsset, buyAsset, sellAmountIncludingProtocolFeesCryptoBaseUnit, affiliateBps, sendAddress, } = input;
11
+ const maybeChainId = assertValidTrade({ sellAsset, buyAsset });
12
+ if (maybeChainId.isErr())
13
+ return Err(maybeChainId.unwrapErr());
14
+ const chainId = maybeChainId.unwrap();
15
+ const slippageTolerancePercentageDecimal = input.slippageTolerancePercentageDecimal ??
16
+ getDefaultSlippageDecimalPercentageForSwapper(SwapperName.KyberSwap);
17
+ const maybeRoute = await fetchKyberRoute({
18
+ chainId,
19
+ tokenIn: assetIdToKyberToken(sellAsset.assetId),
20
+ tokenOut: assetIdToKyberToken(buyAsset.assetId),
21
+ sellAmountCryptoBaseUnit: sellAmountIncludingProtocolFeesCryptoBaseUnit,
22
+ feeParams: getKyberFeeParams({ chainId, affiliateBps }),
23
+ sendAddress,
24
+ baseUrl: deps.config.VITE_KYBER_BASE_URL,
25
+ });
26
+ if (maybeRoute.isErr())
27
+ return Err(maybeRoute.unwrapErr());
28
+ const route = maybeRoute.unwrap();
29
+ const tradeAmounts = getKyberTradeAmounts({ input, amountOut: route.amountOut });
30
+ const allowanceContract = isNativeEvmAsset(sellAsset.assetId) ? '' : KYBER_ROUTER_ADDRESS;
31
+ return Ok({
32
+ tradeCommon: {
33
+ id: uuid(),
34
+ rate: tradeAmounts.rate,
35
+ swapperName: SwapperName.KyberSwap,
36
+ affiliateBps,
37
+ slippageTolerancePercentageDecimal,
38
+ },
39
+ stepCommon: {
40
+ estimatedExecutionTimeMs: 0,
41
+ allowanceContract,
42
+ sellAsset,
43
+ buyAsset,
44
+ sellAmountIncludingProtocolFeesCryptoBaseUnit,
45
+ ...tradeAmounts,
46
+ source: SwapperName.KyberSwap,
47
+ },
48
+ protocolFees: {},
49
+ chainId,
50
+ route,
51
+ stepDataArgs: {
52
+ deps,
53
+ sellAsset,
54
+ sellAmountCryptoBaseUnit: sellAmountIncludingProtocolFeesCryptoBaseUnit,
55
+ spenderAddress: allowanceContract,
56
+ route,
57
+ },
58
+ });
59
+ };
@@ -0,0 +1,27 @@
1
+ import type { AssetId } from '@shapeshiftoss/caip';
2
+ import type { Asset } from '@shapeshiftoss/types';
3
+ import type { Result } from '@sniptt/monads';
4
+ import type { Address } from 'viem';
5
+ import type { SwapErrorRight, TradeStepCommon } from '../../../types.js';
6
+ import type { KyberBuildData, KyberBuildResponse, KyberFeeParams, KyberRoutesResponse, KyberRouteSummary, KyberTradeQuoteInput, KyberTradeRateInput } from '../types.js';
7
+ import type { KyberSupportedChainId } from './constants.js';
8
+ export declare const assertValidTrade: ({ sellAsset, buyAsset, }: {
9
+ sellAsset: Asset;
10
+ buyAsset: Asset;
11
+ }) => Result<KyberSupportedChainId, SwapErrorRight>;
12
+ export declare const assetIdToKyberToken: (assetId: AssetId) => Address;
13
+ export declare const getKyberFeeParams: ({ chainId, affiliateBps, }: {
14
+ chainId: KyberSupportedChainId;
15
+ affiliateBps: string;
16
+ }) => KyberFeeParams | undefined;
17
+ export declare const getKyberBuyAmountBeforeFees: ({ buyAmountAfterFeesCryptoBaseUnit, affiliateBps, }: {
18
+ buyAmountAfterFeesCryptoBaseUnit: string;
19
+ affiliateBps: string;
20
+ }) => string;
21
+ export declare const getKyberTradeAmounts: ({ input, amountOut, }: {
22
+ input: KyberTradeQuoteInput | KyberTradeRateInput;
23
+ amountOut: string;
24
+ }) => Pick<TradeStepCommon, 'rate' | 'buyAmountBeforeFeesCryptoBaseUnit' | 'buyAmountAfterFeesCryptoBaseUnit' | 'affiliateFee'>;
25
+ export declare const getKyberRequestError: (error: SwapErrorRight) => SwapErrorRight;
26
+ export declare const validateKyberRoute: (response: KyberRoutesResponse, feeParams: KyberFeeParams | undefined) => Result<KyberRouteSummary, SwapErrorRight>;
27
+ export declare const validateKyberBuild: (response: KyberBuildResponse) => Result<KyberBuildData, SwapErrorRight>;
@@ -0,0 +1,158 @@
1
+ import { fromAssetId } from '@shapeshiftoss/caip';
2
+ import { BigNumber, bn, bnOrZero } from '@shapeshiftoss/utils';
3
+ import { Err, Ok } from '@sniptt/monads';
4
+ import axios from 'axios';
5
+ import { getAddress, isAddress, isAddressEqual } from 'viem';
6
+ import { TradeQuoteError } from '../../../types.js';
7
+ import { getInputOutputRate, makeSwapErrorRight } from '../../../utils/index.js';
8
+ import { buildAffiliateFee } from '../../../utils/affiliateFee.js';
9
+ import { getTreasuryAddressFromChainId, isNativeEvmAsset } from '../../../utils/helpers.js';
10
+ import { KYBER_CHAINS, KYBER_NATIVE_TOKEN, KYBER_ROUTER_ADDRESS } from './constants.js';
11
+ const isKyberSupportedChainId = (chainId) => chainId in KYBER_CHAINS;
12
+ const invalidResponse = (message, details) => makeSwapErrorRight({ message, details, code: TradeQuoteError.InvalidResponse });
13
+ export const assertValidTrade = ({ sellAsset, buyAsset, }) => {
14
+ if (sellAsset.chainId !== buyAsset.chainId) {
15
+ return Err(makeSwapErrorRight({
16
+ message: 'KyberSwap does not support cross-chain trades',
17
+ code: TradeQuoteError.CrossChainNotSupported,
18
+ }));
19
+ }
20
+ if (!isKyberSupportedChainId(sellAsset.chainId)) {
21
+ return Err(makeSwapErrorRight({
22
+ message: 'KyberSwap only supports configured EVM chains',
23
+ code: TradeQuoteError.UnsupportedChain,
24
+ }));
25
+ }
26
+ return Ok(sellAsset.chainId);
27
+ };
28
+ export const assetIdToKyberToken = (assetId) => isNativeEvmAsset(assetId) ? KYBER_NATIVE_TOKEN : getAddress(fromAssetId(assetId).assetReference);
29
+ export const getKyberFeeParams = ({ chainId, affiliateBps, }) => {
30
+ if (bnOrZero(affiliateBps).lte(0))
31
+ return undefined;
32
+ return {
33
+ feeAmount: affiliateBps,
34
+ chargeFeeBy: 'currency_out',
35
+ isInBps: true,
36
+ feeReceiver: getAddress(getTreasuryAddressFromChainId(chainId)),
37
+ };
38
+ };
39
+ // Kyber only returns the post-fee amountOut; the inverse is at most one base unit off
40
+ export const getKyberBuyAmountBeforeFees = ({ buyAmountAfterFeesCryptoBaseUnit, affiliateBps, }) => {
41
+ if (bnOrZero(affiliateBps).lte(0))
42
+ return buyAmountAfterFeesCryptoBaseUnit;
43
+ return bn(buyAmountAfterFeesCryptoBaseUnit)
44
+ .times(10_000)
45
+ .div(bn(10_000).minus(affiliateBps))
46
+ .integerValue(BigNumber.ROUND_DOWN)
47
+ .toFixed();
48
+ };
49
+ export const getKyberTradeAmounts = ({ input, amountOut, }) => {
50
+ const { sellAsset, buyAsset, sellAmountIncludingProtocolFeesCryptoBaseUnit, affiliateBps } = input;
51
+ const buyAmountAfterFeesCryptoBaseUnit = amountOut;
52
+ const buyAmountBeforeFeesCryptoBaseUnit = getKyberBuyAmountBeforeFees({
53
+ buyAmountAfterFeesCryptoBaseUnit,
54
+ affiliateBps,
55
+ });
56
+ return {
57
+ rate: getInputOutputRate({
58
+ sellAmountCryptoBaseUnit: sellAmountIncludingProtocolFeesCryptoBaseUnit,
59
+ buyAmountCryptoBaseUnit: buyAmountAfterFeesCryptoBaseUnit,
60
+ sellAsset,
61
+ buyAsset,
62
+ }),
63
+ buyAmountBeforeFeesCryptoBaseUnit,
64
+ buyAmountAfterFeesCryptoBaseUnit,
65
+ affiliateFee: buildAffiliateFee({
66
+ strategy: 'buy_asset',
67
+ affiliateBps,
68
+ sellAsset,
69
+ buyAsset,
70
+ sellAmountCryptoBaseUnit: sellAmountIncludingProtocolFeesCryptoBaseUnit,
71
+ buyAmountCryptoBaseUnit: buyAmountBeforeFeesCryptoBaseUnit,
72
+ }),
73
+ };
74
+ };
75
+ const getKyberCodeError = ({ code, message, requestId }) => {
76
+ const tradeQuoteError = (() => {
77
+ switch (code) {
78
+ case 4008:
79
+ case 4009:
80
+ case 4010:
81
+ return TradeQuoteError.NoRouteFound;
82
+ case 4011:
83
+ case 4221:
84
+ return TradeQuoteError.UnsupportedTradePair;
85
+ case 4005:
86
+ case 4007:
87
+ return TradeQuoteError.SellAmountBelowTradeFee;
88
+ default:
89
+ return TradeQuoteError.QueryFailed;
90
+ }
91
+ })();
92
+ return makeSwapErrorRight({
93
+ message: `KyberSwap request failed: ${message}`,
94
+ code: tradeQuoteError,
95
+ details: { code, requestId },
96
+ });
97
+ };
98
+ const isKyberErrorResponse = (value) => typeof value === 'object' &&
99
+ value !== null &&
100
+ 'code' in value &&
101
+ typeof value.code === 'number' &&
102
+ 'message' in value &&
103
+ typeof value.message === 'string';
104
+ export const getKyberRequestError = (error) => {
105
+ const { cause } = error;
106
+ if (!axios.isAxiosError(cause))
107
+ return error;
108
+ const status = cause.response?.status;
109
+ if (status === 429) {
110
+ return makeSwapErrorRight({
111
+ message: 'KyberSwap rate limit exceeded',
112
+ code: TradeQuoteError.RateLimitExceeded,
113
+ });
114
+ }
115
+ if (status === 404) {
116
+ return makeSwapErrorRight({
117
+ message: 'KyberSwap does not serve this chain',
118
+ code: TradeQuoteError.UnsupportedChain,
119
+ });
120
+ }
121
+ const body = cause.response?.data;
122
+ if (isKyberErrorResponse(body))
123
+ return getKyberCodeError(body);
124
+ return makeSwapErrorRight({
125
+ message: `KyberSwap request failed with status ${status}`,
126
+ code: TradeQuoteError.QueryFailed,
127
+ cause,
128
+ });
129
+ };
130
+ const isPinnedRouter = (routerAddress) => isAddress(routerAddress) && isAddressEqual(routerAddress, KYBER_ROUTER_ADDRESS);
131
+ const unpinnedRouterError = (routerAddress) => invalidResponse(`KyberSwap router ${routerAddress} is not the pinned router`);
132
+ export const validateKyberRoute = (response, feeParams) => {
133
+ if (response.code !== 0)
134
+ return Err(getKyberCodeError(response));
135
+ if (!response.data)
136
+ return Err(invalidResponse('KyberSwap returned no route'));
137
+ const { routeSummary, routerAddress } = response.data;
138
+ if (!isPinnedRouter(routerAddress))
139
+ return Err(unpinnedRouterError(routerAddress));
140
+ // Kyber skips the integrator fee on wrap and unwrap routes, so reject them rather than swap fee-free
141
+ if (feeParams && routeSummary.extraFee.feeAmount === '') {
142
+ return Err(makeSwapErrorRight({
143
+ message: 'Wrapping or unwrapping the native asset is not supported through KyberSwap',
144
+ code: TradeQuoteError.UnsupportedTradePair,
145
+ }));
146
+ }
147
+ return Ok(routeSummary);
148
+ };
149
+ export const validateKyberBuild = (response) => {
150
+ if (response.code !== 0)
151
+ return Err(getKyberCodeError(response));
152
+ if (!response.data)
153
+ return Err(invalidResponse('KyberSwap returned no transaction'));
154
+ const { routerAddress } = response.data;
155
+ if (!isPinnedRouter(routerAddress))
156
+ return Err(unpinnedRouterError(routerAddress));
157
+ return Ok(response.data);
158
+ };
@@ -0,0 +1,108 @@
1
+ import { KnownChainIds } from '@shapeshiftoss/types';
2
+ import { describe, expect, it } from 'vitest';
3
+ import { TradeQuoteError } from '../../../types.js';
4
+ import { KYBER_ROUTER_ADDRESS } from './constants.js';
5
+ import { getKyberBuyAmountBeforeFees, getKyberFeeParams, validateKyberBuild, validateKyberRoute, } from './helpers.js';
6
+ const TREASURY = '0xF5AA59151bE6515C4Ca68A0282CF68B3eA4846fC';
7
+ const UNPINNED_ROUTER = '0x1111111111111111111111111111111111111111';
8
+ const EMPTY_EXTRA_FEE = {
9
+ feeAmount: '',
10
+ chargeFeeBy: '',
11
+ isInBps: false,
12
+ feeReceiver: '',
13
+ };
14
+ const hyperEvmFeeParams = getKyberFeeParams({
15
+ chainId: KnownChainIds.HyperEvmMainnet,
16
+ affiliateBps: '60',
17
+ });
18
+ const ROUTE = {
19
+ amountOut: '255332541',
20
+ gas: '679101',
21
+ gasPrice: '100000000',
22
+ extraFee: {
23
+ feeAmount: '60',
24
+ chargeFeeBy: 'currency_out',
25
+ isInBps: true,
26
+ feeReceiver: TREASURY.toLowerCase(),
27
+ },
28
+ };
29
+ const ROUTES_RESPONSE = {
30
+ code: 0,
31
+ message: 'successfully',
32
+ data: { routeSummary: ROUTE, routerAddress: KYBER_ROUTER_ADDRESS },
33
+ requestId: 'route-request',
34
+ };
35
+ const BUILD_RESPONSE = {
36
+ code: 0,
37
+ message: 'successfully',
38
+ data: {
39
+ amountOut: '255332539',
40
+ gas: '679101',
41
+ data: '0xe21fd0e9',
42
+ routerAddress: KYBER_ROUTER_ADDRESS,
43
+ transactionValue: '3000000000000000000',
44
+ },
45
+ requestId: 'build-request',
46
+ };
47
+ describe('getKyberFeeParams', () => {
48
+ it('sends no fee for a fee-free swap', () => {
49
+ expect(getKyberFeeParams({ chainId: KnownChainIds.HyperEvmMainnet, affiliateBps: '0' })).toBeUndefined();
50
+ });
51
+ it('charges the output in bps to the chain treasury', () => {
52
+ expect(hyperEvmFeeParams).toEqual({
53
+ feeAmount: '60',
54
+ chargeFeeBy: 'currency_out',
55
+ isInBps: true,
56
+ feeReceiver: TREASURY,
57
+ });
58
+ });
59
+ });
60
+ describe('getKyberBuyAmountBeforeFees', () => {
61
+ it.each([
62
+ ['255332541', '60', '256873783'],
63
+ ['54334339666759063267443', '60', '54662313548047347351552'],
64
+ ['123', '0', '123'],
65
+ ])('grosses up %s at %s bps to %s', (buyAmountAfterFeesCryptoBaseUnit, affiliateBps, gross) => {
66
+ expect(getKyberBuyAmountBeforeFees({ buyAmountAfterFeesCryptoBaseUnit, affiliateBps })).toBe(gross);
67
+ });
68
+ });
69
+ describe('validateKyberRoute', () => {
70
+ const validate = (summaryOverrides, dataOverrides = {}, feeParams = hyperEvmFeeParams) => validateKyberRoute({
71
+ ...ROUTES_RESPONSE,
72
+ data: {
73
+ ...ROUTES_RESPONSE.data,
74
+ routeSummary: { ...ROUTE, ...summaryOverrides },
75
+ ...dataOverrides,
76
+ },
77
+ }, feeParams);
78
+ it('returns the route summary', () => {
79
+ expect(validateKyberRoute(ROUTES_RESPONSE, hyperEvmFeeParams).unwrap()).toBe(ROUTE);
80
+ });
81
+ it('rejects an unpinned router', () => {
82
+ expect(validate({}, { routerAddress: UNPINNED_ROUTER }).unwrapErr().code).toBe(TradeQuoteError.InvalidResponse);
83
+ });
84
+ it('rejects a route that dropped the requested fee', () => {
85
+ expect(validate({ extraFee: EMPTY_EXTRA_FEE }).unwrapErr().code).toBe(TradeQuoteError.UnsupportedTradePair);
86
+ });
87
+ it('accepts a fee-free route when no fee was requested', () => {
88
+ expect(validateKyberRoute({
89
+ ...ROUTES_RESPONSE,
90
+ data: {
91
+ ...ROUTES_RESPONSE.data,
92
+ routeSummary: { ...ROUTE, extraFee: EMPTY_EXTRA_FEE },
93
+ },
94
+ }, undefined).isOk()).toBe(true);
95
+ });
96
+ });
97
+ describe('validateKyberBuild', () => {
98
+ it('returns the build data', () => {
99
+ expect(validateKyberBuild(BUILD_RESPONSE).unwrap()).toBe(BUILD_RESPONSE.data);
100
+ });
101
+ it('rejects an unpinned router', () => {
102
+ const result = validateKyberBuild({
103
+ ...BUILD_RESPONSE,
104
+ data: { ...BUILD_RESPONSE.data, routerAddress: UNPINNED_ROUTER },
105
+ });
106
+ expect(result.unwrapErr().code).toBe(TradeQuoteError.InvalidResponse);
107
+ });
108
+ });
@@ -0,0 +1,5 @@
1
+ export declare const kyberService: {
2
+ get: <T = any>(url: string, config?: import("axios").AxiosRequestConfig<any> | undefined) => Promise<import("@sniptt/monads").Result<import("axios").AxiosResponse<T, any, {}>, import("../../../index.js").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("../../../index.js").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("../../../index.js").SwapErrorRight>>;
5
+ };
@@ -0,0 +1,3 @@
1
+ import axios from 'axios';
2
+ import { makeSwapperAxiosServiceMonadic } from '../../../utils/index.js';
3
+ export const kyberService = makeSwapperAxiosServiceMonadic(axios.create({ timeout: 10_000 }));
@@ -4,7 +4,6 @@
4
4
  "ARB.ETH": "eip155:42161/slip44:60",
5
5
  "ARB.GLD-0XAFD091F140C21770F4E5D53D26B2859AE97555AA": "eip155:42161/erc20:0xafd091f140c21770f4e5d53d26b2859ae97555aa",
6
6
  "ARB.LEO-0X93864D81175095DD93360FFA2A529B8642F76A6E": "eip155:42161/erc20:0x93864d81175095dd93360ffa2a529b8642f76a6e",
7
- "ARB.LINK-0XF97F4DF75117A78C1A5A0DBB814AF92458539FB4": "eip155:42161/erc20:0xf97f4df75117a78c1a5a0dbb814af92458539fb4",
8
7
  "ARB.PEPE-0X25D887CE7A35172C62FEBFD67A1856F20FAEBB00": "eip155:42161/erc20:0x25d887ce7a35172c62febfd67a1856f20faebb00",
9
8
  "ARB.TGT-0X429FED88F10285E61B12BDF00848315FBDFCC341": "eip155:42161/erc20:0x429fed88f10285e61b12bdf00848315fbdfcc341",
10
9
  "ARB.USDC-0XAF88D065E77C8CC2239327C5EDB3A432268E5831": "eip155:42161/erc20:0xaf88d065e77c8cc2239327c5edb3a432268e5831",
@@ -1,4 +1,4 @@
1
- import { executeEvmTransaction, executeNearTransaction, executeSolanaTransaction, executeStarknetTransaction, executeSuiTransaction, executeTonTransaction, executeTronTransaction, } from '../../utils/index.js';
1
+ import { executeAptosTransaction, executeEvmTransaction, executeNearTransaction, executeSolanaTransaction, executeStarknetTransaction, executeSuiTransaction, executeTonTransaction, executeTronTransaction, } from '../../utils/index.js';
2
2
  export const nearIntentsSwapper = {
3
3
  supportsExternalPayment: true,
4
4
  executeEvmTransaction,
@@ -8,6 +8,7 @@ export const nearIntentsSwapper = {
8
8
  executeSuiTransaction,
9
9
  executeNearTransaction,
10
10
  executeTonTransaction,
11
+ executeAptosTransaction,
11
12
  executeUtxoTransaction: (txToSign, { signAndBroadcastTransaction }) => {
12
13
  return signAndBroadcastTransaction(txToSign);
13
14
  },