@webex/internal-plugin-ai-assistant 3.11.0-next.3 → 3.11.0-next.4
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/dist/ai-assistant.js +26 -28
- package/dist/ai-assistant.js.map +1 -1
- package/package.json +1 -1
- package/src/ai-assistant.ts +4 -4
- package/test/unit/spec/ai-assistant.ts +40 -36
package/dist/ai-assistant.js
CHANGED
|
@@ -81,16 +81,14 @@ var AIAssistant = _webexCore.WebexPlugin.extend({
|
|
|
81
81
|
* @memberof AIAssistant
|
|
82
82
|
*/
|
|
83
83
|
unregister: function unregister() {
|
|
84
|
-
var _this2 = this;
|
|
85
84
|
if (!this.registered) {
|
|
86
85
|
this.logger.info('AI assistant->unregister#INFO, AI assistant plugin already unregistered');
|
|
87
86
|
return _promise.default.resolve();
|
|
88
87
|
}
|
|
89
88
|
this.stopListeningForEvents();
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
});
|
|
89
|
+
this.trigger(_constants.AI_ASSISTANT_UNREGISTERED);
|
|
90
|
+
this.registered = false;
|
|
91
|
+
return _promise.default.resolve();
|
|
94
92
|
},
|
|
95
93
|
/**
|
|
96
94
|
* registers for Assistant API events through mercury
|
|
@@ -98,9 +96,9 @@ var AIAssistant = _webexCore.WebexPlugin.extend({
|
|
|
98
96
|
* @private
|
|
99
97
|
*/
|
|
100
98
|
listenForEvents: function listenForEvents() {
|
|
101
|
-
var
|
|
99
|
+
var _this2 = this;
|
|
102
100
|
this.webex.internal.mercury.on(_constants.ASSISTANT_API_RESPONSE_EVENT, function (envelope) {
|
|
103
|
-
|
|
101
|
+
_this2._handleEvent(envelope.data);
|
|
104
102
|
});
|
|
105
103
|
},
|
|
106
104
|
/**
|
|
@@ -143,7 +141,7 @@ var AIAssistant = _webexCore.WebexPlugin.extend({
|
|
|
143
141
|
* @returns {Promise} resolves once decryption is complete
|
|
144
142
|
*/
|
|
145
143
|
_decryptContent: function _decryptContent(responseContent) {
|
|
146
|
-
var
|
|
144
|
+
var _this3 = this;
|
|
147
145
|
return (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee() {
|
|
148
146
|
var _t;
|
|
149
147
|
return _regenerator.default.wrap(function (_context) {
|
|
@@ -154,33 +152,33 @@ var AIAssistant = _webexCore.WebexPlugin.extend({
|
|
|
154
152
|
break;
|
|
155
153
|
case 1:
|
|
156
154
|
_context.next = 2;
|
|
157
|
-
return (0, _utils.decryptMessage)(responseContent,
|
|
155
|
+
return (0, _utils.decryptMessage)(responseContent, _this3.webex);
|
|
158
156
|
case 2:
|
|
159
157
|
return _context.abrupt("continue", 13);
|
|
160
158
|
case 3:
|
|
161
159
|
_context.next = 4;
|
|
162
|
-
return (0, _utils.decryptCitedAnswer)(responseContent,
|
|
160
|
+
return (0, _utils.decryptCitedAnswer)(responseContent, _this3.webex);
|
|
163
161
|
case 4:
|
|
164
162
|
return _context.abrupt("continue", 13);
|
|
165
163
|
case 5:
|
|
166
164
|
_context.next = 6;
|
|
167
|
-
return (0, _utils.decryptScheduleMeeting)(responseContent,
|
|
165
|
+
return (0, _utils.decryptScheduleMeeting)(responseContent, _this3.webex);
|
|
168
166
|
case 6:
|
|
169
167
|
return _context.abrupt("continue", 13);
|
|
170
168
|
case 7:
|
|
171
169
|
return _context.abrupt("continue", 13);
|
|
172
170
|
case 8:
|
|
173
171
|
_context.next = 9;
|
|
174
|
-
return (0, _utils.decryptToolUse)(responseContent,
|
|
172
|
+
return (0, _utils.decryptToolUse)(responseContent, _this3.webex);
|
|
175
173
|
case 9:
|
|
176
174
|
return _context.abrupt("continue", 13);
|
|
177
175
|
case 10:
|
|
178
176
|
_context.next = 11;
|
|
179
|
-
return (0, _utils.decryptWorkspace)(responseContent,
|
|
177
|
+
return (0, _utils.decryptWorkspace)(responseContent, _this3.webex);
|
|
180
178
|
case 11:
|
|
181
179
|
return _context.abrupt("continue", 13);
|
|
182
180
|
case 12:
|
|
183
|
-
|
|
181
|
+
_this3.logger.error("AI assistant->_decryptContent#ERROR, Unknown response content name: ".concat(responseContent.name));
|
|
184
182
|
case 13:
|
|
185
183
|
case "end":
|
|
186
184
|
return _context.stop();
|
|
@@ -196,7 +194,7 @@ var AIAssistant = _webexCore.WebexPlugin.extend({
|
|
|
196
194
|
* @returns {Promise<Object>} Resolves with an object containing the requestId, sessionId and streamEventName
|
|
197
195
|
*/
|
|
198
196
|
_request: function _request(options) {
|
|
199
|
-
var
|
|
197
|
+
var _this4 = this;
|
|
200
198
|
var resource = options.resource,
|
|
201
199
|
params = options.params;
|
|
202
200
|
var timeout = this.config.requestTimeout;
|
|
@@ -207,15 +205,15 @@ var AIAssistant = _webexCore.WebexPlugin.extend({
|
|
|
207
205
|
// eslint-disable-next-line no-async-promise-executor
|
|
208
206
|
return new _promise.default(function (resolve, reject) {
|
|
209
207
|
var timer = new _commonTimers.Timer(function () {
|
|
210
|
-
|
|
211
|
-
|
|
208
|
+
_this4.stopListening(_this4, eventName);
|
|
209
|
+
_this4.trigger(streamEventName, {
|
|
212
210
|
requestId: requestId,
|
|
213
211
|
finished: true,
|
|
214
212
|
errorMessage: _constants.AI_ASSISTANT_ERRORS.AI_ASSISTANT_TIMEOUT,
|
|
215
213
|
errorCode: _constants.AI_ASSISTANT_ERROR_CODES.AI_ASSISTANT_TIMEOUT
|
|
216
214
|
});
|
|
217
215
|
}, timeout);
|
|
218
|
-
|
|
216
|
+
_this4.listenTo(_this4, eventName, /*#__PURE__*/function () {
|
|
219
217
|
var _ref = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee2(data) {
|
|
220
218
|
var resultData, errorMessage, errorCode, responseType, decryptErrorMessage, _t2;
|
|
221
219
|
return _regenerator.default.wrap(function (_context2) {
|
|
@@ -228,7 +226,7 @@ var AIAssistant = _webexCore.WebexPlugin.extend({
|
|
|
228
226
|
responseType = (0, _lodash.get)(data, 'responseType');
|
|
229
227
|
if (data.finished) {
|
|
230
228
|
timer.cancel();
|
|
231
|
-
|
|
229
|
+
_this4.stopListening(_this4, eventName);
|
|
232
230
|
}
|
|
233
231
|
_context2.prev = 1;
|
|
234
232
|
if (errorCode) {
|
|
@@ -236,7 +234,7 @@ var AIAssistant = _webexCore.WebexPlugin.extend({
|
|
|
236
234
|
break;
|
|
237
235
|
}
|
|
238
236
|
_context2.next = 2;
|
|
239
|
-
return
|
|
237
|
+
return _this4._decryptContent(resultData);
|
|
240
238
|
case 2:
|
|
241
239
|
_context2.next = 4;
|
|
242
240
|
break;
|
|
@@ -245,7 +243,7 @@ var AIAssistant = _webexCore.WebexPlugin.extend({
|
|
|
245
243
|
_t2 = _context2["catch"](1);
|
|
246
244
|
decryptErrorMessage = _t2.message;
|
|
247
245
|
case 4:
|
|
248
|
-
|
|
246
|
+
_this4.trigger(streamEventName, (0, _lodash.merge)({}, data.response, {
|
|
249
247
|
responseType: responseType,
|
|
250
248
|
requestId: requestId,
|
|
251
249
|
finished: data.finished,
|
|
@@ -262,7 +260,7 @@ var AIAssistant = _webexCore.WebexPlugin.extend({
|
|
|
262
260
|
return _ref.apply(this, arguments);
|
|
263
261
|
};
|
|
264
262
|
}());
|
|
265
|
-
|
|
263
|
+
_this4.webex.request({
|
|
266
264
|
service: _constants.AI_ASSISTANT_SERVICE_NAME,
|
|
267
265
|
resource: resource,
|
|
268
266
|
method: 'POST',
|
|
@@ -300,7 +298,7 @@ var AIAssistant = _webexCore.WebexPlugin.extend({
|
|
|
300
298
|
* @memberof AIAssistant
|
|
301
299
|
*/
|
|
302
300
|
makeAiAssistantRequest: function makeAiAssistantRequest(options) {
|
|
303
|
-
var
|
|
301
|
+
var _this5 = this;
|
|
304
302
|
return (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee3() {
|
|
305
303
|
var value, content;
|
|
306
304
|
return _regenerator.default.wrap(function (_context3) {
|
|
@@ -312,7 +310,7 @@ var AIAssistant = _webexCore.WebexPlugin.extend({
|
|
|
312
310
|
break;
|
|
313
311
|
}
|
|
314
312
|
_context3.next = 1;
|
|
315
|
-
return
|
|
313
|
+
return _this5._encryptData({
|
|
316
314
|
text: options.contentValue,
|
|
317
315
|
encryptionKeyUrl: options.encryptionKeyUrl
|
|
318
316
|
});
|
|
@@ -330,7 +328,7 @@ var AIAssistant = _webexCore.WebexPlugin.extend({
|
|
|
330
328
|
if (options.parameters) {
|
|
331
329
|
content.parameters = options.parameters;
|
|
332
330
|
}
|
|
333
|
-
return _context3.abrupt("return",
|
|
331
|
+
return _context3.abrupt("return", _this5._request(_objectSpread({
|
|
334
332
|
resource: options.sessionId ? "sessions/".concat(options.sessionId, "/messages") : 'sessions/messages',
|
|
335
333
|
params: _objectSpread(_objectSpread({
|
|
336
334
|
async: 'chunked',
|
|
@@ -427,7 +425,7 @@ var AIAssistant = _webexCore.WebexPlugin.extend({
|
|
|
427
425
|
* @returns {Promise<string>} returns a promise that resolves with the encrypted text
|
|
428
426
|
*/
|
|
429
427
|
_encryptData: function _encryptData(_ref3) {
|
|
430
|
-
var
|
|
428
|
+
var _this6 = this;
|
|
431
429
|
return (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee4() {
|
|
432
430
|
var text, encryptionKeyUrl, result;
|
|
433
431
|
return _regenerator.default.wrap(function (_context4) {
|
|
@@ -435,7 +433,7 @@ var AIAssistant = _webexCore.WebexPlugin.extend({
|
|
|
435
433
|
case 0:
|
|
436
434
|
text = _ref3.text, encryptionKeyUrl = _ref3.encryptionKeyUrl;
|
|
437
435
|
_context4.next = 1;
|
|
438
|
-
return
|
|
436
|
+
return _this6.webex.internal.encryption.encryptText(encryptionKeyUrl, text);
|
|
439
437
|
case 1:
|
|
440
438
|
result = _context4.sent;
|
|
441
439
|
return _context4.abrupt("return", result);
|
|
@@ -468,7 +466,7 @@ var AIAssistant = _webexCore.WebexPlugin.extend({
|
|
|
468
466
|
contentValue: options.question
|
|
469
467
|
}));
|
|
470
468
|
},
|
|
471
|
-
version: "3.11.0-next.
|
|
469
|
+
version: "3.11.0-next.4"
|
|
472
470
|
});
|
|
473
471
|
var _default = exports.default = AIAssistant;
|
|
474
472
|
//# sourceMappingURL=ai-assistant.js.map
|
package/dist/ai-assistant.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_uuid","_interopRequireDefault","require","_webexCore","_lodash","_commonTimers","_constants","_utils","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","AIAssistant","WebexPlugin","extend","namespace","registered","initialize","_len","args","Array","_key","_apply","prototype","register","_this","webex","canAuthorize","logger","error","_promise","reject","Error","info","resolve","internal","mercury","connect","then","listenForEvents","trigger","AI_ASSISTANT_REGISTERED","catch","concat","message","unregister","_this2","stopListeningForEvents","disconnect","AI_ASSISTANT_UNREGISTERED","_this3","on","ASSISTANT_API_RESPONSE_EVENT","envelope","_handleEvent","data","off","_getResultEventName","requestId","AI_ASSISTANT_RESULT","_getStreamEventName","AI_ASSISTANT_STREAM","clientRequestId","_decryptContent","responseContent","_this4","_asyncToGenerator2","_regenerator","mark","_callee","_t","wrap","_context","prev","next","name","RESPONSE_NAMES","MESSAGE","CITED_ANSWER","SCHEDULE_MEETING","TOOL_RESULT","TOOL_USE","WORKSPACE","decryptMessage","abrupt","decryptCitedAnswer","decryptScheduleMeeting","decryptToolUse","decryptWorkspace","stop","_request","options","_this5","resource","params","timeout","config","requestTimeout","uuid","v4","eventName","streamEventName","timer","Timer","stopListening","finished","errorMessage","AI_ASSISTANT_ERRORS","AI_ASSISTANT_TIMEOUT","errorCode","AI_ASSISTANT_ERROR_CODES","listenTo","_ref","_callee2","resultData","responseType","decryptErrorMessage","_t2","_context2","reset","get","cancel","merge","response","_x","request","service","AI_ASSISTANT_SERVICE_NAME","method","contentType","body","_ref2","start","makeAiAssistantRequest","_this6","_callee3","value","content","_context3","contentValue","_encryptData","text","encryptionKeyUrl","sent","context","resources","contextResources","type","parameters","sessionId","async","locale","entryPoint","assistant","summarizeMeeting","CONTENT_TYPES","ACTION","ACTION_TYPES","SUMMARIZE_FOR_ME","id","meetingInstanceId","CONTEXT_RESOURCE_TYPES","MEETING","url","meetingSite","lastMinutes","wasMyNameMentioned","WAS_MY_NAME_MENTIONED","showAllActionItems","SHOW_ALL_ACTION_ITEMS","_ref3","_this7","_callee4","result","_context4","encryption","encryptText","askMeAnything","question","version","_default","exports"],"sources":["ai-assistant.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2022 Cisco Systems, Inc. See LICENSE file.\n */\nimport uuid from 'uuid';\nimport {WebexPlugin} from '@webex/webex-core';\nimport '@webex/internal-plugin-mercury';\nimport {get, merge} from 'lodash';\nimport {Timer} from '@webex/common-timers';\n\nimport {\n AiAssistantRequestOptions,\n RequestOptions,\n RequestResponse,\n SummarizeMeetingOptions,\n} from './types';\nimport {\n AI_ASSISTANT_ERROR_CODES,\n AI_ASSISTANT_ERRORS,\n AI_ASSISTANT_REGISTERED,\n AI_ASSISTANT_RESULT,\n AI_ASSISTANT_STREAM,\n AI_ASSISTANT_UNREGISTERED,\n AI_ASSISTANT_SERVICE_NAME,\n ASSISTANT_API_RESPONSE_EVENT,\n ACTION_TYPES,\n CONTENT_TYPES,\n CONTEXT_RESOURCE_TYPES,\n RESPONSE_NAMES,\n} from './constants';\nimport {\n decryptCitedAnswer,\n decryptMessage,\n decryptScheduleMeeting,\n decryptToolUse,\n decryptWorkspace,\n} from './utils';\n\nconst AIAssistant = WebexPlugin.extend({\n namespace: 'AIAssistant',\n\n /**\n * registered value indicating events registration is successful\n * @instance\n * @type {Boolean}\n * @memberof AIAssistant\n */\n registered: false,\n\n /**\n * Initializer\n * @private\n * @param {Object} attrs\n * @param {Object} options\n * @returns {undefined}\n */\n initialize(...args) {\n Reflect.apply(WebexPlugin.prototype.initialize, this, args);\n },\n\n /**\n * Explicitly sets up the AI assistant plugin by connecting to mercury, and listening for AI assistant events.\n * @returns {Promise}\n * @public\n * @memberof AIAssistant\n */\n register() {\n if (!this.webex.canAuthorize) {\n this.logger.error('AI assistant->register#ERROR, Unable to register, SDK cannot authorize');\n\n return Promise.reject(new Error('SDK cannot authorize'));\n }\n\n if (this.registered) {\n this.logger.info('AI assistant->register#INFO, AI assistant plugin already registered');\n\n return Promise.resolve();\n }\n\n return this.webex.internal.mercury\n .connect()\n .then(() => {\n this.listenForEvents();\n this.trigger(AI_ASSISTANT_REGISTERED);\n this.registered = true;\n })\n .catch((error) => {\n this.logger.error(`AI assistant->register#ERROR, Unable to register, ${error.message}`);\n\n return Promise.reject(error);\n });\n },\n\n /**\n * Explicitly tears down the AI assistant plugin by disconnecting from mercury, and stops listening to AI assistant events\n * @returns {Promise}\n * @public\n * @memberof AIAssistant\n */\n unregister() {\n if (!this.registered) {\n this.logger.info('AI assistant->unregister#INFO, AI assistant plugin already unregistered');\n\n return Promise.resolve();\n }\n\n this.stopListeningForEvents();\n\n return this.webex.internal.mercury.disconnect().then(() => {\n this.trigger(AI_ASSISTANT_UNREGISTERED);\n this.registered = false;\n });\n },\n\n /**\n * registers for Assistant API events through mercury\n * @returns {undefined}\n * @private\n */\n listenForEvents() {\n this.webex.internal.mercury.on(ASSISTANT_API_RESPONSE_EVENT, (envelope) => {\n this._handleEvent(envelope.data);\n });\n },\n\n /**\n * unregisteres all the Assistant API events from mercury\n * @returns {undefined}\n * @private\n */\n stopListeningForEvents() {\n this.webex.internal.mercury.off(ASSISTANT_API_RESPONSE_EVENT);\n },\n\n /**\n * constructs the event name based on request id\n * This is used by the plugin to listen for the result of a particular request\n * @param {UUID} requestId the id of the request\n * @returns {string}\n */\n _getResultEventName(requestId: string) {\n return `${AI_ASSISTANT_RESULT}:${requestId}`;\n },\n\n /**\n * constructs the stream event name based on request id\n * This is used by the consumer to listen for the stream (i.e. the data) of a particular request\n * @param {UUID} requestId the id of the request\n * @returns {string}\n */\n _getStreamEventName(requestId: string) {\n return `${AI_ASSISTANT_STREAM}:${requestId}`;\n },\n\n /**\n * Takes incoming data and triggers correct events\n * @param {Object} data the event data\n * @returns {undefined}\n */\n _handleEvent(data) {\n this.trigger(this._getResultEventName(data.clientRequestId), data);\n },\n\n /**\n * Decrypts the response content in place\n * @param {any} responseContent the content object from the assistant-api response\n * @returns {Promise} resolves once decryption is complete\n */\n async _decryptContent(responseContent) {\n switch (responseContent.name) {\n case RESPONSE_NAMES.MESSAGE: {\n await decryptMessage(responseContent, this.webex);\n break;\n }\n case RESPONSE_NAMES.CITED_ANSWER: {\n await decryptCitedAnswer(responseContent, this.webex);\n break;\n }\n case RESPONSE_NAMES.SCHEDULE_MEETING: {\n await decryptScheduleMeeting(responseContent, this.webex);\n break;\n }\n case RESPONSE_NAMES.TOOL_RESULT: {\n // No encrypted content in tool_result\n break;\n }\n case RESPONSE_NAMES.TOOL_USE: {\n await decryptToolUse(responseContent, this.webex);\n break;\n }\n case RESPONSE_NAMES.WORKSPACE: {\n await decryptWorkspace(responseContent, this.webex);\n break;\n }\n default:\n this.logger.error(\n `AI assistant->_decryptContent#ERROR, Unknown response content name: ${responseContent.name}`\n );\n }\n },\n\n /**\n * Makes the request to the AI assistant service\n * @param {Object} options\n * @param {string} options.resource the URL to query\n * @param {Mixed} options.params additional params for the body of the request\n * @returns {Promise<Object>} Resolves with an object containing the requestId, sessionId and streamEventName\n */\n _request(options: RequestOptions): Promise<RequestResponse> {\n const {resource, params} = options;\n\n const timeout = this.config.requestTimeout;\n const requestId = options.requestId || uuid.v4();\n const eventName = this._getResultEventName(requestId);\n const streamEventName = this._getStreamEventName(requestId);\n\n // eslint-disable-next-line no-async-promise-executor\n return new Promise((resolve, reject) => {\n const timer = new Timer(() => {\n this.stopListening(this, eventName);\n this.trigger(streamEventName, {\n requestId,\n finished: true,\n errorMessage: AI_ASSISTANT_ERRORS.AI_ASSISTANT_TIMEOUT,\n errorCode: AI_ASSISTANT_ERROR_CODES.AI_ASSISTANT_TIMEOUT,\n });\n }, timeout);\n\n this.listenTo(this, eventName, async (data) => {\n timer.reset();\n const resultData = get(data, 'response.content', {});\n const errorMessage = get(data, 'response.errorMessage');\n const errorCode = get(data, 'response.errorCode');\n const responseType = get(data, 'responseType');\n\n if (data.finished) {\n timer.cancel();\n this.stopListening(this, eventName);\n }\n\n let decryptErrorMessage;\n\n try {\n if (!errorCode) {\n await this._decryptContent(resultData);\n }\n } catch (decryptError) {\n decryptErrorMessage = decryptError.message;\n }\n\n this.trigger(\n streamEventName,\n merge({}, data.response, {\n responseType,\n requestId,\n finished: data.finished,\n errorMessage: errorMessage || decryptErrorMessage,\n errorCode,\n })\n );\n });\n\n this.webex\n .request({\n service: AI_ASSISTANT_SERVICE_NAME,\n resource,\n method: 'POST',\n contentType: 'application/json',\n body: {clientRequestId: requestId, ...params},\n })\n .then(({body}) => {\n resolve({...body, requestId, streamEventName});\n })\n .catch((error) => {\n reject(error);\n });\n\n timer.start();\n });\n },\n\n /**\n * Common method to make AI assistant requests for meeting analysis\n * @param {Object} options\n * @param {string} options.contextResources array of context resources to include in the request\n * @param {string} options.sessionId the session ID for subsequent requests, not required for the first request\n * @param {string} options.encryptionKeyUrl the encryption key URL for this meeting summary\n * @param {string} options.contentType the type of content ('action' or 'message')\n * @param {string} options.contentValue the value to use (action name or message text)\n * @param {Object} options.parameters optional parameters to include in the request (for action type only)\n * @param {Object} options.assistant optional parameter to specify the assistant to use\n * @param {Object} options.locale optional locale to use for the request, defaults to 'en_US'\n * @param {string} options.requestId optional request ID to use for this request, if not provided a new UUID will be generated\n * @param {string} options.entryPoint optional entryPoint to use for this request\n * @returns {Promise<Object>} Resolves with an object containing the requestId, sessionId and streamEventName\n * @public\n * @memberof AIAssistant\n */\n async makeAiAssistantRequest(options: AiAssistantRequestOptions): Promise<RequestResponse> {\n let value = options.contentValue;\n\n if (options.contentType === 'message') {\n value = await this._encryptData({\n text: options.contentValue,\n encryptionKeyUrl: options.encryptionKeyUrl,\n });\n }\n\n const content: any = {\n context: {\n resources: options.contextResources,\n },\n encryptionKeyUrl: options.encryptionKeyUrl,\n type: options.contentType,\n value,\n };\n\n if (options.parameters) {\n content.parameters = options.parameters;\n }\n\n return this._request({\n resource: options.sessionId ? `sessions/${options.sessionId}/messages` : 'sessions/messages',\n params: {\n async: 'chunked',\n locale: options.locale || 'en_US',\n content,\n ...(options.entryPoint ? {entryPoint: options.entryPoint} : {}),\n ...(options.assistant ? {assistant: options.assistant} : {}),\n },\n ...(options.requestId ? {requestId: options.requestId} : {}),\n });\n },\n\n /**\n * Returns the summary of a meeting\n * @param {Object} options\n * @param {string} options.meetingInstanceId the meeting instance ID for the meeting from locus\n * @param {string} options.meetingSite the name.webex.com site for the meeting\n * @param {string} options.sessionId the session ID for subsequent requests, not required for the first request\n * @param {string} options.encryptionKeyUrl the encryption key URL for this meeting summary\n * @param {number} options.lastMinutes Optional number of minutes to summarize from the end of the meeting. If not included, summarizes from the start.\n * @param {string} options.requestId optional request ID to use for this request, if not provided a new UUID will be generated\n * @returns {Promise<Object>} Resolves with an object containing the requestId, sessionId and streamEventName\n */\n summarizeMeeting(options: SummarizeMeetingOptions): Promise<RequestResponse> {\n return this.makeAiAssistantRequest({\n ...options,\n contentType: CONTENT_TYPES.ACTION,\n contentValue: ACTION_TYPES.SUMMARIZE_FOR_ME,\n contextResources: [\n {\n id: options.meetingInstanceId,\n type: CONTEXT_RESOURCE_TYPES.MEETING,\n url: options.meetingSite,\n },\n ],\n ...(options.lastMinutes ? {parameters: {lastMinutes: options.lastMinutes}} : {}),\n });\n },\n\n /**\n * Checks if the user's name was mentioned in a meeting\n * @param {Object} options\n * @param {string} options.meetingInstanceId the meeting instance ID for the meeting from locus\n * @param {string} options.meetingSite the name.webex.com site for the meeting\n * @param {string} options.sessionId the session ID for subsequent requests, not required for the first request\n * @param {string} options.encryptionKeyUrl the encryption key URL for this meeting summary\n * @param {string} options.requestId optional request ID to use for this request, if not provided a new UUID will be generated\n * @returns {Promise<Object>} Resolves with an object containing the requestId, sessionId and streamEventName\n */\n wasMyNameMentioned(options: SummarizeMeetingOptions): Promise<RequestResponse> {\n return this.makeAiAssistantRequest({\n ...options,\n contextResources: [\n {\n id: options.meetingInstanceId,\n type: CONTEXT_RESOURCE_TYPES.MEETING,\n url: options.meetingSite,\n },\n ],\n contentType: CONTENT_TYPES.ACTION,\n contentValue: ACTION_TYPES.WAS_MY_NAME_MENTIONED,\n });\n },\n\n /**\n * Returns all action items from a meeting\n * @param {Object} options\n * @param {string} options.meetingInstanceId the meeting instance ID for the meeting from locus\n * @param {string} options.meetingSite the name.webex.com site for the meeting\n * @param {string} options.sessionId the session ID for subsequent requests, not required for the first request\n * @param {string} options.encryptionKeyUrl the encryption key URL for this meeting summary\n * @param {string} options.requestId optional request ID to use for this request, if not provided a new UUID will be generated\n * @returns {Promise<Object>} Resolves with an object containing the requestId, sessionId and streamEventName\n */\n showAllActionItems(options: SummarizeMeetingOptions): Promise<RequestResponse> {\n return this.makeAiAssistantRequest({\n ...options,\n contextResources: [\n {\n id: options.meetingInstanceId,\n type: CONTEXT_RESOURCE_TYPES.MEETING,\n url: options.meetingSite,\n },\n ],\n contentType: CONTENT_TYPES.ACTION,\n contentValue: ACTION_TYPES.SHOW_ALL_ACTION_ITEMS,\n });\n },\n\n /**\n * Helper method to encrypt text using the encryption key URL\n * @param {Object} options\n * @param {string} options.text the text to encrypt\n * @param {string} options.encryptionKeyUrl the encryption key URL to use for encryption\n * @returns {Promise<string>} returns a promise that resolves with the encrypted text\n */\n async _encryptData({text, encryptionKeyUrl}) {\n const result = await this.webex.internal.encryption.encryptText(encryptionKeyUrl, text);\n\n return result;\n },\n\n /**\n * Ask any question about the meeting content\n * @param {Object} options\n * @param {string} options.meetingInstanceId the meeting instance ID for the meeting from locus\n * @param {string} options.meetingSite the name.webex.com site for the meeting\n * @param {string} options.sessionId the session ID for subsequent requests, not required for the first request\n * @param {string} options.encryptionKeyUrl the encryption key URL for this meeting summary\n * @param {string} options.question the question to ask about the meeting content\n * @param {string} options.requestId optional request ID to use for this request, if not provided a new UUID will be generated\n * @returns {Promise<Object>} Resolves with an object containing the requestId, sessionId and streamEventName\n */\n askMeAnything(options: SummarizeMeetingOptions & {question: string}): Promise<RequestResponse> {\n return this.makeAiAssistantRequest({\n ...options,\n contextResources: [\n {\n id: options.meetingInstanceId,\n type: CONTEXT_RESOURCE_TYPES.MEETING,\n url: options.meetingSite,\n },\n ],\n contentType: CONTENT_TYPES.MESSAGE,\n contentValue: options.question,\n });\n },\n});\n\nexport default AIAssistant;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_uuid","_interopRequireDefault","require","_webexCore","_lodash","_commonTimers","_constants","_utils","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","AIAssistant","WebexPlugin","extend","namespace","registered","initialize","_len","args","Array","_key","_apply","prototype","register","_this","webex","canAuthorize","logger","error","_promise","reject","Error","info","resolve","internal","mercury","connect","then","listenForEvents","trigger","AI_ASSISTANT_REGISTERED","catch","concat","message","unregister","stopListeningForEvents","AI_ASSISTANT_UNREGISTERED","_this2","on","ASSISTANT_API_RESPONSE_EVENT","envelope","_handleEvent","data","off","_getResultEventName","requestId","AI_ASSISTANT_RESULT","_getStreamEventName","AI_ASSISTANT_STREAM","clientRequestId","_decryptContent","responseContent","_this3","_asyncToGenerator2","_regenerator","mark","_callee","_t","wrap","_context","prev","next","name","RESPONSE_NAMES","MESSAGE","CITED_ANSWER","SCHEDULE_MEETING","TOOL_RESULT","TOOL_USE","WORKSPACE","decryptMessage","abrupt","decryptCitedAnswer","decryptScheduleMeeting","decryptToolUse","decryptWorkspace","stop","_request","options","_this4","resource","params","timeout","config","requestTimeout","uuid","v4","eventName","streamEventName","timer","Timer","stopListening","finished","errorMessage","AI_ASSISTANT_ERRORS","AI_ASSISTANT_TIMEOUT","errorCode","AI_ASSISTANT_ERROR_CODES","listenTo","_ref","_callee2","resultData","responseType","decryptErrorMessage","_t2","_context2","reset","get","cancel","merge","response","_x","request","service","AI_ASSISTANT_SERVICE_NAME","method","contentType","body","_ref2","start","makeAiAssistantRequest","_this5","_callee3","value","content","_context3","contentValue","_encryptData","text","encryptionKeyUrl","sent","context","resources","contextResources","type","parameters","sessionId","async","locale","entryPoint","assistant","summarizeMeeting","CONTENT_TYPES","ACTION","ACTION_TYPES","SUMMARIZE_FOR_ME","id","meetingInstanceId","CONTEXT_RESOURCE_TYPES","MEETING","url","meetingSite","lastMinutes","wasMyNameMentioned","WAS_MY_NAME_MENTIONED","showAllActionItems","SHOW_ALL_ACTION_ITEMS","_ref3","_this6","_callee4","result","_context4","encryption","encryptText","askMeAnything","question","version","_default","exports"],"sources":["ai-assistant.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2022 Cisco Systems, Inc. See LICENSE file.\n */\nimport uuid from 'uuid';\nimport {WebexPlugin} from '@webex/webex-core';\nimport '@webex/internal-plugin-mercury';\nimport {get, merge} from 'lodash';\nimport {Timer} from '@webex/common-timers';\n\nimport {\n AiAssistantRequestOptions,\n RequestOptions,\n RequestResponse,\n SummarizeMeetingOptions,\n} from './types';\nimport {\n AI_ASSISTANT_ERROR_CODES,\n AI_ASSISTANT_ERRORS,\n AI_ASSISTANT_REGISTERED,\n AI_ASSISTANT_RESULT,\n AI_ASSISTANT_STREAM,\n AI_ASSISTANT_UNREGISTERED,\n AI_ASSISTANT_SERVICE_NAME,\n ASSISTANT_API_RESPONSE_EVENT,\n ACTION_TYPES,\n CONTENT_TYPES,\n CONTEXT_RESOURCE_TYPES,\n RESPONSE_NAMES,\n} from './constants';\nimport {\n decryptCitedAnswer,\n decryptMessage,\n decryptScheduleMeeting,\n decryptToolUse,\n decryptWorkspace,\n} from './utils';\n\nconst AIAssistant = WebexPlugin.extend({\n namespace: 'AIAssistant',\n\n /**\n * registered value indicating events registration is successful\n * @instance\n * @type {Boolean}\n * @memberof AIAssistant\n */\n registered: false,\n\n /**\n * Initializer\n * @private\n * @param {Object} attrs\n * @param {Object} options\n * @returns {undefined}\n */\n initialize(...args) {\n Reflect.apply(WebexPlugin.prototype.initialize, this, args);\n },\n\n /**\n * Explicitly sets up the AI assistant plugin by connecting to mercury, and listening for AI assistant events.\n * @returns {Promise}\n * @public\n * @memberof AIAssistant\n */\n register() {\n if (!this.webex.canAuthorize) {\n this.logger.error('AI assistant->register#ERROR, Unable to register, SDK cannot authorize');\n\n return Promise.reject(new Error('SDK cannot authorize'));\n }\n\n if (this.registered) {\n this.logger.info('AI assistant->register#INFO, AI assistant plugin already registered');\n\n return Promise.resolve();\n }\n\n return this.webex.internal.mercury\n .connect()\n .then(() => {\n this.listenForEvents();\n this.trigger(AI_ASSISTANT_REGISTERED);\n this.registered = true;\n })\n .catch((error) => {\n this.logger.error(`AI assistant->register#ERROR, Unable to register, ${error.message}`);\n\n return Promise.reject(error);\n });\n },\n\n /**\n * Explicitly tears down the AI assistant plugin by disconnecting from mercury, and stops listening to AI assistant events\n * @returns {Promise}\n * @public\n * @memberof AIAssistant\n */\n unregister() {\n if (!this.registered) {\n this.logger.info('AI assistant->unregister#INFO, AI assistant plugin already unregistered');\n\n return Promise.resolve();\n }\n\n this.stopListeningForEvents();\n\n this.trigger(AI_ASSISTANT_UNREGISTERED);\n this.registered = false;\n\n return Promise.resolve();\n },\n\n /**\n * registers for Assistant API events through mercury\n * @returns {undefined}\n * @private\n */\n listenForEvents() {\n this.webex.internal.mercury.on(ASSISTANT_API_RESPONSE_EVENT, (envelope) => {\n this._handleEvent(envelope.data);\n });\n },\n\n /**\n * unregisteres all the Assistant API events from mercury\n * @returns {undefined}\n * @private\n */\n stopListeningForEvents() {\n this.webex.internal.mercury.off(ASSISTANT_API_RESPONSE_EVENT);\n },\n\n /**\n * constructs the event name based on request id\n * This is used by the plugin to listen for the result of a particular request\n * @param {UUID} requestId the id of the request\n * @returns {string}\n */\n _getResultEventName(requestId: string) {\n return `${AI_ASSISTANT_RESULT}:${requestId}`;\n },\n\n /**\n * constructs the stream event name based on request id\n * This is used by the consumer to listen for the stream (i.e. the data) of a particular request\n * @param {UUID} requestId the id of the request\n * @returns {string}\n */\n _getStreamEventName(requestId: string) {\n return `${AI_ASSISTANT_STREAM}:${requestId}`;\n },\n\n /**\n * Takes incoming data and triggers correct events\n * @param {Object} data the event data\n * @returns {undefined}\n */\n _handleEvent(data) {\n this.trigger(this._getResultEventName(data.clientRequestId), data);\n },\n\n /**\n * Decrypts the response content in place\n * @param {any} responseContent the content object from the assistant-api response\n * @returns {Promise} resolves once decryption is complete\n */\n async _decryptContent(responseContent) {\n switch (responseContent.name) {\n case RESPONSE_NAMES.MESSAGE: {\n await decryptMessage(responseContent, this.webex);\n break;\n }\n case RESPONSE_NAMES.CITED_ANSWER: {\n await decryptCitedAnswer(responseContent, this.webex);\n break;\n }\n case RESPONSE_NAMES.SCHEDULE_MEETING: {\n await decryptScheduleMeeting(responseContent, this.webex);\n break;\n }\n case RESPONSE_NAMES.TOOL_RESULT: {\n // No encrypted content in tool_result\n break;\n }\n case RESPONSE_NAMES.TOOL_USE: {\n await decryptToolUse(responseContent, this.webex);\n break;\n }\n case RESPONSE_NAMES.WORKSPACE: {\n await decryptWorkspace(responseContent, this.webex);\n break;\n }\n default:\n this.logger.error(\n `AI assistant->_decryptContent#ERROR, Unknown response content name: ${responseContent.name}`\n );\n }\n },\n\n /**\n * Makes the request to the AI assistant service\n * @param {Object} options\n * @param {string} options.resource the URL to query\n * @param {Mixed} options.params additional params for the body of the request\n * @returns {Promise<Object>} Resolves with an object containing the requestId, sessionId and streamEventName\n */\n _request(options: RequestOptions): Promise<RequestResponse> {\n const {resource, params} = options;\n\n const timeout = this.config.requestTimeout;\n const requestId = options.requestId || uuid.v4();\n const eventName = this._getResultEventName(requestId);\n const streamEventName = this._getStreamEventName(requestId);\n\n // eslint-disable-next-line no-async-promise-executor\n return new Promise((resolve, reject) => {\n const timer = new Timer(() => {\n this.stopListening(this, eventName);\n this.trigger(streamEventName, {\n requestId,\n finished: true,\n errorMessage: AI_ASSISTANT_ERRORS.AI_ASSISTANT_TIMEOUT,\n errorCode: AI_ASSISTANT_ERROR_CODES.AI_ASSISTANT_TIMEOUT,\n });\n }, timeout);\n\n this.listenTo(this, eventName, async (data) => {\n timer.reset();\n const resultData = get(data, 'response.content', {});\n const errorMessage = get(data, 'response.errorMessage');\n const errorCode = get(data, 'response.errorCode');\n const responseType = get(data, 'responseType');\n\n if (data.finished) {\n timer.cancel();\n this.stopListening(this, eventName);\n }\n\n let decryptErrorMessage;\n\n try {\n if (!errorCode) {\n await this._decryptContent(resultData);\n }\n } catch (decryptError) {\n decryptErrorMessage = decryptError.message;\n }\n\n this.trigger(\n streamEventName,\n merge({}, data.response, {\n responseType,\n requestId,\n finished: data.finished,\n errorMessage: errorMessage || decryptErrorMessage,\n errorCode,\n })\n );\n });\n\n this.webex\n .request({\n service: AI_ASSISTANT_SERVICE_NAME,\n resource,\n method: 'POST',\n contentType: 'application/json',\n body: {clientRequestId: requestId, ...params},\n })\n .then(({body}) => {\n resolve({...body, requestId, streamEventName});\n })\n .catch((error) => {\n reject(error);\n });\n\n timer.start();\n });\n },\n\n /**\n * Common method to make AI assistant requests for meeting analysis\n * @param {Object} options\n * @param {string} options.contextResources array of context resources to include in the request\n * @param {string} options.sessionId the session ID for subsequent requests, not required for the first request\n * @param {string} options.encryptionKeyUrl the encryption key URL for this meeting summary\n * @param {string} options.contentType the type of content ('action' or 'message')\n * @param {string} options.contentValue the value to use (action name or message text)\n * @param {Object} options.parameters optional parameters to include in the request (for action type only)\n * @param {Object} options.assistant optional parameter to specify the assistant to use\n * @param {Object} options.locale optional locale to use for the request, defaults to 'en_US'\n * @param {string} options.requestId optional request ID to use for this request, if not provided a new UUID will be generated\n * @param {string} options.entryPoint optional entryPoint to use for this request\n * @returns {Promise<Object>} Resolves with an object containing the requestId, sessionId and streamEventName\n * @public\n * @memberof AIAssistant\n */\n async makeAiAssistantRequest(options: AiAssistantRequestOptions): Promise<RequestResponse> {\n let value = options.contentValue;\n\n if (options.contentType === 'message') {\n value = await this._encryptData({\n text: options.contentValue,\n encryptionKeyUrl: options.encryptionKeyUrl,\n });\n }\n\n const content: any = {\n context: {\n resources: options.contextResources,\n },\n encryptionKeyUrl: options.encryptionKeyUrl,\n type: options.contentType,\n value,\n };\n\n if (options.parameters) {\n content.parameters = options.parameters;\n }\n\n return this._request({\n resource: options.sessionId ? `sessions/${options.sessionId}/messages` : 'sessions/messages',\n params: {\n async: 'chunked',\n locale: options.locale || 'en_US',\n content,\n ...(options.entryPoint ? {entryPoint: options.entryPoint} : {}),\n ...(options.assistant ? {assistant: options.assistant} : {}),\n },\n ...(options.requestId ? {requestId: options.requestId} : {}),\n });\n },\n\n /**\n * Returns the summary of a meeting\n * @param {Object} options\n * @param {string} options.meetingInstanceId the meeting instance ID for the meeting from locus\n * @param {string} options.meetingSite the name.webex.com site for the meeting\n * @param {string} options.sessionId the session ID for subsequent requests, not required for the first request\n * @param {string} options.encryptionKeyUrl the encryption key URL for this meeting summary\n * @param {number} options.lastMinutes Optional number of minutes to summarize from the end of the meeting. If not included, summarizes from the start.\n * @param {string} options.requestId optional request ID to use for this request, if not provided a new UUID will be generated\n * @returns {Promise<Object>} Resolves with an object containing the requestId, sessionId and streamEventName\n */\n summarizeMeeting(options: SummarizeMeetingOptions): Promise<RequestResponse> {\n return this.makeAiAssistantRequest({\n ...options,\n contentType: CONTENT_TYPES.ACTION,\n contentValue: ACTION_TYPES.SUMMARIZE_FOR_ME,\n contextResources: [\n {\n id: options.meetingInstanceId,\n type: CONTEXT_RESOURCE_TYPES.MEETING,\n url: options.meetingSite,\n },\n ],\n ...(options.lastMinutes ? {parameters: {lastMinutes: options.lastMinutes}} : {}),\n });\n },\n\n /**\n * Checks if the user's name was mentioned in a meeting\n * @param {Object} options\n * @param {string} options.meetingInstanceId the meeting instance ID for the meeting from locus\n * @param {string} options.meetingSite the name.webex.com site for the meeting\n * @param {string} options.sessionId the session ID for subsequent requests, not required for the first request\n * @param {string} options.encryptionKeyUrl the encryption key URL for this meeting summary\n * @param {string} options.requestId optional request ID to use for this request, if not provided a new UUID will be generated\n * @returns {Promise<Object>} Resolves with an object containing the requestId, sessionId and streamEventName\n */\n wasMyNameMentioned(options: SummarizeMeetingOptions): Promise<RequestResponse> {\n return this.makeAiAssistantRequest({\n ...options,\n contextResources: [\n {\n id: options.meetingInstanceId,\n type: CONTEXT_RESOURCE_TYPES.MEETING,\n url: options.meetingSite,\n },\n ],\n contentType: CONTENT_TYPES.ACTION,\n contentValue: ACTION_TYPES.WAS_MY_NAME_MENTIONED,\n });\n },\n\n /**\n * Returns all action items from a meeting\n * @param {Object} options\n * @param {string} options.meetingInstanceId the meeting instance ID for the meeting from locus\n * @param {string} options.meetingSite the name.webex.com site for the meeting\n * @param {string} options.sessionId the session ID for subsequent requests, not required for the first request\n * @param {string} options.encryptionKeyUrl the encryption key URL for this meeting summary\n * @param {string} options.requestId optional request ID to use for this request, if not provided a new UUID will be generated\n * @returns {Promise<Object>} Resolves with an object containing the requestId, sessionId and streamEventName\n */\n showAllActionItems(options: SummarizeMeetingOptions): Promise<RequestResponse> {\n return this.makeAiAssistantRequest({\n ...options,\n contextResources: [\n {\n id: options.meetingInstanceId,\n type: CONTEXT_RESOURCE_TYPES.MEETING,\n url: options.meetingSite,\n },\n ],\n contentType: CONTENT_TYPES.ACTION,\n contentValue: ACTION_TYPES.SHOW_ALL_ACTION_ITEMS,\n });\n },\n\n /**\n * Helper method to encrypt text using the encryption key URL\n * @param {Object} options\n * @param {string} options.text the text to encrypt\n * @param {string} options.encryptionKeyUrl the encryption key URL to use for encryption\n * @returns {Promise<string>} returns a promise that resolves with the encrypted text\n */\n async _encryptData({text, encryptionKeyUrl}) {\n const result = await this.webex.internal.encryption.encryptText(encryptionKeyUrl, text);\n\n return result;\n },\n\n /**\n * Ask any question about the meeting content\n * @param {Object} options\n * @param {string} options.meetingInstanceId the meeting instance ID for the meeting from locus\n * @param {string} options.meetingSite the name.webex.com site for the meeting\n * @param {string} options.sessionId the session ID for subsequent requests, not required for the first request\n * @param {string} options.encryptionKeyUrl the encryption key URL for this meeting summary\n * @param {string} options.question the question to ask about the meeting content\n * @param {string} options.requestId optional request ID to use for this request, if not provided a new UUID will be generated\n * @returns {Promise<Object>} Resolves with an object containing the requestId, sessionId and streamEventName\n */\n askMeAnything(options: SummarizeMeetingOptions & {question: string}): Promise<RequestResponse> {\n return this.makeAiAssistantRequest({\n ...options,\n contextResources: [\n {\n id: options.meetingInstanceId,\n type: CONTEXT_RESOURCE_TYPES.MEETING,\n url: options.meetingSite,\n },\n ],\n contentType: CONTENT_TYPES.MESSAGE,\n contentValue: options.question,\n });\n },\n});\n\nexport default AIAssistant;\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
package/src/ai-assistant.ts
CHANGED
|
@@ -105,10 +105,10 @@ const AIAssistant = WebexPlugin.extend({
|
|
|
105
105
|
|
|
106
106
|
this.stopListeningForEvents();
|
|
107
107
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
108
|
+
this.trigger(AI_ASSISTANT_UNREGISTERED);
|
|
109
|
+
this.registered = false;
|
|
110
|
+
|
|
111
|
+
return Promise.resolve();
|
|
112
112
|
},
|
|
113
113
|
|
|
114
114
|
/**
|
|
@@ -16,7 +16,12 @@ import {
|
|
|
16
16
|
AI_ASSISTANT_ERROR_CODES,
|
|
17
17
|
AI_ASSISTANT_ERRORS,
|
|
18
18
|
} from '@webex/internal-plugin-ai-assistant/src/constants';
|
|
19
|
-
import {
|
|
19
|
+
import {
|
|
20
|
+
jsonResponse,
|
|
21
|
+
messageResponse,
|
|
22
|
+
workspaceResponse,
|
|
23
|
+
scheduleMeetingResponse,
|
|
24
|
+
} from '../data/messages';
|
|
20
25
|
|
|
21
26
|
const waitForAsync = () =>
|
|
22
27
|
new Promise<void>((resolve) =>
|
|
@@ -130,7 +135,6 @@ describe('plugin-ai-assistant', () => {
|
|
|
130
135
|
const result = await webex.internal.aiAssistant.unregister();
|
|
131
136
|
|
|
132
137
|
expect(result).to.be.undefined;
|
|
133
|
-
assert.callCount(webex.internal.mercury.disconnect, 0);
|
|
134
138
|
assert.equal(webex.internal.aiAssistant.registered, false);
|
|
135
139
|
});
|
|
136
140
|
});
|
|
@@ -332,9 +336,7 @@ describe('plugin-ai-assistant', () => {
|
|
|
332
336
|
responseType: 'thought',
|
|
333
337
|
};
|
|
334
338
|
expect(triggerSpy.getCall(1).args[0]).to.deep.equal('aiassistant:stream:test-request-id');
|
|
335
|
-
expect(triggerSpy.getCall(1).args[1]).to.deep.equal(
|
|
336
|
-
expectedResult
|
|
337
|
-
);
|
|
339
|
+
expect(triggerSpy.getCall(1).args[1]).to.deep.equal(expectedResult);
|
|
338
340
|
|
|
339
341
|
triggerSpy.resetHistory();
|
|
340
342
|
|
|
@@ -443,7 +445,8 @@ describe('plugin-ai-assistant', () => {
|
|
|
443
445
|
type: 'json',
|
|
444
446
|
encryptionKeyUrl: 'kms://kms-us.wbx2.com/keys/9565506d-78b1-4742-b0fd-63719748282e',
|
|
445
447
|
value: {
|
|
446
|
-
value:
|
|
448
|
+
value:
|
|
449
|
+
'decrypted-with-kms://kms-us.wbx2.com/keys/9565506d-78b1-4742-b0fd-63719748282e-json_3_encrypted_value',
|
|
447
450
|
type: 'markdown',
|
|
448
451
|
},
|
|
449
452
|
},
|
|
@@ -574,12 +577,10 @@ describe('plugin-ai-assistant', () => {
|
|
|
574
577
|
// Update the clientRequestId to match the test setup
|
|
575
578
|
const firstEvent = cloneDeep(workspaceResponse[0]);
|
|
576
579
|
firstEvent.clientRequestId = 'test-request-id';
|
|
577
|
-
|
|
580
|
+
|
|
578
581
|
await webex.internal.aiAssistant._handleEvent(firstEvent);
|
|
579
582
|
|
|
580
|
-
expect(triggerSpy.getCall(0).args[0]).to.equal(
|
|
581
|
-
`aiassistant:result:test-request-id`
|
|
582
|
-
);
|
|
583
|
+
expect(triggerSpy.getCall(0).args[0]).to.equal(`aiassistant:result:test-request-id`);
|
|
583
584
|
|
|
584
585
|
await waitForAsync();
|
|
585
586
|
|
|
@@ -594,7 +595,7 @@ describe('plugin-ai-assistant', () => {
|
|
|
594
595
|
// second event is another workspace chunk with an encrypted value
|
|
595
596
|
const secondEvent = cloneDeep(workspaceResponse[1]);
|
|
596
597
|
secondEvent.clientRequestId = 'test-request-id';
|
|
597
|
-
|
|
598
|
+
|
|
598
599
|
await webex.internal.aiAssistant._handleEvent(secondEvent);
|
|
599
600
|
|
|
600
601
|
expectedResult = set(
|
|
@@ -604,7 +605,7 @@ describe('plugin-ai-assistant', () => {
|
|
|
604
605
|
);
|
|
605
606
|
|
|
606
607
|
expect(triggerSpy.getCall(2).args[1]).to.deep.equal(expectedResult);
|
|
607
|
-
});
|
|
608
|
+
});
|
|
608
609
|
|
|
609
610
|
it('handles a schedule meeting response', async () => {
|
|
610
611
|
const triggerSpy = sinon.spy(webex.internal.aiAssistant, 'trigger');
|
|
@@ -620,30 +621,28 @@ describe('plugin-ai-assistant', () => {
|
|
|
620
621
|
// Handle schedule meeting event with encrypted fields
|
|
621
622
|
const event = cloneDeep(scheduleMeetingResponse[0]);
|
|
622
623
|
event.clientRequestId = 'test-request-id';
|
|
623
|
-
|
|
624
|
+
|
|
624
625
|
await webex.internal.aiAssistant._handleEvent(event);
|
|
625
626
|
|
|
626
|
-
expect(triggerSpy.getCall(0).args[0]).to.equal(
|
|
627
|
-
`aiassistant:result:test-request-id`
|
|
628
|
-
);
|
|
627
|
+
expect(triggerSpy.getCall(0).args[0]).to.equal(`aiassistant:result:test-request-id`);
|
|
629
628
|
|
|
630
629
|
await waitForAsync();
|
|
631
630
|
|
|
632
631
|
// Verify all encrypted fields were decrypted
|
|
633
632
|
const expectedResult = cloneDeep(event);
|
|
634
|
-
expectedResult.response.content.parameters.commentary =
|
|
633
|
+
expectedResult.response.content.parameters.commentary =
|
|
635
634
|
'decrypted-with-kms://kms-cisco.wbx2.com/keys/dd6053f0-a1b3-428d-8104-317527d73630-schedule_meeting_encrypted_commentary';
|
|
636
|
-
expectedResult.response.content.value.results.data.attendees[0].email =
|
|
635
|
+
expectedResult.response.content.value.results.data.attendees[0].email =
|
|
637
636
|
'decrypted-with-kms://kms-cisco.wbx2.com/keys/dd6053f0-a1b3-428d-8104-317527d73630-schedule_meeting_encrypted_email_0';
|
|
638
|
-
expectedResult.response.content.value.results.data.attendees[1].email =
|
|
637
|
+
expectedResult.response.content.value.results.data.attendees[1].email =
|
|
639
638
|
'decrypted-with-kms://kms-cisco.wbx2.com/keys/dd6053f0-a1b3-428d-8104-317527d73630-schedule_meeting_encrypted_email_1';
|
|
640
|
-
expectedResult.response.content.value.results.data.title =
|
|
639
|
+
expectedResult.response.content.value.results.data.title =
|
|
641
640
|
'decrypted-with-kms://kms-cisco.wbx2.com/keys/dd6053f0-a1b3-428d-8104-317527d73630-schedule_meeting_encrypted_title';
|
|
642
|
-
expectedResult.response.content.value.results.data.description =
|
|
641
|
+
expectedResult.response.content.value.results.data.description =
|
|
643
642
|
'decrypted-with-kms://kms-cisco.wbx2.com/keys/dd6053f0-a1b3-428d-8104-317527d73630-schedule_meeting_encrypted_description';
|
|
644
|
-
expectedResult.response.content.value.results.data.inScopeReply =
|
|
643
|
+
expectedResult.response.content.value.results.data.inScopeReply =
|
|
645
644
|
'decrypted-with-kms://kms-cisco.wbx2.com/keys/dd6053f0-a1b3-428d-8104-317527d73630-schedule_meeting_encrypted_inScopeReply';
|
|
646
|
-
expectedResult.response.content.value.results.data.meetingLink =
|
|
645
|
+
expectedResult.response.content.value.results.data.meetingLink =
|
|
647
646
|
'decrypted-with-kms://kms-cisco.wbx2.com/keys/dd6053f0-a1b3-428d-8104-317527d73630-schedule_meeting_encrypted_meetingLink';
|
|
648
647
|
|
|
649
648
|
expect(triggerSpy.getCall(0).args[1]).to.deep.equal(expectedResult);
|
|
@@ -830,7 +829,8 @@ describe('plugin-ai-assistant', () => {
|
|
|
830
829
|
id: 'test-message-id',
|
|
831
830
|
url: 'https://assistant-api-a.wbx2.com:443/assistant-api/api/v1/sessions/test-session-id/messages/test-message-id',
|
|
832
831
|
sessionId: 'test-session-id',
|
|
833
|
-
sessionUrl:
|
|
832
|
+
sessionUrl:
|
|
833
|
+
'https://assistant-api-a.wbx2.com:443/assistant-api/api/v1/sessions/test-session-id',
|
|
834
834
|
creatorId: 'test-creator-id',
|
|
835
835
|
createdAt: '2025-08-05T02:11:12.361Z',
|
|
836
836
|
},
|
|
@@ -867,7 +867,7 @@ describe('plugin-ai-assistant', () => {
|
|
|
867
867
|
// Verify the request was made correctly
|
|
868
868
|
expect(webex.request.calledOnce).to.be.true;
|
|
869
869
|
const requestArgs = webex.request.getCall(0).args[0];
|
|
870
|
-
|
|
870
|
+
|
|
871
871
|
expect(requestArgs.service).to.equal('assistant-api');
|
|
872
872
|
expect(requestArgs.resource).to.equal('sessions/test-session-id/messages');
|
|
873
873
|
expect(requestArgs.method).to.equal('POST');
|
|
@@ -901,7 +901,8 @@ describe('plugin-ai-assistant', () => {
|
|
|
901
901
|
id: 'test-message-id',
|
|
902
902
|
url: 'https://assistant-api-a.wbx2.com:443/assistant-api/api/v1/sessions/test-session-id/messages/test-message-id',
|
|
903
903
|
sessionId: 'test-session-id',
|
|
904
|
-
sessionUrl:
|
|
904
|
+
sessionUrl:
|
|
905
|
+
'https://assistant-api-a.wbx2.com:443/assistant-api/api/v1/sessions/test-session-id',
|
|
905
906
|
creatorId: 'test-creator-id',
|
|
906
907
|
createdAt: '2025-08-05T02:11:12.361Z',
|
|
907
908
|
requestId: 'custom-request-id',
|
|
@@ -1003,7 +1004,7 @@ describe('plugin-ai-assistant', () => {
|
|
|
1003
1004
|
// Should use the UUID stub
|
|
1004
1005
|
expect(result.requestId).to.equal('test-request-id');
|
|
1005
1006
|
expect(result.streamEventName).to.equal('aiassistant:stream:test-request-id');
|
|
1006
|
-
|
|
1007
|
+
|
|
1007
1008
|
const requestArgs = webex.request.getCall(0).args[0];
|
|
1008
1009
|
expect(requestArgs.body.clientRequestId).to.equal('test-request-id');
|
|
1009
1010
|
});
|
|
@@ -1065,9 +1066,9 @@ describe('plugin-ai-assistant', () => {
|
|
|
1065
1066
|
contentValue: 'test_action',
|
|
1066
1067
|
};
|
|
1067
1068
|
|
|
1068
|
-
await expect(
|
|
1069
|
-
|
|
1070
|
-
)
|
|
1069
|
+
await expect(webex.internal.aiAssistant.makeAiAssistantRequest(options)).to.be.rejectedWith(
|
|
1070
|
+
'Network error'
|
|
1071
|
+
);
|
|
1071
1072
|
});
|
|
1072
1073
|
|
|
1073
1074
|
it('starts timer when making a request', async () => {
|
|
@@ -1087,7 +1088,7 @@ describe('plugin-ai-assistant', () => {
|
|
|
1087
1088
|
|
|
1088
1089
|
it('handles timeout when no streaming response comes back', async () => {
|
|
1089
1090
|
const triggerSpy = sinon.spy(webex.internal.aiAssistant, 'trigger');
|
|
1090
|
-
|
|
1091
|
+
|
|
1091
1092
|
const options = {
|
|
1092
1093
|
sessionId: 'test-session-id',
|
|
1093
1094
|
encryptionKeyUrl: 'test-key-url',
|
|
@@ -1105,10 +1106,13 @@ describe('plugin-ai-assistant', () => {
|
|
|
1105
1106
|
|
|
1106
1107
|
// Should trigger timeout event on the stream
|
|
1107
1108
|
expect(triggerSpy.calledWith('aiassistant:stream:test-request-id')).to.be.true;
|
|
1108
|
-
const timeoutCall = triggerSpy
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1109
|
+
const timeoutCall = triggerSpy
|
|
1110
|
+
.getCalls()
|
|
1111
|
+
.find(
|
|
1112
|
+
(call) =>
|
|
1113
|
+
call.args[0] === 'aiassistant:stream:test-request-id' &&
|
|
1114
|
+
call.args[1].errorMessage === AI_ASSISTANT_ERRORS.AI_ASSISTANT_TIMEOUT
|
|
1115
|
+
);
|
|
1112
1116
|
expect(timeoutCall).to.exist;
|
|
1113
1117
|
expect(timeoutCall.args[1]).to.deep.include({
|
|
1114
1118
|
requestId: 'test-request-id',
|
|
@@ -1121,7 +1125,7 @@ describe('plugin-ai-assistant', () => {
|
|
|
1121
1125
|
it('resets timer when streaming responses are received', async () => {
|
|
1122
1126
|
const timerResetSpy = sinon.spy(Timer.prototype, 'reset');
|
|
1123
1127
|
const timerCancelSpy = sinon.spy(Timer.prototype, 'cancel');
|
|
1124
|
-
|
|
1128
|
+
|
|
1125
1129
|
const options = {
|
|
1126
1130
|
sessionId: 'test-session-id',
|
|
1127
1131
|
encryptionKeyUrl: 'test-key-url',
|