import { IAddress, INormalizedNumber, VaultAddress } from './web3'; import { IDebankProtocolExposure, IDebankTokenExposure, IOTCPosition, IWSSubaccountCefi, IWSSubaccountLoan, IWSTokenEntry, ITokenizedVaultOperator, ITokenizedVaultEoaOperator, IHIstoricalSnapshot } from './webserver'; import type { InterfaceAbi } from 'ethers'; export interface IVaultLoan { vault: VaultAddress; address: IAddress; lender: IAddress; borrower: IAddress; state: string; totalRepaid: number; principalToken: IWSTokenEntry; principalAmount: number; interestAmount: number; upcomingPayment: { amount: number; dueDate: string; }; apr: number; initialPrincipalAmount: number; deployedDate: string; paymentInterval: number; isIdleCapital: boolean; allocation: number; } export type IVaultUserHistoryItem = { timestamp: number; address: IAddress; amount: INormalizedNumber; pool: IAddress; chainId: number; type: 'withdraw-request' | 'deposit' | 'withdraw-processed' | 'redeem'; transactionHash: IAddress; }; export type IVaultRewards = { points: string; multiplier: number; multipliers: { value: number; timestamp: number; }[]; additionalPoints: string[]; }; export type IVaultExposureItem = { amount: number; chain: string; decimals: number; exposureType?: string; id: string; logoUrl?: string; name: string; protocol?: string; symbol: string; }; export type IExposurePerCategory = { borrowing: IVaultExposureItem[]; supplying: IVaultExposureItem[]; lending: IWSSubaccountLoan[]; wallet: IVaultExposureItem[]; cefiBalance: number; defiBalance: number; walletBalance: number; loanBalance: number; }; export interface IVaultAllocations { defi: IDebankProtocolExposure[]; tokens: IDebankTokenExposure[]; cefi: IWSSubaccountCefi[]; unfilteredTokens: IDebankTokenExposure[]; otc: Record; exposurePerCategory?: IExposurePerCategory; netValue?: number; defiPerBorrower: Record<`0x${string}`, { exposure: any[]; positions: any[]; }>; } export interface IVaultApy { apy: number; explainer: string; liquidApy: number; pointsApy: number | null; campaignApy: number | null; rewardsClaimable: number; rewardsCompounded: number; underlyingApy: number; } export interface IVaultStrategist { address: IAddress; logo: string; name: string; type?: string; } export type IVaultVersion = 'evm-0' | 'evm-1' | 'evm-2' | 'sol-0' | 'sui-0' | 'stellar-0'; export type { ChainType } from './web3'; export interface IVaultAdapterConfig { lpTokenAddress?: IAddress; isNativeTokenDeposit: boolean; isWrappedTokenDeposit: boolean; wrappedTokenAddress?: IAddress; referralId?: IAddress | string; abi?: InterfaceAbi; wrapperAddress?: IAddress; viewAdapter?: IAddress; tokens?: IAddress[]; bridgeId?: number; } export interface IVault { max_drawdown?: number | null; historical_apy?: Record | null; historical_snapshots?: IHIstoricalSnapshot[]; depositCap?: INormalizedNumber; maxDepositAmount?: INormalizedNumber; address: VaultAddress; chainId: number; name: string; logoUrl: string; receipt: { address: VaultAddress; symbol: string; decimals: number; }; description: string; startDatetime: string; status: 'active' | 'closed' | 'testing'; version: IVaultVersion; tags: string[]; isFeatured: boolean; isSpotlighted?: boolean; withdrawalOnly?: boolean; isVisible: boolean; reserveTarget: number; reserveTolerance: number; decimals: number; totalAssets: INormalizedNumber; totalSupply: INormalizedNumber; maxSupply: INormalizedNumber; operators: ITokenizedVaultOperator[]; eoa_operators: ITokenizedVaultEoaOperator[]; depositAssets: { address: VaultAddress; symbol: string; decimals: number; }[]; apy: IVaultApy; operator: IAddress; rewards: IVaultRewards; strategists: IVaultStrategist[]; fees: { management: number; isManagementWaived: boolean; managementFeeWaivedUntilDate: string | null; managementFeeWaivedUntilTvl: number | null; performance: number; isPerformanceWaived: boolean; performanceFeeWaivedUntilDate: string | null; performanceFeeWaivedUntilTvl: number | null; }; lagDuration: number; maxDailyDrawdown: number; risk: string; isWithdrawalPaused: boolean; isDepositPaused: boolean; idleAssets: INormalizedNumber; loans?: IVaultLoan[]; allocations?: IVaultAllocations; position?: IVaultPosition; linkOnly?: boolean; composabilityIntegrations?: Array<{ name: string; description: string; earningMultiplier: number; protocolUrl: string; logoUrl: string; tokenizedVaultId: string; id: string; }>; dailyPnlPerShare?: { timestamp: string; value: number; }[]; enabled_historical_price_horizons?: number[]; defaultApyHorizon?: 7 | 30 | null; latest_reported_tvl?: number | null; cachedAt?: string | null; showCapFilled?: boolean | null; programId?: string; instant_redeem_config?: { subaccountAddress: IAddress; outputAssetSymbol: string; redeemableAssets: Array<{ address: IAddress; symbol: string; decimals: number; spreadBps: number; }>; isPaused: boolean; availableLiquidity: number; } | null; } export declare enum VaultRedemptionStatus { AWAITING_COOLDOWN = "awaiting_cooldown", READY_TO_CLAIM = "ready_to_claim" } export type IVaultAvailableRedemption = { id: string; hash: string; timestamp: number; receiver: IAddress; day: INormalizedNumber; month: INormalizedNumber; year: INormalizedNumber; amount: INormalizedNumber; date: Date; vault: IAddress; status?: VaultRedemptionStatus; }; export type IVaultRedemptionHistoryItem = { receiver: IAddress; amount: INormalizedNumber; processed: Date; requested: Date; vault: IAddress; transactionHash?: string; }; export interface IVaultPosition { vault: VaultAddress; status: string; availableRedemptions: IVaultAvailableRedemption[]; pendingRedemptions: IVaultAvailableRedemption[]; redeemable: INormalizedNumber; walletBalance: INormalizedNumber; } export type IVaultOrderParam = 'asc' | 'desc'; export type IVaultHistoricalParams = { daysAgo?: number; order?: IVaultOrderParam; interval?: 'days' | 'weeks' | 'months' | 'years'; }; export interface IVaultUserLifetimePnl { tokenSymbol: string; totalDeposited: INormalizedNumber; totalDepositedUsd: number; totalWithdrawn: INormalizedNumber; totalWithdrawnUsd: number; currentPositionValue: INormalizedNumber; currentPositionValueUsd: number; lifetimePnl: INormalizedNumber; lifetimePnlUsd: number; pnlPercentage: number; } export interface IVaultPnl { totalPnl: INormalizedNumber; pnlUsd: number; } export interface IVaultAnnualizedApy { vaultAddress: IAddress; liquidityApy: number; annualizedApy: number; hgETH7dLiquidAPY?: number; hgETH30dLiquidAPY?: number; liquidAPY7Day?: number; liquidAPY30Day?: number; } export interface IVaultSummary { vaultAddress: IAddress; name: string; type: string; chain: string; recentReturns: { day: number; week: number; month: number; }; } export interface IVaultWithdrawals { vaultAddress: IAddress; chain: string; totalWithdrawals: INormalizedNumber; pendingQueue: Array<{ id: string; amount: INormalizedNumber; requestedAt: string; estimatedCompletionDate: string; receiver: IAddress; }>; } export interface IVaultPendingRedemptions { vault: { address: string; chainId: number; name: string | null; symbol: string | null; }; asset: { address: string; symbol: string | null; decimals: number | null; }; liquidity: { available: number; }; summary: { totalPending: number; pendingCount: number; pendingToLiquidityRatio: number | null; isLiquiditySufficient: boolean; shortfall: number | null; nextRedemptionDate: string | null; isOverdue: boolean; }; redemptionsByDate: Array<{ date: string; assets: number; daysUntilDue: number; isOverdue: boolean; }>; } export interface IVaultMetadataItem { symbol: string; subgraph: string; address: string; } export type IVaultMetadata = Record;