@webex/contact-center 3.11.0 → 3.12.0-auth-prejoin-fetch.1
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/.sdd/manifest.json +883 -0
- package/AGENTS.md +94 -0
- package/ai-docs/ARCHITECTURE.md +168 -0
- package/ai-docs/CONTRACTS.md +50 -0
- package/ai-docs/GETTING_STARTED.md +168 -0
- package/ai-docs/GLOSSARY.md +43 -0
- package/ai-docs/README.md +138 -0
- package/ai-docs/REVIEW_CHECKLIST.md +41 -0
- package/ai-docs/RULES.md +444 -0
- package/ai-docs/SECURITY.md +52 -0
- package/ai-docs/SERVICE_STATE.md +48 -0
- package/ai-docs/SPEC_INDEX.md +65 -0
- package/ai-docs/adr/0001-spec-source-policy.md +55 -0
- package/ai-docs/adr/README.md +8 -0
- package/ai-docs/adr/_adr-template.md +31 -0
- package/ai-docs/contact-center-spec.md +359 -0
- package/ai-docs/features/consult-transfer-list-policy/spec/feature-spec.md +362 -0
- package/ai-docs/features/generated-spec-conformance-fidelity-remediation/spec/feature-spec.md +117 -0
- package/ai-docs/features/residual-warning-coverage-completion/spec/feature-spec.md +203 -0
- package/ai-docs/features/validator-code-fidelity-drift-fix/spec/feature-spec.md +315 -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 +818 -59
- package/dist/cc.js.map +1 -1
- package/dist/config.js +13 -0
- package/dist/config.js.map +1 -1
- package/dist/constants.js +31 -3
- package/dist/constants.js.map +1 -1
- package/dist/index.js +27 -5
- package/dist/index.js.map +1 -1
- package/dist/metrics/behavioral-events.js +127 -0
- package/dist/metrics/behavioral-events.js.map +1 -1
- package/dist/metrics/constants.js +34 -3
- package/dist/metrics/constants.js.map +1 -1
- package/dist/services/AddressBook.js +18 -15
- package/dist/services/AddressBook.js.map +1 -1
- package/dist/services/AnswerCallOnWebexService.js +174 -0
- package/dist/services/AnswerCallOnWebexService.js.map +1 -0
- package/dist/services/ApiAiAssistant.js +318 -0
- package/dist/services/ApiAiAssistant.js.map +1 -0
- package/dist/services/EntryPoint.js +46 -68
- package/dist/services/EntryPoint.js.map +1 -1
- package/dist/services/Queue.js +27 -22
- package/dist/services/Queue.js.map +1 -1
- package/dist/services/UserPreference.js +427 -0
- package/dist/services/UserPreference.js.map +1 -0
- package/dist/services/WebexCrossClientService.js +171 -0
- package/dist/services/WebexCrossClientService.js.map +1 -0
- package/dist/services/WxAppTelephonyMercurySync.js +93 -0
- package/dist/services/WxAppTelephonyMercurySync.js.map +1 -0
- package/dist/services/agent/types.js.map +1 -1
- package/dist/services/config/Util.js +11 -4
- package/dist/services/config/Util.js.map +1 -1
- package/dist/services/config/constants.js +45 -8
- package/dist/services/config/constants.js.map +1 -1
- package/dist/services/config/index.js +41 -2
- package/dist/services/config/index.js.map +1 -1
- package/dist/services/config/types.js +70 -8
- package/dist/services/config/types.js.map +1 -1
- package/dist/services/constants.js +27 -1
- package/dist/services/constants.js.map +1 -1
- package/dist/services/core/Err.js.map +1 -1
- package/dist/services/core/Utils.js +122 -25
- package/dist/services/core/Utils.js.map +1 -1
- package/dist/services/core/WebexRequest.js +6 -2
- package/dist/services/core/WebexRequest.js.map +1 -1
- package/dist/services/core/aqm-reqs.js +119 -30
- package/dist/services/core/aqm-reqs.js.map +1 -1
- package/dist/services/core/types.js.map +1 -1
- package/dist/services/core/websocket/WebSocketManager.js +22 -6
- package/dist/services/core/websocket/WebSocketManager.js.map +1 -1
- package/dist/services/core/websocket/connection-service.js +3 -1
- package/dist/services/core/websocket/connection-service.js.map +1 -1
- package/dist/services/core/websocket/types.js.map +1 -1
- package/dist/services/index.js +6 -0
- package/dist/services/index.js.map +1 -1
- package/dist/services/task/Task.js +754 -0
- package/dist/services/task/Task.js.map +1 -0
- package/dist/services/task/TaskFactory.js +49 -0
- package/dist/services/task/TaskFactory.js.map +1 -0
- package/dist/services/task/TaskManager.js +1073 -447
- package/dist/services/task/TaskManager.js.map +1 -1
- package/dist/services/task/TaskUtils.js +220 -23
- package/dist/services/task/TaskUtils.js.map +1 -1
- package/dist/services/task/WebexCallingUtils.js +70 -0
- package/dist/services/task/WebexCallingUtils.js.map +1 -0
- package/dist/services/task/constants.js +26 -2
- package/dist/services/task/constants.js.map +1 -1
- package/dist/services/task/contact.js +29 -0
- package/dist/services/task/contact.js.map +1 -1
- package/dist/services/task/dialer.js +129 -0
- package/dist/services/task/dialer.js.map +1 -1
- package/dist/services/task/digital/Digital.js +78 -0
- package/dist/services/task/digital/Digital.js.map +1 -0
- package/dist/services/task/state-machine/TaskStateMachine.js +971 -0
- package/dist/services/task/state-machine/TaskStateMachine.js.map +1 -0
- package/dist/services/task/state-machine/actions.js +572 -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 +409 -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 +703 -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 +243 -5
- package/dist/services/task/types.js.map +1 -1
- package/dist/services/task/voice/Voice.js +1380 -0
- package/dist/services/task/voice/Voice.js.map +1 -0
- package/dist/services/task/voice/WebRTC.js +152 -0
- package/dist/services/task/voice/WebRTC.js.map +1 -0
- package/dist/services/task/voice/wxAppVoiceMethods.js +201 -0
- package/dist/services/task/voice/wxAppVoiceMethods.js.map +1 -0
- package/dist/services/wxAppTelephonyUtils.js +19 -0
- package/dist/services/wxAppTelephonyUtils.js.map +1 -0
- package/dist/types/cc.d.ts +967 -0
- package/dist/types/config.d.ts +79 -0
- package/dist/types/constants.d.ts +74 -0
- package/dist/types/index.d.ts +201 -0
- package/dist/types/logger-proxy.d.ts +71 -0
- package/dist/types/metrics/MetricsManager.d.ts +223 -0
- package/dist/types/metrics/behavioral-events.d.ts +29 -0
- package/dist/types/metrics/constants.d.ts +183 -0
- package/dist/types/services/AddressBook.d.ts +75 -0
- package/dist/types/services/AnswerCallOnWebexService.d.ts +37 -0
- package/dist/types/services/ApiAiAssistant.d.ts +49 -0
- package/dist/types/services/EntryPoint.d.ts +69 -0
- package/dist/types/services/Queue.d.ts +78 -0
- package/dist/types/services/UserPreference.d.ts +118 -0
- package/dist/types/services/WebCallingService.d.ts +1 -0
- package/dist/types/services/WebexCrossClientService.d.ts +28 -0
- package/dist/types/services/WxAppTelephonyMercurySync.d.ts +28 -0
- package/dist/types/services/agent/index.d.ts +46 -0
- package/dist/types/services/agent/types.d.ts +413 -0
- package/dist/types/services/config/Util.d.ts +20 -0
- package/dist/types/services/config/constants.d.ts +273 -0
- package/dist/types/services/config/index.d.ts +177 -0
- package/dist/types/services/config/types.d.ts +1381 -0
- package/dist/types/services/constants.d.ts +110 -0
- package/dist/types/services/core/Err.d.ts +127 -0
- package/dist/types/services/core/GlobalTypes.d.ts +58 -0
- package/dist/types/services/core/Utils.d.ts +121 -0
- package/dist/types/services/core/WebexRequest.d.ts +23 -0
- package/dist/types/services/core/aqm-reqs.d.ts +65 -0
- package/dist/types/services/core/constants.d.ts +99 -0
- package/dist/types/services/core/types.d.ts +49 -0
- package/dist/types/services/core/websocket/WebSocketManager.d.ts +36 -0
- package/dist/types/services/core/websocket/connection-service.d.ts +27 -0
- package/dist/types/services/core/websocket/keepalive.worker.d.ts +2 -0
- package/dist/types/services/core/websocket/types.d.ts +37 -0
- package/dist/types/services/index.d.ts +54 -0
- package/dist/types/services/task/AutoWrapup.d.ts +40 -0
- package/dist/types/services/task/Task.d.ts +175 -0
- package/dist/types/services/task/TaskFactory.d.ts +13 -0
- package/dist/types/services/task/TaskManager.d.ts +1 -0
- package/dist/types/services/task/TaskUtils.d.ts +138 -0
- package/dist/types/services/task/WebexCallingUtils.d.ts +11 -0
- package/dist/types/services/task/constants.d.ts +94 -0
- package/dist/types/services/task/contact.d.ts +73 -0
- package/dist/types/services/task/dialer.d.ts +73 -0
- package/dist/types/services/task/digital/Digital.d.ts +22 -0
- package/dist/types/services/task/state-machine/TaskStateMachine.d.ts +1398 -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 +103 -0
- package/dist/types/services/task/state-machine/index.d.ts +13 -0
- package/dist/types/services/task/state-machine/types.d.ts +277 -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 +1933 -0
- package/dist/types/services/task/voice/Voice.d.ts +223 -0
- package/dist/types/services/task/voice/WebRTC.d.ts +53 -0
- package/dist/types/services/task/voice/wxAppVoiceMethods.d.ts +52 -0
- package/dist/types/services/wxAppTelephonyUtils.d.ts +5 -0
- package/dist/types/types.d.ts +784 -0
- package/dist/types/utils/PageCache.d.ts +190 -0
- package/dist/types/webex-config.d.ts +53 -0
- package/dist/types/webex.d.ts +8 -0
- package/dist/types.js +137 -3
- package/dist/types.js.map +1 -1
- package/dist/utils/PageCache.js +19 -5
- package/dist/utils/PageCache.js.map +1 -1
- package/dist/webex.js +14 -2
- package/dist/webex.js.map +1 -1
- package/package.json +16 -12
- package/src/cc.ts +983 -60
- package/src/config.ts +13 -0
- package/src/constants.ts +29 -1
- package/src/index.ts +26 -5
- package/src/metrics/ai-docs/AGENTS.md +350 -0
- package/src/metrics/ai-docs/ARCHITECTURE.md +338 -0
- package/src/metrics/ai-docs/metrics-spec.md +860 -0
- package/src/metrics/behavioral-events.ts +134 -0
- package/src/metrics/constants.ts +39 -3
- package/src/services/AddressBook.ts +17 -6
- package/src/services/AnswerCallOnWebexService.ts +206 -0
- package/src/services/ApiAiAssistant.ts +412 -0
- package/src/services/EntryPoint.ts +59 -60
- package/src/services/Queue.ts +29 -12
- package/src/services/UserPreference.ts +509 -0
- package/src/services/WebexCrossClientService.ts +212 -0
- package/src/services/WxAppTelephonyMercurySync.ts +115 -0
- package/src/services/agent/ai-docs/AGENTS.md +240 -0
- package/src/services/agent/ai-docs/ARCHITECTURE.md +304 -0
- package/src/services/agent/ai-docs/agent-spec.md +504 -0
- package/src/services/agent/types.ts +1 -1
- package/src/services/ai-docs/AGENTS.md +386 -0
- package/src/services/ai-docs/services-spec.md +497 -0
- package/src/services/config/Util.ts +13 -2
- package/src/services/config/ai-docs/AGENTS.md +255 -0
- package/src/services/config/ai-docs/ARCHITECTURE.md +426 -0
- package/src/services/config/ai-docs/config-spec.md +675 -0
- package/src/services/config/constants.ts +47 -7
- package/src/services/config/index.ts +45 -1
- package/src/services/config/types.ts +253 -11
- package/src/services/constants.ts +29 -0
- package/src/services/core/Err.ts +4 -0
- package/src/services/core/Utils.ts +143 -30
- package/src/services/core/WebexRequest.ts +3 -1
- package/src/services/core/ai-docs/AGENTS.md +381 -0
- package/src/services/core/ai-docs/ARCHITECTURE.md +698 -0
- package/src/services/core/ai-docs/core-spec.md +787 -0
- package/src/services/core/aqm-reqs.ts +125 -32
- package/src/services/core/types.ts +2 -0
- package/src/services/core/websocket/WebSocketManager.ts +23 -6
- package/src/services/core/websocket/connection-service.ts +5 -1
- package/src/services/core/websocket/types.ts +1 -1
- package/src/services/index.ts +4 -0
- package/src/services/task/Task.ts +908 -0
- package/src/services/task/TaskFactory.ts +60 -0
- package/src/services/task/TaskManager.ts +1291 -513
- package/src/services/task/TaskUtils.ts +314 -24
- package/src/services/task/WebexCallingUtils.ts +136 -0
- package/src/services/task/ai-docs/AGENTS.md +457 -0
- package/src/services/task/ai-docs/ARCHITECTURE.md +595 -0
- package/src/services/task/ai-docs/task-spec.md +1469 -0
- package/src/services/task/constants.ts +26 -0
- package/src/services/task/contact.ts +30 -0
- package/src/services/task/dialer.ts +136 -1
- package/src/services/task/digital/Digital.ts +97 -0
- package/src/services/task/state-machine/TaskStateMachine.ts +1313 -0
- package/src/services/task/state-machine/actions.ts +741 -0
- package/src/services/task/state-machine/ai-docs/AGENTS.md +462 -0
- package/src/services/task/state-machine/ai-docs/ARCHITECTURE.md +1146 -0
- package/src/services/task/state-machine/ai-docs/task-state-machine-spec.md +2209 -0
- package/src/services/task/state-machine/constants.ts +172 -0
- package/src/services/task/state-machine/guards.ts +498 -0
- package/src/services/task/state-machine/index.ts +28 -0
- package/src/services/task/state-machine/types.ts +258 -0
- package/src/services/task/state-machine/uiControlsComputer.ts +1135 -0
- package/src/services/task/taskDataNormalizer.ts +137 -0
- package/src/services/task/types.ts +843 -70
- package/src/services/task/voice/Voice.ts +1720 -0
- package/src/services/task/voice/WebRTC.ts +191 -0
- package/src/services/task/voice/wxAppVoiceMethods.ts +307 -0
- package/src/services/wxAppTelephonyUtils.ts +14 -0
- package/src/types.ts +238 -11
- package/src/utils/AGENTS.md +289 -0
- package/src/utils/PageCache.ts +38 -5
- package/src/utils/ai-docs/utils-spec.md +391 -0
- package/src/webex.js +2 -0
- package/test/unit/spec/cc.ts +1856 -122
- package/test/unit/spec/logger-proxy.ts +70 -0
- package/test/unit/spec/metrics/behavioral-events.ts +18 -0
- package/test/unit/spec/services/AddressBook.ts +37 -6
- package/test/unit/spec/services/AnswerCallOnWebexService.ts +223 -0
- package/test/unit/spec/services/ApiAiAssistant.ts +273 -0
- package/test/unit/spec/services/EntryPoint.ts +87 -40
- package/test/unit/spec/services/Queue.ts +123 -12
- package/test/unit/spec/services/UserPreference.ts +401 -0
- package/test/unit/spec/services/WebCallingService.ts +7 -1
- package/test/unit/spec/services/WebexCrossClientService.ts +261 -0
- package/test/unit/spec/services/WxAppTelephonyMercurySync.ts +113 -0
- package/test/unit/spec/services/config/Util.ts +85 -0
- package/test/unit/spec/services/config/index.ts +85 -29
- package/test/unit/spec/services/core/Utils.ts +481 -2
- package/test/unit/spec/services/core/WebexRequest.ts +3 -1
- package/test/unit/spec/services/core/aqm-reqs.ts +113 -1
- package/test/unit/spec/services/core/websocket/WebSocketManager.ts +137 -41
- package/test/unit/spec/services/core/websocket/connection-service.ts +3 -1
- package/test/unit/spec/services/task/AutoWrapup.ts +63 -0
- package/test/unit/spec/services/task/Task.ts +677 -0
- package/test/unit/spec/services/task/TaskFactory.ts +99 -0
- package/test/unit/spec/services/task/TaskManager.ts +2209 -918
- package/test/unit/spec/services/task/TaskUtils.ts +235 -0
- package/test/unit/spec/services/task/WebexCallingUtils.ts +153 -0
- package/test/unit/spec/services/task/contact.ts +33 -0
- package/test/unit/spec/services/task/dialer.ts +372 -96
- package/test/unit/spec/services/task/digital/Digital.ts +105 -0
- package/test/unit/spec/services/task/state-machine/TaskStateMachine.ts +3433 -0
- package/test/unit/spec/services/task/state-machine/guards.ts +839 -0
- package/test/unit/spec/services/task/state-machine/types.ts +18 -0
- package/test/unit/spec/services/task/state-machine/uiControlsComputer.ts +3101 -0
- package/test/unit/spec/services/task/taskTestUtils.ts +87 -0
- package/test/unit/spec/services/task/voice/Voice.ts +1523 -0
- package/test/unit/spec/services/task/voice/WebRTC.ts +235 -0
- package/test/unit/spec/services/task/voice/wxAppVoiceMethods.ts +459 -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 -1525
- package/dist/services/task/index.js.map +0 -1
- package/src/services/task/index.ts +0 -1801
- package/test/unit/spec/services/task/index.ts +0 -2184
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = exports.ApiAIAssistant = void 0;
|
|
7
|
+
var _uuid = require("uuid");
|
|
8
|
+
var _loggerProxy = _interopRequireDefault(require("../logger-proxy"));
|
|
9
|
+
var _MetricsManager = _interopRequireDefault(require("../metrics/MetricsManager"));
|
|
10
|
+
var _constants = require("../metrics/constants");
|
|
11
|
+
var _constants2 = require("../constants");
|
|
12
|
+
var _types = require("../types");
|
|
13
|
+
var _Utils = require("./core/Utils");
|
|
14
|
+
var _constants3 = require("./constants");
|
|
15
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
16
|
+
/**
|
|
17
|
+
* ApiAIAssistant provides AI Assistant APIs for transcript controls.
|
|
18
|
+
* @public
|
|
19
|
+
*/
|
|
20
|
+
class ApiAIAssistant {
|
|
21
|
+
constructor(webex) {
|
|
22
|
+
this.webex = webex;
|
|
23
|
+
this.metricsManager = _MetricsManager.default.getInstance({
|
|
24
|
+
webex
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
setAIFeatureFlags(aiFeature) {
|
|
28
|
+
this.aiFeature = aiFeature;
|
|
29
|
+
}
|
|
30
|
+
getBaseUrl() {
|
|
31
|
+
const wccApiGatewayUrl = this.webex.internal.services.get(_constants3.WCC_API_GATEWAY) || '';
|
|
32
|
+
if (!wccApiGatewayUrl) {
|
|
33
|
+
const {
|
|
34
|
+
error: detailedError
|
|
35
|
+
} = (0, _Utils.getErrorDetails)(new Error('AI_ASSISTANT_BASE_URL_NOT_AVAILABLE'), _constants2.METHODS.GET_BASE_URL, _constants2.CC_FILE);
|
|
36
|
+
throw detailedError;
|
|
37
|
+
}
|
|
38
|
+
let hostname = '';
|
|
39
|
+
try {
|
|
40
|
+
hostname = new URL(wccApiGatewayUrl).hostname.toLowerCase();
|
|
41
|
+
} catch (error) {
|
|
42
|
+
hostname = wccApiGatewayUrl.toLowerCase();
|
|
43
|
+
}
|
|
44
|
+
const resolvedEnv = _constants3.AI_ASSISTANT_ENV_MAP[hostname];
|
|
45
|
+
if (!resolvedEnv) {
|
|
46
|
+
const {
|
|
47
|
+
error: detailedError
|
|
48
|
+
} = (0, _Utils.getErrorDetails)(new Error('AI_ASSISTANT_BASE_URL_NOT_AVAILABLE'), _constants2.METHODS.GET_BASE_URL, _constants2.CC_FILE);
|
|
49
|
+
throw detailedError;
|
|
50
|
+
}
|
|
51
|
+
return _constants3.AI_ASSISTANT_BASE_URL_TEMPLATE.replace('%s', resolvedEnv);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Sends an event to the AI Assistant service.
|
|
56
|
+
* @param agentId - agent identifier
|
|
57
|
+
* @param interactionId - interaction/conversation identifier
|
|
58
|
+
* @param eventType - the type of event (e.g. 'CUSTOM_EVENT')
|
|
59
|
+
* @param eventName - the name of the event (e.g. 'GET_TRANSCRIPTS')
|
|
60
|
+
* @param eventMetaData - event-specific fields to include in eventDetails.data
|
|
61
|
+
* @param languageCode - language code within eventDetails.data
|
|
62
|
+
* @param trackingId - tracking identifier within eventDetails.data
|
|
63
|
+
*/
|
|
64
|
+
async sendEvent(agentId, interactionId, eventType, eventName, eventMetaData, languageCode, trackingId) {
|
|
65
|
+
_loggerProxy.default.info('Sending event', {
|
|
66
|
+
module: _constants2.CC_FILE,
|
|
67
|
+
method: _constants2.METHODS.SEND_EVENT,
|
|
68
|
+
interactionId,
|
|
69
|
+
data: {
|
|
70
|
+
eventType,
|
|
71
|
+
eventName,
|
|
72
|
+
eventMetaData
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
this.metricsManager.timeEvent([_constants.METRIC_EVENT_NAMES.AI_ASSISTANT_SEND_EVENT_SUCCESS, _constants.METRIC_EVENT_NAMES.AI_ASSISTANT_SEND_EVENT_FAILED]);
|
|
76
|
+
try {
|
|
77
|
+
const baseUrl = this.getBaseUrl();
|
|
78
|
+
const orgId = this.webex.credentials.getOrgId();
|
|
79
|
+
const response = await this.webex.request({
|
|
80
|
+
uri: `${baseUrl}${_constants3.AI_ASSISTANT_API_URLS.EVENT}`,
|
|
81
|
+
method: _types.HTTP_METHODS.POST,
|
|
82
|
+
addAuthHeader: true,
|
|
83
|
+
body: {
|
|
84
|
+
agentId,
|
|
85
|
+
orgId,
|
|
86
|
+
eventType,
|
|
87
|
+
eventName,
|
|
88
|
+
eventDetails: {
|
|
89
|
+
data: {
|
|
90
|
+
...eventMetaData,
|
|
91
|
+
interactionId,
|
|
92
|
+
actionTimeStamp: String(Date.now()),
|
|
93
|
+
languageCode,
|
|
94
|
+
trackingId
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
this.metricsManager.trackEvent(_constants.METRIC_EVENT_NAMES.AI_ASSISTANT_SEND_EVENT_SUCCESS, {
|
|
100
|
+
agentId,
|
|
101
|
+
orgId,
|
|
102
|
+
interactionId,
|
|
103
|
+
eventType,
|
|
104
|
+
eventName
|
|
105
|
+
}, ['operational']);
|
|
106
|
+
return response?.body || {};
|
|
107
|
+
} catch (error) {
|
|
108
|
+
this.metricsManager.trackEvent(_constants.METRIC_EVENT_NAMES.AI_ASSISTANT_SEND_EVENT_FAILED, {
|
|
109
|
+
interactionId,
|
|
110
|
+
eventType,
|
|
111
|
+
eventName,
|
|
112
|
+
error: error instanceof Error ? error.message : String(error)
|
|
113
|
+
}, ['operational']);
|
|
114
|
+
const {
|
|
115
|
+
error: detailedError
|
|
116
|
+
} = (0, _Utils.getErrorDetails)(error, _constants2.METHODS.SEND_EVENT, _constants2.CC_FILE);
|
|
117
|
+
throw detailedError;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Requests real-time assistance for an interaction.
|
|
123
|
+
*
|
|
124
|
+
* @param params - Real-time assistance request parameters
|
|
125
|
+
* @returns HTTP response body from the AI Assistant event API
|
|
126
|
+
* @public
|
|
127
|
+
*/
|
|
128
|
+
async getRealTimeAssistance(params) {
|
|
129
|
+
const {
|
|
130
|
+
agentId,
|
|
131
|
+
interactionId,
|
|
132
|
+
context
|
|
133
|
+
} = params;
|
|
134
|
+
const trimmedContext = context?.trim();
|
|
135
|
+
const languageCode = params.languageCode ?? 'en';
|
|
136
|
+
const trackingId = `WX_CC_SDK_${(0, _uuid.v4)()}`;
|
|
137
|
+
const eventName = trimmedContext ? _types.AIAssistantEventName.ADD_SUGGESTIONS_EXTRA_CONTEXT : _types.AIAssistantEventName.GET_SUGGESTIONS;
|
|
138
|
+
const loggerContext = {
|
|
139
|
+
module: _constants2.CC_FILE,
|
|
140
|
+
method: _constants2.METHODS.GET_REAL_TIME_ASSISTANCE,
|
|
141
|
+
interactionId,
|
|
142
|
+
trackingId,
|
|
143
|
+
data: {
|
|
144
|
+
eventName
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
_loggerProxy.default.info('Requesting real-time assistance', loggerContext);
|
|
148
|
+
this.metricsManager.timeEvent([_constants.METRIC_EVENT_NAMES.AI_ASSISTANT_GET_REAL_TIME_ASSISTANCE_SUCCESS, _constants.METRIC_EVENT_NAMES.AI_ASSISTANT_GET_REAL_TIME_ASSISTANCE_FAILED]);
|
|
149
|
+
try {
|
|
150
|
+
if (!this.aiFeature?.suggestedResponses?.enable) {
|
|
151
|
+
const {
|
|
152
|
+
error: detailedError
|
|
153
|
+
} = (0, _Utils.getErrorDetails)(new Error('SUGGESTED_RESPONSES_NOT_ENABLED'), _constants2.METHODS.GET_REAL_TIME_ASSISTANCE, _constants2.CC_FILE);
|
|
154
|
+
throw detailedError;
|
|
155
|
+
}
|
|
156
|
+
const orgId = this.webex.credentials.getOrgId();
|
|
157
|
+
const response = await this.sendEvent(agentId, interactionId, _types.AIAssistantEventType.CUSTOM_EVENT, eventName, trimmedContext !== undefined ? {
|
|
158
|
+
context: trimmedContext
|
|
159
|
+
} : undefined, languageCode, trackingId);
|
|
160
|
+
this.metricsManager.trackEvent(_constants.METRIC_EVENT_NAMES.AI_ASSISTANT_GET_REAL_TIME_ASSISTANCE_SUCCESS, {
|
|
161
|
+
agentId,
|
|
162
|
+
orgId,
|
|
163
|
+
interactionId,
|
|
164
|
+
eventName,
|
|
165
|
+
trackingId,
|
|
166
|
+
context
|
|
167
|
+
}, ['operational']);
|
|
168
|
+
_loggerProxy.default.log('Real-time assistance request succeeded', loggerContext);
|
|
169
|
+
return response;
|
|
170
|
+
} catch (error) {
|
|
171
|
+
_loggerProxy.default.error('Real-time assistance request failed', {
|
|
172
|
+
...loggerContext,
|
|
173
|
+
error
|
|
174
|
+
});
|
|
175
|
+
this.metricsManager.trackEvent(_constants.METRIC_EVENT_NAMES.AI_ASSISTANT_GET_REAL_TIME_ASSISTANCE_FAILED, {
|
|
176
|
+
agentId,
|
|
177
|
+
interactionId,
|
|
178
|
+
trackingId,
|
|
179
|
+
eventName,
|
|
180
|
+
error: error instanceof Error ? error.message : String(error)
|
|
181
|
+
}, ['operational']);
|
|
182
|
+
const {
|
|
183
|
+
error: detailedError
|
|
184
|
+
} = (0, _Utils.getErrorDetails)(error, _constants2.METHODS.GET_REAL_TIME_ASSISTANCE, _constants2.CC_FILE);
|
|
185
|
+
throw detailedError;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Sends user action feedback for a real-time assistance adaptive card.
|
|
191
|
+
*
|
|
192
|
+
* @param params - Real-time assistance user action parameters
|
|
193
|
+
* @returns HTTP response body from the AI Assistant event API
|
|
194
|
+
* @public
|
|
195
|
+
*/
|
|
196
|
+
async sendRealTimeAssistanceUserAction(params) {
|
|
197
|
+
const {
|
|
198
|
+
agentId,
|
|
199
|
+
interactionId,
|
|
200
|
+
adaptiveCardId,
|
|
201
|
+
actionId
|
|
202
|
+
} = params;
|
|
203
|
+
const actionType = 'Action.Submit';
|
|
204
|
+
const languageCode = params.languageCode ?? 'en';
|
|
205
|
+
const trackingId = `WX_CC_SDK_${(0, _uuid.v4)()}`;
|
|
206
|
+
const loggerContext = {
|
|
207
|
+
module: _constants2.CC_FILE,
|
|
208
|
+
method: _constants2.METHODS.SEND_REAL_TIME_ASSISTANCE_USER_ACTION,
|
|
209
|
+
interactionId,
|
|
210
|
+
trackingId,
|
|
211
|
+
data: {
|
|
212
|
+
actionId,
|
|
213
|
+
adaptiveCardId
|
|
214
|
+
}
|
|
215
|
+
};
|
|
216
|
+
_loggerProxy.default.info('Sending real-time assistance user action', loggerContext);
|
|
217
|
+
this.metricsManager.timeEvent([_constants.METRIC_EVENT_NAMES.AI_ASSISTANT_SEND_REAL_TIME_ASSISTANCE_USER_ACTION_SUCCESS, _constants.METRIC_EVENT_NAMES.AI_ASSISTANT_SEND_REAL_TIME_ASSISTANCE_USER_ACTION_FAILED]);
|
|
218
|
+
try {
|
|
219
|
+
if (!this.aiFeature?.suggestedResponses?.enable) {
|
|
220
|
+
const {
|
|
221
|
+
error: detailedError
|
|
222
|
+
} = (0, _Utils.getErrorDetails)(new Error('SUGGESTED_RESPONSES_NOT_ENABLED'), _constants2.METHODS.SEND_REAL_TIME_ASSISTANCE_USER_ACTION, _constants2.CC_FILE);
|
|
223
|
+
throw detailedError;
|
|
224
|
+
}
|
|
225
|
+
const orgId = this.webex.credentials.getOrgId();
|
|
226
|
+
const response = await this.sendEvent(agentId, interactionId, _types.AIAssistantEventType.CUSTOM_EVENT, _types.AIAssistantEventName.SUGGESTED_RESPONSES_USER_ACTION, {
|
|
227
|
+
adaptiveCardId,
|
|
228
|
+
userAction: {
|
|
229
|
+
actionType,
|
|
230
|
+
actionId
|
|
231
|
+
}
|
|
232
|
+
}, languageCode, trackingId);
|
|
233
|
+
this.metricsManager.trackEvent(_constants.METRIC_EVENT_NAMES.AI_ASSISTANT_SEND_REAL_TIME_ASSISTANCE_USER_ACTION_SUCCESS, {
|
|
234
|
+
agentId,
|
|
235
|
+
orgId,
|
|
236
|
+
interactionId,
|
|
237
|
+
adaptiveCardId,
|
|
238
|
+
actionId,
|
|
239
|
+
trackingId
|
|
240
|
+
}, ['operational']);
|
|
241
|
+
_loggerProxy.default.log('Real-time assistance user action sent', loggerContext);
|
|
242
|
+
return response;
|
|
243
|
+
} catch (error) {
|
|
244
|
+
_loggerProxy.default.error('Real-time assistance user action failed', {
|
|
245
|
+
...loggerContext,
|
|
246
|
+
error
|
|
247
|
+
});
|
|
248
|
+
this.metricsManager.trackEvent(_constants.METRIC_EVENT_NAMES.AI_ASSISTANT_SEND_REAL_TIME_ASSISTANCE_USER_ACTION_FAILED, {
|
|
249
|
+
agentId,
|
|
250
|
+
interactionId,
|
|
251
|
+
adaptiveCardId,
|
|
252
|
+
actionId,
|
|
253
|
+
trackingId,
|
|
254
|
+
error: error instanceof Error ? error.message : String(error)
|
|
255
|
+
}, ['operational']);
|
|
256
|
+
const {
|
|
257
|
+
error: detailedError
|
|
258
|
+
} = (0, _Utils.getErrorDetails)(error, _constants2.METHODS.SEND_REAL_TIME_ASSISTANCE_USER_ACTION, _constants2.CC_FILE);
|
|
259
|
+
throw detailedError;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* Fetches historic transcripts for an interaction.
|
|
265
|
+
* This API is allowed only when real-time transcription feature is enabled.
|
|
266
|
+
*
|
|
267
|
+
* @param interactionId - interaction/conversation identifier
|
|
268
|
+
*/
|
|
269
|
+
async fetchHistoricTranscripts(agentId, interactionId) {
|
|
270
|
+
_loggerProxy.default.info('Fetching historic transcripts', {
|
|
271
|
+
module: _constants2.CC_FILE,
|
|
272
|
+
method: _constants2.METHODS.FETCH_HISTORIC_TRANSCRIPTS,
|
|
273
|
+
interactionId
|
|
274
|
+
});
|
|
275
|
+
this.metricsManager.timeEvent([_constants.METRIC_EVENT_NAMES.AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_SUCCESS, _constants.METRIC_EVENT_NAMES.AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_FAILED]);
|
|
276
|
+
if (!this.aiFeature?.realtimeTranscripts?.enable) {
|
|
277
|
+
const {
|
|
278
|
+
error: detailedError
|
|
279
|
+
} = (0, _Utils.getErrorDetails)(new Error('REAL_TIME_TRANSCRIPTION_NOT_ENABLED'), _constants2.METHODS.FETCH_HISTORIC_TRANSCRIPTS, _constants2.CC_FILE);
|
|
280
|
+
throw detailedError;
|
|
281
|
+
}
|
|
282
|
+
try {
|
|
283
|
+
const baseUrl = this.getBaseUrl();
|
|
284
|
+
const orgId = this.webex.credentials.getOrgId();
|
|
285
|
+
const response = await this.webex.request({
|
|
286
|
+
uri: `${baseUrl}${_constants3.AI_ASSISTANT_API_URLS.TRANSCRIPTS_LIST}`,
|
|
287
|
+
method: _types.HTTP_METHODS.POST,
|
|
288
|
+
addAuthHeader: true,
|
|
289
|
+
body: {
|
|
290
|
+
agentId,
|
|
291
|
+
orgId,
|
|
292
|
+
interactionId
|
|
293
|
+
}
|
|
294
|
+
});
|
|
295
|
+
this.metricsManager.trackEvent(_constants.METRIC_EVENT_NAMES.AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_SUCCESS, {
|
|
296
|
+
agentId,
|
|
297
|
+
orgId,
|
|
298
|
+
interactionId
|
|
299
|
+
}, ['operational']);
|
|
300
|
+
return response.body;
|
|
301
|
+
} catch (error) {
|
|
302
|
+
this.metricsManager.trackEvent(_constants.METRIC_EVENT_NAMES.AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_FAILED, {
|
|
303
|
+
interactionId,
|
|
304
|
+
error: error instanceof Error ? error.message : String(error)
|
|
305
|
+
}, ['operational']);
|
|
306
|
+
if (error instanceof Error) {
|
|
307
|
+
throw error;
|
|
308
|
+
}
|
|
309
|
+
const {
|
|
310
|
+
error: detailedError
|
|
311
|
+
} = (0, _Utils.getErrorDetails)(error, _constants2.METHODS.FETCH_HISTORIC_TRANSCRIPTS, _constants2.CC_FILE);
|
|
312
|
+
throw detailedError;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
exports.ApiAIAssistant = ApiAIAssistant;
|
|
317
|
+
var _default = exports.default = ApiAIAssistant;
|
|
318
|
+
//# sourceMappingURL=ApiAiAssistant.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_uuid","require","_loggerProxy","_interopRequireDefault","_MetricsManager","_constants","_constants2","_types","_Utils","_constants3","e","__esModule","default","ApiAIAssistant","constructor","webex","metricsManager","MetricsManager","getInstance","setAIFeatureFlags","aiFeature","getBaseUrl","wccApiGatewayUrl","internal","services","get","WCC_API_GATEWAY","error","detailedError","getErrorDetails","Error","METHODS","GET_BASE_URL","CC_FILE","hostname","URL","toLowerCase","resolvedEnv","AI_ASSISTANT_ENV_MAP","AI_ASSISTANT_BASE_URL_TEMPLATE","replace","sendEvent","agentId","interactionId","eventType","eventName","eventMetaData","languageCode","trackingId","LoggerProxy","info","module","method","SEND_EVENT","data","timeEvent","METRIC_EVENT_NAMES","AI_ASSISTANT_SEND_EVENT_SUCCESS","AI_ASSISTANT_SEND_EVENT_FAILED","baseUrl","orgId","credentials","getOrgId","response","request","uri","AI_ASSISTANT_API_URLS","EVENT","HTTP_METHODS","POST","addAuthHeader","body","eventDetails","actionTimeStamp","String","Date","now","trackEvent","message","getRealTimeAssistance","params","context","trimmedContext","trim","uuidv4","AIAssistantEventName","ADD_SUGGESTIONS_EXTRA_CONTEXT","GET_SUGGESTIONS","loggerContext","GET_REAL_TIME_ASSISTANCE","AI_ASSISTANT_GET_REAL_TIME_ASSISTANCE_SUCCESS","AI_ASSISTANT_GET_REAL_TIME_ASSISTANCE_FAILED","suggestedResponses","enable","AIAssistantEventType","CUSTOM_EVENT","undefined","log","sendRealTimeAssistanceUserAction","adaptiveCardId","actionId","actionType","SEND_REAL_TIME_ASSISTANCE_USER_ACTION","AI_ASSISTANT_SEND_REAL_TIME_ASSISTANCE_USER_ACTION_SUCCESS","AI_ASSISTANT_SEND_REAL_TIME_ASSISTANCE_USER_ACTION_FAILED","SUGGESTED_RESPONSES_USER_ACTION","userAction","fetchHistoricTranscripts","FETCH_HISTORIC_TRANSCRIPTS","AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_SUCCESS","AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_FAILED","realtimeTranscripts","TRANSCRIPTS_LIST","exports","_default"],"sources":["ApiAiAssistant.ts"],"sourcesContent":["import {v4 as uuidv4} from 'uuid';\nimport LoggerProxy from '../logger-proxy';\nimport MetricsManager from '../metrics/MetricsManager';\nimport {METRIC_EVENT_NAMES} from '../metrics/constants';\nimport {CC_FILE, METHODS} from '../constants';\nimport {\n HTTP_METHODS,\n WebexSDK,\n IHttpResponse,\n AIAssistantEventType,\n AIAssistantEventName,\n HistoricTranscriptsResponse,\n RealTimeAssistanceParams,\n RealTimeAssistanceUserActionParams,\n} from '../types';\nimport {getErrorDetails} from './core/Utils';\nimport {\n AI_ASSISTANT_BASE_URL_TEMPLATE,\n AI_ASSISTANT_ENV_MAP,\n AI_ASSISTANT_API_URLS,\n WCC_API_GATEWAY,\n} from './constants';\nimport {AIFeatureFlags} from './config/types';\n\n/**\n * ApiAIAssistant provides AI Assistant APIs for transcript controls.\n * @public\n */\nexport class ApiAIAssistant {\n private webex: WebexSDK;\n private metricsManager: MetricsManager;\n private aiFeature: AIFeatureFlags;\n\n constructor(webex: WebexSDK) {\n this.webex = webex;\n this.metricsManager = MetricsManager.getInstance({webex});\n }\n\n public setAIFeatureFlags(aiFeature: AIFeatureFlags): void {\n this.aiFeature = aiFeature;\n }\n\n private getBaseUrl(): string {\n const wccApiGatewayUrl = this.webex.internal.services.get(WCC_API_GATEWAY) || '';\n\n if (!wccApiGatewayUrl) {\n const {error: detailedError} = getErrorDetails(\n new Error('AI_ASSISTANT_BASE_URL_NOT_AVAILABLE'),\n METHODS.GET_BASE_URL,\n CC_FILE\n );\n throw detailedError;\n }\n\n let hostname = '';\n try {\n hostname = new URL(wccApiGatewayUrl).hostname.toLowerCase();\n } catch (error) {\n hostname = wccApiGatewayUrl.toLowerCase();\n }\n\n const resolvedEnv = AI_ASSISTANT_ENV_MAP[hostname];\n if (!resolvedEnv) {\n const {error: detailedError} = getErrorDetails(\n new Error('AI_ASSISTANT_BASE_URL_NOT_AVAILABLE'),\n METHODS.GET_BASE_URL,\n CC_FILE\n );\n throw detailedError;\n }\n\n return AI_ASSISTANT_BASE_URL_TEMPLATE.replace('%s', resolvedEnv);\n }\n\n /**\n * Sends an event to the AI Assistant service.\n * @param agentId - agent identifier\n * @param interactionId - interaction/conversation identifier\n * @param eventType - the type of event (e.g. 'CUSTOM_EVENT')\n * @param eventName - the name of the event (e.g. 'GET_TRANSCRIPTS')\n * @param eventMetaData - event-specific fields to include in eventDetails.data\n * @param languageCode - language code within eventDetails.data\n * @param trackingId - tracking identifier within eventDetails.data\n */\n public async sendEvent(\n agentId: string,\n interactionId: string,\n eventType: AIAssistantEventType,\n eventName: AIAssistantEventName,\n eventMetaData?: Record<string, unknown>,\n languageCode?: string,\n trackingId?: string\n ): Promise<Record<string, unknown>> {\n LoggerProxy.info('Sending event', {\n module: CC_FILE,\n method: METHODS.SEND_EVENT,\n interactionId,\n data: {eventType, eventName, eventMetaData},\n });\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.AI_ASSISTANT_SEND_EVENT_SUCCESS,\n METRIC_EVENT_NAMES.AI_ASSISTANT_SEND_EVENT_FAILED,\n ]);\n\n try {\n const baseUrl = this.getBaseUrl();\n const orgId = this.webex.credentials.getOrgId();\n const response = (await this.webex.request({\n uri: `${baseUrl}${AI_ASSISTANT_API_URLS.EVENT}`,\n method: HTTP_METHODS.POST,\n addAuthHeader: true,\n body: {\n agentId,\n orgId,\n eventType,\n eventName,\n eventDetails: {\n data: {\n ...eventMetaData,\n interactionId,\n actionTimeStamp: String(Date.now()),\n languageCode,\n trackingId,\n },\n },\n },\n })) as IHttpResponse;\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.AI_ASSISTANT_SEND_EVENT_SUCCESS,\n {agentId, orgId, interactionId, eventType, eventName},\n ['operational']\n );\n\n return response?.body || {};\n } catch (error) {\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.AI_ASSISTANT_SEND_EVENT_FAILED,\n {\n interactionId,\n eventType,\n eventName,\n error: error instanceof Error ? error.message : String(error),\n },\n ['operational']\n );\n\n const {error: detailedError} = getErrorDetails(error, METHODS.SEND_EVENT, CC_FILE);\n throw detailedError;\n }\n }\n\n /**\n * Requests real-time assistance for an interaction.\n *\n * @param params - Real-time assistance request parameters\n * @returns HTTP response body from the AI Assistant event API\n * @public\n */\n public async getRealTimeAssistance(params: RealTimeAssistanceParams) {\n const {agentId, interactionId, context} = params;\n const trimmedContext = context?.trim();\n const languageCode = params.languageCode ?? 'en';\n const trackingId = `WX_CC_SDK_${uuidv4()}`;\n const eventName = trimmedContext\n ? AIAssistantEventName.ADD_SUGGESTIONS_EXTRA_CONTEXT\n : AIAssistantEventName.GET_SUGGESTIONS;\n\n const loggerContext = {\n module: CC_FILE,\n method: METHODS.GET_REAL_TIME_ASSISTANCE,\n interactionId,\n trackingId,\n data: {eventName},\n };\n\n LoggerProxy.info('Requesting real-time assistance', loggerContext);\n\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.AI_ASSISTANT_GET_REAL_TIME_ASSISTANCE_SUCCESS,\n METRIC_EVENT_NAMES.AI_ASSISTANT_GET_REAL_TIME_ASSISTANCE_FAILED,\n ]);\n\n try {\n if (!this.aiFeature?.suggestedResponses?.enable) {\n const {error: detailedError} = getErrorDetails(\n new Error('SUGGESTED_RESPONSES_NOT_ENABLED'),\n METHODS.GET_REAL_TIME_ASSISTANCE,\n CC_FILE\n );\n throw detailedError;\n }\n\n const orgId = this.webex.credentials.getOrgId();\n\n const response = await this.sendEvent(\n agentId,\n interactionId,\n AIAssistantEventType.CUSTOM_EVENT,\n eventName,\n trimmedContext !== undefined ? {context: trimmedContext} : undefined,\n languageCode,\n trackingId\n );\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.AI_ASSISTANT_GET_REAL_TIME_ASSISTANCE_SUCCESS,\n {\n agentId,\n orgId,\n interactionId,\n eventName,\n trackingId,\n context,\n },\n ['operational']\n );\n LoggerProxy.log('Real-time assistance request succeeded', loggerContext);\n\n return response;\n } catch (error) {\n LoggerProxy.error('Real-time assistance request failed', {...loggerContext, error});\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.AI_ASSISTANT_GET_REAL_TIME_ASSISTANCE_FAILED,\n {\n agentId,\n interactionId,\n trackingId,\n eventName,\n error: error instanceof Error ? error.message : String(error),\n },\n ['operational']\n );\n\n const {error: detailedError} = getErrorDetails(\n error,\n METHODS.GET_REAL_TIME_ASSISTANCE,\n CC_FILE\n );\n throw detailedError;\n }\n }\n\n /**\n * Sends user action feedback for a real-time assistance adaptive card.\n *\n * @param params - Real-time assistance user action parameters\n * @returns HTTP response body from the AI Assistant event API\n * @public\n */\n public async sendRealTimeAssistanceUserAction(\n params: RealTimeAssistanceUserActionParams\n ): Promise<Record<string, unknown>> {\n const {agentId, interactionId, adaptiveCardId, actionId} = params;\n const actionType = 'Action.Submit';\n const languageCode = params.languageCode ?? 'en';\n const trackingId = `WX_CC_SDK_${uuidv4()}`;\n\n const loggerContext = {\n module: CC_FILE,\n method: METHODS.SEND_REAL_TIME_ASSISTANCE_USER_ACTION,\n interactionId,\n trackingId,\n data: {actionId, adaptiveCardId},\n };\n\n LoggerProxy.info('Sending real-time assistance user action', loggerContext);\n\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.AI_ASSISTANT_SEND_REAL_TIME_ASSISTANCE_USER_ACTION_SUCCESS,\n METRIC_EVENT_NAMES.AI_ASSISTANT_SEND_REAL_TIME_ASSISTANCE_USER_ACTION_FAILED,\n ]);\n\n try {\n if (!this.aiFeature?.suggestedResponses?.enable) {\n const {error: detailedError} = getErrorDetails(\n new Error('SUGGESTED_RESPONSES_NOT_ENABLED'),\n METHODS.SEND_REAL_TIME_ASSISTANCE_USER_ACTION,\n CC_FILE\n );\n throw detailedError;\n }\n\n const orgId = this.webex.credentials.getOrgId();\n const response = await this.sendEvent(\n agentId,\n interactionId,\n AIAssistantEventType.CUSTOM_EVENT,\n AIAssistantEventName.SUGGESTED_RESPONSES_USER_ACTION,\n {\n adaptiveCardId,\n userAction: {\n actionType,\n actionId,\n },\n },\n languageCode,\n trackingId\n );\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.AI_ASSISTANT_SEND_REAL_TIME_ASSISTANCE_USER_ACTION_SUCCESS,\n {\n agentId,\n orgId,\n interactionId,\n adaptiveCardId,\n actionId,\n trackingId,\n },\n ['operational']\n );\n LoggerProxy.log('Real-time assistance user action sent', loggerContext);\n\n return response;\n } catch (error) {\n LoggerProxy.error('Real-time assistance user action failed', {...loggerContext, error});\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.AI_ASSISTANT_SEND_REAL_TIME_ASSISTANCE_USER_ACTION_FAILED,\n {\n agentId,\n interactionId,\n adaptiveCardId,\n actionId,\n trackingId,\n error: error instanceof Error ? error.message : String(error),\n },\n ['operational']\n );\n\n const {error: detailedError} = getErrorDetails(\n error,\n METHODS.SEND_REAL_TIME_ASSISTANCE_USER_ACTION,\n CC_FILE\n );\n throw detailedError;\n }\n }\n\n /**\n * Fetches historic transcripts for an interaction.\n * This API is allowed only when real-time transcription feature is enabled.\n *\n * @param interactionId - interaction/conversation identifier\n */\n public async fetchHistoricTranscripts(\n agentId: string,\n interactionId: string\n ): Promise<HistoricTranscriptsResponse> {\n LoggerProxy.info('Fetching historic transcripts', {\n module: CC_FILE,\n method: METHODS.FETCH_HISTORIC_TRANSCRIPTS,\n interactionId,\n });\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_SUCCESS,\n METRIC_EVENT_NAMES.AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_FAILED,\n ]);\n if (!this.aiFeature?.realtimeTranscripts?.enable) {\n const {error: detailedError} = getErrorDetails(\n new Error('REAL_TIME_TRANSCRIPTION_NOT_ENABLED'),\n METHODS.FETCH_HISTORIC_TRANSCRIPTS,\n CC_FILE\n );\n throw detailedError;\n }\n\n try {\n const baseUrl = this.getBaseUrl();\n const orgId = this.webex.credentials.getOrgId();\n const response = (await this.webex.request({\n uri: `${baseUrl}${AI_ASSISTANT_API_URLS.TRANSCRIPTS_LIST}`,\n method: HTTP_METHODS.POST,\n addAuthHeader: true,\n body: {\n agentId,\n orgId,\n interactionId,\n },\n })) as IHttpResponse;\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_SUCCESS,\n {agentId, orgId, interactionId},\n ['operational']\n );\n\n return response.body as HistoricTranscriptsResponse;\n } catch (error) {\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_FAILED,\n {\n interactionId,\n error: error instanceof Error ? error.message : String(error),\n },\n ['operational']\n );\n\n if (error instanceof Error) {\n throw error;\n }\n const {error: detailedError} = getErrorDetails(\n error,\n METHODS.FETCH_HISTORIC_TRANSCRIPTS,\n CC_FILE\n );\n throw detailedError;\n }\n }\n}\n\nexport default ApiAIAssistant;\n"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,eAAA,GAAAD,sBAAA,CAAAF,OAAA;AACA,IAAAI,UAAA,GAAAJ,OAAA;AACA,IAAAK,WAAA,GAAAL,OAAA;AACA,IAAAM,MAAA,GAAAN,OAAA;AAUA,IAAAO,MAAA,GAAAP,OAAA;AACA,IAAAQ,WAAA,GAAAR,OAAA;AAKqB,SAAAE,uBAAAO,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAGrB;AACA;AACA;AACA;AACO,MAAMG,cAAc,CAAC;EAK1BC,WAAWA,CAACC,KAAe,EAAE;IAC3B,IAAI,CAACA,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACC,cAAc,GAAGC,uBAAc,CAACC,WAAW,CAAC;MAACH;IAAK,CAAC,CAAC;EAC3D;EAEOI,iBAAiBA,CAACC,SAAyB,EAAQ;IACxD,IAAI,CAACA,SAAS,GAAGA,SAAS;EAC5B;EAEQC,UAAUA,CAAA,EAAW;IAC3B,MAAMC,gBAAgB,GAAG,IAAI,CAACP,KAAK,CAACQ,QAAQ,CAACC,QAAQ,CAACC,GAAG,CAACC,2BAAe,CAAC,IAAI,EAAE;IAEhF,IAAI,CAACJ,gBAAgB,EAAE;MACrB,MAAM;QAACK,KAAK,EAAEC;MAAa,CAAC,GAAG,IAAAC,sBAAe,EAC5C,IAAIC,KAAK,CAAC,qCAAqC,CAAC,EAChDC,mBAAO,CAACC,YAAY,EACpBC,mBACF,CAAC;MACD,MAAML,aAAa;IACrB;IAEA,IAAIM,QAAQ,GAAG,EAAE;IACjB,IAAI;MACFA,QAAQ,GAAG,IAAIC,GAAG,CAACb,gBAAgB,CAAC,CAACY,QAAQ,CAACE,WAAW,CAAC,CAAC;IAC7D,CAAC,CAAC,OAAOT,KAAK,EAAE;MACdO,QAAQ,GAAGZ,gBAAgB,CAACc,WAAW,CAAC,CAAC;IAC3C;IAEA,MAAMC,WAAW,GAAGC,gCAAoB,CAACJ,QAAQ,CAAC;IAClD,IAAI,CAACG,WAAW,EAAE;MAChB,MAAM;QAACV,KAAK,EAAEC;MAAa,CAAC,GAAG,IAAAC,sBAAe,EAC5C,IAAIC,KAAK,CAAC,qCAAqC,CAAC,EAChDC,mBAAO,CAACC,YAAY,EACpBC,mBACF,CAAC;MACD,MAAML,aAAa;IACrB;IAEA,OAAOW,0CAA8B,CAACC,OAAO,CAAC,IAAI,EAAEH,WAAW,CAAC;EAClE;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAaI,SAASA,CACpBC,OAAe,EACfC,aAAqB,EACrBC,SAA+B,EAC/BC,SAA+B,EAC/BC,aAAuC,EACvCC,YAAqB,EACrBC,UAAmB,EACe;IAClCC,oBAAW,CAACC,IAAI,CAAC,eAAe,EAAE;MAChCC,MAAM,EAAElB,mBAAO;MACfmB,MAAM,EAAErB,mBAAO,CAACsB,UAAU;MAC1BV,aAAa;MACbW,IAAI,EAAE;QAACV,SAAS;QAAEC,SAAS;QAAEC;MAAa;IAC5C,CAAC,CAAC;IACF,IAAI,CAAC9B,cAAc,CAACuC,SAAS,CAAC,CAC5BC,6BAAkB,CAACC,+BAA+B,EAClDD,6BAAkB,CAACE,8BAA8B,CAClD,CAAC;IAEF,IAAI;MACF,MAAMC,OAAO,GAAG,IAAI,CAACtC,UAAU,CAAC,CAAC;MACjC,MAAMuC,KAAK,GAAG,IAAI,CAAC7C,KAAK,CAAC8C,WAAW,CAACC,QAAQ,CAAC,CAAC;MAC/C,MAAMC,QAAQ,GAAI,MAAM,IAAI,CAAChD,KAAK,CAACiD,OAAO,CAAC;QACzCC,GAAG,EAAE,GAAGN,OAAO,GAAGO,iCAAqB,CAACC,KAAK,EAAE;QAC/Cf,MAAM,EAAEgB,mBAAY,CAACC,IAAI;QACzBC,aAAa,EAAE,IAAI;QACnBC,IAAI,EAAE;UACJ7B,OAAO;UACPkB,KAAK;UACLhB,SAAS;UACTC,SAAS;UACT2B,YAAY,EAAE;YACZlB,IAAI,EAAE;cACJ,GAAGR,aAAa;cAChBH,aAAa;cACb8B,eAAe,EAAEC,MAAM,CAACC,IAAI,CAACC,GAAG,CAAC,CAAC,CAAC;cACnC7B,YAAY;cACZC;YACF;UACF;QACF;MACF,CAAC,CAAmB;MAEpB,IAAI,CAAChC,cAAc,CAAC6D,UAAU,CAC5BrB,6BAAkB,CAACC,+BAA+B,EAClD;QAACf,OAAO;QAAEkB,KAAK;QAAEjB,aAAa;QAAEC,SAAS;QAAEC;MAAS,CAAC,EACrD,CAAC,aAAa,CAChB,CAAC;MAED,OAAOkB,QAAQ,EAAEQ,IAAI,IAAI,CAAC,CAAC;IAC7B,CAAC,CAAC,OAAO5C,KAAK,EAAE;MACd,IAAI,CAACX,cAAc,CAAC6D,UAAU,CAC5BrB,6BAAkB,CAACE,8BAA8B,EACjD;QACEf,aAAa;QACbC,SAAS;QACTC,SAAS;QACTlB,KAAK,EAAEA,KAAK,YAAYG,KAAK,GAAGH,KAAK,CAACmD,OAAO,GAAGJ,MAAM,CAAC/C,KAAK;MAC9D,CAAC,EACD,CAAC,aAAa,CAChB,CAAC;MAED,MAAM;QAACA,KAAK,EAAEC;MAAa,CAAC,GAAG,IAAAC,sBAAe,EAACF,KAAK,EAAEI,mBAAO,CAACsB,UAAU,EAAEpB,mBAAO,CAAC;MAClF,MAAML,aAAa;IACrB;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACE,MAAamD,qBAAqBA,CAACC,MAAgC,EAAE;IACnE,MAAM;MAACtC,OAAO;MAAEC,aAAa;MAAEsC;IAAO,CAAC,GAAGD,MAAM;IAChD,MAAME,cAAc,GAAGD,OAAO,EAAEE,IAAI,CAAC,CAAC;IACtC,MAAMpC,YAAY,GAAGiC,MAAM,CAACjC,YAAY,IAAI,IAAI;IAChD,MAAMC,UAAU,GAAG,aAAa,IAAAoC,QAAM,EAAC,CAAC,EAAE;IAC1C,MAAMvC,SAAS,GAAGqC,cAAc,GAC5BG,2BAAoB,CAACC,6BAA6B,GAClDD,2BAAoB,CAACE,eAAe;IAExC,MAAMC,aAAa,GAAG;MACpBrC,MAAM,EAAElB,mBAAO;MACfmB,MAAM,EAAErB,mBAAO,CAAC0D,wBAAwB;MACxC9C,aAAa;MACbK,UAAU;MACVM,IAAI,EAAE;QAACT;MAAS;IAClB,CAAC;IAEDI,oBAAW,CAACC,IAAI,CAAC,iCAAiC,EAAEsC,aAAa,CAAC;IAElE,IAAI,CAACxE,cAAc,CAACuC,SAAS,CAAC,CAC5BC,6BAAkB,CAACkC,6CAA6C,EAChElC,6BAAkB,CAACmC,4CAA4C,CAChE,CAAC;IAEF,IAAI;MACF,IAAI,CAAC,IAAI,CAACvE,SAAS,EAAEwE,kBAAkB,EAAEC,MAAM,EAAE;QAC/C,MAAM;UAAClE,KAAK,EAAEC;QAAa,CAAC,GAAG,IAAAC,sBAAe,EAC5C,IAAIC,KAAK,CAAC,iCAAiC,CAAC,EAC5CC,mBAAO,CAAC0D,wBAAwB,EAChCxD,mBACF,CAAC;QACD,MAAML,aAAa;MACrB;MAEA,MAAMgC,KAAK,GAAG,IAAI,CAAC7C,KAAK,CAAC8C,WAAW,CAACC,QAAQ,CAAC,CAAC;MAE/C,MAAMC,QAAQ,GAAG,MAAM,IAAI,CAACtB,SAAS,CACnCC,OAAO,EACPC,aAAa,EACbmD,2BAAoB,CAACC,YAAY,EACjClD,SAAS,EACTqC,cAAc,KAAKc,SAAS,GAAG;QAACf,OAAO,EAAEC;MAAc,CAAC,GAAGc,SAAS,EACpEjD,YAAY,EACZC,UACF,CAAC;MAED,IAAI,CAAChC,cAAc,CAAC6D,UAAU,CAC5BrB,6BAAkB,CAACkC,6CAA6C,EAChE;QACEhD,OAAO;QACPkB,KAAK;QACLjB,aAAa;QACbE,SAAS;QACTG,UAAU;QACViC;MACF,CAAC,EACD,CAAC,aAAa,CAChB,CAAC;MACDhC,oBAAW,CAACgD,GAAG,CAAC,wCAAwC,EAAET,aAAa,CAAC;MAExE,OAAOzB,QAAQ;IACjB,CAAC,CAAC,OAAOpC,KAAK,EAAE;MACdsB,oBAAW,CAACtB,KAAK,CAAC,qCAAqC,EAAE;QAAC,GAAG6D,aAAa;QAAE7D;MAAK,CAAC,CAAC;MACnF,IAAI,CAACX,cAAc,CAAC6D,UAAU,CAC5BrB,6BAAkB,CAACmC,4CAA4C,EAC/D;QACEjD,OAAO;QACPC,aAAa;QACbK,UAAU;QACVH,SAAS;QACTlB,KAAK,EAAEA,KAAK,YAAYG,KAAK,GAAGH,KAAK,CAACmD,OAAO,GAAGJ,MAAM,CAAC/C,KAAK;MAC9D,CAAC,EACD,CAAC,aAAa,CAChB,CAAC;MAED,MAAM;QAACA,KAAK,EAAEC;MAAa,CAAC,GAAG,IAAAC,sBAAe,EAC5CF,KAAK,EACLI,mBAAO,CAAC0D,wBAAwB,EAChCxD,mBACF,CAAC;MACD,MAAML,aAAa;IACrB;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACE,MAAasE,gCAAgCA,CAC3ClB,MAA0C,EACR;IAClC,MAAM;MAACtC,OAAO;MAAEC,aAAa;MAAEwD,cAAc;MAAEC;IAAQ,CAAC,GAAGpB,MAAM;IACjE,MAAMqB,UAAU,GAAG,eAAe;IAClC,MAAMtD,YAAY,GAAGiC,MAAM,CAACjC,YAAY,IAAI,IAAI;IAChD,MAAMC,UAAU,GAAG,aAAa,IAAAoC,QAAM,EAAC,CAAC,EAAE;IAE1C,MAAMI,aAAa,GAAG;MACpBrC,MAAM,EAAElB,mBAAO;MACfmB,MAAM,EAAErB,mBAAO,CAACuE,qCAAqC;MACrD3D,aAAa;MACbK,UAAU;MACVM,IAAI,EAAE;QAAC8C,QAAQ;QAAED;MAAc;IACjC,CAAC;IAEDlD,oBAAW,CAACC,IAAI,CAAC,0CAA0C,EAAEsC,aAAa,CAAC;IAE3E,IAAI,CAACxE,cAAc,CAACuC,SAAS,CAAC,CAC5BC,6BAAkB,CAAC+C,0DAA0D,EAC7E/C,6BAAkB,CAACgD,yDAAyD,CAC7E,CAAC;IAEF,IAAI;MACF,IAAI,CAAC,IAAI,CAACpF,SAAS,EAAEwE,kBAAkB,EAAEC,MAAM,EAAE;QAC/C,MAAM;UAAClE,KAAK,EAAEC;QAAa,CAAC,GAAG,IAAAC,sBAAe,EAC5C,IAAIC,KAAK,CAAC,iCAAiC,CAAC,EAC5CC,mBAAO,CAACuE,qCAAqC,EAC7CrE,mBACF,CAAC;QACD,MAAML,aAAa;MACrB;MAEA,MAAMgC,KAAK,GAAG,IAAI,CAAC7C,KAAK,CAAC8C,WAAW,CAACC,QAAQ,CAAC,CAAC;MAC/C,MAAMC,QAAQ,GAAG,MAAM,IAAI,CAACtB,SAAS,CACnCC,OAAO,EACPC,aAAa,EACbmD,2BAAoB,CAACC,YAAY,EACjCV,2BAAoB,CAACoB,+BAA+B,EACpD;QACEN,cAAc;QACdO,UAAU,EAAE;UACVL,UAAU;UACVD;QACF;MACF,CAAC,EACDrD,YAAY,EACZC,UACF,CAAC;MAED,IAAI,CAAChC,cAAc,CAAC6D,UAAU,CAC5BrB,6BAAkB,CAAC+C,0DAA0D,EAC7E;QACE7D,OAAO;QACPkB,KAAK;QACLjB,aAAa;QACbwD,cAAc;QACdC,QAAQ;QACRpD;MACF,CAAC,EACD,CAAC,aAAa,CAChB,CAAC;MACDC,oBAAW,CAACgD,GAAG,CAAC,uCAAuC,EAAET,aAAa,CAAC;MAEvE,OAAOzB,QAAQ;IACjB,CAAC,CAAC,OAAOpC,KAAK,EAAE;MACdsB,oBAAW,CAACtB,KAAK,CAAC,yCAAyC,EAAE;QAAC,GAAG6D,aAAa;QAAE7D;MAAK,CAAC,CAAC;MACvF,IAAI,CAACX,cAAc,CAAC6D,UAAU,CAC5BrB,6BAAkB,CAACgD,yDAAyD,EAC5E;QACE9D,OAAO;QACPC,aAAa;QACbwD,cAAc;QACdC,QAAQ;QACRpD,UAAU;QACVrB,KAAK,EAAEA,KAAK,YAAYG,KAAK,GAAGH,KAAK,CAACmD,OAAO,GAAGJ,MAAM,CAAC/C,KAAK;MAC9D,CAAC,EACD,CAAC,aAAa,CAChB,CAAC;MAED,MAAM;QAACA,KAAK,EAAEC;MAAa,CAAC,GAAG,IAAAC,sBAAe,EAC5CF,KAAK,EACLI,mBAAO,CAACuE,qCAAqC,EAC7CrE,mBACF,CAAC;MACD,MAAML,aAAa;IACrB;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,MAAa+E,wBAAwBA,CACnCjE,OAAe,EACfC,aAAqB,EACiB;IACtCM,oBAAW,CAACC,IAAI,CAAC,+BAA+B,EAAE;MAChDC,MAAM,EAAElB,mBAAO;MACfmB,MAAM,EAAErB,mBAAO,CAAC6E,0BAA0B;MAC1CjE;IACF,CAAC,CAAC;IACF,IAAI,CAAC3B,cAAc,CAACuC,SAAS,CAAC,CAC5BC,6BAAkB,CAACqD,+CAA+C,EAClErD,6BAAkB,CAACsD,8CAA8C,CAClE,CAAC;IACF,IAAI,CAAC,IAAI,CAAC1F,SAAS,EAAE2F,mBAAmB,EAAElB,MAAM,EAAE;MAChD,MAAM;QAAClE,KAAK,EAAEC;MAAa,CAAC,GAAG,IAAAC,sBAAe,EAC5C,IAAIC,KAAK,CAAC,qCAAqC,CAAC,EAChDC,mBAAO,CAAC6E,0BAA0B,EAClC3E,mBACF,CAAC;MACD,MAAML,aAAa;IACrB;IAEA,IAAI;MACF,MAAM+B,OAAO,GAAG,IAAI,CAACtC,UAAU,CAAC,CAAC;MACjC,MAAMuC,KAAK,GAAG,IAAI,CAAC7C,KAAK,CAAC8C,WAAW,CAACC,QAAQ,CAAC,CAAC;MAC/C,MAAMC,QAAQ,GAAI,MAAM,IAAI,CAAChD,KAAK,CAACiD,OAAO,CAAC;QACzCC,GAAG,EAAE,GAAGN,OAAO,GAAGO,iCAAqB,CAAC8C,gBAAgB,EAAE;QAC1D5D,MAAM,EAAEgB,mBAAY,CAACC,IAAI;QACzBC,aAAa,EAAE,IAAI;QACnBC,IAAI,EAAE;UACJ7B,OAAO;UACPkB,KAAK;UACLjB;QACF;MACF,CAAC,CAAmB;MAEpB,IAAI,CAAC3B,cAAc,CAAC6D,UAAU,CAC5BrB,6BAAkB,CAACqD,+CAA+C,EAClE;QAACnE,OAAO;QAAEkB,KAAK;QAAEjB;MAAa,CAAC,EAC/B,CAAC,aAAa,CAChB,CAAC;MAED,OAAOoB,QAAQ,CAACQ,IAAI;IACtB,CAAC,CAAC,OAAO5C,KAAK,EAAE;MACd,IAAI,CAACX,cAAc,CAAC6D,UAAU,CAC5BrB,6BAAkB,CAACsD,8CAA8C,EACjE;QACEnE,aAAa;QACbhB,KAAK,EAAEA,KAAK,YAAYG,KAAK,GAAGH,KAAK,CAACmD,OAAO,GAAGJ,MAAM,CAAC/C,KAAK;MAC9D,CAAC,EACD,CAAC,aAAa,CAChB,CAAC;MAED,IAAIA,KAAK,YAAYG,KAAK,EAAE;QAC1B,MAAMH,KAAK;MACb;MACA,MAAM;QAACA,KAAK,EAAEC;MAAa,CAAC,GAAG,IAAAC,sBAAe,EAC5CF,KAAK,EACLI,mBAAO,CAAC6E,0BAA0B,EAClC3E,mBACF,CAAC;MACD,MAAML,aAAa;IACrB;EACF;AACF;AAACqF,OAAA,CAAApG,cAAA,GAAAA,cAAA;AAAA,IAAAqG,QAAA,GAAAD,OAAA,CAAArG,OAAA,GAEcC,cAAc","ignoreList":[]}
|
|
@@ -7,13 +7,27 @@ exports.default = exports.EntryPoint = void 0;
|
|
|
7
7
|
var _types = require("../types");
|
|
8
8
|
var _loggerProxy = _interopRequireDefault(require("../logger-proxy"));
|
|
9
9
|
var _WebexRequest = _interopRequireDefault(require("./core/WebexRequest"));
|
|
10
|
-
var _PageCache =
|
|
10
|
+
var _PageCache = require("../utils/PageCache");
|
|
11
11
|
var _MetricsManager = _interopRequireDefault(require("../metrics/MetricsManager"));
|
|
12
12
|
var _constants = require("./constants");
|
|
13
13
|
var _constants2 = require("./config/constants");
|
|
14
14
|
var _constants3 = require("../metrics/constants");
|
|
15
|
-
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
16
15
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
16
|
+
const DEFAULT_ENTRY_POINT_ATTRIBUTES = 'id,dialledNumber,entryPointId,entryPointName';
|
|
17
|
+
const DEFAULT_ENTRY_POINT_SORT_FIELD = 'entryPointName';
|
|
18
|
+
const mergeEntryPointAttributes = attributes => {
|
|
19
|
+
const mergedAttributes = new Set(DEFAULT_ENTRY_POINT_ATTRIBUTES.split(','));
|
|
20
|
+
attributes?.split(',').map(attribute => attribute.trim()).filter(Boolean).forEach(attribute => mergedAttributes.add(attribute));
|
|
21
|
+
return Array.from(mergedAttributes).join(',');
|
|
22
|
+
};
|
|
23
|
+
const mapDialNumberEntryPoint = item => ({
|
|
24
|
+
id: item.entryPointId,
|
|
25
|
+
name: item.entryPointName,
|
|
26
|
+
...(item.dialledNumber ? {
|
|
27
|
+
number: item.dialledNumber
|
|
28
|
+
} : {})
|
|
29
|
+
});
|
|
30
|
+
|
|
17
31
|
/**
|
|
18
32
|
* EntryPoint class for managing Webex Contact Center entry points.
|
|
19
33
|
* Provides functionality to fetch, search, and paginate through entry points.
|
|
@@ -41,15 +55,13 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
|
|
|
41
55
|
* });
|
|
42
56
|
*
|
|
43
57
|
* // Search for specific entry points
|
|
44
|
-
* const searchResults = await entryPointAPI.
|
|
58
|
+
* const searchResults = await entryPointAPI.getEntryPoints({
|
|
45
59
|
* search: 'support',
|
|
46
60
|
* filter: 'type=="voice"'
|
|
47
61
|
* });
|
|
48
62
|
* ```
|
|
49
63
|
*/
|
|
50
64
|
class EntryPoint {
|
|
51
|
-
// Page cache using the common utility
|
|
52
|
-
|
|
53
65
|
/**
|
|
54
66
|
* Creates an instance of EntryPoint
|
|
55
67
|
* @param {WebexSDK} webex - The Webex SDK instance
|
|
@@ -60,21 +72,23 @@ class EntryPoint {
|
|
|
60
72
|
this.webexRequest = _WebexRequest.default.getInstance({
|
|
61
73
|
webex
|
|
62
74
|
});
|
|
63
|
-
this.pageCache = new _PageCache.default('EntryPoint');
|
|
64
75
|
this.metricsManager = _MetricsManager.default.getInstance({
|
|
65
76
|
webex
|
|
66
77
|
});
|
|
67
78
|
}
|
|
68
79
|
|
|
69
80
|
/**
|
|
70
|
-
* Fetches entry
|
|
71
|
-
*
|
|
81
|
+
* Fetches entry-point dial-number mappings for the organization with pagination support. By
|
|
82
|
+
* default, returns the agent's desktop-profile-filtered mappings in backend entry-point-name order.
|
|
83
|
+
* Search, filter, attribute, and sort parameters can customize the request while desktop-profile
|
|
84
|
+
* scoping and required mapping fields remain SDK-owned.
|
|
85
|
+
* @param {EntryPointSearchParams} [params] - Search, pagination, and compatible override parameters.
|
|
72
86
|
* @returns {Promise<EntryPointListResponse>} Promise resolving to paginated entry points
|
|
73
87
|
* @throws {Error} If the API call fails
|
|
74
88
|
* @public
|
|
75
89
|
* @example
|
|
76
90
|
* ```typescript
|
|
77
|
-
* // Get first page
|
|
91
|
+
* // Get the first page using the default entry-point policy
|
|
78
92
|
* const response = await entryPointAPI.getEntryPoints();
|
|
79
93
|
*
|
|
80
94
|
* // Get specific page with custom page size
|
|
@@ -92,57 +106,32 @@ class EntryPoint {
|
|
|
92
106
|
search,
|
|
93
107
|
filter,
|
|
94
108
|
attributes,
|
|
95
|
-
sortBy,
|
|
109
|
+
sortBy = 'name',
|
|
96
110
|
sortOrder = 'asc'
|
|
97
111
|
} = params;
|
|
98
112
|
const orgId = this.webex.credentials.getOrgId();
|
|
99
|
-
const
|
|
113
|
+
const hasCustomSort = sortBy !== 'name' || sortOrder !== 'asc';
|
|
114
|
+
const isSearchRequest = !!(search || filter || attributes || hasCustomSort);
|
|
115
|
+
const effectiveSortBy = sortBy === 'name' ? DEFAULT_ENTRY_POINT_SORT_FIELD : sortBy;
|
|
100
116
|
_loggerProxy.default.info(`Fetching entry points - orgId: ${orgId}, page: ${page}, pageSize: ${pageSize}, isSearchRequest: ${isSearchRequest}`, {
|
|
101
117
|
module: 'EntryPoint',
|
|
102
118
|
method: 'getEntryPoints'
|
|
103
119
|
});
|
|
104
|
-
|
|
105
|
-
// Check if we can use cache for simple pagination (no search/filter/attributes/sort)
|
|
106
|
-
if (this.pageCache.canUseCache({
|
|
107
|
-
search,
|
|
108
|
-
filter,
|
|
109
|
-
attributes,
|
|
110
|
-
sortBy
|
|
111
|
-
})) {
|
|
112
|
-
const cacheKey = this.pageCache.buildCacheKey(orgId, page, pageSize);
|
|
113
|
-
const cachedPage = this.pageCache.getCachedPage(cacheKey);
|
|
114
|
-
if (cachedPage) {
|
|
115
|
-
const duration = Date.now() - startTime;
|
|
116
|
-
_loggerProxy.default.log(`Returning page ${page} from cache - cacheHit: true, duration: ${duration}ms, recordCount: ${cachedPage.data.length}, pageSize: ${pageSize}`, {
|
|
117
|
-
module: 'EntryPoint',
|
|
118
|
-
method: 'getEntryPoints'
|
|
119
|
-
});
|
|
120
|
-
return {
|
|
121
|
-
data: cachedPage.data,
|
|
122
|
-
meta: {
|
|
123
|
-
page,
|
|
124
|
-
pageSize,
|
|
125
|
-
totalPages: cachedPage.totalMeta?.totalPages,
|
|
126
|
-
totalRecords: cachedPage.totalMeta?.totalRecords
|
|
127
|
-
}
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
// Start timing only for actual API calls (not cache hits)
|
|
133
120
|
this.metricsManager.timeEvent(_constants3.METRIC_EVENT_NAMES.ENTRYPOINT_FETCH_SUCCESS);
|
|
134
121
|
try {
|
|
135
|
-
// Build query parameters
|
|
136
122
|
const queryParams = new URLSearchParams({
|
|
137
123
|
page: page.toString(),
|
|
138
124
|
pageSize: pageSize.toString(),
|
|
139
|
-
|
|
125
|
+
attributes: mergeEntryPointAttributes(attributes)
|
|
140
126
|
});
|
|
141
127
|
if (search) queryParams.append('search', search);
|
|
142
128
|
if (filter) queryParams.append('filter', filter);
|
|
143
|
-
if (
|
|
144
|
-
|
|
145
|
-
|
|
129
|
+
if (effectiveSortBy) {
|
|
130
|
+
queryParams.append('sort', `${effectiveSortBy},${sortOrder.toUpperCase()}`);
|
|
131
|
+
}
|
|
132
|
+
queryParams.append('desktopProfileFilter', 'true');
|
|
133
|
+
queryParams.append('includeEntryPointName', 'true');
|
|
134
|
+
const resource = _constants2.endPointMap.entryPointDialNumberList(orgId, queryParams.toString());
|
|
146
135
|
_loggerProxy.default.log(`Making API request to fetch entry points - resource: ${resource}, service: ${_constants.WCC_API_GATEWAY}`, {
|
|
147
136
|
module: 'EntryPoint',
|
|
148
137
|
method: 'getEntryPoints'
|
|
@@ -150,11 +139,19 @@ class EntryPoint {
|
|
|
150
139
|
const response = await this.webexRequest.request({
|
|
151
140
|
service: _constants.WCC_API_GATEWAY,
|
|
152
141
|
resource,
|
|
153
|
-
method: _types.HTTP_METHODS.GET
|
|
142
|
+
method: _types.HTTP_METHODS.GET,
|
|
143
|
+
headers: {
|
|
144
|
+
'X-ORGANIZATION-ID': orgId,
|
|
145
|
+
'x-ignore-internal-data': 'false'
|
|
146
|
+
}
|
|
154
147
|
});
|
|
148
|
+
const responseBody = {
|
|
149
|
+
...response.body,
|
|
150
|
+
data: (response.body?.data ?? []).map(mapDialNumberEntryPoint)
|
|
151
|
+
};
|
|
155
152
|
const duration = Date.now() - startTime;
|
|
156
|
-
const recordCount =
|
|
157
|
-
const totalRecords =
|
|
153
|
+
const recordCount = responseBody.data.length;
|
|
154
|
+
const totalRecords = responseBody.meta?.totalRecords;
|
|
158
155
|
_loggerProxy.default.log(`Successfully retrieved ${recordCount} entry points`, {
|
|
159
156
|
module: 'EntryPoint',
|
|
160
157
|
method: 'getEntryPoints',
|
|
@@ -180,26 +177,7 @@ class EntryPoint {
|
|
|
180
177
|
isFirstPage: page === 0
|
|
181
178
|
}, ['behavioral']);
|
|
182
179
|
}
|
|
183
|
-
|
|
184
|
-
// Cache the page data for simple pagination (no search/filter/attributes/sort)
|
|
185
|
-
if (this.pageCache.canUseCache({
|
|
186
|
-
search,
|
|
187
|
-
filter,
|
|
188
|
-
attributes,
|
|
189
|
-
sortBy
|
|
190
|
-
}) && response.body?.data) {
|
|
191
|
-
const cacheKey = this.pageCache.buildCacheKey(orgId, page, pageSize);
|
|
192
|
-
this.pageCache.cachePage(cacheKey, response.body.data, response.body.meta);
|
|
193
|
-
_loggerProxy.default.log('Cached entry points data for future requests', {
|
|
194
|
-
module: 'EntryPoint',
|
|
195
|
-
method: 'getEntryPoints',
|
|
196
|
-
data: {
|
|
197
|
-
cacheKey,
|
|
198
|
-
recordCount
|
|
199
|
-
}
|
|
200
|
-
});
|
|
201
|
-
}
|
|
202
|
-
return response.body;
|
|
180
|
+
return responseBody;
|
|
203
181
|
} catch (error) {
|
|
204
182
|
const errorData = {
|
|
205
183
|
orgId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_types","require","_loggerProxy","_interopRequireDefault","_WebexRequest","_PageCache","_interopRequireWildcard","_MetricsManager","_constants","_constants2","_constants3","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","EntryPoint","constructor","webex","webexRequest","WebexRequest","getInstance","pageCache","PageCache","metricsManager","MetricsManager","getEntryPoints","params","startTime","Date","now","page","PAGINATION_DEFAULTS","PAGE","pageSize","PAGE_SIZE","search","filter","attributes","sortBy","sortOrder","orgId","credentials","getOrgId","isSearchRequest","LoggerProxy","info","module","method","canUseCache","cacheKey","buildCacheKey","cachedPage","getCachedPage","duration","log","data","length","meta","totalPages","totalMeta","totalRecords","timeEvent","METRIC_EVENT_NAMES","ENTRYPOINT_FETCH_SUCCESS","queryParams","URLSearchParams","toString","append","resource","endPointMap","entryPointList","WCC_API_GATEWAY","response","request","service","HTTP_METHODS","GET","recordCount","body","statusCode","trackEvent","isFirstPage","cachePage","error","errorData","Error","message","String","ENTRYPOINT_FETCH_FAILED","exports","_default"],"sources":["EntryPoint.ts"],"sourcesContent":["import {HTTP_METHODS, WebexSDK} from '../types';\nimport type {EntryPointRecord, EntryPointListResponse, EntryPointSearchParams} from '../types';\nimport LoggerProxy from '../logger-proxy';\nimport WebexRequest from './core/WebexRequest';\nimport PageCache, {PAGINATION_DEFAULTS} from '../utils/PageCache';\nimport MetricsManager from '../metrics/MetricsManager';\nimport {WCC_API_GATEWAY} from './constants';\nimport {endPointMap} from './config/constants';\nimport {METRIC_EVENT_NAMES} from '../metrics/constants';\n\n/**\n * EntryPoint class for managing Webex Contact Center entry points.\n * Provides functionality to fetch, search, and paginate through entry points.\n *\n * @class EntryPoint\n * @public\n * @example\n * ```typescript\n * import Webex from 'webex';\n *\n * const webex = new Webex({ credentials: 'YOUR_ACCESS_TOKEN' });\n * const cc = webex.cc;\n *\n * // Register and login first\n * await cc.register();\n * await cc.stationLogin({ teamId: 'team123', loginOption: 'BROWSER' });\n *\n * // Get EntryPoint API instance from ContactCenter\n * const entryPointAPI = cc.entryPoint;\n *\n * // Get all entry points with pagination\n * const response = await entryPointAPI.getEntryPoints({\n * page: 0,\n * pageSize: 50\n * });\n *\n * // Search for specific entry points\n * const searchResults = await entryPointAPI.searchEntryPoints({\n * search: 'support',\n * filter: 'type==\"voice\"'\n * });\n * ```\n */\nexport class EntryPoint {\n private webexRequest: WebexRequest;\n private webex: WebexSDK;\n private metricsManager: MetricsManager;\n\n // Page cache using the common utility\n private pageCache: PageCache<EntryPointRecord>;\n\n /**\n * Creates an instance of EntryPoint\n * @param {WebexSDK} webex - The Webex SDK instance\n * @public\n */\n constructor(webex: WebexSDK) {\n this.webex = webex;\n this.webexRequest = WebexRequest.getInstance({webex});\n this.pageCache = new PageCache<EntryPointRecord>('EntryPoint');\n this.metricsManager = MetricsManager.getInstance({webex});\n }\n\n /**\n * Fetches entry points for the organization with pagination support\n * @param {EntryPointSearchParams} [params] - Search and pagination parameters\n * @returns {Promise<EntryPointListResponse>} Promise resolving to paginated entry points\n * @throws {Error} If the API call fails\n * @public\n * @example\n * ```typescript\n * // Get first page of entry points\n * const response = await entryPointAPI.getEntryPoints();\n *\n * // Get specific page with custom page size\n * const response = await entryPointAPI.getEntryPoints({\n * page: 2,\n * pageSize: 25\n * });\n * ```\n */\n public async getEntryPoints(\n params: EntryPointSearchParams = {}\n ): Promise<EntryPointListResponse> {\n const startTime = Date.now();\n const {\n page = PAGINATION_DEFAULTS.PAGE,\n pageSize = PAGINATION_DEFAULTS.PAGE_SIZE,\n search,\n filter,\n attributes,\n sortBy,\n sortOrder = 'asc',\n } = params;\n\n const orgId = this.webex.credentials.getOrgId();\n const isSearchRequest = !!(search || filter || attributes || sortBy);\n\n LoggerProxy.info(\n `Fetching entry points - orgId: ${orgId}, page: ${page}, pageSize: ${pageSize}, isSearchRequest: ${isSearchRequest}`,\n {\n module: 'EntryPoint',\n method: 'getEntryPoints',\n }\n );\n\n // Check if we can use cache for simple pagination (no search/filter/attributes/sort)\n if (this.pageCache.canUseCache({search, filter, attributes, sortBy})) {\n const cacheKey = this.pageCache.buildCacheKey(orgId, page, pageSize);\n const cachedPage = this.pageCache.getCachedPage(cacheKey);\n\n if (cachedPage) {\n const duration = Date.now() - startTime;\n\n LoggerProxy.log(\n `Returning page ${page} from cache - cacheHit: true, duration: ${duration}ms, recordCount: ${cachedPage.data.length}, pageSize: ${pageSize}`,\n {\n module: 'EntryPoint',\n method: 'getEntryPoints',\n }\n );\n\n return {\n data: cachedPage.data,\n meta: {\n page,\n pageSize,\n totalPages: cachedPage.totalMeta?.totalPages,\n totalRecords: cachedPage.totalMeta?.totalRecords,\n },\n };\n }\n }\n\n // Start timing only for actual API calls (not cache hits)\n this.metricsManager.timeEvent(METRIC_EVENT_NAMES.ENTRYPOINT_FETCH_SUCCESS);\n\n try {\n // Build query parameters\n const queryParams = new URLSearchParams({\n page: page.toString(),\n pageSize: pageSize.toString(),\n sortOrder,\n });\n\n if (search) queryParams.append('search', search);\n if (filter) queryParams.append('filter', filter);\n if (attributes) queryParams.append('attributes', attributes);\n if (sortBy) queryParams.append('sortBy', sortBy);\n\n const resource = endPointMap.entryPointList(orgId, queryParams.toString());\n\n LoggerProxy.log(\n `Making API request to fetch entry points - resource: ${resource}, service: ${WCC_API_GATEWAY}`,\n {\n module: 'EntryPoint',\n method: 'getEntryPoints',\n }\n );\n\n const response = await this.webexRequest.request({\n service: WCC_API_GATEWAY,\n resource,\n method: HTTP_METHODS.GET,\n });\n\n const duration = Date.now() - startTime;\n\n const recordCount = response.body?.data?.length || 0;\n const totalRecords = response.body?.meta?.totalRecords;\n\n LoggerProxy.log(`Successfully retrieved ${recordCount} entry points`, {\n module: 'EntryPoint',\n method: 'getEntryPoints',\n data: {\n statusCode: response.statusCode,\n duration,\n recordCount,\n totalRecords,\n isSearchRequest,\n page,\n pageSize,\n },\n });\n\n // Only track metrics for search requests or first page loads to reduce metric volume\n if (isSearchRequest || page === 0) {\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.ENTRYPOINT_FETCH_SUCCESS,\n {\n orgId,\n statusCode: response.statusCode,\n recordCount,\n totalRecords,\n isSearchRequest,\n isFirstPage: page === 0,\n },\n ['behavioral']\n );\n }\n\n // Cache the page data for simple pagination (no search/filter/attributes/sort)\n if (this.pageCache.canUseCache({search, filter, attributes, sortBy}) && response.body?.data) {\n const cacheKey = this.pageCache.buildCacheKey(orgId, page, pageSize);\n this.pageCache.cachePage(cacheKey, response.body.data, response.body.meta);\n\n LoggerProxy.log('Cached entry points data for future requests', {\n module: 'EntryPoint',\n method: 'getEntryPoints',\n data: {cacheKey, recordCount},\n });\n }\n\n return response.body;\n } catch (error) {\n const errorData = {\n orgId,\n error: error instanceof Error ? error.message : String(error),\n isSearchRequest,\n page,\n pageSize,\n };\n\n LoggerProxy.error(`Failed to fetch entry points`, {\n module: 'EntryPoint',\n method: 'getEntryPoints',\n data: errorData,\n error,\n });\n\n // Track all failures for troubleshooting\n this.metricsManager.trackEvent(METRIC_EVENT_NAMES.ENTRYPOINT_FETCH_FAILED, errorData, [\n 'behavioral',\n ]);\n\n throw error;\n }\n }\n}\n\nexport default EntryPoint;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_types","require","_loggerProxy","_interopRequireDefault","_WebexRequest","_PageCache","_MetricsManager","_constants","_constants2","_constants3","e","__esModule","default","DEFAULT_ENTRY_POINT_ATTRIBUTES","DEFAULT_ENTRY_POINT_SORT_FIELD","mergeEntryPointAttributes","attributes","mergedAttributes","Set","split","map","attribute","trim","filter","Boolean","forEach","add","Array","from","join","mapDialNumberEntryPoint","item","id","entryPointId","name","entryPointName","dialledNumber","number","EntryPoint","constructor","webex","webexRequest","WebexRequest","getInstance","metricsManager","MetricsManager","getEntryPoints","params","startTime","Date","now","page","PAGINATION_DEFAULTS","PAGE","pageSize","PAGE_SIZE","search","sortBy","sortOrder","orgId","credentials","getOrgId","hasCustomSort","isSearchRequest","effectiveSortBy","LoggerProxy","info","module","method","timeEvent","METRIC_EVENT_NAMES","ENTRYPOINT_FETCH_SUCCESS","queryParams","URLSearchParams","toString","append","toUpperCase","resource","endPointMap","entryPointDialNumberList","log","WCC_API_GATEWAY","response","request","service","HTTP_METHODS","GET","headers","responseBody","body","data","duration","recordCount","length","totalRecords","meta","statusCode","trackEvent","isFirstPage","error","errorData","Error","message","String","ENTRYPOINT_FETCH_FAILED","exports","_default"],"sources":["EntryPoint.ts"],"sourcesContent":["import {HTTP_METHODS, WebexSDK} from '../types';\nimport type {EntryPointRecord, EntryPointListResponse, EntryPointSearchParams} from '../types';\nimport LoggerProxy from '../logger-proxy';\nimport WebexRequest from './core/WebexRequest';\nimport {PAGINATION_DEFAULTS} from '../utils/PageCache';\nimport MetricsManager from '../metrics/MetricsManager';\nimport {WCC_API_GATEWAY} from './constants';\nimport {endPointMap} from './config/constants';\nimport {METRIC_EVENT_NAMES} from '../metrics/constants';\n\nconst DEFAULT_ENTRY_POINT_ATTRIBUTES = 'id,dialledNumber,entryPointId,entryPointName';\nconst DEFAULT_ENTRY_POINT_SORT_FIELD = 'entryPointName';\n\ntype DialNumberEntryPointRecord = {\n id: string;\n dialledNumber?: string;\n entryPointId: string;\n entryPointName: string;\n};\n\nconst mergeEntryPointAttributes = (attributes?: string): string => {\n const mergedAttributes = new Set(DEFAULT_ENTRY_POINT_ATTRIBUTES.split(','));\n\n attributes\n ?.split(',')\n .map((attribute) => attribute.trim())\n .filter(Boolean)\n .forEach((attribute) => mergedAttributes.add(attribute));\n\n return Array.from(mergedAttributes).join(',');\n};\n\nconst mapDialNumberEntryPoint = (item: DialNumberEntryPointRecord): EntryPointRecord => ({\n id: item.entryPointId,\n name: item.entryPointName,\n ...(item.dialledNumber ? {number: item.dialledNumber} : {}),\n});\n\n/**\n * EntryPoint class for managing Webex Contact Center entry points.\n * Provides functionality to fetch, search, and paginate through entry points.\n *\n * @class EntryPoint\n * @public\n * @example\n * ```typescript\n * import Webex from 'webex';\n *\n * const webex = new Webex({ credentials: 'YOUR_ACCESS_TOKEN' });\n * const cc = webex.cc;\n *\n * // Register and login first\n * await cc.register();\n * await cc.stationLogin({ teamId: 'team123', loginOption: 'BROWSER' });\n *\n * // Get EntryPoint API instance from ContactCenter\n * const entryPointAPI = cc.entryPoint;\n *\n * // Get all entry points with pagination\n * const response = await entryPointAPI.getEntryPoints({\n * page: 0,\n * pageSize: 50\n * });\n *\n * // Search for specific entry points\n * const searchResults = await entryPointAPI.getEntryPoints({\n * search: 'support',\n * filter: 'type==\"voice\"'\n * });\n * ```\n */\nexport class EntryPoint {\n private webexRequest: WebexRequest;\n private webex: WebexSDK;\n private metricsManager: MetricsManager;\n\n /**\n * Creates an instance of EntryPoint\n * @param {WebexSDK} webex - The Webex SDK instance\n * @public\n */\n constructor(webex: WebexSDK) {\n this.webex = webex;\n this.webexRequest = WebexRequest.getInstance({webex});\n this.metricsManager = MetricsManager.getInstance({webex});\n }\n\n /**\n * Fetches entry-point dial-number mappings for the organization with pagination support. By\n * default, returns the agent's desktop-profile-filtered mappings in backend entry-point-name order.\n * Search, filter, attribute, and sort parameters can customize the request while desktop-profile\n * scoping and required mapping fields remain SDK-owned.\n * @param {EntryPointSearchParams} [params] - Search, pagination, and compatible override parameters.\n * @returns {Promise<EntryPointListResponse>} Promise resolving to paginated entry points\n * @throws {Error} If the API call fails\n * @public\n * @example\n * ```typescript\n * // Get the first page using the default entry-point policy\n * const response = await entryPointAPI.getEntryPoints();\n *\n * // Get specific page with custom page size\n * const response = await entryPointAPI.getEntryPoints({\n * page: 2,\n * pageSize: 25\n * });\n * ```\n */\n public async getEntryPoints(\n params: EntryPointSearchParams = {}\n ): Promise<EntryPointListResponse> {\n const startTime = Date.now();\n const {\n page = PAGINATION_DEFAULTS.PAGE,\n pageSize = PAGINATION_DEFAULTS.PAGE_SIZE,\n search,\n filter,\n attributes,\n sortBy = 'name',\n sortOrder = 'asc',\n } = params;\n\n const orgId = this.webex.credentials.getOrgId();\n const hasCustomSort = sortBy !== 'name' || sortOrder !== 'asc';\n const isSearchRequest = !!(search || filter || attributes || hasCustomSort);\n const effectiveSortBy = sortBy === 'name' ? DEFAULT_ENTRY_POINT_SORT_FIELD : sortBy;\n\n LoggerProxy.info(\n `Fetching entry points - orgId: ${orgId}, page: ${page}, pageSize: ${pageSize}, isSearchRequest: ${isSearchRequest}`,\n {\n module: 'EntryPoint',\n method: 'getEntryPoints',\n }\n );\n\n this.metricsManager.timeEvent(METRIC_EVENT_NAMES.ENTRYPOINT_FETCH_SUCCESS);\n\n try {\n const queryParams = new URLSearchParams({\n page: page.toString(),\n pageSize: pageSize.toString(),\n attributes: mergeEntryPointAttributes(attributes),\n });\n\n if (search) queryParams.append('search', search);\n if (filter) queryParams.append('filter', filter);\n if (effectiveSortBy) {\n queryParams.append('sort', `${effectiveSortBy},${sortOrder.toUpperCase()}`);\n }\n queryParams.append('desktopProfileFilter', 'true');\n queryParams.append('includeEntryPointName', 'true');\n\n const resource = endPointMap.entryPointDialNumberList(orgId, queryParams.toString());\n\n LoggerProxy.log(\n `Making API request to fetch entry points - resource: ${resource}, service: ${WCC_API_GATEWAY}`,\n {\n module: 'EntryPoint',\n method: 'getEntryPoints',\n }\n );\n\n const response = await this.webexRequest.request({\n service: WCC_API_GATEWAY,\n resource,\n method: HTTP_METHODS.GET,\n headers: {\n 'X-ORGANIZATION-ID': orgId,\n 'x-ignore-internal-data': 'false',\n },\n });\n\n const responseBody: EntryPointListResponse = {\n ...response.body,\n data: (response.body?.data ?? []).map(mapDialNumberEntryPoint),\n };\n\n const duration = Date.now() - startTime;\n\n const recordCount = responseBody.data.length;\n const totalRecords = responseBody.meta?.totalRecords;\n\n LoggerProxy.log(`Successfully retrieved ${recordCount} entry points`, {\n module: 'EntryPoint',\n method: 'getEntryPoints',\n data: {\n statusCode: response.statusCode,\n duration,\n recordCount,\n totalRecords,\n isSearchRequest,\n page,\n pageSize,\n },\n });\n\n // Only track metrics for search requests or first page loads to reduce metric volume\n if (isSearchRequest || page === 0) {\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.ENTRYPOINT_FETCH_SUCCESS,\n {\n orgId,\n statusCode: response.statusCode,\n recordCount,\n totalRecords,\n isSearchRequest,\n isFirstPage: page === 0,\n },\n ['behavioral']\n );\n }\n\n return responseBody;\n } catch (error) {\n const errorData = {\n orgId,\n error: error instanceof Error ? error.message : String(error),\n isSearchRequest,\n page,\n pageSize,\n };\n\n LoggerProxy.error(`Failed to fetch entry points`, {\n module: 'EntryPoint',\n method: 'getEntryPoints',\n data: errorData,\n error,\n });\n\n // Track all failures for troubleshooting\n this.metricsManager.trackEvent(METRIC_EVENT_NAMES.ENTRYPOINT_FETCH_FAILED, errorData, [\n 'behavioral',\n ]);\n\n throw error;\n }\n }\n}\n\nexport default EntryPoint;\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA,IAAAC,YAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,aAAA,GAAAD,sBAAA,CAAAF,OAAA;AACA,IAAAI,UAAA,GAAAJ,OAAA;AACA,IAAAK,eAAA,GAAAH,sBAAA,CAAAF,OAAA;AACA,IAAAM,UAAA,GAAAN,OAAA;AACA,IAAAO,WAAA,GAAAP,OAAA;AACA,IAAAQ,WAAA,GAAAR,OAAA;AAAwD,SAAAE,uBAAAO,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAExD,MAAMG,8BAA8B,GAAG,8CAA8C;AACrF,MAAMC,8BAA8B,GAAG,gBAAgB;AASvD,MAAMC,yBAAyB,GAAIC,UAAmB,IAAa;EACjE,MAAMC,gBAAgB,GAAG,IAAIC,GAAG,CAACL,8BAA8B,CAACM,KAAK,CAAC,GAAG,CAAC,CAAC;EAE3EH,UAAU,EACNG,KAAK,CAAC,GAAG,CAAC,CACXC,GAAG,CAAEC,SAAS,IAAKA,SAAS,CAACC,IAAI,CAAC,CAAC,CAAC,CACpCC,MAAM,CAACC,OAAO,CAAC,CACfC,OAAO,CAAEJ,SAAS,IAAKJ,gBAAgB,CAACS,GAAG,CAACL,SAAS,CAAC,CAAC;EAE1D,OAAOM,KAAK,CAACC,IAAI,CAACX,gBAAgB,CAAC,CAACY,IAAI,CAAC,GAAG,CAAC;AAC/C,CAAC;AAED,MAAMC,uBAAuB,GAAIC,IAAgC,KAAwB;EACvFC,EAAE,EAAED,IAAI,CAACE,YAAY;EACrBC,IAAI,EAAEH,IAAI,CAACI,cAAc;EACzB,IAAIJ,IAAI,CAACK,aAAa,GAAG;IAACC,MAAM,EAAEN,IAAI,CAACK;EAAa,CAAC,GAAG,CAAC,CAAC;AAC5D,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;AACO,MAAME,UAAU,CAAC;EAKtB;AACF;AACA;AACA;AACA;EACEC,WAAWA,CAACC,KAAe,EAAE;IAC3B,IAAI,CAACA,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACC,YAAY,GAAGC,qBAAY,CAACC,WAAW,CAAC;MAACH;IAAK,CAAC,CAAC;IACrD,IAAI,CAACI,cAAc,GAAGC,uBAAc,CAACF,WAAW,CAAC;MAACH;IAAK,CAAC,CAAC;EAC3D;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAaM,cAAcA,CACzBC,MAA8B,GAAG,CAAC,CAAC,EACF;IACjC,MAAMC,SAAS,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC;IAC5B,MAAM;MACJC,IAAI,GAAGC,8BAAmB,CAACC,IAAI;MAC/BC,QAAQ,GAAGF,8BAAmB,CAACG,SAAS;MACxCC,MAAM;MACNjC,MAAM;MACNP,UAAU;MACVyC,MAAM,GAAG,MAAM;MACfC,SAAS,GAAG;IACd,CAAC,GAAGX,MAAM;IAEV,MAAMY,KAAK,GAAG,IAAI,CAACnB,KAAK,CAACoB,WAAW,CAACC,QAAQ,CAAC,CAAC;IAC/C,MAAMC,aAAa,GAAGL,MAAM,KAAK,MAAM,IAAIC,SAAS,KAAK,KAAK;IAC9D,MAAMK,eAAe,GAAG,CAAC,EAAEP,MAAM,IAAIjC,MAAM,IAAIP,UAAU,IAAI8C,aAAa,CAAC;IAC3E,MAAME,eAAe,GAAGP,MAAM,KAAK,MAAM,GAAG3C,8BAA8B,GAAG2C,MAAM;IAEnFQ,oBAAW,CAACC,IAAI,CACd,kCAAkCP,KAAK,WAAWR,IAAI,eAAeG,QAAQ,sBAAsBS,eAAe,EAAE,EACpH;MACEI,MAAM,EAAE,YAAY;MACpBC,MAAM,EAAE;IACV,CACF,CAAC;IAED,IAAI,CAACxB,cAAc,CAACyB,SAAS,CAACC,8BAAkB,CAACC,wBAAwB,CAAC;IAE1E,IAAI;MACF,MAAMC,WAAW,GAAG,IAAIC,eAAe,CAAC;QACtCtB,IAAI,EAAEA,IAAI,CAACuB,QAAQ,CAAC,CAAC;QACrBpB,QAAQ,EAAEA,QAAQ,CAACoB,QAAQ,CAAC,CAAC;QAC7B1D,UAAU,EAAED,yBAAyB,CAACC,UAAU;MAClD,CAAC,CAAC;MAEF,IAAIwC,MAAM,EAAEgB,WAAW,CAACG,MAAM,CAAC,QAAQ,EAAEnB,MAAM,CAAC;MAChD,IAAIjC,MAAM,EAAEiD,WAAW,CAACG,MAAM,CAAC,QAAQ,EAAEpD,MAAM,CAAC;MAChD,IAAIyC,eAAe,EAAE;QACnBQ,WAAW,CAACG,MAAM,CAAC,MAAM,EAAE,GAAGX,eAAe,IAAIN,SAAS,CAACkB,WAAW,CAAC,CAAC,EAAE,CAAC;MAC7E;MACAJ,WAAW,CAACG,MAAM,CAAC,sBAAsB,EAAE,MAAM,CAAC;MAClDH,WAAW,CAACG,MAAM,CAAC,uBAAuB,EAAE,MAAM,CAAC;MAEnD,MAAME,QAAQ,GAAGC,uBAAW,CAACC,wBAAwB,CAACpB,KAAK,EAAEa,WAAW,CAACE,QAAQ,CAAC,CAAC,CAAC;MAEpFT,oBAAW,CAACe,GAAG,CACb,wDAAwDH,QAAQ,cAAcI,0BAAe,EAAE,EAC/F;QACEd,MAAM,EAAE,YAAY;QACpBC,MAAM,EAAE;MACV,CACF,CAAC;MAED,MAAMc,QAAQ,GAAG,MAAM,IAAI,CAACzC,YAAY,CAAC0C,OAAO,CAAC;QAC/CC,OAAO,EAAEH,0BAAe;QACxBJ,QAAQ;QACRT,MAAM,EAAEiB,mBAAY,CAACC,GAAG;QACxBC,OAAO,EAAE;UACP,mBAAmB,EAAE5B,KAAK;UAC1B,wBAAwB,EAAE;QAC5B;MACF,CAAC,CAAC;MAEF,MAAM6B,YAAoC,GAAG;QAC3C,GAAGN,QAAQ,CAACO,IAAI;QAChBC,IAAI,EAAE,CAACR,QAAQ,CAACO,IAAI,EAAEC,IAAI,IAAI,EAAE,EAAEtE,GAAG,CAACU,uBAAuB;MAC/D,CAAC;MAED,MAAM6D,QAAQ,GAAG1C,IAAI,CAACC,GAAG,CAAC,CAAC,GAAGF,SAAS;MAEvC,MAAM4C,WAAW,GAAGJ,YAAY,CAACE,IAAI,CAACG,MAAM;MAC5C,MAAMC,YAAY,GAAGN,YAAY,CAACO,IAAI,EAAED,YAAY;MAEpD7B,oBAAW,CAACe,GAAG,CAAC,0BAA0BY,WAAW,eAAe,EAAE;QACpEzB,MAAM,EAAE,YAAY;QACpBC,MAAM,EAAE,gBAAgB;QACxBsB,IAAI,EAAE;UACJM,UAAU,EAAEd,QAAQ,CAACc,UAAU;UAC/BL,QAAQ;UACRC,WAAW;UACXE,YAAY;UACZ/B,eAAe;UACfZ,IAAI;UACJG;QACF;MACF,CAAC,CAAC;;MAEF;MACA,IAAIS,eAAe,IAAIZ,IAAI,KAAK,CAAC,EAAE;QACjC,IAAI,CAACP,cAAc,CAACqD,UAAU,CAC5B3B,8BAAkB,CAACC,wBAAwB,EAC3C;UACEZ,KAAK;UACLqC,UAAU,EAAEd,QAAQ,CAACc,UAAU;UAC/BJ,WAAW;UACXE,YAAY;UACZ/B,eAAe;UACfmC,WAAW,EAAE/C,IAAI,KAAK;QACxB,CAAC,EACD,CAAC,YAAY,CACf,CAAC;MACH;MAEA,OAAOqC,YAAY;IACrB,CAAC,CAAC,OAAOW,KAAK,EAAE;MACd,MAAMC,SAAS,GAAG;QAChBzC,KAAK;QACLwC,KAAK,EAAEA,KAAK,YAAYE,KAAK,GAAGF,KAAK,CAACG,OAAO,GAAGC,MAAM,CAACJ,KAAK,CAAC;QAC7DpC,eAAe;QACfZ,IAAI;QACJG;MACF,CAAC;MAEDW,oBAAW,CAACkC,KAAK,CAAC,8BAA8B,EAAE;QAChDhC,MAAM,EAAE,YAAY;QACpBC,MAAM,EAAE,gBAAgB;QACxBsB,IAAI,EAAEU,SAAS;QACfD;MACF,CAAC,CAAC;;MAEF;MACA,IAAI,CAACvD,cAAc,CAACqD,UAAU,CAAC3B,8BAAkB,CAACkC,uBAAuB,EAAEJ,SAAS,EAAE,CACpF,YAAY,CACb,CAAC;MAEF,MAAMD,KAAK;IACb;EACF;AACF;AAACM,OAAA,CAAAnE,UAAA,GAAAA,UAAA;AAAA,IAAAoE,QAAA,GAAAD,OAAA,CAAA7F,OAAA,GAEc0B,UAAU","ignoreList":[]}
|