@webex/contact-center 3.12.0-next.72 → 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.
- package/AGENTS.md +438 -0
- package/ai-docs/README.md +131 -0
- package/ai-docs/RULES.md +455 -0
- package/ai-docs/patterns/event-driven-patterns.md +485 -0
- package/ai-docs/patterns/testing-patterns.md +480 -0
- package/ai-docs/patterns/typescript-patterns.md +365 -0
- package/ai-docs/templates/README.md +102 -0
- package/ai-docs/templates/documentation/create-agents-md.md +240 -0
- package/ai-docs/templates/documentation/create-architecture-md.md +295 -0
- package/ai-docs/templates/existing-service/bug-fix.md +254 -0
- package/ai-docs/templates/existing-service/feature-enhancement.md +450 -0
- package/ai-docs/templates/new-method/00-master.md +80 -0
- package/ai-docs/templates/new-method/01-requirements.md +232 -0
- package/ai-docs/templates/new-method/02-implementation.md +295 -0
- package/ai-docs/templates/new-method/03-tests.md +201 -0
- package/ai-docs/templates/new-method/04-validation.md +141 -0
- package/ai-docs/templates/new-service/00-master.md +109 -0
- package/ai-docs/templates/new-service/01-pre-questions.md +159 -0
- package/ai-docs/templates/new-service/02-code-generation.md +346 -0
- package/ai-docs/templates/new-service/03-integration.md +178 -0
- package/ai-docs/templates/new-service/04-test-generation.md +205 -0
- package/ai-docs/templates/new-service/05-validation.md +145 -0
- package/dist/cc.js +53 -38
- package/dist/cc.js.map +1 -1
- package/dist/config.js +6 -0
- package/dist/config.js.map +1 -1
- package/dist/constants.js +14 -1
- package/dist/constants.js.map +1 -1
- package/dist/index.js +13 -5
- package/dist/index.js.map +1 -1
- package/dist/metrics/behavioral-events.js +26 -0
- package/dist/metrics/behavioral-events.js.map +1 -1
- package/dist/metrics/constants.js +9 -3
- package/dist/metrics/constants.js.map +1 -1
- package/dist/services/ApiAiAssistant.js +74 -3
- package/dist/services/ApiAiAssistant.js.map +1 -1
- package/dist/services/config/Util.js +2 -2
- package/dist/services/config/Util.js.map +1 -1
- package/dist/services/config/types.js +25 -9
- package/dist/services/config/types.js.map +1 -1
- package/dist/services/core/Utils.js +74 -27
- package/dist/services/core/Utils.js.map +1 -1
- package/dist/services/core/websocket/WebSocketManager.js +2 -1
- package/dist/services/core/websocket/WebSocketManager.js.map +1 -1
- package/dist/services/core/websocket/types.js.map +1 -1
- package/dist/services/index.js +1 -1
- package/dist/services/index.js.map +1 -1
- package/dist/services/task/Task.js +688 -0
- package/dist/services/task/Task.js.map +1 -0
- package/dist/services/task/TaskFactory.js +45 -0
- package/dist/services/task/TaskFactory.js.map +1 -0
- package/dist/services/task/TaskManager.js +725 -612
- package/dist/services/task/TaskManager.js.map +1 -1
- package/dist/services/task/TaskUtils.js +162 -26
- package/dist/services/task/TaskUtils.js.map +1 -1
- package/dist/services/task/constants.js +6 -1
- package/dist/services/task/constants.js.map +1 -1
- package/dist/services/task/digital/Digital.js +77 -0
- package/dist/services/task/digital/Digital.js.map +1 -0
- package/dist/services/task/state-machine/TaskStateMachine.js +837 -0
- package/dist/services/task/state-machine/TaskStateMachine.js.map +1 -0
- package/dist/services/task/state-machine/actions.js +543 -0
- package/dist/services/task/state-machine/actions.js.map +1 -0
- package/dist/services/task/state-machine/constants.js +161 -0
- package/dist/services/task/state-machine/constants.js.map +1 -0
- package/dist/services/task/state-machine/guards.js +340 -0
- package/dist/services/task/state-machine/guards.js.map +1 -0
- package/dist/services/task/state-machine/index.js +53 -0
- package/dist/services/task/state-machine/index.js.map +1 -0
- package/dist/services/task/state-machine/types.js +54 -0
- package/dist/services/task/state-machine/types.js.map +1 -0
- package/dist/services/task/state-machine/uiControlsComputer.js +553 -0
- package/dist/services/task/state-machine/uiControlsComputer.js.map +1 -0
- package/dist/services/task/taskDataNormalizer.js +99 -0
- package/dist/services/task/taskDataNormalizer.js.map +1 -0
- package/dist/services/task/types.js +168 -16
- package/dist/services/task/types.js.map +1 -1
- package/dist/services/task/voice/Voice.js +1042 -0
- package/dist/services/task/voice/Voice.js.map +1 -0
- package/dist/services/task/voice/WebRTC.js +149 -0
- package/dist/services/task/voice/WebRTC.js.map +1 -0
- package/dist/types/cc.d.ts +19 -18
- package/dist/types/config.d.ts +6 -0
- package/dist/types/constants.d.ts +14 -1
- package/dist/types/index.d.ts +11 -5
- package/dist/types/metrics/constants.d.ts +7 -1
- package/dist/types/services/ApiAiAssistant.d.ts +11 -3
- package/dist/types/services/config/types.d.ts +113 -9
- package/dist/types/services/core/Utils.d.ts +23 -10
- package/dist/types/services/core/websocket/WebSocketManager.d.ts +1 -0
- package/dist/types/services/core/websocket/types.d.ts +1 -1
- package/dist/types/services/index.d.ts +1 -1
- package/dist/types/services/task/Task.d.ts +157 -0
- package/dist/types/services/task/TaskFactory.d.ts +12 -0
- package/dist/types/services/task/TaskUtils.d.ts +46 -2
- package/dist/types/services/task/constants.d.ts +5 -0
- package/dist/types/services/task/digital/Digital.d.ts +22 -0
- package/dist/types/services/task/state-machine/TaskStateMachine.d.ts +1144 -0
- package/dist/types/services/task/state-machine/actions.d.ts +10 -0
- package/dist/types/services/task/state-machine/constants.d.ts +107 -0
- package/dist/types/services/task/state-machine/guards.d.ts +90 -0
- package/dist/types/services/task/state-machine/index.d.ts +13 -0
- package/dist/types/services/task/state-machine/types.d.ts +267 -0
- package/dist/types/services/task/state-machine/uiControlsComputer.d.ts +9 -0
- package/dist/types/services/task/taskDataNormalizer.d.ts +10 -0
- package/dist/types/services/task/types.d.ts +551 -78
- package/dist/types/services/task/voice/Voice.d.ts +184 -0
- package/dist/types/services/task/voice/WebRTC.d.ts +53 -0
- package/dist/types/types.d.ts +92 -0
- package/dist/types/webex.d.ts +1 -0
- package/dist/types.js +85 -0
- package/dist/types.js.map +1 -1
- package/dist/webex.js +14 -2
- package/dist/webex.js.map +1 -1
- package/package.json +15 -12
- package/src/cc.ts +63 -43
- package/src/config.ts +6 -0
- package/src/constants.ts +14 -1
- package/src/index.ts +14 -5
- package/src/metrics/ai-docs/AGENTS.md +348 -0
- package/src/metrics/ai-docs/ARCHITECTURE.md +336 -0
- package/src/metrics/behavioral-events.ts +28 -0
- package/src/metrics/constants.ts +9 -4
- package/src/services/ApiAiAssistant.ts +104 -3
- package/src/services/agent/ai-docs/AGENTS.md +238 -0
- package/src/services/agent/ai-docs/ARCHITECTURE.md +302 -0
- package/src/services/ai-docs/AGENTS.md +384 -0
- package/src/services/config/Util.ts +2 -2
- package/src/services/config/ai-docs/AGENTS.md +253 -0
- package/src/services/config/ai-docs/ARCHITECTURE.md +424 -0
- package/src/services/config/types.ts +116 -10
- package/src/services/core/Utils.ts +85 -34
- package/src/services/core/ai-docs/AGENTS.md +379 -0
- package/src/services/core/ai-docs/ARCHITECTURE.md +696 -0
- package/src/services/core/websocket/WebSocketManager.ts +2 -0
- package/src/services/core/websocket/types.ts +1 -1
- package/src/services/index.ts +1 -1
- package/src/services/task/Task.ts +837 -0
- package/src/services/task/TaskFactory.ts +55 -0
- package/src/services/task/TaskManager.ts +738 -697
- package/src/services/task/TaskUtils.ts +205 -25
- package/src/services/task/ai-docs/AGENTS.md +455 -0
- package/src/services/task/ai-docs/ARCHITECTURE.md +585 -0
- package/src/services/task/constants.ts +5 -0
- package/src/services/task/digital/Digital.ts +95 -0
- package/src/services/task/state-machine/TaskStateMachine.ts +1077 -0
- package/src/services/task/state-machine/actions.ts +685 -0
- package/src/services/task/state-machine/ai-docs/AGENTS.md +495 -0
- package/src/services/task/state-machine/ai-docs/ARCHITECTURE.md +1135 -0
- package/src/services/task/state-machine/constants.ts +172 -0
- package/src/services/task/state-machine/guards.ts +406 -0
- package/src/services/task/state-machine/index.ts +28 -0
- package/src/services/task/state-machine/types.ts +241 -0
- package/src/services/task/state-machine/uiControlsComputer.ts +867 -0
- package/src/services/task/taskDataNormalizer.ts +137 -0
- package/src/services/task/types.ts +654 -85
- package/src/services/task/voice/Voice.ts +1267 -0
- package/src/services/task/voice/WebRTC.ts +187 -0
- package/src/types.ts +112 -1
- package/src/utils/AGENTS.md +276 -0
- package/src/webex.js +2 -0
- package/test/unit/spec/cc.ts +133 -3
- package/test/unit/spec/logger-proxy.ts +70 -0
- package/test/unit/spec/services/ApiAiAssistant.ts +122 -17
- package/test/unit/spec/services/WebCallingService.ts +7 -1
- package/test/unit/spec/services/config/index.ts +27 -27
- package/test/unit/spec/services/core/Utils.ts +335 -1
- package/test/unit/spec/services/core/websocket/WebSocketManager.ts +66 -40
- package/test/unit/spec/services/task/AutoWrapup.ts +63 -0
- package/test/unit/spec/services/task/Task.ts +477 -0
- package/test/unit/spec/services/task/TaskFactory.ts +62 -0
- package/test/unit/spec/services/task/TaskManager.ts +821 -1936
- package/test/unit/spec/services/task/TaskUtils.ts +206 -0
- package/test/unit/spec/services/task/digital/Digital.ts +105 -0
- package/test/unit/spec/services/task/state-machine/TaskStateMachine.ts +1825 -0
- package/test/unit/spec/services/task/state-machine/guards.ts +479 -0
- package/test/unit/spec/services/task/state-machine/types.ts +18 -0
- package/test/unit/spec/services/task/state-machine/uiControlsComputer.ts +2020 -0
- package/test/unit/spec/services/task/taskTestUtils.ts +87 -0
- package/test/unit/spec/services/task/voice/Voice.ts +631 -0
- package/test/unit/spec/services/task/voice/WebRTC.ts +235 -0
- package/umd/contact-center.min.js +2 -2
- package/umd/contact-center.min.js.map +1 -1
- package/dist/services/task/index.js +0 -1530
- package/dist/services/task/index.js.map +0 -1
- package/dist/types/services/task/index.d.ts +0 -650
- package/src/services/task/index.ts +0 -1806
- 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.
|
|
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"
|
|
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
|
|
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.
|
|
49
|
-
"@webex/internal-plugin-mercury": "3.12.0-next.
|
|
50
|
-
"@webex/internal-plugin-metrics": "3.12.0-next.
|
|
51
|
-
"@webex/internal-plugin-support": "3.12.0-next.
|
|
52
|
-
"@webex/plugin-authorization": "3.12.0-next.
|
|
53
|
-
"@webex/plugin-logger": "3.12.0-next.
|
|
54
|
-
"@webex/webex-core": "3.12.0-next.
|
|
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.
|
|
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.
|
|
84
|
+
"typescript": "5.4.5"
|
|
82
85
|
},
|
|
83
|
-
"version": "3.12.0-next.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
798
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
*
|
|
17
|
+
* Agent routing service for Contact Center operations
|
|
19
18
|
* @category Services
|
|
20
19
|
*/
|
|
21
|
-
export {default as
|
|
20
|
+
export {default as routingAgent} from './services/agent';
|
|
22
21
|
|
|
23
22
|
/**
|
|
24
|
-
*
|
|
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
|
|
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 */
|