@ape.swap/bonds-sdk 7.0.4-test.2 → 7.0.4-test.4

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.
@@ -216,7 +216,7 @@ const fetchUserLpStakingBonds = async (chainId, account, lpStakingBonds) => {
216
216
  billNftId: parseInt(row.token_id),
217
217
  processing: false,
218
218
  // The position NFT is a Uniswap v3 position with no bond art
219
- image: 'https://www.ape.bond/images/bills/hidden-bill.jpg',
219
+ image: 'https://www.ape.bond/images/bills/lp-staking.png',
220
220
  chainId,
221
221
  contractAddress: lpStakingConfig.positionManager,
222
222
  data: {
@@ -1 +1 @@
1
- {"version":3,"file":"fetchUsersBondsEVM.js","sources":["../../../../src/adapters/evm/state/fetchUsersBondsEVM.ts"],"sourcesContent":["import billAbi from '../../../config/abi/BOND_2_0_0.json'\nimport multicall from '../utils/multicall'\nimport { UserBill, UserOwnedBillsData } from '../../../types/yourbonds'\nimport { BillsConfig, BillVersion, ChainId } from '@ape.swap/apeswap-lists'\nimport { TokenPrices } from '../../../state/tokenPrices/useTokenPrices'\nimport { BondsData } from '../../../types/bonds'\nimport { apiGet } from '../../../utils/httpClient'\nimport { PRICE_API_URL } from '../../../config/constants/variables'\nimport partition from 'lodash-es/partition.js'\nimport APE_BOND_POSITION_ADAPTER_ABI from '../../../config/abi/apeBondPositionAdapter.json'\nexport const fetchUsersBondsEVM = async (\n chainId: ChainId,\n account: string,\n bondData: BillsConfig[],\n tokenPrices: Partial<Record<ChainId, TokenPrices[]>>,\n): Promise<UserOwnedBillsData[]> => {\n try {\n if (!account) {\n return []\n }\n const [lpStakingBonds, bonds] = partition(bondData, (bond) => bond.billType === 'lpStaking')\n\n // Fetch and set user owned bill data without NFT Data\n const userOwnedBills = await fetchUserOwnedBills(chainId, account, bonds, tokenPrices)\n const mapUserOwnedBills = bonds.map((bill: BillsConfig) =>\n userOwnedBills.filter((b) => b.address.toLowerCase() === bill.contractAddress[bill.chainId]?.toLowerCase()),\n )\n const userOwnedBillsData = bonds.map((bill: BillsConfig, i: number) => ({\n index: bill.index,\n userOwnedBills: mapUserOwnedBills[i],\n }))\n\n const combinedData = userOwnedBillsData.map((data) => {\n const enrichedUserBills = data.userOwnedBills.map((bill) => {\n return {\n ...bill,\n }\n })\n return {\n ...data,\n userOwnedBills: enrichedUserBills,\n }\n })\n\n // Isolated, so a failed LP staking read (campaigns multicall, RPC) doesn't fail the chain's regular bills\n const lpStakingData =\n lpStakingBonds.length > 0\n ? await fetchUserLpStakingBonds(chainId, account, lpStakingBonds).catch((e) => {\n console.error('Error fetching LP staking positions:', e)\n return []\n })\n : []\n\n return Promise.resolve([...combinedData, ...lpStakingData])\n } catch (error) {\n console.error('Error fetching user owned bills data:', error)\n return Promise.reject(error)\n }\n}\n\n// REAL's API only answers browsers from origins it allowlists, so it's called through ape.bond's proxy, which\n// forwards to REAL's API (test stack or mainnet, set on ape.bond's side).\n// TODO: staging proxy for now; switch to the production one (https://ape.bond/api/real-lp) once it's deployed.\nconst REAL_LP_API = 'https://staging.ape.bond/api/real-lp'\n// A position's page on REAL's site, where its bonus and pool rewards are claimed.\n// TODO: test site for now; REAL will send the production URL when mainnet is live.\nconst REAL_LP_DASHBOARD = 'https://staking-test.real.finance/lp/dashboard'\n\n// REAL's /rewards/<wallet>: the pool (epoch) rewards, lifetime figures. Only the fields used below are typed.\ninterface RealLpRewards {\n tokens: { token: string; symbol: string; decimals: number; claims_enabled: boolean }[]\n positions: { lineage_id: string; tokens: { token: string; claimable_wei: string }[] }[]\n}\n\n// One row of REAL's /positions/<wallet>: one episode of a position, i.e. one NFT while it sits in the vault.\n// Only the fields used below are typed.\ninterface RealLpPosition {\n token_id: string\n lineage_id: string\n next_episode_id: string | null\n stake_ordinal: number\n status: 'active' | 'rebalanced' | 'unstaked'\n tick_lower: number\n tick_upper: number\n liquidity_wei: string\n principal_usd: string\n value_usd_now: string | null\n apebond: {\n campaign_id: string\n deposited_at: number\n bonus: {\n token: string\n amount_wei: string\n unlock_at: number\n status: 'reserved' | 'claimable' | 'claimed' | 'forfeited'\n claimed_at: number | null\n token_id: string\n } | null\n } | null\n}\n\n/**\n * Raw token amounts (wei) a Uniswap v3 position holds at the pool's current tick: all token0 below its range, all\n * token1 above it, both inside. Floating point: it's for display only.\n */\nconst getPositionAmounts = (liquidity: number, tickLower: number, tickUpper: number, currentTick: number) => {\n const sqrtPrice = (tick: number) => Math.pow(1.0001, tick / 2)\n const sqrtLower = sqrtPrice(tickLower)\n const sqrtUpper = sqrtPrice(tickUpper)\n const sqrtCurrent = sqrtPrice(Math.min(Math.max(currentTick, tickLower), tickUpper))\n return {\n amount0: (liquidity * (sqrtUpper - sqrtCurrent)) / (sqrtCurrent * sqrtUpper),\n amount1: liquidity * (sqrtCurrent - sqrtLower),\n }\n}\n\n/**\n * The user's LP staking positions, shaped as purchased bonds. A position has no bill: it's a Uniswap v3 NFT staked\n * in REAL's vault, and what ApeBond pays is its bonus, reserved in REAL's escrow until the cliff. So each position\n * becomes one bill whose payout is that bonus, vesting all at once at the cliff (`vestingCliff` = `vestingTerm`).\n * Claims happen on REAL's site, so the bills are marked paused (the row's claim button would call `redeem` on the\n * vault). See docs/lp-staking-bonds/2026-10-23-real-lp-positions-rewards-api.md.\n */\nconst fetchUserLpStakingBonds = async (\n chainId: ChainId,\n account: string,\n lpStakingBonds: BillsConfig[],\n): Promise<UserOwnedBillsData[]> => {\n let rows: RealLpPosition[]\n let assetPriceUsd: string | undefined\n let assetIsToken0 = true\n let currentTick = 0\n let rewards: RealLpRewards | undefined\n try {\n const [response, rewardsResponse] = await Promise.all([\n apiGet<{\n current_tick: number\n current_price_usd: string\n asset_is_token0: boolean\n positions: RealLpPosition[]\n }>(`${REAL_LP_API}/positions/${account}`),\n // The positions still show without their pool rewards if this fails\n apiGet<RealLpRewards>(`${REAL_LP_API}/rewards/${account}`).catch((error) => {\n console.error('Error fetching LP staking rewards:', error)\n return undefined\n }),\n ])\n rewards = rewardsResponse\n rows = response?.positions ?? []\n assetPriceUsd = response?.current_price_usd\n assetIsToken0 = response?.asset_is_token0 ?? true\n currentTick = response?.current_tick ?? 0\n } catch (error) {\n // Don't fail the chain's regular bonds because REAL's API is unreachable (or refuses our origin)\n console.error('Error fetching LP staking positions:', error)\n return []\n }\n\n // All episodes of a position share its lineage_id; the one with no next episode is its current state.\n // Only positions bought through ApeBond have an apebond block.\n const currentPositions = rows.filter((row) => row.apebond && row.next_episode_id === null)\n\n // Each campaign's bonus rate and minimum bonus, for the minimum position value that earns a bonus.\n // campaigns() → (enabled, downTicks, upTicks, toleranceTicks, bonusCliffSeconds, bonusBps, minBonusAmount)\n const campaigns = await multicall(\n chainId,\n APE_BOND_POSITION_ADAPTER_ABI,\n lpStakingBonds.map((bond) => ({\n address: bond.lpStakingConfig!.adapter,\n name: 'campaigns',\n params: [bond.lpStakingConfig!.campaignId],\n })),\n )\n\n return lpStakingBonds.map((bond, bondIndex) => {\n const lpStakingConfig = bond.lpStakingConfig!\n const campaign = campaigns?.[bondIndex]\n const bonusDecimals = lpStakingConfig.bonusRewardToken.decimals[bond.chainId] ?? 18\n const bonusThreshold =\n campaign && Number(campaign[5]) > 0\n ? (Number(campaign[6]) / 10 ** bonusDecimals) * (10000 / Number(campaign[5]))\n : undefined\n const userOwnedBills: UserBill[] = currentPositions\n .filter((row) => row.apebond!.campaign_id.toLowerCase() === lpStakingConfig.campaignId.toLowerCase())\n .map((row) => {\n const { deposited_at: depositedAt, bonus } = row.apebond!\n // No bonus when the purchase was below the campaign minimum; forfeited bonuses have amount 0\n const amount = bonus?.amount_wei ?? '0'\n const cliff = bonus ? bonus.unlock_at - depositedAt : 0\n const chainId = bond.chainId\n const bonusToken = lpStakingConfig.bonusRewardToken\n // The pool is the bonus token ($ASSET) paired with the bond's principal token (USDC)\n const assetToken = {\n address: bonusToken.address[chainId] ?? '',\n symbol: bonusToken.symbol,\n name: bonusToken.symbol,\n decimals: bonusToken.decimals,\n }\n const pairedToken = {\n address: bond.lpToken.address[chainId] ?? '',\n symbol: bond.lpToken.symbol,\n name: bond.lpToken.symbol,\n decimals: bond.lpToken.decimals,\n }\n // Value of the position when it was staked: what the buyer paid, minus the zap fees and the change returned\n const principalUsd = parseFloat(row.principal_usd ?? '0')\n // Value of the position now (null once unstaked: the vault no longer holds it)\n const valueUsdNow = parseFloat(row.value_usd_now ?? '0')\n const assetPrice = parseFloat(assetPriceUsd ?? '0')\n // What the staked position holds now. An unstaked position is back in the wallet, so nothing is staked.\n // current_price_usd is $ASSET's price in USDC, and USDC is counted at $1 (as REAL's value_usd_now does).\n const { amount0, amount1 } =\n row.status === 'unstaked'\n ? { amount0: 0, amount1: 0 }\n : getPositionAmounts(parseFloat(row.liquidity_wei), row.tick_lower, row.tick_upper, currentTick)\n const [token0, token1] = assetIsToken0 ? [assetToken, pairedToken] : [pairedToken, assetToken]\n const toStakedToken = (token: typeof assetToken, rawAmount: number) => {\n const amount = rawAmount / 10 ** (token.decimals[chainId] ?? 18)\n return {\n address: token.address,\n symbol: token.symbol,\n amount,\n amountUsd: amount * (token === assetToken ? assetPrice : 1),\n }\n }\n return {\n // Rows are matched to their bond by contract address; for LP staking that's the vault\n address: bond.contractAddress[bond.chainId] ?? '',\n // The position's current NFT, the one REAL's page link uses. After a rebalance past the cliff the escrow\n // still pays on the NFT id the position had at the cliff (bonus.token_id), which has no field here.\n id: row.token_id,\n // The NFT contract is the position manager. The price range (price_lower_usd / price_upper_usd,\n // range_status_now) has no field.\n // Neither do the position's status (an unstaked position still shows, with its bonus as the API reports\n // it) and `finalized` (false for ~13 min after a purchase).\n billNftAddress: lpStakingConfig.positionManager,\n totalPayout: amount,\n // What's left to receive: everything until it's claimed (or forfeited, where amount is 0)\n payout: bonus?.status === 'claimed' ? '0' : amount,\n pendingRewards: bonus?.status === 'claimable' ? amount : '0',\n payoutClaimed: bonus?.status === 'claimed' ? amount : '0',\n vestingStartTimestamp: depositedAt.toString(),\n vestingTerm: cliff.toString(),\n lastBlockTimestamp: (bonus?.claimed_at ?? depositedAt).toString(),\n // No price per payout token: the bonus is a share of the position's value\n truePricePaid: '0',\n paused: true,\n lpStakingData: {\n token0: toStakedToken(token0, amount0),\n token1: toStakedToken(token1, amount1),\n bonusStatus: bonus?.status ?? null,\n bonusThreshold,\n // The position's page on REAL's site. The ordinal is only appended from 2 on (an NFT staked again by\n // hand after an unstake); older ids of the lineage redirect to the current one.\n positionUrl: `${REAL_LP_DASHBOARD}/${row.token_id}${row.stake_ordinal >= 2 ? `-${row.stake_ordinal}` : ''}`,\n // Matched by lineage_id, shared by every episode of the position (it survives rebalances)\n poolRewards: rewards\n ? rewards.tokens.map((rewardToken) => {\n const positionToken = rewards!.positions\n .find((position) => position.lineage_id === row.lineage_id)\n ?.tokens.find((token) => token.token.toLowerCase() === rewardToken.token.toLowerCase())\n // claimable_wei is what's earned and not claimed yet; $ASSET can't be claimed before\n // claims_enabled (mainnet launch + REAL's timelock)\n const rewardAmount = Number(positionToken?.claimable_wei ?? '0') / 10 ** rewardToken.decimals\n return {\n address: rewardToken.token,\n symbol: rewardToken.symbol,\n amount: rewardAmount,\n // Only $ASSET has a price (current_price_usd); REAL's API doesn't price $OVTR\n amountUsd:\n rewardToken.token.toLowerCase() === assetToken.address.toLowerCase()\n ? rewardAmount * assetPrice\n : undefined,\n claimsEnabled: rewardToken.claims_enabled,\n }\n })\n : undefined,\n },\n // What api-v2 provides for regular bills, here from REAL's API (useUserBonds doesn't send LP staking\n // bills to api-v2)\n nftData: {\n tokenId: parseInt(row.token_id),\n billNftId: parseInt(row.token_id),\n processing: false,\n // The position NFT is a Uniswap v3 position with no bond art\n image: 'https://www.ape.bond/images/bills/hidden-bill.jpg',\n chainId,\n contractAddress: lpStakingConfig.positionManager,\n data: {\n billContract: bond.contractAddress[chainId] ?? '',\n billNftAddress: lpStakingConfig.positionManager,\n billNftId: parseInt(row.token_id),\n // Not in REAL's API\n blockNumber: 0,\n bondArtCollection: '',\n bondPartner: bond.bondPartner ?? '',\n bondVersion: bond.billVersion ?? '',\n chainId,\n // The purchase opened the position's first episode, whose id is <token_id>-<opening tx hash>\n createTransactionHash: row.lineage_id.split('-')[1] ?? '',\n createdAddressOwner: account,\n createdAt: depositedAt,\n // The amount paid isn't in REAL's API (only in the purchase tx). The principal token is USDC, so the\n // position's USD value at purchase stands in for it.\n deposit: principalUsd,\n dollarValue: principalUsd,\n expires: depositedAt + cliff,\n pairName: assetIsToken0\n ? `${assetToken.symbol}-${pairedToken.symbol}`\n : `${pairedToken.symbol}-${assetToken.symbol}`,\n // The position's current value (used by the share image), in $ASSET (the payout token) so that\n // payout × payoutTokenPrice gives value_usd_now back. The bonus itself is in the bill's payout fields.\n payout: assetPrice > 0 ? valueUsdNow / assetPrice : 0,\n payoutToken: assetToken.address,\n payoutTokenData: {\n address: assetToken.address,\n name: assetToken.name,\n symbol: assetToken.symbol,\n decimals: assetToken.decimals,\n },\n payoutTokenPrice: assetPriceUsd ?? '0',\n principalToken: pairedToken.address,\n token0: assetIsToken0 ? assetToken : pairedToken,\n token1: assetIsToken0 ? pairedToken : assetToken,\n type: bond.billType,\n vestingPeriodSeconds: cliff,\n },\n },\n // The bonus is paid in the bonus token, not the bond's earnToken, and only unlocks at the cliff.\n // The $OVTR and $ASSET staking rewards (REAL's /rewards/<wallet>) have no field.\n bond: {\n ...bond,\n earnToken: lpStakingConfig.bonusRewardToken,\n vestingCliff: cliff,\n vestingTerm: cliff,\n payoutTokenPrice: assetPriceUsd,\n } as BondsData,\n }\n })\n return { index: bond.index, userOwnedBills }\n })\n}\n\nconst fetchUserOwnedBills = async (\n chainId: ChainId,\n account: string,\n bonds: BillsConfig[],\n tokenPrices: Partial<Record<ChainId, TokenPrices[]>>,\n): Promise<UserBill[]> => {\n // Maps all the bills in the list repo to make a call to each of them to get Bills Id and paused state (only for V4)\n const billIdAndPausedCalls = bonds.flatMap((b, index) => {\n const calls = [\n {\n address: b.contractAddress[b.chainId] ?? '',\n name: 'getBillIds',\n params: [account],\n bondIndex: index,\n },\n ]\n // Only add paused call for V4 bonds\n if (b.billVersion === BillVersion.V4) {\n calls.push({\n address: b.contractAddress[b.chainId] ?? '',\n name: 'paused',\n params: [],\n bondIndex: index,\n })\n }\n return calls\n })\n const billIdAndPausedResults = await multicall(chainId, billAbi, billIdAndPausedCalls, true, 15)\n\n // Separate billIds and pausedStates from results, tracking which bonds have paused calls\n const billIds: any[] = []\n const pausedStates: Map<string, boolean> = new Map()\n let resultIndex = 0\n\n bonds.forEach((b) => {\n // First result is always getBillIds\n billIds.push(billIdAndPausedResults?.[resultIndex])\n resultIndex++\n\n // Next result is paused only if V4\n if (b.billVersion === BillVersion.V4) {\n pausedStates.set(\n b.contractAddress[b.chainId]?.toLowerCase() as string,\n billIdAndPausedResults?.[resultIndex]?.[0] ?? false,\n )\n resultIndex++\n }\n })\n const billDataCalls: any = []\n const billVersions: any = []\n\n billIds?.forEach((idArray: any, index: number) =>\n idArray[0].forEach((id: bigint) => {\n if (id > 0) {\n billDataCalls.push({\n address: bonds[index].contractAddress[bonds[index].chainId],\n name: bonds[index].billVersion !== BillVersion.V1 ? 'getBillInfo' : 'billInfo',\n params: [id],\n bond: bonds[index],\n })\n billDataCalls.push({\n address: bonds[index].contractAddress[bonds[index].chainId],\n name: bonds[index].billVersion !== BillVersion.V1 ? 'claimablePayout' : 'pendingPayoutFor',\n params: [id],\n bond: bonds[index],\n })\n billVersions.push(bonds[index].billVersion)\n }\n }),\n )\n const billData = await multicall(chainId, billAbi, billDataCalls, true, 150)\n const result = []\n\n for (let i = 0; i < billVersions.length; i++) {\n const billPos = i === 0 ? 0 : i * 2\n let bond: BondsData = billDataCalls[billPos].bond\n\n let principalTokenPrice = tokenPrices?.[bond.chainId]?.find(\n (tokenPrice) => tokenPrice.tokenAddress?.toLowerCase() === bond?.lpToken?.address?.[bond.chainId]?.toLowerCase(),\n )?.price\n\n let payoutTokenPrice = tokenPrices?.[bond.chainId]?.find(\n (tokenPrice: TokenPrices) =>\n tokenPrice?.tokenAddress?.toLowerCase() === bond?.earnToken?.address?.[bond.chainId]?.toLowerCase(),\n )?.price\n\n if (principalTokenPrice === undefined) {\n try {\n const res = await apiGet<{ price: string }>(\n `${PRICE_API_URL}/realtime/price?token=${bond?.lpToken?.address?.[bond?.chainId]}&chain=${bond?.chainId}`,\n )\n console.log('Individual call for: ', bond.lpToken.symbol, '. Price: ', res.price)\n principalTokenPrice = parseFloat(res.price ?? '0')\n } catch {\n principalTokenPrice = 0\n }\n }\n if (payoutTokenPrice === undefined) {\n try {\n const res = await apiGet<{ price: string }>(\n `${PRICE_API_URL}/realtime/price?token=${bond?.earnToken?.address?.[bond?.chainId]}&chain=${bond?.chainId}`,\n )\n console.log('Individual call for: ', bond.earnToken.symbol, '. Price: ', res.price)\n payoutTokenPrice = parseFloat(res.price ?? '0')\n } catch {\n payoutTokenPrice = 0\n }\n }\n\n bond = {\n ...bond,\n payoutTokenPrice: payoutTokenPrice?.toString(),\n principalTokenPrice: principalTokenPrice?.toString(),\n }\n const paused = pausedStates.get(bond.contractAddress[bond.chainId]?.toLowerCase() as string) ?? false\n\n const data =\n billVersions[i] !== BillVersion.V1\n ? {\n address: billDataCalls[billPos].address,\n id: billDataCalls[billPos].params[0].toString(),\n payout: (\n BigInt(billData[billPos][0]?.payout.toString()) - BigInt(billData[billPos][0]?.payoutClaimed.toString())\n ).toString(),\n totalPayout: billData[billPos][0]?.payout.toString(),\n payoutClaimed: billData[billPos][0]?.payoutClaimed.toString(),\n billNftAddress: bond.billNnftAddress[bond.chainId] ?? '',\n vesting: billData[billPos][0]?.vesting.toString(),\n vestingTerm: billData[billPos][0]?.vestingTerm.toString(),\n lastBlockTimestamp: billData[billPos][0]?.lastClaimTimestamp.toString(),\n vestingStartTimestamp: billData[billPos][0]?.vestingStartTimestamp.toString(),\n truePricePaid: billData[billPos][0]?.truePricePaid.toString(),\n pendingRewards: billData[billPos + 1][0].toString(),\n paused,\n bond,\n }\n : {\n address: billDataCalls[billPos].address,\n id: billDataCalls[billPos].params[0].toString(),\n payoutClaimed: billData?.[billPos]?.[0]?.payoutClaimed?.toString(),\n payout: billData[billPos][0].toString(),\n billNftAddress: bond.billNnftAddress[bond.chainId] ?? '',\n vesting: billData[billPos][1].toString(),\n lastBlockTimestamp: billData[billPos][2].toString(),\n truePricePaid: billData[billPos][3].toString(),\n pendingRewards: billData[billPos + 1][0].toString(),\n paused,\n bond,\n }\n result.push(data)\n }\n\n return result\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fetchUsersBondsEVM.js","sources":["../../../../src/adapters/evm/state/fetchUsersBondsEVM.ts"],"sourcesContent":["import billAbi from '../../../config/abi/BOND_2_0_0.json'\nimport multicall from '../utils/multicall'\nimport { UserBill, UserOwnedBillsData } from '../../../types/yourbonds'\nimport { BillsConfig, BillVersion, ChainId } from '@ape.swap/apeswap-lists'\nimport { TokenPrices } from '../../../state/tokenPrices/useTokenPrices'\nimport { BondsData } from '../../../types/bonds'\nimport { apiGet } from '../../../utils/httpClient'\nimport { PRICE_API_URL } from '../../../config/constants/variables'\nimport partition from 'lodash-es/partition.js'\nimport APE_BOND_POSITION_ADAPTER_ABI from '../../../config/abi/apeBondPositionAdapter.json'\nexport const fetchUsersBondsEVM = async (\n chainId: ChainId,\n account: string,\n bondData: BillsConfig[],\n tokenPrices: Partial<Record<ChainId, TokenPrices[]>>,\n): Promise<UserOwnedBillsData[]> => {\n try {\n if (!account) {\n return []\n }\n const [lpStakingBonds, bonds] = partition(bondData, (bond) => bond.billType === 'lpStaking')\n\n // Fetch and set user owned bill data without NFT Data\n const userOwnedBills = await fetchUserOwnedBills(chainId, account, bonds, tokenPrices)\n const mapUserOwnedBills = bonds.map((bill: BillsConfig) =>\n userOwnedBills.filter((b) => b.address.toLowerCase() === bill.contractAddress[bill.chainId]?.toLowerCase()),\n )\n const userOwnedBillsData = bonds.map((bill: BillsConfig, i: number) => ({\n index: bill.index,\n userOwnedBills: mapUserOwnedBills[i],\n }))\n\n const combinedData = userOwnedBillsData.map((data) => {\n const enrichedUserBills = data.userOwnedBills.map((bill) => {\n return {\n ...bill,\n }\n })\n return {\n ...data,\n userOwnedBills: enrichedUserBills,\n }\n })\n\n // Isolated, so a failed LP staking read (campaigns multicall, RPC) doesn't fail the chain's regular bills\n const lpStakingData =\n lpStakingBonds.length > 0\n ? await fetchUserLpStakingBonds(chainId, account, lpStakingBonds).catch((e) => {\n console.error('Error fetching LP staking positions:', e)\n return []\n })\n : []\n\n return Promise.resolve([...combinedData, ...lpStakingData])\n } catch (error) {\n console.error('Error fetching user owned bills data:', error)\n return Promise.reject(error)\n }\n}\n\n// REAL's API only answers browsers from origins it allowlists, so it's called through ape.bond's proxy, which\n// forwards to REAL's API (test stack or mainnet, set on ape.bond's side).\n// TODO: staging proxy for now; switch to the production one (https://ape.bond/api/real-lp) once it's deployed.\nconst REAL_LP_API = 'https://staging.ape.bond/api/real-lp'\n// A position's page on REAL's site, where its bonus and pool rewards are claimed.\n// TODO: test site for now; REAL will send the production URL when mainnet is live.\nconst REAL_LP_DASHBOARD = 'https://staking-test.real.finance/lp/dashboard'\n\n// REAL's /rewards/<wallet>: the pool (epoch) rewards, lifetime figures. Only the fields used below are typed.\ninterface RealLpRewards {\n tokens: { token: string; symbol: string; decimals: number; claims_enabled: boolean }[]\n positions: { lineage_id: string; tokens: { token: string; claimable_wei: string }[] }[]\n}\n\n// One row of REAL's /positions/<wallet>: one episode of a position, i.e. one NFT while it sits in the vault.\n// Only the fields used below are typed.\ninterface RealLpPosition {\n token_id: string\n lineage_id: string\n next_episode_id: string | null\n stake_ordinal: number\n status: 'active' | 'rebalanced' | 'unstaked'\n tick_lower: number\n tick_upper: number\n liquidity_wei: string\n principal_usd: string\n value_usd_now: string | null\n apebond: {\n campaign_id: string\n deposited_at: number\n bonus: {\n token: string\n amount_wei: string\n unlock_at: number\n status: 'reserved' | 'claimable' | 'claimed' | 'forfeited'\n claimed_at: number | null\n token_id: string\n } | null\n } | null\n}\n\n/**\n * Raw token amounts (wei) a Uniswap v3 position holds at the pool's current tick: all token0 below its range, all\n * token1 above it, both inside. Floating point: it's for display only.\n */\nconst getPositionAmounts = (liquidity: number, tickLower: number, tickUpper: number, currentTick: number) => {\n const sqrtPrice = (tick: number) => Math.pow(1.0001, tick / 2)\n const sqrtLower = sqrtPrice(tickLower)\n const sqrtUpper = sqrtPrice(tickUpper)\n const sqrtCurrent = sqrtPrice(Math.min(Math.max(currentTick, tickLower), tickUpper))\n return {\n amount0: (liquidity * (sqrtUpper - sqrtCurrent)) / (sqrtCurrent * sqrtUpper),\n amount1: liquidity * (sqrtCurrent - sqrtLower),\n }\n}\n\n/**\n * The user's LP staking positions, shaped as purchased bonds. A position has no bill: it's a Uniswap v3 NFT staked\n * in REAL's vault, and what ApeBond pays is its bonus, reserved in REAL's escrow until the cliff. So each position\n * becomes one bill whose payout is that bonus, vesting all at once at the cliff (`vestingCliff` = `vestingTerm`).\n * Claims happen on REAL's site, so the bills are marked paused (the row's claim button would call `redeem` on the\n * vault). See docs/lp-staking-bonds/2026-10-23-real-lp-positions-rewards-api.md.\n */\nconst fetchUserLpStakingBonds = async (\n chainId: ChainId,\n account: string,\n lpStakingBonds: BillsConfig[],\n): Promise<UserOwnedBillsData[]> => {\n let rows: RealLpPosition[]\n let assetPriceUsd: string | undefined\n let assetIsToken0 = true\n let currentTick = 0\n let rewards: RealLpRewards | undefined\n try {\n const [response, rewardsResponse] = await Promise.all([\n apiGet<{\n current_tick: number\n current_price_usd: string\n asset_is_token0: boolean\n positions: RealLpPosition[]\n }>(`${REAL_LP_API}/positions/${account}`),\n // The positions still show without their pool rewards if this fails\n apiGet<RealLpRewards>(`${REAL_LP_API}/rewards/${account}`).catch((error) => {\n console.error('Error fetching LP staking rewards:', error)\n return undefined\n }),\n ])\n rewards = rewardsResponse\n rows = response?.positions ?? []\n assetPriceUsd = response?.current_price_usd\n assetIsToken0 = response?.asset_is_token0 ?? true\n currentTick = response?.current_tick ?? 0\n } catch (error) {\n // Don't fail the chain's regular bonds because REAL's API is unreachable (or refuses our origin)\n console.error('Error fetching LP staking positions:', error)\n return []\n }\n\n // All episodes of a position share its lineage_id; the one with no next episode is its current state.\n // Only positions bought through ApeBond have an apebond block.\n const currentPositions = rows.filter((row) => row.apebond && row.next_episode_id === null)\n\n // Each campaign's bonus rate and minimum bonus, for the minimum position value that earns a bonus.\n // campaigns() → (enabled, downTicks, upTicks, toleranceTicks, bonusCliffSeconds, bonusBps, minBonusAmount)\n const campaigns = await multicall(\n chainId,\n APE_BOND_POSITION_ADAPTER_ABI,\n lpStakingBonds.map((bond) => ({\n address: bond.lpStakingConfig!.adapter,\n name: 'campaigns',\n params: [bond.lpStakingConfig!.campaignId],\n })),\n )\n\n return lpStakingBonds.map((bond, bondIndex) => {\n const lpStakingConfig = bond.lpStakingConfig!\n const campaign = campaigns?.[bondIndex]\n const bonusDecimals = lpStakingConfig.bonusRewardToken.decimals[bond.chainId] ?? 18\n const bonusThreshold =\n campaign && Number(campaign[5]) > 0\n ? (Number(campaign[6]) / 10 ** bonusDecimals) * (10000 / Number(campaign[5]))\n : undefined\n const userOwnedBills: UserBill[] = currentPositions\n .filter((row) => row.apebond!.campaign_id.toLowerCase() === lpStakingConfig.campaignId.toLowerCase())\n .map((row) => {\n const { deposited_at: depositedAt, bonus } = row.apebond!\n // No bonus when the purchase was below the campaign minimum; forfeited bonuses have amount 0\n const amount = bonus?.amount_wei ?? '0'\n const cliff = bonus ? bonus.unlock_at - depositedAt : 0\n const chainId = bond.chainId\n const bonusToken = lpStakingConfig.bonusRewardToken\n // The pool is the bonus token ($ASSET) paired with the bond's principal token (USDC)\n const assetToken = {\n address: bonusToken.address[chainId] ?? '',\n symbol: bonusToken.symbol,\n name: bonusToken.symbol,\n decimals: bonusToken.decimals,\n }\n const pairedToken = {\n address: bond.lpToken.address[chainId] ?? '',\n symbol: bond.lpToken.symbol,\n name: bond.lpToken.symbol,\n decimals: bond.lpToken.decimals,\n }\n // Value of the position when it was staked: what the buyer paid, minus the zap fees and the change returned\n const principalUsd = parseFloat(row.principal_usd ?? '0')\n // Value of the position now (null once unstaked: the vault no longer holds it)\n const valueUsdNow = parseFloat(row.value_usd_now ?? '0')\n const assetPrice = parseFloat(assetPriceUsd ?? '0')\n // What the staked position holds now. An unstaked position is back in the wallet, so nothing is staked.\n // current_price_usd is $ASSET's price in USDC, and USDC is counted at $1 (as REAL's value_usd_now does).\n const { amount0, amount1 } =\n row.status === 'unstaked'\n ? { amount0: 0, amount1: 0 }\n : getPositionAmounts(parseFloat(row.liquidity_wei), row.tick_lower, row.tick_upper, currentTick)\n const [token0, token1] = assetIsToken0 ? [assetToken, pairedToken] : [pairedToken, assetToken]\n const toStakedToken = (token: typeof assetToken, rawAmount: number) => {\n const amount = rawAmount / 10 ** (token.decimals[chainId] ?? 18)\n return {\n address: token.address,\n symbol: token.symbol,\n amount,\n amountUsd: amount * (token === assetToken ? assetPrice : 1),\n }\n }\n return {\n // Rows are matched to their bond by contract address; for LP staking that's the vault\n address: bond.contractAddress[bond.chainId] ?? '',\n // The position's current NFT, the one REAL's page link uses. After a rebalance past the cliff the escrow\n // still pays on the NFT id the position had at the cliff (bonus.token_id), which has no field here.\n id: row.token_id,\n // The NFT contract is the position manager. The price range (price_lower_usd / price_upper_usd,\n // range_status_now) has no field.\n // Neither do the position's status (an unstaked position still shows, with its bonus as the API reports\n // it) and `finalized` (false for ~13 min after a purchase).\n billNftAddress: lpStakingConfig.positionManager,\n totalPayout: amount,\n // What's left to receive: everything until it's claimed (or forfeited, where amount is 0)\n payout: bonus?.status === 'claimed' ? '0' : amount,\n pendingRewards: bonus?.status === 'claimable' ? amount : '0',\n payoutClaimed: bonus?.status === 'claimed' ? amount : '0',\n vestingStartTimestamp: depositedAt.toString(),\n vestingTerm: cliff.toString(),\n lastBlockTimestamp: (bonus?.claimed_at ?? depositedAt).toString(),\n // No price per payout token: the bonus is a share of the position's value\n truePricePaid: '0',\n paused: true,\n lpStakingData: {\n token0: toStakedToken(token0, amount0),\n token1: toStakedToken(token1, amount1),\n bonusStatus: bonus?.status ?? null,\n bonusThreshold,\n // The position's page on REAL's site. The ordinal is only appended from 2 on (an NFT staked again by\n // hand after an unstake); older ids of the lineage redirect to the current one.\n positionUrl: `${REAL_LP_DASHBOARD}/${row.token_id}${row.stake_ordinal >= 2 ? `-${row.stake_ordinal}` : ''}`,\n // Matched by lineage_id, shared by every episode of the position (it survives rebalances)\n poolRewards: rewards\n ? rewards.tokens.map((rewardToken) => {\n const positionToken = rewards!.positions\n .find((position) => position.lineage_id === row.lineage_id)\n ?.tokens.find((token) => token.token.toLowerCase() === rewardToken.token.toLowerCase())\n // claimable_wei is what's earned and not claimed yet; $ASSET can't be claimed before\n // claims_enabled (mainnet launch + REAL's timelock)\n const rewardAmount = Number(positionToken?.claimable_wei ?? '0') / 10 ** rewardToken.decimals\n return {\n address: rewardToken.token,\n symbol: rewardToken.symbol,\n amount: rewardAmount,\n // Only $ASSET has a price (current_price_usd); REAL's API doesn't price $OVTR\n amountUsd:\n rewardToken.token.toLowerCase() === assetToken.address.toLowerCase()\n ? rewardAmount * assetPrice\n : undefined,\n claimsEnabled: rewardToken.claims_enabled,\n }\n })\n : undefined,\n },\n // What api-v2 provides for regular bills, here from REAL's API (useUserBonds doesn't send LP staking\n // bills to api-v2)\n nftData: {\n tokenId: parseInt(row.token_id),\n billNftId: parseInt(row.token_id),\n processing: false,\n // The position NFT is a Uniswap v3 position with no bond art\n image: 'https://www.ape.bond/images/bills/lp-staking.png',\n chainId,\n contractAddress: lpStakingConfig.positionManager,\n data: {\n billContract: bond.contractAddress[chainId] ?? '',\n billNftAddress: lpStakingConfig.positionManager,\n billNftId: parseInt(row.token_id),\n // Not in REAL's API\n blockNumber: 0,\n bondArtCollection: '',\n bondPartner: bond.bondPartner ?? '',\n bondVersion: bond.billVersion ?? '',\n chainId,\n // The purchase opened the position's first episode, whose id is <token_id>-<opening tx hash>\n createTransactionHash: row.lineage_id.split('-')[1] ?? '',\n createdAddressOwner: account,\n createdAt: depositedAt,\n // The amount paid isn't in REAL's API (only in the purchase tx). The principal token is USDC, so the\n // position's USD value at purchase stands in for it.\n deposit: principalUsd,\n dollarValue: principalUsd,\n expires: depositedAt + cliff,\n pairName: assetIsToken0\n ? `${assetToken.symbol}-${pairedToken.symbol}`\n : `${pairedToken.symbol}-${assetToken.symbol}`,\n // The position's current value (used by the share image), in $ASSET (the payout token) so that\n // payout × payoutTokenPrice gives value_usd_now back. The bonus itself is in the bill's payout fields.\n payout: assetPrice > 0 ? valueUsdNow / assetPrice : 0,\n payoutToken: assetToken.address,\n payoutTokenData: {\n address: assetToken.address,\n name: assetToken.name,\n symbol: assetToken.symbol,\n decimals: assetToken.decimals,\n },\n payoutTokenPrice: assetPriceUsd ?? '0',\n principalToken: pairedToken.address,\n token0: assetIsToken0 ? assetToken : pairedToken,\n token1: assetIsToken0 ? pairedToken : assetToken,\n type: bond.billType,\n vestingPeriodSeconds: cliff,\n },\n },\n // The bonus is paid in the bonus token, not the bond's earnToken, and only unlocks at the cliff.\n // The $OVTR and $ASSET staking rewards (REAL's /rewards/<wallet>) have no field.\n bond: {\n ...bond,\n earnToken: lpStakingConfig.bonusRewardToken,\n vestingCliff: cliff,\n vestingTerm: cliff,\n payoutTokenPrice: assetPriceUsd,\n } as BondsData,\n }\n })\n return { index: bond.index, userOwnedBills }\n })\n}\n\nconst fetchUserOwnedBills = async (\n chainId: ChainId,\n account: string,\n bonds: BillsConfig[],\n tokenPrices: Partial<Record<ChainId, TokenPrices[]>>,\n): Promise<UserBill[]> => {\n // Maps all the bills in the list repo to make a call to each of them to get Bills Id and paused state (only for V4)\n const billIdAndPausedCalls = bonds.flatMap((b, index) => {\n const calls = [\n {\n address: b.contractAddress[b.chainId] ?? '',\n name: 'getBillIds',\n params: [account],\n bondIndex: index,\n },\n ]\n // Only add paused call for V4 bonds\n if (b.billVersion === BillVersion.V4) {\n calls.push({\n address: b.contractAddress[b.chainId] ?? '',\n name: 'paused',\n params: [],\n bondIndex: index,\n })\n }\n return calls\n })\n const billIdAndPausedResults = await multicall(chainId, billAbi, billIdAndPausedCalls, true, 15)\n\n // Separate billIds and pausedStates from results, tracking which bonds have paused calls\n const billIds: any[] = []\n const pausedStates: Map<string, boolean> = new Map()\n let resultIndex = 0\n\n bonds.forEach((b) => {\n // First result is always getBillIds\n billIds.push(billIdAndPausedResults?.[resultIndex])\n resultIndex++\n\n // Next result is paused only if V4\n if (b.billVersion === BillVersion.V4) {\n pausedStates.set(\n b.contractAddress[b.chainId]?.toLowerCase() as string,\n billIdAndPausedResults?.[resultIndex]?.[0] ?? false,\n )\n resultIndex++\n }\n })\n const billDataCalls: any = []\n const billVersions: any = []\n\n billIds?.forEach((idArray: any, index: number) =>\n idArray[0].forEach((id: bigint) => {\n if (id > 0) {\n billDataCalls.push({\n address: bonds[index].contractAddress[bonds[index].chainId],\n name: bonds[index].billVersion !== BillVersion.V1 ? 'getBillInfo' : 'billInfo',\n params: [id],\n bond: bonds[index],\n })\n billDataCalls.push({\n address: bonds[index].contractAddress[bonds[index].chainId],\n name: bonds[index].billVersion !== BillVersion.V1 ? 'claimablePayout' : 'pendingPayoutFor',\n params: [id],\n bond: bonds[index],\n })\n billVersions.push(bonds[index].billVersion)\n }\n }),\n )\n const billData = await multicall(chainId, billAbi, billDataCalls, true, 150)\n const result = []\n\n for (let i = 0; i < billVersions.length; i++) {\n const billPos = i === 0 ? 0 : i * 2\n let bond: BondsData = billDataCalls[billPos].bond\n\n let principalTokenPrice = tokenPrices?.[bond.chainId]?.find(\n (tokenPrice) => tokenPrice.tokenAddress?.toLowerCase() === bond?.lpToken?.address?.[bond.chainId]?.toLowerCase(),\n )?.price\n\n let payoutTokenPrice = tokenPrices?.[bond.chainId]?.find(\n (tokenPrice: TokenPrices) =>\n tokenPrice?.tokenAddress?.toLowerCase() === bond?.earnToken?.address?.[bond.chainId]?.toLowerCase(),\n )?.price\n\n if (principalTokenPrice === undefined) {\n try {\n const res = await apiGet<{ price: string }>(\n `${PRICE_API_URL}/realtime/price?token=${bond?.lpToken?.address?.[bond?.chainId]}&chain=${bond?.chainId}`,\n )\n console.log('Individual call for: ', bond.lpToken.symbol, '. Price: ', res.price)\n principalTokenPrice = parseFloat(res.price ?? '0')\n } catch {\n principalTokenPrice = 0\n }\n }\n if (payoutTokenPrice === undefined) {\n try {\n const res = await apiGet<{ price: string }>(\n `${PRICE_API_URL}/realtime/price?token=${bond?.earnToken?.address?.[bond?.chainId]}&chain=${bond?.chainId}`,\n )\n console.log('Individual call for: ', bond.earnToken.symbol, '. Price: ', res.price)\n payoutTokenPrice = parseFloat(res.price ?? '0')\n } catch {\n payoutTokenPrice = 0\n }\n }\n\n bond = {\n ...bond,\n payoutTokenPrice: payoutTokenPrice?.toString(),\n principalTokenPrice: principalTokenPrice?.toString(),\n }\n const paused = pausedStates.get(bond.contractAddress[bond.chainId]?.toLowerCase() as string) ?? false\n\n const data =\n billVersions[i] !== BillVersion.V1\n ? {\n address: billDataCalls[billPos].address,\n id: billDataCalls[billPos].params[0].toString(),\n payout: (\n BigInt(billData[billPos][0]?.payout.toString()) - BigInt(billData[billPos][0]?.payoutClaimed.toString())\n ).toString(),\n totalPayout: billData[billPos][0]?.payout.toString(),\n payoutClaimed: billData[billPos][0]?.payoutClaimed.toString(),\n billNftAddress: bond.billNnftAddress[bond.chainId] ?? '',\n vesting: billData[billPos][0]?.vesting.toString(),\n vestingTerm: billData[billPos][0]?.vestingTerm.toString(),\n lastBlockTimestamp: billData[billPos][0]?.lastClaimTimestamp.toString(),\n vestingStartTimestamp: billData[billPos][0]?.vestingStartTimestamp.toString(),\n truePricePaid: billData[billPos][0]?.truePricePaid.toString(),\n pendingRewards: billData[billPos + 1][0].toString(),\n paused,\n bond,\n }\n : {\n address: billDataCalls[billPos].address,\n id: billDataCalls[billPos].params[0].toString(),\n payoutClaimed: billData?.[billPos]?.[0]?.payoutClaimed?.toString(),\n payout: billData[billPos][0].toString(),\n billNftAddress: bond.billNnftAddress[bond.chainId] ?? '',\n vesting: billData[billPos][1].toString(),\n lastBlockTimestamp: billData[billPos][2].toString(),\n truePricePaid: billData[billPos][3].toString(),\n pendingRewards: billData[billPos + 1][0].toString(),\n paused,\n bond,\n }\n result.push(data)\n }\n\n return result\n}\n"],"names":[],"mappings":"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"}
@@ -201,7 +201,7 @@ const BuyComponentLpStaking = ({ onDismiss, bondAddress, bondChain, handlePurcha
201
201
  setLoadingTx(false);
202
202
  }
203
203
  };
204
- return bondData ? (jsx(Flex, { className: "modal-content ape:flex ape:flex-col ape:rounded-[10px] ape:bg-white2 ape:w-full ape:p-3.75 ape:md:p-5", style: { ...MCBuyComponentStyles[bondData?.marketingCampaign] }, children: jsxs(Flex, { className: "modaltable-container ape:w-full ape:flex ape:flex-col ape:relative ape:gap-2.5", children: [jsx(LpBondModalHeader, { bondData: bondData, onDismiss: onDismiss }), jsx(ProjectDescription, { description: bondData.shortDescription, isProjectView: isProjectView }), jsx(Flex, { className: clsx('ape:w-full', isProjectView ? 'ape:flex ape:md:hidden!' : 'ape:flex'), children: jsx(BondCards, { bondData: bondData, isDoingMaxBuy: false }) }), jsx(LpStakingEstimations, { inputValue: inputValue, inputTokenPrice: inputTokenPrice, bondData: bondData, youSpendString: youSpendString, isZap: isZapSupported, fetchingZapQuote: zapLoading, zapError: zapError, protocolQuote: zapData?.protocolQuote, lpQuote: zapData?.lpQuote }), jsx(TokenSelectorPanel, { typedValue: inputValue, setTypedValue: setInputValue, selectedToken: inputToken, handleValueBtn: handleMaxButton, handleCurrencySelect: handleCurrencySelect, bondChainId: bondData?.chainId, enableZap: true, bondPrincipalToken: bondData?.lpToken, tokenBalance: inputCurrencyBalance, selectedTokenPrice: parseFloat(bondData?.principalTokenPrice ?? '0'), marketingCampaign: bondData?.marketingCampaign, isConnected: !!account }), bondData?.warningCard && (jsx(Flex, { className: "ape:w-full ape:rounded-normal ape:p-[2px_10px]", style: { background: '#DE62F366' }, children: jsx(Text, { as: "div", size: "12px", className: "ape:font-normal ape:flex ape:items-center ape:leading-5.5!", children: jsx(SafeHTMLComponent, { html: bondData?.warningCard }) }) })), jsx(Flex, { className: "modaltable-container button-container ape:w-full ape:flex ape:relative ape:flex-row ape:justify-between", children: jsx(Flex, { className: "button-container buy ape:justify-center ape:items-center ape:cursor-pointer ape:w-full", children: !account ? (jsx(ConnectButton, {})) : (jsx(Button, { className: "action-button ape:w-full ape:text-[14px]! ape:lg:text-[16px]!", load: load || approvalState === ApprovalState.PENDING || zapLoading, disabled: load ||
204
+ return bondData ? (jsx(Flex, { className: "modal-content ape:flex ape:flex-col ape:rounded-[10px] ape:bg-white2 ape:w-full ape:p-3.75 ape:md:p-5", style: { ...MCBuyComponentStyles[bondData?.marketingCampaign] }, children: jsxs(Flex, { className: "modaltable-container ape:w-full ape:flex ape:flex-col ape:relative ape:gap-2.5", children: [jsx(LpBondModalHeader, { bondData: bondData, onDismiss: onDismiss }), jsx(ProjectDescription, { description: bondData.shortDescription, isProjectView: true }), jsx(Flex, { className: clsx('ape:w-full', isProjectView ? 'ape:flex ape:md:hidden!' : 'ape:flex'), children: jsx(BondCards, { bondData: bondData, isDoingMaxBuy: false }) }), jsx(LpStakingEstimations, { inputValue: inputValue, inputTokenPrice: inputTokenPrice, bondData: bondData, youSpendString: youSpendString, isZap: isZapSupported, fetchingZapQuote: zapLoading, zapError: zapError, protocolQuote: zapData?.protocolQuote, lpQuote: zapData?.lpQuote }), jsx(TokenSelectorPanel, { typedValue: inputValue, setTypedValue: setInputValue, selectedToken: inputToken, handleValueBtn: handleMaxButton, handleCurrencySelect: handleCurrencySelect, bondChainId: bondData?.chainId, enableZap: true, bondPrincipalToken: bondData?.lpToken, tokenBalance: inputCurrencyBalance, selectedTokenPrice: parseFloat(bondData?.principalTokenPrice ?? '0'), marketingCampaign: bondData?.marketingCampaign, isConnected: !!account }), bondData?.warningCard && (jsx(Flex, { className: "ape:w-full ape:rounded-normal ape:p-[2px_10px]", style: { background: '#DE62F366' }, children: jsx(Text, { as: "div", size: "12px", className: "ape:font-normal ape:flex ape:items-center ape:leading-5.5!", children: jsx(SafeHTMLComponent, { html: bondData?.warningCard }) }) })), jsx(Flex, { className: "modaltable-container button-container ape:w-full ape:flex ape:relative ape:flex-row ape:justify-between", children: jsx(Flex, { className: "button-container buy ape:justify-center ape:items-center ape:cursor-pointer ape:w-full", children: !account ? (jsx(ConnectButton, {})) : (jsx(Button, { className: "action-button ape:w-full ape:text-[14px]! ape:lg:text-[16px]!", load: load || approvalState === ApprovalState.PENDING || zapLoading, disabled: load ||
205
205
  approvalState === ApprovalState.PENDING ||
206
206
  bondData?.soldOut ||
207
207
  isEmptyInput ||
@@ -1 +1 @@
1
- {"version":3,"file":"BuyComponentLpStaking.js","sources":["../../../../../src/adapters/evm/views/lpStaking/BuyComponentLpStaking.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react'\nimport { useChainId, useSendTransaction, useSwitchChain } from 'wagmi'\nimport { ChainId, MarketingCampaign } from '@ape.swap/apeswap-lists'\nimport type { ChainBuyComponentProps } from '../../../types'\nimport useBondsData from '../../../../state/bonds/useBondsData'\nimport { useSDKConfig } from '../../../../state/useSDKConfig'\nimport { usePopups } from '../../../../state/popups/usePopups'\nimport { useSendReferenceId } from '../../../../hooks/useSendReferenceId'\nimport TokenSelectorPanel from '../../../../components/TokenSelectorPanel'\nimport ConnectButton from '../../../../components/ConnectButton'\nimport ProjectDescription from '../../../../views/BuyBond/components/ProjectDescription'\nimport Flex from '../../../../components/uikit-sdk/Flex'\nimport Button from '../../../../components/uikit-sdk/Button/Button'\nimport { MCBuyComponentStyles } from '../../../../utils/campaignStyles'\nimport { toFixedString } from '../../../../utils/fixedPoint'\nimport { remove0xPrefix } from '../../../../utils/remove0xPrefix'\nimport { reportError } from '../../../../utils/reportError'\nimport track from '../../../../utils/track'\nimport useEVMAccount from '../../state/useEVMAccount'\nimport { ApprovalState, useApproval } from '../../state/useAllowance'\nimport { useMonitorTx } from '../../state/useMonitorTx'\nimport clsx from 'clsx'\nimport BondCards from '../../../../views/BuyBond/components/BondCards/BondCards'\nimport Text from '../../../../components/uikit-sdk/Text'\nimport SafeHTMLComponent from '../../../../components/SafeHTMLComponent'\nimport useSoulZapLpStakingQuote from '../../state/lpStaking/useSoulZapLpStakingQuote'\nimport { parseEther } from 'viem'\nimport useTokenFromZapList from '../../../../hooks/useTokenFromZapList'\nimport { SoulZapTokenManager } from '../../../../config/constants/addresses'\nimport { ZapSupportedChainId } from '../../../../config/constants/variables'\nimport LpBondModalHeader from './LpBondModalHeader'\nimport LpStakingEstimations from './LpStakingEstimations'\nimport useSortedZapList from '../../../../hooks/useSortedZapList'\nimport { getSymbol } from '../../../../utils/getNativeTicker'\nimport { formatUSDNumber, getMaxBuy } from '../../../../utils/displayHelpers'\n\n/**\n * Buy form of LP staking bonds (`billType === 'lpStaking'`). Kept apart from the regular EVM BuyComponent because the\n * flow is different: no zaps, tiers, bridge or max-buy rules. Rendered inside ModalHandlerLpStaking from the bond list,\n * and directly by ChainBuyComponent elsewhere.\n */\nconst BuyComponentLpStaking: React.FC<ChainBuyComponentProps> = ({\n onDismiss,\n bondAddress,\n bondChain,\n handlePurchasedBond,\n setBillId,\n isProjectView,\n}) => {\n // Hooks\n const SDKConfig = useSDKConfig()\n const userChainId = useChainId()\n const { switchChainAsync } = useSwitchChain()\n const { address: account } = useEVMAccount()\n const { data: bonds } = useBondsData()\n const { addToastError } = usePopups()\n const sendReferenceId = useSendReferenceId()\n const { sendTransactionAsync } = useSendTransaction()\n\n // Bond to be used\n const bondData = useMemo(\n () =>\n bonds?.find(\n (bond) =>\n bond?.contractAddress?.[bond.chainId]?.toLowerCase() === bondAddress?.toLowerCase() &&\n bond.chainId === bondChain,\n ),\n [bonds, bondAddress, bondChain],\n )\n\n // State\n const [buyTxHash, setBuyTxHash] = useState<string | undefined>()\n const [inputValue, setInputValue] = useState('')\n const [loadingTx, setLoadingTx] = useState(false)\n const { isLoading: isConfirming, isSuccess: isConfirmed, data: buyTxReceipt } = useMonitorTx(buyTxHash, bondChain)\n const [inputTokenString, setInputTokenString] = useState(bondData?.lpToken?.address?.[bondData.chainId])\n const inputToken = useTokenFromZapList(inputTokenString, bondData?.chainId, bondData?.lpToken)\n\n const { sortedZapList } = 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\n const inputTokenPrice = enrichedTokenData?.price\n\n // Zap call data\n\n const [zapLoading, zapData, , zapError] = useSoulZapLpStakingQuote(inputValue, inputToken, bondData, account)\n // console.log(zapData)\n\n // Static Data\n const load = loadingTx || (isConfirming && !isConfirmed)\n const isWrongChain = !!bondChain && userChainId !== bondChain\n const exceedsBalance = Number(inputCurrencyBalance ?? '0') < Number(inputValue)\n const isEmptyInput = !inputValue || parseFloat(inputValue) === 0\n\n const spendAmount = parseFloat(inputValue) || 0\n const youSpendString = `${spendAmount.toLocaleString()} ${getSymbol(inputToken, bondData?.chainId)}${inputTokenPrice ? ` ($${formatUSDNumber((spendAmount * inputTokenPrice).toString())})` : ''}`\n const isZapSupported = false\n // Every purchase goes through the zap, so it can't be sent without a quote to send\n const hasZapQuote = !zapError && !!zapData?.txData\n\n // maxPayout and the bond's remaining capacity are in the pool's stablecoin (lpToken1), counted at $1. Paying with it\n // needs no price; other tokens are converted with their USD price, and can't be checked without one (the price\n // guard still reverts the tx).\n const stablecoinAddress = bondData?.lpStakingConfig?.lpToken1?.address?.[bondChain as ChainId]?.toLowerCase()\n const isPayingWithStablecoin =\n inputToken !== 'NATIVE' && inputToken?.address?.[bondChain as ChainId]?.toLowerCase() === stablecoinAddress\n const spendInStablecoin = isPayingWithStablecoin ? spendAmount : spendAmount * (inputTokenPrice ?? 0)\n const maxBuy = getMaxBuy(bondData, true)\n // 0 when the limits couldn't be read; the price guard still applies then\n const exceedsMaxBuy = maxBuy > 0 && spendInStablecoin > maxBuy\n\n // Once the buy tx is confirmed, report the new position's NFT id so ModalHandlerLpStaking can show it. The adapter's\n // deposit event has it: topics = [event, tokenId, campaignId, buyer]. It's the token_id REAL's API lists the\n // position under, which is the bill's id.\n useEffect(() => {\n if (!buyTxReceipt || !setBillId) return\n try {\n const adapter = bondData?.lpStakingConfig?.adapter?.toLowerCase()\n const campaignId = bondData?.lpStakingConfig?.campaignId?.toLowerCase()\n const depositLog = buyTxReceipt.logs.find(\n (log) => log.address.toLowerCase() === adapter && log.topics[2]?.toLowerCase() === campaignId,\n )\n const tokenIdTopic = depositLog?.topics[1]\n if (tokenIdTopic) setBillId(BigInt(tokenIdTopic).toString())\n } catch (e) {\n console.error(e)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [buyTxReceipt])\n\n // State Handlers\n const handleMaxButton = useCallback(() => {\n setInputValue(inputCurrencyBalance ?? '0')\n }, [inputCurrencyBalance])\n\n const handleCurrencySelect = useCallback((newInputToken: string) => {\n setInputValue('')\n setInputTokenString(newInputToken)\n }, [])\n\n // Approve & Purchase Functions\n const [approvalState, approveCallback] = useApproval(\n inputValue,\n inputToken ?? null,\n SoulZapTokenManager?.[bondData?.chainId as ZapSupportedChainId] ?? null,\n account ?? null,\n bondChain ?? null,\n )\n const isApproved = approvalState === ApprovalState.APPROVED\n\n const handleApprove = async () => {\n if (isWrongChain) {\n try {\n await switchChainAsync({ chainId: bondChain })\n } catch (error: any) {\n addToastError(error.shortMessage)\n return\n }\n }\n await approveCallback()\n track({\n event: 'approveBondClick',\n chain: bondChain,\n data: {\n cat: bondData?.billType,\n bond: bondData?.earnToken.symbol,\n },\n })\n }\n\n const handleBuy = async () => {\n if (!bondData || !bondAddress || !bondChain || !hasZapQuote) return\n\n if (isWrongChain) {\n try {\n await switchChainAsync({ chainId: bondChain })\n } catch (error: any) {\n addToastError(error.shortMessage)\n return\n }\n }\n\n setLoadingTx(true)\n const usdAmount = parseFloat(inputValue) * parseFloat(bondData?.principalTokenPrice ?? '0')\n track({\n event: 'buyBondClick',\n chain: bondChain,\n data: {\n cat: bondData?.billType,\n bond: bondData?.earnToken.symbol,\n value: usdAmount,\n },\n })\n try {\n const validated18DecimalAmount = toFixedString(inputValue ?? '0', 18, 'trunc')\n const parsedValue = parseEther(validated18DecimalAmount)\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 sendReferenceId(bondAddress, bondChain, hash)\n handlePurchasedBond?.({ buyTxHash: hash })\n track({\n event: 'bond',\n chain: bondChain,\n data: {\n cat: 'lp-staking-buy',\n type: bondData?.billType ?? '',\n typedValue: inputValue,\n principalToken: bondData?.lpToken.symbol ?? '',\n earnToken: bondData?.earnToken.symbol ?? '',\n address: remove0xPrefix(bondAddress),\n usdAmount,\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: 'buyLpStakingBond', bondData, error },\n chainId: bondChain,\n account,\n })\n addToastError(error.shortMessage)\n } finally {\n setLoadingTx(false)\n }\n }\n\n return bondData ? (\n <Flex\n className=\"modal-content ape:flex ape:flex-col ape:rounded-[10px] ape:bg-white2 ape:w-full ape:p-3.75 ape:md:p-5\"\n style={{ ...MCBuyComponentStyles[bondData?.marketingCampaign as MarketingCampaign] }}\n >\n <Flex className=\"modaltable-container ape:w-full ape:flex ape:flex-col ape:relative ape:gap-2.5\">\n <LpBondModalHeader bondData={bondData} onDismiss={onDismiss} />\n <ProjectDescription description={bondData.shortDescription} isProjectView={isProjectView} />\n <Flex className={clsx('ape:w-full', isProjectView ? 'ape:flex ape:md:hidden!' : 'ape:flex')}>\n <BondCards bondData={bondData} isDoingMaxBuy={false} />\n </Flex>\n <LpStakingEstimations\n inputValue={inputValue}\n inputTokenPrice={inputTokenPrice}\n bondData={bondData}\n youSpendString={youSpendString}\n isZap={isZapSupported}\n fetchingZapQuote={zapLoading}\n zapError={zapError}\n protocolQuote={zapData?.protocolQuote}\n lpQuote={zapData?.lpQuote}\n />\n <TokenSelectorPanel\n typedValue={inputValue}\n setTypedValue={setInputValue}\n selectedToken={inputToken}\n handleValueBtn={handleMaxButton}\n handleCurrencySelect={handleCurrencySelect}\n bondChainId={bondData?.chainId}\n enableZap={true}\n bondPrincipalToken={bondData?.lpToken}\n tokenBalance={inputCurrencyBalance}\n selectedTokenPrice={parseFloat(bondData?.principalTokenPrice ?? '0')}\n marketingCampaign={bondData?.marketingCampaign}\n isConnected={!!account}\n />\n {bondData?.warningCard && (\n <Flex className=\"ape:w-full ape:rounded-normal ape:p-[2px_10px]\" style={{ background: '#DE62F366' }}>\n <Text as=\"div\" size=\"12px\" className=\"ape:font-normal ape:flex ape:items-center ape:leading-5.5!\">\n <SafeHTMLComponent html={bondData?.warningCard} />\n </Text>\n </Flex>\n )}\n <Flex className=\"modaltable-container button-container ape:w-full ape:flex ape:relative ape:flex-row ape:justify-between\">\n <Flex className=\"button-container buy ape:justify-center ape:items-center ape:cursor-pointer ape:w-full\">\n {!account ? (\n <ConnectButton />\n ) : (\n <Button\n className=\"action-button ape:w-full ape:text-[14px]! ape:lg:text-[16px]!\"\n load={load || approvalState === ApprovalState.PENDING || zapLoading}\n disabled={\n load ||\n approvalState === ApprovalState.PENDING ||\n bondData?.soldOut ||\n isEmptyInput ||\n exceedsBalance ||\n exceedsMaxBuy ||\n SDKConfig.blockSales ||\n zapLoading ||\n // Approving doesn't need the quote, buying does\n (isApproved && !hasZapQuote)\n }\n onClick={isApproved ? handleBuy : handleApprove}\n >\n {exceedsBalance\n ? 'Exceeds balance'\n : isEmptyInput\n ? 'Insert amount'\n : exceedsMaxBuy\n ? 'Exceeds Max Buy. Reduce amount'\n : isApproved\n ? zapLoading\n ? 'Loading'\n : hasZapQuote\n ? 'buy'\n : 'Quote unavailable'\n : 'approve'}\n </Button>\n )}\n </Flex>\n </Flex>\n </Flex>\n </Flex>\n ) : (\n <></>\n )\n}\n\nexport default React.memo(BuyComponentLpStaking)\n"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"BuyComponentLpStaking.js","sources":["../../../../../src/adapters/evm/views/lpStaking/BuyComponentLpStaking.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react'\nimport { useChainId, useSendTransaction, useSwitchChain } from 'wagmi'\nimport { ChainId, MarketingCampaign } from '@ape.swap/apeswap-lists'\nimport type { ChainBuyComponentProps } from '../../../types'\nimport useBondsData from '../../../../state/bonds/useBondsData'\nimport { useSDKConfig } from '../../../../state/useSDKConfig'\nimport { usePopups } from '../../../../state/popups/usePopups'\nimport { useSendReferenceId } from '../../../../hooks/useSendReferenceId'\nimport TokenSelectorPanel from '../../../../components/TokenSelectorPanel'\nimport ConnectButton from '../../../../components/ConnectButton'\nimport ProjectDescription from '../../../../views/BuyBond/components/ProjectDescription'\nimport Flex from '../../../../components/uikit-sdk/Flex'\nimport Button from '../../../../components/uikit-sdk/Button/Button'\nimport { MCBuyComponentStyles } from '../../../../utils/campaignStyles'\nimport { toFixedString } from '../../../../utils/fixedPoint'\nimport { remove0xPrefix } from '../../../../utils/remove0xPrefix'\nimport { reportError } from '../../../../utils/reportError'\nimport track from '../../../../utils/track'\nimport useEVMAccount from '../../state/useEVMAccount'\nimport { ApprovalState, useApproval } from '../../state/useAllowance'\nimport { useMonitorTx } from '../../state/useMonitorTx'\nimport clsx from 'clsx'\nimport BondCards from '../../../../views/BuyBond/components/BondCards/BondCards'\nimport Text from '../../../../components/uikit-sdk/Text'\nimport SafeHTMLComponent from '../../../../components/SafeHTMLComponent'\nimport useSoulZapLpStakingQuote from '../../state/lpStaking/useSoulZapLpStakingQuote'\nimport { parseEther } from 'viem'\nimport useTokenFromZapList from '../../../../hooks/useTokenFromZapList'\nimport { SoulZapTokenManager } from '../../../../config/constants/addresses'\nimport { ZapSupportedChainId } from '../../../../config/constants/variables'\nimport LpBondModalHeader from './LpBondModalHeader'\nimport LpStakingEstimations from './LpStakingEstimations'\nimport useSortedZapList from '../../../../hooks/useSortedZapList'\nimport { getSymbol } from '../../../../utils/getNativeTicker'\nimport { formatUSDNumber, getMaxBuy } from '../../../../utils/displayHelpers'\n\n/**\n * Buy form of LP staking bonds (`billType === 'lpStaking'`). Kept apart from the regular EVM BuyComponent because the\n * flow is different: no zaps, tiers, bridge or max-buy rules. Rendered inside ModalHandlerLpStaking from the bond list,\n * and directly by ChainBuyComponent elsewhere.\n */\nconst BuyComponentLpStaking: React.FC<ChainBuyComponentProps> = ({\n onDismiss,\n bondAddress,\n bondChain,\n handlePurchasedBond,\n setBillId,\n isProjectView,\n}) => {\n // Hooks\n const SDKConfig = useSDKConfig()\n const userChainId = useChainId()\n const { switchChainAsync } = useSwitchChain()\n const { address: account } = useEVMAccount()\n const { data: bonds } = useBondsData()\n const { addToastError } = usePopups()\n const sendReferenceId = useSendReferenceId()\n const { sendTransactionAsync } = useSendTransaction()\n\n // Bond to be used\n const bondData = useMemo(\n () =>\n bonds?.find(\n (bond) =>\n bond?.contractAddress?.[bond.chainId]?.toLowerCase() === bondAddress?.toLowerCase() &&\n bond.chainId === bondChain,\n ),\n [bonds, bondAddress, bondChain],\n )\n\n // State\n const [buyTxHash, setBuyTxHash] = useState<string | undefined>()\n const [inputValue, setInputValue] = useState('')\n const [loadingTx, setLoadingTx] = useState(false)\n const { isLoading: isConfirming, isSuccess: isConfirmed, data: buyTxReceipt } = useMonitorTx(buyTxHash, bondChain)\n const [inputTokenString, setInputTokenString] = useState(bondData?.lpToken?.address?.[bondData.chainId])\n const inputToken = useTokenFromZapList(inputTokenString, bondData?.chainId, bondData?.lpToken)\n\n const { sortedZapList } = 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\n const inputTokenPrice = enrichedTokenData?.price\n\n // Zap call data\n\n const [zapLoading, zapData, , zapError] = useSoulZapLpStakingQuote(inputValue, inputToken, bondData, account)\n // console.log(zapData)\n\n // Static Data\n const load = loadingTx || (isConfirming && !isConfirmed)\n const isWrongChain = !!bondChain && userChainId !== bondChain\n const exceedsBalance = Number(inputCurrencyBalance ?? '0') < Number(inputValue)\n const isEmptyInput = !inputValue || parseFloat(inputValue) === 0\n\n const spendAmount = parseFloat(inputValue) || 0\n const youSpendString = `${spendAmount.toLocaleString()} ${getSymbol(inputToken, bondData?.chainId)}${inputTokenPrice ? ` ($${formatUSDNumber((spendAmount * inputTokenPrice).toString())})` : ''}`\n const isZapSupported = false\n // Every purchase goes through the zap, so it can't be sent without a quote to send\n const hasZapQuote = !zapError && !!zapData?.txData\n\n // maxPayout and the bond's remaining capacity are in the pool's stablecoin (lpToken1), counted at $1. Paying with it\n // needs no price; other tokens are converted with their USD price, and can't be checked without one (the price\n // guard still reverts the tx).\n const stablecoinAddress = bondData?.lpStakingConfig?.lpToken1?.address?.[bondChain as ChainId]?.toLowerCase()\n const isPayingWithStablecoin =\n inputToken !== 'NATIVE' && inputToken?.address?.[bondChain as ChainId]?.toLowerCase() === stablecoinAddress\n const spendInStablecoin = isPayingWithStablecoin ? spendAmount : spendAmount * (inputTokenPrice ?? 0)\n const maxBuy = getMaxBuy(bondData, true)\n // 0 when the limits couldn't be read; the price guard still applies then\n const exceedsMaxBuy = maxBuy > 0 && spendInStablecoin > maxBuy\n\n // Once the buy tx is confirmed, report the new position's NFT id so ModalHandlerLpStaking can show it. The adapter's\n // deposit event has it: topics = [event, tokenId, campaignId, buyer]. It's the token_id REAL's API lists the\n // position under, which is the bill's id.\n useEffect(() => {\n if (!buyTxReceipt || !setBillId) return\n try {\n const adapter = bondData?.lpStakingConfig?.adapter?.toLowerCase()\n const campaignId = bondData?.lpStakingConfig?.campaignId?.toLowerCase()\n const depositLog = buyTxReceipt.logs.find(\n (log) => log.address.toLowerCase() === adapter && log.topics[2]?.toLowerCase() === campaignId,\n )\n const tokenIdTopic = depositLog?.topics[1]\n if (tokenIdTopic) setBillId(BigInt(tokenIdTopic).toString())\n } catch (e) {\n console.error(e)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [buyTxReceipt])\n\n // State Handlers\n const handleMaxButton = useCallback(() => {\n setInputValue(inputCurrencyBalance ?? '0')\n }, [inputCurrencyBalance])\n\n const handleCurrencySelect = useCallback((newInputToken: string) => {\n setInputValue('')\n setInputTokenString(newInputToken)\n }, [])\n\n // Approve & Purchase Functions\n const [approvalState, approveCallback] = useApproval(\n inputValue,\n inputToken ?? null,\n SoulZapTokenManager?.[bondData?.chainId as ZapSupportedChainId] ?? null,\n account ?? null,\n bondChain ?? null,\n )\n const isApproved = approvalState === ApprovalState.APPROVED\n\n const handleApprove = async () => {\n if (isWrongChain) {\n try {\n await switchChainAsync({ chainId: bondChain })\n } catch (error: any) {\n addToastError(error.shortMessage)\n return\n }\n }\n await approveCallback()\n track({\n event: 'approveBondClick',\n chain: bondChain,\n data: {\n cat: bondData?.billType,\n bond: bondData?.earnToken.symbol,\n },\n })\n }\n\n const handleBuy = async () => {\n if (!bondData || !bondAddress || !bondChain || !hasZapQuote) return\n\n if (isWrongChain) {\n try {\n await switchChainAsync({ chainId: bondChain })\n } catch (error: any) {\n addToastError(error.shortMessage)\n return\n }\n }\n\n setLoadingTx(true)\n const usdAmount = parseFloat(inputValue) * parseFloat(bondData?.principalTokenPrice ?? '0')\n track({\n event: 'buyBondClick',\n chain: bondChain,\n data: {\n cat: bondData?.billType,\n bond: bondData?.earnToken.symbol,\n value: usdAmount,\n },\n })\n try {\n const validated18DecimalAmount = toFixedString(inputValue ?? '0', 18, 'trunc')\n const parsedValue = parseEther(validated18DecimalAmount)\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 sendReferenceId(bondAddress, bondChain, hash)\n handlePurchasedBond?.({ buyTxHash: hash })\n track({\n event: 'bond',\n chain: bondChain,\n data: {\n cat: 'lp-staking-buy',\n type: bondData?.billType ?? '',\n typedValue: inputValue,\n principalToken: bondData?.lpToken.symbol ?? '',\n earnToken: bondData?.earnToken.symbol ?? '',\n address: remove0xPrefix(bondAddress),\n usdAmount,\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: 'buyLpStakingBond', bondData, error },\n chainId: bondChain,\n account,\n })\n addToastError(error.shortMessage)\n } finally {\n setLoadingTx(false)\n }\n }\n\n return bondData ? (\n <Flex\n className=\"modal-content ape:flex ape:flex-col ape:rounded-[10px] ape:bg-white2 ape:w-full ape:p-3.75 ape:md:p-5\"\n style={{ ...MCBuyComponentStyles[bondData?.marketingCampaign as MarketingCampaign] }}\n >\n <Flex className=\"modaltable-container ape:w-full ape:flex ape:flex-col ape:relative ape:gap-2.5\">\n <LpBondModalHeader bondData={bondData} onDismiss={onDismiss} />\n {/* isProjectView makes it render at all (it's always on in the regular BuyComponent), not a page check */}\n <ProjectDescription description={bondData.shortDescription} isProjectView />\n <Flex className={clsx('ape:w-full', isProjectView ? 'ape:flex ape:md:hidden!' : 'ape:flex')}>\n <BondCards bondData={bondData} isDoingMaxBuy={false} />\n </Flex>\n <LpStakingEstimations\n inputValue={inputValue}\n inputTokenPrice={inputTokenPrice}\n bondData={bondData}\n youSpendString={youSpendString}\n isZap={isZapSupported}\n fetchingZapQuote={zapLoading}\n zapError={zapError}\n protocolQuote={zapData?.protocolQuote}\n lpQuote={zapData?.lpQuote}\n />\n <TokenSelectorPanel\n typedValue={inputValue}\n setTypedValue={setInputValue}\n selectedToken={inputToken}\n handleValueBtn={handleMaxButton}\n handleCurrencySelect={handleCurrencySelect}\n bondChainId={bondData?.chainId}\n enableZap={true}\n bondPrincipalToken={bondData?.lpToken}\n tokenBalance={inputCurrencyBalance}\n selectedTokenPrice={parseFloat(bondData?.principalTokenPrice ?? '0')}\n marketingCampaign={bondData?.marketingCampaign}\n isConnected={!!account}\n />\n {bondData?.warningCard && (\n <Flex className=\"ape:w-full ape:rounded-normal ape:p-[2px_10px]\" style={{ background: '#DE62F366' }}>\n <Text as=\"div\" size=\"12px\" className=\"ape:font-normal ape:flex ape:items-center ape:leading-5.5!\">\n <SafeHTMLComponent html={bondData?.warningCard} />\n </Text>\n </Flex>\n )}\n <Flex className=\"modaltable-container button-container ape:w-full ape:flex ape:relative ape:flex-row ape:justify-between\">\n <Flex className=\"button-container buy ape:justify-center ape:items-center ape:cursor-pointer ape:w-full\">\n {!account ? (\n <ConnectButton />\n ) : (\n <Button\n className=\"action-button ape:w-full ape:text-[14px]! ape:lg:text-[16px]!\"\n load={load || approvalState === ApprovalState.PENDING || zapLoading}\n disabled={\n load ||\n approvalState === ApprovalState.PENDING ||\n bondData?.soldOut ||\n isEmptyInput ||\n exceedsBalance ||\n exceedsMaxBuy ||\n SDKConfig.blockSales ||\n zapLoading ||\n // Approving doesn't need the quote, buying does\n (isApproved && !hasZapQuote)\n }\n onClick={isApproved ? handleBuy : handleApprove}\n >\n {exceedsBalance\n ? 'Exceeds balance'\n : isEmptyInput\n ? 'Insert amount'\n : exceedsMaxBuy\n ? 'Exceeds Max Buy. Reduce amount'\n : isApproved\n ? zapLoading\n ? 'Loading'\n : hasZapQuote\n ? 'buy'\n : 'Quote unavailable'\n : 'approve'}\n </Button>\n )}\n </Flex>\n </Flex>\n </Flex>\n </Flex>\n ) : (\n <></>\n )\n}\n\nexport default React.memo(BuyComponentLpStaking)\n"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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"}
@@ -4,8 +4,6 @@ import TokenImage from '../../../../components/uikit-sdk/TokenImage/index.js';
4
4
  import { discountEarnTokenPrice } from '../../../../utils/displayHelpers.js';
5
5
  import useModal from '../../../../hooks/useModal.js';
6
6
  import SlippageModal from '../../../../components/SlippageModal/index.js';
7
- import ExpandedViewButton from '../../../../views/BuyBond/components/ExpandedViewButton.js';
8
- import track from '../../../../utils/track.js';
9
7
  import BondModalMinTierHeader from '../../../../views/BuyBond/components/BondModalMinTierHeader.js';
10
8
  import useTierPoints from '../../../../state/tiers/useTierPoints.js';
11
9
  import { TIERS_WEIGHT, promotionDataMapping } from '../../../../state/tiers/tiers.js';
@@ -31,7 +29,6 @@ const LpBondModalHeader = ({ bondData, onDismiss, hidePromotionUi = false, }) =>
31
29
  // Static Data
32
30
  const tokenSymbol0 = bondData.lpStakingConfig?.lpToken0.symbol;
33
31
  const tokenSymbol1 = bondData.lpStakingConfig?.lpToken1.symbol;
34
- const showProjectInfoButton = SDKConfig?.referenceId === 'apebond';
35
32
  const isBondEligibleForPromotion = !(bondData?.billType === 'lpStaking') && // lpStaking bonds are not eligible for promotions
36
33
  (eligibleChains === undefined || eligibleChains?.includes(bondData.chainId)); // if promotion comes with eligibleChains undefined means it should be used for every chain
37
34
  const minTier = bondData.minTier !== undefined ? bondData.minTier : null;
@@ -43,21 +40,9 @@ const LpBondModalHeader = ({ bondData, onDismiss, hidePromotionUi = false, }) =>
43
40
  }
44
41
  onDismiss?.();
45
42
  };
46
- const handleProjectViewNavigation = () => {
47
- window.location.href = `/bonds/${bondData?.contractAddress?.[bondData?.chainId]}/${bondData?.chainId}`;
48
- track({
49
- event: 'projectInfoClick',
50
- chain: bondData.chainId,
51
- data: {
52
- cat: 'Modal',
53
- bond: bondData.earnToken.symbol,
54
- bondChain: bondData.chainId,
55
- },
56
- });
57
- };
58
43
  // Modals
59
44
  const [onOpenSlippageModal] = useModal(jsx(SlippageModal, { chainId: bondData.chainId }));
60
- return (jsxs(Flex, { className: "modaltable-container title-container ape:w-full ape:flex ape:relative ape:flex-col ape:justify-center ape:items-start", children: [jsxs(Flex, { className: "ape:w-full ape:h-[30px] ape:max-md:mb-[10px] ape:md:mb-0 ape:justify-between ape:md:justify-end", children: [jsx(Flex, { className: "ape:flex ape:md:hidden", children: jsx(BondModalMinTierHeader, { minTier: minTier }) }), jsx(Flex, { className: "ape:cursor-pointer", children: onDismiss ? (jsxs(Fragment, { children: [showProjectInfoButton && jsx(ExpandedViewButton, { handleNavigation: handleProjectViewNavigation }), jsx(Flex, { className: "ape:mx-[25px]", onClick: onOpenSlippageModal, children: jsx(Cog, { width: isMobile ? '16px' : '20px' }) }), jsx(Flex, { onClick: handleClose, children: jsx(Close, { color: "text", width: isMobile ? '12px' : '18px' }) })] })) : (jsx(Flex, { className: "ape:py-[3px] ape:mt-[10px]", onClick: onOpenSlippageModal, children: jsx(Cog, { width: isMobile ? '16px' : '20px' }) })) })] }), jsxs(Flex, { className: "ape:w-full ape:relative", children: [jsxs(Flex, { className: "title-container bondicon ape:flex ape:flex-row ape:items-center ape:relative", children: [jsx(Flex, { style: MCTokenIconStyles[bondData.marketingCampaign] }), jsx(TokenImage, { symbol: tokenSymbol0, symbol2: tokenSymbol1, size: 50, chain: bondData.chainId })] }), jsxs(Flex, { className: "ape:flex ape:flex-col ape:pl-[10px] ape:md:pl-[20px] ape:text-[20px] ape:md:text-[24px] ape:font-bold", children: [tokenSymbol0, "-", tokenSymbol1, jsx(ListTag, { text: bondData?.tags?.[0] })] }), jsxs(Flex, { className: "title-container price-container ape:flex-col ape:pl-[10px] ape:md:pl-[20px]", children: [jsxs(Flex, { className: "price-container price ape:line-through ape:opacity-50 ape:font-normal ape:text-[12px] ape:md:text-[14px]", children: ["$", formatNumberSI(bondData.payoutTokenPrice, 2)] }), SDKConfig.useTiers &&
45
+ return (jsxs(Flex, { className: "modaltable-container title-container ape:w-full ape:flex ape:relative ape:flex-col ape:justify-center ape:items-start", children: [jsxs(Flex, { className: "ape:w-full ape:h-[30px] ape:max-md:mb-[10px] ape:md:mb-0 ape:justify-between ape:md:justify-end", children: [jsx(Flex, { className: "ape:flex ape:md:hidden", children: jsx(BondModalMinTierHeader, { minTier: minTier }) }), jsx(Flex, { className: "ape:cursor-pointer", children: onDismiss ? (jsxs(Fragment, { children: [jsx(Flex, { className: "ape:mx-[25px]", onClick: onOpenSlippageModal, children: jsx(Cog, { width: isMobile ? '16px' : '20px' }) }), jsx(Flex, { onClick: handleClose, children: jsx(Close, { color: "text", width: isMobile ? '12px' : '18px' }) })] })) : (jsx(Flex, { className: "ape:py-[3px] ape:mt-[10px]", onClick: onOpenSlippageModal, children: jsx(Cog, { width: isMobile ? '16px' : '20px' }) })) })] }), jsxs(Flex, { className: "ape:w-full ape:relative", children: [jsxs(Flex, { className: "title-container bondicon ape:flex ape:flex-row ape:items-center ape:relative", children: [jsx(Flex, { style: MCTokenIconStyles[bondData.marketingCampaign] }), jsx(TokenImage, { symbol: tokenSymbol0, symbol2: tokenSymbol1, size: 50, chain: bondData.chainId })] }), jsxs(Flex, { className: "ape:flex ape:flex-col ape:pl-[10px] ape:md:pl-[20px] ape:text-[20px] ape:md:text-[24px] ape:font-bold", children: [tokenSymbol0, "-", tokenSymbol1, jsx(ListTag, { text: bondData?.tags?.[0] })] }), jsxs(Flex, { className: "title-container price-container ape:flex-col ape:pl-[10px] ape:md:pl-[20px]", children: [jsxs(Flex, { className: "price-container price ape:line-through ape:opacity-50 ape:font-normal ape:text-[12px] ape:md:text-[14px]", children: ["$", formatNumberSI(bondData.payoutTokenPrice, 2)] }), SDKConfig.useTiers &&
61
46
  bondData.billVersion === BillVersion.V4 &&
62
47
  (bondData?.trueBondPrices?.length ?? 0) > 1 ? (jsxs(Flex, { className: "ape:p-[3px_6px] ape:border ape:border-solid ape:border-[#9960C5] ape:rounded-normal ape:bg-transparent ape:relative ape:overflow-hidden", children: [jsx(Flex, { className: "ape:absolute ape:w-full ape:h-full ape:top-0 ape:left-0 ape:z-[1] ape:bg-[#9960C5] ape:opacity-20" }), jsxs(Flex, { className: "ape:w-full ape:z-[2] ape:items-center", children: [jsx("img", { src: `https://ape.bond/images/launch/mythical.png`, alt: "minTier", style: { width: '21px', height: '21px', marginRight: '3px', zIndex: 1 } }), jsx(Flex, { className: "ape:text-[12px] ape:md:text-[14px] ape:mr-[3px]", children: "Up to" }), jsxs(Flex, { className: clsx('ape:text-[12px] ape:md:text-[14px]', bonusWithFee && bonusWithFee > 0 ? 'ape:text-success' : 'ape:text-error'), children: ["$", discountEarnTokenPrice(bondData, true)] })] })] })) : (jsxs(Flex, { className: "ape:text-[24px] ape:font-bold", children: ["$", discountEarnTokenPrice(bondData)] }))] }), jsx(Flex, { className: "ape:hidden ape:md:flex ape:ml-[10px]", children: jsx(BondModalMinTierHeader, { minTier: minTier }) }), !hidePromotionUi && isBondEligibleForPromotion && promotion && (jsx(Flex, { className: "ape:absolute ape:right-0 ape:md:top-[20px] ape:bottom-[3px] ape:md:bottom-[unset]", children: jsx(TooltipBubble, { body: promotionDataMapping[promotion]?.tooltip, width: "205px", placement: "bottomRight", transformTip: isMobile ? 'translate(5%, 0%)' : 'translate(0%, 0%)', children: jsxs(Flex, { className: "ape:border ape:border-solid ape:border-primary-button ape:rounded-[10px] ape:md:rounded-[20px] ape:p-[4px_2px] ape:md:p-[4px_10px] ape:items-center ape:text-[12px] ape:font-normal ape:text-text-disabled-button ape:cursor-pointer", style: { boxShadow: '0px 0px 30px -10px rgba(222, 98, 243, 0.5)' }, children: [jsx(Flex, { className: "ape:mt-[-15px]", children: jsx(GiftBox, { width: 30, color: 'textDisabledButton' }) }), jsx(Flex, { className: "ape:hidden ape:md:flex ape:capitalize", children: promotion })] }) }) }))] })] }));
63
48
  };
@@ -1 +1 @@
1
- {"version":3,"file":"LpBondModalHeader.js","sources":["../../../../../src/adapters/evm/views/lpStaking/LpBondModalHeader.tsx"],"sourcesContent":["import React from 'react'\nimport clsx from 'clsx'\nimport TokenImage from '../../../../components/uikit-sdk/TokenImage'\nimport { discountEarnTokenPrice } from '../../../../utils/displayHelpers'\nimport useModal from '../../../../hooks/useModal'\nimport SlippageModal from '../../../../components/SlippageModal'\nimport { BondsData } from '../../../../types/bonds'\nimport ExpandedViewButton from './../../../../views/BuyBond/components/ExpandedViewButton'\nimport track from '../../../../utils/track'\nimport BondModalMinTierHeader from './../../../../views/BuyBond/components/BondModalMinTierHeader'\nimport useTierPoints from '../../../../state/tiers/useTierPoints'\nimport { promotionDataMapping, TIERS_WEIGHT } from '../../../../state/tiers/tiers'\nimport { BillVersion, LaunchBondTiers } from '@ape.swap/apeswap-lists'\nimport { useSDKConfig } from '../../../../state/useSDKConfig'\nimport { findHighestTrueBondPrice } from '../../../../utils/bondPriceHelpers'\nimport { MCTokenIconStyles } from '../../../../utils/campaignStyles'\nimport { useIsMobile } from '../../../../hooks/useIsMobile'\nimport Flex from '../../../../components/uikit-sdk/Flex'\nimport ListTag from '../../../../components/uikit-sdk/Tag/ListTag'\nimport { formatNumberSI } from '../../../../utils/formatNumber'\nimport TooltipBubble from '../../../../components/uikit-sdk/TooltipBubble'\nimport Cog from '../../../../components/uikit-sdk/Svg/Icons/Cog'\nimport Close from '../../../../components/uikit-sdk/Svg/Icons/Close'\nimport GiftBox from '../../../../components/uikit-sdk/Svg/Icons/GiftBox'\n\nconst LpBondModalHeader = ({\n bondData,\n onDismiss,\n hidePromotionUi = false,\n}: {\n bondData: BondsData\n onDismiss?: () => void\n hidePromotionUi?: boolean\n}) => {\n // Hooks\n const isMobile = useIsMobile()\n const SDKConfig = useSDKConfig()\n const { data: tierPointsState } = useTierPoints()\n const { promotion, eligibleChains } = tierPointsState || {}\n\n // Static Data\n const tokenSymbol0 = bondData.lpStakingConfig?.lpToken0.symbol\n const tokenSymbol1 = bondData.lpStakingConfig?.lpToken1.symbol\n\n const showProjectInfoButton = SDKConfig?.referenceId === 'apebond'\n const isBondEligibleForPromotion =\n !(bondData?.billType === 'lpStaking') && // lpStaking bonds are not eligible for promotions\n (eligibleChains === undefined || eligibleChains?.includes(bondData.chainId)) // if promotion comes with eligibleChains undefined means it should be used for every chain\n const minTier = bondData.minTier !== undefined ? bondData.minTier : null\n const bonusWithFee = findHighestTrueBondPrice(\n TIERS_WEIGHT[LaunchBondTiers.Legend],\n bondData?.trueBondPrices,\n )?.bonusWithFee\n\n // Handlers\n const handleClose = () => {\n if (typeof window !== 'undefined') {\n window.history.pushState({}, '', `/bonds`)\n }\n onDismiss?.()\n }\n const handleProjectViewNavigation = () => {\n window.location.href = `/bonds/${bondData?.contractAddress?.[bondData?.chainId]}/${bondData?.chainId}`\n track({\n event: 'projectInfoClick',\n chain: bondData.chainId,\n data: {\n cat: 'Modal',\n bond: bondData.earnToken.symbol,\n bondChain: bondData.chainId,\n },\n })\n }\n\n // Modals\n const [onOpenSlippageModal] = useModal(<SlippageModal chainId={bondData.chainId} />)\n\n return (\n <Flex className=\"modaltable-container title-container ape:w-full ape:flex ape:relative ape:flex-col ape:justify-center ape:items-start\">\n <Flex className=\"ape:w-full ape:h-[30px] ape:max-md:mb-[10px] ape:md:mb-0 ape:justify-between ape:md:justify-end\">\n <Flex className=\"ape:flex ape:md:hidden\">\n <BondModalMinTierHeader minTier={minTier} />\n </Flex>\n <Flex className=\"ape:cursor-pointer\">\n {onDismiss ? (\n <>\n {showProjectInfoButton && <ExpandedViewButton handleNavigation={handleProjectViewNavigation} />}\n <Flex className=\"ape:mx-[25px]\" onClick={onOpenSlippageModal}>\n <Cog width={isMobile ? '16px' : '20px'} />\n </Flex>\n <Flex onClick={handleClose}>\n <Close color=\"text\" width={isMobile ? '12px' : '18px'} />\n </Flex>\n </>\n ) : (\n <Flex className=\"ape:py-[3px] ape:mt-[10px]\" onClick={onOpenSlippageModal}>\n <Cog width={isMobile ? '16px' : '20px'} />\n </Flex>\n )}\n </Flex>\n </Flex>\n <Flex className=\"ape:w-full ape:relative\">\n <Flex className=\"title-container bondicon ape:flex ape:flex-row ape:items-center ape:relative\">\n <Flex style={MCTokenIconStyles[bondData.marketingCampaign!]} />\n <TokenImage symbol={tokenSymbol0} symbol2={tokenSymbol1} size={50} chain={bondData.chainId} />\n </Flex>\n <Flex className=\"ape:flex ape:flex-col ape:pl-[10px] ape:md:pl-[20px] ape:text-[20px] ape:md:text-[24px] ape:font-bold\">\n {tokenSymbol0}-{tokenSymbol1}\n <ListTag text={bondData?.tags?.[0]} />\n </Flex>\n <Flex className=\"title-container price-container ape:flex-col ape:pl-[10px] ape:md:pl-[20px]\">\n <Flex className=\"price-container price ape:line-through ape:opacity-50 ape:font-normal ape:text-[12px] ape:md:text-[14px]\">\n ${formatNumberSI(bondData.payoutTokenPrice, 2)}\n </Flex>\n {SDKConfig.useTiers &&\n bondData.billVersion === BillVersion.V4 &&\n (bondData?.trueBondPrices?.length ?? 0) > 1 ? (\n <Flex className=\"ape:p-[3px_6px] ape:border ape:border-solid ape:border-[#9960C5] ape:rounded-normal ape:bg-transparent ape:relative ape:overflow-hidden\">\n <Flex className=\"ape:absolute ape:w-full ape:h-full ape:top-0 ape:left-0 ape:z-[1] ape:bg-[#9960C5] ape:opacity-20\" />\n <Flex className=\"ape:w-full ape:z-[2] ape:items-center\">\n <img\n src={`https://ape.bond/images/launch/mythical.png`}\n alt=\"minTier\"\n style={{ width: '21px', height: '21px', marginRight: '3px', zIndex: 1 }}\n />\n <Flex className=\"ape:text-[12px] ape:md:text-[14px] ape:mr-[3px]\">Up to</Flex>\n <Flex\n className={clsx(\n 'ape:text-[12px] ape:md:text-[14px]',\n bonusWithFee && bonusWithFee > 0 ? 'ape:text-success' : 'ape:text-error',\n )}\n >\n ${discountEarnTokenPrice(bondData, true)}\n </Flex>\n </Flex>\n </Flex>\n ) : (\n <Flex className=\"ape:text-[24px] ape:font-bold\">${discountEarnTokenPrice(bondData)}</Flex>\n )}\n </Flex>\n <Flex className=\"ape:hidden ape:md:flex ape:ml-[10px]\">\n <BondModalMinTierHeader minTier={minTier} />\n </Flex>\n {!hidePromotionUi && isBondEligibleForPromotion && promotion && (\n <Flex className=\"ape:absolute ape:right-0 ape:md:top-[20px] ape:bottom-[3px] ape:md:bottom-[unset]\">\n <TooltipBubble\n body={promotionDataMapping[promotion]?.tooltip}\n width=\"205px\"\n placement=\"bottomRight\"\n transformTip={isMobile ? 'translate(5%, 0%)' : 'translate(0%, 0%)'}\n >\n <Flex\n className=\"ape:border ape:border-solid ape:border-primary-button ape:rounded-[10px] ape:md:rounded-[20px] ape:p-[4px_2px] ape:md:p-[4px_10px] ape:items-center ape:text-[12px] ape:font-normal ape:text-text-disabled-button ape:cursor-pointer\"\n style={{ boxShadow: '0px 0px 30px -10px rgba(222, 98, 243, 0.5)' }}\n >\n <Flex className=\"ape:mt-[-15px]\">\n <GiftBox width={30} color={'textDisabledButton'} />\n </Flex>\n <Flex className=\"ape:hidden ape:md:flex ape:capitalize\">{promotion}</Flex>\n </Flex>\n </TooltipBubble>\n </Flex>\n )}\n </Flex>\n </Flex>\n )\n}\n\nexport default LpBondModalHeader\n"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"LpBondModalHeader.js","sources":["../../../../../src/adapters/evm/views/lpStaking/LpBondModalHeader.tsx"],"sourcesContent":["import React from 'react'\nimport clsx from 'clsx'\nimport TokenImage from '../../../../components/uikit-sdk/TokenImage'\nimport { discountEarnTokenPrice } from '../../../../utils/displayHelpers'\nimport useModal from '../../../../hooks/useModal'\nimport SlippageModal from '../../../../components/SlippageModal'\nimport { BondsData } from '../../../../types/bonds'\nimport BondModalMinTierHeader from './../../../../views/BuyBond/components/BondModalMinTierHeader'\nimport useTierPoints from '../../../../state/tiers/useTierPoints'\nimport { promotionDataMapping, TIERS_WEIGHT } from '../../../../state/tiers/tiers'\nimport { BillVersion, LaunchBondTiers } from '@ape.swap/apeswap-lists'\nimport { useSDKConfig } from '../../../../state/useSDKConfig'\nimport { findHighestTrueBondPrice } from '../../../../utils/bondPriceHelpers'\nimport { MCTokenIconStyles } from '../../../../utils/campaignStyles'\nimport { useIsMobile } from '../../../../hooks/useIsMobile'\nimport Flex from '../../../../components/uikit-sdk/Flex'\nimport ListTag from '../../../../components/uikit-sdk/Tag/ListTag'\nimport { formatNumberSI } from '../../../../utils/formatNumber'\nimport TooltipBubble from '../../../../components/uikit-sdk/TooltipBubble'\nimport Cog from '../../../../components/uikit-sdk/Svg/Icons/Cog'\nimport Close from '../../../../components/uikit-sdk/Svg/Icons/Close'\nimport GiftBox from '../../../../components/uikit-sdk/Svg/Icons/GiftBox'\n\nconst LpBondModalHeader = ({\n bondData,\n onDismiss,\n hidePromotionUi = false,\n}: {\n bondData: BondsData\n onDismiss?: () => void\n hidePromotionUi?: boolean\n}) => {\n // Hooks\n const isMobile = useIsMobile()\n const SDKConfig = useSDKConfig()\n const { data: tierPointsState } = useTierPoints()\n const { promotion, eligibleChains } = tierPointsState || {}\n\n // Static Data\n const tokenSymbol0 = bondData.lpStakingConfig?.lpToken0.symbol\n const tokenSymbol1 = bondData.lpStakingConfig?.lpToken1.symbol\n\n const isBondEligibleForPromotion =\n !(bondData?.billType === 'lpStaking') && // lpStaking bonds are not eligible for promotions\n (eligibleChains === undefined || eligibleChains?.includes(bondData.chainId)) // if promotion comes with eligibleChains undefined means it should be used for every chain\n const minTier = bondData.minTier !== undefined ? bondData.minTier : null\n const bonusWithFee = findHighestTrueBondPrice(\n TIERS_WEIGHT[LaunchBondTiers.Legend],\n bondData?.trueBondPrices,\n )?.bonusWithFee\n\n // Handlers\n const handleClose = () => {\n if (typeof window !== 'undefined') {\n window.history.pushState({}, '', `/bonds`)\n }\n onDismiss?.()\n }\n\n // Modals\n const [onOpenSlippageModal] = useModal(<SlippageModal chainId={bondData.chainId} />)\n\n return (\n <Flex className=\"modaltable-container title-container ape:w-full ape:flex ape:relative ape:flex-col ape:justify-center ape:items-start\">\n <Flex className=\"ape:w-full ape:h-[30px] ape:max-md:mb-[10px] ape:md:mb-0 ape:justify-between ape:md:justify-end\">\n <Flex className=\"ape:flex ape:md:hidden\">\n <BondModalMinTierHeader minTier={minTier} />\n </Flex>\n <Flex className=\"ape:cursor-pointer\">\n {onDismiss ? (\n <>\n <Flex className=\"ape:mx-[25px]\" onClick={onOpenSlippageModal}>\n <Cog width={isMobile ? '16px' : '20px'} />\n </Flex>\n <Flex onClick={handleClose}>\n <Close color=\"text\" width={isMobile ? '12px' : '18px'} />\n </Flex>\n </>\n ) : (\n <Flex className=\"ape:py-[3px] ape:mt-[10px]\" onClick={onOpenSlippageModal}>\n <Cog width={isMobile ? '16px' : '20px'} />\n </Flex>\n )}\n </Flex>\n </Flex>\n <Flex className=\"ape:w-full ape:relative\">\n <Flex className=\"title-container bondicon ape:flex ape:flex-row ape:items-center ape:relative\">\n <Flex style={MCTokenIconStyles[bondData.marketingCampaign!]} />\n <TokenImage symbol={tokenSymbol0} symbol2={tokenSymbol1} size={50} chain={bondData.chainId} />\n </Flex>\n <Flex className=\"ape:flex ape:flex-col ape:pl-[10px] ape:md:pl-[20px] ape:text-[20px] ape:md:text-[24px] ape:font-bold\">\n {tokenSymbol0}-{tokenSymbol1}\n <ListTag text={bondData?.tags?.[0]} />\n </Flex>\n <Flex className=\"title-container price-container ape:flex-col ape:pl-[10px] ape:md:pl-[20px]\">\n <Flex className=\"price-container price ape:line-through ape:opacity-50 ape:font-normal ape:text-[12px] ape:md:text-[14px]\">\n ${formatNumberSI(bondData.payoutTokenPrice, 2)}\n </Flex>\n {SDKConfig.useTiers &&\n bondData.billVersion === BillVersion.V4 &&\n (bondData?.trueBondPrices?.length ?? 0) > 1 ? (\n <Flex className=\"ape:p-[3px_6px] ape:border ape:border-solid ape:border-[#9960C5] ape:rounded-normal ape:bg-transparent ape:relative ape:overflow-hidden\">\n <Flex className=\"ape:absolute ape:w-full ape:h-full ape:top-0 ape:left-0 ape:z-[1] ape:bg-[#9960C5] ape:opacity-20\" />\n <Flex className=\"ape:w-full ape:z-[2] ape:items-center\">\n <img\n src={`https://ape.bond/images/launch/mythical.png`}\n alt=\"minTier\"\n style={{ width: '21px', height: '21px', marginRight: '3px', zIndex: 1 }}\n />\n <Flex className=\"ape:text-[12px] ape:md:text-[14px] ape:mr-[3px]\">Up to</Flex>\n <Flex\n className={clsx(\n 'ape:text-[12px] ape:md:text-[14px]',\n bonusWithFee && bonusWithFee > 0 ? 'ape:text-success' : 'ape:text-error',\n )}\n >\n ${discountEarnTokenPrice(bondData, true)}\n </Flex>\n </Flex>\n </Flex>\n ) : (\n <Flex className=\"ape:text-[24px] ape:font-bold\">${discountEarnTokenPrice(bondData)}</Flex>\n )}\n </Flex>\n <Flex className=\"ape:hidden ape:md:flex ape:ml-[10px]\">\n <BondModalMinTierHeader minTier={minTier} />\n </Flex>\n {!hidePromotionUi && isBondEligibleForPromotion && promotion && (\n <Flex className=\"ape:absolute ape:right-0 ape:md:top-[20px] ape:bottom-[3px] ape:md:bottom-[unset]\">\n <TooltipBubble\n body={promotionDataMapping[promotion]?.tooltip}\n width=\"205px\"\n placement=\"bottomRight\"\n transformTip={isMobile ? 'translate(5%, 0%)' : 'translate(0%, 0%)'}\n >\n <Flex\n className=\"ape:border ape:border-solid ape:border-primary-button ape:rounded-[10px] ape:md:rounded-[20px] ape:p-[4px_2px] ape:md:p-[4px_10px] ape:items-center ape:text-[12px] ape:font-normal ape:text-text-disabled-button ape:cursor-pointer\"\n style={{ boxShadow: '0px 0px 30px -10px rgba(222, 98, 243, 0.5)' }}\n >\n <Flex className=\"ape:mt-[-15px]\">\n <GiftBox width={30} color={'textDisabledButton'} />\n </Flex>\n <Flex className=\"ape:hidden ape:md:flex ape:capitalize\">{promotion}</Flex>\n </Flex>\n </TooltipBubble>\n </Flex>\n )}\n </Flex>\n </Flex>\n )\n}\n\nexport default LpBondModalHeader\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
@@ -33,7 +33,7 @@ const LpStakingEstimations = ({ inputValue, inputTokenPrice, bondData, youSpendS
33
33
  const token0Amount = getBalanceNumber(lpQuote?.token0?.fromAmountEstimate ?? '0', lpToken0?.decimals?.[bondData.chainId] ?? 18);
34
34
  const token1Amount = getBalanceNumber(lpQuote?.token1?.fromAmountEstimate ?? '0', lpToken1?.decimals?.[bondData.chainId] ?? 18);
35
35
  const positionUSD = token0Price > 0 && token1Price > 0 ? token0Amount * token0Price + token1Amount * token1Price : 0;
36
- return (jsxs(Flex, { className: "modaltable-container text-container ape:w-full ape:flex ape:relative ape:flex-col ape:justify-center ape:text-[12px]", children: [jsxs(Flex, { className: "text-container row ape:pt-[2px] ape:pb-[2px] ape:flex ape:flex-row ape:justify-between", children: [jsx(Flex, { className: "row-container spend ape:flex ape:font-normal ape:items-center", children: "You Spend:" }), jsx(Flex, { className: "row-container spend-val ape:flex ape:font-normal ape:items-center", children: youSpendString })] }), jsxs(Flex, { className: "text-container row ape:pt-[2px] ape:pb-[2px] ape:flex ape:flex-row ape:justify-between", children: [jsxs(Flex, { className: "row-container premium ape:flex ape:font-normal ape:items-center", children: ["Bonus (unlocks after ", getTimePeriods(bondData?.vestingTerm, true).days, " days):"] }), fetchingZapQuote ? (jsx(Dots, {})) : zapError ? ('-') : isBelowMinimum ? (jsx(Flex, { className: "row-container premium-val ape:flex ape:font-normal ape:items-center", children: "No bonus at this size" })) : (jsxs(Flex, { className: "row-container premium-val premium-positive ape:flex ape:font-normal ape:items-center ape:gap-[5px]", children: [formatNumberSI(bonusAmount, 2), " ", bonusToken?.symbol, bonusUSD > 0 && jsxs("span", { className: "ape:opacity-60", children: ["($", formatNumberSI(bonusUSD, 2), ")"] })] }))] }), jsxs(Flex, { className: "ape:border ape:border-solid ape:border-[#9960C5] ape:rounded-normal ape:mx-[-5px] ape:px-[5px] ape:py-[2px] ape:my-[2px] ape:relative", children: [jsx(Flex, { className: "ape:absolute ape:w-full ape:h-full ape:top-0 ape:left-0 ape:z-0 ape:bg-[#9960C5] ape:opacity-20 ape:rounded-normal" }), jsxs(Flex, { className: "ape:w-full ape:justify-between ape:h-[21px]", children: [jsx(Flex, { className: "row-container get ape:flex ape:font-normal ape:items-center ape:z-[1]", children: "You Get:" }), fetchingZapQuote ? (jsx(Dots, {})) : zapError ? ('-') : (jsxs(Flex, { className: "row-container get-val ape:flex ape:font-normal ape:items-center ape:z-[1]", children: [formatNumberSI(token0Amount, 2), " ", lpToken0?.symbol, " - ", formatNumberSI(token1Amount, 2), ' ', lpToken1?.symbol, positionUSD > 0 && ` ($${formatNumberSI(positionUSD, 2)})`] }))] })] }), jsx(Flex, { className: "ape:mx-[-5px] ape:px-[5px] ape:py-[2px] ape:my-[2px] ape:relative", children: jsxs(Flex, { className: "ape:w-full ape:justify-between ape:h-[21px]", children: [jsxs(Flex, { className: "row-container get ape:flex ape:font-normal ape:items-center", children: ["Dual Rewards:", jsx(TooltipBubble, { className: "tooltip-bubble", body: jsx(Flex, { children: "Pool rewards are accrued immediately after purchase after the end of each epoch in Real Finance." }), width: "230px", placement: "bottomLeft", transformTip: "translate(-5%, 0%)", children: jsx(Flex, { className: "row-container premium-icon ape:flex ape:font-normal ape:items-start ape:pl-[5px] ape:cursor-pointer", children: jsx(QuestionCircle, { width: "12px" }) }) })] }), jsx(Flex, { className: "row-container get ape:flex ape:font-normal ape:items-center ", children: "Payable in $ASSET & $ORVT" })] }) })] }));
36
+ return (jsxs(Flex, { className: "modaltable-container text-container ape:w-full ape:flex ape:relative ape:flex-col ape:justify-center ape:text-[12px]", children: [jsxs(Flex, { className: "text-container row ape:pt-[2px] ape:pb-[2px] ape:flex ape:flex-row ape:justify-between", children: [jsx(Flex, { className: "row-container spend ape:flex ape:font-normal ape:items-center", children: "You Spend:" }), jsx(Flex, { className: "row-container spend-val ape:flex ape:font-normal ape:items-center", children: youSpendString })] }), jsxs(Flex, { className: "text-container row ape:pt-[2px] ape:pb-[2px] ape:flex ape:flex-row ape:justify-between", children: [jsxs(Flex, { className: "row-container premium ape:flex ape:font-normal ape:items-center", children: ["Bonus (unlocks after ", getTimePeriods(bondData?.vestingTerm, true).days, " days):"] }), fetchingZapQuote ? (jsx(Dots, {})) : zapError ? ('-') : isBelowMinimum ? (jsx(Flex, { className: "row-container premium-val ape:flex ape:font-normal ape:items-center", children: "No bonus at this size" })) : (jsxs(Flex, { className: "row-container premium-val premium-positive ape:flex ape:font-normal ape:items-center ape:gap-[5px]", children: [formatNumberSI(bonusAmount, 2), " ", bonusToken?.symbol, bonusUSD > 0 && jsxs("span", { className: "ape:opacity-60", children: ["($", formatNumberSI(bonusUSD, 2), ")"] })] }))] }), jsxs(Flex, { className: "ape:border ape:border-solid ape:border-[#9960C5] ape:rounded-normal ape:mx-[-5px] ape:px-[5px] ape:py-[2px] ape:my-[2px] ape:relative", children: [jsx(Flex, { className: "ape:absolute ape:w-full ape:h-full ape:top-0 ape:left-0 ape:z-0 ape:bg-[#9960C5] ape:opacity-20 ape:rounded-normal" }), jsxs(Flex, { className: "ape:w-full ape:justify-between ape:h-[21px]", children: [jsx(Flex, { className: "row-container get ape:flex ape:font-normal ape:items-center ape:z-[1]", children: "You Get:" }), fetchingZapQuote ? (jsx(Dots, {})) : zapError ? ('-') : (jsxs(Flex, { className: "row-container get-val ape:flex ape:font-normal ape:items-center ape:z-[1]", children: [formatNumberSI(token0Amount, 2), " ", lpToken0?.symbol, " - ", formatNumberSI(token1Amount, 2), ' ', lpToken1?.symbol, positionUSD > 0 && ` ($${formatNumberSI(positionUSD, 2)})`] }))] })] }), jsx(Flex, { className: "ape:mx-[-5px] ape:px-[5px] ape:py-[2px] ape:my-[2px] ape:relative", children: jsxs(Flex, { className: "ape:w-full ape:justify-between ape:h-[21px]", children: [jsxs(Flex, { className: "row-container get ape:flex ape:font-normal ape:items-center", children: ["Dual Rewards:", jsx(TooltipBubble, { className: "tooltip-bubble", body: jsx(Flex, { children: "Pool rewards in $ASSET and $OVTR are accrued each epoch on Real Finance, by the position's share of all staked positions, and only while it's in range." }), width: "230px", placement: "bottomLeft", transformTip: "translate(-5%, 0%)", children: jsx(Flex, { className: "row-container premium-icon ape:flex ape:font-normal ape:items-start ape:pl-[5px] ape:cursor-pointer", children: jsx(QuestionCircle, { width: "12px" }) }) })] }), jsx(Flex, { className: "row-container get ape:flex ape:font-normal ape:items-center ", children: "Payable in $ASSET & $OVTR" })] }) })] }));
37
37
  };
38
38
 
39
39
  export { LpStakingEstimations as default };
@@ -1 +1 @@
1
- {"version":3,"file":"LpStakingEstimations.js","sources":["../../../../../src/adapters/evm/views/lpStaking/LpStakingEstimations.tsx"],"sourcesContent":["import React from 'react'\nimport { getBalanceNumber } from '../../../../utils/getBalanceNumber'\nimport useCurrencyPrice from '../../../../state/price/useCurrencyPrice'\nimport { BondsData } from '../../../../types/bonds'\nimport { formatNumberSI } from '../../../../utils/formatNumber'\nimport Flex from '../../../../components/uikit-sdk/Flex'\nimport TooltipBubble from '../../../../components/uikit-sdk/TooltipBubble'\nimport LoadingDots from '../../../../components/uikit-sdk/LoadingDots'\nimport QuestionCircle from '../../../../components/uikit-sdk/Svg/Icons/QuestionCircle'\nimport { getTimePeriods } from '../../../../utils/getTimePeriods'\n\nconst LpStakingEstimations = ({\n inputValue,\n inputTokenPrice,\n bondData,\n youSpendString,\n fetchingZapQuote,\n zapError,\n protocolQuote,\n lpQuote,\n}: {\n inputValue?: string // input amount selected on the UI\n inputTokenPrice?: number\n bondData: BondsData\n youSpendString?: string\n isZap?: boolean\n fetchingZapQuote?: boolean\n zapError?: boolean\n // The zap quote's preview of REAL's bonus, both in bonus token wei\n protocolQuote?: { positionValue?: string; bonusAmount?: string }\n // The zap quote's estimate of each pool token going into the position, in wei\n lpQuote?: { token0?: { fromAmountEstimate?: string }; token1?: { fromAmountEstimate?: string } }\n}) => {\n // Estimations\n // REAL's adapter previews the bonus on the position the zap mints: bonusBps of its value, or 0 below the campaign's\n // minimum. Priced with the bonus token's price; without one, it's worth that share of what the user spends (minus\n // the zap's fees)\n const bonusToken = bondData.lpStakingConfig?.bonusRewardToken\n const bonusTokenDecimals = bonusToken?.decimals?.[bondData.chainId] ?? 18\n const bonusTokenPrice = useCurrencyPrice(bonusToken, bondData.chainId)?.price ?? 0\n const bonusAmount = getBalanceNumber(protocolQuote?.bonusAmount ?? '0', bonusTokenDecimals)\n const positionValue = Number(protocolQuote?.positionValue ?? '0')\n const spendUSD = parseFloat(inputValue || '0') * (inputTokenPrice ?? 0)\n const bonusUSD =\n bonusTokenPrice > 0\n ? bonusAmount * bonusTokenPrice\n : positionValue > 0\n ? (spendUSD * Number(protocolQuote?.bonusAmount ?? '0')) / positionValue\n : 0\n const isBelowMinimum = !!protocolQuote && bonusAmount === 0\n\n // The position the zap mints: both pool tokens, priced only when both have a price (half of it would mislead)\n const lpToken0 = bondData.lpStakingConfig?.lpToken0\n const lpToken1 = bondData.lpStakingConfig?.lpToken1\n const token0Price = useCurrencyPrice(lpToken0, bondData.chainId)?.price ?? 0\n const token1Price = useCurrencyPrice(lpToken1, bondData.chainId)?.price ?? 0\n const token0Amount = getBalanceNumber(\n lpQuote?.token0?.fromAmountEstimate ?? '0',\n lpToken0?.decimals?.[bondData.chainId] ?? 18,\n )\n const token1Amount = getBalanceNumber(\n lpQuote?.token1?.fromAmountEstimate ?? '0',\n lpToken1?.decimals?.[bondData.chainId] ?? 18,\n )\n const positionUSD = token0Price > 0 && token1Price > 0 ? token0Amount * token0Price + token1Amount * token1Price : 0\n\n return (\n <Flex className=\"modaltable-container text-container ape:w-full ape:flex ape:relative ape:flex-col ape:justify-center ape:text-[12px]\">\n {/* ----------- YOU SPEND ROW -----------*/}\n\n <Flex className=\"text-container row ape:pt-[2px] ape:pb-[2px] ape:flex ape:flex-row ape:justify-between\">\n <Flex className=\"row-container spend ape:flex ape:font-normal ape:items-center\">You Spend:</Flex>\n <Flex className=\"row-container spend-val ape:flex ape:font-normal ape:items-center\">{youSpendString}</Flex>\n </Flex>\n\n {/* ----------- BONUS ROW -----------*/}\n\n <Flex className=\"text-container row ape:pt-[2px] ape:pb-[2px] ape:flex ape:flex-row ape:justify-between\">\n <Flex className=\"row-container premium ape:flex ape:font-normal ape:items-center\">\n Bonus (unlocks after {getTimePeriods(bondData?.vestingTerm, true).days} days):\n </Flex>\n {/* LP staking purchases always go through the zap, so the bonus row follows its quote */}\n {fetchingZapQuote ? (\n <LoadingDots />\n ) : zapError ? (\n '-'\n ) : isBelowMinimum ? (\n <Flex className=\"row-container premium-val ape:flex ape:font-normal ape:items-center\">\n No bonus at this size\n </Flex>\n ) : (\n <Flex className=\"row-container premium-val premium-positive ape:flex ape:font-normal ape:items-center ape:gap-[5px]\">\n {formatNumberSI(bonusAmount, 2)} {bonusToken?.symbol}\n {bonusUSD > 0 && <span className=\"ape:opacity-60\">(${formatNumberSI(bonusUSD, 2)})</span>}\n </Flex>\n )}\n </Flex>\n\n {/* ----------- YOU GET ROW -----------*/}\n\n <Flex className=\"ape:border ape:border-solid ape:border-[#9960C5] ape:rounded-normal ape:mx-[-5px] ape:px-[5px] ape:py-[2px] ape:my-[2px] ape:relative\">\n <Flex className=\"ape:absolute ape:w-full ape:h-full ape:top-0 ape:left-0 ape:z-0 ape:bg-[#9960C5] ape:opacity-20 ape:rounded-normal\" />\n <Flex className=\"ape:w-full ape:justify-between ape:h-[21px]\">\n <Flex className=\"row-container get ape:flex ape:font-normal ape:items-center ape:z-[1]\">You Get:</Flex>\n {fetchingZapQuote ? (\n <LoadingDots />\n ) : zapError ? (\n '-'\n ) : (\n <Flex className=\"row-container get-val ape:flex ape:font-normal ape:items-center ape:z-[1]\">\n {formatNumberSI(token0Amount, 2)} {lpToken0?.symbol} - {formatNumberSI(token1Amount, 2)}{' '}\n {lpToken1?.symbol}\n {positionUSD > 0 && ` ($${formatNumberSI(positionUSD, 2)})`}\n </Flex>\n )}\n </Flex>\n </Flex>\n\n {/* ----------- ADITIONAL REWARDS -----------*/}\n\n <Flex className=\"ape:mx-[-5px] ape:px-[5px] ape:py-[2px] ape:my-[2px] ape:relative\">\n <Flex className=\"ape:w-full ape:justify-between ape:h-[21px]\">\n <Flex className=\"row-container get ape:flex ape:font-normal ape:items-center\">\n Dual Rewards:\n <TooltipBubble\n className=\"tooltip-bubble\"\n body={\n <Flex>\n Pool rewards are accrued immediately after purchase after the end of each epoch in Real Finance.\n </Flex>\n }\n width=\"230px\"\n placement=\"bottomLeft\"\n transformTip=\"translate(-5%, 0%)\"\n >\n <Flex className=\"row-container premium-icon ape:flex ape:font-normal ape:items-start ape:pl-[5px] ape:cursor-pointer\">\n <QuestionCircle width=\"12px\" />\n </Flex>\n </TooltipBubble>\n </Flex>\n <Flex className=\"row-container get ape:flex ape:font-normal ape:items-center \">\n Payable in $ASSET & $ORVT\n </Flex>\n </Flex>\n </Flex>\n </Flex>\n )\n}\n\nexport default LpStakingEstimations\n"],"names":["_jsxs","_jsx","LoadingDots"],"mappings":"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"}
1
+ {"version":3,"file":"LpStakingEstimations.js","sources":["../../../../../src/adapters/evm/views/lpStaking/LpStakingEstimations.tsx"],"sourcesContent":["import React from 'react'\nimport { getBalanceNumber } from '../../../../utils/getBalanceNumber'\nimport useCurrencyPrice from '../../../../state/price/useCurrencyPrice'\nimport { BondsData } from '../../../../types/bonds'\nimport { formatNumberSI } from '../../../../utils/formatNumber'\nimport Flex from '../../../../components/uikit-sdk/Flex'\nimport TooltipBubble from '../../../../components/uikit-sdk/TooltipBubble'\nimport LoadingDots from '../../../../components/uikit-sdk/LoadingDots'\nimport QuestionCircle from '../../../../components/uikit-sdk/Svg/Icons/QuestionCircle'\nimport { getTimePeriods } from '../../../../utils/getTimePeriods'\n\nconst LpStakingEstimations = ({\n inputValue,\n inputTokenPrice,\n bondData,\n youSpendString,\n fetchingZapQuote,\n zapError,\n protocolQuote,\n lpQuote,\n}: {\n inputValue?: string // input amount selected on the UI\n inputTokenPrice?: number\n bondData: BondsData\n youSpendString?: string\n isZap?: boolean\n fetchingZapQuote?: boolean\n zapError?: boolean\n // The zap quote's preview of REAL's bonus, both in bonus token wei\n protocolQuote?: { positionValue?: string; bonusAmount?: string }\n // The zap quote's estimate of each pool token going into the position, in wei\n lpQuote?: { token0?: { fromAmountEstimate?: string }; token1?: { fromAmountEstimate?: string } }\n}) => {\n // Estimations\n // REAL's adapter previews the bonus on the position the zap mints: bonusBps of its value, or 0 below the campaign's\n // minimum. Priced with the bonus token's price; without one, it's worth that share of what the user spends (minus\n // the zap's fees)\n const bonusToken = bondData.lpStakingConfig?.bonusRewardToken\n const bonusTokenDecimals = bonusToken?.decimals?.[bondData.chainId] ?? 18\n const bonusTokenPrice = useCurrencyPrice(bonusToken, bondData.chainId)?.price ?? 0\n const bonusAmount = getBalanceNumber(protocolQuote?.bonusAmount ?? '0', bonusTokenDecimals)\n const positionValue = Number(protocolQuote?.positionValue ?? '0')\n const spendUSD = parseFloat(inputValue || '0') * (inputTokenPrice ?? 0)\n const bonusUSD =\n bonusTokenPrice > 0\n ? bonusAmount * bonusTokenPrice\n : positionValue > 0\n ? (spendUSD * Number(protocolQuote?.bonusAmount ?? '0')) / positionValue\n : 0\n const isBelowMinimum = !!protocolQuote && bonusAmount === 0\n\n // The position the zap mints: both pool tokens, priced only when both have a price (half of it would mislead)\n const lpToken0 = bondData.lpStakingConfig?.lpToken0\n const lpToken1 = bondData.lpStakingConfig?.lpToken1\n const token0Price = useCurrencyPrice(lpToken0, bondData.chainId)?.price ?? 0\n const token1Price = useCurrencyPrice(lpToken1, bondData.chainId)?.price ?? 0\n const token0Amount = getBalanceNumber(\n lpQuote?.token0?.fromAmountEstimate ?? '0',\n lpToken0?.decimals?.[bondData.chainId] ?? 18,\n )\n const token1Amount = getBalanceNumber(\n lpQuote?.token1?.fromAmountEstimate ?? '0',\n lpToken1?.decimals?.[bondData.chainId] ?? 18,\n )\n const positionUSD = token0Price > 0 && token1Price > 0 ? token0Amount * token0Price + token1Amount * token1Price : 0\n\n return (\n <Flex className=\"modaltable-container text-container ape:w-full ape:flex ape:relative ape:flex-col ape:justify-center ape:text-[12px]\">\n {/* ----------- YOU SPEND ROW -----------*/}\n\n <Flex className=\"text-container row ape:pt-[2px] ape:pb-[2px] ape:flex ape:flex-row ape:justify-between\">\n <Flex className=\"row-container spend ape:flex ape:font-normal ape:items-center\">You Spend:</Flex>\n <Flex className=\"row-container spend-val ape:flex ape:font-normal ape:items-center\">{youSpendString}</Flex>\n </Flex>\n\n {/* ----------- BONUS ROW -----------*/}\n\n <Flex className=\"text-container row ape:pt-[2px] ape:pb-[2px] ape:flex ape:flex-row ape:justify-between\">\n <Flex className=\"row-container premium ape:flex ape:font-normal ape:items-center\">\n Bonus (unlocks after {getTimePeriods(bondData?.vestingTerm, true).days} days):\n </Flex>\n {/* LP staking purchases always go through the zap, so the bonus row follows its quote */}\n {fetchingZapQuote ? (\n <LoadingDots />\n ) : zapError ? (\n '-'\n ) : isBelowMinimum ? (\n <Flex className=\"row-container premium-val ape:flex ape:font-normal ape:items-center\">\n No bonus at this size\n </Flex>\n ) : (\n <Flex className=\"row-container premium-val premium-positive ape:flex ape:font-normal ape:items-center ape:gap-[5px]\">\n {formatNumberSI(bonusAmount, 2)} {bonusToken?.symbol}\n {bonusUSD > 0 && <span className=\"ape:opacity-60\">(${formatNumberSI(bonusUSD, 2)})</span>}\n </Flex>\n )}\n </Flex>\n\n {/* ----------- YOU GET ROW -----------*/}\n\n <Flex className=\"ape:border ape:border-solid ape:border-[#9960C5] ape:rounded-normal ape:mx-[-5px] ape:px-[5px] ape:py-[2px] ape:my-[2px] ape:relative\">\n <Flex className=\"ape:absolute ape:w-full ape:h-full ape:top-0 ape:left-0 ape:z-0 ape:bg-[#9960C5] ape:opacity-20 ape:rounded-normal\" />\n <Flex className=\"ape:w-full ape:justify-between ape:h-[21px]\">\n <Flex className=\"row-container get ape:flex ape:font-normal ape:items-center ape:z-[1]\">You Get:</Flex>\n {fetchingZapQuote ? (\n <LoadingDots />\n ) : zapError ? (\n '-'\n ) : (\n <Flex className=\"row-container get-val ape:flex ape:font-normal ape:items-center ape:z-[1]\">\n {formatNumberSI(token0Amount, 2)} {lpToken0?.symbol} - {formatNumberSI(token1Amount, 2)}{' '}\n {lpToken1?.symbol}\n {positionUSD > 0 && ` ($${formatNumberSI(positionUSD, 2)})`}\n </Flex>\n )}\n </Flex>\n </Flex>\n\n {/* ----------- ADITIONAL REWARDS -----------*/}\n\n <Flex className=\"ape:mx-[-5px] ape:px-[5px] ape:py-[2px] ape:my-[2px] ape:relative\">\n <Flex className=\"ape:w-full ape:justify-between ape:h-[21px]\">\n <Flex className=\"row-container get ape:flex ape:font-normal ape:items-center\">\n Dual Rewards:\n <TooltipBubble\n className=\"tooltip-bubble\"\n body={\n <Flex>\n Pool rewards in $ASSET and $OVTR are accrued each epoch on Real Finance, by the position&apos;s share\n of all staked positions, and only while it&apos;s in range.\n </Flex>\n }\n width=\"230px\"\n placement=\"bottomLeft\"\n transformTip=\"translate(-5%, 0%)\"\n >\n <Flex className=\"row-container premium-icon ape:flex ape:font-normal ape:items-start ape:pl-[5px] ape:cursor-pointer\">\n <QuestionCircle width=\"12px\" />\n </Flex>\n </TooltipBubble>\n </Flex>\n <Flex className=\"row-container get ape:flex ape:font-normal ape:items-center \">\n Payable in $ASSET & $OVTR\n </Flex>\n </Flex>\n </Flex>\n </Flex>\n )\n}\n\nexport default LpStakingEstimations\n"],"names":["_jsxs","_jsx","LoadingDots"],"mappings":"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"}
@@ -67,7 +67,7 @@ const YourLpStakingBondModal = ({ userBill: userBillProp, lostProfit, onDismiss,
67
67
  : cliffPeriods.hours > 0
68
68
  ? `${cliffPeriods.hours} hours`
69
69
  : `${cliffPeriods.minutes} minutes`;
70
- return (jsx(Modal, { className: clsx('ape:w-[480px] ape:[overflow-y:unset]! ape:p-0! ape:top-[56%] ape:overflow-x-visible', showNFTImg ? 'ape:bg-transparent!' : 'ape:bg-white2'), children: jsxs(Flex, { className: clsx('ape:flex-col ape:rounded-normal ape:relative ape:p-[20px]', showNFTImg ? 'ape:bg-transparent!' : 'ape:bg-white2'), children: [jsx(NftImage, { userBill: userBill, showNFTImg: showNFTImg, setShowNFTImg: setShowNFTImg }), !showNFTImg && (jsxs(Flex, { className: "ape:flex-col", children: [jsx(YourLpBondModalHeader, { userBill: userBill, onDismiss: onDismiss }), jsxs(Flex, { className: "ape:mt-[10px] ape:flex-col ape:gap-[10px]", children: [jsxs(Flex, { className: "ape:w-full ape:gap-[15px] ape:relative", children: [jsxs(Flex, { className: "ape:bg-white3 ape:rounded-normal ape:flex-col ape:md:flex-row ape:justify-center ape:md:justify-between ape:gap-[4px] ape:md:gap-0 ape:p-[10px] ape:w-1/2 ape:items-center ape:text-[14px]", children: [jsx(Flex, { children: "Deposit" }), isLoading ? (jsx(ValueSkeleton, { width: "60px" })) : depositUSD ? (jsxs(Flex, { children: ["$", formatNumberSI(depositUSD)] })) : (jsxs(Flex, { className: "ape:items-center ape:gap-[5px]", children: ["Indexing...", jsx(TooltipBubble, { className: "tooltip-bubble", body: jsx(Flex, { children: "Our services are indexing the tx and deposit amount will be calculated shortly" }), width: "230px", placement: "bottomLeft", transformTip: "translate(-5%, 0%)", children: jsx(Flex, { className: "block-header icon ape:text-white ape:font-normal ape:text-[12px]", children: jsx(QuestionCircle, { width: "12px" }) }) })] }))] }), jsx(Flex, { className: "ape:absolute ape:top-1/2 ape:left-1/2 ape:-translate-y-1/2 ape:-translate-x-1/2", children: jsx(Arrow, { direction: "right", width: '5px' }) }), jsxs(Flex, { className: "ape:bg-white3 ape:rounded-normal ape:flex-col ape:md:flex-row ape:justify-center ape:md:justify-between ape:gap-[4px] ape:md:gap-0 ape:p-[10px] ape:w-1/2 ape:items-center ape:text-[14px]", children: [jsx(Flex, { children: "Staked" }), jsxs(Flex, { className: "ape:flex-col ape:gap-[4px]", children: [isLoading && (jsxs(Fragment, { children: [jsx(ValueSkeleton, { width: "100px" }), jsx(ValueSkeleton, { width: "100px" })] })), stakedTokens.map((token) => (jsxs(Flex, { className: "ape:items-center ape:justify-center ape:md:justify-end ape:gap-[5px]", children: [jsxs(Flex, { className: "ape:text-[12px]", children: [formatNumberSI(token.amount), " ", token.symbol] }), jsxs(Flex, { className: "ape:text-[10px] ape:font-normal ape:opacity-60", children: ["($", formatNumberSI(token.amountUsd), ")"] })] }, token.address)))] })] })] }), lostProfit && (jsxs(Flex, { className: "ape:bg-white3 ape:rounded-normal ape:w-full ape:p-[10px] ape:justify-between", children: [jsx(Flex, { className: "ape:w-1/5", children: jsx("img", { src: `https://ape.bond/images/launch/mythical.png`, alt: "mythical", style: { width: '90px', height: '90px' } }) }), jsxs(Flex, { className: "ape:w-[75%] ape:flex-col ape:gap-[3px]", children: [jsxs(Flex, { children: ["You missed a", ' ', jsxs(Flex, { className: "ape:px-[3px]", style: { color: 'var(--ape-color-success)' }, children: ["$", lostProfit] }), ' ', "bonus"] }), jsx(Flex, { className: "ape:text-[12px] ape:font-normal", style: { lineHeight: '16px' }, children: "Holding an Ape Tier would\u2019ve gotten you an extra 5% bonus on this purchase and all future ones." }), jsx(Button, { variant: "secondary", className: "ape:w-full ape:text-[14px]! ape:h-[30px] ape:font-semibold", onClick: () => window.open('https://ape.bond/true-yield', '_blank'), children: "Upgrade Your Tier" })] })] })), jsxs(Flex, { className: "ape:flex-col ape:text-[12px] ape:font-normal", children: [jsxs(Flex, { className: "ape:w-full ape:justify-between ape:items-center ape:p-[4px_10px] ape:bg-white3 ape:h-[26px] ape:rounded-[10px_10px_0px_0px]", children: [jsxs(Flex, { className: "ape:items-center ape:gap-[5px]", children: [jsx(Flex, { className: "ape:opacity-60", children: "Bonus Reward" }), jsx(TooltipBubble, { className: "tooltip-bubble", body: jsx(Flex, { children: `Your Bonus Reward unlocks ${cliffLength} after your purchase. Unstaking before it unlocks forfeits the bonus. Once unlocked, you can claim it on REAL's site.` }), width: "230px", placement: "bottomLeft", transformTip: "translate(-5%, 0%)", children: jsx(Flex, { className: "block-header icon ape:text-white ape:font-normal ape:text-[12px]", children: jsx(QuestionCircle, { width: "12px" }) }) })] }), isLoading ? (jsx(ValueSkeleton, { width: "90px" })) : (jsxs(Flex, { className: "ape:items-center", children: [jsxs(Text, { weight: 700, className: "ape:ml-[10px]", size: "12px", children: [formatNumberSI(pending(userBill) + claimable(userBill), 2), " ", payoutTokenSymbol] }), jsxs(Text, { weight: 400, className: "ape:ml-[5px] ape:opacity-60 ape:text-[10px]!", children: ["($", formatNumberSI(pendingUSD(userBill) + claimableUSD(userBill)), ")"] })] }))] }), jsxs(Flex, { className: "ape:w-full ape:justify-between ape:items-center ape:p-[4px_10px] ape:bg-white4 ape:h-[26px]", children: [jsxs(Flex, { className: "ape:items-center ape:gap-[5px]", children: [jsx(Flex, { className: "ape:opacity-60", children: "Claim Status" }), jsx(TooltipBubble, { className: "tooltip-bubble", body: jsx(Flex, { children: UserBillTooltipText.FullyVested }), width: "230px", placement: "bottomLeft", transformTip: "translate(-5%, 0%)", children: jsx(Flex, { className: "block-header icon ape:text-white ape:font-normal ape:text-[12px]", children: jsx(QuestionCircle, { width: "12px" }) }) })] }), jsx(Flex, { className: "ape:items-center", children: isLoading ? (jsx(ValueSkeleton, { width: "90px" })) : userBill?.lpStakingData?.bonusStatus === null ? (jsxs(Flex, { className: "ape:items-center ape:gap-[5px]", children: ["Not eligible", jsx(TooltipBubble, { className: "tooltip-bubble", body: jsx(Flex, { children: bonusThreshold !== undefined
70
+ return (jsx(Modal, { className: clsx('ape:w-[480px] ape:[overflow-y:unset]! ape:p-0! ape:top-[56%] ape:overflow-x-visible', showNFTImg ? 'ape:bg-transparent!' : 'ape:bg-white2'), children: jsxs(Flex, { className: clsx('ape:flex-col ape:rounded-normal ape:relative ape:p-[20px]', showNFTImg ? 'ape:bg-transparent!' : 'ape:bg-white2'), children: [jsx(NftImage, { userBill: userBill, showNFTImg: showNFTImg, setShowNFTImg: setShowNFTImg, isLpStakingBond: true }), !showNFTImg && (jsxs(Flex, { className: "ape:flex-col", children: [jsx(YourLpBondModalHeader, { userBill: userBill, onDismiss: onDismiss }), jsxs(Flex, { className: "ape:mt-[10px] ape:flex-col ape:gap-[10px]", children: [jsxs(Flex, { className: "ape:w-full ape:gap-[15px] ape:relative", children: [jsxs(Flex, { className: "ape:bg-white3 ape:rounded-normal ape:flex-col ape:md:flex-row ape:justify-center ape:md:justify-between ape:gap-[4px] ape:md:gap-0 ape:p-[10px] ape:w-1/2 ape:items-center ape:text-[14px]", children: [jsx(Flex, { children: "Deposit" }), isLoading ? (jsx(ValueSkeleton, { width: "60px" })) : depositUSD ? (jsxs(Flex, { children: ["$", formatNumberSI(depositUSD)] })) : (jsxs(Flex, { className: "ape:items-center ape:gap-[5px]", children: ["Indexing...", jsx(TooltipBubble, { className: "tooltip-bubble", body: jsx(Flex, { children: "Our services are indexing the tx and deposit amount will be calculated shortly" }), width: "230px", placement: "bottomLeft", transformTip: "translate(-5%, 0%)", children: jsx(Flex, { className: "block-header icon ape:text-white ape:font-normal ape:text-[12px]", children: jsx(QuestionCircle, { width: "12px" }) }) })] }))] }), jsx(Flex, { className: "ape:absolute ape:top-1/2 ape:left-1/2 ape:-translate-y-1/2 ape:-translate-x-1/2", children: jsx(Arrow, { direction: "right", width: '5px' }) }), jsxs(Flex, { className: "ape:bg-white3 ape:rounded-normal ape:flex-col ape:md:flex-row ape:justify-center ape:md:justify-between ape:gap-[4px] ape:md:gap-0 ape:p-[10px] ape:w-1/2 ape:items-center ape:text-[14px]", children: [jsx(Flex, { children: "Staked" }), jsxs(Flex, { className: "ape:flex-col ape:gap-[4px]", children: [isLoading && (jsxs(Fragment, { children: [jsx(ValueSkeleton, { width: "100px" }), jsx(ValueSkeleton, { width: "100px" })] })), stakedTokens.map((token) => (jsxs(Flex, { className: "ape:items-center ape:justify-center ape:md:justify-end ape:gap-[5px]", children: [jsxs(Flex, { className: "ape:text-[12px]", children: [formatNumberSI(token.amount), " ", token.symbol] }), jsxs(Flex, { className: "ape:text-[10px] ape:font-normal ape:opacity-60", children: ["($", formatNumberSI(token.amountUsd), ")"] })] }, token.address)))] })] })] }), lostProfit && (jsxs(Flex, { className: "ape:bg-white3 ape:rounded-normal ape:w-full ape:p-[10px] ape:justify-between", children: [jsx(Flex, { className: "ape:w-1/5", children: jsx("img", { src: `https://ape.bond/images/launch/mythical.png`, alt: "mythical", style: { width: '90px', height: '90px' } }) }), jsxs(Flex, { className: "ape:w-[75%] ape:flex-col ape:gap-[3px]", children: [jsxs(Flex, { children: ["You missed a", ' ', jsxs(Flex, { className: "ape:px-[3px]", style: { color: 'var(--ape-color-success)' }, children: ["$", lostProfit] }), ' ', "bonus"] }), jsx(Flex, { className: "ape:text-[12px] ape:font-normal", style: { lineHeight: '16px' }, children: "Holding an Ape Tier would\u2019ve gotten you an extra 5% bonus on this purchase and all future ones." }), jsx(Button, { variant: "secondary", className: "ape:w-full ape:text-[14px]! ape:h-[30px] ape:font-semibold", onClick: () => window.open('https://ape.bond/true-yield', '_blank'), children: "Upgrade Your Tier" })] })] })), jsxs(Flex, { className: "ape:flex-col ape:text-[12px] ape:font-normal", children: [jsxs(Flex, { className: "ape:w-full ape:justify-between ape:items-center ape:p-[4px_10px] ape:bg-white3 ape:h-[26px] ape:rounded-[10px_10px_0px_0px]", children: [jsxs(Flex, { className: "ape:items-center ape:gap-[5px]", children: [jsx(Flex, { className: "ape:opacity-60", children: "Bonus Reward" }), jsx(TooltipBubble, { className: "tooltip-bubble", body: jsx(Flex, { children: `Your Bonus Reward unlocks ${cliffLength} after your purchase. Unstaking before it unlocks forfeits the bonus. Once unlocked, you can claim it on REAL's site.` }), width: "230px", placement: "bottomLeft", transformTip: "translate(-5%, 0%)", children: jsx(Flex, { className: "block-header icon ape:text-white ape:font-normal ape:text-[12px]", children: jsx(QuestionCircle, { width: "12px" }) }) })] }), isLoading ? (jsx(ValueSkeleton, { width: "90px" })) : (jsxs(Flex, { className: "ape:items-center", children: [jsxs(Text, { weight: 700, className: "ape:ml-[10px]", size: "12px", children: [formatNumberSI(pending(userBill) + claimable(userBill), 2), " ", payoutTokenSymbol] }), jsxs(Text, { weight: 400, className: "ape:ml-[5px] ape:opacity-60 ape:text-[10px]!", children: ["($", formatNumberSI(pendingUSD(userBill) + claimableUSD(userBill)), ")"] })] }))] }), jsxs(Flex, { className: "ape:w-full ape:justify-between ape:items-center ape:p-[4px_10px] ape:bg-white4 ape:h-[26px]", children: [jsxs(Flex, { className: "ape:items-center ape:gap-[5px]", children: [jsx(Flex, { className: "ape:opacity-60", children: "Claim Status" }), jsx(TooltipBubble, { className: "tooltip-bubble", body: jsx(Flex, { children: UserBillTooltipText.FullyVested }), width: "230px", placement: "bottomLeft", transformTip: "translate(-5%, 0%)", children: jsx(Flex, { className: "block-header icon ape:text-white ape:font-normal ape:text-[12px]", children: jsx(QuestionCircle, { width: "12px" }) }) })] }), jsx(Flex, { className: "ape:items-center", children: isLoading ? (jsx(ValueSkeleton, { width: "90px" })) : userBill?.lpStakingData?.bonusStatus === null ? (jsxs(Flex, { className: "ape:items-center ape:gap-[5px]", children: ["Not eligible", jsx(TooltipBubble, { className: "tooltip-bubble", body: jsx(Flex, { children: bonusThreshold !== undefined
71
71
  ? `This sale was not eligible for Bonus Rewards as its value was below the minimum threshold of ${formatNumberSI(bonusThreshold)} ${payoutTokenSymbol} ($${formatNumberSI(bonusThreshold * payoutTokenPrice)}).`
72
72
  : 'This sale was not eligible for Bonus Rewards as its value was below the minimum threshold.' }), width: "230px", placement: "bottomRight", transformTip: "translate(5%, 0%)", children: jsx(Flex, { className: "block-header icon ape:text-white ape:font-normal ape:text-[12px]", children: jsx(QuestionCircle, { width: "12px" }) }) })] })) : isPendingCliff ? (`Claiming starts in ${cliffCountdown.days !== 0 ? `${cliffCountdown.days} days` : cliffCountdown.hours !== 0 ? `${cliffCountdown.hours} hours` : `${cliffCountdown.minutes} mins`}`) : claimable(userBill) > 0 ? ('Claim now!') : claimed(userBill) > 0 ? ('Claimed') : (
73
73
  // Forfeited: unstaked before the cliff