@relayprotocol/relay-kit-ui 10.0.1 → 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/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/widgets/SwapWidgetRenderer.js +6 -39
- package/_cjs/src/components/widgets/SwapWidgetRenderer.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 +5 -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/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/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/widgets/SwapWidgetRenderer.js +6 -41
- package/_esm/src/components/widgets/SwapWidgetRenderer.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 +3 -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/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/TokenSelector/PaymentMethod.d.ts.map +1 -1
- package/_types/src/components/common/TokenSelector/TokenSelector.d.ts.map +1 -1
- package/_types/src/components/widgets/SwapWidgetRenderer.d.ts.map +1 -1
- package/_types/src/constants/walletCompatibility.d.ts.map +1 -1
- package/_types/src/hooks/index.d.ts +3 -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/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 +1 -1
- 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,305 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.fetchCodexBalances = exports.getSvmNativeChains = exports.getEvmNetworkIds = exports.CODEX_SVM_NETWORK_ID = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const viem_1 = require("viem");
|
|
6
|
+
const RelayKitProvider_js_1 = require("../providers/RelayKitProvider.js");
|
|
7
|
+
const react_1 = require("react");
|
|
8
|
+
const react_query_1 = require("@tanstack/react-query");
|
|
9
|
+
const solana_js_1 = require("../utils/solana.js");
|
|
10
|
+
const useRelayClient_js_1 = tslib_1.__importDefault(require("./useRelayClient.js"));
|
|
11
|
+
exports.CODEX_SVM_NETWORK_ID = 1399811149;
|
|
12
|
+
const SOLANA_NATIVE_ADDRESS = '11111111111111111111111111111111';
|
|
13
|
+
const EVM_NATIVE_ALIASES = [
|
|
14
|
+
viem_1.zeroAddress,
|
|
15
|
+
'0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',
|
|
16
|
+
'native'
|
|
17
|
+
];
|
|
18
|
+
const MAX_BALANCES = 200;
|
|
19
|
+
const PAGE_LIMIT = 100;
|
|
20
|
+
const MIN_LIQUIDITY_USD = 1000;
|
|
21
|
+
const BALANCES_QUERY = `query WalletBalances($input: BalancesInput!) {
|
|
22
|
+
balances(input: $input) {
|
|
23
|
+
cursor
|
|
24
|
+
items {
|
|
25
|
+
balance
|
|
26
|
+
balanceUsd
|
|
27
|
+
tokenPriceUsd
|
|
28
|
+
liquidityUsd
|
|
29
|
+
tokenAddress
|
|
30
|
+
networkId
|
|
31
|
+
token {
|
|
32
|
+
symbol
|
|
33
|
+
decimals
|
|
34
|
+
isScam
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}`;
|
|
39
|
+
const SVM_NATIVE_PRICE_TOKENS = {
|
|
40
|
+
[solana_js_1.solana.id]: {
|
|
41
|
+
address: 'So11111111111111111111111111111111111111112',
|
|
42
|
+
networkId: exports.CODEX_SVM_NETWORK_ID
|
|
43
|
+
},
|
|
44
|
+
[solana_js_1.eclipse.id]: {
|
|
45
|
+
address: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
|
|
46
|
+
networkId: 1
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
const getEvmNetworkIds = (chains) => {
|
|
50
|
+
return (chains ?? [])
|
|
51
|
+
.filter((chain) => chain.vmType === 'evm')
|
|
52
|
+
.map((chain) => chain.id);
|
|
53
|
+
};
|
|
54
|
+
exports.getEvmNetworkIds = getEvmNetworkIds;
|
|
55
|
+
const getSvmNativeChains = (chains) => {
|
|
56
|
+
return (chains ?? [])
|
|
57
|
+
.filter((chain) => chain.vmType === 'svm')
|
|
58
|
+
.flatMap((chain) => chain.httpRpcUrl &&
|
|
59
|
+
chain.currency?.symbol &&
|
|
60
|
+
chain.currency?.decimals !== undefined
|
|
61
|
+
? [
|
|
62
|
+
{
|
|
63
|
+
chainId: chain.id,
|
|
64
|
+
rpcUrl: chain.httpRpcUrl,
|
|
65
|
+
symbol: chain.currency.symbol,
|
|
66
|
+
decimals: chain.currency.decimals,
|
|
67
|
+
priceToken: SVM_NATIVE_PRICE_TOKENS[chain.id]
|
|
68
|
+
}
|
|
69
|
+
]
|
|
70
|
+
: []);
|
|
71
|
+
};
|
|
72
|
+
exports.getSvmNativeChains = getSvmNativeChains;
|
|
73
|
+
const fetchSvmNativeBalances = async (address, chains) => {
|
|
74
|
+
return Promise.all(chains.map(async (chain) => {
|
|
75
|
+
try {
|
|
76
|
+
const response = await fetch(chain.rpcUrl, {
|
|
77
|
+
method: 'POST',
|
|
78
|
+
headers: {
|
|
79
|
+
'Content-Type': 'application/json'
|
|
80
|
+
},
|
|
81
|
+
body: JSON.stringify({
|
|
82
|
+
jsonrpc: '2.0',
|
|
83
|
+
id: 1,
|
|
84
|
+
method: 'getBalance',
|
|
85
|
+
params: [address]
|
|
86
|
+
})
|
|
87
|
+
});
|
|
88
|
+
const data = await response.json();
|
|
89
|
+
if (data.error) {
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
return { chain, amount: BigInt(data.result?.value ?? 0) };
|
|
93
|
+
}
|
|
94
|
+
catch (e) {
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
}));
|
|
98
|
+
};
|
|
99
|
+
const NATIVE_PRICES_QUERY = `query NativePrices($inputs: [GetPriceInput!]!) {
|
|
100
|
+
getTokenPrices(inputs: $inputs) {
|
|
101
|
+
address
|
|
102
|
+
networkId
|
|
103
|
+
priceUsd
|
|
104
|
+
}
|
|
105
|
+
}`;
|
|
106
|
+
const fetchSvmNativePrices = async (apiUrl, config, chains) => {
|
|
107
|
+
const inputs = chains.flatMap((chain) => chain.priceToken ? [chain.priceToken] : []);
|
|
108
|
+
if (!inputs.length) {
|
|
109
|
+
return {};
|
|
110
|
+
}
|
|
111
|
+
try {
|
|
112
|
+
const response = await fetch(apiUrl, {
|
|
113
|
+
method: 'POST',
|
|
114
|
+
headers: {
|
|
115
|
+
'Content-Type': 'application/json',
|
|
116
|
+
...(config.apiKey ? { Authorization: config.apiKey } : {})
|
|
117
|
+
},
|
|
118
|
+
body: JSON.stringify({
|
|
119
|
+
query: NATIVE_PRICES_QUERY,
|
|
120
|
+
variables: { inputs }
|
|
121
|
+
})
|
|
122
|
+
});
|
|
123
|
+
const json = await response.json();
|
|
124
|
+
const prices = {};
|
|
125
|
+
json.data?.getTokenPrices?.forEach((price) => {
|
|
126
|
+
if (price?.priceUsd !== undefined && price?.priceUsd !== null) {
|
|
127
|
+
prices[`${price.networkId}:${price.address}`] = price.priceUsd;
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
return prices;
|
|
131
|
+
}
|
|
132
|
+
catch (e) {
|
|
133
|
+
return {};
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
const normalizeAddress = (networkId, tokenAddress) => {
|
|
137
|
+
if (networkId === exports.CODEX_SVM_NETWORK_ID) {
|
|
138
|
+
return tokenAddress === 'native' ? SOLANA_NATIVE_ADDRESS : tokenAddress;
|
|
139
|
+
}
|
|
140
|
+
return EVM_NATIVE_ALIASES.includes(tokenAddress.toLowerCase())
|
|
141
|
+
? viem_1.zeroAddress
|
|
142
|
+
: tokenAddress.toLowerCase();
|
|
143
|
+
};
|
|
144
|
+
const toNumber = (value) => {
|
|
145
|
+
if (value === undefined || value === null) {
|
|
146
|
+
return undefined;
|
|
147
|
+
}
|
|
148
|
+
const parsed = Number(value);
|
|
149
|
+
return Number.isFinite(parsed) ? parsed : undefined;
|
|
150
|
+
};
|
|
151
|
+
const fetchCodexBalances = async (address, config, networks, svmNativeChains) => {
|
|
152
|
+
const apiUrl = `${config.apiBaseUrl ?? 'https://graph.codex.io'}/graphql`;
|
|
153
|
+
const items = [];
|
|
154
|
+
let cursor = null;
|
|
155
|
+
while (items.length < MAX_BALANCES) {
|
|
156
|
+
const response = await fetch(apiUrl, {
|
|
157
|
+
method: 'POST',
|
|
158
|
+
headers: {
|
|
159
|
+
'Content-Type': 'application/json',
|
|
160
|
+
...(config.apiKey ? { Authorization: config.apiKey } : {})
|
|
161
|
+
},
|
|
162
|
+
body: JSON.stringify({
|
|
163
|
+
query: BALANCES_QUERY,
|
|
164
|
+
variables: {
|
|
165
|
+
input: {
|
|
166
|
+
walletAddress: address,
|
|
167
|
+
includeNative: true,
|
|
168
|
+
removeScams: true,
|
|
169
|
+
sortBy: 'USD_VALUE',
|
|
170
|
+
sortDirection: 'DESC',
|
|
171
|
+
limit: PAGE_LIMIT,
|
|
172
|
+
networks,
|
|
173
|
+
...(cursor ? { cursor } : {})
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
})
|
|
177
|
+
});
|
|
178
|
+
if (!response.ok) {
|
|
179
|
+
throw new Error(`Failed to fetch balances for ${address}`);
|
|
180
|
+
}
|
|
181
|
+
const json = await response.json();
|
|
182
|
+
if (json.errors?.length) {
|
|
183
|
+
throw new Error(json.errors[0]?.message ?? `Failed to fetch balances for ${address}`);
|
|
184
|
+
}
|
|
185
|
+
const page = json.data?.balances;
|
|
186
|
+
if (!page?.items?.length) {
|
|
187
|
+
break;
|
|
188
|
+
}
|
|
189
|
+
items.push(...page.items);
|
|
190
|
+
cursor = page.cursor;
|
|
191
|
+
if (!cursor) {
|
|
192
|
+
break;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
const balances = items.reduce((balances, item) => {
|
|
196
|
+
const decimals = item.token?.decimals;
|
|
197
|
+
const symbol = item.token?.symbol;
|
|
198
|
+
if (typeof decimals !== 'number' || !symbol || item.token?.isScam) {
|
|
199
|
+
return balances;
|
|
200
|
+
}
|
|
201
|
+
try {
|
|
202
|
+
BigInt(item.balance);
|
|
203
|
+
}
|
|
204
|
+
catch (e) {
|
|
205
|
+
return balances;
|
|
206
|
+
}
|
|
207
|
+
const address = normalizeAddress(item.networkId, item.tokenAddress);
|
|
208
|
+
const isNative = address === viem_1.zeroAddress || address === SOLANA_NATIVE_ADDRESS;
|
|
209
|
+
let price_usd = toNumber(item.tokenPriceUsd);
|
|
210
|
+
let value_usd = toNumber(item.balanceUsd);
|
|
211
|
+
const liquidityUsd = toNumber(item.liquidityUsd);
|
|
212
|
+
if (!isNative &&
|
|
213
|
+
liquidityUsd !== undefined &&
|
|
214
|
+
(liquidityUsd < MIN_LIQUIDITY_USD ||
|
|
215
|
+
(value_usd !== undefined && value_usd > liquidityUsd))) {
|
|
216
|
+
price_usd = undefined;
|
|
217
|
+
value_usd = undefined;
|
|
218
|
+
}
|
|
219
|
+
balances.push({
|
|
220
|
+
chain_id: item.networkId === exports.CODEX_SVM_NETWORK_ID ? solana_js_1.solana.id : item.networkId,
|
|
221
|
+
address,
|
|
222
|
+
amount: item.balance,
|
|
223
|
+
symbol,
|
|
224
|
+
decimals,
|
|
225
|
+
price_usd,
|
|
226
|
+
value_usd
|
|
227
|
+
});
|
|
228
|
+
return balances;
|
|
229
|
+
}, []);
|
|
230
|
+
if (svmNativeChains?.length) {
|
|
231
|
+
const [nativeBalances, nativePrices] = await Promise.all([
|
|
232
|
+
fetchSvmNativeBalances(address, svmNativeChains),
|
|
233
|
+
fetchSvmNativePrices(apiUrl, config, svmNativeChains)
|
|
234
|
+
]);
|
|
235
|
+
nativeBalances.forEach((native) => {
|
|
236
|
+
if (!native) {
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
const priceToken = native.chain.priceToken;
|
|
240
|
+
const priceUsd = priceToken
|
|
241
|
+
? nativePrices[`${priceToken.networkId}:${priceToken.address}`]
|
|
242
|
+
: undefined;
|
|
243
|
+
const existing = balances.find((balance) => balance.chain_id === native.chain.chainId &&
|
|
244
|
+
balance.address === SOLANA_NATIVE_ADDRESS);
|
|
245
|
+
if (existing) {
|
|
246
|
+
const price = existing.price_usd ?? priceUsd;
|
|
247
|
+
existing.amount = native.amount.toString();
|
|
248
|
+
if (price !== undefined) {
|
|
249
|
+
existing.price_usd = price;
|
|
250
|
+
existing.value_usd =
|
|
251
|
+
price * Number((0, viem_1.formatUnits)(native.amount, existing.decimals));
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
else if (native.amount > BigInt(0)) {
|
|
255
|
+
balances.push({
|
|
256
|
+
chain_id: native.chain.chainId,
|
|
257
|
+
address: SOLANA_NATIVE_ADDRESS,
|
|
258
|
+
amount: native.amount.toString(),
|
|
259
|
+
symbol: native.chain.symbol,
|
|
260
|
+
decimals: native.chain.decimals,
|
|
261
|
+
price_usd: priceUsd,
|
|
262
|
+
value_usd: priceUsd !== undefined
|
|
263
|
+
? priceUsd *
|
|
264
|
+
Number((0, viem_1.formatUnits)(native.amount, native.chain.decimals))
|
|
265
|
+
: undefined
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
return { balances };
|
|
271
|
+
};
|
|
272
|
+
exports.fetchCodexBalances = fetchCodexBalances;
|
|
273
|
+
exports.default = (address, queryOptions) => {
|
|
274
|
+
const providerOptions = (0, react_1.useContext)(RelayKitProvider_js_1.ProviderOptionsContext);
|
|
275
|
+
const relayClient = (0, useRelayClient_js_1.default)();
|
|
276
|
+
const codexConfig = providerOptions.codexConfig;
|
|
277
|
+
const queryKey = ['useCodexBalances', address];
|
|
278
|
+
const isEvmAddress = (0, viem_1.isAddress)(address ?? '');
|
|
279
|
+
const isSvmAddress = (0, solana_js_1.isSolanaAddress)(address ?? '');
|
|
280
|
+
const networks = isSvmAddress
|
|
281
|
+
? [exports.CODEX_SVM_NETWORK_ID]
|
|
282
|
+
: (0, exports.getEvmNetworkIds)(relayClient?.chains);
|
|
283
|
+
const response = react_query_1.useQuery({
|
|
284
|
+
queryKey,
|
|
285
|
+
queryFn: () => {
|
|
286
|
+
if (!address || (!isSvmAddress && !isEvmAddress)) {
|
|
287
|
+
return null;
|
|
288
|
+
}
|
|
289
|
+
return (0, exports.fetchCodexBalances)(address, codexConfig ?? {}, networks, isSvmAddress ? (0, exports.getSvmNativeChains)(relayClient?.chains) : undefined);
|
|
290
|
+
},
|
|
291
|
+
...queryOptions,
|
|
292
|
+
enabled: address !== undefined &&
|
|
293
|
+
networks.length > 0 &&
|
|
294
|
+
(codexConfig?.apiKey !== undefined ||
|
|
295
|
+
codexConfig?.apiBaseUrl !== undefined) &&
|
|
296
|
+
queryOptions?.enabled &&
|
|
297
|
+
(isSvmAddress || isEvmAddress)
|
|
298
|
+
});
|
|
299
|
+
const balanceMap = response?.data?.balances?.reduce((balanceMap, balance) => {
|
|
300
|
+
balanceMap[`${balance.chain_id}:${balance.address.toLowerCase()}`] = balance;
|
|
301
|
+
return balanceMap;
|
|
302
|
+
}, {});
|
|
303
|
+
return { ...response, balanceMap, queryKey };
|
|
304
|
+
};
|
|
305
|
+
//# 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"]}
|
|
@@ -4,13 +4,10 @@ const tslib_1 = require("tslib");
|
|
|
4
4
|
const viem_1 = require("viem");
|
|
5
5
|
const wagmi_1 = require("wagmi");
|
|
6
6
|
const viem_2 = require("viem");
|
|
7
|
-
const
|
|
7
|
+
const useSolanaBalance_js_1 = tslib_1.__importDefault(require("./useSolanaBalance.js"));
|
|
8
8
|
const useBitcoinBalance_js_1 = tslib_1.__importDefault(require("./useBitcoinBalance.js"));
|
|
9
9
|
const useAdaptedWalletBalance_js_1 = tslib_1.__importDefault(require("./useAdaptedWalletBalance.js"));
|
|
10
10
|
const address_js_1 = require("../utils/address.js");
|
|
11
|
-
const useRelayClient_js_1 = tslib_1.__importDefault(require("./useRelayClient.js"));
|
|
12
|
-
const useEclipseBalance_js_1 = tslib_1.__importDefault(require("../hooks/useEclipseBalance.js"));
|
|
13
|
-
const solana_js_1 = require("../utils/solana.js");
|
|
14
11
|
const useHyperliquidBalance_js_1 = tslib_1.__importDefault(require("./useHyperliquidBalance.js"));
|
|
15
12
|
const useHyperliquidAccountMode_js_1 = tslib_1.__importDefault(require("./useHyperliquidAccountMode.js"));
|
|
16
13
|
const useTronBalance_js_1 = tslib_1.__importDefault(require("../hooks/useTronBalance.js"));
|
|
@@ -18,7 +15,6 @@ const useTonBalance_js_1 = tslib_1.__importDefault(require("../hooks/useTonBalan
|
|
|
18
15
|
const useCurrencyBalance = ({ chain, address, currency, enabled = true, refreshInterval = 60000, wallet }) => {
|
|
19
16
|
const isErc20Currency = currency && currency !== viem_1.zeroAddress;
|
|
20
17
|
const isValidEvmAddress = address && (0, viem_1.isAddress)(address);
|
|
21
|
-
const relayClient = (0, useRelayClient_js_1.default)();
|
|
22
18
|
const adaptedWalletBalanceIsEnabled = wallet?.getBalance !== undefined && wallet.vmType === chain?.vmType;
|
|
23
19
|
const adaptedWalletBalance = (0, useAdaptedWalletBalance_js_1.default)({
|
|
24
20
|
wallet,
|
|
@@ -58,11 +54,10 @@ const useCurrencyBalance = ({ chain, address, currency, enabled = true, refreshI
|
|
|
58
54
|
}
|
|
59
55
|
});
|
|
60
56
|
const _isValidAddress = (0, address_js_1.isValidAddress)(chain?.vmType, address, chain?.id);
|
|
61
|
-
const
|
|
57
|
+
const solanaBalance = (0, useSolanaBalance_js_1.default)(address, currency ? currency : undefined, chain?.httpRpcUrl, {
|
|
62
58
|
enabled: Boolean(!adaptedWalletBalanceIsEnabled &&
|
|
63
59
|
chain &&
|
|
64
60
|
chain.vmType === 'svm' &&
|
|
65
|
-
chain.id !== solana_js_1.eclipse.id &&
|
|
66
61
|
address &&
|
|
67
62
|
_isValidAddress &&
|
|
68
63
|
enabled),
|
|
@@ -79,15 +74,6 @@ const useCurrencyBalance = ({ chain, address, currency, enabled = true, refreshI
|
|
|
79
74
|
gcTime: refreshInterval,
|
|
80
75
|
staleTime: refreshInterval
|
|
81
76
|
});
|
|
82
|
-
const eclipseBalances = (0, useEclipseBalance_js_1.default)(address, {
|
|
83
|
-
enabled: Boolean(!adaptedWalletBalanceIsEnabled &&
|
|
84
|
-
chain &&
|
|
85
|
-
chain.vmType === 'svm' &&
|
|
86
|
-
chain.id === solana_js_1.eclipse.id &&
|
|
87
|
-
address &&
|
|
88
|
-
_isValidAddress &&
|
|
89
|
-
enabled)
|
|
90
|
-
});
|
|
91
77
|
const isHypevm = chain?.vmType === 'hypevm';
|
|
92
78
|
const { data: hyperliquidAccountMode } = (0, useHyperliquidAccountMode_js_1.default)(address, Boolean(!adaptedWalletBalanceIsEnabled &&
|
|
93
79
|
isHypevm &&
|
|
@@ -130,8 +116,7 @@ const useCurrencyBalance = ({ chain, address, currency, enabled = true, refreshI
|
|
|
130
116
|
queryKey: adaptedWalletBalance.queryKey,
|
|
131
117
|
isLoading: adaptedWalletBalance.isLoading,
|
|
132
118
|
isError: adaptedWalletBalance.isError,
|
|
133
|
-
error: adaptedWalletBalance.error
|
|
134
|
-
isDuneBalance: false
|
|
119
|
+
error: adaptedWalletBalance.error
|
|
135
120
|
};
|
|
136
121
|
}
|
|
137
122
|
else if (chain?.vmType === 'evm') {
|
|
@@ -142,51 +127,16 @@ const useCurrencyBalance = ({ chain, address, currency, enabled = true, refreshI
|
|
|
142
127
|
const isLoading = isErc20Currency
|
|
143
128
|
? erc20BalanceIsLoading
|
|
144
129
|
: ethBalanceIsLoading;
|
|
145
|
-
return { value, queryKey, isLoading, isError, error
|
|
130
|
+
return { value, queryKey, isLoading, isError, error };
|
|
146
131
|
}
|
|
147
132
|
else if (chain?.vmType === 'svm') {
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
isError = eclipseBalances.isError;
|
|
156
|
-
error = eclipseBalances.error;
|
|
157
|
-
}
|
|
158
|
-
else {
|
|
159
|
-
value =
|
|
160
|
-
currency &&
|
|
161
|
-
duneBalances.balanceMap &&
|
|
162
|
-
duneBalances.balanceMap[`${chain.id}:${currency}`] &&
|
|
163
|
-
duneBalances.balanceMap[`${chain.id}:${currency}`].amount
|
|
164
|
-
? BigInt(duneBalances.balanceMap[`${chain.id}:${currency}`].amount ?? 0)
|
|
165
|
-
: undefined;
|
|
166
|
-
isDuneBalance = true;
|
|
167
|
-
isError = duneBalances.isError;
|
|
168
|
-
error = duneBalances.error;
|
|
169
|
-
}
|
|
170
|
-
if (_isValidAddress) {
|
|
171
|
-
return {
|
|
172
|
-
value,
|
|
173
|
-
queryKey: duneBalances.queryKey,
|
|
174
|
-
isLoading: duneBalances.isLoading,
|
|
175
|
-
isError,
|
|
176
|
-
error,
|
|
177
|
-
isDuneBalance
|
|
178
|
-
};
|
|
179
|
-
}
|
|
180
|
-
else {
|
|
181
|
-
return {
|
|
182
|
-
value: undefined,
|
|
183
|
-
queryKey: duneBalances.queryKey,
|
|
184
|
-
isLoading: duneBalances.isLoading,
|
|
185
|
-
isError,
|
|
186
|
-
error,
|
|
187
|
-
isDuneBalance
|
|
188
|
-
};
|
|
189
|
-
}
|
|
133
|
+
return {
|
|
134
|
+
value: _isValidAddress ? solanaBalance.balance : undefined,
|
|
135
|
+
queryKey: solanaBalance.queryKey,
|
|
136
|
+
isLoading: solanaBalance.isLoading,
|
|
137
|
+
isError: solanaBalance.isError,
|
|
138
|
+
error: solanaBalance.error
|
|
139
|
+
};
|
|
190
140
|
}
|
|
191
141
|
else if (chain?.vmType === 'bvm') {
|
|
192
142
|
if (_isValidAddress) {
|
|
@@ -198,7 +148,6 @@ const useCurrencyBalance = ({ chain, address, currency, enabled = true, refreshI
|
|
|
198
148
|
isLoading: bitcoinBalances.isLoading,
|
|
199
149
|
isError: bitcoinBalances.isError,
|
|
200
150
|
error: bitcoinBalances.error,
|
|
201
|
-
isDuneBalance: false,
|
|
202
151
|
hasPendingBalance: bitcoinBalances.data?.pendingBalance &&
|
|
203
152
|
bitcoinBalances.data?.pendingBalance > 0n
|
|
204
153
|
? true
|
|
@@ -212,7 +161,6 @@ const useCurrencyBalance = ({ chain, address, currency, enabled = true, refreshI
|
|
|
212
161
|
isLoading: bitcoinBalances.isLoading,
|
|
213
162
|
isError: bitcoinBalances.isError,
|
|
214
163
|
error: bitcoinBalances.error,
|
|
215
|
-
isDuneBalance: false,
|
|
216
164
|
hasPendingBalance: false
|
|
217
165
|
};
|
|
218
166
|
}
|
|
@@ -223,8 +171,7 @@ const useCurrencyBalance = ({ chain, address, currency, enabled = true, refreshI
|
|
|
223
171
|
queryKey: hyperliquidBalance.queryKey,
|
|
224
172
|
isLoading: hyperliquidBalance.isLoading,
|
|
225
173
|
isError: hyperliquidBalance.isError,
|
|
226
|
-
error: hyperliquidBalance.error
|
|
227
|
-
isDuneBalance: false
|
|
174
|
+
error: hyperliquidBalance.error
|
|
228
175
|
};
|
|
229
176
|
}
|
|
230
177
|
else if (chain?.vmType === 'tvm') {
|
|
@@ -233,8 +180,7 @@ const useCurrencyBalance = ({ chain, address, currency, enabled = true, refreshI
|
|
|
233
180
|
queryKey: tronBalance.queryKey,
|
|
234
181
|
isLoading: tronBalance.isLoading,
|
|
235
182
|
isError: tronBalance.isError,
|
|
236
|
-
error: tronBalance.error
|
|
237
|
-
isDuneBalance: false
|
|
183
|
+
error: tronBalance.error
|
|
238
184
|
};
|
|
239
185
|
}
|
|
240
186
|
else if (chain?.vmType === 'tonvm') {
|
|
@@ -243,18 +189,16 @@ const useCurrencyBalance = ({ chain, address, currency, enabled = true, refreshI
|
|
|
243
189
|
queryKey: tonBalance.queryKey,
|
|
244
190
|
isLoading: tonBalance.isLoading,
|
|
245
191
|
isError: tonBalance.isError,
|
|
246
|
-
error: tonBalance.error
|
|
247
|
-
isDuneBalance: false
|
|
192
|
+
error: tonBalance.error
|
|
248
193
|
};
|
|
249
194
|
}
|
|
250
195
|
else {
|
|
251
196
|
return {
|
|
252
197
|
value: undefined,
|
|
253
|
-
queryKey:
|
|
254
|
-
isLoading:
|
|
255
|
-
isError:
|
|
256
|
-
error:
|
|
257
|
-
isDuneBalance: false
|
|
198
|
+
queryKey: [],
|
|
199
|
+
isLoading: false,
|
|
200
|
+
isError: false,
|
|
201
|
+
error: null
|
|
258
202
|
};
|
|
259
203
|
}
|
|
260
204
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCurrencyBalance.js","sourceRoot":"","sources":["../../../src/hooks/useCurrencyBalance.ts"],"names":[],"mappings":";;;AAAA,+BAMa;AACb,iCAAmD;AACnD,+BAA+B;AAG/B,sFAAkD;AAClD,0FAAsD;AACtD,sGAAkE;AAClE,oDAAoD;AACpD,oFAAgD;AAChD,iGAA6D;AAC7D,kDAA4C;AAC5C,kGAA8D;AAC9D,0GAAsE;AACtE,2FAAuD;AACvD,yFAAqD;AAsBrD,MAAM,kBAAkB,GAAG,CAAC,EAC1B,KAAK,EACL,OAAO,EACP,QAAQ,EACR,OAAO,GAAG,IAAI,EACd,eAAe,GAAG,KAAK,EACvB,MAAM,EACU,EAA0B,EAAE;IAC5C,MAAM,eAAe,GAAG,QAAQ,IAAI,QAAQ,KAAK,kBAAW,CAAA;IAC5D,MAAM,iBAAiB,GAAG,OAAO,IAAI,IAAA,gBAAS,EAAC,OAAO,CAAC,CAAA;IACvD,MAAM,WAAW,GAAG,IAAA,2BAAc,GAAE,CAAA;IACpC,MAAM,6BAA6B,GACjC,MAAM,EAAE,UAAU,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,EAAE,MAAM,CAAA;IAErE,MAAM,oBAAoB,GAAG,IAAA,oCAAuB,EAAC;QACnD,MAAM;QACN,KAAK;QACL,OAAO;QACP,QAAQ;QACR,OAAO,EAAE,OAAO,IAAI,6BAA6B;QACjD,eAAe;KAChB,CAAC,CAAA;IAEF,MAAM,EACJ,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,kBAAkB,EAC5B,SAAS,EAAE,mBAAmB,EAC9B,OAAO,EAAE,QAAQ,EACjB,KAAK,EAAE,UAAU,EAClB,GAAG,IAAA,kBAAU,EAAC;QACb,OAAO,EAAE,KAAK,EAAE,EAAE;QAClB,OAAO,EAAE,OAAkB;QAC3B,KAAK,EAAE;YACL,OAAO,EAAE,OAAO,CACd,CAAC,6BAA6B;gBAC5B,CAAC,eAAe;gBAChB,KAAK;gBACL,KAAK,CAAC,MAAM,KAAK,KAAK;gBACtB,iBAAiB;gBACjB,OAAO,CACV;YACD,eAAe,EAAE,eAAe;SACjC;KACF,CAAC,CAAA;IAEF,MAAM,EACJ,IAAI,EAAE,YAAY,EAClB,QAAQ,EAAE,oBAAoB,EAC9B,SAAS,EAAE,qBAAqB,EAChC,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE,UAAU,EAClB,GAAG,IAAA,uBAAe,EAAC;QAClB,OAAO,EAAE,KAAK,EAAE,EAAE;QAClB,OAAO,EAAE,QAAmB;QAC5B,GAAG,EAAE,eAAQ;QACb,YAAY,EAAE,WAAW;QACzB,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAkB,CAAC,CAAC,CAAC,CAAC,SAAS;QAChD,KAAK,EAAE;YACL,OAAO,EAAE,OAAO,CACd,CAAC,6BAA6B;gBAC5B,eAAe;gBACf,KAAK;gBACL,KAAK,CAAC,MAAM,KAAK,KAAK;gBACtB,iBAAiB;gBACjB,OAAO,CACV;YACD,eAAe,EAAE,eAAe;SACjC;KACF,CAAC,CAAA;IAEF,MAAM,eAAe,GAAG,IAAA,2BAAc,EAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAA;IAEzE,MAAM,YAAY,GAAG,IAAA,4BAAe,EAClC,OAAO,EACP,WAAW,EAAE,UAAU,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EACpE;QACE,OAAO,EAAE,OAAO,CACd,CAAC,6BAA6B;YAC5B,KAAK;YACL,KAAK,CAAC,MAAM,KAAK,KAAK;YACtB,KAAK,CAAC,EAAE,KAAK,mBAAO,CAAC,EAAE;YACvB,OAAO;YACP,eAAe;YACf,OAAO,CACV;QACD,SAAS,EAAE,eAAe;QAC1B,MAAM,EAAE,eAAe;KACxB,CACF,CAAA;IAED,MAAM,eAAe,GAAG,IAAA,8BAAiB,EAAC,OAAO,EAAE;QACjD,OAAO,EAAE,OAAO,CACd,CAAC,6BAA6B;YAC5B,KAAK;YACL,KAAK,CAAC,MAAM,KAAK,KAAK;YACtB,OAAO;YACP,eAAe;YACf,OAAO,CACV;QACD,MAAM,EAAE,eAAe;QACvB,SAAS,EAAE,eAAe;KAC3B,CAAC,CAAA;IAEF,MAAM,eAAe,GAAG,IAAA,8BAAiB,EAAC,OAAO,EAAE;QACjD,OAAO,EAAE,OAAO,CACd,CAAC,6BAA6B;YAC5B,KAAK;YACL,KAAK,CAAC,MAAM,KAAK,KAAK;YACtB,KAAK,CAAC,EAAE,KAAK,mBAAO,CAAC,EAAE;YACvB,OAAO;YACP,eAAe;YACf,OAAO,CACV;KACF,CAAC,CAAA;IAEF,MAAM,QAAQ,GAAG,KAAK,EAAE,MAAM,KAAK,QAAQ,CAAA;IAE3C,MAAM,EAAE,IAAI,EAAE,sBAAsB,EAAE,GAAG,IAAA,sCAAyB,EAChE,OAAO,EACP,OAAO,CACL,CAAC,6BAA6B;QAC5B,QAAQ;QACR,OAAO;QACP,eAAe;QACf,OAAO,CACV,CACF,CAAA;IAED,MAAM,kBAAkB,GAAG,IAAA,kCAAqB,EAC9C,OAAO,EACP,QAAkB,EAClB,sBAAsB,EACtB;QACE,OAAO,EAAE,OAAO,CACd,CAAC,6BAA6B;YAC5B,QAAQ;YACR,OAAO;YACP,eAAe;YACf,OAAO,CACV;QACD,MAAM,EAAE,eAAe;QACvB,SAAS,EAAE,eAAe;KAC3B,CACF,CAAA;IAED,MAAM,WAAW,GAAG,IAAA,2BAAc,EAAC,OAAO,EAAE,QAAQ,EAAE;QACpD,OAAO,EAAE,OAAO,CACd,CAAC,6BAA6B;YAC5B,KAAK;YACL,KAAK,CAAC,MAAM,KAAK,KAAK;YACtB,OAAO;YACP,eAAe;YACf,OAAO,CACV;QACD,MAAM,EAAE,eAAe;QACvB,SAAS,EAAE,eAAe;KAC3B,CAAC,CAAA;IAEF,MAAM,UAAU,GAAG,IAAA,0BAAa,EAAC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;QAC3D,OAAO,EAAE,OAAO,CACd,CAAC,6BAA6B;YAC5B,KAAK;YACL,KAAK,CAAC,MAAM,KAAK,OAAO;YACxB,KAAK,CAAC,UAAU;YAChB,OAAO;YACP,eAAe;YACf,OAAO,CACV;QACD,MAAM,EAAE,eAAe;QACvB,SAAS,EAAE,eAAe;KAC3B,CAAC,CAAA;IAEF,IAAI,6BAA6B,EAAE,CAAC;QAClC,OAAO;YACL,KAAK,EAAE,oBAAoB,CAAC,IAAI;YAChC,QAAQ,EAAE,oBAAoB,CAAC,QAAQ;YACvC,SAAS,EAAE,oBAAoB,CAAC,SAAS;YACzC,OAAO,EAAE,oBAAoB,CAAC,OAAO;YACrC,KAAK,EAAE,oBAAoB,CAAC,KAAK;YACjC,aAAa,EAAE,KAAK;SACrB,CAAA;IACH,CAAC;SAAM,IAAI,KAAK,EAAE,MAAM,KAAK,KAAK,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,EAAE,KAAK,CAAA;QAChE,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAA;QACrD,MAAM,OAAO,GAAG,eAAe,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAA;QAC3D,MAAM,QAAQ,GAAG,eAAe,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,kBAAkB,CAAA;QAC5E,MAAM,SAAS,GAAG,eAAe;YAC/B,CAAC,CAAC,qBAAqB;YACvB,CAAC,CAAC,mBAAmB,CAAA;QACvB,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,CAAA;IAC7E,CAAC;SAAM,IAAI,KAAK,EAAE,MAAM,KAAK,KAAK,EAAE,CAAC;QACnC,IAAI,KAAK,GAAuB,SAAS,CAAA;QACzC,IAAI,aAAa,GAAG,IAAI,CAAA;QACxB,IAAI,OAAO,GAAG,KAAK,CAAA;QACnB,IAAI,KAAK,GAAiB,IAAI,CAAA;QAE9B,IAAI,KAAK,CAAC,EAAE,KAAK,mBAAO,CAAC,EAAE,EAAE,CAAC;YAC5B,KAAK,GAAG,eAAe,CAAC,IAAI,EAAE,OAAO,CAAA;YACrC,aAAa,GAAG,KAAK,CAAA;YACrB,OAAO,GAAG,eAAe,CAAC,OAAO,CAAA;YACjC,KAAK,GAAG,eAAe,CAAC,KAAK,CAAA;QAC/B,CAAC;aAAM,CAAC;YACN,KAAK;gBACH,QAAQ;oBACR,YAAY,CAAC,UAAU;oBACvB,YAAY,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,QAAQ,EAAE,CAAC;oBAClD,YAAY,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,QAAQ,EAAE,CAAC,CAAC,MAAM;oBACvD,CAAC,CAAC,MAAM,CACJ,YAAY,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,QAAQ,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,CAC/D;oBACH,CAAC,CAAC,SAAS,CAAA;YACf,aAAa,GAAG,IAAI,CAAA;YACpB,OAAO,GAAG,YAAY,CAAC,OAAO,CAAA;YAC9B,KAAK,GAAG,YAAY,CAAC,KAAK,CAAA;QAC5B,CAAC;QAED,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO;gBACL,KAAK;gBACL,QAAQ,EAAE,YAAY,CAAC,QAAQ;gBAC/B,SAAS,EAAE,YAAY,CAAC,SAAS;gBACjC,OAAO;gBACP,KAAK;gBACL,aAAa;aACd,CAAA;QACH,CAAC;aAAM,CAAC;YACN,OAAO;gBACL,KAAK,EAAE,SAAS;gBAChB,QAAQ,EAAE,YAAY,CAAC,QAAQ;gBAC/B,SAAS,EAAE,YAAY,CAAC,SAAS;gBACjC,OAAO;gBACP,KAAK;gBACL,aAAa;aACd,CAAA;QACH,CAAC;IACH,CAAC;SAAM,IAAI,KAAK,EAAE,MAAM,KAAK,KAAK,EAAE,CAAC;QACnC,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO;gBACL,KAAK,EACH,QAAQ,IAAI,eAAe,CAAC,OAAO;oBACjC,CAAC,CAAC,eAAe,CAAC,OAAO;oBACzB,CAAC,CAAC,SAAS;gBACf,QAAQ,EAAE,eAAe,CAAC,QAAQ;gBAClC,SAAS,EAAE,eAAe,CAAC,SAAS;gBACpC,OAAO,EAAE,eAAe,CAAC,OAAO;gBAChC,KAAK,EAAE,eAAe,CAAC,KAAK;gBAC5B,aAAa,EAAE,KAAK;gBACpB,iBAAiB,EACf,eAAe,CAAC,IAAI,EAAE,cAAc;oBACpC,eAAe,CAAC,IAAI,EAAE,cAAc,GAAG,EAAE;oBACvC,CAAC,CAAC,IAAI;oBACN,CAAC,CAAC,KAAK;aACZ,CAAA;QACH,CAAC;aAAM,CAAC;YACN,OAAO;gBACL,KAAK,EAAE,SAAS;gBAChB,QAAQ,EAAE,eAAe,CAAC,QAAQ;gBAClC,SAAS,EAAE,eAAe,CAAC,SAAS;gBACpC,OAAO,EAAE,eAAe,CAAC,OAAO;gBAChC,KAAK,EAAE,eAAe,CAAC,KAAK;gBAC5B,aAAa,EAAE,KAAK;gBACpB,iBAAiB,EAAE,KAAK;aACzB,CAAA;QACH,CAAC;IACH,CAAC;SAAM,IAAI,KAAK,EAAE,MAAM,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO;YACL,KAAK,EAAE,kBAAkB,CAAC,OAAO;YACjC,QAAQ,EAAE,kBAAkB,CAAC,QAAQ;YACrC,SAAS,EAAE,kBAAkB,CAAC,SAAS;YACvC,OAAO,EAAE,kBAAkB,CAAC,OAAO;YACnC,KAAK,EAAE,kBAAkB,CAAC,KAAK;YAC/B,aAAa,EAAE,KAAK;SACrB,CAAA;IACH,CAAC;SAAM,IAAI,KAAK,EAAE,MAAM,KAAK,KAAK,EAAE,CAAC;QACnC,OAAO;YACL,KAAK,EAAE,WAAW,CAAC,OAAO;YAC1B,QAAQ,EAAE,WAAW,CAAC,QAAQ;YAC9B,SAAS,EAAE,WAAW,CAAC,SAAS;YAChC,OAAO,EAAE,WAAW,CAAC,OAAO;YAC5B,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,aAAa,EAAE,KAAK;SACrB,CAAA;IACH,CAAC;SAAM,IAAI,KAAK,EAAE,MAAM,KAAK,OAAO,EAAE,CAAC;QACrC,OAAO;YACL,KAAK,EAAE,UAAU,CAAC,OAAO;YACzB,QAAQ,EAAE,UAAU,CAAC,QAAQ;YAC7B,SAAS,EAAE,UAAU,CAAC,SAAS;YAC/B,OAAO,EAAE,UAAU,CAAC,OAAO;YAC3B,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,aAAa,EAAE,KAAK;SACrB,CAAA;IACH,CAAC;SAAM,CAAC;QACN,OAAO;YACL,KAAK,EAAE,SAAS;YAChB,QAAQ,EAAE,YAAY,CAAC,QAAQ;YAC/B,SAAS,EAAE,YAAY,CAAC,SAAS;YACjC,OAAO,EAAE,YAAY,CAAC,OAAO;YAC7B,KAAK,EAAE,YAAY,CAAC,KAAK;YACzB,aAAa,EAAE,KAAK;SACrB,CAAA;IACH,CAAC;AACH,CAAC,CAAA;AAED,kBAAe,kBAAkB,CAAA","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"]}
|