/// <reference types="node" />
/// <reference types="node" />
import { AccountSubscriber, DataAndSlot, DelistedMarketSetting, DriftClientAccountEvents, DriftClientAccountSubscriber, ResubOpts } from './types';
import { PerpMarketAccount, SpotMarketAccount, StateAccount } from '../types';
import StrictEventEmitter from 'strict-event-emitter-types';
import { EventEmitter } from 'events';
import { WebSocketAccountSubscriber } from './webSocketAccountSubscriber';
import { Commitment, PublicKey } from '@solana/web3.js';
import { OracleInfo, OraclePriceData } from '../oracles/types';
import { OracleClientCache } from '../oracles/oracleClientCache';
import { DriftProgram } from '../config';
import { WebSocketAccountSubscriberV2 } from './webSocketAccountSubscriberV2';
export declare class WebSocketDriftClientAccountSubscriber implements DriftClientAccountSubscriber {
    isSubscribed: boolean;
    program: DriftProgram;
    commitment?: Commitment;
    perpMarketIndexes: number[];
    spotMarketIndexes: number[];
    oracleInfos: OracleInfo[];
    oracleClientCache: OracleClientCache;
    resubOpts?: ResubOpts;
    shouldFindAllMarketsAndOracles: boolean;
    eventEmitter: StrictEventEmitter<EventEmitter, DriftClientAccountEvents>;
    stateAccountSubscriber?: AccountSubscriber<StateAccount>;
    perpMarketAccountSubscribers: Map<number, AccountSubscriber<PerpMarketAccount>>;
    perpOracleMap: Map<number, PublicKey>;
    perpOracleStringMap: Map<number, string>;
    spotMarketAccountSubscribers: Map<number, AccountSubscriber<SpotMarketAccount>>;
    spotOracleMap: Map<number, PublicKey>;
    spotOracleStringMap: Map<number, string>;
    oracleSubscribers: Map<string, AccountSubscriber<OraclePriceData>>;
    delistedMarketSetting: DelistedMarketSetting;
    initialPerpMarketAccountData: Map<number, PerpMarketAccount>;
    initialSpotMarketAccountData: Map<number, SpotMarketAccount>;
    initialOraclePriceData: Map<string, OraclePriceData>;
    customPerpMarketAccountSubscriber?: new (accountName: string, program: DriftProgram, accountPublicKey: PublicKey, decodeBuffer?: (buffer: Buffer) => any, resubOpts?: ResubOpts, commitment?: Commitment) => AccountSubscriber<any>;
    customOracleAccountSubscriber?: new (accountName: string, program: DriftProgram, accountPublicKey: PublicKey, decodeBuffer?: (buffer: Buffer) => any, resubOpts?: ResubOpts, commitment?: Commitment) => AccountSubscriber<any>;
    protected isSubscribing: boolean;
    protected subscriptionPromise: Promise<boolean>;
    protected subscriptionPromiseResolver: (val: boolean) => void;
    constructor(program: DriftProgram, perpMarketIndexes: number[], spotMarketIndexes: number[], oracleInfos: OracleInfo[], shouldFindAllMarketsAndOracles: boolean, delistedMarketSetting: DelistedMarketSetting, resubOpts?: ResubOpts, commitment?: Commitment, customPerpMarketAccountSubscriber?: new (accountName: string, program: DriftProgram, accountPublicKey: PublicKey, decodeBuffer?: (buffer: Buffer) => any, resubOpts?: ResubOpts, commitment?: Commitment) => WebSocketAccountSubscriberV2<any> | WebSocketAccountSubscriber<any>, customOracleAccountSubscriber?: new (accountName: string, program: DriftProgram, accountPublicKey: PublicKey, decodeBuffer?: (buffer: Buffer) => any, resubOpts?: ResubOpts, commitment?: Commitment) => WebSocketAccountSubscriberV2<any> | WebSocketAccountSubscriber<any>);
    subscribe(): Promise<boolean>;
    chunks: <T>(array: readonly T[], size: number) => T[][];
    setInitialData(): Promise<void>;
    removeInitialData(): void;
    subscribeToPerpMarketAccounts(): Promise<boolean>;
    subscribeToPerpMarketAccount(marketIndex: number): Promise<boolean>;
    subscribeToSpotMarketAccounts(): Promise<boolean>;
    subscribeToSpotMarketAccount(marketIndex: number): Promise<boolean>;
    subscribeToOracles(): Promise<boolean>;
    subscribeToOracle(oracleInfo: OracleInfo): Promise<boolean>;
    unsubscribeFromMarketAccounts(): Promise<void>;
    unsubscribeFromSpotMarketAccounts(): Promise<void>;
    unsubscribeFromOracles(): Promise<void>;
    fetch(): Promise<void>;
    unsubscribe(): Promise<void>;
    addSpotMarket(marketIndex: number): Promise<boolean>;
    addPerpMarket(marketIndex: number): Promise<boolean>;
    addOracle(oracleInfo: OracleInfo): Promise<boolean>;
    setPerpOracleMap(): Promise<void>;
    setSpotOracleMap(): Promise<void>;
    handleDelistedMarkets(): Promise<void>;
    assertIsSubscribed(): void;
    getStateAccountAndSlot(): DataAndSlot<StateAccount>;
    getMarketAccountAndSlot(marketIndex: number): DataAndSlot<PerpMarketAccount> | undefined;
    getMarketAccountsAndSlots(): DataAndSlot<PerpMarketAccount>[];
    getSpotMarketAccountAndSlot(marketIndex: number): DataAndSlot<SpotMarketAccount> | undefined;
    getSpotMarketAccountsAndSlots(): DataAndSlot<SpotMarketAccount>[];
    getOraclePriceDataAndSlot(oracleId: string): DataAndSlot<OraclePriceData> | undefined;
    getOraclePriceDataAndSlotForPerpMarket(marketIndex: number): DataAndSlot<OraclePriceData> | undefined;
    getOraclePriceDataAndSlotForSpotMarket(marketIndex: number): DataAndSlot<OraclePriceData> | undefined;
}
//# sourceMappingURL=webSocketDriftClientAccountSubscriber.d.ts.map