@drift-labs/sdk-browser
Version: 
SDK for Drift Protocol
116 lines (115 loc) • 5.22 kB
TypeScript
/// <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;
}