@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.
Files changed (205) hide show
  1. package/AGENTS.md +438 -0
  2. package/ai-docs/README.md +131 -0
  3. package/ai-docs/RULES.md +455 -0
  4. package/ai-docs/patterns/event-driven-patterns.md +485 -0
  5. package/ai-docs/patterns/testing-patterns.md +480 -0
  6. package/ai-docs/patterns/typescript-patterns.md +365 -0
  7. package/ai-docs/templates/README.md +102 -0
  8. package/ai-docs/templates/documentation/create-agents-md.md +240 -0
  9. package/ai-docs/templates/documentation/create-architecture-md.md +295 -0
  10. package/ai-docs/templates/existing-service/bug-fix.md +254 -0
  11. package/ai-docs/templates/existing-service/feature-enhancement.md +450 -0
  12. package/ai-docs/templates/new-method/00-master.md +80 -0
  13. package/ai-docs/templates/new-method/01-requirements.md +232 -0
  14. package/ai-docs/templates/new-method/02-implementation.md +295 -0
  15. package/ai-docs/templates/new-method/03-tests.md +201 -0
  16. package/ai-docs/templates/new-method/04-validation.md +141 -0
  17. package/ai-docs/templates/new-service/00-master.md +109 -0
  18. package/ai-docs/templates/new-service/01-pre-questions.md +159 -0
  19. package/ai-docs/templates/new-service/02-code-generation.md +346 -0
  20. package/ai-docs/templates/new-service/03-integration.md +178 -0
  21. package/ai-docs/templates/new-service/04-test-generation.md +205 -0
  22. package/ai-docs/templates/new-service/05-validation.md +145 -0
  23. package/dist/cc.js +265 -29
  24. package/dist/cc.js.map +1 -1
  25. package/dist/config.js +6 -0
  26. package/dist/config.js.map +1 -1
  27. package/dist/constants.js +16 -1
  28. package/dist/constants.js.map +1 -1
  29. package/dist/index.js +20 -5
  30. package/dist/index.js.map +1 -1
  31. package/dist/metrics/behavioral-events.js +101 -0
  32. package/dist/metrics/behavioral-events.js.map +1 -1
  33. package/dist/metrics/constants.js +23 -4
  34. package/dist/metrics/constants.js.map +1 -1
  35. package/dist/services/ApiAiAssistant.js +74 -3
  36. package/dist/services/ApiAiAssistant.js.map +1 -1
  37. package/dist/services/UserPreference.js +427 -0
  38. package/dist/services/UserPreference.js.map +1 -0
  39. package/dist/services/config/Util.js +3 -3
  40. package/dist/services/config/Util.js.map +1 -1
  41. package/dist/services/config/constants.js +23 -2
  42. package/dist/services/config/constants.js.map +1 -1
  43. package/dist/services/config/types.js +49 -9
  44. package/dist/services/config/types.js.map +1 -1
  45. package/dist/services/core/Err.js.map +1 -1
  46. package/dist/services/core/Utils.js +107 -32
  47. package/dist/services/core/Utils.js.map +1 -1
  48. package/dist/services/core/websocket/WebSocketManager.js +2 -1
  49. package/dist/services/core/websocket/WebSocketManager.js.map +1 -1
  50. package/dist/services/core/websocket/types.js.map +1 -1
  51. package/dist/services/index.js +1 -1
  52. package/dist/services/index.js.map +1 -1
  53. package/dist/services/task/Task.js +688 -0
  54. package/dist/services/task/Task.js.map +1 -0
  55. package/dist/services/task/TaskFactory.js +45 -0
  56. package/dist/services/task/TaskFactory.js.map +1 -0
  57. package/dist/services/task/TaskManager.js +725 -526
  58. package/dist/services/task/TaskManager.js.map +1 -1
  59. package/dist/services/task/TaskUtils.js +162 -26
  60. package/dist/services/task/TaskUtils.js.map +1 -1
  61. package/dist/services/task/constants.js +9 -2
  62. package/dist/services/task/constants.js.map +1 -1
  63. package/dist/services/task/dialer.js +78 -0
  64. package/dist/services/task/dialer.js.map +1 -1
  65. package/dist/services/task/digital/Digital.js +77 -0
  66. package/dist/services/task/digital/Digital.js.map +1 -0
  67. package/dist/services/task/state-machine/TaskStateMachine.js +837 -0
  68. package/dist/services/task/state-machine/TaskStateMachine.js.map +1 -0
  69. package/dist/services/task/state-machine/actions.js +543 -0
  70. package/dist/services/task/state-machine/actions.js.map +1 -0
  71. package/dist/services/task/state-machine/constants.js +161 -0
  72. package/dist/services/task/state-machine/constants.js.map +1 -0
  73. package/dist/services/task/state-machine/guards.js +340 -0
  74. package/dist/services/task/state-machine/guards.js.map +1 -0
  75. package/dist/services/task/state-machine/index.js +53 -0
  76. package/dist/services/task/state-machine/index.js.map +1 -0
  77. package/dist/services/task/state-machine/types.js +54 -0
  78. package/dist/services/task/state-machine/types.js.map +1 -0
  79. package/dist/services/task/state-machine/uiControlsComputer.js +553 -0
  80. package/dist/services/task/state-machine/uiControlsComputer.js.map +1 -0
  81. package/dist/services/task/taskDataNormalizer.js +99 -0
  82. package/dist/services/task/taskDataNormalizer.js.map +1 -0
  83. package/dist/services/task/types.js +212 -4
  84. package/dist/services/task/types.js.map +1 -1
  85. package/dist/services/task/voice/Voice.js +1042 -0
  86. package/dist/services/task/voice/Voice.js.map +1 -0
  87. package/dist/services/task/voice/WebRTC.js +149 -0
  88. package/dist/services/task/voice/WebRTC.js.map +1 -0
  89. package/dist/types/cc.d.ts +94 -1
  90. package/dist/types/config.d.ts +6 -0
  91. package/dist/types/constants.d.ts +16 -1
  92. package/dist/types/index.d.ts +21 -6
  93. package/dist/types/metrics/constants.d.ts +19 -1
  94. package/dist/types/services/ApiAiAssistant.d.ts +11 -3
  95. package/dist/types/services/UserPreference.d.ts +118 -0
  96. package/dist/types/services/config/constants.d.ts +21 -0
  97. package/dist/types/services/config/types.d.ts +171 -10
  98. package/dist/types/services/core/Err.d.ts +4 -0
  99. package/dist/types/services/core/Utils.d.ts +33 -13
  100. package/dist/types/services/core/websocket/WebSocketManager.d.ts +1 -0
  101. package/dist/types/services/core/websocket/types.d.ts +1 -1
  102. package/dist/types/services/index.d.ts +1 -1
  103. package/dist/types/services/task/Task.d.ts +157 -0
  104. package/dist/types/services/task/TaskFactory.d.ts +12 -0
  105. package/dist/types/services/task/TaskUtils.d.ts +46 -2
  106. package/dist/types/services/task/constants.d.ts +7 -0
  107. package/dist/types/services/task/dialer.d.ts +30 -0
  108. package/dist/types/services/task/digital/Digital.d.ts +22 -0
  109. package/dist/types/services/task/state-machine/TaskStateMachine.d.ts +1144 -0
  110. package/dist/types/services/task/state-machine/actions.d.ts +10 -0
  111. package/dist/types/services/task/state-machine/constants.d.ts +107 -0
  112. package/dist/types/services/task/state-machine/guards.d.ts +90 -0
  113. package/dist/types/services/task/state-machine/index.d.ts +13 -0
  114. package/dist/types/services/task/state-machine/types.d.ts +267 -0
  115. package/dist/types/services/task/state-machine/uiControlsComputer.d.ts +9 -0
  116. package/dist/types/services/task/taskDataNormalizer.d.ts +10 -0
  117. package/dist/types/services/task/types.d.ts +603 -66
  118. package/dist/types/services/task/voice/Voice.d.ts +184 -0
  119. package/dist/types/services/task/voice/WebRTC.d.ts +53 -0
  120. package/dist/types/types.d.ts +94 -0
  121. package/dist/types/webex.d.ts +1 -0
  122. package/dist/types.js +85 -0
  123. package/dist/types.js.map +1 -1
  124. package/dist/webex.js +14 -2
  125. package/dist/webex.js.map +1 -1
  126. package/package.json +15 -12
  127. package/src/cc.ts +329 -30
  128. package/src/config.ts +6 -0
  129. package/src/constants.ts +16 -1
  130. package/src/index.ts +23 -5
  131. package/src/metrics/ai-docs/AGENTS.md +348 -0
  132. package/src/metrics/ai-docs/ARCHITECTURE.md +336 -0
  133. package/src/metrics/behavioral-events.ts +106 -0
  134. package/src/metrics/constants.ts +23 -4
  135. package/src/services/ApiAiAssistant.ts +104 -3
  136. package/src/services/UserPreference.ts +509 -0
  137. package/src/services/agent/ai-docs/AGENTS.md +238 -0
  138. package/src/services/agent/ai-docs/ARCHITECTURE.md +302 -0
  139. package/src/services/ai-docs/AGENTS.md +384 -0
  140. package/src/services/config/Util.ts +3 -3
  141. package/src/services/config/ai-docs/AGENTS.md +253 -0
  142. package/src/services/config/ai-docs/ARCHITECTURE.md +424 -0
  143. package/src/services/config/constants.ts +25 -1
  144. package/src/services/config/types.ts +174 -11
  145. package/src/services/core/Err.ts +2 -0
  146. package/src/services/core/Utils.ts +123 -37
  147. package/src/services/core/ai-docs/AGENTS.md +379 -0
  148. package/src/services/core/ai-docs/ARCHITECTURE.md +696 -0
  149. package/src/services/core/websocket/WebSocketManager.ts +2 -0
  150. package/src/services/core/websocket/types.ts +1 -1
  151. package/src/services/index.ts +1 -1
  152. package/src/services/task/Task.ts +837 -0
  153. package/src/services/task/TaskFactory.ts +55 -0
  154. package/src/services/task/TaskManager.ts +738 -613
  155. package/src/services/task/TaskUtils.ts +205 -25
  156. package/src/services/task/ai-docs/AGENTS.md +455 -0
  157. package/src/services/task/ai-docs/ARCHITECTURE.md +585 -0
  158. package/src/services/task/constants.ts +7 -0
  159. package/src/services/task/dialer.ts +80 -0
  160. package/src/services/task/digital/Digital.ts +95 -0
  161. package/src/services/task/state-machine/TaskStateMachine.ts +1077 -0
  162. package/src/services/task/state-machine/actions.ts +685 -0
  163. package/src/services/task/state-machine/ai-docs/AGENTS.md +495 -0
  164. package/src/services/task/state-machine/ai-docs/ARCHITECTURE.md +1135 -0
  165. package/src/services/task/state-machine/constants.ts +172 -0
  166. package/src/services/task/state-machine/guards.ts +406 -0
  167. package/src/services/task/state-machine/index.ts +28 -0
  168. package/src/services/task/state-machine/types.ts +241 -0
  169. package/src/services/task/state-machine/uiControlsComputer.ts +867 -0
  170. package/src/services/task/taskDataNormalizer.ts +137 -0
  171. package/src/services/task/types.ts +710 -71
  172. package/src/services/task/voice/Voice.ts +1267 -0
  173. package/src/services/task/voice/WebRTC.ts +187 -0
  174. package/src/types.ts +122 -2
  175. package/src/utils/AGENTS.md +276 -0
  176. package/src/webex.js +2 -0
  177. package/test/unit/spec/cc.ts +343 -23
  178. package/test/unit/spec/logger-proxy.ts +70 -0
  179. package/test/unit/spec/services/ApiAiAssistant.ts +122 -17
  180. package/test/unit/spec/services/UserPreference.ts +401 -0
  181. package/test/unit/spec/services/WebCallingService.ts +7 -1
  182. package/test/unit/spec/services/config/index.ts +30 -30
  183. package/test/unit/spec/services/core/Utils.ts +425 -8
  184. package/test/unit/spec/services/core/websocket/WebSocketManager.ts +66 -40
  185. package/test/unit/spec/services/task/AutoWrapup.ts +63 -0
  186. package/test/unit/spec/services/task/Task.ts +477 -0
  187. package/test/unit/spec/services/task/TaskFactory.ts +62 -0
  188. package/test/unit/spec/services/task/TaskManager.ts +832 -1702
  189. package/test/unit/spec/services/task/TaskUtils.ts +206 -0
  190. package/test/unit/spec/services/task/dialer.ts +190 -0
  191. package/test/unit/spec/services/task/digital/Digital.ts +105 -0
  192. package/test/unit/spec/services/task/state-machine/TaskStateMachine.ts +1825 -0
  193. package/test/unit/spec/services/task/state-machine/guards.ts +479 -0
  194. package/test/unit/spec/services/task/state-machine/types.ts +18 -0
  195. package/test/unit/spec/services/task/state-machine/uiControlsComputer.ts +2020 -0
  196. package/test/unit/spec/services/task/taskTestUtils.ts +87 -0
  197. package/test/unit/spec/services/task/voice/Voice.ts +631 -0
  198. package/test/unit/spec/services/task/voice/WebRTC.ts +235 -0
  199. package/umd/contact-center.min.js +2 -2
  200. package/umd/contact-center.min.js.map +1 -1
  201. package/dist/services/task/index.js +0 -1525
  202. package/dist/services/task/index.js.map +0 -1
  203. package/dist/types/services/task/index.d.ts +0 -650
  204. package/src/services/task/index.ts +0 -1801
  205. 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
- actionTimeStamp: String(Date.now())
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":";;;;;;AAAA,IAAAA,YAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,eAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AACA,IAAAG,WAAA,GAAAH,OAAA;AACA,IAAAI,MAAA,GAAAJ,OAAA;AASA,IAAAK,MAAA,GAAAL,OAAA;AACA,IAAAM,WAAA,GAAAN,OAAA;AAKqB,SAAAD,uBAAAQ,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAGrB;AACA;AACA;AACA;AACO,MAAMG,cAAc,CAAC;EAK1BC,WAAWA,CAACC,KAAe,EAAE;IAC3B,IAAI,CAACA,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACC,cAAc,GAAGC,uBAAc,CAACC,WAAW,CAAC;MAACH;IAAK,CAAC,CAAC;EAC3D;EAEOI,iBAAiBA,CAACC,SAAyB,EAAQ;IACxD,IAAI,CAACA,SAAS,GAAGA,SAAS;EAC5B;EAEQC,UAAUA,CAAA,EAAW;IAC3B,MAAMC,gBAAgB,GAAG,IAAI,CAACP,KAAK,CAACQ,QAAQ,CAACC,QAAQ,CAACC,GAAG,CAACC,2BAAe,CAAC,IAAI,EAAE;IAEhF,IAAI,CAACJ,gBAAgB,EAAE;MACrB,MAAM;QAACK,KAAK,EAAEC;MAAa,CAAC,GAAG,IAAAC,sBAAe,EAC5C,IAAIC,KAAK,CAAC,qCAAqC,CAAC,EAChDC,mBAAO,CAACC,YAAY,EACpBC,mBACF,CAAC;MACD,MAAML,aAAa;IACrB;IAEA,IAAIM,QAAQ,GAAG,EAAE;IACjB,IAAI;MACFA,QAAQ,GAAG,IAAIC,GAAG,CAACb,gBAAgB,CAAC,CAACY,QAAQ,CAACE,WAAW,CAAC,CAAC;IAC7D,CAAC,CAAC,OAAOT,KAAK,EAAE;MACdO,QAAQ,GAAGZ,gBAAgB,CAACc,WAAW,CAAC,CAAC;IAC3C;IAEA,MAAMC,WAAW,GAAGC,gCAAoB,CAACJ,QAAQ,CAAC;IAClD,IAAI,CAACG,WAAW,EAAE;MAChB,MAAM;QAACV,KAAK,EAAEC;MAAa,CAAC,GAAG,IAAAC,sBAAe,EAC5C,IAAIC,KAAK,CAAC,qCAAqC,CAAC,EAChDC,mBAAO,CAACC,YAAY,EACpBC,mBACF,CAAC;MACD,MAAML,aAAa;IACrB;IAEA,OAAOW,0CAA8B,CAACC,OAAO,CAAC,IAAI,EAAEH,WAAW,CAAC;EAClE;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAaI,SAASA,CACpBC,OAAe,EACfC,aAAqB,EACrBC,SAA+B,EAC/BC,SAA+B,EAC/BC,MAAwB,EACU;IAClCC,oBAAW,CAACC,IAAI,CAAC,eAAe,EAAE;MAChCC,MAAM,EAAEhB,mBAAO;MACfiB,MAAM,EAAEnB,mBAAO,CAACoB,UAAU;MAC1BR,aAAa;MACbS,IAAI,EAAE;QAACR,SAAS;QAAEC,SAAS;QAAEC;MAAM;IACrC,CAAC,CAAC;IACF,IAAI,CAAC9B,cAAc,CAACqC,SAAS,CAAC,CAC5BC,6BAAkB,CAACC,+BAA+B,EAClDD,6BAAkB,CAACE,8BAA8B,CAClD,CAAC;IAEF,IAAI;MACF,MAAMC,OAAO,GAAG,IAAI,CAACpC,UAAU,CAAC,CAAC;MACjC,MAAMqC,KAAK,GAAG,IAAI,CAAC3C,KAAK,CAAC4C,WAAW,CAACC,QAAQ,CAAC,CAAC;MAC/C,MAAMC,QAAQ,GAAI,MAAM,IAAI,CAAC9C,KAAK,CAAC+C,OAAO,CAAC;QACzCC,GAAG,EAAE,GAAGN,OAAO,GAAGO,iCAAqB,CAACC,KAAK,EAAE;QAC/Cf,MAAM,EAAEgB,mBAAY,CAACC,IAAI;QACzBC,aAAa,EAAE,IAAI;QACnBC,IAAI,EAAE;UACJ3B,OAAO;UACPgB,KAAK;UACLd,SAAS;UACTC,SAAS;UACTyB,YAAY,EAAE;YACZlB,IAAI,EAAE;cACJT,aAAa;cACbG,MAAM;cACNyB,eAAe,EAAEC,MAAM,CAACC,IAAI,CAACC,GAAG,CAAC,CAAC;YACpC;UACF;QACF;MACF,CAAC,CAAmB;MAEpB,IAAI,CAAC1D,cAAc,CAAC2D,UAAU,CAC5BrB,6BAAkB,CAACC,+BAA+B,EAClD;QAACb,OAAO;QAAEgB,KAAK;QAAEf,aAAa;QAAEC,SAAS;QAAEC,SAAS;QAAEC;MAAM,CAAC,EAC7D,CAAC,aAAa,CAChB,CAAC;MAED,OAAOe,QAAQ,EAAEQ,IAAI,IAAI,CAAC,CAAC;IAC7B,CAAC,CAAC,OAAO1C,KAAK,EAAE;MACd,IAAI,CAACX,cAAc,CAAC2D,UAAU,CAC5BrB,6BAAkB,CAACE,8BAA8B,EACjD;QACEb,aAAa;QACbC,SAAS;QACTC,SAAS;QACTC,MAAM;QACNnB,KAAK,EAAEA,KAAK,YAAYG,KAAK,GAAGH,KAAK,CAACiD,OAAO,GAAGJ,MAAM,CAAC7C,KAAK;MAC9D,CAAC,EACD,CAAC,aAAa,CAChB,CAAC;MAED,MAAM;QAACA,KAAK,EAAEC;MAAa,CAAC,GAAG,IAAAC,sBAAe,EAACF,KAAK,EAAEI,mBAAO,CAACoB,UAAU,EAAElB,mBAAO,CAAC;MAClF,MAAML,aAAa;IACrB;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,MAAaiD,wBAAwBA,CACnCnC,OAAe,EACfC,aAAqB,EACiB;IACtCI,oBAAW,CAACC,IAAI,CAAC,+BAA+B,EAAE;MAChDC,MAAM,EAAEhB,mBAAO;MACfiB,MAAM,EAAEnB,mBAAO,CAAC+C,0BAA0B;MAC1CnC;IACF,CAAC,CAAC;IACF,IAAI,CAAC3B,cAAc,CAACqC,SAAS,CAAC,CAC5BC,6BAAkB,CAACyB,+CAA+C,EAClEzB,6BAAkB,CAAC0B,8CAA8C,CAClE,CAAC;IACF,IAAI,CAAC,IAAI,CAAC5D,SAAS,EAAE6D,mBAAmB,EAAEC,MAAM,EAAE;MAChD,MAAM;QAACvD,KAAK,EAAEC;MAAa,CAAC,GAAG,IAAAC,sBAAe,EAC5C,IAAIC,KAAK,CAAC,qCAAqC,CAAC,EAChDC,mBAAO,CAAC+C,0BAA0B,EAClC7C,mBACF,CAAC;MACD,MAAML,aAAa;IACrB;IAEA,IAAI;MACF,MAAM6B,OAAO,GAAG,IAAI,CAACpC,UAAU,CAAC,CAAC;MACjC,MAAMqC,KAAK,GAAG,IAAI,CAAC3C,KAAK,CAAC4C,WAAW,CAACC,QAAQ,CAAC,CAAC;MAC/C,MAAMC,QAAQ,GAAI,MAAM,IAAI,CAAC9C,KAAK,CAAC+C,OAAO,CAAC;QACzCC,GAAG,EAAE,GAAGN,OAAO,GAAGO,iCAAqB,CAACmB,gBAAgB,EAAE;QAC1DjC,MAAM,EAAEgB,mBAAY,CAACC,IAAI;QACzBC,aAAa,EAAE,IAAI;QACnBC,IAAI,EAAE;UACJ3B,OAAO;UACPgB,KAAK;UACLf;QACF;MACF,CAAC,CAAmB;MAEpB,IAAI,CAAC3B,cAAc,CAAC2D,UAAU,CAC5BrB,6BAAkB,CAACyB,+CAA+C,EAClE;QAACrC,OAAO;QAAEgB,KAAK;QAAEf;MAAa,CAAC,EAC/B,CAAC,aAAa,CAChB,CAAC;MAED,OAAOkB,QAAQ,CAACQ,IAAI;IACtB,CAAC,CAAC,OAAO1C,KAAK,EAAE;MACd,IAAI,CAACX,cAAc,CAAC2D,UAAU,CAC5BrB,6BAAkB,CAAC0B,8CAA8C,EACjE;QACErC,aAAa;QACbhB,KAAK,EAAEA,KAAK,YAAYG,KAAK,GAAGH,KAAK,CAACiD,OAAO,GAAGJ,MAAM,CAAC7C,KAAK;MAC9D,CAAC,EACD,CAAC,aAAa,CAChB,CAAC;MACD,IAAIA,KAAK,YAAYG,KAAK,EAAE;QAC1B,MAAMH,KAAK;MACb;MACA,MAAM;QAACA,KAAK,EAAEC;MAAa,CAAC,GAAG,IAAAC,sBAAe,EAC5CF,KAAK,EACLI,mBAAO,CAAC+C,0BAA0B,EAClC7C,mBACF,CAAC;MACD,MAAML,aAAa;IACrB;EACF;AACF;AAACwD,OAAA,CAAAvE,cAAA,GAAAA,cAAA;AAAA,IAAAwE,QAAA,GAAAD,OAAA,CAAAxE,OAAA,GAEcC,cAAc","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