@webex/contact-center 3.11.0 → 3.12.0-llmrefactor.2

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 (267) hide show
  1. package/.sdd/manifest.json +882 -0
  2. package/AGENTS.md +94 -0
  3. package/ai-docs/ARCHITECTURE.md +168 -0
  4. package/ai-docs/CONTRACTS.md +46 -0
  5. package/ai-docs/GETTING_STARTED.md +168 -0
  6. package/ai-docs/GLOSSARY.md +43 -0
  7. package/ai-docs/README.md +138 -0
  8. package/ai-docs/REVIEW_CHECKLIST.md +41 -0
  9. package/ai-docs/RULES.md +444 -0
  10. package/ai-docs/SECURITY.md +52 -0
  11. package/ai-docs/SERVICE_STATE.md +48 -0
  12. package/ai-docs/SPEC_INDEX.md +65 -0
  13. package/ai-docs/adr/0001-spec-source-policy.md +55 -0
  14. package/ai-docs/adr/README.md +8 -0
  15. package/ai-docs/adr/_adr-template.md +31 -0
  16. package/ai-docs/contact-center-spec.md +341 -0
  17. package/ai-docs/features/generated-spec-conformance-fidelity-remediation/spec/feature-spec.md +117 -0
  18. package/ai-docs/features/residual-warning-coverage-completion/spec/feature-spec.md +203 -0
  19. package/ai-docs/features/validator-code-fidelity-drift-fix/spec/feature-spec.md +315 -0
  20. package/ai-docs/patterns/event-driven-patterns.md +485 -0
  21. package/ai-docs/patterns/testing-patterns.md +480 -0
  22. package/ai-docs/patterns/typescript-patterns.md +365 -0
  23. package/ai-docs/templates/README.md +102 -0
  24. package/ai-docs/templates/documentation/create-agents-md.md +240 -0
  25. package/ai-docs/templates/documentation/create-architecture-md.md +295 -0
  26. package/ai-docs/templates/existing-service/bug-fix.md +254 -0
  27. package/ai-docs/templates/existing-service/feature-enhancement.md +450 -0
  28. package/ai-docs/templates/new-method/00-master.md +80 -0
  29. package/ai-docs/templates/new-method/01-requirements.md +232 -0
  30. package/ai-docs/templates/new-method/02-implementation.md +295 -0
  31. package/ai-docs/templates/new-method/03-tests.md +201 -0
  32. package/ai-docs/templates/new-method/04-validation.md +141 -0
  33. package/ai-docs/templates/new-service/00-master.md +109 -0
  34. package/ai-docs/templates/new-service/01-pre-questions.md +159 -0
  35. package/ai-docs/templates/new-service/02-code-generation.md +346 -0
  36. package/ai-docs/templates/new-service/03-integration.md +178 -0
  37. package/ai-docs/templates/new-service/04-test-generation.md +205 -0
  38. package/ai-docs/templates/new-service/05-validation.md +145 -0
  39. package/dist/cc.js +379 -50
  40. package/dist/cc.js.map +1 -1
  41. package/dist/config.js +6 -0
  42. package/dist/config.js.map +1 -1
  43. package/dist/constants.js +22 -2
  44. package/dist/constants.js.map +1 -1
  45. package/dist/index.js +27 -5
  46. package/dist/index.js.map +1 -1
  47. package/dist/metrics/behavioral-events.js +114 -0
  48. package/dist/metrics/behavioral-events.js.map +1 -1
  49. package/dist/metrics/constants.js +32 -3
  50. package/dist/metrics/constants.js.map +1 -1
  51. package/dist/services/ApiAiAssistant.js +318 -0
  52. package/dist/services/ApiAiAssistant.js.map +1 -0
  53. package/dist/services/UserPreference.js +427 -0
  54. package/dist/services/UserPreference.js.map +1 -0
  55. package/dist/services/agent/types.js.map +1 -1
  56. package/dist/services/config/Util.js +8 -4
  57. package/dist/services/config/Util.js.map +1 -1
  58. package/dist/services/config/constants.js +35 -2
  59. package/dist/services/config/constants.js.map +1 -1
  60. package/dist/services/config/index.js +41 -2
  61. package/dist/services/config/index.js.map +1 -1
  62. package/dist/services/config/types.js +66 -8
  63. package/dist/services/config/types.js.map +1 -1
  64. package/dist/services/constants.js +27 -1
  65. package/dist/services/constants.js.map +1 -1
  66. package/dist/services/core/Err.js.map +1 -1
  67. package/dist/services/core/Utils.js +122 -25
  68. package/dist/services/core/Utils.js.map +1 -1
  69. package/dist/services/core/aqm-reqs.js +92 -17
  70. package/dist/services/core/aqm-reqs.js.map +1 -1
  71. package/dist/services/core/websocket/WebSocketManager.js +22 -6
  72. package/dist/services/core/websocket/WebSocketManager.js.map +1 -1
  73. package/dist/services/core/websocket/connection-service.js +3 -1
  74. package/dist/services/core/websocket/connection-service.js.map +1 -1
  75. package/dist/services/core/websocket/types.js.map +1 -1
  76. package/dist/services/index.js +6 -0
  77. package/dist/services/index.js.map +1 -1
  78. package/dist/services/task/Task.js +688 -0
  79. package/dist/services/task/Task.js.map +1 -0
  80. package/dist/services/task/TaskFactory.js +45 -0
  81. package/dist/services/task/TaskFactory.js.map +1 -0
  82. package/dist/services/task/TaskManager.js +751 -457
  83. package/dist/services/task/TaskManager.js.map +1 -1
  84. package/dist/services/task/TaskUtils.js +220 -23
  85. package/dist/services/task/TaskUtils.js.map +1 -1
  86. package/dist/services/task/constants.js +23 -2
  87. package/dist/services/task/constants.js.map +1 -1
  88. package/dist/services/task/dialer.js +129 -0
  89. package/dist/services/task/dialer.js.map +1 -1
  90. package/dist/services/task/digital/Digital.js +77 -0
  91. package/dist/services/task/digital/Digital.js.map +1 -0
  92. package/dist/services/task/state-machine/TaskStateMachine.js +873 -0
  93. package/dist/services/task/state-machine/TaskStateMachine.js.map +1 -0
  94. package/dist/services/task/state-machine/actions.js +567 -0
  95. package/dist/services/task/state-machine/actions.js.map +1 -0
  96. package/dist/services/task/state-machine/constants.js +161 -0
  97. package/dist/services/task/state-machine/constants.js.map +1 -0
  98. package/dist/services/task/state-machine/guards.js +382 -0
  99. package/dist/services/task/state-machine/guards.js.map +1 -0
  100. package/dist/services/task/state-machine/index.js +53 -0
  101. package/dist/services/task/state-machine/index.js.map +1 -0
  102. package/dist/services/task/state-machine/types.js +54 -0
  103. package/dist/services/task/state-machine/types.js.map +1 -0
  104. package/dist/services/task/state-machine/uiControlsComputer.js +603 -0
  105. package/dist/services/task/state-machine/uiControlsComputer.js.map +1 -0
  106. package/dist/services/task/taskDataNormalizer.js +99 -0
  107. package/dist/services/task/taskDataNormalizer.js.map +1 -0
  108. package/dist/services/task/types.js +227 -4
  109. package/dist/services/task/types.js.map +1 -1
  110. package/dist/services/task/voice/Voice.js +1044 -0
  111. package/dist/services/task/voice/Voice.js.map +1 -0
  112. package/dist/services/task/voice/WebRTC.js +149 -0
  113. package/dist/services/task/voice/WebRTC.js.map +1 -0
  114. package/dist/types/cc.d.ts +894 -0
  115. package/dist/types/config.d.ts +72 -0
  116. package/dist/types/constants.d.ts +66 -0
  117. package/dist/types/index.d.ts +199 -0
  118. package/dist/types/logger-proxy.d.ts +71 -0
  119. package/dist/types/metrics/MetricsManager.d.ts +223 -0
  120. package/dist/types/metrics/behavioral-events.d.ts +29 -0
  121. package/dist/types/metrics/constants.d.ts +181 -0
  122. package/dist/types/services/AddressBook.d.ts +74 -0
  123. package/dist/types/services/ApiAiAssistant.d.ts +49 -0
  124. package/dist/types/services/EntryPoint.d.ts +67 -0
  125. package/dist/types/services/Queue.d.ts +76 -0
  126. package/dist/types/services/UserPreference.d.ts +118 -0
  127. package/dist/types/services/WebCallingService.d.ts +1 -0
  128. package/dist/types/services/agent/index.d.ts +46 -0
  129. package/dist/types/services/agent/types.d.ts +413 -0
  130. package/dist/types/services/config/Util.d.ts +20 -0
  131. package/dist/types/services/config/constants.d.ts +270 -0
  132. package/dist/types/services/config/index.d.ts +177 -0
  133. package/dist/types/services/config/types.d.ts +1368 -0
  134. package/dist/types/services/constants.d.ts +110 -0
  135. package/dist/types/services/core/Err.d.ts +125 -0
  136. package/dist/types/services/core/GlobalTypes.d.ts +58 -0
  137. package/dist/types/services/core/Utils.d.ts +121 -0
  138. package/dist/types/services/core/WebexRequest.d.ts +22 -0
  139. package/dist/types/services/core/aqm-reqs.d.ts +65 -0
  140. package/dist/types/services/core/constants.d.ts +99 -0
  141. package/dist/types/services/core/types.d.ts +47 -0
  142. package/dist/types/services/core/websocket/WebSocketManager.d.ts +36 -0
  143. package/dist/types/services/core/websocket/connection-service.d.ts +27 -0
  144. package/dist/types/services/core/websocket/keepalive.worker.d.ts +2 -0
  145. package/dist/types/services/core/websocket/types.d.ts +37 -0
  146. package/dist/types/services/index.d.ts +54 -0
  147. package/dist/types/services/task/AutoWrapup.d.ts +40 -0
  148. package/dist/types/services/task/Task.d.ts +157 -0
  149. package/dist/types/services/task/TaskFactory.d.ts +12 -0
  150. package/dist/types/services/task/TaskManager.d.ts +1 -0
  151. package/dist/types/services/task/TaskUtils.d.ts +138 -0
  152. package/dist/types/services/task/constants.d.ts +91 -0
  153. package/dist/types/services/task/contact.d.ts +69 -0
  154. package/dist/types/services/task/dialer.d.ts +73 -0
  155. package/dist/types/services/task/digital/Digital.d.ts +22 -0
  156. package/dist/types/services/task/state-machine/TaskStateMachine.d.ts +1194 -0
  157. package/dist/types/services/task/state-machine/actions.d.ts +10 -0
  158. package/dist/types/services/task/state-machine/constants.d.ts +107 -0
  159. package/dist/types/services/task/state-machine/guards.d.ts +102 -0
  160. package/dist/types/services/task/state-machine/index.d.ts +13 -0
  161. package/dist/types/services/task/state-machine/types.d.ts +269 -0
  162. package/dist/types/services/task/state-machine/uiControlsComputer.d.ts +9 -0
  163. package/dist/types/services/task/taskDataNormalizer.d.ts +10 -0
  164. package/dist/types/services/task/types.d.ts +1856 -0
  165. package/dist/types/services/task/voice/Voice.d.ts +184 -0
  166. package/dist/types/services/task/voice/WebRTC.d.ts +53 -0
  167. package/dist/types/types.d.ts +778 -0
  168. package/dist/types/utils/PageCache.d.ts +173 -0
  169. package/dist/types/webex-config.d.ts +53 -0
  170. package/dist/types/webex.d.ts +8 -0
  171. package/dist/types.js +130 -1
  172. package/dist/types.js.map +1 -1
  173. package/dist/webex.js +14 -2
  174. package/dist/webex.js.map +1 -1
  175. package/package.json +16 -12
  176. package/src/cc.ts +477 -51
  177. package/src/config.ts +6 -0
  178. package/src/constants.ts +21 -1
  179. package/src/index.ts +24 -5
  180. package/src/metrics/ai-docs/AGENTS.md +350 -0
  181. package/src/metrics/ai-docs/ARCHITECTURE.md +338 -0
  182. package/src/metrics/ai-docs/metrics-spec.md +854 -0
  183. package/src/metrics/behavioral-events.ts +120 -0
  184. package/src/metrics/constants.ts +37 -3
  185. package/src/services/ApiAiAssistant.ts +412 -0
  186. package/src/services/UserPreference.ts +509 -0
  187. package/src/services/agent/ai-docs/AGENTS.md +240 -0
  188. package/src/services/agent/ai-docs/ARCHITECTURE.md +304 -0
  189. package/src/services/agent/ai-docs/agent-spec.md +504 -0
  190. package/src/services/agent/types.ts +1 -1
  191. package/src/services/ai-docs/AGENTS.md +386 -0
  192. package/src/services/ai-docs/services-spec.md +492 -0
  193. package/src/services/config/Util.ts +10 -2
  194. package/src/services/config/ai-docs/AGENTS.md +255 -0
  195. package/src/services/config/ai-docs/ARCHITECTURE.md +426 -0
  196. package/src/services/config/ai-docs/config-spec.md +669 -0
  197. package/src/services/config/constants.ts +37 -1
  198. package/src/services/config/index.ts +45 -1
  199. package/src/services/config/types.ts +241 -11
  200. package/src/services/constants.ts +29 -0
  201. package/src/services/core/Err.ts +3 -0
  202. package/src/services/core/Utils.ts +143 -30
  203. package/src/services/core/ai-docs/AGENTS.md +381 -0
  204. package/src/services/core/ai-docs/ARCHITECTURE.md +698 -0
  205. package/src/services/core/ai-docs/core-spec.md +783 -0
  206. package/src/services/core/aqm-reqs.ts +100 -22
  207. package/src/services/core/websocket/WebSocketManager.ts +23 -6
  208. package/src/services/core/websocket/connection-service.ts +5 -1
  209. package/src/services/core/websocket/types.ts +1 -1
  210. package/src/services/index.ts +4 -0
  211. package/src/services/task/Task.ts +837 -0
  212. package/src/services/task/TaskFactory.ts +55 -0
  213. package/src/services/task/TaskManager.ts +793 -521
  214. package/src/services/task/TaskUtils.ts +314 -24
  215. package/src/services/task/ai-docs/AGENTS.md +457 -0
  216. package/src/services/task/ai-docs/ARCHITECTURE.md +594 -0
  217. package/src/services/task/ai-docs/task-spec.md +1319 -0
  218. package/src/services/task/constants.ts +23 -0
  219. package/src/services/task/dialer.ts +136 -1
  220. package/src/services/task/digital/Digital.ts +95 -0
  221. package/src/services/task/state-machine/TaskStateMachine.ts +1166 -0
  222. package/src/services/task/state-machine/actions.ts +738 -0
  223. package/src/services/task/state-machine/ai-docs/AGENTS.md +458 -0
  224. package/src/services/task/state-machine/ai-docs/ARCHITECTURE.md +1137 -0
  225. package/src/services/task/state-machine/ai-docs/task-state-machine-spec.md +2177 -0
  226. package/src/services/task/state-machine/constants.ts +172 -0
  227. package/src/services/task/state-machine/guards.ts +445 -0
  228. package/src/services/task/state-machine/index.ts +28 -0
  229. package/src/services/task/state-machine/types.ts +243 -0
  230. package/src/services/task/state-machine/uiControlsComputer.ts +961 -0
  231. package/src/services/task/taskDataNormalizer.ts +137 -0
  232. package/src/services/task/types.ts +734 -71
  233. package/src/services/task/voice/Voice.ts +1270 -0
  234. package/src/services/task/voice/WebRTC.ts +187 -0
  235. package/src/types.ts +205 -2
  236. package/src/utils/AGENTS.md +278 -0
  237. package/src/utils/ai-docs/utils-spec.md +381 -0
  238. package/src/webex.js +2 -0
  239. package/test/unit/spec/cc.ts +503 -43
  240. package/test/unit/spec/logger-proxy.ts +70 -0
  241. package/test/unit/spec/services/ApiAiAssistant.ts +273 -0
  242. package/test/unit/spec/services/UserPreference.ts +401 -0
  243. package/test/unit/spec/services/WebCallingService.ts +7 -1
  244. package/test/unit/spec/services/config/index.ts +85 -29
  245. package/test/unit/spec/services/core/Utils.ts +481 -2
  246. package/test/unit/spec/services/core/websocket/WebSocketManager.ts +137 -41
  247. package/test/unit/spec/services/core/websocket/connection-service.ts +3 -1
  248. package/test/unit/spec/services/task/AutoWrapup.ts +63 -0
  249. package/test/unit/spec/services/task/Task.ts +477 -0
  250. package/test/unit/spec/services/task/TaskFactory.ts +62 -0
  251. package/test/unit/spec/services/task/TaskManager.ts +1001 -1003
  252. package/test/unit/spec/services/task/TaskUtils.ts +235 -0
  253. package/test/unit/spec/services/task/dialer.ts +372 -96
  254. package/test/unit/spec/services/task/digital/Digital.ts +105 -0
  255. package/test/unit/spec/services/task/state-machine/TaskStateMachine.ts +2651 -0
  256. package/test/unit/spec/services/task/state-machine/guards.ts +637 -0
  257. package/test/unit/spec/services/task/state-machine/types.ts +18 -0
  258. package/test/unit/spec/services/task/state-machine/uiControlsComputer.ts +2663 -0
  259. package/test/unit/spec/services/task/taskTestUtils.ts +87 -0
  260. package/test/unit/spec/services/task/voice/Voice.ts +649 -0
  261. package/test/unit/spec/services/task/voice/WebRTC.ts +235 -0
  262. package/umd/contact-center.min.js +2 -2
  263. package/umd/contact-center.min.js.map +1 -1
  264. package/dist/services/task/index.js +0 -1525
  265. package/dist/services/task/index.js.map +0 -1
  266. package/src/services/task/index.ts +0 -1801
  267. package/test/unit/spec/services/task/index.ts +0 -2184
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.WebSocketManager = void 0;
6
+ exports.default = exports.WebSocketManager = void 0;
7
7
  var _events = _interopRequireDefault(require("events"));
8
8
  var _types = require("../../../types");
9
9
  var _constants = require("../../constants");
@@ -40,9 +40,12 @@ class WebSocketManager extends _events.default {
40
40
  this.keepaliveWorker = new Worker(URL.createObjectURL(workerScriptBlob));
41
41
  }
42
42
  async initWebSocket(options) {
43
- const connectionConfig = options.body;
43
+ const {
44
+ body: connectionConfig,
45
+ resource
46
+ } = options;
44
47
  try {
45
- await this.register(connectionConfig);
48
+ await this.register(connectionConfig, resource);
46
49
  } catch (error) {
47
50
  _loggerProxy.default.error(`[WebSocketStatus] | Error in registering Websocket ${error}`, {
48
51
  module: _constants3.WEB_SOCKET_MANAGER_FILE,
@@ -77,13 +80,25 @@ class WebSocketManager extends _events.default {
77
80
  handleConnectionLost(event) {
78
81
  this.isConnectionLost = event.isConnectionLost;
79
82
  }
80
- async register(connectionConfig) {
83
+ async register(connectionConfig, resource) {
81
84
  try {
85
+ // X-ORGANIZATION-ID header is only required for INT environments
86
+ const isIntEnv = this.webex.internal?.services?.isIntegrationEnvironment() || false;
87
+ const orgId = this.webex.credentials.getOrgId();
88
+ if (isIntEnv && orgId) {
89
+ _loggerProxy.default.log(`[WebSocketManager] Adding X-ORGANIZATION-ID header for INT environment`, {
90
+ module: _constants3.WEB_SOCKET_MANAGER_FILE,
91
+ method: _constants2.METHODS.REGISTER
92
+ });
93
+ }
82
94
  const subscribeResponse = await this.webex.request({
83
95
  service: _constants.WCC_API_GATEWAY,
84
- resource: _constants.SUBSCRIBE_API,
96
+ resource,
85
97
  method: _types.HTTP_METHODS.POST,
86
- body: connectionConfig
98
+ body: connectionConfig,
99
+ headers: isIntEnv && orgId ? {
100
+ 'X-ORGANIZATION-ID': orgId
101
+ } : undefined
87
102
  });
88
103
  this.url = subscribeResponse.body.webSocketUrl;
89
104
  } catch (e) {
@@ -188,4 +203,5 @@ class WebSocketManager extends _events.default {
188
203
  }
189
204
  }
190
205
  exports.WebSocketManager = WebSocketManager;
206
+ var _default = exports.default = WebSocketManager;
191
207
  //# sourceMappingURL=WebSocketManager.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_events","_interopRequireDefault","require","_types","_constants","_types2","_loggerProxy","_keepalive","_constants2","_constants3","e","__esModule","default","WebSocketManager","EventEmitter","url","welcomePromiseResolve","constructor","options","webex","shouldReconnect","websocket","isSocketClosed","isWelcomeReceived","forceCloseWebSocketOnTimeout","isConnectionLost","workerScriptBlob","Blob","workerScript","type","keepaliveWorker","Worker","URL","createObjectURL","initWebSocket","connectionConfig","body","register","error","LoggerProxy","module","WEB_SOCKET_MANAGER_FILE","method","METHODS","INIT_WEB_SOCKET","Promise","resolve","reject","connect","catch","close","reason","postMessage","log","CLOSE","handleConnectionLost","event","subscribeResponse","request","service","WCC_API_GATEWAY","resource","SUBSCRIBE_API","HTTP_METHODS","POST","webSocketUrl","REGISTER","undefined","CONNECT","WebSocket","onopen","send","JSON","stringify","keepalive","onmessage","keepAliveEvent","data","intervalDuration","KEEPALIVE_WORKER_INTERVAL","closeSocketTimeout","CLOSE_SOCKET_TIMEOUT","onerror","onclose","webSocketOnCloseHandler","emit","eventData","parse","CC_EVENTS","WELCOME","issueReason","onlineStatus","navigator","onLine","WEB_SOCKET_ON_CLOSE_HANDLER","exports"],"sources":["WebSocketManager.ts"],"sourcesContent":["import EventEmitter from 'events';\nimport {WebexSDK, SubscribeRequest, HTTP_METHODS} from '../../../types';\nimport {SUBSCRIBE_API, WCC_API_GATEWAY} from '../../constants';\nimport {ConnectionLostDetails} from './types';\nimport {CC_EVENTS, SubscribeResponse, WelcomeResponse} from '../../config/types';\nimport LoggerProxy from '../../../logger-proxy';\nimport workerScript from './keepalive.worker';\nimport {KEEPALIVE_WORKER_INTERVAL, CLOSE_SOCKET_TIMEOUT, METHODS} from '../constants';\nimport {WEB_SOCKET_MANAGER_FILE} from '../../../constants';\n\n/**\n * WebSocketManager handles the WebSocket connection for Contact Center operations.\n * It manages the connection lifecycle, including registration, reconnection, and message handling.\n * It also utilizes a Web Worker to manage keepalive messages and socket closure.\n * @ignore\n */\nexport class WebSocketManager extends EventEmitter {\n private websocket: WebSocket;\n shouldReconnect: boolean;\n isSocketClosed: boolean;\n private isWelcomeReceived: boolean;\n private url: string | null = null;\n private forceCloseWebSocketOnTimeout: boolean;\n private isConnectionLost: boolean;\n private webex: WebexSDK;\n private welcomePromiseResolve:\n | ((value: WelcomeResponse | PromiseLike<WelcomeResponse>) => void)\n | null = null;\n\n private keepaliveWorker: Worker;\n\n constructor(options: {webex: WebexSDK}) {\n super();\n const {webex} = options;\n this.webex = webex;\n this.shouldReconnect = true;\n this.websocket = {} as WebSocket;\n this.isSocketClosed = false;\n this.isWelcomeReceived = false;\n this.forceCloseWebSocketOnTimeout = false;\n this.isConnectionLost = false;\n\n const workerScriptBlob = new Blob([workerScript], {type: 'application/javascript'});\n this.keepaliveWorker = new Worker(URL.createObjectURL(workerScriptBlob));\n }\n\n async initWebSocket(options: {body: SubscribeRequest}): Promise<WelcomeResponse> {\n const connectionConfig = options.body;\n try {\n await this.register(connectionConfig);\n } catch (error) {\n LoggerProxy.error(`[WebSocketStatus] | Error in registering Websocket ${error}`, {\n module: WEB_SOCKET_MANAGER_FILE,\n method: METHODS.INIT_WEB_SOCKET,\n });\n throw error;\n }\n\n return new Promise((resolve, reject) => {\n this.welcomePromiseResolve = resolve;\n this.connect().catch((error) => {\n LoggerProxy.error(`[WebSocketStatus] | Error in connecting Websocket ${error}`, {\n module: WEB_SOCKET_MANAGER_FILE,\n method: METHODS.INIT_WEB_SOCKET,\n });\n reject(error);\n });\n });\n }\n\n close(shouldReconnect: boolean, reason = 'Unknown') {\n if (!this.isSocketClosed && this.shouldReconnect) {\n this.shouldReconnect = shouldReconnect;\n this.websocket.close();\n this.keepaliveWorker.postMessage({type: 'terminate'});\n LoggerProxy.log(\n `[WebSocketStatus] | event=webSocketClose | WebSocket connection closed manually REASON: ${reason}`,\n {module: WEB_SOCKET_MANAGER_FILE, method: METHODS.CLOSE}\n );\n }\n }\n\n handleConnectionLost(event: ConnectionLostDetails) {\n this.isConnectionLost = event.isConnectionLost;\n }\n\n private async register(connectionConfig: SubscribeRequest) {\n try {\n const subscribeResponse: SubscribeResponse = await this.webex.request({\n service: WCC_API_GATEWAY,\n resource: SUBSCRIBE_API,\n method: HTTP_METHODS.POST,\n body: connectionConfig,\n });\n this.url = subscribeResponse.body.webSocketUrl;\n } catch (e) {\n LoggerProxy.error(\n `Register API Failed, Request to RoutingNotifs websocket registration API failed ${e}`,\n {module: WEB_SOCKET_MANAGER_FILE, method: METHODS.REGISTER}\n );\n throw e;\n }\n }\n\n private async connect() {\n if (!this.url) {\n return undefined;\n }\n LoggerProxy.log(\n `[WebSocketStatus] | event=webSocketConnecting | Connecting to WebSocket: ${this.url}`,\n {module: WEB_SOCKET_MANAGER_FILE, method: METHODS.CONNECT}\n );\n this.websocket = new WebSocket(this.url);\n\n return new Promise((resolve, reject) => {\n this.websocket.onopen = () => {\n this.isSocketClosed = false;\n this.shouldReconnect = true;\n\n this.websocket.send(JSON.stringify({keepalive: 'true'}));\n this.keepaliveWorker.onmessage = (keepAliveEvent: {data: any}) => {\n if (keepAliveEvent?.data?.type === 'keepalive') {\n this.websocket.send(JSON.stringify({keepalive: 'true'}));\n }\n\n if (keepAliveEvent?.data?.type === 'closeSocket' && this.isConnectionLost) {\n this.forceCloseWebSocketOnTimeout = true;\n this.close(true, 'WebSocket did not auto close within 16 secs');\n LoggerProxy.error(\n '[webSocketTimeout] | event=webSocketTimeout | WebSocket connection closed forcefully',\n {module: WEB_SOCKET_MANAGER_FILE, method: METHODS.CONNECT}\n );\n }\n };\n\n this.keepaliveWorker.postMessage({\n type: 'start',\n intervalDuration: KEEPALIVE_WORKER_INTERVAL, // Keepalive interval\n isSocketClosed: this.isSocketClosed,\n closeSocketTimeout: CLOSE_SOCKET_TIMEOUT, // Close socket timeout\n });\n };\n\n this.websocket.onerror = (event: any) => {\n LoggerProxy.error(\n `[WebSocketStatus] | event=socketConnectionFailed | WebSocket connection failed ${event}`,\n {module: WEB_SOCKET_MANAGER_FILE, method: METHODS.CONNECT}\n );\n reject();\n };\n\n this.websocket.onclose = async (event: any) => {\n this.webSocketOnCloseHandler(event);\n };\n\n this.websocket.onmessage = (e: MessageEvent) => {\n this.emit('message', e.data);\n const eventData = JSON.parse(e.data);\n\n if (eventData.type === CC_EVENTS.WELCOME) {\n this.isWelcomeReceived = true;\n if (this.welcomePromiseResolve) {\n this.welcomePromiseResolve(eventData.data as WelcomeResponse);\n this.welcomePromiseResolve = null;\n }\n }\n\n if (eventData.type === 'AGENT_MULTI_LOGIN') {\n this.close(false, 'multiLogin');\n LoggerProxy.error(\n '[WebSocketStatus] | event=agentMultiLogin | WebSocket connection closed by agent multiLogin',\n {module: WEB_SOCKET_MANAGER_FILE, method: METHODS.CONNECT}\n );\n }\n };\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n private async webSocketOnCloseHandler(event: any) {\n this.isSocketClosed = true;\n this.keepaliveWorker.postMessage({type: 'terminate'});\n if (this.shouldReconnect) {\n this.emit('socketClose');\n let issueReason;\n if (this.forceCloseWebSocketOnTimeout) {\n issueReason = 'WebSocket auto close timed out. Forcefully closed websocket.';\n } else {\n const onlineStatus = navigator.onLine;\n issueReason = !onlineStatus\n ? 'network issue'\n : 'missing keepalive from either desktop or notif service';\n }\n LoggerProxy.error(\n `[WebSocketStatus] | event=webSocketClose | WebSocket connection closed REASON: ${issueReason}`,\n {module: WEB_SOCKET_MANAGER_FILE, method: METHODS.WEB_SOCKET_ON_CLOSE_HANDLER}\n );\n this.forceCloseWebSocketOnTimeout = false;\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_events","_interopRequireDefault","require","_types","_constants","_types2","_loggerProxy","_keepalive","_constants2","_constants3","e","__esModule","default","WebSocketManager","EventEmitter","url","welcomePromiseResolve","constructor","options","webex","shouldReconnect","websocket","isSocketClosed","isWelcomeReceived","forceCloseWebSocketOnTimeout","isConnectionLost","workerScriptBlob","Blob","workerScript","type","keepaliveWorker","Worker","URL","createObjectURL","initWebSocket","body","connectionConfig","resource","register","error","LoggerProxy","module","WEB_SOCKET_MANAGER_FILE","method","METHODS","INIT_WEB_SOCKET","Promise","resolve","reject","connect","catch","close","reason","postMessage","log","CLOSE","handleConnectionLost","event","isIntEnv","internal","services","isIntegrationEnvironment","orgId","credentials","getOrgId","REGISTER","subscribeResponse","request","service","WCC_API_GATEWAY","HTTP_METHODS","POST","headers","undefined","webSocketUrl","CONNECT","WebSocket","onopen","send","JSON","stringify","keepalive","onmessage","keepAliveEvent","data","intervalDuration","KEEPALIVE_WORKER_INTERVAL","closeSocketTimeout","CLOSE_SOCKET_TIMEOUT","onerror","onclose","webSocketOnCloseHandler","emit","eventData","parse","CC_EVENTS","WELCOME","issueReason","onlineStatus","navigator","onLine","WEB_SOCKET_ON_CLOSE_HANDLER","exports","_default"],"sources":["WebSocketManager.ts"],"sourcesContent":["import EventEmitter from 'events';\nimport {WebexSDK, SubscribeRequest, HTTP_METHODS} from '../../../types';\nimport {WCC_API_GATEWAY} from '../../constants';\nimport {ConnectionLostDetails} from './types';\nimport {CC_EVENTS, SubscribeResponse, WelcomeResponse} from '../../config/types';\nimport LoggerProxy from '../../../logger-proxy';\nimport workerScript from './keepalive.worker';\nimport {KEEPALIVE_WORKER_INTERVAL, CLOSE_SOCKET_TIMEOUT, METHODS} from '../constants';\nimport {WEB_SOCKET_MANAGER_FILE} from '../../../constants';\n\n/**\n * WebSocketManager handles the WebSocket connection for Contact Center operations.\n * It manages the connection lifecycle, including registration, reconnection, and message handling.\n * It also utilizes a Web Worker to manage keepalive messages and socket closure.\n * @ignore\n */\nexport class WebSocketManager extends EventEmitter {\n private websocket: WebSocket;\n shouldReconnect: boolean;\n isSocketClosed: boolean;\n private isWelcomeReceived: boolean;\n private url: string | null = null;\n private forceCloseWebSocketOnTimeout: boolean;\n private isConnectionLost: boolean;\n private webex: WebexSDK;\n private welcomePromiseResolve:\n | ((value: WelcomeResponse | PromiseLike<WelcomeResponse>) => void)\n | null = null;\n\n private keepaliveWorker: Worker;\n\n constructor(options: {webex: WebexSDK}) {\n super();\n const {webex} = options;\n this.webex = webex;\n this.shouldReconnect = true;\n this.websocket = {} as WebSocket;\n this.isSocketClosed = false;\n this.isWelcomeReceived = false;\n this.forceCloseWebSocketOnTimeout = false;\n this.isConnectionLost = false;\n\n const workerScriptBlob = new Blob([workerScript], {type: 'application/javascript'});\n this.keepaliveWorker = new Worker(URL.createObjectURL(workerScriptBlob));\n }\n\n async initWebSocket(options: {\n body: SubscribeRequest;\n resource: string;\n }): Promise<WelcomeResponse> {\n const {body: connectionConfig, resource} = options;\n try {\n await this.register(connectionConfig, resource);\n } catch (error) {\n LoggerProxy.error(`[WebSocketStatus] | Error in registering Websocket ${error}`, {\n module: WEB_SOCKET_MANAGER_FILE,\n method: METHODS.INIT_WEB_SOCKET,\n });\n throw error;\n }\n\n return new Promise((resolve, reject) => {\n this.welcomePromiseResolve = resolve;\n this.connect().catch((error) => {\n LoggerProxy.error(`[WebSocketStatus] | Error in connecting Websocket ${error}`, {\n module: WEB_SOCKET_MANAGER_FILE,\n method: METHODS.INIT_WEB_SOCKET,\n });\n reject(error);\n });\n });\n }\n\n close(shouldReconnect: boolean, reason = 'Unknown') {\n if (!this.isSocketClosed && this.shouldReconnect) {\n this.shouldReconnect = shouldReconnect;\n this.websocket.close();\n this.keepaliveWorker.postMessage({type: 'terminate'});\n LoggerProxy.log(\n `[WebSocketStatus] | event=webSocketClose | WebSocket connection closed manually REASON: ${reason}`,\n {module: WEB_SOCKET_MANAGER_FILE, method: METHODS.CLOSE}\n );\n }\n }\n\n handleConnectionLost(event: ConnectionLostDetails) {\n this.isConnectionLost = event.isConnectionLost;\n }\n\n private async register(connectionConfig: SubscribeRequest, resource: string) {\n try {\n // X-ORGANIZATION-ID header is only required for INT environments\n const isIntEnv = this.webex.internal?.services?.isIntegrationEnvironment() || false;\n const orgId = this.webex.credentials.getOrgId();\n\n if (isIntEnv && orgId) {\n LoggerProxy.log(`[WebSocketManager] Adding X-ORGANIZATION-ID header for INT environment`, {\n module: WEB_SOCKET_MANAGER_FILE,\n method: METHODS.REGISTER,\n });\n }\n\n const subscribeResponse: SubscribeResponse = await this.webex.request({\n service: WCC_API_GATEWAY,\n resource,\n method: HTTP_METHODS.POST,\n body: connectionConfig,\n headers: isIntEnv && orgId ? {'X-ORGANIZATION-ID': orgId} : undefined,\n });\n this.url = subscribeResponse.body.webSocketUrl;\n } catch (e) {\n LoggerProxy.error(\n `Register API Failed, Request to RoutingNotifs websocket registration API failed ${e}`,\n {module: WEB_SOCKET_MANAGER_FILE, method: METHODS.REGISTER}\n );\n throw e;\n }\n }\n\n private async connect() {\n if (!this.url) {\n return undefined;\n }\n LoggerProxy.log(\n `[WebSocketStatus] | event=webSocketConnecting | Connecting to WebSocket: ${this.url}`,\n {module: WEB_SOCKET_MANAGER_FILE, method: METHODS.CONNECT}\n );\n this.websocket = new WebSocket(this.url);\n\n return new Promise((resolve, reject) => {\n this.websocket.onopen = () => {\n this.isSocketClosed = false;\n this.shouldReconnect = true;\n\n this.websocket.send(JSON.stringify({keepalive: 'true'}));\n this.keepaliveWorker.onmessage = (keepAliveEvent: {data: any}) => {\n if (keepAliveEvent?.data?.type === 'keepalive') {\n this.websocket.send(JSON.stringify({keepalive: 'true'}));\n }\n\n if (keepAliveEvent?.data?.type === 'closeSocket' && this.isConnectionLost) {\n this.forceCloseWebSocketOnTimeout = true;\n this.close(true, 'WebSocket did not auto close within 16 secs');\n LoggerProxy.error(\n '[webSocketTimeout] | event=webSocketTimeout | WebSocket connection closed forcefully',\n {module: WEB_SOCKET_MANAGER_FILE, method: METHODS.CONNECT}\n );\n }\n };\n\n this.keepaliveWorker.postMessage({\n type: 'start',\n intervalDuration: KEEPALIVE_WORKER_INTERVAL, // Keepalive interval\n isSocketClosed: this.isSocketClosed,\n closeSocketTimeout: CLOSE_SOCKET_TIMEOUT, // Close socket timeout\n });\n };\n\n this.websocket.onerror = (event: any) => {\n LoggerProxy.error(\n `[WebSocketStatus] | event=socketConnectionFailed | WebSocket connection failed ${event}`,\n {module: WEB_SOCKET_MANAGER_FILE, method: METHODS.CONNECT}\n );\n reject();\n };\n\n this.websocket.onclose = async (event: any) => {\n this.webSocketOnCloseHandler(event);\n };\n\n this.websocket.onmessage = (e: MessageEvent) => {\n this.emit('message', e.data);\n const eventData = JSON.parse(e.data);\n\n if (eventData.type === CC_EVENTS.WELCOME) {\n this.isWelcomeReceived = true;\n if (this.welcomePromiseResolve) {\n this.welcomePromiseResolve(eventData.data as WelcomeResponse);\n this.welcomePromiseResolve = null;\n }\n }\n\n if (eventData.type === 'AGENT_MULTI_LOGIN') {\n this.close(false, 'multiLogin');\n LoggerProxy.error(\n '[WebSocketStatus] | event=agentMultiLogin | WebSocket connection closed by agent multiLogin',\n {module: WEB_SOCKET_MANAGER_FILE, method: METHODS.CONNECT}\n );\n }\n };\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n private async webSocketOnCloseHandler(event: any) {\n this.isSocketClosed = true;\n this.keepaliveWorker.postMessage({type: 'terminate'});\n if (this.shouldReconnect) {\n this.emit('socketClose');\n let issueReason;\n if (this.forceCloseWebSocketOnTimeout) {\n issueReason = 'WebSocket auto close timed out. Forcefully closed websocket.';\n } else {\n const onlineStatus = navigator.onLine;\n issueReason = !onlineStatus\n ? 'network issue'\n : 'missing keepalive from either desktop or notif service';\n }\n LoggerProxy.error(\n `[WebSocketStatus] | event=webSocketClose | WebSocket connection closed REASON: ${issueReason}`,\n {module: WEB_SOCKET_MANAGER_FILE, method: METHODS.WEB_SOCKET_ON_CLOSE_HANDLER}\n );\n this.forceCloseWebSocketOnTimeout = false;\n }\n }\n}\n\nexport default WebSocketManager;\n"],"mappings":"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","ignoreList":[]}
@@ -8,6 +8,7 @@ var _events = require("events");
8
8
  var _loggerProxy = _interopRequireDefault(require("../../../logger-proxy"));
9
9
  var _constants = require("../constants");
10
10
  var _constants2 = require("../../../constants");
11
+ var _constants3 = require("../../constants");
11
12
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
13
  class ConnectionService extends _events.EventEmitter {
13
14
  connectionProp = {
@@ -92,7 +93,8 @@ class ConnectionService extends _events.EventEmitter {
92
93
  const onlineStatus = navigator.onLine;
93
94
  if (onlineStatus) {
94
95
  await this.webSocketManager.initWebSocket({
95
- body: this.subscribeRequest
96
+ body: this.subscribeRequest,
97
+ resource: _constants3.SUBSCRIBE_API
96
98
  });
97
99
  await this.clearTimerOnRestoreFailed();
98
100
  this.isSocketReconnected = true;
@@ -1 +1 @@
1
- {"version":3,"names":["_events","require","_loggerProxy","_interopRequireDefault","_constants","_constants2","e","__esModule","default","ConnectionService","EventEmitter","connectionProp","lostConnectionRecoveryTimeout","LOST_CONNECTION_RECOVERY_TIMEOUT","wsDisconnectAllowed","WS_DISCONNECT_ALLOWED","constructor","options","webSocketManager","subscribeRequest","isConnectionLost","isRestoreFailed","isSocketReconnected","isKeepAlive","setupEventListeners","on","onPing","bind","onSocketClose","dispatchConnectionEvent","socketReconnected","event","isSocketClosed","handleConnectionLost","LoggerProxy","info","module","CONNECTION_SERVICE_FILE","method","METHODS","DISPATCH_CONNECTION_EVENT","emit","clearTimerOnRestoreFailed","reconnectInterval","clearInterval","handleRestoreFailed","shouldReconnect","updateConnectionData","setConnectionProp","prop","parsedEvent","JSON","parse","reconnectingTimer","clearTimeout","restoreTimer","keepalive","setTimeout","handleSocketClose","HANDLE_SOCKET_CLOSE","onlineStatus","navigator","onLine","initWebSocket","body","Error","setInterval","CONNECTIVITY_CHECK_INTERVAL","exports"],"sources":["connection-service.ts"],"sourcesContent":["import {EventEmitter} from 'events';\nimport {WebSocketManager} from './WebSocketManager';\nimport LoggerProxy from '../../../logger-proxy';\nimport {ConnectionServiceOptions, ConnectionLostDetails, ConnectionProp} from './types';\nimport {\n LOST_CONNECTION_RECOVERY_TIMEOUT,\n WS_DISCONNECT_ALLOWED,\n CONNECTIVITY_CHECK_INTERVAL,\n METHODS,\n} from '../constants';\nimport {CONNECTION_SERVICE_FILE} from '../../../constants';\nimport {SubscribeRequest} from '../../../types';\n\nexport class ConnectionService extends EventEmitter {\n private connectionProp: ConnectionProp = {\n lostConnectionRecoveryTimeout: LOST_CONNECTION_RECOVERY_TIMEOUT,\n };\n\n private wsDisconnectAllowed = WS_DISCONNECT_ALLOWED;\n private reconnectingTimer: ReturnType<typeof setTimeout>;\n private restoreTimer: ReturnType<typeof setTimeout>;\n private isConnectionLost: boolean;\n private isRestoreFailed: boolean;\n private isSocketReconnected: boolean;\n private isKeepAlive: boolean;\n private reconnectInterval: ReturnType<typeof setInterval>;\n private webSocketManager: WebSocketManager;\n private subscribeRequest: SubscribeRequest;\n\n constructor(options: ConnectionServiceOptions) {\n super();\n this.webSocketManager = options.webSocketManager;\n this.subscribeRequest = options.subscribeRequest;\n\n this.isConnectionLost = false;\n this.isRestoreFailed = false;\n this.isSocketReconnected = false;\n this.isKeepAlive = false;\n\n this.setupEventListeners();\n }\n\n private setupEventListeners() {\n this.webSocketManager.on('message', this.onPing.bind(this));\n this.webSocketManager.on('socketClose', this.onSocketClose.bind(this));\n }\n\n private dispatchConnectionEvent(socketReconnected = false): void {\n const event: ConnectionLostDetails = {\n isConnectionLost: this.isConnectionLost,\n isRestoreFailed: this.isRestoreFailed,\n isSocketReconnected:\n !this.webSocketManager.isSocketClosed && (socketReconnected || this.isSocketReconnected),\n isKeepAlive: this.isKeepAlive,\n };\n this.webSocketManager.handleConnectionLost(event);\n LoggerProxy.info(`Dispatching connection event`, {\n module: CONNECTION_SERVICE_FILE,\n method: METHODS.DISPATCH_CONNECTION_EVENT,\n });\n this.emit('connectionLost', event);\n }\n\n private handleConnectionLost = (): void => {\n this.isConnectionLost = true;\n this.dispatchConnectionEvent();\n };\n\n private clearTimerOnRestoreFailed = async () => {\n if (this.reconnectInterval) {\n clearInterval(this.reconnectInterval);\n }\n };\n\n private handleRestoreFailed = async () => {\n this.isRestoreFailed = true;\n this.webSocketManager.shouldReconnect = false;\n this.dispatchConnectionEvent();\n await this.clearTimerOnRestoreFailed();\n };\n\n private updateConnectionData = (): void => {\n this.isRestoreFailed = false;\n this.isConnectionLost = false;\n this.isSocketReconnected = false;\n };\n\n public setConnectionProp(prop: ConnectionProp): void {\n this.connectionProp = prop;\n }\n\n private onPing = (event: any): void => {\n const parsedEvent = JSON.parse(event);\n if (this.reconnectingTimer) {\n clearTimeout(this.reconnectingTimer);\n }\n if (this.restoreTimer) {\n clearTimeout(this.restoreTimer);\n }\n this.isKeepAlive = parsedEvent.keepalive === 'true';\n\n if (\n ((this.isConnectionLost && !this.isRestoreFailed) || this.isKeepAlive) &&\n !this.isSocketReconnected\n ) {\n this.updateConnectionData();\n this.dispatchConnectionEvent();\n } else if (this.isSocketReconnected && this.isKeepAlive) {\n this.updateConnectionData();\n this.dispatchConnectionEvent(true);\n }\n\n this.reconnectingTimer = setTimeout(this.handleConnectionLost, this.wsDisconnectAllowed);\n this.restoreTimer = setTimeout(\n this.handleRestoreFailed,\n this.connectionProp && this.connectionProp.lostConnectionRecoveryTimeout\n );\n };\n\n private handleSocketClose = async (): Promise<void> => {\n LoggerProxy.info(`event=socketConnectionRetry | Trying to reconnect to websocket`, {\n module: CONNECTION_SERVICE_FILE,\n method: METHODS.HANDLE_SOCKET_CLOSE,\n });\n const onlineStatus = navigator.onLine;\n if (onlineStatus) {\n await this.webSocketManager.initWebSocket({body: this.subscribeRequest});\n await this.clearTimerOnRestoreFailed();\n this.isSocketReconnected = true;\n } else {\n throw new Error('event=socketConnectionRetry | browser network not available');\n }\n };\n\n private onSocketClose = (): void => {\n this.clearTimerOnRestoreFailed();\n\n this.reconnectInterval = setInterval(async () => {\n await this.handleSocketClose();\n }, CONNECTIVITY_CHECK_INTERVAL);\n };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_events","require","_loggerProxy","_interopRequireDefault","_constants","_constants2","_constants3","e","__esModule","default","ConnectionService","EventEmitter","connectionProp","lostConnectionRecoveryTimeout","LOST_CONNECTION_RECOVERY_TIMEOUT","wsDisconnectAllowed","WS_DISCONNECT_ALLOWED","constructor","options","webSocketManager","subscribeRequest","isConnectionLost","isRestoreFailed","isSocketReconnected","isKeepAlive","setupEventListeners","on","onPing","bind","onSocketClose","dispatchConnectionEvent","socketReconnected","event","isSocketClosed","handleConnectionLost","LoggerProxy","info","module","CONNECTION_SERVICE_FILE","method","METHODS","DISPATCH_CONNECTION_EVENT","emit","clearTimerOnRestoreFailed","reconnectInterval","clearInterval","handleRestoreFailed","shouldReconnect","updateConnectionData","setConnectionProp","prop","parsedEvent","JSON","parse","reconnectingTimer","clearTimeout","restoreTimer","keepalive","setTimeout","handleSocketClose","HANDLE_SOCKET_CLOSE","onlineStatus","navigator","onLine","initWebSocket","body","resource","SUBSCRIBE_API","Error","setInterval","CONNECTIVITY_CHECK_INTERVAL","exports"],"sources":["connection-service.ts"],"sourcesContent":["import {EventEmitter} from 'events';\nimport {WebSocketManager} from './WebSocketManager';\nimport LoggerProxy from '../../../logger-proxy';\nimport {ConnectionServiceOptions, ConnectionLostDetails, ConnectionProp} from './types';\nimport {\n LOST_CONNECTION_RECOVERY_TIMEOUT,\n WS_DISCONNECT_ALLOWED,\n CONNECTIVITY_CHECK_INTERVAL,\n METHODS,\n} from '../constants';\nimport {CONNECTION_SERVICE_FILE} from '../../../constants';\nimport {SubscribeRequest} from '../../../types';\nimport {SUBSCRIBE_API} from '../../constants';\n\nexport class ConnectionService extends EventEmitter {\n private connectionProp: ConnectionProp = {\n lostConnectionRecoveryTimeout: LOST_CONNECTION_RECOVERY_TIMEOUT,\n };\n\n private wsDisconnectAllowed = WS_DISCONNECT_ALLOWED;\n private reconnectingTimer: ReturnType<typeof setTimeout>;\n private restoreTimer: ReturnType<typeof setTimeout>;\n private isConnectionLost: boolean;\n private isRestoreFailed: boolean;\n private isSocketReconnected: boolean;\n private isKeepAlive: boolean;\n private reconnectInterval: ReturnType<typeof setInterval>;\n private webSocketManager: WebSocketManager;\n private subscribeRequest: SubscribeRequest;\n\n constructor(options: ConnectionServiceOptions) {\n super();\n this.webSocketManager = options.webSocketManager;\n this.subscribeRequest = options.subscribeRequest;\n\n this.isConnectionLost = false;\n this.isRestoreFailed = false;\n this.isSocketReconnected = false;\n this.isKeepAlive = false;\n\n this.setupEventListeners();\n }\n\n private setupEventListeners() {\n this.webSocketManager.on('message', this.onPing.bind(this));\n this.webSocketManager.on('socketClose', this.onSocketClose.bind(this));\n }\n\n private dispatchConnectionEvent(socketReconnected = false): void {\n const event: ConnectionLostDetails = {\n isConnectionLost: this.isConnectionLost,\n isRestoreFailed: this.isRestoreFailed,\n isSocketReconnected:\n !this.webSocketManager.isSocketClosed && (socketReconnected || this.isSocketReconnected),\n isKeepAlive: this.isKeepAlive,\n };\n this.webSocketManager.handleConnectionLost(event);\n LoggerProxy.info(`Dispatching connection event`, {\n module: CONNECTION_SERVICE_FILE,\n method: METHODS.DISPATCH_CONNECTION_EVENT,\n });\n this.emit('connectionLost', event);\n }\n\n private handleConnectionLost = (): void => {\n this.isConnectionLost = true;\n this.dispatchConnectionEvent();\n };\n\n private clearTimerOnRestoreFailed = async () => {\n if (this.reconnectInterval) {\n clearInterval(this.reconnectInterval);\n }\n };\n\n private handleRestoreFailed = async () => {\n this.isRestoreFailed = true;\n this.webSocketManager.shouldReconnect = false;\n this.dispatchConnectionEvent();\n await this.clearTimerOnRestoreFailed();\n };\n\n private updateConnectionData = (): void => {\n this.isRestoreFailed = false;\n this.isConnectionLost = false;\n this.isSocketReconnected = false;\n };\n\n public setConnectionProp(prop: ConnectionProp): void {\n this.connectionProp = prop;\n }\n\n private onPing = (event: any): void => {\n const parsedEvent = JSON.parse(event);\n if (this.reconnectingTimer) {\n clearTimeout(this.reconnectingTimer);\n }\n if (this.restoreTimer) {\n clearTimeout(this.restoreTimer);\n }\n this.isKeepAlive = parsedEvent.keepalive === 'true';\n\n if (\n ((this.isConnectionLost && !this.isRestoreFailed) || this.isKeepAlive) &&\n !this.isSocketReconnected\n ) {\n this.updateConnectionData();\n this.dispatchConnectionEvent();\n } else if (this.isSocketReconnected && this.isKeepAlive) {\n this.updateConnectionData();\n this.dispatchConnectionEvent(true);\n }\n\n this.reconnectingTimer = setTimeout(this.handleConnectionLost, this.wsDisconnectAllowed);\n this.restoreTimer = setTimeout(\n this.handleRestoreFailed,\n this.connectionProp && this.connectionProp.lostConnectionRecoveryTimeout\n );\n };\n\n private handleSocketClose = async (): Promise<void> => {\n LoggerProxy.info(`event=socketConnectionRetry | Trying to reconnect to websocket`, {\n module: CONNECTION_SERVICE_FILE,\n method: METHODS.HANDLE_SOCKET_CLOSE,\n });\n const onlineStatus = navigator.onLine;\n if (onlineStatus) {\n await this.webSocketManager.initWebSocket({\n body: this.subscribeRequest,\n resource: SUBSCRIBE_API,\n });\n await this.clearTimerOnRestoreFailed();\n this.isSocketReconnected = true;\n } else {\n throw new Error('event=socketConnectionRetry | browser network not available');\n }\n };\n\n private onSocketClose = (): void => {\n this.clearTimerOnRestoreFailed();\n\n this.reconnectInterval = setInterval(async () => {\n await this.handleSocketClose();\n }, CONNECTIVITY_CHECK_INTERVAL);\n };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import {SubscribeRequest} from '../../../types';\nimport {WebSocketManager} from './WebSocketManager';\n\n/**\n * Options for initializing a connection service.\n * @typedef ConnectionServiceOptions\n * @property {WebSocketManager} webSocketManager - The WebSocket manager instance.\n * @property {SubscribeRequest} subscribeRequest - The subscribe request payload.\n * @ignore\n */\nexport type ConnectionServiceOptions = {\n webSocketManager: WebSocketManager;\n subscribeRequest: SubscribeRequest;\n};\n\n/**\n * Details about the state of a lost connection and recovery attempts.\n * @typedef ConnectionLostDetails\n * @property {boolean} isConnectionLost - Indicates if the connection is currently lost.\n * @property {boolean} isRestoreFailed - Indicates if restoring the connection has failed.\n * @property {boolean} isSocketReconnected - Indicates if the socket has been reconnected.\n * @property {boolean} isKeepAlive - Indicates if the keep-alive mechanism is active.\n * @ignore\n */\nexport type ConnectionLostDetails = {\n isConnectionLost: boolean;\n isRestoreFailed: boolean;\n isSocketReconnected: boolean;\n isKeepAlive: boolean;\n};\n\n/**\n * Properties for connection configuration.\n * @typedef ConnectionProp\n * @property {number} lostConnectionRecoveryTimeout - Timeout in milliseconds for lost connection recovery.\n * @ignore\n */\nexport type ConnectionProp = {\n lostConnectionRecoveryTimeout: number;\n};\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import {SubscribeRequest} from '../../../types';\nimport type WebSocketManager from './WebSocketManager';\n\n/**\n * Options for initializing a connection service.\n * @typedef ConnectionServiceOptions\n * @property {WebSocketManager} webSocketManager - The WebSocket manager instance.\n * @property {SubscribeRequest} subscribeRequest - The subscribe request payload.\n * @ignore\n */\nexport type ConnectionServiceOptions = {\n webSocketManager: WebSocketManager;\n subscribeRequest: SubscribeRequest;\n};\n\n/**\n * Details about the state of a lost connection and recovery attempts.\n * @typedef ConnectionLostDetails\n * @property {boolean} isConnectionLost - Indicates if the connection is currently lost.\n * @property {boolean} isRestoreFailed - Indicates if restoring the connection has failed.\n * @property {boolean} isSocketReconnected - Indicates if the socket has been reconnected.\n * @property {boolean} isKeepAlive - Indicates if the keep-alive mechanism is active.\n * @ignore\n */\nexport type ConnectionLostDetails = {\n isConnectionLost: boolean;\n isRestoreFailed: boolean;\n isSocketReconnected: boolean;\n isKeepAlive: boolean;\n};\n\n/**\n * Properties for connection configuration.\n * @typedef ConnectionProp\n * @property {number} lostConnectionRecoveryTimeout - Timeout in milliseconds for lost connection recovery.\n * @ignore\n */\nexport type ConnectionProp = {\n lostConnectionRecoveryTimeout: number;\n};\n"],"mappings":"","ignoreList":[]}
@@ -30,6 +30,8 @@ class Services {
30
30
 
31
31
  /** WebSocket manager for handling real-time communications */
32
32
 
33
+ /** RTD WebSocket manager for handling real-time transcription */
34
+
33
35
  /** Connection service for managing websocket connections */
34
36
 
35
37
  /** Singleton instance of the Services class */
@@ -48,6 +50,10 @@ class Services {
48
50
  this.webSocketManager = new _WebSocketManager.WebSocketManager({
49
51
  webex
50
52
  });
53
+ // TODO: Implement reconnection logic for this websocket in upcoming PR
54
+ this.rtdWebSocketManager = new _WebSocketManager.WebSocketManager({
55
+ webex
56
+ });
51
57
  const aqmReq = new _aqmReqs.default(this.webSocketManager);
52
58
  this.config = new _config.default();
53
59
  this.agent = (0, _agent.default)(aqmReq);
@@ -1 +1 @@
1
- {"version":3,"names":["_agent","_interopRequireDefault","require","_contact","_config","_aqmReqs","_WebSocketManager","_connectionService","_dialer","e","__esModule","default","Services","constructor","options","webex","connectionConfig","webSocketManager","WebSocketManager","aqmReq","AqmReqs","config","AgentConfigService","agent","routingAgent","contact","routingContact","dialer","aqmDialer","connectionService","ConnectionService","subscribeRequest","getInstance","instance","exports"],"sources":["index.ts"],"sourcesContent":["import routingAgent from './agent';\nimport routingContact from './task/contact';\nimport AgentConfigService from './config';\nimport AqmReqs from './core/aqm-reqs';\nimport {WebSocketManager} from './core/websocket/WebSocketManager';\nimport {ConnectionService} from './core/websocket/connection-service';\nimport {WebexSDK, SubscribeRequest} from '../types';\nimport aqmDialer from './task/dialer';\n\n/**\n * Services class provides centralized access to all contact center plugin services\n * using a singleton pattern to ensure a single instance throughout the application.\n * @private\n * @ignore\n * @class\n */\nexport default class Services {\n /** Agent services for managing agent state and capabilities */\n public readonly agent: ReturnType<typeof routingAgent>;\n /** Configuration services for agent settings */\n public readonly config: AgentConfigService;\n /** Contact services for managing customer interactions */\n public readonly contact: ReturnType<typeof routingContact>;\n /** Dialer services for outbound calling features */\n public readonly dialer: ReturnType<typeof aqmDialer>;\n /** WebSocket manager for handling real-time communications */\n public readonly webSocketManager: WebSocketManager;\n /** Connection service for managing websocket connections */\n public readonly connectionService: ConnectionService;\n /** Singleton instance of the Services class */\n private static instance: Services;\n\n /**\n * Creates a new Services instance\n * @param options - Configuration options\n * @param options.webex - WebexSDK instance\n * @param options.connectionConfig - Subscription configuration for websocket connection\n */\n constructor(options: {webex: WebexSDK; connectionConfig: SubscribeRequest}) {\n const {webex, connectionConfig} = options;\n this.webSocketManager = new WebSocketManager({webex});\n const aqmReq = new AqmReqs(this.webSocketManager);\n this.config = new AgentConfigService();\n this.agent = routingAgent(aqmReq);\n this.contact = routingContact(aqmReq);\n this.dialer = aqmDialer(aqmReq);\n this.connectionService = new ConnectionService({\n webSocketManager: this.webSocketManager,\n subscribeRequest: connectionConfig,\n });\n }\n\n /**\n * Gets singleton instance of Services class\n * Creates a new instance if one doesn't exist\n * @param options - Configuration options\n * @param options.webex - WebexSDK instance\n * @param options.connectionConfig - Subscription configuration for websocket connection\n * @returns The singleton Services instance\n */\n public static getInstance(options: {\n webex: WebexSDK;\n connectionConfig: SubscribeRequest;\n }): Services {\n if (!this.instance) {\n this.instance = new Services(options);\n }\n\n return this.instance;\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,QAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,OAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,QAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,iBAAA,GAAAJ,OAAA;AACA,IAAAK,kBAAA,GAAAL,OAAA;AAEA,IAAAM,OAAA,GAAAP,sBAAA,CAAAC,OAAA;AAAsC,SAAAD,uBAAAQ,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAMG,QAAQ,CAAC;EAC5B;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;;EAGA;AACF;AACA;AACA;AACA;AACA;EACEC,WAAWA,CAACC,OAA8D,EAAE;IAC1E,MAAM;MAACC,KAAK;MAAEC;IAAgB,CAAC,GAAGF,OAAO;IACzC,IAAI,CAACG,gBAAgB,GAAG,IAAIC,kCAAgB,CAAC;MAACH;IAAK,CAAC,CAAC;IACrD,MAAMI,MAAM,GAAG,IAAIC,gBAAO,CAAC,IAAI,CAACH,gBAAgB,CAAC;IACjD,IAAI,CAACI,MAAM,GAAG,IAAIC,eAAkB,CAAC,CAAC;IACtC,IAAI,CAACC,KAAK,GAAG,IAAAC,cAAY,EAACL,MAAM,CAAC;IACjC,IAAI,CAACM,OAAO,GAAG,IAAAC,gBAAc,EAACP,MAAM,CAAC;IACrC,IAAI,CAACQ,MAAM,GAAG,IAAAC,eAAS,EAACT,MAAM,CAAC;IAC/B,IAAI,CAACU,iBAAiB,GAAG,IAAIC,oCAAiB,CAAC;MAC7Cb,gBAAgB,EAAE,IAAI,CAACA,gBAAgB;MACvCc,gBAAgB,EAAEf;IACpB,CAAC,CAAC;EACJ;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE,OAAcgB,WAAWA,CAAClB,OAGzB,EAAY;IACX,IAAI,CAAC,IAAI,CAACmB,QAAQ,EAAE;MAClB,IAAI,CAACA,QAAQ,GAAG,IAAIrB,QAAQ,CAACE,OAAO,CAAC;IACvC;IAEA,OAAO,IAAI,CAACmB,QAAQ;EACtB;AACF;AAACC,OAAA,CAAAvB,OAAA,GAAAC,QAAA","ignoreList":[]}
1
+ {"version":3,"names":["_agent","_interopRequireDefault","require","_contact","_config","_aqmReqs","_WebSocketManager","_connectionService","_dialer","e","__esModule","default","Services","constructor","options","webex","connectionConfig","webSocketManager","WebSocketManager","rtdWebSocketManager","aqmReq","AqmReqs","config","AgentConfigService","agent","routingAgent","contact","routingContact","dialer","aqmDialer","connectionService","ConnectionService","subscribeRequest","getInstance","instance","exports"],"sources":["index.ts"],"sourcesContent":["import routingAgent from './agent';\nimport routingContact from './task/contact';\nimport AgentConfigService from './config';\nimport AqmReqs from './core/aqm-reqs';\nimport {WebSocketManager} from './core/websocket/WebSocketManager';\nimport {ConnectionService} from './core/websocket/connection-service';\nimport {WebexSDK, SubscribeRequest} from '../types';\nimport aqmDialer from './task/dialer';\n\n/**\n * Services class provides centralized access to all contact center plugin services\n * using a singleton pattern to ensure a single instance throughout the application.\n * @private\n * @ignore\n * @class\n */\nexport default class Services {\n /** Agent services for managing agent state and capabilities */\n public readonly agent: ReturnType<typeof routingAgent>;\n /** Configuration services for agent settings */\n public readonly config: AgentConfigService;\n /** Contact services for managing customer interactions */\n public readonly contact: ReturnType<typeof routingContact>;\n /** Dialer services for outbound calling features */\n public readonly dialer: ReturnType<typeof aqmDialer>;\n /** WebSocket manager for handling real-time communications */\n public readonly webSocketManager: WebSocketManager;\n /** RTD WebSocket manager for handling real-time transcription */\n public readonly rtdWebSocketManager: WebSocketManager;\n /** Connection service for managing websocket connections */\n public readonly connectionService: ConnectionService;\n /** Singleton instance of the Services class */\n private static instance: Services;\n\n /**\n * Creates a new Services instance\n * @param options - Configuration options\n * @param options.webex - WebexSDK instance\n * @param options.connectionConfig - Subscription configuration for websocket connection\n */\n constructor(options: {webex: WebexSDK; connectionConfig: SubscribeRequest}) {\n const {webex, connectionConfig} = options;\n this.webSocketManager = new WebSocketManager({webex});\n // TODO: Implement reconnection logic for this websocket in upcoming PR\n this.rtdWebSocketManager = new WebSocketManager({webex});\n const aqmReq = new AqmReqs(this.webSocketManager);\n this.config = new AgentConfigService();\n this.agent = routingAgent(aqmReq);\n this.contact = routingContact(aqmReq);\n this.dialer = aqmDialer(aqmReq);\n this.connectionService = new ConnectionService({\n webSocketManager: this.webSocketManager,\n subscribeRequest: connectionConfig,\n });\n }\n\n /**\n * Gets singleton instance of Services class\n * Creates a new instance if one doesn't exist\n * @param options - Configuration options\n * @param options.webex - WebexSDK instance\n * @param options.connectionConfig - Subscription configuration for websocket connection\n * @returns The singleton Services instance\n */\n public static getInstance(options: {\n webex: WebexSDK;\n connectionConfig: SubscribeRequest;\n }): Services {\n if (!this.instance) {\n this.instance = new Services(options);\n }\n\n return this.instance;\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,QAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,OAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,QAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,iBAAA,GAAAJ,OAAA;AACA,IAAAK,kBAAA,GAAAL,OAAA;AAEA,IAAAM,OAAA,GAAAP,sBAAA,CAAAC,OAAA;AAAsC,SAAAD,uBAAAQ,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAMG,QAAQ,CAAC;EAC5B;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;;EAGA;AACF;AACA;AACA;AACA;AACA;EACEC,WAAWA,CAACC,OAA8D,EAAE;IAC1E,MAAM;MAACC,KAAK;MAAEC;IAAgB,CAAC,GAAGF,OAAO;IACzC,IAAI,CAACG,gBAAgB,GAAG,IAAIC,kCAAgB,CAAC;MAACH;IAAK,CAAC,CAAC;IACrD;IACA,IAAI,CAACI,mBAAmB,GAAG,IAAID,kCAAgB,CAAC;MAACH;IAAK,CAAC,CAAC;IACxD,MAAMK,MAAM,GAAG,IAAIC,gBAAO,CAAC,IAAI,CAACJ,gBAAgB,CAAC;IACjD,IAAI,CAACK,MAAM,GAAG,IAAIC,eAAkB,CAAC,CAAC;IACtC,IAAI,CAACC,KAAK,GAAG,IAAAC,cAAY,EAACL,MAAM,CAAC;IACjC,IAAI,CAACM,OAAO,GAAG,IAAAC,gBAAc,EAACP,MAAM,CAAC;IACrC,IAAI,CAACQ,MAAM,GAAG,IAAAC,eAAS,EAACT,MAAM,CAAC;IAC/B,IAAI,CAACU,iBAAiB,GAAG,IAAIC,oCAAiB,CAAC;MAC7Cd,gBAAgB,EAAE,IAAI,CAACA,gBAAgB;MACvCe,gBAAgB,EAAEhB;IACpB,CAAC,CAAC;EACJ;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE,OAAciB,WAAWA,CAACnB,OAGzB,EAAY;IACX,IAAI,CAAC,IAAI,CAACoB,QAAQ,EAAE;MAClB,IAAI,CAACA,QAAQ,GAAG,IAAItB,QAAQ,CAACE,OAAO,CAAC;IACvC;IAEA,OAAO,IAAI,CAACoB,QAAQ;EACtB;AACF;AAACC,OAAA,CAAAxB,OAAA,GAAAC,QAAA","ignoreList":[]}