@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
package/package.json
CHANGED
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const viem_1 = require("viem");
|
|
4
|
-
const RelayKitProvider_js_1 = require("../providers/RelayKitProvider.js");
|
|
5
|
-
const react_1 = require("react");
|
|
6
|
-
const react_query_1 = require("@tanstack/react-query");
|
|
7
|
-
const solana_js_1 = require("../utils/solana.js");
|
|
8
|
-
exports.default = (address, evmChainIds = 'mainnet', queryOptions) => {
|
|
9
|
-
const providerOptions = (0, react_1.useContext)(RelayKitProvider_js_1.ProviderOptionsContext);
|
|
10
|
-
const queryKey = ['useDuneBalances', address];
|
|
11
|
-
const isEvmAddress = (0, viem_1.isAddress)(address ?? '');
|
|
12
|
-
const isSvmAddress = (0, solana_js_1.isSolanaAddress)(address ?? '');
|
|
13
|
-
const response = react_query_1.useQuery({
|
|
14
|
-
queryKey: ['useDuneBalances', address],
|
|
15
|
-
queryFn: () => {
|
|
16
|
-
let url = `${providerOptions.duneConfig?.apiBaseUrl ?? 'https://api.sim.dune.com'}/v1/evm/balances/${address?.toLowerCase()}?chain_ids=${evmChainIds}&exclude_spam_tokens=true`;
|
|
17
|
-
if (isSvmAddress) {
|
|
18
|
-
url = `${providerOptions.duneConfig?.apiBaseUrl ?? 'https://api.sim.dune.com'}/beta/svm/balances/${address}?chain_ids=all&exclude_spam_tokens=true`;
|
|
19
|
-
}
|
|
20
|
-
if (!isSvmAddress && !isEvmAddress) {
|
|
21
|
-
return null;
|
|
22
|
-
}
|
|
23
|
-
return fetch(url, {
|
|
24
|
-
headers: providerOptions.duneConfig?.apiKey
|
|
25
|
-
? {
|
|
26
|
-
'X-Sim-Api-Key': providerOptions.duneConfig?.apiKey
|
|
27
|
-
}
|
|
28
|
-
: {}
|
|
29
|
-
})
|
|
30
|
-
.then((response) => response.json())
|
|
31
|
-
.then((response) => {
|
|
32
|
-
if (response.balances) {
|
|
33
|
-
const balances = response.balances;
|
|
34
|
-
if (balances) {
|
|
35
|
-
balances
|
|
36
|
-
.filter((balance) => {
|
|
37
|
-
try {
|
|
38
|
-
BigInt(balance.amount);
|
|
39
|
-
return true;
|
|
40
|
-
}
|
|
41
|
-
catch (e) {
|
|
42
|
-
return false;
|
|
43
|
-
}
|
|
44
|
-
})
|
|
45
|
-
.sort((a, b) => {
|
|
46
|
-
if (a.value_usd !== undefined && b.value_usd !== undefined) {
|
|
47
|
-
return a.value_usd - b.value_usd;
|
|
48
|
-
}
|
|
49
|
-
else if (a.value_usd !== undefined) {
|
|
50
|
-
return -1;
|
|
51
|
-
}
|
|
52
|
-
else if (b.value_usd !== undefined) {
|
|
53
|
-
return 1;
|
|
54
|
-
}
|
|
55
|
-
else {
|
|
56
|
-
const amountA = parseFloat((0, viem_1.formatUnits)(BigInt(a.amount), a.decimals));
|
|
57
|
-
const amountB = parseFloat((0, viem_1.formatUnits)(BigInt(b.amount), b.decimals));
|
|
58
|
-
return amountA - amountB;
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
return response;
|
|
64
|
-
});
|
|
65
|
-
},
|
|
66
|
-
...queryOptions,
|
|
67
|
-
enabled: address !== undefined &&
|
|
68
|
-
(providerOptions.duneConfig?.apiKey !== undefined ||
|
|
69
|
-
providerOptions.duneConfig?.apiBaseUrl !== undefined) &&
|
|
70
|
-
queryOptions?.enabled &&
|
|
71
|
-
(isSvmAddress || isEvmAddress)
|
|
72
|
-
});
|
|
73
|
-
const balanceMap = response?.data?.balances?.reduce((balanceMap, balance) => {
|
|
74
|
-
const normalizedBalance = { ...balance };
|
|
75
|
-
if (!normalizedBalance.chain_id && normalizedBalance.chain === 'solana') {
|
|
76
|
-
normalizedBalance.chain_id = solana_js_1.solana.id;
|
|
77
|
-
}
|
|
78
|
-
if (!normalizedBalance.chain_id && normalizedBalance.chain === 'eclipse') {
|
|
79
|
-
normalizedBalance.chain_id = solana_js_1.eclipse.id;
|
|
80
|
-
}
|
|
81
|
-
if (normalizedBalance.address === 'native') {
|
|
82
|
-
normalizedBalance.address =
|
|
83
|
-
normalizedBalance.chain === 'solana' ||
|
|
84
|
-
normalizedBalance.chain === 'eclipse'
|
|
85
|
-
? '11111111111111111111111111111111'
|
|
86
|
-
: viem_1.zeroAddress;
|
|
87
|
-
}
|
|
88
|
-
let chainId = normalizedBalance.chain_id;
|
|
89
|
-
if (!chainId && normalizedBalance.chain === 'solana') {
|
|
90
|
-
chainId = solana_js_1.solana.id;
|
|
91
|
-
}
|
|
92
|
-
if (!chainId && normalizedBalance.chain === 'eclipse') {
|
|
93
|
-
chainId = solana_js_1.eclipse.id;
|
|
94
|
-
}
|
|
95
|
-
balanceMap[`${chainId}:${normalizedBalance.address}`] = normalizedBalance;
|
|
96
|
-
return balanceMap;
|
|
97
|
-
}, {});
|
|
98
|
-
return { ...response, balanceMap, queryKey };
|
|
99
|
-
};
|
|
100
|
-
//# sourceMappingURL=useDuneBalances.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useDuneBalances.js","sourceRoot":"","sources":["../../../src/hooks/useDuneBalances.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'\n\nexport type DuneBalanceResponse = {\n request_time: string\n response_time: string\n wallet_address: string\n balances: Array<{\n chain: string\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} | null\n\nexport type BalanceMap = Record<\n string,\n NonNullable<DuneBalanceResponse>['balances'][0]\n>\n\ntype QueryType = typeof useQuery<\n DuneBalanceResponse,\n DefaultError,\n DuneBalanceResponse,\n QueryKey\n>\ntype QueryOptions = Parameters<QueryType>['0']\n\nexport default (\n address?: string,\n evmChainIds: 'mainnet' | 'testnet' = 'mainnet',\n queryOptions?: Partial<QueryOptions>\n) => {\n const providerOptions = useContext(ProviderOptionsContext)\n const queryKey = ['useDuneBalances', address]\n const isEvmAddress = isAddress(address ?? '')\n const isSvmAddress = isSolanaAddress(address ?? '')\n\n const response = (useQuery as QueryType)({\n queryKey: ['useDuneBalances', address],\n queryFn: () => {\n let url = `${\n providerOptions.duneConfig?.apiBaseUrl ?? 'https://api.sim.dune.com'\n }/v1/evm/balances/${address?.toLowerCase()}?chain_ids=${evmChainIds}&exclude_spam_tokens=true`\n if (isSvmAddress) {\n url = `${\n providerOptions.duneConfig?.apiBaseUrl ?? 'https://api.sim.dune.com'\n }/beta/svm/balances/${address}?chain_ids=all&exclude_spam_tokens=true`\n }\n\n if (!isSvmAddress && !isEvmAddress) {\n return null\n }\n\n return fetch(url, {\n headers: providerOptions.duneConfig?.apiKey\n ? {\n 'X-Sim-Api-Key': providerOptions.duneConfig?.apiKey\n }\n : ({} as HeadersInit)\n })\n .then((response) => response.json())\n .then((response) => {\n if (response.balances) {\n const balances =\n response.balances as NonNullable<DuneBalanceResponse>['balances']\n if (balances) {\n balances\n .filter((balance) => {\n try {\n BigInt(balance.amount)\n return true\n } catch (e) {\n return false\n }\n })\n .sort((a, b) => {\n // Check if value_usd exists and use it for comparison if available\n if (a.value_usd !== undefined && b.value_usd !== undefined) {\n return a.value_usd - b.value_usd\n } else if (a.value_usd !== undefined) {\n return -1 // a should come before b as it has a value_usd\n } else if (b.value_usd !== undefined) {\n return 1 // b should come before a as it has a value_usd\n } else {\n const amountA = parseFloat(\n formatUnits(BigInt(a.amount), a.decimals)\n )\n const amountB = parseFloat(\n formatUnits(BigInt(b.amount), b.decimals)\n )\n return amountA - amountB\n }\n })\n }\n }\n return response\n })\n },\n ...queryOptions,\n enabled:\n address !== undefined &&\n (providerOptions.duneConfig?.apiKey !== undefined ||\n providerOptions.duneConfig?.apiBaseUrl !== undefined) &&\n queryOptions?.enabled &&\n (isSvmAddress || isEvmAddress)\n })\n\n const balanceMap = response?.data?.balances?.reduce((balanceMap, balance) => {\n // Create a new object instead of mutating the cached one\n const normalizedBalance = { ...balance }\n\n // Normalize chain_id\n if (!normalizedBalance.chain_id && normalizedBalance.chain === 'solana') {\n normalizedBalance.chain_id = solana.id\n }\n if (!normalizedBalance.chain_id && normalizedBalance.chain === 'eclipse') {\n normalizedBalance.chain_id = eclipse.id\n }\n\n // Normalize native address\n if (normalizedBalance.address === 'native') {\n normalizedBalance.address =\n normalizedBalance.chain === 'solana' ||\n normalizedBalance.chain === 'eclipse'\n ? '11111111111111111111111111111111'\n : zeroAddress\n }\n\n let chainId = normalizedBalance.chain_id\n if (!chainId && normalizedBalance.chain === 'solana') {\n chainId = solana.id\n }\n if (!chainId && normalizedBalance.chain === 'eclipse') {\n chainId = eclipse.id\n }\n\n balanceMap[`${chainId}:${normalizedBalance.address}`] = normalizedBalance\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,47 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const tslib_1 = require("tslib");
|
|
4
|
-
const react_query_1 = require("@tanstack/react-query");
|
|
5
|
-
const useRelayClient_js_1 = tslib_1.__importDefault(require("./useRelayClient.js"));
|
|
6
|
-
exports.default = (address, queryOptions) => {
|
|
7
|
-
const client = (0, useRelayClient_js_1.default)();
|
|
8
|
-
const eclipseChain = client?.chains?.find((chain) => chain.id === 9286185);
|
|
9
|
-
const rpcUrl = eclipseChain && eclipseChain.httpRpcUrl
|
|
10
|
-
? eclipseChain.httpRpcUrl
|
|
11
|
-
: 'https://mainnetbeta-rpc.eclipse.xyz';
|
|
12
|
-
const queryKey = ['useEclipseBalance', address, rpcUrl];
|
|
13
|
-
const response = react_query_1.useQuery({
|
|
14
|
-
queryKey,
|
|
15
|
-
queryFn: async () => {
|
|
16
|
-
const payload = {
|
|
17
|
-
jsonrpc: '2.0',
|
|
18
|
-
id: 1,
|
|
19
|
-
method: 'getBalance',
|
|
20
|
-
params: [address]
|
|
21
|
-
};
|
|
22
|
-
const response = await fetch(rpcUrl, {
|
|
23
|
-
method: 'POST',
|
|
24
|
-
headers: {
|
|
25
|
-
'Content-Type': 'application/json'
|
|
26
|
-
},
|
|
27
|
-
body: JSON.stringify(payload)
|
|
28
|
-
});
|
|
29
|
-
const data = await response.json();
|
|
30
|
-
if (data.error) {
|
|
31
|
-
throw new Error(data.error.message);
|
|
32
|
-
}
|
|
33
|
-
const result = data.result;
|
|
34
|
-
return {
|
|
35
|
-
balance: BigInt(result.value)
|
|
36
|
-
};
|
|
37
|
-
},
|
|
38
|
-
enabled: address !== undefined,
|
|
39
|
-
...queryOptions
|
|
40
|
-
});
|
|
41
|
-
return {
|
|
42
|
-
...response,
|
|
43
|
-
balance: response.data?.balance,
|
|
44
|
-
queryKey
|
|
45
|
-
};
|
|
46
|
-
};
|
|
47
|
-
//# sourceMappingURL=useEclipseBalance.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useEclipseBalance.js","sourceRoot":"","sources":["../../../src/hooks/useEclipseBalance.ts"],"names":[],"mappings":";;;AAAA,uDAI8B;AAC9B,oFAAgD;AAkBhD,kBAAe,CAAC,OAAgB,EAAE,YAAoC,EAAE,EAAE;IACxE,MAAM,MAAM,GAAG,IAAA,2BAAc,GAAE,CAAA;IAC/B,MAAM,YAAY,GAAG,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC,CAAA;IAC1E,MAAM,MAAM,GACV,YAAY,IAAI,YAAY,CAAC,UAAU;QACrC,CAAC,CAAC,YAAY,CAAC,UAAU;QACzB,CAAC,CAAC,qCAAqC,CAAA;IAC3C,MAAM,QAAQ,GAAG,CAAC,mBAAmB,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;IAEvD,MAAM,QAAQ,GAAI,sBAAsB,CAAC;QACvC,QAAQ;QACR,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,OAAO,GAAG;gBACd,OAAO,EAAE,KAAK;gBACd,EAAE,EAAE,CAAC;gBACL,MAAM,EAAE,YAAY;gBACpB,MAAM,EAAE,CAAC,OAAO,CAAC;aAClB,CAAA;YAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE;gBACnC,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;iBACnC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;aAC9B,CAAC,CAAA;YAEF,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;YAElC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;YACrC,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAgC,CAAA;YAEpD,OAAO;gBACL,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9B,CAAA;QACH,CAAC;QACD,OAAO,EAAE,OAAO,KAAK,SAAS;QAC9B,GAAG,YAAY;KAChB,CAAC,CAAA;IAEF,OAAO;QACL,GAAG,QAAQ;QACX,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO;QAC/B,QAAQ;KAIT,CAAA;AACH,CAAC,CAAA","sourcesContent":["import {\n useQuery,\n type DefaultError,\n type QueryKey\n} from '@tanstack/react-query'\nimport useRelayClient from './useRelayClient.js'\n\ntype EclipseBalanceResponse = {\n value: number\n}\n\ntype BalanceResponse = {\n balance: bigint\n}\n\ntype QueryType = typeof useQuery<\n BalanceResponse | undefined,\n DefaultError,\n BalanceResponse | undefined,\n QueryKey\n>\ntype QueryOptions = Parameters<QueryType>['0']\n\nexport default (address?: string, queryOptions?: Partial<QueryOptions>) => {\n const client = useRelayClient()\n const eclipseChain = client?.chains?.find((chain) => chain.id === 9286185)\n const rpcUrl =\n eclipseChain && eclipseChain.httpRpcUrl\n ? eclipseChain.httpRpcUrl\n : 'https://mainnetbeta-rpc.eclipse.xyz'\n const queryKey = ['useEclipseBalance', address, rpcUrl]\n\n const response = (useQuery as QueryType)({\n queryKey,\n queryFn: async () => {\n const payload = {\n jsonrpc: '2.0',\n id: 1,\n method: 'getBalance',\n params: [address]\n }\n\n const response = await fetch(rpcUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(payload)\n })\n\n const data = await response.json()\n\n if (data.error) {\n throw new Error(data.error.message)\n }\n\n const result = data.result as EclipseBalanceResponse\n\n return {\n balance: BigInt(result.value)\n }\n },\n enabled: address !== undefined,\n ...queryOptions\n })\n\n return {\n ...response,\n balance: response.data?.balance,\n queryKey\n } as ReturnType<QueryType> & {\n balance: bigint | undefined\n queryKey: (string | undefined)[]\n }\n}\n"]}
|
|
@@ -1,102 +0,0 @@
|
|
|
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
|
-
export default (address, evmChainIds = 'mainnet', queryOptions) => {
|
|
7
|
-
const providerOptions = useContext(ProviderOptionsContext);
|
|
8
|
-
const queryKey = ['useDuneBalances', address];
|
|
9
|
-
const isEvmAddress = isAddress(address ?? '');
|
|
10
|
-
const isSvmAddress = isSolanaAddress(address ?? '');
|
|
11
|
-
const response = useQuery({
|
|
12
|
-
queryKey: ['useDuneBalances', address],
|
|
13
|
-
queryFn: () => {
|
|
14
|
-
let url = `${providerOptions.duneConfig?.apiBaseUrl ?? 'https://api.sim.dune.com'}/v1/evm/balances/${address?.toLowerCase()}?chain_ids=${evmChainIds}&exclude_spam_tokens=true`;
|
|
15
|
-
if (isSvmAddress) {
|
|
16
|
-
url = `${providerOptions.duneConfig?.apiBaseUrl ?? 'https://api.sim.dune.com'}/beta/svm/balances/${address}?chain_ids=all&exclude_spam_tokens=true`;
|
|
17
|
-
}
|
|
18
|
-
if (!isSvmAddress && !isEvmAddress) {
|
|
19
|
-
return null;
|
|
20
|
-
}
|
|
21
|
-
return fetch(url, {
|
|
22
|
-
headers: providerOptions.duneConfig?.apiKey
|
|
23
|
-
? {
|
|
24
|
-
'X-Sim-Api-Key': providerOptions.duneConfig?.apiKey
|
|
25
|
-
}
|
|
26
|
-
: {}
|
|
27
|
-
})
|
|
28
|
-
.then((response) => response.json())
|
|
29
|
-
.then((response) => {
|
|
30
|
-
if (response.balances) {
|
|
31
|
-
const balances = response.balances;
|
|
32
|
-
if (balances) {
|
|
33
|
-
balances
|
|
34
|
-
.filter((balance) => {
|
|
35
|
-
try {
|
|
36
|
-
BigInt(balance.amount);
|
|
37
|
-
return true;
|
|
38
|
-
}
|
|
39
|
-
catch (e) {
|
|
40
|
-
return false;
|
|
41
|
-
}
|
|
42
|
-
})
|
|
43
|
-
.sort((a, b) => {
|
|
44
|
-
// Check if value_usd exists and use it for comparison if available
|
|
45
|
-
if (a.value_usd !== undefined && b.value_usd !== undefined) {
|
|
46
|
-
return a.value_usd - b.value_usd;
|
|
47
|
-
}
|
|
48
|
-
else if (a.value_usd !== undefined) {
|
|
49
|
-
return -1; // a should come before b as it has a value_usd
|
|
50
|
-
}
|
|
51
|
-
else if (b.value_usd !== undefined) {
|
|
52
|
-
return 1; // b should come before a as it has a value_usd
|
|
53
|
-
}
|
|
54
|
-
else {
|
|
55
|
-
const amountA = parseFloat(formatUnits(BigInt(a.amount), a.decimals));
|
|
56
|
-
const amountB = parseFloat(formatUnits(BigInt(b.amount), b.decimals));
|
|
57
|
-
return amountA - amountB;
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
return response;
|
|
63
|
-
});
|
|
64
|
-
},
|
|
65
|
-
...queryOptions,
|
|
66
|
-
enabled: address !== undefined &&
|
|
67
|
-
(providerOptions.duneConfig?.apiKey !== undefined ||
|
|
68
|
-
providerOptions.duneConfig?.apiBaseUrl !== undefined) &&
|
|
69
|
-
queryOptions?.enabled &&
|
|
70
|
-
(isSvmAddress || isEvmAddress)
|
|
71
|
-
});
|
|
72
|
-
const balanceMap = response?.data?.balances?.reduce((balanceMap, balance) => {
|
|
73
|
-
// Create a new object instead of mutating the cached one
|
|
74
|
-
const normalizedBalance = { ...balance };
|
|
75
|
-
// Normalize chain_id
|
|
76
|
-
if (!normalizedBalance.chain_id && normalizedBalance.chain === 'solana') {
|
|
77
|
-
normalizedBalance.chain_id = solana.id;
|
|
78
|
-
}
|
|
79
|
-
if (!normalizedBalance.chain_id && normalizedBalance.chain === 'eclipse') {
|
|
80
|
-
normalizedBalance.chain_id = eclipse.id;
|
|
81
|
-
}
|
|
82
|
-
// Normalize native address
|
|
83
|
-
if (normalizedBalance.address === 'native') {
|
|
84
|
-
normalizedBalance.address =
|
|
85
|
-
normalizedBalance.chain === 'solana' ||
|
|
86
|
-
normalizedBalance.chain === 'eclipse'
|
|
87
|
-
? '11111111111111111111111111111111'
|
|
88
|
-
: zeroAddress;
|
|
89
|
-
}
|
|
90
|
-
let chainId = normalizedBalance.chain_id;
|
|
91
|
-
if (!chainId && normalizedBalance.chain === 'solana') {
|
|
92
|
-
chainId = solana.id;
|
|
93
|
-
}
|
|
94
|
-
if (!chainId && normalizedBalance.chain === 'eclipse') {
|
|
95
|
-
chainId = eclipse.id;
|
|
96
|
-
}
|
|
97
|
-
balanceMap[`${chainId}:${normalizedBalance.address}`] = normalizedBalance;
|
|
98
|
-
return balanceMap;
|
|
99
|
-
}, {});
|
|
100
|
-
return { ...response, balanceMap, queryKey };
|
|
101
|
-
};
|
|
102
|
-
//# sourceMappingURL=useDuneBalances.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useDuneBalances.js","sourceRoot":"","sources":["../../../src/hooks/useDuneBalances.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'\n\nexport type DuneBalanceResponse = {\n request_time: string\n response_time: string\n wallet_address: string\n balances: Array<{\n chain: string\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} | null\n\nexport type BalanceMap = Record<\n string,\n NonNullable<DuneBalanceResponse>['balances'][0]\n>\n\ntype QueryType = typeof useQuery<\n DuneBalanceResponse,\n DefaultError,\n DuneBalanceResponse,\n QueryKey\n>\ntype QueryOptions = Parameters<QueryType>['0']\n\nexport default (\n address?: string,\n evmChainIds: 'mainnet' | 'testnet' = 'mainnet',\n queryOptions?: Partial<QueryOptions>\n) => {\n const providerOptions = useContext(ProviderOptionsContext)\n const queryKey = ['useDuneBalances', address]\n const isEvmAddress = isAddress(address ?? '')\n const isSvmAddress = isSolanaAddress(address ?? '')\n\n const response = (useQuery as QueryType)({\n queryKey: ['useDuneBalances', address],\n queryFn: () => {\n let url = `${\n providerOptions.duneConfig?.apiBaseUrl ?? 'https://api.sim.dune.com'\n }/v1/evm/balances/${address?.toLowerCase()}?chain_ids=${evmChainIds}&exclude_spam_tokens=true`\n if (isSvmAddress) {\n url = `${\n providerOptions.duneConfig?.apiBaseUrl ?? 'https://api.sim.dune.com'\n }/beta/svm/balances/${address}?chain_ids=all&exclude_spam_tokens=true`\n }\n\n if (!isSvmAddress && !isEvmAddress) {\n return null\n }\n\n return fetch(url, {\n headers: providerOptions.duneConfig?.apiKey\n ? {\n 'X-Sim-Api-Key': providerOptions.duneConfig?.apiKey\n }\n : ({} as HeadersInit)\n })\n .then((response) => response.json())\n .then((response) => {\n if (response.balances) {\n const balances =\n response.balances as NonNullable<DuneBalanceResponse>['balances']\n if (balances) {\n balances\n .filter((balance) => {\n try {\n BigInt(balance.amount)\n return true\n } catch (e) {\n return false\n }\n })\n .sort((a, b) => {\n // Check if value_usd exists and use it for comparison if available\n if (a.value_usd !== undefined && b.value_usd !== undefined) {\n return a.value_usd - b.value_usd\n } else if (a.value_usd !== undefined) {\n return -1 // a should come before b as it has a value_usd\n } else if (b.value_usd !== undefined) {\n return 1 // b should come before a as it has a value_usd\n } else {\n const amountA = parseFloat(\n formatUnits(BigInt(a.amount), a.decimals)\n )\n const amountB = parseFloat(\n formatUnits(BigInt(b.amount), b.decimals)\n )\n return amountA - amountB\n }\n })\n }\n }\n return response\n })\n },\n ...queryOptions,\n enabled:\n address !== undefined &&\n (providerOptions.duneConfig?.apiKey !== undefined ||\n providerOptions.duneConfig?.apiBaseUrl !== undefined) &&\n queryOptions?.enabled &&\n (isSvmAddress || isEvmAddress)\n })\n\n const balanceMap = response?.data?.balances?.reduce((balanceMap, balance) => {\n // Create a new object instead of mutating the cached one\n const normalizedBalance = { ...balance }\n\n // Normalize chain_id\n if (!normalizedBalance.chain_id && normalizedBalance.chain === 'solana') {\n normalizedBalance.chain_id = solana.id\n }\n if (!normalizedBalance.chain_id && normalizedBalance.chain === 'eclipse') {\n normalizedBalance.chain_id = eclipse.id\n }\n\n // Normalize native address\n if (normalizedBalance.address === 'native') {\n normalizedBalance.address =\n normalizedBalance.chain === 'solana' ||\n normalizedBalance.chain === 'eclipse'\n ? '11111111111111111111111111111111'\n : zeroAddress\n }\n\n let chainId = normalizedBalance.chain_id\n if (!chainId && normalizedBalance.chain === 'solana') {\n chainId = solana.id\n }\n if (!chainId && normalizedBalance.chain === 'eclipse') {\n chainId = eclipse.id\n }\n\n balanceMap[`${chainId}:${normalizedBalance.address}`] = normalizedBalance\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,44 +0,0 @@
|
|
|
1
|
-
import { useQuery } from '@tanstack/react-query';
|
|
2
|
-
import useRelayClient from './useRelayClient.js';
|
|
3
|
-
export default (address, queryOptions) => {
|
|
4
|
-
const client = useRelayClient();
|
|
5
|
-
const eclipseChain = client?.chains?.find((chain) => chain.id === 9286185);
|
|
6
|
-
const rpcUrl = eclipseChain && eclipseChain.httpRpcUrl
|
|
7
|
-
? eclipseChain.httpRpcUrl
|
|
8
|
-
: 'https://mainnetbeta-rpc.eclipse.xyz';
|
|
9
|
-
const queryKey = ['useEclipseBalance', address, rpcUrl];
|
|
10
|
-
const response = useQuery({
|
|
11
|
-
queryKey,
|
|
12
|
-
queryFn: async () => {
|
|
13
|
-
const payload = {
|
|
14
|
-
jsonrpc: '2.0',
|
|
15
|
-
id: 1,
|
|
16
|
-
method: 'getBalance',
|
|
17
|
-
params: [address]
|
|
18
|
-
};
|
|
19
|
-
const response = await fetch(rpcUrl, {
|
|
20
|
-
method: 'POST',
|
|
21
|
-
headers: {
|
|
22
|
-
'Content-Type': 'application/json'
|
|
23
|
-
},
|
|
24
|
-
body: JSON.stringify(payload)
|
|
25
|
-
});
|
|
26
|
-
const data = await response.json();
|
|
27
|
-
if (data.error) {
|
|
28
|
-
throw new Error(data.error.message);
|
|
29
|
-
}
|
|
30
|
-
const result = data.result;
|
|
31
|
-
return {
|
|
32
|
-
balance: BigInt(result.value)
|
|
33
|
-
};
|
|
34
|
-
},
|
|
35
|
-
enabled: address !== undefined,
|
|
36
|
-
...queryOptions
|
|
37
|
-
});
|
|
38
|
-
return {
|
|
39
|
-
...response,
|
|
40
|
-
balance: response.data?.balance,
|
|
41
|
-
queryKey
|
|
42
|
-
};
|
|
43
|
-
};
|
|
44
|
-
//# sourceMappingURL=useEclipseBalance.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useEclipseBalance.js","sourceRoot":"","sources":["../../../src/hooks/useEclipseBalance.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAGT,MAAM,uBAAuB,CAAA;AAC9B,OAAO,cAAc,MAAM,qBAAqB,CAAA;AAkBhD,eAAe,CAAC,OAAgB,EAAE,YAAoC,EAAE,EAAE;IACxE,MAAM,MAAM,GAAG,cAAc,EAAE,CAAA;IAC/B,MAAM,YAAY,GAAG,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC,CAAA;IAC1E,MAAM,MAAM,GACV,YAAY,IAAI,YAAY,CAAC,UAAU;QACrC,CAAC,CAAC,YAAY,CAAC,UAAU;QACzB,CAAC,CAAC,qCAAqC,CAAA;IAC3C,MAAM,QAAQ,GAAG,CAAC,mBAAmB,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;IAEvD,MAAM,QAAQ,GAAI,QAAsB,CAAC;QACvC,QAAQ;QACR,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,OAAO,GAAG;gBACd,OAAO,EAAE,KAAK;gBACd,EAAE,EAAE,CAAC;gBACL,MAAM,EAAE,YAAY;gBACpB,MAAM,EAAE,CAAC,OAAO,CAAC;aAClB,CAAA;YAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE;gBACnC,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;iBACnC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;aAC9B,CAAC,CAAA;YAEF,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;YAElC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;YACrC,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAgC,CAAA;YAEpD,OAAO;gBACL,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9B,CAAA;QACH,CAAC;QACD,OAAO,EAAE,OAAO,KAAK,SAAS;QAC9B,GAAG,YAAY;KAChB,CAAC,CAAA;IAEF,OAAO;QACL,GAAG,QAAQ;QACX,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO;QAC/B,QAAQ;KAIT,CAAA;AACH,CAAC,CAAA","sourcesContent":["import {\n useQuery,\n type DefaultError,\n type QueryKey\n} from '@tanstack/react-query'\nimport useRelayClient from './useRelayClient.js'\n\ntype EclipseBalanceResponse = {\n value: number\n}\n\ntype BalanceResponse = {\n balance: bigint\n}\n\ntype QueryType = typeof useQuery<\n BalanceResponse | undefined,\n DefaultError,\n BalanceResponse | undefined,\n QueryKey\n>\ntype QueryOptions = Parameters<QueryType>['0']\n\nexport default (address?: string, queryOptions?: Partial<QueryOptions>) => {\n const client = useRelayClient()\n const eclipseChain = client?.chains?.find((chain) => chain.id === 9286185)\n const rpcUrl =\n eclipseChain && eclipseChain.httpRpcUrl\n ? eclipseChain.httpRpcUrl\n : 'https://mainnetbeta-rpc.eclipse.xyz'\n const queryKey = ['useEclipseBalance', address, rpcUrl]\n\n const response = (useQuery as QueryType)({\n queryKey,\n queryFn: async () => {\n const payload = {\n jsonrpc: '2.0',\n id: 1,\n method: 'getBalance',\n params: [address]\n }\n\n const response = await fetch(rpcUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(payload)\n })\n\n const data = await response.json()\n\n if (data.error) {\n throw new Error(data.error.message)\n }\n\n const result = data.result as EclipseBalanceResponse\n\n return {\n balance: BigInt(result.value)\n }\n },\n enabled: address !== undefined,\n ...queryOptions\n })\n\n return {\n ...response,\n balance: response.data?.balance,\n queryKey\n } as ReturnType<QueryType> & {\n balance: bigint | undefined\n queryKey: (string | undefined)[]\n }\n}\n"]}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { useQuery, type DefaultError, type QueryKey } from '@tanstack/react-query';
|
|
2
|
-
export type DuneBalanceResponse = {
|
|
3
|
-
request_time: string;
|
|
4
|
-
response_time: string;
|
|
5
|
-
wallet_address: string;
|
|
6
|
-
balances: Array<{
|
|
7
|
-
chain: string;
|
|
8
|
-
chain_id: number;
|
|
9
|
-
address: string;
|
|
10
|
-
amount: string;
|
|
11
|
-
symbol: string;
|
|
12
|
-
decimals: number;
|
|
13
|
-
price_usd?: number;
|
|
14
|
-
value_usd?: number;
|
|
15
|
-
}>;
|
|
16
|
-
} | null;
|
|
17
|
-
export type BalanceMap = Record<string, NonNullable<DuneBalanceResponse>['balances'][0]>;
|
|
18
|
-
type QueryType = typeof useQuery<DuneBalanceResponse, DefaultError, DuneBalanceResponse, QueryKey>;
|
|
19
|
-
type QueryOptions = Parameters<QueryType>['0'];
|
|
20
|
-
declare const _default: (address?: string, evmChainIds?: 'mainnet' | 'testnet', queryOptions?: Partial<QueryOptions>) => import("@tanstack/react-query").UseQueryResult<DuneBalanceResponse, Error> & {
|
|
21
|
-
balanceMap: BalanceMap | undefined;
|
|
22
|
-
queryKey: (string | undefined)[];
|
|
23
|
-
};
|
|
24
|
-
export default _default;
|
|
25
|
-
//# sourceMappingURL=useDuneBalances.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useDuneBalances.d.ts","sourceRoot":"","sources":["../../../src/hooks/useDuneBalances.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,QAAQ,EACR,KAAK,YAAY,EACjB,KAAK,QAAQ,EACd,MAAM,uBAAuB,CAAA;AAG9B,MAAM,MAAM,mBAAmB,GAAG;IAChC,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,cAAc,EAAE,MAAM,CAAA;IACtB,QAAQ,EAAE,KAAK,CAAC;QACd,KAAK,EAAE,MAAM,CAAA;QACb,QAAQ,EAAE,MAAM,CAAA;QAChB,OAAO,EAAE,MAAM,CAAA;QACf,MAAM,EAAE,MAAM,CAAA;QACd,MAAM,EAAE,MAAM,CAAA;QACd,QAAQ,EAAE,MAAM,CAAA;QAChB,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,SAAS,CAAC,EAAE,MAAM,CAAA;KACnB,CAAC,CAAA;CACH,GAAG,IAAI,CAAA;AAER,MAAM,MAAM,UAAU,GAAG,MAAM,CAC7B,MAAM,EACN,WAAW,CAAC,mBAAmB,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAChD,CAAA;AAED,KAAK,SAAS,GAAG,OAAO,QAAQ,CAC9B,mBAAmB,EACnB,YAAY,EACZ,mBAAmB,EACnB,QAAQ,CACT,CAAA;AACD,KAAK,YAAY,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAA;mCAGlC,MAAM,gBACH,SAAS,GAAG,SAAS,iBACnB,QAAQ,YAAY,CAAC;;cAgHxB,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE;;AAnHpC,wBAqHC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useEclipseBalance.d.ts","sourceRoot":"","sources":["../../../src/hooks/useEclipseBalance.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,KAAK,YAAY,EACjB,KAAK,QAAQ,EACd,MAAM,uBAAuB,CAAA;AAO9B,KAAK,eAAe,GAAG;IACrB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,KAAK,SAAS,GAAG,OAAO,QAAQ,CAC9B,eAAe,GAAG,SAAS,EAC3B,YAAY,EACZ,eAAe,GAAG,SAAS,EAC3B,QAAQ,CACT,CAAA;AACD,KAAK,YAAY,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAA;mCAEpB,MAAM,iBAAiB,QAAQ,YAAY,CAAC;aAgDzD,MAAM,GAAG,SAAS;cACjB,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE;;AAjDpC,wBAmDC"}
|