@webex/plugin-meetings 3.0.0-beta.87 → 3.0.0-beta.88
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
|
@@ -775,15 +775,21 @@ var Breakouts = _webexCore.WebexPlugin.extend({
|
|
|
775
775
|
anyoneCanJoin: !!item.anyone
|
|
776
776
|
};
|
|
777
777
|
});
|
|
778
|
+
var body = _objectSpread(_objectSpread({}, this.editLock && !!this.editLock.token ? {
|
|
779
|
+
editlock: {
|
|
780
|
+
token: this.editLock.token,
|
|
781
|
+
refresh: true
|
|
782
|
+
}
|
|
783
|
+
} : {}), {
|
|
784
|
+
groups: [{
|
|
785
|
+
id: this.breakoutGroupId,
|
|
786
|
+
sessions: internalSessions
|
|
787
|
+
}]
|
|
788
|
+
});
|
|
778
789
|
return this.request({
|
|
779
790
|
method: _constants.HTTP_VERBS.PUT,
|
|
780
791
|
uri: this.url,
|
|
781
|
-
body:
|
|
782
|
-
groups: [{
|
|
783
|
-
id: this.breakoutGroupId,
|
|
784
|
-
sessions: internalSessions
|
|
785
|
-
}]
|
|
786
|
-
}
|
|
792
|
+
body: body
|
|
787
793
|
});
|
|
788
794
|
},
|
|
789
795
|
/**
|
|
@@ -839,7 +845,7 @@ var Breakouts = _webexCore.WebexPlugin.extend({
|
|
|
839
845
|
body: body
|
|
840
846
|
});
|
|
841
847
|
},
|
|
842
|
-
version: "3.0.0-beta.
|
|
848
|
+
version: "3.0.0-beta.88"
|
|
843
849
|
});
|
|
844
850
|
var _default = Breakouts;
|
|
845
851
|
exports.default = _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Breakouts","WebexPlugin","extend","namespace","MEETINGS","breakoutRequest","BreakoutRequest","collections","breakouts","BreakoutCollection","props","allowBackToMain","delayCloseTime","enableBreakoutSession","hasBreakoutPreAssignments","groupId","name","sessionId","sessionType","startTime","status","url","locusUrl","breakoutServiceUrl","mainLocusUrl","groups","shouldFetchPreassignments","editLock","intervalID","meetingId","children","currentBreakoutSession","Breakout","derived","isInMainSession","cache","deps","fn","BREAKOUTS","SESSION_TYPES","MAIN","isActiveBreakout","BREAKOUT","STATUS","OPEN","CLOSING","breakoutGroupId","length","id","initialize","listenTo","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","preEnableBreakoutSession","current","SESSION_STATES","ACTIVE","ALLOWED","ASSIGNED_CURRENT","REQUESTED","queryPreAssignments","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","token","editlock","PUT","create","boServiceErrorHandler","breakInfo","_clearEditLockInfo","resolve","clearSessions","action","ACTION","DELETE","start","START","allowToJoinLater","duration","DEFAULT_DURATION","refresh","end","CLOSE","update","getBreakout","GET","keepEditLockAlive","enableAndLockBreakout","lockBreakout","EDIT_LOCK_STATUS","LOCKED","ttl","DEFAULT_TTL","window","clearInterval","setInterval","unLockEditBreakout","assign","sessions","internalSessions","map","item","assigned","memberIds","assignedEmails","emails","anyoneCanJoin","anyone","dynamicAssign","updatedSessions","participants","targetState"],"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 hasBreakoutPreAssignments: '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 shouldFetchPreassignments: 'boolean', // Controlling the lifecycle of the pre-assign API\n editLock: 'object', // appears when getBreakout info editlock = true\n intervalID: 'number',\n meetingId: 'string',\n },\n children: {\n currentBreakoutSession: Breakout,\n },\n\n derived: {\n isInMainSession: {\n cache: false,\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 isActiveBreakout: {\n cache: false, // fix issue: sometimes the derived will not change even if the deps changed\n deps: ['sessionType', 'status'],\n /**\n * Returns true if the breakout status is active\n * @returns {boolean}\n */\n fn() {\n return (\n this.sessionType === BREAKOUTS.SESSION_TYPES.BREAKOUT &&\n (this.status === BREAKOUTS.STATUS.OPEN || this.status === BREAKOUTS.STATUS.CLOSING)\n );\n },\n },\n breakoutGroupId: {\n cache: false,\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 const preEnableBreakoutSession = this.get('enableBreakoutSession');\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 // We need to call queryPreAssignments when enableBreakoutSession become true\n if (\n params.enableBreakoutSession &&\n params.hasBreakoutPreAssignments &&\n preEnableBreakoutSession !== params.enableBreakoutSession\n ) {\n this.queryPreAssignments();\n }\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 const body = {\n ...(this.editLock && !!this.editLock.token ? {editlock: {token: this.editLock.token}} : {}),\n ...{enableBreakoutSession: enable},\n };\n\n // @ts-ignore\n return this.webex.request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body,\n });\n },\n\n /**\n * Create new breakout sessions\n * @param {object} params -- breakout session group\n * @returns {Promise}\n */\n async create(params) {\n const payload = {...params};\n const body = {\n ...(this.editLock && !!this.editLock.token ? {editlock: {token: this.editLock.token}} : {}),\n ...{groups: [payload]},\n };\n // @ts-ignore\n const breakInfo = await this.webex\n .request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body,\n })\n .catch((error) => {\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#create'));\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 const body = {\n ...(this.editLock && !!this.editLock.token ? {editlock: {token: this.editLock.token}} : {}),\n ...{groups: [{action: BREAKOUTS.ACTION.DELETE}]},\n };\n // @ts-ignore\n const breakInfo = await this.webex\n .request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body,\n })\n .catch((error) => {\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#clearSessions'));\n });\n\n if (breakInfo.body?.groups) {\n this.set('groups', breakInfo.body.groups);\n }\n this.shouldFetchPreassignments = false;\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 const body = {\n ...(this.editLock && !!this.editLock.token\n ? {editlock: {token: this.editLock.token, refresh: true}}\n : {}),\n ...{groups: [payload]},\n };\n\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body,\n }).catch((error) => {\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#start'));\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 const body = {\n ...(this.editLock && !!this.editLock.token\n ? {editlock: {token: this.editLock.token, refresh: true}}\n : {}),\n ...{groups: [payload]},\n };\n\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body,\n }).catch((error) => {\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#end'));\n });\n },\n\n /**\n * Host or cohost update breakout sessions\n * @param {Object} params\n * @param {String} params.id\n * @returns {Promise}\n */\n update(params: {id: string}) {\n if (!params.id) {\n return Promise.reject(new Error('Missing breakout group id'));\n }\n const payload = {...params};\n\n const body = {\n ...(this.editLock?.token ? {editlock: {token: this.editLock.token, refresh: true}} : {}),\n ...{groups: [payload]},\n };\n\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body,\n }).catch((error) => {\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#update'));\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 (editlock && breakout.body?.editlock?.token) {\n this.set('editLock', breakout.body.editlock);\n this.keepEditLockAlive();\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 if (this.intervalID) {\n window.clearInterval(this.intervalID);\n }\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 if (this.editLock && !!this.editLock.token) {\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 /**\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 /**\n * The pre-assignments need to be queried when \"hasBreakoutPreAssignments\" is true\n * @returns {void}\n */\n queryPreAssignments() {\n if (!this.shouldFetchPreassignments) {\n this.webex\n .request({uri: `${this.url}/preassignments`, qs: {locusUrl: btoa(this.locusUrl)}})\n .then((result) => {\n if (result.body?.groups) {\n this.set('groups', result.body.groups);\n }\n })\n .catch((error) => {\n LoggerProxy.logger.error('Meeting:breakouts#queryPreAssignments failed', error);\n });\n this.shouldFetchPreassignments = true;\n }\n },\n /**\n * assign participants dynamically after breakout sessions started,\n * but currently it only used for admitting participants from lobby into breakout directly\n * @param {Array} sessions\n * @returns {void}\n */\n dynamicAssign(sessions: any[]) {\n const updatedSessions = sessions.map((item) => {\n return {\n id: item.id,\n participants: item.participants,\n targetState: item.targetState,\n };\n });\n\n const body = {\n groups: [\n {\n id: this.breakoutGroupId,\n sessions: updatedSessions,\n },\n ],\n editlock: null,\n };\n\n if (this.editLock && this.editLock.token) {\n body.editlock = this.editLock;\n }\n\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: `${this.url}/dynamicAssign`,\n body,\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","hasBreakoutPreAssignments","groupId","name","sessionId","sessionType","startTime","status","url","locusUrl","breakoutServiceUrl","mainLocusUrl","groups","shouldFetchPreassignments","editLock","intervalID","meetingId","children","currentBreakoutSession","Breakout","derived","isInMainSession","cache","deps","fn","BREAKOUTS","SESSION_TYPES","MAIN","isActiveBreakout","BREAKOUT","STATUS","OPEN","CLOSING","breakoutGroupId","length","id","initialize","listenTo","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","preEnableBreakoutSession","current","SESSION_STATES","ACTIVE","ALLOWED","ASSIGNED_CURRENT","REQUESTED","queryPreAssignments","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","token","editlock","PUT","create","boServiceErrorHandler","breakInfo","_clearEditLockInfo","resolve","clearSessions","action","ACTION","DELETE","start","START","allowToJoinLater","duration","DEFAULT_DURATION","refresh","end","CLOSE","update","getBreakout","GET","keepEditLockAlive","enableAndLockBreakout","lockBreakout","EDIT_LOCK_STATUS","LOCKED","ttl","DEFAULT_TTL","window","clearInterval","setInterval","unLockEditBreakout","assign","sessions","internalSessions","map","item","assigned","memberIds","assignedEmails","emails","anyoneCanJoin","anyone","dynamicAssign","updatedSessions","participants","targetState"],"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 hasBreakoutPreAssignments: '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 shouldFetchPreassignments: 'boolean', // Controlling the lifecycle of the pre-assign API\n editLock: 'object', // appears when getBreakout info editlock = true\n intervalID: 'number',\n meetingId: 'string',\n },\n children: {\n currentBreakoutSession: Breakout,\n },\n\n derived: {\n isInMainSession: {\n cache: false,\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 isActiveBreakout: {\n cache: false, // fix issue: sometimes the derived will not change even if the deps changed\n deps: ['sessionType', 'status'],\n /**\n * Returns true if the breakout status is active\n * @returns {boolean}\n */\n fn() {\n return (\n this.sessionType === BREAKOUTS.SESSION_TYPES.BREAKOUT &&\n (this.status === BREAKOUTS.STATUS.OPEN || this.status === BREAKOUTS.STATUS.CLOSING)\n );\n },\n },\n breakoutGroupId: {\n cache: false,\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 const preEnableBreakoutSession = this.get('enableBreakoutSession');\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 // We need to call queryPreAssignments when enableBreakoutSession become true\n if (\n params.enableBreakoutSession &&\n params.hasBreakoutPreAssignments &&\n preEnableBreakoutSession !== params.enableBreakoutSession\n ) {\n this.queryPreAssignments();\n }\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 const body = {\n ...(this.editLock && !!this.editLock.token ? {editlock: {token: this.editLock.token}} : {}),\n ...{enableBreakoutSession: enable},\n };\n\n // @ts-ignore\n return this.webex.request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body,\n });\n },\n\n /**\n * Create new breakout sessions\n * @param {object} params -- breakout session group\n * @returns {Promise}\n */\n async create(params) {\n const payload = {...params};\n const body = {\n ...(this.editLock && !!this.editLock.token ? {editlock: {token: this.editLock.token}} : {}),\n ...{groups: [payload]},\n };\n // @ts-ignore\n const breakInfo = await this.webex\n .request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body,\n })\n .catch((error) => {\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#create'));\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 const body = {\n ...(this.editLock && !!this.editLock.token ? {editlock: {token: this.editLock.token}} : {}),\n ...{groups: [{action: BREAKOUTS.ACTION.DELETE}]},\n };\n // @ts-ignore\n const breakInfo = await this.webex\n .request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body,\n })\n .catch((error) => {\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#clearSessions'));\n });\n\n if (breakInfo.body?.groups) {\n this.set('groups', breakInfo.body.groups);\n }\n this.shouldFetchPreassignments = false;\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 const body = {\n ...(this.editLock && !!this.editLock.token\n ? {editlock: {token: this.editLock.token, refresh: true}}\n : {}),\n ...{groups: [payload]},\n };\n\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body,\n }).catch((error) => {\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#start'));\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 const body = {\n ...(this.editLock && !!this.editLock.token\n ? {editlock: {token: this.editLock.token, refresh: true}}\n : {}),\n ...{groups: [payload]},\n };\n\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body,\n }).catch((error) => {\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#end'));\n });\n },\n\n /**\n * Host or cohost update breakout sessions\n * @param {Object} params\n * @param {String} params.id\n * @returns {Promise}\n */\n update(params: {id: string}) {\n if (!params.id) {\n return Promise.reject(new Error('Missing breakout group id'));\n }\n const payload = {...params};\n\n const body = {\n ...(this.editLock?.token ? {editlock: {token: this.editLock.token, refresh: true}} : {}),\n ...{groups: [payload]},\n };\n\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body,\n }).catch((error) => {\n return Promise.reject(boServiceErrorHandler(error, 'Breakouts#update'));\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 (editlock && breakout.body?.editlock?.token) {\n this.set('editLock', breakout.body.editlock);\n this.keepEditLockAlive();\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 if (this.intervalID) {\n window.clearInterval(this.intervalID);\n }\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 if (this.editLock && !!this.editLock.token) {\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 /**\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 const body = {\n ...(this.editLock && !!this.editLock.token\n ? {editlock: {token: this.editLock.token, refresh: true}}\n : {}),\n ...{\n groups: [\n {\n id: this.breakoutGroupId,\n sessions: internalSessions,\n },\n ],\n },\n };\n\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: this.url,\n body,\n });\n },\n\n /**\n * The pre-assignments need to be queried when \"hasBreakoutPreAssignments\" is true\n * @returns {void}\n */\n queryPreAssignments() {\n if (!this.shouldFetchPreassignments) {\n this.webex\n .request({uri: `${this.url}/preassignments`, qs: {locusUrl: btoa(this.locusUrl)}})\n .then((result) => {\n if (result.body?.groups) {\n this.set('groups', result.body.groups);\n }\n })\n .catch((error) => {\n LoggerProxy.logger.error('Meeting:breakouts#queryPreAssignments failed', error);\n });\n this.shouldFetchPreassignments = true;\n }\n },\n /**\n * assign participants dynamically after breakout sessions started,\n * but currently it only used for admitting participants from lobby into breakout directly\n * @param {Array} sessions\n * @returns {void}\n */\n dynamicAssign(sessions: any[]) {\n const updatedSessions = sessions.map((item) => {\n return {\n id: item.id,\n participants: item.participants,\n targetState: item.targetState,\n };\n });\n\n const body = {\n groups: [\n {\n id: this.breakoutGroupId,\n sessions: updatedSessions,\n },\n ],\n editlock: null,\n };\n\n if (this.editLock && this.editLock.token) {\n body.editlock = this.editLock;\n }\n\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: `${this.url}/dynamicAssign`,\n body,\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.88",
|
|
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.88",
|
|
36
|
+
"@webex/test-helper-chai": "3.0.0-beta.88",
|
|
37
|
+
"@webex/test-helper-mocha": "3.0.0-beta.88",
|
|
38
|
+
"@webex/test-helper-mock-webex": "3.0.0-beta.88",
|
|
39
|
+
"@webex/test-helper-retry": "3.0.0-beta.88",
|
|
40
|
+
"@webex/test-helper-test-users": "3.0.0-beta.88",
|
|
41
41
|
"chai": "^4.3.4",
|
|
42
42
|
"chai-as-promised": "^7.1.1",
|
|
43
43
|
"jsdom-global": "3.0.2",
|
|
@@ -46,19 +46,19 @@
|
|
|
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.88",
|
|
50
50
|
"@webex/internal-media-core": "1.36.0",
|
|
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/media-helpers": "3.0.0-beta.
|
|
59
|
-
"@webex/plugin-people": "3.0.0-beta.
|
|
60
|
-
"@webex/plugin-rooms": "3.0.0-beta.
|
|
61
|
-
"@webex/webex-core": "3.0.0-beta.
|
|
51
|
+
"@webex/internal-plugin-conversation": "3.0.0-beta.88",
|
|
52
|
+
"@webex/internal-plugin-device": "3.0.0-beta.88",
|
|
53
|
+
"@webex/internal-plugin-llm": "3.0.0-beta.88",
|
|
54
|
+
"@webex/internal-plugin-mercury": "3.0.0-beta.88",
|
|
55
|
+
"@webex/internal-plugin-metrics": "3.0.0-beta.88",
|
|
56
|
+
"@webex/internal-plugin-support": "3.0.0-beta.88",
|
|
57
|
+
"@webex/internal-plugin-user": "3.0.0-beta.88",
|
|
58
|
+
"@webex/media-helpers": "3.0.0-beta.88",
|
|
59
|
+
"@webex/plugin-people": "3.0.0-beta.88",
|
|
60
|
+
"@webex/plugin-rooms": "3.0.0-beta.88",
|
|
61
|
+
"@webex/webex-core": "3.0.0-beta.88",
|
|
62
62
|
"ampersand-collection": "^2.0.2",
|
|
63
63
|
"bowser": "^2.11.0",
|
|
64
64
|
"btoa": "^1.2.1",
|
package/src/breakouts/index.ts
CHANGED
|
@@ -676,10 +676,11 @@ const Breakouts = WebexPlugin.extend({
|
|
|
676
676
|
};
|
|
677
677
|
});
|
|
678
678
|
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
679
|
+
const body = {
|
|
680
|
+
...(this.editLock && !!this.editLock.token
|
|
681
|
+
? {editlock: {token: this.editLock.token, refresh: true}}
|
|
682
|
+
: {}),
|
|
683
|
+
...{
|
|
683
684
|
groups: [
|
|
684
685
|
{
|
|
685
686
|
id: this.breakoutGroupId,
|
|
@@ -687,6 +688,12 @@ const Breakouts = WebexPlugin.extend({
|
|
|
687
688
|
},
|
|
688
689
|
],
|
|
689
690
|
},
|
|
691
|
+
};
|
|
692
|
+
|
|
693
|
+
return this.request({
|
|
694
|
+
method: HTTP_VERBS.PUT,
|
|
695
|
+
uri: this.url,
|
|
696
|
+
body,
|
|
690
697
|
});
|
|
691
698
|
},
|
|
692
699
|
|
|
@@ -53,7 +53,12 @@ const getBOResponseWithEditLockInfo = (status: string, withOutToken?: boolean) =
|
|
|
53
53
|
locusUrl: 'locusUrl',
|
|
54
54
|
mainGroupId: 'mainGroupId',
|
|
55
55
|
mainSessionId: 'mainSessionId',
|
|
56
|
-
editlock: {
|
|
56
|
+
editlock: {
|
|
57
|
+
state: 'LOCKED',
|
|
58
|
+
ttl: 30,
|
|
59
|
+
userId: 'cc5d452f-04b6-4876-a4c3-28ca21982c6a',
|
|
60
|
+
token: withOutToken ? '' : 'token1',
|
|
61
|
+
},
|
|
57
62
|
groups: [
|
|
58
63
|
{
|
|
59
64
|
sessions: [
|
|
@@ -580,7 +585,7 @@ describe('plugin-meetings', () => {
|
|
|
580
585
|
);
|
|
581
586
|
assert.calledOnceWithExactly(
|
|
582
587
|
LoggerProxy.logger.info,
|
|
583
|
-
'Breakouts#update --> Edit lock token mismatch'
|
|
588
|
+
'Breakouts#update --> Edit lock token mismatch'
|
|
584
589
|
);
|
|
585
590
|
});
|
|
586
591
|
|
|
@@ -607,15 +612,13 @@ describe('plugin-meetings', () => {
|
|
|
607
612
|
|
|
608
613
|
assert.calledOnceWithExactly(
|
|
609
614
|
LoggerProxy.logger.info,
|
|
610
|
-
'Breakouts#update --> Not authorized to interact with edit lock'
|
|
615
|
+
'Breakouts#update --> Not authorized to interact with edit lock'
|
|
611
616
|
);
|
|
612
617
|
});
|
|
613
618
|
|
|
614
619
|
it('rejects when other unknow error', async () => {
|
|
615
620
|
const mockError = new Error('something wrong');
|
|
616
|
-
webex.request.returns(
|
|
617
|
-
Promise.reject(mockError)
|
|
618
|
-
);
|
|
621
|
+
webex.request.returns(Promise.reject(mockError));
|
|
619
622
|
LoggerProxy.logger.info = sinon.stub();
|
|
620
623
|
|
|
621
624
|
const params = {
|
|
@@ -623,15 +626,11 @@ describe('plugin-meetings', () => {
|
|
|
623
626
|
sessions: [{name: 'Session 1'}],
|
|
624
627
|
};
|
|
625
628
|
|
|
626
|
-
await assert.isRejected(
|
|
627
|
-
breakouts.update(params),
|
|
628
|
-
mockError,
|
|
629
|
-
'something wrong'
|
|
630
|
-
);
|
|
629
|
+
await assert.isRejected(breakouts.update(params), mockError, 'something wrong');
|
|
631
630
|
|
|
632
631
|
assert.calledOnceWithExactly(
|
|
633
632
|
LoggerProxy.logger.info,
|
|
634
|
-
'Breakouts#update --> something wrong'
|
|
633
|
+
'Breakouts#update --> something wrong'
|
|
635
634
|
);
|
|
636
635
|
});
|
|
637
636
|
});
|
|
@@ -987,7 +986,6 @@ describe('plugin-meetings', () => {
|
|
|
987
986
|
});
|
|
988
987
|
|
|
989
988
|
it('do not call unLock if edit lock info not exist ', async () => {
|
|
990
|
-
|
|
991
989
|
breakouts.unLockEditBreakout();
|
|
992
990
|
assert.notCalled(webex.request);
|
|
993
991
|
});
|
|
@@ -1138,6 +1136,34 @@ describe('plugin-meetings', () => {
|
|
|
1138
1136
|
assert.calledOnceWithExactly(breakouts.assign, params);
|
|
1139
1137
|
assert.equal(result, 'ASSIGN_RETURN_VALUE');
|
|
1140
1138
|
});
|
|
1139
|
+
|
|
1140
|
+
it('called with editlock', async () => {
|
|
1141
|
+
breakouts.request = sinon.stub().returns(Promise.resolve('ASSIGN_RETURN_VALUE'));
|
|
1142
|
+
breakouts.editLock = {
|
|
1143
|
+
token: 'token1',
|
|
1144
|
+
};
|
|
1145
|
+
const params = [{id: 'sessionId', emails: ['111@cisco.com'], memberIds: []}];
|
|
1146
|
+
await breakouts.assign(params);
|
|
1147
|
+
const args = breakouts.request.getCall(0).args[0];
|
|
1148
|
+
expect(args).to.be.an('object', {
|
|
1149
|
+
method: 'PUT',
|
|
1150
|
+
uri: 'url',
|
|
1151
|
+
body: {
|
|
1152
|
+
editlock: {token: 'token1', refresh: true},
|
|
1153
|
+
groups: {
|
|
1154
|
+
id: 'sessionId',
|
|
1155
|
+
sessions: [
|
|
1156
|
+
{
|
|
1157
|
+
id: 'sessionId',
|
|
1158
|
+
assigned: [],
|
|
1159
|
+
assignedEmails: ['111@cisco.com'],
|
|
1160
|
+
anyoneCanJoin: false,
|
|
1161
|
+
},
|
|
1162
|
+
],
|
|
1163
|
+
},
|
|
1164
|
+
},
|
|
1165
|
+
});
|
|
1166
|
+
});
|
|
1141
1167
|
});
|
|
1142
1168
|
|
|
1143
1169
|
describe('queryPreAssignments', () => {
|
|
@@ -1145,57 +1171,52 @@ describe('plugin-meetings', () => {
|
|
|
1145
1171
|
webex.request.returns(
|
|
1146
1172
|
Promise.resolve({
|
|
1147
1173
|
body: {
|
|
1148
|
-
|
|
1174
|
+
groups: [
|
|
1149
1175
|
{
|
|
1150
|
-
|
|
1176
|
+
sessions: [
|
|
1151
1177
|
{
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
"b@b.com",
|
|
1156
|
-
"jial2@cisco.com"
|
|
1157
|
-
],
|
|
1158
|
-
"anyoneCanJoin": false
|
|
1178
|
+
name: 'Breakout session 1',
|
|
1179
|
+
assignedEmails: ['a@a.com', 'b@b.com', 'jial2@cisco.com'],
|
|
1180
|
+
anyoneCanJoin: false,
|
|
1159
1181
|
},
|
|
1160
1182
|
{
|
|
1161
|
-
|
|
1162
|
-
|
|
1183
|
+
name: 'Breakout session 2',
|
|
1184
|
+
anyoneCanJoin: false,
|
|
1163
1185
|
},
|
|
1164
1186
|
{
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
"anyoneCanJoin": false
|
|
1170
|
-
}
|
|
1187
|
+
name: 'Breakout session 3',
|
|
1188
|
+
assignedEmails: ['c@c.com'],
|
|
1189
|
+
anyoneCanJoin: false,
|
|
1190
|
+
},
|
|
1171
1191
|
],
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
"d@d.com"
|
|
1175
|
-
]
|
|
1192
|
+
unassignedInvitees: {
|
|
1193
|
+
emails: ['d@d.com'],
|
|
1176
1194
|
},
|
|
1177
|
-
|
|
1178
|
-
}
|
|
1179
|
-
]
|
|
1180
|
-
}
|
|
1195
|
+
type: 'BREAKOUT',
|
|
1196
|
+
},
|
|
1197
|
+
],
|
|
1198
|
+
},
|
|
1181
1199
|
})
|
|
1182
1200
|
);
|
|
1183
1201
|
breakouts.shouldFetchPreassignments = false;
|
|
1184
1202
|
const result = await breakouts.queryPreAssignments();
|
|
1185
1203
|
const arg = webex.request.getCall(0).args[0];
|
|
1186
1204
|
assert.equal(arg.uri, 'url/preassignments');
|
|
1187
|
-
assert.equal(breakouts.groups[0].unassignedInvitees.emails[0],'d@d.com');
|
|
1188
|
-
assert.equal(breakouts.groups[0].sessions[0].name,'Breakout session 1');
|
|
1189
|
-
assert.equal(breakouts.groups[0].sessions[0].anyoneCanJoin,false);
|
|
1190
|
-
assert.equal(
|
|
1191
|
-
|
|
1192
|
-
|
|
1205
|
+
assert.equal(breakouts.groups[0].unassignedInvitees.emails[0], 'd@d.com');
|
|
1206
|
+
assert.equal(breakouts.groups[0].sessions[0].name, 'Breakout session 1');
|
|
1207
|
+
assert.equal(breakouts.groups[0].sessions[0].anyoneCanJoin, false);
|
|
1208
|
+
assert.equal(
|
|
1209
|
+
breakouts.groups[0].sessions[0].assignedEmails.toString(),
|
|
1210
|
+
['a@a.com', 'b@b.com', 'jial2@cisco.com'].toString()
|
|
1211
|
+
);
|
|
1212
|
+
assert.equal(breakouts.groups[0].sessions[1].name, 'Breakout session 2');
|
|
1213
|
+
assert.equal(breakouts.groups[0].sessions[1].anyoneCanJoin, false);
|
|
1193
1214
|
assert.equal(breakouts.groups[0].sessions[1].assignedEmails, undefined);
|
|
1194
|
-
assert.equal(breakouts.groups[0].sessions[2].name,'Breakout session 3');
|
|
1195
|
-
assert.equal(breakouts.groups[0].sessions[2].anyoneCanJoin,false);
|
|
1215
|
+
assert.equal(breakouts.groups[0].sessions[2].name, 'Breakout session 3');
|
|
1216
|
+
assert.equal(breakouts.groups[0].sessions[2].anyoneCanJoin, false);
|
|
1196
1217
|
assert.equal(breakouts.groups[0].sessions[2].assignedEmails[0], 'c@c.com');
|
|
1197
|
-
assert.equal(breakouts.groups[0].unassignedInvitees.emails[0],'d@d.com');
|
|
1198
|
-
assert.equal(breakouts.groups[0].type,'BREAKOUT');
|
|
1218
|
+
assert.equal(breakouts.groups[0].unassignedInvitees.emails[0], 'd@d.com');
|
|
1219
|
+
assert.equal(breakouts.groups[0].type, 'BREAKOUT');
|
|
1199
1220
|
assert.equal(breakouts.shouldFetchPreassignments, true);
|
|
1200
1221
|
});
|
|
1201
1222
|
|
|
@@ -1204,7 +1225,7 @@ describe('plugin-meetings', () => {
|
|
|
1204
1225
|
statusCode: 404,
|
|
1205
1226
|
body: {
|
|
1206
1227
|
errorCode: 201404004,
|
|
1207
|
-
message: 'No pre-assignments created for this meeting'
|
|
1228
|
+
message: 'No pre-assignments created for this meeting',
|
|
1208
1229
|
},
|
|
1209
1230
|
};
|
|
1210
1231
|
webex.request.rejects(response);
|
|
@@ -1216,8 +1237,8 @@ describe('plugin-meetings', () => {
|
|
|
1216
1237
|
'Meeting:breakouts#queryPreAssignments failed',
|
|
1217
1238
|
response
|
|
1218
1239
|
);
|
|
1219
|
-
|
|
1220
|
-
|
|
1240
|
+
});
|
|
1241
|
+
});
|
|
1221
1242
|
|
|
1222
1243
|
describe('#dynamicAssign', () => {
|
|
1223
1244
|
it('should make a PUT request with correct body and return the result', async () => {
|
|
@@ -1247,6 +1268,5 @@ describe('plugin-meetings', () => {
|
|
|
1247
1268
|
assert.equal(result, 'REQUEST_RETURN_VALUE');
|
|
1248
1269
|
});
|
|
1249
1270
|
});
|
|
1250
|
-
|
|
1251
1271
|
});
|
|
1252
1272
|
});
|