@webex/internal-plugin-call-ai-summary 0.0.0-next.1
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/.eslintrc.js +6 -0
- package/README.md +257 -0
- package/ai-docs/AGENTS.md +300 -0
- package/ai-docs/ARCHITECTURE.md +1189 -0
- package/babel.config.js +3 -0
- package/dist/ai-summary.js +418 -0
- package/dist/ai-summary.js.map +1 -0
- package/dist/config.js +14 -0
- package/dist/config.js.map +1 -0
- package/dist/constants.js +25 -0
- package/dist/constants.js.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/manual-integration-test.js +154 -0
- package/dist/manual-integration-test.js.map +1 -0
- package/dist/manual-pragya-api-test.js +176 -0
- package/dist/manual-pragya-api-test.js.map +1 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- package/jest.config.js +3 -0
- package/package.json +47 -0
- package/src/ai-summary.ts +318 -0
- package/src/config.ts +7 -0
- package/src/constants.ts +19 -0
- package/src/index.ts +13 -0
- package/src/manual-integration-test.js +129 -0
- package/src/manual-pragya-api-test.js +166 -0
- package/src/types.ts +154 -0
package/babel.config.js
ADDED
|
@@ -0,0 +1,418 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
5
|
+
_Object$defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
|
|
10
|
+
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
11
|
+
var _isArray = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/array/is-array"));
|
|
12
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
|
|
13
|
+
var _webexCore = require("@webex/webex-core");
|
|
14
|
+
var _constants = require("./constants");
|
|
15
|
+
/*!
|
|
16
|
+
* Copyright (c) 2015-2025 Cisco Systems, Inc. See LICENSE file.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
var AISummary = _webexCore.WebexPlugin.extend({
|
|
20
|
+
namespace: 'AISummary',
|
|
21
|
+
/**
|
|
22
|
+
* Resolve a Pragya container by ID.
|
|
23
|
+
* Returns container metadata including summary URLs and encryption key.
|
|
24
|
+
*
|
|
25
|
+
* @param {GetContainerOptions} options
|
|
26
|
+
* @returns {Promise<PragyaContainerResponse>}
|
|
27
|
+
*/
|
|
28
|
+
getContainer: function getContainer(options) {
|
|
29
|
+
var _this = this;
|
|
30
|
+
var containerId = options.containerId;
|
|
31
|
+
this._validateContainerId(containerId);
|
|
32
|
+
return this.webex.request({
|
|
33
|
+
method: 'GET',
|
|
34
|
+
service: _constants.AI_SUMMARY_SERVICE,
|
|
35
|
+
resource: "".concat(_constants.AI_SUMMARY_CONTAINERS_RESOURCE, "/").concat(containerId)
|
|
36
|
+
}).then(function (_ref) {
|
|
37
|
+
var _body$summaryData;
|
|
38
|
+
var body = _ref.body;
|
|
39
|
+
// Pragya API nests summary URLs under summaryData.data — flatten
|
|
40
|
+
// so consumers can access summaryData.summaryUrl directly.
|
|
41
|
+
if ((_body$summaryData = body.summaryData) !== null && _body$summaryData !== void 0 && _body$summaryData.data) {
|
|
42
|
+
body.summaryData = body.summaryData.data;
|
|
43
|
+
}
|
|
44
|
+
return body;
|
|
45
|
+
}).catch(function (error) {
|
|
46
|
+
_this.logger.error('AISummary->getContainer failed', {
|
|
47
|
+
error: error,
|
|
48
|
+
containerId: containerId
|
|
49
|
+
});
|
|
50
|
+
throw _this._handleError(error, 'getContainer');
|
|
51
|
+
});
|
|
52
|
+
},
|
|
53
|
+
/**
|
|
54
|
+
* Get AI-generated full summary for a call.
|
|
55
|
+
* Fetches from containerInfo.summaryData.summaryUrl and decrypts content.
|
|
56
|
+
*
|
|
57
|
+
* @param {GetSummaryContentOptions} options
|
|
58
|
+
* @returns {Promise<SummaryContent>}
|
|
59
|
+
*/
|
|
60
|
+
getSummary: function getSummary(options) {
|
|
61
|
+
var _this2 = this;
|
|
62
|
+
return (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee2() {
|
|
63
|
+
var containerInfo, _body$actionitems, _yield$_this2$webex$r, body, keyUrl, decryptedNote, decryptedShortNote, decryptedSnippets, feedbackLink, _t;
|
|
64
|
+
return _regenerator.default.wrap(function (_context2) {
|
|
65
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
66
|
+
case 0:
|
|
67
|
+
containerInfo = options.containerInfo;
|
|
68
|
+
_this2._validateContainerInfo(containerInfo, 'summaryUrl');
|
|
69
|
+
_context2.prev = 1;
|
|
70
|
+
_context2.next = 2;
|
|
71
|
+
return _this2.webex.request({
|
|
72
|
+
method: 'GET',
|
|
73
|
+
uri: "".concat(containerInfo.summaryData.summaryUrl, "?fields=note,shortnote,actionitems")
|
|
74
|
+
});
|
|
75
|
+
case 2:
|
|
76
|
+
_yield$_this2$webex$r = _context2.sent;
|
|
77
|
+
body = _yield$_this2$webex$r.body;
|
|
78
|
+
keyUrl = body.keyUrl || containerInfo.encryptionKeyUrl;
|
|
79
|
+
_context2.next = 3;
|
|
80
|
+
return _this2._decryptContent(body.note.aiGeneratedContent, keyUrl);
|
|
81
|
+
case 3:
|
|
82
|
+
decryptedNote = _context2.sent;
|
|
83
|
+
_context2.next = 4;
|
|
84
|
+
return _this2._decryptContent(body.shortnote.aiGeneratedContent, keyUrl);
|
|
85
|
+
case 4:
|
|
86
|
+
decryptedShortNote = _context2.sent;
|
|
87
|
+
_context2.next = 5;
|
|
88
|
+
return _promise.default.all((((_body$actionitems = body.actionitems) === null || _body$actionitems === void 0 ? void 0 : _body$actionitems.snippets) || []).map(/*#__PURE__*/function () {
|
|
89
|
+
var _ref2 = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee(snippet) {
|
|
90
|
+
var decryptedAiContent;
|
|
91
|
+
return _regenerator.default.wrap(function (_context) {
|
|
92
|
+
while (1) switch (_context.prev = _context.next) {
|
|
93
|
+
case 0:
|
|
94
|
+
_context.next = 1;
|
|
95
|
+
return _this2._decryptContent(snippet.aiGeneratedContent, keyUrl);
|
|
96
|
+
case 1:
|
|
97
|
+
decryptedAiContent = _context.sent;
|
|
98
|
+
return _context.abrupt("return", {
|
|
99
|
+
id: snippet.id,
|
|
100
|
+
editedContent: snippet.content || undefined,
|
|
101
|
+
aiGeneratedContent: decryptedAiContent
|
|
102
|
+
});
|
|
103
|
+
case 2:
|
|
104
|
+
case "end":
|
|
105
|
+
return _context.stop();
|
|
106
|
+
}
|
|
107
|
+
}, _callee);
|
|
108
|
+
}));
|
|
109
|
+
return function (_x) {
|
|
110
|
+
return _ref2.apply(this, arguments);
|
|
111
|
+
};
|
|
112
|
+
}()));
|
|
113
|
+
case 5:
|
|
114
|
+
decryptedSnippets = _context2.sent;
|
|
115
|
+
// feedbackUrl may be in the links array as rel="feedback"
|
|
116
|
+
feedbackLink = (body.links || []).find(function (link) {
|
|
117
|
+
return link.rel === 'feedback';
|
|
118
|
+
});
|
|
119
|
+
return _context2.abrupt("return", {
|
|
120
|
+
id: body.id,
|
|
121
|
+
note: decryptedNote,
|
|
122
|
+
shortNote: decryptedShortNote,
|
|
123
|
+
actionItems: decryptedSnippets,
|
|
124
|
+
feedbackUrl: feedbackLink === null || feedbackLink === void 0 ? void 0 : feedbackLink.href
|
|
125
|
+
});
|
|
126
|
+
case 6:
|
|
127
|
+
_context2.prev = 6;
|
|
128
|
+
_t = _context2["catch"](1);
|
|
129
|
+
_this2.logger.error('AISummary->getSummary failed', {
|
|
130
|
+
error: _t
|
|
131
|
+
});
|
|
132
|
+
throw _this2._handleError(_t, 'getSummary');
|
|
133
|
+
case 7:
|
|
134
|
+
case "end":
|
|
135
|
+
return _context2.stop();
|
|
136
|
+
}
|
|
137
|
+
}, _callee2, null, [[1, 6]]);
|
|
138
|
+
}))();
|
|
139
|
+
},
|
|
140
|
+
/**
|
|
141
|
+
* Get AI-generated notes for a call.
|
|
142
|
+
* Fetches from containerInfo.summaryData.notesUrl and decrypts content.
|
|
143
|
+
*
|
|
144
|
+
* @param {GetSummaryContentOptions} options
|
|
145
|
+
* @returns {Promise<SummaryNotes>}
|
|
146
|
+
*/
|
|
147
|
+
getNotes: function getNotes(options) {
|
|
148
|
+
var _this3 = this;
|
|
149
|
+
return (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee3() {
|
|
150
|
+
var containerInfo, _yield$_this3$webex$r, body, keyUrl, decryptedContent, _t2;
|
|
151
|
+
return _regenerator.default.wrap(function (_context3) {
|
|
152
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
153
|
+
case 0:
|
|
154
|
+
containerInfo = options.containerInfo;
|
|
155
|
+
_this3._validateContainerInfo(containerInfo, 'notesUrl');
|
|
156
|
+
_context3.prev = 1;
|
|
157
|
+
_context3.next = 2;
|
|
158
|
+
return _this3.webex.request({
|
|
159
|
+
method: 'GET',
|
|
160
|
+
uri: containerInfo.summaryData.notesUrl
|
|
161
|
+
});
|
|
162
|
+
case 2:
|
|
163
|
+
_yield$_this3$webex$r = _context3.sent;
|
|
164
|
+
body = _yield$_this3$webex$r.body;
|
|
165
|
+
keyUrl = body.keyUrl || containerInfo.encryptionKeyUrl;
|
|
166
|
+
_context3.next = 3;
|
|
167
|
+
return _this3._decryptContent(body.aiGeneratedContent, keyUrl);
|
|
168
|
+
case 3:
|
|
169
|
+
decryptedContent = _context3.sent;
|
|
170
|
+
return _context3.abrupt("return", {
|
|
171
|
+
id: body.id,
|
|
172
|
+
content: decryptedContent,
|
|
173
|
+
feedbackUrl: body.feedbackUrl
|
|
174
|
+
});
|
|
175
|
+
case 4:
|
|
176
|
+
_context3.prev = 4;
|
|
177
|
+
_t2 = _context3["catch"](1);
|
|
178
|
+
_this3.logger.error('AISummary->getNotes failed', {
|
|
179
|
+
error: _t2
|
|
180
|
+
});
|
|
181
|
+
throw _this3._handleError(_t2, 'getNotes');
|
|
182
|
+
case 5:
|
|
183
|
+
case "end":
|
|
184
|
+
return _context3.stop();
|
|
185
|
+
}
|
|
186
|
+
}, _callee3, null, [[1, 4]]);
|
|
187
|
+
}))();
|
|
188
|
+
},
|
|
189
|
+
/**
|
|
190
|
+
* Get AI-generated action items for a call.
|
|
191
|
+
* Fetches from containerInfo.summaryData.actionItemsUrl and decrypts content.
|
|
192
|
+
*
|
|
193
|
+
* @param {GetSummaryContentOptions} options
|
|
194
|
+
* @returns {Promise<SummaryActionItems>}
|
|
195
|
+
*/
|
|
196
|
+
getActionItems: function getActionItems(options) {
|
|
197
|
+
var _this4 = this;
|
|
198
|
+
return (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee5() {
|
|
199
|
+
var containerInfo, _yield$_this4$webex$r, body, actionItemsData, keyUrl, decryptedSnippets, _t3;
|
|
200
|
+
return _regenerator.default.wrap(function (_context5) {
|
|
201
|
+
while (1) switch (_context5.prev = _context5.next) {
|
|
202
|
+
case 0:
|
|
203
|
+
containerInfo = options.containerInfo;
|
|
204
|
+
_this4._validateContainerInfo(containerInfo, 'actionItemsUrl');
|
|
205
|
+
_context5.prev = 1;
|
|
206
|
+
_context5.next = 2;
|
|
207
|
+
return _this4.webex.request({
|
|
208
|
+
method: 'GET',
|
|
209
|
+
uri: containerInfo.summaryData.actionItemsUrl
|
|
210
|
+
});
|
|
211
|
+
case 2:
|
|
212
|
+
_yield$_this4$webex$r = _context5.sent;
|
|
213
|
+
body = _yield$_this4$webex$r.body;
|
|
214
|
+
// Action items response is an array; take the first element
|
|
215
|
+
actionItemsData = (0, _isArray.default)(body) ? body[0] : body;
|
|
216
|
+
if (actionItemsData) {
|
|
217
|
+
_context5.next = 3;
|
|
218
|
+
break;
|
|
219
|
+
}
|
|
220
|
+
return _context5.abrupt("return", {
|
|
221
|
+
id: undefined,
|
|
222
|
+
snippets: []
|
|
223
|
+
});
|
|
224
|
+
case 3:
|
|
225
|
+
keyUrl = actionItemsData.keyUrl || containerInfo.encryptionKeyUrl;
|
|
226
|
+
_context5.next = 4;
|
|
227
|
+
return _promise.default.all((actionItemsData.snippets || []).map(/*#__PURE__*/function () {
|
|
228
|
+
var _ref3 = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee4(snippet) {
|
|
229
|
+
var decryptedAiContent;
|
|
230
|
+
return _regenerator.default.wrap(function (_context4) {
|
|
231
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
232
|
+
case 0:
|
|
233
|
+
_context4.next = 1;
|
|
234
|
+
return _this4._decryptContent(snippet.aiGeneratedContent, keyUrl);
|
|
235
|
+
case 1:
|
|
236
|
+
decryptedAiContent = _context4.sent;
|
|
237
|
+
return _context4.abrupt("return", {
|
|
238
|
+
id: snippet.id,
|
|
239
|
+
editedContent: snippet.content || undefined,
|
|
240
|
+
aiGeneratedContent: decryptedAiContent
|
|
241
|
+
});
|
|
242
|
+
case 2:
|
|
243
|
+
case "end":
|
|
244
|
+
return _context4.stop();
|
|
245
|
+
}
|
|
246
|
+
}, _callee4);
|
|
247
|
+
}));
|
|
248
|
+
return function (_x2) {
|
|
249
|
+
return _ref3.apply(this, arguments);
|
|
250
|
+
};
|
|
251
|
+
}()));
|
|
252
|
+
case 4:
|
|
253
|
+
decryptedSnippets = _context5.sent;
|
|
254
|
+
return _context5.abrupt("return", {
|
|
255
|
+
id: actionItemsData.id,
|
|
256
|
+
snippets: decryptedSnippets,
|
|
257
|
+
feedbackUrl: actionItemsData.feedbackUrl
|
|
258
|
+
});
|
|
259
|
+
case 5:
|
|
260
|
+
_context5.prev = 5;
|
|
261
|
+
_t3 = _context5["catch"](1);
|
|
262
|
+
_this4.logger.error('AISummary->getActionItems failed', {
|
|
263
|
+
error: _t3
|
|
264
|
+
});
|
|
265
|
+
throw _this4._handleError(_t3, 'getActionItems');
|
|
266
|
+
case 6:
|
|
267
|
+
case "end":
|
|
268
|
+
return _context5.stop();
|
|
269
|
+
}
|
|
270
|
+
}, _callee5, null, [[1, 5]]);
|
|
271
|
+
}))();
|
|
272
|
+
},
|
|
273
|
+
/**
|
|
274
|
+
* Get the transcript URL for a call.
|
|
275
|
+
* Returns the URL string from the container info.
|
|
276
|
+
*
|
|
277
|
+
* @param {GetSummaryContentOptions} options
|
|
278
|
+
* @returns {string}
|
|
279
|
+
*/
|
|
280
|
+
getTranscriptUrl: function getTranscriptUrl(options) {
|
|
281
|
+
var containerInfo = options.containerInfo;
|
|
282
|
+
this._validateContainerInfo(containerInfo, 'transcriptUrl');
|
|
283
|
+
return containerInfo.summaryData.transcriptUrl;
|
|
284
|
+
},
|
|
285
|
+
/**
|
|
286
|
+
* Get decrypted transcript for a call.
|
|
287
|
+
* Fetches from containerInfo.summaryData.transcriptUrl and decrypts each snippet.
|
|
288
|
+
*
|
|
289
|
+
* @param {GetSummaryContentOptions} options
|
|
290
|
+
* @returns {Promise<TranscriptContent>}
|
|
291
|
+
*/
|
|
292
|
+
getTranscript: function getTranscript(options) {
|
|
293
|
+
var _this5 = this;
|
|
294
|
+
return (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee7() {
|
|
295
|
+
var containerInfo, _yield$_this5$webex$r, body, keyUrl, decryptedSnippets, _t4;
|
|
296
|
+
return _regenerator.default.wrap(function (_context7) {
|
|
297
|
+
while (1) switch (_context7.prev = _context7.next) {
|
|
298
|
+
case 0:
|
|
299
|
+
containerInfo = options.containerInfo;
|
|
300
|
+
_this5._validateContainerInfo(containerInfo, 'transcriptUrl');
|
|
301
|
+
_context7.prev = 1;
|
|
302
|
+
_context7.next = 2;
|
|
303
|
+
return _this5.webex.request({
|
|
304
|
+
method: 'GET',
|
|
305
|
+
uri: containerInfo.summaryData.transcriptUrl
|
|
306
|
+
});
|
|
307
|
+
case 2:
|
|
308
|
+
_yield$_this5$webex$r = _context7.sent;
|
|
309
|
+
body = _yield$_this5$webex$r.body;
|
|
310
|
+
keyUrl = body.keyUrl || containerInfo.encryptionKeyUrl;
|
|
311
|
+
_context7.next = 3;
|
|
312
|
+
return _promise.default.all((body.transcriptSnippetList || []).map(/*#__PURE__*/function () {
|
|
313
|
+
var _ref4 = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee6(snippet) {
|
|
314
|
+
var decryptedContent;
|
|
315
|
+
return _regenerator.default.wrap(function (_context6) {
|
|
316
|
+
while (1) switch (_context6.prev = _context6.next) {
|
|
317
|
+
case 0:
|
|
318
|
+
_context6.next = 1;
|
|
319
|
+
return _this5._decryptContent(snippet.content, keyUrl);
|
|
320
|
+
case 1:
|
|
321
|
+
decryptedContent = _context6.sent;
|
|
322
|
+
return _context6.abrupt("return", {
|
|
323
|
+
startTime: snippet.startTime,
|
|
324
|
+
endTime: snippet.endTime,
|
|
325
|
+
content: decryptedContent,
|
|
326
|
+
audioCSI: snippet.audioCSI,
|
|
327
|
+
speaker: snippet.speaker
|
|
328
|
+
});
|
|
329
|
+
case 2:
|
|
330
|
+
case "end":
|
|
331
|
+
return _context6.stop();
|
|
332
|
+
}
|
|
333
|
+
}, _callee6);
|
|
334
|
+
}));
|
|
335
|
+
return function (_x3) {
|
|
336
|
+
return _ref4.apply(this, arguments);
|
|
337
|
+
};
|
|
338
|
+
}()));
|
|
339
|
+
case 3:
|
|
340
|
+
decryptedSnippets = _context7.sent;
|
|
341
|
+
return _context7.abrupt("return", {
|
|
342
|
+
id: body.id,
|
|
343
|
+
totalCount: body.totalCount,
|
|
344
|
+
snippets: decryptedSnippets
|
|
345
|
+
});
|
|
346
|
+
case 4:
|
|
347
|
+
_context7.prev = 4;
|
|
348
|
+
_t4 = _context7["catch"](1);
|
|
349
|
+
_this5.logger.error('AISummary->getTranscript failed', {
|
|
350
|
+
error: _t4
|
|
351
|
+
});
|
|
352
|
+
throw _this5._handleError(_t4, 'getTranscript');
|
|
353
|
+
case 5:
|
|
354
|
+
case "end":
|
|
355
|
+
return _context7.stop();
|
|
356
|
+
}
|
|
357
|
+
}, _callee7, null, [[1, 4]]);
|
|
358
|
+
}))();
|
|
359
|
+
},
|
|
360
|
+
/**
|
|
361
|
+
* Validate containerId parameter.
|
|
362
|
+
* @param {string} containerId - The container ID to validate.
|
|
363
|
+
* @returns {void}
|
|
364
|
+
* @private
|
|
365
|
+
*/
|
|
366
|
+
_validateContainerId: function _validateContainerId(containerId) {
|
|
367
|
+
if (!containerId || typeof containerId !== 'string' || containerId.trim().length === 0) {
|
|
368
|
+
throw new Error(_constants.ERROR_MESSAGES.INVALID_CONTAINER_ID);
|
|
369
|
+
}
|
|
370
|
+
},
|
|
371
|
+
/**
|
|
372
|
+
* Validate containerInfo has the required URL field and encryption key.
|
|
373
|
+
* @param {PragyaContainerResponse} containerInfo - The container info to validate.
|
|
374
|
+
* @param {string} urlField - The summaryData field name to check.
|
|
375
|
+
* @returns {void}
|
|
376
|
+
* @private
|
|
377
|
+
*/
|
|
378
|
+
_validateContainerInfo: function _validateContainerInfo(containerInfo, urlField) {
|
|
379
|
+
var _containerInfo$summar;
|
|
380
|
+
if (!(containerInfo !== null && containerInfo !== void 0 && (_containerInfo$summar = containerInfo.summaryData) !== null && _containerInfo$summar !== void 0 && _containerInfo$summar[urlField]) || !(containerInfo !== null && containerInfo !== void 0 && containerInfo.encryptionKeyUrl)) {
|
|
381
|
+
throw new Error(_constants.ERROR_MESSAGES.INVALID_CONTAINER_INFO);
|
|
382
|
+
}
|
|
383
|
+
},
|
|
384
|
+
/**
|
|
385
|
+
* Decrypt encrypted content using KMS.
|
|
386
|
+
* Delegates to the internal encryption plugin.
|
|
387
|
+
* @param {string} encryptedContent - The encrypted text (JWE format).
|
|
388
|
+
* @param {string} encryptionKeyUrl - KMS key URL.
|
|
389
|
+
* @returns {Promise<string>} Decrypted plaintext.
|
|
390
|
+
* @private
|
|
391
|
+
*/
|
|
392
|
+
_decryptContent: function _decryptContent(encryptedContent, encryptionKeyUrl) {
|
|
393
|
+
return this.webex.internal.encryption.decryptText(encryptionKeyUrl, encryptedContent);
|
|
394
|
+
},
|
|
395
|
+
/**
|
|
396
|
+
* Handle and normalize errors.
|
|
397
|
+
* @param {object} error - The error object from the request.
|
|
398
|
+
* @param {string} methodName - The name of the calling method.
|
|
399
|
+
* @returns {Error} A normalized Error instance.
|
|
400
|
+
* @private
|
|
401
|
+
*/
|
|
402
|
+
_handleError: function _handleError(error, methodName) {
|
|
403
|
+
if (error.statusCode === 404) {
|
|
404
|
+
var message = methodName === 'getContainer' ? _constants.ERROR_MESSAGES.CONTAINER_NOT_FOUND : _constants.ERROR_MESSAGES.CONTENT_NOT_FOUND;
|
|
405
|
+
return new Error(message);
|
|
406
|
+
}
|
|
407
|
+
if (error.statusCode === 403) {
|
|
408
|
+
return new Error(_constants.ERROR_MESSAGES.ACCESS_DENIED);
|
|
409
|
+
}
|
|
410
|
+
if (error.statusCode === 401) {
|
|
411
|
+
return new Error(_constants.ERROR_MESSAGES.AUTHENTICATION_FAILED);
|
|
412
|
+
}
|
|
413
|
+
return new Error("".concat(methodName, " failed: ").concat(error.message || 'Unknown error'));
|
|
414
|
+
},
|
|
415
|
+
version: "0.0.0-next.1"
|
|
416
|
+
});
|
|
417
|
+
var _default = exports.default = AISummary;
|
|
418
|
+
//# sourceMappingURL=ai-summary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_webexCore","require","_constants","AISummary","WebexPlugin","extend","namespace","getContainer","options","_this","containerId","_validateContainerId","webex","request","method","service","AI_SUMMARY_SERVICE","resource","concat","AI_SUMMARY_CONTAINERS_RESOURCE","then","_ref","_body$summaryData","body","summaryData","data","catch","error","logger","_handleError","getSummary","_this2","_asyncToGenerator2","default","_regenerator","mark","_callee2","containerInfo","_body$actionitems","_yield$_this2$webex$r","keyUrl","decryptedNote","decryptedShortNote","decryptedSnippets","feedbackLink","_t","wrap","_context2","prev","next","_validateContainerInfo","uri","summaryUrl","sent","encryptionKeyUrl","_decryptContent","note","aiGeneratedContent","shortnote","_promise","all","actionitems","snippets","map","_ref2","_callee","snippet","decryptedAiContent","_context","abrupt","id","editedContent","content","undefined","stop","_x","apply","arguments","links","find","link","rel","shortNote","actionItems","feedbackUrl","href","getNotes","_this3","_callee3","_yield$_this3$webex$r","decryptedContent","_t2","_context3","notesUrl","getActionItems","_this4","_callee5","_yield$_this4$webex$r","actionItemsData","_t3","_context5","actionItemsUrl","_isArray","_ref3","_callee4","_context4","_x2","getTranscriptUrl","transcriptUrl","getTranscript","_this5","_callee7","_yield$_this5$webex$r","_t4","_context7","transcriptSnippetList","_ref4","_callee6","_context6","startTime","endTime","audioCSI","speaker","_x3","totalCount","trim","length","Error","ERROR_MESSAGES","INVALID_CONTAINER_ID","urlField","_containerInfo$summar","INVALID_CONTAINER_INFO","encryptedContent","internal","encryption","decryptText","methodName","statusCode","message","CONTAINER_NOT_FOUND","CONTENT_NOT_FOUND","ACCESS_DENIED","AUTHENTICATION_FAILED","version","_default","exports"],"sources":["ai-summary.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2025 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {WebexPlugin} from '@webex/webex-core';\n\nimport {AI_SUMMARY_SERVICE, AI_SUMMARY_CONTAINERS_RESOURCE, ERROR_MESSAGES} from './constants';\nimport type {\n GetContainerOptions,\n GetSummaryContentOptions,\n PragyaContainerResponse,\n SummaryContent,\n SummaryNotes,\n SummaryActionItems,\n TranscriptContent,\n} from './types';\n\nconst AISummary = WebexPlugin.extend({\n namespace: 'AISummary',\n\n /**\n * Resolve a Pragya container by ID.\n * Returns container metadata including summary URLs and encryption key.\n *\n * @param {GetContainerOptions} options\n * @returns {Promise<PragyaContainerResponse>}\n */\n getContainer(options: GetContainerOptions): Promise<PragyaContainerResponse> {\n const {containerId} = options;\n\n this._validateContainerId(containerId);\n\n return this.webex\n .request({\n method: 'GET',\n service: AI_SUMMARY_SERVICE,\n resource: `${AI_SUMMARY_CONTAINERS_RESOURCE}/${containerId}`,\n })\n .then(({body}) => {\n // Pragya API nests summary URLs under summaryData.data — flatten\n // so consumers can access summaryData.summaryUrl directly.\n if (body.summaryData?.data) {\n body.summaryData = body.summaryData.data;\n }\n\n return body;\n })\n .catch((error) => {\n this.logger.error('AISummary->getContainer failed', {error, containerId});\n throw this._handleError(error, 'getContainer');\n });\n },\n\n /**\n * Get AI-generated full summary for a call.\n * Fetches from containerInfo.summaryData.summaryUrl and decrypts content.\n *\n * @param {GetSummaryContentOptions} options\n * @returns {Promise<SummaryContent>}\n */\n async getSummary(options: GetSummaryContentOptions): Promise<SummaryContent> {\n const {containerInfo} = options;\n\n this._validateContainerInfo(containerInfo, 'summaryUrl');\n\n try {\n const {body} = await this.webex.request({\n method: 'GET',\n uri: `${containerInfo.summaryData.summaryUrl}?fields=note,shortnote,actionitems`,\n });\n\n const keyUrl = body.keyUrl || containerInfo.encryptionKeyUrl;\n\n const decryptedNote = await this._decryptContent(body.note.aiGeneratedContent, keyUrl);\n\n const decryptedShortNote = await this._decryptContent(\n body.shortnote.aiGeneratedContent,\n keyUrl\n );\n\n const decryptedSnippets = await Promise.all(\n (body.actionitems?.snippets || []).map(async (snippet: any) => {\n const decryptedAiContent = await this._decryptContent(snippet.aiGeneratedContent, keyUrl);\n\n return {\n id: snippet.id,\n editedContent: snippet.content || undefined,\n aiGeneratedContent: decryptedAiContent,\n };\n })\n );\n\n // feedbackUrl may be in the links array as rel=\"feedback\"\n const feedbackLink = (body.links || []).find((link: any) => link.rel === 'feedback');\n\n return {\n id: body.id,\n note: decryptedNote,\n shortNote: decryptedShortNote,\n actionItems: decryptedSnippets,\n feedbackUrl: feedbackLink?.href,\n };\n } catch (error) {\n this.logger.error('AISummary->getSummary failed', {error});\n throw this._handleError(error, 'getSummary');\n }\n },\n\n /**\n * Get AI-generated notes for a call.\n * Fetches from containerInfo.summaryData.notesUrl and decrypts content.\n *\n * @param {GetSummaryContentOptions} options\n * @returns {Promise<SummaryNotes>}\n */\n async getNotes(options: GetSummaryContentOptions): Promise<SummaryNotes> {\n const {containerInfo} = options;\n\n this._validateContainerInfo(containerInfo, 'notesUrl');\n\n try {\n const {body} = await this.webex.request({\n method: 'GET',\n uri: containerInfo.summaryData.notesUrl,\n });\n\n const keyUrl = body.keyUrl || containerInfo.encryptionKeyUrl;\n\n const decryptedContent = await this._decryptContent(body.aiGeneratedContent, keyUrl);\n\n return {\n id: body.id,\n content: decryptedContent,\n feedbackUrl: body.feedbackUrl,\n };\n } catch (error) {\n this.logger.error('AISummary->getNotes failed', {error});\n throw this._handleError(error, 'getNotes');\n }\n },\n\n /**\n * Get AI-generated action items for a call.\n * Fetches from containerInfo.summaryData.actionItemsUrl and decrypts content.\n *\n * @param {GetSummaryContentOptions} options\n * @returns {Promise<SummaryActionItems>}\n */\n async getActionItems(options: GetSummaryContentOptions): Promise<SummaryActionItems> {\n const {containerInfo} = options;\n\n this._validateContainerInfo(containerInfo, 'actionItemsUrl');\n\n try {\n const {body} = await this.webex.request({\n method: 'GET',\n uri: containerInfo.summaryData.actionItemsUrl,\n });\n\n // Action items response is an array; take the first element\n const actionItemsData = Array.isArray(body) ? body[0] : body;\n\n if (!actionItemsData) {\n return {id: undefined, snippets: []};\n }\n\n const keyUrl = actionItemsData.keyUrl || containerInfo.encryptionKeyUrl;\n\n const decryptedSnippets = await Promise.all(\n (actionItemsData.snippets || []).map(async (snippet: any) => {\n const decryptedAiContent = await this._decryptContent(snippet.aiGeneratedContent, keyUrl);\n\n return {\n id: snippet.id,\n editedContent: snippet.content || undefined,\n aiGeneratedContent: decryptedAiContent,\n };\n })\n );\n\n return {\n id: actionItemsData.id,\n snippets: decryptedSnippets,\n feedbackUrl: actionItemsData.feedbackUrl,\n };\n } catch (error) {\n this.logger.error('AISummary->getActionItems failed', {error});\n throw this._handleError(error, 'getActionItems');\n }\n },\n\n /**\n * Get the transcript URL for a call.\n * Returns the URL string from the container info.\n *\n * @param {GetSummaryContentOptions} options\n * @returns {string}\n */\n getTranscriptUrl(options: GetSummaryContentOptions): string {\n const {containerInfo} = options;\n\n this._validateContainerInfo(containerInfo, 'transcriptUrl');\n\n return containerInfo.summaryData.transcriptUrl;\n },\n\n /**\n * Get decrypted transcript for a call.\n * Fetches from containerInfo.summaryData.transcriptUrl and decrypts each snippet.\n *\n * @param {GetSummaryContentOptions} options\n * @returns {Promise<TranscriptContent>}\n */\n async getTranscript(options: GetSummaryContentOptions): Promise<TranscriptContent> {\n const {containerInfo} = options;\n\n this._validateContainerInfo(containerInfo, 'transcriptUrl');\n\n try {\n const {body} = await this.webex.request({\n method: 'GET',\n uri: containerInfo.summaryData.transcriptUrl,\n });\n\n const keyUrl = body.keyUrl || containerInfo.encryptionKeyUrl;\n\n const decryptedSnippets = await Promise.all(\n (body.transcriptSnippetList || []).map(async (snippet: any) => {\n const decryptedContent = await this._decryptContent(snippet.content, keyUrl);\n\n return {\n startTime: snippet.startTime,\n endTime: snippet.endTime,\n content: decryptedContent,\n audioCSI: snippet.audioCSI,\n speaker: snippet.speaker,\n };\n })\n );\n\n return {\n id: body.id,\n totalCount: body.totalCount,\n snippets: decryptedSnippets,\n };\n } catch (error) {\n this.logger.error('AISummary->getTranscript failed', {error});\n throw this._handleError(error, 'getTranscript');\n }\n },\n\n /**\n * Validate containerId parameter.\n * @param {string} containerId - The container ID to validate.\n * @returns {void}\n * @private\n */\n _validateContainerId(containerId: string): void {\n if (!containerId || typeof containerId !== 'string' || containerId.trim().length === 0) {\n throw new Error(ERROR_MESSAGES.INVALID_CONTAINER_ID);\n }\n },\n\n /**\n * Validate containerInfo has the required URL field and encryption key.\n * @param {PragyaContainerResponse} containerInfo - The container info to validate.\n * @param {string} urlField - The summaryData field name to check.\n * @returns {void}\n * @private\n */\n _validateContainerInfo(containerInfo: PragyaContainerResponse, urlField: string): void {\n if (!containerInfo?.summaryData?.[urlField] || !containerInfo?.encryptionKeyUrl) {\n throw new Error(ERROR_MESSAGES.INVALID_CONTAINER_INFO);\n }\n },\n\n /**\n * Decrypt encrypted content using KMS.\n * Delegates to the internal encryption plugin.\n * @param {string} encryptedContent - The encrypted text (JWE format).\n * @param {string} encryptionKeyUrl - KMS key URL.\n * @returns {Promise<string>} Decrypted plaintext.\n * @private\n */\n _decryptContent(encryptedContent: string, encryptionKeyUrl: string): Promise<string> {\n return this.webex.internal.encryption.decryptText(encryptionKeyUrl, encryptedContent);\n },\n\n /**\n * Handle and normalize errors.\n * @param {object} error - The error object from the request.\n * @param {string} methodName - The name of the calling method.\n * @returns {Error} A normalized Error instance.\n * @private\n */\n _handleError(error: any, methodName: string): Error {\n if (error.statusCode === 404) {\n const message =\n methodName === 'getContainer'\n ? ERROR_MESSAGES.CONTAINER_NOT_FOUND\n : ERROR_MESSAGES.CONTENT_NOT_FOUND;\n\n return new Error(message);\n }\n\n if (error.statusCode === 403) {\n return new Error(ERROR_MESSAGES.ACCESS_DENIED);\n }\n\n if (error.statusCode === 401) {\n return new Error(ERROR_MESSAGES.AUTHENTICATION_FAILED);\n }\n\n return new Error(`${methodName} failed: ${error.message || 'Unknown error'}`);\n },\n});\n\nexport default AISummary;\n"],"mappings":";;;;;;;;;;;;AAIA,IAAAA,UAAA,GAAAC,OAAA;AAEA,IAAAC,UAAA,GAAAD,OAAA;AANA;AACA;AACA;;AAeA,IAAME,SAAS,GAAGC,sBAAW,CAACC,MAAM,CAAC;EACnCC,SAAS,EAAE,WAAW;EAEtB;AACF;AACA;AACA;AACA;AACA;AACA;EACEC,YAAY,WAAZA,YAAYA,CAACC,OAA4B,EAAoC;IAAA,IAAAC,KAAA;IAC3E,IAAOC,WAAW,GAAIF,OAAO,CAAtBE,WAAW;IAElB,IAAI,CAACC,oBAAoB,CAACD,WAAW,CAAC;IAEtC,OAAO,IAAI,CAACE,KAAK,CACdC,OAAO,CAAC;MACPC,MAAM,EAAE,KAAK;MACbC,OAAO,EAAEC,6BAAkB;MAC3BC,QAAQ,KAAAC,MAAA,CAAKC,yCAA8B,OAAAD,MAAA,CAAIR,WAAW;IAC5D,CAAC,CAAC,CACDU,IAAI,CAAC,UAAAC,IAAA,EAAY;MAAA,IAAAC,iBAAA;MAAA,IAAVC,IAAI,GAAAF,IAAA,CAAJE,IAAI;MACV;MACA;MACA,KAAAD,iBAAA,GAAIC,IAAI,CAACC,WAAW,cAAAF,iBAAA,eAAhBA,iBAAA,CAAkBG,IAAI,EAAE;QAC1BF,IAAI,CAACC,WAAW,GAAGD,IAAI,CAACC,WAAW,CAACC,IAAI;MAC1C;MAEA,OAAOF,IAAI;IACb,CAAC,CAAC,CACDG,KAAK,CAAC,UAACC,KAAK,EAAK;MAChBlB,KAAI,CAACmB,MAAM,CAACD,KAAK,CAAC,gCAAgC,EAAE;QAACA,KAAK,EAALA,KAAK;QAAEjB,WAAW,EAAXA;MAAW,CAAC,CAAC;MACzE,MAAMD,KAAI,CAACoB,YAAY,CAACF,KAAK,EAAE,cAAc,CAAC;IAChD,CAAC,CAAC;EACN,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACQG,UAAU,WAAVA,UAAUA,CAACtB,OAAiC,EAA2B;IAAA,IAAAuB,MAAA;IAAA,WAAAC,kBAAA,CAAAC,OAAA,eAAAC,YAAA,CAAAD,OAAA,CAAAE,IAAA,UAAAC,SAAA;MAAA,IAAAC,aAAA,EAAAC,iBAAA,EAAAC,qBAAA,EAAAhB,IAAA,EAAAiB,MAAA,EAAAC,aAAA,EAAAC,kBAAA,EAAAC,iBAAA,EAAAC,YAAA,EAAAC,EAAA;MAAA,OAAAX,YAAA,CAAAD,OAAA,CAAAa,IAAA,WAAAC,SAAA;QAAA,kBAAAA,SAAA,CAAAC,IAAA,GAAAD,SAAA,CAAAE,IAAA;UAAA;YACpEZ,aAAa,GAAI7B,OAAO,CAAxB6B,aAAa;YAEpBN,MAAI,CAACmB,sBAAsB,CAACb,aAAa,EAAE,YAAY,CAAC;YAACU,SAAA,CAAAC,IAAA;YAAAD,SAAA,CAAAE,IAAA;YAAA,OAGlClB,MAAI,CAACnB,KAAK,CAACC,OAAO,CAAC;cACtCC,MAAM,EAAE,KAAK;cACbqC,GAAG,KAAAjC,MAAA,CAAKmB,aAAa,CAACb,WAAW,CAAC4B,UAAU;YAC9C,CAAC,CAAC;UAAA;YAAAb,qBAAA,GAAAQ,SAAA,CAAAM,IAAA;YAHK9B,IAAI,GAAAgB,qBAAA,CAAJhB,IAAI;YAKLiB,MAAM,GAAGjB,IAAI,CAACiB,MAAM,IAAIH,aAAa,CAACiB,gBAAgB;YAAAP,SAAA,CAAAE,IAAA;YAAA,OAEhClB,MAAI,CAACwB,eAAe,CAAChC,IAAI,CAACiC,IAAI,CAACC,kBAAkB,EAAEjB,MAAM,CAAC;UAAA;YAAhFC,aAAa,GAAAM,SAAA,CAAAM,IAAA;YAAAN,SAAA,CAAAE,IAAA;YAAA,OAEclB,MAAI,CAACwB,eAAe,CACnDhC,IAAI,CAACmC,SAAS,CAACD,kBAAkB,EACjCjB,MACF,CAAC;UAAA;YAHKE,kBAAkB,GAAAK,SAAA,CAAAM,IAAA;YAAAN,SAAA,CAAAE,IAAA;YAAA,OAKQU,QAAA,CAAA1B,OAAA,CAAQ2B,GAAG,CACzC,CAAC,EAAAtB,iBAAA,GAAAf,IAAI,CAACsC,WAAW,cAAAvB,iBAAA,uBAAhBA,iBAAA,CAAkBwB,QAAQ,KAAI,EAAE,EAAEC,GAAG;cAAA,IAAAC,KAAA,OAAAhC,kBAAA,CAAAC,OAAA,eAAAC,YAAA,CAAAD,OAAA,CAAAE,IAAA,CAAC,SAAA8B,QAAOC,OAAY;gBAAA,IAAAC,kBAAA;gBAAA,OAAAjC,YAAA,CAAAD,OAAA,CAAAa,IAAA,WAAAsB,QAAA;kBAAA,kBAAAA,QAAA,CAAApB,IAAA,GAAAoB,QAAA,CAAAnB,IAAA;oBAAA;sBAAAmB,QAAA,CAAAnB,IAAA;sBAAA,OACvBlB,MAAI,CAACwB,eAAe,CAACW,OAAO,CAACT,kBAAkB,EAAEjB,MAAM,CAAC;oBAAA;sBAAnF2B,kBAAkB,GAAAC,QAAA,CAAAf,IAAA;sBAAA,OAAAe,QAAA,CAAAC,MAAA,WAEjB;wBACLC,EAAE,EAAEJ,OAAO,CAACI,EAAE;wBACdC,aAAa,EAAEL,OAAO,CAACM,OAAO,IAAIC,SAAS;wBAC3ChB,kBAAkB,EAAEU;sBACtB,CAAC;oBAAA;oBAAA;sBAAA,OAAAC,QAAA,CAAAM,IAAA;kBAAA;gBAAA,GAAAT,OAAA;cAAA,CACF;cAAA,iBAAAU,EAAA;gBAAA,OAAAX,KAAA,CAAAY,KAAA,OAAAC,SAAA;cAAA;YAAA,IACH,CAAC;UAAA;YAVKlC,iBAAiB,GAAAI,SAAA,CAAAM,IAAA;YAYvB;YACMT,YAAY,GAAG,CAACrB,IAAI,CAACuD,KAAK,IAAI,EAAE,EAAEC,IAAI,CAAC,UAACC,IAAS;cAAA,OAAKA,IAAI,CAACC,GAAG,KAAK,UAAU;YAAA,EAAC;YAAA,OAAAlC,SAAA,CAAAsB,MAAA,WAE7E;cACLC,EAAE,EAAE/C,IAAI,CAAC+C,EAAE;cACXd,IAAI,EAAEf,aAAa;cACnByC,SAAS,EAAExC,kBAAkB;cAC7ByC,WAAW,EAAExC,iBAAiB;cAC9ByC,WAAW,EAAExC,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEyC;YAC7B,CAAC;UAAA;YAAAtC,SAAA,CAAAC,IAAA;YAAAH,EAAA,GAAAE,SAAA;YAEDhB,MAAI,CAACH,MAAM,CAACD,KAAK,CAAC,8BAA8B,EAAE;cAACA,KAAK,EAAAkB;YAAA,CAAC,CAAC;YAAC,MACrDd,MAAI,CAACF,YAAY,CAAAgB,EAAA,EAAQ,YAAY,CAAC;UAAA;UAAA;YAAA,OAAAE,SAAA,CAAA2B,IAAA;QAAA;MAAA,GAAAtC,QAAA;IAAA;EAEhD,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACQkD,QAAQ,WAARA,QAAQA,CAAC9E,OAAiC,EAAyB;IAAA,IAAA+E,MAAA;IAAA,WAAAvD,kBAAA,CAAAC,OAAA,eAAAC,YAAA,CAAAD,OAAA,CAAAE,IAAA,UAAAqD,SAAA;MAAA,IAAAnD,aAAA,EAAAoD,qBAAA,EAAAlE,IAAA,EAAAiB,MAAA,EAAAkD,gBAAA,EAAAC,GAAA;MAAA,OAAAzD,YAAA,CAAAD,OAAA,CAAAa,IAAA,WAAA8C,SAAA;QAAA,kBAAAA,SAAA,CAAA5C,IAAA,GAAA4C,SAAA,CAAA3C,IAAA;UAAA;YAChEZ,aAAa,GAAI7B,OAAO,CAAxB6B,aAAa;YAEpBkD,MAAI,CAACrC,sBAAsB,CAACb,aAAa,EAAE,UAAU,CAAC;YAACuD,SAAA,CAAA5C,IAAA;YAAA4C,SAAA,CAAA3C,IAAA;YAAA,OAGhCsC,MAAI,CAAC3E,KAAK,CAACC,OAAO,CAAC;cACtCC,MAAM,EAAE,KAAK;cACbqC,GAAG,EAAEd,aAAa,CAACb,WAAW,CAACqE;YACjC,CAAC,CAAC;UAAA;YAAAJ,qBAAA,GAAAG,SAAA,CAAAvC,IAAA;YAHK9B,IAAI,GAAAkE,qBAAA,CAAJlE,IAAI;YAKLiB,MAAM,GAAGjB,IAAI,CAACiB,MAAM,IAAIH,aAAa,CAACiB,gBAAgB;YAAAsC,SAAA,CAAA3C,IAAA;YAAA,OAE7BsC,MAAI,CAAChC,eAAe,CAAChC,IAAI,CAACkC,kBAAkB,EAAEjB,MAAM,CAAC;UAAA;YAA9EkD,gBAAgB,GAAAE,SAAA,CAAAvC,IAAA;YAAA,OAAAuC,SAAA,CAAAvB,MAAA,WAEf;cACLC,EAAE,EAAE/C,IAAI,CAAC+C,EAAE;cACXE,OAAO,EAAEkB,gBAAgB;cACzBN,WAAW,EAAE7D,IAAI,CAAC6D;YACpB,CAAC;UAAA;YAAAQ,SAAA,CAAA5C,IAAA;YAAA2C,GAAA,GAAAC,SAAA;YAEDL,MAAI,CAAC3D,MAAM,CAACD,KAAK,CAAC,4BAA4B,EAAE;cAACA,KAAK,EAAAgE;YAAA,CAAC,CAAC;YAAC,MACnDJ,MAAI,CAAC1D,YAAY,CAAA8D,GAAA,EAAQ,UAAU,CAAC;UAAA;UAAA;YAAA,OAAAC,SAAA,CAAAlB,IAAA;QAAA;MAAA,GAAAc,QAAA;IAAA;EAE9C,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACQM,cAAc,WAAdA,cAAcA,CAACtF,OAAiC,EAA+B;IAAA,IAAAuF,MAAA;IAAA,WAAA/D,kBAAA,CAAAC,OAAA,eAAAC,YAAA,CAAAD,OAAA,CAAAE,IAAA,UAAA6D,SAAA;MAAA,IAAA3D,aAAA,EAAA4D,qBAAA,EAAA1E,IAAA,EAAA2E,eAAA,EAAA1D,MAAA,EAAAG,iBAAA,EAAAwD,GAAA;MAAA,OAAAjE,YAAA,CAAAD,OAAA,CAAAa,IAAA,WAAAsD,SAAA;QAAA,kBAAAA,SAAA,CAAApD,IAAA,GAAAoD,SAAA,CAAAnD,IAAA;UAAA;YAC5EZ,aAAa,GAAI7B,OAAO,CAAxB6B,aAAa;YAEpB0D,MAAI,CAAC7C,sBAAsB,CAACb,aAAa,EAAE,gBAAgB,CAAC;YAAC+D,SAAA,CAAApD,IAAA;YAAAoD,SAAA,CAAAnD,IAAA;YAAA,OAGtC8C,MAAI,CAACnF,KAAK,CAACC,OAAO,CAAC;cACtCC,MAAM,EAAE,KAAK;cACbqC,GAAG,EAAEd,aAAa,CAACb,WAAW,CAAC6E;YACjC,CAAC,CAAC;UAAA;YAAAJ,qBAAA,GAAAG,SAAA,CAAA/C,IAAA;YAHK9B,IAAI,GAAA0E,qBAAA,CAAJ1E,IAAI;YAKX;YACM2E,eAAe,GAAG,IAAAI,QAAA,CAAArE,OAAA,EAAcV,IAAI,CAAC,GAAGA,IAAI,CAAC,CAAC,CAAC,GAAGA,IAAI;YAAA,IAEvD2E,eAAe;cAAAE,SAAA,CAAAnD,IAAA;cAAA;YAAA;YAAA,OAAAmD,SAAA,CAAA/B,MAAA,WACX;cAACC,EAAE,EAAEG,SAAS;cAAEX,QAAQ,EAAE;YAAE,CAAC;UAAA;YAGhCtB,MAAM,GAAG0D,eAAe,CAAC1D,MAAM,IAAIH,aAAa,CAACiB,gBAAgB;YAAA8C,SAAA,CAAAnD,IAAA;YAAA,OAEvCU,QAAA,CAAA1B,OAAA,CAAQ2B,GAAG,CACzC,CAACsC,eAAe,CAACpC,QAAQ,IAAI,EAAE,EAAEC,GAAG;cAAA,IAAAwC,KAAA,OAAAvE,kBAAA,CAAAC,OAAA,eAAAC,YAAA,CAAAD,OAAA,CAAAE,IAAA,CAAC,SAAAqE,SAAOtC,OAAY;gBAAA,IAAAC,kBAAA;gBAAA,OAAAjC,YAAA,CAAAD,OAAA,CAAAa,IAAA,WAAA2D,SAAA;kBAAA,kBAAAA,SAAA,CAAAzD,IAAA,GAAAyD,SAAA,CAAAxD,IAAA;oBAAA;sBAAAwD,SAAA,CAAAxD,IAAA;sBAAA,OACrB8C,MAAI,CAACxC,eAAe,CAACW,OAAO,CAACT,kBAAkB,EAAEjB,MAAM,CAAC;oBAAA;sBAAnF2B,kBAAkB,GAAAsC,SAAA,CAAApD,IAAA;sBAAA,OAAAoD,SAAA,CAAApC,MAAA,WAEjB;wBACLC,EAAE,EAAEJ,OAAO,CAACI,EAAE;wBACdC,aAAa,EAAEL,OAAO,CAACM,OAAO,IAAIC,SAAS;wBAC3ChB,kBAAkB,EAAEU;sBACtB,CAAC;oBAAA;oBAAA;sBAAA,OAAAsC,SAAA,CAAA/B,IAAA;kBAAA;gBAAA,GAAA8B,QAAA;cAAA,CACF;cAAA,iBAAAE,GAAA;gBAAA,OAAAH,KAAA,CAAA3B,KAAA,OAAAC,SAAA;cAAA;YAAA,IACH,CAAC;UAAA;YAVKlC,iBAAiB,GAAAyD,SAAA,CAAA/C,IAAA;YAAA,OAAA+C,SAAA,CAAA/B,MAAA,WAYhB;cACLC,EAAE,EAAE4B,eAAe,CAAC5B,EAAE;cACtBR,QAAQ,EAAEnB,iBAAiB;cAC3ByC,WAAW,EAAEc,eAAe,CAACd;YAC/B,CAAC;UAAA;YAAAgB,SAAA,CAAApD,IAAA;YAAAmD,GAAA,GAAAC,SAAA;YAEDL,MAAI,CAACnE,MAAM,CAACD,KAAK,CAAC,kCAAkC,EAAE;cAACA,KAAK,EAAAwE;YAAA,CAAC,CAAC;YAAC,MACzDJ,MAAI,CAAClE,YAAY,CAAAsE,GAAA,EAAQ,gBAAgB,CAAC;UAAA;UAAA;YAAA,OAAAC,SAAA,CAAA1B,IAAA;QAAA;MAAA,GAAAsB,QAAA;IAAA;EAEpD,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACEW,gBAAgB,WAAhBA,gBAAgBA,CAACnG,OAAiC,EAAU;IAC1D,IAAO6B,aAAa,GAAI7B,OAAO,CAAxB6B,aAAa;IAEpB,IAAI,CAACa,sBAAsB,CAACb,aAAa,EAAE,eAAe,CAAC;IAE3D,OAAOA,aAAa,CAACb,WAAW,CAACoF,aAAa;EAChD,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACQC,aAAa,WAAbA,aAAaA,CAACrG,OAAiC,EAA8B;IAAA,IAAAsG,MAAA;IAAA,WAAA9E,kBAAA,CAAAC,OAAA,eAAAC,YAAA,CAAAD,OAAA,CAAAE,IAAA,UAAA4E,SAAA;MAAA,IAAA1E,aAAA,EAAA2E,qBAAA,EAAAzF,IAAA,EAAAiB,MAAA,EAAAG,iBAAA,EAAAsE,GAAA;MAAA,OAAA/E,YAAA,CAAAD,OAAA,CAAAa,IAAA,WAAAoE,SAAA;QAAA,kBAAAA,SAAA,CAAAlE,IAAA,GAAAkE,SAAA,CAAAjE,IAAA;UAAA;YAC1EZ,aAAa,GAAI7B,OAAO,CAAxB6B,aAAa;YAEpByE,MAAI,CAAC5D,sBAAsB,CAACb,aAAa,EAAE,eAAe,CAAC;YAAC6E,SAAA,CAAAlE,IAAA;YAAAkE,SAAA,CAAAjE,IAAA;YAAA,OAGrC6D,MAAI,CAAClG,KAAK,CAACC,OAAO,CAAC;cACtCC,MAAM,EAAE,KAAK;cACbqC,GAAG,EAAEd,aAAa,CAACb,WAAW,CAACoF;YACjC,CAAC,CAAC;UAAA;YAAAI,qBAAA,GAAAE,SAAA,CAAA7D,IAAA;YAHK9B,IAAI,GAAAyF,qBAAA,CAAJzF,IAAI;YAKLiB,MAAM,GAAGjB,IAAI,CAACiB,MAAM,IAAIH,aAAa,CAACiB,gBAAgB;YAAA4D,SAAA,CAAAjE,IAAA;YAAA,OAE5BU,QAAA,CAAA1B,OAAA,CAAQ2B,GAAG,CACzC,CAACrC,IAAI,CAAC4F,qBAAqB,IAAI,EAAE,EAAEpD,GAAG;cAAA,IAAAqD,KAAA,OAAApF,kBAAA,CAAAC,OAAA,eAAAC,YAAA,CAAAD,OAAA,CAAAE,IAAA,CAAC,SAAAkF,SAAOnD,OAAY;gBAAA,IAAAwB,gBAAA;gBAAA,OAAAxD,YAAA,CAAAD,OAAA,CAAAa,IAAA,WAAAwE,SAAA;kBAAA,kBAAAA,SAAA,CAAAtE,IAAA,GAAAsE,SAAA,CAAArE,IAAA;oBAAA;sBAAAqE,SAAA,CAAArE,IAAA;sBAAA,OACzB6D,MAAI,CAACvD,eAAe,CAACW,OAAO,CAACM,OAAO,EAAEhC,MAAM,CAAC;oBAAA;sBAAtEkD,gBAAgB,GAAA4B,SAAA,CAAAjE,IAAA;sBAAA,OAAAiE,SAAA,CAAAjD,MAAA,WAEf;wBACLkD,SAAS,EAAErD,OAAO,CAACqD,SAAS;wBAC5BC,OAAO,EAAEtD,OAAO,CAACsD,OAAO;wBACxBhD,OAAO,EAAEkB,gBAAgB;wBACzB+B,QAAQ,EAAEvD,OAAO,CAACuD,QAAQ;wBAC1BC,OAAO,EAAExD,OAAO,CAACwD;sBACnB,CAAC;oBAAA;oBAAA;sBAAA,OAAAJ,SAAA,CAAA5C,IAAA;kBAAA;gBAAA,GAAA2C,QAAA;cAAA,CACF;cAAA,iBAAAM,GAAA;gBAAA,OAAAP,KAAA,CAAAxC,KAAA,OAAAC,SAAA;cAAA;YAAA,IACH,CAAC;UAAA;YAZKlC,iBAAiB,GAAAuE,SAAA,CAAA7D,IAAA;YAAA,OAAA6D,SAAA,CAAA7C,MAAA,WAchB;cACLC,EAAE,EAAE/C,IAAI,CAAC+C,EAAE;cACXsD,UAAU,EAAErG,IAAI,CAACqG,UAAU;cAC3B9D,QAAQ,EAAEnB;YACZ,CAAC;UAAA;YAAAuE,SAAA,CAAAlE,IAAA;YAAAiE,GAAA,GAAAC,SAAA;YAEDJ,MAAI,CAAClF,MAAM,CAACD,KAAK,CAAC,iCAAiC,EAAE;cAACA,KAAK,EAAAsF;YAAA,CAAC,CAAC;YAAC,MACxDH,MAAI,CAACjF,YAAY,CAAAoF,GAAA,EAAQ,eAAe,CAAC;UAAA;UAAA;YAAA,OAAAC,SAAA,CAAAxC,IAAA;QAAA;MAAA,GAAAqC,QAAA;IAAA;EAEnD,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACEpG,oBAAoB,WAApBA,oBAAoBA,CAACD,WAAmB,EAAQ;IAC9C,IAAI,CAACA,WAAW,IAAI,OAAOA,WAAW,KAAK,QAAQ,IAAIA,WAAW,CAACmH,IAAI,CAAC,CAAC,CAACC,MAAM,KAAK,CAAC,EAAE;MACtF,MAAM,IAAIC,KAAK,CAACC,yBAAc,CAACC,oBAAoB,CAAC;IACtD;EACF,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACE/E,sBAAsB,WAAtBA,sBAAsBA,CAACb,aAAsC,EAAE6F,QAAgB,EAAQ;IAAA,IAAAC,qBAAA;IACrF,IAAI,EAAC9F,aAAa,aAAbA,aAAa,gBAAA8F,qBAAA,GAAb9F,aAAa,CAAEb,WAAW,cAAA2G,qBAAA,eAA1BA,qBAAA,CAA6BD,QAAQ,CAAC,KAAI,EAAC7F,aAAa,aAAbA,aAAa,eAAbA,aAAa,CAAEiB,gBAAgB,GAAE;MAC/E,MAAM,IAAIyE,KAAK,CAACC,yBAAc,CAACI,sBAAsB,CAAC;IACxD;EACF,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE7E,eAAe,WAAfA,eAAeA,CAAC8E,gBAAwB,EAAE/E,gBAAwB,EAAmB;IACnF,OAAO,IAAI,CAAC1C,KAAK,CAAC0H,QAAQ,CAACC,UAAU,CAACC,WAAW,CAAClF,gBAAgB,EAAE+E,gBAAgB,CAAC;EACvF,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACExG,YAAY,WAAZA,YAAYA,CAACF,KAAU,EAAE8G,UAAkB,EAAS;IAClD,IAAI9G,KAAK,CAAC+G,UAAU,KAAK,GAAG,EAAE;MAC5B,IAAMC,OAAO,GACXF,UAAU,KAAK,cAAc,GACzBT,yBAAc,CAACY,mBAAmB,GAClCZ,yBAAc,CAACa,iBAAiB;MAEtC,OAAO,IAAId,KAAK,CAACY,OAAO,CAAC;IAC3B;IAEA,IAAIhH,KAAK,CAAC+G,UAAU,KAAK,GAAG,EAAE;MAC5B,OAAO,IAAIX,KAAK,CAACC,yBAAc,CAACc,aAAa,CAAC;IAChD;IAEA,IAAInH,KAAK,CAAC+G,UAAU,KAAK,GAAG,EAAE;MAC5B,OAAO,IAAIX,KAAK,CAACC,yBAAc,CAACe,qBAAqB,CAAC;IACxD;IAEA,OAAO,IAAIhB,KAAK,IAAA7G,MAAA,CAAIuH,UAAU,eAAAvH,MAAA,CAAYS,KAAK,CAACgH,OAAO,IAAI,eAAe,CAAE,CAAC;EAC/E,CAAC;EAAAK,OAAA;AACH,CAAC,CAAC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAjH,OAAA,GAEY9B,SAAS","ignoreList":[]}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
4
|
+
_Object$defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
/*!
|
|
9
|
+
* Copyright (c) 2015-2025 Cisco Systems, Inc. See LICENSE file.
|
|
10
|
+
*/
|
|
11
|
+
var _default = exports.default = {
|
|
12
|
+
aisummary: {}
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_default","exports","default","aisummary"],"sources":["config.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2025 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport default {\n aisummary: {},\n};\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AAFA,IAAAA,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAIe;EACbC,SAAS,EAAE,CAAC;AACd,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
4
|
+
_Object$defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.SUMMARY_STATUSES = exports.ERROR_MESSAGES = exports.AI_SUMMARY_SERVICE = exports.AI_SUMMARY_CONTAINERS_RESOURCE = void 0;
|
|
8
|
+
/*!
|
|
9
|
+
* Copyright (c) 2015-2025 Cisco Systems, Inc. See LICENSE file.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
var AI_SUMMARY_SERVICE = exports.AI_SUMMARY_SERVICE = 'pragya';
|
|
13
|
+
var AI_SUMMARY_CONTAINERS_RESOURCE = exports.AI_SUMMARY_CONTAINERS_RESOURCE = 'containers';
|
|
14
|
+
var SUMMARY_STATUSES = exports.SUMMARY_STATUSES = {
|
|
15
|
+
ACTIVE: 'Active'
|
|
16
|
+
};
|
|
17
|
+
var ERROR_MESSAGES = exports.ERROR_MESSAGES = {
|
|
18
|
+
INVALID_CONTAINER_ID: 'containerId is required and must be a non-empty string',
|
|
19
|
+
INVALID_CONTAINER_INFO: 'containerInfo with valid summaryData and encryptionKeyUrl is required',
|
|
20
|
+
CONTAINER_NOT_FOUND: 'Container not found',
|
|
21
|
+
CONTENT_NOT_FOUND: 'Summary content not available or expired',
|
|
22
|
+
ACCESS_DENIED: 'Access denied: User not authorized to view this summary',
|
|
23
|
+
AUTHENTICATION_FAILED: 'Authentication failed: Invalid or expired token'
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["AI_SUMMARY_SERVICE","exports","AI_SUMMARY_CONTAINERS_RESOURCE","SUMMARY_STATUSES","ACTIVE","ERROR_MESSAGES","INVALID_CONTAINER_ID","INVALID_CONTAINER_INFO","CONTAINER_NOT_FOUND","CONTENT_NOT_FOUND","ACCESS_DENIED","AUTHENTICATION_FAILED"],"sources":["constants.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2025 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport const AI_SUMMARY_SERVICE = 'pragya';\nexport const AI_SUMMARY_CONTAINERS_RESOURCE = 'containers';\n\nexport const SUMMARY_STATUSES = {\n ACTIVE: 'Active',\n} as const;\n\nexport const ERROR_MESSAGES = {\n INVALID_CONTAINER_ID: 'containerId is required and must be a non-empty string',\n INVALID_CONTAINER_INFO: 'containerInfo with valid summaryData and encryptionKeyUrl is required',\n CONTAINER_NOT_FOUND: 'Container not found',\n CONTENT_NOT_FOUND: 'Summary content not available or expired',\n ACCESS_DENIED: 'Access denied: User not authorized to view this summary',\n AUTHENTICATION_FAILED: 'Authentication failed: Invalid or expired token',\n} as const;\n"],"mappings":";;;;;;;AAAA;AACA;AACA;;AAEO,IAAMA,kBAAkB,GAAAC,OAAA,CAAAD,kBAAA,GAAG,QAAQ;AACnC,IAAME,8BAA8B,GAAAD,OAAA,CAAAC,8BAAA,GAAG,YAAY;AAEnD,IAAMC,gBAAgB,GAAAF,OAAA,CAAAE,gBAAA,GAAG;EAC9BC,MAAM,EAAE;AACV,CAAU;AAEH,IAAMC,cAAc,GAAAJ,OAAA,CAAAI,cAAA,GAAG;EAC5BC,oBAAoB,EAAE,wDAAwD;EAC9EC,sBAAsB,EAAE,uEAAuE;EAC/FC,mBAAmB,EAAE,qBAAqB;EAC1CC,iBAAiB,EAAE,0CAA0C;EAC7DC,aAAa,EAAE,yDAAyD;EACxEC,qBAAqB,EAAE;AACzB,CAAU","ignoreList":[]}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
5
|
+
_Object$defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
_Object$defineProperty(exports, "default", {
|
|
9
|
+
enumerable: true,
|
|
10
|
+
get: function get() {
|
|
11
|
+
return _aiSummary.default;
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
require("@webex/internal-plugin-encryption");
|
|
15
|
+
var _webexCore = require("@webex/webex-core");
|
|
16
|
+
var _aiSummary = _interopRequireDefault(require("./ai-summary"));
|
|
17
|
+
var _config = _interopRequireDefault(require("./config"));
|
|
18
|
+
/*!
|
|
19
|
+
* Copyright (c) 2015-2025 Cisco Systems, Inc. See LICENSE file.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
(0, _webexCore.registerInternalPlugin)('aisummary', _aiSummary.default, {
|
|
23
|
+
config: _config.default
|
|
24
|
+
});
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["require","_webexCore","_aiSummary","_interopRequireDefault","_config","registerInternalPlugin","AISummary","config"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2025 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport '@webex/internal-plugin-encryption';\nimport {registerInternalPlugin} from '@webex/webex-core';\n\nimport AISummary from './ai-summary';\nimport config from './config';\n\nregisterInternalPlugin('aisummary', AISummary, {config});\n\nexport {default} from './ai-summary';\n"],"mappings":";;;;;;;;;;;;;AAIAA,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AAEA,IAAAE,UAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAD,sBAAA,CAAAH,OAAA;AARA;AACA;AACA;;AAQA,IAAAK,iCAAsB,EAAC,WAAW,EAAEC,kBAAS,EAAE;EAACC,MAAM,EAANA;AAAM,CAAC,CAAC","ignoreList":[]}
|