@webex/contact-center 3.11.0 → 3.12.0-auth-prejoin-fetch.1

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 (325) hide show
  1. package/.sdd/manifest.json +883 -0
  2. package/AGENTS.md +94 -0
  3. package/ai-docs/ARCHITECTURE.md +168 -0
  4. package/ai-docs/CONTRACTS.md +50 -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 +359 -0
  17. package/ai-docs/features/consult-transfer-list-policy/spec/feature-spec.md +362 -0
  18. package/ai-docs/features/generated-spec-conformance-fidelity-remediation/spec/feature-spec.md +117 -0
  19. package/ai-docs/features/residual-warning-coverage-completion/spec/feature-spec.md +203 -0
  20. package/ai-docs/features/validator-code-fidelity-drift-fix/spec/feature-spec.md +315 -0
  21. package/ai-docs/patterns/event-driven-patterns.md +485 -0
  22. package/ai-docs/patterns/testing-patterns.md +480 -0
  23. package/ai-docs/patterns/typescript-patterns.md +365 -0
  24. package/ai-docs/templates/README.md +102 -0
  25. package/ai-docs/templates/documentation/create-agents-md.md +240 -0
  26. package/ai-docs/templates/documentation/create-architecture-md.md +295 -0
  27. package/ai-docs/templates/existing-service/bug-fix.md +254 -0
  28. package/ai-docs/templates/existing-service/feature-enhancement.md +450 -0
  29. package/ai-docs/templates/new-method/00-master.md +80 -0
  30. package/ai-docs/templates/new-method/01-requirements.md +232 -0
  31. package/ai-docs/templates/new-method/02-implementation.md +295 -0
  32. package/ai-docs/templates/new-method/03-tests.md +201 -0
  33. package/ai-docs/templates/new-method/04-validation.md +141 -0
  34. package/ai-docs/templates/new-service/00-master.md +109 -0
  35. package/ai-docs/templates/new-service/01-pre-questions.md +159 -0
  36. package/ai-docs/templates/new-service/02-code-generation.md +346 -0
  37. package/ai-docs/templates/new-service/03-integration.md +178 -0
  38. package/ai-docs/templates/new-service/04-test-generation.md +205 -0
  39. package/ai-docs/templates/new-service/05-validation.md +145 -0
  40. package/dist/cc.js +818 -59
  41. package/dist/cc.js.map +1 -1
  42. package/dist/config.js +13 -0
  43. package/dist/config.js.map +1 -1
  44. package/dist/constants.js +31 -3
  45. package/dist/constants.js.map +1 -1
  46. package/dist/index.js +27 -5
  47. package/dist/index.js.map +1 -1
  48. package/dist/metrics/behavioral-events.js +127 -0
  49. package/dist/metrics/behavioral-events.js.map +1 -1
  50. package/dist/metrics/constants.js +34 -3
  51. package/dist/metrics/constants.js.map +1 -1
  52. package/dist/services/AddressBook.js +18 -15
  53. package/dist/services/AddressBook.js.map +1 -1
  54. package/dist/services/AnswerCallOnWebexService.js +174 -0
  55. package/dist/services/AnswerCallOnWebexService.js.map +1 -0
  56. package/dist/services/ApiAiAssistant.js +318 -0
  57. package/dist/services/ApiAiAssistant.js.map +1 -0
  58. package/dist/services/EntryPoint.js +46 -68
  59. package/dist/services/EntryPoint.js.map +1 -1
  60. package/dist/services/Queue.js +27 -22
  61. package/dist/services/Queue.js.map +1 -1
  62. package/dist/services/UserPreference.js +427 -0
  63. package/dist/services/UserPreference.js.map +1 -0
  64. package/dist/services/WebexCrossClientService.js +171 -0
  65. package/dist/services/WebexCrossClientService.js.map +1 -0
  66. package/dist/services/WxAppTelephonyMercurySync.js +93 -0
  67. package/dist/services/WxAppTelephonyMercurySync.js.map +1 -0
  68. package/dist/services/agent/types.js.map +1 -1
  69. package/dist/services/config/Util.js +11 -4
  70. package/dist/services/config/Util.js.map +1 -1
  71. package/dist/services/config/constants.js +45 -8
  72. package/dist/services/config/constants.js.map +1 -1
  73. package/dist/services/config/index.js +41 -2
  74. package/dist/services/config/index.js.map +1 -1
  75. package/dist/services/config/types.js +70 -8
  76. package/dist/services/config/types.js.map +1 -1
  77. package/dist/services/constants.js +27 -1
  78. package/dist/services/constants.js.map +1 -1
  79. package/dist/services/core/Err.js.map +1 -1
  80. package/dist/services/core/Utils.js +122 -25
  81. package/dist/services/core/Utils.js.map +1 -1
  82. package/dist/services/core/WebexRequest.js +6 -2
  83. package/dist/services/core/WebexRequest.js.map +1 -1
  84. package/dist/services/core/aqm-reqs.js +119 -30
  85. package/dist/services/core/aqm-reqs.js.map +1 -1
  86. package/dist/services/core/types.js.map +1 -1
  87. package/dist/services/core/websocket/WebSocketManager.js +22 -6
  88. package/dist/services/core/websocket/WebSocketManager.js.map +1 -1
  89. package/dist/services/core/websocket/connection-service.js +3 -1
  90. package/dist/services/core/websocket/connection-service.js.map +1 -1
  91. package/dist/services/core/websocket/types.js.map +1 -1
  92. package/dist/services/index.js +6 -0
  93. package/dist/services/index.js.map +1 -1
  94. package/dist/services/task/Task.js +754 -0
  95. package/dist/services/task/Task.js.map +1 -0
  96. package/dist/services/task/TaskFactory.js +49 -0
  97. package/dist/services/task/TaskFactory.js.map +1 -0
  98. package/dist/services/task/TaskManager.js +1073 -447
  99. package/dist/services/task/TaskManager.js.map +1 -1
  100. package/dist/services/task/TaskUtils.js +220 -23
  101. package/dist/services/task/TaskUtils.js.map +1 -1
  102. package/dist/services/task/WebexCallingUtils.js +70 -0
  103. package/dist/services/task/WebexCallingUtils.js.map +1 -0
  104. package/dist/services/task/constants.js +26 -2
  105. package/dist/services/task/constants.js.map +1 -1
  106. package/dist/services/task/contact.js +29 -0
  107. package/dist/services/task/contact.js.map +1 -1
  108. package/dist/services/task/dialer.js +129 -0
  109. package/dist/services/task/dialer.js.map +1 -1
  110. package/dist/services/task/digital/Digital.js +78 -0
  111. package/dist/services/task/digital/Digital.js.map +1 -0
  112. package/dist/services/task/state-machine/TaskStateMachine.js +971 -0
  113. package/dist/services/task/state-machine/TaskStateMachine.js.map +1 -0
  114. package/dist/services/task/state-machine/actions.js +572 -0
  115. package/dist/services/task/state-machine/actions.js.map +1 -0
  116. package/dist/services/task/state-machine/constants.js +161 -0
  117. package/dist/services/task/state-machine/constants.js.map +1 -0
  118. package/dist/services/task/state-machine/guards.js +409 -0
  119. package/dist/services/task/state-machine/guards.js.map +1 -0
  120. package/dist/services/task/state-machine/index.js +53 -0
  121. package/dist/services/task/state-machine/index.js.map +1 -0
  122. package/dist/services/task/state-machine/types.js +54 -0
  123. package/dist/services/task/state-machine/types.js.map +1 -0
  124. package/dist/services/task/state-machine/uiControlsComputer.js +703 -0
  125. package/dist/services/task/state-machine/uiControlsComputer.js.map +1 -0
  126. package/dist/services/task/taskDataNormalizer.js +99 -0
  127. package/dist/services/task/taskDataNormalizer.js.map +1 -0
  128. package/dist/services/task/types.js +243 -5
  129. package/dist/services/task/types.js.map +1 -1
  130. package/dist/services/task/voice/Voice.js +1380 -0
  131. package/dist/services/task/voice/Voice.js.map +1 -0
  132. package/dist/services/task/voice/WebRTC.js +152 -0
  133. package/dist/services/task/voice/WebRTC.js.map +1 -0
  134. package/dist/services/task/voice/wxAppVoiceMethods.js +201 -0
  135. package/dist/services/task/voice/wxAppVoiceMethods.js.map +1 -0
  136. package/dist/services/wxAppTelephonyUtils.js +19 -0
  137. package/dist/services/wxAppTelephonyUtils.js.map +1 -0
  138. package/dist/types/cc.d.ts +967 -0
  139. package/dist/types/config.d.ts +79 -0
  140. package/dist/types/constants.d.ts +74 -0
  141. package/dist/types/index.d.ts +201 -0
  142. package/dist/types/logger-proxy.d.ts +71 -0
  143. package/dist/types/metrics/MetricsManager.d.ts +223 -0
  144. package/dist/types/metrics/behavioral-events.d.ts +29 -0
  145. package/dist/types/metrics/constants.d.ts +183 -0
  146. package/dist/types/services/AddressBook.d.ts +75 -0
  147. package/dist/types/services/AnswerCallOnWebexService.d.ts +37 -0
  148. package/dist/types/services/ApiAiAssistant.d.ts +49 -0
  149. package/dist/types/services/EntryPoint.d.ts +69 -0
  150. package/dist/types/services/Queue.d.ts +78 -0
  151. package/dist/types/services/UserPreference.d.ts +118 -0
  152. package/dist/types/services/WebCallingService.d.ts +1 -0
  153. package/dist/types/services/WebexCrossClientService.d.ts +28 -0
  154. package/dist/types/services/WxAppTelephonyMercurySync.d.ts +28 -0
  155. package/dist/types/services/agent/index.d.ts +46 -0
  156. package/dist/types/services/agent/types.d.ts +413 -0
  157. package/dist/types/services/config/Util.d.ts +20 -0
  158. package/dist/types/services/config/constants.d.ts +273 -0
  159. package/dist/types/services/config/index.d.ts +177 -0
  160. package/dist/types/services/config/types.d.ts +1381 -0
  161. package/dist/types/services/constants.d.ts +110 -0
  162. package/dist/types/services/core/Err.d.ts +127 -0
  163. package/dist/types/services/core/GlobalTypes.d.ts +58 -0
  164. package/dist/types/services/core/Utils.d.ts +121 -0
  165. package/dist/types/services/core/WebexRequest.d.ts +23 -0
  166. package/dist/types/services/core/aqm-reqs.d.ts +65 -0
  167. package/dist/types/services/core/constants.d.ts +99 -0
  168. package/dist/types/services/core/types.d.ts +49 -0
  169. package/dist/types/services/core/websocket/WebSocketManager.d.ts +36 -0
  170. package/dist/types/services/core/websocket/connection-service.d.ts +27 -0
  171. package/dist/types/services/core/websocket/keepalive.worker.d.ts +2 -0
  172. package/dist/types/services/core/websocket/types.d.ts +37 -0
  173. package/dist/types/services/index.d.ts +54 -0
  174. package/dist/types/services/task/AutoWrapup.d.ts +40 -0
  175. package/dist/types/services/task/Task.d.ts +175 -0
  176. package/dist/types/services/task/TaskFactory.d.ts +13 -0
  177. package/dist/types/services/task/TaskManager.d.ts +1 -0
  178. package/dist/types/services/task/TaskUtils.d.ts +138 -0
  179. package/dist/types/services/task/WebexCallingUtils.d.ts +11 -0
  180. package/dist/types/services/task/constants.d.ts +94 -0
  181. package/dist/types/services/task/contact.d.ts +73 -0
  182. package/dist/types/services/task/dialer.d.ts +73 -0
  183. package/dist/types/services/task/digital/Digital.d.ts +22 -0
  184. package/dist/types/services/task/state-machine/TaskStateMachine.d.ts +1398 -0
  185. package/dist/types/services/task/state-machine/actions.d.ts +10 -0
  186. package/dist/types/services/task/state-machine/constants.d.ts +107 -0
  187. package/dist/types/services/task/state-machine/guards.d.ts +103 -0
  188. package/dist/types/services/task/state-machine/index.d.ts +13 -0
  189. package/dist/types/services/task/state-machine/types.d.ts +277 -0
  190. package/dist/types/services/task/state-machine/uiControlsComputer.d.ts +9 -0
  191. package/dist/types/services/task/taskDataNormalizer.d.ts +10 -0
  192. package/dist/types/services/task/types.d.ts +1933 -0
  193. package/dist/types/services/task/voice/Voice.d.ts +223 -0
  194. package/dist/types/services/task/voice/WebRTC.d.ts +53 -0
  195. package/dist/types/services/task/voice/wxAppVoiceMethods.d.ts +52 -0
  196. package/dist/types/services/wxAppTelephonyUtils.d.ts +5 -0
  197. package/dist/types/types.d.ts +784 -0
  198. package/dist/types/utils/PageCache.d.ts +190 -0
  199. package/dist/types/webex-config.d.ts +53 -0
  200. package/dist/types/webex.d.ts +8 -0
  201. package/dist/types.js +137 -3
  202. package/dist/types.js.map +1 -1
  203. package/dist/utils/PageCache.js +19 -5
  204. package/dist/utils/PageCache.js.map +1 -1
  205. package/dist/webex.js +14 -2
  206. package/dist/webex.js.map +1 -1
  207. package/package.json +16 -12
  208. package/src/cc.ts +983 -60
  209. package/src/config.ts +13 -0
  210. package/src/constants.ts +29 -1
  211. package/src/index.ts +26 -5
  212. package/src/metrics/ai-docs/AGENTS.md +350 -0
  213. package/src/metrics/ai-docs/ARCHITECTURE.md +338 -0
  214. package/src/metrics/ai-docs/metrics-spec.md +860 -0
  215. package/src/metrics/behavioral-events.ts +134 -0
  216. package/src/metrics/constants.ts +39 -3
  217. package/src/services/AddressBook.ts +17 -6
  218. package/src/services/AnswerCallOnWebexService.ts +206 -0
  219. package/src/services/ApiAiAssistant.ts +412 -0
  220. package/src/services/EntryPoint.ts +59 -60
  221. package/src/services/Queue.ts +29 -12
  222. package/src/services/UserPreference.ts +509 -0
  223. package/src/services/WebexCrossClientService.ts +212 -0
  224. package/src/services/WxAppTelephonyMercurySync.ts +115 -0
  225. package/src/services/agent/ai-docs/AGENTS.md +240 -0
  226. package/src/services/agent/ai-docs/ARCHITECTURE.md +304 -0
  227. package/src/services/agent/ai-docs/agent-spec.md +504 -0
  228. package/src/services/agent/types.ts +1 -1
  229. package/src/services/ai-docs/AGENTS.md +386 -0
  230. package/src/services/ai-docs/services-spec.md +497 -0
  231. package/src/services/config/Util.ts +13 -2
  232. package/src/services/config/ai-docs/AGENTS.md +255 -0
  233. package/src/services/config/ai-docs/ARCHITECTURE.md +426 -0
  234. package/src/services/config/ai-docs/config-spec.md +675 -0
  235. package/src/services/config/constants.ts +47 -7
  236. package/src/services/config/index.ts +45 -1
  237. package/src/services/config/types.ts +253 -11
  238. package/src/services/constants.ts +29 -0
  239. package/src/services/core/Err.ts +4 -0
  240. package/src/services/core/Utils.ts +143 -30
  241. package/src/services/core/WebexRequest.ts +3 -1
  242. package/src/services/core/ai-docs/AGENTS.md +381 -0
  243. package/src/services/core/ai-docs/ARCHITECTURE.md +698 -0
  244. package/src/services/core/ai-docs/core-spec.md +787 -0
  245. package/src/services/core/aqm-reqs.ts +125 -32
  246. package/src/services/core/types.ts +2 -0
  247. package/src/services/core/websocket/WebSocketManager.ts +23 -6
  248. package/src/services/core/websocket/connection-service.ts +5 -1
  249. package/src/services/core/websocket/types.ts +1 -1
  250. package/src/services/index.ts +4 -0
  251. package/src/services/task/Task.ts +908 -0
  252. package/src/services/task/TaskFactory.ts +60 -0
  253. package/src/services/task/TaskManager.ts +1291 -513
  254. package/src/services/task/TaskUtils.ts +314 -24
  255. package/src/services/task/WebexCallingUtils.ts +136 -0
  256. package/src/services/task/ai-docs/AGENTS.md +457 -0
  257. package/src/services/task/ai-docs/ARCHITECTURE.md +595 -0
  258. package/src/services/task/ai-docs/task-spec.md +1469 -0
  259. package/src/services/task/constants.ts +26 -0
  260. package/src/services/task/contact.ts +30 -0
  261. package/src/services/task/dialer.ts +136 -1
  262. package/src/services/task/digital/Digital.ts +97 -0
  263. package/src/services/task/state-machine/TaskStateMachine.ts +1313 -0
  264. package/src/services/task/state-machine/actions.ts +741 -0
  265. package/src/services/task/state-machine/ai-docs/AGENTS.md +462 -0
  266. package/src/services/task/state-machine/ai-docs/ARCHITECTURE.md +1146 -0
  267. package/src/services/task/state-machine/ai-docs/task-state-machine-spec.md +2209 -0
  268. package/src/services/task/state-machine/constants.ts +172 -0
  269. package/src/services/task/state-machine/guards.ts +498 -0
  270. package/src/services/task/state-machine/index.ts +28 -0
  271. package/src/services/task/state-machine/types.ts +258 -0
  272. package/src/services/task/state-machine/uiControlsComputer.ts +1135 -0
  273. package/src/services/task/taskDataNormalizer.ts +137 -0
  274. package/src/services/task/types.ts +843 -70
  275. package/src/services/task/voice/Voice.ts +1720 -0
  276. package/src/services/task/voice/WebRTC.ts +191 -0
  277. package/src/services/task/voice/wxAppVoiceMethods.ts +307 -0
  278. package/src/services/wxAppTelephonyUtils.ts +14 -0
  279. package/src/types.ts +238 -11
  280. package/src/utils/AGENTS.md +289 -0
  281. package/src/utils/PageCache.ts +38 -5
  282. package/src/utils/ai-docs/utils-spec.md +391 -0
  283. package/src/webex.js +2 -0
  284. package/test/unit/spec/cc.ts +1856 -122
  285. package/test/unit/spec/logger-proxy.ts +70 -0
  286. package/test/unit/spec/metrics/behavioral-events.ts +18 -0
  287. package/test/unit/spec/services/AddressBook.ts +37 -6
  288. package/test/unit/spec/services/AnswerCallOnWebexService.ts +223 -0
  289. package/test/unit/spec/services/ApiAiAssistant.ts +273 -0
  290. package/test/unit/spec/services/EntryPoint.ts +87 -40
  291. package/test/unit/spec/services/Queue.ts +123 -12
  292. package/test/unit/spec/services/UserPreference.ts +401 -0
  293. package/test/unit/spec/services/WebCallingService.ts +7 -1
  294. package/test/unit/spec/services/WebexCrossClientService.ts +261 -0
  295. package/test/unit/spec/services/WxAppTelephonyMercurySync.ts +113 -0
  296. package/test/unit/spec/services/config/Util.ts +85 -0
  297. package/test/unit/spec/services/config/index.ts +85 -29
  298. package/test/unit/spec/services/core/Utils.ts +481 -2
  299. package/test/unit/spec/services/core/WebexRequest.ts +3 -1
  300. package/test/unit/spec/services/core/aqm-reqs.ts +113 -1
  301. package/test/unit/spec/services/core/websocket/WebSocketManager.ts +137 -41
  302. package/test/unit/spec/services/core/websocket/connection-service.ts +3 -1
  303. package/test/unit/spec/services/task/AutoWrapup.ts +63 -0
  304. package/test/unit/spec/services/task/Task.ts +677 -0
  305. package/test/unit/spec/services/task/TaskFactory.ts +99 -0
  306. package/test/unit/spec/services/task/TaskManager.ts +2209 -918
  307. package/test/unit/spec/services/task/TaskUtils.ts +235 -0
  308. package/test/unit/spec/services/task/WebexCallingUtils.ts +153 -0
  309. package/test/unit/spec/services/task/contact.ts +33 -0
  310. package/test/unit/spec/services/task/dialer.ts +372 -96
  311. package/test/unit/spec/services/task/digital/Digital.ts +105 -0
  312. package/test/unit/spec/services/task/state-machine/TaskStateMachine.ts +3433 -0
  313. package/test/unit/spec/services/task/state-machine/guards.ts +839 -0
  314. package/test/unit/spec/services/task/state-machine/types.ts +18 -0
  315. package/test/unit/spec/services/task/state-machine/uiControlsComputer.ts +3101 -0
  316. package/test/unit/spec/services/task/taskTestUtils.ts +87 -0
  317. package/test/unit/spec/services/task/voice/Voice.ts +1523 -0
  318. package/test/unit/spec/services/task/voice/WebRTC.ts +235 -0
  319. package/test/unit/spec/services/task/voice/wxAppVoiceMethods.ts +459 -0
  320. package/umd/contact-center.min.js +2 -2
  321. package/umd/contact-center.min.js.map +1 -1
  322. package/dist/services/task/index.js +0 -1525
  323. package/dist/services/task/index.js.map +0 -1
  324. package/src/services/task/index.ts +0 -1801
  325. package/test/unit/spec/services/task/index.ts +0 -2184
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_events","require","_xstate","_types","_constants","_constants2","_Utils","_MetricsManager","_interopRequireDefault","_constants3","_loggerProxy","_stateMachine","_uiControlsComputer","_AutoWrapup","e","__esModule","default","Task","EventEmitter","constructor","contact","data","uiControlConfig","wrapupData","agentId","channelType","resolveChannelType","metricsManager","MetricsManager","getInstance","webCallMap","currentUiControls","getDefaultUIControls","initializeStateMachine","setupAutoWrapupTimer","mediaType","interaction","MEDIA_CHANNEL","TELEPHONY","TASK_CHANNEL_TYPE","VOICE","DIGITAL","decline","unsupportedMethodError","pauseRecording","resumeRecording","resumeRecordingPayload","consult","consultPayload","endConsult","consultEndPayload","consultTransfer","consultTransferPayload","consultConference","dropConferenceParticipant","payload","METHODS","DROP_CONFERENCE_PARTICIPANT","exitConference","transferConference","switchCall","toggleMute","options","transmitDtmf","unregisterWebCallListeners","LoggerProxy","log","module","CC_FILE","method","interactionId","cancelAutoWrapupTimer","autoWrapup","clear","undefined","hold","resume","holdResume","uiControls","updateUiControls","forceEmit","nextControls","computeUIControls","shouldEmit","haveUIControlsChanged","emit","TASK_EVENTS","TASK_UI_CONTROLS_UPDATED","machine","createTaskStateMachine","actions","getStateMachineActionOverrides","stateMachineService","createActor","subscribe","snapshot","previousState","lastState","currentState","value","eventType","event","type","state","start","sendStateMachineEvent","send","getCurrentState","getSnapshot","setEnableWxBetterTogether","_enabled","applyWxAppMuteStateFromSync","_incomingCallId","_muted","onTaskAssigned","onTaskHydrated","context","mergedContext","stopStateMachine","stop","extractTaskDataFromEvent","taskData","autoAnswerIfNeeded","autoAnswerSupported","voiceVariant","VOICE_VARIANT","WEBRTC","shouldAutoAnswer","isAutoAnswering","info","TASK_FILE","accept","trackEvent","METRIC_EVENT_NAMES","TASK_AUTO_ANSWER_SUCCESS","taskId","isAutoAnswered","TASK_AUTO_ANSWERED","error","updateTaskData","TASK_AUTO_ANSWER_FAILED","message","updateTaskFromEvent","getCommonActionOverrides","getChannelSpecificActionOverrides","createEmitSelfAction","taskEvent","syncTaskDataFromEvent","emitTaskIncoming","TASK_INCOMING","emitTaskCampaignPreviewReservation","TASK_CAMPAIGN_PREVIEW_RESERVATION","emitTaskCampaignPreviewAcceptFailed","TASK_CAMPAIGN_PREVIEW_ACCEPT_FAILED","emitTaskCampaignPreviewSkipFailed","TASK_CAMPAIGN_PREVIEW_SKIP_FAILED","emitTaskCampaignPreviewRemoveFailed","TASK_CAMPAIGN_PREVIEW_REMOVE_FAILED","emitTaskHydrate","TASK_HYDRATE","emitTaskOfferContact","TASK_OFFER_CONTACT","emitTaskAssigned","TASK_ASSIGNED","TASK_MULTI_LOGIN_HYDRATE","emitTaskEnd","TASK_END","emitTaskOfferConsult","TASK_OFFER_CONSULT","emitTaskConsultCreated","TASK_CONSULT_CREATED","emitTaskConsulting","isConsulted","TASK_CONSULT_ACCEPTED","TASK_CONSULTING","emitTaskConsultAccepted","emitTaskConsultEnd","TASK_CONSULT_END","emitTaskConsultQueueCancelled","TASK_CONSULT_QUEUE_CANCELLED","emitTaskConsultQueueFailed","TASK_CONSULT_QUEUE_FAILED","emitTaskReject","reason","TASK_REJECT","emitTaskWrapup","shouldEmitWrapup","Boolean","wrapUpRequired","TASK_WRAPUP","emitTaskWrappedup","TASK_WRAPPEDUP","requestAutoAnswer","requestCleanup","TASK_CLEANUP","removeFromCollection","cleanupResources","wrapUpProps","SETUP_AUTO_WRAPUP_TIMER","defaultWrapupReason","wrapUpReasonList","find","r","isDefault","intervalMs","autoWrapupInterval","AutoWrapup","allowCancelAutoWrapup","wrapup","wrapUpReason","name","auxCodeId","id","reconcileData","oldData","newData","Object","keys","forEach","key","Array","isArray","methodName","Error","updatedData","shouldOverwrite","pruneStaleInteractionMaps","incoming","incomingInteraction","currentInteraction","mapKey","incomingMap","currentMap","transfer","transferPayload","timeEvent","TASK_TRANSFER_SUCCESS","TASK_TRANSFER_FAILED","result","isQueueTransfer","destinationType","DESTINATION_TYPE","QUEUE","isEntryPointTransfer","ENTRYPOINT","vteamTransfer","ENTRY_POINT_TRANSFER_DESTINATION_TYPE","blindTransfer","destination","to","isConsultTransfer","getCommonTrackingFieldForAQMResponse","detailedError","getErrorDetails","toString","getCommonTrackingFieldForAQMResponseFailed","details","end","requestInteractionId","mainInteractionId","TASK_END_SUCCESS","TASK_END_FAILED","response","wrapupPayload","TASK_WRAPUP_SUCCESS","TASK_WRAPUP_FAILED","length","wrapUpCode","exports"],"sources":["Task.ts"],"sourcesContent":["import {EventEmitter} from 'events';\nimport {createActor} from 'xstate';\nimport type {ActorRefFrom, SnapshotFrom} from 'xstate';\nimport {\n ITask,\n TaskData,\n TaskResponse,\n WrapupPayLoad,\n TaskId,\n TransferPayLoad,\n DESTINATION_TYPE,\n TASK_EVENTS,\n TaskUIControls,\n DropConferenceParticipantPayload,\n ConsultEndPayload,\n ConsultPayload,\n ConsultTransferPayLoad,\n ResumeRecordingPayload,\n MEDIA_CHANNEL,\n TASK_CHANNEL_TYPE,\n VOICE_VARIANT,\n CallId,\n TaskToggleMuteOptions,\n TaskTransmitDtmfOptions,\n} from './types';\nimport {ENTRY_POINT_TRANSFER_DESTINATION_TYPE, METHODS} from './constants';\nimport {CC_FILE, TASK_FILE} from '../../constants';\nimport {getErrorDetails} from '../core/Utils';\nimport routingContact from './contact';\nimport MetricsManager from '../../metrics/MetricsManager';\nimport {METRIC_EVENT_NAMES} from '../../metrics/constants';\nimport LoggerProxy from '../../logger-proxy';\nimport {createTaskStateMachine, TaskState} from './state-machine';\nimport type {\n TaskEventPayload,\n TaskStateMachine,\n UIControlConfig,\n TaskContext,\n TaskActionsMap,\n TaskActionArgs,\n} from './state-machine';\nimport {\n computeUIControls,\n getDefaultUIControls,\n haveUIControlsChanged,\n} from './state-machine/uiControlsComputer';\nimport AutoWrapup from './AutoWrapup';\nimport {WrapupData} from '../config/types';\n\ntype UIControlConfigInput = Omit<UIControlConfig, 'channelType'> & {\n channelType?: UIControlConfig['channelType'];\n};\n\nexport default abstract class Task extends EventEmitter implements ITask {\n protected contact: ReturnType<typeof routingContact>;\n protected metricsManager: MetricsManager;\n public stateMachineService?: ActorRefFrom<TaskStateMachine>;\n public data: TaskData;\n public webCallMap: Record<TaskId, CallId>;\n public state?: SnapshotFrom<TaskStateMachine>;\n private lastState?: TaskState;\n protected currentUiControls: TaskUIControls;\n protected uiControlConfig: UIControlConfig;\n protected wrapupData?: WrapupData;\n public autoWrapup?: AutoWrapup;\n protected agentId?: string;\n\n constructor(\n contact: ReturnType<typeof routingContact>,\n data: TaskData,\n uiControlConfig: UIControlConfigInput,\n wrapupData?: WrapupData,\n agentId?: string\n ) {\n super();\n this.contact = contact;\n this.data = data;\n const channelType = uiControlConfig.channelType ?? Task.resolveChannelType(data);\n // Include agentId in the config for ownership checks (transfer conference)\n this.uiControlConfig = {...uiControlConfig, channelType, agentId};\n this.wrapupData = wrapupData;\n this.agentId = agentId;\n this.metricsManager = MetricsManager.getInstance();\n this.webCallMap = {};\n this.currentUiControls = getDefaultUIControls();\n this.initializeStateMachine();\n this.setupAutoWrapupTimer();\n }\n\n private static resolveChannelType(data: TaskData): UIControlConfig['channelType'] {\n const mediaType = data?.interaction?.mediaType ?? MEDIA_CHANNEL.TELEPHONY;\n\n return mediaType === MEDIA_CHANNEL.TELEPHONY\n ? TASK_CHANNEL_TYPE.VOICE\n : TASK_CHANNEL_TYPE.DIGITAL;\n }\n\n // Abstract methods that all child classes must implement\n public abstract accept(): Promise<TaskResponse>;\n\n // Voice-specific methods with default implementations that throw errors\n // Voice class will override these with actual implementations\n public async decline(): Promise<TaskResponse> {\n this.unsupportedMethodError('decline');\n }\n\n public async pauseRecording(): Promise<TaskResponse> {\n this.unsupportedMethodError('pauseRecording');\n }\n\n public async resumeRecording(\n resumeRecordingPayload: ResumeRecordingPayload\n ): Promise<TaskResponse> {\n if (resumeRecordingPayload) {\n // parameter intentionally unused\n }\n this.unsupportedMethodError('resumeRecording');\n }\n\n public async consult(consultPayload: ConsultPayload): Promise<TaskResponse> {\n if (consultPayload) {\n // parameter intentionally unused\n }\n this.unsupportedMethodError('consult');\n }\n\n public async endConsult(consultEndPayload: ConsultEndPayload): Promise<TaskResponse> {\n if (consultEndPayload) {\n // parameter intentionally unused\n }\n this.unsupportedMethodError('endConsult');\n }\n\n public async consultTransfer(\n consultTransferPayload?: ConsultTransferPayLoad\n ): Promise<TaskResponse> {\n if (consultTransferPayload) {\n // parameter intentionally unused\n }\n this.unsupportedMethodError('consultTransfer');\n }\n\n public async consultConference(): Promise<TaskResponse> {\n this.unsupportedMethodError('consultConference');\n }\n\n public async dropConferenceParticipant(\n // The base task preserves the public signature; Voice provides the implementation.\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n payload: DropConferenceParticipantPayload\n ): Promise<TaskResponse> {\n this.unsupportedMethodError(METHODS.DROP_CONFERENCE_PARTICIPANT);\n }\n\n public async exitConference(): Promise<TaskResponse> {\n this.unsupportedMethodError('exitConference');\n }\n\n public async transferConference(): Promise<TaskResponse> {\n this.unsupportedMethodError('transferConference');\n }\n\n public async switchCall(): Promise<TaskResponse> {\n this.unsupportedMethodError('switchCall');\n }\n\n public async toggleMute(options?: TaskToggleMuteOptions): Promise<void> {\n if (options) {\n // parameter intentionally unused\n }\n this.unsupportedMethodError('toggleMute');\n }\n\n public async transmitDtmf(options: TaskTransmitDtmfOptions): Promise<void> {\n if (options) {\n // parameter intentionally unused\n }\n this.unsupportedMethodError('transmitDtmf');\n }\n\n public unregisterWebCallListeners(): void {\n // Default implementation - child classes can override\n LoggerProxy.log('unregisterWebCallListeners called', {\n module: CC_FILE,\n method: 'unregisterWebCallListeners',\n interactionId: this.data?.interactionId,\n });\n }\n\n /**\n * Cancel any in-progress auto wrap-up timer.\n * Base implementation just clears the timer reference so subclasses inherit the behavior.\n */\n public cancelAutoWrapupTimer(): void {\n if (this.autoWrapup) {\n this.autoWrapup.clear();\n this.autoWrapup = undefined;\n LoggerProxy.log('Auto wrap-up timer cancelled', {\n module: CC_FILE,\n method: 'cancelAutoWrapupTimer',\n interactionId: this.data?.interactionId,\n });\n }\n }\n\n // Voice tasks use holdResume(), but provide separate methods for interface compliance\n public async hold(): Promise<TaskResponse> {\n this.unsupportedMethodError('hold');\n }\n\n public async resume(): Promise<TaskResponse> {\n this.unsupportedMethodError('resume');\n }\n\n public async holdResume(): Promise<TaskResponse> {\n this.unsupportedMethodError('holdResume');\n }\n\n /**\n * Latest UI controls derived from state machine state and context.\n */\n public get uiControls(): TaskUIControls {\n return this.currentUiControls;\n }\n\n protected updateUiControls(forceEmit = false): void {\n const nextControls = this.computeUIControls();\n const shouldEmit = forceEmit || haveUIControlsChanged(this.currentUiControls, nextControls);\n this.currentUiControls = nextControls;\n\n if (shouldEmit) {\n this.emit(TASK_EVENTS.TASK_UI_CONTROLS_UPDATED, this.currentUiControls);\n }\n }\n\n /**\n * Initialize the state machine\n */\n private initializeStateMachine(): void {\n const machine: TaskStateMachine = createTaskStateMachine(this.uiControlConfig, {\n actions: this.getStateMachineActionOverrides(),\n });\n\n this.stateMachineService = createActor(machine);\n\n this.stateMachineService.subscribe((snapshot) => {\n const previousState = this.lastState;\n const currentState = snapshot.value as TaskState;\n LoggerProxy.log(`State machine transition: ${previousState || 'N/A'} -> ${currentState}`, {\n module: CC_FILE,\n method: 'onTransition',\n // @ts-ignore - snapshot may include event detail depending on XState version\n eventType: (snapshot as any)?.event?.type,\n });\n this.lastState = currentState;\n this.state = snapshot;\n\n this.updateUiControls(previousState !== currentState);\n });\n\n this.stateMachineService.start();\n this.updateUiControls(true);\n }\n\n /**\n * Send an event to the state machine\n */\n public sendStateMachineEvent(event: TaskEventPayload): void {\n if (this.stateMachineService) {\n LoggerProxy.log(`Sending state machine event: ${event?.type}`, {\n module: CC_FILE,\n method: 'sendStateMachineEvent',\n interactionId: this.data?.interactionId,\n });\n\n this.stateMachineService.send(event);\n }\n }\n\n /**\n * Get the current state machine state\n */\n protected getCurrentState(): TaskState | undefined {\n return this.stateMachineService?.getSnapshot()?.value as TaskState;\n }\n\n /**\n * Compute UI controls based on current state machine state.\n *\n * @returns UI control states for all task actions\n */\n /**\n * Update wxApp thick-client answer flag at runtime (Voice overrides).\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public setEnableWxBetterTogether(_enabled: boolean): void {\n // no-op for non-voice tasks\n }\n\n /**\n * Apply wxApp mute state from external sync (Voice overrides).\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public applyWxAppMuteStateFromSync(_incomingCallId: string, _muted: boolean): void {\n // no-op for non-voice tasks\n }\n\n /**\n * Hook for post-assign wxApp sync (Voice overrides).\n */\n protected onTaskAssigned(): void {\n // no-op by default\n }\n\n /**\n * Hook for post-hydrate wxApp sync (Voice overrides).\n */\n protected onTaskHydrated(): void {\n // no-op by default\n }\n\n protected computeUIControls(): TaskUIControls {\n const snapshot = this.stateMachineService?.getSnapshot?.();\n\n if (!snapshot) {\n return getDefaultUIControls();\n }\n\n const currentState = snapshot.value as TaskState;\n const context = snapshot.context as TaskContext;\n const mergedContext: TaskContext = {\n ...context,\n uiControlConfig: {...context.uiControlConfig, ...this.uiControlConfig},\n };\n\n const uiControls = computeUIControls(currentState, mergedContext, this.data);\n\n return uiControls;\n }\n\n /**\n * Stop the state machine service\n */\n protected stopStateMachine(): void {\n if (this.stateMachineService) {\n this.stateMachineService.stop();\n this.stateMachineService = undefined;\n }\n }\n\n private static extractTaskDataFromEvent(event?: TaskEventPayload): TaskData | undefined {\n if (!event || typeof event !== 'object') {\n return undefined;\n }\n\n if ('taskData' in event) {\n return (event as {taskData?: TaskData}).taskData;\n }\n\n return undefined;\n }\n\n private async autoAnswerIfNeeded(): Promise<void> {\n if (!this.data) {\n return;\n }\n\n const autoAnswerSupported =\n this.uiControlConfig.channelType === TASK_CHANNEL_TYPE.DIGITAL ||\n this.uiControlConfig.voiceVariant === VOICE_VARIANT.WEBRTC;\n\n if (!autoAnswerSupported) {\n return;\n }\n\n const shouldAutoAnswer = this.data.isAutoAnswering === true;\n\n if (!shouldAutoAnswer) {\n return;\n }\n\n LoggerProxy.info(`Auto-answering task`, {\n module: TASK_FILE,\n method: 'autoAnswerIfNeeded',\n interactionId: this.data.interactionId,\n });\n\n try {\n await this.accept();\n LoggerProxy.info(`Task auto-answered successfully`, {\n module: TASK_FILE,\n method: 'autoAnswerIfNeeded',\n interactionId: this.data.interactionId,\n });\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_AUTO_ANSWER_SUCCESS,\n {\n taskId: this.data.interactionId,\n mediaType: this.data.interaction.mediaType,\n isAutoAnswered: true,\n },\n ['behavioral', 'operational']\n );\n\n this.emit(TASK_EVENTS.TASK_AUTO_ANSWERED, this);\n } catch (error) {\n this.updateTaskData({...this.data, isAutoAnswering: false});\n LoggerProxy.error(`Failed to auto-answer task`, {\n module: TASK_FILE,\n method: 'autoAnswerIfNeeded',\n interactionId: this.data.interactionId,\n error,\n });\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_AUTO_ANSWER_FAILED,\n {\n taskId: this.data.interactionId,\n mediaType: this.data.interaction.mediaType,\n error: error?.message || 'Unknown error',\n isAutoAnswered: false,\n },\n ['behavioral', 'operational']\n );\n }\n }\n\n private updateTaskFromEvent(event?: TaskEventPayload): void {\n const taskData = Task.extractTaskDataFromEvent(event);\n if (taskData) {\n this.updateTaskData(taskData);\n }\n }\n\n protected getStateMachineActionOverrides(): Partial<TaskActionsMap> {\n return {\n ...this.getCommonActionOverrides(),\n ...this.getChannelSpecificActionOverrides(),\n };\n }\n\n protected getChannelSpecificActionOverrides(): Partial<TaskActionsMap> {\n return {};\n }\n\n protected createEmitSelfAction(\n taskEvent: TASK_EVENTS,\n {updateTaskData = false}: {updateTaskData?: boolean} = {}\n ) {\n return ({event}: TaskActionArgs) => {\n if (updateTaskData) {\n this.updateTaskFromEvent(event);\n }\n LoggerProxy.info(`Emitting task event ${taskEvent}`, {\n module: TASK_FILE,\n method: 'emitTaskEvent',\n interactionId: this.data?.interactionId,\n });\n this.emit(taskEvent, this);\n };\n }\n\n private getCommonActionOverrides(): Partial<TaskActionsMap> {\n return {\n syncTaskDataFromEvent: ({event}: {event: TaskEventPayload}) => {\n this.updateTaskFromEvent(event);\n },\n emitTaskIncoming: this.createEmitSelfAction(TASK_EVENTS.TASK_INCOMING, {\n updateTaskData: true,\n }),\n emitTaskCampaignPreviewReservation: this.createEmitSelfAction(\n TASK_EVENTS.TASK_CAMPAIGN_PREVIEW_RESERVATION,\n {updateTaskData: true}\n ),\n emitTaskCampaignPreviewAcceptFailed: this.createEmitSelfAction(\n TASK_EVENTS.TASK_CAMPAIGN_PREVIEW_ACCEPT_FAILED\n ),\n emitTaskCampaignPreviewSkipFailed: this.createEmitSelfAction(\n TASK_EVENTS.TASK_CAMPAIGN_PREVIEW_SKIP_FAILED\n ),\n emitTaskCampaignPreviewRemoveFailed: this.createEmitSelfAction(\n TASK_EVENTS.TASK_CAMPAIGN_PREVIEW_REMOVE_FAILED\n ),\n emitTaskHydrate: ({event}: TaskActionArgs) => {\n this.updateTaskFromEvent(event);\n LoggerProxy.info(`Emitting task event ${TASK_EVENTS.TASK_HYDRATE}`, {\n module: TASK_FILE,\n method: 'emitTaskEvent',\n interactionId: this.data?.interactionId,\n });\n this.emit(TASK_EVENTS.TASK_HYDRATE, this);\n this.onTaskHydrated();\n },\n emitTaskOfferContact: this.createEmitSelfAction(TASK_EVENTS.TASK_OFFER_CONTACT, {\n updateTaskData: true,\n }),\n emitTaskAssigned: ({event}: TaskActionArgs) => {\n this.updateTaskFromEvent(event);\n this.emit(TASK_EVENTS.TASK_ASSIGNED, this);\n this.emit(TASK_EVENTS.TASK_MULTI_LOGIN_HYDRATE, this);\n this.onTaskAssigned();\n },\n emitTaskEnd: this.createEmitSelfAction(TASK_EVENTS.TASK_END, {updateTaskData: true}),\n emitTaskOfferConsult: this.createEmitSelfAction(TASK_EVENTS.TASK_OFFER_CONSULT, {\n updateTaskData: true,\n }),\n emitTaskConsultCreated: this.createEmitSelfAction(TASK_EVENTS.TASK_CONSULT_CREATED, {\n updateTaskData: true,\n }),\n emitTaskConsulting: ({event}: TaskActionArgs) => {\n this.updateTaskFromEvent(event);\n if (this.data.isConsulted) {\n this.emit(TASK_EVENTS.TASK_CONSULT_ACCEPTED, this);\n } else {\n this.emit(TASK_EVENTS.TASK_CONSULTING, this);\n }\n this.emit(TASK_EVENTS.TASK_MULTI_LOGIN_HYDRATE, this);\n },\n emitTaskConsultAccepted: this.createEmitSelfAction(TASK_EVENTS.TASK_CONSULT_ACCEPTED),\n emitTaskConsultEnd: this.createEmitSelfAction(TASK_EVENTS.TASK_CONSULT_END, {\n updateTaskData: true,\n }),\n emitTaskConsultQueueCancelled: this.createEmitSelfAction(\n TASK_EVENTS.TASK_CONSULT_QUEUE_CANCELLED,\n {\n updateTaskData: true,\n }\n ),\n emitTaskConsultQueueFailed: this.createEmitSelfAction(TASK_EVENTS.TASK_CONSULT_QUEUE_FAILED, {\n updateTaskData: true,\n }),\n emitTaskReject: ({event}: TaskActionArgs) => {\n this.updateTaskFromEvent(event);\n const reason =\n event && typeof event === 'object' && 'reason' in event\n ? (event as {reason?: string}).reason\n : undefined;\n this.emit(TASK_EVENTS.TASK_REJECT, reason);\n },\n emitTaskWrapup: ({event}: {event?: TaskEventPayload}) => {\n this.updateTaskFromEvent(event);\n\n const shouldEmitWrapup = Boolean(this.data.wrapUpRequired);\n if (!shouldEmitWrapup) {\n LoggerProxy.info(`Skipping task:wrapup event - wrapUpRequired is false`, {\n module: TASK_FILE,\n method: 'emitTaskEvent',\n interactionId: this.data?.interactionId,\n });\n\n return;\n }\n LoggerProxy.info(`Emitting task event ${TASK_EVENTS.TASK_WRAPUP}`, {\n module: TASK_FILE,\n method: 'emitTaskEvent',\n interactionId: this.data?.interactionId,\n });\n this.emit(TASK_EVENTS.TASK_WRAPUP, this);\n },\n emitTaskWrappedup: this.createEmitSelfAction(TASK_EVENTS.TASK_WRAPPEDUP, {\n updateTaskData: true,\n }),\n requestAutoAnswer: ({event}: TaskActionArgs) => {\n if (event) {\n // parameter intentionally unused\n }\n this.autoAnswerIfNeeded();\n },\n requestCleanup: () => {\n this.emit(TASK_EVENTS.TASK_CLEANUP, this, {removeFromCollection: false});\n },\n cleanupResources: () => {\n this.emit(TASK_EVENTS.TASK_CLEANUP, this, {removeFromCollection: true});\n },\n };\n }\n\n /**\n * Sets up the automatic wrap-up timer if wrap-up is required\n */\n protected setupAutoWrapupTimer(): void {\n if (\n this.data.wrapUpRequired &&\n !this.autoWrapup &&\n this.wrapupData &&\n this.wrapupData.wrapUpProps\n ) {\n const wrapUpProps = this.wrapupData.wrapUpProps;\n if (!wrapUpProps || wrapUpProps.autoWrapup === false) {\n LoggerProxy.info(`Auto wrap-up is not required for this task`, {\n module: TASK_FILE,\n method: METHODS.SETUP_AUTO_WRAPUP_TIMER,\n interactionId: this.data.interactionId,\n });\n\n return;\n }\n const defaultWrapupReason =\n wrapUpProps.wrapUpReasonList?.find((r) => r.isDefault) ?? wrapUpProps.wrapUpReasonList?.[0];\n if (!defaultWrapupReason) {\n LoggerProxy.error('No wrap-up reason configured', {\n module: TASK_FILE,\n method: METHODS.SETUP_AUTO_WRAPUP_TIMER,\n });\n\n return;\n }\n const intervalMs = wrapUpProps.autoWrapupInterval;\n if (!intervalMs || intervalMs <= 0) {\n LoggerProxy.error(`Invalid auto wrap-up interval: ${intervalMs}`, {\n module: TASK_FILE,\n method: METHODS.SETUP_AUTO_WRAPUP_TIMER,\n });\n\n return;\n }\n this.autoWrapup = new AutoWrapup(intervalMs, wrapUpProps.allowCancelAutoWrapup);\n this.autoWrapup.start(async () => {\n LoggerProxy.info(`Auto wrap-up timer triggered`, {\n module: TASK_FILE,\n method: METHODS.SETUP_AUTO_WRAPUP_TIMER,\n interactionId: this.data.interactionId,\n });\n await this.wrapup({\n wrapUpReason: defaultWrapupReason.name,\n auxCodeId: defaultWrapupReason.id,\n });\n });\n }\n }\n\n /**\n * Cancels the automatic wrap-up timer if it's running\n */\n private reconcileData(oldData: TaskData, newData: TaskData): TaskData {\n Object.keys(newData).forEach((key) => {\n if (newData[key] && typeof newData[key] === 'object' && !Array.isArray(newData[key])) {\n oldData[key] = this.reconcileData({...oldData[key]}, newData[key]);\n } else {\n oldData[key] = newData[key];\n }\n });\n\n return oldData;\n }\n\n /**\n *\n * @param methodName - The name of the method that is unsupported\n * @throws Error\n */\n protected unsupportedMethodError(methodName: string) {\n LoggerProxy.error(`Unsupported operation`, {\n module: 'TASK',\n method: methodName,\n interactionId: this.data?.interactionId,\n });\n throw new Error(`Unsupported operation: ${methodName}`);\n }\n\n /**\n * This method is used to update the task data.\n * @param updatedData - TaskData\n * @param shouldOverwrite - boolean\n * @example\n * ```typescript\n * task.updateTaskData(updatedData, true);\n * ```\n */\n public updateTaskData(updatedData: TaskData, shouldOverwrite = false): ITask {\n this.data = shouldOverwrite ? updatedData : this.reconcileData(this.data, updatedData);\n if (!shouldOverwrite) {\n this.pruneStaleInteractionMaps(updatedData);\n }\n this.updateUiControls();\n this.setupAutoWrapupTimer();\n\n return this;\n }\n\n /**\n * The backend sends `interaction.media` and `interaction.participants` as complete snapshots\n * of the current call state. `reconcileData` deep-merges and never removes keys, so entries the\n * backend dropped (e.g. a consult leg's media and consultee participant after the consult ends)\n * linger in `this.data`. That stale data drives incorrect UI controls (e.g. the consult button\n * staying disabled after the consult leg is gone, until a page refresh re-hydrates cleanly).\n * Make only these two snapshot maps authoritative to the incoming payload, leaving every other\n * field on the generic deep-merge path (CAD and other partial updates still merge as before).\n */\n private pruneStaleInteractionMaps(incoming: TaskData): void {\n const incomingInteraction = incoming?.interaction;\n const currentInteraction = this.data?.interaction;\n if (!incomingInteraction || !currentInteraction) {\n return;\n }\n\n (['media', 'participants'] as const).forEach((mapKey) => {\n const incomingMap = incomingInteraction[mapKey] as Record<string, unknown> | undefined;\n const currentMap = currentInteraction[mapKey] as Record<string, unknown> | undefined;\n if (!incomingMap || !currentMap || typeof incomingMap !== 'object') {\n return;\n }\n\n Object.keys(currentMap).forEach((id) => {\n if (!(id in incomingMap)) {\n delete currentMap[id];\n }\n });\n });\n }\n\n /**\n * This is used to blind transfer or vTeam transfer the task\n * @param transferPayload\n * @returns Promise<TaskResponse>\n * @throws Error\n * @example\n * ```typescript\n * const transferPayload = {\n * to: 'myQueueId',\n * destinationType: 'queue',\n * }\n * task.transfer(transferPayload).then(()=>{}).catch(()=>{});\n * ```\n */\n public async transfer(transferPayload: TransferPayLoad): Promise<TaskResponse> {\n LoggerProxy.log(`Starting task transfer for taskId:${this.data.interactionId}`, {\n module: 'Task',\n method: 'transfer',\n });\n try {\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_TRANSFER_SUCCESS,\n METRIC_EVENT_NAMES.TASK_TRANSFER_FAILED,\n ]);\n let result: TaskResponse;\n const isQueueTransfer = transferPayload.destinationType === DESTINATION_TYPE.QUEUE;\n const isEntryPointTransfer = transferPayload.destinationType === DESTINATION_TYPE.ENTRYPOINT;\n\n if (isQueueTransfer || isEntryPointTransfer) {\n result = await this.contact.vteamTransfer({\n interactionId: this.data.interactionId,\n data: {\n ...transferPayload,\n destinationType: isEntryPointTransfer\n ? ENTRY_POINT_TRANSFER_DESTINATION_TYPE\n : DESTINATION_TYPE.QUEUE,\n },\n });\n } else {\n result = await this.contact.blindTransfer({\n interactionId: this.data.interactionId,\n data: transferPayload,\n });\n }\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_TRANSFER_SUCCESS,\n {\n taskId: this.data.interactionId,\n destination: transferPayload.to,\n destinationType: transferPayload.destinationType,\n isConsultTransfer: false,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(result),\n },\n ['operational', 'behavioral', 'business']\n );\n\n return result;\n } catch (error) {\n const {error: detailedError} = getErrorDetails(error, 'transfer', CC_FILE);\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_TRANSFER_FAILED,\n {\n taskId: this.data.interactionId,\n destination: transferPayload.to,\n destinationType: transferPayload.destinationType,\n isConsultTransfer: false,\n error: error.toString(),\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(\n (error as any).details || {}\n ),\n },\n ['operational', 'behavioral', 'business']\n );\n throw detailedError;\n }\n }\n\n /**\n * This is used to end the task.\n * @returns Promise<TaskResponse>\n * @throws Error\n * @example\n * ```typescript\n * task.end().then(()=>{}).catch(()=>{})\n * ```\n */\n public async end(): Promise<TaskResponse> {\n LoggerProxy.log(`Ending task for taskId:${this.data.interactionId}`, {\n module: 'Task',\n method: 'end',\n });\n const requestInteractionId =\n this.data.interaction?.mainInteractionId || this.data.interactionId;\n\n try {\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_END_SUCCESS,\n METRIC_EVENT_NAMES.TASK_END_FAILED,\n ]);\n const response = await this.contact.end({interactionId: requestInteractionId});\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_END_SUCCESS,\n {\n taskId: this.data.interactionId,\n requestInteractionId,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(response),\n },\n ['operational', 'behavioral', 'business']\n );\n\n return response;\n } catch (error) {\n const {error: detailedError} = getErrorDetails(error, 'end', CC_FILE);\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_END_FAILED,\n {\n taskId: this.data.interactionId,\n requestInteractionId,\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(\n (error as any).details || {}\n ),\n },\n ['operational', 'behavioral', 'business']\n );\n throw detailedError;\n }\n }\n\n /**\n * This is used to wrap up the task.\n * @param wrapupPayload - WrapupPayLoad\n * @returns Promise<TaskResponse>\n * @throws Error\n * @example\n * ```typescript\n * task.wrapup(wrapupPayload).then(()=>{}).catch(()=>{})\n * ```\n */\n public async wrapup(wrapupPayload: WrapupPayLoad): Promise<TaskResponse> {\n this.cancelAutoWrapupTimer();\n LoggerProxy.log(`Starting task wrapup for taskId:${this.data.interactionId}`, {\n module: 'Task',\n method: 'wrapup',\n });\n try {\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_WRAPUP_SUCCESS,\n METRIC_EVENT_NAMES.TASK_WRAPUP_FAILED,\n ]);\n if (!this.data) {\n throw new Error('No task data available');\n }\n if (!wrapupPayload.auxCodeId || wrapupPayload.auxCodeId.length === 0) {\n throw new Error('AuxCodeId is required');\n }\n if (!wrapupPayload.wrapUpReason || wrapupPayload.wrapUpReason.length === 0) {\n throw new Error('WrapUpReason is required');\n }\n\n const response = await this.contact.wrapup({\n interactionId: this.data.interactionId,\n data: wrapupPayload,\n });\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_WRAPUP_SUCCESS,\n {\n taskId: this.data.interactionId,\n wrapUpCode: wrapupPayload.auxCodeId,\n wrapUpReason: wrapupPayload.wrapUpReason,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(response),\n },\n ['operational', 'behavioral', 'business']\n );\n\n return response;\n } catch (error) {\n const {error: detailedError} = getErrorDetails(error, 'wrapup', CC_FILE);\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_WRAPUP_FAILED,\n {\n taskId: this.data.interactionId,\n wrapUpCode: wrapupPayload.auxCodeId,\n wrapUpReason: wrapupPayload.wrapUpReason,\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(\n (error as any).details || {}\n ),\n },\n ['operational', 'behavioral', 'business']\n );\n throw detailedError;\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _Voice = _interopRequireDefault(require("./voice/Voice"));
8
+ var _WebRTC = _interopRequireDefault(require("./voice/WebRTC"));
9
+ var _Digital = _interopRequireDefault(require("./digital/Digital"));
10
+ var _types = require("./types");
11
+ var _types2 = require("../../types");
12
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
+ class TaskFactory {
14
+ /**
15
+ * Creates the correct Task subclass based on mediaType & loginOption
16
+ */
17
+ static createTask(contact, webCallingService, data, configFlags, wrapupData, agentId, answerCallOnWebexService) {
18
+ const mediaType = data.interaction.mediaType ?? _types.MEDIA_CHANNEL.TELEPHONY;
19
+ const {
20
+ isEndTaskEnabled,
21
+ isEndConsultEnabled,
22
+ consultTransfer
23
+ } = configFlags;
24
+ const recordingEnabled = data?.interaction?.callProcessingDetails?.pauseResumeEnabled ?? true;
25
+ const voiceControlOptions = {
26
+ isEndTaskEnabled,
27
+ isEndConsultEnabled,
28
+ isRecordingEnabled: recordingEnabled,
29
+ enableWxBetterTogether: configFlags.enableWxBetterTogether ?? false,
30
+ answerCallOnWebexService,
31
+ consultTransferConfig: consultTransfer
32
+ };
33
+ switch (mediaType) {
34
+ case _types.MEDIA_CHANNEL.TELEPHONY:
35
+ if (webCallingService.loginOption === _types2.LoginOption.BROWSER) {
36
+ return new _WebRTC.default(contact, webCallingService, data, voiceControlOptions, wrapupData, agentId);
37
+ }
38
+ return new _Voice.default(contact, data, voiceControlOptions, wrapupData, agentId);
39
+ case _types.MEDIA_CHANNEL.CHAT:
40
+ case _types.MEDIA_CHANNEL.EMAIL:
41
+ case _types.MEDIA_CHANNEL.SOCIAL:
42
+ return new _Digital.default(contact, data, wrapupData, agentId, consultTransfer);
43
+ default:
44
+ throw new Error(`Unknown media type: ${mediaType}`);
45
+ }
46
+ }
47
+ }
48
+ exports.default = TaskFactory;
49
+ //# sourceMappingURL=TaskFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_Voice","_interopRequireDefault","require","_WebRTC","_Digital","_types","_types2","e","__esModule","default","TaskFactory","createTask","contact","webCallingService","data","configFlags","wrapupData","agentId","answerCallOnWebexService","mediaType","interaction","MEDIA_CHANNEL","TELEPHONY","isEndTaskEnabled","isEndConsultEnabled","consultTransfer","recordingEnabled","callProcessingDetails","pauseResumeEnabled","voiceControlOptions","isRecordingEnabled","enableWxBetterTogether","consultTransferConfig","loginOption","LoginOption","BROWSER","WebRTC","Voice","CHAT","EMAIL","SOCIAL","Digital","Error","exports"],"sources":["TaskFactory.ts"],"sourcesContent":["import routingContact from './contact';\nimport WebCallingService from '../WebCallingService';\nimport AnswerCallOnWebexService from '../AnswerCallOnWebexService';\nimport Task from './Task';\nimport Voice from './voice/Voice';\nimport WebRTC from './voice/WebRTC';\nimport Digital from './digital/Digital';\nimport {MEDIA_CHANNEL, TaskData} from './types';\nimport {ConfigFlags, LoginOption} from '../../types';\nimport {WrapupData} from '../config/types';\n\nexport default class TaskFactory {\n /**\n * Creates the correct Task subclass based on mediaType & loginOption\n */\n public static createTask(\n contact: ReturnType<typeof routingContact>,\n webCallingService: WebCallingService,\n data: TaskData,\n configFlags: ConfigFlags,\n wrapupData?: WrapupData,\n agentId?: string,\n answerCallOnWebexService?: AnswerCallOnWebexService\n ): Task {\n const mediaType = data.interaction.mediaType ?? MEDIA_CHANNEL.TELEPHONY;\n const {isEndTaskEnabled, isEndConsultEnabled, consultTransfer} = configFlags;\n const recordingEnabled = data?.interaction?.callProcessingDetails?.pauseResumeEnabled ?? true;\n const voiceControlOptions = {\n isEndTaskEnabled,\n isEndConsultEnabled,\n isRecordingEnabled: recordingEnabled,\n enableWxBetterTogether: configFlags.enableWxBetterTogether ?? false,\n answerCallOnWebexService,\n consultTransferConfig: consultTransfer,\n };\n switch (mediaType) {\n case MEDIA_CHANNEL.TELEPHONY:\n if (webCallingService.loginOption === LoginOption.BROWSER) {\n return new WebRTC(\n contact,\n webCallingService,\n data,\n voiceControlOptions,\n wrapupData,\n agentId\n );\n }\n\n return new Voice(contact, data, voiceControlOptions, wrapupData, agentId);\n\n case MEDIA_CHANNEL.CHAT:\n case MEDIA_CHANNEL.EMAIL:\n case MEDIA_CHANNEL.SOCIAL:\n return new Digital(contact, data, wrapupData, agentId, consultTransfer);\n\n default:\n throw new Error(`Unknown media type: ${mediaType}`);\n }\n }\n}\n"],"mappings":";;;;;;AAIA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,QAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,MAAA,GAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AAAqD,SAAAD,uBAAAM,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAGtC,MAAMG,WAAW,CAAC;EAC/B;AACF;AACA;EACE,OAAcC,UAAUA,CACtBC,OAA0C,EAC1CC,iBAAoC,EACpCC,IAAc,EACdC,WAAwB,EACxBC,UAAuB,EACvBC,OAAgB,EAChBC,wBAAmD,EAC7C;IACN,MAAMC,SAAS,GAAGL,IAAI,CAACM,WAAW,CAACD,SAAS,IAAIE,oBAAa,CAACC,SAAS;IACvE,MAAM;MAACC,gBAAgB;MAAEC,mBAAmB;MAAEC;IAAe,CAAC,GAAGV,WAAW;IAC5E,MAAMW,gBAAgB,GAAGZ,IAAI,EAAEM,WAAW,EAAEO,qBAAqB,EAAEC,kBAAkB,IAAI,IAAI;IAC7F,MAAMC,mBAAmB,GAAG;MAC1BN,gBAAgB;MAChBC,mBAAmB;MACnBM,kBAAkB,EAAEJ,gBAAgB;MACpCK,sBAAsB,EAAEhB,WAAW,CAACgB,sBAAsB,IAAI,KAAK;MACnEb,wBAAwB;MACxBc,qBAAqB,EAAEP;IACzB,CAAC;IACD,QAAQN,SAAS;MACf,KAAKE,oBAAa,CAACC,SAAS;QAC1B,IAAIT,iBAAiB,CAACoB,WAAW,KAAKC,mBAAW,CAACC,OAAO,EAAE;UACzD,OAAO,IAAIC,eAAM,CACfxB,OAAO,EACPC,iBAAiB,EACjBC,IAAI,EACJe,mBAAmB,EACnBb,UAAU,EACVC,OACF,CAAC;QACH;QAEA,OAAO,IAAIoB,cAAK,CAACzB,OAAO,EAAEE,IAAI,EAAEe,mBAAmB,EAAEb,UAAU,EAAEC,OAAO,CAAC;MAE3E,KAAKI,oBAAa,CAACiB,IAAI;MACvB,KAAKjB,oBAAa,CAACkB,KAAK;MACxB,KAAKlB,oBAAa,CAACmB,MAAM;QACvB,OAAO,IAAIC,gBAAO,CAAC7B,OAAO,EAAEE,IAAI,EAAEE,UAAU,EAAEC,OAAO,EAAEQ,eAAe,CAAC;MAEzE;QACE,MAAM,IAAIiB,KAAK,CAAC,uBAAuBvB,SAAS,EAAE,CAAC;IACvD;EACF;AACF;AAACwB,OAAA,CAAAlC,OAAA,GAAAC,WAAA","ignoreList":[]}