@webex/plugin-meetings 2.60.0 → 2.60.1-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.d.ts +42 -0
- package/dist/annotation/annotation.types.js +7 -0
- package/dist/annotation/annotation.types.js.map +1 -0
- package/dist/annotation/constants.d.ts +31 -0
- package/dist/annotation/constants.js +41 -0
- package/dist/annotation/constants.js.map +1 -0
- package/dist/annotation/index.d.ts +117 -0
- package/dist/annotation/index.js +357 -0
- package/dist/annotation/index.js.map +1 -0
- package/dist/breakouts/breakout.d.ts +8 -0
- package/dist/breakouts/breakout.js +215 -0
- package/dist/breakouts/breakout.js.map +1 -0
- package/dist/breakouts/collection.d.ts +5 -0
- package/dist/breakouts/collection.js +22 -0
- package/dist/breakouts/collection.js.map +1 -0
- package/dist/breakouts/edit-lock-error.d.ts +15 -0
- package/dist/breakouts/edit-lock-error.js +51 -0
- package/dist/breakouts/edit-lock-error.js.map +1 -0
- package/dist/breakouts/events.d.ts +8 -0
- package/dist/breakouts/events.js +44 -0
- package/dist/breakouts/events.js.map +1 -0
- package/dist/breakouts/index.d.ts +5 -0
- package/dist/breakouts/index.js +1047 -0
- package/dist/breakouts/index.js.map +1 -0
- package/dist/breakouts/request.d.ts +22 -0
- package/dist/breakouts/request.js +77 -0
- package/dist/breakouts/request.js.map +1 -0
- package/dist/breakouts/utils.d.ts +15 -0
- package/dist/breakouts/utils.js +64 -0
- package/dist/breakouts/utils.js.map +1 -0
- package/dist/common/browser-detection.js +2 -3
- package/dist/common/browser-detection.js.map +1 -1
- package/dist/common/collection.js +3 -4
- 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.d.ts +14 -0
- 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-error.js → reclaim-host-role-errors.js} +7 -11
- 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.d.ts +20 -8
- 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.d.ts +3 -1
- package/dist/common/logs/request.js +8 -5
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.d.ts +9 -7
- package/dist/common/queue.js +22 -9
- package/dist/common/queue.js.map +1 -1
- package/dist/config.d.ts +6 -7
- package/dist/config.js +8 -10
- package/dist/config.js.map +1 -1
- package/dist/constants.d.ts +217 -97
- package/dist/constants.js +416 -441
- 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.d.ts +11 -1
- package/dist/controls-options-manager/enums.js +15 -6
- package/dist/controls-options-manager/enums.js.map +1 -1
- package/dist/controls-options-manager/index.d.ts +17 -1
- package/dist/controls-options-manager/index.js +127 -38
- package/dist/controls-options-manager/index.js.map +1 -1
- package/dist/controls-options-manager/types.d.ts +43 -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.d.ts +1 -7
- package/dist/controls-options-manager/util.js +309 -19
- package/dist/controls-options-manager/util.js.map +1 -1
- package/dist/index.d.ts +6 -3
- package/dist/index.js +121 -5
- package/dist/index.js.map +1 -1
- package/dist/interceptors/index.d.ts +2 -0
- package/dist/interceptors/index.js +15 -0
- package/dist/interceptors/index.js.map +1 -0
- package/dist/interceptors/locusRetry.d.ts +27 -0
- package/dist/interceptors/locusRetry.js +94 -0
- package/dist/interceptors/locusRetry.js.map +1 -0
- package/dist/interpretation/collection.d.ts +5 -0
- package/dist/interpretation/collection.js +22 -0
- package/dist/interpretation/collection.js.map +1 -0
- package/dist/interpretation/index.d.ts +5 -0
- package/dist/interpretation/index.js +365 -0
- package/dist/interpretation/index.js.map +1 -0
- package/dist/interpretation/siLanguage.d.ts +5 -0
- package/dist/interpretation/siLanguage.js +24 -0
- package/dist/interpretation/siLanguage.js.map +1 -0
- package/dist/locus-info/controlsUtils.js +100 -11
- 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.d.ts +57 -4
- package/dist/locus-info/index.js +425 -84
- 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.d.ts +66 -6
- package/dist/locus-info/parser.js +253 -80
- 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.d.ts +2 -0
- package/dist/media/index.js +107 -319
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.d.ts +38 -53
- 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.d.ts +234 -230
- package/dist/mediaQualityMetrics/config.js +302 -498
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/in-meeting-actions.d.ts +88 -0
- package/dist/meeting/in-meeting-actions.js +94 -3
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.d.ts +591 -494
- package/dist/meeting/index.js +4732 -2990
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.d.ts +74 -0
- package/dist/meeting/locusMediaRequest.js +291 -0
- package/dist/meeting/locusMediaRequest.js.map +1 -0
- package/dist/meeting/muteState.d.ts +93 -25
- package/dist/meeting/muteState.js +224 -133
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.d.ts +82 -47
- package/dist/meeting/request.js +297 -199
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/request.type.d.ts +11 -0
- 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.d.ts +102 -1
- package/dist/meeting/util.js +605 -435
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/collection.js +3 -4
- package/dist/meeting-info/collection.js.map +1 -1
- package/dist/meeting-info/index.d.ts +13 -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.d.ts +31 -1
- package/dist/meeting-info/meeting-info-v2.js +200 -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 +39 -41
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.d.ts +17 -0
- package/dist/meetings/collection.js +42 -4
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.d.ts +93 -21
- package/dist/meetings/index.js +490 -127
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/meetings.types.d.ts +4 -0
- 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.d.ts +13 -1
- package/dist/member/index.js +45 -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.d.ts +32 -0
- package/dist/member/types.js +23 -0
- package/dist/member/types.js.map +1 -0
- package/dist/member/util.js +120 -29
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.d.ts +5 -0
- package/dist/members/collection.js +11 -2
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.d.ts +56 -11
- package/dist/members/index.js +174 -47
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.d.ts +67 -11
- package/dist/members/request.js +102 -54
- package/dist/members/request.js.map +1 -1
- package/dist/members/types.js +3 -4
- package/dist/members/types.js.map +1 -1
- package/dist/members/util.d.ts +214 -1
- package/dist/members/util.js +327 -284
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.d.ts +15 -6
- package/dist/metrics/constants.js +17 -9
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.d.ts +4 -111
- package/dist/metrics/index.js +4 -452
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.d.ts +118 -0
- package/dist/multistream/mediaRequestManager.js +344 -0
- package/dist/multistream/mediaRequestManager.js.map +1 -0
- package/dist/multistream/receiveSlot.d.ts +68 -0
- package/dist/multistream/receiveSlot.js +200 -0
- package/dist/multistream/receiveSlot.js.map +1 -0
- package/dist/multistream/receiveSlotManager.d.ts +56 -0
- package/dist/multistream/receiveSlotManager.js +174 -0
- package/dist/multistream/receiveSlotManager.js.map +1 -0
- package/dist/multistream/remoteMedia.d.ts +72 -0
- package/dist/multistream/remoteMedia.js +268 -0
- package/dist/multistream/remoteMedia.js.map +1 -0
- package/dist/multistream/remoteMediaGroup.d.ts +47 -0
- package/dist/multistream/remoteMediaGroup.js +267 -0
- package/dist/multistream/remoteMediaGroup.js.map +1 -0
- package/dist/multistream/remoteMediaManager.d.ts +285 -0
- package/dist/multistream/remoteMediaManager.js +1211 -0
- package/dist/multistream/remoteMediaManager.js.map +1 -0
- package/dist/multistream/sendSlotManager.d.ts +61 -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/clusterReachability.d.ts +109 -0
- package/dist/reachability/clusterReachability.js +357 -0
- package/dist/reachability/clusterReachability.js.map +1 -0
- package/dist/reachability/index.d.ts +61 -95
- package/dist/reachability/index.js +300 -393
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.d.ts +7 -3
- package/dist/reachability/request.js +18 -10
- package/dist/reachability/request.js.map +1 -1
- package/dist/reachability/util.d.ts +8 -0
- package/dist/reachability/util.js +29 -0
- package/dist/reachability/util.js.map +1 -0
- package/dist/reactions/constants.d.ts +3 -0
- package/dist/reactions/constants.js +12 -0
- package/dist/reactions/constants.js.map +1 -0
- package/dist/reactions/reactions.d.ts +2 -2
- package/dist/reactions/reactions.js +4 -6
- package/dist/reactions/reactions.js.map +1 -1
- package/dist/reactions/reactions.type.d.ts +23 -3
- package/dist/reactions/reactions.type.js +21 -23
- package/dist/reactions/reactions.type.js.map +1 -1
- package/dist/reconnection-manager/index.d.ts +32 -8
- package/dist/reconnection-manager/index.js +282 -231
- 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.d.ts +15 -1
- package/dist/recording-controller/index.js +57 -46
- package/dist/recording-controller/index.js.map +1 -1
- package/dist/recording-controller/util.d.ts +5 -4
- package/dist/recording-controller/util.js +10 -10
- package/dist/recording-controller/util.js.map +1 -1
- package/dist/roap/index.d.ts +9 -47
- package/dist/roap/index.js +101 -235
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.d.ts +18 -12
- package/dist/roap/request.js +126 -180
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.d.ts +27 -16
- package/dist/roap/turnDiscovery.js +115 -105
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/rtcMetrics/constants.d.ts +4 -0
- package/dist/rtcMetrics/constants.js +11 -0
- package/dist/rtcMetrics/constants.js.map +1 -0
- package/dist/rtcMetrics/index.d.ts +54 -0
- package/dist/rtcMetrics/index.js +140 -0
- package/dist/rtcMetrics/index.js.map +1 -0
- package/dist/statsAnalyzer/global.d.ts +1 -83
- package/dist/statsAnalyzer/global.js +2 -85
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.d.ts +50 -30
- package/dist/statsAnalyzer/index.js +435 -510
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.d.ts +8 -6
- package/dist/statsAnalyzer/mqaUtil.js +120 -83
- 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.d.ts +16 -0
- package/dist/webinar/collection.js +43 -0
- package/dist/webinar/collection.js.map +1 -0
- package/dist/webinar/index.d.ts +5 -0
- package/dist/webinar/index.js +68 -0
- package/dist/webinar/index.js.map +1 -0
- package/package.json +38 -26
- 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/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 +6 -7
- package/src/constants.ts +244 -97
- package/src/controls-options-manager/enums.ts +12 -0
- 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 +44 -0
- package/src/interceptors/index.ts +3 -0
- package/src/interceptors/locusRetry.ts +67 -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 +244 -377
- package/src/meeting/in-meeting-actions.ts +176 -0
- package/src/meeting/index.ts +3944 -2489
- 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 +163 -13
- package/src/meeting-info/util.ts +1 -1
- package/src/meeting-info/utilv2.ts +28 -28
- package/src/meetings/collection.ts +33 -0
- package/src/meetings/index.ts +487 -126
- 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 +43 -1
- package/src/member/types.ts +38 -0
- package/src/member/util.ts +125 -28
- package/src/members/collection.ts +8 -0
- package/src/members/index.ts +187 -52
- package/src/members/request.ts +87 -27
- package/src/members/util.ts +332 -291
- package/src/metrics/constants.ts +15 -6
- 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/clusterReachability.ts +320 -0
- package/src/reachability/index.ts +243 -347
- package/src/reachability/request.ts +17 -8
- package/src/reachability/util.ts +24 -0
- 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 +168 -156
- package/src/recording-controller/index.ts +20 -3
- package/src/recording-controller/util.ts +26 -9
- package/src/roap/index.ts +98 -241
- 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 +124 -0
- package/src/statsAnalyzer/global.ts +1 -84
- package/src/statsAnalyzer/index.ts +477 -643
- package/src/statsAnalyzer/mqaUtil.ts +115 -114
- 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/interceptors/locusRetry.ts +131 -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 +290 -0
- package/test/unit/spec/media/properties.ts +75 -84
- package/test/unit/spec/meeting/in-meeting-actions.ts +86 -0
- package/test/unit/spec/meeting/index.js +8187 -2769
- package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
- package/test/unit/spec/meeting/muteState.js +409 -213
- 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 +527 -5
- package/test/unit/spec/meeting-info/utilv2.js +21 -0
- package/test/unit/spec/meetings/collection.js +26 -0
- package/test/unit/spec/meetings/index.js +1313 -243
- package/test/unit/spec/meetings/utils.js +202 -2
- package/test/unit/spec/member/index.js +32 -9
- package/test/unit/spec/member/util.js +499 -61
- package/test/unit/spec/members/index.js +394 -5
- package/test/unit/spec/members/request.js +206 -27
- package/test/unit/spec/members/utils.js +173 -38
- 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/clusterReachability.ts +279 -0
- package/test/unit/spec/reachability/index.ts +531 -24
- package/test/unit/spec/reachability/request.js +68 -0
- package/test/unit/spec/reachability/util.ts +40 -0
- package/test/unit/spec/reconnection-manager/index.js +162 -24
- 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 -76
- package/test/unit/spec/roap/request.ts +255 -0
- package/test/unit/spec/roap/turnDiscovery.ts +86 -48
- package/test/unit/spec/rtcMetrics/index.ts +93 -0
- package/test/unit/spec/stats-analyzer/index.js +261 -167
- 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/common/errors/reclaim-host-role-error.js.map +0 -1
- package/dist/meeting/effectsState.d.ts +0 -42
- package/dist/meeting/effectsState.js +0 -260
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/metrics/config.d.ts +0 -169
- package/dist/metrics/config.js +0 -289
- package/dist/metrics/config.js.map +0 -1
- package/dist/peer-connection-manager/index.d.ts +0 -6
- 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.d.ts +0 -6
- package/dist/peer-connection-manager/util.js +0 -110
- package/dist/peer-connection-manager/util.js.map +0 -1
- package/dist/roap/collection.d.ts +0 -10
- package/dist/roap/collection.js +0 -63
- package/dist/roap/collection.js.map +0 -1
- package/dist/roap/handler.d.ts +0 -47
- package/dist/roap/handler.js +0 -279
- package/dist/roap/handler.js.map +0 -1
- package/dist/roap/state.d.ts +0 -9
- package/dist/roap/state.js +0 -127
- package/dist/roap/state.js.map +0 -1
- package/dist/roap/util.d.ts +0 -2
- 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
- /package/dist/common/errors/{reclaim-host-role-error.d.ts → reclaim-host-role-errors.d.ts} +0 -0
- /package/src/common/errors/{reclaim-host-role-error.ts → reclaim-host-role-errors.ts} +0 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { WebexPlugin } from '@webex/webex-core';
|
|
2
|
+
import { IP_VERSION } from '../constants';
|
|
3
|
+
export type MediaRequestType = 'RoapMessage' | 'LocalMute';
|
|
4
|
+
export type RequestResult = any;
|
|
5
|
+
export type RoapRequest = {
|
|
6
|
+
type: 'RoapMessage';
|
|
7
|
+
selfUrl: string;
|
|
8
|
+
mediaId: string;
|
|
9
|
+
roapMessage: any;
|
|
10
|
+
reachability: any;
|
|
11
|
+
sequence?: any;
|
|
12
|
+
joinCookie: any;
|
|
13
|
+
ipVersion?: IP_VERSION;
|
|
14
|
+
};
|
|
15
|
+
export type LocalMuteRequest = {
|
|
16
|
+
type: 'LocalMute';
|
|
17
|
+
selfUrl: string;
|
|
18
|
+
mediaId: string;
|
|
19
|
+
sequence?: any;
|
|
20
|
+
muteOptions: {
|
|
21
|
+
audioMuted?: boolean;
|
|
22
|
+
videoMuted?: boolean;
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
export type Request = RoapRequest | LocalMuteRequest;
|
|
26
|
+
export type Config = {
|
|
27
|
+
device: {
|
|
28
|
+
url: string;
|
|
29
|
+
deviceType: string;
|
|
30
|
+
countryCode?: string;
|
|
31
|
+
regionCode?: string;
|
|
32
|
+
};
|
|
33
|
+
correlationId: string;
|
|
34
|
+
preferTranscoding: boolean;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* This class manages all /media API requests to Locus. Every call to that
|
|
38
|
+
* Locus API has to go through this class.
|
|
39
|
+
*/
|
|
40
|
+
export declare class LocusMediaRequest extends WebexPlugin {
|
|
41
|
+
private config;
|
|
42
|
+
private latestAudioMuted?;
|
|
43
|
+
private latestVideoMuted?;
|
|
44
|
+
private isRequestInProgress;
|
|
45
|
+
private queuedRequests;
|
|
46
|
+
private confluenceState;
|
|
47
|
+
/**
|
|
48
|
+
* Constructor
|
|
49
|
+
*/
|
|
50
|
+
constructor(config: Config, options: any);
|
|
51
|
+
/**
|
|
52
|
+
* Add a request to the internal queue.
|
|
53
|
+
*/
|
|
54
|
+
private addToQueue;
|
|
55
|
+
/**
|
|
56
|
+
* Takes the next request from the queue and executes it. Once that
|
|
57
|
+
* request is completed, the next one will be taken from the queue
|
|
58
|
+
* and executed and this is repeated until the queue is empty.
|
|
59
|
+
*/
|
|
60
|
+
private executeNextQueuedRequest;
|
|
61
|
+
/**
|
|
62
|
+
* Returns latest requested audio and video mute values. If they have never been
|
|
63
|
+
* requested, we assume audio/video to be muted.
|
|
64
|
+
*/
|
|
65
|
+
private getLatestMuteState;
|
|
66
|
+
/**
|
|
67
|
+
* Prepares the uri and body for the media request to be sent to Locus
|
|
68
|
+
*/
|
|
69
|
+
private sendHttpRequest;
|
|
70
|
+
/**
|
|
71
|
+
* Sends a media request to Locus
|
|
72
|
+
*/
|
|
73
|
+
send(request: Request): Promise<RequestResult>;
|
|
74
|
+
}
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
|
|
4
|
+
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
5
|
+
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
6
|
+
_Object$defineProperty(exports, "__esModule", {
|
|
7
|
+
value: true
|
|
8
|
+
});
|
|
9
|
+
exports.LocusMediaRequest = void 0;
|
|
10
|
+
var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
|
|
11
|
+
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
12
|
+
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/assertThisInitialized"));
|
|
13
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
|
|
14
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
|
|
15
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
|
|
16
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/toConsumableArray"));
|
|
17
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
|
18
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
|
19
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
|
20
|
+
var _lodash = require("lodash");
|
|
21
|
+
var _common = require("@webex/common");
|
|
22
|
+
var _webexCore = require("@webex/webex-core");
|
|
23
|
+
var _constants = require("../constants");
|
|
24
|
+
var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
|
|
25
|
+
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
|
|
26
|
+
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } /* eslint-disable valid-jsdoc */
|
|
27
|
+
/** Class representing a single /media request being sent to Locus */
|
|
28
|
+
var InternalRequestInfo = /*#__PURE__*/function () {
|
|
29
|
+
/** Constructor */
|
|
30
|
+
function InternalRequestInfo(request, pendingPromise, sendRequestFn) {
|
|
31
|
+
(0, _classCallCheck2.default)(this, InternalRequestInfo);
|
|
32
|
+
(0, _defineProperty2.default)(this, "request", void 0);
|
|
33
|
+
(0, _defineProperty2.default)(this, "pendingPromises", void 0);
|
|
34
|
+
(0, _defineProperty2.default)(this, "sendRequestFn", void 0);
|
|
35
|
+
this.request = request;
|
|
36
|
+
this.pendingPromises = [pendingPromise];
|
|
37
|
+
this.sendRequestFn = sendRequestFn;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Returns the list of pending promises associated with this request
|
|
42
|
+
*/
|
|
43
|
+
(0, _createClass2.default)(InternalRequestInfo, [{
|
|
44
|
+
key: "getPendingPromises",
|
|
45
|
+
value: function getPendingPromises() {
|
|
46
|
+
return this.pendingPromises;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Adds promises to the list of pending promises associated with this request
|
|
51
|
+
*/
|
|
52
|
+
}, {
|
|
53
|
+
key: "addPendingPromises",
|
|
54
|
+
value: function addPendingPromises(pendingPromises) {
|
|
55
|
+
var _this$pendingPromises;
|
|
56
|
+
(_this$pendingPromises = this.pendingPromises).push.apply(_this$pendingPromises, (0, _toConsumableArray2.default)(pendingPromises));
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Executes the request. Returned promise is resolved once the request
|
|
61
|
+
* is completed (no matter if it succeeded or failed).
|
|
62
|
+
*/
|
|
63
|
+
}, {
|
|
64
|
+
key: "execute",
|
|
65
|
+
value: function execute() {
|
|
66
|
+
var _this = this;
|
|
67
|
+
return this.sendRequestFn(this.request).then(function (result) {
|
|
68
|
+
// resolve all the pending promises associated with this request
|
|
69
|
+
_this.pendingPromises.forEach(function (d) {
|
|
70
|
+
return d.resolve(result);
|
|
71
|
+
});
|
|
72
|
+
}).catch(function (e) {
|
|
73
|
+
// reject all the pending promises associated with this request
|
|
74
|
+
_this.pendingPromises.forEach(function (d) {
|
|
75
|
+
return d.reject(e);
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}]);
|
|
80
|
+
return InternalRequestInfo;
|
|
81
|
+
}();
|
|
82
|
+
/**
|
|
83
|
+
* Returns true if the request is triggering confluence creation in the server
|
|
84
|
+
*/
|
|
85
|
+
function isRequestAffectingConfluenceState(request) {
|
|
86
|
+
return request.type === 'RoapMessage' && request.roapMessage.messageType === _constants.ROAP.ROAP_TYPES.OFFER;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* This class manages all /media API requests to Locus. Every call to that
|
|
91
|
+
* Locus API has to go through this class.
|
|
92
|
+
*/
|
|
93
|
+
var LocusMediaRequest = exports.LocusMediaRequest = /*#__PURE__*/function (_WebexPlugin) {
|
|
94
|
+
(0, _inherits2.default)(LocusMediaRequest, _WebexPlugin);
|
|
95
|
+
var _super = _createSuper(LocusMediaRequest);
|
|
96
|
+
/**
|
|
97
|
+
* Constructor
|
|
98
|
+
*/
|
|
99
|
+
function LocusMediaRequest(config, options) {
|
|
100
|
+
var _this2;
|
|
101
|
+
(0, _classCallCheck2.default)(this, LocusMediaRequest);
|
|
102
|
+
_this2 = _super.call(this, {}, options);
|
|
103
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this2), "config", void 0);
|
|
104
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this2), "latestAudioMuted", void 0);
|
|
105
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this2), "latestVideoMuted", void 0);
|
|
106
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this2), "isRequestInProgress", void 0);
|
|
107
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this2), "queuedRequests", void 0);
|
|
108
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this2), "confluenceState", void 0);
|
|
109
|
+
_this2.isRequestInProgress = false;
|
|
110
|
+
_this2.queuedRequests = [];
|
|
111
|
+
_this2.config = config;
|
|
112
|
+
_this2.confluenceState = 'not created';
|
|
113
|
+
return _this2;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Add a request to the internal queue.
|
|
118
|
+
*/
|
|
119
|
+
(0, _createClass2.default)(LocusMediaRequest, [{
|
|
120
|
+
key: "addToQueue",
|
|
121
|
+
value: function addToQueue(info) {
|
|
122
|
+
if (info.request.type === 'LocalMute' && this.queuedRequests.length > 0) {
|
|
123
|
+
// We don't need additional local mute requests in the queue.
|
|
124
|
+
// We only need at most 1 local mute or 1 roap request, because
|
|
125
|
+
// roap requests also include mute state, so whatever request
|
|
126
|
+
// is sent out, it will send the latest local mute state.
|
|
127
|
+
// We only need to store the pendingPromises so that they get resolved
|
|
128
|
+
// when the roap request is sent out.
|
|
129
|
+
this.queuedRequests[0].addPendingPromises(info.getPendingPromises());
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
if (info.request.type === 'RoapMessage' && this.queuedRequests.length > 0) {
|
|
133
|
+
// remove any LocalMute requests from the queue, because this Roap message
|
|
134
|
+
// will also update the mute status in Locus, so they are redundant
|
|
135
|
+
this.queuedRequests = this.queuedRequests.filter(function (r) {
|
|
136
|
+
if (r.request.type === 'LocalMute') {
|
|
137
|
+
// we need to keep the pending promises from the local mute request
|
|
138
|
+
// that we're removing from the queue
|
|
139
|
+
info.addPendingPromises(r.getPendingPromises());
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
return true;
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
this.queuedRequests.push(info);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Takes the next request from the queue and executes it. Once that
|
|
150
|
+
* request is completed, the next one will be taken from the queue
|
|
151
|
+
* and executed and this is repeated until the queue is empty.
|
|
152
|
+
*/
|
|
153
|
+
}, {
|
|
154
|
+
key: "executeNextQueuedRequest",
|
|
155
|
+
value: function executeNextQueuedRequest() {
|
|
156
|
+
var _this3 = this;
|
|
157
|
+
if (this.isRequestInProgress) {
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
var nextRequest = this.queuedRequests.shift();
|
|
161
|
+
if (nextRequest) {
|
|
162
|
+
this.isRequestInProgress = true;
|
|
163
|
+
nextRequest.execute().then(function () {
|
|
164
|
+
_this3.isRequestInProgress = false;
|
|
165
|
+
_this3.executeNextQueuedRequest();
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Returns latest requested audio and video mute values. If they have never been
|
|
172
|
+
* requested, we assume audio/video to be muted.
|
|
173
|
+
*/
|
|
174
|
+
}, {
|
|
175
|
+
key: "getLatestMuteState",
|
|
176
|
+
value: function getLatestMuteState() {
|
|
177
|
+
var audioMuted = this.latestAudioMuted !== undefined ? this.latestAudioMuted : true;
|
|
178
|
+
var videoMuted = this.latestVideoMuted !== undefined ? this.latestVideoMuted : true;
|
|
179
|
+
return {
|
|
180
|
+
audioMuted: audioMuted,
|
|
181
|
+
videoMuted: videoMuted
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Prepares the uri and body for the media request to be sent to Locus
|
|
187
|
+
*/
|
|
188
|
+
}, {
|
|
189
|
+
key: "sendHttpRequest",
|
|
190
|
+
value: function sendHttpRequest(request) {
|
|
191
|
+
var _this4 = this;
|
|
192
|
+
var uri = "".concat(request.selfUrl, "/").concat(_constants.MEDIA);
|
|
193
|
+
var _this$getLatestMuteSt = this.getLatestMuteState(),
|
|
194
|
+
audioMuted = _this$getLatestMuteSt.audioMuted,
|
|
195
|
+
videoMuted = _this$getLatestMuteSt.videoMuted;
|
|
196
|
+
|
|
197
|
+
// first setup things common to all requests
|
|
198
|
+
var body = {
|
|
199
|
+
device: this.config.device,
|
|
200
|
+
correlationId: this.config.correlationId,
|
|
201
|
+
clientMediaPreferences: {
|
|
202
|
+
preferTranscoding: this.config.preferTranscoding,
|
|
203
|
+
ipver: request.type === 'RoapMessage' ? request.ipVersion : undefined
|
|
204
|
+
}
|
|
205
|
+
};
|
|
206
|
+
var localMedias = {
|
|
207
|
+
audioMuted: audioMuted,
|
|
208
|
+
videoMuted: videoMuted
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
// now add things specific to request type
|
|
212
|
+
switch (request.type) {
|
|
213
|
+
case 'LocalMute':
|
|
214
|
+
body.respOnlySdp = true;
|
|
215
|
+
body.usingResource = null;
|
|
216
|
+
break;
|
|
217
|
+
case 'RoapMessage':
|
|
218
|
+
localMedias.roapMessage = request.roapMessage;
|
|
219
|
+
localMedias.reachability = request.reachability;
|
|
220
|
+
body.clientMediaPreferences.joinCookie = request.joinCookie;
|
|
221
|
+
break;
|
|
222
|
+
}
|
|
223
|
+
if (request.sequence) {
|
|
224
|
+
body.sequence = request.sequence;
|
|
225
|
+
}
|
|
226
|
+
body.localMedias = [{
|
|
227
|
+
localSdp: (0, _stringify.default)(localMedias),
|
|
228
|
+
// this part must be JSON stringified, Locus requires this
|
|
229
|
+
mediaId: request.mediaId
|
|
230
|
+
}];
|
|
231
|
+
_loggerProxy.default.logger.info("Meeting:LocusMediaRequest#sendHttpRequest --> ".concat(request.type, " audioMuted=").concat(audioMuted, " videoMuted=").concat(videoMuted));
|
|
232
|
+
if (isRequestAffectingConfluenceState(request) && this.confluenceState === 'not created') {
|
|
233
|
+
this.confluenceState = 'creation in progress';
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
// @ts-ignore
|
|
237
|
+
return this.request({
|
|
238
|
+
method: _constants.HTTP_VERBS.PUT,
|
|
239
|
+
uri: uri,
|
|
240
|
+
body: body
|
|
241
|
+
}).then(function (result) {
|
|
242
|
+
if (isRequestAffectingConfluenceState(request)) {
|
|
243
|
+
_this4.confluenceState = 'created';
|
|
244
|
+
}
|
|
245
|
+
return result;
|
|
246
|
+
}).catch(function (e) {
|
|
247
|
+
if (isRequestAffectingConfluenceState(request) && _this4.confluenceState === 'creation in progress') {
|
|
248
|
+
_this4.confluenceState = 'not created';
|
|
249
|
+
}
|
|
250
|
+
throw e;
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* Sends a media request to Locus
|
|
256
|
+
*/
|
|
257
|
+
}, {
|
|
258
|
+
key: "send",
|
|
259
|
+
value: function send(request) {
|
|
260
|
+
var _this5 = this;
|
|
261
|
+
if (request.type === 'LocalMute') {
|
|
262
|
+
var _request$muteOptions = request.muteOptions,
|
|
263
|
+
audioMuted = _request$muteOptions.audioMuted,
|
|
264
|
+
videoMuted = _request$muteOptions.videoMuted;
|
|
265
|
+
if (audioMuted !== undefined) {
|
|
266
|
+
this.latestAudioMuted = audioMuted;
|
|
267
|
+
}
|
|
268
|
+
if (videoMuted !== undefined) {
|
|
269
|
+
this.latestVideoMuted = videoMuted;
|
|
270
|
+
}
|
|
271
|
+
if (this.confluenceState === 'not created') {
|
|
272
|
+
// if there is no confluence, there is no point sending out local mute request
|
|
273
|
+
// as it will fail so we just store the latest audio/video muted values
|
|
274
|
+
// and resolve immediately, so that higher layer (MuteState class) doesn't get blocked
|
|
275
|
+
// and can call us again if user mutes/unmutes again before confluence is created
|
|
276
|
+
_loggerProxy.default.logger.info('Meeting:LocusMediaRequest#send --> called with LocalMute request before confluence creation');
|
|
277
|
+
return _promise.default.resolve({});
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
var pendingPromise = new _common.Defer();
|
|
281
|
+
var newRequest = new InternalRequestInfo(request, pendingPromise, this.sendHttpRequest.bind(this));
|
|
282
|
+
this.addToQueue(newRequest);
|
|
283
|
+
(0, _lodash.defer)(function () {
|
|
284
|
+
return _this5.executeNextQueuedRequest();
|
|
285
|
+
});
|
|
286
|
+
return pendingPromise.promise;
|
|
287
|
+
}
|
|
288
|
+
}]);
|
|
289
|
+
return LocusMediaRequest;
|
|
290
|
+
}(_webexCore.WebexPlugin);
|
|
291
|
+
//# sourceMappingURL=locusMediaRequest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_lodash","require","_common","_webexCore","_constants","_loggerProxy","_interopRequireDefault","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","InternalRequestInfo","request","pendingPromise","sendRequestFn","_classCallCheck2","_defineProperty2","pendingPromises","_createClass2","key","value","getPendingPromises","addPendingPromises","_this$pendingPromises","push","_toConsumableArray2","execute","_this","then","forEach","d","resolve","catch","reject","isRequestAffectingConfluenceState","type","roapMessage","messageType","ROAP","ROAP_TYPES","OFFER","LocusMediaRequest","exports","_WebexPlugin","_inherits2","_super","config","options","_this2","_assertThisInitialized2","isRequestInProgress","queuedRequests","confluenceState","addToQueue","info","length","filter","r","executeNextQueuedRequest","_this3","nextRequest","shift","getLatestMuteState","audioMuted","latestAudioMuted","undefined","videoMuted","latestVideoMuted","sendHttpRequest","_this4","uri","concat","selfUrl","MEDIA","_this$getLatestMuteSt","body","device","correlationId","clientMediaPreferences","preferTranscoding","ipver","ipVersion","localMedias","respOnlySdp","usingResource","reachability","joinCookie","sequence","localSdp","_stringify","mediaId","LoggerProxy","logger","method","HTTP_VERBS","PUT","send","_this5","_request$muteOptions","muteOptions","_promise","Defer","newRequest","bind","defer","promise","WebexPlugin"],"sources":["locusMediaRequest.ts"],"sourcesContent":["/* eslint-disable valid-jsdoc */\nimport {defer} from 'lodash';\nimport {Defer} from '@webex/common';\nimport {WebexPlugin} from '@webex/webex-core';\nimport {MEDIA, HTTP_VERBS, ROAP, IP_VERSION} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\nexport type MediaRequestType = 'RoapMessage' | 'LocalMute';\nexport type RequestResult = any;\n\nexport type RoapRequest = {\n type: 'RoapMessage';\n selfUrl: string;\n mediaId: string;\n roapMessage: any;\n reachability: any;\n sequence?: any;\n joinCookie: any; // any, because this is opaque to the client, we pass whatever object we got from one backend component (Orpheus) to the other (Locus)\n ipVersion?: IP_VERSION;\n};\n\nexport type LocalMuteRequest = {\n type: 'LocalMute';\n selfUrl: string;\n mediaId: string;\n sequence?: any;\n muteOptions: {\n audioMuted?: boolean;\n videoMuted?: boolean;\n };\n};\n\nexport type Request = RoapRequest | LocalMuteRequest;\n\n/** Class representing a single /media request being sent to Locus */\nclass InternalRequestInfo {\n public readonly request: Request;\n private pendingPromises: Defer[];\n private sendRequestFn: (request: Request) => Promise<RequestResult>;\n\n /** Constructor */\n constructor(\n request: Request,\n pendingPromise: Defer,\n sendRequestFn: (request: Request) => Promise<RequestResult>\n ) {\n this.request = request;\n this.pendingPromises = [pendingPromise];\n this.sendRequestFn = sendRequestFn;\n }\n\n /**\n * Returns the list of pending promises associated with this request\n */\n public getPendingPromises() {\n return this.pendingPromises;\n }\n\n /**\n * Adds promises to the list of pending promises associated with this request\n */\n public addPendingPromises(pendingPromises: Defer[]) {\n this.pendingPromises.push(...pendingPromises);\n }\n\n /**\n * Executes the request. Returned promise is resolved once the request\n * is completed (no matter if it succeeded or failed).\n */\n public execute(): Promise<void> {\n return this.sendRequestFn(this.request)\n .then((result) => {\n // resolve all the pending promises associated with this request\n this.pendingPromises.forEach((d) => d.resolve(result));\n })\n .catch((e) => {\n // reject all the pending promises associated with this request\n this.pendingPromises.forEach((d) => d.reject(e));\n });\n }\n}\n\nexport type Config = {\n device: {\n url: string;\n deviceType: string;\n countryCode?: string;\n regionCode?: string;\n };\n correlationId: string;\n preferTranscoding: boolean;\n};\n\n/**\n * Returns true if the request is triggering confluence creation in the server\n */\nfunction isRequestAffectingConfluenceState(request: Request): boolean {\n return (\n request.type === 'RoapMessage' && request.roapMessage.messageType === ROAP.ROAP_TYPES.OFFER\n );\n}\n\n/**\n * This class manages all /media API requests to Locus. Every call to that\n * Locus API has to go through this class.\n */\nexport class LocusMediaRequest extends WebexPlugin {\n private config: Config;\n private latestAudioMuted?: boolean;\n private latestVideoMuted?: boolean;\n private isRequestInProgress: boolean;\n private queuedRequests: InternalRequestInfo[];\n private confluenceState: 'not created' | 'creation in progress' | 'created';\n /**\n * Constructor\n */\n constructor(config: Config, options: any) {\n super({}, options);\n this.isRequestInProgress = false;\n this.queuedRequests = [];\n this.config = config;\n this.confluenceState = 'not created';\n }\n\n /**\n * Add a request to the internal queue.\n */\n private addToQueue(info: InternalRequestInfo) {\n if (info.request.type === 'LocalMute' && this.queuedRequests.length > 0) {\n // We don't need additional local mute requests in the queue.\n // We only need at most 1 local mute or 1 roap request, because\n // roap requests also include mute state, so whatever request\n // is sent out, it will send the latest local mute state.\n // We only need to store the pendingPromises so that they get resolved\n // when the roap request is sent out.\n this.queuedRequests[0].addPendingPromises(info.getPendingPromises());\n\n return;\n }\n\n if (info.request.type === 'RoapMessage' && this.queuedRequests.length > 0) {\n // remove any LocalMute requests from the queue, because this Roap message\n // will also update the mute status in Locus, so they are redundant\n this.queuedRequests = this.queuedRequests.filter((r) => {\n if (r.request.type === 'LocalMute') {\n // we need to keep the pending promises from the local mute request\n // that we're removing from the queue\n info.addPendingPromises(r.getPendingPromises());\n\n return false;\n }\n\n return true;\n });\n }\n\n this.queuedRequests.push(info);\n }\n\n /**\n * Takes the next request from the queue and executes it. Once that\n * request is completed, the next one will be taken from the queue\n * and executed and this is repeated until the queue is empty.\n */\n private executeNextQueuedRequest(): void {\n if (this.isRequestInProgress) {\n return;\n }\n\n const nextRequest = this.queuedRequests.shift();\n\n if (nextRequest) {\n this.isRequestInProgress = true;\n nextRequest.execute().then(() => {\n this.isRequestInProgress = false;\n this.executeNextQueuedRequest();\n });\n }\n }\n\n /**\n * Returns latest requested audio and video mute values. If they have never been\n * requested, we assume audio/video to be muted.\n */\n private getLatestMuteState() {\n const audioMuted = this.latestAudioMuted !== undefined ? this.latestAudioMuted : true;\n const videoMuted = this.latestVideoMuted !== undefined ? this.latestVideoMuted : true;\n\n return {audioMuted, videoMuted};\n }\n\n /**\n * Prepares the uri and body for the media request to be sent to Locus\n */\n private sendHttpRequest(request: Request) {\n const uri = `${request.selfUrl}/${MEDIA}`;\n\n const {audioMuted, videoMuted} = this.getLatestMuteState();\n\n // first setup things common to all requests\n const body: any = {\n device: this.config.device,\n correlationId: this.config.correlationId,\n clientMediaPreferences: {\n preferTranscoding: this.config.preferTranscoding,\n ipver: request.type === 'RoapMessage' ? request.ipVersion : undefined,\n },\n };\n\n const localMedias: any = {\n audioMuted,\n videoMuted,\n };\n\n // now add things specific to request type\n switch (request.type) {\n case 'LocalMute':\n body.respOnlySdp = true;\n body.usingResource = null;\n break;\n\n case 'RoapMessage':\n localMedias.roapMessage = request.roapMessage;\n localMedias.reachability = request.reachability;\n body.clientMediaPreferences.joinCookie = request.joinCookie;\n break;\n }\n\n if (request.sequence) {\n body.sequence = request.sequence;\n }\n\n body.localMedias = [\n {\n localSdp: JSON.stringify(localMedias), // this part must be JSON stringified, Locus requires this\n mediaId: request.mediaId,\n },\n ];\n\n LoggerProxy.logger.info(\n `Meeting:LocusMediaRequest#sendHttpRequest --> ${request.type} audioMuted=${audioMuted} videoMuted=${videoMuted}`\n );\n\n if (isRequestAffectingConfluenceState(request) && this.confluenceState === 'not created') {\n this.confluenceState = 'creation in progress';\n }\n\n // @ts-ignore\n return this.request({\n method: HTTP_VERBS.PUT,\n uri,\n body,\n })\n .then((result) => {\n if (isRequestAffectingConfluenceState(request)) {\n this.confluenceState = 'created';\n }\n\n return result;\n })\n .catch((e) => {\n if (\n isRequestAffectingConfluenceState(request) &&\n this.confluenceState === 'creation in progress'\n ) {\n this.confluenceState = 'not created';\n }\n throw e;\n });\n }\n\n /**\n * Sends a media request to Locus\n */\n public send(request: Request): Promise<RequestResult> {\n if (request.type === 'LocalMute') {\n const {audioMuted, videoMuted} = request.muteOptions;\n\n if (audioMuted !== undefined) {\n this.latestAudioMuted = audioMuted;\n }\n if (videoMuted !== undefined) {\n this.latestVideoMuted = videoMuted;\n }\n\n if (this.confluenceState === 'not created') {\n // if there is no confluence, there is no point sending out local mute request\n // as it will fail so we just store the latest audio/video muted values\n // and resolve immediately, so that higher layer (MuteState class) doesn't get blocked\n // and can call us again if user mutes/unmutes again before confluence is created\n LoggerProxy.logger.info(\n 'Meeting:LocusMediaRequest#send --> called with LocalMute request before confluence creation'\n );\n\n return Promise.resolve({});\n }\n }\n\n const pendingPromise = new Defer();\n\n const newRequest = new InternalRequestInfo(\n request,\n pendingPromise,\n this.sendHttpRequest.bind(this)\n );\n\n this.addToQueue(newRequest);\n\n defer(() => this.executeNextQueuedRequest());\n\n return pendingPromise.promise;\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,45 +1,94 @@
|
|
|
1
|
-
|
|
1
|
+
import { ServerMuteReason } from '@webex/media-helpers';
|
|
2
|
+
export declare const createMuteState: (type: any, meeting: any, enabled: boolean) => MuteState;
|
|
2
3
|
/** The purpose of this class is to manage the local and remote mute state and make sure that the server state always matches
|
|
3
4
|
the last requested state by the client.
|
|
4
5
|
|
|
5
6
|
More info about Locus muting API: https://sqbu-github.cisco.com/pages/WebExSquared/locus/guides/mute.html#
|
|
7
|
+
|
|
8
|
+
This class is exported only for unit tests. It should never be instantiated directly with new MuteState(), instead createMuteState() should be called
|
|
6
9
|
*/
|
|
7
|
-
declare class MuteState {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
10
|
+
export declare class MuteState {
|
|
11
|
+
state: {
|
|
12
|
+
client: {
|
|
13
|
+
enabled: boolean;
|
|
14
|
+
localMute: boolean;
|
|
15
|
+
};
|
|
16
|
+
server: {
|
|
17
|
+
localMute: boolean;
|
|
18
|
+
remoteMute: boolean;
|
|
19
|
+
unmuteAllowed: boolean;
|
|
20
|
+
};
|
|
21
|
+
syncToServerInProgress: boolean;
|
|
22
|
+
};
|
|
11
23
|
type: any;
|
|
24
|
+
ignoreMuteStateChange: boolean;
|
|
12
25
|
/**
|
|
13
26
|
* Constructor
|
|
14
27
|
*
|
|
15
28
|
* @param {String} type - audio or video
|
|
16
29
|
* @param {Object} meeting - the meeting object (used for reading current remote mute status)
|
|
30
|
+
* @param {boolean} enabled - whether the client audio/video is enabled at all
|
|
31
|
+
*/
|
|
32
|
+
constructor(type: string, meeting: any, enabled: boolean);
|
|
33
|
+
/**
|
|
34
|
+
* Starts the mute state machine. Needs to be called after a new MuteState instance is created.
|
|
35
|
+
*
|
|
36
|
+
* @param {Object} meeting - the meeting object
|
|
37
|
+
* @returns {void}
|
|
17
38
|
*/
|
|
18
|
-
|
|
39
|
+
init(meeting: any): void;
|
|
19
40
|
/**
|
|
20
|
-
*
|
|
21
|
-
*
|
|
41
|
+
* This method needs to be called whenever the local audio/video stream has changed.
|
|
42
|
+
* It reapplies the remote mute state onto the new stream and also reads the current
|
|
43
|
+
* local mute state from the stream and updates the internal state machine and sends
|
|
44
|
+
* any required requests to the server.
|
|
22
45
|
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
|
|
46
|
+
* @param {Object} meeting - the meeting object
|
|
47
|
+
* @returns {void}
|
|
48
|
+
*/
|
|
49
|
+
handleLocalStreamChange(meeting: any): void;
|
|
50
|
+
/**
|
|
51
|
+
* Enables/disables audio/video
|
|
26
52
|
*
|
|
53
|
+
* @param {Object} meeting - the meeting object
|
|
54
|
+
* @param {boolean} enable
|
|
55
|
+
* @returns {void}
|
|
56
|
+
*/
|
|
57
|
+
enable(meeting: any, enable: boolean): void;
|
|
58
|
+
/**
|
|
59
|
+
* Mutes/unmutes local stream
|
|
60
|
+
*
|
|
61
|
+
* @param {Object} meeting - the meeting object
|
|
62
|
+
* @param {Boolean} mute - true to mute the stream, false to unmute it
|
|
63
|
+
* @param {ServerMuteReason} reason - reason for muting/unmuting
|
|
64
|
+
* @returns {void}
|
|
65
|
+
*/
|
|
66
|
+
private muteLocalStream;
|
|
67
|
+
/**
|
|
68
|
+
* This method should be called when the local stream mute state is changed
|
|
27
69
|
* @public
|
|
28
70
|
* @memberof MuteState
|
|
29
71
|
* @param {Object} [meeting] the meeting object
|
|
30
72
|
* @param {Boolean} [mute] true for muting, false for unmuting request
|
|
31
|
-
* @returns {
|
|
73
|
+
* @returns {void}
|
|
32
74
|
*/
|
|
33
|
-
|
|
75
|
+
handleLocalStreamMuteStateChange(meeting?: object, mute?: boolean): void;
|
|
34
76
|
/**
|
|
35
|
-
* Applies the current mute state to the local
|
|
77
|
+
* Applies the current mute state to the local stream (by enabling or disabling it accordingly)
|
|
36
78
|
*
|
|
37
79
|
* @public
|
|
38
80
|
* @param {Object} [meeting] the meeting object
|
|
81
|
+
* @param {ServerMuteReason} reason - reason why we're applying our client state to the local stream
|
|
39
82
|
* @memberof MuteState
|
|
40
83
|
* @returns {void}
|
|
41
84
|
*/
|
|
42
|
-
applyClientStateLocally(meeting?: any): void;
|
|
85
|
+
applyClientStateLocally(meeting?: any, reason?: ServerMuteReason): void;
|
|
86
|
+
/** Returns true if client is locally muted - it takes into account not just the client local mute state,
|
|
87
|
+
* but also whether audio/video is enabled at all
|
|
88
|
+
*
|
|
89
|
+
* @returns {boolean}
|
|
90
|
+
*/
|
|
91
|
+
private getClientLocalMuteState;
|
|
43
92
|
/**
|
|
44
93
|
* Updates the server local and remote mute values so that they match the current client desired state.
|
|
45
94
|
*
|
|
@@ -67,16 +116,29 @@ declare class MuteState {
|
|
|
67
116
|
* @returns {Promise}
|
|
68
117
|
*/
|
|
69
118
|
private sendRemoteMuteRequestToServer;
|
|
119
|
+
/** Sets the mute state of the local stream according to what server thinks is our state
|
|
120
|
+
* @param {Object} meeting - the meeting object
|
|
121
|
+
* @param {ServerMuteReason} serverMuteReason - reason why we're applying server mute to the local stream
|
|
122
|
+
* @returns {void}
|
|
123
|
+
*/
|
|
124
|
+
private applyServerMuteToLocalStream;
|
|
125
|
+
/** Applies the current value for unmute allowed to the underlying stream
|
|
126
|
+
*
|
|
127
|
+
* @param {Meeting} meeting
|
|
128
|
+
* @returns {void}
|
|
129
|
+
*/
|
|
130
|
+
private applyUnmuteAllowedToStream;
|
|
70
131
|
/**
|
|
71
132
|
* This method should be called whenever the server remote mute state is changed
|
|
72
133
|
*
|
|
73
134
|
* @public
|
|
74
135
|
* @memberof MuteState
|
|
136
|
+
* @param {Meeting} meeting
|
|
75
137
|
* @param {Boolean} [muted] true if user is remotely muted, false otherwise
|
|
76
138
|
* @param {Boolean} [unmuteAllowed] indicates if user is allowed to unmute self (false when "hard mute" feature is used)
|
|
77
139
|
* @returns {undefined}
|
|
78
140
|
*/
|
|
79
|
-
handleServerRemoteMuteUpdate(muted?: boolean, unmuteAllowed?: boolean): void;
|
|
141
|
+
handleServerRemoteMuteUpdate(meeting: any, muted?: boolean, unmuteAllowed?: boolean): void;
|
|
80
142
|
/**
|
|
81
143
|
* This method should be called whenever we receive from the server a requirement to locally unmute
|
|
82
144
|
*
|
|
@@ -87,30 +149,36 @@ declare class MuteState {
|
|
|
87
149
|
*/
|
|
88
150
|
handleServerLocalUnmuteRequired(meeting?: object): void;
|
|
89
151
|
/**
|
|
90
|
-
* Returns true if the user is locally or remotely muted
|
|
152
|
+
* Returns true if the user is locally or remotely muted.
|
|
153
|
+
* It only checks the mute status, ignoring the fact whether audio/video is enabled.
|
|
154
|
+
*
|
|
155
|
+
* @public
|
|
156
|
+
* @memberof MuteState
|
|
157
|
+
* @returns {Boolean}
|
|
158
|
+
*/
|
|
159
|
+
isMuted(): boolean;
|
|
160
|
+
/**
|
|
161
|
+
* Returns true if the user is remotely muted
|
|
91
162
|
*
|
|
92
163
|
* @public
|
|
93
164
|
* @memberof MuteState
|
|
94
165
|
* @returns {Boolean}
|
|
95
166
|
*/
|
|
96
|
-
|
|
167
|
+
isRemotelyMuted(): boolean;
|
|
97
168
|
/**
|
|
98
|
-
* Returns true if
|
|
169
|
+
* Returns true if unmute is allowed
|
|
99
170
|
*
|
|
100
171
|
* @public
|
|
101
172
|
* @memberof MuteState
|
|
102
173
|
* @returns {Boolean}
|
|
103
174
|
*/
|
|
104
|
-
|
|
175
|
+
isUnmuteAllowed(): boolean;
|
|
105
176
|
/**
|
|
106
|
-
* Returns true if the user is muted
|
|
177
|
+
* Returns true if the user is locally muted or audio/video is disabled
|
|
107
178
|
*
|
|
108
179
|
* @public
|
|
109
180
|
* @memberof MuteState
|
|
110
181
|
* @returns {Boolean}
|
|
111
182
|
*/
|
|
112
|
-
|
|
113
|
-
get muted(): any;
|
|
114
|
-
get self(): boolean;
|
|
183
|
+
isLocallyMuted(): boolean;
|
|
115
184
|
}
|
|
116
|
-
export default createMuteState;
|