@webex/plugin-meetings 2.59.8-next.2 → 2.60.0-next.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +46 -8
- package/dist/annotation/annotation.types.js +7 -0
- package/dist/annotation/annotation.types.js.map +1 -0
- package/dist/annotation/constants.js +41 -0
- package/dist/annotation/constants.js.map +1 -0
- package/dist/annotation/index.js +357 -0
- package/dist/annotation/index.js.map +1 -0
- package/dist/breakouts/breakout.js +215 -0
- package/dist/breakouts/breakout.js.map +1 -0
- package/dist/breakouts/collection.js +22 -0
- package/dist/breakouts/collection.js.map +1 -0
- package/dist/breakouts/edit-lock-error.js +51 -0
- package/dist/breakouts/edit-lock-error.js.map +1 -0
- package/dist/breakouts/events.js +44 -0
- package/dist/breakouts/events.js.map +1 -0
- package/dist/breakouts/index.js +1047 -0
- package/dist/breakouts/index.js.map +1 -0
- package/dist/breakouts/request.js +77 -0
- package/dist/breakouts/request.js.map +1 -0
- package/dist/breakouts/utils.js +64 -0
- package/dist/breakouts/utils.js.map +1 -0
- package/dist/common/browser-detection.js +1 -2
- package/dist/common/browser-detection.js.map +1 -1
- package/dist/common/collection.js +1 -2
- package/dist/common/collection.js.map +1 -1
- package/dist/common/config.js +1 -2
- package/dist/common/config.js.map +1 -1
- package/dist/common/errors/captcha-error.js +1 -2
- package/dist/common/errors/captcha-error.js.map +1 -1
- package/dist/common/errors/intent-to-join.js +1 -2
- package/dist/common/errors/intent-to-join.js.map +1 -1
- package/dist/common/errors/join-meeting.js +1 -2
- package/dist/common/errors/join-meeting.js.map +1 -1
- package/dist/common/errors/media.js +1 -2
- package/dist/common/errors/media.js.map +1 -1
- package/dist/common/errors/no-meeting-info.js +50 -0
- package/dist/common/errors/no-meeting-info.js.map +1 -0
- package/dist/common/errors/parameter.js +3 -4
- package/dist/common/errors/parameter.js.map +1 -1
- package/dist/common/errors/password-error.js +1 -2
- package/dist/common/errors/password-error.js.map +1 -1
- package/dist/common/errors/permission.js +1 -2
- package/dist/common/errors/permission.js.map +1 -1
- package/dist/common/errors/reclaim-host-role-errors.js +154 -0
- package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
- package/dist/common/errors/reconnection-in-progress.js +1 -2
- package/dist/common/errors/reconnection-in-progress.js.map +1 -1
- package/dist/common/errors/reconnection.js +1 -2
- package/dist/common/errors/reconnection.js.map +1 -1
- package/dist/common/errors/stats.js +1 -2
- package/dist/common/errors/stats.js.map +1 -1
- package/dist/common/errors/webex-errors.js +48 -28
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/errors/webex-meetings-error.js +1 -2
- package/dist/common/errors/webex-meetings-error.js.map +1 -1
- package/dist/common/events/events-scope.js +1 -2
- package/dist/common/events/events-scope.js.map +1 -1
- package/dist/common/events/events.js +1 -2
- package/dist/common/events/events.js.map +1 -1
- package/dist/common/events/trigger-proxy.js +1 -2
- package/dist/common/events/trigger-proxy.js.map +1 -1
- package/dist/common/events/util.js +1 -2
- package/dist/common/events/util.js.map +1 -1
- package/dist/common/logs/logger-config.js +1 -2
- package/dist/common/logs/logger-config.js.map +1 -1
- package/dist/common/logs/logger-proxy.js +2 -3
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/logs/request.js +8 -5
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.js +22 -9
- package/dist/common/queue.js.map +1 -1
- package/dist/config.js +9 -12
- package/dist/config.js.map +1 -1
- package/dist/constants.js +437 -433
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/constants.js +3 -6
- package/dist/controls-options-manager/constants.js.map +1 -1
- package/dist/controls-options-manager/enums.js +14 -6
- package/dist/controls-options-manager/enums.js.map +1 -1
- package/dist/controls-options-manager/index.js +126 -37
- package/dist/controls-options-manager/index.js.map +1 -1
- 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 +309 -19
- package/dist/controls-options-manager/util.js.map +1 -1
- package/dist/index.js +116 -4
- package/dist/index.js.map +1 -1
- package/dist/interpretation/collection.js +22 -0
- package/dist/interpretation/collection.js.map +1 -0
- package/dist/interpretation/index.js +365 -0
- package/dist/interpretation/index.js.map +1 -0
- package/dist/interpretation/siLanguage.js +24 -0
- package/dist/interpretation/siLanguage.js.map +1 -0
- package/dist/locus-info/controlsUtils.js +95 -6
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/embeddedAppsUtils.js +3 -4
- package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
- package/dist/locus-info/fullState.js +1 -2
- package/dist/locus-info/fullState.js.map +1 -1
- package/dist/locus-info/hostUtils.js +1 -2
- package/dist/locus-info/hostUtils.js.map +1 -1
- package/dist/locus-info/index.js +408 -67
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +13 -5
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +58 -3
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +251 -78
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +97 -13
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +106 -319
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +96 -153
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js +1 -22
- package/dist/media/util.js.map +1 -1
- package/dist/mediaQualityMetrics/config.js +498 -493
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +90 -3
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +4579 -2951
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.js +291 -0
- package/dist/meeting/locusMediaRequest.js.map +1 -0
- package/dist/meeting/muteState.js +224 -133
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +295 -197
- 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 +1 -2
- package/dist/meeting/state.js.map +1 -1
- package/dist/meeting/util.js +602 -432
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/collection.js +1 -2
- package/dist/meeting-info/collection.js.map +1 -1
- package/dist/meeting-info/index.js +74 -7
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +197 -63
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.js +1 -2
- package/dist/meeting-info/request.js.map +1 -1
- package/dist/meeting-info/util.js +2 -3
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +25 -12
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +23 -2
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +464 -123
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/meetings.types.js +7 -0
- package/dist/meetings/meetings.types.js.map +1 -0
- package/dist/meetings/request.js +4 -3
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +107 -6
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +54 -2
- package/dist/member/index.js.map +1 -1
- package/dist/member/member.types.js +3 -4
- package/dist/member/member.types.js.map +1 -1
- package/dist/member/types.js +23 -0
- package/dist/member/types.js.map +1 -0
- package/dist/member/util.js +131 -29
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +11 -2
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +172 -8
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +108 -41
- package/dist/members/request.js.map +1 -1
- package/dist/members/types.js +14 -0
- package/dist/members/types.js.map +1 -0
- package/dist/members/util.js +327 -234
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.js +14 -7
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +4 -452
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +344 -0
- package/dist/multistream/mediaRequestManager.js.map +1 -0
- package/dist/multistream/receiveSlot.js +200 -0
- package/dist/multistream/receiveSlot.js.map +1 -0
- package/dist/multistream/receiveSlotManager.js +174 -0
- package/dist/multistream/receiveSlotManager.js.map +1 -0
- package/dist/multistream/remoteMedia.js +268 -0
- package/dist/multistream/remoteMedia.js.map +1 -0
- package/dist/multistream/remoteMediaGroup.js +267 -0
- package/dist/multistream/remoteMediaGroup.js.map +1 -0
- package/dist/multistream/remoteMediaManager.js +1211 -0
- package/dist/multistream/remoteMediaManager.js.map +1 -0
- package/dist/multistream/sendSlotManager.js +236 -0
- package/dist/multistream/sendSlotManager.js.map +1 -0
- package/dist/networkQualityMonitor/index.js +5 -4
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/personal-meeting-room/index.js +2 -3
- package/dist/personal-meeting-room/index.js.map +1 -1
- package/dist/personal-meeting-room/request.js +2 -3
- package/dist/personal-meeting-room/request.js.map +1 -1
- package/dist/personal-meeting-room/util.js +1 -2
- package/dist/personal-meeting-room/util.js.map +1 -1
- package/dist/reachability/index.js +258 -72
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +18 -10
- package/dist/reachability/request.js.map +1 -1
- package/dist/reactions/constants.js +12 -0
- package/dist/reactions/constants.js.map +1 -0
- package/dist/reactions/reactions.js +4 -6
- package/dist/reactions/reactions.js.map +1 -1
- package/dist/reactions/reactions.type.js +21 -23
- package/dist/reactions/reactions.type.js.map +1 -1
- package/dist/reconnection-manager/index.js +272 -220
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/enums.js +4 -5
- package/dist/recording-controller/enums.js.map +1 -1
- package/dist/recording-controller/index.js +57 -46
- package/dist/recording-controller/index.js.map +1 -1
- package/dist/recording-controller/util.js +10 -10
- package/dist/recording-controller/util.js.map +1 -1
- package/dist/roap/index.js +101 -235
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +126 -180
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +115 -105
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/rtcMetrics/constants.js +11 -0
- package/dist/rtcMetrics/constants.js.map +1 -0
- package/dist/rtcMetrics/index.js +115 -0
- package/dist/rtcMetrics/index.js.map +1 -0
- package/dist/statsAnalyzer/global.js +2 -93
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.js +374 -374
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +100 -66
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.js +1 -2
- package/dist/transcription/index.js.map +1 -1
- package/dist/webinar/collection.js +43 -0
- package/dist/webinar/collection.js.map +1 -0
- package/dist/webinar/index.js +68 -0
- package/dist/webinar/index.js.map +1 -0
- package/package.json +27 -18
- package/src/annotation/annotation.types.ts +50 -0
- package/src/annotation/constants.ts +36 -0
- package/src/annotation/index.ts +328 -0
- package/src/breakouts/README.md +220 -0
- package/src/breakouts/breakout.ts +188 -0
- package/src/breakouts/collection.ts +19 -0
- package/src/breakouts/edit-lock-error.ts +25 -0
- package/src/breakouts/events.ts +56 -0
- package/src/breakouts/index.ts +925 -0
- package/src/breakouts/request.ts +55 -0
- package/src/breakouts/utils.ts +57 -0
- package/src/common/errors/no-meeting-info.ts +24 -0
- package/src/common/errors/reclaim-host-role-errors.ts +134 -0
- package/src/common/errors/webex-errors.ts +36 -12
- package/src/common/logs/logger-proxy.ts +1 -1
- package/src/common/logs/request.ts +5 -1
- package/src/common/queue.ts +22 -8
- package/src/config.ts +7 -9
- package/src/constants.ts +263 -89
- package/src/controls-options-manager/enums.ts +11 -1
- package/src/controls-options-manager/index.ts +116 -21
- package/src/controls-options-manager/types.ts +59 -0
- package/src/controls-options-manager/util.ts +294 -14
- package/src/index.ts +40 -0
- package/src/interpretation/README.md +60 -0
- package/src/interpretation/collection.ts +19 -0
- package/src/interpretation/index.ts +332 -0
- package/src/interpretation/siLanguage.ts +18 -0
- package/src/locus-info/controlsUtils.ts +110 -0
- package/src/locus-info/index.ts +449 -61
- package/src/locus-info/infoUtils.ts +14 -2
- package/src/locus-info/mediaSharesUtils.ts +64 -0
- package/src/locus-info/parser.ts +258 -47
- package/src/locus-info/selfUtils.ts +85 -2
- package/src/media/index.ts +153 -370
- package/src/media/properties.ts +106 -136
- package/src/media/util.ts +0 -21
- package/src/mediaQualityMetrics/config.ts +379 -377
- package/src/meeting/in-meeting-actions.ts +168 -0
- package/src/meeting/index.ts +3801 -2457
- package/src/meeting/locusMediaRequest.ts +313 -0
- package/src/meeting/muteState.ts +224 -138
- package/src/meeting/request.ts +207 -127
- package/src/meeting/request.type.ts +13 -0
- package/src/meeting/util.ts +590 -423
- package/src/meeting-info/index.ts +81 -8
- package/src/meeting-info/meeting-info-v2.ts +159 -13
- package/src/meeting-info/util.ts +1 -1
- package/src/meeting-info/utilv2.ts +22 -9
- package/src/meetings/collection.ts +20 -0
- package/src/meetings/index.ts +466 -124
- package/src/meetings/meetings.types.ts +12 -0
- package/src/meetings/request.ts +2 -0
- package/src/meetings/util.ts +116 -5
- package/src/member/index.ts +52 -1
- package/src/member/types.ts +38 -0
- package/src/member/util.ts +139 -28
- package/src/members/collection.ts +8 -0
- package/src/members/index.ts +196 -7
- package/src/members/request.ts +97 -17
- package/src/members/types.ts +29 -0
- package/src/members/util.ts +333 -240
- package/src/metrics/constants.ts +12 -4
- package/src/metrics/index.ts +1 -471
- package/src/multistream/mediaRequestManager.ts +440 -0
- package/src/multistream/receiveSlot.ts +184 -0
- package/src/multistream/receiveSlotManager.ts +166 -0
- package/src/multistream/remoteMedia.ts +254 -0
- package/src/multistream/remoteMediaGroup.ts +284 -0
- package/src/multistream/remoteMediaManager.ts +1145 -0
- package/src/multistream/sendSlotManager.ts +170 -0
- package/src/networkQualityMonitor/index.ts +6 -6
- package/src/reachability/index.ts +238 -45
- package/src/reachability/request.ts +17 -8
- package/src/reactions/constants.ts +4 -0
- package/src/reactions/reactions.ts +4 -4
- package/src/reactions/reactions.type.ts +30 -4
- package/src/reconnection-manager/index.ts +124 -107
- package/src/recording-controller/index.ts +20 -3
- package/src/recording-controller/util.ts +26 -9
- package/src/roap/index.ts +98 -240
- package/src/roap/request.ts +74 -148
- package/src/roap/turnDiscovery.ts +62 -56
- package/src/rtcMetrics/constants.ts +3 -0
- package/src/rtcMetrics/index.ts +100 -0
- package/src/statsAnalyzer/global.ts +1 -92
- package/src/statsAnalyzer/index.ts +429 -447
- package/src/statsAnalyzer/mqaUtil.ts +105 -103
- package/src/webinar/collection.ts +31 -0
- package/src/webinar/index.ts +62 -0
- package/test/integration/spec/converged-space-meetings.js +233 -0
- package/test/integration/spec/journey.js +320 -264
- package/test/integration/spec/space-meeting.js +77 -4
- package/test/unit/spec/annotation/index.ts +418 -0
- package/test/unit/spec/breakouts/breakout.ts +237 -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/events.ts +89 -0
- package/test/unit/spec/breakouts/index.ts +1790 -0
- package/test/unit/spec/breakouts/request.ts +104 -0
- package/test/unit/spec/breakouts/utils.js +72 -0
- package/test/unit/spec/common/queue.js +31 -2
- package/test/unit/spec/controls-options-manager/index.js +163 -0
- package/test/unit/spec/controls-options-manager/util.js +576 -60
- package/test/unit/spec/fixture/locus.js +1 -0
- package/test/unit/spec/interpretation/collection.ts +15 -0
- package/test/unit/spec/interpretation/index.ts +589 -0
- package/test/unit/spec/interpretation/siLanguage.ts +28 -0
- package/test/unit/spec/locus-info/controlsUtils.js +323 -30
- package/test/unit/spec/locus-info/index.js +1390 -16
- package/test/unit/spec/locus-info/infoUtils.js +54 -16
- package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
- package/test/unit/spec/locus-info/lib/selfConstant.js +48 -0
- package/test/unit/spec/locus-info/mediaSharesUtils.ts +32 -0
- package/test/unit/spec/locus-info/parser.js +116 -35
- package/test/unit/spec/locus-info/selfUtils.js +275 -0
- package/test/unit/spec/media/index.ts +274 -0
- package/test/unit/spec/media/properties.ts +75 -84
- package/test/unit/spec/meeting/in-meeting-actions.ts +82 -0
- package/test/unit/spec/meeting/index.js +7420 -3125
- package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
- package/test/unit/spec/meeting/muteState.js +407 -212
- package/test/unit/spec/meeting/request.js +512 -42
- package/test/unit/spec/meeting/utils.js +741 -24
- package/test/unit/spec/meeting-info/index.js +300 -0
- package/test/unit/spec/meeting-info/meetinginfov2.js +500 -6
- package/test/unit/spec/meeting-info/utilv2.js +21 -0
- package/test/unit/spec/meetings/collection.js +14 -0
- package/test/unit/spec/meetings/index.js +1012 -209
- package/test/unit/spec/meetings/utils.js +202 -2
- package/test/unit/spec/member/index.js +38 -8
- package/test/unit/spec/member/util.js +528 -27
- package/test/unit/spec/members/index.js +597 -3
- package/test/unit/spec/members/request.js +206 -27
- package/test/unit/spec/members/utils.js +210 -0
- package/test/unit/spec/metrics/index.js +1 -50
- package/test/unit/spec/multistream/mediaRequestManager.ts +1418 -0
- package/test/unit/spec/multistream/receiveSlot.ts +163 -0
- package/test/unit/spec/multistream/receiveSlotManager.ts +203 -0
- package/test/unit/spec/multistream/remoteMedia.ts +255 -0
- package/test/unit/spec/multistream/remoteMediaGroup.ts +662 -0
- package/test/unit/spec/multistream/remoteMediaManager.ts +1924 -0
- package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
- package/test/unit/spec/networkQualityMonitor/index.js +4 -4
- package/test/unit/spec/reachability/index.ts +598 -24
- package/test/unit/spec/reachability/request.js +68 -0
- package/test/unit/spec/reconnection-manager/index.js +130 -22
- package/test/unit/spec/recording-controller/index.js +293 -218
- package/test/unit/spec/recording-controller/util.js +223 -96
- package/test/unit/spec/roap/index.ts +200 -77
- package/test/unit/spec/roap/request.ts +232 -0
- package/test/unit/spec/roap/turnDiscovery.ts +86 -48
- package/test/unit/spec/rtcMetrics/index.ts +73 -0
- package/test/unit/spec/stats-analyzer/index.js +205 -50
- package/test/unit/spec/webinar/collection.ts +13 -0
- package/test/unit/spec/webinar/index.ts +60 -0
- package/test/utils/constants.js +9 -0
- package/test/utils/integrationTestUtils.js +46 -0
- package/test/utils/testUtils.js +0 -45
- package/test/utils/webex-config.js +4 -0
- package/test/utils/webex-test-users.js +7 -3
- package/dist/meeting/effectsState.js +0 -260
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/metrics/config.js +0 -289
- package/dist/metrics/config.js.map +0 -1
- package/dist/peer-connection-manager/index.js +0 -671
- package/dist/peer-connection-manager/index.js.map +0 -1
- package/dist/peer-connection-manager/util.js +0 -110
- package/dist/peer-connection-manager/util.js.map +0 -1
- package/dist/roap/collection.js +0 -63
- package/dist/roap/collection.js.map +0 -1
- package/dist/roap/handler.js +0 -279
- package/dist/roap/handler.js.map +0 -1
- package/dist/roap/state.js +0 -127
- package/dist/roap/state.js.map +0 -1
- package/dist/roap/util.js +0 -76
- package/dist/roap/util.js.map +0 -1
- package/src/index.js +0 -15
- package/src/meeting/effectsState.ts +0 -209
- package/src/metrics/config.ts +0 -485
- package/src/peer-connection-manager/index.ts +0 -847
- package/src/peer-connection-manager/util.ts +0 -119
- package/src/roap/collection.ts +0 -62
- package/src/roap/handler.ts +0 -294
- package/src/roap/state.ts +0 -156
- package/src/roap/util.ts +0 -100
- package/test/unit/spec/meeting/effectsState.js +0 -281
- package/test/unit/spec/peerconnection-manager/index.js +0 -218
- package/test/unit/spec/peerconnection-manager/utils.js +0 -49
- package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -388
- package/test/unit/spec/roap/util.js +0 -30
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
NoiseReductionEffectOptions,
|
|
3
|
+
VirtualBackgroundEffectOptions,
|
|
4
|
+
} from '@webex/media-helpers';
|
|
5
|
+
|
|
6
|
+
type INoiseReductionEffect = Omit<
|
|
7
|
+
NoiseReductionEffectOptions,
|
|
8
|
+
'authToken' | 'workletProcessorUrl' | 'legacyProcessorUrl'
|
|
9
|
+
>;
|
|
10
|
+
type IVirtualBackgroundEffect = Omit<VirtualBackgroundEffectOptions, 'authToken'>;
|
|
11
|
+
|
|
12
|
+
export type {INoiseReductionEffect, IVirtualBackgroundEffect};
|
package/src/meetings/request.ts
CHANGED
|
@@ -23,6 +23,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
23
23
|
LoggerProxy.logger.error(
|
|
24
24
|
`Meetings:request#getActiveMeetings --> failed to get locus details, ${error}`
|
|
25
25
|
);
|
|
26
|
+
throw new Error(error);
|
|
26
27
|
});
|
|
27
28
|
}
|
|
28
29
|
|
|
@@ -71,6 +72,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
71
72
|
LoggerProxy.logger.error(
|
|
72
73
|
`Meetings:request#determineRedirections --> failed to get locus details from url: ${url}, reason: ${error}`
|
|
73
74
|
);
|
|
75
|
+
throw new Error(error);
|
|
74
76
|
})
|
|
75
77
|
)
|
|
76
78
|
).then(() => Promise.resolve(responseBody));
|
package/src/meetings/util.ts
CHANGED
|
@@ -1,15 +1,23 @@
|
|
|
1
1
|
/* globals window */
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
|
-
_LOCUS_ID_,
|
|
5
|
-
_INCOMING_,
|
|
6
4
|
_CREATED_,
|
|
7
|
-
|
|
5
|
+
_INCOMING_,
|
|
6
|
+
_JOINED_,
|
|
7
|
+
_LEFT_,
|
|
8
|
+
_LOCUS_ID_,
|
|
9
|
+
_MOVED_,
|
|
10
|
+
BREAKOUTS,
|
|
8
11
|
CORRELATION_ID,
|
|
9
12
|
EVENT_TRIGGERS,
|
|
13
|
+
LOCUS,
|
|
14
|
+
LOCUSEVENT,
|
|
15
|
+
ROAP,
|
|
10
16
|
} from '../constants';
|
|
11
17
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
12
18
|
import Trigger from '../common/events/trigger-proxy';
|
|
19
|
+
import BEHAVIORAL_METRICS from '../metrics/constants';
|
|
20
|
+
import Metrics from '../metrics';
|
|
13
21
|
|
|
14
22
|
/**
|
|
15
23
|
* Meetings Media Codec Missing Event
|
|
@@ -41,11 +49,54 @@ MeetingsUtil.handleRoapMercury = (envelope, meetingCollection) => {
|
|
|
41
49
|
const meeting = meetingCollection.getByKey(CORRELATION_ID, data.correlationId);
|
|
42
50
|
|
|
43
51
|
if (meeting) {
|
|
44
|
-
|
|
52
|
+
const {seq, messageType, tieBreaker, errorType, errorCause} = data.message;
|
|
53
|
+
|
|
54
|
+
Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ROAP_MERCURY_EVENT_RECEIVED, {
|
|
55
|
+
correlation_id: data.correlationId,
|
|
56
|
+
seq,
|
|
57
|
+
message_type: messageType,
|
|
58
|
+
error_type: errorType,
|
|
59
|
+
error_cause: errorCause,
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
if (messageType === ROAP.ROAP_TYPES.TURN_DISCOVERY_RESPONSE) {
|
|
63
|
+
// turn discovery is not part of normal roap protocol and so we are not handling it
|
|
64
|
+
// through the usual roap state machine
|
|
65
|
+
meeting.roap.turnDiscovery.handleTurnDiscoveryResponse(data.message);
|
|
66
|
+
} else {
|
|
67
|
+
const roapMessage = {
|
|
68
|
+
seq,
|
|
69
|
+
messageType,
|
|
70
|
+
sdp: data.message.sdps?.length > 0 ? data.message.sdps[0] : undefined,
|
|
71
|
+
tieBreaker,
|
|
72
|
+
errorType,
|
|
73
|
+
errorCause,
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
meeting.roapMessageReceived(roapMessage);
|
|
77
|
+
}
|
|
45
78
|
}
|
|
46
79
|
}
|
|
47
80
|
};
|
|
48
81
|
|
|
82
|
+
MeetingsUtil.getMediaServer = (sdp) => {
|
|
83
|
+
let mediaServer;
|
|
84
|
+
|
|
85
|
+
// Attempt to collect the media server from the roap message.
|
|
86
|
+
try {
|
|
87
|
+
mediaServer = sdp
|
|
88
|
+
.split('\r\n')
|
|
89
|
+
.find((line) => line.startsWith('o='))
|
|
90
|
+
.split(' ')
|
|
91
|
+
.shift()
|
|
92
|
+
.replace('o=', '');
|
|
93
|
+
} catch {
|
|
94
|
+
mediaServer = undefined;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
return mediaServer;
|
|
98
|
+
};
|
|
99
|
+
|
|
49
100
|
MeetingsUtil.checkForCorrelationId = (deviceUrl, locus) => {
|
|
50
101
|
let devices = [];
|
|
51
102
|
|
|
@@ -67,11 +118,13 @@ MeetingsUtil.checkForCorrelationId = (deviceUrl, locus) => {
|
|
|
67
118
|
MeetingsUtil.parseDefaultSiteFromMeetingPreferences = (userPreferences) => {
|
|
68
119
|
let result = '';
|
|
69
120
|
|
|
70
|
-
if (userPreferences
|
|
121
|
+
if (userPreferences?.sites?.length) {
|
|
71
122
|
const defaultSite = userPreferences.sites.find((site) => site.default);
|
|
72
123
|
|
|
73
124
|
if (defaultSite) {
|
|
74
125
|
result = defaultSite.siteUrl;
|
|
126
|
+
} else {
|
|
127
|
+
result = userPreferences.sites[0].siteUrl;
|
|
75
128
|
}
|
|
76
129
|
}
|
|
77
130
|
|
|
@@ -178,4 +231,62 @@ MeetingsUtil.checkH264Support = async function checkH264Support(options: {
|
|
|
178
231
|
}, delay);
|
|
179
232
|
};
|
|
180
233
|
|
|
234
|
+
/**
|
|
235
|
+
* get device from locus data
|
|
236
|
+
* @param {Object} newLocus new locus data
|
|
237
|
+
* @param {String} deviceUrl current device url
|
|
238
|
+
* @returns {Object}
|
|
239
|
+
*/
|
|
240
|
+
MeetingsUtil.getThisDevice = (newLocus: any, deviceUrl: string) => {
|
|
241
|
+
if (newLocus?.self?.devices?.length > 0) {
|
|
242
|
+
return newLocus.self.devices.find((device) => device.url === deviceUrl);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
return null;
|
|
246
|
+
};
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* get self device joined status from locus data
|
|
250
|
+
* @param {Object} meeting current meeting data
|
|
251
|
+
* @param {Object} newLocus new locus data
|
|
252
|
+
* @param {String} deviceUrl current device url
|
|
253
|
+
* @returns {Object}
|
|
254
|
+
*/
|
|
255
|
+
MeetingsUtil.joinedOnThisDevice = (meeting: any, newLocus: any, deviceUrl: string) => {
|
|
256
|
+
const thisDevice = MeetingsUtil.getThisDevice(newLocus, deviceUrl);
|
|
257
|
+
if (thisDevice) {
|
|
258
|
+
if (!thisDevice.correlationId || meeting?.correlationId === thisDevice.correlationId) {
|
|
259
|
+
return (
|
|
260
|
+
thisDevice.state === _JOINED_ ||
|
|
261
|
+
(thisDevice.state === _LEFT_ && thisDevice.reason === _MOVED_)
|
|
262
|
+
);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
return false;
|
|
267
|
+
};
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* check the new locus is breakout session's one or not
|
|
271
|
+
* @param {Object} newLocus new locus data
|
|
272
|
+
* @returns {boolean}
|
|
273
|
+
* @private
|
|
274
|
+
*/
|
|
275
|
+
MeetingsUtil.isBreakoutLocusDTO = (newLocus: any) => {
|
|
276
|
+
return newLocus?.controls?.breakout?.sessionType === BREAKOUTS.SESSION_TYPES.BREAKOUT;
|
|
277
|
+
};
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* check the locus is valid breakout locus or not
|
|
281
|
+
* @param {Object} locus
|
|
282
|
+
* @returns {boolean}
|
|
283
|
+
* @private
|
|
284
|
+
*/
|
|
285
|
+
MeetingsUtil.isValidBreakoutLocus = (locus: any) => {
|
|
286
|
+
const inActiveStatus = locus?.fullState?.state === LOCUS.STATE.INACTIVE;
|
|
287
|
+
const isLocusAsBreakout = MeetingsUtil.isBreakoutLocusDTO(locus);
|
|
288
|
+
const selfJoined = locus.self?.state === _JOINED_;
|
|
289
|
+
|
|
290
|
+
return isLocusAsBreakout && !inActiveStatus && selfJoined;
|
|
291
|
+
};
|
|
181
292
|
export default MeetingsUtil;
|
package/src/member/index.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
3
3
|
*/
|
|
4
4
|
import {MEETINGS, _IN_LOBBY_, _NOT_IN_MEETING_, _IN_MEETING_} from '../constants';
|
|
5
|
-
import {IMediaStatus} from './
|
|
5
|
+
import {IExternalRoles, IMediaStatus, ParticipantWithRoles} from './types';
|
|
6
6
|
|
|
7
7
|
import MemberUtil from './util';
|
|
8
8
|
|
|
@@ -11,6 +11,7 @@ import MemberUtil from './util';
|
|
|
11
11
|
*/
|
|
12
12
|
export default class Member {
|
|
13
13
|
associatedUser: any;
|
|
14
|
+
canReclaimHost: boolean;
|
|
14
15
|
id: any;
|
|
15
16
|
isAudioMuted: any;
|
|
16
17
|
isContentSharing: any;
|
|
@@ -29,10 +30,14 @@ export default class Member {
|
|
|
29
30
|
isSelf: any;
|
|
30
31
|
isUser: any;
|
|
31
32
|
isVideoMuted: any;
|
|
33
|
+
roles: IExternalRoles;
|
|
32
34
|
mediaStatus: IMediaStatus;
|
|
33
35
|
name: any;
|
|
34
36
|
participant: any;
|
|
35
37
|
status: any;
|
|
38
|
+
supportsBreakouts: boolean;
|
|
39
|
+
supportsInterpretation: boolean;
|
|
40
|
+
supportLiveAnnotation: boolean;
|
|
36
41
|
type: any;
|
|
37
42
|
namespace = MEETINGS;
|
|
38
43
|
|
|
@@ -57,6 +62,13 @@ export default class Member {
|
|
|
57
62
|
}
|
|
58
63
|
| any = {}
|
|
59
64
|
) {
|
|
65
|
+
/**
|
|
66
|
+
* @instance
|
|
67
|
+
* @type {Boolean}
|
|
68
|
+
* @public
|
|
69
|
+
* @memberof Member
|
|
70
|
+
*/
|
|
71
|
+
this.canReclaimHost = false;
|
|
60
72
|
/**
|
|
61
73
|
* The server participant object
|
|
62
74
|
* @instance
|
|
@@ -102,6 +114,20 @@ export default class Member {
|
|
|
102
114
|
* @memberof Member
|
|
103
115
|
*/
|
|
104
116
|
this.isHandRaised = null;
|
|
117
|
+
/**
|
|
118
|
+
* @instance
|
|
119
|
+
* @type {Boolean}
|
|
120
|
+
* @public
|
|
121
|
+
* @memberof Member
|
|
122
|
+
*/
|
|
123
|
+
this.supportsBreakouts = null;
|
|
124
|
+
/**
|
|
125
|
+
* @instance
|
|
126
|
+
* @type {Boolean}
|
|
127
|
+
* @public
|
|
128
|
+
* @memberof Member
|
|
129
|
+
*/
|
|
130
|
+
this.supportLiveAnnotation = null;
|
|
105
131
|
/**
|
|
106
132
|
* @instance
|
|
107
133
|
* @type {Boolean}
|
|
@@ -222,6 +248,15 @@ export default class Member {
|
|
|
222
248
|
* @memberof Member
|
|
223
249
|
*/
|
|
224
250
|
this.isModeratorAssignmentProhibited = null;
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* @instance
|
|
254
|
+
* @type {IExternalRoles}
|
|
255
|
+
* @public
|
|
256
|
+
* @memberof Member
|
|
257
|
+
*/
|
|
258
|
+
this.roles = null;
|
|
259
|
+
|
|
225
260
|
/**
|
|
226
261
|
* @instance
|
|
227
262
|
* @type {IMediaStatus}
|
|
@@ -250,11 +285,15 @@ export default class Member {
|
|
|
250
285
|
private processParticipant(participant: object) {
|
|
251
286
|
this.participant = participant;
|
|
252
287
|
if (participant) {
|
|
288
|
+
this.canReclaimHost = MemberUtil.canReclaimHost(participant);
|
|
253
289
|
this.id = MemberUtil.extractId(participant);
|
|
254
290
|
this.name = MemberUtil.extractName(participant);
|
|
255
291
|
this.isAudioMuted = MemberUtil.isAudioMuted(participant);
|
|
256
292
|
this.isVideoMuted = MemberUtil.isVideoMuted(participant);
|
|
257
293
|
this.isHandRaised = MemberUtil.isHandRaised(participant);
|
|
294
|
+
this.supportsBreakouts = MemberUtil.isBreakoutsSupported(participant);
|
|
295
|
+
this.supportsInterpretation = MemberUtil.isInterpretationSupported(participant);
|
|
296
|
+
this.supportLiveAnnotation = MemberUtil.isLiveAnnotationSupported(participant);
|
|
258
297
|
this.isGuest = MemberUtil.isGuest(participant);
|
|
259
298
|
this.isUser = MemberUtil.isUser(participant);
|
|
260
299
|
this.isDevice = MemberUtil.isDevice(participant);
|
|
@@ -262,6 +301,7 @@ export default class Member {
|
|
|
262
301
|
this.isModeratorAssignmentProhibited =
|
|
263
302
|
MemberUtil.isModeratorAssignmentProhibited(participant);
|
|
264
303
|
this.processStatus(participant);
|
|
304
|
+
this.processRoles(participant as ParticipantWithRoles);
|
|
265
305
|
// must be done last
|
|
266
306
|
this.isNotAdmitted = MemberUtil.isNotAdmitted(participant, this.isGuest, this.status);
|
|
267
307
|
}
|
|
@@ -433,6 +473,17 @@ export default class Member {
|
|
|
433
473
|
}
|
|
434
474
|
}
|
|
435
475
|
|
|
476
|
+
/**
|
|
477
|
+
* process the roles that have been applied to this member
|
|
478
|
+
* @param {Object} participant
|
|
479
|
+
* @returns {undefined}
|
|
480
|
+
* @private
|
|
481
|
+
* @memberof Member
|
|
482
|
+
*/
|
|
483
|
+
private processRoles(participant: ParticipantWithRoles) {
|
|
484
|
+
this.roles = MemberUtil.extractControlRoles(participant);
|
|
485
|
+
}
|
|
486
|
+
|
|
436
487
|
/**
|
|
437
488
|
* set the type for the member, could be MEETING or CALL
|
|
438
489
|
* @param {String} type
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export interface IExternalRoles {
|
|
2
|
+
cohost: boolean;
|
|
3
|
+
moderator: boolean;
|
|
4
|
+
presenter: boolean;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export enum ServerRoles {
|
|
8
|
+
Cohost = 'COHOST',
|
|
9
|
+
Moderator = 'MODERATOR',
|
|
10
|
+
Presenter = 'PRESENTER',
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export type ServerRoleShape = {
|
|
14
|
+
type: ServerRoles;
|
|
15
|
+
hasRole: boolean;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export type ParticipantWithRoles = {
|
|
19
|
+
controls: {
|
|
20
|
+
role: {
|
|
21
|
+
roles: Array<ServerRoleShape>;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
// values are inherited from locus so don't update these
|
|
27
|
+
export enum MediaStatus {
|
|
28
|
+
RECVONLY = 'RECVONLY', // participant only receiving and not sending
|
|
29
|
+
SENDONLY = 'SENDONLY', // participant only sending and not receiving
|
|
30
|
+
SENDRECV = 'SENDRECV', // participant both sending and receiving
|
|
31
|
+
INACTIVE = 'INACTIVE', // participant is not connected to media source
|
|
32
|
+
UNKNOWN = 'UNKNOWN', // participant has not added media in the meeting
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export interface IMediaStatus {
|
|
36
|
+
audio: MediaStatus;
|
|
37
|
+
video: MediaStatus;
|
|
38
|
+
}
|
package/src/member/util.ts
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
import {
|
|
2
|
+
IExternalRoles,
|
|
3
|
+
ParticipantWithRoles,
|
|
4
|
+
ServerRoles,
|
|
5
|
+
ServerRoleShape,
|
|
6
|
+
IMediaStatus,
|
|
7
|
+
} from './types';
|
|
1
8
|
import {
|
|
2
9
|
_USER_,
|
|
3
10
|
_RESOURCE_ROOM_,
|
|
@@ -14,12 +21,79 @@ import {
|
|
|
14
21
|
_SEND_RECEIVE_,
|
|
15
22
|
_RECEIVE_ONLY_,
|
|
16
23
|
_CALL_,
|
|
24
|
+
VIDEO,
|
|
25
|
+
AUDIO,
|
|
17
26
|
} from '../constants';
|
|
18
27
|
import ParameterError from '../common/errors/parameter';
|
|
19
|
-
import {IMediaStatus} from './member.types';
|
|
20
28
|
|
|
21
29
|
const MemberUtil: any = {};
|
|
22
30
|
|
|
31
|
+
/**
|
|
32
|
+
* @param {Object} participant the locus participant
|
|
33
|
+
* @returns {Boolean}
|
|
34
|
+
*/
|
|
35
|
+
MemberUtil.canReclaimHost = (participant) => {
|
|
36
|
+
if (!participant) {
|
|
37
|
+
throw new ParameterError(
|
|
38
|
+
'canReclaimHostRole could not be processed, participant is undefined.'
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return participant.canReclaimHostRole || false;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* @param {Object} participant the locus participant
|
|
47
|
+
* @returns {[ServerRoleShape]}
|
|
48
|
+
*/
|
|
49
|
+
MemberUtil.getControlsRoles = (participant: ParticipantWithRoles): Array<ServerRoleShape> =>
|
|
50
|
+
participant?.controls?.role?.roles;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* @param {Object} participant the locus participant
|
|
54
|
+
* @param {ServerRoles} controlRole the search role
|
|
55
|
+
* @returns {Boolean}
|
|
56
|
+
*/
|
|
57
|
+
MemberUtil.hasRole = (participant: any, controlRole: ServerRoles): boolean =>
|
|
58
|
+
MemberUtil.getControlsRoles(participant)?.some(
|
|
59
|
+
(role) => role.type === controlRole && role.hasRole
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* @param {Object} participant the locus participant
|
|
64
|
+
* @returns {Boolean}
|
|
65
|
+
*/
|
|
66
|
+
MemberUtil.hasCohost = (participant: ParticipantWithRoles): boolean =>
|
|
67
|
+
MemberUtil.hasRole(participant, ServerRoles.Cohost) || false;
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* @param {Object} participant the locus participant
|
|
71
|
+
* @returns {Boolean}
|
|
72
|
+
*/
|
|
73
|
+
MemberUtil.hasModerator = (participant: ParticipantWithRoles): boolean =>
|
|
74
|
+
MemberUtil.hasRole(participant, ServerRoles.Moderator) || false;
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* @param {Object} participant the locus participant
|
|
78
|
+
* @returns {Boolean}
|
|
79
|
+
*/
|
|
80
|
+
MemberUtil.hasPresenter = (participant: ParticipantWithRoles): boolean =>
|
|
81
|
+
MemberUtil.hasRole(participant, ServerRoles.Presenter) || false;
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* @param {Object} participant the locus participant
|
|
85
|
+
* @returns {IExternalRoles}
|
|
86
|
+
*/
|
|
87
|
+
MemberUtil.extractControlRoles = (participant: ParticipantWithRoles): IExternalRoles => {
|
|
88
|
+
const roles = {
|
|
89
|
+
cohost: MemberUtil.hasCohost(participant),
|
|
90
|
+
moderator: MemberUtil.hasModerator(participant),
|
|
91
|
+
presenter: MemberUtil.hasPresenter(participant),
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
return roles;
|
|
95
|
+
};
|
|
96
|
+
|
|
23
97
|
/**
|
|
24
98
|
* @param {Object} participant the locus participant
|
|
25
99
|
* @returns {Boolean}
|
|
@@ -94,30 +168,20 @@ MemberUtil.isAudioMuted = (participant: any) => {
|
|
|
94
168
|
if (!participant) {
|
|
95
169
|
throw new ParameterError('Audio could not be processed, participant is undefined.');
|
|
96
170
|
}
|
|
97
|
-
const mutedStatus = MemberUtil.isMuted(participant.status, AUDIO_STATUS);
|
|
98
171
|
|
|
99
|
-
|
|
100
|
-
if (participant.controls.audio.muted) {
|
|
101
|
-
return true;
|
|
102
|
-
}
|
|
103
|
-
if (mutedStatus) {
|
|
104
|
-
return true;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
return false;
|
|
172
|
+
return MemberUtil.isMuted(participant, AUDIO_STATUS, AUDIO);
|
|
109
173
|
};
|
|
110
174
|
|
|
111
175
|
/**
|
|
112
176
|
* @param {Object} participant the locus participant
|
|
113
177
|
* @returns {Boolean}
|
|
114
178
|
*/
|
|
115
|
-
MemberUtil.isVideoMuted = (participant: any) => {
|
|
179
|
+
MemberUtil.isVideoMuted = (participant: any): boolean => {
|
|
116
180
|
if (!participant) {
|
|
117
181
|
throw new ParameterError('Video could not be processed, participant is undefined.');
|
|
118
182
|
}
|
|
119
183
|
|
|
120
|
-
return MemberUtil.isMuted(participant
|
|
184
|
+
return MemberUtil.isMuted(participant, VIDEO_STATUS, VIDEO);
|
|
121
185
|
};
|
|
122
186
|
|
|
123
187
|
/**
|
|
@@ -133,22 +197,69 @@ MemberUtil.isHandRaised = (participant: any) => {
|
|
|
133
197
|
};
|
|
134
198
|
|
|
135
199
|
/**
|
|
136
|
-
*
|
|
137
|
-
* @param {String} status
|
|
138
|
-
* @param {String} accessor
|
|
200
|
+
* @param {Object} participant the locus participant
|
|
139
201
|
* @returns {Boolean}
|
|
140
202
|
*/
|
|
141
|
-
MemberUtil.
|
|
142
|
-
if (
|
|
143
|
-
|
|
144
|
-
return true;
|
|
145
|
-
}
|
|
146
|
-
if (status[accessor] === _SEND_RECEIVE_) {
|
|
147
|
-
return false;
|
|
148
|
-
}
|
|
203
|
+
MemberUtil.isBreakoutsSupported = (participant) => {
|
|
204
|
+
if (!participant) {
|
|
205
|
+
throw new ParameterError('Breakout support could not be processed, participant is undefined.');
|
|
149
206
|
}
|
|
150
207
|
|
|
151
|
-
return
|
|
208
|
+
return !participant.doesNotSupportBreakouts;
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* @param {Object} participant the locus participant
|
|
213
|
+
* @returns {Boolean}
|
|
214
|
+
*/
|
|
215
|
+
MemberUtil.isInterpretationSupported = (participant) => {
|
|
216
|
+
if (!participant) {
|
|
217
|
+
throw new ParameterError(
|
|
218
|
+
'Interpretation support could not be processed, participant is undefined.'
|
|
219
|
+
);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
return !participant.doesNotSupportSiInterpreter;
|
|
223
|
+
};
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* @param {Object} participant the locus participant
|
|
227
|
+
* @returns {Boolean}
|
|
228
|
+
*/
|
|
229
|
+
MemberUtil.isLiveAnnotationSupported = (participant) => {
|
|
230
|
+
if (!participant) {
|
|
231
|
+
throw new ParameterError(
|
|
232
|
+
'LiveAnnotation support could not be processed, participant is undefined.'
|
|
233
|
+
);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
return !participant.annotatorAssignmentNotAllowed;
|
|
237
|
+
};
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* utility method for audio/video muted status
|
|
241
|
+
* @param {any} participant
|
|
242
|
+
* @param {String} statusAccessor
|
|
243
|
+
* @param {String} controlsAccessor
|
|
244
|
+
* @returns {Boolean | undefined}
|
|
245
|
+
*/
|
|
246
|
+
MemberUtil.isMuted = (participant: any, statusAccessor: string, controlsAccessor: string) => {
|
|
247
|
+
// check remote mute
|
|
248
|
+
const remoteMute = participant?.controls?.[controlsAccessor]?.muted;
|
|
249
|
+
if (remoteMute === true) {
|
|
250
|
+
return true;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
// check local mute
|
|
254
|
+
const localStatus = participant?.status?.[statusAccessor];
|
|
255
|
+
if (localStatus === _RECEIVE_ONLY_) {
|
|
256
|
+
return true;
|
|
257
|
+
}
|
|
258
|
+
if (localStatus === _SEND_RECEIVE_) {
|
|
259
|
+
return false;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
return remoteMute;
|
|
152
263
|
};
|
|
153
264
|
|
|
154
265
|
/**
|
|
@@ -266,8 +377,8 @@ MemberUtil.extractMediaStatus = (participant: any): IMediaStatus => {
|
|
|
266
377
|
}
|
|
267
378
|
|
|
268
379
|
return {
|
|
269
|
-
audio: participant.status
|
|
270
|
-
video: participant.status
|
|
380
|
+
audio: participant.status?.audioStatus,
|
|
381
|
+
video: participant.status?.videoStatus,
|
|
271
382
|
};
|
|
272
383
|
};
|
|
273
384
|
|