@webex/contact-center 3.12.0-next.16 → 3.12.0-next.161
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 +887 -0
- package/AGENTS.md +94 -0
- package/ai-docs/ARCHITECTURE.md +168 -0
- package/ai-docs/CONTRACTS.md +62 -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 +52 -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 +385 -0
- package/ai-docs/features/consult-transfer-list-policy/spec/feature-spec.md +362 -0
- package/ai-docs/features/contact-owner-change-refactor.md +78 -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 +888 -49
- package/dist/cc.js.map +1 -1
- package/dist/config.js +13 -0
- package/dist/config.js.map +1 -1
- package/dist/constants.js +38 -3
- package/dist/constants.js.map +1 -1
- package/dist/index.js +54 -17
- package/dist/index.js.map +1 -1
- package/dist/metrics/MetricsManager.js +16 -0
- package/dist/metrics/MetricsManager.js.map +1 -1
- package/dist/metrics/behavioral-events.js +185 -0
- package/dist/metrics/behavioral-events.js.map +1 -1
- package/dist/metrics/constants.js +54 -4
- 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 +202 -0
- package/dist/services/AnswerCallOnWebexService.js.map +1 -0
- package/dist/services/ApiAiAssistant.js +369 -14
- package/dist/services/ApiAiAssistant.js.map +1 -1
- 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/WebCallingService.js +10 -2
- package/dist/services/WebCallingService.js.map +1 -1
- package/dist/services/WebexCrossClientService.js +225 -0
- package/dist/services/WebexCrossClientService.js.map +1 -0
- package/dist/services/WxAppTelephonyMercurySync.js +111 -0
- package/dist/services/WxAppTelephonyMercurySync.js.map +1 -0
- package/dist/services/config/Util.js +48 -48
- package/dist/services/config/Util.js.map +1 -1
- package/dist/services/config/constants.js +56 -78
- package/dist/services/config/constants.js.map +1 -1
- package/dist/services/config/index.js +100 -226
- package/dist/services/config/index.js.map +1 -1
- package/dist/services/config/types.js +93 -24
- package/dist/services/config/types.js.map +1 -1
- package/dist/services/constants.js +11 -1
- package/dist/services/constants.js.map +1 -1
- package/dist/services/core/Err.js.map +1 -1
- package/dist/services/core/Utils.js +131 -32
- 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 +17 -11
- package/dist/services/core/aqm-reqs.js.map +1 -1
- package/dist/services/core/constants.js +9 -1
- package/dist/services/core/constants.js.map +1 -1
- package/dist/services/core/types.js.map +1 -1
- package/dist/services/core/websocket/WebSocketManager.js +19 -2
- 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 +955 -0
- package/dist/services/task/Task.js.map +1 -0
- package/dist/services/task/TaskFactory.js +50 -0
- package/dist/services/task/TaskFactory.js.map +1 -0
- package/dist/services/task/TaskManager.js +1272 -605
- package/dist/services/task/TaskManager.js.map +1 -1
- package/dist/services/task/TaskUtils.js +221 -27
- 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 +19 -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/digital/Digital.js +78 -0
- package/dist/services/task/digital/Digital.js.map +1 -0
- package/dist/services/task/state-machine/TaskStateMachine.js +982 -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 +379 -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 +215 -5
- package/dist/services/task/types.js.map +1 -1
- package/dist/services/task/voice/Voice.js +1504 -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/wxAppOfferObservability.js +145 -0
- package/dist/services/task/voice/wxAppOfferObservability.js.map +1 -0
- package/dist/services/task/voice/wxAppVoiceMethods.js +395 -0
- package/dist/services/task/voice/wxAppVoiceMethods.js.map +1 -0
- package/dist/services/wxAppDiagnosticLogging.js +159 -0
- package/dist/services/wxAppDiagnosticLogging.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 +152 -9
- package/dist/types/config.d.ts +13 -0
- package/dist/types/constants.d.ts +36 -1
- package/dist/types/index.d.ts +54 -20
- package/dist/types/metrics/MetricsManager.d.ts +6 -0
- package/dist/types/metrics/constants.d.ts +48 -1
- package/dist/types/services/AddressBook.d.ts +2 -1
- package/dist/types/services/AnswerCallOnWebexService.d.ts +38 -0
- package/dist/types/services/ApiAiAssistant.d.ts +67 -5
- package/dist/types/services/EntryPoint.d.ts +7 -5
- package/dist/types/services/Queue.d.ts +5 -3
- package/dist/types/services/UserPreference.d.ts +118 -0
- package/dist/types/services/WebexCrossClientService.d.ts +32 -0
- package/dist/types/services/WxAppTelephonyMercurySync.d.ts +28 -0
- package/dist/types/services/config/Util.d.ts +4 -8
- package/dist/types/services/config/constants.d.ts +49 -76
- package/dist/types/services/config/index.d.ts +16 -64
- package/dist/types/services/config/types.d.ts +240 -114
- package/dist/types/services/constants.d.ts +9 -0
- package/dist/types/services/core/Err.d.ts +2 -0
- package/dist/types/services/core/Utils.d.ts +43 -13
- package/dist/types/services/core/WebexRequest.d.ts +1 -0
- package/dist/types/services/core/constants.d.ts +7 -0
- package/dist/types/services/core/types.d.ts +2 -0
- 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 +186 -0
- package/dist/types/services/task/TaskFactory.d.ts +14 -0
- package/dist/types/services/task/TaskUtils.d.ts +54 -2
- package/dist/types/services/task/WebexCallingUtils.d.ts +11 -0
- package/dist/types/services/task/constants.d.ts +17 -0
- package/dist/types/services/task/contact.d.ts +4 -0
- package/dist/types/services/task/digital/Digital.d.ts +23 -0
- package/dist/types/services/task/state-machine/TaskStateMachine.d.ts +1442 -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 +738 -66
- package/dist/types/services/task/voice/Voice.d.ts +241 -0
- package/dist/types/services/task/voice/WebRTC.d.ts +54 -0
- package/dist/types/services/task/voice/wxAppOfferObservability.d.ts +39 -0
- package/dist/types/services/task/voice/wxAppVoiceMethods.d.ts +68 -0
- package/dist/types/services/wxAppDiagnosticLogging.d.ts +63 -0
- package/dist/types/services/wxAppTelephonyUtils.d.ts +5 -0
- package/dist/types/types.d.ts +213 -11
- package/dist/types/utils/PageCache.d.ts +20 -3
- package/dist/types/webex.d.ts +1 -0
- package/dist/types.js +168 -6
- 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 +22 -2
- package/dist/webex.js.map +1 -1
- package/package.json +16 -12
- package/src/cc.ts +1137 -67
- package/src/config.ts +13 -0
- package/src/constants.ts +39 -1
- package/src/index.ts +62 -15
- package/src/metrics/MetricsManager.ts +16 -0
- 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 +971 -0
- package/src/metrics/behavioral-events.ts +190 -0
- package/src/metrics/constants.ts +59 -4
- package/src/services/AddressBook.ts +17 -6
- package/src/services/AnswerCallOnWebexService.ts +239 -0
- package/src/services/ApiAiAssistant.ts +494 -15
- package/src/services/EntryPoint.ts +59 -60
- package/src/services/Queue.ts +29 -12
- package/src/services/UserPreference.ts +509 -0
- package/src/services/WebCallingService.ts +16 -2
- package/src/services/WebexCrossClientService.ts +298 -0
- package/src/services/WxAppTelephonyMercurySync.ts +142 -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 +505 -0
- package/src/services/ai-docs/AGENTS.md +386 -0
- package/src/services/ai-docs/services-spec.md +512 -0
- package/src/services/config/Util.ts +54 -84
- package/src/services/config/ai-docs/AGENTS.md +250 -0
- package/src/services/config/ai-docs/ARCHITECTURE.md +413 -0
- package/src/services/config/ai-docs/config-spec.md +669 -0
- package/src/services/config/constants.ts +63 -85
- package/src/services/config/index.ts +116 -277
- package/src/services/config/types.ts +229 -125
- package/src/services/constants.ts +10 -0
- package/src/services/core/Err.ts +1 -0
- package/src/services/core/Utils.ts +151 -37
- 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 +797 -0
- package/src/services/core/aqm-reqs.ts +18 -12
- package/src/services/core/constants.ts +8 -0
- package/src/services/core/types.ts +33 -1
- package/src/services/core/websocket/WebSocketManager.ts +28 -2
- package/src/services/core/websocket/types.ts +1 -1
- package/src/services/index.ts +1 -1
- package/src/services/task/Task.ts +1211 -0
- package/src/services/task/TaskFactory.ts +82 -0
- package/src/services/task/TaskManager.ts +1585 -724
- package/src/services/task/TaskUtils.ts +316 -25
- 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 +1501 -0
- package/src/services/task/constants.ts +18 -0
- package/src/services/task/contact.ts +30 -0
- package/src/services/task/digital/Digital.ts +102 -0
- package/src/services/task/state-machine/TaskStateMachine.ts +1320 -0
- package/src/services/task/state-machine/actions.ts +741 -0
- package/src/services/task/state-machine/ai-docs/AGENTS.md +460 -0
- package/src/services/task/state-machine/ai-docs/ARCHITECTURE.md +1156 -0
- package/src/services/task/state-machine/ai-docs/task-state-machine-spec.md +2247 -0
- package/src/services/task/state-machine/constants.ts +172 -0
- package/src/services/task/state-machine/guards.ts +442 -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 +918 -70
- package/src/services/task/voice/Voice.ts +1878 -0
- package/src/services/task/voice/WebRTC.ts +194 -0
- package/src/services/task/voice/wxAppOfferObservability.ts +204 -0
- package/src/services/task/voice/wxAppVoiceMethods.ts +575 -0
- package/src/services/wxAppDiagnosticLogging.ts +286 -0
- package/src/services/wxAppTelephonyUtils.ts +14 -0
- package/src/types.ts +272 -13
- 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 +10 -0
- package/test/unit/fixtures/aiSummaryTestUtils.ts +40 -0
- package/test/unit/spec/cc.ts +3553 -107
- package/test/unit/spec/index.ts +885 -0
- package/test/unit/spec/logger-proxy.ts +70 -0
- package/test/unit/spec/metrics/MetricsManager.ts +25 -0
- package/test/unit/spec/metrics/behavioral-events.ts +60 -0
- package/test/unit/spec/services/AddressBook.ts +37 -6
- package/test/unit/spec/services/AnswerCallOnWebexService.ts +264 -0
- package/test/unit/spec/services/ApiAiAssistant.ts +442 -23
- 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 +45 -1
- package/test/unit/spec/services/WebexCrossClientService.ts +509 -0
- package/test/unit/spec/services/WxAppTelephonyMercurySync.ts +136 -0
- package/test/unit/spec/services/config/Util.ts +501 -0
- package/test/unit/spec/services/config/index.ts +317 -547
- package/test/unit/spec/services/core/Utils.ts +447 -8
- package/test/unit/spec/services/core/WebexRequest.ts +8 -7
- package/test/unit/spec/services/core/aqm-reqs.ts +142 -1
- package/test/unit/spec/services/core/websocket/WebSocketManager.ts +129 -53
- package/test/unit/spec/services/task/AutoWrapup.ts +63 -0
- package/test/unit/spec/services/task/Task.ts +2723 -0
- package/test/unit/spec/services/task/TaskFactory.ts +116 -0
- package/test/unit/spec/services/task/TaskManager.ts +4734 -1769
- package/test/unit/spec/services/task/TaskUtils.ts +307 -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/digital/Digital.ts +105 -0
- package/test/unit/spec/services/task/state-machine/TaskStateMachine.ts +4060 -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 +2355 -0
- package/test/unit/spec/services/task/voice/WebRTC.ts +235 -0
- package/test/unit/spec/services/task/voice/wxAppOfferObservability.ts +361 -0
- package/test/unit/spec/services/task/voice/wxAppVoiceMethods.ts +719 -0
- package/test/unit/spec/services/wxAppDiagnosticLogging.ts +179 -0
- package/test/unit/spec/wellnessSampleUtils.ts +288 -0
- package/typedoc.md +1 -1
- 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
|
@@ -0,0 +1,427 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = exports.UserPreference = void 0;
|
|
7
|
+
var _types = require("../types");
|
|
8
|
+
var _loggerProxy = _interopRequireDefault(require("../logger-proxy"));
|
|
9
|
+
var _WebexRequest = _interopRequireDefault(require("./core/WebexRequest"));
|
|
10
|
+
var _MetricsManager = _interopRequireDefault(require("../metrics/MetricsManager"));
|
|
11
|
+
var _constants = require("./constants");
|
|
12
|
+
var _constants2 = require("./config/constants");
|
|
13
|
+
var _constants3 = require("../metrics/constants");
|
|
14
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
15
|
+
/**
|
|
16
|
+
* UserPreference API class for managing Webex Contact Center user preferences.
|
|
17
|
+
* Provides functionality to get, create, update, and delete user preferences.
|
|
18
|
+
*
|
|
19
|
+
* @class UserPreference
|
|
20
|
+
* @public
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* import Webex from 'webex';
|
|
24
|
+
*
|
|
25
|
+
* const webex = new Webex({ credentials: 'YOUR_ACCESS_TOKEN' });
|
|
26
|
+
* const cc = webex.cc;
|
|
27
|
+
*
|
|
28
|
+
* // Register and login first
|
|
29
|
+
* await cc.register();
|
|
30
|
+
* await cc.stationLogin({ teamId: 'team123', loginOption: 'BROWSER' });
|
|
31
|
+
*
|
|
32
|
+
* // Get UserPreference API instance from ContactCenter
|
|
33
|
+
* const userPreferenceAPI = cc.userPreference;
|
|
34
|
+
*
|
|
35
|
+
* // Get user preferences for the current user
|
|
36
|
+
* const preferences = await userPreferenceAPI.getUserPreference();
|
|
37
|
+
*
|
|
38
|
+
* // Create new user preferences
|
|
39
|
+
* const newPreferences = await userPreferenceAPI.createUserPreference({
|
|
40
|
+
* userId: 'user123',
|
|
41
|
+
* preferences: { e911Reminder: true }
|
|
42
|
+
* });
|
|
43
|
+
*
|
|
44
|
+
* // Update user preferences
|
|
45
|
+
* const updatedPreferences = await userPreferenceAPI.updateUserPreference('user123', {
|
|
46
|
+
* preferences: { e911Reminder: false }
|
|
47
|
+
* });
|
|
48
|
+
*
|
|
49
|
+
* // Delete user preferences
|
|
50
|
+
* await userPreferenceAPI.deleteUserPreference('user123');
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
class UserPreference {
|
|
54
|
+
/**
|
|
55
|
+
* Creates an instance of UserPreference
|
|
56
|
+
* @param {WebexSDK} webex - The Webex SDK instance
|
|
57
|
+
* @param {() => string} getUserId - Function to get the current user's CI user ID
|
|
58
|
+
* @public
|
|
59
|
+
*/
|
|
60
|
+
constructor(webex, getUserId) {
|
|
61
|
+
this.webex = webex;
|
|
62
|
+
this.webexRequest = _WebexRequest.default.getInstance({
|
|
63
|
+
webex
|
|
64
|
+
});
|
|
65
|
+
this.getUserId = getUserId;
|
|
66
|
+
this.metricsManager = _MetricsManager.default.getInstance({
|
|
67
|
+
webex
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Fetches user preferences for a specific user
|
|
73
|
+
* @param {GetUserPreferenceParams} [params] - Optional parameters for fetching preferences
|
|
74
|
+
* @param {string} [params.userId] - User ID to fetch preferences for. Defaults to current user's CI user ID.
|
|
75
|
+
* @param {number} [params.page=0] - Page number (0-indexed). Default: 0
|
|
76
|
+
* @param {number} [params.pageSize=100] - Number of items per page. Default: 100
|
|
77
|
+
* @returns {Promise<UserPreferenceResponse>} Promise resolving to user preferences
|
|
78
|
+
* @throws {Error} If the API call fails
|
|
79
|
+
* @public
|
|
80
|
+
* @example
|
|
81
|
+
* ```typescript
|
|
82
|
+
* // Get preferences for current user
|
|
83
|
+
* const preferences = await userPreferenceAPI.getUserPreference();
|
|
84
|
+
*
|
|
85
|
+
* // Get preferences for a specific user
|
|
86
|
+
* const preferences = await userPreferenceAPI.getUserPreference({ userId: 'user123' });
|
|
87
|
+
*
|
|
88
|
+
* // Get preferences with pagination
|
|
89
|
+
* const preferences = await userPreferenceAPI.getUserPreference({ page: 0, pageSize: 50 });
|
|
90
|
+
* ```
|
|
91
|
+
*/
|
|
92
|
+
async getUserPreference(params) {
|
|
93
|
+
const {
|
|
94
|
+
userId,
|
|
95
|
+
page,
|
|
96
|
+
pageSize
|
|
97
|
+
} = params || {};
|
|
98
|
+
const targetUserId = userId || this.getUserId();
|
|
99
|
+
const orgId = this.webex.credentials.getOrgId();
|
|
100
|
+
_loggerProxy.default.info('Fetching user preferences', {
|
|
101
|
+
module: 'UserPreference',
|
|
102
|
+
method: 'getUserPreference',
|
|
103
|
+
data: {
|
|
104
|
+
orgId,
|
|
105
|
+
userId: targetUserId,
|
|
106
|
+
page,
|
|
107
|
+
pageSize
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
if (!targetUserId) {
|
|
111
|
+
_loggerProxy.default.error('getUserPreference called without a valid userId', {
|
|
112
|
+
module: 'UserPreference',
|
|
113
|
+
method: 'getUserPreference',
|
|
114
|
+
data: {
|
|
115
|
+
orgId,
|
|
116
|
+
userId: targetUserId,
|
|
117
|
+
error: 'Missing userId. Ensure user is logged in or provide a userId.'
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
throw new Error('UserPreference: userId is not available.');
|
|
121
|
+
}
|
|
122
|
+
try {
|
|
123
|
+
let resource = _constants2.endPointMap.userPreference(orgId, targetUserId);
|
|
124
|
+
|
|
125
|
+
// Build query parameters if provided
|
|
126
|
+
const queryParams = [];
|
|
127
|
+
if (page !== undefined) queryParams.push(`page=${page}`);
|
|
128
|
+
if (pageSize !== undefined) queryParams.push(`pageSize=${pageSize}`);
|
|
129
|
+
if (queryParams.length > 0) {
|
|
130
|
+
resource = `${resource}?${queryParams.join('&')}`;
|
|
131
|
+
}
|
|
132
|
+
_loggerProxy.default.info('Making API request to fetch user preferences', {
|
|
133
|
+
module: 'UserPreference',
|
|
134
|
+
method: 'getUserPreference',
|
|
135
|
+
data: {
|
|
136
|
+
resource,
|
|
137
|
+
service: _constants.WCC_API_GATEWAY
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
this.metricsManager.timeEvent(_constants3.METRIC_EVENT_NAMES.USER_PREFERENCE_GET_SUCCESS);
|
|
141
|
+
this.metricsManager.timeEvent(_constants3.METRIC_EVENT_NAMES.USER_PREFERENCE_GET_FAILED);
|
|
142
|
+
const response = await this.webexRequest.request({
|
|
143
|
+
service: _constants.WCC_API_GATEWAY,
|
|
144
|
+
resource,
|
|
145
|
+
method: _types.HTTP_METHODS.GET
|
|
146
|
+
});
|
|
147
|
+
_loggerProxy.default.info('Successfully retrieved user preferences', {
|
|
148
|
+
module: 'UserPreference',
|
|
149
|
+
method: 'getUserPreference',
|
|
150
|
+
data: {
|
|
151
|
+
statusCode: response.statusCode,
|
|
152
|
+
userId: targetUserId
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
this.metricsManager.trackEvent(_constants3.METRIC_EVENT_NAMES.USER_PREFERENCE_GET_SUCCESS, {
|
|
156
|
+
orgId,
|
|
157
|
+
userId: targetUserId,
|
|
158
|
+
statusCode: response.statusCode
|
|
159
|
+
}, ['behavioral', 'operational']);
|
|
160
|
+
return response.body;
|
|
161
|
+
} catch (error) {
|
|
162
|
+
const errorData = {
|
|
163
|
+
orgId,
|
|
164
|
+
userId: targetUserId,
|
|
165
|
+
error: error instanceof Error ? error.message : String(error)
|
|
166
|
+
};
|
|
167
|
+
_loggerProxy.default.error('Failed to fetch user preferences', {
|
|
168
|
+
module: 'UserPreference',
|
|
169
|
+
method: 'getUserPreference',
|
|
170
|
+
data: errorData,
|
|
171
|
+
error
|
|
172
|
+
});
|
|
173
|
+
this.metricsManager.trackEvent(_constants3.METRIC_EVENT_NAMES.USER_PREFERENCE_GET_FAILED, errorData, ['behavioral', 'operational']);
|
|
174
|
+
throw error;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Creates new user preferences
|
|
180
|
+
* @param {CreateUserPreferenceRequest} data - The user preference data to create
|
|
181
|
+
* @returns {Promise<UserPreference>} Promise resolving to created user preferences
|
|
182
|
+
* @throws {Error} If the API call fails
|
|
183
|
+
* @public
|
|
184
|
+
* @example
|
|
185
|
+
* ```typescript
|
|
186
|
+
* const newPreferences = await userPreferenceAPI.createUserPreference({
|
|
187
|
+
* userId: 'user123',
|
|
188
|
+
* preferences: { e911Reminder: true, notificationSettings: { email: true } }
|
|
189
|
+
* });
|
|
190
|
+
* ```
|
|
191
|
+
*/
|
|
192
|
+
async createUserPreference(data) {
|
|
193
|
+
const orgId = this.webex.credentials.getOrgId();
|
|
194
|
+
_loggerProxy.default.info('Creating user preferences', {
|
|
195
|
+
module: 'UserPreference',
|
|
196
|
+
method: 'createUserPreference',
|
|
197
|
+
data: {
|
|
198
|
+
orgId,
|
|
199
|
+
userId: data.userId
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
if (!data.userId) {
|
|
203
|
+
_loggerProxy.default.error('createUserPreference called without a valid userId', {
|
|
204
|
+
module: 'UserPreference',
|
|
205
|
+
method: 'createUserPreference',
|
|
206
|
+
data: {
|
|
207
|
+
orgId,
|
|
208
|
+
error: 'Missing userId in request data.'
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
throw new Error('UserPreference: userId is required to create user preferences.');
|
|
212
|
+
}
|
|
213
|
+
try {
|
|
214
|
+
const resource = _constants2.endPointMap.userPreferenceCreate(orgId);
|
|
215
|
+
_loggerProxy.default.info('Making API request to create user preferences', {
|
|
216
|
+
module: 'UserPreference',
|
|
217
|
+
method: 'createUserPreference',
|
|
218
|
+
data: {
|
|
219
|
+
resource,
|
|
220
|
+
service: _constants.WCC_API_GATEWAY
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
this.metricsManager.timeEvent(_constants3.METRIC_EVENT_NAMES.USER_PREFERENCE_CREATE_SUCCESS);
|
|
224
|
+
this.metricsManager.timeEvent(_constants3.METRIC_EVENT_NAMES.USER_PREFERENCE_CREATE_FAILED);
|
|
225
|
+
const response = await this.webexRequest.request({
|
|
226
|
+
service: _constants.WCC_API_GATEWAY,
|
|
227
|
+
resource,
|
|
228
|
+
method: _types.HTTP_METHODS.POST,
|
|
229
|
+
body: data
|
|
230
|
+
});
|
|
231
|
+
_loggerProxy.default.info('Successfully created user preferences', {
|
|
232
|
+
module: 'UserPreference',
|
|
233
|
+
method: 'createUserPreference',
|
|
234
|
+
data: {
|
|
235
|
+
statusCode: response.statusCode,
|
|
236
|
+
userId: data.userId
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
this.metricsManager.trackEvent(_constants3.METRIC_EVENT_NAMES.USER_PREFERENCE_CREATE_SUCCESS, {
|
|
240
|
+
orgId,
|
|
241
|
+
userId: data.userId,
|
|
242
|
+
statusCode: response.statusCode
|
|
243
|
+
}, ['behavioral', 'operational']);
|
|
244
|
+
return response.body;
|
|
245
|
+
} catch (error) {
|
|
246
|
+
const errorData = {
|
|
247
|
+
orgId,
|
|
248
|
+
userId: data.userId,
|
|
249
|
+
error: error instanceof Error ? error.message : String(error)
|
|
250
|
+
};
|
|
251
|
+
_loggerProxy.default.error('Failed to create user preferences', {
|
|
252
|
+
module: 'UserPreference',
|
|
253
|
+
method: 'createUserPreference',
|
|
254
|
+
data: errorData,
|
|
255
|
+
error
|
|
256
|
+
});
|
|
257
|
+
this.metricsManager.trackEvent(_constants3.METRIC_EVENT_NAMES.USER_PREFERENCE_CREATE_FAILED, errorData, ['behavioral', 'operational']);
|
|
258
|
+
throw error;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* Updates existing user preferences
|
|
264
|
+
* @param {string} userId - User ID to update preferences for
|
|
265
|
+
* @param {UpdateUserPreferenceRequest} data - The user preference data to update
|
|
266
|
+
* @returns {Promise<UserPreference>} Promise resolving to updated user preferences
|
|
267
|
+
* @throws {Error} If the API call fails
|
|
268
|
+
* @public
|
|
269
|
+
* @example
|
|
270
|
+
* ```typescript
|
|
271
|
+
* const updatedPreferences = await userPreferenceAPI.updateUserPreference('user123', {
|
|
272
|
+
* preferences: { e911Reminder: false }
|
|
273
|
+
* });
|
|
274
|
+
* ```
|
|
275
|
+
*/
|
|
276
|
+
async updateUserPreference(userId, data) {
|
|
277
|
+
const orgId = this.webex.credentials.getOrgId();
|
|
278
|
+
_loggerProxy.default.info('Updating user preferences', {
|
|
279
|
+
module: 'UserPreference',
|
|
280
|
+
method: 'updateUserPreference',
|
|
281
|
+
data: {
|
|
282
|
+
orgId,
|
|
283
|
+
userId
|
|
284
|
+
}
|
|
285
|
+
});
|
|
286
|
+
if (!userId) {
|
|
287
|
+
_loggerProxy.default.error('updateUserPreference called without a valid userId', {
|
|
288
|
+
module: 'UserPreference',
|
|
289
|
+
method: 'updateUserPreference',
|
|
290
|
+
data: {
|
|
291
|
+
orgId,
|
|
292
|
+
error: 'Missing userId parameter.'
|
|
293
|
+
}
|
|
294
|
+
});
|
|
295
|
+
throw new Error('UserPreference: userId is required to update user preferences.');
|
|
296
|
+
}
|
|
297
|
+
try {
|
|
298
|
+
const resource = _constants2.endPointMap.userPreference(orgId, userId);
|
|
299
|
+
_loggerProxy.default.info('Making API request to update user preferences', {
|
|
300
|
+
module: 'UserPreference',
|
|
301
|
+
method: 'updateUserPreference',
|
|
302
|
+
data: {
|
|
303
|
+
resource,
|
|
304
|
+
service: _constants.WCC_API_GATEWAY
|
|
305
|
+
}
|
|
306
|
+
});
|
|
307
|
+
this.metricsManager.timeEvent(_constants3.METRIC_EVENT_NAMES.USER_PREFERENCE_UPDATE_SUCCESS);
|
|
308
|
+
this.metricsManager.timeEvent(_constants3.METRIC_EVENT_NAMES.USER_PREFERENCE_UPDATE_FAILED);
|
|
309
|
+
const response = await this.webexRequest.request({
|
|
310
|
+
service: _constants.WCC_API_GATEWAY,
|
|
311
|
+
resource,
|
|
312
|
+
method: _types.HTTP_METHODS.PUT,
|
|
313
|
+
body: data
|
|
314
|
+
});
|
|
315
|
+
_loggerProxy.default.info('Successfully updated user preferences', {
|
|
316
|
+
module: 'UserPreference',
|
|
317
|
+
method: 'updateUserPreference',
|
|
318
|
+
data: {
|
|
319
|
+
statusCode: response.statusCode,
|
|
320
|
+
userId
|
|
321
|
+
}
|
|
322
|
+
});
|
|
323
|
+
this.metricsManager.trackEvent(_constants3.METRIC_EVENT_NAMES.USER_PREFERENCE_UPDATE_SUCCESS, {
|
|
324
|
+
orgId,
|
|
325
|
+
userId,
|
|
326
|
+
statusCode: response.statusCode
|
|
327
|
+
}, ['behavioral', 'operational']);
|
|
328
|
+
return response.body;
|
|
329
|
+
} catch (error) {
|
|
330
|
+
const errorData = {
|
|
331
|
+
orgId,
|
|
332
|
+
userId,
|
|
333
|
+
error: error instanceof Error ? error.message : String(error)
|
|
334
|
+
};
|
|
335
|
+
_loggerProxy.default.error('Failed to update user preferences', {
|
|
336
|
+
module: 'UserPreference',
|
|
337
|
+
method: 'updateUserPreference',
|
|
338
|
+
data: errorData,
|
|
339
|
+
error
|
|
340
|
+
});
|
|
341
|
+
this.metricsManager.trackEvent(_constants3.METRIC_EVENT_NAMES.USER_PREFERENCE_UPDATE_FAILED, errorData, ['behavioral', 'operational']);
|
|
342
|
+
throw error;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
/**
|
|
347
|
+
* Deletes user preferences for a specific user
|
|
348
|
+
* @param {string} userId - User ID to delete preferences for
|
|
349
|
+
* @returns {Promise<void>} Promise resolving when deletion is complete
|
|
350
|
+
* @throws {Error} If the API call fails
|
|
351
|
+
* @public
|
|
352
|
+
* @example
|
|
353
|
+
* ```typescript
|
|
354
|
+
* await userPreferenceAPI.deleteUserPreference('user123');
|
|
355
|
+
* ```
|
|
356
|
+
*/
|
|
357
|
+
async deleteUserPreference(userId) {
|
|
358
|
+
const orgId = this.webex.credentials.getOrgId();
|
|
359
|
+
_loggerProxy.default.info('Deleting user preferences', {
|
|
360
|
+
module: 'UserPreference',
|
|
361
|
+
method: 'deleteUserPreference',
|
|
362
|
+
data: {
|
|
363
|
+
orgId,
|
|
364
|
+
userId
|
|
365
|
+
}
|
|
366
|
+
});
|
|
367
|
+
if (!userId) {
|
|
368
|
+
_loggerProxy.default.error('deleteUserPreference called without a valid userId', {
|
|
369
|
+
module: 'UserPreference',
|
|
370
|
+
method: 'deleteUserPreference',
|
|
371
|
+
data: {
|
|
372
|
+
orgId,
|
|
373
|
+
error: 'Missing userId parameter.'
|
|
374
|
+
}
|
|
375
|
+
});
|
|
376
|
+
throw new Error('UserPreference: userId is required to delete user preferences.');
|
|
377
|
+
}
|
|
378
|
+
try {
|
|
379
|
+
const resource = _constants2.endPointMap.userPreference(orgId, userId);
|
|
380
|
+
_loggerProxy.default.info('Making API request to delete user preferences', {
|
|
381
|
+
module: 'UserPreference',
|
|
382
|
+
method: 'deleteUserPreference',
|
|
383
|
+
data: {
|
|
384
|
+
resource,
|
|
385
|
+
service: _constants.WCC_API_GATEWAY
|
|
386
|
+
}
|
|
387
|
+
});
|
|
388
|
+
this.metricsManager.timeEvent(_constants3.METRIC_EVENT_NAMES.USER_PREFERENCE_DELETE_SUCCESS);
|
|
389
|
+
this.metricsManager.timeEvent(_constants3.METRIC_EVENT_NAMES.USER_PREFERENCE_DELETE_FAILED);
|
|
390
|
+
const response = await this.webexRequest.request({
|
|
391
|
+
service: _constants.WCC_API_GATEWAY,
|
|
392
|
+
resource,
|
|
393
|
+
method: _types.HTTP_METHODS.DELETE
|
|
394
|
+
});
|
|
395
|
+
_loggerProxy.default.info('Successfully deleted user preferences', {
|
|
396
|
+
module: 'UserPreference',
|
|
397
|
+
method: 'deleteUserPreference',
|
|
398
|
+
data: {
|
|
399
|
+
statusCode: response.statusCode,
|
|
400
|
+
userId
|
|
401
|
+
}
|
|
402
|
+
});
|
|
403
|
+
this.metricsManager.trackEvent(_constants3.METRIC_EVENT_NAMES.USER_PREFERENCE_DELETE_SUCCESS, {
|
|
404
|
+
orgId,
|
|
405
|
+
userId,
|
|
406
|
+
statusCode: response.statusCode
|
|
407
|
+
}, ['behavioral', 'operational']);
|
|
408
|
+
} catch (error) {
|
|
409
|
+
const errorData = {
|
|
410
|
+
orgId,
|
|
411
|
+
userId,
|
|
412
|
+
error: error instanceof Error ? error.message : String(error)
|
|
413
|
+
};
|
|
414
|
+
_loggerProxy.default.error('Failed to delete user preferences', {
|
|
415
|
+
module: 'UserPreference',
|
|
416
|
+
method: 'deleteUserPreference',
|
|
417
|
+
data: errorData,
|
|
418
|
+
error
|
|
419
|
+
});
|
|
420
|
+
this.metricsManager.trackEvent(_constants3.METRIC_EVENT_NAMES.USER_PREFERENCE_DELETE_FAILED, errorData, ['behavioral', 'operational']);
|
|
421
|
+
throw error;
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
exports.UserPreference = UserPreference;
|
|
426
|
+
var _default = exports.default = UserPreference;
|
|
427
|
+
//# sourceMappingURL=UserPreference.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_types","require","_loggerProxy","_interopRequireDefault","_WebexRequest","_MetricsManager","_constants","_constants2","_constants3","e","__esModule","default","UserPreference","constructor","webex","getUserId","webexRequest","WebexRequest","getInstance","metricsManager","MetricsManager","getUserPreference","params","userId","page","pageSize","targetUserId","orgId","credentials","getOrgId","LoggerProxy","info","module","method","data","error","Error","resource","endPointMap","userPreference","queryParams","undefined","push","length","join","service","WCC_API_GATEWAY","timeEvent","METRIC_EVENT_NAMES","USER_PREFERENCE_GET_SUCCESS","USER_PREFERENCE_GET_FAILED","response","request","HTTP_METHODS","GET","statusCode","trackEvent","body","errorData","message","String","createUserPreference","userPreferenceCreate","USER_PREFERENCE_CREATE_SUCCESS","USER_PREFERENCE_CREATE_FAILED","POST","updateUserPreference","USER_PREFERENCE_UPDATE_SUCCESS","USER_PREFERENCE_UPDATE_FAILED","PUT","deleteUserPreference","USER_PREFERENCE_DELETE_SUCCESS","USER_PREFERENCE_DELETE_FAILED","DELETE","exports","_default"],"sources":["UserPreference.ts"],"sourcesContent":["import {HTTP_METHODS, WebexSDK} from '../types';\nimport type {\n UserPreference as UserPreferenceResponse,\n CreateUserPreferenceRequest,\n UpdateUserPreferenceRequest,\n GetUserPreferenceParams,\n} from './config/types';\nimport LoggerProxy from '../logger-proxy';\nimport WebexRequest from './core/WebexRequest';\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 * UserPreference API class for managing Webex Contact Center user preferences.\n * Provides functionality to get, create, update, and delete user preferences.\n *\n * @class UserPreference\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 UserPreference API instance from ContactCenter\n * const userPreferenceAPI = cc.userPreference;\n *\n * // Get user preferences for the current user\n * const preferences = await userPreferenceAPI.getUserPreference();\n *\n * // Create new user preferences\n * const newPreferences = await userPreferenceAPI.createUserPreference({\n * userId: 'user123',\n * preferences: { e911Reminder: true }\n * });\n *\n * // Update user preferences\n * const updatedPreferences = await userPreferenceAPI.updateUserPreference('user123', {\n * preferences: { e911Reminder: false }\n * });\n *\n * // Delete user preferences\n * await userPreferenceAPI.deleteUserPreference('user123');\n * ```\n */\nexport class UserPreference {\n private webexRequest: WebexRequest;\n private webex: WebexSDK;\n private getUserId: () => string;\n private metricsManager: MetricsManager;\n\n /**\n * Creates an instance of UserPreference\n * @param {WebexSDK} webex - The Webex SDK instance\n * @param {() => string} getUserId - Function to get the current user's CI user ID\n * @public\n */\n constructor(webex: WebexSDK, getUserId: () => string) {\n this.webex = webex;\n this.webexRequest = WebexRequest.getInstance({webex});\n this.getUserId = getUserId;\n this.metricsManager = MetricsManager.getInstance({webex});\n }\n\n /**\n * Fetches user preferences for a specific user\n * @param {GetUserPreferenceParams} [params] - Optional parameters for fetching preferences\n * @param {string} [params.userId] - User ID to fetch preferences for. Defaults to current user's CI user ID.\n * @param {number} [params.page=0] - Page number (0-indexed). Default: 0\n * @param {number} [params.pageSize=100] - Number of items per page. Default: 100\n * @returns {Promise<UserPreferenceResponse>} Promise resolving to user preferences\n * @throws {Error} If the API call fails\n * @public\n * @example\n * ```typescript\n * // Get preferences for current user\n * const preferences = await userPreferenceAPI.getUserPreference();\n *\n * // Get preferences for a specific user\n * const preferences = await userPreferenceAPI.getUserPreference({ userId: 'user123' });\n *\n * // Get preferences with pagination\n * const preferences = await userPreferenceAPI.getUserPreference({ page: 0, pageSize: 50 });\n * ```\n */\n public async getUserPreference(\n params?: GetUserPreferenceParams\n ): Promise<UserPreferenceResponse> {\n const {userId, page, pageSize} = params || {};\n const targetUserId = userId || this.getUserId();\n const orgId = this.webex.credentials.getOrgId();\n\n LoggerProxy.info('Fetching user preferences', {\n module: 'UserPreference',\n method: 'getUserPreference',\n data: {\n orgId,\n userId: targetUserId,\n page,\n pageSize,\n },\n });\n\n if (!targetUserId) {\n LoggerProxy.error('getUserPreference called without a valid userId', {\n module: 'UserPreference',\n method: 'getUserPreference',\n data: {\n orgId,\n userId: targetUserId,\n error: 'Missing userId. Ensure user is logged in or provide a userId.',\n },\n });\n\n throw new Error('UserPreference: userId is not available.');\n }\n\n try {\n let resource = endPointMap.userPreference(orgId, targetUserId);\n\n // Build query parameters if provided\n const queryParams: string[] = [];\n if (page !== undefined) queryParams.push(`page=${page}`);\n if (pageSize !== undefined) queryParams.push(`pageSize=${pageSize}`);\n if (queryParams.length > 0) {\n resource = `${resource}?${queryParams.join('&')}`;\n }\n\n LoggerProxy.info('Making API request to fetch user preferences', {\n module: 'UserPreference',\n method: 'getUserPreference',\n data: {\n resource,\n service: WCC_API_GATEWAY,\n },\n });\n\n this.metricsManager.timeEvent(METRIC_EVENT_NAMES.USER_PREFERENCE_GET_SUCCESS);\n this.metricsManager.timeEvent(METRIC_EVENT_NAMES.USER_PREFERENCE_GET_FAILED);\n\n const response = await this.webexRequest.request({\n service: WCC_API_GATEWAY,\n resource,\n method: HTTP_METHODS.GET,\n });\n\n LoggerProxy.info('Successfully retrieved user preferences', {\n module: 'UserPreference',\n method: 'getUserPreference',\n data: {\n statusCode: response.statusCode,\n userId: targetUserId,\n },\n });\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.USER_PREFERENCE_GET_SUCCESS,\n {\n orgId,\n userId: targetUserId,\n statusCode: response.statusCode,\n },\n ['behavioral', 'operational']\n );\n\n return response.body;\n } catch (error) {\n const errorData = {\n orgId,\n userId: targetUserId,\n error: error instanceof Error ? error.message : String(error),\n };\n\n LoggerProxy.error('Failed to fetch user preferences', {\n module: 'UserPreference',\n method: 'getUserPreference',\n data: errorData,\n error,\n });\n\n this.metricsManager.trackEvent(METRIC_EVENT_NAMES.USER_PREFERENCE_GET_FAILED, errorData, [\n 'behavioral',\n 'operational',\n ]);\n\n throw error;\n }\n }\n\n /**\n * Creates new user preferences\n * @param {CreateUserPreferenceRequest} data - The user preference data to create\n * @returns {Promise<UserPreference>} Promise resolving to created user preferences\n * @throws {Error} If the API call fails\n * @public\n * @example\n * ```typescript\n * const newPreferences = await userPreferenceAPI.createUserPreference({\n * userId: 'user123',\n * preferences: { e911Reminder: true, notificationSettings: { email: true } }\n * });\n * ```\n */\n public async createUserPreference(\n data: CreateUserPreferenceRequest\n ): Promise<UserPreferenceResponse> {\n const orgId = this.webex.credentials.getOrgId();\n\n LoggerProxy.info('Creating user preferences', {\n module: 'UserPreference',\n method: 'createUserPreference',\n data: {\n orgId,\n userId: data.userId,\n },\n });\n\n if (!data.userId) {\n LoggerProxy.error('createUserPreference called without a valid userId', {\n module: 'UserPreference',\n method: 'createUserPreference',\n data: {\n orgId,\n error: 'Missing userId in request data.',\n },\n });\n\n throw new Error('UserPreference: userId is required to create user preferences.');\n }\n\n try {\n const resource = endPointMap.userPreferenceCreate(orgId);\n\n LoggerProxy.info('Making API request to create user preferences', {\n module: 'UserPreference',\n method: 'createUserPreference',\n data: {\n resource,\n service: WCC_API_GATEWAY,\n },\n });\n\n this.metricsManager.timeEvent(METRIC_EVENT_NAMES.USER_PREFERENCE_CREATE_SUCCESS);\n this.metricsManager.timeEvent(METRIC_EVENT_NAMES.USER_PREFERENCE_CREATE_FAILED);\n\n const response = await this.webexRequest.request({\n service: WCC_API_GATEWAY,\n resource,\n method: HTTP_METHODS.POST,\n body: data,\n });\n\n LoggerProxy.info('Successfully created user preferences', {\n module: 'UserPreference',\n method: 'createUserPreference',\n data: {\n statusCode: response.statusCode,\n userId: data.userId,\n },\n });\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.USER_PREFERENCE_CREATE_SUCCESS,\n {\n orgId,\n userId: data.userId,\n statusCode: response.statusCode,\n },\n ['behavioral', 'operational']\n );\n\n return response.body;\n } catch (error) {\n const errorData = {\n orgId,\n userId: data.userId,\n error: error instanceof Error ? error.message : String(error),\n };\n\n LoggerProxy.error('Failed to create user preferences', {\n module: 'UserPreference',\n method: 'createUserPreference',\n data: errorData,\n error,\n });\n\n this.metricsManager.trackEvent(METRIC_EVENT_NAMES.USER_PREFERENCE_CREATE_FAILED, errorData, [\n 'behavioral',\n 'operational',\n ]);\n\n throw error;\n }\n }\n\n /**\n * Updates existing user preferences\n * @param {string} userId - User ID to update preferences for\n * @param {UpdateUserPreferenceRequest} data - The user preference data to update\n * @returns {Promise<UserPreference>} Promise resolving to updated user preferences\n * @throws {Error} If the API call fails\n * @public\n * @example\n * ```typescript\n * const updatedPreferences = await userPreferenceAPI.updateUserPreference('user123', {\n * preferences: { e911Reminder: false }\n * });\n * ```\n */\n public async updateUserPreference(\n userId: string,\n data: UpdateUserPreferenceRequest\n ): Promise<UserPreferenceResponse> {\n const orgId = this.webex.credentials.getOrgId();\n\n LoggerProxy.info('Updating user preferences', {\n module: 'UserPreference',\n method: 'updateUserPreference',\n data: {\n orgId,\n userId,\n },\n });\n\n if (!userId) {\n LoggerProxy.error('updateUserPreference called without a valid userId', {\n module: 'UserPreference',\n method: 'updateUserPreference',\n data: {\n orgId,\n error: 'Missing userId parameter.',\n },\n });\n\n throw new Error('UserPreference: userId is required to update user preferences.');\n }\n\n try {\n const resource = endPointMap.userPreference(orgId, userId);\n\n LoggerProxy.info('Making API request to update user preferences', {\n module: 'UserPreference',\n method: 'updateUserPreference',\n data: {\n resource,\n service: WCC_API_GATEWAY,\n },\n });\n\n this.metricsManager.timeEvent(METRIC_EVENT_NAMES.USER_PREFERENCE_UPDATE_SUCCESS);\n this.metricsManager.timeEvent(METRIC_EVENT_NAMES.USER_PREFERENCE_UPDATE_FAILED);\n\n const response = await this.webexRequest.request({\n service: WCC_API_GATEWAY,\n resource,\n method: HTTP_METHODS.PUT,\n body: data,\n });\n\n LoggerProxy.info('Successfully updated user preferences', {\n module: 'UserPreference',\n method: 'updateUserPreference',\n data: {\n statusCode: response.statusCode,\n userId,\n },\n });\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.USER_PREFERENCE_UPDATE_SUCCESS,\n {\n orgId,\n userId,\n statusCode: response.statusCode,\n },\n ['behavioral', 'operational']\n );\n\n return response.body;\n } catch (error) {\n const errorData = {\n orgId,\n userId,\n error: error instanceof Error ? error.message : String(error),\n };\n\n LoggerProxy.error('Failed to update user preferences', {\n module: 'UserPreference',\n method: 'updateUserPreference',\n data: errorData,\n error,\n });\n\n this.metricsManager.trackEvent(METRIC_EVENT_NAMES.USER_PREFERENCE_UPDATE_FAILED, errorData, [\n 'behavioral',\n 'operational',\n ]);\n\n throw error;\n }\n }\n\n /**\n * Deletes user preferences for a specific user\n * @param {string} userId - User ID to delete preferences for\n * @returns {Promise<void>} Promise resolving when deletion is complete\n * @throws {Error} If the API call fails\n * @public\n * @example\n * ```typescript\n * await userPreferenceAPI.deleteUserPreference('user123');\n * ```\n */\n public async deleteUserPreference(userId: string): Promise<void> {\n const orgId = this.webex.credentials.getOrgId();\n\n LoggerProxy.info('Deleting user preferences', {\n module: 'UserPreference',\n method: 'deleteUserPreference',\n data: {\n orgId,\n userId,\n },\n });\n\n if (!userId) {\n LoggerProxy.error('deleteUserPreference called without a valid userId', {\n module: 'UserPreference',\n method: 'deleteUserPreference',\n data: {\n orgId,\n error: 'Missing userId parameter.',\n },\n });\n\n throw new Error('UserPreference: userId is required to delete user preferences.');\n }\n\n try {\n const resource = endPointMap.userPreference(orgId, userId);\n\n LoggerProxy.info('Making API request to delete user preferences', {\n module: 'UserPreference',\n method: 'deleteUserPreference',\n data: {\n resource,\n service: WCC_API_GATEWAY,\n },\n });\n\n this.metricsManager.timeEvent(METRIC_EVENT_NAMES.USER_PREFERENCE_DELETE_SUCCESS);\n this.metricsManager.timeEvent(METRIC_EVENT_NAMES.USER_PREFERENCE_DELETE_FAILED);\n\n const response = await this.webexRequest.request({\n service: WCC_API_GATEWAY,\n resource,\n method: HTTP_METHODS.DELETE,\n });\n\n LoggerProxy.info('Successfully deleted user preferences', {\n module: 'UserPreference',\n method: 'deleteUserPreference',\n data: {\n statusCode: response.statusCode,\n userId,\n },\n });\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.USER_PREFERENCE_DELETE_SUCCESS,\n {\n orgId,\n userId,\n statusCode: response.statusCode,\n },\n ['behavioral', 'operational']\n );\n } catch (error) {\n const errorData = {\n orgId,\n userId,\n error: error instanceof Error ? error.message : String(error),\n };\n\n LoggerProxy.error('Failed to delete user preferences', {\n module: 'UserPreference',\n method: 'deleteUserPreference',\n data: errorData,\n error,\n });\n\n this.metricsManager.trackEvent(METRIC_EVENT_NAMES.USER_PREFERENCE_DELETE_FAILED, errorData, [\n 'behavioral',\n 'operational',\n ]);\n\n throw error;\n }\n }\n}\n\nexport default UserPreference;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -9,6 +9,7 @@ var _calling = require("@webex/calling");
|
|
|
9
9
|
var _constants = require("../constants");
|
|
10
10
|
var _loggerProxy = _interopRequireDefault(require("../logger-proxy"));
|
|
11
11
|
var _constants2 = require("./constants");
|
|
12
|
+
var _Utils = require("./core/Utils");
|
|
12
13
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
14
|
/**
|
|
14
15
|
* WebCallingService provides WebRTC calling functionality for Contact Center agents.
|
|
@@ -121,8 +122,15 @@ class WebCallingService extends _events.default {
|
|
|
121
122
|
await this.webex.internal.services.waitForCatalog(_constants2.POST_AUTH);
|
|
122
123
|
const rtmsURL = this.webex.internal.services.get(_constants2.WCC_CALLING_RTMS_DOMAIN);
|
|
123
124
|
try {
|
|
124
|
-
const
|
|
125
|
-
|
|
125
|
+
const hostname = new URL(rtmsURL).hostname.toLowerCase();
|
|
126
|
+
if (!(0, _Utils.isAllowedUrlHost)(rtmsURL, [_constants2.ALLOWED_RTMS_DOMAIN])) {
|
|
127
|
+
_loggerProxy.default.error(`Non-allow-listed RTMS host from u2c catalogue: ${hostname} so falling back to default domain`, {
|
|
128
|
+
module: _constants.WEB_CALLING_SERVICE_FILE,
|
|
129
|
+
method: _constants2.METHODS.GET_RTMS_DOMAIN
|
|
130
|
+
});
|
|
131
|
+
return _constants2.DEFAULT_RTMS_DOMAIN;
|
|
132
|
+
}
|
|
133
|
+
return hostname;
|
|
126
134
|
} catch (error) {
|
|
127
135
|
_loggerProxy.default.error(`Invalid URL from u2c catalogue: ${rtmsURL} so falling back to default domain`, {
|
|
128
136
|
module: _constants.WEB_CALLING_SERVICE_FILE,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_events","_interopRequireDefault","require","_calling","_constants","_loggerProxy","_constants2","e","__esModule","default","WebCallingService","EventEmitter","constructor","webex","callTaskMap","Map","setLoginOption","loginOption","handleMediaEvent","track","emit","CALL_EVENT_KEYS","REMOTE_MEDIA","handleDisconnectEvent","call","end","cleanUpCall","registerCallListeners","on","DISCONNECT","off","callId","getCallId","taskId","getTaskIdForCall","delete","getRTMSDomain","internal","services","waitForCatalog","POST_AUTH","rtmsURL","get","WCC_CALLING_RTMS_DOMAIN","url","URL","hostname","error","LoggerProxy","module","WEB_CALLING_SERVICE_FILE","method","METHODS","GET_RTMS_DOMAIN","DEFAULT_RTMS_DOMAIN","registerWebCallingLine","rtmsDomain","callingClientConfig","logger","level","LOGGER","INFO","serviceData","indicator","ServiceIndicator","CONTACT_CENTER","domain","callingClient","createClient","line","Object","values","getLines","LINE_EVENTS","UNREGISTERED","log","REGISTER_WEB_CALLING_LINE","INCOMING_CALL","Promise","resolve","reject","timeout","setTimeout","Error","TIMEOUT_DURATION","REGISTERED","deviceInfo","clearTimeout","mobiusDeviceId","register","deregisterWebCallingLine","DEREGISTER_WEBCALLING_LINE_MSG","DEREGISTER_WEB_CALLING_LINE","deregister","answerCall","localAudioStream","info","ANSWER_CALL","answer","muteUnmuteCall","MUTE_UNMUTE_CALL","mute","isCallMuted","isMuted","declineCall","DECLINE_CALL","mapCallToTask","set","exports"],"sources":["WebCallingService.ts"],"sourcesContent":["import EventEmitter from 'events';\nimport {\n createClient,\n ICall,\n ICallingClient,\n ILine,\n LINE_EVENTS,\n ServiceIndicator,\n LocalMicrophoneStream,\n CALL_EVENT_KEYS,\n LOGGER,\n} from '@webex/calling';\nimport {LoginOption, WebexSDK} from '../types';\nimport {TIMEOUT_DURATION, WEB_CALLING_SERVICE_FILE} from '../constants';\nimport LoggerProxy from '../logger-proxy';\nimport {\n DEFAULT_RTMS_DOMAIN,\n POST_AUTH,\n WCC_CALLING_RTMS_DOMAIN,\n DEREGISTER_WEBCALLING_LINE_MSG,\n METHODS,\n} from './constants';\n\n/**\n * WebCallingService provides WebRTC calling functionality for Contact Center agents.\n * It handles registration, call management, and media operations for voice interactions.\n * @internal\n */\nexport default class WebCallingService extends EventEmitter {\n /**\n * The CallingClient instance that manages WebRTC calling capabilities\n * @private\n */\n private callingClient: ICallingClient;\n\n /**\n * The Line instance that handles registration and incoming calls\n * @private\n */\n private line: ILine;\n\n /**\n * The current active call instance\n * @private\n */\n private call: ICall | undefined;\n\n /**\n * Reference to the WebexSDK instance\n * @private\n */\n private webex: WebexSDK;\n\n /**\n * The login option selected for this session\n * @private\n */\n public loginOption: LoginOption;\n\n /**\n * Map that associates call IDs with task IDs for correlation\n * @private\n */\n private callTaskMap: Map<string, string>;\n\n /**\n * Creates an instance of WebCallingService.\n * @param {WebexSDK} webex - The Webex SDK instance\n */\n constructor(webex: WebexSDK) {\n super();\n this.webex = webex;\n this.callTaskMap = new Map();\n }\n\n /**\n * Sets the login option for the current session\n * @param {LoginOption} loginOption - The login option to use\n * @private\n */\n public setLoginOption(loginOption: LoginOption): void {\n this.loginOption = loginOption;\n }\n\n /**\n * Handles remote media track events from the call\n * @param {MediaStreamTrack} track - The media track received\n * @private\n */\n private handleMediaEvent = (track: MediaStreamTrack): void => {\n this.emit(CALL_EVENT_KEYS.REMOTE_MEDIA, track);\n };\n\n /**\n * Handles disconnect events from the call\n * @private\n */\n private handleDisconnectEvent = (): void => {\n this.call.end();\n this.cleanUpCall();\n };\n\n /**\n * Registers event listeners for the current call\n * @private\n */\n private registerCallListeners(): void {\n // TODO: Add remaining call listeners here\n this.call.on(CALL_EVENT_KEYS.REMOTE_MEDIA, this.handleMediaEvent);\n this.call.on(CALL_EVENT_KEYS.DISCONNECT, this.handleDisconnectEvent);\n }\n\n /**\n * Cleans up resources associated with the current call\n * Removes event listeners and clears the call-task mapping\n * @private\n */\n public cleanUpCall(): void {\n if (this.call) {\n this.call.off(CALL_EVENT_KEYS.REMOTE_MEDIA, this.handleMediaEvent);\n this.call.off(CALL_EVENT_KEYS.DISCONNECT, this.handleDisconnectEvent);\n const callId = this.call.getCallId();\n const taskId = this.getTaskIdForCall(callId);\n\n if (taskId) {\n this.callTaskMap.delete(callId);\n }\n this.call = null;\n }\n }\n\n /**\n * Retrieves the RTMS domain to use for WebRTC connections\n * First tries to get it from the service catalog, then falls back to default\n * @private\n * @returns {Promise<string>} The RTMS domain to use\n */\n private async getRTMSDomain(): Promise<string> {\n await this.webex.internal.services.waitForCatalog(POST_AUTH);\n\n const rtmsURL = this.webex.internal.services.get(WCC_CALLING_RTMS_DOMAIN);\n\n try {\n const url = new URL(rtmsURL);\n\n return url.hostname;\n } catch (error) {\n LoggerProxy.error(\n `Invalid URL from u2c catalogue: ${rtmsURL} so falling back to default domain`,\n {\n module: WEB_CALLING_SERVICE_FILE,\n method: METHODS.GET_RTMS_DOMAIN,\n }\n );\n\n return DEFAULT_RTMS_DOMAIN;\n }\n }\n\n /**\n * Registers the WebCalling line for receiving calls\n * Sets up event listeners for line events and initializes the calling client\n *\n * @private\n * @returns {Promise<void>} A promise that resolves when registration is complete\n * @throws {Error} When registration times out\n */\n public async registerWebCallingLine(): Promise<void> {\n const rtmsDomain = await this.getRTMSDomain(); // get the RTMS domain from the u2c catalogue\n\n const callingClientConfig = {\n logger: {\n level: LOGGER.INFO,\n },\n serviceData: {\n indicator: ServiceIndicator.CONTACT_CENTER,\n domain: rtmsDomain,\n },\n };\n\n this.callingClient = await createClient(this.webex as any, callingClientConfig);\n this.line = Object.values(this.callingClient.getLines())[0];\n\n this.line.on(LINE_EVENTS.UNREGISTERED, () => {\n LoggerProxy.log(`WxCC-SDK: Desktop unregistered successfully`, {\n module: WEB_CALLING_SERVICE_FILE,\n method: METHODS.REGISTER_WEB_CALLING_LINE,\n });\n });\n\n // Start listening for incoming calls\n this.line.on(LINE_EVENTS.INCOMING_CALL, (call: ICall) => {\n this.call = call;\n this.emit(LINE_EVENTS.INCOMING_CALL, call);\n });\n\n return new Promise<void>((resolve, reject) => {\n const timeout = setTimeout(() => {\n reject(new Error('WebCallingService Registration timed out'));\n }, TIMEOUT_DURATION);\n\n this.line.on(LINE_EVENTS.REGISTERED, (deviceInfo: ILine) => {\n clearTimeout(timeout);\n LoggerProxy.log(\n `WxCC-SDK: Desktop registered successfully, mobiusDeviceId: ${deviceInfo.mobiusDeviceId}`,\n {module: WEB_CALLING_SERVICE_FILE, method: METHODS.REGISTER_WEB_CALLING_LINE}\n );\n resolve();\n });\n this.line.register();\n });\n }\n\n /**\n * Deregisters the WebCalling line\n * Cleans up any active calls and deregisters from the calling service\n *\n * @private\n * @returns {Promise<void>} A promise that resolves when deregistration is complete\n */\n public async deregisterWebCallingLine(): Promise<void> {\n LoggerProxy.log(DEREGISTER_WEBCALLING_LINE_MSG, {\n module: WEB_CALLING_SERVICE_FILE,\n method: METHODS.DEREGISTER_WEB_CALLING_LINE,\n });\n this.cleanUpCall();\n this.line?.deregister();\n }\n\n /**\n * Answers an incoming call with the provided audio stream\n *\n * @private\n * @param {LocalMicrophoneStream} localAudioStream - The local microphone stream to use\n * @param {string} taskId - The task ID associated with this call\n * @throws {Error} If answering the call fails\n */\n public answerCall(localAudioStream: LocalMicrophoneStream, taskId: string): void {\n if (this.call) {\n try {\n LoggerProxy.info(`Call answered: ${taskId}`, {\n module: WEB_CALLING_SERVICE_FILE,\n method: METHODS.ANSWER_CALL,\n });\n this.call.answer(localAudioStream);\n this.registerCallListeners();\n } catch (error) {\n LoggerProxy.error(`Failed to answer call for ${taskId}. Error: ${error}`, {\n module: WEB_CALLING_SERVICE_FILE,\n method: METHODS.ANSWER_CALL,\n });\n // Optionally, throw the error to allow the invoker to handle it\n throw error;\n }\n } else {\n LoggerProxy.log(`Cannot answer a non WebRtc Call: ${taskId}`, {\n module: WEB_CALLING_SERVICE_FILE,\n method: METHODS.ANSWER_CALL,\n });\n }\n }\n\n /**\n * Toggles the mute state of the current call\n *\n * @private\n * @param {LocalMicrophoneStream} localAudioStream - The local microphone stream to control\n */\n public muteUnmuteCall(localAudioStream: LocalMicrophoneStream): void {\n if (this.call) {\n LoggerProxy.info('Call mute or unmute requested!', {\n module: WEB_CALLING_SERVICE_FILE,\n method: METHODS.MUTE_UNMUTE_CALL,\n });\n this.call.mute(localAudioStream);\n } else {\n LoggerProxy.log(`Cannot mute a non WebRtc Call`, {\n module: WEB_CALLING_SERVICE_FILE,\n method: METHODS.MUTE_UNMUTE_CALL,\n });\n }\n }\n\n /**\n * Checks if the current call is muted\n *\n * @private\n * @returns {boolean} True if the call is muted, false otherwise or if no call exists\n */\n public isCallMuted(): boolean {\n if (this.call) {\n return this.call.isMuted();\n }\n\n return false;\n }\n\n /**\n * Declines or ends the current call\n *\n * @private\n * @param {string} taskId - The task ID associated with this call\n * @throws {Error} If ending the call fails\n */\n public declineCall(taskId: string): void {\n if (this.call) {\n try {\n LoggerProxy.info(`Call end requested: ${taskId}`, {\n module: WEB_CALLING_SERVICE_FILE,\n method: METHODS.DECLINE_CALL,\n });\n this.call.end();\n this.cleanUpCall();\n } catch (error) {\n LoggerProxy.error(`Failed to end call: ${taskId}. Error: ${error}`, {\n module: WEB_CALLING_SERVICE_FILE,\n method: METHODS.DECLINE_CALL,\n });\n // Optionally, throw the error to allow the invoker to handle it\n throw error;\n }\n } else {\n LoggerProxy.log(`Cannot end a non WebRtc Call: ${taskId}`, {\n module: WEB_CALLING_SERVICE_FILE,\n method: METHODS.DECLINE_CALL,\n });\n }\n }\n\n /**\n * Maps a call ID to a task ID for correlation\n *\n * @private\n * @param {string} callId - The unique call identifier\n * @param {string} taskId - The associated task identifier\n */\n public mapCallToTask(callId: string, taskId: string): void {\n this.callTaskMap.set(callId, taskId);\n }\n\n /**\n * Gets the task ID associated with a call ID\n *\n * @private\n * @param {string} callId - The call ID to look up\n * @returns {string|undefined} The associated task ID or undefined if not found\n */\n public getTaskIdForCall(callId: string): string | undefined {\n return this.callTaskMap.get(callId);\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_events","_interopRequireDefault","require","_calling","_constants","_loggerProxy","_constants2","_Utils","e","__esModule","default","WebCallingService","EventEmitter","constructor","webex","callTaskMap","Map","setLoginOption","loginOption","handleMediaEvent","track","emit","CALL_EVENT_KEYS","REMOTE_MEDIA","handleDisconnectEvent","call","end","cleanUpCall","registerCallListeners","on","DISCONNECT","off","callId","getCallId","taskId","getTaskIdForCall","delete","getRTMSDomain","internal","services","waitForCatalog","POST_AUTH","rtmsURL","get","WCC_CALLING_RTMS_DOMAIN","hostname","URL","toLowerCase","isAllowedUrlHost","ALLOWED_RTMS_DOMAIN","LoggerProxy","error","module","WEB_CALLING_SERVICE_FILE","method","METHODS","GET_RTMS_DOMAIN","DEFAULT_RTMS_DOMAIN","registerWebCallingLine","rtmsDomain","callingClientConfig","logger","level","LOGGER","INFO","serviceData","indicator","ServiceIndicator","CONTACT_CENTER","domain","callingClient","createClient","line","Object","values","getLines","LINE_EVENTS","UNREGISTERED","log","REGISTER_WEB_CALLING_LINE","INCOMING_CALL","Promise","resolve","reject","timeout","setTimeout","Error","TIMEOUT_DURATION","REGISTERED","deviceInfo","clearTimeout","mobiusDeviceId","register","deregisterWebCallingLine","DEREGISTER_WEBCALLING_LINE_MSG","DEREGISTER_WEB_CALLING_LINE","deregister","answerCall","localAudioStream","info","ANSWER_CALL","answer","muteUnmuteCall","MUTE_UNMUTE_CALL","mute","isCallMuted","isMuted","declineCall","DECLINE_CALL","mapCallToTask","set","exports"],"sources":["WebCallingService.ts"],"sourcesContent":["import EventEmitter from 'events';\nimport {\n createClient,\n ICall,\n ICallingClient,\n ILine,\n LINE_EVENTS,\n ServiceIndicator,\n LocalMicrophoneStream,\n CALL_EVENT_KEYS,\n LOGGER,\n} from '@webex/calling';\nimport {LoginOption, WebexSDK} from '../types';\nimport {TIMEOUT_DURATION, WEB_CALLING_SERVICE_FILE} from '../constants';\nimport LoggerProxy from '../logger-proxy';\nimport {\n DEFAULT_RTMS_DOMAIN,\n ALLOWED_RTMS_DOMAIN,\n POST_AUTH,\n WCC_CALLING_RTMS_DOMAIN,\n DEREGISTER_WEBCALLING_LINE_MSG,\n METHODS,\n} from './constants';\nimport {isAllowedUrlHost} from './core/Utils';\n\n/**\n * WebCallingService provides WebRTC calling functionality for Contact Center agents.\n * It handles registration, call management, and media operations for voice interactions.\n * @internal\n */\nexport default class WebCallingService extends EventEmitter {\n /**\n * The CallingClient instance that manages WebRTC calling capabilities\n * @private\n */\n private callingClient: ICallingClient;\n\n /**\n * The Line instance that handles registration and incoming calls\n * @private\n */\n private line: ILine;\n\n /**\n * The current active call instance\n * @private\n */\n private call: ICall | undefined;\n\n /**\n * Reference to the WebexSDK instance\n * @private\n */\n private webex: WebexSDK;\n\n /**\n * The login option selected for this session\n * @private\n */\n public loginOption: LoginOption;\n\n /**\n * Map that associates call IDs with task IDs for correlation\n * @private\n */\n private callTaskMap: Map<string, string>;\n\n /**\n * Creates an instance of WebCallingService.\n * @param {WebexSDK} webex - The Webex SDK instance\n */\n constructor(webex: WebexSDK) {\n super();\n this.webex = webex;\n this.callTaskMap = new Map();\n }\n\n /**\n * Sets the login option for the current session\n * @param {LoginOption} loginOption - The login option to use\n * @private\n */\n public setLoginOption(loginOption: LoginOption): void {\n this.loginOption = loginOption;\n }\n\n /**\n * Handles remote media track events from the call\n * @param {MediaStreamTrack} track - The media track received\n * @private\n */\n private handleMediaEvent = (track: MediaStreamTrack): void => {\n this.emit(CALL_EVENT_KEYS.REMOTE_MEDIA, track);\n };\n\n /**\n * Handles disconnect events from the call\n * @private\n */\n private handleDisconnectEvent = (): void => {\n this.call.end();\n this.cleanUpCall();\n };\n\n /**\n * Registers event listeners for the current call\n * @private\n */\n private registerCallListeners(): void {\n // TODO: Add remaining call listeners here\n this.call.on(CALL_EVENT_KEYS.REMOTE_MEDIA, this.handleMediaEvent);\n this.call.on(CALL_EVENT_KEYS.DISCONNECT, this.handleDisconnectEvent);\n }\n\n /**\n * Cleans up resources associated with the current call\n * Removes event listeners and clears the call-task mapping\n * @private\n */\n public cleanUpCall(): void {\n if (this.call) {\n this.call.off(CALL_EVENT_KEYS.REMOTE_MEDIA, this.handleMediaEvent);\n this.call.off(CALL_EVENT_KEYS.DISCONNECT, this.handleDisconnectEvent);\n const callId = this.call.getCallId();\n const taskId = this.getTaskIdForCall(callId);\n\n if (taskId) {\n this.callTaskMap.delete(callId);\n }\n this.call = null;\n }\n }\n\n /**\n * Retrieves the RTMS domain to use for WebRTC connections\n * First tries to get it from the service catalog, then falls back to default\n * @private\n * @returns {Promise<string>} The RTMS domain to use\n */\n private async getRTMSDomain(): Promise<string> {\n await this.webex.internal.services.waitForCatalog(POST_AUTH);\n\n const rtmsURL = this.webex.internal.services.get(WCC_CALLING_RTMS_DOMAIN);\n\n try {\n const hostname = new URL(rtmsURL).hostname.toLowerCase();\n\n if (!isAllowedUrlHost(rtmsURL, [ALLOWED_RTMS_DOMAIN])) {\n LoggerProxy.error(\n `Non-allow-listed RTMS host from u2c catalogue: ${hostname} so falling back to default domain`,\n {\n module: WEB_CALLING_SERVICE_FILE,\n method: METHODS.GET_RTMS_DOMAIN,\n }\n );\n\n return DEFAULT_RTMS_DOMAIN;\n }\n\n return hostname;\n } catch (error) {\n LoggerProxy.error(\n `Invalid URL from u2c catalogue: ${rtmsURL} so falling back to default domain`,\n {\n module: WEB_CALLING_SERVICE_FILE,\n method: METHODS.GET_RTMS_DOMAIN,\n }\n );\n\n return DEFAULT_RTMS_DOMAIN;\n }\n }\n\n /**\n * Registers the WebCalling line for receiving calls\n * Sets up event listeners for line events and initializes the calling client\n *\n * @private\n * @returns {Promise<void>} A promise that resolves when registration is complete\n * @throws {Error} When registration times out\n */\n public async registerWebCallingLine(): Promise<void> {\n const rtmsDomain = await this.getRTMSDomain(); // get the RTMS domain from the u2c catalogue\n\n const callingClientConfig = {\n logger: {\n level: LOGGER.INFO,\n },\n serviceData: {\n indicator: ServiceIndicator.CONTACT_CENTER,\n domain: rtmsDomain,\n },\n };\n\n this.callingClient = await createClient(this.webex as any, callingClientConfig);\n this.line = Object.values(this.callingClient.getLines())[0];\n\n this.line.on(LINE_EVENTS.UNREGISTERED, () => {\n LoggerProxy.log(`WxCC-SDK: Desktop unregistered successfully`, {\n module: WEB_CALLING_SERVICE_FILE,\n method: METHODS.REGISTER_WEB_CALLING_LINE,\n });\n });\n\n // Start listening for incoming calls\n this.line.on(LINE_EVENTS.INCOMING_CALL, (call: ICall) => {\n this.call = call;\n this.emit(LINE_EVENTS.INCOMING_CALL, call);\n });\n\n return new Promise<void>((resolve, reject) => {\n const timeout = setTimeout(() => {\n reject(new Error('WebCallingService Registration timed out'));\n }, TIMEOUT_DURATION);\n\n this.line.on(LINE_EVENTS.REGISTERED, (deviceInfo: ILine) => {\n clearTimeout(timeout);\n LoggerProxy.log(\n `WxCC-SDK: Desktop registered successfully, mobiusDeviceId: ${deviceInfo.mobiusDeviceId}`,\n {module: WEB_CALLING_SERVICE_FILE, method: METHODS.REGISTER_WEB_CALLING_LINE}\n );\n resolve();\n });\n this.line.register();\n });\n }\n\n /**\n * Deregisters the WebCalling line\n * Cleans up any active calls and deregisters from the calling service\n *\n * @private\n * @returns {Promise<void>} A promise that resolves when deregistration is complete\n */\n public async deregisterWebCallingLine(): Promise<void> {\n LoggerProxy.log(DEREGISTER_WEBCALLING_LINE_MSG, {\n module: WEB_CALLING_SERVICE_FILE,\n method: METHODS.DEREGISTER_WEB_CALLING_LINE,\n });\n this.cleanUpCall();\n this.line?.deregister();\n }\n\n /**\n * Answers an incoming call with the provided audio stream\n *\n * @private\n * @param {LocalMicrophoneStream} localAudioStream - The local microphone stream to use\n * @param {string} taskId - The task ID associated with this call\n * @throws {Error} If answering the call fails\n */\n public answerCall(localAudioStream: LocalMicrophoneStream, taskId: string): void {\n if (this.call) {\n try {\n LoggerProxy.info(`Call answered: ${taskId}`, {\n module: WEB_CALLING_SERVICE_FILE,\n method: METHODS.ANSWER_CALL,\n });\n this.call.answer(localAudioStream);\n this.registerCallListeners();\n } catch (error) {\n LoggerProxy.error(`Failed to answer call for ${taskId}. Error: ${error}`, {\n module: WEB_CALLING_SERVICE_FILE,\n method: METHODS.ANSWER_CALL,\n });\n // Optionally, throw the error to allow the invoker to handle it\n throw error;\n }\n } else {\n LoggerProxy.log(`Cannot answer a non WebRtc Call: ${taskId}`, {\n module: WEB_CALLING_SERVICE_FILE,\n method: METHODS.ANSWER_CALL,\n });\n }\n }\n\n /**\n * Toggles the mute state of the current call\n *\n * @private\n * @param {LocalMicrophoneStream} localAudioStream - The local microphone stream to control\n */\n public muteUnmuteCall(localAudioStream: LocalMicrophoneStream): void {\n if (this.call) {\n LoggerProxy.info('Call mute or unmute requested!', {\n module: WEB_CALLING_SERVICE_FILE,\n method: METHODS.MUTE_UNMUTE_CALL,\n });\n this.call.mute(localAudioStream);\n } else {\n LoggerProxy.log(`Cannot mute a non WebRtc Call`, {\n module: WEB_CALLING_SERVICE_FILE,\n method: METHODS.MUTE_UNMUTE_CALL,\n });\n }\n }\n\n /**\n * Checks if the current call is muted\n *\n * @private\n * @returns {boolean} True if the call is muted, false otherwise or if no call exists\n */\n public isCallMuted(): boolean {\n if (this.call) {\n return this.call.isMuted();\n }\n\n return false;\n }\n\n /**\n * Declines or ends the current call\n *\n * @private\n * @param {string} taskId - The task ID associated with this call\n * @throws {Error} If ending the call fails\n */\n public declineCall(taskId: string): void {\n if (this.call) {\n try {\n LoggerProxy.info(`Call end requested: ${taskId}`, {\n module: WEB_CALLING_SERVICE_FILE,\n method: METHODS.DECLINE_CALL,\n });\n this.call.end();\n this.cleanUpCall();\n } catch (error) {\n LoggerProxy.error(`Failed to end call: ${taskId}. Error: ${error}`, {\n module: WEB_CALLING_SERVICE_FILE,\n method: METHODS.DECLINE_CALL,\n });\n // Optionally, throw the error to allow the invoker to handle it\n throw error;\n }\n } else {\n LoggerProxy.log(`Cannot end a non WebRtc Call: ${taskId}`, {\n module: WEB_CALLING_SERVICE_FILE,\n method: METHODS.DECLINE_CALL,\n });\n }\n }\n\n /**\n * Maps a call ID to a task ID for correlation\n *\n * @private\n * @param {string} callId - The unique call identifier\n * @param {string} taskId - The associated task identifier\n */\n public mapCallToTask(callId: string, taskId: string): void {\n this.callTaskMap.set(callId, taskId);\n }\n\n /**\n * Gets the task ID associated with a call ID\n *\n * @private\n * @param {string} callId - The call ID to look up\n * @returns {string|undefined} The associated task ID or undefined if not found\n */\n public getTaskIdForCall(callId: string): string | undefined {\n return this.callTaskMap.get(callId);\n }\n}\n"],"mappings":"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","ignoreList":[]}
|