/// /// 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; }