@webex/plugin-meetings 3.0.0-beta.21 → 3.0.0-beta.211
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 +45 -7
- package/dist/annotation/annotation.types.js +7 -0
- package/dist/annotation/annotation.types.js.map +1 -0
- package/dist/annotation/constants.js +49 -0
- package/dist/annotation/constants.js.map +1 -0
- package/dist/annotation/index.js +342 -0
- package/dist/annotation/index.js.map +1 -0
- package/dist/breakouts/breakout.js +114 -14
- package/dist/breakouts/breakout.js.map +1 -1
- package/dist/breakouts/edit-lock-error.js +52 -0
- package/dist/breakouts/edit-lock-error.js.map +1 -0
- package/dist/breakouts/events.js +45 -0
- package/dist/breakouts/events.js.map +1 -0
- package/dist/breakouts/index.js +841 -19
- package/dist/breakouts/index.js.map +1 -1
- package/dist/breakouts/request.js +78 -0
- package/dist/breakouts/request.js.map +1 -0
- package/dist/breakouts/utils.js +67 -0
- package/dist/breakouts/utils.js.map +1 -0
- package/dist/common/errors/webex-errors.js +3 -2
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/logs/logger-proxy.js +1 -1
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/queue.js +24 -9
- package/dist/common/queue.js.map +1 -1
- package/dist/config.js +3 -8
- package/dist/config.js.map +1 -1
- package/dist/constants.js +179 -30
- 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 +27 -0
- package/dist/controls-options-manager/enums.js.map +1 -0
- package/dist/controls-options-manager/index.js +297 -0
- package/dist/controls-options-manager/index.js.map +1 -0
- package/dist/controls-options-manager/types.js +7 -0
- package/dist/controls-options-manager/types.js.map +1 -0
- package/dist/controls-options-manager/util.js +319 -0
- package/dist/controls-options-manager/util.js.map +1 -0
- package/dist/index.js +106 -1
- package/dist/index.js.map +1 -1
- package/dist/interpretation/collection.js +23 -0
- package/dist/interpretation/collection.js.map +1 -0
- package/dist/interpretation/index.js +366 -0
- package/dist/interpretation/index.js.map +1 -0
- package/dist/interpretation/siLanguage.js +25 -0
- package/dist/interpretation/siLanguage.js.map +1 -0
- package/dist/locus-info/controlsUtils.js +91 -2
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/index.js +359 -64
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +7 -1
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +43 -1
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +219 -63
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +89 -14
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +48 -135
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +29 -90
- package/dist/media/properties.js.map +1 -1
- package/dist/mediaQualityMetrics/config.js +505 -493
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +90 -2
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +2770 -2547
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.js +291 -0
- package/dist/meeting/locusMediaRequest.js.map +1 -0
- package/dist/meeting/muteState.js +229 -124
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +199 -193
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/util.js +532 -414
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/index.js +48 -7
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +171 -51
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/utilv2.js +20 -5
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +22 -0
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +357 -66
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/meetings.types.js +7 -0
- package/dist/meetings/meetings.types.js.map +1 -0
- package/dist/meetings/request.js +2 -0
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +88 -1
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +49 -0
- package/dist/member/index.js.map +1 -1
- package/dist/member/types.js +25 -0
- package/dist/member/types.js.map +1 -0
- package/dist/member/util.js +121 -25
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +10 -0
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +86 -5
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +106 -38
- package/dist/members/request.js.map +1 -1
- package/dist/members/types.js +15 -0
- package/dist/members/types.js.map +1 -0
- package/dist/members/util.js +316 -233
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.js +3 -5
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +1 -468
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +238 -49
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/receiveSlot.js +49 -16
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/multistream/receiveSlotManager.js +52 -34
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +44 -18
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.js +60 -3
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +173 -59
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/networkQualityMonitor/index.js +4 -2
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/reachability/index.js +72 -27
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +12 -5
- package/dist/reachability/request.js.map +1 -1
- package/dist/reconnection-manager/index.js +196 -155
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/index.js +21 -2
- package/dist/recording-controller/index.js.map +1 -1
- package/dist/recording-controller/util.js +9 -8
- package/dist/recording-controller/util.js.map +1 -1
- package/dist/roap/index.js +21 -29
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +110 -89
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +93 -36
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/rtcMetrics/constants.js +12 -0
- package/dist/rtcMetrics/constants.js.map +1 -0
- package/dist/rtcMetrics/index.js +117 -0
- package/dist/rtcMetrics/index.js.map +1 -0
- package/dist/statsAnalyzer/global.js +1 -93
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.js +326 -311
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +90 -53
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/types/annotation/annotation.types.d.ts +42 -0
- package/dist/types/annotation/constants.d.ts +31 -0
- package/dist/types/annotation/index.d.ts +117 -0
- package/dist/types/breakouts/breakout.d.ts +8 -0
- package/dist/types/breakouts/collection.d.ts +5 -0
- package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
- package/dist/types/breakouts/events.d.ts +8 -0
- package/dist/types/breakouts/index.d.ts +5 -0
- package/dist/types/breakouts/request.d.ts +22 -0
- package/dist/types/breakouts/utils.d.ts +15 -0
- package/dist/types/common/browser-detection.d.ts +9 -0
- package/dist/types/common/collection.d.ts +48 -0
- package/dist/types/common/config.d.ts +2 -0
- package/dist/types/common/errors/captcha-error.d.ts +15 -0
- package/dist/types/common/errors/intent-to-join.d.ts +16 -0
- package/dist/types/common/errors/join-meeting.d.ts +17 -0
- package/dist/types/common/errors/media.d.ts +15 -0
- package/dist/types/common/errors/parameter.d.ts +15 -0
- package/dist/types/common/errors/password-error.d.ts +15 -0
- package/dist/types/common/errors/permission.d.ts +14 -0
- package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
- package/dist/types/common/errors/reconnection.d.ts +15 -0
- package/dist/types/common/errors/stats.d.ts +15 -0
- package/dist/types/common/errors/webex-errors.d.ts +69 -0
- package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
- package/dist/types/common/events/events-scope.d.ts +17 -0
- package/dist/types/common/events/events.d.ts +12 -0
- package/dist/types/common/events/trigger-proxy.d.ts +2 -0
- package/dist/types/common/events/util.d.ts +2 -0
- package/dist/types/common/logs/logger-config.d.ts +2 -0
- package/dist/types/common/logs/logger-proxy.d.ts +2 -0
- package/dist/types/common/logs/request.d.ts +34 -0
- package/dist/types/common/queue.d.ts +34 -0
- package/dist/types/config.d.ts +72 -0
- package/dist/types/constants.d.ts +1020 -0
- package/dist/types/controls-options-manager/constants.d.ts +4 -0
- package/dist/types/controls-options-manager/enums.d.ts +15 -0
- package/dist/types/controls-options-manager/index.d.ts +136 -0
- package/dist/types/controls-options-manager/types.d.ts +43 -0
- package/dist/types/controls-options-manager/util.d.ts +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/interpretation/collection.d.ts +5 -0
- package/dist/types/interpretation/index.d.ts +5 -0
- package/dist/types/interpretation/siLanguage.d.ts +5 -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 +322 -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 +271 -0
- package/dist/types/locus-info/selfUtils.d.ts +2 -0
- package/dist/types/media/index.d.ts +34 -0
- package/dist/types/media/properties.d.ts +93 -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 +163 -0
- package/dist/types/meeting/index.d.ts +1482 -0
- package/dist/types/meeting/locusMediaRequest.d.ts +72 -0
- package/dist/types/meeting/muteState.d.ts +184 -0
- package/dist/types/meeting/request.d.ts +257 -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 +79 -0
- package/dist/types/meeting-info/collection.d.ts +20 -0
- package/dist/types/meeting-info/index.d.ts +62 -0
- package/dist/types/meeting-info/meeting-info-v2.d.ts +122 -0
- package/dist/types/meeting-info/request.d.ts +22 -0
- package/dist/types/meeting-info/util.d.ts +2 -0
- package/dist/types/meeting-info/utilv2.d.ts +2 -0
- package/dist/types/meetings/collection.d.ts +31 -0
- package/dist/types/meetings/index.d.ts +367 -0
- package/dist/types/meetings/meetings.types.d.ts +4 -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 +159 -0
- package/dist/types/member/types.d.ts +32 -0
- package/dist/types/member/util.d.ts +2 -0
- package/dist/types/members/collection.d.ts +29 -0
- package/dist/types/members/index.d.ts +353 -0
- package/dist/types/members/request.d.ts +114 -0
- package/dist/types/members/types.d.ts +24 -0
- package/dist/types/members/util.d.ts +210 -0
- package/dist/types/metrics/constants.d.ts +55 -0
- package/dist/types/metrics/index.d.ts +45 -0
- package/dist/types/multistream/mediaRequestManager.d.ts +118 -0
- package/dist/types/multistream/receiveSlot.d.ts +68 -0
- package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
- package/dist/types/multistream/remoteMedia.d.ts +72 -0
- package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
- package/dist/types/multistream/remoteMediaManager.d.ts +277 -0
- package/dist/types/networkQualityMonitor/index.d.ts +70 -0
- package/dist/types/personal-meeting-room/index.d.ts +47 -0
- package/dist/types/personal-meeting-room/request.d.ts +14 -0
- package/dist/types/personal-meeting-room/util.d.ts +2 -0
- package/dist/types/reachability/index.d.ts +152 -0
- package/dist/types/reachability/request.d.ts +37 -0
- package/dist/types/reactions/constants.d.ts +3 -0
- package/dist/types/reactions/reactions.d.ts +4 -0
- package/dist/types/reactions/reactions.type.d.ts +52 -0
- package/dist/types/reconnection-manager/index.d.ts +126 -0
- package/dist/types/recording-controller/enums.d.ts +7 -0
- package/dist/types/recording-controller/index.d.ts +207 -0
- package/dist/types/recording-controller/util.d.ts +14 -0
- package/dist/types/roap/index.d.ts +77 -0
- package/dist/types/roap/request.d.ts +36 -0
- package/dist/types/roap/turnDiscovery.d.ts +91 -0
- package/dist/types/rtcMetrics/constants.d.ts +4 -0
- package/dist/types/rtcMetrics/index.d.ts +46 -0
- package/dist/types/statsAnalyzer/global.d.ts +36 -0
- package/dist/types/statsAnalyzer/index.d.ts +200 -0
- package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
- package/dist/types/transcription/index.d.ts +64 -0
- package/package.json +23 -20
- 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 +44 -14
- package/src/breakouts/breakout.ts +87 -9
- package/src/breakouts/edit-lock-error.ts +25 -0
- package/src/breakouts/events.ts +56 -0
- package/src/breakouts/index.ts +710 -10
- package/src/breakouts/request.ts +55 -0
- package/src/breakouts/utils.ts +57 -0
- package/src/common/errors/webex-errors.ts +6 -2
- package/src/common/logs/logger-proxy.ts +1 -1
- package/src/common/queue.ts +22 -8
- package/src/config.ts +2 -7
- package/src/constants.ts +165 -21
- package/src/controls-options-manager/constants.ts +5 -0
- package/src/controls-options-manager/enums.ts +18 -0
- package/src/controls-options-manager/index.ts +278 -0
- package/src/controls-options-manager/types.ts +59 -0
- package/src/controls-options-manager/util.ts +300 -0
- package/src/index.ts +39 -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 +108 -0
- package/src/locus-info/index.ts +383 -61
- package/src/locus-info/infoUtils.ts +10 -2
- package/src/locus-info/mediaSharesUtils.ts +48 -0
- package/src/locus-info/parser.ts +224 -39
- package/src/locus-info/selfUtils.ts +81 -5
- package/src/media/index.ts +87 -140
- package/src/media/properties.ts +49 -90
- package/src/mediaQualityMetrics/config.ts +379 -377
- package/src/meeting/in-meeting-actions.ts +179 -3
- package/src/meeting/index.ts +2099 -2083
- package/src/meeting/locusMediaRequest.ts +311 -0
- package/src/meeting/muteState.ts +228 -132
- package/src/meeting/request.ts +105 -115
- package/src/meeting/util.ts +511 -397
- package/src/meeting-info/index.ts +54 -8
- package/src/meeting-info/meeting-info-v2.ts +148 -14
- package/src/meeting-info/utilv2.ts +13 -3
- package/src/meetings/collection.ts +20 -0
- package/src/meetings/index.ts +392 -84
- package/src/meetings/meetings.types.ts +12 -0
- package/src/meetings/request.ts +2 -0
- package/src/meetings/util.ts +103 -4
- package/src/member/index.ts +49 -0
- package/src/member/types.ts +38 -0
- package/src/member/util.ts +127 -25
- package/src/members/collection.ts +8 -0
- package/src/members/index.ts +107 -6
- package/src/members/request.ts +97 -17
- package/src/members/types.ts +28 -0
- package/src/members/util.ts +319 -240
- package/src/metrics/constants.ts +2 -4
- package/src/metrics/index.ts +1 -490
- package/src/multistream/mediaRequestManager.ts +289 -79
- package/src/multistream/receiveSlot.ts +55 -18
- package/src/multistream/receiveSlotManager.ts +46 -24
- package/src/multistream/remoteMedia.ts +27 -2
- package/src/multistream/remoteMediaGroup.ts +59 -0
- package/src/multistream/remoteMediaManager.ts +113 -32
- package/src/networkQualityMonitor/index.ts +6 -6
- package/src/reachability/index.ts +62 -15
- package/src/reachability/request.ts +10 -5
- package/src/reconnection-manager/index.ts +68 -43
- package/src/recording-controller/index.ts +20 -3
- package/src/recording-controller/util.ts +26 -9
- package/src/roap/index.ts +21 -30
- package/src/roap/request.ts +101 -95
- package/src/roap/turnDiscovery.ts +47 -25
- package/src/rtcMetrics/constants.ts +3 -0
- package/src/rtcMetrics/index.ts +100 -0
- package/src/statsAnalyzer/global.ts +1 -94
- package/src/statsAnalyzer/index.ts +376 -386
- package/src/statsAnalyzer/mqaUtil.ts +100 -99
- package/test/integration/spec/converged-space-meetings.js +233 -0
- package/test/integration/spec/journey.js +336 -259
- 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 +142 -24
- 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 +1545 -48
- 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 +287 -0
- package/test/unit/spec/controls-options-manager/util.js +582 -0
- package/test/unit/spec/fixture/locus.js +1 -0
- package/test/unit/spec/interpretation/collection.ts +15 -0
- package/test/unit/spec/interpretation/index.ts +589 -0
- package/test/unit/spec/interpretation/siLanguage.ts +28 -0
- package/test/unit/spec/locus-info/controlsUtils.js +316 -43
- package/test/unit/spec/locus-info/index.js +1169 -36
- package/test/unit/spec/locus-info/infoUtils.js +37 -15
- package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
- package/test/unit/spec/locus-info/parser.js +62 -22
- package/test/unit/spec/locus-info/selfConstant.js +27 -4
- package/test/unit/spec/locus-info/selfUtils.js +208 -17
- package/test/unit/spec/media/index.ts +138 -28
- package/test/unit/spec/meeting/in-meeting-actions.ts +89 -3
- package/test/unit/spec/meeting/index.js +3573 -1663
- package/test/unit/spec/meeting/locusMediaRequest.ts +438 -0
- package/test/unit/spec/meeting/muteState.js +370 -208
- package/test/unit/spec/meeting/request.js +339 -44
- package/test/unit/spec/meeting/utils.js +456 -53
- package/test/unit/spec/meeting-info/index.js +181 -0
- package/test/unit/spec/meeting-info/meetinginfov2.js +383 -5
- package/test/unit/spec/meeting-info/utilv2.js +21 -0
- package/test/unit/spec/meetings/collection.js +14 -0
- package/test/unit/spec/meetings/index.js +867 -125
- package/test/unit/spec/meetings/utils.js +206 -2
- package/test/unit/spec/member/index.js +58 -4
- package/test/unit/spec/member/util.js +479 -35
- package/test/unit/spec/members/index.js +319 -1
- package/test/unit/spec/members/request.js +206 -27
- package/test/unit/spec/members/utils.js +184 -0
- package/test/unit/spec/metrics/index.js +1 -50
- package/test/unit/spec/multistream/mediaRequestManager.ts +803 -162
- package/test/unit/spec/multistream/receiveSlot.ts +72 -13
- package/test/unit/spec/multistream/receiveSlotManager.ts +58 -28
- package/test/unit/spec/multistream/remoteMedia.ts +30 -0
- package/test/unit/spec/multistream/remoteMediaGroup.ts +266 -0
- package/test/unit/spec/multistream/remoteMediaManager.ts +318 -0
- package/test/unit/spec/networkQualityMonitor/index.js +4 -4
- package/test/unit/spec/reachability/index.ts +125 -8
- package/test/unit/spec/reachability/request.js +66 -0
- package/test/unit/spec/reconnection-manager/index.js +59 -6
- package/test/unit/spec/recording-controller/index.js +294 -218
- package/test/unit/spec/recording-controller/util.js +223 -96
- package/test/unit/spec/roap/index.ts +26 -51
- package/test/unit/spec/roap/request.ts +196 -85
- package/test/unit/spec/roap/turnDiscovery.ts +30 -7
- package/test/unit/spec/rtcMetrics/index.ts +60 -0
- package/test/unit/spec/stats-analyzer/index.js +92 -41
- 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 +6 -3
- package/dist/meeting/effectsState.js +0 -262
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/metrics/config.js +0 -299
- package/dist/metrics/config.js.map +0 -1
- package/dist/multistream/multistreamMedia.js +0 -110
- package/dist/multistream/multistreamMedia.js.map +0 -1
- package/src/index.js +0 -16
- package/src/meeting/effectsState.ts +0 -211
- package/src/metrics/config.ts +0 -495
- package/src/multistream/multistreamMedia.ts +0 -97
- package/test/unit/spec/meeting/effectsState.js +0 -285
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
import uuid from 'uuid';
|
|
2
|
+
// eslint-disable-next-line import/no-extraneous-dependencies
|
|
3
|
+
import {WebexPlugin, config} from '@webex/webex-core';
|
|
4
|
+
import TriggerProxy from '../common/events/trigger-proxy';
|
|
5
|
+
|
|
6
|
+
import {
|
|
7
|
+
EVENT_TRIGGERS,
|
|
8
|
+
ANNOTATION_RELAY_TYPES,
|
|
9
|
+
ANNOTATION,
|
|
10
|
+
ANNOTATION_REQUEST_TYPE,
|
|
11
|
+
ANNOTATION_ACTION_TYPE,
|
|
12
|
+
ANNOTATION_RESOURCE_TYPE,
|
|
13
|
+
} from './constants';
|
|
14
|
+
|
|
15
|
+
import {StrokeData, RequestData, IAnnotationChannel, CommandRequestBody} from './annotation.types';
|
|
16
|
+
import {HTTP_VERBS} from '../constants';
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* @description Annotation to handle LLM and Mercury message and locus API
|
|
20
|
+
* @class
|
|
21
|
+
*/
|
|
22
|
+
class AnnotationChannel extends WebexPlugin implements IAnnotationChannel {
|
|
23
|
+
namespace = ANNOTATION;
|
|
24
|
+
|
|
25
|
+
private seqNum: number;
|
|
26
|
+
|
|
27
|
+
hasSubscribedToEvents: boolean;
|
|
28
|
+
|
|
29
|
+
approvalUrl: string;
|
|
30
|
+
locusUrl: string;
|
|
31
|
+
deviceUrl: string;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Initializes annotation module
|
|
35
|
+
*/
|
|
36
|
+
constructor(...args) {
|
|
37
|
+
super(...args);
|
|
38
|
+
this.seqNum = 1;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Process Stroke Data
|
|
43
|
+
* @param {object} data
|
|
44
|
+
* @returns {void}
|
|
45
|
+
*/
|
|
46
|
+
private processStrokeMessage(data) {
|
|
47
|
+
const {request} = data;
|
|
48
|
+
this.decryptContent(request.value.encryptionKeyUrl, request.value.content).then(
|
|
49
|
+
(decryptedContent) => {
|
|
50
|
+
request.value.content = decryptedContent;
|
|
51
|
+
TriggerProxy.trigger(
|
|
52
|
+
this,
|
|
53
|
+
{
|
|
54
|
+
file: 'annotation',
|
|
55
|
+
function: 'processStrokeMessage',
|
|
56
|
+
},
|
|
57
|
+
EVENT_TRIGGERS.ANNOTATION_STROKE_DATA,
|
|
58
|
+
{
|
|
59
|
+
payload: data,
|
|
60
|
+
}
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/** bind all events from mercury
|
|
67
|
+
* @param {Object} e
|
|
68
|
+
* @returns {undefined}
|
|
69
|
+
*/
|
|
70
|
+
private eventCommandProcessor(e) {
|
|
71
|
+
if (
|
|
72
|
+
e?.data?.eventType === 'locus.approval_request' &&
|
|
73
|
+
e?.data?.approval?.resourceType === ANNOTATION_RESOURCE_TYPE &&
|
|
74
|
+
e?.data?.approval?.actionType
|
|
75
|
+
) {
|
|
76
|
+
TriggerProxy.trigger(
|
|
77
|
+
this,
|
|
78
|
+
{
|
|
79
|
+
file: 'annotation',
|
|
80
|
+
function: 'approval_request',
|
|
81
|
+
},
|
|
82
|
+
EVENT_TRIGGERS.ANNOTATION_COMMAND,
|
|
83
|
+
{
|
|
84
|
+
type: e.data.approval.actionType,
|
|
85
|
+
payload: e.data.approval,
|
|
86
|
+
}
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/** bind all events from llm
|
|
92
|
+
* @param {Object} e
|
|
93
|
+
* @returns {undefined}
|
|
94
|
+
*/
|
|
95
|
+
private eventDataProcessor(e) {
|
|
96
|
+
switch (e?.data?.relayType) {
|
|
97
|
+
case ANNOTATION_RELAY_TYPES.ANNOTATION_CLIENT:
|
|
98
|
+
this.processStrokeMessage(e.data);
|
|
99
|
+
break;
|
|
100
|
+
default:
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Listen to websocket messages
|
|
107
|
+
* @returns {undefined}
|
|
108
|
+
*/
|
|
109
|
+
private listenToEvents() {
|
|
110
|
+
if (!this.hasSubscribedToEvents) {
|
|
111
|
+
// @ts-ignore
|
|
112
|
+
this.webex.internal.mercury.on(
|
|
113
|
+
'event:locus.approval_request',
|
|
114
|
+
this.eventCommandProcessor,
|
|
115
|
+
this
|
|
116
|
+
);
|
|
117
|
+
// @ts-ignore
|
|
118
|
+
this.webex.internal.llm.on('event:relay.event', this.eventDataProcessor, this);
|
|
119
|
+
this.hasSubscribedToEvents = true;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* set locusUrl
|
|
125
|
+
* @param {string} locusUrl
|
|
126
|
+
* @returns {void}
|
|
127
|
+
*/
|
|
128
|
+
public locusUrlUpdate(locusUrl: string) {
|
|
129
|
+
this.locusUrl = locusUrl;
|
|
130
|
+
this.listenToEvents();
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* set approved url
|
|
135
|
+
* @param {string} approvalUrl
|
|
136
|
+
* @returns {void}
|
|
137
|
+
*/
|
|
138
|
+
public approvalUrlUpdate(approvalUrl: string) {
|
|
139
|
+
this.approvalUrl = approvalUrl;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* accept request
|
|
144
|
+
* @param {object} approval
|
|
145
|
+
* @returns {Promise}
|
|
146
|
+
*/
|
|
147
|
+
public acceptRequest(approval) {
|
|
148
|
+
// @ts-ignore
|
|
149
|
+
return this.request({
|
|
150
|
+
method: HTTP_VERBS.PUT,
|
|
151
|
+
url: approval.url,
|
|
152
|
+
body: {
|
|
153
|
+
resourceType: ANNOTATION_RESOURCE_TYPE,
|
|
154
|
+
actionType: ANNOTATION_ACTION_TYPE.ACCEPTED,
|
|
155
|
+
},
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* presenter declined request annotation
|
|
161
|
+
* @param {approval} approval
|
|
162
|
+
* @returns {Promise}
|
|
163
|
+
*/
|
|
164
|
+
public declineRequest(approval) {
|
|
165
|
+
// @ts-ignore
|
|
166
|
+
return this.request({
|
|
167
|
+
method: HTTP_VERBS.PUT,
|
|
168
|
+
url: approval.url,
|
|
169
|
+
body: {
|
|
170
|
+
resourceType: ANNOTATION_RESOURCE_TYPE,
|
|
171
|
+
actionType: ANNOTATION_ACTION_TYPE.DECLINED,
|
|
172
|
+
},
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* request approved annotation
|
|
178
|
+
* @param {RequestData} requestData
|
|
179
|
+
* @returns {Promise}
|
|
180
|
+
*/
|
|
181
|
+
public approveAnnotation(requestData: RequestData) {
|
|
182
|
+
return this.sendAnnotationAction(ANNOTATION_ACTION_TYPE.REQUESTED, requestData);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* cancel approved annotation
|
|
187
|
+
* @param {object} requestData
|
|
188
|
+
* @param {object} approval
|
|
189
|
+
* @returns {Promise}
|
|
190
|
+
*/
|
|
191
|
+
public cancelApproveAnnotation(requestData: RequestData, approval) {
|
|
192
|
+
const body: CommandRequestBody = {
|
|
193
|
+
actionType: ANNOTATION_ACTION_TYPE.CANCELED,
|
|
194
|
+
resourceType: 'AnnotationOnShare',
|
|
195
|
+
shareInstanceId: requestData.shareInstanceId,
|
|
196
|
+
};
|
|
197
|
+
|
|
198
|
+
// @ts-ignore
|
|
199
|
+
return this.request({
|
|
200
|
+
method: HTTP_VERBS.PUT,
|
|
201
|
+
url: `${approval.url}`,
|
|
202
|
+
body,
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* close annotation
|
|
208
|
+
* @param {object} requestData
|
|
209
|
+
* @returns {Promise}
|
|
210
|
+
*/
|
|
211
|
+
public closeAnnotation(requestData: RequestData) {
|
|
212
|
+
return this.sendAnnotationAction(ANNOTATION_ACTION_TYPE.CLOSED, requestData);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* send annotation command
|
|
217
|
+
* @param {ANNOTATION_ACTION_TYPE} actionType
|
|
218
|
+
* @param {RequestData} requestData
|
|
219
|
+
* @returns {Promise}
|
|
220
|
+
*/
|
|
221
|
+
private sendAnnotationAction = async (
|
|
222
|
+
actionType: ANNOTATION_ACTION_TYPE,
|
|
223
|
+
requestData: RequestData
|
|
224
|
+
): Promise<void> => {
|
|
225
|
+
const body: CommandRequestBody = {
|
|
226
|
+
actionType,
|
|
227
|
+
resourceType: 'AnnotationOnShare',
|
|
228
|
+
shareInstanceId: requestData.shareInstanceId,
|
|
229
|
+
};
|
|
230
|
+
if (requestData?.toUserId) {
|
|
231
|
+
body.receivers = [{participantId: requestData.toUserId, deviceUrl: requestData.toDeviceUrl}];
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
// @ts-ignore
|
|
235
|
+
return this.request({
|
|
236
|
+
method: HTTP_VERBS.POST,
|
|
237
|
+
url: `${this.approvalUrl}`,
|
|
238
|
+
body,
|
|
239
|
+
});
|
|
240
|
+
};
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* decrypt data
|
|
244
|
+
* @param {string} encryptionKeyUrl
|
|
245
|
+
* @param {string} content encrypted content
|
|
246
|
+
* @returns {string} decrypted content
|
|
247
|
+
*/
|
|
248
|
+
private decryptContent = (encryptionKeyUrl: string, content: string): Promise<any> => {
|
|
249
|
+
// @ts-ignore
|
|
250
|
+
return this.webex.internal.encryption.decryptText(encryptionKeyUrl, content).then((res) => {
|
|
251
|
+
return res;
|
|
252
|
+
});
|
|
253
|
+
};
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* encrypt data
|
|
257
|
+
* @param {string} encryptionKeyUrl
|
|
258
|
+
* @param {string} content original content
|
|
259
|
+
* @returns {string} encrypted content
|
|
260
|
+
*/
|
|
261
|
+
private encryptContent = (encryptionKeyUrl: string, content: string): Promise<any> => {
|
|
262
|
+
// @ts-ignore
|
|
263
|
+
return this.webex.internal.encryption.encryptText(encryptionKeyUrl, content).then((res) => {
|
|
264
|
+
return res;
|
|
265
|
+
});
|
|
266
|
+
};
|
|
267
|
+
|
|
268
|
+
/**
|
|
269
|
+
* Sends stroke data to presenter
|
|
270
|
+
* @param {StrokeData} strokeData
|
|
271
|
+
* @returns {void}
|
|
272
|
+
*/
|
|
273
|
+
public sendStrokeData = (strokeData: StrokeData): void => {
|
|
274
|
+
// @ts-ignore
|
|
275
|
+
if (!this.webex.internal.llm.isConnected()) return;
|
|
276
|
+
this.encryptContent(strokeData.encryptionKeyUrl, strokeData.content).then(
|
|
277
|
+
(encryptedContent) => {
|
|
278
|
+
this.publishEncrypted(encryptedContent, strokeData);
|
|
279
|
+
}
|
|
280
|
+
);
|
|
281
|
+
};
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* private encrypted the strokes data
|
|
285
|
+
* @param {string} encryptedContent
|
|
286
|
+
* @param {StrokeData} strokeData
|
|
287
|
+
* @returns {void}
|
|
288
|
+
*/
|
|
289
|
+
private publishEncrypted(encryptedContent: string, strokeData: StrokeData) {
|
|
290
|
+
const data = {
|
|
291
|
+
id: `${this.seqNum}`,
|
|
292
|
+
type: 'publishRequest',
|
|
293
|
+
recipients: {
|
|
294
|
+
// @ts-ignore
|
|
295
|
+
route: this.webex.internal.llm.getBinding(),
|
|
296
|
+
},
|
|
297
|
+
headers: {
|
|
298
|
+
to: strokeData.toUserId,
|
|
299
|
+
},
|
|
300
|
+
data: {
|
|
301
|
+
eventType: 'relay.event',
|
|
302
|
+
relayType: ANNOTATION_RELAY_TYPES.ANNOTATION_CLIENT,
|
|
303
|
+
request: {
|
|
304
|
+
value: {
|
|
305
|
+
type: ANNOTATION_REQUEST_TYPE.ANNOTATION_MESSAGE,
|
|
306
|
+
content: encryptedContent,
|
|
307
|
+
deviceId: strokeData.deviceId,
|
|
308
|
+
seq: this.seqNum,
|
|
309
|
+
requesterId: strokeData.requesterId,
|
|
310
|
+
version: strokeData.version,
|
|
311
|
+
shareInstanceId: strokeData.shareInstanceId,
|
|
312
|
+
encryptionKeyUrl: strokeData.encryptionKeyUrl,
|
|
313
|
+
},
|
|
314
|
+
},
|
|
315
|
+
},
|
|
316
|
+
trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,
|
|
317
|
+
timestamp: new Date().getTime(),
|
|
318
|
+
sequenceNumber: this.seqNum,
|
|
319
|
+
filterMessage: false,
|
|
320
|
+
};
|
|
321
|
+
|
|
322
|
+
// @ts-ignore
|
|
323
|
+
this.webex.internal.llm.socket.send(data);
|
|
324
|
+
this.seqNum += 1;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
export default AnnotationChannel;
|
package/src/breakouts/README.md
CHANGED
|
@@ -41,6 +41,12 @@ The following are methods available to attendees of a meeting:
|
|
|
41
41
|
```javascript
|
|
42
42
|
// Join a breakout
|
|
43
43
|
// This can be used when the participant is in the main session or in a different breakout session
|
|
44
|
+
// when call join function, should send message to metrics
|
|
45
|
+
/* Breakout Sessions created during meetings allow participants to move into smaller breakout sessions and then
|
|
46
|
+
return to the main meeting at a later time. These moves can be initiated by the user or by the meeting
|
|
47
|
+
host/co-host. The goal of this metric is to track these moves in production by instrumenting them for
|
|
48
|
+
analysis from the end user's experience perspective.
|
|
49
|
+
*/
|
|
44
50
|
breakout.join();
|
|
45
51
|
|
|
46
52
|
// Leave a breakout
|
|
@@ -107,10 +113,6 @@ note: None of these are currently implemented
|
|
|
107
113
|
// Move a participant to breakout
|
|
108
114
|
breakout.move(participant)
|
|
109
115
|
|
|
110
|
-
// Assign a particpant to a breakout
|
|
111
|
-
// Not sure whether there is any difference from move
|
|
112
|
-
breakout.assign(participant)
|
|
113
|
-
|
|
114
116
|
// Remove someone from a breakout session
|
|
115
117
|
// This returns them to the main session
|
|
116
118
|
breakout.remove(participant)
|
|
@@ -119,21 +121,49 @@ breakout.remove(participant)
|
|
|
119
121
|
// This can only be done when breakouts are inactive
|
|
120
122
|
breakout.delete()
|
|
121
123
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
+
/*
|
|
125
|
+
Create breakout sessions, Type is array
|
|
126
|
+
Format: [{'name':'session1', "anyoneCanJoin" : true}]
|
|
127
|
+
*/
|
|
128
|
+
breakouts.create(sessions)
|
|
129
|
+
|
|
130
|
+
// Delete all breakout sessions
|
|
131
|
+
breakouts.clearSessions()
|
|
132
|
+
|
|
133
|
+
// update breakout session with params
|
|
134
|
+
// if unlockEdit is true, will release lock editing after update finish
|
|
135
|
+
breakout.update(params, unlockEdit)
|
|
136
|
+
|
|
137
|
+
// Start breakout sessions with necessary params
|
|
138
|
+
breakouts.start(params)
|
|
124
139
|
|
|
125
|
-
//
|
|
126
|
-
|
|
140
|
+
// Assign a particpant/participants to breakouts/a breakout
|
|
141
|
+
// sessions should be like: [{id:'xx',memberIds:['111'],emails:['111@ss.com',anyone: true]},...]
|
|
142
|
+
breakouts.assign(sessions)
|
|
127
143
|
|
|
128
|
-
//
|
|
129
|
-
|
|
144
|
+
// Dynammic assign a particpant/participants to breakouts/main (not used by now)
|
|
145
|
+
// Admit lobby waiting participants to a breakout directly
|
|
146
|
+
// sessions should be like: [{id:'xx',participants:['111'],targetState:'JOINED'},...]
|
|
147
|
+
breakouts.dynamicAssign(sessions)
|
|
130
148
|
|
|
131
|
-
// End breakout sessions
|
|
132
|
-
breakouts.end()
|
|
149
|
+
// End breakout sessions with necessary params
|
|
150
|
+
breakouts.end(params)
|
|
151
|
+
|
|
152
|
+
// get breakout sessions with/without param editlock
|
|
153
|
+
breakouts.getBreakout(editlock?)
|
|
133
154
|
|
|
134
155
|
// Enable breakout sessions
|
|
135
156
|
breakouts.enable()
|
|
136
157
|
|
|
158
|
+
// Enable and lock breakout
|
|
159
|
+
breakouts.enableAndLockBreakout()
|
|
160
|
+
|
|
161
|
+
// Lock breakout
|
|
162
|
+
breakouts.lockBreakout()
|
|
163
|
+
|
|
164
|
+
// Unlock breakout
|
|
165
|
+
breakouts.unLockEditBreakout()
|
|
166
|
+
|
|
137
167
|
// Disable breakout sessions
|
|
138
168
|
breakouts.disable()
|
|
139
169
|
|
|
@@ -141,11 +171,11 @@ breakouts.disable()
|
|
|
141
171
|
breakouts.askAllToReturn()
|
|
142
172
|
|
|
143
173
|
// Send a message to a breakout session
|
|
144
|
-
// You can determine which participant types receive the message
|
|
174
|
+
// You can determine which participant types receive the message, if no type set, default is to all participants
|
|
145
175
|
breakout.broadcast(message, {participants: boolean, cohosts: boolean, presenters: boolean})
|
|
146
176
|
|
|
147
177
|
// Send a message to All breakout sessions
|
|
148
|
-
// You can determine which participant types receive the message
|
|
178
|
+
// You can determine which participant types receive the message, if no type set, default is to all participants
|
|
149
179
|
breakouts.broadcast(message, {participants: boolean, cohosts: boolean, presenters: boolean})
|
|
150
180
|
|
|
151
181
|
// When breakouts are active you can cancel the automatic end of all sessions by calling this
|
|
@@ -4,10 +4,11 @@
|
|
|
4
4
|
|
|
5
5
|
import {WebexPlugin} from '@webex/webex-core';
|
|
6
6
|
|
|
7
|
-
import
|
|
8
|
-
import
|
|
7
|
+
import uuid from 'uuid';
|
|
8
|
+
import {_ID_, HTTP_VERBS, MEETINGS} from '../constants';
|
|
9
9
|
import Members from '../members';
|
|
10
|
-
|
|
10
|
+
import BreakoutRequest from './request';
|
|
11
|
+
import breakoutEvent from './events';
|
|
11
12
|
/**
|
|
12
13
|
* @class
|
|
13
14
|
*/
|
|
@@ -16,6 +17,7 @@ const Breakout = WebexPlugin.extend({
|
|
|
16
17
|
|
|
17
18
|
namespace: MEETINGS,
|
|
18
19
|
|
|
20
|
+
breakoutRequest: BreakoutRequest,
|
|
19
21
|
props: {
|
|
20
22
|
active: ['boolean', false, false], // this session is active
|
|
21
23
|
allowed: ['boolean', false, false], // allowed to join this session
|
|
@@ -28,10 +30,12 @@ const Breakout = WebexPlugin.extend({
|
|
|
28
30
|
sessionType: 'string',
|
|
29
31
|
groupId: 'string',
|
|
30
32
|
url: 'string', // where to send requests to
|
|
33
|
+
requestedLastModifiedTime: 'string',
|
|
31
34
|
},
|
|
32
35
|
|
|
33
36
|
derived: {
|
|
34
37
|
isMain: {
|
|
38
|
+
cache: false, // fix issue: sometimes the derived will not change even if the deps changed
|
|
35
39
|
deps: ['sessionType'],
|
|
36
40
|
/**
|
|
37
41
|
* If the breakout has no name, assume it is the main session
|
|
@@ -42,24 +46,47 @@ const Breakout = WebexPlugin.extend({
|
|
|
42
46
|
},
|
|
43
47
|
},
|
|
44
48
|
},
|
|
45
|
-
|
|
49
|
+
/**
|
|
50
|
+
* initializer for the Breakout class
|
|
51
|
+
* @returns {void}
|
|
52
|
+
*/
|
|
46
53
|
initialize() {
|
|
47
|
-
|
|
54
|
+
// @ts-ignore
|
|
55
|
+
this.breakoutRequest = new BreakoutRequest({webex: this.webex});
|
|
56
|
+
this.breakoutRosterLocus = null;
|
|
48
57
|
},
|
|
49
58
|
|
|
50
59
|
/**
|
|
51
60
|
* Joins the breakout session
|
|
52
61
|
* @returns {Promise}
|
|
53
62
|
*/
|
|
54
|
-
join() {
|
|
55
|
-
|
|
63
|
+
async join() {
|
|
64
|
+
const breakoutMoveId = uuid.v4();
|
|
65
|
+
const deviceUrl = this.webex.internal.device.url;
|
|
66
|
+
const {meetingId} = this.collection.parent;
|
|
67
|
+
const meeting = this.webex.meetings.getMeetingByType(_ID_, meetingId);
|
|
68
|
+
breakoutEvent.onBreakoutMoveRequest(
|
|
69
|
+
{currentSession: this, meeting, breakoutMoveId},
|
|
70
|
+
// @ts-ignore
|
|
71
|
+
this.webex.internal.newMetrics.submitClientEvent.bind(this.webex.internal.newMetrics)
|
|
72
|
+
);
|
|
73
|
+
const result = await this.request({
|
|
56
74
|
method: HTTP_VERBS.POST,
|
|
57
75
|
uri: `${this.url}/move`,
|
|
58
76
|
body: {
|
|
77
|
+
breakoutMoveId,
|
|
78
|
+
deviceUrl,
|
|
59
79
|
groupId: this.groupId,
|
|
60
80
|
sessionId: this.sessionId,
|
|
61
81
|
},
|
|
62
82
|
});
|
|
83
|
+
breakoutEvent.onBreakoutMoveResponse(
|
|
84
|
+
{currentSession: this, meeting, breakoutMoveId},
|
|
85
|
+
// @ts-ignore
|
|
86
|
+
this.webex.internal.newMetrics.submitClientEvent.bind(this.webex.internal.newMetrics)
|
|
87
|
+
);
|
|
88
|
+
|
|
89
|
+
return result;
|
|
63
90
|
},
|
|
64
91
|
|
|
65
92
|
/**
|
|
@@ -97,14 +124,65 @@ const Breakout = WebexPlugin.extend({
|
|
|
97
124
|
},
|
|
98
125
|
|
|
99
126
|
/**
|
|
100
|
-
*
|
|
101
|
-
* @param locus Locus object
|
|
127
|
+
* inits the members object
|
|
102
128
|
* @returns {void}
|
|
103
129
|
*/
|
|
130
|
+
initMembers() {
|
|
131
|
+
const {meetingId} = this.collection.parent;
|
|
132
|
+
const meeting = this.webex.meetings.getMeetingByType(_ID_, meetingId);
|
|
133
|
+
this.members = new Members(
|
|
134
|
+
{
|
|
135
|
+
meeting,
|
|
136
|
+
},
|
|
137
|
+
{parent: this.webex}
|
|
138
|
+
);
|
|
139
|
+
},
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* check sequence and determine whether to update the new roster or not
|
|
143
|
+
* @param {Object} locus Locus object
|
|
144
|
+
* @returns {Boolean}
|
|
145
|
+
*/
|
|
146
|
+
isNeedHandleRoster(locus: any) {
|
|
147
|
+
if (!this.breakoutRosterLocus?.sequence?.entries?.length || !locus?.sequence?.entries?.length) {
|
|
148
|
+
return true;
|
|
149
|
+
}
|
|
150
|
+
const prevSequence = this.breakoutRosterLocus.sequence.entries[0];
|
|
151
|
+
const currentSequence = locus.sequence.entries[0];
|
|
104
152
|
|
|
153
|
+
return currentSequence > prevSequence;
|
|
154
|
+
},
|
|
155
|
+
/**
|
|
156
|
+
* Parses the participants from the locus object
|
|
157
|
+
* @param {Object} locus Locus object
|
|
158
|
+
* @returns {void}
|
|
159
|
+
*/
|
|
105
160
|
parseRoster(locus) {
|
|
161
|
+
if (!this.members) {
|
|
162
|
+
this.initMembers();
|
|
163
|
+
}
|
|
164
|
+
if (!this.isNeedHandleRoster(locus)) {
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
this.breakoutRosterLocus = locus;
|
|
106
168
|
this.members.locusParticipantsUpdate(locus);
|
|
107
169
|
},
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Broadcast message to this breakout session's participants
|
|
173
|
+
* @param {String} message
|
|
174
|
+
* @param {Object} options
|
|
175
|
+
* @returns {Promise}
|
|
176
|
+
*/
|
|
177
|
+
broadcast(message, options) {
|
|
178
|
+
return this.breakoutRequest.broadcast({
|
|
179
|
+
url: this.url,
|
|
180
|
+
message,
|
|
181
|
+
options,
|
|
182
|
+
groupId: this.groupId,
|
|
183
|
+
sessionId: this.sessionId,
|
|
184
|
+
});
|
|
185
|
+
},
|
|
108
186
|
});
|
|
109
187
|
|
|
110
188
|
export default Breakout;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import {ERROR_DICTIONARY} from '../constants';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Extended Error object to signify breakout related errors
|
|
5
|
+
*/
|
|
6
|
+
export default class BreakoutEditLockedError extends Error {
|
|
7
|
+
code: any;
|
|
8
|
+
error: any;
|
|
9
|
+
sdkMessage: any;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
*
|
|
13
|
+
* @constructor
|
|
14
|
+
* @param {String} [message]
|
|
15
|
+
* @param {Object} [error]
|
|
16
|
+
*/
|
|
17
|
+
constructor(message: string = ERROR_DICTIONARY.BREAKOUT_EDIT.MESSAGE, error: any = null) {
|
|
18
|
+
super(message);
|
|
19
|
+
this.name = ERROR_DICTIONARY.BREAKOUT_EDIT.NAME;
|
|
20
|
+
this.sdkMessage = ERROR_DICTIONARY.BREAKOUT_EDIT.MESSAGE;
|
|
21
|
+
this.error = error;
|
|
22
|
+
this.stack = error ? error.stack : new Error().stack;
|
|
23
|
+
this.code = ERROR_DICTIONARY.BREAKOUT_EDIT.CODE;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
// eslint-disable-next-line import/prefer-default-export
|
|
2
|
+
import {ClientEvent} from '@webex/internal-plugin-metrics';
|
|
3
|
+
|
|
4
|
+
const breakoutEvent: {
|
|
5
|
+
onBreakoutMoveRequest: (eventInfo: any, submitClientEvent: any) => void;
|
|
6
|
+
onBreakoutMoveResponse: (eventInfo: any, submitClientEvent: any) => void;
|
|
7
|
+
onBreakoutJoinResponse: (eventInfo: any, submitClientEvent: any) => void;
|
|
8
|
+
postMoveCallAnalyzer: (
|
|
9
|
+
event: ClientEvent['name'],
|
|
10
|
+
eventInfo: any,
|
|
11
|
+
submitClientEvent: any
|
|
12
|
+
) => void;
|
|
13
|
+
} = {
|
|
14
|
+
onBreakoutMoveRequest: (eventInfo, submitClientEvent) => {
|
|
15
|
+
breakoutEvent.postMoveCallAnalyzer(
|
|
16
|
+
'client.breakout-session.move.request',
|
|
17
|
+
eventInfo,
|
|
18
|
+
submitClientEvent
|
|
19
|
+
);
|
|
20
|
+
},
|
|
21
|
+
onBreakoutMoveResponse: (eventInfo, submitClientEvent) => {
|
|
22
|
+
breakoutEvent.postMoveCallAnalyzer(
|
|
23
|
+
'client.breakout-session.move.response',
|
|
24
|
+
eventInfo,
|
|
25
|
+
submitClientEvent
|
|
26
|
+
);
|
|
27
|
+
},
|
|
28
|
+
onBreakoutJoinResponse: (eventInfo, submitClientEvent) => {
|
|
29
|
+
breakoutEvent.postMoveCallAnalyzer(
|
|
30
|
+
'client.breakout-session.join.response',
|
|
31
|
+
eventInfo,
|
|
32
|
+
submitClientEvent
|
|
33
|
+
);
|
|
34
|
+
},
|
|
35
|
+
postMoveCallAnalyzer: (event: ClientEvent['name'], eventInfo: any, submitClientEvent) => {
|
|
36
|
+
if (!eventInfo?.breakoutMoveId || !eventInfo?.meeting) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
if (!eventInfo.meeting.meetingInfo?.enableConvergedArchitecture) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
submitClientEvent({
|
|
43
|
+
name: event,
|
|
44
|
+
payload: {
|
|
45
|
+
identifiers: {
|
|
46
|
+
breakoutMoveId: eventInfo.breakoutMoveId,
|
|
47
|
+
breakoutSessionId: eventInfo?.currentSession?.sessionId,
|
|
48
|
+
breakoutGroupId: eventInfo?.currentSession?.groupId,
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
options: {meetingId: eventInfo.meeting.id},
|
|
52
|
+
});
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
export default breakoutEvent;
|