@webex/internal-plugin-conversation 3.0.0-beta.15 → 3.0.0-beta.17

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.
@@ -1,67 +1,44 @@
1
1
  "use strict";
2
2
 
3
3
  var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
4
-
5
4
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
6
-
7
5
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
8
-
9
6
  _Object$defineProperty(exports, "__esModule", {
10
7
  value: true
11
8
  });
12
-
13
9
  exports.InvalidUserCreation = exports.ConversationError = void 0;
14
-
15
10
  var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
16
-
17
11
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
18
-
19
12
  var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
20
-
21
13
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
22
-
23
14
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
24
-
25
15
  var _common = require("@webex/common");
26
-
27
16
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
28
-
29
17
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
30
-
31
18
  /**
32
19
  * General conversation error
33
20
  */
34
21
  var ConversationError = /*#__PURE__*/function (_Exception) {
35
22
  (0, _inherits2.default)(ConversationError, _Exception);
36
-
37
23
  var _super = _createSuper(ConversationError);
38
-
39
24
  function ConversationError() {
40
25
  (0, _classCallCheck2.default)(this, ConversationError);
41
26
  return _super.apply(this, arguments);
42
27
  }
43
-
44
28
  return (0, _createClass2.default)(ConversationError);
45
29
  }(_common.Exception);
46
30
  /**
47
31
  * InvalidUserCreation thrown when failed to create conversation with invalid user
48
32
  */
49
-
50
-
51
33
  exports.ConversationError = ConversationError;
52
-
53
34
  var InvalidUserCreation = /*#__PURE__*/function (_ConversationError) {
54
35
  (0, _inherits2.default)(InvalidUserCreation, _ConversationError);
55
-
56
36
  var _super2 = _createSuper(InvalidUserCreation);
57
-
58
37
  function InvalidUserCreation() {
59
38
  (0, _classCallCheck2.default)(this, InvalidUserCreation);
60
39
  return _super2.apply(this, arguments);
61
40
  }
62
-
63
41
  return (0, _createClass2.default)(InvalidUserCreation);
64
42
  }(ConversationError);
65
-
66
43
  exports.InvalidUserCreation = InvalidUserCreation;
67
44
  //# sourceMappingURL=convo-error.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["ConversationError","Exception","InvalidUserCreation"],"sources":["convo-error.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Exception} from '@webex/common';\n\n/**\n * General conversation error\n */\nexport class ConversationError extends Exception {}\n\n/**\n * InvalidUserCreation thrown when failed to create conversation with invalid user\n */\nexport class InvalidUserCreation extends ConversationError {}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAIA;;;;;;AAEA;AACA;AACA;IACaA,iB;;;;;;;;;;;EAA0BC,iB;AAEvC;AACA;AACA;;;;;IACaC,mB;;;;;;;;;;;EAA4BF,iB"}
1
+ {"version":3,"names":["ConversationError","Exception","InvalidUserCreation"],"sources":["convo-error.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Exception} from '@webex/common';\n\n/**\n * General conversation error\n */\nexport class ConversationError extends Exception {}\n\n/**\n * InvalidUserCreation thrown when failed to create conversation with invalid user\n */\nexport class InvalidUserCreation extends ConversationError {}\n"],"mappings":";;;;;;;;;;;;;;AAIA;AAAwC;AAAA;AAExC;AACA;AACA;AAFA,IAGaA,iBAAiB;EAAA;EAAA;EAAA;IAAA;IAAA;EAAA;EAAA;AAAA,EAASC,iBAAS;AAEhD;AACA;AACA;AAFA;AAAA,IAGaC,mBAAmB;EAAA;EAAA;EAAA;IAAA;IAAA;EAAA;EAAA;AAAA,EAASF,iBAAiB;AAAA"}
@@ -1,33 +1,23 @@
1
1
  "use strict";
2
2
 
3
3
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
-
5
4
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
6
-
7
5
  _Object$defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
-
11
8
  exports.transforms = void 0;
12
-
13
9
  var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
14
-
15
10
  var _isArray = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/array/is-array"));
16
-
17
11
  var _isInteger = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/number/is-integer"));
18
-
19
12
  var _curry2 = _interopRequireDefault(require("lodash/curry"));
20
-
21
13
  var _capitalize2 = _interopRequireDefault(require("lodash/capitalize"));
22
-
23
14
  var _camelCase2 = _interopRequireDefault(require("lodash/camelCase"));
24
-
25
15
  var _toArray = _interopRequireDefault(require("./to-array"));
26
-
27
16
  var decryptTextProp = (0, _curry2.default)(function (name, ctx, key, object) {
28
17
  return ctx.transform('decryptTextProp', name, key, object);
29
- }); // eslint-disable-next-line import/prefer-default-export
18
+ });
30
19
 
20
+ // eslint-disable-next-line import/prefer-default-export
31
21
  var transforms = (0, _toArray.default)('inbound', {
32
22
  /**
33
23
  * This function is used recursively to decrypt various properties on conversations, activities, etc
@@ -39,34 +29,29 @@ var transforms = (0, _toArray.default)('inbound', {
39
29
  decryptObject: function decryptObject(ctx, key, object) {
40
30
  if (!object) {
41
31
  object = key; // eslint-disable-line no-param-reassign
42
-
43
32
  key = undefined; // eslint-disable-line no-param-reassign
44
33
  }
45
34
 
46
35
  if (!object) {
47
36
  return _promise.default.resolve();
48
37
  }
49
-
50
38
  if (!object.objectType) {
51
39
  return _promise.default.resolve();
52
40
  }
53
-
54
41
  if (!key && object.encryptionKeyUrl) {
55
42
  key = object.encryptionKeyUrl; // eslint-disable-line no-param-reassign
56
- } // Transcoded content was not showing up on the activities since the
43
+ }
44
+
45
+ // Transcoded content was not showing up on the activities since the
57
46
  // decryptFile was not being called. Calling decryptFile for
58
47
  // transcodedContent fixes the issue.
59
-
60
-
61
48
  if (object.objectType === 'transcodedContent') {
62
49
  return _promise.default.all(object.files.items.map(function (item) {
63
50
  return ctx.transform('decryptFile', key, item);
64
51
  }));
65
52
  }
66
-
67
53
  return ctx.transform("decrypt".concat((0, _capitalize2.default)(object.objectType)), key, object);
68
54
  },
69
-
70
55
  /**
71
56
  * Decrypt an individual submit object from a cardAction activity
72
57
  * (object.objectType === 'submit')
@@ -80,7 +65,6 @@ var transforms = (0, _toArray.default)('inbound', {
80
65
  if (!object.inputs) {
81
66
  return _promise.default.resolve();
82
67
  }
83
-
84
68
  var decryptionFailureMessage = ctx.webex.internal.conversation.config.decryptionFailureMessage;
85
69
  return ctx.transform('decryptPropCardItem', 0, key, [object.inputs]).then(function (inputs) {
86
70
  object.inputs = JSON.parse(inputs[0]); // eslint-disable-line no-param-reassign
@@ -91,7 +75,6 @@ var transforms = (0, _toArray.default)('inbound', {
91
75
  return _promise.default.resolve(decryptionFailureMessage);
92
76
  });
93
77
  },
94
-
95
78
  /**
96
79
  * Decrypt an individual reaction2Summary activity (object.objectType === 'reaction2Summary')
97
80
  * @param {Object} ctx An object containing a webex instance and a transform
@@ -105,12 +88,10 @@ var transforms = (0, _toArray.default)('inbound', {
105
88
  if (!object.reactions) {
106
89
  return _promise.default.resolve();
107
90
  }
108
-
109
91
  return _promise.default.all(object.reactions.map(function (reaction) {
110
92
  return ctx.transform('decryptPropDisplayName', key, reaction);
111
93
  }));
112
94
  },
113
-
114
95
  /**
115
96
  * Decrypt an individual reaction2SelfSummary activity (object.objectType === 'reaction2SelfSummary')
116
97
  * @param {Object} ctx An object containing a webex instance and a transform
@@ -126,12 +107,10 @@ var transforms = (0, _toArray.default)('inbound', {
126
107
  if (!object.reactions) {
127
108
  return _promise.default.resolve();
128
109
  }
129
-
130
110
  return _promise.default.all(object.reactions.map(function (reaction) {
131
111
  return ctx.transform('decryptPropDisplayName', key, reaction);
132
112
  }));
133
113
  },
134
-
135
114
  /**
136
115
  * Decrypt an individual reaction2 activity (object.objectType === 'reaction2')
137
116
  * @param {Object} ctx An object containing a webex instance and a transform
@@ -144,7 +123,6 @@ var transforms = (0, _toArray.default)('inbound', {
144
123
  decryptReaction2: function decryptReaction2(ctx, key, object) {
145
124
  return ctx.transform('decryptPropDisplayName', key, object);
146
125
  },
147
-
148
126
  /**
149
127
  * Decrypt an individual threadObject
150
128
  * @param {Object} ctx An object containing a webex instance and a transform
@@ -153,16 +131,13 @@ var transforms = (0, _toArray.default)('inbound', {
153
131
  */
154
132
  decryptThread: function decryptThread(ctx, threadObject) {
155
133
  var promises = [];
156
-
157
134
  if (threadObject.childActivities && (0, _isArray.default)(threadObject.childActivities)) {
158
135
  promises = threadObject.childActivities.map(function (child) {
159
136
  return ctx.transform('decryptObject', null, child);
160
137
  });
161
138
  }
162
-
163
139
  return _promise.default.all(promises);
164
140
  },
165
-
166
141
  /**
167
142
  * Decrypt an individual meeting container activity
168
143
  * @param {Object} ctx An object containing a webex instance and a transform
@@ -172,12 +147,10 @@ var transforms = (0, _toArray.default)('inbound', {
172
147
  */
173
148
  decryptMeetingcontainer: function decryptMeetingcontainer(ctx, key, meetingContainerActivity) {
174
149
  var promises = [];
175
-
176
150
  if (meetingContainerActivity.displayName) {
177
151
  var usableKey = meetingContainerActivity.encryptionKeyUrl || key;
178
152
  promises.push(ctx.transform('decryptPropDisplayName', usableKey, meetingContainerActivity));
179
153
  }
180
-
181
154
  if (meetingContainerActivity.extensions) {
182
155
  var itemsToDecrypt = meetingContainerActivity.extensions.items.filter(function (item) {
183
156
  return item.data.objectType === 'recording';
@@ -186,10 +159,8 @@ var transforms = (0, _toArray.default)('inbound', {
186
159
  promises.push(ctx.transform('decryptPropTopic', itemToDecrypt.encryptionKeyUrl, itemToDecrypt.data));
187
160
  });
188
161
  }
189
-
190
162
  return _promise.default.all(promises);
191
163
  },
192
-
193
164
  /**
194
165
  * Decrypts a given conversation and it's activities by building an array of promises that call
195
166
  * decryptObject, which may then call other decrypt functions
@@ -201,42 +172,33 @@ var transforms = (0, _toArray.default)('inbound', {
201
172
  */
202
173
  decryptConversation: function decryptConversation(ctx, key, conversation) {
203
174
  var promises = [];
204
-
205
175
  if (conversation.activities.items) {
206
176
  promises.push(_promise.default.all(conversation.activities.items.map(function (item) {
207
177
  return ctx.transform('decryptObject', null, item);
208
178
  })));
209
179
  }
210
-
211
180
  var usableKey = conversation.encryptionKeyUrl || key;
212
181
  var decryptionFailureMessage = ctx.webex.internal.conversation.config.decryptionFailureMessage;
213
-
214
182
  if (usableKey) {
215
183
  promises.push(ctx.transform('decryptPropDisplayName', usableKey, conversation).catch(function (error) {
216
184
  ctx.webex.logger.warn('plugin-conversation: failed to decrypt display name of ', conversation.url, error);
217
-
218
185
  _promise.default.resolve(decryptionFailureMessage);
219
186
  }));
220
187
  promises.push(ctx.transform('decryptPropContent', usableKey, conversation));
221
188
  }
222
-
223
189
  if (conversation.avatarEncryptionKeyUrl) {
224
190
  promises.push(ctx.transform('decryptObject', conversation.avatarEncryptionKeyUrl, conversation.avatar));
225
- } // TODO (holsted 04/06/19): This was deprecated in favor of .previousValue below. I wanted to remove this entirely
191
+ }
192
+ // TODO (holsted 04/06/19): This was deprecated in favor of .previousValue below. I wanted to remove this entirely
226
193
  // but I wasn't sure if some open source use cases may be reading from cached conversations or not so leaving it for now.
227
-
228
-
229
194
  if (conversation.previous) {
230
195
  promises.push(ctx.transform('decryptPropDisplayName', usableKey, conversation.previous));
231
196
  }
232
-
233
197
  if (conversation.previousValue) {
234
198
  promises.push(ctx.transform('decryptPropDisplayName', usableKey, conversation.previousValue));
235
199
  }
236
-
237
200
  return _promise.default.all(promises);
238
201
  },
239
-
240
202
  /**
241
203
  * Decrypt an individual activity
242
204
  * @param {Object} ctx An object containing a webex instance and a transform
@@ -248,20 +210,19 @@ var transforms = (0, _toArray.default)('inbound', {
248
210
  if (!activity.encryptionKeyUrl && !(activity.object && activity.object.encryptionKeyUrl)) {
249
211
  return _promise.default.resolve(activity);
250
212
  }
251
-
252
213
  var keyUrl = activity.encryptionKeyUrl || activity.object.encryptionKeyUrl || key;
253
- var promises = []; // iterate and recursively decrypt over children objects
214
+ var promises = [];
215
+
216
+ // iterate and recursively decrypt over children objects
254
217
 
255
218
  if (activity.children && (0, _isArray.default)(activity.children)) {
256
219
  promises = activity.children.map(function (child) {
257
220
  return ctx.transform('decryptObject', keyUrl, child.activity);
258
221
  });
259
222
  }
260
-
261
223
  promises.push(ctx.transform('decryptObject', keyUrl, activity.object));
262
224
  return _promise.default.all(promises);
263
225
  },
264
-
265
226
  /**
266
227
  * Decrypts a microappInstance (recording) model
267
228
  * @param {Object} ctx An object containing a webex instance and transform prop
@@ -273,7 +234,6 @@ var transforms = (0, _toArray.default)('inbound', {
273
234
  decryptMicroappinstance: function decryptMicroappinstance(ctx, key, microappInstance) {
274
235
  return ctx.transform('decryptPropModel', key, microappInstance);
275
236
  },
276
-
277
237
  /**
278
238
  * Decrypts a comment...
279
239
  * @param {Object} ctx An object containing a webex instance and transform prop
@@ -283,16 +243,13 @@ var transforms = (0, _toArray.default)('inbound', {
283
243
  */
284
244
  decryptComment: function decryptComment(ctx, key, comment) {
285
245
  var promises = [ctx.transform('decryptPropDisplayName', key, comment), ctx.transform('decryptPropContent', key, comment)];
286
-
287
246
  if (comment.cards && (0, _isArray.default)(comment.cards)) {
288
247
  comment.cards.map(function (item, index) {
289
248
  return promises.push(ctx.transform('decryptPropCardItem', index, key, comment.cards));
290
249
  });
291
250
  }
292
-
293
251
  return _promise.default.all(promises);
294
252
  },
295
-
296
253
  /**
297
254
  * Decrypts a content field
298
255
  * @param {Object} ctx An object containing a webex instance and transform prop
@@ -304,10 +261,8 @@ var transforms = (0, _toArray.default)('inbound', {
304
261
  if (content.contentCategory === 'links') {
305
262
  return ctx.transform('decryptContentLinks', key, content);
306
263
  }
307
-
308
264
  return ctx.transform('decryptContentFiles', key, content);
309
265
  },
310
-
311
266
  /**
312
267
  * Decrypts a content field which contains files and possibly links
313
268
  * @param {Object} ctx An object containing a webex instance and transform prop
@@ -321,21 +276,17 @@ var transforms = (0, _toArray.default)('inbound', {
321
276
  if (!content.files || !content.files.items || !(0, _isArray.default)(content.files.items)) {
322
277
  return _promise.default.resolve();
323
278
  }
324
-
325
279
  var promises = content.files.items.map(function (item) {
326
280
  return ctx.transform('decryptObject', key, item);
327
281
  });
328
282
  promises.push(ctx.transform('decryptComment', key, content));
329
-
330
283
  if (content.links && content.links.items && (0, _isArray.default)(content.links.items)) {
331
284
  content.links.items.forEach(function (item) {
332
285
  return promises.push(ctx.transform('decryptObject', key, item));
333
286
  });
334
287
  }
335
-
336
288
  return _promise.default.all(promises);
337
289
  },
338
-
339
290
  /**
340
291
  * Decrypts a content field which contains links
341
292
  * @param {Object} ctx An object containing a webex instance and transform prop
@@ -348,14 +299,12 @@ var transforms = (0, _toArray.default)('inbound', {
348
299
  if (!content.links || !content.links.items || !(0, _isArray.default)(content.links.items)) {
349
300
  return _promise.default.resolve();
350
301
  }
351
-
352
302
  var promises = content.links.items.map(function (item) {
353
303
  return ctx.transform('decryptObject', key, item);
354
304
  });
355
305
  promises.push(ctx.transform('decryptComment', key, content));
356
306
  return _promise.default.all(promises);
357
307
  },
358
-
359
308
  /**
360
309
  * Decrypts what may be a meeting event?
361
310
  * @param {Object} ctx An object containing a webex instance and transform prop
@@ -365,14 +314,11 @@ var transforms = (0, _toArray.default)('inbound', {
365
314
  */
366
315
  decryptEvent: function decryptEvent(ctx, key, event) {
367
316
  var promises = [ctx.transform('decryptPropDisplayName', key, event)];
368
-
369
317
  if (event.location && event.location.split('.').length === 5) {
370
318
  promises.push(ctx.transform('decryptPropLocation', key, event));
371
319
  }
372
-
373
320
  return _promise.default.all(promises);
374
321
  },
375
-
376
322
  /**
377
323
  * Decrypts a file and it's transcodedContents if they exist
378
324
  * @param {Object} ctx An object containing a webex instance and transform prop
@@ -385,12 +331,10 @@ var transforms = (0, _toArray.default)('inbound', {
385
331
  if (file.encryptionKeyUrl && file.encryptionKeyUrl !== key) {
386
332
  key = file.encryptionKeyUrl;
387
333
  }
388
-
389
334
  return _promise.default.all([file.transcodedCollection && _promise.default.all(file.transcodedCollection.items.map(function (item) {
390
335
  return ctx.transform('decryptObject', key, item);
391
336
  })), ctx.transform('decryptPropScr', key, file), ctx.transform('decryptPropDisplayName', key, file), ctx.transform('decryptPropContent', key, file), file.image && ctx.transform('decryptPropScr', key, file.image)]);
392
337
  },
393
-
394
338
  /**
395
339
  * Decrypts a file and it's transcodedContents if they exist
396
340
  * @param {Object} ctx An object containing a webex instance and transform prop
@@ -401,7 +345,6 @@ var transforms = (0, _toArray.default)('inbound', {
401
345
  decryptLink: function decryptLink(ctx, key, link) {
402
346
  return _promise.default.all([ctx.transform('decryptPropSslr', key, link), ctx.transform('decryptPropDisplayName', key, link)]);
403
347
  },
404
-
405
348
  /**
406
349
  * Decrypts transcoded file content. Calls decryptFile
407
350
  * @param {Object} ctx An object containing a webex instance and transform prop
@@ -414,7 +357,6 @@ var transforms = (0, _toArray.default)('inbound', {
414
357
  return ctx.transform('decryptFile', key, item);
415
358
  }));
416
359
  },
417
-
418
360
  /**
419
361
  * Decrypts an image uri
420
362
  * @param {Object} ctx An object containing a webex instance and transform prop
@@ -425,7 +367,6 @@ var transforms = (0, _toArray.default)('inbound', {
425
367
  decryptImageURI: function decryptImageURI(ctx, key, imageURI) {
426
368
  return ctx.transform('decryptPropLocation', key, imageURI);
427
369
  },
428
-
429
370
  /**
430
371
  * The heart of most decryption logic ends here. Decrypting text.
431
372
  * @param {Object} ctx An object containing a webex instance and transform prop
@@ -438,7 +379,6 @@ var transforms = (0, _toArray.default)('inbound', {
438
379
  if (!object[name]) {
439
380
  return _promise.default.resolve();
440
381
  }
441
-
442
382
  var decryptionFailureMessage = ctx.webex.internal.conversation.config.decryptionFailureMessage;
443
383
  return ctx.webex.internal.encryption.decryptText(key, object[name]).then(function (plaintext) {
444
384
  if (ctx.webex.config.conversation.keepEncryptedProperties) {
@@ -454,7 +394,6 @@ var transforms = (0, _toArray.default)('inbound', {
454
394
  return _promise.default.resolve(decryptionFailureMessage);
455
395
  });
456
396
  },
457
-
458
397
  /**
459
398
  * Decrypting an element in an Array.
460
399
  * @param {Object} ctx An object containing a webex instance and transform prop
@@ -467,7 +406,6 @@ var transforms = (0, _toArray.default)('inbound', {
467
406
  if (!(0, _isInteger.default)(index) || !array || !(0, _isArray.default)(array) || index < 0 || index >= array.length || !(array[index] instanceof String || typeof array[index] === 'string')) {
468
407
  return _promise.default.resolve();
469
408
  }
470
-
471
409
  var decryptionFailureMessage = ctx.webex.internal.conversation.config.decryptionFailureMessage;
472
410
  return ctx.webex.internal.encryption.decryptText(key, array[index]).then(function (plaintext) {
473
411
  array[index] = plaintext; // eslint-disable-line no-param-reassign
@@ -478,7 +416,6 @@ var transforms = (0, _toArray.default)('inbound', {
478
416
  return _promise.default.resolve(decryptionFailureMessage);
479
417
  });
480
418
  },
481
-
482
419
  /**
483
420
  * Decrypts the src of an object (for images?)
484
421
  * @param {Object} ctx An object containing a webex instance and transform prop
@@ -491,7 +428,6 @@ var transforms = (0, _toArray.default)('inbound', {
491
428
  object.scr = scr; // eslint-disable-line no-param-reassign
492
429
  });
493
430
  },
494
-
495
431
  /**
496
432
  * Decrypts the sslr object
497
433
  * @param {Object} ctx An object containing a webex instance and transform prop
@@ -504,6 +440,7 @@ var transforms = (0, _toArray.default)('inbound', {
504
440
  object.sslr = sslr; // eslint-disable-line no-param-reassign
505
441
  });
506
442
  },
443
+
507
444
  decryptPropDisplayName: decryptTextProp('displayName'),
508
445
  decryptPropContent: decryptTextProp('content'),
509
446
  decryptPropModel: decryptTextProp('model'),
@@ -1 +1 @@
1
- {"version":3,"names":["decryptTextProp","name","ctx","key","object","transform","transforms","toArray","decryptObject","undefined","resolve","objectType","encryptionKeyUrl","all","files","items","map","item","decryptSubmit","inputs","decryptionFailureMessage","webex","internal","conversation","config","then","JSON","parse","catch","reason","logger","warn","decryptReaction2summary","reactions","reaction","decryptReaction2selfsummary","decryptReaction2","decryptThread","threadObject","promises","childActivities","child","decryptMeetingcontainer","meetingContainerActivity","displayName","usableKey","push","extensions","itemsToDecrypt","filter","data","forEach","itemToDecrypt","decryptConversation","activities","error","url","avatarEncryptionKeyUrl","avatar","previous","previousValue","decryptActivity","activity","keyUrl","children","decryptMicroappinstance","microappInstance","decryptComment","comment","cards","index","decryptContent","content","contentCategory","decryptContentFiles","links","decryptContentLinks","decryptEvent","event","location","split","length","decryptFile","file","transcodedCollection","image","decryptLink","link","decryptTranscodedContent","transcodedContent","decryptImageURI","imageURI","encryption","decryptText","plaintext","keepEncryptedProperties","encryptedPropName","decryptPropCardItem","array","String","decryptPropScr","decryptScr","scr","decryptPropSslr","sslr","decryptPropDisplayName","decryptPropContent","decryptPropModel","decryptPropLocation","decryptPropTopic"],"sources":["decryption-transforms.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {camelCase, capitalize, curry} from 'lodash';\n\nimport toArray from './to-array';\n\nconst decryptTextProp = curry((name, ctx, key, object) =>\n ctx.transform('decryptTextProp', name, key, object)\n);\n\n// eslint-disable-next-line import/prefer-default-export\nexport const transforms = toArray('inbound', {\n /**\n * This function is used recursively to decrypt various properties on conversations, activities, etc\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {String} key KMS encryption key url\n * @param {Object} object Generic object that you want to decrypt some property on based on the type\n * @returns {Promise} Returns a transform promise\n */\n decryptObject(ctx, key, object) {\n if (!object) {\n object = key; // eslint-disable-line no-param-reassign\n key = undefined; // eslint-disable-line no-param-reassign\n }\n\n if (!object) {\n return Promise.resolve();\n }\n\n if (!object.objectType) {\n return Promise.resolve();\n }\n\n if (!key && object.encryptionKeyUrl) {\n key = object.encryptionKeyUrl; // eslint-disable-line no-param-reassign\n }\n\n // Transcoded content was not showing up on the activities since the\n // decryptFile was not being called. Calling decryptFile for\n // transcodedContent fixes the issue.\n if (object.objectType === 'transcodedContent') {\n return Promise.all(object.files.items.map((item) => ctx.transform('decryptFile', key, item)));\n }\n\n return ctx.transform(`decrypt${capitalize(object.objectType)}`, key, object);\n },\n\n /**\n * Decrypt an individual submit object from a cardAction activity\n * (object.objectType === 'submit')\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {String} key KMS key\n * @param {Object} object An instance of a Webex submit object\n * these objects are returned when a user clicks on a Action.Submit button in a card\n * @returns {Promise} Returns a ctx.transform promise\n */\n decryptSubmit(ctx, key, object) {\n if (!object.inputs) {\n return Promise.resolve();\n }\n const {decryptionFailureMessage} = ctx.webex.internal.conversation.config;\n\n return ctx\n .transform('decryptPropCardItem', 0, key, [object.inputs])\n .then((inputs) => {\n object.inputs = JSON.parse(inputs[0]); // eslint-disable-line no-param-reassign\n })\n .catch((reason) => {\n ctx.webex.logger.warn(\n `plugin-conversation: failed to decrypt attachmentAction.inputs: ${reason}`\n );\n object.inputs = decryptionFailureMessage; // eslint-disable-line no-param-reassign\n\n return Promise.resolve(decryptionFailureMessage);\n });\n },\n\n /**\n * Decrypt an individual reaction2Summary activity (object.objectType === 'reaction2Summary')\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {String} key KMS key\n * @param {Object} object An instance of a Webex reaction2Summary object\n * these objects are returned by various conversation APIs and over mercury\n * represents an aggregated summary of all reactions to a specific activity\n * @returns {Promise} Returns a ctx.transform promise\n */\n decryptReaction2summary(ctx, key, object) {\n if (!object.reactions) {\n return Promise.resolve();\n }\n\n return Promise.all(\n object.reactions.map((reaction) => ctx.transform('decryptPropDisplayName', key, reaction))\n );\n },\n\n /**\n * Decrypt an individual reaction2SelfSummary activity (object.objectType === 'reaction2SelfSummary')\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {String} key KMS key\n * @param {Object} object An instance of a Webex reaction2SelfSummary object\n * these objects are returned by various conversation APIs and NOT over mercury\n * they are ONLY received by the self user\n * they represent ONLY the self user's reactions and are used for enforcing\n * limit of times they can react to a specific activity\n * @returns {Promise} Returns a ctx.transform promise\n */\n decryptReaction2selfsummary(ctx, key, object) {\n if (!object.reactions) {\n return Promise.resolve();\n }\n\n return Promise.all(\n object.reactions.map((reaction) => ctx.transform('decryptPropDisplayName', key, reaction))\n );\n },\n\n /**\n * Decrypt an individual reaction2 activity (object.objectType === 'reaction2')\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {String} key KMS key\n * @param {Object} object An instance of a Webex reaction2 object\n * these objects are returned by various conversation APIs and over mercury\n * ONLY self users receive these objects\n * @returns {Promise} Returns a ctx.transform promise\n */\n decryptReaction2(ctx, key, object) {\n return ctx.transform('decryptPropDisplayName', key, object);\n },\n\n /**\n * Decrypt an individual threadObject\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {Object} threadObject An instance of a Webex threadObject (the objects returned by the /conversation/api/v1/threads api)\n * @returns {Promise} Returns a ctx.transform promise\n */\n decryptThread(ctx, threadObject) {\n let promises = [];\n\n if (threadObject.childActivities && Array.isArray(threadObject.childActivities)) {\n promises = threadObject.childActivities.map((child) =>\n ctx.transform('decryptObject', null, child)\n );\n }\n\n return Promise.all(promises);\n },\n\n /**\n * Decrypt an individual meeting container activity\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {object} key KMS encryption key url\n * @param {Object} meetingContainerActivity An instance of a Webex meeting container activity\n * @returns {Promise} Returns a ctx.transform promise\n */\n decryptMeetingcontainer(ctx, key, meetingContainerActivity) {\n const promises = [];\n\n if (meetingContainerActivity.displayName) {\n const usableKey = meetingContainerActivity.encryptionKeyUrl || key;\n\n promises.push(ctx.transform('decryptPropDisplayName', usableKey, meetingContainerActivity));\n }\n\n if (meetingContainerActivity.extensions) {\n const itemsToDecrypt = meetingContainerActivity.extensions.items.filter(\n (item) => item.data.objectType === 'recording'\n );\n\n itemsToDecrypt.forEach((itemToDecrypt) => {\n promises.push(\n ctx.transform('decryptPropTopic', itemToDecrypt.encryptionKeyUrl, itemToDecrypt.data)\n );\n });\n }\n\n return Promise.all(promises);\n },\n\n /**\n * Decrypts a given conversation and it's activities by building an array of promises that call\n * decryptObject, which may then call other decrypt functions\n *\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {String} key KMS encryption key url (or actual key?)\n * @param {Object} conversation A Webex conversation object\n * @returns {Promise} Returns the result of Promise.all\n */\n decryptConversation(ctx, key, conversation) {\n const promises = [];\n\n if (conversation.activities.items) {\n promises.push(\n Promise.all(\n conversation.activities.items.map((item) => ctx.transform('decryptObject', null, item))\n )\n );\n }\n\n const usableKey = conversation.encryptionKeyUrl || key;\n const {decryptionFailureMessage} = ctx.webex.internal.conversation.config;\n\n if (usableKey) {\n promises.push(\n ctx.transform('decryptPropDisplayName', usableKey, conversation).catch((error) => {\n ctx.webex.logger.warn(\n 'plugin-conversation: failed to decrypt display name of ',\n conversation.url,\n error\n );\n Promise.resolve(decryptionFailureMessage);\n })\n );\n promises.push(ctx.transform('decryptPropContent', usableKey, conversation));\n }\n if (conversation.avatarEncryptionKeyUrl) {\n promises.push(\n ctx.transform('decryptObject', conversation.avatarEncryptionKeyUrl, conversation.avatar)\n );\n }\n // TODO (holsted 04/06/19): This was deprecated in favor of .previousValue below. I wanted to remove this entirely\n // but I wasn't sure if some open source use cases may be reading from cached conversations or not so leaving it for now.\n if (conversation.previous) {\n promises.push(ctx.transform('decryptPropDisplayName', usableKey, conversation.previous));\n }\n if (conversation.previousValue) {\n promises.push(ctx.transform('decryptPropDisplayName', usableKey, conversation.previousValue));\n }\n\n return Promise.all(promises);\n },\n\n /**\n * Decrypt an individual activity\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {String} key KMS encryption key url (or actual key?)\n * @param {Object} activity An instance of a Webex activity\n * @returns {Promise} Returns a ctx.transform promise\n */\n decryptActivity(ctx, key, activity) {\n if (!activity.encryptionKeyUrl && !(activity.object && activity.object.encryptionKeyUrl)) {\n return Promise.resolve(activity);\n }\n\n const keyUrl = activity.encryptionKeyUrl || activity.object.encryptionKeyUrl || key;\n\n let promises = [];\n\n // iterate and recursively decrypt over children objects\n\n if (activity.children && Array.isArray(activity.children)) {\n promises = activity.children.map((child) =>\n ctx.transform('decryptObject', keyUrl, child.activity)\n );\n }\n\n promises.push(ctx.transform('decryptObject', keyUrl, activity.object));\n\n return Promise.all(promises);\n },\n\n /**\n * Decrypts a microappInstance (recording) model\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} microappInstance A microappInstance which includes several properties of a recording\n * @param {String} microappInstance.model An encrypted string which decrypts to an object\n * @returns {Promise} Returns a context transform\n */\n decryptMicroappinstance(ctx, key, microappInstance) {\n return ctx.transform('decryptPropModel', key, microappInstance);\n },\n\n /**\n * Decrypts a comment...\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} comment A comment object with a displayName and content (encrypted)\n * @returns {Promise} Returns the results of Promise.all on two transforms\n */\n decryptComment(ctx, key, comment) {\n const promises = [\n ctx.transform('decryptPropDisplayName', key, comment),\n ctx.transform('decryptPropContent', key, comment),\n ];\n\n if (comment.cards && Array.isArray(comment.cards)) {\n comment.cards.map((item, index) =>\n promises.push(ctx.transform('decryptPropCardItem', index, key, comment.cards))\n );\n }\n\n return Promise.all(promises);\n },\n\n /**\n * Decrypts a content field\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} content An object with properties to be decrypted\n * @returns {Promise} A promise that will return when the decryption has finished\n */\n decryptContent(ctx, key, content) {\n if (content.contentCategory === 'links') {\n return ctx.transform('decryptContentLinks', key, content);\n }\n\n return ctx.transform('decryptContentFiles', key, content);\n },\n\n /**\n * Decrypts a content field which contains files and possibly links\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} content An object with properties to be decrypted\n * @param {Array} content.files An array of files to decrypt by calling decryptObject\n * @param {Array} content.links An array of links to decrypt by calling decryptObject\n * @returns {Promise} A promise that will return when the decryption has finished\n */\n decryptContentFiles(ctx, key, content) {\n if (!content.files || !content.files.items || !Array.isArray(content.files.items)) {\n return Promise.resolve();\n }\n\n const promises = content.files.items.map((item) => ctx.transform('decryptObject', key, item));\n\n promises.push(ctx.transform('decryptComment', key, content));\n\n if (content.links && content.links.items && Array.isArray(content.links.items)) {\n content.links.items.forEach((item) =>\n promises.push(ctx.transform('decryptObject', key, item))\n );\n }\n\n return Promise.all(promises);\n },\n\n /**\n * Decrypts a content field which contains links\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} content An object with properties to be decrypted\n * @param {Array} content.links An array of links to decrypt by calling decryptObject\n * @returns {Promise} A promise that will return when the decryption has finished\n */\n decryptContentLinks(ctx, key, content) {\n if (!content.links || !content.links.items || !Array.isArray(content.links.items)) {\n return Promise.resolve();\n }\n\n const promises = content.links.items.map((item) => ctx.transform('decryptObject', key, item));\n\n promises.push(ctx.transform('decryptComment', key, content));\n\n return Promise.all(promises);\n },\n\n /**\n * Decrypts what may be a meeting event?\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} event An object with a display name and location to be decrypted\n * @returns {Promise} Returns the result of Promise.all\n */\n decryptEvent(ctx, key, event) {\n const promises = [ctx.transform('decryptPropDisplayName', key, event)];\n\n if (event.location && event.location.split('.').length === 5) {\n promises.push(ctx.transform('decryptPropLocation', key, event));\n }\n\n return Promise.all(promises);\n },\n\n /**\n * Decrypts a file and it's transcodedContents if they exist\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} file A file object with file props an optional transcodedCollection to decrypt\n * @returns {Promise} Returns the result of Promise.all\n */\n decryptFile(ctx, key, file) {\n // using object encryption keyUrl for images instead of activity encryptionKeyUrl\n if (file.encryptionKeyUrl && file.encryptionKeyUrl !== key) {\n key = file.encryptionKeyUrl;\n }\n\n return Promise.all([\n file.transcodedCollection &&\n Promise.all(\n file.transcodedCollection.items.map((item) => ctx.transform('decryptObject', key, item))\n ),\n ctx.transform('decryptPropScr', key, file),\n ctx.transform('decryptPropDisplayName', key, file),\n ctx.transform('decryptPropContent', key, file),\n file.image && ctx.transform('decryptPropScr', key, file.image),\n ]);\n },\n\n /**\n * Decrypts a file and it's transcodedContents if they exist\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} link A link object with a URL to decrypt\n * @returns {Promise} Returns the result of Promise.all\n */\n decryptLink(ctx, key, link) {\n return Promise.all([\n ctx.transform('decryptPropSslr', key, link),\n ctx.transform('decryptPropDisplayName', key, link),\n ]);\n },\n\n /**\n * Decrypts transcoded file content. Calls decryptFile\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} transcodedContent Transcoded content with a files prop\n * @returns {Promise} Returns the result of Promise.all\n */\n decryptTranscodedContent(ctx, key, transcodedContent) {\n return Promise.all(\n transcodedContent.files.items.map((item) => ctx.transform('decryptFile', key, item))\n );\n },\n\n /**\n * Decrypts an image uri\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {String} imageURI URI of the image to decrypt\n * @returns {Promise} Returns a promise.\n */\n decryptImageURI(ctx, key, imageURI) {\n return ctx.transform('decryptPropLocation', key, imageURI);\n },\n\n /**\n * The heart of most decryption logic ends here. Decrypting text.\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} name Property of an object to be decrypted\n * @param {String} key KMS key\n * @param {Object} object A generic object with text props to be decrypted\n * @returns {Promise} Returns a lonely Promise\n */\n decryptTextProp(ctx, name, key, object) {\n if (!object[name]) {\n return Promise.resolve();\n }\n const {decryptionFailureMessage} = ctx.webex.internal.conversation.config;\n\n return ctx.webex.internal.encryption\n .decryptText(key, object[name])\n .then((plaintext) => {\n if (ctx.webex.config.conversation.keepEncryptedProperties) {\n const encryptedPropName = camelCase(`encrypted_${name}`);\n\n object[encryptedPropName] = object[name]; // eslint-disable-line no-param-reassign\n }\n\n object[name] = plaintext; // eslint-disable-line no-param-reassign\n })\n .catch((reason) => {\n ctx.webex.logger.warn(`plugin-conversation: failed to decrypt ${name} `, reason);\n object[name] = decryptionFailureMessage; // eslint-disable-line no-param-reassign\n\n return Promise.resolve(decryptionFailureMessage);\n });\n },\n\n /**\n * Decrypting an element in an Array.\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {Integer} index Property of an object to be decrypted\n * @param {String} key KMS key\n * @param {Array} array An array of Strings to be decrypted\n * @returns {Promise} Returns a lonely Promise\n */\n decryptPropCardItem(ctx, index, key, array) {\n if (\n !Number.isInteger(index) ||\n !array ||\n !Array.isArray(array) ||\n index < 0 ||\n index >= array.length ||\n !(array[index] instanceof String || typeof array[index] === 'string')\n ) {\n return Promise.resolve();\n }\n const {decryptionFailureMessage} = ctx.webex.internal.conversation.config;\n\n return ctx.webex.internal.encryption\n .decryptText(key, array[index])\n .then((plaintext) => {\n array[index] = plaintext; // eslint-disable-line no-param-reassign\n })\n .catch((reason) => {\n ctx.webex.logger.warn(`plugin-conversation: failed to decrypt card at ${index} `, reason);\n array[index] = decryptionFailureMessage; // eslint-disable-line no-param-reassign\n\n return Promise.resolve(decryptionFailureMessage);\n });\n },\n /**\n * Decrypts the src of an object (for images?)\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} object An object with a scr property to be decrypted\n * @returns {Promise} Returns a promise\n */\n decryptPropScr(ctx, key, object) {\n return ctx.webex.internal.encryption.decryptScr(key, object.scr).then((scr) => {\n object.scr = scr; // eslint-disable-line no-param-reassign\n });\n },\n\n /**\n * Decrypts the sslr object\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} object An object with a sslr property to be decrypted\n * @returns {Promise} Returns a promise\n */\n decryptPropSslr(ctx, key, object) {\n return ctx.webex.internal.encryption.decryptScr(key, object.sslr).then((sslr) => {\n object.sslr = sslr; // eslint-disable-line no-param-reassign\n });\n },\n\n decryptPropDisplayName: decryptTextProp('displayName'),\n\n decryptPropContent: decryptTextProp('content'),\n\n decryptPropModel: decryptTextProp('model'),\n\n decryptPropLocation: decryptTextProp('location'),\n\n decryptPropTopic: decryptTextProp('topic'),\n});\n"],"mappings":"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"}
1
+ {"version":3,"names":["decryptTextProp","name","ctx","key","object","transform","transforms","toArray","decryptObject","undefined","resolve","objectType","encryptionKeyUrl","all","files","items","map","item","decryptSubmit","inputs","decryptionFailureMessage","webex","internal","conversation","config","then","JSON","parse","catch","reason","logger","warn","decryptReaction2summary","reactions","reaction","decryptReaction2selfsummary","decryptReaction2","decryptThread","threadObject","promises","childActivities","child","decryptMeetingcontainer","meetingContainerActivity","displayName","usableKey","push","extensions","itemsToDecrypt","filter","data","forEach","itemToDecrypt","decryptConversation","activities","error","url","avatarEncryptionKeyUrl","avatar","previous","previousValue","decryptActivity","activity","keyUrl","children","decryptMicroappinstance","microappInstance","decryptComment","comment","cards","index","decryptContent","content","contentCategory","decryptContentFiles","links","decryptContentLinks","decryptEvent","event","location","split","length","decryptFile","file","transcodedCollection","image","decryptLink","link","decryptTranscodedContent","transcodedContent","decryptImageURI","imageURI","encryption","decryptText","plaintext","keepEncryptedProperties","encryptedPropName","decryptPropCardItem","array","String","decryptPropScr","decryptScr","scr","decryptPropSslr","sslr","decryptPropDisplayName","decryptPropContent","decryptPropModel","decryptPropLocation","decryptPropTopic"],"sources":["decryption-transforms.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {camelCase, capitalize, curry} from 'lodash';\n\nimport toArray from './to-array';\n\nconst decryptTextProp = curry((name, ctx, key, object) =>\n ctx.transform('decryptTextProp', name, key, object)\n);\n\n// eslint-disable-next-line import/prefer-default-export\nexport const transforms = toArray('inbound', {\n /**\n * This function is used recursively to decrypt various properties on conversations, activities, etc\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {String} key KMS encryption key url\n * @param {Object} object Generic object that you want to decrypt some property on based on the type\n * @returns {Promise} Returns a transform promise\n */\n decryptObject(ctx, key, object) {\n if (!object) {\n object = key; // eslint-disable-line no-param-reassign\n key = undefined; // eslint-disable-line no-param-reassign\n }\n\n if (!object) {\n return Promise.resolve();\n }\n\n if (!object.objectType) {\n return Promise.resolve();\n }\n\n if (!key && object.encryptionKeyUrl) {\n key = object.encryptionKeyUrl; // eslint-disable-line no-param-reassign\n }\n\n // Transcoded content was not showing up on the activities since the\n // decryptFile was not being called. Calling decryptFile for\n // transcodedContent fixes the issue.\n if (object.objectType === 'transcodedContent') {\n return Promise.all(object.files.items.map((item) => ctx.transform('decryptFile', key, item)));\n }\n\n return ctx.transform(`decrypt${capitalize(object.objectType)}`, key, object);\n },\n\n /**\n * Decrypt an individual submit object from a cardAction activity\n * (object.objectType === 'submit')\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {String} key KMS key\n * @param {Object} object An instance of a Webex submit object\n * these objects are returned when a user clicks on a Action.Submit button in a card\n * @returns {Promise} Returns a ctx.transform promise\n */\n decryptSubmit(ctx, key, object) {\n if (!object.inputs) {\n return Promise.resolve();\n }\n const {decryptionFailureMessage} = ctx.webex.internal.conversation.config;\n\n return ctx\n .transform('decryptPropCardItem', 0, key, [object.inputs])\n .then((inputs) => {\n object.inputs = JSON.parse(inputs[0]); // eslint-disable-line no-param-reassign\n })\n .catch((reason) => {\n ctx.webex.logger.warn(\n `plugin-conversation: failed to decrypt attachmentAction.inputs: ${reason}`\n );\n object.inputs = decryptionFailureMessage; // eslint-disable-line no-param-reassign\n\n return Promise.resolve(decryptionFailureMessage);\n });\n },\n\n /**\n * Decrypt an individual reaction2Summary activity (object.objectType === 'reaction2Summary')\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {String} key KMS key\n * @param {Object} object An instance of a Webex reaction2Summary object\n * these objects are returned by various conversation APIs and over mercury\n * represents an aggregated summary of all reactions to a specific activity\n * @returns {Promise} Returns a ctx.transform promise\n */\n decryptReaction2summary(ctx, key, object) {\n if (!object.reactions) {\n return Promise.resolve();\n }\n\n return Promise.all(\n object.reactions.map((reaction) => ctx.transform('decryptPropDisplayName', key, reaction))\n );\n },\n\n /**\n * Decrypt an individual reaction2SelfSummary activity (object.objectType === 'reaction2SelfSummary')\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {String} key KMS key\n * @param {Object} object An instance of a Webex reaction2SelfSummary object\n * these objects are returned by various conversation APIs and NOT over mercury\n * they are ONLY received by the self user\n * they represent ONLY the self user's reactions and are used for enforcing\n * limit of times they can react to a specific activity\n * @returns {Promise} Returns a ctx.transform promise\n */\n decryptReaction2selfsummary(ctx, key, object) {\n if (!object.reactions) {\n return Promise.resolve();\n }\n\n return Promise.all(\n object.reactions.map((reaction) => ctx.transform('decryptPropDisplayName', key, reaction))\n );\n },\n\n /**\n * Decrypt an individual reaction2 activity (object.objectType === 'reaction2')\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {String} key KMS key\n * @param {Object} object An instance of a Webex reaction2 object\n * these objects are returned by various conversation APIs and over mercury\n * ONLY self users receive these objects\n * @returns {Promise} Returns a ctx.transform promise\n */\n decryptReaction2(ctx, key, object) {\n return ctx.transform('decryptPropDisplayName', key, object);\n },\n\n /**\n * Decrypt an individual threadObject\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {Object} threadObject An instance of a Webex threadObject (the objects returned by the /conversation/api/v1/threads api)\n * @returns {Promise} Returns a ctx.transform promise\n */\n decryptThread(ctx, threadObject) {\n let promises = [];\n\n if (threadObject.childActivities && Array.isArray(threadObject.childActivities)) {\n promises = threadObject.childActivities.map((child) =>\n ctx.transform('decryptObject', null, child)\n );\n }\n\n return Promise.all(promises);\n },\n\n /**\n * Decrypt an individual meeting container activity\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {object} key KMS encryption key url\n * @param {Object} meetingContainerActivity An instance of a Webex meeting container activity\n * @returns {Promise} Returns a ctx.transform promise\n */\n decryptMeetingcontainer(ctx, key, meetingContainerActivity) {\n const promises = [];\n\n if (meetingContainerActivity.displayName) {\n const usableKey = meetingContainerActivity.encryptionKeyUrl || key;\n\n promises.push(ctx.transform('decryptPropDisplayName', usableKey, meetingContainerActivity));\n }\n\n if (meetingContainerActivity.extensions) {\n const itemsToDecrypt = meetingContainerActivity.extensions.items.filter(\n (item) => item.data.objectType === 'recording'\n );\n\n itemsToDecrypt.forEach((itemToDecrypt) => {\n promises.push(\n ctx.transform('decryptPropTopic', itemToDecrypt.encryptionKeyUrl, itemToDecrypt.data)\n );\n });\n }\n\n return Promise.all(promises);\n },\n\n /**\n * Decrypts a given conversation and it's activities by building an array of promises that call\n * decryptObject, which may then call other decrypt functions\n *\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {String} key KMS encryption key url (or actual key?)\n * @param {Object} conversation A Webex conversation object\n * @returns {Promise} Returns the result of Promise.all\n */\n decryptConversation(ctx, key, conversation) {\n const promises = [];\n\n if (conversation.activities.items) {\n promises.push(\n Promise.all(\n conversation.activities.items.map((item) => ctx.transform('decryptObject', null, item))\n )\n );\n }\n\n const usableKey = conversation.encryptionKeyUrl || key;\n const {decryptionFailureMessage} = ctx.webex.internal.conversation.config;\n\n if (usableKey) {\n promises.push(\n ctx.transform('decryptPropDisplayName', usableKey, conversation).catch((error) => {\n ctx.webex.logger.warn(\n 'plugin-conversation: failed to decrypt display name of ',\n conversation.url,\n error\n );\n Promise.resolve(decryptionFailureMessage);\n })\n );\n promises.push(ctx.transform('decryptPropContent', usableKey, conversation));\n }\n if (conversation.avatarEncryptionKeyUrl) {\n promises.push(\n ctx.transform('decryptObject', conversation.avatarEncryptionKeyUrl, conversation.avatar)\n );\n }\n // TODO (holsted 04/06/19): This was deprecated in favor of .previousValue below. I wanted to remove this entirely\n // but I wasn't sure if some open source use cases may be reading from cached conversations or not so leaving it for now.\n if (conversation.previous) {\n promises.push(ctx.transform('decryptPropDisplayName', usableKey, conversation.previous));\n }\n if (conversation.previousValue) {\n promises.push(ctx.transform('decryptPropDisplayName', usableKey, conversation.previousValue));\n }\n\n return Promise.all(promises);\n },\n\n /**\n * Decrypt an individual activity\n * @param {Object} ctx An object containing a webex instance and a transform\n * @param {String} key KMS encryption key url (or actual key?)\n * @param {Object} activity An instance of a Webex activity\n * @returns {Promise} Returns a ctx.transform promise\n */\n decryptActivity(ctx, key, activity) {\n if (!activity.encryptionKeyUrl && !(activity.object && activity.object.encryptionKeyUrl)) {\n return Promise.resolve(activity);\n }\n\n const keyUrl = activity.encryptionKeyUrl || activity.object.encryptionKeyUrl || key;\n\n let promises = [];\n\n // iterate and recursively decrypt over children objects\n\n if (activity.children && Array.isArray(activity.children)) {\n promises = activity.children.map((child) =>\n ctx.transform('decryptObject', keyUrl, child.activity)\n );\n }\n\n promises.push(ctx.transform('decryptObject', keyUrl, activity.object));\n\n return Promise.all(promises);\n },\n\n /**\n * Decrypts a microappInstance (recording) model\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} microappInstance A microappInstance which includes several properties of a recording\n * @param {String} microappInstance.model An encrypted string which decrypts to an object\n * @returns {Promise} Returns a context transform\n */\n decryptMicroappinstance(ctx, key, microappInstance) {\n return ctx.transform('decryptPropModel', key, microappInstance);\n },\n\n /**\n * Decrypts a comment...\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} comment A comment object with a displayName and content (encrypted)\n * @returns {Promise} Returns the results of Promise.all on two transforms\n */\n decryptComment(ctx, key, comment) {\n const promises = [\n ctx.transform('decryptPropDisplayName', key, comment),\n ctx.transform('decryptPropContent', key, comment),\n ];\n\n if (comment.cards && Array.isArray(comment.cards)) {\n comment.cards.map((item, index) =>\n promises.push(ctx.transform('decryptPropCardItem', index, key, comment.cards))\n );\n }\n\n return Promise.all(promises);\n },\n\n /**\n * Decrypts a content field\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} content An object with properties to be decrypted\n * @returns {Promise} A promise that will return when the decryption has finished\n */\n decryptContent(ctx, key, content) {\n if (content.contentCategory === 'links') {\n return ctx.transform('decryptContentLinks', key, content);\n }\n\n return ctx.transform('decryptContentFiles', key, content);\n },\n\n /**\n * Decrypts a content field which contains files and possibly links\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} content An object with properties to be decrypted\n * @param {Array} content.files An array of files to decrypt by calling decryptObject\n * @param {Array} content.links An array of links to decrypt by calling decryptObject\n * @returns {Promise} A promise that will return when the decryption has finished\n */\n decryptContentFiles(ctx, key, content) {\n if (!content.files || !content.files.items || !Array.isArray(content.files.items)) {\n return Promise.resolve();\n }\n\n const promises = content.files.items.map((item) => ctx.transform('decryptObject', key, item));\n\n promises.push(ctx.transform('decryptComment', key, content));\n\n if (content.links && content.links.items && Array.isArray(content.links.items)) {\n content.links.items.forEach((item) =>\n promises.push(ctx.transform('decryptObject', key, item))\n );\n }\n\n return Promise.all(promises);\n },\n\n /**\n * Decrypts a content field which contains links\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} content An object with properties to be decrypted\n * @param {Array} content.links An array of links to decrypt by calling decryptObject\n * @returns {Promise} A promise that will return when the decryption has finished\n */\n decryptContentLinks(ctx, key, content) {\n if (!content.links || !content.links.items || !Array.isArray(content.links.items)) {\n return Promise.resolve();\n }\n\n const promises = content.links.items.map((item) => ctx.transform('decryptObject', key, item));\n\n promises.push(ctx.transform('decryptComment', key, content));\n\n return Promise.all(promises);\n },\n\n /**\n * Decrypts what may be a meeting event?\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} event An object with a display name and location to be decrypted\n * @returns {Promise} Returns the result of Promise.all\n */\n decryptEvent(ctx, key, event) {\n const promises = [ctx.transform('decryptPropDisplayName', key, event)];\n\n if (event.location && event.location.split('.').length === 5) {\n promises.push(ctx.transform('decryptPropLocation', key, event));\n }\n\n return Promise.all(promises);\n },\n\n /**\n * Decrypts a file and it's transcodedContents if they exist\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} file A file object with file props an optional transcodedCollection to decrypt\n * @returns {Promise} Returns the result of Promise.all\n */\n decryptFile(ctx, key, file) {\n // using object encryption keyUrl for images instead of activity encryptionKeyUrl\n if (file.encryptionKeyUrl && file.encryptionKeyUrl !== key) {\n key = file.encryptionKeyUrl;\n }\n\n return Promise.all([\n file.transcodedCollection &&\n Promise.all(\n file.transcodedCollection.items.map((item) => ctx.transform('decryptObject', key, item))\n ),\n ctx.transform('decryptPropScr', key, file),\n ctx.transform('decryptPropDisplayName', key, file),\n ctx.transform('decryptPropContent', key, file),\n file.image && ctx.transform('decryptPropScr', key, file.image),\n ]);\n },\n\n /**\n * Decrypts a file and it's transcodedContents if they exist\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} link A link object with a URL to decrypt\n * @returns {Promise} Returns the result of Promise.all\n */\n decryptLink(ctx, key, link) {\n return Promise.all([\n ctx.transform('decryptPropSslr', key, link),\n ctx.transform('decryptPropDisplayName', key, link),\n ]);\n },\n\n /**\n * Decrypts transcoded file content. Calls decryptFile\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} transcodedContent Transcoded content with a files prop\n * @returns {Promise} Returns the result of Promise.all\n */\n decryptTranscodedContent(ctx, key, transcodedContent) {\n return Promise.all(\n transcodedContent.files.items.map((item) => ctx.transform('decryptFile', key, item))\n );\n },\n\n /**\n * Decrypts an image uri\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {String} imageURI URI of the image to decrypt\n * @returns {Promise} Returns a promise.\n */\n decryptImageURI(ctx, key, imageURI) {\n return ctx.transform('decryptPropLocation', key, imageURI);\n },\n\n /**\n * The heart of most decryption logic ends here. Decrypting text.\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} name Property of an object to be decrypted\n * @param {String} key KMS key\n * @param {Object} object A generic object with text props to be decrypted\n * @returns {Promise} Returns a lonely Promise\n */\n decryptTextProp(ctx, name, key, object) {\n if (!object[name]) {\n return Promise.resolve();\n }\n const {decryptionFailureMessage} = ctx.webex.internal.conversation.config;\n\n return ctx.webex.internal.encryption\n .decryptText(key, object[name])\n .then((plaintext) => {\n if (ctx.webex.config.conversation.keepEncryptedProperties) {\n const encryptedPropName = camelCase(`encrypted_${name}`);\n\n object[encryptedPropName] = object[name]; // eslint-disable-line no-param-reassign\n }\n\n object[name] = plaintext; // eslint-disable-line no-param-reassign\n })\n .catch((reason) => {\n ctx.webex.logger.warn(`plugin-conversation: failed to decrypt ${name} `, reason);\n object[name] = decryptionFailureMessage; // eslint-disable-line no-param-reassign\n\n return Promise.resolve(decryptionFailureMessage);\n });\n },\n\n /**\n * Decrypting an element in an Array.\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {Integer} index Property of an object to be decrypted\n * @param {String} key KMS key\n * @param {Array} array An array of Strings to be decrypted\n * @returns {Promise} Returns a lonely Promise\n */\n decryptPropCardItem(ctx, index, key, array) {\n if (\n !Number.isInteger(index) ||\n !array ||\n !Array.isArray(array) ||\n index < 0 ||\n index >= array.length ||\n !(array[index] instanceof String || typeof array[index] === 'string')\n ) {\n return Promise.resolve();\n }\n const {decryptionFailureMessage} = ctx.webex.internal.conversation.config;\n\n return ctx.webex.internal.encryption\n .decryptText(key, array[index])\n .then((plaintext) => {\n array[index] = plaintext; // eslint-disable-line no-param-reassign\n })\n .catch((reason) => {\n ctx.webex.logger.warn(`plugin-conversation: failed to decrypt card at ${index} `, reason);\n array[index] = decryptionFailureMessage; // eslint-disable-line no-param-reassign\n\n return Promise.resolve(decryptionFailureMessage);\n });\n },\n /**\n * Decrypts the src of an object (for images?)\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} object An object with a scr property to be decrypted\n * @returns {Promise} Returns a promise\n */\n decryptPropScr(ctx, key, object) {\n return ctx.webex.internal.encryption.decryptScr(key, object.scr).then((scr) => {\n object.scr = scr; // eslint-disable-line no-param-reassign\n });\n },\n\n /**\n * Decrypts the sslr object\n * @param {Object} ctx An object containing a webex instance and transform prop\n * @param {String} key KMS key\n * @param {Object} object An object with a sslr property to be decrypted\n * @returns {Promise} Returns a promise\n */\n decryptPropSslr(ctx, key, object) {\n return ctx.webex.internal.encryption.decryptScr(key, object.sslr).then((sslr) => {\n object.sslr = sslr; // eslint-disable-line no-param-reassign\n });\n },\n\n decryptPropDisplayName: decryptTextProp('displayName'),\n\n decryptPropContent: decryptTextProp('content'),\n\n decryptPropModel: decryptTextProp('model'),\n\n decryptPropLocation: decryptTextProp('location'),\n\n decryptPropTopic: decryptTextProp('topic'),\n});\n"],"mappings":"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"}