@webex/plugin-meetings 3.7.0-next.6 → 3.7.0-next.60

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.
Files changed (138) hide show
  1. package/dist/annotation/index.js +17 -0
  2. package/dist/annotation/index.js.map +1 -1
  3. package/dist/breakouts/breakout.js +1 -1
  4. package/dist/breakouts/index.js +1 -1
  5. package/dist/common/errors/join-forbidden-error.js +52 -0
  6. package/dist/common/errors/join-forbidden-error.js.map +1 -0
  7. package/dist/common/errors/{webinar-registration-error.js → join-webinar-error.js} +12 -12
  8. package/dist/common/errors/join-webinar-error.js.map +1 -0
  9. package/dist/common/errors/multistream-not-supported-error.js +53 -0
  10. package/dist/common/errors/multistream-not-supported-error.js.map +1 -0
  11. package/dist/config.js +1 -1
  12. package/dist/config.js.map +1 -1
  13. package/dist/constants.js +46 -5
  14. package/dist/constants.js.map +1 -1
  15. package/dist/index.js +16 -11
  16. package/dist/index.js.map +1 -1
  17. package/dist/interpretation/index.js +1 -1
  18. package/dist/interpretation/siLanguage.js +1 -1
  19. package/dist/locus-info/index.js +14 -3
  20. package/dist/locus-info/index.js.map +1 -1
  21. package/dist/locus-info/selfUtils.js +35 -17
  22. package/dist/locus-info/selfUtils.js.map +1 -1
  23. package/dist/meeting/brbState.js +167 -0
  24. package/dist/meeting/brbState.js.map +1 -0
  25. package/dist/meeting/in-meeting-actions.js +2 -0
  26. package/dist/meeting/in-meeting-actions.js.map +1 -1
  27. package/dist/meeting/index.js +774 -649
  28. package/dist/meeting/index.js.map +1 -1
  29. package/dist/meeting/locusMediaRequest.js +9 -0
  30. package/dist/meeting/locusMediaRequest.js.map +1 -1
  31. package/dist/meeting/muteState.js +1 -6
  32. package/dist/meeting/muteState.js.map +1 -1
  33. package/dist/meeting/request.js +30 -0
  34. package/dist/meeting/request.js.map +1 -1
  35. package/dist/meeting/request.type.js.map +1 -1
  36. package/dist/meeting/util.js +16 -16
  37. package/dist/meeting/util.js.map +1 -1
  38. package/dist/meeting-info/meeting-info-v2.js +96 -33
  39. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  40. package/dist/meeting-info/utilv2.js +1 -1
  41. package/dist/meeting-info/utilv2.js.map +1 -1
  42. package/dist/meetings/index.js +107 -55
  43. package/dist/meetings/index.js.map +1 -1
  44. package/dist/meetings/meetings.types.js +2 -0
  45. package/dist/meetings/meetings.types.js.map +1 -1
  46. package/dist/meetings/util.js +1 -1
  47. package/dist/meetings/util.js.map +1 -1
  48. package/dist/member/index.js +9 -0
  49. package/dist/member/index.js.map +1 -1
  50. package/dist/member/types.js.map +1 -1
  51. package/dist/member/util.js +39 -28
  52. package/dist/member/util.js.map +1 -1
  53. package/dist/metrics/constants.js +3 -2
  54. package/dist/metrics/constants.js.map +1 -1
  55. package/dist/multistream/remoteMedia.js +30 -15
  56. package/dist/multistream/remoteMedia.js.map +1 -1
  57. package/dist/multistream/sendSlotManager.js +24 -0
  58. package/dist/multistream/sendSlotManager.js.map +1 -1
  59. package/dist/reachability/index.js +31 -3
  60. package/dist/reachability/index.js.map +1 -1
  61. package/dist/roap/index.js +10 -8
  62. package/dist/roap/index.js.map +1 -1
  63. package/dist/types/annotation/index.d.ts +5 -0
  64. package/dist/types/common/errors/join-forbidden-error.d.ts +15 -0
  65. package/dist/types/common/errors/{webinar-registration-error.d.ts → join-webinar-error.d.ts} +2 -2
  66. package/dist/types/common/errors/multistream-not-supported-error.d.ts +17 -0
  67. package/dist/types/constants.d.ts +38 -1
  68. package/dist/types/index.d.ts +3 -3
  69. package/dist/types/locus-info/index.d.ts +2 -1
  70. package/dist/types/meeting/brbState.d.ts +54 -0
  71. package/dist/types/meeting/in-meeting-actions.d.ts +2 -0
  72. package/dist/types/meeting/index.d.ts +21 -12
  73. package/dist/types/meeting/locusMediaRequest.d.ts +4 -0
  74. package/dist/types/meeting/request.d.ts +12 -1
  75. package/dist/types/meeting/request.type.d.ts +6 -0
  76. package/dist/types/meeting/util.d.ts +1 -1
  77. package/dist/types/meeting-info/meeting-info-v2.d.ts +27 -4
  78. package/dist/types/meetings/index.d.ts +19 -1
  79. package/dist/types/meetings/meetings.types.d.ts +8 -0
  80. package/dist/types/member/index.d.ts +1 -0
  81. package/dist/types/member/types.d.ts +7 -0
  82. package/dist/types/metrics/constants.d.ts +2 -1
  83. package/dist/types/multistream/sendSlotManager.d.ts +8 -1
  84. package/dist/types/reachability/index.d.ts +9 -1
  85. package/dist/webinar/index.js +354 -3
  86. package/dist/webinar/index.js.map +1 -1
  87. package/package.json +23 -22
  88. package/src/annotation/index.ts +16 -0
  89. package/src/common/errors/join-forbidden-error.ts +26 -0
  90. package/src/common/errors/join-webinar-error.ts +24 -0
  91. package/src/common/errors/multistream-not-supported-error.ts +30 -0
  92. package/src/config.ts +1 -1
  93. package/src/constants.ts +43 -3
  94. package/src/index.ts +5 -3
  95. package/src/locus-info/index.ts +20 -3
  96. package/src/locus-info/selfUtils.ts +24 -6
  97. package/src/meeting/brbState.ts +169 -0
  98. package/src/meeting/in-meeting-actions.ts +4 -0
  99. package/src/meeting/index.ts +256 -82
  100. package/src/meeting/locusMediaRequest.ts +7 -0
  101. package/src/meeting/muteState.ts +1 -6
  102. package/src/meeting/request.ts +26 -1
  103. package/src/meeting/request.type.ts +7 -0
  104. package/src/meeting/util.ts +8 -10
  105. package/src/meeting-info/meeting-info-v2.ts +74 -11
  106. package/src/meeting-info/utilv2.ts +3 -1
  107. package/src/meetings/index.ts +79 -20
  108. package/src/meetings/meetings.types.ts +10 -0
  109. package/src/meetings/util.ts +2 -1
  110. package/src/member/index.ts +9 -0
  111. package/src/member/types.ts +8 -0
  112. package/src/member/util.ts +34 -24
  113. package/src/metrics/constants.ts +2 -1
  114. package/src/multistream/remoteMedia.ts +28 -15
  115. package/src/multistream/sendSlotManager.ts +31 -0
  116. package/src/reachability/index.ts +29 -1
  117. package/src/roap/index.ts +10 -8
  118. package/src/webinar/index.ts +197 -3
  119. package/test/unit/spec/annotation/index.ts +46 -1
  120. package/test/unit/spec/locus-info/index.js +292 -60
  121. package/test/unit/spec/locus-info/selfConstant.js +7 -0
  122. package/test/unit/spec/locus-info/selfUtils.js +101 -1
  123. package/test/unit/spec/meeting/brbState.ts +114 -0
  124. package/test/unit/spec/meeting/in-meeting-actions.ts +2 -0
  125. package/test/unit/spec/meeting/index.js +733 -106
  126. package/test/unit/spec/meeting/muteState.js +0 -24
  127. package/test/unit/spec/meeting/utils.js +22 -19
  128. package/test/unit/spec/meeting-info/meetinginfov2.js +46 -4
  129. package/test/unit/spec/meeting-info/utilv2.js +17 -0
  130. package/test/unit/spec/meetings/index.js +159 -18
  131. package/test/unit/spec/meetings/utils.js +10 -0
  132. package/test/unit/spec/member/util.js +52 -11
  133. package/test/unit/spec/multistream/remoteMedia.ts +11 -7
  134. package/test/unit/spec/reachability/index.ts +120 -10
  135. package/test/unit/spec/roap/index.ts +47 -0
  136. package/test/unit/spec/webinar/index.ts +457 -0
  137. package/dist/common/errors/webinar-registration-error.js.map +0 -1
  138. package/src/common/errors/webinar-registration-error.ts +0 -27
@@ -65,7 +65,8 @@ SelfUtils.parse = function (self, deviceId) {
65
65
  isSharingBlocked: SelfUtils.isSharingBlocked(self),
66
66
  breakoutSessions: SelfUtils.getBreakoutSessions(self),
67
67
  breakout: SelfUtils.getBreakout(self),
68
- interpretation: SelfUtils.getInterpretation(self)
68
+ interpretation: SelfUtils.getInterpretation(self),
69
+ brb: SelfUtils.getBrb(self)
69
70
  };
70
71
  }
71
72
  return null;
@@ -82,13 +83,17 @@ SelfUtils.getInterpretation = function (self) {
82
83
  var _self$controls3;
83
84
  return self === null || self === void 0 ? void 0 : (_self$controls3 = self.controls) === null || _self$controls3 === void 0 ? void 0 : _self$controls3.interpretation;
84
85
  };
85
- SelfUtils.getLayout = function (self) {
86
+ SelfUtils.getBrb = function (self) {
86
87
  var _self$controls4;
87
- return (0, _isArray.default)(self === null || self === void 0 ? void 0 : (_self$controls4 = self.controls) === null || _self$controls4 === void 0 ? void 0 : _self$controls4.layouts) ? self.controls.layouts[0].type : undefined;
88
+ return self === null || self === void 0 ? void 0 : (_self$controls4 = self.controls) === null || _self$controls4 === void 0 ? void 0 : _self$controls4.brb;
89
+ };
90
+ SelfUtils.getLayout = function (self) {
91
+ var _self$controls5;
92
+ return (0, _isArray.default)(self === null || self === void 0 ? void 0 : (_self$controls5 = self.controls) === null || _self$controls5 === void 0 ? void 0 : _self$controls5.layouts) ? self.controls.layouts[0].type : undefined;
88
93
  };
89
94
  SelfUtils.getRoles = function (self) {
90
- var _self$controls5, _self$controls5$role;
91
- return ((self === null || self === void 0 ? void 0 : (_self$controls5 = self.controls) === null || _self$controls5 === void 0 ? void 0 : (_self$controls5$role = _self$controls5.role) === null || _self$controls5$role === void 0 ? void 0 : _self$controls5$role.roles) || []).reduce(function (roles, role) {
95
+ var _self$controls6, _self$controls6$role;
96
+ return ((self === null || self === void 0 ? void 0 : (_self$controls6 = self.controls) === null || _self$controls6 === void 0 ? void 0 : (_self$controls6$role = _self$controls6.role) === null || _self$controls6$role === void 0 ? void 0 : _self$controls6$role.roles) || []).reduce(function (roles, role) {
92
97
  if (role.hasRole) {
93
98
  roles.push(role.type);
94
99
  }
@@ -105,7 +110,7 @@ SelfUtils.getSelves = function (oldSelf, newSelf, deviceId) {
105
110
  var previous = oldSelf && SelfUtils.parse(oldSelf, deviceId);
106
111
  var current = newSelf && SelfUtils.parse(newSelf, deviceId);
107
112
  var updates = {};
108
- updates.isUserUnadmitted = SelfUtils.isUserUnadmitted(current);
113
+ updates.isUserUnadmitted = SelfUtils.isUserUnadmitted(previous, current);
109
114
  updates.isUserAdmitted = SelfUtils.isUserAdmitted(previous, current);
110
115
  updates.isVideoMutedByOthersChanged = SelfUtils.videoMutedByOthersChanged(previous, current);
111
116
  updates.isMutedByOthersChanged = SelfUtils.mutedByOthersChanged(previous, current);
@@ -124,6 +129,7 @@ SelfUtils.getSelves = function (oldSelf, newSelf, deviceId) {
124
129
  updates.isSharingBlockedChanged = (previous === null || previous === void 0 ? void 0 : previous.isSharingBlocked) !== current.isSharingBlocked;
125
130
  updates.breakoutsChanged = SelfUtils.breakoutsChanged(previous, current);
126
131
  updates.interpretationChanged = SelfUtils.interpretationChanged(previous, current);
132
+ updates.brbChanged = SelfUtils.brbChanged(previous, current);
127
133
  return {
128
134
  previous: previous,
129
135
  current: current,
@@ -156,6 +162,9 @@ SelfUtils.breakoutsChanged = function (previous, current) {
156
162
  SelfUtils.interpretationChanged = function (previous, current) {
157
163
  return !(0, _lodash.isEqual)(previous === null || previous === void 0 ? void 0 : previous.interpretation, current === null || current === void 0 ? void 0 : current.interpretation) && !!(current !== null && current !== void 0 && current.interpretation);
158
164
  };
165
+ SelfUtils.brbChanged = function (previous, current) {
166
+ return !(0, _lodash.isEqual)(previous === null || previous === void 0 ? void 0 : previous.brb, current === null || current === void 0 ? void 0 : current.brb) && (current === null || current === void 0 ? void 0 : current.brb) !== undefined;
167
+ };
159
168
  SelfUtils.isMediaInactive = function (previous, current) {
160
169
  if (previous && previous.joinedWith && previous.joinedWith.mediaSessions && current && current.joinedWith && current.joinedWith.mediaSessions) {
161
170
  var previousMediaStatus = SelfUtils.getMediaStatus(previous.joinedWith.mediaSessions);
@@ -222,14 +231,14 @@ SelfUtils.getRemoteMuted = function (self) {
222
231
  return self.controls.audio.muted;
223
232
  };
224
233
  SelfUtils.getLocalAudioUnmuteRequested = function (self) {
225
- var _self$controls6, _self$controls6$audio;
226
- return !!(self !== null && self !== void 0 && (_self$controls6 = self.controls) !== null && _self$controls6 !== void 0 && (_self$controls6$audio = _self$controls6.audio) !== null && _self$controls6$audio !== void 0 && _self$controls6$audio.requestedToUnmute);
234
+ var _self$controls7, _self$controls7$audio;
235
+ return !!(self !== null && self !== void 0 && (_self$controls7 = self.controls) !== null && _self$controls7 !== void 0 && (_self$controls7$audio = _self$controls7.audio) !== null && _self$controls7$audio !== void 0 && _self$controls7$audio.requestedToUnmute);
227
236
  };
228
237
 
229
238
  // requestedToUnmute timestamp
230
239
  SelfUtils.getLocalAudioUnmuteRequestedTimeStamp = function (self) {
231
- var _self$controls7, _self$controls7$audio;
232
- return Date.parse(self === null || self === void 0 ? void 0 : (_self$controls7 = self.controls) === null || _self$controls7 === void 0 ? void 0 : (_self$controls7$audio = _self$controls7.audio) === null || _self$controls7$audio === void 0 ? void 0 : _self$controls7$audio.lastModifiedRequestedToUnmute) || 0;
240
+ var _self$controls8, _self$controls8$audio;
241
+ return Date.parse(self === null || self === void 0 ? void 0 : (_self$controls8 = self.controls) === null || _self$controls8 === void 0 ? void 0 : (_self$controls8$audio = _self$controls8.audio) === null || _self$controls8$audio === void 0 ? void 0 : _self$controls8$audio.lastModifiedRequestedToUnmute) || 0;
233
242
  };
234
243
  SelfUtils.getUnmuteAllowed = function (self) {
235
244
  if (!self || !self.controls || !self.controls.audio) {
@@ -238,8 +247,8 @@ SelfUtils.getUnmuteAllowed = function (self) {
238
247
  return !self.controls.audio.disallowUnmute;
239
248
  };
240
249
  SelfUtils.getLocalAudioUnmuteRequired = function (self) {
241
- var _self$controls8, _self$controls8$audio;
242
- return !!(self !== null && self !== void 0 && (_self$controls8 = self.controls) !== null && _self$controls8 !== void 0 && (_self$controls8$audio = _self$controls8.audio) !== null && _self$controls8$audio !== void 0 && _self$controls8$audio.localAudioUnmuteRequired);
250
+ var _self$controls9, _self$controls9$audio;
251
+ return !!(self !== null && self !== void 0 && (_self$controls9 = self.controls) !== null && _self$controls9 !== void 0 && (_self$controls9$audio = _self$controls9.audio) !== null && _self$controls9$audio !== void 0 && _self$controls9$audio.localAudioUnmuteRequired);
243
252
  };
244
253
  SelfUtils.getStatus = function (status) {
245
254
  return {
@@ -279,15 +288,19 @@ SelfUtils.isLocusUserAdmitted = function (check) {
279
288
  };
280
289
 
281
290
  /**
282
- * @param {Object} self
291
+ * @param {Object} oldSelf
292
+ * @param {Object} changedSelf
283
293
  * @returns {Boolean}
284
294
  * @throws {Error} when self is undefined
285
295
  */
286
- SelfUtils.isUserUnadmitted = function (self) {
287
- if (!self) {
288
- throw new _parameter.default('self must be defined to determine if self is unadmitted as guest.');
296
+ SelfUtils.isUserUnadmitted = function (oldSelf, changedSelf) {
297
+ if (!changedSelf) {
298
+ throw new _parameter.default('changedSelf must be defined to determine if self is unadmitted as guest.');
299
+ }
300
+ if (SelfUtils.isLocusUserUnadmitted(oldSelf)) {
301
+ return false;
289
302
  }
290
- return SelfUtils.isLocusUserUnadmitted(self);
303
+ return SelfUtils.isLocusUserUnadmitted(changedSelf);
291
304
  };
292
305
  SelfUtils.moderatorChanged = function (oldSelf, changedSelf) {
293
306
  if (!oldSelf) {
@@ -365,6 +378,11 @@ SelfUtils.mutedByOthersChanged = function (oldSelf, changedSelf) {
365
378
  // we don't want to be sending the 'meeting:self:unmutedByOthers' notification on meeting join
366
379
  return false;
367
380
  }
381
+
382
+ // there is no need to trigger user update if no one muted user
383
+ if (changedSelf.selfIdentity === changedSelf.modifiedBy) {
384
+ return false;
385
+ }
368
386
  return changedSelf.remoteMuted !== null && (oldSelf.remoteMuted !== changedSelf.remoteMuted || changedSelf.remoteMuted && oldSelf.unmuteAllowed !== changedSelf.unmuteAllowed);
369
387
  };
370
388
  SelfUtils.localAudioUnmuteRequestedByServer = function () {
@@ -1 +1 @@
1
- {"version":3,"names":["_lodash","require","_constants","_parameter","_interopRequireDefault","SelfUtils","PSTN_DEVICE_TYPE","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","_self$controls","_self$controls$breako","controls","sessions","_self$controls2","_self$controls3","_self$controls4","_isArray","default","layouts","undefined","_self$controls5","_self$controls5$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","isJoined","_JOINED_","isEqual","previousMediaStatus","MEDIA_STATE","inactive","direction","meta","person","muted","_self$controls6","_self$controls6$audio","requestedToUnmute","_self$controls7","_self$controls7$audio","Date","lastModifiedRequestedToUnmute","disallowUnmute","_self$controls8","_self$controls8$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 SelfUtils: any = {};\nconst PSTN_DEVICE_TYPE = 'PROVISIONAL';\n\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 */\nSelfUtils.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 };\n }\n\n return null;\n};\n\nSelfUtils.getBreakoutSessions = (self) => self?.controls?.breakout?.sessions;\nSelfUtils.getBreakout = (self) => self?.controls?.breakout;\nSelfUtils.getInterpretation = (self) => self?.controls?.interpretation;\n\nSelfUtils.getLayout = (self) =>\n Array.isArray(self?.controls?.layouts) ? self.controls.layouts[0].type : undefined;\n\nSelfUtils.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\nSelfUtils.canNotViewTheParticipantList = (self) => !!self?.canNotViewTheParticipantList;\n\nSelfUtils.isSharingBlocked = (self) => !!self?.isSharingBlocked;\n\nSelfUtils.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(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\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 */\nSelfUtils.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 */\nSelfUtils.layoutChanged = (previous: any, current: any) =>\n current?.layout && previous?.layout !== current?.layout;\n\nSelfUtils.breakoutsChanged = (previous, current) =>\n !isEqual(previous?.breakoutSessions, current?.breakoutSessions) && !!current?.breakout;\n\nSelfUtils.interpretationChanged = (previous, current) =>\n !isEqual(previous?.interpretation, current?.interpretation) && !!current?.interpretation;\n\nSelfUtils.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\nSelfUtils.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\nSelfUtils.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 */\nSelfUtils.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 */\nSelfUtils.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 */\nSelfUtils.getRemoteMuted = (self: any) => {\n if (!self || !self.controls || !self.controls.audio) {\n return null;\n }\n\n return self.controls.audio.muted;\n};\n\nSelfUtils.getLocalAudioUnmuteRequested = (self) => !!self?.controls?.audio?.requestedToUnmute;\n\n// requestedToUnmute timestamp\nSelfUtils.getLocalAudioUnmuteRequestedTimeStamp = (self) =>\n Date.parse(self?.controls?.audio?.lastModifiedRequestedToUnmute) || 0;\n\nSelfUtils.getUnmuteAllowed = (self) => {\n if (!self || !self.controls || !self.controls.audio) {\n return null;\n }\n\n return !self.controls.audio.disallowUnmute;\n};\n\nSelfUtils.getLocalAudioUnmuteRequired = (self) => !!self?.controls?.audio?.localAudioUnmuteRequired;\n\nSelfUtils.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 */\nSelfUtils.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 */\nSelfUtils.isLocusUserUnadmitted = (check: any) =>\n check && check.joinedWith?.intent?.type === _WAIT_ && check.state === _IDLE_;\n\n/**\n * @param {Object} check\n * @returns {Boolean}\n */\nSelfUtils.isLocusUserAdmitted = (check: any) =>\n check && check.joinedWith?.intent?.type !== _WAIT_ && check.state === _JOINED_;\n\n/**\n * @param {Object} self\n * @returns {Boolean}\n * @throws {Error} when self is undefined\n */\nSelfUtils.isUserUnadmitted = (self: object) => {\n if (!self) {\n throw new ParameterError('self must be defined to determine if self is unadmitted as guest.');\n }\n\n return SelfUtils.isLocusUserUnadmitted(self);\n};\n\nSelfUtils.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 */\nSelfUtils.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 */\nSelfUtils.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 */\nSelfUtils.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\nSelfUtils.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\nSelfUtils.mutedByOthersChanged = (oldSelf, changedSelf) => {\n if (!changedSelf) {\n throw new ParameterError('New self must be defined to determine if self was muted by others.');\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 return (\n changedSelf.remoteMuted !== null &&\n (oldSelf.remoteMuted !== changedSelf.remoteMuted ||\n (changedSelf.remoteMuted && oldSelf.unmuteAllowed !== changedSelf.unmuteAllowed))\n );\n};\n\nSelfUtils.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\nSelfUtils.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\nSelfUtils.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\nSelfUtils.getMediaStatus = (mediaSessions = []) => {\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\nSelfUtils.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};\nexport default SelfUtils;\n"],"mappings":"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"}
1
+ {"version":3,"names":["_lodash","require","_constants","_parameter","_interopRequireDefault","SelfUtils","PSTN_DEVICE_TYPE","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 SelfUtils: any = {};\nconst PSTN_DEVICE_TYPE = 'PROVISIONAL';\n\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 */\nSelfUtils.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\nSelfUtils.getBreakoutSessions = (self) => self?.controls?.breakout?.sessions;\nSelfUtils.getBreakout = (self) => self?.controls?.breakout;\nSelfUtils.getInterpretation = (self) => self?.controls?.interpretation;\nSelfUtils.getBrb = (self) => self?.controls?.brb;\n\nSelfUtils.getLayout = (self) =>\n Array.isArray(self?.controls?.layouts) ? self.controls.layouts[0].type : undefined;\n\nSelfUtils.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\nSelfUtils.canNotViewTheParticipantList = (self) => !!self?.canNotViewTheParticipantList;\n\nSelfUtils.isSharingBlocked = (self) => !!self?.isSharingBlocked;\n\nSelfUtils.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 */\nSelfUtils.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 */\nSelfUtils.layoutChanged = (previous: any, current: any) =>\n current?.layout && previous?.layout !== current?.layout;\n\nSelfUtils.breakoutsChanged = (previous, current) =>\n !isEqual(previous?.breakoutSessions, current?.breakoutSessions) && !!current?.breakout;\n\nSelfUtils.interpretationChanged = (previous, current) =>\n !isEqual(previous?.interpretation, current?.interpretation) && !!current?.interpretation;\n\nSelfUtils.brbChanged = (previous, current) =>\n !isEqual(previous?.brb, current?.brb) && current?.brb !== undefined;\n\nSelfUtils.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\nSelfUtils.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\nSelfUtils.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 */\nSelfUtils.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 */\nSelfUtils.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 */\nSelfUtils.getRemoteMuted = (self: any) => {\n if (!self || !self.controls || !self.controls.audio) {\n return null;\n }\n\n return self.controls.audio.muted;\n};\n\nSelfUtils.getLocalAudioUnmuteRequested = (self) => !!self?.controls?.audio?.requestedToUnmute;\n\n// requestedToUnmute timestamp\nSelfUtils.getLocalAudioUnmuteRequestedTimeStamp = (self) =>\n Date.parse(self?.controls?.audio?.lastModifiedRequestedToUnmute) || 0;\n\nSelfUtils.getUnmuteAllowed = (self) => {\n if (!self || !self.controls || !self.controls.audio) {\n return null;\n }\n\n return !self.controls.audio.disallowUnmute;\n};\n\nSelfUtils.getLocalAudioUnmuteRequired = (self) => !!self?.controls?.audio?.localAudioUnmuteRequired;\n\nSelfUtils.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 */\nSelfUtils.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 */\nSelfUtils.isLocusUserUnadmitted = (check: any) =>\n check && check.joinedWith?.intent?.type === _WAIT_ && check.state === _IDLE_;\n\n/**\n * @param {Object} check\n * @returns {Boolean}\n */\nSelfUtils.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 */\nSelfUtils.isUserUnadmitted = (oldSelf: object, changedSelf: object) => {\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\nSelfUtils.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 */\nSelfUtils.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 */\nSelfUtils.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 */\nSelfUtils.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\nSelfUtils.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\nSelfUtils.mutedByOthersChanged = (oldSelf, changedSelf) => {\n if (!changedSelf) {\n throw new ParameterError('New self must be defined to determine if self was muted by others.');\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\nSelfUtils.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\nSelfUtils.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\nSelfUtils.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\nSelfUtils.getMediaStatus = (mediaSessions = []) => {\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\nSelfUtils.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};\nexport default SelfUtils;\n"],"mappings":"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"}
@@ -0,0 +1,167 @@
1
+ "use strict";
2
+
3
+ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
+ var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
5
+ _Object$defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.createBrbState = exports.BrbState = void 0;
9
+ var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
10
+ var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
11
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
12
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
13
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
14
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
15
+ var _internalMediaCore = require("@webex/internal-media-core");
16
+ var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
17
+ var createBrbState = exports.createBrbState = function createBrbState(meeting, enabled) {
18
+ _loggerProxy.default.logger.info("Meeting:brbState#createBrbState: creating BrbState for meeting id ".concat(meeting === null || meeting === void 0 ? void 0 : meeting.id));
19
+ var brbState = new BrbState(meeting, enabled);
20
+ return brbState;
21
+ };
22
+
23
+ /** The purpose of this class is to manage the local and remote brb state
24
+ * and make sure that the server state always matches the last requested state by the client.
25
+ */
26
+ var BrbState = exports.BrbState = /*#__PURE__*/function () {
27
+ /**
28
+ * Constructor
29
+ *
30
+ * @param {Meeting} meeting - the meeting object
31
+ * @param {boolean} enabled - whether the client audio/video is enabled at all
32
+ */
33
+ function BrbState(meeting, enabled) {
34
+ (0, _classCallCheck2.default)(this, BrbState);
35
+ (0, _defineProperty2.default)(this, "state", void 0);
36
+ (0, _defineProperty2.default)(this, "meeting", void 0);
37
+ this.meeting = meeting;
38
+ this.state = {
39
+ client: {
40
+ enabled: enabled
41
+ },
42
+ server: {
43
+ enabled: false
44
+ },
45
+ syncToServerInProgress: false
46
+ };
47
+ }
48
+
49
+ /**
50
+ * Enables/disables brb
51
+ *
52
+ * @param {boolean} enabled
53
+ * @param {SendSlotManager} sendSlotManager
54
+ * @returns {Promise}
55
+ */
56
+ (0, _createClass2.default)(BrbState, [{
57
+ key: "enable",
58
+ value: function enable(enabled, sendSlotManager) {
59
+ this.state.client.enabled = enabled;
60
+ return this.applyClientStateToServer(sendSlotManager);
61
+ }
62
+
63
+ /**
64
+ * Updates the server local and remote brb values so that they match the current client desired state.
65
+ *
66
+ * @param {SendSlotManager} sendSlotManager
67
+ * @returns {Promise}
68
+ */
69
+ }, {
70
+ key: "applyClientStateToServer",
71
+ value: function applyClientStateToServer(sendSlotManager) {
72
+ var _this = this;
73
+ if (this.state.syncToServerInProgress) {
74
+ _loggerProxy.default.logger.info("Meeting:brbState#applyClientStateToServer: request to server in progress, we need to wait for it to complete");
75
+ return _promise.default.resolve();
76
+ }
77
+ var remoteBrbRequiresSync = this.state.client.enabled !== this.state.server.enabled;
78
+ _loggerProxy.default.logger.info("Meeting:brbState#applyClientStateToServer: remoteBrbRequiresSync: ".concat(remoteBrbRequiresSync));
79
+ if (!remoteBrbRequiresSync) {
80
+ _loggerProxy.default.logger.info("Meeting:brbState#applyClientStateToServer: client state already matching server state, nothing to do");
81
+ return _promise.default.resolve();
82
+ }
83
+ this.state.syncToServerInProgress = true;
84
+ return this.sendLocalBrbStateToServer(sendSlotManager).then(function () {
85
+ _this.state.syncToServerInProgress = false;
86
+ _loggerProxy.default.logger.info("Meeting:brbState#applyClientStateToServer: sync with server completed");
87
+
88
+ // need to check if a new sync is required, because this.state.client may have changed while we were doing the current sync
89
+ _this.applyClientStateToServer(sendSlotManager);
90
+ }).catch(function (e) {
91
+ _this.state.syncToServerInProgress = false;
92
+ _loggerProxy.default.logger.warn("Meeting:brbState#applyClientStateToServer: error: ".concat(e));
93
+ });
94
+ }
95
+
96
+ /**
97
+ * Send the local brb state to the server
98
+ *
99
+ * @param {SendSlotManager} sendSlotManager
100
+ * @returns {Promise}
101
+ */
102
+ }, {
103
+ key: "sendLocalBrbStateToServer",
104
+ value: (function () {
105
+ var _sendLocalBrbStateToServer = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(sendSlotManager) {
106
+ var enabled, errorMessage, error, _errorMessage, _error;
107
+ return _regenerator.default.wrap(function _callee$(_context) {
108
+ while (1) switch (_context.prev = _context.next) {
109
+ case 0:
110
+ enabled = this.state.client.enabled;
111
+ if (this.meeting.isMultistream) {
112
+ _context.next = 6;
113
+ break;
114
+ }
115
+ errorMessage = 'Meeting:brbState#sendLocalBrbStateToServer: Not a multistream meeting';
116
+ error = new Error(errorMessage);
117
+ _loggerProxy.default.logger.error(error);
118
+ return _context.abrupt("return", _promise.default.reject(error));
119
+ case 6:
120
+ if (this.meeting.mediaProperties.webrtcMediaConnection) {
121
+ _context.next = 11;
122
+ break;
123
+ }
124
+ _errorMessage = 'Meeting:brbState#sendLocalBrbStateToServer: WebRTC media connection is not defined';
125
+ _error = new Error(_errorMessage);
126
+ _loggerProxy.default.logger.error(_error);
127
+ return _context.abrupt("return", _promise.default.reject(_error));
128
+ case 11:
129
+ return _context.abrupt("return", this.meeting.meetingRequest.setBrb({
130
+ enabled: enabled,
131
+ locusUrl: this.meeting.locusUrl,
132
+ deviceUrl: this.meeting.deviceUrl,
133
+ selfId: this.meeting.selfId
134
+ }).then(function () {
135
+ sendSlotManager.setSourceStateOverride(_internalMediaCore.MediaType.VideoMain, enabled ? 'away' : null);
136
+ }).catch(function (error) {
137
+ _loggerProxy.default.logger.error('Meeting:brbState#sendLocalBrbStateToServer: Error ', error);
138
+ return _promise.default.reject(error);
139
+ }));
140
+ case 12:
141
+ case "end":
142
+ return _context.stop();
143
+ }
144
+ }, _callee, this);
145
+ }));
146
+ function sendLocalBrbStateToServer(_x) {
147
+ return _sendLocalBrbStateToServer.apply(this, arguments);
148
+ }
149
+ return sendLocalBrbStateToServer;
150
+ }()
151
+ /**
152
+ * This method should be called whenever the server brb state is changed
153
+ *
154
+ * @param {Boolean} [enabled] true if user has brb enabled, false otherwise
155
+ * @returns {undefined}
156
+ */
157
+ )
158
+ }, {
159
+ key: "handleServerBrbUpdate",
160
+ value: function handleServerBrbUpdate(enabled) {
161
+ _loggerProxy.default.logger.info("Meeting:brbState#handleServerBrbUpdate: updating server brb to (".concat(enabled, ")"));
162
+ this.state.server.enabled = !!enabled;
163
+ }
164
+ }]);
165
+ return BrbState;
166
+ }();
167
+ //# sourceMappingURL=brbState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_internalMediaCore","require","_loggerProxy","_interopRequireDefault","createBrbState","exports","meeting","enabled","LoggerProxy","logger","info","concat","id","brbState","BrbState","_classCallCheck2","default","_defineProperty2","state","client","server","syncToServerInProgress","_createClass2","key","value","enable","sendSlotManager","applyClientStateToServer","_this","_promise","resolve","remoteBrbRequiresSync","sendLocalBrbStateToServer","then","catch","e","warn","_sendLocalBrbStateToServer","_asyncToGenerator2","_regenerator","mark","_callee","errorMessage","error","_errorMessage","_error","wrap","_callee$","_context","prev","next","isMultistream","Error","abrupt","reject","mediaProperties","webrtcMediaConnection","meetingRequest","setBrb","locusUrl","deviceUrl","selfId","setSourceStateOverride","MediaType","VideoMain","stop","_x","apply","arguments","handleServerBrbUpdate"],"sources":["brbState.ts"],"sourcesContent":["import {MediaType} from '@webex/internal-media-core';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport type Meeting from '.';\nimport SendSlotManager from '../multistream/sendSlotManager';\n\nexport const createBrbState = (meeting: Meeting, enabled: boolean) => {\n LoggerProxy.logger.info(\n `Meeting:brbState#createBrbState: creating BrbState for meeting id ${meeting?.id}`\n );\n\n const brbState = new BrbState(meeting, enabled);\n\n return brbState;\n};\n\n/** The purpose of this class is to manage the local and remote brb state\n * and make sure that the server state always matches the last requested state by the client.\n */\nexport class BrbState {\n state: {\n client: {\n enabled: boolean;\n };\n server: {\n enabled: boolean;\n };\n syncToServerInProgress: boolean;\n };\n\n meeting: Meeting;\n\n /**\n * Constructor\n *\n * @param {Meeting} meeting - the meeting object\n * @param {boolean} enabled - whether the client audio/video is enabled at all\n */\n constructor(meeting: Meeting, enabled: boolean) {\n this.meeting = meeting;\n this.state = {\n client: {\n enabled,\n },\n server: {\n enabled: false,\n },\n syncToServerInProgress: false,\n };\n }\n\n /**\n * Enables/disables brb\n *\n * @param {boolean} enabled\n * @param {SendSlotManager} sendSlotManager\n * @returns {Promise}\n */\n public enable(enabled: boolean, sendSlotManager: SendSlotManager) {\n this.state.client.enabled = enabled;\n\n return this.applyClientStateToServer(sendSlotManager);\n }\n\n /**\n * Updates the server local and remote brb values so that they match the current client desired state.\n *\n * @param {SendSlotManager} sendSlotManager\n * @returns {Promise}\n */\n private applyClientStateToServer(sendSlotManager: SendSlotManager) {\n if (this.state.syncToServerInProgress) {\n LoggerProxy.logger.info(\n `Meeting:brbState#applyClientStateToServer: request to server in progress, we need to wait for it to complete`\n );\n\n return Promise.resolve();\n }\n\n const remoteBrbRequiresSync = this.state.client.enabled !== this.state.server.enabled;\n\n LoggerProxy.logger.info(\n `Meeting:brbState#applyClientStateToServer: remoteBrbRequiresSync: ${remoteBrbRequiresSync}`\n );\n\n if (!remoteBrbRequiresSync) {\n LoggerProxy.logger.info(\n `Meeting:brbState#applyClientStateToServer: client state already matching server state, nothing to do`\n );\n\n return Promise.resolve();\n }\n\n this.state.syncToServerInProgress = true;\n\n return this.sendLocalBrbStateToServer(sendSlotManager)\n .then(() => {\n this.state.syncToServerInProgress = false;\n LoggerProxy.logger.info(\n `Meeting:brbState#applyClientStateToServer: sync with server completed`\n );\n\n // need to check if a new sync is required, because this.state.client may have changed while we were doing the current sync\n this.applyClientStateToServer(sendSlotManager);\n })\n .catch((e) => {\n this.state.syncToServerInProgress = false;\n LoggerProxy.logger.warn(`Meeting:brbState#applyClientStateToServer: error: ${e}`);\n });\n }\n\n /**\n * Send the local brb state to the server\n *\n * @param {SendSlotManager} sendSlotManager\n * @returns {Promise}\n */\n private async sendLocalBrbStateToServer(sendSlotManager: SendSlotManager) {\n const {enabled} = this.state.client;\n\n if (!this.meeting.isMultistream) {\n const errorMessage = 'Meeting:brbState#sendLocalBrbStateToServer: Not a multistream meeting';\n const error = new Error(errorMessage);\n\n LoggerProxy.logger.error(error);\n\n return Promise.reject(error);\n }\n\n if (!this.meeting.mediaProperties.webrtcMediaConnection) {\n const errorMessage =\n 'Meeting:brbState#sendLocalBrbStateToServer: WebRTC media connection is not defined';\n const error = new Error(errorMessage);\n\n LoggerProxy.logger.error(error);\n\n return Promise.reject(error);\n }\n\n // this logic should be applied only to multistream meetings\n return this.meeting.meetingRequest\n .setBrb({\n enabled,\n locusUrl: this.meeting.locusUrl,\n deviceUrl: this.meeting.deviceUrl,\n selfId: this.meeting.selfId,\n })\n .then(() => {\n sendSlotManager.setSourceStateOverride(MediaType.VideoMain, enabled ? 'away' : null);\n })\n .catch((error) => {\n LoggerProxy.logger.error('Meeting:brbState#sendLocalBrbStateToServer: Error ', error);\n\n return Promise.reject(error);\n });\n }\n\n /**\n * This method should be called whenever the server brb state is changed\n *\n * @param {Boolean} [enabled] true if user has brb enabled, false otherwise\n * @returns {undefined}\n */\n public handleServerBrbUpdate(enabled?: boolean) {\n LoggerProxy.logger.info(\n `Meeting:brbState#handleServerBrbUpdate: updating server brb to (${enabled})`\n );\n this.state.server.enabled = !!enabled;\n }\n}\n"],"mappings":"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"}
@@ -62,6 +62,7 @@ var InMeetingActions = exports.default = /*#__PURE__*/(0, _createClass2.default)
62
62
  (0, _defineProperty2.default)(this, "waitingForOthersToJoin", null);
63
63
  (0, _defineProperty2.default)(this, "canSendReactions", null);
64
64
  (0, _defineProperty2.default)(this, "canManageBreakout", null);
65
+ (0, _defineProperty2.default)(this, "canStartBreakout", null);
65
66
  (0, _defineProperty2.default)(this, "canBroadcastMessageToBreakout", null);
66
67
  (0, _defineProperty2.default)(this, "canAdmitLobbyToBreakout", null);
67
68
  (0, _defineProperty2.default)(this, "isBreakoutPreassignmentsEnabled", null);
@@ -156,6 +157,7 @@ var InMeetingActions = exports.default = /*#__PURE__*/(0, _createClass2.default)
156
157
  waitingForOthersToJoin: _this.waitingForOthersToJoin,
157
158
  canSendReactions: _this.canSendReactions,
158
159
  canManageBreakout: _this.canManageBreakout,
160
+ canStartBreakout: _this.canStartBreakout,
159
161
  canBroadcastMessageToBreakout: _this.canBroadcastMessageToBreakout,
160
162
  canAdmitLobbyToBreakout: _this.canAdmitLobbyToBreakout,
161
163
  isBreakoutPreassignmentsEnabled: _this.isBreakoutPreassignmentsEnabled,