UNPKG

@xapp/chat-widget

Version:
137 lines (136 loc) 5.06 kB
import 'rollup-plugin-inject-process-env'; import { Request, Response } from "stentor-models"; import { ActionType } from "../store/ChatAction"; import { ChatServer, ChatServerOptions, OfflineMessage, VisitorInfoMessage } from "./ChatServer"; import { ChatMessageRequest, ChatServerMessage } from "./ChatServerMessage"; export interface StentorRouterChatConfig { readonly url: string; } export interface FailureData { readonly type: "BOT"; readonly tries: number; readonly delay: number; readonly error: string; } export interface ButtonPressedData { readonly id: string; } export interface ConnectionStatus { sessionCreated: boolean; errorMessage?: string; } export interface UserJoinedLeftData { showDivider?: boolean; message?: string; hideUserInfo?: boolean; } export type EventType = "account status" | "connection update" | "new message" | "user joined" | "user left" | "typing" | "stop typing" | "disconnect" | "reconnect" | "reconnect failed" | "reconnect error" | "barge in" | "barge out" | "failure" | "display button" | "dismiss button" | "button pressed" | "system-message" | "system-message-dismiss" | "missed messages" | "request missed messages" | "user backgrounded" | "user foregrounded" | "user disconnecting"; export interface VisitorInfo { deviceId: "Widget" | "Bot" | "Router"; userId: string; isAdmin: boolean; avatarPath?: string; displayName?: string; email?: string; urlAttributes: { path?: string[]; query?: { [name: string]: string; }; }; } export interface RouterMessage { event: EventType; data: MessageData; sender: VisitorInfo; sessionId: string; timeMs: number; attributes?: Record<string, any>; messageId?: string; } /** * Data payload for "missed messages" event */ export interface MissedMessagesData { messages: RouterMessage[]; } export type MessageData = Request | Response | ConnectionStatus | FailureData | ButtonPressedData | UserJoinedLeftData | MissedMessagesData | undefined; export type HandlerStore = { [event in EventType]: (data: MessageData, sender: VisitorInfo, ts: number, attributes?: Record<string, any>, messageId?: string) => void; }; export declare const ROUTER_USER = "router"; export declare class StentorRouterChat implements ChatServer { private dispatch; private isDisposed; private _userId; private _sessionId; private visitorInfo; private accessToken; private attributes; private routerAttributes; private isNewSession; private isAdmin; private urlAttributes; private readonly config; private readonly options; private readonly configurableMessages; private serverUrl; private ws; private handlers; private sessionCreated; private appId; private noOfServerErrors; private sleepTimeoutId; private readonly SLEEP_DELAY_MS; private receivedMessageIds; private readonly MESSAGE_DEDUP_CACHE_SIZE; constructor(config: StentorRouterChatConfig, options?: ChatServerOptions); init(dispatch: (action: ActionType) => void): void; private autoReconnect; private wsClose; private wsCreate; private checkConnection; private emit; private setAccountStatus; private setConnectionStatus; sendOfflineMsg(_: OfflineMessage, cb: (error?: Error) => void): void; sendChatMsg(message: ChatServerMessage, cb: (err?: Error) => void): Promise<void>; private sendFailureMessage; private sendDisconnectMessage; private checkSession; sendChatMsgRequest(serviceRequest: ChatMessageRequest, cb: (err?: Error) => void): Promise<void>; sendTyping(_isTyping: boolean): void; setVisitorInfo(visitorInfoMessage: VisitorInfoMessage, sessionId: string, cb: (error?: Error) => void): void; sendChatRating(): void; sendFile(_: File, cb: (err?: Error) => void): void; markAsRead(): void; flush(): void; dispose(): void; sleep(): void; wakeup(): void; private requestMissedMessages; /** * Notifies the router that the user is disconnecting (e.g., closing tab, navigating away). * This is a best-effort notification - it may not arrive before the page unloads. * Should be called from a beforeunload event handler. */ notifyDisconnecting(): void; bargeOut(_cb: (err?: Error) => void): Promise<void>; bargeIn(agentName: string, _cb: (err?: Error) => void): Promise<void>; sendButtonPressed(buttonId: string): Promise<void>; private postVisitorInfo; private postMessage; private startSession; } /** * * @param check Function that return true/false if the resource is available * @param stepMs check period in ms * @param timeoutMs max wait in ms * @param resource optional resource name. you will see a log message for every check (step) * * @returns the elapsed time in ms (both resolve/reject) */ export declare function waitFor(check: { (): boolean; }, stepMs: number, timeoutMs: number, resource?: string): Promise<unknown>;