UNPKG

@sprucelabs/mercury-client

Version:

The simple way to interact with the Spruce Experience Platform

90 lines (89 loc) 5.26 kB
import { EmitCallback, EventContract, EventName, EventSignature, MercuryAggregateResponse, SpruceSchemas } from '@sprucelabs/mercury-types'; import { Schema, SchemaValues } from '@sprucelabs/schema'; import { io, SocketOptions, ManagerOptions } from 'socket.io-client'; import { ConnectionOptions, MercuryClient } from '../types/client.types'; export default class MercurySocketIoClient<Contract extends EventContract> implements MercuryClient<Contract> { protected _eventContract?: Contract; protected get eventContract(): Contract; protected set eventContract(contract: Contract); static io: typeof io; private log; private host; private ioOptions; private socket?; private proxyToken; private emitTimeoutMs; private reconnectDelayMs; private listenerMap; private isReAuthing; private reconnectPromise; protected lastAuthOptions?: { skillId?: string | undefined; apiKey?: string | undefined; token?: string | undefined; }; private shouldReconnect; private connectionRetriesRemaining; private connectionRetries; private registeredListeners; private allowNextEventToBeAuthenticate; protected auth?: { skill?: SpruceSchemas.Spruce.v2020_07_22.Skill; person?: SpruceSchemas.Spruce.v2020_07_22.Person; }; private shouldAutoRegisterListeners; private isManuallyDisconnected; private isReconnecting; private id; private skipWaitIfReconnecting; private maxEmitRetries; private authRawResults?; protected authPromise?: any; protected shouldRegisterProxyOnReconnect: boolean; private reconnectKey?; constructor(options: { host: string; eventContract?: Contract; } & IoOptions); connect(): Promise<void>; private emitStatusChange; private attachConnectError; private attemptReconnectAfterDelay; protected reconnect(resolve: any, reject: any, retriesLeft: number): Promise<void>; protected waitIfReconnecting(): Promise<void>; private reRegisterAllListeners; private mapSocketErrorToSpruceError; emit<Name extends EventName<Contract>, IEventSignature extends EventSignature = Contract['eventSignatures'][EventName], EmitSchema extends Schema = IEventSignature['emitPayloadSchema'] extends Schema ? IEventSignature['emitPayloadSchema'] : never, ResponseSchema extends Schema = IEventSignature['responsePayloadSchema'] extends Schema ? IEventSignature['responsePayloadSchema'] : never, ResponsePayload = ResponseSchema extends Schema ? SchemaValues<ResponseSchema> : never>(eventName: Name, targetAndPayload?: (EmitSchema extends Schema ? SchemaValues<EmitSchema> : never) | EmitCallback<Contract, Name>, cb?: EmitCallback<Contract, Name>): Promise<MercuryAggregateResponse<ResponsePayload>>; private handleLocalEmit; emitAndFlattenResponses<Name extends EventName<Contract>, IEventSignature extends EventSignature = Contract['eventSignatures'][EventName], EmitSchema extends Schema = IEventSignature['emitPayloadSchema'] extends Schema ? IEventSignature['emitPayloadSchema'] : never, ResponseSchema extends Schema = IEventSignature['responsePayloadSchema'] extends Schema ? IEventSignature['responsePayloadSchema'] : never, ResponsePayload = ResponseSchema extends Schema ? SchemaValues<ResponseSchema> : never>(eventName: Name, payload?: (EmitSchema extends Schema ? SchemaValues<EmitSchema> : never) | EmitCallback<Contract, Name>, cb?: EmitCallback<Contract, Name>): Promise<ResponsePayload[]>; private _emit; protected assertValidEmitTargetAndPayload<Name extends EventName<Contract>>(eventName: Name, payload: any): void; private handleConfirmPinResponse; protected getEventSignatureByName<Name extends EventName<Contract>>(eventName: Name): SpruceSchemas.Mercury.v2020_12_25.EventSignature; setShouldAutoRegisterListeners(should: boolean): void; on<Name extends EventName<Contract>, IEventSignature extends EventSignature = Contract['eventSignatures'][EventName], EmitSchema extends Schema = IEventSignature['emitPayloadSchema'] extends Schema ? IEventSignature['emitPayloadSchema'] : never>(eventName: Name, cb: (payload: EmitSchema extends Schema ? SchemaValues<EmitSchema> : never) => IEventSignature['responsePayloadSchema'] extends Schema ? Promise<SchemaValues<IEventSignature['responsePayloadSchema']>> | SchemaValues<IEventSignature['responsePayloadSchema']> : Promise<void> | void): Promise<void>; private isEventLocal; off(eventName: EventName<Contract>, cb?: () => void): Promise<number>; private removeLocalListener; getId(): string; disconnect(): Promise<void>; authenticate(options: AuthenticateOptions): Promise<{ skill: any; person: any; }>; isAuthenticated(): boolean; isConnected(): boolean; private isSocketConnected; getProxyToken(): string | null; setProxyToken(token: string): void; registerProxyToken(): Promise<any>; getIsTestClient(): boolean; } type IoOptions = Partial<ManagerOptions & SocketOptions & ConnectionOptions>; export declare const authenticateFqen = "authenticate::v2020_12_25"; export interface AuthenticateOptions { skillId?: string; apiKey?: string; token?: string; } export {};