import { PublicKey } from "@solana/web3.js"; export declare const DEFAULT_PHOENIX_API_URL = "https://perp-api.phoenix.trade"; export type PhoenixSnapshot = { slot?: number; exchange: { programId: string; globalConfig: string; currentAuthorities?: { rootAuthority?: string; riskAuthority?: string; marketAuthority?: string; oracleAuthority?: string; adlAuthority?: string; cancelAuthority?: string; backstopAuthority?: string; }; canonicalMint: string; usdcMint: string; globalVault: string; perpAssetMap: string; globalTraderIndex: string[]; activeTraderBuffer: string[]; withdrawQueue: string; active?: boolean; gated?: boolean; }; markets: PhoenixMarket[]; }; export type PhoenixMarket = { symbol: string; marketPubkey: string; splinePubkey?: string; tickSize: number | string; baseLotsDecimals: number; marketStatus?: string; isolatedOnly?: boolean; takerFee?: number; makerFee?: number; }; export type TraderCapabilityAccess = { immediate?: boolean; viaColdActivation?: boolean; }; export type DisplayAmount = string | number | { ui?: string; value?: string | number; decimals?: number; }; export type LimitOrder = { price?: DisplayAmount; side?: string; orderSequenceNumber?: string | number; initialTradeSize?: DisplayAmount; tradeSizeRemaining?: DisplayAmount; marginRequirement?: DisplayAmount; marginFactor?: DisplayAmount; isReduceOnly?: boolean; isConditionalOrder?: boolean; isStopLoss?: boolean; isStopLossDirection?: boolean; nodePointer?: string | number; node_pointer?: string | number; priceInTicks?: string | number; priceTicks?: string | number; price_in_ticks?: string | number; orderId?: { priceInTicks?: string | number; price_in_ticks?: string | number; orderSequenceNumber?: string | number; order_sequence_number?: string | number; }; }; export type TraderPositionView = { symbol?: string; positionSize?: DisplayAmount; virtualQuotePosition?: DisplayAmount; entryPrice?: DisplayAmount; unrealizedPnl?: DisplayAmount; discountedUnrealizedPnl?: DisplayAmount; positionInitialMargin?: DisplayAmount; initialMargin?: DisplayAmount; maintenanceMargin?: DisplayAmount; backstopMargin?: DisplayAmount; limitOrderMargin?: DisplayAmount; positionValue?: DisplayAmount; unsettledFunding?: DisplayAmount; accumulatedFunding?: DisplayAmount; liquidationPrice?: DisplayAmount | null; takeProfitPrice?: DisplayAmount | null; stopLossPrice?: DisplayAmount | null; }; export type TraderView = { flags?: number; state?: string; slot?: number; slotIndex?: number; traderKey?: string; traderPdaIndex?: number; traderSubaccountIndex?: number; authority?: string; capabilities?: { placeLimitOrder?: TraderCapabilityAccess; placeMarketOrder?: TraderCapabilityAccess; riskIncreasingTrade?: TraderCapabilityAccess; riskReducingTrade?: TraderCapabilityAccess; depositCollateral?: TraderCapabilityAccess; withdrawCollateral?: TraderCapabilityAccess; }; collateralBalance?: DisplayAmount; effectiveCollateral?: DisplayAmount; effectiveCollateralForWithdrawals?: DisplayAmount; unrealizedPnl?: DisplayAmount; discountedUnrealizedPnl?: DisplayAmount; unsettledFundingOwed?: DisplayAmount; accumulatedFunding?: DisplayAmount; portfolioValue?: DisplayAmount; maintenanceMargin?: DisplayAmount; cancelMargin?: DisplayAmount; initialMargin?: DisplayAmount; initialMarginForWithdrawals?: DisplayAmount; riskState?: string; riskTier?: string; positions?: TraderPositionView[]; limitOrders?: Record; makerFeeOverrideMultiplier?: number; takerFeeOverrideMultiplier?: number; maxPositions?: number; lastDepositSlot?: number; isInActiveTraders?: boolean; }; export type TraderStateResponse = { slot?: number; slotIndex?: number; authority?: string; pdaIndex?: number; traders?: TraderView[]; }; export declare function normalizePhoenixApiUrl(apiUrl: string): string; export declare class PhoenixApiClient { apiUrl: string; constructor(); private url; fetchPhoenixSnapshot(): Promise; fetchTraderView(trader: PublicKey | string): Promise; fetchTraderState(authority: PublicKey | string, pdaIndex: number): Promise; }