@webex/plugin-meetings 3.8.0-next.70 → 3.8.0-next.72

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.
@@ -18,14 +18,19 @@ var SelfUtils = {
18
18
  * parses the relevant values for self: muted, guest, moderator, mediaStatus, state, joinedWith, pstnDevices, creator, id
19
19
  * @param {Object} self
20
20
  * @param {String} deviceId
21
+ * @param {Array} participants
21
22
  * @returns {undefined}
22
23
  */
23
- parse: function parse(self, deviceId) {
24
+ parse: function parse(self, deviceId, participants) {
24
25
  if (self) {
25
- var _joinedWith$intent;
26
+ var _joinedWith$intent, _participants$find;
26
27
  var joinedWith = self.devices.find(function (device) {
27
28
  return deviceId === device.url;
28
29
  });
30
+ var pairedWith = (joinedWith === null || joinedWith === void 0 ? void 0 : (_joinedWith$intent = joinedWith.intent) === null || _joinedWith$intent === void 0 ? void 0 : _joinedWith$intent.type) === _constants._OBSERVE_ && (participants === null || participants === void 0 ? void 0 : (_participants$find = participants.find(function (participant) {
31
+ var _joinedWith$intent2;
32
+ return participant.url === (joinedWith === null || joinedWith === void 0 ? void 0 : (_joinedWith$intent2 = joinedWith.intent) === null || _joinedWith$intent2 === void 0 ? void 0 : _joinedWith$intent2.associatedWith);
33
+ })) === null || _participants$find === void 0 ? void 0 : _participants$find.devices[0]);
29
34
  var pstnDevices = self.devices.filter(function (device) {
30
35
  return PSTN_DEVICE_TYPE === device.deviceType;
31
36
  });
@@ -48,6 +53,7 @@ var SelfUtils = {
48
53
  // TODO: give a proper name . With same device as login or different login`
49
54
  // Some times we might have joined with both mobile and web
50
55
  joinedWith: joinedWith,
56
+ pairedWith: pairedWith,
51
57
  pstnDevices: pstnDevices,
52
58
  // current media stats is for the current device who has joined
53
59
  currentMediaStatus: SelfUtils.getMediaStatus(joinedWith === null || joinedWith === void 0 ? void 0 : joinedWith.mediaSessions),
@@ -58,7 +64,7 @@ var SelfUtils = {
58
64
  selfUrl: self.url,
59
65
  removed: self.removed,
60
66
  roles: SelfUtils.getRoles(self),
61
- isUserUnadmitted: self.state === _constants._IDLE_ && (joinedWith === null || joinedWith === void 0 ? void 0 : (_joinedWith$intent = joinedWith.intent) === null || _joinedWith$intent === void 0 ? void 0 : _joinedWith$intent.type) === _constants._WAIT_,
67
+ isUserUnadmitted: SelfUtils.isLocusUserUnadmitted(self === null || self === void 0 ? void 0 : self.state, joinedWith, pairedWith),
62
68
  layout: SelfUtils.getLayout(self),
63
69
  canNotViewTheParticipantList: SelfUtils.canNotViewTheParticipantList(self),
64
70
  isSharingBlocked: SelfUtils.isSharingBlocked(self),
@@ -105,12 +111,12 @@ var SelfUtils = {
105
111
  isSharingBlocked: function isSharingBlocked(self) {
106
112
  return !!(self !== null && self !== void 0 && self.isSharingBlocked);
107
113
  },
108
- getSelves: function getSelves(oldSelf, newSelf, deviceId) {
109
- var previous = oldSelf && SelfUtils.parse(oldSelf, deviceId);
110
- var current = newSelf && SelfUtils.parse(newSelf, deviceId);
114
+ getSelves: function getSelves(oldParsedSelf, newSelf, deviceId, participants) {
115
+ var previous = oldParsedSelf;
116
+ var current = newSelf && SelfUtils.parse(newSelf, deviceId, participants);
111
117
  var updates = {};
112
- updates.isUserUnadmitted = SelfUtils.isUserUnadmitted(previous, current);
113
- updates.isUserAdmitted = SelfUtils.isUserAdmitted(previous, current);
118
+ updates.hasUserEnteredLobby = SelfUtils.hasUserEnteredLobby(previous, current);
119
+ updates.hasUserBeenAdmitted = SelfUtils.hasUserBeenAdmitted(previous, current);
114
120
  updates.isVideoMutedByOthersChanged = SelfUtils.videoMutedByOthersChanged(previous, current);
115
121
  updates.isMutedByOthersChanged = SelfUtils.mutedByOthersChanged(previous, current);
116
122
  updates.localAudioUnmuteRequestedByServer = SelfUtils.localAudioUnmuteRequestedByServer(previous, current);
@@ -261,35 +267,54 @@ var SelfUtils = {
261
267
  return oldSelf.joinedWith && oldSelf.joinedWith.state === _constants._JOINED_ && changedSelf.joinedWith && changedSelf.joinedWith.state === _constants._LEFT_ && (changedSelf.joinedWith.reason === _constants.MEETING_END_REASON.INACTIVE || changedSelf.joinedWith.reason === _constants.MEETING_END_REASON.MEDIA_RELEASED);
262
268
  },
263
269
  /**
264
- * @param {Object} check
265
- * @returns {Boolean}
270
+ * @param {String | undefined} state meeting state
271
+ * @param {any} joinedWith device that user has joined with
272
+ * @param {any} pairedWith device that user is paired with
273
+ * @returns {Boolean | undefined} true if user is in lobby, false if not, undefined if it cannot be determined
266
274
  */
267
- isLocusUserUnadmitted: function isLocusUserUnadmitted(check) {
268
- var _check$joinedWith, _check$joinedWith$int;
269
- return check && ((_check$joinedWith = check.joinedWith) === null || _check$joinedWith === void 0 ? void 0 : (_check$joinedWith$int = _check$joinedWith.intent) === null || _check$joinedWith$int === void 0 ? void 0 : _check$joinedWith$int.type) === _constants._WAIT_ && check.state === _constants._IDLE_;
275
+ isLocusUserUnadmitted: function isLocusUserUnadmitted(state, joinedWith, pairedWith) {
276
+ var _joinedWith$intent3, _joinedWith$intent4;
277
+ if (state === undefined) {
278
+ return undefined;
279
+ }
280
+ if ((joinedWith === null || joinedWith === void 0 ? void 0 : (_joinedWith$intent3 = joinedWith.intent) === null || _joinedWith$intent3 === void 0 ? void 0 : _joinedWith$intent3.type) === _constants._OBSERVE_ && pairedWith) {
281
+ var _pairedWith$intent;
282
+ // we are paired with a device, so need to check the lobby state for that device
283
+ return ((_pairedWith$intent = pairedWith.intent) === null || _pairedWith$intent === void 0 ? void 0 : _pairedWith$intent.type) === _constants._WAIT_ && state === _constants._IDLE_;
284
+ }
285
+ return (joinedWith === null || joinedWith === void 0 ? void 0 : (_joinedWith$intent4 = joinedWith.intent) === null || _joinedWith$intent4 === void 0 ? void 0 : _joinedWith$intent4.type) === _constants._WAIT_ && state === _constants._IDLE_;
270
286
  },
271
287
  /**
272
- * @param {Object} check
288
+ * @param {String | undefined} state meeting state
289
+ * @param {any} joinedWith device that user has joined with
290
+ * @param {any} pairedWith device that user is paired with
273
291
  * @returns {Boolean}
274
292
  */
275
- isLocusUserAdmitted: function isLocusUserAdmitted(check) {
276
- var _check$joinedWith2, _check$joinedWith2$in;
277
- return check && ((_check$joinedWith2 = check.joinedWith) === null || _check$joinedWith2 === void 0 ? void 0 : (_check$joinedWith2$in = _check$joinedWith2.intent) === null || _check$joinedWith2$in === void 0 ? void 0 : _check$joinedWith2$in.type) !== _constants._WAIT_ && check.state === _constants._JOINED_;
293
+ isLocusUserAdmitted: function isLocusUserAdmitted(state, joinedWith, pairedWith) {
294
+ var _joinedWith$intent5, _joinedWith$intent6;
295
+ if (state === undefined) {
296
+ return undefined;
297
+ }
298
+ if ((joinedWith === null || joinedWith === void 0 ? void 0 : (_joinedWith$intent5 = joinedWith.intent) === null || _joinedWith$intent5 === void 0 ? void 0 : _joinedWith$intent5.type) === _constants._OBSERVE_ && pairedWith) {
299
+ var _pairedWith$intent2;
300
+ // we are paired with a device, so need to check the lobby state for that device
301
+ return ((_pairedWith$intent2 = pairedWith.intent) === null || _pairedWith$intent2 === void 0 ? void 0 : _pairedWith$intent2.type) !== _constants._WAIT_ && state === _constants._JOINED_;
302
+ }
303
+ return (joinedWith === null || joinedWith === void 0 ? void 0 : (_joinedWith$intent6 = joinedWith.intent) === null || _joinedWith$intent6 === void 0 ? void 0 : _joinedWith$intent6.type) !== _constants._WAIT_ && state === _constants._JOINED_;
278
304
  },
279
305
  /**
280
306
  * @param {Object} oldSelf
281
307
  * @param {Object} changedSelf
282
- * @returns {Boolean}
308
+ * @returns {Boolean} true if user has just been placed in the lobby
283
309
  * @throws {Error} when self is undefined
284
310
  */
285
- isUserUnadmitted: function isUserUnadmitted(oldSelf, changedSelf) {
311
+ hasUserEnteredLobby: function hasUserEnteredLobby(oldSelf, changedSelf) {
286
312
  if (!changedSelf) {
287
313
  throw new _parameter.default('changedSelf must be defined to determine if self is unadmitted as guest.');
288
314
  }
289
- if (SelfUtils.isLocusUserUnadmitted(oldSelf)) {
290
- return false;
291
- }
292
- return SelfUtils.isLocusUserUnadmitted(changedSelf);
315
+ var wasInLobby = SelfUtils.isLocusUserUnadmitted(oldSelf === null || oldSelf === void 0 ? void 0 : oldSelf.state, oldSelf === null || oldSelf === void 0 ? void 0 : oldSelf.joinedWith, oldSelf === null || oldSelf === void 0 ? void 0 : oldSelf.pairedWith);
316
+ var isInLobby = SelfUtils.isLocusUserUnadmitted(changedSelf === null || changedSelf === void 0 ? void 0 : changedSelf.state, changedSelf === null || changedSelf === void 0 ? void 0 : changedSelf.joinedWith, changedSelf === null || changedSelf === void 0 ? void 0 : changedSelf.pairedWith);
317
+ return !wasInLobby && isInLobby;
293
318
  },
294
319
  moderatorChanged: function moderatorChanged(oldSelf, changedSelf) {
295
320
  if (!oldSelf) {
@@ -326,10 +351,10 @@ var SelfUtils = {
326
351
  /**
327
352
  * @param {Object} oldSelf
328
353
  * @param {Object} changedSelf
329
- * @returns {Boolean}
354
+ * @returns {Boolean} true if the user has just been admitted from lobby into the meeting
330
355
  * @throws {Error} if changed self was undefined
331
356
  */
332
- isUserAdmitted: function isUserAdmitted(oldSelf, changedSelf) {
357
+ hasUserBeenAdmitted: function hasUserBeenAdmitted(oldSelf, changedSelf) {
333
358
  if (!oldSelf) {
334
359
  // if there was no previous locus, it couldn't have been admitted yet
335
360
  return false;
@@ -337,7 +362,9 @@ var SelfUtils = {
337
362
  if (!changedSelf) {
338
363
  throw new _parameter.default('New self must be defined to determine if self transitioned to admitted as guest.');
339
364
  }
340
- return SelfUtils.isLocusUserUnadmitted(oldSelf) && SelfUtils.isLocusUserAdmitted(changedSelf);
365
+ var wasInLobby = SelfUtils.isLocusUserUnadmitted(oldSelf === null || oldSelf === void 0 ? void 0 : oldSelf.state, oldSelf === null || oldSelf === void 0 ? void 0 : oldSelf.joinedWith, oldSelf === null || oldSelf === void 0 ? void 0 : oldSelf.pairedWith);
366
+ var isAdmitted = SelfUtils.isLocusUserAdmitted(changedSelf === null || changedSelf === void 0 ? void 0 : changedSelf.state, changedSelf === null || changedSelf === void 0 ? void 0 : changedSelf.joinedWith, changedSelf === null || changedSelf === void 0 ? void 0 : changedSelf.pairedWith);
367
+ return wasInLobby && isAdmitted && isAdmitted !== undefined;
341
368
  },
342
369
  videoMutedByOthersChanged: function videoMutedByOthersChanged(oldSelf, changedSelf) {
343
370
  if (!changedSelf) {
@@ -1 +1 @@
1
- {"version":3,"names":["_lodash","require","_constants","_parameter","_interopRequireDefault","PSTN_DEVICE_TYPE","SelfUtils","parse","self","deviceId","_joinedWith$intent","joinedWith","devices","find","device","url","pstnDevices","filter","deviceType","remoteVideoMuted","getRemoteVideoMuted","remoteMuted","getRemoteMuted","unmuteAllowed","getUnmuteAllowed","localAudioUnmuteRequested","getLocalAudioUnmuteRequested","localAudioUnmuteRequestedTimeStamp","getLocalAudioUnmuteRequestedTimeStamp","localAudioUnmuteRequired","getLocalAudioUnmuteRequired","lastModified","getLastModified","modifiedBy","getModifiedBy","guest","moderator","mediaStatus","getStatus","status","state","currentMediaStatus","getMediaStatus","mediaSessions","creator","isCreator","selfId","id","selfIdentity","getSelfIdentity","selfUrl","removed","roles","getRoles","isUserUnadmitted","_IDLE_","intent","type","_WAIT_","layout","getLayout","canNotViewTheParticipantList","isSharingBlocked","breakoutSessions","getBreakoutSessions","breakout","getBreakout","interpretation","getInterpretation","brb","getBrb","_self$controls","_self$controls$breako","controls","sessions","_self$controls2","_self$controls3","_self$controls4","_self$controls5","_isArray","default","layouts","undefined","_self$controls6","_self$controls6$role","role","reduce","hasRole","push","getSelves","oldSelf","newSelf","previous","current","updates","isUserAdmitted","isVideoMutedByOthersChanged","videoMutedByOthersChanged","isMutedByOthersChanged","mutedByOthersChanged","localAudioUnmuteRequestedByServer","localAudioUnmuteRequiredByServer","moderatorChanged","isRolesChanged","isMediaInactiveOrReleased","wasMediaInactiveOrReleased","isUserObserving","isDeviceObserving","layoutChanged","isMediaInactive","audioStateChange","audio","videoStateChange","video","shareStateChange","share","canNotViewTheParticipantListChanged","isSharingBlockedChanged","breakoutsChanged","interpretationChanged","brbChanged","isJoined","_JOINED_","isEqual","previousMediaStatus","MEDIA_STATE","inactive","direction","meta","person","muted","_self$controls7","_self$controls7$audio","requestedToUnmute","_self$controls8","_self$controls8$audio","Date","lastModifiedRequestedToUnmute","disallowUnmute","_self$controls9","_self$controls9$audio","audioStatus","videoStatus","slides","videoSlidesStatus","arguments","length","changedSelf","_LEFT_","reason","MEETING_END_REASON","INACTIVE","MEDIA_RELEASED","isLocusUserUnadmitted","check","_check$joinedWith","_check$joinedWith$int","isLocusUserAdmitted","_check$joinedWith2","_check$joinedWith2$in","ParameterError","_oldSelf$joinedWith","_oldSelf$joinedWith$i","_changedSelf$joinedWi","_changedSelf$joinedWi2","_MOVE_MEDIA_","_OBSERVE_","getSipUrl","partner","sipUri","_CALL_","sipUrl","media","mediaType","AUDIO","mediaContent","MediaContent","main","VIDEO","getReplacedBreakoutMoveId","joinedDevice","replaces","_joinedDevice$replace","breakoutMoveId","_default","exports"],"sources":["selfUtils.ts"],"sourcesContent":["/* eslint-disable default-param-last */\n\nimport {isEqual} from 'lodash';\nimport {\n _IDLE_,\n _JOINED_,\n _CALL_,\n _WAIT_,\n _MOVE_MEDIA_,\n _OBSERVE_,\n _LEFT_,\n MEETING_END_REASON,\n MEDIA_STATE,\n AUDIO,\n VIDEO,\n MediaContent,\n} from '../constants';\nimport ParameterError from '../common/errors/parameter';\n\nconst PSTN_DEVICE_TYPE = 'PROVISIONAL';\n\nconst SelfUtils = {\n /**\n * parses the relevant values for self: muted, guest, moderator, mediaStatus, state, joinedWith, pstnDevices, creator, id\n * @param {Object} self\n * @param {String} deviceId\n * @returns {undefined}\n */\n parse: (self: any, deviceId: string) => {\n if (self) {\n const joinedWith = self.devices.find((device) => deviceId === device.url);\n const pstnDevices = self.devices.filter((device) => PSTN_DEVICE_TYPE === device.deviceType);\n\n return {\n remoteVideoMuted: SelfUtils.getRemoteVideoMuted(self),\n remoteMuted: SelfUtils.getRemoteMuted(self),\n unmuteAllowed: SelfUtils.getUnmuteAllowed(self),\n localAudioUnmuteRequested: SelfUtils.getLocalAudioUnmuteRequested(self),\n localAudioUnmuteRequestedTimeStamp: SelfUtils.getLocalAudioUnmuteRequestedTimeStamp(self),\n localAudioUnmuteRequired: SelfUtils.getLocalAudioUnmuteRequired(self),\n lastModified: SelfUtils.getLastModified(self),\n modifiedBy: SelfUtils.getModifiedBy(self),\n guest: self.guest,\n moderator: self.moderator,\n // cumulative media stats\n mediaStatus: SelfUtils.getStatus(self.status),\n // TODO: what should be the status if user has refreshed the page,\n // check the joinedWith parameter and communicate to the user\n state: self.state,\n // TODO: give a proper name . With same device as login or different login`\n // Some times we might have joined with both mobile and web\n joinedWith,\n pstnDevices,\n // current media stats is for the current device who has joined\n currentMediaStatus: SelfUtils.getMediaStatus(joinedWith?.mediaSessions),\n creator: self.isCreator, // check if its used,\n selfId: self.id,\n selfIdentity: SelfUtils.getSelfIdentity(self),\n selfUrl: self.url,\n removed: self.removed,\n roles: SelfUtils.getRoles(self),\n isUserUnadmitted: self.state === _IDLE_ && joinedWith?.intent?.type === _WAIT_,\n layout: SelfUtils.getLayout(self),\n canNotViewTheParticipantList: SelfUtils.canNotViewTheParticipantList(self),\n isSharingBlocked: SelfUtils.isSharingBlocked(self),\n breakoutSessions: SelfUtils.getBreakoutSessions(self),\n breakout: SelfUtils.getBreakout(self),\n interpretation: SelfUtils.getInterpretation(self),\n brb: SelfUtils.getBrb(self),\n };\n }\n\n return null;\n },\n\n getBreakoutSessions: (self) => self?.controls?.breakout?.sessions,\n getBreakout: (self) => self?.controls?.breakout,\n getInterpretation: (self) => self?.controls?.interpretation,\n getBrb: (self) => self?.controls?.brb,\n\n getLayout: (self) =>\n Array.isArray(self?.controls?.layouts) ? self.controls.layouts[0].type : undefined,\n\n getRoles: (self) =>\n (self?.controls?.role?.roles || []).reduce((roles, role) => {\n if (role.hasRole) {\n roles.push(role.type);\n }\n\n return roles;\n }, []),\n\n canNotViewTheParticipantList: (self) => !!self?.canNotViewTheParticipantList,\n\n isSharingBlocked: (self) => !!self?.isSharingBlocked,\n\n getSelves: (oldSelf, newSelf, deviceId) => {\n const previous = oldSelf && SelfUtils.parse(oldSelf, deviceId);\n const current = newSelf && SelfUtils.parse(newSelf, deviceId);\n const updates: any = {};\n\n updates.isUserUnadmitted = SelfUtils.isUserUnadmitted(previous, current);\n updates.isUserAdmitted = SelfUtils.isUserAdmitted(previous, current);\n updates.isVideoMutedByOthersChanged = SelfUtils.videoMutedByOthersChanged(previous, current);\n updates.isMutedByOthersChanged = SelfUtils.mutedByOthersChanged(previous, current);\n updates.localAudioUnmuteRequestedByServer = SelfUtils.localAudioUnmuteRequestedByServer(\n previous,\n current\n );\n updates.localAudioUnmuteRequiredByServer = SelfUtils.localAudioUnmuteRequiredByServer(\n previous,\n current\n );\n updates.moderatorChanged = SelfUtils.moderatorChanged(previous, current);\n updates.isRolesChanged = SelfUtils.isRolesChanged(previous, current);\n updates.isMediaInactiveOrReleased = SelfUtils.wasMediaInactiveOrReleased(previous, current);\n updates.isUserObserving = SelfUtils.isDeviceObserving(previous, current);\n updates.layoutChanged = SelfUtils.layoutChanged(previous, current);\n\n updates.isMediaInactive = SelfUtils.isMediaInactive(previous, current);\n updates.audioStateChange =\n previous?.currentMediaStatus.audio !== current.currentMediaStatus.audio;\n updates.videoStateChange =\n previous?.currentMediaStatus.video !== current.currentMediaStatus.video;\n updates.shareStateChange =\n previous?.currentMediaStatus.share !== current.currentMediaStatus.share;\n\n updates.canNotViewTheParticipantListChanged =\n previous?.canNotViewTheParticipantList !== current.canNotViewTheParticipantList;\n updates.isSharingBlockedChanged = previous?.isSharingBlocked !== current.isSharingBlocked;\n updates.breakoutsChanged = SelfUtils.breakoutsChanged(previous, current);\n updates.interpretationChanged = SelfUtils.interpretationChanged(previous, current);\n updates.brbChanged = SelfUtils.brbChanged(previous, current);\n\n return {\n previous,\n current,\n updates,\n };\n },\n\n /**\n * Checks if user has joined the meeting\n * @param {Object} self\n * @returns {boolean} isJoined\n */\n isJoined: (self: any) => self?.state === _JOINED_,\n\n /**\n * Validate if the Meeting Layout Controls Layout has changed.\n *\n * @param {Self} previous - Previous self state\n * @param {Self} current - Current self state [per event]\n * @returns {boolean} - If the Meeting Layout Controls Layout has changed.\n */\n layoutChanged: (previous: any, current: any) =>\n current?.layout && previous?.layout !== current?.layout,\n\n breakoutsChanged: (previous, current) =>\n !isEqual(previous?.breakoutSessions, current?.breakoutSessions) && !!current?.breakout,\n\n interpretationChanged: (previous, current) =>\n !isEqual(previous?.interpretation, current?.interpretation) && !!current?.interpretation,\n\n brbChanged: (previous, current) =>\n !isEqual(previous?.brb, current?.brb) && current?.brb !== undefined,\n\n isMediaInactive: (previous, current) => {\n if (\n previous &&\n previous.joinedWith &&\n previous.joinedWith.mediaSessions &&\n current &&\n current.joinedWith &&\n current.joinedWith.mediaSessions\n ) {\n const previousMediaStatus = SelfUtils.getMediaStatus(previous.joinedWith.mediaSessions);\n const currentMediaStatus = SelfUtils.getMediaStatus(current.joinedWith.mediaSessions);\n\n if (\n previousMediaStatus.audio &&\n currentMediaStatus.audio &&\n previousMediaStatus.audio.state !== MEDIA_STATE.inactive &&\n currentMediaStatus.audio.state === MEDIA_STATE.inactive &&\n currentMediaStatus.audio.direction !== MEDIA_STATE.inactive\n ) {\n return true;\n }\n\n if (\n previousMediaStatus.video &&\n currentMediaStatus.video &&\n previousMediaStatus.video.state !== MEDIA_STATE.inactive &&\n currentMediaStatus.video.state === MEDIA_STATE.inactive &&\n currentMediaStatus.video.direction !== MEDIA_STATE.inactive\n ) {\n return true;\n }\n\n if (\n previousMediaStatus.share &&\n currentMediaStatus.share &&\n previousMediaStatus.share.state !== MEDIA_STATE.inactive &&\n currentMediaStatus.share.state === MEDIA_STATE.inactive &&\n currentMediaStatus.share.direction !== MEDIA_STATE.inactive\n ) {\n return true;\n }\n\n return false;\n }\n\n return false;\n },\n\n getLastModified: (self) => {\n if (\n !self ||\n !self.controls ||\n !self.controls.audio ||\n !self.controls.audio.meta ||\n !self.controls.audio.meta.lastModified\n ) {\n return null;\n }\n\n return self.controls.audio.meta.lastModified;\n },\n\n getModifiedBy: (self) => {\n if (\n !self ||\n !self.controls ||\n !self.controls.audio ||\n !self.controls.audio.meta ||\n !self.controls.audio.meta.modifiedBy\n ) {\n return null;\n }\n\n return self.controls.audio.meta.modifiedBy;\n },\n\n /**\n * get the id from the self object\n * @param {Object} self\n * @returns {String}\n */\n getSelfIdentity: (self: any) => {\n if (!self || !self.person) {\n return null;\n }\n\n return self.person.id;\n },\n\n /**\n * get the \"remote video mute\" property from the self object\n * @param {Object} self\n * @returns {Boolean}\n */\n getRemoteVideoMuted: (self: any) => {\n if (!self || !self.controls || !self.controls.video) {\n return null;\n }\n\n return self.controls.video.muted;\n },\n\n /**\n * get the \"remote mute\" property from the self object\n * @param {Object} self\n * @returns {Boolean}\n */\n getRemoteMuted: (self: any) => {\n if (!self || !self.controls || !self.controls.audio) {\n return null;\n }\n\n return self.controls.audio.muted;\n },\n\n getLocalAudioUnmuteRequested: (self) => !!self?.controls?.audio?.requestedToUnmute,\n\n // requestedToUnmute timestamp\n getLocalAudioUnmuteRequestedTimeStamp: (self) =>\n Date.parse(self?.controls?.audio?.lastModifiedRequestedToUnmute) || 0,\n\n getUnmuteAllowed: (self) => {\n if (!self || !self.controls || !self.controls.audio) {\n return null;\n }\n\n return !self.controls.audio.disallowUnmute;\n },\n\n getLocalAudioUnmuteRequired: (self) => !!self?.controls?.audio?.localAudioUnmuteRequired,\n\n getStatus: (status) => ({\n audio: status.audioStatus,\n video: status.videoStatus,\n slides: status.videoSlidesStatus,\n }),\n\n /**\n * @param {Object} oldSelf\n * @param {Object} changedSelf\n * @returns {Boolean}\n */\n wasMediaInactiveOrReleased: (oldSelf: any = {}, changedSelf: any) =>\n oldSelf.joinedWith &&\n oldSelf.joinedWith.state === _JOINED_ &&\n changedSelf.joinedWith &&\n changedSelf.joinedWith.state === _LEFT_ &&\n (changedSelf.joinedWith.reason === MEETING_END_REASON.INACTIVE ||\n changedSelf.joinedWith.reason === MEETING_END_REASON.MEDIA_RELEASED),\n\n /**\n * @param {Object} check\n * @returns {Boolean}\n */\n isLocusUserUnadmitted: (check: any) =>\n check && check.joinedWith?.intent?.type === _WAIT_ && check.state === _IDLE_,\n\n /**\n * @param {Object} check\n * @returns {Boolean}\n */\n isLocusUserAdmitted: (check: any) =>\n check && check.joinedWith?.intent?.type !== _WAIT_ && check.state === _JOINED_,\n\n /**\n * @param {Object} oldSelf\n * @param {Object} changedSelf\n * @returns {Boolean}\n * @throws {Error} when self is undefined\n */\n isUserUnadmitted: (oldSelf: any, changedSelf: any) => {\n if (!changedSelf) {\n throw new ParameterError(\n 'changedSelf must be defined to determine if self is unadmitted as guest.'\n );\n }\n\n if (SelfUtils.isLocusUserUnadmitted(oldSelf)) {\n return false;\n }\n\n return SelfUtils.isLocusUserUnadmitted(changedSelf);\n },\n\n moderatorChanged: (oldSelf, changedSelf) => {\n if (!oldSelf) {\n return true;\n }\n if (!changedSelf) {\n throw new ParameterError(\n 'New self must be defined to determine if self transitioned moderator status.'\n );\n }\n\n return oldSelf.moderator !== changedSelf.moderator;\n },\n\n /**\n * determine whether the roles of self is changed or not\n * @param {Object} oldSelf\n * @param {Object} changedSelf\n * @returns {Boolean}\n */\n isRolesChanged: (oldSelf, changedSelf) => {\n if (!changedSelf) {\n // no new self means no change\n return false;\n }\n\n return !isEqual(oldSelf?.roles, changedSelf?.roles);\n },\n /**\n * @param {Object} oldSelf\n * @param {Object} changedSelf\n * @returns {Boolean}\n * @throws {Error} if changed self was undefined\n */\n isDeviceObserving: (oldSelf: any, changedSelf: any) =>\n oldSelf &&\n oldSelf.joinedWith?.intent?.type === _MOVE_MEDIA_ &&\n changedSelf &&\n changedSelf.joinedWith?.intent?.type === _OBSERVE_,\n\n /**\n * @param {Object} oldSelf\n * @param {Object} changedSelf\n * @returns {Boolean}\n * @throws {Error} if changed self was undefined\n */\n isUserAdmitted: (oldSelf: object, changedSelf: object) => {\n if (!oldSelf) {\n // if there was no previous locus, it couldn't have been admitted yet\n return false;\n }\n if (!changedSelf) {\n throw new ParameterError(\n 'New self must be defined to determine if self transitioned to admitted as guest.'\n );\n }\n\n return SelfUtils.isLocusUserUnadmitted(oldSelf) && SelfUtils.isLocusUserAdmitted(changedSelf);\n },\n\n videoMutedByOthersChanged: (oldSelf, changedSelf) => {\n if (!changedSelf) {\n throw new ParameterError(\n 'New self must be defined to determine if self was video muted by others.'\n );\n }\n\n if (!oldSelf || oldSelf.remoteVideoMuted === null) {\n if (changedSelf.remoteVideoMuted) {\n return true; // this happens when host disables \"Allow start video\"\n }\n\n // we don't want to be sending the 'meeting:self:videoUnmutedByOthers' notification on meeting join\n return false;\n }\n\n return oldSelf.remoteVideoMuted !== changedSelf.remoteVideoMuted;\n },\n\n mutedByOthersChanged: (oldSelf, changedSelf) => {\n if (!changedSelf) {\n throw new ParameterError(\n 'New self must be defined to determine if self was muted by others.'\n );\n }\n\n if (!oldSelf || oldSelf.remoteMuted === null) {\n if (changedSelf.remoteMuted) {\n return true; // this happens when mute on-entry is enabled\n }\n\n // we don't want to be sending the 'meeting:self:unmutedByOthers' notification on meeting join\n return false;\n }\n\n // there is no need to trigger user update if no one muted user\n if (changedSelf.selfIdentity === changedSelf.modifiedBy) {\n return false;\n }\n\n return (\n changedSelf.remoteMuted !== null &&\n (oldSelf.remoteMuted !== changedSelf.remoteMuted ||\n (changedSelf.remoteMuted && oldSelf.unmuteAllowed !== changedSelf.unmuteAllowed))\n );\n },\n\n localAudioUnmuteRequestedByServer: (oldSelf: any = {}, changedSelf: any) => {\n if (!changedSelf) {\n throw new ParameterError(\n 'New self must be defined to determine if self received request to unmute.'\n );\n }\n\n return (\n changedSelf.localAudioUnmuteRequested &&\n changedSelf.localAudioUnmuteRequestedTimeStamp > oldSelf.localAudioUnmuteRequestedTimeStamp\n );\n },\n\n localAudioUnmuteRequiredByServer: (oldSelf: any = {}, changedSelf: any) => {\n if (!changedSelf) {\n throw new ParameterError(\n 'New self must be defined to determine if localAudioUnmuteRequired changed.'\n );\n }\n\n return (\n !changedSelf.remoteMuted &&\n changedSelf.localAudioUnmuteRequired &&\n oldSelf.localAudioUnmuteRequired !== changedSelf.localAudioUnmuteRequired\n );\n },\n\n /**\n * extract the sipUrl from the partner\n * @param {Object} partner\n * @param {Object} info\n * @returns {Object}\n */\n\n getSipUrl: (partner: any, type, sipUri) => {\n // For webex meeting the sipUrl gets updated in info parser\n if (partner && type === _CALL_) {\n return {sipUri: partner.person.sipUrl || partner.person.id};\n }\n\n return {sipUri};\n },\n\n getMediaStatus: (mediaSessions = []): {audio: any; video: any; share: any} => {\n const mediaStatus = {\n audio: {},\n video: {},\n share: {},\n };\n\n mediaStatus.audio = mediaSessions.find(\n (media) => media.mediaType === AUDIO && media.mediaContent === MediaContent.main\n );\n mediaStatus.video = mediaSessions.find(\n (media) => media.mediaType === VIDEO && media.mediaContent === MediaContent.main\n );\n mediaStatus.share = mediaSessions.find(\n (media) => media.mediaType === VIDEO && media.mediaContent === MediaContent.slides\n );\n\n return mediaStatus;\n },\n\n getReplacedBreakoutMoveId: (self: any, deviceId: string) => {\n if (self && Array.isArray(self.devices)) {\n const joinedDevice = self.devices.find((device) => deviceId === device.url);\n if (Array.isArray(joinedDevice?.replaces)) {\n return joinedDevice.replaces[0]?.breakoutMoveId;\n }\n }\n\n return null;\n },\n};\n\nexport default SelfUtils;\n"],"mappings":"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"}
1
+ {"version":3,"names":["_lodash","require","_constants","_parameter","_interopRequireDefault","PSTN_DEVICE_TYPE","SelfUtils","parse","self","deviceId","participants","_joinedWith$intent","_participants$find","joinedWith","devices","find","device","url","pairedWith","intent","type","_OBSERVE_","participant","_joinedWith$intent2","associatedWith","pstnDevices","filter","deviceType","remoteVideoMuted","getRemoteVideoMuted","remoteMuted","getRemoteMuted","unmuteAllowed","getUnmuteAllowed","localAudioUnmuteRequested","getLocalAudioUnmuteRequested","localAudioUnmuteRequestedTimeStamp","getLocalAudioUnmuteRequestedTimeStamp","localAudioUnmuteRequired","getLocalAudioUnmuteRequired","lastModified","getLastModified","modifiedBy","getModifiedBy","guest","moderator","mediaStatus","getStatus","status","state","currentMediaStatus","getMediaStatus","mediaSessions","creator","isCreator","selfId","id","selfIdentity","getSelfIdentity","selfUrl","removed","roles","getRoles","isUserUnadmitted","isLocusUserUnadmitted","layout","getLayout","canNotViewTheParticipantList","isSharingBlocked","breakoutSessions","getBreakoutSessions","breakout","getBreakout","interpretation","getInterpretation","brb","getBrb","_self$controls","_self$controls$breako","controls","sessions","_self$controls2","_self$controls3","_self$controls4","_self$controls5","_isArray","default","layouts","undefined","_self$controls6","_self$controls6$role","role","reduce","hasRole","push","getSelves","oldParsedSelf","newSelf","previous","current","updates","hasUserEnteredLobby","hasUserBeenAdmitted","isVideoMutedByOthersChanged","videoMutedByOthersChanged","isMutedByOthersChanged","mutedByOthersChanged","localAudioUnmuteRequestedByServer","localAudioUnmuteRequiredByServer","moderatorChanged","isRolesChanged","isMediaInactiveOrReleased","wasMediaInactiveOrReleased","isUserObserving","isDeviceObserving","layoutChanged","isMediaInactive","audioStateChange","audio","videoStateChange","video","shareStateChange","share","canNotViewTheParticipantListChanged","isSharingBlockedChanged","breakoutsChanged","interpretationChanged","brbChanged","isJoined","_JOINED_","isEqual","previousMediaStatus","MEDIA_STATE","inactive","direction","meta","person","muted","_self$controls7","_self$controls7$audio","requestedToUnmute","_self$controls8","_self$controls8$audio","Date","lastModifiedRequestedToUnmute","disallowUnmute","_self$controls9","_self$controls9$audio","audioStatus","videoStatus","slides","videoSlidesStatus","oldSelf","arguments","length","changedSelf","_LEFT_","reason","MEETING_END_REASON","INACTIVE","MEDIA_RELEASED","_joinedWith$intent3","_joinedWith$intent4","_pairedWith$intent","_WAIT_","_IDLE_","isLocusUserAdmitted","_joinedWith$intent5","_joinedWith$intent6","_pairedWith$intent2","ParameterError","wasInLobby","isInLobby","_oldSelf$joinedWith","_oldSelf$joinedWith$i","_changedSelf$joinedWi","_changedSelf$joinedWi2","_MOVE_MEDIA_","isAdmitted","getSipUrl","partner","sipUri","_CALL_","sipUrl","media","mediaType","AUDIO","mediaContent","MediaContent","main","VIDEO","getReplacedBreakoutMoveId","joinedDevice","replaces","_joinedDevice$replace","breakoutMoveId","_default","exports"],"sources":["selfUtils.ts"],"sourcesContent":["/* eslint-disable default-param-last */\n\nimport {isEqual} from 'lodash';\nimport {\n _IDLE_,\n _JOINED_,\n _CALL_,\n _WAIT_,\n _MOVE_MEDIA_,\n _OBSERVE_,\n _LEFT_,\n MEETING_END_REASON,\n MEDIA_STATE,\n AUDIO,\n VIDEO,\n MediaContent,\n} from '../constants';\nimport ParameterError from '../common/errors/parameter';\n\nconst PSTN_DEVICE_TYPE = 'PROVISIONAL';\n\nconst SelfUtils = {\n /**\n * parses the relevant values for self: muted, guest, moderator, mediaStatus, state, joinedWith, pstnDevices, creator, id\n * @param {Object} self\n * @param {String} deviceId\n * @param {Array} participants\n * @returns {undefined}\n */\n parse: (self: any, deviceId: string, participants: Array<any>) => {\n if (self) {\n const joinedWith = self.devices.find((device) => deviceId === device.url);\n const pairedWith =\n joinedWith?.intent?.type === _OBSERVE_ &&\n participants?.find((participant) => participant.url === joinedWith?.intent?.associatedWith)\n ?.devices[0];\n\n const pstnDevices = self.devices.filter((device) => PSTN_DEVICE_TYPE === device.deviceType);\n\n return {\n remoteVideoMuted: SelfUtils.getRemoteVideoMuted(self),\n remoteMuted: SelfUtils.getRemoteMuted(self),\n unmuteAllowed: SelfUtils.getUnmuteAllowed(self),\n localAudioUnmuteRequested: SelfUtils.getLocalAudioUnmuteRequested(self),\n localAudioUnmuteRequestedTimeStamp: SelfUtils.getLocalAudioUnmuteRequestedTimeStamp(self),\n localAudioUnmuteRequired: SelfUtils.getLocalAudioUnmuteRequired(self),\n lastModified: SelfUtils.getLastModified(self),\n modifiedBy: SelfUtils.getModifiedBy(self),\n guest: self.guest,\n moderator: self.moderator,\n // cumulative media stats\n mediaStatus: SelfUtils.getStatus(self.status),\n // TODO: what should be the status if user has refreshed the page,\n // check the joinedWith parameter and communicate to the user\n state: self.state,\n // TODO: give a proper name . With same device as login or different login`\n // Some times we might have joined with both mobile and web\n joinedWith,\n pairedWith,\n pstnDevices,\n // current media stats is for the current device who has joined\n currentMediaStatus: SelfUtils.getMediaStatus(joinedWith?.mediaSessions),\n creator: self.isCreator, // check if its used,\n selfId: self.id,\n selfIdentity: SelfUtils.getSelfIdentity(self),\n selfUrl: self.url,\n removed: self.removed,\n roles: SelfUtils.getRoles(self),\n isUserUnadmitted: SelfUtils.isLocusUserUnadmitted(self?.state, joinedWith, pairedWith),\n layout: SelfUtils.getLayout(self),\n canNotViewTheParticipantList: SelfUtils.canNotViewTheParticipantList(self),\n isSharingBlocked: SelfUtils.isSharingBlocked(self),\n breakoutSessions: SelfUtils.getBreakoutSessions(self),\n breakout: SelfUtils.getBreakout(self),\n interpretation: SelfUtils.getInterpretation(self),\n brb: SelfUtils.getBrb(self),\n };\n }\n\n return null;\n },\n\n getBreakoutSessions: (self) => self?.controls?.breakout?.sessions,\n getBreakout: (self) => self?.controls?.breakout,\n getInterpretation: (self) => self?.controls?.interpretation,\n getBrb: (self) => self?.controls?.brb,\n\n getLayout: (self) =>\n Array.isArray(self?.controls?.layouts) ? self.controls.layouts[0].type : undefined,\n\n getRoles: (self) =>\n (self?.controls?.role?.roles || []).reduce((roles, role) => {\n if (role.hasRole) {\n roles.push(role.type);\n }\n\n return roles;\n }, []),\n\n canNotViewTheParticipantList: (self) => !!self?.canNotViewTheParticipantList,\n\n isSharingBlocked: (self) => !!self?.isSharingBlocked,\n\n getSelves: (oldParsedSelf, newSelf, deviceId, participants: Array<any>) => {\n const previous = oldParsedSelf;\n const current = newSelf && SelfUtils.parse(newSelf, deviceId, participants);\n const updates: any = {};\n\n updates.hasUserEnteredLobby = SelfUtils.hasUserEnteredLobby(previous, current);\n updates.hasUserBeenAdmitted = SelfUtils.hasUserBeenAdmitted(previous, current);\n updates.isVideoMutedByOthersChanged = SelfUtils.videoMutedByOthersChanged(previous, current);\n updates.isMutedByOthersChanged = SelfUtils.mutedByOthersChanged(previous, current);\n updates.localAudioUnmuteRequestedByServer = SelfUtils.localAudioUnmuteRequestedByServer(\n previous,\n current\n );\n updates.localAudioUnmuteRequiredByServer = SelfUtils.localAudioUnmuteRequiredByServer(\n previous,\n current\n );\n updates.moderatorChanged = SelfUtils.moderatorChanged(previous, current);\n updates.isRolesChanged = SelfUtils.isRolesChanged(previous, current);\n updates.isMediaInactiveOrReleased = SelfUtils.wasMediaInactiveOrReleased(previous, current);\n updates.isUserObserving = SelfUtils.isDeviceObserving(previous, current);\n updates.layoutChanged = SelfUtils.layoutChanged(previous, current);\n\n updates.isMediaInactive = SelfUtils.isMediaInactive(previous, current);\n updates.audioStateChange =\n previous?.currentMediaStatus.audio !== current.currentMediaStatus.audio;\n updates.videoStateChange =\n previous?.currentMediaStatus.video !== current.currentMediaStatus.video;\n updates.shareStateChange =\n previous?.currentMediaStatus.share !== current.currentMediaStatus.share;\n\n updates.canNotViewTheParticipantListChanged =\n previous?.canNotViewTheParticipantList !== current.canNotViewTheParticipantList;\n updates.isSharingBlockedChanged = previous?.isSharingBlocked !== current.isSharingBlocked;\n updates.breakoutsChanged = SelfUtils.breakoutsChanged(previous, current);\n updates.interpretationChanged = SelfUtils.interpretationChanged(previous, current);\n updates.brbChanged = SelfUtils.brbChanged(previous, current);\n\n return {\n previous,\n current,\n updates,\n };\n },\n\n /**\n * Checks if user has joined the meeting\n * @param {Object} self\n * @returns {boolean} isJoined\n */\n isJoined: (self: any) => self?.state === _JOINED_,\n\n /**\n * Validate if the Meeting Layout Controls Layout has changed.\n *\n * @param {Self} previous - Previous self state\n * @param {Self} current - Current self state [per event]\n * @returns {boolean} - If the Meeting Layout Controls Layout has changed.\n */\n layoutChanged: (previous: any, current: any) =>\n current?.layout && previous?.layout !== current?.layout,\n\n breakoutsChanged: (previous, current) =>\n !isEqual(previous?.breakoutSessions, current?.breakoutSessions) && !!current?.breakout,\n\n interpretationChanged: (previous, current) =>\n !isEqual(previous?.interpretation, current?.interpretation) && !!current?.interpretation,\n\n brbChanged: (previous, current) =>\n !isEqual(previous?.brb, current?.brb) && current?.brb !== undefined,\n\n isMediaInactive: (previous, current) => {\n if (\n previous &&\n previous.joinedWith &&\n previous.joinedWith.mediaSessions &&\n current &&\n current.joinedWith &&\n current.joinedWith.mediaSessions\n ) {\n const previousMediaStatus = SelfUtils.getMediaStatus(previous.joinedWith.mediaSessions);\n const currentMediaStatus = SelfUtils.getMediaStatus(current.joinedWith.mediaSessions);\n\n if (\n previousMediaStatus.audio &&\n currentMediaStatus.audio &&\n previousMediaStatus.audio.state !== MEDIA_STATE.inactive &&\n currentMediaStatus.audio.state === MEDIA_STATE.inactive &&\n currentMediaStatus.audio.direction !== MEDIA_STATE.inactive\n ) {\n return true;\n }\n\n if (\n previousMediaStatus.video &&\n currentMediaStatus.video &&\n previousMediaStatus.video.state !== MEDIA_STATE.inactive &&\n currentMediaStatus.video.state === MEDIA_STATE.inactive &&\n currentMediaStatus.video.direction !== MEDIA_STATE.inactive\n ) {\n return true;\n }\n\n if (\n previousMediaStatus.share &&\n currentMediaStatus.share &&\n previousMediaStatus.share.state !== MEDIA_STATE.inactive &&\n currentMediaStatus.share.state === MEDIA_STATE.inactive &&\n currentMediaStatus.share.direction !== MEDIA_STATE.inactive\n ) {\n return true;\n }\n\n return false;\n }\n\n return false;\n },\n\n getLastModified: (self) => {\n if (\n !self ||\n !self.controls ||\n !self.controls.audio ||\n !self.controls.audio.meta ||\n !self.controls.audio.meta.lastModified\n ) {\n return null;\n }\n\n return self.controls.audio.meta.lastModified;\n },\n\n getModifiedBy: (self) => {\n if (\n !self ||\n !self.controls ||\n !self.controls.audio ||\n !self.controls.audio.meta ||\n !self.controls.audio.meta.modifiedBy\n ) {\n return null;\n }\n\n return self.controls.audio.meta.modifiedBy;\n },\n\n /**\n * get the id from the self object\n * @param {Object} self\n * @returns {String}\n */\n getSelfIdentity: (self: any) => {\n if (!self || !self.person) {\n return null;\n }\n\n return self.person.id;\n },\n\n /**\n * get the \"remote video mute\" property from the self object\n * @param {Object} self\n * @returns {Boolean}\n */\n getRemoteVideoMuted: (self: any) => {\n if (!self || !self.controls || !self.controls.video) {\n return null;\n }\n\n return self.controls.video.muted;\n },\n\n /**\n * get the \"remote mute\" property from the self object\n * @param {Object} self\n * @returns {Boolean}\n */\n getRemoteMuted: (self: any) => {\n if (!self || !self.controls || !self.controls.audio) {\n return null;\n }\n\n return self.controls.audio.muted;\n },\n\n getLocalAudioUnmuteRequested: (self) => !!self?.controls?.audio?.requestedToUnmute,\n\n // requestedToUnmute timestamp\n getLocalAudioUnmuteRequestedTimeStamp: (self) =>\n Date.parse(self?.controls?.audio?.lastModifiedRequestedToUnmute) || 0,\n\n getUnmuteAllowed: (self) => {\n if (!self || !self.controls || !self.controls.audio) {\n return null;\n }\n\n return !self.controls.audio.disallowUnmute;\n },\n\n getLocalAudioUnmuteRequired: (self) => !!self?.controls?.audio?.localAudioUnmuteRequired,\n\n getStatus: (status) => ({\n audio: status.audioStatus,\n video: status.videoStatus,\n slides: status.videoSlidesStatus,\n }),\n\n /**\n * @param {Object} oldSelf\n * @param {Object} changedSelf\n * @returns {Boolean}\n */\n wasMediaInactiveOrReleased: (oldSelf: any = {}, changedSelf: any) =>\n oldSelf.joinedWith &&\n oldSelf.joinedWith.state === _JOINED_ &&\n changedSelf.joinedWith &&\n changedSelf.joinedWith.state === _LEFT_ &&\n (changedSelf.joinedWith.reason === MEETING_END_REASON.INACTIVE ||\n changedSelf.joinedWith.reason === MEETING_END_REASON.MEDIA_RELEASED),\n\n /**\n * @param {String | undefined} state meeting state\n * @param {any} joinedWith device that user has joined with\n * @param {any} pairedWith device that user is paired with\n * @returns {Boolean | undefined} true if user is in lobby, false if not, undefined if it cannot be determined\n */\n isLocusUserUnadmitted: (state?: string, joinedWith?: any, pairedWith?: any) => {\n if (state === undefined) {\n return undefined;\n }\n if (joinedWith?.intent?.type === _OBSERVE_ && pairedWith) {\n // we are paired with a device, so need to check the lobby state for that device\n return pairedWith.intent?.type === _WAIT_ && state === _IDLE_;\n }\n\n return joinedWith?.intent?.type === _WAIT_ && state === _IDLE_;\n },\n\n /**\n * @param {String | undefined} state meeting state\n * @param {any} joinedWith device that user has joined with\n * @param {any} pairedWith device that user is paired with\n * @returns {Boolean}\n */\n isLocusUserAdmitted: (state?: string, joinedWith?: any, pairedWith?: any) => {\n if (state === undefined) {\n return undefined;\n }\n\n if (joinedWith?.intent?.type === _OBSERVE_ && pairedWith) {\n // we are paired with a device, so need to check the lobby state for that device\n return pairedWith.intent?.type !== _WAIT_ && state === _JOINED_;\n }\n\n return joinedWith?.intent?.type !== _WAIT_ && state === _JOINED_;\n },\n\n /**\n * @param {Object} oldSelf\n * @param {Object} changedSelf\n * @returns {Boolean} true if user has just been placed in the lobby\n * @throws {Error} when self is undefined\n */\n hasUserEnteredLobby: (oldSelf: any, changedSelf: any) => {\n if (!changedSelf) {\n throw new ParameterError(\n 'changedSelf must be defined to determine if self is unadmitted as guest.'\n );\n }\n\n const wasInLobby = SelfUtils.isLocusUserUnadmitted(\n oldSelf?.state,\n oldSelf?.joinedWith,\n oldSelf?.pairedWith\n );\n\n const isInLobby = SelfUtils.isLocusUserUnadmitted(\n changedSelf?.state,\n changedSelf?.joinedWith,\n changedSelf?.pairedWith\n );\n\n return !wasInLobby && isInLobby;\n },\n\n moderatorChanged: (oldSelf, changedSelf) => {\n if (!oldSelf) {\n return true;\n }\n if (!changedSelf) {\n throw new ParameterError(\n 'New self must be defined to determine if self transitioned moderator status.'\n );\n }\n\n return oldSelf.moderator !== changedSelf.moderator;\n },\n\n /**\n * determine whether the roles of self is changed or not\n * @param {Object} oldSelf\n * @param {Object} changedSelf\n * @returns {Boolean}\n */\n isRolesChanged: (oldSelf, changedSelf) => {\n if (!changedSelf) {\n // no new self means no change\n return false;\n }\n\n return !isEqual(oldSelf?.roles, changedSelf?.roles);\n },\n /**\n * @param {Object} oldSelf\n * @param {Object} changedSelf\n * @returns {Boolean}\n * @throws {Error} if changed self was undefined\n */\n isDeviceObserving: (oldSelf: any, changedSelf: any) =>\n oldSelf &&\n oldSelf.joinedWith?.intent?.type === _MOVE_MEDIA_ &&\n changedSelf &&\n changedSelf.joinedWith?.intent?.type === _OBSERVE_,\n\n /**\n * @param {Object} oldSelf\n * @param {Object} changedSelf\n * @returns {Boolean} true if the user has just been admitted from lobby into the meeting\n * @throws {Error} if changed self was undefined\n */\n hasUserBeenAdmitted: (oldSelf: any, changedSelf: any) => {\n if (!oldSelf) {\n // if there was no previous locus, it couldn't have been admitted yet\n return false;\n }\n if (!changedSelf) {\n throw new ParameterError(\n 'New self must be defined to determine if self transitioned to admitted as guest.'\n );\n }\n\n const wasInLobby = SelfUtils.isLocusUserUnadmitted(\n oldSelf?.state,\n oldSelf?.joinedWith,\n oldSelf?.pairedWith\n );\n\n const isAdmitted = SelfUtils.isLocusUserAdmitted(\n changedSelf?.state,\n changedSelf?.joinedWith,\n changedSelf?.pairedWith\n );\n\n return wasInLobby && isAdmitted && isAdmitted !== undefined;\n },\n\n videoMutedByOthersChanged: (oldSelf, changedSelf) => {\n if (!changedSelf) {\n throw new ParameterError(\n 'New self must be defined to determine if self was video muted by others.'\n );\n }\n\n if (!oldSelf || oldSelf.remoteVideoMuted === null) {\n if (changedSelf.remoteVideoMuted) {\n return true; // this happens when host disables \"Allow start video\"\n }\n\n // we don't want to be sending the 'meeting:self:videoUnmutedByOthers' notification on meeting join\n return false;\n }\n\n return oldSelf.remoteVideoMuted !== changedSelf.remoteVideoMuted;\n },\n\n mutedByOthersChanged: (oldSelf, changedSelf) => {\n if (!changedSelf) {\n throw new ParameterError(\n 'New self must be defined to determine if self was muted by others.'\n );\n }\n\n if (!oldSelf || oldSelf.remoteMuted === null) {\n if (changedSelf.remoteMuted) {\n return true; // this happens when mute on-entry is enabled\n }\n\n // we don't want to be sending the 'meeting:self:unmutedByOthers' notification on meeting join\n return false;\n }\n\n // there is no need to trigger user update if no one muted user\n if (changedSelf.selfIdentity === changedSelf.modifiedBy) {\n return false;\n }\n\n return (\n changedSelf.remoteMuted !== null &&\n (oldSelf.remoteMuted !== changedSelf.remoteMuted ||\n (changedSelf.remoteMuted && oldSelf.unmuteAllowed !== changedSelf.unmuteAllowed))\n );\n },\n\n localAudioUnmuteRequestedByServer: (oldSelf: any = {}, changedSelf: any) => {\n if (!changedSelf) {\n throw new ParameterError(\n 'New self must be defined to determine if self received request to unmute.'\n );\n }\n\n return (\n changedSelf.localAudioUnmuteRequested &&\n changedSelf.localAudioUnmuteRequestedTimeStamp > oldSelf.localAudioUnmuteRequestedTimeStamp\n );\n },\n\n localAudioUnmuteRequiredByServer: (oldSelf: any = {}, changedSelf: any) => {\n if (!changedSelf) {\n throw new ParameterError(\n 'New self must be defined to determine if localAudioUnmuteRequired changed.'\n );\n }\n\n return (\n !changedSelf.remoteMuted &&\n changedSelf.localAudioUnmuteRequired &&\n oldSelf.localAudioUnmuteRequired !== changedSelf.localAudioUnmuteRequired\n );\n },\n\n /**\n * extract the sipUrl from the partner\n * @param {Object} partner\n * @param {Object} info\n * @returns {Object}\n */\n\n getSipUrl: (partner: any, type, sipUri) => {\n // For webex meeting the sipUrl gets updated in info parser\n if (partner && type === _CALL_) {\n return {sipUri: partner.person.sipUrl || partner.person.id};\n }\n\n return {sipUri};\n },\n\n getMediaStatus: (mediaSessions = []): {audio: any; video: any; share: any} => {\n const mediaStatus = {\n audio: {},\n video: {},\n share: {},\n };\n\n mediaStatus.audio = mediaSessions.find(\n (media) => media.mediaType === AUDIO && media.mediaContent === MediaContent.main\n );\n mediaStatus.video = mediaSessions.find(\n (media) => media.mediaType === VIDEO && media.mediaContent === MediaContent.main\n );\n mediaStatus.share = mediaSessions.find(\n (media) => media.mediaType === VIDEO && media.mediaContent === MediaContent.slides\n );\n\n return mediaStatus;\n },\n\n getReplacedBreakoutMoveId: (self: any, deviceId: string) => {\n if (self && Array.isArray(self.devices)) {\n const joinedDevice = self.devices.find((device) => deviceId === device.url);\n if (Array.isArray(joinedDevice?.replaces)) {\n return joinedDevice.replaces[0]?.breakoutMoveId;\n }\n }\n\n return null;\n },\n};\n\nexport default SelfUtils;\n"],"mappings":"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"}
@@ -250,13 +250,12 @@ export default class LocusInfo extends EventsScope {
250
250
  updateReplace(replace: object): void;
251
251
  /**
252
252
  * handles when the locus.self is updated
253
- * @param {Object} self the locus.mediaShares property
254
- * @param {Array} participants the locus.participants property
253
+ * @param {Object} self the new locus.self
255
254
  * @returns {undefined}
256
255
  * @memberof LocusInfo
257
256
  * emits internal events self_admitted_guest, self_unadmitted_guest, locus_info_update_self
258
257
  */
259
- updateSelf(self: any, participants: Array<any>): void;
258
+ updateSelf(self: any): void;
260
259
  /**
261
260
  * handles when the locus.url is updated
262
261
  * @param {String} url
@@ -3,9 +3,10 @@ declare const SelfUtils: {
3
3
  * parses the relevant values for self: muted, guest, moderator, mediaStatus, state, joinedWith, pstnDevices, creator, id
4
4
  * @param {Object} self
5
5
  * @param {String} deviceId
6
+ * @param {Array} participants
6
7
  * @returns {undefined}
7
8
  */
8
- parse: (self: any, deviceId: string) => {
9
+ parse: (self: any, deviceId: string, participants: Array<any>) => {
9
10
  remoteVideoMuted: any;
10
11
  remoteMuted: any;
11
12
  unmuteAllowed: boolean;
@@ -23,6 +24,7 @@ declare const SelfUtils: {
23
24
  };
24
25
  state: any;
25
26
  joinedWith: any;
27
+ pairedWith: any;
26
28
  pstnDevices: any;
27
29
  currentMediaStatus: {
28
30
  audio: any;
@@ -52,46 +54,8 @@ declare const SelfUtils: {
52
54
  getRoles: (self: any) => any;
53
55
  canNotViewTheParticipantList: (self: any) => boolean;
54
56
  isSharingBlocked: (self: any) => boolean;
55
- getSelves: (oldSelf: any, newSelf: any, deviceId: any) => {
56
- previous: {
57
- remoteVideoMuted: any;
58
- remoteMuted: any;
59
- unmuteAllowed: boolean;
60
- localAudioUnmuteRequested: boolean;
61
- localAudioUnmuteRequestedTimeStamp: number;
62
- localAudioUnmuteRequired: boolean;
63
- lastModified: any;
64
- modifiedBy: any;
65
- guest: any;
66
- moderator: any;
67
- mediaStatus: {
68
- audio: any;
69
- video: any;
70
- slides: any;
71
- };
72
- state: any;
73
- joinedWith: any;
74
- pstnDevices: any;
75
- currentMediaStatus: {
76
- audio: any;
77
- video: any;
78
- share: any;
79
- };
80
- creator: any;
81
- selfId: any;
82
- selfIdentity: any;
83
- selfUrl: any;
84
- removed: any;
85
- roles: any;
86
- isUserUnadmitted: boolean;
87
- layout: any;
88
- canNotViewTheParticipantList: boolean;
89
- isSharingBlocked: boolean;
90
- breakoutSessions: any;
91
- breakout: any;
92
- interpretation: any;
93
- brb: any;
94
- };
57
+ getSelves: (oldParsedSelf: any, newSelf: any, deviceId: any, participants: Array<any>) => {
58
+ previous: any;
95
59
  current: {
96
60
  remoteVideoMuted: any;
97
61
  remoteMuted: any;
@@ -110,6 +74,7 @@ declare const SelfUtils: {
110
74
  };
111
75
  state: any;
112
76
  joinedWith: any;
77
+ pairedWith: any;
113
78
  pstnDevices: any;
114
79
  currentMediaStatus: {
115
80
  audio: any;
@@ -187,22 +152,26 @@ declare const SelfUtils: {
187
152
  */
188
153
  wasMediaInactiveOrReleased: (oldSelf: any, changedSelf: any) => boolean;
189
154
  /**
190
- * @param {Object} check
191
- * @returns {Boolean}
155
+ * @param {String | undefined} state meeting state
156
+ * @param {any} joinedWith device that user has joined with
157
+ * @param {any} pairedWith device that user is paired with
158
+ * @returns {Boolean | undefined} true if user is in lobby, false if not, undefined if it cannot be determined
192
159
  */
193
- isLocusUserUnadmitted: (check: any) => boolean;
160
+ isLocusUserUnadmitted: (state?: string, joinedWith?: any, pairedWith?: any) => boolean;
194
161
  /**
195
- * @param {Object} check
162
+ * @param {String | undefined} state meeting state
163
+ * @param {any} joinedWith device that user has joined with
164
+ * @param {any} pairedWith device that user is paired with
196
165
  * @returns {Boolean}
197
166
  */
198
- isLocusUserAdmitted: (check: any) => boolean;
167
+ isLocusUserAdmitted: (state?: string, joinedWith?: any, pairedWith?: any) => boolean;
199
168
  /**
200
169
  * @param {Object} oldSelf
201
170
  * @param {Object} changedSelf
202
- * @returns {Boolean}
171
+ * @returns {Boolean} true if user has just been placed in the lobby
203
172
  * @throws {Error} when self is undefined
204
173
  */
205
- isUserUnadmitted: (oldSelf: any, changedSelf: any) => boolean;
174
+ hasUserEnteredLobby: (oldSelf: any, changedSelf: any) => boolean;
206
175
  moderatorChanged: (oldSelf: any, changedSelf: any) => boolean;
207
176
  /**
208
177
  * determine whether the roles of self is changed or not
@@ -221,10 +190,10 @@ declare const SelfUtils: {
221
190
  /**
222
191
  * @param {Object} oldSelf
223
192
  * @param {Object} changedSelf
224
- * @returns {Boolean}
193
+ * @returns {Boolean} true if the user has just been admitted from lobby into the meeting
225
194
  * @throws {Error} if changed self was undefined
226
195
  */
227
- isUserAdmitted: (oldSelf: object, changedSelf: object) => boolean;
196
+ hasUserBeenAdmitted: (oldSelf: any, changedSelf: any) => boolean;
228
197
  videoMutedByOthersChanged: (oldSelf: any, changedSelf: any) => boolean;
229
198
  mutedByOthersChanged: (oldSelf: any, changedSelf: any) => boolean;
230
199
  localAudioUnmuteRequestedByServer: (oldSelf: any, changedSelf: any) => boolean;
@@ -458,7 +458,7 @@ var Webinar = _webexCore.WebexPlugin.extend({
458
458
  }, _callee7);
459
459
  }))();
460
460
  },
461
- version: "3.8.0-next.70"
461
+ version: "3.8.0-next.72"
462
462
  });
463
463
  var _default = exports.default = Webinar;
464
464
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -43,7 +43,7 @@
43
43
  "@webex/eslint-config-legacy": "0.0.0",
44
44
  "@webex/jest-config-legacy": "0.0.0",
45
45
  "@webex/legacy-tools": "0.0.0",
46
- "@webex/plugin-meetings": "3.8.0-next.70",
46
+ "@webex/plugin-meetings": "3.8.0-next.72",
47
47
  "@webex/plugin-rooms": "3.8.0-next.24",
48
48
  "@webex/test-helper-chai": "3.8.0-next.20",
49
49
  "@webex/test-helper-mocha": "3.8.0-next.20",
@@ -71,7 +71,7 @@
71
71
  "@webex/internal-plugin-metrics": "3.8.0-next.20",
72
72
  "@webex/internal-plugin-support": "3.8.0-next.24",
73
73
  "@webex/internal-plugin-user": "3.8.0-next.20",
74
- "@webex/internal-plugin-voicea": "3.8.0-next.70",
74
+ "@webex/internal-plugin-voicea": "3.8.0-next.72",
75
75
  "@webex/media-helpers": "3.8.0-next.24",
76
76
  "@webex/plugin-people": "3.8.0-next.22",
77
77
  "@webex/plugin-rooms": "3.8.0-next.24",
@@ -93,5 +93,5 @@
93
93
  "//": [
94
94
  "TODO: upgrade jwt-decode when moving to node 18"
95
95
  ],
96
- "version": "3.8.0-next.70"
96
+ "version": "3.8.0-next.72"
97
97
  }
@@ -45,6 +45,8 @@ const Breakouts = WebexPlugin.extend({
45
45
  intervalID: 'number',
46
46
  meetingId: 'string',
47
47
  canManageBreakouts: 'boolean', // appear the ability to manage breakouts
48
+ mainGroupId: 'string', // appears from the moment you enable breakouts
49
+ mainSessionId: 'string', // appears from the moment you enable breakouts
48
50
  },
49
51
  children: {
50
52
  currentBreakoutSession: Breakout,
@@ -544,6 +546,28 @@ const Breakouts = WebexPlugin.extend({
544
546
  }
545
547
  },
546
548
 
549
+ /**
550
+ * set main group id
551
+ * @param {Object} breakoutInfo -- breakout groups
552
+ * @returns {void}
553
+ */
554
+ _setMainGroupId(breakoutInfo) {
555
+ if (breakoutInfo?.body?.mainGroupId) {
556
+ this.set('mainGroupId', breakoutInfo.body.mainGroupId);
557
+ }
558
+ },
559
+
560
+ /**
561
+ * set main session id
562
+ * @param {Object} breakoutInfo -- breakout groups
563
+ * @returns {void}
564
+ */
565
+ _setMainSessionId(breakoutInfo) {
566
+ if (breakoutInfo?.body?.mainSessionId) {
567
+ this.set('mainSessionId', breakoutInfo.body.mainSessionId);
568
+ }
569
+ },
570
+
547
571
  /**
548
572
  * Create new breakout sessions
549
573
  * @param {object} params -- breakout session group
@@ -567,6 +591,8 @@ const Breakouts = WebexPlugin.extend({
567
591
  });
568
592
 
569
593
  this._setManageGroups(breakoutInfo);
594
+ this._setMainGroupId(breakoutInfo);
595
+ this._setMainSessionId(breakoutInfo);
570
596
 
571
597
  // clear edit lock info after save breakout session info
572
598
  this._clearEditLockInfo();
@@ -630,6 +656,8 @@ const Breakouts = WebexPlugin.extend({
630
656
  });
631
657
 
632
658
  this._setManageGroups(breakoutInfo);
659
+ this._setMainGroupId(breakoutInfo);
660
+ this._setMainSessionId(breakoutInfo);
633
661
 
634
662
  return breakoutInfo;
635
663
  },
@@ -665,6 +693,8 @@ const Breakouts = WebexPlugin.extend({
665
693
  });
666
694
 
667
695
  this._setManageGroups(breakoutInfo);
696
+ this._setMainGroupId(breakoutInfo);
697
+ this._setMainSessionId(breakoutInfo);
668
698
 
669
699
  return breakoutInfo;
670
700
  },
@@ -718,6 +748,9 @@ const Breakouts = WebexPlugin.extend({
718
748
  });
719
749
 
720
750
  this._setManageGroups(breakout);
751
+ this._setMainGroupId(breakout);
752
+ this._setMainSessionId(breakout);
753
+
721
754
  if (editlock && breakout.body?.editlock?.token) {
722
755
  this.set('editLock', breakout.body.editlock);
723
756
  this.keepEditLockAlive();
@@ -916,6 +949,42 @@ const Breakouts = WebexPlugin.extend({
916
949
  body,
917
950
  });
918
951
  },
952
+ /**
953
+ * Move participants to main session lobby
954
+ * @param {Array} sessions
955
+ * @param {string} sessions[].participants - Participant IDs to move
956
+ * @returns {void}
957
+ */
958
+ moveToLobby(sessions: Array<{participants: string[]}>) {
959
+ if (!this.mainGroupId || !this.mainSessionId) {
960
+ throw new Error(
961
+ 'Main group ID and session ID must be available to move participants to lobby'
962
+ );
963
+ }
964
+
965
+ const updatedSessions = sessions.map((item) => {
966
+ return {
967
+ id: this.mainSessionId,
968
+ participants: item.participants,
969
+ targetState: 'LOBBY',
970
+ };
971
+ });
972
+
973
+ const body = {
974
+ groups: [
975
+ {
976
+ id: this.mainGroupId,
977
+ sessions: updatedSessions,
978
+ },
979
+ ],
980
+ };
981
+
982
+ return this.request({
983
+ method: HTTP_VERBS.PUT,
984
+ uri: `${this.url}/dynamicAssign`,
985
+ body,
986
+ });
987
+ },
919
988
  /**
920
989
  * trigger ASK_RETURN_TO_MAIN event when main session requested
921
990
  * @param {Object} breakout