/// <reference types="node" />
import { Context, PublicKey } from '@solana/web3.js';
import { DriftProgram } from '../config';
import { Client } from '../isomorphic/grpc';
import { DataAndSlot, GrpcConfigs, ResubOpts } from './types';
export declare class grpcMultiAccountSubscriber<T, U = undefined> {
    private client;
    private stream;
    private commitmentLevel;
    private program;
    private accountName;
    private decodeBufferFn?;
    private resubOpts?;
    private onUnsubscribe?;
    listenerId?: number;
    isUnsubscribing: boolean;
    private timeoutId?;
    private receivingData;
    private subscribedAccounts;
    private onChangeMap;
    private dataMap;
    private accountPropsMap;
    private bufferMap;
    private constructor();
    static create<T, U = undefined>(grpcConfigs: GrpcConfigs, accountName: string, program: DriftProgram, decodeBuffer?: (buffer: Buffer, pubkey?: string, accountProps?: U) => T, resubOpts?: ResubOpts, clientProp?: Client, onUnsubscribe?: () => Promise<void>, accountPropsMap?: Map<string, U | Array<U>>): Promise<grpcMultiAccountSubscriber<T, U>>;
    setAccountData(accountPubkey: string, data: T, slot?: number): void;
    getAccountData(accountPubkey: string): DataAndSlot<T> | undefined;
    getAccountDataMap(): Map<string, DataAndSlot<T>>;
    fetch(): Promise<void>;
    subscribe(accounts: PublicKey[], onChange: (accountId: PublicKey, data: T, context: Context, buffer: Buffer, accountProps: U) => void): Promise<void>;
    addAccounts(accounts: PublicKey[]): Promise<void>;
    removeAccounts(accounts: PublicKey[]): Promise<void>;
    unsubscribe(): Promise<void>;
    private setTimeout;
    private capitalize;
}
