import { IsoString } from "../../swapContext";
import { OrderSide, OrderType } from "@dydxprotocol/v4-client-js";
/**
 * Handles and processes account-related data and updates, including orders,
 * positions, and collateral for a given symbol and asset.
 */
export declare class AccountHandler {
    private readonly symbol;
    private readonly asset;
    private perpetualPositions;
    private assetPositions;
    private orders;
    private fills;
    private transfers;
    private position;
    constructor(symbol?: string, asset?: string);
    /**
     * Initializes indexer client for fetching account data.
    */
    private postConstruct;
    initialize(obj: any): Promise<void>;
    update(obj: any): Promise<void>;
    private calculatePosition;
    getPosition(): number;
    hasOpenPosition(): boolean;
    private defaultPerpetualPositionsProperties;
    private defaultAssetPositionProperties;
    private defaultOrderProperties;
    private defaultFillProperties;
    private defaultTransferProperties;
}
export interface PerpetualPositionSubaccountMessageContents {
    address: string;
    subaccountNumber: number;
    positionId: string;
    market: string;
    side: PositionSide;
    status: PerpetualPositionStatus;
    size: string;
    maxSize: string;
    netFunding: string;
    entryPrice: string;
    exitPrice?: string;
    sumOpen: string;
    sumClose: string;
    realizedPnl?: string;
    unrealizedPnl?: string;
}
export declare enum PositionSide {
    LONG = "LONG",
    SHORT = "SHORT"
}
export declare enum PerpetualPositionStatus {
    OPEN = "OPEN",
    CLOSED = "CLOSED",
    LIQUIDATED = "LIQUIDATED"
}
export interface AssetPositionSubaccountMessageContents {
    address: string;
    subaccountNumber: number;
    positionId: string;
    assetId: string;
    symbol: string;
    side: PositionSide;
    size: string;
}
export interface OrderSubaccountMessageContents {
    id: string;
    subaccountId: string;
    clientId: string;
    clobPairId: string;
    side: OrderSide;
    size: string;
    ticker: string;
    price: string;
    type: OrderType;
    timeInForce: APITimeInForce;
    postOnly: boolean;
    reduceOnly: boolean;
    status: APIOrderStatus;
    orderFlags: string;
    totalFilled?: string;
    totalOptimisticFilled?: string;
    goodTilBlock?: string;
    goodTilBlockTime?: string;
    removalReason?: string;
    createdAtHeight?: string;
    clientMetadata: string;
    triggerPrice?: string;
    updatedAt?: IsoString;
    updatedAtHeight?: string;
}
export declare enum APITimeInForce {
    GTT = "GTT",
    FOK = "FOK",
    IOC = "IOC"
}
export declare enum APIOrderStatus {
    OPEN = "OPEN",
    FILLED = "FILLED",
    CANCELED = "CANCELED",
    BEST_EFFORT_CANCELED = "BEST_EFFORT_CANCELED",
    BEST_EFFORT_OPENED = "BEST_EFFORT_OPENED",
    UNTRIGGERED = "UNTRIGGERED"
}
export interface FillSubaccountMessageContents {
    id: string;
    subaccountId: string;
    side: OrderSide;
    liquidity: Liquidity;
    type: FillType;
    clobPairId: string;
    size: string;
    price: string;
    quoteAmount: string;
    eventId: string;
    transactionHash: string;
    createdAt: IsoString;
    createdAtHeight: string;
    orderId?: string;
    ticker: string;
}
export declare enum Liquidity {
    TAKER = "TAKER",
    MAKER = "MAKER"
}
export declare enum FillType {
    LIMIT = "LIMIT",
    LIQUIDATED = "LIQUIDATED",
    LIQUIDATION = "LIQUIDATION",
    DELEVERAGED = "DELEVERAGED",
    OFFSETTING = "OFFSETTING"
}
export interface TransferSubaccountMessageContents {
    sender: {
        address: string;
        subaccountNumber?: number;
    };
    recipient: {
        address: string;
        subaccountNumber?: number;
    };
    symbol: string;
    size: string;
    type: TransferType;
    createdAt: IsoString;
    createdAtHeight: string;
    transactionHash: string;
}
export declare enum TransferType {
    TRANSFER_IN = "TRANSFER_IN",
    TRANSFER_OUT = "TRANSFER_OUT",
    DEPOSIT = "DEPOSIT",
    WITHDRAWAL = "WITHDRAWAL"
}
