@webex/plugin-meetings 3.3.1-next.2 → 3.3.1-next.20
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/breakout.js +1 -1
- package/dist/breakouts/index.js +7 -2
- package/dist/breakouts/index.js.map +1 -1
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/media/MediaConnectionAwaiter.js +50 -13
- package/dist/media/MediaConnectionAwaiter.js.map +1 -1
- package/dist/mediaQualityMetrics/config.js +16 -6
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/connectionStateHandler.js +67 -0
- package/dist/meeting/connectionStateHandler.js.map +1 -0
- package/dist/meeting/index.js +98 -46
- package/dist/meeting/index.js.map +1 -1
- package/dist/metrics/constants.js +2 -1
- package/dist/metrics/constants.js.map +1 -1
- package/dist/reachability/clusterReachability.js +108 -53
- package/dist/reachability/clusterReachability.js.map +1 -1
- package/dist/reachability/index.js +415 -56
- package/dist/reachability/index.js.map +1 -1
- package/dist/statsAnalyzer/index.js +81 -27
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +36 -10
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/types/media/MediaConnectionAwaiter.d.ts +18 -4
- package/dist/types/mediaQualityMetrics/config.d.ts +11 -0
- package/dist/types/meeting/connectionStateHandler.d.ts +30 -0
- package/dist/types/meeting/index.d.ts +2 -0
- package/dist/types/metrics/constants.d.ts +1 -0
- package/dist/types/reachability/clusterReachability.d.ts +31 -3
- package/dist/types/reachability/index.d.ts +93 -2
- package/dist/types/statsAnalyzer/index.d.ts +15 -6
- package/dist/types/statsAnalyzer/mqaUtil.d.ts +17 -4
- package/dist/webinar/index.js +1 -1
- package/package.json +23 -22
- package/src/breakouts/index.ts +7 -1
- package/src/media/MediaConnectionAwaiter.ts +66 -11
- package/src/mediaQualityMetrics/config.ts +14 -3
- package/src/meeting/connectionStateHandler.ts +65 -0
- package/src/meeting/index.ts +72 -14
- package/src/metrics/constants.ts +1 -0
- package/src/reachability/clusterReachability.ts +86 -25
- package/src/reachability/index.ts +313 -27
- package/src/statsAnalyzer/index.ts +85 -24
- package/src/statsAnalyzer/mqaUtil.ts +55 -7
- package/test/unit/spec/breakouts/index.ts +51 -32
- package/test/unit/spec/media/MediaConnectionAwaiter.ts +90 -32
- package/test/unit/spec/meeting/connectionStateHandler.ts +102 -0
- package/test/unit/spec/meeting/index.js +158 -36
- package/test/unit/spec/reachability/clusterReachability.ts +116 -22
- package/test/unit/spec/reachability/index.ts +1120 -84
- package/test/unit/spec/stats-analyzer/index.js +647 -319
package/dist/breakouts/index.js
CHANGED
|
@@ -174,7 +174,6 @@ var Breakouts = _webexCore.WebexPlugin.extend({
|
|
|
174
174
|
_this.triggerReturnToMainEvent(breakout);
|
|
175
175
|
});
|
|
176
176
|
this.listenToCurrentSessionTypeChange();
|
|
177
|
-
this.listenToBroadcastMessages();
|
|
178
177
|
this.listenToBreakoutRosters();
|
|
179
178
|
this.listenToBreakoutHelp();
|
|
180
179
|
// @ts-ignore
|
|
@@ -188,6 +187,7 @@ var Breakouts = _webexCore.WebexPlugin.extend({
|
|
|
188
187
|
*/
|
|
189
188
|
cleanUp: function cleanUp() {
|
|
190
189
|
this.stopListening();
|
|
190
|
+
this.hasSubscribedToMessage = undefined;
|
|
191
191
|
},
|
|
192
192
|
/**
|
|
193
193
|
* Update the current locus url of the meeting
|
|
@@ -196,6 +196,7 @@ var Breakouts = _webexCore.WebexPlugin.extend({
|
|
|
196
196
|
*/
|
|
197
197
|
locusUrlUpdate: function locusUrlUpdate(locusUrl) {
|
|
198
198
|
this.set('locusUrl', locusUrl);
|
|
199
|
+
this.listenToBroadcastMessages();
|
|
199
200
|
var isInMainSession = this.isInMainSession,
|
|
200
201
|
mainLocusUrl = this.mainLocusUrl;
|
|
201
202
|
if (isInMainSession || !mainLocusUrl) {
|
|
@@ -273,6 +274,9 @@ var Breakouts = _webexCore.WebexPlugin.extend({
|
|
|
273
274
|
*/
|
|
274
275
|
listenToBroadcastMessages: function listenToBroadcastMessages() {
|
|
275
276
|
var _this4 = this;
|
|
277
|
+
if (!this.webex.internal.llm.isConnected() || this.hasSubscribedToMessage) {
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
276
280
|
this.listenTo(this.webex.internal.llm, 'event:breakout.message', function (event) {
|
|
277
281
|
var _event$data = event.data,
|
|
278
282
|
senderUserId = _event$data.senderUserId,
|
|
@@ -288,6 +292,7 @@ var Breakouts = _webexCore.WebexPlugin.extend({
|
|
|
288
292
|
sessionId: _this4.currentBreakoutSession.sessionId
|
|
289
293
|
});
|
|
290
294
|
});
|
|
295
|
+
this.hasSubscribedToMessage = true;
|
|
291
296
|
},
|
|
292
297
|
/**
|
|
293
298
|
* Sets up a listener for roster messags from mecury
|
|
@@ -1041,7 +1046,7 @@ var Breakouts = _webexCore.WebexPlugin.extend({
|
|
|
1041
1046
|
this.trigger(_constants.BREAKOUTS.EVENTS.ASK_RETURN_TO_MAIN);
|
|
1042
1047
|
}
|
|
1043
1048
|
},
|
|
1044
|
-
version: "3.3.1-next.
|
|
1049
|
+
version: "3.3.1-next.20"
|
|
1045
1050
|
});
|
|
1046
1051
|
var _default = exports.default = Breakouts;
|
|
1047
1052
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_webexCore","require","_lodash","_loggerProxy","_interopRequireDefault","_constants","_breakout","_collection","_request","_events","_utils","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","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","manageGroups","preAssignments","editLock","intervalID","meetingId","canManageBreakouts","children","currentBreakoutSession","Breakout","derived","isInMainSession","cache","deps","fn","BREAKOUTS","SESSION_TYPES","MAIN","isActiveBreakout","BREAKOUT","STATUS","OPEN","CLOSING","breakoutGroupId","_this$manageGroups","CLOSED","id","breakoutStatus","_this$groups","_this$groups$","shouldQueryPreAssignments","initialize","_this","listenTo","trigger","EVENTS","BREAKOUTS_CLOSING","queryPreAssignments","debouncedQueryRosters","debounce","queryRosters","leading","trailing","breakout","triggerReturnToMainEvent","listenToCurrentSessionTypeChange","listenToBroadcastMessages","listenToBreakoutRosters","listenToBreakoutHelp","webex","cleanUp","stopListening","locusUrlUpdate","set","updateCanManageBreakouts","breakoutServiceUrlUpdate","concat","_this2","request","uri","qs","btoa","then","result","rosters","body","_ref","locus","handleRosterUpdate","MEMBERS_UPDATE","catch","error","LoggerProxy","logger","_locus$controls","_locus$controls$break","controls","session","get","parseRoster","_this3","isSessionTypeChangedFromSessionToMain","LEAVE_BREAKOUT","_this4","internal","llm","event","_event$data","data","senderUserId","sentTime","message","MESSAGE","_this5","mercury","_this6","_event$data2","participant","ASK_FOR_HELP","isBreakoutInProgress","_this$groups2","_this$groups2$","currentStatus","isBreakoutIClosing","_this$groups3","_this$groups3$","updateBreakout","params","current","SESSION_STATES","ACTIVE","ALLOWED","ASSIGNED","ASSIGNED_CURRENT","REQUESTED","clearBreakouts","previous","meeting","meetings","getMeetingByType","_ID_","breakoutEvent","onBreakoutJoinResponse","currentSession","breakoutMoveId","newMetrics","submitClientEvent","bind","updateBreakoutSessions","payload","_this7","breakoutSessions","state","requestedLastModifiedTime","modifiedAt","_values","reset","getMainSession","mainSession","isMain","Error","askAllToReturn","method","HTTP_VERBS","POST","broadcast","options","enableBreakouts","err","_promise","reject","toggleBreakout","enable","_this8","_asyncToGenerator2","_regenerator","mark","_callee","info","wrap","_callee$","_context","prev","next","undefined","sent","doToggleBreakout","stop","token","editlock","PUT","_setManageGroups","breakoutInfo","_breakoutInfo$body","create","_this9","_callee2","_callee2$","_context2","boServiceErrorHandler","_clearEditLockInfo","abrupt","clearSessions","_this10","_callee3","_callee3$","_context3","action","ACTION","DELETE","start","_arguments","_this11","_callee4","_callee4$","_context4","START","allowToJoinLater","refresh","end","_arguments2","_this12","_callee5","_callee5$","_context5","CLOSE","update","unlockEdit","_this13","_callee6","_this13$editLock","_callee6$","_context6","getBreakout","_this14","_callee7","_breakout$body","_breakout$body$editlo","_callee7$","_context7","GET","keepEditLockAlive","enableAndLockBreakout","_this15","_callee8","_callee8$","_context8","lockBreakout","hasBreakoutLocked","EDIT_LOCK_STATUS","LOCKED","_this16","_callee9","_breakout$body2","_callee9$","_context9","_this17","ttl","DEFAULT_TTL","window","clearInterval","setInterval","unLockEditBreakout","_this18","assign","sessions","internalSessions","map","item","assigned","memberIds","assignedEmails","emails","anyoneCanJoin","anyone","_this19","_result$body","PRE_ASSIGNMENTS_UPDATE","dynamicAssign","updatedSessions","participants","targetState","requested","ASK_RETURN_TO_MAIN","version","_default","exports"],"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, _ID_} from '../constants';\n\nimport Breakout from './breakout';\nimport BreakoutCollection from './collection';\nimport BreakoutRequest from './request';\nimport breakoutEvent from './events';\nimport {boServiceErrorHandler, isSessionTypeChangedFromSessionToMain} 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 manageGroups: 'array', // appears when manage breakouts\n preAssignments: 'array', // appears when getPreAssignments info hasBreakoutPreAssignments = true\n editLock: 'object', // appears when getBreakout info editlock = true\n intervalID: 'number',\n meetingId: 'string',\n canManageBreakouts: 'boolean', // appear the ability to manage breakouts\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: ['manageGroups'],\n /**\n * Returns the active group id\n * @returns {boolean}\n */\n fn() {\n if (this.manageGroups?.length) {\n return this.manageGroups[0].status !== BREAKOUTS.STATUS.CLOSED\n ? this.manageGroups[0].id\n : '';\n }\n\n return '';\n },\n },\n breakoutStatus: {\n cache: true,\n deps: ['isInMainSession', 'status', 'groups'],\n /**\n * Returns the breakout status\n * @returns {boolean}\n */\n fn() {\n return this.isInMainSession ? this.groups?.[0]?.status : this.status;\n },\n },\n shouldQueryPreAssignments: {\n cache: false,\n deps: ['canManageBreakouts', 'enableBreakoutSession', 'hasBreakoutPreAssignments'],\n /**\n * Returns should query preAssignments or not\n * @returns {boolean}\n */\n fn() {\n return !!(\n this.canManageBreakouts &&\n this.enableBreakoutSession &&\n this.hasBreakoutPreAssignments\n );\n },\n },\n },\n\n /**\n * initialize for the breakouts\n * @returns {void}\n */\n initialize() {\n this.listenTo(this, 'change:breakoutStatus', () => {\n if (this.breakoutStatus === BREAKOUTS.STATUS.CLOSING) {\n this.trigger(BREAKOUTS.EVENTS.BREAKOUTS_CLOSING);\n }\n });\n this.listenTo(this, 'change:shouldQueryPreAssignments', () => {\n if (this.shouldQueryPreAssignments && !this.preAssignments) {\n this.queryPreAssignments();\n }\n });\n this.debouncedQueryRosters = debounce(this.queryRosters, 10, {\n leading: true,\n trailing: false,\n });\n this.listenTo(this.breakouts, 'add', (breakout) => {\n this.debouncedQueryRosters();\n this.triggerReturnToMainEvent(breakout);\n });\n this.listenTo(this.breakouts, 'change:requestedLastModifiedTime', (breakout) => {\n this.triggerReturnToMainEvent(breakout);\n });\n this.listenToCurrentSessionTypeChange();\n this.listenToBroadcastMessages();\n this.listenToBreakoutRosters();\n this.listenToBreakoutHelp();\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 whether self is moderator/cohost or not\n * @param {boolean} canManageBreakouts\n * @returns {void}\n */\n updateCanManageBreakouts(canManageBreakouts) {\n this.set('canManageBreakouts', canManageBreakouts);\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 *Sets up listener for currentBreakoutSession sessionType changed\n * @returns {void}\n */\n listenToCurrentSessionTypeChange(): void {\n this.listenTo(\n this.currentBreakoutSession,\n 'change:sessionType',\n (currentBreakoutSession, sessionType) => {\n if (isSessionTypeChangedFromSessionToMain(currentBreakoutSession, sessionType)) {\n this.trigger(BREAKOUTS.EVENTS.LEAVE_BREAKOUT);\n }\n }\n );\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 * Sets up a listener for ask help notify from mecury\n * @returns {void}\n */\n listenToBreakoutHelp() {\n this.listenTo(this.webex.internal.mercury, 'event:breakout.help', (event) => {\n const {\n data: {participant, sessionId},\n } = event;\n this.trigger(BREAKOUTS.EVENTS.ASK_FOR_HELP, {participant, sessionId});\n });\n },\n\n /**\n * get current breakout is in progress or not\n * @returns {boolean}\n */\n isBreakoutInProgress() {\n const currentStatus = this.groups?.[0]?.status || this.status;\n\n return currentStatus === BREAKOUTS.STATUS.OPEN || currentStatus === BREAKOUTS.STATUS.CLOSING;\n },\n\n /**\n * get current breakout is in closing or not\n * @returns {boolean}\n */\n isBreakoutIClosing() {\n return (this.groups?.[0]?.status || this.status) === BREAKOUTS.STATUS.CLOSING;\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 // These values are set manually so they are unset when they are not included in params\n this.set('groups', params.groups);\n this.set('startTime', params.startTime);\n this.set('status', params.status);\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.ASSIGNED]: false,\n [BREAKOUTS.SESSION_STATES.ASSIGNED_CURRENT]: false,\n [BREAKOUTS.SESSION_STATES.REQUESTED]: false,\n });\n\n if (!this.isBreakoutInProgress()) {\n this.clearBreakouts();\n }\n\n if (\n this.currentBreakoutSession.previous('sessionId') !== this.currentBreakoutSession.sessionId ||\n this.currentBreakoutSession.previous('groupId') !== this.currentBreakoutSession.groupId\n ) {\n // should report joined session changed\n const meeting = this.webex.meetings.getMeetingByType(_ID_, this.meetingId);\n breakoutEvent.onBreakoutJoinResponse(\n {\n currentSession: this.currentBreakoutSession,\n meeting,\n breakoutMoveId: params.breakoutMoveId,\n },\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent.bind(this.webex.internal.newMetrics)\n );\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 if (this.isBreakoutIClosing()) {\n // fix issue: don't clear/update breakouts collection when in closing since locus DTO will send undefined or\n // only the MAIN session info here, if just update it, will miss the breakout roster info during\n // count down to end breakouts\n return;\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 if (state === BREAKOUTS.SESSION_STATES.REQUESTED) {\n breakouts[sessionId].requestedLastModifiedTime = breakout.modifiedAt;\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 * clear breakouts collection\n * @returns {void}\n */\n clearBreakouts() {\n if (this.breakouts.length > 0) {\n this.breakouts.reset();\n }\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 // first time enable, set the initial data\n this.updateBreakout(info?.body);\n if (!enable) {\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 * set groups to manageGroups prop\n * @param {Object} breakoutInfo -- breakout groups\n * @returns {void}\n */\n _setManageGroups(breakoutInfo) {\n if (breakoutInfo?.body?.groups) {\n this.set('manageGroups', breakoutInfo.body.groups);\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 breakoutInfo = 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 this._setManageGroups(breakoutInfo);\n\n // clear edit lock info after save breakout session info\n this._clearEditLockInfo();\n\n return breakoutInfo;\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 breakoutInfo = 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 this._setManageGroups(breakoutInfo);\n\n return breakoutInfo;\n },\n\n /**\n * Host or cohost starts breakout sessions\n * @param {object} params\n * @returns {Promise}\n */\n async start(params = {}) {\n const action = BREAKOUTS.ACTION.START;\n const payload = {\n id: this.breakoutGroupId,\n action,\n allowBackToMain: false,\n allowToJoinLater: false,\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 const breakoutInfo = await 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 this._setManageGroups(breakoutInfo);\n\n return breakoutInfo;\n },\n\n /**\n * Host or cohost ends breakout sessions\n * @param {object} params\n * @returns {Promise}\n */\n async 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 const breakoutInfo = await 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 this._setManageGroups(breakoutInfo);\n\n return breakoutInfo;\n },\n\n /**\n * Host or cohost update breakout sessions\n * @param {Object} params\n * @param {String} params.id\n * @param {Boolean} unlockEdit\n * @returns {Promise}\n */\n async update(params: {id: string}, unlockEdit?: boolean) {\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\n ? {editlock: {token: this.editLock.token, refresh: !unlockEdit}}\n : {}),\n ...{groups: [payload]},\n };\n\n const breakoutInfo = await 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 if (unlockEdit) {\n this._clearEditLockInfo();\n }\n\n this._setManageGroups(breakoutInfo);\n\n return breakoutInfo;\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 this._setManageGroups(breakout);\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 * breakout edit locked by yourself or not\n * @returns {boolean}\n */\n hasBreakoutLocked() {\n return (\n this.editLock &&\n this.editLock.token &&\n this.editLock.state === BREAKOUTS.EDIT_LOCK_STATUS.LOCKED\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 * query preAssignments\n * @returns {void}\n */\n queryPreAssignments() {\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('preAssignments', result.body.groups);\n this.trigger(BREAKOUTS.EVENTS.PRE_ASSIGNMENTS_UPDATE);\n }\n })\n .catch((error) => {\n LoggerProxy.logger.error('Meeting:breakouts#queryPreAssignments failed', error);\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 * trigger ASK_RETURN_TO_MAIN event when main session requested\n * @param {Object} breakout\n * @returns {void}\n */\n triggerReturnToMainEvent(breakout) {\n if (breakout.isMain && breakout.requested) {\n this.trigger(BREAKOUTS.EVENTS.ASK_RETURN_TO_MAIN);\n }\n },\n});\n\nexport default Breakouts;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_webexCore","require","_lodash","_loggerProxy","_interopRequireDefault","_constants","_breakout","_collection","_request","_events","_utils","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","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","manageGroups","preAssignments","editLock","intervalID","meetingId","canManageBreakouts","children","currentBreakoutSession","Breakout","derived","isInMainSession","cache","deps","fn","BREAKOUTS","SESSION_TYPES","MAIN","isActiveBreakout","BREAKOUT","STATUS","OPEN","CLOSING","breakoutGroupId","_this$manageGroups","CLOSED","id","breakoutStatus","_this$groups","_this$groups$","shouldQueryPreAssignments","initialize","_this","listenTo","trigger","EVENTS","BREAKOUTS_CLOSING","queryPreAssignments","debouncedQueryRosters","debounce","queryRosters","leading","trailing","breakout","triggerReturnToMainEvent","listenToCurrentSessionTypeChange","listenToBreakoutRosters","listenToBreakoutHelp","webex","cleanUp","stopListening","hasSubscribedToMessage","undefined","locusUrlUpdate","set","listenToBroadcastMessages","updateCanManageBreakouts","breakoutServiceUrlUpdate","concat","_this2","request","uri","qs","btoa","then","result","rosters","body","_ref","locus","handleRosterUpdate","MEMBERS_UPDATE","catch","error","LoggerProxy","logger","_locus$controls","_locus$controls$break","controls","session","get","parseRoster","_this3","isSessionTypeChangedFromSessionToMain","LEAVE_BREAKOUT","_this4","internal","llm","isConnected","event","_event$data","data","senderUserId","sentTime","message","MESSAGE","_this5","mercury","_this6","_event$data2","participant","ASK_FOR_HELP","isBreakoutInProgress","_this$groups2","_this$groups2$","currentStatus","isBreakoutIClosing","_this$groups3","_this$groups3$","updateBreakout","params","current","SESSION_STATES","ACTIVE","ALLOWED","ASSIGNED","ASSIGNED_CURRENT","REQUESTED","clearBreakouts","previous","meeting","meetings","getMeetingByType","_ID_","breakoutEvent","onBreakoutJoinResponse","currentSession","breakoutMoveId","newMetrics","submitClientEvent","bind","updateBreakoutSessions","payload","_this7","breakoutSessions","state","requestedLastModifiedTime","modifiedAt","_values","reset","getMainSession","mainSession","isMain","Error","askAllToReturn","method","HTTP_VERBS","POST","broadcast","options","enableBreakouts","err","_promise","reject","toggleBreakout","enable","_this8","_asyncToGenerator2","_regenerator","mark","_callee","info","wrap","_callee$","_context","prev","next","sent","doToggleBreakout","stop","token","editlock","PUT","_setManageGroups","breakoutInfo","_breakoutInfo$body","create","_this9","_callee2","_callee2$","_context2","boServiceErrorHandler","_clearEditLockInfo","abrupt","clearSessions","_this10","_callee3","_callee3$","_context3","action","ACTION","DELETE","start","_arguments","_this11","_callee4","_callee4$","_context4","START","allowToJoinLater","refresh","end","_arguments2","_this12","_callee5","_callee5$","_context5","CLOSE","update","unlockEdit","_this13","_callee6","_this13$editLock","_callee6$","_context6","getBreakout","_this14","_callee7","_breakout$body","_breakout$body$editlo","_callee7$","_context7","GET","keepEditLockAlive","enableAndLockBreakout","_this15","_callee8","_callee8$","_context8","lockBreakout","hasBreakoutLocked","EDIT_LOCK_STATUS","LOCKED","_this16","_callee9","_breakout$body2","_callee9$","_context9","_this17","ttl","DEFAULT_TTL","window","clearInterval","setInterval","unLockEditBreakout","_this18","assign","sessions","internalSessions","map","item","assigned","memberIds","assignedEmails","emails","anyoneCanJoin","anyone","_this19","_result$body","PRE_ASSIGNMENTS_UPDATE","dynamicAssign","updatedSessions","participants","targetState","requested","ASK_RETURN_TO_MAIN","version","_default","exports"],"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, _ID_} from '../constants';\n\nimport Breakout from './breakout';\nimport BreakoutCollection from './collection';\nimport BreakoutRequest from './request';\nimport breakoutEvent from './events';\nimport {boServiceErrorHandler, isSessionTypeChangedFromSessionToMain} 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 manageGroups: 'array', // appears when manage breakouts\n preAssignments: 'array', // appears when getPreAssignments info hasBreakoutPreAssignments = true\n editLock: 'object', // appears when getBreakout info editlock = true\n intervalID: 'number',\n meetingId: 'string',\n canManageBreakouts: 'boolean', // appear the ability to manage breakouts\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: ['manageGroups'],\n /**\n * Returns the active group id\n * @returns {boolean}\n */\n fn() {\n if (this.manageGroups?.length) {\n return this.manageGroups[0].status !== BREAKOUTS.STATUS.CLOSED\n ? this.manageGroups[0].id\n : '';\n }\n\n return '';\n },\n },\n breakoutStatus: {\n cache: true,\n deps: ['isInMainSession', 'status', 'groups'],\n /**\n * Returns the breakout status\n * @returns {boolean}\n */\n fn() {\n return this.isInMainSession ? this.groups?.[0]?.status : this.status;\n },\n },\n shouldQueryPreAssignments: {\n cache: false,\n deps: ['canManageBreakouts', 'enableBreakoutSession', 'hasBreakoutPreAssignments'],\n /**\n * Returns should query preAssignments or not\n * @returns {boolean}\n */\n fn() {\n return !!(\n this.canManageBreakouts &&\n this.enableBreakoutSession &&\n this.hasBreakoutPreAssignments\n );\n },\n },\n },\n\n /**\n * initialize for the breakouts\n * @returns {void}\n */\n initialize() {\n this.listenTo(this, 'change:breakoutStatus', () => {\n if (this.breakoutStatus === BREAKOUTS.STATUS.CLOSING) {\n this.trigger(BREAKOUTS.EVENTS.BREAKOUTS_CLOSING);\n }\n });\n this.listenTo(this, 'change:shouldQueryPreAssignments', () => {\n if (this.shouldQueryPreAssignments && !this.preAssignments) {\n this.queryPreAssignments();\n }\n });\n this.debouncedQueryRosters = debounce(this.queryRosters, 10, {\n leading: true,\n trailing: false,\n });\n this.listenTo(this.breakouts, 'add', (breakout) => {\n this.debouncedQueryRosters();\n this.triggerReturnToMainEvent(breakout);\n });\n this.listenTo(this.breakouts, 'change:requestedLastModifiedTime', (breakout) => {\n this.triggerReturnToMainEvent(breakout);\n });\n this.listenToCurrentSessionTypeChange();\n this.listenToBreakoutRosters();\n this.listenToBreakoutHelp();\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 this.hasSubscribedToMessage = undefined;\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 this.listenToBroadcastMessages();\n const {isInMainSession, mainLocusUrl} = this;\n if (isInMainSession || !mainLocusUrl) {\n this.set('mainLocusUrl', locusUrl);\n }\n },\n\n /**\n * Update whether self is moderator/cohost or not\n * @param {boolean} canManageBreakouts\n * @returns {void}\n */\n updateCanManageBreakouts(canManageBreakouts) {\n this.set('canManageBreakouts', canManageBreakouts);\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 *Sets up listener for currentBreakoutSession sessionType changed\n * @returns {void}\n */\n listenToCurrentSessionTypeChange(): void {\n this.listenTo(\n this.currentBreakoutSession,\n 'change:sessionType',\n (currentBreakoutSession, sessionType) => {\n if (isSessionTypeChangedFromSessionToMain(currentBreakoutSession, sessionType)) {\n this.trigger(BREAKOUTS.EVENTS.LEAVE_BREAKOUT);\n }\n }\n );\n },\n\n /**\n * Sets up listener for broadcast messages sent to the breakout session\n * @returns {void}\n */\n listenToBroadcastMessages() {\n if (!this.webex.internal.llm.isConnected() || this.hasSubscribedToMessage) {\n return;\n }\n\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 this.hasSubscribedToMessage = true;\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 * Sets up a listener for ask help notify from mecury\n * @returns {void}\n */\n listenToBreakoutHelp() {\n this.listenTo(this.webex.internal.mercury, 'event:breakout.help', (event) => {\n const {\n data: {participant, sessionId},\n } = event;\n this.trigger(BREAKOUTS.EVENTS.ASK_FOR_HELP, {participant, sessionId});\n });\n },\n\n /**\n * get current breakout is in progress or not\n * @returns {boolean}\n */\n isBreakoutInProgress() {\n const currentStatus = this.groups?.[0]?.status || this.status;\n\n return currentStatus === BREAKOUTS.STATUS.OPEN || currentStatus === BREAKOUTS.STATUS.CLOSING;\n },\n\n /**\n * get current breakout is in closing or not\n * @returns {boolean}\n */\n isBreakoutIClosing() {\n return (this.groups?.[0]?.status || this.status) === BREAKOUTS.STATUS.CLOSING;\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 // These values are set manually so they are unset when they are not included in params\n this.set('groups', params.groups);\n this.set('startTime', params.startTime);\n this.set('status', params.status);\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.ASSIGNED]: false,\n [BREAKOUTS.SESSION_STATES.ASSIGNED_CURRENT]: false,\n [BREAKOUTS.SESSION_STATES.REQUESTED]: false,\n });\n\n if (!this.isBreakoutInProgress()) {\n this.clearBreakouts();\n }\n\n if (\n this.currentBreakoutSession.previous('sessionId') !== this.currentBreakoutSession.sessionId ||\n this.currentBreakoutSession.previous('groupId') !== this.currentBreakoutSession.groupId\n ) {\n // should report joined session changed\n const meeting = this.webex.meetings.getMeetingByType(_ID_, this.meetingId);\n breakoutEvent.onBreakoutJoinResponse(\n {\n currentSession: this.currentBreakoutSession,\n meeting,\n breakoutMoveId: params.breakoutMoveId,\n },\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent.bind(this.webex.internal.newMetrics)\n );\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 if (this.isBreakoutIClosing()) {\n // fix issue: don't clear/update breakouts collection when in closing since locus DTO will send undefined or\n // only the MAIN session info here, if just update it, will miss the breakout roster info during\n // count down to end breakouts\n return;\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 if (state === BREAKOUTS.SESSION_STATES.REQUESTED) {\n breakouts[sessionId].requestedLastModifiedTime = breakout.modifiedAt;\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 * clear breakouts collection\n * @returns {void}\n */\n clearBreakouts() {\n if (this.breakouts.length > 0) {\n this.breakouts.reset();\n }\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 // first time enable, set the initial data\n this.updateBreakout(info?.body);\n if (!enable) {\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 * set groups to manageGroups prop\n * @param {Object} breakoutInfo -- breakout groups\n * @returns {void}\n */\n _setManageGroups(breakoutInfo) {\n if (breakoutInfo?.body?.groups) {\n this.set('manageGroups', breakoutInfo.body.groups);\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 breakoutInfo = 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 this._setManageGroups(breakoutInfo);\n\n // clear edit lock info after save breakout session info\n this._clearEditLockInfo();\n\n return breakoutInfo;\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 breakoutInfo = 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 this._setManageGroups(breakoutInfo);\n\n return breakoutInfo;\n },\n\n /**\n * Host or cohost starts breakout sessions\n * @param {object} params\n * @returns {Promise}\n */\n async start(params = {}) {\n const action = BREAKOUTS.ACTION.START;\n const payload = {\n id: this.breakoutGroupId,\n action,\n allowBackToMain: false,\n allowToJoinLater: false,\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 const breakoutInfo = await 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 this._setManageGroups(breakoutInfo);\n\n return breakoutInfo;\n },\n\n /**\n * Host or cohost ends breakout sessions\n * @param {object} params\n * @returns {Promise}\n */\n async 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 const breakoutInfo = await 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 this._setManageGroups(breakoutInfo);\n\n return breakoutInfo;\n },\n\n /**\n * Host or cohost update breakout sessions\n * @param {Object} params\n * @param {String} params.id\n * @param {Boolean} unlockEdit\n * @returns {Promise}\n */\n async update(params: {id: string}, unlockEdit?: boolean) {\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\n ? {editlock: {token: this.editLock.token, refresh: !unlockEdit}}\n : {}),\n ...{groups: [payload]},\n };\n\n const breakoutInfo = await 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 if (unlockEdit) {\n this._clearEditLockInfo();\n }\n\n this._setManageGroups(breakoutInfo);\n\n return breakoutInfo;\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 this._setManageGroups(breakout);\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 * breakout edit locked by yourself or not\n * @returns {boolean}\n */\n hasBreakoutLocked() {\n return (\n this.editLock &&\n this.editLock.token &&\n this.editLock.state === BREAKOUTS.EDIT_LOCK_STATUS.LOCKED\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 * query preAssignments\n * @returns {void}\n */\n queryPreAssignments() {\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('preAssignments', result.body.groups);\n this.trigger(BREAKOUTS.EVENTS.PRE_ASSIGNMENTS_UPDATE);\n }\n })\n .catch((error) => {\n LoggerProxy.logger.error('Meeting:breakouts#queryPreAssignments failed', error);\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 * trigger ASK_RETURN_TO_MAIN event when main session requested\n * @param {Object} breakout\n * @returns {void}\n */\n triggerReturnToMainEvent(breakout) {\n if (breakout.isMain && breakout.requested) {\n this.trigger(BREAKOUTS.EVENTS.ASK_RETURN_TO_MAIN);\n }\n },\n});\n\nexport default Breakouts;\n"],"mappings":"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"}
|
|
@@ -373,7 +373,7 @@ var SimultaneousInterpretation = _webexCore.WebexPlugin.extend({
|
|
|
373
373
|
throw error;
|
|
374
374
|
});
|
|
375
375
|
},
|
|
376
|
-
version: "3.3.1-next.
|
|
376
|
+
version: "3.3.1-next.20"
|
|
377
377
|
});
|
|
378
378
|
var _default = exports.default = SimultaneousInterpretation;
|
|
379
379
|
//# sourceMappingURL=index.js.map
|
|
@@ -28,15 +28,19 @@ var MediaConnectionAwaiter = exports.default = /*#__PURE__*/function () {
|
|
|
28
28
|
(0, _defineProperty2.default)(this, "timer", void 0);
|
|
29
29
|
(0, _defineProperty2.default)(this, "defer", void 0);
|
|
30
30
|
(0, _defineProperty2.default)(this, "retried", void 0);
|
|
31
|
+
(0, _defineProperty2.default)(this, "iceConnected", void 0);
|
|
31
32
|
(0, _defineProperty2.default)(this, "onTimeoutCallback", void 0);
|
|
32
|
-
(0, _defineProperty2.default)(this, "
|
|
33
|
+
(0, _defineProperty2.default)(this, "peerConnectionStateCallback", void 0);
|
|
34
|
+
(0, _defineProperty2.default)(this, "iceConnectionStateCallback", void 0);
|
|
33
35
|
(0, _defineProperty2.default)(this, "iceGatheringStateCallback", void 0);
|
|
34
36
|
this.webrtcMediaConnection = webrtcMediaConnection;
|
|
35
37
|
this.defer = new _common.Defer();
|
|
36
38
|
this.retried = false;
|
|
39
|
+
this.iceConnected = false;
|
|
37
40
|
this.onTimeoutCallback = this.onTimeout.bind(this);
|
|
38
|
-
this.
|
|
39
|
-
this.
|
|
41
|
+
this.peerConnectionStateCallback = this.peerConnectionStateHandler.bind(this);
|
|
42
|
+
this.iceConnectionStateCallback = this.iceConnectionStateHandler.bind(this);
|
|
43
|
+
this.iceGatheringStateCallback = this.iceGatheringStateHandler.bind(this);
|
|
40
44
|
}
|
|
41
45
|
|
|
42
46
|
/**
|
|
@@ -70,18 +74,19 @@ var MediaConnectionAwaiter = exports.default = /*#__PURE__*/function () {
|
|
|
70
74
|
key: "clearCallbacks",
|
|
71
75
|
value: function clearCallbacks() {
|
|
72
76
|
this.webrtcMediaConnection.off(_internalMediaCore.Event.ICE_GATHERING_STATE_CHANGED, this.iceGatheringStateCallback);
|
|
73
|
-
this.webrtcMediaConnection.off(_internalMediaCore.Event.
|
|
77
|
+
this.webrtcMediaConnection.off(_internalMediaCore.Event.PEER_CONNECTION_STATE_CHANGED, this.peerConnectionStateCallback);
|
|
78
|
+
this.webrtcMediaConnection.off(_internalMediaCore.Event.ICE_CONNECTION_STATE_CHANGED, this.iceConnectionStateCallback);
|
|
74
79
|
}
|
|
75
80
|
|
|
76
81
|
/**
|
|
77
|
-
*
|
|
82
|
+
* On connection state change.
|
|
78
83
|
*
|
|
79
84
|
* @returns {void}
|
|
80
85
|
*/
|
|
81
86
|
}, {
|
|
82
|
-
key: "
|
|
83
|
-
value: function
|
|
84
|
-
_loggerProxy.default.logger.log("Media:MediaConnectionAwaiter#
|
|
87
|
+
key: "connectionStateChange",
|
|
88
|
+
value: function connectionStateChange() {
|
|
89
|
+
_loggerProxy.default.logger.log("Media:MediaConnectionAwaiter#connectionStateChange --> connection state: ".concat(this.webrtcMediaConnection.getConnectionState()));
|
|
85
90
|
if (!this.isConnected()) {
|
|
86
91
|
return;
|
|
87
92
|
}
|
|
@@ -90,16 +95,45 @@ var MediaConnectionAwaiter = exports.default = /*#__PURE__*/function () {
|
|
|
90
95
|
this.defer.resolve();
|
|
91
96
|
}
|
|
92
97
|
|
|
98
|
+
/**
|
|
99
|
+
* Listener for peer connection state change.
|
|
100
|
+
*
|
|
101
|
+
* @returns {void}
|
|
102
|
+
*/
|
|
103
|
+
}, {
|
|
104
|
+
key: "peerConnectionStateHandler",
|
|
105
|
+
value: function peerConnectionStateHandler() {
|
|
106
|
+
var peerConnectionState = this.webrtcMediaConnection.getPeerConnectionState();
|
|
107
|
+
_loggerProxy.default.logger.log("Media:MediaConnectionAwaiter#peerConnectionStateHandler --> Peer connection state change -> ".concat(peerConnectionState));
|
|
108
|
+
this.connectionStateChange();
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Listener for ICE connection state change.
|
|
113
|
+
*
|
|
114
|
+
* @returns {void}
|
|
115
|
+
*/
|
|
116
|
+
}, {
|
|
117
|
+
key: "iceConnectionStateHandler",
|
|
118
|
+
value: function iceConnectionStateHandler() {
|
|
119
|
+
var iceConnectionState = this.webrtcMediaConnection.getIceConnectionState();
|
|
120
|
+
_loggerProxy.default.logger.log("Media:MediaConnectionAwaiter#iceConnectionStateHandler --> ICE connection state change -> ".concat(iceConnectionState));
|
|
121
|
+
if (iceConnectionState === 'connected' && !this.iceConnected) {
|
|
122
|
+
this.iceConnected = true;
|
|
123
|
+
}
|
|
124
|
+
this.connectionStateChange();
|
|
125
|
+
}
|
|
126
|
+
|
|
93
127
|
/**
|
|
94
128
|
* Listener for ICE gathering state change.
|
|
95
129
|
*
|
|
96
130
|
* @returns {void}
|
|
97
131
|
*/
|
|
98
132
|
}, {
|
|
99
|
-
key: "
|
|
100
|
-
value: function
|
|
133
|
+
key: "iceGatheringStateHandler",
|
|
134
|
+
value: function iceGatheringStateHandler() {
|
|
101
135
|
var iceGatheringState = this.webrtcMediaConnection.getIceGatheringState();
|
|
102
|
-
_loggerProxy.default.logger.log("Media:MediaConnectionAwaiter#
|
|
136
|
+
_loggerProxy.default.logger.log("Media:MediaConnectionAwaiter#iceGatheringStateHandler --> ICE gathering state change -> ".concat(iceGatheringState));
|
|
103
137
|
if (!this.isIceGatheringCompleted()) {
|
|
104
138
|
return;
|
|
105
139
|
}
|
|
@@ -138,7 +172,9 @@ var MediaConnectionAwaiter = exports.default = /*#__PURE__*/function () {
|
|
|
138
172
|
_loggerProxy.default.logger.warn('Media:MediaConnectionAwaiter#onTimeout --> ICE gathering completed, but connection state is not connected, rejecting');
|
|
139
173
|
}
|
|
140
174
|
this.clearCallbacks();
|
|
141
|
-
this.defer.reject(
|
|
175
|
+
this.defer.reject({
|
|
176
|
+
iceConnected: this.iceConnected
|
|
177
|
+
});
|
|
142
178
|
}
|
|
143
179
|
|
|
144
180
|
/**
|
|
@@ -152,7 +188,8 @@ var MediaConnectionAwaiter = exports.default = /*#__PURE__*/function () {
|
|
|
152
188
|
if (this.isConnected()) {
|
|
153
189
|
return _promise.default.resolve();
|
|
154
190
|
}
|
|
155
|
-
this.webrtcMediaConnection.on(_internalMediaCore.Event.
|
|
191
|
+
this.webrtcMediaConnection.on(_internalMediaCore.Event.PEER_CONNECTION_STATE_CHANGED, this.peerConnectionStateCallback);
|
|
192
|
+
this.webrtcMediaConnection.on(_internalMediaCore.Event.ICE_CONNECTION_STATE_CHANGED, this.iceConnectionStateCallback);
|
|
156
193
|
this.webrtcMediaConnection.on(_internalMediaCore.Event.ICE_GATHERING_STATE_CHANGED, this.iceGatheringStateCallback);
|
|
157
194
|
this.timer = setTimeout(this.onTimeoutCallback, _constants.ICE_AND_DTLS_CONNECTION_TIMEOUT);
|
|
158
195
|
return this.defer.promise;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_common","require","_internalMediaCore","_loggerProxy","_interopRequireDefault","_constants","MediaConnectionAwaiter","exports","default","_ref","webrtcMediaConnection","_classCallCheck2","_defineProperty2","defer","Defer","retried","onTimeoutCallback","onTimeout","bind","connectionStateCallback","connectionStateListenerCallback","iceGatheringStateCallback","iceGatheringStateListenerCallback","_createClass2","key","value","isConnected","getConnectionState","ConnectionState","Connected","isIceGatheringCompleted","getIceGatheringState","clearCallbacks","off","Event","ICE_GATHERING_STATE_CHANGED","CONNECTION_STATE_CHANGED","LoggerProxy","logger","log","concat","clearTimeout","timer","resolve","iceGatheringState","setTimeout","ICE_AND_DTLS_CONNECTION_TIMEOUT","warn","reject","waitForMediaConnectionConnected","_promise","on","promise"],"sources":["MediaConnectionAwaiter.ts"],"sourcesContent":["import {Defer} from '@webex/common';\nimport {ConnectionState, Event} from '@webex/internal-media-core';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {ICE_AND_DTLS_CONNECTION_TIMEOUT} from '../constants';\n\nexport interface MediaConnectionAwaiterProps {\n webrtcMediaConnection: any;\n}\n\n/**\n * @class MediaConnectionAwaiter\n */\nexport default class MediaConnectionAwaiter {\n private webrtcMediaConnection: any;\n private timer: any;\n private defer: Defer;\n private retried: boolean;\n private onTimeoutCallback: () => void;\n private connectionStateCallback: () => void;\n private iceGatheringStateCallback: () => void;\n\n /**\n * @param {MediaConnectionAwaiterProps} mediaConnectionAwaiterProps\n */\n constructor({webrtcMediaConnection}: MediaConnectionAwaiterProps) {\n this.webrtcMediaConnection = webrtcMediaConnection;\n this.defer = new Defer();\n this.retried = false;\n this.onTimeoutCallback = this.onTimeout.bind(this);\n this.connectionStateCallback = this.connectionStateListenerCallback.bind(this);\n this.iceGatheringStateCallback = this.iceGatheringStateListenerCallback.bind(this);\n }\n\n /**\n * Returns true if the connection is connected, false otherwise.\n *\n * @returns {boolean}\n */\n private isConnected(): boolean {\n return this.webrtcMediaConnection.getConnectionState() === ConnectionState.Connected;\n }\n\n /**\n * Returns true if the ICE Gathering is completed, false otherwise.\n *\n * @returns {boolean}\n */\n private isIceGatheringCompleted(): boolean {\n return this.webrtcMediaConnection.getIceGatheringState() === 'complete';\n }\n\n /**\n * Clears the callbacks.\n *\n * @returns {void}\n */\n private clearCallbacks(): void {\n this.webrtcMediaConnection.off(\n Event.ICE_GATHERING_STATE_CHANGED,\n this.iceGatheringStateCallback\n );\n this.webrtcMediaConnection.off(Event.CONNECTION_STATE_CHANGED, this.connectionStateCallback);\n }\n\n /**\n * Listener for connection state change.\n *\n * @returns {void}\n */\n connectionStateListenerCallback(): void {\n LoggerProxy.logger.log(\n `Media:MediaConnectionAwaiter#connectionStateListenerCallback --> connection state: ${this.webrtcMediaConnection.getConnectionState()}`\n );\n\n if (!this.isConnected()) {\n return;\n }\n\n clearTimeout(this.timer);\n\n this.clearCallbacks();\n\n this.defer.resolve();\n }\n\n /**\n * Listener for ICE gathering state change.\n *\n * @returns {void}\n */\n iceGatheringStateListenerCallback(): void {\n const iceGatheringState = this.webrtcMediaConnection.getIceGatheringState();\n\n LoggerProxy.logger.log(\n `Media:MediaConnectionAwaiter#iceGatheringStateListenerCallback --> ICE gathering state change -> ${iceGatheringState}`\n );\n\n if (!this.isIceGatheringCompleted()) {\n return;\n }\n\n if (this.isConnected()) {\n return;\n }\n\n clearTimeout(this.timer);\n\n this.timer = setTimeout(this.onTimeoutCallback, ICE_AND_DTLS_CONNECTION_TIMEOUT);\n }\n\n /**\n * Function called when the timeout is reached.\n *\n * @returns {void}\n */\n onTimeout(): void {\n if (this.isConnected()) {\n this.clearCallbacks();\n\n this.defer.resolve();\n\n return;\n }\n\n if (!this.isIceGatheringCompleted()) {\n if (!this.retried) {\n LoggerProxy.logger.warn(\n 'Media:MediaConnectionAwaiter#onTimeout --> ICE gathering did not complete within the timeout for the first time, retrying once'\n );\n\n // retry once if ICE gathering is not completed\n this.retried = true;\n clearTimeout(this.timer);\n this.timer = setTimeout(this.onTimeoutCallback, ICE_AND_DTLS_CONNECTION_TIMEOUT);\n\n return;\n }\n\n LoggerProxy.logger.warn(\n 'Media:MediaConnectionAwaiter#onTimeout --> ICE gathering did not complete within the timeout for the second time, rejecting'\n );\n } else {\n LoggerProxy.logger.warn(\n 'Media:MediaConnectionAwaiter#onTimeout --> ICE gathering completed, but connection state is not connected, rejecting'\n );\n }\n\n this.clearCallbacks();\n\n this.defer.reject();\n }\n\n /**\n * Waits for the webrtc media connection to be connected.\n *\n * @returns {Promise}\n */\n waitForMediaConnectionConnected(): Promise<void> {\n if (this.isConnected()) {\n return Promise.resolve();\n }\n\n this.webrtcMediaConnection.on(Event.CONNECTION_STATE_CHANGED, this.connectionStateCallback);\n\n this.webrtcMediaConnection.on(\n Event.ICE_GATHERING_STATE_CHANGED,\n this.iceGatheringStateCallback\n );\n\n this.timer = setTimeout(this.onTimeoutCallback, ICE_AND_DTLS_CONNECTION_TIMEOUT);\n\n return this.defer.promise;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_common","require","_internalMediaCore","_loggerProxy","_interopRequireDefault","_constants","MediaConnectionAwaiter","exports","default","_ref","webrtcMediaConnection","_classCallCheck2","_defineProperty2","defer","Defer","retried","iceConnected","onTimeoutCallback","onTimeout","bind","peerConnectionStateCallback","peerConnectionStateHandler","iceConnectionStateCallback","iceConnectionStateHandler","iceGatheringStateCallback","iceGatheringStateHandler","_createClass2","key","value","isConnected","getConnectionState","ConnectionState","Connected","isIceGatheringCompleted","getIceGatheringState","clearCallbacks","off","Event","ICE_GATHERING_STATE_CHANGED","PEER_CONNECTION_STATE_CHANGED","ICE_CONNECTION_STATE_CHANGED","connectionStateChange","LoggerProxy","logger","log","concat","clearTimeout","timer","resolve","peerConnectionState","getPeerConnectionState","iceConnectionState","getIceConnectionState","iceGatheringState","setTimeout","ICE_AND_DTLS_CONNECTION_TIMEOUT","warn","reject","waitForMediaConnectionConnected","_promise","on","promise"],"sources":["MediaConnectionAwaiter.ts"],"sourcesContent":["import {Defer} from '@webex/common';\nimport {ConnectionState, Event} from '@webex/internal-media-core';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {ICE_AND_DTLS_CONNECTION_TIMEOUT} from '../constants';\n\nexport interface MediaConnectionAwaiterProps {\n webrtcMediaConnection: any;\n}\n\n/**\n * @class MediaConnectionAwaiter\n */\nexport default class MediaConnectionAwaiter {\n private webrtcMediaConnection: any;\n private timer: any;\n private defer: Defer;\n private retried: boolean;\n private iceConnected: boolean;\n private onTimeoutCallback: () => void;\n private peerConnectionStateCallback: () => void;\n private iceConnectionStateCallback: () => void;\n private iceGatheringStateCallback: () => void;\n\n /**\n * @param {MediaConnectionAwaiterProps} mediaConnectionAwaiterProps\n */\n constructor({webrtcMediaConnection}: MediaConnectionAwaiterProps) {\n this.webrtcMediaConnection = webrtcMediaConnection;\n this.defer = new Defer();\n this.retried = false;\n this.iceConnected = false;\n this.onTimeoutCallback = this.onTimeout.bind(this);\n this.peerConnectionStateCallback = this.peerConnectionStateHandler.bind(this);\n this.iceConnectionStateCallback = this.iceConnectionStateHandler.bind(this);\n this.iceGatheringStateCallback = this.iceGatheringStateHandler.bind(this);\n }\n\n /**\n * Returns true if the connection is connected, false otherwise.\n *\n * @returns {boolean}\n */\n private isConnected(): boolean {\n return this.webrtcMediaConnection.getConnectionState() === ConnectionState.Connected;\n }\n\n /**\n * Returns true if the ICE Gathering is completed, false otherwise.\n *\n * @returns {boolean}\n */\n private isIceGatheringCompleted(): boolean {\n return this.webrtcMediaConnection.getIceGatheringState() === 'complete';\n }\n\n /**\n * Clears the callbacks.\n *\n * @returns {void}\n */\n private clearCallbacks(): void {\n this.webrtcMediaConnection.off(\n Event.ICE_GATHERING_STATE_CHANGED,\n this.iceGatheringStateCallback\n );\n this.webrtcMediaConnection.off(\n Event.PEER_CONNECTION_STATE_CHANGED,\n this.peerConnectionStateCallback\n );\n this.webrtcMediaConnection.off(\n Event.ICE_CONNECTION_STATE_CHANGED,\n this.iceConnectionStateCallback\n );\n }\n\n /**\n * On connection state change.\n *\n * @returns {void}\n */\n connectionStateChange(): void {\n LoggerProxy.logger.log(\n `Media:MediaConnectionAwaiter#connectionStateChange --> connection state: ${this.webrtcMediaConnection.getConnectionState()}`\n );\n\n if (!this.isConnected()) {\n return;\n }\n\n clearTimeout(this.timer);\n\n this.clearCallbacks();\n\n this.defer.resolve();\n }\n\n /**\n * Listener for peer connection state change.\n *\n * @returns {void}\n */\n peerConnectionStateHandler(): void {\n const peerConnectionState = this.webrtcMediaConnection.getPeerConnectionState();\n\n LoggerProxy.logger.log(\n `Media:MediaConnectionAwaiter#peerConnectionStateHandler --> Peer connection state change -> ${peerConnectionState}`\n );\n\n this.connectionStateChange();\n }\n\n /**\n * Listener for ICE connection state change.\n *\n * @returns {void}\n */\n iceConnectionStateHandler(): void {\n const iceConnectionState = this.webrtcMediaConnection.getIceConnectionState();\n\n LoggerProxy.logger.log(\n `Media:MediaConnectionAwaiter#iceConnectionStateHandler --> ICE connection state change -> ${iceConnectionState}`\n );\n\n if (iceConnectionState === 'connected' && !this.iceConnected) {\n this.iceConnected = true;\n }\n\n this.connectionStateChange();\n }\n\n /**\n * Listener for ICE gathering state change.\n *\n * @returns {void}\n */\n iceGatheringStateHandler(): void {\n const iceGatheringState = this.webrtcMediaConnection.getIceGatheringState();\n\n LoggerProxy.logger.log(\n `Media:MediaConnectionAwaiter#iceGatheringStateHandler --> ICE gathering state change -> ${iceGatheringState}`\n );\n\n if (!this.isIceGatheringCompleted()) {\n return;\n }\n\n if (this.isConnected()) {\n return;\n }\n\n clearTimeout(this.timer);\n\n this.timer = setTimeout(this.onTimeoutCallback, ICE_AND_DTLS_CONNECTION_TIMEOUT);\n }\n\n /**\n * Function called when the timeout is reached.\n *\n * @returns {void}\n */\n onTimeout(): void {\n if (this.isConnected()) {\n this.clearCallbacks();\n\n this.defer.resolve();\n\n return;\n }\n\n if (!this.isIceGatheringCompleted()) {\n if (!this.retried) {\n LoggerProxy.logger.warn(\n 'Media:MediaConnectionAwaiter#onTimeout --> ICE gathering did not complete within the timeout for the first time, retrying once'\n );\n\n // retry once if ICE gathering is not completed\n this.retried = true;\n clearTimeout(this.timer);\n this.timer = setTimeout(this.onTimeoutCallback, ICE_AND_DTLS_CONNECTION_TIMEOUT);\n\n return;\n }\n\n LoggerProxy.logger.warn(\n 'Media:MediaConnectionAwaiter#onTimeout --> ICE gathering did not complete within the timeout for the second time, rejecting'\n );\n } else {\n LoggerProxy.logger.warn(\n 'Media:MediaConnectionAwaiter#onTimeout --> ICE gathering completed, but connection state is not connected, rejecting'\n );\n }\n\n this.clearCallbacks();\n\n this.defer.reject({\n iceConnected: this.iceConnected,\n });\n }\n\n /**\n * Waits for the webrtc media connection to be connected.\n *\n * @returns {Promise}\n */\n waitForMediaConnectionConnected(): Promise<void> {\n if (this.isConnected()) {\n return Promise.resolve();\n }\n\n this.webrtcMediaConnection.on(\n Event.PEER_CONNECTION_STATE_CHANGED,\n this.peerConnectionStateCallback\n );\n\n this.webrtcMediaConnection.on(\n Event.ICE_CONNECTION_STATE_CHANGED,\n this.iceConnectionStateCallback\n );\n\n this.webrtcMediaConnection.on(\n Event.ICE_GATHERING_STATE_CHANGED,\n this.iceGatheringStateCallback\n );\n\n this.timer = setTimeout(this.onTimeoutCallback, ICE_AND_DTLS_CONNECTION_TIMEOUT);\n\n return this.defer.promise;\n }\n}\n"],"mappings":"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"}
|
|
@@ -11,10 +11,22 @@ var emptyMqaInterval = exports.emptyMqaInterval = {
|
|
|
11
11
|
intervalMetadata: {
|
|
12
12
|
peerReflexiveIP: '0.0.0.0',
|
|
13
13
|
peripherals: [],
|
|
14
|
+
cpuInfo: {
|
|
15
|
+
numberOfCores: 1,
|
|
16
|
+
// default value from spec if CpuInfo.getNumLogicalCores cannot be determined
|
|
17
|
+
description: 'NA',
|
|
18
|
+
architecture: 'unknown'
|
|
19
|
+
},
|
|
14
20
|
processAverageCPU: 0,
|
|
15
21
|
processMaximumCPU: 0,
|
|
16
22
|
systemAverageCPU: 0,
|
|
17
|
-
systemMaximumCPU: 0
|
|
23
|
+
systemMaximumCPU: 0,
|
|
24
|
+
screenWidth: 0,
|
|
25
|
+
screenHeight: 0,
|
|
26
|
+
screenResolution: 0,
|
|
27
|
+
appWindowWidth: 0,
|
|
28
|
+
appWindowHeight: 0,
|
|
29
|
+
appWindowSize: 0
|
|
18
30
|
},
|
|
19
31
|
networkType: '',
|
|
20
32
|
intervalNumber: 0,
|
|
@@ -129,9 +141,8 @@ var emptyVideoReceive = exports.emptyVideoReceive = {
|
|
|
129
141
|
mariRtxEnabled: false,
|
|
130
142
|
mariQosEnabled: false,
|
|
131
143
|
mariLiteEnabled: false,
|
|
132
|
-
multistreamEnabled:
|
|
144
|
+
multistreamEnabled: false
|
|
133
145
|
},
|
|
134
|
-
|
|
135
146
|
dtlsBitrate: 0,
|
|
136
147
|
// Not avaliable
|
|
137
148
|
dtlsPackets: 0,
|
|
@@ -190,7 +201,7 @@ var emptyVideoReceiveStream = exports.emptyVideoReceiveStream = {
|
|
|
190
201
|
},
|
|
191
202
|
|
|
192
203
|
h264CodecProfile: 'BP',
|
|
193
|
-
isActiveSpeaker:
|
|
204
|
+
isActiveSpeaker: false,
|
|
194
205
|
optimalFrameSize: 0,
|
|
195
206
|
// Not avaliable
|
|
196
207
|
receivedFrameSize: 0,
|
|
@@ -214,9 +225,8 @@ var emptyVideoTransmit = exports.emptyVideoTransmit = {
|
|
|
214
225
|
mariRtxEnabled: false,
|
|
215
226
|
mariQosEnabled: false,
|
|
216
227
|
mariLiteEnabled: false,
|
|
217
|
-
multistreamEnabled: false
|
|
228
|
+
multistreamEnabled: false
|
|
218
229
|
},
|
|
219
|
-
|
|
220
230
|
dtlsBitrate: 0,
|
|
221
231
|
// Not avaliable
|
|
222
232
|
dtlsPackets: 0,
|