UNPKG

@xapp/chat-widget

Version:
136 lines (135 loc) 5.44 kB
import 'rollup-plugin-inject-process-env'; import { ChatUserInfo } from "@xapp/stentor-chat-widget"; import { Action } from "@reduxjs/toolkit"; import { Attachment } from "../xapp/Attachment"; import { ChatServerMessage } from "../xapp/ChatServerMessage"; import { VisualState } from "./ChatState"; export type CONNECTION_STATUS_TYPE = "online" | "pending" | "offline"; export type ACCOUNT_STATUS_TYPE = "offline" | "online"; export type ACTION_TYPE = "chat" | "session_id" | "visual_status" | "account_status" | "connection_update" | "department_update" | "visitor_update" | "agent_update" | "error" | "reset" | "sendGreeting"; export interface ActionDetail { timestamp: number; } export interface ChatActionDetail<T> extends ActionDetail { readonly type: T; readonly user: ChatUserInfo; } export interface ChatAction extends Action<"chat"> { detail: ChatDetail; } export interface ChatSendGreetingDetail extends ChatActionDetail<"sendGreeting"> { detail: undefined; } export interface SendGreetingAction extends Action<"sendGreeting"> { detail: ChatSendGreetingDetail; } export interface ConnectionReceiveTokenAction extends Action<"receiveToken"> { readonly detail: ChatConnectionReceiveTokenDetail; } export interface ChatConnectionReceiveTokenDetail extends ChatActionDetail<"receiveToken"> { readonly token: string; readonly timestamp: number; } export interface ChatMemberJoinDetail extends ChatActionDetail<"chat.memberjoin"> { } export interface ChatMemberLeaveDetail extends ChatActionDetail<"chat.memberleave"> { } export interface ChatMemberPositionDetail extends ChatActionDetail<"chat.queue.position"> { queuePosition: number; } export interface ChatRequestRatingDetail extends ChatActionDetail<"chat.request.rating"> { } export interface ChatRatingDetail extends ChatActionDetail<"chat.rating"> { newRating: string; } export interface ChatFileDetail extends ChatActionDetail<"chat.file"> { readonly attachment: Attachment; } export interface ChatMsgDetail extends ChatActionDetail<"chat.msg"> { msg: ChatServerMessage; } export interface ChatFailureMsgDetail extends ChatActionDetail<"chat.failureMsg"> { failureMsg: FailureMessageDetail; } export interface FailureMessageDetail { readonly retry: number; readonly delay: number; readonly text: string; } export interface ChatTypingDetail extends ChatActionDetail<"chat.typing"> { typing: boolean; } export interface ChatOfflineDetail extends ChatActionDetail<"chat.offline"> { } export interface ChatPrechatDetail extends ChatActionDetail<"chat.prechat"> { } export interface ConnectionUpdateAction extends Action<"connection_update"> { detail: ConnectionUpdateDetail; } export interface ConnectionUpdateDetail extends ActionDetail { status: CONNECTION_STATUS_TYPE; } export interface AccountStatusAction extends Action<"account_status"> { detail: AccountStatusDetail; } export interface AccountStatusDetail extends ActionDetail { status: ACCOUNT_STATUS_TYPE; } export interface SessionIdAction extends Action<"session_id"> { detail: SessionIdDetail; } export interface SessionIdDetail extends ActionDetail { sessionId: string; } export interface VisualStatusAction extends Action<"visual_status"> { detail: VisualStatusDetail; } export interface VisualStatusDetail extends ActionDetail { status: VisualState; } export interface DepartmentUpdateAction extends Action<"department_update"> { detail: DepartmentUpdateDetail; } export interface DepartmentUpdateDetail extends ActionDetail { id: string; displayName: string; } export interface VisitorUpdateAction extends Action<"visitor_update"> { detail: VisitorUpdateDetail; } export interface VisitorUpdateDetail extends ActionDetail { displayName: string; typing: boolean; } export interface AgentUpdateAction extends Action<"agent_update"> { readonly detail: AgentUpdateDetail; } export interface AgentUpdateDetail extends ActionDetail { readonly nick: string; readonly displayName: string; readonly typing: boolean; readonly avatarPath?: string; readonly joined: boolean; } export interface SyntheticAction extends Action<"synthetic"> { detail: SyntheticMsgDetail | SyntheticFileDetail | SyntheticOptionDetail; } export interface SyntheticMsgDetail extends ActionDetail { readonly type: "write_msg"; readonly msg: ChatServerMessage; readonly user: ChatUserInfo; } export interface SyntheticOptionDetail extends ChatActionDetail<"visitor.send.option"> { msg: ChatServerMessage; } export interface SyntheticFileDetail extends ChatActionDetail<"visitor.send.file"> { attachment: Attachment; /** * Optional request attributes. */ readonly attributes?: Record<string, unknown>; } export interface ResetAction extends Action<"reset"> { } export type ActionType = ChatAction | SessionIdAction | VisualStatusAction | ConnectionUpdateAction | AccountStatusAction | DepartmentUpdateAction | VisitorUpdateAction | AgentUpdateAction | SyntheticAction | ConnectionReceiveTokenAction | ResetAction | SendGreetingAction; export type ChatDetail = ChatMemberJoinDetail | ChatMemberLeaveDetail | ChatMemberPositionDetail | ChatRequestRatingDetail | ChatRatingDetail | ChatFileDetail | ChatMsgDetail | ChatFailureMsgDetail | ChatTypingDetail | ChatOfflineDetail | ChatPrechatDetail | ChatSendGreetingDetail | ChatConnectionReceiveTokenDetail;