@webex/plugin-meetings 3.12.0-next.8 → 3.12.0-task-refactor.1
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/index.js +5 -14
- package/dist/annotation/index.js.map +1 -1
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/config.js +2 -8
- package/dist/config.js.map +1 -1
- package/dist/constants.js +6 -29
- package/dist/constants.js.map +1 -1
- package/dist/hashTree/hashTreeParser.js +29 -1563
- package/dist/hashTree/hashTreeParser.js.map +1 -1
- package/dist/hashTree/types.js +3 -13
- package/dist/hashTree/types.js.map +1 -1
- package/dist/index.js +2 -11
- package/dist/index.js.map +1 -1
- package/dist/interceptors/index.js +0 -7
- package/dist/interceptors/index.js.map +1 -1
- package/dist/interceptors/locusRouteToken.js +5 -27
- package/dist/interceptors/locusRouteToken.js.map +1 -1
- package/dist/interpretation/index.js +2 -2
- package/dist/interpretation/index.js.map +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/locus-info/controlsUtils.js +3 -7
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/index.js +247 -642
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/selfUtils.js +0 -1
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/locus-info/types.js.map +1 -1
- package/dist/media/MediaConnectionAwaiter.js +1 -57
- package/dist/media/MediaConnectionAwaiter.js.map +1 -1
- package/dist/media/properties.js +2 -4
- package/dist/media/properties.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +1 -7
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +1036 -1481
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/request.js +0 -50
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/request.type.js.map +1 -1
- package/dist/meeting/util.js +3 -133
- package/dist/meeting/util.js.map +1 -1
- package/dist/meetings/index.js +59 -142
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/util.js +7 -11
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +0 -10
- package/dist/member/index.js.map +1 -1
- package/dist/member/util.js +0 -10
- package/dist/member/util.js.map +1 -1
- package/dist/metrics/constants.js +1 -7
- package/dist/metrics/constants.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +60 -9
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +0 -11
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/multistream/sendSlotManager.js +2 -116
- package/dist/multistream/sendSlotManager.js.map +1 -1
- package/dist/reachability/clusterReachability.js +18 -171
- package/dist/reachability/clusterReachability.js.map +1 -1
- package/dist/reachability/index.js +11 -21
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/reachabilityPeerConnection.js +1 -1
- package/dist/reachability/reachabilityPeerConnection.js.map +1 -1
- package/dist/reactions/reactions.type.js.map +1 -1
- package/dist/reconnection-manager/index.js +1 -0
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/types/common/browser-detection.d.ts +0 -1
- package/dist/types/common/events/events-scope.d.ts +0 -1
- package/dist/types/common/events/events.d.ts +0 -1
- package/dist/types/config.d.ts +0 -5
- package/dist/types/constants.d.ts +1 -24
- package/dist/types/hashTree/hashTreeParser.d.ts +11 -260
- package/dist/types/hashTree/types.d.ts +0 -20
- package/dist/types/index.d.ts +0 -1
- package/dist/types/interceptors/index.d.ts +1 -2
- package/dist/types/interceptors/locusRouteToken.d.ts +0 -2
- package/dist/types/locus-info/index.d.ts +47 -68
- package/dist/types/locus-info/types.d.ts +12 -28
- package/dist/types/media/MediaConnectionAwaiter.d.ts +1 -10
- package/dist/types/media/properties.d.ts +1 -2
- package/dist/types/meeting/in-meeting-actions.d.ts +0 -6
- package/dist/types/meeting/index.d.ts +7 -86
- package/dist/types/meeting/request.d.ts +1 -16
- package/dist/types/meeting/request.type.d.ts +0 -5
- package/dist/types/meeting/util.d.ts +0 -31
- package/dist/types/meeting-info/util.d.ts +0 -1
- package/dist/types/meeting-info/utilv2.d.ts +0 -1
- package/dist/types/meetings/index.d.ts +2 -4
- package/dist/types/member/index.d.ts +0 -1
- package/dist/types/member/types.d.ts +4 -4
- package/dist/types/member/util.d.ts +0 -5
- package/dist/types/metrics/constants.d.ts +0 -6
- package/dist/types/multistream/mediaRequestManager.d.ts +23 -0
- package/dist/types/multistream/sendSlotManager.d.ts +1 -23
- package/dist/types/reachability/clusterReachability.d.ts +3 -30
- package/dist/types/reactions/reactions.type.d.ts +0 -1
- package/dist/types/recording-controller/util.d.ts +5 -5
- package/dist/types/roap/index.d.ts +1 -1
- package/dist/webinar/index.js +163 -438
- package/dist/webinar/index.js.map +1 -1
- package/package.json +24 -26
- package/src/annotation/index.ts +7 -27
- package/src/config.ts +0 -5
- package/src/constants.ts +1 -30
- package/src/hashTree/hashTreeParser.ts +25 -1523
- package/src/hashTree/types.ts +1 -24
- package/src/index.ts +1 -8
- package/src/interceptors/index.ts +1 -2
- package/src/interceptors/locusRouteToken.ts +5 -22
- package/src/interpretation/index.ts +2 -2
- package/src/locus-info/controlsUtils.ts +0 -17
- package/src/locus-info/index.ts +213 -707
- package/src/locus-info/selfUtils.ts +0 -1
- package/src/locus-info/types.ts +12 -27
- package/src/media/MediaConnectionAwaiter.ts +1 -41
- package/src/media/properties.ts +1 -3
- package/src/meeting/in-meeting-actions.ts +0 -12
- package/src/meeting/index.ts +84 -461
- package/src/meeting/request.ts +0 -42
- package/src/meeting/request.type.ts +0 -6
- package/src/meeting/util.ts +2 -160
- package/src/meetings/index.ts +60 -180
- package/src/meetings/util.ts +9 -10
- package/src/member/index.ts +0 -10
- package/src/member/util.ts +0 -12
- package/src/metrics/constants.ts +0 -7
- package/src/multistream/mediaRequestManager.ts +54 -4
- package/src/multistream/remoteMediaManager.ts +0 -13
- package/src/multistream/sendSlotManager.ts +3 -97
- package/src/reachability/clusterReachability.ts +27 -153
- package/src/reachability/index.ts +1 -15
- package/src/reachability/reachabilityPeerConnection.ts +1 -3
- package/src/reactions/reactions.type.ts +0 -1
- package/src/reconnection-manager/index.ts +1 -0
- package/src/webinar/index.ts +6 -265
- package/test/unit/spec/annotation/index.ts +7 -69
- package/test/unit/spec/interceptors/locusRouteToken.ts +0 -44
- package/test/unit/spec/locus-info/controlsUtils.js +1 -56
- package/test/unit/spec/locus-info/index.js +90 -1457
- package/test/unit/spec/media/MediaConnectionAwaiter.ts +1 -41
- package/test/unit/spec/media/properties.ts +3 -12
- package/test/unit/spec/meeting/in-meeting-actions.ts +2 -8
- package/test/unit/spec/meeting/index.js +128 -981
- package/test/unit/spec/meeting/request.js +0 -70
- package/test/unit/spec/meeting/utils.js +26 -438
- package/test/unit/spec/meetings/index.js +33 -845
- package/test/unit/spec/meetings/utils.js +1 -51
- package/test/unit/spec/member/index.js +4 -28
- package/test/unit/spec/member/util.js +27 -65
- package/test/unit/spec/multistream/mediaRequestManager.ts +85 -2
- package/test/unit/spec/multistream/remoteMediaManager.ts +0 -30
- package/test/unit/spec/multistream/sendSlotManager.ts +36 -135
- package/test/unit/spec/reachability/clusterReachability.ts +1 -125
- package/test/unit/spec/reachability/index.ts +3 -26
- package/test/unit/spec/reconnection-manager/index.js +8 -4
- package/test/unit/spec/webinar/index.ts +37 -534
- package/dist/aiEnableRequest/index.js +0 -184
- package/dist/aiEnableRequest/index.js.map +0 -1
- package/dist/aiEnableRequest/utils.js +0 -36
- package/dist/aiEnableRequest/utils.js.map +0 -1
- package/dist/hashTree/constants.js +0 -22
- package/dist/hashTree/constants.js.map +0 -1
- package/dist/hashTree/hashTree.js +0 -533
- package/dist/hashTree/hashTree.js.map +0 -1
- package/dist/hashTree/utils.js +0 -69
- package/dist/hashTree/utils.js.map +0 -1
- package/dist/interceptors/constant.js +0 -12
- package/dist/interceptors/constant.js.map +0 -1
- package/dist/interceptors/dataChannelAuthToken.js +0 -290
- package/dist/interceptors/dataChannelAuthToken.js.map +0 -1
- package/dist/interceptors/utils.js +0 -27
- package/dist/interceptors/utils.js.map +0 -1
- package/dist/types/aiEnableRequest/index.d.ts +0 -5
- package/dist/types/aiEnableRequest/utils.d.ts +0 -2
- package/dist/types/hashTree/constants.d.ts +0 -9
- package/dist/types/hashTree/hashTree.d.ts +0 -136
- package/dist/types/hashTree/utils.d.ts +0 -22
- package/dist/types/interceptors/constant.d.ts +0 -5
- package/dist/types/interceptors/dataChannelAuthToken.d.ts +0 -43
- package/dist/types/interceptors/utils.d.ts +0 -1
- package/dist/types/webinar/utils.d.ts +0 -6
- package/dist/webinar/utils.js +0 -25
- package/dist/webinar/utils.js.map +0 -1
- package/src/aiEnableRequest/README.md +0 -84
- package/src/aiEnableRequest/index.ts +0 -170
- package/src/aiEnableRequest/utils.ts +0 -25
- package/src/hashTree/constants.ts +0 -10
- package/src/hashTree/hashTree.ts +0 -480
- package/src/hashTree/utils.ts +0 -62
- package/src/interceptors/constant.ts +0 -6
- package/src/interceptors/dataChannelAuthToken.ts +0 -170
- package/src/interceptors/utils.ts +0 -16
- package/src/webinar/utils.ts +0 -16
- package/test/unit/spec/aiEnableRequest/index.ts +0 -981
- package/test/unit/spec/aiEnableRequest/utils.ts +0 -130
- package/test/unit/spec/hashTree/hashTree.ts +0 -721
- package/test/unit/spec/hashTree/hashTreeParser.ts +0 -3670
- package/test/unit/spec/hashTree/utils.ts +0 -140
- package/test/unit/spec/interceptors/dataChannelAuthToken.ts +0 -210
- package/test/unit/spec/interceptors/utils.ts +0 -75
- package/test/unit/spec/webinar/utils.ts +0 -39
|
@@ -135,7 +135,6 @@ var SelfUtils = {
|
|
|
135
135
|
updates.breakoutsChanged = SelfUtils.breakoutsChanged(previous, current);
|
|
136
136
|
updates.interpretationChanged = SelfUtils.interpretationChanged(previous, current);
|
|
137
137
|
updates.brbChanged = SelfUtils.brbChanged(previous, current);
|
|
138
|
-
updates.selfIdChanged = (previous === null || previous === void 0 ? void 0 : previous.selfId) !== current.selfId;
|
|
139
138
|
return {
|
|
140
139
|
previous: previous,
|
|
141
140
|
current: current,
|
|
@@ -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","selfIdChanged","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 updates.selfIdChanged = previous?.selfId !== current.selfId;\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":[]}
|
|
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":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import {HtMeta} from '../hashTree/types';\n\nexport type
|
|
1
|
+
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import {HtMeta} from '../hashTree/types';\n\nexport type LocusDTO = {\n controls?: any;\n fullState?: {\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 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?: any;\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,10 +6,7 @@ _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"));
|
|
11
9
|
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
12
|
-
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
|
|
13
10
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
|
14
11
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
|
15
12
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
|
@@ -17,8 +14,6 @@ var _common = require("@webex/common");
|
|
|
17
14
|
var _internalMediaCore = require("@webex/internal-media-core");
|
|
18
15
|
var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
|
|
19
16
|
var _constants = require("../constants");
|
|
20
|
-
var _constants2 = _interopRequireDefault(require("../metrics/constants"));
|
|
21
|
-
var _metrics = _interopRequireDefault(require("../metrics"));
|
|
22
17
|
/**
|
|
23
18
|
* @class MediaConnectionAwaiter
|
|
24
19
|
*/
|
|
@@ -27,15 +22,13 @@ var MediaConnectionAwaiter = exports.default = /*#__PURE__*/function () {
|
|
|
27
22
|
* @param {MediaConnectionAwaiterProps} mediaConnectionAwaiterProps
|
|
28
23
|
*/
|
|
29
24
|
function MediaConnectionAwaiter(_ref) {
|
|
30
|
-
var webrtcMediaConnection = _ref.webrtcMediaConnection
|
|
31
|
-
correlationId = _ref.correlationId;
|
|
25
|
+
var webrtcMediaConnection = _ref.webrtcMediaConnection;
|
|
32
26
|
(0, _classCallCheck2.default)(this, MediaConnectionAwaiter);
|
|
33
27
|
(0, _defineProperty2.default)(this, "webrtcMediaConnection", void 0);
|
|
34
28
|
(0, _defineProperty2.default)(this, "timer", void 0);
|
|
35
29
|
(0, _defineProperty2.default)(this, "defer", void 0);
|
|
36
30
|
(0, _defineProperty2.default)(this, "retried", void 0);
|
|
37
31
|
(0, _defineProperty2.default)(this, "iceConnected", void 0);
|
|
38
|
-
(0, _defineProperty2.default)(this, "correlationId", void 0);
|
|
39
32
|
(0, _defineProperty2.default)(this, "onTimeoutCallback", void 0);
|
|
40
33
|
(0, _defineProperty2.default)(this, "peerConnectionStateCallback", void 0);
|
|
41
34
|
(0, _defineProperty2.default)(this, "iceConnectionStateCallback", void 0);
|
|
@@ -44,7 +37,6 @@ var MediaConnectionAwaiter = exports.default = /*#__PURE__*/function () {
|
|
|
44
37
|
this.defer = new _common.Defer();
|
|
45
38
|
this.retried = false;
|
|
46
39
|
this.iceConnected = false;
|
|
47
|
-
this.correlationId = correlationId;
|
|
48
40
|
this.onTimeoutCallback = this.onTimeout.bind(this);
|
|
49
41
|
this.peerConnectionStateCallback = this.peerConnectionStateHandler.bind(this);
|
|
50
42
|
this.iceConnectionStateCallback = this.iceConnectionStateHandler.bind(this);
|
|
@@ -171,56 +163,11 @@ var MediaConnectionAwaiter = exports.default = /*#__PURE__*/function () {
|
|
|
171
163
|
this.timer = setTimeout(this.onTimeoutCallback, _constants.ICE_AND_DTLS_CONNECTION_TIMEOUT);
|
|
172
164
|
}
|
|
173
165
|
|
|
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
|
-
}()
|
|
218
166
|
/**
|
|
219
167
|
* Function called when the timeout is reached.
|
|
220
168
|
*
|
|
221
169
|
* @returns {void}
|
|
222
170
|
*/
|
|
223
|
-
)
|
|
224
171
|
}, {
|
|
225
172
|
key: "onTimeout",
|
|
226
173
|
value: function onTimeout() {
|
|
@@ -229,7 +176,6 @@ var MediaConnectionAwaiter = exports.default = /*#__PURE__*/function () {
|
|
|
229
176
|
this.defer.resolve();
|
|
230
177
|
return;
|
|
231
178
|
}
|
|
232
|
-
this.sendMetric();
|
|
233
179
|
if (!this.isIceGatheringCompleted()) {
|
|
234
180
|
if (!this.retried) {
|
|
235
181
|
_loggerProxy.default.logger.warn('Media:MediaConnectionAwaiter#onTimeout --> ICE gathering did not complete within the timeout for the first time, retrying once');
|
|
@@ -259,10 +205,8 @@ var MediaConnectionAwaiter = exports.default = /*#__PURE__*/function () {
|
|
|
259
205
|
key: "waitForMediaConnectionConnected",
|
|
260
206
|
value: function waitForMediaConnectionConnected() {
|
|
261
207
|
if (this.isConnected()) {
|
|
262
|
-
_loggerProxy.default.logger.log('Media:MediaConnectionAwaiter#waitForMediaConnectionConnected --> Already connected');
|
|
263
208
|
return _promise.default.resolve();
|
|
264
209
|
}
|
|
265
|
-
_loggerProxy.default.logger.log('Media:MediaConnectionAwaiter#waitForMediaConnectionConnected --> Waiting for media connection to be connected');
|
|
266
210
|
this.webrtcMediaConnection.on(_internalMediaCore.MediaConnectionEventNames.PEER_CONNECTION_STATE_CHANGED, this.peerConnectionStateCallback);
|
|
267
211
|
this.webrtcMediaConnection.on(_internalMediaCore.MediaConnectionEventNames.ICE_CONNECTION_STATE_CHANGED, this.iceConnectionStateCallback);
|
|
268
212
|
this.webrtcMediaConnection.on(_internalMediaCore.MediaConnectionEventNames.ICE_GATHERING_STATE_CHANGED, this.iceGatheringStateCallback);
|
|
@@ -1 +1 @@
|
|
|
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":[]}
|
|
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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","ignoreList":[]}
|
package/dist/media/properties.js
CHANGED
|
@@ -228,15 +228,13 @@ var MediaProperties = exports.default = /*#__PURE__*/function () {
|
|
|
228
228
|
/**
|
|
229
229
|
* Waits for the webrtc media connection to be connected.
|
|
230
230
|
*
|
|
231
|
-
* @param {string} correlationId
|
|
232
231
|
* @returns {Promise<void>}
|
|
233
232
|
*/
|
|
234
233
|
}, {
|
|
235
234
|
key: "waitForMediaConnectionConnected",
|
|
236
|
-
value: function waitForMediaConnectionConnected(
|
|
235
|
+
value: function waitForMediaConnectionConnected() {
|
|
237
236
|
var mediaConnectionAwaiter = new _MediaConnectionAwaiter.default({
|
|
238
|
-
webrtcMediaConnection: this.webrtcMediaConnection
|
|
239
|
-
correlationId: correlationId
|
|
237
|
+
webrtcMediaConnection: this.webrtcMediaConnection
|
|
240
238
|
});
|
|
241
239
|
return mediaConnectionAwaiter.waitForMediaConnectionConnected();
|
|
242
240
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_tsSdp","require","_lodash","_metrics","_interopRequireDefault","_constants","_loggerProxy","_MediaConnectionAwaiter","_constants2","_createForOfIteratorHelper","r","e","t","_Symbol","_Symbol$iterator","_Array$isArray","_unsupportedIterableToArray","length","_n","F","s","n","done","value","f","TypeError","o","a","u","call","next","return","_arrayLikeToArray","toString","slice","constructor","name","_Array$from","test","Array","ownKeys","_Object$keys2","_Object$getOwnPropertySymbols","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","MediaProperties","exports","_this","_classCallCheck2","MEETINGS","webrtcMediaConnection","mediaDirection","receiveAudio","receiveVideo","receiveShare","sendAudio","sendVideo","sendShare","videoStream","audioStream","shareVideoStream","shareAudioStream","remoteShareStream","undefined","remoteAudioStream","remoteVideoStream","remoteQualityLevel","QUALITY_LEVELS","HIGH","mediaSettings","videoDeviceId","throttledSendMediaIssueMetric","throttle","eventPayload","Metrics","sendBehavioralMetric","BEHAVIORAL_METRICS","MEDIA_ISSUE_DETECTED","_keys","mediaIssueCounters","key","_createClass2","getVideoDeviceId","setMediaDirection","setMediaSettings","type","values","setMediaPeerConnection","mediaPeerConnection","setLocalVideoStream","setLocalAudioStream","setLocalShareVideoStream","setLocalShareAudioStream","setRemoteQualityLevel","setRemoteShareStream","setRemoteAudioStream","setRemoteVideoStream","setVideoDeviceId","deviceId","unsetPeerConnection","flush","unsetRemoteMedia","unsetRemoteShareStream","unsetRemoteStreams","hasLocalShareStream","waitForMediaConnectionConnected","correlationId","mediaConnectionAwaiter","MediaConnectionAwaiter","getTransportInfo","allStatsReports","transports","report","LoggerProxy","logger","warn","concat","selectedCandidatePairChanges","numTransports","isIPv6","ip","includes","getConnectionIpVersion","selectedCandidatePair","selectedCandidatePairId","find","id","selected","localCandidate","localCandidateId","address","localSdp","localDescription","sdp","parsedSdp","parse","_iterator","avMedia","_step","mediaLine","matchingCandidate","iceInfo","candidates","candidate","port","connectionAddress","err","error","_transports$","getConnectionType","successfulCandidatePairs","_report$state","state","toLowerCase","foundConnectionType","some","pair","connectionType","relayProtocol","toUpperCase","_localCandidate$proto","protocol","candidateType","candidatePairStates","map","_stringify","_getCurrentConnectionInfo","_asyncToGenerator2","_regenerator","mark","_callee","_this2","_this$webrtcMediaConn","_this$webrtcMediaConn2","rtcPeerconnection","ipVersion","_this$getTransportInf","_t","wrap","_context","prev","_promise","resolve","reject","timeout","setTimeout","Error","getStats","then","statsResult","clearTimeout","catch","multistreamConnection","pc","mediaConnection","abrupt","stop","getCurrentConnectionInfo","sendMediaIssueMetric","issueType","issueSubType","count"],"sources":["properties.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\nimport {\n LocalCameraStream,\n LocalMicrophoneStream,\n LocalDisplayStream,\n LocalSystemAudioStream,\n RemoteStream,\n} from '@webex/media-helpers';\n\nimport {parse} from '@webex/ts-sdp';\nimport {ClientEvent} from '@webex/internal-plugin-metrics';\nimport {throttle} from 'lodash';\nimport Metrics from '../metrics';\nimport {MEETINGS, QUALITY_LEVELS} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport MediaConnectionAwaiter from './MediaConnectionAwaiter';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\n\nexport type MediaDirection = {\n sendAudio: boolean;\n sendVideo: boolean;\n sendShare: boolean;\n receiveAudio: boolean;\n receiveVideo: boolean;\n receiveShare: boolean;\n};\n\nexport type IPVersion = ClientEvent['payload']['ipVersion'];\n\n/**\n * @class MediaProperties\n */\nexport default class MediaProperties {\n audioStream?: LocalMicrophoneStream;\n mediaDirection: MediaDirection;\n mediaSettings: any;\n webrtcMediaConnection: any;\n remoteAudioStream: RemoteStream;\n remoteQualityLevel: any;\n remoteShareStream: RemoteStream;\n remoteVideoStream: RemoteStream;\n shareVideoStream?: LocalDisplayStream;\n shareAudioStream?: LocalSystemAudioStream;\n videoDeviceId: any;\n videoStream?: LocalCameraStream;\n namespace = MEETINGS;\n mediaIssueCounters: {[key: string]: number} = {};\n throttledSendMediaIssueMetric: ReturnType<typeof throttle>;\n\n /**\n * @param {Object} [options] -- to auto construct\n * @returns {MediaProperties}\n */\n constructor() {\n this.webrtcMediaConnection = null;\n this.mediaDirection = {\n receiveAudio: false,\n receiveVideo: false,\n receiveShare: false,\n sendAudio: false,\n sendVideo: false,\n sendShare: false,\n };\n this.videoStream = null;\n this.audioStream = null;\n this.shareVideoStream = null;\n this.shareAudioStream = null;\n this.remoteShareStream = undefined;\n this.remoteAudioStream = undefined;\n this.remoteVideoStream = undefined;\n this.remoteQualityLevel = QUALITY_LEVELS.HIGH;\n this.mediaSettings = {};\n this.videoDeviceId = null;\n\n this.throttledSendMediaIssueMetric = throttle((eventPayload) => {\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEDIA_ISSUE_DETECTED, {\n ...eventPayload,\n });\n Object.keys(this.mediaIssueCounters).forEach((key) => {\n this.mediaIssueCounters[key] = 0;\n });\n }, 1000 * 60 * 5); // at most once every 5 minutes\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(mediaPeerConnection) {\n this.webrtcMediaConnection = mediaPeerConnection;\n }\n\n setLocalVideoStream(videoStream?: LocalCameraStream) {\n this.videoStream = videoStream;\n }\n\n setLocalAudioStream(audioStream?: LocalMicrophoneStream) {\n this.audioStream = audioStream;\n }\n\n setLocalShareVideoStream(shareVideoStream?: LocalDisplayStream) {\n this.shareVideoStream = shareVideoStream;\n }\n\n setLocalShareAudioStream(shareAudioStream?: LocalSystemAudioStream) {\n this.shareAudioStream = shareAudioStream;\n }\n\n setRemoteQualityLevel(remoteQualityLevel) {\n this.remoteQualityLevel = remoteQualityLevel;\n }\n\n setRemoteShareStream(remoteShareStream: RemoteStream) {\n this.remoteShareStream = remoteShareStream;\n }\n\n /**\n * Sets the remote audio stream\n * @param {RemoteStream} remoteAudioStream RemoteStream to save\n * @returns {void}\n */\n setRemoteAudioStream(remoteAudioStream: RemoteStream) {\n this.remoteAudioStream = remoteAudioStream;\n }\n\n /**\n * Sets the remote video stream\n * @param {RemoteStream} remoteVideoStream RemoteStream to save\n * @returns {void}\n */\n setRemoteVideoStream(remoteVideoStream: RemoteStream) {\n this.remoteVideoStream = remoteVideoStream;\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: string) {\n this.videoDeviceId = deviceId;\n }\n\n /**\n * Clears the webrtcMediaConnection. This method should be called after\n * peer connection is closed and no longer needed.\n * @returns {void}\n */\n unsetPeerConnection() {\n this.webrtcMediaConnection = null;\n this.throttledSendMediaIssueMetric.flush();\n }\n\n /**\n * Removes both remote audio and video from class instance\n * @returns {void}\n */\n unsetRemoteMedia() {\n this.remoteAudioStream = null;\n this.remoteVideoStream = null;\n }\n\n unsetRemoteShareStream() {\n this.remoteShareStream = null;\n }\n\n /**\n * Unsets all remote streams\n * @returns {void}\n */\n unsetRemoteStreams() {\n this.unsetRemoteMedia();\n this.unsetRemoteShareStream();\n }\n\n /**\n * Returns if we have at least one local share stream or not.\n * @returns {Boolean}\n */\n hasLocalShareStream() {\n return !!(this.shareAudioStream || this.shareVideoStream);\n }\n\n /**\n * Waits for the webrtc media connection to be connected.\n *\n * @param {string} correlationId\n * @returns {Promise<void>}\n */\n waitForMediaConnectionConnected(correlationId: string): Promise<void> {\n const mediaConnectionAwaiter = new MediaConnectionAwaiter({\n webrtcMediaConnection: this.webrtcMediaConnection,\n correlationId,\n });\n\n return mediaConnectionAwaiter.waitForMediaConnectionConnected();\n }\n\n /**\n * Returns ICE transport information:\n * - selectedCandidatePairChanges - number of times the selected candidate pair was changed, it should be at least 1 for successful connections\n * it will be -1 if browser doesn't supply this information\n * - numTransports - number of transports (should be 1 if we're using bundle)\n *\n * @param {Array<any>} allStatsReports array of RTC stats reports\n * @returns {Object}\n */\n private getTransportInfo(allStatsReports: any[]): {\n selectedCandidatePairChanges: number;\n numTransports: number;\n } {\n const transports = allStatsReports.filter((report) => report.type === 'transport');\n\n if (transports.length > 1) {\n LoggerProxy.logger.warn(\n `Media:properties#getSelectedCandidatePairChanges --> found more than 1 transport: ${transports.length}`\n );\n }\n\n return {\n selectedCandidatePairChanges:\n transports.length > 0 && transports[0].selectedCandidatePairChanges !== undefined\n ? transports[0].selectedCandidatePairChanges\n : -1,\n numTransports: transports.length,\n };\n }\n\n /**\n * Checks if the given IP address is IPv6\n * @param {string} ip address to check\n * @returns {boolean} true if the address is IPv6, false otherwise\n */\n private isIPv6(ip: string): boolean {\n return ip.includes(':');\n }\n\n /** Finds out if we connected using IPv4 or IPv6\n * @param {RTCPeerConnection} webrtcMediaConnection\n * @param {Array<any>} allStatsReports array of RTC stats reports\n * @returns {string} IPVersion\n */\n private getConnectionIpVersion(\n webrtcMediaConnection: RTCPeerConnection,\n allStatsReports: any[]\n ): IPVersion | undefined {\n const transports = allStatsReports.filter((report) => report.type === 'transport');\n\n let selectedCandidatePair;\n\n if (transports.length > 0 && transports[0].selectedCandidatePairId) {\n selectedCandidatePair = allStatsReports.find(\n (report) =>\n report.type === 'candidate-pair' && report.id === transports[0].selectedCandidatePairId\n );\n } else {\n // Firefox doesn't have selectedCandidatePairId, but has selected property on the candidate pair\n selectedCandidatePair = allStatsReports.find(\n (report) => report.type === 'candidate-pair' && report.selected\n );\n }\n\n if (selectedCandidatePair) {\n const localCandidate = allStatsReports.find(\n (report) =>\n report.type === 'local-candidate' && report.id === selectedCandidatePair.localCandidateId\n );\n\n if (localCandidate) {\n if (localCandidate.address) {\n return this.isIPv6(localCandidate.address) ? 'IPv6' : 'IPv4';\n }\n\n try {\n // safari doesn't have address field on the candidate, so we have to use the port to look up the candidate in the SDP\n const localSdp = webrtcMediaConnection.localDescription.sdp;\n\n const parsedSdp = parse(localSdp);\n\n for (const mediaLine of parsedSdp.avMedia) {\n const matchingCandidate = mediaLine.iceInfo.candidates.find(\n (candidate) => candidate.port === localCandidate.port\n );\n if (matchingCandidate) {\n return this.isIPv6(matchingCandidate.connectionAddress) ? 'IPv6' : 'IPv4';\n }\n }\n\n LoggerProxy.logger.warn(\n `Media:properties#getConnectionIpVersion --> failed to find local candidate in the SDP for port ${localCandidate.port}`\n );\n } catch (error) {\n LoggerProxy.logger.warn(\n `Media:properties#getConnectionIpVersion --> error while trying to find candidate in local SDP:`,\n error\n );\n\n return undefined;\n }\n } else {\n LoggerProxy.logger.warn(\n `Media:properties#getConnectionIpVersion --> failed to find local candidate \"${selectedCandidatePair.localCandidateId}\" in getStats() results`\n );\n }\n } else {\n LoggerProxy.logger.warn(\n `Media:properties#getConnectionIpVersion --> failed to find selected candidate pair in getStats() results (transports.length=${transports.length}, selectedCandidatePairId=${transports[0]?.selectedCandidatePairId})`\n );\n }\n\n return undefined;\n }\n\n /**\n * Returns the type of a connection that has been established\n * It should be 'UDP' | 'TCP' | 'TURN-TLS' | 'TURN-TCP' | 'TURN-UDP' | 'unknown'\n *\n * If connection was not established, it returns 'unknown'\n *\n * @param {Array<any>} allStatsReports array of RTC stats reports\n * @returns {string}\n */\n private getConnectionType(allStatsReports: any[]) {\n const successfulCandidatePairs = allStatsReports.filter(\n (report) => report.type === 'candidate-pair' && report.state?.toLowerCase() === 'succeeded'\n );\n\n let foundConnectionType = 'unknown';\n\n // all of the successful pairs should have the same connection type, so just return the type for the first one\n successfulCandidatePairs.some((pair) => {\n const localCandidate = allStatsReports.find(\n (report) => report.type === 'local-candidate' && report.id === pair.localCandidateId\n );\n\n if (localCandidate === undefined) {\n LoggerProxy.logger.warn(\n `Media:properties#getConnectionType --> failed to find local candidate \"${pair.localCandidateId}\" in getStats() results`\n );\n\n return false;\n }\n\n let connectionType;\n\n if (localCandidate.relayProtocol) {\n connectionType = `TURN-${localCandidate.relayProtocol.toUpperCase()}`;\n } else {\n connectionType = localCandidate.protocol?.toUpperCase(); // it will be UDP or TCP\n }\n\n if (connectionType) {\n foundConnectionType = connectionType;\n\n return true;\n }\n LoggerProxy.logger.warn(\n `Media:properties#getConnectionType --> missing localCandidate.protocol, candidateType=${localCandidate.candidateType}`\n );\n\n return false;\n });\n\n if (foundConnectionType === 'unknown') {\n const candidatePairStates = allStatsReports\n .filter((report) => report.type === 'candidate-pair')\n .map((report) => report.state);\n\n LoggerProxy.logger.warn(\n `Media:properties#getConnectionType --> all candidate pair states: ${JSON.stringify(\n candidatePairStates\n )}`\n );\n }\n\n return foundConnectionType;\n }\n\n /**\n * Returns information about current webrtc media connection\n *\n * @returns {Promise<Object>}\n */\n async getCurrentConnectionInfo(): Promise<{\n connectionType: string;\n ipVersion?: IPVersion;\n selectedCandidatePairChanges: number;\n numTransports: number;\n }> {\n try {\n const allStatsReports = [];\n\n await new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n reject(new Error('timed out'));\n }, 1000);\n\n this.webrtcMediaConnection\n .getStats()\n .then((statsResult) => {\n clearTimeout(timeout);\n statsResult.forEach((report) => allStatsReports.push(report));\n resolve(allStatsReports);\n })\n .catch((error) => {\n clearTimeout(timeout);\n reject(error);\n });\n });\n\n const connectionType = this.getConnectionType(allStatsReports);\n const rtcPeerconnection =\n this.webrtcMediaConnection.multistreamConnection?.pc.pc ||\n this.webrtcMediaConnection.mediaConnection?.pc;\n const ipVersion = this.getConnectionIpVersion(rtcPeerconnection, allStatsReports);\n const {selectedCandidatePairChanges, numTransports} = this.getTransportInfo(allStatsReports);\n\n return {\n connectionType,\n ipVersion,\n selectedCandidatePairChanges,\n numTransports,\n };\n } catch (error) {\n LoggerProxy.logger.warn(\n `Media:properties#getCurrentConnectionInfo --> getStats() failed: ${error}`\n );\n\n return {\n connectionType: 'unknown',\n ipVersion: undefined,\n selectedCandidatePairChanges: -1,\n numTransports: 0,\n };\n }\n }\n\n /**\n * Sends a metric about a media issue. Metrics are throttled so that we don't\n * send too many of them, but include a count so that we know how many issues\n * were detected.\n *\n * @param {string} issueType\n * @param {string} issueSubType\n * @param {string} correlationId\n * @returns {void}\n */\n public sendMediaIssueMetric(issueType: string, issueSubType: string, correlationId) {\n const key = `${issueType}_${issueSubType}`;\n\n const count = (this.mediaIssueCounters[key] || 0) + 1;\n\n this.mediaIssueCounters[key] = count;\n\n this.throttledSendMediaIssueMetric({\n correlationId,\n ...this.mediaIssueCounters,\n });\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_tsSdp","require","_lodash","_metrics","_interopRequireDefault","_constants","_loggerProxy","_MediaConnectionAwaiter","_constants2","_createForOfIteratorHelper","r","e","t","_Symbol","_Symbol$iterator","_Array$isArray","_unsupportedIterableToArray","length","_n","F","s","n","done","value","f","TypeError","o","a","u","call","next","return","_arrayLikeToArray","toString","slice","constructor","name","_Array$from","test","Array","ownKeys","_Object$keys2","_Object$getOwnPropertySymbols","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","MediaProperties","exports","_this","_classCallCheck2","MEETINGS","webrtcMediaConnection","mediaDirection","receiveAudio","receiveVideo","receiveShare","sendAudio","sendVideo","sendShare","videoStream","audioStream","shareVideoStream","shareAudioStream","remoteShareStream","undefined","remoteAudioStream","remoteVideoStream","remoteQualityLevel","QUALITY_LEVELS","HIGH","mediaSettings","videoDeviceId","throttledSendMediaIssueMetric","throttle","eventPayload","Metrics","sendBehavioralMetric","BEHAVIORAL_METRICS","MEDIA_ISSUE_DETECTED","_keys","mediaIssueCounters","key","_createClass2","getVideoDeviceId","setMediaDirection","setMediaSettings","type","values","setMediaPeerConnection","mediaPeerConnection","setLocalVideoStream","setLocalAudioStream","setLocalShareVideoStream","setLocalShareAudioStream","setRemoteQualityLevel","setRemoteShareStream","setRemoteAudioStream","setRemoteVideoStream","setVideoDeviceId","deviceId","unsetPeerConnection","flush","unsetRemoteMedia","unsetRemoteShareStream","unsetRemoteStreams","hasLocalShareStream","waitForMediaConnectionConnected","mediaConnectionAwaiter","MediaConnectionAwaiter","getTransportInfo","allStatsReports","transports","report","LoggerProxy","logger","warn","concat","selectedCandidatePairChanges","numTransports","isIPv6","ip","includes","getConnectionIpVersion","selectedCandidatePair","selectedCandidatePairId","find","id","selected","localCandidate","localCandidateId","address","localSdp","localDescription","sdp","parsedSdp","parse","_iterator","avMedia","_step","mediaLine","matchingCandidate","iceInfo","candidates","candidate","port","connectionAddress","err","error","_transports$","getConnectionType","successfulCandidatePairs","_report$state","state","toLowerCase","foundConnectionType","some","pair","connectionType","relayProtocol","toUpperCase","_localCandidate$proto","protocol","candidateType","candidatePairStates","map","_stringify","_getCurrentConnectionInfo","_asyncToGenerator2","_regenerator","mark","_callee","_this2","_this$webrtcMediaConn","_this$webrtcMediaConn2","rtcPeerconnection","ipVersion","_this$getTransportInf","_t","wrap","_context","prev","_promise","resolve","reject","timeout","setTimeout","Error","getStats","then","statsResult","clearTimeout","catch","multistreamConnection","pc","mediaConnection","abrupt","stop","getCurrentConnectionInfo","sendMediaIssueMetric","issueType","issueSubType","correlationId","count"],"sources":["properties.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\nimport {\n LocalCameraStream,\n LocalMicrophoneStream,\n LocalDisplayStream,\n LocalSystemAudioStream,\n RemoteStream,\n} from '@webex/media-helpers';\n\nimport {parse} from '@webex/ts-sdp';\nimport {ClientEvent} from '@webex/internal-plugin-metrics';\nimport {throttle} from 'lodash';\nimport Metrics from '../metrics';\nimport {MEETINGS, QUALITY_LEVELS} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport MediaConnectionAwaiter from './MediaConnectionAwaiter';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\n\nexport type MediaDirection = {\n sendAudio: boolean;\n sendVideo: boolean;\n sendShare: boolean;\n receiveAudio: boolean;\n receiveVideo: boolean;\n receiveShare: boolean;\n};\n\nexport type IPVersion = ClientEvent['payload']['ipVersion'];\n\n/**\n * @class MediaProperties\n */\nexport default class MediaProperties {\n audioStream?: LocalMicrophoneStream;\n mediaDirection: MediaDirection;\n mediaSettings: any;\n webrtcMediaConnection: any;\n remoteAudioStream: RemoteStream;\n remoteQualityLevel: any;\n remoteShareStream: RemoteStream;\n remoteVideoStream: RemoteStream;\n shareVideoStream?: LocalDisplayStream;\n shareAudioStream?: LocalSystemAudioStream;\n videoDeviceId: any;\n videoStream?: LocalCameraStream;\n namespace = MEETINGS;\n mediaIssueCounters: {[key: string]: number} = {};\n throttledSendMediaIssueMetric: ReturnType<typeof throttle>;\n\n /**\n * @param {Object} [options] -- to auto construct\n * @returns {MediaProperties}\n */\n constructor() {\n this.webrtcMediaConnection = null;\n this.mediaDirection = {\n receiveAudio: false,\n receiveVideo: false,\n receiveShare: false,\n sendAudio: false,\n sendVideo: false,\n sendShare: false,\n };\n this.videoStream = null;\n this.audioStream = null;\n this.shareVideoStream = null;\n this.shareAudioStream = null;\n this.remoteShareStream = undefined;\n this.remoteAudioStream = undefined;\n this.remoteVideoStream = undefined;\n this.remoteQualityLevel = QUALITY_LEVELS.HIGH;\n this.mediaSettings = {};\n this.videoDeviceId = null;\n\n this.throttledSendMediaIssueMetric = throttle((eventPayload) => {\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEDIA_ISSUE_DETECTED, {\n ...eventPayload,\n });\n Object.keys(this.mediaIssueCounters).forEach((key) => {\n this.mediaIssueCounters[key] = 0;\n });\n }, 1000 * 60 * 5); // at most once every 5 minutes\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(mediaPeerConnection) {\n this.webrtcMediaConnection = mediaPeerConnection;\n }\n\n setLocalVideoStream(videoStream?: LocalCameraStream) {\n this.videoStream = videoStream;\n }\n\n setLocalAudioStream(audioStream?: LocalMicrophoneStream) {\n this.audioStream = audioStream;\n }\n\n setLocalShareVideoStream(shareVideoStream?: LocalDisplayStream) {\n this.shareVideoStream = shareVideoStream;\n }\n\n setLocalShareAudioStream(shareAudioStream?: LocalSystemAudioStream) {\n this.shareAudioStream = shareAudioStream;\n }\n\n setRemoteQualityLevel(remoteQualityLevel) {\n this.remoteQualityLevel = remoteQualityLevel;\n }\n\n setRemoteShareStream(remoteShareStream: RemoteStream) {\n this.remoteShareStream = remoteShareStream;\n }\n\n /**\n * Sets the remote audio stream\n * @param {RemoteStream} remoteAudioStream RemoteStream to save\n * @returns {void}\n */\n setRemoteAudioStream(remoteAudioStream: RemoteStream) {\n this.remoteAudioStream = remoteAudioStream;\n }\n\n /**\n * Sets the remote video stream\n * @param {RemoteStream} remoteVideoStream RemoteStream to save\n * @returns {void}\n */\n setRemoteVideoStream(remoteVideoStream: RemoteStream) {\n this.remoteVideoStream = remoteVideoStream;\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: string) {\n this.videoDeviceId = deviceId;\n }\n\n /**\n * Clears the webrtcMediaConnection. This method should be called after\n * peer connection is closed and no longer needed.\n * @returns {void}\n */\n unsetPeerConnection() {\n this.webrtcMediaConnection = null;\n this.throttledSendMediaIssueMetric.flush();\n }\n\n /**\n * Removes both remote audio and video from class instance\n * @returns {void}\n */\n unsetRemoteMedia() {\n this.remoteAudioStream = null;\n this.remoteVideoStream = null;\n }\n\n unsetRemoteShareStream() {\n this.remoteShareStream = null;\n }\n\n /**\n * Unsets all remote streams\n * @returns {void}\n */\n unsetRemoteStreams() {\n this.unsetRemoteMedia();\n this.unsetRemoteShareStream();\n }\n\n /**\n * Returns if we have at least one local share stream or not.\n * @returns {Boolean}\n */\n hasLocalShareStream() {\n return !!(this.shareAudioStream || this.shareVideoStream);\n }\n\n /**\n * Waits for the webrtc media connection to be connected.\n *\n * @returns {Promise<void>}\n */\n waitForMediaConnectionConnected(): Promise<void> {\n const mediaConnectionAwaiter = new MediaConnectionAwaiter({\n webrtcMediaConnection: this.webrtcMediaConnection,\n });\n\n return mediaConnectionAwaiter.waitForMediaConnectionConnected();\n }\n\n /**\n * Returns ICE transport information:\n * - selectedCandidatePairChanges - number of times the selected candidate pair was changed, it should be at least 1 for successful connections\n * it will be -1 if browser doesn't supply this information\n * - numTransports - number of transports (should be 1 if we're using bundle)\n *\n * @param {Array<any>} allStatsReports array of RTC stats reports\n * @returns {Object}\n */\n private getTransportInfo(allStatsReports: any[]): {\n selectedCandidatePairChanges: number;\n numTransports: number;\n } {\n const transports = allStatsReports.filter((report) => report.type === 'transport');\n\n if (transports.length > 1) {\n LoggerProxy.logger.warn(\n `Media:properties#getSelectedCandidatePairChanges --> found more than 1 transport: ${transports.length}`\n );\n }\n\n return {\n selectedCandidatePairChanges:\n transports.length > 0 && transports[0].selectedCandidatePairChanges !== undefined\n ? transports[0].selectedCandidatePairChanges\n : -1,\n numTransports: transports.length,\n };\n }\n\n /**\n * Checks if the given IP address is IPv6\n * @param {string} ip address to check\n * @returns {boolean} true if the address is IPv6, false otherwise\n */\n private isIPv6(ip: string): boolean {\n return ip.includes(':');\n }\n\n /** Finds out if we connected using IPv4 or IPv6\n * @param {RTCPeerConnection} webrtcMediaConnection\n * @param {Array<any>} allStatsReports array of RTC stats reports\n * @returns {string} IPVersion\n */\n private getConnectionIpVersion(\n webrtcMediaConnection: RTCPeerConnection,\n allStatsReports: any[]\n ): IPVersion | undefined {\n const transports = allStatsReports.filter((report) => report.type === 'transport');\n\n let selectedCandidatePair;\n\n if (transports.length > 0 && transports[0].selectedCandidatePairId) {\n selectedCandidatePair = allStatsReports.find(\n (report) =>\n report.type === 'candidate-pair' && report.id === transports[0].selectedCandidatePairId\n );\n } else {\n // Firefox doesn't have selectedCandidatePairId, but has selected property on the candidate pair\n selectedCandidatePair = allStatsReports.find(\n (report) => report.type === 'candidate-pair' && report.selected\n );\n }\n\n if (selectedCandidatePair) {\n const localCandidate = allStatsReports.find(\n (report) =>\n report.type === 'local-candidate' && report.id === selectedCandidatePair.localCandidateId\n );\n\n if (localCandidate) {\n if (localCandidate.address) {\n return this.isIPv6(localCandidate.address) ? 'IPv6' : 'IPv4';\n }\n\n try {\n // safari doesn't have address field on the candidate, so we have to use the port to look up the candidate in the SDP\n const localSdp = webrtcMediaConnection.localDescription.sdp;\n\n const parsedSdp = parse(localSdp);\n\n for (const mediaLine of parsedSdp.avMedia) {\n const matchingCandidate = mediaLine.iceInfo.candidates.find(\n (candidate) => candidate.port === localCandidate.port\n );\n if (matchingCandidate) {\n return this.isIPv6(matchingCandidate.connectionAddress) ? 'IPv6' : 'IPv4';\n }\n }\n\n LoggerProxy.logger.warn(\n `Media:properties#getConnectionIpVersion --> failed to find local candidate in the SDP for port ${localCandidate.port}`\n );\n } catch (error) {\n LoggerProxy.logger.warn(\n `Media:properties#getConnectionIpVersion --> error while trying to find candidate in local SDP:`,\n error\n );\n\n return undefined;\n }\n } else {\n LoggerProxy.logger.warn(\n `Media:properties#getConnectionIpVersion --> failed to find local candidate \"${selectedCandidatePair.localCandidateId}\" in getStats() results`\n );\n }\n } else {\n LoggerProxy.logger.warn(\n `Media:properties#getConnectionIpVersion --> failed to find selected candidate pair in getStats() results (transports.length=${transports.length}, selectedCandidatePairId=${transports[0]?.selectedCandidatePairId})`\n );\n }\n\n return undefined;\n }\n\n /**\n * Returns the type of a connection that has been established\n * It should be 'UDP' | 'TCP' | 'TURN-TLS' | 'TURN-TCP' | 'TURN-UDP' | 'unknown'\n *\n * If connection was not established, it returns 'unknown'\n *\n * @param {Array<any>} allStatsReports array of RTC stats reports\n * @returns {string}\n */\n private getConnectionType(allStatsReports: any[]) {\n const successfulCandidatePairs = allStatsReports.filter(\n (report) => report.type === 'candidate-pair' && report.state?.toLowerCase() === 'succeeded'\n );\n\n let foundConnectionType = 'unknown';\n\n // all of the successful pairs should have the same connection type, so just return the type for the first one\n successfulCandidatePairs.some((pair) => {\n const localCandidate = allStatsReports.find(\n (report) => report.type === 'local-candidate' && report.id === pair.localCandidateId\n );\n\n if (localCandidate === undefined) {\n LoggerProxy.logger.warn(\n `Media:properties#getConnectionType --> failed to find local candidate \"${pair.localCandidateId}\" in getStats() results`\n );\n\n return false;\n }\n\n let connectionType;\n\n if (localCandidate.relayProtocol) {\n connectionType = `TURN-${localCandidate.relayProtocol.toUpperCase()}`;\n } else {\n connectionType = localCandidate.protocol?.toUpperCase(); // it will be UDP or TCP\n }\n\n if (connectionType) {\n foundConnectionType = connectionType;\n\n return true;\n }\n LoggerProxy.logger.warn(\n `Media:properties#getConnectionType --> missing localCandidate.protocol, candidateType=${localCandidate.candidateType}`\n );\n\n return false;\n });\n\n if (foundConnectionType === 'unknown') {\n const candidatePairStates = allStatsReports\n .filter((report) => report.type === 'candidate-pair')\n .map((report) => report.state);\n\n LoggerProxy.logger.warn(\n `Media:properties#getConnectionType --> all candidate pair states: ${JSON.stringify(\n candidatePairStates\n )}`\n );\n }\n\n return foundConnectionType;\n }\n\n /**\n * Returns information about current webrtc media connection\n *\n * @returns {Promise<Object>}\n */\n async getCurrentConnectionInfo(): Promise<{\n connectionType: string;\n ipVersion?: IPVersion;\n selectedCandidatePairChanges: number;\n numTransports: number;\n }> {\n try {\n const allStatsReports = [];\n\n await new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n reject(new Error('timed out'));\n }, 1000);\n\n this.webrtcMediaConnection\n .getStats()\n .then((statsResult) => {\n clearTimeout(timeout);\n statsResult.forEach((report) => allStatsReports.push(report));\n resolve(allStatsReports);\n })\n .catch((error) => {\n clearTimeout(timeout);\n reject(error);\n });\n });\n\n const connectionType = this.getConnectionType(allStatsReports);\n const rtcPeerconnection =\n this.webrtcMediaConnection.multistreamConnection?.pc.pc ||\n this.webrtcMediaConnection.mediaConnection?.pc;\n const ipVersion = this.getConnectionIpVersion(rtcPeerconnection, allStatsReports);\n const {selectedCandidatePairChanges, numTransports} = this.getTransportInfo(allStatsReports);\n\n return {\n connectionType,\n ipVersion,\n selectedCandidatePairChanges,\n numTransports,\n };\n } catch (error) {\n LoggerProxy.logger.warn(\n `Media:properties#getCurrentConnectionInfo --> getStats() failed: ${error}`\n );\n\n return {\n connectionType: 'unknown',\n ipVersion: undefined,\n selectedCandidatePairChanges: -1,\n numTransports: 0,\n };\n }\n }\n\n /**\n * Sends a metric about a media issue. Metrics are throttled so that we don't\n * send too many of them, but include a count so that we know how many issues\n * were detected.\n *\n * @param {string} issueType\n * @param {string} issueSubType\n * @param {string} correlationId\n * @returns {void}\n */\n public sendMediaIssueMetric(issueType: string, issueSubType: string, correlationId) {\n const key = `${issueType}_${issueSubType}`;\n\n const count = (this.mediaIssueCounters[key] || 0) + 1;\n\n this.mediaIssueCounters[key] = count;\n\n this.throttledSendMediaIssueMetric({\n correlationId,\n ...this.mediaIssueCounters,\n });\n }\n}\n"],"mappings":"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","ignoreList":[]}
|