export type MarketChangeCallback = (marketCache: {
    [key: string]: MarketCache;
}, deltas: string[]) => void;
export type OrderChangeCallback = (orderCache: {
    [key: string]: OrderAccountCache;
}, deltas: string[]) => void;
export type RawDataCallback = (rawData: string) => void;
export type Message = {
    id: number;
    op: string;
};
export type CurrencyRate = {
    currencyCode: string;
    rate: number;
};
export type StatusMessage = Message & {
    statusCode: StatusCode;
    connectionClosed: boolean;
    errorCode: string;
    errorMessage: string;
    connectionsAvailable: number;
};
export type ConnectionMessage = Message & {
    connectionId: string;
};
export type AuthenticationMessage = Message & {
    appKey: string;
    session: string;
};
export type SubscriptionMessage = Message & {
    segmentationEnabled: boolean;
    conflateMs: number;
    heartbeatMs: number;
    initialClk: string;
    clk: string;
};
export type ChangeMessage = SubscriptionMessage & {
    ct: ChangeType;
    status: number;
    pt: number;
    con: boolean;
    segmentationType?: string;
};
export type StreamMarketFilter = {
    marketIds?: string[];
    bspMarket?: boolean;
    bettingTypes?: BettingType[];
    eventTypeIds?: string[];
    eventIds?: string[];
    turnInPlayEnabled?: boolean;
    marketTypes?: string[];
    venues?: string[];
    countryCodes?: string[];
    raceTypes?: string[];
};
export type MarketDataFilter = Record<string, never>;
export type MarketChangeMessage = ChangeMessage & {
    mc: MarketChange[];
};
export type RunnerChange = {
    id: number;
    con?: boolean;
    tv?: number;
    ltp?: number;
    spn?: number;
    spf?: number;
    batb?: [number, number, number][];
    batl?: [number, number, number][];
    bdatb?: [number, number, number][];
    bdatl?: [number, number, number][];
    atb?: [number, number][];
    atl?: [number, number][];
    spb?: [number, number][];
    spl?: [number, number][];
    trd?: [number, number][];
};
export type MarketDefinition = {
    venue: string;
    bspMarket: boolean;
    turnInPlayEnabled: boolean;
    persistenceEnabled: boolean;
    marketBaseRate: number;
    eventId: string;
    eventTypeId: string;
    numberOfWinners: number;
    bettingType: string;
    marketType: string;
    marketTime: string;
    suspendTime: string;
    bspReconciled: boolean;
    complete: boolean;
    inPlay: boolean;
    crossMatching: boolean;
    runnersVoidable: boolean;
    numberOfActiveRunners: number;
    betDelay: number;
    status: StreamMarketStatus;
    runners: RunnerDefinition[];
    regulators: string[];
    countryCode: string;
    discountAllowed: boolean;
    timezone: string;
    openDate: string;
    version: number;
    name: string;
    eventName: string;
    totalMatched: number;
};
export type RunnerDefinition = {
    status: StreamRunnerStatus;
    adjustmentFactor: number;
    lastPriceTraded: number;
    totalMatched: number;
    removalDate: string;
    id: number;
    hc: number;
    fullImage: {
        [key: string]: RunnerChange;
    };
    bsp: number;
};
export type MarketChange = {
    id: string;
    rc?: RunnerChange[];
    img?: boolean;
    tv?: number;
    con?: boolean;
    marketDefinition?: MarketDefinition;
};
export type MarketCache = {
    marketId: string;
    marketDefinition: MarketDefinition;
    runners: {
        [key: string]: RunnerCache;
    };
    totalMatched: number;
    lastValueTraded: number;
    published: number;
};
export type RunnerCache = {
    id: number;
    status: StreamRunnerStatus;
    adjustmentFactor: number;
    lastPriceTraded: number;
    totalMatched: number;
    batb: [number, number, number][];
    batl: [number, number, number][];
    atb: [number, number][];
    atl: [number, number][];
    ltp: number;
    tv: number;
    spn: number;
    spf: number;
    spb: [number, number][];
    spl: [number, number][];
    trd: [number, number][];
    fullImage: {
        [key: string]: RunnerChange;
    };
};
export type MarketSubscriptionMessage = Message & {
    marketFilter: StreamMarketFilter;
    segmentationEnabled: boolean;
    conflateMs: number;
    heartbeatMs: number;
};
export type OrderFilter = {
    accountIds?: number[];
    includeOverallPosition?: boolean;
    customerStrategyRefs?: string[];
    partitionMatchedByStrategyRef?: boolean;
};
export type OrderSubscriptionMessage = Message & {
    orderFilter?: OrderFilter;
    segmentationEnabled: boolean;
    conflateMs?: number;
    heartbeatMs?: number;
};
export type OrderChangeMessage = ChangeMessage & {
    oc?: OrderAccountChange[];
};
export type OrderAccountChange = {
    closed?: boolean;
    id: string;
    fullImage?: boolean;
    orc?: OrderRunnerChange[];
};
export type OrderRunnerChange = {
    fullImage?: boolean;
    id: number;
    hc?: number;
    uo?: UnmatchedOrder[];
    mb?: [number, number][];
    ml?: [number, number][];
    smc?: {
        [key: string]: StrategyMatchChange;
    };
};
export type UnmatchedOrder = {
    id: string;
    p: number;
    s: number;
    bsp?: number;
    side: OrderSide;
    status: StreamOrderStatus;
    pt: StreamPersistenceType;
    ot: StreamOrderType;
    pd: number;
    md?: number;
    cd?: number;
    ld?: number;
    lsrc?: string;
    avp?: number;
    sm: number;
    sr: number;
    sl: number;
    sc: number;
    sv: number;
    rac?: string;
    rc?: string;
    rfo?: string;
    rfs?: string;
};
export type StrategyMatchChange = {
    mb?: [number, number][];
    ml?: [number, number][];
};
export type OrderAccountCache = {
    marketId: string;
    closed: boolean;
    runners: {
        [key: string]: OrderRunnerCache;
    };
    published: number;
};
export type OrderRunnerCache = {
    id: number;
    hc?: number;
    unmatchedOrders: {
        [key: string]: UnmatchedOrder;
    };
    matchedBacks: [number, number][];
    matchedLays: [number, number][];
    strategyMatches: {
        [key: string]: StrategyMatchChange;
    };
};
export declare enum StatusCode {
    SUCCESS = "SUCCESS",
    FAILURE = "FAILURE"
}
export declare enum ChangeType {
    SUB_IMAGE = "SUB_IMAGE",
    RESUB_DELTA = "RESUB_DELTA",
    HEARTBEAT = "HEARTBEAT"
}
export declare enum SegmentType {
    SEG_START = "SEG_START",
    SEG_END = "SEG_END"
}
export declare enum BettingType {
    ODDS = "ODDS",
    LINE = "LINE",
    RANGE = "RANGE",
    ASIAN_HANDICAP_DOUBLE_LINE = "ASIAN_HANDICAP_DOUBLE_LINE",
    ASIAN_HANDICAP_SINGLE_LINE = "ASIAN_HANDICAP_SINGLE_LINE"
}
export declare enum StreamMarketStatus {
    INACTIVE = "INACTIVE",
    OPEN = "OPEN",
    SUSPENDED = "SUSPENDED",
    CLOSED = "CLOSED"
}
export declare enum StreamRunnerStatus {
    ACTIVE = "ACTIVE",
    WINNER = "WINNER",
    LOSER = "LOSER",
    PLACED = "PLACED",
    REMOVED_VACANT = "REMOVED_VACANT",
    REMOVED = "REMOVED",
    HIDDEN = "HIDDEN"
}
export declare enum OrderSide {
    BACK = "B",
    LAY = "L"
}
export declare enum StreamOrderStatus {
    EXECUTABLE = "E",
    EXECUTION_COMPLETE = "EC"
}
export declare enum StreamPersistenceType {
    LAPSE = "L",
    PERSIST = "P",
    MARKET_ON_CLOSE = "MOC"
}
export declare enum StreamOrderType {
    LIMIT = "L",
    MARKET_ON_CLOSE = "MOC",
    LIMIT_ON_CLOSE = "LOC"
}
//# sourceMappingURL=betfair-exchange-stream-api-types.d.ts.map