UNPKG

@drift-labs/sdk

Version:
116 lines (115 loc) 5.22 kB
/// <reference types="node" /> import { User } from '../user'; import { DriftClient } from '../driftClient'; import { UserAccount, OrderRecord } from '../types'; import { WrappedEvent } from '../events/types'; import { DLOB } from '../dlob/DLOB'; import { UserSubscriptionConfig } from '../userConfig'; import { DataAndSlot, UserEvents } from '../accounts/types'; import { ProtectMakerParamsMap } from '../dlob/types'; import { PublicKey } from '@solana/web3.js'; import { UserAccountFilterCriteria as UserFilterCriteria, UserMapConfig } from './userMapConfig'; import StrictEventEmitter from 'strict-event-emitter-types'; import { EventEmitter } from 'events'; export interface UserMapInterface { eventEmitter: StrictEventEmitter<EventEmitter, UserEvents>; subscribe(): Promise<void>; unsubscribe(): Promise<void>; addPubkey(userAccountPublicKey: PublicKey, userAccount?: UserAccount, slot?: number, accountSubscription?: UserSubscriptionConfig): Promise<void>; has(key: string): boolean; get(key: string): User | undefined; getWithSlot(key: string): DataAndSlot<User> | undefined; mustGet(key: string, accountSubscription?: UserSubscriptionConfig): Promise<User>; mustGetWithSlot(key: string, accountSubscription?: UserSubscriptionConfig): Promise<DataAndSlot<User>>; getUserAuthority(key: string): PublicKey | undefined; updateWithOrderRecord(record: OrderRecord): Promise<void>; values(): IterableIterator<User>; valuesWithSlot(): IterableIterator<DataAndSlot<User>>; entries(): IterableIterator<[string, User]>; entriesWithSlot(): IterableIterator<[string, DataAndSlot<User>]>; } export declare class UserMap implements UserMapInterface { private userMap; driftClient: DriftClient; eventEmitter: StrictEventEmitter<EventEmitter, UserEvents>; private connection; private commitment; private includeIdle; private filterByPoolId?; private additionalFilters?; private disableSyncOnTotalAccountsChange; private lastNumberOfSubAccounts; private subscription; private stateAccountUpdateCallback; private decode; private mostRecentSlot; private syncConfig; private syncPromise?; private syncPromiseResolver; private throwOnFailedSync; /** * Constructs a new UserMap instance. */ constructor(config: UserMapConfig); subscribe(): Promise<void>; addPubkey(userAccountPublicKey: PublicKey, userAccount?: UserAccount, slot?: number, accountSubscription?: UserSubscriptionConfig): Promise<void>; has(key: string): boolean; /** * gets the User for a particular userAccountPublicKey, if no User exists, undefined is returned * @param key userAccountPublicKey to get User for * @returns user User | undefined */ get(key: string): User | undefined; getWithSlot(key: string): DataAndSlot<User> | undefined; /** * gets the User for a particular userAccountPublicKey, if no User exists, new one is created * @param key userAccountPublicKey to get User for * @returns User */ mustGet(key: string, accountSubscription?: UserSubscriptionConfig): Promise<User>; mustGetWithSlot(key: string, accountSubscription?: UserSubscriptionConfig): Promise<DataAndSlot<User>>; mustGetUserAccount(key: string): Promise<UserAccount>; /** * gets the Authority for a particular userAccountPublicKey, if no User exists, undefined is returned * @param key userAccountPublicKey to get User for * @returns authority PublicKey | undefined */ getUserAuthority(key: string): PublicKey | undefined; /** * implements the {@link DLOBSource} interface * create a DLOB from all the subscribed users * @param slot */ getDLOB(slot: number, protectedMakerParamsMap?: ProtectMakerParamsMap): Promise<DLOB>; updateWithOrderRecord(record: OrderRecord): Promise<void>; updateWithEventRecord(record: WrappedEvent<any>): Promise<void>; values(): IterableIterator<User>; valuesWithSlot(): IterableIterator<DataAndSlot<User>>; entries(): IterableIterator<[string, User]>; entriesWithSlot(): IterableIterator<[string, DataAndSlot<User>]>; size(): number; /** * Returns a unique list of authorities for all users in the UserMap that meet the filter criteria * @param filterCriteria: Users must meet these criteria to be included * @returns */ getUniqueAuthorities(filterCriteria?: UserFilterCriteria): PublicKey[]; sync(): Promise<void>; private getFilters; /** * Syncs the UserMap using the default sync method (single getProgramAccounts call with filters). * This method may fail when drift has too many users. (nodejs response size limits) * @returns */ private defaultSync; /** * Syncs the UserMap using the paginated sync method (multiple getMultipleAccounts calls with filters). * This method is more reliable when drift has many users. * @returns */ private paginatedSync; unsubscribe(): Promise<void>; updateUserAccount(key: string, userAccount: UserAccount, slot: number): Promise<void>; updateLatestSlot(slot: number): void; getSlot(): number; }