@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.
- package/dist/core/abis/ics20.json +128 -0
- package/dist/core/connectors/bitcoin/errors/index.js +22 -0
- package/dist/core/connectors/bitcoin/errors/index.js.map +1 -0
- package/dist/core/connectors/bitcoin/helpers.js +86 -0
- package/dist/core/connectors/bitcoin/helpers.js.map +1 -0
- package/dist/core/connectors/bitcoin/index.js +2 -0
- package/dist/core/connectors/bitcoin/index.js.map +1 -0
- package/dist/core/connectors/bitcoin/wallets/index.js +4 -0
- package/dist/core/connectors/bitcoin/wallets/index.js.map +1 -0
- package/dist/core/connectors/bitcoin/wallets/keplr.js +28 -0
- package/dist/core/connectors/bitcoin/wallets/keplr.js.map +1 -0
- package/dist/core/connectors/bitcoin/wallets/phantom.js +56 -0
- package/dist/core/connectors/bitcoin/wallets/phantom.js.map +1 -0
- package/dist/core/connectors/bitcoin/wallets/unisat.js +28 -0
- package/dist/core/connectors/bitcoin/wallets/unisat.js.map +1 -0
- package/dist/core/constants.js +144 -0
- package/dist/core/constants.js.map +1 -0
- package/dist/core/externalLinks.js +21 -0
- package/dist/core/externalLinks.js.map +1 -0
- package/dist/core/index.js +4 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/multicall3.js +442 -0
- package/dist/core/multicall3.js.map +1 -0
- package/dist/core/providers/CosmosProvider.js +13 -0
- package/dist/core/providers/CosmosProvider.js.map +1 -0
- package/dist/core/providers/SolanaProvider.js +15 -0
- package/dist/core/providers/SolanaProvider.js.map +1 -0
- package/dist/core/providers/SuiProvider.js +15 -0
- package/dist/core/providers/SuiProvider.js.map +1 -0
- package/dist/core/queries/queries-keys.d.ts +2 -2
- package/dist/core/queries/queries-keys.js +206 -0
- package/dist/core/queries/queries-keys.js.map +1 -0
- package/dist/core/queries/react-query-config.js +11 -0
- package/dist/core/queries/react-query-config.js.map +1 -0
- package/dist/core/types/config.d.ts +2 -0
- package/dist/core/types/config.js +2 -0
- package/dist/core/types/config.js.map +1 -0
- package/dist/core/types/dex.js +33 -0
- package/dist/core/types/dex.js.map +1 -0
- package/dist/core/types/error.js +12 -0
- package/dist/core/types/error.js.map +1 -0
- package/dist/core/types/event.d.ts +5 -0
- package/dist/core/types/event.js +2 -0
- package/dist/core/types/event.js.map +1 -0
- package/dist/core/types/index.js +2 -0
- package/dist/core/types/index.js.map +1 -0
- package/dist/core/types/rpc.js +2 -0
- package/dist/core/types/rpc.js.map +1 -0
- package/dist/core/types/sui.js +2 -0
- package/dist/core/types/sui.js.map +1 -0
- package/dist/core/types/swap.js +2 -0
- package/dist/core/types/swap.js.map +1 -0
- package/dist/core/types/tokens.js +2 -0
- package/dist/core/types/tokens.js.map +1 -0
- package/dist/core/types/transaction.js +41 -0
- package/dist/core/types/transaction.js.map +1 -0
- package/dist/core/types/wallet.js +26 -0
- package/dist/core/types/wallet.js.map +1 -0
- package/dist/core/wagmiConfig.js +60 -0
- package/dist/core/wagmiConfig.js.map +1 -0
- package/dist/core/wallets.js +549 -0
- package/dist/core/wallets.js.map +1 -0
- package/dist/hooks/analytics/useTrackSearchEmpty.d.ts +12 -0
- package/dist/hooks/analytics/useTrackSearchEmpty.js +22 -0
- package/dist/hooks/analytics/useTrackSearchEmpty.js.map +1 -0
- package/dist/hooks/chains/useSquidChains.js +107 -0
- package/dist/hooks/chains/useSquidChains.js.map +1 -0
- package/dist/hooks/client/useClient.js +6 -0
- package/dist/hooks/client/useClient.js.map +1 -0
- package/dist/hooks/cosmos/useCosmos.js +172 -0
- package/dist/hooks/cosmos/useCosmos.js.map +1 -0
- package/dist/hooks/cosmos/useCosmosForChain.js +33 -0
- package/dist/hooks/cosmos/useCosmosForChain.js.map +1 -0
- package/dist/hooks/index.d.ts +5 -5
- package/dist/hooks/index.js +45 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/navigation/useKeyboardNavigation.js +67 -0
- package/dist/hooks/navigation/useKeyboardNavigation.js.map +1 -0
- package/dist/hooks/query/useSquidQueryClient.js +23 -0
- package/dist/hooks/query/useSquidQueryClient.js.map +1 -0
- package/dist/hooks/solana/useSolana.js +104 -0
- package/dist/hooks/solana/useSolana.js.map +1 -0
- package/dist/hooks/squid/useSquid.js +55 -0
- package/dist/hooks/squid/useSquid.js.map +1 -0
- package/dist/hooks/store/useAddressBookStore.js +26 -0
- package/dist/hooks/store/useAddressBookStore.js.map +1 -0
- package/dist/hooks/store/useAssetsColorsStore.js +7 -0
- package/dist/hooks/store/useAssetsColorsStore.js.map +1 -0
- package/dist/hooks/store/useDepositAddressStore.js +12 -0
- package/dist/hooks/store/useDepositAddressStore.js.map +1 -0
- package/dist/hooks/store/useFavoriteTokensStore.js +28 -0
- package/dist/hooks/store/useFavoriteTokensStore.js.map +1 -0
- package/dist/hooks/store/useHistoryStore.js +41 -0
- package/dist/hooks/store/useHistoryStore.js.map +1 -0
- package/dist/hooks/store/useSquidStore.js +56 -0
- package/dist/hooks/store/useSquidStore.js.map +1 -0
- package/dist/hooks/store/useWalletStore.js +42 -0
- package/dist/hooks/store/useWalletStore.js.map +1 -0
- package/dist/hooks/sui/useSui.js +28 -0
- package/dist/hooks/sui/useSui.js.map +1 -0
- package/dist/hooks/sui/useSuiClient.js +16 -0
- package/dist/hooks/sui/useSuiClient.js.map +1 -0
- package/dist/hooks/sui/useSuiWallets.js +42 -0
- package/dist/hooks/sui/useSuiWallets.js.map +1 -0
- package/dist/hooks/swap/useDepositAddress.js +63 -0
- package/dist/hooks/swap/useDepositAddress.js.map +1 -0
- package/dist/hooks/swap/useSwap.js +209 -0
- package/dist/hooks/swap/useSwap.js.map +1 -0
- package/dist/hooks/tokens/useAllConnectedWalletBalances.js +103 -0
- package/dist/hooks/tokens/useAllConnectedWalletBalances.js.map +1 -0
- package/dist/hooks/tokens/useAllTokensWithBalanceForChainType.js +119 -0
- package/dist/hooks/tokens/useAllTokensWithBalanceForChainType.js.map +1 -0
- package/dist/hooks/tokens/useBalance.js +136 -0
- package/dist/hooks/tokens/useBalance.js.map +1 -0
- package/dist/hooks/tokens/useMultiChainBalance.js +68 -0
- package/dist/hooks/tokens/useMultiChainBalance.js.map +1 -0
- package/dist/hooks/tokens/useMultipleTokenPrices.js +46 -0
- package/dist/hooks/tokens/useMultipleTokenPrices.js.map +1 -0
- package/dist/hooks/tokens/useNativeBalance.js +217 -0
- package/dist/hooks/tokens/useNativeBalance.js.map +1 -0
- package/dist/hooks/tokens/useNativeTokenForChain.js +28 -0
- package/dist/hooks/tokens/useNativeTokenForChain.js.map +1 -0
- package/dist/hooks/tokens/useSingleTokenPrice.js +38 -0
- package/dist/hooks/tokens/useSingleTokenPrice.js.map +1 -0
- package/dist/hooks/tokens/useSquidTokens.js +80 -0
- package/dist/hooks/tokens/useSquidTokens.js.map +1 -0
- package/dist/hooks/tokens/useTokenHistoricalData.js +23 -0
- package/dist/hooks/tokens/useTokenHistoricalData.js.map +1 -0
- package/dist/hooks/transaction/useAllTransactionsStatus.js +68 -0
- package/dist/hooks/transaction/useAllTransactionsStatus.js.map +1 -0
- package/dist/hooks/transaction/useApproval.js +223 -0
- package/dist/hooks/transaction/useApproval.js.map +1 -0
- package/dist/hooks/transaction/useErc20Allowance.js +43 -0
- package/dist/hooks/transaction/useErc20Allowance.js.map +1 -0
- package/dist/hooks/transaction/useEstimate.js +118 -0
- package/dist/hooks/transaction/useEstimate.js.map +1 -0
- package/dist/hooks/transaction/useEstimatePriceImpact.js +31 -0
- package/dist/hooks/transaction/useEstimatePriceImpact.js.map +1 -0
- package/dist/hooks/transaction/useExecuteTransaction.js +605 -0
- package/dist/hooks/transaction/useExecuteTransaction.js.map +1 -0
- package/dist/hooks/transaction/useGetRoute.d.ts +3 -0
- package/dist/hooks/transaction/useGetRoute.js +230 -0
- package/dist/hooks/transaction/useGetRoute.js.map +1 -0
- package/dist/hooks/transaction/useIcs20Allowance.js +40 -0
- package/dist/hooks/transaction/useIcs20Allowance.js.map +1 -0
- package/dist/hooks/transaction/useRouteWarnings.js +19 -0
- package/dist/hooks/transaction/useRouteWarnings.js.map +1 -0
- package/dist/hooks/transaction/useSingleTransaction.js +91 -0
- package/dist/hooks/transaction/useSingleTransaction.js.map +1 -0
- package/dist/hooks/user/useAvatar.js +34 -0
- package/dist/hooks/user/useAvatar.js.map +1 -0
- package/dist/hooks/user/useHistory.js +106 -0
- package/dist/hooks/user/useHistory.js.map +1 -0
- package/dist/hooks/user/useUserParams.js +33 -0
- package/dist/hooks/user/useUserParams.js.map +1 -0
- package/dist/hooks/wallet/useAddToken.js +49 -0
- package/dist/hooks/wallet/useAddToken.js.map +1 -0
- package/dist/hooks/wallet/useAutoConnect.js +74 -0
- package/dist/hooks/wallet/useAutoConnect.js.map +1 -0
- package/dist/hooks/wallet/useEns.js +69 -0
- package/dist/hooks/wallet/useEns.js.map +1 -0
- package/dist/hooks/wallet/useGnosisContext.js +78 -0
- package/dist/hooks/wallet/useGnosisContext.js.map +1 -0
- package/dist/hooks/wallet/useIntegratorContext.js +39 -0
- package/dist/hooks/wallet/useIntegratorContext.js.map +1 -0
- package/dist/hooks/wallet/useMultiChainWallet.js +175 -0
- package/dist/hooks/wallet/useMultiChainWallet.js.map +1 -0
- package/dist/hooks/wallet/useSigner.js +76 -0
- package/dist/hooks/wallet/useSigner.js.map +1 -0
- package/dist/hooks/wallet/useWallet.js +206 -0
- package/dist/hooks/wallet/useWallet.js.map +1 -0
- package/dist/hooks/wallet/useWallets.js +36 -0
- package/dist/hooks/wallet/useWallets.js.map +1 -0
- package/dist/index.js +6 -17096
- package/dist/index.js.map +1 -1
- package/dist/provider/index.js +113 -0
- package/dist/provider/index.js.map +1 -0
- package/dist/services/external/ens.js +66 -0
- package/dist/services/external/ens.js.map +1 -0
- package/dist/services/external/rpcService.js +421 -0
- package/dist/services/external/rpcService.js.map +1 -0
- package/dist/{secretService-SEqSyHG0.js → services/external/secretService.js} +8 -37
- package/dist/services/external/secretService.js.map +1 -0
- package/dist/services/external/suiRpcClient.js +80 -0
- package/dist/services/external/suiRpcClient.js.map +1 -0
- package/dist/services/external/tokenDataService.js +108 -0
- package/dist/services/external/tokenDataService.js.map +1 -0
- package/dist/services/index.js +16 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/internal/apiService.js +21 -0
- package/dist/services/internal/apiService.js.map +1 -0
- package/dist/services/internal/assetsService.js +586 -0
- package/dist/services/internal/assetsService.js.map +1 -0
- package/dist/services/internal/bitcoinService.js +51 -0
- package/dist/services/internal/bitcoinService.js.map +1 -0
- package/dist/services/internal/configService.js +218 -0
- package/dist/services/internal/configService.js.map +1 -0
- package/dist/services/internal/cosmosService.js +141 -0
- package/dist/services/internal/cosmosService.js.map +1 -0
- package/dist/services/internal/errorService.js +188 -0
- package/dist/services/internal/errorService.js.map +1 -0
- package/dist/services/internal/estimateService.js +221 -0
- package/dist/services/internal/estimateService.js.map +1 -0
- package/dist/services/internal/eventService.d.ts +5 -0
- package/dist/services/internal/eventService.js +163 -0
- package/dist/services/internal/eventService.js.map +1 -0
- package/dist/services/internal/evmService.js +42 -0
- package/dist/services/internal/evmService.js.map +1 -0
- package/dist/services/internal/numberService.js +171 -0
- package/dist/services/internal/numberService.js.map +1 -0
- package/dist/services/internal/priceService.js +53 -0
- package/dist/services/internal/priceService.js.map +1 -0
- package/dist/services/internal/searchService.js +98 -0
- package/dist/services/internal/searchService.js.map +1 -0
- package/dist/services/internal/solanaService.js +109 -0
- package/dist/services/internal/solanaService.js.map +1 -0
- package/dist/services/internal/suiService.js +119 -0
- package/dist/services/internal/suiService.js.map +1 -0
- package/dist/services/internal/transactionService.js +207 -0
- package/dist/services/internal/transactionService.js.map +1 -0
- package/dist/services/internal/transactionStatusService.js +315 -0
- package/dist/services/internal/transactionStatusService.js.map +1 -0
- package/dist/services/internal/walletService.js +464 -0
- package/dist/services/internal/walletService.js.map +1 -0
- package/dist/tests/apiService.test.js +40 -0
- package/dist/tests/apiService.test.js.map +1 -0
- package/dist/tests/assetsService.test.js +500 -0
- package/dist/tests/assetsService.test.js.map +1 -0
- package/dist/tests/configService.test.js +673 -0
- package/dist/tests/configService.test.js.map +1 -0
- package/dist/tests/estimateService.test.js +355 -0
- package/dist/tests/estimateService.test.js.map +1 -0
- package/dist/tests/fetchSquidData.js +36 -0
- package/dist/tests/fetchSquidData.js.map +1 -0
- package/dist/tests/jest-svg-transform.d.ts +0 -0
- package/dist/tests/jest-svg-transform.js +21 -0
- package/dist/tests/jest-svg-transform.js.map +1 -0
- package/dist/tests/numberService.test.js +135 -0
- package/dist/tests/numberService.test.js.map +1 -0
- package/dist/tests/priceService.test.js +38 -0
- package/dist/tests/priceService.test.js.map +1 -0
- package/dist/tests/sample.json +0 -0
- package/dist/tests/searchService.test.js +92 -0
- package/dist/tests/searchService.test.js.map +1 -0
- package/dist/tests/swapConfig.test.js +332 -0
- package/dist/tests/swapConfig.test.js.map +1 -0
- package/dist/tests/transactionService.test.js +53 -0
- package/dist/tests/transactionService.test.js.map +1 -0
- package/dist/tests/transactionStatusService.test.js +165 -0
- package/dist/tests/transactionStatusService.test.js.map +1 -0
- package/dist/tests/walletService.test.js +264 -0
- package/dist/tests/walletService.test.js.map +1 -0
- package/package.json +4 -18
- package/dist/index.esm.js +0 -16892
- package/dist/index.esm.js.map +0 -1
- package/dist/secretService-Cc7emxDy.js +0 -162
- package/dist/secretService-Cc7emxDy.js.map +0 -1
- package/dist/secretService-SEqSyHG0.js.map +0 -1
|
@@ -0,0 +1,464 @@
|
|
|
1
|
+
import { ChainType } from "@0xsquid/squid-types";
|
|
2
|
+
import { ChainNotConfiguredError } from "@wagmi/core";
|
|
3
|
+
import getProperty from "lodash/get";
|
|
4
|
+
import { isAddress, SwitchChainError } from "viem";
|
|
5
|
+
import { chainTypeToDefaultChainIdMap } from "../../core/constants";
|
|
6
|
+
import { walletStoreLinks } from "../../core/wallets";
|
|
7
|
+
import { WidgetEvents } from "../../services/internal/eventService";
|
|
8
|
+
import { connectBitcoinWallet, isBitcoinAddressValid } from "./bitcoinService";
|
|
9
|
+
import { connectCosmosWallet, isCosmosAddressValid } from "./cosmosService";
|
|
10
|
+
import { connectEvmWallet } from "./evmService";
|
|
11
|
+
import { connectSolanaWallet, isSolanaAddressValid } from "./solanaService";
|
|
12
|
+
import { isSuiAddressValid } from "./suiService";
|
|
13
|
+
const chainTypeToTrimLength = {
|
|
14
|
+
// 0x1234...5678
|
|
15
|
+
[ChainType.EVM]: {
|
|
16
|
+
start: 6,
|
|
17
|
+
end: 4,
|
|
18
|
+
},
|
|
19
|
+
// osmo1234...5678
|
|
20
|
+
[ChainType.COSMOS]: {
|
|
21
|
+
start: 8,
|
|
22
|
+
end: 4,
|
|
23
|
+
},
|
|
24
|
+
// 1A1zP1eP...vfNa
|
|
25
|
+
[ChainType.BTC]: {
|
|
26
|
+
start: 8,
|
|
27
|
+
end: 4,
|
|
28
|
+
},
|
|
29
|
+
// 6fq5...AmcC
|
|
30
|
+
[ChainType.SOLANA]: {
|
|
31
|
+
start: 4,
|
|
32
|
+
end: 4,
|
|
33
|
+
},
|
|
34
|
+
// 0x1234...5678
|
|
35
|
+
[ChainType.SUI]: {
|
|
36
|
+
start: 6,
|
|
37
|
+
end: 4,
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
export const formatHash = ({ chainType, hash }) => {
|
|
41
|
+
if (!hash)
|
|
42
|
+
return "";
|
|
43
|
+
let chainTypeFormat = chainType;
|
|
44
|
+
if (!chainType) {
|
|
45
|
+
if (hash?.startsWith("0x")) {
|
|
46
|
+
chainTypeFormat = ChainType.EVM;
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
chainTypeFormat = ChainType.COSMOS;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
const trimLengthStart = chainTypeToTrimLength[chainTypeFormat].start;
|
|
53
|
+
const trimLengthEnd = chainTypeToTrimLength[chainTypeFormat].end;
|
|
54
|
+
// return the same hash if its length is less than the trim length
|
|
55
|
+
if (hash.length <= trimLengthStart + trimLengthEnd)
|
|
56
|
+
return hash;
|
|
57
|
+
return (hash.slice(0, trimLengthStart) +
|
|
58
|
+
"..." +
|
|
59
|
+
hash.slice(hash.length - trimLengthEnd, hash.length));
|
|
60
|
+
};
|
|
61
|
+
export const isWalletAddressValid = (chainData, address) => {
|
|
62
|
+
if (!address || !chainData?.chainType)
|
|
63
|
+
return false;
|
|
64
|
+
switch (chainData.chainType) {
|
|
65
|
+
case ChainType.EVM:
|
|
66
|
+
return isAddress(address);
|
|
67
|
+
case ChainType.COSMOS:
|
|
68
|
+
return isCosmosAddressValid(chainData.bech32Config.bech32PrefixAccAddr, address);
|
|
69
|
+
case ChainType.BTC:
|
|
70
|
+
return isBitcoinAddressValid(address);
|
|
71
|
+
case ChainType.SOLANA:
|
|
72
|
+
return isSolanaAddressValid(address);
|
|
73
|
+
case ChainType.SUI:
|
|
74
|
+
return isSuiAddressValid(address);
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
export const redirectToExtensionsStore = (wallet) => {
|
|
78
|
+
const { userAgent } = navigator;
|
|
79
|
+
let link;
|
|
80
|
+
if (userAgent.indexOf("Firefox") > -1) {
|
|
81
|
+
link = walletStoreLinks[wallet.connectorId].firefox;
|
|
82
|
+
}
|
|
83
|
+
else if (userAgent.indexOf("Chrome") > -1) {
|
|
84
|
+
link = walletStoreLinks[wallet.connectorId].chrome;
|
|
85
|
+
}
|
|
86
|
+
if (link && link !== "") {
|
|
87
|
+
window?.open(link, "_blank")?.focus();
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* Dynamically accesses a nested property of an object based on a dot-separated string path.
|
|
92
|
+
* Returns the value of the property if found, otherwise undefined.
|
|
93
|
+
* e.g. "xfi.keplr" will return window.xfi.keplr
|
|
94
|
+
*/
|
|
95
|
+
export const accessProperty = (object, path) => {
|
|
96
|
+
const value = getProperty(object, path);
|
|
97
|
+
if (value === undefined) {
|
|
98
|
+
console.error(`Property "${path}" not found while reading object`, object);
|
|
99
|
+
}
|
|
100
|
+
return value;
|
|
101
|
+
};
|
|
102
|
+
export const getWalletWindowProvider = (window, wallet, chainType) => {
|
|
103
|
+
if (wallet.isMultiChain) {
|
|
104
|
+
const connector = wallet.supportedNetworks.find((network) => network.chainType === chainType)?.connector;
|
|
105
|
+
return connector?.().provider;
|
|
106
|
+
}
|
|
107
|
+
return wallet.windowFlag
|
|
108
|
+
? accessProperty(window, wallet.windowFlag)
|
|
109
|
+
: undefined;
|
|
110
|
+
};
|
|
111
|
+
const definedInWindow = (path, clientWindow) => {
|
|
112
|
+
if (!path || !clientWindow)
|
|
113
|
+
return false;
|
|
114
|
+
const parts = path.split(".");
|
|
115
|
+
let obj = clientWindow;
|
|
116
|
+
for (const part of parts) {
|
|
117
|
+
if (obj && typeof obj === "object" && part in obj) {
|
|
118
|
+
obj = obj[part];
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return Boolean(obj);
|
|
125
|
+
};
|
|
126
|
+
export const getWallets = (window, wallets) => {
|
|
127
|
+
return wallets.map((wallet) => {
|
|
128
|
+
if (!wallet.isInstalled) {
|
|
129
|
+
return {
|
|
130
|
+
...wallet,
|
|
131
|
+
isInstalled() {
|
|
132
|
+
return definedInWindow(wallet.windowFlag, window);
|
|
133
|
+
},
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
return wallet;
|
|
137
|
+
});
|
|
138
|
+
};
|
|
139
|
+
/**
|
|
140
|
+
* Get the base chain to connect to
|
|
141
|
+
* If only one chain type is selected, use that chain type
|
|
142
|
+
* Otherwise, use the wallet's type
|
|
143
|
+
* This is mainly used for Cosmos wallets, they need a reference chain to connect to (because addresses are different on each chain)
|
|
144
|
+
* @param wallet
|
|
145
|
+
* @param chain
|
|
146
|
+
* @param selectedChainTypes
|
|
147
|
+
* @param findChain
|
|
148
|
+
* @returns
|
|
149
|
+
*/
|
|
150
|
+
export const getDefaultChain = (wallet, chain, selectedChainTypes, findChain) => {
|
|
151
|
+
// If a chain is provided, use that chain
|
|
152
|
+
if (chain)
|
|
153
|
+
return chain;
|
|
154
|
+
let walletType = wallet.isMultiChain ? undefined : wallet.type;
|
|
155
|
+
// If only one chain type is selected, use that chain type
|
|
156
|
+
if (selectedChainTypes?.length === 1) {
|
|
157
|
+
const chainType = selectedChainTypes[0];
|
|
158
|
+
walletType = chainType;
|
|
159
|
+
}
|
|
160
|
+
if (!walletType)
|
|
161
|
+
return undefined;
|
|
162
|
+
return findChain(chainTypeToDefaultChainIdMap[walletType]);
|
|
163
|
+
};
|
|
164
|
+
/**
|
|
165
|
+
* Sort order:
|
|
166
|
+
* 1. Connected wallets
|
|
167
|
+
* 2. Installed wallets
|
|
168
|
+
* 3. Priority wallets
|
|
169
|
+
* 4. The rest
|
|
170
|
+
*
|
|
171
|
+
* On mobile, Injected and WalletConnect are always on top,
|
|
172
|
+
* after installed wallets.
|
|
173
|
+
*
|
|
174
|
+
* @returns The sorted wallets
|
|
175
|
+
*/
|
|
176
|
+
export function sortWallets(a, b, { isMobile, connectedWallets, priorityList = [], }) {
|
|
177
|
+
// Sort connected wallets first
|
|
178
|
+
const aIsConnected = connectedWallets?.some((w) => w.connectorId === a.connectorId);
|
|
179
|
+
const bIsConnected = connectedWallets?.some((w) => w.connectorId === b.connectorId);
|
|
180
|
+
if (aIsConnected && !bIsConnected)
|
|
181
|
+
return -1;
|
|
182
|
+
if (!aIsConnected && bIsConnected)
|
|
183
|
+
return 1;
|
|
184
|
+
// Then sort installed wallets
|
|
185
|
+
const aIsInstalled = a.isInstalled?.();
|
|
186
|
+
const bIsInstalled = b.isInstalled?.();
|
|
187
|
+
if (aIsInstalled && !bIsInstalled)
|
|
188
|
+
return -1;
|
|
189
|
+
if (!aIsInstalled && bIsInstalled)
|
|
190
|
+
return 1;
|
|
191
|
+
// Sort by priority list
|
|
192
|
+
const aPriorityIndex = priorityList.indexOf(a.connectorId);
|
|
193
|
+
const bPriorityIndex = priorityList.indexOf(b.connectorId);
|
|
194
|
+
if (aPriorityIndex !== -1 || bPriorityIndex !== -1) {
|
|
195
|
+
if (aPriorityIndex === -1)
|
|
196
|
+
return 1;
|
|
197
|
+
if (bPriorityIndex === -1)
|
|
198
|
+
return -1;
|
|
199
|
+
return aPriorityIndex - bPriorityIndex;
|
|
200
|
+
}
|
|
201
|
+
// Mobile-specific sorting
|
|
202
|
+
if (isMobile) {
|
|
203
|
+
if (a.connectorId === "injected" && b.connectorId !== "injected")
|
|
204
|
+
return -1;
|
|
205
|
+
if (a.connectorId !== "injected" && b.connectorId === "injected")
|
|
206
|
+
return 1;
|
|
207
|
+
if (a.connectorId === "walletConnect" && b.connectorId !== "walletConnect")
|
|
208
|
+
return -1;
|
|
209
|
+
if (a.connectorId !== "walletConnect" && b.connectorId === "walletConnect")
|
|
210
|
+
return 1;
|
|
211
|
+
}
|
|
212
|
+
return 0;
|
|
213
|
+
}
|
|
214
|
+
export function areSameAddress(address1, address2) {
|
|
215
|
+
if (!address1 || !address2)
|
|
216
|
+
return false;
|
|
217
|
+
return address1.trim().toLowerCase() === address2.trim().toLowerCase();
|
|
218
|
+
}
|
|
219
|
+
export function sortAddressBook(a, b, selectedAddress) {
|
|
220
|
+
if (!selectedAddress)
|
|
221
|
+
return 0;
|
|
222
|
+
if (areSameAddress(a.address, selectedAddress)) {
|
|
223
|
+
return -1;
|
|
224
|
+
}
|
|
225
|
+
if (areSameAddress(b.address, selectedAddress)) {
|
|
226
|
+
return 1;
|
|
227
|
+
}
|
|
228
|
+
return 0;
|
|
229
|
+
}
|
|
230
|
+
export const calculateTotalUsdBalanceUSD = (tokens) => {
|
|
231
|
+
const totalUsd = tokens.reduce((total, token) => {
|
|
232
|
+
const balance = parseFloat(token.balance);
|
|
233
|
+
const usdPrice = token.usdPrice ?? 0;
|
|
234
|
+
const balanceUsd = balance * usdPrice;
|
|
235
|
+
return total + balanceUsd;
|
|
236
|
+
}, 0);
|
|
237
|
+
// Convert to string with high precision
|
|
238
|
+
const preciseTotal = totalUsd.toFixed(18);
|
|
239
|
+
// Remove trailing zeros and decimal point if necessary
|
|
240
|
+
const trimmedTotal = preciseTotal.replace(/\.?0+$/, "");
|
|
241
|
+
return trimmedTotal;
|
|
242
|
+
};
|
|
243
|
+
export function addTokenToWallet({ token: { address, decimals, symbol, logoURI }, provider, }) {
|
|
244
|
+
if (!address || !symbol || !decimals || !logoURI)
|
|
245
|
+
return;
|
|
246
|
+
try {
|
|
247
|
+
return provider.request({
|
|
248
|
+
method: "wallet_watchAsset",
|
|
249
|
+
params: {
|
|
250
|
+
type: "ERC20",
|
|
251
|
+
options: {
|
|
252
|
+
address,
|
|
253
|
+
symbol,
|
|
254
|
+
decimals,
|
|
255
|
+
image: logoURI,
|
|
256
|
+
},
|
|
257
|
+
},
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
catch (error) {
|
|
261
|
+
console.debug("Error adding token to wallet:", error);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
export function isEvmChainNotSupportedError(error) {
|
|
265
|
+
return (error instanceof ChainNotConfiguredError ||
|
|
266
|
+
error instanceof SwitchChainError);
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Find a wallet by wagmi connector
|
|
270
|
+
* EIP-6963: https://eips.ethereum.org/EIPS/eip-6963
|
|
271
|
+
* Sometimes the ID is set as the RDNS which is the domain name of wallet
|
|
272
|
+
* @param wallets
|
|
273
|
+
* @param connector
|
|
274
|
+
* @returns
|
|
275
|
+
*/
|
|
276
|
+
export const findWalletByWagmiConnector = (wallets, connector) => {
|
|
277
|
+
if (!connector)
|
|
278
|
+
return undefined;
|
|
279
|
+
return wallets.find((w) => w.connectorId.toLowerCase() === connector.id.toLowerCase() ||
|
|
280
|
+
w.connectorName.toLowerCase() === connector.name.toLowerCase() ||
|
|
281
|
+
w.rdns?.toLowerCase() === connector.id.toLowerCase());
|
|
282
|
+
};
|
|
283
|
+
/**
|
|
284
|
+
* Find a wallet by label (connector ID, name, or RDNS)
|
|
285
|
+
* @param wallets
|
|
286
|
+
* @param label
|
|
287
|
+
* @returns
|
|
288
|
+
*/
|
|
289
|
+
export const findWalletByLabel = (wallets, label) => {
|
|
290
|
+
return wallets.find((w) => w.connectorId.toLowerCase() === label.toLowerCase() ||
|
|
291
|
+
w.connectorName.toLowerCase() === label.toLowerCase() ||
|
|
292
|
+
w.rdns?.toLowerCase() === label.toLowerCase());
|
|
293
|
+
};
|
|
294
|
+
// Xion has a way to create smart contract accounts (with social logins) these are 63 characters long
|
|
295
|
+
// And the particularity is that we can't derive the osmosis fallback address from these because they don't have a way to access funds in other networks
|
|
296
|
+
export const isXionSmartContractAddress = (address) => {
|
|
297
|
+
return address?.length === 63;
|
|
298
|
+
};
|
|
299
|
+
export const getWalletSupportedChainTypes = (wallet) => {
|
|
300
|
+
if (!wallet.isMultiChain)
|
|
301
|
+
return [];
|
|
302
|
+
return wallet.supportedNetworks.map((config) => config.chainType);
|
|
303
|
+
};
|
|
304
|
+
export const getConnectorForChainType = (wallet, chainType) => {
|
|
305
|
+
// For cross-chain wallets
|
|
306
|
+
if (wallet.isMultiChain) {
|
|
307
|
+
const networkConfig = wallet.supportedNetworks.find((config) => config.chainType === chainType);
|
|
308
|
+
return networkConfig?.connector;
|
|
309
|
+
}
|
|
310
|
+
// For single-chain wallets, return the wallet's connector if chain type matches
|
|
311
|
+
if (wallet.type === chainType) {
|
|
312
|
+
return wallet.connector;
|
|
313
|
+
}
|
|
314
|
+
return undefined;
|
|
315
|
+
};
|
|
316
|
+
export function walletSupportsChainType(wallet, chainType) {
|
|
317
|
+
if (wallet.isMultiChain) {
|
|
318
|
+
return wallet.supportedNetworks.some((network) => network.chainType === chainType);
|
|
319
|
+
}
|
|
320
|
+
return wallet.type === chainType;
|
|
321
|
+
}
|
|
322
|
+
const connectByChainType = async (chainType, wallet, defaultChain, params) => {
|
|
323
|
+
if (!chainType) {
|
|
324
|
+
throw new Error(`Unsupported wallet type: ${chainType}`);
|
|
325
|
+
}
|
|
326
|
+
// Get connector for chain type if it's a multi-chain wallet
|
|
327
|
+
const connector = getConnectorForChainType(wallet, chainType);
|
|
328
|
+
switch (chainType) {
|
|
329
|
+
case ChainType.EVM:
|
|
330
|
+
return connectEvmWallet({ ...wallet, connector }, {
|
|
331
|
+
connectEvmAsync: params.connectEvmAsync,
|
|
332
|
+
});
|
|
333
|
+
case ChainType.COSMOS:
|
|
334
|
+
return connectCosmosWallet({ ...wallet, connector }, defaultChain, {
|
|
335
|
+
connectCosmos: params.connectCosmos,
|
|
336
|
+
cosmosConnectedWallet: params.cosmosConnectedWallet,
|
|
337
|
+
});
|
|
338
|
+
case ChainType.SOLANA:
|
|
339
|
+
return connectSolanaWallet(wallet, {
|
|
340
|
+
connectSolana: params.connectSolana,
|
|
341
|
+
});
|
|
342
|
+
case ChainType.BTC:
|
|
343
|
+
return connectBitcoinWallet(wallet);
|
|
344
|
+
case ChainType.SUI:
|
|
345
|
+
return params.connectSui.mutateAsync({
|
|
346
|
+
wallet: {
|
|
347
|
+
...wallet,
|
|
348
|
+
connector,
|
|
349
|
+
},
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
};
|
|
353
|
+
const getChainTypesToConnect = (selectedChainTypes, defaultChain, supportedChains) => {
|
|
354
|
+
if (selectedChainTypes?.length) {
|
|
355
|
+
return selectedChainTypes;
|
|
356
|
+
}
|
|
357
|
+
if (defaultChain) {
|
|
358
|
+
return [defaultChain.chainType];
|
|
359
|
+
}
|
|
360
|
+
return supportedChains.map((chain) => chain.chainType);
|
|
361
|
+
};
|
|
362
|
+
const connectMultiChainWallet = async (params) => {
|
|
363
|
+
if (!params.wallet.isMultiChain) {
|
|
364
|
+
return null;
|
|
365
|
+
}
|
|
366
|
+
const results = [];
|
|
367
|
+
// This should be defined, but in some cases (like widget connection) it's not
|
|
368
|
+
const supportedChains = params.wallet.supportedNetworks;
|
|
369
|
+
// Depending on params, we need to connect to specific chains or just one
|
|
370
|
+
const chainTypesToConnect = getChainTypesToConnect(params.selectedChainTypes, params.selectedChain, supportedChains);
|
|
371
|
+
// Connect to each chain type
|
|
372
|
+
for (const chainConfig of supportedChains) {
|
|
373
|
+
if (!chainTypesToConnect.includes(chainConfig.chainType)) {
|
|
374
|
+
continue;
|
|
375
|
+
}
|
|
376
|
+
const defaultChain = getDefaultChain(params.wallet, params.selectedChain, [chainConfig.chainType], params.findChain);
|
|
377
|
+
try {
|
|
378
|
+
const result = await connectByChainType(chainConfig.chainType, params.wallet, defaultChain, {
|
|
379
|
+
connectEvmAsync: params.connectEvmAsync,
|
|
380
|
+
connectCosmos: params.connectCosmos,
|
|
381
|
+
cosmosConnectedWallet: params.cosmosConnectedWallet,
|
|
382
|
+
connectSolana: params.connectSolana,
|
|
383
|
+
connectSui: params.connectSui,
|
|
384
|
+
});
|
|
385
|
+
if (result) {
|
|
386
|
+
results.push({
|
|
387
|
+
chainType: chainConfig.chainType,
|
|
388
|
+
data: result,
|
|
389
|
+
});
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
catch (error) {
|
|
393
|
+
console.error(`Failed to connect ${chainConfig.chainType}:`, error);
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
return results.length > 0
|
|
397
|
+
? {
|
|
398
|
+
wallet: params.wallet,
|
|
399
|
+
addresses: results,
|
|
400
|
+
}
|
|
401
|
+
: null;
|
|
402
|
+
};
|
|
403
|
+
const connectSingleChainWallet = async (params) => {
|
|
404
|
+
if (params.wallet.isMultiChain) {
|
|
405
|
+
return null;
|
|
406
|
+
}
|
|
407
|
+
const defaultChain = params.selectedChain;
|
|
408
|
+
const result = await connectByChainType(params.wallet.type, params.wallet, defaultChain, {
|
|
409
|
+
connectEvmAsync: params.connectEvmAsync,
|
|
410
|
+
connectCosmos: params.connectCosmos,
|
|
411
|
+
cosmosConnectedWallet: params.cosmosConnectedWallet,
|
|
412
|
+
connectSolana: params.connectSolana,
|
|
413
|
+
connectSui: params.connectSui,
|
|
414
|
+
});
|
|
415
|
+
return result
|
|
416
|
+
? {
|
|
417
|
+
wallet: params.wallet,
|
|
418
|
+
addresses: [
|
|
419
|
+
{
|
|
420
|
+
chainType: params.wallet.type,
|
|
421
|
+
data: result,
|
|
422
|
+
},
|
|
423
|
+
],
|
|
424
|
+
}
|
|
425
|
+
: null;
|
|
426
|
+
};
|
|
427
|
+
export const connectWallet = async (params) => {
|
|
428
|
+
try {
|
|
429
|
+
const result = params.wallet.isMultiChain
|
|
430
|
+
? await connectMultiChainWallet(params)
|
|
431
|
+
: await connectSingleChainWallet(params);
|
|
432
|
+
if (result) {
|
|
433
|
+
// Dispatch wallet connect event for each connected address
|
|
434
|
+
result.addresses.forEach(({ chainType, data }) => {
|
|
435
|
+
WidgetEvents.getInstance().dispatchWalletConnect({
|
|
436
|
+
walletAddress: data.address,
|
|
437
|
+
chainType: chainType,
|
|
438
|
+
provider: params.wallet.connectorId,
|
|
439
|
+
});
|
|
440
|
+
});
|
|
441
|
+
}
|
|
442
|
+
return result;
|
|
443
|
+
}
|
|
444
|
+
catch (error) {
|
|
445
|
+
// Dispatch wallet reject event
|
|
446
|
+
if (params.selectedChain) {
|
|
447
|
+
WidgetEvents.getInstance().dispatchWalletReject({
|
|
448
|
+
chainId: params.selectedChain.chainId,
|
|
449
|
+
provider: params.wallet.name,
|
|
450
|
+
reason: error instanceof Error ? error.message : "Unknown error",
|
|
451
|
+
});
|
|
452
|
+
}
|
|
453
|
+
throw error;
|
|
454
|
+
}
|
|
455
|
+
};
|
|
456
|
+
// Issues with Rabby wallet on some chains
|
|
457
|
+
// we need to wait some time before getting transaction receipt
|
|
458
|
+
// https://github.com/ethers-io/ethers.js/issues/4760
|
|
459
|
+
export const isProblematicConnector = (connector) => {
|
|
460
|
+
return (connector?.id != null &&
|
|
461
|
+
// TODO: inconsistent connector ID behavior, investigate and debug Wagmi
|
|
462
|
+
["rabby", "io.rabby"].includes(connector.id));
|
|
463
|
+
};
|
|
464
|
+
//# sourceMappingURL=walletService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walletService.js","sourceRoot":"","sources":["../../../src/services/internal/walletService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import axios from "axios";
|
|
2
|
+
import { is404Error } from "../services";
|
|
3
|
+
describe("apiService", () => {
|
|
4
|
+
describe("is404Error", () => {
|
|
5
|
+
it("returns true if error is axios error & status 404", () => {
|
|
6
|
+
const mockError = {
|
|
7
|
+
isAxiosError: true,
|
|
8
|
+
response: {
|
|
9
|
+
status: 404,
|
|
10
|
+
},
|
|
11
|
+
};
|
|
12
|
+
expect(is404Error(mockError)).toBe(true);
|
|
13
|
+
});
|
|
14
|
+
it("returns false if error is not an axios error", () => {
|
|
15
|
+
const nonAxiosError = new Error("Regular error");
|
|
16
|
+
expect(is404Error(nonAxiosError)).toBe(false);
|
|
17
|
+
});
|
|
18
|
+
it("returns false if error is axios error but not 404", () => {
|
|
19
|
+
const mockError = {
|
|
20
|
+
isAxiosError: true,
|
|
21
|
+
response: {
|
|
22
|
+
status: 500,
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
expect(is404Error(mockError)).toBe(false);
|
|
26
|
+
});
|
|
27
|
+
it("returns true for a real 404 error", async () => {
|
|
28
|
+
try {
|
|
29
|
+
// real url that gives a 404
|
|
30
|
+
await axios.get("https://httpstat.us/404");
|
|
31
|
+
// If the request doesn't throw, fail the test
|
|
32
|
+
expect(true).toBe(false);
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
expect(is404Error(error)).toBe(true);
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
//# sourceMappingURL=apiService.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apiService.test.js","sourceRoot":"","sources":["../../src/tests/apiService.test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;YAC3D,MAAM,SAAS,GAAG;gBAChB,YAAY,EAAE,IAAI;gBAClB,QAAQ,EAAE;oBACR,MAAM,EAAE,GAAG;iBACZ;aACF,CAAC;YAEF,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACtD,MAAM,aAAa,GAAG,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;YAEjD,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;YAC3D,MAAM,SAAS,GAAG;gBAChB,YAAY,EAAE,IAAI;gBAClB,QAAQ,EAAE;oBACR,MAAM,EAAE,GAAG;iBACZ;aACF,CAAC;YAEF,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;YACjD,IAAI;gBACF,4BAA4B;gBAC5B,MAAM,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;gBAC3C,8CAA8C;gBAC9C,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAC1B;YAAC,OAAO,KAAK,EAAE;gBACd,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACtC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|