@ape.swap/bonds-sdk 6.2.9 → 6.2.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -3
- package/dist/components/uikit-sdk/Svg/Icons/L1X.d.ts +4 -0
- package/dist/components/uikit-sdk/Svg/Icons/L1X.js +8 -0
- package/dist/components/uikit-sdk/Svg/Icons/L1X.js.map +1 -0
- package/dist/config/constants/addresses.js +1 -0
- package/dist/config/constants/addresses.js.map +1 -1
- package/dist/config/constants/chains.js +6 -0
- package/dist/config/constants/chains.js.map +1 -1
- package/dist/config/constants/networks.js +1 -0
- package/dist/config/constants/networks.js.map +1 -1
- package/dist/hooks/useSendReferenceId.js +2 -2
- package/dist/hooks/useSendReferenceId.js.map +1 -1
- package/dist/state/bondApiStats/useGetBondApiStats.js +2 -3
- package/dist/state/bondApiStats/useGetBondApiStats.js.map +1 -1
- package/dist/state/bonds/fetchBondsData/cleanBillsData.js +7 -7
- package/dist/state/bonds/fetchBondsData/cleanBillsData.js.map +1 -1
- package/dist/state/bonds/fetchBondsData/fetchBondsDataAptos.js +5 -5
- package/dist/state/bonds/fetchBondsData/fetchBondsDataAptos.js.map +1 -1
- package/dist/state/bonds/fetchBondsData/fetchBondsDataSui.js +5 -5
- package/dist/state/bonds/fetchBondsData/fetchBondsDataSui.js.map +1 -1
- package/dist/state/bonds/fetchUsersBonds/fetchUsersBondsAptos.js +5 -5
- package/dist/state/bonds/fetchUsersBonds/fetchUsersBondsAptos.js.map +1 -1
- package/dist/state/bonds/fetchUsersBonds/fetchUsersBondsEVM.js +7 -7
- package/dist/state/bonds/fetchUsersBonds/fetchUsersBondsEVM.js.map +1 -1
- package/dist/state/bonds/fetchUsersBonds/fetchUsersBondsSOL.js +7 -7
- package/dist/state/bonds/fetchUsersBonds/fetchUsersBondsSOL.js.map +1 -1
- package/dist/state/bonds/fetchUsersBonds/fetchUsersBondsSUI.js +5 -5
- package/dist/state/bonds/fetchUsersBonds/fetchUsersBondsSUI.js.map +1 -1
- package/dist/state/bonds/useBondsData.js +3 -3
- package/dist/state/bonds/useBondsData.js.map +1 -1
- package/dist/state/bonds/useBondsList.js +2 -3
- package/dist/state/bonds/useBondsList.js.map +1 -1
- package/dist/state/bonds/useBondsListPreTGE.js +2 -3
- package/dist/state/bonds/useBondsListPreTGE.js.map +1 -1
- package/dist/state/bonds/useTierProofSignature.js +3 -3
- package/dist/state/bonds/useTierProofSignature.js.map +1 -1
- package/dist/state/bonds/useUserBonds.js +4 -4
- package/dist/state/bonds/useUserBonds.js.map +1 -1
- package/dist/state/hotBonds/useHotBonds.js +3 -3
- package/dist/state/hotBonds/useHotBonds.js.map +1 -1
- package/dist/state/recommendations/useGetBondRecommendations.js +2 -2
- package/dist/state/recommendations/useGetBondRecommendations.js.map +1 -1
- package/dist/state/tokenPrices/useTokenPrices.js +2 -3
- package/dist/state/tokenPrices/useTokenPrices.js.map +1 -1
- package/dist/state/zap/useAptosZapQuote.js +2 -3
- package/dist/state/zap/useAptosZapQuote.js.map +1 -1
- package/dist/state/zap/useSoulZapBondQuote.js +3 -3
- package/dist/state/zap/useSoulZapBondQuote.js.map +1 -1
- package/dist/state/zap/useSuiZapQuote.js +2 -3
- package/dist/state/zap/useSuiZapQuote.js.map +1 -1
- package/dist/utils/httpClient.d.ts +11 -0
- package/dist/utils/httpClient.js +48 -0
- package/dist/utils/httpClient.js.map +1 -0
- package/dist/views/BuyBond/BuyComponentSui.js +2 -3
- package/dist/views/BuyBond/BuyComponentSui.js.map +1 -1
- package/dist/views/YourBondsModal/components/LinkShare/utils.js +8 -7
- package/dist/views/YourBondsModal/components/LinkShare/utils.js.map +1 -1
- package/package.json +2 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSuiZapQuote.js","sources":["../../../src/state/zap/useSuiZapQuote.ts"],"sourcesContent":["// =============================================================================\n// useSuiZapQuote — Aftermath Finance DEX aggregator quote for Sui zap\n// =============================================================================\n//\n// Mainnet: fetches a swap quote from Aftermath Finance (Sui DEX aggregator)\n// when the user selects an input token different from the bond's principal token.\n//\n// Testnet: no DEX aggregator supports Sui testnet or our custom test tokens.\n// Returns a mock quote calculated from fallback prices so the full zap UI and\n// two-TX flow (mint → deposit) can be tested end-to-end.\n//\n// Aftermath API: POST https://aftermath.finance/api/router/trade-route\n\nimport { useMemo } from 'react'\nimport { ChainId, Token } from '@ape.swap/apeswap-lists'\nimport { useQuery } from '@tanstack/react-query'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport { BondsData } from '../../types/bonds'\nimport useDebounce from '../../hooks/useDebounce'\nimport
|
|
1
|
+
{"version":3,"file":"useSuiZapQuote.js","sources":["../../../src/state/zap/useSuiZapQuote.ts"],"sourcesContent":["// =============================================================================\n// useSuiZapQuote — Aftermath Finance DEX aggregator quote for Sui zap\n// =============================================================================\n//\n// Mainnet: fetches a swap quote from Aftermath Finance (Sui DEX aggregator)\n// when the user selects an input token different from the bond's principal token.\n//\n// Testnet: no DEX aggregator supports Sui testnet or our custom test tokens.\n// Returns a mock quote calculated from fallback prices so the full zap UI and\n// two-TX flow (mint → deposit) can be tested end-to-end.\n//\n// Aftermath API: POST https://aftermath.finance/api/router/trade-route\n\nimport { useMemo } from 'react'\nimport { ChainId, Token } from '@ape.swap/apeswap-lists'\nimport { useQuery } from '@tanstack/react-query'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport { BondsData } from '../../types/bonds'\nimport useDebounce from '../../hooks/useDebounce'\nimport { apiPost } from '../../utils/httpClient'\nimport { IS_SUI_MAINNET } from '../../constants/suiConstants'\nimport { formatUnits, parseUnits, toFixedString } from '../../utils/fixedPoint'\n\nconst AFTERMATH_API_URL = 'https://aftermath.finance/api/router/trade-route'\nconst AFTERMATH_TX_API_URL = 'https://aftermath.finance/api/router/transactions/trade'\n\ninterface AftermathCoinInfo {\n type: string\n amount: string // atomic units with BigInt \"n\" suffix, e.g. \"963906n\"\n tradeFee: string\n}\n\ninterface AftermathTradeRoute {\n routes: Array<{\n paths: Array<Record<string, unknown>>\n portion: string\n coinIn: AftermathCoinInfo\n coinOut: AftermathCoinInfo\n spotPrice: number\n }>\n coinIn: AftermathCoinInfo\n coinOut: AftermathCoinInfo\n spotPrice: number\n netTradeFeePercentage: number\n}\n\n/** Parse Aftermath amount strings — they may have a trailing \"n\" (BigInt notation) */\nconst parseAftermathAmount = (amount: string): string => {\n return amount.replace(/n$/, '')\n}\n\nconst useSuiZapQuote = (\n typedValue: string,\n inputToken: Token | undefined,\n bond: BondsData | undefined,\n account?: string,\n slippage = 0.5,\n): [\n loading: boolean,\n response: AftermathTradeRoute | null,\n depositAmount: string,\n error: boolean,\n minimumDepositAmount: string,\n] => {\n const debouncedInput = useDebounce(typedValue, 400)\n\n const principalTokenAddress = bond?.lpToken?.address?.[ChainId.SUI]\n const inputTokenAddress = inputToken?.address?.[ChainId.SUI]\n\n // Aftermath uses atomic units — convert from human-readable\n const inputDecimals = inputToken?.decimals?.[ChainId.SUI] ?? 9\n const inputAmountAtomic = useMemo(() => {\n if (!debouncedInput || Number(debouncedInput) <= 0) return '0'\n return parseUnits(debouncedInput, inputDecimals, 'floor').toString()\n }, [debouncedInput, inputDecimals])\n\n const principalDecimals = bond?.lpToken?.decimals?.[ChainId.SUI] ?? 6\n\n const queryParams = useMemo(() => {\n if (\n !inputTokenAddress ||\n !principalTokenAddress ||\n inputAmountAtomic === '0' ||\n !account ||\n inputTokenAddress.toLowerCase() === principalTokenAddress.toLowerCase()\n ) {\n return null\n }\n\n return {\n coinInType: inputTokenAddress,\n coinOutType: principalTokenAddress,\n coinInAmount: inputAmountAtomic,\n }\n }, [inputTokenAddress, principalTokenAddress, inputAmountAtomic, account])\n\n // -------------------------------------------------------------------------\n // Mainnet: fetch real quote from Aftermath\n // -------------------------------------------------------------------------\n const fetchAftermathQuote = async (): Promise<AftermathTradeRoute | null> => {\n if (!queryParams) return null\n\n const data = await apiPost<AftermathTradeRoute>(AFTERMATH_API_URL, queryParams)\n if (!data?.coinOut?.amount) return null\n return data\n }\n\n const {\n data: quoteData,\n isLoading,\n isFetching,\n error,\n } = useQuery({\n queryKey: [QUERY_KEYS.ZAP_TOKEN_QUOTE, 'aftermath-sui', queryParams],\n queryFn: fetchAftermathQuote,\n refetchInterval: 60000,\n enabled: IS_SUI_MAINNET && !!queryParams,\n retry: 1,\n staleTime: 30000,\n })\n\n // Use testnet mock on testnet, real quote on mainnet\n const activeQuote = quoteData ?? null\n const zapError = !!error\n\n // Convert amounts to human-readable\n const outputAmountDecimal = activeQuote?.coinOut?.amount\n ? formatUnits(parseAftermathAmount(activeQuote.coinOut.amount), principalDecimals)\n : undefined\n\n const estimatedDepositAmount = outputAmountDecimal ? toFixedString(outputAmountDecimal, principalDecimals) : '0'\n\n // Apply slippage for minimum deposit amount\n const minimumDepositAmount = outputAmountDecimal\n ? toFixedString(Number(outputAmountDecimal) * (1 - slippage / 100), principalDecimals)\n : '0'\n\n const zapLoading = IS_SUI_MAINNET ? isLoading || isFetching : false\n\n return [zapLoading, activeQuote, estimatedDepositAmount, zapError, minimumDepositAmount]\n}\n\nexport { AFTERMATH_TX_API_URL }\n\nexport default useSuiZapQuote\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare class HttpError extends Error {
|
|
2
|
+
status: number;
|
|
3
|
+
constructor(status: number, statusText: string);
|
|
4
|
+
}
|
|
5
|
+
export declare function apiGet<T = any>(url: string, opts?: {
|
|
6
|
+
timeoutMs?: number;
|
|
7
|
+
}): Promise<T>;
|
|
8
|
+
export declare function apiPost<T = any>(url: string, body?: unknown, opts?: {
|
|
9
|
+
timeoutMs?: number;
|
|
10
|
+
headers?: Record<string, string>;
|
|
11
|
+
}): Promise<T>;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// Thin fetch wrapper matching the subset of axios behavior this SDK relies on:
|
|
2
|
+
// throws on non-2xx responses, and parses the body as JSON when possible,
|
|
3
|
+
// falling back to raw text otherwise (mirrors axios's default transformResponse).
|
|
4
|
+
class HttpError extends Error {
|
|
5
|
+
constructor(status, statusText) {
|
|
6
|
+
super(`Request failed with status ${status}${statusText ? ` (${statusText})` : ''}`);
|
|
7
|
+
this.status = status;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
async function parseBody(res) {
|
|
11
|
+
const text = await res.text();
|
|
12
|
+
if (!text)
|
|
13
|
+
return undefined;
|
|
14
|
+
try {
|
|
15
|
+
return JSON.parse(text);
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return text;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
async function request(url, init, timeoutMs) {
|
|
22
|
+
const controller = timeoutMs ? new AbortController() : undefined;
|
|
23
|
+
const timeoutId = timeoutMs ? setTimeout(() => controller.abort(), timeoutMs) : undefined;
|
|
24
|
+
try {
|
|
25
|
+
const res = await fetch(url, { ...init, signal: controller?.signal });
|
|
26
|
+
const body = await parseBody(res);
|
|
27
|
+
if (!res.ok)
|
|
28
|
+
throw new HttpError(res.status, res.statusText);
|
|
29
|
+
return body;
|
|
30
|
+
}
|
|
31
|
+
finally {
|
|
32
|
+
if (timeoutId)
|
|
33
|
+
clearTimeout(timeoutId);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function apiGet(url, opts) {
|
|
37
|
+
return request(url, { method: 'GET' }, opts?.timeoutMs);
|
|
38
|
+
}
|
|
39
|
+
function apiPost(url, body, opts) {
|
|
40
|
+
return request(url, {
|
|
41
|
+
method: 'POST',
|
|
42
|
+
body: body !== undefined && body !== null ? JSON.stringify(body) : undefined,
|
|
43
|
+
headers: { 'Content-Type': 'application/json', ...(opts?.headers ?? {}) },
|
|
44
|
+
}, opts?.timeoutMs);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export { HttpError, apiGet, apiPost };
|
|
48
|
+
//# sourceMappingURL=httpClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"httpClient.js","sources":["../../src/utils/httpClient.ts"],"sourcesContent":["// Thin fetch wrapper matching the subset of axios behavior this SDK relies on:\n// throws on non-2xx responses, and parses the body as JSON when possible,\n// falling back to raw text otherwise (mirrors axios's default transformResponse).\n\nexport class HttpError extends Error {\n status: number\n\n constructor(status: number, statusText: string) {\n super(`Request failed with status ${status}${statusText ? ` (${statusText})` : ''}`)\n this.status = status\n }\n}\n\nasync function parseBody(res: Response): Promise<any> {\n const text = await res.text()\n if (!text) return undefined\n try {\n return JSON.parse(text)\n } catch {\n return text\n }\n}\n\nasync function request<T>(url: string, init: RequestInit, timeoutMs?: number): Promise<T> {\n const controller = timeoutMs ? new AbortController() : undefined\n const timeoutId = timeoutMs ? setTimeout(() => controller!.abort(), timeoutMs) : undefined\n\n try {\n const res = await fetch(url, { ...init, signal: controller?.signal })\n const body = await parseBody(res)\n if (!res.ok) throw new HttpError(res.status, res.statusText)\n return body as T\n } finally {\n if (timeoutId) clearTimeout(timeoutId)\n }\n}\n\nexport function apiGet<T = any>(url: string, opts?: { timeoutMs?: number }): Promise<T> {\n return request<T>(url, { method: 'GET' }, opts?.timeoutMs)\n}\n\nexport function apiPost<T = any>(\n url: string,\n body?: unknown,\n opts?: { timeoutMs?: number; headers?: Record<string, string> },\n): Promise<T> {\n return request<T>(\n url,\n {\n method: 'POST',\n body: body !== undefined && body !== null ? JSON.stringify(body) : undefined,\n headers: { 'Content-Type': 'application/json', ...(opts?.headers ?? {}) },\n },\n opts?.timeoutMs,\n )\n}\n"],"names":[],"mappings":"AAAA;AACA;AACA;AAEM,MAAO,SAAU,SAAQ,KAAK,CAAA;IAGlC,WAAA,CAAY,MAAc,EAAE,UAAkB,EAAA;AAC5C,QAAA,KAAK,CAAC,CAAA,2BAAA,EAA8B,MAAM,CAAA,EAAG,UAAU,GAAG,CAAA,EAAA,EAAK,UAAU,GAAG,GAAG,EAAE,CAAA,CAAE,CAAC;AACpF,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACtB;AACD;AAED,eAAe,SAAS,CAAC,GAAa,EAAA;AACpC,IAAA,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE;AAC7B,IAAA,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,SAAS;AAC3B,IAAA,IAAI;AACF,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,IAAI;IACb;AACF;AAEA,eAAe,OAAO,CAAI,GAAW,EAAE,IAAiB,EAAE,SAAkB,EAAA;AAC1E,IAAA,MAAM,UAAU,GAAG,SAAS,GAAG,IAAI,eAAe,EAAE,GAAG,SAAS;IAChE,MAAM,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC,MAAM,UAAW,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,GAAG,SAAS;AAE1F,IAAA,IAAI;AACF,QAAA,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;AACrE,QAAA,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC;QACjC,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,IAAI,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,CAAC;AAC5D,QAAA,OAAO,IAAS;IAClB;YAAU;AACR,QAAA,IAAI,SAAS;YAAE,YAAY,CAAC,SAAS,CAAC;IACxC;AACF;AAEM,SAAU,MAAM,CAAU,GAAW,EAAE,IAA6B,EAAA;AACxE,IAAA,OAAO,OAAO,CAAI,GAAG,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC;AAC5D;SAEgB,OAAO,CACrB,GAAW,EACX,IAAc,EACd,IAA+D,EAAA;IAE/D,OAAO,OAAO,CACZ,GAAG,EACH;AACE,QAAA,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,SAAS;AAC5E,QAAA,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,IAAI,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC,EAAE;AAC1E,KAAA,EACD,IAAI,EAAE,SAAS,CAChB;AACH;;;;"}
|
|
@@ -33,7 +33,7 @@ import { getSuiClient, readFreshTrueBondPrice, verifySuiTxSuccess } from '../../
|
|
|
33
33
|
import { openSuiWalletConnector } from '../../config/constants/walletConnectors.js';
|
|
34
34
|
import { useQueryClient } from '@tanstack/react-query';
|
|
35
35
|
import { QUERY_KEYS } from '../../config/constants/queryKeys.js';
|
|
36
|
-
import
|
|
36
|
+
import { apiPost } from '../../utils/httpClient.js';
|
|
37
37
|
import { toFixedString, parseUnits, mulDivRound } from '../../utils/fixedPoint.js';
|
|
38
38
|
|
|
39
39
|
// (100 + slippage) / 100 as an exact integer fraction, scaled by 1e6 to preserve fractional
|
|
@@ -278,12 +278,11 @@ const BuyComponentSui = ({ onDismiss, bondAddress, bondChain, isProjectView, set
|
|
|
278
278
|
// TX1: Acquire principal tokens
|
|
279
279
|
// if (IS_SUI_MAINNET) {
|
|
280
280
|
// Mainnet: swap via Aftermath DEX aggregator
|
|
281
|
-
const
|
|
281
|
+
const swapTxBytes = await apiPost(AFTERMATH_TX_API_URL, {
|
|
282
282
|
walletAddress: suiAccount,
|
|
283
283
|
completeRoute: aftermathQuote,
|
|
284
284
|
slippage: slippage / 100,
|
|
285
285
|
});
|
|
286
|
-
const swapTxBytes = txResponse.data;
|
|
287
286
|
if (!swapTxBytes)
|
|
288
287
|
throw new Error('Aftermath returned no transaction data');
|
|
289
288
|
const swapTx = Transaction.from(swapTxBytes);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BuyComponentSui.js","sources":["../../../src/views/BuyBond/BuyComponentSui.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useState } from 'react'\nimport { ChainId } from '@ape.swap/apeswap-lists'\nimport { Transaction } from '@mysten/sui/transactions'\nimport useSuiZapQuote, { AFTERMATH_TX_API_URL } from '../../state/zap/useSuiZapQuote'\nimport { findSuiZapToken } from '../../config/constants/suiZapTokens'\nimport useBondsData from '../../state/bonds/useBondsData'\nimport { useSDKConfig } from '../../state/useSDKConfig'\nimport { usePopups } from '../../state/popups/usePopups'\nimport { useSlippage } from '../../state/slippage/useSlippage'\nimport { BondsData } from '../../types/bonds'\nimport { formatUSDNumber, getMaxBuy, getPayoutAmount, getPrincipalAmount } from '../../utils/displayHelpers'\nimport { formatNumberSI } from '../../utils/formatNumber'\nimport { findHighestTrueBondPrice } from '../../utils/bondPriceHelpers'\nimport { reportError } from '../../utils/reportError'\nimport { MCBuyComponentStyles } from '../../utils/campaignStyles'\nimport track from '../../utils/track'\nimport { remove0xPrefix } from '../../utils/remove0xPrefix'\nimport { getSymbol } from '../../utils/getNativeTicker'\n\nimport useSUIAccount from '../../hooks/accounts/useSUIAccount'\nimport useTokenFromZapList from '../../hooks/useTokenFromZapList'\nimport useSortedZapList from '../../hooks/useSortedZapList'\nimport TokenSelectorPanel from '../../components/TokenSelectorPanel'\nimport BondModalHeader from './components/BondModalHeader'\nimport BondCards from './components/BondCards/BondCards'\nimport Estimations from './components/Estimations'\nimport ProjectDescription from './components/ProjectDescription'\n\nimport Flex from '../../components/uikit-sdk/Flex'\nimport Text from '../../components/uikit-sdk/Text'\nimport Button from '../../components/uikit-sdk/Button/Button'\nimport SafeHTMLComponent from '../../components/SafeHTMLComponent'\n\nimport { SUI_DEPOSIT_FUNCTION, SUI_PACKAGE_ID } from '../../constants/suiConstants'\nimport { getSuiClient, readFreshTrueBondPrice, verifySuiTxSuccess } from '../../utils/suiHelpers'\nimport { openSuiWalletConnector } from '../../config/constants/walletConnectors'\nimport { MarketingCampaign } from '@ape.swap/apeswap-lists'\nimport { useQueryClient } from '@tanstack/react-query'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport axios from 'axios'\nimport { SuiJsonRpcClient } from '@mysten/sui/dist/cjs/jsonRpc/client'\nimport { mulDivRound, parseUnits, toFixedString } from '../../utils/fixedPoint'\n\n// (100 + slippage) / 100 as an exact integer fraction, scaled by 1e6 to preserve fractional\n// slippage percentages (e.g. 0.5%) without a float precompute.\nconst slippageMaxPrice = (priceBig: bigint, slippage: number): bigint =>\n mulDivRound(priceBig, parseUnits(String(100 + slippage), 6), parseUnits('100', 6), 'ceil')\n\nconst extractSuiBillId = async (digest: string, suiClient: SuiJsonRpcClient): Promise<string> => {\n const txBlock = await suiClient.getTransactionBlock({\n digest,\n options: {\n showEffects: true,\n showObjectChanges: true,\n showEvents: true,\n },\n })\n const bondNftType = `${SUI_PACKAGE_ID}::bond_nft::BondNFT`\n const createdNft = txBlock.objectChanges?.find(\n (change) =>\n change.type === 'created' && 'objectType' in change && (change.objectType as string)?.includes(bondNftType),\n )\n if (createdNft && 'objectId' in createdNft) {\n const nftObjectId = createdNft.objectId as string\n try {\n const nftObj = await suiClient.getObject({\n id: nftObjectId,\n options: { showContent: true },\n })\n if (nftObj.data?.content?.dataType === 'moveObject') {\n const fields = nftObj.data.content.fields as Record<string, any>\n const billId = String(fields?.bill_id ?? '')\n if (billId && billId !== 'undefined' && billId !== '') {\n return billId\n }\n }\n } catch (e) {\n console.warn('[SUI AFTER-PURCHASE] Failed to read BondNFT object:', nftObjectId, e)\n }\n }\n return `digest:${digest}`\n}\n\ninterface BuyComponentSuiProps {\n onDismiss?: () => void\n bondAddress?: string\n bondChain?: number\n setBillId?: (id: string) => void\n isProjectView?: boolean\n}\n\nconst BuyComponentSui: React.FC<BuyComponentSuiProps> = ({\n onDismiss,\n bondAddress,\n bondChain,\n isProjectView,\n setBillId,\n}) => {\n const SDKConfig = useSDKConfig()\n const queryClient = useQueryClient()\n\n // Hooks\n const { address: suiAccount, signAndExecuteTransaction } = useSUIAccount()\n const { data: bonds } = useBondsData()\n const { addToastError, addToastSuccess } = usePopups()\n const { solSlippage: slippage } = useSlippage() // reuse Sol slippage bucket for Sui\n\n const bondData: BondsData | undefined = bonds?.find(\n (bond) => bond?.contractAddress?.[bond?.chainId]?.toLowerCase() === bondAddress?.toLowerCase(),\n )\n\n // Derived pricing (same path the Solana no-tier branch uses).\n const trueBondPriceData = findHighestTrueBondPrice('0', bondData?.trueBondPrices)\n\n // State\n const [inputValue, setInputValue] = useState('')\n const [inputTokenString, setInputTokenString] = useState(bondData?.lpToken?.address?.[bondData?.chainId])\n const [loadingTx, setLoadingTx] = useState(false)\n\n // Token selection — reuses the same infrastructure as Solana\n const inputToken = useTokenFromZapList(inputTokenString, bondData?.chainId, bondData?.lpToken)\n const principalAddress = bondData?.lpToken?.address?.[bondData?.chainId]\n // Detect zap: selected token differs from the bond principal\n const SUI_NATIVE_COIN_TYPE = '0x2::sui::SUI'\n const isNativeMatchingPrincipal =\n (inputTokenString === 'NATIVE' || inputTokenString?.toLowerCase() === SUI_NATIVE_COIN_TYPE.toLowerCase()) &&\n principalAddress?.toLowerCase() === SUI_NATIVE_COIN_TYPE.toLowerCase()\n const isZap =\n !!inputTokenString &&\n !!principalAddress &&\n !isNativeMatchingPrincipal &&\n inputTokenString.toLowerCase() !== principalAddress.toLowerCase()\n\n // Zap quote from Aftermath DEX aggregator\n const suiZapToken = findSuiZapToken(\n inputToken && inputToken !== 'NATIVE'\n ? inputToken?.address?.[ChainId.SUI]\n : inputToken === 'NATIVE'\n ? '0x2::sui::SUI'\n : undefined,\n )\n const [fetchingZapQuote, aftermathQuote, zapDepositAmount, zapError] = useSuiZapQuote(\n inputValue,\n suiZapToken,\n bondData,\n suiAccount ?? undefined,\n slippage,\n )\n\n // Sorted zap list (balances + prices)\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\n // Estimations — use zapDepositAmount if swapping\n const depositAmount = isZap ? zapDepositAmount : inputValue\n const youSpendString = `${formatNumberSI(inputValue)} ${getSymbol(inputToken, bondData?.chainId)} = $${formatUSDNumber(\n (parseFloat(inputValue || '0') * (inputTokenPrice ?? 0)).toString(),\n )}`\n\n const exceedsRealMaxBuy = getMaxBuy(bondData, true) <= getPayoutAmount(bondData, depositAmount, '0')\n const exceedsSafeMaxBuy =\n getMaxBuy(bondData, false) * (isZap ? 0.995 : 0.9995) <= getPayoutAmount(bondData, depositAmount, '0')\n\n const exceedsBalance = Number(inputCurrencyBalance ?? '0') < Number(inputValue)\n\n const load = loadingTx || (fetchingZapQuote && !!inputValue)\n\n // Handlers\n const handleCurrencySelect = useCallback((newInputToken: string) => {\n setInputValue('')\n setInputTokenString(newInputToken)\n }, [])\n\n const handleMaxButton = () => {\n const balance = Number(inputCurrencyBalance ?? '0')\n const principalDecimals = bondData?.lpToken?.decimals?.[bondData?.chainId] ?? 9\n const maxBuyAmount = getMaxBuy(bondData, SDKConfig.showLowValueBonds)\n\n const maxPossibleUserPurchase = getPayoutAmount(bondData, balance.toString(), '0')\n if (maxPossibleUserPurchase > maxBuyAmount) {\n const principalForMaxBuy = getPrincipalAmount(bondData, maxBuyAmount.toString(), '0')\n setInputValue(toFixedString(principalForMaxBuy, principalDecimals))\n } else {\n setInputValue(toFixedString(balance, principalDecimals))\n }\n }\n\n const handleBuyCallback = async () => {\n if (!suiAccount || !bondData || !inputValue || !signAndExecuteTransaction) return\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 setLoadingTx(true)\n\n const principalDecimals = bondData.lpToken.decimals[bondData.chainId] ?? 9\n const atomicAmount = parseUnits(inputValue, principalDecimals, 'floor').toString()\n\n const market = bondData.contractAddress[bondData.chainId]\n\n // Read fresh bond price from chain to avoid stale cache after previous purchases\n const freshTruePrice = await readFreshTrueBondPrice(market)\n const atomicMaxPrice = slippageMaxPrice(freshTruePrice, slippage).toString()\n const principalCoinType = bondData.lpToken.address[bondData.chainId]\n const payoutCoinType = bondData.earnToken.address[bondData.chainId]\n if (!principalCoinType || !payoutCoinType) throw new Error('Missing token type info')\n\n // Build Sui transaction\n const tx = new Transaction()\n const isPrincipalNativeSui =\n !principalCoinType || principalCoinType.toLowerCase() === SUI_NATIVE_COIN_TYPE.toLowerCase()\n\n let principalCoin\n if (isPrincipalNativeSui) {\n ;[principalCoin] = tx.splitCoins(tx.gas, [tx.pure.u64(atomicAmount)])\n } else {\n const suiClient = getSuiClient()\n const userCoins = await suiClient.getCoins({ owner: suiAccount, coinType: principalCoinType })\n if (!userCoins.data.length) throw new Error(`No ${bondData.lpToken.symbol} coins found in wallet`)\n if (userCoins.data.length > 1) {\n const [primary, ...rest] = userCoins.data.map((c) => tx.object(c.coinObjectId))\n tx.mergeCoins(primary, rest)\n ;[principalCoin] = tx.splitCoins(primary, [tx.pure.u64(atomicAmount)])\n } else {\n ;[principalCoin] = tx.splitCoins(tx.object(userCoins.data[0].coinObjectId), [tx.pure.u64(atomicAmount)])\n }\n }\n\n if (!market || !bondData?.suiTreasuryId || !bondData?.billNnftAddress?.[ChainId.SUI]) {\n return\n }\n\n tx.moveCall({\n target: SUI_DEPOSIT_FUNCTION,\n typeArguments: [payoutCoinType, principalCoinType],\n arguments: [\n tx.object(market),\n tx.object(bondData.suiTreasuryId),\n tx.object(bondData.billNnftAddress[ChainId.SUI]),\n principalCoin,\n tx.pure.u64(atomicMaxPrice),\n tx.pure.address(suiAccount),\n tx.object('0x6'), // clock\n ],\n })\n\n // Pre-build the transaction so the wallet receives fully-resolved bytes.\n // Some wallets (e.g. Phantom) fail with \"Unexpected error\" when they have\n // to build/simulate a Transaction object themselves.\n tx.setSender(suiAccount)\n tx.setGasBudget(50_000_000) // 0.05 SUI — generous for a bond deposit\n const builtBytes = await tx.build({ client: getSuiClient() })\n const prebuiltTx = Transaction.from(builtBytes)\n const response = await signAndExecuteTransaction({\n transaction: prebuiltTx,\n })\n\n const digest = response?.digest\n if (!digest) throw new Error('No tx digest returned by wallet')\n\n const suiClient = getSuiClient()\n await suiClient.waitForTransaction({ digest })\n await verifySuiTxSuccess(digest)\n\n // Extract the bill_id from the confirmed transaction.\n // extractSuiBillId logs the full tx block so you can inspect the raw data\n // in case automatic extraction fails.\n const billId = await extractSuiBillId(digest, suiClient)\n console.log('[SUI AFTER-PURCHASE] handleBuyCallback billId:', billId)\n\n // Invalidate bonds data so next purchase uses fresh pricing\n await queryClient.invalidateQueries({ queryKey: [QUERY_KEYS.BONDS_DATA] })\n\n // Sui's indexer has a short lag — getOwnedObjects may not return the\n // new BondNFT immediately. Schedule re-invalidations so the Your Bonds\n // view picks up the new bond once the indexer catches up.\n setTimeout(() => queryClient.invalidateQueries({ queryKey: [QUERY_KEYS.USER_BONDS] }), 3000)\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(market),\n usdAmount: parseFloat(inputValue) * (inputTokenPrice ?? 0),\n },\n })\n\n addToastSuccess(digest, bondChain as ChainId)\n setBillId?.(billId)\n } catch (error: any) {\n console.error('[SUI DEBUG] Error during Sui bond purchase:', error)\n addToastError(error?.message || 'Unknown error')\n reportError({\n apiUrl: SDKConfig?.urls?.apiV2,\n error: error?.message,\n extraInfo: { type: 'suiBuyBond', error: error?.message },\n chainId: bondChain,\n account: suiAccount,\n })\n } finally {\n setLoadingTx(false)\n }\n }\n\n const handleZapCallback = async () => {\n if (loadingTx || !suiAccount || !bondData || !aftermathQuote || !signAndExecuteTransaction) return\n\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\n try {\n setLoadingTx(true)\n const suiClient = getSuiClient()\n const principalDecimals = bondData.lpToken.decimals[bondData.chainId] ?? 6\n const depositAmountAtomic = parseUnits(zapDepositAmount, principalDecimals, 'floor').toString()\n\n // TX1: Acquire principal tokens\n // if (IS_SUI_MAINNET) {\n // Mainnet: swap via Aftermath DEX aggregator\n const txResponse = await axios.post(AFTERMATH_TX_API_URL, {\n walletAddress: suiAccount,\n completeRoute: aftermathQuote,\n slippage: slippage / 100,\n })\n\n const swapTxBytes = txResponse.data\n if (!swapTxBytes) throw new Error('Aftermath returned no transaction data')\n\n const swapTx = Transaction.from(swapTxBytes)\n const swapResponse = await signAndExecuteTransaction({ transaction: swapTx })\n const swapDigest = swapResponse?.digest\n if (!swapDigest) throw new Error('No tx digest returned for swap')\n await suiClient.waitForTransaction({ digest: swapDigest })\n // } else {\n // // Testnet: mint principal tokens via test_principal_token::mint\n // // No DEX aggregator supports Sui testnet or custom test tokens.\n // const mintTx = new Transaction()\n // mintTx.moveCall({\n // target: SUI_MINT_PRINCIPAL_FUNCTION,\n // arguments: [\n // mintTx.object(SUI_PRINCIPAL_TOKEN_ADMIN_TESTNET),\n // mintTx.pure.u64(depositAmountAtomic),\n // mintTx.pure.address(suiAccount),\n // ],\n // })\n //\n // mintTx.setSender(suiAccount)\n // mintTx.setGasBudget(50_000_000)\n // const builtMint = await mintTx.build({ client: suiClient })\n // const prebuiltMint = Transaction.from(builtMint)\n //\n // const mintResponse = await signAndExecuteTransaction({ transaction: prebuiltMint })\n // const mintDigest = mintResponse?.digest\n // if (!mintDigest) throw new Error('No tx digest returned for testnet mint')\n // await suiClient.waitForTransaction({ digest: mintDigest })\n // }\n\n // TX2: Deposit into bond with principal tokens\n const market = bondData.contractAddress[ChainId.SUI]\n\n // Read fresh bond price from chain to avoid stale cache\n const freshTruePrice = await readFreshTrueBondPrice(market)\n const atomicMaxPrice = slippageMaxPrice(freshTruePrice, slippage).toString()\n\n const principalCoinType = bondData.lpToken.address[bondData.chainId]\n const payoutCoinType = bondData.earnToken.address[bondData.chainId]\n if (!principalCoinType || !payoutCoinType) throw new Error('Missing token type info')\n\n const tx = new Transaction()\n const isPrincipalNativeSui = principalCoinType.toLowerCase() === SUI_NATIVE_COIN_TYPE.toLowerCase()\n\n let principalCoin\n if (isPrincipalNativeSui) {\n ;[principalCoin] = tx.splitCoins(tx.gas, [tx.pure.u64(depositAmountAtomic)])\n } else {\n const userCoins = await suiClient.getCoins({ owner: suiAccount, coinType: principalCoinType })\n if (!userCoins.data.length) throw new Error(`No ${bondData.lpToken.symbol} coins found after swap`)\n if (userCoins.data.length > 1) {\n const [primary, ...rest] = userCoins.data.map((c) => tx.object(c.coinObjectId))\n tx.mergeCoins(primary, rest)\n ;[principalCoin] = tx.splitCoins(primary, [tx.pure.u64(depositAmountAtomic)])\n } else {\n ;[principalCoin] = tx.splitCoins(tx.object(userCoins.data[0].coinObjectId), [\n tx.pure.u64(depositAmountAtomic),\n ])\n }\n }\n\n if (!market || !bondData?.suiTreasuryId || !bondData?.billNnftAddress?.[ChainId.SUI]) {\n return\n }\n\n tx.moveCall({\n target: SUI_DEPOSIT_FUNCTION,\n typeArguments: [payoutCoinType, principalCoinType],\n arguments: [\n tx.object(market),\n tx.object(bondData.suiTreasuryId),\n tx.object(bondData.billNnftAddress[ChainId.SUI]),\n principalCoin,\n tx.pure.u64(atomicMaxPrice),\n tx.pure.address(suiAccount),\n tx.object('0x6'), // clock\n ],\n })\n\n tx.setSender(suiAccount)\n tx.setGasBudget(50_000_000)\n const builtDeposit = await tx.build({ client: suiClient })\n const prebuiltDeposit = Transaction.from(builtDeposit)\n\n const depositResponse = await signAndExecuteTransaction({ transaction: prebuiltDeposit })\n const depositDigest = depositResponse?.digest\n if (!depositDigest) throw new Error('No tx digest returned for deposit')\n await suiClient.waitForTransaction({ digest: depositDigest })\n await verifySuiTxSuccess(depositDigest)\n\n // Extract the bill_id from the confirmed deposit transaction.\n // extractSuiBillId logs the full tx block so you can inspect the raw data\n // in case automatic extraction fails.\n const billId = await extractSuiBillId(depositDigest, suiClient)\n console.log('[SUI AFTER-PURCHASE] handleZapCallback billId:', billId)\n\n // Invalidate bonds data so next purchase uses fresh pricing\n await queryClient.invalidateQueries({ queryKey: [QUERY_KEYS.BONDS_DATA] })\n\n // Sui indexer lag — schedule delayed re-invalidations for user bonds\n setTimeout(() => queryClient.invalidateQueries({ queryKey: [QUERY_KEYS.USER_BONDS] }), 3000)\n\n track({\n event: 'zap',\n chain: bondChain,\n data: {\n cat: 'bond',\n token1: getSymbol(inputToken, bondData?.chainId),\n token2: bondData?.lpToken.symbol ?? '',\n amount: parseFloat(inputValue) * (inputTokenPrice ?? 0),\n },\n })\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(market),\n usdAmount: parseFloat(inputValue) * (inputTokenPrice ?? 0),\n },\n })\n\n addToastSuccess(depositDigest, bondChain as ChainId)\n setBillId?.(billId)\n } catch (error: any) {\n console.error('Error during Sui zap bond purchase:', error)\n addToastError(error?.message || 'Unknown error')\n reportError({\n apiUrl: SDKConfig?.urls?.apiV2,\n error: error?.message,\n extraInfo: { type: 'suiZapBuyBond', error: error?.message },\n chainId: bondChain,\n account: suiAccount,\n })\n } finally {\n setLoadingTx(false)\n }\n }\n\n const handleBuy = () => {\n if (loadingTx) return\n if (isZap) {\n handleZapCallback()\n } else {\n handleBuyCallback()\n }\n }\n\n // Sync inputTokenString when bondData loads after initial render\n useEffect(() => {\n const addr = bondData?.lpToken?.address?.[bondData?.chainId]\n if (addr && !inputTokenString) {\n setInputTokenString(addr)\n }\n }, [bondData?.lpToken?.address, bondData?.chainId]) // eslint-disable-line react-hooks/exhaustive-deps\n\n // Auto-select highest balance token when zap list loads\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 const hasPositiveBonus = (trueBondPriceData?.bonusWithFee ?? 0) > 0\n\n const canBuy =\n !load &&\n !!suiAccount &&\n !bondData?.soldOut &&\n !!inputValue &&\n parseFloat(inputValue) > 0 &&\n !exceedsRealMaxBuy &&\n !exceedsBalance &&\n hasPositiveBonus &&\n !SDKConfig.blockSales &&\n !zapError &&\n !(isZap && !aftermathQuote)\n\n return bondData ? (\n <Flex className=\"modal-content\" sx={{ ...MCBuyComponentStyles[bondData?.marketingCampaign as MarketingCampaign] }}>\n <Flex className=\"modaltable-container\">\n <BondModalHeader bondData={bondData} onDismiss={onDismiss} hidePromotionUi />\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 inputValue={inputValue}\n inputTokenPrice={inputTokenPrice}\n bondData={bondData}\n youSpendString={youSpendString}\n isZap={isZap}\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={ChainId.SUI}\n enableZap={true}\n bondPrincipalToken={bondData?.lpToken}\n tokenBalance={inputCurrencyBalance ?? undefined}\n selectedTokenPrice={inputTokenPrice}\n isConnected={!!suiAccount}\n />\n {bondData?.warningCard && (\n <Flex\n sx={{\n width: '100%',\n background: '#DE62F366',\n justifyContent: 'center',\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 {!suiAccount ? (\n <Button\n className=\"action-button\"\n onClick={openSuiWalletConnector}\n sx={{ width: '100%', fontSize: ['14px', '14px', '14px', '16px'] }}\n >\n Connect to Sui\n </Button>\n ) : (\n <Button\n className=\"action-button\"\n load={load}\n disabled={!canBuy}\n onClick={handleBuy}\n sx={{ width: '100%', fontSize: ['14px', '14px', '14px', '16px'] }}\n >\n {SDKConfig.blockSales\n ? 'Complete KYC to Buy'\n : zapError\n ? 'Swap quote failed'\n : exceedsRealMaxBuy\n ? 'Exceeds Max Buy. Reduce amount'\n : exceedsBalance\n ? 'Insufficient balance'\n : !inputValue || parseFloat(inputValue) === 0\n ? 'Insert amount'\n : 'buy'}\n </Button>\n )}\n </Flex>\n </Flex>\n </Flex>\n </Flex>\n ) : (\n <></>\n )\n}\n\nexport default BuyComponentSui\n"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BuyComponentSui.js","sources":["../../../src/views/BuyBond/BuyComponentSui.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useState } from 'react'\nimport { ChainId } from '@ape.swap/apeswap-lists'\nimport { Transaction } from '@mysten/sui/transactions'\nimport useSuiZapQuote, { AFTERMATH_TX_API_URL } from '../../state/zap/useSuiZapQuote'\nimport { findSuiZapToken } from '../../config/constants/suiZapTokens'\nimport useBondsData from '../../state/bonds/useBondsData'\nimport { useSDKConfig } from '../../state/useSDKConfig'\nimport { usePopups } from '../../state/popups/usePopups'\nimport { useSlippage } from '../../state/slippage/useSlippage'\nimport { BondsData } from '../../types/bonds'\nimport { formatUSDNumber, getMaxBuy, getPayoutAmount, getPrincipalAmount } from '../../utils/displayHelpers'\nimport { formatNumberSI } from '../../utils/formatNumber'\nimport { findHighestTrueBondPrice } from '../../utils/bondPriceHelpers'\nimport { reportError } from '../../utils/reportError'\nimport { MCBuyComponentStyles } from '../../utils/campaignStyles'\nimport track from '../../utils/track'\nimport { remove0xPrefix } from '../../utils/remove0xPrefix'\nimport { getSymbol } from '../../utils/getNativeTicker'\n\nimport useSUIAccount from '../../hooks/accounts/useSUIAccount'\nimport useTokenFromZapList from '../../hooks/useTokenFromZapList'\nimport useSortedZapList from '../../hooks/useSortedZapList'\nimport TokenSelectorPanel from '../../components/TokenSelectorPanel'\nimport BondModalHeader from './components/BondModalHeader'\nimport BondCards from './components/BondCards/BondCards'\nimport Estimations from './components/Estimations'\nimport ProjectDescription from './components/ProjectDescription'\n\nimport Flex from '../../components/uikit-sdk/Flex'\nimport Text from '../../components/uikit-sdk/Text'\nimport Button from '../../components/uikit-sdk/Button/Button'\nimport SafeHTMLComponent from '../../components/SafeHTMLComponent'\n\nimport { SUI_DEPOSIT_FUNCTION, SUI_PACKAGE_ID } from '../../constants/suiConstants'\nimport { getSuiClient, readFreshTrueBondPrice, verifySuiTxSuccess } from '../../utils/suiHelpers'\nimport { openSuiWalletConnector } from '../../config/constants/walletConnectors'\nimport { MarketingCampaign } from '@ape.swap/apeswap-lists'\nimport { useQueryClient } from '@tanstack/react-query'\nimport { QUERY_KEYS } from '../../config/constants/queryKeys'\nimport { apiPost } from '../../utils/httpClient'\nimport { SuiJsonRpcClient } from '@mysten/sui/dist/cjs/jsonRpc/client'\nimport { mulDivRound, parseUnits, toFixedString } from '../../utils/fixedPoint'\n\n// (100 + slippage) / 100 as an exact integer fraction, scaled by 1e6 to preserve fractional\n// slippage percentages (e.g. 0.5%) without a float precompute.\nconst slippageMaxPrice = (priceBig: bigint, slippage: number): bigint =>\n mulDivRound(priceBig, parseUnits(String(100 + slippage), 6), parseUnits('100', 6), 'ceil')\n\nconst extractSuiBillId = async (digest: string, suiClient: SuiJsonRpcClient): Promise<string> => {\n const txBlock = await suiClient.getTransactionBlock({\n digest,\n options: {\n showEffects: true,\n showObjectChanges: true,\n showEvents: true,\n },\n })\n const bondNftType = `${SUI_PACKAGE_ID}::bond_nft::BondNFT`\n const createdNft = txBlock.objectChanges?.find(\n (change) =>\n change.type === 'created' && 'objectType' in change && (change.objectType as string)?.includes(bondNftType),\n )\n if (createdNft && 'objectId' in createdNft) {\n const nftObjectId = createdNft.objectId as string\n try {\n const nftObj = await suiClient.getObject({\n id: nftObjectId,\n options: { showContent: true },\n })\n if (nftObj.data?.content?.dataType === 'moveObject') {\n const fields = nftObj.data.content.fields as Record<string, any>\n const billId = String(fields?.bill_id ?? '')\n if (billId && billId !== 'undefined' && billId !== '') {\n return billId\n }\n }\n } catch (e) {\n console.warn('[SUI AFTER-PURCHASE] Failed to read BondNFT object:', nftObjectId, e)\n }\n }\n return `digest:${digest}`\n}\n\ninterface BuyComponentSuiProps {\n onDismiss?: () => void\n bondAddress?: string\n bondChain?: number\n setBillId?: (id: string) => void\n isProjectView?: boolean\n}\n\nconst BuyComponentSui: React.FC<BuyComponentSuiProps> = ({\n onDismiss,\n bondAddress,\n bondChain,\n isProjectView,\n setBillId,\n}) => {\n const SDKConfig = useSDKConfig()\n const queryClient = useQueryClient()\n\n // Hooks\n const { address: suiAccount, signAndExecuteTransaction } = useSUIAccount()\n const { data: bonds } = useBondsData()\n const { addToastError, addToastSuccess } = usePopups()\n const { solSlippage: slippage } = useSlippage() // reuse Sol slippage bucket for Sui\n\n const bondData: BondsData | undefined = bonds?.find(\n (bond) => bond?.contractAddress?.[bond?.chainId]?.toLowerCase() === bondAddress?.toLowerCase(),\n )\n\n // Derived pricing (same path the Solana no-tier branch uses).\n const trueBondPriceData = findHighestTrueBondPrice('0', bondData?.trueBondPrices)\n\n // State\n const [inputValue, setInputValue] = useState('')\n const [inputTokenString, setInputTokenString] = useState(bondData?.lpToken?.address?.[bondData?.chainId])\n const [loadingTx, setLoadingTx] = useState(false)\n\n // Token selection — reuses the same infrastructure as Solana\n const inputToken = useTokenFromZapList(inputTokenString, bondData?.chainId, bondData?.lpToken)\n const principalAddress = bondData?.lpToken?.address?.[bondData?.chainId]\n // Detect zap: selected token differs from the bond principal\n const SUI_NATIVE_COIN_TYPE = '0x2::sui::SUI'\n const isNativeMatchingPrincipal =\n (inputTokenString === 'NATIVE' || inputTokenString?.toLowerCase() === SUI_NATIVE_COIN_TYPE.toLowerCase()) &&\n principalAddress?.toLowerCase() === SUI_NATIVE_COIN_TYPE.toLowerCase()\n const isZap =\n !!inputTokenString &&\n !!principalAddress &&\n !isNativeMatchingPrincipal &&\n inputTokenString.toLowerCase() !== principalAddress.toLowerCase()\n\n // Zap quote from Aftermath DEX aggregator\n const suiZapToken = findSuiZapToken(\n inputToken && inputToken !== 'NATIVE'\n ? inputToken?.address?.[ChainId.SUI]\n : inputToken === 'NATIVE'\n ? '0x2::sui::SUI'\n : undefined,\n )\n const [fetchingZapQuote, aftermathQuote, zapDepositAmount, zapError] = useSuiZapQuote(\n inputValue,\n suiZapToken,\n bondData,\n suiAccount ?? undefined,\n slippage,\n )\n\n // Sorted zap list (balances + prices)\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\n // Estimations — use zapDepositAmount if swapping\n const depositAmount = isZap ? zapDepositAmount : inputValue\n const youSpendString = `${formatNumberSI(inputValue)} ${getSymbol(inputToken, bondData?.chainId)} = $${formatUSDNumber(\n (parseFloat(inputValue || '0') * (inputTokenPrice ?? 0)).toString(),\n )}`\n\n const exceedsRealMaxBuy = getMaxBuy(bondData, true) <= getPayoutAmount(bondData, depositAmount, '0')\n const exceedsSafeMaxBuy =\n getMaxBuy(bondData, false) * (isZap ? 0.995 : 0.9995) <= getPayoutAmount(bondData, depositAmount, '0')\n\n const exceedsBalance = Number(inputCurrencyBalance ?? '0') < Number(inputValue)\n\n const load = loadingTx || (fetchingZapQuote && !!inputValue)\n\n // Handlers\n const handleCurrencySelect = useCallback((newInputToken: string) => {\n setInputValue('')\n setInputTokenString(newInputToken)\n }, [])\n\n const handleMaxButton = () => {\n const balance = Number(inputCurrencyBalance ?? '0')\n const principalDecimals = bondData?.lpToken?.decimals?.[bondData?.chainId] ?? 9\n const maxBuyAmount = getMaxBuy(bondData, SDKConfig.showLowValueBonds)\n\n const maxPossibleUserPurchase = getPayoutAmount(bondData, balance.toString(), '0')\n if (maxPossibleUserPurchase > maxBuyAmount) {\n const principalForMaxBuy = getPrincipalAmount(bondData, maxBuyAmount.toString(), '0')\n setInputValue(toFixedString(principalForMaxBuy, principalDecimals))\n } else {\n setInputValue(toFixedString(balance, principalDecimals))\n }\n }\n\n const handleBuyCallback = async () => {\n if (!suiAccount || !bondData || !inputValue || !signAndExecuteTransaction) return\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 setLoadingTx(true)\n\n const principalDecimals = bondData.lpToken.decimals[bondData.chainId] ?? 9\n const atomicAmount = parseUnits(inputValue, principalDecimals, 'floor').toString()\n\n const market = bondData.contractAddress[bondData.chainId]\n\n // Read fresh bond price from chain to avoid stale cache after previous purchases\n const freshTruePrice = await readFreshTrueBondPrice(market)\n const atomicMaxPrice = slippageMaxPrice(freshTruePrice, slippage).toString()\n const principalCoinType = bondData.lpToken.address[bondData.chainId]\n const payoutCoinType = bondData.earnToken.address[bondData.chainId]\n if (!principalCoinType || !payoutCoinType) throw new Error('Missing token type info')\n\n // Build Sui transaction\n const tx = new Transaction()\n const isPrincipalNativeSui =\n !principalCoinType || principalCoinType.toLowerCase() === SUI_NATIVE_COIN_TYPE.toLowerCase()\n\n let principalCoin\n if (isPrincipalNativeSui) {\n ;[principalCoin] = tx.splitCoins(tx.gas, [tx.pure.u64(atomicAmount)])\n } else {\n const suiClient = getSuiClient()\n const userCoins = await suiClient.getCoins({ owner: suiAccount, coinType: principalCoinType })\n if (!userCoins.data.length) throw new Error(`No ${bondData.lpToken.symbol} coins found in wallet`)\n if (userCoins.data.length > 1) {\n const [primary, ...rest] = userCoins.data.map((c) => tx.object(c.coinObjectId))\n tx.mergeCoins(primary, rest)\n ;[principalCoin] = tx.splitCoins(primary, [tx.pure.u64(atomicAmount)])\n } else {\n ;[principalCoin] = tx.splitCoins(tx.object(userCoins.data[0].coinObjectId), [tx.pure.u64(atomicAmount)])\n }\n }\n\n if (!market || !bondData?.suiTreasuryId || !bondData?.billNnftAddress?.[ChainId.SUI]) {\n return\n }\n\n tx.moveCall({\n target: SUI_DEPOSIT_FUNCTION,\n typeArguments: [payoutCoinType, principalCoinType],\n arguments: [\n tx.object(market),\n tx.object(bondData.suiTreasuryId),\n tx.object(bondData.billNnftAddress[ChainId.SUI]),\n principalCoin,\n tx.pure.u64(atomicMaxPrice),\n tx.pure.address(suiAccount),\n tx.object('0x6'), // clock\n ],\n })\n\n // Pre-build the transaction so the wallet receives fully-resolved bytes.\n // Some wallets (e.g. Phantom) fail with \"Unexpected error\" when they have\n // to build/simulate a Transaction object themselves.\n tx.setSender(suiAccount)\n tx.setGasBudget(50_000_000) // 0.05 SUI — generous for a bond deposit\n const builtBytes = await tx.build({ client: getSuiClient() })\n const prebuiltTx = Transaction.from(builtBytes)\n const response = await signAndExecuteTransaction({\n transaction: prebuiltTx,\n })\n\n const digest = response?.digest\n if (!digest) throw new Error('No tx digest returned by wallet')\n\n const suiClient = getSuiClient()\n await suiClient.waitForTransaction({ digest })\n await verifySuiTxSuccess(digest)\n\n // Extract the bill_id from the confirmed transaction.\n // extractSuiBillId logs the full tx block so you can inspect the raw data\n // in case automatic extraction fails.\n const billId = await extractSuiBillId(digest, suiClient)\n console.log('[SUI AFTER-PURCHASE] handleBuyCallback billId:', billId)\n\n // Invalidate bonds data so next purchase uses fresh pricing\n await queryClient.invalidateQueries({ queryKey: [QUERY_KEYS.BONDS_DATA] })\n\n // Sui's indexer has a short lag — getOwnedObjects may not return the\n // new BondNFT immediately. Schedule re-invalidations so the Your Bonds\n // view picks up the new bond once the indexer catches up.\n setTimeout(() => queryClient.invalidateQueries({ queryKey: [QUERY_KEYS.USER_BONDS] }), 3000)\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(market),\n usdAmount: parseFloat(inputValue) * (inputTokenPrice ?? 0),\n },\n })\n\n addToastSuccess(digest, bondChain as ChainId)\n setBillId?.(billId)\n } catch (error: any) {\n console.error('[SUI DEBUG] Error during Sui bond purchase:', error)\n addToastError(error?.message || 'Unknown error')\n reportError({\n apiUrl: SDKConfig?.urls?.apiV2,\n error: error?.message,\n extraInfo: { type: 'suiBuyBond', error: error?.message },\n chainId: bondChain,\n account: suiAccount,\n })\n } finally {\n setLoadingTx(false)\n }\n }\n\n const handleZapCallback = async () => {\n if (loadingTx || !suiAccount || !bondData || !aftermathQuote || !signAndExecuteTransaction) return\n\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\n try {\n setLoadingTx(true)\n const suiClient = getSuiClient()\n const principalDecimals = bondData.lpToken.decimals[bondData.chainId] ?? 6\n const depositAmountAtomic = parseUnits(zapDepositAmount, principalDecimals, 'floor').toString()\n\n // TX1: Acquire principal tokens\n // if (IS_SUI_MAINNET) {\n // Mainnet: swap via Aftermath DEX aggregator\n const swapTxBytes = await apiPost(AFTERMATH_TX_API_URL, {\n walletAddress: suiAccount,\n completeRoute: aftermathQuote,\n slippage: slippage / 100,\n })\n\n if (!swapTxBytes) throw new Error('Aftermath returned no transaction data')\n\n const swapTx = Transaction.from(swapTxBytes)\n const swapResponse = await signAndExecuteTransaction({ transaction: swapTx })\n const swapDigest = swapResponse?.digest\n if (!swapDigest) throw new Error('No tx digest returned for swap')\n await suiClient.waitForTransaction({ digest: swapDigest })\n // } else {\n // // Testnet: mint principal tokens via test_principal_token::mint\n // // No DEX aggregator supports Sui testnet or custom test tokens.\n // const mintTx = new Transaction()\n // mintTx.moveCall({\n // target: SUI_MINT_PRINCIPAL_FUNCTION,\n // arguments: [\n // mintTx.object(SUI_PRINCIPAL_TOKEN_ADMIN_TESTNET),\n // mintTx.pure.u64(depositAmountAtomic),\n // mintTx.pure.address(suiAccount),\n // ],\n // })\n //\n // mintTx.setSender(suiAccount)\n // mintTx.setGasBudget(50_000_000)\n // const builtMint = await mintTx.build({ client: suiClient })\n // const prebuiltMint = Transaction.from(builtMint)\n //\n // const mintResponse = await signAndExecuteTransaction({ transaction: prebuiltMint })\n // const mintDigest = mintResponse?.digest\n // if (!mintDigest) throw new Error('No tx digest returned for testnet mint')\n // await suiClient.waitForTransaction({ digest: mintDigest })\n // }\n\n // TX2: Deposit into bond with principal tokens\n const market = bondData.contractAddress[ChainId.SUI]\n\n // Read fresh bond price from chain to avoid stale cache\n const freshTruePrice = await readFreshTrueBondPrice(market)\n const atomicMaxPrice = slippageMaxPrice(freshTruePrice, slippage).toString()\n\n const principalCoinType = bondData.lpToken.address[bondData.chainId]\n const payoutCoinType = bondData.earnToken.address[bondData.chainId]\n if (!principalCoinType || !payoutCoinType) throw new Error('Missing token type info')\n\n const tx = new Transaction()\n const isPrincipalNativeSui = principalCoinType.toLowerCase() === SUI_NATIVE_COIN_TYPE.toLowerCase()\n\n let principalCoin\n if (isPrincipalNativeSui) {\n ;[principalCoin] = tx.splitCoins(tx.gas, [tx.pure.u64(depositAmountAtomic)])\n } else {\n const userCoins = await suiClient.getCoins({ owner: suiAccount, coinType: principalCoinType })\n if (!userCoins.data.length) throw new Error(`No ${bondData.lpToken.symbol} coins found after swap`)\n if (userCoins.data.length > 1) {\n const [primary, ...rest] = userCoins.data.map((c) => tx.object(c.coinObjectId))\n tx.mergeCoins(primary, rest)\n ;[principalCoin] = tx.splitCoins(primary, [tx.pure.u64(depositAmountAtomic)])\n } else {\n ;[principalCoin] = tx.splitCoins(tx.object(userCoins.data[0].coinObjectId), [\n tx.pure.u64(depositAmountAtomic),\n ])\n }\n }\n\n if (!market || !bondData?.suiTreasuryId || !bondData?.billNnftAddress?.[ChainId.SUI]) {\n return\n }\n\n tx.moveCall({\n target: SUI_DEPOSIT_FUNCTION,\n typeArguments: [payoutCoinType, principalCoinType],\n arguments: [\n tx.object(market),\n tx.object(bondData.suiTreasuryId),\n tx.object(bondData.billNnftAddress[ChainId.SUI]),\n principalCoin,\n tx.pure.u64(atomicMaxPrice),\n tx.pure.address(suiAccount),\n tx.object('0x6'), // clock\n ],\n })\n\n tx.setSender(suiAccount)\n tx.setGasBudget(50_000_000)\n const builtDeposit = await tx.build({ client: suiClient })\n const prebuiltDeposit = Transaction.from(builtDeposit)\n\n const depositResponse = await signAndExecuteTransaction({ transaction: prebuiltDeposit })\n const depositDigest = depositResponse?.digest\n if (!depositDigest) throw new Error('No tx digest returned for deposit')\n await suiClient.waitForTransaction({ digest: depositDigest })\n await verifySuiTxSuccess(depositDigest)\n\n // Extract the bill_id from the confirmed deposit transaction.\n // extractSuiBillId logs the full tx block so you can inspect the raw data\n // in case automatic extraction fails.\n const billId = await extractSuiBillId(depositDigest, suiClient)\n console.log('[SUI AFTER-PURCHASE] handleZapCallback billId:', billId)\n\n // Invalidate bonds data so next purchase uses fresh pricing\n await queryClient.invalidateQueries({ queryKey: [QUERY_KEYS.BONDS_DATA] })\n\n // Sui indexer lag — schedule delayed re-invalidations for user bonds\n setTimeout(() => queryClient.invalidateQueries({ queryKey: [QUERY_KEYS.USER_BONDS] }), 3000)\n\n track({\n event: 'zap',\n chain: bondChain,\n data: {\n cat: 'bond',\n token1: getSymbol(inputToken, bondData?.chainId),\n token2: bondData?.lpToken.symbol ?? '',\n amount: parseFloat(inputValue) * (inputTokenPrice ?? 0),\n },\n })\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(market),\n usdAmount: parseFloat(inputValue) * (inputTokenPrice ?? 0),\n },\n })\n\n addToastSuccess(depositDigest, bondChain as ChainId)\n setBillId?.(billId)\n } catch (error: any) {\n console.error('Error during Sui zap bond purchase:', error)\n addToastError(error?.message || 'Unknown error')\n reportError({\n apiUrl: SDKConfig?.urls?.apiV2,\n error: error?.message,\n extraInfo: { type: 'suiZapBuyBond', error: error?.message },\n chainId: bondChain,\n account: suiAccount,\n })\n } finally {\n setLoadingTx(false)\n }\n }\n\n const handleBuy = () => {\n if (loadingTx) return\n if (isZap) {\n handleZapCallback()\n } else {\n handleBuyCallback()\n }\n }\n\n // Sync inputTokenString when bondData loads after initial render\n useEffect(() => {\n const addr = bondData?.lpToken?.address?.[bondData?.chainId]\n if (addr && !inputTokenString) {\n setInputTokenString(addr)\n }\n }, [bondData?.lpToken?.address, bondData?.chainId]) // eslint-disable-line react-hooks/exhaustive-deps\n\n // Auto-select highest balance token when zap list loads\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 const hasPositiveBonus = (trueBondPriceData?.bonusWithFee ?? 0) > 0\n\n const canBuy =\n !load &&\n !!suiAccount &&\n !bondData?.soldOut &&\n !!inputValue &&\n parseFloat(inputValue) > 0 &&\n !exceedsRealMaxBuy &&\n !exceedsBalance &&\n hasPositiveBonus &&\n !SDKConfig.blockSales &&\n !zapError &&\n !(isZap && !aftermathQuote)\n\n return bondData ? (\n <Flex className=\"modal-content\" sx={{ ...MCBuyComponentStyles[bondData?.marketingCampaign as MarketingCampaign] }}>\n <Flex className=\"modaltable-container\">\n <BondModalHeader bondData={bondData} onDismiss={onDismiss} hidePromotionUi />\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 inputValue={inputValue}\n inputTokenPrice={inputTokenPrice}\n bondData={bondData}\n youSpendString={youSpendString}\n isZap={isZap}\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={ChainId.SUI}\n enableZap={true}\n bondPrincipalToken={bondData?.lpToken}\n tokenBalance={inputCurrencyBalance ?? undefined}\n selectedTokenPrice={inputTokenPrice}\n isConnected={!!suiAccount}\n />\n {bondData?.warningCard && (\n <Flex\n sx={{\n width: '100%',\n background: '#DE62F366',\n justifyContent: 'center',\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 {!suiAccount ? (\n <Button\n className=\"action-button\"\n onClick={openSuiWalletConnector}\n sx={{ width: '100%', fontSize: ['14px', '14px', '14px', '16px'] }}\n >\n Connect to Sui\n </Button>\n ) : (\n <Button\n className=\"action-button\"\n load={load}\n disabled={!canBuy}\n onClick={handleBuy}\n sx={{ width: '100%', fontSize: ['14px', '14px', '14px', '16px'] }}\n >\n {SDKConfig.blockSales\n ? 'Complete KYC to Buy'\n : zapError\n ? 'Swap quote failed'\n : exceedsRealMaxBuy\n ? 'Exceeds Max Buy. Reduce amount'\n : exceedsBalance\n ? 'Insufficient balance'\n : !inputValue || parseFloat(inputValue) === 0\n ? 'Insert amount'\n : 'buy'}\n </Button>\n )}\n </Flex>\n </Flex>\n </Flex>\n </Flex>\n ) : (\n <></>\n )\n}\n\nexport default BuyComponentSui\n"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import axios from 'axios';
|
|
2
1
|
import { APEBOND } from '../../../../config/constants/variables.js';
|
|
3
2
|
import { getTemplateHTML } from './templateImageShare.js';
|
|
4
3
|
import { imageUrlToDataUri, renderHtmlToJpeg } from './htmlToJpeg.js';
|
|
@@ -33,9 +32,12 @@ async function generateImageFromTemplate(bondNFTData, link, apiUrl) {
|
|
|
33
32
|
const blob = await response.blob();
|
|
34
33
|
const formData = new FormData();
|
|
35
34
|
formData.append('file', blob, fileName);
|
|
36
|
-
await
|
|
37
|
-
|
|
35
|
+
const uploadResponse = await fetch(`${apiUrl}/cloudinary/uploadFile`, {
|
|
36
|
+
method: 'POST',
|
|
37
|
+
body: formData,
|
|
38
38
|
});
|
|
39
|
+
if (!uploadResponse.ok)
|
|
40
|
+
throw new Error(`Upload failed with status ${uploadResponse.status}`);
|
|
39
41
|
}
|
|
40
42
|
catch (error) {
|
|
41
43
|
console.error('Error upload file to cloudinary', error);
|
|
@@ -51,14 +53,13 @@ function share(link) {
|
|
|
51
53
|
linkElement.click();
|
|
52
54
|
}
|
|
53
55
|
async function checkImageExists(fileName) {
|
|
54
|
-
let existImg = true;
|
|
55
56
|
try {
|
|
56
|
-
await
|
|
57
|
+
const response = await fetch(`https://res.cloudinary.com/dswmrqgwy/image/upload/v1/bond_share/${fileName}.jpg`);
|
|
58
|
+
return response.ok;
|
|
57
59
|
}
|
|
58
60
|
catch {
|
|
59
|
-
|
|
61
|
+
return false;
|
|
60
62
|
}
|
|
61
|
-
return existImg;
|
|
62
63
|
}
|
|
63
64
|
|
|
64
65
|
export { generateImageFromTemplate };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../../../../src/views/YourBondsModal/components/LinkShare/utils.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../../../src/views/YourBondsModal/components/LinkShare/utils.ts"],"sourcesContent":["import { APEBOND } from '../../../../config/constants/variables'\nimport { UserBillNftData } from '../../../../types/yourbonds'\nimport { getTemplateHTML } from './templateImageShare'\nimport { imageUrlToDataUri, renderHtmlToJpeg } from './htmlToJpeg'\n\nfunction getTokenImageUrl(symbol: string) {\n return `${APEBOND}/tokenImages/${symbol.toUpperCase()}.png`\n}\n\nfunction getPrincipalTokenSymbol(bondNFTData: UserBillNftData) {\n if (bondNFTData.data?.payoutTokenData.address.toLowerCase() !== bondNFTData.data?.token0.address.toLowerCase())\n return bondNFTData.data?.token0.symbol\n return bondNFTData.data?.token1.symbol\n}\n\nexport async function generateImageFromTemplate(\n bondNFTData: UserBillNftData | undefined,\n link: string,\n apiUrl: string,\n) {\n if (bondNFTData && bondNFTData.data) {\n const fileName = `bond_share_${bondNFTData?.data.billNftAddress?.toLowerCase()}_${bondNFTData?.chainId}_${bondNFTData?.tokenId}`\n const existingImage = await checkImageExists(fileName)\n if (existingImage) {\n share(link)\n } else {\n try {\n const [title, background, nft, payoutToken, principalToken] = await Promise.all([\n imageUrlToDataUri('/images/bills/title.png'),\n imageUrlToDataUri('/images/bills/bg.png'),\n imageUrlToDataUri(bondNFTData.image),\n imageUrlToDataUri(getTokenImageUrl(bondNFTData.data.payoutTokenData.symbol)),\n imageUrlToDataUri(getTokenImageUrl(getPrincipalTokenSymbol(bondNFTData) ?? '')),\n ])\n\n const html = getTemplateHTML(bondNFTData, { title, background, nft, payoutToken, principalToken })\n const dataImage = await renderHtmlToJpeg(html, 768, 768, 0.85)\n const response = await fetch(dataImage)\n const blob = await response.blob()\n const formData = new FormData()\n formData.append('file', blob, fileName)\n const uploadResponse = await fetch(`${apiUrl}/cloudinary/uploadFile`, {\n method: 'POST',\n body: formData,\n })\n if (!uploadResponse.ok) throw new Error(`Upload failed with status ${uploadResponse.status}`)\n } catch (error) {\n console.error('Error upload file to cloudinary', error)\n }\n share(link)\n }\n }\n}\n\nfunction share(link: string) {\n const linkElement = document.createElement('a')\n linkElement.href = link\n linkElement.target = '_blank'\n linkElement.click()\n}\n\nasync function checkImageExists(fileName: string) {\n try {\n const response = await fetch(`https://res.cloudinary.com/dswmrqgwy/image/upload/v1/bond_share/${fileName}.jpg`)\n return response.ok\n } catch {\n return false\n }\n}\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"description": "Ape Bond SDK",
|
|
4
4
|
"author": "Ape Bond",
|
|
5
5
|
"license": "MIT",
|
|
6
|
-
"version": "6.2.
|
|
6
|
+
"version": "6.2.10",
|
|
7
7
|
"module": "dist/main.js",
|
|
8
8
|
"type": "module",
|
|
9
9
|
"types": "dist/main.d.ts",
|
|
@@ -112,13 +112,12 @@
|
|
|
112
112
|
"@solana/wallet-adapter-react": "^0.15.39",
|
|
113
113
|
"@solana/web3.js": "^1.98.4",
|
|
114
114
|
"@tanstack/react-query": "^5.90.2",
|
|
115
|
-
"axios": "^1.8.2",
|
|
116
115
|
"react": ">=17",
|
|
117
116
|
"react-dom": ">=17",
|
|
118
117
|
"wagmi": ">=2"
|
|
119
118
|
},
|
|
120
119
|
"dependencies": {
|
|
121
|
-
"@ape.swap/apeswap-lists": "4.8.
|
|
120
|
+
"@ape.swap/apeswap-lists": "4.8.6",
|
|
122
121
|
"@emotion/react": "11.14.0",
|
|
123
122
|
"@jup-ag/api": "6.0.45",
|
|
124
123
|
"buffer": "6.0.3",
|
|
@@ -145,7 +144,6 @@
|
|
|
145
144
|
"@types/react": "18.3.28",
|
|
146
145
|
"@types/react-dom": "18.3.7",
|
|
147
146
|
"@vitejs/plugin-react": "4.7.0",
|
|
148
|
-
"axios": "1.16.0",
|
|
149
147
|
"eslint": "9.39.4",
|
|
150
148
|
"eslint-plugin-react": "7.37.5",
|
|
151
149
|
"eslint-plugin-react-hooks": "5.2.0",
|