@webex/plugin-meetings 2.14.4 → 2.17.0

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 (112) hide show
  1. package/README.md +2 -0
  2. package/dist/analyzer/analyzer.js.map +1 -1
  3. package/dist/analyzer/calculator.js.map +1 -1
  4. package/dist/common/browser-detection.js.map +1 -1
  5. package/dist/common/collection.js +2 -3
  6. package/dist/common/collection.js.map +1 -1
  7. package/dist/common/errors/captcha-error.js.map +1 -1
  8. package/dist/common/errors/intent-to-join.js.map +1 -1
  9. package/dist/common/errors/join-meeting.js.map +1 -1
  10. package/dist/common/errors/media.js.map +1 -1
  11. package/dist/common/errors/parameter.js +20 -5
  12. package/dist/common/errors/parameter.js.map +1 -1
  13. package/dist/common/errors/password-error.js.map +1 -1
  14. package/dist/common/errors/permission.js.map +1 -1
  15. package/dist/common/errors/reconnection.js.map +1 -1
  16. package/dist/common/errors/stats.js.map +1 -1
  17. package/dist/common/events/events-scope.js.map +1 -1
  18. package/dist/common/events/events.js.map +1 -1
  19. package/dist/common/events/trigger-proxy.js.map +1 -1
  20. package/dist/common/events/util.js.map +1 -1
  21. package/dist/common/logs/logger-proxy.js.map +1 -1
  22. package/dist/common/logs/request.js.map +1 -1
  23. package/dist/common/queue.js +3 -0
  24. package/dist/common/queue.js.map +1 -1
  25. package/dist/config.js.map +1 -1
  26. package/dist/constants.js +2 -1
  27. package/dist/constants.js.map +1 -1
  28. package/dist/index.js.map +1 -1
  29. package/dist/locus-info/fullState.js.map +1 -1
  30. package/dist/locus-info/index.js +5 -3
  31. package/dist/locus-info/index.js.map +1 -1
  32. package/dist/locus-info/infoUtils.js +8 -6
  33. package/dist/locus-info/infoUtils.js.map +1 -1
  34. package/dist/locus-info/parser.js.map +1 -1
  35. package/dist/locus-info/selfUtils.js +22 -9
  36. package/dist/locus-info/selfUtils.js.map +1 -1
  37. package/dist/media/index.js.map +1 -1
  38. package/dist/media/properties.js.map +1 -1
  39. package/dist/media/util.js.map +1 -1
  40. package/dist/meeting/effectsState.js.map +1 -1
  41. package/dist/meeting/in-meeting-actions.js +3 -1
  42. package/dist/meeting/in-meeting-actions.js.map +1 -1
  43. package/dist/meeting/index.js +7 -3
  44. package/dist/meeting/index.js.map +1 -1
  45. package/dist/meeting/muteState.js.map +1 -1
  46. package/dist/meeting/request.js.map +1 -1
  47. package/dist/meeting/state.js.map +1 -1
  48. package/dist/meeting/util.js +4 -0
  49. package/dist/meeting/util.js.map +1 -1
  50. package/dist/meeting-info/index.js.map +1 -1
  51. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  52. package/dist/meeting-info/request.js.map +1 -1
  53. package/dist/meeting-info/util.js +0 -3
  54. package/dist/meeting-info/util.js.map +1 -1
  55. package/dist/meeting-info/utilv2.js +0 -3
  56. package/dist/meeting-info/utilv2.js.map +1 -1
  57. package/dist/meetings/index.js.map +1 -1
  58. package/dist/meetings/request.js.map +1 -1
  59. package/dist/meetings/util.js.map +1 -1
  60. package/dist/member/index.js.map +1 -1
  61. package/dist/members/index.js.map +1 -1
  62. package/dist/members/request.js.map +1 -1
  63. package/dist/members/util.js.map +1 -1
  64. package/dist/metrics/index.js.map +1 -1
  65. package/dist/metrics/mqa-processor.js.map +1 -1
  66. package/dist/networkQualityMonitor/index.js.map +1 -1
  67. package/dist/peer-connection-manager/index.js.map +1 -1
  68. package/dist/personal-meeting-room/request.js.map +1 -1
  69. package/dist/personal-meeting-room/util.js.map +1 -1
  70. package/dist/reachability/index.js.map +1 -1
  71. package/dist/reachability/request.js.map +1 -1
  72. package/dist/reconnection-manager/index.js +0 -3
  73. package/dist/reconnection-manager/index.js.map +1 -1
  74. package/dist/roap/collection.js.map +1 -1
  75. package/dist/roap/handler.js.map +1 -1
  76. package/dist/roap/index.js.map +1 -1
  77. package/dist/roap/request.js.map +1 -1
  78. package/dist/roap/state.js.map +1 -1
  79. package/dist/roap/util.js.map +1 -1
  80. package/dist/stats/data.js.map +1 -1
  81. package/dist/stats/events.js.map +1 -1
  82. package/dist/stats/filter.js.map +1 -1
  83. package/dist/stats/index.js.map +1 -1
  84. package/dist/stats/metrics.js.map +1 -1
  85. package/dist/stats/stats.js.map +1 -1
  86. package/dist/stats/stream.js.map +1 -1
  87. package/dist/stats/transformer.js.map +1 -1
  88. package/dist/stats/util.js.map +1 -1
  89. package/dist/statsAnalyzer/index.js.map +1 -1
  90. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  91. package/dist/transcription/index.js.map +1 -1
  92. package/package.json +6 -6
  93. package/src/common/{collection.js → collection.ts} +2 -2
  94. package/src/common/errors/parameter.ts +29 -0
  95. package/src/common/{queue.js → queue.ts} +1 -0
  96. package/src/{constants.js → constants.ts} +1 -0
  97. package/src/locus-info/index.js +4 -4
  98. package/src/locus-info/infoUtils.js +15 -7
  99. package/src/locus-info/selfUtils.js +18 -9
  100. package/src/meeting/in-meeting-actions.js +2 -0
  101. package/src/meeting/index.js +6 -1
  102. package/src/meeting/util.js +2 -0
  103. package/test/unit/spec/locus-info/index.js +4 -1
  104. package/test/unit/spec/locus-info/infoUtils.js +33 -10
  105. package/test/unit/spec/locus-info/selfUtils.js +20 -0
  106. package/test/unit/spec/meeting/in-meeting-actions.js +2 -0
  107. package/test/unit/spec/meeting/index.js +5 -2
  108. package/test/unit/spec/meeting/utils.js +7 -0
  109. package/dist/common/constants.js +0 -15
  110. package/dist/common/constants.js.map +0 -1
  111. package/src/common/constants.js +0 -6
  112. package/src/common/errors/parameter.js +0 -26
@@ -25,6 +25,8 @@ var PSTN_DEVICE_TYPE = 'PROVISIONAL';
25
25
 
26
26
  SelfUtils.parse = function (self, deviceId) {
27
27
  if (self) {
28
+ var _joinedWith$intent;
29
+
28
30
  var joinedWith = self.devices.find(function (device) {
29
31
  return deviceId === device.url;
30
32
  });
@@ -57,7 +59,8 @@ SelfUtils.parse = function (self, deviceId) {
57
59
  selfIdentity: SelfUtils.getSelfIdentity(self),
58
60
  selfUrl: self.url,
59
61
  removed: self.removed,
60
- roles: SelfUtils.getRoles(self)
62
+ roles: SelfUtils.getRoles(self),
63
+ 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_
61
64
  };
62
65
  }
63
66
 
@@ -80,8 +83,8 @@ SelfUtils.getSelves = function (oldSelf, newSelf, deviceId) {
80
83
  var previous = oldSelf && SelfUtils.parse(oldSelf, deviceId);
81
84
  var current = newSelf && SelfUtils.parse(newSelf, deviceId);
82
85
  var updates = {};
83
- updates.isUnadmittedGuest = SelfUtils.isUnadmittedGuest(current);
84
- updates.isAdmittedGuest = SelfUtils.isAdmittedGuest(previous, current);
86
+ updates.isUserUnadmitted = SelfUtils.isUserUnadmitted(current);
87
+ updates.isUserAdmitted = SelfUtils.isUserAdmitted(previous, current);
85
88
  updates.isMutedByOthersChanged = SelfUtils.mutedByOthersChanged(previous, current);
86
89
  updates.localAudioUnmuteRequestedByServer = SelfUtils.localAudioUnmuteRequestedByServer(previous, current);
87
90
  updates.localAudioUnmuteRequiredByServer = SelfUtils.localAudioUnmuteRequiredByServer(previous, current);
@@ -98,6 +101,16 @@ SelfUtils.getSelves = function (oldSelf, newSelf, deviceId) {
98
101
  updates: updates
99
102
  };
100
103
  };
104
+ /**
105
+ * Checks if user has joined the meeting
106
+ * @param {Object} self
107
+ * @returns {boolean} isJoined
108
+ */
109
+
110
+
111
+ SelfUtils.isJoined = function (self) {
112
+ return (self === null || self === void 0 ? void 0 : self.state) === _constants._JOINED_;
113
+ };
101
114
 
102
115
  SelfUtils.isMediaInactive = function (previous, current) {
103
116
  if (previous && previous.joinedWith && previous.joinedWith.mediaSessions && current && current.joinedWith && current.joinedWith.mediaSessions) {
@@ -211,7 +224,7 @@ SelfUtils.wasMediaInactiveOrReleased = function () {
211
224
  */
212
225
 
213
226
 
214
- SelfUtils.isLocusGuestUnadmitted = function (check) {
227
+ SelfUtils.isLocusUserUnadmitted = function (check) {
215
228
  var _check$joinedWith, _check$joinedWith$int;
216
229
 
217
230
  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_;
@@ -222,7 +235,7 @@ SelfUtils.isLocusGuestUnadmitted = function (check) {
222
235
  */
223
236
 
224
237
 
225
- SelfUtils.isLocusGuestAdmitted = function (check) {
238
+ SelfUtils.isLocusUserAdmitted = function (check) {
226
239
  var _check$joinedWith2, _check$joinedWith2$in;
227
240
 
228
241
  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_;
@@ -234,12 +247,12 @@ SelfUtils.isLocusGuestAdmitted = function (check) {
234
247
  */
235
248
 
236
249
 
237
- SelfUtils.isUnadmittedGuest = function (self) {
250
+ SelfUtils.isUserUnadmitted = function (self) {
238
251
  if (!self) {
239
252
  throw new _parameter.default('self must be defined to determine if self is unadmitted as guest.');
240
253
  }
241
254
 
242
- return SelfUtils.isLocusGuestUnadmitted(self);
255
+ return SelfUtils.isLocusUserUnadmitted(self);
243
256
  };
244
257
 
245
258
  SelfUtils.moderatorChanged = function (oldSelf, changedSelf) {
@@ -274,7 +287,7 @@ SelfUtils.isDeviceObserving = function (oldSelf, changedSelf) {
274
287
  */
275
288
 
276
289
 
277
- SelfUtils.isAdmittedGuest = function (oldSelf, changedSelf) {
290
+ SelfUtils.isUserAdmitted = function (oldSelf, changedSelf) {
278
291
  if (!oldSelf) {
279
292
  // if there was no previous locus, it couldn't have been admitted yet
280
293
  return false;
@@ -284,7 +297,7 @@ SelfUtils.isAdmittedGuest = function (oldSelf, changedSelf) {
284
297
  throw new _parameter.default('New self must be defined to determine if self transitioned to admitted as guest.');
285
298
  }
286
299
 
287
- return SelfUtils.isLocusGuestUnadmitted(oldSelf) && SelfUtils.isLocusGuestAdmitted(changedSelf);
300
+ return SelfUtils.isLocusUserUnadmitted(oldSelf) && SelfUtils.isLocusUserAdmitted(changedSelf);
288
301
  };
289
302
 
290
303
  SelfUtils.mutedByOthersChanged = function (oldSelf, changedSelf) {
@@ -1 +1 @@
1
- {"version":3,"names":["SelfUtils","PSTN_DEVICE_TYPE","parse","self","deviceId","joinedWith","devices","find","device","url","pstnDevices","filter","deviceType","remoteMuted","getRemoteMuted","unmuteAllowed","getUnmuteAllowed","localAudioUnmuteRequested","getLocalAudioUnmuteRequested","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","controls","role","reduce","hasRole","push","type","getSelves","oldSelf","newSelf","previous","current","updates","isUnadmittedGuest","isAdmittedGuest","isMutedByOthersChanged","mutedByOthersChanged","localAudioUnmuteRequestedByServer","localAudioUnmuteRequiredByServer","moderatorChanged","isMediaInactiveOrReleased","wasMediaInactiveOrReleased","isUserObserving","isDeviceObserving","isMediaInactive","audioStateChange","audio","videoStateChange","video","shareStateChange","share","previousMediaStatus","MEDIA_STATE","inactive","direction","meta","person","muted","requestedToUnmute","disallowUnmute","audioStatus","videoStatus","slides","videoSlidesStatus","changedSelf","_JOINED_","_LEFT_","reason","MEETING_END_REASON","INACTIVE","MEDIA_RELEASED","isLocusGuestUnadmitted","check","intent","_WAIT_","_IDLE_","isLocusGuestAdmitted","ParameterError","_MOVE_MEDIA_","_OBSERVE_","getSipUrl","partner","sipUri","_CALL_","sipUrl","media","mediaType","AUDIO","mediaContent","MediaContent","main","VIDEO"],"sources":["selfUtils.js"],"sourcesContent":["\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 = {};\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, deviceId) => {\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 remoteMuted: SelfUtils.getRemoteMuted(self),\n unmuteAllowed: SelfUtils.getUnmuteAllowed(self),\n localAudioUnmuteRequested: SelfUtils.getLocalAudioUnmuteRequested(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(\n joinedWith?.mediaSessions\n ),\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 };\n }\n\n return null;\n};\n\nSelfUtils.getRoles = (self) => (self?.controls?.role?.roles || []).reduce((roles, role) => {\n if (role.hasRole) {\n roles.push(role.type);\n }\n\n return roles;\n}, []);\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 = {};\n\n updates.isUnadmittedGuest = SelfUtils.isUnadmittedGuest(current);\n updates.isAdmittedGuest = SelfUtils.isAdmittedGuest(previous, current);\n updates.isMutedByOthersChanged = SelfUtils.mutedByOthersChanged(previous, current);\n updates.localAudioUnmuteRequestedByServer = SelfUtils.localAudioUnmuteRequestedByServer(previous, current);\n updates.localAudioUnmuteRequiredByServer = SelfUtils.localAudioUnmuteRequiredByServer(previous, current);\n updates.moderatorChanged = SelfUtils.moderatorChanged(previous, current);\n updates.isMediaInactiveOrReleased = SelfUtils.wasMediaInactiveOrReleased(previous, current);\n updates.isUserObserving = SelfUtils.isDeviceObserving(previous, current);\n\n updates.isMediaInactive = SelfUtils.isMediaInactive(previous, current);\n updates.audioStateChange = previous?.currentMediaStatus.audio !== current.currentMediaStatus.audio;\n updates.videoStateChange = previous?.currentMediaStatus.video !== current.currentMediaStatus.video;\n updates.shareStateChange = previous?.currentMediaStatus.share !== current.currentMediaStatus.share;\n\n return {\n previous,\n current,\n updates\n };\n};\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(\n previous.joinedWith.mediaSessions\n );\n const currentMediaStatus = SelfUtils.getMediaStatus(\n current.joinedWith.mediaSessions\n );\n\n if (\n previousMediaStatus.audio && 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 && 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 && 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 (!self || !self.controls || !self.controls.audio || !self.controls.audio.meta || !self.controls.audio.meta.lastModified) {\n return null;\n }\n\n return self.controls.audio.meta.lastModified;\n};\n\nSelfUtils.getModifiedBy = (self) => {\n if (!self || !self.controls || !self.controls.audio || !self.controls.audio.meta || !self.controls.audio.meta.modifiedBy) {\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) => {\n if (!self && !self.person) {\n return null;\n }\n\n return self.person.id;\n};\n\n/**\n * get the \"remote mute\" property from the self object\n * @param {Object} self\n * @returns {Boolean}\n */\nSelfUtils.getRemoteMuted = (self) => {\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\nSelfUtils.getUnmuteAllowed = (self) => {\n if (!self || !self.controls || !self.controls.audio) {\n return null;\n }\n\n return !self.controls.audio.disallowUnmute;\n};\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/**\n * @param {Object} oldSelf\n * @param {Object} changedSelf\n * @returns {Boolean}\n */\nSelfUtils.wasMediaInactiveOrReleased = (oldSelf = {}, changedSelf) => oldSelf.joinedWith && oldSelf.joinedWith.state === _JOINED_ && changedSelf.joinedWith.state === _LEFT_ &&\n (changedSelf.joinedWith.reason === MEETING_END_REASON.INACTIVE || changedSelf.joinedWith.reason === MEETING_END_REASON.MEDIA_RELEASED);\n\n\n/**\n * @param {Object} check\n * @returns {Boolean}\n */\nSelfUtils.isLocusGuestUnadmitted = (check) => check && check.joinedWith?.intent?.type === _WAIT_ && check.state === _IDLE_;\n\n/**\n * @param {Object} check\n * @returns {Boolean}\n */\nSelfUtils.isLocusGuestAdmitted = (check) => 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.isUnadmittedGuest = (self) => {\n if (!self) {\n throw new ParameterError('self must be defined to determine if self is unadmitted as guest.');\n }\n\n return SelfUtils.isLocusGuestUnadmitted(self);\n};\n\nSelfUtils.moderatorChanged = (oldSelf, changedSelf) => {\n if (!oldSelf) {\n return true;\n }\n if (!changedSelf) {\n throw new ParameterError('New self must be defined to determine if self transitioned moderator status.');\n }\n\n return oldSelf.moderator !== changedSelf.moderator;\n};\n\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, changedSelf) => oldSelf && oldSelf.joinedWith?.intent?.type === _MOVE_MEDIA_ && changedSelf && 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.isAdmittedGuest = (oldSelf, changedSelf) => {\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('New self must be defined to determine if self transitioned to admitted as guest.');\n }\n\n return SelfUtils.isLocusGuestUnadmitted(oldSelf) && SelfUtils.isLocusGuestAdmitted(changedSelf);\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 (changedSelf.remoteMuted !== null) &&\n ((oldSelf.remoteMuted !== changedSelf.remoteMuted) || (changedSelf.remoteMuted && (oldSelf.unmuteAllowed !== changedSelf.unmuteAllowed)));\n};\n\nSelfUtils.localAudioUnmuteRequestedByServer = (oldSelf = {}, changedSelf) => {\n if (!changedSelf) {\n throw new ParameterError('New self must be defined to determine if self received request to unmute.');\n }\n\n return changedSelf.localAudioUnmuteRequested && !oldSelf.localAudioUnmuteRequested;\n};\n\n\nSelfUtils.localAudioUnmuteRequiredByServer = (oldSelf = {}, changedSelf) => {\n if (!changedSelf) {\n throw new ParameterError('New self must be defined to determine if localAudioUnmuteRequired changed.');\n }\n\n return !changedSelf.remoteMuted && changedSelf.localAudioUnmuteRequired && (oldSelf.localAudioUnmuteRequired !== changedSelf.localAudioUnmuteRequired);\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, 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((media) => media.mediaType === AUDIO && media.mediaContent === MediaContent.main);\n mediaStatus.video = mediaSessions.find((media) => media.mediaType === VIDEO && media.mediaContent === MediaContent.main);\n mediaStatus.share = mediaSessions.find((media) => media.mediaType === VIDEO && media.mediaContent === MediaContent.slides);\n\n return mediaStatus;\n};\n\n\nexport default SelfUtils;\n"],"mappings":";;;;;;;;;;;;AACA;;AAcA;;AAEA,IAAMA,SAAS,GAAG,EAAlB;AACA,IAAMC,gBAAgB,GAAG,aAAzB;AAEA;AACA;AACA;AACA;AACA;AACA;;AACAD,SAAS,CAACE,KAAV,GAAkB,UAACC,IAAD,EAAOC,QAAP,EAAoB;EACpC,IAAID,IAAJ,EAAU;IACR,IAAME,UAAU,GAAGF,IAAI,CAACG,OAAL,CAAaC,IAAb,CAAkB,UAACC,MAAD;MAAA,OAAYJ,QAAQ,KAAKI,MAAM,CAACC,GAAhC;IAAA,CAAlB,CAAnB;IACA,IAAMC,WAAW,GAAGP,IAAI,CAACG,OAAL,CAAaK,MAAb,CAAoB,UAACH,MAAD;MAAA,OAAYP,gBAAgB,KAAKO,MAAM,CAACI,UAAxC;IAAA,CAApB,CAApB;IAEA,OAAO;MACLC,WAAW,EAAEb,SAAS,CAACc,cAAV,CAAyBX,IAAzB,CADR;MAELY,aAAa,EAAEf,SAAS,CAACgB,gBAAV,CAA2Bb,IAA3B,CAFV;MAGLc,yBAAyB,EAAEjB,SAAS,CAACkB,4BAAV,CAAuCf,IAAvC,CAHtB;MAILgB,wBAAwB,EAAEnB,SAAS,CAACoB,2BAAV,CAAsCjB,IAAtC,CAJrB;MAKLkB,YAAY,EAAErB,SAAS,CAACsB,eAAV,CAA0BnB,IAA1B,CALT;MAMLoB,UAAU,EAAEvB,SAAS,CAACwB,aAAV,CAAwBrB,IAAxB,CANP;MAOLsB,KAAK,EAAEtB,IAAI,CAACsB,KAPP;MAQLC,SAAS,EAAEvB,IAAI,CAACuB,SARX;MASL;MACAC,WAAW,EAAE3B,SAAS,CAAC4B,SAAV,CAAoBzB,IAAI,CAAC0B,MAAzB,CAVR;MAWL;MACA;MACAC,KAAK,EAAE3B,IAAI,CAAC2B,KAbP;MAcL;MACA;MACAzB,UAAU,EAAVA,UAhBK;MAiBLK,WAAW,EAAXA,WAjBK;MAkBL;MACAqB,kBAAkB,EAAE/B,SAAS,CAACgC,cAAV,CAClB3B,UADkB,aAClBA,UADkB,uBAClBA,UAAU,CAAE4B,aADM,CAnBf;MAsBLC,OAAO,EAAE/B,IAAI,CAACgC,SAtBT;MAsBoB;MACzBC,MAAM,EAAEjC,IAAI,CAACkC,EAvBR;MAwBLC,YAAY,EAAEtC,SAAS,CAACuC,eAAV,CAA0BpC,IAA1B,CAxBT;MAyBLqC,OAAO,EAAErC,IAAI,CAACM,GAzBT;MA0BLgC,OAAO,EAAEtC,IAAI,CAACsC,OA1BT;MA2BLC,KAAK,EAAE1C,SAAS,CAAC2C,QAAV,CAAmBxC,IAAnB;IA3BF,CAAP;EA6BD;;EAED,OAAO,IAAP;AACD,CArCD;;AAuCAH,SAAS,CAAC2C,QAAV,GAAqB,UAACxC,IAAD;EAAA;;EAAA,OAAU,CAAC,CAAAA,IAAI,SAAJ,IAAAA,IAAI,WAAJ,8BAAAA,IAAI,CAAEyC,QAAN,yFAAgBC,IAAhB,4EAAsBH,KAAtB,KAA+B,EAAhC,EAAoCI,MAApC,CAA2C,UAACJ,KAAD,EAAQG,IAAR,EAAiB;IACzF,IAAIA,IAAI,CAACE,OAAT,EAAkB;MAChBL,KAAK,CAACM,IAAN,CAAWH,IAAI,CAACI,IAAhB;IACD;;IAED,OAAOP,KAAP;EACD,CAN8B,EAM5B,EAN4B,CAAV;AAAA,CAArB;;AAQA1C,SAAS,CAACkD,SAAV,GAAsB,UAACC,OAAD,EAAUC,OAAV,EAAmBhD,QAAnB,EAAgC;EACpD,IAAMiD,QAAQ,GAAGF,OAAO,IAAInD,SAAS,CAACE,KAAV,CAAgBiD,OAAhB,EAAyB/C,QAAzB,CAA5B;EACA,IAAMkD,OAAO,GAAGF,OAAO,IAAIpD,SAAS,CAACE,KAAV,CAAgBkD,OAAhB,EAAyBhD,QAAzB,CAA3B;EACA,IAAMmD,OAAO,GAAG,EAAhB;EAEAA,OAAO,CAACC,iBAAR,GAA4BxD,SAAS,CAACwD,iBAAV,CAA4BF,OAA5B,CAA5B;EACAC,OAAO,CAACE,eAAR,GAA0BzD,SAAS,CAACyD,eAAV,CAA0BJ,QAA1B,EAAoCC,OAApC,CAA1B;EACAC,OAAO,CAACG,sBAAR,GAAiC1D,SAAS,CAAC2D,oBAAV,CAA+BN,QAA/B,EAAyCC,OAAzC,CAAjC;EACAC,OAAO,CAACK,iCAAR,GAA4C5D,SAAS,CAAC4D,iCAAV,CAA4CP,QAA5C,EAAsDC,OAAtD,CAA5C;EACAC,OAAO,CAACM,gCAAR,GAA2C7D,SAAS,CAAC6D,gCAAV,CAA2CR,QAA3C,EAAqDC,OAArD,CAA3C;EACAC,OAAO,CAACO,gBAAR,GAA2B9D,SAAS,CAAC8D,gBAAV,CAA2BT,QAA3B,EAAqCC,OAArC,CAA3B;EACAC,OAAO,CAACQ,yBAAR,GAAoC/D,SAAS,CAACgE,0BAAV,CAAqCX,QAArC,EAA+CC,OAA/C,CAApC;EACAC,OAAO,CAACU,eAAR,GAA0BjE,SAAS,CAACkE,iBAAV,CAA4Bb,QAA5B,EAAsCC,OAAtC,CAA1B;EAEAC,OAAO,CAACY,eAAR,GAA0BnE,SAAS,CAACmE,eAAV,CAA0Bd,QAA1B,EAAoCC,OAApC,CAA1B;EACAC,OAAO,CAACa,gBAAR,GAA2B,CAAAf,QAAQ,SAAR,IAAAA,QAAQ,WAAR,YAAAA,QAAQ,CAAEtB,kBAAV,CAA6BsC,KAA7B,MAAuCf,OAAO,CAACvB,kBAAR,CAA2BsC,KAA7F;EACAd,OAAO,CAACe,gBAAR,GAA2B,CAAAjB,QAAQ,SAAR,IAAAA,QAAQ,WAAR,YAAAA,QAAQ,CAAEtB,kBAAV,CAA6BwC,KAA7B,MAAuCjB,OAAO,CAACvB,kBAAR,CAA2BwC,KAA7F;EACAhB,OAAO,CAACiB,gBAAR,GAA2B,CAAAnB,QAAQ,SAAR,IAAAA,QAAQ,WAAR,YAAAA,QAAQ,CAAEtB,kBAAV,CAA6B0C,KAA7B,MAAuCnB,OAAO,CAACvB,kBAAR,CAA2B0C,KAA7F;EAEA,OAAO;IACLpB,QAAQ,EAARA,QADK;IAELC,OAAO,EAAPA,OAFK;IAGLC,OAAO,EAAPA;EAHK,CAAP;AAKD,CAxBD;;AA0BAvD,SAAS,CAACmE,eAAV,GAA4B,UAACd,QAAD,EAAWC,OAAX,EAAuB;EACjD,IACED,QAAQ,IACRA,QAAQ,CAAChD,UADT,IAEAgD,QAAQ,CAAChD,UAAT,CAAoB4B,aAFpB,IAGAqB,OAHA,IAIAA,OAAO,CAACjD,UAJR,IAKAiD,OAAO,CAACjD,UAAR,CAAmB4B,aANrB,EAOE;IACA,IAAMyC,mBAAmB,GAAG1E,SAAS,CAACgC,cAAV,CAC1BqB,QAAQ,CAAChD,UAAT,CAAoB4B,aADM,CAA5B;IAGA,IAAMF,kBAAkB,GAAG/B,SAAS,CAACgC,cAAV,CACzBsB,OAAO,CAACjD,UAAR,CAAmB4B,aADM,CAA3B;;IAIA,IACEyC,mBAAmB,CAACL,KAApB,IAA6BtC,kBAAkB,CAACsC,KAAhD,IACAK,mBAAmB,CAACL,KAApB,CAA0BvC,KAA1B,KAAoC6C,uBAAYC,QADhD,IAEA7C,kBAAkB,CAACsC,KAAnB,CAAyBvC,KAAzB,KAAmC6C,uBAAYC,QAF/C,IAGA7C,kBAAkB,CAACsC,KAAnB,CAAyBQ,SAAzB,KAAuCF,uBAAYC,QAJrD,EAKE;MACA,OAAO,IAAP;IACD;;IAED,IACEF,mBAAmB,CAACH,KAApB,IAA6BxC,kBAAkB,CAACwC,KAAhD,IACAG,mBAAmB,CAACH,KAApB,CAA0BzC,KAA1B,KAAoC6C,uBAAYC,QADhD,IAEA7C,kBAAkB,CAACwC,KAAnB,CAAyBzC,KAAzB,KAAmC6C,uBAAYC,QAF/C,IAGA7C,kBAAkB,CAACwC,KAAnB,CAAyBM,SAAzB,KAAuCF,uBAAYC,QAJrD,EAKE;MACA,OAAO,IAAP;IACD;;IAED,IACEF,mBAAmB,CAACD,KAApB,IAA6B1C,kBAAkB,CAAC0C,KAAhD,IACAC,mBAAmB,CAACD,KAApB,CAA0B3C,KAA1B,KAAoC6C,uBAAYC,QADhD,IAEA7C,kBAAkB,CAAC0C,KAAnB,CAAyB3C,KAAzB,KAAmC6C,uBAAYC,QAF/C,IAGA7C,kBAAkB,CAAC0C,KAAnB,CAAyBI,SAAzB,KAAuCF,uBAAYC,QAJrD,EAKE;MACA,OAAO,IAAP;IACD;;IAED,OAAO,KAAP;EACD;;EAED,OAAO,KAAP;AACD,CA/CD;;AAiDA5E,SAAS,CAACsB,eAAV,GAA4B,UAACnB,IAAD,EAAU;EACpC,IAAI,CAACA,IAAD,IAAS,CAACA,IAAI,CAACyC,QAAf,IAA2B,CAACzC,IAAI,CAACyC,QAAL,CAAcyB,KAA1C,IAAmD,CAAClE,IAAI,CAACyC,QAAL,CAAcyB,KAAd,CAAoBS,IAAxE,IAAgF,CAAC3E,IAAI,CAACyC,QAAL,CAAcyB,KAAd,CAAoBS,IAApB,CAAyBzD,YAA9G,EAA4H;IAC1H,OAAO,IAAP;EACD;;EAED,OAAOlB,IAAI,CAACyC,QAAL,CAAcyB,KAAd,CAAoBS,IAApB,CAAyBzD,YAAhC;AACD,CAND;;AAQArB,SAAS,CAACwB,aAAV,GAA0B,UAACrB,IAAD,EAAU;EAClC,IAAI,CAACA,IAAD,IAAS,CAACA,IAAI,CAACyC,QAAf,IAA2B,CAACzC,IAAI,CAACyC,QAAL,CAAcyB,KAA1C,IAAmD,CAAClE,IAAI,CAACyC,QAAL,CAAcyB,KAAd,CAAoBS,IAAxE,IAAgF,CAAC3E,IAAI,CAACyC,QAAL,CAAcyB,KAAd,CAAoBS,IAApB,CAAyBvD,UAA9G,EAA0H;IACxH,OAAO,IAAP;EACD;;EAED,OAAOpB,IAAI,CAACyC,QAAL,CAAcyB,KAAd,CAAoBS,IAApB,CAAyBvD,UAAhC;AACD,CAND;AAQA;AACA;AACA;AACA;AACA;;;AACAvB,SAAS,CAACuC,eAAV,GAA4B,UAACpC,IAAD,EAAU;EACpC,IAAI,CAACA,IAAD,IAAS,CAACA,IAAI,CAAC4E,MAAnB,EAA2B;IACzB,OAAO,IAAP;EACD;;EAED,OAAO5E,IAAI,CAAC4E,MAAL,CAAY1C,EAAnB;AACD,CAND;AAQA;AACA;AACA;AACA;AACA;;;AACArC,SAAS,CAACc,cAAV,GAA2B,UAACX,IAAD,EAAU;EACnC,IAAI,CAACA,IAAD,IAAS,CAACA,IAAI,CAACyC,QAAf,IAA2B,CAACzC,IAAI,CAACyC,QAAL,CAAcyB,KAA9C,EAAqD;IACnD,OAAO,IAAP;EACD;;EAED,OAAOlE,IAAI,CAACyC,QAAL,CAAcyB,KAAd,CAAoBW,KAA3B;AACD,CAND;;AAQAhF,SAAS,CAACkB,4BAAV,GAAyC,UAACf,IAAD;EAAA;;EAAA,OAAU,CAAC,EAACA,IAAD,aAACA,IAAD,kCAACA,IAAI,CAAEyC,QAAP,qEAAC,gBAAgByB,KAAjB,kDAAC,sBAAuBY,iBAAxB,CAAX;AAAA,CAAzC;;AAEAjF,SAAS,CAACgB,gBAAV,GAA6B,UAACb,IAAD,EAAU;EACrC,IAAI,CAACA,IAAD,IAAS,CAACA,IAAI,CAACyC,QAAf,IAA2B,CAACzC,IAAI,CAACyC,QAAL,CAAcyB,KAA9C,EAAqD;IACnD,OAAO,IAAP;EACD;;EAED,OAAO,CAAClE,IAAI,CAACyC,QAAL,CAAcyB,KAAd,CAAoBa,cAA5B;AACD,CAND;;AASAlF,SAAS,CAACoB,2BAAV,GAAwC,UAACjB,IAAD;EAAA;;EAAA,OAAU,CAAC,EAACA,IAAD,aAACA,IAAD,kCAACA,IAAI,CAAEyC,QAAP,qEAAC,gBAAgByB,KAAjB,kDAAC,sBAAuBlD,wBAAxB,CAAX;AAAA,CAAxC;;AAEAnB,SAAS,CAAC4B,SAAV,GAAsB,UAACC,MAAD;EAAA,OAAa;IACjCwC,KAAK,EAAExC,MAAM,CAACsD,WADmB;IAEjCZ,KAAK,EAAE1C,MAAM,CAACuD,WAFmB;IAGjCC,MAAM,EAAExD,MAAM,CAACyD;EAHkB,CAAb;AAAA,CAAtB;AAOA;AACA;AACA;AACA;AACA;;;AACAtF,SAAS,CAACgE,0BAAV,GAAuC;EAAA,IAACb,OAAD,uEAAW,EAAX;EAAA,IAAeoC,WAAf;EAAA,OAA+BpC,OAAO,CAAC9C,UAAR,IAAsB8C,OAAO,CAAC9C,UAAR,CAAmByB,KAAnB,KAA6B0D,mBAAnD,IAA+DD,WAAW,CAAClF,UAAZ,CAAuByB,KAAvB,KAAiC2D,iBAAhG,KACpEF,WAAW,CAAClF,UAAZ,CAAuBqF,MAAvB,KAAkCC,8BAAmBC,QAArD,IAAiEL,WAAW,CAAClF,UAAZ,CAAuBqF,MAAvB,KAAkCC,8BAAmBE,cADlD,CAA/B;AAAA,CAAvC;AAIA;AACA;AACA;AACA;;;AACA7F,SAAS,CAAC8F,sBAAV,GAAmC,UAACC,KAAD;EAAA;;EAAA,OAAWA,KAAK,IAAI,sBAAAA,KAAK,CAAC1F,UAAN,iGAAkB2F,MAAlB,gFAA0B/C,IAA1B,MAAmCgD,iBAA5C,IAAsDF,KAAK,CAACjE,KAAN,KAAgBoE,iBAAjF;AAAA,CAAnC;AAEA;AACA;AACA;AACA;;;AACAlG,SAAS,CAACmG,oBAAV,GAAiC,UAACJ,KAAD;EAAA;;EAAA,OAAWA,KAAK,IAAI,uBAAAA,KAAK,CAAC1F,UAAN,mGAAkB2F,MAAlB,gFAA0B/C,IAA1B,MAAmCgD,iBAA5C,IAAsDF,KAAK,CAACjE,KAAN,KAAgB0D,mBAAjF;AAAA,CAAjC;AAEA;AACA;AACA;AACA;AACA;;;AACAxF,SAAS,CAACwD,iBAAV,GAA8B,UAACrD,IAAD,EAAU;EACtC,IAAI,CAACA,IAAL,EAAW;IACT,MAAM,IAAIiG,kBAAJ,CAAmB,mEAAnB,CAAN;EACD;;EAED,OAAOpG,SAAS,CAAC8F,sBAAV,CAAiC3F,IAAjC,CAAP;AACD,CAND;;AAQAH,SAAS,CAAC8D,gBAAV,GAA6B,UAACX,OAAD,EAAUoC,WAAV,EAA0B;EACrD,IAAI,CAACpC,OAAL,EAAc;IACZ,OAAO,IAAP;EACD;;EACD,IAAI,CAACoC,WAAL,EAAkB;IAChB,MAAM,IAAIa,kBAAJ,CAAmB,8EAAnB,CAAN;EACD;;EAED,OAAOjD,OAAO,CAACzB,SAAR,KAAsB6D,WAAW,CAAC7D,SAAzC;AACD,CATD;AAYA;AACA;AACA;AACA;AACA;AACA;;;AACA1B,SAAS,CAACkE,iBAAV,GAA8B,UAACf,OAAD,EAAUoC,WAAV;EAAA;;EAAA,OAA0BpC,OAAO,IAAI,wBAAAA,OAAO,CAAC9C,UAAR,qGAAoB2F,MAApB,gFAA4B/C,IAA5B,MAAqCoD,uBAAhD,IAAgEd,WAAhE,IAA+E,0BAAAA,WAAW,CAAClF,UAAZ,0GAAwB2F,MAAxB,kFAAgC/C,IAAhC,MAAyCqD,oBAAlJ;AAAA,CAA9B;AAEA;AACA;AACA;AACA;AACA;AACA;;;AACAtG,SAAS,CAACyD,eAAV,GAA4B,UAACN,OAAD,EAAUoC,WAAV,EAA0B;EACpD,IAAI,CAACpC,OAAL,EAAc;IACZ;IACA,OAAO,KAAP;EACD;;EACD,IAAI,CAACoC,WAAL,EAAkB;IAChB,MAAM,IAAIa,kBAAJ,CAAmB,kFAAnB,CAAN;EACD;;EAED,OAAOpG,SAAS,CAAC8F,sBAAV,CAAiC3C,OAAjC,KAA6CnD,SAAS,CAACmG,oBAAV,CAA+BZ,WAA/B,CAApD;AACD,CAVD;;AAYAvF,SAAS,CAAC2D,oBAAV,GAAiC,UAACR,OAAD,EAAUoC,WAAV,EAA0B;EACzD,IAAI,CAACA,WAAL,EAAkB;IAChB,MAAM,IAAIa,kBAAJ,CAAmB,oEAAnB,CAAN;EACD;;EAED,IAAI,CAACjD,OAAD,IAAaA,OAAO,CAACtC,WAAR,KAAwB,IAAzC,EAAgD;IAC9C,IAAI0E,WAAW,CAAC1E,WAAhB,EAA6B;MAC3B,OAAO,IAAP,CAD2B,CACd;IACd,CAH6C,CAK9C;;;IACA,OAAO,KAAP;EACD;;EAED,OAAQ0E,WAAW,CAAC1E,WAAZ,KAA4B,IAA7B,KACHsC,OAAO,CAACtC,WAAR,KAAwB0E,WAAW,CAAC1E,WAArC,IAAsD0E,WAAW,CAAC1E,WAAZ,IAA4BsC,OAAO,CAACpC,aAAR,KAA0BwE,WAAW,CAACxE,aADpH,CAAP;AAED,CAhBD;;AAkBAf,SAAS,CAAC4D,iCAAV,GAA8C,YAA+B;EAAA,IAA9BT,OAA8B,uEAApB,EAAoB;EAAA,IAAhBoC,WAAgB;;EAC3E,IAAI,CAACA,WAAL,EAAkB;IAChB,MAAM,IAAIa,kBAAJ,CAAmB,2EAAnB,CAAN;EACD;;EAED,OAAOb,WAAW,CAACtE,yBAAZ,IAAyC,CAACkC,OAAO,CAAClC,yBAAzD;AACD,CAND;;AASAjB,SAAS,CAAC6D,gCAAV,GAA6C,YAA+B;EAAA,IAA9BV,OAA8B,uEAApB,EAAoB;EAAA,IAAhBoC,WAAgB;;EAC1E,IAAI,CAACA,WAAL,EAAkB;IAChB,MAAM,IAAIa,kBAAJ,CAAmB,4EAAnB,CAAN;EACD;;EAED,OAAO,CAACb,WAAW,CAAC1E,WAAb,IAA4B0E,WAAW,CAACpE,wBAAxC,IAAqEgC,OAAO,CAAChC,wBAAR,KAAqCoE,WAAW,CAACpE,wBAA7H;AACD,CAND;AAQA;AACA;AACA;AACA;AACA;AACA;;;AAEAnB,SAAS,CAACuG,SAAV,GAAsB,UAACC,OAAD,EAAUvD,IAAV,EAAgBwD,MAAhB,EAA2B;EAC/C;EACA,IAAID,OAAO,IAAIvD,IAAI,KAAKyD,iBAAxB,EAAgC;IAC9B,OAAO;MAACD,MAAM,EAAED,OAAO,CAACzB,MAAR,CAAe4B,MAAf,IAAyBH,OAAO,CAACzB,MAAR,CAAe1C;IAAjD,CAAP;EACD;;EAED,OAAO;IAACoE,MAAM,EAANA;EAAD,CAAP;AACD,CAPD;;AASAzG,SAAS,CAACgC,cAAV,GAA2B,YAAwB;EAAA,IAAvBC,aAAuB,uEAAP,EAAO;EACjD,IAAMN,WAAW,GAAG;IAClB0C,KAAK,EAAE,EADW;IAElBE,KAAK,EAAE,EAFW;IAGlBE,KAAK,EAAE;EAHW,CAApB;EAMA9C,WAAW,CAAC0C,KAAZ,GAAoBpC,aAAa,CAAC1B,IAAd,CAAmB,UAACqG,KAAD;IAAA,OAAWA,KAAK,CAACC,SAAN,KAAoBC,gBAApB,IAA6BF,KAAK,CAACG,YAAN,KAAuBC,wBAAaC,IAA5E;EAAA,CAAnB,CAApB;EACAtF,WAAW,CAAC4C,KAAZ,GAAoBtC,aAAa,CAAC1B,IAAd,CAAmB,UAACqG,KAAD;IAAA,OAAWA,KAAK,CAACC,SAAN,KAAoBK,gBAApB,IAA6BN,KAAK,CAACG,YAAN,KAAuBC,wBAAaC,IAA5E;EAAA,CAAnB,CAApB;EACAtF,WAAW,CAAC8C,KAAZ,GAAoBxC,aAAa,CAAC1B,IAAd,CAAmB,UAACqG,KAAD;IAAA,OAAWA,KAAK,CAACC,SAAN,KAAoBK,gBAApB,IAA6BN,KAAK,CAACG,YAAN,KAAuBC,wBAAa3B,MAA5E;EAAA,CAAnB,CAApB;EAEA,OAAO1D,WAAP;AACD,CAZD;;eAee3B,S"}
1
+ {"version":3,"names":["SelfUtils","PSTN_DEVICE_TYPE","parse","self","deviceId","joinedWith","devices","find","device","url","pstnDevices","filter","deviceType","remoteMuted","getRemoteMuted","unmuteAllowed","getUnmuteAllowed","localAudioUnmuteRequested","getLocalAudioUnmuteRequested","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_","controls","role","reduce","hasRole","push","getSelves","oldSelf","newSelf","previous","current","updates","isUserAdmitted","isMutedByOthersChanged","mutedByOthersChanged","localAudioUnmuteRequestedByServer","localAudioUnmuteRequiredByServer","moderatorChanged","isMediaInactiveOrReleased","wasMediaInactiveOrReleased","isUserObserving","isDeviceObserving","isMediaInactive","audioStateChange","audio","videoStateChange","video","shareStateChange","share","isJoined","_JOINED_","previousMediaStatus","MEDIA_STATE","inactive","direction","meta","person","muted","requestedToUnmute","disallowUnmute","audioStatus","videoStatus","slides","videoSlidesStatus","changedSelf","_LEFT_","reason","MEETING_END_REASON","INACTIVE","MEDIA_RELEASED","isLocusUserUnadmitted","check","isLocusUserAdmitted","ParameterError","_MOVE_MEDIA_","_OBSERVE_","getSipUrl","partner","sipUri","_CALL_","sipUrl","media","mediaType","AUDIO","mediaContent","MediaContent","main","VIDEO"],"sources":["selfUtils.js"],"sourcesContent":["\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 = {};\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, deviceId) => {\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 remoteMuted: SelfUtils.getRemoteMuted(self),\n unmuteAllowed: SelfUtils.getUnmuteAllowed(self),\n localAudioUnmuteRequested: SelfUtils.getLocalAudioUnmuteRequested(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(\n joinedWith?.mediaSessions\n ),\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 };\n }\n\n return null;\n};\n\nSelfUtils.getRoles = (self) => (self?.controls?.role?.roles || []).reduce((roles, role) => {\n if (role.hasRole) {\n roles.push(role.type);\n }\n\n return roles;\n}, []);\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 = {};\n\n updates.isUserUnadmitted = SelfUtils.isUserUnadmitted(current);\n updates.isUserAdmitted = SelfUtils.isUserAdmitted(previous, current);\n updates.isMutedByOthersChanged = SelfUtils.mutedByOthersChanged(previous, current);\n updates.localAudioUnmuteRequestedByServer = SelfUtils.localAudioUnmuteRequestedByServer(previous, current);\n updates.localAudioUnmuteRequiredByServer = SelfUtils.localAudioUnmuteRequiredByServer(previous, current);\n updates.moderatorChanged = SelfUtils.moderatorChanged(previous, current);\n updates.isMediaInactiveOrReleased = SelfUtils.wasMediaInactiveOrReleased(previous, current);\n updates.isUserObserving = SelfUtils.isDeviceObserving(previous, current);\n\n updates.isMediaInactive = SelfUtils.isMediaInactive(previous, current);\n updates.audioStateChange = previous?.currentMediaStatus.audio !== current.currentMediaStatus.audio;\n updates.videoStateChange = previous?.currentMediaStatus.video !== current.currentMediaStatus.video;\n updates.shareStateChange = previous?.currentMediaStatus.share !== current.currentMediaStatus.share;\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) => self?.state === _JOINED_;\n\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(\n previous.joinedWith.mediaSessions\n );\n const currentMediaStatus = SelfUtils.getMediaStatus(\n current.joinedWith.mediaSessions\n );\n\n if (\n previousMediaStatus.audio && 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 && 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 && 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 (!self || !self.controls || !self.controls.audio || !self.controls.audio.meta || !self.controls.audio.meta.lastModified) {\n return null;\n }\n\n return self.controls.audio.meta.lastModified;\n};\n\nSelfUtils.getModifiedBy = (self) => {\n if (!self || !self.controls || !self.controls.audio || !self.controls.audio.meta || !self.controls.audio.meta.modifiedBy) {\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) => {\n if (!self && !self.person) {\n return null;\n }\n\n return self.person.id;\n};\n\n/**\n * get the \"remote mute\" property from the self object\n * @param {Object} self\n * @returns {Boolean}\n */\nSelfUtils.getRemoteMuted = (self) => {\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\nSelfUtils.getUnmuteAllowed = (self) => {\n if (!self || !self.controls || !self.controls.audio) {\n return null;\n }\n\n return !self.controls.audio.disallowUnmute;\n};\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/**\n * @param {Object} oldSelf\n * @param {Object} changedSelf\n * @returns {Boolean}\n */\nSelfUtils.wasMediaInactiveOrReleased = (oldSelf = {}, changedSelf) => oldSelf.joinedWith && oldSelf.joinedWith.state === _JOINED_ && changedSelf.joinedWith.state === _LEFT_ &&\n (changedSelf.joinedWith.reason === MEETING_END_REASON.INACTIVE || changedSelf.joinedWith.reason === MEETING_END_REASON.MEDIA_RELEASED);\n\n\n/**\n * @param {Object} check\n * @returns {Boolean}\n */\nSelfUtils.isLocusUserUnadmitted = (check) => check && check.joinedWith?.intent?.type === _WAIT_ && check.state === _IDLE_;\n\n/**\n * @param {Object} check\n * @returns {Boolean}\n */\nSelfUtils.isLocusUserAdmitted = (check) => 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) => {\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('New self must be defined to determine if self transitioned moderator status.');\n }\n\n return oldSelf.moderator !== changedSelf.moderator;\n};\n\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, changedSelf) => oldSelf && oldSelf.joinedWith?.intent?.type === _MOVE_MEDIA_ && changedSelf && 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, changedSelf) => {\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('New self must be defined to determine if self transitioned to admitted as guest.');\n }\n\n return SelfUtils.isLocusUserUnadmitted(oldSelf) && SelfUtils.isLocusUserAdmitted(changedSelf);\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 (changedSelf.remoteMuted !== null) &&\n ((oldSelf.remoteMuted !== changedSelf.remoteMuted) || (changedSelf.remoteMuted && (oldSelf.unmuteAllowed !== changedSelf.unmuteAllowed)));\n};\n\nSelfUtils.localAudioUnmuteRequestedByServer = (oldSelf = {}, changedSelf) => {\n if (!changedSelf) {\n throw new ParameterError('New self must be defined to determine if self received request to unmute.');\n }\n\n return changedSelf.localAudioUnmuteRequested && !oldSelf.localAudioUnmuteRequested;\n};\n\n\nSelfUtils.localAudioUnmuteRequiredByServer = (oldSelf = {}, changedSelf) => {\n if (!changedSelf) {\n throw new ParameterError('New self must be defined to determine if localAudioUnmuteRequired changed.');\n }\n\n return !changedSelf.remoteMuted && changedSelf.localAudioUnmuteRequired && (oldSelf.localAudioUnmuteRequired !== changedSelf.localAudioUnmuteRequired);\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, 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((media) => media.mediaType === AUDIO && media.mediaContent === MediaContent.main);\n mediaStatus.video = mediaSessions.find((media) => media.mediaType === VIDEO && media.mediaContent === MediaContent.main);\n mediaStatus.share = mediaSessions.find((media) => media.mediaType === VIDEO && media.mediaContent === MediaContent.slides);\n\n return mediaStatus;\n};\n\n\nexport default SelfUtils;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"names":["isBrowser","Media","setLocalTrack","enabled","track","reconnectMedia","peerConnection","meetingId","remoteQualityLevel","enableRtx","enableExtmap","connectionState","PEER_CONNECTION_STATE","CLOSED","FAILED","reject","ReconnectionError","PeerConnectionManager","createOffer","generateLocalMedias","mediaId","audioMuted","videoMuted","localSdp","getLocalMedia","options","config","sendAudio","sendVideo","sendShare","sharePreferences","isSharing","getMedia","getDisplayMedia","resolve","undefined","checkTracks","trackType","receiveTracks","getDirection","sendTracks","direction","attachMedia","mediaProperties","mediaDirection","audioTrack","videoTrack","shareTrack","result","receiveAudio","audioTransceiver","addTransceiver","receiveVideo","videoTransceiver","receiveShare","shareTransceiver","onnegotiationneeded","event","LoggerProxy","logger","info","updateMedia","setTrackOnTransceiver","type","sendTrack","receiveTrack","transceiver","sender","replaceTrack","e","error","updateTransceiver","customResolution","screenResolution","customShareFrameRate","screenFrameRate","hasSharePreferences","hasCustomConstraints","shareConstraints","hasHighFrameRate","highFrameRate","Config","meetings","resolution","videoShareFrameRate","aspectRatio","cursor","MEDIA_TRACK_CONSTRAINT","CURSOR","AWLAYS","frameRate","height","idealHeight","width","idealWidth","mediaConfig","audio","video","navigator","mediaDevices","then","stream","getVideoTracks","length","applyConstraints","getDisplayMediaParams","defaultWidth","ideal","max","maxWidth","defaultHeight","maxHeight","deviceId","fake","process","env","NODE_ENV","getUserMedia","catch","err","logPath","constraint","getSupportedDevice","enumerateDevices","devices","supported","filter","device","kind","AUDIO_INPUT","VIDEO_INPUT","getDevices","MediaError","toggleStream","stopTracks","stop","readyState","stopStream","warn","getTracks","forEach","mediaSetting","audioVideo","localStream","shareStream"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n/* globals navigator */\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {\n AUDIO_INPUT,\n VIDEO_INPUT,\n PEER_CONNECTION_STATE,\n MEDIA_TRACK_CONSTRAINT\n} from '../constants';\nimport Config from '../config';\nimport PeerConnectionManager from '../peer-connection-manager';\nimport ReconnectionError from '../common/errors/reconnection';\nimport MediaError from '../common/errors/media';\nimport BrowserDetection from '../common/browser-detection';\n\nconst {isBrowser} = BrowserDetection();\n\n/**\n * MediaDirection\n * @typedef {Object} MediaDirection\n * @property {boolean} sendAudio\n * @property {boolean} receiveAudio\n * @property {boolean} sendVideo\n * @property {boolean} receiveVideo\n * @property {boolean} sendShare\n * @property {boolean} receiveShare\n */\n\n/**\n * SendOptions\n * @typedef {Object} SendOptions\n * @property sendAudio\n * @property sendVideo\n * @property sendShare\n * @property isSharing\n * @property {Object} sharePreferences\n */\n/**\n *\n * @public\n * @export\n * Mimic browser APIs as \"the ultimate browser\".\n * Handles the quirks of each browser.\n * Extends and enhances adapter.js, i.e., the \"media\" file from the web client.\n */\nconst Media = {};\n\n/**\n * @param {boolean} enabled\n * @param {MediaStreamTrack} track\n * @returns {Boolean}\n * @public\n */\nMedia.setLocalTrack = (enabled, track) => {\n if (track) {\n track.enabled = enabled;\n\n return true;\n }\n\n return false;\n};\n\n/**\n * @param {RTCPeerConnection} peerConnection\n * @param {Object} meetingProperties\n * @param {string} meetingProperties.meetingId\n * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH\n * @returns {Promise}\n */\nMedia.reconnectMedia = (peerConnection, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap\n}) => {\n if (peerConnection.connectionState === PEER_CONNECTION_STATE.CLOSED ||\n peerConnection.connectionState === PEER_CONNECTION_STATE.FAILED) {\n return Promise.reject(new ReconnectionError('Reinitiate peerconnection'));\n }\n\n return PeerConnectionManager.createOffer(peerConnection, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap\n });\n};\n\n/**\n * format the media array for send\n * @param {String} mediaId\n * @param {Boolean} audioMuted\n * @param {Boolean} videoMuted\n * @returns {Array} medias\n */\nMedia.generateLocalMedias = (mediaId, audioMuted, videoMuted) => {\n if (mediaId) {\n return [\n {\n localSdp: JSON.stringify({\n audioMuted,\n videoMuted\n }),\n mediaId\n }\n ];\n }\n\n return [];\n};\n\n/**\n * make a browser call to get the media\n * @param {SendOptions} options\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Promise}\n */\nMedia.getLocalMedia = (options, config) => {\n const {\n sendAudio, sendVideo, sendShare, sharePreferences, isSharing\n } = options;\n\n if (sendAudio || sendVideo) {\n return Media.getMedia(sendAudio, sendVideo, config);\n }\n\n if (sendShare && !isSharing) {\n return Media.getDisplayMedia(\n {\n sendAudio: false,\n sendShare: true,\n sharePreferences\n },\n config\n );\n }\n\n return Promise.resolve(undefined);\n};\n/**\n * Returns the direction and tracks\n * @param {string} trackType type of track (audio/video)\n * @param {object} track tracks passed\n * @param {boolean} receiveTracks do you want to receive tracks from the remote side\n * @returns {Object} returns direction tracks to be added in transceiver\n */\nMedia.checkTracks = (trackType, track, receiveTracks) => {\n const getDirection = (sendTracks, receiveTracks) => {\n if (sendTracks && receiveTracks) {\n return 'sendrecv';\n } if (sendTracks && !receiveTracks) {\n return 'sendonly';\n } if (!sendTracks && receiveTracks) {\n return 'recvonly';\n }\n\n return 'inactive';\n };\n\n if (track) {\n return {track, direction: getDirection(!!track, receiveTracks)};\n }\n\n return {track: trackType, direction: getDirection(!!track, receiveTracks)};\n};\n/**\n * creates peerconnection and attaches streams\n * @param {MediaDirection} mediaProperties\n * @param {Object} meetingProperties\n * @param {string} meetingProperties.meetingId\n * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH\n * @returns {Array} [peerConnection, ]\n */\nMedia.attachMedia = (mediaProperties, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap\n}) => {\n const {\n mediaDirection,\n audioTrack,\n videoTrack,\n shareTrack,\n peerConnection\n } = mediaProperties;\n\n let result = null;\n\n // Add Transceiver for audio\n result = Media.checkTracks('audio', mediaDirection.sendAudio && audioTrack, mediaDirection.receiveAudio);\n peerConnection.audioTransceiver = peerConnection.addTransceiver(result.track, {direction: result.direction});\n\n // Add Transceiver for video\n result = Media.checkTracks('video', mediaDirection.sendVideo && videoTrack, mediaDirection.receiveVideo);\n peerConnection.videoTransceiver = peerConnection.addTransceiver(result.track, {direction: result.direction});\n\n // Add Transceiver for share\n result = Media.checkTracks('video', mediaDirection.sendShare && shareTrack, mediaDirection.receiveShare);\n peerConnection.shareTransceiver = peerConnection.addTransceiver(result.track, {direction: result.direction});\n\n peerConnection.onnegotiationneeded = (event) => {\n LoggerProxy.logger.info(`Media:index#attachMedia --> onnegotiationneeded#PeerConnection: ${event}`);\n };\n\n return PeerConnectionManager.createOffer(peerConnection, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap\n });\n};\n\n/**\n * updates all the media streams and creates a new media offer\n * @param {MediaDirection} mediaProperties\n * @param {Object} meetingProperties\n * @param {string} meetingProperties.meetingId\n * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH\n * @returns {Promise}\n */\nMedia.updateMedia = (mediaProperties, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap\n}) => {\n const {\n mediaDirection,\n audioTrack,\n videoTrack,\n shareTrack,\n peerConnection\n } = mediaProperties;\n\n // update audio transceiver\n Media.setTrackOnTransceiver(peerConnection.audioTransceiver, {\n type: 'audio',\n track: audioTrack,\n sendTrack: mediaDirection.sendAudio && audioTrack,\n receiveTrack: mediaDirection.receiveAudio\n });\n\n // update video transceiver\n Media.setTrackOnTransceiver(peerConnection.videoTransceiver, {\n type: 'video',\n track: videoTrack,\n sendTrack: mediaDirection.sendVideo && videoTrack,\n receiveTrack: mediaDirection.receiveVideo\n });\n\n // update content transceiver\n Media.setTrackOnTransceiver(peerConnection.shareTransceiver, {\n type: 'video',\n track: shareTrack,\n sendTrack: mediaDirection.sendShare && shareTrack,\n receiveTrack: mediaDirection.receiveShare\n });\n peerConnection.onnegotiationneeded = (event) => {\n LoggerProxy.logger.info(`Media:index#updateMedia --> onnegotiationneeded#PeerConnection: ${event}`);\n };\n\n return PeerConnectionManager.createOffer(peerConnection, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap\n });\n};\n\n/**\n * @param {RTCRtpTransceiver} transceiver\n * @param {Object} options\n * @param {MediaStreamTrack} options.track\n * @returns {undefined}\n */\nMedia.setTrackOnTransceiver = (transceiver, options) => {\n const {\n type, track, sendTrack, receiveTrack\n } = options;\n\n try {\n const result = Media.checkTracks(type, sendTrack && track, receiveTrack);\n\n transceiver.direction = result.direction;\n if (options.track) {\n transceiver.sender.replaceTrack(track);\n }\n }\n catch (e) {\n LoggerProxy.logger.error(`Media:index#setTrackOnTransceiver --> ${e}`);\n throw e;\n }\n};\n\n/**\n * creates a new offer\n * @param {Object} meetingProperties\n * @param {string} meetingProperties.meetingId\n * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH\n * @param {RTCPeerConnection} peerConnection\n * @param {RTCRtpTransceiver} transceiver\n * @param {Object} options see #Media.setTrackOnTransceiver\n * @returns {Promise}\n */\nMedia.updateTransceiver = ({\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap\n}, peerConnection, transceiver, options) => {\n Media.setTrackOnTransceiver(transceiver, options);\n\n return PeerConnectionManager.createOffer(peerConnection, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap\n });\n};\n\n/**\n * generates share streams\n * @param {Object} options parameter\n * @param {Boolean} options.sendAudio send audio from the display share\n * @param {Boolean} options.sendShare send video from the display share\n * @param {Object} options.sharePreferences\n * @param {MediaTrackConstraints} options.sharePreferences.shareConstraints constraints to apply to video\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints}\n * @param {Boolean} options.sharePreferences.highFrameRate if shareConstraints isn't provided, set default values based off of this boolean\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Promise.<MediaStream>}\n */\nMedia.getDisplayMedia = (options, config = {}) => {\n // SDK screen share resolution settings from Webex.init\n const customResolution = config.screenResolution || {};\n // user defined screen share frame rate\n const customShareFrameRate = config.screenFrameRate || null;\n // user defined share preferences\n const hasSharePreferences = options.sharePreferences;\n const hasCustomConstraints = hasSharePreferences && hasSharePreferences.shareConstraints;\n const hasHighFrameRate = hasSharePreferences && hasSharePreferences.highFrameRate;\n const {\n screenResolution,\n resolution,\n videoShareFrameRate,\n screenFrameRate,\n aspectRatio\n } = Config.meetings;\n\n let shareConstraints = {\n cursor: MEDIA_TRACK_CONSTRAINT.CURSOR.AWLAYS,\n aspectRatio\n };\n\n if (hasCustomConstraints) {\n shareConstraints = hasSharePreferences.shareConstraints;\n }\n else if (hasHighFrameRate) {\n shareConstraints = {\n ...shareConstraints,\n frameRate: videoShareFrameRate,\n height: resolution.idealHeight,\n width: resolution.idealWidth,\n ...config.resolution\n };\n }\n else {\n shareConstraints = {\n ...shareConstraints,\n frameRate: customShareFrameRate || screenFrameRate,\n height: customResolution.idealHeight || screenResolution.idealHeight,\n width: customResolution.idealWidth || screenResolution.idealWidth,\n ...config.screenResolution\n };\n }\n\n // chrome and webkit based browsers (edge, safari) automatically adjust everything\n // and we have noticed higher quality with those browser types\n // firefox specifically has some issues with resolution and frame rate decision making\n // so we are making it optional and configurable (with defaults) for firefox\n // to have higher quality, and for developers to control the values\n // eventually we may have to add the same functionality to chrome, OR conversely, get to with firefox\n\n\n if (isBrowser('firefox')) {\n const mediaConfig = {\n audio: options.sendAudio,\n video: options.sendShare\n };\n\n\n return navigator.mediaDevices.getDisplayMedia({audio: options.sendAudio, video: mediaConfig})\n .then((stream) => {\n if (options.sendShare && stream.getVideoTracks().length > 0) {\n // Firefox has a bug with the spec where changing in the height and width only happens\n // after we get the inital tracks\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1321221\n stream.getVideoTracks()[0].applyConstraints(shareConstraints);\n }\n\n\n return stream;\n });\n }\n\n const getDisplayMediaParams = {video: options.sendShare ? shareConstraints : false};\n\n // safari doesn't support sending screen share audio\n // https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia\n if (options.sendAudio && isBrowser('safari')) {\n getDisplayMediaParams.audio = options.sendAudio;\n }\n\n return navigator.mediaDevices.getDisplayMedia(getDisplayMediaParams);\n};\n\n/**\n * generates audio and video using constraints (often called after getSupportedDevices)\n * @param {Object|Boolean} audio gum constraints\n * @param {Object|Boolean} video gum constraints\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Object} {streams}\n */\nMedia.getMedia = (audio, video, config) => {\n const defaultWidth = {ideal: config.resolution.idealWidth, max: config.resolution.maxWidth};\n const defaultHeight = {ideal: config.resolution.idealHeight, max: config.resolution.maxHeight};\n const mediaConfig = {\n audio,\n // TODO: Remove temporary workaround once Firefox fixes low constraint issues\n // eslint-disable-next-line no-nested-ternary\n video: video ?\n isBrowser('firefox') && video.width && video.width.max === 320 ?\n {\n deviceId: video.deviceId ? video.deviceId : undefined,\n width: 320,\n height: 180\n } :\n {\n deviceId: video.deviceId ? video.deviceId : undefined,\n width: video.width ? video.width : defaultWidth,\n height: video.height ? video.height : defaultHeight\n } :\n false,\n fake: process.env.NODE_ENV === 'test' // Special case to get fake media for Firefox browser for testing\n };\n\n return navigator.mediaDevices\n .getUserMedia(mediaConfig)\n .catch((err) => {\n const logPath = 'Media:index#getMedia --> navigator.mediaDevices.getUserMedia';\n\n LoggerProxy.logger.error(`${logPath} failed - ${err} (${err.constraint})`);\n throw err;\n });\n};\n\n/**\n * Checks if the machine has at least one audio or video device (Dont use this for screen share)\n * @param {object} [options]\n * {\n * sendAudio: true/false,\n * sendVideo: true/false\n * }\n * @returns {Object} {\n * sendAudio: true/false,\n * sendVideo: true/false\n *}\n */\nMedia.getSupportedDevice = ({sendAudio, sendVideo}) =>\n Promise.resolve().then(() => {\n if (!navigator.mediaDevices || navigator.mediaDevices.enumerateDevices === undefined) {\n return {\n sendAudio: false,\n sendVideo: false\n };\n }\n\n return navigator.mediaDevices.enumerateDevices().then((devices) => {\n const supported = {\n audio: devices.filter((device) => device.kind === AUDIO_INPUT).length > 0,\n video: devices.filter((device) => device.kind === VIDEO_INPUT).length > 0\n };\n\n return {\n sendAudio: supported.audio && sendAudio,\n sendVideo: supported.video && sendVideo\n };\n });\n });\n\n/**\n * proxy to browser navigator.mediaDevices.enumerateDevices()\n * @returns {Promise}\n */\nMedia.getDevices = () => {\n if (navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {\n return navigator.mediaDevices.enumerateDevices();\n }\n\n return Promise.reject(new MediaError('enumerateDevices not supported.'));\n};\n\n/**\n *\n * Toggle a specific stream\n * noop as of now, does nothing\n * @returns {null}\n */\nMedia.toggleStream = () => {};\n\n/**\n * Stop input stream\n * @param {MediaTrack} track A media stream\n * @returns {null}\n */\nMedia.stopTracks = (track) => {\n if (!track) {\n return Promise.resolve();\n }\n\n return Promise.resolve().then(() => {\n if (track && track.stop) {\n try {\n track.stop();\n }\n catch (e) {\n LoggerProxy.logger.error(`Media:index#stopTracks --> Unable to stop the track with state ${track.readyState}, error: ${e}`);\n }\n }\n });\n};\n\n/**\n *\n * Stop input stream\n * @param {Stream} stream A media stream\n * @returns {null}\n * @deprecated after v1.89.3\n */\nMedia.stopStream = (stream) => {\n LoggerProxy.logger.warn('Media:index#stopStream --> [DEPRECATION WARNING]: stopStream has been deprecated after v1.89.3');\n if (!stream) {\n return Promise.resolve();\n }\n\n /*\n * To release local media\n * 1) Chrome requires all tracks to be stopped (stream.stop got deprecated)\n * 2) Firefox requires the stream to be stopped\n */\n return Promise.resolve().then(() => {\n if (stream.getTracks) {\n stream.getTracks().forEach((track) => {\n track.stop();\n });\n }\n else if (stream.stop) {\n stream.stop();\n }\n });\n};\n\n/**\n * generates streams for audio video and share\n * @param {object} mediaSetting parameter\n * @param {Object} mediaSetting.sendAudio sendAudio: {Boolean} sendAudio constraints\n * @param {Object} mediaSetting.sendVideo sendVideo: {Boolean} sendVideo constraints\n * @param {Object} mediaSetting.sendShare sendShare: {Boolean} sendShare constraints\n * @param {Object} mediaSetting.isSharing isSharing: {Boolean} isSharing constraints\n * @param {Object} audioVideo parameter\n * @param {Object} audioVideo.audio {deviceId: {String}}\n * @param {Object} audioVideo.video {deviceId: {String}}\n * @param {Object} sharePreferences parameter\n * @param {Object} sharePreferences.shareConstraints parameter\n * @param {Boolean} sharePreferences.highFrameRate parameter\n * @param {Object} config SDK Config\n * @returns {Array} [localStream, shareStream]\n */\nMedia.getUserMedia = (mediaSetting, audioVideo, sharePreferences, config) => Media.getLocalMedia({\n sendAudio: mediaSetting.sendAudio ? audioVideo.audio || mediaSetting.sendAudio : false,\n sendVideo: mediaSetting.sendVideo ? audioVideo.video || mediaSetting.sendVideo : false\n}, config).then((localStream) => Media.getLocalMedia({\n sendShare: mediaSetting.sendShare,\n isSharing: mediaSetting.isSharing,\n sharePreferences\n}, config).then((shareStream) => [localStream, shareStream]));\n\nexport default Media;\n"],"mappings":"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"}
1
+ {"version":3,"names":["BrowserDetection","isBrowser","Media","setLocalTrack","enabled","track","reconnectMedia","peerConnection","meetingId","remoteQualityLevel","enableRtx","enableExtmap","connectionState","PEER_CONNECTION_STATE","CLOSED","FAILED","reject","ReconnectionError","PeerConnectionManager","createOffer","generateLocalMedias","mediaId","audioMuted","videoMuted","localSdp","getLocalMedia","options","config","sendAudio","sendVideo","sendShare","sharePreferences","isSharing","getMedia","getDisplayMedia","resolve","undefined","checkTracks","trackType","receiveTracks","getDirection","sendTracks","direction","attachMedia","mediaProperties","mediaDirection","audioTrack","videoTrack","shareTrack","result","receiveAudio","audioTransceiver","addTransceiver","receiveVideo","videoTransceiver","receiveShare","shareTransceiver","onnegotiationneeded","event","LoggerProxy","logger","info","updateMedia","setTrackOnTransceiver","type","sendTrack","receiveTrack","transceiver","sender","replaceTrack","e","error","updateTransceiver","customResolution","screenResolution","customShareFrameRate","screenFrameRate","hasSharePreferences","hasCustomConstraints","shareConstraints","hasHighFrameRate","highFrameRate","Config","meetings","resolution","videoShareFrameRate","aspectRatio","cursor","MEDIA_TRACK_CONSTRAINT","CURSOR","AWLAYS","frameRate","height","idealHeight","width","idealWidth","mediaConfig","audio","video","navigator","mediaDevices","then","stream","getVideoTracks","length","applyConstraints","getDisplayMediaParams","defaultWidth","ideal","max","maxWidth","defaultHeight","maxHeight","deviceId","fake","process","env","NODE_ENV","getUserMedia","catch","err","logPath","constraint","getSupportedDevice","enumerateDevices","devices","supported","filter","device","kind","AUDIO_INPUT","VIDEO_INPUT","getDevices","MediaError","toggleStream","stopTracks","stop","readyState","stopStream","warn","getTracks","forEach","mediaSetting","audioVideo","localStream","shareStream"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n/* globals navigator */\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {\n AUDIO_INPUT,\n VIDEO_INPUT,\n PEER_CONNECTION_STATE,\n MEDIA_TRACK_CONSTRAINT\n} from '../constants';\nimport Config from '../config';\nimport PeerConnectionManager from '../peer-connection-manager';\nimport ReconnectionError from '../common/errors/reconnection';\nimport MediaError from '../common/errors/media';\nimport BrowserDetection from '../common/browser-detection';\n\nconst {isBrowser} = BrowserDetection();\n\n/**\n * MediaDirection\n * @typedef {Object} MediaDirection\n * @property {boolean} sendAudio\n * @property {boolean} receiveAudio\n * @property {boolean} sendVideo\n * @property {boolean} receiveVideo\n * @property {boolean} sendShare\n * @property {boolean} receiveShare\n */\n\n/**\n * SendOptions\n * @typedef {Object} SendOptions\n * @property sendAudio\n * @property sendVideo\n * @property sendShare\n * @property isSharing\n * @property {Object} sharePreferences\n */\n/**\n *\n * @public\n * @export\n * Mimic browser APIs as \"the ultimate browser\".\n * Handles the quirks of each browser.\n * Extends and enhances adapter.js, i.e., the \"media\" file from the web client.\n */\nconst Media = {};\n\n/**\n * @param {boolean} enabled\n * @param {MediaStreamTrack} track\n * @returns {Boolean}\n * @public\n */\nMedia.setLocalTrack = (enabled, track) => {\n if (track) {\n track.enabled = enabled;\n\n return true;\n }\n\n return false;\n};\n\n/**\n * @param {RTCPeerConnection} peerConnection\n * @param {Object} meetingProperties\n * @param {string} meetingProperties.meetingId\n * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH\n * @returns {Promise}\n */\nMedia.reconnectMedia = (peerConnection, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap\n}) => {\n if (peerConnection.connectionState === PEER_CONNECTION_STATE.CLOSED ||\n peerConnection.connectionState === PEER_CONNECTION_STATE.FAILED) {\n return Promise.reject(new ReconnectionError('Reinitiate peerconnection'));\n }\n\n return PeerConnectionManager.createOffer(peerConnection, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap\n });\n};\n\n/**\n * format the media array for send\n * @param {String} mediaId\n * @param {Boolean} audioMuted\n * @param {Boolean} videoMuted\n * @returns {Array} medias\n */\nMedia.generateLocalMedias = (mediaId, audioMuted, videoMuted) => {\n if (mediaId) {\n return [\n {\n localSdp: JSON.stringify({\n audioMuted,\n videoMuted\n }),\n mediaId\n }\n ];\n }\n\n return [];\n};\n\n/**\n * make a browser call to get the media\n * @param {SendOptions} options\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Promise}\n */\nMedia.getLocalMedia = (options, config) => {\n const {\n sendAudio, sendVideo, sendShare, sharePreferences, isSharing\n } = options;\n\n if (sendAudio || sendVideo) {\n return Media.getMedia(sendAudio, sendVideo, config);\n }\n\n if (sendShare && !isSharing) {\n return Media.getDisplayMedia(\n {\n sendAudio: false,\n sendShare: true,\n sharePreferences\n },\n config\n );\n }\n\n return Promise.resolve(undefined);\n};\n/**\n * Returns the direction and tracks\n * @param {string} trackType type of track (audio/video)\n * @param {object} track tracks passed\n * @param {boolean} receiveTracks do you want to receive tracks from the remote side\n * @returns {Object} returns direction tracks to be added in transceiver\n */\nMedia.checkTracks = (trackType, track, receiveTracks) => {\n const getDirection = (sendTracks, receiveTracks) => {\n if (sendTracks && receiveTracks) {\n return 'sendrecv';\n } if (sendTracks && !receiveTracks) {\n return 'sendonly';\n } if (!sendTracks && receiveTracks) {\n return 'recvonly';\n }\n\n return 'inactive';\n };\n\n if (track) {\n return {track, direction: getDirection(!!track, receiveTracks)};\n }\n\n return {track: trackType, direction: getDirection(!!track, receiveTracks)};\n};\n/**\n * creates peerconnection and attaches streams\n * @param {MediaDirection} mediaProperties\n * @param {Object} meetingProperties\n * @param {string} meetingProperties.meetingId\n * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH\n * @returns {Array} [peerConnection, ]\n */\nMedia.attachMedia = (mediaProperties, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap\n}) => {\n const {\n mediaDirection,\n audioTrack,\n videoTrack,\n shareTrack,\n peerConnection\n } = mediaProperties;\n\n let result = null;\n\n // Add Transceiver for audio\n result = Media.checkTracks('audio', mediaDirection.sendAudio && audioTrack, mediaDirection.receiveAudio);\n peerConnection.audioTransceiver = peerConnection.addTransceiver(result.track, {direction: result.direction});\n\n // Add Transceiver for video\n result = Media.checkTracks('video', mediaDirection.sendVideo && videoTrack, mediaDirection.receiveVideo);\n peerConnection.videoTransceiver = peerConnection.addTransceiver(result.track, {direction: result.direction});\n\n // Add Transceiver for share\n result = Media.checkTracks('video', mediaDirection.sendShare && shareTrack, mediaDirection.receiveShare);\n peerConnection.shareTransceiver = peerConnection.addTransceiver(result.track, {direction: result.direction});\n\n peerConnection.onnegotiationneeded = (event) => {\n LoggerProxy.logger.info(`Media:index#attachMedia --> onnegotiationneeded#PeerConnection: ${event}`);\n };\n\n return PeerConnectionManager.createOffer(peerConnection, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap\n });\n};\n\n/**\n * updates all the media streams and creates a new media offer\n * @param {MediaDirection} mediaProperties\n * @param {Object} meetingProperties\n * @param {string} meetingProperties.meetingId\n * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH\n * @returns {Promise}\n */\nMedia.updateMedia = (mediaProperties, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap\n}) => {\n const {\n mediaDirection,\n audioTrack,\n videoTrack,\n shareTrack,\n peerConnection\n } = mediaProperties;\n\n // update audio transceiver\n Media.setTrackOnTransceiver(peerConnection.audioTransceiver, {\n type: 'audio',\n track: audioTrack,\n sendTrack: mediaDirection.sendAudio && audioTrack,\n receiveTrack: mediaDirection.receiveAudio\n });\n\n // update video transceiver\n Media.setTrackOnTransceiver(peerConnection.videoTransceiver, {\n type: 'video',\n track: videoTrack,\n sendTrack: mediaDirection.sendVideo && videoTrack,\n receiveTrack: mediaDirection.receiveVideo\n });\n\n // update content transceiver\n Media.setTrackOnTransceiver(peerConnection.shareTransceiver, {\n type: 'video',\n track: shareTrack,\n sendTrack: mediaDirection.sendShare && shareTrack,\n receiveTrack: mediaDirection.receiveShare\n });\n peerConnection.onnegotiationneeded = (event) => {\n LoggerProxy.logger.info(`Media:index#updateMedia --> onnegotiationneeded#PeerConnection: ${event}`);\n };\n\n return PeerConnectionManager.createOffer(peerConnection, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap\n });\n};\n\n/**\n * @param {RTCRtpTransceiver} transceiver\n * @param {Object} options\n * @param {MediaStreamTrack} options.track\n * @returns {undefined}\n */\nMedia.setTrackOnTransceiver = (transceiver, options) => {\n const {\n type, track, sendTrack, receiveTrack\n } = options;\n\n try {\n const result = Media.checkTracks(type, sendTrack && track, receiveTrack);\n\n transceiver.direction = result.direction;\n if (options.track) {\n transceiver.sender.replaceTrack(track);\n }\n }\n catch (e) {\n LoggerProxy.logger.error(`Media:index#setTrackOnTransceiver --> ${e}`);\n throw e;\n }\n};\n\n/**\n * creates a new offer\n * @param {Object} meetingProperties\n * @param {string} meetingProperties.meetingId\n * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH\n * @param {RTCPeerConnection} peerConnection\n * @param {RTCRtpTransceiver} transceiver\n * @param {Object} options see #Media.setTrackOnTransceiver\n * @returns {Promise}\n */\nMedia.updateTransceiver = ({\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap\n}, peerConnection, transceiver, options) => {\n Media.setTrackOnTransceiver(transceiver, options);\n\n return PeerConnectionManager.createOffer(peerConnection, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap\n });\n};\n\n/**\n * generates share streams\n * @param {Object} options parameter\n * @param {Boolean} options.sendAudio send audio from the display share\n * @param {Boolean} options.sendShare send video from the display share\n * @param {Object} options.sharePreferences\n * @param {MediaTrackConstraints} options.sharePreferences.shareConstraints constraints to apply to video\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints}\n * @param {Boolean} options.sharePreferences.highFrameRate if shareConstraints isn't provided, set default values based off of this boolean\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Promise.<MediaStream>}\n */\nMedia.getDisplayMedia = (options, config = {}) => {\n // SDK screen share resolution settings from Webex.init\n const customResolution = config.screenResolution || {};\n // user defined screen share frame rate\n const customShareFrameRate = config.screenFrameRate || null;\n // user defined share preferences\n const hasSharePreferences = options.sharePreferences;\n const hasCustomConstraints = hasSharePreferences && hasSharePreferences.shareConstraints;\n const hasHighFrameRate = hasSharePreferences && hasSharePreferences.highFrameRate;\n const {\n screenResolution,\n resolution,\n videoShareFrameRate,\n screenFrameRate,\n aspectRatio\n } = Config.meetings;\n\n let shareConstraints = {\n cursor: MEDIA_TRACK_CONSTRAINT.CURSOR.AWLAYS,\n aspectRatio\n };\n\n if (hasCustomConstraints) {\n shareConstraints = hasSharePreferences.shareConstraints;\n }\n else if (hasHighFrameRate) {\n shareConstraints = {\n ...shareConstraints,\n frameRate: videoShareFrameRate,\n height: resolution.idealHeight,\n width: resolution.idealWidth,\n ...config.resolution\n };\n }\n else {\n shareConstraints = {\n ...shareConstraints,\n frameRate: customShareFrameRate || screenFrameRate,\n height: customResolution.idealHeight || screenResolution.idealHeight,\n width: customResolution.idealWidth || screenResolution.idealWidth,\n ...config.screenResolution\n };\n }\n\n // chrome and webkit based browsers (edge, safari) automatically adjust everything\n // and we have noticed higher quality with those browser types\n // firefox specifically has some issues with resolution and frame rate decision making\n // so we are making it optional and configurable (with defaults) for firefox\n // to have higher quality, and for developers to control the values\n // eventually we may have to add the same functionality to chrome, OR conversely, get to with firefox\n\n\n if (isBrowser('firefox')) {\n const mediaConfig = {\n audio: options.sendAudio,\n video: options.sendShare\n };\n\n\n return navigator.mediaDevices.getDisplayMedia({audio: options.sendAudio, video: mediaConfig})\n .then((stream) => {\n if (options.sendShare && stream.getVideoTracks().length > 0) {\n // Firefox has a bug with the spec where changing in the height and width only happens\n // after we get the inital tracks\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1321221\n stream.getVideoTracks()[0].applyConstraints(shareConstraints);\n }\n\n\n return stream;\n });\n }\n\n const getDisplayMediaParams = {video: options.sendShare ? shareConstraints : false};\n\n // safari doesn't support sending screen share audio\n // https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia\n if (options.sendAudio && isBrowser('safari')) {\n getDisplayMediaParams.audio = options.sendAudio;\n }\n\n return navigator.mediaDevices.getDisplayMedia(getDisplayMediaParams);\n};\n\n/**\n * generates audio and video using constraints (often called after getSupportedDevices)\n * @param {Object|Boolean} audio gum constraints\n * @param {Object|Boolean} video gum constraints\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Object} {streams}\n */\nMedia.getMedia = (audio, video, config) => {\n const defaultWidth = {ideal: config.resolution.idealWidth, max: config.resolution.maxWidth};\n const defaultHeight = {ideal: config.resolution.idealHeight, max: config.resolution.maxHeight};\n const mediaConfig = {\n audio,\n // TODO: Remove temporary workaround once Firefox fixes low constraint issues\n // eslint-disable-next-line no-nested-ternary\n video: video ?\n isBrowser('firefox') && video.width && video.width.max === 320 ?\n {\n deviceId: video.deviceId ? video.deviceId : undefined,\n width: 320,\n height: 180\n } :\n {\n deviceId: video.deviceId ? video.deviceId : undefined,\n width: video.width ? video.width : defaultWidth,\n height: video.height ? video.height : defaultHeight\n } :\n false,\n fake: process.env.NODE_ENV === 'test' // Special case to get fake media for Firefox browser for testing\n };\n\n return navigator.mediaDevices\n .getUserMedia(mediaConfig)\n .catch((err) => {\n const logPath = 'Media:index#getMedia --> navigator.mediaDevices.getUserMedia';\n\n LoggerProxy.logger.error(`${logPath} failed - ${err} (${err.constraint})`);\n throw err;\n });\n};\n\n/**\n * Checks if the machine has at least one audio or video device (Dont use this for screen share)\n * @param {object} [options]\n * {\n * sendAudio: true/false,\n * sendVideo: true/false\n * }\n * @returns {Object} {\n * sendAudio: true/false,\n * sendVideo: true/false\n *}\n */\nMedia.getSupportedDevice = ({sendAudio, sendVideo}) =>\n Promise.resolve().then(() => {\n if (!navigator.mediaDevices || navigator.mediaDevices.enumerateDevices === undefined) {\n return {\n sendAudio: false,\n sendVideo: false\n };\n }\n\n return navigator.mediaDevices.enumerateDevices().then((devices) => {\n const supported = {\n audio: devices.filter((device) => device.kind === AUDIO_INPUT).length > 0,\n video: devices.filter((device) => device.kind === VIDEO_INPUT).length > 0\n };\n\n return {\n sendAudio: supported.audio && sendAudio,\n sendVideo: supported.video && sendVideo\n };\n });\n });\n\n/**\n * proxy to browser navigator.mediaDevices.enumerateDevices()\n * @returns {Promise}\n */\nMedia.getDevices = () => {\n if (navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {\n return navigator.mediaDevices.enumerateDevices();\n }\n\n return Promise.reject(new MediaError('enumerateDevices not supported.'));\n};\n\n/**\n *\n * Toggle a specific stream\n * noop as of now, does nothing\n * @returns {null}\n */\nMedia.toggleStream = () => {};\n\n/**\n * Stop input stream\n * @param {MediaTrack} track A media stream\n * @returns {null}\n */\nMedia.stopTracks = (track) => {\n if (!track) {\n return Promise.resolve();\n }\n\n return Promise.resolve().then(() => {\n if (track && track.stop) {\n try {\n track.stop();\n }\n catch (e) {\n LoggerProxy.logger.error(`Media:index#stopTracks --> Unable to stop the track with state ${track.readyState}, error: ${e}`);\n }\n }\n });\n};\n\n/**\n *\n * Stop input stream\n * @param {Stream} stream A media stream\n * @returns {null}\n * @deprecated after v1.89.3\n */\nMedia.stopStream = (stream) => {\n LoggerProxy.logger.warn('Media:index#stopStream --> [DEPRECATION WARNING]: stopStream has been deprecated after v1.89.3');\n if (!stream) {\n return Promise.resolve();\n }\n\n /*\n * To release local media\n * 1) Chrome requires all tracks to be stopped (stream.stop got deprecated)\n * 2) Firefox requires the stream to be stopped\n */\n return Promise.resolve().then(() => {\n if (stream.getTracks) {\n stream.getTracks().forEach((track) => {\n track.stop();\n });\n }\n else if (stream.stop) {\n stream.stop();\n }\n });\n};\n\n/**\n * generates streams for audio video and share\n * @param {object} mediaSetting parameter\n * @param {Object} mediaSetting.sendAudio sendAudio: {Boolean} sendAudio constraints\n * @param {Object} mediaSetting.sendVideo sendVideo: {Boolean} sendVideo constraints\n * @param {Object} mediaSetting.sendShare sendShare: {Boolean} sendShare constraints\n * @param {Object} mediaSetting.isSharing isSharing: {Boolean} isSharing constraints\n * @param {Object} audioVideo parameter\n * @param {Object} audioVideo.audio {deviceId: {String}}\n * @param {Object} audioVideo.video {deviceId: {String}}\n * @param {Object} sharePreferences parameter\n * @param {Object} sharePreferences.shareConstraints parameter\n * @param {Boolean} sharePreferences.highFrameRate parameter\n * @param {Object} config SDK Config\n * @returns {Array} [localStream, shareStream]\n */\nMedia.getUserMedia = (mediaSetting, audioVideo, sharePreferences, config) => Media.getLocalMedia({\n sendAudio: mediaSetting.sendAudio ? audioVideo.audio || mediaSetting.sendAudio : false,\n sendVideo: mediaSetting.sendVideo ? audioVideo.video || mediaSetting.sendVideo : false\n}, config).then((localStream) => Media.getLocalMedia({\n sendShare: mediaSetting.sendShare,\n isSharing: mediaSetting.isSharing,\n sharePreferences\n}, config).then((shareStream) => [localStream, shareStream]));\n\nexport default Media;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"names":["MediaProperties","options","MEETINGS","peerConnection","MediaUtil","createPeerConnection","mediaDirection","videoTrack","audioTrack","shareTrack","remoteShare","remoteAudioTrack","remoteVideoTrack","localQualityLevel","QUALITY_LEVELS","HIGH","remoteQualityLevel","mediaSettings","videoDeviceId","set","stream","audio","getAudioTracks","video","getVideoTracks","length","get","LoggerProxy","logger","warn","createMediaStream","type","values","remoteStream","deviceId","unsetRemoteMedia","unsetLocalVideoTrack","unsetLocalShareTrack","unsetRemoteStream","unsetRemoteShare"],"sources":["properties.js"],"sourcesContent":["import {\n MEETINGS,\n QUALITY_LEVELS\n} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\nimport MediaUtil from './util';\n\n/**\n * @class MediaProperties\n */\nexport default class MediaProperties {\n namespace = MEETINGS;\n\n /**\n * @param {Object} [options] -- to auto construct\n * @returns {MediaProperties}\n */\n constructor(options = {}) {\n this.peerConnection = MediaUtil.createPeerConnection();\n this.mediaDirection = options.mediaDirection;\n this.videoTrack = options.videoTrack;\n this.audioTrack = options.audioTrack;\n this.shareTrack = options.shareTrack;\n this.remoteShare = options.remoteShare;\n this.remoteAudioTrack = options.remoteAudioTrack;\n this.remoteVideoTrack = options.remoteVideoTrack;\n this.localQualityLevel = options.localQualityLevel || QUALITY_LEVELS.HIGH;\n this.remoteQualityLevel = options.remoteQualityLevel || QUALITY_LEVELS.HIGH;\n this.mediaSettings = {};\n this.videoDeviceId = null;\n\n // deprecated after v1.89.3, remove when feasible.\n // backwards compatible code.\n Object.defineProperty(this, 'remoteStream', {\n set: (stream) => {\n const audio = stream.getAudioTracks();\n const video = stream.getVideoTracks();\n\n this.remoteAudioTrack = audio.length && audio[0];\n this.remoteVideoTrack = video.length && video[0];\n },\n get: () => {\n LoggerProxy.logger.warn('Media:properties#remoteStream --> [DEPRECATION WARNING]: remoteStream (getter) has been deprecated after v1.89.3 (use remoteAudioTrack, remoteVideoTrack instead)');\n\n // return if set or create a stream for backwards compatibility\n return MediaUtil.createMediaStream([this.remoteAudioTrack, this.remoteVideoTrack]);\n }\n });\n }\n\n /**\n * Retrieves the preferred video input device\n * @returns {Object|null}\n */\n getVideoDeviceId() {\n return this.videoDeviceId || null;\n }\n\n setMediaDirection(mediaDirection) {\n this.mediaDirection = mediaDirection;\n }\n\n setMediaSettings(type, values) {\n this.mediaSettings[type] = values;\n }\n\n setMediaPeerConnection(peerConnection) {\n this.peerConnection = peerConnection;\n }\n\n setLocalVideoTrack(videoTrack) {\n this.videoTrack = videoTrack;\n }\n\n setLocalAudioTrack(audioTrack) {\n this.audioTrack = audioTrack;\n }\n\n setLocalQualityLevel(localQualityLevel) {\n this.localQualityLevel = localQualityLevel;\n }\n\n setLocalShareTrack(shareTrack) {\n this.shareTrack = shareTrack;\n }\n\n setRemoteQualityLevel(remoteQualityLevel) {\n this.remoteQualityLevel = remoteQualityLevel;\n }\n\n /**\n * @deprecated after v1.89.3\n * @param {remoteStream} remoteStream Sets remote media stream\n * @returns {null}\n * Use setRemoteAudioTrack, setRemoteVideoTrack\n * and setRemoteShareTrack.\n */\n setRemoteStream(remoteStream) {\n LoggerProxy.logger.warn('Media:properties#setRemoteStream --> [DEPRECATION WARNING]: setRemoteStream has been deprecated after v1.89.3 (use setRemoteAudioTrack, setRemoteVideoTrack instead)');\n // calls setter\n this.remoteStream = remoteStream;\n }\n\n setRemoteShare(remoteShare) {\n this.remoteShare = remoteShare;\n }\n\n /**\n * Sets the remote audio track\n * @param {MediaTrack} remoteAudioTrack MediaTrack to save\n * @returns {void}\n */\n setRemoteAudioTrack(remoteAudioTrack) {\n this.remoteAudioTrack = remoteAudioTrack;\n }\n\n /**\n * Sets the remote video track\n * @param {MediaTrack} remoteVideoTrack MediaTrack to save\n * @returns {void}\n */\n setRemoteVideoTrack(remoteVideoTrack) {\n this.remoteVideoTrack = remoteVideoTrack;\n }\n\n /**\n * Stores the preferred video input device\n * @param {string} deviceId Preferred video input device\n * @returns {void}\n */\n setVideoDeviceId(deviceId) {\n this.videoDeviceId = deviceId;\n }\n\n unsetPeerConnection() {\n this.peerConnection = null;\n }\n\n reInitiatePeerconnection() {\n this.peerConnection = MediaUtil.createPeerConnection();\n }\n\n unsetLocalVideoTrack() {\n this.videoTrack = null;\n }\n\n unsetLocalShareTrack() {\n this.shareTrack = null;\n }\n\n unsetLocalAudioTrack() {\n this.audioTrack = null;\n }\n\n /**\n * Removes remote stream from class instance\n * @deprecated after v1.89.3\n * @returns {void}\n */\n unsetRemoteStream() {\n LoggerProxy.logger.warn('Media:properties#unsetRemoteStream --> [DEPRECATION WARNING]: unsetRemoteStream has been deprecated after v1.89.3 (use unsetRemoteTracks instead)');\n // unsets audio and video only\n this.unsetRemoteMedia();\n }\n\n /**\n * Removes both remote audio and video from class instance\n * @returns {void}\n */\n unsetRemoteMedia() {\n this.remoteAudioTrack = null;\n this.remoteVideoTrack = null;\n }\n\n unsetRemoteShare() {\n this.remoteShare = null;\n }\n\n unsetLocalVideoTracks() {\n this.unsetLocalVideoTrack();\n this.unsetLocalShareTrack();\n }\n\n /**\n * Removes remote stream and remote share from class instance\n * @deprecated after v1.89.3\n * @returns {void}\n */\n unsetRemoteStreams() {\n LoggerProxy.logger.warn('Media:properties#unsetRemoteStreams --> [DEPRECATION WARNING]: unsetRemoteStreams has been deprecated after v1.89.3 (use unsetRemoteTracks instead)');\n this.unsetRemoteStream();\n this.unsetRemoteShare();\n }\n\n /**\n * Unsets all remote tracks\n * @returns {void}\n */\n unsetRemoteTracks() {\n this.unsetRemoteMedia();\n this.unsetRemoteShare();\n }\n\n unsetShareStreams() {\n this.unsetLocalShareTrack();\n this.unsetRemoteShare();\n }\n\n /**\n * Removes both local and remote video stream from class instance\n * @deprecated after v1.89.3\n * @returns {void}\n */\n unsetMediaStreams() {\n LoggerProxy.logger.warn('Media:properties#unsetMediaStreams --> [DEPRECATION WARNING]: unsetMediaStreams has been deprecated after v1.89.3 (use unsetMediaTracks instead)');\n this.unsetLocalVideoTrack();\n this.unsetRemoteStream();\n }\n\n /**\n * Removes both local and remote video stream from class instance\n * @returns {void}\n */\n unsetMediaTracks() {\n this.unsetLocalVideoTrack();\n this.unsetRemoteMedia();\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;;AAIA;;AAEA;;AAEA;AACA;AACA;IACqBA,e;EAGnB;AACF;AACA;AACA;EACE,2BAA0B;IAAA;;IAAA,IAAdC,OAAc,uEAAJ,EAAI;IAAA;IAAA,iDANdC,mBAMc;IACxB,KAAKC,cAAL,GAAsBC,cAAUC,oBAAV,EAAtB;IACA,KAAKC,cAAL,GAAsBL,OAAO,CAACK,cAA9B;IACA,KAAKC,UAAL,GAAkBN,OAAO,CAACM,UAA1B;IACA,KAAKC,UAAL,GAAkBP,OAAO,CAACO,UAA1B;IACA,KAAKC,UAAL,GAAkBR,OAAO,CAACQ,UAA1B;IACA,KAAKC,WAAL,GAAmBT,OAAO,CAACS,WAA3B;IACA,KAAKC,gBAAL,GAAwBV,OAAO,CAACU,gBAAhC;IACA,KAAKC,gBAAL,GAAwBX,OAAO,CAACW,gBAAhC;IACA,KAAKC,iBAAL,GAAyBZ,OAAO,CAACY,iBAAR,IAA6BC,0BAAeC,IAArE;IACA,KAAKC,kBAAL,GAA0Bf,OAAO,CAACe,kBAAR,IAA8BF,0BAAeC,IAAvE;IACA,KAAKE,aAAL,GAAqB,EAArB;IACA,KAAKC,aAAL,GAAqB,IAArB,CAZwB,CAcxB;IACA;;IACA,8BAAsB,IAAtB,EAA4B,cAA5B,EAA4C;MAC1CC,GAAG,EAAE,aAACC,MAAD,EAAY;QACf,IAAMC,KAAK,GAAGD,MAAM,CAACE,cAAP,EAAd;QACA,IAAMC,KAAK,GAAGH,MAAM,CAACI,cAAP,EAAd;QAEA,KAAI,CAACb,gBAAL,GAAwBU,KAAK,CAACI,MAAN,IAAgBJ,KAAK,CAAC,CAAD,CAA7C;QACA,KAAI,CAACT,gBAAL,GAAwBW,KAAK,CAACE,MAAN,IAAgBF,KAAK,CAAC,CAAD,CAA7C;MACD,CAPyC;MAQ1CG,GAAG,EAAE,eAAM;QACTC,qBAAYC,MAAZ,CAAmBC,IAAnB,CAAwB,mKAAxB,EADS,CAGT;;;QACA,OAAOzB,cAAU0B,iBAAV,CAA4B,CAAC,KAAI,CAACnB,gBAAN,EAAwB,KAAI,CAACC,gBAA7B,CAA5B,CAAP;MACD;IAbyC,CAA5C;EAeD;EAED;AACF;AACA;AACA;;;;;WACE,4BAAmB;MACjB,OAAO,KAAKM,aAAL,IAAsB,IAA7B;IACD;;;WAED,2BAAkBZ,cAAlB,EAAkC;MAChC,KAAKA,cAAL,GAAsBA,cAAtB;IACD;;;WAED,0BAAiByB,IAAjB,EAAuBC,MAAvB,EAA+B;MAC7B,KAAKf,aAAL,CAAmBc,IAAnB,IAA2BC,MAA3B;IACD;;;WAED,gCAAuB7B,cAAvB,EAAuC;MACrC,KAAKA,cAAL,GAAsBA,cAAtB;IACD;;;WAED,4BAAmBI,UAAnB,EAA+B;MAC7B,KAAKA,UAAL,GAAkBA,UAAlB;IACD;;;WAED,4BAAmBC,UAAnB,EAA+B;MAC7B,KAAKA,UAAL,GAAkBA,UAAlB;IACD;;;WAED,8BAAqBK,iBAArB,EAAwC;MACtC,KAAKA,iBAAL,GAAyBA,iBAAzB;IACD;;;WAED,4BAAmBJ,UAAnB,EAA+B;MAC7B,KAAKA,UAAL,GAAkBA,UAAlB;IACD;;;WAED,+BAAsBO,kBAAtB,EAA0C;MACxC,KAAKA,kBAAL,GAA0BA,kBAA1B;IACD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;;;;WACE,yBAAgBiB,YAAhB,EAA8B;MAC5BN,qBAAYC,MAAZ,CAAmBC,IAAnB,CAAwB,sKAAxB,EAD4B,CAE5B;;;MACA,KAAKI,YAAL,GAAoBA,YAApB;IACD;;;WAED,wBAAevB,WAAf,EAA4B;MAC1B,KAAKA,WAAL,GAAmBA,WAAnB;IACD;IAED;AACF;AACA;AACA;AACA;;;;WACE,6BAAoBC,gBAApB,EAAsC;MACpC,KAAKA,gBAAL,GAAwBA,gBAAxB;IACD;IAED;AACF;AACA;AACA;AACA;;;;WACE,6BAAoBC,gBAApB,EAAsC;MACpC,KAAKA,gBAAL,GAAwBA,gBAAxB;IACD;IAED;AACF;AACA;AACA;AACA;;;;WACE,0BAAiBsB,QAAjB,EAA2B;MACzB,KAAKhB,aAAL,GAAqBgB,QAArB;IACD;;;WAED,+BAAsB;MACpB,KAAK/B,cAAL,GAAsB,IAAtB;IACD;;;WAED,oCAA2B;MACzB,KAAKA,cAAL,GAAsBC,cAAUC,oBAAV,EAAtB;IACD;;;WAED,gCAAuB;MACrB,KAAKE,UAAL,GAAkB,IAAlB;IACD;;;WAED,gCAAuB;MACrB,KAAKE,UAAL,GAAkB,IAAlB;IACD;;;WAED,gCAAuB;MACrB,KAAKD,UAAL,GAAkB,IAAlB;IACD;IAED;AACF;AACA;AACA;AACA;;;;WACE,6BAAoB;MAClBmB,qBAAYC,MAAZ,CAAmBC,IAAnB,CAAwB,mJAAxB,EADkB,CAElB;;;MACA,KAAKM,gBAAL;IACD;IAED;AACF;AACA;AACA;;;;WACE,4BAAmB;MACjB,KAAKxB,gBAAL,GAAwB,IAAxB;MACA,KAAKC,gBAAL,GAAwB,IAAxB;IACD;;;WAED,4BAAmB;MACjB,KAAKF,WAAL,GAAmB,IAAnB;IACD;;;WAED,iCAAwB;MACtB,KAAK0B,oBAAL;MACA,KAAKC,oBAAL;IACD;IAED;AACF;AACA;AACA;AACA;;;;WACE,8BAAqB;MACnBV,qBAAYC,MAAZ,CAAmBC,IAAnB,CAAwB,qJAAxB;;MACA,KAAKS,iBAAL;MACA,KAAKC,gBAAL;IACD;IAED;AACF;AACA;AACA;;;;WACE,6BAAoB;MAClB,KAAKJ,gBAAL;MACA,KAAKI,gBAAL;IACD;;;WAED,6BAAoB;MAClB,KAAKF,oBAAL;MACA,KAAKE,gBAAL;IACD;IAED;AACF;AACA;AACA;AACA;;;;WACE,6BAAoB;MAClBZ,qBAAYC,MAAZ,CAAmBC,IAAnB,CAAwB,kJAAxB;;MACA,KAAKO,oBAAL;MACA,KAAKE,iBAAL;IACD;IAED;AACF;AACA;AACA;;;;WACE,4BAAmB;MACjB,KAAKF,oBAAL;MACA,KAAKD,gBAAL;IACD"}
1
+ {"version":3,"names":["MediaProperties","options","MEETINGS","peerConnection","MediaUtil","createPeerConnection","mediaDirection","videoTrack","audioTrack","shareTrack","remoteShare","remoteAudioTrack","remoteVideoTrack","localQualityLevel","QUALITY_LEVELS","HIGH","remoteQualityLevel","mediaSettings","videoDeviceId","set","stream","audio","getAudioTracks","video","getVideoTracks","length","get","LoggerProxy","logger","warn","createMediaStream","type","values","remoteStream","deviceId","unsetRemoteMedia","unsetLocalVideoTrack","unsetLocalShareTrack","unsetRemoteStream","unsetRemoteShare"],"sources":["properties.js"],"sourcesContent":["import {\n MEETINGS,\n QUALITY_LEVELS\n} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\nimport MediaUtil from './util';\n\n/**\n * @class MediaProperties\n */\nexport default class MediaProperties {\n namespace = MEETINGS;\n\n /**\n * @param {Object} [options] -- to auto construct\n * @returns {MediaProperties}\n */\n constructor(options = {}) {\n this.peerConnection = MediaUtil.createPeerConnection();\n this.mediaDirection = options.mediaDirection;\n this.videoTrack = options.videoTrack;\n this.audioTrack = options.audioTrack;\n this.shareTrack = options.shareTrack;\n this.remoteShare = options.remoteShare;\n this.remoteAudioTrack = options.remoteAudioTrack;\n this.remoteVideoTrack = options.remoteVideoTrack;\n this.localQualityLevel = options.localQualityLevel || QUALITY_LEVELS.HIGH;\n this.remoteQualityLevel = options.remoteQualityLevel || QUALITY_LEVELS.HIGH;\n this.mediaSettings = {};\n this.videoDeviceId = null;\n\n // deprecated after v1.89.3, remove when feasible.\n // backwards compatible code.\n Object.defineProperty(this, 'remoteStream', {\n set: (stream) => {\n const audio = stream.getAudioTracks();\n const video = stream.getVideoTracks();\n\n this.remoteAudioTrack = audio.length && audio[0];\n this.remoteVideoTrack = video.length && video[0];\n },\n get: () => {\n LoggerProxy.logger.warn('Media:properties#remoteStream --> [DEPRECATION WARNING]: remoteStream (getter) has been deprecated after v1.89.3 (use remoteAudioTrack, remoteVideoTrack instead)');\n\n // return if set or create a stream for backwards compatibility\n return MediaUtil.createMediaStream([this.remoteAudioTrack, this.remoteVideoTrack]);\n }\n });\n }\n\n /**\n * Retrieves the preferred video input device\n * @returns {Object|null}\n */\n getVideoDeviceId() {\n return this.videoDeviceId || null;\n }\n\n setMediaDirection(mediaDirection) {\n this.mediaDirection = mediaDirection;\n }\n\n setMediaSettings(type, values) {\n this.mediaSettings[type] = values;\n }\n\n setMediaPeerConnection(peerConnection) {\n this.peerConnection = peerConnection;\n }\n\n setLocalVideoTrack(videoTrack) {\n this.videoTrack = videoTrack;\n }\n\n setLocalAudioTrack(audioTrack) {\n this.audioTrack = audioTrack;\n }\n\n setLocalQualityLevel(localQualityLevel) {\n this.localQualityLevel = localQualityLevel;\n }\n\n setLocalShareTrack(shareTrack) {\n this.shareTrack = shareTrack;\n }\n\n setRemoteQualityLevel(remoteQualityLevel) {\n this.remoteQualityLevel = remoteQualityLevel;\n }\n\n /**\n * @deprecated after v1.89.3\n * @param {remoteStream} remoteStream Sets remote media stream\n * @returns {null}\n * Use setRemoteAudioTrack, setRemoteVideoTrack\n * and setRemoteShareTrack.\n */\n setRemoteStream(remoteStream) {\n LoggerProxy.logger.warn('Media:properties#setRemoteStream --> [DEPRECATION WARNING]: setRemoteStream has been deprecated after v1.89.3 (use setRemoteAudioTrack, setRemoteVideoTrack instead)');\n // calls setter\n this.remoteStream = remoteStream;\n }\n\n setRemoteShare(remoteShare) {\n this.remoteShare = remoteShare;\n }\n\n /**\n * Sets the remote audio track\n * @param {MediaTrack} remoteAudioTrack MediaTrack to save\n * @returns {void}\n */\n setRemoteAudioTrack(remoteAudioTrack) {\n this.remoteAudioTrack = remoteAudioTrack;\n }\n\n /**\n * Sets the remote video track\n * @param {MediaTrack} remoteVideoTrack MediaTrack to save\n * @returns {void}\n */\n setRemoteVideoTrack(remoteVideoTrack) {\n this.remoteVideoTrack = remoteVideoTrack;\n }\n\n /**\n * Stores the preferred video input device\n * @param {string} deviceId Preferred video input device\n * @returns {void}\n */\n setVideoDeviceId(deviceId) {\n this.videoDeviceId = deviceId;\n }\n\n unsetPeerConnection() {\n this.peerConnection = null;\n }\n\n reInitiatePeerconnection() {\n this.peerConnection = MediaUtil.createPeerConnection();\n }\n\n unsetLocalVideoTrack() {\n this.videoTrack = null;\n }\n\n unsetLocalShareTrack() {\n this.shareTrack = null;\n }\n\n unsetLocalAudioTrack() {\n this.audioTrack = null;\n }\n\n /**\n * Removes remote stream from class instance\n * @deprecated after v1.89.3\n * @returns {void}\n */\n unsetRemoteStream() {\n LoggerProxy.logger.warn('Media:properties#unsetRemoteStream --> [DEPRECATION WARNING]: unsetRemoteStream has been deprecated after v1.89.3 (use unsetRemoteTracks instead)');\n // unsets audio and video only\n this.unsetRemoteMedia();\n }\n\n /**\n * Removes both remote audio and video from class instance\n * @returns {void}\n */\n unsetRemoteMedia() {\n this.remoteAudioTrack = null;\n this.remoteVideoTrack = null;\n }\n\n unsetRemoteShare() {\n this.remoteShare = null;\n }\n\n unsetLocalVideoTracks() {\n this.unsetLocalVideoTrack();\n this.unsetLocalShareTrack();\n }\n\n /**\n * Removes remote stream and remote share from class instance\n * @deprecated after v1.89.3\n * @returns {void}\n */\n unsetRemoteStreams() {\n LoggerProxy.logger.warn('Media:properties#unsetRemoteStreams --> [DEPRECATION WARNING]: unsetRemoteStreams has been deprecated after v1.89.3 (use unsetRemoteTracks instead)');\n this.unsetRemoteStream();\n this.unsetRemoteShare();\n }\n\n /**\n * Unsets all remote tracks\n * @returns {void}\n */\n unsetRemoteTracks() {\n this.unsetRemoteMedia();\n this.unsetRemoteShare();\n }\n\n unsetShareStreams() {\n this.unsetLocalShareTrack();\n this.unsetRemoteShare();\n }\n\n /**\n * Removes both local and remote video stream from class instance\n * @deprecated after v1.89.3\n * @returns {void}\n */\n unsetMediaStreams() {\n LoggerProxy.logger.warn('Media:properties#unsetMediaStreams --> [DEPRECATION WARNING]: unsetMediaStreams has been deprecated after v1.89.3 (use unsetMediaTracks instead)');\n this.unsetLocalVideoTrack();\n this.unsetRemoteStream();\n }\n\n /**\n * Removes both local and remote video stream from class instance\n * @returns {void}\n */\n unsetMediaTracks() {\n this.unsetLocalVideoTrack();\n this.unsetRemoteMedia();\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"names":["isBrowser","MediaUtil","createPeerConnection","window","RTCPeerConnection","RTC_CONFIGURATION_FIREFOX","RTC_CONFIGURATION","createMediaStream","tracks","LoggerProxy","logger","error","filtredTracks","filter","element","MediaStream"],"sources":["util.js"],"sourcesContent":["/* globals MediaStream */\nimport window from 'global/window';\n\nimport BrowserDetection from '../common/browser-detection';\nimport {\n RTC_CONFIGURATION,\n RTC_CONFIGURATION_FIREFOX\n} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\nconst {isBrowser} = BrowserDetection();\n\nconst MediaUtil = {};\n\nMediaUtil.createPeerConnection = () => new window.RTCPeerConnection(\n isBrowser('firefox') ? RTC_CONFIGURATION_FIREFOX : RTC_CONFIGURATION\n);\n\nMediaUtil.createMediaStream = (tracks) => {\n if (!tracks) {\n LoggerProxy.logger.error('Media:util#createMediaStream --> Tracks don\\'t exist');\n }\n const filtredTracks = tracks.filter((element) => !!element);\n\n return new MediaStream(filtredTracks);\n};\n\nexport default MediaUtil;\n"],"mappings":";;;;;;;;;;;;AACA;;AAEA;;AACA;;AAIA;;AARA;AAUA,wBAAoB,gCAApB;AAAA,IAAOA,SAAP,qBAAOA,SAAP;;AAEA,IAAMC,SAAS,GAAG,EAAlB;;AAEAA,SAAS,CAACC,oBAAV,GAAiC;EAAA,OAAM,IAAIC,gBAAOC,iBAAX,CACrCJ,SAAS,CAAC,SAAD,CAAT,GAAuBK,oCAAvB,GAAmDC,4BADd,CAAN;AAAA,CAAjC;;AAIAL,SAAS,CAACM,iBAAV,GAA8B,UAACC,MAAD,EAAY;EACxC,IAAI,CAACA,MAAL,EAAa;IACXC,qBAAYC,MAAZ,CAAmBC,KAAnB,CAAyB,sDAAzB;EACD;;EACD,IAAMC,aAAa,GAAGJ,MAAM,CAACK,MAAP,CAAc,UAACC,OAAD;IAAA,OAAa,CAAC,CAACA,OAAf;EAAA,CAAd,CAAtB;EAEA,OAAO,IAAIC,WAAJ,CAAgBH,aAAhB,CAAP;AACD,CAPD;;eASeX,S"}
1
+ {"version":3,"names":["BrowserDetection","isBrowser","MediaUtil","createPeerConnection","window","RTCPeerConnection","RTC_CONFIGURATION_FIREFOX","RTC_CONFIGURATION","createMediaStream","tracks","LoggerProxy","logger","error","filtredTracks","filter","element","MediaStream"],"sources":["util.js"],"sourcesContent":["/* globals MediaStream */\nimport window from 'global/window';\n\nimport BrowserDetection from '../common/browser-detection';\nimport {\n RTC_CONFIGURATION,\n RTC_CONFIGURATION_FIREFOX\n} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\nconst {isBrowser} = BrowserDetection();\n\nconst MediaUtil = {};\n\nMediaUtil.createPeerConnection = () => new window.RTCPeerConnection(\n isBrowser('firefox') ? RTC_CONFIGURATION_FIREFOX : RTC_CONFIGURATION\n);\n\nMediaUtil.createMediaStream = (tracks) => {\n if (!tracks) {\n LoggerProxy.logger.error('Media:util#createMediaStream --> Tracks don\\'t exist');\n }\n const filtredTracks = tracks.filter((element) => !!element);\n\n return new MediaStream(filtredTracks);\n};\n\nexport default MediaUtil;\n"],"mappings":";;;;;;;;;;;;AACA;;AAEA;;AACA;;AAIA;;AARA;AAUA,wBAAoB,IAAAA,yBAAA,GAApB;AAAA,IAAOC,SAAP,qBAAOA,SAAP;;AAEA,IAAMC,SAAS,GAAG,EAAlB;;AAEAA,SAAS,CAACC,oBAAV,GAAiC;EAAA,OAAM,IAAIC,eAAA,CAAOC,iBAAX,CACrCJ,SAAS,CAAC,SAAD,CAAT,GAAuBK,oCAAvB,GAAmDC,4BADd,CAAN;AAAA,CAAjC;;AAIAL,SAAS,CAACM,iBAAV,GAA8B,UAACC,MAAD,EAAY;EACxC,IAAI,CAACA,MAAL,EAAa;IACXC,oBAAA,CAAYC,MAAZ,CAAmBC,KAAnB,CAAyB,sDAAzB;EACD;;EACD,IAAMC,aAAa,GAAGJ,MAAM,CAACK,MAAP,CAAc,UAACC,OAAD;IAAA,OAAa,CAAC,CAACA,OAAf;EAAA,CAAd,CAAtB;EAEA,OAAO,IAAIC,WAAJ,CAAgBH,aAAhB,CAAP;AACD,CAPD;;eASeX,S"}
@@ -1 +1 @@
1
- {"version":3,"names":["createEffectsState","type","LoggerProxy","logger","info","EffectsState","effectType","state","bnr","enabled","BNR_STATUS","NOT_ENABLED","callToWebrtcBNRInProgress","pendingPromiseResolve","pendingPromiseReject","isEnable","meeting","resolve","reject","enableBNR","disableBNR","ENABLED","e","isBnrEnabled","warn","resolvePromise","SHOULD_ENABLE","audioStream","MediaUtil","createMediaStream","mediaProperties","audioTrack","updateAudio","sendAudio","receiveAudio","mediaDirection","stream","bnrEnabled","Metrics","sendBehavioralMetric","BEHAVIORAL_METRICS","ENABLE_BNR_SUCCESS","error","ENABLE_BNR_FAILURE","reason","message","stack","rejectPromise","SHOULD_DISABLE","WebRTCMedia","Effects","BNR","DISABLE_BNR_SUCCESS","DISABLE_BNR_FAILURE"],"sources":["effectsState.js"],"sourcesContent":["/* eslint-disable no-param-reassign */\nimport {Media as WebRTCMedia} from '@webex/internal-media-core';\n\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport Metrics from '../metrics';\nimport MediaUtil from '../media/util';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {BNR_STATUS} from '../constants';\n\nconst createEffectsState = (type) => {\n LoggerProxy.logger.info(`Meeting:effectState#createEffectsState --> creating effectsState for effect ${type}`);\n\n return new EffectsState(type);\n};\n\n/* The purpose of this class is to manage the effects state(for eg., BNR).\n*/\nclass EffectsState {\n constructor(type) {\n this.effectType = type;\n this.state = {\n bnr: {\n enabled: BNR_STATUS.NOT_ENABLED\n },\n callToWebrtcBNRInProgress: false\n };\n // these 2 hold the resolve, reject methods for the promise we returned to the client in last handleClientRequest() call\n this.pendingPromiseResolve = null;\n this.pendingPromiseReject = null;\n }\n\n /**\n * @memberof EffectsState\n * @param {Boolean} [isEnable] true for enableBNR, false for disableBNR request\n * @param {Object} [meeting] the meeting object\n * @returns {Promise}\n */\n async handleClientRequest(isEnable, meeting) {\n return new Promise((resolve, reject) => {\n if (this.pendingPromiseResolve) {\n // resolve the last promise we returned to the client as the client has issued a new request that has superseded the previous one\n this.pendingPromiseResolve();\n }\n this.pendingPromiseResolve = resolve;\n this.pendingPromiseReject = reject;\n\n if (isEnable) this.enableBNR(meeting);\n else this.disableBNR(meeting);\n });\n }\n\n /**\n * Internal API to return status of BNR\n * @memberof EffectsState\n * @returns {Boolean}\n * @public\n * @memberof Meeting\n */\n isBnrEnabled() {\n return this.state.bnr.enabled === BNR_STATUS.ENABLED;\n }\n\n resolvePromise() {\n if (this.pendingPromiseResolve) {\n this.pendingPromiseResolve(true);\n }\n this.pendingPromiseResolve = null;\n this.pendingPromiseReject = null;\n }\n\n rejectPromise(e) {\n if (this.pendingPromiseReject) {\n this.pendingPromiseReject(e);\n }\n this.pendingPromiseResolve = null;\n this.pendingPromiseReject = null;\n }\n\n /**\n * enableBNR API\n * @param {Object} meeting the meeting object\n * @returns {Promise<Boolean>}\n * @public\n * @memberof EffectsState\n */\n async enableBNR(meeting) {\n LoggerProxy.logger.info('Meeting:effectState#enableBNR. Enable BNR called');\n\n if (this.isBnrEnabled()) {\n LoggerProxy.logger.warn('Meeting:index#enableBNR. BNR is already enabled');\n\n return this.resolvePromise();\n }\n\n if (this.state.callToWebrtcBNRInProgress) {\n LoggerProxy.logger.warn('Meeting:effectState#enableBNR. Call to WebRTC in progress, we need to wait for it to complete');\n\n return this.resolvePromise();\n }\n\n const {bnr} = this.state;\n\n try {\n bnr.enabled = BNR_STATUS.SHOULD_ENABLE;\n this.state.callToWebrtcBNRInProgress = true;\n const audioStream = MediaUtil.createMediaStream([meeting.mediaProperties.audioTrack]);\n\n LoggerProxy.logger.info('Meeting:effectState#enableBNR. MediaStream created from meeting & sent to updateAudio');\n await meeting.updateAudio({\n sendAudio: true,\n receiveAudio: meeting.mediaProperties.mediaDirection.receiveAudio,\n stream: audioStream,\n bnrEnabled: bnr.enabled\n });\n\n LoggerProxy.logger.info('Meeting:effectState#enableBNR. Updated meeting audio with bnr enabled track');\n bnr.enabled = BNR_STATUS.ENABLED;\n this.state.callToWebrtcBNRInProgress = false;\n Metrics.sendBehavioralMetric(\n BEHAVIORAL_METRICS.ENABLE_BNR_SUCCESS,\n );\n }\n catch (error) {\n bnr.enabled = BNR_STATUS.NOT_ENABLED;\n this.state.callToWebrtcBNRInProgress = false;\n LoggerProxy.logger.error('Meeting:index#enableBNR.', error);\n\n Metrics.sendBehavioralMetric(\n BEHAVIORAL_METRICS.ENABLE_BNR_FAILURE,\n {\n reason: error.message,\n stack: error.stack\n }\n );\n this.rejectPromise(error);\n\n throw error;\n }\n\n return this.resolvePromise();\n }\n\n /**\n * disableBNR API\n * @param {Object} meeting the meeting object\n * @returns {Promise<Boolean>}\n * @public\n * @memberof EffectsState\n */\n async disableBNR(meeting) {\n LoggerProxy.logger.info('Meeting:effectState#disableBNR. Disable BNR called');\n\n const {bnr} = this.state;\n\n try {\n if (this.state.callToWebrtcBNRInProgress) {\n LoggerProxy.logger.info('Meeting:effectState#disableBNR. Call to WebRTC in progress, we need to wait for it to complete');\n\n return this.resolvePromise();\n }\n\n bnr.enabled = BNR_STATUS.SHOULD_DISABLE;\n this.state.callToWebrtcBNRInProgress = true;\n\n const audioTrack = WebRTCMedia.Effects.BNR.disableBNR(meeting.mediaProperties.audioTrack);\n\n const audioStream = MediaUtil.createMediaStream([audioTrack]);\n\n LoggerProxy.logger.info('Meeting:effectState#disableBNR. Raw media track obtained from WebRTC & sent to updateAudio');\n\n await meeting.updateAudio({\n sendAudio: true,\n receiveAudio: meeting.mediaProperties.mediaDirection.receiveAudio,\n stream: audioStream\n });\n\n bnr.enabled = BNR_STATUS.NOT_ENABLED;\n\n this.state.callToWebrtcBNRInProgress = false;\n\n Metrics.sendBehavioralMetric(\n BEHAVIORAL_METRICS.DISABLE_BNR_SUCCESS\n );\n }\n catch (error) {\n bnr.enabled = BNR_STATUS.ENABLED;\n this.state.callToWebrtcBNRInProgress = false;\n LoggerProxy.logger.error(`Meeting:index#disableBNR. ${error}`);\n\n Metrics.sendBehavioralMetric(\n BEHAVIORAL_METRICS.DISABLE_BNR_FAILURE,\n {\n reason: error.message,\n stack: error.stack\n }\n );\n this.rejectPromise(error);\n\n throw error;\n }\n\n return this.resolvePromise();\n }\n}\n\nexport default createEffectsState;\n"],"mappings":"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"}
1
+ {"version":3,"names":["createEffectsState","type","LoggerProxy","logger","info","EffectsState","effectType","state","bnr","enabled","BNR_STATUS","NOT_ENABLED","callToWebrtcBNRInProgress","pendingPromiseResolve","pendingPromiseReject","isEnable","meeting","resolve","reject","enableBNR","disableBNR","ENABLED","e","isBnrEnabled","warn","resolvePromise","SHOULD_ENABLE","audioStream","MediaUtil","createMediaStream","mediaProperties","audioTrack","updateAudio","sendAudio","receiveAudio","mediaDirection","stream","bnrEnabled","Metrics","sendBehavioralMetric","BEHAVIORAL_METRICS","ENABLE_BNR_SUCCESS","error","ENABLE_BNR_FAILURE","reason","message","stack","rejectPromise","SHOULD_DISABLE","WebRTCMedia","Effects","BNR","DISABLE_BNR_SUCCESS","DISABLE_BNR_FAILURE"],"sources":["effectsState.js"],"sourcesContent":["/* eslint-disable no-param-reassign */\nimport {Media as WebRTCMedia} from '@webex/internal-media-core';\n\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport Metrics from '../metrics';\nimport MediaUtil from '../media/util';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {BNR_STATUS} from '../constants';\n\nconst createEffectsState = (type) => {\n LoggerProxy.logger.info(`Meeting:effectState#createEffectsState --> creating effectsState for effect ${type}`);\n\n return new EffectsState(type);\n};\n\n/* The purpose of this class is to manage the effects state(for eg., BNR).\n*/\nclass EffectsState {\n constructor(type) {\n this.effectType = type;\n this.state = {\n bnr: {\n enabled: BNR_STATUS.NOT_ENABLED\n },\n callToWebrtcBNRInProgress: false\n };\n // these 2 hold the resolve, reject methods for the promise we returned to the client in last handleClientRequest() call\n this.pendingPromiseResolve = null;\n this.pendingPromiseReject = null;\n }\n\n /**\n * @memberof EffectsState\n * @param {Boolean} [isEnable] true for enableBNR, false for disableBNR request\n * @param {Object} [meeting] the meeting object\n * @returns {Promise}\n */\n async handleClientRequest(isEnable, meeting) {\n return new Promise((resolve, reject) => {\n if (this.pendingPromiseResolve) {\n // resolve the last promise we returned to the client as the client has issued a new request that has superseded the previous one\n this.pendingPromiseResolve();\n }\n this.pendingPromiseResolve = resolve;\n this.pendingPromiseReject = reject;\n\n if (isEnable) this.enableBNR(meeting);\n else this.disableBNR(meeting);\n });\n }\n\n /**\n * Internal API to return status of BNR\n * @memberof EffectsState\n * @returns {Boolean}\n * @public\n * @memberof Meeting\n */\n isBnrEnabled() {\n return this.state.bnr.enabled === BNR_STATUS.ENABLED;\n }\n\n resolvePromise() {\n if (this.pendingPromiseResolve) {\n this.pendingPromiseResolve(true);\n }\n this.pendingPromiseResolve = null;\n this.pendingPromiseReject = null;\n }\n\n rejectPromise(e) {\n if (this.pendingPromiseReject) {\n this.pendingPromiseReject(e);\n }\n this.pendingPromiseResolve = null;\n this.pendingPromiseReject = null;\n }\n\n /**\n * enableBNR API\n * @param {Object} meeting the meeting object\n * @returns {Promise<Boolean>}\n * @public\n * @memberof EffectsState\n */\n async enableBNR(meeting) {\n LoggerProxy.logger.info('Meeting:effectState#enableBNR. Enable BNR called');\n\n if (this.isBnrEnabled()) {\n LoggerProxy.logger.warn('Meeting:index#enableBNR. BNR is already enabled');\n\n return this.resolvePromise();\n }\n\n if (this.state.callToWebrtcBNRInProgress) {\n LoggerProxy.logger.warn('Meeting:effectState#enableBNR. Call to WebRTC in progress, we need to wait for it to complete');\n\n return this.resolvePromise();\n }\n\n const {bnr} = this.state;\n\n try {\n bnr.enabled = BNR_STATUS.SHOULD_ENABLE;\n this.state.callToWebrtcBNRInProgress = true;\n const audioStream = MediaUtil.createMediaStream([meeting.mediaProperties.audioTrack]);\n\n LoggerProxy.logger.info('Meeting:effectState#enableBNR. MediaStream created from meeting & sent to updateAudio');\n await meeting.updateAudio({\n sendAudio: true,\n receiveAudio: meeting.mediaProperties.mediaDirection.receiveAudio,\n stream: audioStream,\n bnrEnabled: bnr.enabled\n });\n\n LoggerProxy.logger.info('Meeting:effectState#enableBNR. Updated meeting audio with bnr enabled track');\n bnr.enabled = BNR_STATUS.ENABLED;\n this.state.callToWebrtcBNRInProgress = false;\n Metrics.sendBehavioralMetric(\n BEHAVIORAL_METRICS.ENABLE_BNR_SUCCESS,\n );\n }\n catch (error) {\n bnr.enabled = BNR_STATUS.NOT_ENABLED;\n this.state.callToWebrtcBNRInProgress = false;\n LoggerProxy.logger.error('Meeting:index#enableBNR.', error);\n\n Metrics.sendBehavioralMetric(\n BEHAVIORAL_METRICS.ENABLE_BNR_FAILURE,\n {\n reason: error.message,\n stack: error.stack\n }\n );\n this.rejectPromise(error);\n\n throw error;\n }\n\n return this.resolvePromise();\n }\n\n /**\n * disableBNR API\n * @param {Object} meeting the meeting object\n * @returns {Promise<Boolean>}\n * @public\n * @memberof EffectsState\n */\n async disableBNR(meeting) {\n LoggerProxy.logger.info('Meeting:effectState#disableBNR. Disable BNR called');\n\n const {bnr} = this.state;\n\n try {\n if (this.state.callToWebrtcBNRInProgress) {\n LoggerProxy.logger.info('Meeting:effectState#disableBNR. Call to WebRTC in progress, we need to wait for it to complete');\n\n return this.resolvePromise();\n }\n\n bnr.enabled = BNR_STATUS.SHOULD_DISABLE;\n this.state.callToWebrtcBNRInProgress = true;\n\n const audioTrack = WebRTCMedia.Effects.BNR.disableBNR(meeting.mediaProperties.audioTrack);\n\n const audioStream = MediaUtil.createMediaStream([audioTrack]);\n\n LoggerProxy.logger.info('Meeting:effectState#disableBNR. Raw media track obtained from WebRTC & sent to updateAudio');\n\n await meeting.updateAudio({\n sendAudio: true,\n receiveAudio: meeting.mediaProperties.mediaDirection.receiveAudio,\n stream: audioStream\n });\n\n bnr.enabled = BNR_STATUS.NOT_ENABLED;\n\n this.state.callToWebrtcBNRInProgress = false;\n\n Metrics.sendBehavioralMetric(\n BEHAVIORAL_METRICS.DISABLE_BNR_SUCCESS\n );\n }\n catch (error) {\n bnr.enabled = BNR_STATUS.ENABLED;\n this.state.callToWebrtcBNRInProgress = false;\n LoggerProxy.logger.error(`Meeting:index#disableBNR. ${error}`);\n\n Metrics.sendBehavioralMetric(\n BEHAVIORAL_METRICS.DISABLE_BNR_FAILURE,\n {\n reason: error.message,\n stack: error.stack\n }\n );\n this.rejectPromise(error);\n\n throw error;\n }\n\n return this.resolvePromise();\n }\n}\n\nexport default createEffectsState;\n"],"mappings":"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"}
@@ -40,6 +40,7 @@ var InMeetingActions = /*#__PURE__*/function () {
40
40
  this.canStopRecording = null;
41
41
  this.canRaiseHand = null;
42
42
  this.canLowerAllHands = null;
43
+ this.canLowerSomeoneElsesHand = null;
43
44
  }
44
45
 
45
46
  (0, _createClass2.default)(InMeetingActions, [{
@@ -54,7 +55,8 @@ var InMeetingActions = /*#__PURE__*/function () {
54
55
  canResumeRecording: this.canResumeRecording,
55
56
  canStopRecording: this.canStopRecording,
56
57
  canRaiseHand: this.canRaiseHand,
57
- canLowerAllHands: this.canLowerAllHands
58
+ canLowerAllHands: this.canLowerAllHands,
59
+ canLowerSomeoneElsesHand: this.canLowerSomeoneElsesHand
58
60
  };
59
61
  }
60
62
  }, {
@@ -1 +1 @@
1
- {"version":3,"names":["InMeetingActions","MEETINGS","canLock","canUnlock","canAssignHost","canStartRecording","canPauseRecording","canResumeRecording","canStopRecording","canRaiseHand","canLowerAllHands","actions","old","get","changed","forEach","actionKey","actionValue","undefined"],"sources":["in-meeting-actions.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {\n MEETINGS\n} from '../constants';\n\n/**\n * @class InMeetingActions\n */\nexport default class InMeetingActions {\n namespace = MEETINGS;\n\n constructor() {\n this.canLock = null;\n this.canUnlock = null;\n this.canAssignHost = null;\n this.canStartRecording = null;\n this.canPauseRecording = null;\n this.canResumeRecording = null;\n this.canStopRecording = null;\n this.canRaiseHand = null;\n this.canLowerAllHands = null;\n }\n\n get() {\n return {\n canLock: this.canLock,\n canUnlock: this.canUnlock,\n canAssignHost: this.canAssignHost,\n canStartRecording: this.canStartRecording,\n canPauseRecording: this.canPauseRecording,\n canResumeRecording: this.canResumeRecording,\n canStopRecording: this.canStopRecording,\n canRaiseHand: this.canRaiseHand,\n canLowerAllHands: this.canLowerAllHands,\n };\n }\n\n set(actions) {\n const old = this.get();\n\n let changed = false;\n\n Object.keys(old).forEach((actionKey) => {\n const actionValue = actions[actionKey];\n\n if (actionValue !== undefined && actionValue !== old[actionKey]) {\n changed = true;\n this[actionKey] = actionValue;\n }\n });\n\n return changed;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAIA;;AAJA;AACA;AACA;;AAMA;AACA;AACA;IACqBA,gB;EAGnB,4BAAc;IAAA;IAAA,iDAFFC,mBAEE;IACZ,KAAKC,OAAL,GAAe,IAAf;IACA,KAAKC,SAAL,GAAiB,IAAjB;IACA,KAAKC,aAAL,GAAqB,IAArB;IACA,KAAKC,iBAAL,GAAyB,IAAzB;IACA,KAAKC,iBAAL,GAAyB,IAAzB;IACA,KAAKC,kBAAL,GAA0B,IAA1B;IACA,KAAKC,gBAAL,GAAwB,IAAxB;IACA,KAAKC,YAAL,GAAoB,IAApB;IACA,KAAKC,gBAAL,GAAwB,IAAxB;EACD;;;;WAED,eAAM;MACJ,OAAO;QACLR,OAAO,EAAE,KAAKA,OADT;QAELC,SAAS,EAAE,KAAKA,SAFX;QAGLC,aAAa,EAAE,KAAKA,aAHf;QAILC,iBAAiB,EAAE,KAAKA,iBAJnB;QAKLC,iBAAiB,EAAE,KAAKA,iBALnB;QAMLC,kBAAkB,EAAE,KAAKA,kBANpB;QAOLC,gBAAgB,EAAE,KAAKA,gBAPlB;QAQLC,YAAY,EAAE,KAAKA,YARd;QASLC,gBAAgB,EAAE,KAAKA;MATlB,CAAP;IAWD;;;WAED,aAAIC,OAAJ,EAAa;MAAA;;MACX,IAAMC,GAAG,GAAG,KAAKC,GAAL,EAAZ;MAEA,IAAIC,OAAO,GAAG,KAAd;MAEA,mBAAYF,GAAZ,EAAiBG,OAAjB,CAAyB,UAACC,SAAD,EAAe;QACtC,IAAMC,WAAW,GAAGN,OAAO,CAACK,SAAD,CAA3B;;QAEA,IAAIC,WAAW,KAAKC,SAAhB,IAA6BD,WAAW,KAAKL,GAAG,CAACI,SAAD,CAApD,EAAiE;UAC/DF,OAAO,GAAG,IAAV;UACA,KAAI,CAACE,SAAD,CAAJ,GAAkBC,WAAlB;QACD;MACF,CAPD;MASA,OAAOH,OAAP;IACD"}
1
+ {"version":3,"names":["InMeetingActions","MEETINGS","canLock","canUnlock","canAssignHost","canStartRecording","canPauseRecording","canResumeRecording","canStopRecording","canRaiseHand","canLowerAllHands","canLowerSomeoneElsesHand","actions","old","get","changed","forEach","actionKey","actionValue","undefined"],"sources":["in-meeting-actions.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {\n MEETINGS\n} from '../constants';\n\n/**\n * @class InMeetingActions\n */\nexport default class InMeetingActions {\n namespace = MEETINGS;\n\n constructor() {\n this.canLock = null;\n this.canUnlock = null;\n this.canAssignHost = null;\n this.canStartRecording = null;\n this.canPauseRecording = null;\n this.canResumeRecording = null;\n this.canStopRecording = null;\n this.canRaiseHand = null;\n this.canLowerAllHands = null;\n this.canLowerSomeoneElsesHand = null;\n }\n\n get() {\n return {\n canLock: this.canLock,\n canUnlock: this.canUnlock,\n canAssignHost: this.canAssignHost,\n canStartRecording: this.canStartRecording,\n canPauseRecording: this.canPauseRecording,\n canResumeRecording: this.canResumeRecording,\n canStopRecording: this.canStopRecording,\n canRaiseHand: this.canRaiseHand,\n canLowerAllHands: this.canLowerAllHands,\n canLowerSomeoneElsesHand: this.canLowerSomeoneElsesHand,\n };\n }\n\n set(actions) {\n const old = this.get();\n\n let changed = false;\n\n Object.keys(old).forEach((actionKey) => {\n const actionValue = actions[actionKey];\n\n if (actionValue !== undefined && actionValue !== old[actionKey]) {\n changed = true;\n this[actionKey] = actionValue;\n }\n });\n\n return changed;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAIA;;AAJA;AACA;AACA;;AAMA;AACA;AACA;IACqBA,gB;EAGnB,4BAAc;IAAA;IAAA,iDAFFC,mBAEE;IACZ,KAAKC,OAAL,GAAe,IAAf;IACA,KAAKC,SAAL,GAAiB,IAAjB;IACA,KAAKC,aAAL,GAAqB,IAArB;IACA,KAAKC,iBAAL,GAAyB,IAAzB;IACA,KAAKC,iBAAL,GAAyB,IAAzB;IACA,KAAKC,kBAAL,GAA0B,IAA1B;IACA,KAAKC,gBAAL,GAAwB,IAAxB;IACA,KAAKC,YAAL,GAAoB,IAApB;IACA,KAAKC,gBAAL,GAAwB,IAAxB;IACA,KAAKC,wBAAL,GAAgC,IAAhC;EACD;;;;WAED,eAAM;MACJ,OAAO;QACLT,OAAO,EAAE,KAAKA,OADT;QAELC,SAAS,EAAE,KAAKA,SAFX;QAGLC,aAAa,EAAE,KAAKA,aAHf;QAILC,iBAAiB,EAAE,KAAKA,iBAJnB;QAKLC,iBAAiB,EAAE,KAAKA,iBALnB;QAMLC,kBAAkB,EAAE,KAAKA,kBANpB;QAOLC,gBAAgB,EAAE,KAAKA,gBAPlB;QAQLC,YAAY,EAAE,KAAKA,YARd;QASLC,gBAAgB,EAAE,KAAKA,gBATlB;QAULC,wBAAwB,EAAE,KAAKA;MAV1B,CAAP;IAYD;;;WAED,aAAIC,OAAJ,EAAa;MAAA;;MACX,IAAMC,GAAG,GAAG,KAAKC,GAAL,EAAZ;MAEA,IAAIC,OAAO,GAAG,KAAd;MAEA,mBAAYF,GAAZ,EAAiBG,OAAjB,CAAyB,UAACC,SAAD,EAAe;QACtC,IAAMC,WAAW,GAAGN,OAAO,CAACK,SAAD,CAA3B;;QAEA,IAAIC,WAAW,KAAKC,SAAhB,IAA6BD,WAAW,KAAKL,GAAG,CAACI,SAAD,CAApD,EAAiE;UAC/DF,OAAO,GAAG,IAAV;UACA,KAAI,CAACE,SAAD,CAAJ,GAAkBC,WAAlB;QACD;MACF,CAPD;MASA,OAAOH,OAAP;IACD"}
@@ -1428,6 +1428,10 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
1428
1428
  _this3.requiredCaptcha.captchaId = response.body.captchaID;
1429
1429
  _this3.requiredCaptcha.verificationImageURL = response.body.verificationImageURL;
1430
1430
  _this3.requiredCaptcha.verificationAudioURL = response.body.verificationAudioURL;
1431
+ }).catch(function (error) {
1432
+ _loggerProxy.default.logger.error("Meeting:index#refreshCaptcha --> Error Unable to refresh captcha for ".concat(_this3.destination, " - ").concat(error));
1433
+
1434
+ throw error;
1431
1435
  });
1432
1436
  }
1433
1437
  /**
@@ -2220,7 +2224,8 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2220
2224
  canPauseRecording: _util.default.canUserPause(payload.info.userDisplayHints),
2221
2225
  canResumeRecording: _util.default.canUserResume(payload.info.userDisplayHints),
2222
2226
  canRaiseHand: _util.default.canUserRaiseHand(payload.info.userDisplayHints),
2223
- canLowerAllHands: _util.default.canUserLowerAllHands(payload.info.userDisplayHints)
2227
+ canLowerAllHands: _util.default.canUserLowerAllHands(payload.info.userDisplayHints),
2228
+ canLowerSomeoneElsesHand: _util.default.canUserLowerSomeoneElsesHand(payload.info.userDisplayHints)
2224
2229
  });
2225
2230
 
2226
2231
  if (changed) {
@@ -4522,7 +4527,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4522
4527
  } // If the user is unjoined or guest waiting in lobby dont allow the user to addMedia
4523
4528
 
4524
4529
 
4525
- if (this.guest && _util.default.isUserInIdleState(this.locusInfo) && !this.wirelessShare) {
4530
+ if (this.isUserUnadmitted && !this.wirelessShare) {
4526
4531
  return _promise.default.reject(new _webexErrors.UserInLobbyError());
4527
4532
  }
4528
4533
 
@@ -4963,7 +4968,6 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4963
4968
  _this42.mediaProperties.mediaDirection.sendAudio = sendAudio;
4964
4969
  _this42.mediaProperties.mediaDirection.receiveAudio = receiveAudio; // audio state could be undefined if you have not sent audio before
4965
4970
 
4966
- // audio state could be undefined if you have not sent audio before
4967
4971
  _this42.audio = _this42.audio || (0, _muteState.default)(_constants.AUDIO, _this42, _this42.mediaProperties.mediaDirection);
4968
4972
  }));
4969
4973