@webex/internal-plugin-team 2.36.1 → 2.37.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -3
- package/dist/config.js +0 -3
- package/dist/config.js.map +1 -1
- package/dist/index.js +4 -23
- package/dist/index.js.map +1 -1
- package/dist/team.js +68 -139
- package/dist/team.js.map +1 -1
- package/package.json +11 -11
- package/src/config.js +1 -1
- package/src/index.js +49 -33
- package/src/team.js +104 -83
- package/test/integration/spec/actions.js +326 -295
- package/test/integration/spec/create.js +81 -51
- package/test/integration/spec/get.js +47 -45
- package/test/integration/spec/mercury.js +53 -43
- package/test/unit/spec/team.js +38 -26
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","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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webex/internal-plugin-team",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.37.1",
|
|
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.37.1",
|
|
25
|
+
"@webex/test-helper-mocha": "2.37.1",
|
|
26
|
+
"@webex/test-helper-mock-webex": "2.37.1",
|
|
27
|
+
"@webex/test-helper-test-users": "2.37.1",
|
|
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.37.1",
|
|
32
|
+
"@webex/internal-plugin-device": "2.37.1",
|
|
33
|
+
"@webex/internal-plugin-encryption": "2.37.1",
|
|
34
|
+
"@webex/internal-plugin-team": "2.37.1",
|
|
35
|
+
"@webex/internal-plugin-user": "2.37.1",
|
|
36
|
+
"@webex/webex-core": "2.37.1",
|
|
37
37
|
"lodash": "^4.17.21",
|
|
38
38
|
"uuid": "^3.3.2"
|
|
39
39
|
}
|
package/src/config.js
CHANGED
package/src/index.js
CHANGED
|
@@ -18,12 +18,15 @@ registerInternalPlugin('team', Team, {
|
|
|
18
18
|
name: 'decryptTeamRoomStatus',
|
|
19
19
|
direction: 'inbound',
|
|
20
20
|
test(ctx, optionsOrResponse) {
|
|
21
|
-
return Promise.resolve(
|
|
21
|
+
return Promise.resolve(
|
|
22
|
+
has(optionsOrResponse, 'activity.object.activityEvent') &&
|
|
23
|
+
get(optionsOrResponse, 'activity.object.objectType') === 'teamRoomStatus'
|
|
24
|
+
);
|
|
22
25
|
},
|
|
23
26
|
extract(optionsOrResponse) {
|
|
24
27
|
return Promise.resolve(optionsOrResponse.activity.object);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
28
|
+
},
|
|
29
|
+
},
|
|
27
30
|
],
|
|
28
31
|
transforms: [
|
|
29
32
|
{
|
|
@@ -33,7 +36,11 @@ registerInternalPlugin('team', Team, {
|
|
|
33
36
|
const promises = [];
|
|
34
37
|
|
|
35
38
|
if (team.conversations.items) {
|
|
36
|
-
promises.push(
|
|
39
|
+
promises.push(
|
|
40
|
+
Promise.all(
|
|
41
|
+
team.conversations.items.map((item) => ctx.transform('decryptObject', null, item))
|
|
42
|
+
)
|
|
43
|
+
);
|
|
37
44
|
}
|
|
38
45
|
|
|
39
46
|
const usableKey = team.encryptionKeyUrl || key;
|
|
@@ -44,7 +51,7 @@ registerInternalPlugin('team', Team, {
|
|
|
44
51
|
}
|
|
45
52
|
|
|
46
53
|
return Promise.all(promises);
|
|
47
|
-
}
|
|
54
|
+
},
|
|
48
55
|
},
|
|
49
56
|
{
|
|
50
57
|
name: 'decryptTeamRoomStatus',
|
|
@@ -53,14 +60,14 @@ registerInternalPlugin('team', Team, {
|
|
|
53
60
|
const keyUrl = get(teamRoomStatus, 'activityEvent.encryptionKeyUrl');
|
|
54
61
|
|
|
55
62
|
return ctx.transform('decryptObject', keyUrl, teamRoomStatus.activityEvent);
|
|
56
|
-
}
|
|
63
|
+
},
|
|
57
64
|
},
|
|
58
65
|
{
|
|
59
66
|
name: 'decryptPropSummary',
|
|
60
67
|
direction: 'inbound',
|
|
61
68
|
fn(ctx, key, team) {
|
|
62
69
|
return ctx.transform('decryptTextProp', 'summary', key, team);
|
|
63
|
-
}
|
|
70
|
+
},
|
|
64
71
|
},
|
|
65
72
|
{
|
|
66
73
|
name: 'encryptTeam',
|
|
@@ -70,36 +77,41 @@ registerInternalPlugin('team', Team, {
|
|
|
70
77
|
return Promise.resolve();
|
|
71
78
|
}
|
|
72
79
|
|
|
73
|
-
return Promise.resolve(
|
|
74
|
-
.
|
|
75
|
-
|
|
80
|
+
return Promise.resolve(
|
|
81
|
+
key || ctx.webex.internal.encryption.kms.createUnboundKeys({count: 1})
|
|
82
|
+
).then((keys) => {
|
|
83
|
+
const k = isArray(keys) ? keys[0] : keys;
|
|
76
84
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
85
|
+
if (
|
|
86
|
+
team.kmsMessage &&
|
|
87
|
+
team.kmsMessage.keyUris &&
|
|
88
|
+
!team.kmsMessage.keyUris.includes(k.uri)
|
|
89
|
+
) {
|
|
90
|
+
team.kmsMessage.keyUris.push(k.uri);
|
|
91
|
+
}
|
|
80
92
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
team.encryptionKeyUrl = k.uri || k;
|
|
93
|
+
return Promise.all([
|
|
94
|
+
ctx.transform('encryptPropDisplayName', k, team),
|
|
95
|
+
ctx.transform('encryptPropSummary', k, team),
|
|
96
|
+
]).then(() => {
|
|
97
|
+
team.encryptionKeyUrl = k.uri || k;
|
|
87
98
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
99
|
+
// we only want to set the defaultActivityEncryptionKeyUrl if we've
|
|
100
|
+
// bound a new key
|
|
101
|
+
if (!key) {
|
|
102
|
+
team.defaultActivityEncryptionKeyUrl =
|
|
103
|
+
team.defaultActivityEncryptionKeyUrl || k.uri || k;
|
|
104
|
+
}
|
|
94
105
|
});
|
|
95
|
-
|
|
106
|
+
});
|
|
107
|
+
},
|
|
96
108
|
},
|
|
97
109
|
{
|
|
98
110
|
name: 'encryptPropSummary',
|
|
99
111
|
direction: 'outbound',
|
|
100
112
|
fn(ctx, key, team) {
|
|
101
113
|
return ctx.transform('encryptTextProp', 'summary', key, team);
|
|
102
|
-
}
|
|
114
|
+
},
|
|
103
115
|
},
|
|
104
116
|
{
|
|
105
117
|
name: 'normalizeTeam',
|
|
@@ -110,14 +122,18 @@ registerInternalPlugin('team', Team, {
|
|
|
110
122
|
team.teamMembers.items = team.teamMembers.items || [];
|
|
111
123
|
|
|
112
124
|
return Promise.all([
|
|
113
|
-
Promise.all(
|
|
114
|
-
|
|
125
|
+
Promise.all(
|
|
126
|
+
team.conversations.items.map((item) => ctx.transform('normalizeObject', item))
|
|
127
|
+
),
|
|
128
|
+
Promise.all(
|
|
129
|
+
team.teamMembers.items.map((item) => ctx.transform('normalizeObject', item))
|
|
130
|
+
),
|
|
115
131
|
]);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
]
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
],
|
|
119
135
|
},
|
|
120
|
-
config
|
|
136
|
+
config,
|
|
121
137
|
});
|
|
122
138
|
|
|
123
139
|
export {default} from './team';
|
package/src/team.js
CHANGED
|
@@ -21,20 +21,22 @@ const Team = WebexPlugin.extend({
|
|
|
21
21
|
*/
|
|
22
22
|
addConversation(team, conversation, activity) {
|
|
23
23
|
return this._ensureGeneralConversation(team)
|
|
24
|
-
.then((generalConversation) =>
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
24
|
+
.then((generalConversation) =>
|
|
25
|
+
this.webex.internal.conversation.prepare(activity, {
|
|
26
|
+
verb: 'add',
|
|
27
|
+
target: this.webex.internal.conversation.prepareConversation(generalConversation),
|
|
28
|
+
object: {
|
|
29
|
+
id: conversation.id,
|
|
30
|
+
objectType: 'conversation',
|
|
31
|
+
},
|
|
32
|
+
kmsMessage: {
|
|
33
|
+
method: 'create',
|
|
34
|
+
uri: '/authorizations',
|
|
35
|
+
resourceUri: conversation.kmsResourceObjectUrl,
|
|
36
|
+
userIds: [generalConversation.kmsResourceObjectUrl],
|
|
37
|
+
},
|
|
38
|
+
})
|
|
39
|
+
)
|
|
38
40
|
.then((a) => this.webex.internal.conversation.submit(a));
|
|
39
41
|
},
|
|
40
42
|
|
|
@@ -48,8 +50,9 @@ const Team = WebexPlugin.extend({
|
|
|
48
50
|
* @returns {Promise} Resolves with activity that was posted
|
|
49
51
|
*/
|
|
50
52
|
addMember(team, participant, activity) {
|
|
51
|
-
return this._ensureGeneralConversation(team)
|
|
52
|
-
|
|
53
|
+
return this._ensureGeneralConversation(team).then((generalConversation) =>
|
|
54
|
+
this.webex.internal.conversation.add(generalConversation, participant, activity)
|
|
55
|
+
);
|
|
53
56
|
},
|
|
54
57
|
|
|
55
58
|
/**
|
|
@@ -69,18 +72,24 @@ const Team = WebexPlugin.extend({
|
|
|
69
72
|
return Promise.reject(new Error('`params.participants` is required'));
|
|
70
73
|
}
|
|
71
74
|
|
|
72
|
-
return Promise.all(
|
|
75
|
+
return Promise.all(
|
|
76
|
+
params.participants.map((participant) =>
|
|
77
|
+
this.webex.internal.user.asUUID(participant, {create: true})
|
|
78
|
+
)
|
|
79
|
+
)
|
|
73
80
|
.then((participants) => {
|
|
74
81
|
participants.unshift(this.webex.internal.device.userId);
|
|
75
82
|
params.participants = uniq(participants);
|
|
76
83
|
})
|
|
77
84
|
.then(() => this._prepareTeam(params))
|
|
78
|
-
.then((payload) =>
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
85
|
+
.then((payload) =>
|
|
86
|
+
this.webex.request({
|
|
87
|
+
method: 'POST',
|
|
88
|
+
service: 'conversation',
|
|
89
|
+
resource: 'teams',
|
|
90
|
+
body: payload,
|
|
91
|
+
})
|
|
92
|
+
)
|
|
84
93
|
.then((res) => res.body);
|
|
85
94
|
},
|
|
86
95
|
|
|
@@ -106,18 +115,26 @@ const Team = WebexPlugin.extend({
|
|
|
106
115
|
}
|
|
107
116
|
|
|
108
117
|
return this._ensureGeneralConversation(team)
|
|
109
|
-
.then((generalConversation) =>
|
|
110
|
-
.
|
|
111
|
-
participants.
|
|
112
|
-
|
|
118
|
+
.then((generalConversation) =>
|
|
119
|
+
Promise.all(
|
|
120
|
+
params.participants.map((participant) =>
|
|
121
|
+
this.webex.internal.user.asUUID(participant, {create: true})
|
|
122
|
+
)
|
|
123
|
+
)
|
|
124
|
+
.then((participants) => {
|
|
125
|
+
participants.unshift(this.webex.internal.device.userId);
|
|
126
|
+
params.participants = uniq(participants);
|
|
127
|
+
})
|
|
128
|
+
.then(() => this._prepareTeamConversation(generalConversation, params))
|
|
129
|
+
)
|
|
130
|
+
.then((payload) =>
|
|
131
|
+
this.webex.request({
|
|
132
|
+
method: 'POST',
|
|
133
|
+
uri: `${team.url}/conversations`,
|
|
134
|
+
qs: pick(options, 'includeAllTeamMembers'),
|
|
135
|
+
body: payload,
|
|
113
136
|
})
|
|
114
|
-
|
|
115
|
-
.then((payload) => this.webex.request({
|
|
116
|
-
method: 'POST',
|
|
117
|
-
uri: `${team.url}/conversations`,
|
|
118
|
-
qs: pick(options, 'includeAllTeamMembers'),
|
|
119
|
-
body: payload
|
|
120
|
-
}))
|
|
137
|
+
)
|
|
121
138
|
.then((res) => res.body);
|
|
122
139
|
},
|
|
123
140
|
|
|
@@ -134,17 +151,18 @@ const Team = WebexPlugin.extend({
|
|
|
134
151
|
if (!url) {
|
|
135
152
|
return Promise.reject(new Error('`team.url` is required'));
|
|
136
153
|
}
|
|
137
|
-
const params =
|
|
154
|
+
const params = {
|
|
138
155
|
includeTeamConversations: false,
|
|
139
|
-
includeTeamMembers: false
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
156
|
+
includeTeamMembers: false,
|
|
157
|
+
...options,
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
return this.webex
|
|
161
|
+
.request({
|
|
162
|
+
uri: url,
|
|
163
|
+
qs: params,
|
|
164
|
+
})
|
|
165
|
+
.then((res) => this._recordUUIDs(res.body).then(() => res.body));
|
|
148
166
|
},
|
|
149
167
|
|
|
150
168
|
/**
|
|
@@ -158,9 +176,10 @@ const Team = WebexPlugin.extend({
|
|
|
158
176
|
return Promise.reject(new Error('`team.url` is required'));
|
|
159
177
|
}
|
|
160
178
|
|
|
161
|
-
return this.webex
|
|
162
|
-
|
|
163
|
-
|
|
179
|
+
return this.webex
|
|
180
|
+
.request({
|
|
181
|
+
uri: `${url}/conversations`,
|
|
182
|
+
})
|
|
164
183
|
.then((res) => res.body.items);
|
|
165
184
|
},
|
|
166
185
|
|
|
@@ -171,10 +190,11 @@ const Team = WebexPlugin.extend({
|
|
|
171
190
|
* @returns {Promise} Resolves with the conversation
|
|
172
191
|
*/
|
|
173
192
|
joinConversation(team, conversation) {
|
|
174
|
-
return this.webex
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
193
|
+
return this.webex
|
|
194
|
+
.request({
|
|
195
|
+
method: 'POST',
|
|
196
|
+
uri: `${team.url}/conversations/${conversation.id}/participants`,
|
|
197
|
+
})
|
|
178
198
|
.then((res) => res.body);
|
|
179
199
|
},
|
|
180
200
|
|
|
@@ -186,16 +206,17 @@ const Team = WebexPlugin.extend({
|
|
|
186
206
|
* @returns {Promise} Resolves with the requested teams
|
|
187
207
|
*/
|
|
188
208
|
async list(options = {}) {
|
|
189
|
-
const params =
|
|
209
|
+
const params = {
|
|
190
210
|
includeTeamConversations: false,
|
|
191
|
-
includeTeamMembers: false
|
|
192
|
-
|
|
211
|
+
includeTeamMembers: false,
|
|
212
|
+
...options,
|
|
213
|
+
};
|
|
193
214
|
const resource = 'teams';
|
|
194
215
|
|
|
195
216
|
const res = await this.webex.request({
|
|
196
217
|
api: 'conversation',
|
|
197
218
|
resource,
|
|
198
|
-
qs: params
|
|
219
|
+
qs: params,
|
|
199
220
|
});
|
|
200
221
|
|
|
201
222
|
let list = res.body.items.slice(0);
|
|
@@ -207,7 +228,7 @@ const Team = WebexPlugin.extend({
|
|
|
207
228
|
|
|
208
229
|
return this.webex.request({
|
|
209
230
|
uri,
|
|
210
|
-
qs: params
|
|
231
|
+
qs: params,
|
|
211
232
|
});
|
|
212
233
|
})
|
|
213
234
|
);
|
|
@@ -234,8 +255,9 @@ const Team = WebexPlugin.extend({
|
|
|
234
255
|
* @returns {Promise} Resolves with activity that was posted
|
|
235
256
|
*/
|
|
236
257
|
removeMember(team, participant, activity) {
|
|
237
|
-
return this._ensureGeneralConversation(team)
|
|
238
|
-
|
|
258
|
+
return this._ensureGeneralConversation(team).then((generalConversation) =>
|
|
259
|
+
this.webex.internal.conversation.leave(generalConversation, participant, activity)
|
|
260
|
+
);
|
|
239
261
|
},
|
|
240
262
|
|
|
241
263
|
/**
|
|
@@ -256,8 +278,8 @@ const Team = WebexPlugin.extend({
|
|
|
256
278
|
target: pick(generalConversation, 'id', 'url', 'objectType'),
|
|
257
279
|
kmsMessage: {
|
|
258
280
|
method: 'delete',
|
|
259
|
-
uri: `<KRO>/authorizations?${querystring.stringify({authId: conversation.id})}
|
|
260
|
-
}
|
|
281
|
+
uri: `<KRO>/authorizations?${querystring.stringify({authId: conversation.id})}`,
|
|
282
|
+
},
|
|
261
283
|
};
|
|
262
284
|
|
|
263
285
|
return this.webex.internal.conversation.prepare(activity, properties);
|
|
@@ -285,7 +307,9 @@ const Team = WebexPlugin.extend({
|
|
|
285
307
|
}
|
|
286
308
|
|
|
287
309
|
if (team.conversations.items.length) {
|
|
288
|
-
const generalConversation = find(team.conversations.items, {
|
|
310
|
+
const generalConversation = find(team.conversations.items, {
|
|
311
|
+
id: team.generalConversationUuid,
|
|
312
|
+
});
|
|
289
313
|
|
|
290
314
|
if (generalConversation) {
|
|
291
315
|
return Promise.resolve(generalConversation);
|
|
@@ -326,19 +350,21 @@ const Team = WebexPlugin.extend({
|
|
|
326
350
|
return Promise.resolve(team);
|
|
327
351
|
}
|
|
328
352
|
|
|
329
|
-
return Promise.all(
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
353
|
+
return Promise.all(
|
|
354
|
+
team.teamMembers.items.map((participant) => {
|
|
355
|
+
// ROOMs or LYRA_SPACEs do not have email addresses, so there's no point attempting to
|
|
356
|
+
// record their UUIDs.
|
|
357
|
+
if (participant.type === 'ROOM' || participant.type === 'LYRA_SPACE') {
|
|
358
|
+
return Promise.resolve();
|
|
359
|
+
}
|
|
335
360
|
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
361
|
+
return this.webex.internal.user
|
|
362
|
+
.recordUUID(participant)
|
|
363
|
+
.catch((err) => this.logger.warn('Could not record uuid', err));
|
|
364
|
+
})
|
|
365
|
+
);
|
|
366
|
+
},
|
|
340
367
|
/* eslint-enable require-jsdoc */
|
|
341
|
-
|
|
342
368
|
});
|
|
343
369
|
|
|
344
370
|
/**
|
|
@@ -348,13 +374,11 @@ const Team = WebexPlugin.extend({
|
|
|
348
374
|
* @param {Object} activity
|
|
349
375
|
* @returns {Promise} Resolves with activity that was posted
|
|
350
376
|
*/
|
|
351
|
-
[
|
|
352
|
-
'assignModerator',
|
|
353
|
-
'unassignModerator'
|
|
354
|
-
].forEach((verb) => {
|
|
377
|
+
['assignModerator', 'unassignModerator'].forEach((verb) => {
|
|
355
378
|
Team.prototype[verb] = function submitModerationChangeActivity(team, member, activity) {
|
|
356
|
-
return this._ensureGeneralConversation(team)
|
|
357
|
-
|
|
379
|
+
return this._ensureGeneralConversation(team).then((teamConversation) =>
|
|
380
|
+
this.webex.internal.conversation[verb](teamConversation, member, activity)
|
|
381
|
+
);
|
|
358
382
|
};
|
|
359
383
|
});
|
|
360
384
|
|
|
@@ -366,10 +390,7 @@ const Team = WebexPlugin.extend({
|
|
|
366
390
|
* provisional activity
|
|
367
391
|
* @returns {Promise} Resolves with the posted activity
|
|
368
392
|
*/
|
|
369
|
-
[
|
|
370
|
-
'archive',
|
|
371
|
-
'unarchive'
|
|
372
|
-
].forEach((verb) => {
|
|
393
|
+
['archive', 'unarchive'].forEach((verb) => {
|
|
373
394
|
Team.prototype[verb] = function submitArchiveStateChangeActivity(target, activity) {
|
|
374
395
|
if (!target.objectType) {
|
|
375
396
|
return Promise.reject(new Error('`target.objectType` is required'));
|
|
@@ -378,7 +399,7 @@ const Team = WebexPlugin.extend({
|
|
|
378
399
|
const properties = {
|
|
379
400
|
verb,
|
|
380
401
|
object: pick(target, 'id', 'url', 'objectType'),
|
|
381
|
-
target: pick(target, 'id', 'url', 'objectType')
|
|
402
|
+
target: pick(target, 'id', 'url', 'objectType'),
|
|
382
403
|
};
|
|
383
404
|
|
|
384
405
|
const teamUrl = this.webex.internal.conversation.getConvoUrl(target);
|