@ape.swap/bonds-sdk 6.0.5 → 6.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/uikit-sdk/Svg/Icons/ShortSupply.js +0 -1
- package/dist/components/uikit-sdk/Svg/Icons/ShortSupply.js.map +1 -1
- package/dist/config/constants/variables.d.ts +1 -0
- package/dist/config/constants/variables.js +2 -1
- package/dist/config/constants/variables.js.map +1 -1
- package/dist/state/bonds/fetchBondsData/cleanBillsData.d.ts +4 -0
- package/dist/state/bonds/fetchBondsData/cleanBillsData.js +139 -0
- package/dist/state/bonds/fetchBondsData/cleanBillsData.js.map +1 -0
- package/dist/state/bonds/{fetchBondsDataAptos.d.ts → fetchBondsData/fetchBondsDataAptos.d.ts} +3 -3
- package/dist/state/bonds/{fetchBondsDataAptos.js → fetchBondsData/fetchBondsDataAptos.js} +6 -5
- package/dist/state/bonds/fetchBondsData/fetchBondsDataAptos.js.map +1 -0
- package/dist/state/bonds/fetchBondsData/fetchBondsDataEVM.d.ts +3 -0
- package/dist/state/bonds/fetchBondsData/fetchBondsDataEVM.js +90 -0
- package/dist/state/bonds/fetchBondsData/fetchBondsDataEVM.js.map +1 -0
- package/dist/state/bonds/fetchBondsData/fetchBondsDataPreTGE.d.ts +4 -0
- package/dist/state/bonds/fetchBondsData/fetchBondsDataPreTGE.js +109 -0
- package/dist/state/bonds/fetchBondsData/fetchBondsDataPreTGE.js.map +1 -0
- package/dist/state/bonds/fetchBondsData/fetchBondsDataSOL.d.ts +3 -0
- package/dist/state/bonds/fetchBondsData/fetchBondsDataSOL.js +69 -0
- package/dist/state/bonds/fetchBondsData/fetchBondsDataSOL.js.map +1 -0
- package/dist/state/bonds/{fetchBondsDataSui.d.ts → fetchBondsData/fetchBondsDataSui.d.ts} +3 -3
- package/dist/state/bonds/{fetchBondsDataSui.js → fetchBondsData/fetchBondsDataSui.js} +3 -3
- package/dist/state/bonds/fetchBondsData/fetchBondsDataSui.js.map +1 -0
- package/dist/state/bonds/fetchUsersBonds/fetchUsersBondsAptos.d.ts +4 -0
- package/dist/state/bonds/{fetchBillsUserAptos.js → fetchUsersBonds/fetchUsersBondsAptos.js} +10 -9
- package/dist/state/bonds/fetchUsersBonds/fetchUsersBondsAptos.js.map +1 -0
- package/dist/state/bonds/fetchUsersBonds/fetchUsersBondsEVM.d.ts +5 -0
- package/dist/state/bonds/{fetchBillsUser.js → fetchUsersBonds/fetchUsersBondsEVM.js} +5 -5
- package/dist/state/bonds/fetchUsersBonds/fetchUsersBondsEVM.js.map +1 -0
- package/dist/state/bonds/fetchUsersBonds/fetchUsersBondsSOL.d.ts +4 -0
- package/dist/state/bonds/{fetchBillsUserSolana.js → fetchUsersBonds/fetchUsersBondsSOL.js} +9 -8
- package/dist/state/bonds/fetchUsersBonds/fetchUsersBondsSOL.js.map +1 -0
- package/dist/state/bonds/fetchUsersBonds/fetchUsersBondsSUI.d.ts +4 -0
- package/dist/state/bonds/{fetchBillsUserSui.js → fetchUsersBonds/fetchUsersBondsSUI.js} +10 -9
- package/dist/state/bonds/fetchUsersBonds/fetchUsersBondsSUI.js.map +1 -0
- package/dist/state/bonds/useBondsData.js +20 -15
- package/dist/state/bonds/useBondsData.js.map +1 -1
- package/dist/state/bonds/useUserBonds.js +20 -21
- package/dist/state/bonds/useUserBonds.js.map +1 -1
- package/dist/state/tokenPrices/useTokenPrices.d.ts +1 -1
- package/dist/state/tokenPrices/useTokenPrices.js +4 -4
- package/dist/state/tokenPrices/useTokenPrices.js.map +1 -1
- package/dist/state/useSDKConfig.d.ts +1 -1
- package/dist/state/useSDKConfig.js +0 -2
- package/dist/state/useSDKConfig.js.map +1 -1
- package/dist/styles.css +1 -0
- package/dist/views/YourBonds/components/YourBondsMenu/YourBondsMenu.js +1 -1
- package/dist/views/YourBonds/components/YourBondsMenu/YourBondsMenu.js.map +1 -1
- package/package.json +1 -1
- package/dist/state/bonds/discoverSuiBonds.d.ts +0 -6
- package/dist/state/bonds/fetchBillsUser.d.ts +0 -5
- package/dist/state/bonds/fetchBillsUser.js.map +0 -1
- package/dist/state/bonds/fetchBillsUserAptos.d.ts +0 -4
- package/dist/state/bonds/fetchBillsUserAptos.js.map +0 -1
- package/dist/state/bonds/fetchBillsUserSolana.d.ts +0 -4
- package/dist/state/bonds/fetchBillsUserSolana.js.map +0 -1
- package/dist/state/bonds/fetchBillsUserSui.d.ts +0 -4
- package/dist/state/bonds/fetchBillsUserSui.js.map +0 -1
- package/dist/state/bonds/fetchBondsDataAptos.js.map +0 -1
- package/dist/state/bonds/fetchBondsDataSui.js.map +0 -1
- package/dist/state/bonds/utils.d.ts +0 -6
- package/dist/state/bonds/utils.js +0 -384
- package/dist/state/bonds/utils.js.map +0 -1
- /package/dist/state/bonds/{getBillNftData.d.ts → fetchUsersBonds/getBillNftData.d.ts} +0 -0
|
@@ -6,9 +6,11 @@ import useBondsList from './useBondsList.js';
|
|
|
6
6
|
import { ChainId } from '@ape.swap/apeswap-lists';
|
|
7
7
|
import { ACF_TO_ABOND } from '../../config/constants/addresses.js';
|
|
8
8
|
import useBondsListPreTGE from './useBondsListPreTGE.js';
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
9
|
+
import { fetchBondsDataPreTGE } from './fetchBondsData/fetchBondsDataPreTGE.js';
|
|
10
|
+
import { fetchBondsDataEVM } from './fetchBondsData/fetchBondsDataEVM.js';
|
|
11
|
+
import { fetchBondsDataAptos } from './fetchBondsData/fetchBondsDataAptos.js';
|
|
12
|
+
import { fetchBondsDataSUI } from './fetchBondsData/fetchBondsDataSui.js';
|
|
13
|
+
import { fetchBondsDataSOL } from './fetchBondsData/fetchBondsDataSOL.js';
|
|
12
14
|
|
|
13
15
|
function useBondsData() {
|
|
14
16
|
const { data: bondList } = useBondsList();
|
|
@@ -29,16 +31,14 @@ function useBondsData() {
|
|
|
29
31
|
});
|
|
30
32
|
}
|
|
31
33
|
const calculateBondsData = async (queryClient) => {
|
|
32
|
-
//
|
|
34
|
+
// ----------------------- Step 1 -----------------------
|
|
35
|
+
// Fetch necessary data from the queryClient
|
|
33
36
|
const { chains, urls } = queryClient?.getQueryData([QUERY_KEYS.SDK_CONFIG]);
|
|
34
37
|
const realTimeApiUrl = urls['realTimeApi'];
|
|
35
38
|
const apiUrl = urls['apiV2'];
|
|
36
|
-
const priceApiUrl = urls['priceApi'];
|
|
37
39
|
const bondList = queryClient?.getQueryData([QUERY_KEYS.BONDS_LIST]);
|
|
38
40
|
const preTGEList = queryClient?.getQueryData([QUERY_KEYS.BONDS_LIST_PRE_TGE]);
|
|
39
|
-
const tokenPrices = queryClient?.getQueryData([
|
|
40
|
-
QUERY_KEYS.TOKEN_PRICES,
|
|
41
|
-
]);
|
|
41
|
+
const tokenPrices = queryClient?.getQueryData([QUERY_KEYS.TOKEN_PRICES]);
|
|
42
42
|
if (!tokenPrices)
|
|
43
43
|
return [];
|
|
44
44
|
const reducedBonds = bondList?.reduce((acc, bill) => {
|
|
@@ -51,9 +51,11 @@ const calculateBondsData = async (queryClient) => {
|
|
|
51
51
|
}
|
|
52
52
|
return acc;
|
|
53
53
|
}, {});
|
|
54
|
-
//
|
|
54
|
+
// ----------------------- Step 2 -----------------------
|
|
55
|
+
// Fetch EVM & SOL data from realtime
|
|
55
56
|
let evmSolBondsData = [];
|
|
56
57
|
try {
|
|
58
|
+
throw new Error('asd');
|
|
57
59
|
// For EVM & SOL we first try to fetch from realtime, if it fails we trigger the fallback strategy.
|
|
58
60
|
const realTimeApiResponse = await axios.get(`${realTimeApiUrl}/bonds`);
|
|
59
61
|
evmSolBondsData = realTimeApiResponse.data.bonds.filter((bond) => chains.includes(bond.chainId));
|
|
@@ -68,7 +70,9 @@ const calculateBondsData = async (queryClient) => {
|
|
|
68
70
|
.map(async (chainId) => {
|
|
69
71
|
if (!reducedBonds[chainId])
|
|
70
72
|
return [];
|
|
71
|
-
return
|
|
73
|
+
return chainId === ChainId.SOL
|
|
74
|
+
? await fetchBondsDataSOL(reducedBonds[chainId], apiUrl, tokenPrices[chainId])
|
|
75
|
+
: await fetchBondsDataEVM(chainId, reducedBonds[chainId], apiUrl, tokenPrices[chainId]);
|
|
72
76
|
}),
|
|
73
77
|
...chains.map(async (chainId) => {
|
|
74
78
|
const filteredBonds = preTGEList?.filter((bond) => bond.chainId === chainId) ?? [];
|
|
@@ -79,7 +83,8 @@ const calculateBondsData = async (queryClient) => {
|
|
|
79
83
|
evmSolBondsData = billData.flat();
|
|
80
84
|
}
|
|
81
85
|
}
|
|
82
|
-
//
|
|
86
|
+
// ----------------------- Step 3 -----------------------
|
|
87
|
+
// Fetch Aptos & Sui Bonds data
|
|
83
88
|
let aptosBonds = [];
|
|
84
89
|
let suiBonds = [];
|
|
85
90
|
try {
|
|
@@ -88,17 +93,17 @@ const calculateBondsData = async (queryClient) => {
|
|
|
88
93
|
const includesSui = chains.includes(ChainId.SUI);
|
|
89
94
|
if (includesAptos && includesSui) {
|
|
90
95
|
const [aptos, sui] = await Promise.all([
|
|
91
|
-
|
|
92
|
-
|
|
96
|
+
fetchBondsDataAptos(reducedBonds[ChainId.APTOS], tokenPrices[ChainId.APTOS]),
|
|
97
|
+
fetchBondsDataSUI(reducedBonds[ChainId.SUI], tokenPrices[ChainId.SUI]),
|
|
93
98
|
]);
|
|
94
99
|
aptosBonds = aptos;
|
|
95
100
|
suiBonds = sui;
|
|
96
101
|
}
|
|
97
102
|
else if (includesAptos) {
|
|
98
|
-
aptosBonds = await
|
|
103
|
+
aptosBonds = await fetchBondsDataAptos(reducedBonds[ChainId.APTOS], tokenPrices[ChainId.APTOS]);
|
|
99
104
|
}
|
|
100
105
|
else if (includesSui) {
|
|
101
|
-
suiBonds = await
|
|
106
|
+
suiBonds = await fetchBondsDataSUI(reducedBonds[ChainId.SUI], tokenPrices[ChainId.SUI]);
|
|
102
107
|
}
|
|
103
108
|
}
|
|
104
109
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useBondsData.js","sources":["../../../src/state/bonds/useBondsData.ts"],"sourcesContent":["import { QueryClient, useQuery, useQueryClient, UseQueryResult } from '@tanstack/react-query'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport { BondsData } from '../../types/bonds'\nimport axios from 'axios'\nimport { SDKProps } from '../useSDKConfig'\nimport useTokenPrices, { TokenPrices } from '../tokenPrices/useTokenPrices'\nimport useBondsList from './useBondsList'\nimport { BillsConfig, ChainId, PreTGEConfig } from '@ape.swap/apeswap-lists'\nimport { ACF_TO_ABOND } from '../../config/constants/addresses'\nimport useBondsListPreTGE from '../bonds/useBondsListPreTGE'\nimport { fetchBondsData
|
|
1
|
+
{"version":3,"file":"useBondsData.js","sources":["../../../src/state/bonds/useBondsData.ts"],"sourcesContent":["import { QueryClient, useQuery, useQueryClient, UseQueryResult } from '@tanstack/react-query'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport { BondsData } from '../../types/bonds'\nimport axios from 'axios'\nimport { SDKProps } from '../useSDKConfig'\nimport useTokenPrices, { TokenPrices } from '../tokenPrices/useTokenPrices'\nimport useBondsList from './useBondsList'\nimport { BillsConfig, ChainId, PreTGEConfig } from '@ape.swap/apeswap-lists'\nimport { ACF_TO_ABOND } from '../../config/constants/addresses'\nimport useBondsListPreTGE from '../bonds/useBondsListPreTGE'\nimport { fetchBondsDataPreTGE } from './fetchBondsData/fetchBondsDataPreTGE'\nimport { fetchBondsDataEVM } from './fetchBondsData/fetchBondsDataEVM'\nimport { fetchBondsDataAptos } from './fetchBondsData/fetchBondsDataAptos'\nimport { fetchBondsDataSUI } from './fetchBondsData/fetchBondsDataSui'\nimport { fetchBondsDataSOL } from './fetchBondsData/fetchBondsDataSOL'\n\nexport default function useBondsData(): UseQueryResult<BondsData[]> {\n const { data: bondList } = useBondsList()\n const { data: preTGEList } = useBondsListPreTGE()\n const { data: tokenPrices } = useTokenPrices()\n const tokenPricesKey = Object.keys(tokenPrices ?? {})?.length\n const queryClient = useQueryClient()\n\n return useQuery({\n queryKey: [QUERY_KEYS.BONDS_DATA],\n queryFn: () => calculateBondsData(queryClient),\n refetchInterval: 25000, // i.e. 25 sec\n enabled: !!bondList && !!preTGEList && !!tokenPricesKey,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n refetchOnReconnect: false,\n retry: 0,\n staleTime: 25000, // i.e. 25 sec\n })\n}\n\nexport const calculateBondsData = async (queryClient: QueryClient): Promise<BondsData[]> => {\n // ----------------------- Step 1 -----------------------\n // Fetch necessary data from the queryClient\n const { chains, urls } = queryClient?.getQueryData([QUERY_KEYS.SDK_CONFIG]) as SDKProps\n const realTimeApiUrl = urls['realTimeApi']\n const apiUrl = urls['apiV2']\n const bondList = queryClient?.getQueryData([QUERY_KEYS.BONDS_LIST]) as BillsConfig[]\n const preTGEList = queryClient?.getQueryData([QUERY_KEYS.BONDS_LIST_PRE_TGE]) as PreTGEConfig[]\n const tokenPrices = queryClient?.getQueryData([QUERY_KEYS.TOKEN_PRICES]) as Partial<Record<ChainId, TokenPrices[]>>\n if (!tokenPrices) return []\n const reducedBonds = bondList?.reduce<Record<number, BillsConfig[]>>((acc, bill) => {\n const chainId = bill.chainId\n if (!acc[chainId]) {\n acc[chainId] = []\n }\n if (bill.contractAddress?.[chainId]?.toLowerCase() !== ACF_TO_ABOND.toLowerCase() && !bill.soldOut) {\n acc[chainId].push(bill)\n }\n return acc\n }, {})\n\n // ----------------------- Step 2 -----------------------\n // Fetch EVM & SOL data from realtime\n let evmSolBondsData: BondsData[] = []\n\n try {\n throw new Error('asd')\n // For EVM & SOL we first try to fetch from realtime, if it fails we trigger the fallback strategy.\n const realTimeApiResponse = await axios.get(`${realTimeApiUrl}/bonds`)\n evmSolBondsData = realTimeApiResponse.data.bonds.filter((bond: BondsData) => chains.includes(bond.chainId))\n } catch {\n // Fallback strategy\n if (bondList) {\n console.time('Fallback BondsData')\n const billData = await Promise.all([\n ...chains\n .filter((c) => c !== ChainId.APTOS && c !== ChainId.SUI)\n .map(async (chainId: ChainId) => {\n if (!reducedBonds[chainId]) return []\n return chainId === ChainId.SOL\n ? await fetchBondsDataSOL(reducedBonds[chainId], apiUrl, tokenPrices[chainId])\n : await fetchBondsDataEVM(chainId, reducedBonds[chainId], apiUrl, tokenPrices[chainId])\n }),\n ...chains.map(async (chainId: ChainId) => {\n const filteredBonds = preTGEList?.filter((bond) => bond.chainId === chainId) ?? []\n return await fetchBondsDataPreTGE(chainId, tokenPrices, filteredBonds, apiUrl)\n }),\n ])\n console.timeEnd('Fallback BondsData')\n evmSolBondsData = billData.flat()\n }\n }\n\n // ----------------------- Step 3 -----------------------\n // Fetch Aptos & Sui Bonds data\n let aptosBonds: BondsData[] = []\n let suiBonds: BondsData[] = []\n\n try {\n if (reducedBonds && tokenPrices) {\n const includesAptos = chains.includes(ChainId.APTOS)\n const includesSui = chains.includes(ChainId.SUI)\n\n if (includesAptos && includesSui) {\n const [aptos, sui] = await Promise.all([\n fetchBondsDataAptos(reducedBonds[ChainId.APTOS], tokenPrices[ChainId.APTOS]),\n fetchBondsDataSUI(reducedBonds[ChainId.SUI], tokenPrices[ChainId.SUI]),\n ])\n aptosBonds = aptos\n suiBonds = sui\n } else if (includesAptos) {\n aptosBonds = await fetchBondsDataAptos(reducedBonds[ChainId.APTOS], tokenPrices[ChainId.APTOS])\n } else if (includesSui) {\n suiBonds = await fetchBondsDataSUI(reducedBonds[ChainId.SUI], tokenPrices[ChainId.SUI])\n }\n }\n } catch (e) {\n console.error(e)\n }\n\n return [...evmSolBondsData, ...aptosBonds, ...suiBonds]\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -2,40 +2,40 @@ import { useQueryClient, useQuery } from '@tanstack/react-query';
|
|
|
2
2
|
import { QUERY_KEYS } from '../../config/constants/queryKeys.js';
|
|
3
3
|
import { BillVersion, ChainId } from '@ape.swap/apeswap-lists';
|
|
4
4
|
import useBondsList from './useBondsList.js';
|
|
5
|
-
import { fetchUserOwnedBillsDataAsync } from './fetchBillsUser.js';
|
|
6
5
|
import useTokenPrices from '../tokenPrices/useTokenPrices.js';
|
|
7
|
-
import { fetchUserOwnedSolanaBonds } from './fetchBillsUserSolana.js';
|
|
8
6
|
import { ACF_TO_ABOND } from '../../config/constants/addresses.js';
|
|
9
7
|
import { reportError } from '../../utils/reportError.js';
|
|
10
8
|
import useEVMAccount from '../../hooks/accounts/useEVMAccount.js';
|
|
11
9
|
import useSOLAccount from '../../hooks/accounts/useSOLAccount.js';
|
|
12
10
|
import useAPTAccount from '../../hooks/accounts/useAPTAccount.js';
|
|
13
11
|
import useSUIAccount from '../../hooks/accounts/useSUIAccount.js';
|
|
14
|
-
import { fetchUserOwnedAptosBonds } from './fetchBillsUserAptos.js';
|
|
15
|
-
import { fetchUserOwnedSuiBonds } from './fetchBillsUserSui.js';
|
|
16
12
|
import axios from 'axios';
|
|
13
|
+
import { fetchUsersBondsSOL } from './fetchUsersBonds/fetchUsersBondsSOL.js';
|
|
14
|
+
import { fetchUsersBondsAptos } from './fetchUsersBonds/fetchUsersBondsAptos.js';
|
|
15
|
+
import { fetchUsersBondsSUI } from './fetchUsersBonds/fetchUsersBondsSUI.js';
|
|
16
|
+
import { fetchUsersBondsEVM } from './fetchUsersBonds/fetchUsersBondsEVM.js';
|
|
17
17
|
|
|
18
18
|
function useUserBonds() {
|
|
19
19
|
// First fetch the full list of bonds
|
|
20
|
-
const { data: bondList } = useBondsList();
|
|
21
|
-
const { address } = useEVMAccount();
|
|
20
|
+
const { data: bondList } = useBondsList();
|
|
21
|
+
const { address: addressEVM } = useEVMAccount();
|
|
22
22
|
const { publicKey } = useSOLAccount();
|
|
23
|
-
const
|
|
24
|
-
const { address:
|
|
25
|
-
const { address:
|
|
23
|
+
const addressSOL = publicKey?.toBase58();
|
|
24
|
+
const { address: addressAptos } = useAPTAccount();
|
|
25
|
+
const { address: addressSUI } = useSUIAccount();
|
|
26
26
|
const { data: tokenPrices } = useTokenPrices();
|
|
27
27
|
const queryClient = useQueryClient();
|
|
28
28
|
return useQuery({
|
|
29
29
|
queryKey: [
|
|
30
30
|
QUERY_KEYS.USER_BONDS,
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
31
|
+
addressEVM,
|
|
32
|
+
addressSOL,
|
|
33
|
+
addressAptos,
|
|
34
|
+
addressSUI,
|
|
35
35
|
Object.keys(tokenPrices ?? {})?.length ?? null,
|
|
36
36
|
],
|
|
37
|
-
queryFn: () => getUserBonds(
|
|
38
|
-
enabled: !!bondList && !!(
|
|
37
|
+
queryFn: () => getUserBonds(addressEVM, addressSOL, addressAptos, addressSUI, bondList, queryClient),
|
|
38
|
+
enabled: !!bondList && !!(addressEVM || addressSOL || addressAptos || addressSUI) && !!tokenPrices,
|
|
39
39
|
refetchInterval: 120000,
|
|
40
40
|
refetchOnWindowFocus: false,
|
|
41
41
|
refetchOnMount: false,
|
|
@@ -46,7 +46,6 @@ function useUserBonds() {
|
|
|
46
46
|
const getUserBonds = async (account, solanaAccount, aptosAccount, suiAccount, bondList, queryClient) => {
|
|
47
47
|
const { chains, urls } = queryClient?.getQueryData([QUERY_KEYS.SDK_CONFIG]);
|
|
48
48
|
const apiUrl = urls['apiV2'];
|
|
49
|
-
const priceApiUrl = urls['priceApi'];
|
|
50
49
|
const tokenPrices = queryClient?.getQueryData([QUERY_KEYS.TOKEN_PRICES]);
|
|
51
50
|
try {
|
|
52
51
|
const bondsByChain = bondList.reduce((acc, bond) => {
|
|
@@ -54,7 +53,7 @@ const getUserBonds = async (account, solanaAccount, aptosAccount, suiAccount, bo
|
|
|
54
53
|
if (bond.contractAddress[bond.chainId]?.toLowerCase() === ACF_TO_ABOND.toLowerCase() ||
|
|
55
54
|
bond.billVersion === BillVersion.FixedPrice ||
|
|
56
55
|
bond.billType === 'migration') {
|
|
57
|
-
return acc;
|
|
56
|
+
return acc;
|
|
58
57
|
}
|
|
59
58
|
// Only process bonds that belong to the specified chains
|
|
60
59
|
if (chains.includes(bond.chainId)) {
|
|
@@ -71,16 +70,16 @@ const getUserBonds = async (account, solanaAccount, aptosAccount, suiAccount, bo
|
|
|
71
70
|
.filter((chain) => bondsByChain[chain])
|
|
72
71
|
.map((chain) => {
|
|
73
72
|
if (chain === ChainId.SOL) {
|
|
74
|
-
return
|
|
73
|
+
return fetchUsersBondsSOL(solanaAccount, bondsByChain[chain], tokenPrices);
|
|
75
74
|
}
|
|
76
75
|
else if (chain === ChainId.APTOS) {
|
|
77
|
-
return
|
|
76
|
+
return fetchUsersBondsAptos(aptosAccount, bondsByChain[chain], tokenPrices);
|
|
78
77
|
}
|
|
79
78
|
else if (chain === ChainId.SUI) {
|
|
80
|
-
return
|
|
79
|
+
return fetchUsersBondsSUI(suiAccount, bondsByChain[chain], tokenPrices);
|
|
81
80
|
}
|
|
82
81
|
else
|
|
83
|
-
return
|
|
82
|
+
return fetchUsersBondsEVM(chain, account, bondsByChain[chain], tokenPrices);
|
|
84
83
|
}));
|
|
85
84
|
// Filter out only fulfilled promises
|
|
86
85
|
const fulfilledResults = results
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useUserBonds.js","sources":["../../../src/state/bonds/useUserBonds.ts"],"sourcesContent":["import { QueryClient, useQuery, useQueryClient, UseQueryResult } from '@tanstack/react-query'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport { BillsConfig, ChainId, BillVersion } from '@ape.swap/apeswap-lists'\nimport useBondsList from './useBondsList'\nimport { fetchUserOwnedBillsDataAsync } from './fetchBillsUser'\nimport { UserBill, UserBillNftData } from '../../types/yourbonds'\nimport { SDKProps } from '../useSDKConfig'\nimport useTokenPrices, { TokenPrices } from '../tokenPrices/useTokenPrices'\nimport { fetchUserOwnedSolanaBonds } from './fetchBillsUserSolana'\nimport { ACF_TO_ABOND } from '../../config/constants/addresses'\nimport { reportError } from '../../utils/reportError'\nimport useEVMAccount from '../../hooks/accounts/useEVMAccount'\nimport useSOLAccount from '../../hooks/accounts/useSOLAccount'\nimport useAPTAccount from '../../hooks/accounts/useAPTAccount'\nimport useSUIAccount from '../../hooks/accounts/useSUIAccount'\nimport { fetchUserOwnedAptosBonds } from './fetchBillsUserAptos'\nimport { fetchUserOwnedSuiBonds } from './fetchBillsUserSui'\nimport axios from 'axios'\n\nexport default function useUserBonds(): UseQueryResult<UserBill[]> {\n // First fetch the full list of bonds\n const { data: bondList } = useBondsList() // aca podes reemplazarlo con un dummy\n const { address } = useEVMAccount()\n const { publicKey } = useSOLAccount()\n const solanaAccount = publicKey?.toBase58()\n const { address: aptosAccount } = useAPTAccount()\n const { address: suiAccount } = useSUIAccount()\n const { data: tokenPrices } = useTokenPrices()\n const queryClient = useQueryClient()\n return useQuery({\n queryKey: [\n QUERY_KEYS.USER_BONDS,\n address,\n publicKey,\n aptosAccount,\n suiAccount,\n Object.keys(tokenPrices ?? {})?.length ?? null,\n ],\n queryFn: () => getUserBonds(address!, solanaAccount!, aptosAccount!, suiAccount!, bondList!, queryClient),\n enabled: !!bondList && !!(address || solanaAccount || aptosAccount || suiAccount) && !!tokenPrices,\n refetchInterval: 120000,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n refetchOnReconnect: false,\n retry: 1,\n })\n}\n\nexport const getUserBonds = async (\n account: string,\n solanaAccount: string,\n aptosAccount: string,\n suiAccount: string,\n bondList: BillsConfig[],\n queryClient: QueryClient,\n): Promise<UserBill[]> => {\n const { chains, urls } = queryClient?.getQueryData([QUERY_KEYS.SDK_CONFIG]) as SDKProps\n const apiUrl = urls['apiV2']\n const priceApiUrl = urls['priceApi']\n const tokenPrices: Partial<Record<ChainId, TokenPrices[]>> = queryClient?.getQueryData([QUERY_KEYS.TOKEN_PRICES])!\n\n try {\n const bondsByChain = bondList.reduce(\n (acc, bond) => {\n // Exclude ACF to ABOND bonds, fixed price bonds, and migration bonds\n if (\n bond.contractAddress[bond.chainId]?.toLowerCase() === ACF_TO_ABOND.toLowerCase() ||\n bond.billVersion === BillVersion.FixedPrice ||\n bond.billType === 'migration'\n ) {\n return acc // Skip this bond\n }\n\n // Only process bonds that belong to the specified chains\n if (chains.includes(bond.chainId)) {\n // Initialize acc[bond.chainId] if it doesn't exist yet\n if (!acc[bond.chainId]) {\n acc[bond.chainId] = []\n }\n\n // Safely push the bond to the array\n acc[bond.chainId].push(bond)\n }\n return acc\n },\n {} as Record<number, BillsConfig[]>,\n )\n\n const results = await Promise.allSettled(\n chains\n .filter((chain) => bondsByChain[chain])\n .map((chain) => {\n if (chain === ChainId.SOL) {\n return fetchUserOwnedSolanaBonds(solanaAccount, bondsByChain[chain], tokenPrices, priceApiUrl)\n } else if (chain === ChainId.APTOS) {\n return fetchUserOwnedAptosBonds(aptosAccount, bondsByChain[chain], tokenPrices, priceApiUrl)\n } else if (chain === ChainId.SUI) {\n return fetchUserOwnedSuiBonds(suiAccount, bondsByChain[chain], tokenPrices, priceApiUrl)\n } else\n return fetchUserOwnedBillsDataAsync(chain as number, account, bondsByChain[chain], tokenPrices, priceApiUrl)\n }),\n )\n\n // Filter out only fulfilled promises\n const fulfilledResults = results\n .filter((result): result is PromiseFulfilledResult<any> => result.status === 'fulfilled')\n .map((result) => result.value)\n\n const onChainData: UserBill[] = fulfilledResults.flat().flatMap((result) => result.userOwnedBills)\n\n // Prepare body for batch API call\n // api-v2 won't support Aptos/Sui. Bills are read on-chain, no /bills/multi-batch\n // enrichment. Aptos/Sui bills use the placeholder image from their constants.\n const body = Object.values(\n onChainData\n .filter((data) => data?.bond?.chainId !== ChainId.APTOS && data?.bond?.chainId !== ChainId.SUI)\n .reduce(\n (acc, data) => {\n const contract =\n data?.bond?.chainId === ChainId.SOL ? data.bond.contractAddress[data.bond.chainId] : data.billNftAddress\n const key = `${data?.bond?.chainId}-${contract}`\n\n if (!acc[key]) {\n acc[key] = {\n chainId: data?.bond?.chainId as number,\n contract: contract as string,\n billIds: [],\n }\n }\n\n acc[key].billIds.push(parseInt(data.id))\n return acc\n },\n {} as Record<string, { chainId: number; contract: string; billIds: number[] }>,\n ),\n )\n let response\n\n try {\n response = await axios.post(`${apiUrl}/bills/multi-batch`, body, { timeout: 40000 })\n } catch (e) {\n console.error(e)\n return onChainData\n }\n // Enrich on-chain data with API data.\n // Aptos/Sui bills are not sent to api-v2 (no support), so keep their existing\n // nftData populated by fetchBillsUser{Aptos,Sui} instead of overwriting with undefined.\n const enrichedData: UserBill[] = onChainData.map((userBond) => {\n if (userBond.bond?.chainId === ChainId.APTOS || userBond.bond?.chainId === ChainId.SUI) return userBond\n\n const nftDataResponse = response.data?.find((nft: any) => {\n const contract = nft.contract.toLowerCase()\n const chain = nft.chainId\n\n // API uses contractAddress for Solana bonds instead of NFT Address\n const contractToCompare =\n chain === ChainId.SOL ? userBond.bond?.contractAddress[ChainId.SOL] : userBond.billNftAddress\n return contractToCompare?.toLowerCase() === contract && userBond.bond?.chainId === chain\n })\n const nftData: UserBillNftData | undefined = nftDataResponse?.bills?.find(\n (billApiData: UserBillNftData) => billApiData.tokenId === parseInt(userBond.id),\n )\n return {\n ...userBond,\n nftData,\n }\n })\n\n return enrichedData\n } catch (e) {\n console.error(e)\n reportError({\n apiUrl,\n error: e,\n extraInfo: { type: 'getUserBonds', bondList, chains, e },\n account,\n })\n throw new Error('Failed to fetch user bonds')\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAmBc,SAAU,YAAY,GAAA;;IAElC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,YAAY,EAAE,CAAA;AACzC,IAAA,MAAM,EAAE,OAAO,EAAE,GAAG,aAAa,EAAE;AACnC,IAAA,MAAM,EAAE,SAAS,EAAE,GAAG,aAAa,EAAE;AACrC,IAAA,MAAM,aAAa,GAAG,SAAS,EAAE,QAAQ,EAAE;IAC3C,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,aAAa,EAAE;IACjD,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,aAAa,EAAE;IAC/C,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,cAAc,EAAE;AAC9C,IAAA,MAAM,WAAW,GAAG,cAAc,EAAE;AACpC,IAAA,OAAO,QAAQ,CAAC;AACd,QAAA,QAAQ,EAAE;AACR,YAAA,UAAU,CAAC,UAAU;YACrB,OAAO;YACP,SAAS;YACT,YAAY;YACZ,UAAU;YACV,MAAM,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE,MAAM,IAAI,IAAI;AAC/C,SAAA;AACD,QAAA,OAAO,EAAE,MAAM,YAAY,CAAC,OAAQ,EAAE,aAAc,EAAE,YAAa,EAAE,UAAW,EAAE,QAAS,EAAE,WAAW,CAAC;AACzG,QAAA,OAAO,EAAE,CAAC,CAAC,QAAQ,IAAI,CAAC,EAAE,OAAO,IAAI,aAAa,IAAI,YAAY,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,WAAW;AAClG,QAAA,eAAe,EAAE,MAAM;AACvB,QAAA,oBAAoB,EAAE,KAAK;AAC3B,QAAA,cAAc,EAAE,KAAK;AACrB,QAAA,kBAAkB,EAAE,KAAK;AACzB,QAAA,KAAK,EAAE,CAAC;AACT,KAAA,CAAC;AACJ;AAEO,MAAM,YAAY,GAAG,OAC1B,OAAe,EACf,aAAqB,EACrB,YAAoB,EACpB,UAAkB,EAClB,QAAuB,EACvB,WAAwB,KACD;AACvB,IAAA,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,WAAW,EAAE,YAAY,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAa;AACvF,IAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;AAC5B,IAAA,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC;AACpC,IAAA,MAAM,WAAW,GAA4C,WAAW,EAAE,YAAY,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAE;AAElH,IAAA,IAAI;QACF,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAClC,CAAC,GAAG,EAAE,IAAI,KAAI;;AAEZ,YAAA,IACE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,KAAK,YAAY,CAAC,WAAW,EAAE;AAChF,gBAAA,IAAI,CAAC,WAAW,KAAK,WAAW,CAAC,UAAU;AAC3C,gBAAA,IAAI,CAAC,QAAQ,KAAK,WAAW,EAC7B;gBACA,OAAO,GAAG,CAAA;YACZ;;YAGA,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;;gBAEjC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AACtB,oBAAA,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;gBACxB;;gBAGA,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAC9B;AACA,YAAA,OAAO,GAAG;QACZ,CAAC,EACD,EAAmC,CACpC;AAED,QAAA,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACtC;aACG,MAAM,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,KAAK,CAAC;AACrC,aAAA,GAAG,CAAC,CAAC,KAAK,KAAI;AACb,YAAA,IAAI,KAAK,KAAK,OAAO,CAAC,GAAG,EAAE;AACzB,gBAAA,OAAO,yBAAyB,CAAC,aAAa,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,WAAW,CAAC;YAChG;AAAO,iBAAA,IAAI,KAAK,KAAK,OAAO,CAAC,KAAK,EAAE;AAClC,gBAAA,OAAO,wBAAwB,CAAC,YAAY,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,WAAW,CAAC;YAC9F;AAAO,iBAAA,IAAI,KAAK,KAAK,OAAO,CAAC,GAAG,EAAE;AAChC,gBAAA,OAAO,sBAAsB,CAAC,UAAU,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,WAAW,CAAC;YAC1F;;AACE,gBAAA,OAAO,4BAA4B,CAAC,KAAe,EAAE,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,WAAW,CAAC;QAChH,CAAC,CAAC,CACL;;QAGD,MAAM,gBAAgB,GAAG;aACtB,MAAM,CAAC,CAAC,MAAM,KAA4C,MAAM,CAAC,MAAM,KAAK,WAAW;aACvF,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,CAAC;AAEhC,QAAA,MAAM,WAAW,GAAe,gBAAgB,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,cAAc,CAAC;;;;AAKlG,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CACxB;aACG,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,KAAK,IAAI,IAAI,EAAE,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,GAAG;AAC7F,aAAA,MAAM,CACL,CAAC,GAAG,EAAE,IAAI,KAAI;AACZ,YAAA,MAAM,QAAQ,GACZ,IAAI,EAAE,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,cAAc;YAC1G,MAAM,GAAG,GAAG,CAAA,EAAG,IAAI,EAAE,IAAI,EAAE,OAAO,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAE;AAEhD,YAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBACb,GAAG,CAAC,GAAG,CAAC,GAAG;AACT,oBAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAiB;AACtC,oBAAA,QAAQ,EAAE,QAAkB;AAC5B,oBAAA,OAAO,EAAE,EAAE;iBACZ;YACH;AAEA,YAAA,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxC,YAAA,OAAO,GAAG;AACZ,QAAA,CAAC,EACD,EAA8E,CAC/E,CACJ;AACD,QAAA,IAAI,QAAQ;AAEZ,QAAA,IAAI;AACF,YAAA,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAA,kBAAA,CAAoB,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACtF;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AAChB,YAAA,OAAO,WAAW;QACpB;;;;QAIA,MAAM,YAAY,GAAe,WAAW,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAI;AAC5D,YAAA,IAAI,QAAQ,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,GAAG;AAAE,gBAAA,OAAO,QAAQ;YAEvG,MAAM,eAAe,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,GAAQ,KAAI;gBACvD,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE;AAC3C,gBAAA,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO;;gBAGzB,MAAM,iBAAiB,GACrB,KAAK,KAAK,OAAO,CAAC,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,cAAc;AAC/F,gBAAA,OAAO,iBAAiB,EAAE,WAAW,EAAE,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,OAAO,KAAK,KAAK;AAC1F,YAAA,CAAC,CAAC;YACF,MAAM,OAAO,GAAgC,eAAe,EAAE,KAAK,EAAE,IAAI,CACvE,CAAC,WAA4B,KAAK,WAAW,CAAC,OAAO,KAAK,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAChF;YACD,OAAO;AACL,gBAAA,GAAG,QAAQ;gBACX,OAAO;aACR;AACH,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,YAAY;IACrB;IAAE,OAAO,CAAC,EAAE;AACV,QAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AAChB,QAAA,WAAW,CAAC;YACV,MAAM;AACN,YAAA,KAAK,EAAE,CAAC;YACR,SAAS,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE;YACxD,OAAO;AACR,SAAA,CAAC;AACF,QAAA,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC;IAC/C;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"useUserBonds.js","sources":["../../../src/state/bonds/useUserBonds.ts"],"sourcesContent":["import { QueryClient, useQuery, useQueryClient, UseQueryResult } from '@tanstack/react-query'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport { BillsConfig, ChainId, BillVersion } from '@ape.swap/apeswap-lists'\nimport useBondsList from './useBondsList'\nimport { UserBill, UserBillNftData } from '../../types/yourbonds'\nimport { SDKProps } from '../useSDKConfig'\nimport useTokenPrices, { TokenPrices } from '../tokenPrices/useTokenPrices'\nimport { ACF_TO_ABOND } from '../../config/constants/addresses'\nimport { reportError } from '../../utils/reportError'\nimport useEVMAccount from '../../hooks/accounts/useEVMAccount'\nimport useSOLAccount from '../../hooks/accounts/useSOLAccount'\nimport useAPTAccount from '../../hooks/accounts/useAPTAccount'\nimport useSUIAccount from '../../hooks/accounts/useSUIAccount'\nimport axios from 'axios'\nimport { fetchUsersBondsSOL } from './fetchUsersBonds/fetchUsersBondsSOL'\nimport { fetchUsersBondsAptos } from './fetchUsersBonds/fetchUsersBondsAptos'\nimport { fetchUsersBondsSUI } from './fetchUsersBonds/fetchUsersBondsSUI'\nimport { fetchUsersBondsEVM } from './fetchUsersBonds/fetchUsersBondsEVM'\n\nexport default function useUserBonds(): UseQueryResult<UserBill[]> {\n // First fetch the full list of bonds\n const { data: bondList } = useBondsList()\n const { address: addressEVM } = useEVMAccount()\n const { publicKey } = useSOLAccount()\n const addressSOL = publicKey?.toBase58()\n const { address: addressAptos } = useAPTAccount()\n const { address: addressSUI } = useSUIAccount()\n const { data: tokenPrices } = useTokenPrices()\n const queryClient = useQueryClient()\n return useQuery({\n queryKey: [\n QUERY_KEYS.USER_BONDS,\n addressEVM,\n addressSOL,\n addressAptos,\n addressSUI,\n Object.keys(tokenPrices ?? {})?.length ?? null,\n ],\n queryFn: () => getUserBonds(addressEVM!, addressSOL!, addressAptos!, addressSUI!, bondList!, queryClient),\n enabled: !!bondList && !!(addressEVM || addressSOL || addressAptos || addressSUI) && !!tokenPrices,\n refetchInterval: 120000,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n refetchOnReconnect: false,\n retry: 1,\n })\n}\n\nexport const getUserBonds = async (\n account: string,\n solanaAccount: string,\n aptosAccount: string,\n suiAccount: string,\n bondList: BillsConfig[],\n queryClient: QueryClient,\n): Promise<UserBill[]> => {\n const { chains, urls } = queryClient?.getQueryData([QUERY_KEYS.SDK_CONFIG]) as SDKProps\n const apiUrl = urls['apiV2']\n const tokenPrices: Partial<Record<ChainId, TokenPrices[]>> = queryClient?.getQueryData([QUERY_KEYS.TOKEN_PRICES])!\n\n try {\n const bondsByChain = bondList.reduce(\n (acc, bond) => {\n // Exclude ACF to ABOND bonds, fixed price bonds, and migration bonds\n if (\n bond.contractAddress[bond.chainId]?.toLowerCase() === ACF_TO_ABOND.toLowerCase() ||\n bond.billVersion === BillVersion.FixedPrice ||\n bond.billType === 'migration'\n ) {\n return acc\n }\n\n // Only process bonds that belong to the specified chains\n if (chains.includes(bond.chainId)) {\n // Initialize acc[bond.chainId] if it doesn't exist yet\n if (!acc[bond.chainId]) {\n acc[bond.chainId] = []\n }\n\n // Safely push the bond to the array\n acc[bond.chainId].push(bond)\n }\n return acc\n },\n {} as Record<number, BillsConfig[]>,\n )\n\n const results = await Promise.allSettled(\n chains\n .filter((chain) => bondsByChain[chain])\n .map((chain) => {\n if (chain === ChainId.SOL) {\n return fetchUsersBondsSOL(solanaAccount, bondsByChain[chain], tokenPrices)\n } else if (chain === ChainId.APTOS) {\n return fetchUsersBondsAptos(aptosAccount, bondsByChain[chain], tokenPrices)\n } else if (chain === ChainId.SUI) {\n return fetchUsersBondsSUI(suiAccount, bondsByChain[chain], tokenPrices)\n } else return fetchUsersBondsEVM(chain, account, bondsByChain[chain], tokenPrices)\n }),\n )\n\n // Filter out only fulfilled promises\n const fulfilledResults = results\n .filter((result): result is PromiseFulfilledResult<any> => result.status === 'fulfilled')\n .map((result) => result.value)\n\n const onChainData: UserBill[] = fulfilledResults.flat().flatMap((result) => result.userOwnedBills)\n\n // Prepare body for batch API call\n // api-v2 won't support Aptos/Sui. Bills are read on-chain, no /bills/multi-batch\n // enrichment. Aptos/Sui bills use the placeholder image from their constants.\n const body = Object.values(\n onChainData\n .filter((data) => data?.bond?.chainId !== ChainId.APTOS && data?.bond?.chainId !== ChainId.SUI)\n .reduce(\n (acc, data) => {\n const contract =\n data?.bond?.chainId === ChainId.SOL ? data.bond.contractAddress[data.bond.chainId] : data.billNftAddress\n const key = `${data?.bond?.chainId}-${contract}`\n\n if (!acc[key]) {\n acc[key] = {\n chainId: data?.bond?.chainId as number,\n contract: contract as string,\n billIds: [],\n }\n }\n\n acc[key].billIds.push(parseInt(data.id))\n return acc\n },\n {} as Record<string, { chainId: number; contract: string; billIds: number[] }>,\n ),\n )\n let response\n\n try {\n response = await axios.post(`${apiUrl}/bills/multi-batch`, body, { timeout: 40000 })\n } catch (e) {\n console.error(e)\n return onChainData\n }\n // Enrich on-chain data with API data.\n // Aptos/Sui bills are not sent to api-v2 (no support), so keep their existing\n // nftData populated by fetchBillsUser{Aptos,Sui} instead of overwriting with undefined.\n const enrichedData: UserBill[] = onChainData.map((userBond) => {\n if (userBond.bond?.chainId === ChainId.APTOS || userBond.bond?.chainId === ChainId.SUI) return userBond\n\n const nftDataResponse = response.data?.find((nft: any) => {\n const contract = nft.contract.toLowerCase()\n const chain = nft.chainId\n\n // API uses contractAddress for Solana bonds instead of NFT Address\n const contractToCompare =\n chain === ChainId.SOL ? userBond.bond?.contractAddress[ChainId.SOL] : userBond.billNftAddress\n return contractToCompare?.toLowerCase() === contract && userBond.bond?.chainId === chain\n })\n const nftData: UserBillNftData | undefined = nftDataResponse?.bills?.find(\n (billApiData: UserBillNftData) => billApiData.tokenId === parseInt(userBond.id),\n )\n return {\n ...userBond,\n nftData,\n }\n })\n\n return enrichedData\n } catch (e) {\n console.error(e)\n reportError({\n apiUrl,\n error: e,\n extraInfo: { type: 'getUserBonds', bondList, chains, e },\n account,\n })\n throw new Error('Failed to fetch user bonds')\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -13,4 +13,4 @@ export interface TokenPrices {
|
|
|
13
13
|
error?: string;
|
|
14
14
|
}
|
|
15
15
|
export default function useTokenPrices(): UseQueryResult<Partial<Record<ChainId, TokenPrices[]>>>;
|
|
16
|
-
export declare const getTokenPrices: (
|
|
16
|
+
export declare const getTokenPrices: (apiv2: string) => Promise<Partial<Record<ChainId, TokenPrices[]>>>;
|
|
@@ -3,22 +3,22 @@ import axios from 'axios';
|
|
|
3
3
|
import { QUERY_KEYS } from '../../config/constants/queryKeys.js';
|
|
4
4
|
import { useSDKConfig } from '../useSDKConfig.js';
|
|
5
5
|
import { reportError } from '../../utils/reportError.js';
|
|
6
|
+
import { PRICE_API_URL } from '../../config/constants/variables.js';
|
|
6
7
|
|
|
7
8
|
function useTokenPrices() {
|
|
8
9
|
const SDKConfig = useSDKConfig();
|
|
9
|
-
const priceApi = SDKConfig?.urls?.priceApi;
|
|
10
10
|
const apiv2 = SDKConfig?.urls?.apiV2;
|
|
11
11
|
return useQuery({
|
|
12
12
|
queryKey: [QUERY_KEYS.TOKEN_PRICES],
|
|
13
|
-
queryFn: () => getTokenPrices(
|
|
13
|
+
queryFn: () => getTokenPrices(apiv2),
|
|
14
14
|
refetchInterval: 30000, // 30 sec
|
|
15
15
|
refetchOnMount: false,
|
|
16
16
|
refetchOnWindowFocus: false,
|
|
17
17
|
});
|
|
18
18
|
}
|
|
19
|
-
const getTokenPrices = async (
|
|
19
|
+
const getTokenPrices = async (apiv2) => {
|
|
20
20
|
try {
|
|
21
|
-
const response = await axios.get(`${
|
|
21
|
+
const response = await axios.get(`${PRICE_API_URL}/realtime/prices`);
|
|
22
22
|
return response.data;
|
|
23
23
|
}
|
|
24
24
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTokenPrices.js","sources":["../../../src/state/tokenPrices/useTokenPrices.ts"],"sourcesContent":["import { useQuery, UseQueryResult } from '@tanstack/react-query'\nimport axios from 'axios'\nimport { ChainId } from '@ape.swap/apeswap-lists'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport { useSDKConfig } from '../useSDKConfig'\nimport { reportError } from '../../utils/reportError'\n\nexport interface TokenPrices {\n chainId: ChainId\n chainName: string\n tokenAddress: string\n name: string\n symbol: string\n price: number\n priceSource: string\n updatedAt: number\n secondsAgoUpdated: number\n error?: string\n}\n\nexport default function useTokenPrices(): UseQueryResult<Partial<Record<ChainId, TokenPrices[]>>> {\n const SDKConfig = useSDKConfig()\n const
|
|
1
|
+
{"version":3,"file":"useTokenPrices.js","sources":["../../../src/state/tokenPrices/useTokenPrices.ts"],"sourcesContent":["import { useQuery, UseQueryResult } from '@tanstack/react-query'\nimport axios from 'axios'\nimport { ChainId } from '@ape.swap/apeswap-lists'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport { useSDKConfig } from '../useSDKConfig'\nimport { reportError } from '../../utils/reportError'\nimport { PRICE_API_URL } from '../../config/constants/variables'\n\nexport interface TokenPrices {\n chainId: ChainId\n chainName: string\n tokenAddress: string\n name: string\n symbol: string\n price: number\n priceSource: string\n updatedAt: number\n secondsAgoUpdated: number\n error?: string\n}\n\nexport default function useTokenPrices(): UseQueryResult<Partial<Record<ChainId, TokenPrices[]>>> {\n const SDKConfig = useSDKConfig()\n const apiv2 = SDKConfig?.urls?.apiV2\n return useQuery({\n queryKey: [QUERY_KEYS.TOKEN_PRICES],\n queryFn: () => getTokenPrices(apiv2),\n refetchInterval: 30000, // 30 sec\n refetchOnMount: false,\n refetchOnWindowFocus: false,\n })\n}\n\nexport const getTokenPrices = async (apiv2: string): Promise<Partial<Record<ChainId, TokenPrices[]>>> => {\n try {\n const response = await axios.get(`${PRICE_API_URL}/realtime/prices`)\n return response.data\n } catch (error) {\n reportError({\n apiUrl: apiv2,\n error,\n extraInfo: { type: 'getTokenPrices', error },\n })\n throw new Error('Error getting tokens')\n }\n}\n"],"names":[],"mappings":";;;;;;;AAqBc,SAAU,cAAc,GAAA;AACpC,IAAA,MAAM,SAAS,GAAG,YAAY,EAAE;AAChC,IAAA,MAAM,KAAK,GAAG,SAAS,EAAE,IAAI,EAAE,KAAK;AACpC,IAAA,OAAO,QAAQ,CAAC;AACd,QAAA,QAAQ,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC;AACnC,QAAA,OAAO,EAAE,MAAM,cAAc,CAAC,KAAK,CAAC;QACpC,eAAe,EAAE,KAAK;AACtB,QAAA,cAAc,EAAE,KAAK;AACrB,QAAA,oBAAoB,EAAE,KAAK;AAC5B,KAAA,CAAC;AACJ;MAEa,cAAc,GAAG,OAAO,KAAa,KAAsD;AACtG,IAAA,IAAI;QACF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA,EAAG,aAAa,CAAA,gBAAA,CAAkB,CAAC;QACpE,OAAO,QAAQ,CAAC,IAAI;IACtB;IAAE,OAAO,KAAK,EAAE;AACd,QAAA,WAAW,CAAC;AACV,YAAA,MAAM,EAAE,KAAK;YACb,KAAK;AACL,YAAA,SAAS,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE;AAC7C,SAAA,CAAC;AACF,QAAA,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC;IACzC;AACF;;;;"}
|
|
@@ -47,5 +47,5 @@ export interface SDKProps {
|
|
|
47
47
|
highlightedBond?: string;
|
|
48
48
|
}
|
|
49
49
|
export declare const useSDKConfig: (config?: SDKPropsDTO) => SDKProps;
|
|
50
|
-
export type URLKeys = 'apiV2' | 'realTimeApi' | 'mainUrl'
|
|
50
|
+
export type URLKeys = 'apiV2' | 'realTimeApi' | 'mainUrl';
|
|
51
51
|
export declare const useURLByEnvironment: (key: URLKeys) => string;
|
|
@@ -10,14 +10,12 @@ const defaultUrls = {
|
|
|
10
10
|
apiV2: 'https://api.ape.bond',
|
|
11
11
|
realTimeApi: 'https://realtime-api.ape.bond',
|
|
12
12
|
mainUrl: 'https://ape.bond',
|
|
13
|
-
priceApi: 'https://price-api.ape.bond',
|
|
14
13
|
};
|
|
15
14
|
// Staging URLS.
|
|
16
15
|
const stagingUrls = {
|
|
17
16
|
apiV2: 'https://staging-api.ape.bond',
|
|
18
17
|
realTimeApi: 'https://realtime-api-staging.ape.bond',
|
|
19
18
|
mainUrl: 'https://staging.ape.bond',
|
|
20
|
-
priceApi: 'https://price-api.ape.bond',
|
|
21
19
|
};
|
|
22
20
|
const useSDKConfig = (config) => {
|
|
23
21
|
const urls = process.env.NODE_ENV === 'production' ? defaultUrls : stagingUrls;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSDKConfig.js","sources":["../../src/state/useSDKConfig.ts"],"sourcesContent":["import { useEffect } from 'react'\nimport { useQuery } from '@tanstack/react-query'\nimport { QUERY_KEYS } from '../config/constants/queryKeys'\nimport { ChainId } from '@ape.swap/apeswap-lists'\nimport { setCustomRPCS } from '../config/constants/networks'\nimport { setSuiConnectModalOpener } from '../config/constants/suiCallbacks'\n\n// Prod URLS. Do not make changes here\nconst defaultUrls = {\n apiV2: 'https://api.ape.bond',\n realTimeApi: 'https://realtime-api.ape.bond',\n mainUrl: 'https://ape.bond',\n
|
|
1
|
+
{"version":3,"file":"useSDKConfig.js","sources":["../../src/state/useSDKConfig.ts"],"sourcesContent":["import { useEffect } from 'react'\nimport { useQuery } from '@tanstack/react-query'\nimport { QUERY_KEYS } from '../config/constants/queryKeys'\nimport { ChainId } from '@ape.swap/apeswap-lists'\nimport { setCustomRPCS } from '../config/constants/networks'\nimport { setSuiConnectModalOpener } from '../config/constants/suiCallbacks'\n\n// Prod URLS. Do not make changes here\nconst defaultUrls = {\n apiV2: 'https://api.ape.bond',\n realTimeApi: 'https://realtime-api.ape.bond',\n mainUrl: 'https://ape.bond',\n}\n\n// Staging URLS.\nconst stagingUrls = {\n apiV2: 'https://staging-api.ape.bond',\n realTimeApi: 'https://realtime-api-staging.ape.bond',\n mainUrl: 'https://staging.ape.bond',\n}\n\nexport interface SDKPropsDTO {\n referenceId: string\n chains: number[]\n hotBondChains?: number[]\n connector?: 'rainbowkit' | 'appkit' | 'default'\n useHotBonds?: boolean\n useTiers?: boolean\n useTGEBonds?: boolean\n useCardsView?: boolean\n showLowValueBonds?: boolean\n bondPartner?: string\n namingPreference?: 'Discount' | 'Bonus'\n urls?: Partial<Record<URLKeys, string>>\n theme?: any\n highestCompatibleVersion?: string\n blockSales?: boolean\n customBranch?: string\n highlightedBond?: string\n customRPCS?: Partial<Record<ChainId, string[]>>\n openSuiConnectModal?: () => void\n aptosAddress?: string\n suiAddress?: string\n suiTreasuryAddresses?: string[]\n}\n\nexport interface SDKProps {\n referenceId: string\n chains: number[]\n hotBondChains: number[]\n connector?: 'rainbowkit' | 'appkit' | 'default'\n useHotBonds: boolean\n useTiers: boolean\n useTGEBonds: boolean\n showLowValueBonds: boolean\n bondPartner?: string\n namingPreference: 'Discount' | 'Bonus'\n urls: Record<URLKeys, string>\n theme?: any\n highestCompatibleVersion?: string\n evmAddress?: string\n solAddress?: string\n aptosAddress?: string\n suiAddress?: string\n useCardsView?: boolean\n blockSales?: boolean\n customBranch?: string\n highlightedBond?: string\n}\n\nexport const useSDKConfig = (config?: SDKPropsDTO): SDKProps => {\n const urls = process.env.NODE_ENV === 'production' ? defaultUrls : stagingUrls\n\n const initialData: SDKProps = {\n referenceId: '',\n chains: [],\n hotBondChains: [ChainId.BSC, ChainId.MATIC],\n useHotBonds: true,\n connector: 'default',\n useTGEBonds: false,\n showLowValueBonds: false,\n bondPartner: undefined,\n namingPreference: 'Bonus',\n useCardsView: false,\n blockSales: false,\n customBranch: '',\n ...config,\n useTiers: config?.namingPreference === 'Discount' ? false : (config?.useTiers ?? false), // for the time being we'll assume discount preference does not want to useTiers\n urls: { ...urls, ...config?.urls },\n highestCompatibleVersion: '2.2.0',\n }\n\n useEffect(() => {\n if (config?.customRPCS) {\n setCustomRPCS(config.customRPCS)\n }\n }, [config?.customRPCS])\n\n useEffect(() => {\n if (config?.openSuiConnectModal) {\n setSuiConnectModalOpener(config.openSuiConnectModal)\n }\n }, [config?.openSuiConnectModal])\n\n const { data } = useQuery({\n queryKey: [QUERY_KEYS.SDK_CONFIG],\n queryFn: () => {\n throw new Error('Just a hotfix for latest versions of react-query that make queryFn a required prop')\n },\n initialData,\n })\n return data as SDKProps\n}\n\nexport type URLKeys = 'apiV2' | 'realTimeApi' | 'mainUrl'\n\nexport const useURLByEnvironment = (key: URLKeys) => {\n const config = useSDKConfig()\n return config?.urls?.[key] as string\n}\n"],"names":[],"mappings":";;;;;;;AAOA;AACA,MAAM,WAAW,GAAG;AAClB,IAAA,KAAK,EAAE,sBAAsB;AAC7B,IAAA,WAAW,EAAE,+BAA+B;AAC5C,IAAA,OAAO,EAAE,kBAAkB;CAC5B;AAED;AACA,MAAM,WAAW,GAAG;AAClB,IAAA,KAAK,EAAE,8BAA8B;AACrC,IAAA,WAAW,EAAE,uCAAuC;AACpD,IAAA,OAAO,EAAE,0BAA0B;CACpC;AAmDM,MAAM,YAAY,GAAG,CAAC,MAAoB,KAAc;AAC7D,IAAA,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,GAAG,WAAW,GAAG,WAAW;AAE9E,IAAA,MAAM,WAAW,GAAa;AAC5B,QAAA,WAAW,EAAE,EAAE;AACf,QAAA,MAAM,EAAE,EAAE;QACV,aAAa,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC;AAC3C,QAAA,WAAW,EAAE,IAAI;AACjB,QAAA,SAAS,EAAE,SAAS;AACpB,QAAA,WAAW,EAAE,KAAK;AAClB,QAAA,iBAAiB,EAAE,KAAK;AACxB,QAAA,WAAW,EAAE,SAAS;AACtB,QAAA,gBAAgB,EAAE,OAAO;AACzB,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,UAAU,EAAE,KAAK;AACjB,QAAA,YAAY,EAAE,EAAE;AAChB,QAAA,GAAG,MAAM;QACT,QAAQ,EAAE,MAAM,EAAE,gBAAgB,KAAK,UAAU,GAAG,KAAK,IAAI,MAAM,EAAE,QAAQ,IAAI,KAAK,CAAC;QACvF,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE;AAClC,QAAA,wBAAwB,EAAE,OAAO;KAClC;IAED,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,MAAM,EAAE,UAAU,EAAE;AACtB,YAAA,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC;QAClC;AACF,IAAA,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAExB,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,MAAM,EAAE,mBAAmB,EAAE;AAC/B,YAAA,wBAAwB,CAAC,MAAM,CAAC,mBAAmB,CAAC;QACtD;AACF,IAAA,CAAC,EAAE,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;AAEjC,IAAA,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;AACxB,QAAA,QAAQ,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;QACjC,OAAO,EAAE,MAAK;AACZ,YAAA,MAAM,IAAI,KAAK,CAAC,oFAAoF,CAAC;QACvG,CAAC;QACD,WAAW;AACZ,KAAA,CAAC;AACF,IAAA,OAAO,IAAgB;AACzB;AAIO,MAAM,mBAAmB,GAAG,CAAC,GAAY,KAAI;AAClD,IAAA,MAAM,MAAM,GAAG,YAAY,EAAE;AAC7B,IAAA,OAAO,MAAM,EAAE,IAAI,GAAG,GAAG,CAAW;AACtC;;;;"}
|
package/dist/styles.css
CHANGED
|
@@ -8,7 +8,7 @@ import { useSDKConfig } from '../../../../state/useSDKConfig.js';
|
|
|
8
8
|
|
|
9
9
|
const YourBondsMenu = ({ chainFilterOption, setChainFilterOption, filterOptions, filterOption, setFilterOption, setInputValue, inputValue, handleSort, }) => {
|
|
10
10
|
const SDKConfig = useSDKConfig();
|
|
11
|
-
return (jsxs("div", { className: "bonds-menu", children: [jsx(BondFilters, { chainFilterOption: chainFilterOption ?? ['All Chains'], setChainFilterOption: setChainFilterOption, filterOptions: filterOptions, filterOption: filterOption, setFilterOption: setFilterOption, onHandleQueryChange: () => setInputValue('') }), jsxs("div", { className: "table-header-container", children: [jsx("div", { className: "search-container", children: jsx(Flex, { sx: { width: '100%', maxWidth: '300px' }, children: jsx(Input, { className: "search-input", value: inputValue, onChange: (event) => setInputValue(event.target.value), variant: "search", sx: { fontWeight: 600, background: 'white2', height: '30px', fontSize: '14px', color: 'white' }, width: '100%', placeholder: 'Search...' }) }) }), jsxs("div", { className: "headers-container", sx: { pr: ['0', '0', '0', '20px'] }, children: [jsx(Flex, { sx: { display: ['none', 'none', 'none', 'flex'], width: '125px' } }), jsxs("div", { className: "your-bonds-table-headers", onClick: () => handleSort('claimable'), children: ["CLAIMABLE", jsx(Flex, { sx: { ml: '5px' }, children: jsx(Svg, { icon: "sort", width: "12px", color: "textDisabledButton" }) })] }), jsxs("div", { className: "your-bonds-table-headers", onClick: () => handleSort('pending'), children: ["PENDING", jsx(Flex, { sx: { ml: '5px' }, children: jsx(Svg, { icon: "sort", width: "12px", color: "textDisabledButton" }) })] }), jsxs("div", { className: "your-bonds-table-headers", onClick: () => handleSort('terms'), children: ["VESTING PROGRESS", jsx(Flex, { sx: { ml: '5px' }, children: jsx(Svg, { icon: "sort", width: "12px", color: "textDisabledButton" }) })] }), jsx(Flex, { className: "claim-all-button-container", children: SDKConfig.referenceId === 'apebond' && jsx(ClaimAll, {}) })] })] })] }));
|
|
11
|
+
return (jsxs("div", { className: "bonds-menu", children: [jsx(BondFilters, { chainFilterOption: chainFilterOption ?? ['All Chains'], setChainFilterOption: setChainFilterOption, filterOptions: filterOptions, filterOption: filterOption, setFilterOption: setFilterOption, onHandleQueryChange: () => setInputValue('') }), jsxs("div", { className: "table-header-container", children: [jsx("div", { className: "search-container", sx: { minWidth: ['unset', 'unset', 'unset', 'unset', '300px !important'] }, children: jsx(Flex, { sx: { width: '100%', maxWidth: '300px' }, children: jsx(Input, { className: "search-input", value: inputValue, onChange: (event) => setInputValue(event.target.value), variant: "search", sx: { fontWeight: 600, background: 'white2', height: '30px', fontSize: '14px', color: 'white' }, width: '100%', placeholder: 'Search...' }) }) }), jsxs("div", { className: "headers-container", sx: { pr: ['0', '0', '0', '20px'] }, children: [jsx(Flex, { sx: { display: ['none', 'none', 'none', 'flex'], width: '125px' } }), jsxs("div", { className: "your-bonds-table-headers", onClick: () => handleSort('claimable'), children: ["CLAIMABLE", jsx(Flex, { sx: { ml: '5px' }, children: jsx(Svg, { icon: "sort", width: "12px", color: "textDisabledButton" }) })] }), jsxs("div", { className: "your-bonds-table-headers", onClick: () => handleSort('pending'), children: ["PENDING", jsx(Flex, { sx: { ml: '5px' }, children: jsx(Svg, { icon: "sort", width: "12px", color: "textDisabledButton" }) })] }), jsxs("div", { className: "your-bonds-table-headers", onClick: () => handleSort('terms'), children: ["VESTING PROGRESS", jsx(Flex, { sx: { ml: '5px' }, children: jsx(Svg, { icon: "sort", width: "12px", color: "textDisabledButton" }) })] }), jsx(Flex, { className: "claim-all-button-container", children: SDKConfig.referenceId === 'apebond' && jsx(ClaimAll, {}) })] })] })] }));
|
|
12
12
|
};
|
|
13
13
|
|
|
14
14
|
export { YourBondsMenu as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"YourBondsMenu.js","sources":["../../../../../src/views/YourBonds/components/YourBondsMenu/YourBondsMenu.tsx"],"sourcesContent":["import React from 'react'\nimport { Flex } from 'theme-ui'\nimport BondFilters from '../../../../components/BondFilters/BondFilters'\nimport Input from '../../../../components/uikit-sdk/Input/Input'\nimport Svg from '../../../../components/uikit-sdk/Svg'\nimport { SortableKeys } from '../../YourBonds'\nimport ClaimAll from '../ClaimAll'\nimport { useSDKConfig } from '../../../../state/useSDKConfig'\n\nconst YourBondsMenu = ({\n chainFilterOption,\n setChainFilterOption,\n filterOptions,\n filterOption,\n setFilterOption,\n setInputValue,\n inputValue,\n handleSort,\n}: {\n chainFilterOption: string[]\n setChainFilterOption: (newValue: string[]) => void\n filterOptions: string[]\n filterOption: string\n setFilterOption: (newValue: string) => void\n setInputValue: (newValue: string) => void\n inputValue: string\n handleSort: (key: SortableKeys) => void\n}) => {\n const SDKConfig = useSDKConfig()\n\n return (\n <div className=\"bonds-menu\">\n <BondFilters\n chainFilterOption={chainFilterOption ?? ['All Chains']}\n setChainFilterOption={setChainFilterOption}\n filterOptions={filterOptions}\n filterOption={filterOption}\n setFilterOption={setFilterOption}\n onHandleQueryChange={() => setInputValue('')}\n />\n <div className=\"table-header-container\">\n <div className=\"search-container\">\n <Flex sx={{ width: '100%', maxWidth: '300px' }}>\n <Input\n className=\"search-input\"\n value={inputValue}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setInputValue(event.target.value)}\n variant=\"search\"\n sx={{ fontWeight: 600, background: 'white2', height: '30px', fontSize: '14px', color: 'white' }}\n width={'100%'}\n placeholder={'Search...'}\n />\n </Flex>\n </div>\n <div className=\"headers-container\" sx={{ pr: ['0', '0', '0', '20px'] }}>\n <Flex sx={{ display: ['none', 'none', 'none', 'flex'], width: '125px' }} />\n <div className=\"your-bonds-table-headers\" onClick={() => handleSort('claimable')}>\n CLAIMABLE\n <Flex sx={{ ml: '5px' }}>\n <Svg icon=\"sort\" width=\"12px\" color=\"textDisabledButton\" />\n </Flex>\n </div>\n <div className=\"your-bonds-table-headers\" onClick={() => handleSort('pending')}>\n PENDING\n <Flex sx={{ ml: '5px' }}>\n <Svg icon=\"sort\" width=\"12px\" color=\"textDisabledButton\" />\n </Flex>\n </div>\n <div className=\"your-bonds-table-headers\" onClick={() => handleSort('terms')}>\n VESTING PROGRESS\n <Flex sx={{ ml: '5px' }}>\n <Svg icon=\"sort\" width=\"12px\" color=\"textDisabledButton\" />\n </Flex>\n </div>\n <Flex className=\"claim-all-button-container\">{SDKConfig.referenceId === 'apebond' && <ClaimAll />}</Flex>\n </div>\n </div>\n </div>\n )\n}\n\nexport default YourBondsMenu\n"],"names":["_jsxs","_jsx"],"mappings":";;;;;;;;AASA,MAAM,aAAa,GAAG,CAAC,EACrB,iBAAiB,EACjB,oBAAoB,EACpB,aAAa,EACb,YAAY,EACZ,eAAe,EACf,aAAa,EACb,UAAU,EACV,UAAU,GAUX,KAAI;AACH,IAAA,MAAM,SAAS,GAAG,YAAY,EAAE;AAEhC,IAAA,QACEA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,YAAY,
|
|
1
|
+
{"version":3,"file":"YourBondsMenu.js","sources":["../../../../../src/views/YourBonds/components/YourBondsMenu/YourBondsMenu.tsx"],"sourcesContent":["import React from 'react'\nimport { Flex } from 'theme-ui'\nimport BondFilters from '../../../../components/BondFilters/BondFilters'\nimport Input from '../../../../components/uikit-sdk/Input/Input'\nimport Svg from '../../../../components/uikit-sdk/Svg'\nimport { SortableKeys } from '../../YourBonds'\nimport ClaimAll from '../ClaimAll'\nimport { useSDKConfig } from '../../../../state/useSDKConfig'\n\nconst YourBondsMenu = ({\n chainFilterOption,\n setChainFilterOption,\n filterOptions,\n filterOption,\n setFilterOption,\n setInputValue,\n inputValue,\n handleSort,\n}: {\n chainFilterOption: string[]\n setChainFilterOption: (newValue: string[]) => void\n filterOptions: string[]\n filterOption: string\n setFilterOption: (newValue: string) => void\n setInputValue: (newValue: string) => void\n inputValue: string\n handleSort: (key: SortableKeys) => void\n}) => {\n const SDKConfig = useSDKConfig()\n\n return (\n <div className=\"bonds-menu\">\n <BondFilters\n chainFilterOption={chainFilterOption ?? ['All Chains']}\n setChainFilterOption={setChainFilterOption}\n filterOptions={filterOptions}\n filterOption={filterOption}\n setFilterOption={setFilterOption}\n onHandleQueryChange={() => setInputValue('')}\n />\n <div className=\"table-header-container\">\n <div className=\"search-container\" sx={{ minWidth: ['unset', 'unset', 'unset', 'unset', '300px !important'] }}>\n <Flex sx={{ width: '100%', maxWidth: '300px' }}>\n <Input\n className=\"search-input\"\n value={inputValue}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setInputValue(event.target.value)}\n variant=\"search\"\n sx={{ fontWeight: 600, background: 'white2', height: '30px', fontSize: '14px', color: 'white' }}\n width={'100%'}\n placeholder={'Search...'}\n />\n </Flex>\n </div>\n <div className=\"headers-container\" sx={{ pr: ['0', '0', '0', '20px'] }}>\n <Flex sx={{ display: ['none', 'none', 'none', 'flex'], width: '125px' }} />\n <div className=\"your-bonds-table-headers\" onClick={() => handleSort('claimable')}>\n CLAIMABLE\n <Flex sx={{ ml: '5px' }}>\n <Svg icon=\"sort\" width=\"12px\" color=\"textDisabledButton\" />\n </Flex>\n </div>\n <div className=\"your-bonds-table-headers\" onClick={() => handleSort('pending')}>\n PENDING\n <Flex sx={{ ml: '5px' }}>\n <Svg icon=\"sort\" width=\"12px\" color=\"textDisabledButton\" />\n </Flex>\n </div>\n <div className=\"your-bonds-table-headers\" onClick={() => handleSort('terms')}>\n VESTING PROGRESS\n <Flex sx={{ ml: '5px' }}>\n <Svg icon=\"sort\" width=\"12px\" color=\"textDisabledButton\" />\n </Flex>\n </div>\n <Flex className=\"claim-all-button-container\">{SDKConfig.referenceId === 'apebond' && <ClaimAll />}</Flex>\n </div>\n </div>\n </div>\n )\n}\n\nexport default YourBondsMenu\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { BillsConfig } from '@ape.swap/apeswap-lists';
|
|
2
|
-
/**
|
|
3
|
-
* Discover Sui bonds by reading treasury bond_contracts tables on-chain.
|
|
4
|
-
* Returns BillsConfig[] ready for the enrichment pipeline (enrichSuiBonds).
|
|
5
|
-
*/
|
|
6
|
-
export declare function discoverSuiBonds(treasuryAddresses?: string[]): Promise<BillsConfig[]>;
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { UserBill, UserOwnedBillsData } from '../../types/yourbonds';
|
|
2
|
-
import { BillsConfig, ChainId } from '@ape.swap/apeswap-lists';
|
|
3
|
-
import { TokenPrices } from '../tokenPrices/useTokenPrices';
|
|
4
|
-
export declare const fetchUserOwnedBillsDataAsync: (chainId: ChainId, account: string, bondData: BillsConfig[], tokenPrices: Partial<Record<ChainId, TokenPrices[]>>, priceApiUrl?: string) => Promise<UserOwnedBillsData[]>;
|
|
5
|
-
export declare const fetchUserOwnedBills: (chainId: ChainId, account: string, bonds: BillsConfig[], tokenPrices: Partial<Record<ChainId, TokenPrices[]>>, priceApiUrl?: string) => Promise<UserBill[]>;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fetchBillsUser.js","sources":["../../../src/state/bonds/fetchBillsUser.ts"],"sourcesContent":["import billAbi from '../../config/abi/BOND_2_0_0.json'\nimport BigNumber from 'bignumber.js'\nimport multicall from '../../utils/multicall'\nimport { UserBill, UserOwnedBillsData } from '../../types/yourbonds'\nimport { BillsConfig, BillVersion, ChainId } from '@ape.swap/apeswap-lists'\nimport { TokenPrices } from '../tokenPrices/useTokenPrices'\nimport { BondsData } from '../../types/bonds'\nimport axios from 'axios'\n\nexport const fetchUserOwnedBillsDataAsync = async (\n chainId: ChainId,\n account: string,\n bondData: BillsConfig[],\n tokenPrices: Partial<Record<ChainId, TokenPrices[]>>,\n priceApiUrl?: string,\n): Promise<UserOwnedBillsData[]> => {\n try {\n if (!account) {\n return []\n }\n const bonds: BillsConfig[] = bondData\n\n // Fetch and set user owned bill data without NFT Data\n const userOwnedBills = await fetchUserOwnedBills(chainId, account, bonds, tokenPrices, priceApiUrl)\n const mapUserOwnedBills = bonds.map((bill: BillsConfig) =>\n userOwnedBills.filter((b) => b.address.toLowerCase() === bill.contractAddress[bill.chainId]?.toLowerCase()),\n )\n const userOwnedBillsData = bonds.map((bill: BillsConfig, i: number) => ({\n index: bill.index,\n userOwnedBills: mapUserOwnedBills[i],\n }))\n\n const combinedData = userOwnedBillsData.map((data) => {\n const enrichedUserBills = data.userOwnedBills.map((bill) => {\n return {\n ...bill,\n }\n })\n return {\n ...data,\n userOwnedBills: enrichedUserBills,\n }\n })\n\n return Promise.resolve(combinedData)\n } catch (error) {\n console.error('Error fetching user owned bills data:', error)\n return Promise.reject(error)\n }\n}\n\nexport const fetchUserOwnedBills = async (\n chainId: ChainId,\n account: string,\n bonds: BillsConfig[],\n tokenPrices: Partial<Record<ChainId, TokenPrices[]>>,\n priceApiUrl?: string,\n): Promise<UserBill[]> => {\n // Maps all the bills in the list repo to make a call to each of them to get Bills Id and paused state (only for V4)\n const billIdAndPausedCalls = bonds.flatMap((b, index) => {\n const calls = [\n {\n address: b.contractAddress[b.chainId] ?? '',\n name: 'getBillIds',\n params: [account],\n bondIndex: index,\n },\n ]\n // Only add paused call for V4 bonds\n if (b.billVersion === BillVersion.V4) {\n calls.push({\n address: b.contractAddress[b.chainId] ?? '',\n name: 'paused',\n params: [],\n bondIndex: index,\n })\n }\n return calls\n })\n const billIdAndPausedResults = await multicall(chainId, billAbi, billIdAndPausedCalls, true, 15)\n\n // Separate billIds and pausedStates from results, tracking which bonds have paused calls\n const billIds: any[] = []\n const pausedStates: Map<string, boolean> = new Map()\n let resultIndex = 0\n\n bonds.forEach((b) => {\n // First result is always getBillIds\n billIds.push(billIdAndPausedResults?.[resultIndex])\n resultIndex++\n\n // Next result is paused only if V4\n if (b.billVersion === BillVersion.V4) {\n pausedStates.set(\n b.contractAddress[b.chainId]?.toLowerCase() as string,\n billIdAndPausedResults?.[resultIndex]?.[0] ?? false,\n )\n resultIndex++\n }\n })\n const billDataCalls: any = []\n const billVersions: any = []\n\n billIds?.forEach((idArray: any, index: number) =>\n idArray[0].forEach((id: bigint) => {\n if (id > 0) {\n billDataCalls.push({\n address: bonds[index].contractAddress[bonds[index].chainId],\n name: bonds[index].billVersion !== BillVersion.V1 ? 'getBillInfo' : 'billInfo',\n params: [id],\n bond: bonds[index],\n })\n billDataCalls.push({\n address: bonds[index].contractAddress[bonds[index].chainId],\n name: bonds[index].billVersion !== BillVersion.V1 ? 'claimablePayout' : 'pendingPayoutFor',\n params: [id],\n bond: bonds[index],\n })\n billVersions.push(bonds[index].billVersion)\n }\n }),\n )\n const billData = await multicall(chainId, billAbi, billDataCalls, true, 150)\n const result = []\n\n for (let i = 0; i < billVersions.length; i++) {\n const billPos = i === 0 ? 0 : i * 2\n let bond: BondsData = billDataCalls[billPos].bond\n\n let principalTokenPrice = tokenPrices?.[bond.chainId]?.find(\n (tokenPrice) => tokenPrice.tokenAddress?.toLowerCase() === bond?.lpToken?.address?.[bond.chainId]?.toLowerCase(),\n )?.price\n\n let payoutTokenPrice = tokenPrices?.[bond.chainId]?.find(\n (tokenPrice: TokenPrices) =>\n tokenPrice?.tokenAddress?.toLowerCase() === bond?.earnToken?.address?.[bond.chainId]?.toLowerCase(),\n )?.price\n\n if (principalTokenPrice === undefined) {\n try {\n const res = await axios.get(\n `${priceApiUrl}/realtime/price?token=${bond?.lpToken?.address?.[bond?.chainId]}&chain=${bond?.chainId}`,\n )\n console.log('Individual call for: ', bond.lpToken.symbol, '. Price: ', res.data.price)\n principalTokenPrice = parseFloat(res.data.price ?? '0')\n } catch {\n principalTokenPrice = 0\n }\n }\n if (payoutTokenPrice === undefined) {\n try {\n const res = await axios.get(\n `${priceApiUrl}/realtime/price?token=${bond?.earnToken?.address?.[bond?.chainId]}&chain=${bond?.chainId}`,\n )\n console.log('Individual call for: ', bond.earnToken.symbol, '. Price: ', res.data.price)\n payoutTokenPrice = parseFloat(res.data.price ?? '0')\n } catch {\n payoutTokenPrice = 0\n }\n }\n\n bond = {\n ...bond,\n payoutTokenPrice: payoutTokenPrice?.toString(),\n principalTokenPrice: principalTokenPrice?.toString(),\n }\n const paused = pausedStates.get(bond.contractAddress[bond.chainId]?.toLowerCase() as string) ?? false\n\n const data =\n billVersions[i] !== BillVersion.V1\n ? {\n address: billDataCalls[billPos].address,\n id: billDataCalls[billPos].params[0].toString(),\n payout: new BigNumber(billData[billPos][0]?.payout.toString())\n .minus(billData[billPos][0]?.payoutClaimed.toString())\n .toString(),\n totalPayout: billData[billPos][0]?.payout.toString(),\n payoutClaimed: billData[billPos][0]?.payoutClaimed.toString(),\n billNftAddress: bond.billNnftAddress[bond.chainId] ?? '',\n vesting: billData[billPos][0]?.vesting.toString(),\n vestingTerm: billData[billPos][0]?.vestingTerm.toString(),\n lastBlockTimestamp: billData[billPos][0]?.lastClaimTimestamp.toString(),\n vestingStartTimestamp: billData[billPos][0]?.vestingStartTimestamp.toString(),\n truePricePaid: billData[billPos][0]?.truePricePaid.toString(),\n pendingRewards: billData[billPos + 1][0].toString(),\n paused,\n bond,\n }\n : {\n address: billDataCalls[billPos].address,\n id: billDataCalls[billPos].params[0].toString(),\n payoutClaimed: billData?.[billPos]?.[0]?.payoutClaimed?.toString(),\n payout: billData[billPos][0].toString(),\n billNftAddress: bond.billNnftAddress[bond.chainId] ?? '',\n vesting: billData[billPos][1].toString(),\n lastBlockTimestamp: billData[billPos][2].toString(),\n truePricePaid: billData[billPos][3].toString(),\n pendingRewards: billData[billPos + 1][0].toString(),\n paused,\n bond,\n }\n result.push(data)\n }\n\n return result\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { BillsConfig, ChainId } from '@ape.swap/apeswap-lists';
|
|
2
|
-
import type { UserOwnedBillsData } from '../../types/yourbonds';
|
|
3
|
-
import type { TokenPrices } from '../tokenPrices/useTokenPrices';
|
|
4
|
-
export declare function fetchUserOwnedAptosBonds(user: string | undefined, bondData: BillsConfig[], tokenPrices: Partial<Record<ChainId, TokenPrices[]>>, priceApiUrl?: string): Promise<UserOwnedBillsData[]>;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fetchBillsUserAptos.js","sources":["../../../src/state/bonds/fetchBillsUserAptos.ts"],"sourcesContent":["// =============================================================================\n// fetchUserOwnedAptosBonds — user bills fetcher for the Aptos chain\n// =============================================================================\n//\n// On-chain first: reads user bills directly via Move view functions (no\n// api-v2 dependency). Uses:\n//\n// bond_nft::user_bills(user) → [bill_id, ...]\n// bond_nft::bond_market_by_id(bill_id) → market_addr\n// bond_nft::nft_address(bill_id) → bill_addr\n// bond::bill_info(market, bill_addr) → Bill struct\n// bond_nft::vesting_progress(bill_id) → [total_vested, claimable]\n\nimport { BillsConfig, ChainId } from '@ape.swap/apeswap-lists'\nimport type { UserOwnedBillsData, UserBill } from '../../types/yourbonds'\nimport type { BondsData } from '../../types/bonds'\nimport type { TokenPrices } from '../tokenPrices/useTokenPrices'\nimport { APTOS_PLACEHOLDER_BILL_IMAGE } from '../../constants/aptosConstants'\nimport axios from 'axios'\nimport {\n readAptosBillInfo,\n readBondMarketByBillId,\n readNftAddressByBillId,\n readUserBillIds,\n readVestingProgress,\n} from '../../utils/aptosHelpers'\n\nexport async function fetchUserOwnedAptosBonds(\n user: string | undefined,\n bondData: BillsConfig[],\n tokenPrices: Partial<Record<ChainId, TokenPrices[]>>,\n priceApiUrl?: string,\n): Promise<UserOwnedBillsData[]> {\n if (!user) return []\n\n // Build one `UserOwnedBillsData` per known bond config. We always return\n // the outer shell so downstream code (`getUserBonds` in useUserBonds.ts)\n // can match bills back to their bond config.\n const aptosKey = ChainId.APTOS\n const aptosPrices = tokenPrices?.[aptosKey] ?? []\n\n // Index bonds by lowercased market address for O(1) lookup when matching\n // bill_ids back to their market.\n const bondsByMarket = new Map<string, BillsConfig>()\n for (const bond of bondData) {\n const marketAddr = bond.contractAddress[aptosKey]\n if (marketAddr) bondsByMarket.set(marketAddr.toLowerCase(), bond)\n }\n\n // Seed the result with empty shells so every bond is represented.\n const result: UserOwnedBillsData[] = bondData.map((bond) => ({\n index: bond.index,\n userOwnedBills: [] as UserBill[],\n }))\n const indexByBondIndex = new Map<number, UserOwnedBillsData>()\n for (const entry of result) indexByBondIndex.set(entry.index, entry)\n\n try {\n const billIds = await readUserBillIds(user)\n if (billIds.length === 0) return result\n\n // For each bill the user owns, resolve its market, object address, state\n // and vesting progress in parallel. Bills whose market is not in our\n // bondData are silently skipped (they belong to a market the SDK isn't\n // configured to display).\n await Promise.all(\n billIds.map(async (billId) => {\n try {\n const [marketAddr, billAddr] = await Promise.all([\n readBondMarketByBillId(billId),\n readNftAddressByBillId(billId),\n ])\n const bond = bondsByMarket.get(marketAddr.toLowerCase())\n if (!bond) return\n\n const [billInfo, vesting] = await Promise.all([\n readAptosBillInfo(marketAddr, billId),\n readVestingProgress(marketAddr, billId),\n ])\n\n const principalAddr = bond.lpToken.address[aptosKey]?.toLowerCase()\n const payoutAddr = bond.earnToken.address[aptosKey]?.toLowerCase()\n let principalPrice = aptosPrices.find((t) => t.tokenAddress.toLowerCase() === principalAddr)?.price\n let payoutPrice = aptosPrices.find((t) => t.tokenAddress.toLowerCase() === payoutAddr)?.price\n\n // Fallback: individual price-api call (same pattern as fetchBillsUserSolana.ts).\n // TODO(aptos): price-api pending Aptos support. Fallback to hardcoded prices.\n if (principalPrice === undefined && priceApiUrl) {\n try {\n const res = await axios.get(\n `${priceApiUrl}/realtime/price?token=${bond.lpToken.address[aptosKey]}&chain=${aptosKey}`,\n )\n principalPrice = parseFloat(res.data.price ?? '0')\n } catch {\n principalPrice = 0\n }\n }\n if (payoutPrice === undefined && priceApiUrl) {\n try {\n const res = await axios.get(\n `${priceApiUrl}/realtime/price?token=${bond.earnToken.address[aptosKey]}&chain=${aptosKey}`,\n )\n payoutPrice = parseFloat(res.data.price ?? '0')\n } catch {\n payoutPrice = 0\n }\n }\n\n const payoutTotal = String(billInfo.payout ?? '0')\n const payoutClaimed = String(billInfo.payout_claimed ?? '0')\n const payoutRemaining = (BigInt(payoutTotal) - BigInt(payoutClaimed)).toString()\n const vestingStart = billInfo.vesting_start_timestamp ?? billInfo.last_timestamp ?? '0'\n const lastClaim = billInfo.last_claim_timestamp ?? billInfo.last_timestamp ?? vestingStart\n\n // Compute human-readable amounts for the modal display.\n const payoutDecimals = bond.earnToken.decimals[aptosKey] ?? 8\n const principalDecimals = bond.lpToken.decimals[aptosKey] ?? 8\n const payoutHuman = parseFloat(payoutTotal) / 10 ** payoutDecimals\n // Reconstruct deposit from payout and true_price_paid:\n // price = principal_amount * 1e8 / payout_amount → principal = payout * price / 1e8\n const truePricePaid = parseFloat(String(billInfo.true_price_paid ?? '0'))\n const depositAtomic = (parseFloat(payoutTotal) * truePricePaid) / 1e8\n const depositHuman = depositAtomic / 10 ** principalDecimals\n const depositUSD = depositHuman * (principalPrice ?? 0)\n\n const userBill: UserBill = {\n // `UserBill.address` is used by the SDK's claim flow as the\n // second argument to `bond::claim(market, bill_addr)`. Must be\n // the object address, NOT the scalar bill_id.\n address: billAddr,\n id: billId,\n vestingTerm: String(billInfo.vesting_term ?? '0'),\n payout: payoutRemaining,\n totalPayout: payoutTotal,\n truePricePaid: String(billInfo.true_price_paid ?? '0'),\n lastBlockTimestamp: String(lastClaim),\n vestingStartTimestamp: String(vestingStart),\n pendingRewards: vesting[1], // claimable from vesting_progress tuple\n billNftAddress: bond.billNnftAddress[aptosKey] ?? '',\n payoutClaimed,\n nftData: {\n tokenId: 0,\n billNftId: parseInt(billId),\n processing: false,\n image: APTOS_PLACEHOLDER_BILL_IMAGE,\n // Populate `data` so YourBondsModal can display Deposit/Bond Value.\n // api-v2 won't enrich Aptos bills, so we compute from on-chain data.\n data: {\n dollarValue: depositUSD,\n payout: payoutHuman,\n billContract: marketAddr,\n billNftAddress: bond.billNnftAddress[aptosKey] ?? '',\n billNftId: parseInt(billId),\n blockNumber: 0,\n bondArtCollection: '',\n bondPartner: '',\n bondVersion: bond.version ?? '',\n chainId: aptosKey,\n createTransactionHash: '',\n createdAddressOwner: user,\n createdAt: parseInt(String(vestingStart)),\n deposit: depositHuman,\n expires: parseInt(String(vestingStart)) + parseInt(String(billInfo.vesting_term ?? '0')),\n pairName: `${bond.lpToken.symbol}-${bond.earnToken.symbol}`,\n payoutToken: bond.earnToken.address[aptosKey] ?? '',\n payoutTokenData: {\n address: bond.earnToken.address[aptosKey] ?? '',\n name: bond.earnToken.symbol,\n symbol: bond.earnToken.symbol,\n decimals: bond.earnToken.decimals,\n },\n payoutTokenPrice: (payoutPrice ?? 0).toString(),\n principalToken: bond.lpToken.address[aptosKey] ?? '',\n token0: {\n address: bond.lpToken.address[aptosKey] ?? '',\n symbol: bond.lpToken.symbol,\n name: bond.lpToken.symbol,\n decimals: bond.lpToken.decimals,\n },\n token1: {\n address: bond.earnToken.address[aptosKey] ?? '',\n symbol: bond.earnToken.symbol,\n name: bond.earnToken.symbol,\n decimals: bond.earnToken.decimals,\n },\n type: bond.billType ?? 'reserve',\n vestingPeriodSeconds: parseInt(String(billInfo.vesting_term ?? '0')),\n },\n },\n bond: {\n ...bond,\n payoutTokenPrice: payoutPrice?.toString(),\n principalTokenPrice: principalPrice?.toString(),\n } as BondsData,\n }\n\n const entry = indexByBondIndex.get(bond.index)\n entry?.userOwnedBills.push(userBill)\n } catch (billErr) {\n console.warn(`[Aptos] Failed to read bill ${billId}`, billErr)\n }\n }),\n )\n } catch (e) {\n console.warn(`[Aptos] Failed to list user bills for ${user}`, e)\n }\n\n return result\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { BillsConfig, ChainId } from '@ape.swap/apeswap-lists';
|
|
2
|
-
import { UserOwnedBillsData } from '../../types/yourbonds';
|
|
3
|
-
import { TokenPrices } from '../../state/tokenPrices/useTokenPrices';
|
|
4
|
-
export declare function fetchUserOwnedSolanaBonds(user: string, bondData: BillsConfig[], tokenPrices: Partial<Record<ChainId, TokenPrices[]>>, priceApiUrl?: string): Promise<UserOwnedBillsData[]>;
|