@relayprotocol/relay-kit-ui 10.0.0 → 11.0.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/_cjs/src/components/common/CustomAddressModal.js +18 -8
- package/_cjs/src/components/common/CustomAddressModal.js.map +1 -1
- package/_cjs/src/components/common/RefundReason.js +106 -3
- package/_cjs/src/components/common/RefundReason.js.map +1 -1
- package/_cjs/src/components/common/TokenSelector/PaymentMethod.js +9 -9
- package/_cjs/src/components/common/TokenSelector/PaymentMethod.js.map +1 -1
- package/_cjs/src/components/common/TokenSelector/TokenSelector.js +8 -8
- package/_cjs/src/components/common/TokenSelector/TokenSelector.js.map +1 -1
- package/_cjs/src/components/primitives/ChainIcon.js +2 -1
- package/_cjs/src/components/primitives/ChainIcon.js.map +1 -1
- package/_cjs/src/components/primitives/ChainTokenIcon.js +6 -2
- package/_cjs/src/components/primitives/ChainTokenIcon.js.map +1 -1
- package/_cjs/src/components/widgets/OnrampWidget/widget/index.js +1 -1
- package/_cjs/src/components/widgets/OnrampWidget/widget/index.js.map +1 -1
- package/_cjs/src/components/widgets/SwapWidgetRenderer.js +23 -42
- package/_cjs/src/components/widgets/SwapWidgetRenderer.js.map +1 -1
- package/_cjs/src/components/widgets/WidgetContainer.js +1 -1
- package/_cjs/src/components/widgets/WidgetContainer.js.map +1 -1
- package/_cjs/src/constants/events.js +2 -1
- package/_cjs/src/constants/events.js.map +1 -1
- package/_cjs/src/constants/walletCompatibility.js +3 -1
- package/_cjs/src/constants/walletCompatibility.js.map +1 -1
- package/_cjs/src/hooks/index.js +7 -3
- package/_cjs/src/hooks/index.js.map +1 -1
- package/_cjs/src/hooks/useCodexBalances.js +305 -0
- package/_cjs/src/hooks/useCodexBalances.js.map +1 -0
- package/_cjs/src/hooks/useCurrencyBalance.js +18 -74
- package/_cjs/src/hooks/useCurrencyBalance.js.map +1 -1
- package/_cjs/src/hooks/useEnhancedTokensList.js.map +1 -1
- package/_cjs/src/hooks/useKnownTokenContract.js +45 -0
- package/_cjs/src/hooks/useKnownTokenContract.js.map +1 -0
- package/_cjs/src/hooks/useMultiWalletBalances.js +19 -37
- package/_cjs/src/hooks/useMultiWalletBalances.js.map +1 -1
- package/_cjs/src/hooks/useSolanaBalance.js +60 -0
- package/_cjs/src/hooks/useSolanaBalance.js.map +1 -0
- package/_cjs/src/providers/RelayKitProvider.js +1 -1
- package/_cjs/src/providers/RelayKitProvider.js.map +1 -1
- package/_cjs/src/version.js +1 -1
- package/_cjs/src/version.js.map +1 -1
- package/_cjs/tsconfig.build.tsbuildinfo +1 -1
- package/_esm/src/components/common/CustomAddressModal.js +24 -10
- package/_esm/src/components/common/CustomAddressModal.js.map +1 -1
- package/_esm/src/components/common/RefundReason.js +107 -4
- package/_esm/src/components/common/RefundReason.js.map +1 -1
- package/_esm/src/components/common/TokenSelector/PaymentMethod.js +9 -9
- package/_esm/src/components/common/TokenSelector/PaymentMethod.js.map +1 -1
- package/_esm/src/components/common/TokenSelector/TokenSelector.js +10 -10
- package/_esm/src/components/common/TokenSelector/TokenSelector.js.map +1 -1
- package/_esm/src/components/primitives/ChainIcon.js +3 -2
- package/_esm/src/components/primitives/ChainIcon.js.map +1 -1
- package/_esm/src/components/primitives/ChainTokenIcon.js +6 -3
- package/_esm/src/components/primitives/ChainTokenIcon.js.map +1 -1
- package/_esm/src/components/widgets/OnrampWidget/widget/index.js +1 -1
- package/_esm/src/components/widgets/OnrampWidget/widget/index.js.map +1 -1
- package/_esm/src/components/widgets/SwapWidgetRenderer.js +28 -46
- package/_esm/src/components/widgets/SwapWidgetRenderer.js.map +1 -1
- package/_esm/src/components/widgets/WidgetContainer.js +1 -1
- package/_esm/src/components/widgets/WidgetContainer.js.map +1 -1
- package/_esm/src/constants/events.js +2 -1
- package/_esm/src/constants/events.js.map +1 -1
- package/_esm/src/constants/walletCompatibility.js +3 -1
- package/_esm/src/constants/walletCompatibility.js.map +1 -1
- package/_esm/src/hooks/index.js +4 -2
- package/_esm/src/hooks/index.js.map +1 -1
- package/_esm/src/hooks/useCodexBalances.js +311 -0
- package/_esm/src/hooks/useCodexBalances.js.map +1 -0
- package/_esm/src/hooks/useCurrencyBalance.js +18 -74
- package/_esm/src/hooks/useCurrencyBalance.js.map +1 -1
- package/_esm/src/hooks/useEnhancedTokensList.js.map +1 -1
- package/_esm/src/hooks/useKnownTokenContract.js +52 -0
- package/_esm/src/hooks/useKnownTokenContract.js.map +1 -0
- package/_esm/src/hooks/useMultiWalletBalances.js +18 -39
- package/_esm/src/hooks/useMultiWalletBalances.js.map +1 -1
- package/_esm/src/hooks/useSolanaBalance.js +58 -0
- package/_esm/src/hooks/useSolanaBalance.js.map +1 -0
- package/_esm/src/providers/RelayKitProvider.js +1 -1
- package/_esm/src/providers/RelayKitProvider.js.map +1 -1
- package/_esm/src/version.js +1 -1
- package/_esm/src/version.js.map +1 -1
- package/_esm/tsconfig.build.tsbuildinfo +1 -1
- package/_types/src/components/common/CustomAddressModal.d.ts.map +1 -1
- package/_types/src/components/common/RefundReason.d.ts.map +1 -1
- package/_types/src/components/common/TokenSelector/PaymentMethod.d.ts.map +1 -1
- package/_types/src/components/common/TokenSelector/TokenSelector.d.ts.map +1 -1
- package/_types/src/components/primitives/ChainIcon.d.ts.map +1 -1
- package/_types/src/components/primitives/ChainTokenIcon.d.ts.map +1 -1
- package/_types/src/components/widgets/OnrampWidget/widget/index.d.ts.map +1 -1
- package/_types/src/components/widgets/SwapWidgetRenderer.d.ts.map +1 -1
- package/_types/src/components/widgets/WidgetContainer.d.ts.map +1 -1
- package/_types/src/constants/events.d.ts +1 -0
- package/_types/src/constants/events.d.ts.map +1 -1
- package/_types/src/constants/walletCompatibility.d.ts.map +1 -1
- package/_types/src/hooks/index.d.ts +4 -2
- package/_types/src/hooks/index.d.ts.map +1 -1
- package/_types/src/hooks/useCodexBalances.d.ts +45 -0
- package/_types/src/hooks/useCodexBalances.d.ts.map +1 -0
- package/_types/src/hooks/useCurrencyBalance.d.ts +0 -1
- package/_types/src/hooks/useCurrencyBalance.d.ts.map +1 -1
- package/_types/src/hooks/useEnhancedTokensList.d.ts +1 -1
- package/_types/src/hooks/useEnhancedTokensList.d.ts.map +1 -1
- package/_types/src/hooks/useKnownTokenContract.d.ts +35 -0
- package/_types/src/hooks/useKnownTokenContract.d.ts.map +1 -0
- package/_types/src/hooks/useMultiWalletBalances.d.ts +3 -12
- package/_types/src/hooks/useMultiWalletBalances.d.ts.map +1 -1
- package/_types/src/hooks/{useEclipseBalance.d.ts → useSolanaBalance.d.ts} +2 -2
- package/_types/src/hooks/useSolanaBalance.d.ts.map +1 -0
- package/_types/src/providers/RelayKitProvider.d.ts +3 -3
- package/_types/src/providers/RelayKitProvider.d.ts.map +1 -1
- package/_types/src/version.d.ts +1 -1
- package/_types/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/_cjs/src/hooks/useDuneBalances.js +0 -100
- package/_cjs/src/hooks/useDuneBalances.js.map +0 -1
- package/_cjs/src/hooks/useEclipseBalance.js +0 -47
- package/_cjs/src/hooks/useEclipseBalance.js.map +0 -1
- package/_esm/src/hooks/useDuneBalances.js +0 -102
- package/_esm/src/hooks/useDuneBalances.js.map +0 -1
- package/_esm/src/hooks/useEclipseBalance.js +0 -44
- package/_esm/src/hooks/useEclipseBalance.js.map +0 -1
- package/_types/src/hooks/useDuneBalances.d.ts +0 -25
- package/_types/src/hooks/useDuneBalances.d.ts.map +0 -1
- package/_types/src/hooks/useEclipseBalance.d.ts.map +0 -1
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
import { formatUnits, isAddress, zeroAddress } from 'viem';
|
|
2
|
+
import { ProviderOptionsContext } from '../providers/RelayKitProvider.js';
|
|
3
|
+
import { useContext } from 'react';
|
|
4
|
+
import { useQuery } from '@tanstack/react-query';
|
|
5
|
+
import { eclipse, isSolanaAddress, solana } from '../utils/solana.js';
|
|
6
|
+
import useRelayClient from './useRelayClient.js';
|
|
7
|
+
export const CODEX_SVM_NETWORK_ID = 1399811149;
|
|
8
|
+
const SOLANA_NATIVE_ADDRESS = '11111111111111111111111111111111';
|
|
9
|
+
// zero address + EIP-7528 placeholder — indexers use either for native entries
|
|
10
|
+
const EVM_NATIVE_ALIASES = [
|
|
11
|
+
zeroAddress,
|
|
12
|
+
'0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',
|
|
13
|
+
'native'
|
|
14
|
+
];
|
|
15
|
+
const MAX_BALANCES = 200;
|
|
16
|
+
const PAGE_LIMIT = 100;
|
|
17
|
+
// Codex prices thinly-traded junk that removeScams misses — below this pool
|
|
18
|
+
// liquidity a token's usd value is treated as unrealizable and stripped
|
|
19
|
+
const MIN_LIQUIDITY_USD = 1000;
|
|
20
|
+
const BALANCES_QUERY = `query WalletBalances($input: BalancesInput!) {
|
|
21
|
+
balances(input: $input) {
|
|
22
|
+
cursor
|
|
23
|
+
items {
|
|
24
|
+
balance
|
|
25
|
+
balanceUsd
|
|
26
|
+
tokenPriceUsd
|
|
27
|
+
liquidityUsd
|
|
28
|
+
tokenAddress
|
|
29
|
+
networkId
|
|
30
|
+
token {
|
|
31
|
+
symbol
|
|
32
|
+
decimals
|
|
33
|
+
isScam
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}`;
|
|
38
|
+
// Codex doesn't index native SVM assets — price them via equivalent indexed tokens
|
|
39
|
+
const SVM_NATIVE_PRICE_TOKENS = {
|
|
40
|
+
// SOL priced via wrapped SOL
|
|
41
|
+
[solana.id]: {
|
|
42
|
+
address: 'So11111111111111111111111111111111111111112',
|
|
43
|
+
networkId: CODEX_SVM_NETWORK_ID
|
|
44
|
+
},
|
|
45
|
+
// eclipse gas token is ETH, priced via mainnet WETH
|
|
46
|
+
[eclipse.id]: {
|
|
47
|
+
address: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
|
|
48
|
+
networkId: 1
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
// Codex requires networks when includeNative is true; unsupported ids are ignored
|
|
52
|
+
export const getEvmNetworkIds = (chains) => {
|
|
53
|
+
return (chains ?? [])
|
|
54
|
+
.filter((chain) => chain.vmType === 'evm')
|
|
55
|
+
.map((chain) => chain.id);
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* SVM chains whose native balances come from their RPC — Codex only covers
|
|
59
|
+
* Solana SPL tokens, so gas balances (SOL, eclipse ETH) are merged in manually.
|
|
60
|
+
*/
|
|
61
|
+
export const getSvmNativeChains = (chains) => {
|
|
62
|
+
return (chains ?? [])
|
|
63
|
+
.filter((chain) => chain.vmType === 'svm')
|
|
64
|
+
.flatMap((chain) => chain.httpRpcUrl &&
|
|
65
|
+
chain.currency?.symbol &&
|
|
66
|
+
chain.currency?.decimals !== undefined
|
|
67
|
+
? [
|
|
68
|
+
{
|
|
69
|
+
chainId: chain.id,
|
|
70
|
+
rpcUrl: chain.httpRpcUrl,
|
|
71
|
+
symbol: chain.currency.symbol,
|
|
72
|
+
decimals: chain.currency.decimals,
|
|
73
|
+
priceToken: SVM_NATIVE_PRICE_TOKENS[chain.id]
|
|
74
|
+
}
|
|
75
|
+
]
|
|
76
|
+
: []);
|
|
77
|
+
};
|
|
78
|
+
const fetchSvmNativeBalances = async (address, chains) => {
|
|
79
|
+
return Promise.all(chains.map(async (chain) => {
|
|
80
|
+
try {
|
|
81
|
+
const response = await fetch(chain.rpcUrl, {
|
|
82
|
+
method: 'POST',
|
|
83
|
+
headers: {
|
|
84
|
+
'Content-Type': 'application/json'
|
|
85
|
+
},
|
|
86
|
+
body: JSON.stringify({
|
|
87
|
+
jsonrpc: '2.0',
|
|
88
|
+
id: 1,
|
|
89
|
+
method: 'getBalance',
|
|
90
|
+
params: [address]
|
|
91
|
+
})
|
|
92
|
+
});
|
|
93
|
+
const data = await response.json();
|
|
94
|
+
if (data.error) {
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
return { chain, amount: BigInt(data.result?.value ?? 0) };
|
|
98
|
+
}
|
|
99
|
+
catch (e) {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
}));
|
|
103
|
+
};
|
|
104
|
+
const NATIVE_PRICES_QUERY = `query NativePrices($inputs: [GetPriceInput!]!) {
|
|
105
|
+
getTokenPrices(inputs: $inputs) {
|
|
106
|
+
address
|
|
107
|
+
networkId
|
|
108
|
+
priceUsd
|
|
109
|
+
}
|
|
110
|
+
}`;
|
|
111
|
+
const fetchSvmNativePrices = async (apiUrl, config, chains) => {
|
|
112
|
+
const inputs = chains.flatMap((chain) => chain.priceToken ? [chain.priceToken] : []);
|
|
113
|
+
if (!inputs.length) {
|
|
114
|
+
return {};
|
|
115
|
+
}
|
|
116
|
+
try {
|
|
117
|
+
const response = await fetch(apiUrl, {
|
|
118
|
+
method: 'POST',
|
|
119
|
+
headers: {
|
|
120
|
+
'Content-Type': 'application/json',
|
|
121
|
+
...(config.apiKey ? { Authorization: config.apiKey } : {})
|
|
122
|
+
},
|
|
123
|
+
body: JSON.stringify({
|
|
124
|
+
query: NATIVE_PRICES_QUERY,
|
|
125
|
+
variables: { inputs }
|
|
126
|
+
})
|
|
127
|
+
});
|
|
128
|
+
const json = await response.json();
|
|
129
|
+
const prices = {};
|
|
130
|
+
json.data?.getTokenPrices?.forEach((price) => {
|
|
131
|
+
if (price?.priceUsd !== undefined && price?.priceUsd !== null) {
|
|
132
|
+
prices[`${price.networkId}:${price.address}`] = price.priceUsd;
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
return prices;
|
|
136
|
+
}
|
|
137
|
+
catch (e) {
|
|
138
|
+
return {};
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
const normalizeAddress = (networkId, tokenAddress) => {
|
|
142
|
+
if (networkId === CODEX_SVM_NETWORK_ID) {
|
|
143
|
+
return tokenAddress === 'native' ? SOLANA_NATIVE_ADDRESS : tokenAddress;
|
|
144
|
+
}
|
|
145
|
+
return EVM_NATIVE_ALIASES.includes(tokenAddress.toLowerCase())
|
|
146
|
+
? zeroAddress
|
|
147
|
+
: tokenAddress.toLowerCase();
|
|
148
|
+
};
|
|
149
|
+
const toNumber = (value) => {
|
|
150
|
+
if (value === undefined || value === null) {
|
|
151
|
+
return undefined;
|
|
152
|
+
}
|
|
153
|
+
const parsed = Number(value);
|
|
154
|
+
return Number.isFinite(parsed) ? parsed : undefined;
|
|
155
|
+
};
|
|
156
|
+
export const fetchCodexBalances = async (address, config, networks, svmNativeChains) => {
|
|
157
|
+
const apiUrl = `${config.apiBaseUrl ?? 'https://graph.codex.io'}/graphql`;
|
|
158
|
+
const items = [];
|
|
159
|
+
let cursor = null;
|
|
160
|
+
while (items.length < MAX_BALANCES) {
|
|
161
|
+
const response = await fetch(apiUrl, {
|
|
162
|
+
method: 'POST',
|
|
163
|
+
headers: {
|
|
164
|
+
'Content-Type': 'application/json',
|
|
165
|
+
...(config.apiKey ? { Authorization: config.apiKey } : {})
|
|
166
|
+
},
|
|
167
|
+
body: JSON.stringify({
|
|
168
|
+
query: BALANCES_QUERY,
|
|
169
|
+
variables: {
|
|
170
|
+
input: {
|
|
171
|
+
walletAddress: address,
|
|
172
|
+
includeNative: true,
|
|
173
|
+
removeScams: true,
|
|
174
|
+
sortBy: 'USD_VALUE',
|
|
175
|
+
sortDirection: 'DESC',
|
|
176
|
+
limit: PAGE_LIMIT,
|
|
177
|
+
networks,
|
|
178
|
+
...(cursor ? { cursor } : {})
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
})
|
|
182
|
+
});
|
|
183
|
+
if (!response.ok) {
|
|
184
|
+
throw new Error(`Failed to fetch balances for ${address}`);
|
|
185
|
+
}
|
|
186
|
+
const json = await response.json();
|
|
187
|
+
if (json.errors?.length) {
|
|
188
|
+
throw new Error(json.errors[0]?.message ?? `Failed to fetch balances for ${address}`);
|
|
189
|
+
}
|
|
190
|
+
const page = json.data?.balances;
|
|
191
|
+
if (!page?.items?.length) {
|
|
192
|
+
break;
|
|
193
|
+
}
|
|
194
|
+
items.push(...page.items);
|
|
195
|
+
cursor = page.cursor;
|
|
196
|
+
if (!cursor) {
|
|
197
|
+
break;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
const balances = items.reduce((balances, item) => {
|
|
201
|
+
const decimals = item.token?.decimals;
|
|
202
|
+
const symbol = item.token?.symbol;
|
|
203
|
+
if (typeof decimals !== 'number' || !symbol || item.token?.isScam) {
|
|
204
|
+
return balances;
|
|
205
|
+
}
|
|
206
|
+
try {
|
|
207
|
+
BigInt(item.balance);
|
|
208
|
+
}
|
|
209
|
+
catch (e) {
|
|
210
|
+
return balances;
|
|
211
|
+
}
|
|
212
|
+
const address = normalizeAddress(item.networkId, item.tokenAddress);
|
|
213
|
+
const isNative = address === zeroAddress || address === SOLANA_NATIVE_ADDRESS;
|
|
214
|
+
let price_usd = toNumber(item.tokenPriceUsd);
|
|
215
|
+
let value_usd = toNumber(item.balanceUsd);
|
|
216
|
+
const liquidityUsd = toNumber(item.liquidityUsd);
|
|
217
|
+
if (!isNative &&
|
|
218
|
+
liquidityUsd !== undefined &&
|
|
219
|
+
(liquidityUsd < MIN_LIQUIDITY_USD ||
|
|
220
|
+
(value_usd !== undefined && value_usd > liquidityUsd))) {
|
|
221
|
+
price_usd = undefined;
|
|
222
|
+
value_usd = undefined;
|
|
223
|
+
}
|
|
224
|
+
balances.push({
|
|
225
|
+
chain_id: item.networkId === CODEX_SVM_NETWORK_ID ? solana.id : item.networkId,
|
|
226
|
+
address,
|
|
227
|
+
amount: item.balance,
|
|
228
|
+
symbol,
|
|
229
|
+
decimals,
|
|
230
|
+
price_usd,
|
|
231
|
+
value_usd
|
|
232
|
+
});
|
|
233
|
+
return balances;
|
|
234
|
+
}, []);
|
|
235
|
+
if (svmNativeChains?.length) {
|
|
236
|
+
const [nativeBalances, nativePrices] = await Promise.all([
|
|
237
|
+
fetchSvmNativeBalances(address, svmNativeChains),
|
|
238
|
+
fetchSvmNativePrices(apiUrl, config, svmNativeChains)
|
|
239
|
+
]);
|
|
240
|
+
nativeBalances.forEach((native) => {
|
|
241
|
+
if (!native) {
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
const priceToken = native.chain.priceToken;
|
|
245
|
+
const priceUsd = priceToken
|
|
246
|
+
? nativePrices[`${priceToken.networkId}:${priceToken.address}`]
|
|
247
|
+
: undefined;
|
|
248
|
+
const existing = balances.find((balance) => balance.chain_id === native.chain.chainId &&
|
|
249
|
+
balance.address === SOLANA_NATIVE_ADDRESS);
|
|
250
|
+
if (existing) {
|
|
251
|
+
const price = existing.price_usd ?? priceUsd;
|
|
252
|
+
existing.amount = native.amount.toString();
|
|
253
|
+
if (price !== undefined) {
|
|
254
|
+
existing.price_usd = price;
|
|
255
|
+
existing.value_usd =
|
|
256
|
+
price * Number(formatUnits(native.amount, existing.decimals));
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
else if (native.amount > BigInt(0)) {
|
|
260
|
+
balances.push({
|
|
261
|
+
chain_id: native.chain.chainId,
|
|
262
|
+
address: SOLANA_NATIVE_ADDRESS,
|
|
263
|
+
amount: native.amount.toString(),
|
|
264
|
+
symbol: native.chain.symbol,
|
|
265
|
+
decimals: native.chain.decimals,
|
|
266
|
+
price_usd: priceUsd,
|
|
267
|
+
value_usd: priceUsd !== undefined
|
|
268
|
+
? priceUsd *
|
|
269
|
+
Number(formatUnits(native.amount, native.chain.decimals))
|
|
270
|
+
: undefined
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
return { balances };
|
|
276
|
+
};
|
|
277
|
+
export default (address, queryOptions) => {
|
|
278
|
+
const providerOptions = useContext(ProviderOptionsContext);
|
|
279
|
+
const relayClient = useRelayClient();
|
|
280
|
+
const codexConfig = providerOptions.codexConfig;
|
|
281
|
+
const queryKey = ['useCodexBalances', address];
|
|
282
|
+
const isEvmAddress = isAddress(address ?? '');
|
|
283
|
+
const isSvmAddress = isSolanaAddress(address ?? '');
|
|
284
|
+
const networks = isSvmAddress
|
|
285
|
+
? [CODEX_SVM_NETWORK_ID]
|
|
286
|
+
: getEvmNetworkIds(relayClient?.chains);
|
|
287
|
+
const response = useQuery({
|
|
288
|
+
queryKey,
|
|
289
|
+
queryFn: () => {
|
|
290
|
+
if (!address || (!isSvmAddress && !isEvmAddress)) {
|
|
291
|
+
return null;
|
|
292
|
+
}
|
|
293
|
+
return fetchCodexBalances(address, codexConfig ?? {}, networks, isSvmAddress ? getSvmNativeChains(relayClient?.chains) : undefined);
|
|
294
|
+
},
|
|
295
|
+
...queryOptions,
|
|
296
|
+
enabled: address !== undefined &&
|
|
297
|
+
networks.length > 0 &&
|
|
298
|
+
(codexConfig?.apiKey !== undefined ||
|
|
299
|
+
codexConfig?.apiBaseUrl !== undefined) &&
|
|
300
|
+
queryOptions?.enabled &&
|
|
301
|
+
(isSvmAddress || isEvmAddress)
|
|
302
|
+
});
|
|
303
|
+
// Keys are lowercased to match consumer lookups; balance.address keeps the
|
|
304
|
+
// mint's original case for the tokens api
|
|
305
|
+
const balanceMap = response?.data?.balances?.reduce((balanceMap, balance) => {
|
|
306
|
+
balanceMap[`${balance.chain_id}:${balance.address.toLowerCase()}`] = balance;
|
|
307
|
+
return balanceMap;
|
|
308
|
+
}, {});
|
|
309
|
+
return { ...response, balanceMap, queryKey };
|
|
310
|
+
};
|
|
311
|
+
//# sourceMappingURL=useCodexBalances.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCodexBalances.js","sourceRoot":"","sources":["../../../src/hooks/useCodexBalances.ts"],"names":[],"mappings":"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","sourcesContent":["import { formatUnits, isAddress, zeroAddress } from 'viem'\nimport { ProviderOptionsContext } from '../providers/RelayKitProvider.js'\nimport { useContext } from 'react'\nimport {\n useQuery,\n type DefaultError,\n type QueryKey\n} from '@tanstack/react-query'\nimport { eclipse, isSolanaAddress, solana } from '../utils/solana.js'\nimport type { RelayChain } from '@relayprotocol/relay-sdk'\nimport useRelayClient from './useRelayClient.js'\n\nexport type WalletBalance = {\n chain_id: number\n address: string\n amount: string\n symbol: string\n decimals: number\n price_usd?: number\n value_usd?: number\n}\n\nexport type WalletBalanceResponse = {\n balances: WalletBalance[]\n} | null\n\nexport type BalanceMap = Record<string, WalletBalance>\n\nexport type CodexConfig = {\n apiBaseUrl?: string\n apiKey?: string\n}\n\nexport const CODEX_SVM_NETWORK_ID = 1399811149\n\nconst SOLANA_NATIVE_ADDRESS = '11111111111111111111111111111111'\n// zero address + EIP-7528 placeholder — indexers use either for native entries\nconst EVM_NATIVE_ALIASES = [\n zeroAddress,\n '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',\n 'native'\n]\n\nconst MAX_BALANCES = 200\nconst PAGE_LIMIT = 100\n// Codex prices thinly-traded junk that removeScams misses — below this pool\n// liquidity a token's usd value is treated as unrealizable and stripped\nconst MIN_LIQUIDITY_USD = 1000\n\nconst BALANCES_QUERY = `query WalletBalances($input: BalancesInput!) {\n balances(input: $input) {\n cursor\n items {\n balance\n balanceUsd\n tokenPriceUsd\n liquidityUsd\n tokenAddress\n networkId\n token {\n symbol\n decimals\n isScam\n }\n }\n }\n}`\n\ntype CodexBalanceItem = {\n balance: string\n balanceUsd?: string | null\n tokenPriceUsd?: string | null\n liquidityUsd?: string | null\n tokenAddress: string\n networkId: number\n token?: {\n symbol?: string | null\n decimals?: number | null\n isScam?: boolean | null\n } | null\n}\n\nexport type SvmNativeChain = {\n chainId: number\n rpcUrl: string\n symbol: string\n decimals: number\n priceToken?: {\n address: string\n networkId: number\n }\n}\n\n// Codex doesn't index native SVM assets — price them via equivalent indexed tokens\nconst SVM_NATIVE_PRICE_TOKENS: Record<\n number,\n { address: string; networkId: number }\n> = {\n // SOL priced via wrapped SOL\n [solana.id]: {\n address: 'So11111111111111111111111111111111111111112',\n networkId: CODEX_SVM_NETWORK_ID\n },\n // eclipse gas token is ETH, priced via mainnet WETH\n [eclipse.id]: {\n address: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',\n networkId: 1\n }\n}\n\n// Codex requires networks when includeNative is true; unsupported ids are ignored\nexport const getEvmNetworkIds = (chains?: RelayChain[]): number[] => {\n return (chains ?? [])\n .filter((chain) => chain.vmType === 'evm')\n .map((chain) => chain.id)\n}\n\n/**\n * SVM chains whose native balances come from their RPC — Codex only covers\n * Solana SPL tokens, so gas balances (SOL, eclipse ETH) are merged in manually.\n */\nexport const getSvmNativeChains = (chains?: RelayChain[]): SvmNativeChain[] => {\n return (chains ?? [])\n .filter((chain) => chain.vmType === 'svm')\n .flatMap((chain) =>\n chain.httpRpcUrl &&\n chain.currency?.symbol &&\n chain.currency?.decimals !== undefined\n ? [\n {\n chainId: chain.id,\n rpcUrl: chain.httpRpcUrl,\n symbol: chain.currency.symbol,\n decimals: chain.currency.decimals,\n priceToken: SVM_NATIVE_PRICE_TOKENS[chain.id]\n }\n ]\n : []\n )\n}\n\nconst fetchSvmNativeBalances = async (\n address: string,\n chains: SvmNativeChain[]\n): Promise<Array<{ chain: SvmNativeChain; amount: bigint } | null>> => {\n return Promise.all(\n chains.map(async (chain) => {\n try {\n const response = await fetch(chain.rpcUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: 1,\n method: 'getBalance',\n params: [address]\n })\n })\n const data = await response.json()\n if (data.error) {\n return null\n }\n return { chain, amount: BigInt(data.result?.value ?? 0) }\n } catch (e) {\n return null\n }\n })\n )\n}\n\nconst NATIVE_PRICES_QUERY = `query NativePrices($inputs: [GetPriceInput!]!) {\n getTokenPrices(inputs: $inputs) {\n address\n networkId\n priceUsd\n }\n}`\n\nconst fetchSvmNativePrices = async (\n apiUrl: string,\n config: CodexConfig,\n chains: SvmNativeChain[]\n): Promise<Record<string, number>> => {\n const inputs = chains.flatMap((chain) =>\n chain.priceToken ? [chain.priceToken] : []\n )\n if (!inputs.length) {\n return {}\n }\n try {\n const response = await fetch(apiUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...(config.apiKey ? { Authorization: config.apiKey } : {})\n },\n body: JSON.stringify({\n query: NATIVE_PRICES_QUERY,\n variables: { inputs }\n })\n })\n const json = await response.json()\n const prices: Record<string, number> = {}\n json.data?.getTokenPrices?.forEach(\n (\n price: {\n address: string\n networkId: number\n priceUsd?: number | null\n } | null\n ) => {\n if (price?.priceUsd !== undefined && price?.priceUsd !== null) {\n prices[`${price.networkId}:${price.address}`] = price.priceUsd\n }\n }\n )\n return prices\n } catch (e) {\n return {}\n }\n}\n\nconst normalizeAddress = (networkId: number, tokenAddress: string): string => {\n if (networkId === CODEX_SVM_NETWORK_ID) {\n return tokenAddress === 'native' ? SOLANA_NATIVE_ADDRESS : tokenAddress\n }\n return EVM_NATIVE_ALIASES.includes(tokenAddress.toLowerCase())\n ? zeroAddress\n : tokenAddress.toLowerCase()\n}\n\nconst toNumber = (value?: string | null): number | undefined => {\n if (value === undefined || value === null) {\n return undefined\n }\n const parsed = Number(value)\n return Number.isFinite(parsed) ? parsed : undefined\n}\n\nexport const fetchCodexBalances = async (\n address: string,\n config: CodexConfig,\n networks: number[],\n svmNativeChains?: SvmNativeChain[]\n): Promise<WalletBalanceResponse> => {\n const apiUrl = `${config.apiBaseUrl ?? 'https://graph.codex.io'}/graphql`\n const items: CodexBalanceItem[] = []\n let cursor: string | null = null\n\n while (items.length < MAX_BALANCES) {\n const response = await fetch(apiUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...(config.apiKey ? { Authorization: config.apiKey } : {})\n },\n body: JSON.stringify({\n query: BALANCES_QUERY,\n variables: {\n input: {\n walletAddress: address,\n includeNative: true,\n removeScams: true,\n sortBy: 'USD_VALUE',\n sortDirection: 'DESC',\n limit: PAGE_LIMIT,\n networks,\n ...(cursor ? { cursor } : {})\n }\n }\n })\n })\n\n if (!response.ok) {\n throw new Error(`Failed to fetch balances for ${address}`)\n }\n\n const json = await response.json()\n if (json.errors?.length) {\n throw new Error(\n json.errors[0]?.message ?? `Failed to fetch balances for ${address}`\n )\n }\n\n const page = json.data?.balances\n if (!page?.items?.length) {\n break\n }\n items.push(...page.items)\n cursor = page.cursor\n if (!cursor) {\n break\n }\n }\n\n const balances = items.reduce<WalletBalance[]>((balances, item) => {\n const decimals = item.token?.decimals\n const symbol = item.token?.symbol\n if (typeof decimals !== 'number' || !symbol || item.token?.isScam) {\n return balances\n }\n try {\n BigInt(item.balance)\n } catch (e) {\n return balances\n }\n\n const address = normalizeAddress(item.networkId, item.tokenAddress)\n const isNative =\n address === zeroAddress || address === SOLANA_NATIVE_ADDRESS\n let price_usd = toNumber(item.tokenPriceUsd)\n let value_usd = toNumber(item.balanceUsd)\n const liquidityUsd = toNumber(item.liquidityUsd)\n if (\n !isNative &&\n liquidityUsd !== undefined &&\n (liquidityUsd < MIN_LIQUIDITY_USD ||\n (value_usd !== undefined && value_usd > liquidityUsd))\n ) {\n price_usd = undefined\n value_usd = undefined\n }\n\n balances.push({\n chain_id:\n item.networkId === CODEX_SVM_NETWORK_ID ? solana.id : item.networkId,\n address,\n amount: item.balance,\n symbol,\n decimals,\n price_usd,\n value_usd\n })\n return balances\n }, [])\n\n if (svmNativeChains?.length) {\n const [nativeBalances, nativePrices] = await Promise.all([\n fetchSvmNativeBalances(address, svmNativeChains),\n fetchSvmNativePrices(apiUrl, config, svmNativeChains)\n ])\n nativeBalances.forEach((native) => {\n if (!native) {\n return\n }\n const priceToken = native.chain.priceToken\n const priceUsd = priceToken\n ? nativePrices[`${priceToken.networkId}:${priceToken.address}`]\n : undefined\n const existing = balances.find(\n (balance) =>\n balance.chain_id === native.chain.chainId &&\n balance.address === SOLANA_NATIVE_ADDRESS\n )\n if (existing) {\n const price = existing.price_usd ?? priceUsd\n existing.amount = native.amount.toString()\n if (price !== undefined) {\n existing.price_usd = price\n existing.value_usd =\n price * Number(formatUnits(native.amount, existing.decimals))\n }\n } else if (native.amount > BigInt(0)) {\n balances.push({\n chain_id: native.chain.chainId,\n address: SOLANA_NATIVE_ADDRESS,\n amount: native.amount.toString(),\n symbol: native.chain.symbol,\n decimals: native.chain.decimals,\n price_usd: priceUsd,\n value_usd:\n priceUsd !== undefined\n ? priceUsd *\n Number(formatUnits(native.amount, native.chain.decimals))\n : undefined\n })\n }\n })\n }\n\n return { balances }\n}\n\ntype QueryType = typeof useQuery<\n WalletBalanceResponse,\n DefaultError,\n WalletBalanceResponse,\n QueryKey\n>\ntype QueryOptions = Parameters<QueryType>['0']\n\nexport default (address?: string, queryOptions?: Partial<QueryOptions>) => {\n const providerOptions = useContext(ProviderOptionsContext)\n const relayClient = useRelayClient()\n const codexConfig = providerOptions.codexConfig\n const queryKey = ['useCodexBalances', address]\n const isEvmAddress = isAddress(address ?? '')\n const isSvmAddress = isSolanaAddress(address ?? '')\n const networks = isSvmAddress\n ? [CODEX_SVM_NETWORK_ID]\n : getEvmNetworkIds(relayClient?.chains)\n\n const response = (useQuery as QueryType)({\n queryKey,\n queryFn: () => {\n if (!address || (!isSvmAddress && !isEvmAddress)) {\n return null\n }\n\n return fetchCodexBalances(\n address,\n codexConfig ?? {},\n networks,\n isSvmAddress ? getSvmNativeChains(relayClient?.chains) : undefined\n )\n },\n ...queryOptions,\n enabled:\n address !== undefined &&\n networks.length > 0 &&\n (codexConfig?.apiKey !== undefined ||\n codexConfig?.apiBaseUrl !== undefined) &&\n queryOptions?.enabled &&\n (isSvmAddress || isEvmAddress)\n })\n\n // Keys are lowercased to match consumer lookups; balance.address keeps the\n // mint's original case for the tokens api\n const balanceMap = response?.data?.balances?.reduce((balanceMap, balance) => {\n balanceMap[`${balance.chain_id}:${balance.address.toLowerCase()}`] = balance\n return balanceMap\n }, {} as BalanceMap)\n\n return { ...response, balanceMap, queryKey } as ReturnType<QueryType> & {\n balanceMap: typeof balanceMap\n queryKey: (string | undefined)[]\n }\n}\n"]}
|
|
@@ -1,13 +1,10 @@
|
|
|
1
1
|
import { isAddress, zeroAddress } from 'viem';
|
|
2
2
|
import { useBalance, useReadContract } from 'wagmi';
|
|
3
3
|
import { erc20Abi } from 'viem';
|
|
4
|
-
import
|
|
4
|
+
import useSolanaBalance from './useSolanaBalance.js';
|
|
5
5
|
import useBitcoinBalance from './useBitcoinBalance.js';
|
|
6
6
|
import useAdaptedWalletBalance from './useAdaptedWalletBalance.js';
|
|
7
7
|
import { isValidAddress } from '../utils/address.js';
|
|
8
|
-
import useRelayClient from './useRelayClient.js';
|
|
9
|
-
import useEclipseBalance from '../hooks/useEclipseBalance.js';
|
|
10
|
-
import { eclipse } from '../utils/solana.js';
|
|
11
8
|
import useHyperliquidBalance from './useHyperliquidBalance.js';
|
|
12
9
|
import useHyperliquidAccountMode from './useHyperliquidAccountMode.js';
|
|
13
10
|
import useTronBalance from '../hooks/useTronBalance.js';
|
|
@@ -16,7 +13,6 @@ import useTonBalance from '../hooks/useTonBalance.js';
|
|
|
16
13
|
const useCurrencyBalance = ({ chain, address, currency, enabled = true, refreshInterval = 60000, wallet }) => {
|
|
17
14
|
const isErc20Currency = currency && currency !== zeroAddress;
|
|
18
15
|
const isValidEvmAddress = address && isAddress(address);
|
|
19
|
-
const relayClient = useRelayClient();
|
|
20
16
|
const adaptedWalletBalanceIsEnabled = wallet?.getBalance !== undefined && wallet.vmType === chain?.vmType;
|
|
21
17
|
const adaptedWalletBalance = useAdaptedWalletBalance({
|
|
22
18
|
wallet,
|
|
@@ -56,11 +52,10 @@ const useCurrencyBalance = ({ chain, address, currency, enabled = true, refreshI
|
|
|
56
52
|
}
|
|
57
53
|
});
|
|
58
54
|
const _isValidAddress = isValidAddress(chain?.vmType, address, chain?.id);
|
|
59
|
-
const
|
|
55
|
+
const solanaBalance = useSolanaBalance(address, currency ? currency : undefined, chain?.httpRpcUrl, {
|
|
60
56
|
enabled: Boolean(!adaptedWalletBalanceIsEnabled &&
|
|
61
57
|
chain &&
|
|
62
58
|
chain.vmType === 'svm' &&
|
|
63
|
-
chain.id !== eclipse.id &&
|
|
64
59
|
address &&
|
|
65
60
|
_isValidAddress &&
|
|
66
61
|
enabled),
|
|
@@ -77,15 +72,6 @@ const useCurrencyBalance = ({ chain, address, currency, enabled = true, refreshI
|
|
|
77
72
|
gcTime: refreshInterval,
|
|
78
73
|
staleTime: refreshInterval
|
|
79
74
|
});
|
|
80
|
-
const eclipseBalances = useEclipseBalance(address, {
|
|
81
|
-
enabled: Boolean(!adaptedWalletBalanceIsEnabled &&
|
|
82
|
-
chain &&
|
|
83
|
-
chain.vmType === 'svm' &&
|
|
84
|
-
chain.id === eclipse.id &&
|
|
85
|
-
address &&
|
|
86
|
-
_isValidAddress &&
|
|
87
|
-
enabled)
|
|
88
|
-
});
|
|
89
75
|
const isHypevm = chain?.vmType === 'hypevm';
|
|
90
76
|
const { data: hyperliquidAccountMode } = useHyperliquidAccountMode(address, Boolean(!adaptedWalletBalanceIsEnabled &&
|
|
91
77
|
isHypevm &&
|
|
@@ -128,8 +114,7 @@ const useCurrencyBalance = ({ chain, address, currency, enabled = true, refreshI
|
|
|
128
114
|
queryKey: adaptedWalletBalance.queryKey,
|
|
129
115
|
isLoading: adaptedWalletBalance.isLoading,
|
|
130
116
|
isError: adaptedWalletBalance.isError,
|
|
131
|
-
error: adaptedWalletBalance.error
|
|
132
|
-
isDuneBalance: false
|
|
117
|
+
error: adaptedWalletBalance.error
|
|
133
118
|
};
|
|
134
119
|
}
|
|
135
120
|
else if (chain?.vmType === 'evm') {
|
|
@@ -140,51 +125,16 @@ const useCurrencyBalance = ({ chain, address, currency, enabled = true, refreshI
|
|
|
140
125
|
const isLoading = isErc20Currency
|
|
141
126
|
? erc20BalanceIsLoading
|
|
142
127
|
: ethBalanceIsLoading;
|
|
143
|
-
return { value, queryKey, isLoading, isError, error
|
|
128
|
+
return { value, queryKey, isLoading, isError, error };
|
|
144
129
|
}
|
|
145
130
|
else if (chain?.vmType === 'svm') {
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
isError = eclipseBalances.isError;
|
|
154
|
-
error = eclipseBalances.error;
|
|
155
|
-
}
|
|
156
|
-
else {
|
|
157
|
-
value =
|
|
158
|
-
currency &&
|
|
159
|
-
duneBalances.balanceMap &&
|
|
160
|
-
duneBalances.balanceMap[`${chain.id}:${currency}`] &&
|
|
161
|
-
duneBalances.balanceMap[`${chain.id}:${currency}`].amount
|
|
162
|
-
? BigInt(duneBalances.balanceMap[`${chain.id}:${currency}`].amount ?? 0)
|
|
163
|
-
: undefined;
|
|
164
|
-
isDuneBalance = true;
|
|
165
|
-
isError = duneBalances.isError;
|
|
166
|
-
error = duneBalances.error;
|
|
167
|
-
}
|
|
168
|
-
if (_isValidAddress) {
|
|
169
|
-
return {
|
|
170
|
-
value,
|
|
171
|
-
queryKey: duneBalances.queryKey,
|
|
172
|
-
isLoading: duneBalances.isLoading,
|
|
173
|
-
isError,
|
|
174
|
-
error,
|
|
175
|
-
isDuneBalance
|
|
176
|
-
};
|
|
177
|
-
}
|
|
178
|
-
else {
|
|
179
|
-
return {
|
|
180
|
-
value: undefined,
|
|
181
|
-
queryKey: duneBalances.queryKey,
|
|
182
|
-
isLoading: duneBalances.isLoading,
|
|
183
|
-
isError,
|
|
184
|
-
error,
|
|
185
|
-
isDuneBalance
|
|
186
|
-
};
|
|
187
|
-
}
|
|
131
|
+
return {
|
|
132
|
+
value: _isValidAddress ? solanaBalance.balance : undefined,
|
|
133
|
+
queryKey: solanaBalance.queryKey,
|
|
134
|
+
isLoading: solanaBalance.isLoading,
|
|
135
|
+
isError: solanaBalance.isError,
|
|
136
|
+
error: solanaBalance.error
|
|
137
|
+
};
|
|
188
138
|
}
|
|
189
139
|
else if (chain?.vmType === 'bvm') {
|
|
190
140
|
if (_isValidAddress) {
|
|
@@ -196,7 +146,6 @@ const useCurrencyBalance = ({ chain, address, currency, enabled = true, refreshI
|
|
|
196
146
|
isLoading: bitcoinBalances.isLoading,
|
|
197
147
|
isError: bitcoinBalances.isError,
|
|
198
148
|
error: bitcoinBalances.error,
|
|
199
|
-
isDuneBalance: false,
|
|
200
149
|
hasPendingBalance: bitcoinBalances.data?.pendingBalance &&
|
|
201
150
|
bitcoinBalances.data?.pendingBalance > 0n
|
|
202
151
|
? true
|
|
@@ -210,7 +159,6 @@ const useCurrencyBalance = ({ chain, address, currency, enabled = true, refreshI
|
|
|
210
159
|
isLoading: bitcoinBalances.isLoading,
|
|
211
160
|
isError: bitcoinBalances.isError,
|
|
212
161
|
error: bitcoinBalances.error,
|
|
213
|
-
isDuneBalance: false,
|
|
214
162
|
hasPendingBalance: false
|
|
215
163
|
};
|
|
216
164
|
}
|
|
@@ -221,8 +169,7 @@ const useCurrencyBalance = ({ chain, address, currency, enabled = true, refreshI
|
|
|
221
169
|
queryKey: hyperliquidBalance.queryKey,
|
|
222
170
|
isLoading: hyperliquidBalance.isLoading,
|
|
223
171
|
isError: hyperliquidBalance.isError,
|
|
224
|
-
error: hyperliquidBalance.error
|
|
225
|
-
isDuneBalance: false
|
|
172
|
+
error: hyperliquidBalance.error
|
|
226
173
|
};
|
|
227
174
|
}
|
|
228
175
|
else if (chain?.vmType === 'tvm') {
|
|
@@ -231,8 +178,7 @@ const useCurrencyBalance = ({ chain, address, currency, enabled = true, refreshI
|
|
|
231
178
|
queryKey: tronBalance.queryKey,
|
|
232
179
|
isLoading: tronBalance.isLoading,
|
|
233
180
|
isError: tronBalance.isError,
|
|
234
|
-
error: tronBalance.error
|
|
235
|
-
isDuneBalance: false
|
|
181
|
+
error: tronBalance.error
|
|
236
182
|
};
|
|
237
183
|
}
|
|
238
184
|
else if (chain?.vmType === 'tonvm') {
|
|
@@ -241,18 +187,16 @@ const useCurrencyBalance = ({ chain, address, currency, enabled = true, refreshI
|
|
|
241
187
|
queryKey: tonBalance.queryKey,
|
|
242
188
|
isLoading: tonBalance.isLoading,
|
|
243
189
|
isError: tonBalance.isError,
|
|
244
|
-
error: tonBalance.error
|
|
245
|
-
isDuneBalance: false
|
|
190
|
+
error: tonBalance.error
|
|
246
191
|
};
|
|
247
192
|
}
|
|
248
193
|
else {
|
|
249
194
|
return {
|
|
250
195
|
value: undefined,
|
|
251
|
-
queryKey:
|
|
252
|
-
isLoading:
|
|
253
|
-
isError:
|
|
254
|
-
error:
|
|
255
|
-
isDuneBalance: false
|
|
196
|
+
queryKey: [],
|
|
197
|
+
isLoading: false,
|
|
198
|
+
isError: false,
|
|
199
|
+
error: null
|
|
256
200
|
};
|
|
257
201
|
}
|
|
258
202
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCurrencyBalance.js","sourceRoot":"","sources":["../../../src/hooks/useCurrencyBalance.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type Address,\n type GetBalanceErrorType,\n isAddress,\n type ReadContractErrorType,\n zeroAddress\n} from 'viem'\nimport { useBalance, useReadContract } from 'wagmi'\nimport { erc20Abi } from 'viem'\nimport type { QueryKey } from '@tanstack/react-query'\nimport type { AdaptedWallet, RelayChain } from '@relayprotocol/relay-sdk'\nimport useDuneBalances from './useDuneBalances.js'\nimport useBitcoinBalance from './useBitcoinBalance.js'\nimport useAdaptedWalletBalance from './useAdaptedWalletBalance.js'\nimport { isValidAddress } from '../utils/address.js'\nimport useRelayClient from './useRelayClient.js'\nimport useEclipseBalance from '../hooks/useEclipseBalance.js'\nimport { eclipse } from '../utils/solana.js'\nimport useHyperliquidBalance from './useHyperliquidBalance.js'\nimport useHyperliquidAccountMode from './useHyperliquidAccountMode.js'\nimport useTronBalance from '../hooks/useTronBalance.js'\nimport useTonBalance from '../hooks/useTonBalance.js'\n\ntype UseBalanceProps = {\n chain?: RelayChain\n address?: Address | string\n currency?: Address | string\n enabled?: boolean\n refreshInterval?: number\n wallet?: AdaptedWallet\n}\n\ntype UseCurrencyBalanceData = {\n value?: bigint\n queryKey: QueryKey\n isLoading: boolean\n isError: boolean | GetBalanceErrorType | null\n error: boolean | ReadContractErrorType | Error | null\n isDuneBalance: boolean\n hasPendingBalance?: boolean\n}\n\n// Handle fetching the balance of both native eth and erc20s\nconst useCurrencyBalance = ({\n chain,\n address,\n currency,\n enabled = true,\n refreshInterval = 60000,\n wallet\n}: UseBalanceProps): UseCurrencyBalanceData => {\n const isErc20Currency = currency && currency !== zeroAddress\n const isValidEvmAddress = address && isAddress(address)\n const relayClient = useRelayClient()\n const adaptedWalletBalanceIsEnabled =\n wallet?.getBalance !== undefined && wallet.vmType === chain?.vmType\n\n const adaptedWalletBalance = useAdaptedWalletBalance({\n wallet,\n chain,\n address,\n currency,\n enabled: enabled && adaptedWalletBalanceIsEnabled,\n refreshInterval\n })\n\n const {\n data: ethBalance,\n queryKey: ethBalanceQueryKey,\n isLoading: ethBalanceIsLoading,\n isError: ethError,\n error: isEthError\n } = useBalance({\n chainId: chain?.id,\n address: address as Address,\n query: {\n enabled: Boolean(\n !adaptedWalletBalanceIsEnabled &&\n !isErc20Currency &&\n chain &&\n chain.vmType === 'evm' &&\n isValidEvmAddress &&\n enabled\n ),\n refetchInterval: refreshInterval\n }\n })\n\n const {\n data: erc20Balance,\n queryKey: erc20BalanceQueryKey,\n isLoading: erc20BalanceIsLoading,\n isError: isErc20Error,\n error: erc20Error\n } = useReadContract({\n chainId: chain?.id,\n address: currency as Address,\n abi: erc20Abi,\n functionName: 'balanceOf',\n args: address ? [address as Address] : undefined,\n query: {\n enabled: Boolean(\n !adaptedWalletBalanceIsEnabled &&\n isErc20Currency &&\n chain &&\n chain.vmType === 'evm' &&\n isValidEvmAddress &&\n enabled\n ),\n refetchInterval: refreshInterval\n }\n })\n\n const _isValidAddress = isValidAddress(chain?.vmType, address, chain?.id)\n\n const duneBalances = useDuneBalances(\n address,\n relayClient?.baseApiUrl?.includes('testnet') ? 'testnet' : 'mainnet',\n {\n enabled: Boolean(\n !adaptedWalletBalanceIsEnabled &&\n chain &&\n chain.vmType === 'svm' &&\n chain.id !== eclipse.id &&\n address &&\n _isValidAddress &&\n enabled\n ),\n staleTime: refreshInterval,\n gcTime: refreshInterval\n }\n )\n\n const bitcoinBalances = useBitcoinBalance(address, {\n enabled: Boolean(\n !adaptedWalletBalanceIsEnabled &&\n chain &&\n chain.vmType === 'bvm' &&\n address &&\n _isValidAddress &&\n enabled\n ),\n gcTime: refreshInterval,\n staleTime: refreshInterval\n })\n\n const eclipseBalances = useEclipseBalance(address, {\n enabled: Boolean(\n !adaptedWalletBalanceIsEnabled &&\n chain &&\n chain.vmType === 'svm' &&\n chain.id === eclipse.id &&\n address &&\n _isValidAddress &&\n enabled\n )\n })\n\n const isHypevm = chain?.vmType === 'hypevm'\n\n const { data: hyperliquidAccountMode } = useHyperliquidAccountMode(\n address,\n Boolean(\n !adaptedWalletBalanceIsEnabled &&\n isHypevm &&\n address &&\n _isValidAddress &&\n enabled\n )\n )\n\n const hyperliquidBalance = useHyperliquidBalance(\n address,\n currency as string,\n hyperliquidAccountMode,\n {\n enabled: Boolean(\n !adaptedWalletBalanceIsEnabled &&\n isHypevm &&\n address &&\n _isValidAddress &&\n enabled\n ),\n gcTime: refreshInterval,\n staleTime: refreshInterval\n }\n )\n\n const tronBalance = useTronBalance(address, currency, {\n enabled: Boolean(\n !adaptedWalletBalanceIsEnabled &&\n chain &&\n chain.vmType === 'tvm' &&\n address &&\n _isValidAddress &&\n enabled\n ),\n gcTime: refreshInterval,\n staleTime: refreshInterval\n })\n\n const tonBalance = useTonBalance(address, chain?.httpRpcUrl, {\n enabled: Boolean(\n !adaptedWalletBalanceIsEnabled &&\n chain &&\n chain.vmType === 'tonvm' &&\n chain.httpRpcUrl &&\n address &&\n _isValidAddress &&\n enabled\n ),\n gcTime: refreshInterval,\n staleTime: refreshInterval\n })\n\n if (adaptedWalletBalanceIsEnabled) {\n return {\n value: adaptedWalletBalance.data,\n queryKey: adaptedWalletBalance.queryKey,\n isLoading: adaptedWalletBalance.isLoading,\n isError: adaptedWalletBalance.isError,\n error: adaptedWalletBalance.error,\n isDuneBalance: false\n }\n } else if (chain?.vmType === 'evm') {\n const value = isErc20Currency ? erc20Balance : ethBalance?.value\n const error = isErc20Currency ? erc20Error : ethError\n const isError = isErc20Currency ? isErc20Error : isEthError\n const queryKey = isErc20Currency ? erc20BalanceQueryKey : ethBalanceQueryKey\n const isLoading = isErc20Currency\n ? erc20BalanceIsLoading\n : ethBalanceIsLoading\n return { value, queryKey, isLoading, isError, error, isDuneBalance: false }\n } else if (chain?.vmType === 'svm') {\n let value: undefined | bigint = undefined\n let isDuneBalance = true\n let isError = false\n let error: Error | null = null\n\n if (chain.id === eclipse.id) {\n value = eclipseBalances.data?.balance\n isDuneBalance = false\n isError = eclipseBalances.isError\n error = eclipseBalances.error\n } else {\n value =\n currency &&\n duneBalances.balanceMap &&\n duneBalances.balanceMap[`${chain.id}:${currency}`] &&\n duneBalances.balanceMap[`${chain.id}:${currency}`].amount\n ? BigInt(\n duneBalances.balanceMap[`${chain.id}:${currency}`].amount ?? 0\n )\n : undefined\n isDuneBalance = true\n isError = duneBalances.isError\n error = duneBalances.error\n }\n\n if (_isValidAddress) {\n return {\n value,\n queryKey: duneBalances.queryKey,\n isLoading: duneBalances.isLoading,\n isError,\n error,\n isDuneBalance\n }\n } else {\n return {\n value: undefined,\n queryKey: duneBalances.queryKey,\n isLoading: duneBalances.isLoading,\n isError,\n error,\n isDuneBalance\n }\n }\n } else if (chain?.vmType === 'bvm') {\n if (_isValidAddress) {\n return {\n value:\n currency && bitcoinBalances.balance\n ? bitcoinBalances.balance\n : undefined,\n queryKey: bitcoinBalances.queryKey,\n isLoading: bitcoinBalances.isLoading,\n isError: bitcoinBalances.isError,\n error: bitcoinBalances.error,\n isDuneBalance: false,\n hasPendingBalance:\n bitcoinBalances.data?.pendingBalance &&\n bitcoinBalances.data?.pendingBalance > 0n\n ? true\n : false\n }\n } else {\n return {\n value: undefined,\n queryKey: bitcoinBalances.queryKey,\n isLoading: bitcoinBalances.isLoading,\n isError: bitcoinBalances.isError,\n error: bitcoinBalances.error,\n isDuneBalance: false,\n hasPendingBalance: false\n }\n }\n } else if (chain?.vmType === 'hypevm') {\n return {\n value: hyperliquidBalance.balance,\n queryKey: hyperliquidBalance.queryKey,\n isLoading: hyperliquidBalance.isLoading,\n isError: hyperliquidBalance.isError,\n error: hyperliquidBalance.error,\n isDuneBalance: false\n }\n } else if (chain?.vmType === 'tvm') {\n return {\n value: tronBalance.balance,\n queryKey: tronBalance.queryKey,\n isLoading: tronBalance.isLoading,\n isError: tronBalance.isError,\n error: tronBalance.error,\n isDuneBalance: false\n }\n } else if (chain?.vmType === 'tonvm') {\n return {\n value: tonBalance.balance,\n queryKey: tonBalance.queryKey,\n isLoading: tonBalance.isLoading,\n isError: tonBalance.isError,\n error: tonBalance.error,\n isDuneBalance: false\n }\n } else {\n return {\n value: undefined,\n queryKey: duneBalances.queryKey,\n isLoading: duneBalances.isLoading,\n isError: duneBalances.isError,\n error: duneBalances.error,\n isDuneBalance: false\n }\n }\n}\n\nexport default useCurrencyBalance\n"]}
|
|
1
|
+
{"version":3,"file":"useCurrencyBalance.js","sourceRoot":"","sources":["../../../src/hooks/useCurrencyBalance.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type Address,\n type GetBalanceErrorType,\n isAddress,\n type ReadContractErrorType,\n zeroAddress\n} from 'viem'\nimport { useBalance, useReadContract } from 'wagmi'\nimport { erc20Abi } from 'viem'\nimport type { QueryKey } from '@tanstack/react-query'\nimport type { AdaptedWallet, RelayChain } from '@relayprotocol/relay-sdk'\nimport useSolanaBalance from './useSolanaBalance.js'\nimport useBitcoinBalance from './useBitcoinBalance.js'\nimport useAdaptedWalletBalance from './useAdaptedWalletBalance.js'\nimport { isValidAddress } from '../utils/address.js'\nimport useHyperliquidBalance from './useHyperliquidBalance.js'\nimport useHyperliquidAccountMode from './useHyperliquidAccountMode.js'\nimport useTronBalance from '../hooks/useTronBalance.js'\nimport useTonBalance from '../hooks/useTonBalance.js'\n\ntype UseBalanceProps = {\n chain?: RelayChain\n address?: Address | string\n currency?: Address | string\n enabled?: boolean\n refreshInterval?: number\n wallet?: AdaptedWallet\n}\n\ntype UseCurrencyBalanceData = {\n value?: bigint\n queryKey: QueryKey\n isLoading: boolean\n isError: boolean | GetBalanceErrorType | null\n error: boolean | ReadContractErrorType | Error | null\n hasPendingBalance?: boolean\n}\n\n// Handle fetching the balance of both native eth and erc20s\nconst useCurrencyBalance = ({\n chain,\n address,\n currency,\n enabled = true,\n refreshInterval = 60000,\n wallet\n}: UseBalanceProps): UseCurrencyBalanceData => {\n const isErc20Currency = currency && currency !== zeroAddress\n const isValidEvmAddress = address && isAddress(address)\n const adaptedWalletBalanceIsEnabled =\n wallet?.getBalance !== undefined && wallet.vmType === chain?.vmType\n\n const adaptedWalletBalance = useAdaptedWalletBalance({\n wallet,\n chain,\n address,\n currency,\n enabled: enabled && adaptedWalletBalanceIsEnabled,\n refreshInterval\n })\n\n const {\n data: ethBalance,\n queryKey: ethBalanceQueryKey,\n isLoading: ethBalanceIsLoading,\n isError: ethError,\n error: isEthError\n } = useBalance({\n chainId: chain?.id,\n address: address as Address,\n query: {\n enabled: Boolean(\n !adaptedWalletBalanceIsEnabled &&\n !isErc20Currency &&\n chain &&\n chain.vmType === 'evm' &&\n isValidEvmAddress &&\n enabled\n ),\n refetchInterval: refreshInterval\n }\n })\n\n const {\n data: erc20Balance,\n queryKey: erc20BalanceQueryKey,\n isLoading: erc20BalanceIsLoading,\n isError: isErc20Error,\n error: erc20Error\n } = useReadContract({\n chainId: chain?.id,\n address: currency as Address,\n abi: erc20Abi,\n functionName: 'balanceOf',\n args: address ? [address as Address] : undefined,\n query: {\n enabled: Boolean(\n !adaptedWalletBalanceIsEnabled &&\n isErc20Currency &&\n chain &&\n chain.vmType === 'evm' &&\n isValidEvmAddress &&\n enabled\n ),\n refetchInterval: refreshInterval\n }\n })\n\n const _isValidAddress = isValidAddress(chain?.vmType, address, chain?.id)\n\n const solanaBalance = useSolanaBalance(\n address,\n currency ? (currency as string) : undefined,\n chain?.httpRpcUrl,\n {\n enabled: Boolean(\n !adaptedWalletBalanceIsEnabled &&\n chain &&\n chain.vmType === 'svm' &&\n address &&\n _isValidAddress &&\n enabled\n ),\n staleTime: refreshInterval,\n gcTime: refreshInterval\n }\n )\n\n const bitcoinBalances = useBitcoinBalance(address, {\n enabled: Boolean(\n !adaptedWalletBalanceIsEnabled &&\n chain &&\n chain.vmType === 'bvm' &&\n address &&\n _isValidAddress &&\n enabled\n ),\n gcTime: refreshInterval,\n staleTime: refreshInterval\n })\n\n const isHypevm = chain?.vmType === 'hypevm'\n\n const { data: hyperliquidAccountMode } = useHyperliquidAccountMode(\n address,\n Boolean(\n !adaptedWalletBalanceIsEnabled &&\n isHypevm &&\n address &&\n _isValidAddress &&\n enabled\n )\n )\n\n const hyperliquidBalance = useHyperliquidBalance(\n address,\n currency as string,\n hyperliquidAccountMode,\n {\n enabled: Boolean(\n !adaptedWalletBalanceIsEnabled &&\n isHypevm &&\n address &&\n _isValidAddress &&\n enabled\n ),\n gcTime: refreshInterval,\n staleTime: refreshInterval\n }\n )\n\n const tronBalance = useTronBalance(address, currency, {\n enabled: Boolean(\n !adaptedWalletBalanceIsEnabled &&\n chain &&\n chain.vmType === 'tvm' &&\n address &&\n _isValidAddress &&\n enabled\n ),\n gcTime: refreshInterval,\n staleTime: refreshInterval\n })\n\n const tonBalance = useTonBalance(address, chain?.httpRpcUrl, {\n enabled: Boolean(\n !adaptedWalletBalanceIsEnabled &&\n chain &&\n chain.vmType === 'tonvm' &&\n chain.httpRpcUrl &&\n address &&\n _isValidAddress &&\n enabled\n ),\n gcTime: refreshInterval,\n staleTime: refreshInterval\n })\n\n if (adaptedWalletBalanceIsEnabled) {\n return {\n value: adaptedWalletBalance.data,\n queryKey: adaptedWalletBalance.queryKey,\n isLoading: adaptedWalletBalance.isLoading,\n isError: adaptedWalletBalance.isError,\n error: adaptedWalletBalance.error\n }\n } else if (chain?.vmType === 'evm') {\n const value = isErc20Currency ? erc20Balance : ethBalance?.value\n const error = isErc20Currency ? erc20Error : ethError\n const isError = isErc20Currency ? isErc20Error : isEthError\n const queryKey = isErc20Currency ? erc20BalanceQueryKey : ethBalanceQueryKey\n const isLoading = isErc20Currency\n ? erc20BalanceIsLoading\n : ethBalanceIsLoading\n return { value, queryKey, isLoading, isError, error }\n } else if (chain?.vmType === 'svm') {\n return {\n value: _isValidAddress ? solanaBalance.balance : undefined,\n queryKey: solanaBalance.queryKey,\n isLoading: solanaBalance.isLoading,\n isError: solanaBalance.isError,\n error: solanaBalance.error\n }\n } else if (chain?.vmType === 'bvm') {\n if (_isValidAddress) {\n return {\n value:\n currency && bitcoinBalances.balance\n ? bitcoinBalances.balance\n : undefined,\n queryKey: bitcoinBalances.queryKey,\n isLoading: bitcoinBalances.isLoading,\n isError: bitcoinBalances.isError,\n error: bitcoinBalances.error,\n\n hasPendingBalance:\n bitcoinBalances.data?.pendingBalance &&\n bitcoinBalances.data?.pendingBalance > 0n\n ? true\n : false\n }\n } else {\n return {\n value: undefined,\n queryKey: bitcoinBalances.queryKey,\n isLoading: bitcoinBalances.isLoading,\n isError: bitcoinBalances.isError,\n error: bitcoinBalances.error,\n\n hasPendingBalance: false\n }\n }\n } else if (chain?.vmType === 'hypevm') {\n return {\n value: hyperliquidBalance.balance,\n queryKey: hyperliquidBalance.queryKey,\n isLoading: hyperliquidBalance.isLoading,\n isError: hyperliquidBalance.isError,\n error: hyperliquidBalance.error\n }\n } else if (chain?.vmType === 'tvm') {\n return {\n value: tronBalance.balance,\n queryKey: tronBalance.queryKey,\n isLoading: tronBalance.isLoading,\n isError: tronBalance.isError,\n error: tronBalance.error\n }\n } else if (chain?.vmType === 'tonvm') {\n return {\n value: tonBalance.balance,\n queryKey: tonBalance.queryKey,\n isLoading: tonBalance.isLoading,\n isError: tonBalance.isError,\n error: tonBalance.error\n }\n } else {\n return {\n value: undefined,\n queryKey: [],\n isLoading: false,\n isError: false,\n error: null\n }\n }\n}\n\nexport default useCurrencyBalance\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useEnhancedTokensList.js","sourceRoot":"","sources":["../../../src/hooks/useEnhancedTokensList.ts"],"names":[],"mappings":"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","sourcesContent":["import { useMemo } from 'react'\nimport type { BalanceMap } from './
|
|
1
|
+
{"version":3,"file":"useEnhancedTokensList.js","sourceRoot":"","sources":["../../../src/hooks/useEnhancedTokensList.ts"],"names":[],"mappings":"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","sourcesContent":["import { useMemo } from 'react'\nimport type { BalanceMap } from './useCodexBalances.js'\nimport { type Currency } from '@relayprotocol/relay-kit-hooks'\nimport { useInternalRelayChains } from '../hooks/index.js'\nimport type { ChainVM, RelayChain } from '@relayprotocol/relay-sdk'\n\nexport type EnhancedToken = {\n chainId: number\n address: string\n symbol: string\n name: string\n decimals: number\n logoURI: string\n verified?: boolean\n vmType?: ChainVM\n balance?: {\n amount: string\n price_usd?: number\n value_usd?: number\n }\n groupID?: string\n isGasCurrency?: boolean\n chain?: RelayChain\n}\n\nexport const useEnhancedTokensList = (\n tokenLists: Currency[] | undefined,\n balanceMap: BalanceMap | undefined,\n context: 'from' | 'to',\n multiWalletSupportEnabled: boolean,\n chainId?: number,\n sortByBalance: boolean = true\n): EnhancedToken[] => {\n const { chains } = useInternalRelayChains()\n\n const chainCurrencyMap = useMemo(() => {\n if (!chains) return new Map()\n return new Map(\n chains\n .filter((chain) => chain?.currency?.address)\n .map((chain) => [\n `${chain.id}:${chain.currency?.address?.toLowerCase()}`,\n true\n ])\n )\n }, [chains])\n\n return useMemo(() => {\n if (!tokenLists) return []\n\n const enhancedTokens = tokenLists\n .map((currency) => {\n // Validate that all required fields exist\n if (\n typeof currency?.chainId !== 'number' ||\n !currency?.address ||\n !currency?.symbol ||\n !currency?.name ||\n typeof currency?.decimals !== 'number'\n ) {\n return null\n }\n\n // Construct the enhanced token with all required fields\n const chain = chains?.find((c) => c.id === currency.chainId)\n const balanceKey = `${currency.chainId}:${currency.address.toLowerCase()}`\n const balance = balanceMap?.[balanceKey]\n\n const enhancedToken: EnhancedToken = {\n chainId: currency.chainId,\n address: currency.address,\n symbol: currency.symbol,\n name: currency.name,\n decimals: currency.decimals,\n logoURI: currency.metadata?.logoURI ?? '',\n verified: currency.metadata?.verified ?? false,\n vmType: currency.vmType,\n balance,\n isGasCurrency:\n currency.chainId !== 1337 &&\n chainCurrencyMap.has(\n `${currency.chainId}:${currency.address.toLowerCase()}`\n ),\n chain\n }\n\n return enhancedToken\n })\n // Remove any tokens that failed validation\n .filter((token): token is EnhancedToken => token !== null)\n // Remove duplicate tokens by chainId:address\n .filter(\n (token, index, self) =>\n index ===\n self.findIndex(\n (t) =>\n t.chainId === token.chainId &&\n t.address.toLowerCase() === token.address.toLowerCase()\n )\n )\n // Filter by chainId if specified\n .filter((token) => !chainId || token.chainId === chainId)\n // Filter out non-EVM tokens when multiWallet support is disabled\n .filter((token) => {\n if (context === 'from' && !multiWalletSupportEnabled) {\n return token.vmType === 'evm'\n }\n return true\n })\n .sort((a, b) => {\n // Only sort by USD value if sortByBalance is true\n if (sortByBalance) {\n const aValueUsd = a.balance?.value_usd ?? 0\n const bValueUsd = b.balance?.value_usd ?? 0\n if (aValueUsd !== bValueUsd) {\n return bValueUsd - aValueUsd\n }\n }\n\n // Maintain original order if not sorting by balance\n return 0\n })\n\n return enhancedTokens\n }, [\n tokenLists,\n balanceMap,\n context,\n multiWalletSupportEnabled,\n chainId,\n chainCurrencyMap,\n sortByBalance\n ])\n}\n"]}
|