@ape.swap/bonds-sdk 5.1.23 → 5.1.25

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.
@@ -0,0 +1,8 @@
1
+ interface TabNavigationProps<T> {
2
+ tabs: T[];
3
+ activeTab: T;
4
+ setActiveTab: (value: T) => void;
5
+ lineColor?: string;
6
+ }
7
+ declare const TabNavigation: <T extends string>({ tabs, activeTab, setActiveTab, lineColor }: TabNavigationProps<T>) => import("react").JSX.Element;
8
+ export default TabNavigation;
@@ -0,0 +1,33 @@
1
+ import { jsx, jsxs } from 'theme-ui/jsx-runtime';
2
+ import Flex from '../uikit-sdk/Flex/index.js';
3
+ import Text from '../uikit-sdk/Text/index.js';
4
+
5
+ const TabNavigation = ({ tabs, activeTab, setActiveTab, lineColor }) => {
6
+ const color = lineColor ?? '#fff';
7
+ return (jsx(Flex, { sx: { gap: ['20px', '20px', '25px'], fontSize: ['12px', '12px', '16px'] }, children: tabs.map((tab) => {
8
+ const isActive = activeTab === tab;
9
+ return (jsxs(Flex, { sx: {
10
+ // borderBottom: isActive ? `2px solid ${color}` : '',
11
+ cursor: 'pointer',
12
+ position: 'relative',
13
+ }, onClick: () => setActiveTab(tab), children: [jsx(Text, { sx: {
14
+ color: (theme) => (isActive ? `${theme.colors?.text}` : 'textDisabledButton'),
15
+ }, children: tab }), isActive && (jsx(Flex, { sx: {
16
+ height: '2px',
17
+ background: color,
18
+ width: '100%',
19
+ position: 'absolute',
20
+ bottom: '-2px',
21
+ left: 0,
22
+ '@keyframes slideIn': {
23
+ from: { transform: 'scaleX(0)', transformOrigin: 'left' },
24
+ to: { transform: 'scaleX(1)', transformOrigin: 'left' },
25
+ },
26
+ animation: 'slideIn 0.2s ease-out forwards',
27
+ transformOrigin: 'left',
28
+ } }))] }, tab));
29
+ }) }));
30
+ };
31
+
32
+ export { TabNavigation as default };
33
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/TabNavigation/index.tsx"],"sourcesContent":["import { Theme } from 'theme-ui'\nimport Flex from '../uikit-sdk/Flex'\nimport Text from '../uikit-sdk/Text'\n\ninterface TabNavigationProps<T> {\n tabs: T[]\n activeTab: T\n setActiveTab: (value: T) => void\n lineColor?: string\n}\n\nconst TabNavigation = <T extends string>({ tabs, activeTab, setActiveTab, lineColor }: TabNavigationProps<T>) => {\n const color = lineColor ?? '#fff'\n return (\n <Flex sx={{ gap: ['20px', '20px', '25px'], fontSize: ['12px', '12px', '16px'] }}>\n {tabs.map((tab) => {\n const isActive: boolean = activeTab === tab\n return (\n <Flex\n key={tab}\n sx={{\n // borderBottom: isActive ? `2px solid ${color}` : '',\n cursor: 'pointer',\n position: 'relative',\n }}\n onClick={() => setActiveTab(tab)}\n >\n <Text\n sx={{\n color: (theme: Theme) => (isActive ? `${theme.colors?.text}` : 'textDisabledButton'),\n }}\n >\n {tab}\n </Text>\n {isActive && (\n <Flex\n sx={{\n height: '2px',\n background: color,\n width: '100%',\n position: 'absolute',\n bottom: '-2px',\n left: 0,\n '@keyframes slideIn': {\n from: { transform: 'scaleX(0)', transformOrigin: 'left' },\n to: { transform: 'scaleX(1)', transformOrigin: 'left' },\n },\n animation: 'slideIn 0.2s ease-out forwards',\n transformOrigin: 'left',\n }}\n />\n )}\n </Flex>\n )\n })}\n </Flex>\n )\n}\n\nexport default TabNavigation\n"],"names":["_jsx","_jsxs"],"mappings":";;;;AAWA,MAAM,aAAa,GAAG,CAAmB,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAyB,KAAI;AAC9G,IAAA,MAAM,KAAK,GAAG,SAAS,IAAI,MAAM;AACjC,IAAA,QACEA,GAAA,CAAC,IAAI,EAAA,EAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EAAA,QAAA,EAC5E,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;AAChB,YAAA,MAAM,QAAQ,GAAY,SAAS,KAAK,GAAG;AAC3C,YAAA,QACEC,IAAA,CAAC,IAAI,EAAA,EAEH,EAAE,EAAE;;AAEF,oBAAA,MAAM,EAAE,SAAS;AACjB,oBAAA,QAAQ,EAAE,UAAU;AACrB,iBAAA,EACD,OAAO,EAAE,MAAM,YAAY,CAAC,GAAG,CAAC,EAAA,QAAA,EAAA,CAEhCD,GAAA,CAAC,IAAI,EAAA,EACH,EAAE,EAAE;4BACF,KAAK,EAAE,CAAC,KAAY,MAAM,QAAQ,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,oBAAoB,CAAC;yBACrF,EAAA,QAAA,EAEA,GAAG,EAAA,CACC,EACN,QAAQ,KACPA,GAAA,CAAC,IAAI,EAAA,EACH,EAAE,EAAE;AACF,4BAAA,MAAM,EAAE,KAAK;AACb,4BAAA,UAAU,EAAE,KAAK;AACjB,4BAAA,KAAK,EAAE,MAAM;AACb,4BAAA,QAAQ,EAAE,UAAU;AACpB,4BAAA,MAAM,EAAE,MAAM;AACd,4BAAA,IAAI,EAAE,CAAC;AACP,4BAAA,oBAAoB,EAAE;gCACpB,IAAI,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,EAAE;gCACzD,EAAE,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,EAAE;AACxD,6BAAA;AACD,4BAAA,SAAS,EAAE,gCAAgC;AAC3C,4BAAA,eAAe,EAAE,MAAM;AACxB,yBAAA,EAAA,CACD,CACH,CAAA,EAAA,EAhCI,GAAG,CAiCH;QAEX,CAAC,CAAC,EAAA,CACG;AAEX;;;;"}
@@ -9,6 +9,6 @@ export interface PopupProps {
9
9
  export declare const usePopups: () => {
10
10
  data: PopupProps[];
11
11
  addToastError: (errorMessage: string, txHash?: string, chainId?: ChainId) => void;
12
- addToastSuccess: (txHash?: string, chainId?: ChainId) => void;
12
+ addToastSuccess: (txHash?: string, chainId?: ChainId, description?: string) => void;
13
13
  removePopup: (popupToRemove: PopupProps) => void;
14
14
  };
@@ -40,12 +40,13 @@ const usePopups = () => {
40
40
  });
41
41
  }
42
42
  }, [addPopup]);
43
- const addToastSuccess = useCallback((txHash, chainId) => {
43
+ const addToastSuccess = useCallback((txHash, chainId, description) => {
44
44
  if (txHash && chainId) {
45
45
  addPopup({
46
46
  variant: 'success',
47
47
  timestamp: new Date().getTime(),
48
48
  title: `Transaction successful`,
49
+ description: description,
49
50
  url: `${BLOCK_EXPLORER[chainId]}/tx/${txHash}`,
50
51
  });
51
52
  }
@@ -1 +1 @@
1
- {"version":3,"file":"usePopups.js","sources":["../../../src/state/popups/usePopups.ts"],"sourcesContent":["import { useQuery, useQueryClient } from '@tanstack/react-query'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport { useCallback } from 'react'\nimport { BLOCK_EXPLORER } from '../../config/constants/chains'\nimport { ChainId } from '@ape.swap/apeswap-lists'\n\nexport interface PopupProps {\n timestamp: number\n variant: 'success' | 'error'\n title: string\n description?: string\n url?: string\n}\n\nexport const usePopups = () => {\n const { data }: { data: PopupProps[] } = useQuery({\n queryKey: [QUERY_KEYS.POP_UPS],\n queryFn: () => {\n throw new Error('Just a hotfix for latest versions of react-query that make queryFn a required prop')\n },\n initialData: [],\n })\n const queryClient = useQueryClient()\n\n const addPopup = useCallback(\n (newPopup: PopupProps) => {\n const oldPopups: PopupProps[] = [...data]\n queryClient.setQueryData([QUERY_KEYS.POP_UPS], [...oldPopups, newPopup])\n },\n [data, queryClient],\n )\n\n const removePopup = (popupToRemove: PopupProps) => {\n const currentPopups = queryClient.getQueryData<PopupProps[]>([QUERY_KEYS.POP_UPS]) || []\n const filteredPopups: PopupProps[] = currentPopups.filter((popup) => popup.timestamp !== popupToRemove.timestamp)\n queryClient.setQueryData([QUERY_KEYS.POP_UPS], filteredPopups)\n }\n\n const addToastError = useCallback(\n (errorMessage: string, txHash?: string, chainId?: ChainId) => {\n if (txHash && chainId) {\n addPopup({\n variant: 'error',\n timestamp: new Date().getTime(),\n title: `Tx reverted`,\n description: errorMessage,\n url: `${BLOCK_EXPLORER[chainId]}/tx/${txHash}`,\n })\n } else {\n addPopup({\n variant: 'error',\n timestamp: new Date().getTime(),\n title: `Couldn't send your tx`,\n description: errorMessage,\n })\n }\n },\n [addPopup],\n )\n\n const addToastSuccess = useCallback(\n (txHash?: string, chainId?: ChainId) => {\n if (txHash && chainId) {\n addPopup({\n variant: 'success',\n timestamp: new Date().getTime(),\n title: `Transaction successful`,\n url: `${BLOCK_EXPLORER[chainId]}/tx/${txHash}`,\n })\n }\n },\n [addPopup],\n )\n\n return { data, addToastError, addToastSuccess, removePopup }\n}\n"],"names":[],"mappings":";;;;;AAcO,MAAM,SAAS,GAAG,MAAK;AAC5B,IAAA,MAAM,EAAE,IAAI,EAAE,GAA2B,QAAQ,CAAC;AAChD,QAAA,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;QAC9B,OAAO,EAAE,MAAK;AACZ,YAAA,MAAM,IAAI,KAAK,CAAC,oFAAoF,CAAC;QACvG,CAAC;AACD,QAAA,WAAW,EAAE,EAAE;AAChB,KAAA,CAAC;AACF,IAAA,MAAM,WAAW,GAAG,cAAc,EAAE;AAEpC,IAAA,MAAM,QAAQ,GAAG,WAAW,CAC1B,CAAC,QAAoB,KAAI;AACvB,QAAA,MAAM,SAAS,GAAiB,CAAC,GAAG,IAAI,CAAC;AACzC,QAAA,WAAW,CAAC,YAAY,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,QAAQ,CAAC,CAAC;AAC1E,IAAA,CAAC,EACD,CAAC,IAAI,EAAE,WAAW,CAAC,CACpB;AAED,IAAA,MAAM,WAAW,GAAG,CAAC,aAAyB,KAAI;AAChD,QAAA,MAAM,aAAa,GAAG,WAAW,CAAC,YAAY,CAAe,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE;AACxF,QAAA,MAAM,cAAc,GAAiB,aAAa,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,SAAS,KAAK,aAAa,CAAC,SAAS,CAAC;QACjH,WAAW,CAAC,YAAY,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC;AAChE,IAAA,CAAC;IAED,MAAM,aAAa,GAAG,WAAW,CAC/B,CAAC,YAAoB,EAAE,MAAe,EAAE,OAAiB,KAAI;AAC3D,QAAA,IAAI,MAAM,IAAI,OAAO,EAAE;AACrB,YAAA,QAAQ,CAAC;AACP,gBAAA,OAAO,EAAE,OAAO;AAChB,gBAAA,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE;AAC/B,gBAAA,KAAK,EAAE,CAAA,WAAA,CAAa;AACpB,gBAAA,WAAW,EAAE,YAAY;gBACzB,GAAG,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA,IAAA,EAAO,MAAM,CAAA,CAAE;AAC/C,aAAA,CAAC;QACJ;aAAO;AACL,YAAA,QAAQ,CAAC;AACP,gBAAA,OAAO,EAAE,OAAO;AAChB,gBAAA,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE;AAC/B,gBAAA,KAAK,EAAE,CAAA,qBAAA,CAAuB;AAC9B,gBAAA,WAAW,EAAE,YAAY;AAC1B,aAAA,CAAC;QACJ;AACF,IAAA,CAAC,EACD,CAAC,QAAQ,CAAC,CACX;IAED,MAAM,eAAe,GAAG,WAAW,CACjC,CAAC,MAAe,EAAE,OAAiB,KAAI;AACrC,QAAA,IAAI,MAAM,IAAI,OAAO,EAAE;AACrB,YAAA,QAAQ,CAAC;AACP,gBAAA,OAAO,EAAE,SAAS;AAClB,gBAAA,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE;AAC/B,gBAAA,KAAK,EAAE,CAAA,sBAAA,CAAwB;gBAC/B,GAAG,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA,IAAA,EAAO,MAAM,CAAA,CAAE;AAC/C,aAAA,CAAC;QACJ;AACF,IAAA,CAAC,EACD,CAAC,QAAQ,CAAC,CACX;IAED,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE;AAC9D;;;;"}
1
+ {"version":3,"file":"usePopups.js","sources":["../../../src/state/popups/usePopups.ts"],"sourcesContent":["import { useQuery, useQueryClient } from '@tanstack/react-query'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport { useCallback } from 'react'\nimport { BLOCK_EXPLORER } from '../../config/constants/chains'\nimport { ChainId } from '@ape.swap/apeswap-lists'\n\nexport interface PopupProps {\n timestamp: number\n variant: 'success' | 'error'\n title: string\n description?: string\n url?: string\n}\n\nexport const usePopups = () => {\n const { data }: { data: PopupProps[] } = useQuery({\n queryKey: [QUERY_KEYS.POP_UPS],\n queryFn: () => {\n throw new Error('Just a hotfix for latest versions of react-query that make queryFn a required prop')\n },\n initialData: [],\n })\n const queryClient = useQueryClient()\n\n const addPopup = useCallback(\n (newPopup: PopupProps) => {\n const oldPopups: PopupProps[] = [...data]\n queryClient.setQueryData([QUERY_KEYS.POP_UPS], [...oldPopups, newPopup])\n },\n [data, queryClient],\n )\n\n const removePopup = (popupToRemove: PopupProps) => {\n const currentPopups = queryClient.getQueryData<PopupProps[]>([QUERY_KEYS.POP_UPS]) || []\n const filteredPopups: PopupProps[] = currentPopups.filter((popup) => popup.timestamp !== popupToRemove.timestamp)\n queryClient.setQueryData([QUERY_KEYS.POP_UPS], filteredPopups)\n }\n\n const addToastError = useCallback(\n (errorMessage: string, txHash?: string, chainId?: ChainId) => {\n if (txHash && chainId) {\n addPopup({\n variant: 'error',\n timestamp: new Date().getTime(),\n title: `Tx reverted`,\n description: errorMessage,\n url: `${BLOCK_EXPLORER[chainId]}/tx/${txHash}`,\n })\n } else {\n addPopup({\n variant: 'error',\n timestamp: new Date().getTime(),\n title: `Couldn't send your tx`,\n description: errorMessage,\n })\n }\n },\n [addPopup],\n )\n\n const addToastSuccess = useCallback(\n (txHash?: string, chainId?: ChainId, description?: string) => {\n if (txHash && chainId) {\n addPopup({\n variant: 'success',\n timestamp: new Date().getTime(),\n title: `Transaction successful`,\n description: description,\n url: `${BLOCK_EXPLORER[chainId]}/tx/${txHash}`,\n })\n }\n },\n [addPopup],\n )\n\n return { data, addToastError, addToastSuccess, removePopup }\n}\n"],"names":[],"mappings":";;;;;AAcO,MAAM,SAAS,GAAG,MAAK;AAC5B,IAAA,MAAM,EAAE,IAAI,EAAE,GAA2B,QAAQ,CAAC;AAChD,QAAA,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;QAC9B,OAAO,EAAE,MAAK;AACZ,YAAA,MAAM,IAAI,KAAK,CAAC,oFAAoF,CAAC;QACvG,CAAC;AACD,QAAA,WAAW,EAAE,EAAE;AAChB,KAAA,CAAC;AACF,IAAA,MAAM,WAAW,GAAG,cAAc,EAAE;AAEpC,IAAA,MAAM,QAAQ,GAAG,WAAW,CAC1B,CAAC,QAAoB,KAAI;AACvB,QAAA,MAAM,SAAS,GAAiB,CAAC,GAAG,IAAI,CAAC;AACzC,QAAA,WAAW,CAAC,YAAY,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,QAAQ,CAAC,CAAC;AAC1E,IAAA,CAAC,EACD,CAAC,IAAI,EAAE,WAAW,CAAC,CACpB;AAED,IAAA,MAAM,WAAW,GAAG,CAAC,aAAyB,KAAI;AAChD,QAAA,MAAM,aAAa,GAAG,WAAW,CAAC,YAAY,CAAe,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE;AACxF,QAAA,MAAM,cAAc,GAAiB,aAAa,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,SAAS,KAAK,aAAa,CAAC,SAAS,CAAC;QACjH,WAAW,CAAC,YAAY,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC;AAChE,IAAA,CAAC;IAED,MAAM,aAAa,GAAG,WAAW,CAC/B,CAAC,YAAoB,EAAE,MAAe,EAAE,OAAiB,KAAI;AAC3D,QAAA,IAAI,MAAM,IAAI,OAAO,EAAE;AACrB,YAAA,QAAQ,CAAC;AACP,gBAAA,OAAO,EAAE,OAAO;AAChB,gBAAA,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE;AAC/B,gBAAA,KAAK,EAAE,CAAA,WAAA,CAAa;AACpB,gBAAA,WAAW,EAAE,YAAY;gBACzB,GAAG,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA,IAAA,EAAO,MAAM,CAAA,CAAE;AAC/C,aAAA,CAAC;QACJ;aAAO;AACL,YAAA,QAAQ,CAAC;AACP,gBAAA,OAAO,EAAE,OAAO;AAChB,gBAAA,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE;AAC/B,gBAAA,KAAK,EAAE,CAAA,qBAAA,CAAuB;AAC9B,gBAAA,WAAW,EAAE,YAAY;AAC1B,aAAA,CAAC;QACJ;AACF,IAAA,CAAC,EACD,CAAC,QAAQ,CAAC,CACX;IAED,MAAM,eAAe,GAAG,WAAW,CACjC,CAAC,MAAe,EAAE,OAAiB,EAAE,WAAoB,KAAI;AAC3D,QAAA,IAAI,MAAM,IAAI,OAAO,EAAE;AACrB,YAAA,QAAQ,CAAC;AACP,gBAAA,OAAO,EAAE,SAAS;AAClB,gBAAA,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE;AAC/B,gBAAA,KAAK,EAAE,CAAA,sBAAA,CAAwB;AAC/B,gBAAA,WAAW,EAAE,WAAW;gBACxB,GAAG,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA,IAAA,EAAO,MAAM,CAAA,CAAE;AAC/C,aAAA,CAAC;QACJ;AACF,IAAA,CAAC,EACD,CAAC,QAAQ,CAAC,CACX;IAED,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE;AAC9D;;;;"}
@@ -0,0 +1,2 @@
1
+ import { ChainId } from '@ape.swap/apeswap-lists';
2
+ export declare const useTokenPrice: (inputTokenAddress?: string, chainId?: ChainId) => number | undefined;
@@ -0,0 +1,14 @@
1
+ import '@ape.swap/apeswap-lists';
2
+ import useTokenPrices from './useTokenPrices.js';
3
+
4
+ const useTokenPrice = (inputTokenAddress, chainId) => {
5
+ const { data: tokenPrices } = useTokenPrices();
6
+ if (!chainId)
7
+ return;
8
+ return tokenPrices?.[chainId]?.find((tokenPrice) => {
9
+ return (tokenPrice?.tokenAddress?.toLowerCase() === inputTokenAddress?.toLowerCase() && tokenPrice.chainId === chainId);
10
+ })?.price;
11
+ };
12
+
13
+ export { useTokenPrice };
14
+ //# sourceMappingURL=useTokenPrice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTokenPrice.js","sources":["../../../src/state/tokenPrices/useTokenPrice.ts"],"sourcesContent":["import { ChainId, WNATIVE } from '@ape.swap/apeswap-lists'\nimport useTokenPrices from './useTokenPrices'\n\nexport const useTokenPrice = (inputTokenAddress?: string, chainId?: ChainId): number | undefined => {\n const { data: tokenPrices } = useTokenPrices()\n if (!inputTokenAddress || !chainId) return\n return tokenPrices?.[chainId]?.find((tokenPrice) => {\n if (inputTokenAddress === 'ETH' && chainId !== ChainId.GRAPHLINQ) {\n return tokenPrice?.tokenAddress?.toLowerCase() === WNATIVE[chainId]?.address?.[chainId]?.toLowerCase()\n } else\n return (\n tokenPrice?.tokenAddress?.toLowerCase() === inputTokenAddress?.toLowerCase() && tokenPrice.chainId === chainId\n )\n })?.price\n}\n"],"names":[],"mappings":";;;MAGa,aAAa,GAAG,CAAC,iBAA0B,EAAE,OAAiB,KAAwB;IACjG,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,cAAc,EAAE;AAC9C,IAAA,IAA0B,CAAC,OAAO;QAAE;IACpC,OAAO,WAAW,GAAG,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC,UAAU,KAAI;QAI/C,QACE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,iBAAiB,EAAE,WAAW,EAAE,IAAI,UAAU,CAAC,OAAO,KAAK,OAAO;IAEpH,CAAC,CAAC,EAAE,KAAK;AACX;;;;"}
@@ -1,3 +1,4 @@
1
1
  export declare const localeFormat: (number: number, precision?: number) => string;
2
- export declare const formatNumberSI: (num?: number | string | BigNumber, digits?: number) => string;
2
+ export declare const formatSignificantDigits: (num: number, digits: number) => string;
3
+ export declare const formatNumberSI: (num?: number | string, digits?: number, useKSuffix?: boolean) => string | undefined;
3
4
  export declare const formatUSDNumber: (input: string | number) => string;
@@ -6,31 +6,65 @@ const localeFormat = (number, precision = 2) => {
6
6
  minimumFractionDigits: precision,
7
7
  maximumFractionDigits: precision,
8
8
  };
9
- return number.toLocaleString('en-US', options);
9
+ const formatted = number.toLocaleString('en-US', options);
10
+ // Remove .0, .00, .000, etc. when all decimal places are zero (but keep .0001, .01, etc.)
11
+ return formatted.replace(/\.0+$/, '');
10
12
  };
11
- const formatNumberSI = (num, digits = 2) => {
12
- if (!num)
13
+ const formatSignificantDigits = (num, digits) => {
14
+ const bn = new BigNumber(num);
15
+ if (bn.isNaN() || bn.isZero()) {
13
16
  return '0';
14
- const number = typeof num === 'string' ? parseFloat(num) : typeof num === 'number' ? num : num.toNumber();
15
- const suffixes = [
16
- { value: 1e12, symbol: 'T' },
17
- { value: 1e9, symbol: 'B' },
18
- { value: 1e6, symbol: 'M' },
19
- { value: 1, symbol: '' },
20
- ];
21
- const suffix = suffixes.find(({ value }) => number >= value);
22
- if (number > 1e6 && suffix) {
23
- return `${localeFormat(number / suffix.value)} ${suffix.symbol}`;
24
- }
25
- if (number > 100) {
26
- return localeFormat(Math.round(number), 0);
27
- }
28
- if (number > 1) {
29
- return localeFormat(number);
30
- }
31
- if (number === 0)
17
+ }
18
+ // Use toSignificantDigits (sd) to round to significant digits
19
+ const rounded = bn.sd(digits || 3);
20
+ // Convert to string and remove trailing zeros
21
+ return rounded.toFixed().replace(/\.?0+$/, '');
22
+ };
23
+ const formatNumberSI = (num, digits = 2, useKSuffix = false) => {
24
+ if (num === undefined || num === null)
25
+ return undefined;
26
+ let number = typeof num === 'string' ? parseFloat(num) : num;
27
+ if (isNaN(number)) {
28
+ number = 0;
29
+ }
30
+ // Handle negative numbers by formatting the absolute value and adding the sign back
31
+ const isNegative = number < 0;
32
+ const absNumber = Math.abs(number);
33
+ const suffixes = useKSuffix
34
+ ? [
35
+ { value: 1e12, symbol: 'T' },
36
+ { value: 1e9, symbol: 'B' },
37
+ { value: 1e6, symbol: 'M' },
38
+ { value: 1e3, symbol: 'K' },
39
+ { value: 1, symbol: '' },
40
+ ]
41
+ : [
42
+ { value: 1e12, symbol: 'T' },
43
+ { value: 1e9, symbol: 'B' },
44
+ { value: 1e6, symbol: 'M' },
45
+ { value: 1, symbol: '' },
46
+ ];
47
+ const suffix = suffixes.find(({ value }) => absNumber >= value);
48
+ if (useKSuffix && absNumber >= 1e3 && suffix && suffix.symbol) {
49
+ const formatted = `${localeFormat(absNumber / suffix.value, digits)}${suffix.symbol}`;
50
+ return isNegative ? `-${formatted}` : formatted;
51
+ }
52
+ if (absNumber >= 1e6 && suffix) {
53
+ const formatted = `${localeFormat(absNumber / suffix.value, digits)}${suffix.symbol}`;
54
+ return isNegative ? `-${formatted}` : formatted;
55
+ }
56
+ if (absNumber >= 1000) {
57
+ const formatted = localeFormat(Math.round(absNumber), 0);
58
+ return isNegative ? `-${formatted}` : formatted;
59
+ }
60
+ if (absNumber > 1) {
61
+ const formatted = localeFormat(absNumber, digits);
62
+ return isNegative ? `-${formatted}` : formatted;
63
+ }
64
+ if (absNumber === 0)
32
65
  return '0';
33
- return localeFormat(number, digits);
66
+ const formatted = formatSignificantDigits(absNumber, digits);
67
+ return isNegative ? `-${formatted}` : formatted;
34
68
  };
35
69
  const formatUSDNumber = (input) => {
36
70
  const number = new BigNumber(input);
@@ -48,5 +82,5 @@ const formatUSDNumber = (input) => {
48
82
  return parseFloat(number.toFixed(2)).toLocaleString('en-US');
49
83
  };
50
84
 
51
- export { formatNumberSI, formatUSDNumber, localeFormat };
85
+ export { formatNumberSI, formatSignificantDigits, formatUSDNumber, localeFormat };
52
86
  //# sourceMappingURL=formatNumber.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"formatNumber.js","sources":["../../src/utils/formatNumber.ts"],"sourcesContent":["import { BigNumber } from 'bignumber.js'\n\n// Ideally let's keep all formating in this file and DO NOT CREATE MORE FILES\n\nexport const localeFormat = (number: number, precision = 2) => {\n const options = {\n minimumFractionDigits: precision,\n maximumFractionDigits: precision,\n }\n return number.toLocaleString('en-US', options)\n}\n\nexport const formatNumberSI = (num?: number | string | BigNumber, digits = 2): string => {\n if (!num) return '0'\n const number = typeof num === 'string' ? parseFloat(num) : typeof num === 'number' ? num : num.toNumber()\n\n const suffixes = [\n { value: 1e12, symbol: 'T' },\n { value: 1e9, symbol: 'B' },\n { value: 1e6, symbol: 'M' },\n { value: 1, symbol: '' },\n ]\n const suffix = suffixes.find(({ value }) => number >= value)\n\n if (number > 1e6 && suffix) {\n return `${localeFormat(number / suffix.value)} ${suffix.symbol}`\n }\n\n if (number > 100) {\n return localeFormat(Math.round(number), 0)\n }\n\n if (number > 1) {\n return localeFormat(number)\n }\n\n if (number === 0) return '0'\n return localeFormat(number, digits)\n}\n\nexport const formatUSDNumber = (input: string | number): string => {\n const number = new BigNumber(input)\n if (number.isNaN()) return '0'\n\n // If the number is greater than 0 but less than 0.01\n if (number.gt(0) && number.lt(0.01)) {\n return '<0.01'\n }\n // If the number is greater than 1k, round to no decimals.\n if (number.gt(1000)) {\n return number.toNumber().toLocaleString('en-US', { maximumFractionDigits: 0 })\n }\n // Note: Between 1k and 0.01 show 2 decimals\n return parseFloat(number.toFixed(2)).toLocaleString('en-US')\n}\n"],"names":[],"mappings":";;AAEA;AAEO,MAAM,YAAY,GAAG,CAAC,MAAc,EAAE,SAAS,GAAG,CAAC,KAAI;AAC5D,IAAA,MAAM,OAAO,GAAG;AACd,QAAA,qBAAqB,EAAE,SAAS;AAChC,QAAA,qBAAqB,EAAE,SAAS;KACjC;IACD,OAAO,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC;AAChD;AAEO,MAAM,cAAc,GAAG,CAAC,GAAiC,EAAE,MAAM,GAAG,CAAC,KAAY;AACtF,IAAA,IAAI,CAAC,GAAG;AAAE,QAAA,OAAO,GAAG;AACpB,IAAA,MAAM,MAAM,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE;AAEzG,IAAA,MAAM,QAAQ,GAAG;AACf,QAAA,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;AAC5B,QAAA,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;AAC3B,QAAA,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;AAC3B,QAAA,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;KACzB;AACD,IAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,MAAM,IAAI,KAAK,CAAC;AAE5D,IAAA,IAAI,MAAM,GAAG,GAAG,IAAI,MAAM,EAAE;AAC1B,QAAA,OAAO,CAAA,EAAG,YAAY,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,MAAM,EAAE;IAClE;AAEA,IAAA,IAAI,MAAM,GAAG,GAAG,EAAE;QAChB,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC5C;AAEA,IAAA,IAAI,MAAM,GAAG,CAAC,EAAE;AACd,QAAA,OAAO,YAAY,CAAC,MAAM,CAAC;IAC7B;IAEA,IAAI,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,GAAG;AAC5B,IAAA,OAAO,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC;AACrC;AAEO,MAAM,eAAe,GAAG,CAAC,KAAsB,KAAY;AAChE,IAAA,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,KAAK,CAAC;IACnC,IAAI,MAAM,CAAC,KAAK,EAAE;AAAE,QAAA,OAAO,GAAG;;AAG9B,IAAA,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;AACnC,QAAA,OAAO,OAAO;IAChB;;AAEA,IAAA,IAAI,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;AACnB,QAAA,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,qBAAqB,EAAE,CAAC,EAAE,CAAC;IAChF;;AAEA,IAAA,OAAO,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC;AAC9D;;;;"}
1
+ {"version":3,"file":"formatNumber.js","sources":["../../src/utils/formatNumber.ts"],"sourcesContent":["import { BigNumber } from 'bignumber.js'\n\n// Ideally let's keep all formating in this file and DO NOT CREATE MORE FILES\n\nexport const localeFormat = (number: number, precision = 2) => {\n const options = {\n minimumFractionDigits: precision,\n maximumFractionDigits: precision,\n }\n const formatted = number.toLocaleString('en-US', options)\n // Remove .0, .00, .000, etc. when all decimal places are zero (but keep .0001, .01, etc.)\n return formatted.replace(/\\.0+$/, '')\n}\n\nexport const formatSignificantDigits = (num: number, digits: number): string => {\n const bn = new BigNumber(num)\n\n if (bn.isNaN() || bn.isZero()) {\n return '0'\n }\n\n // Use toSignificantDigits (sd) to round to significant digits\n const rounded = bn.sd(digits || 3)\n\n // Convert to string and remove trailing zeros\n return rounded.toFixed().replace(/\\.?0+$/, '')\n}\n\nexport const formatNumberSI = (num?: number | string, digits = 2, useKSuffix = false): string | undefined => {\n if (num === undefined || num === null) return undefined\n let number = typeof num === 'string' ? parseFloat(num) : num\n\n if (isNaN(number)) {\n number = 0\n }\n\n // Handle negative numbers by formatting the absolute value and adding the sign back\n const isNegative = number < 0\n const absNumber = Math.abs(number)\n\n const suffixes = useKSuffix\n ? [\n { value: 1e12, symbol: 'T' },\n { value: 1e9, symbol: 'B' },\n { value: 1e6, symbol: 'M' },\n { value: 1e3, symbol: 'K' },\n { value: 1, symbol: '' },\n ]\n : [\n { value: 1e12, symbol: 'T' },\n { value: 1e9, symbol: 'B' },\n { value: 1e6, symbol: 'M' },\n { value: 1, symbol: '' },\n ]\n\n const suffix = suffixes.find(({ value }) => absNumber >= value)\n\n if (useKSuffix && absNumber >= 1e3 && suffix && suffix.symbol) {\n const formatted = `${localeFormat(absNumber / suffix.value, digits)}${suffix.symbol}`\n return isNegative ? `-${formatted}` : formatted\n }\n\n if (absNumber >= 1e6 && suffix) {\n const formatted = `${localeFormat(absNumber / suffix.value, digits)}${suffix.symbol}`\n return isNegative ? `-${formatted}` : formatted\n }\n\n if (absNumber >= 1000) {\n const formatted = localeFormat(Math.round(absNumber), 0)\n return isNegative ? `-${formatted}` : formatted\n }\n\n if (absNumber > 1) {\n const formatted = localeFormat(absNumber, digits)\n return isNegative ? `-${formatted}` : formatted\n }\n\n if (absNumber === 0) return '0'\n\n const formatted = formatSignificantDigits(absNumber, digits)\n return isNegative ? `-${formatted}` : formatted\n}\n\nexport const formatUSDNumber = (input: string | number): string => {\n const number = new BigNumber(input)\n if (number.isNaN()) return '0'\n\n // If the number is greater than 0 but less than 0.01\n if (number.gt(0) && number.lt(0.01)) {\n return '<0.01'\n }\n // If the number is greater than 1k, round to no decimals.\n if (number.gt(1000)) {\n return number.toNumber().toLocaleString('en-US', { maximumFractionDigits: 0 })\n }\n // Note: Between 1k and 0.01 show 2 decimals\n return parseFloat(number.toFixed(2)).toLocaleString('en-US')\n}\n"],"names":[],"mappings":"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"}
@@ -14,6 +14,7 @@ import BigNumber from 'bignumber.js';
14
14
  import { formatNumberSI } from '../../../../utils/formatNumber.js';
15
15
  import { getTimePeriods } from '../../../../utils/getTimePeriods.js';
16
16
  import { useSDKConfig } from '../../../../state/useSDKConfig.js';
17
+ import RakuraiComponent from '../../../RakuraiComponent/RakuraiComponent.js';
17
18
 
18
19
  const ActiveBondRows = ({ chain, bonds, hideTitles, showHotBonds }) => {
19
20
  const { namingPreference } = useSDKConfig();
@@ -24,7 +25,7 @@ const ActiveBondRows = ({ chain, bonds, hideTitles, showHotBonds }) => {
24
25
  overflow: 'hidden',
25
26
  width: '100%',
26
27
  marginTop: '0px',
27
- }, className: "bonds-card-container", children: [[ChainId.SOL, ChainId.MONAD].includes(chain) && !hideTitles && jsx(ChainBanner, { chainId: chain }), bonds?.map((bondFromMap, index) => {
28
+ }, className: "bonds-card-container", children: [[ChainId.MONAD].includes(chain) && !hideTitles && jsx(ChainBanner, { chainId: chain }), chain === ChainId.SOL && jsx(RakuraiComponent, {}), bonds?.map((bondFromMap, index) => {
28
29
  // PRE TGE ROWS
29
30
  if (bondFromMap.billType === 'fcfs') {
30
31
  const bond = bondFromMap;
@@ -1 +1 @@
1
- {"version":3,"file":"ActiveBondRows.js","sources":["../../../../../src/views/Bonds/components/BondRows/ActiveBondRows.tsx"],"sourcesContent":["import React, { useState } from 'react'\nimport { AnimatePresence, motion } from 'framer-motion'\nimport ChainTitle from './ChainTitle'\nimport BondRow from './BondRow'\nimport { Flex } from 'theme-ui'\nimport { BondsData } from '../../../../types/bonds'\nimport { BaseBondConfig, ChainId, MarketingCampaign } from '@ape.swap/apeswap-lists'\nimport SwiperProvider from '../../../../contexts/SwiperProvider'\nimport HotBondCards from '../HotBondCards'\nimport ChainBanner from '../ChainBanner/ChainBanner'\nimport {\n getRemainingTokensString,\n getVestingTermsString,\n getVestingTermsTooltipString,\n remainingPercentage,\n} from '../../../../utils/displayHelpers'\nimport { getBalanceNumber } from '../../../../utils/getBalanceNumber'\nimport BigNumber from 'bignumber.js'\nimport { formatNumberSI } from '../../../../utils/formatNumber'\nimport { getTimePeriods } from '../../../../utils/getTimePeriods'\nimport { useSDKConfig } from '../../../../state/useSDKConfig'\n\n// Record<string, (BondsData | BaseBondConfig)[]>\n\nexport interface ActiveBondRowsProps {\n chain: number\n bonds: (BondsData | BaseBondConfig)[]\n hideTitles: boolean\n showHotBonds: boolean\n}\n\nconst ActiveBondRows: React.FC<ActiveBondRowsProps> = ({ chain, bonds, hideTitles, showHotBonds }) => {\n const { namingPreference } = useSDKConfig()\n const [isOpen, setIsOpen] = useState<boolean>(true)\n const key = chain\n\n return (\n <Flex className=\"bondrowswithtitle\" key={key}>\n <AnimatePresence initial={false}>\n <Flex onClick={() => setIsOpen(!isOpen)} sx={{ cursor: 'pointer' }}>\n <ChainTitle\n chain={chain}\n pt={'5px'}\n hideTitles={(bonds.length <= 0 && chain !== ChainId.SOL && chain !== ChainId.MONAD) || hideTitles}\n isOpen={isOpen}\n />\n </Flex>\n {isOpen && (bonds.length > 0 || chain === ChainId.SOL || chain === ChainId.MONAD) && (\n <motion.div\n initial={{ height: 0, overflow: 'hidden' }}\n animate={{ height: 'fit-content', overflow: 'hidden', transitionEnd: { overflow: 'visible' } }}\n exit={{ height: 0, overflow: 'hidden' }}\n sx={{\n position: 'relative',\n overflow: 'hidden',\n width: '100%',\n marginTop: '0px',\n }}\n key={key}\n className=\"bonds-card-container\"\n >\n {[ChainId.SOL, ChainId.MONAD].includes(chain) && !hideTitles && <ChainBanner chainId={chain} />}\n {bonds?.map((bondFromMap, index) => {\n // PRE TGE ROWS\n\n if (bondFromMap.billType === 'fcfs') {\n const bond = bondFromMap as BondsData\n const totalPrincipalBilled =\n Math.round(\n getBalanceNumber(\n new BigNumber(bond?.totalPrincipalBilled ?? '0'),\n bond?.lpToken?.decimals?.[bond?.chainId] as number,\n ),\n ) / (bond.initPrice ?? 0)\n const raiseGoal =\n Math.round(\n getBalanceNumber(\n new BigNumber(bond?.totalRaise ?? '0'),\n bond?.lpToken?.decimals?.[bond?.chainId] as number,\n ),\n ) / (bond.initPrice ?? 0)\n\n const tokensRemaining = raiseGoal - totalPrincipalBilled\n const tokensRemainingUSD = tokensRemaining * (bond?.initPrice ?? 0)\n const percentageAvailable = 100 - Math.floor((totalPrincipalBilled * 100) / raiseGoal)\n const earnToken = bond?.earnToken?.symbol\n\n const baseBonus = bond?.trueBondPrices?.[0]?.bonus ?? 0\n const airdropBonus = bond?.airdropBonus ?? 0\n const bonus = baseBonus + airdropBonus\n const initialRelease = (bond?.initialRelease ?? 0) * 100\n\n const now = new Date().getTime()\n const saleFinishTime = (bond?.finishTime ?? 0) * 1000\n const saleHasFinished = now > saleFinishTime || bond.finalized\n\n return (\n <BondRow\n key={`${bond.contractAddress}-${bond.chainId}-${index}`}\n bondAddress={bond.contractAddress?.[bond.chainId] as string}\n bondChain={bond.chainId}\n marketingCampaign={bond.marketingCampaign as MarketingCampaign}\n payoutToken={bond.earnToken}\n billType={bond.billType}\n tag={bond.tags?.[0]}\n bonus={saleHasFinished ? undefined : `${bonus}%`}\n airdropTooltip={bond.airdropTooltip}\n percentageAvailable={percentageAvailable}\n remainingTokensString={\n saleHasFinished\n ? `0 ${earnToken} ($0) `\n : `${formatNumberSI(tokensRemaining, 0)} ${earnToken} ($${formatNumberSI(tokensRemainingUSD, 2)})`\n }\n vestingTermString={\n saleHasFinished\n ? '-'\n : initialRelease === 100\n ? `0 D`\n : `${getTimePeriods(bond.vestingTerm).months} Mo`\n }\n projectURL={bond.projectLink}\n twitterURL={bond.twitter}\n bondSoldOut={saleHasFinished}\n shortDescription={bond.shortDescription}\n />\n )\n } else {\n // POST TGE BONDS AKA NORMAL BONDS\n\n const bond = bondFromMap as BondsData\n const bondAddress = bond?.contractAddress?.[bond?.chainId] as string\n const remainingTokensString = getRemainingTokensString(bond)\n return (\n <BondRow\n key={`${bondAddress}-${bond.chainId}-${index}`}\n bondAddress={bondAddress}\n bondChain={bond.chainId}\n marketingCampaign={bond.marketingCampaign as MarketingCampaign}\n payoutToken={bond.earnToken}\n billType={bond.billType}\n tag={bond.tags?.[0]}\n trueBondPrices={namingPreference === 'Bonus' ? bond.trueBondPrices : undefined}\n minTier={bond?.minTier}\n vestingTermString={getVestingTermsString(bond)}\n vestingCliffString={getVestingTermsTooltipString(bond)}\n percentageAvailable={remainingPercentage(bond)}\n remainingTokensString={remainingTokensString}\n projectURL={bond.projectLink}\n twitterURL={bond.twitter}\n bonus={\n namingPreference === 'Discount'\n ? `${bond?.trueBondPrices?.[0]?.discountWithFee?.toFixed(2)}%`\n : undefined\n }\n shortDescription={bond.shortDescription}\n cgId={bond.cgId}\n dexscreener={bond?.dexscreener}\n />\n )\n }\n })}\n {showHotBonds && (\n <SwiperProvider>\n <HotBondCards />\n </SwiperProvider>\n )}\n </motion.div>\n )}\n </AnimatePresence>\n </Flex>\n )\n}\n\nexport default ActiveBondRows\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"ActiveBondRows.js","sources":["../../../../../src/views/Bonds/components/BondRows/ActiveBondRows.tsx"],"sourcesContent":["import React, { useState } from 'react'\nimport { AnimatePresence, motion } from 'framer-motion'\nimport ChainTitle from './ChainTitle'\nimport BondRow from './BondRow'\nimport { Flex } from 'theme-ui'\nimport { BondsData } from '../../../../types/bonds'\nimport { BaseBondConfig, ChainId, MarketingCampaign } from '@ape.swap/apeswap-lists'\nimport SwiperProvider from '../../../../contexts/SwiperProvider'\nimport HotBondCards from '../HotBondCards'\nimport ChainBanner from '../ChainBanner/ChainBanner'\nimport {\n getRemainingTokensString,\n getVestingTermsString,\n getVestingTermsTooltipString,\n remainingPercentage,\n} from '../../../../utils/displayHelpers'\nimport { getBalanceNumber } from '../../../../utils/getBalanceNumber'\nimport BigNumber from 'bignumber.js'\nimport { formatNumberSI } from '../../../../utils/formatNumber'\nimport { getTimePeriods } from '../../../../utils/getTimePeriods'\nimport { useSDKConfig } from '../../../../state/useSDKConfig'\nimport RakuraiComponent from '../../../RakuraiComponent/RakuraiComponent'\n\n// Record<string, (BondsData | BaseBondConfig)[]>\n\nexport interface ActiveBondRowsProps {\n chain: number\n bonds: (BondsData | BaseBondConfig)[]\n hideTitles: boolean\n showHotBonds: boolean\n}\n\nconst ActiveBondRows: React.FC<ActiveBondRowsProps> = ({ chain, bonds, hideTitles, showHotBonds }) => {\n const { namingPreference } = useSDKConfig()\n const [isOpen, setIsOpen] = useState<boolean>(true)\n const key = chain\n\n return (\n <Flex className=\"bondrowswithtitle\" key={key}>\n <AnimatePresence initial={false}>\n <Flex onClick={() => setIsOpen(!isOpen)} sx={{ cursor: 'pointer' }}>\n <ChainTitle\n chain={chain}\n pt={'5px'}\n hideTitles={(bonds.length <= 0 && chain !== ChainId.SOL && chain !== ChainId.MONAD) || hideTitles}\n isOpen={isOpen}\n />\n </Flex>\n {isOpen && (bonds.length > 0 || chain === ChainId.SOL || chain === ChainId.MONAD) && (\n <motion.div\n initial={{ height: 0, overflow: 'hidden' }}\n animate={{ height: 'fit-content', overflow: 'hidden', transitionEnd: { overflow: 'visible' } }}\n exit={{ height: 0, overflow: 'hidden' }}\n sx={{\n position: 'relative',\n overflow: 'hidden',\n width: '100%',\n marginTop: '0px',\n }}\n key={key}\n className=\"bonds-card-container\"\n >\n {[ChainId.MONAD].includes(chain) && !hideTitles && <ChainBanner chainId={chain} />}\n {chain === ChainId.SOL && <RakuraiComponent />}\n {bonds?.map((bondFromMap, index) => {\n // PRE TGE ROWS\n\n if (bondFromMap.billType === 'fcfs') {\n const bond = bondFromMap as BondsData\n const totalPrincipalBilled =\n Math.round(\n getBalanceNumber(\n new BigNumber(bond?.totalPrincipalBilled ?? '0'),\n bond?.lpToken?.decimals?.[bond?.chainId] as number,\n ),\n ) / (bond.initPrice ?? 0)\n const raiseGoal =\n Math.round(\n getBalanceNumber(\n new BigNumber(bond?.totalRaise ?? '0'),\n bond?.lpToken?.decimals?.[bond?.chainId] as number,\n ),\n ) / (bond.initPrice ?? 0)\n\n const tokensRemaining = raiseGoal - totalPrincipalBilled\n const tokensRemainingUSD = tokensRemaining * (bond?.initPrice ?? 0)\n const percentageAvailable = 100 - Math.floor((totalPrincipalBilled * 100) / raiseGoal)\n const earnToken = bond?.earnToken?.symbol\n\n const baseBonus = bond?.trueBondPrices?.[0]?.bonus ?? 0\n const airdropBonus = bond?.airdropBonus ?? 0\n const bonus = baseBonus + airdropBonus\n const initialRelease = (bond?.initialRelease ?? 0) * 100\n\n const now = new Date().getTime()\n const saleFinishTime = (bond?.finishTime ?? 0) * 1000\n const saleHasFinished = now > saleFinishTime || bond.finalized\n\n return (\n <BondRow\n key={`${bond.contractAddress}-${bond.chainId}-${index}`}\n bondAddress={bond.contractAddress?.[bond.chainId] as string}\n bondChain={bond.chainId}\n marketingCampaign={bond.marketingCampaign as MarketingCampaign}\n payoutToken={bond.earnToken}\n billType={bond.billType}\n tag={bond.tags?.[0]}\n bonus={saleHasFinished ? undefined : `${bonus}%`}\n airdropTooltip={bond.airdropTooltip}\n percentageAvailable={percentageAvailable}\n remainingTokensString={\n saleHasFinished\n ? `0 ${earnToken} ($0) `\n : `${formatNumberSI(tokensRemaining, 0)} ${earnToken} ($${formatNumberSI(tokensRemainingUSD, 2)})`\n }\n vestingTermString={\n saleHasFinished\n ? '-'\n : initialRelease === 100\n ? `0 D`\n : `${getTimePeriods(bond.vestingTerm).months} Mo`\n }\n projectURL={bond.projectLink}\n twitterURL={bond.twitter}\n bondSoldOut={saleHasFinished}\n shortDescription={bond.shortDescription}\n />\n )\n } else {\n // POST TGE BONDS AKA NORMAL BONDS\n\n const bond = bondFromMap as BondsData\n const bondAddress = bond?.contractAddress?.[bond?.chainId] as string\n const remainingTokensString = getRemainingTokensString(bond)\n return (\n <BondRow\n key={`${bondAddress}-${bond.chainId}-${index}`}\n bondAddress={bondAddress}\n bondChain={bond.chainId}\n marketingCampaign={bond.marketingCampaign as MarketingCampaign}\n payoutToken={bond.earnToken}\n billType={bond.billType}\n tag={bond.tags?.[0]}\n trueBondPrices={namingPreference === 'Bonus' ? bond.trueBondPrices : undefined}\n minTier={bond?.minTier}\n vestingTermString={getVestingTermsString(bond)}\n vestingCliffString={getVestingTermsTooltipString(bond)}\n percentageAvailable={remainingPercentage(bond)}\n remainingTokensString={remainingTokensString}\n projectURL={bond.projectLink}\n twitterURL={bond.twitter}\n bonus={\n namingPreference === 'Discount'\n ? `${bond?.trueBondPrices?.[0]?.discountWithFee?.toFixed(2)}%`\n : undefined\n }\n shortDescription={bond.shortDescription}\n cgId={bond.cgId}\n dexscreener={bond?.dexscreener}\n />\n )\n }\n })}\n {showHotBonds && (\n <SwiperProvider>\n <HotBondCards />\n </SwiperProvider>\n )}\n </motion.div>\n )}\n </AnimatePresence>\n </Flex>\n )\n}\n\nexport default ActiveBondRows\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"BuyComponent.js","sources":["../../../src/views/BuyBond/BuyComponent.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useState } from 'react'\nimport { BigNumber } from 'bignumber.js'\nimport { convertToBigish } from '../../utils/convertToBigish'\nimport ABI_DEPOSIT from '../../config/abi/deposit.json'\nimport ABI_DEPOSIT_SIG from '../../config/abi/depositSig.json'\nimport { PurchasedBondData } from './BuyBondModal'\nimport {\n useChainId,\n useSendTransaction,\n useWriteContract,\n // useConfig\n} from 'wagmi'\nimport useModal from '../../hooks/useModal'\n// import ZapModal from '../ZapModal'\nimport { BillVersion, ChainId, LaunchBondTiers, MarketingCampaign } from '@ape.swap/apeswap-lists'\nimport TokenSelectorPanel from '../../components/TokenSelectorPanel'\nimport { useApproval } from '../../state/allowance/useAllowance'\nimport { SoulZapTokenManager } from '../../config/constants/addresses'\nimport useSoulZapBondQuote from '../../state/zap/useSoulZapBondQuote'\nimport { parseEther } from 'viem'\nimport useBondsData from '../../state/bonds/useBondsData'\nimport useTokenFromZapList from '../../hooks/useTokenFromZapList'\nimport { useMonitorTx } from '../../hooks/useMonitorTx'\nimport { usePopups } from '../../state/popups/usePopups'\nimport {\n formatNumber,\n formatUSDNumber,\n getMaxBuy,\n getPayoutAmount,\n getPrincipalAmount,\n getRawBonus,\n} from '../../utils/displayHelpers'\nimport { useSDKConfig } from '../../state/useSDKConfig'\nimport { LifiSupported, zapSupported } from '../../config/constants/variables'\nimport { getSymbol } from '../../utils/getNativeTicker'\nimport { useSendReferenceId } from '../../hooks/useSendReferenceId'\nimport ConnectButton from '../../components/ConnectButton'\nimport BondModalHeader from './components/BondModalHeader'\nimport BondCards from './components/BondCards/BondCards'\nimport Estimations from './components/Estimations'\nimport ProjectDescription from './components/ProjectDescription'\nimport track from '../../utils/track'\nimport { remove0xPrefix } from '../../utils/remove0xPrefix'\nimport useTierPoints, { getUserTier, TIERS_WEIGHT } from '../../state/tiers/useTierPoints'\nimport NewRateModal from './components/NewRateModal/NewRateModal'\nimport NoBonusModal from './components/NoBonusModal/NoBonusModal'\nimport useTierProofSignature from '../../state/bonds/useTierProofSignature'\nimport GetUpToComponent from './components/GetUpToComponent/GetUpToComponent'\nimport SafeHTMLComponent from '../../components/SafeHTMLComponent'\nimport useSortedZapList from '../../hooks/useSortedZapList'\nimport TransactionModal from '../TransactionModal/TransactionModal'\nimport { reportError } from '../../utils/reportError'\nimport { findHighestTrueBondPrice } from '../../utils/bondPriceHelpers'\nimport { MCBuyComponentStyles } from '../../utils/campaignStyles'\nimport useEVMAccount from '../../hooks/accounts/useEVMAccount'\nimport LifiModal from '../LifiModal/LifiModal'\nimport { SHORT_NETWORK_LABEL } from '../../config/constants/chains'\nimport Flex from '../../components/uikit-sdk/Flex'\nimport Text from '../../components/uikit-sdk/Text'\nimport Button from '../../components/uikit-sdk/Button/Button'\n// import { simulateContract } from 'wagmi/actions'\n\nexport interface BuyComponentProps {\n onDismiss?: () => void // this is only the modal\n bondAddress?: string\n bondChain?: number\n handlePurchasedBond?: (data: PurchasedBondData) => void\n isProjectView?: boolean\n}\n\nconst BuyComponent: React.FC<BuyComponentProps> = ({\n onDismiss,\n bondAddress,\n bondChain,\n handlePurchasedBond,\n isProjectView,\n}) => {\n // Hooks\n // const config = useConfig()\n const SDKConfig = useSDKConfig()\n const userChainId = useChainId()\n const { address: account } = useEVMAccount()\n const { writeContractAsync } = useWriteContract()\n const { sendTransactionAsync } = useSendTransaction()\n const { data: bonds, refetch: refetchBondState } = useBondsData()\n const sendReferenceId = useSendReferenceId()\n const { data: userPoints } = useTierPoints()\n const bondData = bonds?.find(\n (bond) => bond?.contractAddress?.[bond.chainId]?.toLowerCase() === bondAddress?.toLowerCase(),\n )!\n\n // Tier Gating\n const userTier = getUserTier(userPoints ?? '0')\n const minTier = bondData?.minTier !== undefined ? bondData.minTier : null\n const isUserRestricted = minTier !== null && (userTier === null || userTier < minTier)\n const trueBondPriceData = findHighestTrueBondPrice(userPoints, bondData?.trueBondPrices)\n const trueBondPrice = trueBondPriceData?.trueBondPrice\n const { data: tierProofSig } = useTierProofSignature(bondAddress, bondChain, isUserRestricted)\n\n // State\n const [buyTxHash, setBuyTxHash] = useState<string | undefined>()\n const [inputValue, setInputValue] = useState('')\n const [inputTokenString, setInputTokenString] = useState(bondData?.lpToken?.address?.[bondData.chainId])\n\n // On-chain Data\n const inputToken = useTokenFromZapList(inputTokenString, bondData?.chainId, bondData?.lpToken)\n const isZapSupported = zapSupported.includes(bondData?.chainId)\n\n const [fetchingZapQuote, zapData, zapDepositAmount, zapError, zapTrueBondPrice] = useSoulZapBondQuote(\n inputValue,\n inputToken,\n bondData,\n account,\n tierProofSig ?? undefined,\n )\n\n const { sortedZapList, isFetched: zapListFetched } = useSortedZapList(bondChain, bondData?.lpToken)\n const enrichedTokenData = sortedZapList.find((item) =>\n item.token === 'NATIVE' || inputToken === 'NATIVE'\n ? item.token === inputToken\n : item?.token?.address?.[bondChain as ChainId]?.toLowerCase() ===\n inputToken?.address?.[bondChain as ChainId]?.toLowerCase(),\n )\n const inputCurrencyBalance = enrichedTokenData?.balance\n const inputTokenPrice = enrichedTokenData?.price\n const rateChanged = parseFloat(zapTrueBondPrice ?? '0') > parseFloat(trueBondPrice ?? '0') * 1.01 && isZapSupported\n\n // Estimations\n const depositAmount = isZapSupported ? zapDepositAmount : inputValue\n const youSpendString = `${formatNumber(inputValue)} ${getSymbol(inputToken, bondData?.chainId)} = \n $${formatUSDNumber((parseFloat(inputValue) * (inputTokenPrice ?? 0)).toString())}`\n\n // Validations\n const exceedsRealMaxBuy = getMaxBuy(bondData, true).lte(getPayoutAmount(bondData, depositAmount, userPoints))\n const exceedsSafeMaxBuy = getMaxBuy(bondData, false)\n .times(isZapSupported ? 0.995 : 0.9995)\n .lte(getPayoutAmount(bondData, depositAmount, userPoints))\n const exceedsBalance = new BigNumber(inputCurrencyBalance ?? '0').lt(inputValue)\n const isPrincipalTokenLP = bondData?.lpToken?.symbol?.includes('-')\n\n // Loading State\n const [loadingTx, setLoadingTx] = useState(false)\n const { addToastError } = usePopups()\n const { isLoading: isConfirming, isSuccess: isConfirmed } = useMonitorTx(buyTxHash, userChainId)\n const load = loadingTx || (isConfirming && !isConfirmed)\n\n // State Handlers\n const handleCurrencySelect = useCallback((newInputToken: string) => {\n setInputValue('')\n setInputTokenString(newInputToken)\n }, [])\n\n const handleMaxButton = useCallback(() => {\n const balance = new BigNumber(inputCurrencyBalance ?? '0')\n const maxBuyAmount = getMaxBuy(bondData, SDKConfig.showLowValueBonds)\n\n if (!isZapSupported) {\n const maxPossibleUserPurchase = getPayoutAmount(bondData, balance.toString(), userPoints)\n const principalDecimals = bondData?.lpToken?.decimals?.[bondData?.chainId] ?? 18\n if (maxPossibleUserPurchase > maxBuyAmount.toNumber()) {\n console.log('user balance exceeds max buy limit, setting to max buy')\n const principalForMaxBuy = getPrincipalAmount(bondData, maxBuyAmount.toString(), userPoints)\n setInputValue(principalForMaxBuy.toFixed(principalDecimals))\n } else {\n console.log('balance is ok, can be used')\n setInputValue(balance.toFixed(principalDecimals))\n }\n } else {\n const principalForMaxBuy = getPrincipalAmount(bondData, maxBuyAmount.toString(), userPoints)\n const principalForMaxBuyUSD = principalForMaxBuy.times(bondData?.principalTokenPrice ?? 0)\n const maxBuyAmountInSelectedToken = principalForMaxBuyUSD.div(inputTokenPrice ?? 0)\n const decimals =\n enrichedTokenData?.token === 'NATIVE' ? 18 : (enrichedTokenData?.token.decimals[bondData?.chainId] ?? 18)\n\n if (balance.gte(maxBuyAmountInSelectedToken)) {\n setInputValue(maxBuyAmountInSelectedToken.toFixed(decimals))\n } else {\n setInputValue(balance.toFixed(decimals))\n }\n }\n }, [\n bondData,\n isZapSupported,\n userPoints,\n SDKConfig.showLowValueBonds,\n inputTokenPrice,\n enrichedTokenData?.token,\n inputCurrencyBalance,\n ])\n\n // const handleOpenZapModal = () => {\n // onOpenZapModal()\n // track({\n // event: 'getTokenClick',\n // chain: bondData?.chainId,\n // data: {\n // bond: bondData?.earnToken.symbol,\n // token: bondData?.lpToken?.symbol,\n // },\n // })\n // }\n\n // Approve & Purchase Functions\n const [approvalState, approveCallback] = useApproval(\n inputValue,\n inputToken ?? null,\n (isZapSupported\n ? SoulZapTokenManager?.[bondData?.chainId as ChainId]\n : bondData?.contractAddress?.[bondData.chainId]) ?? null,\n account ?? null,\n bondData?.chainId ?? null,\n )\n const handleApprove = async () => {\n return approveCallback().then(() => {\n track({\n event: 'approveBondClick',\n chain: userChainId,\n data: {\n cat: bondData?.billType,\n bond: bondData?.earnToken.symbol,\n },\n })\n })\n }\n\n const handleBuyCallback = async () => {\n const billAddress: `0x${string}` = bondData?.contractAddress?.[bondData.chainId] as `0x${string}`\n const decimals = bondData?.lpToken.decimals?.[bondData?.chainId] ?? 18\n track({\n event: 'buyBondClick',\n chain: bondChain,\n data: {\n cat: bondData?.billType,\n bond: bondData?.earnToken.symbol,\n value: parseFloat(inputValue) * (inputTokenPrice ?? 0),\n },\n })\n try {\n const maxPrice = new BigNumber(trueBondPrice ?? '0').times(102).div(100).toFixed(0) // multiply it by 1.02\n const amount = convertToBigish(inputValue, decimals)\n\n const shouldUseSig = bondData?.billVersion === BillVersion.V4 && SDKConfig.useTiers\n const args = shouldUseSig ? [amount, maxPrice, account, tierProofSig] : [amount, maxPrice, account]\n\n // const simulationResult = await simulateContract(config, {\n // address: billAddress,\n // abi: ABI_DEPOSIT_SIG,\n // functionName: 'deposit',\n // args: args,\n // chainId: bondData?.chainId as any,\n // account,\n // })\n // .then((e) => console.log('success!', e))\n // .catch((e) => {\n // console.error(e)\n // })\n\n const hash = await writeContractAsync({\n address: billAddress,\n abi: shouldUseSig ? ABI_DEPOSIT_SIG : ABI_DEPOSIT,\n functionName: 'deposit',\n args: args,\n chain: bondData?.chainId as any,\n account,\n })\n if (hash) {\n setBuyTxHash(hash)\n await sendReferenceId(billAddress, userChainId, hash)\n\n // lostProfit\n const bonusString = getRawBonus(bondData, depositAmount, TIERS_WEIGHT[LaunchBondTiers.Mythical])\n const noTierAmount = getRawBonus(bondData, depositAmount, '0')\n const lostProfit = parseFloat(bonusString) - parseFloat(noTierAmount)\n\n console.log(lostProfit)\n handlePurchasedBond?.({\n buyTxHash: hash,\n lostProfit: SDKConfig.useTiers && !userTier && lostProfit > 0.01 ? lostProfit.toFixed(2) : undefined,\n })\n track({\n event: 'bond',\n chain: bondChain,\n data: {\n cat: 'lp-buy',\n type: bondData?.billType ?? '',\n typedValue: inputValue,\n principalToken: bondData?.lpToken.symbol ?? '',\n earnToken: bondData?.earnToken.symbol ?? '',\n address: remove0xPrefix(bondData?.contractAddress?.[bondData.chainId]),\n usdAmount: parseFloat(inputValue) * (inputTokenPrice ?? 0),\n },\n })\n }\n } catch (error: any) {\n console.error('Buy error', error)\n reportError({\n apiUrl: SDKConfig?.urls?.apiV2,\n error,\n extraInfo: { type: 'buyBond', bondData, error },\n chainId: bondChain,\n account,\n })\n addToastError(error.shortMessage)\n }\n }\n const handleZapCallback = async () => {\n if (zapData && zapData?.txData?.to && zapData?.txData?.data) {\n console.log('Attempting zap tx')\n track({\n event: 'buyBondClick',\n chain: bondData?.chainId,\n data: {\n cat: bondData?.billType,\n bond: bondData?.earnToken.symbol ?? '',\n value: zapData.lpQuote.fromAmountUSD,\n },\n })\n try {\n console.log(zapData)\n const validated18DecimalAmount = new BigNumber(inputValue ?? '0').toFixed(18, 5)\n const parsedValue = parseEther(validated18DecimalAmount)\n\n const hash = await sendTransactionAsync({\n to: zapData.txData.to,\n data: zapData.txData.data,\n value: inputToken === 'NATIVE' ? parsedValue : undefined,\n })\n if (hash) {\n setBuyTxHash(hash)\n await sendReferenceId(bondData?.contractAddress?.[bondData.chainId] ?? '', userChainId, hash)\n\n // lostProfit\n const bonusString = getRawBonus(bondData, depositAmount, TIERS_WEIGHT[LaunchBondTiers.Mythical])\n const noTierAmount = getRawBonus(bondData, depositAmount, '0')\n const lostProfit = parseFloat(bonusString) - parseFloat(noTierAmount)\n\n handlePurchasedBond?.({\n buyTxHash: hash,\n lostProfit: SDKConfig.useTiers && !userTier && lostProfit > 0.01 ? lostProfit.toFixed(2) : undefined,\n })\n track({\n event: 'zap',\n chain: bondChain,\n data: {\n cat: 'bill',\n token1: getSymbol(inputToken),\n token2: `${bondData?.lpToken.symbol ?? ''}`,\n amount: parseFloat(inputValue) * (inputTokenPrice ?? 0),\n },\n })\n track({\n event: 'bond',\n chain: bondChain,\n data: {\n cat: 'zap-buy',\n type: bondData?.billType ?? '',\n principalToken: bondData?.lpToken.symbol ?? '',\n earnToken: bondData?.earnToken.symbol ?? '',\n address: remove0xPrefix(bondData?.contractAddress?.[bondData.chainId]),\n amount: inputValue,\n usdAmount: parseFloat(inputValue) * (inputTokenPrice ?? 0),\n },\n })\n }\n } catch (e: any) {\n console.log(e)\n addToastError(e.shortMessage)\n reportError({\n apiUrl: SDKConfig?.urls?.apiV2,\n error: e,\n extraInfo: { type: 'zapBuyBond', bondData, zapData, e },\n chainId: bondChain,\n account,\n })\n }\n }\n }\n\n const handleBothPurchases = () => {\n setLoadingTx(true)\n if (isZapSupported) {\n handleZapCallback().finally(() => setLoadingTx(false))\n } else {\n handleBuyCallback().finally(() => setLoadingTx(false))\n }\n }\n\n const handleOpenModal = () => {\n const bonus = trueBondPriceData?.bonusWithFee ?? 0\n if (bonus <= 0) {\n openNoBonusModal()\n } else {\n openTxModal()\n }\n }\n\n const openExternal = () => {\n if (bondData?.lpToken?.getLpUrl?.[bondData?.chainId]) {\n window.open(bondData.lpToken.getLpUrl?.[bondData?.chainId], '_blank')\n } else {\n window.open(\n `https://ape.bond/swap?outputcurrency=${bondData?.lpToken.address[bondData?.chainId]}&outputChain=${bondData?.chainId}`,\n '_blank',\n )\n }\n }\n\n // Modals\n const [onOpenLifiModal] = useModal(\n <LifiModal\n bondChain={bondChain}\n principalToken={isPrincipalTokenLP ? 'ETH' : bondData?.lpToken?.address?.[bondData?.chainId]}\n />,\n )\n\n const [openNewRateModal] = useModal(\n <NewRateModal\n bond={bondData}\n zapTrueBondPrice={zapTrueBondPrice}\n depositAmount={depositAmount}\n youSpendString={youSpendString}\n fetchingZapQuote={fetchingZapQuote}\n zapError={zapError}\n />,\n true,\n false,\n 'newRateModal',\n )\n\n const [openTxModal] = useModal(\n <TransactionModal\n txChain={bondChain}\n approvalState={approvalState}\n approveCallback={handleApprove}\n loadingTx={loadingTx}\n txCallback={handleBothPurchases}\n bondData={bondData!}\n inputToken={inputToken}\n inputValue={inputValue}\n depositAmount={depositAmount}\n buyTxHash={buyTxHash}\n rateChanged={rateChanged}\n />,\n false,\n true,\n 'transactionModal',\n )\n\n // const [onOpenZapModal] = useModal(\n // <ZapModal outputToken={bondData?.lpToken as Token} account={account} chainId={bondData?.chainId as ChainId} />,\n // true,\n // true,\n // 'zapModal',\n // )\n\n const [openNoBonusModal] = useModal(\n <NoBonusModal onAcknowledge={openTxModal} showcaseTokenName={bondData?.showcaseTokenName} />,\n true,\n true,\n 'NoBonusModal',\n )\n\n // Effects\n const [hasChecked, setHasChecked] = useState(false)\n useEffect(() => {\n if (zapListFetched && !hasChecked) {\n if (parseFloat(inputCurrencyBalance ?? '0') < 0.0001) {\n setInputTokenString(\n sortedZapList[0].token === 'NATIVE' ? 'NATIVE' : sortedZapList[0].token.address[bondChain as ChainId],\n )\n }\n setHasChecked(true)\n }\n /* eslint-disable react-hooks/exhaustive-deps */\n }, [inputCurrencyBalance, zapListFetched])\n\n // If rateChanged meaning the zap quote has a >1% difference from the true bond price, we let the user know and we update state\n useEffect(() => {\n if (rateChanged) {\n console.log('rate changed, refetch state and let user know')\n openNewRateModal()\n refetchBondState()\n }\n /* eslint-disable react-hooks/exhaustive-deps */\n }, [rateChanged])\n\n return bondData ? (\n <Flex className=\"modal-content\" sx={{ ...MCBuyComponentStyles[bondData?.marketingCampaign as MarketingCampaign] }}>\n <Flex className=\"modaltable-container\">\n <BondModalHeader\n bondData={bondData}\n onDismiss={onDismiss}\n showProjectInfoButton={SDKConfig?.referenceId === 'apebond'}\n />\n <ProjectDescription description={bondData.shortDescription} isProjectView />\n <Flex sx={{ width: '100%', display: isProjectView ? ['flex', 'flex', 'flex', 'none'] : 'flex' }}>\n <BondCards bondData={bondData} isDoingMaxBuy={exceedsSafeMaxBuy && !exceedsRealMaxBuy} />\n </Flex>\n <Estimations\n depositAmount={depositAmount}\n bondData={bondData}\n youSpendString={youSpendString}\n isZap={isZapSupported}\n fetchingZapQuote={fetchingZapQuote}\n zapError={zapError}\n />\n <TokenSelectorPanel\n typedValue={inputValue}\n setTypedValue={setInputValue}\n selectedToken={inputToken}\n handleValueBtn={handleMaxButton}\n handleCurrencySelect={handleCurrencySelect}\n bondChainId={bondData?.chainId}\n enableZap={isZapSupported}\n bondPrincipalToken={bondData?.lpToken}\n tokenBalance={inputCurrencyBalance}\n selectedTokenPrice={inputTokenPrice}\n inputDisabled={isUserRestricted}\n marketingCampaign={bondData?.marketingCampaign}\n />\n {SDKConfig.useTiers && (bondData?.trueBondPrices?.length ?? 0) > 1 && (\n <GetUpToComponent bond={bondData} depositAmount={depositAmount} />\n )}\n {bondData?.warningCard && (\n <Flex\n sx={{\n width: '100%',\n background: '#DE62F366',\n mt: '10px',\n borderRadius: 'normal',\n p: '2px 10px',\n }}\n >\n <Text sx={{ fontSize: '12px', fontWeight: 400, display: 'flex', alignItems: 'center', gap: '10px' }}>\n <SafeHTMLComponent html={bondData?.warningCard} />\n </Text>\n </Flex>\n )}\n <Flex className=\"modaltable-container button-container\">\n <Flex className=\"button-container buy\">\n {!account ? (\n <ConnectButton />\n ) : (\n <Flex sx={{ width: '100%', gap: '10px', flexDirection: ['column', 'column', 'column', 'row'] }}>\n <Button\n variant=\"secondary\"\n onClick={() => (LifiSupported.includes(bondChain!) ? onOpenLifiModal() : openExternal())}\n sx={{ width: ['100%', '100%', '100%', '35%'], fontSize: ['14px', '14px', '14px', '16px'] }}\n >\n {LifiSupported.includes(bondChain!)\n ? `Bridge to ${SHORT_NETWORK_LABEL[bondData?.chainId as ChainId]}`\n : `Get ${getSymbol(bondData?.lpToken, bondData?.chainId)}`}\n </Button>\n {isUserRestricted ? (\n <Button className=\"action-button\" disabled>\n INSUFFICIENT TIER\n </Button>\n ) : (\n <Button\n className=\"action-button\"\n load={load || fetchingZapQuote}\n disabled={\n load ||\n bondData?.soldOut ||\n !account ||\n !inputValue ||\n parseFloat(inputValue) === 0 ||\n fetchingZapQuote ||\n zapError ||\n exceedsRealMaxBuy ||\n exceedsBalance ||\n (isZapSupported && !zapData) ||\n SDKConfig.blockSales\n }\n onClick={handleOpenModal}\n sx={{ fontSize: ['14px', '14px', '14px', '16px'] }}\n >\n {SDKConfig.blockSales\n ? 'Complete KYC to Buy'\n : exceedsRealMaxBuy\n ? 'Exceeds Max Buy. Reduce amount'\n : exceedsBalance\n ? 'Exceeds balance'\n : zapError\n ? 'something went wrong'\n : !inputValue || parseFloat(inputValue) === 0\n ? 'Insert amount'\n : `buy`}\n </Button>\n )}{' '}\n </Flex>\n )}\n </Flex>\n </Flex>\n </Flex>\n </Flex>\n ) : (\n <></>\n )\n}\nexport default BuyComponent\n"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"BuyComponent.js","sources":["../../../src/views/BuyBond/BuyComponent.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useState } from 'react'\nimport { BigNumber } from 'bignumber.js'\nimport { convertToBigish } from '../../utils/convertToBigish'\nimport ABI_DEPOSIT from '../../config/abi/deposit.json'\nimport ABI_DEPOSIT_SIG from '../../config/abi/depositSig.json'\nimport { PurchasedBondData } from './BuyBondModal'\nimport {\n useChainId,\n useSendTransaction,\n useWriteContract,\n // useConfig\n} from 'wagmi'\nimport useModal from '../../hooks/useModal'\n// import ZapModal from '../ZapModal'\nimport { BillVersion, ChainId, LaunchBondTiers, MarketingCampaign } from '@ape.swap/apeswap-lists'\nimport TokenSelectorPanel from '../../components/TokenSelectorPanel'\nimport { useApproval } from '../../state/allowance/useAllowance'\nimport { SoulZapTokenManager } from '../../config/constants/addresses'\nimport useSoulZapBondQuote from '../../state/zap/useSoulZapBondQuote'\nimport { parseEther } from 'viem'\nimport useBondsData from '../../state/bonds/useBondsData'\nimport useTokenFromZapList from '../../hooks/useTokenFromZapList'\nimport { useMonitorTx } from '../../hooks/useMonitorTx'\nimport { usePopups } from '../../state/popups/usePopups'\nimport {\n formatNumber,\n formatUSDNumber,\n getMaxBuy,\n getPayoutAmount,\n getPrincipalAmount,\n getRawBonus,\n} from '../../utils/displayHelpers'\nimport { useSDKConfig } from '../../state/useSDKConfig'\nimport { LifiSupported, zapSupported, ZapSupportedChainId } from '../../config/constants/variables'\nimport { getSymbol } from '../../utils/getNativeTicker'\nimport { useSendReferenceId } from '../../hooks/useSendReferenceId'\nimport ConnectButton from '../../components/ConnectButton'\nimport BondModalHeader from './components/BondModalHeader'\nimport BondCards from './components/BondCards/BondCards'\nimport Estimations from './components/Estimations'\nimport ProjectDescription from './components/ProjectDescription'\nimport track from '../../utils/track'\nimport { remove0xPrefix } from '../../utils/remove0xPrefix'\nimport useTierPoints, { getUserTier, TIERS_WEIGHT } from '../../state/tiers/useTierPoints'\nimport NewRateModal from './components/NewRateModal/NewRateModal'\nimport NoBonusModal from './components/NoBonusModal/NoBonusModal'\nimport useTierProofSignature from '../../state/bonds/useTierProofSignature'\nimport GetUpToComponent from './components/GetUpToComponent/GetUpToComponent'\nimport SafeHTMLComponent from '../../components/SafeHTMLComponent'\nimport useSortedZapList from '../../hooks/useSortedZapList'\nimport TransactionModal from '../TransactionModal/TransactionModal'\nimport { reportError } from '../../utils/reportError'\nimport { findHighestTrueBondPrice } from '../../utils/bondPriceHelpers'\nimport { MCBuyComponentStyles } from '../../utils/campaignStyles'\nimport useEVMAccount from '../../hooks/accounts/useEVMAccount'\nimport LifiModal from '../LifiModal/LifiModal'\nimport { SHORT_NETWORK_LABEL } from '../../config/constants/chains'\nimport Flex from '../../components/uikit-sdk/Flex'\nimport Text from '../../components/uikit-sdk/Text'\nimport Button from '../../components/uikit-sdk/Button/Button'\n// import { simulateContract } from 'wagmi/actions'\n\nexport interface BuyComponentProps {\n onDismiss?: () => void // this is only the modal\n bondAddress?: string\n bondChain?: number\n handlePurchasedBond?: (data: PurchasedBondData) => void\n isProjectView?: boolean\n}\n\nconst BuyComponent: React.FC<BuyComponentProps> = ({\n onDismiss,\n bondAddress,\n bondChain,\n handlePurchasedBond,\n isProjectView,\n}) => {\n // Hooks\n // const config = useConfig()\n const SDKConfig = useSDKConfig()\n const userChainId = useChainId()\n const { address: account } = useEVMAccount()\n const { writeContractAsync } = useWriteContract()\n const { sendTransactionAsync } = useSendTransaction()\n const { data: bonds, refetch: refetchBondState } = useBondsData()\n const sendReferenceId = useSendReferenceId()\n const { data: userPoints } = useTierPoints()\n const bondData = bonds?.find(\n (bond) => bond?.contractAddress?.[bond.chainId]?.toLowerCase() === bondAddress?.toLowerCase(),\n )!\n\n // Tier Gating\n const userTier = getUserTier(userPoints ?? '0')\n const minTier = bondData?.minTier !== undefined ? bondData.minTier : null\n const isUserRestricted = minTier !== null && (userTier === null || userTier < minTier)\n const trueBondPriceData = findHighestTrueBondPrice(userPoints, bondData?.trueBondPrices)\n const trueBondPrice = trueBondPriceData?.trueBondPrice\n const { data: tierProofSig } = useTierProofSignature(bondAddress, bondChain, isUserRestricted)\n\n // State\n const [buyTxHash, setBuyTxHash] = useState<string | undefined>()\n const [inputValue, setInputValue] = useState('')\n const [inputTokenString, setInputTokenString] = useState(bondData?.lpToken?.address?.[bondData.chainId])\n\n // On-chain Data\n const inputToken = useTokenFromZapList(inputTokenString, bondData?.chainId, bondData?.lpToken)\n const isZapSupported = zapSupported.includes(bondData?.chainId as ZapSupportedChainId)\n\n const [fetchingZapQuote, zapData, zapDepositAmount, zapError, zapTrueBondPrice] = useSoulZapBondQuote(\n inputValue,\n inputToken,\n bondData,\n account,\n tierProofSig ?? undefined,\n )\n\n const { sortedZapList, isFetched: zapListFetched } = useSortedZapList(bondChain, bondData?.lpToken)\n const enrichedTokenData = sortedZapList.find((item) =>\n item.token === 'NATIVE' || inputToken === 'NATIVE'\n ? item.token === inputToken\n : item?.token?.address?.[bondChain as ChainId]?.toLowerCase() ===\n inputToken?.address?.[bondChain as ChainId]?.toLowerCase(),\n )\n const inputCurrencyBalance = enrichedTokenData?.balance\n const inputTokenPrice = enrichedTokenData?.price\n const rateChanged = parseFloat(zapTrueBondPrice ?? '0') > parseFloat(trueBondPrice ?? '0') * 1.01 && isZapSupported\n\n // Estimations\n const depositAmount = isZapSupported ? zapDepositAmount : inputValue\n const youSpendString = `${formatNumber(inputValue)} ${getSymbol(inputToken, bondData?.chainId)} = \n $${formatUSDNumber((parseFloat(inputValue) * (inputTokenPrice ?? 0)).toString())}`\n\n // Validations\n const exceedsRealMaxBuy = getMaxBuy(bondData, true).lte(getPayoutAmount(bondData, depositAmount, userPoints))\n const exceedsSafeMaxBuy = getMaxBuy(bondData, false)\n .times(isZapSupported ? 0.995 : 0.9995)\n .lte(getPayoutAmount(bondData, depositAmount, userPoints))\n const exceedsBalance = new BigNumber(inputCurrencyBalance ?? '0').lt(inputValue)\n const isPrincipalTokenLP = bondData?.lpToken?.symbol?.includes('-')\n\n // Loading State\n const [loadingTx, setLoadingTx] = useState(false)\n const { addToastError } = usePopups()\n const { isLoading: isConfirming, isSuccess: isConfirmed } = useMonitorTx(buyTxHash, userChainId)\n const load = loadingTx || (isConfirming && !isConfirmed)\n\n // State Handlers\n const handleCurrencySelect = useCallback((newInputToken: string) => {\n setInputValue('')\n setInputTokenString(newInputToken)\n }, [])\n\n const handleMaxButton = useCallback(() => {\n const balance = new BigNumber(inputCurrencyBalance ?? '0')\n const maxBuyAmount = getMaxBuy(bondData, SDKConfig.showLowValueBonds)\n\n if (!isZapSupported) {\n const maxPossibleUserPurchase = getPayoutAmount(bondData, balance.toString(), userPoints)\n const principalDecimals = bondData?.lpToken?.decimals?.[bondData?.chainId] ?? 18\n if (maxPossibleUserPurchase > maxBuyAmount.toNumber()) {\n console.log('user balance exceeds max buy limit, setting to max buy')\n const principalForMaxBuy = getPrincipalAmount(bondData, maxBuyAmount.toString(), userPoints)\n setInputValue(principalForMaxBuy.toFixed(principalDecimals))\n } else {\n console.log('balance is ok, can be used')\n setInputValue(balance.toFixed(principalDecimals))\n }\n } else {\n const principalForMaxBuy = getPrincipalAmount(bondData, maxBuyAmount.toString(), userPoints)\n const principalForMaxBuyUSD = principalForMaxBuy.times(bondData?.principalTokenPrice ?? 0)\n const maxBuyAmountInSelectedToken = principalForMaxBuyUSD.div(inputTokenPrice ?? 0)\n const decimals =\n enrichedTokenData?.token === 'NATIVE' ? 18 : (enrichedTokenData?.token.decimals[bondData?.chainId] ?? 18)\n\n if (balance.gte(maxBuyAmountInSelectedToken)) {\n setInputValue(maxBuyAmountInSelectedToken.toFixed(decimals))\n } else {\n setInputValue(balance.toFixed(decimals))\n }\n }\n }, [\n bondData,\n isZapSupported,\n userPoints,\n SDKConfig.showLowValueBonds,\n inputTokenPrice,\n enrichedTokenData?.token,\n inputCurrencyBalance,\n ])\n\n // const handleOpenZapModal = () => {\n // onOpenZapModal()\n // track({\n // event: 'getTokenClick',\n // chain: bondData?.chainId,\n // data: {\n // bond: bondData?.earnToken.symbol,\n // token: bondData?.lpToken?.symbol,\n // },\n // })\n // }\n\n // Approve & Purchase Functions\n const [approvalState, approveCallback] = useApproval(\n inputValue,\n inputToken ?? null,\n (isZapSupported\n ? SoulZapTokenManager?.[bondData?.chainId as ZapSupportedChainId]\n : bondData?.contractAddress?.[bondData.chainId]) ?? null,\n account ?? null,\n bondData?.chainId ?? null,\n )\n const handleApprove = async () => {\n return approveCallback().then(() => {\n track({\n event: 'approveBondClick',\n chain: userChainId,\n data: {\n cat: bondData?.billType,\n bond: bondData?.earnToken.symbol,\n },\n })\n })\n }\n\n const handleBuyCallback = async () => {\n const billAddress: `0x${string}` = bondData?.contractAddress?.[bondData.chainId] as `0x${string}`\n const decimals = bondData?.lpToken.decimals?.[bondData?.chainId] ?? 18\n track({\n event: 'buyBondClick',\n chain: bondChain,\n data: {\n cat: bondData?.billType,\n bond: bondData?.earnToken.symbol,\n value: parseFloat(inputValue) * (inputTokenPrice ?? 0),\n },\n })\n try {\n const maxPrice = new BigNumber(trueBondPrice ?? '0').times(102).div(100).toFixed(0) // multiply it by 1.02\n const amount = convertToBigish(inputValue, decimals)\n\n const shouldUseSig = bondData?.billVersion === BillVersion.V4 && SDKConfig.useTiers\n const args = shouldUseSig ? [amount, maxPrice, account, tierProofSig] : [amount, maxPrice, account]\n\n // const simulationResult = await simulateContract(config, {\n // address: billAddress,\n // abi: ABI_DEPOSIT_SIG,\n // functionName: 'deposit',\n // args: args,\n // chainId: bondData?.chainId as any,\n // account,\n // })\n // .then((e) => console.log('success!', e))\n // .catch((e) => {\n // console.error(e)\n // })\n\n const hash = await writeContractAsync({\n address: billAddress,\n abi: shouldUseSig ? ABI_DEPOSIT_SIG : ABI_DEPOSIT,\n functionName: 'deposit',\n args: args,\n chain: bondData?.chainId as any,\n account,\n })\n if (hash) {\n setBuyTxHash(hash)\n await sendReferenceId(billAddress, userChainId, hash)\n\n // lostProfit\n const bonusString = getRawBonus(bondData, depositAmount, TIERS_WEIGHT[LaunchBondTiers.Mythical])\n const noTierAmount = getRawBonus(bondData, depositAmount, '0')\n const lostProfit = parseFloat(bonusString) - parseFloat(noTierAmount)\n\n console.log(lostProfit)\n handlePurchasedBond?.({\n buyTxHash: hash,\n lostProfit: SDKConfig.useTiers && !userTier && lostProfit > 0.01 ? lostProfit.toFixed(2) : undefined,\n })\n track({\n event: 'bond',\n chain: bondChain,\n data: {\n cat: 'lp-buy',\n type: bondData?.billType ?? '',\n typedValue: inputValue,\n principalToken: bondData?.lpToken.symbol ?? '',\n earnToken: bondData?.earnToken.symbol ?? '',\n address: remove0xPrefix(bondData?.contractAddress?.[bondData.chainId]),\n usdAmount: parseFloat(inputValue) * (inputTokenPrice ?? 0),\n },\n })\n }\n } catch (error: any) {\n console.error('Buy error', error)\n reportError({\n apiUrl: SDKConfig?.urls?.apiV2,\n error,\n extraInfo: { type: 'buyBond', bondData, error },\n chainId: bondChain,\n account,\n })\n addToastError(error.shortMessage)\n }\n }\n const handleZapCallback = async () => {\n if (zapData && zapData?.txData?.to && zapData?.txData?.data) {\n console.log('Attempting zap tx')\n track({\n event: 'buyBondClick',\n chain: bondData?.chainId,\n data: {\n cat: bondData?.billType,\n bond: bondData?.earnToken.symbol ?? '',\n value: zapData.lpQuote.fromAmountUSD,\n },\n })\n try {\n console.log(zapData)\n const validated18DecimalAmount = new BigNumber(inputValue ?? '0').toFixed(18, 5)\n const parsedValue = parseEther(validated18DecimalAmount)\n\n const hash = await sendTransactionAsync({\n to: zapData.txData.to,\n data: zapData.txData.data,\n value: inputToken === 'NATIVE' ? parsedValue : undefined,\n })\n if (hash) {\n setBuyTxHash(hash)\n await sendReferenceId(bondData?.contractAddress?.[bondData.chainId] ?? '', userChainId, hash)\n\n // lostProfit\n const bonusString = getRawBonus(bondData, depositAmount, TIERS_WEIGHT[LaunchBondTiers.Mythical])\n const noTierAmount = getRawBonus(bondData, depositAmount, '0')\n const lostProfit = parseFloat(bonusString) - parseFloat(noTierAmount)\n\n handlePurchasedBond?.({\n buyTxHash: hash,\n lostProfit: SDKConfig.useTiers && !userTier && lostProfit > 0.01 ? lostProfit.toFixed(2) : undefined,\n })\n track({\n event: 'zap',\n chain: bondChain,\n data: {\n cat: 'bill',\n token1: getSymbol(inputToken),\n token2: `${bondData?.lpToken.symbol ?? ''}`,\n amount: parseFloat(inputValue) * (inputTokenPrice ?? 0),\n },\n })\n track({\n event: 'bond',\n chain: bondChain,\n data: {\n cat: 'zap-buy',\n type: bondData?.billType ?? '',\n principalToken: bondData?.lpToken.symbol ?? '',\n earnToken: bondData?.earnToken.symbol ?? '',\n address: remove0xPrefix(bondData?.contractAddress?.[bondData.chainId]),\n amount: inputValue,\n usdAmount: parseFloat(inputValue) * (inputTokenPrice ?? 0),\n },\n })\n }\n } catch (e: any) {\n console.log(e)\n addToastError(e.shortMessage)\n reportError({\n apiUrl: SDKConfig?.urls?.apiV2,\n error: e,\n extraInfo: { type: 'zapBuyBond', bondData, zapData, e },\n chainId: bondChain,\n account,\n })\n }\n }\n }\n\n const handleBothPurchases = () => {\n setLoadingTx(true)\n if (isZapSupported) {\n handleZapCallback().finally(() => setLoadingTx(false))\n } else {\n handleBuyCallback().finally(() => setLoadingTx(false))\n }\n }\n\n const handleOpenModal = () => {\n const bonus = trueBondPriceData?.bonusWithFee ?? 0\n if (bonus <= 0) {\n openNoBonusModal()\n } else {\n openTxModal()\n }\n }\n\n const openExternal = () => {\n if (bondData?.lpToken?.getLpUrl?.[bondData?.chainId]) {\n window.open(bondData.lpToken.getLpUrl?.[bondData?.chainId], '_blank')\n } else {\n window.open(\n `https://ape.bond/swap?outputcurrency=${bondData?.lpToken.address[bondData?.chainId]}&outputChain=${bondData?.chainId}`,\n '_blank',\n )\n }\n }\n\n // Modals\n const [onOpenLifiModal] = useModal(\n <LifiModal\n bondChain={bondChain}\n principalToken={isPrincipalTokenLP ? 'ETH' : bondData?.lpToken?.address?.[bondData?.chainId]}\n />,\n )\n\n const [openNewRateModal] = useModal(\n <NewRateModal\n bond={bondData}\n zapTrueBondPrice={zapTrueBondPrice}\n depositAmount={depositAmount}\n youSpendString={youSpendString}\n fetchingZapQuote={fetchingZapQuote}\n zapError={zapError}\n />,\n true,\n false,\n 'newRateModal',\n )\n\n const [openTxModal] = useModal(\n <TransactionModal\n txChain={bondChain}\n approvalState={approvalState}\n approveCallback={handleApprove}\n loadingTx={loadingTx}\n txCallback={handleBothPurchases}\n bondData={bondData!}\n inputToken={inputToken}\n inputValue={inputValue}\n depositAmount={depositAmount}\n buyTxHash={buyTxHash}\n rateChanged={rateChanged}\n />,\n false,\n true,\n 'transactionModal',\n )\n\n // const [onOpenZapModal] = useModal(\n // <ZapModal outputToken={bondData?.lpToken as Token} account={account} chainId={bondData?.chainId as ChainId} />,\n // true,\n // true,\n // 'zapModal',\n // )\n\n const [openNoBonusModal] = useModal(\n <NoBonusModal onAcknowledge={openTxModal} showcaseTokenName={bondData?.showcaseTokenName} />,\n true,\n true,\n 'NoBonusModal',\n )\n\n // Effects\n const [hasChecked, setHasChecked] = useState(false)\n useEffect(() => {\n if (zapListFetched && !hasChecked) {\n if (parseFloat(inputCurrencyBalance ?? '0') < 0.0001) {\n setInputTokenString(\n sortedZapList[0].token === 'NATIVE' ? 'NATIVE' : sortedZapList[0].token.address[bondChain as ChainId],\n )\n }\n setHasChecked(true)\n }\n /* eslint-disable react-hooks/exhaustive-deps */\n }, [inputCurrencyBalance, zapListFetched])\n\n // If rateChanged meaning the zap quote has a >1% difference from the true bond price, we let the user know and we update state\n useEffect(() => {\n if (rateChanged) {\n console.log('rate changed, refetch state and let user know')\n openNewRateModal()\n refetchBondState()\n }\n /* eslint-disable react-hooks/exhaustive-deps */\n }, [rateChanged])\n\n return bondData ? (\n <Flex className=\"modal-content\" sx={{ ...MCBuyComponentStyles[bondData?.marketingCampaign as MarketingCampaign] }}>\n <Flex className=\"modaltable-container\">\n <BondModalHeader\n bondData={bondData}\n onDismiss={onDismiss}\n showProjectInfoButton={SDKConfig?.referenceId === 'apebond'}\n />\n <ProjectDescription description={bondData.shortDescription} isProjectView />\n <Flex sx={{ width: '100%', display: isProjectView ? ['flex', 'flex', 'flex', 'none'] : 'flex' }}>\n <BondCards bondData={bondData} isDoingMaxBuy={exceedsSafeMaxBuy && !exceedsRealMaxBuy} />\n </Flex>\n <Estimations\n depositAmount={depositAmount}\n bondData={bondData}\n youSpendString={youSpendString}\n isZap={isZapSupported}\n fetchingZapQuote={fetchingZapQuote}\n zapError={zapError}\n />\n <TokenSelectorPanel\n typedValue={inputValue}\n setTypedValue={setInputValue}\n selectedToken={inputToken}\n handleValueBtn={handleMaxButton}\n handleCurrencySelect={handleCurrencySelect}\n bondChainId={bondData?.chainId}\n enableZap={isZapSupported}\n bondPrincipalToken={bondData?.lpToken}\n tokenBalance={inputCurrencyBalance}\n selectedTokenPrice={inputTokenPrice}\n inputDisabled={isUserRestricted}\n marketingCampaign={bondData?.marketingCampaign}\n />\n {SDKConfig.useTiers && (bondData?.trueBondPrices?.length ?? 0) > 1 && (\n <GetUpToComponent bond={bondData} depositAmount={depositAmount} />\n )}\n {bondData?.warningCard && (\n <Flex\n sx={{\n width: '100%',\n background: '#DE62F366',\n mt: '10px',\n borderRadius: 'normal',\n p: '2px 10px',\n }}\n >\n <Text sx={{ fontSize: '12px', fontWeight: 400, display: 'flex', alignItems: 'center', gap: '10px' }}>\n <SafeHTMLComponent html={bondData?.warningCard} />\n </Text>\n </Flex>\n )}\n <Flex className=\"modaltable-container button-container\">\n <Flex className=\"button-container buy\">\n {!account ? (\n <ConnectButton />\n ) : (\n <Flex sx={{ width: '100%', gap: '10px', flexDirection: ['column', 'column', 'column', 'row'] }}>\n <Button\n variant=\"secondary\"\n onClick={() => (LifiSupported.includes(bondChain!) ? onOpenLifiModal() : openExternal())}\n sx={{ width: ['100%', '100%', '100%', '35%'], fontSize: ['14px', '14px', '14px', '16px'] }}\n >\n {LifiSupported.includes(bondChain!)\n ? `Bridge to ${SHORT_NETWORK_LABEL[bondData?.chainId as ChainId]}`\n : `Get ${getSymbol(bondData?.lpToken, bondData?.chainId)}`}\n </Button>\n {isUserRestricted ? (\n <Button className=\"action-button\" disabled>\n INSUFFICIENT TIER\n </Button>\n ) : (\n <Button\n className=\"action-button\"\n load={load || fetchingZapQuote}\n disabled={\n load ||\n bondData?.soldOut ||\n !account ||\n !inputValue ||\n parseFloat(inputValue) === 0 ||\n fetchingZapQuote ||\n zapError ||\n exceedsRealMaxBuy ||\n exceedsBalance ||\n (isZapSupported && !zapData) ||\n SDKConfig.blockSales\n }\n onClick={handleOpenModal}\n sx={{ fontSize: ['14px', '14px', '14px', '16px'] }}\n >\n {SDKConfig.blockSales\n ? 'Complete KYC to Buy'\n : exceedsRealMaxBuy\n ? 'Exceeds Max Buy. Reduce amount'\n : exceedsBalance\n ? 'Exceeds balance'\n : zapError\n ? 'something went wrong'\n : !inputValue || parseFloat(inputValue) === 0\n ? 'Insert amount'\n : `buy`}\n </Button>\n )}{' '}\n </Flex>\n )}\n </Flex>\n </Flex>\n </Flex>\n </Flex>\n ) : (\n <></>\n )\n}\nexport default BuyComponent\n"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ declare const RakuraiComponent: () => React.JSX.Element;
3
+ export default RakuraiComponent;
@@ -0,0 +1,229 @@
1
+ import { jsxs, jsx } from 'theme-ui/jsx-runtime';
2
+ import { useState } from 'react';
3
+ import { useWallet, useConnection } from '@solana/wallet-adapter-react';
4
+ import { useWalletModal } from '@solana/wallet-adapter-react-ui';
5
+ import { LAMPORTS_PER_SOL } from '@solana/web3.js';
6
+ import { liquidStake, updateCampaign, liquidUnstakeJupiter, liquidUnstake } from '@rakurai/rakurai-stake-sdk';
7
+ import { useRakuraiStats, RAISOL_TOKEN } from './useRakuraiStats.js';
8
+ import { useIsMobile } from '../../hooks/useIsMobile.js';
9
+ import { ChainId } from '@ape.swap/apeswap-lists';
10
+ import { useTokenPrice } from '../../state/tokenPrices/useTokenPrice.js';
11
+ import { usePopups } from '../../state/popups/usePopups.js';
12
+ import useSolanaStakeBalances from './useSolanaStakeBalances.js';
13
+ import Flex from '../../components/uikit-sdk/Flex/index.js';
14
+ import TokenImage from '../../components/uikit-sdk/TokenImage/index.js';
15
+ import TokenSelectorPanel from '../../components/TokenSelectorPanel/index.js';
16
+ import { formatNumberSI } from '../../utils/formatNumber.js';
17
+ import Button from '../../components/uikit-sdk/Button/Button.js';
18
+ import TabNavigation from '../../components/TabNavigation/index.js';
19
+
20
+ const TABS = ['Stake SOL', 'Unstake'];
21
+ const REFERRAL_CODE = '2kzDPgGG8';
22
+ const RakuraiComponent = () => {
23
+ const { data } = useRakuraiStats();
24
+ const isMobile = useIsMobile();
25
+ const [activeTab, setActiveTab] = useState('Stake SOL');
26
+ const [typedValue, setTypedValue] = useState('');
27
+ const [isLoading, setIsLoading] = useState(false);
28
+ const [unstakeMethod, setUnstakeMethod] = useState('immediate');
29
+ const SOLPrice = useTokenPrice('so11111111111111111111111111111111111111112', ChainId.SOL) ?? 0;
30
+ const raiSOLPrice = SOLPrice / (data?.price ?? 0);
31
+ const { publicKey, signTransaction, connected } = useWallet();
32
+ const { connection } = useConnection();
33
+ const { setVisible: openSolanaWalletModal } = useWalletModal();
34
+ const { solBalance, raiSolBalance, refetch } = useSolanaStakeBalances();
35
+ const isStake = activeTab === 'Stake SOL';
36
+ const receiveAmount = isStake
37
+ ? parseFloat(typedValue) / (data?.price ?? 0)
38
+ : parseFloat(typedValue) * (data?.price ?? 0);
39
+ const currentBalance = isStake ? solBalance : raiSolBalance;
40
+ const { addToastError, addToastSuccess } = usePopups();
41
+ const handleTabSwitch = (tab) => {
42
+ setActiveTab(tab);
43
+ setTypedValue('');
44
+ };
45
+ const handleStake = async () => {
46
+ if (!publicKey || !signTransaction)
47
+ return;
48
+ setIsLoading(true);
49
+ try {
50
+ const amountLamports = Math.floor(parseFloat(typedValue) * LAMPORTS_PER_SOL);
51
+ const tx = await liquidStake({ pubkey: publicKey.toBase58(), amount: amountLamports });
52
+ const signedTx = await signTransaction(tx);
53
+ const txSig = await connection.sendRawTransaction(signedTx.serialize());
54
+ setTypedValue('');
55
+ addToastSuccess(txSig, ChainId.SOL, 'SOL staked successfully');
56
+ await updateCampaign({
57
+ address: publicKey.toBase58(),
58
+ amount: amountLamports,
59
+ txn_sig: txSig,
60
+ is_stake: true,
61
+ referral_code: REFERRAL_CODE,
62
+ });
63
+ await new Promise((resolve) => setTimeout(resolve, 2000));
64
+ refetch();
65
+ }
66
+ catch (err) {
67
+ console.error('RakuraiCampaign: stake failed', err);
68
+ addToastError(err?.message ?? 'Stake failed');
69
+ }
70
+ finally {
71
+ setIsLoading(false);
72
+ }
73
+ };
74
+ const handleUnstakeJupiter = async () => {
75
+ if (!publicKey || !signTransaction)
76
+ return;
77
+ setIsLoading(true);
78
+ try {
79
+ const amountLamports = Math.floor(parseFloat(typedValue) * LAMPORTS_PER_SOL);
80
+ const tx = await liquidUnstakeJupiter({ pubkey: publicKey.toBase58(), amount: amountLamports });
81
+ const signedTx = await signTransaction(tx);
82
+ const txSig = await connection.sendRawTransaction(signedTx.serialize());
83
+ setTypedValue('');
84
+ addToastSuccess(txSig, ChainId.SOL, 'raiSOL unstaked successfully (Jupiter)');
85
+ await updateCampaign({
86
+ address: publicKey.toBase58(),
87
+ amount: amountLamports,
88
+ txn_sig: txSig,
89
+ is_stake: false,
90
+ referral_code: REFERRAL_CODE,
91
+ });
92
+ await new Promise((resolve) => setTimeout(resolve, 2000));
93
+ refetch();
94
+ }
95
+ catch (err) {
96
+ console.error('RakuraiCampaign: unstake failed', err);
97
+ addToastError(err?.message ?? 'Unstake failed');
98
+ }
99
+ finally {
100
+ setIsLoading(false);
101
+ }
102
+ };
103
+ const handleUnstakeEpoch = async () => {
104
+ if (!publicKey || !signTransaction)
105
+ return;
106
+ setIsLoading(true);
107
+ try {
108
+ const amountLamports = Math.floor(parseFloat(typedValue) * LAMPORTS_PER_SOL);
109
+ const { transaction, stakeAccountKeypair } = await liquidUnstake({
110
+ pubkey: publicKey.toBase58(),
111
+ amount: amountLamports,
112
+ });
113
+ const signedTx = await signTransaction(transaction);
114
+ signedTx.partialSign(stakeAccountKeypair);
115
+ const txSig = await connection.sendRawTransaction(signedTx.serialize());
116
+ setTypedValue('');
117
+ console.log(txSig);
118
+ addToastSuccess(txSig, ChainId.SOL, 'raiSOL unstaked successfully (after epoch)');
119
+ await updateCampaign({
120
+ address: publicKey.toBase58(),
121
+ amount: amountLamports,
122
+ txn_sig: txSig,
123
+ is_stake: false,
124
+ referral_code: REFERRAL_CODE,
125
+ });
126
+ await new Promise((resolve) => setTimeout(resolve, 2000));
127
+ refetch();
128
+ }
129
+ catch (err) {
130
+ console.error('RakuraiCampaign: epoch unstake failed', err);
131
+ addToastError(err?.message ?? 'Epoch unstake failed');
132
+ }
133
+ finally {
134
+ setIsLoading(false);
135
+ }
136
+ };
137
+ return (jsxs(Flex, { sx: {
138
+ height: '200px',
139
+ width: '100%',
140
+ p: ['10px', '10px', '10px', '10px 20px'],
141
+ backgroundImage: 'url(https://ape.bond/images/CampaignComponent/rakurai/bgrakurai.png)',
142
+ backgroundSize: 'cover',
143
+ borderRadius: '16px',
144
+ mb: '10px',
145
+ }, children: [jsxs(Flex, { sx: {
146
+ width: ['50%'],
147
+ flexDirection: 'column',
148
+ display: ['none', 'none', 'none', 'flex'],
149
+ justifyContent: 'space-between',
150
+ }, children: [jsxs(Flex, { sx: { flexDirection: 'column', gap: '20px' }, children: [jsxs(Flex, { sx: {
151
+ alignItems: 'center',
152
+ gap: '5px',
153
+ fontSize: '18px',
154
+ fontWeight: 700,
155
+ color: 'linear-gradient(83.85deg, #024eff .22%, #3ce844 102.21%)',
156
+ }, children: [jsx(TokenImage, { symbol: 'raiSOL', size: 24 }), "raiSol Liquid Staking"] }), jsxs("span", { sx: {
157
+ fontSize: '14px',
158
+ fontWeight: 500,
159
+ color: 'textDisabledButton',
160
+ mr: ['unset', 'unset', 'unset', '15px'],
161
+ }, children: [`APY ${data?.apy.toFixed(2)}% - Delegate to Rakurai and earn maximized yield that auto-recompounds every epoch, all while keeping full custody of your SOL.`, jsx("span", { sx: { color: 'primaryButton', ml: '3px', cursor: 'pointer', ':hover': { textDecoration: 'underlined' } }, onClick: () => window.open('https://rakurai.io/stake', '_blank'), children: 'Learn More >' })] })] }), jsxs(Flex, { sx: { flexDirection: 'column', fontSize: '10px', color: 'grey', fontWeight: 300, pb: '10px' }, children: ["Powered by", jsx("img", { alt: 'rakuraiCampaign', src: 'https://ape.bond/images/rakurai/rakurai.png', style: { width: '117px', height: '25px' } })] })] }), jsxs(Flex, { sx: { width: ['100%', '100%', '100%', '50%'], flexDirection: 'column' }, children: [jsxs(Flex, { sx: { width: '100%', justifyContent: 'space-between' }, children: [jsxs(Flex, { sx: { fontSize: '12px', lineHeight: '22px', display: ['flex', 'flex', 'flex', 'none'], gap: '5px' }, children: [jsx(TokenImage, { symbol: 'raiSOL', size: 24 }), "raiSol Liquid Staking"] }), jsx(Flex, { sx: {
162
+ mb: '7px',
163
+ mr: '10px',
164
+ justifyContent: 'center',
165
+ '& > div:first-of-type': {
166
+ fontSize: ['12px', '12px', '12px', '14px'],
167
+ fontWeight: 500,
168
+ color: 'textDisabledButton',
169
+ },
170
+ }, children: jsx(TabNavigation, { tabs: TABS, activeTab: activeTab, setActiveTab: handleTabSwitch, lineColor: 'linear-gradient(83.85deg, #024eff .22%, #3ce844 102.21%)' }) })] }), jsx(Flex, { sx: {
171
+ width: '100%',
172
+ '& > div:first-of-type': {
173
+ width: '100%',
174
+ },
175
+ }, children: jsx(TokenSelectorPanel, { selectedToken: isStake ? 'NATIVE' : RAISOL_TOKEN, typedValue: typedValue, setTypedValue: setTypedValue, handleValueBtn: (val) => setTypedValue(val), handleCurrencySelect: () => null, tokenBalance: currentBalance, selectedTokenPrice: isStake ? SOLPrice : raiSOLPrice,
176
+ // account={solanaAddress}
177
+ enableZap: false, bondChainId: ChainId.SOL }) }), jsxs(Flex, { sx: {
178
+ fontSize: '12px',
179
+ fontWeight: 500,
180
+ gap: '5px',
181
+ my: '5px',
182
+ alignItems: 'center',
183
+ justifyContent: 'space-between',
184
+ }, children: [jsxs(Flex, { sx: { gap: '5px', alignItems: 'center', height: '21px' }, children: ["You Get:", jsx(TokenImage, { symbol: isStake ? `raiSOL` : `SOL`, size: 20 }), formatNumberSI(receiveAmount), " ", isStake ? `raiSOL` : `SOL`, isStake && (jsxs(Flex, { sx: { color: 'success', fontWeight: 600, opacity: 0.8 }, children: ["+", data?.apy?.toFixed(2), "% APY"] }))] }), isStake ? (jsxs(Flex, { sx: { gap: '5px', alignItems: 'center' }, children: [jsx(Flex, { sx: { display: ['flex', 'flex', 'flex', 'none'] }, children: "Staked:" }), jsx(Flex, { sx: { display: ['none', 'none', 'none', 'flex'] }, children: "Staled Amount:" }), jsx(TokenImage, { symbol: isStake ? `raiSOL` : `SOL`, size: 20 }), formatNumberSI(raiSolBalance), " ", isStake ? `raiSOL` : `SOL`] })) : (jsx(Flex, { sx: { gap: '5px', alignItems: 'center' }, children: ['immediate', 'epoch'].map((method) => {
185
+ const label = method === 'immediate'
186
+ ? isMobile
187
+ ? 'Immediate (Jup)'
188
+ : 'Immediate (Jupiter)'
189
+ : isMobile
190
+ ? 'After Epoch'
191
+ : 'After Epoch Ends';
192
+ const isSelected = unstakeMethod === method;
193
+ return (jsx(Flex, { onClick: () => setUnstakeMethod(method), sx: {
194
+ cursor: 'pointer',
195
+ fontSize: '10px',
196
+ fontWeight: 500,
197
+ padding: '2px 7px',
198
+ borderRadius: '8px',
199
+ border: isSelected ? '1px solid transparent' : '1px solid rgba(255,255,255,0.15)',
200
+ background: isSelected
201
+ ? 'linear-gradient(#16213e, #16213e) padding-box, linear-gradient(83.85deg, #024eff .22%, #3ce844 102.21%) border-box'
202
+ : 'transparent',
203
+ color: isSelected ? 'white' : 'textDisabledButton',
204
+ whiteSpace: 'nowrap',
205
+ }, children: label }, method));
206
+ }) }))] }), jsx(Flex, { sx: { width: '100%', height: '28px' }, children: !connected ? (jsx(Button, { sx: {
207
+ width: '100%',
208
+ fontSize: '12px !important',
209
+ background: 'linear-gradient(83.85deg, #024eff .22%, #3ce844 102.21%)',
210
+ border: 'none !important',
211
+ '&:hover': {
212
+ background: 'linear-gradient(83.85deg, #024eff .22%, #3ce844 102.21%) !important',
213
+ color: 'black',
214
+ },
215
+ }, onClick: () => openSolanaWalletModal(true), children: "Connect Solana Wallet" })) : (jsx(Button, { sx: {
216
+ width: '100%',
217
+ fontSize: '12px !important',
218
+ background: 'linear-gradient(83.85deg, #024eff .22%, #3ce844 102.21%)',
219
+ border: 'none !important',
220
+ '&:hover': {
221
+ background: !(isLoading || !typedValue || parseFloat(typedValue) <= 0) &&
222
+ 'linear-gradient(83.85deg, #024eff .22%, #3ce844 102.21%) !important',
223
+ color: 'black',
224
+ },
225
+ }, load: isLoading, disabled: isLoading || !typedValue || parseFloat(typedValue) <= 0, onClick: isStake ? handleStake : unstakeMethod === 'immediate' ? handleUnstakeJupiter : handleUnstakeEpoch, children: isStake ? 'Stake' : 'Unstake' })) })] })] }));
226
+ };
227
+
228
+ export { RakuraiComponent as default };
229
+ //# sourceMappingURL=RakuraiComponent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RakuraiComponent.js","sources":["../../../src/views/RakuraiComponent/RakuraiComponent.tsx"],"sourcesContent":["import React, { useState } from 'react'\nimport { useConnection, useWallet } from '@solana/wallet-adapter-react'\nimport { useWalletModal } from '@solana/wallet-adapter-react-ui'\nimport { LAMPORTS_PER_SOL } from '@solana/web3.js'\nimport { liquidStake, liquidUnstake, liquidUnstakeJupiter, updateCampaign } from '@rakurai/rakurai-stake-sdk'\nimport { useRakuraiStats, RAISOL_TOKEN } from './useRakuraiStats'\nimport { useIsMobile } from '../../hooks/useIsMobile'\nimport { ChainId } from '@ape.swap/apeswap-lists'\nimport { useTokenPrice } from '../../state/tokenPrices/useTokenPrice'\nimport { usePopups } from '../../state/popups/usePopups'\nimport useSolanaStakeBalances from './useSolanaStakeBalances'\nimport Flex from '../../components/uikit-sdk/Flex'\nimport TokenImage from '../../components/uikit-sdk/TokenImage'\nimport TokenSelectorPanel from '../../components/TokenSelectorPanel'\nimport { formatNumberSI } from '../../utils/formatNumber'\nimport Button from '../../components/uikit-sdk/Button/Button'\nimport TabNavigation from '../../components/TabNavigation'\n\ntype StakeTab = 'Stake SOL' | 'Unstake'\nconst TABS: StakeTab[] = ['Stake SOL', 'Unstake']\nconst REFERRAL_CODE = '2kzDPgGG8'\n\nconst RakuraiComponent = () => {\n const { data } = useRakuraiStats()\n const isMobile = useIsMobile()\n const [activeTab, setActiveTab] = useState<StakeTab>('Stake SOL')\n const [typedValue, setTypedValue] = useState<string>('')\n const [isLoading, setIsLoading] = useState<boolean>(false)\n const [unstakeMethod, setUnstakeMethod] = useState<'immediate' | 'epoch'>('immediate')\n const SOLPrice = useTokenPrice('so11111111111111111111111111111111111111112', ChainId.SOL) ?? 0\n const raiSOLPrice = SOLPrice / (data?.price ?? 0)\n\n const { publicKey, signTransaction, connected } = useWallet()\n const { connection } = useConnection()\n const { setVisible: openSolanaWalletModal } = useWalletModal()\n const { solBalance, raiSolBalance, refetch } = useSolanaStakeBalances()\n\n const isStake = activeTab === 'Stake SOL'\n const receiveAmount = isStake\n ? parseFloat(typedValue) / (data?.price ?? 0)\n : parseFloat(typedValue) * (data?.price ?? 0)\n const currentBalance = isStake ? solBalance : raiSolBalance\n\n const { addToastError, addToastSuccess } = usePopups()\n\n const handleTabSwitch = (tab: StakeTab) => {\n setActiveTab(tab)\n setTypedValue('')\n }\n\n const handleStake = async () => {\n if (!publicKey || !signTransaction) return\n setIsLoading(true)\n try {\n const amountLamports = Math.floor(parseFloat(typedValue) * LAMPORTS_PER_SOL)\n const tx = await liquidStake({ pubkey: publicKey.toBase58(), amount: amountLamports })\n const signedTx = await signTransaction(tx as any)\n const txSig = await connection.sendRawTransaction((signedTx as any).serialize())\n setTypedValue('')\n addToastSuccess(txSig, ChainId.SOL, 'SOL staked successfully')\n await updateCampaign({\n address: publicKey.toBase58(),\n amount: amountLamports,\n txn_sig: txSig,\n is_stake: true,\n referral_code: REFERRAL_CODE,\n })\n await new Promise((resolve) => setTimeout(resolve, 2000))\n refetch()\n } catch (err: any) {\n console.error('RakuraiCampaign: stake failed', err)\n addToastError(err?.message ?? 'Stake failed')\n } finally {\n setIsLoading(false)\n }\n }\n\n const handleUnstakeJupiter = async () => {\n if (!publicKey || !signTransaction) return\n setIsLoading(true)\n try {\n const amountLamports = Math.floor(parseFloat(typedValue) * LAMPORTS_PER_SOL)\n const tx = await liquidUnstakeJupiter({ pubkey: publicKey.toBase58(), amount: amountLamports })\n const signedTx = await signTransaction(tx as any)\n const txSig = await connection.sendRawTransaction((signedTx as any).serialize())\n setTypedValue('')\n addToastSuccess(txSig, ChainId.SOL, 'raiSOL unstaked successfully (Jupiter)')\n await updateCampaign({\n address: publicKey.toBase58(),\n amount: amountLamports,\n txn_sig: txSig,\n is_stake: false,\n referral_code: REFERRAL_CODE,\n })\n await new Promise((resolve) => setTimeout(resolve, 2000))\n refetch()\n } catch (err: any) {\n console.error('RakuraiCampaign: unstake failed', err)\n addToastError(err?.message ?? 'Unstake failed')\n } finally {\n setIsLoading(false)\n }\n }\n\n const handleUnstakeEpoch = async () => {\n if (!publicKey || !signTransaction) return\n setIsLoading(true)\n try {\n const amountLamports = Math.floor(parseFloat(typedValue) * LAMPORTS_PER_SOL)\n const { transaction, stakeAccountKeypair } = await liquidUnstake({\n pubkey: publicKey.toBase58(),\n amount: amountLamports,\n })\n const signedTx = await signTransaction(transaction)\n signedTx.partialSign(stakeAccountKeypair)\n const txSig = await connection.sendRawTransaction(signedTx.serialize())\n setTypedValue('')\n console.log(txSig)\n addToastSuccess(txSig, ChainId.SOL, 'raiSOL unstaked successfully (after epoch)')\n await updateCampaign({\n address: publicKey.toBase58(),\n amount: amountLamports,\n txn_sig: txSig,\n is_stake: false,\n referral_code: REFERRAL_CODE,\n })\n await new Promise((resolve) => setTimeout(resolve, 2000))\n refetch()\n } catch (err: any) {\n console.error('RakuraiCampaign: epoch unstake failed', err)\n addToastError(err?.message ?? 'Epoch unstake failed')\n } finally {\n setIsLoading(false)\n }\n }\n\n return (\n <Flex\n sx={{\n height: '200px',\n width: '100%',\n p: ['10px', '10px', '10px', '10px 20px'],\n backgroundImage: 'url(https://ape.bond/images/CampaignComponent/rakurai/bgrakurai.png)',\n backgroundSize: 'cover',\n borderRadius: '16px',\n mb: '10px',\n }}\n >\n <Flex\n sx={{\n width: ['50%'],\n flexDirection: 'column',\n display: ['none', 'none', 'none', 'flex'],\n justifyContent: 'space-between',\n }}\n >\n <Flex sx={{ flexDirection: 'column', gap: '20px' }}>\n <Flex\n sx={{\n alignItems: 'center',\n gap: '5px',\n fontSize: '18px',\n fontWeight: 700,\n color: 'linear-gradient(83.85deg, #024eff .22%, #3ce844 102.21%)',\n }}\n >\n <TokenImage symbol={'raiSOL'} size={24} />\n raiSol Liquid Staking\n </Flex>\n <span\n sx={{\n fontSize: '14px',\n fontWeight: 500,\n color: 'textDisabledButton',\n mr: ['unset', 'unset', 'unset', '15px'],\n }}\n >\n {`APY ${data?.apy.toFixed(2)}% - Delegate to Rakurai and earn maximized yield that auto-recompounds every epoch, all while keeping full custody of your SOL.`}\n <span\n sx={{ color: 'primaryButton', ml: '3px', cursor: 'pointer', ':hover': { textDecoration: 'underlined' } }}\n onClick={() => window.open('https://rakurai.io/stake', '_blank')}\n >\n {'Learn More >'}\n </span>\n </span>\n </Flex>\n\n <Flex sx={{ flexDirection: 'column', fontSize: '10px', color: 'grey', fontWeight: 300, pb: '10px' }}>\n Powered by\n <img\n alt={'rakuraiCampaign'}\n src={'https://ape.bond/images/rakurai/rakurai.png'}\n style={{ width: '117px', height: '25px' }}\n />\n </Flex>\n </Flex>\n <Flex sx={{ width: ['100%', '100%', '100%', '50%'], flexDirection: 'column' }}>\n <Flex sx={{ width: '100%', justifyContent: 'space-between' }}>\n <Flex sx={{ fontSize: '12px', lineHeight: '22px', display: ['flex', 'flex', 'flex', 'none'], gap: '5px' }}>\n <TokenImage symbol={'raiSOL'} size={24} />\n raiSol Liquid Staking\n </Flex>\n <Flex\n sx={{\n mb: '7px',\n mr: '10px',\n justifyContent: 'center',\n '& > div:first-of-type': {\n fontSize: ['12px', '12px', '12px', '14px'],\n fontWeight: 500,\n color: 'textDisabledButton',\n },\n }}\n >\n <TabNavigation\n tabs={TABS}\n activeTab={activeTab}\n setActiveTab={handleTabSwitch}\n lineColor={'linear-gradient(83.85deg, #024eff .22%, #3ce844 102.21%)'}\n />\n </Flex>\n </Flex>\n <Flex\n sx={{\n width: '100%',\n '& > div:first-of-type': {\n width: '100%',\n },\n }}\n >\n <TokenSelectorPanel\n selectedToken={isStake ? 'NATIVE' : RAISOL_TOKEN}\n typedValue={typedValue}\n setTypedValue={setTypedValue}\n handleValueBtn={(val) => setTypedValue(val)}\n handleCurrencySelect={() => null}\n tokenBalance={currentBalance}\n selectedTokenPrice={isStake ? SOLPrice : raiSOLPrice}\n // account={solanaAddress}\n enableZap={false}\n bondChainId={ChainId.SOL}\n />\n </Flex>\n <Flex\n sx={{\n fontSize: '12px',\n fontWeight: 500,\n gap: '5px',\n my: '5px',\n alignItems: 'center',\n justifyContent: 'space-between',\n }}\n >\n <Flex sx={{ gap: '5px', alignItems: 'center', height: '21px' }}>\n You Get:\n <TokenImage symbol={isStake ? `raiSOL` : `SOL`} size={20} />\n {formatNumberSI(receiveAmount)} {isStake ? `raiSOL` : `SOL`}\n {isStake && (\n <Flex sx={{ color: 'success', fontWeight: 600, opacity: 0.8 }}>+{data?.apy?.toFixed(2)}% APY</Flex>\n )}\n </Flex>\n {isStake ? (\n <Flex sx={{ gap: '5px', alignItems: 'center' }}>\n <Flex sx={{ display: ['flex', 'flex', 'flex', 'none'] }}>Staked:</Flex>\n <Flex sx={{ display: ['none', 'none', 'none', 'flex'] }}>Staled Amount:</Flex>\n <TokenImage symbol={isStake ? `raiSOL` : `SOL`} size={20} />\n {formatNumberSI(raiSolBalance)} {isStake ? `raiSOL` : `SOL`}\n </Flex>\n ) : (\n <Flex sx={{ gap: '5px', alignItems: 'center' }}>\n {(['immediate', 'epoch'] as const).map((method) => {\n const label =\n method === 'immediate'\n ? isMobile\n ? 'Immediate (Jup)'\n : 'Immediate (Jupiter)'\n : isMobile\n ? 'After Epoch'\n : 'After Epoch Ends'\n const isSelected = unstakeMethod === method\n return (\n <Flex\n key={method}\n onClick={() => setUnstakeMethod(method)}\n sx={{\n cursor: 'pointer',\n fontSize: '10px',\n fontWeight: 500,\n padding: '2px 7px',\n borderRadius: '8px',\n border: isSelected ? '1px solid transparent' : '1px solid rgba(255,255,255,0.15)',\n background: isSelected\n ? 'linear-gradient(#16213e, #16213e) padding-box, linear-gradient(83.85deg, #024eff .22%, #3ce844 102.21%) border-box'\n : 'transparent',\n color: isSelected ? 'white' : 'textDisabledButton',\n whiteSpace: 'nowrap',\n }}\n >\n {label}\n </Flex>\n )\n })}\n </Flex>\n )}\n </Flex>\n {/* CTA button */}\n <Flex sx={{ width: '100%', height: '28px' }}>\n {!connected ? (\n <Button\n sx={{\n width: '100%',\n fontSize: '12px !important',\n background: 'linear-gradient(83.85deg, #024eff .22%, #3ce844 102.21%)',\n border: 'none !important',\n '&:hover': {\n background: 'linear-gradient(83.85deg, #024eff .22%, #3ce844 102.21%) !important',\n color: 'black',\n },\n }}\n onClick={() => openSolanaWalletModal(true)}\n >\n Connect Solana Wallet\n </Button>\n ) : (\n <Button\n sx={{\n width: '100%',\n fontSize: '12px !important',\n background: 'linear-gradient(83.85deg, #024eff .22%, #3ce844 102.21%)',\n border: 'none !important',\n '&:hover': {\n background:\n !(isLoading || !typedValue || parseFloat(typedValue) <= 0) &&\n 'linear-gradient(83.85deg, #024eff .22%, #3ce844 102.21%) !important',\n color: 'black',\n },\n }}\n load={isLoading}\n disabled={isLoading || !typedValue || parseFloat(typedValue) <= 0}\n onClick={\n isStake ? handleStake : unstakeMethod === 'immediate' ? handleUnstakeJupiter : handleUnstakeEpoch\n }\n >\n {isStake ? 'Stake' : 'Unstake'}\n </Button>\n )}\n </Flex>\n </Flex>\n </Flex>\n )\n}\n\nexport default RakuraiComponent\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { Token } from '@ape.swap/apeswap-lists';
2
+ export declare const useRakuraiStats: () => import("@tanstack/react-query").UseQueryResult<{
3
+ apy: number;
4
+ price: number;
5
+ } | undefined, Error>;
6
+ export declare const RAISOL_MINT_ADDRESS = "Ra1so1sTkvX3PorAM9ewqrsUMz9sPSbfFZ5oZUjN4oc";
7
+ export declare const RAISOL_TOKEN: Token;
@@ -0,0 +1,42 @@
1
+ import { useQuery } from '@tanstack/react-query';
2
+ import { useSDKConfig } from '../../state/useSDKConfig.js';
3
+ import { ChainId } from '@ape.swap/apeswap-lists';
4
+
5
+ const getRakuraiStats = async () => {
6
+ try {
7
+ const [apyResponse, priceResponse] = await Promise.all([
8
+ fetch('https://api.rakurai.io/api/v1/validator/apy-liquid'),
9
+ fetch('https://api.rakurai.io/api/v1/price/raisol'),
10
+ ]);
11
+ if (!apyResponse.ok || !priceResponse.ok) {
12
+ return undefined;
13
+ }
14
+ const apyData = await apyResponse.json();
15
+ const priceData = await priceResponse.json();
16
+ return {
17
+ apy: apyData.apy,
18
+ price: priceData.raisol,
19
+ };
20
+ }
21
+ catch {
22
+ console.log('Error on rakurai calls');
23
+ }
24
+ };
25
+ const useRakuraiStats = () => {
26
+ const SDKConfig = useSDKConfig();
27
+ return useQuery({
28
+ queryKey: ['rakuraiStats'],
29
+ queryFn: getRakuraiStats,
30
+ enabled: SDKConfig.referenceId === 'apebond',
31
+ });
32
+ };
33
+ const RAISOL_MINT_ADDRESS = 'Ra1so1sTkvX3PorAM9ewqrsUMz9sPSbfFZ5oZUjN4oc';
34
+ const RAISOL_TOKEN = {
35
+ symbol: 'raiSOL',
36
+ name: 'Rakurai SOL',
37
+ decimals: 9,
38
+ address: { [ChainId.SOL]: RAISOL_MINT_ADDRESS },
39
+ };
40
+
41
+ export { RAISOL_MINT_ADDRESS, RAISOL_TOKEN, useRakuraiStats };
42
+ //# sourceMappingURL=useRakuraiStats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRakuraiStats.js","sources":["../../../src/views/RakuraiComponent/useRakuraiStats.ts"],"sourcesContent":["import { useQuery } from '@tanstack/react-query'\nimport { useSDKConfig } from '../../state/useSDKConfig'\nimport { ChainId, Token } from '@ape.swap/apeswap-lists'\n\nconst getRakuraiStats = async (): Promise<{ apy: number; price: number } | undefined> => {\n try {\n const [apyResponse, priceResponse] = await Promise.all([\n fetch('https://api.rakurai.io/api/v1/validator/apy-liquid'),\n fetch('https://api.rakurai.io/api/v1/price/raisol'),\n ])\n\n if (!apyResponse.ok || !priceResponse.ok) {\n return undefined\n }\n\n const apyData = await apyResponse.json()\n const priceData = await priceResponse.json()\n\n return {\n apy: apyData.apy,\n price: priceData.raisol,\n }\n } catch {\n console.log('Error on rakurai calls')\n }\n}\n\nexport const useRakuraiStats = () => {\n const SDKConfig = useSDKConfig()\n return useQuery({\n queryKey: ['rakuraiStats'],\n queryFn: getRakuraiStats,\n enabled: SDKConfig.referenceId === 'apebond',\n })\n}\n\nexport const RAISOL_MINT_ADDRESS = 'Ra1so1sTkvX3PorAM9ewqrsUMz9sPSbfFZ5oZUjN4oc'\n\nexport const RAISOL_TOKEN = {\n symbol: 'raiSOL',\n name: 'Rakurai SOL',\n decimals: 9,\n address: { [ChainId.SOL as number]: RAISOL_MINT_ADDRESS },\n} as unknown as Token\n"],"names":[],"mappings":";;;;AAIA,MAAM,eAAe,GAAG,YAAgE;AACtF,IAAA,IAAI;QACF,MAAM,CAAC,WAAW,EAAE,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACrD,KAAK,CAAC,oDAAoD,CAAC;YAC3D,KAAK,CAAC,4CAA4C,CAAC;AACpD,SAAA,CAAC;QAEF,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE;AACxC,YAAA,OAAO,SAAS;QAClB;AAEA,QAAA,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE;AACxC,QAAA,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE;QAE5C,OAAO;YACL,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,KAAK,EAAE,SAAS,CAAC,MAAM;SACxB;IACH;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;IACvC;AACF,CAAC;AAEM,MAAM,eAAe,GAAG,MAAK;AAClC,IAAA,MAAM,SAAS,GAAG,YAAY,EAAE;AAChC,IAAA,OAAO,QAAQ,CAAC;QACd,QAAQ,EAAE,CAAC,cAAc,CAAC;AAC1B,QAAA,OAAO,EAAE,eAAe;AACxB,QAAA,OAAO,EAAE,SAAS,CAAC,WAAW,KAAK,SAAS;AAC7C,KAAA,CAAC;AACJ;AAEO,MAAM,mBAAmB,GAAG;AAE5B,MAAM,YAAY,GAAG;AAC1B,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,IAAI,EAAE,aAAa;AACnB,IAAA,QAAQ,EAAE,CAAC;IACX,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,GAAa,GAAG,mBAAmB,EAAE;;;;;"}
@@ -0,0 +1,8 @@
1
+ interface SolanaStakeBalances {
2
+ solBalance: string;
3
+ raiSolBalance: string;
4
+ isLoading: boolean;
5
+ refetch: () => void;
6
+ }
7
+ declare const useSolanaStakeBalances: () => SolanaStakeBalances;
8
+ export default useSolanaStakeBalances;
@@ -0,0 +1,47 @@
1
+ import { useQuery } from '@tanstack/react-query';
2
+ import { useWallet, useConnection } from '@solana/wallet-adapter-react';
3
+ import { PublicKey, LAMPORTS_PER_SOL } from '@solana/web3.js';
4
+ import { getAssociatedTokenAddressSync, getAccount } from '@solana/spl-token';
5
+ import { RAISOL_MINT_ADDRESS } from './useRakuraiStats.js';
6
+
7
+ const useSolanaStakeBalances = () => {
8
+ const { publicKey } = useWallet();
9
+ const { connection } = useConnection();
10
+ const { data, isLoading, refetch } = useQuery({
11
+ queryKey: ['solanaStakeBalances', publicKey?.toBase58()],
12
+ enabled: !!publicKey,
13
+ queryFn: async () => {
14
+ // Following async-parallel: fetch both balances concurrently
15
+ const [solInfo, raiSolBal] = await Promise.all([
16
+ // SOL native balance
17
+ connection.getAccountInfo(publicKey),
18
+ // raiSOL SPL token balance — returns '0' if ATA does not exist
19
+ (async () => {
20
+ try {
21
+ console.log('fetching raiSOL balance');
22
+ const ataAddress = getAssociatedTokenAddressSync(new PublicKey(RAISOL_MINT_ADDRESS), publicKey);
23
+ const tokenAccount = await getAccount(connection, ataAddress);
24
+ return (Number(tokenAccount.amount) / 1e9).toString();
25
+ }
26
+ catch {
27
+ // ATA not found (common for wallets that have never staked)
28
+ return '0';
29
+ }
30
+ })(),
31
+ ]);
32
+ return {
33
+ solBalance: ((solInfo?.lamports ?? 0) / LAMPORTS_PER_SOL).toString(),
34
+ raiSolBalance: raiSolBal,
35
+ };
36
+ },
37
+ });
38
+ return {
39
+ solBalance: data?.solBalance ?? '0',
40
+ raiSolBalance: data?.raiSolBalance ?? '0',
41
+ isLoading,
42
+ refetch,
43
+ };
44
+ };
45
+
46
+ export { useSolanaStakeBalances as default };
47
+ //# sourceMappingURL=useSolanaStakeBalances.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSolanaStakeBalances.js","sources":["../../../src/views/RakuraiComponent/useSolanaStakeBalances.ts"],"sourcesContent":["import { useQuery } from '@tanstack/react-query'\nimport { useWallet, useConnection } from '@solana/wallet-adapter-react'\nimport { PublicKey, LAMPORTS_PER_SOL } from '@solana/web3.js'\nimport { getAssociatedTokenAddressSync, getAccount } from '@solana/spl-token'\nimport { RAISOL_MINT_ADDRESS } from './useRakuraiStats'\n\ninterface SolanaStakeBalances {\n solBalance: string\n raiSolBalance: string\n isLoading: boolean\n refetch: () => void\n}\n\nconst useSolanaStakeBalances = (): SolanaStakeBalances => {\n const { publicKey } = useWallet()\n const { connection } = useConnection()\n\n const { data, isLoading, refetch } = useQuery({\n queryKey: ['solanaStakeBalances', publicKey?.toBase58()],\n enabled: !!publicKey,\n queryFn: async () => {\n // Following async-parallel: fetch both balances concurrently\n const [solInfo, raiSolBal] = await Promise.all([\n // SOL native balance\n connection.getAccountInfo(publicKey!),\n // raiSOL SPL token balance — returns '0' if ATA does not exist\n (async () => {\n try {\n console.log('fetching raiSOL balance')\n const ataAddress = getAssociatedTokenAddressSync(new PublicKey(RAISOL_MINT_ADDRESS), publicKey!)\n const tokenAccount = await getAccount(connection, ataAddress)\n return (Number(tokenAccount.amount) / 1e9).toString()\n } catch {\n // ATA not found (common for wallets that have never staked)\n return '0'\n }\n })(),\n ])\n\n return {\n solBalance: ((solInfo?.lamports ?? 0) / LAMPORTS_PER_SOL).toString(),\n raiSolBalance: raiSolBal,\n }\n },\n })\n\n return {\n solBalance: data?.solBalance ?? '0',\n raiSolBalance: data?.raiSolBalance ?? '0',\n isLoading,\n refetch,\n }\n}\n\nexport default useSolanaStakeBalances\n"],"names":[],"mappings":";;;;;;AAaA,MAAM,sBAAsB,GAAG,MAA0B;AACvD,IAAA,MAAM,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE;AACjC,IAAA,MAAM,EAAE,UAAU,EAAE,GAAG,aAAa,EAAE;IAEtC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC;QAC5C,QAAQ,EAAE,CAAC,qBAAqB,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;QACxD,OAAO,EAAE,CAAC,CAAC,SAAS;QACpB,OAAO,EAAE,YAAW;;YAElB,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;;AAE7C,gBAAA,UAAU,CAAC,cAAc,CAAC,SAAU,CAAC;;gBAErC,CAAC,YAAW;AACV,oBAAA,IAAI;AACF,wBAAA,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;AACtC,wBAAA,MAAM,UAAU,GAAG,6BAA6B,CAAC,IAAI,SAAS,CAAC,mBAAmB,CAAC,EAAE,SAAU,CAAC;wBAChG,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC;AAC7D,wBAAA,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,GAAG,EAAE,QAAQ,EAAE;oBACvD;AAAE,oBAAA,MAAM;;AAEN,wBAAA,OAAO,GAAG;oBACZ;AACF,gBAAA,CAAC,GAAG;AACL,aAAA,CAAC;YAEF,OAAO;AACL,gBAAA,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,QAAQ,IAAI,CAAC,IAAI,gBAAgB,EAAE,QAAQ,EAAE;AACpE,gBAAA,aAAa,EAAE,SAAS;aACzB;QACH,CAAC;AACF,KAAA,CAAC;IAEF,OAAO;AACL,QAAA,UAAU,EAAE,IAAI,EAAE,UAAU,IAAI,GAAG;AACnC,QAAA,aAAa,EAAE,IAAI,EAAE,aAAa,IAAI,GAAG;QACzC,SAAS;QACT,OAAO;KACR;AACH;;;;"}
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": "5.1.23",
6
+ "version": "5.1.25",
7
7
  "module": "dist/main.js",
8
8
  "type": "module",
9
9
  "types": "dist/main.d.ts",
@@ -113,7 +113,8 @@
113
113
  "axios": "^1.8.2",
114
114
  "react": ">=17 <19",
115
115
  "react-dom": ">=17 <19",
116
- "wagmi": "^2.14.16"
116
+ "wagmi": "^2.14.16",
117
+ "@rakurai/rakurai-stake-sdk": "1.0.0"
117
118
  },
118
119
  "devDependencies": {
119
120
  "@eslint/js": "9.39.4",