@webex/plugin-meetings 3.0.0-beta.2 → 3.0.0-beta.20
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/UPGRADING.md +9 -9
- package/browsers.js +19 -24
- package/dist/breakouts/breakout.js +116 -0
- package/dist/breakouts/breakout.js.map +1 -0
- package/dist/breakouts/collection.js +23 -0
- package/dist/breakouts/collection.js.map +1 -0
- package/dist/breakouts/index.js +226 -0
- package/dist/breakouts/index.js.map +1 -0
- package/dist/common/browser-detection.js +1 -20
- package/dist/common/browser-detection.js.map +1 -1
- package/dist/common/collection.js +5 -20
- package/dist/common/collection.js.map +1 -1
- package/dist/common/config.js +0 -7
- package/dist/common/config.js.map +1 -1
- package/dist/common/errors/captcha-error.js +10 -24
- package/dist/common/errors/captcha-error.js.map +1 -1
- package/dist/common/errors/intent-to-join.js +11 -24
- package/dist/common/errors/intent-to-join.js.map +1 -1
- package/dist/common/errors/join-meeting.js +12 -25
- package/dist/common/errors/join-meeting.js.map +1 -1
- package/dist/common/errors/media.js +10 -24
- package/dist/common/errors/media.js.map +1 -1
- package/dist/common/errors/parameter.js +5 -33
- package/dist/common/errors/parameter.js.map +1 -1
- package/dist/common/errors/password-error.js +10 -24
- package/dist/common/errors/password-error.js.map +1 -1
- package/dist/common/errors/permission.js +9 -23
- package/dist/common/errors/permission.js.map +1 -1
- package/dist/common/errors/reconnection-in-progress.js +0 -17
- package/dist/common/errors/reconnection-in-progress.js.map +1 -1
- package/dist/common/errors/reconnection.js +10 -24
- package/dist/common/errors/reconnection.js.map +1 -1
- package/dist/common/errors/stats.js +10 -24
- package/dist/common/errors/stats.js.map +1 -1
- package/dist/common/errors/webex-errors.js +6 -41
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/errors/webex-meetings-error.js +5 -25
- package/dist/common/errors/webex-meetings-error.js.map +1 -1
- package/dist/common/events/events-scope.js +0 -22
- package/dist/common/events/events-scope.js.map +1 -1
- package/dist/common/events/events.js +0 -23
- package/dist/common/events/events.js.map +1 -1
- package/dist/common/events/trigger-proxy.js +0 -12
- package/dist/common/events/trigger-proxy.js.map +1 -1
- package/dist/common/events/util.js +0 -15
- package/dist/common/events/util.js.map +1 -1
- package/dist/common/logs/logger-config.js +0 -4
- package/dist/common/logs/logger-config.js.map +1 -1
- package/dist/common/logs/logger-proxy.js +1 -8
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/logs/request.js +37 -60
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.js +4 -14
- package/dist/common/queue.js.map +1 -1
- package/dist/config.js +6 -6
- package/dist/config.js.map +1 -1
- package/dist/constants.js +88 -46
- package/dist/constants.js.map +1 -1
- package/dist/index.js +1 -17
- package/dist/index.js.map +1 -1
- package/dist/locus-info/controlsUtils.js +12 -29
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/embeddedAppsUtils.js +3 -26
- package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
- package/dist/locus-info/fullState.js +0 -15
- package/dist/locus-info/fullState.js.map +1 -1
- package/dist/locus-info/hostUtils.js +4 -12
- package/dist/locus-info/hostUtils.js.map +1 -1
- package/dist/locus-info/index.js +184 -190
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +3 -37
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +12 -38
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +92 -118
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +34 -91
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +67 -111
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +80 -114
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js +2 -9
- package/dist/media/util.js.map +1 -1
- package/dist/mediaQualityMetrics/config.js +10 -12
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/effectsState.js +125 -190
- package/dist/meeting/effectsState.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +5 -14
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +1692 -1925
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/muteState.js +36 -77
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +224 -230
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/request.type.js +7 -0
- package/dist/meeting/request.type.js.map +1 -0
- package/dist/meeting/state.js +21 -31
- package/dist/meeting/state.js.map +1 -1
- package/dist/meeting/util.js +43 -215
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/collection.js +6 -25
- package/dist/meeting-info/collection.js.map +1 -1
- package/dist/meeting-info/index.js +14 -32
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +193 -268
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.js +3 -15
- package/dist/meeting-info/request.js.map +1 -1
- package/dist/meeting-info/util.js +98 -183
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +137 -228
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +5 -20
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +490 -560
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/request.js +24 -41
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +99 -155
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +78 -86
- package/dist/member/index.js.map +1 -1
- package/dist/member/util.js +31 -68
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +3 -12
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +93 -200
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +16 -39
- package/dist/members/request.js.map +1 -1
- package/dist/members/util.js +9 -38
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/config.js +0 -2
- package/dist/metrics/config.js.map +1 -1
- package/dist/metrics/constants.js +1 -2
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +55 -135
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +57 -32
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/multistreamMedia.js +15 -21
- package/dist/multistream/multistreamMedia.js.map +1 -1
- package/dist/multistream/receiveSlot.js +10 -50
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/multistream/receiveSlotManager.js +45 -82
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +18 -58
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.js +6 -40
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +362 -416
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/networkQualityMonitor/index.js +36 -57
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/personal-meeting-room/index.js +21 -45
- package/dist/personal-meeting-room/index.js.map +1 -1
- package/dist/personal-meeting-room/request.js +1 -31
- package/dist/personal-meeting-room/request.js.map +1 -1
- package/dist/personal-meeting-room/util.js +0 -13
- package/dist/personal-meeting-room/util.js.map +1 -1
- package/dist/reachability/index.js +138 -182
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +3 -18
- package/dist/reachability/request.js.map +1 -1
- package/dist/reactions/constants.js +13 -0
- package/dist/reactions/constants.js.map +1 -0
- package/dist/reactions/reactions.js +109 -0
- package/dist/reactions/reactions.js.map +1 -0
- package/dist/reactions/reactions.type.js +36 -0
- package/dist/reactions/reactions.type.js.map +1 -0
- package/dist/reconnection-manager/index.js +322 -455
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/enums.js +17 -0
- package/dist/recording-controller/enums.js.map +1 -0
- package/dist/recording-controller/index.js +343 -0
- package/dist/recording-controller/index.js.map +1 -0
- package/dist/recording-controller/util.js +63 -0
- package/dist/recording-controller/util.js.map +1 -0
- package/dist/roap/index.js +39 -64
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +94 -113
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +85 -94
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/statsAnalyzer/global.js +0 -2
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.js +85 -175
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +72 -53
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.js +22 -47
- package/dist/transcription/index.js.map +1 -1
- package/internal-README.md +7 -6
- package/package.json +25 -20
- package/src/breakouts/README.md +190 -0
- package/src/breakouts/breakout.ts +110 -0
- package/src/breakouts/collection.ts +19 -0
- package/src/breakouts/index.ts +225 -0
- package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
- package/src/common/collection.ts +9 -7
- package/src/common/{config.js → config.ts} +1 -1
- package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
- package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
- package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
- package/src/common/errors/{media.js → media.ts} +11 -7
- package/src/common/errors/parameter.ts +11 -7
- package/src/common/errors/{password-error.js → password-error.ts} +11 -7
- package/src/common/errors/{permission.js → permission.ts} +10 -6
- package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
- package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
- package/src/common/errors/{stats.js → stats.ts} +11 -7
- package/src/common/errors/{webex-errors.js → webex-errors.ts} +8 -7
- package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
- package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
- package/src/common/events/{events.js → events.ts} +5 -1
- package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
- package/src/common/events/{util.js → util.ts} +2 -3
- package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
- package/src/common/logs/logger-proxy.ts +44 -0
- package/src/common/logs/{request.js → request.ts} +22 -9
- package/src/common/queue.ts +1 -2
- package/src/{config.js → config.ts} +17 -12
- package/src/constants.ts +40 -1
- package/src/index.js +1 -1
- package/src/locus-info/controlsUtils.ts +114 -0
- package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
- package/src/locus-info/{fullState.js → fullState.ts} +16 -12
- package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
- package/src/locus-info/{index.js → index.ts} +148 -64
- package/src/locus-info/{infoUtils.js → infoUtils.ts} +19 -8
- package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +17 -17
- package/src/locus-info/{parser.js → parser.ts} +67 -79
- package/src/locus-info/{selfUtils.js → selfUtils.ts} +123 -68
- package/src/media/{index.js → index.ts} +181 -131
- package/src/media/{properties.js → properties.ts} +47 -28
- package/src/media/{util.js → util.ts} +2 -2
- package/src/mediaQualityMetrics/{config.js → config.ts} +46 -46
- package/src/meeting/{effectsState.js → effectsState.ts} +47 -41
- package/src/meeting/in-meeting-actions.ts +15 -3
- package/src/meeting/{index.js → index.ts} +2263 -1427
- package/src/meeting/{muteState.js → muteState.ts} +78 -42
- package/src/meeting/{request.js → request.ts} +292 -142
- package/src/meeting/request.type.ts +13 -0
- package/src/meeting/{state.js → state.ts} +50 -35
- package/src/meeting/{util.js → util.ts} +112 -115
- package/src/meeting-info/{collection.js → collection.ts} +6 -2
- package/src/meeting-info/{index.js → index.ts} +42 -36
- package/src/meeting-info/meeting-info-v2.ts +273 -0
- package/src/meeting-info/{request.js → request.ts} +14 -4
- package/src/meeting-info/{util.js → util.ts} +60 -51
- package/src/meeting-info/{utilv2.js → utilv2.ts} +65 -58
- package/src/meetings/{collection.js → collection.ts} +6 -3
- package/src/meetings/index.ts +1159 -0
- package/src/meetings/{request.js → request.ts} +32 -25
- package/src/meetings/{util.js → util.ts} +34 -32
- package/src/member/{index.js → index.ts} +102 -56
- package/src/member/{util.js → util.ts} +52 -25
- package/src/members/{collection.js → collection.ts} +2 -2
- package/src/members/{index.js → index.ts} +219 -142
- package/src/members/{request.js → request.ts} +60 -16
- package/src/members/{util.js → util.ts} +50 -48
- package/src/metrics/{config.js → config.ts} +254 -83
- package/src/metrics/{constants.js → constants.ts} +0 -2
- package/src/metrics/{index.js → index.ts} +106 -74
- package/src/multistream/mediaRequestManager.ts +81 -15
- package/src/multistream/multistreamMedia.ts +5 -0
- package/src/multistream/receiveSlot.ts +18 -12
- package/src/multistream/receiveSlotManager.ts +23 -21
- package/src/multistream/remoteMedia.ts +15 -5
- package/src/multistream/remoteMediaGroup.ts +4 -3
- package/src/multistream/remoteMediaManager.ts +153 -37
- package/src/networkQualityMonitor/{index.js → index.ts} +37 -25
- package/src/personal-meeting-room/{index.js → index.ts} +28 -19
- package/src/personal-meeting-room/{request.js → request.ts} +13 -4
- package/src/personal-meeting-room/{util.js → util.ts} +4 -4
- package/src/reachability/{index.js → index.ts} +99 -83
- package/src/reachability/request.ts +39 -33
- package/src/reactions/constants.ts +4 -0
- package/src/reactions/reactions.ts +104 -0
- package/src/reactions/reactions.type.ts +62 -0
- package/src/reconnection-manager/{index.js → index.ts} +195 -102
- package/src/recording-controller/enums.ts +8 -0
- package/src/recording-controller/index.ts +315 -0
- package/src/recording-controller/util.ts +58 -0
- package/src/roap/{index.js → index.ts} +73 -56
- package/src/roap/request.ts +157 -0
- package/src/roap/turnDiscovery.ts +77 -37
- package/src/statsAnalyzer/{global.js → global.ts} +30 -33
- package/src/statsAnalyzer/{index.js → index.ts} +468 -192
- package/src/statsAnalyzer/mqaUtil.ts +290 -0
- package/src/transcription/{index.js → index.ts} +46 -39
- package/test/integration/spec/journey.js +664 -463
- package/test/integration/spec/space-meeting.js +320 -206
- package/test/integration/spec/transcription.js +7 -8
- package/test/unit/spec/breakouts/breakout.ts +119 -0
- package/test/unit/spec/breakouts/collection.ts +15 -0
- package/test/unit/spec/breakouts/index.ts +293 -0
- package/test/unit/spec/common/browser-detection.js +9 -28
- package/test/unit/spec/fixture/locus.js +92 -90
- package/test/unit/spec/locus-info/controlsUtils.js +25 -5
- package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
- package/test/unit/spec/locus-info/index.js +104 -2
- package/test/unit/spec/locus-info/infoUtils.js +41 -32
- package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
- package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
- package/test/unit/spec/locus-info/parser.js +3 -9
- package/test/unit/spec/locus-info/selfConstant.js +97 -103
- package/test/unit/spec/locus-info/selfUtils.js +105 -12
- package/test/unit/spec/media/index.ts +31 -47
- package/test/unit/spec/media/properties.ts +9 -9
- package/test/unit/spec/meeting/effectsState.js +39 -45
- package/test/unit/spec/meeting/in-meeting-actions.ts +5 -2
- package/test/unit/spec/meeting/index.js +2017 -742
- package/test/unit/spec/meeting/muteState.js +42 -33
- package/test/unit/spec/meeting/request.js +115 -44
- package/test/unit/spec/meeting/utils.js +104 -171
- package/test/unit/spec/meeting-info/meetinginfov2.js +100 -73
- package/test/unit/spec/meeting-info/request.js +7 -9
- package/test/unit/spec/meeting-info/util.js +11 -12
- package/test/unit/spec/meeting-info/utilv2.js +110 -74
- package/test/unit/spec/meetings/collection.js +1 -1
- package/test/unit/spec/meetings/index.js +439 -257
- package/test/unit/spec/meetings/utils.js +14 -12
- package/test/unit/spec/member/index.js +0 -1
- package/test/unit/spec/member/util.js +31 -7
- package/test/unit/spec/members/index.js +104 -54
- package/test/unit/spec/members/request.js +29 -20
- package/test/unit/spec/members/utils.js +8 -5
- package/test/unit/spec/metrics/index.js +16 -21
- package/test/unit/spec/multistream/mediaRequestManager.ts +316 -50
- package/test/unit/spec/multistream/receiveSlot.ts +6 -6
- package/test/unit/spec/multistream/receiveSlotManager.ts +13 -13
- package/test/unit/spec/multistream/remoteMedia.ts +10 -2
- package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
- package/test/unit/spec/multistream/remoteMediaManager.ts +412 -65
- package/test/unit/spec/networkQualityMonitor/index.js +21 -15
- package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
- package/test/unit/spec/reachability/index.ts +58 -26
- package/test/unit/spec/reconnection-manager/index.js +102 -9
- package/test/unit/spec/recording-controller/index.js +231 -0
- package/test/unit/spec/recording-controller/util.js +102 -0
- package/test/unit/spec/roap/index.ts +2 -1
- package/test/unit/spec/roap/request.ts +114 -0
- package/test/unit/spec/roap/turnDiscovery.ts +64 -45
- package/test/unit/spec/stats-analyzer/index.js +27 -22
- package/test/utils/cmr.js +44 -42
- package/test/utils/testUtils.js +83 -74
- package/test/utils/webex-config.js +18 -18
- package/test/utils/webex-test-users.js +54 -50
- package/tsconfig.json +6 -0
- package/dist/media/internal-media-core-wrapper.js +0 -22
- package/dist/media/internal-media-core-wrapper.js.map +0 -1
- package/dist/peer-connection-manager/util.js +0 -124
- package/dist/peer-connection-manager/util.js.map +0 -1
- package/src/common/logs/logger-proxy.js +0 -33
- package/src/locus-info/controlsUtils.js +0 -102
- package/src/media/internal-media-core-wrapper.ts +0 -9
- package/src/meeting-info/meeting-info-v2.js +0 -255
- package/src/meetings/index.js +0 -1015
- package/src/peer-connection-manager/util.ts +0 -117
- package/src/roap/request.js +0 -127
- package/src/statsAnalyzer/mqaUtil.js +0 -173
- package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import {Reaction} from '../reactions/reactions.type';
|
|
2
|
+
|
|
3
|
+
export type SendReactionOptions = {
|
|
4
|
+
reactionChannelUrl: string;
|
|
5
|
+
reaction: Reaction;
|
|
6
|
+
participantId: string;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
export type ToggleReactionsOptions = {
|
|
10
|
+
enable: boolean;
|
|
11
|
+
locusUrl: string;
|
|
12
|
+
requestingParticipantId: string;
|
|
13
|
+
};
|
|
@@ -13,9 +13,11 @@ const MeetingStateMachine = {
|
|
|
13
13
|
* @param {Meeting} meetingRef A reference to a meeting instance
|
|
14
14
|
* @returns {StateMachine}
|
|
15
15
|
*/
|
|
16
|
-
create(meetingRef) {
|
|
16
|
+
create(meetingRef: any) {
|
|
17
17
|
if (!meetingRef) {
|
|
18
|
-
throw new ParameterError(
|
|
18
|
+
throw new ParameterError(
|
|
19
|
+
'You must initialize the meeting state machine with a meeting reference.'
|
|
20
|
+
);
|
|
19
21
|
}
|
|
20
22
|
|
|
21
23
|
return new StateMachine({
|
|
@@ -24,27 +26,36 @@ const MeetingStateMachine = {
|
|
|
24
26
|
// when ringing a meeting, it must be first IDLE, because all other states are invalid, it transitions to the RINGING state
|
|
25
27
|
{
|
|
26
28
|
name: MEETING_STATE_MACHINE.TRANSITIONS.RING,
|
|
27
|
-
from: [
|
|
28
|
-
|
|
29
|
+
from: [
|
|
30
|
+
MEETING_STATE_MACHINE.STATES.IDLE,
|
|
31
|
+
MEETING_STATE_MACHINE.STATES.ERROR,
|
|
32
|
+
MEETING_STATE_MACHINE.STATES.JOINED,
|
|
33
|
+
],
|
|
34
|
+
to: MEETING_STATE_MACHINE.STATES.RINGING,
|
|
29
35
|
},
|
|
30
36
|
// when joining a meeting, it must be from the RINGING or IDLE state, transitions to JOINED state, 1:1 will go to RINGING,
|
|
31
37
|
// others will go straight to JOINED with this transition
|
|
32
38
|
{
|
|
33
39
|
name: MEETING_STATE_MACHINE.TRANSITIONS.JOIN,
|
|
34
|
-
from: [
|
|
35
|
-
|
|
40
|
+
from: [
|
|
41
|
+
MEETING_STATE_MACHINE.STATES.JOINED,
|
|
42
|
+
MEETING_STATE_MACHINE.STATES.IDLE,
|
|
43
|
+
MEETING_STATE_MACHINE.STATES.RINGING,
|
|
44
|
+
MEETING_STATE_MACHINE.STATES.ERROR,
|
|
45
|
+
],
|
|
46
|
+
to: MEETING_STATE_MACHINE.STATES.JOINED,
|
|
36
47
|
},
|
|
37
48
|
// signify that ringing has stopped and somebody else answered, move state to DECLINED, ANSWERED
|
|
38
49
|
{
|
|
39
50
|
name: MEETING_STATE_MACHINE.TRANSITIONS.REMOTE,
|
|
40
51
|
from: [MEETING_STATE_MACHINE.STATES.JOINED, MEETING_STATE_MACHINE.STATES.ERROR],
|
|
41
52
|
/**
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
to(remote) {
|
|
53
|
+
* @param {Object} remote
|
|
54
|
+
* @param {Boolean} remote.remoteAnswered
|
|
55
|
+
* @param {Boolean} remote.remoteDeclined
|
|
56
|
+
* @returns {String}
|
|
57
|
+
*/
|
|
58
|
+
to(remote: {remoteAnswered: boolean; remoteDeclined: boolean}) {
|
|
48
59
|
// other user answered the call
|
|
49
60
|
if (remote.remoteAnswered) {
|
|
50
61
|
return MEETING_STATE_MACHINE.STATES.ANSWERED;
|
|
@@ -56,7 +67,7 @@ const MeetingStateMachine = {
|
|
|
56
67
|
|
|
57
68
|
// default
|
|
58
69
|
return MEETING_STATE_MACHINE.STATES.ERROR;
|
|
59
|
-
}
|
|
70
|
+
},
|
|
60
71
|
},
|
|
61
72
|
// when leaving a meeting it must be from either the RINGING, JOINED, or ERROR states, and transitions it to the ENDED state
|
|
62
73
|
{
|
|
@@ -67,9 +78,9 @@ const MeetingStateMachine = {
|
|
|
67
78
|
MEETING_STATE_MACHINE.STATES.JOINED,
|
|
68
79
|
MEETING_STATE_MACHINE.STATES.ANSWERED,
|
|
69
80
|
MEETING_STATE_MACHINE.STATES.DECLINED,
|
|
70
|
-
MEETING_STATE_MACHINE.STATES.ERROR
|
|
81
|
+
MEETING_STATE_MACHINE.STATES.ERROR,
|
|
71
82
|
],
|
|
72
|
-
to: MEETING_STATE_MACHINE.STATES.ENDED
|
|
83
|
+
to: MEETING_STATE_MACHINE.STATES.ENDED,
|
|
73
84
|
},
|
|
74
85
|
{
|
|
75
86
|
name: MEETING_STATE_MACHINE.TRANSITIONS.END,
|
|
@@ -79,33 +90,33 @@ const MeetingStateMachine = {
|
|
|
79
90
|
MEETING_STATE_MACHINE.STATES.JOINED,
|
|
80
91
|
MEETING_STATE_MACHINE.STATES.ANSWERED,
|
|
81
92
|
MEETING_STATE_MACHINE.STATES.DECLINED,
|
|
82
|
-
MEETING_STATE_MACHINE.STATES.ERROR
|
|
93
|
+
MEETING_STATE_MACHINE.STATES.ERROR,
|
|
83
94
|
],
|
|
84
|
-
to: MEETING_STATE_MACHINE.STATES.ENDED
|
|
95
|
+
to: MEETING_STATE_MACHINE.STATES.ENDED,
|
|
85
96
|
},
|
|
86
97
|
{
|
|
87
98
|
name: MEETING_STATE_MACHINE.TRANSITIONS.DECLINE,
|
|
88
99
|
from: [MEETING_STATE_MACHINE.STATES.RINGING, MEETING_STATE_MACHINE.STATES.ERROR],
|
|
89
|
-
to: MEETING_STATE_MACHINE.STATES.ENDED
|
|
100
|
+
to: MEETING_STATE_MACHINE.STATES.ENDED,
|
|
90
101
|
},
|
|
91
102
|
// transition from ANY state to ERROR state
|
|
92
103
|
{
|
|
93
104
|
name: MEETING_STATE_MACHINE.TRANSITIONS.FAIL,
|
|
94
105
|
from: '*',
|
|
95
|
-
to: MEETING_STATE_MACHINE.STATES.ERROR
|
|
106
|
+
to: MEETING_STATE_MACHINE.STATES.ERROR,
|
|
96
107
|
},
|
|
97
108
|
// fail safe, transition from ANY state to IDLE state
|
|
98
109
|
{
|
|
99
110
|
name: MEETING_STATE_MACHINE.TRANSITIONS.RESET,
|
|
100
111
|
from: '*',
|
|
101
|
-
to: MEETING_STATE_MACHINE.STATES.IDLE
|
|
102
|
-
}
|
|
112
|
+
to: MEETING_STATE_MACHINE.STATES.IDLE,
|
|
113
|
+
},
|
|
103
114
|
],
|
|
104
115
|
data: {
|
|
105
116
|
/**
|
|
106
117
|
* The meeting instance to execute all state changes on
|
|
107
118
|
*/
|
|
108
|
-
meeting: meetingRef
|
|
119
|
+
meeting: meetingRef,
|
|
109
120
|
},
|
|
110
121
|
methods: {
|
|
111
122
|
/**
|
|
@@ -114,18 +125,18 @@ const MeetingStateMachine = {
|
|
|
114
125
|
* @param {Object} stop -- {remoteAnswered: {Boolean}, remoteDeclined: {Boolean}}
|
|
115
126
|
* @returns {Boolean}
|
|
116
127
|
*/
|
|
117
|
-
onRemote(transition, stop) {
|
|
128
|
+
onRemote(transition: object, stop: object) {
|
|
118
129
|
if (this.meeting) {
|
|
119
130
|
Trigger.trigger(
|
|
120
131
|
this.meeting,
|
|
121
132
|
{
|
|
122
133
|
file: 'meeting/state',
|
|
123
|
-
function: 'onRemote'
|
|
134
|
+
function: 'onRemote',
|
|
124
135
|
},
|
|
125
136
|
EVENT_TRIGGERS.MEETING_RINGING_STOP,
|
|
126
137
|
{
|
|
127
138
|
id: this.meeting.id,
|
|
128
|
-
type: stop
|
|
139
|
+
type: stop,
|
|
129
140
|
}
|
|
130
141
|
);
|
|
131
142
|
}
|
|
@@ -136,18 +147,18 @@ const MeetingStateMachine = {
|
|
|
136
147
|
* @param {String} type -- incoming call === INCOMING / or other meetings have a ring type of JOIN
|
|
137
148
|
* @returns {Boolean}
|
|
138
149
|
*/
|
|
139
|
-
onRing(transition, type) {
|
|
150
|
+
onRing(transition: object, type: string) {
|
|
140
151
|
if (this.meeting) {
|
|
141
152
|
Trigger.trigger(
|
|
142
153
|
this.meeting,
|
|
143
154
|
{
|
|
144
155
|
file: 'meeting/state',
|
|
145
|
-
function: 'onRing'
|
|
156
|
+
function: 'onRing',
|
|
146
157
|
},
|
|
147
158
|
EVENT_TRIGGERS.MEETING_RINGING,
|
|
148
159
|
{
|
|
149
160
|
type,
|
|
150
|
-
id: this.meeting.id
|
|
161
|
+
id: this.meeting.id,
|
|
151
162
|
}
|
|
152
163
|
);
|
|
153
164
|
}
|
|
@@ -158,22 +169,26 @@ const MeetingStateMachine = {
|
|
|
158
169
|
* @param {Error} error
|
|
159
170
|
* @returns {Boolean}
|
|
160
171
|
*/
|
|
161
|
-
onEnterError(transition, error) {
|
|
162
|
-
LoggerProxy.logger.error(
|
|
172
|
+
onEnterError(transition: any, error: Error) {
|
|
173
|
+
LoggerProxy.logger.error(
|
|
174
|
+
`Meeting:state#onEnterError --> state->onEnterError#meeting.id: ${this.meeting.id} | Transition '${transition?.transition}' : ${transition?.from} -> ${transition?.to}, with error ${error}. Last states: ${this.history}`
|
|
175
|
+
);
|
|
163
176
|
},
|
|
164
177
|
/**
|
|
165
178
|
* After ANY transition occurs, we want to know what state the meeting moved to for debugging
|
|
166
179
|
* @param {Object} transition
|
|
167
180
|
* @returns {Boolean}
|
|
168
181
|
*/
|
|
169
|
-
onAfterTransition(transition) {
|
|
170
|
-
LoggerProxy.logger.log(
|
|
171
|
-
|
|
182
|
+
onAfterTransition(transition: any) {
|
|
183
|
+
LoggerProxy.logger.log(
|
|
184
|
+
`Meeting:state#onAfterTransition --> state->onAfterTransition#meeting.id: ${this.meeting.id} | Transition '${transition.transition}' : ${transition.from} -> ${transition.to} executed. Last states: ${this.history}`
|
|
185
|
+
);
|
|
186
|
+
},
|
|
172
187
|
},
|
|
173
188
|
// track the last 25 states entered
|
|
174
|
-
plugins: [new StateMachineHistory({max: 25})]
|
|
189
|
+
plugins: [new StateMachineHistory({max: 25})],
|
|
175
190
|
});
|
|
176
|
-
}
|
|
191
|
+
},
|
|
177
192
|
};
|
|
178
193
|
|
|
179
194
|
export default MeetingStateMachine;
|
|
@@ -5,13 +5,15 @@ import Metrics from '../metrics';
|
|
|
5
5
|
import {eventType, trigger} from '../metrics/config';
|
|
6
6
|
import Media from '../media';
|
|
7
7
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
8
|
-
import {
|
|
8
|
+
import {
|
|
9
|
+
INTENT_TO_JOIN,
|
|
9
10
|
_LEFT_,
|
|
10
11
|
_IDLE_,
|
|
11
12
|
_JOINED_,
|
|
12
13
|
PASSWORD_STATUS,
|
|
13
14
|
DISPLAY_HINTS,
|
|
14
|
-
FULL_STATE
|
|
15
|
+
FULL_STATE,
|
|
16
|
+
} from '../constants';
|
|
15
17
|
import IntentToJoinError from '../common/errors/intent-to-join';
|
|
16
18
|
import JoinMeetingError from '../common/errors/join-meeting';
|
|
17
19
|
import ParameterError from '../common/errors/parameter';
|
|
@@ -19,10 +21,10 @@ import PermissionError from '../common/errors/permission';
|
|
|
19
21
|
import PasswordError from '../common/errors/password-error';
|
|
20
22
|
import CaptchaError from '../common/errors/captcha-error';
|
|
21
23
|
|
|
22
|
-
const MeetingUtil = {};
|
|
24
|
+
const MeetingUtil: any = {};
|
|
23
25
|
|
|
24
26
|
MeetingUtil.parseLocusJoin = (response) => {
|
|
25
|
-
const parsed = {};
|
|
27
|
+
const parsed: any = {};
|
|
26
28
|
|
|
27
29
|
// First todo: add check for existance
|
|
28
30
|
parsed.locus = response.body.locus;
|
|
@@ -48,30 +50,35 @@ MeetingUtil.remoteUpdateAudioVideo = (audioMuted, videoMuted, meeting) => {
|
|
|
48
50
|
const localMedias = Media.generateLocalMedias(meeting.mediaId, audioMuted, videoMuted);
|
|
49
51
|
|
|
50
52
|
if (isEmpty(localMedias)) {
|
|
51
|
-
return Promise.reject(
|
|
53
|
+
return Promise.reject(
|
|
54
|
+
new ParameterError('You need a media id on the meeting to change remote audio.')
|
|
55
|
+
);
|
|
52
56
|
}
|
|
53
57
|
|
|
54
58
|
Metrics.postEvent({event: eventType.MEDIA_REQUEST, meeting});
|
|
55
59
|
|
|
56
|
-
return meeting.meetingRequest
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
60
|
+
return meeting.meetingRequest
|
|
61
|
+
.remoteAudioVideoToggle({
|
|
62
|
+
locusUrl: meeting.locusUrl,
|
|
63
|
+
selfId: meeting.selfId,
|
|
64
|
+
localMedias,
|
|
65
|
+
deviceUrl: meeting.deviceUrl,
|
|
66
|
+
correlationId: meeting.correlationId,
|
|
67
|
+
preferTranscoding: !meeting.isMultistream,
|
|
68
|
+
})
|
|
69
|
+
.then((response) => {
|
|
70
|
+
Metrics.postEvent({event: eventType.MEDIA_RESPONSE, meeting});
|
|
65
71
|
|
|
66
|
-
|
|
67
|
-
|
|
72
|
+
return response.body.locus;
|
|
73
|
+
});
|
|
68
74
|
};
|
|
69
75
|
|
|
70
76
|
MeetingUtil.hasOwner = (info) => info && info.owner;
|
|
71
77
|
|
|
72
78
|
MeetingUtil.isOwnerSelf = (owner, selfId) => owner === selfId;
|
|
73
79
|
|
|
74
|
-
MeetingUtil.isPinOrGuest = (err) =>
|
|
80
|
+
MeetingUtil.isPinOrGuest = (err) =>
|
|
81
|
+
err?.body?.errorCode && INTENT_TO_JOIN.includes(err.body.errorCode);
|
|
75
82
|
|
|
76
83
|
MeetingUtil.joinMeeting = (meeting, options) => {
|
|
77
84
|
if (!meeting) {
|
|
@@ -97,7 +104,8 @@ MeetingUtil.joinMeeting = (meeting, options) => {
|
|
|
97
104
|
pin: options.pin,
|
|
98
105
|
moveToResource: options.moveToResource,
|
|
99
106
|
preferTranscoding: !meeting.isMultistream,
|
|
100
|
-
asResourceOccupant: options.asResourceOccupant
|
|
107
|
+
asResourceOccupant: options.asResourceOccupant,
|
|
108
|
+
breakoutsSupported: options.breakoutsSupported,
|
|
101
109
|
})
|
|
102
110
|
.then((res) => {
|
|
103
111
|
Metrics.postEvent({
|
|
@@ -107,8 +115,8 @@ MeetingUtil.joinMeeting = (meeting, options) => {
|
|
|
107
115
|
trigger: trigger.LOCI_UPDATE,
|
|
108
116
|
locus: res.body.locus,
|
|
109
117
|
mediaConnections: res.body.mediaConnections,
|
|
110
|
-
trackingId: res.headers.trackingid
|
|
111
|
-
}
|
|
118
|
+
trackingId: res.headers.trackingid,
|
|
119
|
+
},
|
|
112
120
|
});
|
|
113
121
|
|
|
114
122
|
return MeetingUtil.parseLocusJoin(res);
|
|
@@ -116,8 +124,12 @@ MeetingUtil.joinMeeting = (meeting, options) => {
|
|
|
116
124
|
};
|
|
117
125
|
|
|
118
126
|
MeetingUtil.cleanUp = (meeting) => {
|
|
127
|
+
meeting.breakouts.cleanUp();
|
|
128
|
+
|
|
119
129
|
// make sure we send last metrics before we close the peerconnection
|
|
120
|
-
const stopStatsAnalyzer =
|
|
130
|
+
const stopStatsAnalyzer = meeting.statsAnalyzer
|
|
131
|
+
? meeting.statsAnalyzer.stopAnalyzer()
|
|
132
|
+
: Promise.resolve();
|
|
121
133
|
|
|
122
134
|
return stopStatsAnalyzer
|
|
123
135
|
.then(() => meeting.closeLocalStream())
|
|
@@ -131,7 +143,8 @@ MeetingUtil.cleanUp = (meeting) => {
|
|
|
131
143
|
meeting.unsetPeerConnections();
|
|
132
144
|
meeting.reconnectionManager.cleanUp();
|
|
133
145
|
})
|
|
134
|
-
.then(() => meeting.stopKeepAlive())
|
|
146
|
+
.then(() => meeting.stopKeepAlive())
|
|
147
|
+
.then(() => meeting.updateLLMConnection());
|
|
135
148
|
};
|
|
136
149
|
|
|
137
150
|
MeetingUtil.disconnectPhoneAudio = (meeting, phoneUrl) => {
|
|
@@ -143,7 +156,7 @@ MeetingUtil.disconnectPhoneAudio = (meeting, phoneUrl) => {
|
|
|
143
156
|
locusUrl: meeting.locusUrl,
|
|
144
157
|
selfId: meeting.selfId,
|
|
145
158
|
correlationId: meeting.correlationId,
|
|
146
|
-
phoneUrl
|
|
159
|
+
phoneUrl,
|
|
147
160
|
};
|
|
148
161
|
|
|
149
162
|
return meeting.meetingRequest
|
|
@@ -155,9 +168,7 @@ MeetingUtil.disconnectPhoneAudio = (meeting, phoneUrl) => {
|
|
|
155
168
|
})
|
|
156
169
|
.catch((err) => {
|
|
157
170
|
LoggerProxy.logger.error(
|
|
158
|
-
`Meeting:util#disconnectPhoneAudio --> An error occured while disconnecting phone audio in meeting ${
|
|
159
|
-
meeting.id
|
|
160
|
-
}, error: ${err}`
|
|
171
|
+
`Meeting:util#disconnectPhoneAudio --> An error occured while disconnecting phone audio in meeting ${meeting.id}, error: ${err}`
|
|
161
172
|
);
|
|
162
173
|
|
|
163
174
|
return Promise.reject(err);
|
|
@@ -168,7 +179,7 @@ MeetingUtil.disconnectPhoneAudio = (meeting, phoneUrl) => {
|
|
|
168
179
|
// if you explicity want it not to leave on resource id, pass
|
|
169
180
|
// {resourceId: null}
|
|
170
181
|
// TODO: chris, you can modify this however you want
|
|
171
|
-
MeetingUtil.leaveMeeting = (meeting, options = {}) => {
|
|
182
|
+
MeetingUtil.leaveMeeting = (meeting, options: any = {}) => {
|
|
172
183
|
if (meeting.meetingState === FULL_STATE.INACTIVE) {
|
|
173
184
|
// TODO: clean up if the meeting is already inactive
|
|
174
185
|
return Promise.reject(new MeetingNotActiveError());
|
|
@@ -183,7 +194,7 @@ MeetingUtil.leaveMeeting = (meeting, options = {}) => {
|
|
|
183
194
|
selfId: meeting.selfId,
|
|
184
195
|
correlationId: meeting.correlationId,
|
|
185
196
|
resourceId: meeting.resourceId,
|
|
186
|
-
deviceUrl: meeting.deviceUrl
|
|
197
|
+
deviceUrl: meeting.deviceUrl,
|
|
187
198
|
};
|
|
188
199
|
|
|
189
200
|
const leaveOptions = {...defaultOptions, ...options};
|
|
@@ -191,7 +202,8 @@ MeetingUtil.leaveMeeting = (meeting, options = {}) => {
|
|
|
191
202
|
return meeting.meetingRequest
|
|
192
203
|
.leaveMeeting(leaveOptions)
|
|
193
204
|
.then((response) => {
|
|
194
|
-
if (response && response.body && response.body.locus) {
|
|
205
|
+
if (response && response.body && response.body.locus) {
|
|
206
|
+
// && !options.moveMeeting) {
|
|
195
207
|
meeting.locusInfo.onFullLocus(response.body.locus);
|
|
196
208
|
}
|
|
197
209
|
|
|
@@ -209,9 +221,7 @@ MeetingUtil.leaveMeeting = (meeting, options = {}) => {
|
|
|
209
221
|
// 1) on leave clean up the meeting or simply do a sync on the meeting
|
|
210
222
|
// 2) If the error says meeting is inactive then destroy the meeting object
|
|
211
223
|
LoggerProxy.logger.error(
|
|
212
|
-
`Meeting:util#leaveMeeting --> An error occured while trying to leave meeting with an id of ${
|
|
213
|
-
meeting.id
|
|
214
|
-
}, error: ${err}`
|
|
224
|
+
`Meeting:util#leaveMeeting --> An error occured while trying to leave meeting with an id of ${meeting.id}, error: ${err}`
|
|
215
225
|
);
|
|
216
226
|
|
|
217
227
|
return Promise.reject(err);
|
|
@@ -221,23 +231,20 @@ MeetingUtil.declineMeeting = (meeting, reason) =>
|
|
|
221
231
|
meeting.meetingRequest.declineMeeting({
|
|
222
232
|
locusUrl: meeting.locusUrl,
|
|
223
233
|
deviceUrl: meeting.deviceUrl,
|
|
224
|
-
reason
|
|
234
|
+
reason,
|
|
225
235
|
});
|
|
226
236
|
|
|
227
|
-
MeetingUtil.isUserInLeftState = (locusInfo) =>
|
|
228
|
-
locusInfo.parsedLocus?.self?.state === _LEFT_;
|
|
237
|
+
MeetingUtil.isUserInLeftState = (locusInfo) => locusInfo.parsedLocus?.self?.state === _LEFT_;
|
|
229
238
|
|
|
230
|
-
MeetingUtil.isUserInIdleState = (locusInfo) =>
|
|
231
|
-
locusInfo.parsedLocus?.self?.state === _IDLE_;
|
|
239
|
+
MeetingUtil.isUserInIdleState = (locusInfo) => locusInfo.parsedLocus?.self?.state === _IDLE_;
|
|
232
240
|
|
|
233
|
-
MeetingUtil.isUserInJoinedState = (locusInfo) =>
|
|
234
|
-
locusInfo.parsedLocus?.self?.state === _JOINED_;
|
|
241
|
+
MeetingUtil.isUserInJoinedState = (locusInfo) => locusInfo.parsedLocus?.self?.state === _JOINED_;
|
|
235
242
|
|
|
236
243
|
MeetingUtil.isMediaEstablished = (currentMediaStatus) =>
|
|
237
|
-
currentMediaStatus &&
|
|
238
|
-
|
|
244
|
+
currentMediaStatus &&
|
|
245
|
+
(currentMediaStatus.audio || currentMediaStatus.video || currentMediaStatus.share);
|
|
239
246
|
|
|
240
|
-
MeetingUtil.joinMeetingOptions = (meeting, options = {}) => {
|
|
247
|
+
MeetingUtil.joinMeetingOptions = (meeting, options: any = {}) => {
|
|
241
248
|
meeting.resourceId = meeting.resourceId || options.resourceId;
|
|
242
249
|
|
|
243
250
|
if (meeting.requiredCaptcha) {
|
|
@@ -250,7 +257,7 @@ MeetingUtil.joinMeetingOptions = (meeting, options = {}) => {
|
|
|
250
257
|
if (options.pin) {
|
|
251
258
|
Metrics.postEvent({
|
|
252
259
|
event: eventType.PIN_COLLECTED,
|
|
253
|
-
meeting
|
|
260
|
+
meeting,
|
|
254
261
|
});
|
|
255
262
|
}
|
|
256
263
|
|
|
@@ -266,7 +273,7 @@ MeetingUtil.joinMeetingOptions = (meeting, options = {}) => {
|
|
|
266
273
|
if (MeetingUtil.isPinOrGuest(err)) {
|
|
267
274
|
Metrics.postEvent({
|
|
268
275
|
event: eventType.PIN_PROMPT,
|
|
269
|
-
meeting
|
|
276
|
+
meeting,
|
|
270
277
|
});
|
|
271
278
|
|
|
272
279
|
// request host pin or non host for unclaimed PMR, start of Scenario C
|
|
@@ -280,9 +287,7 @@ MeetingUtil.joinMeetingOptions = (meeting, options = {}) => {
|
|
|
280
287
|
};
|
|
281
288
|
|
|
282
289
|
MeetingUtil.validateOptions = (options) => {
|
|
283
|
-
const {
|
|
284
|
-
sendVideo, sendAudio, sendShare, localStream, localShare
|
|
285
|
-
} = options;
|
|
290
|
+
const {sendVideo, sendAudio, sendShare, localStream, localShare} = options;
|
|
286
291
|
|
|
287
292
|
if (sendVideo && !MeetingUtil.getTrack(localStream).videoTrack) {
|
|
288
293
|
return Promise.reject(new ParameterError('please pass valid video streams'));
|
|
@@ -340,71 +345,34 @@ MeetingUtil.getPolicyFromLocusInfo = (locusInfo) =>
|
|
|
340
345
|
locusInfo.parsedLocus.info &&
|
|
341
346
|
locusInfo.parsedLocus.info.policy;
|
|
342
347
|
|
|
343
|
-
MeetingUtil.getUserDisplayHintsFromLocusInfo = (locusInfo) =>
|
|
344
|
-
|
|
345
|
-
MeetingUtil.canInviteNewParticipants = (displayHints) => displayHints.includes(DISPLAY_HINTS.ADD_GUEST);
|
|
346
|
-
|
|
347
|
-
MeetingUtil.canAdmitParticipant = (displayHints) => displayHints.includes(DISPLAY_HINTS.ROSTER_WAITING_TO_JOIN);
|
|
348
|
-
|
|
349
|
-
MeetingUtil.canUserLock = (displayHints) => displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_LOCK) && displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_UNLOCKED);
|
|
348
|
+
MeetingUtil.getUserDisplayHintsFromLocusInfo = (locusInfo) =>
|
|
349
|
+
locusInfo?.parsedLocus?.info?.userDisplayHints || [];
|
|
350
350
|
|
|
351
|
-
MeetingUtil.
|
|
351
|
+
MeetingUtil.canInviteNewParticipants = (displayHints) =>
|
|
352
|
+
displayHints.includes(DISPLAY_HINTS.ADD_GUEST);
|
|
352
353
|
|
|
353
|
-
MeetingUtil.
|
|
354
|
+
MeetingUtil.canAdmitParticipant = (displayHints) =>
|
|
355
|
+
displayHints.includes(DISPLAY_HINTS.ROSTER_WAITING_TO_JOIN);
|
|
354
356
|
|
|
355
|
-
MeetingUtil.
|
|
357
|
+
MeetingUtil.canUserLock = (displayHints) =>
|
|
358
|
+
displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_LOCK) &&
|
|
359
|
+
displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_UNLOCKED);
|
|
356
360
|
|
|
357
|
-
MeetingUtil.
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
MeetingUtil.startRecording = (request, locusUrl, locusInfo) => {
|
|
362
|
-
const displayHints = MeetingUtil.getUserDisplayHintsFromLocusInfo(locusInfo);
|
|
363
|
-
|
|
364
|
-
if (MeetingUtil.canUserRecord(displayHints)) {
|
|
365
|
-
return request.recordMeeting({locusUrl, recording: true, paused: false});
|
|
366
|
-
}
|
|
367
|
-
|
|
368
|
-
return Promise.reject(new PermissionError('Start recording not allowed, due to moderator property.'));
|
|
369
|
-
};
|
|
370
|
-
|
|
371
|
-
MeetingUtil.pauseRecording = (request, locusUrl, locusInfo) => {
|
|
372
|
-
const displayHints = MeetingUtil.getUserDisplayHintsFromLocusInfo(locusInfo);
|
|
373
|
-
|
|
374
|
-
if (MeetingUtil.canUserPause(displayHints)) {
|
|
375
|
-
return request.recordMeeting({locusUrl, recording: true, paused: true});
|
|
376
|
-
}
|
|
377
|
-
|
|
378
|
-
return Promise.reject(new PermissionError('Pause recording not allowed, due to moderator property.'));
|
|
379
|
-
};
|
|
380
|
-
|
|
381
|
-
MeetingUtil.resumeRecording = (request, locusUrl, locusInfo) => {
|
|
382
|
-
const displayHints = MeetingUtil.getUserDisplayHintsFromLocusInfo(locusInfo);
|
|
383
|
-
|
|
384
|
-
if (MeetingUtil.canUserResume(displayHints)) {
|
|
385
|
-
return request.recordMeeting({locusUrl, recording: true, paused: false});
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
return Promise.reject(new PermissionError('Resume recording not allowed, due to moderator property.'));
|
|
389
|
-
};
|
|
390
|
-
|
|
391
|
-
MeetingUtil.stopRecording = (request, locusUrl, locusInfo) => {
|
|
392
|
-
const displayHints = MeetingUtil.getUserDisplayHintsFromLocusInfo(locusInfo);
|
|
393
|
-
|
|
394
|
-
if (MeetingUtil.canUserStop(displayHints)) {
|
|
395
|
-
return request.recordMeeting({locusUrl, recording: false, paused: false});
|
|
396
|
-
}
|
|
397
|
-
|
|
398
|
-
return Promise.reject(new PermissionError('Stop recording not allowed, due to moderator property.'));
|
|
399
|
-
};
|
|
361
|
+
MeetingUtil.canUserUnlock = (displayHints) =>
|
|
362
|
+
displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_UNLOCK) &&
|
|
363
|
+
displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_LOCKED);
|
|
400
364
|
|
|
401
365
|
MeetingUtil.canUserRaiseHand = (displayHints) => displayHints.includes(DISPLAY_HINTS.RAISE_HAND);
|
|
402
366
|
|
|
403
|
-
MeetingUtil.canUserLowerAllHands = (displayHints) =>
|
|
367
|
+
MeetingUtil.canUserLowerAllHands = (displayHints) =>
|
|
368
|
+
displayHints.includes(DISPLAY_HINTS.LOWER_ALL_HANDS);
|
|
404
369
|
|
|
405
|
-
MeetingUtil.canUserLowerSomeoneElsesHand = (displayHints) =>
|
|
370
|
+
MeetingUtil.canUserLowerSomeoneElsesHand = (displayHints) =>
|
|
371
|
+
displayHints.includes(DISPLAY_HINTS.LOWER_SOMEONE_ELSES_HAND);
|
|
406
372
|
|
|
407
|
-
MeetingUtil.bothLeaveAndEndMeetingAvailable = (displayHints) =>
|
|
373
|
+
MeetingUtil.bothLeaveAndEndMeetingAvailable = (displayHints) =>
|
|
374
|
+
displayHints.includes(DISPLAY_HINTS.LEAVE_TRANSFER_HOST_END_MEETING) ||
|
|
375
|
+
displayHints.includes(DISPLAY_HINTS.LEAVE_END_MEETING);
|
|
408
376
|
|
|
409
377
|
MeetingUtil.lockMeeting = (actions, request, locusUrl) => {
|
|
410
378
|
if (actions && actions.canLock) {
|
|
@@ -476,31 +444,60 @@ MeetingUtil.endMeetingForAll = (meeting) => {
|
|
|
476
444
|
.then(() => MeetingUtil.cleanUp(meeting))
|
|
477
445
|
.catch((err) => {
|
|
478
446
|
LoggerProxy.logger.error(
|
|
479
|
-
`Meeting:util#endMeetingForAll An error occured while trying to end meeting for all with an id of ${
|
|
480
|
-
meeting.id
|
|
481
|
-
}, error: ${err}`
|
|
447
|
+
`Meeting:util#endMeetingForAll An error occured while trying to end meeting for all with an id of ${meeting.id}, error: ${err}`
|
|
482
448
|
);
|
|
483
449
|
|
|
484
450
|
return Promise.reject(err);
|
|
485
451
|
});
|
|
486
452
|
};
|
|
487
453
|
|
|
488
|
-
MeetingUtil.canEnableClosedCaption = (displayHints) =>
|
|
454
|
+
MeetingUtil.canEnableClosedCaption = (displayHints) =>
|
|
455
|
+
displayHints.includes(DISPLAY_HINTS.CAPTION_START);
|
|
456
|
+
|
|
457
|
+
MeetingUtil.canStartTranscribing = (displayHints) =>
|
|
458
|
+
displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_START);
|
|
459
|
+
|
|
460
|
+
MeetingUtil.canStopTranscribing = (displayHints) =>
|
|
461
|
+
displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_STOP);
|
|
462
|
+
|
|
463
|
+
MeetingUtil.isClosedCaptionActive = (displayHints) =>
|
|
464
|
+
displayHints.includes(DISPLAY_HINTS.CAPTION_STATUS_ACTIVE);
|
|
465
|
+
|
|
466
|
+
MeetingUtil.isWebexAssistantActive = (displayHints) =>
|
|
467
|
+
displayHints.includes(DISPLAY_HINTS.WEBEX_ASSISTANT_STATUS_ACTIVE);
|
|
489
468
|
|
|
490
|
-
MeetingUtil.
|
|
469
|
+
MeetingUtil.canViewCaptionPanel = (displayHints) =>
|
|
470
|
+
displayHints.includes(DISPLAY_HINTS.ENABLE_CAPTION_PANEL);
|
|
491
471
|
|
|
492
|
-
MeetingUtil.
|
|
472
|
+
MeetingUtil.isRealTimeTranslationEnabled = (displayHints) =>
|
|
473
|
+
displayHints.includes(DISPLAY_HINTS.DISPLAY_REAL_TIME_TRANSLATION);
|
|
493
474
|
|
|
494
|
-
MeetingUtil.
|
|
475
|
+
MeetingUtil.canSelectSpokenLanguages = (displayHints) =>
|
|
476
|
+
displayHints.includes(DISPLAY_HINTS.DISPLAY_NON_ENGLISH_ASR);
|
|
495
477
|
|
|
496
|
-
MeetingUtil.
|
|
478
|
+
MeetingUtil.waitingForOthersToJoin = (displayHints) =>
|
|
479
|
+
displayHints.includes(DISPLAY_HINTS.WAITING_FOR_OTHERS);
|
|
497
480
|
|
|
498
|
-
MeetingUtil.
|
|
481
|
+
MeetingUtil.canEnableReactions = (originalValue, displayHints) => {
|
|
482
|
+
if (displayHints.includes(DISPLAY_HINTS.ENABLE_REACTIONS)) {
|
|
483
|
+
return true;
|
|
484
|
+
}
|
|
485
|
+
if (displayHints.includes(DISPLAY_HINTS.DISABLE_REACTIONS)) {
|
|
486
|
+
return false;
|
|
487
|
+
}
|
|
499
488
|
|
|
500
|
-
|
|
489
|
+
return originalValue;
|
|
490
|
+
};
|
|
501
491
|
|
|
502
|
-
MeetingUtil.
|
|
492
|
+
MeetingUtil.canSendReactions = (originalValue, displayHints) => {
|
|
493
|
+
if (displayHints.includes(DISPLAY_HINTS.REACTIONS_ACTIVE)) {
|
|
494
|
+
return true;
|
|
495
|
+
}
|
|
496
|
+
if (displayHints.includes(DISPLAY_HINTS.REACTIONS_INACTIVE)) {
|
|
497
|
+
return false;
|
|
498
|
+
}
|
|
503
499
|
|
|
504
|
-
|
|
500
|
+
return originalValue;
|
|
501
|
+
};
|
|
505
502
|
|
|
506
503
|
export default MeetingUtil;
|
|
@@ -24,14 +24,18 @@ export default class MeetingInfoCollection extends Collection {
|
|
|
24
24
|
* @public
|
|
25
25
|
* @memberof MeetingInfoCollection
|
|
26
26
|
*/
|
|
27
|
-
get(id) {
|
|
27
|
+
public get(id: string) {
|
|
28
|
+
// @ts-ignore
|
|
28
29
|
if (this.meetingInfos[id]) {
|
|
30
|
+
// @ts-ignore
|
|
29
31
|
return this.meetingInfos[id];
|
|
30
32
|
}
|
|
31
33
|
|
|
32
34
|
return find(
|
|
35
|
+
// @ts-ignore
|
|
33
36
|
this.meetingInfos,
|
|
34
|
-
(info) =>
|
|
37
|
+
(info) =>
|
|
38
|
+
info.sipUrl === id || info.locusId === id || info.userId === id || info.meetingLink === id
|
|
35
39
|
);
|
|
36
40
|
}
|
|
37
41
|
}
|