@webex/contact-center 3.12.0-next.17 → 3.12.0-next.171

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 (328) hide show
  1. package/.sdd/manifest.json +887 -0
  2. package/AGENTS.md +94 -0
  3. package/ai-docs/ARCHITECTURE.md +168 -0
  4. package/ai-docs/CONTRACTS.md +62 -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 +52 -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 +385 -0
  17. package/ai-docs/features/consult-transfer-list-policy/spec/feature-spec.md +362 -0
  18. package/ai-docs/features/contact-owner-change-refactor.md +78 -0
  19. package/ai-docs/features/generated-spec-conformance-fidelity-remediation/spec/feature-spec.md +117 -0
  20. package/ai-docs/features/residual-warning-coverage-completion/spec/feature-spec.md +203 -0
  21. package/ai-docs/features/validator-code-fidelity-drift-fix/spec/feature-spec.md +315 -0
  22. package/ai-docs/patterns/event-driven-patterns.md +485 -0
  23. package/ai-docs/patterns/testing-patterns.md +480 -0
  24. package/ai-docs/patterns/typescript-patterns.md +365 -0
  25. package/ai-docs/templates/README.md +102 -0
  26. package/ai-docs/templates/documentation/create-agents-md.md +240 -0
  27. package/ai-docs/templates/documentation/create-architecture-md.md +295 -0
  28. package/ai-docs/templates/existing-service/bug-fix.md +254 -0
  29. package/ai-docs/templates/existing-service/feature-enhancement.md +450 -0
  30. package/ai-docs/templates/new-method/00-master.md +80 -0
  31. package/ai-docs/templates/new-method/01-requirements.md +232 -0
  32. package/ai-docs/templates/new-method/02-implementation.md +295 -0
  33. package/ai-docs/templates/new-method/03-tests.md +201 -0
  34. package/ai-docs/templates/new-method/04-validation.md +141 -0
  35. package/ai-docs/templates/new-service/00-master.md +109 -0
  36. package/ai-docs/templates/new-service/01-pre-questions.md +159 -0
  37. package/ai-docs/templates/new-service/02-code-generation.md +346 -0
  38. package/ai-docs/templates/new-service/03-integration.md +178 -0
  39. package/ai-docs/templates/new-service/04-test-generation.md +205 -0
  40. package/ai-docs/templates/new-service/05-validation.md +145 -0
  41. package/dist/cc.js +888 -49
  42. package/dist/cc.js.map +1 -1
  43. package/dist/config.js +13 -0
  44. package/dist/config.js.map +1 -1
  45. package/dist/constants.js +38 -3
  46. package/dist/constants.js.map +1 -1
  47. package/dist/index.js +54 -17
  48. package/dist/index.js.map +1 -1
  49. package/dist/metrics/MetricsManager.js +16 -0
  50. package/dist/metrics/MetricsManager.js.map +1 -1
  51. package/dist/metrics/behavioral-events.js +185 -0
  52. package/dist/metrics/behavioral-events.js.map +1 -1
  53. package/dist/metrics/constants.js +54 -4
  54. package/dist/metrics/constants.js.map +1 -1
  55. package/dist/services/AddressBook.js +18 -15
  56. package/dist/services/AddressBook.js.map +1 -1
  57. package/dist/services/AnswerCallOnWebexService.js +202 -0
  58. package/dist/services/AnswerCallOnWebexService.js.map +1 -0
  59. package/dist/services/ApiAiAssistant.js +369 -14
  60. package/dist/services/ApiAiAssistant.js.map +1 -1
  61. package/dist/services/EntryPoint.js +46 -68
  62. package/dist/services/EntryPoint.js.map +1 -1
  63. package/dist/services/Queue.js +27 -22
  64. package/dist/services/Queue.js.map +1 -1
  65. package/dist/services/UserPreference.js +427 -0
  66. package/dist/services/UserPreference.js.map +1 -0
  67. package/dist/services/WebCallingService.js +10 -2
  68. package/dist/services/WebCallingService.js.map +1 -1
  69. package/dist/services/WebexCrossClientService.js +225 -0
  70. package/dist/services/WebexCrossClientService.js.map +1 -0
  71. package/dist/services/WxAppTelephonyMercurySync.js +111 -0
  72. package/dist/services/WxAppTelephonyMercurySync.js.map +1 -0
  73. package/dist/services/config/Util.js +48 -48
  74. package/dist/services/config/Util.js.map +1 -1
  75. package/dist/services/config/constants.js +56 -78
  76. package/dist/services/config/constants.js.map +1 -1
  77. package/dist/services/config/index.js +100 -226
  78. package/dist/services/config/index.js.map +1 -1
  79. package/dist/services/config/types.js +93 -24
  80. package/dist/services/config/types.js.map +1 -1
  81. package/dist/services/constants.js +11 -1
  82. package/dist/services/constants.js.map +1 -1
  83. package/dist/services/core/Err.js.map +1 -1
  84. package/dist/services/core/Utils.js +131 -32
  85. package/dist/services/core/Utils.js.map +1 -1
  86. package/dist/services/core/WebexRequest.js +6 -2
  87. package/dist/services/core/WebexRequest.js.map +1 -1
  88. package/dist/services/core/aqm-reqs.js +17 -11
  89. package/dist/services/core/aqm-reqs.js.map +1 -1
  90. package/dist/services/core/constants.js +9 -1
  91. package/dist/services/core/constants.js.map +1 -1
  92. package/dist/services/core/types.js.map +1 -1
  93. package/dist/services/core/websocket/WebSocketManager.js +19 -2
  94. package/dist/services/core/websocket/WebSocketManager.js.map +1 -1
  95. package/dist/services/core/websocket/types.js.map +1 -1
  96. package/dist/services/index.js +1 -1
  97. package/dist/services/index.js.map +1 -1
  98. package/dist/services/task/Task.js +955 -0
  99. package/dist/services/task/Task.js.map +1 -0
  100. package/dist/services/task/TaskFactory.js +50 -0
  101. package/dist/services/task/TaskFactory.js.map +1 -0
  102. package/dist/services/task/TaskManager.js +1272 -605
  103. package/dist/services/task/TaskManager.js.map +1 -1
  104. package/dist/services/task/TaskUtils.js +221 -27
  105. package/dist/services/task/TaskUtils.js.map +1 -1
  106. package/dist/services/task/WebexCallingUtils.js +70 -0
  107. package/dist/services/task/WebexCallingUtils.js.map +1 -0
  108. package/dist/services/task/constants.js +19 -2
  109. package/dist/services/task/constants.js.map +1 -1
  110. package/dist/services/task/contact.js +29 -0
  111. package/dist/services/task/contact.js.map +1 -1
  112. package/dist/services/task/digital/Digital.js +78 -0
  113. package/dist/services/task/digital/Digital.js.map +1 -0
  114. package/dist/services/task/state-machine/TaskStateMachine.js +982 -0
  115. package/dist/services/task/state-machine/TaskStateMachine.js.map +1 -0
  116. package/dist/services/task/state-machine/actions.js +572 -0
  117. package/dist/services/task/state-machine/actions.js.map +1 -0
  118. package/dist/services/task/state-machine/constants.js +161 -0
  119. package/dist/services/task/state-machine/constants.js.map +1 -0
  120. package/dist/services/task/state-machine/guards.js +379 -0
  121. package/dist/services/task/state-machine/guards.js.map +1 -0
  122. package/dist/services/task/state-machine/index.js +53 -0
  123. package/dist/services/task/state-machine/index.js.map +1 -0
  124. package/dist/services/task/state-machine/types.js +54 -0
  125. package/dist/services/task/state-machine/types.js.map +1 -0
  126. package/dist/services/task/state-machine/uiControlsComputer.js +703 -0
  127. package/dist/services/task/state-machine/uiControlsComputer.js.map +1 -0
  128. package/dist/services/task/taskDataNormalizer.js +99 -0
  129. package/dist/services/task/taskDataNormalizer.js.map +1 -0
  130. package/dist/services/task/types.js +215 -5
  131. package/dist/services/task/types.js.map +1 -1
  132. package/dist/services/task/voice/Voice.js +1504 -0
  133. package/dist/services/task/voice/Voice.js.map +1 -0
  134. package/dist/services/task/voice/WebRTC.js +152 -0
  135. package/dist/services/task/voice/WebRTC.js.map +1 -0
  136. package/dist/services/task/voice/wxAppOfferObservability.js +145 -0
  137. package/dist/services/task/voice/wxAppOfferObservability.js.map +1 -0
  138. package/dist/services/task/voice/wxAppVoiceMethods.js +395 -0
  139. package/dist/services/task/voice/wxAppVoiceMethods.js.map +1 -0
  140. package/dist/services/wxAppDiagnosticLogging.js +159 -0
  141. package/dist/services/wxAppDiagnosticLogging.js.map +1 -0
  142. package/dist/services/wxAppTelephonyUtils.js +19 -0
  143. package/dist/services/wxAppTelephonyUtils.js.map +1 -0
  144. package/dist/types/cc.d.ts +152 -9
  145. package/dist/types/config.d.ts +13 -0
  146. package/dist/types/constants.d.ts +36 -1
  147. package/dist/types/index.d.ts +54 -20
  148. package/dist/types/metrics/MetricsManager.d.ts +6 -0
  149. package/dist/types/metrics/constants.d.ts +48 -1
  150. package/dist/types/services/AddressBook.d.ts +2 -1
  151. package/dist/types/services/AnswerCallOnWebexService.d.ts +38 -0
  152. package/dist/types/services/ApiAiAssistant.d.ts +67 -5
  153. package/dist/types/services/EntryPoint.d.ts +7 -5
  154. package/dist/types/services/Queue.d.ts +5 -3
  155. package/dist/types/services/UserPreference.d.ts +118 -0
  156. package/dist/types/services/WebexCrossClientService.d.ts +32 -0
  157. package/dist/types/services/WxAppTelephonyMercurySync.d.ts +28 -0
  158. package/dist/types/services/config/Util.d.ts +4 -8
  159. package/dist/types/services/config/constants.d.ts +49 -76
  160. package/dist/types/services/config/index.d.ts +16 -64
  161. package/dist/types/services/config/types.d.ts +240 -114
  162. package/dist/types/services/constants.d.ts +9 -0
  163. package/dist/types/services/core/Err.d.ts +2 -0
  164. package/dist/types/services/core/Utils.d.ts +43 -13
  165. package/dist/types/services/core/WebexRequest.d.ts +1 -0
  166. package/dist/types/services/core/constants.d.ts +7 -0
  167. package/dist/types/services/core/types.d.ts +2 -0
  168. package/dist/types/services/core/websocket/WebSocketManager.d.ts +1 -0
  169. package/dist/types/services/core/websocket/types.d.ts +1 -1
  170. package/dist/types/services/index.d.ts +1 -1
  171. package/dist/types/services/task/Task.d.ts +186 -0
  172. package/dist/types/services/task/TaskFactory.d.ts +14 -0
  173. package/dist/types/services/task/TaskUtils.d.ts +54 -2
  174. package/dist/types/services/task/WebexCallingUtils.d.ts +11 -0
  175. package/dist/types/services/task/constants.d.ts +17 -0
  176. package/dist/types/services/task/contact.d.ts +4 -0
  177. package/dist/types/services/task/digital/Digital.d.ts +23 -0
  178. package/dist/types/services/task/state-machine/TaskStateMachine.d.ts +1442 -0
  179. package/dist/types/services/task/state-machine/actions.d.ts +10 -0
  180. package/dist/types/services/task/state-machine/constants.d.ts +107 -0
  181. package/dist/types/services/task/state-machine/guards.d.ts +103 -0
  182. package/dist/types/services/task/state-machine/index.d.ts +13 -0
  183. package/dist/types/services/task/state-machine/types.d.ts +277 -0
  184. package/dist/types/services/task/state-machine/uiControlsComputer.d.ts +9 -0
  185. package/dist/types/services/task/taskDataNormalizer.d.ts +10 -0
  186. package/dist/types/services/task/types.d.ts +738 -66
  187. package/dist/types/services/task/voice/Voice.d.ts +241 -0
  188. package/dist/types/services/task/voice/WebRTC.d.ts +54 -0
  189. package/dist/types/services/task/voice/wxAppOfferObservability.d.ts +39 -0
  190. package/dist/types/services/task/voice/wxAppVoiceMethods.d.ts +68 -0
  191. package/dist/types/services/wxAppDiagnosticLogging.d.ts +63 -0
  192. package/dist/types/services/wxAppTelephonyUtils.d.ts +5 -0
  193. package/dist/types/types.d.ts +213 -11
  194. package/dist/types/utils/PageCache.d.ts +20 -3
  195. package/dist/types/webex.d.ts +1 -0
  196. package/dist/types.js +168 -6
  197. package/dist/types.js.map +1 -1
  198. package/dist/utils/PageCache.js +19 -5
  199. package/dist/utils/PageCache.js.map +1 -1
  200. package/dist/webex.js +22 -2
  201. package/dist/webex.js.map +1 -1
  202. package/package.json +16 -12
  203. package/src/cc.ts +1137 -67
  204. package/src/config.ts +13 -0
  205. package/src/constants.ts +39 -1
  206. package/src/index.ts +62 -15
  207. package/src/metrics/MetricsManager.ts +16 -0
  208. package/src/metrics/ai-docs/AGENTS.md +350 -0
  209. package/src/metrics/ai-docs/ARCHITECTURE.md +338 -0
  210. package/src/metrics/ai-docs/metrics-spec.md +971 -0
  211. package/src/metrics/behavioral-events.ts +190 -0
  212. package/src/metrics/constants.ts +59 -4
  213. package/src/services/AddressBook.ts +17 -6
  214. package/src/services/AnswerCallOnWebexService.ts +239 -0
  215. package/src/services/ApiAiAssistant.ts +494 -15
  216. package/src/services/EntryPoint.ts +59 -60
  217. package/src/services/Queue.ts +29 -12
  218. package/src/services/UserPreference.ts +509 -0
  219. package/src/services/WebCallingService.ts +16 -2
  220. package/src/services/WebexCrossClientService.ts +298 -0
  221. package/src/services/WxAppTelephonyMercurySync.ts +142 -0
  222. package/src/services/agent/ai-docs/AGENTS.md +240 -0
  223. package/src/services/agent/ai-docs/ARCHITECTURE.md +304 -0
  224. package/src/services/agent/ai-docs/agent-spec.md +505 -0
  225. package/src/services/ai-docs/AGENTS.md +386 -0
  226. package/src/services/ai-docs/services-spec.md +512 -0
  227. package/src/services/config/Util.ts +54 -84
  228. package/src/services/config/ai-docs/AGENTS.md +250 -0
  229. package/src/services/config/ai-docs/ARCHITECTURE.md +413 -0
  230. package/src/services/config/ai-docs/config-spec.md +669 -0
  231. package/src/services/config/constants.ts +63 -85
  232. package/src/services/config/index.ts +116 -277
  233. package/src/services/config/types.ts +229 -125
  234. package/src/services/constants.ts +10 -0
  235. package/src/services/core/Err.ts +1 -0
  236. package/src/services/core/Utils.ts +151 -37
  237. package/src/services/core/WebexRequest.ts +3 -1
  238. package/src/services/core/ai-docs/AGENTS.md +381 -0
  239. package/src/services/core/ai-docs/ARCHITECTURE.md +698 -0
  240. package/src/services/core/ai-docs/core-spec.md +797 -0
  241. package/src/services/core/aqm-reqs.ts +18 -12
  242. package/src/services/core/constants.ts +8 -0
  243. package/src/services/core/types.ts +33 -1
  244. package/src/services/core/websocket/WebSocketManager.ts +28 -2
  245. package/src/services/core/websocket/types.ts +1 -1
  246. package/src/services/index.ts +1 -1
  247. package/src/services/task/Task.ts +1211 -0
  248. package/src/services/task/TaskFactory.ts +82 -0
  249. package/src/services/task/TaskManager.ts +1585 -724
  250. package/src/services/task/TaskUtils.ts +316 -25
  251. package/src/services/task/WebexCallingUtils.ts +136 -0
  252. package/src/services/task/ai-docs/AGENTS.md +457 -0
  253. package/src/services/task/ai-docs/ARCHITECTURE.md +595 -0
  254. package/src/services/task/ai-docs/task-spec.md +1501 -0
  255. package/src/services/task/constants.ts +18 -0
  256. package/src/services/task/contact.ts +30 -0
  257. package/src/services/task/digital/Digital.ts +102 -0
  258. package/src/services/task/state-machine/TaskStateMachine.ts +1320 -0
  259. package/src/services/task/state-machine/actions.ts +741 -0
  260. package/src/services/task/state-machine/ai-docs/AGENTS.md +460 -0
  261. package/src/services/task/state-machine/ai-docs/ARCHITECTURE.md +1156 -0
  262. package/src/services/task/state-machine/ai-docs/task-state-machine-spec.md +2247 -0
  263. package/src/services/task/state-machine/constants.ts +172 -0
  264. package/src/services/task/state-machine/guards.ts +442 -0
  265. package/src/services/task/state-machine/index.ts +28 -0
  266. package/src/services/task/state-machine/types.ts +258 -0
  267. package/src/services/task/state-machine/uiControlsComputer.ts +1135 -0
  268. package/src/services/task/taskDataNormalizer.ts +137 -0
  269. package/src/services/task/types.ts +918 -70
  270. package/src/services/task/voice/Voice.ts +1878 -0
  271. package/src/services/task/voice/WebRTC.ts +194 -0
  272. package/src/services/task/voice/wxAppOfferObservability.ts +204 -0
  273. package/src/services/task/voice/wxAppVoiceMethods.ts +575 -0
  274. package/src/services/wxAppDiagnosticLogging.ts +286 -0
  275. package/src/services/wxAppTelephonyUtils.ts +14 -0
  276. package/src/types.ts +272 -13
  277. package/src/utils/AGENTS.md +289 -0
  278. package/src/utils/PageCache.ts +38 -5
  279. package/src/utils/ai-docs/utils-spec.md +391 -0
  280. package/src/webex.js +10 -0
  281. package/test/unit/fixtures/aiSummaryTestUtils.ts +40 -0
  282. package/test/unit/spec/cc.ts +3553 -107
  283. package/test/unit/spec/index.ts +885 -0
  284. package/test/unit/spec/logger-proxy.ts +70 -0
  285. package/test/unit/spec/metrics/MetricsManager.ts +25 -0
  286. package/test/unit/spec/metrics/behavioral-events.ts +60 -0
  287. package/test/unit/spec/services/AddressBook.ts +37 -6
  288. package/test/unit/spec/services/AnswerCallOnWebexService.ts +264 -0
  289. package/test/unit/spec/services/ApiAiAssistant.ts +442 -23
  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 +45 -1
  294. package/test/unit/spec/services/WebexCrossClientService.ts +509 -0
  295. package/test/unit/spec/services/WxAppTelephonyMercurySync.ts +136 -0
  296. package/test/unit/spec/services/config/Util.ts +501 -0
  297. package/test/unit/spec/services/config/index.ts +317 -547
  298. package/test/unit/spec/services/core/Utils.ts +447 -8
  299. package/test/unit/spec/services/core/WebexRequest.ts +8 -7
  300. package/test/unit/spec/services/core/aqm-reqs.ts +142 -1
  301. package/test/unit/spec/services/core/websocket/WebSocketManager.ts +129 -53
  302. package/test/unit/spec/services/task/AutoWrapup.ts +63 -0
  303. package/test/unit/spec/services/task/Task.ts +2723 -0
  304. package/test/unit/spec/services/task/TaskFactory.ts +116 -0
  305. package/test/unit/spec/services/task/TaskManager.ts +4734 -1769
  306. package/test/unit/spec/services/task/TaskUtils.ts +307 -0
  307. package/test/unit/spec/services/task/WebexCallingUtils.ts +153 -0
  308. package/test/unit/spec/services/task/contact.ts +33 -0
  309. package/test/unit/spec/services/task/digital/Digital.ts +105 -0
  310. package/test/unit/spec/services/task/state-machine/TaskStateMachine.ts +4060 -0
  311. package/test/unit/spec/services/task/state-machine/guards.ts +839 -0
  312. package/test/unit/spec/services/task/state-machine/types.ts +18 -0
  313. package/test/unit/spec/services/task/state-machine/uiControlsComputer.ts +3101 -0
  314. package/test/unit/spec/services/task/taskTestUtils.ts +87 -0
  315. package/test/unit/spec/services/task/voice/Voice.ts +2355 -0
  316. package/test/unit/spec/services/task/voice/WebRTC.ts +235 -0
  317. package/test/unit/spec/services/task/voice/wxAppOfferObservability.ts +361 -0
  318. package/test/unit/spec/services/task/voice/wxAppVoiceMethods.ts +719 -0
  319. package/test/unit/spec/services/wxAppDiagnosticLogging.ts +179 -0
  320. package/test/unit/spec/wellnessSampleUtils.ts +288 -0
  321. package/typedoc.md +1 -1
  322. package/umd/contact-center.min.js +2 -2
  323. package/umd/contact-center.min.js.map +1 -1
  324. package/dist/services/task/index.js +0 -1530
  325. package/dist/services/task/index.js.map +0 -1
  326. package/dist/types/services/task/index.d.ts +0 -650
  327. package/src/services/task/index.ts +0 -1806
  328. package/test/unit/spec/services/task/index.ts +0 -2205
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_events","require","_xstate","_types","_constants","_constants2","_Utils","_MetricsManager","_interopRequireDefault","_constants3","_loggerProxy","_stateMachine","_uiControlsComputer","_AutoWrapup","_types2","_TaskUtils","e","__esModule","default","Task","EventEmitter","aiSummaryCapabilities","midCallEnabled","postCallEnabled","constructor","contact","data","uiControlConfig","wrapupData","agentId","agentName","apiAIAssistant","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","setFeatureEnablement","enablement","clearFeatureEnablement","requestPostCallSummary","metricFields","operation","REQUEST_POST_CALL_SUMMARY","timeEvent","METRIC_EVENT_NAMES","AI_SUMMARY_GET_POST_CALL_SUCCESS","AI_SUMMARY_GET_POST_CALL_FAILED","conversationId","mainInteractionId","Object","assign","aiFeature","generatedSummaries","wrapUpSummariesEnabled","createSummaryError","AI_SUMMARY_ERROR_CODES","POST_CALL_SUMMARY_DISABLED","result","requestAndWaitForRtd","correlationId","rtdEventType","timeoutMs","AI_SUMMARY_DURATION_MS","createTimeoutError","POST_CALL_SUMMARY_TIMEOUT","eventType","AIAssistantEventType","CTI_EVENT","eventName","AIAssistantEventName","GET_POST_CALL_SUMMARY","eventMetaData","clientType","AI_ASSISTANT_CLIENT_TYPE","timeout","trackEvent","taskId","error","failureCode","getAISummaryFailureCode","sendPostCallSummaryResponse","response","SEND_POST_CALL_SUMMARY_RESPONSE","AI_SUMMARY_POST_CALL_RESPONSE_SUCCESS","AI_SUMMARY_POST_CALL_RESPONSE_FAILED","publishTimestamp","Date","now","POST_CALL_SUMMARY_RESPONSE","eventPayload","action","summary","numberOfTimesViewed","numberOfTimesEdited","numberOfTimesCopied","feedback","state","wrapUpCode","sendEvent","requestMidCallSummary","REQUEST_MID_CALL_SUMMARY","actionType","AI_SUMMARY_GET_MID_CALL_SUCCESS","AI_SUMMARY_GET_MID_CALL_FAILED","consultTransferSummariesEnabled","MID_CALL_SUMMARY_DISABLED","GET_MID_CALL_CONSULT_SUMMARY","GET_MID_CALL_TRANSFER_SUMMARY","MID_CALL_SUMMARY_TIMEOUT","sendMidCallSummaryResponse","SEND_MID_CALL_SUMMARY_RESPONSE","AI_SUMMARY_MID_CALL_RESPONSE_SUCCESS","AI_SUMMARY_MID_CALL_RESPONSE_FAILED","MID_CALL_CONSULT_SUMMARY_RESPONSE","MID_CALL_TRANSFER_SUMMARY_RESPONSE","errorCode","AI_SUMMARY_INVALID_RESPONSE_PAYLOAD","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","event","type","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","TASK_AUTO_ANSWER_SUCCESS","isAutoAnswered","TASK_AUTO_ANSWERED","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","keys","forEach","key","Array","isArray","methodName","Error","updatedData","shouldOverwrite","pruneStaleInteractionMaps","incoming","incomingInteraction","currentInteraction","mapKey","incomingMap","currentMap","transfer","transferPayload","TASK_TRANSFER_SUCCESS","TASK_TRANSFER_FAILED","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","TASK_END_SUCCESS","TASK_END_FAILED","wrapupPayload","TASK_WRAPUP_SUCCESS","TASK_WRAPUP_FAILED","length","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 AISummaryAction,\n AISummary,\n AISummaryResponse,\n AISummaryFeatureEnablement,\n AISummaryCapabilities,\n TaskToggleMuteOptions,\n TaskTransmitDtmfOptions,\n} from './types';\nimport {AI_SUMMARY_DURATION_MS, ENTRY_POINT_TRANSFER_DESTINATION_TYPE, METHODS} from './constants';\nimport {\n AI_ASSISTANT_CLIENT_TYPE,\n AI_SUMMARY_ERROR_CODES,\n AI_SUMMARY_INVALID_RESPONSE_PAYLOAD,\n CC_FILE,\n TASK_FILE,\n} 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 type {WrapupData} from '../config/types';\nimport {AIAssistantEventName, AIAssistantEventType} from '../../types';\nimport {createSummaryError} from './TaskUtils';\nimport type ApiAIAssistant from '../ApiAiAssistant';\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 protected agentName?: string;\n private apiAIAssistant?: ApiAIAssistant;\n public aiSummaryCapabilities: Readonly<AISummaryCapabilities> = {\n midCallEnabled: false,\n postCallEnabled: false,\n };\n\n constructor(\n contact: ReturnType<typeof routingContact>,\n data: TaskData,\n uiControlConfig: UIControlConfigInput,\n wrapupData?: WrapupData,\n agentId?: string,\n agentName?: string,\n apiAIAssistant?: ApiAIAssistant\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.agentName = agentName;\n this.apiAIAssistant = apiAIAssistant;\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 public setFeatureEnablement(enablement: AISummaryFeatureEnablement): void {\n if (enablement.interactionId !== this.data.interactionId) {\n return;\n }\n\n this.aiSummaryCapabilities = {\n midCallEnabled: enablement.midCallEnabled === true,\n postCallEnabled: enablement.postCallEnabled === true,\n };\n }\n\n public clearFeatureEnablement(): void {\n this.aiSummaryCapabilities = {\n midCallEnabled: false,\n postCallEnabled: false,\n };\n }\n\n public async requestPostCallSummary(): Promise<AISummary> {\n const metricFields: Record<string, unknown> = {operation: METHODS.REQUEST_POST_CALL_SUMMARY};\n\n try {\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.AI_SUMMARY_GET_POST_CALL_SUCCESS,\n METRIC_EVENT_NAMES.AI_SUMMARY_GET_POST_CALL_FAILED,\n ]);\n\n const interactionId = this.data.interactionId;\n const conversationId = this.data.interaction?.mainInteractionId || interactionId;\n Object.assign(metricFields, {conversationId, interactionId});\n\n if (\n !this.apiAIAssistant ||\n this.apiAIAssistant.aiFeature?.generatedSummaries?.wrapUpSummariesEnabled !== true ||\n !this.aiSummaryCapabilities.postCallEnabled\n ) {\n throw createSummaryError(AI_SUMMARY_ERROR_CODES.POST_CALL_SUMMARY_DISABLED);\n }\n\n const result = await this.apiAIAssistant.requestAndWaitForRtd<AISummary>({\n correlationId: conversationId,\n rtdEventType: 'POST_CALL_SUMMARY',\n timeoutMs: AI_SUMMARY_DURATION_MS,\n createTimeoutError: () =>\n createSummaryError(AI_SUMMARY_ERROR_CODES.POST_CALL_SUMMARY_TIMEOUT),\n agentId: this.agentId as string,\n interactionId,\n eventType: AIAssistantEventType.CTI_EVENT,\n eventName: AIAssistantEventName.GET_POST_CALL_SUMMARY,\n eventMetaData: {\n conversationId,\n clientType: AI_ASSISTANT_CLIENT_TYPE,\n },\n timeout: AI_SUMMARY_DURATION_MS,\n });\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.AI_SUMMARY_GET_POST_CALL_SUCCESS,\n {taskId: this.data?.interactionId, ...metricFields},\n ['operational']\n );\n\n return result;\n } catch (error) {\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.AI_SUMMARY_GET_POST_CALL_FAILED,\n {\n taskId: this.data?.interactionId,\n ...metricFields,\n failureCode: Task.getAISummaryFailureCode(error),\n },\n ['operational']\n );\n throw error;\n }\n }\n\n public async sendPostCallSummaryResponse(response: AISummaryResponse): Promise<void> {\n const metricFields: Record<string, unknown> = {\n operation: METHODS.SEND_POST_CALL_SUMMARY_RESPONSE,\n };\n\n try {\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.AI_SUMMARY_POST_CALL_RESPONSE_SUCCESS,\n METRIC_EVENT_NAMES.AI_SUMMARY_POST_CALL_RESPONSE_FAILED,\n ]);\n const interactionId = this.data.interactionId;\n const conversationId = this.data.interaction?.mainInteractionId || interactionId;\n Object.assign(metricFields, {conversationId, interactionId});\n\n const publishTimestamp = Date.now();\n const eventName = AIAssistantEventName.POST_CALL_SUMMARY_RESPONSE;\n const eventPayload = {\n conversationId,\n clientType: AI_ASSISTANT_CLIENT_TYPE,\n action: eventName,\n summary: response.summary,\n numberOfTimesViewed: response.numberOfTimesViewed,\n numberOfTimesEdited: response.numberOfTimesEdited,\n numberOfTimesCopied: response.numberOfTimesCopied,\n feedback: response.feedback,\n state: response.state,\n wrapUpCode: response.wrapUpCode,\n };\n await this.apiAIAssistant.sendEvent(\n this.agentId as string,\n interactionId,\n AIAssistantEventType.CTI_EVENT,\n eventName,\n eventPayload,\n undefined,\n undefined,\n publishTimestamp,\n AI_SUMMARY_DURATION_MS\n );\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.AI_SUMMARY_POST_CALL_RESPONSE_SUCCESS,\n {taskId: this.data?.interactionId, ...metricFields},\n ['operational']\n );\n } catch (error) {\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.AI_SUMMARY_POST_CALL_RESPONSE_FAILED,\n {\n taskId: this.data?.interactionId,\n ...metricFields,\n failureCode: Task.getAISummaryFailureCode(error),\n },\n ['operational']\n );\n throw error;\n }\n }\n\n public async requestMidCallSummary(action: AISummaryAction): Promise<AISummary> {\n const metricFields: Record<string, unknown> = {\n operation: METHODS.REQUEST_MID_CALL_SUMMARY,\n actionType: action,\n };\n\n try {\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.AI_SUMMARY_GET_MID_CALL_SUCCESS,\n METRIC_EVENT_NAMES.AI_SUMMARY_GET_MID_CALL_FAILED,\n ]);\n\n const interactionId = this.data.interactionId;\n const conversationId = this.data.interaction?.mainInteractionId || interactionId;\n Object.assign(metricFields, {conversationId, interactionId});\n\n if (\n !this.apiAIAssistant ||\n this.apiAIAssistant.aiFeature?.generatedSummaries?.consultTransferSummariesEnabled !==\n true ||\n !this.aiSummaryCapabilities.midCallEnabled\n ) {\n throw createSummaryError(AI_SUMMARY_ERROR_CODES.MID_CALL_SUMMARY_DISABLED);\n }\n\n const eventName =\n action === 'CONSULT'\n ? AIAssistantEventName.GET_MID_CALL_CONSULT_SUMMARY\n : AIAssistantEventName.GET_MID_CALL_TRANSFER_SUMMARY;\n const result = await this.apiAIAssistant.requestAndWaitForRtd<AISummary>({\n correlationId: conversationId,\n rtdEventType: 'MID_CALL_SUMMARY',\n timeoutMs: AI_SUMMARY_DURATION_MS,\n createTimeoutError: () =>\n createSummaryError(AI_SUMMARY_ERROR_CODES.MID_CALL_SUMMARY_TIMEOUT),\n agentId: this.agentId as string,\n interactionId,\n eventType: AIAssistantEventType.CTI_EVENT,\n eventName,\n eventMetaData: {\n conversationId,\n clientType: AI_ASSISTANT_CLIENT_TYPE,\n },\n timeout: AI_SUMMARY_DURATION_MS,\n });\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.AI_SUMMARY_GET_MID_CALL_SUCCESS,\n {taskId: this.data?.interactionId, ...metricFields},\n ['operational']\n );\n\n return result;\n } catch (error) {\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.AI_SUMMARY_GET_MID_CALL_FAILED,\n {\n taskId: this.data?.interactionId,\n ...metricFields,\n failureCode: Task.getAISummaryFailureCode(error),\n },\n ['operational']\n );\n throw error;\n }\n }\n\n public async sendMidCallSummaryResponse(\n response: AISummaryResponse,\n action: AISummaryAction\n ): Promise<void> {\n const metricFields: Record<string, unknown> = {\n operation: METHODS.SEND_MID_CALL_SUMMARY_RESPONSE,\n actionType: action,\n };\n\n try {\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.AI_SUMMARY_MID_CALL_RESPONSE_SUCCESS,\n METRIC_EVENT_NAMES.AI_SUMMARY_MID_CALL_RESPONSE_FAILED,\n ]);\n const interactionId = this.data.interactionId;\n const conversationId = this.data.interaction?.mainInteractionId || interactionId;\n Object.assign(metricFields, {conversationId, interactionId});\n\n const publishTimestamp = Date.now();\n const eventName =\n action === 'CONSULT'\n ? AIAssistantEventName.MID_CALL_CONSULT_SUMMARY_RESPONSE\n : AIAssistantEventName.MID_CALL_TRANSFER_SUMMARY_RESPONSE;\n const eventPayload = {\n conversationId,\n clientType: AI_ASSISTANT_CLIENT_TYPE,\n action: eventName,\n summary: response.summary,\n numberOfTimesViewed: response.numberOfTimesViewed,\n numberOfTimesEdited: response.numberOfTimesEdited,\n numberOfTimesCopied: response.numberOfTimesCopied,\n feedback: response.feedback,\n state: response.state,\n agentName: this.agentName ?? '',\n };\n await this.apiAIAssistant.sendEvent(\n this.agentId as string,\n interactionId,\n AIAssistantEventType.CTI_EVENT,\n eventName,\n eventPayload,\n undefined,\n undefined,\n publishTimestamp,\n AI_SUMMARY_DURATION_MS\n );\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.AI_SUMMARY_MID_CALL_RESPONSE_SUCCESS,\n {taskId: this.data?.interactionId, ...metricFields},\n ['operational']\n );\n } catch (error) {\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.AI_SUMMARY_MID_CALL_RESPONSE_FAILED,\n {\n taskId: this.data?.interactionId,\n ...metricFields,\n failureCode: Task.getAISummaryFailureCode(error),\n },\n ['operational']\n );\n throw error;\n }\n }\n\n private static getAISummaryFailureCode(error: unknown): string {\n const errorCode = (error as {data?: {errorCode?: unknown}})?.data?.errorCode;\n\n if (typeof errorCode === 'string') {\n return errorCode;\n }\n\n return AI_SUMMARY_INVALID_RESPONSE_PAYLOAD;\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): never {\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,50 @@
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, agentName, answerCallOnWebexService, apiAIAssistant) {
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
+ getUsersubPublished: configFlags.getWxAppUsersubPublished,
32
+ consultTransferConfig: consultTransfer
33
+ };
34
+ switch (mediaType) {
35
+ case _types.MEDIA_CHANNEL.TELEPHONY:
36
+ if (webCallingService.loginOption === _types2.LoginOption.BROWSER) {
37
+ return new _WebRTC.default(contact, webCallingService, data, voiceControlOptions, wrapupData, agentId, agentName, apiAIAssistant);
38
+ }
39
+ return new _Voice.default(contact, data, voiceControlOptions, wrapupData, agentId, agentName, apiAIAssistant);
40
+ case _types.MEDIA_CHANNEL.CHAT:
41
+ case _types.MEDIA_CHANNEL.EMAIL:
42
+ case _types.MEDIA_CHANNEL.SOCIAL:
43
+ return new _Digital.default(contact, data, wrapupData, agentId, consultTransfer, agentName, apiAIAssistant);
44
+ default:
45
+ throw new Error(`Unknown media type: ${mediaType}`);
46
+ }
47
+ }
48
+ }
49
+ exports.default = TaskFactory;
50
+ //# 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","agentName","answerCallOnWebexService","apiAIAssistant","mediaType","interaction","MEDIA_CHANNEL","TELEPHONY","isEndTaskEnabled","isEndConsultEnabled","consultTransfer","recordingEnabled","callProcessingDetails","pauseResumeEnabled","voiceControlOptions","isRecordingEnabled","enableWxBetterTogether","getUsersubPublished","getWxAppUsersubPublished","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 type {WrapupData} from '../config/types';\nimport type ApiAIAssistant from '../ApiAiAssistant';\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 agentName?: string,\n answerCallOnWebexService?: AnswerCallOnWebexService,\n apiAIAssistant?: ApiAIAssistant\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 getUsersubPublished: configFlags.getWxAppUsersubPublished,\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 agentName,\n apiAIAssistant\n );\n }\n\n return new Voice(\n contact,\n data,\n voiceControlOptions,\n wrapupData,\n agentId,\n agentName,\n apiAIAssistant\n );\n\n case MEDIA_CHANNEL.CHAT:\n case MEDIA_CHANNEL.EMAIL:\n case MEDIA_CHANNEL.SOCIAL:\n return new Digital(\n contact,\n data,\n wrapupData,\n agentId,\n consultTransfer,\n agentName,\n apiAIAssistant\n );\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;AAItC,MAAMG,WAAW,CAAC;EAC/B;AACF;AACA;EACE,OAAcC,UAAUA,CACtBC,OAA0C,EAC1CC,iBAAoC,EACpCC,IAAc,EACdC,WAAwB,EACxBC,UAAuB,EACvBC,OAAgB,EAChBC,SAAkB,EAClBC,wBAAmD,EACnDC,cAA+B,EACzB;IACN,MAAMC,SAAS,GAAGP,IAAI,CAACQ,WAAW,CAACD,SAAS,IAAIE,oBAAa,CAACC,SAAS;IACvE,MAAM;MAACC,gBAAgB;MAAEC,mBAAmB;MAAEC;IAAe,CAAC,GAAGZ,WAAW;IAC5E,MAAMa,gBAAgB,GAAGd,IAAI,EAAEQ,WAAW,EAAEO,qBAAqB,EAAEC,kBAAkB,IAAI,IAAI;IAC7F,MAAMC,mBAAmB,GAAG;MAC1BN,gBAAgB;MAChBC,mBAAmB;MACnBM,kBAAkB,EAAEJ,gBAAgB;MACpCK,sBAAsB,EAAElB,WAAW,CAACkB,sBAAsB,IAAI,KAAK;MACnEd,wBAAwB;MACxBe,mBAAmB,EAAEnB,WAAW,CAACoB,wBAAwB;MACzDC,qBAAqB,EAAET;IACzB,CAAC;IACD,QAAQN,SAAS;MACf,KAAKE,oBAAa,CAACC,SAAS;QAC1B,IAAIX,iBAAiB,CAACwB,WAAW,KAAKC,mBAAW,CAACC,OAAO,EAAE;UACzD,OAAO,IAAIC,eAAM,CACf5B,OAAO,EACPC,iBAAiB,EACjBC,IAAI,EACJiB,mBAAmB,EACnBf,UAAU,EACVC,OAAO,EACPC,SAAS,EACTE,cACF,CAAC;QACH;QAEA,OAAO,IAAIqB,cAAK,CACd7B,OAAO,EACPE,IAAI,EACJiB,mBAAmB,EACnBf,UAAU,EACVC,OAAO,EACPC,SAAS,EACTE,cACF,CAAC;MAEH,KAAKG,oBAAa,CAACmB,IAAI;MACvB,KAAKnB,oBAAa,CAACoB,KAAK;MACxB,KAAKpB,oBAAa,CAACqB,MAAM;QACvB,OAAO,IAAIC,gBAAO,CAChBjC,OAAO,EACPE,IAAI,EACJE,UAAU,EACVC,OAAO,EACPU,eAAe,EACfT,SAAS,EACTE,cACF,CAAC;MAEH;QACE,MAAM,IAAI0B,KAAK,CAAC,uBAAuBzB,SAAS,EAAE,CAAC;IACvD;EACF;AACF;AAAC0B,OAAA,CAAAtC,OAAA,GAAAC,WAAA","ignoreList":[]}