@0xsquid/react-hooks 1.0.3 → 1.0.5

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 (316) 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 -2
  217. package/.babelrc +0 -7
  218. package/.eslintignore +0 -1
  219. package/.eslintrc.json +0 -44
  220. package/CHANGELOG.md +0 -7
  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.json +0 -30
  292. /package/{src → dist}/assets/images/icons/wallets/binance.svg +0 -0
  293. /package/{src → dist}/assets/images/icons/wallets/bitget.svg +0 -0
  294. /package/{src → dist}/assets/images/icons/wallets/bitkeep.svg +0 -0
  295. /package/{src → dist}/assets/images/icons/wallets/blockchaindotcom.svg +0 -0
  296. /package/{src → dist}/assets/images/icons/wallets/brave.svg +0 -0
  297. /package/{src → dist}/assets/images/icons/wallets/c98.svg +0 -0
  298. /package/{src → dist}/assets/images/icons/wallets/coinbase.svg +0 -0
  299. /package/{src → dist}/assets/images/icons/wallets/cosmostation.svg +0 -0
  300. /package/{src → dist}/assets/images/icons/wallets/defiConnect.svg +0 -0
  301. /package/{src → dist}/assets/images/icons/wallets/exodus.svg +0 -0
  302. /package/{src → dist}/assets/images/icons/wallets/fetchai.svg +0 -0
  303. /package/{src → dist}/assets/images/icons/wallets/keplr.svg +0 -0
  304. /package/{src → dist}/assets/images/icons/wallets/leap.svg +0 -0
  305. /package/{src → dist}/assets/images/icons/wallets/metamask.svg +0 -0
  306. /package/{src → dist}/assets/images/icons/wallets/okx.svg +0 -0
  307. /package/{src → dist}/assets/images/icons/wallets/rabby.svg +0 -0
  308. /package/{src → dist}/assets/images/icons/wallets/trustwallet.svg +0 -0
  309. /package/{src → dist}/assets/images/icons/wallets/walletConnect.svg +0 -0
  310. /package/{src → dist}/assets/images/icons/wallets/wallet_icon.svg +0 -0
  311. /package/{src → dist}/assets/images/icons/wallets/xdefi.svg +0 -0
  312. /package/{src → dist}/assets/images/icons/wallets/zerion.svg +0 -0
  313. /package/{src → dist}/contracts/typechain/factories/ERC20__factory.d.ts +0 -0
  314. /package/{src/core/index.ts → dist/core/index.d.ts} +0 -0
  315. /package/{src/services/index.ts → dist/services/index.d.ts} +0 -0
  316. /package/{src/tests/sample.json → dist/tests/jest-svg-transform.d.ts} +0 -0
@@ -0,0 +1,521 @@
1
+ import { ChainType } from "@0xsquid/sdk/dist/types";
2
+ import { osmosisChainId } from "./../../core/constants";
3
+ import { useCosmosContext } from "./../../core/providers/CosmosProvider";
4
+ import { keys } from "./../../core/queries/queries-keys";
5
+ import { TransactionErrorType } from "./../../core/types/error";
6
+ import { SigningCosmWasmClient } from "@cosmjs/cosmwasm-stargate";
7
+ import { TransactionStatus as GnosisTransactionStatus } from "@safe-global/safe-apps-sdk/dist/src/types";
8
+ import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
9
+ import { TxRaw } from "cosmjs-types/cosmos/tx/v1beta1/tx";
10
+ import { constants, ethers, utils } from "ethers";
11
+ import { Logger } from "ethers/lib/utils.js";
12
+ import { useCallback, useMemo } from "react";
13
+ import { useAccount, useSigner } from "wagmi";
14
+ import { TransactionStatus } from "./../../core/types/transaction";
15
+ import { getWorkingCosmosRpcUrl } from "./../../services/external/rpcService";
16
+ import { getTransactionError } from "./../../services/internal/errorService";
17
+ import { getMainExplorerUrl, getSourceExplorerTxUrl, replaceTransactionAtNonce, updateTransactionHistoryStatus, } from "./../../services/internal/transactionService";
18
+ import { useSquidChains } from "./../../hooks//chains/useSquidChains";
19
+ import { usePersistStore, useSquidStore, useSwapRoutePersistStore, } from "./../../hooks/store/useSquidStore";
20
+ import { useSwap } from "./../../hooks/swap/useSwap";
21
+ import { useUserParams } from "./../../hooks/user/useUserParams";
22
+ import { useGnosisContext } from "./../../hooks/wallet/useGnosisContext";
23
+ import { useMultiChainWallet } from "./../../hooks/wallet/useMultiChainWallet";
24
+ import { WidgetEvents } from "./../../services/internal/eventService";
25
+ export const useTransaction = () => {
26
+ const signer = useSigner();
27
+ const { cosmosSigner, getCosmosAddressForChain, isConnected: isCosmosConnected, } = useCosmosContext();
28
+ const { chains } = useSquidChains();
29
+ const queryClient = useQueryClient();
30
+ const { fromPrice, toPrice, squid, currentTransaction, config } = useSquidStore();
31
+ const { swapRoute } = useSwapRoutePersistStore();
32
+ const { connector: activeConnector } = useAccount();
33
+ const { fromChain, toChain, fromToken, toToken, destinationAddress } = useSwap();
34
+ const { getGnosisSafeContext } = useGnosisContext();
35
+ const { expressEnabled, gasEnabled } = useUserParams();
36
+ const { connectedAddress: sourceUserAddress } = useMultiChainWallet(fromChain);
37
+ const isSameChainSwap = useMemo(() => fromChain?.chainId === toChain?.chainId, [fromChain?.chainId, toChain?.chainId]);
38
+ const mainExplorerUrl = useMemo(() => {
39
+ return getMainExplorerUrl(currentTransaction);
40
+ }, [currentTransaction]);
41
+ /**
42
+ * Get fallback addresses for cosmos chains
43
+ * This is needed by backend when a cosmos swap occurs between non coin118 chains
44
+ * The backend might need a coin118 address to send the funds to in case of failure for a swap happening between the two chains
45
+ */
46
+ const getCosmosFallbackAddresses = useCallback(async () => {
47
+ // If not connected, user might have filled it manually
48
+ if (!isCosmosConnected) {
49
+ return swapRoute?.fallbackAddress
50
+ ? [
51
+ {
52
+ address: swapRoute?.fallbackAddress,
53
+ coinType: 118,
54
+ },
55
+ // TODO: Temp parsing here, should be included in v2 sdk
56
+ ]
57
+ : undefined;
58
+ }
59
+ // the user is connected to cosmos, we can get the fallback address from the wallet
60
+ // We only need coin118, so taking osmosis hub address by default
61
+ const osmosisAddress = await getCosmosAddressForChain(osmosisChainId.mainnet);
62
+ if (!osmosisAddress) {
63
+ return undefined;
64
+ }
65
+ // Always used the one set by user (if any), otherwise use the derived osmo address
66
+ // only return something if one of the fallback address is defined
67
+ if (!!swapRoute?.fallbackAddress || !!osmosisAddress) {
68
+ return [
69
+ {
70
+ address: swapRoute?.fallbackAddress ?? osmosisAddress,
71
+ coinType: 118,
72
+ },
73
+ ];
74
+ }
75
+ return undefined;
76
+ }, [getCosmosAddressForChain, isCosmosConnected, swapRoute?.fallbackAddress]);
77
+ /**
78
+ * Fetching route data from the API
79
+ * These data will be used to trigger the transaction
80
+ * @returns {Route} Route data
81
+ */
82
+ const squidRoute = useQuery(keys({
83
+ address: destinationAddress,
84
+ apiUrl: config.apiUrl,
85
+ }).transaction(swapRoute, fromPrice, config.slippage, config.infiniteApproval, config.enableGetGasOnDestination, config.enableExpress, sourceUserAddress), async () => {
86
+ const quoteOnly = sourceUserAddress === undefined || destinationAddress === undefined;
87
+ const isEvmSwap = fromChain?.chainType === ChainType.EVM &&
88
+ toChain?.chainType === ChainType.EVM;
89
+ const cosmosFallbackAddresses = quoteOnly || isEvmSwap ? undefined : await getCosmosFallbackAddresses();
90
+ if (!!swapRoute) {
91
+ // TODO: Put RouteRequest back when it supports fallbackAddress
92
+ const params = {
93
+ fromChain: String(swapRoute.fromChainId),
94
+ fromToken: swapRoute.fromTokenAddress ?? "",
95
+ fromAddress: sourceUserAddress ?? constants.AddressZero,
96
+ fromAmount: utils
97
+ .parseUnits(fromPrice?.toString() ?? "0", fromToken?.decimals)
98
+ .toString(),
99
+ toChain: swapRoute.toChainId,
100
+ toToken: swapRoute.toTokenAddress,
101
+ toAddress: destinationAddress ?? "",
102
+ quoteOnly: sourceUserAddress === undefined || destinationAddress === undefined,
103
+ slippageConfig: {
104
+ // We set slippage to undefined because automode will be picked if slippage is undefined
105
+ // Slippage to 1 = auto mode
106
+ slippage: config.slippage === 1 ? undefined : config.slippage,
107
+ autoMode: 1,
108
+ },
109
+ enableBoost: expressEnabled,
110
+ prefer: config.preferDex,
111
+ receiveGasOnDestination: gasEnabled,
112
+ onChainQuoting: !!config.onChainQuoting,
113
+ };
114
+ // If the swap is involving cosmos chains, we need to add the fallback addresses (if any)
115
+ if (cosmosFallbackAddresses &&
116
+ cosmosFallbackAddresses.length > 0 &&
117
+ cosmosFallbackAddresses[0].address) {
118
+ params.fallbackAddresses = cosmosFallbackAddresses;
119
+ }
120
+ const { route, requestId } = await squid.getRoute({
121
+ ...params,
122
+ });
123
+ useSquidStore.setState({
124
+ currentRequestId: requestId,
125
+ });
126
+ return route;
127
+ }
128
+ }, {
129
+ enabled: squid !== undefined &&
130
+ fromPrice !== undefined &&
131
+ fromPrice !== "0" &&
132
+ swapRoute?.toChainId !== undefined &&
133
+ swapRoute.toTokenAddress !== undefined,
134
+ // TODO: Check this, might be outside library
135
+ // && currentRoute?.path !== routes.transaction.path,
136
+ cacheTime: 60000,
137
+ staleTime: 20000,
138
+ refetchOnWindowFocus: (query) => Date.now() - query.state.dataUpdatedAt > 30000, // Update if older than 30 seconds, when window is focused
139
+ refetchIntervalInBackground: false, // Don't refetch when window is not focused
140
+ refetchInterval: 30000, // Refetch every 30 seconds
141
+ });
142
+ /**
143
+ * Checking if spending tokens is allowed for this source address
144
+ * On Success: storing the transaction
145
+ * On Error: Showing the error message if any
146
+ * @returns {boolean} approved
147
+ */
148
+ const routeApproved = useQuery(keys({
149
+ address: sourceUserAddress,
150
+ apiUrl: config.apiUrl,
151
+ }).routeApproved(swapRoute, sourceUserAddress, squidRoute.data), async () => {
152
+ try {
153
+ const { isApproved } = await squid.isRouteApproved({
154
+ route: squidRoute.data,
155
+ sender: sourceUserAddress,
156
+ });
157
+ return isApproved;
158
+ }
159
+ catch (error) {
160
+ return false;
161
+ }
162
+ }, {
163
+ enabled: !!squidRoute.data && !!sourceUserAddress,
164
+ });
165
+ // USDT has a very specific way of handling approvals
166
+ // ```
167
+ /// To change the approve amount you first have to reduce the addresses`
168
+ // allowance to zero by calling `approve(_spender, 0)` if it is not
169
+ // already 0 to mitigate the race condition described here:
170
+ // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
171
+ // ```
172
+ // This is why we had an unpredictable gas error for USDT approvals
173
+ // So it needs a custom gas limit
174
+ const approveSpecificTokenToZero = async (token) => {
175
+ if (signer.data &&
176
+ token.symbol.toLowerCase() === "usdt" &&
177
+ token.chainId === "1" &&
178
+ fromToken) {
179
+ const squidRouter = "0xce16F69375520ab01377ce7B88f5BA8C48F8D666";
180
+ const usdtContract = new ethers.Contract(fromToken.address, [
181
+ {
182
+ constant: false,
183
+ inputs: [
184
+ { name: "_spender", type: "address" },
185
+ { name: "_value", type: "uint256" },
186
+ ],
187
+ name: "approve",
188
+ outputs: [],
189
+ payable: false,
190
+ stateMutability: "nonpayable",
191
+ type: "function",
192
+ },
193
+ {
194
+ constant: true,
195
+ inputs: [
196
+ { name: "_owner", type: "address" },
197
+ { name: "_spender", type: "address" },
198
+ ],
199
+ name: "allowance",
200
+ outputs: [{ name: "remaining", type: "uint256" }],
201
+ payable: false,
202
+ stateMutability: "view",
203
+ type: "function",
204
+ },
205
+ ], signer.data);
206
+ // Get approval amount from usdt contract
207
+ const allowance = (await usdtContract.allowance(sourceUserAddress, squidRouter));
208
+ // If allowance is greater than 0, set it to 0
209
+ if (allowance.gt(constants.Zero)) {
210
+ const approveTx = await usdtContract.approve(squidRouter, constants.Zero);
211
+ await approveTx.wait();
212
+ }
213
+ }
214
+ return true;
215
+ };
216
+ /**
217
+ * Manually approve route if necessary
218
+ */
219
+ const approveRoute = useMutation(keys({
220
+ address: sourceUserAddress,
221
+ apiUrl: config.apiUrl,
222
+ }).aproveRoute(fromToken?.address, squidRoute?.data?.params.fromAmount), async () => {
223
+ try {
224
+ if (squidRoute.data && signer.data && fromToken) {
225
+ await approveSpecificTokenToZero(fromToken);
226
+ const approved = await squid?.approveRoute({
227
+ route: squidRoute.data,
228
+ signer: signer.data,
229
+ executionSettings: { infiniteApproval: config.infiniteApproval },
230
+ });
231
+ return approved;
232
+ }
233
+ return false;
234
+ }
235
+ catch (error) {
236
+ // Keep the error in the console to debug future issues
237
+ console.error(error);
238
+ return false;
239
+ }
240
+ }, {
241
+ onSuccess: () => {
242
+ queryClient.invalidateQueries(keys({
243
+ address: sourceUserAddress,
244
+ apiUrl: config.apiUrl,
245
+ }).routeApproved(swapRoute, sourceUserAddress, squidRoute.data));
246
+ },
247
+ });
248
+ /**
249
+ * There's a specific way to get the transaction hash for the safe connector
250
+ * SO if the app is being used inside the safe container, we need to use the safe sdk to get the tx hash
251
+ * @param connector
252
+ * @param hashReceived
253
+ * @returns
254
+ */
255
+ const getTransactionHash = async (connector, hashReceived) => {
256
+ if (connector?.id === "safe") {
257
+ const safeSdk = await getGnosisSafeContext();
258
+ const tx = await safeSdk?.txs.getBySafeTxHash(hashReceived);
259
+ const status = tx?.txStatus;
260
+ if (status !== GnosisTransactionStatus.FAILED &&
261
+ status !== GnosisTransactionStatus.SUCCESS &&
262
+ status !== GnosisTransactionStatus.CANCELLED) {
263
+ // Wait 2 seconds before checking the gnosis status again
264
+ // eslint-disable-next-line no-promise-executor-return
265
+ await new Promise((res) => setTimeout(res, 2000));
266
+ return getTransactionHash(connector, hashReceived);
267
+ }
268
+ return tx?.txHash ?? hashReceived;
269
+ }
270
+ return hashReceived;
271
+ };
272
+ const persistTransaction = async (txToPersist) => {
273
+ // Persisting the transaction in local storage
274
+ if (squidRoute.data) {
275
+ const previousHistoryList = usePersistStore.getState().transactionsHistory ?? [];
276
+ const newHistoryElement = {
277
+ ...txToPersist,
278
+ params: squidRoute.data.params,
279
+ estimate: squidRoute.data.estimate,
280
+ };
281
+ usePersistStore.setState({
282
+ transactionsHistory: [...previousHistoryList, newHistoryElement],
283
+ });
284
+ }
285
+ };
286
+ const setTransactionState = useCallback(({ route, txHash, nonce, status, sourceStatus, userAddress, axelarUrl, }) => {
287
+ if (route && route.transactionRequest) {
288
+ const { routeType } = route.transactionRequest;
289
+ const tx = {
290
+ fromChain,
291
+ toChain,
292
+ routeType,
293
+ nonce,
294
+ transactionId: txHash,
295
+ status,
296
+ sourceStatus,
297
+ timestamp: Date.now(),
298
+ fromAddress: userAddress,
299
+ sourceTxExplorerUrl: getSourceExplorerTxUrl(fromChain, txHash),
300
+ sourceExplorerImgUrl: fromChain?.chainIconURI,
301
+ axelarUrl,
302
+ };
303
+ useSquidStore.setState({
304
+ currentTransaction: tx,
305
+ });
306
+ return tx;
307
+ }
308
+ return undefined;
309
+ }, [fromChain, toChain]);
310
+ const swapQueryCosmos = useMutation(async (route) => {
311
+ const chainData = chains.find((c) => c.chainId === route?.params.fromChain);
312
+ if (cosmosSigner && chainData) {
313
+ try {
314
+ const rpc = await getWorkingCosmosRpcUrl(chainData);
315
+ const signingClient = await SigningCosmWasmClient.connectWithSigner(rpc, cosmosSigner);
316
+ const signerAddress = (await cosmosSigner.getAccounts())[0].address;
317
+ if (signerAddress && signingClient && route) {
318
+ const tx = (await squid?.executeRoute({
319
+ signer: signingClient,
320
+ signerAddress,
321
+ route,
322
+ executionSettings: {
323
+ infiniteApproval: config.infiniteApproval,
324
+ },
325
+ }));
326
+ // set the tx state to loading, as soon as user signed the tx
327
+ setTransactionState({
328
+ txHash: "", // We don't have the hash yet
329
+ route,
330
+ status: TransactionStatus.ONGOING,
331
+ sourceStatus: TransactionStatus.ONGOING,
332
+ });
333
+ // broadcast the signed tx to get hash and listen to events
334
+ const response = await signingClient.broadcastTx(TxRaw.encode(tx).finish());
335
+ const hash = response.transactionHash;
336
+ // Dispatch event so it can be listened from outside the widget
337
+ WidgetEvents.getInstance().dispatchSwapExecuteCall(route, hash);
338
+ const txParams = setTransactionState({
339
+ route,
340
+ txHash: hash,
341
+ userAddress: sourceUserAddress,
342
+ status: TransactionStatus.ONGOING,
343
+ sourceStatus: TransactionStatus.ONGOING,
344
+ axelarUrl: undefined,
345
+ });
346
+ if (txParams) {
347
+ persistTransaction(txParams);
348
+ }
349
+ return response.code === 0;
350
+ }
351
+ }
352
+ catch (error) {
353
+ console.log(error);
354
+ const castedError = error ?? {};
355
+ if (castedError.message?.includes("Request rejected")) {
356
+ throw new Error(castedError.message);
357
+ }
358
+ }
359
+ }
360
+ throw new Error("Need all parameters");
361
+ });
362
+ // If the transaction is replaced, we need to update the transaction hash
363
+ // Transaction replaced can mean that the user has speed up the transaction for example
364
+ // Could also be cancelled
365
+ const handleTransactionReplacementError = useCallback(async ({ error, route, status, sourceStatus, userAddress, axelarUrl, }) => {
366
+ if (route && error.code === Logger.errors.TRANSACTION_REPLACED) {
367
+ const txReplacementError = error;
368
+ const { hash: newHash, nonce: newNonce } = txReplacementError.replacement;
369
+ if (route.transactionRequest && squidRoute.data) {
370
+ const txParams = setTransactionState({
371
+ route,
372
+ txHash: newHash,
373
+ nonce: newNonce,
374
+ userAddress: sourceUserAddress,
375
+ status,
376
+ sourceStatus,
377
+ axelarUrl: undefined,
378
+ });
379
+ if (txParams) {
380
+ const newHistoryElement = {
381
+ ...txParams,
382
+ params: squidRoute.data.params,
383
+ estimate: squidRoute.data.estimate,
384
+ };
385
+ // Need to store the new transaction hash on the previous transaction
386
+ usePersistStore.setState({
387
+ transactionsHistory: replaceTransactionAtNonce(newNonce, sourceUserAddress, usePersistStore.getState().transactionsHistory, newHistoryElement),
388
+ });
389
+ }
390
+ }
391
+ try {
392
+ const response = await txReplacementError.replacement.wait();
393
+ return response;
394
+ }
395
+ catch (replacementError) {
396
+ // Maybe the transaction was replaced again
397
+ // recursive call
398
+ return handleTransactionReplacementError({
399
+ error,
400
+ route,
401
+ status,
402
+ sourceStatus,
403
+ userAddress,
404
+ axelarUrl,
405
+ });
406
+ }
407
+ }
408
+ else {
409
+ throw error;
410
+ }
411
+ }, [
412
+ setTransactionState,
413
+ sourceUserAddress,
414
+ squidRoute.data,
415
+ squid?.axelarscanURL,
416
+ ]);
417
+ const swapQueryEvm = useMutation(async (route) => {
418
+ if (route && !!squid && signer.isSuccess && signer.data) {
419
+ const txResponse = (await squid.executeRoute({
420
+ signer: signer.data,
421
+ route,
422
+ executionSettings: {
423
+ infiniteApproval: config.infiniteApproval,
424
+ },
425
+ }));
426
+ const hash = await getTransactionHash(activeConnector, txResponse.hash);
427
+ // Dispatch event so it can be listened from outside the widget
428
+ WidgetEvents.getInstance().dispatchSwapExecuteCall(route, hash);
429
+ if (route.transactionRequest) {
430
+ const txParams = setTransactionState({
431
+ route,
432
+ txHash: hash,
433
+ nonce: txResponse.nonce,
434
+ userAddress: sourceUserAddress,
435
+ status: TransactionStatus.INITIAL_LOADING,
436
+ sourceStatus: TransactionStatus.ONGOING,
437
+ axelarUrl: undefined,
438
+ });
439
+ if (txParams) {
440
+ persistTransaction(txParams);
441
+ }
442
+ }
443
+ try {
444
+ const response = await txResponse.wait();
445
+ return response;
446
+ }
447
+ catch (error) {
448
+ return handleTransactionReplacementError({
449
+ error,
450
+ route,
451
+ status: TransactionStatus.INITIAL_LOADING,
452
+ sourceStatus: TransactionStatus.ONGOING,
453
+ userAddress: sourceUserAddress,
454
+ axelarUrl: undefined,
455
+ });
456
+ }
457
+ }
458
+ throw new Error("Need all parameters");
459
+ });
460
+ /**
461
+ * Execute cross chain swap with selected tokens
462
+ * getRoute should be called before this mutation
463
+ */
464
+ const swapQuery = useMutation(async (route) => {
465
+ const sourceChain = chains?.find((chain) => chain.chainId == route?.params?.fromChain);
466
+ if (sourceChain?.chainType === ChainType.COSMOS) {
467
+ return swapQueryCosmos.mutateAsync(route);
468
+ }
469
+ if (sourceChain?.chainType === ChainType.EVM) {
470
+ return swapQueryEvm.mutateAsync(route);
471
+ }
472
+ throw new Error("Invalid parameters or chain not found");
473
+ }, {
474
+ onError: (error) => {
475
+ const { currentTransaction: currentTx } = useSquidStore.getState();
476
+ const errorObject = getTransactionError(error);
477
+ useSquidStore.setState({
478
+ currentTransaction: {
479
+ ...currentTx,
480
+ status: TransactionStatus.ERROR,
481
+ sourceStatus: TransactionStatus.ERROR,
482
+ error: errorObject,
483
+ },
484
+ });
485
+ if (currentTx?.transactionId &&
486
+ errorObject?.type === TransactionErrorType.CALL_EXCEPTION) {
487
+ usePersistStore.setState({
488
+ transactionsHistory: updateTransactionHistoryStatus(currentTransaction?.transactionId, TransactionStatus.ERROR, usePersistStore.getState().transactionsHistory, undefined),
489
+ });
490
+ }
491
+ },
492
+ onSuccess: () => {
493
+ const { currentTransaction: currentTx } = useSquidStore.getState();
494
+ queryClient.invalidateQueries(keys({}).balances());
495
+ useSquidStore.setState({
496
+ currentTransaction: {
497
+ ...currentTx,
498
+ sourceStatus: TransactionStatus.SUCCESS,
499
+ status: isSameChainSwap
500
+ ? TransactionStatus.SUCCESS
501
+ : TransactionStatus.ONGOING,
502
+ },
503
+ });
504
+ },
505
+ });
506
+ return {
507
+ routeApproved,
508
+ approveRoute,
509
+ swapQuery,
510
+ currentTransaction,
511
+ fromToken,
512
+ toToken,
513
+ squidRoute,
514
+ fromPrice,
515
+ toPrice,
516
+ toChain,
517
+ fromChain,
518
+ mainExplorerUrl,
519
+ };
520
+ };
521
+ //# sourceMappingURL=useTransaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTransaction.js","sourceRoot":"","sources":["../../../src/hooks/transaction/useTransaction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare const useUserParams: () => {
2
+ gasEnabled: boolean | undefined;
3
+ expressEnabled: boolean | undefined;
4
+ expressSupportedForThisRoute: boolean;
5
+ getGasOnDestSupportedForThisRoute: boolean | undefined;
6
+ };
@@ -0,0 +1,41 @@
1
+ import { useSquidStore } from "./../../hooks/store/useSquidStore";
2
+ import { useSwap } from "./../../hooks/swap/useSwap";
3
+ import { ChainType } from "@0xsquid/sdk/dist/types";
4
+ import { useMemo } from "react";
5
+ export const useUserParams = () => {
6
+ const { config } = useSquidStore();
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
+ const gasEnabled = useMemo(() => config.enableGetGasOnDestination && getGasOnDestSupportedForThisRoute, [config.enableGetGasOnDestination, getGasOnDestSupportedForThisRoute]);
29
+ // =============
30
+ // BOOST
31
+ // =============
32
+ const expressSupportedForThisRoute = useMemo(() => toChain?.chainType !== ChainType.COSMOS, [toChain?.chainType]);
33
+ const expressEnabled = useMemo(() => expressSupportedForThisRoute && config.enableExpress, [config.enableExpress, expressSupportedForThisRoute]);
34
+ return {
35
+ gasEnabled,
36
+ expressEnabled,
37
+ expressSupportedForThisRoute,
38
+ getGasOnDestSupportedForThisRoute,
39
+ };
40
+ };
41
+ //# 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,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,EAAE;IAChC,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,CAAC;IACnC,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,MAAM,UAAU,GAAG,OAAO,CACxB,GAAG,EAAE,CAAC,MAAM,CAAC,yBAAyB,IAAI,iCAAiC,EAC3E,CAAC,MAAM,CAAC,yBAAyB,EAAE,iCAAiC,CAAC,CACtE,CAAC;IAEF,kBAAkB;IAClB,cAAc;IACd,kBAAkB;IAClB,MAAM,4BAA4B,GAAG,OAAO,CAC1C,GAAG,EAAE,CAAC,OAAO,EAAE,SAAS,KAAK,SAAS,CAAC,MAAM,EAC7C,CAAC,OAAO,EAAE,SAAS,CAAC,CACrB,CAAC;IAEF,MAAM,cAAc,GAAG,OAAO,CAC5B,GAAG,EAAE,CAAC,4BAA4B,IAAI,MAAM,CAAC,aAAa,EAC1D,CAAC,MAAM,CAAC,aAAa,EAAE,4BAA4B,CAAC,CACrD,CAAC;IAEF,OAAO;QACL,UAAU;QACV,cAAc;QACd,4BAA4B;QAC5B,iCAAiC;KAClC,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ChainData, Token } from "@0xsquid/sdk/dist/types";
2
+ export declare const useAddToken: (chainToCompare: ChainData | undefined, tokenToCompare: Token | undefined) => {
3
+ addToken: import("@tanstack/react-query").UseMutationResult<boolean, unknown, void | Token, unknown>;
4
+ };
@@ -0,0 +1,45 @@
1
+ import { ChainType } from "@0xsquid/sdk/dist/types";
2
+ import { useMutation } from "@tanstack/react-query";
3
+ import { useAccount, useNetwork, useSwitchNetwork } from "wagmi";
4
+ export const useAddToken = (chainToCompare, tokenToCompare) => {
5
+ const { chain: currentEvmChain } = useNetwork();
6
+ const { connector } = useAccount();
7
+ const { switchNetworkAsync } = useSwitchNetwork({
8
+ throwForSwitchChainNotSupported: true,
9
+ });
10
+ /**
11
+ * Add token to wallet
12
+ */
13
+ const addToken = useMutation(async (tokenToAdd) => {
14
+ const token = tokenToAdd ?? tokenToCompare;
15
+ if (token && chainToCompare?.chainType === ChainType.EVM) {
16
+ const provider = await connector?.getProvider();
17
+ // Switch network if needed
18
+ if (currentEvmChain?.id.toString() !== token?.chainId) {
19
+ await switchNetworkAsync?.(+token.chainId);
20
+ // Metamask is not popping the second modal if we don't wait a bit
21
+ // eslint-disable-next-line no-promise-executor-return
22
+ await new Promise((resolve) => setTimeout(resolve, 100));
23
+ }
24
+ // Add token to wallet
25
+ provider.request({
26
+ method: "wallet_watchAsset",
27
+ params: {
28
+ type: "ERC20",
29
+ options: {
30
+ address: token?.address,
31
+ symbol: token?.symbol,
32
+ decimals: token?.decimals,
33
+ image: token?.logoURI,
34
+ },
35
+ },
36
+ });
37
+ }
38
+ // TODO: Implement keplr add token
39
+ return false;
40
+ });
41
+ return {
42
+ addToken,
43
+ };
44
+ };
45
+ //# sourceMappingURL=useAddToken.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAddToken.js","sourceRoot":"","sources":["../../../src/hooks/wallet/useAddToken.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AAEjE,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,cAAqC,EACrC,cAAiC,EACjC,EAAE;IACF,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,UAAU,EAAE,CAAC;IAChD,MAAM,EAAE,SAAS,EAAE,GAAG,UAAU,EAAE,CAAC;IAEnC,MAAM,EAAE,kBAAkB,EAAE,GAAG,gBAAgB,CAAC;QAC9C,+BAA+B,EAAE,IAAI;KACtC,CAAC,CAAC;IAEH;;OAEG;IACH,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,EAAE,UAAwB,EAAE,EAAE;QAC9D,MAAM,KAAK,GAAG,UAAU,IAAI,cAAc,CAAC;QAC3C,IAAI,KAAK,IAAI,cAAc,EAAE,SAAS,KAAK,SAAS,CAAC,GAAG,EAAE,CAAC;YACzD,MAAM,QAAQ,GAAG,MAAM,SAAS,EAAE,WAAW,EAAE,CAAC;YAEhD,2BAA2B;YAC3B,IAAI,eAAe,EAAE,EAAE,CAAC,QAAQ,EAAE,KAAK,KAAK,EAAE,OAAO,EAAE,CAAC;gBACtD,MAAM,kBAAkB,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC3C,kEAAkE;gBAClE,sDAAsD;gBACtD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;YAC3D,CAAC;YACD,sBAAsB;YACtB,QAAQ,CAAC,OAAO,CAAC;gBACf,MAAM,EAAE,mBAAmB;gBAC3B,MAAM,EAAE;oBACN,IAAI,EAAE,OAAO;oBACb,OAAO,EAAE;wBACP,OAAO,EAAE,KAAK,EAAE,OAAO;wBACvB,MAAM,EAAE,KAAK,EAAE,MAAM;wBACrB,QAAQ,EAAE,KAAK,EAAE,QAAQ;wBACzB,KAAK,EAAE,KAAK,EAAE,OAAO;qBACtB;iBACF;aACF,CAAC,CAAC;QACL,CAAC;QACD,kCAAkC;QAClC,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,QAAQ;KACT,CAAC;AACJ,CAAC,CAAC"}