@0xsquid/react-hooks 1.0.4 → 1.0.6

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 (317) hide show
  1. package/dist/assets/images/icons/wallets/index.d.ts +22 -0
  2. package/{src/assets/images/icons/wallets/index.ts → dist/assets/images/icons/wallets/index.js} +21 -21
  3. package/dist/assets/images/icons/wallets/index.js.map +1 -0
  4. package/dist/connectors/ExodusConnector.d.ts +4 -0
  5. package/{src/connectors/ExodusConnector.ts → dist/connectors/ExodusConnector.js} +3 -3
  6. package/dist/connectors/ExodusConnector.js.map +1 -0
  7. package/dist/connectors/LedgerLiveConnector.d.ts +40 -0
  8. package/dist/connectors/LedgerLiveConnector.js +177 -0
  9. package/dist/connectors/LedgerLiveConnector.js.map +1 -0
  10. package/dist/contracts/typechain/factories/ERC20__factory.js +324 -0
  11. package/dist/contracts/typechain/factories/ERC20__factory.js.map +1 -0
  12. package/dist/core/constants.d.ts +37 -0
  13. package/dist/core/constants.js +487 -0
  14. package/dist/core/constants.js.map +1 -0
  15. package/dist/core/externalLinks.d.ts +18 -0
  16. package/{src/core/externalLinks.ts → dist/core/externalLinks.js} +5 -9
  17. package/dist/core/externalLinks.js.map +1 -0
  18. package/dist/core/index.js +2 -0
  19. package/dist/core/index.js.map +1 -0
  20. package/dist/core/multicall3.d.ts +16 -0
  21. package/dist/core/multicall3.js +23 -0
  22. package/dist/core/multicall3.js.map +1 -0
  23. package/dist/core/numbers.d.ts +3 -0
  24. package/dist/core/numbers.js +28 -0
  25. package/dist/core/numbers.js.map +1 -0
  26. package/dist/core/providers/CosmosProvider.d.ts +34 -0
  27. package/dist/core/providers/CosmosProvider.js +12 -0
  28. package/dist/core/providers/CosmosProvider.js.map +1 -0
  29. package/dist/core/queries/queries-keys.d.ts +34 -0
  30. package/dist/core/queries/queries-keys.js +120 -0
  31. package/dist/core/queries/queries-keys.js.map +1 -0
  32. package/dist/core/queries/react-query-config.d.ts +3 -0
  33. package/dist/core/queries/react-query-config.js +11 -0
  34. package/dist/core/queries/react-query-config.js.map +1 -0
  35. package/dist/core/types/components.d.ts +14 -0
  36. package/dist/core/types/components.js +2 -0
  37. package/dist/core/types/components.js.map +1 -0
  38. package/dist/core/types/config.d.ts +47 -0
  39. package/dist/core/types/config.js +2 -0
  40. package/dist/core/types/config.js.map +1 -0
  41. package/dist/core/types/dex.d.ts +28 -0
  42. package/dist/core/types/dex.js +33 -0
  43. package/dist/core/types/dex.js.map +1 -0
  44. package/dist/core/types/error.d.ts +44 -0
  45. package/dist/core/types/error.js +12 -0
  46. package/dist/core/types/error.js.map +1 -0
  47. package/dist/core/types/event.d.ts +17 -0
  48. package/dist/core/types/event.js +2 -0
  49. package/dist/core/types/event.js.map +1 -0
  50. package/dist/core/types/route.d.ts +9 -0
  51. package/dist/core/types/route.js +4 -0
  52. package/dist/core/types/route.js.map +1 -0
  53. package/dist/core/types/swap.d.ts +8 -0
  54. package/dist/core/types/swap.js +2 -0
  55. package/dist/core/types/swap.js.map +1 -0
  56. package/dist/core/types/tokens.d.ts +29 -0
  57. package/dist/core/types/tokens.js +2 -0
  58. package/dist/core/types/tokens.js.map +1 -0
  59. package/dist/core/types/transaction.d.ts +68 -0
  60. package/dist/core/types/transaction.js +38 -0
  61. package/dist/core/types/transaction.js.map +1 -0
  62. package/dist/core/types/types.d.ts +30 -0
  63. package/dist/core/types/types.js +7 -0
  64. package/dist/core/types/types.js.map +1 -0
  65. package/dist/core/types/wallet.d.ts +55 -0
  66. package/dist/core/types/wallet.js +26 -0
  67. package/dist/core/types/wallet.js.map +1 -0
  68. package/dist/hooks/chains/useSquidChains.d.ts +12 -0
  69. package/dist/hooks/chains/useSquidChains.js +45 -0
  70. package/dist/hooks/chains/useSquidChains.js.map +1 -0
  71. package/dist/hooks/cosmos/useCosmos.d.ts +33 -0
  72. package/dist/hooks/cosmos/useCosmos.js +194 -0
  73. package/dist/hooks/cosmos/useCosmos.js.map +1 -0
  74. package/dist/hooks/cosmos/useCosmosForChain.d.ts +4 -0
  75. package/dist/hooks/cosmos/useCosmosForChain.js +22 -0
  76. package/dist/hooks/cosmos/useCosmosForChain.js.map +1 -0
  77. package/{src/hooks/index.ts → dist/hooks/index.d.ts} +1 -7
  78. package/dist/hooks/index.js +27 -0
  79. package/dist/hooks/index.js.map +1 -0
  80. package/dist/hooks/navigation/useKeyboardNavigation.d.ts +7 -0
  81. package/dist/hooks/navigation/useKeyboardNavigation.js +69 -0
  82. package/dist/hooks/navigation/useKeyboardNavigation.js.map +1 -0
  83. package/dist/hooks/store/useSquidStore.d.ts +105 -0
  84. package/dist/hooks/store/useSquidStore.js +35 -0
  85. package/dist/hooks/store/useSquidStore.js.map +1 -0
  86. package/dist/hooks/swap/useSwap.d.ts +25 -0
  87. package/dist/hooks/swap/useSwap.js +229 -0
  88. package/dist/hooks/swap/useSwap.js.map +1 -0
  89. package/dist/hooks/tokens/useAllTokensWithBalance.d.ts +11 -0
  90. package/dist/hooks/tokens/useAllTokensWithBalance.js +97 -0
  91. package/dist/hooks/tokens/useAllTokensWithBalance.js.map +1 -0
  92. package/dist/hooks/tokens/useBalance.d.ts +34 -0
  93. package/dist/hooks/tokens/useBalance.js +112 -0
  94. package/dist/hooks/tokens/useBalance.js.map +1 -0
  95. package/dist/hooks/tokens/useMultiChainBalance.d.ts +17 -0
  96. package/dist/hooks/tokens/useMultiChainBalance.js +36 -0
  97. package/dist/hooks/tokens/useMultiChainBalance.js.map +1 -0
  98. package/dist/hooks/tokens/usePrices.d.ts +6 -0
  99. package/dist/hooks/tokens/usePrices.js +42 -0
  100. package/dist/hooks/tokens/usePrices.js.map +1 -0
  101. package/dist/hooks/tokens/useSingleTokenPrice.d.ts +10 -0
  102. package/dist/hooks/tokens/useSingleTokenPrice.js +32 -0
  103. package/dist/hooks/tokens/useSingleTokenPrice.js.map +1 -0
  104. package/dist/hooks/tokens/useSquidTokens.d.ts +13 -0
  105. package/dist/hooks/tokens/useSquidTokens.js +35 -0
  106. package/dist/hooks/tokens/useSquidTokens.js.map +1 -0
  107. package/dist/hooks/tokens/useTokensWithBalance.d.ts +7 -0
  108. package/dist/hooks/tokens/useTokensWithBalance.js +111 -0
  109. package/dist/hooks/tokens/useTokensWithBalance.js.map +1 -0
  110. package/dist/hooks/transaction/useEstimate.d.ts +44 -0
  111. package/dist/hooks/transaction/useEstimate.js +274 -0
  112. package/dist/hooks/transaction/useEstimate.js.map +1 -0
  113. package/dist/hooks/transaction/useEstimatePriceImpact.d.ts +7 -0
  114. package/dist/hooks/transaction/useEstimatePriceImpact.js +26 -0
  115. package/dist/hooks/transaction/useEstimatePriceImpact.js.map +1 -0
  116. package/dist/hooks/transaction/useExecuteTransaction.d.ts +20 -0
  117. package/dist/hooks/transaction/useExecuteTransaction.js +310 -0
  118. package/dist/hooks/transaction/useExecuteTransaction.js.map +1 -0
  119. package/dist/hooks/transaction/useExpress.d.ts +5 -0
  120. package/dist/hooks/transaction/useExpress.js +31 -0
  121. package/dist/hooks/transaction/useExpress.js.map +1 -0
  122. package/dist/hooks/transaction/useGetRoute.d.ts +14 -0
  123. package/dist/hooks/transaction/useGetRoute.js +96 -0
  124. package/dist/hooks/transaction/useGetRoute.js.map +1 -0
  125. package/dist/hooks/transaction/useSingleTransaction.d.ts +8 -0
  126. package/dist/hooks/transaction/useSingleTransaction.js +99 -0
  127. package/dist/hooks/transaction/useSingleTransaction.js.map +1 -0
  128. package/dist/hooks/transaction/useTransaction.d.ts +25 -0
  129. package/dist/hooks/transaction/useTransaction.js +521 -0
  130. package/dist/hooks/transaction/useTransaction.js.map +1 -0
  131. package/dist/hooks/user/useUserParams.d.ts +6 -0
  132. package/dist/hooks/user/useUserParams.js +41 -0
  133. package/dist/hooks/user/useUserParams.js.map +1 -0
  134. package/dist/hooks/wallet/useAddToken.d.ts +4 -0
  135. package/dist/hooks/wallet/useAddToken.js +45 -0
  136. package/dist/hooks/wallet/useAddToken.js.map +1 -0
  137. package/dist/hooks/wallet/useAutoConnect.d.ts +6 -0
  138. package/dist/hooks/wallet/useAutoConnect.js +44 -0
  139. package/dist/hooks/wallet/useAutoConnect.js.map +1 -0
  140. package/dist/hooks/wallet/useGnosisContext.d.ts +7 -0
  141. package/dist/hooks/wallet/useGnosisContext.js +70 -0
  142. package/dist/hooks/wallet/useGnosisContext.js.map +1 -0
  143. package/dist/hooks/wallet/useIntegratorContext.d.ts +5 -0
  144. package/dist/hooks/wallet/useIntegratorContext.js +39 -0
  145. package/dist/hooks/wallet/useIntegratorContext.js.map +1 -0
  146. package/dist/hooks/wallet/useMultiChainWallet.d.ts +8 -0
  147. package/dist/hooks/wallet/useMultiChainWallet.js +113 -0
  148. package/dist/hooks/wallet/useMultiChainWallet.js.map +1 -0
  149. package/dist/hooks/wallet/useWallet.d.ts +6 -0
  150. package/dist/hooks/wallet/useWallet.js +65 -0
  151. package/dist/hooks/wallet/useWallet.js.map +1 -0
  152. package/dist/hooks/webapp-router/useSquidRouter.d.ts +11 -0
  153. package/dist/hooks/webapp-router/useSquidRouter.js +33 -0
  154. package/dist/hooks/webapp-router/useSquidRouter.js.map +1 -0
  155. package/{src/index.ts → dist/index.d.ts} +0 -1
  156. package/dist/index.js.map +1 -0
  157. package/dist/provider/index.d.ts +10 -0
  158. package/dist/provider/index.js +71 -0
  159. package/dist/provider/index.js.map +1 -0
  160. package/dist/services/external/analyticsService.d.ts +18 -0
  161. package/dist/services/external/analyticsService.js +30 -0
  162. package/dist/services/external/analyticsService.js.map +1 -0
  163. package/dist/services/external/coingeckoService.d.ts +8 -0
  164. package/dist/services/external/coingeckoService.js +20 -0
  165. package/dist/services/external/coingeckoService.js.map +1 -0
  166. package/dist/services/external/rpcService.d.ts +4 -0
  167. package/dist/services/external/rpcService.js +145 -0
  168. package/dist/services/external/rpcService.js.map +1 -0
  169. package/dist/services/external/secretService.d.ts +28 -0
  170. package/dist/services/external/secretService.js +129 -0
  171. package/dist/services/external/secretService.js.map +1 -0
  172. package/dist/services/index.js +2 -0
  173. package/dist/services/index.js.map +1 -0
  174. package/dist/services/internal/apiService.d.ts +4 -0
  175. package/dist/services/internal/apiService.js +7 -0
  176. package/dist/services/internal/apiService.js.map +1 -0
  177. package/dist/services/internal/assetsService.d.ts +28 -0
  178. package/dist/services/internal/assetsService.js +46 -0
  179. package/dist/services/internal/assetsService.js.map +1 -0
  180. package/dist/services/internal/configService.d.ts +40 -0
  181. package/dist/services/internal/configService.js +119 -0
  182. package/dist/services/internal/configService.js.map +1 -0
  183. package/dist/services/internal/errorService.d.ts +30 -0
  184. package/{src/services/internal/errorService.ts → dist/services/internal/errorService.js} +35 -54
  185. package/dist/services/internal/errorService.js.map +1 -0
  186. package/dist/services/internal/eventService.d.ts +52 -0
  187. package/dist/services/internal/eventService.js +66 -0
  188. package/dist/services/internal/eventService.js.map +1 -0
  189. package/dist/services/internal/priceService.d.ts +1 -0
  190. package/dist/services/internal/priceService.js +7 -0
  191. package/dist/services/internal/priceService.js.map +1 -0
  192. package/dist/services/internal/transactionService.d.ts +43 -0
  193. package/dist/services/internal/transactionService.js +172 -0
  194. package/dist/services/internal/transactionService.js.map +1 -0
  195. package/dist/services/internal/transactionStatusService.d.ts +28 -0
  196. package/dist/services/internal/transactionStatusService.js +225 -0
  197. package/dist/services/internal/transactionStatusService.js.map +1 -0
  198. package/dist/services/internal/walletService.d.ts +28 -0
  199. package/dist/services/internal/walletService.js +123 -0
  200. package/dist/services/internal/walletService.js.map +1 -0
  201. package/dist/tests/assetsService.test.d.ts +1 -0
  202. package/dist/tests/assetsService.test.js +130 -0
  203. package/dist/tests/assetsService.test.js.map +1 -0
  204. package/dist/tests/configService.test.d.ts +1 -0
  205. package/dist/tests/configService.test.js +295 -0
  206. package/dist/tests/configService.test.js.map +1 -0
  207. package/dist/tests/fetchSquidData.d.ts +6 -0
  208. package/dist/tests/fetchSquidData.js +27 -0
  209. package/dist/tests/fetchSquidData.js.map +1 -0
  210. package/{src/tests/jest-svg-transform.ts → dist/tests/jest-svg-transform.js} +11 -9
  211. package/dist/tests/jest-svg-transform.js.map +1 -0
  212. package/dist/tests/sample.json +0 -0
  213. package/dist/tests/walletService.test.d.ts +1 -0
  214. package/dist/tests/walletService.test.js +74 -0
  215. package/dist/tests/walletService.test.js.map +1 -0
  216. package/package.json +6 -1
  217. package/.babelrc +0 -7
  218. package/.eslintignore +0 -1
  219. package/.eslintrc.json +0 -44
  220. package/CHANGELOG.md +0 -9
  221. package/jest.config.ts +0 -28
  222. package/scripts/copyAssets.js +0 -27
  223. package/scripts/removeBuildTestFolder.js +0 -28
  224. package/scripts/replacePaths.js +0 -37
  225. package/src/connectors/LedgerLiveConnector.ts +0 -226
  226. package/src/contracts/typechain/ERC20.d.ts +0 -441
  227. package/src/contracts/typechain/factories/ERC20__factory.ts +0 -340
  228. package/src/core/constants.ts +0 -549
  229. package/src/core/multicall3.ts +0 -22
  230. package/src/core/numbers.ts +0 -44
  231. package/src/core/providers/CosmosProvider.tsx +0 -55
  232. package/src/core/queries/queries-keys.ts +0 -156
  233. package/src/core/queries/react-query-config.ts +0 -13
  234. package/src/core/types/components.ts +0 -16
  235. package/src/core/types/config.ts +0 -52
  236. package/src/core/types/dex.ts +0 -31
  237. package/src/core/types/error.ts +0 -52
  238. package/src/core/types/event.ts +0 -16
  239. package/src/core/types/route.ts +0 -21
  240. package/src/core/types/swap.ts +0 -8
  241. package/src/core/types/tokens.ts +0 -30
  242. package/src/core/types/transaction.ts +0 -84
  243. package/src/core/types/types.ts +0 -37
  244. package/src/core/types/wallet.ts +0 -83
  245. package/src/hooks/chains/useSquidChains.ts +0 -66
  246. package/src/hooks/cosmos/useCosmos.ts +0 -279
  247. package/src/hooks/cosmos/useCosmosForChain.ts +0 -33
  248. package/src/hooks/navigation/useKeyboardNavigation.ts +0 -88
  249. package/src/hooks/store/useSquidStore.ts +0 -80
  250. package/src/hooks/swap/useSwap.ts +0 -359
  251. package/src/hooks/tokens/useAllTokensWithBalance.ts +0 -157
  252. package/src/hooks/tokens/useBalance.ts +0 -180
  253. package/src/hooks/tokens/useMultiChainBalance.ts +0 -59
  254. package/src/hooks/tokens/usePrices.ts +0 -52
  255. package/src/hooks/tokens/useSingleTokenPrice.ts +0 -45
  256. package/src/hooks/tokens/useSquidTokens.ts +0 -48
  257. package/src/hooks/tokens/useTokensWithBalance.ts +0 -169
  258. package/src/hooks/transaction/useEstimate.ts +0 -397
  259. package/src/hooks/transaction/useEstimatePriceImpact.ts +0 -39
  260. package/src/hooks/transaction/useExecuteTransaction.ts +0 -440
  261. package/src/hooks/transaction/useExpress.ts +0 -46
  262. package/src/hooks/transaction/useGetRoute.ts +0 -145
  263. package/src/hooks/transaction/useSingleTransaction.ts +0 -155
  264. package/src/hooks/transaction/useTransaction.ts +0 -734
  265. package/src/hooks/user/useUserParams.ts +0 -63
  266. package/src/hooks/wallet/useAddToken.ts +0 -53
  267. package/src/hooks/wallet/useAutoConnect.ts +0 -56
  268. package/src/hooks/wallet/useGnosisContext.ts +0 -84
  269. package/src/hooks/wallet/useIntegratorContext.ts +0 -44
  270. package/src/hooks/wallet/useMultiChainWallet.ts +0 -146
  271. package/src/hooks/wallet/useWallet.ts +0 -86
  272. package/src/hooks/webapp-router/useSquidRouter.ts +0 -42
  273. package/src/provider/index.tsx +0 -105
  274. package/src/react-app-env.d.ts +0 -2
  275. package/src/services/external/analyticsService.ts +0 -46
  276. package/src/services/external/coingeckoService.ts +0 -35
  277. package/src/services/external/rpcService.ts +0 -196
  278. package/src/services/external/secretService.ts +0 -178
  279. package/src/services/internal/apiService.ts +0 -6
  280. package/src/services/internal/assetsService.ts +0 -84
  281. package/src/services/internal/configService.ts +0 -261
  282. package/src/services/internal/eventService.ts +0 -93
  283. package/src/services/internal/priceService.ts +0 -10
  284. package/src/services/internal/transactionService.ts +0 -255
  285. package/src/services/internal/transactionStatusService.ts +0 -293
  286. package/src/services/internal/walletService.ts +0 -158
  287. package/src/tests/assetsService.test.ts +0 -176
  288. package/src/tests/configService.test.ts +0 -486
  289. package/src/tests/fetchSquidData.ts +0 -43
  290. package/src/tests/walletService.test.ts +0 -178
  291. package/tsconfig.cjs.json +0 -8
  292. package/tsconfig.json +0 -31
  293. /package/{src → dist}/assets/images/icons/wallets/binance.svg +0 -0
  294. /package/{src → dist}/assets/images/icons/wallets/bitget.svg +0 -0
  295. /package/{src → dist}/assets/images/icons/wallets/bitkeep.svg +0 -0
  296. /package/{src → dist}/assets/images/icons/wallets/blockchaindotcom.svg +0 -0
  297. /package/{src → dist}/assets/images/icons/wallets/brave.svg +0 -0
  298. /package/{src → dist}/assets/images/icons/wallets/c98.svg +0 -0
  299. /package/{src → dist}/assets/images/icons/wallets/coinbase.svg +0 -0
  300. /package/{src → dist}/assets/images/icons/wallets/cosmostation.svg +0 -0
  301. /package/{src → dist}/assets/images/icons/wallets/defiConnect.svg +0 -0
  302. /package/{src → dist}/assets/images/icons/wallets/exodus.svg +0 -0
  303. /package/{src → dist}/assets/images/icons/wallets/fetchai.svg +0 -0
  304. /package/{src → dist}/assets/images/icons/wallets/keplr.svg +0 -0
  305. /package/{src → dist}/assets/images/icons/wallets/leap.svg +0 -0
  306. /package/{src → dist}/assets/images/icons/wallets/metamask.svg +0 -0
  307. /package/{src → dist}/assets/images/icons/wallets/okx.svg +0 -0
  308. /package/{src → dist}/assets/images/icons/wallets/rabby.svg +0 -0
  309. /package/{src → dist}/assets/images/icons/wallets/trustwallet.svg +0 -0
  310. /package/{src → dist}/assets/images/icons/wallets/walletConnect.svg +0 -0
  311. /package/{src → dist}/assets/images/icons/wallets/wallet_icon.svg +0 -0
  312. /package/{src → dist}/assets/images/icons/wallets/xdefi.svg +0 -0
  313. /package/{src → dist}/assets/images/icons/wallets/zerion.svg +0 -0
  314. /package/{src → dist}/contracts/typechain/factories/ERC20__factory.d.ts +0 -0
  315. /package/{src/core/index.ts → dist/core/index.d.ts} +0 -0
  316. /package/{src/services/index.ts → dist/services/index.d.ts} +0 -0
  317. /package/{src/tests/sample.json → dist/tests/jest-svg-transform.d.ts} +0 -0
@@ -0,0 +1,274 @@
1
+ import { gasRefundMultiplier } from "./../../core/constants";
2
+ import { formatUnitsRounded } from "./../../core/numbers";
3
+ import { useSquidStore } from "./../../hooks/store/useSquidStore";
4
+ import { useNativeTokenBalanceFromChain } from "./../../hooks/tokens/useBalance";
5
+ import { useSingleTokenPrice } from "./../../hooks/tokens/useSingleTokenPrice";
6
+ import { useSquidTokens } from "./../../hooks/tokens/useSquidTokens";
7
+ import { ChainType } from "@0xsquid/squid-types";
8
+ import { BigNumber, constants } from "ethers";
9
+ import { formatUnits } from "ethers/lib/utils";
10
+ import { useMemo } from "react";
11
+ import { useSquidChains } from "../chains/useSquidChains";
12
+ import { useMultiChainBalance } from "../tokens/useMultiChainBalance";
13
+ export const useEstimate = ({ squidRoute, }) => {
14
+ const { config } = useSquidStore();
15
+ const { balance: nativeTokenBalanceFromChain } = useNativeTokenBalanceFromChain();
16
+ const { tokens } = useSquidTokens();
17
+ const { chains } = useSquidChains();
18
+ const [fromChain, toChain] = useMemo(() => {
19
+ return [
20
+ chains.find((c) => c.chainId === squidRoute.data?.params.fromChain),
21
+ chains.find((c) => c.chainId === squidRoute.data?.params.toChain),
22
+ ];
23
+ }, [
24
+ chains,
25
+ squidRoute.data?.params.fromChain,
26
+ squidRoute.data?.params.toChain,
27
+ ]);
28
+ const fromToken = useMemo(() => tokens.find((t) => t.address === squidRoute.data?.params.fromToken), [tokens, squidRoute.data?.params.fromToken]);
29
+ const balanceFormatted = useMultiChainBalance({
30
+ chain: fromChain,
31
+ token: fromToken,
32
+ userAddress: squidRoute.data?.params.fromAddress ?? "",
33
+ enabled: !!squidRoute.data,
34
+ }).balance ?? "0";
35
+ const fromAmount = useMemo(() => squidRoute.data?.estimate?.fromAmount ?? undefined, [squidRoute.data?.estimate?.fromAmount]);
36
+ const fromAmountFormatted = useMemo(() => (fromAmount ? formatUnits(fromAmount, fromToken?.decimals) : ""), [fromAmount, fromToken?.decimals]);
37
+ const sourceChainNativeToken = useMemo(() => {
38
+ return tokens.find((t) => t.symbol === fromChain?.nativeCurrency.symbol &&
39
+ t.chainId == fromChain?.chainId);
40
+ }, [tokens, fromChain]);
41
+ const destChainNativeToken = useMemo(() => {
42
+ return tokens.find((t) => t.symbol === toChain?.nativeCurrency.symbol &&
43
+ t.chainId == toChain?.chainId);
44
+ }, [tokens, toChain]);
45
+ const toAmountUSD = useMemo(() => squidRoute.data?.estimate?.toAmountUSD ?? undefined, [squidRoute.data?.estimate?.toAmountUSD]);
46
+ const toAmountUSDFloat = useMemo(() => (toAmountUSD ? parseFloat(toAmountUSD.replace(/,/g, "")) : 0), [toAmountUSD]);
47
+ const exchangeRate = useMemo(() => squidRoute.data?.estimate.exchangeRate ?? "0", [squidRoute.data?.estimate.exchangeRate]);
48
+ const toAmountMin = useMemo(() => {
49
+ return formatUnits(squidRoute.data?.estimate.toAmountMin ?? "0", squidRoute.data?.estimate.toToken.decimals);
50
+ }, [
51
+ squidRoute.data?.estimate.toAmountMin,
52
+ squidRoute.data?.estimate.toToken.decimals,
53
+ ]);
54
+ const toAmount = useMemo(() => {
55
+ const formattedAmount = formatUnitsRounded(squidRoute.data?.estimate.toAmount ?? "0", squidRoute.data?.estimate.toToken.decimals, 14);
56
+ return formattedAmount === "0.0" ? "0" : formattedAmount;
57
+ }, [
58
+ squidRoute.data?.estimate.toAmount,
59
+ squidRoute.data?.estimate.toToken.decimals,
60
+ ]);
61
+ /**
62
+ * At the moment we're only taking the first item
63
+ * of fees array, but keeping the possibility to display multiple fees
64
+ */
65
+ const crossChainGasFee = useMemo(() => {
66
+ const estimate = squidRoute.data?.estimate;
67
+ return estimate?.feeCosts.length > 0 ? estimate?.feeCosts[0] : undefined;
68
+ }, [squidRoute.data?.estimate]);
69
+ const allFeeCosts = useMemo(() => {
70
+ const estimate = squidRoute.data?.estimate;
71
+ return estimate?.feeCosts ?? [];
72
+ }, [squidRoute.data?.estimate]);
73
+ const allGasCosts = useMemo(() => {
74
+ const estimate = squidRoute.data?.estimate;
75
+ return estimate?.gasCosts ?? [];
76
+ }, [squidRoute.data?.estimate]);
77
+ const firstGasCost = useMemo(() => allGasCosts.length > 0 ? allGasCosts[0] : undefined, [allGasCosts]);
78
+ const firstFeeCost = useMemo(() => allFeeCosts.length > 0 ? allFeeCosts[0] : undefined, [allFeeCosts]);
79
+ const integratorFeeCost = useMemo(() => allFeeCosts.length > 0 && config.collectFees
80
+ ? // TODO: This is a hack to get the integrator fee, not mapped in squid types yet
81
+ allFeeCosts.find((f) => f.name === "Integrator Fee")
82
+ : undefined, [allFeeCosts, config]);
83
+ const { getUSDValue } = useSingleTokenPrice(firstFeeCost?.token);
84
+ const expressFeeCost = useMemo(() => allFeeCosts.length > 0
85
+ ? allFeeCosts.find((f) => f.name === "Express Fee")
86
+ : undefined, [allFeeCosts]);
87
+ const expectedGasRefundCost = useMemo(() => BigNumber.from(firstFeeCost?.amount ?? "0")
88
+ .mul(
89
+ // When source is Cosmos we don't refund any gas
90
+ fromChain?.chainType === ChainType.COSMOS ? 0 : gasRefundMultiplier)
91
+ .div(100), [firstFeeCost?.amount]);
92
+ const sameTokenBetweenFees = useMemo(() => firstFeeCost?.token.address === firstGasCost?.token.address &&
93
+ firstFeeCost?.token.chainId === firstGasCost?.token.chainId, [
94
+ firstFeeCost?.token.address,
95
+ firstFeeCost?.token.chainId,
96
+ firstGasCost?.token.address,
97
+ firstGasCost?.token.chainId,
98
+ ]);
99
+ // From token is the same as the native chain token
100
+ // TODO: This only works for EVM chains
101
+ const isFromTokenNative = useMemo(() => {
102
+ if (fromToken === undefined || fromChain?.chainId === undefined) {
103
+ return false;
104
+ }
105
+ return fromToken.symbol === fromChain.nativeCurrency.symbol;
106
+ }, [fromToken, fromChain]);
107
+ const totalNativeFees = useMemo(() => {
108
+ const expressBn = BigNumber.from(expressFeeCost?.amount ?? constants.Zero);
109
+ if (sameTokenBetweenFees) {
110
+ return BigNumber.from(firstFeeCost?.amount ?? constants.Zero)
111
+ .add(BigNumber.from(firstGasCost?.amount ?? constants.Zero))
112
+ .add(expressBn);
113
+ }
114
+ return BigNumber.from(firstGasCost?.amount ?? constants.Zero).add(expressBn);
115
+ }, [
116
+ firstFeeCost?.amount,
117
+ firstGasCost?.amount,
118
+ sameTokenBetweenFees,
119
+ expressFeeCost?.amount,
120
+ ]);
121
+ const totalFeesInNativeTokenPlusRatio = useMemo(() => {
122
+ return totalNativeFees.mul(105).div(100);
123
+ }, [totalNativeFees]);
124
+ const totalWithRefundEstimate = useMemo(() => {
125
+ const firstFee = {
126
+ BN: BigNumber.from(firstFeeCost?.amount ?? "0"),
127
+ token: firstFeeCost?.token,
128
+ };
129
+ const expressFee = {
130
+ BN: BigNumber.from(expressFeeCost?.amount ?? "0"),
131
+ token: expressFeeCost?.token,
132
+ };
133
+ // Big number amount
134
+ const totalBnbAmount = firstFee.BN.add(expressFee.BN).sub(expectedGasRefundCost);
135
+ const totalAmount = formatUnits(totalBnbAmount, firstFee.token?.decimals ?? 18);
136
+ // USD values
137
+ const formattedRefundCost = formatUnits(expectedGasRefundCost, firstFeeCost?.token.decimals);
138
+ const formattedRefundCostUSD = getUSDValue(formattedRefundCost);
139
+ const totalAmountUSD = +(firstFeeCost?.amountUsd ?? 0) +
140
+ +(expressFeeCost?.amountUsd ?? 0) -
141
+ +(formattedRefundCostUSD ?? 0);
142
+ return {
143
+ totalAmount,
144
+ totalAmountUSD,
145
+ feeToken: firstFeeCost?.token,
146
+ };
147
+ }, [
148
+ expectedGasRefundCost,
149
+ expressFeeCost?.amount,
150
+ expressFeeCost?.amountUsd,
151
+ expressFeeCost?.token,
152
+ firstFeeCost?.amount,
153
+ firstFeeCost?.amountUsd,
154
+ firstFeeCost?.token,
155
+ getUSDValue,
156
+ ]);
157
+ /**
158
+ * Two cases:
159
+ * 1. If the source token is the same as the native token, check if the balance of native token is less than the (source amount) + (native gas)
160
+ * 2. If the source token is different from the native token, check if the balance of native token is less than (native gas)
161
+ */
162
+ const fromBalanceEnoughToSwap = useMemo(() => {
163
+ if (squidRoute.isLoading)
164
+ return true;
165
+ const fromAmountWei = BigNumber.from(fromAmount ?? constants.Zero);
166
+ const fromBalance = nativeTokenBalanceFromChain.data ?? constants.Zero;
167
+ if (isFromTokenNative) {
168
+ const fromPlusGas = fromAmountWei.add(totalFeesInNativeTokenPlusRatio);
169
+ if (fromPlusGas.lte(fromBalance)) {
170
+ return true;
171
+ }
172
+ }
173
+ else if (totalFeesInNativeTokenPlusRatio.lte(fromBalance)) {
174
+ return true;
175
+ }
176
+ return false;
177
+ }, [
178
+ nativeTokenBalanceFromChain.data,
179
+ fromAmount,
180
+ isFromTokenNative,
181
+ squidRoute.isLoading,
182
+ totalFeesInNativeTokenPlusRatio,
183
+ ]);
184
+ /**
185
+ * In the case where the source token is the same as the native token,
186
+ * we need to advise the user to change the source amount to be less than the balance of native token minus the gas cost
187
+ */
188
+ const minAmountValueWarnMsg = useMemo(() => {
189
+ if (!isFromTokenNative) {
190
+ return undefined;
191
+ }
192
+ const fromBalance = nativeTokenBalanceFromChain.data ?? constants.Zero;
193
+ const minAmount = fromBalance.sub(totalFeesInNativeTokenPlusRatio);
194
+ if (minAmount.gt(constants.Zero)) {
195
+ const parsedMinAmount = formatUnits(minAmount, sourceChainNativeToken?.decimals ?? 18);
196
+ return parsedMinAmount;
197
+ }
198
+ return "0";
199
+ }, [
200
+ nativeTokenBalanceFromChain.data,
201
+ isFromTokenNative,
202
+ sourceChainNativeToken?.decimals,
203
+ totalFeesInNativeTokenPlusRatio,
204
+ ]);
205
+ const proposedGasDestinationAmount = useMemo(() => {
206
+ // Get native token of chain
207
+ const nativeToken = toChain?.nativeCurrency.symbol;
208
+ let gasDestinationAmount = 0;
209
+ switch (nativeToken) {
210
+ case "GLMR":
211
+ gasDestinationAmount = 5.289;
212
+ break;
213
+ case "ETH":
214
+ gasDestinationAmount = 0.0009;
215
+ break;
216
+ case "AVAX":
217
+ gasDestinationAmount = 0.115;
218
+ break;
219
+ case "BNB":
220
+ gasDestinationAmount = 0.00425;
221
+ break;
222
+ case "FTM":
223
+ gasDestinationAmount = 4.45;
224
+ break;
225
+ case "CELO":
226
+ gasDestinationAmount = 3.052;
227
+ break;
228
+ case "KAVA":
229
+ gasDestinationAmount = 2.339;
230
+ break;
231
+ case "MATIC":
232
+ gasDestinationAmount = 1.795;
233
+ break;
234
+ default:
235
+ gasDestinationAmount = 0;
236
+ break;
237
+ }
238
+ return { value: gasDestinationAmount, currency: nativeToken };
239
+ }, [toChain?.nativeCurrency.symbol]);
240
+ const enoughBalanceToSwap = useMemo(() => +balanceFormatted >= 0 && +balanceFormatted > +fromAmountFormatted, [balanceFormatted, fromAmountFormatted]);
241
+ return {
242
+ allFeeCosts,
243
+ allGasCosts,
244
+ crossChainGasFee,
245
+ exchangeRate,
246
+ toAmountMin,
247
+ toAmount,
248
+ fromToken,
249
+ toAmountUSD,
250
+ toAmountUSDFloat,
251
+ isFetching: squidRoute.isLoading,
252
+ squidRouteError: squidRoute.error,
253
+ fromAmount,
254
+ fromAmountFormatted,
255
+ estimatedRouteDuration: squidRoute.data?.estimate?.estimatedRouteDuration,
256
+ minAmountValueWarnMsg,
257
+ fromBalanceEnoughToSwap,
258
+ isFromTokenNative,
259
+ firstFeeCost,
260
+ firstGasCost,
261
+ sameTokenBetweenFees,
262
+ totalFeesInNativeTokenPlusRatio,
263
+ totalNativeFees,
264
+ sourceChainNativeToken,
265
+ expressFeeCost,
266
+ proposedGasDestinationAmount,
267
+ expectedGasRefundCost,
268
+ totalWithRefundEstimate,
269
+ destChainNativeToken,
270
+ integratorFeeCost,
271
+ enoughBalanceToSwap,
272
+ };
273
+ };
274
+ //# sourceMappingURL=useEstimate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useEstimate.js","sourceRoot":"","sources":["../../../src/hooks/transaction/useEstimate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { useGetRoute } from "@/hooks/transaction/useGetRoute";
2
+ export declare const useEstimatePriceImpact: ({ squidRoute, }: {
3
+ squidRoute: ReturnType<typeof useGetRoute>;
4
+ }) => {
5
+ priceImpact: string | undefined;
6
+ priceImpactStatus: string | undefined;
7
+ };
@@ -0,0 +1,26 @@
1
+ import { useSquidStore } from "./../../hooks/store/useSquidStore";
2
+ import { useMemo } from "react";
3
+ export const useEstimatePriceImpact = ({ squidRoute, }) => {
4
+ const { config } = useSquidStore();
5
+ const priceImpact = useMemo(() => squidRoute.data?.estimate?.aggregatePriceImpact ?? undefined, [squidRoute.data?.estimate]);
6
+ const priceImpactStatus = useMemo(() => {
7
+ if (config.priceImpactWarnings !== undefined && priceImpact !== undefined) {
8
+ if (+priceImpact >= config.priceImpactWarnings.warning &&
9
+ +priceImpact < config.priceImpactWarnings.critical) {
10
+ return "warning";
11
+ }
12
+ if (+priceImpact >= config.priceImpactWarnings.critical) {
13
+ return "critical";
14
+ }
15
+ if (+priceImpact < config.priceImpactWarnings.warning) {
16
+ return "normal";
17
+ }
18
+ }
19
+ return undefined;
20
+ }, [config.priceImpactWarnings, priceImpact]);
21
+ return {
22
+ priceImpact,
23
+ priceImpactStatus,
24
+ };
25
+ };
26
+ //# sourceMappingURL=useEstimatePriceImpact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useEstimatePriceImpact.js","sourceRoot":"","sources":["../../../src/hooks/transaction/useEstimatePriceImpact.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,EACrC,UAAU,GAGX,EAAE,EAAE;IACH,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,CAAC;IAEnC,MAAM,WAAW,GAAG,OAAO,CACzB,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,oBAAoB,IAAI,SAAS,EAClE,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAC5B,CAAC;IAEF,MAAM,iBAAiB,GAAG,OAAO,CAAC,GAAG,EAAE;QACrC,IAAI,MAAM,CAAC,mBAAmB,KAAK,SAAS,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC1E,IACE,CAAC,WAAW,IAAI,MAAM,CAAC,mBAAmB,CAAC,OAAO;gBAClD,CAAC,WAAW,GAAG,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAClD,CAAC;gBACD,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,IAAI,CAAC,WAAW,IAAI,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC;gBACxD,OAAO,UAAU,CAAC;YACpB,CAAC;YACD,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC;gBACtD,OAAO,QAAQ,CAAC;YAClB,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC,EAAE,CAAC,MAAM,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAAC,CAAC;IAE9C,OAAO;QACL,WAAW;QACX,iBAAiB;KAClB,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { TransactionReceipt } from "@ethersproject/abstract-provider";
2
+ import type { TransactionParams } from "@/core/types/transaction";
3
+ import { useGetRoute } from "@/hooks/transaction/useGetRoute";
4
+ declare enum ExecutionState {
5
+ NOT_ENOUGH_BALANCE = "NOT_ENOUGH_BALANCE",
6
+ NOT_CONNECTED = "NOT_CONNECTED",
7
+ READY = "READY"
8
+ }
9
+ export declare const useExecuteTransaction: (route: ReturnType<typeof useGetRoute>) => {
10
+ swapQuery: import("@tanstack/react-query").UseMutationResult<boolean | TransactionReceipt, any, void, unknown>;
11
+ currentTransaction: TransactionParams | undefined;
12
+ fromToken: import("@0xsquid/squid-types/dist/tokens").Token | undefined;
13
+ toToken: import("@0xsquid/squid-types/dist/tokens").Token | undefined;
14
+ fromPrice: string | undefined;
15
+ toPrice: number | undefined;
16
+ toChain: import("@0xsquid/squid-types/dist/chains").ChainData | undefined;
17
+ fromChain: import("@0xsquid/squid-types/dist/chains").ChainData | undefined;
18
+ executionState: ExecutionState;
19
+ };
20
+ export {};
@@ -0,0 +1,310 @@
1
+ // import type { TransactionResponse } from "@0xsquid/sdk/dist/types/ethers";
2
+ import { useCosmosContext } from "./../../core/providers/CosmosProvider";
3
+ import { keys } from "./../../core/queries/queries-keys";
4
+ import { TransactionErrorType } from "./../../core/types/error";
5
+ import { ChainType } from "@0xsquid/sdk/dist/types";
6
+ import { SigningCosmWasmClient } from "@cosmjs/cosmwasm-stargate";
7
+ import { useMutation, useQueryClient } from "@tanstack/react-query";
8
+ import { TxRaw } from "cosmjs-types/cosmos/tx/v1beta1/tx";
9
+ import { Logger } from "ethers/lib/utils.js";
10
+ import { useCallback, useMemo } from "react";
11
+ import { useAccount, useSigner } from "wagmi";
12
+ import { TransactionStatus } from "./../../core/types/transaction";
13
+ import { getWorkingCosmosRpcUrl } from "./../../services/external/rpcService";
14
+ import { getTransactionError } from "./../../services/internal/errorService";
15
+ import { getSourceExplorerTxUrl, replaceTransactionAtNonce, updateTransactionHistoryStatus, } from "./../../services/internal/transactionService";
16
+ import { useSquidChains } from "./../../hooks//chains/useSquidChains";
17
+ import { usePersistStore, useSquidStore } from "./../../hooks/store/useSquidStore";
18
+ import { useSwap } from "./../../hooks/swap/useSwap";
19
+ import { useEstimate } from "./../../hooks/transaction/useEstimate";
20
+ import { useGnosisContext } from "./../../hooks/wallet/useGnosisContext";
21
+ import { useMultiChainWallet } from "./../../hooks/wallet/useMultiChainWallet";
22
+ import { WidgetEvents } from "./../../services/internal/eventService";
23
+ var ExecutionState;
24
+ (function (ExecutionState) {
25
+ ExecutionState["NOT_ENOUGH_BALANCE"] = "NOT_ENOUGH_BALANCE";
26
+ ExecutionState["NOT_CONNECTED"] = "NOT_CONNECTED";
27
+ ExecutionState["READY"] = "READY";
28
+ })(ExecutionState || (ExecutionState = {}));
29
+ export const useExecuteTransaction = (route) => {
30
+ const signer = useSigner();
31
+ const { cosmosSigner } = useCosmosContext();
32
+ const { chains } = useSquidChains();
33
+ const queryClient = useQueryClient();
34
+ const { fromPrice, toPrice, squid, currentTransaction, config } = useSquidStore();
35
+ const { enoughBalanceToSwap } = useEstimate({
36
+ squidRoute: route,
37
+ });
38
+ const { connector: activeConnector } = useAccount();
39
+ const { fromChain, toChain, fromToken, toToken } = useSwap();
40
+ const { getGnosisTransactionHash } = useGnosisContext();
41
+ const { connectedAddress: sourceUserAddress } = useMultiChainWallet(fromChain);
42
+ const isSameChainSwap = useMemo(() => fromChain?.chainId === toChain?.chainId, [fromChain?.chainId, toChain?.chainId]);
43
+ /**
44
+ * States to see if the swap execution is possible or not based on swap & user params
45
+ * And if not possible, gives the reason
46
+ * TODO: The NOT_ENOUGH_BALANCE state could be fetch independently from the route response, only based on user fromAmount
47
+ */
48
+ const executionState = useMemo(() => {
49
+ if (!enoughBalanceToSwap) {
50
+ return ExecutionState.NOT_ENOUGH_BALANCE;
51
+ }
52
+ // TODO:; Add more states here
53
+ return ExecutionState.READY;
54
+ }, [enoughBalanceToSwap]);
55
+ /**
56
+ * This method is used to persist the transaction in local storage
57
+ * This way we can access user's transaction history
58
+ * TODO: This part will be fetched from the backend, using user address in the future
59
+ * @param txToPersist
60
+ * @param route
61
+ */
62
+ const persistTransaction = async (txToPersist, route) => {
63
+ // Persisting the transaction in local storage
64
+ if (route) {
65
+ const previousHistoryList = usePersistStore.getState().transactionsHistory ?? [];
66
+ const newHistoryElement = {
67
+ ...txToPersist,
68
+ params: route.params,
69
+ estimate: route.estimate,
70
+ };
71
+ usePersistStore.setState({
72
+ transactionsHistory: [...previousHistoryList, newHistoryElement],
73
+ });
74
+ }
75
+ };
76
+ /**
77
+ * Set the transaction state in the store
78
+ * This is useful to access the latest transaction from any hook
79
+ */
80
+ const setTransactionState = useCallback(({ route, txHash, nonce, status, sourceStatus, userAddress, axelarUrl, }) => {
81
+ if (route && route.transactionRequest) {
82
+ const { routeType } = route.transactionRequest;
83
+ const tx = {
84
+ fromChain,
85
+ toChain,
86
+ routeType,
87
+ nonce,
88
+ transactionId: txHash,
89
+ status,
90
+ sourceStatus,
91
+ timestamp: Date.now(),
92
+ fromAddress: userAddress,
93
+ sourceTxExplorerUrl: getSourceExplorerTxUrl(fromChain, txHash),
94
+ sourceExplorerImgUrl: fromChain?.chainIconURI,
95
+ axelarUrl,
96
+ };
97
+ useSquidStore.setState({
98
+ currentTransaction: tx,
99
+ });
100
+ return tx;
101
+ }
102
+ return undefined;
103
+ }, [fromChain, toChain]);
104
+ const swapQueryCosmos = useMutation(async (route) => {
105
+ const chainData = chains.find((c) => c.chainId === route?.params.fromChain);
106
+ if (cosmosSigner && chainData) {
107
+ try {
108
+ const rpc = await getWorkingCosmosRpcUrl(chainData);
109
+ const signingClient = await SigningCosmWasmClient.connectWithSigner(rpc, cosmosSigner);
110
+ const signerAddress = (await cosmosSigner.getAccounts())[0].address;
111
+ if (signerAddress && signingClient && route) {
112
+ const tx = (await squid?.executeRoute({
113
+ signer: signingClient,
114
+ signerAddress,
115
+ route,
116
+ executionSettings: {
117
+ infiniteApproval: config.infiniteApproval,
118
+ },
119
+ }));
120
+ // set the tx state to loading, as soon as user signed the tx
121
+ setTransactionState({
122
+ txHash: "", // We don't have the hash yet
123
+ route,
124
+ status: TransactionStatus.ONGOING,
125
+ sourceStatus: TransactionStatus.ONGOING,
126
+ });
127
+ // broadcast the signed tx to get hash and listen to events
128
+ const response = await signingClient.broadcastTx(TxRaw.encode(tx).finish());
129
+ const hash = response.transactionHash;
130
+ // Dispatch event so it can be listened from outside the widget
131
+ WidgetEvents.getInstance().dispatchSwapExecuteCall(route, hash);
132
+ const txParams = setTransactionState({
133
+ route,
134
+ txHash: hash,
135
+ userAddress: sourceUserAddress,
136
+ status: TransactionStatus.ONGOING,
137
+ sourceStatus: TransactionStatus.ONGOING,
138
+ axelarUrl: undefined,
139
+ });
140
+ if (txParams) {
141
+ persistTransaction(txParams);
142
+ }
143
+ return response.code === 0;
144
+ }
145
+ }
146
+ catch (error) {
147
+ console.log(error);
148
+ const castedError = error ?? {};
149
+ if (castedError.message?.includes("Request rejected")) {
150
+ throw new Error(castedError.message);
151
+ }
152
+ }
153
+ }
154
+ throw new Error("Need all parameters");
155
+ });
156
+ // If the transaction is replaced, we need to update the transaction hash
157
+ // Transaction replaced can mean that the user has speed up the transaction for example
158
+ // Could also be cancelled
159
+ const handleTransactionReplacementError = useCallback(async ({ error, route, status, sourceStatus, userAddress, axelarUrl, }) => {
160
+ if (route && error.code === Logger.errors.TRANSACTION_REPLACED) {
161
+ const txReplacementError = error;
162
+ const { hash: newHash, nonce: newNonce } = txReplacementError.replacement;
163
+ if (route.transactionRequest) {
164
+ const txParams = setTransactionState({
165
+ route,
166
+ txHash: newHash,
167
+ nonce: newNonce,
168
+ userAddress: sourceUserAddress,
169
+ status,
170
+ sourceStatus,
171
+ axelarUrl: undefined,
172
+ });
173
+ if (txParams) {
174
+ const newHistoryElement = {
175
+ ...txParams,
176
+ params: route.params,
177
+ estimate: route.estimate,
178
+ };
179
+ // Need to store the new transaction hash on the previous transaction
180
+ usePersistStore.setState({
181
+ transactionsHistory: replaceTransactionAtNonce(newNonce, sourceUserAddress, usePersistStore.getState().transactionsHistory, newHistoryElement),
182
+ });
183
+ }
184
+ }
185
+ try {
186
+ const response = await txReplacementError.replacement.wait();
187
+ return response;
188
+ }
189
+ catch (replacementError) {
190
+ // Maybe the transaction was replaced again
191
+ // recursive call
192
+ return handleTransactionReplacementError({
193
+ error,
194
+ route,
195
+ status,
196
+ sourceStatus,
197
+ userAddress,
198
+ axelarUrl,
199
+ });
200
+ }
201
+ }
202
+ else {
203
+ throw error;
204
+ }
205
+ }, [setTransactionState, sourceUserAddress, squid?.axelarscanURL]);
206
+ const swapQueryEvm = useMutation(async (route) => {
207
+ if (route && !!squid && signer.isSuccess && signer.data) {
208
+ const txResponse = (await squid.executeRoute({
209
+ signer: signer.data,
210
+ route,
211
+ executionSettings: {
212
+ infiniteApproval: config.infiniteApproval,
213
+ },
214
+ }));
215
+ let hash = txResponse.hash;
216
+ if (activeConnector?.id === "safe") {
217
+ hash = await getGnosisTransactionHash(txResponse.hash);
218
+ }
219
+ // Dispatch event so it can be listened from outside the widget
220
+ WidgetEvents.getInstance().dispatchSwapExecuteCall(route, hash);
221
+ if (route.transactionRequest) {
222
+ const txParams = setTransactionState({
223
+ route,
224
+ txHash: hash,
225
+ nonce: txResponse.nonce,
226
+ userAddress: sourceUserAddress,
227
+ status: TransactionStatus.INITIAL_LOADING,
228
+ sourceStatus: TransactionStatus.ONGOING,
229
+ axelarUrl: undefined,
230
+ });
231
+ if (txParams) {
232
+ persistTransaction(txParams);
233
+ }
234
+ }
235
+ try {
236
+ const response = await txResponse.wait();
237
+ return response;
238
+ }
239
+ catch (error) {
240
+ return handleTransactionReplacementError({
241
+ error,
242
+ route,
243
+ status: TransactionStatus.INITIAL_LOADING,
244
+ sourceStatus: TransactionStatus.ONGOING,
245
+ userAddress: sourceUserAddress,
246
+ axelarUrl: undefined,
247
+ });
248
+ }
249
+ }
250
+ throw new Error("Need all parameters");
251
+ });
252
+ /**
253
+ * Execute cross chain swap with selected tokens
254
+ * getRoute should be called before this mutation
255
+ */
256
+ const swapQuery = useMutation(async () => {
257
+ const sourceChain = chains?.find((chain) => chain.chainId == route.data?.params?.fromChain);
258
+ if (sourceChain?.chainType === ChainType.COSMOS) {
259
+ return swapQueryCosmos.mutateAsync(route.data);
260
+ }
261
+ if (sourceChain?.chainType === ChainType.EVM) {
262
+ return swapQueryEvm.mutateAsync(route.data);
263
+ }
264
+ throw new Error("Invalid parameters or chain not found");
265
+ }, {
266
+ onError: (error) => {
267
+ const { currentTransaction: currentTx } = useSquidStore.getState();
268
+ const errorObject = getTransactionError(error);
269
+ useSquidStore.setState({
270
+ currentTransaction: {
271
+ ...currentTx,
272
+ status: TransactionStatus.ERROR,
273
+ sourceStatus: TransactionStatus.ERROR,
274
+ error: errorObject,
275
+ },
276
+ });
277
+ if (currentTx?.transactionId &&
278
+ errorObject?.type === TransactionErrorType.CALL_EXCEPTION) {
279
+ usePersistStore.setState({
280
+ transactionsHistory: updateTransactionHistoryStatus(currentTransaction?.transactionId, TransactionStatus.ERROR, usePersistStore.getState().transactionsHistory, undefined),
281
+ });
282
+ }
283
+ },
284
+ onSuccess: () => {
285
+ const { currentTransaction: currentTx } = useSquidStore.getState();
286
+ queryClient.invalidateQueries(keys({}).balances());
287
+ useSquidStore.setState({
288
+ currentTransaction: {
289
+ ...currentTx,
290
+ sourceStatus: TransactionStatus.SUCCESS,
291
+ status: isSameChainSwap
292
+ ? TransactionStatus.SUCCESS
293
+ : TransactionStatus.ONGOING,
294
+ },
295
+ });
296
+ },
297
+ });
298
+ return {
299
+ swapQuery,
300
+ currentTransaction,
301
+ fromToken,
302
+ toToken,
303
+ fromPrice,
304
+ toPrice,
305
+ toChain,
306
+ fromChain,
307
+ executionState,
308
+ };
309
+ };
310
+ //# sourceMappingURL=useExecuteTransaction.js.map