@webex/contact-center 3.12.0-next.16 → 3.12.0-next.161

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,159 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.WXAPP_LOG_PREFIX = exports.WXAPP_LOG_FEATURE = void 0;
7
+ exports.callIdSuffix = callIdSuffix;
8
+ exports.deriveWxAppAcceptReason = deriveWxAppAcceptReason;
9
+ exports.logWxAppMercuryMuteSync = logWxAppMercuryMuteSync;
10
+ exports.logWxAppOfferDecision = logWxAppOfferDecision;
11
+ exports.logWxAppOfferParticipantMismatch = logWxAppOfferParticipantMismatch;
12
+ exports.logWxAppSessionReadiness = logWxAppSessionReadiness;
13
+ exports.logWxAppTelephonyAction = logWxAppTelephonyAction;
14
+ exports.logWxAppValidationFailure = logWxAppValidationFailure;
15
+ var _loggerProxy = _interopRequireDefault(require("../logger-proxy"));
16
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
17
+ const WXAPP_LOG_FEATURE = exports.WXAPP_LOG_FEATURE = 'wxApp';
18
+ const WXAPP_LOG_PREFIX = exports.WXAPP_LOG_PREFIX = '[CC wxApp]';
19
+ /** Last 8 chars of callId for correlation without logging full id. */
20
+ function callIdSuffix(callId) {
21
+ if (!callId) {
22
+ return undefined;
23
+ }
24
+ return callId.length <= 8 ? callId : callId.slice(-8);
25
+ }
26
+ function formatLogSuffix(data, keys) {
27
+ const entries = keys ? keys.map(key => [key, data[key]]) : Object.entries(data).filter(([key]) => key !== 'feature' && key !== 'event');
28
+ const parts = entries.filter(([, value]) => value !== undefined && value !== null && value !== '').map(([key, value]) => `${key}=${String(value)}`);
29
+ return parts.length > 0 ? ` ${parts.join(' ')}` : '';
30
+ }
31
+ function logWxApp(message, method, data, suffixKeys) {
32
+ const suffix = formatLogSuffix(data, suffixKeys);
33
+ _loggerProxy.default.log(`${WXAPP_LOG_PREFIX} ${message}${suffix}`, {
34
+ module: 'wxAppDiagnosticLogging',
35
+ method,
36
+ data: {
37
+ feature: WXAPP_LOG_FEATURE,
38
+ ...data
39
+ }
40
+ });
41
+ }
42
+ function logWxAppWarn(message, method, data, suffixKeys) {
43
+ const suffix = formatLogSuffix(data, suffixKeys);
44
+ _loggerProxy.default.warn(`${WXAPP_LOG_PREFIX} ${message}${suffix}`, {
45
+ module: 'wxAppDiagnosticLogging',
46
+ method,
47
+ data: {
48
+ feature: WXAPP_LOG_FEATURE,
49
+ ...data
50
+ }
51
+ });
52
+ }
53
+ function logWxAppError(message, method, data, suffixKeys) {
54
+ const suffix = formatLogSuffix(data, suffixKeys);
55
+ _loggerProxy.default.error(`${WXAPP_LOG_PREFIX} ${message}${suffix}`, {
56
+ module: 'wxAppDiagnosticLogging',
57
+ method,
58
+ data: {
59
+ feature: WXAPP_LOG_FEATURE,
60
+ ...data
61
+ }
62
+ });
63
+ }
64
+ function logWxAppSessionReadiness(params) {
65
+ const data = {
66
+ event: 'session_readiness',
67
+ enableWxBetterTogether: params.enableWxBetterTogether,
68
+ loginOption: params.loginOption,
69
+ wxAppHooksApplied: params.wxAppHooksApplied,
70
+ usersubPublished: params.usersubPublished,
71
+ mercurySubscribed: params.mercurySubscribed,
72
+ telephonyTaskType: params.telephonyTaskType,
73
+ skipReason: params.skipReason
74
+ };
75
+ logWxApp('session readiness', 'logWxAppSessionReadiness', data, ['usersubPublished', 'mercurySubscribed', 'loginOption', 'enableWxBetterTogether', 'telephonyTaskType', 'skipReason']);
76
+ }
77
+ function deriveWxAppAcceptReason(params) {
78
+ if (params.isWxAppInboundOffer || params.isWxAppOutdialOffer) {
79
+ if (params.wxAppAcceptInFlight) {
80
+ return 'wxApp_accept_in_flight';
81
+ }
82
+ if (params.wxAppAnswerPending) {
83
+ return 'wxApp_answer_pending';
84
+ }
85
+ return 'wxApp_offer_ready';
86
+ }
87
+ if (params.isWebrtc && !params.isOutdial) {
88
+ return 'browser_webrtc_offer';
89
+ }
90
+ if (params.isOutdial) {
91
+ return 'outdial_auto_answer';
92
+ }
93
+ if (params.enableWxBetterTogether && !params.hasDeviceCallId) {
94
+ return 'extension_non_wxApp_offer';
95
+ }
96
+ return 'extension_non_wxApp_offer';
97
+ }
98
+ function logWxAppOfferDecision(params) {
99
+ const data = {
100
+ event: 'offer_decision',
101
+ interactionId: params.interactionId,
102
+ acceptVisible: params.acceptVisible,
103
+ acceptEnabled: params.acceptEnabled,
104
+ acceptReason: params.acceptReason,
105
+ wxAppParticipantDeviceType: params.wxAppParticipantDeviceType,
106
+ hasDeviceCallId: params.hasDeviceCallId,
107
+ hasDeviceId: params.hasDeviceId,
108
+ usersubPublished: params.usersubPublished
109
+ };
110
+ logWxApp('offer decision', 'logWxAppOfferDecision', data, ['acceptReason', 'hasDeviceCallId', 'hasDeviceId', 'usersubPublished', 'interactionId', 'acceptVisible', 'acceptEnabled']);
111
+ }
112
+ function logWxAppOfferParticipantMismatch(params) {
113
+ const data = {
114
+ event: 'participant_fields_mismatch',
115
+ interactionId: params.interactionId,
116
+ usersubPublished: params.usersubPublished,
117
+ hasDeviceCallId: params.hasDeviceCallId,
118
+ hasDeviceId: params.hasDeviceId,
119
+ participantDeviceType: params.participantDeviceType ?? 'missing',
120
+ acceptVisible: params.acceptVisible,
121
+ acceptEnabled: params.acceptEnabled,
122
+ acceptReason: params.acceptReason
123
+ };
124
+ logWxAppWarn('participant fields mismatch', 'logWxAppOfferParticipantMismatch', data, ['usersubPublished', 'hasDeviceCallId', 'hasDeviceId', 'acceptReason', 'interactionId', 'participantDeviceType']);
125
+ }
126
+ function logWxAppTelephonyAction(params) {
127
+ const payload = {
128
+ event: 'telephony_action',
129
+ action: params.action,
130
+ phase: params.phase,
131
+ interactionId: params.interactionId,
132
+ trackingId: params.trackingId,
133
+ httpStatus: params.httpStatus,
134
+ failureReason: params.failureReason
135
+ };
136
+ if (params.phase === 'failed') {
137
+ logWxAppError(`telephony ${params.action} ${params.phase}`, 'logWxAppTelephonyAction', payload, ['interactionId', 'trackingId', 'httpStatus', 'failureReason']);
138
+ } else {
139
+ logWxApp(`telephony ${params.action} ${params.phase}`, 'logWxAppTelephonyAction', payload, ['interactionId', 'action', 'phase']);
140
+ }
141
+ }
142
+ function logWxAppValidationFailure(reason, interactionId) {
143
+ logWxAppError('validation failed', 'logWxAppValidationFailure', {
144
+ event: 'validation_failed',
145
+ reason,
146
+ interactionId
147
+ }, ['reason', 'interactionId']);
148
+ }
149
+ function logWxAppMercuryMuteSync(params) {
150
+ logWxApp(`mercury mute sync ${params.phase}`, 'logWxAppMercuryMuteSync', {
151
+ event: 'mercury_mute_sync',
152
+ phase: params.phase,
153
+ muted: params.muted,
154
+ callIdSuffix: params.callIdSuffix,
155
+ interactionId: params.interactionId,
156
+ dropReason: params.dropReason
157
+ }, ['phase', 'muted', 'callIdSuffix', 'interactionId', 'dropReason']);
158
+ }
159
+ //# sourceMappingURL=wxAppDiagnosticLogging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_loggerProxy","_interopRequireDefault","require","e","__esModule","default","WXAPP_LOG_FEATURE","exports","WXAPP_LOG_PREFIX","callIdSuffix","callId","undefined","length","slice","formatLogSuffix","data","keys","entries","map","key","Object","filter","parts","value","String","join","logWxApp","message","method","suffixKeys","suffix","LoggerProxy","log","module","feature","logWxAppWarn","warn","logWxAppError","error","logWxAppSessionReadiness","params","event","enableWxBetterTogether","loginOption","wxAppHooksApplied","usersubPublished","mercurySubscribed","telephonyTaskType","skipReason","deriveWxAppAcceptReason","isWxAppInboundOffer","isWxAppOutdialOffer","wxAppAcceptInFlight","wxAppAnswerPending","isWebrtc","isOutdial","hasDeviceCallId","logWxAppOfferDecision","interactionId","acceptVisible","acceptEnabled","acceptReason","wxAppParticipantDeviceType","hasDeviceId","logWxAppOfferParticipantMismatch","participantDeviceType","logWxAppTelephonyAction","payload","action","phase","trackingId","httpStatus","failureReason","logWxAppValidationFailure","reason","logWxAppMercuryMuteSync","muted","dropReason"],"sources":["wxAppDiagnosticLogging.ts"],"sourcesContent":["import LoggerProxy from '../logger-proxy';\n\nexport const WXAPP_LOG_FEATURE = 'wxApp';\nexport const WXAPP_LOG_PREFIX = '[CC wxApp]';\n\nexport type WxAppAcceptReason =\n | 'wxApp_offer_ready'\n | 'wxApp_answer_pending'\n | 'wxApp_accept_in_flight'\n | 'extension_non_wxApp_offer'\n | 'browser_webrtc_offer'\n | 'outdial_auto_answer';\n\nexport type WxAppSessionSkipReason =\n | 'unsupported_browser_login'\n | 'flag_disabled'\n | 'mercury_subscribe_failed'\n | 'publish_failed';\n\nexport type WxAppTelephonyAction = 'accept' | 'decline' | 'mute' | 'dtmf';\nexport type WxAppTelephonyPhase = 'started' | 'success' | 'failed';\n\ntype WxAppLogData = Record<string, string | boolean | number | undefined>;\n\n/** Last 8 chars of callId for correlation without logging full id. */\nexport function callIdSuffix(callId: string | null | undefined): string | undefined {\n if (!callId) {\n return undefined;\n }\n\n return callId.length <= 8 ? callId : callId.slice(-8);\n}\n\nfunction formatLogSuffix(data: WxAppLogData, keys?: string[]): string {\n const entries = keys\n ? keys.map((key) => [key, data[key]] as const)\n : Object.entries(data).filter(([key]) => key !== 'feature' && key !== 'event');\n\n const parts = entries\n .filter(([, value]) => value !== undefined && value !== null && value !== '')\n .map(([key, value]) => `${key}=${String(value)}`);\n\n return parts.length > 0 ? ` ${parts.join(' ')}` : '';\n}\n\nfunction logWxApp(\n message: string,\n method: string,\n data: WxAppLogData,\n suffixKeys?: string[]\n): void {\n const suffix = formatLogSuffix(data, suffixKeys);\n LoggerProxy.log(`${WXAPP_LOG_PREFIX} ${message}${suffix}`, {\n module: 'wxAppDiagnosticLogging',\n method,\n data: {feature: WXAPP_LOG_FEATURE, ...data},\n });\n}\n\nfunction logWxAppWarn(\n message: string,\n method: string,\n data: WxAppLogData,\n suffixKeys?: string[]\n): void {\n const suffix = formatLogSuffix(data, suffixKeys);\n LoggerProxy.warn(`${WXAPP_LOG_PREFIX} ${message}${suffix}`, {\n module: 'wxAppDiagnosticLogging',\n method,\n data: {feature: WXAPP_LOG_FEATURE, ...data},\n });\n}\n\nfunction logWxAppError(\n message: string,\n method: string,\n data: WxAppLogData,\n suffixKeys?: string[]\n): void {\n const suffix = formatLogSuffix(data, suffixKeys);\n LoggerProxy.error(`${WXAPP_LOG_PREFIX} ${message}${suffix}`, {\n module: 'wxAppDiagnosticLogging',\n method,\n data: {feature: WXAPP_LOG_FEATURE, ...data},\n });\n}\n\nexport function logWxAppSessionReadiness(params: {\n enableWxBetterTogether: boolean;\n loginOption: string | undefined;\n wxAppHooksApplied: boolean;\n usersubPublished: boolean;\n mercurySubscribed: boolean;\n telephonyTaskType: 'Voice' | 'WebRTC' | 'unknown';\n skipReason?: WxAppSessionSkipReason;\n}): void {\n const data: WxAppLogData = {\n event: 'session_readiness',\n enableWxBetterTogether: params.enableWxBetterTogether,\n loginOption: params.loginOption,\n wxAppHooksApplied: params.wxAppHooksApplied,\n usersubPublished: params.usersubPublished,\n mercurySubscribed: params.mercurySubscribed,\n telephonyTaskType: params.telephonyTaskType,\n skipReason: params.skipReason,\n };\n\n logWxApp('session readiness', 'logWxAppSessionReadiness', data, [\n 'usersubPublished',\n 'mercurySubscribed',\n 'loginOption',\n 'enableWxBetterTogether',\n 'telephonyTaskType',\n 'skipReason',\n ]);\n}\n\nexport function deriveWxAppAcceptReason(params: {\n isWxAppInboundOffer: boolean;\n isWxAppOutdialOffer: boolean;\n isWebrtc: boolean;\n isOutdial: boolean;\n wxAppAcceptInFlight: boolean;\n wxAppAnswerPending: boolean;\n enableWxBetterTogether: boolean;\n hasDeviceCallId: boolean;\n}): WxAppAcceptReason {\n if (params.isWxAppInboundOffer || params.isWxAppOutdialOffer) {\n if (params.wxAppAcceptInFlight) {\n return 'wxApp_accept_in_flight';\n }\n if (params.wxAppAnswerPending) {\n return 'wxApp_answer_pending';\n }\n\n return 'wxApp_offer_ready';\n }\n\n if (params.isWebrtc && !params.isOutdial) {\n return 'browser_webrtc_offer';\n }\n\n if (params.isOutdial) {\n return 'outdial_auto_answer';\n }\n\n if (params.enableWxBetterTogether && !params.hasDeviceCallId) {\n return 'extension_non_wxApp_offer';\n }\n\n return 'extension_non_wxApp_offer';\n}\n\nexport function logWxAppOfferDecision(params: {\n interactionId: string;\n acceptVisible: boolean;\n acceptEnabled: boolean;\n acceptReason: WxAppAcceptReason;\n wxAppParticipantDeviceType?: string;\n hasDeviceCallId: boolean;\n hasDeviceId?: boolean;\n usersubPublished?: boolean;\n}): void {\n const data: WxAppLogData = {\n event: 'offer_decision',\n interactionId: params.interactionId,\n acceptVisible: params.acceptVisible,\n acceptEnabled: params.acceptEnabled,\n acceptReason: params.acceptReason,\n wxAppParticipantDeviceType: params.wxAppParticipantDeviceType,\n hasDeviceCallId: params.hasDeviceCallId,\n hasDeviceId: params.hasDeviceId,\n usersubPublished: params.usersubPublished,\n };\n\n logWxApp('offer decision', 'logWxAppOfferDecision', data, [\n 'acceptReason',\n 'hasDeviceCallId',\n 'hasDeviceId',\n 'usersubPublished',\n 'interactionId',\n 'acceptVisible',\n 'acceptEnabled',\n ]);\n}\n\nexport function logWxAppOfferParticipantMismatch(params: {\n interactionId: string;\n usersubPublished: boolean;\n hasDeviceCallId: boolean;\n hasDeviceId: boolean;\n participantDeviceType?: string;\n acceptVisible: boolean;\n acceptEnabled: boolean;\n acceptReason: WxAppAcceptReason;\n}): void {\n const data: WxAppLogData = {\n event: 'participant_fields_mismatch',\n interactionId: params.interactionId,\n usersubPublished: params.usersubPublished,\n hasDeviceCallId: params.hasDeviceCallId,\n hasDeviceId: params.hasDeviceId,\n participantDeviceType: params.participantDeviceType ?? 'missing',\n acceptVisible: params.acceptVisible,\n acceptEnabled: params.acceptEnabled,\n acceptReason: params.acceptReason,\n };\n\n logWxAppWarn('participant fields mismatch', 'logWxAppOfferParticipantMismatch', data, [\n 'usersubPublished',\n 'hasDeviceCallId',\n 'hasDeviceId',\n 'acceptReason',\n 'interactionId',\n 'participantDeviceType',\n ]);\n}\n\nexport function logWxAppTelephonyAction(params: {\n action: WxAppTelephonyAction;\n phase: WxAppTelephonyPhase;\n interactionId?: string;\n trackingId?: string;\n httpStatus?: number | string;\n failureReason?: string;\n}): void {\n const payload: WxAppLogData = {\n event: 'telephony_action',\n action: params.action,\n phase: params.phase,\n interactionId: params.interactionId,\n trackingId: params.trackingId,\n httpStatus: params.httpStatus,\n failureReason: params.failureReason,\n };\n\n if (params.phase === 'failed') {\n logWxAppError(\n `telephony ${params.action} ${params.phase}`,\n 'logWxAppTelephonyAction',\n payload,\n ['interactionId', 'trackingId', 'httpStatus', 'failureReason']\n );\n } else {\n logWxApp(`telephony ${params.action} ${params.phase}`, 'logWxAppTelephonyAction', payload, [\n 'interactionId',\n 'action',\n 'phase',\n ]);\n }\n}\n\nexport function logWxAppValidationFailure(reason: string, interactionId?: string): void {\n logWxAppError(\n 'validation failed',\n 'logWxAppValidationFailure',\n {\n event: 'validation_failed',\n reason,\n interactionId,\n },\n ['reason', 'interactionId']\n );\n}\n\nexport function logWxAppMercuryMuteSync(params: {\n phase: 'received' | 'applied' | 'dropped';\n muted?: boolean;\n callIdSuffix?: string;\n interactionId?: string;\n dropReason?: string;\n}): void {\n logWxApp(\n `mercury mute sync ${params.phase}`,\n 'logWxAppMercuryMuteSync',\n {\n event: 'mercury_mute_sync',\n phase: params.phase,\n muted: params.muted,\n callIdSuffix: params.callIdSuffix,\n interactionId: params.interactionId,\n dropReason: params.dropReason,\n },\n ['phase', 'muted', 'callIdSuffix', 'interactionId', 'dropReason']\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.isWxAppCallNotFoundError = isWxAppCallNotFoundError;
7
+ /**
8
+ * Expected Hydra responses when mute backfill races call creation (WXCC-6026).
9
+ * These must not be logged as errors — see task-spec wxApp mute backfill guard.
10
+ */
11
+ function isWxAppCallNotFoundError(error) {
12
+ const err = error;
13
+ if (err?.status === 400 || err?.status === '400') {
14
+ return true;
15
+ }
16
+ const message = String(err?.message ?? error ?? '');
17
+ return message.includes('Call not found') || message.includes('101002');
18
+ }
19
+ //# sourceMappingURL=wxAppTelephonyUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isWxAppCallNotFoundError","error","err","status","message","String","includes"],"sources":["wxAppTelephonyUtils.ts"],"sourcesContent":["/**\n * Expected Hydra responses when mute backfill races call creation (WXCC-6026).\n * These must not be logged as errors — see task-spec wxApp mute backfill guard.\n */\nexport function isWxAppCallNotFoundError(error: unknown): boolean {\n const err = error as {status?: number | string; message?: string};\n if (err?.status === 400 || err?.status === '400') {\n return true;\n }\n\n const message = String(err?.message ?? error ?? '');\n\n return message.includes('Call not found') || message.includes('101002');\n}\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACO,SAASA,wBAAwBA,CAACC,KAAc,EAAW;EAChE,MAAMC,GAAG,GAAGD,KAAqD;EACjE,IAAIC,GAAG,EAAEC,MAAM,KAAK,GAAG,IAAID,GAAG,EAAEC,MAAM,KAAK,KAAK,EAAE;IAChD,OAAO,IAAI;EACb;EAEA,MAAMC,OAAO,GAAGC,MAAM,CAACH,GAAG,EAAEE,OAAO,IAAIH,KAAK,IAAI,EAAE,CAAC;EAEnD,OAAOG,OAAO,CAACE,QAAQ,CAAC,gBAAgB,CAAC,IAAIF,OAAO,CAACE,QAAQ,CAAC,QAAQ,CAAC;AACzE","ignoreList":[]}
@@ -9,10 +9,12 @@ import { WebexPlugin } from '@webex/webex-core';
9
9
  import { SetStateResponse, IContactCenter, AgentLogin, AgentProfileUpdate, StationLoginResponse, StationLogoutResponse, BuddyAgentsResponse, BuddyAgents, UploadLogsResponse, UpdateDeviceTypeResponse } from './types';
10
10
  import LoggerProxy from './logger-proxy';
11
11
  import { StateChange, Logout } from './services/agent/types';
12
- import { Profile, OutdialAniEntriesResponse, OutdialAniParams } from './services/config/types';
12
+ import { Profile, OutdialAniEntriesResponse, OutdialAniParams, Entity } from './services/config/types';
13
13
  import { TaskResponse, PreviewContactPayload } from './services/task/types';
14
14
  import { AddressBook } from './services/AddressBook';
15
+ import { Queue } from './services/Queue';
15
16
  import { ApiAIAssistant } from './services/ApiAiAssistant';
17
+ import { UserPreference } from './services/UserPreference';
16
18
  import type { EntryPointListResponse, EntryPointSearchParams, ContactServiceQueuesResponse, ContactServiceQueueSearchParams } from './types';
17
19
  /**
18
20
  * The main Contact Center plugin class that enables integration with Webex Contact Center.
@@ -97,7 +99,7 @@ import type { EntryPointListResponse, EntryPointSearchParams, ContactServiceQueu
97
99
  *
98
100
  * // Login with browser-based calling
99
101
  * await cc.stationLogin({
100
- * teamId: profile.teams[0].teamId,
102
+ * teamId: profile.teams[0].id,
101
103
  * loginOption: 'BROWSER'
102
104
  * });
103
105
  *
@@ -161,6 +163,28 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
161
163
  * @private
162
164
  */
163
165
  private webCallingService;
166
+ /**
167
+ * REST telephony for wxApp thick-client answer (WXCC-6026)
168
+ * @private
169
+ */
170
+ private answerCallOnWebexService;
171
+ /**
172
+ * usersub cross-client state for Webex App toast suppression
173
+ * @private
174
+ */
175
+ private webexCrossClientService;
176
+ /**
177
+ * Mercury telephony mute sync for wxApp thick-client answer
178
+ * @private
179
+ */
180
+ private wxAppTelephonyMercurySync;
181
+ /** True when wxApp mute sync opened Mercury (Extension/DN-only profiles). */
182
+ private wxAppMercuryConnectedByCc;
183
+ /** True when wxApp mute sync registered the Webex device. */
184
+ private wxAppDeviceRegisteredByCc;
185
+ private static readonly WXAPP_FALSE_PUBLISH_RETRY_DELAY_MS;
186
+ private static readonly WXAPP_FALSE_PUBLISH_MAX_RETRIES;
187
+ private wxAppFalsePublishRetryTimer?;
164
188
  /**
165
189
  * Core service managers for Contact Center operations
166
190
  * Includes agent, connection, and configuration services
@@ -189,6 +213,13 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
189
213
  * @private
190
214
  */
191
215
  private metricsManager;
216
+ /** Current login/relogin session used for agent-scoped wellness validation. */
217
+ private currentAgentSessionId?;
218
+ /** Registered-session cache for the system WellbeingBreak idle code. */
219
+ private wellbeingBreakIdleCode?;
220
+ /** Registration generation that owns the wellness idle-code cache and in-flight lookups. */
221
+ private wellnessRegistrationGeneration;
222
+ private updateWellnessSession;
192
223
  /**
193
224
  * API instance for managing Webex Contact Center entry points
194
225
  * Provides functionality to fetch entry points with caching support
@@ -250,7 +281,37 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
250
281
  * });
251
282
  * ```
252
283
  */
253
- private queue;
284
+ queue: Queue;
285
+ /**
286
+ * API instance for managing Webex Contact Center user preferences
287
+ * Provides functionality to get, create, update, and delete user preferences
288
+ * @type {UserPreference}
289
+ * @public
290
+ * @example
291
+ * ```typescript
292
+ * const cc = webex.cc;
293
+ * await cc.register();
294
+ * await cc.stationLogin({ teamId: 'team123', loginOption: 'BROWSER' });
295
+ *
296
+ * // Get user preferences for current user
297
+ * const preferences = await cc.userPreference.getUserPreference();
298
+ *
299
+ * // Create new user preferences
300
+ * const newPrefs = await cc.userPreference.createUserPreference({
301
+ * userId: 'user123',
302
+ * preferences: { e911Reminder: true }
303
+ * });
304
+ *
305
+ * // Update user preferences
306
+ * const updatedPrefs = await cc.userPreference.updateUserPreference('user123', {
307
+ * preferences: { e911Reminder: false }
308
+ * });
309
+ *
310
+ * // Delete user preferences
311
+ * await cc.userPreference.deleteUserPreference('user123');
312
+ * ```
313
+ */
314
+ userPreference: UserPreference;
254
315
  /**
255
316
  * API instance for AI Assistant operations such as transcript controls.
256
317
  * @type {ApiAIAssistant}
@@ -282,6 +343,12 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
282
343
  * @param {ITask} task The task object to be hydrated with additional data
283
344
  */
284
345
  private handleTaskHydrate;
346
+ /**
347
+ * Handles multi-login hydrate events for SDK instances without Mobius registration
348
+ * @private
349
+ * @param {ITask} task The task object associated with the multi-login hydrate
350
+ */
351
+ private handleTaskMultiLoginHydrate;
285
352
  /**
286
353
  * Handles task merged events when tasks are combined eg: EPDN merge/transfer
287
354
  * @private
@@ -294,6 +361,9 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
294
361
  * @param {ITask} task The campaign reservation task
295
362
  */
296
363
  private handleCampaignPreviewReservation;
364
+ private trackInvalidWellnessEvent;
365
+ private normalizeWellnessBreakEvent;
366
+ private handleWellnessBreakWebsocketPayload;
297
367
  private handleRTDWebsocketMessage;
298
368
  /**
299
369
  * Sets up event listeners for incoming tasks and task hydration
@@ -329,12 +399,12 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
329
399
  *
330
400
  * console.log('Agent ID:', profile.agentId);
331
401
  * console.log('Default DN:', profile.defaultDn);
332
- * console.log('Teams:', profile.teams.map(t => t.teamId));
402
+ * console.log('Teams:', profile.teams.map(t => t.id));
333
403
  * console.log('WebRTC Enabled:', profile.webRtcEnabled);
334
404
  * console.log('Supported Login Options:', profile.loginVoiceOptions);
335
405
  *
336
406
  * // Now you can proceed with station login, state changes, etc.
337
- * await cc.stationLogin({ teamId: profile.teams[0].teamId, loginOption: 'BROWSER' });
407
+ * await cc.stationLogin({ teamId: profile.teams[0].id, loginOption: 'BROWSER' });
338
408
  * ```
339
409
  */
340
410
  register(): Promise<Profile>;
@@ -517,6 +587,16 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
517
587
  * ```
518
588
  */
519
589
  setAgentState(data: StateChange): Promise<SetStateResponse>;
590
+ /**
591
+ * Returns the system-managed `WellbeingBreak` idle code for the current registration.
592
+ * The value is fetched outside Desktop Profile filtering and cached until deregistration.
593
+ * @returns The normalized system idle-code entity
594
+ * @throws Structured Contact Center error when wellness is disabled or the code is unavailable
595
+ * @example
596
+ * const idleCode = await webex.cc.getWellbeingBreakIdleCode();
597
+ * @public
598
+ */
599
+ getWellbeingBreakIdleCode(): Promise<Entity>;
520
600
  /**
521
601
  * Processes incoming websocket messages and emits corresponding events
522
602
  * Handles various event types including agent state changes, login events,
@@ -525,6 +605,69 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
525
605
  * @param {string} event The raw websocket event message
526
606
  */
527
607
  private handleWebsocketMessage;
608
+ /**
609
+ * Checks whether Mobius/WebRTC registration should be skipped by config
610
+ * @returns {boolean} True when browser WebRTC registration is disabled
611
+ * @private
612
+ */
613
+ private isWebRTCRegistrationDisabled;
614
+ /**
615
+ * Validates contact-center plugin configuration before service initialization
616
+ * @private
617
+ */
618
+ private validatePluginConfig;
619
+ /**
620
+ * Whether wxApp thick-client answer is enabled for this SDK instance.
621
+ * @public
622
+ */
623
+ isWxBetterTogetherEnabled(): boolean;
624
+ /**
625
+ * Current station login option (Extension, Dial Number, or Browser/Desktop).
626
+ * Prefer webCallingService — updated on every stationLogin before wxApp hooks run.
627
+ * @private
628
+ */
629
+ private getCurrentStationLoginOption;
630
+ /**
631
+ * wxApp thick-client answer is supported for Extension and Dial Number station login only —
632
+ * not Browser/Desktop (WebRTC) login.
633
+ * @private
634
+ */
635
+ private assertWxAppStationLoginSupportedForEnable;
636
+ /**
637
+ * Clears runtime wxApp config after logout/deregister so stale flags do not apply on relogin.
638
+ * @private
639
+ */
640
+ private resetEnableWxBetterTogetherConfig;
641
+ private getWxAppTelephonyTaskType;
642
+ private ensureWxAppPostStationLogin;
643
+ private clearWxAppFalsePublishRetryTimer;
644
+ private scheduleForcedFalsePublishRetry;
645
+ /**
646
+ * Retries compensating false publish after rollback failure, regardless of enabled flag.
647
+ * @private
648
+ */
649
+ private scheduleCompensatingFalsePublishRetry;
650
+ private scheduleFalsePublishRetry;
651
+ /**
652
+ * Best-effort rollback when usersub true was published but wxApp setup did not complete.
653
+ * @private
654
+ */
655
+ private revertWxAppCrossClientPublish;
656
+ private ensureWxAppDeviceRegistered;
657
+ private ensureWxAppMercuryConnected;
658
+ /**
659
+ * Disconnects Mercury and unregisters the device when wxApp mute sync opened them.
660
+ * @private
661
+ */
662
+ private releaseWxAppMercuryResources;
663
+ /**
664
+ * Clears wxApp runtime state and feature-owned resources. Publish failures are logged;
665
+ * optional rethrow for deregister when callers need to surface usersub errors.
666
+ * @private
667
+ */
668
+ private teardownWxAppLocalState;
669
+ private ensureWxAppMercuryAndSubscribe;
670
+ private publishAnswerOnWebexCrossClientState;
528
671
  /**
529
672
  * Initializes event listeners for the Contact Center service
530
673
  * Sets up handlers for connection state changes and other core events
@@ -831,14 +974,14 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
831
974
  */
832
975
  updateAgentProfile(data: AgentProfileUpdate): Promise<UpdateDeviceTypeResponse>;
833
976
  /**
834
- * Returns paginated entry points for the organization.
835
- * Thin wrapper around internal EntryPoint instance.
977
+ * Returns paginated entry points using the EntryPoint service defaults.
978
+ * Existing request parameters can override those defaults.
836
979
  * @public
837
980
  */
838
981
  getEntryPoints(params?: EntryPointSearchParams): Promise<EntryPointListResponse>;
839
982
  /**
840
- * Returns paginated contact service queues for the organization.
841
- * Thin wrapper around internal Queue instance.
983
+ * Returns paginated contact service queues using the Queue service defaults.
984
+ * Existing request parameters can override those defaults.
842
985
  * @public
843
986
  */
844
987
  getQueues(params?: ContactServiceQueueSearchParams): Promise<ContactServiceQueuesResponse>;
@@ -25,6 +25,19 @@ declare const _default: {
25
25
  * @default true
26
26
  */
27
27
  allowAutomatedRelogin: boolean;
28
+ /**
29
+ * Whether to skip Mobius/WebRTC registration for browser login flows.
30
+ * @type {boolean}
31
+ * @default false
32
+ */
33
+ disableWebRTCRegistration: boolean;
34
+ /**
35
+ * Whether wxApp Better Together is enabled at SDK init.
36
+ * Must be set before SDK init. Default false (WXCC-6026).
37
+ * @type {boolean}
38
+ * @default false
39
+ */
40
+ enableWxBetterTogether: boolean;
28
41
  /**
29
42
  * The type of client making the connection.
30
43
  * @type {string}
@@ -7,12 +7,14 @@ export declare const LOG_PREFIX = "PLUGIN_CC";
7
7
  export declare const WEB_CALLING_SERVICE_FILE = "WebCallingService";
8
8
  export declare const CONFIG_FILE_NAME = "config-index";
9
9
  export declare const CC_FILE = "cc";
10
+ export declare const WELLNESS_BREAK_HANDLER = "Wellness_Break_Handler";
10
11
  export declare const CONNECTION_SERVICE_FILE = "connection-service";
11
12
  export declare const WEB_SOCKET_MANAGER_FILE = "WebSocketManager";
12
13
  export declare const AQM_REQS_FILE = "aqm-reqs";
13
14
  export declare const WEBEX_REQUEST_FILE = "WebexRequest";
14
15
  export declare const TASK_MANAGER_FILE = "TaskManager";
15
16
  export declare const TASK_FILE = "Task";
17
+ export declare const INBOUND_DIRECTION = "INBOUND";
16
18
  export declare const OUTDIAL_DIRECTION = "OUTBOUND";
17
19
  export declare const ATTRIBUTES: {};
18
20
  export declare const OUTDIAL_MEDIA_TYPE = "telephony";
@@ -36,17 +38,50 @@ export declare const METHODS: {
36
38
  HANDLE_DEVICE_TYPE: string;
37
39
  START_OUTDIAL: string;
38
40
  GET_QUEUES: string;
39
- GET_OUTDIAL_ANI_ENTRIES: string;
40
41
  UPLOAD_LOGS: string;
41
42
  UPDATE_AGENT_PROFILE: string;
42
43
  GET_DEVICE_ID: string;
43
44
  HANDLE_INCOMING_TASK: string;
44
45
  HANDLE_TASK_HYDRATE: string;
45
46
  INCOMING_TASK_LISTENER: string;
47
+ ACCEPT: string;
48
+ REJECT: string;
49
+ HOLD: string;
50
+ RESUME: string;
51
+ HOLD_RESUME: string;
52
+ TRANSFER_CALL: string;
53
+ CONSULT_TRANSFER: string;
54
+ CONSULT_CONFERENCE: string;
55
+ DROP_CONFERENCE_PARTICIPANT: string;
56
+ EXIT_CONFERENCE: string;
57
+ TRANSFER_CONFERENCE: string;
58
+ TOGGLE_MUTE: string;
59
+ TRANSMIT_DTMF: string;
60
+ COMPLETE_TRANSFER: string;
61
+ GET_OUTDIAL_ANI_ENTRIES: string;
46
62
  ACCEPT_PREVIEW_CONTACT: string;
47
63
  SKIP_PREVIEW_CONTACT: string;
48
64
  REMOVE_PREVIEW_CONTACT: string;
49
65
  GET_BASE_URL: string;
50
66
  SEND_EVENT: string;
67
+ GET_REAL_TIME_ASSISTANCE: string;
68
+ SEND_REAL_TIME_ASSISTANCE_USER_ACTION: string;
51
69
  FETCH_HISTORIC_TRANSCRIPTS: string;
70
+ REQUEST_WELLNESS_BREAK: string;
71
+ RESPOND_TO_WELLNESS_BREAK: string;
72
+ GET_WELLBEING_BREAK_IDLE_CODE: string;
73
+ SET_MANAGE_WEBEX_CALLING_IN_WXCC: string;
74
+ IS_WX_BETTER_TOGETHER_ENABLED: string;
75
+ SYNC_WXAPP_MUTE_FROM_MERCURY: string;
76
+ GET_CALL_DETAILS_ON_WEBEX: string;
77
+ ENSURE_WXAPP_MERCURY_CONNECTED: string;
78
+ };
79
+ export declare const AI_SUMMARY_ERROR_CODES: {
80
+ readonly POST_CALL_SUMMARY_DISABLED: "POST_CALL_SUMMARY_DISABLED";
81
+ readonly MID_CALL_SUMMARY_DISABLED: "MID_CALL_SUMMARY_DISABLED";
82
+ readonly AI_ASSISTANT_BASE_URL_NOT_AVAILABLE: "AI_ASSISTANT_BASE_URL_NOT_AVAILABLE";
83
+ readonly POST_CALL_SUMMARY_TIMEOUT: "POST_CALL_SUMMARY_TIMEOUT";
84
+ readonly MID_CALL_SUMMARY_TIMEOUT: "MID_CALL_SUMMARY_TIMEOUT";
52
85
  };
86
+ export declare const AI_SUMMARY_INVALID_RESPONSE_PAYLOAD = "AI_SUMMARY_INVALID_RESPONSE_PAYLOAD";
87
+ export declare const AI_ASSISTANT_CLIENT_TYPE: "WxCC";