@webex/plugin-meetings 3.0.0-beta.4 → 3.0.0-beta.40
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 +137 -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/edit-lock-error.js +52 -0
- package/dist/breakouts/edit-lock-error.js.map +1 -0
- package/dist/breakouts/index.js +546 -0
- package/dist/breakouts/index.js.map +1 -0
- package/dist/breakouts/request.js +78 -0
- package/dist/breakouts/request.js.map +1 -0
- package/dist/breakouts/utils.js +48 -0
- package/dist/breakouts/utils.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 +109 -49
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/constants.js +14 -0
- package/dist/controls-options-manager/constants.js.map +1 -0
- package/dist/controls-options-manager/enums.js +15 -0
- package/dist/controls-options-manager/enums.js.map +1 -0
- package/dist/controls-options-manager/index.js +203 -0
- package/dist/controls-options-manager/index.js.map +1 -0
- package/dist/controls-options-manager/util.js +28 -0
- package/dist/controls-options-manager/util.js.map +1 -0
- package/dist/index.js +11 -18
- 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 +186 -192
- 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 +66 -153
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +83 -117
- 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 +505 -495
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +13 -14
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +2141 -2210
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/muteState.js +59 -82
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +308 -264
- 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 +45 -217
- 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 +116 -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 +95 -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 +1 -13
- package/dist/metrics/config.js.map +1 -1
- package/dist/metrics/constants.js +1 -6
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +54 -156
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +74 -52
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/receiveSlot.js +48 -65
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/multistream/receiveSlotManager.js +60 -82
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +60 -76
- 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 +360 -413
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/networkQualityMonitor/index.js +40 -59
- 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 +147 -183
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +15 -23
- 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 -456
- 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 +48 -70
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +143 -131
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +91 -98
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/statsAnalyzer/global.js +1 -95
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.js +361 -449
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +137 -81
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.js +22 -47
- package/dist/transcription/index.js.map +1 -1
- package/dist/types/breakouts/breakout.d.ts +8 -0
- package/dist/types/breakouts/collection.d.ts +5 -0
- package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
- package/dist/types/breakouts/index.d.ts +5 -0
- package/dist/types/breakouts/request.d.ts +22 -0
- package/dist/types/breakouts/utils.d.ts +8 -0
- package/dist/types/common/browser-detection.d.ts +9 -0
- package/dist/types/common/collection.d.ts +48 -0
- package/dist/types/common/config.d.ts +2 -0
- package/dist/types/common/errors/captcha-error.d.ts +15 -0
- package/dist/types/common/errors/intent-to-join.d.ts +16 -0
- package/dist/types/common/errors/join-meeting.d.ts +17 -0
- package/dist/types/common/errors/media.d.ts +15 -0
- package/dist/types/common/errors/parameter.d.ts +15 -0
- package/dist/types/common/errors/password-error.d.ts +15 -0
- package/dist/types/common/errors/permission.d.ts +14 -0
- package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
- package/dist/types/common/errors/reconnection.d.ts +15 -0
- package/dist/types/common/errors/stats.d.ts +15 -0
- package/dist/types/common/errors/webex-errors.d.ts +69 -0
- package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
- package/dist/types/common/events/events-scope.d.ts +17 -0
- package/dist/types/common/events/events.d.ts +12 -0
- package/dist/types/common/events/trigger-proxy.d.ts +2 -0
- package/dist/types/common/events/util.d.ts +2 -0
- package/dist/types/common/logs/logger-config.d.ts +2 -0
- package/dist/types/common/logs/logger-proxy.d.ts +2 -0
- package/dist/types/common/logs/request.d.ts +34 -0
- package/dist/types/common/queue.d.ts +32 -0
- package/dist/types/config.d.ts +77 -0
- package/dist/types/constants.d.ts +916 -0
- package/dist/types/controls-options-manager/constants.d.ts +4 -0
- package/dist/types/controls-options-manager/enums.d.ts +5 -0
- package/dist/types/controls-options-manager/index.d.ts +120 -0
- package/dist/types/controls-options-manager/util.d.ts +7 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/locus-info/controlsUtils.d.ts +2 -0
- package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
- package/dist/types/locus-info/fullState.d.ts +2 -0
- package/dist/types/locus-info/hostUtils.d.ts +2 -0
- package/dist/types/locus-info/index.d.ts +269 -0
- package/dist/types/locus-info/infoUtils.d.ts +2 -0
- package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
- package/dist/types/locus-info/parser.d.ts +212 -0
- package/dist/types/locus-info/selfUtils.d.ts +2 -0
- package/dist/types/media/index.d.ts +32 -0
- package/dist/types/media/properties.d.ts +108 -0
- package/dist/types/media/util.d.ts +2 -0
- package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +83 -0
- package/dist/types/meeting/index.d.ts +1699 -0
- package/dist/types/meeting/muteState.d.ts +116 -0
- package/dist/types/meeting/request.d.ts +271 -0
- package/dist/types/meeting/request.type.d.ts +11 -0
- package/dist/types/meeting/state.d.ts +9 -0
- package/dist/types/meeting/util.d.ts +2 -0
- package/dist/types/meeting-info/collection.d.ts +20 -0
- package/dist/types/meeting-info/index.d.ts +57 -0
- package/dist/types/meeting-info/meeting-info-v2.d.ts +93 -0
- package/dist/types/meeting-info/request.d.ts +22 -0
- package/dist/types/meeting-info/util.d.ts +2 -0
- package/dist/types/meeting-info/utilv2.d.ts +2 -0
- package/dist/types/meetings/collection.d.ts +23 -0
- package/dist/types/meetings/index.d.ts +297 -0
- package/dist/types/meetings/request.d.ts +27 -0
- package/dist/types/meetings/util.d.ts +18 -0
- package/dist/types/member/index.d.ts +146 -0
- package/dist/types/member/util.d.ts +2 -0
- package/dist/types/members/collection.d.ts +24 -0
- package/dist/types/members/index.d.ts +320 -0
- package/dist/types/members/request.d.ts +50 -0
- package/dist/types/members/util.d.ts +2 -0
- package/dist/types/metrics/config.d.ts +169 -0
- package/dist/types/metrics/constants.d.ts +53 -0
- package/dist/types/metrics/index.d.ts +152 -0
- package/dist/types/multistream/mediaRequestManager.d.ts +51 -0
- package/dist/types/multistream/receiveSlot.d.ts +64 -0
- package/dist/types/multistream/receiveSlotManager.d.ts +46 -0
- package/dist/types/multistream/remoteMedia.d.ts +100 -0
- package/dist/types/multistream/remoteMediaGroup.d.ts +56 -0
- package/dist/types/multistream/remoteMediaManager.d.ts +241 -0
- package/dist/types/networkQualityMonitor/index.d.ts +70 -0
- package/dist/types/personal-meeting-room/index.d.ts +47 -0
- package/dist/types/personal-meeting-room/request.d.ts +14 -0
- package/dist/types/personal-meeting-room/util.d.ts +2 -0
- package/dist/types/reachability/index.d.ts +140 -0
- package/dist/types/reachability/request.d.ts +37 -0
- package/dist/types/reactions/constants.d.ts +3 -0
- package/dist/types/reactions/reactions.d.ts +4 -0
- package/dist/types/reactions/reactions.type.d.ts +52 -0
- package/dist/types/reconnection-manager/index.d.ts +117 -0
- package/dist/types/recording-controller/enums.d.ts +7 -0
- package/dist/types/recording-controller/index.d.ts +193 -0
- package/dist/types/recording-controller/util.d.ts +13 -0
- package/dist/types/roap/index.d.ts +77 -0
- package/dist/types/roap/request.d.ts +38 -0
- package/dist/types/roap/turnDiscovery.d.ts +74 -0
- package/dist/types/statsAnalyzer/global.d.ts +36 -0
- package/dist/types/statsAnalyzer/index.d.ts +195 -0
- package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
- package/dist/types/transcription/index.d.ts +64 -0
- package/internal-README.md +7 -6
- package/package.json +27 -21
- package/src/breakouts/README.md +199 -0
- package/src/breakouts/breakout.ts +130 -0
- package/src/breakouts/collection.ts +19 -0
- package/src/breakouts/edit-lock-error.ts +25 -0
- package/src/breakouts/index.ts +504 -0
- package/src/breakouts/request.ts +55 -0
- package/src/breakouts/utils.ts +39 -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.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 +62 -5
- package/src/controls-options-manager/constants.ts +5 -0
- package/src/controls-options-manager/enums.ts +6 -0
- package/src/controls-options-manager/index.ts +183 -0
- package/src/controls-options-manager/util.ts +20 -0
- package/src/index.js +4 -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} +150 -66
- 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} +182 -173
- package/src/media/{properties.js → properties.ts} +60 -37
- package/src/media/{util.js → util.ts} +2 -2
- package/src/mediaQualityMetrics/config.ts +384 -0
- package/src/meeting/in-meeting-actions.ts +31 -3
- package/src/meeting/{index.js → index.ts} +2512 -1579
- package/src/meeting/{muteState.js → muteState.ts} +95 -49
- package/src/meeting/{request.js → request.ts} +326 -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} +117 -119
- 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} +58 -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} +221 -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} +253 -92
- package/src/metrics/{constants.js → constants.ts} +0 -6
- package/src/metrics/{index.js → index.ts} +105 -94
- package/src/multistream/mediaRequestManager.ts +101 -39
- package/src/multistream/receiveSlot.ts +62 -26
- package/src/multistream/receiveSlotManager.ts +35 -21
- package/src/multistream/remoteMedia.ts +38 -5
- package/src/multistream/remoteMediaGroup.ts +4 -3
- package/src/multistream/remoteMediaManager.ts +152 -36
- package/src/networkQualityMonitor/{index.js → index.ts} +41 -29
- 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} +109 -85
- package/src/reachability/request.ts +46 -35
- 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} +196 -103
- 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} +77 -60
- package/src/roap/request.ts +172 -0
- package/src/roap/turnDiscovery.ts +81 -41
- package/src/statsAnalyzer/global.ts +37 -0
- package/src/statsAnalyzer/index.ts +1234 -0
- package/src/statsAnalyzer/mqaUtil.ts +293 -0
- package/src/transcription/{index.js → index.ts} +46 -39
- package/test/integration/spec/converged-space-meetings.js +176 -0
- package/test/integration/spec/journey.js +665 -464
- package/test/integration/spec/space-meeting.js +320 -206
- package/test/integration/spec/transcription.js +7 -8
- package/test/unit/spec/breakouts/breakout.ts +147 -0
- package/test/unit/spec/breakouts/collection.ts +15 -0
- package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
- package/test/unit/spec/breakouts/index.ts +707 -0
- package/test/unit/spec/breakouts/request.ts +104 -0
- package/test/unit/spec/breakouts/utils.js +47 -0
- package/test/unit/spec/common/browser-detection.js +9 -28
- package/test/unit/spec/controls-options-manager/index.js +124 -0
- package/test/unit/spec/controls-options-manager/util.js +66 -0
- 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 +39 -53
- package/test/unit/spec/media/properties.ts +9 -9
- package/test/unit/spec/meeting/in-meeting-actions.ts +13 -2
- package/test/unit/spec/meeting/index.js +2253 -811
- package/test/unit/spec/meeting/muteState.js +74 -55
- package/test/unit/spec/meeting/request.js +141 -43
- package/test/unit/spec/meeting/utils.js +106 -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 +318 -64
- package/test/unit/spec/multistream/receiveSlot.ts +68 -17
- package/test/unit/spec/multistream/receiveSlotManager.ts +41 -13
- package/test/unit/spec/multistream/remoteMedia.ts +38 -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 +24 -18
- package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
- package/test/unit/spec/reachability/index.ts +70 -27
- package/test/unit/spec/reachability/request.js +66 -0
- package/test/unit/spec/reconnection-manager/index.js +58 -30
- 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 +12 -8
- package/test/unit/spec/roap/request.ts +217 -0
- package/test/unit/spec/roap/turnDiscovery.ts +72 -49
- package/test/unit/spec/stats-analyzer/index.js +86 -57
- package/test/utils/cmr.js +44 -42
- package/test/utils/constants.js +9 -0
- package/test/utils/testUtils.js +98 -77
- package/test/utils/webex-config.js +22 -18
- package/test/utils/webex-test-users.js +57 -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/meeting/effectsState.js +0 -327
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/multistream/multistreamMedia.js +0 -116
- package/dist/multistream/multistreamMedia.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/mediaQualityMetrics/config.js +0 -382
- package/src/meeting/effectsState.js +0 -205
- package/src/meeting-info/meeting-info-v2.js +0 -255
- package/src/meetings/index.js +0 -1015
- package/src/multistream/multistreamMedia.ts +0 -92
- package/src/peer-connection-manager/util.ts +0 -117
- package/src/roap/request.js +0 -127
- package/src/statsAnalyzer/global.js +0 -133
- package/src/statsAnalyzer/index.js +0 -1006
- package/src/statsAnalyzer/mqaUtil.js +0 -173
- package/test/unit/spec/meeting/effectsState.js +0 -291
- package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
- /package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
|
@@ -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;
|
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
import {isEmpty} from 'lodash';
|
|
2
|
+
import {LocalCameraTrack, LocalMicrophoneTrack} from '@webex/internal-media-core';
|
|
2
3
|
|
|
3
4
|
import {MeetingNotActiveError, UserNotJoinedError} from '../common/errors/webex-errors';
|
|
4
5
|
import Metrics from '../metrics';
|
|
5
6
|
import {eventType, trigger} from '../metrics/config';
|
|
6
7
|
import Media from '../media';
|
|
7
8
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
8
|
-
import {
|
|
9
|
+
import {
|
|
10
|
+
INTENT_TO_JOIN,
|
|
9
11
|
_LEFT_,
|
|
10
12
|
_IDLE_,
|
|
11
13
|
_JOINED_,
|
|
12
14
|
PASSWORD_STATUS,
|
|
13
15
|
DISPLAY_HINTS,
|
|
14
|
-
FULL_STATE
|
|
16
|
+
FULL_STATE,
|
|
17
|
+
} from '../constants';
|
|
15
18
|
import IntentToJoinError from '../common/errors/intent-to-join';
|
|
16
19
|
import JoinMeetingError from '../common/errors/join-meeting';
|
|
17
20
|
import ParameterError from '../common/errors/parameter';
|
|
@@ -19,10 +22,10 @@ import PermissionError from '../common/errors/permission';
|
|
|
19
22
|
import PasswordError from '../common/errors/password-error';
|
|
20
23
|
import CaptchaError from '../common/errors/captcha-error';
|
|
21
24
|
|
|
22
|
-
const MeetingUtil = {};
|
|
25
|
+
const MeetingUtil: any = {};
|
|
23
26
|
|
|
24
27
|
MeetingUtil.parseLocusJoin = (response) => {
|
|
25
|
-
const parsed = {};
|
|
28
|
+
const parsed: any = {};
|
|
26
29
|
|
|
27
30
|
// First todo: add check for existance
|
|
28
31
|
parsed.locus = response.body.locus;
|
|
@@ -48,30 +51,35 @@ MeetingUtil.remoteUpdateAudioVideo = (audioMuted, videoMuted, meeting) => {
|
|
|
48
51
|
const localMedias = Media.generateLocalMedias(meeting.mediaId, audioMuted, videoMuted);
|
|
49
52
|
|
|
50
53
|
if (isEmpty(localMedias)) {
|
|
51
|
-
return Promise.reject(
|
|
54
|
+
return Promise.reject(
|
|
55
|
+
new ParameterError('You need a media id on the meeting to change remote audio.')
|
|
56
|
+
);
|
|
52
57
|
}
|
|
53
58
|
|
|
54
59
|
Metrics.postEvent({event: eventType.MEDIA_REQUEST, meeting});
|
|
55
60
|
|
|
56
|
-
return meeting.meetingRequest
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
61
|
+
return meeting.meetingRequest
|
|
62
|
+
.remoteAudioVideoToggle({
|
|
63
|
+
locusUrl: meeting.locusUrl,
|
|
64
|
+
selfId: meeting.selfId,
|
|
65
|
+
localMedias,
|
|
66
|
+
deviceUrl: meeting.deviceUrl,
|
|
67
|
+
correlationId: meeting.correlationId,
|
|
68
|
+
preferTranscoding: !meeting.isMultistream,
|
|
69
|
+
})
|
|
70
|
+
.then((response) => {
|
|
71
|
+
Metrics.postEvent({event: eventType.MEDIA_RESPONSE, meeting});
|
|
65
72
|
|
|
66
|
-
|
|
67
|
-
|
|
73
|
+
return response.body.locus;
|
|
74
|
+
});
|
|
68
75
|
};
|
|
69
76
|
|
|
70
77
|
MeetingUtil.hasOwner = (info) => info && info.owner;
|
|
71
78
|
|
|
72
79
|
MeetingUtil.isOwnerSelf = (owner, selfId) => owner === selfId;
|
|
73
80
|
|
|
74
|
-
MeetingUtil.isPinOrGuest = (err) =>
|
|
81
|
+
MeetingUtil.isPinOrGuest = (err) =>
|
|
82
|
+
err?.body?.errorCode && INTENT_TO_JOIN.includes(err.body.errorCode);
|
|
75
83
|
|
|
76
84
|
MeetingUtil.joinMeeting = (meeting, options) => {
|
|
77
85
|
if (!meeting) {
|
|
@@ -97,7 +105,8 @@ MeetingUtil.joinMeeting = (meeting, options) => {
|
|
|
97
105
|
pin: options.pin,
|
|
98
106
|
moveToResource: options.moveToResource,
|
|
99
107
|
preferTranscoding: !meeting.isMultistream,
|
|
100
|
-
asResourceOccupant: options.asResourceOccupant
|
|
108
|
+
asResourceOccupant: options.asResourceOccupant,
|
|
109
|
+
breakoutsSupported: options.breakoutsSupported,
|
|
101
110
|
})
|
|
102
111
|
.then((res) => {
|
|
103
112
|
Metrics.postEvent({
|
|
@@ -107,8 +116,8 @@ MeetingUtil.joinMeeting = (meeting, options) => {
|
|
|
107
116
|
trigger: trigger.LOCI_UPDATE,
|
|
108
117
|
locus: res.body.locus,
|
|
109
118
|
mediaConnections: res.body.mediaConnections,
|
|
110
|
-
trackingId: res.headers.trackingid
|
|
111
|
-
}
|
|
119
|
+
trackingId: res.headers.trackingid,
|
|
120
|
+
},
|
|
112
121
|
});
|
|
113
122
|
|
|
114
123
|
return MeetingUtil.parseLocusJoin(res);
|
|
@@ -116,8 +125,12 @@ MeetingUtil.joinMeeting = (meeting, options) => {
|
|
|
116
125
|
};
|
|
117
126
|
|
|
118
127
|
MeetingUtil.cleanUp = (meeting) => {
|
|
128
|
+
meeting.breakouts.cleanUp();
|
|
129
|
+
|
|
119
130
|
// make sure we send last metrics before we close the peerconnection
|
|
120
|
-
const stopStatsAnalyzer =
|
|
131
|
+
const stopStatsAnalyzer = meeting.statsAnalyzer
|
|
132
|
+
? meeting.statsAnalyzer.stopAnalyzer()
|
|
133
|
+
: Promise.resolve();
|
|
121
134
|
|
|
122
135
|
return stopStatsAnalyzer
|
|
123
136
|
.then(() => meeting.closeLocalStream())
|
|
@@ -131,7 +144,8 @@ MeetingUtil.cleanUp = (meeting) => {
|
|
|
131
144
|
meeting.unsetPeerConnections();
|
|
132
145
|
meeting.reconnectionManager.cleanUp();
|
|
133
146
|
})
|
|
134
|
-
.then(() => meeting.stopKeepAlive())
|
|
147
|
+
.then(() => meeting.stopKeepAlive())
|
|
148
|
+
.then(() => meeting.updateLLMConnection());
|
|
135
149
|
};
|
|
136
150
|
|
|
137
151
|
MeetingUtil.disconnectPhoneAudio = (meeting, phoneUrl) => {
|
|
@@ -143,7 +157,7 @@ MeetingUtil.disconnectPhoneAudio = (meeting, phoneUrl) => {
|
|
|
143
157
|
locusUrl: meeting.locusUrl,
|
|
144
158
|
selfId: meeting.selfId,
|
|
145
159
|
correlationId: meeting.correlationId,
|
|
146
|
-
phoneUrl
|
|
160
|
+
phoneUrl,
|
|
147
161
|
};
|
|
148
162
|
|
|
149
163
|
return meeting.meetingRequest
|
|
@@ -155,9 +169,7 @@ MeetingUtil.disconnectPhoneAudio = (meeting, phoneUrl) => {
|
|
|
155
169
|
})
|
|
156
170
|
.catch((err) => {
|
|
157
171
|
LoggerProxy.logger.error(
|
|
158
|
-
`Meeting:util#disconnectPhoneAudio --> An error occured while disconnecting phone audio in meeting ${
|
|
159
|
-
meeting.id
|
|
160
|
-
}, error: ${err}`
|
|
172
|
+
`Meeting:util#disconnectPhoneAudio --> An error occured while disconnecting phone audio in meeting ${meeting.id}, error: ${err}`
|
|
161
173
|
);
|
|
162
174
|
|
|
163
175
|
return Promise.reject(err);
|
|
@@ -168,7 +180,7 @@ MeetingUtil.disconnectPhoneAudio = (meeting, phoneUrl) => {
|
|
|
168
180
|
// if you explicity want it not to leave on resource id, pass
|
|
169
181
|
// {resourceId: null}
|
|
170
182
|
// TODO: chris, you can modify this however you want
|
|
171
|
-
MeetingUtil.leaveMeeting = (meeting, options = {}) => {
|
|
183
|
+
MeetingUtil.leaveMeeting = (meeting, options: any = {}) => {
|
|
172
184
|
if (meeting.meetingState === FULL_STATE.INACTIVE) {
|
|
173
185
|
// TODO: clean up if the meeting is already inactive
|
|
174
186
|
return Promise.reject(new MeetingNotActiveError());
|
|
@@ -183,7 +195,7 @@ MeetingUtil.leaveMeeting = (meeting, options = {}) => {
|
|
|
183
195
|
selfId: meeting.selfId,
|
|
184
196
|
correlationId: meeting.correlationId,
|
|
185
197
|
resourceId: meeting.resourceId,
|
|
186
|
-
deviceUrl: meeting.deviceUrl
|
|
198
|
+
deviceUrl: meeting.deviceUrl,
|
|
187
199
|
};
|
|
188
200
|
|
|
189
201
|
const leaveOptions = {...defaultOptions, ...options};
|
|
@@ -191,7 +203,8 @@ MeetingUtil.leaveMeeting = (meeting, options = {}) => {
|
|
|
191
203
|
return meeting.meetingRequest
|
|
192
204
|
.leaveMeeting(leaveOptions)
|
|
193
205
|
.then((response) => {
|
|
194
|
-
if (response && response.body && response.body.locus) {
|
|
206
|
+
if (response && response.body && response.body.locus) {
|
|
207
|
+
// && !options.moveMeeting) {
|
|
195
208
|
meeting.locusInfo.onFullLocus(response.body.locus);
|
|
196
209
|
}
|
|
197
210
|
|
|
@@ -209,9 +222,7 @@ MeetingUtil.leaveMeeting = (meeting, options = {}) => {
|
|
|
209
222
|
// 1) on leave clean up the meeting or simply do a sync on the meeting
|
|
210
223
|
// 2) If the error says meeting is inactive then destroy the meeting object
|
|
211
224
|
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}`
|
|
225
|
+
`Meeting:util#leaveMeeting --> An error occured while trying to leave meeting with an id of ${meeting.id}, error: ${err}`
|
|
215
226
|
);
|
|
216
227
|
|
|
217
228
|
return Promise.reject(err);
|
|
@@ -221,23 +232,20 @@ MeetingUtil.declineMeeting = (meeting, reason) =>
|
|
|
221
232
|
meeting.meetingRequest.declineMeeting({
|
|
222
233
|
locusUrl: meeting.locusUrl,
|
|
223
234
|
deviceUrl: meeting.deviceUrl,
|
|
224
|
-
reason
|
|
235
|
+
reason,
|
|
225
236
|
});
|
|
226
237
|
|
|
227
|
-
MeetingUtil.isUserInLeftState = (locusInfo) =>
|
|
228
|
-
locusInfo.parsedLocus?.self?.state === _LEFT_;
|
|
238
|
+
MeetingUtil.isUserInLeftState = (locusInfo) => locusInfo.parsedLocus?.self?.state === _LEFT_;
|
|
229
239
|
|
|
230
|
-
MeetingUtil.isUserInIdleState = (locusInfo) =>
|
|
231
|
-
locusInfo.parsedLocus?.self?.state === _IDLE_;
|
|
240
|
+
MeetingUtil.isUserInIdleState = (locusInfo) => locusInfo.parsedLocus?.self?.state === _IDLE_;
|
|
232
241
|
|
|
233
|
-
MeetingUtil.isUserInJoinedState = (locusInfo) =>
|
|
234
|
-
locusInfo.parsedLocus?.self?.state === _JOINED_;
|
|
242
|
+
MeetingUtil.isUserInJoinedState = (locusInfo) => locusInfo.parsedLocus?.self?.state === _JOINED_;
|
|
235
243
|
|
|
236
244
|
MeetingUtil.isMediaEstablished = (currentMediaStatus) =>
|
|
237
|
-
currentMediaStatus &&
|
|
238
|
-
|
|
245
|
+
currentMediaStatus &&
|
|
246
|
+
(currentMediaStatus.audio || currentMediaStatus.video || currentMediaStatus.share);
|
|
239
247
|
|
|
240
|
-
MeetingUtil.joinMeetingOptions = (meeting, options = {}) => {
|
|
248
|
+
MeetingUtil.joinMeetingOptions = (meeting, options: any = {}) => {
|
|
241
249
|
meeting.resourceId = meeting.resourceId || options.resourceId;
|
|
242
250
|
|
|
243
251
|
if (meeting.requiredCaptcha) {
|
|
@@ -250,7 +258,7 @@ MeetingUtil.joinMeetingOptions = (meeting, options = {}) => {
|
|
|
250
258
|
if (options.pin) {
|
|
251
259
|
Metrics.postEvent({
|
|
252
260
|
event: eventType.PIN_COLLECTED,
|
|
253
|
-
meeting
|
|
261
|
+
meeting,
|
|
254
262
|
});
|
|
255
263
|
}
|
|
256
264
|
|
|
@@ -266,7 +274,7 @@ MeetingUtil.joinMeetingOptions = (meeting, options = {}) => {
|
|
|
266
274
|
if (MeetingUtil.isPinOrGuest(err)) {
|
|
267
275
|
Metrics.postEvent({
|
|
268
276
|
event: eventType.PIN_PROMPT,
|
|
269
|
-
meeting
|
|
277
|
+
meeting,
|
|
270
278
|
});
|
|
271
279
|
|
|
272
280
|
// request host pin or non host for unclaimed PMR, start of Scenario C
|
|
@@ -280,9 +288,7 @@ MeetingUtil.joinMeetingOptions = (meeting, options = {}) => {
|
|
|
280
288
|
};
|
|
281
289
|
|
|
282
290
|
MeetingUtil.validateOptions = (options) => {
|
|
283
|
-
const {
|
|
284
|
-
sendVideo, sendAudio, sendShare, localStream, localShare
|
|
285
|
-
} = options;
|
|
291
|
+
const {sendVideo, sendAudio, sendShare, localStream, localShare} = options;
|
|
286
292
|
|
|
287
293
|
if (sendVideo && !MeetingUtil.getTrack(localStream).videoTrack) {
|
|
288
294
|
return Promise.reject(new ParameterError('please pass valid video streams'));
|
|
@@ -340,71 +346,34 @@ MeetingUtil.getPolicyFromLocusInfo = (locusInfo) =>
|
|
|
340
346
|
locusInfo.parsedLocus.info &&
|
|
341
347
|
locusInfo.parsedLocus.info.policy;
|
|
342
348
|
|
|
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);
|
|
349
|
+
MeetingUtil.getUserDisplayHintsFromLocusInfo = (locusInfo) =>
|
|
350
|
+
locusInfo?.parsedLocus?.info?.userDisplayHints || [];
|
|
350
351
|
|
|
351
|
-
MeetingUtil.
|
|
352
|
+
MeetingUtil.canInviteNewParticipants = (displayHints) =>
|
|
353
|
+
displayHints.includes(DISPLAY_HINTS.ADD_GUEST);
|
|
352
354
|
|
|
353
|
-
MeetingUtil.
|
|
355
|
+
MeetingUtil.canAdmitParticipant = (displayHints) =>
|
|
356
|
+
displayHints.includes(DISPLAY_HINTS.ROSTER_WAITING_TO_JOIN);
|
|
354
357
|
|
|
355
|
-
MeetingUtil.
|
|
358
|
+
MeetingUtil.canUserLock = (displayHints) =>
|
|
359
|
+
displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_LOCK) &&
|
|
360
|
+
displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_UNLOCKED);
|
|
356
361
|
|
|
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
|
-
};
|
|
362
|
+
MeetingUtil.canUserUnlock = (displayHints) =>
|
|
363
|
+
displayHints.includes(DISPLAY_HINTS.LOCK_CONTROL_UNLOCK) &&
|
|
364
|
+
displayHints.includes(DISPLAY_HINTS.LOCK_STATUS_LOCKED);
|
|
400
365
|
|
|
401
366
|
MeetingUtil.canUserRaiseHand = (displayHints) => displayHints.includes(DISPLAY_HINTS.RAISE_HAND);
|
|
402
367
|
|
|
403
|
-
MeetingUtil.canUserLowerAllHands = (displayHints) =>
|
|
368
|
+
MeetingUtil.canUserLowerAllHands = (displayHints) =>
|
|
369
|
+
displayHints.includes(DISPLAY_HINTS.LOWER_ALL_HANDS);
|
|
404
370
|
|
|
405
|
-
MeetingUtil.canUserLowerSomeoneElsesHand = (displayHints) =>
|
|
371
|
+
MeetingUtil.canUserLowerSomeoneElsesHand = (displayHints) =>
|
|
372
|
+
displayHints.includes(DISPLAY_HINTS.LOWER_SOMEONE_ELSES_HAND);
|
|
406
373
|
|
|
407
|
-
MeetingUtil.bothLeaveAndEndMeetingAvailable = (displayHints) =>
|
|
374
|
+
MeetingUtil.bothLeaveAndEndMeetingAvailable = (displayHints) =>
|
|
375
|
+
displayHints.includes(DISPLAY_HINTS.LEAVE_TRANSFER_HOST_END_MEETING) ||
|
|
376
|
+
displayHints.includes(DISPLAY_HINTS.LEAVE_END_MEETING);
|
|
408
377
|
|
|
409
378
|
MeetingUtil.lockMeeting = (actions, request, locusUrl) => {
|
|
410
379
|
if (actions && actions.canLock) {
|
|
@@ -422,11 +391,11 @@ MeetingUtil.unlockMeeting = (actions, request, locusUrl) => {
|
|
|
422
391
|
return Promise.reject(new PermissionError('Unlock not allowed, due to joined property.'));
|
|
423
392
|
};
|
|
424
393
|
|
|
425
|
-
MeetingUtil.handleAudioLogging = (audioTrack) => {
|
|
394
|
+
MeetingUtil.handleAudioLogging = (audioTrack: LocalMicrophoneTrack | null) => {
|
|
426
395
|
const LOG_HEADER = 'MeetingUtil#handleAudioLogging -->';
|
|
427
396
|
|
|
428
397
|
if (audioTrack) {
|
|
429
|
-
const settings = audioTrack.getSettings();
|
|
398
|
+
const settings = audioTrack.underlyingTrack.getSettings();
|
|
430
399
|
const {deviceId} = settings;
|
|
431
400
|
|
|
432
401
|
LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${deviceId}`);
|
|
@@ -434,11 +403,11 @@ MeetingUtil.handleAudioLogging = (audioTrack) => {
|
|
|
434
403
|
}
|
|
435
404
|
};
|
|
436
405
|
|
|
437
|
-
MeetingUtil.handleVideoLogging = (videoTrack) => {
|
|
406
|
+
MeetingUtil.handleVideoLogging = (videoTrack: LocalCameraTrack | null) => {
|
|
438
407
|
const LOG_HEADER = 'MeetingUtil#handleVideoLogging -->';
|
|
439
408
|
|
|
440
409
|
if (videoTrack) {
|
|
441
|
-
const settings = videoTrack.getSettings();
|
|
410
|
+
const settings = videoTrack.underlyingTrack.getSettings();
|
|
442
411
|
const {deviceId} = settings;
|
|
443
412
|
|
|
444
413
|
LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${deviceId}`);
|
|
@@ -476,31 +445,60 @@ MeetingUtil.endMeetingForAll = (meeting) => {
|
|
|
476
445
|
.then(() => MeetingUtil.cleanUp(meeting))
|
|
477
446
|
.catch((err) => {
|
|
478
447
|
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}`
|
|
448
|
+
`Meeting:util#endMeetingForAll An error occured while trying to end meeting for all with an id of ${meeting.id}, error: ${err}`
|
|
482
449
|
);
|
|
483
450
|
|
|
484
451
|
return Promise.reject(err);
|
|
485
452
|
});
|
|
486
453
|
};
|
|
487
454
|
|
|
488
|
-
MeetingUtil.canEnableClosedCaption = (displayHints) =>
|
|
455
|
+
MeetingUtil.canEnableClosedCaption = (displayHints) =>
|
|
456
|
+
displayHints.includes(DISPLAY_HINTS.CAPTION_START);
|
|
457
|
+
|
|
458
|
+
MeetingUtil.canStartTranscribing = (displayHints) =>
|
|
459
|
+
displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_START);
|
|
460
|
+
|
|
461
|
+
MeetingUtil.canStopTranscribing = (displayHints) =>
|
|
462
|
+
displayHints.includes(DISPLAY_HINTS.TRANSCRIPTION_CONTROL_STOP);
|
|
463
|
+
|
|
464
|
+
MeetingUtil.isClosedCaptionActive = (displayHints) =>
|
|
465
|
+
displayHints.includes(DISPLAY_HINTS.CAPTION_STATUS_ACTIVE);
|
|
466
|
+
|
|
467
|
+
MeetingUtil.isWebexAssistantActive = (displayHints) =>
|
|
468
|
+
displayHints.includes(DISPLAY_HINTS.WEBEX_ASSISTANT_STATUS_ACTIVE);
|
|
489
469
|
|
|
490
|
-
MeetingUtil.
|
|
470
|
+
MeetingUtil.canViewCaptionPanel = (displayHints) =>
|
|
471
|
+
displayHints.includes(DISPLAY_HINTS.ENABLE_CAPTION_PANEL);
|
|
491
472
|
|
|
492
|
-
MeetingUtil.
|
|
473
|
+
MeetingUtil.isRealTimeTranslationEnabled = (displayHints) =>
|
|
474
|
+
displayHints.includes(DISPLAY_HINTS.DISPLAY_REAL_TIME_TRANSLATION);
|
|
493
475
|
|
|
494
|
-
MeetingUtil.
|
|
476
|
+
MeetingUtil.canSelectSpokenLanguages = (displayHints) =>
|
|
477
|
+
displayHints.includes(DISPLAY_HINTS.DISPLAY_NON_ENGLISH_ASR);
|
|
495
478
|
|
|
496
|
-
MeetingUtil.
|
|
479
|
+
MeetingUtil.waitingForOthersToJoin = (displayHints) =>
|
|
480
|
+
displayHints.includes(DISPLAY_HINTS.WAITING_FOR_OTHERS);
|
|
497
481
|
|
|
498
|
-
MeetingUtil.
|
|
482
|
+
MeetingUtil.canEnableReactions = (originalValue, displayHints) => {
|
|
483
|
+
if (displayHints.includes(DISPLAY_HINTS.ENABLE_REACTIONS)) {
|
|
484
|
+
return true;
|
|
485
|
+
}
|
|
486
|
+
if (displayHints.includes(DISPLAY_HINTS.DISABLE_REACTIONS)) {
|
|
487
|
+
return false;
|
|
488
|
+
}
|
|
499
489
|
|
|
500
|
-
|
|
490
|
+
return originalValue;
|
|
491
|
+
};
|
|
501
492
|
|
|
502
|
-
MeetingUtil.
|
|
493
|
+
MeetingUtil.canSendReactions = (originalValue, displayHints) => {
|
|
494
|
+
if (displayHints.includes(DISPLAY_HINTS.REACTIONS_ACTIVE)) {
|
|
495
|
+
return true;
|
|
496
|
+
}
|
|
497
|
+
if (displayHints.includes(DISPLAY_HINTS.REACTIONS_INACTIVE)) {
|
|
498
|
+
return false;
|
|
499
|
+
}
|
|
503
500
|
|
|
504
|
-
|
|
501
|
+
return originalValue;
|
|
502
|
+
};
|
|
505
503
|
|
|
506
504
|
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
|
}
|