@ape.swap/bonds-sdk 6.1.18 → 6.2.0-test.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.
@@ -1,10 +1,9 @@
1
- import { useQueryClient, useQuery } from '@tanstack/react-query';
1
+ import { useQuery } from '@tanstack/react-query';
2
2
  import { QUERY_KEYS } from '../../config/constants/queryKeys.js';
3
3
  import axios from 'axios';
4
4
  import useTokenPrices from '../tokenPrices/useTokenPrices.js';
5
5
  import useBondsList from './useBondsList.js';
6
6
  import { ChainId } from '@ape.swap/apeswap-lists';
7
- import { ACF_TO_ABOND } from '../../config/constants/addresses.js';
8
7
  import useBondsListPreTGE from './useBondsListPreTGE.js';
9
8
  import { fetchBondsDataPreTGE } from './fetchBondsData/fetchBondsDataPreTGE.js';
10
9
  import { fetchBondsDataEVM } from './fetchBondsData/fetchBondsDataEVM.js';
@@ -17,10 +16,9 @@ function useBondsData() {
17
16
  const { data: preTGEList } = useBondsListPreTGE();
18
17
  const { data: tokenPrices } = useTokenPrices();
19
18
  const tokenPricesKey = Object.keys(tokenPrices ?? {})?.length;
20
- const queryClient = useQueryClient();
21
19
  return useQuery({
22
20
  queryKey: [QUERY_KEYS.BONDS_DATA],
23
- queryFn: () => calculateBondsData(queryClient),
21
+ queryFn: ({ client }) => calculateBondsData(client),
24
22
  refetchInterval: 25000, // i.e. 25 sec
25
23
  enabled: !!bondList && !!preTGEList && !!tokenPricesKey,
26
24
  refetchOnWindowFocus: false,
@@ -36,21 +34,6 @@ const calculateBondsData = async (queryClient) => {
36
34
  const { chains, urls } = queryClient?.getQueryData([QUERY_KEYS.SDK_CONFIG]);
37
35
  const realTimeApiUrl = urls['realTimeApi'];
38
36
  const apiUrl = urls['apiV2'];
39
- const bondList = queryClient?.getQueryData([QUERY_KEYS.BONDS_LIST]);
40
- const preTGEList = queryClient?.getQueryData([QUERY_KEYS.BONDS_LIST_PRE_TGE]);
41
- const tokenPrices = queryClient?.getQueryData([QUERY_KEYS.TOKEN_PRICES]);
42
- if (!tokenPrices)
43
- return [];
44
- const reducedBonds = bondList?.reduce((acc, bill) => {
45
- const chainId = bill.chainId;
46
- if (!acc[chainId]) {
47
- acc[chainId] = [];
48
- }
49
- if (bill.contractAddress?.[chainId]?.toLowerCase() !== ACF_TO_ABOND.toLowerCase() && !bill.soldOut) {
50
- acc[chainId].push(bill);
51
- }
52
- return acc;
53
- }, {});
54
37
  // ----------------------- Step 2 -----------------------
55
38
  // Fetch EVM & SOL data from realtime
56
39
  let evmSolBondsData = [];
@@ -61,53 +44,56 @@ const calculateBondsData = async (queryClient) => {
61
44
  }
62
45
  catch {
63
46
  // Fallback strategy
64
- if (bondList) {
65
- console.time('Fallback BondsData');
66
- const billData = await Promise.all([
67
- ...chains
68
- .filter((c) => c !== ChainId.APTOS && c !== ChainId.SUI)
69
- .map(async (chainId) => {
70
- if (!reducedBonds[chainId])
71
- return [];
72
- return chainId === ChainId.SOL
73
- ? await fetchBondsDataSOL(reducedBonds[chainId], apiUrl, tokenPrices[chainId])
74
- : await fetchBondsDataEVM(chainId, reducedBonds[chainId], apiUrl, tokenPrices[chainId]);
75
- }),
76
- ...chains.map(async (chainId) => {
77
- const filteredBonds = preTGEList?.filter((bond) => bond.chainId === chainId) ?? [];
78
- return await fetchBondsDataPreTGE(chainId, tokenPrices, filteredBonds, apiUrl);
79
- }),
80
- ]);
81
- console.timeEnd('Fallback BondsData');
82
- evmSolBondsData = billData.flat();
83
- }
47
+ console.time('Fallback BondsData');
48
+ const bondList = queryClient?.getQueryData([QUERY_KEYS.BONDS_LIST]);
49
+ const preTGEList = queryClient?.getQueryData([QUERY_KEYS.BONDS_LIST_PRE_TGE]);
50
+ const tokenPrices = queryClient?.getQueryData([QUERY_KEYS.TOKEN_PRICES]);
51
+ const billData = await Promise.all([
52
+ ...chains
53
+ .filter((c) => c !== ChainId.APTOS && c !== ChainId.SUI)
54
+ .map(async (chainId) => {
55
+ if (!bondList[chainId])
56
+ return [];
57
+ return chainId === ChainId.SOL
58
+ ? await fetchBondsDataSOL(bondList[chainId], apiUrl, tokenPrices[chainId])
59
+ : await fetchBondsDataEVM(chainId, bondList[chainId], apiUrl, tokenPrices[chainId]);
60
+ }),
61
+ ...chains.map(async (chainId) => {
62
+ const filteredBonds = preTGEList?.filter((bond) => bond.chainId === chainId) ?? [];
63
+ return await fetchBondsDataPreTGE(chainId, tokenPrices, filteredBonds, apiUrl);
64
+ }),
65
+ ]);
66
+ console.timeEnd('Fallback BondsData');
67
+ evmSolBondsData = billData.flat();
84
68
  }
85
69
  // ----------------------- Step 3 -----------------------
86
70
  // Fetch Aptos & Sui Bonds data
87
71
  let aptosBonds = [];
88
72
  let suiBonds = [];
89
- try {
90
- if (reducedBonds && tokenPrices) {
91
- const includesAptos = chains.includes(ChainId.APTOS);
92
- const includesSui = chains.includes(ChainId.SUI);
73
+ const includesAptos = chains.includes(ChainId.APTOS);
74
+ const includesSui = chains.includes(ChainId.SUI);
75
+ if (includesAptos || includesSui) {
76
+ try {
77
+ const bondList = queryClient?.getQueryData([QUERY_KEYS.BONDS_LIST]);
78
+ const tokenPrices = queryClient?.getQueryData([QUERY_KEYS.TOKEN_PRICES]);
93
79
  if (includesAptos && includesSui) {
94
80
  const [aptos, sui] = await Promise.all([
95
- fetchBondsDataAptos(reducedBonds[ChainId.APTOS], tokenPrices[ChainId.APTOS]),
96
- fetchBondsDataSUI(reducedBonds[ChainId.SUI], tokenPrices[ChainId.SUI]),
81
+ fetchBondsDataAptos(bondList[ChainId.APTOS], tokenPrices[ChainId.APTOS]),
82
+ fetchBondsDataSUI(bondList[ChainId.SUI], tokenPrices[ChainId.SUI]),
97
83
  ]);
98
84
  aptosBonds = aptos;
99
85
  suiBonds = sui;
100
86
  }
101
87
  else if (includesAptos) {
102
- aptosBonds = await fetchBondsDataAptos(reducedBonds[ChainId.APTOS], tokenPrices[ChainId.APTOS]);
88
+ aptosBonds = await fetchBondsDataAptos(bondList[ChainId.APTOS], tokenPrices[ChainId.APTOS]);
103
89
  }
104
90
  else if (includesSui) {
105
- suiBonds = await fetchBondsDataSUI(reducedBonds[ChainId.SUI], tokenPrices[ChainId.SUI]);
91
+ suiBonds = await fetchBondsDataSUI(bondList[ChainId.SUI], tokenPrices[ChainId.SUI]);
106
92
  }
107
93
  }
108
- }
109
- catch (e) {
110
- console.error(e);
94
+ catch (e) {
95
+ console.error(e);
96
+ }
111
97
  }
112
98
  return [...evmSolBondsData, ...aptosBonds, ...suiBonds];
113
99
  };
@@ -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 { 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 // 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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"}
1
+ {"version":3,"file":"useBondsData.js","sources":["../../../src/state/bonds/useBondsData.ts"],"sourcesContent":["import { QueryClient, useQuery, 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 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\n return useQuery({\n queryKey: [QUERY_KEYS.BONDS_DATA],\n queryFn: ({ client }) => calculateBondsData(client),\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\n // ----------------------- Step 2 -----------------------\n // Fetch EVM & SOL data from realtime\n let evmSolBondsData: BondsData[] = []\n\n try {\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 console.time('Fallback BondsData')\n const bondList = queryClient?.getQueryData([QUERY_KEYS.BONDS_LIST]) as Record<ChainId, 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 const billData = await Promise.all([\n ...chains\n .filter((c) => c !== ChainId.APTOS && c !== ChainId.SUI)\n .map(async (chainId: ChainId) => {\n if (!bondList[chainId]) return []\n return chainId === ChainId.SOL\n ? await fetchBondsDataSOL(bondList[chainId], apiUrl, tokenPrices[chainId])\n : await fetchBondsDataEVM(chainId, bondList[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 // ----------------------- Step 3 -----------------------\n // Fetch Aptos & Sui Bonds data\n let aptosBonds: BondsData[] = []\n let suiBonds: BondsData[] = []\n const includesAptos = chains.includes(ChainId.APTOS)\n const includesSui = chains.includes(ChainId.SUI)\n\n if (includesAptos || includesSui) {\n try {\n const bondList = queryClient?.getQueryData([QUERY_KEYS.BONDS_LIST]) as Record<ChainId, BillsConfig[]>\n const tokenPrices = queryClient?.getQueryData([QUERY_KEYS.TOKEN_PRICES]) as Partial<\n Record<ChainId, TokenPrices[]>\n >\n if (includesAptos && includesSui) {\n const [aptos, sui] = await Promise.all([\n fetchBondsDataAptos(bondList[ChainId.APTOS], tokenPrices[ChainId.APTOS]),\n fetchBondsDataSUI(bondList[ChainId.SUI], tokenPrices[ChainId.SUI]),\n ])\n aptosBonds = aptos\n suiBonds = sui\n } else if (includesAptos) {\n aptosBonds = await fetchBondsDataAptos(bondList[ChainId.APTOS], tokenPrices[ChainId.APTOS])\n } else if (includesSui) {\n suiBonds = await fetchBondsDataSUI(bondList[ChainId.SUI], tokenPrices[ChainId.SUI])\n }\n } catch (e) {\n console.error(e)\n }\n }\n\n return [...evmSolBondsData, ...aptosBonds, ...suiBonds]\n}\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  import { QueryClient, UseQueryResult } from '@tanstack/react-query';
2
- import { BillsConfig } from '@ape.swap/apeswap-lists';
3
- export default function useBondsList(): UseQueryResult<BillsConfig[]>;
4
- export declare const getBondsList: (queryClient: QueryClient) => Promise<BillsConfig[]>;
2
+ import { BillsConfig, ChainId } from '@ape.swap/apeswap-lists';
3
+ export default function useBondsList(): UseQueryResult<Record<ChainId, BillsConfig[]>>;
4
+ export declare const getBondsList: (queryClient: QueryClient) => Promise<Record<ChainId, BillsConfig[]>>;
@@ -1,22 +1,41 @@
1
- import { useQueryClient, useQuery } from '@tanstack/react-query';
1
+ import { useQuery } from '@tanstack/react-query';
2
2
  import { QUERY_KEYS } from '../../config/constants/queryKeys.js';
3
3
  import axios from 'axios';
4
+ import { BillVersion } from '@ape.swap/apeswap-lists';
5
+ import { ACF_TO_ABOND } from '../../config/constants/addresses.js';
4
6
 
5
7
  function useBondsList() {
6
- const queryClient = useQueryClient();
7
8
  return useQuery({
8
9
  queryKey: [QUERY_KEYS.BONDS_LIST],
9
- queryFn: () => getBondsList(queryClient),
10
+ queryFn: ({ client }) => getBondsList(client),
10
11
  staleTime: Infinity,
11
- refetchInterval: 300000, // 5 min
12
+ refetchInterval: 600000, // 10 min
12
13
  refetchOnWindowFocus: false,
13
14
  });
14
15
  }
15
16
  const getBondsList = async (queryClient) => {
16
- const { urls, customBranch } = queryClient?.getQueryData([QUERY_KEYS.SDK_CONFIG]);
17
+ const { urls, customBranch, chains } = queryClient?.getQueryData([QUERY_KEYS.SDK_CONFIG]);
17
18
  const realTimeApiURL = urls['realTimeApi'];
18
19
  const response = await axios.get(`${realTimeApiURL}/utils/bonds${customBranch ? `?branch=${customBranch}` : ''}`);
19
- return response.data;
20
+ const bondList = response.data;
21
+ return bondList.reduce((acc, bond) => {
22
+ // Exclude ACF to ABOND bonds, fixed price bonds, and migration bonds
23
+ if (bond.contractAddress[bond.chainId]?.toLowerCase() === ACF_TO_ABOND.toLowerCase() ||
24
+ bond.billVersion === BillVersion.FixedPrice ||
25
+ bond.billType === 'migration') {
26
+ return acc;
27
+ }
28
+ // Only process bonds that belong to the chains selected by the user
29
+ if (chains.includes(bond.chainId)) {
30
+ // Initialize acc[bond.chainId] if it doesn't exist yet
31
+ if (!acc[bond.chainId]) {
32
+ acc[bond.chainId] = [];
33
+ }
34
+ // Safely push the bond to the array
35
+ acc[bond.chainId].push(bond);
36
+ }
37
+ return acc;
38
+ }, {});
20
39
  };
21
40
 
22
41
  export { useBondsList as default, getBondsList };
@@ -1 +1 @@
1
- {"version":3,"file":"useBondsList.js","sources":["../../../src/state/bonds/useBondsList.ts"],"sourcesContent":["import { QueryClient, useQuery, useQueryClient, UseQueryResult } from '@tanstack/react-query'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport axios from 'axios'\nimport { BillsConfig } from '@ape.swap/apeswap-lists'\nimport { SDKProps } from '../useSDKConfig'\n\nexport default function useBondsList(): UseQueryResult<BillsConfig[]> {\n const queryClient = useQueryClient()\n return useQuery({\n queryKey: [QUERY_KEYS.BONDS_LIST],\n queryFn: () => getBondsList(queryClient),\n staleTime: Infinity,\n refetchInterval: 300000, // 5 min\n refetchOnWindowFocus: false,\n })\n}\n\nexport const getBondsList = async (queryClient: QueryClient): Promise<BillsConfig[]> => {\n const { urls, customBranch } = queryClient?.getQueryData([QUERY_KEYS.SDK_CONFIG]) as SDKProps\n const realTimeApiURL = urls['realTimeApi']\n\n const response = await axios.get(`${realTimeApiURL}/utils/bonds${customBranch ? `?branch=${customBranch}` : ''}`)\n return response.data\n}\n"],"names":[],"mappings":";;;;AAMc,SAAU,YAAY,GAAA;AAClC,IAAA,MAAM,WAAW,GAAG,cAAc,EAAE;AACpC,IAAA,OAAO,QAAQ,CAAC;AACd,QAAA,QAAQ,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;AACjC,QAAA,OAAO,EAAE,MAAM,YAAY,CAAC,WAAW,CAAC;AACxC,QAAA,SAAS,EAAE,QAAQ;QACnB,eAAe,EAAE,MAAM;AACvB,QAAA,oBAAoB,EAAE,KAAK;AAC5B,KAAA,CAAC;AACJ;MAEa,YAAY,GAAG,OAAO,WAAwB,KAA4B;AACrF,IAAA,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,WAAW,EAAE,YAAY,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAa;AAC7F,IAAA,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC;IAE1C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA,EAAG,cAAc,CAAA,YAAA,EAAe,YAAY,GAAG,CAAA,QAAA,EAAW,YAAY,CAAA,CAAE,GAAG,EAAE,CAAA,CAAE,CAAC;IACjH,OAAO,QAAQ,CAAC,IAAI;AACtB;;;;"}
1
+ {"version":3,"file":"useBondsList.js","sources":["../../../src/state/bonds/useBondsList.ts"],"sourcesContent":["import { QueryClient, useQuery, UseQueryResult } from '@tanstack/react-query'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport axios from 'axios'\nimport { BillsConfig, BillVersion, ChainId } from '@ape.swap/apeswap-lists'\nimport { SDKProps } from '../useSDKConfig'\nimport { ACF_TO_ABOND } from '../../config/constants/addresses'\n\nexport default function useBondsList(): UseQueryResult<Record<ChainId, BillsConfig[]>> {\n return useQuery({\n queryKey: [QUERY_KEYS.BONDS_LIST],\n queryFn: ({ client }) => getBondsList(client),\n staleTime: Infinity,\n refetchInterval: 600000, // 10 min\n refetchOnWindowFocus: false,\n })\n}\n\nexport const getBondsList = async (queryClient: QueryClient): Promise<Record<ChainId, BillsConfig[]>> => {\n const { urls, customBranch, chains } = queryClient?.getQueryData([QUERY_KEYS.SDK_CONFIG]) as SDKProps\n const realTimeApiURL = urls['realTimeApi']\n\n const response = await axios.get(`${realTimeApiURL}/utils/bonds${customBranch ? `?branch=${customBranch}` : ''}`)\n const bondList: BillsConfig[] = response.data\n return 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 chains selected by the user\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"],"names":[],"mappings":";;;;;;AAOc,SAAU,YAAY,GAAA;AAClC,IAAA,OAAO,QAAQ,CAAC;AACd,QAAA,QAAQ,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;QACjC,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,YAAY,CAAC,MAAM,CAAC;AAC7C,QAAA,SAAS,EAAE,QAAQ;QACnB,eAAe,EAAE,MAAM;AACvB,QAAA,oBAAoB,EAAE,KAAK;AAC5B,KAAA,CAAC;AACJ;MAEa,YAAY,GAAG,OAAO,WAAwB,KAA6C;AACtG,IAAA,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE,YAAY,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAa;AACrG,IAAA,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC;IAE1C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA,EAAG,cAAc,CAAA,YAAA,EAAe,YAAY,GAAG,CAAA,QAAA,EAAW,YAAY,CAAA,CAAE,GAAG,EAAE,CAAA,CAAE,CAAC;AACjH,IAAA,MAAM,QAAQ,GAAkB,QAAQ,CAAC,IAAI;IAC7C,OAAO,QAAQ,CAAC,MAAM,CACpB,CAAC,GAAG,EAAE,IAAI,KAAI;;AAEZ,QAAA,IACE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,KAAK,YAAY,CAAC,WAAW,EAAE;AAChF,YAAA,IAAI,CAAC,WAAW,KAAK,WAAW,CAAC,UAAU;AAC3C,YAAA,IAAI,CAAC,QAAQ,KAAK,WAAW,EAC7B;AACA,YAAA,OAAO,GAAG;QACZ;;QAGA,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;;YAEjC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AACtB,gBAAA,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;YACxB;;YAGA,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC9B;AACA,QAAA,OAAO,GAAG;IACZ,CAAC,EACD,EAAmC,CACpC;AACH;;;;"}
@@ -1,5 +1,5 @@
1
1
  import { QueryClient, UseQueryResult } from '@tanstack/react-query';
2
- import { BillsConfig } from '@ape.swap/apeswap-lists';
2
+ import { BillsConfig, ChainId } from '@ape.swap/apeswap-lists';
3
3
  import { UserBill } from '../../types/yourbonds';
4
4
  export default function useUserBonds(): UseQueryResult<UserBill[]>;
5
- export declare const getUserBonds: (account: string, solanaAccount: string, aptosAccount: string, suiAccount: string, bondList: BillsConfig[], queryClient: QueryClient) => Promise<UserBill[]>;
5
+ export declare const getUserBonds: (account: string, solanaAccount: string, aptosAccount: string, suiAccount: string, bondList: Record<ChainId, BillsConfig[]>, queryClient: QueryClient) => Promise<UserBill[]>;
@@ -1,9 +1,8 @@
1
- import { useQueryClient, useQuery } from '@tanstack/react-query';
1
+ import { useQuery } from '@tanstack/react-query';
2
2
  import { QUERY_KEYS } from '../../config/constants/queryKeys.js';
3
- import { BillVersion, ChainId } from '@ape.swap/apeswap-lists';
3
+ import { ChainId } from '@ape.swap/apeswap-lists';
4
4
  import useBondsList from './useBondsList.js';
5
5
  import useTokenPrices from '../tokenPrices/useTokenPrices.js';
6
- import { ACF_TO_ABOND } from '../../config/constants/addresses.js';
7
6
  import { reportError } from '../../utils/reportError.js';
8
7
  import useEVMAccount from '../../hooks/accounts/useEVMAccount.js';
9
8
  import useSOLAccount from '../../hooks/accounts/useSOLAccount.js';
@@ -24,7 +23,6 @@ function useUserBonds() {
24
23
  const { address: addressAptos } = useAPTAccount();
25
24
  const { address: addressSUI } = useSUIAccount();
26
25
  const { data: tokenPrices } = useTokenPrices();
27
- const queryClient = useQueryClient();
28
26
  return useQuery({
29
27
  queryKey: [
30
28
  QUERY_KEYS.USER_BONDS,
@@ -34,7 +32,7 @@ function useUserBonds() {
34
32
  addressSUI,
35
33
  Object.keys(tokenPrices ?? {})?.length ?? null,
36
34
  ],
37
- queryFn: () => getUserBonds(addressEVM, addressSOL, addressAptos, addressSUI, bondList, queryClient),
35
+ queryFn: ({ client }) => getUserBonds(addressEVM, addressSOL, addressAptos, addressSUI, bondList, client),
38
36
  enabled: !!bondList && !!(addressEVM || addressSOL || addressAptos || addressSUI) && !!tokenPrices,
39
37
  refetchInterval: 120000,
40
38
  refetchOnWindowFocus: false,
@@ -48,38 +46,20 @@ const getUserBonds = async (account, solanaAccount, aptosAccount, suiAccount, bo
48
46
  const apiUrl = urls['apiV2'];
49
47
  const tokenPrices = queryClient?.getQueryData([QUERY_KEYS.TOKEN_PRICES]);
50
48
  try {
51
- const bondsByChain = bondList.reduce((acc, bond) => {
52
- // Exclude ACF to ABOND bonds, fixed price bonds, and migration bonds
53
- if (bond.contractAddress[bond.chainId]?.toLowerCase() === ACF_TO_ABOND.toLowerCase() ||
54
- bond.billVersion === BillVersion.FixedPrice ||
55
- bond.billType === 'migration') {
56
- return acc;
57
- }
58
- // Only process bonds that belong to the specified chains
59
- if (chains.includes(bond.chainId)) {
60
- // Initialize acc[bond.chainId] if it doesn't exist yet
61
- if (!acc[bond.chainId]) {
62
- acc[bond.chainId] = [];
63
- }
64
- // Safely push the bond to the array
65
- acc[bond.chainId].push(bond);
66
- }
67
- return acc;
68
- }, {});
69
49
  const results = await Promise.allSettled(chains
70
- .filter((chain) => bondsByChain[chain])
50
+ .filter((chain) => bondList[chain])
71
51
  .map((chain) => {
72
52
  if (chain === ChainId.SOL) {
73
- return fetchUsersBondsSOL(solanaAccount, bondsByChain[chain], tokenPrices);
53
+ return fetchUsersBondsSOL(solanaAccount, bondList[chain], tokenPrices);
74
54
  }
75
55
  else if (chain === ChainId.APTOS) {
76
- return fetchUsersBondsAptos(aptosAccount, bondsByChain[chain], tokenPrices);
56
+ return fetchUsersBondsAptos(aptosAccount, bondList[chain], tokenPrices);
77
57
  }
78
58
  else if (chain === ChainId.SUI) {
79
- return fetchUsersBondsSUI(suiAccount, bondsByChain[chain], tokenPrices);
59
+ return fetchUsersBondsSUI(suiAccount, bondList[chain], tokenPrices);
80
60
  }
81
61
  else
82
- return fetchUsersBondsEVM(chain, account, bondsByChain[chain], tokenPrices);
62
+ return fetchUsersBondsEVM(chain, account, bondList[chain], tokenPrices);
83
63
  }));
84
64
  // Filter out only fulfilled promises
85
65
  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 { 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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"}
1
+ {"version":3,"file":"useUserBonds.js","sources":["../../../src/state/bonds/useUserBonds.ts"],"sourcesContent":["import { QueryClient, useQuery, UseQueryResult } from '@tanstack/react-query'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport { BillsConfig, ChainId } 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 { 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 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: ({ client }) => getUserBonds(addressEVM!, addressSOL!, addressAptos!, addressSUI!, bondList!, client),\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: Record<ChainId, 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 results = await Promise.allSettled(\n chains\n .filter((chain: ChainId) => bondList[chain])\n .map((chain: ChainId) => {\n if (chain === ChainId.SOL) {\n return fetchUsersBondsSOL(solanaAccount, bondList[chain], tokenPrices)\n } else if (chain === ChainId.APTOS) {\n return fetchUsersBondsAptos(aptosAccount, bondList[chain], tokenPrices)\n } else if (chain === ChainId.SUI) {\n return fetchUsersBondsSUI(suiAccount, bondList[chain], tokenPrices)\n } else return fetchUsersBondsEVM(chain, account, bondList[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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"}
@@ -1,11 +1,10 @@
1
- import { useQueryClient, useQuery } from '@tanstack/react-query';
1
+ import { useQuery } from '@tanstack/react-query';
2
2
  import { QUERY_KEYS } from '../../config/constants/queryKeys.js';
3
3
 
4
4
  function useHistoricalPrice(cgId) {
5
- const queryClient = useQueryClient();
6
5
  return useQuery({
7
6
  queryKey: [QUERY_KEYS.HISTORICAL_PRICE, cgId || ''],
8
- queryFn: () => getHistoricalPrice(cgId, queryClient),
7
+ queryFn: ({ client }) => getHistoricalPrice(cgId, client),
9
8
  refetchOnWindowFocus: false,
10
9
  refetchInterval: 300000,
11
10
  enabled: !!cgId,
@@ -1 +1 @@
1
- {"version":3,"file":"useHistoricalPrice.js","sources":["../../../src/state/historicalPrice/useHistoricalPrice.ts"],"sourcesContent":["import { QueryClient, useQuery, useQueryClient, UseQueryResult } from '@tanstack/react-query'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport { HistoricalPrices } from '../../views/ProjectView/ProjectView'\nimport { SDKProps } from '../useSDKConfig'\n\nexport default function useHistoricalPrice(cgId?: string): UseQueryResult<HistoricalPrices[]> {\n const queryClient = useQueryClient()\n return useQuery({\n queryKey: [QUERY_KEYS.HISTORICAL_PRICE, cgId || ''],\n queryFn: () => getHistoricalPrice(cgId, queryClient),\n refetchOnWindowFocus: false,\n refetchInterval: 300000,\n enabled: !!cgId,\n retry: 0,\n })\n}\n\nexport const getHistoricalPrice = async (cgId?: string, queryClient?: QueryClient): Promise<HistoricalPrices[]> => {\n const { urls } = queryClient?.getQueryData([QUERY_KEYS.SDK_CONFIG]) as SDKProps\n const apiUrl = urls['apiV2']\n if (!cgId) return []\n const res = await fetch(`${apiUrl}/stats/historical-prices?cgId=${cgId}`)\n const data = await res.json()\n return data\n}\n"],"names":[],"mappings":";;;AAKc,SAAU,kBAAkB,CAAC,IAAa,EAAA;AACtD,IAAA,MAAM,WAAW,GAAG,cAAc,EAAE;AACpC,IAAA,OAAO,QAAQ,CAAC;QACd,QAAQ,EAAE,CAAC,UAAU,CAAC,gBAAgB,EAAE,IAAI,IAAI,EAAE,CAAC;QACnD,OAAO,EAAE,MAAM,kBAAkB,CAAC,IAAI,EAAE,WAAW,CAAC;AACpD,QAAA,oBAAoB,EAAE,KAAK;AAC3B,QAAA,eAAe,EAAE,MAAM;QACvB,OAAO,EAAE,CAAC,CAAC,IAAI;AACf,QAAA,KAAK,EAAE,CAAC;AACT,KAAA,CAAC;AACJ;AAEO,MAAM,kBAAkB,GAAG,OAAO,IAAa,EAAE,WAAyB,KAAiC;AAChH,IAAA,MAAM,EAAE,IAAI,EAAE,GAAG,WAAW,EAAE,YAAY,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAa;AAC/E,IAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;AAC5B,IAAA,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,EAAE;IACpB,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,8BAAA,EAAiC,IAAI,CAAA,CAAE,CAAC;AACzE,IAAA,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE;AAC7B,IAAA,OAAO,IAAI;AACb;;;;"}
1
+ {"version":3,"file":"useHistoricalPrice.js","sources":["../../../src/state/historicalPrice/useHistoricalPrice.ts"],"sourcesContent":["import { QueryClient, useQuery, UseQueryResult } from '@tanstack/react-query'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport { HistoricalPrices } from '../../views/ProjectView/ProjectView'\nimport { SDKProps } from '../useSDKConfig'\n\nexport default function useHistoricalPrice(cgId?: string): UseQueryResult<HistoricalPrices[]> {\n return useQuery({\n queryKey: [QUERY_KEYS.HISTORICAL_PRICE, cgId || ''],\n queryFn: ({ client }) => getHistoricalPrice(cgId, client),\n refetchOnWindowFocus: false,\n refetchInterval: 300000,\n enabled: !!cgId,\n retry: 0,\n })\n}\n\nexport const getHistoricalPrice = async (cgId?: string, queryClient?: QueryClient): Promise<HistoricalPrices[]> => {\n const { urls } = queryClient?.getQueryData([QUERY_KEYS.SDK_CONFIG]) as SDKProps\n const apiUrl = urls['apiV2']\n if (!cgId) return []\n const res = await fetch(`${apiUrl}/stats/historical-prices?cgId=${cgId}`)\n const data = await res.json()\n return data\n}\n"],"names":[],"mappings":";;;AAKc,SAAU,kBAAkB,CAAC,IAAa,EAAA;AACtD,IAAA,OAAO,QAAQ,CAAC;QACd,QAAQ,EAAE,CAAC,UAAU,CAAC,gBAAgB,EAAE,IAAI,IAAI,EAAE,CAAC;AACnD,QAAA,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC;AACzD,QAAA,oBAAoB,EAAE,KAAK;AAC3B,QAAA,eAAe,EAAE,MAAM;QACvB,OAAO,EAAE,CAAC,CAAC,IAAI;AACf,QAAA,KAAK,EAAE,CAAC;AACT,KAAA,CAAC;AACJ;AAEO,MAAM,kBAAkB,GAAG,OAAO,IAAa,EAAE,WAAyB,KAAiC;AAChH,IAAA,MAAM,EAAE,IAAI,EAAE,GAAG,WAAW,EAAE,YAAY,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAa;AAC/E,IAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;AAC5B,IAAA,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,EAAE;IACpB,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,8BAAA,EAAiC,IAAI,CAAA,CAAE,CAAC;AACzE,IAAA,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE;AAC7B,IAAA,OAAO,IAAI;AACb;;;;"}
@@ -43,7 +43,7 @@ const Bonds = () => {
43
43
  if (filterOption === 'SOLD OUT') {
44
44
  if (!allBonds || !allPreBonds)
45
45
  return {};
46
- bondsToUse = [...allPreBonds, ...allBonds];
46
+ bondsToUse = [...allPreBonds, ...Object.values(allBonds).flat()];
47
47
  }
48
48
  else {
49
49
  bondsToUse = sortBonds(sortConfig, bondData);
@@ -1 +1 @@
1
- {"version":3,"file":"Bonds.js","sources":["../../../src/views/Bonds/Bonds.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react'\nimport { BondsData } from '../../types/bonds'\nimport { useTopTags } from '../../hooks/useTopTags'\nimport { isBondSoldOut, isBondSupported, sortBonds } from './utils'\nimport useBondsData from '../../state/bonds/useBondsData'\nimport CheckURL from './components/CheckURL'\nimport PlaceholderMonkey from '../../components/PlaceholderMonkey'\nimport useFavoriteTokens from '../../state/favoriteTokens/useFavoriteTokens'\nimport useChainFilterOption from '../../state/chainFilterOption/useChainFilterOption'\nimport useBondsList from '../../state/bonds/useBondsList'\nimport { BaseBondConfig } from '@ape.swap/apeswap-lists'\nimport RecommendationCards from './components/RecommendationCards'\nimport BondsMenu from './components/BondsMenu/BondsMenu'\nimport { useSDKConfig } from '../../state/useSDKConfig'\nimport BuyAgainRow from './components/BuyAgainRow'\nimport LoadingSkeleton from './components/LoadingSkeleton/LoadingSkeleton'\nimport useHotBonds from '../../state/hotBonds/useHotBonds'\nimport useBondsListPreTGE from '../../state/bonds/useBondsListPreTGE'\nimport { MAINNET_CHAINS } from '../../config/constants/chains'\nimport ActiveBondRows from './components/BondRows/ActiveBondRows'\nimport SoldOutRows from './components/BondRows/SoldOutRows'\nimport Flex from '../../components/uikit-sdk/Flex'\nimport StarFilled from '../../components/uikit-sdk/Svg/Icons/StarFilled'\n\ntype SortableKeys = 'bonus' | 'arr' | 'terms' | 'tokensRemaining'\ntype SortDirection = 'asc' | 'desc'\n\nexport interface SortOptions {\n key: SortableKeys\n direction: SortDirection\n}\n\nexport type GroupedByChain = Record<number, (BondsData | BaseBondConfig)[]>\nexport type GroupedBySymbol = Record<number, Record<string, (BondsData | BaseBondConfig)[]>>\n\nconst Bonds = () => {\n // Fetch data\n useHotBonds()\n const SDKConfig = useSDKConfig()\n const { favTokens } = useFavoriteTokens()\n const { data: bondData } = useBondsData()\n const { data: allBonds } = useBondsList()\n const { data: allPreBonds } = useBondsListPreTGE()\n const { data: chainFilterOption, setChainFilterOption } = useChainFilterOption()\n const topTags = useTopTags()\n\n // State\n const [sortConfig, setSortConfig] = useState<SortOptions | undefined>({ key: 'bonus', direction: 'desc' })\n const [searchQuery, setSearchQuery] = useState('')\n const [filterOption, setFilterOption] = useState('ALL')\n\n // Static data\n const filterOptions = ['ALL', 'FAVORITES', ...topTags, 'SOLD OUT']\n const validatedChains = SDKConfig?.chains?.filter((chain) => MAINNET_CHAINS.includes(chain))\n\n const billsToRender: GroupedByChain | GroupedBySymbol = useMemo(() => {\n let bondsToUse\n\n if (filterOption === 'SOLD OUT') {\n if (!allBonds || !allPreBonds) return {}\n bondsToUse = [...allPreBonds, ...allBonds]\n } else {\n bondsToUse = sortBonds(sortConfig, bondData)\n }\n\n const filteredBonds = bondsToUse?.filter((bill) => {\n // filter incompatible bonds\n if (!isBondSupported(SDKConfig.highestCompatibleVersion!, bill.version)) return false\n\n // filter onlyPartner Bonds\n if (bill.onlyPartner && SDKConfig.bondPartner !== bill.bondPartner) return false\n\n // filter searchQuery\n if (searchQuery) {\n const matchesSearch = [\n //@ts-ignore\n `${bill?.underlyingEarnToken?.symbol?.toUpperCase()}`,\n `${bill?.earnToken?.symbol.toUpperCase()}`,\n `${bill?.lpToken?.symbol.toUpperCase()}`,\n ].some((property) => property?.includes(searchQuery.toUpperCase()))\n if (!matchesSearch) return false\n }\n\n // filter tiers\n if (!SDKConfig?.useTiers && 'minTier' in bill) {\n if (bill.minTier !== null && bill.minTier !== undefined) return false\n }\n\n // filter bondPartner\n if (SDKConfig?.bondPartner && bill.bondPartner !== SDKConfig.bondPartner) return false\n\n // filter topTags\n if (topTags.includes(filterOption) && !bill?.tags?.includes(filterOption)) return false\n\n // filter chainFilterOption\n if (chainFilterOption && !chainFilterOption?.includes('All Chains')) {\n if (!chainFilterOption?.includes(bill?.chainId?.toString())) return false\n }\n\n // filter SOLD OUT\n if (filterOption === 'SOLD OUT' && !isBondSoldOut(bill as BondsData, SDKConfig.showLowValueBonds)) return false\n\n // filter not SOLD OUT\n if (filterOption !== 'SOLD OUT' && isBondSoldOut(bill as BondsData, SDKConfig.showLowValueBonds)) return false\n\n // filter FAVORITES\n if (filterOption === 'FAVORITES' && !favTokens.includes(bill?.earnToken?.symbol?.toLowerCase())) return false\n\n return true\n })\n\n if (filterOption === 'SOLD OUT') {\n return filteredBonds?.reduce<GroupedBySymbol>((acc, bond) => {\n const symbol = bond?.earnToken?.symbol\n const chainId = bond.chainId\n\n if (!acc[chainId]) acc[chainId] = {}\n\n if (!acc[chainId][symbol]) acc[chainId][symbol] = []\n\n acc[chainId][symbol].push(bond)\n return acc\n }, {})\n } else {\n return filteredBonds?.reduce<GroupedByChain>((acc, bond) => {\n const { chainId } = bond\n if (!acc[chainId]) acc[chainId] = []\n acc[chainId].push(bond)\n return acc\n }, {})\n }\n }, [\n allBonds,\n allPreBonds,\n sortConfig,\n bondData,\n filterOption,\n SDKConfig.highestCompatibleVersion,\n SDKConfig.bondPartner,\n SDKConfig?.useTiers,\n SDKConfig.showLowValueBonds,\n searchQuery,\n topTags,\n chainFilterOption,\n favTokens,\n ])\n\n // Handlers\n const handleSortOptions = useCallback(\n (key: SortableKeys) => {\n let direction: SortDirection = 'desc'\n if (sortConfig?.key === key && sortConfig?.direction === 'desc') {\n direction = 'asc'\n }\n setSortConfig({ key, direction })\n },\n [sortConfig?.key, sortConfig?.direction],\n )\n\n const handleChangeFilterOption = useCallback((newOption: string) => {\n setFilterOption(newOption)\n }, [])\n\n useEffect(() => {\n const hash = window.location.hash\n //@ts-ignore\n if (bondData?.length > 0 && hash) {\n const tryScroll = () => {\n const normalizedHash = decodeURIComponent(hash).replace(/\\s+/g, '')\n const element = document.querySelector(normalizedHash)\n if (element) {\n const y = element.getBoundingClientRect().top + window.scrollY - 70\n window.scrollTo({ top: y, behavior: 'smooth' })\n } else {\n setTimeout(tryScroll, 50)\n }\n }\n tryScroll()\n }\n }, [bondData?.length])\n\n return (\n <Flex className=\"bonds-container\">\n <CheckURL />\n <BondsMenu\n searchQuery={searchQuery}\n setSearchQuery={setSearchQuery}\n setChainFilterOption={setChainFilterOption}\n chainFilterOption={chainFilterOption ?? ['All Chains']}\n filterOptions={filterOptions}\n filterOption={filterOption}\n setFilterOption={handleChangeFilterOption}\n onSort={handleSortOptions}\n />\n {SDKConfig.useHotBonds && !SDKConfig.bondPartner && filterOption !== 'SOLD OUT' && <BuyAgainRow />}\n {Object.keys(billsToRender)?.length > 0 ? (\n <Flex className=\"bondrowsbychain\">\n {validatedChains?.map((chain) =>\n filterOption === 'SOLD OUT' ? (\n Object.entries(billsToRender[chain] ?? {}).map((groupedBonds) => (\n <SoldOutRows bonds={groupedBonds[1]} key={groupedBonds[0]} />\n ))\n ) : (\n <ActiveBondRows\n chain={chain}\n bonds={(billsToRender[chain] ?? []) as (BondsData | BaseBondConfig)[]}\n key={chain}\n hideTitles={searchQuery !== ''}\n showHotBonds={!searchQuery && SDKConfig.useHotBonds && SDKConfig?.hotBondChains?.includes(chain)}\n />\n ),\n )}\n </Flex>\n ) : searchQuery || !chainFilterOption.includes('All Chains') ? (\n <Flex className=\"placeholder-monkey-wrapper\">\n <PlaceholderMonkey text={'No results, change filters.'} />\n </Flex>\n ) : filterOption === 'FAVORITES' ? (\n <Flex\n sx={{\n width: '100%',\n height: '300px',\n background: 'white2',\n borderRadius: 'normal',\n justifyContent: 'center',\n alignItems: 'center',\n flexDirection: 'column',\n mt: '10px',\n }}\n >\n <StarFilled width={75} height={75} />\n <Flex sx={{ mt: '10px' }}>{`You don't have any Favorite Bonds yet!`}</Flex>\n <Flex sx={{ fontSize: '12px', fontWeight: 400, color: 'textDisabledButton', mt: '10px' }}>\n {`Click on the 'star' or 'fire' icon to add Bonds to the list.`}\n </Flex>\n </Flex>\n ) : (\n <LoadingSkeleton />\n )}\n {SDKConfig.useHotBonds && <RecommendationCards />}\n <Flex sx={{ width: '100%', justifyContent: 'center', my: '15px' }} className=\"powered-by-apebond\">\n <img\n src=\"https://res.cloudinary.com/dswmrqgwy/image/upload/v1741643990/poweredbyapebondsdk_cxiouj.png\"\n alt=\"powered-by-apebond\"\n style={{ width: '200px', height: 'auto' }}\n />\n </Flex>\n </Flex>\n )\n}\n\nexport default Bonds\n"],"names":["_jsxs","_jsx","CheckURL"],"mappings":"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"}
1
+ {"version":3,"file":"Bonds.js","sources":["../../../src/views/Bonds/Bonds.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react'\nimport { BondsData } from '../../types/bonds'\nimport { useTopTags } from '../../hooks/useTopTags'\nimport { isBondSoldOut, isBondSupported, sortBonds } from './utils'\nimport useBondsData from '../../state/bonds/useBondsData'\nimport CheckURL from './components/CheckURL'\nimport PlaceholderMonkey from '../../components/PlaceholderMonkey'\nimport useFavoriteTokens from '../../state/favoriteTokens/useFavoriteTokens'\nimport useChainFilterOption from '../../state/chainFilterOption/useChainFilterOption'\nimport useBondsList from '../../state/bonds/useBondsList'\nimport { BaseBondConfig } from '@ape.swap/apeswap-lists'\nimport RecommendationCards from './components/RecommendationCards'\nimport BondsMenu from './components/BondsMenu/BondsMenu'\nimport { useSDKConfig } from '../../state/useSDKConfig'\nimport BuyAgainRow from './components/BuyAgainRow'\nimport LoadingSkeleton from './components/LoadingSkeleton/LoadingSkeleton'\nimport useHotBonds from '../../state/hotBonds/useHotBonds'\nimport useBondsListPreTGE from '../../state/bonds/useBondsListPreTGE'\nimport { MAINNET_CHAINS } from '../../config/constants/chains'\nimport ActiveBondRows from './components/BondRows/ActiveBondRows'\nimport SoldOutRows from './components/BondRows/SoldOutRows'\nimport Flex from '../../components/uikit-sdk/Flex'\nimport StarFilled from '../../components/uikit-sdk/Svg/Icons/StarFilled'\n\ntype SortableKeys = 'bonus' | 'arr' | 'terms' | 'tokensRemaining'\ntype SortDirection = 'asc' | 'desc'\n\nexport interface SortOptions {\n key: SortableKeys\n direction: SortDirection\n}\n\nexport type GroupedByChain = Record<number, (BondsData | BaseBondConfig)[]>\nexport type GroupedBySymbol = Record<number, Record<string, (BondsData | BaseBondConfig)[]>>\n\nconst Bonds = () => {\n // Fetch data\n useHotBonds()\n const SDKConfig = useSDKConfig()\n const { favTokens } = useFavoriteTokens()\n const { data: bondData } = useBondsData()\n const { data: allBonds } = useBondsList()\n const { data: allPreBonds } = useBondsListPreTGE()\n const { data: chainFilterOption, setChainFilterOption } = useChainFilterOption()\n const topTags = useTopTags()\n\n // State\n const [sortConfig, setSortConfig] = useState<SortOptions | undefined>({ key: 'bonus', direction: 'desc' })\n const [searchQuery, setSearchQuery] = useState('')\n const [filterOption, setFilterOption] = useState('ALL')\n\n // Static data\n const filterOptions = ['ALL', 'FAVORITES', ...topTags, 'SOLD OUT']\n const validatedChains = SDKConfig?.chains?.filter((chain) => MAINNET_CHAINS.includes(chain))\n\n const billsToRender: GroupedByChain | GroupedBySymbol = useMemo(() => {\n let bondsToUse\n\n if (filterOption === 'SOLD OUT') {\n if (!allBonds || !allPreBonds) return {}\n bondsToUse = [...allPreBonds, ...Object.values(allBonds).flat()]\n } else {\n bondsToUse = sortBonds(sortConfig, bondData)\n }\n\n const filteredBonds = bondsToUse?.filter((bill) => {\n // filter incompatible bonds\n if (!isBondSupported(SDKConfig.highestCompatibleVersion!, bill.version)) return false\n\n // filter onlyPartner Bonds\n if (bill.onlyPartner && SDKConfig.bondPartner !== bill.bondPartner) return false\n\n // filter searchQuery\n if (searchQuery) {\n const matchesSearch = [\n //@ts-ignore\n `${bill?.underlyingEarnToken?.symbol?.toUpperCase()}`,\n `${bill?.earnToken?.symbol.toUpperCase()}`,\n `${bill?.lpToken?.symbol.toUpperCase()}`,\n ].some((property) => property?.includes(searchQuery.toUpperCase()))\n if (!matchesSearch) return false\n }\n\n // filter tiers\n if (!SDKConfig?.useTiers && 'minTier' in bill) {\n if (bill.minTier !== null && bill.minTier !== undefined) return false\n }\n\n // filter bondPartner\n if (SDKConfig?.bondPartner && bill.bondPartner !== SDKConfig.bondPartner) return false\n\n // filter topTags\n if (topTags.includes(filterOption) && !bill?.tags?.includes(filterOption)) return false\n\n // filter chainFilterOption\n if (chainFilterOption && !chainFilterOption?.includes('All Chains')) {\n if (!chainFilterOption?.includes(bill?.chainId?.toString())) return false\n }\n\n // filter SOLD OUT\n if (filterOption === 'SOLD OUT' && !isBondSoldOut(bill as BondsData, SDKConfig.showLowValueBonds)) return false\n\n // filter not SOLD OUT\n if (filterOption !== 'SOLD OUT' && isBondSoldOut(bill as BondsData, SDKConfig.showLowValueBonds)) return false\n\n // filter FAVORITES\n if (filterOption === 'FAVORITES' && !favTokens.includes(bill?.earnToken?.symbol?.toLowerCase())) return false\n\n return true\n })\n\n if (filterOption === 'SOLD OUT') {\n return filteredBonds?.reduce<GroupedBySymbol>((acc, bond) => {\n const symbol = bond?.earnToken?.symbol\n const chainId = bond.chainId\n\n if (!acc[chainId]) acc[chainId] = {}\n\n if (!acc[chainId][symbol]) acc[chainId][symbol] = []\n\n acc[chainId][symbol].push(bond)\n return acc\n }, {})\n } else {\n return filteredBonds?.reduce<GroupedByChain>((acc, bond) => {\n const { chainId } = bond\n if (!acc[chainId]) acc[chainId] = []\n acc[chainId].push(bond)\n return acc\n }, {})\n }\n }, [\n allBonds,\n allPreBonds,\n sortConfig,\n bondData,\n filterOption,\n SDKConfig.highestCompatibleVersion,\n SDKConfig.bondPartner,\n SDKConfig?.useTiers,\n SDKConfig.showLowValueBonds,\n searchQuery,\n topTags,\n chainFilterOption,\n favTokens,\n ])\n\n // Handlers\n const handleSortOptions = useCallback(\n (key: SortableKeys) => {\n let direction: SortDirection = 'desc'\n if (sortConfig?.key === key && sortConfig?.direction === 'desc') {\n direction = 'asc'\n }\n setSortConfig({ key, direction })\n },\n [sortConfig?.key, sortConfig?.direction],\n )\n\n const handleChangeFilterOption = useCallback((newOption: string) => {\n setFilterOption(newOption)\n }, [])\n\n useEffect(() => {\n const hash = window.location.hash\n //@ts-ignore\n if (bondData?.length > 0 && hash) {\n const tryScroll = () => {\n const normalizedHash = decodeURIComponent(hash).replace(/\\s+/g, '')\n const element = document.querySelector(normalizedHash)\n if (element) {\n const y = element.getBoundingClientRect().top + window.scrollY - 70\n window.scrollTo({ top: y, behavior: 'smooth' })\n } else {\n setTimeout(tryScroll, 50)\n }\n }\n tryScroll()\n }\n }, [bondData?.length])\n\n return (\n <Flex className=\"bonds-container\">\n <CheckURL />\n <BondsMenu\n searchQuery={searchQuery}\n setSearchQuery={setSearchQuery}\n setChainFilterOption={setChainFilterOption}\n chainFilterOption={chainFilterOption ?? ['All Chains']}\n filterOptions={filterOptions}\n filterOption={filterOption}\n setFilterOption={handleChangeFilterOption}\n onSort={handleSortOptions}\n />\n {SDKConfig.useHotBonds && !SDKConfig.bondPartner && filterOption !== 'SOLD OUT' && <BuyAgainRow />}\n {Object.keys(billsToRender)?.length > 0 ? (\n <Flex className=\"bondrowsbychain\">\n {validatedChains?.map((chain) =>\n filterOption === 'SOLD OUT' ? (\n Object.entries(billsToRender[chain] ?? {}).map((groupedBonds) => (\n <SoldOutRows bonds={groupedBonds[1]} key={groupedBonds[0]} />\n ))\n ) : (\n <ActiveBondRows\n chain={chain}\n bonds={(billsToRender[chain] ?? []) as (BondsData | BaseBondConfig)[]}\n key={chain}\n hideTitles={searchQuery !== ''}\n showHotBonds={!searchQuery && SDKConfig.useHotBonds && SDKConfig?.hotBondChains?.includes(chain)}\n />\n ),\n )}\n </Flex>\n ) : searchQuery || !chainFilterOption.includes('All Chains') ? (\n <Flex className=\"placeholder-monkey-wrapper\">\n <PlaceholderMonkey text={'No results, change filters.'} />\n </Flex>\n ) : filterOption === 'FAVORITES' ? (\n <Flex\n sx={{\n width: '100%',\n height: '300px',\n background: 'white2',\n borderRadius: 'normal',\n justifyContent: 'center',\n alignItems: 'center',\n flexDirection: 'column',\n mt: '10px',\n }}\n >\n <StarFilled width={75} height={75} />\n <Flex sx={{ mt: '10px' }}>{`You don't have any Favorite Bonds yet!`}</Flex>\n <Flex sx={{ fontSize: '12px', fontWeight: 400, color: 'textDisabledButton', mt: '10px' }}>\n {`Click on the 'star' or 'fire' icon to add Bonds to the list.`}\n </Flex>\n </Flex>\n ) : (\n <LoadingSkeleton />\n )}\n {SDKConfig.useHotBonds && <RecommendationCards />}\n <Flex sx={{ width: '100%', justifyContent: 'center', my: '15px' }} className=\"powered-by-apebond\">\n <img\n src=\"https://res.cloudinary.com/dswmrqgwy/image/upload/v1741643990/poweredbyapebondsdk_cxiouj.png\"\n alt=\"powered-by-apebond\"\n style={{ width: '200px', height: 'auto' }}\n />\n </Flex>\n </Flex>\n )\n}\n\nexport default Bonds\n"],"names":["_jsxs","_jsx","CheckURL"],"mappings":"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"}
@@ -1,7 +1,8 @@
1
1
  import React from 'react';
2
+ import { ChainId } from '@ape.swap/apeswap-lists';
2
3
  declare const ModalHandler: ({ onDismiss, bondAddress, bondChain, }: {
3
4
  onDismiss?: () => void;
4
5
  bondAddress: string;
5
- bondChain: number;
6
+ bondChain: ChainId;
6
7
  }) => React.JSX.Element;
7
8
  export default ModalHandler;
@@ -10,7 +10,6 @@ import useEVMAccount from '../../../../hooks/accounts/useEVMAccount.js';
10
10
  import useSOLAccount from '../../../../hooks/accounts/useSOLAccount.js';
11
11
  import useAPTAccount from '../../../../hooks/accounts/useAPTAccount.js';
12
12
  import useSUIAccount from '../../../../hooks/accounts/useSUIAccount.js';
13
- import useBondsList from '../../../../state/bonds/useBondsList.js';
14
13
  import { useQueryClient } from '@tanstack/react-query';
15
14
  import { QUERY_KEYS } from '../../../../config/constants/queryKeys.js';
16
15
 
@@ -36,7 +35,6 @@ const ModalHandler = ({ onDismiss, bondAddress, bondChain, }) => {
36
35
  const solanaAccount = publicKey?.toBase58();
37
36
  const { address: aptosAccount } = useAPTAccount();
38
37
  const { address: suiAccount } = useSUIAccount();
39
- const { data: bondList } = useBondsList();
40
38
  const queryClient = useQueryClient();
41
39
  // EVM - Look for billId on tx logs
42
40
  if (txReceipt) {
@@ -62,7 +60,7 @@ const ModalHandler = ({ onDismiss, bondAddress, bondChain, }) => {
62
60
  if (!hasRefetched.current) {
63
61
  if (billId) {
64
62
  console.log('Trigger user bonds refetch');
65
- const bondToRefetch = bondList?.find((bond) => bondAddress?.toLowerCase() === bond?.contractAddress?.[bond?.chainId]?.toLowerCase() &&
63
+ const bondToRefetch = bondsData?.find((bond) => bondAddress?.toLowerCase() === bond?.contractAddress?.[bond?.chainId]?.toLowerCase() &&
66
64
  bondChain === bond?.chainId);
67
65
  if (!bondToRefetch)
68
66
  return;
@@ -76,7 +74,7 @@ const ModalHandler = ({ onDismiss, bondAddress, bondChain, }) => {
76
74
  setUserBill(cachedBond);
77
75
  return;
78
76
  }
79
- getUserBonds(address, solanaAccount, aptosAccount, suiAccount, [bondToRefetch], queryClient)
77
+ getUserBonds(address, solanaAccount, aptosAccount, suiAccount, { [bondChain]: [bondToRefetch] }, queryClient)
80
78
  .then((bonds) => {
81
79
  const purchasedBond = bonds.find((bond) => {
82
80
  if (bond?.bond?.chainId === ChainId.SOL) {
@@ -1 +1 @@
1
- {"version":3,"file":"ModalHandler.js","sources":["../../../../../src/views/Bonds/components/BondRows/ModalHandler.tsx"],"sourcesContent":["import React, { useEffect, useState, useRef } from 'react'\nimport { getUserBonds } from '../../../../state/bonds/useUserBonds'\nimport YourBondsModal from '../../../YourBondsModal/YourBondsModal'\nimport BuyBondModal from '../../../BuyBond/BuyBondModal'\nimport { useMonitorTx } from '../../../../hooks/useMonitorTx'\nimport useBondsData from '../../../../state/bonds/useBondsData'\nimport { ChainId } from '@ape.swap/apeswap-lists'\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 useBondsList from '../../../../state/bonds/useBondsList'\nimport { useQueryClient } from '@tanstack/react-query'\nimport { UserBill } from '../../../../types/yourbonds'\nimport { QUERY_KEYS } from '../../../../config/constants/queryKeys'\n\n/*\n * Basically this is a handler that controls which Modal is displayed to the user.\n * It will start by showing the buy modal and if a user purchases a bond, a hash will be set, this will initially trigger\n * a monitor of the txhash and the search for a bill Id. Finally, if a billId is found the YourBondModal will be shown.\n * */\n\nconst ModalHandler = ({\n onDismiss,\n bondAddress,\n bondChain,\n}: {\n onDismiss?: () => void\n bondAddress: string\n bondChain: number\n}) => {\n // State\n const [billId, setBillId] = useState('')\n const [afterFlowData, setAfterFlowData] = useState<{ buyTxHash: string; lostProfit?: string }>({\n buyTxHash: '',\n lostProfit: undefined,\n })\n const [userBill, setUserBill] = useState<UserBill>()\n\n // Hooks\n const { data: bondsData } = useBondsData()\n const locationPath = window.location.pathname\n const { data: txReceipt } = useMonitorTx(afterFlowData.buyTxHash, bondChain)\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: bondList } = useBondsList()\n const queryClient = useQueryClient()\n\n // EVM - Look for billId on tx logs\n if (txReceipt) {\n try {\n const billNftAddress = bondsData?.find(\n (bond) =>\n bond?.contractAddress?.[bond.chainId]?.toLowerCase() === bondAddress?.toLowerCase() &&\n bond.chainId === bondChain,\n )?.billNnftAddress?.[bondChain as ChainId]\n const { logs } = txReceipt\n const findBillNftLog = logs.find((log: any) => log.address.toLowerCase() === billNftAddress?.toLowerCase())\n const getBillNftIndex = findBillNftLog?.topics[findBillNftLog.topics.length - 1] as string\n const convertHexId = parseInt(getBillNftIndex, 16)\n if (!billId) {\n console.log('set Bill id: ' + convertHexId.toString())\n setBillId(convertHexId.toString())\n }\n } catch (e) {\n console.log(e)\n }\n }\n\n // Trigger refetch once txs are confirmed\n const hasRefetched = useRef(false)\n useEffect(() => {\n if (!hasRefetched.current) {\n if (billId) {\n console.log('Trigger user bonds refetch')\n const bondToRefetch = bondList?.find(\n (bond) =>\n bondAddress?.toLowerCase() === bond?.contractAddress?.[bond?.chainId]?.toLowerCase() &&\n bondChain === bond?.chainId,\n )\n if (!bondToRefetch) return\n hasRefetched.current = true\n\n // Check cache first — if the bill is already in the cache (e.g. from\n // a recent refetch or optimistic update), skip the network round-trip.\n const cached = queryClient.getQueriesData<UserBill[] | undefined>({ queryKey: [QUERY_KEYS.USER_BONDS] })\n const cachedBills = cached.flatMap(([, bills]) => bills ?? [])\n const cachedBond = cachedBills.find((b) => b.id === billId)\n if (cachedBond) {\n setUserBill(cachedBond)\n return\n }\n\n getUserBonds(address!, solanaAccount!, aptosAccount!, suiAccount!, [bondToRefetch], queryClient)\n .then((bonds) => {\n const purchasedBond = bonds.find((bond) => {\n if (bond?.bond?.chainId === ChainId.SOL) {\n return bond.asset === billId\n } else if (bond?.bond?.chainId === ChainId.SUI) {\n return bond.id === billId\n } else {\n return bond.id === billId\n }\n })\n console.log(purchasedBond)\n if (!purchasedBond) {\n console.log(`No bond found for ${billId}`)\n }\n setUserBill(purchasedBond)\n })\n .catch((e) => {\n console.error(e)\n })\n }\n }\n /* eslint-disable react-hooks/exhaustive-deps */\n }, [billId])\n\n return billId ? (\n <YourBondsModal userBill={userBill} onDismiss={onDismiss} lostProfit={afterFlowData.lostProfit} />\n ) : (\n <BuyBondModal\n bondAddress={bondAddress}\n bondChain={bondChain}\n handlePurchasedBond={(data) => setAfterFlowData(data)}\n setBillId={setBillId}\n onDismiss={() => {\n window.history.pushState({}, '', `${locationPath !== '/bonds' ? locationPath : '/bonds'}`)\n onDismiss?.()\n }}\n />\n )\n}\n\nexport default ModalHandler\n"],"names":["_jsx"],"mappings":"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"}
1
+ {"version":3,"file":"ModalHandler.js","sources":["../../../../../src/views/Bonds/components/BondRows/ModalHandler.tsx"],"sourcesContent":["import React, { useEffect, useState, useRef } from 'react'\nimport { getUserBonds } from '../../../../state/bonds/useUserBonds'\nimport YourBondsModal from '../../../YourBondsModal/YourBondsModal'\nimport BuyBondModal from '../../../BuyBond/BuyBondModal'\nimport { useMonitorTx } from '../../../../hooks/useMonitorTx'\nimport useBondsData from '../../../../state/bonds/useBondsData'\nimport { BillsConfig, ChainId } from '@ape.swap/apeswap-lists'\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 { useQueryClient } from '@tanstack/react-query'\nimport { UserBill } from '../../../../types/yourbonds'\nimport { QUERY_KEYS } from '../../../../config/constants/queryKeys'\n\n/*\n * Basically this is a handler that controls which Modal is displayed to the user.\n * It will start by showing the buy modal and if a user purchases a bond, a hash will be set, this will initially trigger\n * a monitor of the txhash and the search for a bill Id. Finally, if a billId is found the YourBondModal will be shown.\n * */\n\nconst ModalHandler = ({\n onDismiss,\n bondAddress,\n bondChain,\n}: {\n onDismiss?: () => void\n bondAddress: string\n bondChain: ChainId\n}) => {\n // State\n const [billId, setBillId] = useState('')\n const [afterFlowData, setAfterFlowData] = useState<{ buyTxHash: string; lostProfit?: string }>({\n buyTxHash: '',\n lostProfit: undefined,\n })\n const [userBill, setUserBill] = useState<UserBill>()\n\n // Hooks\n const { data: bondsData } = useBondsData()\n const locationPath = window.location.pathname\n const { data: txReceipt } = useMonitorTx(afterFlowData.buyTxHash, bondChain)\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 queryClient = useQueryClient()\n\n // EVM - Look for billId on tx logs\n if (txReceipt) {\n try {\n const billNftAddress = bondsData?.find(\n (bond) =>\n bond?.contractAddress?.[bond.chainId]?.toLowerCase() === bondAddress?.toLowerCase() &&\n bond.chainId === bondChain,\n )?.billNnftAddress?.[bondChain]\n const { logs } = txReceipt\n const findBillNftLog = logs.find((log: any) => log.address.toLowerCase() === billNftAddress?.toLowerCase())\n const getBillNftIndex = findBillNftLog?.topics[findBillNftLog.topics.length - 1] as string\n const convertHexId = parseInt(getBillNftIndex, 16)\n if (!billId) {\n console.log('set Bill id: ' + convertHexId.toString())\n setBillId(convertHexId.toString())\n }\n } catch (e) {\n console.log(e)\n }\n }\n\n // Trigger refetch once txs are confirmed\n const hasRefetched = useRef(false)\n useEffect(() => {\n if (!hasRefetched.current) {\n if (billId) {\n console.log('Trigger user bonds refetch')\n const bondToRefetch = bondsData?.find(\n (bond) =>\n bondAddress?.toLowerCase() === bond?.contractAddress?.[bond?.chainId]?.toLowerCase() &&\n bondChain === bond?.chainId,\n )\n if (!bondToRefetch) return\n hasRefetched.current = true\n\n // Check cache first — if the bill is already in the cache (e.g. from\n // a recent refetch or optimistic update), skip the network round-trip.\n const cached = queryClient.getQueriesData<UserBill[] | undefined>({ queryKey: [QUERY_KEYS.USER_BONDS] })\n const cachedBills = cached.flatMap(([, bills]) => bills ?? [])\n const cachedBond = cachedBills.find((b) => b.id === billId)\n if (cachedBond) {\n setUserBill(cachedBond)\n return\n }\n\n getUserBonds(\n address!,\n solanaAccount!,\n aptosAccount!,\n suiAccount!,\n { [bondChain]: [bondToRefetch] } as Record<ChainId, BillsConfig[]>,\n queryClient,\n )\n .then((bonds) => {\n const purchasedBond = bonds.find((bond) => {\n if (bond?.bond?.chainId === ChainId.SOL) {\n return bond.asset === billId\n } else if (bond?.bond?.chainId === ChainId.SUI) {\n return bond.id === billId\n } else {\n return bond.id === billId\n }\n })\n console.log(purchasedBond)\n if (!purchasedBond) {\n console.log(`No bond found for ${billId}`)\n }\n setUserBill(purchasedBond)\n })\n .catch((e) => {\n console.error(e)\n })\n }\n }\n /* eslint-disable react-hooks/exhaustive-deps */\n }, [billId])\n\n return billId ? (\n <YourBondsModal userBill={userBill} onDismiss={onDismiss} lostProfit={afterFlowData.lostProfit} />\n ) : (\n <BuyBondModal\n bondAddress={bondAddress}\n bondChain={bondChain}\n handlePurchasedBond={(data) => setAfterFlowData(data)}\n setBillId={setBillId}\n onDismiss={() => {\n window.history.pushState({}, '', `${locationPath !== '/bonds' ? locationPath : '/bonds'}`)\n onDismiss?.()\n }}\n />\n )\n}\n\nexport default ModalHandler\n"],"names":["_jsx"],"mappings":"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"}
@@ -45,7 +45,7 @@ const ProjectView = ({ bondAddress, bondChain }) => {
45
45
  borderRadius: 'normal',
46
46
  width: ['100%', '100%', '100%', '50%'],
47
47
  mt: '5px',
48
- }, children: jsx(BuyComponent, { bondAddress: bondData?.contractAddress?.[bondData.chainId], bondChain: bondData.chainId, isProjectView: true }) }), jsx(PriceChart, { selectedBond: bondData, historicalPrices: historicalPrices })] }), jsx(Flex, { sx: { width: '100%', mt: '10px' }, children: jsx(ProjectInfo, { selectedBond2: bondData }) }), jsx(Flex, { sx: { width: '100%', mt: '10px' }, children: jsx(BondStats, { selectedBond: bondData }) }), jsx(Flex, { sx: { width: '100%', mt: '10px', mb: '50px' }, children: jsx(BondLeaderboard, { selectedBond: bondData }) })] }) })) : (jsx(Flex, { sx: { width: '100%', justifyContent: 'center', fontSize: '12px', fontWeight: 500 }, children: "Loading..." }))] }));
48
+ }, children: jsx(BuyComponent, { bondAddress: bondData?.contractAddress?.[bondData.chainId], bondChain: bondData.chainId, isProjectView: true }) }), jsx(PriceChart, { selectedBond: bondData, historicalPrices: historicalPrices })] }), jsx(Flex, { sx: { width: '100%', mt: '10px' }, children: jsx(ProjectInfo, { selectedBond: bondData }) }), jsx(Flex, { sx: { width: '100%', mt: '10px' }, children: jsx(BondStats, { selectedBond: bondData }) }), jsx(Flex, { sx: { width: '100%', mt: '10px', mb: '50px' }, children: jsx(BondLeaderboard, { selectedBond: bondData }) })] }) })) : (jsx(Flex, { sx: { width: '100%', justifyContent: 'center', fontSize: '12px', fontWeight: 500 }, children: "Loading..." }))] }));
49
49
  };
50
50
 
51
51
  export { ProjectView as default };
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectView.js","sources":["../../../src/views/ProjectView/ProjectView.tsx"],"sourcesContent":["import React, { useEffect } from 'react'\nimport useBondsData from '../../state/bonds/useBondsData'\nimport Flex from '../../components/uikit-sdk/Flex'\nimport { styles } from './styles'\nimport RecommendationCards from './components/RecommendationCards'\nimport NavPanel from './components/NavPanel'\nimport BondCards from '../BuyBond/components/BondCards/BondCards'\nimport ProjectInfo from './components/ProjectInfo'\nimport BondStats from './components/BondStats'\nimport BondLeaderboard from './components/BondLeaderboard'\nimport PriceChart from './components/PriceChart'\nimport BuyBond from '../BuyBond/BuyComponent'\nimport useTokenPrices from '../../state/tokenPrices/useTokenPrices'\nimport useHistoricalPrice from '../../state/historicalPrice/useHistoricalPrice'\n\nexport interface HistoricalPrices {\n timestamp: string\n open: number\n close: number\n}\n\nexport interface ProjectViewProps {\n bondAddress: string\n bondChain: string\n}\n\nconst ProjectView: React.FC<ProjectViewProps> = ({ bondAddress, bondChain }) => {\n // Hooks\n const { data: bonds, refetch } = useBondsData()\n const { data: tokenPrices } = useTokenPrices()\n const bondData = bonds?.find(\n (bond) =>\n bond?.contractAddress?.[bond.chainId]?.toLowerCase() === (bondAddress as string)?.toLowerCase() &&\n (bondChain as string) === bond.chainId.toString(),\n )\n\n const { data: historicalPrices } = useHistoricalPrice(bondData?.cgId)\n\n useEffect(() => {\n if ((bonds?.length ?? 0) > 0 && !bondData) {\n window.location.href = '/bonds'\n }\n })\n\n useEffect(() => {\n if (Object.keys(tokenPrices ?? {})?.length > 0 && bonds?.length === 0) {\n console.log('Found prices and no bonds, realtimeapi failed. Refetching bonds')\n refetch()\n }\n /* eslint-disable react-hooks/exhaustive-deps */\n }, [Object.keys(tokenPrices ?? {})?.length, bonds?.length, refetch])\n\n return (\n <Flex sx={styles.mainViewContainer}>\n <RecommendationCards />\n <NavPanel contractAddress={bondData?.contractAddress?.[bondData.chainId]} />\n {bondData && (\n <Flex\n sx={{\n width: '100%',\n mt: '10px',\n display: ['none', 'none', 'none', 'block'],\n '&& > div > div': {\n background: 'white2',\n },\n }}\n >\n <BondCards bondData={bondData} />\n </Flex>\n )}\n {bondData ? (\n <>\n <Flex sx={{ width: '100%', flexDirection: 'column', mt: '10px' }}>\n <Flex sx={{ width: '100%', flexDirection: ['column', 'column', 'column', 'row'], alignItems: 'stretch' }}>\n <Flex\n sx={{\n background: 'white2',\n borderRadius: 'normal',\n width: ['100%', '100%', '100%', '50%'],\n mt: '5px',\n }}\n >\n <BuyBond\n bondAddress={bondData?.contractAddress?.[bondData.chainId]}\n bondChain={bondData.chainId}\n isProjectView\n />\n </Flex>\n <PriceChart selectedBond={bondData} historicalPrices={historicalPrices} />\n </Flex>\n <Flex sx={{ width: '100%', mt: '10px' }}>\n <ProjectInfo selectedBond2={bondData} />\n </Flex>\n <Flex sx={{ width: '100%', mt: '10px' }}>\n <BondStats selectedBond={bondData} />\n </Flex>\n <Flex sx={{ width: '100%', mt: '10px', mb: '50px' }}>\n <BondLeaderboard selectedBond={bondData} />\n </Flex>\n </Flex>\n </>\n ) : (\n <Flex sx={{ width: '100%', justifyContent: 'center', fontSize: '12px', fontWeight: 500 }}>Loading...</Flex>\n )}\n </Flex>\n )\n}\n\nexport default ProjectView\n"],"names":["_jsxs","_jsx","_Fragment","BuyBond"],"mappings":"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"}
1
+ {"version":3,"file":"ProjectView.js","sources":["../../../src/views/ProjectView/ProjectView.tsx"],"sourcesContent":["import React, { useEffect } from 'react'\nimport useBondsData from '../../state/bonds/useBondsData'\nimport Flex from '../../components/uikit-sdk/Flex'\nimport { styles } from './styles'\nimport RecommendationCards from './components/RecommendationCards'\nimport NavPanel from './components/NavPanel'\nimport BondCards from '../BuyBond/components/BondCards/BondCards'\nimport ProjectInfo from './components/ProjectInfo'\nimport BondStats from './components/BondStats'\nimport BondLeaderboard from './components/BondLeaderboard'\nimport PriceChart from './components/PriceChart'\nimport BuyBond from '../BuyBond/BuyComponent'\nimport useTokenPrices from '../../state/tokenPrices/useTokenPrices'\nimport useHistoricalPrice from '../../state/historicalPrice/useHistoricalPrice'\n\nexport interface HistoricalPrices {\n timestamp: string\n open: number\n close: number\n}\n\nexport interface ProjectViewProps {\n bondAddress: string\n bondChain: string\n}\n\nconst ProjectView: React.FC<ProjectViewProps> = ({ bondAddress, bondChain }) => {\n // Hooks\n const { data: bonds, refetch } = useBondsData()\n const { data: tokenPrices } = useTokenPrices()\n const bondData = bonds?.find(\n (bond) =>\n bond?.contractAddress?.[bond.chainId]?.toLowerCase() === (bondAddress as string)?.toLowerCase() &&\n (bondChain as string) === bond.chainId.toString(),\n )\n\n const { data: historicalPrices } = useHistoricalPrice(bondData?.cgId)\n\n useEffect(() => {\n if ((bonds?.length ?? 0) > 0 && !bondData) {\n window.location.href = '/bonds'\n }\n })\n\n useEffect(() => {\n if (Object.keys(tokenPrices ?? {})?.length > 0 && bonds?.length === 0) {\n console.log('Found prices and no bonds, realtimeapi failed. Refetching bonds')\n refetch()\n }\n /* eslint-disable react-hooks/exhaustive-deps */\n }, [Object.keys(tokenPrices ?? {})?.length, bonds?.length, refetch])\n\n return (\n <Flex sx={styles.mainViewContainer}>\n <RecommendationCards />\n <NavPanel contractAddress={bondData?.contractAddress?.[bondData.chainId]} />\n {bondData && (\n <Flex\n sx={{\n width: '100%',\n mt: '10px',\n display: ['none', 'none', 'none', 'block'],\n '&& > div > div': {\n background: 'white2',\n },\n }}\n >\n <BondCards bondData={bondData} />\n </Flex>\n )}\n {bondData ? (\n <>\n <Flex sx={{ width: '100%', flexDirection: 'column', mt: '10px' }}>\n <Flex sx={{ width: '100%', flexDirection: ['column', 'column', 'column', 'row'], alignItems: 'stretch' }}>\n <Flex\n sx={{\n background: 'white2',\n borderRadius: 'normal',\n width: ['100%', '100%', '100%', '50%'],\n mt: '5px',\n }}\n >\n <BuyBond\n bondAddress={bondData?.contractAddress?.[bondData.chainId]}\n bondChain={bondData.chainId}\n isProjectView\n />\n </Flex>\n <PriceChart selectedBond={bondData} historicalPrices={historicalPrices} />\n </Flex>\n <Flex sx={{ width: '100%', mt: '10px' }}>\n <ProjectInfo selectedBond={bondData} />\n </Flex>\n <Flex sx={{ width: '100%', mt: '10px' }}>\n <BondStats selectedBond={bondData} />\n </Flex>\n <Flex sx={{ width: '100%', mt: '10px', mb: '50px' }}>\n <BondLeaderboard selectedBond={bondData} />\n </Flex>\n </Flex>\n </>\n ) : (\n <Flex sx={{ width: '100%', justifyContent: 'center', fontSize: '12px', fontWeight: 500 }}>Loading...</Flex>\n )}\n </Flex>\n )\n}\n\nexport default ProjectView\n"],"names":["_jsxs","_jsx","_Fragment","BuyBond"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { BondsData } from '../../../../types/bonds';
3
- declare const ProjectInfo: ({ selectedBond2 }: {
4
- selectedBond2?: BondsData;
3
+ declare const ProjectInfo: ({ selectedBond }: {
4
+ selectedBond?: BondsData;
5
5
  }) => React.JSX.Element;
6
6
  export default ProjectInfo;
@@ -2,14 +2,10 @@ import { jsxs, jsx } from 'theme-ui/jsx-runtime';
2
2
  import Flex from '../../../../components/uikit-sdk/Flex/index.js';
3
3
  import { styles } from './styles.js';
4
4
  import SafeHTMLComponent from '../../../../components/SafeHTMLComponent/index.js';
5
- import useBondsList from '../../../../state/bonds/useBondsList.js';
6
5
 
7
- const ProjectInfo = ({ selectedBond2 }) => {
8
- const description = selectedBond2?.fullDescription ?? selectedBond2?.shortDescription;
9
- const { data: bondList } = useBondsList();
10
- const selectedBond = bondList?.find((billsConfig) => billsConfig?.contractAddress?.[billsConfig?.chainId]?.toLowerCase() ===
11
- selectedBond2?.contractAddress?.[selectedBond2.chainId]?.toLowerCase());
12
- return (jsxs(Flex, { sx: styles.projectInfoContainer, children: [jsxs(Flex, { sx: styles.tokenTitle, children: ["About ", selectedBond?.earnToken.symbol] }), jsx(Flex, { sx: styles.fullDescription, children: description && jsx(SafeHTMLComponent, { html: description }) }), jsxs(Flex, { sx: { flexDirection: 'column' }, children: [selectedBond?.featuredURLS && selectedBond?.featuredURLS?.length > 0 && (jsxs(Flex, { sx: { flexDirection: 'column', mt: '20px' }, children: [jsx(Flex, { sx: styles.tokenTitle, children: "Featured In" }), jsx(Flex, { sx: styles.imagesWrapper, children: selectedBond?.featuredURLS?.map((featuredURLS, index) => (jsx(Flex, { sx: styles.imageContainer, children: jsx("img", { src: featuredURLS, alt: "featured-img", style: { width: '100%', height: '100%', objectFit: 'contain' } }) }, `${featuredURLS}-${index}`))) })] })), selectedBond?.partnersURLS && selectedBond?.partnersURLS?.length > 0 && (jsxs(Flex, { sx: { flexDirection: 'column', mt: '20px' }, children: [jsx(Flex, { sx: styles.tokenTitle, children: "Partners" }), jsx(Flex, { sx: styles.imagesWrapper, children: selectedBond?.partnersURLS?.map((partnerURL, index) => (jsx(Flex, { sx: styles.imageContainer, children: jsx("img", { src: partnerURL, alt: "partner-img", style: { width: '100%', height: '100%', objectFit: 'contain' } }) }, `${partnerURL}-${index}`))) })] }))] })] }));
6
+ const ProjectInfo = ({ selectedBond }) => {
7
+ const description = selectedBond?.fullDescription ?? selectedBond?.shortDescription;
8
+ return (jsxs(Flex, { sx: styles.projectInfoContainer, children: [jsxs(Flex, { sx: styles.tokenTitle, children: ["About ", selectedBond?.earnToken.symbol] }), jsx(Flex, { sx: styles.fullDescription, children: description && jsx(SafeHTMLComponent, { html: description }) }), jsx(Flex, { sx: { flexDirection: 'column' } })] }));
13
9
  };
14
10
 
15
11
  export { ProjectInfo as default };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/views/ProjectView/components/ProjectInfo/index.tsx"],"sourcesContent":["import React from 'react'\nimport Flex from '../../../../components/uikit-sdk/Flex'\nimport { styles } from './styles'\nimport SafeHTMLComponent from '../../../../components/SafeHTMLComponent'\nimport { BondsData } from '../../../../types/bonds'\nimport useBondsList from '../../../../state/bonds/useBondsList'\n\nconst ProjectInfo = ({ selectedBond2 }: { selectedBond2?: BondsData }) => {\n const description: string | undefined = selectedBond2?.fullDescription ?? selectedBond2?.shortDescription\n const { data: bondList } = useBondsList()\n\n const selectedBond = bondList?.find(\n (billsConfig) =>\n billsConfig?.contractAddress?.[billsConfig?.chainId]?.toLowerCase() ===\n selectedBond2?.contractAddress?.[selectedBond2.chainId]?.toLowerCase(),\n )\n\n return (\n <Flex sx={styles.projectInfoContainer}>\n <Flex sx={styles.tokenTitle}>About {selectedBond?.earnToken.symbol}</Flex>\n <Flex sx={styles.fullDescription}>{description && <SafeHTMLComponent html={description} />}</Flex>\n <Flex sx={{ flexDirection: 'column' }}>\n {selectedBond?.featuredURLS && selectedBond?.featuredURLS?.length > 0 && (\n <Flex sx={{ flexDirection: 'column', mt: '20px' }}>\n <Flex sx={styles.tokenTitle}>Featured In</Flex>\n <Flex sx={styles.imagesWrapper}>\n {selectedBond?.featuredURLS?.map((featuredURLS, index) => (\n <Flex key={`${featuredURLS}-${index}`} sx={styles.imageContainer}>\n <img\n src={featuredURLS}\n alt=\"featured-img\"\n style={{ width: '100%', height: '100%', objectFit: 'contain' }}\n />\n </Flex>\n ))}\n </Flex>\n </Flex>\n )}\n {selectedBond?.partnersURLS && selectedBond?.partnersURLS?.length > 0 && (\n <Flex sx={{ flexDirection: 'column', mt: '20px' }}>\n <Flex sx={styles.tokenTitle}>Partners</Flex>\n <Flex sx={styles.imagesWrapper}>\n {selectedBond?.partnersURLS?.map((partnerURL, index) => (\n <Flex key={`${partnerURL}-${index}`} sx={styles.imageContainer}>\n <img\n src={partnerURL}\n alt=\"partner-img\"\n style={{ width: '100%', height: '100%', objectFit: 'contain' }}\n />\n </Flex>\n ))}\n </Flex>\n </Flex>\n )}\n </Flex>\n </Flex>\n )\n}\n\nexport default ProjectInfo\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/views/ProjectView/components/ProjectInfo/index.tsx"],"sourcesContent":["import React from 'react'\nimport Flex from '../../../../components/uikit-sdk/Flex'\nimport { styles } from './styles'\nimport SafeHTMLComponent from '../../../../components/SafeHTMLComponent'\nimport { BondsData } from '../../../../types/bonds'\n\nconst ProjectInfo = ({ selectedBond }: { selectedBond?: BondsData }) => {\n const description: string | undefined = selectedBond?.fullDescription ?? selectedBond?.shortDescription\n\n return (\n <Flex sx={styles.projectInfoContainer}>\n <Flex sx={styles.tokenTitle}>About {selectedBond?.earnToken.symbol}</Flex>\n <Flex sx={styles.fullDescription}>{description && <SafeHTMLComponent html={description} />}</Flex>\n <Flex sx={{ flexDirection: 'column' }}></Flex>\n </Flex>\n )\n}\n\nexport default ProjectInfo\n"],"names":["_jsxs","_jsx"],"mappings":";;;;;AAMA,MAAM,WAAW,GAAG,CAAC,EAAE,YAAY,EAAgC,KAAI;IACrE,MAAM,WAAW,GAAuB,YAAY,EAAE,eAAe,IAAI,YAAY,EAAE,gBAAgB;IAEvG,QACEA,IAAA,CAAC,IAAI,EAAA,EAAC,EAAE,EAAE,MAAM,CAAC,oBAAoB,EAAA,QAAA,EAAA,CACnCA,IAAA,CAAC,IAAI,EAAA,EAAC,EAAE,EAAE,MAAM,CAAC,UAAU,EAAA,QAAA,EAAA,CAAA,QAAA,EAAS,YAAY,EAAE,SAAS,CAAC,MAAM,CAAA,EAAA,CAAQ,EAC1EC,GAAA,CAAC,IAAI,EAAA,EAAC,EAAE,EAAE,MAAM,CAAC,eAAe,EAAA,QAAA,EAAG,WAAW,IAAIA,GAAA,CAAC,iBAAiB,EAAA,EAAC,IAAI,EAAE,WAAW,EAAA,CAAI,EAAA,CAAQ,EAClGA,GAAA,CAAC,IAAI,EAAA,EAAC,EAAE,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAA,CAAS,CAAA,EAAA,CACzC;AAEX;;;;"}
@@ -15,30 +15,7 @@ const styles = {
15
15
  fontWeight: 500,
16
16
  lineHeight: '21px',
17
17
  mt: '10px',
18
- },
19
- imagesWrapper: {
20
- mt: '10px',
21
- justifyContent: 'space-between',
22
- flexWrap: ['wrap', 'wrap', 'wrap', 'nowrap'],
23
- '& > div:last-child': {
24
- marginRight: '0',
25
- },
26
- '& > div:nth-of-type(3)': {
27
- marginRight: ['0px', '0px', '0px', '10px'],
28
- },
29
- '& > div:nth-of-type(n+4)': {
30
- mt: ['15px', '15px', '15px', '0px'],
31
- },
32
- },
33
- imageContainer: {
34
- p: '10px',
35
- background: 'white3',
36
- borderRadius: 'normal',
37
- mr: '10px',
38
- width: ['30%', '30%', '30%', '100%'],
39
- height: ['40px', '40px', '40px', '67px'],
40
- },
41
- };
18
+ }};
42
19
 
43
20
  export { styles };
44
21
  //# sourceMappingURL=styles.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"styles.js","sources":["../../../../../src/views/ProjectView/components/ProjectInfo/styles.ts"],"sourcesContent":["import { ThemeUIStyleObject } from 'theme-ui'\n\nexport const styles: Record<\n 'projectInfoContainer' | 'tokenTitle' | 'fullDescription' | 'imagesWrapper' | 'imageContainer',\n ThemeUIStyleObject\n> = {\n projectInfoContainer: {\n width: '100%',\n background: 'white2',\n p: '20px',\n borderRadius: 'normal',\n flexDirection: 'column',\n },\n tokenTitle: {\n width: '100%',\n fontSize: ['22px'],\n },\n fullDescription: {\n fontSize: '14px',\n fontWeight: 500,\n lineHeight: '21px',\n mt: '10px',\n },\n imagesWrapper: {\n mt: '10px',\n justifyContent: 'space-between',\n flexWrap: ['wrap', 'wrap', 'wrap', 'nowrap'],\n '& > div:last-child': {\n marginRight: '0',\n },\n '& > div:nth-of-type(3)': {\n marginRight: ['0px', '0px', '0px', '10px'],\n },\n '& > div:nth-of-type(n+4)': {\n mt: ['15px', '15px', '15px', '0px'],\n },\n },\n imageContainer: {\n p: '10px',\n background: 'white3',\n borderRadius: 'normal',\n mr: '10px',\n width: ['30%', '30%', '30%', '100%'],\n height: ['40px', '40px', '40px', '67px'],\n },\n}\n"],"names":[],"mappings":"AAEO,MAAM,MAAM,GAGf;AACF,IAAA,oBAAoB,EAAE;AACpB,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,CAAC,EAAE,MAAM;AACT,QAAA,YAAY,EAAE,QAAQ;AACtB,QAAA,aAAa,EAAE,QAAQ;AACxB,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,KAAK,EAAE,MAAM;QACb,QAAQ,EAAE,CAAC,MAAM,CAAC;AACnB,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,UAAU,EAAE,MAAM;AAClB,QAAA,EAAE,EAAE,MAAM;AACX,KAAA;AACD,IAAA,aAAa,EAAE;AACb,QAAA,EAAE,EAAE,MAAM;AACV,QAAA,cAAc,EAAE,eAAe;QAC/B,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC;AAC5C,QAAA,oBAAoB,EAAE;AACpB,YAAA,WAAW,EAAE,GAAG;AACjB,SAAA;AACD,QAAA,wBAAwB,EAAE;YACxB,WAAW,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC;AAC3C,SAAA;AACD,QAAA,0BAA0B,EAAE;YAC1B,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AACpC,SAAA;AACF,KAAA;AACD,IAAA,cAAc,EAAE;AACd,QAAA,CAAC,EAAE,MAAM;AACT,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,YAAY,EAAE,QAAQ;AACtB,QAAA,EAAE,EAAE,MAAM;QACV,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC;QACpC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;AACzC,KAAA;;;;;"}
1
+ {"version":3,"file":"styles.js","sources":["../../../../../src/views/ProjectView/components/ProjectInfo/styles.ts"],"sourcesContent":["import { ThemeUIStyleObject } from 'theme-ui'\n\nexport const styles: Record<\n 'projectInfoContainer' | 'tokenTitle' | 'fullDescription' | 'imagesWrapper' | 'imageContainer',\n ThemeUIStyleObject\n> = {\n projectInfoContainer: {\n width: '100%',\n background: 'white2',\n p: '20px',\n borderRadius: 'normal',\n flexDirection: 'column',\n },\n tokenTitle: {\n width: '100%',\n fontSize: ['22px'],\n },\n fullDescription: {\n fontSize: '14px',\n fontWeight: 500,\n lineHeight: '21px',\n mt: '10px',\n },\n imagesWrapper: {\n mt: '10px',\n justifyContent: 'space-between',\n flexWrap: ['wrap', 'wrap', 'wrap', 'nowrap'],\n '& > div:last-child': {\n marginRight: '0',\n },\n '& > div:nth-of-type(3)': {\n marginRight: ['0px', '0px', '0px', '10px'],\n },\n '& > div:nth-of-type(n+4)': {\n mt: ['15px', '15px', '15px', '0px'],\n },\n },\n imageContainer: {\n p: '10px',\n background: 'white3',\n borderRadius: 'normal',\n mr: '10px',\n width: ['30%', '30%', '30%', '100%'],\n height: ['40px', '40px', '40px', '67px'],\n },\n}\n"],"names":[],"mappings":"AAEO,MAAM,MAAM,GAGf;AACF,IAAA,oBAAoB,EAAE;AACpB,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,UAAU,EAAE,QAAQ;AACpB,QAAA,CAAC,EAAE,MAAM;AACT,QAAA,YAAY,EAAE,QAAQ;AACtB,QAAA,aAAa,EAAE,QAAQ;AACxB,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,KAAK,EAAE,MAAM;QACb,QAAQ,EAAE,CAAC,MAAM,CAAC;AACnB,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,UAAU,EAAE,GAAG;AACf,QAAA,UAAU,EAAE,MAAM;AAClB,QAAA,EAAE,EAAE,MAAM;AACX;;;;"}
@@ -1,5 +1,5 @@
1
1
  import { jsx, jsxs } from 'theme-ui/jsx-runtime';
2
- import { useState } from 'react';
2
+ import { useState, useMemo } from 'react';
3
3
  import Flex from '../../components/uikit-sdk/Flex/index.js';
4
4
  import useBondsData from '../../state/bonds/useBondsData.js';
5
5
  import useBondsList from '../../state/bonds/useBondsList.js';
@@ -16,10 +16,17 @@ const SingleBond = ({ tokenSymbol }) => {
16
16
  // State
17
17
  const [activeTab, setActiveTab] = useState('Buy Bond');
18
18
  // Data
19
- const filteredBonds = bonds?.filter((bond) => tokenSymbol?.some((symbol) => bond.earnToken.symbol?.toLowerCase() === symbol.toLowerCase()));
20
- const soldOutBonds = allBonds?.filter((bond) => tokenSymbol?.some((symbol) => bond.earnToken.symbol?.toLowerCase() === symbol.toLowerCase()));
21
- const activeBond = filteredBonds?.[0];
22
- const soldOutBond = soldOutBonds?.[0];
19
+ const activeBond = bonds?.find((bond) => tokenSymbol?.some((symbol) => bond.earnToken.symbol?.toLowerCase() === symbol.toLowerCase()));
20
+ const soldOutBond = useMemo(() => {
21
+ if (!allBonds)
22
+ return undefined;
23
+ for (const bondsForChain of Object.values(allBonds)) {
24
+ const bond = bondsForChain.find((item) => tokenSymbol?.some((symbol) => item.earnToken.symbol?.toLowerCase() === symbol.toLowerCase()));
25
+ if (bond)
26
+ return bond;
27
+ }
28
+ return undefined;
29
+ }, [allBonds, tokenSymbol]);
23
30
  const bondAddress = activeBond?.contractAddress?.[activeBond?.chainId];
24
31
  const bondChain = activeBond?.chainId;
25
32
  return (jsx(Flex, { sx: { flexDirection: 'column' }, children: jsxs(Flex, { sx: {
@@ -1 +1 @@
1
- {"version":3,"file":"SingleBond.js","sources":["../../../src/views/SingleBond/SingleBond.tsx"],"sourcesContent":["import React, { useState } from 'react'\nimport Flex from '../../components/uikit-sdk/Flex'\nimport useBondsData from '../../state/bonds/useBondsData'\nimport useBondsList from '../../state/bonds/useBondsList'\nimport BuyBond from '../BuyBond/BuyComponent'\nimport TabNav from '../../components/uikit-sdk/TabNav'\nimport YourBonds from '../YourBonds/YourBonds'\nimport SoldOutBuyBondPlaceholder from './SoldOutBuyBondPlaceholder'\nimport { Spinner } from 'theme-ui'\n\nexport interface SingleBondProps {\n tokenSymbol?: string[]\n}\n\nconst SingleBond: React.FC<SingleBondProps> = ({ tokenSymbol }) => {\n // Data Hooks\n const { data: bonds, isFetched } = useBondsData()\n const { data: allBonds } = useBondsList()\n\n // State\n const [activeTab, setActiveTab] = useState<string>('Buy Bond')\n\n // Data\n const filteredBonds = bonds?.filter((bond) =>\n tokenSymbol?.some((symbol) => bond.earnToken.symbol?.toLowerCase() === symbol.toLowerCase()),\n )\n const soldOutBonds = allBonds?.filter((bond) =>\n tokenSymbol?.some((symbol) => bond.earnToken.symbol?.toLowerCase() === symbol.toLowerCase()),\n )\n const activeBond = filteredBonds?.[0]\n const soldOutBond = soldOutBonds?.[0]\n\n const bondAddress = activeBond?.contractAddress?.[activeBond?.chainId]\n const bondChain = activeBond?.chainId\n\n return (\n <Flex sx={{ flexDirection: 'column' }}>\n <Flex\n sx={{\n flexDirection: 'column',\n }}\n >\n <Flex sx={{ width: '100%', justifyContent: 'center', mb: '15px' }}>\n <TabNav\n activeTab={activeTab}\n tabOptions={['Buy Bond', 'Your Bonds']}\n onChangeActiveTab={(newValue: string) => setActiveTab(newValue)}\n />\n </Flex>\n {activeTab === 'Buy Bond' ? (\n <Flex\n sx={{\n background: activeTab === 'Buy Bond' && 'white2',\n borderRadius: 'normal',\n p: '0 20px 20px 20px',\n mx: '10px',\n }}\n >\n {activeBond ? (\n <BuyBond bondAddress={bondAddress} bondChain={bondChain} />\n ) : soldOutBond && isFetched ? (\n <SoldOutBuyBondPlaceholder bond={soldOutBond} />\n ) : isFetched ? (\n <Flex sx={{ justifyContent: 'center', width: '100%', pt: '20px' }}>No bond</Flex>\n ) : (\n <Flex className=\"placeholder-monkey-wrapper\">\n <Spinner size={100} />\n </Flex>\n )}\n </Flex>\n ) : (\n <YourBonds showOnly={tokenSymbol?.[0]} />\n )}\n </Flex>\n </Flex>\n )\n}\n\nexport default SingleBond\n"],"names":["_jsx","_jsxs","BuyBond"],"mappings":";;;;;;;;;;;AAcA,MAAM,UAAU,GAA8B,CAAC,EAAE,WAAW,EAAE,KAAI;;IAEhE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,YAAY,EAAE;IACjD,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,YAAY,EAAE;;IAGzC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAS,UAAU,CAAC;;AAG9D,IAAA,MAAM,aAAa,GAAG,KAAK,EAAE,MAAM,CAAC,CAAC,IAAI,KACvC,WAAW,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,MAAM,CAAC,WAAW,EAAE,CAAC,CAC7F;AACD,IAAA,MAAM,YAAY,GAAG,QAAQ,EAAE,MAAM,CAAC,CAAC,IAAI,KACzC,WAAW,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,MAAM,CAAC,WAAW,EAAE,CAAC,CAC7F;AACD,IAAA,MAAM,UAAU,GAAG,aAAa,GAAG,CAAC,CAAC;AACrC,IAAA,MAAM,WAAW,GAAG,YAAY,GAAG,CAAC,CAAC;IAErC,MAAM,WAAW,GAAG,UAAU,EAAE,eAAe,GAAG,UAAU,EAAE,OAAO,CAAC;AACtE,IAAA,MAAM,SAAS,GAAG,UAAU,EAAE,OAAO;AAErC,IAAA,QACEA,GAAA,CAAC,IAAI,EAAA,EAAC,EAAE,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAA,QAAA,EACnCC,IAAA,CAAC,IAAI,EAAA,EACH,EAAE,EAAE;AACF,gBAAA,aAAa,EAAE,QAAQ;aACxB,EAAA,QAAA,EAAA,CAEDD,GAAA,CAAC,IAAI,EAAA,EAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAA,QAAA,EAC/DA,GAAA,CAAC,MAAM,EAAA,EACL,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,CAAC,UAAU,EAAE,YAAY,CAAC,EACtC,iBAAiB,EAAE,CAAC,QAAgB,KAAK,YAAY,CAAC,QAAQ,CAAC,EAAA,CAC/D,EAAA,CACG,EACN,SAAS,KAAK,UAAU,IACvBA,GAAA,CAAC,IAAI,EAAA,EACH,EAAE,EAAE;AACF,wBAAA,UAAU,EAAE,SAAS,KAAK,UAAU,IAAI,QAAQ;AAChD,wBAAA,YAAY,EAAE,QAAQ;AACtB,wBAAA,CAAC,EAAE,kBAAkB;AACrB,wBAAA,EAAE,EAAE,MAAM;qBACX,EAAA,QAAA,EAEA,UAAU,IACTA,GAAA,CAACE,YAAO,EAAA,EAAC,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAA,CAAI,IACzD,WAAW,IAAI,SAAS,IAC1BF,GAAA,CAAC,yBAAyB,EAAA,EAAC,IAAI,EAAE,WAAW,EAAA,CAAI,IAC9C,SAAS,IACXA,GAAA,CAAC,IAAI,IAAC,EAAE,EAAE,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAA,QAAA,EAAA,SAAA,EAAA,CAAgB,KAEjFA,GAAA,CAAC,IAAI,EAAA,EAAC,SAAS,EAAC,4BAA4B,EAAA,QAAA,EAC1CA,GAAA,CAAC,OAAO,EAAA,EAAC,IAAI,EAAE,GAAG,EAAA,CAAI,EAAA,CACjB,CACR,EAAA,CACI,KAEPA,GAAA,CAAC,SAAS,EAAA,EAAC,QAAQ,EAAE,WAAW,GAAG,CAAC,CAAC,GAAI,CAC1C,CAAA,EAAA,CACI,EAAA,CACF;AAEX;;;;"}
1
+ {"version":3,"file":"SingleBond.js","sources":["../../../src/views/SingleBond/SingleBond.tsx"],"sourcesContent":["import React, { useMemo, useState } from 'react'\nimport Flex from '../../components/uikit-sdk/Flex'\nimport useBondsData from '../../state/bonds/useBondsData'\nimport useBondsList from '../../state/bonds/useBondsList'\nimport BuyBond from '../BuyBond/BuyComponent'\nimport TabNav from '../../components/uikit-sdk/TabNav'\nimport YourBonds from '../YourBonds/YourBonds'\nimport SoldOutBuyBondPlaceholder from './SoldOutBuyBondPlaceholder'\nimport { Spinner } from 'theme-ui'\n\nexport interface SingleBondProps {\n tokenSymbol?: string[]\n}\n\nconst SingleBond: React.FC<SingleBondProps> = ({ tokenSymbol }) => {\n // Data Hooks\n const { data: bonds, isFetched } = useBondsData()\n const { data: allBonds } = useBondsList()\n\n // State\n const [activeTab, setActiveTab] = useState<string>('Buy Bond')\n\n // Data\n const activeBond = bonds?.find((bond) =>\n tokenSymbol?.some((symbol) => bond.earnToken.symbol?.toLowerCase() === symbol.toLowerCase()),\n )\n const soldOutBond = useMemo(() => {\n if (!allBonds) return undefined\n\n for (const bondsForChain of Object.values(allBonds)) {\n const bond = bondsForChain.find((item) =>\n tokenSymbol?.some((symbol) => item.earnToken.symbol?.toLowerCase() === symbol.toLowerCase()),\n )\n\n if (bond) return bond\n }\n\n return undefined\n }, [allBonds, tokenSymbol])\n\n const bondAddress = activeBond?.contractAddress?.[activeBond?.chainId]\n const bondChain = activeBond?.chainId\n\n return (\n <Flex sx={{ flexDirection: 'column' }}>\n <Flex\n sx={{\n flexDirection: 'column',\n }}\n >\n <Flex sx={{ width: '100%', justifyContent: 'center', mb: '15px' }}>\n <TabNav\n activeTab={activeTab}\n tabOptions={['Buy Bond', 'Your Bonds']}\n onChangeActiveTab={(newValue: string) => setActiveTab(newValue)}\n />\n </Flex>\n {activeTab === 'Buy Bond' ? (\n <Flex\n sx={{\n background: activeTab === 'Buy Bond' && 'white2',\n borderRadius: 'normal',\n p: '0 20px 20px 20px',\n mx: '10px',\n }}\n >\n {activeBond ? (\n <BuyBond bondAddress={bondAddress} bondChain={bondChain} />\n ) : soldOutBond && isFetched ? (\n <SoldOutBuyBondPlaceholder bond={soldOutBond} />\n ) : isFetched ? (\n <Flex sx={{ justifyContent: 'center', width: '100%', pt: '20px' }}>No bond</Flex>\n ) : (\n <Flex className=\"placeholder-monkey-wrapper\">\n <Spinner size={100} />\n </Flex>\n )}\n </Flex>\n ) : (\n <YourBonds showOnly={tokenSymbol?.[0]} />\n )}\n </Flex>\n </Flex>\n )\n}\n\nexport default SingleBond\n"],"names":["_jsx","_jsxs","BuyBond"],"mappings":"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"}
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "description": "Ape Bond SDK",
4
4
  "author": "Ape Bond",
5
5
  "license": "MIT",
6
- "version": "6.1.18",
6
+ "version": "6.2.0-test.0",
7
7
  "module": "dist/main.js",
8
8
  "type": "module",
9
9
  "types": "dist/main.d.ts",
@@ -112,8 +112,8 @@
112
112
  "@solana/web3.js": "^1.98.4",
113
113
  "@tanstack/react-query": "^5.90.2",
114
114
  "axios": "^1.8.2",
115
- "react": ">=17 <19",
116
- "react-dom": ">=17 <19",
115
+ "react": ">=17",
116
+ "react-dom": ">=17",
117
117
  "wagmi": "^2.14.16"
118
118
  },
119
119
  "dependencies": {
@@ -132,6 +132,8 @@
132
132
  "theme-ui": "0.17.2"
133
133
  },
134
134
  "devDependencies": {
135
+ "react": "19.2.8",
136
+ "react-dom": "19.2.8",
135
137
  "@eslint/js": "9.39.4",
136
138
  "@rainbow-me/rainbowkit": "2.2.10",
137
139
  "@rollup/plugin-commonjs": "25.0.8",
@@ -1,5 +0,0 @@
1
- import { BillsConfig, ChainId, PreTGEConfig, Token } from '@ape.swap/apeswap-lists';
2
- import { UseQueryResult } from '@tanstack/react-query';
3
- export type TokenList = Record<ChainId, Record<string, Token>>;
4
- export default function useTokenList(): UseQueryResult<TokenList>;
5
- export declare const getTokenList: (chains: number[], apiUrl: string, bondList: BillsConfig[], preTGEList: PreTGEConfig[]) => TokenList;