import { FuturesAlgoConditionalOrderTypes, FuturesAlgoOrderStatus, FuturesAlgoOrderType, FuturesOrderType, MarginType, PositionSide, PriceMatchMode, WorkingType } from '../futures';
import { KlineInterval, numberInString, OCOOrderStatus, OCOStatus, OrderBookRow, OrderExecutionType, OrderSide, OrderStatus, OrderTimeInForce, OrderType, SelfTradePreventionMode } from '../shared';
import { WsSharedBase } from './ws-general';
export interface WsMessageKlineRaw extends WsSharedBase {
    e: 'kline';
    E: number;
    s: string;
    k: {
        t: number;
        T: number;
        s: string;
        i: KlineInterval;
        f: number;
        L: number;
        o: numberInString;
        c: numberInString;
        h: numberInString;
        l: numberInString;
        v: numberInString;
        n: number;
        x: boolean;
        q: numberInString;
        V: numberInString;
        Q: numberInString;
        B: numberInString;
    };
}
export interface WsMessageAggTradeRaw extends WsSharedBase {
    e: 'aggTrade';
    E: number;
    s: string;
    a: number;
    p: numberInString;
    q: numberInString;
    f: number;
    l: number;
    T: number;
    m: boolean;
    M: boolean;
}
export interface WsMessageTradeRaw extends WsSharedBase {
    e: 'trade';
    E: number;
    s: string;
    t: number;
    p: numberInString;
    q: numberInString;
    b: number;
    a: number;
    T: number;
    m: boolean;
    M: boolean;
}
export interface WsMessage24hrMiniTickerRaw extends WsSharedBase {
    e: '24hrMiniTicker';
    E: number;
    s: string;
    c: numberInString;
    o: numberInString;
    h: numberInString;
    l: numberInString;
    v: numberInString;
    q: numberInString;
}
export interface WsMessage24hrTickerRaw extends WsSharedBase {
    e: '24hrTicker';
    E: number;
    s: string;
    p: numberInString;
    P: numberInString;
    w: numberInString;
    x: numberInString;
    c: numberInString;
    Q: numberInString;
    b: numberInString;
    B: numberInString;
    a: numberInString;
    A: numberInString;
    o: numberInString;
    h: numberInString;
    l: numberInString;
    v: numberInString;
    q: numberInString;
    O: numberInString;
    C: numberInString;
    F: number;
    L: number;
    n: number;
}
export interface WsMessageRollingWindowTickerRaw extends WsSharedBase {
    e: '1hTicker' | '4hTicker' | '1dTicker';
    E: number;
    s: string;
    p: string;
    P: string;
    w: string;
    o: string;
    h: string;
    l: string;
    c: string;
    v: string;
    q: string;
    O: number;
    C: number;
    F: number;
    L: number;
    n: number;
}
export interface WsMessageBookTickerEventRaw extends WsSharedBase {
    e: 'bookTicker';
    u: number;
    E: number;
    T: number;
    s: string;
    b: numberInString;
    B: numberInString;
    a: numberInString;
    A: numberInString;
}
export interface WsMessagePartialBookDepthEventRaw extends WsSharedBase {
    e: 'partialBookDepth';
    lastUpdateId: number;
    bids: OrderBookRow[];
    asks: OrderBookRow[];
}
export interface WsMessageDiffBookDepthEventRaw extends WsSharedBase {
    e: 'depthUpdate';
    E: number;
    T: number;
    s: string;
    U: number;
    u: number;
    pu: number;
    b: OrderBookRow[];
    a: OrderBookRow[];
}
/**
 * USER DATA WS EVENTS
 **/
interface SpotBalanceRaw {
    a: string;
    f: numberInString;
    l: numberInString;
}
export interface WsMessageSpotOutboundAccountPositionRaw extends WsSharedBase {
    e: 'outboundAccountPosition';
    E: number;
    u: number;
    B: SpotBalanceRaw[];
}
export interface WsMessageSpotBalanceUpdateRaw extends WsSharedBase {
    e: 'balanceUpdate';
    E: number;
    a: string;
    d: numberInString;
    T: number;
}
export interface WsMessageSpotUserDataExecutionReportEventRaw extends WsSharedBase {
    e: 'executionReport';
    E: number;
    s: string;
    c: string;
    S: OrderSide;
    o: OrderType;
    f: OrderTimeInForce;
    q: numberInString;
    p: numberInString;
    P: numberInString;
    F: numberInString;
    g: number;
    C: string;
    x: OrderExecutionType;
    X: OrderStatus;
    r: string;
    i: number;
    l: numberInString;
    z: numberInString;
    L: numberInString;
    n: numberInString;
    N: string | null;
    T: number;
    t: number;
    I: number;
    w: boolean;
    m: boolean;
    M: boolean;
    O: number;
    Z: numberInString;
    Y: numberInString;
    Q: numberInString;
    W: number;
    V: SelfTradePreventionMode;
    /** Expiry reason when present (user data executionReport). */
    eR?: string;
    d?: number;
    v?: number;
    D?: number;
    j?: number;
    J?: number;
    u?: number;
    U?: number;
    A?: numberInString;
    B?: numberInString;
    Cs?: string;
    pl?: numberInString;
    pL?: numberInString;
    pY?: numberInString;
}
export interface WsMessagePortfolioMarginProAccountUpdateRaw extends WsSharedBase {
    e: 'PM_PRO_ACCOUNT_UPDATE';
    E: number;
    u: numberInString;
    eq: numberInString;
    ae: numberInString;
    im: numberInString;
    mm: numberInString;
    avb: numberInString;
    vmw: numberInString;
}
export interface WsMessageWsapiServerShutdownRaw extends WsSharedBase {
    e: 'serverShutdown';
    E: number;
}
export interface OrderObjectRaw {
    s: string;
    i: number;
    c: string;
}
export interface WsMessageSpotUserDataListStatusEventRaw extends WsSharedBase {
    e: 'listStatus';
    E: number;
    s: string;
    g: number;
    c: 'OCO';
    l: OCOStatus;
    L: OCOOrderStatus;
    r: string;
    C: string;
    T: number;
    O: OrderObjectRaw[];
}
export type AccountUpdateEventType = 'DEPOSIT' | 'WITHDRAW' | 'ORDER' | 'FUNDING_FEE' | 'WITHDRAW_REJECT' | 'ADJUSTMENT' | 'INSURANCE_CLEAR' | 'ADMIN_DEPOSIT' | 'ADMIN_WITHDRAW' | 'MARGIN_TRANSFER' | 'MARGIN_TYPE_CHANGE' | 'ASSET_TRANSFER' | 'OPTIONS_PREMIUM_FEE' | 'OPTIONS_SETTLE_PROFIT' | 'AUTO_EXCHANGE';
export interface WsMessageFuturesUserDataListenKeyExpiredRaw extends WsSharedBase {
    e: 'listenKeyExpired';
    E: number;
}
export interface WsEventStreamTerminatedRaw extends WsSharedBase {
    e: 'eventStreamTerminated';
    E: number;
}
export interface WsMessageFuturesMarginCalledPositionRaw {
    s: string;
    ps: PositionSide;
    pa: numberInString;
    mt: Uppercase<MarginType>;
    iw: numberInString;
    mp: numberInString;
    up: numberInString;
    mm: numberInString;
}
export interface WsMessageFuturesUserDataMarginCallRaw extends WsSharedBase {
    e: 'MARGIN_CALL';
    E: number;
    cw: numberInString;
    p: WsMessageFuturesMarginCalledPositionRaw[];
}
export interface WsMessageFuturesAccountUpdatePositionRaw {
    s: string;
    pa: numberInString;
    ep: numberInString;
    cr: numberInString;
    up: numberInString;
    mt: 'cross' | 'isolated';
    iw: numberInString;
    ps: PositionSide;
}
export interface WsMessageFuturesAccountUpdateBalanceRaw {
    a: string;
    wb: numberInString;
    cw: numberInString;
    bc: numberInString;
}
export interface WsMessageFuturesUserDataAccountUpdateRaw extends WsSharedBase {
    e: 'ACCOUNT_UPDATE';
    E: number;
    T: number;
    a: {
        m: AccountUpdateEventType;
        B: WsMessageFuturesAccountUpdateBalanceRaw[];
        P: WsMessageFuturesAccountUpdatePositionRaw[];
    };
}
export interface WsMessageFuturesUserDataCondOrderTriggerRejectEventRaw extends WsSharedBase {
    e: 'CONDITIONAL_ORDER_TRIGGER_REJECT';
    E: number;
    T: number;
    or: {
        s: string;
        i: number;
        r: string;
    };
}
export interface WsMessageFuturesUserDataOrderTradeUpdateEventRaw extends WsSharedBase {
    e: 'ORDER_TRADE_UPDATE';
    E: number;
    T: number;
    o: {
        s: string;
        c: string;
        S: OrderSide;
        o: FuturesOrderType;
        f: OrderTimeInForce;
        q: numberInString;
        p: numberInString;
        ap: numberInString;
        sp: numberInString;
        x: OrderExecutionType;
        X: OrderStatus;
        i: number;
        l: numberInString;
        z: numberInString;
        L: numberInString;
        N: string;
        n: numberInString;
        T: numberInString;
        t: number;
        b: numberInString;
        a: numberInString;
        m: boolean;
        R: boolean;
        wt: WorkingType;
        ot: FuturesOrderType;
        ps: PositionSide;
        cp: boolean;
        AP: numberInString;
        cr: numberInString;
        rp: numberInString;
        pP: boolean;
        si: numberInString;
        ss: numberInString;
        V: string;
        pm: string;
        gtd: number;
        er?: string;
    };
}
export interface WsMessageFuturesUserDataAlgoUpdateRaw extends WsSharedBase {
    e: 'ALGO_UPDATE';
    E: number;
    T: number;
    o: {
        caid: string;
        aid: number;
        at: FuturesAlgoOrderType;
        o: FuturesAlgoConditionalOrderTypes;
        s: string;
        S: OrderSide;
        ps: PositionSide;
        f: OrderTimeInForce;
        q: numberInString;
        X: FuturesAlgoOrderStatus;
        ai: string;
        tp: numberInString;
        p: numberInString;
        V: SelfTradePreventionMode;
        wt: WorkingType;
        pm: PriceMatchMode;
        cp: boolean;
        pP: boolean;
        R: boolean;
        tt: number;
        gtd: number;
    };
}
export interface WsMessageFuturesUserDataTradeLiteEventRaw extends WsSharedBase {
    e: 'TRADE_LITE';
    E: number;
    T: number;
    s: string;
    q: string;
    p: string;
    m: boolean;
    c: string;
    S: 'BUY' | 'SELL';
    L: string;
    l: string;
    t: number;
    i: number;
}
export interface WsMessageFuturesUserDataAccountConfigUpdateEventRaw extends WsSharedBase {
    e: 'ACCOUNT_CONFIG_UPDATE';
    E: number;
    T: number;
    ac?: {
        s: string;
        l: number;
    };
    ai?: {
        j: boolean;
    };
}
export interface WsMessageIndexPriceUpdateEventRaw extends WsSharedBase {
    e: 'indexPriceUpdate';
    E: number;
    i: string;
    p: numberInString;
}
export interface WsMessageMarkPriceUpdateEventRaw extends WsSharedBase {
    e: 'markPriceUpdate';
    E: number;
    s: string;
    p: string;
    /** Mark price moving average (USDⓈ-M mark price stream). */
    ap?: string;
    P: string;
    i: string;
    r: string;
    T: number;
}
export interface WsMessageForceOrderRaw extends WsSharedBase {
    e: 'forceOrder';
    E: number;
    o: {
        s: string;
        S: string;
        o: string;
        f: string;
        q: string;
        p: string;
        ap: string;
        X: string;
        l: string;
        z: string;
        T: number;
    };
}
export interface WsMessageFuturesUserDataStrategyUpdateRaw extends WsSharedBase {
    e: 'STRATEGY_UPDATE';
    T: number;
    E: number;
    su: {
        si: number;
        st: string;
        ss: string;
        s: string;
        ut: number;
        c: number;
    };
}
export interface WsMessageFuturesUserDataGridUpdateRaw extends WsSharedBase {
    e: 'GRID_UPDATE';
    T: number;
    E: number;
    gu: {
        si: number;
        st: string;
        ss: string;
        s: string;
        r: numberInString;
        up: numberInString;
        uq: numberInString;
        uf: numberInString;
        mp: numberInString;
        ut: number;
    };
}
export interface WsMessageFuturesUserDataContractInfoRaw extends WsSharedBase {
    e: 'contractInfo';
    E: number;
    s: string;
    ps: string;
    ct: string;
    dt: number;
    ot: number;
    cs: string;
    bks: {
        bs: number;
        bnf: number;
        bnc: number;
        mmr: number;
        cf: number;
        mi: number;
        ma: number;
    }[];
}
export type WsRawSpotUserDataEventRaw = WsMessageSpotUserDataExecutionReportEventRaw | WsMessageSpotOutboundAccountPositionRaw | WsMessageSpotBalanceUpdateRaw | WsMessageSpotUserDataListStatusEventRaw;
export type WsMessageFuturesUserDataEventRaw = WsMessageFuturesUserDataAccountUpdateRaw | WsMessageFuturesUserDataListenKeyExpiredRaw | WsMessageFuturesUserDataMarginCallRaw | WsMessageFuturesUserDataOrderTradeUpdateEventRaw | WsMessageFuturesUserDataAlgoUpdateRaw | WsMessageFuturesUserDataAccountConfigUpdateEventRaw | WsMessageFuturesUserDataCondOrderTriggerRejectEventRaw | WsMessageFuturesUserDataTradeLiteEventRaw | WsMessageFuturesUserDataStrategyUpdateRaw | WsMessageFuturesUserDataGridUpdateRaw | WsMessageFuturesUserDataContractInfoRaw;
export type WsUserDataEventsRaw = WsRawSpotUserDataEventRaw | WsMessageFuturesUserDataEventRaw | WsMessagePortfolioMarginProAccountUpdateRaw;
export type WsRawMessage = WsEventStreamTerminatedRaw | WsMessageWsapiServerShutdownRaw | WsUserDataEventsRaw | WsMessageKlineRaw | WsMessageAggTradeRaw | WsMessageTradeRaw | WsMessage24hrMiniTickerRaw | WsMessage24hrMiniTickerRaw[] | WsMessage24hrTickerRaw | WsMessage24hrTickerRaw[] | WsMessageRollingWindowTickerRaw[] | WsMessageBookTickerEventRaw | WsMessagePartialBookDepthEventRaw | WsMessageDiffBookDepthEventRaw | WsMessageForceOrderRaw | WsMessageIndexPriceUpdateEventRaw;
export {};
