///
///
import { PublicKey } from '@solana/web3.js';
import { DriftClientAccountEvents, AccountSubscriber } from './types';
import { StateAccount, PerpMarketAccount, SpotMarketAccount } from '../types';
import { OracleInfo, OraclePriceData } from '../oracles/types';
import { AxiosInstance } from 'axios';
import StrictEventEmitter from 'strict-event-emitter-types';
import { EventEmitter } from 'events';
export type MarketInfo = {
marketIndex: number;
publicKey: PublicKey;
};
export type PublicAccountInfo = {
statePublicKey: PublicKey;
perpMarketInfos: MarketInfo[];
spotMarketInfos: MarketInfo[];
oracleInfos: OracleInfo[];
};
export type PublicData = {
channel: string;
symbol: string;
data: string;
};
export declare enum AccountType {
STATE = "state",
PERP = "perpMarket",
SPOT = "spotMarket",
ORACLE = "oracle"
}
export declare enum EventType {
UPDATE = "update",
STATE_ACCOUNT_UPDATE = "stateAccountUpdate",
PERP_MARKET_UPDATE = "perpMarketAccountUpdate",
SPOT_MARKET_UPDATE = "spotMarketAccountUpdate",
ORACLE_PRICE_UPDATE = "oraclePriceUpdate"
}
export declare function log(data: string): void;
export default class RemoteUtil {
restUrl: string;
wsUrl: string;
http: AxiosInstance;
webSocket: any;
httpTimeoutMs: number;
pingTimeoutId?: NodeJS.Timeout;
wsPingTimeoutMs: number;
connectTimeoutId?: NodeJS.Timeout;
wsConnectTimeoutMs: number;
eventEmitter: StrictEventEmitter;
stateAccountSubscriber: AccountSubscriber;
perpMarketAccountSubscribers: Map>;
spotMarketAccountSubscribers: Map>;
oracleSubscribers: Map>;
publicAccountInfo: PublicAccountInfo;
perpPublicKeyMarketMap: Map;
spotPublicKeyMarketMap: Map;
constructor(eventEmitter: StrictEventEmitter, perpMarketAccountSubscribers: Map>, spotMarketAccountSubscribers: Map>, oracleSubscribers: Map>);
setStateAccountSubscriber(stateAccountSubscriber: AccountSubscriber): void;
getPublicAccountInfo(): Promise;
connect(): Promise;
private initData;
private updateData;
private subscribe;
private httpGet;
private setPingTimeout;
private setConnectTimeout;
private formatPublicAccountInfo;
}