import { BookChange, BookTicker, DerivativeTicker, OptionSummary, Trade } from '../types.ts';
import { Mapper } from './mapper.ts';
export declare class BullishTradesMapper implements Mapper<'bullish', Trade> {
    canHandle(message: BullishMessage): message is BullishAnonymousTradeUpdateMessage;
    getFilters(symbols?: string[]): {
        channel: "V1TAAnonymousTradeUpdate";
        symbols: string[] | undefined;
    }[];
    map(message: BullishAnonymousTradeUpdateMessage, localTimestamp: Date): IterableIterator<Trade>;
    private mapBullishTradeSide;
}
export declare class BullishBookChangeMapper implements Mapper<'bullish', BookChange> {
    canHandle(message: BullishMessage): message is BullishLevel2Message;
    getFilters(symbols?: string[]): {
        channel: "V1TALevel2";
        symbols: string[] | undefined;
    }[];
    map(message: BullishLevel2Message, localTimestamp: Date): IterableIterator<BookChange>;
    private mapLevels;
}
export declare class BullishBookTickerMapper implements Mapper<'bullish', BookTicker> {
    canHandle(message: BullishMessage): message is BullishLevel1Message;
    getFilters(symbols?: string[]): {
        channel: "V1TALevel1";
        symbols: string[] | undefined;
    }[];
    map(message: BullishLevel1Message, localTimestamp: Date): IterableIterator<BookTicker>;
}
export declare class BullishDerivativeTickerMapper implements Mapper<'bullish', DerivativeTicker> {
    private readonly pendingTickerInfoHelper;
    private readonly indexPrices;
    canHandle(message: BullishMessage): message is BullishDerivativeTickerMessage | BullishIndexPriceMessage;
    getFilters(symbols?: string[]): ({
        channel: "V1TATickerResponse";
        symbols: string[] | undefined;
    } | {
        channel: "V1TAIndexPrice";
        symbols: string[] | undefined;
    })[];
    map(message: BullishDerivativeTickerMessage | BullishIndexPriceMessage, localTimestamp: Date): IterableIterator<DerivativeTicker>;
}
export declare class BullishOptionSummaryMapper implements Mapper<'bullish', OptionSummary> {
    private readonly indexPrices;
    canHandle(message: BullishMessage): message is BullishOptionTickerMessage | BullishIndexPriceMessage;
    getFilters(symbols?: string[]): ({
        channel: "V1TATickerResponse";
        symbols: string[] | undefined;
    } | {
        channel: "V1TAIndexPrice";
        symbols: string[] | undefined;
    })[];
    map(message: BullishOptionTickerMessage | BullishIndexPriceMessage, localTimestamp: Date): IterableIterator<OptionSummary>;
}
type BullishMessage = BullishDataMessage<string, unknown>;
type BullishDataMessage<TDataType extends string, TData> = {
    type: BullishMessageRole;
    dataType: TDataType;
    data: TData;
};
type BullishMessageRole = 'snapshot' | 'update';
type BullishAnonymousTradeUpdateMessage = BullishDataMessage<'V1TAAnonymousTradeUpdate', BullishAnonymousTradeUpdateData>;
type BullishLevel2Message = BullishDataMessage<'V1TALevel2', BullishLevel2Data>;
type BullishLevel1Message = BullishDataMessage<'V1TALevel1', BullishLevel1Data>;
type BullishDerivativeTickerMessage = BullishDataMessage<'V1TATickerResponse', BullishDerivativeTickerData>;
type BullishOptionTickerMessage = BullishDataMessage<'V1TATickerResponse', BullishOptionTickerData>;
type BullishIndexPriceMessage = BullishDataMessage<'V1TAIndexPrice', BullishIndexPriceData>;
type BullishAnonymousTradeUpdateData = {
    symbol: string;
    createdAtTimestamp: string;
    publishedAtTimestamp: string;
    trades: BullishAnonymousTrade[];
};
type BullishAnonymousTrade = {
    symbol: string;
    tradeId: string;
    price: string;
    quantity: string;
    side: BullishTradeSide;
    isTaker: boolean;
    createdAtTimestamp: string;
    publishedAtTimestamp: string;
    lastUpdatedTimestamp: string;
    createdAtDatetime: string;
};
type BullishTradeSide = 'BUY' | 'SELL';
type BullishLevel2Data = {
    timestamp: string;
    bids: string[];
    asks: string[];
    publishedAtTimestamp: string;
    datetime: string;
    sequenceNumberRange: [number, number];
    symbol: string;
};
type BullishLevel1Data = {
    timestamp: string;
    bid: [string, string];
    ask: [string, string];
    publishedAtTimestamp: string;
    datetime: string;
    sequenceNumber: string;
    symbol: string;
};
type BullishIndexPriceData = {
    price: string;
    assetSymbol: string;
    updatedAtDatetime: string;
    updatedAtTimestamp: string;
};
type BullishDerivativeTickerData = BullishTickerDataBase & {
    markPrice: string | null;
    fundingRate?: string | null;
    openInterest: string | null;
    openInterestUSD: string | null;
};
type BullishOptionTickerData = BullishTickerDataBase & {
    markPrice: string | null;
    openInterest: string | null;
    openInterestUSD: string | null;
    delta: string | null;
    gamma: string | null;
    theta: string | null;
    vega: string | null;
    impliedVolatility: string | null;
};
type BullishTickerDataBase = {
    askVolume: string | null;
    average: string | null;
    baseVolume: string;
    bestAsk?: string | null;
    bestBid?: string | null;
    bidVolume?: string | null;
    change: string;
    close: string | null;
    createdAtTimestamp: string;
    publishedAtTimestamp: string;
    high: string | null;
    last: string | null;
    lastTradeDatetime: string | null;
    lastTradeSize: string;
    low: string | null;
    open: string | null;
    percentage: string;
    quoteVolume: string;
    symbol: string;
    type: 'ticker';
    vwap: string | null;
    currentPrice: string | null;
    ammData: BullishTickerAmmData[] | null;
    createdAtDatetime: string;
    otcBaseVolume: string;
};
type BullishTickerAmmData = {
    feeTierId: string;
    tierPrice: string;
    currentPrice: string;
    bidSpreadFee: string;
    askSpreadFee: string;
};
export {};
//# sourceMappingURL=bullish.d.ts.map