@webex/internal-plugin-ai-assistant 0.0.0-next.8 → 3.11.0

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/README.md CHANGED
@@ -22,7 +22,7 @@ npm install --save @webex/internal-plugin-ai-assistant
22
22
 
23
23
  ## Usage
24
24
 
25
- The responses from the AI assistant service are delivered asynchronously via mercury. The methods in this plugin return a stream ID which can then be used to listen to the updates for a given request. The service will return preliminary versions of a response. The latest response for a given request should be used.
25
+ The responses from the AI assistant service are delivered asynchronously via mercury. The methods in this plugin return a stream ID which can then be used to listen to the updates for a given request. The service will respond in chunks. The latest response for a given request will contain the full response.
26
26
 
27
27
  The data used for the arguments to the methods in this plugin is obtained from either Locus or the Meeting Container.
28
28
  ```js
@@ -123,8 +123,51 @@ webex.internal.aiAssistant.askMeAnything({
123
123
  }
124
124
  });
125
125
  });
126
+
127
+ // Advanced: Use the common makeAiAssistantRequest method for custom requests
128
+ webex.internal.aiAssistant.makeAiAssistantRequest({
129
+ sessionId: '<session-id>', // Optional for first request
130
+ encryptionKeyUrl: '<encryption-key-url>',
131
+ contextResources: [{
132
+ id: '<meeting-instance-id>',
133
+ type: 'meeting',
134
+ url: 'company.webex.com'
135
+ }],
136
+ contentType: 'message', // 'action' or 'message'
137
+ contentValue: 'What were the key takeaways?',
138
+ requestId: 'custom-id', // Optional
139
+ locale: 'en_US', // Optional
140
+ assistant: 'meeting-assistant' // Optional
141
+ }).then((response) => {
142
+ const { requestId, sessionId, streamEventName } = response;
143
+
144
+ // Listen for streaming responses
145
+ webex.internal.aiAssistant.on(streamEventName, (data) => {
146
+ console.log('Custom AI Response:', data.message);
147
+ });
148
+ });
149
+ ```
150
+
151
+ ### Optional Parameters
152
+
153
+ All AI Assistant methods support an optional `requestId` parameter that allows you to specify a custom request identifier:
154
+
155
+ ```js
156
+ // Example with custom requestId
157
+ webex.internal.aiAssistant.summarizeMeeting({
158
+ meetingInstanceId: '<meeting-instance-id>',
159
+ meetingSite: 'company.webex.com',
160
+ sessionId: '<session-id>',
161
+ encryptionKeyUrl: '<encryption-key-url>',
162
+ requestId: 'my-custom-request-id' // Optional: specify your own request ID
163
+ }).then((response) => {
164
+ // The response will contain your custom requestId
165
+ console.log('Request ID:', response.requestId); // 'my-custom-request-id'
166
+ });
126
167
  ```
127
168
 
169
+ If `requestId` is not provided, a new UUID will be automatically generated for each request.
170
+
128
171
  ### Response Format
129
172
 
130
173
  All AI Assistant methods return a Promise that resolves with:
@@ -22,6 +22,7 @@ require("@webex/internal-plugin-mercury");
22
22
  var _lodash = require("lodash");
23
23
  var _commonTimers = require("@webex/common-timers");
24
24
  var _constants = require("./constants");
25
+ var _utils = require("./utils");
25
26
  function ownKeys(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
26
27
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; } /*!
27
28
  * Copyright (c) 2015-2022 Cisco Systems, Inc. See LICENSE file.
@@ -137,26 +138,50 @@ var AIAssistant = _webexCore.WebexPlugin.extend({
137
138
  this.trigger(this._getResultEventName(data.clientRequestId), data);
138
139
  },
139
140
  /**
140
- * Decrypts the encrypted value using the encryption key URL
141
- * @param {Object} options
142
- * @param {string} options.value the encrypted value to decrypt
143
- * @param {string} options.encryptionKeyUrl the encryption key URL to use for
144
- * @returns {Promise<Object>} returns a promise that resolves with the decrypted value
141
+ * Decrypts the response content in place
142
+ * @param {any} responseContent the content object from the assistant-api response
143
+ * @returns {Promise} resolves once decryption is complete
145
144
  */
146
- _decryptData: function _decryptData(_ref) {
145
+ _decryptContent: function _decryptContent(responseContent) {
147
146
  var _this4 = this;
148
- return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
149
- var value, encryptionKeyUrl, result;
150
- return _regenerator.default.wrap(function _callee$(_context) {
147
+ return (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee() {
148
+ var _t;
149
+ return _regenerator.default.wrap(function (_context) {
151
150
  while (1) switch (_context.prev = _context.next) {
152
151
  case 0:
153
- value = _ref.value, encryptionKeyUrl = _ref.encryptionKeyUrl;
154
- _context.next = 3;
155
- return _this4.webex.internal.encryption.decryptText(encryptionKeyUrl, value);
152
+ _t = responseContent.name;
153
+ _context.next = _t === _constants.RESPONSE_NAMES.MESSAGE ? 1 : _t === _constants.RESPONSE_NAMES.CITED_ANSWER ? 3 : _t === _constants.RESPONSE_NAMES.SCHEDULE_MEETING ? 5 : _t === _constants.RESPONSE_NAMES.TOOL_RESULT ? 7 : _t === _constants.RESPONSE_NAMES.TOOL_USE ? 8 : _t === _constants.RESPONSE_NAMES.WORKSPACE ? 10 : 12;
154
+ break;
155
+ case 1:
156
+ _context.next = 2;
157
+ return (0, _utils.decryptMessage)(responseContent, _this4.webex);
158
+ case 2:
159
+ return _context.abrupt("continue", 13);
156
160
  case 3:
157
- result = _context.sent;
158
- return _context.abrupt("return", result);
161
+ _context.next = 4;
162
+ return (0, _utils.decryptCitedAnswer)(responseContent, _this4.webex);
163
+ case 4:
164
+ return _context.abrupt("continue", 13);
159
165
  case 5:
166
+ _context.next = 6;
167
+ return (0, _utils.decryptScheduleMeeting)(responseContent, _this4.webex);
168
+ case 6:
169
+ return _context.abrupt("continue", 13);
170
+ case 7:
171
+ return _context.abrupt("continue", 13);
172
+ case 8:
173
+ _context.next = 9;
174
+ return (0, _utils.decryptToolUse)(responseContent, _this4.webex);
175
+ case 9:
176
+ return _context.abrupt("continue", 13);
177
+ case 10:
178
+ _context.next = 11;
179
+ return (0, _utils.decryptWorkspace)(responseContent, _this4.webex);
180
+ case 11:
181
+ return _context.abrupt("continue", 13);
182
+ case 12:
183
+ _this4.logger.error("AI assistant->_decryptContent#ERROR, Unknown response content name: ".concat(responseContent.name));
184
+ case 13:
160
185
  case "end":
161
186
  return _context.stop();
162
187
  }
@@ -168,19 +193,16 @@ var AIAssistant = _webexCore.WebexPlugin.extend({
168
193
  * @param {Object} options
169
194
  * @param {string} options.resource the URL to query
170
195
  * @param {Mixed} options.params additional params for the body of the request
171
- * @param {string} options.dataPath the path to get the data in the result object
172
196
  * @returns {Promise<Object>} Resolves with an object containing the requestId, sessionId and streamEventName
173
197
  */
174
198
  _request: function _request(options) {
175
199
  var _this5 = this;
176
200
  var resource = options.resource,
177
- params = options.params,
178
- dataPath = options.dataPath;
201
+ params = options.params;
179
202
  var timeout = this.config.requestTimeout;
180
- var requestId = _uuid.default.v4();
203
+ var requestId = options.requestId || _uuid.default.v4();
181
204
  var eventName = this._getResultEventName(requestId);
182
205
  var streamEventName = this._getStreamEventName(requestId);
183
- var concatenatedMessage = '';
184
206
 
185
207
  // eslint-disable-next-line no-async-promise-executor
186
208
  return new _promise.default(function (resolve, reject) {
@@ -194,98 +216,50 @@ var AIAssistant = _webexCore.WebexPlugin.extend({
194
216
  });
195
217
  }, timeout);
196
218
  _this5.listenTo(_this5, eventName, /*#__PURE__*/function () {
197
- var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(data) {
198
- var resultData, errorMessage, errorCode, decryptedMessage, _decryptedMessage;
199
- return _regenerator.default.wrap(function _callee2$(_context2) {
219
+ var _ref = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee2(data) {
220
+ var resultData, errorMessage, errorCode, responseType, decryptErrorMessage, _t2;
221
+ return _regenerator.default.wrap(function (_context2) {
200
222
  while (1) switch (_context2.prev = _context2.next) {
201
223
  case 0:
202
224
  timer.reset();
203
- resultData = (0, _lodash.get)(data, dataPath, []);
225
+ resultData = (0, _lodash.get)(data, 'response.content', {});
204
226
  errorMessage = (0, _lodash.get)(data, 'response.errorMessage');
205
227
  errorCode = (0, _lodash.get)(data, 'response.errorCode');
206
- if (!data.finished) {
207
- _context2.next = 20;
208
- break;
228
+ responseType = (0, _lodash.get)(data, 'responseType');
229
+ if (data.finished) {
230
+ timer.cancel();
231
+ _this5.stopListening(_this5, eventName);
209
232
  }
210
- // For finished messages, decrypt and emit the final complete message
211
- timer.cancel();
212
- _context2.prev = 6;
213
- if (!(resultData !== null && resultData !== void 0 && resultData.value)) {
214
- _context2.next = 11;
233
+ _context2.prev = 1;
234
+ if (errorCode) {
235
+ _context2.next = 2;
215
236
  break;
216
237
  }
217
- _context2.next = 10;
218
- return _this5._decryptData(resultData);
219
- case 10:
220
- decryptedMessage = _context2.sent;
221
- case 11:
222
- // Emit the final message
223
- _this5.trigger(streamEventName, {
224
- message: decryptedMessage || '',
225
- requestId: requestId,
226
- finished: true,
227
- errorMessage: errorMessage,
228
- errorCode: errorCode
229
- });
230
- _this5.stopListening(_this5, eventName);
231
- _context2.next = 18;
232
- break;
233
- case 15:
234
- _context2.prev = 15;
235
- _context2.t0 = _context2["catch"](6);
236
- _this5.trigger(streamEventName, {
237
- message: concatenatedMessage,
238
- requestId: requestId,
239
- finished: true,
240
- errorMessage: errorMessage || _context2.t0.message,
241
- errorCode: errorCode
242
- });
243
- case 18:
244
- _context2.next = 33;
245
- break;
246
- case 20:
247
- _context2.prev = 20;
248
- _decryptedMessage = '';
249
- if (!(resultData !== null && resultData !== void 0 && resultData.value)) {
250
- _context2.next = 26;
251
- break;
252
- }
253
- _context2.next = 25;
254
- return _this5._decryptData(resultData);
255
- case 25:
256
- _decryptedMessage = _context2.sent;
257
- case 26:
258
- concatenatedMessage += _decryptedMessage;
259
-
260
- // Emit the concatenated message so far
261
- _this5.trigger(streamEventName, {
262
- message: concatenatedMessage,
263
- requestId: requestId,
264
- finished: false,
265
- errorMessage: errorMessage,
266
- errorCode: errorCode
267
- });
268
- _context2.next = 33;
238
+ _context2.next = 2;
239
+ return _this5._decryptContent(resultData);
240
+ case 2:
241
+ _context2.next = 4;
269
242
  break;
270
- case 30:
271
- _context2.prev = 30;
272
- _context2.t1 = _context2["catch"](20);
273
- // If decryption fails, we still want to continue listening for more messages
274
- _this5.trigger(streamEventName, {
275
- message: concatenatedMessage,
243
+ case 3:
244
+ _context2.prev = 3;
245
+ _t2 = _context2["catch"](1);
246
+ decryptErrorMessage = _t2.message;
247
+ case 4:
248
+ _this5.trigger(streamEventName, (0, _lodash.merge)({}, data.response, {
249
+ responseType: responseType,
276
250
  requestId: requestId,
277
- finished: false,
278
- errorMessage: errorMessage || _context2.t1.message,
251
+ finished: data.finished,
252
+ errorMessage: errorMessage || decryptErrorMessage,
279
253
  errorCode: errorCode
280
- });
281
- case 33:
254
+ }));
255
+ case 5:
282
256
  case "end":
283
257
  return _context2.stop();
284
258
  }
285
- }, _callee2, null, [[6, 15], [20, 30]]);
259
+ }, _callee2, null, [[1, 3]]);
286
260
  }));
287
261
  return function (_x) {
288
- return _ref2.apply(this, arguments);
262
+ return _ref.apply(this, arguments);
289
263
  };
290
264
  }());
291
265
  _this5.webex.request({
@@ -296,18 +270,16 @@ var AIAssistant = _webexCore.WebexPlugin.extend({
296
270
  body: _objectSpread({
297
271
  clientRequestId: requestId
298
272
  }, params)
299
- }).catch(function (error) {
300
- reject(error);
301
- }).then(function (_ref3) {
302
- var body = _ref3.body;
303
- var sessionId = body.sessionId;
304
- resolve({
273
+ }).then(function (_ref2) {
274
+ var body = _ref2.body;
275
+ resolve(_objectSpread(_objectSpread({}, body), {}, {
305
276
  requestId: requestId,
306
- sessionId: sessionId,
307
277
  streamEventName: streamEventName
308
- });
309
- timer.start();
278
+ }));
279
+ }).catch(function (error) {
280
+ reject(error);
310
281
  });
282
+ timer.start();
311
283
  });
312
284
  },
313
285
  /**
@@ -321,28 +293,32 @@ var AIAssistant = _webexCore.WebexPlugin.extend({
321
293
  * @param {Object} options.parameters optional parameters to include in the request (for action type only)
322
294
  * @param {Object} options.assistant optional parameter to specify the assistant to use
323
295
  * @param {Object} options.locale optional locale to use for the request, defaults to 'en_US'
296
+ * @param {string} options.requestId optional request ID to use for this request, if not provided a new UUID will be generated
297
+ * @param {string} options.entryPoint optional entryPoint to use for this request
324
298
  * @returns {Promise<Object>} Resolves with an object containing the requestId, sessionId and streamEventName
299
+ * @public
300
+ * @memberof AIAssistant
325
301
  */
326
- _makeMeetingRequest: function _makeMeetingRequest(options) {
302
+ makeAiAssistantRequest: function makeAiAssistantRequest(options) {
327
303
  var _this6 = this;
328
- return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {
304
+ return (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee3() {
329
305
  var value, content;
330
- return _regenerator.default.wrap(function _callee3$(_context3) {
306
+ return _regenerator.default.wrap(function (_context3) {
331
307
  while (1) switch (_context3.prev = _context3.next) {
332
308
  case 0:
333
309
  value = options.contentValue;
334
310
  if (!(options.contentType === 'message')) {
335
- _context3.next = 5;
311
+ _context3.next = 2;
336
312
  break;
337
313
  }
338
- _context3.next = 4;
314
+ _context3.next = 1;
339
315
  return _this6._encryptData({
340
316
  text: options.contentValue,
341
317
  encryptionKeyUrl: options.encryptionKeyUrl
342
318
  });
343
- case 4:
319
+ case 1:
344
320
  value = _context3.sent;
345
- case 5:
321
+ case 2:
346
322
  content = {
347
323
  context: {
348
324
  resources: options.contextResources
@@ -351,21 +327,24 @@ var AIAssistant = _webexCore.WebexPlugin.extend({
351
327
  type: options.contentType,
352
328
  value: value
353
329
  };
354
- if (options.contentType === 'action' && options.parameters) {
330
+ if (options.parameters) {
355
331
  content.parameters = options.parameters;
356
332
  }
357
- return _context3.abrupt("return", _this6._request({
333
+ return _context3.abrupt("return", _this6._request(_objectSpread({
358
334
  resource: options.sessionId ? "sessions/".concat(options.sessionId, "/messages") : 'sessions/messages',
359
- dataPath: 'response.content',
360
- params: _objectSpread({
335
+ params: _objectSpread(_objectSpread({
361
336
  async: 'chunked',
362
337
  locale: options.locale || 'en_US',
363
338
  content: content
364
- }, options.assistant ? {
339
+ }, options.entryPoint ? {
340
+ entryPoint: options.entryPoint
341
+ } : {}), options.assistant ? {
365
342
  assistant: options.assistant
366
343
  } : {})
367
- }));
368
- case 8:
344
+ }, options.requestId ? {
345
+ requestId: options.requestId
346
+ } : {})));
347
+ case 3:
369
348
  case "end":
370
349
  return _context3.stop();
371
350
  }
@@ -380,10 +359,11 @@ var AIAssistant = _webexCore.WebexPlugin.extend({
380
359
  * @param {string} options.sessionId the session ID for subsequent requests, not required for the first request
381
360
  * @param {string} options.encryptionKeyUrl the encryption key URL for this meeting summary
382
361
  * @param {number} options.lastMinutes Optional number of minutes to summarize from the end of the meeting. If not included, summarizes from the start.
362
+ * @param {string} options.requestId optional request ID to use for this request, if not provided a new UUID will be generated
383
363
  * @returns {Promise<Object>} Resolves with an object containing the requestId, sessionId and streamEventName
384
364
  */
385
365
  summarizeMeeting: function summarizeMeeting(options) {
386
- return this._makeMeetingRequest(_objectSpread(_objectSpread({}, options), {}, {
366
+ return this.makeAiAssistantRequest(_objectSpread(_objectSpread({}, options), {}, {
387
367
  contentType: _constants.CONTENT_TYPES.ACTION,
388
368
  contentValue: _constants.ACTION_TYPES.SUMMARIZE_FOR_ME,
389
369
  contextResources: [{
@@ -404,10 +384,11 @@ var AIAssistant = _webexCore.WebexPlugin.extend({
404
384
  * @param {string} options.meetingSite the name.webex.com site for the meeting
405
385
  * @param {string} options.sessionId the session ID for subsequent requests, not required for the first request
406
386
  * @param {string} options.encryptionKeyUrl the encryption key URL for this meeting summary
387
+ * @param {string} options.requestId optional request ID to use for this request, if not provided a new UUID will be generated
407
388
  * @returns {Promise<Object>} Resolves with an object containing the requestId, sessionId and streamEventName
408
389
  */
409
390
  wasMyNameMentioned: function wasMyNameMentioned(options) {
410
- return this._makeMeetingRequest(_objectSpread(_objectSpread({}, options), {}, {
391
+ return this.makeAiAssistantRequest(_objectSpread(_objectSpread({}, options), {}, {
411
392
  contextResources: [{
412
393
  id: options.meetingInstanceId,
413
394
  type: _constants.CONTEXT_RESOURCE_TYPES.MEETING,
@@ -424,10 +405,11 @@ var AIAssistant = _webexCore.WebexPlugin.extend({
424
405
  * @param {string} options.meetingSite the name.webex.com site for the meeting
425
406
  * @param {string} options.sessionId the session ID for subsequent requests, not required for the first request
426
407
  * @param {string} options.encryptionKeyUrl the encryption key URL for this meeting summary
408
+ * @param {string} options.requestId optional request ID to use for this request, if not provided a new UUID will be generated
427
409
  * @returns {Promise<Object>} Resolves with an object containing the requestId, sessionId and streamEventName
428
410
  */
429
411
  showAllActionItems: function showAllActionItems(options) {
430
- return this._makeMeetingRequest(_objectSpread(_objectSpread({}, options), {}, {
412
+ return this.makeAiAssistantRequest(_objectSpread(_objectSpread({}, options), {}, {
431
413
  contextResources: [{
432
414
  id: options.meetingInstanceId,
433
415
  type: _constants.CONTEXT_RESOURCE_TYPES.MEETING,
@@ -444,20 +426,20 @@ var AIAssistant = _webexCore.WebexPlugin.extend({
444
426
  * @param {string} options.encryptionKeyUrl the encryption key URL to use for encryption
445
427
  * @returns {Promise<string>} returns a promise that resolves with the encrypted text
446
428
  */
447
- _encryptData: function _encryptData(_ref4) {
429
+ _encryptData: function _encryptData(_ref3) {
448
430
  var _this7 = this;
449
- return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {
431
+ return (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee4() {
450
432
  var text, encryptionKeyUrl, result;
451
- return _regenerator.default.wrap(function _callee4$(_context4) {
433
+ return _regenerator.default.wrap(function (_context4) {
452
434
  while (1) switch (_context4.prev = _context4.next) {
453
435
  case 0:
454
- text = _ref4.text, encryptionKeyUrl = _ref4.encryptionKeyUrl;
455
- _context4.next = 3;
436
+ text = _ref3.text, encryptionKeyUrl = _ref3.encryptionKeyUrl;
437
+ _context4.next = 1;
456
438
  return _this7.webex.internal.encryption.encryptText(encryptionKeyUrl, text);
457
- case 3:
439
+ case 1:
458
440
  result = _context4.sent;
459
441
  return _context4.abrupt("return", result);
460
- case 5:
442
+ case 2:
461
443
  case "end":
462
444
  return _context4.stop();
463
445
  }
@@ -472,10 +454,11 @@ var AIAssistant = _webexCore.WebexPlugin.extend({
472
454
  * @param {string} options.sessionId the session ID for subsequent requests, not required for the first request
473
455
  * @param {string} options.encryptionKeyUrl the encryption key URL for this meeting summary
474
456
  * @param {string} options.question the question to ask about the meeting content
457
+ * @param {string} options.requestId optional request ID to use for this request, if not provided a new UUID will be generated
475
458
  * @returns {Promise<Object>} Resolves with an object containing the requestId, sessionId and streamEventName
476
459
  */
477
460
  askMeAnything: function askMeAnything(options) {
478
- return this._makeMeetingRequest(_objectSpread(_objectSpread({}, options), {}, {
461
+ return this.makeAiAssistantRequest(_objectSpread(_objectSpread({}, options), {}, {
479
462
  contextResources: [{
480
463
  id: options.meetingInstanceId,
481
464
  type: _constants.CONTEXT_RESOURCE_TYPES.MEETING,
@@ -485,7 +468,7 @@ var AIAssistant = _webexCore.WebexPlugin.extend({
485
468
  contentValue: options.question
486
469
  }));
487
470
  },
488
- version: "0.0.0-next.8"
471
+ version: "0.0.0"
489
472
  });
490
473
  var _default = exports.default = AIAssistant;
491
474
  //# sourceMappingURL=ai-assistant.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_uuid","_interopRequireDefault","require","_webexCore","_lodash","_commonTimers","_constants","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","_decryptData","_ref","_this4","_asyncToGenerator2","_regenerator","mark","_callee","value","encryptionKeyUrl","result","wrap","_callee$","_context","prev","next","encryption","decryptText","sent","abrupt","stop","_request","options","_this5","resource","params","dataPath","timeout","config","requestTimeout","uuid","v4","eventName","streamEventName","concatenatedMessage","timer","Timer","stopListening","finished","errorMessage","AI_ASSISTANT_ERRORS","AI_ASSISTANT_TIMEOUT","errorCode","AI_ASSISTANT_ERROR_CODES","listenTo","_ref2","_callee2","resultData","decryptedMessage","_decryptedMessage","_callee2$","_context2","reset","get","cancel","t0","t1","_x","request","service","AI_ASSISTANT_SERVICE_NAME","method","contentType","body","_ref3","sessionId","start","_makeMeetingRequest","_this6","_callee3","content","_callee3$","_context3","contentValue","_encryptData","text","context","resources","contextResources","type","parameters","async","locale","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","_ref4","_this7","_callee4","_callee4$","_context4","encryptText","askMeAnything","MESSAGE","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} from 'lodash';\nimport {Timer} from '@webex/common-timers';\n\nimport {\n MakeMeetingRequestOptions,\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} from './constants';\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 encrypted value using the encryption key URL\n * @param {Object} options\n * @param {string} options.value the encrypted value to decrypt\n * @param {string} options.encryptionKeyUrl the encryption key URL to use for\n * @returns {Promise<Object>} returns a promise that resolves with the decrypted value\n */\n async _decryptData({value, encryptionKeyUrl}) {\n const result = await this.webex.internal.encryption.decryptText(encryptionKeyUrl, value);\n\n return result;\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 * @param {string} options.dataPath the path to get the data in the result object\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, dataPath} = options;\n\n const timeout = this.config.requestTimeout;\n const requestId = uuid.v4();\n const eventName = this._getResultEventName(requestId);\n const streamEventName = this._getStreamEventName(requestId);\n let concatenatedMessage = '';\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, dataPath, []);\n const errorMessage = get(data, 'response.errorMessage');\n const errorCode = get(data, 'response.errorCode');\n\n if (data.finished) {\n // For finished messages, decrypt and emit the final complete message\n timer.cancel();\n\n try {\n let decryptedMessage;\n if (resultData?.value) {\n decryptedMessage = await this._decryptData(resultData);\n }\n\n // Emit the final message\n this.trigger(streamEventName, {\n message: decryptedMessage || '',\n requestId,\n finished: true,\n errorMessage,\n errorCode,\n });\n\n this.stopListening(this, eventName);\n } catch (decryptError) {\n this.trigger(streamEventName, {\n message: concatenatedMessage,\n requestId,\n finished: true,\n errorMessage: errorMessage || decryptError.message,\n errorCode,\n });\n }\n } else {\n // For non-finished messages, concatenate and emit the accumulated message\n try {\n let decryptedMessage = '';\n if (resultData?.value) {\n decryptedMessage = await this._decryptData(resultData);\n }\n\n concatenatedMessage += decryptedMessage;\n\n // Emit the concatenated message so far\n this.trigger(streamEventName, {\n message: concatenatedMessage,\n requestId,\n finished: false,\n errorMessage,\n errorCode,\n });\n } catch (decryptError) {\n // If decryption fails, we still want to continue listening for more messages\n this.trigger(streamEventName, {\n message: concatenatedMessage,\n requestId,\n finished: false,\n errorMessage: errorMessage || decryptError.message,\n errorCode,\n });\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 .catch((error) => {\n reject(error);\n })\n .then(({body}) => {\n const {sessionId} = body;\n\n resolve({\n requestId,\n sessionId,\n streamEventName,\n });\n timer.start();\n });\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 * @returns {Promise<Object>} Resolves with an object containing the requestId, sessionId and streamEventName\n */\n async _makeMeetingRequest(options: MakeMeetingRequestOptions): 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.contentType === 'action' && options.parameters) {\n content.parameters = options.parameters;\n }\n\n return this._request({\n resource: options.sessionId ? `sessions/${options.sessionId}/messages` : 'sessions/messages',\n dataPath: 'response.content',\n params: {\n async: 'chunked',\n locale: options.locale || 'en_US',\n content,\n ...(options.assistant ? {assistant: options.assistant} : {}),\n },\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 * @returns {Promise<Object>} Resolves with an object containing the requestId, sessionId and streamEventName\n */\n summarizeMeeting(options: SummarizeMeetingOptions): Promise<RequestResponse> {\n return this._makeMeetingRequest({\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 * @returns {Promise<Object>} Resolves with an object containing the requestId, sessionId and streamEventName\n */\n wasMyNameMentioned(options: SummarizeMeetingOptions): Promise<RequestResponse> {\n return this._makeMeetingRequest({\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 * @returns {Promise<Object>} Resolves with an object containing the requestId, sessionId and streamEventName\n */\n showAllActionItems(options: SummarizeMeetingOptions): Promise<RequestResponse> {\n return this._makeMeetingRequest({\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 * @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._makeMeetingRequest({\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":";;;;;;;;;;;;;;;;;;AAGA,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AACAA,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AACA,IAAAG,aAAA,GAAAH,OAAA;AAQA,IAAAI,UAAA,GAAAJ,OAAA;AAYqB,SAAAK,QAAAC,CAAA,EAAAC,CAAA,QAAAC,CAAA,GAAAC,YAAA,CAAAH,CAAA,OAAAI,6BAAA,QAAAC,CAAA,GAAAD,6BAAA,CAAAJ,CAAA,GAAAC,CAAA,KAAAI,CAAA,GAAAA,CAAA,CAAAC,MAAA,WAAAL,CAAA,WAAAM,gCAAA,CAAAP,CAAA,EAAAC,CAAA,EAAAO,UAAA,OAAAN,CAAA,CAAAO,IAAA,CAAAC,KAAA,CAAAR,CAAA,EAAAG,CAAA,YAAAH,CAAA;AAAA,SAAAS,cAAAX,CAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAW,SAAA,CAAAC,MAAA,EAAAZ,CAAA,UAAAC,CAAA,WAAAU,SAAA,CAAAX,CAAA,IAAAW,SAAA,CAAAX,CAAA,QAAAA,CAAA,OAAAF,OAAA,CAAAe,MAAA,CAAAZ,CAAA,OAAAa,OAAA,WAAAd,CAAA,QAAAe,gBAAA,CAAAC,OAAA,EAAAjB,CAAA,EAAAC,CAAA,EAAAC,CAAA,CAAAD,CAAA,SAAAiB,iCAAA,GAAAC,wBAAA,CAAAnB,CAAA,EAAAkB,iCAAA,CAAAhB,CAAA,KAAAH,OAAA,CAAAe,MAAA,CAAAZ,CAAA,GAAAa,OAAA,WAAAd,CAAA,IAAAmB,sBAAA,CAAApB,CAAA,EAAAC,CAAA,EAAAM,gCAAA,CAAAL,CAAA,EAAAD,CAAA,iBAAAD,CAAA,IA3BrB;AACA;AACA;AA2BA,IAAMqB,WAAW,GAAGC,sBAAW,CAACC,MAAM,CAAC;EACrCC,SAAS,EAAE,aAAa;EAExB;AACF;AACA;AACA;AACA;AACA;EACEC,UAAU,EAAE,KAAK;EAEjB;AACF;AACA;AACA;AACA;AACA;AACA;EACEC,UAAU,WAAAA,WAAA,EAAU;IAAA,SAAAC,IAAA,GAAAf,SAAA,CAAAC,MAAA,EAANe,IAAI,OAAAC,KAAA,CAAAF,IAAA,GAAAG,IAAA,MAAAA,IAAA,GAAAH,IAAA,EAAAG,IAAA;MAAJF,IAAI,CAAAE,IAAA,IAAAlB,SAAA,CAAAkB,IAAA;IAAA;IAChB,IAAAC,MAAA,CAAAd,OAAA,EAAcK,sBAAW,CAACU,SAAS,CAACN,UAAU,EAAE,IAAI,EAAEE,IAAI,CAAC;EAC7D,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACEK,QAAQ,WAAAA,SAAA,EAAG;IAAA,IAAAC,KAAA;IACT,IAAI,CAAC,IAAI,CAACC,KAAK,CAACC,YAAY,EAAE;MAC5B,IAAI,CAACC,MAAM,CAACC,KAAK,CAAC,wEAAwE,CAAC;MAE3F,OAAOC,QAAA,CAAAtB,OAAA,CAAQuB,MAAM,CAAC,IAAIC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1D;IAEA,IAAI,IAAI,CAAChB,UAAU,EAAE;MACnB,IAAI,CAACY,MAAM,CAACK,IAAI,CAAC,qEAAqE,CAAC;MAEvF,OAAOH,QAAA,CAAAtB,OAAA,CAAQ0B,OAAO,CAAC,CAAC;IAC1B;IAEA,OAAO,IAAI,CAACR,KAAK,CAACS,QAAQ,CAACC,OAAO,CAC/BC,OAAO,CAAC,CAAC,CACTC,IAAI,CAAC,YAAM;MACVb,KAAI,CAACc,eAAe,CAAC,CAAC;MACtBd,KAAI,CAACe,OAAO,CAACC,kCAAuB,CAAC;MACrChB,KAAI,CAACT,UAAU,GAAG,IAAI;IACxB,CAAC,CAAC,CACD0B,KAAK,CAAC,UAACb,KAAK,EAAK;MAChBJ,KAAI,CAACG,MAAM,CAACC,KAAK,sDAAAc,MAAA,CAAsDd,KAAK,CAACe,OAAO,CAAE,CAAC;MAEvF,OAAOd,QAAA,CAAAtB,OAAA,CAAQuB,MAAM,CAACF,KAAK,CAAC;IAC9B,CAAC,CAAC;EACN,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACEgB,UAAU,WAAAA,WAAA,EAAG;IAAA,IAAAC,MAAA;IACX,IAAI,CAAC,IAAI,CAAC9B,UAAU,EAAE;MACpB,IAAI,CAACY,MAAM,CAACK,IAAI,CAAC,yEAAyE,CAAC;MAE3F,OAAOH,QAAA,CAAAtB,OAAA,CAAQ0B,OAAO,CAAC,CAAC;IAC1B;IAEA,IAAI,CAACa,sBAAsB,CAAC,CAAC;IAE7B,OAAO,IAAI,CAACrB,KAAK,CAACS,QAAQ,CAACC,OAAO,CAACY,UAAU,CAAC,CAAC,CAACV,IAAI,CAAC,YAAM;MACzDQ,MAAI,CAACN,OAAO,CAACS,oCAAyB,CAAC;MACvCH,MAAI,CAAC9B,UAAU,GAAG,KAAK;IACzB,CAAC,CAAC;EACJ,CAAC;EAED;AACF;AACA;AACA;AACA;EACEuB,eAAe,WAAAA,gBAAA,EAAG;IAAA,IAAAW,MAAA;IAChB,IAAI,CAACxB,KAAK,CAACS,QAAQ,CAACC,OAAO,CAACe,EAAE,CAACC,uCAA4B,EAAE,UAACC,QAAQ,EAAK;MACzEH,MAAI,CAACI,YAAY,CAACD,QAAQ,CAACE,IAAI,CAAC;IAClC,CAAC,CAAC;EACJ,CAAC;EAED;AACF;AACA;AACA;AACA;EACER,sBAAsB,WAAAA,uBAAA,EAAG;IACvB,IAAI,CAACrB,KAAK,CAACS,QAAQ,CAACC,OAAO,CAACoB,GAAG,CAACJ,uCAA4B,CAAC;EAC/D,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACEK,mBAAmB,WAAAA,oBAACC,SAAiB,EAAE;IACrC,UAAAf,MAAA,CAAUgB,8BAAmB,OAAAhB,MAAA,CAAIe,SAAS;EAC5C,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACEE,mBAAmB,WAAAA,oBAACF,SAAiB,EAAE;IACrC,UAAAf,MAAA,CAAUkB,8BAAmB,OAAAlB,MAAA,CAAIe,SAAS;EAC5C,CAAC;EAED;AACF;AACA;AACA;AACA;EACEJ,YAAY,WAAAA,aAACC,IAAI,EAAE;IACjB,IAAI,CAACf,OAAO,CAAC,IAAI,CAACiB,mBAAmB,CAACF,IAAI,CAACO,eAAe,CAAC,EAAEP,IAAI,CAAC;EACpE,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACQQ,YAAY,WAAAA,aAAAC,IAAA,EAA4B;IAAA,IAAAC,MAAA;IAAA,WAAAC,kBAAA,CAAA1D,OAAA,gBAAA2D,YAAA,CAAA3D,OAAA,CAAA4D,IAAA,UAAAC,QAAA;MAAA,IAAAC,KAAA,EAAAC,gBAAA,EAAAC,MAAA;MAAA,OAAAL,YAAA,CAAA3D,OAAA,CAAAiE,IAAA,UAAAC,SAAAC,QAAA;QAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;UAAA;YAA1BP,KAAK,GAAAN,IAAA,CAALM,KAAK,EAAEC,gBAAgB,GAAAP,IAAA,CAAhBO,gBAAgB;YAAAI,QAAA,CAAAE,IAAA;YAAA,OACpBZ,MAAI,CAACvC,KAAK,CAACS,QAAQ,CAAC2C,UAAU,CAACC,WAAW,CAACR,gBAAgB,EAAED,KAAK,CAAC;UAAA;YAAlFE,MAAM,GAAAG,QAAA,CAAAK,IAAA;YAAA,OAAAL,QAAA,CAAAM,MAAA,WAELT,MAAM;UAAA;UAAA;YAAA,OAAAG,QAAA,CAAAO,IAAA;QAAA;MAAA,GAAAb,OAAA;IAAA;EACf,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEc,QAAQ,WAAAA,SAACC,OAAuB,EAA4B;IAAA,IAAAC,MAAA;IAC1D,IAAOC,QAAQ,GAAsBF,OAAO,CAArCE,QAAQ;MAAEC,MAAM,GAAcH,OAAO,CAA3BG,MAAM;MAAEC,QAAQ,GAAIJ,OAAO,CAAnBI,QAAQ;IAEjC,IAAMC,OAAO,GAAG,IAAI,CAACC,MAAM,CAACC,cAAc;IAC1C,IAAMjC,SAAS,GAAGkC,aAAI,CAACC,EAAE,CAAC,CAAC;IAC3B,IAAMC,SAAS,GAAG,IAAI,CAACrC,mBAAmB,CAACC,SAAS,CAAC;IACrD,IAAMqC,eAAe,GAAG,IAAI,CAACnC,mBAAmB,CAACF,SAAS,CAAC;IAC3D,IAAIsC,mBAAmB,GAAG,EAAE;;IAE5B;IACA,OAAO,IAAAlE,QAAA,CAAAtB,OAAA,CAAY,UAAC0B,OAAO,EAAEH,MAAM,EAAK;MACtC,IAAMkE,KAAK,GAAG,IAAIC,mBAAK,CAAC,YAAM;QAC5Bb,MAAI,CAACc,aAAa,CAACd,MAAI,EAAES,SAAS,CAAC;QACnCT,MAAI,CAAC7C,OAAO,CAACuD,eAAe,EAAE;UAC5BrC,SAAS,EAATA,SAAS;UACT0C,QAAQ,EAAE,IAAI;UACdC,YAAY,EAAEC,8BAAmB,CAACC,oBAAoB;UACtDC,SAAS,EAAEC,mCAAwB,CAACF;QACtC,CAAC,CAAC;MACJ,CAAC,EAAEd,OAAO,CAAC;MAEXJ,MAAI,CAACqB,QAAQ,CAACrB,MAAI,EAAES,SAAS;QAAA,IAAAa,KAAA,OAAAzC,kBAAA,CAAA1D,OAAA,gBAAA2D,YAAA,CAAA3D,OAAA,CAAA4D,IAAA,CAAE,SAAAwC,SAAOrD,IAAI;UAAA,IAAAsD,UAAA,EAAAR,YAAA,EAAAG,SAAA,EAAAM,gBAAA,EAAAC,iBAAA;UAAA,OAAA5C,YAAA,CAAA3D,OAAA,CAAAiE,IAAA,UAAAuC,UAAAC,SAAA;YAAA,kBAAAA,SAAA,CAAArC,IAAA,GAAAqC,SAAA,CAAApC,IAAA;cAAA;gBACxCoB,KAAK,CAACiB,KAAK,CAAC,CAAC;gBACPL,UAAU,GAAG,IAAAM,WAAG,EAAC5D,IAAI,EAAEiC,QAAQ,EAAE,EAAE,CAAC;gBACpCa,YAAY,GAAG,IAAAc,WAAG,EAAC5D,IAAI,EAAE,uBAAuB,CAAC;gBACjDiD,SAAS,GAAG,IAAAW,WAAG,EAAC5D,IAAI,EAAE,oBAAoB,CAAC;gBAAA,KAE7CA,IAAI,CAAC6C,QAAQ;kBAAAa,SAAA,CAAApC,IAAA;kBAAA;gBAAA;gBACf;gBACAoB,KAAK,CAACmB,MAAM,CAAC,CAAC;gBAACH,SAAA,CAAArC,IAAA;gBAAA,MAITiC,UAAU,aAAVA,UAAU,eAAVA,UAAU,CAAEvC,KAAK;kBAAA2C,SAAA,CAAApC,IAAA;kBAAA;gBAAA;gBAAAoC,SAAA,CAAApC,IAAA;gBAAA,OACMQ,MAAI,CAACtB,YAAY,CAAC8C,UAAU,CAAC;cAAA;gBAAtDC,gBAAgB,GAAAG,SAAA,CAAAjC,IAAA;cAAA;gBAGlB;gBACAK,MAAI,CAAC7C,OAAO,CAACuD,eAAe,EAAE;kBAC5BnD,OAAO,EAAEkE,gBAAgB,IAAI,EAAE;kBAC/BpD,SAAS,EAATA,SAAS;kBACT0C,QAAQ,EAAE,IAAI;kBACdC,YAAY,EAAZA,YAAY;kBACZG,SAAS,EAATA;gBACF,CAAC,CAAC;gBAEFnB,MAAI,CAACc,aAAa,CAACd,MAAI,EAAES,SAAS,CAAC;gBAACmB,SAAA,CAAApC,IAAA;gBAAA;cAAA;gBAAAoC,SAAA,CAAArC,IAAA;gBAAAqC,SAAA,CAAAI,EAAA,GAAAJ,SAAA;gBAEpC5B,MAAI,CAAC7C,OAAO,CAACuD,eAAe,EAAE;kBAC5BnD,OAAO,EAAEoD,mBAAmB;kBAC5BtC,SAAS,EAATA,SAAS;kBACT0C,QAAQ,EAAE,IAAI;kBACdC,YAAY,EAAEA,YAAY,IAAIY,SAAA,CAAAI,EAAA,CAAazE,OAAO;kBAClD4D,SAAS,EAATA;gBACF,CAAC,CAAC;cAAC;gBAAAS,SAAA,CAAApC,IAAA;gBAAA;cAAA;gBAAAoC,SAAA,CAAArC,IAAA;gBAKCkC,iBAAgB,GAAG,EAAE;gBAAA,MACrBD,UAAU,aAAVA,UAAU,eAAVA,UAAU,CAAEvC,KAAK;kBAAA2C,SAAA,CAAApC,IAAA;kBAAA;gBAAA;gBAAAoC,SAAA,CAAApC,IAAA;gBAAA,OACMQ,MAAI,CAACtB,YAAY,CAAC8C,UAAU,CAAC;cAAA;gBAAtDC,iBAAgB,GAAAG,SAAA,CAAAjC,IAAA;cAAA;gBAGlBgB,mBAAmB,IAAIc,iBAAgB;;gBAEvC;gBACAzB,MAAI,CAAC7C,OAAO,CAACuD,eAAe,EAAE;kBAC5BnD,OAAO,EAAEoD,mBAAmB;kBAC5BtC,SAAS,EAATA,SAAS;kBACT0C,QAAQ,EAAE,KAAK;kBACfC,YAAY,EAAZA,YAAY;kBACZG,SAAS,EAATA;gBACF,CAAC,CAAC;gBAACS,SAAA,CAAApC,IAAA;gBAAA;cAAA;gBAAAoC,SAAA,CAAArC,IAAA;gBAAAqC,SAAA,CAAAK,EAAA,GAAAL,SAAA;gBAEH;gBACA5B,MAAI,CAAC7C,OAAO,CAACuD,eAAe,EAAE;kBAC5BnD,OAAO,EAAEoD,mBAAmB;kBAC5BtC,SAAS,EAATA,SAAS;kBACT0C,QAAQ,EAAE,KAAK;kBACfC,YAAY,EAAEA,YAAY,IAAIY,SAAA,CAAAK,EAAA,CAAa1E,OAAO;kBAClD4D,SAAS,EAATA;gBACF,CAAC,CAAC;cAAC;cAAA;gBAAA,OAAAS,SAAA,CAAA/B,IAAA;YAAA;UAAA,GAAA0B,QAAA;QAAA,CAGR;QAAA,iBAAAW,EAAA;UAAA,OAAAZ,KAAA,CAAA1G,KAAA,OAAAE,SAAA;QAAA;MAAA,IAAC;MAEFkF,MAAI,CAAC3D,KAAK,CACP8F,OAAO,CAAC;QACPC,OAAO,EAAEC,oCAAyB;QAClCpC,QAAQ,EAARA,QAAQ;QACRqC,MAAM,EAAE,MAAM;QACdC,WAAW,EAAE,kBAAkB;QAC/BC,IAAI,EAAA3H,aAAA;UAAG4D,eAAe,EAAEJ;QAAS,GAAK6B,MAAM;MAC9C,CAAC,CAAC,CACD7C,KAAK,CAAC,UAACb,KAAK,EAAK;QAChBE,MAAM,CAACF,KAAK,CAAC;MACf,CAAC,CAAC,CACDS,IAAI,CAAC,UAAAwF,KAAA,EAAY;QAAA,IAAVD,IAAI,GAAAC,KAAA,CAAJD,IAAI;QACV,IAAOE,SAAS,GAAIF,IAAI,CAAjBE,SAAS;QAEhB7F,OAAO,CAAC;UACNwB,SAAS,EAATA,SAAS;UACTqE,SAAS,EAATA,SAAS;UACThC,eAAe,EAAfA;QACF,CAAC,CAAC;QACFE,KAAK,CAAC+B,KAAK,CAAC,CAAC;MACf,CAAC,CAAC;IACN,CAAC,CAAC;EACJ,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACQC,mBAAmB,WAAAA,oBAAC7C,OAAkC,EAA4B;IAAA,IAAA8C,MAAA;IAAA,WAAAhE,kBAAA,CAAA1D,OAAA,gBAAA2D,YAAA,CAAA3D,OAAA,CAAA4D,IAAA,UAAA+D,SAAA;MAAA,IAAA7D,KAAA,EAAA8D,OAAA;MAAA,OAAAjE,YAAA,CAAA3D,OAAA,CAAAiE,IAAA,UAAA4D,UAAAC,SAAA;QAAA,kBAAAA,SAAA,CAAA1D,IAAA,GAAA0D,SAAA,CAAAzD,IAAA;UAAA;YAClFP,KAAK,GAAGc,OAAO,CAACmD,YAAY;YAAA,MAE5BnD,OAAO,CAACwC,WAAW,KAAK,SAAS;cAAAU,SAAA,CAAAzD,IAAA;cAAA;YAAA;YAAAyD,SAAA,CAAAzD,IAAA;YAAA,OACrBqD,MAAI,CAACM,YAAY,CAAC;cAC9BC,IAAI,EAAErD,OAAO,CAACmD,YAAY;cAC1BhE,gBAAgB,EAAEa,OAAO,CAACb;YAC5B,CAAC,CAAC;UAAA;YAHFD,KAAK,GAAAgE,SAAA,CAAAtD,IAAA;UAAA;YAMDoD,OAAY,GAAG;cACnBM,OAAO,EAAE;gBACPC,SAAS,EAAEvD,OAAO,CAACwD;cACrB,CAAC;cACDrE,gBAAgB,EAAEa,OAAO,CAACb,gBAAgB;cAC1CsE,IAAI,EAAEzD,OAAO,CAACwC,WAAW;cACzBtD,KAAK,EAALA;YACF,CAAC;YAED,IAAIc,OAAO,CAACwC,WAAW,KAAK,QAAQ,IAAIxC,OAAO,CAAC0D,UAAU,EAAE;cAC1DV,OAAO,CAACU,UAAU,GAAG1D,OAAO,CAAC0D,UAAU;YACzC;YAAC,OAAAR,SAAA,CAAArD,MAAA,WAEMiD,MAAI,CAAC/C,QAAQ,CAAC;cACnBG,QAAQ,EAAEF,OAAO,CAAC2C,SAAS,eAAApF,MAAA,CAAeyC,OAAO,CAAC2C,SAAS,iBAAc,mBAAmB;cAC5FvC,QAAQ,EAAE,kBAAkB;cAC5BD,MAAM,EAAArF,aAAA;gBACJ6I,KAAK,EAAE,SAAS;gBAChBC,MAAM,EAAE5D,OAAO,CAAC4D,MAAM,IAAI,OAAO;gBACjCZ,OAAO,EAAPA;cAAO,GACHhD,OAAO,CAAC6D,SAAS,GAAG;gBAACA,SAAS,EAAE7D,OAAO,CAAC6D;cAAS,CAAC,GAAG,CAAC,CAAC;YAE/D,CAAC,CAAC;UAAA;UAAA;YAAA,OAAAX,SAAA,CAAApD,IAAA;QAAA;MAAA,GAAAiD,QAAA;IAAA;EACJ,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEe,gBAAgB,WAAAA,iBAAC9D,OAAgC,EAA4B;IAC3E,OAAO,IAAI,CAAC6C,mBAAmB,CAAA/H,aAAA,CAAAA,aAAA,KAC1BkF,OAAO;MACVwC,WAAW,EAAEuB,wBAAa,CAACC,MAAM;MACjCb,YAAY,EAAEc,uBAAY,CAACC,gBAAgB;MAC3CV,gBAAgB,EAAE,CAChB;QACEW,EAAE,EAAEnE,OAAO,CAACoE,iBAAiB;QAC7BX,IAAI,EAAEY,iCAAsB,CAACC,OAAO;QACpCC,GAAG,EAAEvE,OAAO,CAACwE;MACf,CAAC;IACF,GACGxE,OAAO,CAACyE,WAAW,GAAG;MAACf,UAAU,EAAE;QAACe,WAAW,EAAEzE,OAAO,CAACyE;MAAW;IAAC,CAAC,GAAG,CAAC,CAAC,CAChF,CAAC;EACJ,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,kBAAkB,WAAAA,mBAAC1E,OAAgC,EAA4B;IAC7E,OAAO,IAAI,CAAC6C,mBAAmB,CAAA/H,aAAA,CAAAA,aAAA,KAC1BkF,OAAO;MACVwD,gBAAgB,EAAE,CAChB;QACEW,EAAE,EAAEnE,OAAO,CAACoE,iBAAiB;QAC7BX,IAAI,EAAEY,iCAAsB,CAACC,OAAO;QACpCC,GAAG,EAAEvE,OAAO,CAACwE;MACf,CAAC,CACF;MACDhC,WAAW,EAAEuB,wBAAa,CAACC,MAAM;MACjCb,YAAY,EAAEc,uBAAY,CAACU;IAAqB,EACjD,CAAC;EACJ,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,kBAAkB,WAAAA,mBAAC5E,OAAgC,EAA4B;IAC7E,OAAO,IAAI,CAAC6C,mBAAmB,CAAA/H,aAAA,CAAAA,aAAA,KAC1BkF,OAAO;MACVwD,gBAAgB,EAAE,CAChB;QACEW,EAAE,EAAEnE,OAAO,CAACoE,iBAAiB;QAC7BX,IAAI,EAAEY,iCAAsB,CAACC,OAAO;QACpCC,GAAG,EAAEvE,OAAO,CAACwE;MACf,CAAC,CACF;MACDhC,WAAW,EAAEuB,wBAAa,CAACC,MAAM;MACjCb,YAAY,EAAEc,uBAAY,CAACY;IAAqB,EACjD,CAAC;EACJ,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACQzB,YAAY,WAAAA,aAAA0B,KAAA,EAA2B;IAAA,IAAAC,MAAA;IAAA,WAAAjG,kBAAA,CAAA1D,OAAA,gBAAA2D,YAAA,CAAA3D,OAAA,CAAA4D,IAAA,UAAAgG,SAAA;MAAA,IAAA3B,IAAA,EAAAlE,gBAAA,EAAAC,MAAA;MAAA,OAAAL,YAAA,CAAA3D,OAAA,CAAAiE,IAAA,UAAA4F,UAAAC,SAAA;QAAA,kBAAAA,SAAA,CAAA1F,IAAA,GAAA0F,SAAA,CAAAzF,IAAA;UAAA;YAAzB4D,IAAI,GAAAyB,KAAA,CAAJzB,IAAI,EAAElE,gBAAgB,GAAA2F,KAAA,CAAhB3F,gBAAgB;YAAA+F,SAAA,CAAAzF,IAAA;YAAA,OACnBsF,MAAI,CAACzI,KAAK,CAACS,QAAQ,CAAC2C,UAAU,CAACyF,WAAW,CAAChG,gBAAgB,EAAEkE,IAAI,CAAC;UAAA;YAAjFjE,MAAM,GAAA8F,SAAA,CAAAtF,IAAA;YAAA,OAAAsF,SAAA,CAAArF,MAAA,WAELT,MAAM;UAAA;UAAA;YAAA,OAAA8F,SAAA,CAAApF,IAAA;QAAA;MAAA,GAAAkF,QAAA;IAAA;EACf,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEI,aAAa,WAAAA,cAACpF,OAAqD,EAA4B;IAC7F,OAAO,IAAI,CAAC6C,mBAAmB,CAAA/H,aAAA,CAAAA,aAAA,KAC1BkF,OAAO;MACVwD,gBAAgB,EAAE,CAChB;QACEW,EAAE,EAAEnE,OAAO,CAACoE,iBAAiB;QAC7BX,IAAI,EAAEY,iCAAsB,CAACC,OAAO;QACpCC,GAAG,EAAEvE,OAAO,CAACwE;MACf,CAAC,CACF;MACDhC,WAAW,EAAEuB,wBAAa,CAACsB,OAAO;MAClClC,YAAY,EAAEnD,OAAO,CAACsF;IAAQ,EAC/B,CAAC;EACJ,CAAC;EAAAC,OAAA;AACH,CAAC,CAAC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAArK,OAAA,GAEYI,WAAW"}
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":[]}
package/dist/config.js CHANGED
@@ -14,7 +14,7 @@ var _default = exports.default = {
14
14
  * Timeout before AI Assistant request fails, in milliseconds.
15
15
  * @type {Number}
16
16
  */
17
- requestTimeout: 6000
17
+ requestTimeout: 60000
18
18
  }
19
19
  };
20
20
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_default","exports","default","aiassistant","requestTimeout"],"sources":["config.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2025 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport default {\n aiassistant: {\n /**\n * Timeout before AI Assistant request fails, in milliseconds.\n * @type {Number}\n */\n requestTimeout: 6000,\n },\n};\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AAFA,IAAAA,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAIe;EACbC,WAAW,EAAE;IACX;AACJ;AACA;AACA;IACIC,cAAc,EAAE;EAClB;AACF,CAAC"}
1
+ {"version":3,"names":["_default","exports","default","aiassistant","requestTimeout"],"sources":["config.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2025 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport default {\n aiassistant: {\n /**\n * Timeout before AI Assistant request fails, in milliseconds.\n * @type {Number}\n */\n requestTimeout: 60000,\n },\n};\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AAFA,IAAAA,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAIe;EACbC,WAAW,EAAE;IACX;AACJ;AACA;AACA;IACIC,cAAc,EAAE;EAClB;AACF,CAAC","ignoreList":[]}