///
///
import { SpotMarketAccount, PerpMarketAccount, OracleSource, StateAccount, UserAccount, UserStatsAccount, InsuranceFundStake } from '../types';
import StrictEventEmitter from 'strict-event-emitter-types';
import { EventEmitter } from 'events';
import { Context, PublicKey } from '@solana/web3.js';
import { Account } from '@solana/spl-token';
import { OracleInfo, OraclePriceData } from '..';
export interface AccountSubscriber {
dataAndSlot?: DataAndSlot;
subscribe(onChange: (data: T) => void): Promise;
fetch(): Promise;
unsubscribe(): Promise;
setData(userAccount: T, slot?: number): void;
}
export interface ProgramAccountSubscriber {
subscribe(onChange: (accountId: PublicKey, data: T, context: Context) => void): Promise;
unsubscribe(): Promise;
}
export declare class NotSubscribedError extends Error {
name: string;
}
export interface DriftClientAccountEvents {
stateAccountUpdate: (payload: StateAccount) => void;
perpMarketAccountUpdate: (payload: PerpMarketAccount) => void;
spotMarketAccountUpdate: (payload: SpotMarketAccount) => void;
oraclePriceUpdate: (publicKey: PublicKey, data: OraclePriceData) => void;
userAccountUpdate: (payload: UserAccount) => void;
update: void;
error: (e: Error) => void;
}
export interface DriftClientMetricsEvents {
txSigned: void;
}
export interface DriftClientAccountSubscriber {
eventEmitter: StrictEventEmitter;
isSubscribed: boolean;
subscribe(): Promise;
fetch(): Promise;
unsubscribe(): Promise;
addPerpMarket(marketIndex: number): Promise;
addSpotMarket(marketIndex: number): Promise;
addOracle(oracleInfo: OracleInfo): Promise;
getStateAccountAndSlot(): DataAndSlot;
getMarketAccountAndSlot(marketIndex: number): DataAndSlot | undefined;
getMarketAccountsAndSlots(): DataAndSlot[];
getSpotMarketAccountAndSlot(marketIndex: number): DataAndSlot | undefined;
getSpotMarketAccountsAndSlots(): DataAndSlot[];
getOraclePriceDataAndSlot(oraclePublicKey: PublicKey): DataAndSlot | undefined;
updateAccountLoaderPollingFrequency?: (pollingFrequency: number) => void;
}
export interface UserAccountEvents {
userAccountUpdate: (payload: UserAccount) => void;
update: void;
error: (e: Error) => void;
}
export interface UserAccountSubscriber {
eventEmitter: StrictEventEmitter;
isSubscribed: boolean;
subscribe(userAccount?: UserAccount): Promise;
fetch(): Promise;
updateData(userAccount: UserAccount, slot: number): void;
unsubscribe(): Promise;
getUserAccountAndSlot(): DataAndSlot;
}
export interface TokenAccountEvents {
tokenAccountUpdate: (payload: Account) => void;
update: void;
error: (e: Error) => void;
}
export interface TokenAccountSubscriber {
eventEmitter: StrictEventEmitter;
isSubscribed: boolean;
subscribe(): Promise;
fetch(): Promise;
unsubscribe(): Promise;
getTokenAccountAndSlot(): DataAndSlot;
}
export interface InsuranceFundStakeAccountSubscriber {
eventEmitter: StrictEventEmitter;
isSubscribed: boolean;
subscribe(): Promise;
fetch(): Promise;
unsubscribe(): Promise;
getInsuranceFundStakeAccountAndSlot(): DataAndSlot;
}
export interface InsuranceFundStakeAccountEvents {
insuranceFundStakeAccountUpdate: (payload: InsuranceFundStake) => void;
update: void;
error: (e: Error) => void;
}
export interface OracleEvents {
oracleUpdate: (payload: OraclePriceData) => void;
update: void;
error: (e: Error) => void;
}
export interface OracleAccountSubscriber {
eventEmitter: StrictEventEmitter;
isSubscribed: boolean;
subscribe(): Promise;
fetch(): Promise;
unsubscribe(): Promise;
getOraclePriceData(): DataAndSlot;
}
export type AccountToPoll = {
key: string;
publicKey: PublicKey;
eventType: string;
callbackId?: string;
mapKey?: number;
};
export type OraclesToPoll = {
publicKey: PublicKey;
source: OracleSource;
callbackId?: string;
};
export type BufferAndSlot = {
slot: number;
buffer: Buffer | undefined;
};
export type DataAndSlot = {
data: T;
slot: number;
};
export interface UserStatsAccountEvents {
userStatsAccountUpdate: (payload: UserStatsAccount) => void;
update: void;
error: (e: Error) => void;
}
export interface UserStatsAccountSubscriber {
eventEmitter: StrictEventEmitter;
isSubscribed: boolean;
subscribe(userStatsAccount?: UserStatsAccount): Promise;
fetch(): Promise;
unsubscribe(): Promise;
getUserStatsAccountAndSlot(): DataAndSlot;
}