@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,94 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getFyndTradeContext = void 0;
4
+ const utils_1 = require("@shapeshiftoss/utils");
5
+ const monads_1 = require("@sniptt/monads");
6
+ const uuid_1 = require("uuid");
7
+ const constants_1 = require("../../../constants");
8
+ const types_1 = require("../../../types");
9
+ const utils_2 = require("../../../utils");
10
+ const helpers_1 = require("../../../utils/helpers");
11
+ const fetchFromFynd_1 = require("./fetchFromFynd");
12
+ const helpers_2 = require("./helpers");
13
+ const getFyndTradeContext = async ({ input, deps, from, to, }) => {
14
+ const { sellAsset, buyAsset, sellAmountIncludingProtocolFeesCryptoBaseUnit, affiliateBps } = input;
15
+ const maybeChainId = (0, helpers_2.assertValidTrade)({ sellAsset, buyAsset });
16
+ if (maybeChainId.isErr())
17
+ return (0, monads_1.Err)(maybeChainId.unwrapErr());
18
+ const chainId = maybeChainId.unwrap();
19
+ const slippageTolerancePercentageDecimal = input.slippageTolerancePercentageDecimal ??
20
+ (0, constants_1.getDefaultSlippageDecimalPercentageForSwapper)(types_1.SwapperName.Fynd);
21
+ const clientFeeBps = (0, helpers_2.getFyndClientFeeBps)(affiliateBps);
22
+ const maybeQuote = await (0, fetchFromFynd_1.fetchFromFynd)({
23
+ input,
24
+ chainId,
25
+ sender: from,
26
+ receiver: to,
27
+ slippageTolerancePercentageDecimal,
28
+ clientFeeBps,
29
+ baseUrl: deps.config.VITE_FYND_BASE_URL,
30
+ });
31
+ if (maybeQuote.isErr())
32
+ return (0, monads_1.Err)(maybeQuote.unwrapErr());
33
+ const quote = maybeQuote.unwrap();
34
+ const { router_fee: routerFee, client_fee: clientFee } = quote.fee_breakdown;
35
+ const buyAmountBeforeFeesCryptoBaseUnit = quote.amount_out;
36
+ const buyAmountAfterFeesCryptoBaseUnit = (0, utils_1.bn)(quote.amount_out)
37
+ .minus(routerFee)
38
+ .minus(clientFee)
39
+ .toFixed();
40
+ const rate = (0, utils_2.getInputOutputRate)({
41
+ sellAmountCryptoBaseUnit: quote.amount_in,
42
+ buyAmountCryptoBaseUnit: buyAmountAfterFeesCryptoBaseUnit,
43
+ sellAsset,
44
+ buyAsset,
45
+ });
46
+ const protocols = (0, helpers_2.getFyndRouteProtocols)(quote.route?.swaps);
47
+ const source = protocols.length
48
+ ? `${types_1.SwapperName.Fynd} • ${protocols.join(', ')}`
49
+ : types_1.SwapperName.Fynd;
50
+ const allowanceContract = (0, helpers_1.isNativeEvmAsset)(sellAsset.assetId) ? '' : quote.transaction.to;
51
+ const protocolFees = (0, utils_1.bn)(routerFee).gt(0)
52
+ ? {
53
+ [buyAsset.assetId]: {
54
+ amountCryptoBaseUnit: routerFee,
55
+ asset: buyAsset,
56
+ requiresBalance: false,
57
+ },
58
+ }
59
+ : {};
60
+ return (0, monads_1.Ok)({
61
+ tradeCommon: {
62
+ id: (0, uuid_1.v4)(),
63
+ rate,
64
+ swapperName: types_1.SwapperName.Fynd,
65
+ affiliateBps,
66
+ slippageTolerancePercentageDecimal,
67
+ },
68
+ stepCommon: {
69
+ estimatedExecutionTimeMs: 0,
70
+ allowanceContract,
71
+ rate,
72
+ sellAsset,
73
+ buyAsset,
74
+ sellAmountIncludingProtocolFeesCryptoBaseUnit,
75
+ buyAmountBeforeFeesCryptoBaseUnit,
76
+ buyAmountAfterFeesCryptoBaseUnit,
77
+ source,
78
+ affiliateFee: (0, utils_1.bn)(clientFee).gt(0)
79
+ ? { assetId: buyAsset.assetId, amountCryptoBaseUnit: clientFee, asset: buyAsset }
80
+ : undefined,
81
+ },
82
+ protocolFees,
83
+ deadline: quote.client_fee_deadline ? (0, helpers_1.normalizeEpochToMs)(quote.client_fee_deadline) : undefined,
84
+ stepDataArgs: {
85
+ quote,
86
+ sellAsset,
87
+ sellAmountCryptoBaseUnit: sellAmountIncludingProtocolFeesCryptoBaseUnit,
88
+ spenderAddress: allowanceContract,
89
+ from,
90
+ deps,
91
+ },
92
+ });
93
+ };
94
+ exports.getFyndTradeContext = getFyndTradeContext;
@@ -0,0 +1,24 @@
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 } from '../../../types';
6
+ import type { FyndEncodedQuote, FyndQuoteResponse, FyndRouteSwap } from '../types';
7
+ import type { FyndSupportedChainId } from './constants';
8
+ export declare const getFyndRouteProtocols: (swaps: FyndRouteSwap[] | undefined) => string[];
9
+ export declare const getFyndClientFeeBps: (affiliateBps: string) => number;
10
+ export declare const convertAssetIdToFyndToken: (assetId: AssetId) => Address;
11
+ export declare const assertValidTrade: ({ sellAsset, buyAsset, }: {
12
+ sellAsset: Asset;
13
+ buyAsset: Asset;
14
+ }) => Result<FyndSupportedChainId, SwapErrorRight>;
15
+ export declare const getFyndRequestError: (error: SwapErrorRight) => SwapErrorRight;
16
+ type FyndQuoteContext = {
17
+ chainId: FyndSupportedChainId;
18
+ sellAsset: Asset;
19
+ sellAmountCryptoBaseUnit: string;
20
+ slippageTolerancePercentageDecimal: string;
21
+ clientFeeBps: number;
22
+ };
23
+ export declare const validateFyndQuoteResponse: (response: FyndQuoteResponse, context: FyndQuoteContext) => Result<FyndEncodedQuote, SwapErrorRight>;
24
+ export {};
@@ -0,0 +1,174 @@
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.validateFyndQuoteResponse = exports.getFyndRequestError = exports.assertValidTrade = exports.convertAssetIdToFyndToken = exports.getFyndClientFeeBps = exports.getFyndRouteProtocols = void 0;
7
+ const caip_1 = require("@shapeshiftoss/caip");
8
+ const utils_1 = require("@shapeshiftoss/utils");
9
+ const monads_1 = require("@sniptt/monads");
10
+ const axios_1 = __importDefault(require("axios"));
11
+ const viem_1 = require("viem");
12
+ const types_1 = require("../../../types");
13
+ const utils_2 = require("../../../utils");
14
+ const helpers_1 = require("../../../utils/helpers");
15
+ const constants_1 = require("./constants");
16
+ const isFyndSupportedChainId = (chainId) => chainId in constants_1.FYND_CHAINS;
17
+ // Protocol ids look like uniswap_v3, vm:balancer_v2 or fallback:rfq:bebop
18
+ const formatFyndProtocol = (protocol) => protocol
19
+ .slice(protocol.lastIndexOf(':') + 1)
20
+ .split('_')
21
+ .map(word => /^v\d+$/.test(word) ? word.toUpperCase() : word.charAt(0).toUpperCase() + word.slice(1))
22
+ .join(' ');
23
+ // The native_wrapper hop is only the WETH wrap/unwrap around the real venues
24
+ const getFyndRouteProtocols = (swaps) => {
25
+ const venues = (swaps ?? [])
26
+ .map(swap => swap.protocol)
27
+ .filter(protocol => !protocol.endsWith('native_wrapper'));
28
+ return [...new Set(venues)].map(formatFyndProtocol);
29
+ };
30
+ exports.getFyndRouteProtocols = getFyndRouteProtocols;
31
+ const getFyndClientFeeBps = (affiliateBps) => (0, utils_1.bn)(affiliateBps).div(constants_1.FYND_CLIENT_FEE_SHARE).integerValue(utils_1.BigNumber.ROUND_CEIL).toNumber();
32
+ exports.getFyndClientFeeBps = getFyndClientFeeBps;
33
+ const convertAssetIdToFyndToken = (assetId) => {
34
+ if ((0, helpers_1.isNativeEvmAsset)(assetId))
35
+ return viem_1.zeroAddress;
36
+ return (0, viem_1.getAddress)((0, caip_1.fromAssetId)(assetId).assetReference);
37
+ };
38
+ exports.convertAssetIdToFyndToken = convertAssetIdToFyndToken;
39
+ const assertValidTrade = ({ sellAsset, buyAsset, }) => {
40
+ if (sellAsset.chainId !== buyAsset.chainId) {
41
+ return (0, monads_1.Err)((0, utils_2.makeSwapErrorRight)({
42
+ message: 'Fynd does not support cross-chain trades',
43
+ code: types_1.TradeQuoteError.CrossChainNotSupported,
44
+ }));
45
+ }
46
+ if (!isFyndSupportedChainId(sellAsset.chainId)) {
47
+ return (0, monads_1.Err)((0, utils_2.makeSwapErrorRight)({
48
+ message: 'Fynd only supports configured EVM chains',
49
+ code: types_1.TradeQuoteError.UnsupportedChain,
50
+ }));
51
+ }
52
+ return (0, monads_1.Ok)(sellAsset.chainId);
53
+ };
54
+ exports.assertValidTrade = assertValidTrade;
55
+ const getFyndStatusError = (status, detail) => {
56
+ const code = (() => {
57
+ switch (status.toLowerCase()) {
58
+ case 'no_route_found':
59
+ case 'insufficient_liquidity':
60
+ return types_1.TradeQuoteError.NoRouteFound;
61
+ case 'timeout':
62
+ return types_1.TradeQuoteError.Timeout;
63
+ default:
64
+ return types_1.TradeQuoteError.QueryFailed;
65
+ }
66
+ })();
67
+ return (0, utils_2.makeSwapErrorRight)({
68
+ message: `Fynd quote failed: ${status}${detail ? ` (${detail})` : ''}`,
69
+ code,
70
+ });
71
+ };
72
+ const isFyndErrorResponse = (value) => typeof value === 'object' &&
73
+ value !== null &&
74
+ 'error' in value &&
75
+ typeof value.error === 'string' &&
76
+ 'code' in value &&
77
+ typeof value.code === 'string';
78
+ const getFyndRequestError = (error) => {
79
+ const { cause } = error;
80
+ if (!axios_1.default.isAxiosError(cause))
81
+ return error;
82
+ if (cause.response?.status === 429) {
83
+ return (0, utils_2.makeSwapErrorRight)({
84
+ message: 'Fynd rate limit exceeded',
85
+ code: types_1.TradeQuoteError.RateLimitExceeded,
86
+ });
87
+ }
88
+ const body = cause.response?.data;
89
+ if (isFyndErrorResponse(body))
90
+ return getFyndStatusError(body.code, body.error);
91
+ return (0, utils_2.makeSwapErrorRight)({
92
+ message: `Fynd request failed with status ${cause.response?.status}`,
93
+ code: types_1.TradeQuoteError.QueryFailed,
94
+ cause,
95
+ });
96
+ };
97
+ exports.getFyndRequestError = getFyndRequestError;
98
+ const invalidResponse = (message, details) => (0, utils_2.makeSwapErrorRight)({ message, details, code: types_1.TradeQuoteError.InvalidResponse });
99
+ const getQuoteError = (quote, { chainId, sellAsset, sellAmountCryptoBaseUnit, slippageTolerancePercentageDecimal, clientFeeBps, }) => {
100
+ const { transaction, fee_breakdown: fees } = quote;
101
+ const pinnedRouter = constants_1.FYND_CHAINS[chainId].routerAddress;
102
+ if (!(0, viem_1.isAddress)(transaction.to, { strict: false }) ||
103
+ !(0, viem_1.isAddressEqual)(transaction.to, pinnedRouter)) {
104
+ return invalidResponse(`Fynd router ${transaction.to} is not the pinned router ${pinnedRouter} for ${chainId}`);
105
+ }
106
+ if (!(0, utils_1.bn)(quote.amount_in).eq(sellAmountCryptoBaseUnit)) {
107
+ return invalidResponse('Fynd quoted a different sell amount', {
108
+ amountIn: quote.amount_in,
109
+ sellAmountCryptoBaseUnit,
110
+ });
111
+ }
112
+ const expectedValue = (0, helpers_1.isNativeEvmAsset)(sellAsset.assetId) ? sellAmountCryptoBaseUnit : '0';
113
+ if (!(0, utils_1.bn)(transaction.value).eq(expectedValue)) {
114
+ return invalidResponse('Fynd transaction value does not match the sell amount', {
115
+ value: transaction.value,
116
+ expectedValue,
117
+ });
118
+ }
119
+ // The router enforces min_amount_received, which may not be looser than the requested slippage
120
+ const netOutput = (0, utils_1.bn)(quote.amount_out).minus(fees.router_fee).minus(fees.client_fee);
121
+ const outputFloor = netOutput
122
+ .times((0, utils_1.bn)(1).minus(slippageTolerancePercentageDecimal))
123
+ .integerValue(utils_1.BigNumber.ROUND_DOWN);
124
+ if ((0, utils_1.bn)(fees.min_amount_received).lt(outputFloor)) {
125
+ return invalidResponse('Fynd output floor is below the requested slippage', {
126
+ minAmountReceived: fees.min_amount_received,
127
+ outputFloor: outputFloor.toFixed(),
128
+ slippageTolerancePercentageDecimal,
129
+ });
130
+ }
131
+ if (clientFeeBps === 0) {
132
+ if (!(0, utils_1.bn)(fees.client_fee).isZero()) {
133
+ return invalidResponse('Fynd returned an unexpected client fee', {
134
+ clientFee: fees.client_fee,
135
+ });
136
+ }
137
+ return;
138
+ }
139
+ // Our share of the gross client fee, allowing one unit of rounding
140
+ const minClientFee = (0, utils_1.bn)(quote.amount_out)
141
+ .times(clientFeeBps)
142
+ .div(10_000)
143
+ .times(constants_1.FYND_CLIENT_FEE_SHARE)
144
+ .integerValue(utils_1.BigNumber.ROUND_DOWN)
145
+ .minus(1);
146
+ if ((0, utils_1.bn)(fees.client_fee).lt(minClientFee)) {
147
+ return invalidResponse('Fynd client fee is below the requested share', {
148
+ clientFee: fees.client_fee,
149
+ amountOut: quote.amount_out,
150
+ clientFeeBps,
151
+ });
152
+ }
153
+ // The proxy patches the signature over Fynd's zeroed placeholder at the reported offset
154
+ const offset = transaction.client_fee_signature_offset;
155
+ const signature = typeof offset === 'number'
156
+ ? transaction.data.slice(2 + offset * 2, 2 + (offset + constants_1.FYND_CLIENT_FEE_SIGNATURE_BYTES) * 2)
157
+ : '';
158
+ if (signature.length !== constants_1.FYND_CLIENT_FEE_SIGNATURE_BYTES * 2 || /^0+$/.test(signature)) {
159
+ return invalidResponse('Fynd quote is not signed for the client fee', { offset });
160
+ }
161
+ if (!quote.client_fee_deadline) {
162
+ return invalidResponse('Fynd quote is missing its client fee deadline');
163
+ }
164
+ };
165
+ const validateFyndQuoteResponse = (response, context) => {
166
+ const order = Array.isArray(response?.orders) ? response.orders[0] : undefined;
167
+ if (!order)
168
+ return (0, monads_1.Err)(invalidResponse('Fynd returned no order'));
169
+ if (order.status !== 'success')
170
+ return (0, monads_1.Err)(getFyndStatusError(order.status));
171
+ const error = getQuoteError(order, context);
172
+ return error ? (0, monads_1.Err)(error) : (0, monads_1.Ok)(order);
173
+ };
174
+ exports.validateFyndQuoteResponse = validateFyndQuoteResponse;
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const types_1 = require("@shapeshiftoss/types");
4
+ const vitest_1 = require("vitest");
5
+ const assets_1 = require("../../../utils/test-data/assets");
6
+ const constants_1 = require("./constants");
7
+ const helpers_1 = require("./helpers");
8
+ (0, vitest_1.describe)('getFyndClientFeeBps', () => {
9
+ vitest_1.it.each([
10
+ ['nets the default fee after the 20% share', '60', 75],
11
+ ['rounds up so the net never falls short', '55', 69],
12
+ ['requests nothing for a fee-free swap', '0', 0],
13
+ ])('%s', (_label, affiliateBps, grossBps) => {
14
+ (0, vitest_1.expect)((0, helpers_1.getFyndClientFeeBps)(affiliateBps)).toBe(grossBps);
15
+ });
16
+ });
17
+ (0, vitest_1.describe)('validateFyndQuoteResponse', () => {
18
+ const router = constants_1.FYND_CHAINS['eip155:1'].routerAddress;
19
+ const unpinnedRouter = '0x1111111111111111111111111111111111111111';
20
+ const transaction = {
21
+ to: router,
22
+ value: '0',
23
+ data: '0x12345678',
24
+ client_fee_signature_offset: null,
25
+ };
26
+ const fees = { router_fee: '10', client_fee: '0', max_slippage: '4', min_amount_received: '986' };
27
+ const order = {
28
+ status: 'success',
29
+ amount_in: '1000',
30
+ amount_out: '1000',
31
+ gas_estimate: '21000',
32
+ transaction,
33
+ fee_breakdown: fees,
34
+ };
35
+ const context = {
36
+ chainId: types_1.KnownChainIds.EthereumMainnet,
37
+ sellAsset: assets_1.WETH,
38
+ sellAmountCryptoBaseUnit: '1000',
39
+ slippageTolerancePercentageDecimal: '0.005',
40
+ clientFeeBps: 0,
41
+ };
42
+ const validate = (overrides, contextOverrides = {}) => (0, helpers_1.validateFyndQuoteResponse)({ orders: [{ ...order, ...overrides }] }, { ...context, ...contextOverrides });
43
+ (0, vitest_1.it)('accepts a quote that matches the request', () => {
44
+ (0, vitest_1.expect)(validate({}).isOk()).toBe(true);
45
+ });
46
+ vitest_1.it.each([
47
+ ['an unpinned router', { transaction: { ...transaction, to: unpinnedRouter } }],
48
+ ['a different sell amount', { amount_in: '999' }],
49
+ ['native value on a token sell', { transaction: { ...transaction, value: '1' } }],
50
+ [
51
+ 'an output floor looser than the slippage',
52
+ { fee_breakdown: { ...fees, min_amount_received: '984' } },
53
+ ],
54
+ ['a client fee we did not request', { fee_breakdown: { ...fees, client_fee: '1' } }],
55
+ ])('rejects %s', (_label, overrides) => {
56
+ (0, vitest_1.expect)(validate(overrides).isErr()).toBe(true);
57
+ });
58
+ (0, vitest_1.it)('binds native transaction value to the requested sell amount', () => {
59
+ (0, vitest_1.expect)(validate({}, { sellAsset: assets_1.ETH }).isErr()).toBe(true);
60
+ (0, vitest_1.expect)(validate({ transaction: { ...transaction, value: '1000' } }, { sellAsset: assets_1.ETH }).isOk()).toBe(true);
61
+ });
62
+ (0, vitest_1.it)('maps a missing route to NoRouteFound', () => {
63
+ const result = (0, helpers_1.validateFyndQuoteResponse)({ orders: [{ status: 'no_route_found' }] }, context);
64
+ (0, vitest_1.expect)(result.unwrapErr().code).toBe('NoRouteFound');
65
+ });
66
+ (0, vitest_1.describe)('with a client fee', () => {
67
+ const feeContext = { clientFeeBps: 75 };
68
+ const feeOrder = {
69
+ transaction: {
70
+ ...transaction,
71
+ data: `0x12345678${'ab'.repeat(65)}`,
72
+ client_fee_signature_offset: 4,
73
+ },
74
+ fee_breakdown: {
75
+ router_fee: '2',
76
+ client_fee: '6',
77
+ max_slippage: '4',
78
+ min_amount_received: '988',
79
+ },
80
+ client_fee_deadline: 1_900_000_000,
81
+ };
82
+ (0, vitest_1.it)('accepts a signed quote carrying our share of the fee', () => {
83
+ (0, vitest_1.expect)(validate(feeOrder, feeContext).isOk()).toBe(true);
84
+ });
85
+ vitest_1.it.each([
86
+ [
87
+ 'a fee below our share',
88
+ {
89
+ fee_breakdown: { ...feeOrder.fee_breakdown, client_fee: '4', min_amount_received: '990' },
90
+ },
91
+ ],
92
+ [
93
+ 'an unsigned placeholder',
94
+ { transaction: { ...feeOrder.transaction, data: `0x12345678${'00'.repeat(65)}` } },
95
+ ],
96
+ ['a missing deadline', { client_fee_deadline: null }],
97
+ ])('rejects %s', (_label, overrides) => {
98
+ (0, vitest_1.expect)(validate({ ...feeOrder, ...overrides }, feeContext).isErr()).toBe(true);
99
+ });
100
+ });
101
+ });
@@ -0,0 +1,2 @@
1
+ import type { Swapper } from '../../types';
2
+ export declare const kyberSwapper: Swapper;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.kyberSwapper = void 0;
4
+ const utils_1 = require("../../utils");
5
+ exports.kyberSwapper = { executeEvmTransaction: utils_1.executeEvmTransaction };
@@ -0,0 +1,2 @@
1
+ import type { SwapperApi } from '../../types';
2
+ export declare const kyberApi: SwapperApi;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.kyberApi = void 0;
4
+ const utils_1 = require("../../utils");
5
+ const evm_1 = require("../../utils/evm");
6
+ const getKyberTradeQuote_1 = require("./swapperApi/getKyberTradeQuote");
7
+ const getKyberTradeRate_1 = require("./swapperApi/getKyberTradeRate");
8
+ exports.kyberApi = {
9
+ getTradeQuote: (input, deps) => (0, getKyberTradeQuote_1.getKyberTradeQuote)(input, deps),
10
+ getTradeRate: (input, deps) => (0, getKyberTradeRate_1.getKyberTradeRate)(input, deps),
11
+ getUnsignedEvmTransaction: evm_1.getUnsignedEvmTransaction,
12
+ getEvmTransactionFees: evm_1.getEvmTransactionFees,
13
+ checkTradeStatus: utils_1.checkEvmSwapStatus,
14
+ };
@@ -0,0 +1,2 @@
1
+ export { kyberApi } from './endpoints';
2
+ export { kyberSwapper } from './KyberSwapper';
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.kyberSwapper = exports.kyberApi = void 0;
4
+ var endpoints_1 = require("./endpoints");
5
+ Object.defineProperty(exports, "kyberApi", { enumerable: true, get: function () { return endpoints_1.kyberApi; } });
6
+ var KyberSwapper_1 = require("./KyberSwapper");
7
+ Object.defineProperty(exports, "kyberSwapper", { enumerable: true, get: function () { return KyberSwapper_1.kyberSwapper; } });
@@ -0,0 +1,4 @@
1
+ import type { Result } from '@sniptt/monads';
2
+ import type { SwapErrorRight, SwapperDeps, TradeQuote } from '../../../types';
3
+ import type { KyberTradeQuoteInput } from '../types';
4
+ export declare const getKyberTradeQuote: (input: KyberTradeQuoteInput, deps: SwapperDeps) => Promise<Result<TradeQuote[], SwapErrorRight>>;
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getKyberTradeQuote = void 0;
4
+ const monads_1 = require("@sniptt/monads");
5
+ const utils_1 = require("../../../utils");
6
+ const constants_1 = require("../utils/constants");
7
+ const fetchFromKyber_1 = require("../utils/fetchFromKyber");
8
+ const getKyberStepData_1 = require("../utils/getKyberStepData");
9
+ const getKyberTradeContext_1 = require("../utils/getKyberTradeContext");
10
+ const helpers_1 = require("../utils/helpers");
11
+ const getKyberTradeQuote = async (input, deps) => {
12
+ const { accountNumber } = input;
13
+ const maybeAddresses = (0, utils_1.assertQuoteAddresses)(input);
14
+ if (maybeAddresses.isErr())
15
+ return (0, monads_1.Err)(maybeAddresses.unwrapErr());
16
+ const { sendAddress, receiveAddress } = maybeAddresses.unwrap();
17
+ const maybeContext = await (0, getKyberTradeContext_1.getKyberTradeContext)({ input, deps });
18
+ if (maybeContext.isErr())
19
+ return (0, monads_1.Err)(maybeContext.unwrapErr());
20
+ const { tradeCommon, stepCommon, protocolFees, chainId, route, stepDataArgs } = maybeContext.unwrap();
21
+ const deadline = Math.floor(Date.now() / 1000) + constants_1.KYBER_DEADLINE_SECONDS;
22
+ const maybeBuild = await (0, fetchFromKyber_1.fetchKyberBuild)({
23
+ chainId,
24
+ route,
25
+ slippageTolerancePercentageDecimal: tradeCommon.slippageTolerancePercentageDecimal,
26
+ baseUrl: deps.config.VITE_KYBER_BASE_URL,
27
+ sendAddress,
28
+ receiveAddress,
29
+ deadline,
30
+ });
31
+ if (maybeBuild.isErr())
32
+ return (0, monads_1.Err)(maybeBuild.unwrapErr());
33
+ const build = maybeBuild.unwrap();
34
+ // Kyber re-prices at build time and derives the calldata's minimum return from the built amount
35
+ const tradeAmounts = (0, helpers_1.getKyberTradeAmounts)({ input, amountOut: build.amountOut });
36
+ const maybeStepData = await (0, getKyberStepData_1.getKyberStepData)({
37
+ ...stepDataArgs,
38
+ type: 'quote',
39
+ input,
40
+ from: sendAddress,
41
+ build,
42
+ });
43
+ if (maybeStepData.isErr())
44
+ return (0, monads_1.Err)(maybeStepData.unwrapErr());
45
+ const { transactionData, networkFeeCryptoBaseUnit } = maybeStepData.unwrap();
46
+ const tradeQuote = {
47
+ ...tradeCommon,
48
+ rate: tradeAmounts.rate,
49
+ quoteOrRate: 'quote',
50
+ receiveAddress,
51
+ deadline: deadline * 1000,
52
+ steps: [
53
+ {
54
+ ...stepCommon,
55
+ ...tradeAmounts,
56
+ accountNumber,
57
+ transactionData,
58
+ feeData: { networkFeeCryptoBaseUnit, protocolFees },
59
+ },
60
+ ],
61
+ };
62
+ return (0, monads_1.Ok)([tradeQuote]);
63
+ };
64
+ exports.getKyberTradeQuote = getKyberTradeQuote;
@@ -0,0 +1,4 @@
1
+ import type { Result } from '@sniptt/monads';
2
+ import type { SwapErrorRight, SwapperDeps, TradeRate } from '../../../types';
3
+ import type { KyberTradeRateInput } from '../types';
4
+ export declare const getKyberTradeRate: (input: KyberTradeRateInput, deps: SwapperDeps) => Promise<Result<TradeRate[], SwapErrorRight>>;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getKyberTradeRate = void 0;
4
+ const monads_1 = require("@sniptt/monads");
5
+ const getKyberStepData_1 = require("../utils/getKyberStepData");
6
+ const getKyberTradeContext_1 = require("../utils/getKyberTradeContext");
7
+ const getKyberTradeRate = async (input, deps) => {
8
+ const { accountNumber, receiveAddress } = input;
9
+ const maybeContext = await (0, getKyberTradeContext_1.getKyberTradeContext)({ input, deps });
10
+ if (maybeContext.isErr())
11
+ return (0, monads_1.Err)(maybeContext.unwrapErr());
12
+ const { tradeCommon, stepCommon, protocolFees, stepDataArgs } = maybeContext.unwrap();
13
+ const maybeStepData = await (0, getKyberStepData_1.getKyberStepData)({ ...stepDataArgs, type: 'rate', input });
14
+ if (maybeStepData.isErr())
15
+ return (0, monads_1.Err)(maybeStepData.unwrapErr());
16
+ const { networkFeeCryptoBaseUnit } = maybeStepData.unwrap();
17
+ const tradeRate = {
18
+ ...tradeCommon,
19
+ quoteOrRate: 'rate',
20
+ receiveAddress,
21
+ steps: [
22
+ {
23
+ ...stepCommon,
24
+ accountNumber,
25
+ feeData: { networkFeeCryptoBaseUnit, protocolFees },
26
+ },
27
+ ],
28
+ };
29
+ return (0, monads_1.Ok)([tradeRate]);
30
+ };
31
+ exports.getKyberTradeRate = getKyberTradeRate;
@@ -0,0 +1,62 @@
1
+ import type { Address, Hex } from 'viem';
2
+ import type { GetEvmTradeQuoteInput, GetEvmTradeRateInput } from '../../types';
3
+ export type KyberTradeQuoteInput = GetEvmTradeQuoteInput;
4
+ export type KyberTradeRateInput = GetEvmTradeRateInput;
5
+ export type KyberExtraFee = {
6
+ feeAmount: string;
7
+ chargeFeeBy: '' | 'currency_in' | 'currency_out';
8
+ isInBps: boolean;
9
+ feeReceiver: string;
10
+ };
11
+ export type KyberFeeParams = {
12
+ feeAmount: string;
13
+ chargeFeeBy: 'currency_out';
14
+ isInBps: true;
15
+ feeReceiver: Address;
16
+ };
17
+ export type KyberRouteSummary = {
18
+ tokenIn: string;
19
+ amountIn: string;
20
+ amountInUsd: string;
21
+ tokenOut: string;
22
+ amountOut: string;
23
+ amountOutUsd: string;
24
+ gas: string;
25
+ gasPrice: string;
26
+ gasUsd: string;
27
+ l1FeeUsd: string;
28
+ extraFee: KyberExtraFee;
29
+ route: unknown;
30
+ routerAddress: Address;
31
+ routeID: string;
32
+ checksum: string;
33
+ timestamp: number;
34
+ };
35
+ export type KyberRouteData = {
36
+ routeSummary: KyberRouteSummary;
37
+ routerAddress: Address;
38
+ };
39
+ export type KyberRoutesResponse = {
40
+ code: number;
41
+ message: string;
42
+ data?: KyberRouteData;
43
+ requestId: string;
44
+ };
45
+ export type KyberBuildData = {
46
+ amountOut: string;
47
+ gas: string;
48
+ data: Hex;
49
+ routerAddress: Address;
50
+ transactionValue: string;
51
+ };
52
+ export type KyberBuildResponse = {
53
+ code: number;
54
+ message: string;
55
+ data?: KyberBuildData;
56
+ requestId: string;
57
+ };
58
+ export type KyberErrorResponse = {
59
+ code: number;
60
+ message: string;
61
+ requestId?: string;
62
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,21 @@
1
+ import type { Address } from 'viem';
2
+ export declare const KYBER_CLIENT_ID = "shapeshift";
3
+ export declare const KYBER_DEADLINE_SECONDS = 1200;
4
+ export declare const KYBER_CHAINS: {
5
+ readonly "eip155:1": "ethereum";
6
+ readonly "eip155:10": "optimism";
7
+ readonly "eip155:56": "bsc";
8
+ readonly "eip155:137": "polygon";
9
+ readonly "eip155:42161": "arbitrum";
10
+ readonly "eip155:8453": "base";
11
+ readonly "eip155:43114": "avalanche";
12
+ readonly "eip155:130": "unichain";
13
+ readonly "eip155:4663": "robinhood";
14
+ readonly "eip155:143": "monad";
15
+ readonly "eip155:999": "hyperevm";
16
+ readonly "eip155:4326": "megaeth";
17
+ readonly "eip155:9745": "plasma";
18
+ };
19
+ export type KyberSupportedChainId = keyof typeof KYBER_CHAINS;
20
+ export declare const KYBER_ROUTER_ADDRESS: Address;
21
+ export declare const KYBER_NATIVE_TOKEN: Address;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.KYBER_NATIVE_TOKEN = exports.KYBER_ROUTER_ADDRESS = exports.KYBER_CHAINS = exports.KYBER_DEADLINE_SECONDS = exports.KYBER_CLIENT_ID = void 0;
4
+ const types_1 = require("@shapeshiftoss/types");
5
+ exports.KYBER_CLIENT_ID = 'shapeshift';
6
+ exports.KYBER_DEADLINE_SECONDS = 1200;
7
+ exports.KYBER_CHAINS = {
8
+ [types_1.KnownChainIds.EthereumMainnet]: 'ethereum',
9
+ [types_1.KnownChainIds.OptimismMainnet]: 'optimism',
10
+ [types_1.KnownChainIds.BnbSmartChainMainnet]: 'bsc',
11
+ [types_1.KnownChainIds.PolygonMainnet]: 'polygon',
12
+ [types_1.KnownChainIds.ArbitrumMainnet]: 'arbitrum',
13
+ [types_1.KnownChainIds.BaseMainnet]: 'base',
14
+ [types_1.KnownChainIds.AvalancheMainnet]: 'avalanche',
15
+ [types_1.KnownChainIds.UnichainMainnet]: 'unichain',
16
+ [types_1.KnownChainIds.RobinhoodMainnet]: 'robinhood',
17
+ [types_1.KnownChainIds.MonadMainnet]: 'monad',
18
+ [types_1.KnownChainIds.HyperEvmMainnet]: 'hyperevm',
19
+ [types_1.KnownChainIds.MegaEthMainnet]: 'megaeth',
20
+ [types_1.KnownChainIds.PlasmaMainnet]: 'plasma',
21
+ };
22
+ // MetaAggregationRouterV2, same address on every chain: https://docs.kyberswap.com/developer-guide/aggregator-api/contracts
23
+ exports.KYBER_ROUTER_ADDRESS = '0x6131B5fae19EA4f9D964eAc0408E4408b66337b5';
24
+ exports.KYBER_NATIVE_TOKEN = '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE';