///
import { DriftClientAccountSubscriber, DriftClientAccountEvents, DataAndSlot } from './types';
import { AccountSubscriber } from './types';
import { SpotMarketAccount, PerpMarketAccount, StateAccount } from '../types';
import { Program } from '@coral-xyz/anchor';
import StrictEventEmitter from 'strict-event-emitter-types';
import { EventEmitter } from 'events';
import { Commitment, PublicKey } from '@solana/web3.js';
import { OracleInfo, OraclePriceData } from '../oracles/types';
import { OracleClientCache } from '../oracles/oracleClientCache';
export declare class WebSocketDriftClientAccountSubscriber implements DriftClientAccountSubscriber {
isSubscribed: boolean;
program: Program;
commitment?: Commitment;
perpMarketIndexes: number[];
spotMarketIndexes: number[];
oracleInfos: OracleInfo[];
oracleClientCache: OracleClientCache;
resubTimeoutMs?: number;
shouldFindAllMarketsAndOracles: boolean;
eventEmitter: StrictEventEmitter;
stateAccountSubscriber?: AccountSubscriber;
perpMarketAccountSubscribers: Map>;
spotMarketAccountSubscribers: Map>;
oracleSubscribers: Map>;
private isSubscribing;
private subscriptionPromise;
private subscriptionPromiseResolver;
constructor(program: Program, perpMarketIndexes: number[], spotMarketIndexes: number[], oracleInfos: OracleInfo[], shouldFindAllMarketsAndOracles: boolean, resubTimeoutMs?: number, commitment?: Commitment);
subscribe(): Promise;
subscribeToPerpMarketAccounts(): Promise;
subscribeToPerpMarketAccount(marketIndex: number): Promise;
subscribeToSpotMarketAccounts(): Promise;
subscribeToSpotMarketAccount(marketIndex: number): Promise;
subscribeToOracles(): Promise;
subscribeToOracle(oracleInfo: OracleInfo): Promise;
unsubscribeFromMarketAccounts(): Promise;
unsubscribeFromSpotMarketAccounts(): Promise;
unsubscribeFromOracles(): Promise;
fetch(): Promise;
unsubscribe(): Promise;
addSpotMarket(marketIndex: number): Promise;
addPerpMarket(marketIndex: number): Promise;
addOracle(oracleInfo: OracleInfo): Promise;
assertIsSubscribed(): void;
getStateAccountAndSlot(): DataAndSlot;
getMarketAccountAndSlot(marketIndex: number): DataAndSlot | undefined;
getMarketAccountsAndSlots(): DataAndSlot[];
getSpotMarketAccountAndSlot(marketIndex: number): DataAndSlot | undefined;
getSpotMarketAccountsAndSlots(): DataAndSlot[];
getOraclePriceDataAndSlot(oraclePublicKey: PublicKey): DataAndSlot | undefined;
}