import type { BaseAPI } from "../api"; import type { OrderType, PositionSide, TimeInForce } from "../trading"; export type PositionStatus = "OPEN" | "CLOSED" | "LIQUIDATING"; export type ClosePositionType = "MARKET" | "LIMIT" | "IOC"; export interface Position { position_id: string; margin_account_id: string; trading_pair_id: string; side: PositionSide; size: string; entry_price: string; mark_price: string; index_price?: string; unrealized_pnl: string; realized_pnl: string; isolated_margin: string; leverage?: string; maintenance_margin_required: string; initial_margin_required?: string; liquidation_price: string; status: PositionStatus; updated_at: string; } export interface ListPositionsParams { margin_account_id?: string; trading_pair_id?: string; status?: PositionStatus; page?: number; page_size?: number; } export interface ListPositionsResponse { positions: Position[]; total: number; page: number; page_size: number; } export type GetPositionResponse = Position; export interface ClosePositionRequest { closeType: ClosePositionType; limitPrice?: string; slippageToleranceBps?: number; quantity?: string; } export interface ClosePositionResponse { close_order_id: string; status: string; message: string; submitted_quantity: string; } export interface PositionRisk { position_id: string; mark_price: string; index_price?: string; unrealized_pnl: string; liquidation_price: string; margin_ratio: string; maintenance_margin_required: string; initial_margin_required?: string; updated_at: string; } export interface AddPositionMarginRequest { amount: string; asset: string; } export interface ReducePositionMarginRequest { amount: string; } export interface PositionMarginResponse { position_id: string; margin_account_id: string; new_isolated_margin: string; status: string; message: string; } export interface TpSlLeg { triggerPrice: string; orderType: OrderType; limitPrice?: string; quantity?: string; timeInForce?: Extract; slippageToleranceBps?: number; expiresAt?: string; } export interface AttachPositionTpSlRequest { takeProfit?: TpSlLeg; stopLoss?: TpSlLeg; } export interface AttachPositionTpSlResponse { position_id: string; take_profit_order_id?: string; stop_loss_order_id?: string; status: "SUCCESS" | "FAILED"; message: string; } export interface ListPositionHistoryParams { position_id?: string; margin_account_id?: string; trading_pair_id?: string; page?: number; page_size?: number; } export interface PositionHistoryEvent { event_id: string; position_id?: string; margin_account_id?: string; trading_pair_id?: string; event_type: string; quantity?: string; price?: string; realized_pnl?: string; timestamp: string; } export interface ListPositionHistoryResponse { events: PositionHistoryEvent[]; total: number; page: number; page_size: number; } export interface PositionsAPI extends BaseAPI { listPositions(params?: ListPositionsParams): Promise; getPosition(positionId: string): Promise; closePosition(positionId: string, request: ClosePositionRequest): Promise; getPositionRisk(positionId: string): Promise; addPositionMargin(positionId: string, request: AddPositionMarginRequest): Promise; reducePositionMargin(positionId: string, request: ReducePositionMarginRequest): Promise; attachPositionTpSl(positionId: string, request: AttachPositionTpSlRequest): Promise; listPositionHistory(params?: ListPositionHistoryParams): Promise; }