@0xsquid/react-hooks 6.4.3 → 6.4.4-sui-beta.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 (112) hide show
  1. package/dist/core/connectors/bitcoin/errors/index.d.ts +2 -1
  2. package/dist/core/connectors/bitcoin/errors/index.js +1 -1
  3. package/dist/core/connectors/bitcoin/errors/index.js.map +1 -1
  4. package/dist/core/constants.d.ts +4 -3
  5. package/dist/core/constants.js +21 -3
  6. package/dist/core/constants.js.map +1 -1
  7. package/dist/core/index.d.ts +1 -1
  8. package/dist/core/index.js +1 -1
  9. package/dist/core/index.js.map +1 -1
  10. package/dist/core/multicall3.js.map +1 -1
  11. package/dist/core/providers/CosmosProvider.d.ts +1 -1
  12. package/dist/core/providers/CosmosProvider.js.map +1 -1
  13. package/dist/core/queries/queries-keys.d.ts +4 -4
  14. package/dist/core/types/error.d.ts +0 -1
  15. package/dist/core/types/error.js.map +1 -1
  16. package/dist/core/types/rpc.d.ts +10 -0
  17. package/dist/core/types/rpc.js +2 -0
  18. package/dist/core/types/rpc.js.map +1 -0
  19. package/dist/core/types/sui.d.ts +8 -0
  20. package/dist/core/types/sui.js +2 -0
  21. package/dist/core/types/sui.js.map +1 -0
  22. package/dist/core/types/transaction.d.ts +0 -1
  23. package/dist/core/types/wallet.d.ts +10 -2
  24. package/dist/core/types/wallet.js.map +1 -1
  25. package/dist/core/wallets.js +3 -0
  26. package/dist/core/wallets.js.map +1 -1
  27. package/dist/hooks/chains/useSquidChains.js +1 -1
  28. package/dist/hooks/chains/useSquidChains.js.map +1 -1
  29. package/dist/hooks/cosmos/useCosmos.js +5 -15
  30. package/dist/hooks/cosmos/useCosmos.js.map +1 -1
  31. package/dist/hooks/index.d.ts +1 -0
  32. package/dist/hooks/index.js +1 -0
  33. package/dist/hooks/index.js.map +1 -1
  34. package/dist/hooks/store/useWalletStore.js +5 -6
  35. package/dist/hooks/store/useWalletStore.js.map +1 -1
  36. package/dist/hooks/sui/useSui.d.ts +7 -0
  37. package/dist/hooks/sui/useSui.js +16 -0
  38. package/dist/hooks/sui/useSui.js.map +1 -0
  39. package/dist/hooks/swap/useSwap.js +9 -3
  40. package/dist/hooks/swap/useSwap.js.map +1 -1
  41. package/dist/hooks/tokens/useAllConnectedWalletBalances.js +12 -1
  42. package/dist/hooks/tokens/useAllConnectedWalletBalances.js.map +1 -1
  43. package/dist/hooks/tokens/useAllTokensWithBalanceForChainType.d.ts +4 -5
  44. package/dist/hooks/tokens/useAllTokensWithBalanceForChainType.js +30 -16
  45. package/dist/hooks/tokens/useAllTokensWithBalanceForChainType.js.map +1 -1
  46. package/dist/hooks/tokens/useBalance.d.ts +18 -246
  47. package/dist/hooks/tokens/useBalance.js +63 -25
  48. package/dist/hooks/tokens/useBalance.js.map +1 -1
  49. package/dist/hooks/tokens/useMultiChainBalance.d.ts +2 -2
  50. package/dist/hooks/tokens/useMultiChainBalance.js +38 -35
  51. package/dist/hooks/tokens/useMultiChainBalance.js.map +1 -1
  52. package/dist/hooks/tokens/useNativeBalance.d.ts +16 -18
  53. package/dist/hooks/tokens/useNativeBalance.js +121 -56
  54. package/dist/hooks/tokens/useNativeBalance.js.map +1 -1
  55. package/dist/hooks/tokens/useNativeTokenForChain.js +6 -4
  56. package/dist/hooks/tokens/useNativeTokenForChain.js.map +1 -1
  57. package/dist/hooks/tokens/useSquidTokens.d.ts +2 -11
  58. package/dist/hooks/tokens/useSquidTokens.js +8 -16
  59. package/dist/hooks/tokens/useSquidTokens.js.map +1 -1
  60. package/dist/hooks/transaction/useEstimate.js +1 -1
  61. package/dist/hooks/transaction/useEstimate.js.map +1 -1
  62. package/dist/hooks/transaction/useExecuteTransaction.d.ts +0 -2
  63. package/dist/hooks/transaction/useExecuteTransaction.js +27 -36
  64. package/dist/hooks/transaction/useExecuteTransaction.js.map +1 -1
  65. package/dist/hooks/transaction/useGetRoute.d.ts +7 -8
  66. package/dist/hooks/transaction/useGetRoute.js +2 -2
  67. package/dist/hooks/transaction/useGetRoute.js.map +1 -1
  68. package/dist/hooks/transaction/useSingleTransaction.js +1 -1
  69. package/dist/hooks/transaction/useSingleTransaction.js.map +1 -1
  70. package/dist/hooks/user/useUserParams.js +1 -1
  71. package/dist/hooks/user/useUserParams.js.map +1 -1
  72. package/dist/hooks/wallet/useIntegratorContext.js +1 -1
  73. package/dist/hooks/wallet/useIntegratorContext.js.map +1 -1
  74. package/dist/hooks/wallet/useMultiChainWallet.d.ts +1 -3
  75. package/dist/hooks/wallet/useMultiChainWallet.js +32 -21
  76. package/dist/hooks/wallet/useMultiChainWallet.js.map +1 -1
  77. package/dist/hooks/wallet/useSigner.d.ts +2 -2
  78. package/dist/hooks/wallet/useSigner.js +32 -3
  79. package/dist/hooks/wallet/useSigner.js.map +1 -1
  80. package/dist/hooks/wallet/useWallet.d.ts +1 -1
  81. package/dist/hooks/wallet/useWallet.js +14 -5
  82. package/dist/hooks/wallet/useWallet.js.map +1 -1
  83. package/dist/provider/index.d.ts +1 -1
  84. package/dist/provider/index.js +6 -6
  85. package/dist/provider/index.js.map +1 -1
  86. package/dist/services/external/rpcService.d.ts +7 -3
  87. package/dist/services/external/rpcService.js +39 -11
  88. package/dist/services/external/rpcService.js.map +1 -1
  89. package/dist/services/external/suiRpcClient.d.ts +14 -0
  90. package/dist/services/external/suiRpcClient.js +44 -0
  91. package/dist/services/external/suiRpcClient.js.map +1 -0
  92. package/dist/services/internal/assetsService.d.ts +2 -2
  93. package/dist/services/internal/assetsService.js +106 -4
  94. package/dist/services/internal/assetsService.js.map +1 -1
  95. package/dist/services/internal/cosmosService.d.ts +3 -13
  96. package/dist/services/internal/cosmosService.js +1 -1
  97. package/dist/services/internal/cosmosService.js.map +1 -1
  98. package/dist/services/internal/errorService.d.ts +15 -0
  99. package/dist/services/internal/errorService.js +9 -3
  100. package/dist/services/internal/errorService.js.map +1 -1
  101. package/dist/services/internal/evmService.d.ts +2 -5
  102. package/dist/services/internal/evmService.js.map +1 -1
  103. package/dist/services/internal/solanaService.d.ts +2 -5
  104. package/dist/services/internal/solanaService.js.map +1 -1
  105. package/dist/services/internal/suiService.d.ts +9 -0
  106. package/dist/services/internal/suiService.js +50 -0
  107. package/dist/services/internal/suiService.js.map +1 -0
  108. package/dist/services/internal/transactionService.d.ts +0 -1
  109. package/dist/services/internal/walletService.d.ts +20 -11
  110. package/dist/services/internal/walletService.js +24 -20
  111. package/dist/services/internal/walletService.js.map +1 -1
  112. package/package.json +5 -2
@@ -1,39 +1,46 @@
1
1
  import { ChainType } from "@0xsquid/squid-types";
2
2
  import { useQuery } from "@tanstack/react-query";
3
- import { useBalance, useReadContract } from "wagmi";
3
+ import { useReadContract, useBalance as useWagmiBalance } from "wagmi";
4
+ import { useMemo } from "react";
4
5
  import { erc20Abi } from "viem";
5
6
  import { useCosmosContext } from "../../core";
6
7
  import { nativeEvmTokenAddress } from "../../core/constants";
7
8
  import { keys } from "../../core/queries/queries-keys";
8
9
  import { formatBNToReadable, isCosmosAddressValid } from "../../services";
9
- import { getCosmosTokenBalance, getSolanaTokenBalance, } from "../../services/external/rpcService";
10
+ import { getCosmosTokenBalance, getSolanaTokenBalance, getSuiTokenBalance, } from "../../services/external/rpcService";
11
+ import { isSuiAddressValid } from "../../services/internal/suiService";
10
12
  import { useWallet } from "../wallet/useWallet";
11
13
  import { useBitcoinNativeBalance } from "./useNativeBalance";
12
14
  const DEFAULT_REFRESH_INTERVAL_MS = 15000;
13
15
  export const useEvmBalance = ({ chain, token, userAddress, enabled = true, refreshIntervalMs = DEFAULT_REFRESH_INTERVAL_MS, }) => {
14
- const { isConnected } = useWallet();
16
+ const { isChainTypeConnected } = useWallet();
15
17
  const isNativeToken = token?.address.toLowerCase() === nativeEvmTokenAddress.toLowerCase();
16
18
  const userAddressParsed = userAddress;
17
19
  // Only fetch using useBalance if it's a native token
18
- const { data: nativeBalance } = useBalance({
20
+ const { data: nativeBalance, isLoading: isNativeTokenLoading } = useWagmiBalance({
19
21
  address: userAddressParsed,
20
22
  chainId: Number(chain?.chainId),
21
23
  query: {
22
- enabled: isConnected(ChainType.EVM) && enabled && !!userAddress && isNativeToken,
24
+ enabled: enabled &&
25
+ !!userAddress &&
26
+ isNativeToken &&
27
+ !!chain &&
28
+ chain.chainType === ChainType.EVM &&
29
+ isChainTypeConnected(chain.chainType),
23
30
  refetchInterval: refreshIntervalMs,
24
31
  retry: 2,
25
32
  },
26
33
  });
27
34
  // Only fetch using useReadContract if it's not a native token
28
35
  // This is temporary, because of wagmi error: https://github.com/wevm/wagmi/issues/4353
29
- const { data: erc20Balance } = useReadContract({
36
+ const { data: erc20Balance, isLoading: isErc20Loading } = useReadContract({
30
37
  address: token?.address,
31
38
  abi: erc20Abi,
32
39
  functionName: "balanceOf",
33
40
  args: [userAddressParsed],
34
41
  chainId: Number(chain?.chainId),
35
42
  query: {
36
- enabled: isConnected(ChainType.EVM) &&
43
+ enabled: isChainTypeConnected(ChainType.EVM) &&
37
44
  enabled &&
38
45
  !!userAddress &&
39
46
  !isNativeToken,
@@ -42,41 +49,44 @@ export const useEvmBalance = ({ chain, token, userAddress, enabled = true, refre
42
49
  },
43
50
  });
44
51
  const balance = isNativeToken ? nativeBalance?.value : erc20Balance;
45
- const formattedBalance = formatBNToReadable(balance ?? BigInt(0), token?.decimals ?? 18);
46
- return { balance: formattedBalance };
52
+ const isLoading = isNativeToken ? isNativeTokenLoading : isErc20Loading;
53
+ const formattedBalance = balance != null && token?.decimals != null
54
+ ? formatBNToReadable(balance, token.decimals)
55
+ : "0";
56
+ return { balance: formattedBalance, isLoading };
47
57
  };
48
- export const useCosmosBalance = ({ chainData, token, userAddress, enabled = true, refreshIntervalMs = DEFAULT_REFRESH_INTERVAL_MS, }) => {
58
+ export const useCosmosBalance = ({ chain, token, userAddress, enabled = true, refreshIntervalMs = DEFAULT_REFRESH_INTERVAL_MS, }) => {
49
59
  const { isConnected } = useCosmosContext();
50
- const query = useQuery({
51
- queryKey: keys().balance(chainData?.chainId, token?.address, userAddress),
60
+ const { data: balance = "0", isLoading } = useQuery({
61
+ queryKey: keys().balance(chain?.chainId, token?.address, userAddress),
52
62
  queryFn: async () => {
53
- if (!userAddress || !token || chainData?.chainType !== ChainType.COSMOS) {
63
+ if (!userAddress || !token || chain?.chainType !== ChainType.COSMOS) {
54
64
  return "0";
55
65
  }
56
- const isAddressValid = isCosmosAddressValid(chainData.bech32Config.bech32PrefixAccAddr, userAddress);
66
+ const isAddressValid = isCosmosAddressValid(chain.bech32Config.bech32PrefixAccAddr, userAddress);
57
67
  if (!isAddressValid)
58
68
  return "0";
59
- const balance = await getCosmosTokenBalance(chainData, userAddress, token.address);
60
- return formatBNToReadable(balance, token.decimals);
69
+ const balanceBn = await getCosmosTokenBalance(chain, userAddress, token.address);
70
+ return formatBNToReadable(balanceBn, token.decimals);
61
71
  },
62
72
  enabled: isConnected &&
63
73
  enabled &&
64
74
  !!userAddress &&
65
75
  !!token &&
66
- chainData?.chainType === ChainType.COSMOS,
76
+ chain?.chainType === ChainType.COSMOS,
67
77
  refetchInterval: refreshIntervalMs,
68
78
  retry: 2,
69
79
  });
70
- return { ...query, balance: query.data ?? "0" };
80
+ return { balance, isLoading };
71
81
  };
72
82
  export const useSolanaBalance = ({ chain, token, userAddress, enabled = true, refreshIntervalMs = DEFAULT_REFRESH_INTERVAL_MS, }) => {
73
- const query = useQuery({
83
+ const { data: balance = "0", isLoading } = useQuery({
74
84
  queryKey: keys().balance(chain?.chainId, token?.address, userAddress),
75
85
  queryFn: async () => {
76
86
  if (!userAddress || !token)
77
87
  return "0";
78
- const balance = await getSolanaTokenBalance(userAddress, token.address);
79
- return formatBNToReadable(balance, token.decimals);
88
+ const balanceBn = await getSolanaTokenBalance(userAddress, token.address);
89
+ return formatBNToReadable(balanceBn, token.decimals);
80
90
  },
81
91
  enabled: enabled &&
82
92
  !!userAddress &&
@@ -85,11 +95,39 @@ export const useSolanaBalance = ({ chain, token, userAddress, enabled = true, re
85
95
  refetchInterval: refreshIntervalMs,
86
96
  retry: 2,
87
97
  });
88
- return { ...query, balance: query.data ?? "0" };
98
+ return { balance, isLoading };
89
99
  };
90
100
  // TODO: implement fetching balances for all bitcoin tokens
91
- export const useBitcoinBalance = ({ address, chain, }) => {
92
- const { data: balance } = useBitcoinNativeBalance(chain, address);
93
- return { balance };
101
+ export const useBitcoinBalance = ({ userAddress, chain, }) => {
102
+ const { balance: balanceBn, isLoading } = useBitcoinNativeBalance({
103
+ address: userAddress,
104
+ chain,
105
+ });
106
+ const balance = useMemo(() => {
107
+ if (!balanceBn)
108
+ return "0";
109
+ return formatBNToReadable(balanceBn?.value, balanceBn?.decimals);
110
+ }, [balanceBn]);
111
+ return { balance, isLoading };
112
+ };
113
+ export const useSuiBalance = ({ chain, token, userAddress, enabled = true, refreshIntervalMs = DEFAULT_REFRESH_INTERVAL_MS, }) => {
114
+ const { data: balance = "0", isLoading } = useQuery({
115
+ queryKey: keys().balance(chain?.chainId, token?.address, userAddress),
116
+ queryFn: async () => {
117
+ if (!userAddress || !token || !chain)
118
+ return "0";
119
+ const balanceBn = await getSuiTokenBalance(userAddress, token.address, chain.rpc);
120
+ return formatBNToReadable(balanceBn, token.decimals) ?? "0";
121
+ },
122
+ enabled: enabled &&
123
+ !!userAddress &&
124
+ !!token &&
125
+ !!chain?.rpc &&
126
+ chain?.chainType === ChainType.SUI &&
127
+ isSuiAddressValid(userAddress),
128
+ refetchInterval: refreshIntervalMs,
129
+ retry: 2,
130
+ });
131
+ return { balance, isLoading };
94
132
  };
95
133
  //# sourceMappingURL=useBalance.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useBalance.js","sourceRoot":"","sources":["../../../src/hooks/tokens/useBalance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useBalance.js","sourceRoot":"","sources":["../../../src/hooks/tokens/useBalance.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { ChainData, Token } from "@0xsquid/squid-types";
2
2
  /**
3
- * Exposes a hook to get balance depending on the chain type (EVM or Cosmos)
3
+ * Hook to get balance depending on the chain type
4
4
  * @param {ChainData} chain
5
5
  * @param {Token} token
6
6
  * @param {string} userAddress
@@ -13,5 +13,5 @@ export declare const useMultiChainBalance: ({ chain, token, userAddress, enabled
13
13
  userAddress?: string | undefined;
14
14
  enabled?: boolean | undefined;
15
15
  }) => {
16
- balance: string | undefined;
16
+ balance: string;
17
17
  };
@@ -1,65 +1,68 @@
1
1
  import { ChainType } from "@0xsquid/squid-types";
2
- import { useBitcoinBalance, useCosmosBalance, useEvmBalance, useSolanaBalance, } from "../../hooks/tokens/useBalance";
2
+ import { useMemo } from "react";
3
+ import { useBitcoinBalance, useCosmosBalance, useEvmBalance, useSolanaBalance, useSuiBalance, } from "./useBalance";
3
4
  /**
4
- * Exposes a hook to get balance depending on the chain type (EVM or Cosmos)
5
+ * Hook to get balance depending on the chain type
5
6
  * @param {ChainData} chain
6
7
  * @param {Token} token
7
8
  * @param {string} userAddress
8
9
  * @param {boolean} enabled
9
10
  * @returns balance as string
10
11
  */
11
- export const useMultiChainBalance = ({ chain, token, userAddress = "", enabled = true, }) => {
12
- /**
13
- * Get balance for EVM
14
- */
12
+ export const useMultiChainBalance = ({ chain, token, userAddress, enabled = true, }) => {
15
13
  const { balance: evmBalance } = useEvmBalance({
16
- chain: chain,
14
+ chain,
17
15
  token,
18
16
  userAddress,
19
17
  enabled: chain?.chainType === ChainType.EVM && enabled,
20
18
  });
21
- /**
22
- * Get balance for Cosmos
23
- */
24
19
  const { balance: cosmosBalance } = useCosmosBalance({
25
- chainData: chain,
20
+ chain,
26
21
  token,
27
22
  userAddress,
28
23
  enabled: chain?.chainType === ChainType.COSMOS && enabled,
29
24
  });
30
- /**
31
- * Get balance for Bitcoin
32
- */
33
25
  const { balance: bitcoinBalance } = useBitcoinBalance({
34
26
  chain,
35
- address: userAddress,
27
+ token,
28
+ userAddress,
29
+ enabled: chain?.chainType === ChainType.BTC && enabled,
36
30
  });
37
- /**
38
- * Get balance for Solana
39
- */
40
31
  const { balance: solanaBalance } = useSolanaBalance({
41
32
  chain,
42
33
  token,
43
34
  userAddress,
44
35
  enabled: chain?.chainType === ChainType.SOLANA && enabled,
45
36
  });
46
- let balance;
47
- switch (chain?.chainType) {
48
- case ChainType.EVM:
49
- balance = evmBalance;
50
- break;
51
- case ChainType.COSMOS:
52
- balance = cosmosBalance;
53
- break;
54
- case ChainType.BTC:
55
- balance = bitcoinBalance;
56
- break;
57
- case ChainType.SOLANA:
58
- balance = solanaBalance;
59
- break;
60
- default:
61
- balance = undefined;
62
- }
37
+ const { balance: suiBalance } = useSuiBalance({
38
+ chain,
39
+ token,
40
+ userAddress,
41
+ enabled: chain?.chainType === ChainType.SUI && enabled,
42
+ });
43
+ const balance = useMemo(() => {
44
+ if (!chain?.chainType)
45
+ return "0";
46
+ switch (chain.chainType) {
47
+ case ChainType.EVM:
48
+ return evmBalance;
49
+ case ChainType.COSMOS:
50
+ return cosmosBalance;
51
+ case ChainType.BTC:
52
+ return bitcoinBalance;
53
+ case ChainType.SOLANA:
54
+ return solanaBalance;
55
+ case ChainType.SUI:
56
+ return suiBalance;
57
+ }
58
+ }, [
59
+ chain?.chainType,
60
+ evmBalance,
61
+ cosmosBalance,
62
+ bitcoinBalance,
63
+ solanaBalance,
64
+ suiBalance,
65
+ ]);
63
66
  return { balance };
64
67
  };
65
68
  //# sourceMappingURL=useMultiChainBalance.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useMultiChainBalance.js","sourceRoot":"","sources":["../../../src/hooks/tokens/useMultiChainBalance.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,gBAAgB,GACjB,MAAM,+BAA+B,CAAC;AAEvC;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,EACnC,KAAK,EACL,KAAK,EACL,WAAW,GAAG,EAAE,EAChB,OAAO,GAAG,IAAI,GAMf,EAAE,EAAE;IACH;;OAEG;IACH,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,aAAa,CAAC;QAC5C,KAAK,EAAE,KAAiB;QACxB,KAAK;QACL,WAAW;QACX,OAAO,EAAE,KAAK,EAAE,SAAS,KAAK,SAAS,CAAC,GAAG,IAAI,OAAO;KACvD,CAAC,CAAC;IAEH;;OAEG;IACH,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,gBAAgB,CAAC;QAClD,SAAS,EAAE,KAAoB;QAC/B,KAAK;QACL,WAAW;QACX,OAAO,EAAE,KAAK,EAAE,SAAS,KAAK,SAAS,CAAC,MAAM,IAAI,OAAO;KAC1D,CAAC,CAAC;IAEH;;OAEG;IACH,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,iBAAiB,CAAC;QACpD,KAAK;QACL,OAAO,EAAE,WAAW;KACrB,CAAC,CAAC;IAEH;;OAEG;IACH,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,gBAAgB,CAAC;QAClD,KAAK;QACL,KAAK;QACL,WAAW;QACX,OAAO,EAAE,KAAK,EAAE,SAAS,KAAK,SAAS,CAAC,MAAM,IAAI,OAAO;KAC1D,CAAC,CAAC;IAEH,IAAI,OAA2B,CAAC;IAEhC,QAAQ,KAAK,EAAE,SAAS,EAAE;QACxB,KAAK,SAAS,CAAC,GAAG;YAChB,OAAO,GAAG,UAAU,CAAC;YACrB,MAAM;QACR,KAAK,SAAS,CAAC,MAAM;YACnB,OAAO,GAAG,aAAa,CAAC;YACxB,MAAM;QACR,KAAK,SAAS,CAAC,GAAG;YAChB,OAAO,GAAG,cAAc,CAAC;YACzB,MAAM;QACR,KAAK,SAAS,CAAC,MAAM;YACnB,OAAO,GAAG,aAAa,CAAC;YACxB,MAAM;QACR;YACE,OAAO,GAAG,SAAS,CAAC;KACvB;IAED,OAAO,EAAE,OAAO,EAAE,CAAC;AACrB,CAAC,CAAC"}
1
+ {"version":3,"file":"useMultiChainBalance.js","sourceRoot":"","sources":["../../../src/hooks/tokens/useMultiChainBalance.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,aAAa,GACd,MAAM,cAAc,CAAC;AAEtB;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,EACnC,KAAK,EACL,KAAK,EACL,WAAW,EACX,OAAO,GAAG,IAAI,GAMf,EAAE,EAAE;IACH,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,aAAa,CAAC;QAC5C,KAAK;QACL,KAAK;QACL,WAAW;QACX,OAAO,EAAE,KAAK,EAAE,SAAS,KAAK,SAAS,CAAC,GAAG,IAAI,OAAO;KACvD,CAAC,CAAC;IAEH,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,gBAAgB,CAAC;QAClD,KAAK;QACL,KAAK;QACL,WAAW;QACX,OAAO,EAAE,KAAK,EAAE,SAAS,KAAK,SAAS,CAAC,MAAM,IAAI,OAAO;KAC1D,CAAC,CAAC;IAEH,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,iBAAiB,CAAC;QACpD,KAAK;QACL,KAAK;QACL,WAAW;QACX,OAAO,EAAE,KAAK,EAAE,SAAS,KAAK,SAAS,CAAC,GAAG,IAAI,OAAO;KACvD,CAAC,CAAC;IAEH,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,gBAAgB,CAAC;QAClD,KAAK;QACL,KAAK;QACL,WAAW;QACX,OAAO,EAAE,KAAK,EAAE,SAAS,KAAK,SAAS,CAAC,MAAM,IAAI,OAAO;KAC1D,CAAC,CAAC;IAEH,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,aAAa,CAAC;QAC5C,KAAK;QACL,KAAK;QACL,WAAW;QACX,OAAO,EAAE,KAAK,EAAE,SAAS,KAAK,SAAS,CAAC,GAAG,IAAI,OAAO;KACvD,CAAC,CAAC;IAEH,MAAM,OAAO,GAAW,OAAO,CAAC,GAAG,EAAE;QACnC,IAAI,CAAC,KAAK,EAAE,SAAS;YAAE,OAAO,GAAG,CAAC;QAElC,QAAQ,KAAK,CAAC,SAAS,EAAE;YACvB,KAAK,SAAS,CAAC,GAAG;gBAChB,OAAO,UAAU,CAAC;YACpB,KAAK,SAAS,CAAC,MAAM;gBACnB,OAAO,aAAa,CAAC;YACvB,KAAK,SAAS,CAAC,GAAG;gBAChB,OAAO,cAAc,CAAC;YACxB,KAAK,SAAS,CAAC,MAAM;gBACnB,OAAO,aAAa,CAAC;YACvB,KAAK,SAAS,CAAC,GAAG;gBAChB,OAAO,UAAU,CAAC;SACrB;IACH,CAAC,EAAE;QACD,KAAK,EAAE,SAAS;QAChB,UAAU;QACV,aAAa;QACb,cAAc;QACd,aAAa;QACb,UAAU;KACX,CAAC,CAAC;IAEH,OAAO,EAAE,OAAO,EAAE,CAAC;AACrB,CAAC,CAAC"}
@@ -1,24 +1,22 @@
1
1
  import { ChainData } from "@0xsquid/squid-types";
2
- export declare const useBitcoinNativeBalance: (chain?: ChainData, address?: string) => {
3
- data: string | undefined;
2
+ interface Balance {
3
+ decimals: number;
4
+ value: bigint;
5
+ }
6
+ interface UseNativeBalanceResult {
7
+ balance: Balance | undefined;
4
8
  isLoading: boolean;
5
- nativeToken: import("@0xsquid/squid-types").Token | undefined;
6
- };
7
- export declare const useSolanaNativeBalance: (chain?: ChainData, address?: string) => {
8
- data: string | undefined;
9
- isLoading: boolean;
10
- nativeToken: import("@0xsquid/squid-types").Token | undefined;
11
- };
9
+ }
10
+ interface UseNativeBalanceOptions {
11
+ chain: ChainData | undefined;
12
+ address: string | undefined;
13
+ }
14
+ export declare const useBitcoinNativeBalance: ({ chain, address, }: UseNativeBalanceOptions) => UseNativeBalanceResult;
15
+ export declare const useSolanaNativeBalance: ({ chain, address, }: UseNativeBalanceOptions) => UseNativeBalanceResult;
16
+ export declare const useSuiNativeBalance: ({ address, chain, }: UseNativeBalanceOptions) => UseNativeBalanceResult;
12
17
  export declare const useNativeBalance: (chain?: ChainData) => {
13
- nativeBalance: {
14
- decimals: number;
15
- formatted: string;
16
- symbol: string;
17
- value: bigint;
18
- } | {
19
- decimals: number;
20
- value: bigint;
21
- } | undefined;
18
+ nativeBalance: Balance | undefined;
22
19
  nativeBalanceFormatted: string | undefined;
23
20
  isLoading: boolean;
24
21
  };
22
+ export {};
@@ -1,4 +1,4 @@
1
- import { ChainType, } from "@0xsquid/squid-types";
1
+ import { ChainType } from "@0xsquid/squid-types";
2
2
  import { useQuery } from "@tanstack/react-query";
3
3
  import { useMemo } from "react";
4
4
  import { useBalance as useWagmiBalance } from "wagmi";
@@ -8,37 +8,58 @@ import { formatBNToReadable, isWalletAddressValid, parseToBigInt, } from "../../
8
8
  import { getBitcoinNativeBalance, getSolanaNativeBalance, } from "../../services/external/rpcService";
9
9
  import { useCosmosForChain } from "../cosmos/useCosmosForChain";
10
10
  import { useWallet } from "../wallet/useWallet";
11
- import { useCosmosBalance } from "./useBalance";
11
+ import { useCosmosBalance, useSuiBalance } from "./useBalance";
12
12
  import { useNativeTokenForChain } from "./useNativeTokenForChain";
13
- const useEvmNativeBalance = (chain, evmAddress) => {
14
- const { isConnected: isEvmConnected } = useWallet();
15
- return useWagmiBalance({
16
- address: evmAddress,
13
+ const useEvmNativeBalance = ({ address, chain, }) => {
14
+ const { isChainTypeConnected } = useWallet();
15
+ const { data: nativeEvmBalance, isLoading } = useWagmiBalance({
16
+ address: address,
17
17
  chainId: Number(chain?.chainId),
18
18
  query: {
19
- enabled: isEvmConnected(ChainType.EVM) && !!evmAddress,
19
+ enabled: isChainTypeConnected(ChainType.EVM) && !!address,
20
20
  refetchInterval: 10000,
21
21
  staleTime: 5000,
22
22
  refetchOnWindowFocus: true,
23
23
  refetchOnMount: true,
24
24
  },
25
25
  });
26
+ const balance = useMemo(() => {
27
+ if (nativeEvmBalance?.decimals && nativeEvmBalance?.value) {
28
+ return {
29
+ decimals: nativeEvmBalance.decimals,
30
+ value: nativeEvmBalance.value,
31
+ };
32
+ }
33
+ return;
34
+ }, [nativeEvmBalance?.decimals, nativeEvmBalance?.value]);
35
+ return {
36
+ balance,
37
+ isLoading,
38
+ };
26
39
  };
27
- const useCosmosNativeBalance = (chain, cosmosAddress) => {
40
+ const useCosmosNativeBalance = ({ address, chain, }) => {
28
41
  const { isConnected: isCosmosConnected } = useCosmosContext();
29
42
  const { nativeToken: nativeCosmosToken } = useNativeTokenForChain(chain);
30
- const { balance: nativeCosmosBalance, isLoading } = useCosmosBalance({
31
- chainData: chain,
43
+ const { balance: rawBalance, isLoading } = useCosmosBalance({
44
+ chain,
32
45
  token: nativeCosmosToken,
33
- userAddress: cosmosAddress,
46
+ userAddress: address,
34
47
  enabled: isCosmosConnected && chain?.chainType === ChainType.COSMOS,
35
48
  refreshIntervalMs: 10000,
36
49
  });
37
- return { nativeCosmosBalance, nativeCosmosToken, isLoading };
50
+ const balance = useMemo(() => {
51
+ if (nativeCosmosToken?.decimals && rawBalance) {
52
+ return {
53
+ decimals: nativeCosmosToken.decimals,
54
+ value: parseToBigInt(rawBalance, nativeCosmosToken.decimals),
55
+ };
56
+ }
57
+ }, [nativeCosmosToken?.decimals, rawBalance]);
58
+ return { balance, isLoading };
38
59
  };
39
- export const useBitcoinNativeBalance = (chain, address) => {
60
+ export const useBitcoinNativeBalance = ({ chain, address, }) => {
40
61
  const { nativeToken } = useNativeTokenForChain(chain);
41
- const { data, isLoading } = useQuery(keys().balance(chain?.chainId, nativeToken?.address, address), async () => {
62
+ const { data: rawBalance = "0", isLoading } = useQuery(keys().balance(chain?.chainId, nativeToken?.address, address), async () => {
42
63
  if (!address || !nativeToken)
43
64
  return "0";
44
65
  const balance = await getBitcoinNativeBalance(address);
@@ -52,15 +73,22 @@ export const useBitcoinNativeBalance = (chain, address) => {
52
73
  refetchOnWindowFocus: true,
53
74
  refetchOnMount: true,
54
75
  });
76
+ const balance = useMemo(() => {
77
+ if (nativeToken?.decimals && rawBalance) {
78
+ return {
79
+ decimals: nativeToken.decimals,
80
+ value: parseToBigInt(rawBalance, nativeToken.decimals),
81
+ };
82
+ }
83
+ }, [nativeToken?.decimals, rawBalance]);
55
84
  return {
56
- data,
85
+ balance,
57
86
  isLoading,
58
- nativeToken,
59
87
  };
60
88
  };
61
- export const useSolanaNativeBalance = (chain, address) => {
89
+ export const useSolanaNativeBalance = ({ chain, address, }) => {
62
90
  const { nativeToken } = useNativeTokenForChain(chain);
63
- const { data, isLoading } = useQuery(keys().balance(chain?.chainId, nativeToken?.address, address), async () => {
91
+ const { data: rawBalance, isLoading } = useQuery(keys().balance(chain?.chainId, nativeToken?.address, address), async () => {
64
92
  const balance = await getSolanaNativeBalance(address);
65
93
  return formatBNToReadable(balance, nativeToken.decimals);
66
94
  }, {
@@ -72,61 +100,99 @@ export const useSolanaNativeBalance = (chain, address) => {
72
100
  refetchOnWindowFocus: true,
73
101
  refetchOnMount: true,
74
102
  });
103
+ const balance = useMemo(() => {
104
+ if (nativeToken?.decimals && rawBalance) {
105
+ return {
106
+ decimals: nativeToken.decimals,
107
+ value: parseToBigInt(rawBalance, nativeToken.decimals),
108
+ };
109
+ }
110
+ }, [nativeToken?.decimals, rawBalance]);
75
111
  return {
76
- data,
112
+ balance,
113
+ isLoading,
114
+ };
115
+ };
116
+ export const useSuiNativeBalance = ({ address, chain, }) => {
117
+ const { nativeToken } = useNativeTokenForChain(chain);
118
+ const { balance: rawBalance, isLoading } = useSuiBalance({
119
+ chain,
120
+ token: nativeToken,
121
+ userAddress: address,
122
+ });
123
+ const balance = useMemo(() => {
124
+ if (nativeToken?.decimals && rawBalance) {
125
+ return {
126
+ decimals: nativeToken.decimals,
127
+ value: parseToBigInt(rawBalance, nativeToken.decimals),
128
+ };
129
+ }
130
+ }, [nativeToken?.decimals, rawBalance]);
131
+ return {
132
+ balance,
77
133
  isLoading,
78
- nativeToken,
79
134
  };
80
135
  };
81
136
  export const useNativeBalance = (chain) => {
82
137
  const { connectedAddresses } = useWallet();
83
138
  const { data: cosmosAddressForChain } = useCosmosForChain(chain);
84
- const { data: nativeEvmBalance, isLoading: isEvmLoading } = useEvmNativeBalance(chain, connectedAddresses[ChainType.EVM]);
85
- const { nativeCosmosBalance, nativeCosmosToken, isLoading: isCosmosLoading, } = useCosmosNativeBalance(chain, cosmosAddressForChain);
86
- const { data: nativeBitcoinBalance, isLoading: isBitcoinLoading, nativeToken: nativeBitcoinToken, } = useBitcoinNativeBalance(chain, connectedAddresses[ChainType.BTC]);
87
- const { data: nativeSolanaBalance, isLoading: isSolanaLoading, nativeToken: nativeSolanaToken, } = useSolanaNativeBalance(chain, connectedAddresses[ChainType.SOLANA]);
88
- const nativeBalance = useMemo(() => {
139
+ // Cosmos is a special case because the address changes on every chain
140
+ // so we can't use the default cosmos connected address
141
+ const { balance: nativeCosmosBalance, isLoading: isCosmosLoading } = useCosmosNativeBalance({
142
+ address: cosmosAddressForChain,
143
+ chain,
144
+ });
145
+ const { balance: nativeEvmBalance, isLoading: isEvmLoading } = useEvmNativeBalance({ address: connectedAddresses[ChainType.EVM], chain });
146
+ const { balance: nativeBitcoinBalance, isLoading: isBitcoinLoading } = useBitcoinNativeBalance({
147
+ address: connectedAddresses[ChainType.BTC],
148
+ chain,
149
+ });
150
+ const { balance: nativeSolanaBalance, isLoading: isSolanaLoading } = useSolanaNativeBalance({
151
+ address: connectedAddresses[ChainType.SOLANA],
152
+ chain,
153
+ });
154
+ const { balance: nativeSuiBalance, isLoading: isSuiLoading } = useSuiNativeBalance({
155
+ address: connectedAddresses[ChainType.SUI],
156
+ chain,
157
+ });
158
+ const { nativeBalance, nativeBalanceFormatted } = useMemo(() => {
159
+ let balance;
89
160
  switch (chain?.chainType) {
90
161
  case ChainType.EVM:
91
- return nativeEvmBalance?.decimals && nativeEvmBalance?.value
92
- ? nativeEvmBalance
93
- : undefined;
162
+ balance = nativeEvmBalance;
163
+ break;
94
164
  case ChainType.COSMOS:
95
- return nativeCosmosToken?.decimals && nativeCosmosBalance
96
- ? {
97
- decimals: nativeCosmosToken.decimals,
98
- value: parseToBigInt(nativeCosmosBalance, nativeCosmosToken.decimals),
99
- }
100
- : undefined;
165
+ balance = nativeCosmosBalance;
166
+ break;
101
167
  case ChainType.BTC:
102
- return nativeBitcoinBalance && nativeBitcoinToken?.decimals
103
- ? {
104
- decimals: nativeBitcoinToken.decimals,
105
- value: parseToBigInt(nativeBitcoinBalance, nativeBitcoinToken.decimals),
106
- }
107
- : undefined;
168
+ balance = nativeBitcoinBalance;
169
+ break;
108
170
  case ChainType.SOLANA:
109
- return nativeSolanaBalance && nativeSolanaToken?.decimals
110
- ? {
111
- decimals: nativeSolanaToken.decimals,
112
- value: parseToBigInt(nativeSolanaBalance, nativeSolanaToken.decimals),
113
- }
114
- : undefined;
115
- default:
116
- return undefined;
171
+ balance = nativeSolanaBalance;
172
+ break;
173
+ case ChainType.SUI:
174
+ balance = nativeSuiBalance;
175
+ break;
117
176
  }
177
+ const balanceFormatted = !!balance
178
+ ? formatBNToReadable(balance.value, balance.decimals)
179
+ : undefined;
180
+ return {
181
+ nativeBalance: balance,
182
+ nativeBalanceFormatted: balanceFormatted,
183
+ };
118
184
  }, [
119
185
  chain?.chainType,
120
186
  nativeEvmBalance,
121
- nativeCosmosToken?.decimals,
122
187
  nativeCosmosBalance,
123
- nativeBitcoinToken?.decimals,
124
188
  nativeBitcoinBalance,
125
189
  nativeSolanaBalance,
126
- nativeSolanaToken?.decimals,
190
+ nativeSuiBalance,
127
191
  ]);
128
192
  const isLoading = useMemo(() => {
129
- switch (chain?.chainType) {
193
+ if (!chain?.chainType)
194
+ return false;
195
+ switch (chain.chainType) {
130
196
  case ChainType.EVM:
131
197
  return isEvmLoading;
132
198
  case ChainType.COSMOS:
@@ -135,8 +201,8 @@ export const useNativeBalance = (chain) => {
135
201
  return isBitcoinLoading;
136
202
  case ChainType.SOLANA:
137
203
  return isSolanaLoading;
138
- default:
139
- return false;
204
+ case ChainType.SUI:
205
+ return isSuiLoading;
140
206
  }
141
207
  }, [
142
208
  chain?.chainType,
@@ -144,9 +210,8 @@ export const useNativeBalance = (chain) => {
144
210
  isCosmosLoading,
145
211
  isBitcoinLoading,
146
212
  isSolanaLoading,
213
+ isSuiLoading,
147
214
  ]);
148
- const nativeBalanceFormatted = nativeBalance &&
149
- formatBNToReadable(nativeBalance?.value, nativeBalance?.decimals);
150
215
  return { nativeBalance, nativeBalanceFormatted, isLoading };
151
216
  };
152
217
  //# sourceMappingURL=useNativeBalance.js.map