@webex/plugin-meetings 3.0.0-beta.9 → 3.0.0-beta.90
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/annotation/annotation.types.js +7 -0
- package/dist/annotation/annotation.types.js.map +1 -0
- package/dist/annotation/constants.js +48 -0
- package/dist/annotation/constants.js.map +1 -0
- package/dist/annotation/index.js +325 -0
- package/dist/annotation/index.js.map +1 -0
- package/dist/breakouts/breakout.js +180 -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 +868 -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 +67 -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 +5 -26
- package/dist/common/errors/captcha-error.js.map +1 -1
- package/dist/common/errors/intent-to-join.js +5 -26
- package/dist/common/errors/intent-to-join.js.map +1 -1
- package/dist/common/errors/join-meeting.js +6 -27
- package/dist/common/errors/join-meeting.js.map +1 -1
- package/dist/common/errors/media.js +5 -26
- 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 +5 -26
- package/dist/common/errors/password-error.js.map +1 -1
- package/dist/common/errors/permission.js +4 -25
- 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 +5 -26
- package/dist/common/errors/reconnection.js.map +1 -1
- package/dist/common/errors/stats.js +5 -26
- 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 +1 -24
- 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 +35 -61
- 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 +7 -6
- package/dist/config.js.map +1 -1
- package/dist/constants.js +167 -52
- 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 +25 -0
- package/dist/controls-options-manager/enums.js.map +1 -0
- package/dist/controls-options-manager/index.js +292 -0
- package/dist/controls-options-manager/index.js.map +1 -0
- package/dist/controls-options-manager/types.js +7 -0
- package/dist/controls-options-manager/types.js.map +1 -0
- package/dist/controls-options-manager/util.js +250 -0
- package/dist/controls-options-manager/util.js.map +1 -0
- package/dist/index.js +72 -17
- package/dist/index.js.map +1 -1
- package/dist/locus-info/controlsUtils.js +56 -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 +325 -208
- 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 +88 -123
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +87 -91
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +62 -147
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +71 -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 +35 -14
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +2249 -2269
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/muteState.js +252 -113
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +318 -283
- 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 +69 -217
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/collection.js +3 -25
- package/dist/meeting-info/collection.js.map +1 -1
- package/dist/meeting-info/index.js +10 -33
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +258 -281
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.js +1 -16
- 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 +154 -232
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +24 -20
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +573 -587
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/request.js +23 -42
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +164 -155
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +80 -88
- package/dist/member/index.js.map +1 -1
- package/dist/member/types.js +15 -0
- package/dist/member/types.js.map +1 -0
- package/dist/member/util.js +90 -69
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +12 -12
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +162 -204
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +58 -53
- package/dist/members/request.js.map +1 -1
- package/dist/members/types.js +15 -0
- package/dist/members/types.js.map +1 -0
- package/dist/members/util.js +107 -44
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/config.js +4 -14
- package/dist/metrics/config.js.map +1 -1
- package/dist/metrics/constants.js +3 -7
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +56 -159
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +167 -50
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/receiveSlot.js +58 -65
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/multistream/receiveSlotManager.js +74 -93
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +55 -74
- 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 +466 -442
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/networkQualityMonitor/index.js +32 -59
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/personal-meeting-room/index.js +10 -45
- package/dist/personal-meeting-room/index.js.map +1 -1
- package/dist/personal-meeting-room/request.js +2 -33
- 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 +190 -199
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +14 -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 +326 -465
- 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 +38 -67
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +143 -134
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +149 -101
- 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 +369 -461
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +144 -94
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.js +13 -45
- package/dist/transcription/index.js.map +1 -1
- package/dist/types/annotation/annotation.types.d.ts +33 -0
- package/dist/types/annotation/constants.d.ts +31 -0
- package/dist/types/annotation/index.d.ts +117 -0
- 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 +15 -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 +78 -0
- package/dist/types/constants.d.ts +963 -0
- package/dist/types/controls-options-manager/constants.d.ts +4 -0
- package/dist/types/controls-options-manager/enums.d.ts +13 -0
- package/dist/types/controls-options-manager/index.d.ts +136 -0
- package/dist/types/controls-options-manager/types.d.ts +37 -0
- package/dist/types/controls-options-manager/util.d.ts +1 -0
- package/dist/types/index.d.ts +7 -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 +314 -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 +34 -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 +105 -0
- package/dist/types/meeting/index.d.ts +1727 -0
- package/dist/types/meeting/muteState.d.ts +185 -0
- package/dist/types/meeting/request.d.ts +275 -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 +111 -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 +31 -0
- package/dist/types/meetings/index.d.ts +316 -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 +156 -0
- package/dist/types/member/types.d.ts +21 -0
- package/dist/types/member/util.d.ts +2 -0
- package/dist/types/members/collection.d.ts +29 -0
- package/dist/types/members/index.d.ts +353 -0
- package/dist/types/members/request.d.ts +69 -0
- package/dist/types/members/types.d.ts +24 -0
- package/dist/types/members/util.d.ts +2 -0
- package/dist/types/metrics/config.d.ts +171 -0
- package/dist/types/metrics/constants.d.ts +54 -0
- package/dist/types/metrics/index.d.ts +152 -0
- package/dist/types/multistream/mediaRequestManager.d.ts +101 -0
- package/dist/types/multistream/receiveSlot.d.ts +68 -0
- package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
- package/dist/types/multistream/remoteMedia.d.ts +72 -0
- package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
- package/dist/types/multistream/remoteMediaManager.d.ts +263 -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 +152 -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 +126 -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 +88 -0
- package/dist/types/statsAnalyzer/global.d.ts +36 -0
- package/dist/types/statsAnalyzer/index.d.ts +200 -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 +28 -20
- package/src/annotation/annotation.types.ts +37 -0
- package/src/annotation/constants.ts +36 -0
- package/src/annotation/index.ts +314 -0
- package/src/breakouts/README.md +219 -0
- package/src/breakouts/breakout.ts +154 -0
- package/src/breakouts/collection.ts +19 -0
- package/src/breakouts/edit-lock-error.ts +25 -0
- package/src/breakouts/index.ts +776 -0
- package/src/breakouts/request.ts +55 -0
- package/src/breakouts/utils.ts +57 -0
- package/src/common/browser-detection.ts +9 -6
- package/src/common/collection.ts +3 -1
- package/src/common/errors/captcha-error.ts +6 -6
- package/src/common/errors/intent-to-join.ts +6 -6
- package/src/common/errors/join-meeting.ts +12 -8
- package/src/common/errors/media.ts +6 -6
- package/src/common/errors/parameter.ts +9 -6
- package/src/common/errors/password-error.ts +6 -6
- package/src/common/errors/permission.ts +5 -5
- package/src/common/errors/reconnection.ts +6 -6
- package/src/common/errors/stats.ts +6 -6
- package/src/common/errors/webex-errors.ts +7 -5
- package/src/common/errors/webex-meetings-error.ts +1 -1
- package/src/common/events/events-scope.ts +5 -1
- package/src/common/events/events.ts +5 -1
- package/src/common/events/trigger-proxy.ts +8 -3
- package/src/common/events/util.ts +1 -2
- package/src/common/logs/logger-proxy.ts +21 -10
- package/src/common/logs/request.ts +11 -8
- package/src/config.ts +17 -12
- package/src/constants.ts +114 -6
- package/src/controls-options-manager/constants.ts +5 -0
- package/src/controls-options-manager/enums.ts +16 -0
- package/src/controls-options-manager/index.ts +275 -0
- package/src/controls-options-manager/types.ts +49 -0
- package/src/controls-options-manager/util.ts +229 -0
- package/src/index.ts +33 -0
- package/src/locus-info/controlsUtils.ts +91 -24
- package/src/locus-info/fullState.ts +15 -11
- package/src/locus-info/hostUtils.ts +4 -3
- package/src/locus-info/index.ts +265 -51
- package/src/locus-info/infoUtils.ts +16 -4
- package/src/locus-info/mediaSharesUtils.ts +4 -4
- package/src/locus-info/parser.ts +46 -68
- package/src/locus-info/selfUtils.ts +178 -57
- package/src/media/index.ts +142 -172
- package/src/media/properties.ts +43 -36
- package/src/media/util.ts +1 -1
- package/src/mediaQualityMetrics/config.ts +380 -378
- package/src/meeting/in-meeting-actions.ts +75 -3
- package/src/meeting/index.ts +2484 -1524
- package/src/meeting/muteState.ts +271 -68
- package/src/meeting/request.ts +251 -132
- package/src/meeting/request.type.ts +13 -0
- package/src/meeting/state.ts +45 -30
- package/src/meeting/util.ts +132 -111
- package/src/meeting-info/collection.ts +2 -1
- package/src/meeting-info/index.ts +32 -30
- package/src/meeting-info/meeting-info-v2.ts +178 -109
- package/src/meeting-info/request.ts +9 -3
- package/src/meeting-info/util.ts +54 -46
- package/src/meeting-info/utilv2.ts +69 -57
- package/src/meetings/collection.ts +21 -1
- package/src/meetings/index.ts +687 -467
- package/src/meetings/request.ts +29 -25
- package/src/meetings/util.ts +108 -33
- package/src/member/index.ts +86 -49
- package/src/member/types.ts +24 -0
- package/src/member/util.ts +92 -13
- package/src/members/collection.ts +8 -1
- package/src/members/index.ts +281 -129
- package/src/members/request.ts +87 -14
- package/src/members/types.ts +28 -0
- package/src/members/util.ts +140 -49
- package/src/metrics/config.ts +255 -90
- package/src/metrics/constants.ts +1 -6
- package/src/metrics/index.ts +91 -94
- package/src/multistream/mediaRequestManager.ts +201 -43
- package/src/multistream/receiveSlot.ts +69 -26
- package/src/multistream/receiveSlotManager.ts +62 -38
- package/src/multistream/remoteMedia.ts +30 -4
- package/src/multistream/remoteMediaGroup.ts +4 -3
- package/src/multistream/remoteMediaManager.ts +230 -66
- package/src/networkQualityMonitor/index.ts +24 -27
- package/src/personal-meeting-room/index.ts +12 -16
- package/src/personal-meeting-room/request.ts +10 -3
- package/src/personal-meeting-room/util.ts +3 -3
- package/src/reachability/index.ts +131 -79
- package/src/reachability/request.ts +43 -34
- 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.ts +193 -111
- 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.ts +63 -51
- package/src/roap/request.ts +86 -53
- package/src/roap/turnDiscovery.ts +105 -46
- package/src/statsAnalyzer/global.ts +8 -104
- package/src/statsAnalyzer/index.ts +624 -376
- package/src/statsAnalyzer/mqaUtil.ts +203 -90
- package/src/transcription/index.ts +34 -32
- package/test/integration/spec/converged-space-meetings.js +177 -0
- package/test/integration/spec/journey.js +666 -464
- package/test/integration/spec/space-meeting.js +320 -204
- package/test/integration/spec/transcription.js +7 -8
- package/test/unit/spec/annotation/index.ts +420 -0
- package/test/unit/spec/breakouts/breakout.ts +178 -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 +1416 -0
- package/test/unit/spec/breakouts/request.ts +104 -0
- package/test/unit/spec/breakouts/utils.js +72 -0
- package/test/unit/spec/common/browser-detection.js +9 -28
- package/test/unit/spec/controls-options-manager/index.js +280 -0
- package/test/unit/spec/controls-options-manager/util.js +403 -0
- package/test/unit/spec/fixture/locus.js +92 -90
- package/test/unit/spec/locus-info/controlsUtils.js +177 -32
- package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
- package/test/unit/spec/locus-info/index.js +484 -3
- 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 +101 -103
- package/test/unit/spec/locus-info/selfUtils.js +191 -12
- package/test/unit/spec/media/index.ts +104 -8
- package/test/unit/spec/media/properties.ts +9 -9
- package/test/unit/spec/meeting/in-meeting-actions.ts +34 -3
- package/test/unit/spec/meeting/index.js +2651 -829
- package/test/unit/spec/meeting/muteState.js +368 -70
- package/test/unit/spec/meeting/request.js +217 -43
- package/test/unit/spec/meeting/utils.js +167 -163
- package/test/unit/spec/meeting-info/meetinginfov2.js +241 -74
- 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 +15 -1
- package/test/unit/spec/meetings/index.js +701 -273
- package/test/unit/spec/meetings/utils.js +105 -14
- package/test/unit/spec/member/index.js +24 -1
- package/test/unit/spec/member/util.js +359 -32
- package/test/unit/spec/members/index.js +402 -54
- package/test/unit/spec/members/request.js +76 -20
- package/test/unit/spec/members/utils.js +191 -4
- package/test/unit/spec/metrics/index.js +46 -20
- package/test/unit/spec/multistream/mediaRequestManager.ts +650 -105
- package/test/unit/spec/multistream/receiveSlot.ts +76 -17
- package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
- package/test/unit/spec/multistream/remoteMedia.ts +32 -2
- package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
- package/test/unit/spec/multistream/remoteMediaManager.ts +549 -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 +176 -27
- package/test/unit/spec/reachability/request.js +66 -0
- package/test/unit/spec/reconnection-manager/index.js +62 -31
- 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 +21 -16
- package/test/unit/spec/roap/request.ts +217 -0
- package/test/unit/spec/roap/turnDiscovery.ts +93 -49
- package/test/unit/spec/stats-analyzer/index.js +116 -60
- package/test/utils/cmr.js +44 -42
- package/test/utils/constants.js +9 -0
- package/test/utils/integrationTestUtils.js +64 -0
- package/test/utils/testUtils.js +63 -99
- 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 -334
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/multistream/multistreamMedia.js +0 -116
- package/dist/multistream/multistreamMedia.js.map +0 -1
- package/src/index.js +0 -15
- package/src/media/internal-media-core-wrapper.ts +0 -9
- package/src/meeting/effectsState.ts +0 -211
- package/src/multistream/multistreamMedia.ts +0 -92
- package/test/unit/spec/meeting/effectsState.js +0 -291
package/src/locus-info/index.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {isEqual} from 'lodash';
|
|
1
|
+
import {isArray, isEqual, mergeWith, cloneDeep} from 'lodash';
|
|
2
2
|
|
|
3
3
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
4
4
|
import EventsScope from '../common/events/events-scope';
|
|
@@ -19,14 +19,14 @@ import {
|
|
|
19
19
|
} from '../constants';
|
|
20
20
|
import Metrics from '../metrics';
|
|
21
21
|
import {eventType} from '../metrics/config';
|
|
22
|
-
import InfoUtils from '
|
|
23
|
-
import FullState from '
|
|
24
|
-
import SelfUtils from '
|
|
25
|
-
import HostUtils from '
|
|
26
|
-
import ControlsUtils from '
|
|
27
|
-
import EmbeddedAppsUtils from '
|
|
28
|
-
import MediaSharesUtils from '
|
|
29
|
-
import LocusDeltaParser from '
|
|
22
|
+
import InfoUtils from './infoUtils';
|
|
23
|
+
import FullState from './fullState';
|
|
24
|
+
import SelfUtils from './selfUtils';
|
|
25
|
+
import HostUtils from './hostUtils';
|
|
26
|
+
import ControlsUtils from './controlsUtils';
|
|
27
|
+
import EmbeddedAppsUtils from './embeddedAppsUtils';
|
|
28
|
+
import MediaSharesUtils from './mediaSharesUtils';
|
|
29
|
+
import LocusDeltaParser from './parser';
|
|
30
30
|
|
|
31
31
|
/**
|
|
32
32
|
* @description LocusInfo extends ChildEmitter to convert locusInfo info a private emitter to parent object
|
|
@@ -59,10 +59,19 @@ export default class LocusInfo extends EventsScope {
|
|
|
59
59
|
fullState: any;
|
|
60
60
|
host: any;
|
|
61
61
|
info: any;
|
|
62
|
+
roles: any;
|
|
62
63
|
mediaShares: any;
|
|
63
64
|
replace: any;
|
|
64
65
|
url: any;
|
|
65
|
-
|
|
66
|
+
services: any;
|
|
67
|
+
mainSessionLocusCache: any;
|
|
68
|
+
/**
|
|
69
|
+
* Constructor
|
|
70
|
+
* @param {boolean} updateMeeting true if the meeting should be updated
|
|
71
|
+
* @param {object} webex
|
|
72
|
+
* @param {string} meetingId
|
|
73
|
+
* @returns {undefined}
|
|
74
|
+
*/
|
|
66
75
|
constructor(updateMeeting, webex, meetingId) {
|
|
67
76
|
super();
|
|
68
77
|
this.parsedLocus = {
|
|
@@ -171,6 +180,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
171
180
|
*/
|
|
172
181
|
this.deltaParticipants = [];
|
|
173
182
|
|
|
183
|
+
this.updateLocusCache(locus);
|
|
174
184
|
// above section only updates the locusInfo object
|
|
175
185
|
// The below section makes sure it updates the locusInfo as well as updates the meeting object
|
|
176
186
|
this.updateParticipants(locus.participants);
|
|
@@ -185,6 +195,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
185
195
|
this.updateSelf(locus.self, locus.participants);
|
|
186
196
|
this.updateHostInfo(locus.host);
|
|
187
197
|
this.updateMediaShares(locus.mediaShares);
|
|
198
|
+
this.updateServices(locus.links?.services);
|
|
188
199
|
}
|
|
189
200
|
|
|
190
201
|
/**
|
|
@@ -193,6 +204,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
193
204
|
* @memberof LocusInfo
|
|
194
205
|
*/
|
|
195
206
|
initialSetup(locus: object) {
|
|
207
|
+
this.updateLocusCache(locus);
|
|
196
208
|
this.onFullLocus(locus);
|
|
197
209
|
|
|
198
210
|
// Change it to true after it receives it first locus object
|
|
@@ -206,8 +218,9 @@ export default class LocusInfo extends EventsScope {
|
|
|
206
218
|
* @memberof LocusInfo
|
|
207
219
|
*/
|
|
208
220
|
parse(meeting: any, data: any) {
|
|
221
|
+
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
209
222
|
const {eventType} = data;
|
|
210
|
-
|
|
223
|
+
const locus = this.getTheLocusToUpdate(data.locus);
|
|
211
224
|
LoggerProxy.logger.info(`Locus-info:index#parse --> received locus data: ${eventType}`);
|
|
212
225
|
|
|
213
226
|
switch (eventType) {
|
|
@@ -225,16 +238,16 @@ export default class LocusInfo extends EventsScope {
|
|
|
225
238
|
case LOCUSEVENT.PARTICIPANT_DECLINED:
|
|
226
239
|
case LOCUSEVENT.FLOOR_GRANTED:
|
|
227
240
|
case LOCUSEVENT.FLOOR_RELEASED:
|
|
228
|
-
this.onFullLocus(
|
|
241
|
+
this.onFullLocus(locus, eventType);
|
|
229
242
|
break;
|
|
230
243
|
case LOCUSEVENT.DIFFERENCE:
|
|
231
|
-
this.handleLocusDelta(
|
|
244
|
+
this.handleLocusDelta(locus, meeting);
|
|
232
245
|
break;
|
|
233
246
|
|
|
234
247
|
default:
|
|
235
248
|
// Why will there be a event with no eventType ????
|
|
236
249
|
// we may not need this, we can get full locus
|
|
237
|
-
this.handleLocusDelta(
|
|
250
|
+
this.handleLocusDelta(locus, meeting);
|
|
238
251
|
}
|
|
239
252
|
}
|
|
240
253
|
|
|
@@ -256,6 +269,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
256
269
|
* @returns {object} null
|
|
257
270
|
* @memberof LocusInfo
|
|
258
271
|
*/
|
|
272
|
+
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
259
273
|
onFullLocus(locus: any, eventType?: string) {
|
|
260
274
|
if (!locus) {
|
|
261
275
|
LoggerProxy.logger.error(
|
|
@@ -265,8 +279,9 @@ export default class LocusInfo extends EventsScope {
|
|
|
265
279
|
this.updateParticipantDeltas(locus.participants);
|
|
266
280
|
this.scheduledMeeting = locus.meeting || null;
|
|
267
281
|
this.participants = locus.participants;
|
|
282
|
+
const isReplaceMembers = ControlsUtils.isNeedReplaceMembers(this.controls, locus.controls);
|
|
268
283
|
this.updateLocusInfo(locus);
|
|
269
|
-
this.updateParticipants(locus.participants);
|
|
284
|
+
this.updateParticipants(locus.participants, isReplaceMembers);
|
|
270
285
|
this.isMeetingActive();
|
|
271
286
|
this.handleOneOnOneEvent(eventType);
|
|
272
287
|
this.updateEmbeddedApps(locus.embeddedApps);
|
|
@@ -280,6 +295,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
280
295
|
* @returns {undefined}
|
|
281
296
|
* @memberof LocusInfo
|
|
282
297
|
*/
|
|
298
|
+
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
283
299
|
handleOneOnOneEvent(eventType: string) {
|
|
284
300
|
if (
|
|
285
301
|
this.parsedLocus.fullState.type === _CALL_ ||
|
|
@@ -324,8 +340,9 @@ export default class LocusInfo extends EventsScope {
|
|
|
324
340
|
* @memberof LocusInfo
|
|
325
341
|
*/
|
|
326
342
|
onDeltaLocus(locus: any) {
|
|
343
|
+
const isReplaceMembers = ControlsUtils.isNeedReplaceMembers(this.controls, locus.controls);
|
|
327
344
|
this.updateLocusInfo(locus);
|
|
328
|
-
this.updateParticipants(locus.participants);
|
|
345
|
+
this.updateParticipants(locus.participants, isReplaceMembers);
|
|
329
346
|
this.isMeetingActive();
|
|
330
347
|
}
|
|
331
348
|
|
|
@@ -334,7 +351,14 @@ export default class LocusInfo extends EventsScope {
|
|
|
334
351
|
* @returns {undefined}
|
|
335
352
|
* @memberof LocusInfo
|
|
336
353
|
*/
|
|
337
|
-
updateLocusInfo(locus
|
|
354
|
+
updateLocusInfo(locus) {
|
|
355
|
+
if (locus.self?.reason === 'MOVED' && locus.self?.state === 'LEFT') {
|
|
356
|
+
// When moved to a breakout session locus sends a message for the previous locus
|
|
357
|
+
// indicating that we have been moved. It isn't helpful to continue parsing this
|
|
358
|
+
// as it gets interpreted as if we have left the call
|
|
359
|
+
return;
|
|
360
|
+
}
|
|
361
|
+
|
|
338
362
|
this.updateControls(locus.controls);
|
|
339
363
|
this.updateConversationUrl(locus.conversationUrl, locus.info);
|
|
340
364
|
this.updateCreated(locus.created);
|
|
@@ -352,6 +376,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
352
376
|
this.updateMemberShip(locus.membership);
|
|
353
377
|
this.updateIdentifiers(locus.identities);
|
|
354
378
|
this.updateEmbeddedApps(locus.embeddedApps);
|
|
379
|
+
this.updateServices(locus.links?.services);
|
|
355
380
|
this.compareAndUpdate();
|
|
356
381
|
// update which required to compare different objects from locus
|
|
357
382
|
}
|
|
@@ -373,7 +398,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
373
398
|
self &&
|
|
374
399
|
participant.identity !== self.identity &&
|
|
375
400
|
(participants.length <= 2 || (participant.type === _USER_ && !participant.removed))
|
|
376
|
-
|
|
401
|
+
// @ts-ignore
|
|
377
402
|
) || this.partner
|
|
378
403
|
);
|
|
379
404
|
}
|
|
@@ -420,8 +445,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
420
445
|
shouldLeave: false,
|
|
421
446
|
}
|
|
422
447
|
);
|
|
423
|
-
}
|
|
424
|
-
else if (
|
|
448
|
+
} else if (
|
|
425
449
|
partner.state === MEETING_STATE.STATES.LEFT &&
|
|
426
450
|
this.parsedLocus.self &&
|
|
427
451
|
(this.parsedLocus.self.state === MEETING_STATE.STATES.DECLINED ||
|
|
@@ -444,8 +468,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
444
468
|
this.parsedLocus.self.joinedWith && this.parsedLocus.self.joinedWith.state !== _LEFT_,
|
|
445
469
|
}
|
|
446
470
|
);
|
|
447
|
-
}
|
|
448
|
-
else if (
|
|
471
|
+
} else if (
|
|
449
472
|
this.parsedLocus.self &&
|
|
450
473
|
this.parsedLocus.self.state === MEETING_STATE.STATES.LEFT &&
|
|
451
474
|
(partner.state === MEETING_STATE.STATES.LEFT ||
|
|
@@ -469,8 +492,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
469
492
|
}
|
|
470
493
|
);
|
|
471
494
|
}
|
|
472
|
-
}
|
|
473
|
-
else if (this.parsedLocus.fullState.type === _MEETING_) {
|
|
495
|
+
} else if (this.parsedLocus.fullState.type === _MEETING_) {
|
|
474
496
|
if (
|
|
475
497
|
this.fullState &&
|
|
476
498
|
(this.fullState.state === LOCUS.STATE.INACTIVE ||
|
|
@@ -495,8 +517,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
495
517
|
shouldLeave: false,
|
|
496
518
|
}
|
|
497
519
|
);
|
|
498
|
-
}
|
|
499
|
-
else if (this.fullState && this.fullState.removed) {
|
|
520
|
+
} else if (this.fullState && this.fullState.removed) {
|
|
500
521
|
// user has been dropped from a meeting
|
|
501
522
|
Metrics.postEvent({
|
|
502
523
|
event: eventType.REMOTE_ENDED,
|
|
@@ -530,8 +551,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
530
551
|
}
|
|
531
552
|
);
|
|
532
553
|
}
|
|
533
|
-
}
|
|
534
|
-
else {
|
|
554
|
+
} else {
|
|
535
555
|
LoggerProxy.logger.warn('Locus-info:index#isMeetingActive --> Meeting Type is unknown.');
|
|
536
556
|
}
|
|
537
557
|
}
|
|
@@ -574,8 +594,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
574
594
|
canAssignHost: true,
|
|
575
595
|
}
|
|
576
596
|
);
|
|
577
|
-
}
|
|
578
|
-
else {
|
|
597
|
+
} else {
|
|
579
598
|
this.emitScoped(
|
|
580
599
|
{
|
|
581
600
|
file: 'locus-info',
|
|
@@ -639,13 +658,13 @@ export default class LocusInfo extends EventsScope {
|
|
|
639
658
|
}
|
|
640
659
|
|
|
641
660
|
/**
|
|
642
|
-
*
|
|
661
|
+
* update meeting's members
|
|
643
662
|
* @param {Object} participants new participants object
|
|
644
|
-
* @param {
|
|
663
|
+
* @param {Boolean} isReplace is replace the whole members
|
|
645
664
|
* @returns {Array} updatedParticipants
|
|
646
665
|
* @memberof LocusInfo
|
|
647
666
|
*/
|
|
648
|
-
updateParticipants(participants: object) {
|
|
667
|
+
updateParticipants(participants: object, isReplace?: boolean) {
|
|
649
668
|
this.emitScoped(
|
|
650
669
|
{
|
|
651
670
|
file: 'locus-info',
|
|
@@ -658,6 +677,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
658
677
|
selfIdentity: this.parsedLocus.self && this.parsedLocus.self.selfIdentity,
|
|
659
678
|
selfId: this.parsedLocus.self && this.parsedLocus.self.selfId,
|
|
660
679
|
hostId: this.parsedLocus.host && this.parsedLocus.host.hostId,
|
|
680
|
+
isReplace,
|
|
661
681
|
}
|
|
662
682
|
);
|
|
663
683
|
}
|
|
@@ -677,6 +697,8 @@ export default class LocusInfo extends EventsScope {
|
|
|
677
697
|
hasMeetingContainerChanged,
|
|
678
698
|
hasTranscribeChanged,
|
|
679
699
|
hasEntryExitToneChanged,
|
|
700
|
+
hasBreakoutChanged,
|
|
701
|
+
hasVideoEnabledChanged,
|
|
680
702
|
},
|
|
681
703
|
current,
|
|
682
704
|
} = ControlsUtils.getControls(this.controls, controls);
|
|
@@ -687,13 +709,11 @@ export default class LocusInfo extends EventsScope {
|
|
|
687
709
|
if (hasRecordingPausedChanged) {
|
|
688
710
|
if (current.record.paused) {
|
|
689
711
|
state = RECORDING_STATE.PAUSED;
|
|
690
|
-
}
|
|
691
|
-
else {
|
|
712
|
+
} else {
|
|
692
713
|
// state will be `IDLE` if the recording is not active, even when there is a `pause` status change.
|
|
693
714
|
state = current.record.recording ? RECORDING_STATE.RESUMED : RECORDING_STATE.IDLE;
|
|
694
715
|
}
|
|
695
|
-
}
|
|
696
|
-
else if (hasRecordingChanged) {
|
|
716
|
+
} else if (hasRecordingChanged) {
|
|
697
717
|
state = current.record.recording ? RECORDING_STATE.RECORDING : RECORDING_STATE.IDLE;
|
|
698
718
|
}
|
|
699
719
|
|
|
@@ -742,9 +762,26 @@ export default class LocusInfo extends EventsScope {
|
|
|
742
762
|
);
|
|
743
763
|
}
|
|
744
764
|
|
|
765
|
+
if (hasBreakoutChanged) {
|
|
766
|
+
const {breakout} = current;
|
|
767
|
+
|
|
768
|
+
this.emitScoped(
|
|
769
|
+
{
|
|
770
|
+
file: 'locus-info',
|
|
771
|
+
function: 'updateControls',
|
|
772
|
+
},
|
|
773
|
+
LOCUSINFO.EVENTS.CONTROLS_MEETING_BREAKOUT_UPDATED,
|
|
774
|
+
{
|
|
775
|
+
breakout,
|
|
776
|
+
}
|
|
777
|
+
);
|
|
778
|
+
}
|
|
779
|
+
|
|
745
780
|
if (hasEntryExitToneChanged) {
|
|
746
781
|
const {entryExitTone} = current;
|
|
747
782
|
|
|
783
|
+
this.updateMeeting({entryExitTone});
|
|
784
|
+
|
|
748
785
|
this.emitScoped(
|
|
749
786
|
{
|
|
750
787
|
file: 'locus-info',
|
|
@@ -752,11 +789,29 @@ export default class LocusInfo extends EventsScope {
|
|
|
752
789
|
},
|
|
753
790
|
LOCUSINFO.EVENTS.CONTROLS_ENTRY_EXIT_TONE_UPDATED,
|
|
754
791
|
{
|
|
755
|
-
entryExitTone
|
|
792
|
+
entryExitTone,
|
|
756
793
|
}
|
|
757
794
|
);
|
|
795
|
+
}
|
|
758
796
|
|
|
759
|
-
|
|
797
|
+
// videoEnabled is handled differently than other controls,
|
|
798
|
+
// to fit with audio mute status logic
|
|
799
|
+
if (hasVideoEnabledChanged) {
|
|
800
|
+
const {videoEnabled} = current;
|
|
801
|
+
|
|
802
|
+
this.updateMeeting({unmuteVideoAllowed: videoEnabled});
|
|
803
|
+
|
|
804
|
+
this.emitScoped(
|
|
805
|
+
{
|
|
806
|
+
file: 'locus-info',
|
|
807
|
+
function: 'updateControls',
|
|
808
|
+
},
|
|
809
|
+
LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED,
|
|
810
|
+
{
|
|
811
|
+
// muted: not part of locus.controls
|
|
812
|
+
unmuteAllowed: videoEnabled,
|
|
813
|
+
}
|
|
814
|
+
);
|
|
760
815
|
}
|
|
761
816
|
|
|
762
817
|
this.controls = controls;
|
|
@@ -773,8 +828,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
773
828
|
if (conversationUrl && !isEqual(this.conversationUrl, conversationUrl)) {
|
|
774
829
|
this.conversationUrl = conversationUrl;
|
|
775
830
|
this.updateMeeting({conversationUrl});
|
|
776
|
-
}
|
|
777
|
-
else if (
|
|
831
|
+
} else if (
|
|
778
832
|
info &&
|
|
779
833
|
info.conversationUrl &&
|
|
780
834
|
!isEqual(this.conversationUrl, info.conversationUrl)
|
|
@@ -795,6 +849,27 @@ export default class LocusInfo extends EventsScope {
|
|
|
795
849
|
}
|
|
796
850
|
}
|
|
797
851
|
|
|
852
|
+
/**
|
|
853
|
+
* @param {Object} services
|
|
854
|
+
* @returns {undefined}
|
|
855
|
+
* @memberof LocusInfo
|
|
856
|
+
*/
|
|
857
|
+
updateServices(services: Record<'breakout' | 'record', {url: string}>) {
|
|
858
|
+
if (services && !isEqual(this.services, services)) {
|
|
859
|
+
this.services = services;
|
|
860
|
+
this.emitScoped(
|
|
861
|
+
{
|
|
862
|
+
file: 'locus-info',
|
|
863
|
+
function: 'updateServices',
|
|
864
|
+
},
|
|
865
|
+
LOCUSINFO.EVENTS.LINKS_SERVICES,
|
|
866
|
+
{
|
|
867
|
+
services,
|
|
868
|
+
}
|
|
869
|
+
);
|
|
870
|
+
}
|
|
871
|
+
}
|
|
872
|
+
|
|
798
873
|
/**
|
|
799
874
|
* @param {Object} fullState
|
|
800
875
|
* @returns {undefined}
|
|
@@ -865,8 +940,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
865
940
|
);
|
|
866
941
|
}
|
|
867
942
|
this.host = host;
|
|
868
|
-
}
|
|
869
|
-
else {
|
|
943
|
+
} else {
|
|
870
944
|
this.compareAndUpdateFlags.compareSelfAndHost = false;
|
|
871
945
|
}
|
|
872
946
|
}
|
|
@@ -878,8 +952,11 @@ export default class LocusInfo extends EventsScope {
|
|
|
878
952
|
* @memberof LocusInfo
|
|
879
953
|
*/
|
|
880
954
|
updateMeetingInfo(info: object, self?: object) {
|
|
881
|
-
|
|
882
|
-
|
|
955
|
+
const roles = self ? SelfUtils.getRoles(self) : this.parsedLocus.self?.roles || [];
|
|
956
|
+
if (
|
|
957
|
+
(info && !isEqual(this.info, info)) ||
|
|
958
|
+
(roles.length && !isEqual(this.roles, roles) && info)
|
|
959
|
+
) {
|
|
883
960
|
const isJoined = SelfUtils.isJoined(self || this.parsedLocus.self);
|
|
884
961
|
const parsedInfo = InfoUtils.getInfos(this.parsedLocus.info, info, roles, isJoined);
|
|
885
962
|
|
|
@@ -918,6 +995,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
918
995
|
// Parses the info and adds necessary values
|
|
919
996
|
this.updateMeeting(parsedInfo.current);
|
|
920
997
|
}
|
|
998
|
+
this.roles = roles;
|
|
921
999
|
}
|
|
922
1000
|
|
|
923
1001
|
/**
|
|
@@ -958,6 +1036,8 @@ export default class LocusInfo extends EventsScope {
|
|
|
958
1036
|
const parsedMediaShares = MediaSharesUtils.getMediaShares(this.mediaShares, mediaShares);
|
|
959
1037
|
|
|
960
1038
|
this.updateMeeting(parsedMediaShares.current);
|
|
1039
|
+
this.parsedLocus.mediaShares = parsedMediaShares.current;
|
|
1040
|
+
this.mediaShares = mediaShares;
|
|
961
1041
|
this.emitScoped(
|
|
962
1042
|
{
|
|
963
1043
|
file: 'locus-info',
|
|
@@ -969,8 +1049,6 @@ export default class LocusInfo extends EventsScope {
|
|
|
969
1049
|
previous: parsedMediaShares.previous,
|
|
970
1050
|
}
|
|
971
1051
|
);
|
|
972
|
-
this.parsedLocus.mediaShares = parsedMediaShares.current;
|
|
973
|
-
this.mediaShares = mediaShares;
|
|
974
1052
|
}
|
|
975
1053
|
}
|
|
976
1054
|
|
|
@@ -1033,8 +1111,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
1033
1111
|
|
|
1034
1112
|
if (parsedSelves.updates.moderatorChanged) {
|
|
1035
1113
|
this.compareAndUpdateFlags.compareHostAndSelf = true;
|
|
1036
|
-
}
|
|
1037
|
-
else {
|
|
1114
|
+
} else {
|
|
1038
1115
|
this.compareAndUpdateFlags.compareHostAndSelf = false;
|
|
1039
1116
|
}
|
|
1040
1117
|
|
|
@@ -1049,6 +1126,17 @@ export default class LocusInfo extends EventsScope {
|
|
|
1049
1126
|
);
|
|
1050
1127
|
}
|
|
1051
1128
|
|
|
1129
|
+
if (parsedSelves.updates.breakoutsChanged) {
|
|
1130
|
+
this.emitScoped(
|
|
1131
|
+
{
|
|
1132
|
+
file: 'locus-info',
|
|
1133
|
+
function: 'updateSelf',
|
|
1134
|
+
},
|
|
1135
|
+
LOCUSINFO.EVENTS.SELF_MEETING_BREAKOUTS_CHANGED,
|
|
1136
|
+
{breakoutSessions: parsedSelves.current.breakoutSessions}
|
|
1137
|
+
);
|
|
1138
|
+
}
|
|
1139
|
+
|
|
1052
1140
|
if (parsedSelves.updates.isMediaInactiveOrReleased) {
|
|
1053
1141
|
this.emitScoped(
|
|
1054
1142
|
{
|
|
@@ -1070,6 +1158,31 @@ export default class LocusInfo extends EventsScope {
|
|
|
1070
1158
|
self
|
|
1071
1159
|
);
|
|
1072
1160
|
}
|
|
1161
|
+
// When the user upgrades to moderator or cohost
|
|
1162
|
+
if (parsedSelves.updates.isUpgradeToModeratorOrCohost) {
|
|
1163
|
+
this.emitScoped(
|
|
1164
|
+
{
|
|
1165
|
+
file: 'locus-info',
|
|
1166
|
+
function: 'updateSelf',
|
|
1167
|
+
},
|
|
1168
|
+
LOCUSINFO.EVENTS.SELF_MODERATOR_OR_COHOST_UPGRADE,
|
|
1169
|
+
self
|
|
1170
|
+
);
|
|
1171
|
+
}
|
|
1172
|
+
//
|
|
1173
|
+
if (parsedSelves.updates.isVideoMutedByOthersChanged) {
|
|
1174
|
+
this.emitScoped(
|
|
1175
|
+
{
|
|
1176
|
+
file: 'locus-info',
|
|
1177
|
+
function: 'updateSelf',
|
|
1178
|
+
},
|
|
1179
|
+
LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED,
|
|
1180
|
+
{
|
|
1181
|
+
muted: parsedSelves.current.remoteVideoMuted,
|
|
1182
|
+
// unmuteAllowed: not part of .self
|
|
1183
|
+
}
|
|
1184
|
+
);
|
|
1185
|
+
}
|
|
1073
1186
|
if (parsedSelves.updates.localAudioUnmuteRequiredByServer) {
|
|
1074
1187
|
this.emitScoped(
|
|
1075
1188
|
{
|
|
@@ -1204,8 +1317,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
1204
1317
|
this.parsedLocus.self = parsedSelves.current;
|
|
1205
1318
|
// @ts-ignore
|
|
1206
1319
|
this.self = self;
|
|
1207
|
-
}
|
|
1208
|
-
else {
|
|
1320
|
+
} else {
|
|
1209
1321
|
this.compareAndUpdateFlags.compareHostAndSelf = false;
|
|
1210
1322
|
}
|
|
1211
1323
|
}
|
|
@@ -1285,4 +1397,106 @@ export default class LocusInfo extends EventsScope {
|
|
|
1285
1397
|
this.identities = identities;
|
|
1286
1398
|
}
|
|
1287
1399
|
}
|
|
1400
|
+
|
|
1401
|
+
/**
|
|
1402
|
+
* check the locus is main session's one or not, if is main session's, update main session cache
|
|
1403
|
+
* @param {Object} locus
|
|
1404
|
+
* @returns {undefined}
|
|
1405
|
+
* @memberof LocusInfo
|
|
1406
|
+
*/
|
|
1407
|
+
updateLocusCache(locus: any) {
|
|
1408
|
+
const isMainSessionDTO = ControlsUtils.isMainSessionDTO(locus);
|
|
1409
|
+
if (isMainSessionDTO) {
|
|
1410
|
+
this.updateMainSessionLocusCache(locus);
|
|
1411
|
+
}
|
|
1412
|
+
}
|
|
1413
|
+
|
|
1414
|
+
/**
|
|
1415
|
+
* if return from breakout to main session, need to use cached main session DTO since locus won't send the full locus (participants)
|
|
1416
|
+
* if join breakout from main session, need to query main locus url (if response with 403 means no privilege, need to clear the cache)
|
|
1417
|
+
* @param {Object} newLocus
|
|
1418
|
+
* @returns {Object}
|
|
1419
|
+
* @memberof LocusInfo
|
|
1420
|
+
*/
|
|
1421
|
+
getTheLocusToUpdate(newLocus: any) {
|
|
1422
|
+
const switchStatus = ControlsUtils.getSessionSwitchStatus(this.controls, newLocus.controls);
|
|
1423
|
+
if (switchStatus.isReturnToMain && this.mainSessionLocusCache) {
|
|
1424
|
+
return cloneDeep(this.mainSessionLocusCache);
|
|
1425
|
+
}
|
|
1426
|
+
if (switchStatus.isJoinToBreakout) {
|
|
1427
|
+
this.emitScoped(
|
|
1428
|
+
{
|
|
1429
|
+
file: 'locus-info',
|
|
1430
|
+
function: 'updateControls',
|
|
1431
|
+
},
|
|
1432
|
+
LOCUSINFO.EVENTS.CONTROLS_JOIN_BREAKOUT_FROM_MAIN,
|
|
1433
|
+
{
|
|
1434
|
+
mainLocusUrl: this.url,
|
|
1435
|
+
}
|
|
1436
|
+
);
|
|
1437
|
+
}
|
|
1438
|
+
|
|
1439
|
+
return newLocus;
|
|
1440
|
+
}
|
|
1441
|
+
|
|
1442
|
+
/**
|
|
1443
|
+
* merge participants by participant id
|
|
1444
|
+
* @param {Array} participants
|
|
1445
|
+
* @param {Array} sourceParticipants
|
|
1446
|
+
* @returns {Array} merged participants
|
|
1447
|
+
* @memberof LocusInfo
|
|
1448
|
+
*/
|
|
1449
|
+
// eslint-disable-next-line class-methods-use-this
|
|
1450
|
+
mergeParticipants(participants, sourceParticipants) {
|
|
1451
|
+
if (!sourceParticipants || !sourceParticipants.length) return participants;
|
|
1452
|
+
if (!participants || !participants.length) {
|
|
1453
|
+
return sourceParticipants;
|
|
1454
|
+
}
|
|
1455
|
+
sourceParticipants.forEach((participant) => {
|
|
1456
|
+
const existIndex = participants.findIndex((p) => p.id === participant.id);
|
|
1457
|
+
if (existIndex > -1) {
|
|
1458
|
+
participants.splice(existIndex, 1, participant);
|
|
1459
|
+
} else {
|
|
1460
|
+
participants.push(participant);
|
|
1461
|
+
}
|
|
1462
|
+
});
|
|
1463
|
+
|
|
1464
|
+
return participants;
|
|
1465
|
+
}
|
|
1466
|
+
|
|
1467
|
+
/**
|
|
1468
|
+
* need cache main sessions' participants since locus will not send the full list when cohost/host leave breakout
|
|
1469
|
+
* @param {Object} mainLocus
|
|
1470
|
+
* @returns {undefined}
|
|
1471
|
+
* @memberof LocusInfo
|
|
1472
|
+
*/
|
|
1473
|
+
updateMainSessionLocusCache(mainLocus: any) {
|
|
1474
|
+
if (!mainLocus) {
|
|
1475
|
+
return;
|
|
1476
|
+
}
|
|
1477
|
+
const locusClone = cloneDeep(mainLocus);
|
|
1478
|
+
if (this.mainSessionLocusCache) {
|
|
1479
|
+
// eslint-disable-next-line consistent-return
|
|
1480
|
+
mergeWith(this.mainSessionLocusCache, locusClone, (objValue, srcValue, key) => {
|
|
1481
|
+
if (isArray(objValue)) {
|
|
1482
|
+
if (key === 'participants') {
|
|
1483
|
+
return this.mergeParticipants(objValue, srcValue);
|
|
1484
|
+
}
|
|
1485
|
+
|
|
1486
|
+
return srcValue; // just replace the old ones
|
|
1487
|
+
}
|
|
1488
|
+
});
|
|
1489
|
+
} else {
|
|
1490
|
+
this.mainSessionLocusCache = locusClone;
|
|
1491
|
+
}
|
|
1492
|
+
}
|
|
1493
|
+
|
|
1494
|
+
/**
|
|
1495
|
+
* clear main session cache
|
|
1496
|
+
* @returns {undefined}
|
|
1497
|
+
* @memberof LocusInfo
|
|
1498
|
+
*/
|
|
1499
|
+
clearMainSessionLocusCache() {
|
|
1500
|
+
this.mainSessionLocusCache = null;
|
|
1501
|
+
}
|
|
1288
1502
|
}
|
|
@@ -29,13 +29,22 @@ InfoUtils.parse = (info, roles, isJoined = true) => {
|
|
|
29
29
|
parsed.meetingNumber = info.meetingId;
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
+
if (info.datachannelUrl) {
|
|
33
|
+
parsed.datachannelUrl = info.datachannelUrl;
|
|
34
|
+
}
|
|
35
|
+
|
|
32
36
|
return parsed;
|
|
33
37
|
};
|
|
34
38
|
|
|
35
39
|
InfoUtils.parseDisplayHintSection = (info, displayHintKey) => {
|
|
36
40
|
const displayHints = {};
|
|
37
41
|
|
|
38
|
-
if (
|
|
42
|
+
if (
|
|
43
|
+
info &&
|
|
44
|
+
info.displayHints &&
|
|
45
|
+
info.displayHints[displayHintKey] &&
|
|
46
|
+
info.displayHints[displayHintKey].length > 0
|
|
47
|
+
) {
|
|
39
48
|
info.displayHints[displayHintKey].forEach((key) => {
|
|
40
49
|
displayHints[key] = true;
|
|
41
50
|
});
|
|
@@ -75,10 +84,13 @@ InfoUtils.getInfos = (oldInfo, newInfo, roles, isJoined) => {
|
|
|
75
84
|
current.isLocked = InfoUtils.isLocked(current.policy);
|
|
76
85
|
current.isUnlocked = InfoUtils.isUnlocked(current.policy);
|
|
77
86
|
|
|
78
|
-
if (previous && previous.isUnlocked && current.isLocked || !previous && current.isLocked) {
|
|
87
|
+
if ((previous && previous.isUnlocked && current.isLocked) || (!previous && current.isLocked)) {
|
|
79
88
|
updates.isLocked = current.isLocked;
|
|
80
89
|
}
|
|
81
|
-
if (
|
|
90
|
+
if (
|
|
91
|
+
(previous && previous.isLocked && current.isUnlocked) ||
|
|
92
|
+
(!previous && current.isUnlocked)
|
|
93
|
+
) {
|
|
82
94
|
updates.isUnlocked = current.isUnlocked;
|
|
83
95
|
}
|
|
84
96
|
}
|
|
@@ -86,7 +98,7 @@ InfoUtils.getInfos = (oldInfo, newInfo, roles, isJoined) => {
|
|
|
86
98
|
return {
|
|
87
99
|
previous,
|
|
88
100
|
current,
|
|
89
|
-
updates
|
|
101
|
+
updates,
|
|
90
102
|
};
|
|
91
103
|
};
|
|
92
104
|
|
|
@@ -12,13 +12,13 @@ MediaSharesUtils.parse = (mediaShares: object) => {
|
|
|
12
12
|
return {
|
|
13
13
|
content: {
|
|
14
14
|
beneficiaryId: MediaSharesUtils.getContentBeneficiaryId(mediaShares),
|
|
15
|
-
disposition: MediaSharesUtils.getContentDisposition(mediaShares)
|
|
15
|
+
disposition: MediaSharesUtils.getContentDisposition(mediaShares),
|
|
16
16
|
},
|
|
17
17
|
whiteboard: {
|
|
18
18
|
beneficiaryId: MediaSharesUtils.getWhiteboardBeneficiaryId(mediaShares),
|
|
19
19
|
disposition: MediaSharesUtils.getWhiteboardDisposition(mediaShares),
|
|
20
|
-
resourceUrl: MediaSharesUtils.getWhiteboardResourceUrl(mediaShares)
|
|
21
|
-
}
|
|
20
|
+
resourceUrl: MediaSharesUtils.getWhiteboardResourceUrl(mediaShares),
|
|
21
|
+
},
|
|
22
22
|
};
|
|
23
23
|
}
|
|
24
24
|
|
|
@@ -38,7 +38,7 @@ MediaSharesUtils.getMediaShares = (oldShare: object, newShare: object) => {
|
|
|
38
38
|
|
|
39
39
|
return {
|
|
40
40
|
previous,
|
|
41
|
-
current
|
|
41
|
+
current,
|
|
42
42
|
};
|
|
43
43
|
};
|
|
44
44
|
|