/// <reference types="node" />
import StrictEventEmitter from 'strict-event-emitter-types';
import { EventEmitter } from 'events';
import { OracleInfo, OraclePriceData } from '../oracles/types';
import { PublicKey } from '@solana/web3.js';
import { DriftProgram } from '../config';
import { AccountSubscriber, DataAndSlot, DelistedMarketSetting, DriftClientAccountEvents, DriftClientAccountSubscriber, GrpcConfigs, ResubOpts } from './types';
import { PerpMarketAccount, SpotMarketAccount, StateAccount } from '../types';
import { OracleClientCache } from '../oracles/oracleClientCache';
export declare class grpcDriftClientAccountSubscriberV2 implements DriftClientAccountSubscriber {
    private grpcConfigs;
    private perpMarketsSubscriber?;
    private spotMarketsSubscriber?;
    private oracleMultiSubscriber?;
    private perpMarketIndexToAccountPubkeyMap;
    private spotMarketIndexToAccountPubkeyMap;
    private delistedMarketSetting;
    eventEmitter: StrictEventEmitter<EventEmitter, DriftClientAccountEvents>;
    isSubscribed: boolean;
    isSubscribing: boolean;
    program: DriftProgram;
    perpMarketIndexes: number[];
    spotMarketIndexes: number[];
    shouldFindAllMarketsAndOracles: boolean;
    oracleInfos: OracleInfo[];
    initialPerpMarketAccountData: Map<number, PerpMarketAccount>;
    initialSpotMarketAccountData: Map<number, SpotMarketAccount>;
    initialOraclePriceData: Map<string, OraclePriceData>;
    perpOracleMap: Map<number, PublicKey>;
    perpOracleStringMap: Map<number, string>;
    spotOracleMap: Map<number, PublicKey>;
    spotOracleStringMap: Map<number, string>;
    private oracleIdToOracleDataMap;
    stateAccountSubscriber?: AccountSubscriber<StateAccount>;
    oracleClientCache: OracleClientCache;
    private resubOpts?;
    private subscriptionPromise;
    protected subscriptionPromiseResolver: (val: boolean) => void;
    constructor(grpcConfigs: GrpcConfigs, program: DriftProgram, perpMarketIndexes: number[], spotMarketIndexes: number[], oracleInfos: OracleInfo[], shouldFindAllMarketsAndOracles: boolean, delistedMarketSetting: DelistedMarketSetting, resubOpts?: ResubOpts);
    chunks: <T>(array: readonly T[], size: number) => T[][];
    setInitialData(): Promise<void>;
    addPerpMarket(_marketIndex: number): Promise<boolean>;
    addSpotMarket(_marketIndex: number): Promise<boolean>;
    addOracle(oracleInfo: OracleInfo): Promise<boolean>;
    subscribe(): Promise<boolean>;
    fetch(): Promise<void>;
    private assertIsSubscribed;
    getStateAccountAndSlot(): DataAndSlot<StateAccount>;
    getMarketAccountsAndSlots(): DataAndSlot<PerpMarketAccount>[];
    getSpotMarketAccountsAndSlots(): DataAndSlot<SpotMarketAccount>[];
    getMarketAccountAndSlot(marketIndex: number): DataAndSlot<PerpMarketAccount> | undefined;
    getSpotMarketAccountAndSlot(marketIndex: number): DataAndSlot<SpotMarketAccount> | undefined;
    getOraclePriceDataAndSlot(oracleId: string): DataAndSlot<OraclePriceData> | undefined;
    getOraclePriceDataAndSlotForPerpMarket(marketIndex: number): DataAndSlot<OraclePriceData> | undefined;
    getOraclePriceDataAndSlotForSpotMarket(marketIndex: number): DataAndSlot<OraclePriceData> | undefined;
    setPerpOracleMap(): Promise<void>;
    setSpotOracleMap(): Promise<void>;
    subscribeToPerpMarketAccounts(): Promise<boolean>;
    subscribeToSpotMarketAccounts(): Promise<boolean>;
    subscribeToOracles(): Promise<boolean>;
    handleDelistedMarkets(): Promise<void>;
    removeInitialData(): void;
    unsubscribeFromOracles(): Promise<void>;
    unsubscribe(): Promise<void>;
}
//# sourceMappingURL=grpcDriftClientAccountSubscriberV2.d.ts.map