@webex/contact-center 3.12.0-next.8 → 3.12.0-next.80
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +438 -0
- package/ai-docs/README.md +131 -0
- package/ai-docs/RULES.md +455 -0
- package/ai-docs/patterns/event-driven-patterns.md +485 -0
- package/ai-docs/patterns/testing-patterns.md +480 -0
- package/ai-docs/patterns/typescript-patterns.md +365 -0
- package/ai-docs/templates/README.md +102 -0
- package/ai-docs/templates/documentation/create-agents-md.md +240 -0
- package/ai-docs/templates/documentation/create-architecture-md.md +295 -0
- package/ai-docs/templates/existing-service/bug-fix.md +254 -0
- package/ai-docs/templates/existing-service/feature-enhancement.md +450 -0
- package/ai-docs/templates/new-method/00-master.md +80 -0
- package/ai-docs/templates/new-method/01-requirements.md +232 -0
- package/ai-docs/templates/new-method/02-implementation.md +295 -0
- package/ai-docs/templates/new-method/03-tests.md +201 -0
- package/ai-docs/templates/new-method/04-validation.md +141 -0
- package/ai-docs/templates/new-service/00-master.md +109 -0
- package/ai-docs/templates/new-service/01-pre-questions.md +159 -0
- package/ai-docs/templates/new-service/02-code-generation.md +346 -0
- package/ai-docs/templates/new-service/03-integration.md +178 -0
- package/ai-docs/templates/new-service/04-test-generation.md +205 -0
- package/ai-docs/templates/new-service/05-validation.md +145 -0
- package/dist/cc.js +265 -29
- package/dist/cc.js.map +1 -1
- package/dist/config.js +6 -0
- package/dist/config.js.map +1 -1
- package/dist/constants.js +16 -1
- package/dist/constants.js.map +1 -1
- package/dist/index.js +20 -5
- package/dist/index.js.map +1 -1
- package/dist/metrics/behavioral-events.js +101 -0
- package/dist/metrics/behavioral-events.js.map +1 -1
- package/dist/metrics/constants.js +23 -4
- package/dist/metrics/constants.js.map +1 -1
- package/dist/services/ApiAiAssistant.js +74 -3
- package/dist/services/ApiAiAssistant.js.map +1 -1
- package/dist/services/UserPreference.js +427 -0
- package/dist/services/UserPreference.js.map +1 -0
- package/dist/services/config/Util.js +3 -3
- package/dist/services/config/Util.js.map +1 -1
- package/dist/services/config/constants.js +23 -2
- package/dist/services/config/constants.js.map +1 -1
- package/dist/services/config/types.js +49 -9
- package/dist/services/config/types.js.map +1 -1
- package/dist/services/core/Err.js.map +1 -1
- package/dist/services/core/Utils.js +107 -32
- package/dist/services/core/Utils.js.map +1 -1
- package/dist/services/core/websocket/WebSocketManager.js +2 -1
- package/dist/services/core/websocket/WebSocketManager.js.map +1 -1
- package/dist/services/core/websocket/types.js.map +1 -1
- package/dist/services/index.js +1 -1
- package/dist/services/index.js.map +1 -1
- package/dist/services/task/Task.js +688 -0
- package/dist/services/task/Task.js.map +1 -0
- package/dist/services/task/TaskFactory.js +45 -0
- package/dist/services/task/TaskFactory.js.map +1 -0
- package/dist/services/task/TaskManager.js +725 -526
- package/dist/services/task/TaskManager.js.map +1 -1
- package/dist/services/task/TaskUtils.js +162 -26
- package/dist/services/task/TaskUtils.js.map +1 -1
- package/dist/services/task/constants.js +9 -2
- package/dist/services/task/constants.js.map +1 -1
- package/dist/services/task/dialer.js +78 -0
- package/dist/services/task/dialer.js.map +1 -1
- package/dist/services/task/digital/Digital.js +77 -0
- package/dist/services/task/digital/Digital.js.map +1 -0
- package/dist/services/task/state-machine/TaskStateMachine.js +837 -0
- package/dist/services/task/state-machine/TaskStateMachine.js.map +1 -0
- package/dist/services/task/state-machine/actions.js +543 -0
- package/dist/services/task/state-machine/actions.js.map +1 -0
- package/dist/services/task/state-machine/constants.js +161 -0
- package/dist/services/task/state-machine/constants.js.map +1 -0
- package/dist/services/task/state-machine/guards.js +340 -0
- package/dist/services/task/state-machine/guards.js.map +1 -0
- package/dist/services/task/state-machine/index.js +53 -0
- package/dist/services/task/state-machine/index.js.map +1 -0
- package/dist/services/task/state-machine/types.js +54 -0
- package/dist/services/task/state-machine/types.js.map +1 -0
- package/dist/services/task/state-machine/uiControlsComputer.js +553 -0
- package/dist/services/task/state-machine/uiControlsComputer.js.map +1 -0
- package/dist/services/task/taskDataNormalizer.js +99 -0
- package/dist/services/task/taskDataNormalizer.js.map +1 -0
- package/dist/services/task/types.js +212 -4
- package/dist/services/task/types.js.map +1 -1
- package/dist/services/task/voice/Voice.js +1042 -0
- package/dist/services/task/voice/Voice.js.map +1 -0
- package/dist/services/task/voice/WebRTC.js +149 -0
- package/dist/services/task/voice/WebRTC.js.map +1 -0
- package/dist/types/cc.d.ts +94 -1
- package/dist/types/config.d.ts +6 -0
- package/dist/types/constants.d.ts +16 -1
- package/dist/types/index.d.ts +21 -6
- package/dist/types/metrics/constants.d.ts +19 -1
- package/dist/types/services/ApiAiAssistant.d.ts +11 -3
- package/dist/types/services/UserPreference.d.ts +118 -0
- package/dist/types/services/config/constants.d.ts +21 -0
- package/dist/types/services/config/types.d.ts +171 -10
- package/dist/types/services/core/Err.d.ts +4 -0
- package/dist/types/services/core/Utils.d.ts +33 -13
- package/dist/types/services/core/websocket/WebSocketManager.d.ts +1 -0
- package/dist/types/services/core/websocket/types.d.ts +1 -1
- package/dist/types/services/index.d.ts +1 -1
- package/dist/types/services/task/Task.d.ts +157 -0
- package/dist/types/services/task/TaskFactory.d.ts +12 -0
- package/dist/types/services/task/TaskUtils.d.ts +46 -2
- package/dist/types/services/task/constants.d.ts +7 -0
- package/dist/types/services/task/dialer.d.ts +30 -0
- package/dist/types/services/task/digital/Digital.d.ts +22 -0
- package/dist/types/services/task/state-machine/TaskStateMachine.d.ts +1144 -0
- package/dist/types/services/task/state-machine/actions.d.ts +10 -0
- package/dist/types/services/task/state-machine/constants.d.ts +107 -0
- package/dist/types/services/task/state-machine/guards.d.ts +90 -0
- package/dist/types/services/task/state-machine/index.d.ts +13 -0
- package/dist/types/services/task/state-machine/types.d.ts +267 -0
- package/dist/types/services/task/state-machine/uiControlsComputer.d.ts +9 -0
- package/dist/types/services/task/taskDataNormalizer.d.ts +10 -0
- package/dist/types/services/task/types.d.ts +603 -66
- package/dist/types/services/task/voice/Voice.d.ts +184 -0
- package/dist/types/services/task/voice/WebRTC.d.ts +53 -0
- package/dist/types/types.d.ts +94 -0
- package/dist/types/webex.d.ts +1 -0
- package/dist/types.js +85 -0
- package/dist/types.js.map +1 -1
- package/dist/webex.js +14 -2
- package/dist/webex.js.map +1 -1
- package/package.json +15 -12
- package/src/cc.ts +329 -30
- package/src/config.ts +6 -0
- package/src/constants.ts +16 -1
- package/src/index.ts +23 -5
- package/src/metrics/ai-docs/AGENTS.md +348 -0
- package/src/metrics/ai-docs/ARCHITECTURE.md +336 -0
- package/src/metrics/behavioral-events.ts +106 -0
- package/src/metrics/constants.ts +23 -4
- package/src/services/ApiAiAssistant.ts +104 -3
- package/src/services/UserPreference.ts +509 -0
- package/src/services/agent/ai-docs/AGENTS.md +238 -0
- package/src/services/agent/ai-docs/ARCHITECTURE.md +302 -0
- package/src/services/ai-docs/AGENTS.md +384 -0
- package/src/services/config/Util.ts +3 -3
- package/src/services/config/ai-docs/AGENTS.md +253 -0
- package/src/services/config/ai-docs/ARCHITECTURE.md +424 -0
- package/src/services/config/constants.ts +25 -1
- package/src/services/config/types.ts +174 -11
- package/src/services/core/Err.ts +2 -0
- package/src/services/core/Utils.ts +123 -37
- package/src/services/core/ai-docs/AGENTS.md +379 -0
- package/src/services/core/ai-docs/ARCHITECTURE.md +696 -0
- package/src/services/core/websocket/WebSocketManager.ts +2 -0
- package/src/services/core/websocket/types.ts +1 -1
- package/src/services/index.ts +1 -1
- package/src/services/task/Task.ts +837 -0
- package/src/services/task/TaskFactory.ts +55 -0
- package/src/services/task/TaskManager.ts +738 -613
- package/src/services/task/TaskUtils.ts +205 -25
- package/src/services/task/ai-docs/AGENTS.md +455 -0
- package/src/services/task/ai-docs/ARCHITECTURE.md +585 -0
- package/src/services/task/constants.ts +7 -0
- package/src/services/task/dialer.ts +80 -0
- package/src/services/task/digital/Digital.ts +95 -0
- package/src/services/task/state-machine/TaskStateMachine.ts +1077 -0
- package/src/services/task/state-machine/actions.ts +685 -0
- package/src/services/task/state-machine/ai-docs/AGENTS.md +495 -0
- package/src/services/task/state-machine/ai-docs/ARCHITECTURE.md +1135 -0
- package/src/services/task/state-machine/constants.ts +172 -0
- package/src/services/task/state-machine/guards.ts +406 -0
- package/src/services/task/state-machine/index.ts +28 -0
- package/src/services/task/state-machine/types.ts +241 -0
- package/src/services/task/state-machine/uiControlsComputer.ts +867 -0
- package/src/services/task/taskDataNormalizer.ts +137 -0
- package/src/services/task/types.ts +710 -71
- package/src/services/task/voice/Voice.ts +1267 -0
- package/src/services/task/voice/WebRTC.ts +187 -0
- package/src/types.ts +122 -2
- package/src/utils/AGENTS.md +276 -0
- package/src/webex.js +2 -0
- package/test/unit/spec/cc.ts +343 -23
- package/test/unit/spec/logger-proxy.ts +70 -0
- package/test/unit/spec/services/ApiAiAssistant.ts +122 -17
- package/test/unit/spec/services/UserPreference.ts +401 -0
- package/test/unit/spec/services/WebCallingService.ts +7 -1
- package/test/unit/spec/services/config/index.ts +30 -30
- package/test/unit/spec/services/core/Utils.ts +425 -8
- package/test/unit/spec/services/core/websocket/WebSocketManager.ts +66 -40
- package/test/unit/spec/services/task/AutoWrapup.ts +63 -0
- package/test/unit/spec/services/task/Task.ts +477 -0
- package/test/unit/spec/services/task/TaskFactory.ts +62 -0
- package/test/unit/spec/services/task/TaskManager.ts +832 -1702
- package/test/unit/spec/services/task/TaskUtils.ts +206 -0
- package/test/unit/spec/services/task/dialer.ts +190 -0
- package/test/unit/spec/services/task/digital/Digital.ts +105 -0
- package/test/unit/spec/services/task/state-machine/TaskStateMachine.ts +1825 -0
- package/test/unit/spec/services/task/state-machine/guards.ts +479 -0
- package/test/unit/spec/services/task/state-machine/types.ts +18 -0
- package/test/unit/spec/services/task/state-machine/uiControlsComputer.ts +2020 -0
- package/test/unit/spec/services/task/taskTestUtils.ts +87 -0
- package/test/unit/spec/services/task/voice/Voice.ts +631 -0
- package/test/unit/spec/services/task/voice/WebRTC.ts +235 -0
- package/umd/contact-center.min.js +2 -2
- package/umd/contact-center.min.js.map +1 -1
- package/dist/services/task/index.js +0 -1525
- 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 -1801
- package/test/unit/spec/services/task/index.ts +0 -2184
|
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = exports.ApiAIAssistant = void 0;
|
|
7
|
+
var _uuid = require("uuid");
|
|
7
8
|
var _loggerProxy = _interopRequireDefault(require("../logger-proxy"));
|
|
8
9
|
var _MetricsManager = _interopRequireDefault(require("../metrics/MetricsManager"));
|
|
9
10
|
var _constants = require("../metrics/constants");
|
|
@@ -58,7 +59,7 @@ class ApiAIAssistant {
|
|
|
58
59
|
* @param eventName - the name of the event (e.g. 'GET_TRANSCRIPTS')
|
|
59
60
|
* @param action - action within eventDetails (e.g. 'START' or 'STOP')
|
|
60
61
|
*/
|
|
61
|
-
async sendEvent(agentId, interactionId, eventType, eventName, action) {
|
|
62
|
+
async sendEvent(agentId, interactionId, eventType, eventName, action, context, languageCode, trackingId) {
|
|
62
63
|
_loggerProxy.default.info('Sending event', {
|
|
63
64
|
module: _constants2.CC_FILE,
|
|
64
65
|
method: _constants2.METHODS.SEND_EVENT,
|
|
@@ -66,7 +67,8 @@ class ApiAIAssistant {
|
|
|
66
67
|
data: {
|
|
67
68
|
eventType,
|
|
68
69
|
eventName,
|
|
69
|
-
action
|
|
70
|
+
action,
|
|
71
|
+
context
|
|
70
72
|
}
|
|
71
73
|
});
|
|
72
74
|
this.metricsManager.timeEvent([_constants.METRIC_EVENT_NAMES.AI_ASSISTANT_SEND_EVENT_SUCCESS, _constants.METRIC_EVENT_NAMES.AI_ASSISTANT_SEND_EVENT_FAILED]);
|
|
@@ -86,7 +88,10 @@ class ApiAIAssistant {
|
|
|
86
88
|
data: {
|
|
87
89
|
interactionId,
|
|
88
90
|
action,
|
|
89
|
-
|
|
91
|
+
context,
|
|
92
|
+
actionTimeStamp: String(Date.now()),
|
|
93
|
+
languageCode,
|
|
94
|
+
trackingId
|
|
90
95
|
}
|
|
91
96
|
}
|
|
92
97
|
}
|
|
@@ -115,6 +120,72 @@ class ApiAIAssistant {
|
|
|
115
120
|
}
|
|
116
121
|
}
|
|
117
122
|
|
|
123
|
+
/**
|
|
124
|
+
* Requests a suggested response for an interaction.
|
|
125
|
+
*
|
|
126
|
+
* @param params - Suggestion request parameters
|
|
127
|
+
* @returns HTTP response body from the AI Assistant event API
|
|
128
|
+
* @public
|
|
129
|
+
*/
|
|
130
|
+
async getSuggestedResponse(params) {
|
|
131
|
+
const {
|
|
132
|
+
agentId,
|
|
133
|
+
interactionId,
|
|
134
|
+
context
|
|
135
|
+
} = params;
|
|
136
|
+
const trimmedContext = context?.trim();
|
|
137
|
+
const languageCode = params.languageCode ?? 'en';
|
|
138
|
+
const trackingId = `WX_CC_SDK_${(0, _uuid.v4)()}`;
|
|
139
|
+
const eventName = trimmedContext ? _types.AIAssistantEventName.ADD_SUGGESTIONS_EXTRA_CONTEXT : _types.AIAssistantEventName.GET_SUGGESTIONS;
|
|
140
|
+
const loggerContext = {
|
|
141
|
+
module: _constants2.CC_FILE,
|
|
142
|
+
method: _constants2.METHODS.GET_SUGGESTED_RESPONSE,
|
|
143
|
+
interactionId,
|
|
144
|
+
trackingId,
|
|
145
|
+
data: {
|
|
146
|
+
eventName
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
_loggerProxy.default.info('Requesting suggested response', loggerContext);
|
|
150
|
+
this.metricsManager.timeEvent([_constants.METRIC_EVENT_NAMES.AI_ASSISTANT_GET_SUGGESTED_RESPONSE_SUCCESS, _constants.METRIC_EVENT_NAMES.AI_ASSISTANT_GET_SUGGESTED_RESPONSE_FAILED]);
|
|
151
|
+
try {
|
|
152
|
+
if (!this.aiFeature?.suggestedResponses?.enable) {
|
|
153
|
+
const {
|
|
154
|
+
error: detailedError
|
|
155
|
+
} = (0, _Utils.getErrorDetails)(new Error('SUGGESTED_RESPONSES_NOT_ENABLED'), _constants2.METHODS.GET_SUGGESTED_RESPONSE, _constants2.CC_FILE);
|
|
156
|
+
throw detailedError;
|
|
157
|
+
}
|
|
158
|
+
const orgId = this.webex.credentials.getOrgId();
|
|
159
|
+
const response = await this.sendEvent(agentId, interactionId, _types.AIAssistantEventType.CUSTOM_EVENT, eventName, undefined, trimmedContext, languageCode, trackingId);
|
|
160
|
+
this.metricsManager.trackEvent(_constants.METRIC_EVENT_NAMES.AI_ASSISTANT_GET_SUGGESTED_RESPONSE_SUCCESS, {
|
|
161
|
+
agentId,
|
|
162
|
+
orgId,
|
|
163
|
+
interactionId,
|
|
164
|
+
eventName,
|
|
165
|
+
trackingId,
|
|
166
|
+
context
|
|
167
|
+
}, ['operational']);
|
|
168
|
+
_loggerProxy.default.log('Suggested response request succeeded', loggerContext);
|
|
169
|
+
return response;
|
|
170
|
+
} catch (error) {
|
|
171
|
+
_loggerProxy.default.error('Suggested response request failed', {
|
|
172
|
+
...loggerContext,
|
|
173
|
+
error
|
|
174
|
+
});
|
|
175
|
+
this.metricsManager.trackEvent(_constants.METRIC_EVENT_NAMES.AI_ASSISTANT_GET_SUGGESTED_RESPONSE_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_SUGGESTED_RESPONSE, _constants2.CC_FILE);
|
|
185
|
+
throw detailedError;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
118
189
|
/**
|
|
119
190
|
* Fetches historic transcripts for an interaction.
|
|
120
191
|
* This API is allowed only when real-time transcription feature is enabled.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_loggerProxy","_interopRequireDefault","require","_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","action","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","fetchHistoricTranscripts","FETCH_HISTORIC_TRANSCRIPTS","AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_SUCCESS","AI_ASSISTANT_FETCH_HISTORIC_TRANSCRIPTS_FAILED","realtimeTranscripts","enable","TRANSCRIPTS_LIST","exports","_default"],"sources":["ApiAiAssistant.ts"],"sourcesContent":["import 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 TranscriptAction,\n AIAssistantEventType,\n AIAssistantEventName,\n HistoricTranscriptsResponse,\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 public 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 action - action within eventDetails (e.g. 'START' or 'STOP')\n */\n public async sendEvent(\n agentId: string,\n interactionId: string,\n eventType: AIAssistantEventType,\n eventName: AIAssistantEventName,\n action: TranscriptAction\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, action},\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 interactionId,\n action,\n actionTimeStamp: String(Date.now()),\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, action},\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 action,\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 * 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 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":"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","ignoreList":[]}
|
|
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","action","context","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","getSuggestedResponse","params","trimmedContext","trim","uuidv4","AIAssistantEventName","ADD_SUGGESTIONS_EXTRA_CONTEXT","GET_SUGGESTIONS","loggerContext","GET_SUGGESTED_RESPONSE","AI_ASSISTANT_GET_SUGGESTED_RESPONSE_SUCCESS","AI_ASSISTANT_GET_SUGGESTED_RESPONSE_FAILED","suggestedResponses","enable","AIAssistantEventType","CUSTOM_EVENT","undefined","log","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 TranscriptAction,\n AIAssistantEventType,\n AIAssistantEventName,\n HistoricTranscriptsResponse,\n SuggestedResponseParams,\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 action - action within eventDetails (e.g. 'START' or 'STOP')\n */\n public async sendEvent(\n agentId: string,\n interactionId: string,\n eventType: AIAssistantEventType,\n eventName: AIAssistantEventName,\n action?: TranscriptAction,\n context?: string,\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, action, context},\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 interactionId,\n action,\n context,\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, action},\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 action,\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 a suggested response for an interaction.\n *\n * @param params - Suggestion request parameters\n * @returns HTTP response body from the AI Assistant event API\n * @public\n */\n public async getSuggestedResponse(params: SuggestedResponseParams): Promise<any> {\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_SUGGESTED_RESPONSE,\n interactionId,\n trackingId,\n data: {eventName},\n };\n\n LoggerProxy.info('Requesting suggested response', loggerContext);\n\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.AI_ASSISTANT_GET_SUGGESTED_RESPONSE_SUCCESS,\n METRIC_EVENT_NAMES.AI_ASSISTANT_GET_SUGGESTED_RESPONSE_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_SUGGESTED_RESPONSE,\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 undefined,\n trimmedContext,\n languageCode,\n trackingId\n );\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.AI_ASSISTANT_GET_SUGGESTED_RESPONSE_SUCCESS,\n {\n agentId,\n orgId,\n interactionId,\n eventName,\n trackingId,\n context,\n },\n ['operational']\n );\n LoggerProxy.log('Suggested response request succeeded', loggerContext);\n\n return response;\n } catch (error) {\n LoggerProxy.error('Suggested response request failed', {...loggerContext, error});\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.AI_ASSISTANT_GET_SUGGESTED_RESPONSE_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_SUGGESTED_RESPONSE,\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":"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","ignoreList":[]}
|
|
@@ -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
|