@webex/contact-center 3.12.0-next.157 → 3.12.0-next.159

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 (41) hide show
  1. package/ai-docs/contact-center-spec.md +3 -0
  2. package/dist/cc.js +10 -2
  3. package/dist/cc.js.map +1 -1
  4. package/dist/services/ApiAiAssistant.js +18 -0
  5. package/dist/services/ApiAiAssistant.js.map +1 -1
  6. package/dist/services/WebCallingService.js +10 -2
  7. package/dist/services/WebCallingService.js.map +1 -1
  8. package/dist/services/constants.js +11 -1
  9. package/dist/services/constants.js.map +1 -1
  10. package/dist/services/core/Utils.js +21 -1
  11. package/dist/services/core/Utils.js.map +1 -1
  12. package/dist/services/core/aqm-reqs.js +7 -15
  13. package/dist/services/core/aqm-reqs.js.map +1 -1
  14. package/dist/services/core/constants.js +9 -1
  15. package/dist/services/core/constants.js.map +1 -1
  16. package/dist/services/core/websocket/WebSocketManager.js +17 -1
  17. package/dist/services/core/websocket/WebSocketManager.js.map +1 -1
  18. package/dist/types/services/ApiAiAssistant.d.ts +9 -0
  19. package/dist/types/services/constants.d.ts +9 -0
  20. package/dist/types/services/core/Utils.d.ts +8 -0
  21. package/dist/types/services/core/constants.d.ts +7 -0
  22. package/dist/webex.js +1 -1
  23. package/package.json +2 -2
  24. package/src/cc.ts +15 -2
  25. package/src/services/ApiAiAssistant.ts +24 -0
  26. package/src/services/WebCallingService.ts +16 -2
  27. package/src/services/ai-docs/services-spec.md +8 -1
  28. package/src/services/constants.ts +10 -0
  29. package/src/services/core/Utils.ts +24 -0
  30. package/src/services/core/ai-docs/core-spec.md +23 -13
  31. package/src/services/core/aqm-reqs.ts +6 -15
  32. package/src/services/core/constants.ts +8 -0
  33. package/src/services/core/websocket/WebSocketManager.ts +26 -2
  34. package/test/unit/spec/cc.ts +21 -0
  35. package/test/unit/spec/services/ApiAiAssistant.ts +13 -0
  36. package/test/unit/spec/services/WebCallingService.ts +38 -0
  37. package/test/unit/spec/services/core/Utils.ts +22 -0
  38. package/test/unit/spec/services/core/aqm-reqs.ts +29 -0
  39. package/test/unit/spec/services/core/websocket/WebSocketManager.ts +64 -14
  40. package/umd/contact-center.min.js +2 -2
  41. package/umd/contact-center.min.js.map +1 -1
@@ -108,6 +108,8 @@ Compatibility notes:
108
108
 
109
109
  Direct data/configuration and user-preference operations return authenticated REST responses. Enabled agent/task AQM operations, including preview-campaign accept/skip/remove, send authenticated HTTP requests but resolve or reject only after a matching WebSocket notification. Before delegating preview skip/remove, ContactCenter checks the task's campaign-disable flags and throws locally when the corresponding flag is `'true'`. TaskManager converts backend task events into Task instances and typed state-machine events. ContactCenter maps package-facing events through WebexPlugin `trigger` or its internal EventEmitter according to the published contract.
110
110
 
111
+ Inbound primary-WebSocket messages are mapped through `handleWebsocketMessage`, which emits only event names on the typed `CC_EVENTS`/`AGENT_EVENTS` allow-list. A server-controlled `eventData.data.type` that is not a known allow-listed constant is ignored and never emitted as an application event name.
112
+
111
113
  Durable agent, task, and configuration records remain remote-system owned. The package owns only in-memory profile/task/listener/cache/connection state.
112
114
 
113
115
  ### Agent Wellness Break
@@ -308,6 +310,7 @@ ContactCenter retains in-memory `agentConfig`, collaborator references, event li
308
310
  - Collaborators are initialized after host READY and before their use; `register()` must not be documented as their constructor boundary. Evidence: `src/cc.ts`.
309
311
  - AQM promises complete only from correlated WebSocket success/failure or timeout, not from HTTP acknowledgement. Evidence: `src/services/core/aqm-reqs.ts`.
310
312
  - `skipPreviewContact` checks `campaignPreviewSkipDisabled` and `removePreviewContact` checks `campaignPreviewRemoveDisabled` on the matching task. When the applicable value is `'true'`, ContactCenter throws before initiating an HTTP or WebSocket-correlated AQM operation; `acceptPreviewContact` has no equivalent pre-guard. Evidence: `src/cc.ts`.
313
+ - `handleWebsocketMessage` only re-emits event names that belong to the typed `CC_EVENTS`/`AGENT_EVENTS` allow-list; an untrusted `eventData.data.type` outside that allow-list is not emitted as an event name. Evidence: `src/cc.ts`.
311
314
  - ContactCenter owns automated relogin policy; ConnectionService owns transport-state detection/emission. Evidence: `src/cc.ts`, `src/services/core/websocket/connection-service.ts`.
312
315
  - Deregistration does not station-logout the agent. Evidence: `src/cc.ts`.
313
316
  - Published methods/types/events remain semver-sensitive through `src/index.ts`.
package/dist/cc.js CHANGED
@@ -40,6 +40,13 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
40
40
  * with Webex Contact Center features through the WebexSDK.
41
41
  */
42
42
 
43
+ /**
44
+ * Typed allow-list of server-controlled websocket event names this SDK re-emits verbatim.
45
+ * Guards against emitting an arbitrary/unknown `data.type` supplied by the websocket payload.
46
+ * @ignore
47
+ */
48
+ const CC_EVENT_ALLOW_LIST = new Set(Object.values(_types3.CC_EVENTS));
49
+
43
50
  /**
44
51
  * The main Contact Center plugin class that enables integration with Webex Contact Center.
45
52
  *
@@ -1276,8 +1283,9 @@ class ContactCenter extends _webexCore.WebexPlugin {
1276
1283
  */
1277
1284
  handleWebsocketMessage = event => {
1278
1285
  const eventData = JSON.parse(event);
1279
- // Re-emit all the events related to agent except keep-alives
1280
- if (!eventData.keepalive && eventData.data && eventData.data.type) {
1286
+ // Re-emit all the events related to agent except keep-alives. Only event names present in
1287
+ // the typed CC_EVENTS allow-list are emitted; unknown/server-injected types are ignored.
1288
+ if (!eventData.keepalive && eventData.data && eventData.data.type && CC_EVENT_ALLOW_LIST.has(eventData.data.type)) {
1281
1289
  // @ts-ignore
1282
1290
  this.emit(eventData.data.type, eventData.data);
1283
1291
  }