@webex/contact-center 3.10.0-next.3 → 3.10.0-next.30

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.
Files changed (103) hide show
  1. package/dist/cc.js +13 -1
  2. package/dist/cc.js.map +1 -1
  3. package/dist/config.js.map +1 -1
  4. package/dist/constants.js.map +1 -1
  5. package/dist/index.js +17 -1
  6. package/dist/index.js.map +1 -1
  7. package/dist/logger-proxy.js.map +1 -1
  8. package/dist/metrics/MetricsManager.js +2 -1
  9. package/dist/metrics/MetricsManager.js.map +1 -1
  10. package/dist/metrics/behavioral-events.js +12 -0
  11. package/dist/metrics/behavioral-events.js.map +1 -1
  12. package/dist/metrics/constants.js +4 -0
  13. package/dist/metrics/constants.js.map +1 -1
  14. package/dist/services/AddressBook.js +2 -3
  15. package/dist/services/AddressBook.js.map +1 -1
  16. package/dist/services/EntryPoint.js +2 -3
  17. package/dist/services/EntryPoint.js.map +1 -1
  18. package/dist/services/Queue.js +2 -3
  19. package/dist/services/Queue.js.map +1 -1
  20. package/dist/services/WebCallingService.js +1 -1
  21. package/dist/services/WebCallingService.js.map +1 -1
  22. package/dist/services/agent/index.js +1 -2
  23. package/dist/services/agent/index.js.map +1 -1
  24. package/dist/services/agent/types.js +10 -0
  25. package/dist/services/agent/types.js.map +1 -1
  26. package/dist/services/config/Util.js.map +1 -1
  27. package/dist/services/config/constants.js.map +1 -1
  28. package/dist/services/config/index.js +1 -1
  29. package/dist/services/config/index.js.map +1 -1
  30. package/dist/services/config/types.js +2 -2
  31. package/dist/services/config/types.js.map +1 -1
  32. package/dist/services/constants.js.map +1 -1
  33. package/dist/services/core/Err.js.map +1 -1
  34. package/dist/services/core/GlobalTypes.js.map +1 -1
  35. package/dist/services/core/Utils.js +92 -74
  36. package/dist/services/core/Utils.js.map +1 -1
  37. package/dist/services/core/WebexRequest.js +1 -2
  38. package/dist/services/core/WebexRequest.js.map +1 -1
  39. package/dist/services/core/aqm-reqs.js +2 -3
  40. package/dist/services/core/aqm-reqs.js.map +1 -1
  41. package/dist/services/core/constants.js +17 -1
  42. package/dist/services/core/constants.js.map +1 -1
  43. package/dist/services/core/types.js.map +1 -1
  44. package/dist/services/core/websocket/WebSocketManager.js +1 -2
  45. package/dist/services/core/websocket/WebSocketManager.js.map +1 -1
  46. package/dist/services/core/websocket/connection-service.js +1 -1
  47. package/dist/services/core/websocket/connection-service.js.map +1 -1
  48. package/dist/services/core/websocket/keepalive.worker.js.map +1 -1
  49. package/dist/services/core/websocket/types.js.map +1 -1
  50. package/dist/services/index.js +1 -1
  51. package/dist/services/index.js.map +1 -1
  52. package/dist/services/task/AutoWrapup.js +1 -1
  53. package/dist/services/task/AutoWrapup.js.map +1 -1
  54. package/dist/services/task/TaskManager.js +175 -62
  55. package/dist/services/task/TaskManager.js.map +1 -1
  56. package/dist/services/task/TaskUtils.js +122 -5
  57. package/dist/services/task/TaskUtils.js.map +1 -1
  58. package/dist/services/task/constants.js +3 -1
  59. package/dist/services/task/constants.js.map +1 -1
  60. package/dist/services/task/contact.js +0 -2
  61. package/dist/services/task/contact.js.map +1 -1
  62. package/dist/services/task/dialer.js.map +1 -1
  63. package/dist/services/task/index.js +50 -59
  64. package/dist/services/task/index.js.map +1 -1
  65. package/dist/services/task/types.js +377 -4
  66. package/dist/services/task/types.js.map +1 -1
  67. package/dist/types/cc.d.ts +6 -0
  68. package/dist/types/index.d.ts +1 -1
  69. package/dist/types/metrics/constants.d.ts +4 -0
  70. package/dist/types/services/config/types.d.ts +4 -4
  71. package/dist/types/services/core/Utils.d.ts +32 -17
  72. package/dist/types/services/core/constants.d.ts +14 -0
  73. package/dist/types/services/task/TaskUtils.d.ts +59 -3
  74. package/dist/types/services/task/constants.d.ts +2 -0
  75. package/dist/types/services/task/types.d.ts +57 -13
  76. package/dist/types.js +5 -0
  77. package/dist/types.js.map +1 -1
  78. package/dist/utils/PageCache.js +1 -1
  79. package/dist/utils/PageCache.js.map +1 -1
  80. package/dist/webex-config.js.map +1 -1
  81. package/dist/webex.js +2 -2
  82. package/dist/webex.js.map +1 -1
  83. package/package.json +9 -9
  84. package/src/cc.ts +12 -0
  85. package/src/index.ts +1 -0
  86. package/src/metrics/behavioral-events.ts +12 -0
  87. package/src/metrics/constants.ts +4 -0
  88. package/src/services/config/types.ts +2 -2
  89. package/src/services/core/Utils.ts +101 -85
  90. package/src/services/core/constants.ts +16 -0
  91. package/src/services/task/TaskManager.ts +201 -41
  92. package/src/services/task/TaskUtils.ts +145 -5
  93. package/src/services/task/constants.ts +2 -0
  94. package/src/services/task/index.ts +54 -89
  95. package/src/services/task/types.ts +60 -13
  96. package/test/unit/spec/cc.ts +1 -0
  97. package/test/unit/spec/metrics/behavioral-events.ts +14 -0
  98. package/test/unit/spec/services/core/Utils.ts +262 -31
  99. package/test/unit/spec/services/task/TaskManager.ts +602 -5
  100. package/test/unit/spec/services/task/TaskUtils.ts +311 -9
  101. package/test/unit/spec/services/task/index.ts +283 -86
  102. package/umd/contact-center.min.js +2 -2
  103. package/umd/contact-center.min.js.map +1 -1
package/dist/cc.js CHANGED
@@ -25,7 +25,7 @@ var _constants4 = require("./metrics/constants");
25
25
  var _EntryPoint = _interopRequireDefault(require("./services/EntryPoint"));
26
26
  var _AddressBook = _interopRequireDefault(require("./services/AddressBook"));
27
27
  var _Queue = _interopRequireDefault(require("./services/Queue"));
28
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
28
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
29
29
  /**
30
30
  * @module CCPlugin
31
31
  * @packageDocumentation
@@ -343,6 +343,16 @@ class ContactCenter extends _webexCore.WebexPlugin {
343
343
  this.trigger(_types4.TASK_EVENTS.TASK_HYDRATE, task);
344
344
  };
345
345
 
346
+ /**
347
+ * Handles task merged events when tasks are combined eg: EPDN merge/transfer
348
+ * @private
349
+ * @param {ITask} task The task object that has been merged
350
+ */
351
+ handleTaskMerged = task => {
352
+ // @ts-ignore
353
+ this.trigger(_types4.TASK_EVENTS.TASK_MERGED, task);
354
+ };
355
+
346
356
  /**
347
357
  * Sets up event listeners for incoming tasks and task hydration
348
358
  * Subscribes to task events from the task manager
@@ -351,6 +361,7 @@ class ContactCenter extends _webexCore.WebexPlugin {
351
361
  incomingTaskListener() {
352
362
  this.taskManager.on(_types4.TASK_EVENTS.TASK_INCOMING, this.handleIncomingTask);
353
363
  this.taskManager.on(_types4.TASK_EVENTS.TASK_HYDRATE, this.handleTaskHydrate);
364
+ this.taskManager.on(_types4.TASK_EVENTS.TASK_MERGED, this.handleTaskMerged);
354
365
  }
355
366
 
356
367
  /**
@@ -597,6 +608,7 @@ class ContactCenter extends _webexCore.WebexPlugin {
597
608
  // TODO: Make profile a singleton to make it available throughout app/sdk so we dont need to inject info everywhere
598
609
  this.taskManager.setWrapupData(this.agentConfig.wrapUpData);
599
610
  this.taskManager.setAgentId(this.agentConfig.agentId);
611
+ this.taskManager.setWebRtcEnabled(this.agentConfig.webRtcEnabled);
600
612
  if (this.agentConfig.webRtcEnabled && this.agentConfig.loginVoiceOptions.includes(_types.LoginOption.BROWSER)) {
601
613
  this.$webex.internal.mercury.connect().then(() => {
602
614
  _loggerProxy.default.log('Authentication: webex.internal.mercury.connect successful', {
package/dist/cc.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["_webexCore","require","_events","_interopRequireDefault","_uuid","_types","_constants","_constants2","_constants3","_services","_WebexRequest","_loggerProxy","_types2","_Utils","_types3","_TaskManager","_WebCallingService","_types4","_MetricsManager","_constants4","_EntryPoint","_AddressBook","_Queue","obj","__esModule","default","ContactCenter","WebexPlugin","namespace","LoggerProxy","constructor","args","eventEmitter","EventEmitter","$webex","webex","once","READY","$config","config","webexRequest","WebexRequest","getInstance","services","Services","connectionConfig","getConnectionConfig","webSocketManager","on","handleWebsocketMessage","webCallingService","WebCallingService","metricsManager","MetricsManager","taskManager","TaskManager","getTaskManager","contact","incomingTaskListener","entryPoint","EntryPoint","addressBook","AddressBook","agentConfig","addressBookId","queue","Queue","initialize","logger","handleIncomingTask","task","trigger","TASK_EVENTS","TASK_INCOMING","handleTaskHydrate","TASK_HYDRATE","register","info","module","CC_FILE","method","METHODS","REGISTER","timeEvent","METRIC_EVENT_NAMES","WEBSOCKET_REGISTER_SUCCESS","WEBSOCKET_REGISTER_FAILED","setupEventListeners","resp","connectWebsocket","dn","defaultDn","trackEvent","getCommonTrackingFieldForAQMResponse","deviceType","EMPTY_STRING","log","agentId","error","orgId","uploadLogs","correlationId","trackingId","deregister","WEBSOCKET_DEREGISTER_SUCCESS","WEBSOCKET_DEREGISTER_FAIL","off","unregisterIncomingCallEvent","connectionService","handleConnectionLost","webRtcEnabled","loginVoiceOptions","includes","LoginOption","BROWSER","internal","mercury","connected","disconnect","device","unregister","MERCURY_DISCONNECTED_SUCCESS","DEREGISTER","isSocketClosed","close","message","UNKNOWN_ERROR","getBuddyAgents","data","GET_BUDDY_AGENTS","FETCH_BUDDY_AGENTS_SUCCESS","FETCH_BUDDY_AGENTS_FAILED","agent","buddyAgents","agentProfileId","agentProfileID","mediaType","buddyAgentState","state","buddyAgentCount","agentList","length","failureResp","details","getCommonTrackingFieldForAQMResponseFailed","detailedError","getErrorDetails","CONNECT_WEBSOCKET","initWebSocket","body","then","credentials","getOrgId","getAgentConfig","setWrapupData","wrapUpData","setAgentId","connect","catch","allowAutomatedRelogin","silentRelogin","stationLogin","STATION_LOGIN","STATION_LOGIN_SUCCESS","STATION_LOGIN_FAILED","loginOption","AGENT_DN","isValidDialNumber","dialNumber","Error","reason","loginResponse","teamId","isExtension","EXTENSION","deviceId","getDeviceId","roles","AGENT","teamName","siteId","usesOtherDN","auxCodeId","registerWebCallingLine","channelsMap","loginData","currentTeamId","response","mmProfile","chat","email","social","telephony","notifsTrackingId","setLoginOption","loginType","status","type","join","failure","stationLogout","STATION_LOGOUT","STATION_LOGOUT_SUCCESS","STATION_LOGOUT_FAILED","logoutResponse","logout","logoutReason","deregisterWebCallingLine","WEB_RTC_PREFIX","setAgentState","SET_AGENT_STATE","AGENT_STATE_CHANGE_SUCCESS","AGENT_STATE_CHANGE_FAILED","agentStatusResponse","stateChange","requestedState","teams","subStatus","lastStateChangeReason","event","eventData","JSON","parse","keepalive","emit","HANDLE_WEBSOCKET_MESSAGE","topLevelType","nestedType","CC_EVENTS","WELCOME","metricsPayload","ws_event_type","top_level_type","has_data","Boolean","WEBSOCKET_EVENT_RECEIVED","AGENT_MULTI_LOGIN","AGENT_EVENTS","AGENT_STATE_CHANGE","AGENT_STATION_LOGIN_SUCCESS","stationLoginData","AGENT_RELOGIN_SUCCESS","stationReLoginData","AGENT_STATION_LOGIN_FAILED","AGENT_LOGOUT_SUCCESS","AGENT_LOGOUT_FAILED","AGENT_DN_REGISTERED","bind","force","isKeepAliveEnabled","clientType","allowMultiLogin","msg","isConnectionLost","HANDLE_CONNECTION_LOST","isSocketReconnected","SILENT_RELOGIN","reLoginResponse","reload","lastStateChangeTimestamp","lastIdleCodeChangeTimestamp","handleDeviceType","AGENT_STATE_AVAILABLE_ID","stateChangeData","AGENT_STATE_AVAILABLE","lastStateAuxCodeId","isAgentLoggedIn","HANDLE_DEVICE_TYPE","startOutdial","destination","origin","START_OUTDIAL","TASK_OUTDIAL_SUCCESS","TASK_OUTDIAL_FAILED","outDialPayload","entryPointId","outDialEp","direction","OUTDIAL_DIRECTION","attributes","ATTRIBUTES","OUTDIAL_MEDIA_TYPE","outboundType","OUTBOUND_TYPE","result","dialer","interactionId","getOutdialAniEntries","params","outdialANI","page","pageSize","search","filter","GET_OUTDIAL_ANI_ENTRIES","OUTDIAL_ANI_EP_FETCH_SUCCESS","resultCount","OUTDIAL_ANI_EP_FETCH_FAILED","updateAgentProfile","AGENT_DEVICE_TYPE_UPDATE_SUCCESS","AGENT_DEVICE_TYPE_UPDATE_FAILED","uuidv4","UPDATE_AGENT_PROFILE","err","reasonCode","loginPayload","deviceTypeUpdateResponse","getEntryPoints","getQueues","exports"],"sources":["cc.ts"],"sourcesContent":["/**\n * @module CCPlugin\n * @packageDocumentation\n * Contact Center Plugin module that provides functionality for managing contact center agents,\n * handling tasks, and interacting with contact center services. This module enables integration\n * with Webex Contact Center features through the WebexSDK.\n */\n\nimport {WebexPlugin} from '@webex/webex-core';\nimport EventEmitter from 'events';\nimport {v4 as uuidv4} from 'uuid';\nimport {\n SetStateResponse,\n CCPluginConfig,\n IContactCenter,\n WebexSDK,\n LoginOption,\n AgentLogin,\n AgentProfileUpdate,\n StationLoginResponse,\n StationLogoutResponse,\n BuddyAgentsResponse,\n BuddyAgents,\n SubscribeRequest,\n UploadLogsResponse,\n UpdateDeviceTypeResponse,\n GenericError,\n} from './types';\nimport {\n READY,\n CC_FILE,\n EMPTY_STRING,\n OUTDIAL_DIRECTION,\n ATTRIBUTES,\n OUTDIAL_MEDIA_TYPE,\n OUTBOUND_TYPE,\n UNKNOWN_ERROR,\n MERCURY_DISCONNECTED_SUCCESS,\n METHODS,\n} from './constants';\nimport {AGENT_STATE_AVAILABLE, AGENT_STATE_AVAILABLE_ID} from './services/config/constants';\nimport {AGENT, WEB_RTC_PREFIX} from './services/constants';\nimport Services from './services';\nimport WebexRequest from './services/core/WebexRequest';\nimport LoggerProxy from './logger-proxy';\nimport {StateChange, Logout, StateChangeSuccess, AGENT_EVENTS} from './services/agent/types';\nimport {getErrorDetails, isValidDialNumber} from './services/core/Utils';\nimport {\n Profile,\n WelcomeEvent,\n CC_EVENTS,\n OutdialAniEntriesResponse,\n OutdialAniParams,\n} from './services/config/types';\nimport {ConnectionLostDetails} from './services/core/websocket/types';\nimport TaskManager from './services/task/TaskManager';\nimport WebCallingService from './services/WebCallingService';\nimport {ITask, TASK_EVENTS, TaskResponse, DialerPayload} from './services/task/types';\nimport MetricsManager from './metrics/MetricsManager';\nimport {METRIC_EVENT_NAMES} from './metrics/constants';\nimport {Failure} from './services/core/GlobalTypes';\nimport EntryPoint from './services/EntryPoint';\nimport AddressBook from './services/AddressBook';\nimport Queue from './services/Queue';\nimport type {\n EntryPointListResponse,\n EntryPointSearchParams,\n ContactServiceQueuesResponse,\n ContactServiceQueueSearchParams,\n} from './types';\n\n/**\n * The main Contact Center plugin class that enables integration with Webex Contact Center.\n *\n * @class ContactCenter\n * @extends WebexPlugin\n * @implements IContactCenter\n * @description\n * Features:\n *\n * 1. Session Management:\n * - {@link register} - Initialize and register SDK with contact center\n * - {@link deregister} - Cleanup and disconnect SDK resources\n *\n * 2. Agent Login/Logout:\n * - {@link stationLogin} - Login with browser or desk phone\n * - {@link stationLogout} - Logout from current station\n * - {@link updateAgentProfile} - Update device type and settings\n *\n * 3. Agent State Control:\n * - {@link setAgentState} - Change agent state (Available/Idle)\n *\n * 4. Task Management:\n * - Inbound task handling via events\n * - {@link startOutdial} - Make outbound calls\n *\n * 5. Routing & Distribution:\n * - {@link getQueues} - Get available queues for routing\n * - {@link getBuddyAgents} - Get available buddy agents\n *\n * 6. Diagnostics:\n * - {@link uploadLogs} - Upload logs for troubleshooting\n *\n * * Key Events:\n * - Agent State Events:\n * - `agent:stateChange` - Agent's state has changed (Available, Idle, etc.)\n * - `agent:stateChangeSuccess` - Agent state change was successful\n * - `agent:stateChangeFailed` - Agent state change failed\n *\n * - Session Events:\n * - `agent:stationLoginSuccess` - Agent login was successful\n * - `agent:stationLoginFailed` - Agent login failed\n * - `agent:logoutSuccess` - Agent logout was successful\n * - `agent:logoutFailed` - Agent logout failed\n *\n * - Task Events:\n * - `task:incoming` - New task is being offered\n * - `task:hydrate` - Task data has been updated\n * - `task:established` - Task/call has been connected\n * - `task:ended` - Task/call has ended\n * - `task:error` - An error occurred during task handling\n *\n * @public\n *\n * @example\n * ```typescript\n * import Webex from 'webex';\n *\n * // Initialize SDK with access token\n * const webex = new Webex({\n * credentials: 'YOUR_ACCESS_TOKEN'\n * });\n *\n * // Get Contact Center plugin instance\n * const cc = webex.cc;\n *\n * // Setup event handlers\n * cc.on('agent:stateChange', (event) => {\n * console.log('Agent state changed:', event.state);\n * });\n *\n * cc.on('task:incoming', (task) => {\n * console.log('New task received:', task.interactionId);\n * });\n *\n * // Initialize agent session\n * async function initializeAgent() {\n * try {\n * // Register with contact center\n * const profile = await cc.register();\n *\n * // Login with browser-based calling\n * await cc.stationLogin({\n * teamId: profile.teams[0].teamId,\n * loginOption: 'BROWSER'\n * });\n *\n * // Set agent to Available state\n * await cc.setAgentState({\n * state: 'Available',\n * auxCodeId: '0'\n * });\n *\n * console.log('Agent initialized and ready');\n * } catch (error) {\n * console.error('Initialization failed:', error);\n * await cc.uploadLogs(); // Upload logs for troubleshooting\n * }\n * }\n *\n * initializeAgent();\n * ```\n *\n * @public\n */\n\nexport default class ContactCenter extends WebexPlugin implements IContactCenter {\n /**\n * The plugin's unique namespace identifier in the Webex SDK.\n * Used to access the plugin via webex.cc\n * @type {string}\n * @public\n */\n namespace = 'cc';\n\n /**\n * Plugin configuration settings including connection and authentication options\n * @type {CCPluginConfig}\n * @private\n */\n private $config: CCPluginConfig;\n\n /**\n * Reference to the parent Webex SDK instance\n * Used to access core Webex functionality and credentials\n * @type {WebexSDK}\n * @private\n */\n private $webex: WebexSDK;\n\n /**\n * Event emitter for handling internal plugin events\n * Manages event subscriptions and notifications\n * @type {EventEmitter}\n * @private\n */\n private eventEmitter: EventEmitter;\n\n /**\n * Agent's profile and configuration data\n * Includes capabilities, teams, settings, and current state\n * @type {Profile}\n * @private\n */\n private agentConfig: Profile;\n\n /**\n * Service for managing browser-based calling (WebRTC)\n * Handles audio/video streaming and device management\n * @type {WebCallingService}\n * @private\n */\n private webCallingService: WebCallingService;\n\n /**\n * Core service managers for Contact Center operations\n * Includes agent, connection, and configuration services\n * @type {Services}\n * @private\n */\n private services: Services;\n\n /**\n * Service for making authenticated HTTP requests to Webex APIs\n * Handles request/response lifecycle and error handling\n * @type {WebexRequest}\n * @private\n */\n private webexRequest: WebexRequest;\n\n /**\n * Manager for handling contact center tasks (calls, chats, etc.)\n * Coordinates task lifecycle events and state\n * @type {TaskManager}\n * @private\n */\n private taskManager: TaskManager;\n\n /**\n * Manager for tracking and reporting SDK metrics and analytics\n * Monitors performance, errors, and usage patterns\n * @type {MetricsManager}\n * @private\n */\n private metricsManager: MetricsManager;\n\n /**\n * API instance for managing Webex Contact Center entry points\n * Provides functionality to fetch entry points with caching support\n * @type {EntryPoint}\n * @public\n * @example\n * ```typescript\n * const cc = webex.cc;\n * await cc.register();\n * await cc.stationLogin({ teamId: 'team123', loginOption: 'BROWSER' });\n *\n * // Access EntryPointRecord\n * const response = await cc.entryPoint.getEntryPoints({\n * page: 0,\n * pageSize: 50\n * });\n * ```\n */\n private entryPoint: EntryPoint;\n\n /**\n * API instance for managing Webex Contact Center address book contacts\n * Provides functionality to fetch address book entries with caching support\n * @type {AddressBook}\n * @public\n * @example\n * ```typescript\n * const cc = webex.cc;\n * await cc.register();\n * await cc.stationLogin({ teamId: 'team123', loginOption: 'BROWSER' });\n *\n * // Access AddressBook API\n * const response = await cc.addressBook.getEntries({\n * page: 0,\n * pageSize: 25\n * });\n * ```\n */\n public addressBook: AddressBook;\n\n /**\n * API instance for managing Webex Contact Center queues\n * Provides functionality to fetch queues with caching support\n * @type {Queue}\n * @public\n * @example\n * ```typescript\n * const cc = webex.cc;\n * await cc.register();\n * await cc.stationLogin({ teamId: 'team123', loginOption: 'BROWSER' });\n *\n * // Access Queue API\n * const response = await cc.queue.getQueues({\n * page: 0,\n * pageSize: 50\n * });\n *\n * // Filter queues by specific criteria\n * const filteredQueues = await cc.queue.getQueues({\n * filter: 'id==\"queue-id-123\"'\n * });\n * ```\n */\n private queue: Queue;\n\n /**\n * Logger utility for Contact Center plugin\n * Provides consistent logging across the plugin\n * @type {LoggerProxy}\n * @public\n */\n public LoggerProxy = LoggerProxy;\n\n /**\n * @ignore\n * Creates an instance of ContactCenter plugin\n * @param {any[]} args Arguments passed to plugin constructor\n */\n constructor(...args) {\n super(...args);\n\n this.eventEmitter = new EventEmitter();\n // @ts-ignore\n this.$webex = this.webex;\n\n this.$webex.once(READY, () => {\n // @ts-ignore\n this.$config = this.config;\n\n /**\n * This is used for handling the async requests by sending webex.request and wait for corresponding websocket event.\n */\n this.webexRequest = WebexRequest.getInstance({\n webex: this.$webex,\n });\n\n this.services = Services.getInstance({\n webex: this.$webex,\n connectionConfig: this.getConnectionConfig(),\n });\n this.services.webSocketManager.on('message', this.handleWebsocketMessage);\n\n this.webCallingService = new WebCallingService(this.$webex);\n this.metricsManager = MetricsManager.getInstance({webex: this.$webex});\n this.taskManager = TaskManager.getTaskManager(\n this.services.contact,\n this.webCallingService,\n this.services.webSocketManager\n );\n this.incomingTaskListener();\n\n // Initialize API instances\n // will have future function for indivdual fetch etc so better be in an object\n this.entryPoint = new EntryPoint(this.$webex);\n this.addressBook = new AddressBook(this.$webex, () => this.agentConfig?.addressBookId);\n this.queue = new Queue(this.$webex);\n\n // Initialize logger\n LoggerProxy.initialize(this.$webex.logger);\n });\n }\n\n /**\n * Handles incoming task events and triggers appropriate notifications\n * @private\n * @param {ITask} task The incoming task object containing task details\n */\n private handleIncomingTask = (task: ITask) => {\n // @ts-ignore\n this.trigger(TASK_EVENTS.TASK_INCOMING, task);\n };\n\n /**\n * Handles task hydration events for updating task data\n * @private\n * @param {ITask} task The task object to be hydrated with additional data\n */\n private handleTaskHydrate = (task: ITask) => {\n // @ts-ignore\n this.trigger(TASK_EVENTS.TASK_HYDRATE, task);\n };\n\n /**\n * Sets up event listeners for incoming tasks and task hydration\n * Subscribes to task events from the task manager\n * @private\n */\n private incomingTaskListener() {\n this.taskManager.on(TASK_EVENTS.TASK_INCOMING, this.handleIncomingTask);\n this.taskManager.on(TASK_EVENTS.TASK_HYDRATE, this.handleTaskHydrate);\n }\n\n /**\n * Initializes the Contact Center SDK by setting up the web socket connections.\n * This method must be called before performing any agent operations such as login, state change, or handling tasks.\n *\n * @returns {Promise<Profile>} Agent profile information after successful registration.\n * The returned `Profile` object contains details such as:\n * - `agentId`: The unique identifier for the agent.\n * - `defaultDn`: The default dial number associated with the agent.\n * - `teams`: Array of teams the agent belongs to.\n * - `webRtcEnabled`: Indicates if WebRTC (browser calling) is enabled.\n * - `loginVoiceOptions`: Supported login options for the agent (e.g., BROWSER, EXTENSION).\n * - ...and other agent configuration details.\n *\n * @throws {Error} If registration fails.\n *\n * @public\n * @example\n * ```typescript\n * import Webex from 'webex';\n *\n * const webex = Webex.init({ credentials: 'YOUR_ACCESS_TOKEN' });\n * const cc = webex.cc;\n *\n * // Register the SDK and fetch agent profile\n * const profile = await cc.register();\n *\n * console.log('Agent ID:', profile.agentId);\n * console.log('Default DN:', profile.defaultDn);\n * console.log('Teams:', profile.teams.map(t => t.teamId));\n * console.log('WebRTC Enabled:', profile.webRtcEnabled);\n * console.log('Supported Login Options:', profile.loginVoiceOptions);\n *\n * // Now you can proceed with station login, state changes, etc.\n * await cc.stationLogin({ teamId: profile.teams[0].teamId, loginOption: 'BROWSER' });\n * ```\n */\n public async register(): Promise<Profile> {\n LoggerProxy.info('Starting CC SDK registration', {\n module: CC_FILE,\n method: METHODS.REGISTER,\n });\n try {\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.WEBSOCKET_REGISTER_SUCCESS,\n METRIC_EVENT_NAMES.WEBSOCKET_REGISTER_FAILED,\n ]);\n this.setupEventListeners();\n\n const resp = await this.connectWebsocket();\n // Ensure 'dn' is always populated from 'defaultDn'\n resp.dn = resp.defaultDn;\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.WEBSOCKET_REGISTER_SUCCESS,\n {\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(resp),\n deviceType: resp.deviceType || EMPTY_STRING,\n },\n ['operational']\n );\n\n LoggerProxy.log(`CC SDK registration completed successfully with agentId: ${resp.agentId}`, {\n module: CC_FILE,\n method: METHODS.REGISTER,\n });\n\n return resp;\n } catch (error) {\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.WEBSOCKET_REGISTER_FAILED,\n {\n orgId: error.orgId,\n },\n ['operational']\n );\n LoggerProxy.error(`Error during register: ${error}`, {\n module: CC_FILE,\n method: METHODS.REGISTER,\n });\n this.webexRequest.uploadLogs({\n correlationId: error?.trackingId,\n });\n\n throw error;\n }\n }\n\n /**\n * Unregisters the Contact Center SDK by closing all web socket connections, removing event listeners,\n * and cleaning up internal state.\n *\n * @remarks\n * This method only disconnects the SDK from the backend and cleans up resources. It does NOT perform a station logout\n * (i.e., the agent remains logged in to the contact center unless you explicitly call {@link stationLogout}).\n * Use this when you want to fully tear down the SDK instance, such as during application shutdown or user sign-out.\n *\n * @returns {Promise<void>} Resolves when deregistration and cleanup are complete.\n * @throws {Error} If deregistration fails.\n *\n * @public\n * @example\n * // Typical usage: clean up SDK before application exit or user logout\n * import Webex from 'webex';\n *\n * const webex = Webex.init({ credentials: 'YOUR_ACCESS_TOKEN' });\n * const cc = webex.cc;\n *\n * await cc.register();\n * await cc.stationLogin({ teamId: 'team123', loginOption: 'BROWSER' });\n * // ... perform agent operations ...\n *\n * // If you want to log out the agent as well, call:\n * // await cc.stationLogout({ logoutReason: 'User signed out' });\n * // On application shutdown or user sign-out:\n * await cc.deregister();\n *\n\n */\n public async deregister(): Promise<void> {\n try {\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.WEBSOCKET_DEREGISTER_SUCCESS,\n METRIC_EVENT_NAMES.WEBSOCKET_DEREGISTER_FAIL,\n ]);\n\n this.taskManager.off(TASK_EVENTS.TASK_INCOMING, this.handleIncomingTask);\n this.taskManager.off(TASK_EVENTS.TASK_HYDRATE, this.handleTaskHydrate);\n this.taskManager.unregisterIncomingCallEvent();\n\n this.services.webSocketManager.off('message', this.handleWebsocketMessage);\n this.services.connectionService.off('connectionLost', this.handleConnectionLost);\n\n if (\n this.agentConfig.webRtcEnabled &&\n this.agentConfig.loginVoiceOptions.includes(LoginOption.BROWSER)\n ) {\n if (this.$webex.internal.mercury.connected) {\n this.$webex.internal.mercury.off('online');\n this.$webex.internal.mercury.off('offline');\n await this.$webex.internal.mercury.disconnect();\n // @ts-ignore\n await this.$webex.internal.device.unregister();\n LoggerProxy.log(MERCURY_DISCONNECTED_SUCCESS, {\n module: CC_FILE,\n method: METHODS.DEREGISTER,\n });\n }\n }\n\n if (!this.services.webSocketManager.isSocketClosed) {\n this.services.webSocketManager.close(false, 'Unregistering the SDK');\n }\n\n // Clear any cached agent configuration\n this.agentConfig = null;\n\n LoggerProxy.log('Deregistered successfully', {\n module: CC_FILE,\n method: METHODS.DEREGISTER,\n });\n\n this.metricsManager.trackEvent(METRIC_EVENT_NAMES.WEBSOCKET_DEREGISTER_SUCCESS, {}, [\n 'operational',\n ]);\n } catch (error) {\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.WEBSOCKET_DEREGISTER_FAIL,\n {\n error: error.message || UNKNOWN_ERROR,\n },\n ['operational']\n );\n\n LoggerProxy.error(`Error during deregister: ${error}`, {\n module: CC_FILE,\n method: METHODS.DEREGISTER,\n });\n\n throw error;\n }\n }\n\n /**\n * Returns the list of buddy agents who are in the given user state and media type based on their agent profile settings\n * @param {BuddyAgents} data The data required to fetch buddy agents\n * @returns {Promise<BuddyAgentsResponse>} A promise resolving to the buddy agents information\n * @throws {Error} If fetching buddy agents fails\n * @example\n * ```typescript\n * // Get list of available agents for consultation or transfer\n * const cc = webex.cc;\n *\n * // First ensure you're registered and logged in\n * await cc.register();\n * await cc.stationLogin({ teamId: 'team123', loginOption: 'BROWSER' });\n *\n * // Get buddy agents filtered by state and media type\n * const response = await cc.getBuddyAgents({\n * state: 'Available', // Filter by agent state ('Available', 'Idle', etc.)\n * mediaType: 'telephony' // Filter by media type ('telephony', 'chat', 'email', 'social')\n * });\n *\n * // Process the buddy agents list\n * if (response.data.agentList.length > 0) {\n * const buddyAgents = response.data.agentList;\n * console.log(`Found ${buddyAgents.length} available agents`);\n *\n * // Access agent details\n * buddyAgents.forEach(agent => {\n * console.log(`Agent ID: ${agent.agentId}`);\n * console.log(`Name: ${agent.firstName} ${agent.lastName}`);\n * console.log(`State: ${agent.state}`);\n * console.log(`Team: ${agent.teamName}`);\n * });\n * }\n * ```\n */\n public async getBuddyAgents(data: BuddyAgents): Promise<BuddyAgentsResponse> {\n LoggerProxy.info('Fetching buddy agents', {\n module: CC_FILE,\n method: METHODS.GET_BUDDY_AGENTS,\n });\n try {\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.FETCH_BUDDY_AGENTS_SUCCESS,\n METRIC_EVENT_NAMES.FETCH_BUDDY_AGENTS_FAILED,\n ]);\n const resp = await this.services.agent.buddyAgents({\n data: {agentProfileId: this.agentConfig.agentProfileID, ...data},\n });\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.FETCH_BUDDY_AGENTS_SUCCESS,\n {\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(resp),\n mediaType: data.mediaType,\n buddyAgentState: data.state,\n buddyAgentCount: resp.data.agentList.length,\n },\n ['operational']\n );\n\n LoggerProxy.log(`Successfully retrieved ${resp.data.agentList.length} buddy agents`, {\n module: CC_FILE,\n method: METHODS.GET_BUDDY_AGENTS,\n trackingId: resp.trackingId,\n });\n\n return resp;\n } catch (error) {\n const failureResp = error.details as Failure;\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.FETCH_BUDDY_AGENTS_FAILED,\n {\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(failureResp),\n mediaType: data.mediaType,\n buddyAgentState: data.state,\n },\n ['operational']\n );\n const {error: detailedError} = getErrorDetails(error, METHODS.GET_BUDDY_AGENTS, CC_FILE);\n throw detailedError;\n }\n }\n\n /**\n * Connects to the websocket and fetches the agent profile\n * @returns {Promise<Profile>} Agent profile information\n * @throws {Error} If connection fails or profile cannot be fetched\n * @private\n */\n private async connectWebsocket() {\n LoggerProxy.info('Connecting to websocket', {\n module: CC_FILE,\n method: METHODS.CONNECT_WEBSOCKET,\n });\n try {\n return this.services.webSocketManager\n .initWebSocket({\n body: this.getConnectionConfig(),\n })\n .then(async (data: WelcomeEvent) => {\n const agentId = data.agentId;\n const orgId = this.$webex.credentials.getOrgId();\n this.agentConfig = await this.services.config.getAgentConfig(orgId, agentId);\n LoggerProxy.log(`Agent config is fetched successfully`, {\n module: CC_FILE,\n method: METHODS.CONNECT_WEBSOCKET,\n });\n // TODO: Make profile a singleton to make it available throughout app/sdk so we dont need to inject info everywhere\n this.taskManager.setWrapupData(this.agentConfig.wrapUpData);\n this.taskManager.setAgentId(this.agentConfig.agentId);\n\n if (\n this.agentConfig.webRtcEnabled &&\n this.agentConfig.loginVoiceOptions.includes(LoginOption.BROWSER)\n ) {\n this.$webex.internal.mercury\n .connect()\n .then(() => {\n LoggerProxy.log('Authentication: webex.internal.mercury.connect successful', {\n module: CC_FILE,\n method: METHODS.CONNECT_WEBSOCKET,\n });\n })\n .catch((error) => {\n LoggerProxy.error(`Error occurred during mercury.connect() ${error}`, {\n module: CC_FILE,\n method: METHODS.CONNECT_WEBSOCKET,\n });\n });\n }\n if (this.$config && this.$config.allowAutomatedRelogin) {\n await this.silentRelogin();\n }\n\n return this.agentConfig;\n })\n .catch((error) => {\n throw error;\n });\n } catch (error) {\n LoggerProxy.error(`Error during register: ${error}`, {\n module: CC_FILE,\n method: METHODS.CONNECT_WEBSOCKET,\n });\n\n throw error;\n }\n }\n\n /**\n * Performs agent login with specified credentials and device type\n * @param {AgentLogin} data Login parameters including teamId, loginOption and dialNumber\n * @returns {Promise<StationLoginResponse>} Response containing login status and profile\n * @throws {Error} If login fails\n * @public\n * @example\n * ```typescript\n * const cc = webex.cc;\n * await cc.register();\n *\n * // Primary usage: using Promise response\n * try {\n * const response = await cc.stationLogin({\n * teamId: 'team123',\n * loginOption: 'EXTENSION',\n * dialNumber: '1002'\n * });\n * console.log('Login successful:', response);\n * } catch (error) {\n * console.error('Login failed:', error);\n * }\n *\n * // Optional: Also listen for events elsewhere in your application\n * // cc.on('agent:stationLoginSuccess', (data) => { ... });\n * // cc.on('agent:stationLoginFailed', (error) => { ... });\n * ```\n */\n public async stationLogin(data: AgentLogin): Promise<StationLoginResponse> {\n LoggerProxy.info('Starting agent station login', {\n module: CC_FILE,\n method: METHODS.STATION_LOGIN,\n });\n try {\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.STATION_LOGIN_SUCCESS,\n METRIC_EVENT_NAMES.STATION_LOGIN_FAILED,\n ]);\n\n if (data.loginOption === LoginOption.AGENT_DN && !isValidDialNumber(data.dialNumber)) {\n const error = new Error('INVALID_DIAL_NUMBER');\n // @ts-ignore - adding custom key to the error object\n error.details = {data: {reason: 'INVALID_DIAL_NUMBER'}} as Failure;\n\n throw error;\n }\n\n const loginResponse = await this.services.agent.stationLogin({\n data: {\n dialNumber:\n data.loginOption === LoginOption.BROWSER ? this.agentConfig.agentId : data.dialNumber,\n teamId: data.teamId,\n deviceType: data.loginOption,\n isExtension: data.loginOption === LoginOption.EXTENSION,\n deviceId: this.getDeviceId(data.loginOption, data.dialNumber),\n roles: [AGENT],\n teamName: EMPTY_STRING,\n siteId: EMPTY_STRING,\n usesOtherDN: false,\n auxCodeId: EMPTY_STRING,\n },\n });\n\n if (this.agentConfig.webRtcEnabled && data.loginOption === LoginOption.BROWSER) {\n await this.webCallingService.registerWebCallingLine();\n }\n\n const resp = await loginResponse;\n const {channelsMap, ...loginData} = resp.data;\n this.agentConfig.currentTeamId = resp.data.teamId;\n const response = {\n ...loginData,\n mmProfile: {\n chat: channelsMap.chat?.length,\n email: channelsMap.email?.length,\n social: channelsMap.social?.length,\n telephony: channelsMap.telephony?.length,\n },\n notifsTrackingId: resp.trackingId,\n };\n\n this.webCallingService.setLoginOption(data.loginOption);\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.STATION_LOGIN_SUCCESS,\n {\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(resp),\n loginType: data.loginOption,\n status: resp.data.status,\n type: resp.data.type,\n roles: resp.data.roles?.join(',') || EMPTY_STRING,\n },\n ['behavioral', 'business', 'operational']\n );\n\n LoggerProxy.log(\n `Agent station login completed successfully agentId: ${resp.data.agentId} loginOption: ${data.loginOption} teamId: ${data.teamId}`,\n {\n module: CC_FILE,\n method: METHODS.STATION_LOGIN,\n trackingId: resp.trackingId,\n }\n );\n\n return response;\n } catch (error) {\n const failure = error.details as Failure;\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.STATION_LOGIN_FAILED,\n {\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(failure),\n loginType: data.loginOption,\n },\n ['behavioral', 'business', 'operational']\n );\n error.loginOption = data.loginOption;\n const {error: detailedError} = getErrorDetails(error, METHODS.STATION_LOGIN, CC_FILE);\n\n throw detailedError;\n }\n }\n\n /**\n * Performs a station logout operation for the agent\n * @remarks\n * A logout operation cannot happen if the agent is in an interaction or haven't logged in yet.\n * @param {Logout} data Logout parameters with logoutReason - a string explaining why the agent is logging out\n * @returns {Promise<StationLogoutResponse>} Response indicating logout status\n * @throws {Error} If logout fails\n * @public\n * @example\n * ```typescript\n * // Basic logout\n * try {\n * await cc.stationLogout({\n * logoutReason: 'End of shift'\n * });\n * console.log('Logged out successfully');\n * } catch (error) {\n * console.error('Logout failed:', error);\n * }\n * ```\n */\n public async stationLogout(data: Logout): Promise<StationLogoutResponse> {\n LoggerProxy.info('Starting agent station logout', {\n module: CC_FILE,\n method: METHODS.STATION_LOGOUT,\n });\n try {\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.STATION_LOGOUT_SUCCESS,\n METRIC_EVENT_NAMES.STATION_LOGOUT_FAILED,\n ]);\n const logoutResponse = this.services.agent.logout({\n data,\n });\n\n const resp = await logoutResponse;\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.STATION_LOGOUT_SUCCESS,\n {\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(resp),\n logoutReason: data.logoutReason,\n },\n ['behavioral', 'business', 'operational']\n );\n\n if (this.webCallingService) {\n this.webCallingService.deregisterWebCallingLine();\n }\n\n LoggerProxy.log(`Agent station logout completed successfully`, {\n module: CC_FILE,\n method: METHODS.STATION_LOGOUT,\n trackingId: resp.trackingId,\n });\n\n return resp;\n } catch (error) {\n const failure = error.details as Failure;\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.STATION_LOGOUT_FAILED,\n {\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(failure),\n logoutReason: data.logoutReason,\n },\n ['behavioral', 'business', 'operational']\n );\n const {error: detailedError} = getErrorDetails(error, METHODS.STATION_LOGOUT, CC_FILE);\n throw detailedError;\n }\n }\n\n /**\n * Gets the device ID based on login option and dial number\n * @param {string} loginOption The login option (BROWSER, EXTENSION, etc)\n * @param {string} dialNumber The dial number if applicable\n * @returns {string} The device ID\n * @private\n */\n private getDeviceId(loginOption: string, dialNumber: string): string {\n if (loginOption === LoginOption.EXTENSION || loginOption === LoginOption.AGENT_DN) {\n return dialNumber;\n }\n\n return WEB_RTC_PREFIX + this.agentConfig.agentId;\n }\n\n /**\n * Sets the state of the agent to Available or any of the Idle states.\n * After a state change attempt, one of the following events will be emitted:\n * - agent:stateChange: Emitted when agent's state changes (triggered for both local and remote changes)\n * - agent:stateChangeSuccess: Emitted when agent state change is successful\n * - agent:stateChangeFailed: Emitted when agent state change attempt fails\n *\n * @param {StateChange} data State change parameters including the new state\n * @returns {Promise<SetStateResponse>} Response with updated state information\n * @throws {Error} If state change fails\n * @public\n * @example\n * ```typescript\n * const cc = webex.cc;\n * await cc.register();\n * await cc.stationLogin({ teamId: 'team123', loginOption: 'BROWSER' });\n *\n * // Using promise-based approach\n * try {\n * await cc.setAgentState({\n * state: 'Available',\n * auxCodeId: '12345',\n * lastStateChangeReason: 'Manual state change',\n * agentId: 'agent123',\n * });\n * } catch (error) {\n * console.error('State change failed:', error);\n * }\n *\n * // Optionally, listen for events\n * cc.on('agent:stateChange', (eventData) => {\n * // Triggered for both local and remote state changes\n * console.log('State changed:', eventData);\n * });\n *\n * cc.on('agent:stateChangeSuccess', (eventData) => {\n * console.log('State change succeeded:', eventData);\n * });\n *\n * cc.on('agent:stateChangeFailed', (error) => {\n * console.error('State change failed:', error);\n * });\n * ```\n */\n public async setAgentState(data: StateChange): Promise<SetStateResponse> {\n LoggerProxy.info('Setting agent state', {\n module: CC_FILE,\n method: METHODS.SET_AGENT_STATE,\n });\n try {\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.AGENT_STATE_CHANGE_SUCCESS,\n METRIC_EVENT_NAMES.AGENT_STATE_CHANGE_FAILED,\n ]);\n const agentStatusResponse = await this.services.agent.stateChange({\n data: {...data, agentId: data.agentId || this.agentConfig.agentId},\n });\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.AGENT_STATE_CHANGE_SUCCESS,\n {\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(agentStatusResponse),\n requestedState: data.state,\n teamId: this.agentConfig?.teams[0]?.teamId ?? EMPTY_STRING,\n status: agentStatusResponse.data?.status,\n subStatus: agentStatusResponse.data?.subStatus,\n auxCodeId: data.auxCodeId,\n lastStateChangeReason: data.lastStateChangeReason || EMPTY_STRING,\n },\n ['behavioral', 'business', 'operational']\n );\n\n LoggerProxy.log(\n `Agent state changed successfully to auxCodeId: ${agentStatusResponse.data.auxCodeId}`,\n {\n module: CC_FILE,\n method: METHODS.SET_AGENT_STATE,\n trackingId: agentStatusResponse.trackingId,\n }\n );\n\n return agentStatusResponse;\n } catch (error) {\n const failure = error.details as Failure;\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.AGENT_STATE_CHANGE_FAILED,\n {\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(failure),\n state: data.state,\n auxCodeId: data.auxCodeId,\n lastStateChangeReason: data.lastStateChangeReason || EMPTY_STRING,\n },\n ['behavioral', 'business', 'operational']\n );\n const {error: detailedError} = getErrorDetails(error, METHODS.SET_AGENT_STATE, CC_FILE);\n throw detailedError;\n }\n }\n\n /**\n * Processes incoming websocket messages and emits corresponding events\n * Handles various event types including agent state changes, login events,\n * and other agent-related notifications\n * @private\n * @param {string} event The raw websocket event message\n */\n private handleWebsocketMessage = (event: string) => {\n const eventData = JSON.parse(event);\n // Re-emit all the events related to agent except keep-alives\n if (!eventData.keepalive && eventData.data && eventData.data.type) {\n // @ts-ignore\n this.emit(eventData.data.type, eventData.data);\n }\n\n if (!eventData.type) {\n return;\n }\n\n LoggerProxy.log(`Received event: ${eventData?.data?.type ?? eventData.type}`, {\n module: CC_FILE,\n method: METHODS.HANDLE_WEBSOCKET_MESSAGE,\n });\n\n // Emit metrics for all websocket events except keepalive and welcome\n const topLevelType = eventData.type;\n const nestedType = eventData?.data?.type;\n if (topLevelType !== CC_EVENTS.WELCOME && eventData.keepalive !== 'true') {\n const metricsPayload: Record<string, any> = {\n ws_event_type: nestedType || topLevelType,\n top_level_type: topLevelType,\n has_data: Boolean(eventData.data),\n };\n this.metricsManager.trackEvent(METRIC_EVENT_NAMES.WEBSOCKET_EVENT_RECEIVED, metricsPayload, [\n 'operational',\n ]);\n }\n\n switch (eventData.type) {\n case CC_EVENTS.AGENT_MULTI_LOGIN:\n // @ts-ignore\n this.emit(AGENT_EVENTS.AGENT_MULTI_LOGIN, eventData.data);\n break;\n case CC_EVENTS.AGENT_STATE_CHANGE:\n // @ts-ignore\n this.emit(AGENT_EVENTS.AGENT_STATE_CHANGE, eventData.data);\n break;\n default:\n break;\n }\n\n if (!(eventData.data && eventData.data.type)) {\n return;\n }\n\n switch (eventData.data.type) {\n case CC_EVENTS.AGENT_STATION_LOGIN_SUCCESS: {\n const {channelsMap, ...loginData} = eventData.data;\n const stationLoginData = {\n ...loginData,\n mmProfile: {\n chat: channelsMap.chat?.length,\n email: channelsMap.email?.length,\n social: channelsMap.social?.length,\n telephony: channelsMap.telephony?.length,\n },\n notifsTrackingId: eventData.trackingId,\n };\n this.webCallingService.setLoginOption(loginData.deviceType as LoginOption);\n // @ts-ignore\n this.emit(AGENT_EVENTS.AGENT_STATION_LOGIN_SUCCESS, stationLoginData);\n break;\n }\n case CC_EVENTS.AGENT_RELOGIN_SUCCESS:\n {\n const {channelsMap, ...loginData} = eventData.data;\n const stationReLoginData = {\n ...loginData,\n mmProfile: {\n chat: channelsMap.chat?.length,\n email: channelsMap.email?.length,\n social: channelsMap.social?.length,\n telephony: channelsMap.telephony?.length,\n },\n notifsTrackingId: eventData.trackingId,\n };\n // @ts-ignore\n this.emit(AGENT_EVENTS.AGENT_RELOGIN_SUCCESS, stationReLoginData);\n }\n break;\n case CC_EVENTS.AGENT_STATE_CHANGE_SUCCESS:\n // @ts-ignore\n this.emit(AGENT_EVENTS.AGENT_STATE_CHANGE_SUCCESS, eventData.data);\n break;\n case CC_EVENTS.AGENT_STATE_CHANGE_FAILED:\n // @ts-ignore\n this.emit(AGENT_EVENTS.AGENT_STATE_CHANGE_FAILED, eventData.data);\n break;\n case CC_EVENTS.AGENT_STATION_LOGIN_FAILED:\n // @ts-ignore\n this.emit(AGENT_EVENTS.AGENT_STATION_LOGIN_FAILED, eventData.data);\n break;\n case CC_EVENTS.AGENT_LOGOUT_SUCCESS:\n // @ts-ignore\n this.emit(AGENT_EVENTS.AGENT_LOGOUT_SUCCESS, eventData.data);\n break;\n case CC_EVENTS.AGENT_LOGOUT_FAILED:\n // @ts-ignore\n this.emit(AGENT_EVENTS.AGENT_LOGOUT_FAILED, eventData.data);\n break;\n case CC_EVENTS.AGENT_DN_REGISTERED:\n // @ts-ignore\n this.emit(AGENT_EVENTS.AGENT_DN_REGISTERED, eventData.data);\n break;\n default:\n break;\n }\n };\n\n /**\n * Initializes event listeners for the Contact Center service\n * Sets up handlers for connection state changes and other core events\n * @private\n */\n private setupEventListeners() {\n this.services.connectionService.on('connectionLost', this.handleConnectionLost.bind(this));\n }\n\n /**\n * Returns the connection configuration\n * @returns {SubscribeRequest} Connection configuration\n * @private\n */\n private getConnectionConfig(): SubscribeRequest {\n return {\n force: this.$config?.force ?? true,\n isKeepAliveEnabled: this.$config?.isKeepAliveEnabled ?? false,\n clientType: this.$config?.clientType ?? 'WebexCCSDK',\n allowMultiLogin: this.$config?.allowMultiLogin ?? true,\n };\n }\n\n /**\n * Handles connection lost events and reconnection attempts\n * @param {ConnectionLostDetails} msg Connection lost details\n * @private\n */\n private async handleConnectionLost(msg: ConnectionLostDetails): Promise<void> {\n if (msg.isConnectionLost) {\n // TODO: Emit an event saying connection is lost\n LoggerProxy.info('event=handleConnectionLost | Connection lost', {\n module: CC_FILE,\n method: METHODS.HANDLE_CONNECTION_LOST,\n });\n } else if (msg.isSocketReconnected) {\n // TODO: Emit an event saying connection is re-estabilished\n LoggerProxy.info(\n 'event=handleConnectionReconnect | Connection reconnected attempting to request silent relogin',\n {module: CC_FILE, method: METHODS.HANDLE_CONNECTION_LOST}\n );\n if (this.$config && this.$config.allowAutomatedRelogin) {\n await this.silentRelogin();\n }\n }\n }\n\n /**\n * Handles silent relogin after registration completion\n * @private\n */\n private async silentRelogin(): Promise<void> {\n LoggerProxy.info('Starting silent relogin process', {\n module: CC_FILE,\n method: METHODS.SILENT_RELOGIN,\n });\n\n try {\n const reLoginResponse = await this.services.agent.reload();\n const {\n agentId,\n lastStateChangeReason,\n deviceType,\n dn,\n lastStateChangeTimestamp,\n lastIdleCodeChangeTimestamp,\n } = reLoginResponse.data;\n let {auxCodeId} = reLoginResponse.data;\n this.agentConfig.lastStateChangeTimestamp = lastStateChangeTimestamp;\n this.agentConfig.lastIdleCodeChangeTimestamp = lastIdleCodeChangeTimestamp;\n this.agentConfig.currentTeamId = reLoginResponse.data.teamId;\n await this.handleDeviceType(deviceType as LoginOption, dn);\n\n if (lastStateChangeReason === 'agent-wss-disconnect') {\n LoggerProxy.info(\n 'event=requestAutoStateChange | Requesting state change to available on socket reconnect',\n {module: CC_FILE, method: METHODS.SILENT_RELOGIN}\n );\n auxCodeId = AGENT_STATE_AVAILABLE_ID;\n const stateChangeData: StateChange = {\n state: AGENT_STATE_AVAILABLE,\n auxCodeId,\n lastStateChangeReason,\n agentId,\n };\n try {\n const agentStatusResponse = (await this.setAgentState(\n stateChangeData\n )) as StateChangeSuccess;\n this.agentConfig.lastStateChangeTimestamp =\n agentStatusResponse.data.lastStateChangeTimestamp;\n\n this.agentConfig.lastIdleCodeChangeTimestamp =\n agentStatusResponse.data.lastIdleCodeChangeTimestamp;\n } catch (error) {\n LoggerProxy.error(\n `event=requestAutoStateChange | Error requesting state change to available on socket reconnect: ${error}`,\n {module: CC_FILE, method: METHODS.SILENT_RELOGIN}\n );\n }\n }\n this.agentConfig.lastStateAuxCodeId = auxCodeId;\n this.agentConfig.isAgentLoggedIn = true;\n // TODO: https://jira-eng-gpk2.cisco.com/jira/browse/SPARK-626777 Implement the de-register method and close the listener there\n this.services.webSocketManager.on('message', this.handleWebsocketMessage);\n\n LoggerProxy.log(\n `Silent relogin process completed successfully with login Option: ${reLoginResponse.data.deviceType} teamId: ${reLoginResponse.data.teamId}`,\n {\n module: CC_FILE,\n method: METHODS.SILENT_RELOGIN,\n trackingId: reLoginResponse.trackingId,\n }\n );\n } catch (error) {\n const {reason, error: detailedError} = getErrorDetails(\n error,\n METHODS.SILENT_RELOGIN,\n CC_FILE\n );\n if (reason === 'AGENT_NOT_FOUND') {\n LoggerProxy.log('Agent not found during relogin, handling silently', {\n module: CC_FILE,\n method: METHODS.SILENT_RELOGIN,\n });\n\n return;\n }\n throw detailedError;\n }\n }\n\n /**\n * Handles device type specific configuration and setup\n * Configures services and settings based on the login device type\n * @param {LoginOption} deviceType The type of device being used for login\n * @param {string} dn The dial number associated with the device\n * @returns {Promise<void>}\n * @private\n */\n private async handleDeviceType(deviceType: LoginOption, dn: string): Promise<void> {\n this.webCallingService.setLoginOption(deviceType);\n this.agentConfig.deviceType = deviceType;\n switch (deviceType) {\n case LoginOption.BROWSER:\n try {\n await this.webCallingService.registerWebCallingLine();\n } catch (error) {\n LoggerProxy.error(`Error registering web calling line: ${error}`, {\n module: CC_FILE,\n method: METHODS.HANDLE_DEVICE_TYPE,\n });\n throw error;\n }\n break;\n case LoginOption.AGENT_DN:\n case LoginOption.EXTENSION:\n this.agentConfig.defaultDn = dn;\n this.agentConfig.dn = dn;\n break;\n default:\n LoggerProxy.error(`Unsupported device type: ${deviceType}`, {\n module: CC_FILE,\n method: METHODS.HANDLE_DEVICE_TYPE,\n });\n throw new Error(`Unsupported device type: ${deviceType}`);\n }\n }\n\n /**\n * Makes an outbound call to a specified phone number.\n *\n * @param {string} destination - The phone number to dial (e.g., '+1234567890').\n * @param {string} origin - The contact center number that will be used while making a call to the customer.\n * Should include country code and be in E.164 format.\n * @returns {Promise<TaskResponse>} Resolves with the task response containing:\n * - interactionId: Unique identifier for the outbound call\n * - taskId: Identifier for the task instance\n * - data: Task details including state, queue info, and media properties\n * @throws {Error} If the outdial operation fails:\n * - \"Agent not configured for outbound calls\" if isOutboundEnabledForAgent is false\n * - \"Invalid phone number format\" if destination is not in E.164 format\n * - \"Agent not in Available state\" if agent's state is not Available\n * @public\n * @example\n * ```typescript\n * // Initialize and prepare agent\n * const cc = webex.cc;\n * await cc.register();\n * await cc.stationLogin({\n * teamId: 'team123',\n * loginOption: 'BROWSER'\n * });\n *\n * // Set Available state before outbound call\n * await cc.setAgentState({\n * state: 'Available',\n * auxCodeId: '0'\n * });\n *\n * // Make outbound call with full error handling\n * try {\n * // Verify agent is properly configured for outdial\n * if (!cc.agentConfig.isOutboundEnabledForAgent) {\n * throw new Error('Agent not configured for outbound calls');\n * }\n *\n * // Start the outbound call\n * const destination = '+1234567890';\n * const task = await cc.startOutdial(destination, origin);\n *\n * // Listen for all relevant task events\n * task.on('task:ringing', () => {\n * console.log('Call is ringing');\n * updateCallStatus('Ringing...');\n * });\n *\n * task.on('task:established', () => {\n * console.log('Call connected');\n * updateCallStatus('Connected');\n * enableCallControls(); // Show mute, hold, transfer buttons\n * });\n *\n * task.on('task:hold', () => {\n * console.log('Call placed on hold');\n * updateCallStatus('On Hold');\n * });\n *\n * task.on('task:error', (error) => {\n * console.error('Call error:', error);\n * updateCallStatus('Error');\n * showErrorDialog(error.message);\n * });\n *\n * task.on('task:ended', () => {\n * console.log('Call ended');\n * updateCallStatus('Call Ended');\n * resetCallControls();\n *\n * // Handle wrap-up if required\n * if (task.data.wrapUpRequired) {\n * showWrapupForm();\n * }\n * });\n *\n * // Example call control usage\n * function handleMuteToggle() {\n * await task.toggleMute();\n * }\n *\n * function handleHoldToggle() {\n * if (task.data.isOnHold) {\n * await task.resume();\n * } else {\n * await task.hold();\n * }\n * }\n *\n * async function handleTransfer() {\n * // Get available queues for transfer\n * const queues = await cc.getQueues();\n *\n * // Transfer to first available queue\n * if (queues.length > 0) {\n * await task.transfer({\n * to: queues[0].queueId,\n * destinationType: 'QUEUE'\n * });\n * }\n * }\n *\n * } catch (error) {\n * console.error('Outdial failed:', error);\n * showErrorNotification('Failed to place call: ' + error.message);\n * }\n * ```\n */\n public async startOutdial(destination: string, origin: string): Promise<TaskResponse> {\n LoggerProxy.info('Starting outbound dial', {\n module: CC_FILE,\n method: METHODS.START_OUTDIAL,\n });\n try {\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_OUTDIAL_SUCCESS,\n METRIC_EVENT_NAMES.TASK_OUTDIAL_FAILED,\n ]);\n\n // Construct the outdial payload.\n const outDialPayload: DialerPayload = {\n destination,\n origin,\n entryPointId: this.agentConfig.outDialEp,\n direction: OUTDIAL_DIRECTION,\n attributes: ATTRIBUTES,\n mediaType: OUTDIAL_MEDIA_TYPE,\n outboundType: OUTBOUND_TYPE,\n };\n\n const result = await this.services.dialer.startOutdial({data: outDialPayload});\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_OUTDIAL_SUCCESS,\n {\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(result),\n destination,\n origin,\n mediaType: OUTDIAL_MEDIA_TYPE,\n },\n ['behavioral', 'business', 'operational']\n );\n\n LoggerProxy.log(`Outbound dial completed successfully`, {\n module: CC_FILE,\n method: METHODS.START_OUTDIAL,\n trackingId: result.trackingId,\n interactionId: result.data?.interactionId,\n });\n\n return result;\n } catch (error) {\n const failure = error.details as Failure;\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_OUTDIAL_FAILED,\n {\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(failure),\n destination,\n origin,\n mediaType: OUTDIAL_MEDIA_TYPE,\n },\n ['behavioral', 'business', 'operational']\n );\n const {error: detailedError} = getErrorDetails(error, METHODS.START_OUTDIAL, CC_FILE);\n throw detailedError;\n }\n }\n\n /**\n * Fetches outdial ANI (Automatic Number Identification) entries for an outdial ANI ID.\n *\n * This method retrieves the list of phone numbers that can be used as caller ID when making\n * outbound calls. The ANI data is associated with an outdial ANI ID and can be filtered\n * and paginated as needed.\n *\n * @param {string} outdialANI - The outdial ANI ID to fetch ANI data for\n * @param {number} [page] - Optional page number for pagination (0-based)\n * @param {number} [pageSize] - Optional number of items per page\n * @param {string} [search] - Optional search term to filter results by name or number\n * @param {string} [filter] - Optional filter string\n * @param {string} [attributes] - Optional attributes to include in response\n * @returns {Promise<OutdialAniEntriesResponse>} Promise resolving to outdial ANI response containing:\n * - data: Array of ANI entries with number and name\n * - meta: Pagination metadata\n * @throws {Error} If the operation fails or agent is not registered\n * @public\n * @example\n * ```typescript\n * const cc = webex.cc;\n * await cc.register();\n *\n * // Get agent profile to obtain outdial ANI ID\n * const agentProfile = cc.agentConfig;\n * const outdialANI = agentProfile.outdialANIId;\n *\n * // Basic usage - get all ANI data for an outdial ANI ID\n * const aniData = await cc.getOutdialAniEntries({ outdialANI });\n *\n * // With pagination and search\n * const paginatedAni = await cc.getOutdialAniEntries({\n * outdialANI,\n * page: 0,\n * pageSize: 50,\n * search: '555' // search for numbers containing '555'\n * });\n *\n * // Process the results\n * paginatedAni.forEach(ani => {\n * console.log(`ANI: ${ani.number} - ${ani.name}`);\n * });\n * ```\n */\n public async getOutdialAniEntries(params: OutdialAniParams): Promise<OutdialAniEntriesResponse> {\n const {outdialANI, page, pageSize, search, filter, attributes} = params;\n\n LoggerProxy.info('Fetching outdial ANI entries', {\n module: CC_FILE,\n method: METHODS.GET_OUTDIAL_ANI_ENTRIES,\n });\n\n const orgId = this.$webex.credentials.getOrgId();\n\n if (!orgId) {\n LoggerProxy.error('Org ID not found.', {\n module: CC_FILE,\n method: METHODS.GET_OUTDIAL_ANI_ENTRIES,\n });\n\n throw new Error('Org ID not found.');\n }\n\n try {\n const result = await this.services.config.getOutdialAniEntries(orgId, {\n outdialANI,\n page,\n pageSize,\n search,\n filter,\n attributes,\n });\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.OUTDIAL_ANI_EP_FETCH_SUCCESS,\n {\n outdialANI,\n resultCount: result?.length || 0,\n },\n ['behavioral', 'business', 'operational']\n );\n\n LoggerProxy.log(`Successfully retrieved outdial ANI entries for ANI ID ${outdialANI}`, {\n module: CC_FILE,\n method: METHODS.GET_OUTDIAL_ANI_ENTRIES,\n });\n\n return result;\n } catch (error) {\n const failure = error.details as Failure;\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.OUTDIAL_ANI_EP_FETCH_FAILED,\n {\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(failure),\n outdialANI,\n error,\n },\n ['behavioral', 'business', 'operational']\n );\n\n LoggerProxy.error(\n `Failed to fetch outdial ANI entries for ANI ID ${outdialANI} due to: ${error}`,\n {\n module: CC_FILE,\n method: METHODS.GET_OUTDIAL_ANI_ENTRIES,\n trackingId: failure.trackingId,\n }\n );\n\n const {error: detailedError} = getErrorDetails(\n error,\n METHODS.GET_OUTDIAL_ANI_ENTRIES,\n CC_FILE\n );\n throw detailedError;\n }\n }\n\n /**\n * Uploads logs to help troubleshoot SDK issues.\n *\n * This method collects the current SDK logs including network requests, WebSocket\n * messages, and client-side events, then securely submits them to Webex's diagnostics\n * service. The returned tracking ID, feedbackID can be provided to Webex support for faster\n * issue resolution.\n * @returns Promise<UploadLogsResponse> Resolves with the upload logs response\n * @throws Error If the upload fails\n * @public\n * @example\n * ```typescript\n * const cc = webex.cc;\n * try {\n * await cc.register();\n * } catch (error) {\n * console.error('Error:', error);\n * const result = await cc.uploadLogs();\n * console.log('Logs uploaded. Tracking ID:', result.trackingId);\n * }\n * ```\n */\n public async uploadLogs(): Promise<UploadLogsResponse> {\n return this.webexRequest.uploadLogs();\n }\n\n /**\n * Updates the agent device type and login configuration.\n * Use this method to change how an agent connects to the contact center system (e.g., switching from browser-based calling to a desk phone extension).\n *\n * @param {AgentDeviceUpdate} data Configuration containing:\n * - loginOption: New device type ('BROWSER', 'EXTENSION', 'AGENT_DN')\n * - dialNumber: Required phone number when using EXTENSION or AGENT_DN\n * - teamId: Optional team ID (defaults to current team if not specified)\n * @returns Promise<UpdateDeviceTypeResponse> Resolves with the device type update response\n * @throws Error If the update fails\n * @example\n * ```typescript\n * const cc = webex.cc;\n *\n * // Switch from browser to extension\n * try {\n * await cc.updateAgentProfile({\n * loginOption: 'EXTENSION',\n * dialNumber: '1234', // Required for EXTENSION\n * teamId: 'currentTeam' // Optional: uses current team if not specified\n * });\n * } catch (error) {\n * console.error('Failed to update device:', error.message);\n * }\n * ```\n * @public\n */\n public async updateAgentProfile(data: AgentProfileUpdate): Promise<UpdateDeviceTypeResponse> {\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.AGENT_DEVICE_TYPE_UPDATE_SUCCESS,\n METRIC_EVENT_NAMES.AGENT_DEVICE_TYPE_UPDATE_FAILED,\n ]);\n\n const trackingId = `WX_CC_SDK_${uuidv4()}`;\n\n LoggerProxy.info(`starting profile update`, {\n module: CC_FILE,\n method: METHODS.UPDATE_AGENT_PROFILE,\n trackingId,\n });\n\n try {\n // Only block if both loginOption AND teamId remain unchanged\n if (\n this.webCallingService?.loginOption === data.loginOption &&\n data.teamId === this.agentConfig.currentTeamId\n ) {\n const message =\n 'Will not proceed with device update as new Device type is same as current device type and teamId is same as current teamId';\n const err = new Error(message) as GenericError;\n err.details = {\n type: 'Identical Device Change Failure',\n orgId: this.$webex.credentials.getOrgId(),\n trackingId,\n data: {\n agentId: this.agentConfig.agentId,\n reasonCode: 'R002',\n reason: message,\n },\n };\n throw err;\n }\n\n await this.stationLogout({\n logoutReason: 'User requested agent device change',\n });\n\n const loginPayload: AgentLogin = {\n teamId: data.teamId,\n loginOption: data.loginOption,\n dialNumber: data.dialNumber,\n };\n\n const resp = await this.stationLogin(loginPayload);\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.AGENT_DEVICE_TYPE_UPDATE_SUCCESS,\n {\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(resp),\n loginType: data.loginOption,\n },\n ['behavioral', 'business', 'operational']\n );\n\n LoggerProxy.log(\n `profile updated successfully with ${loginPayload.loginOption} teamId: ${loginPayload.teamId}`,\n {\n module: CC_FILE,\n method: METHODS.UPDATE_AGENT_PROFILE,\n trackingId,\n }\n );\n\n const deviceTypeUpdateResponse: UpdateDeviceTypeResponse = {\n ...resp,\n type: 'AgentDeviceTypeUpdateSuccess',\n };\n\n return deviceTypeUpdateResponse;\n } catch (error) {\n const failure = (error as GenericError).details as Failure;\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.AGENT_DEVICE_TYPE_UPDATE_FAILED,\n {\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(failure),\n loginType: data.loginOption,\n },\n ['behavioral', 'business', 'operational']\n );\n\n LoggerProxy.error(`error updating profile: ${error}`, {\n module: CC_FILE,\n method: METHODS.UPDATE_AGENT_PROFILE,\n trackingId,\n });\n throw error;\n }\n }\n\n /**\n * Returns paginated entry points for the organization.\n * Thin wrapper around internal EntryPoint instance.\n * @public\n */\n public async getEntryPoints(\n params: EntryPointSearchParams = {}\n ): Promise<EntryPointListResponse> {\n return this.entryPoint.getEntryPoints(params);\n }\n\n /**\n * Returns paginated contact service queues for the organization.\n * Thin wrapper around internal Queue instance.\n * @public\n */\n public async getQueues(\n params: ContactServiceQueueSearchParams = {}\n ): Promise<ContactServiceQueuesResponse> {\n return this.queue.getQueues(params);\n }\n}\n"],"mappings":";;;;;;AAQA,IAAAA,UAAA,GAAAC,OAAA;AACA,IAAAC,OAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,KAAA,GAAAH,OAAA;AACA,IAAAI,MAAA,GAAAJ,OAAA;AAiBA,IAAAK,UAAA,GAAAL,OAAA;AAYA,IAAAM,WAAA,GAAAN,OAAA;AACA,IAAAO,WAAA,GAAAP,OAAA;AACA,IAAAQ,SAAA,GAAAN,sBAAA,CAAAF,OAAA;AACA,IAAAS,aAAA,GAAAP,sBAAA,CAAAF,OAAA;AACA,IAAAU,YAAA,GAAAR,sBAAA,CAAAF,OAAA;AACA,IAAAW,OAAA,GAAAX,OAAA;AACA,IAAAY,MAAA,GAAAZ,OAAA;AACA,IAAAa,OAAA,GAAAb,OAAA;AAQA,IAAAc,YAAA,GAAAZ,sBAAA,CAAAF,OAAA;AACA,IAAAe,kBAAA,GAAAb,sBAAA,CAAAF,OAAA;AACA,IAAAgB,OAAA,GAAAhB,OAAA;AACA,IAAAiB,eAAA,GAAAf,sBAAA,CAAAF,OAAA;AACA,IAAAkB,WAAA,GAAAlB,OAAA;AAEA,IAAAmB,WAAA,GAAAjB,sBAAA,CAAAF,OAAA;AACA,IAAAoB,YAAA,GAAAlB,sBAAA,CAAAF,OAAA;AACA,IAAAqB,MAAA,GAAAnB,sBAAA,CAAAF,OAAA;AAAqC,SAAAE,uBAAAoB,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AA/DrC;AACA;AACA;AACA;AACA;AACA;AACA;;AAiEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,MAAMG,aAAa,SAASC,sBAAW,CAA2B;EAC/E;AACF;AACA;AACA;AACA;AACA;EACEC,SAAS,GAAG,IAAI;;EAEhB;AACF;AACA;AACA;AACA;;EAGE;AACF;AACA;AACA;AACA;AACA;;EAGE;AACF;AACA;AACA;AACA;AACA;;EAGE;AACF;AACA;AACA;AACA;AACA;;EAGE;AACF;AACA;AACA;AACA;AACA;;EAGE;AACF;AACA;AACA;AACA;AACA;;EAGE;AACF;AACA;AACA;AACA;AACA;;EAGE;AACF;AACA;AACA;AACA;AACA;;EAGE;AACF;AACA;AACA;AACA;AACA;;EAGE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;EAGE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;EAGE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;EAGE;AACF;AACA;AACA;AACA;AACA;EACSC,WAAW,GAAGA,oBAAW;;EAEhC;AACF;AACA;AACA;AACA;EACEC,WAAWA,CAAC,GAAGC,IAAI,EAAE;IACnB,KAAK,CAAC,GAAGA,IAAI,CAAC;IAEd,IAAI,CAACC,YAAY,GAAG,IAAIC,eAAY,CAAC,CAAC;IACtC;IACA,IAAI,CAACC,MAAM,GAAG,IAAI,CAACC,KAAK;IAExB,IAAI,CAACD,MAAM,CAACE,IAAI,CAACC,gBAAK,EAAE,MAAM;MAC5B;MACA,IAAI,CAACC,OAAO,GAAG,IAAI,CAACC,MAAM;;MAE1B;AACN;AACA;MACM,IAAI,CAACC,YAAY,GA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ACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAa8K,YAAYA,CAACC,WAAmB,EAAEC,MAAc,EAAyB;IACpFjP,oBAAW,CAACgD,IAAI,CAAC,wBAAwB,EAAE;MACzCC,MAAM,EAAEC,kBAAO;MACfC,MAAM,EAAEC,kBAAO,CAAC8L;IAClB,CAAC,CAAC;IACF,IAAI;MACF,IAAI,CAAC3N,cAAc,CAAC+B,SAAS,CAAC,CAC5BC,8BAAkB,CAAC4L,oBAAoB,EACvC5L,8BAAkB,CAAC6L,mBAAmB,CACvC,CAAC;;MAEF;MACA,MAAMC,cAA6B,GAAG;QACpCL,WAAW;QACXC,MAAM;QACNK,YAAY,EAAE,IAAI,CAACpN,WAAW,CAACqN,SAAS;QACxCC,SAAS,EAAEC,4BAAiB;QAC5BC,UAAU,EAAEC,qBAAU;QACtBhJ,SAAS,EAAEiJ,6BAAkB;QAC7BC,YAAY,EAAEC;MAChB,CAAC;MAED,MAAMC,MAAM,GAAG,MAAM,IAAI,CAACjP,QAAQ,CAACkP,MAAM,CAACjB,YAAY,CAAC;QAAC5I,IAAI,EAAEkJ;MAAc,CAAC,CAAC;MAE9E,IAAI,CAAC9N,cAAc,CAACwC,UAAU,CAC5BR,8BAAkB,CAAC4L,oBAAoB,EACvC;QACE,GAAG3N,u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"}
1
+ {"version":3,"names":["_webexCore","require","_events","_interopRequireDefault","_uuid","_types","_constants","_constants2","_constants3","_services","_WebexRequest","_loggerProxy","_types2","_Utils","_types3","_TaskManager","_WebCallingService","_types4","_MetricsManager","_constants4","_EntryPoint","_AddressBook","_Queue","e","__esModule","default","ContactCenter","WebexPlugin","namespace","LoggerProxy","constructor","args","eventEmitter","EventEmitter","$webex","webex","once","READY","$config","config","webexRequest","WebexRequest","getInstance","services","Services","connectionConfig","getConnectionConfig","webSocketManager","on","handleWebsocketMessage","webCallingService","WebCallingService","metricsManager","MetricsManager","taskManager","TaskManager","getTaskManager","contact","incomingTaskListener","entryPoint","EntryPoint","addressBook","AddressBook","agentConfig","addressBookId","queue","Queue","initialize","logger","handleIncomingTask","task","trigger","TASK_EVENTS","TASK_INCOMING","handleTaskHydrate","TASK_HYDRATE","handleTaskMerged","TASK_MERGED","register","info","module","CC_FILE","method","METHODS","REGISTER","timeEvent","METRIC_EVENT_NAMES","WEBSOCKET_REGISTER_SUCCESS","WEBSOCKET_REGISTER_FAILED","setupEventListeners","resp","connectWebsocket","dn","defaultDn","trackEvent","getCommonTrackingFieldForAQMResponse","deviceType","EMPTY_STRING","log","agentId","error","orgId","uploadLogs","correlationId","trackingId","deregister","WEBSOCKET_DEREGISTER_SUCCESS","WEBSOCKET_DEREGISTER_FAIL","off","unregisterIncomingCallEvent","connectionService","handleConnectionLost","webRtcEnabled","loginVoiceOptions","includes","LoginOption","BROWSER","internal","mercury","connected","disconnect","device","unregister","MERCURY_DISCONNECTED_SUCCESS","DEREGISTER","isSocketClosed","close","message","UNKNOWN_ERROR","getBuddyAgents","data","GET_BUDDY_AGENTS","FETCH_BUDDY_AGENTS_SUCCESS","FETCH_BUDDY_AGENTS_FAILED","agent","buddyAgents","agentProfileId","agentProfileID","mediaType","buddyAgentState","state","buddyAgentCount","agentList","length","failureResp","details","getCommonTrackingFieldForAQMResponseFailed","detailedError","getErrorDetails","CONNECT_WEBSOCKET","initWebSocket","body","then","credentials","getOrgId","getAgentConfig","setWrapupData","wrapUpData","setAgentId","setWebRtcEnabled","connect","catch","allowAutomatedRelogin","silentRelogin","stationLogin","STATION_LOGIN","STATION_LOGIN_SUCCESS","STATION_LOGIN_FAILED","loginOption","AGENT_DN","isValidDialNumber","dialNumber","Error","reason","loginResponse","teamId","isExtension","EXTENSION","deviceId","getDeviceId","roles","AGENT","teamName","siteId","usesOtherDN","auxCodeId","registerWebCallingLine","channelsMap","loginData","currentTeamId","response","mmProfile","chat","email","social","telephony","notifsTrackingId","setLoginOption","loginType","status","type","join","failure","stationLogout","STATION_LOGOUT","STATION_LOGOUT_SUCCESS","STATION_LOGOUT_FAILED","logoutResponse","logout","logoutReason","deregisterWebCallingLine","WEB_RTC_PREFIX","setAgentState","SET_AGENT_STATE","AGENT_STATE_CHANGE_SUCCESS","AGENT_STATE_CHANGE_FAILED","agentStatusResponse","stateChange","requestedState","teams","subStatus","lastStateChangeReason","event","eventData","JSON","parse","keepalive","emit","HANDLE_WEBSOCKET_MESSAGE","topLevelType","nestedType","CC_EVENTS","WELCOME","metricsPayload","ws_event_type","top_level_type","has_data","Boolean","WEBSOCKET_EVENT_RECEIVED","AGENT_MULTI_LOGIN","AGENT_EVENTS","AGENT_STATE_CHANGE","AGENT_STATION_LOGIN_SUCCESS","stationLoginData","AGENT_RELOGIN_SUCCESS","stationReLoginData","AGENT_STATION_LOGIN_FAILED","AGENT_LOGOUT_SUCCESS","AGENT_LOGOUT_FAILED","AGENT_DN_REGISTERED","bind","force","isKeepAliveEnabled","clientType","allowMultiLogin","msg","isConnectionLost","HANDLE_CONNECTION_LOST","isSocketReconnected","SILENT_RELOGIN","reLoginResponse","reload","lastStateChangeTimestamp","lastIdleCodeChangeTimestamp","handleDeviceType","AGENT_STATE_AVAILABLE_ID","stateChangeData","AGENT_STATE_AVAILABLE","lastStateAuxCodeId","isAgentLoggedIn","HANDLE_DEVICE_TYPE","startOutdial","destination","origin","START_OUTDIAL","TASK_OUTDIAL_SUCCESS","TASK_OUTDIAL_FAILED","outDialPayload","entryPointId","outDialEp","direction","OUTDIAL_DIRECTION","attributes","ATTRIBUTES","OUTDIAL_MEDIA_TYPE","outboundType","OUTBOUND_TYPE","result","dialer","interactionId","getOutdialAniEntries","params","outdialANI","page","pageSize","search","filter","GET_OUTDIAL_ANI_ENTRIES","OUTDIAL_ANI_EP_FETCH_SUCCESS","resultCount","OUTDIAL_ANI_EP_FETCH_FAILED","updateAgentProfile","AGENT_DEVICE_TYPE_UPDATE_SUCCESS","AGENT_DEVICE_TYPE_UPDATE_FAILED","uuidv4","UPDATE_AGENT_PROFILE","err","reasonCode","loginPayload","deviceTypeUpdateResponse","getEntryPoints","getQueues","exports"],"sources":["cc.ts"],"sourcesContent":["/**\n * @module CCPlugin\n * @packageDocumentation\n * Contact Center Plugin module that provides functionality for managing contact center agents,\n * handling tasks, and interacting with contact center services. This module enables integration\n * with Webex Contact Center features through the WebexSDK.\n */\n\nimport {WebexPlugin} from '@webex/webex-core';\nimport EventEmitter from 'events';\nimport {v4 as uuidv4} from 'uuid';\nimport {\n SetStateResponse,\n CCPluginConfig,\n IContactCenter,\n WebexSDK,\n LoginOption,\n AgentLogin,\n AgentProfileUpdate,\n StationLoginResponse,\n StationLogoutResponse,\n BuddyAgentsResponse,\n BuddyAgents,\n SubscribeRequest,\n UploadLogsResponse,\n UpdateDeviceTypeResponse,\n GenericError,\n} from './types';\nimport {\n READY,\n CC_FILE,\n EMPTY_STRING,\n OUTDIAL_DIRECTION,\n ATTRIBUTES,\n OUTDIAL_MEDIA_TYPE,\n OUTBOUND_TYPE,\n UNKNOWN_ERROR,\n MERCURY_DISCONNECTED_SUCCESS,\n METHODS,\n} from './constants';\nimport {AGENT_STATE_AVAILABLE, AGENT_STATE_AVAILABLE_ID} from './services/config/constants';\nimport {AGENT, WEB_RTC_PREFIX} from './services/constants';\nimport Services from './services';\nimport WebexRequest from './services/core/WebexRequest';\nimport LoggerProxy from './logger-proxy';\nimport {StateChange, Logout, StateChangeSuccess, AGENT_EVENTS} from './services/agent/types';\nimport {getErrorDetails, isValidDialNumber} from './services/core/Utils';\nimport {\n Profile,\n WelcomeEvent,\n CC_EVENTS,\n OutdialAniEntriesResponse,\n OutdialAniParams,\n} from './services/config/types';\nimport {ConnectionLostDetails} from './services/core/websocket/types';\nimport TaskManager from './services/task/TaskManager';\nimport WebCallingService from './services/WebCallingService';\nimport {ITask, TASK_EVENTS, TaskResponse, DialerPayload} from './services/task/types';\nimport MetricsManager from './metrics/MetricsManager';\nimport {METRIC_EVENT_NAMES} from './metrics/constants';\nimport {Failure} from './services/core/GlobalTypes';\nimport EntryPoint from './services/EntryPoint';\nimport AddressBook from './services/AddressBook';\nimport Queue from './services/Queue';\nimport type {\n EntryPointListResponse,\n EntryPointSearchParams,\n ContactServiceQueuesResponse,\n ContactServiceQueueSearchParams,\n} from './types';\n\n/**\n * The main Contact Center plugin class that enables integration with Webex Contact Center.\n *\n * @class ContactCenter\n * @extends WebexPlugin\n * @implements IContactCenter\n * @description\n * Features:\n *\n * 1. Session Management:\n * - {@link register} - Initialize and register SDK with contact center\n * - {@link deregister} - Cleanup and disconnect SDK resources\n *\n * 2. Agent Login/Logout:\n * - {@link stationLogin} - Login with browser or desk phone\n * - {@link stationLogout} - Logout from current station\n * - {@link updateAgentProfile} - Update device type and settings\n *\n * 3. Agent State Control:\n * - {@link setAgentState} - Change agent state (Available/Idle)\n *\n * 4. Task Management:\n * - Inbound task handling via events\n * - {@link startOutdial} - Make outbound calls\n *\n * 5. Routing & Distribution:\n * - {@link getQueues} - Get available queues for routing\n * - {@link getBuddyAgents} - Get available buddy agents\n *\n * 6. Diagnostics:\n * - {@link uploadLogs} - Upload logs for troubleshooting\n *\n * * Key Events:\n * - Agent State Events:\n * - `agent:stateChange` - Agent's state has changed (Available, Idle, etc.)\n * - `agent:stateChangeSuccess` - Agent state change was successful\n * - `agent:stateChangeFailed` - Agent state change failed\n *\n * - Session Events:\n * - `agent:stationLoginSuccess` - Agent login was successful\n * - `agent:stationLoginFailed` - Agent login failed\n * - `agent:logoutSuccess` - Agent logout was successful\n * - `agent:logoutFailed` - Agent logout failed\n *\n * - Task Events:\n * - `task:incoming` - New task is being offered\n * - `task:hydrate` - Task data has been updated\n * - `task:established` - Task/call has been connected\n * - `task:ended` - Task/call has ended\n * - `task:error` - An error occurred during task handling\n *\n * @public\n *\n * @example\n * ```typescript\n * import Webex from 'webex';\n *\n * // Initialize SDK with access token\n * const webex = new Webex({\n * credentials: 'YOUR_ACCESS_TOKEN'\n * });\n *\n * // Get Contact Center plugin instance\n * const cc = webex.cc;\n *\n * // Setup event handlers\n * cc.on('agent:stateChange', (event) => {\n * console.log('Agent state changed:', event.state);\n * });\n *\n * cc.on('task:incoming', (task) => {\n * console.log('New task received:', task.interactionId);\n * });\n *\n * // Initialize agent session\n * async function initializeAgent() {\n * try {\n * // Register with contact center\n * const profile = await cc.register();\n *\n * // Login with browser-based calling\n * await cc.stationLogin({\n * teamId: profile.teams[0].teamId,\n * loginOption: 'BROWSER'\n * });\n *\n * // Set agent to Available state\n * await cc.setAgentState({\n * state: 'Available',\n * auxCodeId: '0'\n * });\n *\n * console.log('Agent initialized and ready');\n * } catch (error) {\n * console.error('Initialization failed:', error);\n * await cc.uploadLogs(); // Upload logs for troubleshooting\n * }\n * }\n *\n * initializeAgent();\n * ```\n *\n * @public\n */\n\nexport default class ContactCenter extends WebexPlugin implements IContactCenter {\n /**\n * The plugin's unique namespace identifier in the Webex SDK.\n * Used to access the plugin via webex.cc\n * @type {string}\n * @public\n */\n namespace = 'cc';\n\n /**\n * Plugin configuration settings including connection and authentication options\n * @type {CCPluginConfig}\n * @private\n */\n private $config: CCPluginConfig;\n\n /**\n * Reference to the parent Webex SDK instance\n * Used to access core Webex functionality and credentials\n * @type {WebexSDK}\n * @private\n */\n private $webex: WebexSDK;\n\n /**\n * Event emitter for handling internal plugin events\n * Manages event subscriptions and notifications\n * @type {EventEmitter}\n * @private\n */\n private eventEmitter: EventEmitter;\n\n /**\n * Agent's profile and configuration data\n * Includes capabilities, teams, settings, and current state\n * @type {Profile}\n * @private\n */\n private agentConfig: Profile;\n\n /**\n * Service for managing browser-based calling (WebRTC)\n * Handles audio/video streaming and device management\n * @type {WebCallingService}\n * @private\n */\n private webCallingService: WebCallingService;\n\n /**\n * Core service managers for Contact Center operations\n * Includes agent, connection, and configuration services\n * @type {Services}\n * @private\n */\n private services: Services;\n\n /**\n * Service for making authenticated HTTP requests to Webex APIs\n * Handles request/response lifecycle and error handling\n * @type {WebexRequest}\n * @private\n */\n private webexRequest: WebexRequest;\n\n /**\n * Manager for handling contact center tasks (calls, chats, etc.)\n * Coordinates task lifecycle events and state\n * @type {TaskManager}\n * @private\n */\n private taskManager: TaskManager;\n\n /**\n * Manager for tracking and reporting SDK metrics and analytics\n * Monitors performance, errors, and usage patterns\n * @type {MetricsManager}\n * @private\n */\n private metricsManager: MetricsManager;\n\n /**\n * API instance for managing Webex Contact Center entry points\n * Provides functionality to fetch entry points with caching support\n * @type {EntryPoint}\n * @public\n * @example\n * ```typescript\n * const cc = webex.cc;\n * await cc.register();\n * await cc.stationLogin({ teamId: 'team123', loginOption: 'BROWSER' });\n *\n * // Access EntryPointRecord\n * const response = await cc.entryPoint.getEntryPoints({\n * page: 0,\n * pageSize: 50\n * });\n * ```\n */\n private entryPoint: EntryPoint;\n\n /**\n * API instance for managing Webex Contact Center address book contacts\n * Provides functionality to fetch address book entries with caching support\n * @type {AddressBook}\n * @public\n * @example\n * ```typescript\n * const cc = webex.cc;\n * await cc.register();\n * await cc.stationLogin({ teamId: 'team123', loginOption: 'BROWSER' });\n *\n * // Access AddressBook API\n * const response = await cc.addressBook.getEntries({\n * page: 0,\n * pageSize: 25\n * });\n * ```\n */\n public addressBook: AddressBook;\n\n /**\n * API instance for managing Webex Contact Center queues\n * Provides functionality to fetch queues with caching support\n * @type {Queue}\n * @public\n * @example\n * ```typescript\n * const cc = webex.cc;\n * await cc.register();\n * await cc.stationLogin({ teamId: 'team123', loginOption: 'BROWSER' });\n *\n * // Access Queue API\n * const response = await cc.queue.getQueues({\n * page: 0,\n * pageSize: 50\n * });\n *\n * // Filter queues by specific criteria\n * const filteredQueues = await cc.queue.getQueues({\n * filter: 'id==\"queue-id-123\"'\n * });\n * ```\n */\n private queue: Queue;\n\n /**\n * Logger utility for Contact Center plugin\n * Provides consistent logging across the plugin\n * @type {LoggerProxy}\n * @public\n */\n public LoggerProxy = LoggerProxy;\n\n /**\n * @ignore\n * Creates an instance of ContactCenter plugin\n * @param {any[]} args Arguments passed to plugin constructor\n */\n constructor(...args) {\n super(...args);\n\n this.eventEmitter = new EventEmitter();\n // @ts-ignore\n this.$webex = this.webex;\n\n this.$webex.once(READY, () => {\n // @ts-ignore\n this.$config = this.config;\n\n /**\n * This is used for handling the async requests by sending webex.request and wait for corresponding websocket event.\n */\n this.webexRequest = WebexRequest.getInstance({\n webex: this.$webex,\n });\n\n this.services = Services.getInstance({\n webex: this.$webex,\n connectionConfig: this.getConnectionConfig(),\n });\n this.services.webSocketManager.on('message', this.handleWebsocketMessage);\n\n this.webCallingService = new WebCallingService(this.$webex);\n this.metricsManager = MetricsManager.getInstance({webex: this.$webex});\n this.taskManager = TaskManager.getTaskManager(\n this.services.contact,\n this.webCallingService,\n this.services.webSocketManager\n );\n this.incomingTaskListener();\n\n // Initialize API instances\n // will have future function for indivdual fetch etc so better be in an object\n this.entryPoint = new EntryPoint(this.$webex);\n this.addressBook = new AddressBook(this.$webex, () => this.agentConfig?.addressBookId);\n this.queue = new Queue(this.$webex);\n\n // Initialize logger\n LoggerProxy.initialize(this.$webex.logger);\n });\n }\n\n /**\n * Handles incoming task events and triggers appropriate notifications\n * @private\n * @param {ITask} task The incoming task object containing task details\n */\n private handleIncomingTask = (task: ITask) => {\n // @ts-ignore\n this.trigger(TASK_EVENTS.TASK_INCOMING, task);\n };\n\n /**\n * Handles task hydration events for updating task data\n * @private\n * @param {ITask} task The task object to be hydrated with additional data\n */\n private handleTaskHydrate = (task: ITask) => {\n // @ts-ignore\n this.trigger(TASK_EVENTS.TASK_HYDRATE, task);\n };\n\n /**\n * Handles task merged events when tasks are combined eg: EPDN merge/transfer\n * @private\n * @param {ITask} task The task object that has been merged\n */\n private handleTaskMerged = (task: ITask) => {\n // @ts-ignore\n this.trigger(TASK_EVENTS.TASK_MERGED, task);\n };\n\n /**\n * Sets up event listeners for incoming tasks and task hydration\n * Subscribes to task events from the task manager\n * @private\n */\n private incomingTaskListener() {\n this.taskManager.on(TASK_EVENTS.TASK_INCOMING, this.handleIncomingTask);\n this.taskManager.on(TASK_EVENTS.TASK_HYDRATE, this.handleTaskHydrate);\n this.taskManager.on(TASK_EVENTS.TASK_MERGED, this.handleTaskMerged);\n }\n\n /**\n * Initializes the Contact Center SDK by setting up the web socket connections.\n * This method must be called before performing any agent operations such as login, state change, or handling tasks.\n *\n * @returns {Promise<Profile>} Agent profile information after successful registration.\n * The returned `Profile` object contains details such as:\n * - `agentId`: The unique identifier for the agent.\n * - `defaultDn`: The default dial number associated with the agent.\n * - `teams`: Array of teams the agent belongs to.\n * - `webRtcEnabled`: Indicates if WebRTC (browser calling) is enabled.\n * - `loginVoiceOptions`: Supported login options for the agent (e.g., BROWSER, EXTENSION).\n * - ...and other agent configuration details.\n *\n * @throws {Error} If registration fails.\n *\n * @public\n * @example\n * ```typescript\n * import Webex from 'webex';\n *\n * const webex = Webex.init({ credentials: 'YOUR_ACCESS_TOKEN' });\n * const cc = webex.cc;\n *\n * // Register the SDK and fetch agent profile\n * const profile = await cc.register();\n *\n * console.log('Agent ID:', profile.agentId);\n * console.log('Default DN:', profile.defaultDn);\n * console.log('Teams:', profile.teams.map(t => t.teamId));\n * console.log('WebRTC Enabled:', profile.webRtcEnabled);\n * console.log('Supported Login Options:', profile.loginVoiceOptions);\n *\n * // Now you can proceed with station login, state changes, etc.\n * await cc.stationLogin({ teamId: profile.teams[0].teamId, loginOption: 'BROWSER' });\n * ```\n */\n public async register(): Promise<Profile> {\n LoggerProxy.info('Starting CC SDK registration', {\n module: CC_FILE,\n method: METHODS.REGISTER,\n });\n try {\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.WEBSOCKET_REGISTER_SUCCESS,\n METRIC_EVENT_NAMES.WEBSOCKET_REGISTER_FAILED,\n ]);\n this.setupEventListeners();\n\n const resp = await this.connectWebsocket();\n // Ensure 'dn' is always populated from 'defaultDn'\n resp.dn = resp.defaultDn;\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.WEBSOCKET_REGISTER_SUCCESS,\n {\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(resp),\n deviceType: resp.deviceType || EMPTY_STRING,\n },\n ['operational']\n );\n\n LoggerProxy.log(`CC SDK registration completed successfully with agentId: ${resp.agentId}`, {\n module: CC_FILE,\n method: METHODS.REGISTER,\n });\n\n return resp;\n } catch (error) {\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.WEBSOCKET_REGISTER_FAILED,\n {\n orgId: error.orgId,\n },\n ['operational']\n );\n LoggerProxy.error(`Error during register: ${error}`, {\n module: CC_FILE,\n method: METHODS.REGISTER,\n });\n this.webexRequest.uploadLogs({\n correlationId: error?.trackingId,\n });\n\n throw error;\n }\n }\n\n /**\n * Unregisters the Contact Center SDK by closing all web socket connections, removing event listeners,\n * and cleaning up internal state.\n *\n * @remarks\n * This method only disconnects the SDK from the backend and cleans up resources. It does NOT perform a station logout\n * (i.e., the agent remains logged in to the contact center unless you explicitly call {@link stationLogout}).\n * Use this when you want to fully tear down the SDK instance, such as during application shutdown or user sign-out.\n *\n * @returns {Promise<void>} Resolves when deregistration and cleanup are complete.\n * @throws {Error} If deregistration fails.\n *\n * @public\n * @example\n * // Typical usage: clean up SDK before application exit or user logout\n * import Webex from 'webex';\n *\n * const webex = Webex.init({ credentials: 'YOUR_ACCESS_TOKEN' });\n * const cc = webex.cc;\n *\n * await cc.register();\n * await cc.stationLogin({ teamId: 'team123', loginOption: 'BROWSER' });\n * // ... perform agent operations ...\n *\n * // If you want to log out the agent as well, call:\n * // await cc.stationLogout({ logoutReason: 'User signed out' });\n * // On application shutdown or user sign-out:\n * await cc.deregister();\n *\n\n */\n public async deregister(): Promise<void> {\n try {\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.WEBSOCKET_DEREGISTER_SUCCESS,\n METRIC_EVENT_NAMES.WEBSOCKET_DEREGISTER_FAIL,\n ]);\n\n this.taskManager.off(TASK_EVENTS.TASK_INCOMING, this.handleIncomingTask);\n this.taskManager.off(TASK_EVENTS.TASK_HYDRATE, this.handleTaskHydrate);\n this.taskManager.unregisterIncomingCallEvent();\n\n this.services.webSocketManager.off('message', this.handleWebsocketMessage);\n this.services.connectionService.off('connectionLost', this.handleConnectionLost);\n\n if (\n this.agentConfig.webRtcEnabled &&\n this.agentConfig.loginVoiceOptions.includes(LoginOption.BROWSER)\n ) {\n if (this.$webex.internal.mercury.connected) {\n this.$webex.internal.mercury.off('online');\n this.$webex.internal.mercury.off('offline');\n await this.$webex.internal.mercury.disconnect();\n // @ts-ignore\n await this.$webex.internal.device.unregister();\n LoggerProxy.log(MERCURY_DISCONNECTED_SUCCESS, {\n module: CC_FILE,\n method: METHODS.DEREGISTER,\n });\n }\n }\n\n if (!this.services.webSocketManager.isSocketClosed) {\n this.services.webSocketManager.close(false, 'Unregistering the SDK');\n }\n\n // Clear any cached agent configuration\n this.agentConfig = null;\n\n LoggerProxy.log('Deregistered successfully', {\n module: CC_FILE,\n method: METHODS.DEREGISTER,\n });\n\n this.metricsManager.trackEvent(METRIC_EVENT_NAMES.WEBSOCKET_DEREGISTER_SUCCESS, {}, [\n 'operational',\n ]);\n } catch (error) {\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.WEBSOCKET_DEREGISTER_FAIL,\n {\n error: error.message || UNKNOWN_ERROR,\n },\n ['operational']\n );\n\n LoggerProxy.error(`Error during deregister: ${error}`, {\n module: CC_FILE,\n method: METHODS.DEREGISTER,\n });\n\n throw error;\n }\n }\n\n /**\n * Returns the list of buddy agents who are in the given user state and media type based on their agent profile settings\n * @param {BuddyAgents} data The data required to fetch buddy agents\n * @returns {Promise<BuddyAgentsResponse>} A promise resolving to the buddy agents information\n * @throws {Error} If fetching buddy agents fails\n * @example\n * ```typescript\n * // Get list of available agents for consultation or transfer\n * const cc = webex.cc;\n *\n * // First ensure you're registered and logged in\n * await cc.register();\n * await cc.stationLogin({ teamId: 'team123', loginOption: 'BROWSER' });\n *\n * // Get buddy agents filtered by state and media type\n * const response = await cc.getBuddyAgents({\n * state: 'Available', // Filter by agent state ('Available', 'Idle', etc.)\n * mediaType: 'telephony' // Filter by media type ('telephony', 'chat', 'email', 'social')\n * });\n *\n * // Process the buddy agents list\n * if (response.data.agentList.length > 0) {\n * const buddyAgents = response.data.agentList;\n * console.log(`Found ${buddyAgents.length} available agents`);\n *\n * // Access agent details\n * buddyAgents.forEach(agent => {\n * console.log(`Agent ID: ${agent.agentId}`);\n * console.log(`Name: ${agent.firstName} ${agent.lastName}`);\n * console.log(`State: ${agent.state}`);\n * console.log(`Team: ${agent.teamName}`);\n * });\n * }\n * ```\n */\n public async getBuddyAgents(data: BuddyAgents): Promise<BuddyAgentsResponse> {\n LoggerProxy.info('Fetching buddy agents', {\n module: CC_FILE,\n method: METHODS.GET_BUDDY_AGENTS,\n });\n try {\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.FETCH_BUDDY_AGENTS_SUCCESS,\n METRIC_EVENT_NAMES.FETCH_BUDDY_AGENTS_FAILED,\n ]);\n const resp = await this.services.agent.buddyAgents({\n data: {agentProfileId: this.agentConfig.agentProfileID, ...data},\n });\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.FETCH_BUDDY_AGENTS_SUCCESS,\n {\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(resp),\n mediaType: data.mediaType,\n buddyAgentState: data.state,\n buddyAgentCount: resp.data.agentList.length,\n },\n ['operational']\n );\n\n LoggerProxy.log(`Successfully retrieved ${resp.data.agentList.length} buddy agents`, {\n module: CC_FILE,\n method: METHODS.GET_BUDDY_AGENTS,\n trackingId: resp.trackingId,\n });\n\n return resp;\n } catch (error) {\n const failureResp = error.details as Failure;\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.FETCH_BUDDY_AGENTS_FAILED,\n {\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(failureResp),\n mediaType: data.mediaType,\n buddyAgentState: data.state,\n },\n ['operational']\n );\n const {error: detailedError} = getErrorDetails(error, METHODS.GET_BUDDY_AGENTS, CC_FILE);\n throw detailedError;\n }\n }\n\n /**\n * Connects to the websocket and fetches the agent profile\n * @returns {Promise<Profile>} Agent profile information\n * @throws {Error} If connection fails or profile cannot be fetched\n * @private\n */\n private async connectWebsocket() {\n LoggerProxy.info('Connecting to websocket', {\n module: CC_FILE,\n method: METHODS.CONNECT_WEBSOCKET,\n });\n try {\n return this.services.webSocketManager\n .initWebSocket({\n body: this.getConnectionConfig(),\n })\n .then(async (data: WelcomeEvent) => {\n const agentId = data.agentId;\n const orgId = this.$webex.credentials.getOrgId();\n this.agentConfig = await this.services.config.getAgentConfig(orgId, agentId);\n LoggerProxy.log(`Agent config is fetched successfully`, {\n module: CC_FILE,\n method: METHODS.CONNECT_WEBSOCKET,\n });\n // TODO: Make profile a singleton to make it available throughout app/sdk so we dont need to inject info everywhere\n this.taskManager.setWrapupData(this.agentConfig.wrapUpData);\n this.taskManager.setAgentId(this.agentConfig.agentId);\n this.taskManager.setWebRtcEnabled(this.agentConfig.webRtcEnabled);\n\n if (\n this.agentConfig.webRtcEnabled &&\n this.agentConfig.loginVoiceOptions.includes(LoginOption.BROWSER)\n ) {\n this.$webex.internal.mercury\n .connect()\n .then(() => {\n LoggerProxy.log('Authentication: webex.internal.mercury.connect successful', {\n module: CC_FILE,\n method: METHODS.CONNECT_WEBSOCKET,\n });\n })\n .catch((error) => {\n LoggerProxy.error(`Error occurred during mercury.connect() ${error}`, {\n module: CC_FILE,\n method: METHODS.CONNECT_WEBSOCKET,\n });\n });\n }\n if (this.$config && this.$config.allowAutomatedRelogin) {\n await this.silentRelogin();\n }\n\n return this.agentConfig;\n })\n .catch((error) => {\n throw error;\n });\n } catch (error) {\n LoggerProxy.error(`Error during register: ${error}`, {\n module: CC_FILE,\n method: METHODS.CONNECT_WEBSOCKET,\n });\n\n throw error;\n }\n }\n\n /**\n * Performs agent login with specified credentials and device type\n * @param {AgentLogin} data Login parameters including teamId, loginOption and dialNumber\n * @returns {Promise<StationLoginResponse>} Response containing login status and profile\n * @throws {Error} If login fails\n * @public\n * @example\n * ```typescript\n * const cc = webex.cc;\n * await cc.register();\n *\n * // Primary usage: using Promise response\n * try {\n * const response = await cc.stationLogin({\n * teamId: 'team123',\n * loginOption: 'EXTENSION',\n * dialNumber: '1002'\n * });\n * console.log('Login successful:', response);\n * } catch (error) {\n * console.error('Login failed:', error);\n * }\n *\n * // Optional: Also listen for events elsewhere in your application\n * // cc.on('agent:stationLoginSuccess', (data) => { ... });\n * // cc.on('agent:stationLoginFailed', (error) => { ... });\n * ```\n */\n public async stationLogin(data: AgentLogin): Promise<StationLoginResponse> {\n LoggerProxy.info('Starting agent station login', {\n module: CC_FILE,\n method: METHODS.STATION_LOGIN,\n });\n try {\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.STATION_LOGIN_SUCCESS,\n METRIC_EVENT_NAMES.STATION_LOGIN_FAILED,\n ]);\n\n if (data.loginOption === LoginOption.AGENT_DN && !isValidDialNumber(data.dialNumber)) {\n const error = new Error('INVALID_DIAL_NUMBER');\n // @ts-ignore - adding custom key to the error object\n error.details = {data: {reason: 'INVALID_DIAL_NUMBER'}} as Failure;\n\n throw error;\n }\n\n const loginResponse = await this.services.agent.stationLogin({\n data: {\n dialNumber:\n data.loginOption === LoginOption.BROWSER ? this.agentConfig.agentId : data.dialNumber,\n teamId: data.teamId,\n deviceType: data.loginOption,\n isExtension: data.loginOption === LoginOption.EXTENSION,\n deviceId: this.getDeviceId(data.loginOption, data.dialNumber),\n roles: [AGENT],\n teamName: EMPTY_STRING,\n siteId: EMPTY_STRING,\n usesOtherDN: false,\n auxCodeId: EMPTY_STRING,\n },\n });\n\n if (this.agentConfig.webRtcEnabled && data.loginOption === LoginOption.BROWSER) {\n await this.webCallingService.registerWebCallingLine();\n }\n\n const resp = await loginResponse;\n const {channelsMap, ...loginData} = resp.data;\n this.agentConfig.currentTeamId = resp.data.teamId;\n const response = {\n ...loginData,\n mmProfile: {\n chat: channelsMap.chat?.length,\n email: channelsMap.email?.length,\n social: channelsMap.social?.length,\n telephony: channelsMap.telephony?.length,\n },\n notifsTrackingId: resp.trackingId,\n };\n\n this.webCallingService.setLoginOption(data.loginOption);\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.STATION_LOGIN_SUCCESS,\n {\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(resp),\n loginType: data.loginOption,\n status: resp.data.status,\n type: resp.data.type,\n roles: resp.data.roles?.join(',') || EMPTY_STRING,\n },\n ['behavioral', 'business', 'operational']\n );\n\n LoggerProxy.log(\n `Agent station login completed successfully agentId: ${resp.data.agentId} loginOption: ${data.loginOption} teamId: ${data.teamId}`,\n {\n module: CC_FILE,\n method: METHODS.STATION_LOGIN,\n trackingId: resp.trackingId,\n }\n );\n\n return response;\n } catch (error) {\n const failure = error.details as Failure;\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.STATION_LOGIN_FAILED,\n {\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(failure),\n loginType: data.loginOption,\n },\n ['behavioral', 'business', 'operational']\n );\n error.loginOption = data.loginOption;\n const {error: detailedError} = getErrorDetails(error, METHODS.STATION_LOGIN, CC_FILE);\n\n throw detailedError;\n }\n }\n\n /**\n * Performs a station logout operation for the agent\n * @remarks\n * A logout operation cannot happen if the agent is in an interaction or haven't logged in yet.\n * @param {Logout} data Logout parameters with logoutReason - a string explaining why the agent is logging out\n * @returns {Promise<StationLogoutResponse>} Response indicating logout status\n * @throws {Error} If logout fails\n * @public\n * @example\n * ```typescript\n * // Basic logout\n * try {\n * await cc.stationLogout({\n * logoutReason: 'End of shift'\n * });\n * console.log('Logged out successfully');\n * } catch (error) {\n * console.error('Logout failed:', error);\n * }\n * ```\n */\n public async stationLogout(data: Logout): Promise<StationLogoutResponse> {\n LoggerProxy.info('Starting agent station logout', {\n module: CC_FILE,\n method: METHODS.STATION_LOGOUT,\n });\n try {\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.STATION_LOGOUT_SUCCESS,\n METRIC_EVENT_NAMES.STATION_LOGOUT_FAILED,\n ]);\n const logoutResponse = this.services.agent.logout({\n data,\n });\n\n const resp = await logoutResponse;\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.STATION_LOGOUT_SUCCESS,\n {\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(resp),\n logoutReason: data.logoutReason,\n },\n ['behavioral', 'business', 'operational']\n );\n\n if (this.webCallingService) {\n this.webCallingService.deregisterWebCallingLine();\n }\n\n LoggerProxy.log(`Agent station logout completed successfully`, {\n module: CC_FILE,\n method: METHODS.STATION_LOGOUT,\n trackingId: resp.trackingId,\n });\n\n return resp;\n } catch (error) {\n const failure = error.details as Failure;\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.STATION_LOGOUT_FAILED,\n {\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(failure),\n logoutReason: data.logoutReason,\n },\n ['behavioral', 'business', 'operational']\n );\n const {error: detailedError} = getErrorDetails(error, METHODS.STATION_LOGOUT, CC_FILE);\n throw detailedError;\n }\n }\n\n /**\n * Gets the device ID based on login option and dial number\n * @param {string} loginOption The login option (BROWSER, EXTENSION, etc)\n * @param {string} dialNumber The dial number if applicable\n * @returns {string} The device ID\n * @private\n */\n private getDeviceId(loginOption: string, dialNumber: string): string {\n if (loginOption === LoginOption.EXTENSION || loginOption === LoginOption.AGENT_DN) {\n return dialNumber;\n }\n\n return WEB_RTC_PREFIX + this.agentConfig.agentId;\n }\n\n /**\n * Sets the state of the agent to Available or any of the Idle states.\n * After a state change attempt, one of the following events will be emitted:\n * - agent:stateChange: Emitted when agent's state changes (triggered for both local and remote changes)\n * - agent:stateChangeSuccess: Emitted when agent state change is successful\n * - agent:stateChangeFailed: Emitted when agent state change attempt fails\n *\n * @param {StateChange} data State change parameters including the new state\n * @returns {Promise<SetStateResponse>} Response with updated state information\n * @throws {Error} If state change fails\n * @public\n * @example\n * ```typescript\n * const cc = webex.cc;\n * await cc.register();\n * await cc.stationLogin({ teamId: 'team123', loginOption: 'BROWSER' });\n *\n * // Using promise-based approach\n * try {\n * await cc.setAgentState({\n * state: 'Available',\n * auxCodeId: '12345',\n * lastStateChangeReason: 'Manual state change',\n * agentId: 'agent123',\n * });\n * } catch (error) {\n * console.error('State change failed:', error);\n * }\n *\n * // Optionally, listen for events\n * cc.on('agent:stateChange', (eventData) => {\n * // Triggered for both local and remote state changes\n * console.log('State changed:', eventData);\n * });\n *\n * cc.on('agent:stateChangeSuccess', (eventData) => {\n * console.log('State change succeeded:', eventData);\n * });\n *\n * cc.on('agent:stateChangeFailed', (error) => {\n * console.error('State change failed:', error);\n * });\n * ```\n */\n public async setAgentState(data: StateChange): Promise<SetStateResponse> {\n LoggerProxy.info('Setting agent state', {\n module: CC_FILE,\n method: METHODS.SET_AGENT_STATE,\n });\n try {\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.AGENT_STATE_CHANGE_SUCCESS,\n METRIC_EVENT_NAMES.AGENT_STATE_CHANGE_FAILED,\n ]);\n const agentStatusResponse = await this.services.agent.stateChange({\n data: {...data, agentId: data.agentId || this.agentConfig.agentId},\n });\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.AGENT_STATE_CHANGE_SUCCESS,\n {\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(agentStatusResponse),\n requestedState: data.state,\n teamId: this.agentConfig?.teams[0]?.teamId ?? EMPTY_STRING,\n status: agentStatusResponse.data?.status,\n subStatus: agentStatusResponse.data?.subStatus,\n auxCodeId: data.auxCodeId,\n lastStateChangeReason: data.lastStateChangeReason || EMPTY_STRING,\n },\n ['behavioral', 'business', 'operational']\n );\n\n LoggerProxy.log(\n `Agent state changed successfully to auxCodeId: ${agentStatusResponse.data.auxCodeId}`,\n {\n module: CC_FILE,\n method: METHODS.SET_AGENT_STATE,\n trackingId: agentStatusResponse.trackingId,\n }\n );\n\n return agentStatusResponse;\n } catch (error) {\n const failure = error.details as Failure;\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.AGENT_STATE_CHANGE_FAILED,\n {\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(failure),\n state: data.state,\n auxCodeId: data.auxCodeId,\n lastStateChangeReason: data.lastStateChangeReason || EMPTY_STRING,\n },\n ['behavioral', 'business', 'operational']\n );\n const {error: detailedError} = getErrorDetails(error, METHODS.SET_AGENT_STATE, CC_FILE);\n throw detailedError;\n }\n }\n\n /**\n * Processes incoming websocket messages and emits corresponding events\n * Handles various event types including agent state changes, login events,\n * and other agent-related notifications\n * @private\n * @param {string} event The raw websocket event message\n */\n private handleWebsocketMessage = (event: string) => {\n const eventData = JSON.parse(event);\n // Re-emit all the events related to agent except keep-alives\n if (!eventData.keepalive && eventData.data && eventData.data.type) {\n // @ts-ignore\n this.emit(eventData.data.type, eventData.data);\n }\n\n if (!eventData.type) {\n return;\n }\n\n LoggerProxy.log(`Received event: ${eventData?.data?.type ?? eventData.type}`, {\n module: CC_FILE,\n method: METHODS.HANDLE_WEBSOCKET_MESSAGE,\n });\n\n // Emit metrics for all websocket events except keepalive and welcome\n const topLevelType = eventData.type;\n const nestedType = eventData?.data?.type;\n if (topLevelType !== CC_EVENTS.WELCOME && eventData.keepalive !== 'true') {\n const metricsPayload: Record<string, any> = {\n ws_event_type: nestedType || topLevelType,\n top_level_type: topLevelType,\n has_data: Boolean(eventData.data),\n };\n this.metricsManager.trackEvent(METRIC_EVENT_NAMES.WEBSOCKET_EVENT_RECEIVED, metricsPayload, [\n 'operational',\n ]);\n }\n\n switch (eventData.type) {\n case CC_EVENTS.AGENT_MULTI_LOGIN:\n // @ts-ignore\n this.emit(AGENT_EVENTS.AGENT_MULTI_LOGIN, eventData.data);\n break;\n case CC_EVENTS.AGENT_STATE_CHANGE:\n // @ts-ignore\n this.emit(AGENT_EVENTS.AGENT_STATE_CHANGE, eventData.data);\n break;\n default:\n break;\n }\n\n if (!(eventData.data && eventData.data.type)) {\n return;\n }\n\n switch (eventData.data.type) {\n case CC_EVENTS.AGENT_STATION_LOGIN_SUCCESS: {\n const {channelsMap, ...loginData} = eventData.data;\n const stationLoginData = {\n ...loginData,\n mmProfile: {\n chat: channelsMap.chat?.length,\n email: channelsMap.email?.length,\n social: channelsMap.social?.length,\n telephony: channelsMap.telephony?.length,\n },\n notifsTrackingId: eventData.trackingId,\n };\n this.webCallingService.setLoginOption(loginData.deviceType as LoginOption);\n // @ts-ignore\n this.emit(AGENT_EVENTS.AGENT_STATION_LOGIN_SUCCESS, stationLoginData);\n break;\n }\n case CC_EVENTS.AGENT_RELOGIN_SUCCESS:\n {\n const {channelsMap, ...loginData} = eventData.data;\n const stationReLoginData = {\n ...loginData,\n mmProfile: {\n chat: channelsMap.chat?.length,\n email: channelsMap.email?.length,\n social: channelsMap.social?.length,\n telephony: channelsMap.telephony?.length,\n },\n notifsTrackingId: eventData.trackingId,\n };\n // @ts-ignore\n this.emit(AGENT_EVENTS.AGENT_RELOGIN_SUCCESS, stationReLoginData);\n }\n break;\n case CC_EVENTS.AGENT_STATE_CHANGE_SUCCESS:\n // @ts-ignore\n this.emit(AGENT_EVENTS.AGENT_STATE_CHANGE_SUCCESS, eventData.data);\n break;\n case CC_EVENTS.AGENT_STATE_CHANGE_FAILED:\n // @ts-ignore\n this.emit(AGENT_EVENTS.AGENT_STATE_CHANGE_FAILED, eventData.data);\n break;\n case CC_EVENTS.AGENT_STATION_LOGIN_FAILED:\n // @ts-ignore\n this.emit(AGENT_EVENTS.AGENT_STATION_LOGIN_FAILED, eventData.data);\n break;\n case CC_EVENTS.AGENT_LOGOUT_SUCCESS:\n // @ts-ignore\n this.emit(AGENT_EVENTS.AGENT_LOGOUT_SUCCESS, eventData.data);\n break;\n case CC_EVENTS.AGENT_LOGOUT_FAILED:\n // @ts-ignore\n this.emit(AGENT_EVENTS.AGENT_LOGOUT_FAILED, eventData.data);\n break;\n case CC_EVENTS.AGENT_DN_REGISTERED:\n // @ts-ignore\n this.emit(AGENT_EVENTS.AGENT_DN_REGISTERED, eventData.data);\n break;\n default:\n break;\n }\n };\n\n /**\n * Initializes event listeners for the Contact Center service\n * Sets up handlers for connection state changes and other core events\n * @private\n */\n private setupEventListeners() {\n this.services.connectionService.on('connectionLost', this.handleConnectionLost.bind(this));\n }\n\n /**\n * Returns the connection configuration\n * @returns {SubscribeRequest} Connection configuration\n * @private\n */\n private getConnectionConfig(): SubscribeRequest {\n return {\n force: this.$config?.force ?? true,\n isKeepAliveEnabled: this.$config?.isKeepAliveEnabled ?? false,\n clientType: this.$config?.clientType ?? 'WebexCCSDK',\n allowMultiLogin: this.$config?.allowMultiLogin ?? true,\n };\n }\n\n /**\n * Handles connection lost events and reconnection attempts\n * @param {ConnectionLostDetails} msg Connection lost details\n * @private\n */\n private async handleConnectionLost(msg: ConnectionLostDetails): Promise<void> {\n if (msg.isConnectionLost) {\n // TODO: Emit an event saying connection is lost\n LoggerProxy.info('event=handleConnectionLost | Connection lost', {\n module: CC_FILE,\n method: METHODS.HANDLE_CONNECTION_LOST,\n });\n } else if (msg.isSocketReconnected) {\n // TODO: Emit an event saying connection is re-estabilished\n LoggerProxy.info(\n 'event=handleConnectionReconnect | Connection reconnected attempting to request silent relogin',\n {module: CC_FILE, method: METHODS.HANDLE_CONNECTION_LOST}\n );\n if (this.$config && this.$config.allowAutomatedRelogin) {\n await this.silentRelogin();\n }\n }\n }\n\n /**\n * Handles silent relogin after registration completion\n * @private\n */\n private async silentRelogin(): Promise<void> {\n LoggerProxy.info('Starting silent relogin process', {\n module: CC_FILE,\n method: METHODS.SILENT_RELOGIN,\n });\n\n try {\n const reLoginResponse = await this.services.agent.reload();\n const {\n agentId,\n lastStateChangeReason,\n deviceType,\n dn,\n lastStateChangeTimestamp,\n lastIdleCodeChangeTimestamp,\n } = reLoginResponse.data;\n let {auxCodeId} = reLoginResponse.data;\n this.agentConfig.lastStateChangeTimestamp = lastStateChangeTimestamp;\n this.agentConfig.lastIdleCodeChangeTimestamp = lastIdleCodeChangeTimestamp;\n this.agentConfig.currentTeamId = reLoginResponse.data.teamId;\n await this.handleDeviceType(deviceType as LoginOption, dn);\n\n if (lastStateChangeReason === 'agent-wss-disconnect') {\n LoggerProxy.info(\n 'event=requestAutoStateChange | Requesting state change to available on socket reconnect',\n {module: CC_FILE, method: METHODS.SILENT_RELOGIN}\n );\n auxCodeId = AGENT_STATE_AVAILABLE_ID;\n const stateChangeData: StateChange = {\n state: AGENT_STATE_AVAILABLE,\n auxCodeId,\n lastStateChangeReason,\n agentId,\n };\n try {\n const agentStatusResponse = (await this.setAgentState(\n stateChangeData\n )) as StateChangeSuccess;\n this.agentConfig.lastStateChangeTimestamp =\n agentStatusResponse.data.lastStateChangeTimestamp;\n\n this.agentConfig.lastIdleCodeChangeTimestamp =\n agentStatusResponse.data.lastIdleCodeChangeTimestamp;\n } catch (error) {\n LoggerProxy.error(\n `event=requestAutoStateChange | Error requesting state change to available on socket reconnect: ${error}`,\n {module: CC_FILE, method: METHODS.SILENT_RELOGIN}\n );\n }\n }\n this.agentConfig.lastStateAuxCodeId = auxCodeId;\n this.agentConfig.isAgentLoggedIn = true;\n // TODO: https://jira-eng-gpk2.cisco.com/jira/browse/SPARK-626777 Implement the de-register method and close the listener there\n this.services.webSocketManager.on('message', this.handleWebsocketMessage);\n\n LoggerProxy.log(\n `Silent relogin process completed successfully with login Option: ${reLoginResponse.data.deviceType} teamId: ${reLoginResponse.data.teamId}`,\n {\n module: CC_FILE,\n method: METHODS.SILENT_RELOGIN,\n trackingId: reLoginResponse.trackingId,\n }\n );\n } catch (error) {\n const {reason, error: detailedError} = getErrorDetails(\n error,\n METHODS.SILENT_RELOGIN,\n CC_FILE\n );\n if (reason === 'AGENT_NOT_FOUND') {\n LoggerProxy.log('Agent not found during relogin, handling silently', {\n module: CC_FILE,\n method: METHODS.SILENT_RELOGIN,\n });\n\n return;\n }\n throw detailedError;\n }\n }\n\n /**\n * Handles device type specific configuration and setup\n * Configures services and settings based on the login device type\n * @param {LoginOption} deviceType The type of device being used for login\n * @param {string} dn The dial number associated with the device\n * @returns {Promise<void>}\n * @private\n */\n private async handleDeviceType(deviceType: LoginOption, dn: string): Promise<void> {\n this.webCallingService.setLoginOption(deviceType);\n this.agentConfig.deviceType = deviceType;\n switch (deviceType) {\n case LoginOption.BROWSER:\n try {\n await this.webCallingService.registerWebCallingLine();\n } catch (error) {\n LoggerProxy.error(`Error registering web calling line: ${error}`, {\n module: CC_FILE,\n method: METHODS.HANDLE_DEVICE_TYPE,\n });\n throw error;\n }\n break;\n case LoginOption.AGENT_DN:\n case LoginOption.EXTENSION:\n this.agentConfig.defaultDn = dn;\n this.agentConfig.dn = dn;\n break;\n default:\n LoggerProxy.error(`Unsupported device type: ${deviceType}`, {\n module: CC_FILE,\n method: METHODS.HANDLE_DEVICE_TYPE,\n });\n throw new Error(`Unsupported device type: ${deviceType}`);\n }\n }\n\n /**\n * Makes an outbound call to a specified phone number.\n *\n * @param {string} destination - The phone number to dial (e.g., '+1234567890').\n * @param {string} origin - The contact center number that will be used while making a call to the customer.\n * Should include country code and be in E.164 format.\n * @returns {Promise<TaskResponse>} Resolves with the task response containing:\n * - interactionId: Unique identifier for the outbound call\n * - taskId: Identifier for the task instance\n * - data: Task details including state, queue info, and media properties\n * @throws {Error} If the outdial operation fails:\n * - \"Agent not configured for outbound calls\" if isOutboundEnabledForAgent is false\n * - \"Invalid phone number format\" if destination is not in E.164 format\n * - \"Agent not in Available state\" if agent's state is not Available\n * @public\n * @example\n * ```typescript\n * // Initialize and prepare agent\n * const cc = webex.cc;\n * await cc.register();\n * await cc.stationLogin({\n * teamId: 'team123',\n * loginOption: 'BROWSER'\n * });\n *\n * // Set Available state before outbound call\n * await cc.setAgentState({\n * state: 'Available',\n * auxCodeId: '0'\n * });\n *\n * // Make outbound call with full error handling\n * try {\n * // Verify agent is properly configured for outdial\n * if (!cc.agentConfig.isOutboundEnabledForAgent) {\n * throw new Error('Agent not configured for outbound calls');\n * }\n *\n * // Start the outbound call\n * const destination = '+1234567890';\n * const task = await cc.startOutdial(destination, origin);\n *\n * // Listen for all relevant task events\n * task.on('task:ringing', () => {\n * console.log('Call is ringing');\n * updateCallStatus('Ringing...');\n * });\n *\n * task.on('task:established', () => {\n * console.log('Call connected');\n * updateCallStatus('Connected');\n * enableCallControls(); // Show mute, hold, transfer buttons\n * });\n *\n * task.on('task:hold', () => {\n * console.log('Call placed on hold');\n * updateCallStatus('On Hold');\n * });\n *\n * task.on('task:error', (error) => {\n * console.error('Call error:', error);\n * updateCallStatus('Error');\n * showErrorDialog(error.message);\n * });\n *\n * task.on('task:ended', () => {\n * console.log('Call ended');\n * updateCallStatus('Call Ended');\n * resetCallControls();\n *\n * // Handle wrap-up if required\n * if (task.data.wrapUpRequired) {\n * showWrapupForm();\n * }\n * });\n *\n * // Example call control usage\n * function handleMuteToggle() {\n * await task.toggleMute();\n * }\n *\n * function handleHoldToggle() {\n * if (task.data.isOnHold) {\n * await task.resume();\n * } else {\n * await task.hold();\n * }\n * }\n *\n * async function handleTransfer() {\n * // Get available queues for transfer\n * const queues = await cc.getQueues();\n *\n * // Transfer to first available queue\n * if (queues.length > 0) {\n * await task.transfer({\n * to: queues[0].queueId,\n * destinationType: 'QUEUE'\n * });\n * }\n * }\n *\n * } catch (error) {\n * console.error('Outdial failed:', error);\n * showErrorNotification('Failed to place call: ' + error.message);\n * }\n * ```\n */\n public async startOutdial(destination: string, origin: string): Promise<TaskResponse> {\n LoggerProxy.info('Starting outbound dial', {\n module: CC_FILE,\n method: METHODS.START_OUTDIAL,\n });\n try {\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_OUTDIAL_SUCCESS,\n METRIC_EVENT_NAMES.TASK_OUTDIAL_FAILED,\n ]);\n\n // Construct the outdial payload.\n const outDialPayload: DialerPayload = {\n destination,\n origin,\n entryPointId: this.agentConfig.outDialEp,\n direction: OUTDIAL_DIRECTION,\n attributes: ATTRIBUTES,\n mediaType: OUTDIAL_MEDIA_TYPE,\n outboundType: OUTBOUND_TYPE,\n };\n\n const result = await this.services.dialer.startOutdial({data: outDialPayload});\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_OUTDIAL_SUCCESS,\n {\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(result),\n destination,\n origin,\n mediaType: OUTDIAL_MEDIA_TYPE,\n },\n ['behavioral', 'business', 'operational']\n );\n\n LoggerProxy.log(`Outbound dial completed successfully`, {\n module: CC_FILE,\n method: METHODS.START_OUTDIAL,\n trackingId: result.trackingId,\n interactionId: result.data?.interactionId,\n });\n\n return result;\n } catch (error) {\n const failure = error.details as Failure;\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_OUTDIAL_FAILED,\n {\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(failure),\n destination,\n origin,\n mediaType: OUTDIAL_MEDIA_TYPE,\n },\n ['behavioral', 'business', 'operational']\n );\n const {error: detailedError} = getErrorDetails(error, METHODS.START_OUTDIAL, CC_FILE);\n throw detailedError;\n }\n }\n\n /**\n * Fetches outdial ANI (Automatic Number Identification) entries for an outdial ANI ID.\n *\n * This method retrieves the list of phone numbers that can be used as caller ID when making\n * outbound calls. The ANI data is associated with an outdial ANI ID and can be filtered\n * and paginated as needed.\n *\n * @param {string} outdialANI - The outdial ANI ID to fetch ANI data for\n * @param {number} [page] - Optional page number for pagination (0-based)\n * @param {number} [pageSize] - Optional number of items per page\n * @param {string} [search] - Optional search term to filter results by name or number\n * @param {string} [filter] - Optional filter string\n * @param {string} [attributes] - Optional attributes to include in response\n * @returns {Promise<OutdialAniEntriesResponse>} Promise resolving to outdial ANI response containing:\n * - data: Array of ANI entries with number and name\n * - meta: Pagination metadata\n * @throws {Error} If the operation fails or agent is not registered\n * @public\n * @example\n * ```typescript\n * const cc = webex.cc;\n * await cc.register();\n *\n * // Get agent profile to obtain outdial ANI ID\n * const agentProfile = cc.agentConfig;\n * const outdialANI = agentProfile.outdialANIId;\n *\n * // Basic usage - get all ANI data for an outdial ANI ID\n * const aniData = await cc.getOutdialAniEntries({ outdialANI });\n *\n * // With pagination and search\n * const paginatedAni = await cc.getOutdialAniEntries({\n * outdialANI,\n * page: 0,\n * pageSize: 50,\n * search: '555' // search for numbers containing '555'\n * });\n *\n * // Process the results\n * paginatedAni.forEach(ani => {\n * console.log(`ANI: ${ani.number} - ${ani.name}`);\n * });\n * ```\n */\n public async getOutdialAniEntries(params: OutdialAniParams): Promise<OutdialAniEntriesResponse> {\n const {outdialANI, page, pageSize, search, filter, attributes} = params;\n\n LoggerProxy.info('Fetching outdial ANI entries', {\n module: CC_FILE,\n method: METHODS.GET_OUTDIAL_ANI_ENTRIES,\n });\n\n const orgId = this.$webex.credentials.getOrgId();\n\n if (!orgId) {\n LoggerProxy.error('Org ID not found.', {\n module: CC_FILE,\n method: METHODS.GET_OUTDIAL_ANI_ENTRIES,\n });\n\n throw new Error('Org ID not found.');\n }\n\n try {\n const result = await this.services.config.getOutdialAniEntries(orgId, {\n outdialANI,\n page,\n pageSize,\n search,\n filter,\n attributes,\n });\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.OUTDIAL_ANI_EP_FETCH_SUCCESS,\n {\n outdialANI,\n resultCount: result?.length || 0,\n },\n ['behavioral', 'business', 'operational']\n );\n\n LoggerProxy.log(`Successfully retrieved outdial ANI entries for ANI ID ${outdialANI}`, {\n module: CC_FILE,\n method: METHODS.GET_OUTDIAL_ANI_ENTRIES,\n });\n\n return result;\n } catch (error) {\n const failure = error.details as Failure;\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.OUTDIAL_ANI_EP_FETCH_FAILED,\n {\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(failure),\n outdialANI,\n error,\n },\n ['behavioral', 'business', 'operational']\n );\n\n LoggerProxy.error(\n `Failed to fetch outdial ANI entries for ANI ID ${outdialANI} due to: ${error}`,\n {\n module: CC_FILE,\n method: METHODS.GET_OUTDIAL_ANI_ENTRIES,\n trackingId: failure.trackingId,\n }\n );\n\n const {error: detailedError} = getErrorDetails(\n error,\n METHODS.GET_OUTDIAL_ANI_ENTRIES,\n CC_FILE\n );\n throw detailedError;\n }\n }\n\n /**\n * Uploads logs to help troubleshoot SDK issues.\n *\n * This method collects the current SDK logs including network requests, WebSocket\n * messages, and client-side events, then securely submits them to Webex's diagnostics\n * service. The returned tracking ID, feedbackID can be provided to Webex support for faster\n * issue resolution.\n * @returns Promise<UploadLogsResponse> Resolves with the upload logs response\n * @throws Error If the upload fails\n * @public\n * @example\n * ```typescript\n * const cc = webex.cc;\n * try {\n * await cc.register();\n * } catch (error) {\n * console.error('Error:', error);\n * const result = await cc.uploadLogs();\n * console.log('Logs uploaded. Tracking ID:', result.trackingId);\n * }\n * ```\n */\n public async uploadLogs(): Promise<UploadLogsResponse> {\n return this.webexRequest.uploadLogs();\n }\n\n /**\n * Updates the agent device type and login configuration.\n * Use this method to change how an agent connects to the contact center system (e.g., switching from browser-based calling to a desk phone extension).\n *\n * @param {AgentDeviceUpdate} data Configuration containing:\n * - loginOption: New device type ('BROWSER', 'EXTENSION', 'AGENT_DN')\n * - dialNumber: Required phone number when using EXTENSION or AGENT_DN\n * - teamId: Optional team ID (defaults to current team if not specified)\n * @returns Promise<UpdateDeviceTypeResponse> Resolves with the device type update response\n * @throws Error If the update fails\n * @example\n * ```typescript\n * const cc = webex.cc;\n *\n * // Switch from browser to extension\n * try {\n * await cc.updateAgentProfile({\n * loginOption: 'EXTENSION',\n * dialNumber: '1234', // Required for EXTENSION\n * teamId: 'currentTeam' // Optional: uses current team if not specified\n * });\n * } catch (error) {\n * console.error('Failed to update device:', error.message);\n * }\n * ```\n * @public\n */\n public async updateAgentProfile(data: AgentProfileUpdate): Promise<UpdateDeviceTypeResponse> {\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.AGENT_DEVICE_TYPE_UPDATE_SUCCESS,\n METRIC_EVENT_NAMES.AGENT_DEVICE_TYPE_UPDATE_FAILED,\n ]);\n\n const trackingId = `WX_CC_SDK_${uuidv4()}`;\n\n LoggerProxy.info(`starting profile update`, {\n module: CC_FILE,\n method: METHODS.UPDATE_AGENT_PROFILE,\n trackingId,\n });\n\n try {\n // Only block if both loginOption AND teamId remain unchanged\n if (\n this.webCallingService?.loginOption === data.loginOption &&\n data.teamId === this.agentConfig.currentTeamId\n ) {\n const message =\n 'Will not proceed with device update as new Device type is same as current device type and teamId is same as current teamId';\n const err = new Error(message) as GenericError;\n err.details = {\n type: 'Identical Device Change Failure',\n orgId: this.$webex.credentials.getOrgId(),\n trackingId,\n data: {\n agentId: this.agentConfig.agentId,\n reasonCode: 'R002',\n reason: message,\n },\n };\n throw err;\n }\n\n await this.stationLogout({\n logoutReason: 'User requested agent device change',\n });\n\n const loginPayload: AgentLogin = {\n teamId: data.teamId,\n loginOption: data.loginOption,\n dialNumber: data.dialNumber,\n };\n\n const resp = await this.stationLogin(loginPayload);\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.AGENT_DEVICE_TYPE_UPDATE_SUCCESS,\n {\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(resp),\n loginType: data.loginOption,\n },\n ['behavioral', 'business', 'operational']\n );\n\n LoggerProxy.log(\n `profile updated successfully with ${loginPayload.loginOption} teamId: ${loginPayload.teamId}`,\n {\n module: CC_FILE,\n method: METHODS.UPDATE_AGENT_PROFILE,\n trackingId,\n }\n );\n\n const deviceTypeUpdateResponse: UpdateDeviceTypeResponse = {\n ...resp,\n type: 'AgentDeviceTypeUpdateSuccess',\n };\n\n return deviceTypeUpdateResponse;\n } catch (error) {\n const failure = (error as GenericError).details as Failure;\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.AGENT_DEVICE_TYPE_UPDATE_FAILED,\n {\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(failure),\n loginType: data.loginOption,\n },\n ['behavioral', 'business', 'operational']\n );\n\n LoggerProxy.error(`error updating profile: ${error}`, {\n module: CC_FILE,\n method: METHODS.UPDATE_AGENT_PROFILE,\n trackingId,\n });\n throw error;\n }\n }\n\n /**\n * Returns paginated entry points for the organization.\n * Thin wrapper around internal EntryPoint instance.\n * @public\n */\n public async getEntryPoints(\n params: EntryPointSearchParams = {}\n ): Promise<EntryPointListResponse> {\n return this.entryPoint.getEntryPoints(params);\n }\n\n /**\n * Returns paginated contact service queues for the organization.\n * Thin wrapper around internal Queue instance.\n * @public\n */\n public async getQueues(\n params: ContactServiceQueueSearchParams = {}\n ): Promise<ContactServiceQueuesResponse> {\n return this.queue.getQueues(params);\n }\n}\n"],"mappings":";;;;;;AAQA,IAAAA,UAAA,GAAAC,OAAA;AACA,IAAAC,OAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,KAAA,GAAAH,OAAA;AACA,IAAAI,MAAA,GAAAJ,OAAA;AAiBA,IAAAK,UAAA,GAAAL,OAAA;AAYA,IAAAM,WAAA,GAAAN,OAAA;AACA,IAAAO,WAAA,GAAAP,OAAA;AACA,IAAAQ,SAAA,GAAAN,sBAAA,CAAAF,OAAA;AACA,IAAAS,aAAA,GAAAP,sBAAA,CAAAF,OAAA;AACA,IAAAU,YAAA,GAAAR,sBAAA,CAAAF,OAAA;AACA,IAAAW,OAAA,GAAAX,OAAA;AACA,IAAAY,MAAA,GAAAZ,OAAA;AACA,IAAAa,OAAA,GAAAb,OAAA;AAQA,IAAAc,YAAA,GAAAZ,sBAAA,CAAAF,OAAA;AACA,IAAAe,kBAAA,GAAAb,sBAAA,CAAAF,OAAA;AACA,IAAAgB,OAAA,GAAAhB,OAAA;AACA,IAAAiB,eAAA,GAAAf,sBAAA,CAAAF,OAAA;AACA,IAAAkB,WAAA,GAAAlB,OAAA;AAEA,IAAAmB,WAAA,GAAAjB,sBAAA,CAAAF,OAAA;AACA,IAAAoB,YAAA,GAAAlB,sBAAA,CAAAF,OAAA;AACA,IAAAqB,MAAA,GAAAnB,sBAAA,CAAAF,OAAA;AAAqC,SAAAE,uBAAAoB,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AA/DrC;AACA;AACA;AACA;AACA;AACA;AACA;;AAiEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe,MAAMG,aAAa,SAASC,sBAAW,CAA2B;EAC/E;AACF;AACA;AACA;AACA;AACA;EACEC,SAAS,GAAG,IAAI;;EAEhB;AACF;AACA;AACA;AACA;;EAGE;AACF;AACA;AACA;AACA;AACA;;EAGE;AACF;AACA;AACA;AACA;AACA;;EAGE;AACF;AACA;AACA;AACA;AACA;;EAGE;AACF;AACA;AACA;AACA;AACA;;EAGE;AACF;AACA;AACA;AACA;AACA;;EAGE;AACF;AACA;AACA;AACA;AACA;;EAGE;AACF;AACA;AACA;AACA;AACA;;EAGE;AACF;AACA;AACA;AACA;AACA;;EAGE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;EAGE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;EAGE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;EAGE;AACF;AACA;AACA;AACA;AACA;EACSC,WAAW,GAAGA,oBAAW;;EAEhC;AACF;AACA;AACA;AACA;EACEC,WAAWA,CAAC,GAAGC,IAAI,EAAE;IACnB,KAAK,CAAC,GAAGA,IAAI,CAAC;IAEd,IAAI,CAACC,YAAY,GAAG,IAAIC,eAAY,CAAC,CAAC;IACtC;IACA,IAAI,CAACC,MAAM,GAAG,IAAI,CAACC,KAAK;IAExB,IAAI,CAACD,MAAM,CAACE,IAAI,CAACC,gBAAK,EAAE,MAAM;MAC5B;MACA,IAAI,CAACC,OAAO,GAAG,IAAI,CAACC,MAAM;;MAE1B;AACN;AACA;MACM,IAAI,CAACC,YAAY,GAAGC,qBAAY,CAACC,WAAW,CAAC;QAC3CP,KAAK,EAAE,IAAI,CAACD;MACd,CAAC,CAAC;MAEF,IAAI,CAACS,QAAQ,GAAGC,iBAAQ,CAACF,WAAW,CAAC;QACnCP,KAAK,EAAE,IAAI,CAACD,MAAM;QAClBW,gBAAgB,EAAE,IAAI,CAACC,mBAAmB,CAAC;MAC7C,CAAC,CAAC;MACF,IAAI,CAACH,QAAQ,CAACI,gBAAgB,CAACC,EAAE,CAAC,SAAS,EAAE,IAAI,CAACC,sBAAsB,CAAC;MAEzE,IAAI,CAACC,iBAAiB,GAAG,IAAIC,0BAAiB,CAAC,IAAI,CAACjB,MAAM,CAAC;MAC3D,IAAI,CAACkB,cAAc,GAAGC,uBAAc,CAACX,WAAW,CAAC;QAACP,KAAK,EAAE,IAAI,CAACD;MAAM,CAAC,CAAC;MACtE,IAAI,CAACoB,WAAW,GAAGC,oBAAW,CAACC,cAAc,CAC3C,IAAI,CAACb,QAAQ,CAACc,OAAO,EACrB,IAAI,CAACP,iBAAiB,EACtB,IAAI,CAACP,QAAQ,CAACI,gBAChB,CAAC;MACD,IAAI,CAACW,oBAAoB,CAAC,CAAC;;MAE3B;MACA;MACA,IAAI,CAACC,UAAU,GAAG,IAAIC,mBAAU,CAAC,IAAI,CAAC1B,MAAM,CAAC;MAC7C,IAAI,CAAC2B,WAAW,GAAG,IAAIC,oBAAW,CAAC,IAAI,CAAC5B,MAAM,EAAE,MAAM,IAAI,CAAC6B,WAAW,EAAEC,aAAa,CAAC;MACtF,IAAI,CAACC,KAAK,GAAG,IAAIC,cAAK,CAAC,IAAI,CAAChC,MAAM,CAAC;;MAEnC;MACAL,oBAAW,CAACsC,UAAU,CAAC,IAAI,CAACjC,MAAM,CAACkC,MAAM,CAAC;IAC5C,CAAC,CAAC;EACJ;;EAEA;AACF;AACA;AACA;AACA;EACUC,kBAAkB,GAAIC,IAAW,IAAK;IAC5C;IACA,IAAI,CAACC,OAAO,CAACC,mBAAW,CAACC,aAAa,EAAEH,IAAI,CAAC;EAC/C,CAAC;;EAED;AACF;AACA;AACA;AACA;EACUI,iBAAiB,GAAIJ,IAAW,IAAK;IAC3C;IACA,IAAI,CAACC,OAAO,CAACC,mBAAW,CAACG,YAAY,EAAEL,IAAI,CAAC;EAC9C,CAAC;;EAED;AACF;AACA;AACA;AACA;EACUM,gBAAgB,GAAIN,IAAW,IAAK;IAC1C;IACA,IAAI,CAACC,OAAO,CAACC,mBAAW,CAACK,WAAW,EAAEP,IAAI,CAAC;EAC7C,CAAC;;EAED;AACF;AACA;AACA;AACA;EACUZ,oBAAoBA,CAAA,EAAG;IAC7B,IAAI,CAACJ,WAAW,CAACN,EAAE,CAACwB,mBAAW,CAACC,aAAa,EAAE,IAAI,CAACJ,kBAAkB,CAAC;IACvE,IAAI,CAACf,WAAW,CAACN,EAAE,CAACwB,mBAAW,CAACG,YAAY,EAAE,IAAI,CAACD,iBAAiB,CAAC;IACrE,IAAI,CAACpB,WAAW,CAACN,EAAE,CAACwB,mBAAW,CAACK,WAAW,EAAE,IAAI,CAACD,gBAAgB,CAAC;EACrE;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAaE,QAAQA,CAAA,EAAqB;IACxCjD,oBAAW,CAACkD,IAAI,CAAC,8BAA8B,EAAE;MAC/CC,MAAM,EAAEC,kBAAO;MACfC,MAAM,EAAEC,kBAAO,CAACC;IAClB,CAAC,CAAC;IACF,IAAI;MACF,IAAI,CAAChC,cAAc,CAACiC,SAAS,CAAC,CAC5BC,8BAAkB,CAACC,0BAA0B,EAC7CD,8BAAkB,CAACE,yBAAyB,CAC7C,CAAC;MACF,IAAI,CAACC,mBAAmB,CAAC,CAAC;MAE1B,MAAMC,IAAI,GAAG,MAAM,IAAI,CAACC,gBAAgB,CAAC,CAAC;MAC1C;MACAD,IAAI,CAACE,EAAE,GAAGF,IAAI,CAACG,SAAS;MACxB,IAAI,CAACzC,cAAc,CAAC0C,UAAU,CAC5BR,8BAAkB,CAACC,0BAA0B,EAC7C;QACE,GAAGlC,uBAAc,CAAC0C,oCAAoC,CAACL,IAAI,CAAC;QAC5DM,UAAU,EAAEN,IAAI,CAACM,UAAU,IAAIC;MACjC,CAAC,EACD,CAAC,aAAa,CAChB,CAAC;MAEDpE,oBAAW,CAACqE,GAAG,CAAC,4DAA4DR,IAAI,CAACS,OAAO,EAAE,EAAE;QAC1FnB,MAAM,EAAEC,kBAAO;QACfC,MAAM,EAAEC,kBAAO,CAACC;MAClB,CAAC,CAAC;MAEF,OAAOM,IAAI;IACb,CAAC,CAAC,OAAOU,KAAK,EAAE;MACd,IAAI,CAAChD,cAAc,CAAC0C,UAAU,CAC5BR,8BAAkB,CAACE,yBAAyB,EAC5C;QACEa,KAAK,EAAED,KAAK,CAACC;MACf,CAAC,EACD,CAAC,aAAa,CAChB,CAAC;MACDxE,oBAAW,CAACuE,KAAK,CAAC,0BAA0BA,KAAK,EAAE,EAAE;QACnDpB,MAAM,EAAEC,kBAAO;QACfC,MAAM,EAAEC,kBAAO,CAACC;MAClB,CAAC,CAAC;MACF,IAAI,CAAC5C,YAAY,CAAC8D,UAAU,CAAC;QAC3BC,aAAa,EAAEH,KAAK,EAAEI;MACxB,CAAC,CAAC;MAEF,MAAMJ,KAAK;IACb;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EAEE,MAAaK,UAAUA,CAAA,EAAkB;IACvC,IAAI;MACF,IAAI,CAACrD,cAAc,CAACiC,SAAS,CAAC,CAC5BC,8BAAkB,CAACoB,4BAA4B,EAC/CpB,8BAAkB,CAACqB,yBAAyB,CAC7C,CAAC;MAEF,IAAI,CAACrD,WAAW,CAACsD,GAAG,CAACpC,mBAAW,CAACC,aAAa,EAAE,IAAI,CAACJ,kBAAkB,CAAC;MACxE,IAAI,CAACf,WAAW,CAACsD,GAAG,CAACpC,mBAAW,CAACG,YAAY,EAAE,IAAI,CAACD,iBAAiB,CAAC;MACtE,IAAI,CAACpB,WAAW,CAACuD,2BAA2B,CAAC,CAAC;MAE9C,IAAI,CAAClE,QAAQ,CAACI,gBAAgB,CAAC6D,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC3D,sBAAsB,CAAC;MAC1E,IAAI,CAACN,QAAQ,CAACmE,iBAAiB,CAACF,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAACG,oBAAoB,CAAC;MAEhF,IACE,IAAI,CAAChD,WAAW,CAACiD,aAAa,IAC9B,IAAI,CAACjD,WAAW,CAACkD,iBAAiB,CAACC,QAAQ,CAACC,kBAAW,CAACC,OAAO,CAAC,EAChE;QACA,IAAI,IAAI,CAAClF,MAAM,CAACmF,QAAQ,CAACC,OAAO,CAACC,SAAS,EAAE;UAC1C,IAAI,CAACrF,MAAM,CAACmF,QAAQ,CAACC,OAAO,CAACV,GAAG,CAAC,QAAQ,CAAC;UAC1C,IAAI,CAAC1E,MAAM,CAACmF,QAAQ,CAACC,OAAO,CAACV,GAAG,CAAC,SAAS,CAAC;UAC3C,MAAM,IAAI,CAAC1E,MAAM,CAACmF,QAAQ,CAACC,OAAO,CAACE,UAAU,CAAC,CAAC;UAC/C;UACA,MAAM,IAAI,CAACtF,MAAM,CAACmF,QAAQ,CAACI,MAAM,CAACC,UAAU,CAAC,CAAC;UAC9C7F,oBAAW,CAACqE,GAAG,CAACyB,uCAA4B,EAAE;YAC5C3C,MAAM,EAAEC,kBAAO;YACfC,MAAM,EAAEC,kBAAO,CAACyC;UAClB,CAAC,CAAC;QACJ;MACF;MAEA,IAAI,CAAC,IAAI,CAACjF,QAAQ,CAACI,gBAAgB,CAAC8E,cAAc,EAAE;QAClD,IAAI,CAAClF,QAAQ,CAACI,gBAAgB,CAAC+E,KAAK,CAAC,KAAK,EAAE,uBAAuB,CAAC;MACtE;;MAEA;MACA,IAAI,CAAC/D,WAAW,GAAG,IAAI;MAEvBlC,oBAAW,CAACqE,GAAG,CAAC,2BAA2B,EAAE;QAC3ClB,MAAM,EAAEC,kBAAO;QACfC,MAAM,EAAEC,kBAAO,CAACyC;MAClB,CAAC,CAAC;MAEF,IAAI,CAACxE,cAAc,CAAC0C,UAAU,CAACR,8BAAkB,CAACoB,4BAA4B,EAAE,CAAC,CAAC,EAAE,CAClF,aAAa,CACd,CAAC;IACJ,CAAC,CAAC,OAAON,KAAK,EAAE;MACd,IAAI,CAAChD,cAAc,CAAC0C,UAAU,CAC5BR,8BAAkB,CAACqB,yBAAyB,EAC5C;QACEP,KAAK,EAAEA,KAAK,CAAC2B,OAAO,IAAIC;MAC1B,CAAC,EACD,CAAC,aAAa,CAChB,CAAC;MAEDnG,oBAAW,CAACuE,KAAK,CAAC,4BAA4BA,KAAK,EAAE,EAAE;QACrDpB,MAAM,EAAEC,kBAAO;QACfC,MAAM,EAAEC,kBAAO,CAACyC;MAClB,CAAC,CAAC;MAEF,MAAMxB,KAAK;IACb;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAa6B,cAAcA,CAACC,IAAiB,EAAgC;IAC3ErG,oBAAW,CAACkD,IAAI,CAAC,uBAAuB,EAAE;MACxCC,MAAM,EAAEC,kBAAO;MACfC,MAAM,EAAEC,kBAAO,CAACgD;IAClB,CAAC,CAAC;IACF,IAAI;MACF,IAAI,CAAC/E,cAAc,CAACiC,SAAS,CAAC,CAC5BC,8BAAkB,CAAC8C,0BAA0B,EAC7C9C,8BAAkB,CAAC+C,yBAAyB,CAC7C,CAAC;MACF,MAAM3C,IAAI,GAAG,MAAM,IAAI,CAAC/C,QAAQ,CAAC2F,KAAK,CAACC,WAAW,CAAC;QACjDL,IAAI,EAAE;UAACM,cAAc,EAAE,IAAI,CAACzE,WAAW,CAAC0E,cAAc;UAAE,GAAGP;QAAI;MACjE,CAAC,CAAC;MAEF,IAAI,CAAC9E,cAAc,CAAC0C,UAAU,CAC5BR,8BAAkB,CAAC8C,0BAA0B,EAC7C;QACE,GAAG/E,uBAAc,CAAC0C,oCAAoC,CAACL,IAAI,CAAC;QAC5DgD,SAAS,EAAER,IAAI,CAACQ,SAAS;QACzBC,eAAe,EAAET,IAAI,CAACU,KAAK;QAC3BC,eAAe,EAAEnD,IAAI,CAACwC,IAAI,CAACY,SAAS,CAACC;MACvC,CAAC,EACD,CAAC,aAAa,CAChB,CAAC;MAEDlH,oBAAW,CAACqE,GAAG,CAAC,0BAA0BR,IAAI,CAACwC,IAAI,CAACY,SAAS,CAACC,MAAM,eAAe,EAAE;QACnF/D,MAAM,EAAEC,kBAAO;QACfC,MAAM,EAAEC,kBAAO,CAACgD,gBAAgB;QAChC3B,UAAU,EAAEd,IAAI,CAACc;MACnB,CAAC,CAAC;MAEF,OAAOd,IAAI;IACb,CAAC,CAAC,OAAOU,KAAK,EAAE;MACd,MAAM4C,WAAW,GAAG5C,KAAK,CAAC6C,OAAkB;MAE5C,IAAI,CAAC7F,cAAc,CAAC0C,UAAU,CAC5BR,8BAAkB,CAAC+C,yBAAyB,EAC5C;QACE,GAAGhF,uBAAc,CAAC6F,0CAA0C,CAACF,WAAW,CAAC;QACzEN,SAAS,EAAER,IAAI,CAACQ,SAAS;QACzBC,eAAe,EAAET,IAAI,CAACU;MACxB,CAAC,EACD,CAAC,aAAa,CAChB,CAAC;MACD,MAAM;QAACxC,KAAK,EAAE+C;MAAa,CAAC,GAAG,IAAAC,sBAAe,EAAChD,KAAK,EAAEjB,kBAAO,CAACgD,gBAAgB,EAAElD,kBAAO,CAAC;MACxF,MAAMkE,aAAa;IACrB;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,MAAcxD,gBAAgBA,CAAA,EAAG;IAC/B9D,oBAAW,CAACkD,IAAI,CAAC,yBAAyB,EAAE;MAC1CC,MAAM,EAAEC,kBAAO;MACfC,MAAM,EAAEC,kBAAO,CAACkE;IAClB,CAAC,CAAC;IACF,IAAI;MACF,OAAO,IAAI,CAAC1G,QAAQ,CAACI,gBAAgB,CAClCuG,aAAa,CAAC;QACbC,IAAI,EAAE,IAAI,CAACzG,mBAAmB,CAAC;MACjC,CAAC,CAAC,CACD0G,IAAI,CAAC,MAAOtB,IAAkB,IAAK;QAClC,MAAM/B,OAAO,GAAG+B,IAAI,CAAC/B,OAAO;QAC5B,MAAME,KAAK,GAAG,IAAI,CAACnE,MAAM,CAACuH,WAAW,CAACC,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC3F,WAAW,GAAG,MAAM,IAAI,CAACpB,QAAQ,CAACJ,MAAM,CAACoH,cAAc,CAACtD,KAAK,EAAEF,OAAO,CAAC;QAC5EtE,oBAAW,CAACqE,GAAG,CAAC,sCAAsC,EAAE;UACtDlB,MAAM,EAAEC,kBAAO;UACfC,MAAM,EAAEC,kBAAO,CAACkE;QAClB,CAAC,CAAC;QACF;QACA,IAAI,CAAC/F,WAAW,CAACsG,aAAa,CAAC,IAAI,CAAC7F,WAAW,CAAC8F,UAAU,CAAC;QAC3D,IAAI,CAACvG,WAAW,CAACwG,UAAU,CAAC,IAAI,CAAC/F,WAAW,CAACoC,OAAO,CAAC;QACrD,IAAI,CAAC7C,WAAW,CAACyG,gBAAgB,CAAC,IAAI,CAAChG,WAAW,CAACiD,aAAa,CAAC;QAEjE,IACE,IAAI,CAACjD,WAAW,CAACiD,aAAa,IAC9B,IAAI,CAACjD,WAAW,CAACkD,iBAAiB,CAACC,QAAQ,CAACC,kBAAW,CAACC,OAAO,CAAC,EAChE;UACA,IAAI,CAAClF,MAAM,CAACmF,QAAQ,CAACC,OAAO,CACzB0C,OAAO,CAAC,CAAC,CACTR,IAAI,CAAC,MAAM;YACV3H,oBAAW,CAACqE,GAAG,CAAC,2DAA2D,EAAE;cAC3ElB,MAAM,EAAEC,kBAAO;cACfC,MAAM,EAAEC,kBAAO,CAACkE;YAClB,CAAC,CAAC;UACJ,CAAC,CAAC,CACDY,KAAK,CAAE7D,KAAK,IAAK;YAChBvE,oBAAW,CAACuE,KAAK,CAAC,2CAA2CA,KAAK,EAAE,EAAE;cACpEpB,MAAM,EAAEC,kBAAO;cACfC,MAAM,EAAEC,kBAAO,CAACkE;YAClB,CAAC,CAAC;UACJ,CAAC,CAAC;QACN;QACA,IAAI,IAAI,CAAC/G,OAAO,IAAI,IAAI,CAACA,OAAO,CAAC4H,qBAAqB,EAAE;UACtD,MAAM,IAAI,CAACC,aAAa,CAAC,CAAC;QAC5B;QAEA,OAAO,IAAI,CAACpG,WAAW;MACzB,CAAC,CAAC,CACDkG,KAAK,CAAE7D,KAAK,IAAK;QAChB,MAAMA,KAAK;MACb,CAAC,CAAC;IACN,CAAC,CAAC,OAAOA,KAAK,EAAE;MACdvE,oBAAW,CAACuE,KAAK,CAAC,0BAA0BA,KAAK,EAAE,EAAE;QACnDpB,MAAM,EAAEC,kBAAO;QACfC,MAAM,EAAEC,kBAAO,CAACkE;MAClB,CAAC,CAAC;MAEF,MAAMjD,KAAK;IACb;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAagE,YAAYA,CAAClC,IAAgB,EAAiC;IACzErG,oBAAW,CAACkD,IAAI,CAAC,8BAA8B,EAAE;MAC/CC,MAAM,EAAEC,kBAAO;MACfC,MAAM,EAAEC,kBAAO,CAACkF;IAClB,CAAC,CAAC;IACF,IAAI;MACF,IAAI,CAACjH,cAAc,CAACiC,SAAS,CAAC,CAC5BC,8BAAkB,CAACgF,qBAAqB,EACxChF,8BAAkB,CAACiF,oBAAoB,CACxC,CAAC;MAEF,IAAIrC,IAAI,CAACsC,WAAW,KAAKrD,kBAAW,CAACsD,QAAQ,IAAI,CAAC,IAAAC,wBAAiB,EAACxC,IAAI,CAACyC,UAAU,CAAC,EAAE;QACpF,MAAMvE,KAAK,GAAG,IAAIwE,KAAK,CAAC,qBAAqB,CAAC;QAC9C;QACAxE,KAAK,CAAC6C,OAAO,GAAG;UAACf,IAAI,EAAE;YAAC2C,MAAM,EAAE;UAAqB;QAAC,CAAY;QAElE,MAAMzE,KAAK;MACb;MAEA,MAAM0E,aAAa,GAAG,MAAM,IAAI,CAACnI,QAAQ,CAAC2F,KAAK,CAAC8B,YAAY,CAAC;QAC3DlC,IAAI,EAAE;UACJyC,UAAU,EACRzC,IAAI,CAACsC,WAAW,KAAKrD,kBAAW,CAACC,OAAO,GAAG,IAAI,CAACrD,WAAW,CAACoC,OAAO,GAAG+B,IAAI,CAACyC,UAAU;UACvFI,MAAM,EAAE7C,IAAI,CAAC6C,MAAM;UACnB/E,UAAU,EAAEkC,IAAI,CAACsC,WAAW;UAC5BQ,WAAW,EAAE9C,IAAI,CAACsC,WAAW,KAAKrD,kBAAW,CAAC8D,SAAS;UACvDC,QAAQ,EAAE,IAAI,CAACC,WAAW,CAACjD,IAAI,CAACsC,WAAW,EAAEtC,IAAI,CAACyC,UAAU,CAAC;UAC7DS,KAAK,EAAE,CAACC,iBAAK,CAAC;UACdC,QAAQ,EAAErF,uBAAY;UACtBsF,MAAM,EAAEtF,uBAAY;UACpBuF,WAAW,EAAE,KAAK;UAClBC,SAAS,EAAExF;QACb;MACF,CAAC,CAAC;MAEF,IAAI,IAAI,CAAClC,WAAW,CAACiD,aAAa,IAAIkB,IAAI,CAACsC,WAAW,KAAKrD,kBAAW,CAACC,OAAO,EAAE;QAC9E,MAAM,IAAI,CAAClE,iBAAiB,CAACwI,sBAAsB,CAAC,CAAC;MACvD;MAEA,MAAMhG,IAAI,GAAG,MAAMoF,aAAa;MAChC,MAAM;QAACa,WAAW;QAAE,GAAGC;MAAS,CAAC,GAAGlG,IAAI,CAACwC,IAAI;MAC7C,IAAI,CAACnE,WAAW,CAAC8H,aAAa,GAAGnG,IAAI,CAACwC,IAAI,CAAC6C,MAAM;MACjD,MAAMe,QAAQ,GAAG;QACf,GAAGF,SAAS;QACZG,SAAS,EAAE;UACTC,IAAI,EAAEL,WAAW,CAACK,IAAI,EAAEjD,MAAM;UAC9BkD,KAAK,EAAEN,WAAW,CAACM,KAAK,EAAElD,MAAM;UAChCmD,MAAM,EAAEP,WAAW,CAACO,MAAM,EAAEnD,MAAM;UAClCoD,SAAS,EAAER,WAAW,CAACQ,SAAS,EAAEpD;QACpC,CAAC;QACDqD,gBAAgB,EAAE1G,IAAI,CAACc;MACzB,CAAC;MAED,IAAI,CAACtD,iBAAiB,CAACmJ,cAAc,CAACnE,IAAI,CAACsC,WAAW,CAAC;MACvD,IAAI,CAACpH,cAAc,CAAC0C,UAAU,CAC5BR,8BAAkB,CAACgF,qBAAqB,EACxC;QACE,GAAGjH,uBAAc,CAAC0C,oCAAoC,CAACL,IAAI,CAAC;QAC5D4G,SAAS,EAAEpE,IAAI,CAACsC,WAAW;QAC3B+B,MAAM,EAAE7G,IAAI,CAACwC,IAAI,CAACqE,MAAM;QACxBC,IAAI,EAAE9G,IAAI,CAACwC,IAAI,CAACsE,IAAI;QACpBpB,KAAK,EAAE1F,IAAI,CAACwC,IAAI,CAACkD,KAAK,EAAEqB,IAAI,CAAC,GAAG,CAAC,IAAIxG;MACvC,CAAC,EACD,CAAC,YAAY,EAAE,UAAU,EAAE,aAAa,CAC1C,CAAC;MAEDpE,oBAAW,CAACqE,GAAG,CACb,uDAAuDR,IAAI,CAACwC,IAAI,CAAC/B,OAAO,iBAAiB+B,IAAI,CAACsC,WAAW,YAAYtC,IAAI,CAAC6C,MAAM,EAAE,EAClI;QACE/F,MAAM,EAAEC,kBAAO;QACfC,MAAM,EAAEC,kBAAO,CAACkF,aAAa;QAC7B7D,UAAU,EAAEd,IAAI,CAACc;MACnB,CACF,CAAC;MAED,OAAOsF,QAAQ;IACjB,CAAC,CAAC,OAAO1F,KAAK,EAAE;MACd,MAAMsG,OAAO,GAAGtG,KAAK,CAAC6C,OAAkB;MACxC,IAAI,CAAC7F,cAAc,CAAC0C,UAAU,CAC5BR,8BAAkB,CAACiF,oBAAoB,EACvC;QACE,GAAGlH,uBAAc,CAAC6F,0CAA0C,CAACwD,OAAO,CAAC;QACrEJ,SAAS,EAAEpE,IAAI,CAACsC;MAClB,CAAC,EACD,CAAC,YAAY,EAAE,UAAU,EAAE,aAAa,CAC1C,CAAC;MACDpE,KAAK,CAACoE,WAAW,GAAGtC,IAAI,CAACsC,WAAW;MACpC,MAAM;QAACpE,KAAK,EAAE+C;MAAa,CAAC,GAAG,IAAAC,sBAAe,EAAChD,KAAK,EAAEjB,kBAAO,CAACkF,aAAa,EAAEpF,kBAAO,CAAC;MAErF,MAAMkE,aAAa;IACrB;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAawD,aAAaA,CAACzE,IAAY,EAAkC;IACvErG,oBAAW,CAACkD,IAAI,CAAC,+BAA+B,EAAE;MAChDC,MAAM,EAAEC,kBAAO;MACfC,MAAM,EAAEC,kBAAO,CAACyH;IAClB,CAAC,CAAC;IACF,IAAI;MACF,IAAI,CAACxJ,cAAc,CAACiC,SAAS,CAAC,CAC5BC,8BAAkB,CAACuH,sBAAsB,EACzCvH,8BAAkB,CAACwH,qBAAqB,CACzC,CAAC;MACF,MAAMC,cAAc,GAAG,IAAI,CAACpK,QAAQ,CAAC2F,KAAK,CAAC0E,MAAM,CAAC;QAChD9E;MACF,CAAC,CAAC;MAEF,MAAMxC,IAAI,GAAG,MAAMqH,cAAc;MAEjC,IAAI,CAAC3J,cAAc,CAAC0C,UAAU,CAC5BR,8BAAkB,CAACuH,sBAAsB,EACzC;QACE,GAAGxJ,uBAAc,CAAC0C,oCAAoC,CAACL,IAAI,CAAC;QAC5DuH,YAAY,EAAE/E,IAAI,CAAC+E;MACrB,CAAC,EACD,CAAC,YAAY,EAAE,UAAU,EAAE,aAAa,CAC1C,CAAC;MAED,IAAI,IAAI,CAAC/J,iBAAiB,EAAE;QAC1B,IAAI,CAACA,iBAAiB,CAACgK,wBAAwB,CAAC,CAAC;MACnD;MAEArL,oBAAW,CAACqE,GAAG,CAAC,6CAA6C,EAAE;QAC7DlB,MAAM,EAAEC,kBAAO;QACfC,MAAM,EAAEC,kBAAO,CAACyH,cAAc;QAC9BpG,UAAU,EAAEd,IAAI,CAACc;MACnB,CAAC,CAAC;MAEF,OAAOd,IAAI;IACb,CAAC,CAAC,OAAOU,KAAK,EAAE;MACd,MAAMsG,OAAO,GAAGtG,KAAK,CAAC6C,OAAkB;MACxC,IAAI,CAAC7F,cAAc,CAAC0C,UAAU,CAC5BR,8BAAkB,CAACwH,qBAAqB,EACxC;QACE,GAAGzJ,uBAAc,CAAC6F,0CAA0C,CAACwD,OAAO,CAAC;QACrEO,YAAY,EAAE/E,IAAI,CAAC+E;MACrB,CAAC,EACD,CAAC,YAAY,EAAE,UAAU,EAAE,aAAa,CAC1C,CAAC;MACD,MAAM;QAAC7G,KAAK,EAAE+C;MAAa,CAAC,GAAG,IAAAC,sBAAe,EAAChD,KAAK,EAAEjB,kBAAO,CAACyH,cAAc,EAAE3H,kBAAO,CAAC;MACtF,MAAMkE,aAAa;IACrB;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACUgC,WAAWA,CAACX,WAAmB,EAAEG,UAAkB,EAAU;IACnE,IAAIH,WAAW,KAAKrD,kBAAW,CAAC8D,SAAS,IAAIT,WAAW,KAAKrD,kBAAW,CAACsD,QAAQ,EAAE;MACjF,OAAOE,UAAU;IACnB;IAEA,OAAOwC,0BAAc,GAAG,IAAI,CAACpJ,WAAW,CAACoC,OAAO;EAClD;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAaiH,aAAaA,CAAClF,IAAiB,EAA6B;IACvErG,oBAAW,CAACkD,IAAI,CAAC,qBAAqB,EAAE;MACtCC,MAAM,EAAEC,kBAAO;MACfC,MAAM,EAAEC,kBAAO,CAACkI;IAClB,CAAC,CAAC;IACF,IAAI;MACF,IAAI,CAACjK,cAAc,CAACiC,SAAS,CAAC,CAC5BC,8BAAkB,CAACgI,0BAA0B,EAC7ChI,8BAAkB,CAACiI,yBAAyB,CAC7C,CAAC;MACF,MAAMC,mBAAmB,GAAG,MAAM,IAAI,CAAC7K,QAAQ,CAAC2F,KAAK,CAACmF,WAAW,CAAC;QAChEvF,IAAI,EAAE;UAAC,GAAGA,IAAI;UAAE/B,OAAO,EAAE+B,IAAI,CAAC/B,OAAO,IAAI,IAAI,CAACpC,WAAW,CAACoC;QAAO;MACnE,CAAC,CAAC;MAEF,IAAI,CAAC/C,cAAc,CAAC0C,UAAU,CAC5BR,8BAAkB,CAACgI,0BAA0B,EAC7C;QACE,GAAGjK,uBAAc,CAAC0C,oCAAoC,CAACyH,mBAAmB,CAAC;QAC3EE,cAAc,EAAExF,IAAI,CAACU,KAAK;QAC1BmC,MAAM,EAAE,IAAI,CAAChH,WAAW,EAAE4J,KAAK,CAAC,CAAC,CAAC,EAAE5C,MAAM,IAAI9E,uBAAY;QAC1DsG,MAAM,EAAEiB,mBAAmB,CAACtF,IAAI,EAAEqE,MAAM;QACxCqB,SAAS,EAAEJ,mBAAmB,CAACtF,IAAI,EAAE0F,SAAS;QAC9CnC,SAAS,EAAEvD,IAAI,CAACuD,SAAS;QACzBoC,qBAAqB,EAAE3F,IAAI,CAAC2F,qBAAqB,IAAI5H;MACvD,CAAC,EACD,CAAC,YAAY,EAAE,UAAU,EAAE,aAAa,CAC1C,CAAC;MAEDpE,oBAAW,CAACqE,GAAG,CACb,kDAAkDsH,mBAAmB,CAACtF,IAAI,CAACuD,SAAS,EAAE,EACtF;QACEzG,MAAM,EAAEC,kBAAO;QACfC,MAAM,EAAEC,kBAAO,CAACkI,eAAe;QAC/B7G,UAAU,EAAEgH,mBAAmB,CAAChH;MAClC,CACF,CAAC;MAED,OAAOgH,mBAAmB;IAC5B,CAAC,CAAC,OAAOpH,KAAK,EAAE;MACd,MAAMsG,OAAO,GAAGtG,KAAK,CAAC6C,OAAkB;MACxC,IAAI,CAAC7F,cAAc,CAAC0C,UAAU,CAC5BR,8BAAkB,CAACiI,yBAAyB,EAC5C;QACE,GAAGlK,uBAAc,CAAC6F,0CAA0C,CAACwD,OAAO,CAAC;QACrE9D,KAAK,EAAEV,IAAI,CAACU,KAAK;QACjB6C,SAAS,EAAEvD,IAAI,CAACuD,SAAS;QACzBoC,qBAAqB,EAAE3F,IAAI,CAAC2F,qBAAqB,IAAI5H;MACvD,CAAC,EACD,CAAC,YAAY,EAAE,UAAU,EAAE,aAAa,CAC1C,CAAC;MACD,MAAM;QAACG,KAAK,EAAE+C;MAAa,CAAC,GAAG,IAAAC,sBAAe,EAAChD,KAAK,EAAEjB,kBAAO,CAACkI,eAAe,EAAEpI,kBAAO,CAAC;MACvF,MAAMkE,aAAa;IACrB;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACUlG,sBAAsB,GAAI6K,KAAa,IAAK;IAClD,MAAMC,SAAS,GAAGC,IAAI,CAACC,KAAK,CAACH,KAAK,CAAC;IACnC;IACA,IAAI,CAACC,SAAS,CAACG,SAAS,IAAIH,SAAS,CAAC7F,IAAI,IAAI6F,SAAS,CAAC7F,IAAI,CAACsE,IAAI,EAAE;MACjE;MACA,IAAI,CAAC2B,IAAI,CAACJ,SAAS,CAAC7F,IAAI,CAACsE,IAAI,EAAEuB,SAAS,CAAC7F,IAAI,CAAC;IAChD;IAEA,IAAI,CAAC6F,SAAS,CAACvB,IAAI,EAAE;MACnB;IACF;IAEA3K,oBAAW,CAACqE,GAAG,CAAC,mBAAmB6H,SAAS,EAAE7F,IAAI,EAAEsE,IAAI,IAAIuB,SAAS,CAACvB,IAAI,EAAE,EAAE;MAC5ExH,MAAM,EAAEC,kBAAO;MACfC,MAAM,EAAEC,kBAAO,CAACiJ;IAClB,CAAC,CAAC;;IAEF;IACA,MAAMC,YAAY,GAAGN,SAAS,CAACvB,IAAI;IACnC,MAAM8B,UAAU,GAAGP,SAAS,EAAE7F,IAAI,EAAEsE,IAAI;IACxC,IAAI6B,YAAY,KAAKE,iBAAS,CAACC,OAAO,IAAIT,SAAS,CAACG,SAAS,KAAK,MAAM,EAAE;MACxE,MAAMO,cAAmC,GAAG;QAC1CC,aAAa,EAAEJ,UAAU,IAAID,YAAY;QACzCM,cAAc,EAAEN,YAAY;QAC5BO,QAAQ,EAAEC,OAAO,CAACd,SAAS,CAAC7F,IAAI;MAClC,CAAC;MACD,IAAI,CAAC9E,cAAc,CAAC0C,UAAU,CAACR,8BAAkB,CAACwJ,wBAAwB,EAAEL,cAAc,EAAE,CAC1F,aAAa,CACd,CAAC;IACJ;IAEA,QAAQV,SAAS,CAACvB,IAAI;MACpB,KAAK+B,iBAAS,CAACQ,iBAAiB;QAC9B;QACA,IAAI,CAACZ,IAAI,CAACa,oBAAY,CAACD,iBAAiB,EAAEhB,SAAS,CAAC7F,IAAI,CAAC;QACzD;MACF,KAAKqG,iBAAS,CAACU,kBAAkB;QAC/B;QACA,IAAI,CAACd,IAAI,CAACa,oBAAY,CAACC,kBAAkB,EAAElB,SAAS,CAAC7F,IAAI,CAAC;QAC1D;MACF;QACE;IACJ;IAEA,IAAI,EAAE6F,SAAS,CAAC7F,IAAI,IAAI6F,SAAS,CAAC7F,IAAI,CAACsE,IAAI,CAAC,EAAE;MAC5C;IACF;IAEA,QAAQuB,SAAS,CAAC7F,IAAI,CAACsE,IAAI;MACzB,KAAK+B,iBAAS,CAACW,2BAA2B;QAAE;UAC1C,MAAM;YAACvD,WAAW;YAAE,GAAGC;UAAS,CAAC,GAAGmC,SAAS,CAAC7F,IAAI;UAClD,MAAMiH,gBAAgB,GAAG;YACvB,GAAGvD,SAAS;YACZG,SAAS,EAAE;cACTC,IAAI,EAAEL,WAAW,CAACK,IAAI,EAAEjD,MAAM;cAC9BkD,KAAK,EAAEN,WAAW,CAACM,KAAK,EAAElD,MAAM;cAChCmD,MAAM,EAAEP,WAAW,CAACO,MAAM,EAAEnD,MAAM;cAClCoD,SAAS,EAAER,WAAW,CAACQ,SAAS,EAAEpD;YACpC,CAAC;YACDqD,gBAAgB,EAAE2B,SAAS,CAACvH;UAC9B,CAAC;UACD,IAAI,CAACtD,iBAAiB,CAACmJ,cAAc,CAACT,SAAS,CAAC5F,UAAyB,CAAC;UAC1E;UACA,IAAI,CAACmI,IAAI,CAACa,oBAAY,CAACE,2BAA2B,EAAEC,gBAAgB,CAAC;UACrE;QACF;MACA,KAAKZ,iBAAS,CAACa,qBAAqB;QAClC;UACE,MAAM;YAACzD,WAAW;YAAE,GAAGC;UAAS,CAAC,GAAGmC,SAAS,CAAC7F,IAAI;UAClD,MAAMmH,kBAAkB,GAAG;YACzB,GAAGzD,SAAS;YACZG,SAAS,EAAE;cACTC,IAAI,EAAEL,WAAW,CAACK,IAAI,EAAEjD,MAAM;cAC9BkD,KAAK,EAAEN,WAAW,CAACM,KAAK,EAAElD,MAAM;cAChCmD,MAAM,EAAEP,WAAW,CAACO,MAAM,EAAEnD,MAAM;cAClCoD,SAAS,EAAER,WAAW,CAACQ,SAAS,EAAEpD;YACpC,CAAC;YACDqD,gBAAgB,EAAE2B,SAAS,CAACvH;UAC9B,CAAC;UACD;UACA,IAAI,CAAC2H,IAAI,CAACa,oBAAY,CAACI,qBAAqB,EAAEC,kBAAkB,CAAC;QACnE;QACA;MACF,KAAKd,iBAAS,CAACjB,0BAA0B;QACvC;QACA,IAAI,CAACa,IAAI,CAACa,oBAAY,CAAC1B,0BAA0B,EAAES,SAAS,CAAC7F,IAAI,CAAC;QAClE;MACF,KAAKqG,iBAAS,CAAChB,yBAAyB;QACtC;QACA,IAAI,CAACY,IAAI,CAACa,oBAAY,CAACzB,yBAAyB,EAAEQ,SAAS,CAAC7F,IAAI,CAAC;QACjE;MACF,KAAKqG,iBAAS,CAACe,0BAA0B;QACvC;QACA,IAAI,CAACnB,IAAI,CAACa,oBAAY,CAACM,0BAA0B,EAAEvB,SAAS,CAAC7F,IAAI,CAAC;QAClE;MACF,KAAKqG,iBAAS,CAACgB,oBAAoB;QACjC;QACA,IAAI,CAACpB,IAAI,CAACa,oBAAY,CAACO,oBAAoB,EAAExB,SAAS,CAAC7F,IAAI,CAAC;QAC5D;MACF,KAAKqG,iBAAS,CAACiB,mBAAmB;QAChC;QACA,IAAI,CAACrB,IAAI,CAACa,oBAAY,CAACQ,mBAAmB,EAAEzB,SAAS,CAAC7F,IAAI,CAAC;QAC3D;MACF,KAAKqG,iBAAS,CAACkB,mBAAmB;QAChC;QACA,IAAI,CAACtB,IAAI,CAACa,oBAAY,CAACS,mBAAmB,EAAE1B,SAAS,CAAC7F,IAAI,CAAC;QAC3D;MACF;QACE;IACJ;EACF,CAAC;;EAED;AACF;AACA;AACA;AACA;EACUzC,mBAAmBA,CAAA,EAAG;IAC5B,IAAI,CAAC9C,QAAQ,CAACmE,iBAAiB,CAAC9D,EAAE,CAAC,gBAAgB,EAAE,IAAI,CAAC+D,oBAAoB,CAAC2I,IAAI,CAAC,IAAI,CAAC,CAAC;EAC5F;;EAEA;AACF;AACA;AACA;AACA;EACU5M,mBAAmBA,CAAA,EAAqB;IAC9C,OAAO;MACL6M,KAAK,EAAE,IAAI,CAACrN,OAAO,EAAEqN,KAAK,IAAI,IAAI;MAClCC,kBAAkB,EAAE,IAAI,CAACtN,OAAO,EAAEsN,kBAAkB,IAAI,KAAK;MAC7DC,UAAU,EAAE,IAAI,CAACvN,OAAO,EAAEuN,UAAU,IAAI,YAAY;MACpDC,eAAe,EAAE,IAAI,CAACxN,OAAO,EAAEwN,eAAe,IAAI;IACpD,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;EACE,MAAc/I,oBAAoBA,CAACgJ,GAA0B,EAAiB;IAC5E,IAAIA,GAAG,CAACC,gBAAgB,EAAE;MACxB;MACAnO,oBAAW,CAACkD,IAAI,CAAC,8CAA8C,EAAE;QAC/DC,MAAM,EAAEC,kBAAO;QACfC,MAAM,EAAEC,kBAAO,CAAC8K;MAClB,CAAC,CAAC;IACJ,CAAC,MAAM,IAAIF,GAAG,CAACG,mBAAmB,EAAE;MAClC;MACArO,oBAAW,CAACkD,IAAI,CACd,+FAA+F,EAC/F;QAACC,MAAM,EAAEC,kBAAO;QAAEC,MAAM,EAAEC,kBAAO,CAAC8K;MAAsB,CAC1D,CAAC;MACD,IAAI,IAAI,CAAC3N,OAAO,IAAI,IAAI,CAACA,OAAO,CAAC4H,qBAAqB,EAAE;QACtD,MAAM,IAAI,CAACC,aAAa,CAAC,CAAC;MAC5B;IACF;EACF;;EAEA;AACF;AACA;AACA;EACE,MAAcA,aAAaA,CAAA,EAAkB;IAC3CtI,oBAAW,CAACkD,IAAI,CAAC,iCAAiC,EAAE;MAClDC,MAAM,EAAEC,kBAAO;MACfC,MAAM,EAAEC,kBAAO,CAACgL;IAClB,CAAC,CAAC;IAEF,IAAI;MACF,MAAMC,eAAe,GAAG,MAAM,IAAI,CAACzN,QAAQ,CAAC2F,KAAK,CAAC+H,MAAM,CAAC,CAAC;MAC1D,MAAM;QACJlK,OAAO;QACP0H,qBAAqB;QACrB7H,UAAU;QACVJ,EAAE;QACF0K,wBAAwB;QACxBC;MACF,CAAC,GAAGH,eAAe,CAAClI,IAAI;MACxB,IAAI;QAACuD;MAAS,CAAC,GAAG2E,eAAe,CAAClI,IAAI;MACtC,IAAI,CAACnE,WAAW,CAACuM,wBAAwB,GAAGA,wBAAwB;MACpE,IAAI,CAACvM,WAAW,CAACwM,2BAA2B,GAAGA,2BAA2B;MAC1E,IAAI,CAACxM,WAAW,CAAC8H,aAAa,GAAGuE,eAAe,CAAClI,IAAI,CAAC6C,MAAM;MAC5D,MAAM,IAAI,CAACyF,gBAAgB,CAACxK,UAAU,EAAiBJ,EAAE,CAAC;MAE1D,IAAIiI,qBAAqB,KAAK,sBAAsB,EAAE;QACpDhM,oBAAW,CAACkD,IAAI,CACd,yFAAyF,EACzF;UAACC,MAAM,EAAEC,kBAAO;UAAEC,MAAM,EAAEC,kBAAO,CAACgL;QAAc,CAClD,CAAC;QACD1E,SAAS,GAAGgF,oCAAwB;QACpC,MAAMC,eAA4B,GAAG;UACnC9H,KAAK,EAAE+H,iCAAqB;UAC5BlF,SAAS;UACToC,qBAAqB;UACrB1H;QACF,CAAC;QACD,IAAI;UACF,MAAMqH,mBAAmB,GAAI,MAAM,IAAI,CAACJ,aAAa,CACnDsD,eACF,CAAwB;UACxB,IAAI,CAAC3M,WAAW,CAACuM,wBAAwB,GACvC9C,mBAAmB,CAACtF,IAAI,CAACoI,wBAAwB;UAEnD,IAAI,CAACvM,WAAW,CAACwM,2BAA2B,GAC1C/C,mBAAmB,CAACtF,IAAI,CAACqI,2BAA2B;QACxD,CAAC,CAAC,OAAOnK,KAAK,EAAE;UACdvE,oBAAW,CAACuE,KAAK,CACf,kGAAkGA,KAAK,EAAE,EACzG;YAACpB,MAAM,EAAEC,kBAAO;YAAEC,MAAM,EAAEC,kBAAO,CAACgL;UAAc,CAClD,CAAC;QACH;MACF;MACA,IAAI,CAACpM,WAAW,CAAC6M,kBAAkB,GAAGnF,SAAS;MAC/C,IAAI,CAAC1H,WAAW,CAAC8M,eAAe,GAAG,IAAI;MACvC;MACA,IAAI,CAAClO,QAAQ,CAACI,gBAAgB,CAACC,EAAE,CAAC,SAAS,EAAE,IAAI,CAACC,sBAAsB,CAAC;MAEzEpB,oBAAW,CAACqE,GAAG,CACb,oEAAoEkK,eAAe,CAAClI,IAAI,CAAClC,UAAU,YAAYoK,eAAe,CAAClI,IAAI,CAAC6C,MAAM,EAAE,EAC5I;QACE/F,MAAM,EAAEC,kBAAO;QACfC,MAAM,EAAEC,kBAAO,CAACgL,cAAc;QAC9B3J,UAAU,EAAE4J,eAAe,CAAC5J;MAC9B,CACF,CAAC;IACH,CAAC,CAAC,OAAOJ,KAAK,EAAE;MACd,MAAM;QAACyE,MAAM;QAAEzE,KAAK,EAAE+C;MAAa,CAAC,GAAG,IAAAC,sBAAe,EACpDhD,KAAK,EACLjB,kBAAO,CAACgL,cAAc,EACtBlL,kBACF,CAAC;MACD,IAAI4F,MAAM,KAAK,iBAAiB,EAAE;QAChChJ,oBAAW,CAACqE,GAAG,CAAC,mDAAmD,EAAE;UACnElB,MAAM,EAAEC,kBAAO;UACfC,MAAM,EAAEC,kBAAO,CAACgL;QAClB,CAAC,CAAC;QAEF;MACF;MACA,MAAMhH,aAAa;IACrB;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAcqH,gBAAgBA,CAACxK,UAAuB,EAAEJ,EAAU,EAAiB;IACjF,IAAI,CAAC1C,iBAAiB,CAACmJ,cAAc,CAACrG,UAAU,CAAC;IACjD,IAAI,CAACjC,WAAW,CAACiC,UAAU,GAAGA,UAAU;IACxC,QAAQA,UAAU;MAChB,KAAKmB,kBAAW,CAACC,OAAO;QACtB,IAAI;UACF,MAAM,IAAI,CAAClE,iBAAiB,CAACwI,sBAAsB,CAAC,CAAC;QACvD,CAAC,CAAC,OAAOtF,KAAK,EAAE;UACdvE,oBAAW,CAACuE,KAAK,CAAC,uCAAuCA,KAAK,EAAE,EAAE;YAChEpB,MAAM,EAAEC,kBAAO;YACfC,MAAM,EAAEC,kBAAO,CAAC2L;UAClB,CAAC,CAAC;UACF,MAAM1K,KAAK;QACb;QACA;MACF,KAAKe,kBAAW,CAACsD,QAAQ;MACzB,KAAKtD,kBAAW,CAAC8D,SAAS;QACxB,IAAI,CAAClH,WAAW,CAAC8B,SAAS,GAAGD,EAAE;QAC/B,IAAI,CAAC7B,WAAW,CAAC6B,EAAE,GAAGA,EAAE;QACxB;MACF;QACE/D,oBAAW,CAACuE,KAAK,CAAC,4BAA4BJ,UAAU,EAAE,EAAE;UAC1DhB,MAAM,EAAEC,kBAAO;UACfC,MAAM,EAAEC,kBAAO,CAAC2L;QAClB,CAAC,CAAC;QACF,MAAM,IAAIlG,KAAK,CAAC,4BAA4B5E,UAAU,EAAE,CAAC;IAC7D;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAa+K,YAAYA,CAACC,WAAmB,EAAEC,MAAc,EAAyB;IACpFpP,oBAAW,CAACkD,IAAI,CAAC,wBAAwB,EAAE;MACzCC,MAAM,EAAEC,kBAAO;MACfC,MAAM,EAAEC,kBAAO,CAAC+L;IAClB,CAAC,CAAC;IACF,IAAI;MACF,IAAI,CAAC9N,cAAc,CAACiC,SAAS,CAAC,CAC5BC,8BAAkB,CAAC6L,oBAAoB,EACvC7L,8BAAkB,CAAC8L,mBAAmB,CACvC,CAAC;;MAEF;MACA,MAAMC,cAA6B,GAAG;QACpCL,WAAW;QACXC,MAAM;QACNK,YAAY,EAAE,IAAI,CAACvN,WAAW,CAACwN,SAAS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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["_default","exports","default","cc","allowMultiLogin","allowAutomatedRelogin","clientType","isKeepAliveEnabled","force","metrics","clientName"],"sources":["config.ts"],"sourcesContent":["/**\n * Default configuration for the Webex Contact Center SDK.\n *\n * @public\n * @example\n * import config from './config';\n * const allowMultiLogin = config.cc.allowMultiLogin;\n * @ignore\n */\nexport default {\n /**\n * Contact Center configuration options.\n * @public\n */\n cc: {\n /**\n * Whether to allow multiple logins from different devices.\n * @type {boolean}\n * @default false\n */\n allowMultiLogin: false,\n /**\n * Whether to automatically attempt relogin on connection loss.\n * @type {boolean}\n * @default true\n */\n allowAutomatedRelogin: true,\n /**\n * The type of client making the connection.\n * @type {string}\n * @default 'WebexCCSDK'\n */\n clientType: 'WebexCCSDK',\n /**\n * Whether to enable keep-alive messages.\n * @type {boolean}\n * @default false\n */\n isKeepAliveEnabled: false,\n /**\n * Whether to force registration.\n * @type {boolean}\n * @default true\n */\n force: true,\n /**\n * Metrics configuration for the client.\n * @public\n */\n metrics: {\n /**\n * Name of the client for metrics.\n * @type {string}\n * @default 'WEBEX_JS_SDK'\n */\n clientName: 'WEBEX_JS_SDK',\n /**\n * Type of client for metrics.\n * @type {string}\n * @default 'WebexCCSDK'\n */\n clientType: 'WebexCCSDK',\n },\n },\n};\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA,IAAAA,QAAA,GAAAC,OAAA,CAAAC,OAAA,GASe;EACb;AACF;AACA;AACA;EACEC,EAAE,EAAE;IACF;AACJ;AACA;AACA;AACA;IACIC,eAAe,EAAE,KAAK;IACtB;AACJ;AACA;AACA;AACA;IACIC,qBAAqB,EAAE,IAAI;IAC3B;AACJ;AACA;AACA;AACA;IACIC,UAAU,EAAE,YAAY;IACxB;AACJ;AACA;AACA;AACA;IACIC,kBAAkB,EAAE,KAAK;IACzB;AACJ;AACA;AACA;AACA;IACIC,KAAK,EAAE,IAAI;IACX;AACJ;AACA;AACA;IACIC,OAAO,EAAE;MACP;AACN;AACA;AACA;AACA;MACMC,UAAU,EAAE,cAAc;MAC1B;AACN;AACA;AACA;AACA;MACMJ,UAAU,EAAE;IACd;EACF;AACF,CAAC"}
1
+ {"version":3,"names":["_default","exports","default","cc","allowMultiLogin","allowAutomatedRelogin","clientType","isKeepAliveEnabled","force","metrics","clientName"],"sources":["config.ts"],"sourcesContent":["/**\n * Default configuration for the Webex Contact Center SDK.\n *\n * @public\n * @example\n * import config from './config';\n * const allowMultiLogin = config.cc.allowMultiLogin;\n * @ignore\n */\nexport default {\n /**\n * Contact Center configuration options.\n * @public\n */\n cc: {\n /**\n * Whether to allow multiple logins from different devices.\n * @type {boolean}\n * @default false\n */\n allowMultiLogin: false,\n /**\n * Whether to automatically attempt relogin on connection loss.\n * @type {boolean}\n * @default true\n */\n allowAutomatedRelogin: true,\n /**\n * The type of client making the connection.\n * @type {string}\n * @default 'WebexCCSDK'\n */\n clientType: 'WebexCCSDK',\n /**\n * Whether to enable keep-alive messages.\n * @type {boolean}\n * @default false\n */\n isKeepAliveEnabled: false,\n /**\n * Whether to force registration.\n * @type {boolean}\n * @default true\n */\n force: true,\n /**\n * Metrics configuration for the client.\n * @public\n */\n metrics: {\n /**\n * Name of the client for metrics.\n * @type {string}\n * @default 'WEBEX_JS_SDK'\n */\n clientName: 'WEBEX_JS_SDK',\n /**\n * Type of client for metrics.\n * @type {string}\n * @default 'WebexCCSDK'\n */\n clientType: 'WebexCCSDK',\n },\n },\n};\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA,IAAAA,QAAA,GAAAC,OAAA,CAAAC,OAAA,GASe;EACb;AACF;AACA;AACA;EACEC,EAAE,EAAE;IACF;AACJ;AACA;AACA;AACA;IACIC,eAAe,EAAE,KAAK;IACtB;AACJ;AACA;AACA;AACA;IACIC,qBAAqB,EAAE,IAAI;IAC3B;AACJ;AACA;AACA;AACA;IACIC,UAAU,EAAE,YAAY;IACxB;AACJ;AACA;AACA;AACA;IACIC,kBAAkB,EAAE,KAAK;IACzB;AACJ;AACA;AACA;AACA;IACIC,KAAK,EAAE,IAAI;IACX;AACJ;AACA;AACA;IACIC,OAAO,EAAE;MACP;AACN;AACA;AACA;AACA;MACMC,UAAU,EAAE,cAAc;MAC1B;AACN;AACA;AACA;AACA;MACMJ,UAAU,EAAE;IACd;EACF;AACF,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["EVENT","exports","READY","TIMEOUT_DURATION","EMPTY_STRING","PRODUCT_NAME","LOG_PREFIX","WEB_CALLING_SERVICE_FILE","CONFIG_FILE_NAME","CC_FILE","CONNECTION_SERVICE_FILE","WEB_SOCKET_MANAGER_FILE","AQM_REQS_FILE","WEBEX_REQUEST_FILE","TASK_MANAGER_FILE","TASK_FILE","OUTDIAL_DIRECTION","ATTRIBUTES","OUTDIAL_MEDIA_TYPE","OUTBOUND_TYPE","UNKNOWN_ERROR","MERCURY_DISCONNECTED_SUCCESS","METHODS","REGISTER","DEREGISTER","GET_BUDDY_AGENTS","CONNECT_WEBSOCKET","STATION_LOGIN","STATION_LOGOUT","STATION_RELOGIN","SET_AGENT_STATE","HANDLE_WEBSOCKET_MESSAGE","SETUP_EVENT_LISTENERS","GET_CONNECTION_CONFIG","HANDLE_CONNECTION_LOST","SILENT_RELOGIN","HANDLE_DEVICE_TYPE","START_OUTDIAL","GET_QUEUES","GET_OUTDIAL_ANI_ENTRIES","UPLOAD_LOGS","UPDATE_AGENT_PROFILE","GET_DEVICE_ID","HANDLE_INCOMING_TASK","HANDLE_TASK_HYDRATE","INCOMING_TASK_LISTENER"],"sources":["constants.ts"],"sourcesContent":["export const EVENT = 'event';\nexport const READY = 'ready';\nexport const TIMEOUT_DURATION = 20000; // 20 seconds timeout duration for webrtc registration\nexport const EMPTY_STRING = '';\nexport const PRODUCT_NAME = 'wxcc_sdk';\n// FILE NAMES\nexport const LOG_PREFIX = 'PLUGIN_CC';\nexport const WEB_CALLING_SERVICE_FILE = 'WebCallingService';\nexport const CONFIG_FILE_NAME = 'config-index';\nexport const CC_FILE = 'cc';\nexport const CONNECTION_SERVICE_FILE = 'connection-service';\nexport const WEB_SOCKET_MANAGER_FILE = 'WebSocketManager';\nexport const AQM_REQS_FILE = 'aqm-reqs';\nexport const WEBEX_REQUEST_FILE = 'WebexRequest';\nexport const TASK_MANAGER_FILE = 'TaskManager';\nexport const TASK_FILE = 'Task';\n// AGENT OUTDIAL CONSTANTS\nexport const OUTDIAL_DIRECTION = 'OUTBOUND';\nexport const ATTRIBUTES = {};\nexport const OUTDIAL_MEDIA_TYPE = 'telephony';\nexport const OUTBOUND_TYPE = 'OUTDIAL';\n\n// Log related constants\nexport const UNKNOWN_ERROR = 'Unknown error';\nexport const MERCURY_DISCONNECTED_SUCCESS = 'Mercury disconnected successfully';\n\n// METHOD NAMES\nexport const METHODS = {\n REGISTER: 'register',\n DEREGISTER: 'deregister',\n GET_BUDDY_AGENTS: 'getBuddyAgents',\n CONNECT_WEBSOCKET: 'connectWebsocket',\n STATION_LOGIN: 'stationLogin',\n STATION_LOGOUT: 'stationLogout',\n STATION_RELOGIN: 'stationReLogin',\n SET_AGENT_STATE: 'setAgentState',\n HANDLE_WEBSOCKET_MESSAGE: 'handleWebsocketMessage',\n SETUP_EVENT_LISTENERS: 'setupEventListeners',\n GET_CONNECTION_CONFIG: 'getConnectionConfig',\n HANDLE_CONNECTION_LOST: 'handleConnectionLost',\n SILENT_RELOGIN: 'silentRelogin',\n HANDLE_DEVICE_TYPE: 'handleDeviceType',\n START_OUTDIAL: 'startOutdial',\n GET_QUEUES: 'getQueues',\n GET_OUTDIAL_ANI_ENTRIES: 'getOutdialAniEntries',\n UPLOAD_LOGS: 'uploadLogs',\n UPDATE_AGENT_PROFILE: 'updateAgentProfile',\n GET_DEVICE_ID: 'getDeviceId',\n HANDLE_INCOMING_TASK: 'handleIncomingTask',\n HANDLE_TASK_HYDRATE: 'handleTaskHydrate',\n INCOMING_TASK_LISTENER: 'incomingTaskListener',\n};\n"],"mappings":";;;;;;AAAO,MAAMA,KAAK,GAAAC,OAAA,CAAAD,KAAA,GAAG,OAAO;AACrB,MAAME,KAAK,GAAAD,OAAA,CAAAC,KAAA,GAAG,OAAO;AACrB,MAAMC,gBAAgB,GAAAF,OAAA,CAAAE,gBAAA,GAAG,KAAK,CAAC,CAAC;AAChC,MAAMC,YAAY,GAAAH,OAAA,CAAAG,YAAA,GAAG,EAAE;AACvB,MAAMC,YAAY,GAAAJ,OAAA,CAAAI,YAAA,GAAG,UAAU;AACtC;AACO,MAAMC,UAAU,GAAAL,OAAA,CAAAK,UAAA,GAAG,WAAW;AAC9B,MAAMC,wBAAwB,GAAAN,OAAA,CAAAM,wBAAA,GAAG,mBAAmB;AACpD,MAAMC,gBAAgB,GAAAP,OAAA,CAAAO,gBAAA,GAAG,cAAc;AACvC,MAAMC,OAAO,GAAAR,OAAA,CAAAQ,OAAA,GAAG,IAAI;AACpB,MAAMC,uBAAuB,GAAAT,OAAA,CAAAS,uBAAA,GAAG,oBAAoB;AACpD,MAAMC,uBAAuB,GAAAV,OAAA,CAAAU,uBAAA,GAAG,kBAAkB;AAClD,MAAMC,aAAa,GAAAX,OAAA,CAAAW,aAAA,GAAG,UAAU;AAChC,MAAMC,kBAAkB,GAAAZ,OAAA,CAAAY,kBAAA,GAAG,cAAc;AACzC,MAAMC,iBAAiB,GAAAb,OAAA,CAAAa,iBAAA,GAAG,aAAa;AACvC,MAAMC,SAAS,GAAAd,OAAA,CAAAc,SAAA,GAAG,MAAM;AAC/B;AACO,MAAMC,iBAAiB,GAAAf,OAAA,CAAAe,iBAAA,GAAG,UAAU;AACpC,MAAMC,UAAU,GAAAhB,OAAA,CAAAgB,UAAA,GAAG,CAAC,CAAC;AACrB,MAAMC,kBAAkB,GAAAjB,OAAA,CAAAiB,kBAAA,GAAG,WAAW;AACtC,MAAMC,aAAa,GAAAlB,OAAA,CAAAkB,aAAA,GAAG,SAAS;;AAEtC;AACO,MAAMC,aAAa,GAAAnB,OAAA,CAAAmB,aAAA,GAAG,eAAe;AACrC,MAAMC,4BAA4B,GAAApB,OAAA,CAAAoB,4BAAA,GAAG,mCAAmC;;AAE/E;AACO,MAAMC,OAAO,GAAArB,OAAA,CAAAqB,OAAA,GAAG;EACrBC,QAAQ,EAAE,UAAU;EACpBC,UAAU,EAAE,YAAY;EACxBC,gBAAgB,EAAE,gBAAgB;EAClCC,iBAAiB,EAAE,kBAAkB;EACrCC,aAAa,EAAE,cAAc;EAC7BC,cAAc,EAAE,eAAe;EAC/BC,eAAe,EAAE,gBAAgB;EACjCC,eAAe,EAAE,eAAe;EAChCC,wBAAwB,EAAE,wBAAwB;EAClDC,qBAAqB,EAAE,qBAAqB;EAC5CC,qBAAqB,EAAE,qBAAqB;EAC5CC,sBAAsB,EAAE,sBAAsB;EAC9CC,cAAc,EAAE,eAAe;EAC/BC,kBAAkB,EAAE,kBAAkB;EACtCC,aAAa,EAAE,cAAc;EAC7BC,UAAU,EAAE,WAAW;EACvBC,uBAAuB,EAAE,sBAAsB;EAC/CC,WAAW,EAAE,YAAY;EACzBC,oBAAoB,EAAE,oBAAoB;EAC1CC,aAAa,EAAE,aAAa;EAC5BC,oBAAoB,EAAE,oBAAoB;EAC1CC,mBAAmB,EAAE,mBAAmB;EACxCC,sBAAsB,EAAE;AAC1B,CAAC"}
1
+ {"version":3,"names":["EVENT","exports","READY","TIMEOUT_DURATION","EMPTY_STRING","PRODUCT_NAME","LOG_PREFIX","WEB_CALLING_SERVICE_FILE","CONFIG_FILE_NAME","CC_FILE","CONNECTION_SERVICE_FILE","WEB_SOCKET_MANAGER_FILE","AQM_REQS_FILE","WEBEX_REQUEST_FILE","TASK_MANAGER_FILE","TASK_FILE","OUTDIAL_DIRECTION","ATTRIBUTES","OUTDIAL_MEDIA_TYPE","OUTBOUND_TYPE","UNKNOWN_ERROR","MERCURY_DISCONNECTED_SUCCESS","METHODS","REGISTER","DEREGISTER","GET_BUDDY_AGENTS","CONNECT_WEBSOCKET","STATION_LOGIN","STATION_LOGOUT","STATION_RELOGIN","SET_AGENT_STATE","HANDLE_WEBSOCKET_MESSAGE","SETUP_EVENT_LISTENERS","GET_CONNECTION_CONFIG","HANDLE_CONNECTION_LOST","SILENT_RELOGIN","HANDLE_DEVICE_TYPE","START_OUTDIAL","GET_QUEUES","GET_OUTDIAL_ANI_ENTRIES","UPLOAD_LOGS","UPDATE_AGENT_PROFILE","GET_DEVICE_ID","HANDLE_INCOMING_TASK","HANDLE_TASK_HYDRATE","INCOMING_TASK_LISTENER"],"sources":["constants.ts"],"sourcesContent":["export const EVENT = 'event';\nexport const READY = 'ready';\nexport const TIMEOUT_DURATION = 20000; // 20 seconds timeout duration for webrtc registration\nexport const EMPTY_STRING = '';\nexport const PRODUCT_NAME = 'wxcc_sdk';\n// FILE NAMES\nexport const LOG_PREFIX = 'PLUGIN_CC';\nexport const WEB_CALLING_SERVICE_FILE = 'WebCallingService';\nexport const CONFIG_FILE_NAME = 'config-index';\nexport const CC_FILE = 'cc';\nexport const CONNECTION_SERVICE_FILE = 'connection-service';\nexport const WEB_SOCKET_MANAGER_FILE = 'WebSocketManager';\nexport const AQM_REQS_FILE = 'aqm-reqs';\nexport const WEBEX_REQUEST_FILE = 'WebexRequest';\nexport const TASK_MANAGER_FILE = 'TaskManager';\nexport const TASK_FILE = 'Task';\n// AGENT OUTDIAL CONSTANTS\nexport const OUTDIAL_DIRECTION = 'OUTBOUND';\nexport const ATTRIBUTES = {};\nexport const OUTDIAL_MEDIA_TYPE = 'telephony';\nexport const OUTBOUND_TYPE = 'OUTDIAL';\n\n// Log related constants\nexport const UNKNOWN_ERROR = 'Unknown error';\nexport const MERCURY_DISCONNECTED_SUCCESS = 'Mercury disconnected successfully';\n\n// METHOD NAMES\nexport const METHODS = {\n REGISTER: 'register',\n DEREGISTER: 'deregister',\n GET_BUDDY_AGENTS: 'getBuddyAgents',\n CONNECT_WEBSOCKET: 'connectWebsocket',\n STATION_LOGIN: 'stationLogin',\n STATION_LOGOUT: 'stationLogout',\n STATION_RELOGIN: 'stationReLogin',\n SET_AGENT_STATE: 'setAgentState',\n HANDLE_WEBSOCKET_MESSAGE: 'handleWebsocketMessage',\n SETUP_EVENT_LISTENERS: 'setupEventListeners',\n GET_CONNECTION_CONFIG: 'getConnectionConfig',\n HANDLE_CONNECTION_LOST: 'handleConnectionLost',\n SILENT_RELOGIN: 'silentRelogin',\n HANDLE_DEVICE_TYPE: 'handleDeviceType',\n START_OUTDIAL: 'startOutdial',\n GET_QUEUES: 'getQueues',\n GET_OUTDIAL_ANI_ENTRIES: 'getOutdialAniEntries',\n UPLOAD_LOGS: 'uploadLogs',\n UPDATE_AGENT_PROFILE: 'updateAgentProfile',\n GET_DEVICE_ID: 'getDeviceId',\n HANDLE_INCOMING_TASK: 'handleIncomingTask',\n HANDLE_TASK_HYDRATE: 'handleTaskHydrate',\n INCOMING_TASK_LISTENER: 'incomingTaskListener',\n};\n"],"mappings":";;;;;;AAAO,MAAMA,KAAK,GAAAC,OAAA,CAAAD,KAAA,GAAG,OAAO;AACrB,MAAME,KAAK,GAAAD,OAAA,CAAAC,KAAA,GAAG,OAAO;AACrB,MAAMC,gBAAgB,GAAAF,OAAA,CAAAE,gBAAA,GAAG,KAAK,CAAC,CAAC;AAChC,MAAMC,YAAY,GAAAH,OAAA,CAAAG,YAAA,GAAG,EAAE;AACvB,MAAMC,YAAY,GAAAJ,OAAA,CAAAI,YAAA,GAAG,UAAU;AACtC;AACO,MAAMC,UAAU,GAAAL,OAAA,CAAAK,UAAA,GAAG,WAAW;AAC9B,MAAMC,wBAAwB,GAAAN,OAAA,CAAAM,wBAAA,GAAG,mBAAmB;AACpD,MAAMC,gBAAgB,GAAAP,OAAA,CAAAO,gBAAA,GAAG,cAAc;AACvC,MAAMC,OAAO,GAAAR,OAAA,CAAAQ,OAAA,GAAG,IAAI;AACpB,MAAMC,uBAAuB,GAAAT,OAAA,CAAAS,uBAAA,GAAG,oBAAoB;AACpD,MAAMC,uBAAuB,GAAAV,OAAA,CAAAU,uBAAA,GAAG,kBAAkB;AAClD,MAAMC,aAAa,GAAAX,OAAA,CAAAW,aAAA,GAAG,UAAU;AAChC,MAAMC,kBAAkB,GAAAZ,OAAA,CAAAY,kBAAA,GAAG,cAAc;AACzC,MAAMC,iBAAiB,GAAAb,OAAA,CAAAa,iBAAA,GAAG,aAAa;AACvC,MAAMC,SAAS,GAAAd,OAAA,CAAAc,SAAA,GAAG,MAAM;AAC/B;AACO,MAAMC,iBAAiB,GAAAf,OAAA,CAAAe,iBAAA,GAAG,UAAU;AACpC,MAAMC,UAAU,GAAAhB,OAAA,CAAAgB,UAAA,GAAG,CAAC,CAAC;AACrB,MAAMC,kBAAkB,GAAAjB,OAAA,CAAAiB,kBAAA,GAAG,WAAW;AACtC,MAAMC,aAAa,GAAAlB,OAAA,CAAAkB,aAAA,GAAG,SAAS;;AAEtC;AACO,MAAMC,aAAa,GAAAnB,OAAA,CAAAmB,aAAA,GAAG,eAAe;AACrC,MAAMC,4BAA4B,GAAApB,OAAA,CAAAoB,4BAAA,GAAG,mCAAmC;;AAE/E;AACO,MAAMC,OAAO,GAAArB,OAAA,CAAAqB,OAAA,GAAG;EACrBC,QAAQ,EAAE,UAAU;EACpBC,UAAU,EAAE,YAAY;EACxBC,gBAAgB,EAAE,gBAAgB;EAClCC,iBAAiB,EAAE,kBAAkB;EACrCC,aAAa,EAAE,cAAc;EAC7BC,cAAc,EAAE,eAAe;EAC/BC,eAAe,EAAE,gBAAgB;EACjCC,eAAe,EAAE,eAAe;EAChCC,wBAAwB,EAAE,wBAAwB;EAClDC,qBAAqB,EAAE,qBAAqB;EAC5CC,qBAAqB,EAAE,qBAAqB;EAC5CC,sBAAsB,EAAE,sBAAsB;EAC9CC,cAAc,EAAE,eAAe;EAC/BC,kBAAkB,EAAE,kBAAkB;EACtCC,aAAa,EAAE,cAAc;EAC7BC,UAAU,EAAE,WAAW;EACvBC,uBAAuB,EAAE,sBAAsB;EAC/CC,WAAW,EAAE,YAAY;EACzBC,oBAAoB,EAAE,oBAAoB;EAC1CC,aAAa,EAAE,aAAa;EAC5BC,oBAAoB,EAAE,oBAAoB;EAC1CC,mBAAmB,EAAE,mBAAmB;EACxCC,sBAAsB,EAAE;AAC1B,CAAC","ignoreList":[]}