/// <reference types="node" />
import { AccountToPoll, DataAndSlot, DelistedMarketSetting, DriftClientAccountEvents, DriftClientAccountSubscriber, OraclesToPoll } from './types';
import StrictEventEmitter from 'strict-event-emitter-types';
import { EventEmitter } from 'events';
import { PerpMarketAccount, SpotMarketAccount, StateAccount, UserAccount } from '../types';
import { BulkAccountLoader } from './bulkAccountLoader';
import { PublicKey } from '@solana/web3.js';
import { OracleInfo, OraclePriceData } from '../oracles/types';
import { OracleClientCache } from '../oracles/oracleClientCache';
import { DriftProgram } from '../config';
export declare class PollingDriftClientAccountSubscriber implements DriftClientAccountSubscriber {
    isSubscribed: boolean;
    program: DriftProgram;
    perpMarketIndexes: number[];
    spotMarketIndexes: number[];
    oracleInfos: OracleInfo[];
    oracleClientCache: OracleClientCache;
    shouldFindAllMarketsAndOracles: boolean;
    eventEmitter: StrictEventEmitter<EventEmitter, DriftClientAccountEvents>;
    accountLoader: BulkAccountLoader;
    accountsToPoll: Map<string, AccountToPoll>;
    oraclesToPoll: Map<string, OraclesToPoll>;
    errorCallbackId?: string;
    state?: DataAndSlot<StateAccount>;
    perpMarket: Map<number, DataAndSlot<PerpMarketAccount>>;
    perpOracleMap: Map<number, PublicKey>;
    perpOracleStringMap: Map<number, string>;
    spotMarket: Map<number, DataAndSlot<SpotMarketAccount>>;
    spotOracleMap: Map<number, PublicKey>;
    spotOracleStringMap: Map<number, string>;
    oracles: Map<string, DataAndSlot<OraclePriceData>>;
    user?: DataAndSlot<UserAccount>;
    delistedMarketSetting: DelistedMarketSetting;
    private isSubscribing;
    private subscriptionPromise;
    private subscriptionPromiseResolver;
    constructor(program: DriftProgram, accountLoader: BulkAccountLoader, perpMarketIndexes: number[], spotMarketIndexes: number[], oracleInfos: OracleInfo[], shouldFindAllMarketsAndOracles: boolean, delistedMarketSetting: DelistedMarketSetting);
    subscribe(): Promise<boolean>;
    updateAccountsToPoll(): Promise<void>;
    updatePerpMarketAccountsToPoll(): Promise<boolean>;
    addPerpMarketAccountToPoll(marketIndex: number): Promise<boolean>;
    updateSpotMarketAccountsToPoll(): Promise<boolean>;
    addSpotMarketAccountToPoll(marketIndex: number): Promise<boolean>;
    updateOraclesToPoll(): boolean;
    addOracleToPoll(oracleInfo: OracleInfo): boolean;
    addToAccountLoader(): Promise<void>;
    addAccountToAccountLoader(accountToPoll: AccountToPoll): Promise<void>;
    addOracleToAccountLoader(oracleToPoll: OraclesToPoll): Promise<void>;
    fetch(): Promise<void>;
    didSubscriptionSucceed(): boolean;
    unsubscribe(): Promise<void>;
    addSpotMarket(marketIndex: number): Promise<boolean>;
    addPerpMarket(marketIndex: number): Promise<boolean>;
    addOracle(oracleInfo: OracleInfo): Promise<boolean>;
    private pauseForOracleToBeAdded;
    setPerpOracleMap(): Promise<void>;
    setSpotOracleMap(): Promise<void>;
    handleDelistedMarkets(): 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;
    updateAccountLoaderPollingFrequency(pollingFrequency: number): void;
}
//# sourceMappingURL=pollingDriftClientAccountSubscriber.d.ts.map