@0xsquid/react-hooks 6.7.0-rollup-beta.0 → 6.7.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 (258) hide show
  1. package/dist/core/abis/ics20.json +128 -0
  2. package/dist/core/connectors/bitcoin/errors/index.js +22 -0
  3. package/dist/core/connectors/bitcoin/errors/index.js.map +1 -0
  4. package/dist/core/connectors/bitcoin/helpers.js +86 -0
  5. package/dist/core/connectors/bitcoin/helpers.js.map +1 -0
  6. package/dist/core/connectors/bitcoin/index.js +2 -0
  7. package/dist/core/connectors/bitcoin/index.js.map +1 -0
  8. package/dist/core/connectors/bitcoin/wallets/index.js +4 -0
  9. package/dist/core/connectors/bitcoin/wallets/index.js.map +1 -0
  10. package/dist/core/connectors/bitcoin/wallets/keplr.js +28 -0
  11. package/dist/core/connectors/bitcoin/wallets/keplr.js.map +1 -0
  12. package/dist/core/connectors/bitcoin/wallets/phantom.js +56 -0
  13. package/dist/core/connectors/bitcoin/wallets/phantom.js.map +1 -0
  14. package/dist/core/connectors/bitcoin/wallets/unisat.js +28 -0
  15. package/dist/core/connectors/bitcoin/wallets/unisat.js.map +1 -0
  16. package/dist/core/constants.js +144 -0
  17. package/dist/core/constants.js.map +1 -0
  18. package/dist/core/externalLinks.js +21 -0
  19. package/dist/core/externalLinks.js.map +1 -0
  20. package/dist/core/index.js +4 -0
  21. package/dist/core/index.js.map +1 -0
  22. package/dist/core/multicall3.js +442 -0
  23. package/dist/core/multicall3.js.map +1 -0
  24. package/dist/core/providers/CosmosProvider.js +13 -0
  25. package/dist/core/providers/CosmosProvider.js.map +1 -0
  26. package/dist/core/providers/SolanaProvider.js +15 -0
  27. package/dist/core/providers/SolanaProvider.js.map +1 -0
  28. package/dist/core/providers/SuiProvider.js +15 -0
  29. package/dist/core/providers/SuiProvider.js.map +1 -0
  30. package/dist/core/queries/queries-keys.d.ts +2 -2
  31. package/dist/core/queries/queries-keys.js +206 -0
  32. package/dist/core/queries/queries-keys.js.map +1 -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/config.d.ts +2 -0
  36. package/dist/core/types/config.js +2 -0
  37. package/dist/core/types/config.js.map +1 -0
  38. package/dist/core/types/dex.js +33 -0
  39. package/dist/core/types/dex.js.map +1 -0
  40. package/dist/core/types/error.js +12 -0
  41. package/dist/core/types/error.js.map +1 -0
  42. package/dist/core/types/event.d.ts +5 -0
  43. package/dist/core/types/event.js +2 -0
  44. package/dist/core/types/event.js.map +1 -0
  45. package/dist/core/types/index.js +2 -0
  46. package/dist/core/types/index.js.map +1 -0
  47. package/dist/core/types/rpc.js +2 -0
  48. package/dist/core/types/rpc.js.map +1 -0
  49. package/dist/core/types/sui.js +2 -0
  50. package/dist/core/types/sui.js.map +1 -0
  51. package/dist/core/types/swap.js +2 -0
  52. package/dist/core/types/swap.js.map +1 -0
  53. package/dist/core/types/tokens.js +2 -0
  54. package/dist/core/types/tokens.js.map +1 -0
  55. package/dist/core/types/transaction.js +41 -0
  56. package/dist/core/types/transaction.js.map +1 -0
  57. package/dist/core/types/wallet.js +26 -0
  58. package/dist/core/types/wallet.js.map +1 -0
  59. package/dist/core/wagmiConfig.js +60 -0
  60. package/dist/core/wagmiConfig.js.map +1 -0
  61. package/dist/core/wallets.js +549 -0
  62. package/dist/core/wallets.js.map +1 -0
  63. package/dist/hooks/analytics/useTrackSearchEmpty.d.ts +12 -0
  64. package/dist/hooks/analytics/useTrackSearchEmpty.js +22 -0
  65. package/dist/hooks/analytics/useTrackSearchEmpty.js.map +1 -0
  66. package/dist/hooks/chains/useSquidChains.js +107 -0
  67. package/dist/hooks/chains/useSquidChains.js.map +1 -0
  68. package/dist/hooks/client/useClient.js +6 -0
  69. package/dist/hooks/client/useClient.js.map +1 -0
  70. package/dist/hooks/cosmos/useCosmos.js +172 -0
  71. package/dist/hooks/cosmos/useCosmos.js.map +1 -0
  72. package/dist/hooks/cosmos/useCosmosForChain.js +33 -0
  73. package/dist/hooks/cosmos/useCosmosForChain.js.map +1 -0
  74. package/dist/hooks/index.d.ts +5 -5
  75. package/dist/hooks/index.js +45 -0
  76. package/dist/hooks/index.js.map +1 -0
  77. package/dist/hooks/navigation/useKeyboardNavigation.js +67 -0
  78. package/dist/hooks/navigation/useKeyboardNavigation.js.map +1 -0
  79. package/dist/hooks/query/useSquidQueryClient.js +23 -0
  80. package/dist/hooks/query/useSquidQueryClient.js.map +1 -0
  81. package/dist/hooks/solana/useSolana.js +104 -0
  82. package/dist/hooks/solana/useSolana.js.map +1 -0
  83. package/dist/hooks/squid/useSquid.js +55 -0
  84. package/dist/hooks/squid/useSquid.js.map +1 -0
  85. package/dist/hooks/store/useAddressBookStore.js +26 -0
  86. package/dist/hooks/store/useAddressBookStore.js.map +1 -0
  87. package/dist/hooks/store/useAssetsColorsStore.js +7 -0
  88. package/dist/hooks/store/useAssetsColorsStore.js.map +1 -0
  89. package/dist/hooks/store/useDepositAddressStore.js +12 -0
  90. package/dist/hooks/store/useDepositAddressStore.js.map +1 -0
  91. package/dist/hooks/store/useFavoriteTokensStore.js +28 -0
  92. package/dist/hooks/store/useFavoriteTokensStore.js.map +1 -0
  93. package/dist/hooks/store/useHistoryStore.js +41 -0
  94. package/dist/hooks/store/useHistoryStore.js.map +1 -0
  95. package/dist/hooks/store/useSquidStore.js +56 -0
  96. package/dist/hooks/store/useSquidStore.js.map +1 -0
  97. package/dist/hooks/store/useWalletStore.js +42 -0
  98. package/dist/hooks/store/useWalletStore.js.map +1 -0
  99. package/dist/hooks/sui/useSui.js +28 -0
  100. package/dist/hooks/sui/useSui.js.map +1 -0
  101. package/dist/hooks/sui/useSuiClient.js +16 -0
  102. package/dist/hooks/sui/useSuiClient.js.map +1 -0
  103. package/dist/hooks/sui/useSuiWallets.js +42 -0
  104. package/dist/hooks/sui/useSuiWallets.js.map +1 -0
  105. package/dist/hooks/swap/useDepositAddress.js +63 -0
  106. package/dist/hooks/swap/useDepositAddress.js.map +1 -0
  107. package/dist/hooks/swap/useSwap.js +209 -0
  108. package/dist/hooks/swap/useSwap.js.map +1 -0
  109. package/dist/hooks/tokens/useAllConnectedWalletBalances.js +103 -0
  110. package/dist/hooks/tokens/useAllConnectedWalletBalances.js.map +1 -0
  111. package/dist/hooks/tokens/useAllTokensWithBalanceForChainType.js +119 -0
  112. package/dist/hooks/tokens/useAllTokensWithBalanceForChainType.js.map +1 -0
  113. package/dist/hooks/tokens/useBalance.js +136 -0
  114. package/dist/hooks/tokens/useBalance.js.map +1 -0
  115. package/dist/hooks/tokens/useMultiChainBalance.js +68 -0
  116. package/dist/hooks/tokens/useMultiChainBalance.js.map +1 -0
  117. package/dist/hooks/tokens/useMultipleTokenPrices.js +46 -0
  118. package/dist/hooks/tokens/useMultipleTokenPrices.js.map +1 -0
  119. package/dist/hooks/tokens/useNativeBalance.js +217 -0
  120. package/dist/hooks/tokens/useNativeBalance.js.map +1 -0
  121. package/dist/hooks/tokens/useNativeTokenForChain.js +28 -0
  122. package/dist/hooks/tokens/useNativeTokenForChain.js.map +1 -0
  123. package/dist/hooks/tokens/useSingleTokenPrice.js +38 -0
  124. package/dist/hooks/tokens/useSingleTokenPrice.js.map +1 -0
  125. package/dist/hooks/tokens/useSquidTokens.js +80 -0
  126. package/dist/hooks/tokens/useSquidTokens.js.map +1 -0
  127. package/dist/hooks/tokens/useTokenHistoricalData.js +23 -0
  128. package/dist/hooks/tokens/useTokenHistoricalData.js.map +1 -0
  129. package/dist/hooks/transaction/useAllTransactionsStatus.js +68 -0
  130. package/dist/hooks/transaction/useAllTransactionsStatus.js.map +1 -0
  131. package/dist/hooks/transaction/useApproval.js +223 -0
  132. package/dist/hooks/transaction/useApproval.js.map +1 -0
  133. package/dist/hooks/transaction/useErc20Allowance.js +43 -0
  134. package/dist/hooks/transaction/useErc20Allowance.js.map +1 -0
  135. package/dist/hooks/transaction/useEstimate.js +118 -0
  136. package/dist/hooks/transaction/useEstimate.js.map +1 -0
  137. package/dist/hooks/transaction/useEstimatePriceImpact.js +31 -0
  138. package/dist/hooks/transaction/useEstimatePriceImpact.js.map +1 -0
  139. package/dist/hooks/transaction/useExecuteTransaction.js +605 -0
  140. package/dist/hooks/transaction/useExecuteTransaction.js.map +1 -0
  141. package/dist/hooks/transaction/useGetRoute.d.ts +3 -0
  142. package/dist/hooks/transaction/useGetRoute.js +230 -0
  143. package/dist/hooks/transaction/useGetRoute.js.map +1 -0
  144. package/dist/hooks/transaction/useIcs20Allowance.js +40 -0
  145. package/dist/hooks/transaction/useIcs20Allowance.js.map +1 -0
  146. package/dist/hooks/transaction/useRouteWarnings.js +19 -0
  147. package/dist/hooks/transaction/useRouteWarnings.js.map +1 -0
  148. package/dist/hooks/transaction/useSingleTransaction.js +91 -0
  149. package/dist/hooks/transaction/useSingleTransaction.js.map +1 -0
  150. package/dist/hooks/user/useAvatar.js +34 -0
  151. package/dist/hooks/user/useAvatar.js.map +1 -0
  152. package/dist/hooks/user/useHistory.js +106 -0
  153. package/dist/hooks/user/useHistory.js.map +1 -0
  154. package/dist/hooks/user/useUserParams.js +33 -0
  155. package/dist/hooks/user/useUserParams.js.map +1 -0
  156. package/dist/hooks/wallet/useAddToken.js +49 -0
  157. package/dist/hooks/wallet/useAddToken.js.map +1 -0
  158. package/dist/hooks/wallet/useAutoConnect.js +74 -0
  159. package/dist/hooks/wallet/useAutoConnect.js.map +1 -0
  160. package/dist/hooks/wallet/useEns.js +69 -0
  161. package/dist/hooks/wallet/useEns.js.map +1 -0
  162. package/dist/hooks/wallet/useGnosisContext.js +78 -0
  163. package/dist/hooks/wallet/useGnosisContext.js.map +1 -0
  164. package/dist/hooks/wallet/useIntegratorContext.js +39 -0
  165. package/dist/hooks/wallet/useIntegratorContext.js.map +1 -0
  166. package/dist/hooks/wallet/useMultiChainWallet.js +175 -0
  167. package/dist/hooks/wallet/useMultiChainWallet.js.map +1 -0
  168. package/dist/hooks/wallet/useSigner.js +76 -0
  169. package/dist/hooks/wallet/useSigner.js.map +1 -0
  170. package/dist/hooks/wallet/useWallet.js +206 -0
  171. package/dist/hooks/wallet/useWallet.js.map +1 -0
  172. package/dist/hooks/wallet/useWallets.js +36 -0
  173. package/dist/hooks/wallet/useWallets.js.map +1 -0
  174. package/dist/index.js +6 -17096
  175. package/dist/index.js.map +1 -1
  176. package/dist/provider/index.js +113 -0
  177. package/dist/provider/index.js.map +1 -0
  178. package/dist/services/external/ens.js +66 -0
  179. package/dist/services/external/ens.js.map +1 -0
  180. package/dist/services/external/rpcService.js +421 -0
  181. package/dist/services/external/rpcService.js.map +1 -0
  182. package/dist/{secretService-SEqSyHG0.js → services/external/secretService.js} +8 -37
  183. package/dist/services/external/secretService.js.map +1 -0
  184. package/dist/services/external/suiRpcClient.js +80 -0
  185. package/dist/services/external/suiRpcClient.js.map +1 -0
  186. package/dist/services/external/tokenDataService.js +108 -0
  187. package/dist/services/external/tokenDataService.js.map +1 -0
  188. package/dist/services/index.js +16 -0
  189. package/dist/services/index.js.map +1 -0
  190. package/dist/services/internal/apiService.js +21 -0
  191. package/dist/services/internal/apiService.js.map +1 -0
  192. package/dist/services/internal/assetsService.js +586 -0
  193. package/dist/services/internal/assetsService.js.map +1 -0
  194. package/dist/services/internal/bitcoinService.js +51 -0
  195. package/dist/services/internal/bitcoinService.js.map +1 -0
  196. package/dist/services/internal/configService.js +218 -0
  197. package/dist/services/internal/configService.js.map +1 -0
  198. package/dist/services/internal/cosmosService.js +141 -0
  199. package/dist/services/internal/cosmosService.js.map +1 -0
  200. package/dist/services/internal/errorService.js +188 -0
  201. package/dist/services/internal/errorService.js.map +1 -0
  202. package/dist/services/internal/estimateService.js +221 -0
  203. package/dist/services/internal/estimateService.js.map +1 -0
  204. package/dist/services/internal/eventService.d.ts +5 -0
  205. package/dist/services/internal/eventService.js +163 -0
  206. package/dist/services/internal/eventService.js.map +1 -0
  207. package/dist/services/internal/evmService.js +42 -0
  208. package/dist/services/internal/evmService.js.map +1 -0
  209. package/dist/services/internal/numberService.js +171 -0
  210. package/dist/services/internal/numberService.js.map +1 -0
  211. package/dist/services/internal/priceService.js +53 -0
  212. package/dist/services/internal/priceService.js.map +1 -0
  213. package/dist/services/internal/searchService.js +98 -0
  214. package/dist/services/internal/searchService.js.map +1 -0
  215. package/dist/services/internal/solanaService.js +109 -0
  216. package/dist/services/internal/solanaService.js.map +1 -0
  217. package/dist/services/internal/suiService.js +119 -0
  218. package/dist/services/internal/suiService.js.map +1 -0
  219. package/dist/services/internal/transactionService.js +207 -0
  220. package/dist/services/internal/transactionService.js.map +1 -0
  221. package/dist/services/internal/transactionStatusService.js +315 -0
  222. package/dist/services/internal/transactionStatusService.js.map +1 -0
  223. package/dist/services/internal/walletService.js +464 -0
  224. package/dist/services/internal/walletService.js.map +1 -0
  225. package/dist/tests/apiService.test.js +40 -0
  226. package/dist/tests/apiService.test.js.map +1 -0
  227. package/dist/tests/assetsService.test.js +500 -0
  228. package/dist/tests/assetsService.test.js.map +1 -0
  229. package/dist/tests/configService.test.js +673 -0
  230. package/dist/tests/configService.test.js.map +1 -0
  231. package/dist/tests/estimateService.test.js +355 -0
  232. package/dist/tests/estimateService.test.js.map +1 -0
  233. package/dist/tests/fetchSquidData.js +36 -0
  234. package/dist/tests/fetchSquidData.js.map +1 -0
  235. package/dist/tests/jest-svg-transform.d.ts +0 -0
  236. package/dist/tests/jest-svg-transform.js +21 -0
  237. package/dist/tests/jest-svg-transform.js.map +1 -0
  238. package/dist/tests/numberService.test.js +135 -0
  239. package/dist/tests/numberService.test.js.map +1 -0
  240. package/dist/tests/priceService.test.js +38 -0
  241. package/dist/tests/priceService.test.js.map +1 -0
  242. package/dist/tests/sample.json +0 -0
  243. package/dist/tests/searchService.test.js +92 -0
  244. package/dist/tests/searchService.test.js.map +1 -0
  245. package/dist/tests/swapConfig.test.js +332 -0
  246. package/dist/tests/swapConfig.test.js.map +1 -0
  247. package/dist/tests/transactionService.test.js +53 -0
  248. package/dist/tests/transactionService.test.js.map +1 -0
  249. package/dist/tests/transactionStatusService.test.js +165 -0
  250. package/dist/tests/transactionStatusService.test.js.map +1 -0
  251. package/dist/tests/walletService.test.js +264 -0
  252. package/dist/tests/walletService.test.js.map +1 -0
  253. package/package.json +4 -18
  254. package/dist/index.esm.js +0 -16892
  255. package/dist/index.esm.js.map +0 -1
  256. package/dist/secretService-Cc7emxDy.js +0 -162
  257. package/dist/secretService-Cc7emxDy.js.map +0 -1
  258. package/dist/secretService-SEqSyHG0.js.map +0 -1
@@ -0,0 +1,230 @@
1
+ import { ChainType, } from "@0xsquid/squid-types";
2
+ import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
3
+ import { useCallback, useMemo, useRef } from "react";
4
+ import { CHAIN_IDS, chainTypeToZeroAddressMap } from "../../core/constants";
5
+ import { useCosmosContext } from "../../core/providers/CosmosProvider";
6
+ import { keys } from "../../core/queries/queries-keys";
7
+ import { evmosAddressToEvmAddress, isEvmosChain } from "../../services";
8
+ import { WidgetEvents, createQuoteRequestParamsHash, } from "../../services/internal/eventService";
9
+ import { parseToBigInt } from "../../services/internal/numberService";
10
+ import { useSquidChains } from "../chains/useSquidChains";
11
+ import { useConfigStore, useSquidStore, useSwapRoutePersistStore, } from "../store/useSquidStore";
12
+ import { useDepositAddress } from "../swap/useDepositAddress";
13
+ import { useSwap } from "../swap/useSwap";
14
+ import { useMultiChainWallet } from "../wallet/useMultiChainWallet";
15
+ export const useGetRoute = () => {
16
+ const { getCosmosAddressForChain, isConnected: isCosmosConnected } = useCosmosContext();
17
+ const config = useConfigStore((state) => state.config);
18
+ const squid = useSquidStore((state) => state.squid);
19
+ const { swapRoute } = useSwapRoutePersistStore();
20
+ const { findChain } = useSquidChains();
21
+ const queryClient = useQueryClient();
22
+ const previousParamsHashRef = useRef();
23
+ /**
24
+ * Dispatch event when requesting a quote for swap
25
+ */
26
+ const dispatchRequestQuoteEvent = useCallback((params) => {
27
+ const currentParamsHash = createQuoteRequestParamsHash(params);
28
+ // Only dispatch if any parameter has changed
29
+ if (previousParamsHashRef.current !== currentParamsHash) {
30
+ previousParamsHashRef.current = currentParamsHash;
31
+ WidgetEvents.getInstance().dispatchRequestQuote(params);
32
+ }
33
+ }, []);
34
+ /**
35
+ * Get fallback addresses for cosmos chains.
36
+ * First try to get the fallback address added manually by the user (if any).
37
+ * If not set, try to get the derived osmo address.
38
+ *
39
+ * This is needed by backend when a cosmos swap occurs between non coin118 chains
40
+ * The backend might need a coin118 address to send the funds to in case of failure for a swap happening between the two chains
41
+ */
42
+ const getCosmosFallbackAddresses = useCallback(async () => {
43
+ if (swapRoute?.fallbackAddress) {
44
+ return [
45
+ {
46
+ address: swapRoute?.fallbackAddress,
47
+ coinType: 118,
48
+ },
49
+ ];
50
+ }
51
+ // There's no fallback address manually added and the user is not connected
52
+ if (!isCosmosConnected) {
53
+ return undefined;
54
+ }
55
+ // the user is connected to cosmos, we can get the fallback address from the wallet
56
+ // We only need coin118, so taking osmosis hub address by default
57
+ const osmosisAddress = await getCosmosAddressForChain(CHAIN_IDS.OSMOSIS);
58
+ if (osmosisAddress) {
59
+ return [
60
+ {
61
+ address: osmosisAddress,
62
+ coinType: 118,
63
+ },
64
+ ];
65
+ }
66
+ }, [getCosmosAddressForChain, isCosmosConnected, swapRoute?.fallbackAddress]);
67
+ /**
68
+ * Fetching route data from the API
69
+ * These data will be used to trigger the transaction
70
+ * @returns {Route} Route data
71
+ */
72
+ return useMutation(async ({ fromChain, toChain, fromToken, toToken, sourceUserAddress, destinationAddress, fromPrice, bypassGuardrails, quoteOnly, fromChainType, postHook, preHook, }) => {
73
+ if (!fromChain || !toChain || !fromToken || !toToken || !fromPrice) {
74
+ return undefined;
75
+ }
76
+ // Dispatch requestQuote event
77
+ dispatchRequestQuoteEvent({
78
+ fromChain,
79
+ toChain,
80
+ fromToken: fromToken.address,
81
+ toToken: toToken.address,
82
+ fromAmount: fromPrice,
83
+ fromAddress: sourceUserAddress,
84
+ toAddress: destinationAddress,
85
+ });
86
+ const isEvmSwap = Number(fromChain) > 0 && Number(toChain) > 0;
87
+ const cosmosFallbackAddresses = quoteOnly || isEvmSwap ? undefined : await getCosmosFallbackAddresses();
88
+ const isSrcChainEvmos = isEvmosChain(findChain(fromChain));
89
+ const isDestChainEvmos = isEvmosChain(findChain(toChain));
90
+ // Evmos tokens require the original address to be used (erc20/0x123...abc)
91
+ // TODO: this will be fixed in the backend
92
+ const fromTokenAddress = isSrcChainEvmos
93
+ ? fromToken.originalAddress || fromToken.address
94
+ : fromToken.address;
95
+ const toTokenAddress = isDestChainEvmos
96
+ ? toToken.originalAddress || toToken.address
97
+ : toToken.address;
98
+ const fromAmount = parseToBigInt(fromPrice?.toString() ?? "0", fromToken?.decimals).toString();
99
+ const fromAddress = sourceUserAddress ??
100
+ chainTypeToZeroAddressMap[fromChainType ?? ChainType.EVM];
101
+ const params = {
102
+ fromChain,
103
+ fromToken: fromTokenAddress,
104
+ fromAddress,
105
+ fromAmount,
106
+ toChain,
107
+ toToken: toTokenAddress,
108
+ toAddress: destinationAddress ?? "",
109
+ quoteOnly,
110
+ slippage: config.slippage === 0 ? undefined : config.slippage,
111
+ bypassGuardrails,
112
+ preHook,
113
+ postHook,
114
+ };
115
+ // If the swap is involving cosmos chains, we need to add the fallback addresses (if any)
116
+ if (cosmosFallbackAddresses &&
117
+ cosmosFallbackAddresses.length > 0 &&
118
+ cosmosFallbackAddresses[0].address) {
119
+ params.fallbackAddresses = cosmosFallbackAddresses;
120
+ }
121
+ const { route } = await squid.getRoute({
122
+ ...params,
123
+ });
124
+ if (isSrcChainEvmos) {
125
+ // need to format evmos addresses in route.params
126
+ // to standard evm addresses for the Squid sdk to find tokens by address properly
127
+ // when approving or executing the route
128
+ route.params.fromToken = evmosAddressToEvmAddress(route.params.fromToken);
129
+ }
130
+ if (isDestChainEvmos) {
131
+ // need to format evmos addresses in route.params
132
+ // to standard evm addresses for the Squid sdk to find tokens by address properly
133
+ // when approving or executing the route
134
+ route.params.toToken = evmosAddressToEvmAddress(route.params.toToken);
135
+ }
136
+ // Cache the route data
137
+ // Useful when the getRoute mutation is called from another hook
138
+ queryClient.setQueryData(keys().transaction(fromChain, toChain, toToken.address, fromToken.address, fromPrice, config.slippage, config.enableGetGasOnDestination, sourceUserAddress, config.degenMode, destinationAddress, swapRoute?.fallbackAddress, quoteOnly, fromChainType, config.preHook, config.postHook), route);
139
+ return route;
140
+ });
141
+ };
142
+ // TODO: this is a bit dangerous to base the type on the useQuery function indexing
143
+ // as it could change in the future
144
+ // type UseQueryOptionsType = Parameters<typeof useQuery>[2];
145
+ export const useGetRouteWrapper = ({ enabled, cacheTime = 5 * 60 * 1000, // 5 minutes
146
+ staleTime = 60 * 1000, // 1 minute
147
+ refetchOnWindowFocus = (query) => Date.now() - query.state.dataUpdatedAt > 30000, // Update if older than 30 seconds, when window is focused
148
+ refetchIntervalInBackground = false, refetchInterval = 30000, quoteOnly = true, }) => {
149
+ const config = useConfigStore((state) => state.config);
150
+ const squid = useSquidStore((state) => state.squid);
151
+ const fallbackAddress = useSwapRoutePersistStore((store) => store.swapRoute?.fallbackAddress);
152
+ const depositRefundAddress = useSwapRoutePersistStore((store) => store.swapRoute?.depositRefundAddress);
153
+ const { isAvailableAsPaymentMethod, isEnabled: isDepositAddressEnabled } = useDepositAddress();
154
+ const getRouteMutation = useGetRoute();
155
+ const { fromChain, toChain, fromPrice, destinationAddress: { address: destinationAddress } = {}, fromToken, toToken, } = useSwap();
156
+ const { connectedAddress: { address: sourceConnectedAddress }, } = useMultiChainWallet(fromChain);
157
+ // When the payment method is deposit address, users can specify a refund address on the source chain
158
+ // Tokens will be sent to this address in case of swap failure
159
+ //
160
+ // If deposit address is not selected, we use the connected address as the source address instead
161
+ const sourceUserAddress = isDepositAddressEnabled && isAvailableAsPaymentMethod
162
+ ? depositRefundAddress ?? sourceConnectedAddress
163
+ : sourceConnectedAddress;
164
+ const squidRouteQueryKeys = useMemo(() => keys().transaction(fromChain?.chainId, toChain?.chainId, toToken?.address, fromToken?.address, fromPrice, config.slippage, config.enableGetGasOnDestination, sourceUserAddress, config.degenMode, destinationAddress, fallbackAddress, quoteOnly, fromChain?.chainType, config.preHook, config.postHook), [
165
+ fromChain?.chainId,
166
+ toChain?.chainId,
167
+ toToken?.address,
168
+ fromToken?.address,
169
+ fromPrice,
170
+ config.slippage,
171
+ config.enableGetGasOnDestination,
172
+ sourceUserAddress,
173
+ config.degenMode,
174
+ destinationAddress,
175
+ fallbackAddress,
176
+ quoteOnly,
177
+ fromChain?.chainType,
178
+ config.preHook,
179
+ config.postHook,
180
+ ]);
181
+ const queryEnabled = enabled != undefined
182
+ ? enabled
183
+ : squid !== undefined &&
184
+ fromPrice !== undefined &&
185
+ fromPrice !== "0" &&
186
+ toChain?.chainId !== undefined &&
187
+ toToken?.address !== undefined;
188
+ const queryClient = useQueryClient();
189
+ const cachedRouteData = queryClient.getQueryData(squidRouteQueryKeys);
190
+ /**
191
+ * Fetching route data from the API
192
+ * These data will be used to trigger the transaction
193
+ * @returns {Route} Route data
194
+ */
195
+ const squidRoute = useQuery(squidRouteQueryKeys, async () => {
196
+ const route = await getRouteMutation.mutateAsync({
197
+ fromChain: fromChain?.chainId,
198
+ toChain: toChain?.chainId,
199
+ fromToken,
200
+ toToken,
201
+ sourceUserAddress,
202
+ destinationAddress,
203
+ fromPrice,
204
+ bypassGuardrails: config.degenMode,
205
+ quoteOnly,
206
+ fromChainType: fromChain?.chainType,
207
+ postHook: config.postHook,
208
+ preHook: config.preHook,
209
+ });
210
+ return route;
211
+ }, {
212
+ enabled: queryEnabled,
213
+ cacheTime,
214
+ staleTime,
215
+ refetchOnWindowFocus,
216
+ refetchIntervalInBackground,
217
+ refetchInterval,
218
+ });
219
+ /**
220
+ * If last updated data is older than X seconds and the query is currently loading, show loading indicator
221
+ */
222
+ const showLoading = useMemo(() => squidRoute.isFetching || squidRoute.isRefetching, [squidRoute.isFetching, squidRoute.isRefetching]);
223
+ return {
224
+ squidRoute,
225
+ showLoading,
226
+ squidRouteError: squidRoute.error,
227
+ routeData: queryEnabled ? squidRoute.data : cachedRouteData,
228
+ };
229
+ };
230
+ //# sourceMappingURL=useGetRoute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useGetRoute.js","sourceRoot":"","sources":["../../../src/hooks/transaction/useGetRoute.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { useReadContract } from "wagmi";
2
+ import ics20Abi from "../../core/abis/ics20.json";
3
+ import { parseEvmAddress } from "../../services";
4
+ /**
5
+ * ICS20 is similar to ERC20 but the ABI is different
6
+ *
7
+ * https://docs.evmos.org/develop/smart-contracts/evm-extensions/ibc-transfer
8
+ * https://github.com/evmos/extensions/blob/main/precompiles/abi/ics20.json
9
+ */
10
+ export function useIcs20Allowance({ targetAddress, ownerAddress, amount = BigInt(0), chainId, enabled = true, }) {
11
+ const parsedTargetAddress = parseEvmAddress(targetAddress);
12
+ const parsedOwnerAddress = parseEvmAddress(ownerAddress);
13
+ const query = useReadContract({
14
+ abi: ics20Abi,
15
+ address: parsedTargetAddress,
16
+ functionName: "allowance",
17
+ chainId,
18
+ args: parsedOwnerAddress
19
+ ? [parsedOwnerAddress, parsedOwnerAddress]
20
+ : undefined,
21
+ query: {
22
+ enabled: enabled && Boolean(parsedTargetAddress && parsedOwnerAddress),
23
+ },
24
+ });
25
+ if (!parsedTargetAddress || !parsedOwnerAddress) {
26
+ return {
27
+ hasAllowance: false,
28
+ error: new Error("Invalid or missing address"),
29
+ };
30
+ }
31
+ const allowanceInWei = query.data?.[0]?.spendLimit?.[0].amount ??
32
+ BigInt(0);
33
+ const hasAllowance = allowanceInWei >= amount;
34
+ return {
35
+ query,
36
+ hasAllowance,
37
+ allowanceInWei,
38
+ };
39
+ }
40
+ //# sourceMappingURL=useIcs20Allowance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useIcs20Allowance.js","sourceRoot":"","sources":["../../../src/hooks/transaction/useIcs20Allowance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,QAAQ,MAAM,4BAA4B,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAuBjD;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAChC,aAAa,EACb,YAAY,EACZ,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,EAClB,OAAO,EACP,OAAO,GAAG,IAAI,GACO;IACrB,MAAM,mBAAmB,GAAG,eAAe,CAAC,aAAa,CAAC,CAAC;IAC3D,MAAM,kBAAkB,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;IAEzD,MAAM,KAAK,GAAG,eAAe,CAAC;QAC5B,GAAG,EAAE,QAAQ;QACb,OAAO,EAAE,mBAAmB;QAC5B,YAAY,EAAE,WAAW;QACzB,OAAO;QACP,IAAI,EAAE,kBAAkB;YACtB,CAAC,CAAC,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;YAC1C,CAAC,CAAC,SAAS;QACb,KAAK,EAAE;YACL,OAAO,EAAE,OAAO,IAAI,OAAO,CAAC,mBAAmB,IAAI,kBAAkB,CAAC;SACvE;KACF,CAAC,CAAC;IAEH,IAAI,CAAC,mBAAmB,IAAI,CAAC,kBAAkB,EAAE;QAC/C,OAAO;YACL,YAAY,EAAE,KAAK;YACnB,KAAK,EAAE,IAAI,KAAK,CAAC,4BAA4B,CAAC;SAC/C,CAAC;KACH;IAED,MAAM,cAAc,GACjB,KAAK,CAAC,IAA+B,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM;QACnE,MAAM,CAAC,CAAC,CAAC,CAAC;IAEZ,MAAM,YAAY,GAAG,cAAc,IAAI,MAAM,CAAC;IAE9C,OAAO;QACL,KAAK;QACL,YAAY;QACZ,cAAc;KACf,CAAC;AACJ,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { useMemo } from "react";
2
+ import { isFallbackAddressNeeded } from "../../services/internal/cosmosService";
3
+ import { useSwapRoutePersistStore } from "../store/useSquidStore";
4
+ import { useSwap } from "../swap/useSwap";
5
+ export const useRouteWarnings = () => {
6
+ const { toChain, destinationAddress } = useSwap();
7
+ const { swapRoute } = useSwapRoutePersistStore();
8
+ const needsFallbackAddress = useMemo(() => {
9
+ return isFallbackAddressNeeded({
10
+ address: destinationAddress?.address,
11
+ currentFallbackAddress: swapRoute?.fallbackAddress,
12
+ chain: toChain,
13
+ });
14
+ }, [destinationAddress?.address, swapRoute?.fallbackAddress, toChain]);
15
+ return {
16
+ needsFallbackAddress,
17
+ };
18
+ };
19
+ //# sourceMappingURL=useRouteWarnings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRouteWarnings.js","sourceRoot":"","sources":["../../../src/hooks/transaction/useRouteWarnings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAChF,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,EAAE;IACnC,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,GAAG,OAAO,EAAE,CAAC;IAClD,MAAM,EAAE,SAAS,EAAE,GAAG,wBAAwB,EAAE,CAAC;IAEjD,MAAM,oBAAoB,GAAG,OAAO,CAAC,GAAG,EAAE;QACxC,OAAO,uBAAuB,CAAC;YAC7B,OAAO,EAAE,kBAAkB,EAAE,OAAO;YACpC,sBAAsB,EAAE,SAAS,EAAE,eAAe;YAClD,KAAK,EAAE,OAAO;SACf,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,kBAAkB,EAAE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;IAEvE,OAAO;QACL,oBAAoB;KACrB,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,91 @@
1
+ import { ChainType } from "@0xsquid/squid-types";
2
+ import { useQuery } from "@tanstack/react-query";
3
+ import { useCallback, useMemo, useState } from "react";
4
+ import { transactionEndStatuses } from "../../core/constants";
5
+ import { keys } from "../../core/queries/queries-keys";
6
+ import { TransactionStatus, } from "../../core/types/transaction";
7
+ import { fetchTransactionStatus, getTransactionEndStatus, getTransactionStatus, getTxStatusRefetchInterval, is404Error, } from "../../services";
8
+ import { WidgetEvents } from "../../services/internal/eventService";
9
+ import { useSquidChains } from "../chains/useSquidChains";
10
+ import { useConfigStore } from "../store/useSquidStore";
11
+ import { useHistory } from "../user/useHistory";
12
+ export const useSingleTransaction = ({ transaction, retry = 25, refetchOnWindowFocus = "always", enabled = true, }) => {
13
+ const config = useConfigStore((state) => state.config);
14
+ const isInitialized = useConfigStore((state) => state.isInitialized);
15
+ const { replaceTransactionStatus, findHistoryItem } = useHistory();
16
+ const [isTransactionComplete, setIsTransactionComplete] = useState(false);
17
+ const [refetchInterval, setRefetchInterval] = useState(getTxStatusRefetchInterval(transaction));
18
+ const { getChainType } = useSquidChains();
19
+ const currentHistoryItem = useMemo(() => findHistoryItem(transaction?.transactionId), [findHistoryItem, transaction?.transactionId]);
20
+ /**
21
+ * Transaction status endpoint
22
+ * Squid api is using axelar endpoint and parsing the response
23
+ * @returns {StatusResponse} Status response
24
+ */
25
+ const fetchTransactionStatusWithLatestConfig = useCallback(async () => {
26
+ const latestConfig = useConfigStore.getState().config;
27
+ return fetchTransactionStatus({
28
+ transaction,
29
+ integratorId: latestConfig.integratorId,
30
+ apiUrl: latestConfig.apiUrl,
31
+ });
32
+ }, [transaction]);
33
+ const transactionStatusQuery = useQuery(keys().transactionStatus(transaction), fetchTransactionStatusWithLatestConfig, {
34
+ enabled: enabled &&
35
+ transaction?.transactionId !== "0" &&
36
+ !!transaction?.transactionId &&
37
+ !!transaction.fromAddress &&
38
+ !!config.apiUrl &&
39
+ transaction !== undefined &&
40
+ !isTransactionComplete &&
41
+ isInitialized &&
42
+ !!currentHistoryItem?.status &&
43
+ !transactionEndStatuses.includes(currentHistoryItem.status),
44
+ refetchInterval(statusResponse) {
45
+ // If the status response is something telling that the transaction
46
+ // is finished, then store transaction history state if success
47
+ // And return false to indicate refetcher to stop
48
+ if (statusResponse &&
49
+ transactionEndStatuses.includes(getTransactionStatus(statusResponse) ?? "")) {
50
+ return false;
51
+ }
52
+ return refetchInterval; // Had to handle a variable here because after onError, we want the interval to stop
53
+ },
54
+ // At the moment Cosmos indexing takes more time, so need more time between retries
55
+ retryDelay: getChainType(transaction?.fromChain) === ChainType.COSMOS ? 5000 : 3000,
56
+ retry: getChainType(transaction?.fromChain) === ChainType.COSMOS ? 6 : retry,
57
+ refetchOnWindowFocus,
58
+ onSuccess: (data) => {
59
+ const statusResponse = data;
60
+ // Dispatch event
61
+ WidgetEvents.getInstance().dispatchSwapStatus(statusResponse.squidTransactionStatus ?? "");
62
+ const endStatus = getTransactionEndStatus({ statusResponse });
63
+ if (endStatus && transaction?.transactionId) {
64
+ setIsTransactionComplete(true);
65
+ replaceTransactionStatus(transaction.transactionId, statusResponse, endStatus);
66
+ }
67
+ },
68
+ onError: (error) => {
69
+ // `fetchTransactionStatus` throws an error with a cause being an AxiosError
70
+ const is404 = is404Error(error.cause);
71
+ if (!transaction?.transactionId)
72
+ return;
73
+ if (is404) {
74
+ replaceTransactionStatus(transaction.transactionId, undefined, TransactionStatus.NOT_FOUND);
75
+ }
76
+ else {
77
+ setRefetchInterval(-1);
78
+ setIsTransactionComplete(true);
79
+ replaceTransactionStatus(transaction.transactionId, undefined, TransactionStatus.ERROR);
80
+ }
81
+ },
82
+ });
83
+ return {
84
+ transactionStatusQuery,
85
+ latestStatus: transactionStatusQuery.data
86
+ ?.squidTransactionStatus ??
87
+ transaction?.status ??
88
+ currentHistoryItem?.status,
89
+ };
90
+ };
91
+ //# sourceMappingURL=useSingleTransaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSingleTransaction.js","sourceRoot":"","sources":["../../../src/hooks/transaction/useSingleTransaction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { useEffect, useState } from "react";
2
+ const zeroAddress = "0x0000000000000000000000000000000000000000";
3
+ const avatarImagesBaseUrl = "https://raw.githubusercontent.com/0xsquid/assets/main/squid-brand-assets/pfps";
4
+ const TOTAL_AVATARS = 60;
5
+ const avatarImages = Array.from({
6
+ length: TOTAL_AVATARS,
7
+ }).map((_, i) => `${avatarImagesBaseUrl}/pfp${i + 1}.svg`);
8
+ /**
9
+ * Simple hash function to create a deterministic index from a given string.
10
+ * @param {string} str - The input string to hash.
11
+ * @param {number} max - The maximum value for the hash.
12
+ * @returns {number} - The index within the array.
13
+ */
14
+ const hashStringToIndex = (str, max) => {
15
+ let index = 0;
16
+ for (let i = 0; i < str.length; i++) {
17
+ index = (index * 31 + str.charCodeAt(i)) % max;
18
+ }
19
+ return index;
20
+ };
21
+ /**
22
+ * Custom hook to return a deterministic avatar image URL based on the provided seed.
23
+ * @param {string} seed - The seed used to determine the avatar.
24
+ * @returns {string} - The selected avatar image URL.
25
+ */
26
+ export const useAvatar = (seed = zeroAddress) => {
27
+ const [avatar, setAvatar] = useState("");
28
+ useEffect(() => {
29
+ const index = hashStringToIndex(seed, avatarImages.length);
30
+ setAvatar(avatarImages[index]);
31
+ }, [seed]);
32
+ return avatar;
33
+ };
34
+ //# sourceMappingURL=useAvatar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAvatar.js","sourceRoot":"","sources":["../../../src/hooks/user/useAvatar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE5C,MAAM,WAAW,GAAG,4CAA4C,CAAC;AAEjE,MAAM,mBAAmB,GACvB,+EAA+E,CAAC;AAElF,MAAM,aAAa,GAAG,EAAE,CAAC;AAEzB,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC;IAC9B,MAAM,EAAE,aAAa;CACtB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,mBAAmB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAE3D;;;;;GAKG;AACH,MAAM,iBAAiB,GAAG,CAAC,GAAW,EAAE,GAAW,EAAU,EAAE;IAC7D,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACnC,KAAK,GAAG,CAAC,KAAK,GAAG,EAAE,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;KAChD;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,OAAe,WAAW,EAAU,EAAE;IAC9D,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAS,EAAE,CAAC,CAAC;IAEjD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;QAC3D,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IACjC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
@@ -0,0 +1,106 @@
1
+ import { useCallback, useMemo } from "react";
2
+ import { TransactionStatus, } from "../../core/types/transaction";
3
+ import { getBridgeType } from "../../services/internal/transactionStatusService";
4
+ import { useHistoryStore } from "../store/useHistoryStore";
5
+ export const useHistory = () => {
6
+ const transactions = useHistoryStore((state) => state.transactions);
7
+ const { persistTransaction, replaceTransactionStatus, removeTransaction, replaceTransactionAtNonce, } = useHistoryStore();
8
+ const pendingTransactions = useMemo(() => {
9
+ return transactions.filter((tx) => tx.status === TransactionStatus.INITIAL_LOADING ||
10
+ tx.status === TransactionStatus.ONGOING ||
11
+ tx.status === TransactionStatus.PENDING);
12
+ }, [transactions]);
13
+ const parseTransaction = (tx) => {
14
+ if (!tx.transactionId || !tx.params.toAddress || !tx.params.fromAddress) {
15
+ return null;
16
+ }
17
+ const simplifiedActions = tx.estimate?.actions?.map((action) => ({
18
+ type: action.type,
19
+ provider: action.provider,
20
+ data: action.data,
21
+ })) ?? [];
22
+ return {
23
+ fromChain: tx.params.fromChain,
24
+ fromToken: tx.params.fromToken,
25
+ fromAddress: tx.params.fromAddress,
26
+ fromAmount: tx.params.fromAmount,
27
+ toChain: tx.params.toChain,
28
+ toToken: tx.params.toToken,
29
+ toAddress: tx.params.toAddress,
30
+ toAmount: tx.estimate.toAmount,
31
+ toAmountMin: tx.estimate.toAmountMin,
32
+ exchangeRate: tx.estimate.exchangeRate,
33
+ aggregatePriceImpact: tx.estimate.aggregatePriceImpact,
34
+ transactionId: tx.transactionId,
35
+ transactionIdForStatus: tx.transactionIdForStatus,
36
+ requestId: tx.requestId,
37
+ fromAmountUSD: tx.estimate.fromAmountUSD,
38
+ toAmountUSD: tx.estimate.toAmountUSD,
39
+ toAmountMinUSD: tx.estimate.toAmountMinUSD,
40
+ slippage: tx.params.slippage,
41
+ status: tx.status,
42
+ nonce: tx.nonce,
43
+ routeType: tx.routeType,
44
+ statusResponse: tx.statusResponse,
45
+ sourceTxExplorerUrl: tx.sourceTxExplorerUrl,
46
+ timestamp: tx.timestamp ?? Date.now(),
47
+ bridgeType: getBridgeType(tx.estimate.actions),
48
+ actions: simplifiedActions,
49
+ };
50
+ };
51
+ const addTransaction = (tx) => {
52
+ const simplifiedTx = parseTransaction(tx);
53
+ if (simplifiedTx) {
54
+ persistTransaction(simplifiedTx);
55
+ }
56
+ };
57
+ const replaceNonceTx = (nonce, userAddress, tx) => {
58
+ const simplifiedTx = parseTransaction(tx);
59
+ if (simplifiedTx) {
60
+ replaceTransactionAtNonce(nonce, userAddress, simplifiedTx);
61
+ }
62
+ };
63
+ const findHistoryItem = useCallback((transactionID) => {
64
+ return useHistoryStore
65
+ .getState()
66
+ .transactions?.find((th) => th.transactionId === transactionID);
67
+ }, []);
68
+ const globalStatus = useMemo(() => {
69
+ const statusPriority = [
70
+ {
71
+ status: TransactionStatus.ERROR,
72
+ check: (tx) => tx.status === TransactionStatus.ERROR,
73
+ },
74
+ {
75
+ status: TransactionStatus.WARNING,
76
+ check: (tx) => tx.status === TransactionStatus.WARNING,
77
+ },
78
+ {
79
+ status: TransactionStatus.PENDING,
80
+ check: (tx) => [
81
+ TransactionStatus.PENDING,
82
+ TransactionStatus.ONGOING,
83
+ TransactionStatus.INITIAL_LOADING,
84
+ ].includes(tx.status),
85
+ },
86
+ ];
87
+ for (const { status, check } of statusPriority) {
88
+ if (transactions.some(check)) {
89
+ return status;
90
+ }
91
+ }
92
+ return TransactionStatus.SUCCESS;
93
+ }, [transactions]);
94
+ return {
95
+ transactions,
96
+ addTransaction,
97
+ replaceTransactionStatus,
98
+ removeTransaction,
99
+ globalStatus,
100
+ replaceNonceTx,
101
+ findHistoryItem,
102
+ parseTransaction,
103
+ pendingTransactions,
104
+ };
105
+ };
106
+ //# sourceMappingURL=useHistory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useHistory.js","sourceRoot":"","sources":["../../../src/hooks/user/useHistory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { ChainType } from "@0xsquid/squid-types";
2
+ import { useMemo } from "react";
3
+ import { useConfigStore } from "../store/useSquidStore";
4
+ import { useSwap } from "../swap/useSwap";
5
+ export const useUserParams = () => {
6
+ const enableGetGasOnDestination = useConfigStore((state) => state.config.enableGetGasOnDestination);
7
+ const { fromToken, toToken, toChain, fromChain } = useSwap();
8
+ // =============
9
+ // GAS
10
+ // =============
11
+ const getGasOnDestSupportedForThisRoute = useMemo(() =>
12
+ // Not supporting get gas on dest for same chains
13
+ fromChain?.chainId !== toChain?.chainId &&
14
+ // If the destination chain is cosmos, we don't support getting gas there
15
+ toChain?.chainType !== ChainType.COSMOS &&
16
+ // Not supporting get gas on dest for same tokens (bridge)
17
+ ((fromToken?.subGraphIds?.some((sgi) => !!toToken?.subGraphIds?.includes(sgi)) &&
18
+ toToken?.subGraphIds?.some((sgi) => !!fromToken?.subGraphIds?.includes(sgi))) ||
19
+ // Except for uusdc -> uusdc
20
+ (fromToken?.subGraphIds?.includes("uusdc") &&
21
+ toToken?.subGraphIds?.includes("uusdc"))), [
22
+ fromChain?.chainId,
23
+ fromToken?.subGraphIds,
24
+ toChain?.chainId,
25
+ toToken?.subGraphIds,
26
+ toChain?.chainType,
27
+ ]);
28
+ return {
29
+ gasEnabled: enableGetGasOnDestination && getGasOnDestSupportedForThisRoute,
30
+ getGasOnDestSupportedForThisRoute,
31
+ };
32
+ };
33
+ //# sourceMappingURL=useUserParams.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUserParams.js","sourceRoot":"","sources":["../../../src/hooks/user/useUserParams.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,EAAE;IAChC,MAAM,yBAAyB,GAAG,cAAc,CAC9C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,yBAAyB,CAClD,CAAC;IAEF,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,OAAO,EAAE,CAAC;IAE7D,kBAAkB;IAClB,YAAY;IACZ,kBAAkB;IAClB,MAAM,iCAAiC,GAAG,OAAO,CAC/C,GAAG,EAAE;IACH,iDAAiD;IACjD,SAAS,EAAE,OAAO,KAAK,OAAO,EAAE,OAAO;QACvC,yEAAyE;QACzE,OAAO,EAAE,SAAS,KAAK,SAAS,CAAC,MAAM;QACvC,0DAA0D;QAE1D,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,CAC5B,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC,GAAG,CAAC,CAC/C;YACC,OAAO,EAAE,WAAW,EAAE,IAAI,CACxB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,GAAG,CAAC,CACjD,CAAC;YACF,4BAA4B;YAC5B,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC;gBACxC,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAC/C;QACE,SAAS,EAAE,OAAO;QAClB,SAAS,EAAE,WAAW;QACtB,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,WAAW;QACpB,OAAO,EAAE,SAAS;KACnB,CACF,CAAC;IAEF,OAAO;QACL,UAAU,EAAE,yBAAyB,IAAI,iCAAiC;QAC1E,iCAAiC;KAClC,CAAC;AACJ,CAAC,CAAC"}