@webex/internal-plugin-team 2.37.1 → 2.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/team.js +25 -3
- package/dist/team.js.map +1 -1
- package/package.json +11 -11
- package/src/team.js +25 -1
- package/test/integration/spec/actions.js +1 -1
- package/test/unit/spec/team.js +41 -0
package/dist/team.js
CHANGED
|
@@ -23,6 +23,7 @@ var _uniq2 = _interopRequireDefault(require("lodash/uniq"));
|
|
|
23
23
|
var _pick2 = _interopRequireDefault(require("lodash/pick"));
|
|
24
24
|
var _find2 = _interopRequireDefault(require("lodash/find"));
|
|
25
25
|
var _querystring = _interopRequireDefault(require("querystring"));
|
|
26
|
+
var _uuid = _interopRequireDefault(require("uuid"));
|
|
26
27
|
var _webexCore = require("@webex/webex-core");
|
|
27
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; } } }; }
|
|
28
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); }
|
|
@@ -205,12 +206,33 @@ var Team = _webexCore.WebexPlugin.extend({
|
|
|
205
206
|
* Join a team conversation
|
|
206
207
|
* @param {TeamObject} team
|
|
207
208
|
* @param {ConversationObject} conversation
|
|
209
|
+
* @param {userId} userId
|
|
208
210
|
* @returns {Promise} Resolves with the conversation
|
|
209
211
|
*/
|
|
210
|
-
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
|
+
};
|
|
211
232
|
return this.webex.request({
|
|
212
233
|
method: 'POST',
|
|
213
|
-
uri: "".concat(team.url, "/conversations/").concat(conversation.id, "/participants")
|
|
234
|
+
uri: "".concat(team.url, "/conversations/").concat(conversation.id, "/participants"),
|
|
235
|
+
body: body
|
|
214
236
|
}).then(function (res) {
|
|
215
237
|
return res.body;
|
|
216
238
|
});
|
|
@@ -392,7 +414,7 @@ var Team = _webexCore.WebexPlugin.extend({
|
|
|
392
414
|
});
|
|
393
415
|
}));
|
|
394
416
|
} /* eslint-enable require-jsdoc */,
|
|
395
|
-
version: "2.
|
|
417
|
+
version: "2.38.0"
|
|
396
418
|
});
|
|
397
419
|
|
|
398
420
|
/**
|
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) =>\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 * @returns {Promise} Resolves with the conversation\n */\n joinConversation(team, conversation) {\n return this.webex\n .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 = {\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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"}
|
|
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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webex/internal-plugin-team",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.38.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Josh Dykstra <jodykstr@cisco.com>",
|
|
@@ -21,19 +21,19 @@
|
|
|
21
21
|
]
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
|
-
"@webex/test-helper-chai": "2.
|
|
25
|
-
"@webex/test-helper-mocha": "2.
|
|
26
|
-
"@webex/test-helper-mock-webex": "2.
|
|
27
|
-
"@webex/test-helper-test-users": "2.
|
|
24
|
+
"@webex/test-helper-chai": "2.38.0",
|
|
25
|
+
"@webex/test-helper-mocha": "2.38.0",
|
|
26
|
+
"@webex/test-helper-mock-webex": "2.38.0",
|
|
27
|
+
"@webex/test-helper-test-users": "2.38.0",
|
|
28
28
|
"sinon": "^9.2.4"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@webex/internal-plugin-conversation": "2.
|
|
32
|
-
"@webex/internal-plugin-device": "2.
|
|
33
|
-
"@webex/internal-plugin-encryption": "2.
|
|
34
|
-
"@webex/internal-plugin-team": "2.
|
|
35
|
-
"@webex/internal-plugin-user": "2.
|
|
36
|
-
"@webex/webex-core": "2.
|
|
31
|
+
"@webex/internal-plugin-conversation": "2.38.0",
|
|
32
|
+
"@webex/internal-plugin-device": "2.38.0",
|
|
33
|
+
"@webex/internal-plugin-encryption": "2.38.0",
|
|
34
|
+
"@webex/internal-plugin-team": "2.38.0",
|
|
35
|
+
"@webex/internal-plugin-user": "2.38.0",
|
|
36
|
+
"@webex/webex-core": "2.38.0",
|
|
37
37
|
"lodash": "^4.17.21",
|
|
38
38
|
"uuid": "^3.3.2"
|
|
39
39
|
}
|
package/src/team.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import querystring from 'querystring';
|
|
6
6
|
|
|
7
|
+
import uuid from 'uuid';
|
|
7
8
|
import {find, pick, uniq} from 'lodash';
|
|
8
9
|
import {WebexPlugin} from '@webex/webex-core';
|
|
9
10
|
|
|
@@ -187,13 +188,36 @@ const Team = WebexPlugin.extend({
|
|
|
187
188
|
* Join a team conversation
|
|
188
189
|
* @param {TeamObject} team
|
|
189
190
|
* @param {ConversationObject} conversation
|
|
191
|
+
* @param {userId} userId
|
|
190
192
|
* @returns {Promise} Resolves with the conversation
|
|
191
193
|
*/
|
|
192
|
-
joinConversation(team, conversation) {
|
|
194
|
+
joinConversation(team, conversation, userId) {
|
|
195
|
+
if (!userId) {
|
|
196
|
+
return Promise.reject(new Error('`userId` is required'));
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
const body = {
|
|
200
|
+
kmsMessage: {
|
|
201
|
+
client: {
|
|
202
|
+
clientId: this.webex.internal.device.url,
|
|
203
|
+
credential: {
|
|
204
|
+
bearer: this.webex.credentials.supertoken.access_token,
|
|
205
|
+
userId,
|
|
206
|
+
},
|
|
207
|
+
},
|
|
208
|
+
method: 'create',
|
|
209
|
+
requestId: uuid.v4(),
|
|
210
|
+
resourceUri: conversation.kmsResourceObjectUrl,
|
|
211
|
+
uri: '/authorizations',
|
|
212
|
+
userIds: [userId],
|
|
213
|
+
},
|
|
214
|
+
};
|
|
215
|
+
|
|
193
216
|
return this.webex
|
|
194
217
|
.request({
|
|
195
218
|
method: 'POST',
|
|
196
219
|
uri: `${team.url}/conversations/${conversation.id}/participants`,
|
|
220
|
+
body,
|
|
197
221
|
})
|
|
198
222
|
.then((res) => res.body);
|
|
199
223
|
},
|
|
@@ -314,7 +314,7 @@ describe('plugin-team', () => {
|
|
|
314
314
|
|
|
315
315
|
it('adds the user to an open team conversation', () =>
|
|
316
316
|
spock.webex.internal.team
|
|
317
|
-
.joinConversation(team, conversation)
|
|
317
|
+
.joinConversation(team, conversation, spock.id)
|
|
318
318
|
.then((c) => assert.notInclude(c.tags, 'NOT_JOINED')));
|
|
319
319
|
});
|
|
320
320
|
|
package/test/unit/spec/team.js
CHANGED
|
@@ -108,5 +108,46 @@ describe('plugin-team', () => {
|
|
|
108
108
|
.then(() => assert.equal(webex.internal.user.recordUUID.callCount, 0));
|
|
109
109
|
});
|
|
110
110
|
});
|
|
111
|
+
|
|
112
|
+
describe('#joinConversation', () => {
|
|
113
|
+
const conversation = {kmsResourceObjectUrl: 'convoKroUrl', id: 'convoId'};
|
|
114
|
+
const team = {url: 'teamUrl'};
|
|
115
|
+
const userId = 'userId';
|
|
116
|
+
|
|
117
|
+
beforeEach(() => {
|
|
118
|
+
webex.credentials.supertoken = {access_token: 'fake_token'};
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
it('requires userId to joinConversation', () =>
|
|
122
|
+
assert.isRejected(webex.internal.team.joinConversation(team, conversation), /`userId` is required/));
|
|
123
|
+
|
|
124
|
+
it('makes POST to convo service with correct body kmsMessage', () => {
|
|
125
|
+
webex.credentials.supertoken = {access_token: 'fake_token'}
|
|
126
|
+
return webex.internal.team.joinConversation(team, conversation, userId).then(() => {
|
|
127
|
+
assert.calledWith(
|
|
128
|
+
webex.request,
|
|
129
|
+
sinon.match({
|
|
130
|
+
method: 'POST',
|
|
131
|
+
uri: `${team.url}/conversations/${conversation.id}/participants`,
|
|
132
|
+
body: {
|
|
133
|
+
kmsMessage: {
|
|
134
|
+
client: {
|
|
135
|
+
clientId: webex.internal.device.url,
|
|
136
|
+
credential: {
|
|
137
|
+
bearer: webex.credentials.supertoken.access_token,
|
|
138
|
+
userId,
|
|
139
|
+
},
|
|
140
|
+
},
|
|
141
|
+
method: 'create',
|
|
142
|
+
resourceUri: conversation.kmsResourceObjectUrl,
|
|
143
|
+
uri: '/authorizations',
|
|
144
|
+
userIds: [userId],
|
|
145
|
+
}
|
|
146
|
+
},
|
|
147
|
+
})
|
|
148
|
+
);
|
|
149
|
+
})
|
|
150
|
+
})
|
|
151
|
+
})
|
|
111
152
|
});
|
|
112
153
|
});
|