@webex/contact-center 3.12.0-next.13 → 3.12.0-next.130

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 (312) hide show
  1. package/.sdd/manifest.json +884 -0
  2. package/AGENTS.md +94 -0
  3. package/ai-docs/ARCHITECTURE.md +168 -0
  4. package/ai-docs/CONTRACTS.md +53 -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 +382 -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 +971 -42
  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 +31 -3
  46. package/dist/constants.js.map +1 -1
  47. package/dist/index.js +45 -15
  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 +205 -0
  52. package/dist/metrics/behavioral-events.js.map +1 -1
  53. package/dist/metrics/constants.js +48 -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 +269 -9
  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/WebexCrossClientService.js +222 -0
  68. package/dist/services/WebexCrossClientService.js.map +1 -0
  69. package/dist/services/WxAppTelephonyMercurySync.js +108 -0
  70. package/dist/services/WxAppTelephonyMercurySync.js.map +1 -0
  71. package/dist/services/config/Util.js +11 -4
  72. package/dist/services/config/Util.js.map +1 -1
  73. package/dist/services/config/constants.js +41 -7
  74. package/dist/services/config/constants.js.map +1 -1
  75. package/dist/services/config/index.js +51 -0
  76. package/dist/services/config/index.js.map +1 -1
  77. package/dist/services/config/types.js +57 -12
  78. package/dist/services/config/types.js.map +1 -1
  79. package/dist/services/core/Err.js.map +1 -1
  80. package/dist/services/core/Utils.js +111 -32
  81. package/dist/services/core/Utils.js.map +1 -1
  82. package/dist/services/core/WebexRequest.js +6 -2
  83. package/dist/services/core/WebexRequest.js.map +1 -1
  84. package/dist/services/core/aqm-reqs.js +28 -14
  85. package/dist/services/core/aqm-reqs.js.map +1 -1
  86. package/dist/services/core/types.js.map +1 -1
  87. package/dist/services/core/websocket/WebSocketManager.js +2 -1
  88. package/dist/services/core/websocket/WebSocketManager.js.map +1 -1
  89. package/dist/services/core/websocket/types.js.map +1 -1
  90. package/dist/services/index.js +1 -1
  91. package/dist/services/index.js.map +1 -1
  92. package/dist/services/task/Task.js +754 -0
  93. package/dist/services/task/Task.js.map +1 -0
  94. package/dist/services/task/TaskFactory.js +49 -0
  95. package/dist/services/task/TaskFactory.js.map +1 -0
  96. package/dist/services/task/TaskManager.js +1172 -521
  97. package/dist/services/task/TaskManager.js.map +1 -1
  98. package/dist/services/task/TaskUtils.js +211 -27
  99. package/dist/services/task/TaskUtils.js.map +1 -1
  100. package/dist/services/task/WebexCallingUtils.js +70 -0
  101. package/dist/services/task/WebexCallingUtils.js.map +1 -0
  102. package/dist/services/task/constants.js +12 -2
  103. package/dist/services/task/constants.js.map +1 -1
  104. package/dist/services/task/contact.js +29 -0
  105. package/dist/services/task/contact.js.map +1 -1
  106. package/dist/services/task/dialer.js +78 -0
  107. package/dist/services/task/dialer.js.map +1 -1
  108. package/dist/services/task/digital/Digital.js +78 -0
  109. package/dist/services/task/digital/Digital.js.map +1 -0
  110. package/dist/services/task/state-machine/TaskStateMachine.js +982 -0
  111. package/dist/services/task/state-machine/TaskStateMachine.js.map +1 -0
  112. package/dist/services/task/state-machine/actions.js +572 -0
  113. package/dist/services/task/state-machine/actions.js.map +1 -0
  114. package/dist/services/task/state-machine/constants.js +161 -0
  115. package/dist/services/task/state-machine/constants.js.map +1 -0
  116. package/dist/services/task/state-machine/guards.js +379 -0
  117. package/dist/services/task/state-machine/guards.js.map +1 -0
  118. package/dist/services/task/state-machine/index.js +53 -0
  119. package/dist/services/task/state-machine/index.js.map +1 -0
  120. package/dist/services/task/state-machine/types.js +54 -0
  121. package/dist/services/task/state-machine/types.js.map +1 -0
  122. package/dist/services/task/state-machine/uiControlsComputer.js +703 -0
  123. package/dist/services/task/state-machine/uiControlsComputer.js.map +1 -0
  124. package/dist/services/task/taskDataNormalizer.js +99 -0
  125. package/dist/services/task/taskDataNormalizer.js.map +1 -0
  126. package/dist/services/task/types.js +228 -5
  127. package/dist/services/task/types.js.map +1 -1
  128. package/dist/services/task/voice/Voice.js +1485 -0
  129. package/dist/services/task/voice/Voice.js.map +1 -0
  130. package/dist/services/task/voice/WebRTC.js +152 -0
  131. package/dist/services/task/voice/WebRTC.js.map +1 -0
  132. package/dist/services/task/voice/wxAppVoiceMethods.js +354 -0
  133. package/dist/services/task/voice/wxAppVoiceMethods.js.map +1 -0
  134. package/dist/services/wxAppDiagnosticLogging.js +122 -0
  135. package/dist/services/wxAppDiagnosticLogging.js.map +1 -0
  136. package/dist/services/wxAppTelephonyUtils.js +19 -0
  137. package/dist/services/wxAppTelephonyUtils.js.map +1 -0
  138. package/dist/types/cc.d.ts +193 -6
  139. package/dist/types/config.d.ts +13 -0
  140. package/dist/types/constants.d.ts +29 -1
  141. package/dist/types/index.d.ts +35 -8
  142. package/dist/types/metrics/MetricsManager.d.ts +6 -0
  143. package/dist/types/metrics/constants.d.ts +43 -1
  144. package/dist/types/services/AddressBook.d.ts +2 -1
  145. package/dist/types/services/AnswerCallOnWebexService.d.ts +38 -0
  146. package/dist/types/services/ApiAiAssistant.d.ts +56 -5
  147. package/dist/types/services/EntryPoint.d.ts +7 -5
  148. package/dist/types/services/Queue.d.ts +5 -3
  149. package/dist/types/services/UserPreference.d.ts +118 -0
  150. package/dist/types/services/WebexCrossClientService.d.ts +32 -0
  151. package/dist/types/services/WxAppTelephonyMercurySync.d.ts +28 -0
  152. package/dist/types/services/config/constants.d.ts +34 -5
  153. package/dist/types/services/config/types.d.ts +197 -12
  154. package/dist/types/services/core/Err.d.ts +6 -0
  155. package/dist/types/services/core/Utils.d.ts +35 -13
  156. package/dist/types/services/core/WebexRequest.d.ts +1 -0
  157. package/dist/types/services/core/types.d.ts +2 -0
  158. package/dist/types/services/core/websocket/WebSocketManager.d.ts +1 -0
  159. package/dist/types/services/core/websocket/types.d.ts +1 -1
  160. package/dist/types/services/index.d.ts +1 -1
  161. package/dist/types/services/task/Task.d.ts +175 -0
  162. package/dist/types/services/task/TaskFactory.d.ts +13 -0
  163. package/dist/types/services/task/TaskUtils.d.ts +48 -2
  164. package/dist/types/services/task/WebexCallingUtils.d.ts +11 -0
  165. package/dist/types/services/task/constants.d.ts +10 -0
  166. package/dist/types/services/task/contact.d.ts +4 -0
  167. package/dist/types/services/task/dialer.d.ts +30 -0
  168. package/dist/types/services/task/digital/Digital.d.ts +22 -0
  169. package/dist/types/services/task/state-machine/TaskStateMachine.d.ts +1442 -0
  170. package/dist/types/services/task/state-machine/actions.d.ts +10 -0
  171. package/dist/types/services/task/state-machine/constants.d.ts +107 -0
  172. package/dist/types/services/task/state-machine/guards.d.ts +103 -0
  173. package/dist/types/services/task/state-machine/index.d.ts +13 -0
  174. package/dist/types/services/task/state-machine/types.d.ts +277 -0
  175. package/dist/types/services/task/state-machine/uiControlsComputer.d.ts +9 -0
  176. package/dist/types/services/task/taskDataNormalizer.d.ts +10 -0
  177. package/dist/types/services/task/types.d.ts +680 -66
  178. package/dist/types/services/task/voice/Voice.d.ts +227 -0
  179. package/dist/types/services/task/voice/WebRTC.d.ts +53 -0
  180. package/dist/types/services/task/voice/wxAppVoiceMethods.d.ts +55 -0
  181. package/dist/types/services/wxAppDiagnosticLogging.d.ts +51 -0
  182. package/dist/types/services/wxAppTelephonyUtils.d.ts +5 -0
  183. package/dist/types/types.d.ts +205 -9
  184. package/dist/types/utils/PageCache.d.ts +20 -3
  185. package/dist/types/webex.d.ts +1 -0
  186. package/dist/types.js +162 -4
  187. package/dist/types.js.map +1 -1
  188. package/dist/utils/PageCache.js +19 -5
  189. package/dist/utils/PageCache.js.map +1 -1
  190. package/dist/webex.js +22 -2
  191. package/dist/webex.js.map +1 -1
  192. package/package.json +16 -12
  193. package/src/cc.ts +1289 -112
  194. package/src/config.ts +13 -0
  195. package/src/constants.ts +29 -1
  196. package/src/index.ts +36 -5
  197. package/src/metrics/MetricsManager.ts +16 -0
  198. package/src/metrics/ai-docs/AGENTS.md +350 -0
  199. package/src/metrics/ai-docs/ARCHITECTURE.md +338 -0
  200. package/src/metrics/ai-docs/metrics-spec.md +921 -0
  201. package/src/metrics/behavioral-events.ts +212 -0
  202. package/src/metrics/constants.ts +52 -4
  203. package/src/services/AddressBook.ts +17 -6
  204. package/src/services/AnswerCallOnWebexService.ts +239 -0
  205. package/src/services/ApiAiAssistant.ts +356 -9
  206. package/src/services/EntryPoint.ts +59 -60
  207. package/src/services/Queue.ts +29 -12
  208. package/src/services/UserPreference.ts +509 -0
  209. package/src/services/WebexCrossClientService.ts +293 -0
  210. package/src/services/WxAppTelephonyMercurySync.ts +142 -0
  211. package/src/services/agent/ai-docs/AGENTS.md +240 -0
  212. package/src/services/agent/ai-docs/ARCHITECTURE.md +304 -0
  213. package/src/services/agent/ai-docs/agent-spec.md +505 -0
  214. package/src/services/ai-docs/AGENTS.md +386 -0
  215. package/src/services/ai-docs/services-spec.md +505 -0
  216. package/src/services/config/Util.ts +12 -3
  217. package/src/services/config/ai-docs/AGENTS.md +255 -0
  218. package/src/services/config/ai-docs/ARCHITECTURE.md +426 -0
  219. package/src/services/config/ai-docs/config-spec.md +686 -0
  220. package/src/services/config/constants.ts +46 -6
  221. package/src/services/config/index.ts +65 -0
  222. package/src/services/config/types.ts +197 -13
  223. package/src/services/core/Err.ts +3 -0
  224. package/src/services/core/Utils.ts +127 -37
  225. package/src/services/core/WebexRequest.ts +3 -1
  226. package/src/services/core/ai-docs/AGENTS.md +381 -0
  227. package/src/services/core/ai-docs/ARCHITECTURE.md +698 -0
  228. package/src/services/core/ai-docs/core-spec.md +787 -0
  229. package/src/services/core/aqm-reqs.ts +30 -15
  230. package/src/services/core/types.ts +2 -0
  231. package/src/services/core/websocket/WebSocketManager.ts +2 -0
  232. package/src/services/core/websocket/types.ts +1 -1
  233. package/src/services/index.ts +1 -1
  234. package/src/services/task/Task.ts +908 -0
  235. package/src/services/task/TaskFactory.ts +60 -0
  236. package/src/services/task/TaskManager.ts +1419 -608
  237. package/src/services/task/TaskUtils.ts +303 -25
  238. package/src/services/task/WebexCallingUtils.ts +136 -0
  239. package/src/services/task/ai-docs/AGENTS.md +457 -0
  240. package/src/services/task/ai-docs/ARCHITECTURE.md +595 -0
  241. package/src/services/task/ai-docs/task-spec.md +1474 -0
  242. package/src/services/task/constants.ts +10 -0
  243. package/src/services/task/contact.ts +30 -0
  244. package/src/services/task/dialer.ts +80 -0
  245. package/src/services/task/digital/Digital.ts +97 -0
  246. package/src/services/task/state-machine/TaskStateMachine.ts +1320 -0
  247. package/src/services/task/state-machine/actions.ts +741 -0
  248. package/src/services/task/state-machine/ai-docs/AGENTS.md +460 -0
  249. package/src/services/task/state-machine/ai-docs/ARCHITECTURE.md +1156 -0
  250. package/src/services/task/state-machine/ai-docs/task-state-machine-spec.md +2247 -0
  251. package/src/services/task/state-machine/constants.ts +172 -0
  252. package/src/services/task/state-machine/guards.ts +442 -0
  253. package/src/services/task/state-machine/index.ts +28 -0
  254. package/src/services/task/state-machine/types.ts +258 -0
  255. package/src/services/task/state-machine/uiControlsComputer.ts +1135 -0
  256. package/src/services/task/taskDataNormalizer.ts +137 -0
  257. package/src/services/task/types.ts +819 -70
  258. package/src/services/task/voice/Voice.ts +1851 -0
  259. package/src/services/task/voice/WebRTC.ts +191 -0
  260. package/src/services/task/voice/wxAppVoiceMethods.ts +516 -0
  261. package/src/services/wxAppDiagnosticLogging.ts +174 -0
  262. package/src/services/wxAppTelephonyUtils.ts +14 -0
  263. package/src/types.ts +262 -11
  264. package/src/utils/AGENTS.md +289 -0
  265. package/src/utils/PageCache.ts +38 -5
  266. package/src/utils/ai-docs/utils-spec.md +391 -0
  267. package/src/webex.js +10 -0
  268. package/test/unit/spec/cc.ts +2210 -119
  269. package/test/unit/spec/logger-proxy.ts +70 -0
  270. package/test/unit/spec/metrics/MetricsManager.ts +25 -0
  271. package/test/unit/spec/metrics/behavioral-events.ts +60 -0
  272. package/test/unit/spec/services/AddressBook.ts +37 -6
  273. package/test/unit/spec/services/AnswerCallOnWebexService.ts +264 -0
  274. package/test/unit/spec/services/ApiAiAssistant.ts +311 -21
  275. package/test/unit/spec/services/EntryPoint.ts +87 -40
  276. package/test/unit/spec/services/Queue.ts +123 -12
  277. package/test/unit/spec/services/UserPreference.ts +401 -0
  278. package/test/unit/spec/services/WebCallingService.ts +7 -1
  279. package/test/unit/spec/services/WebexCrossClientService.ts +467 -0
  280. package/test/unit/spec/services/WxAppTelephonyMercurySync.ts +136 -0
  281. package/test/unit/spec/services/config/Util.ts +129 -0
  282. package/test/unit/spec/services/config/index.ts +97 -29
  283. package/test/unit/spec/services/core/Utils.ts +425 -8
  284. package/test/unit/spec/services/core/WebexRequest.ts +3 -1
  285. package/test/unit/spec/services/core/aqm-reqs.ts +113 -1
  286. package/test/unit/spec/services/core/websocket/WebSocketManager.ts +66 -40
  287. package/test/unit/spec/services/task/AutoWrapup.ts +63 -0
  288. package/test/unit/spec/services/task/Task.ts +745 -0
  289. package/test/unit/spec/services/task/TaskFactory.ts +99 -0
  290. package/test/unit/spec/services/task/TaskManager.ts +2518 -1494
  291. package/test/unit/spec/services/task/TaskUtils.ts +235 -0
  292. package/test/unit/spec/services/task/WebexCallingUtils.ts +153 -0
  293. package/test/unit/spec/services/task/contact.ts +33 -0
  294. package/test/unit/spec/services/task/dialer.ts +190 -0
  295. package/test/unit/spec/services/task/digital/Digital.ts +105 -0
  296. package/test/unit/spec/services/task/state-machine/TaskStateMachine.ts +4060 -0
  297. package/test/unit/spec/services/task/state-machine/guards.ts +839 -0
  298. package/test/unit/spec/services/task/state-machine/types.ts +18 -0
  299. package/test/unit/spec/services/task/state-machine/uiControlsComputer.ts +3101 -0
  300. package/test/unit/spec/services/task/taskTestUtils.ts +87 -0
  301. package/test/unit/spec/services/task/voice/Voice.ts +2061 -0
  302. package/test/unit/spec/services/task/voice/WebRTC.ts +235 -0
  303. package/test/unit/spec/services/task/voice/wxAppVoiceMethods.ts +603 -0
  304. package/test/unit/spec/services/wxAppDiagnosticLogging.ts +143 -0
  305. package/test/unit/spec/wellnessSampleUtils.ts +288 -0
  306. package/umd/contact-center.min.js +2 -2
  307. package/umd/contact-center.min.js.map +1 -1
  308. package/dist/services/task/index.js +0 -1525
  309. package/dist/services/task/index.js.map +0 -1
  310. package/dist/types/services/task/index.d.ts +0 -650
  311. package/src/services/task/index.ts +0 -1801
  312. package/test/unit/spec/services/task/index.ts +0 -2184
@@ -0,0 +1,129 @@
1
+ import {parseAgentConfigs} from '../../../../../src/services/config/Util';
2
+ import {AuxCode, DesktopProfileResponse} from '../../../../../src/services/config/types';
3
+
4
+ const baseAgentProfile: DesktopProfileResponse = {
5
+ timeoutDesktopInactivityCustomEnabled: false,
6
+ timeoutDesktopInactivityMins: 10,
7
+ accessWrapUpCode: 'ALL',
8
+ wrapUpCodes: [],
9
+ accessIdleCode: 'ALL',
10
+ idleCodes: [],
11
+ autoWrapUp: false,
12
+ autoWrapAfterSeconds: 30,
13
+ lastAgentRouting: false,
14
+ allowAutoWrapUpExtension: false,
15
+ outdialEnabled: true,
16
+ dialPlanEnabled: false,
17
+ agentAvailableAfterOutdial: true,
18
+ outdialEntryPointId: 'ep-1',
19
+ consultToQueue: false,
20
+ viewableStatistics: {agentStats: false},
21
+ addressBookId: 'ab-1',
22
+ outdialANIId: 'ani-1',
23
+ loginVoiceOptions: [],
24
+ dialPlans: [],
25
+ agentDNValidation: 'PROVISIONED_VALUE',
26
+ accessQueue: 'SPECIFIC',
27
+ accessEntryPoint: 'NONE',
28
+ accessBuddyTeam: 'ALL',
29
+ } as DesktopProfileResponse;
30
+
31
+ const baseProfileData = {
32
+ userData: {
33
+ ciUserId: 'agent-1',
34
+ firstName: 'Jane',
35
+ lastName: 'Agent',
36
+ email: 'jane@example.com',
37
+ agentProfileId: 'profile-1',
38
+ skillProfileId: 'skill-1',
39
+ siteId: 'site-1',
40
+ dbId: 'db-1',
41
+ deafultDialledNumber: '+15551234567',
42
+ id: 'user-1',
43
+ teamIds: ['team-1'],
44
+ },
45
+ teamData: [{id: 'team-1', name: 'Support'}],
46
+ tenantData: {
47
+ timeoutDesktopInactivityEnabled: false,
48
+ timeoutDesktopInactivityMins: 15,
49
+ forceDefaultDn: false,
50
+ dnDefaultRegex: '',
51
+ dnOtherRegex: '',
52
+ outdialEnabled: true,
53
+ endCallEnabled: true,
54
+ endConsultEnabled: true,
55
+ callVariablesSuppressed: false,
56
+ privacyShieldVisible: false,
57
+ },
58
+ orgInfoData: {
59
+ tenantId: 'tenant-1',
60
+ timezone: 'UTC',
61
+ environment: 'produs1',
62
+ },
63
+ auxCodes: [] as AuxCode[],
64
+ orgSettingsData: {
65
+ campaignManagerEnabled: false,
66
+ webRtcEnabled: true,
67
+ maskSensitiveData: false,
68
+ },
69
+ agentProfileData: baseAgentProfile,
70
+ dialPlanData: [],
71
+ urlMapping: [],
72
+ multimediaProfileId: 'mm-1',
73
+ aiFeatureFlags: {data: []},
74
+ };
75
+
76
+ describe('parseAgentConfigs collaboration access fields', () => {
77
+ it('maps Desktop Profile collaboration access flags onto Profile', () => {
78
+ const profile = parseAgentConfigs(baseProfileData);
79
+
80
+ expect(profile.allowConsultToQueue).toBe(false);
81
+ expect(profile.accessQueue).toBe('SPECIFIC');
82
+ expect(profile.accessEntryPoint).toBe('NONE');
83
+ expect(profile.accessBuddyTeam).toBe('ALL');
84
+ });
85
+
86
+ it('enables wellness only when organization config, reminders, and license are present', () => {
87
+ const profile = parseAgentConfigs({
88
+ ...baseProfileData,
89
+ orgSettingsData: {...baseProfileData.orgSettingsData, aiAssistantQuantity: 1},
90
+ aiFeatureFlags: {
91
+ data: [
92
+ {
93
+ id: 'ai-feature-1',
94
+ agentWellbeing: {
95
+ enable: true,
96
+ wellnessBreakReminders: 'ENABLED',
97
+ },
98
+ },
99
+ ],
100
+ },
101
+ });
102
+
103
+ expect(profile.isWellnessBreakEnabled).toBe(true);
104
+ });
105
+
106
+ it.each([
107
+ {quantity: 0, enable: true, reminders: 'ENABLED'},
108
+ {quantity: 1, enable: false, reminders: 'ENABLED'},
109
+ {quantity: 1, enable: true, reminders: 'DISABLED'},
110
+ ] as const)(
111
+ 'disables wellness when an effective gate is missing',
112
+ ({quantity, enable, reminders}) => {
113
+ const profile = parseAgentConfigs({
114
+ ...baseProfileData,
115
+ orgSettingsData: {...baseProfileData.orgSettingsData, aiAssistantQuantity: quantity},
116
+ aiFeatureFlags: {
117
+ data: [
118
+ {
119
+ id: 'ai-feature-1',
120
+ agentWellbeing: {enable, wellnessBreakReminders: reminders},
121
+ },
122
+ ],
123
+ },
124
+ });
125
+
126
+ expect(profile.isWellnessBreakEnabled).toBe(false);
127
+ }
128
+ );
129
+ });
@@ -66,7 +66,6 @@ describe('AgentConfigService', () => {
66
66
  method: 'GET',
67
67
  });
68
68
  expect(result).toEqual(mockResponse.body);
69
-
70
69
  expect(LoggerProxy.info).toHaveBeenCalledWith('Fetching user data using CI', {
71
70
  module: CONFIG_FILE_NAME,
72
71
  method: 'getUserUsingCI',
@@ -124,7 +123,6 @@ describe('AgentConfigService', () => {
124
123
  method: 'GET',
125
124
  });
126
125
  expect(result).toEqual(mockResponse.body);
127
-
128
126
  expect(LoggerProxy.info).toHaveBeenCalledWith('Fetching desktop profile', {
129
127
  module: CONFIG_FILE_NAME,
130
128
  method: 'getDesktopProfileById',
@@ -183,7 +181,6 @@ describe('AgentConfigService', () => {
183
181
  method: 'GET',
184
182
  });
185
183
  expect(result).toEqual(mockResponse.body);
186
-
187
184
  expect(LoggerProxy.info).toHaveBeenCalledWith('Fetching list of teams', {
188
185
  module: CONFIG_FILE_NAME,
189
186
  method: 'getListOfTeams',
@@ -267,7 +264,6 @@ describe('AgentConfigService', () => {
267
264
  method: 'GET',
268
265
  });
269
266
  expect(result).toEqual(mockResponse.body);
270
-
271
267
  expect(LoggerProxy.info).toHaveBeenCalledWith('Fetching list of aux codes', {
272
268
  module: CONFIG_FILE_NAME,
273
269
  method: 'getListOfAuxCodes',
@@ -495,7 +491,7 @@ describe('AgentConfigService', () => {
495
491
  const mockResponse = {
496
492
  statusCode: 200,
497
493
  body: {
498
- realtimeTranscripts: {enable: true},
494
+ data: [{realtimeTranscripts: {enable: true}}],
499
495
  },
500
496
  };
501
497
  mockWebexRequest.request.mockResolvedValue(mockResponse);
@@ -709,7 +705,101 @@ describe('AgentConfigService', () => {
709
705
  });
710
706
  });
711
707
 
708
+ describe('getWellbeingBreakIdleCode', () => {
709
+ it('uses the system-code query and finds the exact code across pages', async () => {
710
+ (mockWebexRequest.request as jest.Mock)
711
+ .mockResolvedValueOnce({
712
+ statusCode: 200,
713
+ body: {
714
+ data: [
715
+ {id: 'other', name: 'Other', active: true, isSystemCode: true, defaultCode: false},
716
+ ],
717
+ meta: {totalPages: 2},
718
+ },
719
+ })
720
+ .mockResolvedValueOnce({
721
+ statusCode: 200,
722
+ body: {
723
+ data: [
724
+ {
725
+ id: 'wellbeing-code',
726
+ name: 'WellbeingBreak',
727
+ active: true,
728
+ isSystemCode: true,
729
+ defaultCode: false,
730
+ },
731
+ ],
732
+ meta: {totalPages: 2},
733
+ },
734
+ });
735
+
736
+ await expect(agentConfigService.getWellbeingBreakIdleCode(mockOrgId)).resolves.toEqual({
737
+ id: 'wellbeing-code',
738
+ name: 'WellbeingBreak',
739
+ isSystem: true,
740
+ isDefault: false,
741
+ });
742
+ expect(mockWebexRequest.request).toHaveBeenNthCalledWith(1, {
743
+ service: mockWccAPIURL,
744
+ resource:
745
+ `organization/${mockOrgId}/v2/auxiliary-code?page=0&pageSize=100` +
746
+ '&workType=IDLE_CODE&customFilter=isSystemCode==true&desktopProfileFilter=false',
747
+ method: 'GET',
748
+ });
749
+ expect(mockWebexRequest.request).toHaveBeenNthCalledWith(2, {
750
+ service: mockWccAPIURL,
751
+ resource:
752
+ `organization/${mockOrgId}/v2/auxiliary-code?page=1&pageSize=100` +
753
+ '&workType=IDLE_CODE&customFilter=isSystemCode==true&desktopProfileFilter=false',
754
+ method: 'GET',
755
+ });
756
+ });
757
+
758
+ it('rejects when the exact system code is unavailable', async () => {
759
+ (mockWebexRequest.request as jest.Mock).mockResolvedValue({
760
+ statusCode: 200,
761
+ body: {
762
+ data: [
763
+ {id: 'inactive', name: 'WellbeingBreak', active: false, isSystemCode: true},
764
+ {id: 'lookalike', name: 'wellbeingbreak', active: true, isSystemCode: true},
765
+ ],
766
+ meta: {totalPages: 1},
767
+ },
768
+ });
769
+
770
+ await expect(agentConfigService.getWellbeingBreakIdleCode(mockOrgId)).rejects.toThrow(
771
+ 'WELLBEING_BREAK_IDLE_CODE_NOT_FOUND'
772
+ );
773
+ });
774
+ });
775
+
712
776
  describe('getAgentConfig', () => {
777
+ const mockTeamData = [
778
+ {id: 'team1', name: 'Support Team'},
779
+ {id: 'team2', name: 'Sales Team'},
780
+ ];
781
+
782
+ const mockOrgInfo = {
783
+ tenantId: 'tenant123',
784
+ timezone: 'GMT',
785
+ environment: 'produs1',
786
+ };
787
+
788
+ const mockSiteInfo = {
789
+ id: 'c6a5451f-5ba7-49a1-aee8-fbef70c19ece',
790
+ name: 'Site-1',
791
+ multimediaProfileId: 'c5888e6f-5661-4871-9936-cbcec7658d41',
792
+ };
793
+
794
+ const mockURLMapping = [
795
+ {key: 'ACQUEON_API_URL', url: 'https://api.example.com'},
796
+ {key: 'ACQUEON_CONSOLE_URL', url: 'https://console.example.com'},
797
+ ];
798
+
799
+ const mockAIFeatureFlags = {
800
+ data: [{realtimeTranscripts: {enable: true}}],
801
+ };
802
+
713
803
  beforeEach(() => {
714
804
  jest.clearAllMocks();
715
805
  });
@@ -724,7 +814,7 @@ describe('AgentConfigService', () => {
724
814
  agentProfileId: 'profile123',
725
815
  siteId: 'site789',
726
816
  dbId: 'db123',
727
- defaultDialledNumber: '1234567890',
817
+ deafultDialledNumber: '1234567890',
728
818
  id: 'user001',
729
819
  teamIds: ['team1', 'team2'],
730
820
  };
@@ -770,12 +860,6 @@ describe('AgentConfigService', () => {
770
860
  maskSensitiveData: false,
771
861
  };
772
862
 
773
- const mockSiteInfo = {
774
- id: 'c6a5451f-5ba7-49a1-aee8-fbef70c19ece',
775
- name: 'Site-1',
776
- multimediaProfileId: 'c5888e6f-5661-4871-9936-cbcec7658d41',
777
- };
778
-
779
863
  const mockTenantData = {
780
864
  timeoutDesktopInactivityEnabled: false,
781
865
  timeoutDesktopInactivityMins: 15,
@@ -789,11 +873,6 @@ describe('AgentConfigService', () => {
789
873
  callVariablesSuppressed: false,
790
874
  };
791
875
 
792
- const mockURLMapping = [
793
- {key: 'ACQUEON_API_URL', url: 'https://api.example.com'},
794
- {key: 'ACQUEON_CONSOLE_URL', url: 'https://console.example.com'},
795
- ];
796
-
797
876
  const mockAuxCodes = [
798
877
  {id: 'aux1', type: 'WRAP_UP_CODE', name: 'Wrap Up Code 1', isDefault: true},
799
878
  {id: 'aux2', type: 'IDLE_CODE', name: 'Idle Code 1', isDefault: true},
@@ -864,7 +943,7 @@ describe('AgentConfigService', () => {
864
943
  skillProfileId: 'skillProfile456',
865
944
  siteId: 'site789',
866
945
  dbId: 'db123',
867
- defaultDialledNumber: '1234567890',
946
+ deafultDialledNumber: '1234567890',
868
947
  id: 'user001',
869
948
  teamIds: ['team1', 'team2'],
870
949
  };
@@ -915,12 +994,6 @@ describe('AgentConfigService', () => {
915
994
  maskSensitiveData: true,
916
995
  };
917
996
 
918
- const mockSiteInfo = {
919
- id: 'c6a5451f-5ba7-49a1-aee8-fbef70c19ece',
920
- name: 'Site-1',
921
- multimediaProfileId: 'c5888e6f-5661-4871-9936-cbcec7658d41',
922
- };
923
-
924
997
  const mockTenantData = {
925
998
  timeoutDesktopInactivityEnabled: true,
926
999
  timeoutDesktopInactivityMins: 15,
@@ -935,11 +1008,6 @@ describe('AgentConfigService', () => {
935
1008
  lostConnectionRecoveryTimeout: 30,
936
1009
  };
937
1010
 
938
- const mockURLMapping = [
939
- {key: 'ACQUEON_API_URL', url: 'https://api.example.com'},
940
- {key: 'ACQUEON_CONSOLE_URL', url: 'https://console.example.com'},
941
- ];
942
-
943
1011
  const mockAuxCodes = [
944
1012
  {id: 'aux1', type: 'WRAP_UP_CODE', name: 'Wrap Up Code 1'},
945
1013
  {id: 'aux2', type: 'IDLE_CODE', name: 'Idle Code 1'},