@webex/contact-center 3.12.0-next.8 → 3.12.0-next.81
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/AGENTS.md +438 -0
- package/ai-docs/README.md +131 -0
- package/ai-docs/RULES.md +455 -0
- package/ai-docs/patterns/event-driven-patterns.md +485 -0
- package/ai-docs/patterns/testing-patterns.md +480 -0
- package/ai-docs/patterns/typescript-patterns.md +365 -0
- package/ai-docs/templates/README.md +102 -0
- package/ai-docs/templates/documentation/create-agents-md.md +240 -0
- package/ai-docs/templates/documentation/create-architecture-md.md +295 -0
- package/ai-docs/templates/existing-service/bug-fix.md +254 -0
- package/ai-docs/templates/existing-service/feature-enhancement.md +450 -0
- package/ai-docs/templates/new-method/00-master.md +80 -0
- package/ai-docs/templates/new-method/01-requirements.md +232 -0
- package/ai-docs/templates/new-method/02-implementation.md +295 -0
- package/ai-docs/templates/new-method/03-tests.md +201 -0
- package/ai-docs/templates/new-method/04-validation.md +141 -0
- package/ai-docs/templates/new-service/00-master.md +109 -0
- package/ai-docs/templates/new-service/01-pre-questions.md +159 -0
- package/ai-docs/templates/new-service/02-code-generation.md +346 -0
- package/ai-docs/templates/new-service/03-integration.md +178 -0
- package/ai-docs/templates/new-service/04-test-generation.md +205 -0
- package/ai-docs/templates/new-service/05-validation.md +145 -0
- package/dist/cc.js +265 -29
- package/dist/cc.js.map +1 -1
- package/dist/config.js +6 -0
- package/dist/config.js.map +1 -1
- package/dist/constants.js +16 -1
- package/dist/constants.js.map +1 -1
- package/dist/index.js +20 -5
- package/dist/index.js.map +1 -1
- package/dist/metrics/behavioral-events.js +101 -0
- package/dist/metrics/behavioral-events.js.map +1 -1
- package/dist/metrics/constants.js +23 -4
- package/dist/metrics/constants.js.map +1 -1
- package/dist/services/ApiAiAssistant.js +74 -3
- package/dist/services/ApiAiAssistant.js.map +1 -1
- package/dist/services/UserPreference.js +427 -0
- package/dist/services/UserPreference.js.map +1 -0
- package/dist/services/config/Util.js +3 -3
- package/dist/services/config/Util.js.map +1 -1
- package/dist/services/config/constants.js +23 -2
- package/dist/services/config/constants.js.map +1 -1
- package/dist/services/config/types.js +49 -9
- package/dist/services/config/types.js.map +1 -1
- package/dist/services/core/Err.js.map +1 -1
- package/dist/services/core/Utils.js +107 -32
- package/dist/services/core/Utils.js.map +1 -1
- package/dist/services/core/websocket/WebSocketManager.js +2 -1
- package/dist/services/core/websocket/WebSocketManager.js.map +1 -1
- package/dist/services/core/websocket/types.js.map +1 -1
- package/dist/services/index.js +1 -1
- package/dist/services/index.js.map +1 -1
- package/dist/services/task/Task.js +688 -0
- package/dist/services/task/Task.js.map +1 -0
- package/dist/services/task/TaskFactory.js +45 -0
- package/dist/services/task/TaskFactory.js.map +1 -0
- package/dist/services/task/TaskManager.js +725 -526
- package/dist/services/task/TaskManager.js.map +1 -1
- package/dist/services/task/TaskUtils.js +162 -26
- package/dist/services/task/TaskUtils.js.map +1 -1
- package/dist/services/task/constants.js +9 -2
- package/dist/services/task/constants.js.map +1 -1
- package/dist/services/task/dialer.js +78 -0
- package/dist/services/task/dialer.js.map +1 -1
- package/dist/services/task/digital/Digital.js +77 -0
- package/dist/services/task/digital/Digital.js.map +1 -0
- package/dist/services/task/state-machine/TaskStateMachine.js +837 -0
- package/dist/services/task/state-machine/TaskStateMachine.js.map +1 -0
- package/dist/services/task/state-machine/actions.js +543 -0
- package/dist/services/task/state-machine/actions.js.map +1 -0
- package/dist/services/task/state-machine/constants.js +161 -0
- package/dist/services/task/state-machine/constants.js.map +1 -0
- package/dist/services/task/state-machine/guards.js +340 -0
- package/dist/services/task/state-machine/guards.js.map +1 -0
- package/dist/services/task/state-machine/index.js +53 -0
- package/dist/services/task/state-machine/index.js.map +1 -0
- package/dist/services/task/state-machine/types.js +54 -0
- package/dist/services/task/state-machine/types.js.map +1 -0
- package/dist/services/task/state-machine/uiControlsComputer.js +553 -0
- package/dist/services/task/state-machine/uiControlsComputer.js.map +1 -0
- package/dist/services/task/taskDataNormalizer.js +99 -0
- package/dist/services/task/taskDataNormalizer.js.map +1 -0
- package/dist/services/task/types.js +212 -4
- package/dist/services/task/types.js.map +1 -1
- package/dist/services/task/voice/Voice.js +1042 -0
- package/dist/services/task/voice/Voice.js.map +1 -0
- package/dist/services/task/voice/WebRTC.js +149 -0
- package/dist/services/task/voice/WebRTC.js.map +1 -0
- package/dist/types/cc.d.ts +94 -1
- package/dist/types/config.d.ts +6 -0
- package/dist/types/constants.d.ts +16 -1
- package/dist/types/index.d.ts +21 -6
- package/dist/types/metrics/constants.d.ts +19 -1
- package/dist/types/services/ApiAiAssistant.d.ts +11 -3
- package/dist/types/services/UserPreference.d.ts +118 -0
- package/dist/types/services/config/constants.d.ts +21 -0
- package/dist/types/services/config/types.d.ts +171 -10
- package/dist/types/services/core/Err.d.ts +4 -0
- package/dist/types/services/core/Utils.d.ts +33 -13
- package/dist/types/services/core/websocket/WebSocketManager.d.ts +1 -0
- package/dist/types/services/core/websocket/types.d.ts +1 -1
- package/dist/types/services/index.d.ts +1 -1
- package/dist/types/services/task/Task.d.ts +157 -0
- package/dist/types/services/task/TaskFactory.d.ts +12 -0
- package/dist/types/services/task/TaskUtils.d.ts +46 -2
- package/dist/types/services/task/constants.d.ts +7 -0
- package/dist/types/services/task/dialer.d.ts +30 -0
- package/dist/types/services/task/digital/Digital.d.ts +22 -0
- package/dist/types/services/task/state-machine/TaskStateMachine.d.ts +1144 -0
- package/dist/types/services/task/state-machine/actions.d.ts +10 -0
- package/dist/types/services/task/state-machine/constants.d.ts +107 -0
- package/dist/types/services/task/state-machine/guards.d.ts +90 -0
- package/dist/types/services/task/state-machine/index.d.ts +13 -0
- package/dist/types/services/task/state-machine/types.d.ts +267 -0
- package/dist/types/services/task/state-machine/uiControlsComputer.d.ts +9 -0
- package/dist/types/services/task/taskDataNormalizer.d.ts +10 -0
- package/dist/types/services/task/types.d.ts +603 -66
- package/dist/types/services/task/voice/Voice.d.ts +184 -0
- package/dist/types/services/task/voice/WebRTC.d.ts +53 -0
- package/dist/types/types.d.ts +94 -0
- package/dist/types/webex.d.ts +1 -0
- package/dist/types.js +85 -0
- package/dist/types.js.map +1 -1
- package/dist/webex.js +14 -2
- package/dist/webex.js.map +1 -1
- package/package.json +15 -12
- package/src/cc.ts +329 -30
- package/src/config.ts +6 -0
- package/src/constants.ts +16 -1
- package/src/index.ts +23 -5
- package/src/metrics/ai-docs/AGENTS.md +348 -0
- package/src/metrics/ai-docs/ARCHITECTURE.md +336 -0
- package/src/metrics/behavioral-events.ts +106 -0
- package/src/metrics/constants.ts +23 -4
- package/src/services/ApiAiAssistant.ts +104 -3
- package/src/services/UserPreference.ts +509 -0
- package/src/services/agent/ai-docs/AGENTS.md +238 -0
- package/src/services/agent/ai-docs/ARCHITECTURE.md +302 -0
- package/src/services/ai-docs/AGENTS.md +384 -0
- package/src/services/config/Util.ts +3 -3
- package/src/services/config/ai-docs/AGENTS.md +253 -0
- package/src/services/config/ai-docs/ARCHITECTURE.md +424 -0
- package/src/services/config/constants.ts +25 -1
- package/src/services/config/types.ts +174 -11
- package/src/services/core/Err.ts +2 -0
- package/src/services/core/Utils.ts +123 -37
- package/src/services/core/ai-docs/AGENTS.md +379 -0
- package/src/services/core/ai-docs/ARCHITECTURE.md +696 -0
- package/src/services/core/websocket/WebSocketManager.ts +2 -0
- package/src/services/core/websocket/types.ts +1 -1
- package/src/services/index.ts +1 -1
- package/src/services/task/Task.ts +837 -0
- package/src/services/task/TaskFactory.ts +55 -0
- package/src/services/task/TaskManager.ts +738 -613
- package/src/services/task/TaskUtils.ts +205 -25
- package/src/services/task/ai-docs/AGENTS.md +455 -0
- package/src/services/task/ai-docs/ARCHITECTURE.md +585 -0
- package/src/services/task/constants.ts +7 -0
- package/src/services/task/dialer.ts +80 -0
- package/src/services/task/digital/Digital.ts +95 -0
- package/src/services/task/state-machine/TaskStateMachine.ts +1077 -0
- package/src/services/task/state-machine/actions.ts +685 -0
- package/src/services/task/state-machine/ai-docs/AGENTS.md +495 -0
- package/src/services/task/state-machine/ai-docs/ARCHITECTURE.md +1135 -0
- package/src/services/task/state-machine/constants.ts +172 -0
- package/src/services/task/state-machine/guards.ts +406 -0
- package/src/services/task/state-machine/index.ts +28 -0
- package/src/services/task/state-machine/types.ts +241 -0
- package/src/services/task/state-machine/uiControlsComputer.ts +867 -0
- package/src/services/task/taskDataNormalizer.ts +137 -0
- package/src/services/task/types.ts +710 -71
- package/src/services/task/voice/Voice.ts +1267 -0
- package/src/services/task/voice/WebRTC.ts +187 -0
- package/src/types.ts +122 -2
- package/src/utils/AGENTS.md +276 -0
- package/src/webex.js +2 -0
- package/test/unit/spec/cc.ts +343 -23
- package/test/unit/spec/logger-proxy.ts +70 -0
- package/test/unit/spec/services/ApiAiAssistant.ts +122 -17
- package/test/unit/spec/services/UserPreference.ts +401 -0
- package/test/unit/spec/services/WebCallingService.ts +7 -1
- package/test/unit/spec/services/config/index.ts +30 -30
- package/test/unit/spec/services/core/Utils.ts +425 -8
- package/test/unit/spec/services/core/websocket/WebSocketManager.ts +66 -40
- package/test/unit/spec/services/task/AutoWrapup.ts +63 -0
- package/test/unit/spec/services/task/Task.ts +477 -0
- package/test/unit/spec/services/task/TaskFactory.ts +62 -0
- package/test/unit/spec/services/task/TaskManager.ts +832 -1702
- package/test/unit/spec/services/task/TaskUtils.ts +206 -0
- package/test/unit/spec/services/task/dialer.ts +190 -0
- package/test/unit/spec/services/task/digital/Digital.ts +105 -0
- package/test/unit/spec/services/task/state-machine/TaskStateMachine.ts +1825 -0
- package/test/unit/spec/services/task/state-machine/guards.ts +479 -0
- package/test/unit/spec/services/task/state-machine/types.ts +18 -0
- package/test/unit/spec/services/task/state-machine/uiControlsComputer.ts +2020 -0
- package/test/unit/spec/services/task/taskTestUtils.ts +87 -0
- package/test/unit/spec/services/task/voice/Voice.ts +631 -0
- package/test/unit/spec/services/task/voice/WebRTC.ts +235 -0
- package/umd/contact-center.min.js +2 -2
- package/umd/contact-center.min.js.map +1 -1
- package/dist/services/task/index.js +0 -1525
- package/dist/services/task/index.js.map +0 -1
- package/dist/types/services/task/index.d.ts +0 -650
- package/src/services/task/index.ts +0 -1801
- package/test/unit/spec/services/task/index.ts +0 -2184
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_events","_interopRequireDefault","require","_types","_constants","_types2","_loggerProxy","_keepalive","_constants2","_constants3","e","__esModule","default","WebSocketManager","EventEmitter","url","welcomePromiseResolve","constructor","options","webex","shouldReconnect","websocket","isSocketClosed","isWelcomeReceived","forceCloseWebSocketOnTimeout","isConnectionLost","workerScriptBlob","Blob","workerScript","type","keepaliveWorker","Worker","URL","createObjectURL","initWebSocket","body","connectionConfig","resource","register","error","LoggerProxy","module","WEB_SOCKET_MANAGER_FILE","method","METHODS","INIT_WEB_SOCKET","Promise","resolve","reject","connect","catch","close","reason","postMessage","log","CLOSE","handleConnectionLost","event","isIntEnv","internal","services","isIntegrationEnvironment","orgId","credentials","getOrgId","REGISTER","subscribeResponse","request","service","WCC_API_GATEWAY","HTTP_METHODS","POST","headers","undefined","webSocketUrl","CONNECT","WebSocket","onopen","send","JSON","stringify","keepalive","onmessage","keepAliveEvent","data","intervalDuration","KEEPALIVE_WORKER_INTERVAL","closeSocketTimeout","CLOSE_SOCKET_TIMEOUT","onerror","onclose","webSocketOnCloseHandler","emit","eventData","parse","CC_EVENTS","WELCOME","issueReason","onlineStatus","navigator","onLine","WEB_SOCKET_ON_CLOSE_HANDLER","exports"],"sources":["WebSocketManager.ts"],"sourcesContent":["import EventEmitter from 'events';\nimport {WebexSDK, SubscribeRequest, HTTP_METHODS} from '../../../types';\nimport {WCC_API_GATEWAY} from '../../constants';\nimport {ConnectionLostDetails} from './types';\nimport {CC_EVENTS, SubscribeResponse, WelcomeResponse} from '../../config/types';\nimport LoggerProxy from '../../../logger-proxy';\nimport workerScript from './keepalive.worker';\nimport {KEEPALIVE_WORKER_INTERVAL, CLOSE_SOCKET_TIMEOUT, METHODS} from '../constants';\nimport {WEB_SOCKET_MANAGER_FILE} from '../../../constants';\n\n/**\n * WebSocketManager handles the WebSocket connection for Contact Center operations.\n * It manages the connection lifecycle, including registration, reconnection, and message handling.\n * It also utilizes a Web Worker to manage keepalive messages and socket closure.\n * @ignore\n */\nexport class WebSocketManager extends EventEmitter {\n private websocket: WebSocket;\n shouldReconnect: boolean;\n isSocketClosed: boolean;\n private isWelcomeReceived: boolean;\n private url: string | null = null;\n private forceCloseWebSocketOnTimeout: boolean;\n private isConnectionLost: boolean;\n private webex: WebexSDK;\n private welcomePromiseResolve:\n | ((value: WelcomeResponse | PromiseLike<WelcomeResponse>) => void)\n | null = null;\n\n private keepaliveWorker: Worker;\n\n constructor(options: {webex: WebexSDK}) {\n super();\n const {webex} = options;\n this.webex = webex;\n this.shouldReconnect = true;\n this.websocket = {} as WebSocket;\n this.isSocketClosed = false;\n this.isWelcomeReceived = false;\n this.forceCloseWebSocketOnTimeout = false;\n this.isConnectionLost = false;\n\n const workerScriptBlob = new Blob([workerScript], {type: 'application/javascript'});\n this.keepaliveWorker = new Worker(URL.createObjectURL(workerScriptBlob));\n }\n\n async initWebSocket(options: {\n body: SubscribeRequest;\n resource: string;\n }): Promise<WelcomeResponse> {\n const {body: connectionConfig, resource} = options;\n try {\n await this.register(connectionConfig, resource);\n } catch (error) {\n LoggerProxy.error(`[WebSocketStatus] | Error in registering Websocket ${error}`, {\n module: WEB_SOCKET_MANAGER_FILE,\n method: METHODS.INIT_WEB_SOCKET,\n });\n throw error;\n }\n\n return new Promise((resolve, reject) => {\n this.welcomePromiseResolve = resolve;\n this.connect().catch((error) => {\n LoggerProxy.error(`[WebSocketStatus] | Error in connecting Websocket ${error}`, {\n module: WEB_SOCKET_MANAGER_FILE,\n method: METHODS.INIT_WEB_SOCKET,\n });\n reject(error);\n });\n });\n }\n\n close(shouldReconnect: boolean, reason = 'Unknown') {\n if (!this.isSocketClosed && this.shouldReconnect) {\n this.shouldReconnect = shouldReconnect;\n this.websocket.close();\n this.keepaliveWorker.postMessage({type: 'terminate'});\n LoggerProxy.log(\n `[WebSocketStatus] | event=webSocketClose | WebSocket connection closed manually REASON: ${reason}`,\n {module: WEB_SOCKET_MANAGER_FILE, method: METHODS.CLOSE}\n );\n }\n }\n\n handleConnectionLost(event: ConnectionLostDetails) {\n this.isConnectionLost = event.isConnectionLost;\n }\n\n private async register(connectionConfig: SubscribeRequest, resource: string) {\n try {\n // X-ORGANIZATION-ID header is only required for INT environments\n const isIntEnv = this.webex.internal?.services?.isIntegrationEnvironment() || false;\n const orgId = this.webex.credentials.getOrgId();\n\n if (isIntEnv && orgId) {\n LoggerProxy.log(`[WebSocketManager] Adding X-ORGANIZATION-ID header for INT environment`, {\n module: WEB_SOCKET_MANAGER_FILE,\n method: METHODS.REGISTER,\n });\n }\n\n const subscribeResponse: SubscribeResponse = await this.webex.request({\n service: WCC_API_GATEWAY,\n resource,\n method: HTTP_METHODS.POST,\n body: connectionConfig,\n headers: isIntEnv && orgId ? {'X-ORGANIZATION-ID': orgId} : undefined,\n });\n this.url = subscribeResponse.body.webSocketUrl;\n } catch (e) {\n LoggerProxy.error(\n `Register API Failed, Request to RoutingNotifs websocket registration API failed ${e}`,\n {module: WEB_SOCKET_MANAGER_FILE, method: METHODS.REGISTER}\n );\n throw e;\n }\n }\n\n private async connect() {\n if (!this.url) {\n return undefined;\n }\n LoggerProxy.log(\n `[WebSocketStatus] | event=webSocketConnecting | Connecting to WebSocket: ${this.url}`,\n {module: WEB_SOCKET_MANAGER_FILE, method: METHODS.CONNECT}\n );\n this.websocket = new WebSocket(this.url);\n\n return new Promise((resolve, reject) => {\n this.websocket.onopen = () => {\n this.isSocketClosed = false;\n this.shouldReconnect = true;\n\n this.websocket.send(JSON.stringify({keepalive: 'true'}));\n this.keepaliveWorker.onmessage = (keepAliveEvent: {data: any}) => {\n if (keepAliveEvent?.data?.type === 'keepalive') {\n this.websocket.send(JSON.stringify({keepalive: 'true'}));\n }\n\n if (keepAliveEvent?.data?.type === 'closeSocket' && this.isConnectionLost) {\n this.forceCloseWebSocketOnTimeout = true;\n this.close(true, 'WebSocket did not auto close within 16 secs');\n LoggerProxy.error(\n '[webSocketTimeout] | event=webSocketTimeout | WebSocket connection closed forcefully',\n {module: WEB_SOCKET_MANAGER_FILE, method: METHODS.CONNECT}\n );\n }\n };\n\n this.keepaliveWorker.postMessage({\n type: 'start',\n intervalDuration: KEEPALIVE_WORKER_INTERVAL, // Keepalive interval\n isSocketClosed: this.isSocketClosed,\n closeSocketTimeout: CLOSE_SOCKET_TIMEOUT, // Close socket timeout\n });\n };\n\n this.websocket.onerror = (event: any) => {\n LoggerProxy.error(\n `[WebSocketStatus] | event=socketConnectionFailed | WebSocket connection failed ${event}`,\n {module: WEB_SOCKET_MANAGER_FILE, method: METHODS.CONNECT}\n );\n reject();\n };\n\n this.websocket.onclose = async (event: any) => {\n this.webSocketOnCloseHandler(event);\n };\n\n this.websocket.onmessage = (e: MessageEvent) => {\n this.emit('message', e.data);\n const eventData = JSON.parse(e.data);\n\n if (eventData.type === CC_EVENTS.WELCOME) {\n this.isWelcomeReceived = true;\n if (this.welcomePromiseResolve) {\n this.welcomePromiseResolve(eventData.data as WelcomeResponse);\n this.welcomePromiseResolve = null;\n }\n }\n\n if (eventData.type === 'AGENT_MULTI_LOGIN') {\n this.close(false, 'multiLogin');\n LoggerProxy.error(\n '[WebSocketStatus] | event=agentMultiLogin | WebSocket connection closed by agent multiLogin',\n {module: WEB_SOCKET_MANAGER_FILE, method: METHODS.CONNECT}\n );\n }\n };\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n private async webSocketOnCloseHandler(event: any) {\n this.isSocketClosed = true;\n this.keepaliveWorker.postMessage({type: 'terminate'});\n if (this.shouldReconnect) {\n this.emit('socketClose');\n let issueReason;\n if (this.forceCloseWebSocketOnTimeout) {\n issueReason = 'WebSocket auto close timed out. Forcefully closed websocket.';\n } else {\n const onlineStatus = navigator.onLine;\n issueReason = !onlineStatus\n ? 'network issue'\n : 'missing keepalive from either desktop or notif service';\n }\n LoggerProxy.error(\n `[WebSocketStatus] | event=webSocketClose | WebSocket connection closed REASON: ${issueReason}`,\n {module: WEB_SOCKET_MANAGER_FILE, method: METHODS.WEB_SOCKET_ON_CLOSE_HANDLER}\n );\n this.forceCloseWebSocketOnTimeout = false;\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_events","_interopRequireDefault","require","_types","_constants","_types2","_loggerProxy","_keepalive","_constants2","_constants3","e","__esModule","default","WebSocketManager","EventEmitter","url","welcomePromiseResolve","constructor","options","webex","shouldReconnect","websocket","isSocketClosed","isWelcomeReceived","forceCloseWebSocketOnTimeout","isConnectionLost","workerScriptBlob","Blob","workerScript","type","keepaliveWorker","Worker","URL","createObjectURL","initWebSocket","body","connectionConfig","resource","register","error","LoggerProxy","module","WEB_SOCKET_MANAGER_FILE","method","METHODS","INIT_WEB_SOCKET","Promise","resolve","reject","connect","catch","close","reason","postMessage","log","CLOSE","handleConnectionLost","event","isIntEnv","internal","services","isIntegrationEnvironment","orgId","credentials","getOrgId","REGISTER","subscribeResponse","request","service","WCC_API_GATEWAY","HTTP_METHODS","POST","headers","undefined","webSocketUrl","CONNECT","WebSocket","onopen","send","JSON","stringify","keepalive","onmessage","keepAliveEvent","data","intervalDuration","KEEPALIVE_WORKER_INTERVAL","closeSocketTimeout","CLOSE_SOCKET_TIMEOUT","onerror","onclose","webSocketOnCloseHandler","emit","eventData","parse","CC_EVENTS","WELCOME","issueReason","onlineStatus","navigator","onLine","WEB_SOCKET_ON_CLOSE_HANDLER","exports","_default"],"sources":["WebSocketManager.ts"],"sourcesContent":["import EventEmitter from 'events';\nimport {WebexSDK, SubscribeRequest, HTTP_METHODS} from '../../../types';\nimport {WCC_API_GATEWAY} from '../../constants';\nimport {ConnectionLostDetails} from './types';\nimport {CC_EVENTS, SubscribeResponse, WelcomeResponse} from '../../config/types';\nimport LoggerProxy from '../../../logger-proxy';\nimport workerScript from './keepalive.worker';\nimport {KEEPALIVE_WORKER_INTERVAL, CLOSE_SOCKET_TIMEOUT, METHODS} from '../constants';\nimport {WEB_SOCKET_MANAGER_FILE} from '../../../constants';\n\n/**\n * WebSocketManager handles the WebSocket connection for Contact Center operations.\n * It manages the connection lifecycle, including registration, reconnection, and message handling.\n * It also utilizes a Web Worker to manage keepalive messages and socket closure.\n * @ignore\n */\nexport class WebSocketManager extends EventEmitter {\n private websocket: WebSocket;\n shouldReconnect: boolean;\n isSocketClosed: boolean;\n private isWelcomeReceived: boolean;\n private url: string | null = null;\n private forceCloseWebSocketOnTimeout: boolean;\n private isConnectionLost: boolean;\n private webex: WebexSDK;\n private welcomePromiseResolve:\n | ((value: WelcomeResponse | PromiseLike<WelcomeResponse>) => void)\n | null = null;\n\n private keepaliveWorker: Worker;\n\n constructor(options: {webex: WebexSDK}) {\n super();\n const {webex} = options;\n this.webex = webex;\n this.shouldReconnect = true;\n this.websocket = {} as WebSocket;\n this.isSocketClosed = false;\n this.isWelcomeReceived = false;\n this.forceCloseWebSocketOnTimeout = false;\n this.isConnectionLost = false;\n\n const workerScriptBlob = new Blob([workerScript], {type: 'application/javascript'});\n this.keepaliveWorker = new Worker(URL.createObjectURL(workerScriptBlob));\n }\n\n async initWebSocket(options: {\n body: SubscribeRequest;\n resource: string;\n }): Promise<WelcomeResponse> {\n const {body: connectionConfig, resource} = options;\n try {\n await this.register(connectionConfig, resource);\n } catch (error) {\n LoggerProxy.error(`[WebSocketStatus] | Error in registering Websocket ${error}`, {\n module: WEB_SOCKET_MANAGER_FILE,\n method: METHODS.INIT_WEB_SOCKET,\n });\n throw error;\n }\n\n return new Promise((resolve, reject) => {\n this.welcomePromiseResolve = resolve;\n this.connect().catch((error) => {\n LoggerProxy.error(`[WebSocketStatus] | Error in connecting Websocket ${error}`, {\n module: WEB_SOCKET_MANAGER_FILE,\n method: METHODS.INIT_WEB_SOCKET,\n });\n reject(error);\n });\n });\n }\n\n close(shouldReconnect: boolean, reason = 'Unknown') {\n if (!this.isSocketClosed && this.shouldReconnect) {\n this.shouldReconnect = shouldReconnect;\n this.websocket.close();\n this.keepaliveWorker.postMessage({type: 'terminate'});\n LoggerProxy.log(\n `[WebSocketStatus] | event=webSocketClose | WebSocket connection closed manually REASON: ${reason}`,\n {module: WEB_SOCKET_MANAGER_FILE, method: METHODS.CLOSE}\n );\n }\n }\n\n handleConnectionLost(event: ConnectionLostDetails) {\n this.isConnectionLost = event.isConnectionLost;\n }\n\n private async register(connectionConfig: SubscribeRequest, resource: string) {\n try {\n // X-ORGANIZATION-ID header is only required for INT environments\n const isIntEnv = this.webex.internal?.services?.isIntegrationEnvironment() || false;\n const orgId = this.webex.credentials.getOrgId();\n\n if (isIntEnv && orgId) {\n LoggerProxy.log(`[WebSocketManager] Adding X-ORGANIZATION-ID header for INT environment`, {\n module: WEB_SOCKET_MANAGER_FILE,\n method: METHODS.REGISTER,\n });\n }\n\n const subscribeResponse: SubscribeResponse = await this.webex.request({\n service: WCC_API_GATEWAY,\n resource,\n method: HTTP_METHODS.POST,\n body: connectionConfig,\n headers: isIntEnv && orgId ? {'X-ORGANIZATION-ID': orgId} : undefined,\n });\n this.url = subscribeResponse.body.webSocketUrl;\n } catch (e) {\n LoggerProxy.error(\n `Register API Failed, Request to RoutingNotifs websocket registration API failed ${e}`,\n {module: WEB_SOCKET_MANAGER_FILE, method: METHODS.REGISTER}\n );\n throw e;\n }\n }\n\n private async connect() {\n if (!this.url) {\n return undefined;\n }\n LoggerProxy.log(\n `[WebSocketStatus] | event=webSocketConnecting | Connecting to WebSocket: ${this.url}`,\n {module: WEB_SOCKET_MANAGER_FILE, method: METHODS.CONNECT}\n );\n this.websocket = new WebSocket(this.url);\n\n return new Promise((resolve, reject) => {\n this.websocket.onopen = () => {\n this.isSocketClosed = false;\n this.shouldReconnect = true;\n\n this.websocket.send(JSON.stringify({keepalive: 'true'}));\n this.keepaliveWorker.onmessage = (keepAliveEvent: {data: any}) => {\n if (keepAliveEvent?.data?.type === 'keepalive') {\n this.websocket.send(JSON.stringify({keepalive: 'true'}));\n }\n\n if (keepAliveEvent?.data?.type === 'closeSocket' && this.isConnectionLost) {\n this.forceCloseWebSocketOnTimeout = true;\n this.close(true, 'WebSocket did not auto close within 16 secs');\n LoggerProxy.error(\n '[webSocketTimeout] | event=webSocketTimeout | WebSocket connection closed forcefully',\n {module: WEB_SOCKET_MANAGER_FILE, method: METHODS.CONNECT}\n );\n }\n };\n\n this.keepaliveWorker.postMessage({\n type: 'start',\n intervalDuration: KEEPALIVE_WORKER_INTERVAL, // Keepalive interval\n isSocketClosed: this.isSocketClosed,\n closeSocketTimeout: CLOSE_SOCKET_TIMEOUT, // Close socket timeout\n });\n };\n\n this.websocket.onerror = (event: any) => {\n LoggerProxy.error(\n `[WebSocketStatus] | event=socketConnectionFailed | WebSocket connection failed ${event}`,\n {module: WEB_SOCKET_MANAGER_FILE, method: METHODS.CONNECT}\n );\n reject();\n };\n\n this.websocket.onclose = async (event: any) => {\n this.webSocketOnCloseHandler(event);\n };\n\n this.websocket.onmessage = (e: MessageEvent) => {\n this.emit('message', e.data);\n const eventData = JSON.parse(e.data);\n\n if (eventData.type === CC_EVENTS.WELCOME) {\n this.isWelcomeReceived = true;\n if (this.welcomePromiseResolve) {\n this.welcomePromiseResolve(eventData.data as WelcomeResponse);\n this.welcomePromiseResolve = null;\n }\n }\n\n if (eventData.type === 'AGENT_MULTI_LOGIN') {\n this.close(false, 'multiLogin');\n LoggerProxy.error(\n '[WebSocketStatus] | event=agentMultiLogin | WebSocket connection closed by agent multiLogin',\n {module: WEB_SOCKET_MANAGER_FILE, method: METHODS.CONNECT}\n );\n }\n };\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n private async webSocketOnCloseHandler(event: any) {\n this.isSocketClosed = true;\n this.keepaliveWorker.postMessage({type: 'terminate'});\n if (this.shouldReconnect) {\n this.emit('socketClose');\n let issueReason;\n if (this.forceCloseWebSocketOnTimeout) {\n issueReason = 'WebSocket auto close timed out. Forcefully closed websocket.';\n } else {\n const onlineStatus = navigator.onLine;\n issueReason = !onlineStatus\n ? 'network issue'\n : 'missing keepalive from either desktop or notif service';\n }\n LoggerProxy.error(\n `[WebSocketStatus] | event=webSocketClose | WebSocket connection closed REASON: ${issueReason}`,\n {module: WEB_SOCKET_MANAGER_FILE, method: METHODS.WEB_SOCKET_ON_CLOSE_HANDLER}\n );\n this.forceCloseWebSocketOnTimeout = false;\n }\n }\n}\n\nexport default WebSocketManager;\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AAEA,IAAAG,OAAA,GAAAH,OAAA;AACA,IAAAI,YAAA,GAAAL,sBAAA,CAAAC,OAAA;AACA,IAAAK,UAAA,GAAAN,sBAAA,CAAAC,OAAA;AACA,IAAAM,WAAA,GAAAN,OAAA;AACA,IAAAO,WAAA,GAAAP,OAAA;AAA2D,SAAAD,uBAAAS,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE3D;AACA;AACA;AACA;AACA;AACA;AACO,MAAMG,gBAAgB,SAASC,eAAY,CAAC;EAKzCC,GAAG,GAAkB,IAAI;EAIzBC,qBAAqB,GAElB,IAAI;EAIfC,WAAWA,CAACC,OAA0B,EAAE;IACtC,KAAK,CAAC,CAAC;IACP,MAAM;MAACC;IAAK,CAAC,GAAGD,OAAO;IACvB,IAAI,CAACC,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACC,eAAe,GAAG,IAAI;IAC3B,IAAI,CAACC,SAAS,GAAG,CAAC,CAAc;IAChC,IAAI,CAACC,cAAc,GAAG,KAAK;IAC3B,IAAI,CAACC,iBAAiB,GAAG,KAAK;IAC9B,IAAI,CAACC,4BAA4B,GAAG,KAAK;IACzC,IAAI,CAACC,gBAAgB,GAAG,KAAK;IAE7B,MAAMC,gBAAgB,GAAG,IAAIC,IAAI,CAAC,CAACC,kBAAY,CAAC,EAAE;MAACC,IAAI,EAAE;IAAwB,CAAC,CAAC;IACnF,IAAI,CAACC,eAAe,GAAG,IAAIC,MAAM,CAACC,GAAG,CAACC,eAAe,CAACP,gBAAgB,CAAC,CAAC;EAC1E;EAEA,MAAMQ,aAAaA,CAAChB,OAGnB,EAA4B;IAC3B,MAAM;MAACiB,IAAI,EAAEC,gBAAgB;MAAEC;IAAQ,CAAC,GAAGnB,OAAO;IAClD,IAAI;MACF,MAAM,IAAI,CAACoB,QAAQ,CAACF,gBAAgB,EAAEC,QAAQ,CAAC;IACjD,CAAC,CAAC,OAAOE,KAAK,EAAE;MACdC,oBAAW,CAACD,KAAK,CAAC,sDAAsDA,KAAK,EAAE,EAAE;QAC/EE,MAAM,EAAEC,mCAAuB;QAC/BC,MAAM,EAAEC,mBAAO,CAACC;MAClB,CAAC,CAAC;MACF,MAAMN,KAAK;IACb;IAEA,OAAO,IAAIO,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;MACtC,IAAI,CAAChC,qBAAqB,GAAG+B,OAAO;MACpC,IAAI,CAACE,OAAO,CAAC,CAAC,CAACC,KAAK,CAAEX,KAAK,IAAK;QAC9BC,oBAAW,CAACD,KAAK,CAAC,qDAAqDA,KAAK,EAAE,EAAE;UAC9EE,MAAM,EAAEC,mCAAuB;UAC/BC,MAAM,EAAEC,mBAAO,CAACC;QAClB,CAAC,CAAC;QACFG,MAAM,CAACT,KAAK,CAAC;MACf,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ;EAEAY,KAAKA,CAAC/B,eAAwB,EAAEgC,MAAM,GAAG,SAAS,EAAE;IAClD,IAAI,CAAC,IAAI,CAAC9B,cAAc,IAAI,IAAI,CAACF,eAAe,EAAE;MAChD,IAAI,CAACA,eAAe,GAAGA,eAAe;MACtC,IAAI,CAACC,SAAS,CAAC8B,KAAK,CAAC,CAAC;MACtB,IAAI,CAACrB,eAAe,CAACuB,WAAW,CAAC;QAACxB,IAAI,EAAE;MAAW,CAAC,CAAC;MACrDW,oBAAW,CAACc,GAAG,CACb,2FAA2FF,MAAM,EAAE,EACnG;QAACX,MAAM,EAAEC,mCAAuB;QAAEC,MAAM,EAAEC,mBAAO,CAACW;MAAK,CACzD,CAAC;IACH;EACF;EAEAC,oBAAoBA,CAACC,KAA4B,EAAE;IACjD,IAAI,CAAChC,gBAAgB,GAAGgC,KAAK,CAAChC,gBAAgB;EAChD;EAEA,MAAca,QAAQA,CAACF,gBAAkC,EAAEC,QAAgB,EAAE;IAC3E,IAAI;MACF;MACA,MAAMqB,QAAQ,GAAG,IAAI,CAACvC,KAAK,CAACwC,QAAQ,EAAEC,QAAQ,EAAEC,wBAAwB,CAAC,CAAC,IAAI,KAAK;MACnF,MAAMC,KAAK,GAAG,IAAI,CAAC3C,KAAK,CAAC4C,WAAW,CAACC,QAAQ,CAAC,CAAC;MAE/C,IAAIN,QAAQ,IAAII,KAAK,EAAE;QACrBtB,oBAAW,CAACc,GAAG,CAAC,wEAAwE,EAAE;UACxFb,MAAM,EAAEC,mCAAuB;UAC/BC,MAAM,EAAEC,mBAAO,CAACqB;QAClB,CAAC,CAAC;MACJ;MAEA,MAAMC,iBAAoC,GAAG,MAAM,IAAI,CAAC/C,KAAK,CAACgD,OAAO,CAAC;QACpEC,OAAO,EAAEC,0BAAe;QACxBhC,QAAQ;QACRM,MAAM,EAAE2B,mBAAY,CAACC,IAAI;QACzBpC,IAAI,EAAEC,gBAAgB;QACtBoC,OAAO,EAAEd,QAAQ,IAAII,KAAK,GAAG;UAAC,mBAAmB,EAAEA;QAAK,CAAC,GAAGW;MAC9D,CAAC,CAAC;MACF,IAAI,CAAC1D,GAAG,GAAGmD,iBAAiB,CAAC/B,IAAI,CAACuC,YAAY;IAChD,CAAC,CAAC,OAAOhE,CAAC,EAAE;MACV8B,oBAAW,CAACD,KAAK,CACf,mFAAmF7B,CAAC,EAAE,EACtF;QAAC+B,MAAM,EAAEC,mCAAuB;QAAEC,MAAM,EAAEC,mBAAO,CAACqB;MAAQ,CAC5D,CAAC;MACD,MAAMvD,CAAC;IACT;EACF;EAEA,MAAcuC,OAAOA,CAAA,EAAG;IACtB,IAAI,CAAC,IAAI,CAAClC,GAAG,EAAE;MACb,OAAO0D,SAAS;IAClB;IACAjC,oBAAW,CAACc,GAAG,CACb,4EAA4E,IAAI,CAACvC,GAAG,EAAE,EACtF;MAAC0B,MAAM,EAAEC,mCAAuB;MAAEC,MAAM,EAAEC,mBAAO,CAAC+B;IAAO,CAC3D,CAAC;IACD,IAAI,CAACtD,SAAS,GAAG,IAAIuD,SAAS,CAAC,IAAI,CAAC7D,GAAG,CAAC;IAExC,OAAO,IAAI+B,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;MACtC,IAAI,CAAC3B,SAAS,CAACwD,MAAM,GAAG,MAAM;QAC5B,IAAI,CAACvD,cAAc,GAAG,KAAK;QAC3B,IAAI,CAACF,eAAe,GAAG,IAAI;QAE3B,IAAI,CAACC,SAAS,CAACyD,IAAI,CAACC,IAAI,CAACC,SAAS,CAAC;UAACC,SAAS,EAAE;QAAM,CAAC,CAAC,CAAC;QACxD,IAAI,CAACnD,eAAe,CAACoD,SAAS,GAAIC,cAA2B,IAAK;UAChE,IAAIA,cAAc,EAAEC,IAAI,EAAEvD,IAAI,KAAK,WAAW,EAAE;YAC9C,IAAI,CAACR,SAAS,CAACyD,IAAI,CAACC,IAAI,CAACC,SAAS,CAAC;cAACC,SAAS,EAAE;YAAM,CAAC,CAAC,CAAC;UAC1D;UAEA,IAAIE,cAAc,EAAEC,IAAI,EAAEvD,IAAI,KAAK,aAAa,IAAI,IAAI,CAACJ,gBAAgB,EAAE;YACzE,IAAI,CAACD,4BAA4B,GAAG,IAAI;YACxC,IAAI,CAAC2B,KAAK,CAAC,IAAI,EAAE,6CAA6C,CAAC;YAC/DX,oBAAW,CAACD,KAAK,CACf,sFAAsF,EACtF;cAACE,MAAM,EAAEC,mCAAuB;cAAEC,MAAM,EAAEC,mBAAO,CAAC+B;YAAO,CAC3D,CAAC;UACH;QACF,CAAC;QAED,IAAI,CAAC7C,eAAe,CAACuB,WAAW,CAAC;UAC/BxB,IAAI,EAAE,OAAO;UACbwD,gBAAgB,EAAEC,qCAAyB;UAAE;UAC7ChE,cAAc,EAAE,IAAI,CAACA,cAAc;UACnCiE,kBAAkB,EAAEC,gCAAoB,CAAE;QAC5C,CAAC,CAAC;MACJ,CAAC;MAED,IAAI,CAACnE,SAAS,CAACoE,OAAO,GAAIhC,KAAU,IAAK;QACvCjB,oBAAW,CAACD,KAAK,CACf,kFAAkFkB,KAAK,EAAE,EACzF;UAAChB,MAAM,EAAEC,mCAAuB;UAAEC,MAAM,EAAEC,mBAAO,CAAC+B;QAAO,CAC3D,CAAC;QACD3B,MAAM,CAAC,CAAC;MACV,CAAC;MAED,IAAI,CAAC3B,SAAS,CAACqE,OAAO,GAAG,MAAOjC,KAAU,IAAK;QAC7C,IAAI,CAACkC,uBAAuB,CAAClC,KAAK,CAAC;MACrC,CAAC;MAED,IAAI,CAACpC,SAAS,CAAC6D,SAAS,GAAIxE,CAAe,IAAK;QAC9C,IAAI,CAACkF,IAAI,CAAC,SAAS,EAAElF,CAAC,CAAC0E,IAAI,CAAC;QAC5B,MAAMS,SAAS,GAAGd,IAAI,CAACe,KAAK,CAACpF,CAAC,CAAC0E,IAAI,CAAC;QAEpC,IAAIS,SAAS,CAAChE,IAAI,KAAKkE,iBAAS,CAACC,OAAO,EAAE;UACxC,IAAI,CAACzE,iBAAiB,GAAG,IAAI;UAC7B,IAAI,IAAI,CAACP,qBAAqB,EAAE;YAC9B,IAAI,CAACA,qBAAqB,CAAC6E,SAAS,CAACT,IAAuB,CAAC;YAC7D,IAAI,CAACpE,qBAAqB,GAAG,IAAI;UACnC;QACF;QAEA,IAAI6E,SAAS,CAAChE,IAAI,KAAK,mBAAmB,EAAE;UAC1C,IAAI,CAACsB,KAAK,CAAC,KAAK,EAAE,YAAY,CAAC;UAC/BX,oBAAW,CAACD,KAAK,CACf,6FAA6F,EAC7F;YAACE,MAAM,EAAEC,mCAAuB;YAAEC,MAAM,EAAEC,mBAAO,CAAC+B;UAAO,CAC3D,CAAC;QACH;MACF,CAAC;IACH,CAAC,CAAC;EACJ;;EAEA;EACA,MAAcgB,uBAAuBA,CAAClC,KAAU,EAAE;IAChD,IAAI,CAACnC,cAAc,GAAG,IAAI;IAC1B,IAAI,CAACQ,eAAe,CAACuB,WAAW,CAAC;MAACxB,IAAI,EAAE;IAAW,CAAC,CAAC;IACrD,IAAI,IAAI,CAACT,eAAe,EAAE;MACxB,IAAI,CAACwE,IAAI,CAAC,aAAa,CAAC;MACxB,IAAIK,WAAW;MACf,IAAI,IAAI,CAACzE,4BAA4B,EAAE;QACrCyE,WAAW,GAAG,8DAA8D;MAC9E,CAAC,MAAM;QACL,MAAMC,YAAY,GAAGC,SAAS,CAACC,MAAM;QACrCH,WAAW,GAAG,CAACC,YAAY,GACvB,eAAe,GACf,wDAAwD;MAC9D;MACA1D,oBAAW,CAACD,KAAK,CACf,kFAAkF0D,WAAW,EAAE,EAC/F;QAACxD,MAAM,EAAEC,mCAAuB;QAAEC,MAAM,EAAEC,mBAAO,CAACyD;MAA2B,CAC/E,CAAC;MACD,IAAI,CAAC7E,4BAA4B,GAAG,KAAK;IAC3C;EACF;AACF;AAAC8E,OAAA,CAAAzF,gBAAA,GAAAA,gBAAA;AAAA,IAAA0F,QAAA,GAAAD,OAAA,CAAA1F,OAAA,GAEcC,gBAAgB","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import {SubscribeRequest} from '../../../types';\nimport
|
|
1
|
+
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import {SubscribeRequest} from '../../../types';\nimport type WebSocketManager from './WebSocketManager';\n\n/**\n * Options for initializing a connection service.\n * @typedef ConnectionServiceOptions\n * @property {WebSocketManager} webSocketManager - The WebSocket manager instance.\n * @property {SubscribeRequest} subscribeRequest - The subscribe request payload.\n * @ignore\n */\nexport type ConnectionServiceOptions = {\n webSocketManager: WebSocketManager;\n subscribeRequest: SubscribeRequest;\n};\n\n/**\n * Details about the state of a lost connection and recovery attempts.\n * @typedef ConnectionLostDetails\n * @property {boolean} isConnectionLost - Indicates if the connection is currently lost.\n * @property {boolean} isRestoreFailed - Indicates if restoring the connection has failed.\n * @property {boolean} isSocketReconnected - Indicates if the socket has been reconnected.\n * @property {boolean} isKeepAlive - Indicates if the keep-alive mechanism is active.\n * @ignore\n */\nexport type ConnectionLostDetails = {\n isConnectionLost: boolean;\n isRestoreFailed: boolean;\n isSocketReconnected: boolean;\n isKeepAlive: boolean;\n};\n\n/**\n * Properties for connection configuration.\n * @typedef ConnectionProp\n * @property {number} lostConnectionRecoveryTimeout - Timeout in milliseconds for lost connection recovery.\n * @ignore\n */\nexport type ConnectionProp = {\n lostConnectionRecoveryTimeout: number;\n};\n"],"mappings":"","ignoreList":[]}
|
package/dist/services/index.js
CHANGED
|
@@ -30,7 +30,7 @@ class Services {
|
|
|
30
30
|
|
|
31
31
|
/** WebSocket manager for handling real-time communications */
|
|
32
32
|
|
|
33
|
-
/** RTD WebSocket manager for handling
|
|
33
|
+
/** RTD WebSocket manager for handling real-time transcription */
|
|
34
34
|
|
|
35
35
|
/** Connection service for managing websocket connections */
|
|
36
36
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_agent","_interopRequireDefault","require","_contact","_config","_aqmReqs","_WebSocketManager","_connectionService","_dialer","e","__esModule","default","Services","constructor","options","webex","connectionConfig","webSocketManager","WebSocketManager","rtdWebSocketManager","aqmReq","AqmReqs","config","AgentConfigService","agent","routingAgent","contact","routingContact","dialer","aqmDialer","connectionService","ConnectionService","subscribeRequest","getInstance","instance","exports"],"sources":["index.ts"],"sourcesContent":["import routingAgent from './agent';\nimport routingContact from './task/contact';\nimport AgentConfigService from './config';\nimport AqmReqs from './core/aqm-reqs';\nimport {WebSocketManager} from './core/websocket/WebSocketManager';\nimport {ConnectionService} from './core/websocket/connection-service';\nimport {WebexSDK, SubscribeRequest} from '../types';\nimport aqmDialer from './task/dialer';\n\n/**\n * Services class provides centralized access to all contact center plugin services\n * using a singleton pattern to ensure a single instance throughout the application.\n * @private\n * @ignore\n * @class\n */\nexport default class Services {\n /** Agent services for managing agent state and capabilities */\n public readonly agent: ReturnType<typeof routingAgent>;\n /** Configuration services for agent settings */\n public readonly config: AgentConfigService;\n /** Contact services for managing customer interactions */\n public readonly contact: ReturnType<typeof routingContact>;\n /** Dialer services for outbound calling features */\n public readonly dialer: ReturnType<typeof aqmDialer>;\n /** WebSocket manager for handling real-time communications */\n public readonly webSocketManager: WebSocketManager;\n /** RTD WebSocket manager for handling
|
|
1
|
+
{"version":3,"names":["_agent","_interopRequireDefault","require","_contact","_config","_aqmReqs","_WebSocketManager","_connectionService","_dialer","e","__esModule","default","Services","constructor","options","webex","connectionConfig","webSocketManager","WebSocketManager","rtdWebSocketManager","aqmReq","AqmReqs","config","AgentConfigService","agent","routingAgent","contact","routingContact","dialer","aqmDialer","connectionService","ConnectionService","subscribeRequest","getInstance","instance","exports"],"sources":["index.ts"],"sourcesContent":["import routingAgent from './agent';\nimport routingContact from './task/contact';\nimport AgentConfigService from './config';\nimport AqmReqs from './core/aqm-reqs';\nimport {WebSocketManager} from './core/websocket/WebSocketManager';\nimport {ConnectionService} from './core/websocket/connection-service';\nimport {WebexSDK, SubscribeRequest} from '../types';\nimport aqmDialer from './task/dialer';\n\n/**\n * Services class provides centralized access to all contact center plugin services\n * using a singleton pattern to ensure a single instance throughout the application.\n * @private\n * @ignore\n * @class\n */\nexport default class Services {\n /** Agent services for managing agent state and capabilities */\n public readonly agent: ReturnType<typeof routingAgent>;\n /** Configuration services for agent settings */\n public readonly config: AgentConfigService;\n /** Contact services for managing customer interactions */\n public readonly contact: ReturnType<typeof routingContact>;\n /** Dialer services for outbound calling features */\n public readonly dialer: ReturnType<typeof aqmDialer>;\n /** WebSocket manager for handling real-time communications */\n public readonly webSocketManager: WebSocketManager;\n /** RTD WebSocket manager for handling real-time transcription */\n public readonly rtdWebSocketManager: WebSocketManager;\n /** Connection service for managing websocket connections */\n public readonly connectionService: ConnectionService;\n /** Singleton instance of the Services class */\n private static instance: Services;\n\n /**\n * Creates a new Services instance\n * @param options - Configuration options\n * @param options.webex - WebexSDK instance\n * @param options.connectionConfig - Subscription configuration for websocket connection\n */\n constructor(options: {webex: WebexSDK; connectionConfig: SubscribeRequest}) {\n const {webex, connectionConfig} = options;\n this.webSocketManager = new WebSocketManager({webex});\n // TODO: Implement reconnection logic for this websocket in upcoming PR\n this.rtdWebSocketManager = new WebSocketManager({webex});\n const aqmReq = new AqmReqs(this.webSocketManager);\n this.config = new AgentConfigService();\n this.agent = routingAgent(aqmReq);\n this.contact = routingContact(aqmReq);\n this.dialer = aqmDialer(aqmReq);\n this.connectionService = new ConnectionService({\n webSocketManager: this.webSocketManager,\n subscribeRequest: connectionConfig,\n });\n }\n\n /**\n * Gets singleton instance of Services class\n * Creates a new instance if one doesn't exist\n * @param options - Configuration options\n * @param options.webex - WebexSDK instance\n * @param options.connectionConfig - Subscription configuration for websocket connection\n * @returns The singleton Services instance\n */\n public static getInstance(options: {\n webex: WebexSDK;\n connectionConfig: SubscribeRequest;\n }): Services {\n if (!this.instance) {\n this.instance = new Services(options);\n }\n\n return this.instance;\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,QAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,OAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,QAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,iBAAA,GAAAJ,OAAA;AACA,IAAAK,kBAAA,GAAAL,OAAA;AAEA,IAAAM,OAAA,GAAAP,sBAAA,CAAAC,OAAA;AAAsC,SAAAD,uBAAAQ,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAMG,QAAQ,CAAC;EAC5B;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;;EAGA;AACF;AACA;AACA;AACA;AACA;EACEC,WAAWA,CAACC,OAA8D,EAAE;IAC1E,MAAM;MAACC,KAAK;MAAEC;IAAgB,CAAC,GAAGF,OAAO;IACzC,IAAI,CAACG,gBAAgB,GAAG,IAAIC,kCAAgB,CAAC;MAACH;IAAK,CAAC,CAAC;IACrD;IACA,IAAI,CAACI,mBAAmB,GAAG,IAAID,kCAAgB,CAAC;MAACH;IAAK,CAAC,CAAC;IACxD,MAAMK,MAAM,GAAG,IAAIC,gBAAO,CAAC,IAAI,CAACJ,gBAAgB,CAAC;IACjD,IAAI,CAACK,MAAM,GAAG,IAAIC,eAAkB,CAAC,CAAC;IACtC,IAAI,CAACC,KAAK,GAAG,IAAAC,cAAY,EAACL,MAAM,CAAC;IACjC,IAAI,CAACM,OAAO,GAAG,IAAAC,gBAAc,EAACP,MAAM,CAAC;IACrC,IAAI,CAACQ,MAAM,GAAG,IAAAC,eAAS,EAACT,MAAM,CAAC;IAC/B,IAAI,CAACU,iBAAiB,GAAG,IAAIC,oCAAiB,CAAC;MAC7Cd,gBAAgB,EAAE,IAAI,CAACA,gBAAgB;MACvCe,gBAAgB,EAAEhB;IACpB,CAAC,CAAC;EACJ;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE,OAAciB,WAAWA,CAACnB,OAGzB,EAAY;IACX,IAAI,CAAC,IAAI,CAACoB,QAAQ,EAAE;MAClB,IAAI,CAACA,QAAQ,GAAG,IAAItB,QAAQ,CAACE,OAAO,CAAC;IACvC;IAEA,OAAO,IAAI,CAACoB,QAAQ;EACtB;AACF;AAACC,OAAA,CAAAxB,OAAA,GAAAC,QAAA","ignoreList":[]}
|