@webex/contact-center 3.12.0-next.73 → 3.12.0-next.74

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 (188) hide show
  1. package/AGENTS.md +438 -0
  2. package/ai-docs/README.md +131 -0
  3. package/ai-docs/RULES.md +455 -0
  4. package/ai-docs/patterns/event-driven-patterns.md +485 -0
  5. package/ai-docs/patterns/testing-patterns.md +480 -0
  6. package/ai-docs/patterns/typescript-patterns.md +365 -0
  7. package/ai-docs/templates/README.md +102 -0
  8. package/ai-docs/templates/documentation/create-agents-md.md +240 -0
  9. package/ai-docs/templates/documentation/create-architecture-md.md +295 -0
  10. package/ai-docs/templates/existing-service/bug-fix.md +254 -0
  11. package/ai-docs/templates/existing-service/feature-enhancement.md +450 -0
  12. package/ai-docs/templates/new-method/00-master.md +80 -0
  13. package/ai-docs/templates/new-method/01-requirements.md +232 -0
  14. package/ai-docs/templates/new-method/02-implementation.md +295 -0
  15. package/ai-docs/templates/new-method/03-tests.md +201 -0
  16. package/ai-docs/templates/new-method/04-validation.md +141 -0
  17. package/ai-docs/templates/new-service/00-master.md +109 -0
  18. package/ai-docs/templates/new-service/01-pre-questions.md +159 -0
  19. package/ai-docs/templates/new-service/02-code-generation.md +346 -0
  20. package/ai-docs/templates/new-service/03-integration.md +178 -0
  21. package/ai-docs/templates/new-service/04-test-generation.md +205 -0
  22. package/ai-docs/templates/new-service/05-validation.md +145 -0
  23. package/dist/cc.js +53 -38
  24. package/dist/cc.js.map +1 -1
  25. package/dist/config.js +6 -0
  26. package/dist/config.js.map +1 -1
  27. package/dist/constants.js +14 -1
  28. package/dist/constants.js.map +1 -1
  29. package/dist/index.js +13 -5
  30. package/dist/index.js.map +1 -1
  31. package/dist/metrics/behavioral-events.js +26 -0
  32. package/dist/metrics/behavioral-events.js.map +1 -1
  33. package/dist/metrics/constants.js +9 -3
  34. package/dist/metrics/constants.js.map +1 -1
  35. package/dist/services/ApiAiAssistant.js +74 -3
  36. package/dist/services/ApiAiAssistant.js.map +1 -1
  37. package/dist/services/config/Util.js +2 -2
  38. package/dist/services/config/Util.js.map +1 -1
  39. package/dist/services/config/types.js +25 -9
  40. package/dist/services/config/types.js.map +1 -1
  41. package/dist/services/core/Utils.js +74 -27
  42. package/dist/services/core/Utils.js.map +1 -1
  43. package/dist/services/core/websocket/WebSocketManager.js +2 -1
  44. package/dist/services/core/websocket/WebSocketManager.js.map +1 -1
  45. package/dist/services/core/websocket/types.js.map +1 -1
  46. package/dist/services/index.js +1 -1
  47. package/dist/services/index.js.map +1 -1
  48. package/dist/services/task/Task.js +688 -0
  49. package/dist/services/task/Task.js.map +1 -0
  50. package/dist/services/task/TaskFactory.js +45 -0
  51. package/dist/services/task/TaskFactory.js.map +1 -0
  52. package/dist/services/task/TaskManager.js +725 -612
  53. package/dist/services/task/TaskManager.js.map +1 -1
  54. package/dist/services/task/TaskUtils.js +162 -26
  55. package/dist/services/task/TaskUtils.js.map +1 -1
  56. package/dist/services/task/constants.js +6 -1
  57. package/dist/services/task/constants.js.map +1 -1
  58. package/dist/services/task/digital/Digital.js +77 -0
  59. package/dist/services/task/digital/Digital.js.map +1 -0
  60. package/dist/services/task/state-machine/TaskStateMachine.js +837 -0
  61. package/dist/services/task/state-machine/TaskStateMachine.js.map +1 -0
  62. package/dist/services/task/state-machine/actions.js +543 -0
  63. package/dist/services/task/state-machine/actions.js.map +1 -0
  64. package/dist/services/task/state-machine/constants.js +161 -0
  65. package/dist/services/task/state-machine/constants.js.map +1 -0
  66. package/dist/services/task/state-machine/guards.js +340 -0
  67. package/dist/services/task/state-machine/guards.js.map +1 -0
  68. package/dist/services/task/state-machine/index.js +53 -0
  69. package/dist/services/task/state-machine/index.js.map +1 -0
  70. package/dist/services/task/state-machine/types.js +54 -0
  71. package/dist/services/task/state-machine/types.js.map +1 -0
  72. package/dist/services/task/state-machine/uiControlsComputer.js +553 -0
  73. package/dist/services/task/state-machine/uiControlsComputer.js.map +1 -0
  74. package/dist/services/task/taskDataNormalizer.js +99 -0
  75. package/dist/services/task/taskDataNormalizer.js.map +1 -0
  76. package/dist/services/task/types.js +168 -16
  77. package/dist/services/task/types.js.map +1 -1
  78. package/dist/services/task/voice/Voice.js +1042 -0
  79. package/dist/services/task/voice/Voice.js.map +1 -0
  80. package/dist/services/task/voice/WebRTC.js +149 -0
  81. package/dist/services/task/voice/WebRTC.js.map +1 -0
  82. package/dist/types/cc.d.ts +19 -18
  83. package/dist/types/config.d.ts +6 -0
  84. package/dist/types/constants.d.ts +14 -1
  85. package/dist/types/index.d.ts +11 -5
  86. package/dist/types/metrics/constants.d.ts +7 -1
  87. package/dist/types/services/ApiAiAssistant.d.ts +11 -3
  88. package/dist/types/services/config/types.d.ts +113 -9
  89. package/dist/types/services/core/Utils.d.ts +23 -10
  90. package/dist/types/services/core/websocket/WebSocketManager.d.ts +1 -0
  91. package/dist/types/services/core/websocket/types.d.ts +1 -1
  92. package/dist/types/services/index.d.ts +1 -1
  93. package/dist/types/services/task/Task.d.ts +157 -0
  94. package/dist/types/services/task/TaskFactory.d.ts +12 -0
  95. package/dist/types/services/task/TaskUtils.d.ts +46 -2
  96. package/dist/types/services/task/constants.d.ts +5 -0
  97. package/dist/types/services/task/digital/Digital.d.ts +22 -0
  98. package/dist/types/services/task/state-machine/TaskStateMachine.d.ts +1144 -0
  99. package/dist/types/services/task/state-machine/actions.d.ts +10 -0
  100. package/dist/types/services/task/state-machine/constants.d.ts +107 -0
  101. package/dist/types/services/task/state-machine/guards.d.ts +90 -0
  102. package/dist/types/services/task/state-machine/index.d.ts +13 -0
  103. package/dist/types/services/task/state-machine/types.d.ts +267 -0
  104. package/dist/types/services/task/state-machine/uiControlsComputer.d.ts +9 -0
  105. package/dist/types/services/task/taskDataNormalizer.d.ts +10 -0
  106. package/dist/types/services/task/types.d.ts +551 -78
  107. package/dist/types/services/task/voice/Voice.d.ts +184 -0
  108. package/dist/types/services/task/voice/WebRTC.d.ts +53 -0
  109. package/dist/types/types.d.ts +92 -0
  110. package/dist/types/webex.d.ts +1 -0
  111. package/dist/types.js +85 -0
  112. package/dist/types.js.map +1 -1
  113. package/dist/webex.js +14 -2
  114. package/dist/webex.js.map +1 -1
  115. package/package.json +15 -12
  116. package/src/cc.ts +63 -43
  117. package/src/config.ts +6 -0
  118. package/src/constants.ts +14 -1
  119. package/src/index.ts +14 -5
  120. package/src/metrics/ai-docs/AGENTS.md +348 -0
  121. package/src/metrics/ai-docs/ARCHITECTURE.md +336 -0
  122. package/src/metrics/behavioral-events.ts +28 -0
  123. package/src/metrics/constants.ts +9 -4
  124. package/src/services/ApiAiAssistant.ts +104 -3
  125. package/src/services/agent/ai-docs/AGENTS.md +238 -0
  126. package/src/services/agent/ai-docs/ARCHITECTURE.md +302 -0
  127. package/src/services/ai-docs/AGENTS.md +384 -0
  128. package/src/services/config/Util.ts +2 -2
  129. package/src/services/config/ai-docs/AGENTS.md +253 -0
  130. package/src/services/config/ai-docs/ARCHITECTURE.md +424 -0
  131. package/src/services/config/types.ts +116 -10
  132. package/src/services/core/Utils.ts +85 -34
  133. package/src/services/core/ai-docs/AGENTS.md +379 -0
  134. package/src/services/core/ai-docs/ARCHITECTURE.md +696 -0
  135. package/src/services/core/websocket/WebSocketManager.ts +2 -0
  136. package/src/services/core/websocket/types.ts +1 -1
  137. package/src/services/index.ts +1 -1
  138. package/src/services/task/Task.ts +837 -0
  139. package/src/services/task/TaskFactory.ts +55 -0
  140. package/src/services/task/TaskManager.ts +738 -697
  141. package/src/services/task/TaskUtils.ts +205 -25
  142. package/src/services/task/ai-docs/AGENTS.md +455 -0
  143. package/src/services/task/ai-docs/ARCHITECTURE.md +585 -0
  144. package/src/services/task/constants.ts +5 -0
  145. package/src/services/task/digital/Digital.ts +95 -0
  146. package/src/services/task/state-machine/TaskStateMachine.ts +1077 -0
  147. package/src/services/task/state-machine/actions.ts +685 -0
  148. package/src/services/task/state-machine/ai-docs/AGENTS.md +495 -0
  149. package/src/services/task/state-machine/ai-docs/ARCHITECTURE.md +1135 -0
  150. package/src/services/task/state-machine/constants.ts +172 -0
  151. package/src/services/task/state-machine/guards.ts +406 -0
  152. package/src/services/task/state-machine/index.ts +28 -0
  153. package/src/services/task/state-machine/types.ts +241 -0
  154. package/src/services/task/state-machine/uiControlsComputer.ts +867 -0
  155. package/src/services/task/taskDataNormalizer.ts +137 -0
  156. package/src/services/task/types.ts +654 -85
  157. package/src/services/task/voice/Voice.ts +1267 -0
  158. package/src/services/task/voice/WebRTC.ts +187 -0
  159. package/src/types.ts +112 -1
  160. package/src/utils/AGENTS.md +276 -0
  161. package/src/webex.js +2 -0
  162. package/test/unit/spec/cc.ts +133 -3
  163. package/test/unit/spec/logger-proxy.ts +70 -0
  164. package/test/unit/spec/services/ApiAiAssistant.ts +122 -17
  165. package/test/unit/spec/services/WebCallingService.ts +7 -1
  166. package/test/unit/spec/services/config/index.ts +27 -27
  167. package/test/unit/spec/services/core/Utils.ts +335 -1
  168. package/test/unit/spec/services/core/websocket/WebSocketManager.ts +66 -40
  169. package/test/unit/spec/services/task/AutoWrapup.ts +63 -0
  170. package/test/unit/spec/services/task/Task.ts +477 -0
  171. package/test/unit/spec/services/task/TaskFactory.ts +62 -0
  172. package/test/unit/spec/services/task/TaskManager.ts +821 -1936
  173. package/test/unit/spec/services/task/TaskUtils.ts +206 -0
  174. package/test/unit/spec/services/task/digital/Digital.ts +105 -0
  175. package/test/unit/spec/services/task/state-machine/TaskStateMachine.ts +1825 -0
  176. package/test/unit/spec/services/task/state-machine/guards.ts +479 -0
  177. package/test/unit/spec/services/task/state-machine/types.ts +18 -0
  178. package/test/unit/spec/services/task/state-machine/uiControlsComputer.ts +2020 -0
  179. package/test/unit/spec/services/task/taskTestUtils.ts +87 -0
  180. package/test/unit/spec/services/task/voice/Voice.ts +631 -0
  181. package/test/unit/spec/services/task/voice/WebRTC.ts +235 -0
  182. package/umd/contact-center.min.js +2 -2
  183. package/umd/contact-center.min.js.map +1 -1
  184. package/dist/services/task/index.js +0 -1530
  185. package/dist/services/task/index.js.map +0 -1
  186. package/dist/types/services/task/index.d.ts +0 -650
  187. package/src/services/task/index.ts +0 -1806
  188. package/test/unit/spec/services/task/index.ts +0 -2205
package/dist/webex.js CHANGED
@@ -3,6 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ var _exportNames = {};
6
7
  exports.default = void 0;
7
8
  var _merge = _interopRequireDefault(require("lodash/merge"));
8
9
  var _webexCore = _interopRequireDefault(require("@webex/webex-core"));
@@ -11,7 +12,18 @@ require("@webex/plugin-authorization");
11
12
  require("@webex/internal-plugin-mercury");
12
13
  require("@webex/plugin-logger");
13
14
  require("@webex/internal-plugin-support");
14
- require("./index");
15
+ var _index = require("./index");
16
+ Object.keys(_index).forEach(function (key) {
17
+ if (key === "default" || key === "__esModule") return;
18
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
19
+ if (key in exports && exports[key] === _index[key]) return;
20
+ Object.defineProperty(exports, key, {
21
+ enumerable: true,
22
+ get: function () {
23
+ return _index[key];
24
+ }
25
+ });
26
+ });
15
27
  var _webexConfig = _interopRequireDefault(require("./webex-config"));
16
28
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
17
29
  /**
@@ -29,7 +41,7 @@ if (!global.Buffer) {
29
41
  */
30
42
  const Webex = _webexCore.default.extend({
31
43
  webex: true,
32
- version: `3.12.0-next.73`
44
+ version: `3.12.0-next.74`
33
45
  });
34
46
 
35
47
  /**
package/dist/webex.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["_merge","_interopRequireDefault","require","_webexCore","_safeBuffer","_webexConfig","e","__esModule","default","global","Buffer","Webex","WebexCore","extend","webex","version","init","attrs","config","merge","_default","exports"],"sources":["webex.js"],"sourcesContent":["import merge from 'lodash/merge';\nimport WebexCore from '@webex/webex-core';\nimport {Buffer} from 'safe-buffer';\nimport '@webex/plugin-authorization';\nimport '@webex/internal-plugin-mercury';\nimport '@webex/plugin-logger';\nimport '@webex/internal-plugin-support';\n\nimport './index';\n\nimport config from './webex-config';\n\n/**\n * Ensures global Buffer is defined, which is required for SDK functionality in some environments.\n * @ignore\n */\nif (!global.Buffer) {\n global.Buffer = Buffer;\n}\n\n/**\n * Webex SDK class extended from the core SDK.\n * Includes custom configuration and plugin registration for CC (Contact Center) use cases.\n * @ignore\n */\nconst Webex = WebexCore.extend({\n webex: true,\n version: PACKAGE_VERSION,\n});\n\n/**\n * Initializes a new Webex instance with merged configuration.\n *\n * @param {Object} [attrs={}] - Initialization attributes.\n * @param {Object} [attrs.config] - Optional custom config to override defaults.\n * @param {Object} [attrs.config.logger] - Logging configuration.\n * @param {string} [attrs.config.logger.level='info'] - Logging level (e.g., 'debug', 'info').\n * @param {string} [attrs.config.logger.bufferLogLevel='log'] - Log buffering level for log uploads.\n * @param {Object} [attrs.config.cc] - Contact Center (CC) specific configurations.\n * @param {boolean} [attrs.config.cc.allowMultiLogin=false] - Whether to allow multiple logins.\n * @param {boolean} [attrs.config.cc.allowAutomatedRelogin=true] - Whether to allow automated re-login.\n * @param {string} [attrs.config.cc.clientType='WebexCCSDK'] - Type of the client.\n * @param {boolean} [attrs.config.cc.isKeepAliveEnabled=false] - Whether to enable keep-alive functionality.\n * @param {boolean} [attrs.config.cc.force=true] - Whether to force specific CC configurations.\n * @param {Object} [attrs.config.cc.metrics] - Metrics configuration for CC.\n * @param {string} [attrs.config.cc.metrics.clientName='WEBEX_JS_SDK'] - Metrics client name.\n * @param {string} [attrs.config.cc.metrics.clientType='WebexCCSDK'] - Metrics client type.\n * @returns {Webex} A new Webex instance.\n *\n * @see {@link https://developer.webex.com/meeting/docs/sdks/webex-meetings-sdk-web-quickstart#webex-object-attribute-reference} - Webex Object Attribute Reference for SDK Configuration.\n *\n * This configuration merges the default `webex-config` with any custom configuration provided as `attrs.config`.\n * The merged configuration governs various SDK behaviors, such as authorization, logging, and CC-specific settings.\n *\n * @example <caption>Basic Usage</caption>\n * import Webex from '@webex/contact-center';\n *\n * // Initialize Webex SDK with default configuration\n * const webex = Webex.init();\n *\n * @example <caption>Custom Configuration</caption>\n * import Webex from '@webex/contact-center';\n *\n * const customConfig = {\n * logger: {\n * level: 'debug', // Enable debug logging\n * bufferLogLevel: 'log', // Used for upload logs\n * },\n * credentials: {\n * client_id: 'your-client-id', // Replace with your Webex application's client ID\n * client_secret: 'your-client-secret', // Replace with your Webex application's client secret\n * redirect_uri: 'https://your-redirect-uri', // Replace with your app's redirect URI\n * },\n * cc: {\n * allowMultiLogin: false, // Disallow multiple logins\n * allowAutomatedRelogin: true, // Enable automated re-login\n * clientType: 'WebexCCSDK', // Specify the Contact Center client type\n * isKeepAliveEnabled: false, // Disable keep-alive functionality\n * force: true, // Force CC-specific configurations\n * metrics: {\n * clientName: 'WEBEX_JS_SDK', // Metrics client name\n * clientType: 'WebexCCSDK', // Metrics client type\n * },\n * },\n * };\n *\n * // Initialize Webex SDK with custom configuration\n * const webex = Webex.init({ config: customConfig });\n */\nWebex.init = function init(attrs = {}) {\n attrs.config = merge({}, config, attrs.config);\n\n return new Webex(attrs);\n};\n\nexport default Webex;\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,WAAA,GAAAF,OAAA;AACAA,OAAA;AACAA,OAAA;AACAA,OAAA;AACAA,OAAA;AAEAA,OAAA;AAEA,IAAAG,YAAA,GAAAJ,sBAAA,CAAAC,OAAA;AAAoC,SAAAD,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEpC;AACA;AACA;AACA;AACA,IAAI,CAACG,MAAM,CAACC,MAAM,EAAE;EAClBD,MAAM,CAACC,MAAM,GAAGA,kBAAM;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAMC,KAAK,GAAGC,kBAAS,CAACC,MAAM,CAAC;EAC7BC,KAAK,EAAE,IAAI;EACXC,OAAO;AACT,CAAC,CAAC;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACAJ,KAAK,CAACK,IAAI,GAAG,SAASA,IAAIA,CAACC,KAAK,GAAG,CAAC,CAAC,EAAE;EACrCA,KAAK,CAACC,MAAM,GAAG,IAAAC,cAAK,EAAC,CAAC,CAAC,EAAED,oBAAM,EAAED,KAAK,CAACC,MAAM,CAAC;EAE9C,OAAO,IAAIP,KAAK,CAACM,KAAK,CAAC;AACzB,CAAC;AAAC,IAAAG,QAAA,GAAAC,OAAA,CAAAb,OAAA,GAEaG,KAAK","ignoreList":[]}
1
+ {"version":3,"names":["_merge","_interopRequireDefault","require","_webexCore","_safeBuffer","_index","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_webexConfig","e","__esModule","default","global","Buffer","Webex","WebexCore","extend","webex","version","init","attrs","config","merge","_default"],"sources":["webex.js"],"sourcesContent":["import merge from 'lodash/merge';\nimport WebexCore from '@webex/webex-core';\nimport {Buffer} from 'safe-buffer';\nimport '@webex/plugin-authorization';\nimport '@webex/internal-plugin-mercury';\nimport '@webex/plugin-logger';\nimport '@webex/internal-plugin-support';\n\nimport './index';\n\nimport config from './webex-config';\n\nexport * from './index';\n\n/**\n * Ensures global Buffer is defined, which is required for SDK functionality in some environments.\n * @ignore\n */\nif (!global.Buffer) {\n global.Buffer = Buffer;\n}\n\n/**\n * Webex SDK class extended from the core SDK.\n * Includes custom configuration and plugin registration for CC (Contact Center) use cases.\n * @ignore\n */\nconst Webex = WebexCore.extend({\n webex: true,\n version: PACKAGE_VERSION,\n});\n\n/**\n * Initializes a new Webex instance with merged configuration.\n *\n * @param {Object} [attrs={}] - Initialization attributes.\n * @param {Object} [attrs.config] - Optional custom config to override defaults.\n * @param {Object} [attrs.config.logger] - Logging configuration.\n * @param {string} [attrs.config.logger.level='info'] - Logging level (e.g., 'debug', 'info').\n * @param {string} [attrs.config.logger.bufferLogLevel='log'] - Log buffering level for log uploads.\n * @param {Object} [attrs.config.cc] - Contact Center (CC) specific configurations.\n * @param {boolean} [attrs.config.cc.allowMultiLogin=false] - Whether to allow multiple logins.\n * @param {boolean} [attrs.config.cc.allowAutomatedRelogin=true] - Whether to allow automated re-login.\n * @param {string} [attrs.config.cc.clientType='WebexCCSDK'] - Type of the client.\n * @param {boolean} [attrs.config.cc.isKeepAliveEnabled=false] - Whether to enable keep-alive functionality.\n * @param {boolean} [attrs.config.cc.force=true] - Whether to force specific CC configurations.\n * @param {Object} [attrs.config.cc.metrics] - Metrics configuration for CC.\n * @param {string} [attrs.config.cc.metrics.clientName='WEBEX_JS_SDK'] - Metrics client name.\n * @param {string} [attrs.config.cc.metrics.clientType='WebexCCSDK'] - Metrics client type.\n * @returns {Webex} A new Webex instance.\n *\n * @see {@link https://developer.webex.com/meeting/docs/sdks/webex-meetings-sdk-web-quickstart#webex-object-attribute-reference} - Webex Object Attribute Reference for SDK Configuration.\n *\n * This configuration merges the default `webex-config` with any custom configuration provided as `attrs.config`.\n * The merged configuration governs various SDK behaviors, such as authorization, logging, and CC-specific settings.\n *\n * @example <caption>Basic Usage</caption>\n * import Webex from '@webex/contact-center';\n *\n * // Initialize Webex SDK with default configuration\n * const webex = Webex.init();\n *\n * @example <caption>Custom Configuration</caption>\n * import Webex from '@webex/contact-center';\n *\n * const customConfig = {\n * logger: {\n * level: 'debug', // Enable debug logging\n * bufferLogLevel: 'log', // Used for upload logs\n * },\n * credentials: {\n * client_id: 'your-client-id', // Replace with your Webex application's client ID\n * client_secret: 'your-client-secret', // Replace with your Webex application's client secret\n * redirect_uri: 'https://your-redirect-uri', // Replace with your app's redirect URI\n * },\n * cc: {\n * allowMultiLogin: false, // Disallow multiple logins\n * allowAutomatedRelogin: true, // Enable automated re-login\n * clientType: 'WebexCCSDK', // Specify the Contact Center client type\n * isKeepAliveEnabled: false, // Disable keep-alive functionality\n * force: true, // Force CC-specific configurations\n * metrics: {\n * clientName: 'WEBEX_JS_SDK', // Metrics client name\n * clientType: 'WebexCCSDK', // Metrics client type\n * },\n * },\n * };\n *\n * // Initialize Webex SDK with custom configuration\n * const webex = Webex.init({ config: customConfig });\n */\nWebex.init = function init(attrs = {}) {\n attrs.config = merge({}, config, attrs.config);\n\n return new Webex(attrs);\n};\n\nexport default Webex;\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,WAAA,GAAAF,OAAA;AACAA,OAAA;AACAA,OAAA;AACAA,OAAA;AACAA,OAAA;AAEA,IAAAG,MAAA,GAAAH,OAAA;AAIAI,MAAA,CAAAC,IAAA,CAAAF,MAAA,EAAAG,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAJ,MAAA,CAAAI,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAZ,MAAA,CAAAI,GAAA;IAAA;EAAA;AAAA;AAFA,IAAAS,YAAA,GAAAjB,sBAAA,CAAAC,OAAA;AAAoC,SAAAD,uBAAAkB,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAIpC;AACA;AACA;AACA;AACA,IAAI,CAACG,MAAM,CAACC,MAAM,EAAE;EAClBD,MAAM,CAACC,MAAM,GAAGA,kBAAM;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAMC,KAAK,GAAGC,kBAAS,CAACC,MAAM,CAAC;EAC7BC,KAAK,EAAE,IAAI;EACXC,OAAO;AACT,CAAC,CAAC;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACAJ,KAAK,CAACK,IAAI,GAAG,SAASA,IAAIA,CAACC,KAAK,GAAG,CAAC,CAAC,EAAE;EACrCA,KAAK,CAACC,MAAM,GAAG,IAAAC,cAAK,EAAC,CAAC,CAAC,EAAED,oBAAM,EAAED,KAAK,CAACC,MAAM,CAAC;EAE9C,OAAO,IAAIP,KAAK,CAACM,KAAK,CAAC;AACzB,CAAC;AAAC,IAAAG,QAAA,GAAAnB,OAAA,CAAAO,OAAA,GAEaG,KAAK","ignoreList":[]}
package/package.json CHANGED
@@ -33,7 +33,7 @@
33
33
  },
34
34
  "scripts": {
35
35
  "build:src": "webex-legacy-tools build -dest \"./dist\" -src \"./src\" -js -ts -maps && yarn build",
36
- "build": " yarn workspace @webex/calling run build:src && yarn run -T tsc --declaration true --declarationDir ./dist/types",
36
+ "build": " yarn workspace @webex/calling run build:src && yarn exec tsc --declaration true --declarationDir ./dist/types",
37
37
  "fix:lint": "eslint 'src/**/*.ts' --fix",
38
38
  "build:docs": "typedoc --out ../../../docs/wxcc",
39
39
  "fix:prettier": "prettier \"src/**/*.ts\" --write",
@@ -45,15 +45,17 @@
45
45
  },
46
46
  "dependencies": {
47
47
  "@types/platform": "1.3.4",
48
- "@webex/calling": "3.12.0-next.64",
49
- "@webex/internal-plugin-mercury": "3.12.0-next.26",
50
- "@webex/internal-plugin-metrics": "3.12.0-next.25",
51
- "@webex/internal-plugin-support": "3.12.0-next.27",
52
- "@webex/plugin-authorization": "3.12.0-next.25",
53
- "@webex/plugin-logger": "3.12.0-next.25",
54
- "@webex/webex-core": "3.12.0-next.25",
48
+ "@webex/calling": "3.12.0-next.65",
49
+ "@webex/internal-plugin-mercury": "3.12.0-next.27",
50
+ "@webex/internal-plugin-metrics": "3.12.0-next.26",
51
+ "@webex/internal-plugin-support": "3.12.0-next.28",
52
+ "@webex/plugin-authorization": "3.12.0-next.26",
53
+ "@webex/plugin-logger": "3.12.0-next.26",
54
+ "@webex/webex-core": "3.12.0-next.26",
55
55
  "jest-html-reporters": "3.0.11",
56
- "lodash": "^4.17.21"
56
+ "lodash": "^4.17.21",
57
+ "uuid": "^3.3.2",
58
+ "xstate": "5.24.0"
57
59
  },
58
60
  "devDependencies": {
59
61
  "@babel/core": "^7.22.11",
@@ -65,7 +67,8 @@
65
67
  "@webex/eslint-config-legacy": "0.0.0",
66
68
  "@webex/jest-config-legacy": "0.0.0",
67
69
  "@webex/legacy-tools": "0.0.0",
68
- "@webex/test-helper-mock-webex": "3.12.0-next.4",
70
+ "@webex/test-helper-mock-webex": "3.12.0-next.5",
71
+ "@xstate/inspect": "^0.8.0",
69
72
  "eslint": "^8.24.0",
70
73
  "eslint-config-airbnb-base": "15.0.0",
71
74
  "eslint-config-prettier": "8.3.0",
@@ -78,7 +81,7 @@
78
81
  "jest-junit": "13.0.0",
79
82
  "prettier": "2.5.1",
80
83
  "typedoc": "^0.25.0",
81
- "typescript": "4.9.5"
84
+ "typescript": "5.4.5"
82
85
  },
83
- "version": "3.12.0-next.73"
86
+ "version": "3.12.0-next.74"
84
87
  }
package/src/cc.ts CHANGED
@@ -25,6 +25,7 @@ import {
25
25
  UploadLogsResponse,
26
26
  UpdateDeviceTypeResponse,
27
27
  GenericError,
28
+ ConfigFlags,
28
29
  } from './types';
29
30
  import {
30
31
  READY,
@@ -325,7 +326,7 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
325
326
  * });
326
327
  * ```
327
328
  */
328
- private queue: Queue;
329
+ public queue: Queue;
329
330
 
330
331
  /**
331
332
  * API instance for AI Assistant operations such as transcript controls.
@@ -378,7 +379,8 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
378
379
  this.apiAIAssistant,
379
380
  this.services.contact,
380
381
  this.webCallingService,
381
- this.services.webSocketManager
382
+ this.services.webSocketManager,
383
+ this.services.rtdWebSocketManager
382
384
  );
383
385
  this.incomingTaskListener();
384
386
 
@@ -411,6 +413,16 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
411
413
  this.trigger(TASK_EVENTS.TASK_HYDRATE, task);
412
414
  };
413
415
 
416
+ /**
417
+ * Handles multi-login hydrate events for SDK instances without Mobius registration
418
+ * @private
419
+ * @param {ITask} task The task object associated with the multi-login hydrate
420
+ */
421
+ private handleTaskMultiLoginHydrate = (task: ITask) => {
422
+ // @ts-ignore
423
+ this.trigger(TASK_EVENTS.TASK_MULTI_LOGIN_HYDRATE, task);
424
+ };
425
+
414
426
  /**
415
427
  * Handles task merged events when tasks are combined eg: EPDN merge/transfer
416
428
  * @private
@@ -431,18 +443,8 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
431
443
  this.trigger(TASK_EVENTS.TASK_CAMPAIGN_PREVIEW_RESERVATION, task);
432
444
  };
433
445
 
434
- /**
435
- * Handles multi-login hydrate events emitted when browser login accepts an incoming call.
436
- * @private
437
- * @param {ITask} task The task object associated with multi-login hydrate
438
- */
439
- private handleTaskMultiLoginHydrate = (task: ITask) => {
440
- // @ts-ignore
441
- this.trigger(TASK_EVENTS.TASK_MULTI_LOGIN_HYDRATE, task);
442
- };
443
-
444
- private handleRTDWebsocketMessage = (payload: string) => {
445
- this.taskManager.handleRealtimeWebsocketEvent(payload);
446
+ private handleRTDWebsocketMessage = (event: string) => {
447
+ this.taskManager.handleRealtimeWebsocketEvent(event);
446
448
  };
447
449
 
448
450
  /**
@@ -453,8 +455,8 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
453
455
  private incomingTaskListener() {
454
456
  this.taskManager.on(TASK_EVENTS.TASK_INCOMING, this.handleIncomingTask);
455
457
  this.taskManager.on(TASK_EVENTS.TASK_HYDRATE, this.handleTaskHydrate);
456
- this.taskManager.on(TASK_EVENTS.TASK_MERGED, this.handleTaskMerged);
457
458
  this.taskManager.on(TASK_EVENTS.TASK_MULTI_LOGIN_HYDRATE, this.handleTaskMultiLoginHydrate);
459
+ this.taskManager.on(TASK_EVENTS.TASK_MERGED, this.handleTaskMerged);
458
460
  this.taskManager.on(
459
461
  TASK_EVENTS.TASK_CAMPAIGN_PREVIEW_RESERVATION,
460
462
  this.handleCampaignPreviewReservation
@@ -619,6 +621,9 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
619
621
  if (!this.services.webSocketManager.isSocketClosed) {
620
622
  this.services.webSocketManager.close(false, 'Unregistering the SDK');
621
623
  }
624
+ if (this.services.rtdWebSocketManager && !this.services.rtdWebSocketManager.isSocketClosed) {
625
+ this.services.rtdWebSocketManager.close(false, 'Unregistering the SDK');
626
+ }
622
627
 
623
628
  if (this.services.rtdWebSocketManager && !this.services.rtdWebSocketManager.isSocketClosed) {
624
629
  this.services.rtdWebSocketManager.close(false, 'Unregistering the RTD websocket');
@@ -737,30 +742,6 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
737
742
  }
738
743
  }
739
744
 
740
- /**
741
- * Checks whether WebRTC registration should be skipped by config.
742
- * @returns {boolean}
743
- * @private
744
- */
745
- private isWebRTCRegistrationDisabled(): boolean {
746
- return this.$config?.disableWebRTCRegistration === true;
747
- }
748
-
749
- /**
750
- * Validates contact-center plugin configuration before service initialization
751
- * @private
752
- */
753
- private validatePluginConfig(): void {
754
- if (
755
- this.$config?.disableWebRTCRegistration === true &&
756
- this.$config?.allowMultiLogin === false
757
- ) {
758
- throw new Error(
759
- 'Invalid Contact Center configuration: disableWebRTCRegistration cannot be true when allowMultiLogin is false. Enable allowMultiLogin or allow WebRTC registration so an SDK instance can receive Mobius/WebRTC task events.'
760
- );
761
- }
762
- }
763
-
764
745
  /**
765
746
  * Connects to the websocket and fetches the agent profile
766
747
  * @returns {Promise<Profile>} Agent profile information
@@ -788,19 +769,34 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
788
769
  method: METHODS.CONNECT_WEBSOCKET,
789
770
  });
790
771
 
772
+ const configFlags: ConfigFlags = {
773
+ isEndTaskEnabled: this.agentConfig.isEndTaskEnabled,
774
+ isEndConsultEnabled: this.agentConfig.isEndConsultEnabled,
775
+ webRtcEnabled: this.agentConfig.webRtcEnabled,
776
+ autoWrapup: this.agentConfig.wrapUpData?.wrapUpProps?.autoWrapup ?? false,
777
+ aiFeature: this.agentConfig.aiFeature,
778
+ };
779
+ this.taskManager.setConfigFlags(configFlags);
791
780
  // TODO: Make profile a singleton to make it available throughout app/sdk so we dont need to inject info everywhere
792
781
  this.taskManager.setWrapupData(this.agentConfig.wrapUpData);
793
782
  this.taskManager.setAgentId(this.agentConfig.agentId);
794
783
  this.taskManager.setWebRtcEnabled(this.agentConfig.webRtcEnabled);
795
784
  this.apiAIAssistant.setAIFeatureFlags(this.agentConfig.aiFeature);
796
785
 
797
- if (this.agentConfig.aiFeature?.realtimeTranscripts?.enable) {
798
- LoggerProxy.log('Connecting to RTD websocket', {
786
+ /**
787
+ * RTD websocket currently supports realtime transcripts and suggested responses.
788
+ * Extend this condition when additional AI RTD features are introduced.
789
+ */
790
+ if (
791
+ this.agentConfig.aiFeature?.realtimeTranscripts?.enable ||
792
+ this.agentConfig.aiFeature?.suggestedResponses?.enable
793
+ ) {
794
+ LoggerProxy.info('Connecting to RTD websocket', {
799
795
  module: CC_FILE,
800
796
  method: METHODS.CONNECT_WEBSOCKET,
801
797
  });
802
798
 
803
- await this.services.rtdWebSocketManager
799
+ this.services.rtdWebSocketManager
804
800
  .initWebSocket({
805
801
  body: this.getConnectionConfig(),
806
802
  resource: RTD_SUBSCRIBE_API,
@@ -813,7 +809,7 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
813
809
  this.services.rtdWebSocketManager.on('message', this.handleRTDWebsocketMessage);
814
810
  })
815
811
  .catch((error) => {
816
- LoggerProxy.error(`Error during RTD websocket setup: ${error}`, {
812
+ LoggerProxy.error(`Error connecting to RTD websocket ${error}`, {
817
813
  module: CC_FILE,
818
814
  method: METHODS.CONNECT_WEBSOCKET,
819
815
  });
@@ -1324,6 +1320,30 @@ export default class ContactCenter extends WebexPlugin implements IContactCenter
1324
1320
  }
1325
1321
  };
1326
1322
 
1323
+ /**
1324
+ * Checks whether Mobius/WebRTC registration should be skipped by config
1325
+ * @returns {boolean} True when browser WebRTC registration is disabled
1326
+ * @private
1327
+ */
1328
+ private isWebRTCRegistrationDisabled(): boolean {
1329
+ return this.$config?.disableWebRTCRegistration === true;
1330
+ }
1331
+
1332
+ /**
1333
+ * Validates contact-center plugin configuration before service initialization
1334
+ * @private
1335
+ */
1336
+ private validatePluginConfig(): void {
1337
+ if (
1338
+ this.$config?.disableWebRTCRegistration === true &&
1339
+ this.$config?.allowMultiLogin === false
1340
+ ) {
1341
+ throw new Error(
1342
+ 'Invalid Contact Center configuration: disableWebRTCRegistration cannot be true when allowMultiLogin is false. Enable allowMultiLogin or allow WebRTC registration so an SDK instance can receive Mobius/WebRTC task events.'
1343
+ );
1344
+ }
1345
+ }
1346
+
1327
1347
  /**
1328
1348
  * Initializes event listeners for the Contact Center service
1329
1349
  * Sets up handlers for connection state changes and other core events
package/src/config.ts CHANGED
@@ -25,6 +25,12 @@ export default {
25
25
  * @default true
26
26
  */
27
27
  allowAutomatedRelogin: true,
28
+ /**
29
+ * Whether to skip Mobius/WebRTC registration for browser login flows.
30
+ * @type {boolean}
31
+ * @default false
32
+ */
33
+ disableWebRTCRegistration: false,
28
34
  /**
29
35
  * The type of client making the connection.
30
36
  * @type {string}
package/src/constants.ts CHANGED
@@ -42,17 +42,30 @@ export const METHODS = {
42
42
  HANDLE_DEVICE_TYPE: 'handleDeviceType',
43
43
  START_OUTDIAL: 'startOutdial',
44
44
  GET_QUEUES: 'getQueues',
45
- GET_OUTDIAL_ANI_ENTRIES: 'getOutdialAniEntries',
46
45
  UPLOAD_LOGS: 'uploadLogs',
47
46
  UPDATE_AGENT_PROFILE: 'updateAgentProfile',
48
47
  GET_DEVICE_ID: 'getDeviceId',
49
48
  HANDLE_INCOMING_TASK: 'handleIncomingTask',
50
49
  HANDLE_TASK_HYDRATE: 'handleTaskHydrate',
51
50
  INCOMING_TASK_LISTENER: 'incomingTaskListener',
51
+ ACCEPT: 'accept',
52
+ REJECT: 'decline',
53
+ HOLD: 'hold',
54
+ RESUME: 'resume',
55
+ HOLD_RESUME: 'holdResume',
56
+ TRANSFER_CALL: 'transfer',
57
+ CONSULT_TRANSFER: 'consultTransfer',
58
+ CONSULT_CONFERENCE: 'consultConference',
59
+ EXIT_CONFERENCE: 'exitConference',
60
+ TRANSFER_CONFERENCE: 'transferConference',
61
+ TOGGLE_MUTE: 'toggleMute',
62
+ COMPLETE_TRANSFER: 'completeTransfer',
63
+ GET_OUTDIAL_ANI_ENTRIES: 'getOutdialAniEntries',
52
64
  ACCEPT_PREVIEW_CONTACT: 'acceptPreviewContact',
53
65
  SKIP_PREVIEW_CONTACT: 'skipPreviewContact',
54
66
  REMOVE_PREVIEW_CONTACT: 'removePreviewContact',
55
67
  GET_BASE_URL: 'getBaseUrl',
56
68
  SEND_EVENT: 'sendEvent',
69
+ GET_SUGGESTED_RESPONSE: 'getSuggestedResponse',
57
70
  FETCH_HISTORIC_TRANSCRIPTS: 'fetchHistoricTranscripts',
58
71
  };
package/src/index.ts CHANGED
@@ -13,18 +13,17 @@ import ContactCenter from './cc';
13
13
  */
14
14
  export {default as ContactCenter} from './cc';
15
15
 
16
- // Service exports
17
16
  /**
18
- * Task class represents a contact center task that can be managed by an agent
17
+ * Agent routing service for Contact Center operations
19
18
  * @category Services
20
19
  */
21
- export {default as Task} from './services/task';
20
+ export {default as routingAgent} from './services/agent';
22
21
 
23
22
  /**
24
- * Agent routing service for Contact Center operations
23
+ * Task class represents a contact center task that can be managed by an agent
25
24
  * @category Services
26
25
  */
27
- export {default as routingAgent} from './services/agent';
26
+ export {default as Task} from './services/task/Task';
28
27
 
29
28
  // API exports (AddressBook is public, EntryPoint and Queue are accessed via cc wrappers)
30
29
  export {default as AddressBook} from './services/AddressBook';
@@ -125,6 +124,8 @@ export type {
125
124
  /** Task related types */
126
125
  export type {
127
126
  AgentContact,
127
+ /** Event emitter contract for task consumers (no @types/node needed) */
128
+ IEventEmitter,
128
129
  /** Task interface */
129
130
  ITask,
130
131
  Interaction,
@@ -139,8 +140,16 @@ export type {
139
140
  TransferPayLoad,
140
141
  ResumeRecordingPayload,
141
142
  WrapupPayLoad,
143
+ /** UI control types for task buttons */
144
+ InteractionUIControls,
145
+ TaskUILeg,
146
+ TaskUIControls,
147
+ TaskUIControlState,
142
148
  } from './services/task/types';
143
149
 
150
+ /** UI controls utilities */
151
+ export {getDefaultUIControls} from './services/task/state-machine/uiControlsComputer';
152
+
144
153
  /** Agent related types */
145
154
  export type {
146
155
  /** State change interface */