@webex/plugin-meetings 3.10.0 → 3.11.0-next.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/annotation/annotation.types.js.map +1 -1
- package/dist/annotation/constants.js.map +1 -1
- package/dist/annotation/index.js +19 -22
- package/dist/annotation/index.js.map +1 -1
- package/dist/breakouts/breakout.js +6 -6
- package/dist/breakouts/breakout.js.map +1 -1
- package/dist/breakouts/collection.js.map +1 -1
- package/dist/breakouts/edit-lock-error.js +9 -11
- package/dist/breakouts/edit-lock-error.js.map +1 -1
- package/dist/breakouts/events.js.map +1 -1
- package/dist/breakouts/index.js +126 -127
- package/dist/breakouts/index.js.map +1 -1
- package/dist/breakouts/request.js +6 -8
- package/dist/breakouts/request.js.map +1 -1
- package/dist/breakouts/utils.js.map +1 -1
- package/dist/common/browser-detection.js.map +1 -1
- package/dist/common/collection.js +1 -2
- package/dist/common/collection.js.map +1 -1
- package/dist/common/config.js.map +1 -1
- package/dist/common/errors/captcha-error.js +9 -11
- package/dist/common/errors/captcha-error.js.map +1 -1
- package/dist/common/errors/intent-to-join.js +10 -12
- package/dist/common/errors/intent-to-join.js.map +1 -1
- package/dist/common/errors/join-forbidden-error.js +10 -12
- package/dist/common/errors/join-forbidden-error.js.map +1 -1
- package/dist/common/errors/join-meeting.js +10 -12
- package/dist/common/errors/join-meeting.js.map +1 -1
- package/dist/common/errors/join-webinar-error.js +9 -11
- package/dist/common/errors/join-webinar-error.js.map +1 -1
- package/dist/common/errors/media.js +9 -11
- package/dist/common/errors/media.js.map +1 -1
- package/dist/common/errors/multistream-not-supported-error.js +9 -11
- package/dist/common/errors/multistream-not-supported-error.js.map +1 -1
- package/dist/common/errors/no-meeting-info.js +9 -11
- package/dist/common/errors/no-meeting-info.js.map +1 -1
- package/dist/common/errors/parameter.js +11 -14
- package/dist/common/errors/parameter.js.map +1 -1
- package/dist/common/errors/password-error.js +9 -11
- package/dist/common/errors/password-error.js.map +1 -1
- package/dist/common/errors/permission.js +9 -11
- package/dist/common/errors/permission.js.map +1 -1
- package/dist/common/errors/reclaim-host-role-errors.js +32 -38
- package/dist/common/errors/reclaim-host-role-errors.js.map +1 -1
- package/dist/common/errors/reconnection-not-started.js +5 -6
- package/dist/common/errors/reconnection-not-started.js.map +1 -1
- package/dist/common/errors/reconnection.js +9 -11
- package/dist/common/errors/reconnection.js.map +1 -1
- package/dist/common/errors/stats.js +9 -11
- package/dist/common/errors/stats.js.map +1 -1
- package/dist/common/errors/webex-errors.js +38 -27
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/errors/webex-meetings-error.js +9 -12
- package/dist/common/errors/webex-meetings-error.js.map +1 -1
- package/dist/common/events/events-scope.js +9 -10
- package/dist/common/events/events-scope.js.map +1 -1
- package/dist/common/events/events.js +9 -10
- package/dist/common/events/events.js.map +1 -1
- package/dist/common/events/trigger-proxy.js.map +1 -1
- package/dist/common/events/util.js.map +1 -1
- package/dist/common/logs/logger-config.js.map +1 -1
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/logs/request.js +17 -17
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.js +1 -2
- package/dist/common/queue.js.map +1 -1
- package/dist/config.js +2 -2
- package/dist/config.js.map +1 -1
- package/dist/constants.js +14 -8
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/constants.js.map +1 -1
- package/dist/controls-options-manager/enums.js.map +1 -1
- package/dist/controls-options-manager/index.js +1 -2
- package/dist/controls-options-manager/index.js.map +1 -1
- package/dist/controls-options-manager/types.js.map +1 -1
- package/dist/controls-options-manager/util.js +1 -2
- package/dist/controls-options-manager/util.js.map +1 -1
- package/dist/hashTree/constants.js +20 -0
- package/dist/hashTree/constants.js.map +1 -0
- package/dist/hashTree/hashTree.js +515 -0
- package/dist/hashTree/hashTree.js.map +1 -0
- package/dist/hashTree/hashTreeParser.js +1250 -0
- package/dist/hashTree/hashTreeParser.js.map +1 -0
- package/dist/hashTree/types.js +23 -0
- package/dist/hashTree/types.js.map +1 -0
- package/dist/hashTree/utils.js +59 -0
- package/dist/hashTree/utils.js.map +1 -0
- package/dist/index.js +8 -2
- package/dist/index.js.map +1 -1
- package/dist/interceptors/index.js.map +1 -1
- package/dist/interceptors/locusRetry.js +6 -8
- package/dist/interceptors/locusRetry.js.map +1 -1
- package/dist/interceptors/locusRouteToken.js +33 -13
- package/dist/interceptors/locusRouteToken.js.map +1 -1
- package/dist/interpretation/collection.js.map +1 -1
- package/dist/interpretation/index.js +1 -2
- package/dist/interpretation/index.js.map +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/interpretation/siLanguage.js.map +1 -1
- package/dist/locus-info/controlsUtils.js +5 -3
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
- package/dist/locus-info/fullState.js.map +1 -1
- package/dist/locus-info/hostUtils.js.map +1 -1
- package/dist/locus-info/index.js +619 -177
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +3 -4
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/locus-info/types.js +7 -0
- package/dist/locus-info/types.js.map +1 -0
- package/dist/media/MediaConnectionAwaiter.js +58 -3
- package/dist/media/MediaConnectionAwaiter.js.map +1 -1
- package/dist/media/index.js +5 -2
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +19 -19
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js.map +1 -1
- package/dist/meeting/brbState.js +8 -9
- package/dist/meeting/brbState.js.map +1 -1
- package/dist/meeting/connectionStateHandler.js +10 -13
- package/dist/meeting/connectionStateHandler.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +1672 -1553
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.js +13 -17
- package/dist/meeting/locusMediaRequest.js.map +1 -1
- package/dist/meeting/muteState.js +11 -12
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +101 -104
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/request.type.js.map +1 -1
- package/dist/meeting/state.js.map +1 -1
- package/dist/meeting/type.js.map +1 -1
- package/dist/meeting/util.js +118 -25
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting/voicea-meeting.js +3 -3
- package/dist/meeting/voicea-meeting.js.map +1 -1
- package/dist/meeting-info/collection.js +7 -10
- package/dist/meeting-info/collection.js.map +1 -1
- package/dist/meeting-info/index.js +1 -2
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +135 -146
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.js +1 -2
- package/dist/meeting-info/request.js.map +1 -1
- package/dist/meeting-info/util.js +36 -37
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +30 -31
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +6 -8
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +276 -174
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/meetings.types.js.map +1 -1
- package/dist/meetings/request.js +6 -8
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +36 -30
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +1 -2
- package/dist/member/index.js.map +1 -1
- package/dist/member/types.js +6 -3
- package/dist/member/types.js.map +1 -1
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +1 -2
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +18 -21
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +8 -11
- package/dist/members/request.js.map +1 -1
- package/dist/members/types.js.map +1 -1
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.js +5 -1
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +3 -4
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +1 -2
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/receiveSlot.js +34 -45
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/multistream/receiveSlotManager.js +8 -9
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +12 -15
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.js +1 -2
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +122 -123
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/multistream/sendSlotManager.js +29 -30
- package/dist/multistream/sendSlotManager.js.map +1 -1
- package/dist/personal-meeting-room/index.js +16 -19
- package/dist/personal-meeting-room/index.js.map +1 -1
- package/dist/personal-meeting-room/request.js +7 -10
- package/dist/personal-meeting-room/request.js.map +1 -1
- package/dist/personal-meeting-room/util.js.map +1 -1
- package/dist/reachability/clusterReachability.js +188 -352
- package/dist/reachability/clusterReachability.js.map +1 -1
- package/dist/reachability/index.js +212 -204
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/reachability.types.js +14 -1
- package/dist/reachability/reachability.types.js.map +1 -1
- package/dist/reachability/reachabilityPeerConnection.js +445 -0
- package/dist/reachability/reachabilityPeerConnection.js.map +1 -0
- package/dist/reachability/request.js.map +1 -1
- package/dist/reachability/util.js.map +1 -1
- package/dist/reactions/constants.js.map +1 -1
- package/dist/reactions/reactions.js.map +1 -1
- package/dist/reactions/reactions.type.js.map +1 -1
- package/dist/reconnection-manager/index.js +178 -176
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/enums.js.map +1 -1
- package/dist/recording-controller/index.js +1 -2
- package/dist/recording-controller/index.js.map +1 -1
- package/dist/recording-controller/util.js.map +1 -1
- package/dist/roap/index.js +12 -15
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +24 -26
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +75 -76
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/roap/types.js.map +1 -1
- package/dist/transcription/index.js +4 -5
- package/dist/transcription/index.js.map +1 -1
- package/dist/types/common/errors/webex-errors.d.ts +12 -0
- package/dist/types/config.d.ts +1 -0
- package/dist/types/constants.d.ts +28 -21
- package/dist/types/hashTree/constants.d.ts +8 -0
- package/dist/types/hashTree/hashTree.d.ts +129 -0
- package/dist/types/hashTree/hashTreeParser.d.ts +250 -0
- package/dist/types/hashTree/types.d.ts +33 -0
- package/dist/types/hashTree/utils.d.ts +16 -0
- package/dist/types/index.d.ts +2 -1
- package/dist/types/interceptors/locusRouteToken.d.ts +2 -0
- package/dist/types/locus-info/index.d.ts +98 -80
- package/dist/types/locus-info/types.d.ts +54 -0
- package/dist/types/media/MediaConnectionAwaiter.d.ts +10 -1
- package/dist/types/media/properties.d.ts +2 -1
- package/dist/types/meeting/index.d.ts +40 -12
- package/dist/types/meeting/util.d.ts +25 -0
- package/dist/types/meetings/index.d.ts +12 -3
- package/dist/types/metrics/constants.d.ts +4 -0
- package/dist/types/reachability/clusterReachability.d.ts +33 -84
- package/dist/types/reachability/reachability.types.d.ts +12 -1
- package/dist/types/reachability/reachabilityPeerConnection.d.ts +111 -0
- package/dist/types/reactions/reactions.type.d.ts +1 -0
- package/dist/types/webinar/utils.d.ts +6 -0
- package/dist/webinar/collection.js +1 -2
- package/dist/webinar/collection.js.map +1 -1
- package/dist/webinar/index.js +206 -158
- package/dist/webinar/index.js.map +1 -1
- package/dist/webinar/utils.js +25 -0
- package/dist/webinar/utils.js.map +1 -0
- package/package.json +24 -23
- package/src/common/errors/webex-errors.ts +19 -0
- package/src/config.ts +1 -0
- package/src/constants.ts +17 -2
- package/src/hashTree/constants.ts +9 -0
- package/src/hashTree/hashTree.ts +463 -0
- package/src/hashTree/hashTreeParser.ts +1143 -0
- package/src/hashTree/types.ts +39 -0
- package/src/hashTree/utils.ts +53 -0
- package/src/index.ts +2 -0
- package/src/interceptors/locusRouteToken.ts +22 -5
- package/src/locus-info/controlsUtils.ts +6 -0
- package/src/locus-info/index.ts +641 -164
- package/src/locus-info/types.ts +53 -0
- package/src/media/MediaConnectionAwaiter.ts +41 -1
- package/src/media/index.ts +6 -0
- package/src/media/properties.ts +3 -1
- package/src/meeting/index.ts +173 -37
- package/src/meeting/util.ts +119 -1
- package/src/meetings/index.ts +212 -67
- package/src/meetings/util.ts +10 -9
- package/src/metrics/constants.ts +4 -0
- package/src/reachability/clusterReachability.ts +159 -330
- package/src/reachability/index.ts +15 -1
- package/src/reachability/reachability.types.ts +15 -1
- package/src/reachability/reachabilityPeerConnection.ts +418 -0
- package/src/reactions/reactions.type.ts +1 -0
- package/src/webinar/index.ts +44 -1
- package/src/webinar/utils.ts +16 -0
- package/test/unit/spec/hashTree/hashTree.ts +655 -0
- package/test/unit/spec/hashTree/hashTreeParser.ts +1524 -0
- package/test/unit/spec/hashTree/utils.ts +140 -0
- package/test/unit/spec/interceptors/locusRouteToken.ts +44 -0
- package/test/unit/spec/locus-info/controlsUtils.js +27 -1
- package/test/unit/spec/locus-info/index.js +879 -16
- package/test/unit/spec/media/MediaConnectionAwaiter.ts +41 -1
- package/test/unit/spec/media/index.ts +140 -9
- package/test/unit/spec/media/properties.ts +12 -3
- package/test/unit/spec/meeting/index.js +514 -130
- package/test/unit/spec/meeting/utils.js +341 -15
- package/test/unit/spec/meetings/index.js +822 -32
- package/test/unit/spec/meetings/utils.js +51 -1
- package/test/unit/spec/reachability/clusterReachability.ts +404 -137
- package/test/unit/spec/reachability/index.ts +26 -3
- package/test/unit/spec/webinar/index.ts +106 -0
- package/test/unit/spec/webinar/utils.ts +39 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_lodash","require","_constants","_parameter","_interopRequireDefault","PSTN_DEVICE_TYPE","SelfUtils","parse","self","deviceId","participants","_joinedWith$intent","_participants$find","joinedWith","devices","find","device","url","pairedWith","intent","type","_OBSERVE_","participant","_joinedWith$intent2","associatedWith","pstnDevices","filter","deviceType","remoteVideoMuted","getRemoteVideoMuted","remoteMuted","getRemoteMuted","unmuteAllowed","getUnmuteAllowed","localAudioUnmuteRequested","getLocalAudioUnmuteRequested","localAudioUnmuteRequestedTimeStamp","getLocalAudioUnmuteRequestedTimeStamp","localAudioUnmuteRequired","getLocalAudioUnmuteRequired","lastModified","getLastModified","modifiedBy","getModifiedBy","guest","moderator","mediaStatus","getStatus","status","state","currentMediaStatus","getMediaStatus","mediaSessions","creator","isCreator","selfId","id","selfIdentity","getSelfIdentity","selfUrl","removed","roles","getRoles","isUserUnadmitted","isLocusUserUnadmitted","layout","getLayout","canNotViewTheParticipantList","isSharingBlocked","breakoutSessions","getBreakoutSessions","breakout","getBreakout","interpretation","getInterpretation","brb","getBrb","_self$controls","_self$controls$breako","controls","sessions","_self$controls2","_self$controls3","_self$controls4","_self$controls5","_isArray","default","layouts","undefined","_self$controls6","_self$controls6$role","role","reduce","hasRole","push","getSelves","oldParsedSelf","newSelf","previous","current","updates","hasUserEnteredLobby","hasUserBeenAdmitted","isVideoMutedByOthersChanged","videoMutedByOthersChanged","isMutedByOthersChanged","mutedByOthersChanged","localAudioUnmuteRequestedByServer","localAudioUnmuteRequiredByServer","moderatorChanged","isRolesChanged","isMediaInactiveOrReleased","wasMediaInactiveOrReleased","isUserObserving","isDeviceObserving","layoutChanged","isMediaInactive","audioStateChange","audio","videoStateChange","video","shareStateChange","share","canNotViewTheParticipantListChanged","isSharingBlockedChanged","breakoutsChanged","interpretationChanged","brbChanged","isJoined","_JOINED_","isEqual","previousMediaStatus","MEDIA_STATE","inactive","direction","meta","person","muted","_self$controls7","_self$controls7$audio","requestedToUnmute","_self$controls8","_self$controls8$audio","Date","lastModifiedRequestedToUnmute","disallowUnmute","_self$controls9","_self$controls9$audio","audioStatus","videoStatus","slides","videoSlidesStatus","oldSelf","arguments","length","changedSelf","_LEFT_","reason","MEETING_END_REASON","INACTIVE","MEDIA_RELEASED","_joinedWith$intent3","_joinedWith$intent4","_pairedWith$intent","_WAIT_","_IDLE_","isLocusUserAdmitted","_joinedWith$intent5","_joinedWith$intent6","_pairedWith$intent2","ParameterError","wasInLobby","isInLobby","_oldSelf$joinedWith","_oldSelf$joinedWith$i","_changedSelf$joinedWi","_changedSelf$joinedWi2","_MOVE_MEDIA_","isAdmitted","getSipUrl","partner","sipUri","_CALL_","sipUrl","media","mediaType","AUDIO","mediaContent","MediaContent","main","VIDEO","getReplacedBreakoutMoveId","joinedDevice","replaces","_joinedDevice$replace","breakoutMoveId","_default","exports"],"sources":["selfUtils.ts"],"sourcesContent":["/* eslint-disable default-param-last */\n\nimport {isEqual} from 'lodash';\nimport {\n _IDLE_,\n _JOINED_,\n _CALL_,\n _WAIT_,\n _MOVE_MEDIA_,\n _OBSERVE_,\n _LEFT_,\n MEETING_END_REASON,\n MEDIA_STATE,\n AUDIO,\n VIDEO,\n MediaContent,\n} from '../constants';\nimport ParameterError from '../common/errors/parameter';\n\nconst PSTN_DEVICE_TYPE = 'PROVISIONAL';\n\nconst SelfUtils = {\n /**\n * parses the relevant values for self: muted, guest, moderator, mediaStatus, state, joinedWith, pstnDevices, creator, id\n * @param {Object} self\n * @param {String} deviceId\n * @param {Array} participants\n * @returns {undefined}\n */\n parse: (self: any, deviceId: string, participants: Array<any>) => {\n if (self) {\n const joinedWith = self.devices.find((device) => deviceId === device.url);\n const pairedWith =\n joinedWith?.intent?.type === _OBSERVE_ &&\n participants?.find((participant) => participant.url === joinedWith?.intent?.associatedWith)\n ?.devices[0];\n\n const pstnDevices = self.devices.filter((device) => PSTN_DEVICE_TYPE === device.deviceType);\n\n return {\n remoteVideoMuted: SelfUtils.getRemoteVideoMuted(self),\n remoteMuted: SelfUtils.getRemoteMuted(self),\n unmuteAllowed: SelfUtils.getUnmuteAllowed(self),\n localAudioUnmuteRequested: SelfUtils.getLocalAudioUnmuteRequested(self),\n localAudioUnmuteRequestedTimeStamp: SelfUtils.getLocalAudioUnmuteRequestedTimeStamp(self),\n localAudioUnmuteRequired: SelfUtils.getLocalAudioUnmuteRequired(self),\n lastModified: SelfUtils.getLastModified(self),\n modifiedBy: SelfUtils.getModifiedBy(self),\n guest: self.guest,\n moderator: self.moderator,\n // cumulative media stats\n mediaStatus: SelfUtils.getStatus(self.status),\n // TODO: what should be the status if user has refreshed the page,\n // check the joinedWith parameter and communicate to the user\n state: self.state,\n // TODO: give a proper name . With same device as login or different login`\n // Some times we might have joined with both mobile and web\n joinedWith,\n pairedWith,\n pstnDevices,\n // current media stats is for the current device who has joined\n currentMediaStatus: SelfUtils.getMediaStatus(joinedWith?.mediaSessions),\n creator: self.isCreator, // check if its used,\n selfId: self.id,\n selfIdentity: SelfUtils.getSelfIdentity(self),\n selfUrl: self.url,\n removed: self.removed,\n roles: SelfUtils.getRoles(self),\n isUserUnadmitted: SelfUtils.isLocusUserUnadmitted(self?.state, joinedWith, pairedWith),\n layout: SelfUtils.getLayout(self),\n canNotViewTheParticipantList: SelfUtils.canNotViewTheParticipantList(self),\n isSharingBlocked: SelfUtils.isSharingBlocked(self),\n breakoutSessions: SelfUtils.getBreakoutSessions(self),\n breakout: SelfUtils.getBreakout(self),\n interpretation: SelfUtils.getInterpretation(self),\n brb: SelfUtils.getBrb(self),\n };\n }\n\n return null;\n },\n\n getBreakoutSessions: (self) => self?.controls?.breakout?.sessions,\n getBreakout: (self) => self?.controls?.breakout,\n getInterpretation: (self) => self?.controls?.interpretation,\n getBrb: (self) => self?.controls?.brb,\n\n getLayout: (self) =>\n Array.isArray(self?.controls?.layouts) ? self.controls.layouts[0].type : undefined,\n\n getRoles: (self) =>\n (self?.controls?.role?.roles || []).reduce((roles, role) => {\n if (role.hasRole) {\n roles.push(role.type);\n }\n\n return roles;\n }, []),\n\n canNotViewTheParticipantList: (self) => !!self?.canNotViewTheParticipantList,\n\n isSharingBlocked: (self) => !!self?.isSharingBlocked,\n\n getSelves: (oldParsedSelf, newSelf, deviceId, participants: Array<any>) => {\n const previous = oldParsedSelf;\n const current = newSelf && SelfUtils.parse(newSelf, deviceId, participants);\n const updates: any = {};\n\n updates.hasUserEnteredLobby = SelfUtils.hasUserEnteredLobby(previous, current);\n updates.hasUserBeenAdmitted = SelfUtils.hasUserBeenAdmitted(previous, current);\n updates.isVideoMutedByOthersChanged = SelfUtils.videoMutedByOthersChanged(previous, current);\n updates.isMutedByOthersChanged = SelfUtils.mutedByOthersChanged(previous, current);\n updates.localAudioUnmuteRequestedByServer = SelfUtils.localAudioUnmuteRequestedByServer(\n previous,\n current\n );\n updates.localAudioUnmuteRequiredByServer = SelfUtils.localAudioUnmuteRequiredByServer(\n previous,\n current\n );\n updates.moderatorChanged = SelfUtils.moderatorChanged(previous, current);\n updates.isRolesChanged = SelfUtils.isRolesChanged(previous, current);\n updates.isMediaInactiveOrReleased = SelfUtils.wasMediaInactiveOrReleased(previous, current);\n updates.isUserObserving = SelfUtils.isDeviceObserving(previous, current);\n updates.layoutChanged = SelfUtils.layoutChanged(previous, current);\n\n updates.isMediaInactive = SelfUtils.isMediaInactive(previous, current);\n updates.audioStateChange =\n previous?.currentMediaStatus.audio !== current.currentMediaStatus.audio;\n updates.videoStateChange =\n previous?.currentMediaStatus.video !== current.currentMediaStatus.video;\n updates.shareStateChange =\n previous?.currentMediaStatus.share !== current.currentMediaStatus.share;\n\n updates.canNotViewTheParticipantListChanged =\n previous?.canNotViewTheParticipantList !== current.canNotViewTheParticipantList;\n updates.isSharingBlockedChanged = previous?.isSharingBlocked !== current.isSharingBlocked;\n updates.breakoutsChanged = SelfUtils.breakoutsChanged(previous, current);\n updates.interpretationChanged = SelfUtils.interpretationChanged(previous, current);\n updates.brbChanged = SelfUtils.brbChanged(previous, current);\n\n return {\n previous,\n current,\n updates,\n };\n },\n\n /**\n * Checks if user has joined the meeting\n * @param {Object} self\n * @returns {boolean} isJoined\n */\n isJoined: (self: any) => self?.state === _JOINED_,\n\n /**\n * Validate if the Meeting Layout Controls Layout has changed.\n *\n * @param {Self} previous - Previous self state\n * @param {Self} current - Current self state [per event]\n * @returns {boolean} - If the Meeting Layout Controls Layout has changed.\n */\n layoutChanged: (previous: any, current: any) =>\n current?.layout && previous?.layout !== current?.layout,\n\n breakoutsChanged: (previous, current) =>\n !isEqual(previous?.breakoutSessions, current?.breakoutSessions) && !!current?.breakout,\n\n interpretationChanged: (previous, current) =>\n !isEqual(previous?.interpretation, current?.interpretation) && !!current?.interpretation,\n\n brbChanged: (previous, current) =>\n !isEqual(previous?.brb, current?.brb) && current?.brb !== undefined,\n\n isMediaInactive: (previous, current) => {\n if (\n previous &&\n previous.joinedWith &&\n previous.joinedWith.mediaSessions &&\n current &&\n current.joinedWith &&\n current.joinedWith.mediaSessions\n ) {\n const previousMediaStatus = SelfUtils.getMediaStatus(previous.joinedWith.mediaSessions);\n const currentMediaStatus = SelfUtils.getMediaStatus(current.joinedWith.mediaSessions);\n\n if (\n previousMediaStatus.audio &&\n currentMediaStatus.audio &&\n previousMediaStatus.audio.state !== MEDIA_STATE.inactive &&\n currentMediaStatus.audio.state === MEDIA_STATE.inactive &&\n currentMediaStatus.audio.direction !== MEDIA_STATE.inactive\n ) {\n return true;\n }\n\n if (\n previousMediaStatus.video &&\n currentMediaStatus.video &&\n previousMediaStatus.video.state !== MEDIA_STATE.inactive &&\n currentMediaStatus.video.state === MEDIA_STATE.inactive &&\n currentMediaStatus.video.direction !== MEDIA_STATE.inactive\n ) {\n return true;\n }\n\n if (\n previousMediaStatus.share &&\n currentMediaStatus.share &&\n previousMediaStatus.share.state !== MEDIA_STATE.inactive &&\n currentMediaStatus.share.state === MEDIA_STATE.inactive &&\n currentMediaStatus.share.direction !== MEDIA_STATE.inactive\n ) {\n return true;\n }\n\n return false;\n }\n\n return false;\n },\n\n getLastModified: (self) => {\n if (\n !self ||\n !self.controls ||\n !self.controls.audio ||\n !self.controls.audio.meta ||\n !self.controls.audio.meta.lastModified\n ) {\n return null;\n }\n\n return self.controls.audio.meta.lastModified;\n },\n\n getModifiedBy: (self) => {\n if (\n !self ||\n !self.controls ||\n !self.controls.audio ||\n !self.controls.audio.meta ||\n !self.controls.audio.meta.modifiedBy\n ) {\n return null;\n }\n\n return self.controls.audio.meta.modifiedBy;\n },\n\n /**\n * get the id from the self object\n * @param {Object} self\n * @returns {String}\n */\n getSelfIdentity: (self: any) => {\n if (!self || !self.person) {\n return null;\n }\n\n return self.person.id;\n },\n\n /**\n * get the \"remote video mute\" property from the self object\n * @param {Object} self\n * @returns {Boolean}\n */\n getRemoteVideoMuted: (self: any) => {\n if (!self || !self.controls || !self.controls.video) {\n return null;\n }\n\n return self.controls.video.muted;\n },\n\n /**\n * get the \"remote mute\" property from the self object\n * @param {Object} self\n * @returns {Boolean}\n */\n getRemoteMuted: (self: any) => {\n if (!self || !self.controls || !self.controls.audio) {\n return null;\n }\n\n return self.controls.audio.muted;\n },\n\n getLocalAudioUnmuteRequested: (self) => !!self?.controls?.audio?.requestedToUnmute,\n\n // requestedToUnmute timestamp\n getLocalAudioUnmuteRequestedTimeStamp: (self) =>\n Date.parse(self?.controls?.audio?.lastModifiedRequestedToUnmute) || 0,\n\n getUnmuteAllowed: (self) => {\n if (!self || !self.controls || !self.controls.audio) {\n return null;\n }\n\n return !self.controls.audio.disallowUnmute;\n },\n\n getLocalAudioUnmuteRequired: (self) => !!self?.controls?.audio?.localAudioUnmuteRequired,\n\n getStatus: (status) => ({\n audio: status.audioStatus,\n video: status.videoStatus,\n slides: status.videoSlidesStatus,\n }),\n\n /**\n * @param {Object} oldSelf\n * @param {Object} changedSelf\n * @returns {Boolean}\n */\n wasMediaInactiveOrReleased: (oldSelf: any = {}, changedSelf: any) =>\n oldSelf.joinedWith &&\n oldSelf.joinedWith.state === _JOINED_ &&\n changedSelf.joinedWith &&\n changedSelf.joinedWith.state === _LEFT_ &&\n (changedSelf.joinedWith.reason === MEETING_END_REASON.INACTIVE ||\n changedSelf.joinedWith.reason === MEETING_END_REASON.MEDIA_RELEASED),\n\n /**\n * @param {String | undefined} state meeting state\n * @param {any} joinedWith device that user has joined with\n * @param {any} pairedWith device that user is paired with\n * @returns {Boolean | undefined} true if user is in lobby, false if not, undefined if it cannot be determined\n */\n isLocusUserUnadmitted: (state?: string, joinedWith?: any, pairedWith?: any) => {\n if (state === undefined) {\n return undefined;\n }\n if (joinedWith?.intent?.type === _OBSERVE_ && pairedWith) {\n // we are paired with a device, so need to check the lobby state for that device\n return pairedWith.intent?.type === _WAIT_ && state === _IDLE_;\n }\n\n return joinedWith?.intent?.type === _WAIT_ && state === _IDLE_;\n },\n\n /**\n * @param {String | undefined} state meeting state\n * @param {any} joinedWith device that user has joined with\n * @param {any} pairedWith device that user is paired with\n * @returns {Boolean}\n */\n isLocusUserAdmitted: (state?: string, joinedWith?: any, pairedWith?: any) => {\n if (state === undefined) {\n return undefined;\n }\n\n if (joinedWith?.intent?.type === _OBSERVE_ && pairedWith) {\n // we are paired with a device, so need to check the lobby state for that device\n return pairedWith.intent?.type !== _WAIT_ && state === _JOINED_;\n }\n\n return joinedWith?.intent?.type !== _WAIT_ && state === _JOINED_;\n },\n\n /**\n * @param {Object} oldSelf\n * @param {Object} changedSelf\n * @returns {Boolean} true if user has just been placed in the lobby\n * @throws {Error} when self is undefined\n */\n hasUserEnteredLobby: (oldSelf: any, changedSelf: any) => {\n if (!changedSelf) {\n throw new ParameterError(\n 'changedSelf must be defined to determine if self is unadmitted as guest.'\n );\n }\n\n const wasInLobby = SelfUtils.isLocusUserUnadmitted(\n oldSelf?.state,\n oldSelf?.joinedWith,\n oldSelf?.pairedWith\n );\n\n const isInLobby = SelfUtils.isLocusUserUnadmitted(\n changedSelf?.state,\n changedSelf?.joinedWith,\n changedSelf?.pairedWith\n );\n\n return !wasInLobby && isInLobby;\n },\n\n moderatorChanged: (oldSelf, changedSelf) => {\n if (!oldSelf) {\n return true;\n }\n if (!changedSelf) {\n throw new ParameterError(\n 'New self must be defined to determine if self transitioned moderator status.'\n );\n }\n\n return oldSelf.moderator !== changedSelf.moderator;\n },\n\n /**\n * determine whether the roles of self is changed or not\n * @param {Object} oldSelf\n * @param {Object} changedSelf\n * @returns {Boolean}\n */\n isRolesChanged: (oldSelf, changedSelf) => {\n if (!changedSelf) {\n // no new self means no change\n return false;\n }\n\n return !isEqual(oldSelf?.roles, changedSelf?.roles);\n },\n /**\n * @param {Object} oldSelf\n * @param {Object} changedSelf\n * @returns {Boolean}\n * @throws {Error} if changed self was undefined\n */\n isDeviceObserving: (oldSelf: any, changedSelf: any) =>\n oldSelf &&\n oldSelf.joinedWith?.intent?.type === _MOVE_MEDIA_ &&\n changedSelf &&\n changedSelf.joinedWith?.intent?.type === _OBSERVE_,\n\n /**\n * @param {Object} oldSelf\n * @param {Object} changedSelf\n * @returns {Boolean} true if the user has just been admitted from lobby into the meeting\n * @throws {Error} if changed self was undefined\n */\n hasUserBeenAdmitted: (oldSelf: any, changedSelf: any) => {\n if (!oldSelf) {\n // if there was no previous locus, it couldn't have been admitted yet\n return false;\n }\n if (!changedSelf) {\n throw new ParameterError(\n 'New self must be defined to determine if self transitioned to admitted as guest.'\n );\n }\n\n const wasInLobby = SelfUtils.isLocusUserUnadmitted(\n oldSelf?.state,\n oldSelf?.joinedWith,\n oldSelf?.pairedWith\n );\n\n const isAdmitted = SelfUtils.isLocusUserAdmitted(\n changedSelf?.state,\n changedSelf?.joinedWith,\n changedSelf?.pairedWith\n );\n\n return wasInLobby && isAdmitted && isAdmitted !== undefined;\n },\n\n videoMutedByOthersChanged: (oldSelf, changedSelf) => {\n if (!changedSelf) {\n throw new ParameterError(\n 'New self must be defined to determine if self was video muted by others.'\n );\n }\n\n if (!oldSelf || oldSelf.remoteVideoMuted === null) {\n if (changedSelf.remoteVideoMuted) {\n return true; // this happens when host disables \"Allow start video\"\n }\n\n // we don't want to be sending the 'meeting:self:videoUnmutedByOthers' notification on meeting join\n return false;\n }\n\n return oldSelf.remoteVideoMuted !== changedSelf.remoteVideoMuted;\n },\n\n mutedByOthersChanged: (oldSelf, changedSelf) => {\n if (!changedSelf) {\n throw new ParameterError(\n 'New self must be defined to determine if self was muted by others.'\n );\n }\n\n if (!oldSelf || oldSelf.remoteMuted === null) {\n if (changedSelf.remoteMuted) {\n return true; // this happens when mute on-entry is enabled\n }\n\n // we don't want to be sending the 'meeting:self:unmutedByOthers' notification on meeting join\n return false;\n }\n\n // there is no need to trigger user update if no one muted user\n if (changedSelf.selfIdentity === changedSelf.modifiedBy) {\n return false;\n }\n\n return (\n changedSelf.remoteMuted !== null &&\n (oldSelf.remoteMuted !== changedSelf.remoteMuted ||\n (changedSelf.remoteMuted && oldSelf.unmuteAllowed !== changedSelf.unmuteAllowed))\n );\n },\n\n localAudioUnmuteRequestedByServer: (oldSelf: any = {}, changedSelf: any) => {\n if (!changedSelf) {\n throw new ParameterError(\n 'New self must be defined to determine if self received request to unmute.'\n );\n }\n\n return (\n changedSelf.localAudioUnmuteRequested &&\n changedSelf.localAudioUnmuteRequestedTimeStamp > oldSelf.localAudioUnmuteRequestedTimeStamp\n );\n },\n\n localAudioUnmuteRequiredByServer: (oldSelf: any = {}, changedSelf: any) => {\n if (!changedSelf) {\n throw new ParameterError(\n 'New self must be defined to determine if localAudioUnmuteRequired changed.'\n );\n }\n\n return (\n !changedSelf.remoteMuted &&\n changedSelf.localAudioUnmuteRequired &&\n oldSelf.localAudioUnmuteRequired !== changedSelf.localAudioUnmuteRequired\n );\n },\n\n /**\n * extract the sipUrl from the partner\n * @param {Object} partner\n * @param {Object} info\n * @returns {Object}\n */\n\n getSipUrl: (partner: any, type, sipUri) => {\n // For webex meeting the sipUrl gets updated in info parser\n if (partner && type === _CALL_) {\n return {sipUri: partner.person.sipUrl || partner.person.id};\n }\n\n return {sipUri};\n },\n\n getMediaStatus: (mediaSessions = []): {audio: any; video: any; share: any} => {\n const mediaStatus = {\n audio: {},\n video: {},\n share: {},\n };\n\n mediaStatus.audio = mediaSessions.find(\n (media) => media.mediaType === AUDIO && media.mediaContent === MediaContent.main\n );\n mediaStatus.video = mediaSessions.find(\n (media) => media.mediaType === VIDEO && media.mediaContent === MediaContent.main\n );\n mediaStatus.share = mediaSessions.find(\n (media) => media.mediaType === VIDEO && media.mediaContent === MediaContent.slides\n );\n\n return mediaStatus;\n },\n\n getReplacedBreakoutMoveId: (self: any, deviceId: string) => {\n if (self && Array.isArray(self.devices)) {\n const joinedDevice = self.devices.find((device) => deviceId === device.url);\n if (Array.isArray(joinedDevice?.replaces)) {\n return joinedDevice.replaces[0]?.breakoutMoveId;\n }\n }\n\n return null;\n },\n};\n\nexport default SelfUtils;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_lodash","require","_constants","_parameter","_interopRequireDefault","PSTN_DEVICE_TYPE","SelfUtils","parse","self","deviceId","participants","_joinedWith$intent","_participants$find","joinedWith","devices","find","device","url","pairedWith","intent","type","_OBSERVE_","participant","_joinedWith$intent2","associatedWith","pstnDevices","filter","deviceType","remoteVideoMuted","getRemoteVideoMuted","remoteMuted","getRemoteMuted","unmuteAllowed","getUnmuteAllowed","localAudioUnmuteRequested","getLocalAudioUnmuteRequested","localAudioUnmuteRequestedTimeStamp","getLocalAudioUnmuteRequestedTimeStamp","localAudioUnmuteRequired","getLocalAudioUnmuteRequired","lastModified","getLastModified","modifiedBy","getModifiedBy","guest","moderator","mediaStatus","getStatus","status","state","currentMediaStatus","getMediaStatus","mediaSessions","creator","isCreator","selfId","id","selfIdentity","getSelfIdentity","selfUrl","removed","roles","getRoles","isUserUnadmitted","isLocusUserUnadmitted","layout","getLayout","canNotViewTheParticipantList","isSharingBlocked","breakoutSessions","getBreakoutSessions","breakout","getBreakout","interpretation","getInterpretation","brb","getBrb","_self$controls","_self$controls$breako","controls","sessions","_self$controls2","_self$controls3","_self$controls4","_self$controls5","_isArray","default","layouts","undefined","_self$controls6","_self$controls6$role","role","reduce","hasRole","push","getSelves","oldParsedSelf","newSelf","previous","current","updates","hasUserEnteredLobby","hasUserBeenAdmitted","isVideoMutedByOthersChanged","videoMutedByOthersChanged","isMutedByOthersChanged","mutedByOthersChanged","localAudioUnmuteRequestedByServer","localAudioUnmuteRequiredByServer","moderatorChanged","isRolesChanged","isMediaInactiveOrReleased","wasMediaInactiveOrReleased","isUserObserving","isDeviceObserving","layoutChanged","isMediaInactive","audioStateChange","audio","videoStateChange","video","shareStateChange","share","canNotViewTheParticipantListChanged","isSharingBlockedChanged","breakoutsChanged","interpretationChanged","brbChanged","isJoined","_JOINED_","isEqual","previousMediaStatus","MEDIA_STATE","inactive","direction","meta","person","muted","_self$controls7","_self$controls7$audio","requestedToUnmute","_self$controls8","_self$controls8$audio","Date","lastModifiedRequestedToUnmute","disallowUnmute","_self$controls9","_self$controls9$audio","audioStatus","videoStatus","slides","videoSlidesStatus","oldSelf","arguments","length","changedSelf","_LEFT_","reason","MEETING_END_REASON","INACTIVE","MEDIA_RELEASED","_joinedWith$intent3","_joinedWith$intent4","_pairedWith$intent","_WAIT_","_IDLE_","isLocusUserAdmitted","_joinedWith$intent5","_joinedWith$intent6","_pairedWith$intent2","ParameterError","wasInLobby","isInLobby","_oldSelf$joinedWith","_oldSelf$joinedWith$i","_changedSelf$joinedWi","_changedSelf$joinedWi2","_MOVE_MEDIA_","isAdmitted","getSipUrl","partner","sipUri","_CALL_","sipUrl","media","mediaType","AUDIO","mediaContent","MediaContent","main","VIDEO","getReplacedBreakoutMoveId","joinedDevice","replaces","_joinedDevice$replace","breakoutMoveId","_default","exports"],"sources":["selfUtils.ts"],"sourcesContent":["/* eslint-disable default-param-last */\n\nimport {isEqual} from 'lodash';\nimport {\n _IDLE_,\n _JOINED_,\n _CALL_,\n _WAIT_,\n _MOVE_MEDIA_,\n _OBSERVE_,\n _LEFT_,\n MEETING_END_REASON,\n MEDIA_STATE,\n AUDIO,\n VIDEO,\n MediaContent,\n} from '../constants';\nimport ParameterError from '../common/errors/parameter';\n\nconst PSTN_DEVICE_TYPE = 'PROVISIONAL';\n\nconst SelfUtils = {\n /**\n * parses the relevant values for self: muted, guest, moderator, mediaStatus, state, joinedWith, pstnDevices, creator, id\n * @param {Object} self\n * @param {String} deviceId\n * @param {Array} participants\n * @returns {undefined}\n */\n parse: (self: any, deviceId: string, participants: Array<any>) => {\n if (self) {\n const joinedWith = self.devices.find((device) => deviceId === device.url);\n const pairedWith =\n joinedWith?.intent?.type === _OBSERVE_ &&\n participants?.find((participant) => participant.url === joinedWith?.intent?.associatedWith)\n ?.devices[0];\n\n const pstnDevices = self.devices.filter((device) => PSTN_DEVICE_TYPE === device.deviceType);\n\n return {\n remoteVideoMuted: SelfUtils.getRemoteVideoMuted(self),\n remoteMuted: SelfUtils.getRemoteMuted(self),\n unmuteAllowed: SelfUtils.getUnmuteAllowed(self),\n localAudioUnmuteRequested: SelfUtils.getLocalAudioUnmuteRequested(self),\n localAudioUnmuteRequestedTimeStamp: SelfUtils.getLocalAudioUnmuteRequestedTimeStamp(self),\n localAudioUnmuteRequired: SelfUtils.getLocalAudioUnmuteRequired(self),\n lastModified: SelfUtils.getLastModified(self),\n modifiedBy: SelfUtils.getModifiedBy(self),\n guest: self.guest,\n moderator: self.moderator,\n // cumulative media stats\n mediaStatus: SelfUtils.getStatus(self.status),\n // TODO: what should be the status if user has refreshed the page,\n // check the joinedWith parameter and communicate to the user\n state: self.state,\n // TODO: give a proper name . With same device as login or different login`\n // Some times we might have joined with both mobile and web\n joinedWith,\n pairedWith,\n pstnDevices,\n // current media stats is for the current device who has joined\n currentMediaStatus: SelfUtils.getMediaStatus(joinedWith?.mediaSessions),\n creator: self.isCreator, // check if its used,\n selfId: self.id,\n selfIdentity: SelfUtils.getSelfIdentity(self),\n selfUrl: self.url,\n removed: self.removed,\n roles: SelfUtils.getRoles(self),\n isUserUnadmitted: SelfUtils.isLocusUserUnadmitted(self?.state, joinedWith, pairedWith),\n layout: SelfUtils.getLayout(self),\n canNotViewTheParticipantList: SelfUtils.canNotViewTheParticipantList(self),\n isSharingBlocked: SelfUtils.isSharingBlocked(self),\n breakoutSessions: SelfUtils.getBreakoutSessions(self),\n breakout: SelfUtils.getBreakout(self),\n interpretation: SelfUtils.getInterpretation(self),\n brb: SelfUtils.getBrb(self),\n };\n }\n\n return null;\n },\n\n getBreakoutSessions: (self) => self?.controls?.breakout?.sessions,\n getBreakout: (self) => self?.controls?.breakout,\n getInterpretation: (self) => self?.controls?.interpretation,\n getBrb: (self) => self?.controls?.brb,\n\n getLayout: (self) =>\n Array.isArray(self?.controls?.layouts) ? self.controls.layouts[0].type : undefined,\n\n getRoles: (self) =>\n (self?.controls?.role?.roles || []).reduce((roles, role) => {\n if (role.hasRole) {\n roles.push(role.type);\n }\n\n return roles;\n }, []),\n\n canNotViewTheParticipantList: (self) => !!self?.canNotViewTheParticipantList,\n\n isSharingBlocked: (self) => !!self?.isSharingBlocked,\n\n getSelves: (oldParsedSelf, newSelf, deviceId, participants: Array<any>) => {\n const previous = oldParsedSelf;\n const current = newSelf && SelfUtils.parse(newSelf, deviceId, participants);\n const updates: any = {};\n\n updates.hasUserEnteredLobby = SelfUtils.hasUserEnteredLobby(previous, current);\n updates.hasUserBeenAdmitted = SelfUtils.hasUserBeenAdmitted(previous, current);\n updates.isVideoMutedByOthersChanged = SelfUtils.videoMutedByOthersChanged(previous, current);\n updates.isMutedByOthersChanged = SelfUtils.mutedByOthersChanged(previous, current);\n updates.localAudioUnmuteRequestedByServer = SelfUtils.localAudioUnmuteRequestedByServer(\n previous,\n current\n );\n updates.localAudioUnmuteRequiredByServer = SelfUtils.localAudioUnmuteRequiredByServer(\n previous,\n current\n );\n updates.moderatorChanged = SelfUtils.moderatorChanged(previous, current);\n updates.isRolesChanged = SelfUtils.isRolesChanged(previous, current);\n updates.isMediaInactiveOrReleased = SelfUtils.wasMediaInactiveOrReleased(previous, current);\n updates.isUserObserving = SelfUtils.isDeviceObserving(previous, current);\n updates.layoutChanged = SelfUtils.layoutChanged(previous, current);\n\n updates.isMediaInactive = SelfUtils.isMediaInactive(previous, current);\n updates.audioStateChange =\n previous?.currentMediaStatus.audio !== current.currentMediaStatus.audio;\n updates.videoStateChange =\n previous?.currentMediaStatus.video !== current.currentMediaStatus.video;\n updates.shareStateChange =\n previous?.currentMediaStatus.share !== current.currentMediaStatus.share;\n\n updates.canNotViewTheParticipantListChanged =\n previous?.canNotViewTheParticipantList !== current.canNotViewTheParticipantList;\n updates.isSharingBlockedChanged = previous?.isSharingBlocked !== current.isSharingBlocked;\n updates.breakoutsChanged = SelfUtils.breakoutsChanged(previous, current);\n updates.interpretationChanged = SelfUtils.interpretationChanged(previous, current);\n updates.brbChanged = SelfUtils.brbChanged(previous, current);\n\n return {\n previous,\n current,\n updates,\n };\n },\n\n /**\n * Checks if user has joined the meeting\n * @param {Object} self\n * @returns {boolean} isJoined\n */\n isJoined: (self: any) => self?.state === _JOINED_,\n\n /**\n * Validate if the Meeting Layout Controls Layout has changed.\n *\n * @param {Self} previous - Previous self state\n * @param {Self} current - Current self state [per event]\n * @returns {boolean} - If the Meeting Layout Controls Layout has changed.\n */\n layoutChanged: (previous: any, current: any) =>\n current?.layout && previous?.layout !== current?.layout,\n\n breakoutsChanged: (previous, current) =>\n !isEqual(previous?.breakoutSessions, current?.breakoutSessions) && !!current?.breakout,\n\n interpretationChanged: (previous, current) =>\n !isEqual(previous?.interpretation, current?.interpretation) && !!current?.interpretation,\n\n brbChanged: (previous, current) =>\n !isEqual(previous?.brb, current?.brb) && current?.brb !== undefined,\n\n isMediaInactive: (previous, current) => {\n if (\n previous &&\n previous.joinedWith &&\n previous.joinedWith.mediaSessions &&\n current &&\n current.joinedWith &&\n current.joinedWith.mediaSessions\n ) {\n const previousMediaStatus = SelfUtils.getMediaStatus(previous.joinedWith.mediaSessions);\n const currentMediaStatus = SelfUtils.getMediaStatus(current.joinedWith.mediaSessions);\n\n if (\n previousMediaStatus.audio &&\n currentMediaStatus.audio &&\n previousMediaStatus.audio.state !== MEDIA_STATE.inactive &&\n currentMediaStatus.audio.state === MEDIA_STATE.inactive &&\n currentMediaStatus.audio.direction !== MEDIA_STATE.inactive\n ) {\n return true;\n }\n\n if (\n previousMediaStatus.video &&\n currentMediaStatus.video &&\n previousMediaStatus.video.state !== MEDIA_STATE.inactive &&\n currentMediaStatus.video.state === MEDIA_STATE.inactive &&\n currentMediaStatus.video.direction !== MEDIA_STATE.inactive\n ) {\n return true;\n }\n\n if (\n previousMediaStatus.share &&\n currentMediaStatus.share &&\n previousMediaStatus.share.state !== MEDIA_STATE.inactive &&\n currentMediaStatus.share.state === MEDIA_STATE.inactive &&\n currentMediaStatus.share.direction !== MEDIA_STATE.inactive\n ) {\n return true;\n }\n\n return false;\n }\n\n return false;\n },\n\n getLastModified: (self) => {\n if (\n !self ||\n !self.controls ||\n !self.controls.audio ||\n !self.controls.audio.meta ||\n !self.controls.audio.meta.lastModified\n ) {\n return null;\n }\n\n return self.controls.audio.meta.lastModified;\n },\n\n getModifiedBy: (self) => {\n if (\n !self ||\n !self.controls ||\n !self.controls.audio ||\n !self.controls.audio.meta ||\n !self.controls.audio.meta.modifiedBy\n ) {\n return null;\n }\n\n return self.controls.audio.meta.modifiedBy;\n },\n\n /**\n * get the id from the self object\n * @param {Object} self\n * @returns {String}\n */\n getSelfIdentity: (self: any) => {\n if (!self || !self.person) {\n return null;\n }\n\n return self.person.id;\n },\n\n /**\n * get the \"remote video mute\" property from the self object\n * @param {Object} self\n * @returns {Boolean}\n */\n getRemoteVideoMuted: (self: any) => {\n if (!self || !self.controls || !self.controls.video) {\n return null;\n }\n\n return self.controls.video.muted;\n },\n\n /**\n * get the \"remote mute\" property from the self object\n * @param {Object} self\n * @returns {Boolean}\n */\n getRemoteMuted: (self: any) => {\n if (!self || !self.controls || !self.controls.audio) {\n return null;\n }\n\n return self.controls.audio.muted;\n },\n\n getLocalAudioUnmuteRequested: (self) => !!self?.controls?.audio?.requestedToUnmute,\n\n // requestedToUnmute timestamp\n getLocalAudioUnmuteRequestedTimeStamp: (self) =>\n Date.parse(self?.controls?.audio?.lastModifiedRequestedToUnmute) || 0,\n\n getUnmuteAllowed: (self) => {\n if (!self || !self.controls || !self.controls.audio) {\n return null;\n }\n\n return !self.controls.audio.disallowUnmute;\n },\n\n getLocalAudioUnmuteRequired: (self) => !!self?.controls?.audio?.localAudioUnmuteRequired,\n\n getStatus: (status) => ({\n audio: status.audioStatus,\n video: status.videoStatus,\n slides: status.videoSlidesStatus,\n }),\n\n /**\n * @param {Object} oldSelf\n * @param {Object} changedSelf\n * @returns {Boolean}\n */\n wasMediaInactiveOrReleased: (oldSelf: any = {}, changedSelf: any) =>\n oldSelf.joinedWith &&\n oldSelf.joinedWith.state === _JOINED_ &&\n changedSelf.joinedWith &&\n changedSelf.joinedWith.state === _LEFT_ &&\n (changedSelf.joinedWith.reason === MEETING_END_REASON.INACTIVE ||\n changedSelf.joinedWith.reason === MEETING_END_REASON.MEDIA_RELEASED),\n\n /**\n * @param {String | undefined} state meeting state\n * @param {any} joinedWith device that user has joined with\n * @param {any} pairedWith device that user is paired with\n * @returns {Boolean | undefined} true if user is in lobby, false if not, undefined if it cannot be determined\n */\n isLocusUserUnadmitted: (state?: string, joinedWith?: any, pairedWith?: any) => {\n if (state === undefined) {\n return undefined;\n }\n if (joinedWith?.intent?.type === _OBSERVE_ && pairedWith) {\n // we are paired with a device, so need to check the lobby state for that device\n return pairedWith.intent?.type === _WAIT_ && state === _IDLE_;\n }\n\n return joinedWith?.intent?.type === _WAIT_ && state === _IDLE_;\n },\n\n /**\n * @param {String | undefined} state meeting state\n * @param {any} joinedWith device that user has joined with\n * @param {any} pairedWith device that user is paired with\n * @returns {Boolean}\n */\n isLocusUserAdmitted: (state?: string, joinedWith?: any, pairedWith?: any) => {\n if (state === undefined) {\n return undefined;\n }\n\n if (joinedWith?.intent?.type === _OBSERVE_ && pairedWith) {\n // we are paired with a device, so need to check the lobby state for that device\n return pairedWith.intent?.type !== _WAIT_ && state === _JOINED_;\n }\n\n return joinedWith?.intent?.type !== _WAIT_ && state === _JOINED_;\n },\n\n /**\n * @param {Object} oldSelf\n * @param {Object} changedSelf\n * @returns {Boolean} true if user has just been placed in the lobby\n * @throws {Error} when self is undefined\n */\n hasUserEnteredLobby: (oldSelf: any, changedSelf: any) => {\n if (!changedSelf) {\n throw new ParameterError(\n 'changedSelf must be defined to determine if self is unadmitted as guest.'\n );\n }\n\n const wasInLobby = SelfUtils.isLocusUserUnadmitted(\n oldSelf?.state,\n oldSelf?.joinedWith,\n oldSelf?.pairedWith\n );\n\n const isInLobby = SelfUtils.isLocusUserUnadmitted(\n changedSelf?.state,\n changedSelf?.joinedWith,\n changedSelf?.pairedWith\n );\n\n return !wasInLobby && isInLobby;\n },\n\n moderatorChanged: (oldSelf, changedSelf) => {\n if (!oldSelf) {\n return true;\n }\n if (!changedSelf) {\n throw new ParameterError(\n 'New self must be defined to determine if self transitioned moderator status.'\n );\n }\n\n return oldSelf.moderator !== changedSelf.moderator;\n },\n\n /**\n * determine whether the roles of self is changed or not\n * @param {Object} oldSelf\n * @param {Object} changedSelf\n * @returns {Boolean}\n */\n isRolesChanged: (oldSelf, changedSelf) => {\n if (!changedSelf) {\n // no new self means no change\n return false;\n }\n\n return !isEqual(oldSelf?.roles, changedSelf?.roles);\n },\n /**\n * @param {Object} oldSelf\n * @param {Object} changedSelf\n * @returns {Boolean}\n * @throws {Error} if changed self was undefined\n */\n isDeviceObserving: (oldSelf: any, changedSelf: any) =>\n oldSelf &&\n oldSelf.joinedWith?.intent?.type === _MOVE_MEDIA_ &&\n changedSelf &&\n changedSelf.joinedWith?.intent?.type === _OBSERVE_,\n\n /**\n * @param {Object} oldSelf\n * @param {Object} changedSelf\n * @returns {Boolean} true if the user has just been admitted from lobby into the meeting\n * @throws {Error} if changed self was undefined\n */\n hasUserBeenAdmitted: (oldSelf: any, changedSelf: any) => {\n if (!oldSelf) {\n // if there was no previous locus, it couldn't have been admitted yet\n return false;\n }\n if (!changedSelf) {\n throw new ParameterError(\n 'New self must be defined to determine if self transitioned to admitted as guest.'\n );\n }\n\n const wasInLobby = SelfUtils.isLocusUserUnadmitted(\n oldSelf?.state,\n oldSelf?.joinedWith,\n oldSelf?.pairedWith\n );\n\n const isAdmitted = SelfUtils.isLocusUserAdmitted(\n changedSelf?.state,\n changedSelf?.joinedWith,\n changedSelf?.pairedWith\n );\n\n return wasInLobby && isAdmitted && isAdmitted !== undefined;\n },\n\n videoMutedByOthersChanged: (oldSelf, changedSelf) => {\n if (!changedSelf) {\n throw new ParameterError(\n 'New self must be defined to determine if self was video muted by others.'\n );\n }\n\n if (!oldSelf || oldSelf.remoteVideoMuted === null) {\n if (changedSelf.remoteVideoMuted) {\n return true; // this happens when host disables \"Allow start video\"\n }\n\n // we don't want to be sending the 'meeting:self:videoUnmutedByOthers' notification on meeting join\n return false;\n }\n\n return oldSelf.remoteVideoMuted !== changedSelf.remoteVideoMuted;\n },\n\n mutedByOthersChanged: (oldSelf, changedSelf) => {\n if (!changedSelf) {\n throw new ParameterError(\n 'New self must be defined to determine if self was muted by others.'\n );\n }\n\n if (!oldSelf || oldSelf.remoteMuted === null) {\n if (changedSelf.remoteMuted) {\n return true; // this happens when mute on-entry is enabled\n }\n\n // we don't want to be sending the 'meeting:self:unmutedByOthers' notification on meeting join\n return false;\n }\n\n // there is no need to trigger user update if no one muted user\n if (changedSelf.selfIdentity === changedSelf.modifiedBy) {\n return false;\n }\n\n return (\n changedSelf.remoteMuted !== null &&\n (oldSelf.remoteMuted !== changedSelf.remoteMuted ||\n (changedSelf.remoteMuted && oldSelf.unmuteAllowed !== changedSelf.unmuteAllowed))\n );\n },\n\n localAudioUnmuteRequestedByServer: (oldSelf: any = {}, changedSelf: any) => {\n if (!changedSelf) {\n throw new ParameterError(\n 'New self must be defined to determine if self received request to unmute.'\n );\n }\n\n return (\n changedSelf.localAudioUnmuteRequested &&\n changedSelf.localAudioUnmuteRequestedTimeStamp > oldSelf.localAudioUnmuteRequestedTimeStamp\n );\n },\n\n localAudioUnmuteRequiredByServer: (oldSelf: any = {}, changedSelf: any) => {\n if (!changedSelf) {\n throw new ParameterError(\n 'New self must be defined to determine if localAudioUnmuteRequired changed.'\n );\n }\n\n return (\n !changedSelf.remoteMuted &&\n changedSelf.localAudioUnmuteRequired &&\n oldSelf.localAudioUnmuteRequired !== changedSelf.localAudioUnmuteRequired\n );\n },\n\n /**\n * extract the sipUrl from the partner\n * @param {Object} partner\n * @param {Object} info\n * @returns {Object}\n */\n\n getSipUrl: (partner: any, type, sipUri) => {\n // For webex meeting the sipUrl gets updated in info parser\n if (partner && type === _CALL_) {\n return {sipUri: partner.person.sipUrl || partner.person.id};\n }\n\n return {sipUri};\n },\n\n getMediaStatus: (mediaSessions = []): {audio: any; video: any; share: any} => {\n const mediaStatus = {\n audio: {},\n video: {},\n share: {},\n };\n\n mediaStatus.audio = mediaSessions.find(\n (media) => media.mediaType === AUDIO && media.mediaContent === MediaContent.main\n );\n mediaStatus.video = mediaSessions.find(\n (media) => media.mediaType === VIDEO && media.mediaContent === MediaContent.main\n );\n mediaStatus.share = mediaSessions.find(\n (media) => media.mediaType === VIDEO && media.mediaContent === MediaContent.slides\n );\n\n return mediaStatus;\n },\n\n getReplacedBreakoutMoveId: (self: any, deviceId: string) => {\n if (self && Array.isArray(self.devices)) {\n const joinedDevice = self.devices.find((device) => deviceId === device.url);\n if (Array.isArray(joinedDevice?.replaces)) {\n return joinedDevice.replaces[0]?.breakoutMoveId;\n }\n }\n\n return null;\n },\n};\n\nexport default SelfUtils;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import {HtMeta} from '../hashTree/types';\n\nexport type LocusFullState = {\n active: boolean;\n count: number;\n lastActive: string;\n locked: boolean;\n sessionId: string;\n seessionIds: string[];\n startTime: number;\n state: string;\n type: string;\n};\n\nexport type Links = {\n services: Record<'breakout' | 'record', {url: string}>; // there exist also other services, but these are the ones we currently use\n resources: Record<'webcastInstance' | 'visibleDataSets', {url: string}>; // there exist also other resources, but these are the ones we currently use\n};\n\nexport type LocusDTO = {\n controls?: any;\n fullState?: LocusFullState;\n host?: {\n id: string;\n incomingCallProtocols: any[];\n isExternal: boolean;\n name: string;\n orgId: string;\n };\n htMeta?: HtMeta;\n info?: any;\n jsSdkMeta?: {\n removedParticipantIds: string[]; // list of ids of participants that are removed in the last update\n };\n links?: Links;\n mediaShares?: any[];\n meetings?: any[];\n participants: any[];\n replaces?: any[];\n self?: any;\n sequence?: {\n dirtyParticipants: number;\n entries: number[];\n rangeEnd: number;\n rangeStart: number;\n sequenceHash: number;\n sessionToken: string;\n since: string;\n totalParticipants: number;\n };\n syncUrl?: string;\n url?: string;\n};\n"],"mappings":"","ignoreList":[]}
|
|
@@ -6,7 +6,10 @@ _Object$defineProperty(exports, "__esModule", {
|
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
8
|
exports.default = void 0;
|
|
9
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
|
|
10
|
+
var _from = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/array/from"));
|
|
9
11
|
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
12
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
|
|
10
13
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
|
11
14
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
|
12
15
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
|
@@ -14,6 +17,8 @@ var _common = require("@webex/common");
|
|
|
14
17
|
var _internalMediaCore = require("@webex/internal-media-core");
|
|
15
18
|
var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
|
|
16
19
|
var _constants = require("../constants");
|
|
20
|
+
var _constants2 = _interopRequireDefault(require("../metrics/constants"));
|
|
21
|
+
var _metrics = _interopRequireDefault(require("../metrics"));
|
|
17
22
|
/**
|
|
18
23
|
* @class MediaConnectionAwaiter
|
|
19
24
|
*/
|
|
@@ -22,13 +27,15 @@ var MediaConnectionAwaiter = exports.default = /*#__PURE__*/function () {
|
|
|
22
27
|
* @param {MediaConnectionAwaiterProps} mediaConnectionAwaiterProps
|
|
23
28
|
*/
|
|
24
29
|
function MediaConnectionAwaiter(_ref) {
|
|
25
|
-
var webrtcMediaConnection = _ref.webrtcMediaConnection
|
|
30
|
+
var webrtcMediaConnection = _ref.webrtcMediaConnection,
|
|
31
|
+
correlationId = _ref.correlationId;
|
|
26
32
|
(0, _classCallCheck2.default)(this, MediaConnectionAwaiter);
|
|
27
33
|
(0, _defineProperty2.default)(this, "webrtcMediaConnection", void 0);
|
|
28
34
|
(0, _defineProperty2.default)(this, "timer", void 0);
|
|
29
35
|
(0, _defineProperty2.default)(this, "defer", void 0);
|
|
30
36
|
(0, _defineProperty2.default)(this, "retried", void 0);
|
|
31
37
|
(0, _defineProperty2.default)(this, "iceConnected", void 0);
|
|
38
|
+
(0, _defineProperty2.default)(this, "correlationId", void 0);
|
|
32
39
|
(0, _defineProperty2.default)(this, "onTimeoutCallback", void 0);
|
|
33
40
|
(0, _defineProperty2.default)(this, "peerConnectionStateCallback", void 0);
|
|
34
41
|
(0, _defineProperty2.default)(this, "iceConnectionStateCallback", void 0);
|
|
@@ -37,6 +44,7 @@ var MediaConnectionAwaiter = exports.default = /*#__PURE__*/function () {
|
|
|
37
44
|
this.defer = new _common.Defer();
|
|
38
45
|
this.retried = false;
|
|
39
46
|
this.iceConnected = false;
|
|
47
|
+
this.correlationId = correlationId;
|
|
40
48
|
this.onTimeoutCallback = this.onTimeout.bind(this);
|
|
41
49
|
this.peerConnectionStateCallback = this.peerConnectionStateHandler.bind(this);
|
|
42
50
|
this.iceConnectionStateCallback = this.iceConnectionStateHandler.bind(this);
|
|
@@ -48,7 +56,7 @@ var MediaConnectionAwaiter = exports.default = /*#__PURE__*/function () {
|
|
|
48
56
|
*
|
|
49
57
|
* @returns {boolean}
|
|
50
58
|
*/
|
|
51
|
-
(0, _createClass2.default)(MediaConnectionAwaiter, [{
|
|
59
|
+
return (0, _createClass2.default)(MediaConnectionAwaiter, [{
|
|
52
60
|
key: "isConnected",
|
|
53
61
|
value: function isConnected() {
|
|
54
62
|
return this.webrtcMediaConnection.getConnectionState() === _internalMediaCore.ConnectionState.Connected;
|
|
@@ -163,11 +171,56 @@ var MediaConnectionAwaiter = exports.default = /*#__PURE__*/function () {
|
|
|
163
171
|
this.timer = setTimeout(this.onTimeoutCallback, _constants.ICE_AND_DTLS_CONNECTION_TIMEOUT);
|
|
164
172
|
}
|
|
165
173
|
|
|
174
|
+
/**
|
|
175
|
+
* sends a metric with some additional info that might help debugging
|
|
176
|
+
* issues where browser doesn't update the RTCPeerConnection's iceConnectionState or connectionState
|
|
177
|
+
*
|
|
178
|
+
* @returns {void}
|
|
179
|
+
*/
|
|
180
|
+
}, {
|
|
181
|
+
key: "sendMetric",
|
|
182
|
+
value: (function () {
|
|
183
|
+
var _sendMetric = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee() {
|
|
184
|
+
var _transportReports$, _transportReports$2, _transportReports$3, _transportReports$4, _this$webrtcMediaConn, _this$webrtcMediaConn2;
|
|
185
|
+
var stats, transportReports;
|
|
186
|
+
return _regenerator.default.wrap(function (_context) {
|
|
187
|
+
while (1) switch (_context.prev = _context.next) {
|
|
188
|
+
case 0:
|
|
189
|
+
_context.next = 1;
|
|
190
|
+
return this.webrtcMediaConnection.getStats();
|
|
191
|
+
case 1:
|
|
192
|
+
stats = _context.sent;
|
|
193
|
+
// in theory we can end up with more than one transport report in the stats,
|
|
194
|
+
// but for the purpose of this metric it's fine to just use the first one
|
|
195
|
+
transportReports = (0, _from.default)(stats.values().filter(function (report) {
|
|
196
|
+
return report.type === 'transport';
|
|
197
|
+
}));
|
|
198
|
+
_metrics.default.sendBehavioralMetric(_constants2.default.MEDIA_STILL_NOT_CONNECTED, {
|
|
199
|
+
correlation_id: this.correlationId,
|
|
200
|
+
numTransports: transportReports.length,
|
|
201
|
+
dtlsState: (_transportReports$ = transportReports[0]) === null || _transportReports$ === void 0 ? void 0 : _transportReports$.dtlsState,
|
|
202
|
+
iceState: (_transportReports$2 = transportReports[0]) === null || _transportReports$2 === void 0 ? void 0 : _transportReports$2.iceState,
|
|
203
|
+
packetsSent: (_transportReports$3 = transportReports[0]) === null || _transportReports$3 === void 0 ? void 0 : _transportReports$3.packetsSent,
|
|
204
|
+
packetsReceived: (_transportReports$4 = transportReports[0]) === null || _transportReports$4 === void 0 ? void 0 : _transportReports$4.packetsReceived,
|
|
205
|
+
dataChannelState: (_this$webrtcMediaConn = this.webrtcMediaConnection.multistreamConnection) === null || _this$webrtcMediaConn === void 0 ? void 0 : (_this$webrtcMediaConn2 = _this$webrtcMediaConn.dataChannel) === null || _this$webrtcMediaConn2 === void 0 ? void 0 : _this$webrtcMediaConn2.readyState
|
|
206
|
+
});
|
|
207
|
+
case 2:
|
|
208
|
+
case "end":
|
|
209
|
+
return _context.stop();
|
|
210
|
+
}
|
|
211
|
+
}, _callee, this);
|
|
212
|
+
}));
|
|
213
|
+
function sendMetric() {
|
|
214
|
+
return _sendMetric.apply(this, arguments);
|
|
215
|
+
}
|
|
216
|
+
return sendMetric;
|
|
217
|
+
}()
|
|
166
218
|
/**
|
|
167
219
|
* Function called when the timeout is reached.
|
|
168
220
|
*
|
|
169
221
|
* @returns {void}
|
|
170
222
|
*/
|
|
223
|
+
)
|
|
171
224
|
}, {
|
|
172
225
|
key: "onTimeout",
|
|
173
226
|
value: function onTimeout() {
|
|
@@ -176,6 +229,7 @@ var MediaConnectionAwaiter = exports.default = /*#__PURE__*/function () {
|
|
|
176
229
|
this.defer.resolve();
|
|
177
230
|
return;
|
|
178
231
|
}
|
|
232
|
+
this.sendMetric();
|
|
179
233
|
if (!this.isIceGatheringCompleted()) {
|
|
180
234
|
if (!this.retried) {
|
|
181
235
|
_loggerProxy.default.logger.warn('Media:MediaConnectionAwaiter#onTimeout --> ICE gathering did not complete within the timeout for the first time, retrying once');
|
|
@@ -205,8 +259,10 @@ var MediaConnectionAwaiter = exports.default = /*#__PURE__*/function () {
|
|
|
205
259
|
key: "waitForMediaConnectionConnected",
|
|
206
260
|
value: function waitForMediaConnectionConnected() {
|
|
207
261
|
if (this.isConnected()) {
|
|
262
|
+
_loggerProxy.default.logger.log('Media:MediaConnectionAwaiter#waitForMediaConnectionConnected --> Already connected');
|
|
208
263
|
return _promise.default.resolve();
|
|
209
264
|
}
|
|
265
|
+
_loggerProxy.default.logger.log('Media:MediaConnectionAwaiter#waitForMediaConnectionConnected --> Waiting for media connection to be connected');
|
|
210
266
|
this.webrtcMediaConnection.on(_internalMediaCore.MediaConnectionEventNames.PEER_CONNECTION_STATE_CHANGED, this.peerConnectionStateCallback);
|
|
211
267
|
this.webrtcMediaConnection.on(_internalMediaCore.MediaConnectionEventNames.ICE_CONNECTION_STATE_CHANGED, this.iceConnectionStateCallback);
|
|
212
268
|
this.webrtcMediaConnection.on(_internalMediaCore.MediaConnectionEventNames.ICE_GATHERING_STATE_CHANGED, this.iceGatheringStateCallback);
|
|
@@ -214,6 +270,5 @@ var MediaConnectionAwaiter = exports.default = /*#__PURE__*/function () {
|
|
|
214
270
|
return this.defer.promise;
|
|
215
271
|
}
|
|
216
272
|
}]);
|
|
217
|
-
return MediaConnectionAwaiter;
|
|
218
273
|
}();
|
|
219
274
|
//# sourceMappingURL=MediaConnectionAwaiter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_common","require","_internalMediaCore","_loggerProxy","_interopRequireDefault","_constants","MediaConnectionAwaiter","exports","default","_ref","webrtcMediaConnection","_classCallCheck2","_defineProperty2","defer","Defer","retried","iceConnected","onTimeoutCallback","onTimeout","bind","peerConnectionStateCallback","peerConnectionStateHandler","iceConnectionStateCallback","iceConnectionStateHandler","iceGatheringStateCallback","iceGatheringStateHandler","_createClass2","key","value","isConnected","getConnectionState","ConnectionState","Connected","isFailed","Failed","isIceGatheringCompleted","getIceGatheringState","clearCallbacks","off","MediaConnectionEventNames","ICE_GATHERING_STATE_CHANGED","PEER_CONNECTION_STATE_CHANGED","ICE_CONNECTION_STATE_CHANGED","connectionStateChange","LoggerProxy","logger","log","concat","warn","reject","clearTimeout","timer","resolve","peerConnectionState","getPeerConnectionState","iceConnectionState","getIceConnectionState","iceGatheringState","setTimeout","ICE_AND_DTLS_CONNECTION_TIMEOUT","waitForMediaConnectionConnected","_promise","on","promise"],"sources":["MediaConnectionAwaiter.ts"],"sourcesContent":["import {Defer} from '@webex/common';\nimport {ConnectionState, MediaConnectionEventNames} from '@webex/internal-media-core';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {ICE_AND_DTLS_CONNECTION_TIMEOUT} from '../constants';\n\nexport interface MediaConnectionAwaiterProps {\n webrtcMediaConnection: any;\n}\n\n/**\n * @class MediaConnectionAwaiter\n */\nexport default class MediaConnectionAwaiter {\n private webrtcMediaConnection: any;\n private timer: any;\n private defer: Defer;\n private retried: boolean;\n private iceConnected: boolean;\n private onTimeoutCallback: () => void;\n private peerConnectionStateCallback: () => void;\n private iceConnectionStateCallback: () => void;\n private iceGatheringStateCallback: () => void;\n\n /**\n * @param {MediaConnectionAwaiterProps} mediaConnectionAwaiterProps\n */\n constructor({webrtcMediaConnection}: MediaConnectionAwaiterProps) {\n this.webrtcMediaConnection = webrtcMediaConnection;\n this.defer = new Defer();\n this.retried = false;\n this.iceConnected = false;\n this.onTimeoutCallback = this.onTimeout.bind(this);\n this.peerConnectionStateCallback = this.peerConnectionStateHandler.bind(this);\n this.iceConnectionStateCallback = this.iceConnectionStateHandler.bind(this);\n this.iceGatheringStateCallback = this.iceGatheringStateHandler.bind(this);\n }\n\n /**\n * Returns true if the connection is connected, false otherwise.\n *\n * @returns {boolean}\n */\n private isConnected(): boolean {\n return this.webrtcMediaConnection.getConnectionState() === ConnectionState.Connected;\n }\n\n /**\n * Returns true if the connection is in an unrecoverable \"failed\" state\n *\n * @returns {boolean}\n */\n private isFailed(): boolean {\n return this.webrtcMediaConnection.getConnectionState() === ConnectionState.Failed;\n }\n\n /**\n * Returns true if the ICE Gathering is completed, false otherwise.\n *\n * @returns {boolean}\n */\n private isIceGatheringCompleted(): boolean {\n return this.webrtcMediaConnection.getIceGatheringState() === 'complete';\n }\n\n /**\n * Clears the callbacks.\n *\n * @returns {void}\n */\n private clearCallbacks(): void {\n this.webrtcMediaConnection.off(\n MediaConnectionEventNames.ICE_GATHERING_STATE_CHANGED,\n this.iceGatheringStateCallback\n );\n this.webrtcMediaConnection.off(\n MediaConnectionEventNames.PEER_CONNECTION_STATE_CHANGED,\n this.peerConnectionStateCallback\n );\n this.webrtcMediaConnection.off(\n MediaConnectionEventNames.ICE_CONNECTION_STATE_CHANGED,\n this.iceConnectionStateCallback\n );\n }\n\n /**\n * On connection state change.\n *\n * @returns {void}\n */\n connectionStateChange(): void {\n LoggerProxy.logger.log(\n `Media:MediaConnectionAwaiter#connectionStateChange --> connection state: ${this.webrtcMediaConnection.getConnectionState()}`\n );\n\n if (this.isFailed()) {\n LoggerProxy.logger.warn(\n 'Media:MediaConnectionAwaiter#connectionStateChange --> ICE failed, rejecting'\n );\n this.clearCallbacks();\n\n this.defer.reject({\n iceConnected: this.iceConnected,\n });\n }\n\n if (!this.isConnected()) {\n return;\n }\n\n clearTimeout(this.timer);\n\n this.clearCallbacks();\n\n LoggerProxy.logger.warn('Media:MediaConnectionAwaiter#connectionStateChange --> Resolving');\n\n this.defer.resolve();\n }\n\n /**\n * Listener for peer connection state change.\n *\n * @returns {void}\n */\n peerConnectionStateHandler(): void {\n const peerConnectionState = this.webrtcMediaConnection.getPeerConnectionState();\n\n LoggerProxy.logger.log(\n `Media:MediaConnectionAwaiter#peerConnectionStateHandler --> Peer connection state change -> ${peerConnectionState}`\n );\n\n this.connectionStateChange();\n }\n\n /**\n * Listener for ICE connection state change.\n *\n * @returns {void}\n */\n iceConnectionStateHandler(): void {\n const iceConnectionState = this.webrtcMediaConnection.getIceConnectionState();\n\n LoggerProxy.logger.log(\n `Media:MediaConnectionAwaiter#iceConnectionStateHandler --> ICE connection state change -> ${iceConnectionState}`\n );\n\n if (iceConnectionState === 'connected' && !this.iceConnected) {\n this.iceConnected = true;\n }\n\n this.connectionStateChange();\n }\n\n /**\n * Listener for ICE gathering state change.\n *\n * @returns {void}\n */\n iceGatheringStateHandler(): void {\n const iceGatheringState = this.webrtcMediaConnection.getIceGatheringState();\n\n LoggerProxy.logger.log(\n `Media:MediaConnectionAwaiter#iceGatheringStateHandler --> ICE gathering state change -> ${iceGatheringState}`\n );\n\n if (!this.isIceGatheringCompleted()) {\n return;\n }\n\n if (this.isConnected()) {\n return;\n }\n\n clearTimeout(this.timer);\n\n this.timer = setTimeout(this.onTimeoutCallback, ICE_AND_DTLS_CONNECTION_TIMEOUT);\n }\n\n /**\n * Function called when the timeout is reached.\n *\n * @returns {void}\n */\n onTimeout(): void {\n if (this.isConnected()) {\n this.clearCallbacks();\n\n this.defer.resolve();\n\n return;\n }\n\n if (!this.isIceGatheringCompleted()) {\n if (!this.retried) {\n LoggerProxy.logger.warn(\n 'Media:MediaConnectionAwaiter#onTimeout --> ICE gathering did not complete within the timeout for the first time, retrying once'\n );\n\n // retry once if ICE gathering is not completed\n this.retried = true;\n clearTimeout(this.timer);\n this.timer = setTimeout(this.onTimeoutCallback, ICE_AND_DTLS_CONNECTION_TIMEOUT);\n\n return;\n }\n\n LoggerProxy.logger.warn(\n 'Media:MediaConnectionAwaiter#onTimeout --> ICE gathering did not complete within the timeout for the second time, rejecting'\n );\n } else {\n LoggerProxy.logger.warn(\n 'Media:MediaConnectionAwaiter#onTimeout --> ICE gathering completed, but connection state is not connected, rejecting'\n );\n }\n\n this.clearCallbacks();\n\n this.defer.reject({\n iceConnected: this.iceConnected,\n });\n }\n\n /**\n * Waits for the webrtc media connection to be connected.\n *\n * @returns {Promise}\n */\n waitForMediaConnectionConnected(): Promise<void> {\n if (this.isConnected()) {\n return Promise.resolve();\n }\n\n this.webrtcMediaConnection.on(\n MediaConnectionEventNames.PEER_CONNECTION_STATE_CHANGED,\n this.peerConnectionStateCallback\n );\n\n this.webrtcMediaConnection.on(\n MediaConnectionEventNames.ICE_CONNECTION_STATE_CHANGED,\n this.iceConnectionStateCallback\n );\n\n this.webrtcMediaConnection.on(\n MediaConnectionEventNames.ICE_GATHERING_STATE_CHANGED,\n this.iceGatheringStateCallback\n );\n\n this.timer = setTimeout(this.onTimeoutCallback, ICE_AND_DTLS_CONNECTION_TIMEOUT);\n\n return this.defer.promise;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_common","require","_internalMediaCore","_loggerProxy","_interopRequireDefault","_constants","_constants2","_metrics","MediaConnectionAwaiter","exports","default","_ref","webrtcMediaConnection","correlationId","_classCallCheck2","_defineProperty2","defer","Defer","retried","iceConnected","onTimeoutCallback","onTimeout","bind","peerConnectionStateCallback","peerConnectionStateHandler","iceConnectionStateCallback","iceConnectionStateHandler","iceGatheringStateCallback","iceGatheringStateHandler","_createClass2","key","value","isConnected","getConnectionState","ConnectionState","Connected","isFailed","Failed","isIceGatheringCompleted","getIceGatheringState","clearCallbacks","off","MediaConnectionEventNames","ICE_GATHERING_STATE_CHANGED","PEER_CONNECTION_STATE_CHANGED","ICE_CONNECTION_STATE_CHANGED","connectionStateChange","LoggerProxy","logger","log","concat","warn","reject","clearTimeout","timer","resolve","peerConnectionState","getPeerConnectionState","iceConnectionState","getIceConnectionState","iceGatheringState","setTimeout","ICE_AND_DTLS_CONNECTION_TIMEOUT","_sendMetric","_asyncToGenerator2","_regenerator","mark","_callee","_transportReports$","_transportReports$2","_transportReports$3","_transportReports$4","_this$webrtcMediaConn","_this$webrtcMediaConn2","stats","transportReports","wrap","_context","prev","next","getStats","sent","_from","values","filter","report","type","Metrics","sendBehavioralMetric","BEHAVIORAL_METRICS","MEDIA_STILL_NOT_CONNECTED","correlation_id","numTransports","length","dtlsState","iceState","packetsSent","packetsReceived","dataChannelState","multistreamConnection","dataChannel","readyState","stop","sendMetric","apply","arguments","waitForMediaConnectionConnected","_promise","on","promise"],"sources":["MediaConnectionAwaiter.ts"],"sourcesContent":["import {Defer} from '@webex/common';\nimport {ConnectionState, MediaConnectionEventNames} from '@webex/internal-media-core';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {ICE_AND_DTLS_CONNECTION_TIMEOUT} from '../constants';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport Metrics from '../metrics';\n\nexport interface MediaConnectionAwaiterProps {\n webrtcMediaConnection: any;\n correlationId: string;\n}\n\n/**\n * @class MediaConnectionAwaiter\n */\nexport default class MediaConnectionAwaiter {\n private webrtcMediaConnection: any;\n private timer: any;\n private defer: Defer;\n private retried: boolean;\n private iceConnected: boolean;\n private correlationId: string;\n private onTimeoutCallback: () => void;\n private peerConnectionStateCallback: () => void;\n private iceConnectionStateCallback: () => void;\n private iceGatheringStateCallback: () => void;\n\n /**\n * @param {MediaConnectionAwaiterProps} mediaConnectionAwaiterProps\n */\n constructor({webrtcMediaConnection, correlationId}: MediaConnectionAwaiterProps) {\n this.webrtcMediaConnection = webrtcMediaConnection;\n this.defer = new Defer();\n this.retried = false;\n this.iceConnected = false;\n this.correlationId = correlationId;\n this.onTimeoutCallback = this.onTimeout.bind(this);\n this.peerConnectionStateCallback = this.peerConnectionStateHandler.bind(this);\n this.iceConnectionStateCallback = this.iceConnectionStateHandler.bind(this);\n this.iceGatheringStateCallback = this.iceGatheringStateHandler.bind(this);\n }\n\n /**\n * Returns true if the connection is connected, false otherwise.\n *\n * @returns {boolean}\n */\n private isConnected(): boolean {\n return this.webrtcMediaConnection.getConnectionState() === ConnectionState.Connected;\n }\n\n /**\n * Returns true if the connection is in an unrecoverable \"failed\" state\n *\n * @returns {boolean}\n */\n private isFailed(): boolean {\n return this.webrtcMediaConnection.getConnectionState() === ConnectionState.Failed;\n }\n\n /**\n * Returns true if the ICE Gathering is completed, false otherwise.\n *\n * @returns {boolean}\n */\n private isIceGatheringCompleted(): boolean {\n return this.webrtcMediaConnection.getIceGatheringState() === 'complete';\n }\n\n /**\n * Clears the callbacks.\n *\n * @returns {void}\n */\n private clearCallbacks(): void {\n this.webrtcMediaConnection.off(\n MediaConnectionEventNames.ICE_GATHERING_STATE_CHANGED,\n this.iceGatheringStateCallback\n );\n this.webrtcMediaConnection.off(\n MediaConnectionEventNames.PEER_CONNECTION_STATE_CHANGED,\n this.peerConnectionStateCallback\n );\n this.webrtcMediaConnection.off(\n MediaConnectionEventNames.ICE_CONNECTION_STATE_CHANGED,\n this.iceConnectionStateCallback\n );\n }\n\n /**\n * On connection state change.\n *\n * @returns {void}\n */\n connectionStateChange(): void {\n LoggerProxy.logger.log(\n `Media:MediaConnectionAwaiter#connectionStateChange --> connection state: ${this.webrtcMediaConnection.getConnectionState()}`\n );\n\n if (this.isFailed()) {\n LoggerProxy.logger.warn(\n 'Media:MediaConnectionAwaiter#connectionStateChange --> ICE failed, rejecting'\n );\n this.clearCallbacks();\n\n this.defer.reject({\n iceConnected: this.iceConnected,\n });\n }\n\n if (!this.isConnected()) {\n return;\n }\n\n clearTimeout(this.timer);\n\n this.clearCallbacks();\n\n LoggerProxy.logger.warn('Media:MediaConnectionAwaiter#connectionStateChange --> Resolving');\n\n this.defer.resolve();\n }\n\n /**\n * Listener for peer connection state change.\n *\n * @returns {void}\n */\n peerConnectionStateHandler(): void {\n const peerConnectionState = this.webrtcMediaConnection.getPeerConnectionState();\n\n LoggerProxy.logger.log(\n `Media:MediaConnectionAwaiter#peerConnectionStateHandler --> Peer connection state change -> ${peerConnectionState}`\n );\n\n this.connectionStateChange();\n }\n\n /**\n * Listener for ICE connection state change.\n *\n * @returns {void}\n */\n iceConnectionStateHandler(): void {\n const iceConnectionState = this.webrtcMediaConnection.getIceConnectionState();\n\n LoggerProxy.logger.log(\n `Media:MediaConnectionAwaiter#iceConnectionStateHandler --> ICE connection state change -> ${iceConnectionState}`\n );\n\n if (iceConnectionState === 'connected' && !this.iceConnected) {\n this.iceConnected = true;\n }\n\n this.connectionStateChange();\n }\n\n /**\n * Listener for ICE gathering state change.\n *\n * @returns {void}\n */\n iceGatheringStateHandler(): void {\n const iceGatheringState = this.webrtcMediaConnection.getIceGatheringState();\n\n LoggerProxy.logger.log(\n `Media:MediaConnectionAwaiter#iceGatheringStateHandler --> ICE gathering state change -> ${iceGatheringState}`\n );\n\n if (!this.isIceGatheringCompleted()) {\n return;\n }\n\n if (this.isConnected()) {\n return;\n }\n\n clearTimeout(this.timer);\n\n this.timer = setTimeout(this.onTimeoutCallback, ICE_AND_DTLS_CONNECTION_TIMEOUT);\n }\n\n /**\n * sends a metric with some additional info that might help debugging\n * issues where browser doesn't update the RTCPeerConnection's iceConnectionState or connectionState\n *\n * @returns {void}\n */\n async sendMetric() {\n const stats = await this.webrtcMediaConnection.getStats();\n\n // in theory we can end up with more than one transport report in the stats,\n // but for the purpose of this metric it's fine to just use the first one\n const transportReports = Array.from(\n stats.values().filter((report) => report.type === 'transport')\n ) as Record<string, number | string>[];\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEDIA_STILL_NOT_CONNECTED, {\n correlation_id: this.correlationId,\n numTransports: transportReports.length,\n dtlsState: transportReports[0]?.dtlsState,\n iceState: transportReports[0]?.iceState,\n packetsSent: transportReports[0]?.packetsSent,\n packetsReceived: transportReports[0]?.packetsReceived,\n dataChannelState: this.webrtcMediaConnection.multistreamConnection?.dataChannel?.readyState,\n });\n }\n\n /**\n * Function called when the timeout is reached.\n *\n * @returns {void}\n */\n onTimeout(): void {\n if (this.isConnected()) {\n this.clearCallbacks();\n\n this.defer.resolve();\n\n return;\n }\n\n this.sendMetric();\n\n if (!this.isIceGatheringCompleted()) {\n if (!this.retried) {\n LoggerProxy.logger.warn(\n 'Media:MediaConnectionAwaiter#onTimeout --> ICE gathering did not complete within the timeout for the first time, retrying once'\n );\n\n // retry once if ICE gathering is not completed\n this.retried = true;\n clearTimeout(this.timer);\n this.timer = setTimeout(this.onTimeoutCallback, ICE_AND_DTLS_CONNECTION_TIMEOUT);\n\n return;\n }\n\n LoggerProxy.logger.warn(\n 'Media:MediaConnectionAwaiter#onTimeout --> ICE gathering did not complete within the timeout for the second time, rejecting'\n );\n } else {\n LoggerProxy.logger.warn(\n 'Media:MediaConnectionAwaiter#onTimeout --> ICE gathering completed, but connection state is not connected, rejecting'\n );\n }\n\n this.clearCallbacks();\n\n this.defer.reject({\n iceConnected: this.iceConnected,\n });\n }\n\n /**\n * Waits for the webrtc media connection to be connected.\n *\n * @returns {Promise}\n */\n waitForMediaConnectionConnected(): Promise<void> {\n if (this.isConnected()) {\n LoggerProxy.logger.log(\n 'Media:MediaConnectionAwaiter#waitForMediaConnectionConnected --> Already connected'\n );\n\n return Promise.resolve();\n }\n LoggerProxy.logger.log(\n 'Media:MediaConnectionAwaiter#waitForMediaConnectionConnected --> Waiting for media connection to be connected'\n );\n\n this.webrtcMediaConnection.on(\n MediaConnectionEventNames.PEER_CONNECTION_STATE_CHANGED,\n this.peerConnectionStateCallback\n );\n\n this.webrtcMediaConnection.on(\n MediaConnectionEventNames.ICE_CONNECTION_STATE_CHANGED,\n this.iceConnectionStateCallback\n );\n\n this.webrtcMediaConnection.on(\n MediaConnectionEventNames.ICE_GATHERING_STATE_CHANGED,\n this.iceGatheringStateCallback\n );\n\n this.timer = setTimeout(this.onTimeoutCallback, ICE_AND_DTLS_CONNECTION_TIMEOUT);\n\n return this.defer.promise;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
package/dist/media/index.js
CHANGED
|
@@ -148,6 +148,11 @@ Media.createMediaConnection = function (isMultistream, debugId, meetingId, optio
|
|
|
148
148
|
config.doFullIce = true;
|
|
149
149
|
config.stopIceGatheringAfterFirstRelayCandidate = stopIceGatheringAfterFirstRelayCandidate;
|
|
150
150
|
}
|
|
151
|
+
if (_webCapabilities.BrowserInfo.isEdge() || _webCapabilities.BrowserInfo.isChrome()) {
|
|
152
|
+
// we need this for getting inbound audio metadata
|
|
153
|
+
// but the audioLevel that we use is only available on Chromium based browsers
|
|
154
|
+
config.enableInboundAudioLevelMonitoring = true;
|
|
155
|
+
}
|
|
151
156
|
return new _internalMediaCore.MultistreamRoapMediaConnection(config, meetingId, /* the rtc metrics objects callbacks */
|
|
152
157
|
function (data) {
|
|
153
158
|
return rtcMetrics === null || rtcMetrics === void 0 ? void 0 : rtcMetrics.addMetrics(data);
|
|
@@ -191,7 +196,6 @@ Media.createMediaConnection = function (isMultistream, debugId, meetingId, optio
|
|
|
191
196
|
screenShareVideo: shareVideoStream === null || shareVideoStream === void 0 ? void 0 : (_shareVideoStream$out = shareVideoStream.outputStream) === null || _shareVideoStream$out === void 0 ? void 0 : _shareVideoStream$out.getTracks()[0],
|
|
192
197
|
screenShareAudio: shareAudioStream === null || shareAudioStream === void 0 ? void 0 : (_shareAudioStream$out = shareAudioStream.outputStream) === null || _shareAudioStream$out === void 0 ? void 0 : _shareAudioStream$out.getTracks()[0] // TODO: add type for screenShareAudio in internal-media-core SPARK-446923
|
|
193
198
|
},
|
|
194
|
-
|
|
195
199
|
direction: {
|
|
196
200
|
audio: Media.getDirection(false, mediaDirection.receiveAudio, mediaDirection.sendAudio),
|
|
197
201
|
video: Media.getDirection(false, mediaDirection.receiveVideo, mediaDirection.sendVideo),
|
|
@@ -321,7 +325,6 @@ Media.getMedia = function (audio, video, config) {
|
|
|
321
325
|
} : false,
|
|
322
326
|
fake: process.env.NODE_ENV === 'test' // Special case to get fake media for Firefox browser for testing
|
|
323
327
|
};
|
|
324
|
-
|
|
325
328
|
return navigator.mediaDevices.getUserMedia(mediaConfig).catch(function (err) {
|
|
326
329
|
var logPath = 'Media:index#getMedia --> navigator.mediaDevices.getUserMedia';
|
|
327
330
|
_loggerProxy.default.logger.error("".concat(logPath, " failed - ").concat(err, " (").concat(err.constraint, ")"));
|