@webex/plugin-meetings 3.0.0-beta.50 → 3.0.0-beta.51

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.
@@ -115,7 +115,7 @@ var Breakout = _webexCore.WebexPlugin.extend({
115
115
  parseRoster: function parseRoster(locus) {
116
116
  this.members.locusParticipantsUpdate(locus);
117
117
  },
118
- /**
118
+ /*
119
119
  * Broadcast message to this breakout session's participants
120
120
  * @param {String} message
121
121
  * @param {Object} options
@@ -130,7 +130,7 @@ var Breakout = _webexCore.WebexPlugin.extend({
130
130
  sessionId: this.sessionId
131
131
  });
132
132
  },
133
- version: "3.0.0-beta.50"
133
+ version: "3.0.0-beta.51"
134
134
  });
135
135
  var _default = Breakout;
136
136
  exports.default = _default;
@@ -1 +1 @@
1
- {"version":3,"names":["Breakout","WebexPlugin","extend","idAttribute","namespace","MEETINGS","breakoutRequest","BreakoutRequest","props","active","allowed","assigned","assignedCurrent","requested","current","name","sessionId","sessionType","groupId","url","derived","isMain","deps","fn","initialize","members","Members","parent","webex","join","request","method","HTTP_VERBS","POST","uri","body","leave","Error","mainSession","breakouts","filter","breakout","askForHelp","parseRoster","locus","locusParticipantsUpdate","broadcast","message","options"],"sources":["breakout.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {WebexPlugin} from '@webex/webex-core';\n\nimport {HTTP_VERBS, MEETINGS} from '../constants';\nimport LocusInfo from '../locus-info';\nimport Members from '../members';\nimport BreakoutRequest from './request';\n\n/**\n * @class\n */\nconst Breakout = WebexPlugin.extend({\n idAttribute: 'sessionId',\n\n namespace: MEETINGS,\n\n breakoutRequest: BreakoutRequest,\n props: {\n active: ['boolean', false, false], // this session is active\n allowed: ['boolean', false, false], // allowed to join this session\n assigned: ['boolean', false, false], // assigned to this session, but not necessarily joined yet\n assignedCurrent: ['boolean', false, false], // assigned AND current session\n requested: ['boolean', false, false], // requested by the host to join this session\n current: ['boolean', false, false], // the current joined session\n name: 'string',\n sessionId: 'string',\n sessionType: 'string',\n groupId: 'string',\n url: 'string', // where to send requests to\n },\n\n derived: {\n isMain: {\n deps: ['sessionType'],\n /**\n * If the breakout has no name, assume it is the main session\n * @returns {boolean}\n */\n fn() {\n return this.sessionType === 'MAIN';\n },\n },\n },\n\n initialize() {\n this.members = new Members({}, {parent: this.webex});\n // @ts-ignore\n this.breakoutRequest = new BreakoutRequest({webex: this.webex});\n },\n\n /**\n * Joins the breakout session\n * @returns {Promise}\n */\n join() {\n return this.request({\n method: HTTP_VERBS.POST,\n uri: `${this.url}/move`,\n body: {\n groupId: this.groupId,\n sessionId: this.sessionId,\n },\n });\n },\n\n /**\n * Leaves the breakout session to return to the main session\n * @returns {Promise}\n * @throws {Error} if an attempt is made to leave the main session or if the main session cannot be found\n */\n leave() {\n if (this.isMain) {\n throw new Error('Cannot leave the main session');\n }\n\n const mainSession = this.parent.breakouts.filter((breakout) => breakout.isMain)[0];\n\n if (!mainSession) {\n throw new Error('Cannot leave, no main session found');\n }\n\n return mainSession.join();\n },\n\n /**\n * Sends a help request for the current breakout\n * @returns {Promise}\n */\n askForHelp() {\n return this.request({\n method: HTTP_VERBS.POST,\n uri: `${this.url}/help`,\n body: {\n groupId: this.groupId,\n sessionId: this.sessionId,\n },\n });\n },\n\n /**\n * Parses the participants from the locus object\n * @param locus Locus object\n * @returns {void}\n */\n\n parseRoster(locus) {\n this.members.locusParticipantsUpdate(locus);\n },\n\n /**\n * Broadcast message to this breakout session's participants\n * @param {String} message\n * @param {Object} options\n * @returns {Promise}\n */\n broadcast(message, options) {\n return this.breakoutRequest.broadcast({\n url: this.url,\n message,\n options,\n groupId: this.groupId,\n sessionId: this.sessionId,\n });\n },\n});\n\nexport default Breakout;\n"],"mappings":"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"}
1
+ {"version":3,"names":["Breakout","WebexPlugin","extend","idAttribute","namespace","MEETINGS","breakoutRequest","BreakoutRequest","props","active","allowed","assigned","assignedCurrent","requested","current","name","sessionId","sessionType","groupId","url","derived","isMain","deps","fn","initialize","members","Members","parent","webex","join","request","method","HTTP_VERBS","POST","uri","body","leave","Error","mainSession","breakouts","filter","breakout","askForHelp","parseRoster","locus","locusParticipantsUpdate","broadcast","message","options"],"sources":["breakout.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {WebexPlugin} from '@webex/webex-core';\n\nimport {HTTP_VERBS, MEETINGS} from '../constants';\nimport LocusInfo from '../locus-info';\nimport Members from '../members';\nimport BreakoutRequest from './request';\n\n/**\n * @class\n */\nconst Breakout = WebexPlugin.extend({\n idAttribute: 'sessionId',\n\n namespace: MEETINGS,\n\n breakoutRequest: BreakoutRequest,\n props: {\n active: ['boolean', false, false], // this session is active\n allowed: ['boolean', false, false], // allowed to join this session\n assigned: ['boolean', false, false], // assigned to this session, but not necessarily joined yet\n assignedCurrent: ['boolean', false, false], // assigned AND current session\n requested: ['boolean', false, false], // requested by the host to join this session\n current: ['boolean', false, false], // the current joined session\n name: 'string',\n sessionId: 'string',\n sessionType: 'string',\n groupId: 'string',\n url: 'string', // where to send requests to\n },\n\n derived: {\n isMain: {\n deps: ['sessionType'],\n /**\n * If the breakout has no name, assume it is the main session\n * @returns {boolean}\n */\n fn() {\n return this.sessionType === 'MAIN';\n },\n },\n },\n\n initialize() {\n this.members = new Members({}, {parent: this.webex});\n // @ts-ignore\n this.breakoutRequest = new BreakoutRequest({webex: this.webex});\n },\n\n /**\n * Joins the breakout session\n * @returns {Promise}\n */\n join() {\n return this.request({\n method: HTTP_VERBS.POST,\n uri: `${this.url}/move`,\n body: {\n groupId: this.groupId,\n sessionId: this.sessionId,\n },\n });\n },\n\n /**\n * Leaves the breakout session to return to the main session\n * @returns {Promise}\n * @throws {Error} if an attempt is made to leave the main session or if the main session cannot be found\n */\n leave() {\n if (this.isMain) {\n throw new Error('Cannot leave the main session');\n }\n\n const mainSession = this.parent.breakouts.filter((breakout) => breakout.isMain)[0];\n\n if (!mainSession) {\n throw new Error('Cannot leave, no main session found');\n }\n\n return mainSession.join();\n },\n\n /**\n * Sends a help request for the current breakout\n * @returns {Promise}\n */\n askForHelp() {\n return this.request({\n method: HTTP_VERBS.POST,\n uri: `${this.url}/help`,\n body: {\n groupId: this.groupId,\n sessionId: this.sessionId,\n },\n });\n },\n\n /**\n * Parses the participants from the locus object\n * @param locus Locus object\n * @returns {void}\n */\n\n parseRoster(locus) {\n this.members.locusParticipantsUpdate(locus);\n },\n /*\n * Broadcast message to this breakout session's participants\n * @param {String} message\n * @param {Object} options\n * @returns {Promise}\n */\n broadcast(message, options) {\n return this.breakoutRequest.broadcast({\n url: this.url,\n message,\n options,\n groupId: this.groupId,\n sessionId: this.sessionId,\n });\n },\n});\n\nexport default Breakout;\n"],"mappings":"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"}
@@ -548,7 +548,31 @@ var Breakouts = _webexCore.WebexPlugin.extend({
548
548
  }, _callee4);
549
549
  }))();
550
550
  },
551
- version: "3.0.0-beta.50"
551
+ /**
552
+ * assign participants to breakout session
553
+ * @param {Array} sessions
554
+ * @returns {void}
555
+ */
556
+ assign: function assign(sessions) {
557
+ var internalSessions = sessions.map(function (item) {
558
+ return {
559
+ id: item.id,
560
+ assigned: item.memberIds,
561
+ assignedEmails: item.emails
562
+ };
563
+ });
564
+ return this.request({
565
+ method: _constants.HTTP_VERBS.PUT,
566
+ uri: this.url,
567
+ body: {
568
+ groups: [{
569
+ id: this.breakoutGroupId,
570
+ sessions: internalSessions
571
+ }]
572
+ }
573
+ });
574
+ },
575
+ version: "3.0.0-beta.51"
552
576
  });
553
577
  var _default = Breakouts;
554
578
  exports.default = _default;
@@ -1 +1 @@
1
- {"version":3,"names":["Breakouts","WebexPlugin","extend","namespace","MEETINGS","breakoutRequest","BreakoutRequest","collections","breakouts","BreakoutCollection","props","allowBackToMain","delayCloseTime","enableBreakoutSession","groupId","name","sessionId","sessionType","startTime","status","url","locusUrl","breakoutServiceUrl","mainLocusUrl","groups","children","currentBreakoutSession","Breakout","derived","isInMainSession","deps","fn","BREAKOUTS","SESSION_TYPES","MAIN","breakoutGroupId","length","id","initialize","listenTo","STATUS","CLOSING","trigger","EVENTS","BREAKOUTS_CLOSING","debouncedQueryRosters","queryRosters","leading","trailing","listenToBroadcastMessages","listenToBreakoutRosters","webex","cleanUp","stopListening","locusUrlUpdate","set","breakoutServiceUrlUpdate","request","uri","qs","btoa","then","result","rosters","body","forEach","locus","handleRosterUpdate","MEMBERS_UPDATE","catch","error","LoggerProxy","logger","controls","breakout","session","get","parseRoster","internal","llm","event","data","senderUserId","sentTime","message","MESSAGE","mercury","updateBreakout","params","current","SESSION_STATES","ACTIVE","ALLOWED","ASSIGNED_CURRENT","REQUESTED","updateBreakoutSessions","payload","breakoutSessions","state","ASSIGNED","getMainSession","mainSession","filter","isMain","Error","askAllToReturn","method","HTTP_VERBS","POST","broadcast","options","enableBreakouts","err","reject","toggleBreakout","enable","undefined","info","doToggleBreakout","PUT","create","sessions","boServiceErrorHandler","breakInfo","resolve","clearSessions","action","ACTION","DELETE","start","START","allowToJoinLater","duration","DEFAULT_DURATION","end","CLOSE","getBreakout","editlock","GET"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.\n */\nimport {WebexPlugin} from '@webex/webex-core';\nimport {debounce, forEach} from 'lodash';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\nimport {BREAKOUTS, MEETINGS, HTTP_VERBS} from '../constants';\n\nimport Breakout from './breakout';\nimport BreakoutCollection from './collection';\nimport BreakoutRequest from './request';\nimport {boServiceErrorHandler} from './utils';\n\n/**\n * @class Breakouts\n */\nconst Breakouts = WebexPlugin.extend({\n namespace: MEETINGS,\n breakoutRequest: BreakoutRequest,\n collections: {\n breakouts: BreakoutCollection,\n },\n\n props: {\n allowBackToMain: 'boolean', // only present when in a breakout session\n delayCloseTime: 'number', // appears once breakouts start\n enableBreakoutSession: 'boolean', // appears from the moment you enable breakouts\n groupId: 'string', // appears from the moment you enable breakouts\n name: 'string', // only present when in a breakout session\n sessionId: 'string', // appears from the moment you enable breakouts\n sessionType: 'string', // appears from the moment you enable breakouts\n startTime: 'string', // appears once breakouts start\n status: 'string', // only present when in a breakout session\n url: 'string', // appears from the moment you enable breakouts\n locusUrl: 'string', // the current locus url\n breakoutServiceUrl: 'string', // the current breakout resouce url\n mainLocusUrl: 'string', // the locus url of the main session\n groups: 'array', // appears when create breakouts\n },\n\n children: {\n currentBreakoutSession: Breakout,\n },\n\n derived: {\n isInMainSession: {\n deps: ['sessionType'],\n /**\n * Returns true if the user is in the main session\n * @returns {boolean}\n */\n fn() {\n return this.sessionType === BREAKOUTS.SESSION_TYPES.MAIN;\n },\n },\n breakoutGroupId: {\n deps: ['groups'],\n /**\n * Returns the actived group id\n * @returns {boolean}\n */\n fn() {\n if (this.groups?.length) {\n return this.groups[0].id;\n }\n\n return '';\n },\n },\n },\n\n /**\n * initialize for the breakouts\n * @returns {void}\n */\n initialize() {\n this.listenTo(this, 'change:status', () => {\n if (this.status === BREAKOUTS.STATUS.CLOSING) {\n this.trigger(BREAKOUTS.EVENTS.BREAKOUTS_CLOSING);\n }\n });\n this.debouncedQueryRosters = debounce(this.queryRosters, 10, {\n leading: true,\n trailing: false,\n });\n this.listenTo(this.breakouts, 'add', () => {\n this.debouncedQueryRosters();\n });\n this.listenToBroadcastMessages();\n this.listenToBreakoutRosters();\n // @ts-ignore\n this.breakoutRequest = new BreakoutRequest({webex: this.webex});\n },\n\n /**\n * Calls this to clean up listeners\n * @returns {void}\n */\n cleanUp() {\n this.stopListening();\n },\n\n /**\n * Update the current locus url of the meeting\n * @param {string} locusUrl // locus url\n * @returns {void}\n */\n locusUrlUpdate(locusUrl) {\n this.set('locusUrl', locusUrl);\n const {isInMainSession, mainLocusUrl} = this;\n if (isInMainSession || !mainLocusUrl) {\n this.set('mainLocusUrl', locusUrl);\n }\n },\n\n /**\n * Update the current breakout resouce url\n * @param {string} breakoutServiceUrl\n * @returns {void}\n */\n breakoutServiceUrlUpdate(breakoutServiceUrl) {\n this.set('breakoutServiceUrl', `${breakoutServiceUrl}/breakout/`);\n },\n\n /**\n * The initial roster lists need to be queried because you don't\n * get a breakout.roster event when you join the meeting\n * @returns {void}\n */\n queryRosters() {\n this.webex\n .request({uri: `${this.url}/roster`, qs: {locusUrl: btoa(this.locusUrl)}})\n .then((result) => {\n const {\n body: {rosters},\n } = result;\n\n rosters?.forEach(({locus}) => {\n this.handleRosterUpdate(locus);\n });\n\n this.trigger(BREAKOUTS.EVENTS.MEMBERS_UPDATE);\n })\n .catch((error) => {\n LoggerProxy.logger.error('Meeting:breakouts#queryRosters failed', error);\n });\n },\n\n /**\n *\n * @param {Object} locus // locus object\n * @returns {void}\n */\n handleRosterUpdate(locus) {\n const sessionId = locus.controls?.breakout?.sessionId;\n\n const session = this.breakouts.get(sessionId);\n\n if (!session) {\n return;\n }\n\n session.parseRoster(locus);\n },\n\n /**\n * Sets up listener for broadcast messages sent to the breakout session\n * @returns {void}\n */\n listenToBroadcastMessages() {\n this.listenTo(this.webex.internal.llm, 'event:breakout.message', (event) => {\n const {\n data: {senderUserId, sentTime, message},\n } = event;\n\n this.trigger(BREAKOUTS.EVENTS.MESSAGE, {\n senderUserId,\n sentTime,\n message,\n // FIXME: This is only the current sessionId\n // We'd need to check that the dataChannelUrl is still the same\n // to guarantee that this message was sent to this session\n sessionId: this.currentBreakoutSession.sessionId,\n });\n });\n },\n\n /**\n * Sets up a listener for roster messags from mecury\n * @returns {void}\n */\n listenToBreakoutRosters() {\n this.listenTo(this.webex.internal.mercury, 'event:breakout.roster', (event) => {\n this.handleRosterUpdate(event.data.locus);\n this.trigger(BREAKOUTS.EVENTS.MEMBERS_UPDATE);\n });\n },\n\n /**\n * Updates the information about the current breakout\n * @param {Object} params\n * @returns {void}\n */\n updateBreakout(params) {\n this.set(params);\n this.set('groups', params.groups);\n\n this.set('currentBreakoutSession', {\n sessionId: params.sessionId,\n groupId: params.groupId,\n name: params.name,\n current: true,\n sessionType: params.sessionType,\n url: params.url,\n [BREAKOUTS.SESSION_STATES.ACTIVE]: false,\n [BREAKOUTS.SESSION_STATES.ALLOWED]: false,\n [BREAKOUTS.SESSION_STATES.ALLOWED]: false,\n [BREAKOUTS.SESSION_STATES.ASSIGNED_CURRENT]: false,\n [BREAKOUTS.SESSION_STATES.REQUESTED]: false,\n });\n\n this.set('enableBreakoutSession', params.enableBreakoutSession);\n },\n\n /**\n * Updates the information about available breakouts\n * @param {Object} payload\n * @returns {void}\n */\n updateBreakoutSessions(payload) {\n const breakouts = {};\n\n if (payload.breakoutSessions) {\n forEach(BREAKOUTS.SESSION_STATES, (state) => {\n forEach(payload.breakoutSessions[state], (breakout) => {\n const {sessionId} = breakout;\n\n if (!breakouts[sessionId]) {\n breakouts[sessionId] = breakout;\n breakouts[sessionId][BREAKOUTS.SESSION_STATES.ACTIVE] = false;\n breakouts[sessionId][BREAKOUTS.SESSION_STATES.ASSIGNED] = false;\n breakouts[sessionId][BREAKOUTS.SESSION_STATES.ALLOWED] = false;\n breakouts[sessionId][BREAKOUTS.SESSION_STATES.ASSIGNED_CURRENT] = false;\n breakouts[sessionId][BREAKOUTS.SESSION_STATES.REQUESTED] = false;\n }\n\n breakouts[sessionId][state] = true;\n });\n });\n }\n\n forEach(breakouts, (breakout: typeof Breakout) => {\n // eslint-disable-next-line no-param-reassign\n breakout.url = this.url;\n });\n\n this.breakouts.set(Object.values(breakouts));\n },\n /**\n * get main session\n * @returns {Breakout}\n */\n getMainSession() {\n if (this.isInMainSession) {\n return this.currentBreakoutSession;\n }\n\n const mainSession = this.breakouts.filter((breakout) => breakout.isMain)[0];\n if (!mainSession) {\n throw new Error('no main session found');\n }\n\n return mainSession;\n },\n /**\n * Host/CoHost ask all participants return to main session\n * @returns {Promise}\n */\n askAllToReturn() {\n const mainSession = this.getMainSession();\n\n return this.webex.request({\n method: HTTP_VERBS.POST,\n uri: `${this.url}/requestMove`,\n body: {\n groupId: mainSession.groupId,\n sessionId: mainSession.sessionId,\n },\n });\n },\n\n /**\n * Broadcast message to all breakout session's participants\n * @param {String} message\n * @param {Object} options\n * @returns {Promise}\n */\n broadcast(message, options) {\n const {breakoutGroupId} = this;\n if (!breakoutGroupId) {\n throw new Error('Cannot broadcast, no breakout session found');\n }\n\n return this.breakoutRequest.broadcast({\n url: this.url,\n message,\n options,\n groupId: breakoutGroupId,\n });\n },\n /**\n * Make enable breakout resource\n * @returns {Promise}\n */\n enableBreakouts() {\n if (this.breakoutServiceUrl) {\n // @ts-ignore\n return this.webex\n .request({\n method: HTTP_VERBS.POST,\n uri: this.breakoutServiceUrl,\n body: {\n locusUrl: this.locusUrl,\n },\n })\n .catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:request#touchBreakout --> Error provisioning error ${err}`\n );\n throw err;\n });\n }\n\n return Promise.reject(new Error(`enableBreakouts: the breakoutServiceUrl is empty`));\n },\n\n /**\n * Make the meeting enbale or disable breakout session\n * @param {boolean} enable\n * @returns {Promise}\n */\n async toggleBreakout(enable) {\n if (this.enableBreakoutSession === undefined) {\n const info = await this.enableBreakouts();\n if (!enable) {\n // if enable is false, updateBreakout set the param then set enableBreakoutSession as false\n this.updateBreakout(info.body);\n await this.doToggleBreakout(enable);\n }\n } else {\n await this.doToggleBreakout(enable);\n }\n },\n\n /**\n * do toggle meeting breakout session enable or disable\n * @param {boolean} enable\n * @returns {Promise}\n */\n doToggleBreakout(enable) {\n // @ts-ignore\n return this.webex.request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body: {\n enableBreakoutSession: enable,\n },\n });\n },\n\n /**\n * Create new breakout sessions\n * @param {object} sessions -- breakout session group\n * @returns {Promise}\n */\n async create(sessions) {\n // @ts-ignore\n const breakInfo = await this.webex\n .request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body: {\n groups: [\n {\n sessions,\n },\n ],\n },\n })\n .catch((error) => {\n return Promise.reject(\n boServiceErrorHandler(error, 'Breakouts#create --> Edit lock token mismatch')\n );\n });\n\n if (breakInfo.body?.groups) {\n this.set('groups', breakInfo.body.groups);\n }\n\n return Promise.resolve(breakInfo);\n },\n\n /**\n * Delete all breakout sessions\n * @returns {Promise}\n */\n async clearSessions() {\n // @ts-ignore\n const breakInfo = await this.webex\n .request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body: {\n groups: [\n {\n action: BREAKOUTS.ACTION.DELETE,\n },\n ],\n },\n })\n .catch((error) => {\n return Promise.reject(\n boServiceErrorHandler(error, 'Breakouts#clearSessions --> Edit lock token mismatch')\n );\n });\n\n if (breakInfo.body?.groups) {\n this.set('groups', breakInfo.body.groups);\n }\n\n return Promise.resolve(breakInfo);\n },\n\n /**\n * Host or cohost starts breakout sessions\n * @param {object} params\n * @returns {Promise}\n */\n start(params = {}) {\n const action = BREAKOUTS.ACTION.START;\n const payload = {\n id: this.breakoutGroupId,\n action,\n allowBackToMain: false,\n allowToJoinLater: false,\n duration: BREAKOUTS.DEFAULT_DURATION,\n ...params,\n };\n\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body: {\n groups: [payload],\n },\n }).catch((error) => {\n return Promise.reject(\n boServiceErrorHandler(error, 'Breakouts#start --> Edit lock token mismatch')\n );\n });\n },\n\n /**\n * Host or cohost ends breakout sessions\n * @param {object} params\n * @returns {Promise}\n */\n end(params = {}) {\n const {delayCloseTime, breakoutGroupId: id} = this;\n const action = BREAKOUTS.ACTION.CLOSE;\n const payload = {\n id,\n action,\n delayCloseTime,\n ...params,\n };\n\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body: {\n groups: [payload],\n },\n }).catch((error) => {\n return Promise.reject(\n boServiceErrorHandler(error, 'Breakouts#end --> Edit lock token mismatch')\n );\n });\n },\n\n /**\n * get existed breakout sessions\n * @param {boolean} editlock -- lock operations of the breakout sessions\n * @returns {Promise}\n */\n async getBreakout(editlock) {\n const breakout = await this.request({\n method: HTTP_VERBS.GET,\n uri: this.url + (editlock ? `?editlock=${editlock}` : ''),\n });\n\n if (breakout.body?.groups) {\n this.set('groups', breakout.body.groups);\n }\n\n return breakout;\n },\n});\n\nexport default Breakouts;\n"],"mappings":"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"}
1
+ {"version":3,"names":["Breakouts","WebexPlugin","extend","namespace","MEETINGS","breakoutRequest","BreakoutRequest","collections","breakouts","BreakoutCollection","props","allowBackToMain","delayCloseTime","enableBreakoutSession","groupId","name","sessionId","sessionType","startTime","status","url","locusUrl","breakoutServiceUrl","mainLocusUrl","groups","children","currentBreakoutSession","Breakout","derived","isInMainSession","deps","fn","BREAKOUTS","SESSION_TYPES","MAIN","breakoutGroupId","length","id","initialize","listenTo","STATUS","CLOSING","trigger","EVENTS","BREAKOUTS_CLOSING","debouncedQueryRosters","queryRosters","leading","trailing","listenToBroadcastMessages","listenToBreakoutRosters","webex","cleanUp","stopListening","locusUrlUpdate","set","breakoutServiceUrlUpdate","request","uri","qs","btoa","then","result","rosters","body","forEach","locus","handleRosterUpdate","MEMBERS_UPDATE","catch","error","LoggerProxy","logger","controls","breakout","session","get","parseRoster","internal","llm","event","data","senderUserId","sentTime","message","MESSAGE","mercury","updateBreakout","params","current","SESSION_STATES","ACTIVE","ALLOWED","ASSIGNED_CURRENT","REQUESTED","updateBreakoutSessions","payload","breakoutSessions","state","ASSIGNED","getMainSession","mainSession","filter","isMain","Error","askAllToReturn","method","HTTP_VERBS","POST","broadcast","options","enableBreakouts","err","reject","toggleBreakout","enable","undefined","info","doToggleBreakout","PUT","create","sessions","boServiceErrorHandler","breakInfo","resolve","clearSessions","action","ACTION","DELETE","start","START","allowToJoinLater","duration","DEFAULT_DURATION","end","CLOSE","getBreakout","editlock","GET","assign","internalSessions","map","item","assigned","memberIds","assignedEmails","emails"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.\n */\nimport {WebexPlugin} from '@webex/webex-core';\nimport {debounce, forEach} from 'lodash';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\nimport {BREAKOUTS, MEETINGS, HTTP_VERBS} from '../constants';\n\nimport Breakout from './breakout';\nimport BreakoutCollection from './collection';\nimport BreakoutRequest from './request';\nimport {boServiceErrorHandler} from './utils';\n\n/**\n * @class Breakouts\n */\nconst Breakouts = WebexPlugin.extend({\n namespace: MEETINGS,\n breakoutRequest: BreakoutRequest,\n collections: {\n breakouts: BreakoutCollection,\n },\n\n props: {\n allowBackToMain: 'boolean', // only present when in a breakout session\n delayCloseTime: 'number', // appears once breakouts start\n enableBreakoutSession: 'boolean', // appears from the moment you enable breakouts\n groupId: 'string', // appears from the moment you enable breakouts\n name: 'string', // only present when in a breakout session\n sessionId: 'string', // appears from the moment you enable breakouts\n sessionType: 'string', // appears from the moment you enable breakouts\n startTime: 'string', // appears once breakouts start\n status: 'string', // only present when in a breakout session\n url: 'string', // appears from the moment you enable breakouts\n locusUrl: 'string', // the current locus url\n breakoutServiceUrl: 'string', // the current breakout resouce url\n mainLocusUrl: 'string', // the locus url of the main session\n groups: 'array', // appears when create breakouts\n },\n\n children: {\n currentBreakoutSession: Breakout,\n },\n\n derived: {\n isInMainSession: {\n deps: ['sessionType'],\n /**\n * Returns true if the user is in the main session\n * @returns {boolean}\n */\n fn() {\n return this.sessionType === BREAKOUTS.SESSION_TYPES.MAIN;\n },\n },\n breakoutGroupId: {\n deps: ['groups'],\n /**\n * Returns the actived group id\n * @returns {boolean}\n */\n fn() {\n if (this.groups?.length) {\n return this.groups[0].id;\n }\n\n return '';\n },\n },\n },\n\n /**\n * initialize for the breakouts\n * @returns {void}\n */\n initialize() {\n this.listenTo(this, 'change:status', () => {\n if (this.status === BREAKOUTS.STATUS.CLOSING) {\n this.trigger(BREAKOUTS.EVENTS.BREAKOUTS_CLOSING);\n }\n });\n this.debouncedQueryRosters = debounce(this.queryRosters, 10, {\n leading: true,\n trailing: false,\n });\n this.listenTo(this.breakouts, 'add', () => {\n this.debouncedQueryRosters();\n });\n this.listenToBroadcastMessages();\n this.listenToBreakoutRosters();\n // @ts-ignore\n this.breakoutRequest = new BreakoutRequest({webex: this.webex});\n },\n\n /**\n * Calls this to clean up listeners\n * @returns {void}\n */\n cleanUp() {\n this.stopListening();\n },\n\n /**\n * Update the current locus url of the meeting\n * @param {string} locusUrl // locus url\n * @returns {void}\n */\n locusUrlUpdate(locusUrl) {\n this.set('locusUrl', locusUrl);\n const {isInMainSession, mainLocusUrl} = this;\n if (isInMainSession || !mainLocusUrl) {\n this.set('mainLocusUrl', locusUrl);\n }\n },\n\n /**\n * Update the current breakout resouce url\n * @param {string} breakoutServiceUrl\n * @returns {void}\n */\n breakoutServiceUrlUpdate(breakoutServiceUrl) {\n this.set('breakoutServiceUrl', `${breakoutServiceUrl}/breakout/`);\n },\n\n /**\n * The initial roster lists need to be queried because you don't\n * get a breakout.roster event when you join the meeting\n * @returns {void}\n */\n queryRosters() {\n this.webex\n .request({uri: `${this.url}/roster`, qs: {locusUrl: btoa(this.locusUrl)}})\n .then((result) => {\n const {\n body: {rosters},\n } = result;\n\n rosters?.forEach(({locus}) => {\n this.handleRosterUpdate(locus);\n });\n\n this.trigger(BREAKOUTS.EVENTS.MEMBERS_UPDATE);\n })\n .catch((error) => {\n LoggerProxy.logger.error('Meeting:breakouts#queryRosters failed', error);\n });\n },\n\n /**\n *\n * @param {Object} locus // locus object\n * @returns {void}\n */\n handleRosterUpdate(locus) {\n const sessionId = locus.controls?.breakout?.sessionId;\n\n const session = this.breakouts.get(sessionId);\n\n if (!session) {\n return;\n }\n\n session.parseRoster(locus);\n },\n\n /**\n * Sets up listener for broadcast messages sent to the breakout session\n * @returns {void}\n */\n listenToBroadcastMessages() {\n this.listenTo(this.webex.internal.llm, 'event:breakout.message', (event) => {\n const {\n data: {senderUserId, sentTime, message},\n } = event;\n\n this.trigger(BREAKOUTS.EVENTS.MESSAGE, {\n senderUserId,\n sentTime,\n message,\n // FIXME: This is only the current sessionId\n // We'd need to check that the dataChannelUrl is still the same\n // to guarantee that this message was sent to this session\n sessionId: this.currentBreakoutSession.sessionId,\n });\n });\n },\n\n /**\n * Sets up a listener for roster messags from mecury\n * @returns {void}\n */\n listenToBreakoutRosters() {\n this.listenTo(this.webex.internal.mercury, 'event:breakout.roster', (event) => {\n this.handleRosterUpdate(event.data.locus);\n this.trigger(BREAKOUTS.EVENTS.MEMBERS_UPDATE);\n });\n },\n\n /**\n * Updates the information about the current breakout\n * @param {Object} params\n * @returns {void}\n */\n updateBreakout(params) {\n this.set(params);\n this.set('groups', params.groups);\n\n this.set('currentBreakoutSession', {\n sessionId: params.sessionId,\n groupId: params.groupId,\n name: params.name,\n current: true,\n sessionType: params.sessionType,\n url: params.url,\n [BREAKOUTS.SESSION_STATES.ACTIVE]: false,\n [BREAKOUTS.SESSION_STATES.ALLOWED]: false,\n [BREAKOUTS.SESSION_STATES.ALLOWED]: false,\n [BREAKOUTS.SESSION_STATES.ASSIGNED_CURRENT]: false,\n [BREAKOUTS.SESSION_STATES.REQUESTED]: false,\n });\n\n this.set('enableBreakoutSession', params.enableBreakoutSession);\n },\n\n /**\n * Updates the information about available breakouts\n * @param {Object} payload\n * @returns {void}\n */\n updateBreakoutSessions(payload) {\n const breakouts = {};\n\n if (payload.breakoutSessions) {\n forEach(BREAKOUTS.SESSION_STATES, (state) => {\n forEach(payload.breakoutSessions[state], (breakout) => {\n const {sessionId} = breakout;\n\n if (!breakouts[sessionId]) {\n breakouts[sessionId] = breakout;\n breakouts[sessionId][BREAKOUTS.SESSION_STATES.ACTIVE] = false;\n breakouts[sessionId][BREAKOUTS.SESSION_STATES.ASSIGNED] = false;\n breakouts[sessionId][BREAKOUTS.SESSION_STATES.ALLOWED] = false;\n breakouts[sessionId][BREAKOUTS.SESSION_STATES.ASSIGNED_CURRENT] = false;\n breakouts[sessionId][BREAKOUTS.SESSION_STATES.REQUESTED] = false;\n }\n\n breakouts[sessionId][state] = true;\n });\n });\n }\n\n forEach(breakouts, (breakout: typeof Breakout) => {\n // eslint-disable-next-line no-param-reassign\n breakout.url = this.url;\n });\n\n this.breakouts.set(Object.values(breakouts));\n },\n /**\n * get main session\n * @returns {Breakout}\n */\n getMainSession() {\n if (this.isInMainSession) {\n return this.currentBreakoutSession;\n }\n\n const mainSession = this.breakouts.filter((breakout) => breakout.isMain)[0];\n if (!mainSession) {\n throw new Error('no main session found');\n }\n\n return mainSession;\n },\n /**\n * Host/CoHost ask all participants return to main session\n * @returns {Promise}\n */\n askAllToReturn() {\n const mainSession = this.getMainSession();\n\n return this.webex.request({\n method: HTTP_VERBS.POST,\n uri: `${this.url}/requestMove`,\n body: {\n groupId: mainSession.groupId,\n sessionId: mainSession.sessionId,\n },\n });\n },\n\n /**\n * Broadcast message to all breakout session's participants\n * @param {String} message\n * @param {Object} options\n * @returns {Promise}\n */\n broadcast(message, options) {\n const {breakoutGroupId} = this;\n if (!breakoutGroupId) {\n throw new Error('Cannot broadcast, no breakout session found');\n }\n\n return this.breakoutRequest.broadcast({\n url: this.url,\n message,\n options,\n groupId: breakoutGroupId,\n });\n },\n /**\n * Make enable breakout resource\n * @returns {Promise}\n */\n enableBreakouts() {\n if (this.breakoutServiceUrl) {\n // @ts-ignore\n return this.webex\n .request({\n method: HTTP_VERBS.POST,\n uri: this.breakoutServiceUrl,\n body: {\n locusUrl: this.locusUrl,\n },\n })\n .catch((err) => {\n LoggerProxy.logger.error(\n `Meeting:request#touchBreakout --> Error provisioning error ${err}`\n );\n throw err;\n });\n }\n\n return Promise.reject(new Error(`enableBreakouts: the breakoutServiceUrl is empty`));\n },\n\n /**\n * Make the meeting enbale or disable breakout session\n * @param {boolean} enable\n * @returns {Promise}\n */\n async toggleBreakout(enable) {\n if (this.enableBreakoutSession === undefined) {\n const info = await this.enableBreakouts();\n if (!enable) {\n // if enable is false, updateBreakout set the param then set enableBreakoutSession as false\n this.updateBreakout(info.body);\n await this.doToggleBreakout(enable);\n }\n } else {\n await this.doToggleBreakout(enable);\n }\n },\n\n /**\n * do toggle meeting breakout session enable or disable\n * @param {boolean} enable\n * @returns {Promise}\n */\n doToggleBreakout(enable) {\n // @ts-ignore\n return this.webex.request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body: {\n enableBreakoutSession: enable,\n },\n });\n },\n\n /**\n * Create new breakout sessions\n * @param {object} sessions -- breakout session group\n * @returns {Promise}\n */\n async create(sessions) {\n // @ts-ignore\n const breakInfo = await this.webex\n .request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body: {\n groups: [\n {\n sessions,\n },\n ],\n },\n })\n .catch((error) => {\n return Promise.reject(\n boServiceErrorHandler(error, 'Breakouts#create --> Edit lock token mismatch')\n );\n });\n\n if (breakInfo.body?.groups) {\n this.set('groups', breakInfo.body.groups);\n }\n\n return Promise.resolve(breakInfo);\n },\n\n /**\n * Delete all breakout sessions\n * @returns {Promise}\n */\n async clearSessions() {\n // @ts-ignore\n const breakInfo = await this.webex\n .request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body: {\n groups: [\n {\n action: BREAKOUTS.ACTION.DELETE,\n },\n ],\n },\n })\n .catch((error) => {\n return Promise.reject(\n boServiceErrorHandler(error, 'Breakouts#clearSessions --> Edit lock token mismatch')\n );\n });\n\n if (breakInfo.body?.groups) {\n this.set('groups', breakInfo.body.groups);\n }\n\n return Promise.resolve(breakInfo);\n },\n\n /**\n * Host or cohost starts breakout sessions\n * @param {object} params\n * @returns {Promise}\n */\n start(params = {}) {\n const action = BREAKOUTS.ACTION.START;\n const payload = {\n id: this.breakoutGroupId,\n action,\n allowBackToMain: false,\n allowToJoinLater: false,\n duration: BREAKOUTS.DEFAULT_DURATION,\n ...params,\n };\n\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body: {\n groups: [payload],\n },\n }).catch((error) => {\n return Promise.reject(\n boServiceErrorHandler(error, 'Breakouts#start --> Edit lock token mismatch')\n );\n });\n },\n\n /**\n * Host or cohost ends breakout sessions\n * @param {object} params\n * @returns {Promise}\n */\n end(params = {}) {\n const {delayCloseTime, breakoutGroupId: id} = this;\n const action = BREAKOUTS.ACTION.CLOSE;\n const payload = {\n id,\n action,\n delayCloseTime,\n ...params,\n };\n\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body: {\n groups: [payload],\n },\n }).catch((error) => {\n return Promise.reject(\n boServiceErrorHandler(error, 'Breakouts#end --> Edit lock token mismatch')\n );\n });\n },\n\n /**\n * get existed breakout sessions\n * @param {boolean} editlock -- lock operations of the breakout sessions\n * @returns {Promise}\n */\n async getBreakout(editlock) {\n const breakout = await this.request({\n method: HTTP_VERBS.GET,\n uri: this.url + (editlock ? `?editlock=${editlock}` : ''),\n });\n\n if (breakout.body?.groups) {\n this.set('groups', breakout.body.groups);\n }\n\n return breakout;\n },\n\n /**\n * assign participants to breakout session\n * @param {Array} sessions\n * @returns {void}\n */\n assign(sessions: any[]) {\n const internalSessions = sessions.map((item) => {\n return {\n id: item.id,\n assigned: item.memberIds,\n assignedEmails: item.emails,\n };\n });\n\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body: {\n groups: [\n {\n id: this.breakoutGroupId,\n sessions: internalSessions,\n },\n ],\n },\n });\n },\n});\n\nexport default Breakouts;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAGA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AAA8C;AAAA;AAE9C;AACA;AACA;AACA,IAAMA,SAAS,GAAGC,sBAAW,CAACC,MAAM,CAAC;EACnCC,SAAS,EAAEC,mBAAQ;EACnBC,eAAe,EAAEC,gBAAe;EAChCC,WAAW,EAAE;IACXC,SAAS,EAAEC;EACb,CAAC;EAEDC,KAAK,EAAE;IACLC,eAAe,EAAE,SAAS;IAAE;IAC5BC,cAAc,EAAE,QAAQ;IAAE;IAC1BC,qBAAqB,EAAE,SAAS;IAAE;IAClCC,OAAO,EAAE,QAAQ;IAAE;IACnBC,IAAI,EAAE,QAAQ;IAAE;IAChBC,SAAS,EAAE,QAAQ;IAAE;IACrBC,WAAW,EAAE,QAAQ;IAAE;IACvBC,SAAS,EAAE,QAAQ;IAAE;IACrBC,MAAM,EAAE,QAAQ;IAAE;IAClBC,GAAG,EAAE,QAAQ;IAAE;IACfC,QAAQ,EAAE,QAAQ;IAAE;IACpBC,kBAAkB,EAAE,QAAQ;IAAE;IAC9BC,YAAY,EAAE,QAAQ;IAAE;IACxBC,MAAM,EAAE,OAAO,CAAE;EACnB,CAAC;;EAEDC,QAAQ,EAAE;IACRC,sBAAsB,EAAEC;EAC1B,CAAC;EAEDC,OAAO,EAAE;IACPC,eAAe,EAAE;MACfC,IAAI,EAAE,CAAC,aAAa,CAAC;MACrB;AACN;AACA;AACA;MACMC,EAAE,gBAAG;QACH,OAAO,IAAI,CAACd,WAAW,KAAKe,oBAAS,CAACC,aAAa,CAACC,IAAI;MAC1D;IACF,CAAC;IACDC,eAAe,EAAE;MACfL,IAAI,EAAE,CAAC,QAAQ,CAAC;MAChB;AACN;AACA;AACA;MACMC,EAAE,gBAAG;QAAA;QACH,oBAAI,IAAI,CAACP,MAAM,yCAAX,aAAaY,MAAM,EAAE;UACvB,OAAO,IAAI,CAACZ,MAAM,CAAC,CAAC,CAAC,CAACa,EAAE;QAC1B;QAEA,OAAO,EAAE;MACX;IACF;EACF,CAAC;EAED;AACF;AACA;AACA;EACEC,UAAU,wBAAG;IAAA;IACX,IAAI,CAACC,QAAQ,CAAC,IAAI,EAAE,eAAe,EAAE,YAAM;MACzC,IAAI,KAAI,CAACpB,MAAM,KAAKa,oBAAS,CAACQ,MAAM,CAACC,OAAO,EAAE;QAC5C,KAAI,CAACC,OAAO,CAACV,oBAAS,CAACW,MAAM,CAACC,iBAAiB,CAAC;MAClD;IACF,CAAC,CAAC;IACF,IAAI,CAACC,qBAAqB,GAAG,wBAAS,IAAI,CAACC,YAAY,EAAE,EAAE,EAAE;MAC3DC,OAAO,EAAE,IAAI;MACbC,QAAQ,EAAE;IACZ,CAAC,CAAC;IACF,IAAI,CAACT,QAAQ,CAAC,IAAI,CAAC/B,SAAS,EAAE,KAAK,EAAE,YAAM;MACzC,KAAI,CAACqC,qBAAqB,EAAE;IAC9B,CAAC,CAAC;IACF,IAAI,CAACI,yBAAyB,EAAE;IAChC,IAAI,CAACC,uBAAuB,EAAE;IAC9B;IACA,IAAI,CAAC7C,eAAe,GAAG,IAAIC,gBAAe,CAAC;MAAC6C,KAAK,EAAE,IAAI,CAACA;IAAK,CAAC,CAAC;EACjE,CAAC;EAED;AACF;AACA;AACA;EACEC,OAAO,qBAAG;IACR,IAAI,CAACC,aAAa,EAAE;EACtB,CAAC;EAED;AACF;AACA;AACA;AACA;EACEC,cAAc,0BAACjC,QAAQ,EAAE;IACvB,IAAI,CAACkC,GAAG,CAAC,UAAU,EAAElC,QAAQ,CAAC;IAC9B,IAAOQ,eAAe,GAAkB,IAAI,CAArCA,eAAe;MAAEN,YAAY,GAAI,IAAI,CAApBA,YAAY;IACpC,IAAIM,eAAe,IAAI,CAACN,YAAY,EAAE;MACpC,IAAI,CAACgC,GAAG,CAAC,cAAc,EAAElC,QAAQ,CAAC;IACpC;EACF,CAAC;EAED;AACF;AACA;AACA;AACA;EACEmC,wBAAwB,oCAAClC,kBAAkB,EAAE;IAC3C,IAAI,CAACiC,GAAG,CAAC,oBAAoB,YAAKjC,kBAAkB,gBAAa;EACnE,CAAC;EAED;AACF;AACA;AACA;AACA;EACEwB,YAAY,0BAAG;IAAA;IACb,IAAI,CAACK,KAAK,CACPM,OAAO,CAAC;MAACC,GAAG,YAAK,IAAI,CAACtC,GAAG,YAAS;MAAEuC,EAAE,EAAE;QAACtC,QAAQ,EAAEuC,IAAI,CAAC,IAAI,CAACvC,QAAQ;MAAC;IAAC,CAAC,CAAC,CACzEwC,IAAI,CAAC,UAACC,MAAM,EAAK;MAChB,IACSC,OAAO,GACZD,MAAM,CADRE,IAAI,CAAGD,OAAO;MAGhBA,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEE,OAAO,CAAC,gBAAa;QAAA,IAAXC,KAAK,QAALA,KAAK;QACtB,MAAI,CAACC,kBAAkB,CAACD,KAAK,CAAC;MAChC,CAAC,CAAC;MAEF,MAAI,CAACxB,OAAO,CAACV,oBAAS,CAACW,MAAM,CAACyB,cAAc,CAAC;IAC/C,CAAC,CAAC,CACDC,KAAK,CAAC,UAACC,KAAK,EAAK;MAChBC,oBAAW,CAACC,MAAM,CAACF,KAAK,CAAC,uCAAuC,EAAEA,KAAK,CAAC;IAC1E,CAAC,CAAC;EACN,CAAC;EAED;AACF;AACA;AACA;AACA;EACEH,kBAAkB,8BAACD,KAAK,EAAE;IAAA;IACxB,IAAMlD,SAAS,sBAAGkD,KAAK,CAACO,QAAQ,6EAAd,gBAAgBC,QAAQ,0DAAxB,sBAA0B1D,SAAS;IAErD,IAAM2D,OAAO,GAAG,IAAI,CAACnE,SAAS,CAACoE,GAAG,CAAC5D,SAAS,CAAC;IAE7C,IAAI,CAAC2D,OAAO,EAAE;MACZ;IACF;IAEAA,OAAO,CAACE,WAAW,CAACX,KAAK,CAAC;EAC5B,CAAC;EAED;AACF;AACA;AACA;EACEjB,yBAAyB,uCAAG;IAAA;IAC1B,IAAI,CAACV,QAAQ,CAAC,IAAI,CAACY,KAAK,CAAC2B,QAAQ,CAACC,GAAG,EAAE,wBAAwB,EAAE,UAACC,KAAK,EAAK;MAC1E,kBAEIA,KAAK,CADPC,IAAI;QAAGC,YAAY,eAAZA,YAAY;QAAEC,QAAQ,eAARA,QAAQ;QAAEC,OAAO,eAAPA,OAAO;MAGxC,MAAI,CAAC1C,OAAO,CAACV,oBAAS,CAACW,MAAM,CAAC0C,OAAO,EAAE;QACrCH,YAAY,EAAZA,YAAY;QACZC,QAAQ,EAARA,QAAQ;QACRC,OAAO,EAAPA,OAAO;QACP;QACA;QACA;QACApE,SAAS,EAAE,MAAI,CAACU,sBAAsB,CAACV;MACzC,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ,CAAC;EAED;AACF;AACA;AACA;EACEkC,uBAAuB,qCAAG;IAAA;IACxB,IAAI,CAACX,QAAQ,CAAC,IAAI,CAACY,KAAK,CAAC2B,QAAQ,CAACQ,OAAO,EAAE,uBAAuB,EAAE,UAACN,KAAK,EAAK;MAC7E,MAAI,CAACb,kBAAkB,CAACa,KAAK,CAACC,IAAI,CAACf,KAAK,CAAC;MACzC,MAAI,CAACxB,OAAO,CAACV,oBAAS,CAACW,MAAM,CAACyB,cAAc,CAAC;IAC/C,CAAC,CAAC;EACJ,CAAC;EAED;AACF;AACA;AACA;AACA;EACEmB,cAAc,0BAACC,MAAM,EAAE;IAAA;IACrB,IAAI,CAACjC,GAAG,CAACiC,MAAM,CAAC;IAChB,IAAI,CAACjC,GAAG,CAAC,QAAQ,EAAEiC,MAAM,CAAChE,MAAM,CAAC;IAEjC,IAAI,CAAC+B,GAAG,CAAC,wBAAwB;MAC/BvC,SAAS,EAAEwE,MAAM,CAACxE,SAAS;MAC3BF,OAAO,EAAE0E,MAAM,CAAC1E,OAAO;MACvBC,IAAI,EAAEyE,MAAM,CAACzE,IAAI;MACjB0E,OAAO,EAAE,IAAI;MACbxE,WAAW,EAAEuE,MAAM,CAACvE,WAAW;MAC/BG,GAAG,EAAEoE,MAAM,CAACpE;IAAG,4CACdY,oBAAS,CAAC0D,cAAc,CAACC,MAAM,EAAG,KAAK,4CACvC3D,oBAAS,CAAC0D,cAAc,CAACE,OAAO,EAAG,KAAK,4CACxC5D,oBAAS,CAAC0D,cAAc,CAACE,OAAO,EAAG,KAAK,4CACxC5D,oBAAS,CAAC0D,cAAc,CAACG,gBAAgB,EAAG,KAAK,4CACjD7D,oBAAS,CAAC0D,cAAc,CAACI,SAAS,EAAG,KAAK,cAC3C;IAEF,IAAI,CAACvC,GAAG,CAAC,uBAAuB,EAAEiC,MAAM,CAAC3E,qBAAqB,CAAC;EACjE,CAAC;EAED;AACF;AACA;AACA;AACA;EACEkF,sBAAsB,kCAACC,OAAO,EAAE;IAAA;IAC9B,IAAMxF,SAAS,GAAG,CAAC,CAAC;IAEpB,IAAIwF,OAAO,CAACC,gBAAgB,EAAE;MAC5B,uBAAQjE,oBAAS,CAAC0D,cAAc,EAAE,UAACQ,KAAK,EAAK;QAC3C,uBAAQF,OAAO,CAACC,gBAAgB,CAACC,KAAK,CAAC,EAAE,UAACxB,QAAQ,EAAK;UACrD,IAAO1D,SAAS,GAAI0D,QAAQ,CAArB1D,SAAS;UAEhB,IAAI,CAACR,SAAS,CAACQ,SAAS,CAAC,EAAE;YACzBR,SAAS,CAACQ,SAAS,CAAC,GAAG0D,QAAQ;YAC/BlE,SAAS,CAACQ,SAAS,CAAC,CAACgB,oBAAS,CAAC0D,cAAc,CAACC,MAAM,CAAC,GAAG,KAAK;YAC7DnF,SAAS,CAACQ,SAAS,CAAC,CAACgB,oBAAS,CAAC0D,cAAc,CAACS,QAAQ,CAAC,GAAG,KAAK;YAC/D3F,SAAS,CAACQ,SAAS,CAAC,CAACgB,oBAAS,CAAC0D,cAAc,CAACE,OAAO,CAAC,GAAG,KAAK;YAC9DpF,SAAS,CAACQ,SAAS,CAAC,CAACgB,oBAAS,CAAC0D,cAAc,CAACG,gBAAgB,CAAC,GAAG,KAAK;YACvErF,SAAS,CAACQ,SAAS,CAAC,CAACgB,oBAAS,CAAC0D,cAAc,CAACI,SAAS,CAAC,GAAG,KAAK;UAClE;UAEAtF,SAAS,CAACQ,SAAS,CAAC,CAACkF,KAAK,CAAC,GAAG,IAAI;QACpC,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ;IAEA,uBAAQ1F,SAAS,EAAE,UAACkE,QAAyB,EAAK;MAChD;MACAA,QAAQ,CAACtD,GAAG,GAAG,MAAI,CAACA,GAAG;IACzB,CAAC,CAAC;IAEF,IAAI,CAACZ,SAAS,CAAC+C,GAAG,CAAC,qBAAc/C,SAAS,CAAC,CAAC;EAC9C,CAAC;EACD;AACF;AACA;AACA;EACE4F,cAAc,4BAAG;IACf,IAAI,IAAI,CAACvE,eAAe,EAAE;MACxB,OAAO,IAAI,CAACH,sBAAsB;IACpC;IAEA,IAAM2E,WAAW,GAAG,IAAI,CAAC7F,SAAS,CAAC8F,MAAM,CAAC,UAAC5B,QAAQ;MAAA,OAAKA,QAAQ,CAAC6B,MAAM;IAAA,EAAC,CAAC,CAAC,CAAC;IAC3E,IAAI,CAACF,WAAW,EAAE;MAChB,MAAM,IAAIG,KAAK,CAAC,uBAAuB,CAAC;IAC1C;IAEA,OAAOH,WAAW;EACpB,CAAC;EACD;AACF;AACA;AACA;EACEI,cAAc,4BAAG;IACf,IAAMJ,WAAW,GAAG,IAAI,CAACD,cAAc,EAAE;IAEzC,OAAO,IAAI,CAACjD,KAAK,CAACM,OAAO,CAAC;MACxBiD,MAAM,EAAEC,qBAAU,CAACC,IAAI;MACvBlD,GAAG,YAAK,IAAI,CAACtC,GAAG,iBAAc;MAC9B4C,IAAI,EAAE;QACJlD,OAAO,EAAEuF,WAAW,CAACvF,OAAO;QAC5BE,SAAS,EAAEqF,WAAW,CAACrF;MACzB;IACF,CAAC,CAAC;EACJ,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACE6F,SAAS,qBAACzB,OAAO,EAAE0B,OAAO,EAAE;IAC1B,IAAO3E,eAAe,GAAI,IAAI,CAAvBA,eAAe;IACtB,IAAI,CAACA,eAAe,EAAE;MACpB,MAAM,IAAIqE,KAAK,CAAC,6CAA6C,CAAC;IAChE;IAEA,OAAO,IAAI,CAACnG,eAAe,CAACwG,SAAS,CAAC;MACpCzF,GAAG,EAAE,IAAI,CAACA,GAAG;MACbgE,OAAO,EAAPA,OAAO;MACP0B,OAAO,EAAPA,OAAO;MACPhG,OAAO,EAAEqB;IACX,CAAC,CAAC;EACJ,CAAC;EACD;AACF;AACA;AACA;EACE4E,eAAe,6BAAG;IAChB,IAAI,IAAI,CAACzF,kBAAkB,EAAE;MAC3B;MACA,OAAO,IAAI,CAAC6B,KAAK,CACdM,OAAO,CAAC;QACPiD,MAAM,EAAEC,qBAAU,CAACC,IAAI;QACvBlD,GAAG,EAAE,IAAI,CAACpC,kBAAkB;QAC5B0C,IAAI,EAAE;UACJ3C,QAAQ,EAAE,IAAI,CAACA;QACjB;MACF,CAAC,CAAC,CACDgD,KAAK,CAAC,UAAC2C,GAAG,EAAK;QACdzC,oBAAW,CAACC,MAAM,CAACF,KAAK,sEACwC0C,GAAG,EAClE;QACD,MAAMA,GAAG;MACX,CAAC,CAAC;IACN;IAEA,OAAO,iBAAQC,MAAM,CAAC,IAAIT,KAAK,oDAAoD,CAAC;EACtF,CAAC;EAED;AACF;AACA;AACA;AACA;EACQU,cAAc,0BAACC,MAAM,EAAE;IAAA;IAAA;MAAA;MAAA;QAAA;UAAA;YAAA,MACvB,MAAI,CAACtG,qBAAqB,KAAKuG,SAAS;cAAA;cAAA;YAAA;YAAA;YAAA,OACvB,MAAI,CAACL,eAAe,EAAE;UAAA;YAAnCM,IAAI;YAAA,IACLF,MAAM;cAAA;cAAA;YAAA;YACT;YACA,MAAI,CAAC5B,cAAc,CAAC8B,IAAI,CAACrD,IAAI,CAAC;YAAC;YAAA,OACzB,MAAI,CAACsD,gBAAgB,CAACH,MAAM,CAAC;UAAA;YAAA;YAAA;UAAA;YAAA;YAAA,OAG/B,MAAI,CAACG,gBAAgB,CAACH,MAAM,CAAC;UAAA;UAAA;YAAA;QAAA;MAAA;IAAA;EAEvC,CAAC;EAED;AACF;AACA;AACA;AACA;EACEG,gBAAgB,4BAACH,MAAM,EAAE;IACvB;IACA,OAAO,IAAI,CAAChE,KAAK,CAACM,OAAO,CAAC;MACxBiD,MAAM,EAAEC,qBAAU,CAACY,GAAG;MACtB7D,GAAG,EAAE,IAAI,CAACtC,GAAG;MACb4C,IAAI,EAAE;QACJnD,qBAAqB,EAAEsG;MACzB;IACF,CAAC,CAAC;EACJ,CAAC;EAED;AACF;AACA;AACA;AACA;EACQK,MAAM,kBAACC,QAAQ,EAAE;IAAA;IAAA;MAAA;MAAA;MAAA;QAAA;UAAA;YAAA;YAAA,OAEG,MAAI,CAACtE,KAAK,CAC/BM,OAAO,CAAC;cACPiD,MAAM,EAAEC,qBAAU,CAACY,GAAG;cACtB7D,GAAG,EAAE,MAAI,CAACtC,GAAG;cACb4C,IAAI,EAAE;gBACJxC,MAAM,EAAE,CACN;kBACEiG,QAAQ,EAARA;gBACF,CAAC;cAEL;YACF,CAAC,CAAC,CACDpD,KAAK,CAAC,UAACC,KAAK,EAAK;cAChB,OAAO,iBAAQ2C,MAAM,CACnB,IAAAS,4BAAqB,EAACpD,KAAK,EAAE,+CAA+C,CAAC,CAC9E;YACH,CAAC,CAAC;UAAA;YAhBEqD,SAAS;YAkBf,uBAAIA,SAAS,CAAC3D,IAAI,4CAAd,gBAAgBxC,MAAM,EAAE;cAC1B,MAAI,CAAC+B,GAAG,CAAC,QAAQ,EAAEoE,SAAS,CAAC3D,IAAI,CAACxC,MAAM,CAAC;YAC3C;YAAC,kCAEM,iBAAQoG,OAAO,CAACD,SAAS,CAAC;UAAA;UAAA;YAAA;QAAA;MAAA;IAAA;EACnC,CAAC;EAED;AACF;AACA;AACA;EACQE,aAAa,2BAAG;IAAA;IAAA;MAAA;MAAA;MAAA;QAAA;UAAA;YAAA;YAAA,OAEI,MAAI,CAAC1E,KAAK,CAC/BM,OAAO,CAAC;cACPiD,MAAM,EAAEC,qBAAU,CAACY,GAAG;cACtB7D,GAAG,EAAE,MAAI,CAACtC,GAAG;cACb4C,IAAI,EAAE;gBACJxC,MAAM,EAAE,CACN;kBACEsG,MAAM,EAAE9F,oBAAS,CAAC+F,MAAM,CAACC;gBAC3B,CAAC;cAEL;YACF,CAAC,CAAC,CACD3D,KAAK,CAAC,UAACC,KAAK,EAAK;cAChB,OAAO,iBAAQ2C,MAAM,CACnB,IAAAS,4BAAqB,EAACpD,KAAK,EAAE,sDAAsD,CAAC,CACrF;YACH,CAAC,CAAC;UAAA;YAhBEqD,SAAS;YAkBf,wBAAIA,SAAS,CAAC3D,IAAI,6CAAd,iBAAgBxC,MAAM,EAAE;cAC1B,MAAI,CAAC+B,GAAG,CAAC,QAAQ,EAAEoE,SAAS,CAAC3D,IAAI,CAACxC,MAAM,CAAC;YAC3C;YAAC,kCAEM,iBAAQoG,OAAO,CAACD,SAAS,CAAC;UAAA;UAAA;YAAA;QAAA;MAAA;IAAA;EACnC,CAAC;EAED;AACF;AACA;AACA;AACA;EACEM,KAAK,mBAAc;IAAA,IAAbzC,MAAM,uEAAG,CAAC,CAAC;IACf,IAAMsC,MAAM,GAAG9F,oBAAS,CAAC+F,MAAM,CAACG,KAAK;IACrC,IAAMlC,OAAO;MACX3D,EAAE,EAAE,IAAI,CAACF,eAAe;MACxB2F,MAAM,EAANA,MAAM;MACNnH,eAAe,EAAE,KAAK;MACtBwH,gBAAgB,EAAE,KAAK;MACvBC,QAAQ,EAAEpG,oBAAS,CAACqG;IAAgB,GACjC7C,MAAM,CACV;IAED,OAAO,IAAI,CAAC/B,OAAO,CAAC;MAClBiD,MAAM,EAAEC,qBAAU,CAACY,GAAG;MACtB7D,GAAG,EAAE,IAAI,CAACtC,GAAG;MACb4C,IAAI,EAAE;QACJxC,MAAM,EAAE,CAACwE,OAAO;MAClB;IACF,CAAC,CAAC,CAAC3B,KAAK,CAAC,UAACC,KAAK,EAAK;MAClB,OAAO,iBAAQ2C,MAAM,CACnB,IAAAS,4BAAqB,EAACpD,KAAK,EAAE,8CAA8C,CAAC,CAC7E;IACH,CAAC,CAAC;EACJ,CAAC;EAED;AACF;AACA;AACA;AACA;EACEgE,GAAG,iBAAc;IAAA,IAAb9C,MAAM,uEAAG,CAAC,CAAC;IACb,IAAO5E,cAAc,GAAyB,IAAI,CAA3CA,cAAc;MAAmByB,EAAE,GAAI,IAAI,CAA3BF,eAAe;IACtC,IAAM2F,MAAM,GAAG9F,oBAAS,CAAC+F,MAAM,CAACQ,KAAK;IACrC,IAAMvC,OAAO;MACX3D,EAAE,EAAFA,EAAE;MACFyF,MAAM,EAANA,MAAM;MACNlH,cAAc,EAAdA;IAAc,GACX4E,MAAM,CACV;IAED,OAAO,IAAI,CAAC/B,OAAO,CAAC;MAClBiD,MAAM,EAAEC,qBAAU,CAACY,GAAG;MACtB7D,GAAG,EAAE,IAAI,CAACtC,GAAG;MACb4C,IAAI,EAAE;QACJxC,MAAM,EAAE,CAACwE,OAAO;MAClB;IACF,CAAC,CAAC,CAAC3B,KAAK,CAAC,UAACC,KAAK,EAAK;MAClB,OAAO,iBAAQ2C,MAAM,CACnB,IAAAS,4BAAqB,EAACpD,KAAK,EAAE,4CAA4C,CAAC,CAC3E;IACH,CAAC,CAAC;EACJ,CAAC;EAED;AACF;AACA;AACA;AACA;EACQkE,WAAW,uBAACC,QAAQ,EAAE;IAAA;IAAA;MAAA;MAAA;MAAA;QAAA;UAAA;YAAA;YAAA,OACH,MAAI,CAAChF,OAAO,CAAC;cAClCiD,MAAM,EAAEC,qBAAU,CAAC+B,GAAG;cACtBhF,GAAG,EAAE,MAAI,CAACtC,GAAG,IAAIqH,QAAQ,uBAAgBA,QAAQ,IAAK,EAAE;YAC1D,CAAC,CAAC;UAAA;YAHI/D,QAAQ;YAKd,sBAAIA,QAAQ,CAACV,IAAI,2CAAb,eAAexC,MAAM,EAAE;cACzB,MAAI,CAAC+B,GAAG,CAAC,QAAQ,EAAEmB,QAAQ,CAACV,IAAI,CAACxC,MAAM,CAAC;YAC1C;YAAC,kCAEMkD,QAAQ;UAAA;UAAA;YAAA;QAAA;MAAA;IAAA;EACjB,CAAC;EAED;AACF;AACA;AACA;AACA;EACEiE,MAAM,kBAAClB,QAAe,EAAE;IACtB,IAAMmB,gBAAgB,GAAGnB,QAAQ,CAACoB,GAAG,CAAC,UAACC,IAAI,EAAK;MAC9C,OAAO;QACLzG,EAAE,EAAEyG,IAAI,CAACzG,EAAE;QACX0G,QAAQ,EAAED,IAAI,CAACE,SAAS;QACxBC,cAAc,EAAEH,IAAI,CAACI;MACvB,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,IAAI,CAACzF,OAAO,CAAC;MAClBiD,MAAM,EAAEC,qBAAU,CAACY,GAAG;MACtB7D,GAAG,EAAE,IAAI,CAACtC,GAAG;MACb4C,IAAI,EAAE;QACJxC,MAAM,EAAE,CACN;UACEa,EAAE,EAAE,IAAI,CAACF,eAAe;UACxBsF,QAAQ,EAAEmB;QACZ,CAAC;MAEL;IACF,CAAC,CAAC;EACJ,CAAC;EAAA;AACH,CAAC,CAAC;AAAC,eAEY5I,SAAS;AAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webex/plugin-meetings",
3
- "version": "3.0.0-beta.50",
3
+ "version": "3.0.0-beta.51",
4
4
  "description": "",
5
5
  "license": "Cisco EULA (https://www.cisco.com/c/en/us/products/end-user-license-agreement.html)",
6
6
  "contributors": [
@@ -32,12 +32,12 @@
32
32
  "build": "yarn run -T tsc --declaration true --declarationDir ./dist/types"
33
33
  },
34
34
  "devDependencies": {
35
- "@webex/plugin-meetings": "3.0.0-beta.50",
36
- "@webex/test-helper-chai": "3.0.0-beta.50",
37
- "@webex/test-helper-mocha": "3.0.0-beta.50",
38
- "@webex/test-helper-mock-webex": "3.0.0-beta.50",
39
- "@webex/test-helper-retry": "3.0.0-beta.50",
40
- "@webex/test-helper-test-users": "3.0.0-beta.50",
35
+ "@webex/plugin-meetings": "3.0.0-beta.51",
36
+ "@webex/test-helper-chai": "3.0.0-beta.51",
37
+ "@webex/test-helper-mocha": "3.0.0-beta.51",
38
+ "@webex/test-helper-mock-webex": "3.0.0-beta.51",
39
+ "@webex/test-helper-retry": "3.0.0-beta.51",
40
+ "@webex/test-helper-test-users": "3.0.0-beta.51",
41
41
  "chai": "^4.3.4",
42
42
  "chai-as-promised": "^7.1.1",
43
43
  "jsdom-global": "3.0.2",
@@ -46,18 +46,18 @@
46
46
  "typescript": "^4.7.4"
47
47
  },
48
48
  "dependencies": {
49
- "@webex/common": "3.0.0-beta.50",
49
+ "@webex/common": "3.0.0-beta.51",
50
50
  "@webex/internal-media-core": "1.35.3",
51
- "@webex/internal-plugin-conversation": "3.0.0-beta.50",
52
- "@webex/internal-plugin-device": "3.0.0-beta.50",
53
- "@webex/internal-plugin-llm": "3.0.0-beta.50",
54
- "@webex/internal-plugin-mercury": "3.0.0-beta.50",
55
- "@webex/internal-plugin-metrics": "3.0.0-beta.50",
56
- "@webex/internal-plugin-support": "3.0.0-beta.50",
57
- "@webex/internal-plugin-user": "3.0.0-beta.50",
58
- "@webex/plugin-people": "3.0.0-beta.50",
59
- "@webex/plugin-rooms": "3.0.0-beta.50",
60
- "@webex/webex-core": "3.0.0-beta.50",
51
+ "@webex/internal-plugin-conversation": "3.0.0-beta.51",
52
+ "@webex/internal-plugin-device": "3.0.0-beta.51",
53
+ "@webex/internal-plugin-llm": "3.0.0-beta.51",
54
+ "@webex/internal-plugin-mercury": "3.0.0-beta.51",
55
+ "@webex/internal-plugin-metrics": "3.0.0-beta.51",
56
+ "@webex/internal-plugin-support": "3.0.0-beta.51",
57
+ "@webex/internal-plugin-user": "3.0.0-beta.51",
58
+ "@webex/plugin-people": "3.0.0-beta.51",
59
+ "@webex/plugin-rooms": "3.0.0-beta.51",
60
+ "@webex/webex-core": "3.0.0-beta.51",
61
61
  "ampersand-collection": "^2.0.2",
62
62
  "bowser": "^2.11.0",
63
63
  "btoa": "^1.2.1",
@@ -107,10 +107,6 @@ note: None of these are currently implemented
107
107
  // Move a participant to breakout
108
108
  breakout.move(participant)
109
109
 
110
- // Assign a particpant to a breakout
111
- // Not sure whether there is any difference from move
112
- breakout.assign(participant)
113
-
114
110
  // Remove someone from a breakout session
115
111
  // This returns them to the main session
116
112
  breakout.remove(participant)
@@ -134,6 +130,10 @@ breakout.rename(newSessionName)
134
130
  // Start breakout sessions with necessary params
135
131
  breakouts.start(params)
136
132
 
133
+ // Assign a particpant/participants to breakouts/a breakout
134
+ // sessions should be like: [{id:'xx',memberIds:['111'],emails:['111@ss.com']},...]
135
+ breakouts.assign(sessions)
136
+
137
137
  // End breakout sessions with necessary params
138
138
  breakouts.end(params)
139
139
 
@@ -109,8 +109,7 @@ const Breakout = WebexPlugin.extend({
109
109
  parseRoster(locus) {
110
110
  this.members.locusParticipantsUpdate(locus);
111
111
  },
112
-
113
- /**
112
+ /*
114
113
  * Broadcast message to this breakout session's participants
115
114
  * @param {String} message
116
115
  * @param {Object} options
@@ -506,6 +506,34 @@ const Breakouts = WebexPlugin.extend({
506
506
 
507
507
  return breakout;
508
508
  },
509
+
510
+ /**
511
+ * assign participants to breakout session
512
+ * @param {Array} sessions
513
+ * @returns {void}
514
+ */
515
+ assign(sessions: any[]) {
516
+ const internalSessions = sessions.map((item) => {
517
+ return {
518
+ id: item.id,
519
+ assigned: item.memberIds,
520
+ assignedEmails: item.emails,
521
+ };
522
+ });
523
+
524
+ return this.request({
525
+ method: HTTP_VERBS.PUT,
526
+ uri: this.url,
527
+ body: {
528
+ groups: [
529
+ {
530
+ id: this.breakoutGroupId,
531
+ sessions: internalSessions,
532
+ },
533
+ ],
534
+ },
535
+ });
536
+ },
509
537
  });
510
538
 
511
539
  export default Breakouts;
@@ -3,12 +3,10 @@ import Breakout from '@webex/plugin-meetings/src/breakouts/breakout';
3
3
  import Breakouts from '@webex/plugin-meetings/src/breakouts';
4
4
  import Members from '@webex/plugin-meetings/src/members';
5
5
  import MockWebex from '@webex/test-helper-mock-webex';
6
- import sinon from "sinon";
7
-
6
+ import sinon from 'sinon';
8
7
 
9
8
  describe('plugin-meetings', () => {
10
9
  describe('breakout', () => {
11
-
12
10
  let webex;
13
11
  let breakout;
14
12
  let breakouts;
@@ -29,34 +27,33 @@ describe('plugin-meetings', () => {
29
27
  describe('initialize', () => {
30
28
  it('creates the object correctly', () => {
31
29
  assert.instanceOf(breakout.members, Members);
32
- })
30
+ });
33
31
  });
34
32
 
35
33
  describe('#join', () => {
36
34
  it('makes the request as expected', async () => {
37
- const result = await breakout.join()
35
+ const result = await breakout.join();
38
36
 
39
37
  assert.calledOnceWithExactly(webex.request, {
40
38
  method: 'POST',
41
39
  uri: 'url/move',
42
40
  body: {
43
41
  groupId: 'groupId',
44
- sessionId: 'sessionId'
45
- }
42
+ sessionId: 'sessionId',
43
+ },
46
44
  });
47
45
 
48
- assert.equal(result, 'REQUEST_RETURN_VALUE')
46
+ assert.equal(result, 'REQUEST_RETURN_VALUE');
49
47
  });
50
48
  });
51
49
 
52
50
  describe('#leave', () => {
53
51
  it('throws error if in main sesson', async () => {
54
-
55
52
  breakout.set('sessionType', 'MAIN');
56
53
 
57
54
  const fn = () => {
58
55
  breakout.leave();
59
- }
56
+ };
60
57
 
61
58
  expect(fn).to.throw(/Cannot leave the main session/);
62
59
  });
@@ -64,14 +61,14 @@ describe('plugin-meetings', () => {
64
61
  it('throws error if there is no main session', async () => {
65
62
  const fn = () => {
66
63
  breakout.leave();
67
- }
64
+ };
68
65
 
69
66
  expect(fn).to.throw(/Cannot leave, no main session found/);
70
67
  });
71
68
 
72
69
  it('joins the main session if in a breakout', async () => {
73
70
  breakout.parent.breakouts.add({
74
- sessionType: 'MAIN'
71
+ sessionType: 'MAIN',
75
72
  });
76
73
 
77
74
  const mainSession = breakouts.breakouts.models[0];
@@ -82,58 +79,60 @@ describe('plugin-meetings', () => {
82
79
 
83
80
  assert.calledOnceWithExactly(mainSession.join);
84
81
  assert.equal(result, 'JOIN_RETURN_VALUE');
85
- })
82
+ });
86
83
  });
87
84
 
88
85
  describe('#askForHelp', () => {
89
86
  it('makes the request as expected', async () => {
90
- const result = await breakout.askForHelp()
87
+ const result = await breakout.askForHelp();
91
88
 
92
89
  assert.calledOnceWithExactly(webex.request, {
93
90
  method: 'POST',
94
91
  uri: 'url/help',
95
92
  body: {
96
93
  groupId: 'groupId',
97
- sessionId: 'sessionId'
98
- }
94
+ sessionId: 'sessionId',
95
+ },
99
96
  });
100
97
 
101
- assert.equal(result, 'REQUEST_RETURN_VALUE')
98
+ assert.equal(result, 'REQUEST_RETURN_VALUE');
102
99
  });
103
100
  });
104
101
 
105
102
  describe('#broadcast', () => {
106
103
  it('makes the request as expected', async () => {
107
- breakout.breakoutRequest.broadcast = sinon.stub().returns(Promise.resolve('REQUEST_RETURN_VALUE'));
108
- let result = await breakout.broadcast('hello')
104
+ breakout.breakoutRequest.broadcast = sinon
105
+ .stub()
106
+ .returns(Promise.resolve('REQUEST_RETURN_VALUE'));
107
+ let result = await breakout.broadcast('hello');
109
108
  assert.calledWithExactly(breakout.breakoutRequest.broadcast, {
110
109
  url: 'url',
111
110
  message: 'hello',
112
111
  options: undefined,
113
112
  groupId: 'groupId',
114
- sessionId: 'sessionId'
113
+ sessionId: 'sessionId',
115
114
  });
116
115
 
117
- assert.equal(result, 'REQUEST_RETURN_VALUE')
116
+ assert.equal(result, 'REQUEST_RETURN_VALUE');
118
117
 
119
- result = await breakout.broadcast('hello', {presenters: true, cohosts: true})
118
+ result = await breakout.broadcast('hello', {presenters: true, cohosts: true});
120
119
 
121
120
  assert.calledWithExactly(breakout.breakoutRequest.broadcast, {
122
121
  url: 'url',
123
122
  message: 'hello',
124
123
  options: {presenters: true, cohosts: true},
125
124
  groupId: 'groupId',
126
- sessionId: 'sessionId'
125
+ sessionId: 'sessionId',
127
126
  });
128
127
 
129
- assert.equal(result, 'REQUEST_RETURN_VALUE')
128
+ assert.equal(result, 'REQUEST_RETURN_VALUE');
130
129
  });
131
130
  });
132
131
 
133
132
  describe('#parseRoster', () => {
134
133
  it('calls locusParticipantsUpdate', () => {
135
134
  breakout.members = {
136
- locusParticipantsUpdate: sinon.stub()
135
+ locusParticipantsUpdate: sinon.stub(),
137
136
  };
138
137
 
139
138
  const locusData = {some: 'data'};
@@ -141,7 +140,7 @@ describe('plugin-meetings', () => {
141
140
 
142
141
  assert.calledOnceWithExactly(breakout.members.locusParticipantsUpdate, locusData);
143
142
  assert.equal(result, undefined);
144
- })
145
- })
143
+ });
144
+ });
146
145
  });
147
146
  });
@@ -5,7 +5,7 @@ import {BREAKOUTS} from '@webex/plugin-meetings/src/constants';
5
5
  import sinon from 'sinon';
6
6
  import MockWebex from '@webex/test-helper-mock-webex';
7
7
  import testUtils from '../../../utils/testUtils';
8
- import BreakoutEditLockedError from "@webex/plugin-meetings/src/breakouts/edit-lock-error";
8
+ import BreakoutEditLockedError from '@webex/plugin-meetings/src/breakouts/edit-lock-error';
9
9
 
10
10
  const getBOResponse = (status: string) => {
11
11
  return {
@@ -347,13 +347,13 @@ describe('plugin-meetings', () => {
347
347
  enableBreakoutSession: true,
348
348
  startTime: 'startTime',
349
349
  status: 'active',
350
- locusUrl: 'locusUrl'
350
+ locusUrl: 'locusUrl',
351
351
  });
352
352
  const payload = {
353
353
  breakoutSessions: {
354
354
  active: [{sessionId: 'sessionId1'}],
355
- }
356
- }
355
+ },
356
+ };
357
357
  breakouts.updateBreakoutSessions(payload);
358
358
 
359
359
  breakouts.set('sessionType', BREAKOUTS.SESSION_TYPES.MAIN);
@@ -363,8 +363,8 @@ describe('plugin-meetings', () => {
363
363
  const payload2 = {
364
364
  breakoutSessions: {
365
365
  active: [{sessionId: 'sessionId1', sessionType: BREAKOUTS.SESSION_TYPES.MAIN}],
366
- }
367
- }
366
+ },
367
+ };
368
368
  breakouts.updateBreakoutSessions(payload2);
369
369
  breakouts.set('sessionType', 'BREAKOUT');
370
370
  result = breakouts.getMainSession();
@@ -373,12 +373,12 @@ describe('plugin-meetings', () => {
373
373
  it('throw error if cannot find main session', () => {
374
374
  const fn = () => {
375
375
  breakouts.getMainSession();
376
- }
376
+ };
377
377
  expect(fn).to.throw(/no main session found/);
378
378
  });
379
379
  });
380
380
 
381
- describe('#askAllToReturn', () => {
381
+ describe('#askAllToReturn', () => {
382
382
  it('makes the request as expected', async () => {
383
383
  breakouts.set('sessionType', BREAKOUTS.SESSION_TYPES.MAIN);
384
384
  breakouts.currentBreakoutSession.sessionId = 'sessionId';
@@ -389,8 +389,8 @@ describe('plugin-meetings', () => {
389
389
  uri: 'url/requestMove',
390
390
  body: {
391
391
  groupId: 'groupId',
392
- sessionId: 'sessionId'
393
- }
392
+ sessionId: 'sessionId',
393
+ },
394
394
  });
395
395
  });
396
396
  });
@@ -403,16 +403,18 @@ describe('plugin-meetings', () => {
403
403
  });
404
404
 
405
405
  describe('#toggleBreakout', () => {
406
- it('enableBreakoutSession is undefined, run enableBreakouts then toggleBreakout', async() => {
406
+ it('enableBreakoutSession is undefined, run enableBreakouts then toggleBreakout', async () => {
407
407
  breakouts.enableBreakoutSession = undefined;
408
- breakouts.enableBreakouts = sinon.stub().resolves(({body: {
409
- sessionId: 'sessionId',
410
- groupId: 'groupId',
411
- name: 'name',
412
- current: true,
413
- sessionType: 'sessionType',
414
- url: 'url'
415
- }}))
408
+ breakouts.enableBreakouts = sinon.stub().resolves({
409
+ body: {
410
+ sessionId: 'sessionId',
411
+ groupId: 'groupId',
412
+ name: 'name',
413
+ current: true,
414
+ sessionType: 'sessionType',
415
+ url: 'url',
416
+ },
417
+ });
416
418
  breakouts.updateBreakout = sinon.stub().resolves();
417
419
  breakouts.doToggleBreakout = sinon.stub().resolves();
418
420
 
@@ -424,12 +426,12 @@ describe('plugin-meetings', () => {
424
426
  name: 'name',
425
427
  current: true,
426
428
  sessionType: 'sessionType',
427
- url: 'url'
429
+ url: 'url',
428
430
  });
429
431
  assert.calledOnceWithExactly(breakouts.doToggleBreakout, false);
430
432
  });
431
433
 
432
- it('enableBreakoutSession is exist, run toggleBreakout', async() => {
434
+ it('enableBreakoutSession is exist, run toggleBreakout', async () => {
433
435
  breakouts.enableBreakoutSession = true;
434
436
  breakouts.doToggleBreakout = sinon.stub().resolves();
435
437
  await breakouts.toggleBreakout(true);
@@ -445,17 +447,19 @@ describe('plugin-meetings', () => {
445
447
  method: 'POST',
446
448
  uri: 'breakoutServiceUrl',
447
449
  body: {
448
- locusUrl: 'locusUrl'
449
- }
450
+ locusUrl: 'locusUrl',
451
+ },
450
452
  });
451
453
 
452
454
  assert.equal(result, 'REQUEST_RETURN_VALUE');
453
455
  });
454
456
  });
455
457
 
456
- describe('#broadcast', () => {
458
+ describe('#broadcast', () => {
457
459
  it('makes the request as expected', async () => {
458
- breakouts.breakoutRequest.broadcast = sinon.stub().returns(Promise.resolve('REQUEST_RETURN_VALUE'));
460
+ breakouts.breakoutRequest.broadcast = sinon
461
+ .stub()
462
+ .returns(Promise.resolve('REQUEST_RETURN_VALUE'));
459
463
  webex.request.returns(
460
464
  Promise.resolve({
461
465
  body: getBOResponse('OPEN'),
@@ -467,7 +471,7 @@ describe('plugin-meetings', () => {
467
471
  url: 'url',
468
472
  message: 'hello',
469
473
  options: undefined,
470
- groupId: 'groupId'
474
+ groupId: 'groupId',
471
475
  });
472
476
 
473
477
  assert.equal(result, 'REQUEST_RETURN_VALUE');
@@ -477,16 +481,16 @@ describe('plugin-meetings', () => {
477
481
  url: 'url',
478
482
  groupId: 'groupId',
479
483
  message: 'hello',
480
- options: {presenters: true, cohosts: true}
484
+ options: {presenters: true, cohosts: true},
481
485
  });
482
- assert.equal(result, 'REQUEST_RETURN_VALUE')
486
+ assert.equal(result, 'REQUEST_RETURN_VALUE');
483
487
  });
484
488
 
485
489
  it('throw error if no breakout group id found', () => {
486
490
  breakouts.set('sessionType', BREAKOUTS.SESSION_TYPES.MAIN);
487
491
  const fn = () => {
488
492
  breakouts.broadcast('hello');
489
- }
493
+ };
490
494
  expect(fn).to.throw(/no breakout session found/);
491
495
  });
492
496
  });
@@ -511,25 +515,39 @@ describe('plugin-meetings', () => {
511
515
 
512
516
  assert.equal(arg.uri, 'url');
513
517
  assert.equal(arg.method, 'PUT');
514
- assert.deepEqual(argObj1, {id:'groupId', action: 'START', allowBackToMain: false, allowToJoinLater: false, duration: BREAKOUTS.DEFAULT_DURATION});
515
- assert.deepEqual(argObj2, {id:'id', action: 'START', allowBackToMain: false, allowToJoinLater: false, someOtherParam: 'someOtherParam', duration: BREAKOUTS.DEFAULT_DURATION});
518
+ assert.deepEqual(argObj1, {
519
+ id: 'groupId',
520
+ action: 'START',
521
+ allowBackToMain: false,
522
+ allowToJoinLater: false,
523
+ duration: BREAKOUTS.DEFAULT_DURATION,
524
+ });
525
+ assert.deepEqual(argObj2, {
526
+ id: 'id',
527
+ action: 'START',
528
+ allowBackToMain: false,
529
+ allowToJoinLater: false,
530
+ someOtherParam: 'someOtherParam',
531
+ duration: BREAKOUTS.DEFAULT_DURATION,
532
+ });
516
533
  assert.deepEqual(result, {body: getBOResponse('OPEN')});
517
534
  });
518
535
 
519
536
  it('rejects when edit lock token mismatch', async () => {
520
- webex.request.returns(Promise.reject({
521
- body: {
522
- "errorCode":BREAKOUTS.ERROR_CODE.EDIT_LOCK_TOKEN_MISMATCH,
523
- "message":"Edit lock token mismatch"
524
- }
525
- }));
537
+ webex.request.returns(
538
+ Promise.reject({
539
+ body: {
540
+ errorCode: BREAKOUTS.ERROR_CODE.EDIT_LOCK_TOKEN_MISMATCH,
541
+ message: 'Edit lock token mismatch',
542
+ },
543
+ })
544
+ );
526
545
 
527
546
  await assert.isRejected(
528
547
  breakouts.start(),
529
548
  BreakoutEditLockedError,
530
549
  'Edit lock token mismatch'
531
550
  );
532
-
533
551
  });
534
552
  });
535
553
 
@@ -553,25 +571,31 @@ describe('plugin-meetings', () => {
553
571
 
554
572
  assert.equal(arg.uri, 'url');
555
573
  assert.equal(arg.method, 'PUT');
556
- assert.deepEqual(argObj1, {id:'groupId', action: 'CLOSE', delayCloseTime: 60});
557
- assert.deepEqual(argObj2, {id:'id', action: 'CLOSE', delayCloseTime: 60, someOtherParam: 'someOtherParam'});
574
+ assert.deepEqual(argObj1, {id: 'groupId', action: 'CLOSE', delayCloseTime: 60});
575
+ assert.deepEqual(argObj2, {
576
+ id: 'id',
577
+ action: 'CLOSE',
578
+ delayCloseTime: 60,
579
+ someOtherParam: 'someOtherParam',
580
+ });
558
581
  assert.deepEqual(result, {body: getBOResponse('CLOSING')});
559
582
  });
560
583
 
561
584
  it('rejects when edit lock token mismatch', async () => {
562
- webex.request.returns(Promise.reject({
563
- body: {
564
- "errorCode":BREAKOUTS.ERROR_CODE.EDIT_LOCK_TOKEN_MISMATCH,
565
- "message":"Edit lock token mismatch"
566
- }
567
- }));
585
+ webex.request.returns(
586
+ Promise.reject({
587
+ body: {
588
+ errorCode: BREAKOUTS.ERROR_CODE.EDIT_LOCK_TOKEN_MISMATCH,
589
+ message: 'Edit lock token mismatch',
590
+ },
591
+ })
592
+ );
568
593
 
569
594
  await assert.isRejected(
570
595
  breakouts.end(),
571
596
  BreakoutEditLockedError,
572
597
  'Edit lock token mismatch'
573
598
  );
574
-
575
599
  });
576
600
  });
577
601
 
@@ -605,8 +629,8 @@ describe('plugin-meetings', () => {
605
629
  method: 'PUT',
606
630
  uri: 'url',
607
631
  body: {
608
- enableBreakoutSession: true
609
- }
632
+ enableBreakoutSession: true,
633
+ },
610
634
  });
611
635
 
612
636
  assert.equal(result, 'REQUEST_RETURN_VALUE');
@@ -615,15 +639,19 @@ describe('plugin-meetings', () => {
615
639
 
616
640
  describe('delete', () => {
617
641
  it('makes the request as expected', async () => {
618
- webex.request.returns(Promise.resolve({
619
- body: {
620
- groups: [{
621
- id : "455556a4-37cd-4baa-89bc-8730581a1cc0",
622
- status : "CLOSE",
623
- type : "BREAKOUT",
624
- }]
625
- }
626
- }));
642
+ webex.request.returns(
643
+ Promise.resolve({
644
+ body: {
645
+ groups: [
646
+ {
647
+ id: '455556a4-37cd-4baa-89bc-8730581a1cc0',
648
+ status: 'CLOSE',
649
+ type: 'BREAKOUT',
650
+ },
651
+ ],
652
+ },
653
+ })
654
+ );
627
655
 
628
656
  const result = await breakouts.clearSessions();
629
657
  assert.calledOnceWithExactly(webex.request, {
@@ -635,66 +663,71 @@ describe('plugin-meetings', () => {
635
663
  action: BREAKOUTS.ACTION.DELETE,
636
664
  },
637
665
  ],
638
- }
666
+ },
639
667
  });
640
668
 
641
- assert.equal(breakouts.groups[0].status, "CLOSE")
669
+ assert.equal(breakouts.groups[0].status, 'CLOSE');
642
670
  });
643
671
 
644
672
  it('rejects when edit lock token mismatch', async () => {
645
- webex.request.returns(Promise.reject({
646
- body: {
647
- "errorCode":BREAKOUTS.ERROR_CODE.EDIT_LOCK_TOKEN_MISMATCH,
648
- "message":"Edit lock token mismatch"
649
- }
650
- }));
673
+ webex.request.returns(
674
+ Promise.reject({
675
+ body: {
676
+ errorCode: BREAKOUTS.ERROR_CODE.EDIT_LOCK_TOKEN_MISMATCH,
677
+ message: 'Edit lock token mismatch',
678
+ },
679
+ })
680
+ );
651
681
 
652
682
  await assert.isRejected(
653
683
  breakouts.clearSessions(),
654
684
  BreakoutEditLockedError,
655
685
  'Edit lock token mismatch'
656
686
  );
657
-
658
687
  });
659
688
  });
660
689
 
661
690
  describe('create', () => {
662
691
  it('response not include groups info', async () => {
663
- const sessions = [{'name':'session1', "anyoneCanJoin" : true}];
692
+ const sessions = [{name: 'session1', anyoneCanJoin: true}];
664
693
  const result = await breakouts.create(sessions);
665
694
 
666
695
  assert.equal(result, 'REQUEST_RETURN_VALUE');
667
-
668
696
  });
669
697
 
670
698
  it('response include groups info', async () => {
671
- const sessions = [{'name':'session1', "anyoneCanJoin" : true}];
699
+ const sessions = [{name: 'session1', anyoneCanJoin: true}];
672
700
 
673
- webex.request.returns(Promise.resolve({
674
- body: {
675
- groups: [{
676
- id : "455556a4-37cd-4baa-89bc-8730581a1cc0",
677
- status : "PENDING",
678
- type : "BREAKOUT",
679
- }]
680
- }
681
- }));
701
+ webex.request.returns(
702
+ Promise.resolve({
703
+ body: {
704
+ groups: [
705
+ {
706
+ id: '455556a4-37cd-4baa-89bc-8730581a1cc0',
707
+ status: 'PENDING',
708
+ type: 'BREAKOUT',
709
+ },
710
+ ],
711
+ },
712
+ })
713
+ );
682
714
 
683
715
  const result = await breakouts.create(sessions);
684
716
 
685
- assert.equal(breakouts.groups[0].id, "455556a4-37cd-4baa-89bc-8730581a1cc0")
686
-
717
+ assert.equal(breakouts.groups[0].id, '455556a4-37cd-4baa-89bc-8730581a1cc0');
687
718
  });
688
719
 
689
720
  it('rejects when edit lock token mismatch', async () => {
690
- const sessions = [{'name':'session1', "anyoneCanJoin" : true}];
721
+ const sessions = [{name: 'session1', anyoneCanJoin: true}];
691
722
 
692
- webex.request.returns(Promise.reject({
693
- body: {
694
- "errorCode":BREAKOUTS.ERROR_CODE.EDIT_LOCK_TOKEN_MISMATCH,
695
- "message":"Edit lock token mismatch"
696
- }
697
- }));
723
+ webex.request.returns(
724
+ Promise.reject({
725
+ body: {
726
+ errorCode: BREAKOUTS.ERROR_CODE.EDIT_LOCK_TOKEN_MISMATCH,
727
+ message: 'Edit lock token mismatch',
728
+ },
729
+ })
730
+ );
698
731
 
699
732
  await assert.isRejected(
700
733
  breakouts.create(sessions),
@@ -703,5 +736,29 @@ describe('plugin-meetings', () => {
703
736
  );
704
737
  });
705
738
  });
739
+
740
+ describe('#assign', () => {
741
+ it('assign members and emails to a breakout session', async () => {
742
+ breakouts.assign = sinon.stub().returns(Promise.resolve('ASSIGN_RETURN_VALUE'));
743
+ const params = [{id: 'sessionId', memberIds: ['111'], emails: ['111@cisco.com']}];
744
+ const result = await breakouts.assign(params);
745
+ assert.calledOnceWithExactly(breakouts.assign, params);
746
+ assert.equal(result, 'ASSIGN_RETURN_VALUE');
747
+ });
748
+ it('assign only members to a breakout session', async () => {
749
+ breakouts.assign = sinon.stub().returns(Promise.resolve('ASSIGN_RETURN_VALUE'));
750
+ const params = [{id: 'sessionId', memberIds: ['111']}];
751
+ const result = await breakouts.assign(params);
752
+ assert.calledOnceWithExactly(breakouts.assign, params);
753
+ assert.equal(result, 'ASSIGN_RETURN_VALUE');
754
+ });
755
+ it('assign only emails to a breakout session', async () => {
756
+ breakouts.assign = sinon.stub().returns(Promise.resolve('ASSIGN_RETURN_VALUE'));
757
+ const params = [{id: 'sessionId', emails: ['111@cisco.com']}];
758
+ const result = await breakouts.assign(params);
759
+ assert.calledOnceWithExactly(breakouts.assign, params);
760
+ assert.equal(result, 'ASSIGN_RETURN_VALUE');
761
+ });
762
+ });
706
763
  });
707
764
  });