@webex/internal-plugin-team 3.0.0-beta.3 → 3.0.0-beta.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/team.js CHANGED
@@ -1,50 +1,37 @@
1
1
  "use strict";
2
2
 
3
+ var _Object$keys = require("@babel/runtime-corejs2/core-js/object/keys");
4
+ var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols");
5
+ var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
6
+ var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors");
7
+ var _Object$defineProperties = require("@babel/runtime-corejs2/core-js/object/define-properties");
8
+ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
3
9
  var _Array$from = require("@babel/runtime-corejs2/core-js/array/from");
4
-
5
10
  var _Symbol = require("@babel/runtime-corejs2/core-js/symbol");
6
-
7
11
  var _Symbol$iterator = require("@babel/runtime-corejs2/core-js/symbol/iterator");
8
-
9
12
  var _Array$isArray = require("@babel/runtime-corejs2/core-js/array/is-array");
10
-
11
- var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
12
-
13
13
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
14
-
15
14
  _Object$defineProperty(exports, "__esModule", {
16
15
  value: true
17
16
  });
18
-
19
17
  exports.default = void 0;
20
-
21
18
  var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
22
-
23
19
  var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
24
-
25
- var _assign = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/assign"));
26
-
27
20
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
28
-
21
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
29
22
  var _uniq2 = _interopRequireDefault(require("lodash/uniq"));
30
-
31
23
  var _pick2 = _interopRequireDefault(require("lodash/pick"));
32
-
33
24
  var _find2 = _interopRequireDefault(require("lodash/find"));
34
-
35
25
  var _querystring = _interopRequireDefault(require("querystring"));
36
-
26
+ var _uuid = _interopRequireDefault(require("uuid"));
37
27
  var _webexCore = require("@webex/webex-core");
38
-
39
28
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof _Symbol !== "undefined" && o[_Symbol$iterator] || o["@@iterator"]; if (!it) { if (_Array$isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
40
-
41
29
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return _Array$from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
42
-
43
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
44
-
30
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
31
+ function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
32
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
45
33
  var Team = _webexCore.WebexPlugin.extend({
46
34
  namespace: 'Team',
47
-
48
35
  /**
49
36
  * Move an existing group conversation into a team.
50
37
  * @param {TeamObject} team
@@ -56,7 +43,6 @@ var Team = _webexCore.WebexPlugin.extend({
56
43
  */
57
44
  addConversation: function addConversation(team, conversation, activity) {
58
45
  var _this = this;
59
-
60
46
  return this._ensureGeneralConversation(team).then(function (generalConversation) {
61
47
  return _this.webex.internal.conversation.prepare(activity, {
62
48
  verb: 'add',
@@ -76,7 +62,6 @@ var Team = _webexCore.WebexPlugin.extend({
76
62
  return _this.webex.internal.conversation.submit(a);
77
63
  });
78
64
  },
79
-
80
65
  /**
81
66
  * Add a member to a team
82
67
  * @param {TeamObject} team
@@ -88,12 +73,10 @@ var Team = _webexCore.WebexPlugin.extend({
88
73
  */
89
74
  addMember: function addMember(team, participant, activity) {
90
75
  var _this2 = this;
91
-
92
76
  return this._ensureGeneralConversation(team).then(function (generalConversation) {
93
77
  return _this2.webex.internal.conversation.add(generalConversation, participant, activity);
94
78
  });
95
79
  },
96
-
97
80
  /**
98
81
  * Create a team
99
82
  * @param {NewTeamObject} params
@@ -104,15 +87,12 @@ var Team = _webexCore.WebexPlugin.extend({
104
87
  */
105
88
  create: function create(params) {
106
89
  var _this3 = this;
107
-
108
90
  if (!params.displayName) {
109
91
  return _promise.default.reject(new Error('`params.displayName` is required'));
110
92
  }
111
-
112
93
  if (!params.participants || params.participants.length === 0) {
113
94
  return _promise.default.reject(new Error('`params.participants` is required'));
114
95
  }
115
-
116
96
  return _promise.default.all(params.participants.map(function (participant) {
117
97
  return _this3.webex.internal.user.asUUID(participant, {
118
98
  create: true
@@ -133,7 +113,6 @@ var Team = _webexCore.WebexPlugin.extend({
133
113
  return res.body;
134
114
  });
135
115
  },
136
-
137
116
  /**
138
117
  * Create a conversation within a team. Currently does not support
139
118
  * activities besides add (ie no post or share activities).
@@ -148,17 +127,13 @@ var Team = _webexCore.WebexPlugin.extend({
148
127
  */
149
128
  createConversation: function createConversation(team, params) {
150
129
  var _this4 = this;
151
-
152
130
  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
153
-
154
131
  if (!team.url) {
155
132
  return _promise.default.reject(new Error('`team.url` is required'));
156
133
  }
157
-
158
134
  if (!params.displayName) {
159
135
  return _promise.default.reject(new Error('`params.displayName` is required'));
160
136
  }
161
-
162
137
  return this._ensureGeneralConversation(team).then(function (generalConversation) {
163
138
  return _promise.default.all(params.participants.map(function (participant) {
164
139
  return _this4.webex.internal.user.asUUID(participant, {
@@ -181,7 +156,6 @@ var Team = _webexCore.WebexPlugin.extend({
181
156
  return res.body;
182
157
  });
183
158
  },
184
-
185
159
  /**
186
160
  * Retrieve a single team
187
161
  * @param {Object|Team~TeamObject} team
@@ -193,15 +167,12 @@ var Team = _webexCore.WebexPlugin.extend({
193
167
  */
194
168
  get: function get(_ref) {
195
169
  var _this5 = this;
196
-
197
170
  var url = _ref.url;
198
171
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
199
-
200
172
  if (!url) {
201
173
  return _promise.default.reject(new Error('`team.url` is required'));
202
174
  }
203
-
204
- var params = (0, _assign.default)({
175
+ var params = _objectSpread({
205
176
  includeTeamConversations: false,
206
177
  includeTeamMembers: false
207
178
  }, options);
@@ -214,7 +185,6 @@ var Team = _webexCore.WebexPlugin.extend({
214
185
  });
215
186
  });
216
187
  },
217
-
218
188
  /**
219
189
  * Get the list of conversations for a particular team
220
190
  * @param {TeamObject} team
@@ -223,33 +193,50 @@ var Team = _webexCore.WebexPlugin.extend({
223
193
  */
224
194
  listConversations: function listConversations(_ref2) {
225
195
  var url = _ref2.url;
226
-
227
196
  if (!url) {
228
197
  return _promise.default.reject(new Error('`team.url` is required'));
229
198
  }
230
-
231
199
  return this.webex.request({
232
200
  uri: "".concat(url, "/conversations")
233
201
  }).then(function (res) {
234
202
  return res.body.items;
235
203
  });
236
204
  },
237
-
238
205
  /**
239
206
  * Join a team conversation
240
207
  * @param {TeamObject} team
241
208
  * @param {ConversationObject} conversation
209
+ * @param {userId} userId
242
210
  * @returns {Promise} Resolves with the conversation
243
211
  */
244
- joinConversation: function joinConversation(team, conversation) {
212
+ joinConversation: function joinConversation(team, conversation, userId) {
213
+ if (!userId) {
214
+ return _promise.default.reject(new Error('`userId` is required'));
215
+ }
216
+ var body = {
217
+ kmsMessage: {
218
+ client: {
219
+ clientId: this.webex.internal.device.url,
220
+ credential: {
221
+ bearer: this.webex.credentials.supertoken.access_token,
222
+ userId: userId
223
+ }
224
+ },
225
+ method: 'create',
226
+ requestId: _uuid.default.v4(),
227
+ resourceUri: conversation.kmsResourceObjectUrl,
228
+ uri: '/authorizations',
229
+ userIds: [userId]
230
+ }
231
+ };
245
232
  return this.webex.request({
246
233
  method: 'POST',
247
- uri: "".concat(team.url, "/conversations/").concat(conversation.id, "/participants")
234
+ uri: "".concat(team.url, "/conversations/").concat(conversation.id, "/participants"),
235
+ body: body
248
236
  }).then(function (res) {
249
237
  return res.body;
250
238
  });
251
239
  },
252
-
253
240
  /**
254
241
  * Retrieve all teams
255
242
  * @param {Object} options
@@ -259,82 +246,68 @@ var Team = _webexCore.WebexPlugin.extend({
259
246
  */
260
247
  list: function list() {
261
248
  var _arguments = arguments,
262
- _this6 = this;
263
-
249
+ _this6 = this;
264
250
  return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
265
251
  var options, params, resource, res, list, results, _iterator, _step, result;
266
-
267
252
  return _regenerator.default.wrap(function _callee$(_context) {
268
- while (1) {
269
- switch (_context.prev = _context.next) {
270
- case 0:
271
- options = _arguments.length > 0 && _arguments[0] !== undefined ? _arguments[0] : {};
272
- params = (0, _assign.default)({
273
- includeTeamConversations: false,
274
- includeTeamMembers: false
275
- }, options);
276
- resource = 'teams';
277
- _context.next = 5;
253
+ while (1) switch (_context.prev = _context.next) {
254
+ case 0:
255
+ options = _arguments.length > 0 && _arguments[0] !== undefined ? _arguments[0] : {};
256
+ params = _objectSpread({
257
+ includeTeamConversations: false,
258
+ includeTeamMembers: false
259
+ }, options);
260
+ resource = 'teams';
261
+ _context.next = 5;
262
+ return _this6.webex.request({
263
+ api: 'conversation',
264
+ resource: resource,
265
+ qs: params
266
+ });
267
+ case 5:
268
+ res = _context.sent;
269
+ list = res.body.items.slice(0);
270
+ if (!res.body.additionalUrls) {
271
+ _context.next = 13;
272
+ break;
273
+ }
274
+ _context.next = 10;
275
+ return _promise.default.all(res.body.additionalUrls.map(function (host) {
276
+ var uri = "".concat(host, "/").concat(resource);
278
277
  return _this6.webex.request({
279
- api: 'conversation',
280
- resource: resource,
278
+ uri: uri,
281
279
  qs: params
282
280
  });
283
-
284
- case 5:
285
- res = _context.sent;
286
- list = res.body.items.slice(0);
287
-
288
- if (!res.body.additionalUrls) {
289
- _context.next = 13;
290
- break;
291
- }
292
-
293
- _context.next = 10;
294
- return _promise.default.all(res.body.additionalUrls.map(function (host) {
295
- var uri = "".concat(host, "/").concat(resource);
296
- return _this6.webex.request({
297
- uri: uri,
298
- qs: params
299
- });
300
- }));
301
-
302
- case 10:
303
- results = _context.sent;
304
- _iterator = _createForOfIteratorHelper(results);
305
-
306
- try {
307
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
308
- result = _step.value;
309
-
310
- if (result.body && result.body.items && result.body.items.length) {
311
- list = list.concat(result.body.items);
312
- }
281
+ }));
282
+ case 10:
283
+ results = _context.sent;
284
+ _iterator = _createForOfIteratorHelper(results);
285
+ try {
286
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
287
+ result = _step.value;
288
+ if (result.body && result.body.items && result.body.items.length) {
289
+ list = list.concat(result.body.items);
313
290
  }
314
- } catch (err) {
315
- _iterator.e(err);
316
- } finally {
317
- _iterator.f();
318
291
  }
319
-
320
- case 13:
321
- _context.next = 15;
322
- return _promise.default.all(res.body.items.map(function (team) {
323
- return _this6._recordUUIDs(team);
324
- }));
325
-
326
- case 15:
327
- return _context.abrupt("return", list);
328
-
329
- case 16:
330
- case "end":
331
- return _context.stop();
332
- }
292
+ } catch (err) {
293
+ _iterator.e(err);
294
+ } finally {
295
+ _iterator.f();
296
+ }
297
+ case 13:
298
+ _context.next = 15;
299
+ return _promise.default.all(res.body.items.map(function (team) {
300
+ return _this6._recordUUIDs(team);
301
+ }));
302
+ case 15:
303
+ return _context.abrupt("return", list);
304
+ case 16:
305
+ case "end":
306
+ return _context.stop();
333
307
  }
334
308
  }, _callee);
335
309
  }))();
336
310
  },
337
-
338
311
  /**
339
312
  * Remove a member from a team
340
313
  * @param {TeamObject} team
@@ -346,12 +319,10 @@ var Team = _webexCore.WebexPlugin.extend({
346
319
  */
347
320
  removeMember: function removeMember(team, participant, activity) {
348
321
  var _this7 = this;
349
-
350
322
  return this._ensureGeneralConversation(team).then(function (generalConversation) {
351
323
  return _this7.webex.internal.conversation.leave(generalConversation, participant, activity);
352
324
  });
353
325
  },
354
-
355
326
  /**
356
327
  * Remove a team conversation from a team.
357
328
  * @param {TeamObject} team
@@ -363,7 +334,6 @@ var Team = _webexCore.WebexPlugin.extend({
363
334
  */
364
335
  removeConversation: function removeConversation(team, conversation, activity) {
365
336
  var _this8 = this;
366
-
367
337
  return this._ensureGeneralConversation(team).then(function (generalConversation) {
368
338
  var properties = {
369
339
  verb: 'remove',
@@ -381,7 +351,6 @@ var Team = _webexCore.WebexPlugin.extend({
381
351
  return _this8.webex.internal.conversation.submit(a);
382
352
  });
383
353
  },
384
-
385
354
  /**
386
355
  * Update the displayName, summary, or teamColor field for a team.
387
356
  * @param {TeamObject} team to be updated
@@ -394,73 +363,60 @@ var Team = _webexCore.WebexPlugin.extend({
394
363
  update: function update(team, object, activity) {
395
364
  return this.webex.internal.conversation.update(team, object, activity);
396
365
  },
397
-
398
- /* eslint-disable require-jsdoc */
399
- _ensureGeneralConversation: function _ensureGeneralConversation(team) {
366
+ /* eslint-disable require-jsdoc */_ensureGeneralConversation: function _ensureGeneralConversation(team) {
400
367
  if (!team.generalConversationUuid) {
401
368
  return _promise.default.reject(new Error('`team.generalConversationUuid` must be present'));
402
369
  }
403
-
404
370
  if (team.conversations.items.length) {
405
371
  var generalConversation = (0, _find2.default)(team.conversations.items, {
406
372
  id: team.generalConversationUuid
407
373
  });
408
-
409
374
  if (generalConversation) {
410
375
  return _promise.default.resolve(generalConversation);
411
376
  }
412
377
  }
413
-
414
378
  return this.webex.internal.conversation.get({
415
379
  id: team.generalConversationUuid
416
380
  });
417
381
  },
418
382
  _prepareTeam: function _prepareTeam(params) {
419
383
  var payload = this.webex.internal.conversation._prepareConversationForCreation(params);
420
-
421
384
  payload.objectType = 'team';
422
-
423
385
  if (params.summary) {
424
386
  payload.summary = params.summary;
425
387
  }
426
-
427
388
  return _promise.default.resolve(payload);
428
389
  },
429
390
  _prepareTeamConversation: function _prepareTeamConversation(teamConversation, params) {
430
391
  if (!teamConversation.kmsResourceObjectUrl) {
431
392
  return _promise.default.reject(new Error('Team general conversation must have a KRO'));
432
393
  }
394
+ var payload = this.webex.internal.conversation._prepareConversationForCreation(params);
433
395
 
434
- var payload = this.webex.internal.conversation._prepareConversationForCreation(params); // Push the general conversation KRO on so that team members can
396
+ // Push the general conversation KRO on so that team members can
435
397
  // decrypt the title of this open room without joining it.
436
-
437
-
438
398
  payload.kmsMessage.userIds.push(teamConversation.kmsResourceObjectUrl);
439
399
  return _promise.default.resolve(payload);
440
400
  },
441
401
  _recordUUIDs: function _recordUUIDs(team) {
442
402
  var _this9 = this;
443
-
444
403
  if (!team.teamMembers || !team.teamMembers.items) {
445
404
  return _promise.default.resolve(team);
446
405
  }
447
-
448
406
  return _promise.default.all(team.teamMembers.items.map(function (participant) {
449
407
  // ROOMs or LYRA_SPACEs do not have email addresses, so there's no point attempting to
450
408
  // record their UUIDs.
451
409
  if (participant.type === 'ROOM' || participant.type === 'LYRA_SPACE') {
452
410
  return _promise.default.resolve();
453
411
  }
454
-
455
412
  return _this9.webex.internal.user.recordUUID(participant).catch(function (err) {
456
413
  return _this9.logger.warn('Could not record uuid', err);
457
414
  });
458
415
  }));
459
- }
460
- /* eslint-enable require-jsdoc */
461
- ,
462
- version: "3.0.0-beta.3"
416
+ } /* eslint-enable require-jsdoc */,
417
+ version: "3.0.0-beta.30"
463
418
  });
419
+
464
420
  /**
465
421
  * Assign or unassign a team member to be a moderator of a team
466
422
  * @param {TeamObject} team
@@ -468,17 +424,15 @@ var Team = _webexCore.WebexPlugin.extend({
468
424
  * @param {Object} activity
469
425
  * @returns {Promise} Resolves with activity that was posted
470
426
  */
471
-
472
-
473
427
  ['assignModerator', 'unassignModerator'].forEach(function (verb) {
474
428
  Team.prototype[verb] = function submitModerationChangeActivity(team, member, activity) {
475
429
  var _this10 = this;
476
-
477
430
  return this._ensureGeneralConversation(team).then(function (teamConversation) {
478
431
  return _this10.webex.internal.conversation[verb](teamConversation, member, activity);
479
432
  });
480
433
  };
481
434
  });
435
+
482
436
  /**
483
437
  * Archive or unarchive a team or team conversation.
484
438
  * @param {TeamObject|ConversationObject} target team or team conversation that should be archived
@@ -487,15 +441,12 @@ var Team = _webexCore.WebexPlugin.extend({
487
441
  * provisional activity
488
442
  * @returns {Promise} Resolves with the posted activity
489
443
  */
490
-
491
444
  ['archive', 'unarchive'].forEach(function (verb) {
492
445
  Team.prototype[verb] = function submitArchiveStateChangeActivity(target, activity) {
493
446
  var _this11 = this;
494
-
495
447
  if (!target.objectType) {
496
448
  return _promise.default.reject(new Error('`target.objectType` is required'));
497
449
  }
498
-
499
450
  var properties = {
500
451
  verb: verb,
501
452
  object: (0, _pick2.default)(target, 'id', 'url', 'objectType'),
package/dist/team.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["Team","WebexPlugin","extend","namespace","addConversation","team","conversation","activity","_ensureGeneralConversation","then","generalConversation","webex","internal","prepare","verb","target","prepareConversation","object","id","objectType","kmsMessage","method","uri","resourceUri","kmsResourceObjectUrl","userIds","a","submit","addMember","participant","add","create","params","displayName","reject","Error","participants","length","all","map","user","asUUID","unshift","device","userId","_prepareTeam","payload","request","service","resource","body","res","createConversation","options","url","_prepareTeamConversation","qs","get","includeTeamConversations","includeTeamMembers","_recordUUIDs","listConversations","items","joinConversation","list","api","slice","additionalUrls","host","results","result","concat","removeMember","leave","removeConversation","properties","querystring","stringify","authId","update","generalConversationUuid","conversations","resolve","_prepareConversationForCreation","summary","teamConversation","push","teamMembers","type","recordUUID","catch","err","logger","warn","forEach","prototype","submitModerationChangeActivity","member","submitArchiveStateChangeActivity","teamUrl","getConvoUrl"],"sources":["team.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport querystring from 'querystring';\n\nimport {find, pick, uniq} from 'lodash';\nimport {WebexPlugin} from '@webex/webex-core';\n\nconst Team = WebexPlugin.extend({\n namespace: 'Team',\n\n /**\n * Move an existing group conversation into a team.\n * @param {TeamObject} team\n * @param {ConversationObject} conversation\n * @param {Object} activity Reference to the activity that will eventually be\n * posted. Use this to (a) pass in e.g. clientTempId and (b) render a\n * provisional activity\n * @returns {Promise} Resolves with the add activity\n */\n addConversation(team, conversation, activity) {\n return this._ensureGeneralConversation(team)\n .then((generalConversation) => this.webex.internal.conversation.prepare(activity, {\n verb: 'add',\n target: this.webex.internal.conversation.prepareConversation(generalConversation),\n object: {\n id: conversation.id,\n objectType: 'conversation'\n },\n kmsMessage: {\n method: 'create',\n uri: '/authorizations',\n resourceUri: conversation.kmsResourceObjectUrl,\n userIds: [generalConversation.kmsResourceObjectUrl]\n }\n }))\n .then((a) => this.webex.internal.conversation.submit(a));\n },\n\n /**\n * Add a member to a team\n * @param {TeamObject} team\n * @param {Object} participant\n * @param {Object} activity Reference to the activity that will eventually be\n * posted. Use this to (a) pass in e.g. clientTempId and (b) render a\n * provisional activity\n * @returns {Promise} Resolves with activity that was posted\n */\n addMember(team, participant, activity) {\n return this._ensureGeneralConversation(team)\n .then((generalConversation) => this.webex.internal.conversation.add(generalConversation, participant, activity));\n },\n\n /**\n * Create a team\n * @param {NewTeamObject} params\n * @param {string} params.displayName\n * @param {string} params.summary\n * @param {Array} params.participants\n * @returns {Promise} Resolves with the created team\n */\n create(params) {\n if (!params.displayName) {\n return Promise.reject(new Error('`params.displayName` is required'));\n }\n\n if (!params.participants || params.participants.length === 0) {\n return Promise.reject(new Error('`params.participants` is required'));\n }\n\n return Promise.all(params.participants.map((participant) => this.webex.internal.user.asUUID(participant, {create: true})))\n .then((participants) => {\n participants.unshift(this.webex.internal.device.userId);\n params.participants = uniq(participants);\n })\n .then(() => this._prepareTeam(params))\n .then((payload) => this.webex.request({\n method: 'POST',\n service: 'conversation',\n resource: 'teams',\n body: payload\n }))\n .then((res) => res.body);\n },\n\n /**\n * Create a conversation within a team. Currently does not support\n * activities besides add (ie no post or share activities).\n * @param {TeamObject} team\n * @param {NewConversationObject} params\n * @param {string} params.displayName\n * @param {string} params.summary\n * @param {Array} params.participants\n * @param {Object} options\n * @param {boolean} options.includeAllTeamMembers\n * @returns {Promise} Resolves with the newly created conversation\n */\n createConversation(team, params, options = {}) {\n if (!team.url) {\n return Promise.reject(new Error('`team.url` is required'));\n }\n\n if (!params.displayName) {\n return Promise.reject(new Error('`params.displayName` is required'));\n }\n\n return this._ensureGeneralConversation(team)\n .then((generalConversation) => Promise.all(params.participants.map((participant) => this.webex.internal.user.asUUID(participant, {create: true})))\n .then((participants) => {\n participants.unshift(this.webex.internal.device.userId);\n params.participants = uniq(participants);\n })\n .then(() => this._prepareTeamConversation(generalConversation, params)))\n .then((payload) => this.webex.request({\n method: 'POST',\n uri: `${team.url}/conversations`,\n qs: pick(options, 'includeAllTeamMembers'),\n body: payload\n }))\n .then((res) => res.body);\n },\n\n /**\n * Retrieve a single team\n * @param {Object|Team~TeamObject} team\n * @param {string} team.url\n * @param {Object} options\n * @param {boolean} options.includeTeamConversations\n * @param {boolean} options.includeTeamMembers\n * @returns {Promise} Resolves with the requested team\n */\n get({url}, options = {}) {\n if (!url) {\n return Promise.reject(new Error('`team.url` is required'));\n }\n const params = Object.assign({\n includeTeamConversations: false,\n includeTeamMembers: false\n }, options);\n\n return this.webex.request({\n uri: url,\n qs: params\n })\n .then((res) => this._recordUUIDs(res.body)\n .then(() => res.body));\n },\n\n /**\n * Get the list of conversations for a particular team\n * @param {TeamObject} team\n * @param {String} team.url\n * @returns {Promise} Resolves with an array of conversations\n */\n listConversations({url}) {\n if (!url) {\n return Promise.reject(new Error('`team.url` is required'));\n }\n\n return this.webex.request({\n uri: `${url}/conversations`\n })\n .then((res) => res.body.items);\n },\n\n /**\n * Join a team conversation\n * @param {TeamObject} team\n * @param {ConversationObject} conversation\n * @returns {Promise} Resolves with the conversation\n */\n joinConversation(team, conversation) {\n return this.webex.request({\n method: 'POST',\n uri: `${team.url}/conversations/${conversation.id}/participants`\n })\n .then((res) => res.body);\n },\n\n /**\n * Retrieve all teams\n * @param {Object} options\n * @param {boolean} options.includeTeamConversations\n * @param {boolean} options.includeTeamMembers\n * @returns {Promise} Resolves with the requested teams\n */\n async list(options = {}) {\n const params = Object.assign({\n includeTeamConversations: false,\n includeTeamMembers: false\n }, options);\n const resource = 'teams';\n\n const res = await this.webex.request({\n api: 'conversation',\n resource,\n qs: params\n });\n\n let list = res.body.items.slice(0);\n\n if (res.body.additionalUrls) {\n const results = await Promise.all(\n res.body.additionalUrls.map((host) => {\n const uri = `${host}/${resource}`;\n\n return this.webex.request({\n uri,\n qs: params\n });\n })\n );\n\n for (const result of results) {\n if (result.body && result.body.items && result.body.items.length) {\n list = list.concat(result.body.items);\n }\n }\n }\n\n await Promise.all(res.body.items.map((team) => this._recordUUIDs(team)));\n\n return list;\n },\n\n /**\n * Remove a member from a team\n * @param {TeamObject} team\n * @param {Object} participant\n * @param {Object} activity Reference to the activity that will eventually be\n * posted. Use this to (a) pass in e.g. clientTempId and (b) render a\n * provisional activity\n * @returns {Promise} Resolves with activity that was posted\n */\n removeMember(team, participant, activity) {\n return this._ensureGeneralConversation(team)\n .then((generalConversation) => this.webex.internal.conversation.leave(generalConversation, participant, activity));\n },\n\n /**\n * Remove a team conversation from a team.\n * @param {TeamObject} team\n * @param {ConversationObject} conversation to be removed\n * @param {Object} activity Reference to the activity that will eventually be\n * posted. Use this to (a) pass in e.g. clientTempId and (b) render a\n * provisional activity\n * @returns {Promise} Resolves with the leave activity\n */\n removeConversation(team, conversation, activity) {\n return this._ensureGeneralConversation(team)\n .then((generalConversation) => {\n const properties = {\n verb: 'remove',\n object: pick(conversation, 'id', 'url', 'objectType'),\n target: pick(generalConversation, 'id', 'url', 'objectType'),\n kmsMessage: {\n method: 'delete',\n uri: `<KRO>/authorizations?${querystring.stringify({authId: conversation.id})}`\n }\n };\n\n return this.webex.internal.conversation.prepare(activity, properties);\n })\n .then((a) => this.webex.internal.conversation.submit(a));\n },\n\n /**\n * Update the displayName, summary, or teamColor field for a team.\n * @param {TeamObject} team to be updated\n * @param {Object} object with updated displayName, summary, and/or teamColor\n * @param {Object} activity Reference to the activity that will eventually be\n * posted. Use this to (a) pass in e.g. clientTempId and (b) render a\n * provisional activity\n * @returns {Promise} Resolves with posted activity\n */\n update(team, object, activity) {\n return this.webex.internal.conversation.update(team, object, activity);\n },\n\n /* eslint-disable require-jsdoc */\n _ensureGeneralConversation(team) {\n if (!team.generalConversationUuid) {\n return Promise.reject(new Error('`team.generalConversationUuid` must be present'));\n }\n\n if (team.conversations.items.length) {\n const generalConversation = find(team.conversations.items, {id: team.generalConversationUuid});\n\n if (generalConversation) {\n return Promise.resolve(generalConversation);\n }\n }\n\n return this.webex.internal.conversation.get({id: team.generalConversationUuid});\n },\n\n _prepareTeam: function _prepareTeam(params) {\n const payload = this.webex.internal.conversation._prepareConversationForCreation(params);\n\n payload.objectType = 'team';\n\n if (params.summary) {\n payload.summary = params.summary;\n }\n\n return Promise.resolve(payload);\n },\n\n _prepareTeamConversation(teamConversation, params) {\n if (!teamConversation.kmsResourceObjectUrl) {\n return Promise.reject(new Error('Team general conversation must have a KRO'));\n }\n\n const payload = this.webex.internal.conversation._prepareConversationForCreation(params);\n\n // Push the general conversation KRO on so that team members can\n // decrypt the title of this open room without joining it.\n payload.kmsMessage.userIds.push(teamConversation.kmsResourceObjectUrl);\n\n return Promise.resolve(payload);\n },\n\n _recordUUIDs(team) {\n if (!team.teamMembers || !team.teamMembers.items) {\n return Promise.resolve(team);\n }\n\n return Promise.all(team.teamMembers.items.map((participant) => {\n // ROOMs or LYRA_SPACEs do not have email addresses, so there's no point attempting to\n // record their UUIDs.\n if (participant.type === 'ROOM' || participant.type === 'LYRA_SPACE') {\n return Promise.resolve();\n }\n\n return this.webex.internal.user.recordUUID(participant)\n .catch((err) => this.logger.warn('Could not record uuid', err));\n }));\n }\n /* eslint-enable require-jsdoc */\n\n});\n\n/**\n * Assign or unassign a team member to be a moderator of a team\n * @param {TeamObject} team\n * @param {Object} participant\n * @param {Object} activity\n * @returns {Promise} Resolves with activity that was posted\n */\n[\n 'assignModerator',\n 'unassignModerator'\n].forEach((verb) => {\n Team.prototype[verb] = function submitModerationChangeActivity(team, member, activity) {\n return this._ensureGeneralConversation(team)\n .then((teamConversation) => this.webex.internal.conversation[verb](teamConversation, member, activity));\n };\n});\n\n/**\n * Archive or unarchive a team or team conversation.\n * @param {TeamObject|ConversationObject} target team or team conversation that should be archived\n * @param {Object} activity Reference to the activity that will eventually be\n * posted. Use this to (a) pass in e.g. clientTempId and (b) render a\n * provisional activity\n * @returns {Promise} Resolves with the posted activity\n */\n[\n 'archive',\n 'unarchive'\n].forEach((verb) => {\n Team.prototype[verb] = function submitArchiveStateChangeActivity(target, activity) {\n if (!target.objectType) {\n return Promise.reject(new Error('`target.objectType` is required'));\n }\n\n const properties = {\n verb,\n object: pick(target, 'id', 'url', 'objectType'),\n target: pick(target, 'id', 'url', 'objectType')\n };\n\n const teamUrl = this.webex.internal.conversation.getConvoUrl(target);\n\n return this.webex.internal.conversation\n .prepare(activity, properties)\n .then((a) => this.webex.internal.conversation.submit(a, teamUrl));\n };\n});\n\nexport default Team;\n"],"mappings":"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"}
1
+ {"version":3,"names":["Team","WebexPlugin","extend","namespace","addConversation","team","conversation","activity","_ensureGeneralConversation","then","generalConversation","webex","internal","prepare","verb","target","prepareConversation","object","id","objectType","kmsMessage","method","uri","resourceUri","kmsResourceObjectUrl","userIds","a","submit","addMember","participant","add","create","params","displayName","reject","Error","participants","length","all","map","user","asUUID","unshift","device","userId","_prepareTeam","payload","request","service","resource","body","res","createConversation","options","url","_prepareTeamConversation","qs","get","includeTeamConversations","includeTeamMembers","_recordUUIDs","listConversations","items","joinConversation","client","clientId","credential","bearer","credentials","supertoken","access_token","requestId","uuid","v4","list","api","slice","additionalUrls","host","results","result","concat","removeMember","leave","removeConversation","properties","querystring","stringify","authId","update","generalConversationUuid","conversations","resolve","_prepareConversationForCreation","summary","teamConversation","push","teamMembers","type","recordUUID","catch","err","logger","warn","forEach","prototype","submitModerationChangeActivity","member","submitArchiveStateChangeActivity","teamUrl","getConvoUrl"],"sources":["team.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport querystring from 'querystring';\n\nimport uuid from 'uuid';\nimport {find, pick, uniq} from 'lodash';\nimport {WebexPlugin} from '@webex/webex-core';\n\nconst Team = WebexPlugin.extend({\n namespace: 'Team',\n\n /**\n * Move an existing group conversation into a team.\n * @param {TeamObject} team\n * @param {ConversationObject} conversation\n * @param {Object} activity Reference to the activity that will eventually be\n * posted. Use this to (a) pass in e.g. clientTempId and (b) render a\n * provisional activity\n * @returns {Promise} Resolves with the add activity\n */\n addConversation(team, conversation, activity) {\n return this._ensureGeneralConversation(team)\n .then((generalConversation) =>\n this.webex.internal.conversation.prepare(activity, {\n verb: 'add',\n target: this.webex.internal.conversation.prepareConversation(generalConversation),\n object: {\n id: conversation.id,\n objectType: 'conversation',\n },\n kmsMessage: {\n method: 'create',\n uri: '/authorizations',\n resourceUri: conversation.kmsResourceObjectUrl,\n userIds: [generalConversation.kmsResourceObjectUrl],\n },\n })\n )\n .then((a) => this.webex.internal.conversation.submit(a));\n },\n\n /**\n * Add a member to a team\n * @param {TeamObject} team\n * @param {Object} participant\n * @param {Object} activity Reference to the activity that will eventually be\n * posted. Use this to (a) pass in e.g. clientTempId and (b) render a\n * provisional activity\n * @returns {Promise} Resolves with activity that was posted\n */\n addMember(team, participant, activity) {\n return this._ensureGeneralConversation(team).then((generalConversation) =>\n this.webex.internal.conversation.add(generalConversation, participant, activity)\n );\n },\n\n /**\n * Create a team\n * @param {NewTeamObject} params\n * @param {string} params.displayName\n * @param {string} params.summary\n * @param {Array} params.participants\n * @returns {Promise} Resolves with the created team\n */\n create(params) {\n if (!params.displayName) {\n return Promise.reject(new Error('`params.displayName` is required'));\n }\n\n if (!params.participants || params.participants.length === 0) {\n return Promise.reject(new Error('`params.participants` is required'));\n }\n\n return Promise.all(\n params.participants.map((participant) =>\n this.webex.internal.user.asUUID(participant, {create: true})\n )\n )\n .then((participants) => {\n participants.unshift(this.webex.internal.device.userId);\n params.participants = uniq(participants);\n })\n .then(() => this._prepareTeam(params))\n .then((payload) =>\n this.webex.request({\n method: 'POST',\n service: 'conversation',\n resource: 'teams',\n body: payload,\n })\n )\n .then((res) => res.body);\n },\n\n /**\n * Create a conversation within a team. Currently does not support\n * activities besides add (ie no post or share activities).\n * @param {TeamObject} team\n * @param {NewConversationObject} params\n * @param {string} params.displayName\n * @param {string} params.summary\n * @param {Array} params.participants\n * @param {Object} options\n * @param {boolean} options.includeAllTeamMembers\n * @returns {Promise} Resolves with the newly created conversation\n */\n createConversation(team, params, options = {}) {\n if (!team.url) {\n return Promise.reject(new Error('`team.url` is required'));\n }\n\n if (!params.displayName) {\n return Promise.reject(new Error('`params.displayName` is required'));\n }\n\n return this._ensureGeneralConversation(team)\n .then((generalConversation) =>\n Promise.all(\n params.participants.map((participant) =>\n this.webex.internal.user.asUUID(participant, {create: true})\n )\n )\n .then((participants) => {\n participants.unshift(this.webex.internal.device.userId);\n params.participants = uniq(participants);\n })\n .then(() => this._prepareTeamConversation(generalConversation, params))\n )\n .then((payload) =>\n this.webex.request({\n method: 'POST',\n uri: `${team.url}/conversations`,\n qs: pick(options, 'includeAllTeamMembers'),\n body: payload,\n })\n )\n .then((res) => res.body);\n },\n\n /**\n * Retrieve a single team\n * @param {Object|Team~TeamObject} team\n * @param {string} team.url\n * @param {Object} options\n * @param {boolean} options.includeTeamConversations\n * @param {boolean} options.includeTeamMembers\n * @returns {Promise} Resolves with the requested team\n */\n get({url}, options = {}) {\n if (!url) {\n return Promise.reject(new Error('`team.url` is required'));\n }\n const params = {\n includeTeamConversations: false,\n includeTeamMembers: false,\n ...options,\n };\n\n return this.webex\n .request({\n uri: url,\n qs: params,\n })\n .then((res) => this._recordUUIDs(res.body).then(() => res.body));\n },\n\n /**\n * Get the list of conversations for a particular team\n * @param {TeamObject} team\n * @param {String} team.url\n * @returns {Promise} Resolves with an array of conversations\n */\n listConversations({url}) {\n if (!url) {\n return Promise.reject(new Error('`team.url` is required'));\n }\n\n return this.webex\n .request({\n uri: `${url}/conversations`,\n })\n .then((res) => res.body.items);\n },\n\n /**\n * Join a team conversation\n * @param {TeamObject} team\n * @param {ConversationObject} conversation\n * @param {userId} userId\n * @returns {Promise} Resolves with the conversation\n */\n joinConversation(team, conversation, userId) {\n if (!userId) {\n return Promise.reject(new Error('`userId` is required'));\n }\n\n const body = {\n kmsMessage: {\n client: {\n clientId: this.webex.internal.device.url,\n credential: {\n bearer: this.webex.credentials.supertoken.access_token,\n userId,\n },\n },\n method: 'create',\n requestId: uuid.v4(),\n resourceUri: conversation.kmsResourceObjectUrl,\n uri: '/authorizations',\n userIds: [userId],\n },\n };\n\n return this.webex\n .request({\n method: 'POST',\n uri: `${team.url}/conversations/${conversation.id}/participants`,\n body,\n })\n .then((res) => res.body);\n },\n\n /**\n * Retrieve all teams\n * @param {Object} options\n * @param {boolean} options.includeTeamConversations\n * @param {boolean} options.includeTeamMembers\n * @returns {Promise} Resolves with the requested teams\n */\n async list(options = {}) {\n const params = {\n includeTeamConversations: false,\n includeTeamMembers: false,\n ...options,\n };\n const resource = 'teams';\n\n const res = await this.webex.request({\n api: 'conversation',\n resource,\n qs: params,\n });\n\n let list = res.body.items.slice(0);\n\n if (res.body.additionalUrls) {\n const results = await Promise.all(\n res.body.additionalUrls.map((host) => {\n const uri = `${host}/${resource}`;\n\n return this.webex.request({\n uri,\n qs: params,\n });\n })\n );\n\n for (const result of results) {\n if (result.body && result.body.items && result.body.items.length) {\n list = list.concat(result.body.items);\n }\n }\n }\n\n await Promise.all(res.body.items.map((team) => this._recordUUIDs(team)));\n\n return list;\n },\n\n /**\n * Remove a member from a team\n * @param {TeamObject} team\n * @param {Object} participant\n * @param {Object} activity Reference to the activity that will eventually be\n * posted. Use this to (a) pass in e.g. clientTempId and (b) render a\n * provisional activity\n * @returns {Promise} Resolves with activity that was posted\n */\n removeMember(team, participant, activity) {\n return this._ensureGeneralConversation(team).then((generalConversation) =>\n this.webex.internal.conversation.leave(generalConversation, participant, activity)\n );\n },\n\n /**\n * Remove a team conversation from a team.\n * @param {TeamObject} team\n * @param {ConversationObject} conversation to be removed\n * @param {Object} activity Reference to the activity that will eventually be\n * posted. Use this to (a) pass in e.g. clientTempId and (b) render a\n * provisional activity\n * @returns {Promise} Resolves with the leave activity\n */\n removeConversation(team, conversation, activity) {\n return this._ensureGeneralConversation(team)\n .then((generalConversation) => {\n const properties = {\n verb: 'remove',\n object: pick(conversation, 'id', 'url', 'objectType'),\n target: pick(generalConversation, 'id', 'url', 'objectType'),\n kmsMessage: {\n method: 'delete',\n uri: `<KRO>/authorizations?${querystring.stringify({authId: conversation.id})}`,\n },\n };\n\n return this.webex.internal.conversation.prepare(activity, properties);\n })\n .then((a) => this.webex.internal.conversation.submit(a));\n },\n\n /**\n * Update the displayName, summary, or teamColor field for a team.\n * @param {TeamObject} team to be updated\n * @param {Object} object with updated displayName, summary, and/or teamColor\n * @param {Object} activity Reference to the activity that will eventually be\n * posted. Use this to (a) pass in e.g. clientTempId and (b) render a\n * provisional activity\n * @returns {Promise} Resolves with posted activity\n */\n update(team, object, activity) {\n return this.webex.internal.conversation.update(team, object, activity);\n },\n\n /* eslint-disable require-jsdoc */\n _ensureGeneralConversation(team) {\n if (!team.generalConversationUuid) {\n return Promise.reject(new Error('`team.generalConversationUuid` must be present'));\n }\n\n if (team.conversations.items.length) {\n const generalConversation = find(team.conversations.items, {\n id: team.generalConversationUuid,\n });\n\n if (generalConversation) {\n return Promise.resolve(generalConversation);\n }\n }\n\n return this.webex.internal.conversation.get({id: team.generalConversationUuid});\n },\n\n _prepareTeam: function _prepareTeam(params) {\n const payload = this.webex.internal.conversation._prepareConversationForCreation(params);\n\n payload.objectType = 'team';\n\n if (params.summary) {\n payload.summary = params.summary;\n }\n\n return Promise.resolve(payload);\n },\n\n _prepareTeamConversation(teamConversation, params) {\n if (!teamConversation.kmsResourceObjectUrl) {\n return Promise.reject(new Error('Team general conversation must have a KRO'));\n }\n\n const payload = this.webex.internal.conversation._prepareConversationForCreation(params);\n\n // Push the general conversation KRO on so that team members can\n // decrypt the title of this open room without joining it.\n payload.kmsMessage.userIds.push(teamConversation.kmsResourceObjectUrl);\n\n return Promise.resolve(payload);\n },\n\n _recordUUIDs(team) {\n if (!team.teamMembers || !team.teamMembers.items) {\n return Promise.resolve(team);\n }\n\n return Promise.all(\n team.teamMembers.items.map((participant) => {\n // ROOMs or LYRA_SPACEs do not have email addresses, so there's no point attempting to\n // record their UUIDs.\n if (participant.type === 'ROOM' || participant.type === 'LYRA_SPACE') {\n return Promise.resolve();\n }\n\n return this.webex.internal.user\n .recordUUID(participant)\n .catch((err) => this.logger.warn('Could not record uuid', err));\n })\n );\n },\n /* eslint-enable require-jsdoc */\n});\n\n/**\n * Assign or unassign a team member to be a moderator of a team\n * @param {TeamObject} team\n * @param {Object} participant\n * @param {Object} activity\n * @returns {Promise} Resolves with activity that was posted\n */\n['assignModerator', 'unassignModerator'].forEach((verb) => {\n Team.prototype[verb] = function submitModerationChangeActivity(team, member, activity) {\n return this._ensureGeneralConversation(team).then((teamConversation) =>\n this.webex.internal.conversation[verb](teamConversation, member, activity)\n );\n };\n});\n\n/**\n * Archive or unarchive a team or team conversation.\n * @param {TeamObject|ConversationObject} target team or team conversation that should be archived\n * @param {Object} activity Reference to the activity that will eventually be\n * posted. Use this to (a) pass in e.g. clientTempId and (b) render a\n * provisional activity\n * @returns {Promise} Resolves with the posted activity\n */\n['archive', 'unarchive'].forEach((verb) => {\n Team.prototype[verb] = function submitArchiveStateChangeActivity(target, activity) {\n if (!target.objectType) {\n return Promise.reject(new Error('`target.objectType` is required'));\n }\n\n const properties = {\n verb,\n object: pick(target, 'id', 'url', 'objectType'),\n target: pick(target, 'id', 'url', 'objectType'),\n };\n\n const teamUrl = this.webex.internal.conversation.getConvoUrl(target);\n\n return this.webex.internal.conversation\n .prepare(activity, properties)\n .then((a) => this.webex.internal.conversation.submit(a, teamUrl));\n };\n});\n\nexport default Team;\n"],"mappings":"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"}