@opencx/widget 3.0.88 → 3.0.89
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/designs.cjs +352 -19
- package/dist/designs.cjs.map +1 -1
- package/dist/designs.js +35299 -2028
- package/dist/designs.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/dist/react.cjs +1 -1
- package/dist/react.cjs.map +1 -1
- package/dist/react.js +16 -17
- package/dist/react.js.map +1 -1
- package/dist/useModes-BAr0RJcP.js +3183 -0
- package/dist/useModes-BAr0RJcP.js.map +1 -0
- package/dist/useModes-C4Sdixy0.cjs +85 -0
- package/dist/useModes-C4Sdixy0.cjs.map +1 -0
- package/dist/{widget.ctx-CC3c7FPb.js → widget.ctx-Db3DyLM5.js} +406 -384
- package/dist/{widget.ctx-CC3c7FPb.js.map → widget.ctx-Db3DyLM5.js.map} +1 -1
- package/dist/widget.ctx-RfaE5VPy.cjs +5 -0
- package/dist/{widget.ctx-HuLTTMAM.cjs.map → widget.ctx-RfaE5VPy.cjs.map} +1 -1
- package/dist-embed/script.js +1 -1
- package/package.json +1 -4
- package/dist/useModes-DSFNdOy3.cjs +0 -2
- package/dist/useModes-DSFNdOy3.cjs.map +0 -1
- package/dist/useModes-DleBrdDK.js +0 -260
- package/dist/useModes-DleBrdDK.js.map +0 -1
- package/dist/widget.ctx-HuLTTMAM.cjs +0 -5
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opencx/widget",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "3.0.
|
|
4
|
+
"version": "3.0.89",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"publishConfig": {
|
|
7
7
|
"access": "public"
|
|
@@ -39,9 +39,6 @@
|
|
|
39
39
|
"require": "./dist/designs.cjs"
|
|
40
40
|
}
|
|
41
41
|
},
|
|
42
|
-
"optionalDependencies": {
|
|
43
|
-
"zod": "^3.23.8"
|
|
44
|
-
},
|
|
45
42
|
"dependencies": {
|
|
46
43
|
"lodash.isequal": "^4.5.0",
|
|
47
44
|
"openapi-fetch": "^0.13.4",
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";const F=require("swr"),a=require("react"),y=require("./widget.ctx-HuLTTMAM.cjs"),W=require("react/jsx-runtime"),P="3.0.88";class R{constructor(t){this.components=[];const{components:n}=t;if(n&&n.forEach(o=>this.register(o)),this.components.length===0)throw new Error("No components registered");if(!this.get("fallback"))throw new Error("No fallback component registered")}register(t){const n=this.components.findIndex(o=>o.key===t.key);return n!==-1?this.components[n]=t:this.components.push(t),this}get(t){const n=this.components.find(o=>o.key.toUpperCase()===t.toUpperCase());return n||null}getComponent(t){var n;return(n=this.get(t))==null?void 0:n.component}}const v=a.createContext(null);function b({options:e,children:t,components:n,modesComponents:o,storage:i,loadingComponent:c}){const l=a.useRef(null),d=a.useRef(!1),[p,S]=a.useState(null),s=a.useMemo(()=>new R({components:n}),[n]);return a.useEffect(()=>{d.current||(d.current=!0,y.WidgetCtx.initialize({config:e,storage:i}).then(S))},[]),p?W.jsx(v.Provider,{value:{widgetCtx:p,config:e,components:n,componentStore:s,modesComponents:o,version:P,contentIframeRef:l},children:t}):c||null}function g(){const e=a.useContext(v);if(!e)throw new Error("useWidget must be used within a WidgetProvider");return e}function h(){const{config:e}=g();return e}function m(e){return a.useSyncExternalStore(e.subscribe,e.get,e.get)}function A(){const{widgetCtx:e}=g();return{contactState:m(e.contactCtx.state),createUnverifiedContact:e.contactCtx.createUnverifiedContact}}function E(){const{widgetCtx:e}=g();return{messagesState:m(e.messageCtx.state),sendMessage:e.messageCtx.sendMessage}}function w(){const{widgetCtx:e}=g(),{oneOpenSessionAllowed:t}=h(),n=m(e.sessionCtx.sessionState),o=m(e.sessionCtx.sessionsState),{openSessions:i,closedSessions:c}=a.useMemo(()=>({openSessions:o.data.filter(d=>d.isOpened===!0),closedSessions:o.data.filter(d=>d.isOpened===!1)}),[o.data]),l=a.useMemo(()=>t?i.length===0:!0,[t,i.length]);return{sessionState:n,sessionsState:o,loadMoreSessions:e.sessionCtx.loadMoreSessions,resolveSession:e.sessionCtx.resolveSession,createStateCheckpoint:e.sessionCtx.createStateCheckpoint,openSessions:i,closedSessions:c,canCreateNewSession:l}}function M(){var l;const{sessionState:e}=w(),{messagesState:t}=E(),n=((l=e.session)==null?void 0:l.assignee.kind)==="ai",o=t.messages.length>0?t.messages[t.messages.length-1]:null,i=(o==null?void 0:o.type)==="FROM_USER";return{isAwaitingBotReply:(n||e.isCreatingSession)&&(t.isSendingMessage||i)}}function k(){const{widgetCtx:e}=g();return F([e.config.token],e.api.widgetPrelude,{revalidateOnFocus:!1})}function O(){const{widgetCtx:e}=g();return{routerState:m(e.routerCtx.state),toSessionsScreen:e.routerCtx.toSessionsScreen,toChatScreen:e.routerCtx.toChatScreen}}const f=new Map;function T(){const[e,t]=a.useState([]),{widgetCtx:{api:n}}=g();function o(s){const r=s.map(u=>({file:u,id:y.v4(),status:"pending",progress:0}));t(u=>[...u,...r]),r.forEach(l)}function i(s,r){t(u=>u.map(C=>C.id===s?{...C,...r}:C))}function c(s){t(r=>r.filter(u=>u.id!==s))}const l=async s=>{const r=new AbortController;f.set(s.id,r);try{t(C=>C.map(x=>x.id===s.id?{...x,status:"uploading",progress:0}:x));const u=await n.uploadFile({file:s.file,abortSignal:r.signal,onProgress:C=>{i(s.id,{progress:C})}});i(s.id,{status:"success",fileUrl:u.fileUrl,progress:100})}catch(u){r.signal.aborted||i(s.id,{status:"error",error:u instanceof Error?u.message:"Upload failed",progress:0})}finally{f.delete(s.id)}},d=s=>{const r=f.get(s);r&&(r.abort(),f.delete(s)),c(s)},p=a.useMemo(()=>e.filter(s=>s.status==="success"&&s.fileUrl),[e]);function S(){f.forEach(s=>s.abort()),f.clear(),t([])}return a.useEffect(()=>()=>{f.forEach(s=>s.abort()),f.clear()},[]),{allFiles:e,appendFiles:o,handleCancelUpload:d,successFiles:p,emptyTheFiles:S,getFileById:s=>e.find(r=>r.id===s),getUploadProgress:s=>{var r;return((r=e.find(u=>u.id===s))==null?void 0:r.progress)??0},getUploadStatus:s=>{var r;return(r=e.find(u=>u.id===s))==null?void 0:r.status},hasErrors:e.some(s=>s.status==="error"),isUploading:e.some(s=>s.status==="uploading")}}const U=a.createContext(null);function N({children:e}){const t=h(),[n,o]=a.useState(t.isOpen??!1);return a.useEffect(()=>{o(i=>t.isOpen??i)},[t.isOpen]),a.useEffect(()=>{const i=t.openAfterNSeconds;if(typeof i!="number"||isNaN(i))return;const c=setTimeout(()=>o(!0),i*1e3);return()=>clearTimeout(c)},[t.openAfterNSeconds]),W.jsx(U.Provider,{value:{isOpen:n,setIsOpen:o},children:e})}function B(){const e=a.useContext(U);if(!e)throw new Error("useWidgetTrigger must be used within a WidgetTriggerProvider");return e}function q(){var d,p;const{widgetCtx:e,modesComponents:t}=g(),{sessionState:n}=w(),o=e.modes,i=(d=n.session)==null?void 0:d.modeId,c=o.find(S=>S.id===i),l=(p=t==null?void 0:t.find(S=>{var s,r;return[(c==null?void 0:c.id)||"",((s=c==null?void 0:c.name)==null?void 0:s.toLowerCase())||"",((r=c==null?void 0:c.slug)==null?void 0:r.toLowerCase())||""].includes(S.key.toLowerCase())}))==null?void 0:p.component;return{modes:o,modesComponents:t,activeModeId:i,activeMode:c,Component:l}}exports.WidgetProvider=b;exports.WidgetTriggerProvider=N;exports.useConfig=h;exports.useContact=A;exports.useIsAwaitingBotReply=M;exports.useMessages=E;exports.useModes=q;exports.usePreludeData=k;exports.usePrimitiveState=m;exports.useSessions=w;exports.useUploadFiles=T;exports.useWidget=g;exports.useWidgetRouter=O;exports.useWidgetTrigger=B;
|
|
2
|
-
//# sourceMappingURL=useModes-DSFNdOy3.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useModes-DSFNdOy3.cjs","sources":["../src/headless/react/ComponentRegistry.ts","../src/headless/react/WidgetProvider.tsx","../src/headless/react/hooks/useConfig.ts","../src/headless/react/hooks/usePrimitiveState.ts","../src/headless/react/hooks/useContact.ts","../src/headless/react/hooks/useMessages.ts","../src/headless/react/hooks/useSessions.ts","../src/headless/react/hooks/useIsAwaitingBotReply.ts","../src/headless/react/hooks/usePreludeData.ts","../src/headless/react/hooks/useWidgetRouter.ts","../src/headless/react/hooks/useUploadFiles.ts","../src/headless/react/hooks/useWidgetTrigger.tsx","../src/headless/react/hooks/useModes.ts"],"sourcesContent":["import type { WidgetComponentKey } from '../core';\nimport type { WidgetComponentType } from './types/components';\n\nexport class ComponentRegistry {\n components: WidgetComponentType[] = [];\n\n constructor(opts: { components?: WidgetComponentType[] }) {\n const { components } = opts;\n\n if (components) {\n components.forEach((c) => this.register(c));\n }\n\n if (this.components.length === 0) {\n throw new Error('No components registered');\n }\n if (!this.get('fallback')) {\n throw new Error('No fallback component registered');\n }\n }\n\n // TODO test that this registers or replaces the component\n register(component: WidgetComponentType) {\n // Replace the key if it already exists\n const index = this.components.findIndex((c) => c.key === component.key);\n if (index !== -1) {\n this.components[index] = component;\n } else {\n this.components.push(component);\n }\n return this;\n }\n\n private get(key: WidgetComponentKey) {\n const c = this.components.find(\n (c) => c.key.toUpperCase() === key.toUpperCase(),\n );\n if (c) return c;\n return null;\n }\n\n public getComponent(key: string) {\n return this.get(key)?.component;\n }\n}\n","import React, {\n createContext,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { version } from '../../../package.json';\nimport { type ExternalStorage, type WidgetConfig, WidgetCtx } from '../core';\nimport { ComponentRegistry } from './ComponentRegistry';\nimport type { WidgetComponentType } from './types/components';\nimport type { WidgetModeComponentType } from './types/modes.components';\n\ninterface WidgetProviderValue {\n widgetCtx: WidgetCtx;\n config: WidgetConfig;\n components?: WidgetComponentType[];\n modesComponents?: WidgetModeComponentType[];\n componentStore: ComponentRegistry;\n version: string;\n contentIframeRef?: React.MutableRefObject<HTMLIFrameElement | null>;\n}\n\nconst context = createContext<WidgetProviderValue | null>(null);\n\nexport function WidgetProvider({\n options: config,\n children,\n components,\n modesComponents,\n storage,\n loadingComponent,\n}: {\n options: WidgetConfig;\n children: React.ReactNode;\n components?: WidgetComponentType[];\n modesComponents?: WidgetModeComponentType[];\n storage?: ExternalStorage;\n /**\n * Custom loading component while the widget is initializing\n * Not to be confused with the `loading` custom component which renders when the bot's reply is pending\n */\n loadingComponent?: React.ReactNode;\n}) {\n const contentIframeRef = useRef<HTMLIFrameElement | null>(null);\n\n const didInitialize = useRef(false);\n const [widgetCtx, setWidgetCtx] = useState<WidgetCtx | null>(null);\n\n const componentStore = useMemo(\n () =>\n new ComponentRegistry({\n components: components,\n }),\n [components],\n );\n\n useEffect(() => {\n if (didInitialize.current) return;\n didInitialize.current = true;\n\n WidgetCtx.initialize({ config, storage }).then(setWidgetCtx);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n if (!widgetCtx) {\n return loadingComponent || null;\n }\n\n return (\n <context.Provider\n value={{\n widgetCtx,\n config,\n components,\n componentStore,\n modesComponents,\n version,\n contentIframeRef,\n }}\n >\n {children}\n </context.Provider>\n );\n}\n\nexport function useWidget() {\n const ctx = useContext(context);\n if (!ctx) {\n throw new Error('useWidget must be used within a WidgetProvider');\n }\n return ctx;\n}\n","import { useWidget } from '../WidgetProvider';\n\nexport function useConfig() {\n const { config } = useWidget();\n\n return config;\n}\n","import { useSyncExternalStore } from 'react';\nimport type { PrimitiveState } from '../../core';\n\nexport function usePrimitiveState<T>(p: PrimitiveState<T>) {\n return useSyncExternalStore(p.subscribe, p.get, p.get);\n}\n","import { useWidget } from '../WidgetProvider';\nimport { usePrimitiveState } from './usePrimitiveState';\n\nexport function useContact() {\n const { widgetCtx } = useWidget();\n const contactState = usePrimitiveState(widgetCtx.contactCtx.state);\n\n return {\n contactState,\n createUnverifiedContact: widgetCtx.contactCtx.createUnverifiedContact,\n };\n}\n","import { usePrimitiveState } from './usePrimitiveState';\nimport { useWidget } from '../WidgetProvider';\n\nexport function useMessages() {\n const { widgetCtx } = useWidget();\n const messagesState = usePrimitiveState(widgetCtx.messageCtx.state);\n\n return { messagesState, sendMessage: widgetCtx.messageCtx.sendMessage };\n}\n","import { useMemo } from 'react';\nimport { useWidget } from '../WidgetProvider';\nimport { usePrimitiveState } from './usePrimitiveState';\nimport { useConfig } from './useConfig';\n\nexport function useSessions() {\n const { widgetCtx } = useWidget();\n const { oneOpenSessionAllowed } = useConfig();\n const sessionState = usePrimitiveState(widgetCtx.sessionCtx.sessionState);\n const sessionsState = usePrimitiveState(widgetCtx.sessionCtx.sessionsState);\n\n const { openSessions, closedSessions } = useMemo(() => {\n return {\n openSessions: sessionsState.data.filter((s) => s.isOpened === true),\n closedSessions: sessionsState.data.filter((s) => s.isOpened === false),\n };\n }, [sessionsState.data]);\n\n const canCreateNewSession = useMemo(() => {\n if (oneOpenSessionAllowed) {\n return openSessions.length === 0;\n }\n return true;\n }, [oneOpenSessionAllowed, openSessions.length]);\n\n return {\n sessionState,\n sessionsState,\n loadMoreSessions: widgetCtx.sessionCtx.loadMoreSessions,\n resolveSession: widgetCtx.sessionCtx.resolveSession,\n createStateCheckpoint: widgetCtx.sessionCtx.createStateCheckpoint,\n openSessions,\n closedSessions,\n canCreateNewSession,\n };\n}\n","import { useMessages } from './useMessages';\nimport { useSessions } from './useSessions';\n\nexport function useIsAwaitingBotReply() {\n const { sessionState } = useSessions();\n const { messagesState } = useMessages();\n\n const isSessionAssignedToAI = sessionState.session?.assignee.kind === 'ai';\n // This check is useful in cases where the user might navigate in and out of a chat, and `isSendingMessage` is reset back to its default value\n const lastMessage =\n messagesState.messages.length > 0\n ? messagesState.messages[messagesState.messages.length - 1]\n : null;\n const isLastMessageAUserMessage = lastMessage?.type === 'FROM_USER';\n\n const isAwaitingBotReply =\n (isSessionAssignedToAI || sessionState.isCreatingSession) &&\n (messagesState.isSendingMessage || isLastMessageAUserMessage);\n\n return { isAwaitingBotReply };\n}\n","import useSWR from 'swr';\nimport { useWidget } from '../WidgetProvider';\n\nfunction usePreludeData() {\n const { widgetCtx } = useWidget();\n\n // TODO remove swr dependency\n return useSWR([widgetCtx.config.token], widgetCtx.api.widgetPrelude, {\n revalidateOnFocus: false,\n });\n}\n\nexport { usePreludeData };\n","import { useWidget } from '../WidgetProvider';\nimport { usePrimitiveState } from './usePrimitiveState';\n\nexport function useWidgetRouter() {\n const { widgetCtx } = useWidget();\n\n const routerState = usePrimitiveState(widgetCtx.routerCtx.state);\n\n return {\n routerState,\n toSessionsScreen: widgetCtx.routerCtx.toSessionsScreen,\n toChatScreen: widgetCtx.routerCtx.toChatScreen,\n };\n}\n","import { useEffect, useMemo, useState } from 'react';\nimport { useWidget } from '../WidgetProvider';\nimport { v4 } from 'uuid';\n\nconst uploadAbortControllers: Map<string, AbortController> = new Map();\n\ninterface FileWithProgress {\n status: 'pending' | 'uploading' | 'success' | 'error';\n id: string;\n file: File;\n fileUrl?: string;\n progress: number;\n error?: string;\n}\n\nfunction useUploadFiles() {\n const [files, setFiles] = useState<FileWithProgress[]>([]);\n const {\n widgetCtx: { api },\n } = useWidget();\n function appendFiles(files: File[]) {\n const newFiles = files.map((file) => ({\n file,\n id: v4(),\n status: 'pending' as const,\n progress: 0,\n }));\n\n setFiles((prev) => [...prev, ...newFiles]);\n newFiles.forEach(uploadFile);\n }\n\n function updateFileById(id: string, update: Partial<FileWithProgress>) {\n setFiles((prev) =>\n prev.map((f) => (f.id === id ? { ...f, ...update } : f)),\n );\n }\n\n function removeFileById(id: string) {\n setFiles((prev) => prev.filter((f) => f.id !== id));\n }\n\n const uploadFile = async (fileItem: FileWithProgress) => {\n const controller = new AbortController();\n uploadAbortControllers.set(fileItem.id, controller);\n\n try {\n setFiles((prev) =>\n prev.map((f) =>\n f.id === fileItem.id ? { ...f, status: 'uploading', progress: 0 } : f,\n ),\n );\n\n const response = await api.uploadFile({\n file: fileItem.file,\n abortSignal: controller.signal,\n onProgress: (percentage) => {\n updateFileById(fileItem.id, { progress: percentage });\n },\n });\n\n updateFileById(fileItem.id, {\n status: 'success',\n fileUrl: response.fileUrl,\n progress: 100,\n });\n } catch (error) {\n if (!controller.signal.aborted) {\n updateFileById(fileItem.id, {\n status: 'error',\n error: error instanceof Error ? error.message : 'Upload failed',\n progress: 0,\n });\n }\n } finally {\n uploadAbortControllers.delete(fileItem.id);\n }\n };\n\n const handleCancelUpload = (fileId: string) => {\n const controller = uploadAbortControllers.get(fileId);\n if (controller) {\n controller.abort();\n uploadAbortControllers.delete(fileId);\n }\n removeFileById(fileId);\n };\n\n const successFiles = useMemo(() => {\n return files.filter((f) => f.status === 'success' && f.fileUrl);\n }, [files]);\n\n function emptyTheFiles() {\n uploadAbortControllers.forEach((controller) => controller.abort());\n uploadAbortControllers.clear();\n setFiles([]);\n }\n\n useEffect(() => {\n return () => {\n uploadAbortControllers.forEach((controller) => controller.abort());\n uploadAbortControllers.clear();\n };\n }, []);\n\n return {\n allFiles: files,\n appendFiles,\n handleCancelUpload,\n successFiles,\n emptyTheFiles,\n getFileById: (id: string) => files.find((f) => f.id === id),\n getUploadProgress: (id: string) =>\n files.find((f) => f.id === id)?.progress ?? 0,\n getUploadStatus: (id: string) => files.find((f) => f.id === id)?.status,\n hasErrors: files.some((f) => f.status === 'error'),\n isUploading: files.some((f) => f.status === 'uploading'),\n };\n}\n\nexport { useUploadFiles, type FileWithProgress };\n","import React, {\n createContext,\n useContext,\n useEffect,\n useState,\n type Dispatch,\n type ReactNode,\n type SetStateAction,\n} from 'react';\nimport { useConfig } from './useConfig';\n\ntype WidgetTriggerCtx = {\n isOpen: boolean;\n setIsOpen: Dispatch<SetStateAction<boolean>>;\n};\n\nconst context = createContext<WidgetTriggerCtx | null>(null);\n\nexport function WidgetTriggerProvider({ children }: { children: ReactNode }) {\n const config = useConfig();\n const [isOpen, setIsOpen] = useState(config.isOpen ?? false);\n\n useEffect(() => {\n setIsOpen((prev) => config.isOpen ?? prev);\n }, [config.isOpen]);\n\n useEffect(() => {\n const openAfterNSeconds = config.openAfterNSeconds;\n if (typeof openAfterNSeconds !== 'number' || isNaN(openAfterNSeconds))\n return;\n\n const timeout = setTimeout(() => setIsOpen(true), openAfterNSeconds * 1000);\n\n return () => clearTimeout(timeout);\n }, [config.openAfterNSeconds]);\n\n return (\n <context.Provider value={{ isOpen, setIsOpen }}>\n {children}\n </context.Provider>\n );\n}\n\nexport function useWidgetTrigger() {\n const ctx = useContext(context);\n if (!ctx) {\n throw new Error(\n 'useWidgetTrigger must be used within a WidgetTriggerProvider',\n );\n }\n return ctx;\n}\n","import { useWidget } from '../WidgetProvider';\nimport { useSessions } from './useSessions';\n\nexport function useModes() {\n const { widgetCtx, modesComponents } = useWidget();\n const { sessionState } = useSessions();\n\n const modes = widgetCtx.modes;\n const activeModeId = sessionState.session?.modeId;\n const activeMode = modes.find((mode) => mode.id === activeModeId);\n\n const Component = modesComponents?.find((modeComponent) =>\n [\n activeMode?.id || '',\n activeMode?.name?.toLowerCase() || '',\n activeMode?.slug?.toLowerCase() || '',\n ].includes(modeComponent.key.toLowerCase()),\n )?.component;\n\n return {\n modes,\n modesComponents,\n activeModeId,\n activeMode,\n Component,\n };\n}\n"],"names":["ComponentRegistry","opts","components","c","component","index","key","_a","context","createContext","WidgetProvider","config","children","modesComponents","storage","loadingComponent","contentIframeRef","useRef","didInitialize","widgetCtx","setWidgetCtx","useState","componentStore","useMemo","useEffect","WidgetCtx","jsx","version","useWidget","ctx","useContext","useConfig","usePrimitiveState","p","useSyncExternalStore","useContact","useMessages","useSessions","oneOpenSessionAllowed","sessionState","sessionsState","openSessions","closedSessions","s","canCreateNewSession","useIsAwaitingBotReply","messagesState","isSessionAssignedToAI","lastMessage","isLastMessageAUserMessage","usePreludeData","useSWR","useWidgetRouter","uploadAbortControllers","useUploadFiles","files","setFiles","api","appendFiles","newFiles","file","v4","prev","uploadFile","updateFileById","id","update","f","removeFileById","fileItem","controller","response","percentage","error","handleCancelUpload","fileId","successFiles","emptyTheFiles","WidgetTriggerProvider","isOpen","setIsOpen","openAfterNSeconds","timeout","useWidgetTrigger","useModes","modes","activeModeId","activeMode","mode","Component","_b","modeComponent"],"mappings":"wIAGO,MAAMA,CAAkB,CAG7B,YAAYC,EAA8C,CAF1D,KAAA,WAAoC,GAG5B,KAAA,CAAE,WAAAC,CAAe,EAAAD,EAMnB,GAJAC,GACFA,EAAW,QAASC,GAAM,KAAK,SAASA,CAAC,CAAC,EAGxC,KAAK,WAAW,SAAW,EACvB,MAAA,IAAI,MAAM,0BAA0B,EAE5C,GAAI,CAAC,KAAK,IAAI,UAAU,EAChB,MAAA,IAAI,MAAM,kCAAkC,CAEtD,CAGA,SAASC,EAAgC,CAEjC,MAAAC,EAAQ,KAAK,WAAW,UAAWF,GAAMA,EAAE,MAAQC,EAAU,GAAG,EACtE,OAAIC,IAAU,GACP,KAAA,WAAWA,CAAK,EAAID,EAEpB,KAAA,WAAW,KAAKA,CAAS,EAEzB,IACT,CAEQ,IAAIE,EAAyB,CAC7B,MAAAH,EAAI,KAAK,WAAW,KACvBA,GAAMA,EAAE,IAAI,YAAY,IAAMG,EAAI,YAAY,CAAA,EAEjD,OAAIH,GACG,IACT,CAEO,aAAaG,EAAa,OACxB,OAAAC,EAAA,KAAK,IAAID,CAAG,IAAZ,YAAAC,EAAe,SACxB,CACF,CCpBA,MAAMC,EAAUC,EAAAA,cAA0C,IAAI,EAEvD,SAASC,EAAe,CAC7B,QAASC,EACT,SAAAC,EACA,WAAAV,EACA,gBAAAW,EACA,QAAAC,EACA,iBAAAC,CACF,EAWG,CACK,MAAAC,EAAmBC,SAAiC,IAAI,EAExDC,EAAgBD,SAAO,EAAK,EAC5B,CAACE,EAAWC,CAAY,EAAIC,WAA2B,IAAI,EAE3DC,EAAiBC,EAAA,QACrB,IACE,IAAIvB,EAAkB,CACpB,WAAAE,CAAA,CACD,EACH,CAACA,CAAU,CAAA,EAWb,OARAsB,EAAAA,UAAU,IAAM,CACVN,EAAc,UAClBA,EAAc,QAAU,GAExBO,EAAA,UAAU,WAAW,CAAE,OAAAd,EAAQ,QAAAG,EAAS,EAAE,KAAKM,CAAY,EAE7D,EAAG,CAAE,CAAA,EAEAD,EAKHO,EAAA,IAAClB,EAAQ,SAAR,CACC,MAAO,CACL,UAAAW,EACA,OAAAR,EACA,WAAAT,EACA,eAAAoB,EACA,gBAAAT,EACA,QAAAc,EACA,iBAAAX,CACF,EAEC,SAAAJ,CAAA,CAAA,EAfIG,GAAoB,IAkB/B,CAEO,SAASa,GAAY,CACpB,MAAAC,EAAMC,aAAWtB,CAAO,EAC9B,GAAI,CAACqB,EACG,MAAA,IAAI,MAAM,gDAAgD,EAE3D,OAAAA,CACT,CC3FO,SAASE,GAAY,CACpB,KAAA,CAAE,OAAApB,GAAWiB,IAEZ,OAAAjB,CACT,CCHO,SAASqB,EAAqBC,EAAsB,CACzD,OAAOC,EAAAA,qBAAqBD,EAAE,UAAWA,EAAE,IAAKA,EAAE,GAAG,CACvD,CCFO,SAASE,GAAa,CACrB,KAAA,CAAE,UAAAhB,GAAcS,IAGf,MAAA,CACL,aAHmBI,EAAkBb,EAAU,WAAW,KAAK,EAI/D,wBAAyBA,EAAU,WAAW,uBAAA,CAElD,CCRO,SAASiB,GAAc,CACtB,KAAA,CAAE,UAAAjB,GAAcS,IAGtB,MAAO,CAAE,cAFaI,EAAkBb,EAAU,WAAW,KAAK,EAE1C,YAAaA,EAAU,WAAW,WAAY,CACxE,CCHO,SAASkB,GAAc,CACtB,KAAA,CAAE,UAAAlB,GAAcS,IAChB,CAAE,sBAAAU,GAA0BP,IAC5BQ,EAAeP,EAAkBb,EAAU,WAAW,YAAY,EAClEqB,EAAgBR,EAAkBb,EAAU,WAAW,aAAa,EAEpE,CAAE,aAAAsB,EAAc,eAAAC,CAAe,EAAInB,UAAQ,KACxC,CACL,aAAciB,EAAc,KAAK,OAAQG,GAAMA,EAAE,WAAa,EAAI,EAClE,eAAgBH,EAAc,KAAK,OAAQG,GAAMA,EAAE,WAAa,EAAK,CAAA,GAEtE,CAACH,EAAc,IAAI,CAAC,EAEjBI,EAAsBrB,EAAAA,QAAQ,IAC9Be,EACKG,EAAa,SAAW,EAE1B,GACN,CAACH,EAAuBG,EAAa,MAAM,CAAC,EAExC,MAAA,CACL,aAAAF,EACA,cAAAC,EACA,iBAAkBrB,EAAU,WAAW,iBACvC,eAAgBA,EAAU,WAAW,eACrC,sBAAuBA,EAAU,WAAW,sBAC5C,aAAAsB,EACA,eAAAC,EACA,oBAAAE,CAAA,CAEJ,CChCO,SAASC,GAAwB,OAChC,KAAA,CAAE,aAAAN,GAAiBF,IACnB,CAAE,cAAAS,GAAkBV,IAEpBW,IAAwBxC,EAAAgC,EAAa,UAAb,YAAAhC,EAAsB,SAAS,QAAS,KAEhEyC,EACJF,EAAc,SAAS,OAAS,EAC5BA,EAAc,SAASA,EAAc,SAAS,OAAS,CAAC,EACxD,KACAG,GAA4BD,GAAA,YAAAA,EAAa,QAAS,YAMxD,MAAO,CAAE,oBAHND,GAAyBR,EAAa,qBACtCO,EAAc,kBAAoBG,EAET,CAC9B,CCjBA,SAASC,GAAiB,CAClB,KAAA,CAAE,UAAA/B,GAAcS,IAGf,OAAAuB,EAAO,CAAChC,EAAU,OAAO,KAAK,EAAGA,EAAU,IAAI,cAAe,CACnE,kBAAmB,EAAA,CACpB,CACH,CCPO,SAASiC,GAAkB,CAC1B,KAAA,CAAE,UAAAjC,GAAcS,IAIf,MAAA,CACL,YAHkBI,EAAkBb,EAAU,UAAU,KAAK,EAI7D,iBAAkBA,EAAU,UAAU,iBACtC,aAAcA,EAAU,UAAU,YAAA,CAEtC,CCTA,MAAMkC,MAA2D,IAWjE,SAASC,GAAiB,CACxB,KAAM,CAACC,EAAOC,CAAQ,EAAInC,EAAA,SAA6B,CAAE,CAAA,EACnD,CACJ,UAAW,CAAE,IAAAoC,CAAI,GACf7B,EAAU,EACd,SAAS8B,EAAYH,EAAe,CAClC,MAAMI,EAAWJ,EAAM,IAAKK,IAAU,CACpC,KAAAA,EACA,GAAIC,EAAAA,GAAG,EACP,OAAQ,UACR,SAAU,CACV,EAAA,EAEFL,EAAUM,GAAS,CAAC,GAAGA,EAAM,GAAGH,CAAQ,CAAC,EACzCA,EAAS,QAAQI,CAAU,CAC7B,CAES,SAAAC,EAAeC,EAAYC,EAAmC,CACrEV,EAAUM,GACRA,EAAK,IAAKK,GAAOA,EAAE,KAAOF,EAAK,CAAE,GAAGE,EAAG,GAAGD,CAAA,EAAWC,CAAE,CAAA,CAE3D,CAEA,SAASC,EAAeH,EAAY,CACzBT,EAACM,GAASA,EAAK,OAAQK,GAAMA,EAAE,KAAOF,CAAE,CAAC,CACpD,CAEM,MAAAF,EAAa,MAAOM,GAA+B,CACjD,MAAAC,EAAa,IAAI,gBACAjB,EAAA,IAAIgB,EAAS,GAAIC,CAAU,EAE9C,GAAA,CACFd,EAAUM,GACRA,EAAK,IAAKK,GACRA,EAAE,KAAOE,EAAS,GAAK,CAAE,GAAGF,EAAG,OAAQ,YAAa,SAAU,CAAM,EAAAA,CACtE,CAAA,EAGI,MAAAI,EAAW,MAAMd,EAAI,WAAW,CACpC,KAAMY,EAAS,KACf,YAAaC,EAAW,OACxB,WAAaE,GAAe,CAC1BR,EAAeK,EAAS,GAAI,CAAE,SAAUG,CAAY,CAAA,CACtD,CAAA,CACD,EAEDR,EAAeK,EAAS,GAAI,CAC1B,OAAQ,UACR,QAASE,EAAS,QAClB,SAAU,GAAA,CACX,QACME,EAAO,CACTH,EAAW,OAAO,SACrBN,EAAeK,EAAS,GAAI,CAC1B,OAAQ,QACR,MAAOI,aAAiB,MAAQA,EAAM,QAAU,gBAChD,SAAU,CAAA,CACX,CACH,QACA,CACuBpB,EAAA,OAAOgB,EAAS,EAAE,CAC3C,CAAA,EAGIK,EAAsBC,GAAmB,CACvC,MAAAL,EAAajB,EAAuB,IAAIsB,CAAM,EAChDL,IACFA,EAAW,MAAM,EACjBjB,EAAuB,OAAOsB,CAAM,GAEtCP,EAAeO,CAAM,CAAA,EAGjBC,EAAerD,EAAAA,QAAQ,IACpBgC,EAAM,OAAQY,GAAMA,EAAE,SAAW,WAAaA,EAAE,OAAO,EAC7D,CAACZ,CAAK,CAAC,EAEV,SAASsB,GAAgB,CACvBxB,EAAuB,QAASiB,GAAeA,EAAW,MAAO,CAAA,EACjEjB,EAAuB,MAAM,EAC7BG,EAAS,CAAE,CAAA,CACb,CAEAhC,OAAAA,EAAAA,UAAU,IACD,IAAM,CACX6B,EAAuB,QAASiB,GAAeA,EAAW,MAAO,CAAA,EACjEjB,EAAuB,MAAM,CAAA,EAE9B,CAAE,CAAA,EAEE,CACL,SAAUE,EACV,YAAAG,EACA,mBAAAgB,EACA,aAAAE,EACA,cAAAC,EACA,YAAcZ,GAAeV,EAAM,KAAMY,GAAMA,EAAE,KAAOF,CAAE,EAC1D,kBAAoBA,UAClB,QAAA1D,EAAAgD,EAAM,KAAMY,GAAMA,EAAE,KAAOF,CAAE,IAA7B,YAAA1D,EAAgC,WAAY,GAC9C,gBAAkB0D,GAAe,OAAA,OAAA1D,EAAAgD,EAAM,KAAMY,GAAMA,EAAE,KAAOF,CAAE,IAA7B,YAAA1D,EAAgC,QACjE,UAAWgD,EAAM,KAAMY,GAAMA,EAAE,SAAW,OAAO,EACjD,YAAaZ,EAAM,KAAMY,GAAMA,EAAE,SAAW,WAAW,CAAA,CAE3D,CCtGA,MAAM3D,EAAUC,EAAAA,cAAuC,IAAI,EAE3C,SAAAqE,EAAsB,CAAE,SAAAlE,GAAqC,CAC3E,MAAMD,EAASoB,IACT,CAACgD,EAAQC,CAAS,EAAI3D,EAAS,SAAAV,EAAO,QAAU,EAAK,EAE3Da,OAAAA,EAAAA,UAAU,IAAM,CACdwD,EAAWlB,GAASnD,EAAO,QAAUmD,CAAI,CAAA,EACxC,CAACnD,EAAO,MAAM,CAAC,EAElBa,EAAAA,UAAU,IAAM,CACd,MAAMyD,EAAoBtE,EAAO,kBACjC,GAAI,OAAOsE,GAAsB,UAAY,MAAMA,CAAiB,EAClE,OAEF,MAAMC,EAAU,WAAW,IAAMF,EAAU,EAAI,EAAGC,EAAoB,GAAI,EAEnE,MAAA,IAAM,aAAaC,CAAO,CAAA,EAChC,CAACvE,EAAO,iBAAiB,CAAC,EAG3Be,EAAA,IAAClB,EAAQ,SAAR,CAAiB,MAAO,CAAE,OAAAuE,EAAQ,UAAAC,CAAU,EAC1C,SAAApE,CACH,CAAA,CAEJ,CAEO,SAASuE,GAAmB,CAC3B,MAAAtD,EAAMC,aAAWtB,CAAO,EAC9B,GAAI,CAACqB,EACH,MAAM,IAAI,MACR,8DAAA,EAGG,OAAAA,CACT,CChDO,SAASuD,GAAW,SACzB,KAAM,CAAE,UAAAjE,EAAW,gBAAAN,CAAgB,EAAIe,EAAU,EAC3C,CAAE,aAAAW,GAAiBF,IAEnBgD,EAAQlE,EAAU,MAClBmE,GAAe/E,EAAAgC,EAAa,UAAb,YAAAhC,EAAsB,OACrCgF,EAAaF,EAAM,KAAMG,GAASA,EAAK,KAAOF,CAAY,EAE1DG,GAAYC,EAAA7E,GAAA,YAAAA,EAAiB,KAAM8E,GACvC,SAAA,QACEJ,GAAA,YAAAA,EAAY,KAAM,KAClBhF,EAAAgF,GAAA,YAAAA,EAAY,OAAZ,YAAAhF,EAAkB,gBAAiB,KACnCmF,EAAAH,GAAA,YAAAA,EAAY,OAAZ,YAAAG,EAAkB,gBAAiB,EACnC,EAAA,SAASC,EAAc,IAAI,aAAa,MAL1B,YAAAD,EAMf,UAEI,MAAA,CACL,MAAAL,EACA,gBAAAxE,EACA,aAAAyE,EACA,WAAAC,EACA,UAAAE,CAAA,CAEJ"}
|
|
@@ -1,260 +0,0 @@
|
|
|
1
|
-
import k from "swr";
|
|
2
|
-
import { createContext as b, useRef as y, useState as w, useMemo as m, useEffect as h, useContext as U, useSyncExternalStore as P } from "react";
|
|
3
|
-
import { W as O, v as R } from "./widget.ctx-CC3c7FPb.js";
|
|
4
|
-
import { jsx as v } from "react/jsx-runtime";
|
|
5
|
-
const N = "3.0.88";
|
|
6
|
-
class T {
|
|
7
|
-
constructor(t) {
|
|
8
|
-
this.components = [];
|
|
9
|
-
const { components: n } = t;
|
|
10
|
-
if (n && n.forEach((o) => this.register(o)), this.components.length === 0)
|
|
11
|
-
throw new Error("No components registered");
|
|
12
|
-
if (!this.get("fallback"))
|
|
13
|
-
throw new Error("No fallback component registered");
|
|
14
|
-
}
|
|
15
|
-
// TODO test that this registers or replaces the component
|
|
16
|
-
register(t) {
|
|
17
|
-
const n = this.components.findIndex((o) => o.key === t.key);
|
|
18
|
-
return n !== -1 ? this.components[n] = t : this.components.push(t), this;
|
|
19
|
-
}
|
|
20
|
-
get(t) {
|
|
21
|
-
const n = this.components.find(
|
|
22
|
-
(o) => o.key.toUpperCase() === t.toUpperCase()
|
|
23
|
-
);
|
|
24
|
-
return n || null;
|
|
25
|
-
}
|
|
26
|
-
getComponent(t) {
|
|
27
|
-
var n;
|
|
28
|
-
return (n = this.get(t)) == null ? void 0 : n.component;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
const F = b(null);
|
|
32
|
-
function z({
|
|
33
|
-
options: e,
|
|
34
|
-
children: t,
|
|
35
|
-
components: n,
|
|
36
|
-
modesComponents: o,
|
|
37
|
-
storage: i,
|
|
38
|
-
loadingComponent: a
|
|
39
|
-
}) {
|
|
40
|
-
const d = y(null), u = y(!1), [p, f] = w(null), s = m(
|
|
41
|
-
() => new T({
|
|
42
|
-
components: n
|
|
43
|
-
}),
|
|
44
|
-
[n]
|
|
45
|
-
);
|
|
46
|
-
return h(() => {
|
|
47
|
-
u.current || (u.current = !0, O.initialize({ config: e, storage: i }).then(f));
|
|
48
|
-
}, []), p ? /* @__PURE__ */ v(
|
|
49
|
-
F.Provider,
|
|
50
|
-
{
|
|
51
|
-
value: {
|
|
52
|
-
widgetCtx: p,
|
|
53
|
-
config: e,
|
|
54
|
-
components: n,
|
|
55
|
-
componentStore: s,
|
|
56
|
-
modesComponents: o,
|
|
57
|
-
version: N,
|
|
58
|
-
contentIframeRef: d
|
|
59
|
-
},
|
|
60
|
-
children: t
|
|
61
|
-
}
|
|
62
|
-
) : a || null;
|
|
63
|
-
}
|
|
64
|
-
function g() {
|
|
65
|
-
const e = U(F);
|
|
66
|
-
if (!e)
|
|
67
|
-
throw new Error("useWidget must be used within a WidgetProvider");
|
|
68
|
-
return e;
|
|
69
|
-
}
|
|
70
|
-
function W() {
|
|
71
|
-
const { config: e } = g();
|
|
72
|
-
return e;
|
|
73
|
-
}
|
|
74
|
-
function C(e) {
|
|
75
|
-
return P(e.subscribe, e.get, e.get);
|
|
76
|
-
}
|
|
77
|
-
function D() {
|
|
78
|
-
const { widgetCtx: e } = g();
|
|
79
|
-
return {
|
|
80
|
-
contactState: C(e.contactCtx.state),
|
|
81
|
-
createUnverifiedContact: e.contactCtx.createUnverifiedContact
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
function M() {
|
|
85
|
-
const { widgetCtx: e } = g();
|
|
86
|
-
return { messagesState: C(e.messageCtx.state), sendMessage: e.messageCtx.sendMessage };
|
|
87
|
-
}
|
|
88
|
-
function E() {
|
|
89
|
-
const { widgetCtx: e } = g(), { oneOpenSessionAllowed: t } = W(), n = C(e.sessionCtx.sessionState), o = C(e.sessionCtx.sessionsState), { openSessions: i, closedSessions: a } = m(() => ({
|
|
90
|
-
openSessions: o.data.filter((u) => u.isOpened === !0),
|
|
91
|
-
closedSessions: o.data.filter((u) => u.isOpened === !1)
|
|
92
|
-
}), [o.data]), d = m(() => t ? i.length === 0 : !0, [t, i.length]);
|
|
93
|
-
return {
|
|
94
|
-
sessionState: n,
|
|
95
|
-
sessionsState: o,
|
|
96
|
-
loadMoreSessions: e.sessionCtx.loadMoreSessions,
|
|
97
|
-
resolveSession: e.sessionCtx.resolveSession,
|
|
98
|
-
createStateCheckpoint: e.sessionCtx.createStateCheckpoint,
|
|
99
|
-
openSessions: i,
|
|
100
|
-
closedSessions: a,
|
|
101
|
-
canCreateNewSession: d
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
function _() {
|
|
105
|
-
var d;
|
|
106
|
-
const { sessionState: e } = E(), { messagesState: t } = M(), n = ((d = e.session) == null ? void 0 : d.assignee.kind) === "ai", o = t.messages.length > 0 ? t.messages[t.messages.length - 1] : null, i = (o == null ? void 0 : o.type) === "FROM_USER";
|
|
107
|
-
return { isAwaitingBotReply: (n || e.isCreatingSession) && (t.isSendingMessage || i) };
|
|
108
|
-
}
|
|
109
|
-
function $() {
|
|
110
|
-
const { widgetCtx: e } = g();
|
|
111
|
-
return k([e.config.token], e.api.widgetPrelude, {
|
|
112
|
-
revalidateOnFocus: !1
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
function q() {
|
|
116
|
-
const { widgetCtx: e } = g();
|
|
117
|
-
return {
|
|
118
|
-
routerState: C(e.routerCtx.state),
|
|
119
|
-
toSessionsScreen: e.routerCtx.toSessionsScreen,
|
|
120
|
-
toChatScreen: e.routerCtx.toChatScreen
|
|
121
|
-
};
|
|
122
|
-
}
|
|
123
|
-
const l = /* @__PURE__ */ new Map();
|
|
124
|
-
function G() {
|
|
125
|
-
const [e, t] = w([]), {
|
|
126
|
-
widgetCtx: { api: n }
|
|
127
|
-
} = g();
|
|
128
|
-
function o(s) {
|
|
129
|
-
const r = s.map((c) => ({
|
|
130
|
-
file: c,
|
|
131
|
-
id: R(),
|
|
132
|
-
status: "pending",
|
|
133
|
-
progress: 0
|
|
134
|
-
}));
|
|
135
|
-
t((c) => [...c, ...r]), r.forEach(d);
|
|
136
|
-
}
|
|
137
|
-
function i(s, r) {
|
|
138
|
-
t(
|
|
139
|
-
(c) => c.map((S) => S.id === s ? { ...S, ...r } : S)
|
|
140
|
-
);
|
|
141
|
-
}
|
|
142
|
-
function a(s) {
|
|
143
|
-
t((r) => r.filter((c) => c.id !== s));
|
|
144
|
-
}
|
|
145
|
-
const d = async (s) => {
|
|
146
|
-
const r = new AbortController();
|
|
147
|
-
l.set(s.id, r);
|
|
148
|
-
try {
|
|
149
|
-
t(
|
|
150
|
-
(S) => S.map(
|
|
151
|
-
(x) => x.id === s.id ? { ...x, status: "uploading", progress: 0 } : x
|
|
152
|
-
)
|
|
153
|
-
);
|
|
154
|
-
const c = await n.uploadFile({
|
|
155
|
-
file: s.file,
|
|
156
|
-
abortSignal: r.signal,
|
|
157
|
-
onProgress: (S) => {
|
|
158
|
-
i(s.id, { progress: S });
|
|
159
|
-
}
|
|
160
|
-
});
|
|
161
|
-
i(s.id, {
|
|
162
|
-
status: "success",
|
|
163
|
-
fileUrl: c.fileUrl,
|
|
164
|
-
progress: 100
|
|
165
|
-
});
|
|
166
|
-
} catch (c) {
|
|
167
|
-
r.signal.aborted || i(s.id, {
|
|
168
|
-
status: "error",
|
|
169
|
-
error: c instanceof Error ? c.message : "Upload failed",
|
|
170
|
-
progress: 0
|
|
171
|
-
});
|
|
172
|
-
} finally {
|
|
173
|
-
l.delete(s.id);
|
|
174
|
-
}
|
|
175
|
-
}, u = (s) => {
|
|
176
|
-
const r = l.get(s);
|
|
177
|
-
r && (r.abort(), l.delete(s)), a(s);
|
|
178
|
-
}, p = m(() => e.filter((s) => s.status === "success" && s.fileUrl), [e]);
|
|
179
|
-
function f() {
|
|
180
|
-
l.forEach((s) => s.abort()), l.clear(), t([]);
|
|
181
|
-
}
|
|
182
|
-
return h(() => () => {
|
|
183
|
-
l.forEach((s) => s.abort()), l.clear();
|
|
184
|
-
}, []), {
|
|
185
|
-
allFiles: e,
|
|
186
|
-
appendFiles: o,
|
|
187
|
-
handleCancelUpload: u,
|
|
188
|
-
successFiles: p,
|
|
189
|
-
emptyTheFiles: f,
|
|
190
|
-
getFileById: (s) => e.find((r) => r.id === s),
|
|
191
|
-
getUploadProgress: (s) => {
|
|
192
|
-
var r;
|
|
193
|
-
return ((r = e.find((c) => c.id === s)) == null ? void 0 : r.progress) ?? 0;
|
|
194
|
-
},
|
|
195
|
-
getUploadStatus: (s) => {
|
|
196
|
-
var r;
|
|
197
|
-
return (r = e.find((c) => c.id === s)) == null ? void 0 : r.status;
|
|
198
|
-
},
|
|
199
|
-
hasErrors: e.some((s) => s.status === "error"),
|
|
200
|
-
isUploading: e.some((s) => s.status === "uploading")
|
|
201
|
-
};
|
|
202
|
-
}
|
|
203
|
-
const A = b(null);
|
|
204
|
-
function H({ children: e }) {
|
|
205
|
-
const t = W(), [n, o] = w(t.isOpen ?? !1);
|
|
206
|
-
return h(() => {
|
|
207
|
-
o((i) => t.isOpen ?? i);
|
|
208
|
-
}, [t.isOpen]), h(() => {
|
|
209
|
-
const i = t.openAfterNSeconds;
|
|
210
|
-
if (typeof i != "number" || isNaN(i))
|
|
211
|
-
return;
|
|
212
|
-
const a = setTimeout(() => o(!0), i * 1e3);
|
|
213
|
-
return () => clearTimeout(a);
|
|
214
|
-
}, [t.openAfterNSeconds]), /* @__PURE__ */ v(A.Provider, { value: { isOpen: n, setIsOpen: o }, children: e });
|
|
215
|
-
}
|
|
216
|
-
function J() {
|
|
217
|
-
const e = U(A);
|
|
218
|
-
if (!e)
|
|
219
|
-
throw new Error(
|
|
220
|
-
"useWidgetTrigger must be used within a WidgetTriggerProvider"
|
|
221
|
-
);
|
|
222
|
-
return e;
|
|
223
|
-
}
|
|
224
|
-
function K() {
|
|
225
|
-
var u, p;
|
|
226
|
-
const { widgetCtx: e, modesComponents: t } = g(), { sessionState: n } = E(), o = e.modes, i = (u = n.session) == null ? void 0 : u.modeId, a = o.find((f) => f.id === i), d = (p = t == null ? void 0 : t.find(
|
|
227
|
-
(f) => {
|
|
228
|
-
var s, r;
|
|
229
|
-
return [
|
|
230
|
-
(a == null ? void 0 : a.id) || "",
|
|
231
|
-
((s = a == null ? void 0 : a.name) == null ? void 0 : s.toLowerCase()) || "",
|
|
232
|
-
((r = a == null ? void 0 : a.slug) == null ? void 0 : r.toLowerCase()) || ""
|
|
233
|
-
].includes(f.key.toLowerCase());
|
|
234
|
-
}
|
|
235
|
-
)) == null ? void 0 : p.component;
|
|
236
|
-
return {
|
|
237
|
-
modes: o,
|
|
238
|
-
modesComponents: t,
|
|
239
|
-
activeModeId: i,
|
|
240
|
-
activeMode: a,
|
|
241
|
-
Component: d
|
|
242
|
-
};
|
|
243
|
-
}
|
|
244
|
-
export {
|
|
245
|
-
z as W,
|
|
246
|
-
W as a,
|
|
247
|
-
D as b,
|
|
248
|
-
_ as c,
|
|
249
|
-
M as d,
|
|
250
|
-
$ as e,
|
|
251
|
-
C as f,
|
|
252
|
-
E as g,
|
|
253
|
-
q as h,
|
|
254
|
-
G as i,
|
|
255
|
-
J as j,
|
|
256
|
-
H as k,
|
|
257
|
-
K as l,
|
|
258
|
-
g as u
|
|
259
|
-
};
|
|
260
|
-
//# sourceMappingURL=useModes-DleBrdDK.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useModes-DleBrdDK.js","sources":["../src/headless/react/ComponentRegistry.ts","../src/headless/react/WidgetProvider.tsx","../src/headless/react/hooks/useConfig.ts","../src/headless/react/hooks/usePrimitiveState.ts","../src/headless/react/hooks/useContact.ts","../src/headless/react/hooks/useMessages.ts","../src/headless/react/hooks/useSessions.ts","../src/headless/react/hooks/useIsAwaitingBotReply.ts","../src/headless/react/hooks/usePreludeData.ts","../src/headless/react/hooks/useWidgetRouter.ts","../src/headless/react/hooks/useUploadFiles.ts","../src/headless/react/hooks/useWidgetTrigger.tsx","../src/headless/react/hooks/useModes.ts"],"sourcesContent":["import type { WidgetComponentKey } from '../core';\nimport type { WidgetComponentType } from './types/components';\n\nexport class ComponentRegistry {\n components: WidgetComponentType[] = [];\n\n constructor(opts: { components?: WidgetComponentType[] }) {\n const { components } = opts;\n\n if (components) {\n components.forEach((c) => this.register(c));\n }\n\n if (this.components.length === 0) {\n throw new Error('No components registered');\n }\n if (!this.get('fallback')) {\n throw new Error('No fallback component registered');\n }\n }\n\n // TODO test that this registers or replaces the component\n register(component: WidgetComponentType) {\n // Replace the key if it already exists\n const index = this.components.findIndex((c) => c.key === component.key);\n if (index !== -1) {\n this.components[index] = component;\n } else {\n this.components.push(component);\n }\n return this;\n }\n\n private get(key: WidgetComponentKey) {\n const c = this.components.find(\n (c) => c.key.toUpperCase() === key.toUpperCase(),\n );\n if (c) return c;\n return null;\n }\n\n public getComponent(key: string) {\n return this.get(key)?.component;\n }\n}\n","import React, {\n createContext,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { version } from '../../../package.json';\nimport { type ExternalStorage, type WidgetConfig, WidgetCtx } from '../core';\nimport { ComponentRegistry } from './ComponentRegistry';\nimport type { WidgetComponentType } from './types/components';\nimport type { WidgetModeComponentType } from './types/modes.components';\n\ninterface WidgetProviderValue {\n widgetCtx: WidgetCtx;\n config: WidgetConfig;\n components?: WidgetComponentType[];\n modesComponents?: WidgetModeComponentType[];\n componentStore: ComponentRegistry;\n version: string;\n contentIframeRef?: React.MutableRefObject<HTMLIFrameElement | null>;\n}\n\nconst context = createContext<WidgetProviderValue | null>(null);\n\nexport function WidgetProvider({\n options: config,\n children,\n components,\n modesComponents,\n storage,\n loadingComponent,\n}: {\n options: WidgetConfig;\n children: React.ReactNode;\n components?: WidgetComponentType[];\n modesComponents?: WidgetModeComponentType[];\n storage?: ExternalStorage;\n /**\n * Custom loading component while the widget is initializing\n * Not to be confused with the `loading` custom component which renders when the bot's reply is pending\n */\n loadingComponent?: React.ReactNode;\n}) {\n const contentIframeRef = useRef<HTMLIFrameElement | null>(null);\n\n const didInitialize = useRef(false);\n const [widgetCtx, setWidgetCtx] = useState<WidgetCtx | null>(null);\n\n const componentStore = useMemo(\n () =>\n new ComponentRegistry({\n components: components,\n }),\n [components],\n );\n\n useEffect(() => {\n if (didInitialize.current) return;\n didInitialize.current = true;\n\n WidgetCtx.initialize({ config, storage }).then(setWidgetCtx);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n if (!widgetCtx) {\n return loadingComponent || null;\n }\n\n return (\n <context.Provider\n value={{\n widgetCtx,\n config,\n components,\n componentStore,\n modesComponents,\n version,\n contentIframeRef,\n }}\n >\n {children}\n </context.Provider>\n );\n}\n\nexport function useWidget() {\n const ctx = useContext(context);\n if (!ctx) {\n throw new Error('useWidget must be used within a WidgetProvider');\n }\n return ctx;\n}\n","import { useWidget } from '../WidgetProvider';\n\nexport function useConfig() {\n const { config } = useWidget();\n\n return config;\n}\n","import { useSyncExternalStore } from 'react';\nimport type { PrimitiveState } from '../../core';\n\nexport function usePrimitiveState<T>(p: PrimitiveState<T>) {\n return useSyncExternalStore(p.subscribe, p.get, p.get);\n}\n","import { useWidget } from '../WidgetProvider';\nimport { usePrimitiveState } from './usePrimitiveState';\n\nexport function useContact() {\n const { widgetCtx } = useWidget();\n const contactState = usePrimitiveState(widgetCtx.contactCtx.state);\n\n return {\n contactState,\n createUnverifiedContact: widgetCtx.contactCtx.createUnverifiedContact,\n };\n}\n","import { usePrimitiveState } from './usePrimitiveState';\nimport { useWidget } from '../WidgetProvider';\n\nexport function useMessages() {\n const { widgetCtx } = useWidget();\n const messagesState = usePrimitiveState(widgetCtx.messageCtx.state);\n\n return { messagesState, sendMessage: widgetCtx.messageCtx.sendMessage };\n}\n","import { useMemo } from 'react';\nimport { useWidget } from '../WidgetProvider';\nimport { usePrimitiveState } from './usePrimitiveState';\nimport { useConfig } from './useConfig';\n\nexport function useSessions() {\n const { widgetCtx } = useWidget();\n const { oneOpenSessionAllowed } = useConfig();\n const sessionState = usePrimitiveState(widgetCtx.sessionCtx.sessionState);\n const sessionsState = usePrimitiveState(widgetCtx.sessionCtx.sessionsState);\n\n const { openSessions, closedSessions } = useMemo(() => {\n return {\n openSessions: sessionsState.data.filter((s) => s.isOpened === true),\n closedSessions: sessionsState.data.filter((s) => s.isOpened === false),\n };\n }, [sessionsState.data]);\n\n const canCreateNewSession = useMemo(() => {\n if (oneOpenSessionAllowed) {\n return openSessions.length === 0;\n }\n return true;\n }, [oneOpenSessionAllowed, openSessions.length]);\n\n return {\n sessionState,\n sessionsState,\n loadMoreSessions: widgetCtx.sessionCtx.loadMoreSessions,\n resolveSession: widgetCtx.sessionCtx.resolveSession,\n createStateCheckpoint: widgetCtx.sessionCtx.createStateCheckpoint,\n openSessions,\n closedSessions,\n canCreateNewSession,\n };\n}\n","import { useMessages } from './useMessages';\nimport { useSessions } from './useSessions';\n\nexport function useIsAwaitingBotReply() {\n const { sessionState } = useSessions();\n const { messagesState } = useMessages();\n\n const isSessionAssignedToAI = sessionState.session?.assignee.kind === 'ai';\n // This check is useful in cases where the user might navigate in and out of a chat, and `isSendingMessage` is reset back to its default value\n const lastMessage =\n messagesState.messages.length > 0\n ? messagesState.messages[messagesState.messages.length - 1]\n : null;\n const isLastMessageAUserMessage = lastMessage?.type === 'FROM_USER';\n\n const isAwaitingBotReply =\n (isSessionAssignedToAI || sessionState.isCreatingSession) &&\n (messagesState.isSendingMessage || isLastMessageAUserMessage);\n\n return { isAwaitingBotReply };\n}\n","import useSWR from 'swr';\nimport { useWidget } from '../WidgetProvider';\n\nfunction usePreludeData() {\n const { widgetCtx } = useWidget();\n\n // TODO remove swr dependency\n return useSWR([widgetCtx.config.token], widgetCtx.api.widgetPrelude, {\n revalidateOnFocus: false,\n });\n}\n\nexport { usePreludeData };\n","import { useWidget } from '../WidgetProvider';\nimport { usePrimitiveState } from './usePrimitiveState';\n\nexport function useWidgetRouter() {\n const { widgetCtx } = useWidget();\n\n const routerState = usePrimitiveState(widgetCtx.routerCtx.state);\n\n return {\n routerState,\n toSessionsScreen: widgetCtx.routerCtx.toSessionsScreen,\n toChatScreen: widgetCtx.routerCtx.toChatScreen,\n };\n}\n","import { useEffect, useMemo, useState } from 'react';\nimport { useWidget } from '../WidgetProvider';\nimport { v4 } from 'uuid';\n\nconst uploadAbortControllers: Map<string, AbortController> = new Map();\n\ninterface FileWithProgress {\n status: 'pending' | 'uploading' | 'success' | 'error';\n id: string;\n file: File;\n fileUrl?: string;\n progress: number;\n error?: string;\n}\n\nfunction useUploadFiles() {\n const [files, setFiles] = useState<FileWithProgress[]>([]);\n const {\n widgetCtx: { api },\n } = useWidget();\n function appendFiles(files: File[]) {\n const newFiles = files.map((file) => ({\n file,\n id: v4(),\n status: 'pending' as const,\n progress: 0,\n }));\n\n setFiles((prev) => [...prev, ...newFiles]);\n newFiles.forEach(uploadFile);\n }\n\n function updateFileById(id: string, update: Partial<FileWithProgress>) {\n setFiles((prev) =>\n prev.map((f) => (f.id === id ? { ...f, ...update } : f)),\n );\n }\n\n function removeFileById(id: string) {\n setFiles((prev) => prev.filter((f) => f.id !== id));\n }\n\n const uploadFile = async (fileItem: FileWithProgress) => {\n const controller = new AbortController();\n uploadAbortControllers.set(fileItem.id, controller);\n\n try {\n setFiles((prev) =>\n prev.map((f) =>\n f.id === fileItem.id ? { ...f, status: 'uploading', progress: 0 } : f,\n ),\n );\n\n const response = await api.uploadFile({\n file: fileItem.file,\n abortSignal: controller.signal,\n onProgress: (percentage) => {\n updateFileById(fileItem.id, { progress: percentage });\n },\n });\n\n updateFileById(fileItem.id, {\n status: 'success',\n fileUrl: response.fileUrl,\n progress: 100,\n });\n } catch (error) {\n if (!controller.signal.aborted) {\n updateFileById(fileItem.id, {\n status: 'error',\n error: error instanceof Error ? error.message : 'Upload failed',\n progress: 0,\n });\n }\n } finally {\n uploadAbortControllers.delete(fileItem.id);\n }\n };\n\n const handleCancelUpload = (fileId: string) => {\n const controller = uploadAbortControllers.get(fileId);\n if (controller) {\n controller.abort();\n uploadAbortControllers.delete(fileId);\n }\n removeFileById(fileId);\n };\n\n const successFiles = useMemo(() => {\n return files.filter((f) => f.status === 'success' && f.fileUrl);\n }, [files]);\n\n function emptyTheFiles() {\n uploadAbortControllers.forEach((controller) => controller.abort());\n uploadAbortControllers.clear();\n setFiles([]);\n }\n\n useEffect(() => {\n return () => {\n uploadAbortControllers.forEach((controller) => controller.abort());\n uploadAbortControllers.clear();\n };\n }, []);\n\n return {\n allFiles: files,\n appendFiles,\n handleCancelUpload,\n successFiles,\n emptyTheFiles,\n getFileById: (id: string) => files.find((f) => f.id === id),\n getUploadProgress: (id: string) =>\n files.find((f) => f.id === id)?.progress ?? 0,\n getUploadStatus: (id: string) => files.find((f) => f.id === id)?.status,\n hasErrors: files.some((f) => f.status === 'error'),\n isUploading: files.some((f) => f.status === 'uploading'),\n };\n}\n\nexport { useUploadFiles, type FileWithProgress };\n","import React, {\n createContext,\n useContext,\n useEffect,\n useState,\n type Dispatch,\n type ReactNode,\n type SetStateAction,\n} from 'react';\nimport { useConfig } from './useConfig';\n\ntype WidgetTriggerCtx = {\n isOpen: boolean;\n setIsOpen: Dispatch<SetStateAction<boolean>>;\n};\n\nconst context = createContext<WidgetTriggerCtx | null>(null);\n\nexport function WidgetTriggerProvider({ children }: { children: ReactNode }) {\n const config = useConfig();\n const [isOpen, setIsOpen] = useState(config.isOpen ?? false);\n\n useEffect(() => {\n setIsOpen((prev) => config.isOpen ?? prev);\n }, [config.isOpen]);\n\n useEffect(() => {\n const openAfterNSeconds = config.openAfterNSeconds;\n if (typeof openAfterNSeconds !== 'number' || isNaN(openAfterNSeconds))\n return;\n\n const timeout = setTimeout(() => setIsOpen(true), openAfterNSeconds * 1000);\n\n return () => clearTimeout(timeout);\n }, [config.openAfterNSeconds]);\n\n return (\n <context.Provider value={{ isOpen, setIsOpen }}>\n {children}\n </context.Provider>\n );\n}\n\nexport function useWidgetTrigger() {\n const ctx = useContext(context);\n if (!ctx) {\n throw new Error(\n 'useWidgetTrigger must be used within a WidgetTriggerProvider',\n );\n }\n return ctx;\n}\n","import { useWidget } from '../WidgetProvider';\nimport { useSessions } from './useSessions';\n\nexport function useModes() {\n const { widgetCtx, modesComponents } = useWidget();\n const { sessionState } = useSessions();\n\n const modes = widgetCtx.modes;\n const activeModeId = sessionState.session?.modeId;\n const activeMode = modes.find((mode) => mode.id === activeModeId);\n\n const Component = modesComponents?.find((modeComponent) =>\n [\n activeMode?.id || '',\n activeMode?.name?.toLowerCase() || '',\n activeMode?.slug?.toLowerCase() || '',\n ].includes(modeComponent.key.toLowerCase()),\n )?.component;\n\n return {\n modes,\n modesComponents,\n activeModeId,\n activeMode,\n Component,\n };\n}\n"],"names":["ComponentRegistry","opts","components","c","component","index","key","_a","context","createContext","WidgetProvider","config","children","modesComponents","storage","loadingComponent","contentIframeRef","useRef","didInitialize","widgetCtx","setWidgetCtx","useState","componentStore","useMemo","useEffect","WidgetCtx","jsx","version","useWidget","ctx","useContext","useConfig","usePrimitiveState","p","useSyncExternalStore","useContact","useMessages","useSessions","oneOpenSessionAllowed","sessionState","sessionsState","openSessions","closedSessions","s","canCreateNewSession","useIsAwaitingBotReply","messagesState","isSessionAssignedToAI","lastMessage","isLastMessageAUserMessage","usePreludeData","useSWR","useWidgetRouter","uploadAbortControllers","useUploadFiles","files","setFiles","api","appendFiles","newFiles","file","v4","prev","uploadFile","updateFileById","id","update","f","removeFileById","fileItem","controller","response","percentage","error","handleCancelUpload","fileId","successFiles","emptyTheFiles","WidgetTriggerProvider","isOpen","setIsOpen","openAfterNSeconds","timeout","useWidgetTrigger","useModes","modes","activeModeId","activeMode","mode","Component","_b","modeComponent"],"mappings":"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"}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
"use strict";const js=/\{[^{}]+\}/g,Ds=()=>{var r,n;return typeof process=="object"&&Number.parseInt((n=(r=process==null?void 0:process.versions)==null?void 0:r.node)==null?void 0:n.substring(0,2))>=18&&process.versions.undici};function Fs(){return Math.random().toString(36).slice(2,11)}function Ls(r){let{baseUrl:n="",Request:o=globalThis.Request,fetch:h=globalThis.fetch,querySerializer:c,bodySerializer:a,headers:s,requestInitExt:l=void 0,...d}={...r};l=Ds()?l:void 0,n=dt(n);const y=[];async function g(p,f){const{baseUrl:v,fetch:F=h,Request:j=o,headers:q,params:E={},parseAs:S="json",querySerializer:I,bodySerializer:ee=a??zs,body:_,...D}=f||{};v&&(n=dt(v));let k=typeof c=="function"?c:ft(c);I&&(k=typeof I=="function"?I:ft({...typeof c=="object"?c:{},...I}));const ce=_===void 0?void 0:ee(_),fe=ce===void 0||ce instanceof FormData?{}:{"Content-Type":"application/json"},de={redirect:"follow",...d,...D,body:ce,headers:ks(fe,s,q,E.header)};let te,N,G=new o(qs(p,{baseUrl:n,params:E,querySerializer:k}),de);for(const O in D)O in G||(G[O]=D[O]);if(y.length){te=Fs(),N=Object.freeze({baseUrl:n,fetch:F,parseAs:S,querySerializer:k,bodySerializer:ee});for(const O of y)if(O&&typeof O=="object"&&typeof O.onRequest=="function"){const U=await O.onRequest({request:G,schemaPath:p,params:E,options:N,id:te});if(U){if(!(U instanceof o))throw new Error("onRequest: must return new Request() when modifying the request");G=U}}}let T;try{T=await F(G,l)}catch(O){let U=O;if(y.length)for(let K=y.length-1;K>=0;K--){const ue=y[K];if(ue&&typeof ue=="object"&&typeof ue.onError=="function"){const se=await ue.onError({request:G,error:U,schemaPath:p,params:E,options:N,id:te});if(se){if(se instanceof Response){U=void 0,T=se;break}if(se instanceof Error){U=se;continue}throw new Error("onError: must return new Response() or instance of Error")}}}if(U)throw U}if(y.length)for(let O=y.length-1;O>=0;O--){const U=y[O];if(U&&typeof U=="object"&&typeof U.onResponse=="function"){const K=await U.onResponse({request:G,response:T,schemaPath:p,params:E,options:N,id:te});if(K){if(!(K instanceof Response))throw new Error("onResponse: must return new Response() when modifying the response");T=K}}}if(T.status===204||T.headers.get("Content-Length")==="0")return T.ok?{data:void 0,response:T}:{error:void 0,response:T};if(T.ok)return S==="stream"?{data:T.body,response:T}:{data:await T[S](),response:T};let ge=await T.text();try{ge=JSON.parse(ge)}catch{}return{error:ge,response:T}}return{request(p,f,v){return g(f,{...v,method:p.toUpperCase()})},GET(p,f){return g(p,{...f,method:"GET"})},PUT(p,f){return g(p,{...f,method:"PUT"})},POST(p,f){return g(p,{...f,method:"POST"})},DELETE(p,f){return g(p,{...f,method:"DELETE"})},OPTIONS(p,f){return g(p,{...f,method:"OPTIONS"})},HEAD(p,f){return g(p,{...f,method:"HEAD"})},PATCH(p,f){return g(p,{...f,method:"PATCH"})},TRACE(p,f){return g(p,{...f,method:"TRACE"})},use(...p){for(const f of p)if(f){if(typeof f!="object"||!("onRequest"in f||"onResponse"in f||"onError"in f))throw new Error("Middleware must be an object with one of `onRequest()`, `onResponse() or `onError()`");y.push(f)}},eject(...p){for(const f of p){const v=y.indexOf(f);v!==-1&&y.splice(v,1)}}}}function Re(r,n,o){if(n==null)return"";if(typeof n=="object")throw new Error("Deeply-nested arrays/objects aren’t supported. Provide your own `querySerializer()` to handle these.");return`${r}=${(o==null?void 0:o.allowReserved)===!0?n:encodeURIComponent(n)}`}function yt(r,n,o){if(!n||typeof n!="object")return"";const h=[],c={simple:",",label:".",matrix:";"}[o.style]||"&";if(o.style!=="deepObject"&&o.explode===!1){for(const l in n)h.push(l,o.allowReserved===!0?n[l]:encodeURIComponent(n[l]));const s=h.join(",");switch(o.style){case"form":return`${r}=${s}`;case"label":return`.${s}`;case"matrix":return`;${r}=${s}`;default:return s}}for(const s in n){const l=o.style==="deepObject"?`${r}[${s}]`:s;h.push(Re(l,n[s],o))}const a=h.join(c);return o.style==="label"||o.style==="matrix"?`${c}${a}`:a}function mt(r,n,o){if(!Array.isArray(n))return"";if(o.explode===!1){const a={form:",",spaceDelimited:"%20",pipeDelimited:"|"}[o.style]||",",s=(o.allowReserved===!0?n:n.map(l=>encodeURIComponent(l))).join(a);switch(o.style){case"simple":return s;case"label":return`.${s}`;case"matrix":return`;${r}=${s}`;default:return`${r}=${s}`}}const h={simple:",",label:".",matrix:";"}[o.style]||"&",c=[];for(const a of n)o.style==="simple"||o.style==="label"?c.push(o.allowReserved===!0?a:encodeURIComponent(a)):c.push(Re(r,a,o));return o.style==="label"||o.style==="matrix"?`${h}${c.join(h)}`:c.join(h)}function ft(r){return function(o){const h=[];if(o&&typeof o=="object")for(const c in o){const a=o[c];if(a!=null){if(Array.isArray(a)){if(a.length===0)continue;h.push(mt(c,a,{style:"form",explode:!0,...r==null?void 0:r.array,allowReserved:(r==null?void 0:r.allowReserved)||!1}));continue}if(typeof a=="object"){h.push(yt(c,a,{style:"deepObject",explode:!0,...r==null?void 0:r.object,allowReserved:(r==null?void 0:r.allowReserved)||!1}));continue}h.push(Re(c,a,r))}}return h.join("&")}}function $s(r,n){let o=r;for(const h of r.match(js)??[]){let c=h.substring(1,h.length-1),a=!1,s="simple";if(c.endsWith("*")&&(a=!0,c=c.substring(0,c.length-1)),c.startsWith(".")?(s="label",c=c.substring(1)):c.startsWith(";")&&(s="matrix",c=c.substring(1)),!n||n[c]===void 0||n[c]===null)continue;const l=n[c];if(Array.isArray(l)){o=o.replace(h,mt(c,l,{style:s,explode:a}));continue}if(typeof l=="object"){o=o.replace(h,yt(c,l,{style:s,explode:a}));continue}if(s==="matrix"){o=o.replace(h,`;${Re(c,l)}`);continue}o=o.replace(h,s==="label"?`.${encodeURIComponent(l)}`:encodeURIComponent(l))}return o}function zs(r){return r instanceof FormData?r:JSON.stringify(r)}function qs(r,n){var c;let o=`${n.baseUrl}${r}`;(c=n.params)!=null&&c.path&&(o=$s(o,n.params.path));let h=n.querySerializer(n.params.query??{});return h.startsWith("?")&&(h=h.substring(1)),h&&(o+=`?${h}`),o}function ks(...r){const n=new Headers;for(const o of r){if(!o||typeof o!="object")continue;const h=o instanceof Headers?o.entries():Object.entries(o);for(const[c,a]of h)if(a===null)n.delete(c);else if(Array.isArray(a))for(const s of a)n.append(c,s);else a!==void 0&&n.set(c,a)}return n}function dt(r){return r.endsWith("/")?r.substring(0,r.length-1):r}const Bs=r=>{console.log(r.error)},Hs=r=>{const n=Ls({baseUrl:r.baseUrl}),o={onRequest:r.onRequest,onResponse:r.onResponse,onError:r.onError||Bs};return n.use(o),n};class gt{constructor({config:n}){var c,a;this.userToken=null,this.constructClientOptions=s=>{const l=this.config.apiUrl||"https://api.open.cx",d={"X-Bot-Token":this.config.token,"Content-Type":"application/json",Accept:"application/json",Authorization:s?`Bearer ${s}`:void 0};return{baseUrl:l,headers:d}},this.createOpenAPIClient=({baseUrl:s,headers:l})=>Hs({baseUrl:s,onRequest:({request:d})=>{Object.entries(l).forEach(([y,g])=>{g&&d.headers.set(y,g)})}}),this.setAuthToken=s=>{this.userToken=s;const{baseUrl:l,headers:d}=this.constructClientOptions(s);this.client=this.createOpenAPIClient({baseUrl:l,headers:d})},this.getExternalWidgetConfig=async()=>await this.client.GET("/backend/widget/v2/config",{params:{header:{"X-Bot-Token":this.config.token}}}),this.widgetPrelude=async()=>await this.client.GET("/backend/widget/v2/prelude",{params:{header:{"X-Bot-Token":this.config.token}}}),this.sendMessage=async(s,l)=>await this.client.POST("/backend/widget/v2/chat/send",{body:s,signal:l}),this.createUnverifiedContact=async s=>await this.client.POST("/backend/widget/v2/contact/create-unverified",{params:{header:{"x-bot-token":this.config.token}},body:s}),this.createSession=async s=>await this.client.POST("/backend/widget/v2/create-session",{body:s}),this.pollSessionAndHistory=async({sessionId:s,lastMessageTimestamp:l,abortSignal:d})=>{const y=l?{lastMessageTimestamp:l}:void 0;return await this.client.GET("/backend/widget/v2/poll/{sessionId}",{params:{path:{sessionId:s},query:y},signal:d})},this.getSessions=async({cursor:s,filters:l,abortSignal:d})=>await this.client.GET("/backend/widget/v2/sessions",{params:{query:{cursor:s,filters:JSON.stringify(l)}},signal:d}),this.uploadFile=async({file:s,abortSignal:l,onProgress:d})=>new Promise((y,g)=>{var E;const p=new FormData;p.append("file",s);const f=new XMLHttpRequest;if(l&&(l.addEventListener("abort",()=>{f.abort(),g(new DOMException("Aborted","AbortError"))}),l.aborted)){g(new DOMException("Aborted","AbortError"));return}f.upload.addEventListener("progress",S=>{if(S.lengthComputable&&d){const I=Math.round(S.loaded/S.total*100);d(I)}}),f.addEventListener("load",()=>{if(f.status>=200&&f.status<300)try{const S=JSON.parse(f.responseText);y(S)}catch(S){g(new Error(`Failed to parse response: ${S}`))}else g(new Error(`Upload failed with status: ${f.status}`))}),f.addEventListener("error",()=>{g(new Error("Network error occurred"))}),f.addEventListener("timeout",()=>{g(new Error("Upload timed out"))});const{baseUrl:v}=this.constructClientOptions(this.userToken),j=`${v}/backend/widget/v2/upload`;f.open("POST",j),f.setRequestHeader("X-Bot-Token",this.config.token),this.userToken??((E=this.config.user)==null?void 0:E.token)?f.setRequestHeader("Authorization",`Bearer ${this.userToken}`):console.error("User token not set"),f.send(p)}),this.vote=async s=>await this.client.POST("/backend/widget/v2/chat/vote",{body:s}),this.resolveSession=async(s,l)=>await this.client.POST("/backend/widget/v2/session/resolve",{body:s,signal:l}),this.createStateCheckpoint=async s=>await this.client.POST("/backend/widget/v2/checkpoint",{body:s}),this.config=n,this.userToken=((c=n.user)==null?void 0:c.token)||null;const{baseUrl:o,headers:h}=this.constructClientOptions((a=n.user)==null?void 0:a.token);this.client=this.createOpenAPIClient({baseUrl:o,headers:h})}}var Ie=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Ns(r){return r&&r.__esModule&&Object.prototype.hasOwnProperty.call(r,"default")?r.default:r}var Pe={exports:{}};Pe.exports;(function(r,n){var o=200,h="__lodash_hash_undefined__",c=1,a=2,s=9007199254740991,l="[object Arguments]",d="[object Array]",y="[object AsyncFunction]",g="[object Boolean]",p="[object Date]",f="[object Error]",v="[object Function]",F="[object GeneratorFunction]",j="[object Map]",q="[object Number]",E="[object Null]",S="[object Object]",I="[object Promise]",ee="[object Proxy]",_="[object RegExp]",D="[object Set]",k="[object String]",ce="[object Symbol]",fe="[object Undefined]",de="[object WeakMap]",te="[object ArrayBuffer]",N="[object DataView]",G="[object Float32Array]",T="[object Float64Array]",ge="[object Int8Array]",O="[object Int16Array]",U="[object Int32Array]",K="[object Uint8Array]",ue="[object Uint8ClampedArray]",se="[object Uint16Array]",Ct="[object Uint32Array]",bt=/[\\^$.*+?()[\]{}|]/g,wt=/^\[object .+?Constructor\]$/,vt=/^(?:0|[1-9]\d*)$/,C={};C[G]=C[T]=C[ge]=C[O]=C[U]=C[K]=C[ue]=C[se]=C[Ct]=!0,C[l]=C[d]=C[te]=C[g]=C[N]=C[p]=C[f]=C[v]=C[j]=C[q]=C[S]=C[_]=C[D]=C[k]=C[de]=!1;var Be=typeof Ie=="object"&&Ie&&Ie.Object===Object&&Ie,xt=typeof self=="object"&&self&&self.Object===Object&&self,W=Be||xt||Function("return this")(),He=n&&!n.nodeType&&n,Ne=He&&!0&&r&&!r.nodeType&&r,Ge=Ne&&Ne.exports===He,Ee=Ge&&Be.process,Ke=function(){try{return Ee&&Ee.binding&&Ee.binding("util")}catch{}}(),We=Ke&&Ke.isTypedArray;function _t(e,t){for(var i=-1,u=e==null?0:e.length,b=0,m=[];++i<u;){var x=e[i];t(x,i,e)&&(m[b++]=x)}return m}function Tt(e,t){for(var i=-1,u=t.length,b=e.length;++i<u;)e[b+i]=t[i];return e}function At(e,t){for(var i=-1,u=e==null?0:e.length;++i<u;)if(t(e[i],i,e))return!0;return!1}function It(e,t){for(var i=-1,u=Array(e);++i<e;)u[i]=t(i);return u}function Pt(e){return function(t){return e(t)}}function Rt(e,t){return e.has(t)}function Et(e,t){return e==null?void 0:e[t]}function Ot(e){var t=-1,i=Array(e.size);return e.forEach(function(u,b){i[++t]=[b,u]}),i}function Ut(e,t){return function(i){return e(t(i))}}function Mt(e){var t=-1,i=Array(e.size);return e.forEach(function(u){i[++t]=u}),i}var jt=Array.prototype,Dt=Function.prototype,Ce=Object.prototype,Oe=W["__core-js_shared__"],Xe=Dt.toString,H=Ce.hasOwnProperty,Je=function(){var e=/[^.]+$/.exec(Oe&&Oe.keys&&Oe.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}(),Ye=Ce.toString,Ft=RegExp("^"+Xe.call(H).replace(bt,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Qe=Ge?W.Buffer:void 0,be=W.Symbol,Ze=W.Uint8Array,Ve=Ce.propertyIsEnumerable,Lt=jt.splice,ne=be?be.toStringTag:void 0,et=Object.getOwnPropertySymbols,$t=Qe?Qe.isBuffer:void 0,zt=Ut(Object.keys,Object),Ue=he(W,"DataView"),pe=he(W,"Map"),Me=he(W,"Promise"),je=he(W,"Set"),De=he(W,"WeakMap"),ye=he(Object,"create"),qt=ae(Ue),kt=ae(pe),Bt=ae(Me),Ht=ae(je),Nt=ae(De),tt=be?be.prototype:void 0,Fe=tt?tt.valueOf:void 0;function ie(e){var t=-1,i=e==null?0:e.length;for(this.clear();++t<i;){var u=e[t];this.set(u[0],u[1])}}function Gt(){this.__data__=ye?ye(null):{},this.size=0}function Kt(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}function Wt(e){var t=this.__data__;if(ye){var i=t[e];return i===h?void 0:i}return H.call(t,e)?t[e]:void 0}function Xt(e){var t=this.__data__;return ye?t[e]!==void 0:H.call(t,e)}function Jt(e,t){var i=this.__data__;return this.size+=this.has(e)?0:1,i[e]=ye&&t===void 0?h:t,this}ie.prototype.clear=Gt,ie.prototype.delete=Kt,ie.prototype.get=Wt,ie.prototype.has=Xt,ie.prototype.set=Jt;function X(e){var t=-1,i=e==null?0:e.length;for(this.clear();++t<i;){var u=e[t];this.set(u[0],u[1])}}function Yt(){this.__data__=[],this.size=0}function Qt(e){var t=this.__data__,i=ve(t,e);if(i<0)return!1;var u=t.length-1;return i==u?t.pop():Lt.call(t,i,1),--this.size,!0}function Zt(e){var t=this.__data__,i=ve(t,e);return i<0?void 0:t[i][1]}function Vt(e){return ve(this.__data__,e)>-1}function es(e,t){var i=this.__data__,u=ve(i,e);return u<0?(++this.size,i.push([e,t])):i[u][1]=t,this}X.prototype.clear=Yt,X.prototype.delete=Qt,X.prototype.get=Zt,X.prototype.has=Vt,X.prototype.set=es;function re(e){var t=-1,i=e==null?0:e.length;for(this.clear();++t<i;){var u=e[t];this.set(u[0],u[1])}}function ts(){this.size=0,this.__data__={hash:new ie,map:new(pe||X),string:new ie}}function ss(e){var t=xe(this,e).delete(e);return this.size-=t?1:0,t}function ns(e){return xe(this,e).get(e)}function is(e){return xe(this,e).has(e)}function rs(e,t){var i=xe(this,e),u=i.size;return i.set(e,t),this.size+=i.size==u?0:1,this}re.prototype.clear=ts,re.prototype.delete=ss,re.prototype.get=ns,re.prototype.has=is,re.prototype.set=rs;function we(e){var t=-1,i=e==null?0:e.length;for(this.__data__=new re;++t<i;)this.add(e[t])}function as(e){return this.__data__.set(e,h),this}function os(e){return this.__data__.has(e)}we.prototype.add=we.prototype.push=as,we.prototype.has=os;function Q(e){var t=this.__data__=new X(e);this.size=t.size}function ls(){this.__data__=new X,this.size=0}function cs(e){var t=this.__data__,i=t.delete(e);return this.size=t.size,i}function us(e){return this.__data__.get(e)}function hs(e){return this.__data__.has(e)}function fs(e,t){var i=this.__data__;if(i instanceof X){var u=i.__data__;if(!pe||u.length<o-1)return u.push([e,t]),this.size=++i.size,this;i=this.__data__=new re(u)}return i.set(e,t),this.size=i.size,this}Q.prototype.clear=ls,Q.prototype.delete=cs,Q.prototype.get=us,Q.prototype.has=hs,Q.prototype.set=fs;function ds(e,t){var i=_e(e),u=!i&&Ps(e),b=!i&&!u&&Le(e),m=!i&&!u&&!b&&ut(e),x=i||u||b||m,A=x?It(e.length,String):[],P=A.length;for(var w in e)H.call(e,w)&&!(x&&(w=="length"||b&&(w=="offset"||w=="parent")||m&&(w=="buffer"||w=="byteLength"||w=="byteOffset")||xs(w,P)))&&A.push(w);return A}function ve(e,t){for(var i=e.length;i--;)if(at(e[i][0],t))return i;return-1}function gs(e,t,i){var u=t(e);return _e(e)?u:Tt(u,i(e))}function me(e){return e==null?e===void 0?fe:E:ne&&ne in Object(e)?ws(e):Is(e)}function st(e){return Se(e)&&me(e)==l}function nt(e,t,i,u,b){return e===t?!0:e==null||t==null||!Se(e)&&!Se(t)?e!==e&&t!==t:ps(e,t,i,u,nt,b)}function ps(e,t,i,u,b,m){var x=_e(e),A=_e(t),P=x?d:Z(e),w=A?d:Z(t);P=P==l?S:P,w=w==l?S:w;var L=P==S,B=w==S,M=P==w;if(M&&Le(e)){if(!Le(t))return!1;x=!0,L=!1}if(M&&!L)return m||(m=new Q),x||ut(e)?it(e,t,i,u,b,m):Cs(e,t,P,i,u,b,m);if(!(i&c)){var $=L&&H.call(e,"__wrapped__"),z=B&&H.call(t,"__wrapped__");if($||z){var V=$?e.value():e,J=z?t.value():t;return m||(m=new Q),b(V,J,i,u,m)}}return M?(m||(m=new Q),bs(e,t,i,u,b,m)):!1}function ys(e){if(!ct(e)||Ts(e))return!1;var t=ot(e)?Ft:wt;return t.test(ae(e))}function ms(e){return Se(e)&<(e.length)&&!!C[me(e)]}function Ss(e){if(!As(e))return zt(e);var t=[];for(var i in Object(e))H.call(e,i)&&i!="constructor"&&t.push(i);return t}function it(e,t,i,u,b,m){var x=i&c,A=e.length,P=t.length;if(A!=P&&!(x&&P>A))return!1;var w=m.get(e);if(w&&m.get(t))return w==t;var L=-1,B=!0,M=i&a?new we:void 0;for(m.set(e,t),m.set(t,e);++L<A;){var $=e[L],z=t[L];if(u)var V=x?u(z,$,L,t,e,m):u($,z,L,e,t,m);if(V!==void 0){if(V)continue;B=!1;break}if(M){if(!At(t,function(J,oe){if(!Rt(M,oe)&&($===J||b($,J,i,u,m)))return M.push(oe)})){B=!1;break}}else if(!($===z||b($,z,i,u,m))){B=!1;break}}return m.delete(e),m.delete(t),B}function Cs(e,t,i,u,b,m,x){switch(i){case N:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case te:return!(e.byteLength!=t.byteLength||!m(new Ze(e),new Ze(t)));case g:case p:case q:return at(+e,+t);case f:return e.name==t.name&&e.message==t.message;case _:case k:return e==t+"";case j:var A=Ot;case D:var P=u&c;if(A||(A=Mt),e.size!=t.size&&!P)return!1;var w=x.get(e);if(w)return w==t;u|=a,x.set(e,t);var L=it(A(e),A(t),u,b,m,x);return x.delete(e),L;case ce:if(Fe)return Fe.call(e)==Fe.call(t)}return!1}function bs(e,t,i,u,b,m){var x=i&c,A=rt(e),P=A.length,w=rt(t),L=w.length;if(P!=L&&!x)return!1;for(var B=P;B--;){var M=A[B];if(!(x?M in t:H.call(t,M)))return!1}var $=m.get(e);if($&&m.get(t))return $==t;var z=!0;m.set(e,t),m.set(t,e);for(var V=x;++B<P;){M=A[B];var J=e[M],oe=t[M];if(u)var ht=x?u(oe,J,M,t,e,m):u(J,oe,M,e,t,m);if(!(ht===void 0?J===oe||b(J,oe,i,u,m):ht)){z=!1;break}V||(V=M=="constructor")}if(z&&!V){var Te=e.constructor,Ae=t.constructor;Te!=Ae&&"constructor"in e&&"constructor"in t&&!(typeof Te=="function"&&Te instanceof Te&&typeof Ae=="function"&&Ae instanceof Ae)&&(z=!1)}return m.delete(e),m.delete(t),z}function rt(e){return gs(e,Os,vs)}function xe(e,t){var i=e.__data__;return _s(t)?i[typeof t=="string"?"string":"hash"]:i.map}function he(e,t){var i=Et(e,t);return ys(i)?i:void 0}function ws(e){var t=H.call(e,ne),i=e[ne];try{e[ne]=void 0;var u=!0}catch{}var b=Ye.call(e);return u&&(t?e[ne]=i:delete e[ne]),b}var vs=et?function(e){return e==null?[]:(e=Object(e),_t(et(e),function(t){return Ve.call(e,t)}))}:Us,Z=me;(Ue&&Z(new Ue(new ArrayBuffer(1)))!=N||pe&&Z(new pe)!=j||Me&&Z(Me.resolve())!=I||je&&Z(new je)!=D||De&&Z(new De)!=de)&&(Z=function(e){var t=me(e),i=t==S?e.constructor:void 0,u=i?ae(i):"";if(u)switch(u){case qt:return N;case kt:return j;case Bt:return I;case Ht:return D;case Nt:return de}return t});function xs(e,t){return t=t??s,!!t&&(typeof e=="number"||vt.test(e))&&e>-1&&e%1==0&&e<t}function _s(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}function Ts(e){return!!Je&&Je in e}function As(e){var t=e&&e.constructor,i=typeof t=="function"&&t.prototype||Ce;return e===i}function Is(e){return Ye.call(e)}function ae(e){if(e!=null){try{return Xe.call(e)}catch{}try{return e+""}catch{}}return""}function at(e,t){return e===t||e!==e&&t!==t}var Ps=st(function(){return arguments}())?st:function(e){return Se(e)&&H.call(e,"callee")&&!Ve.call(e,"callee")},_e=Array.isArray;function Rs(e){return e!=null&<(e.length)&&!ot(e)}var Le=$t||Ms;function Es(e,t){return nt(e,t)}function ot(e){if(!ct(e))return!1;var t=me(e);return t==v||t==F||t==y||t==ee}function lt(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=s}function ct(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}function Se(e){return e!=null&&typeof e=="object"}var ut=We?Pt(We):ms;function Os(e){return Rs(e)?ds(e):Ss(e)}function Us(){return[]}function Ms(){return!1}r.exports=Es})(Pe,Pe.exports);var Gs=Pe.exports;const Ks=Ns(Gs);class le{constructor(n){this.subscribers=new Set,this.get=()=>this.state,this.set=o=>{Ks(this.state,o)||(this.state=o,this.notifySubscribers(o))},this.setPartial=o=>{if(o==null)return;const h={...this.state,...o};this.set(h)},this.reset=()=>{this.set(this.initialState)},this.notifySubscribers=o=>{Array.from(this.subscribers).forEach(c=>{try{c(o)}catch(a){console.error(a)}})},this.subscribe=o=>(this.subscribers.add(o),()=>{this.subscribers.delete(o)}),this.state=n,this.initialState=n}}class St{constructor(){this.state=new le({isPolling:!1,isError:!1}),this.abortController=new AbortController,this.reset=()=>{var n;this.abortController.abort("Resetting poller"),(n=this.stopPolling)==null||n.call(this),this.stopPolling=null},this.stopPolling=null,this.startPolling=(n,o)=>{if(this.stopPolling)return;const h=[],c=async()=>{this.abortController=new AbortController,this.state.setPartial({isPolling:!0});try{await n(this.abortController.signal)}catch(a){if(this.abortController.signal.aborted)return;console.error("Failed to poll:",a),this.state.setPartial({isError:!0})}finally{this.state.setPartial({isPolling:!1})}this.abortController.signal.aborted?console.log("Poller aborted, not scheduling anymore"):h.push(setTimeout(c,o))};c(),this.stopPolling=()=>{h.forEach(clearTimeout),this.state.reset()}}}}function Ws(r){try{const n=r();return n instanceof Promise?n.then(o=>({data:o})).catch(o=>({error:o})):{data:n}}catch(n){return{error:n}}}class Xs{constructor({api:n,config:o,sessionCtx:h,messageCtx:c,sessionPollingIntervalSeconds:a}){this.poller=new St,this.registerPolling=()=>{this.sessionCtx.sessionState.subscribe(({session:s})=>{s!=null&&s.id?this.poller.startPolling(async l=>{this.hackAndSlash(s.id,l)},this.sessionPollingIntervalSeconds*1e3):this.poller.reset()})},this.hackAndSlash=async(s,l)=>{var p;this.messageCtx.state.get().messages.length===0&&this.messageCtx.state.setPartial({isInitialFetchLoading:!0});const d=this.messageCtx.state.get().messages,y=d.length>0?(p=d[d.length-1])==null?void 0:p.timestamp:void 0,{data:g}=await this.api.pollSessionAndHistory({sessionId:s,abortSignal:l,lastMessageTimestamp:y});if(g!=null&&g.session&&(this.sessionCtx.sessionState.setPartial({session:g.session}),this.sessionCtx.setSessions([g.session])),g!=null&&g.history&&g.history.length>0){const f=this.messageCtx.state.get().messages,v=g.history.map(this.mapHistoryToMessage).filter(F=>!f.some(j=>j.id===F.id));this.messageCtx.state.setPartial({messages:[...f,...v]})}this.messageCtx.state.get().isInitialFetchLoading&&this.messageCtx.state.setPartial({isInitialFetchLoading:!1})},this.mapHistoryToMessage=s=>{var y,g;const l={id:s.publicId,timestamp:s.sentAt||"",attachments:s.attachments||void 0};if(s.sender.kind==="user")return{...l,type:"FROM_USER",content:s.content.text||"",deliveredAt:s.sentAt||""};if(s.sender.kind==="agent")return{...l,type:"FROM_AGENT",component:"agent_message",data:{message:s.content.text||""},agent:{name:s.sender.name||"",avatar:s.sender.avatar||"",id:null,isAi:!1}};const d=s.actionCalls&&s.actionCalls.length>0?s.actionCalls[s.actionCalls.length-1]:void 0;return{...l,type:"FROM_BOT",component:"bot_message",agent:{id:null,name:((y=this.config.bot)==null?void 0:y.name)||"",isAi:!0,avatar:((g=this.config.bot)==null?void 0:g.avatar)||""},data:{message:s.content.text||"",action:d?{name:d.actionName,data:this.extractActionResult(d)}:void 0}}},this.extractActionResult=s=>{const l=s.result;if(l===null||typeof l!="object")return l;if("responseBodyText"in l&&typeof l.responseBodyText=="string"){const d=l.responseBodyText,y=Ws(()=>JSON.parse(d)).data;if(y)return y}return s.result},this.api=n,this.config=o,this.sessionCtx=h,this.messageCtx=c,this.sessionPollingIntervalSeconds=a,this.registerPolling()}}const R=[];for(let r=0;r<256;++r)R.push((r+256).toString(16).slice(1));function Js(r,n=0){return(R[r[n+0]]+R[r[n+1]]+R[r[n+2]]+R[r[n+3]]+"-"+R[r[n+4]]+R[r[n+5]]+"-"+R[r[n+6]]+R[r[n+7]]+"-"+R[r[n+8]]+R[r[n+9]]+"-"+R[r[n+10]]+R[r[n+11]]+R[r[n+12]]+R[r[n+13]]+R[r[n+14]]+R[r[n+15]]).toLowerCase()}let $e;const Ys=new Uint8Array(16);function Qs(){if(!$e){if(typeof crypto>"u"||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");$e=crypto.getRandomValues.bind(crypto)}return $e(Ys)}const Zs=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),pt={randomUUID:Zs};function ke(r,n,o){var c;if(pt.randomUUID&&!n&&!r)return pt.randomUUID();r=r||{};const h=r.random??((c=r.rng)==null?void 0:c.call(r))??Qs();if(h.length<16)throw new Error("Random bytes length must be >= 16");return h[6]=h[6]&15|64,h[8]=h[8]&63|128,Js(h)}class Vs{constructor({config:n,api:o,storageCtx:h}){var c;this.shouldCollectData=()=>{var a;return!!(!((a=this.state.get().contact)!=null&&a.token)&&this.config.collectUserData)},this.autoCreateUnverifiedUserIfNotExists=async()=>{var a,s,l,d,y,g,p,f,v,F,j,q,E,S;if(!((a=this.config.user)!=null&&a.token)){if(this.config.collectUserData&&!((l=(s=this.config.user)==null?void 0:s.data)!=null&&l.email)){if((d=this.config.extraDataCollectionFields)!=null&&d.length)return;const I=await((y=this.storageCtx)==null?void 0:y.getContactToken());I&&await this.setUnverifiedContact(I);return}if(!((p=(g=this.config.user)==null?void 0:g.data)!=null&&p.email)){const I=await((f=this.storageCtx)==null?void 0:f.getContactToken());if(I){await this.setUnverifiedContact(I);return}}await this.createUnverifiedContact({email:(F=(v=this.config.user)==null?void 0:v.data)==null?void 0:F.email,non_verified_name:((q=(j=this.config.user)==null?void 0:j.data)==null?void 0:q.name)||"Anonymous",non_verified_custom_data:(S=(E=this.config.user)==null?void 0:E.data)==null?void 0:S.customData})}},this.createUnverifiedContact=async(a,s)=>{this.state.setPartial({extraCollectedData:s});try{this.state.setPartial({isCreatingUnverifiedContact:!0,isErrorCreatingUnverifiedContact:!1});const{data:l}=await this.api.createUnverifiedContact(a);l!=null&&l.token?await this.setUnverifiedContact(l.token):this.state.setPartial({isErrorCreatingUnverifiedContact:!0})}finally{this.state.setPartial({isCreatingUnverifiedContact:!1})}},this.setUnverifiedContact=async a=>{var d,y,g,p;const s=await((d=this.storageCtx)==null?void 0:d.getExternalContactId()),l=((y=this.config.user)==null?void 0:y.externalId)||s||ke();this.api.setAuthToken(a),await((g=this.storageCtx)==null?void 0:g.setContactToken(a)),await((p=this.storageCtx)==null?void 0:p.setExternalContactId(l)),this.state.setPartial({contact:{token:a,externalId:l}})},this.config=n,this.storageCtx=h,this.api=o,this.state=new le({contact:(c=n.user)!=null&&c.token?{token:n.user.token,externalId:n.user.externalId}:null,extraCollectedData:void 0,isCreatingUnverifiedContact:!1,isErrorCreatingUnverifiedContact:!1}),this.autoCreateUnverifiedUserIfNotExists()}}function ze(){return ke()}class en{constructor({api:n,contactCtx:o,sessionsPollingIntervalSeconds:h}){this.sessionsRefresher=new St,this.sessionState=new le({session:null,isCreatingSession:!1,isResolvingSession:!1}),this.sessionsState=new le({data:[],cursor:void 0,isLastPage:!1,didStartInitialFetch:!1,isInitialFetchLoading:!0}),this.reset=async()=>{this.sessionState.reset()},this.registerSessionsRefresherWrapper=()=>{var c;(c=this.contactCtx.state.get().contact)!=null&&c.token&&!this.sessionsState.get().didStartInitialFetch?this.registerSessionsRefresher():this.contactCtx.state.subscribe(({contact:a})=>{a!=null&&a.token&&!this.sessionsState.get().didStartInitialFetch&&this.registerSessionsRefresher()})},this.registerSessionsRefresher=()=>{this.sessionsRefresher.startPolling(async()=>{this.sessionsState.get().didStartInitialFetch===!1&&this.sessionsState.setPartial({didStartInitialFetch:!0}),await this.refreshSessions(),this.sessionsState.get().isInitialFetchLoading===!0&&this.sessionsState.setPartial({isInitialFetchLoading:!1})},this.sessionsPollingIntervalSeconds*1e3)},this.createSession=async()=>{var l;this.sessionState.setPartial({session:null,isCreatingSession:!0});const c=(l=this.contactCtx.state.get().contact)==null?void 0:l.externalId,{data:a,error:s}=await this.api.createSession({customData:c?{external_id:c}:void 0});return a?(this.sessionState.setPartial({session:a,isCreatingSession:!1}),a):(this.sessionState.setPartial({isCreatingSession:!1}),console.error("Failed to create session:",s),null)},this.loadMoreSessions=async()=>{if(this.sessionsState.get().isLastPage)return;const{data:c}=await this.getSessions({cursor:this.sessionsState.get().cursor});if(c){const s=[...this.sessionsState.get().data,...c.items].filter((l,d,y)=>d===y.findIndex(g=>l.id===g.id));this.sessionsState.setPartial({data:s,cursor:c.next||void 0,isLastPage:c.next===null})}},this.getSessions=async({cursor:c})=>{var s,l;if(!((s=this.contactCtx.state.get().contact)!=null&&s.token))return{data:null};const a=(l=this.contactCtx.state.get().contact)==null?void 0:l.externalId;return await this.api.getSessions({cursor:c,filters:a?{external_id:a}:{}})},this.setSessions=c=>{const a=[...c,...this.sessionsState.get().data].filter((s,l,d)=>l===d.findIndex(y=>s.id===y.id));this.sessionsState.setPartial({data:a})},this.refreshSessions=async()=>{const{data:c}=await this.getSessions({cursor:void 0});c&&this.setSessions(c.items)},this.resolveSession=async()=>{const c=this.sessionState.get().session;if(!c||!c.isOpened)return{success:!1,error:"Session is not opened"};this.sessionState.setPartial({isResolvingSession:!0});const{data:a,error:s}=await this.api.resolveSession({session_id:c.id});return a?(this.sessionState.setPartial({session:a,isResolvingSession:!1}),{success:!0,data:a}):(this.sessionState.setPartial({isResolvingSession:!1}),{success:!1,error:s})},this.createStateCheckpoint=async c=>{var d;const a=(d=this.sessionState.get().session)==null?void 0:d.id;if(!a)return;const{data:s,error:l}=await this.api.createStateCheckpoint({session_id:a,payload:c});return s?{data:s}:{success:!1,error:l}},this.api=n,this.contactCtx=o,this.sessionsPollingIntervalSeconds=h,this.registerSessionsRefresherWrapper()}}class tn{constructor({config:n,api:o,sessionCtx:h,contactCtx:c}){this.state=new le({messages:[],isSendingMessage:!1,lastAIResMightSolveUserIssue:!1,isInitialFetchLoading:!1}),this.sendMessageAbortController=new AbortController,this.reset=()=>{this.sendMessageAbortController.abort("Resetting chat"),this.state.reset()},this.sendMessage=async a=>{var g,p,f,v,F,j,q,E;if(!a.content.trim()&&(!a.attachments||a.attachments.length===0)){console.warn("Cannot send an empty message of no content or attachments");return}const s=this.state.get().isSendingMessage,l=((g=this.sessionCtx.sessionState.get().session)==null?void 0:g.assignee.kind)==="ai",d=this.state.get().messages,y=d.length>0?d[d.length-1]:void 0;if(l&&s||l&&(y==null?void 0:y.type)==="FROM_USER"){console.warn("Cannot send messages while awaiting AI response");return}this.sendMessageAbortController=new AbortController,this.state.setPartial({lastAIResMightSolveUserIssue:!1});try{this.state.setPartial({isSendingMessage:!0});const S=this.toUserMessage(a.content.trim(),a.attachments||void 0),I=this.state.get().messages;if(this.state.setPartial({messages:[...I,S]}),!((p=this.sessionCtx.sessionState.get().session)!=null&&p.id)){if(!await this.sessionCtx.createSession()){console.error("Failed to create session");return}this.sessionCtx.refreshSessions()}const ee=(f=this.sessionCtx.sessionState.get().session)==null?void 0:f.id;if(!ee)return;const{data:_}=await this.api.sendMessage({uuid:S.id,bot_token:this.config.token,headers:this.config.headers,query_params:this.config.queryParams,body_properties:this.config.bodyProperties,session_id:ee,content:S.content,attachments:a.attachments,clientContext:this.config.context,custom_data:{...this.config.messageCustomData||{},...a.customData||{}},language:this.config.language,exit_mode_prompt:a.exitModePrompt},this.sendMessageAbortController.signal);if(_!=null&&_.success){const D=this.toBotMessage(_);if(D){const k=this.state.get().messages;if(!!k.some(fe=>fe.id===D.id)){this.state.setPartial({lastAIResMightSolveUserIssue:((v=_.autopilotResponse)==null?void 0:v.mightSolveUserIssue)||((F=_.uiResponse)==null?void 0:F.mightSolveUserIssue)});return}this.state.setPartial({messages:[...k,D],lastAIResMightSolveUserIssue:((j=_.autopilotResponse)==null?void 0:j.mightSolveUserIssue)||((q=_.uiResponse)==null?void 0:q.mightSolveUserIssue)})}_.session&&this.sessionCtx.sessionState.setPartial({session:_.session})}else{const D=this.toBotErrorMessage(((E=_==null?void 0:_.error)==null?void 0:E.message)||"Unknown error occurred"),k=this.state.get().messages;this.state.setPartial({messages:[...k,D]})}}catch(S){this.sendMessageAbortController.signal.aborted||console.error("Failed to send message:",S)}finally{this.state.setPartial({isSendingMessage:!1})}},this.toUserMessage=(a,s)=>{const l=(()=>{const d=this.contactCtx.state.get().extraCollectedData;return this.state.get().messages.length===0&&d&&Object.keys(d).length>0?`${Object.entries(d).filter(([g,p])=>!!p).map(([g,p])=>`${g}: ${p}`).join(`
|
|
2
|
-
`)}
|
|
3
|
-
|
|
4
|
-
${a}`:a})();return{id:ze(),type:"FROM_USER",content:l,deliveredAt:new Date().toISOString(),attachments:s,timestamp:new Date().toISOString()}},this.toBotMessage=a=>{var s;return a.success&&a.autopilotResponse?{type:"FROM_BOT",id:a.autopilotResponse.id||ze(),timestamp:new Date().toISOString(),component:"bot_message",agent:this.config.bot?{name:this.config.bot.name||"",isAi:!0,avatar:this.config.bot.avatar||"",id:null}:void 0,data:{message:a.autopilotResponse.value.content,action:(s=a.uiResponse)!=null&&s.value.name?{name:a.uiResponse.value.name,data:a.uiResponse.value.request_response}:void 0}}:null},this.toBotErrorMessage=a=>({type:"FROM_BOT",id:ze(),timestamp:new Date().toISOString(),component:"TEXT",data:{message:a,variant:"error",action:void 0}}),this.config=n,this.api=o,this.sessionCtx=h,this.contactCtx=c}}class sn{constructor({config:n,contactCtx:o,sessionCtx:h,resetChat:c}){var a;this.registerRoutingListener=()=>{this.contactCtx.state.subscribe(({contact:s})=>{var l;s!=null&&s.token&&this.state.get().screen==="welcome"&&this.state.setPartial({screen:(l=this.config.router)!=null&&l.chatScreenOnly?"chat":"sessions"})}),this.sessionCtx.sessionsState.subscribe(({isInitialFetchLoading:s,data:l})=>{var d,y,g,p;if((d=this.config.router)!=null&&d.chatScreenOnly&&!((y=this.sessionCtx.sessionState.get().session)!=null&&y.id)){const f=(g=l.find(v=>v.isOpened))==null?void 0:g.id;return f?this.toChatScreen(f):void 0}l.length||((p=this.config.router)==null?void 0:p.goToChatIfNoSessions)!==!1&&!s&&this.state.get().screen!=="chat"&&this.toChatScreen()})},this.toSessionsScreen=()=>{this.resetChat(),this.state.setPartial({screen:"sessions"})},this.toChatScreen=s=>{if(this.resetChat(),s){const l=this.sessionCtx.sessionsState.get().data.find(d=>d.id===s);if(!l)return;this.sessionCtx.sessionState.setPartial({session:l})}this.state.setPartial({screen:"chat"})},this.config=n,this.contactCtx=o,this.sessionCtx=h,this.resetChat=c,this.state=new le({screen:this.contactCtx.shouldCollectData()?"welcome":(a=this.config.router)!=null&&a.chatScreenOnly?"chat":"sessions"}),this.registerRoutingListener()}}class nn{constructor({storage:n}){this.KEYS={contactToken:"opencx__widget__contactToken",externalContactId:"opencx__widget__externalContactId"},this.setContactToken=async o=>{await this.storage.set(this.KEYS.contactToken,o)},this.getContactToken=async()=>this.storage.get(this.KEYS.contactToken),this.setExternalContactId=async o=>{await this.storage.set(this.KEYS.externalContactId,o)},this.getExternalContactId=async()=>this.storage.get(this.KEYS.externalContactId),this.storage=n}}const Y=class Y{constructor({config:n,storage:o,modes:h}){if(this.modes=[],this.resetChat=()=>{this.sessionCtx.reset(),this.messageCtx.reset()},!Y.pollingIntervalsSeconds)throw Error("Widget polling values are not defined, did you call WidgetCtx.initialize()");this.config=n,this.api=new gt({config:n}),this.storageCtx=o?new nn({storage:o}):void 0,this.modes=h,this.contactCtx=new Vs({api:this.api,config:this.config,storageCtx:this.storageCtx}),this.sessionCtx=new en({api:this.api,contactCtx:this.contactCtx,sessionsPollingIntervalSeconds:Y.pollingIntervalsSeconds.sessions}),this.messageCtx=new tn({config:this.config,api:this.api,sessionCtx:this.sessionCtx,contactCtx:this.contactCtx}),this.activeSessionPollingCtx=new Xs({api:this.api,config:this.config,sessionCtx:this.sessionCtx,messageCtx:this.messageCtx,sessionPollingIntervalSeconds:Y.pollingIntervalsSeconds.session}),this.routerCtx=new sn({config:this.config,contactCtx:this.contactCtx,sessionCtx:this.sessionCtx,resetChat:this.resetChat})}};Y.pollingIntervalsSeconds=null,Y.initialize=async({config:n,storage:o})=>{var c,a,s;const h=await new gt({config:n}).getExternalWidgetConfig();return Y.pollingIntervalsSeconds={session:((c=h.data)==null?void 0:c.sessionPollingIntervalSeconds)||10,sessions:((a=h.data)==null?void 0:a.sessionsPollingIntervalSeconds)||60},new Y({config:n,storage:o,modes:((s=h.data)==null?void 0:s.modes)||[]})};let qe=Y;exports.PrimitiveState=le;exports.WidgetCtx=qe;exports.v4=ke;
|
|
5
|
-
//# sourceMappingURL=widget.ctx-HuLTTMAM.cjs.map
|