@webex/plugin-meetings 3.0.0-beta.53 → 3.0.0-beta.54
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/breakouts/index.js
CHANGED
|
@@ -703,7 +703,8 @@ var Breakouts = _webexCore.WebexPlugin.extend({
|
|
|
703
703
|
return {
|
|
704
704
|
id: item.id,
|
|
705
705
|
assigned: item.memberIds,
|
|
706
|
-
assignedEmails: item.emails
|
|
706
|
+
assignedEmails: item.emails,
|
|
707
|
+
anyoneCanJoin: !!item.anyone
|
|
707
708
|
};
|
|
708
709
|
});
|
|
709
710
|
return this.request({
|
|
@@ -717,7 +718,7 @@ var Breakouts = _webexCore.WebexPlugin.extend({
|
|
|
717
718
|
}
|
|
718
719
|
});
|
|
719
720
|
},
|
|
720
|
-
version: "3.0.0-beta.
|
|
721
|
+
version: "3.0.0-beta.54"
|
|
721
722
|
});
|
|
722
723
|
var _default = Breakouts;
|
|
723
724
|
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","editLock","intervalID","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","bodyInfo","token","editlock","boServiceErrorHandler","breakInfo","_clearEditLockInfo","resolve","clearSessions","action","ACTION","DELETE","start","START","allowToJoinLater","duration","DEFAULT_DURATION","end","CLOSE","getBreakout","GET","enableAndLockBreakout","lockBreakout","EDIT_LOCK_STATUS","LOCKED","keepEditLockAlive","ttl","DEFAULT_TTL","window","setInterval","unLockEditBreakout","clearInterval","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 resource url\n mainLocusUrl: 'string', // the locus url of the main session\n groups: 'array', // appears when create breakouts\n editLock: 'object', // appears when getBreakout info editlock = true\n intervalID: 'number',\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 resource 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 enable 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 bodyInfo =\n this.editLock && !!this.editLock.token\n ? {\n groups: [\n {\n sessions,\n },\n ],\n editlock: {\n token: this.editLock.token,\n },\n }\n : {\n groups: [\n {\n sessions,\n },\n ],\n };\n const breakInfo = await this.webex\n .request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body: bodyInfo,\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 // clear edit lock info after save breakout session info\n this._clearEditLockInfo();\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 bodyInfo =\n this.editLock && !!this.editLock.token\n ? {\n groups: [\n {\n action: BREAKOUTS.ACTION.DELETE,\n },\n ],\n editlock: {\n token: this.editLock.token,\n },\n }\n : {\n groups: [\n {\n action: BREAKOUTS.ACTION.DELETE,\n },\n ],\n };\n const breakInfo = await this.webex\n .request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body: bodyInfo,\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 if (breakout.body?.editlock && editlock) {\n this.set('editLock', breakout.body.editlock);\n }\n\n return breakout;\n },\n\n /**\n * enable and edit lock breakout\n * @returns {void}\n */\n async enableAndLockBreakout() {\n if (this.enableBreakoutSession) {\n this.lockBreakout();\n } else {\n const info = await this.enableBreakouts();\n\n if (info.body) {\n this.lockBreakout();\n }\n }\n },\n\n /**\n * send breakout edit lock\n * @returns {void}\n */\n async lockBreakout() {\n if (this.editLock && !!this.editLock.token) {\n if (this.editLock.state === BREAKOUTS.EDIT_LOCK_STATUS.LOCKED) {\n throw new Error('Breakout already locked');\n } else {\n this.keepEditLockAlive();\n }\n } else {\n const breakout = await this.getBreakout(true);\n if (breakout.body?.editlock) {\n this.keepEditLockAlive();\n }\n }\n },\n\n /**\n * keep edit lock alive\n * @returns {void}\n */\n keepEditLockAlive() {\n if (this.editLock && !!this.editLock.token) {\n const ttl = this.editLock.ttl < 30 ? BREAKOUTS.DEFAULT_TTL : this.editLock.ttl;\n\n this.intervalID = window.setInterval(() => {\n this.request({\n method: HTTP_VERBS.PUT,\n uri: `${this.url}/editlock/${this.editLock.token}`,\n }).catch((error) => {\n this._clearEditLockInfo();\n\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#keepEditLockAlive'));\n });\n }, (ttl / 2) * 1000);\n }\n },\n\n /**\n * unlock edit breakout\n * @returns {void}\n */\n unLockEditBreakout() {\n this.request({\n method: HTTP_VERBS.DELETE,\n uri: `${this.url}/editlock/${this.editLock.token}`,\n })\n .then(() => {\n this._clearEditLockInfo();\n })\n .catch((error) => {\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#unLockEditBreakout'));\n });\n },\n\n /**\n * clear interval and edit lock info\n * @private\n * @returns {void}\n */\n _clearEditLockInfo() {\n if (this.intervalID) {\n clearInterval(this.intervalID);\n }\n this.set('editLock', {});\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":"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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","editLock","intervalID","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","bodyInfo","token","editlock","boServiceErrorHandler","breakInfo","_clearEditLockInfo","resolve","clearSessions","action","ACTION","DELETE","start","START","allowToJoinLater","duration","DEFAULT_DURATION","end","CLOSE","getBreakout","GET","enableAndLockBreakout","lockBreakout","EDIT_LOCK_STATUS","LOCKED","keepEditLockAlive","ttl","DEFAULT_TTL","window","setInterval","unLockEditBreakout","clearInterval","assign","internalSessions","map","item","assigned","memberIds","assignedEmails","emails","anyoneCanJoin","anyone"],"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 resource url\n mainLocusUrl: 'string', // the locus url of the main session\n groups: 'array', // appears when create breakouts\n editLock: 'object', // appears when getBreakout info editlock = true\n intervalID: 'number',\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 resource 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 enable 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 bodyInfo =\n this.editLock && !!this.editLock.token\n ? {\n groups: [\n {\n sessions,\n },\n ],\n editlock: {\n token: this.editLock.token,\n },\n }\n : {\n groups: [\n {\n sessions,\n },\n ],\n };\n const breakInfo = await this.webex\n .request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body: bodyInfo,\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 // clear edit lock info after save breakout session info\n this._clearEditLockInfo();\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 bodyInfo =\n this.editLock && !!this.editLock.token\n ? {\n groups: [\n {\n action: BREAKOUTS.ACTION.DELETE,\n },\n ],\n editlock: {\n token: this.editLock.token,\n },\n }\n : {\n groups: [\n {\n action: BREAKOUTS.ACTION.DELETE,\n },\n ],\n };\n const breakInfo = await this.webex\n .request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body: bodyInfo,\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 if (breakout.body?.editlock && editlock) {\n this.set('editLock', breakout.body.editlock);\n }\n\n return breakout;\n },\n\n /**\n * enable and edit lock breakout\n * @returns {void}\n */\n async enableAndLockBreakout() {\n if (this.enableBreakoutSession) {\n this.lockBreakout();\n } else {\n const info = await this.enableBreakouts();\n\n if (info.body) {\n this.lockBreakout();\n }\n }\n },\n\n /**\n * send breakout edit lock\n * @returns {void}\n */\n async lockBreakout() {\n if (this.editLock && !!this.editLock.token) {\n if (this.editLock.state === BREAKOUTS.EDIT_LOCK_STATUS.LOCKED) {\n throw new Error('Breakout already locked');\n } else {\n this.keepEditLockAlive();\n }\n } else {\n const breakout = await this.getBreakout(true);\n if (breakout.body?.editlock) {\n this.keepEditLockAlive();\n }\n }\n },\n\n /**\n * keep edit lock alive\n * @returns {void}\n */\n keepEditLockAlive() {\n if (this.editLock && !!this.editLock.token) {\n const ttl = this.editLock.ttl < 30 ? BREAKOUTS.DEFAULT_TTL : this.editLock.ttl;\n\n this.intervalID = window.setInterval(() => {\n this.request({\n method: HTTP_VERBS.PUT,\n uri: `${this.url}/editlock/${this.editLock.token}`,\n }).catch((error) => {\n this._clearEditLockInfo();\n\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#keepEditLockAlive'));\n });\n }, (ttl / 2) * 1000);\n }\n },\n\n /**\n * unlock edit breakout\n * @returns {void}\n */\n unLockEditBreakout() {\n this.request({\n method: HTTP_VERBS.DELETE,\n uri: `${this.url}/editlock/${this.editLock.token}`,\n })\n .then(() => {\n this._clearEditLockInfo();\n })\n .catch((error) => {\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#unLockEditBreakout'));\n });\n },\n\n /**\n * clear interval and edit lock info\n * @private\n * @returns {void}\n */\n _clearEditLockInfo() {\n if (this.intervalID) {\n clearInterval(this.intervalID);\n }\n this.set('editLock', {});\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 anyoneCanJoin: !!item.anyone,\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":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webex/plugin-meetings",
|
|
3
|
-
"version": "3.0.0-beta.
|
|
3
|
+
"version": "3.0.0-beta.54",
|
|
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.
|
|
36
|
-
"@webex/test-helper-chai": "3.0.0-beta.
|
|
37
|
-
"@webex/test-helper-mocha": "3.0.0-beta.
|
|
38
|
-
"@webex/test-helper-mock-webex": "3.0.0-beta.
|
|
39
|
-
"@webex/test-helper-retry": "3.0.0-beta.
|
|
40
|
-
"@webex/test-helper-test-users": "3.0.0-beta.
|
|
35
|
+
"@webex/plugin-meetings": "3.0.0-beta.54",
|
|
36
|
+
"@webex/test-helper-chai": "3.0.0-beta.54",
|
|
37
|
+
"@webex/test-helper-mocha": "3.0.0-beta.54",
|
|
38
|
+
"@webex/test-helper-mock-webex": "3.0.0-beta.54",
|
|
39
|
+
"@webex/test-helper-retry": "3.0.0-beta.54",
|
|
40
|
+
"@webex/test-helper-test-users": "3.0.0-beta.54",
|
|
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.
|
|
49
|
+
"@webex/common": "3.0.0-beta.54",
|
|
50
50
|
"@webex/internal-media-core": "1.35.3",
|
|
51
|
-
"@webex/internal-plugin-conversation": "3.0.0-beta.
|
|
52
|
-
"@webex/internal-plugin-device": "3.0.0-beta.
|
|
53
|
-
"@webex/internal-plugin-llm": "3.0.0-beta.
|
|
54
|
-
"@webex/internal-plugin-mercury": "3.0.0-beta.
|
|
55
|
-
"@webex/internal-plugin-metrics": "3.0.0-beta.
|
|
56
|
-
"@webex/internal-plugin-support": "3.0.0-beta.
|
|
57
|
-
"@webex/internal-plugin-user": "3.0.0-beta.
|
|
58
|
-
"@webex/plugin-people": "3.0.0-beta.
|
|
59
|
-
"@webex/plugin-rooms": "3.0.0-beta.
|
|
60
|
-
"@webex/webex-core": "3.0.0-beta.
|
|
51
|
+
"@webex/internal-plugin-conversation": "3.0.0-beta.54",
|
|
52
|
+
"@webex/internal-plugin-device": "3.0.0-beta.54",
|
|
53
|
+
"@webex/internal-plugin-llm": "3.0.0-beta.54",
|
|
54
|
+
"@webex/internal-plugin-mercury": "3.0.0-beta.54",
|
|
55
|
+
"@webex/internal-plugin-metrics": "3.0.0-beta.54",
|
|
56
|
+
"@webex/internal-plugin-support": "3.0.0-beta.54",
|
|
57
|
+
"@webex/internal-plugin-user": "3.0.0-beta.54",
|
|
58
|
+
"@webex/plugin-people": "3.0.0-beta.54",
|
|
59
|
+
"@webex/plugin-rooms": "3.0.0-beta.54",
|
|
60
|
+
"@webex/webex-core": "3.0.0-beta.54",
|
|
61
61
|
"ampersand-collection": "^2.0.2",
|
|
62
62
|
"bowser": "^2.11.0",
|
|
63
63
|
"btoa": "^1.2.1",
|
package/src/breakouts/README.md
CHANGED
|
@@ -131,7 +131,7 @@ breakout.rename(newSessionName)
|
|
|
131
131
|
breakouts.start(params)
|
|
132
132
|
|
|
133
133
|
// Assign a particpant/participants to breakouts/a breakout
|
|
134
|
-
// sessions should be like: [{id:'xx',memberIds:['111'],emails:['111@ss.com']},...]
|
|
134
|
+
// sessions should be like: [{id:'xx',memberIds:['111'],emails:['111@ss.com',anyone: true]},...]
|
|
135
135
|
breakouts.assign(sessions)
|
|
136
136
|
|
|
137
137
|
// End breakout sessions with necessary params
|
package/src/breakouts/index.ts
CHANGED
|
@@ -738,9 +738,7 @@ describe('plugin-meetings', () => {
|
|
|
738
738
|
});
|
|
739
739
|
|
|
740
740
|
describe('enableAndLockBreakout', () => {
|
|
741
|
-
|
|
742
741
|
it('enableBreakoutSession is true', async () => {
|
|
743
|
-
|
|
744
742
|
breakouts.enableBreakoutSession = true;
|
|
745
743
|
|
|
746
744
|
breakouts.lockBreakout = sinon.stub().resolves();
|
|
@@ -748,11 +746,9 @@ describe('plugin-meetings', () => {
|
|
|
748
746
|
breakouts.enableAndLockBreakout();
|
|
749
747
|
|
|
750
748
|
assert.calledOnceWithExactly(breakouts.lockBreakout);
|
|
751
|
-
|
|
752
749
|
});
|
|
753
750
|
|
|
754
751
|
it('enableBreakoutSession is false', async () => {
|
|
755
|
-
|
|
756
752
|
breakouts.enableBreakoutSession = false;
|
|
757
753
|
|
|
758
754
|
breakouts.enableBreakouts = sinon.stub().resolves();
|
|
@@ -760,15 +756,11 @@ describe('plugin-meetings', () => {
|
|
|
760
756
|
breakouts.enableAndLockBreakout();
|
|
761
757
|
|
|
762
758
|
assert.calledOnceWithExactly(breakouts.enableBreakouts);
|
|
763
|
-
|
|
764
759
|
});
|
|
765
|
-
|
|
766
760
|
});
|
|
767
761
|
|
|
768
762
|
describe('lockBreakout', () => {
|
|
769
|
-
|
|
770
763
|
it('lock breakout is true', async () => {
|
|
771
|
-
|
|
772
764
|
breakouts.editLock = {
|
|
773
765
|
ttl: 30,
|
|
774
766
|
token: 'token',
|
|
@@ -780,36 +772,29 @@ describe('plugin-meetings', () => {
|
|
|
780
772
|
breakouts.lockBreakout();
|
|
781
773
|
|
|
782
774
|
assert.calledOnceWithExactly(breakouts.keepEditLockAlive);
|
|
783
|
-
|
|
784
775
|
});
|
|
785
776
|
|
|
786
|
-
|
|
787
777
|
it('lock breakout throw error', async () => {
|
|
788
|
-
|
|
789
778
|
breakouts.editLock = {
|
|
790
779
|
ttl: 30,
|
|
791
780
|
token: '2ad57140-01b5-4bd0-a5a7-4dccdc06904c',
|
|
792
781
|
state: 'LOCKED',
|
|
793
|
-
|
|
794
782
|
};
|
|
795
783
|
|
|
796
784
|
await expect(breakouts.lockBreakout()).to.be.rejectedWith('Breakout already locked');
|
|
797
785
|
});
|
|
798
786
|
|
|
799
787
|
it('lock breakout without editLock', async () => {
|
|
800
|
-
|
|
801
788
|
breakouts.getBreakout = sinon.stub().resolves();
|
|
802
789
|
|
|
803
790
|
breakouts.lockBreakout();
|
|
804
791
|
|
|
805
792
|
assert.calledOnceWithExactly(breakouts.getBreakout, true);
|
|
806
793
|
});
|
|
807
|
-
|
|
808
794
|
});
|
|
809
795
|
|
|
810
796
|
describe('unLockEditBreakout', () => {
|
|
811
797
|
it('unLock edit breakout request as expected', async () => {
|
|
812
|
-
|
|
813
798
|
breakouts.set('editLock', {
|
|
814
799
|
ttl: 30,
|
|
815
800
|
token: '2ad57140-01b5-4bd0-a5a7-4dccdc06904c',
|
|
@@ -819,17 +804,14 @@ describe('plugin-meetings', () => {
|
|
|
819
804
|
breakouts.unLockEditBreakout();
|
|
820
805
|
assert.calledOnceWithExactly(webex.request, {
|
|
821
806
|
method: 'DELETE',
|
|
822
|
-
uri: 'url/editlock/2ad57140-01b5-4bd0-a5a7-4dccdc06904c'
|
|
807
|
+
uri: 'url/editlock/2ad57140-01b5-4bd0-a5a7-4dccdc06904c',
|
|
823
808
|
});
|
|
824
|
-
|
|
825
809
|
});
|
|
826
810
|
});
|
|
827
811
|
|
|
828
812
|
describe('keepEditLockAlive', () => {
|
|
829
|
-
|
|
830
813
|
it('keep edit lock', () => {
|
|
831
|
-
|
|
832
|
-
const clock = sinon.useFakeTimers()
|
|
814
|
+
const clock = sinon.useFakeTimers();
|
|
833
815
|
|
|
834
816
|
breakouts.set('editLock', {
|
|
835
817
|
ttl: 30,
|
|
@@ -842,15 +824,14 @@ describe('plugin-meetings', () => {
|
|
|
842
824
|
|
|
843
825
|
assert.calledOnceWithExactly(webex.request, {
|
|
844
826
|
method: 'PUT',
|
|
845
|
-
uri: 'url/editlock/token'
|
|
827
|
+
uri: 'url/editlock/token',
|
|
846
828
|
});
|
|
847
829
|
|
|
848
830
|
clock.restore();
|
|
849
831
|
});
|
|
850
832
|
|
|
851
833
|
it('keep edit lock, ttl < 30, also using 30', () => {
|
|
852
|
-
|
|
853
|
-
const clock = sinon.useFakeTimers()
|
|
834
|
+
const clock = sinon.useFakeTimers();
|
|
854
835
|
|
|
855
836
|
breakouts.set('editLock', {
|
|
856
837
|
ttl: 20,
|
|
@@ -863,15 +844,14 @@ describe('plugin-meetings', () => {
|
|
|
863
844
|
|
|
864
845
|
assert.calledOnceWithExactly(webex.request, {
|
|
865
846
|
method: 'PUT',
|
|
866
|
-
uri: 'url/editlock/token'
|
|
847
|
+
uri: 'url/editlock/token',
|
|
867
848
|
});
|
|
868
849
|
|
|
869
850
|
clock.restore();
|
|
870
851
|
});
|
|
871
852
|
|
|
872
853
|
it('keep edit lock, ttl > 30, using the ttl', () => {
|
|
873
|
-
|
|
874
|
-
const clock = sinon.useFakeTimers()
|
|
854
|
+
const clock = sinon.useFakeTimers();
|
|
875
855
|
|
|
876
856
|
breakouts.set('editLock', {
|
|
877
857
|
ttl: 50,
|
|
@@ -887,14 +867,13 @@ describe('plugin-meetings', () => {
|
|
|
887
867
|
clock.restore();
|
|
888
868
|
});
|
|
889
869
|
|
|
890
|
-
it('keep edit lock, throw error, clearInterval', async() => {
|
|
891
|
-
|
|
870
|
+
it('keep edit lock, throw error, clearInterval', async () => {
|
|
892
871
|
breakouts._clearEditLockInfo = sinon.stub();
|
|
893
872
|
|
|
894
873
|
const error = new Error('something went wrong');
|
|
895
874
|
webex.request.rejects(error);
|
|
896
875
|
|
|
897
|
-
const clock = sinon.useFakeTimers()
|
|
876
|
+
const clock = sinon.useFakeTimers();
|
|
898
877
|
|
|
899
878
|
breakouts.set('editLock', {
|
|
900
879
|
ttl: 30,
|
|
@@ -913,8 +892,7 @@ describe('plugin-meetings', () => {
|
|
|
913
892
|
});
|
|
914
893
|
|
|
915
894
|
it('keep edit lock, do not call until reached ttl', () => {
|
|
916
|
-
|
|
917
|
-
const clock = sinon.useFakeTimers()
|
|
895
|
+
const clock = sinon.useFakeTimers();
|
|
918
896
|
|
|
919
897
|
breakouts.set('editLock', {
|
|
920
898
|
ttl: 30,
|
|
@@ -930,18 +908,19 @@ describe('plugin-meetings', () => {
|
|
|
930
908
|
clock.tick(1);
|
|
931
909
|
assert.calledOnceWithExactly(webex.request, {
|
|
932
910
|
method: 'PUT',
|
|
933
|
-
uri: 'url/editlock/token'
|
|
911
|
+
uri: 'url/editlock/token',
|
|
934
912
|
});
|
|
935
913
|
|
|
936
914
|
clock.restore();
|
|
937
915
|
});
|
|
938
|
-
|
|
939
916
|
});
|
|
940
|
-
|
|
917
|
+
|
|
941
918
|
describe('#assign', () => {
|
|
942
919
|
it('assign members and emails to a breakout session', async () => {
|
|
943
920
|
breakouts.assign = sinon.stub().returns(Promise.resolve('ASSIGN_RETURN_VALUE'));
|
|
944
|
-
const params = [
|
|
921
|
+
const params = [
|
|
922
|
+
{id: 'sessionId', memberIds: ['111'], emails: ['111@cisco.com'], anyone: true},
|
|
923
|
+
];
|
|
945
924
|
const result = await breakouts.assign(params);
|
|
946
925
|
assert.calledOnceWithExactly(breakouts.assign, params);
|
|
947
926
|
assert.equal(result, 'ASSIGN_RETURN_VALUE');
|