@webex/plugin-meetings 3.0.0-beta.4 → 3.0.0-beta.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/UPGRADING.md +9 -9
- package/browsers.js +19 -24
- package/dist/breakouts/breakout.js +137 -0
- package/dist/breakouts/breakout.js.map +1 -0
- package/dist/breakouts/collection.js +23 -0
- package/dist/breakouts/collection.js.map +1 -0
- package/dist/breakouts/edit-lock-error.js +52 -0
- package/dist/breakouts/edit-lock-error.js.map +1 -0
- package/dist/breakouts/index.js +546 -0
- package/dist/breakouts/index.js.map +1 -0
- package/dist/breakouts/request.js +78 -0
- package/dist/breakouts/request.js.map +1 -0
- package/dist/breakouts/utils.js +48 -0
- package/dist/breakouts/utils.js.map +1 -0
- package/dist/common/browser-detection.js +1 -20
- package/dist/common/browser-detection.js.map +1 -1
- package/dist/common/collection.js +5 -20
- package/dist/common/collection.js.map +1 -1
- package/dist/common/config.js +0 -7
- package/dist/common/config.js.map +1 -1
- package/dist/common/errors/captcha-error.js +10 -24
- package/dist/common/errors/captcha-error.js.map +1 -1
- package/dist/common/errors/intent-to-join.js +11 -24
- package/dist/common/errors/intent-to-join.js.map +1 -1
- package/dist/common/errors/join-meeting.js +12 -25
- package/dist/common/errors/join-meeting.js.map +1 -1
- package/dist/common/errors/media.js +10 -24
- package/dist/common/errors/media.js.map +1 -1
- package/dist/common/errors/parameter.js +5 -33
- package/dist/common/errors/parameter.js.map +1 -1
- package/dist/common/errors/password-error.js +10 -24
- package/dist/common/errors/password-error.js.map +1 -1
- package/dist/common/errors/permission.js +9 -23
- package/dist/common/errors/permission.js.map +1 -1
- package/dist/common/errors/reconnection-in-progress.js +0 -17
- package/dist/common/errors/reconnection-in-progress.js.map +1 -1
- package/dist/common/errors/reconnection.js +10 -24
- package/dist/common/errors/reconnection.js.map +1 -1
- package/dist/common/errors/stats.js +10 -24
- package/dist/common/errors/stats.js.map +1 -1
- package/dist/common/errors/webex-errors.js +6 -41
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/errors/webex-meetings-error.js +5 -25
- package/dist/common/errors/webex-meetings-error.js.map +1 -1
- package/dist/common/events/events-scope.js +0 -22
- package/dist/common/events/events-scope.js.map +1 -1
- package/dist/common/events/events.js +0 -23
- package/dist/common/events/events.js.map +1 -1
- package/dist/common/events/trigger-proxy.js +0 -12
- package/dist/common/events/trigger-proxy.js.map +1 -1
- package/dist/common/events/util.js +0 -15
- package/dist/common/events/util.js.map +1 -1
- package/dist/common/logs/logger-config.js +0 -4
- package/dist/common/logs/logger-config.js.map +1 -1
- package/dist/common/logs/logger-proxy.js +1 -8
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/logs/request.js +37 -60
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.js +4 -14
- package/dist/common/queue.js.map +1 -1
- package/dist/config.js +6 -6
- package/dist/config.js.map +1 -1
- package/dist/constants.js +109 -49
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/constants.js +14 -0
- package/dist/controls-options-manager/constants.js.map +1 -0
- package/dist/controls-options-manager/enums.js +15 -0
- package/dist/controls-options-manager/enums.js.map +1 -0
- package/dist/controls-options-manager/index.js +203 -0
- package/dist/controls-options-manager/index.js.map +1 -0
- package/dist/controls-options-manager/util.js +28 -0
- package/dist/controls-options-manager/util.js.map +1 -0
- package/dist/index.js +11 -18
- package/dist/index.js.map +1 -1
- package/dist/locus-info/controlsUtils.js +12 -29
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/embeddedAppsUtils.js +3 -26
- package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
- package/dist/locus-info/fullState.js +0 -15
- package/dist/locus-info/fullState.js.map +1 -1
- package/dist/locus-info/hostUtils.js +4 -12
- package/dist/locus-info/hostUtils.js.map +1 -1
- package/dist/locus-info/index.js +186 -192
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +3 -37
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +12 -38
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +92 -118
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +34 -91
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +66 -153
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +83 -117
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js +2 -9
- package/dist/media/util.js.map +1 -1
- package/dist/mediaQualityMetrics/config.js +505 -495
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +13 -14
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +2141 -2210
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/muteState.js +59 -82
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +308 -264
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/request.type.js +7 -0
- package/dist/meeting/request.type.js.map +1 -0
- package/dist/meeting/state.js +21 -31
- package/dist/meeting/state.js.map +1 -1
- package/dist/meeting/util.js +45 -217
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/collection.js +6 -25
- package/dist/meeting-info/collection.js.map +1 -1
- package/dist/meeting-info/index.js +14 -32
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +193 -268
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.js +3 -15
- package/dist/meeting-info/request.js.map +1 -1
- package/dist/meeting-info/util.js +98 -183
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +137 -228
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +5 -20
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +490 -560
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/request.js +24 -41
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +116 -155
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +78 -86
- package/dist/member/index.js.map +1 -1
- package/dist/member/util.js +31 -68
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +3 -12
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +95 -200
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +16 -39
- package/dist/members/request.js.map +1 -1
- package/dist/members/util.js +9 -38
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/config.js +1 -13
- package/dist/metrics/config.js.map +1 -1
- package/dist/metrics/constants.js +1 -6
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +54 -156
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +74 -52
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/receiveSlot.js +48 -65
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/multistream/receiveSlotManager.js +60 -82
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +60 -76
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.js +6 -40
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +360 -413
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/networkQualityMonitor/index.js +40 -59
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/personal-meeting-room/index.js +21 -45
- package/dist/personal-meeting-room/index.js.map +1 -1
- package/dist/personal-meeting-room/request.js +1 -31
- package/dist/personal-meeting-room/request.js.map +1 -1
- package/dist/personal-meeting-room/util.js +0 -13
- package/dist/personal-meeting-room/util.js.map +1 -1
- package/dist/reachability/index.js +147 -183
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +15 -23
- package/dist/reachability/request.js.map +1 -1
- package/dist/reactions/constants.js +13 -0
- package/dist/reactions/constants.js.map +1 -0
- package/dist/reactions/reactions.js +109 -0
- package/dist/reactions/reactions.js.map +1 -0
- package/dist/reactions/reactions.type.js +36 -0
- package/dist/reactions/reactions.type.js.map +1 -0
- package/dist/reconnection-manager/index.js +322 -456
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/enums.js +17 -0
- package/dist/recording-controller/enums.js.map +1 -0
- package/dist/recording-controller/index.js +343 -0
- package/dist/recording-controller/index.js.map +1 -0
- package/dist/recording-controller/util.js +63 -0
- package/dist/recording-controller/util.js.map +1 -0
- package/dist/roap/index.js +48 -70
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +143 -131
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +91 -98
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/statsAnalyzer/global.js +1 -95
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.js +361 -449
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +137 -81
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.js +22 -47
- package/dist/transcription/index.js.map +1 -1
- package/dist/types/breakouts/breakout.d.ts +8 -0
- package/dist/types/breakouts/collection.d.ts +5 -0
- package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
- package/dist/types/breakouts/index.d.ts +5 -0
- package/dist/types/breakouts/request.d.ts +22 -0
- package/dist/types/breakouts/utils.d.ts +8 -0
- package/dist/types/common/browser-detection.d.ts +9 -0
- package/dist/types/common/collection.d.ts +48 -0
- package/dist/types/common/config.d.ts +2 -0
- package/dist/types/common/errors/captcha-error.d.ts +15 -0
- package/dist/types/common/errors/intent-to-join.d.ts +16 -0
- package/dist/types/common/errors/join-meeting.d.ts +17 -0
- package/dist/types/common/errors/media.d.ts +15 -0
- package/dist/types/common/errors/parameter.d.ts +15 -0
- package/dist/types/common/errors/password-error.d.ts +15 -0
- package/dist/types/common/errors/permission.d.ts +14 -0
- package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
- package/dist/types/common/errors/reconnection.d.ts +15 -0
- package/dist/types/common/errors/stats.d.ts +15 -0
- package/dist/types/common/errors/webex-errors.d.ts +69 -0
- package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
- package/dist/types/common/events/events-scope.d.ts +17 -0
- package/dist/types/common/events/events.d.ts +12 -0
- package/dist/types/common/events/trigger-proxy.d.ts +2 -0
- package/dist/types/common/events/util.d.ts +2 -0
- package/dist/types/common/logs/logger-config.d.ts +2 -0
- package/dist/types/common/logs/logger-proxy.d.ts +2 -0
- package/dist/types/common/logs/request.d.ts +34 -0
- package/dist/types/common/queue.d.ts +32 -0
- package/dist/types/config.d.ts +77 -0
- package/dist/types/constants.d.ts +916 -0
- package/dist/types/controls-options-manager/constants.d.ts +4 -0
- package/dist/types/controls-options-manager/enums.d.ts +5 -0
- package/dist/types/controls-options-manager/index.d.ts +120 -0
- package/dist/types/controls-options-manager/util.d.ts +7 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/locus-info/controlsUtils.d.ts +2 -0
- package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
- package/dist/types/locus-info/fullState.d.ts +2 -0
- package/dist/types/locus-info/hostUtils.d.ts +2 -0
- package/dist/types/locus-info/index.d.ts +269 -0
- package/dist/types/locus-info/infoUtils.d.ts +2 -0
- package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
- package/dist/types/locus-info/parser.d.ts +212 -0
- package/dist/types/locus-info/selfUtils.d.ts +2 -0
- package/dist/types/media/index.d.ts +32 -0
- package/dist/types/media/properties.d.ts +108 -0
- package/dist/types/media/util.d.ts +2 -0
- package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +83 -0
- package/dist/types/meeting/index.d.ts +1699 -0
- package/dist/types/meeting/muteState.d.ts +116 -0
- package/dist/types/meeting/request.d.ts +271 -0
- package/dist/types/meeting/request.type.d.ts +11 -0
- package/dist/types/meeting/state.d.ts +9 -0
- package/dist/types/meeting/util.d.ts +2 -0
- package/dist/types/meeting-info/collection.d.ts +20 -0
- package/dist/types/meeting-info/index.d.ts +57 -0
- package/dist/types/meeting-info/meeting-info-v2.d.ts +93 -0
- package/dist/types/meeting-info/request.d.ts +22 -0
- package/dist/types/meeting-info/util.d.ts +2 -0
- package/dist/types/meeting-info/utilv2.d.ts +2 -0
- package/dist/types/meetings/collection.d.ts +23 -0
- package/dist/types/meetings/index.d.ts +297 -0
- package/dist/types/meetings/request.d.ts +27 -0
- package/dist/types/meetings/util.d.ts +18 -0
- package/dist/types/member/index.d.ts +146 -0
- package/dist/types/member/util.d.ts +2 -0
- package/dist/types/members/collection.d.ts +24 -0
- package/dist/types/members/index.d.ts +320 -0
- package/dist/types/members/request.d.ts +50 -0
- package/dist/types/members/util.d.ts +2 -0
- package/dist/types/metrics/config.d.ts +169 -0
- package/dist/types/metrics/constants.d.ts +53 -0
- package/dist/types/metrics/index.d.ts +152 -0
- package/dist/types/multistream/mediaRequestManager.d.ts +51 -0
- package/dist/types/multistream/receiveSlot.d.ts +64 -0
- package/dist/types/multistream/receiveSlotManager.d.ts +46 -0
- package/dist/types/multistream/remoteMedia.d.ts +100 -0
- package/dist/types/multistream/remoteMediaGroup.d.ts +56 -0
- package/dist/types/multistream/remoteMediaManager.d.ts +241 -0
- package/dist/types/networkQualityMonitor/index.d.ts +70 -0
- package/dist/types/personal-meeting-room/index.d.ts +47 -0
- package/dist/types/personal-meeting-room/request.d.ts +14 -0
- package/dist/types/personal-meeting-room/util.d.ts +2 -0
- package/dist/types/reachability/index.d.ts +140 -0
- package/dist/types/reachability/request.d.ts +37 -0
- package/dist/types/reactions/constants.d.ts +3 -0
- package/dist/types/reactions/reactions.d.ts +4 -0
- package/dist/types/reactions/reactions.type.d.ts +52 -0
- package/dist/types/reconnection-manager/index.d.ts +117 -0
- package/dist/types/recording-controller/enums.d.ts +7 -0
- package/dist/types/recording-controller/index.d.ts +193 -0
- package/dist/types/recording-controller/util.d.ts +13 -0
- package/dist/types/roap/index.d.ts +77 -0
- package/dist/types/roap/request.d.ts +38 -0
- package/dist/types/roap/turnDiscovery.d.ts +74 -0
- package/dist/types/statsAnalyzer/global.d.ts +36 -0
- package/dist/types/statsAnalyzer/index.d.ts +195 -0
- package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
- package/dist/types/transcription/index.d.ts +64 -0
- package/internal-README.md +7 -6
- package/package.json +27 -21
- package/src/breakouts/README.md +199 -0
- package/src/breakouts/breakout.ts +130 -0
- package/src/breakouts/collection.ts +19 -0
- package/src/breakouts/edit-lock-error.ts +25 -0
- package/src/breakouts/index.ts +504 -0
- package/src/breakouts/request.ts +55 -0
- package/src/breakouts/utils.ts +39 -0
- package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
- package/src/common/collection.ts +9 -7
- package/src/common/{config.js → config.ts} +1 -1
- package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
- package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
- package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
- package/src/common/errors/{media.js → media.ts} +11 -7
- package/src/common/errors/parameter.ts +11 -7
- package/src/common/errors/{password-error.js → password-error.ts} +11 -7
- package/src/common/errors/{permission.js → permission.ts} +10 -6
- package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
- package/src/common/errors/{stats.js → stats.ts} +11 -7
- package/src/common/errors/{webex-errors.js → webex-errors.ts} +8 -7
- package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
- package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
- package/src/common/events/{events.js → events.ts} +5 -1
- package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
- package/src/common/events/{util.js → util.ts} +2 -3
- package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
- package/src/common/logs/logger-proxy.ts +44 -0
- package/src/common/logs/{request.js → request.ts} +22 -9
- package/src/common/queue.ts +1 -2
- package/src/{config.js → config.ts} +17 -12
- package/src/constants.ts +62 -5
- package/src/controls-options-manager/constants.ts +5 -0
- package/src/controls-options-manager/enums.ts +6 -0
- package/src/controls-options-manager/index.ts +183 -0
- package/src/controls-options-manager/util.ts +20 -0
- package/src/index.js +4 -1
- package/src/locus-info/controlsUtils.ts +114 -0
- package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
- package/src/locus-info/{fullState.js → fullState.ts} +16 -12
- package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
- package/src/locus-info/{index.js → index.ts} +150 -66
- package/src/locus-info/{infoUtils.js → infoUtils.ts} +19 -8
- package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +17 -17
- package/src/locus-info/{parser.js → parser.ts} +67 -79
- package/src/locus-info/{selfUtils.js → selfUtils.ts} +123 -68
- package/src/media/{index.js → index.ts} +182 -173
- package/src/media/{properties.js → properties.ts} +60 -37
- package/src/media/{util.js → util.ts} +2 -2
- package/src/mediaQualityMetrics/config.ts +384 -0
- package/src/meeting/in-meeting-actions.ts +31 -3
- package/src/meeting/{index.js → index.ts} +2512 -1579
- package/src/meeting/{muteState.js → muteState.ts} +95 -49
- package/src/meeting/{request.js → request.ts} +326 -142
- package/src/meeting/request.type.ts +13 -0
- package/src/meeting/{state.js → state.ts} +50 -35
- package/src/meeting/{util.js → util.ts} +117 -119
- package/src/meeting-info/{collection.js → collection.ts} +6 -2
- package/src/meeting-info/{index.js → index.ts} +42 -36
- package/src/meeting-info/meeting-info-v2.ts +273 -0
- package/src/meeting-info/{request.js → request.ts} +14 -4
- package/src/meeting-info/{util.js → util.ts} +60 -51
- package/src/meeting-info/{utilv2.js → utilv2.ts} +65 -58
- package/src/meetings/{collection.js → collection.ts} +6 -3
- package/src/meetings/index.ts +1159 -0
- package/src/meetings/{request.js → request.ts} +32 -25
- package/src/meetings/{util.js → util.ts} +58 -32
- package/src/member/{index.js → index.ts} +102 -56
- package/src/member/{util.js → util.ts} +52 -25
- package/src/members/{collection.js → collection.ts} +2 -2
- package/src/members/{index.js → index.ts} +221 -142
- package/src/members/{request.js → request.ts} +60 -16
- package/src/members/{util.js → util.ts} +50 -48
- package/src/metrics/{config.js → config.ts} +253 -92
- package/src/metrics/{constants.js → constants.ts} +0 -6
- package/src/metrics/{index.js → index.ts} +105 -94
- package/src/multistream/mediaRequestManager.ts +101 -39
- package/src/multistream/receiveSlot.ts +62 -26
- package/src/multistream/receiveSlotManager.ts +35 -21
- package/src/multistream/remoteMedia.ts +38 -5
- package/src/multistream/remoteMediaGroup.ts +4 -3
- package/src/multistream/remoteMediaManager.ts +152 -36
- package/src/networkQualityMonitor/{index.js → index.ts} +41 -29
- package/src/personal-meeting-room/{index.js → index.ts} +28 -19
- package/src/personal-meeting-room/{request.js → request.ts} +13 -4
- package/src/personal-meeting-room/{util.js → util.ts} +4 -4
- package/src/reachability/{index.js → index.ts} +109 -85
- package/src/reachability/request.ts +46 -35
- package/src/reactions/constants.ts +4 -0
- package/src/reactions/reactions.ts +104 -0
- package/src/reactions/reactions.type.ts +62 -0
- package/src/reconnection-manager/{index.js → index.ts} +196 -103
- package/src/recording-controller/enums.ts +8 -0
- package/src/recording-controller/index.ts +315 -0
- package/src/recording-controller/util.ts +58 -0
- package/src/roap/{index.js → index.ts} +77 -60
- package/src/roap/request.ts +172 -0
- package/src/roap/turnDiscovery.ts +81 -41
- package/src/statsAnalyzer/global.ts +37 -0
- package/src/statsAnalyzer/index.ts +1234 -0
- package/src/statsAnalyzer/mqaUtil.ts +293 -0
- package/src/transcription/{index.js → index.ts} +46 -39
- package/test/integration/spec/converged-space-meetings.js +176 -0
- package/test/integration/spec/journey.js +665 -464
- package/test/integration/spec/space-meeting.js +320 -206
- package/test/integration/spec/transcription.js +7 -8
- package/test/unit/spec/breakouts/breakout.ts +147 -0
- package/test/unit/spec/breakouts/collection.ts +15 -0
- package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
- package/test/unit/spec/breakouts/index.ts +707 -0
- package/test/unit/spec/breakouts/request.ts +104 -0
- package/test/unit/spec/breakouts/utils.js +47 -0
- package/test/unit/spec/common/browser-detection.js +9 -28
- package/test/unit/spec/controls-options-manager/index.js +124 -0
- package/test/unit/spec/controls-options-manager/util.js +66 -0
- package/test/unit/spec/fixture/locus.js +92 -90
- package/test/unit/spec/locus-info/controlsUtils.js +25 -5
- package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
- package/test/unit/spec/locus-info/index.js +104 -2
- package/test/unit/spec/locus-info/infoUtils.js +41 -32
- package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
- package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
- package/test/unit/spec/locus-info/parser.js +3 -9
- package/test/unit/spec/locus-info/selfConstant.js +97 -103
- package/test/unit/spec/locus-info/selfUtils.js +105 -12
- package/test/unit/spec/media/index.ts +39 -53
- package/test/unit/spec/media/properties.ts +9 -9
- package/test/unit/spec/meeting/in-meeting-actions.ts +13 -2
- package/test/unit/spec/meeting/index.js +2253 -811
- package/test/unit/spec/meeting/muteState.js +74 -55
- package/test/unit/spec/meeting/request.js +141 -43
- package/test/unit/spec/meeting/utils.js +106 -171
- package/test/unit/spec/meeting-info/meetinginfov2.js +100 -73
- package/test/unit/spec/meeting-info/request.js +7 -9
- package/test/unit/spec/meeting-info/util.js +11 -12
- package/test/unit/spec/meeting-info/utilv2.js +110 -74
- package/test/unit/spec/meetings/collection.js +1 -1
- package/test/unit/spec/meetings/index.js +439 -257
- package/test/unit/spec/meetings/utils.js +14 -12
- package/test/unit/spec/member/index.js +0 -1
- package/test/unit/spec/member/util.js +31 -7
- package/test/unit/spec/members/index.js +104 -54
- package/test/unit/spec/members/request.js +29 -20
- package/test/unit/spec/members/utils.js +8 -5
- package/test/unit/spec/metrics/index.js +16 -21
- package/test/unit/spec/multistream/mediaRequestManager.ts +318 -64
- package/test/unit/spec/multistream/receiveSlot.ts +68 -17
- package/test/unit/spec/multistream/receiveSlotManager.ts +41 -13
- package/test/unit/spec/multistream/remoteMedia.ts +38 -2
- package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
- package/test/unit/spec/multistream/remoteMediaManager.ts +412 -65
- package/test/unit/spec/networkQualityMonitor/index.js +24 -18
- package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
- package/test/unit/spec/reachability/index.ts +70 -27
- package/test/unit/spec/reachability/request.js +66 -0
- package/test/unit/spec/reconnection-manager/index.js +58 -30
- package/test/unit/spec/recording-controller/index.js +231 -0
- package/test/unit/spec/recording-controller/util.js +102 -0
- package/test/unit/spec/roap/index.ts +12 -8
- package/test/unit/spec/roap/request.ts +217 -0
- package/test/unit/spec/roap/turnDiscovery.ts +72 -49
- package/test/unit/spec/stats-analyzer/index.js +86 -57
- package/test/utils/cmr.js +44 -42
- package/test/utils/constants.js +9 -0
- package/test/utils/testUtils.js +98 -77
- package/test/utils/webex-config.js +22 -18
- package/test/utils/webex-test-users.js +57 -50
- package/tsconfig.json +6 -0
- package/dist/media/internal-media-core-wrapper.js +0 -22
- package/dist/media/internal-media-core-wrapper.js.map +0 -1
- package/dist/meeting/effectsState.js +0 -327
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/multistream/multistreamMedia.js +0 -116
- package/dist/multistream/multistreamMedia.js.map +0 -1
- package/dist/peer-connection-manager/util.js +0 -124
- package/dist/peer-connection-manager/util.js.map +0 -1
- package/src/common/logs/logger-proxy.js +0 -33
- package/src/locus-info/controlsUtils.js +0 -102
- package/src/media/internal-media-core-wrapper.ts +0 -9
- package/src/mediaQualityMetrics/config.js +0 -382
- package/src/meeting/effectsState.js +0 -205
- package/src/meeting-info/meeting-info-v2.js +0 -255
- package/src/meetings/index.js +0 -1015
- package/src/multistream/multistreamMedia.ts +0 -92
- package/src/peer-connection-manager/util.ts +0 -117
- package/src/roap/request.js +0 -127
- package/src/statsAnalyzer/global.js +0 -133
- package/src/statsAnalyzer/index.js +0 -1006
- package/src/statsAnalyzer/mqaUtil.js +0 -173
- package/test/unit/spec/meeting/effectsState.js +0 -291
- package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
- /package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import uuid from 'uuid';
|
|
2
2
|
import {debounce} from 'lodash';
|
|
3
|
+
// @ts-ignore
|
|
3
4
|
import {StatelessWebexPlugin} from '@webex/webex-core';
|
|
5
|
+
// @ts-ignore
|
|
4
6
|
import {deviceType} from '@webex/common';
|
|
5
7
|
|
|
6
8
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
7
9
|
import {
|
|
8
10
|
ALERT,
|
|
9
11
|
ALTERNATE_REDIRECT_TRUE,
|
|
12
|
+
BREAKOUTS,
|
|
10
13
|
CALL,
|
|
11
14
|
CONTROLS,
|
|
12
15
|
DECLINE,
|
|
@@ -20,19 +23,57 @@ import {
|
|
|
20
23
|
PARTICIPANT,
|
|
21
24
|
PROVISIONAL_TYPE_DIAL_IN,
|
|
22
25
|
PROVISIONAL_TYPE_DIAL_OUT,
|
|
26
|
+
REACHABILITY,
|
|
23
27
|
SEND_DTMF_ENDPOINT,
|
|
24
|
-
_SLIDES_
|
|
28
|
+
_SLIDES_,
|
|
25
29
|
} from '../constants';
|
|
30
|
+
import {SendReactionOptions, ToggleReactionsOptions} from './request.type';
|
|
26
31
|
|
|
27
32
|
/**
|
|
28
33
|
* @class MeetingRequest
|
|
29
34
|
*/
|
|
30
35
|
export default class MeetingRequest extends StatelessWebexPlugin {
|
|
31
|
-
|
|
36
|
+
changeVideoLayoutDebounced: any;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Constructor
|
|
40
|
+
* @param {Object} attrs
|
|
41
|
+
* @param {Object} options
|
|
42
|
+
*/
|
|
43
|
+
constructor(attrs: any, options: any) {
|
|
32
44
|
super(attrs, options);
|
|
33
|
-
this.changeVideoLayoutDebounced = debounce(this.changeVideoLayout, 2000, {
|
|
45
|
+
this.changeVideoLayoutDebounced = debounce(this.changeVideoLayout, 2000, {
|
|
46
|
+
leading: true,
|
|
47
|
+
trailing: true,
|
|
48
|
+
});
|
|
34
49
|
}
|
|
35
50
|
|
|
51
|
+
/**
|
|
52
|
+
* Returns joinCookie from boundedStorage if present.
|
|
53
|
+
* @returns {Object} joinCookie
|
|
54
|
+
*/
|
|
55
|
+
private getJoinCookie = async () => {
|
|
56
|
+
// @ts-ignore
|
|
57
|
+
const joinCookieRaw = await this.webex.boundedStorage
|
|
58
|
+
.get(REACHABILITY.namespace, REACHABILITY.localStorageJoinCookie)
|
|
59
|
+
.catch(() => {});
|
|
60
|
+
|
|
61
|
+
if (joinCookieRaw) {
|
|
62
|
+
try {
|
|
63
|
+
const joinCookie = JSON.parse(joinCookieRaw);
|
|
64
|
+
if (joinCookie) {
|
|
65
|
+
return joinCookie;
|
|
66
|
+
}
|
|
67
|
+
} catch (e) {
|
|
68
|
+
LoggerProxy.logger.error(
|
|
69
|
+
`MeetingRequest#constructor --> Error in parsing join cookie data: ${e}`
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return null;
|
|
75
|
+
};
|
|
76
|
+
|
|
36
77
|
/**
|
|
37
78
|
* Make a network request to join a meeting
|
|
38
79
|
* @param {Object} options
|
|
@@ -46,9 +87,27 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
46
87
|
* @param {boolean} options.pin
|
|
47
88
|
* @param {boolean} options.moveToResource
|
|
48
89
|
* @param {Object} options.roapMessage
|
|
90
|
+
* @param {boolean} options.breakoutsSupported
|
|
49
91
|
* @returns {Promise}
|
|
50
92
|
*/
|
|
51
|
-
async joinMeeting(options
|
|
93
|
+
async joinMeeting(options: {
|
|
94
|
+
sipUri: string;
|
|
95
|
+
deviceUrl: string;
|
|
96
|
+
locusUrl: string;
|
|
97
|
+
resourceId: string;
|
|
98
|
+
correlationId: string;
|
|
99
|
+
ensureConversation: boolean;
|
|
100
|
+
moderator: boolean;
|
|
101
|
+
pin: boolean;
|
|
102
|
+
moveToResource: boolean;
|
|
103
|
+
roapMessage: any;
|
|
104
|
+
asResourceOccupant: any;
|
|
105
|
+
inviteeAddress: any;
|
|
106
|
+
meetingNumber: any;
|
|
107
|
+
permissionToken: any;
|
|
108
|
+
preferTranscoding: any;
|
|
109
|
+
breakoutsSupported: boolean;
|
|
110
|
+
}) {
|
|
52
111
|
const {
|
|
53
112
|
asResourceOccupant,
|
|
54
113
|
inviteeAddress,
|
|
@@ -63,36 +122,45 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
63
122
|
pin,
|
|
64
123
|
moveToResource,
|
|
65
124
|
roapMessage,
|
|
66
|
-
preferTranscoding
|
|
125
|
+
preferTranscoding,
|
|
126
|
+
breakoutsSupported,
|
|
67
127
|
} = options;
|
|
68
128
|
|
|
69
|
-
LoggerProxy.logger.info(
|
|
70
|
-
'Meeting:request#joinMeeting --> Joining a meeting',
|
|
71
|
-
correlationId
|
|
72
|
-
);
|
|
129
|
+
LoggerProxy.logger.info('Meeting:request#joinMeeting --> Joining a meeting', correlationId);
|
|
73
130
|
|
|
74
131
|
let url = '';
|
|
75
132
|
|
|
76
|
-
const
|
|
133
|
+
const joinCookie = await this.getJoinCookie();
|
|
134
|
+
|
|
135
|
+
const body: any = {
|
|
77
136
|
asResourceOccupant,
|
|
78
137
|
device: {
|
|
79
138
|
url: deviceUrl,
|
|
80
|
-
|
|
139
|
+
// @ts-ignore - config comes from registerPlugin
|
|
140
|
+
deviceType: this.config.meetings.deviceType,
|
|
81
141
|
},
|
|
82
142
|
usingResource: resourceId || null,
|
|
83
|
-
moveMediaToResource: resourceId && moveToResource || false,
|
|
143
|
+
moveMediaToResource: (resourceId && moveToResource) || false,
|
|
84
144
|
correlationId,
|
|
85
145
|
respOnlySdp: true,
|
|
86
146
|
allowMultiDevice: true,
|
|
87
147
|
ensureConversation: ensureConversation || false,
|
|
88
148
|
supportsNativeLobby: 1,
|
|
89
149
|
clientMediaPreferences: {
|
|
90
|
-
preferTranscoding: preferTranscoding ?? true
|
|
91
|
-
|
|
150
|
+
preferTranscoding: preferTranscoding ?? true,
|
|
151
|
+
joinCookie,
|
|
152
|
+
},
|
|
92
153
|
};
|
|
93
154
|
|
|
155
|
+
if (breakoutsSupported) {
|
|
156
|
+
body.deviceCapabilities = [BREAKOUTS.BREAKOUTS_SUPPORTED];
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// @ts-ignore
|
|
94
160
|
if (this.webex.meetings.clientRegion) {
|
|
161
|
+
// @ts-ignore
|
|
95
162
|
body.device.countryCode = this.webex.meetings.clientRegion.countryCode;
|
|
163
|
+
// @ts-ignore
|
|
96
164
|
body.device.regionCode = this.webex.meetings.clientRegion.regionCode;
|
|
97
165
|
}
|
|
98
166
|
|
|
@@ -110,28 +178,29 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
110
178
|
|
|
111
179
|
if (locusUrl) {
|
|
112
180
|
url = `${locusUrl}/${PARTICIPANT}`;
|
|
113
|
-
}
|
|
114
|
-
else if (inviteeAddress || meetingNumber) {
|
|
181
|
+
} else if (inviteeAddress || meetingNumber) {
|
|
115
182
|
try {
|
|
183
|
+
// @ts-ignore
|
|
116
184
|
await this.webex.internal.services.waitForCatalog('postauth');
|
|
185
|
+
// @ts-ignore
|
|
117
186
|
url = `${this.webex.internal.services.get('locus')}/${LOCI}/${CALL}`;
|
|
118
187
|
body.invitee = {
|
|
119
|
-
address: inviteeAddress || `wbxmn:${meetingNumber}
|
|
188
|
+
address: inviteeAddress || `wbxmn:${meetingNumber}`,
|
|
120
189
|
};
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
190
|
+
} catch (e) {
|
|
191
|
+
LoggerProxy.logger.error(
|
|
192
|
+
`Meeting:request#joinMeeting Error Joining ${inviteeAddress || meetingNumber} --> ${e}`
|
|
193
|
+
);
|
|
194
|
+
throw e;
|
|
125
195
|
}
|
|
126
196
|
}
|
|
127
197
|
|
|
128
|
-
|
|
129
198
|
// TODO: -- this will be resolved in SDK request
|
|
130
199
|
url = url.concat(`?${ALTERNATE_REDIRECT_TRUE}`);
|
|
131
200
|
|
|
132
201
|
if (resourceId === inviteeAddress) {
|
|
133
202
|
body.callPreferences = {
|
|
134
|
-
requestedMedia: [_SLIDES_]
|
|
203
|
+
requestedMedia: [_SLIDES_],
|
|
135
204
|
};
|
|
136
205
|
}
|
|
137
206
|
|
|
@@ -139,10 +208,11 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
139
208
|
body.localMedias = roapMessage.localMedias;
|
|
140
209
|
}
|
|
141
210
|
|
|
211
|
+
/// @ts-ignore
|
|
142
212
|
return this.request({
|
|
143
213
|
method: HTTP_VERBS.POST,
|
|
144
214
|
uri: url,
|
|
145
|
-
body
|
|
215
|
+
body,
|
|
146
216
|
});
|
|
147
217
|
}
|
|
148
218
|
|
|
@@ -154,18 +224,22 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
154
224
|
* @returns {Promise}
|
|
155
225
|
* @private
|
|
156
226
|
*/
|
|
157
|
-
refreshCaptcha({
|
|
227
|
+
private refreshCaptcha({
|
|
158
228
|
captchaRefreshUrl,
|
|
159
|
-
captchaId
|
|
229
|
+
captchaId,
|
|
230
|
+
}: {
|
|
231
|
+
captchaRefreshUrl: string;
|
|
232
|
+
captchaId: string;
|
|
160
233
|
}) {
|
|
161
234
|
const body = {
|
|
162
|
-
captchaId
|
|
235
|
+
captchaId,
|
|
163
236
|
};
|
|
164
237
|
|
|
238
|
+
// @ts-ignore
|
|
165
239
|
return this.request({
|
|
166
240
|
method: HTTP_VERBS.POST,
|
|
167
241
|
uri: captchaRefreshUrl,
|
|
168
|
-
body
|
|
242
|
+
body,
|
|
169
243
|
}).catch((err) => {
|
|
170
244
|
LoggerProxy.logger.error(`Meeting:request#refreshCaptcha --> Error: ${err}`);
|
|
171
245
|
|
|
@@ -177,17 +251,22 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
177
251
|
* Make a network request to add a dial in device
|
|
178
252
|
* @param {Object} options
|
|
179
253
|
* @param {String} options.correlationId
|
|
180
|
-
* @param {String} options.
|
|
254
|
+
* @param {String} options.locusUrl url for the meeting
|
|
181
255
|
* @param {String} options.dialInUrl identifier for the to-be provisioned device
|
|
182
256
|
* @param {String} options.clientUrl identifier for the web device
|
|
183
257
|
* @returns {Promise}
|
|
184
258
|
* @private
|
|
185
259
|
*/
|
|
186
|
-
dialIn({
|
|
260
|
+
private dialIn({
|
|
187
261
|
locusUrl,
|
|
188
262
|
dialInUrl,
|
|
189
263
|
clientUrl,
|
|
190
|
-
correlationId
|
|
264
|
+
correlationId,
|
|
265
|
+
}: {
|
|
266
|
+
correlationId: string;
|
|
267
|
+
locusUrl: string;
|
|
268
|
+
dialInUrl: string;
|
|
269
|
+
clientUrl: string;
|
|
191
270
|
}) {
|
|
192
271
|
LoggerProxy.logger.info(
|
|
193
272
|
'Meeting:request#dialIn --> Provisioning a dial in device',
|
|
@@ -200,17 +279,20 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
200
279
|
deviceType: deviceType.PROVISIONAL,
|
|
201
280
|
provisionalType: PROVISIONAL_TYPE_DIAL_IN,
|
|
202
281
|
url: dialInUrl,
|
|
203
|
-
clientUrl
|
|
282
|
+
clientUrl,
|
|
204
283
|
},
|
|
205
|
-
correlationId
|
|
284
|
+
correlationId,
|
|
206
285
|
};
|
|
207
286
|
|
|
287
|
+
// @ts-ignore
|
|
208
288
|
return this.request({
|
|
209
289
|
method: HTTP_VERBS.POST,
|
|
210
290
|
uri,
|
|
211
|
-
body
|
|
291
|
+
body,
|
|
212
292
|
}).catch((err) => {
|
|
213
|
-
LoggerProxy.logger.error(
|
|
293
|
+
LoggerProxy.logger.error(
|
|
294
|
+
`Meeting:request#dialIn --> Error provisioning a dial in device, error ${err}`
|
|
295
|
+
);
|
|
214
296
|
|
|
215
297
|
throw err;
|
|
216
298
|
});
|
|
@@ -220,19 +302,25 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
220
302
|
* Make a network request to add a dial out device
|
|
221
303
|
* @param {Object} options
|
|
222
304
|
* @param {String} options.correlationId
|
|
223
|
-
* @param {String} options.
|
|
305
|
+
* @param {String} options.locusUrl url for the meeting
|
|
224
306
|
* @param {String} options.dialOutUrl identifier for the to-be provisioned device
|
|
225
307
|
* @param {String} options.phoneNumber phone number to dial out to
|
|
226
308
|
* @param {String} options.clientUrl identifier for the web device
|
|
227
309
|
* @returns {Promise}
|
|
228
310
|
* @private
|
|
229
311
|
*/
|
|
230
|
-
dialOut({
|
|
312
|
+
private dialOut({
|
|
231
313
|
locusUrl,
|
|
232
314
|
dialOutUrl,
|
|
233
315
|
phoneNumber,
|
|
234
316
|
clientUrl,
|
|
235
|
-
correlationId
|
|
317
|
+
correlationId,
|
|
318
|
+
}: {
|
|
319
|
+
correlationId: string;
|
|
320
|
+
locusUrl: string;
|
|
321
|
+
dialOutUrl: string;
|
|
322
|
+
phoneNumber: string;
|
|
323
|
+
clientUrl: string;
|
|
236
324
|
}) {
|
|
237
325
|
LoggerProxy.logger.info(
|
|
238
326
|
'Meeting:request#dialOut --> Provisioning a dial out device',
|
|
@@ -246,17 +334,20 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
246
334
|
provisionalType: PROVISIONAL_TYPE_DIAL_OUT,
|
|
247
335
|
url: dialOutUrl,
|
|
248
336
|
dialoutAddress: phoneNumber,
|
|
249
|
-
clientUrl
|
|
337
|
+
clientUrl,
|
|
250
338
|
},
|
|
251
|
-
correlationId
|
|
339
|
+
correlationId,
|
|
252
340
|
};
|
|
253
341
|
|
|
342
|
+
// @ts-ignore
|
|
254
343
|
return this.request({
|
|
255
344
|
method: HTTP_VERBS.POST,
|
|
256
345
|
uri,
|
|
257
|
-
body
|
|
346
|
+
body,
|
|
258
347
|
}).catch((err) => {
|
|
259
|
-
LoggerProxy.logger.error(
|
|
348
|
+
LoggerProxy.logger.error(
|
|
349
|
+
`Meeting:request#dialOut --> Error provisioning a dial out device, error ${err}`
|
|
350
|
+
);
|
|
260
351
|
|
|
261
352
|
throw err;
|
|
262
353
|
});
|
|
@@ -265,11 +356,11 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
265
356
|
/**
|
|
266
357
|
* Syns the missed delta event
|
|
267
358
|
* @param {Object} options
|
|
268
|
-
* @param {
|
|
359
|
+
* @param {boolean} options.desync flag to get partial or whole locus object
|
|
269
360
|
* @param {String} options.syncUrl sync url to get ht elatest locus delta
|
|
270
361
|
* @returns {Promise}
|
|
271
362
|
*/
|
|
272
|
-
syncMeeting(options) {
|
|
363
|
+
syncMeeting(options: {desync: boolean; syncUrl: string}) {
|
|
273
364
|
/* eslint-disable no-else-return */
|
|
274
365
|
const {desync} = options;
|
|
275
366
|
let {syncUrl} = options;
|
|
@@ -277,15 +368,20 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
277
368
|
/* istanbul ignore else */
|
|
278
369
|
if (desync) {
|
|
279
370
|
// check for existing URL parameters
|
|
280
|
-
syncUrl = syncUrl
|
|
371
|
+
syncUrl = syncUrl
|
|
372
|
+
.concat(syncUrl.split('?')[1] ? '&' : '?')
|
|
373
|
+
.concat(`${LOCUS.SYNCDEBUG}=${desync}`);
|
|
281
374
|
}
|
|
282
375
|
|
|
376
|
+
// @ts-ignore
|
|
283
377
|
return this.request({
|
|
284
378
|
method: HTTP_VERBS.GET,
|
|
285
|
-
uri: syncUrl
|
|
379
|
+
uri: syncUrl,
|
|
286
380
|
}) // TODO: Handle if delta sync failed . Get the full locus object
|
|
287
381
|
.catch((err) => {
|
|
288
|
-
LoggerProxy.logger.error(
|
|
382
|
+
LoggerProxy.logger.error(
|
|
383
|
+
`Meeting:request#syncMeeting --> Error syncing meeting, error ${err}`
|
|
384
|
+
);
|
|
289
385
|
|
|
290
386
|
return err;
|
|
291
387
|
});
|
|
@@ -294,11 +390,11 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
294
390
|
/**
|
|
295
391
|
* Request to get the complete locus object
|
|
296
392
|
* @param {Object} options
|
|
297
|
-
* @param {
|
|
393
|
+
* @param {boolean} options.desync flag to get partial or whole locus object
|
|
298
394
|
* @param {String} options.locusUrl sync url to get ht elatest locus delta
|
|
299
395
|
* @returns {Promise}
|
|
300
396
|
*/
|
|
301
|
-
getFullLocus(options) {
|
|
397
|
+
getFullLocus(options: {desync: boolean; locusUrl: string}) {
|
|
302
398
|
let {locusUrl} = options;
|
|
303
399
|
const {desync} = options;
|
|
304
400
|
|
|
@@ -307,11 +403,14 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
307
403
|
locusUrl += `?${LOCUS.SYNCDEBUG}=${desync}`;
|
|
308
404
|
}
|
|
309
405
|
|
|
406
|
+
// @ts-ignore
|
|
310
407
|
return this.request({
|
|
311
408
|
method: HTTP_VERBS.GET,
|
|
312
|
-
uri: locusUrl
|
|
409
|
+
uri: locusUrl,
|
|
313
410
|
}).catch((err) => {
|
|
314
|
-
LoggerProxy.logger.error(
|
|
411
|
+
LoggerProxy.logger.error(
|
|
412
|
+
`Meeting:request#getFullLocus --> Error getting full locus, error ${err}`
|
|
413
|
+
);
|
|
315
414
|
|
|
316
415
|
return err;
|
|
317
416
|
});
|
|
@@ -330,11 +429,16 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
330
429
|
* @returns {Promise}
|
|
331
430
|
* @private
|
|
332
431
|
*/
|
|
333
|
-
disconnectPhoneAudio({
|
|
432
|
+
private disconnectPhoneAudio({
|
|
334
433
|
locusUrl,
|
|
335
434
|
phoneUrl,
|
|
336
435
|
correlationId,
|
|
337
|
-
selfId
|
|
436
|
+
selfId,
|
|
437
|
+
}: {
|
|
438
|
+
locusUrl: string;
|
|
439
|
+
phoneUrl: string;
|
|
440
|
+
correlationId: string;
|
|
441
|
+
selfId: string;
|
|
338
442
|
}) {
|
|
339
443
|
LoggerProxy.logger.info(
|
|
340
444
|
`Meeting:request#disconnectPhoneAudio --> request phone ${phoneUrl} to leave`,
|
|
@@ -345,15 +449,16 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
345
449
|
const body = {
|
|
346
450
|
device: {
|
|
347
451
|
deviceType: deviceType.PROVISIONAL,
|
|
348
|
-
url: phoneUrl
|
|
452
|
+
url: phoneUrl,
|
|
349
453
|
},
|
|
350
|
-
correlationId
|
|
454
|
+
correlationId,
|
|
351
455
|
};
|
|
352
456
|
|
|
457
|
+
// @ts-ignore
|
|
353
458
|
return this.request({
|
|
354
459
|
method: HTTP_VERBS.PUT,
|
|
355
460
|
uri,
|
|
356
|
-
body
|
|
461
|
+
body,
|
|
357
462
|
}).catch((err) => {
|
|
358
463
|
LoggerProxy.logger.error(
|
|
359
464
|
`Meeting:request#disconnectPhoneAudio --> Error when requesting phone ${phoneUrl} to leave, error ${err}`
|
|
@@ -378,27 +483,32 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
378
483
|
selfId,
|
|
379
484
|
deviceUrl: url,
|
|
380
485
|
resourceId,
|
|
381
|
-
correlationId
|
|
486
|
+
correlationId,
|
|
487
|
+
}: {
|
|
488
|
+
locusUrl: string;
|
|
489
|
+
selfId: string;
|
|
490
|
+
deviceUrl: string;
|
|
491
|
+
resourceId: string;
|
|
492
|
+
correlationId: string;
|
|
382
493
|
}) {
|
|
383
|
-
LoggerProxy.logger.info(
|
|
384
|
-
'Meeting:request#leaveMeeting --> Leaving a meeting',
|
|
385
|
-
correlationId
|
|
386
|
-
);
|
|
494
|
+
LoggerProxy.logger.info('Meeting:request#leaveMeeting --> Leaving a meeting', correlationId);
|
|
387
495
|
|
|
388
496
|
const uri = `${locusUrl}/${PARTICIPANT}/${selfId}/${LEAVE}`;
|
|
389
497
|
const body = {
|
|
390
498
|
device: {
|
|
499
|
+
// @ts-ignore
|
|
391
500
|
deviceType: this.config.meetings.deviceType,
|
|
392
|
-
url
|
|
501
|
+
url,
|
|
393
502
|
},
|
|
394
503
|
usingResource: resourceId || null,
|
|
395
|
-
correlationId
|
|
504
|
+
correlationId,
|
|
396
505
|
};
|
|
397
506
|
|
|
507
|
+
// @ts-ignore
|
|
398
508
|
return this.request({
|
|
399
509
|
method: HTTP_VERBS.PUT,
|
|
400
510
|
uri,
|
|
401
|
-
body
|
|
511
|
+
body,
|
|
402
512
|
});
|
|
403
513
|
}
|
|
404
514
|
|
|
@@ -410,44 +520,22 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
410
520
|
* @param {String} options.correlationId
|
|
411
521
|
* @returns {Promise}
|
|
412
522
|
*/
|
|
413
|
-
acknowledgeMeeting(options) {
|
|
523
|
+
acknowledgeMeeting(options: {locusUrl: string; deviceUrl: string; correlationId: string}) {
|
|
414
524
|
const uri = `${options.locusUrl}/${PARTICIPANT}/${ALERT}`;
|
|
415
525
|
const body = {
|
|
416
526
|
device: {
|
|
527
|
+
// @ts-ignore
|
|
417
528
|
deviceType: this.config.meetings.deviceType,
|
|
418
|
-
url: options.deviceUrl
|
|
529
|
+
url: options.deviceUrl,
|
|
419
530
|
},
|
|
420
|
-
correlationId: options.correlationId
|
|
531
|
+
correlationId: options.correlationId,
|
|
421
532
|
};
|
|
422
533
|
|
|
534
|
+
// @ts-ignore
|
|
423
535
|
return this.request({
|
|
424
536
|
method: HTTP_VERBS.PUT,
|
|
425
537
|
uri,
|
|
426
|
-
body
|
|
427
|
-
});
|
|
428
|
-
}
|
|
429
|
-
|
|
430
|
-
/**
|
|
431
|
-
* Make a network request to acknowledge a meeting
|
|
432
|
-
* @param {Object} options
|
|
433
|
-
* @param {String} options.locusUrl
|
|
434
|
-
* @param {String} options.deviceUrl
|
|
435
|
-
* @param {String} options.id
|
|
436
|
-
* @returns {Promise}
|
|
437
|
-
*/
|
|
438
|
-
recordMeeting(options) {
|
|
439
|
-
const uri = `${options.locusUrl}/${CONTROLS}`;
|
|
440
|
-
const body = {
|
|
441
|
-
record: {
|
|
442
|
-
recording: options.recording,
|
|
443
|
-
paused: options.paused
|
|
444
|
-
}
|
|
445
|
-
};
|
|
446
|
-
|
|
447
|
-
return this.request({
|
|
448
|
-
method: HTTP_VERBS.PATCH,
|
|
449
|
-
uri,
|
|
450
|
-
body
|
|
538
|
+
body,
|
|
451
539
|
});
|
|
452
540
|
}
|
|
453
541
|
|
|
@@ -455,14 +543,15 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
455
543
|
const uri = `${options.locusUrl}/${CONTROLS}`;
|
|
456
544
|
const body = {
|
|
457
545
|
lock: {
|
|
458
|
-
locked: options.lock
|
|
459
|
-
}
|
|
546
|
+
locked: options.lock,
|
|
547
|
+
},
|
|
460
548
|
};
|
|
461
549
|
|
|
550
|
+
// @ts-ignore
|
|
462
551
|
return this.request({
|
|
463
552
|
method: HTTP_VERBS.PATCH,
|
|
464
553
|
uri,
|
|
465
|
-
body
|
|
554
|
+
body,
|
|
466
555
|
});
|
|
467
556
|
}
|
|
468
557
|
|
|
@@ -474,20 +563,22 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
474
563
|
* @param {String} options.reason
|
|
475
564
|
* @returns {Promise}
|
|
476
565
|
*/
|
|
477
|
-
declineMeeting(options) {
|
|
566
|
+
declineMeeting(options: {locusUrl: string; deviceUrl: string; reason: string}) {
|
|
478
567
|
const uri = `${options.locusUrl}/${PARTICIPANT}/${DECLINE}`;
|
|
479
568
|
const body = {
|
|
480
569
|
device: {
|
|
570
|
+
// @ts-ignore
|
|
481
571
|
deviceType: this.config.meetings.deviceType,
|
|
482
|
-
url: options.deviceUrl
|
|
572
|
+
url: options.deviceUrl,
|
|
483
573
|
},
|
|
484
|
-
...(options.reason && {reason: options.reason})
|
|
574
|
+
...(options.reason && {reason: options.reason}),
|
|
485
575
|
};
|
|
486
576
|
|
|
577
|
+
// @ts-ignore
|
|
487
578
|
return this.request({
|
|
488
579
|
method: HTTP_VERBS.PUT,
|
|
489
580
|
uri,
|
|
490
|
-
body
|
|
581
|
+
body,
|
|
491
582
|
});
|
|
492
583
|
}
|
|
493
584
|
|
|
@@ -502,26 +593,38 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
502
593
|
* @param {Boolean} options.preferTranscoding false for multistream (Homer), true for transcoded media (Edonus)
|
|
503
594
|
* @returns {Promise}
|
|
504
595
|
*/
|
|
505
|
-
remoteAudioVideoToggle(
|
|
596
|
+
remoteAudioVideoToggle(
|
|
597
|
+
options:
|
|
598
|
+
| {
|
|
599
|
+
selfId: string;
|
|
600
|
+
locusUrl: string;
|
|
601
|
+
deviceUrl: string;
|
|
602
|
+
resourceId: string;
|
|
603
|
+
localMedias: string;
|
|
604
|
+
}
|
|
605
|
+
| any
|
|
606
|
+
) {
|
|
506
607
|
const uri = `${options.locusUrl}/${PARTICIPANT}/${options.selfId}/${MEDIA}`;
|
|
507
608
|
const body = {
|
|
508
609
|
device: {
|
|
610
|
+
// @ts-ignore
|
|
509
611
|
deviceType: this.config.meetings.deviceType,
|
|
510
|
-
url: options.deviceUrl
|
|
612
|
+
url: options.deviceUrl,
|
|
511
613
|
},
|
|
512
614
|
usingResource: options.resourceId || null,
|
|
513
615
|
correlationId: options.correlationId,
|
|
514
616
|
respOnlySdp: true,
|
|
515
617
|
localMedias: options.localMedias,
|
|
516
618
|
clientMediaPreferences: {
|
|
517
|
-
preferTranscoding: options.preferTranscoding ?? true
|
|
518
|
-
}
|
|
619
|
+
preferTranscoding: options.preferTranscoding ?? true,
|
|
620
|
+
},
|
|
519
621
|
};
|
|
520
622
|
|
|
623
|
+
// @ts-ignore
|
|
521
624
|
return this.request({
|
|
522
625
|
method: HTTP_VERBS.PUT,
|
|
523
626
|
uri,
|
|
524
|
-
body
|
|
627
|
+
body,
|
|
525
628
|
});
|
|
526
629
|
}
|
|
527
630
|
|
|
@@ -535,8 +638,18 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
535
638
|
* @param {String} options.uri floor grant uri
|
|
536
639
|
* @returns {Promise}
|
|
537
640
|
*/
|
|
538
|
-
changeMeetingFloor(
|
|
539
|
-
|
|
641
|
+
changeMeetingFloor(
|
|
642
|
+
options:
|
|
643
|
+
| {
|
|
644
|
+
disposition: string;
|
|
645
|
+
personUrl: string;
|
|
646
|
+
deviceUrl: string;
|
|
647
|
+
resourceId: string;
|
|
648
|
+
uri: string;
|
|
649
|
+
}
|
|
650
|
+
| any
|
|
651
|
+
) {
|
|
652
|
+
let floorReq: any = {disposition: options.disposition};
|
|
540
653
|
|
|
541
654
|
/* istanbul ignore else */
|
|
542
655
|
if (options.disposition === FLOOR_ACTION.GRANTED) {
|
|
@@ -545,31 +658,33 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
545
658
|
url: options.personUrl,
|
|
546
659
|
devices: [
|
|
547
660
|
{
|
|
661
|
+
// @ts-ignore
|
|
548
662
|
deviceType: this.config.meetings.deviceType,
|
|
549
|
-
url: options.deviceUrl
|
|
550
|
-
}
|
|
551
|
-
]
|
|
663
|
+
url: options.deviceUrl,
|
|
664
|
+
},
|
|
665
|
+
],
|
|
552
666
|
},
|
|
553
667
|
disposition: options.disposition,
|
|
554
668
|
requester: {
|
|
555
|
-
url: options.personUrl
|
|
556
|
-
}
|
|
669
|
+
url: options.personUrl,
|
|
670
|
+
},
|
|
557
671
|
};
|
|
558
672
|
}
|
|
559
673
|
|
|
560
|
-
const body = {
|
|
674
|
+
const body: any = {
|
|
561
675
|
floor: floorReq,
|
|
562
|
-
resourceUrl: options.resourceUrl
|
|
676
|
+
resourceUrl: options.resourceUrl,
|
|
563
677
|
};
|
|
564
678
|
|
|
565
679
|
if (options?.resourceToken) {
|
|
566
680
|
body.resourceToken = options?.resourceToken;
|
|
567
681
|
}
|
|
568
682
|
|
|
683
|
+
// @ts-ignore
|
|
569
684
|
return this.request({
|
|
570
685
|
uri: options.uri,
|
|
571
686
|
method: HTTP_VERBS.PUT,
|
|
572
|
-
body
|
|
687
|
+
body,
|
|
573
688
|
});
|
|
574
689
|
}
|
|
575
690
|
|
|
@@ -581,7 +696,8 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
581
696
|
* @param {String} options.tones a string of one or more DTMF tones to send
|
|
582
697
|
* @returns {Promise}
|
|
583
698
|
*/
|
|
584
|
-
sendDTMF({locusUrl, deviceUrl, tones}) {
|
|
699
|
+
sendDTMF({locusUrl, deviceUrl, tones}: {locusUrl: string; deviceUrl: string; tones: string}) {
|
|
700
|
+
// @ts-ignore
|
|
585
701
|
return this.request({
|
|
586
702
|
method: HTTP_VERBS.POST,
|
|
587
703
|
uri: `${locusUrl}/${SEND_DTMF_ENDPOINT}`,
|
|
@@ -589,9 +705,9 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
589
705
|
deviceUrl,
|
|
590
706
|
dtmf: {
|
|
591
707
|
correlationId: uuid.v4(),
|
|
592
|
-
tones
|
|
593
|
-
}
|
|
594
|
-
}
|
|
708
|
+
tones,
|
|
709
|
+
},
|
|
710
|
+
},
|
|
595
711
|
});
|
|
596
712
|
}
|
|
597
713
|
|
|
@@ -614,29 +730,55 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
614
730
|
deviceUrl,
|
|
615
731
|
layoutType,
|
|
616
732
|
main,
|
|
617
|
-
content
|
|
733
|
+
content,
|
|
734
|
+
}: {
|
|
735
|
+
locusUrl: string;
|
|
736
|
+
deviceUrl: string;
|
|
737
|
+
layoutType: string;
|
|
738
|
+
main: {
|
|
739
|
+
width: number;
|
|
740
|
+
height: number;
|
|
741
|
+
};
|
|
742
|
+
content: {
|
|
743
|
+
width: number;
|
|
744
|
+
height: number;
|
|
745
|
+
};
|
|
618
746
|
}) {
|
|
619
747
|
// send main/content renderInfo only if both width and height are specified
|
|
620
748
|
if (main && (!main.width || !main.height)) {
|
|
621
|
-
return Promise.reject(
|
|
749
|
+
return Promise.reject(
|
|
750
|
+
new Error(
|
|
751
|
+
`Both width and height must be specified. One of them is missing for main: ${JSON.stringify(
|
|
752
|
+
main
|
|
753
|
+
)}`
|
|
754
|
+
)
|
|
755
|
+
);
|
|
622
756
|
}
|
|
623
757
|
|
|
624
758
|
if (content && (!content.width || !content.height)) {
|
|
625
|
-
return Promise.reject(
|
|
759
|
+
return Promise.reject(
|
|
760
|
+
new Error(
|
|
761
|
+
`Both width and height must be specified. One of them is missing for content: ${JSON.stringify(
|
|
762
|
+
content
|
|
763
|
+
)}`
|
|
764
|
+
)
|
|
765
|
+
);
|
|
626
766
|
}
|
|
627
767
|
|
|
628
|
-
const renderInfoMain =
|
|
629
|
-
const renderInfoContent =
|
|
768
|
+
const renderInfoMain = main ? {width: main.width, height: main.height} : undefined;
|
|
769
|
+
const renderInfoContent = content ? {width: content.width, height: content.height} : undefined;
|
|
630
770
|
|
|
631
|
-
const layoutParams =
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
771
|
+
const layoutParams =
|
|
772
|
+
renderInfoMain || renderInfoContent
|
|
773
|
+
? {
|
|
774
|
+
renderInfo: {
|
|
775
|
+
main: renderInfoMain,
|
|
776
|
+
content: renderInfoContent,
|
|
777
|
+
},
|
|
778
|
+
}
|
|
779
|
+
: undefined;
|
|
639
780
|
|
|
781
|
+
// @ts-ignore
|
|
640
782
|
return this.request({
|
|
641
783
|
method: HTTP_VERBS.PUT,
|
|
642
784
|
uri: `${locusUrl}/${CONTROLS}`,
|
|
@@ -644,9 +786,9 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
644
786
|
layout: {
|
|
645
787
|
deviceUrl,
|
|
646
788
|
type: layoutType,
|
|
647
|
-
layoutParams
|
|
648
|
-
}
|
|
649
|
-
}
|
|
789
|
+
layoutParams,
|
|
790
|
+
},
|
|
791
|
+
},
|
|
650
792
|
});
|
|
651
793
|
}
|
|
652
794
|
|
|
@@ -656,14 +798,13 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
656
798
|
* @param {Url} options.locusUrl
|
|
657
799
|
* @returns {Promise}
|
|
658
800
|
*/
|
|
659
|
-
endMeetingForAll({
|
|
660
|
-
locusUrl,
|
|
661
|
-
}) {
|
|
801
|
+
endMeetingForAll({locusUrl}: {locusUrl: string}) {
|
|
662
802
|
const uri = `${locusUrl}/${END}`;
|
|
663
803
|
|
|
804
|
+
// @ts-ignore
|
|
664
805
|
return this.request({
|
|
665
806
|
method: HTTP_VERBS.POST,
|
|
666
|
-
uri
|
|
807
|
+
uri,
|
|
667
808
|
});
|
|
668
809
|
}
|
|
669
810
|
|
|
@@ -673,12 +814,55 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
673
814
|
* @param {Url} options.keepAliveUrl
|
|
674
815
|
* @returns {Promise}
|
|
675
816
|
*/
|
|
676
|
-
keepAlive({
|
|
677
|
-
|
|
678
|
-
}) {
|
|
817
|
+
keepAlive({keepAliveUrl}: {keepAliveUrl: string}) {
|
|
818
|
+
// @ts-ignore
|
|
679
819
|
return this.request({
|
|
680
820
|
method: HTTP_VERBS.GET,
|
|
681
|
-
uri: keepAliveUrl
|
|
821
|
+
uri: keepAliveUrl,
|
|
822
|
+
});
|
|
823
|
+
}
|
|
824
|
+
|
|
825
|
+
/**
|
|
826
|
+
* Make a network request to send a reaction.
|
|
827
|
+
* @param {Object} options
|
|
828
|
+
* @param {Url} options.reactionChannelUrl
|
|
829
|
+
* @param {Reaction} options.reaction
|
|
830
|
+
* @param {string} options.senderID
|
|
831
|
+
* @returns {Promise}
|
|
832
|
+
*/
|
|
833
|
+
sendReaction({reactionChannelUrl, reaction, participantId}: SendReactionOptions) {
|
|
834
|
+
const uri = reactionChannelUrl;
|
|
835
|
+
|
|
836
|
+
// @ts-ignore
|
|
837
|
+
return this.request({
|
|
838
|
+
method: HTTP_VERBS.POST,
|
|
839
|
+
uri,
|
|
840
|
+
body: {
|
|
841
|
+
sender: {participantId},
|
|
842
|
+
reaction,
|
|
843
|
+
},
|
|
844
|
+
});
|
|
845
|
+
}
|
|
846
|
+
|
|
847
|
+
/**
|
|
848
|
+
* Make a network request to enable or disable reactions.
|
|
849
|
+
* @param {boolean} options.enable - determines if we need to enable or disable.
|
|
850
|
+
* @param {locusUrl} options.locusUrl
|
|
851
|
+
* @returns {Promise}
|
|
852
|
+
*/
|
|
853
|
+
toggleReactions({enable, locusUrl, requestingParticipantId}: ToggleReactionsOptions) {
|
|
854
|
+
const uri = `${locusUrl}/${CONTROLS}`;
|
|
855
|
+
|
|
856
|
+
// @ts-ignore
|
|
857
|
+
return this.request({
|
|
858
|
+
method: HTTP_VERBS.PUT,
|
|
859
|
+
uri,
|
|
860
|
+
body: {
|
|
861
|
+
reactions: {
|
|
862
|
+
enabled: enable,
|
|
863
|
+
},
|
|
864
|
+
requestingParticipantId,
|
|
865
|
+
},
|
|
682
866
|
});
|
|
683
867
|
}
|
|
684
868
|
}
|