@webex/plugin-meetings 2.60.0 → 2.60.1-next.10
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 +58 -8
- package/dist/annotation/annotation.types.d.ts +42 -0
- package/dist/annotation/annotation.types.js +7 -0
- package/dist/annotation/annotation.types.js.map +1 -0
- package/dist/annotation/constants.d.ts +31 -0
- package/dist/annotation/constants.js +41 -0
- package/dist/annotation/constants.js.map +1 -0
- package/dist/annotation/index.d.ts +117 -0
- package/dist/annotation/index.js +357 -0
- package/dist/annotation/index.js.map +1 -0
- package/dist/breakouts/breakout.d.ts +8 -0
- package/dist/breakouts/breakout.js +215 -0
- package/dist/breakouts/breakout.js.map +1 -0
- package/dist/breakouts/collection.d.ts +5 -0
- package/dist/breakouts/collection.js +22 -0
- package/dist/breakouts/collection.js.map +1 -0
- package/dist/breakouts/edit-lock-error.d.ts +15 -0
- package/dist/breakouts/edit-lock-error.js +51 -0
- package/dist/breakouts/edit-lock-error.js.map +1 -0
- package/dist/breakouts/events.d.ts +8 -0
- package/dist/breakouts/events.js +44 -0
- package/dist/breakouts/events.js.map +1 -0
- package/dist/breakouts/index.d.ts +5 -0
- package/dist/breakouts/index.js +1047 -0
- package/dist/breakouts/index.js.map +1 -0
- package/dist/breakouts/request.d.ts +22 -0
- package/dist/breakouts/request.js +77 -0
- package/dist/breakouts/request.js.map +1 -0
- package/dist/breakouts/utils.d.ts +15 -0
- package/dist/breakouts/utils.js +64 -0
- package/dist/breakouts/utils.js.map +1 -0
- package/dist/common/browser-detection.js +2 -3
- package/dist/common/browser-detection.js.map +1 -1
- package/dist/common/collection.js +3 -4
- package/dist/common/collection.js.map +1 -1
- package/dist/common/config.js +1 -2
- package/dist/common/config.js.map +1 -1
- package/dist/common/errors/captcha-error.js +1 -2
- package/dist/common/errors/captcha-error.js.map +1 -1
- package/dist/common/errors/intent-to-join.js +1 -2
- package/dist/common/errors/intent-to-join.js.map +1 -1
- package/dist/common/errors/join-meeting.js +1 -2
- package/dist/common/errors/join-meeting.js.map +1 -1
- package/dist/common/errors/media.js +1 -2
- package/dist/common/errors/media.js.map +1 -1
- package/dist/common/errors/no-meeting-info.d.ts +14 -0
- package/dist/common/errors/no-meeting-info.js +50 -0
- package/dist/common/errors/no-meeting-info.js.map +1 -0
- package/dist/common/errors/parameter.js +3 -4
- package/dist/common/errors/parameter.js.map +1 -1
- package/dist/common/errors/password-error.js +1 -2
- package/dist/common/errors/password-error.js.map +1 -1
- package/dist/common/errors/permission.js +1 -2
- package/dist/common/errors/permission.js.map +1 -1
- package/dist/common/errors/{reclaim-host-role-error.js → reclaim-host-role-errors.js} +7 -11
- package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
- package/dist/common/errors/reconnection-in-progress.js +1 -2
- package/dist/common/errors/reconnection-in-progress.js.map +1 -1
- package/dist/common/errors/reconnection.js +1 -2
- package/dist/common/errors/reconnection.js.map +1 -1
- package/dist/common/errors/stats.js +1 -2
- package/dist/common/errors/stats.js.map +1 -1
- package/dist/common/errors/webex-errors.d.ts +20 -8
- package/dist/common/errors/webex-errors.js +48 -28
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/errors/webex-meetings-error.js +1 -2
- package/dist/common/errors/webex-meetings-error.js.map +1 -1
- package/dist/common/events/events-scope.js +1 -2
- package/dist/common/events/events-scope.js.map +1 -1
- package/dist/common/events/events.js +1 -2
- package/dist/common/events/events.js.map +1 -1
- package/dist/common/events/trigger-proxy.js +1 -2
- package/dist/common/events/trigger-proxy.js.map +1 -1
- package/dist/common/events/util.js +1 -2
- package/dist/common/events/util.js.map +1 -1
- package/dist/common/logs/logger-config.js +1 -2
- package/dist/common/logs/logger-config.js.map +1 -1
- package/dist/common/logs/logger-proxy.js +2 -3
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/logs/request.d.ts +3 -1
- package/dist/common/logs/request.js +8 -5
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.d.ts +9 -7
- package/dist/common/queue.js +22 -9
- package/dist/common/queue.js.map +1 -1
- package/dist/config.d.ts +6 -7
- package/dist/config.js +8 -10
- package/dist/config.js.map +1 -1
- package/dist/constants.d.ts +234 -100
- package/dist/constants.js +433 -444
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/constants.js +3 -6
- package/dist/controls-options-manager/constants.js.map +1 -1
- package/dist/controls-options-manager/enums.d.ts +11 -1
- package/dist/controls-options-manager/enums.js +15 -6
- package/dist/controls-options-manager/enums.js.map +1 -1
- package/dist/controls-options-manager/index.d.ts +17 -1
- package/dist/controls-options-manager/index.js +127 -38
- package/dist/controls-options-manager/index.js.map +1 -1
- package/dist/controls-options-manager/types.d.ts +43 -0
- package/dist/controls-options-manager/types.js +7 -0
- package/dist/controls-options-manager/types.js.map +1 -0
- package/dist/controls-options-manager/util.d.ts +1 -7
- package/dist/controls-options-manager/util.js +309 -19
- package/dist/controls-options-manager/util.js.map +1 -1
- package/dist/index.d.ts +6 -3
- package/dist/index.js +121 -5
- package/dist/index.js.map +1 -1
- package/dist/interceptors/index.d.ts +2 -0
- package/dist/interceptors/index.js +15 -0
- package/dist/interceptors/index.js.map +1 -0
- package/dist/interceptors/locusRetry.d.ts +27 -0
- package/dist/interceptors/locusRetry.js +94 -0
- package/dist/interceptors/locusRetry.js.map +1 -0
- package/dist/interpretation/collection.d.ts +5 -0
- package/dist/interpretation/collection.js +22 -0
- package/dist/interpretation/collection.js.map +1 -0
- package/dist/interpretation/index.d.ts +5 -0
- package/dist/interpretation/index.js +365 -0
- package/dist/interpretation/index.js.map +1 -0
- package/dist/interpretation/siLanguage.d.ts +5 -0
- package/dist/interpretation/siLanguage.js +24 -0
- package/dist/interpretation/siLanguage.js.map +1 -0
- package/dist/locus-info/controlsUtils.js +100 -11
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/embeddedAppsUtils.js +3 -4
- package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
- package/dist/locus-info/fullState.js +1 -2
- package/dist/locus-info/fullState.js.map +1 -1
- package/dist/locus-info/hostUtils.js +1 -2
- package/dist/locus-info/hostUtils.js.map +1 -1
- package/dist/locus-info/index.d.ts +57 -4
- package/dist/locus-info/index.js +425 -84
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +13 -5
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +58 -3
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.d.ts +66 -6
- package/dist/locus-info/parser.js +253 -80
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +97 -13
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.d.ts +2 -0
- package/dist/media/index.js +107 -319
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.d.ts +38 -53
- package/dist/media/properties.js +96 -153
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js +1 -22
- package/dist/media/util.js.map +1 -1
- package/dist/mediaQualityMetrics/config.d.ts +234 -230
- package/dist/mediaQualityMetrics/config.js +302 -498
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/in-meeting-actions.d.ts +88 -0
- package/dist/meeting/in-meeting-actions.js +94 -3
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.d.ts +705 -520
- package/dist/meeting/index.js +5047 -3089
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.d.ts +74 -0
- package/dist/meeting/locusMediaRequest.js +291 -0
- package/dist/meeting/locusMediaRequest.js.map +1 -0
- package/dist/meeting/muteState.d.ts +93 -25
- package/dist/meeting/muteState.js +224 -133
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.d.ts +82 -47
- package/dist/meeting/request.js +304 -199
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/request.type.d.ts +11 -0
- package/dist/meeting/request.type.js +7 -0
- package/dist/meeting/request.type.js.map +1 -0
- package/dist/meeting/state.js +1 -2
- package/dist/meeting/state.js.map +1 -1
- package/dist/meeting/util.d.ts +118 -1
- package/dist/meeting/util.js +676 -435
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting/voicea-meeting.d.ts +20 -0
- package/dist/meeting/voicea-meeting.js +201 -0
- package/dist/meeting/voicea-meeting.js.map +1 -0
- package/dist/meeting-info/collection.js +3 -4
- package/dist/meeting-info/collection.js.map +1 -1
- package/dist/meeting-info/index.d.ts +13 -1
- package/dist/meeting-info/index.js +74 -7
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.d.ts +31 -1
- package/dist/meeting-info/meeting-info-v2.js +200 -63
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.js +1 -2
- package/dist/meeting-info/request.js.map +1 -1
- package/dist/meeting-info/util.js +2 -3
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +39 -41
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.d.ts +17 -0
- package/dist/meetings/collection.js +42 -4
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.d.ts +114 -20
- package/dist/meetings/index.js +540 -126
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/meetings.types.d.ts +4 -0
- package/dist/meetings/meetings.types.js +7 -0
- package/dist/meetings/meetings.types.js.map +1 -0
- package/dist/meetings/request.js +4 -3
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +107 -6
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.d.ts +13 -1
- package/dist/member/index.js +45 -2
- package/dist/member/index.js.map +1 -1
- package/dist/member/member.types.js +3 -4
- package/dist/member/member.types.js.map +1 -1
- package/dist/member/types.d.ts +32 -0
- package/dist/member/types.js +23 -0
- package/dist/member/types.js.map +1 -0
- package/dist/member/util.js +120 -29
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.d.ts +5 -0
- package/dist/members/collection.js +11 -2
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.d.ts +56 -11
- package/dist/members/index.js +174 -47
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.d.ts +67 -11
- package/dist/members/request.js +102 -54
- package/dist/members/request.js.map +1 -1
- package/dist/members/types.js +3 -4
- package/dist/members/types.js.map +1 -1
- package/dist/members/util.d.ts +214 -1
- package/dist/members/util.js +327 -284
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.d.ts +15 -6
- package/dist/metrics/constants.js +17 -9
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.d.ts +4 -111
- package/dist/metrics/index.js +4 -452
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.d.ts +118 -0
- package/dist/multistream/mediaRequestManager.js +344 -0
- package/dist/multistream/mediaRequestManager.js.map +1 -0
- package/dist/multistream/receiveSlot.d.ts +68 -0
- package/dist/multistream/receiveSlot.js +200 -0
- package/dist/multistream/receiveSlot.js.map +1 -0
- package/dist/multistream/receiveSlotManager.d.ts +56 -0
- package/dist/multistream/receiveSlotManager.js +174 -0
- package/dist/multistream/receiveSlotManager.js.map +1 -0
- package/dist/multistream/remoteMedia.d.ts +72 -0
- package/dist/multistream/remoteMedia.js +268 -0
- package/dist/multistream/remoteMedia.js.map +1 -0
- package/dist/multistream/remoteMediaGroup.d.ts +47 -0
- package/dist/multistream/remoteMediaGroup.js +267 -0
- package/dist/multistream/remoteMediaGroup.js.map +1 -0
- package/dist/multistream/remoteMediaManager.d.ts +285 -0
- package/dist/multistream/remoteMediaManager.js +1211 -0
- package/dist/multistream/remoteMediaManager.js.map +1 -0
- package/dist/multistream/sendSlotManager.d.ts +61 -0
- package/dist/multistream/sendSlotManager.js +236 -0
- package/dist/multistream/sendSlotManager.js.map +1 -0
- package/dist/networkQualityMonitor/index.js +5 -4
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/personal-meeting-room/index.js +2 -3
- package/dist/personal-meeting-room/index.js.map +1 -1
- package/dist/personal-meeting-room/request.js +2 -3
- package/dist/personal-meeting-room/request.js.map +1 -1
- package/dist/personal-meeting-room/util.js +1 -2
- package/dist/personal-meeting-room/util.js.map +1 -1
- package/dist/reachability/clusterReachability.d.ts +109 -0
- package/dist/reachability/clusterReachability.js +357 -0
- package/dist/reachability/clusterReachability.js.map +1 -0
- package/dist/reachability/index.d.ts +61 -95
- package/dist/reachability/index.js +304 -392
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.d.ts +7 -3
- package/dist/reachability/request.js +18 -10
- package/dist/reachability/request.js.map +1 -1
- package/dist/reachability/util.d.ts +8 -0
- package/dist/reachability/util.js +29 -0
- package/dist/reachability/util.js.map +1 -0
- package/dist/reactions/constants.d.ts +3 -0
- package/dist/reactions/constants.js +12 -0
- package/dist/reactions/constants.js.map +1 -0
- package/dist/reactions/reactions.d.ts +2 -2
- package/dist/reactions/reactions.js +4 -6
- package/dist/reactions/reactions.js.map +1 -1
- package/dist/reactions/reactions.type.d.ts +23 -3
- package/dist/reactions/reactions.type.js +21 -23
- package/dist/reactions/reactions.type.js.map +1 -1
- package/dist/reconnection-manager/index.d.ts +32 -8
- package/dist/reconnection-manager/index.js +285 -232
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/enums.js +4 -5
- package/dist/recording-controller/enums.js.map +1 -1
- package/dist/recording-controller/index.d.ts +15 -1
- package/dist/recording-controller/index.js +57 -46
- package/dist/recording-controller/index.js.map +1 -1
- package/dist/recording-controller/util.d.ts +5 -4
- package/dist/recording-controller/util.js +10 -10
- package/dist/recording-controller/util.js.map +1 -1
- package/dist/roap/index.d.ts +9 -47
- package/dist/roap/index.js +100 -238
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.d.ts +18 -12
- package/dist/roap/request.js +126 -180
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.d.ts +27 -16
- package/dist/roap/turnDiscovery.js +115 -105
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/rtcMetrics/constants.d.ts +4 -0
- package/dist/rtcMetrics/constants.js +11 -0
- package/dist/rtcMetrics/constants.js.map +1 -0
- package/dist/rtcMetrics/index.d.ts +54 -0
- package/dist/rtcMetrics/index.js +140 -0
- package/dist/rtcMetrics/index.js.map +1 -0
- package/dist/statsAnalyzer/global.d.ts +1 -83
- package/dist/statsAnalyzer/global.js +2 -85
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.d.ts +50 -30
- package/dist/statsAnalyzer/index.js +436 -511
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.d.ts +8 -6
- package/dist/statsAnalyzer/mqaUtil.js +130 -90
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.js +1 -2
- package/dist/transcription/index.js.map +1 -1
- package/dist/webinar/collection.d.ts +16 -0
- package/dist/webinar/collection.js +43 -0
- package/dist/webinar/collection.js.map +1 -0
- package/dist/webinar/index.d.ts +5 -0
- package/dist/webinar/index.js +68 -0
- package/dist/webinar/index.js.map +1 -0
- package/package.json +39 -26
- package/src/annotation/annotation.types.ts +50 -0
- package/src/annotation/constants.ts +36 -0
- package/src/annotation/index.ts +328 -0
- package/src/breakouts/README.md +220 -0
- package/src/breakouts/breakout.ts +188 -0
- package/src/breakouts/collection.ts +19 -0
- package/src/breakouts/edit-lock-error.ts +25 -0
- package/src/breakouts/events.ts +56 -0
- package/src/breakouts/index.ts +925 -0
- package/src/breakouts/request.ts +55 -0
- package/src/breakouts/utils.ts +57 -0
- package/src/common/errors/no-meeting-info.ts +24 -0
- package/src/common/errors/webex-errors.ts +36 -12
- package/src/common/logs/logger-proxy.ts +1 -1
- package/src/common/logs/request.ts +5 -1
- package/src/common/queue.ts +22 -8
- package/src/config.ts +6 -7
- package/src/constants.ts +265 -100
- package/src/controls-options-manager/enums.ts +12 -0
- package/src/controls-options-manager/index.ts +116 -21
- package/src/controls-options-manager/types.ts +59 -0
- package/src/controls-options-manager/util.ts +294 -14
- package/src/index.ts +44 -0
- package/src/interceptors/index.ts +3 -0
- package/src/interceptors/locusRetry.ts +67 -0
- package/src/interpretation/README.md +60 -0
- package/src/interpretation/collection.ts +19 -0
- package/src/interpretation/index.ts +332 -0
- package/src/interpretation/siLanguage.ts +18 -0
- package/src/locus-info/controlsUtils.ts +110 -0
- package/src/locus-info/index.ts +450 -61
- package/src/locus-info/infoUtils.ts +14 -2
- package/src/locus-info/mediaSharesUtils.ts +64 -0
- package/src/locus-info/parser.ts +258 -47
- package/src/locus-info/selfUtils.ts +85 -2
- package/src/media/index.ts +153 -370
- package/src/media/properties.ts +106 -136
- package/src/media/util.ts +0 -21
- package/src/mediaQualityMetrics/config.ts +244 -377
- package/src/meeting/in-meeting-actions.ts +176 -0
- package/src/meeting/index.ts +4306 -2581
- package/src/meeting/locusMediaRequest.ts +313 -0
- package/src/meeting/muteState.ts +224 -138
- package/src/meeting/request.ts +214 -127
- package/src/meeting/request.type.ts +13 -0
- package/src/meeting/util.ts +687 -423
- package/src/meeting/voicea-meeting.ts +161 -0
- package/src/meeting-info/index.ts +81 -8
- package/src/meeting-info/meeting-info-v2.ts +163 -13
- package/src/meeting-info/util.ts +1 -1
- package/src/meeting-info/utilv2.ts +28 -28
- package/src/meetings/collection.ts +33 -0
- package/src/meetings/index.ts +529 -127
- package/src/meetings/meetings.types.ts +12 -0
- package/src/meetings/request.ts +2 -0
- package/src/meetings/util.ts +116 -5
- package/src/member/index.ts +43 -1
- package/src/member/types.ts +38 -0
- package/src/member/util.ts +125 -28
- package/src/members/collection.ts +8 -0
- package/src/members/index.ts +187 -52
- package/src/members/request.ts +87 -27
- package/src/members/util.ts +332 -291
- package/src/metrics/constants.ts +15 -6
- package/src/metrics/index.ts +1 -471
- package/src/multistream/mediaRequestManager.ts +440 -0
- package/src/multistream/receiveSlot.ts +184 -0
- package/src/multistream/receiveSlotManager.ts +166 -0
- package/src/multistream/remoteMedia.ts +254 -0
- package/src/multistream/remoteMediaGroup.ts +284 -0
- package/src/multistream/remoteMediaManager.ts +1145 -0
- package/src/multistream/sendSlotManager.ts +170 -0
- package/src/networkQualityMonitor/index.ts +6 -6
- package/src/reachability/clusterReachability.ts +320 -0
- package/src/reachability/index.ts +246 -347
- package/src/reachability/request.ts +17 -8
- package/src/reachability/util.ts +24 -0
- package/src/reactions/constants.ts +4 -0
- package/src/reactions/reactions.ts +4 -4
- package/src/reactions/reactions.type.ts +30 -4
- package/src/reconnection-manager/index.ts +168 -156
- package/src/recording-controller/index.ts +20 -3
- package/src/recording-controller/util.ts +26 -9
- package/src/roap/index.ts +96 -241
- package/src/roap/request.ts +74 -148
- package/src/roap/turnDiscovery.ts +62 -56
- package/src/rtcMetrics/constants.ts +3 -0
- package/src/rtcMetrics/index.ts +124 -0
- package/src/statsAnalyzer/global.ts +1 -84
- package/src/statsAnalyzer/index.ts +479 -645
- package/src/statsAnalyzer/mqaUtil.ts +128 -126
- package/src/webinar/collection.ts +31 -0
- package/src/webinar/index.ts +62 -0
- package/test/integration/spec/converged-space-meetings.js +233 -0
- package/test/integration/spec/journey.js +320 -264
- package/test/integration/spec/space-meeting.js +77 -4
- package/test/unit/spec/annotation/index.ts +418 -0
- package/test/unit/spec/breakouts/breakout.ts +237 -0
- package/test/unit/spec/breakouts/collection.ts +15 -0
- package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
- package/test/unit/spec/breakouts/events.ts +89 -0
- package/test/unit/spec/breakouts/index.ts +1790 -0
- package/test/unit/spec/breakouts/request.ts +104 -0
- package/test/unit/spec/breakouts/utils.js +72 -0
- package/test/unit/spec/common/queue.js +31 -2
- package/test/unit/spec/controls-options-manager/index.js +163 -0
- package/test/unit/spec/controls-options-manager/util.js +576 -60
- package/test/unit/spec/fixture/locus.js +1 -0
- package/test/unit/spec/interceptors/locusRetry.ts +131 -0
- package/test/unit/spec/interpretation/collection.ts +15 -0
- package/test/unit/spec/interpretation/index.ts +589 -0
- package/test/unit/spec/interpretation/siLanguage.ts +28 -0
- package/test/unit/spec/locus-info/controlsUtils.js +323 -30
- package/test/unit/spec/locus-info/index.js +1438 -16
- package/test/unit/spec/locus-info/infoUtils.js +54 -16
- package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
- package/test/unit/spec/locus-info/lib/selfConstant.js +48 -0
- package/test/unit/spec/locus-info/mediaSharesUtils.ts +32 -0
- package/test/unit/spec/locus-info/parser.js +116 -35
- package/test/unit/spec/locus-info/selfUtils.js +275 -0
- package/test/unit/spec/media/index.ts +290 -0
- package/test/unit/spec/media/properties.ts +75 -84
- package/test/unit/spec/meeting/in-meeting-actions.ts +86 -0
- package/test/unit/spec/meeting/index.js +8886 -2815
- package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
- package/test/unit/spec/meeting/muteState.js +409 -213
- package/test/unit/spec/meeting/request.js +523 -43
- package/test/unit/spec/meeting/utils.js +834 -24
- package/test/unit/spec/meeting-info/index.js +300 -0
- package/test/unit/spec/meeting-info/meetinginfov2.js +527 -5
- package/test/unit/spec/meeting-info/utilv2.js +21 -0
- package/test/unit/spec/meetings/collection.js +26 -0
- package/test/unit/spec/meetings/index.js +1446 -217
- package/test/unit/spec/meetings/utils.js +202 -2
- package/test/unit/spec/member/index.js +32 -9
- package/test/unit/spec/member/util.js +499 -61
- package/test/unit/spec/members/index.js +394 -5
- package/test/unit/spec/members/request.js +206 -27
- package/test/unit/spec/members/utils.js +173 -38
- package/test/unit/spec/metrics/index.js +1 -50
- package/test/unit/spec/multistream/mediaRequestManager.ts +1418 -0
- package/test/unit/spec/multistream/receiveSlot.ts +163 -0
- package/test/unit/spec/multistream/receiveSlotManager.ts +203 -0
- package/test/unit/spec/multistream/remoteMedia.ts +255 -0
- package/test/unit/spec/multistream/remoteMediaGroup.ts +662 -0
- package/test/unit/spec/multistream/remoteMediaManager.ts +1924 -0
- package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
- package/test/unit/spec/networkQualityMonitor/index.js +4 -4
- package/test/unit/spec/reachability/clusterReachability.ts +279 -0
- package/test/unit/spec/reachability/index.ts +532 -24
- package/test/unit/spec/reachability/request.js +68 -0
- package/test/unit/spec/reachability/util.ts +40 -0
- package/test/unit/spec/reconnection-manager/index.js +163 -24
- package/test/unit/spec/recording-controller/index.js +293 -218
- package/test/unit/spec/recording-controller/util.js +223 -96
- package/test/unit/spec/roap/index.ts +187 -77
- package/test/unit/spec/roap/request.ts +255 -0
- package/test/unit/spec/roap/turnDiscovery.ts +86 -48
- package/test/unit/spec/rtcMetrics/index.ts +93 -0
- package/test/unit/spec/stats-analyzer/index.js +644 -165
- package/test/unit/spec/webinar/collection.ts +13 -0
- package/test/unit/spec/webinar/index.ts +60 -0
- package/test/utils/constants.js +9 -0
- package/test/utils/integrationTestUtils.js +46 -0
- package/test/utils/testUtils.js +0 -45
- package/test/utils/webex-config.js +4 -0
- package/test/utils/webex-test-users.js +7 -3
- package/dist/common/errors/reclaim-host-role-error.js.map +0 -1
- package/dist/meeting/effectsState.d.ts +0 -42
- package/dist/meeting/effectsState.js +0 -260
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/metrics/config.d.ts +0 -169
- package/dist/metrics/config.js +0 -289
- package/dist/metrics/config.js.map +0 -1
- package/dist/peer-connection-manager/index.d.ts +0 -6
- package/dist/peer-connection-manager/index.js +0 -671
- package/dist/peer-connection-manager/index.js.map +0 -1
- package/dist/peer-connection-manager/util.d.ts +0 -6
- package/dist/peer-connection-manager/util.js +0 -110
- package/dist/peer-connection-manager/util.js.map +0 -1
- package/dist/roap/collection.d.ts +0 -10
- package/dist/roap/collection.js +0 -63
- package/dist/roap/collection.js.map +0 -1
- package/dist/roap/handler.d.ts +0 -47
- package/dist/roap/handler.js +0 -279
- package/dist/roap/handler.js.map +0 -1
- package/dist/roap/state.d.ts +0 -9
- package/dist/roap/state.js +0 -127
- package/dist/roap/state.js.map +0 -1
- package/dist/roap/util.d.ts +0 -2
- package/dist/roap/util.js +0 -76
- package/dist/roap/util.js.map +0 -1
- package/src/index.js +0 -15
- package/src/meeting/effectsState.ts +0 -209
- package/src/metrics/config.ts +0 -485
- package/src/peer-connection-manager/index.ts +0 -847
- package/src/peer-connection-manager/util.ts +0 -119
- package/src/roap/collection.ts +0 -62
- package/src/roap/handler.ts +0 -294
- package/src/roap/state.ts +0 -156
- package/src/roap/util.ts +0 -100
- package/test/unit/spec/meeting/effectsState.js +0 -281
- package/test/unit/spec/peerconnection-manager/index.js +0 -218
- package/test/unit/spec/peerconnection-manager/utils.js +0 -49
- package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -388
- package/test/unit/spec/roap/util.js +0 -30
- /package/dist/common/errors/{reclaim-host-role-error.d.ts → reclaim-host-role-errors.d.ts} +0 -0
- /package/src/common/errors/{reclaim-host-role-error.ts → reclaim-host-role-errors.ts} +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
2
|
-
import {HTTP_VERBS, RESOURCE, API} from '../constants';
|
|
2
|
+
import {HTTP_VERBS, RESOURCE, API, IP_VERSION} from '../constants';
|
|
3
3
|
|
|
4
4
|
export interface ClusterNode {
|
|
5
5
|
isVideoMesh: boolean;
|
|
@@ -28,31 +28,40 @@ class ReachabilityRequest {
|
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
/**
|
|
31
|
-
*
|
|
31
|
+
* Gets the cluster information
|
|
32
32
|
*
|
|
33
|
-
* @param {
|
|
33
|
+
* @param {IP_VERSION} ipVersion information about current ip network we're on
|
|
34
34
|
* @returns {Promise}
|
|
35
35
|
*/
|
|
36
|
-
getClusters = (): Promise<ClusterList> =>
|
|
36
|
+
getClusters = (ipVersion?: IP_VERSION): Promise<{clusters: ClusterList; joinCookie: any}> =>
|
|
37
37
|
this.webex
|
|
38
38
|
.request({
|
|
39
39
|
method: HTTP_VERBS.GET,
|
|
40
40
|
shouldRefreshAccessToken: false,
|
|
41
41
|
api: API.CALLIOPEDISCOVERY,
|
|
42
42
|
resource: RESOURCE.CLUSTERS,
|
|
43
|
+
qs: {
|
|
44
|
+
JCSupport: 1,
|
|
45
|
+
ipver: ipVersion,
|
|
46
|
+
},
|
|
43
47
|
})
|
|
44
48
|
.then((res) => {
|
|
45
|
-
const {clusters} = res.body;
|
|
49
|
+
const {clusters, joinCookie} = res.body;
|
|
46
50
|
|
|
47
51
|
Object.keys(clusters).forEach((key) => {
|
|
48
|
-
clusters[key].isVideoMesh = res.body.clusterClasses?.hybridMedia?.includes(key);
|
|
52
|
+
clusters[key].isVideoMesh = !!res.body.clusterClasses?.hybridMedia?.includes(key);
|
|
49
53
|
});
|
|
50
54
|
|
|
51
55
|
LoggerProxy.logger.log(
|
|
52
|
-
`Reachability:request#getClusters --> get clusters successful:${JSON.stringify(
|
|
56
|
+
`Reachability:request#getClusters --> get clusters (ipver=${ipVersion}) successful:${JSON.stringify(
|
|
57
|
+
clusters
|
|
58
|
+
)}`
|
|
53
59
|
);
|
|
54
60
|
|
|
55
|
-
return
|
|
61
|
+
return {
|
|
62
|
+
clusters,
|
|
63
|
+
joinCookie,
|
|
64
|
+
};
|
|
56
65
|
});
|
|
57
66
|
|
|
58
67
|
/**
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/* eslint-disable import/prefer-default-export */
|
|
2
|
+
/**
|
|
3
|
+
* Converts a stun url to a turn url
|
|
4
|
+
*
|
|
5
|
+
* @param {string} stunUrl url of a stun server
|
|
6
|
+
* @param {'tcp'|'udp'} protocol what protocol to use for the turn server
|
|
7
|
+
* @returns {string} url of a turn server
|
|
8
|
+
*/
|
|
9
|
+
export function convertStunUrlToTurn(stunUrl: string, protocol: 'udp' | 'tcp') {
|
|
10
|
+
// stunUrl looks like this: "stun:external-media91.public.wjfkm-a-10.prod.infra.webex.com:5004"
|
|
11
|
+
// and we need it to be like this: "turn:external-media91.public.wjfkm-a-10.prod.infra.webex.com:5004?transport=tcp"
|
|
12
|
+
const url = new URL(stunUrl);
|
|
13
|
+
|
|
14
|
+
if (url.protocol !== 'stun:') {
|
|
15
|
+
throw new Error(`Not a STUN URL: ${stunUrl}`);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
url.protocol = 'turn:';
|
|
19
|
+
if (protocol === 'tcp') {
|
|
20
|
+
url.searchParams.append('transport', 'tcp');
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return url.toString();
|
|
24
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {Reaction,
|
|
1
|
+
import {Reaction, ReactionServerType, SkinTone, SkinToneType} from './reactions.type';
|
|
2
2
|
|
|
3
|
-
const Reactions: Record<
|
|
3
|
+
const Reactions: Record<ReactionServerType, Reaction> = {
|
|
4
4
|
smile: {
|
|
5
5
|
type: 'smile',
|
|
6
6
|
codepoints: '1F642',
|
|
@@ -31,12 +31,12 @@ const Reactions: Record<ReactionType, Reaction> = {
|
|
|
31
31
|
codepoints: '1F44F',
|
|
32
32
|
shortcodes: ':clap:',
|
|
33
33
|
},
|
|
34
|
-
|
|
34
|
+
thumb_up: {
|
|
35
35
|
type: 'thumb_up',
|
|
36
36
|
codepoints: '1F44D',
|
|
37
37
|
shortcodes: ':thumbsup:',
|
|
38
38
|
},
|
|
39
|
-
|
|
39
|
+
thumb_down: {
|
|
40
40
|
type: 'thumb_down',
|
|
41
41
|
codepoints: '1F44E',
|
|
42
42
|
shortcodes: ':thumbsdown:',
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import {REACTION_RELAY_TYPES} from './constants';
|
|
2
|
+
|
|
1
3
|
export type EmoticonData = {
|
|
2
4
|
type: string;
|
|
3
5
|
codepoints?: string;
|
|
@@ -5,20 +7,21 @@ export type EmoticonData = {
|
|
|
5
7
|
};
|
|
6
8
|
|
|
7
9
|
export type SkinTone = EmoticonData;
|
|
8
|
-
|
|
10
|
+
|
|
9
11
|
export type Reaction = EmoticonData & {
|
|
10
12
|
tone?: SkinTone;
|
|
11
13
|
};
|
|
12
14
|
|
|
13
|
-
|
|
15
|
+
// eslint-disable-next-line no-shadow
|
|
16
|
+
export enum ReactionServerType {
|
|
14
17
|
smile = 'smile',
|
|
15
18
|
sad = 'sad',
|
|
16
19
|
wow = 'wow',
|
|
17
20
|
haha = 'haha',
|
|
18
21
|
celebrate = 'celebrate',
|
|
19
22
|
clap = 'clap',
|
|
20
|
-
|
|
21
|
-
|
|
23
|
+
thumb_up = 'thumb_up',
|
|
24
|
+
thumb_down = 'thumb_down',
|
|
22
25
|
heart = 'heart',
|
|
23
26
|
fire = 'fire',
|
|
24
27
|
prayer = 'prayer',
|
|
@@ -26,6 +29,7 @@ export enum ReactionType {
|
|
|
26
29
|
slow_down = 'slow_down',
|
|
27
30
|
}
|
|
28
31
|
|
|
32
|
+
// eslint-disable-next-line no-shadow
|
|
29
33
|
export enum SkinToneType {
|
|
30
34
|
normal = 'normal',
|
|
31
35
|
light = 'light',
|
|
@@ -34,3 +38,25 @@ export enum SkinToneType {
|
|
|
34
38
|
medium_dark = 'medium_dark',
|
|
35
39
|
dark = 'dark',
|
|
36
40
|
}
|
|
41
|
+
|
|
42
|
+
export type Sender = {
|
|
43
|
+
participantId: string;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
export type ProcessedReaction = {
|
|
47
|
+
reaction: Reaction;
|
|
48
|
+
sender: {
|
|
49
|
+
id: Sender['participantId'];
|
|
50
|
+
name: string;
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
type RelayEventData = {
|
|
55
|
+
relayType: (typeof REACTION_RELAY_TYPES)['REACTION'];
|
|
56
|
+
reaction: Reaction;
|
|
57
|
+
sender: Sender;
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
export type RelayEvent = {
|
|
61
|
+
data: RelayEventData;
|
|
62
|
+
};
|
|
@@ -14,16 +14,14 @@ import {
|
|
|
14
14
|
_CALL_,
|
|
15
15
|
_LEFT_,
|
|
16
16
|
_ID_,
|
|
17
|
+
RECONNECTION_STATE,
|
|
17
18
|
} from '../constants';
|
|
18
19
|
import BEHAVIORAL_METRICS from '../metrics/constants';
|
|
19
|
-
import ReconnectionError from '../common/errors/reconnection';
|
|
20
20
|
import ReconnectInProgress from '../common/errors/reconnection-in-progress';
|
|
21
|
-
import PeerConnectionManager from '../peer-connection-manager';
|
|
22
|
-
import {eventType, reconnection, errorObjects} from '../metrics/config';
|
|
23
|
-
import Media from '../media';
|
|
24
21
|
import Metrics from '../metrics';
|
|
25
|
-
import RoapCollection from '../roap/collection';
|
|
26
22
|
import Meeting from '../meeting';
|
|
23
|
+
import {MediaRequestManager} from '../multistream/mediaRequestManager';
|
|
24
|
+
import ReconnectionError from '../common/errors/reconnection';
|
|
27
25
|
|
|
28
26
|
/**
|
|
29
27
|
* Used to indicate that the reconnect logic needs to be retried.
|
|
@@ -99,7 +97,7 @@ export default class ReconnectionManager {
|
|
|
99
97
|
|
|
100
98
|
/**
|
|
101
99
|
* @instance
|
|
102
|
-
* @type {
|
|
100
|
+
* @type {RECONNECTION_STATE}
|
|
103
101
|
* @private
|
|
104
102
|
* @memberof ReconnectionManager
|
|
105
103
|
*/
|
|
@@ -141,6 +139,21 @@ export default class ReconnectionManager {
|
|
|
141
139
|
this.reset();
|
|
142
140
|
}
|
|
143
141
|
|
|
142
|
+
/**
|
|
143
|
+
* @public
|
|
144
|
+
* @memberof ReconnectionManager
|
|
145
|
+
* @returns {void}
|
|
146
|
+
*/
|
|
147
|
+
resetReconnectionTimer() {
|
|
148
|
+
this.iceState.resolve();
|
|
149
|
+
this.iceState.resolve = () => {};
|
|
150
|
+
|
|
151
|
+
if (this.iceState.timer) {
|
|
152
|
+
clearTimeout(this.iceState.timer);
|
|
153
|
+
delete this.iceState.timer;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
144
157
|
/**
|
|
145
158
|
* Sets the iceState to connected and clears any disconnect timeouts and
|
|
146
159
|
* related timeout data within the iceState.
|
|
@@ -153,13 +166,7 @@ export default class ReconnectionManager {
|
|
|
153
166
|
if (this.iceState.disconnected) {
|
|
154
167
|
LoggerProxy.logger.log('ReconnectionManager:index#iceReconnected --> ice has reconnected');
|
|
155
168
|
|
|
156
|
-
this.
|
|
157
|
-
this.iceState.resolve = () => {};
|
|
158
|
-
|
|
159
|
-
if (this.iceState.timer) {
|
|
160
|
-
clearTimeout(this.iceState.timer);
|
|
161
|
-
delete this.iceState.timer;
|
|
162
|
-
}
|
|
169
|
+
this.resetReconnectionTimer();
|
|
163
170
|
|
|
164
171
|
this.iceState.disconnected = false;
|
|
165
172
|
}
|
|
@@ -221,7 +228,53 @@ export default class ReconnectionManager {
|
|
|
221
228
|
*/
|
|
222
229
|
public cleanUp() {
|
|
223
230
|
this.reset();
|
|
224
|
-
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* Stop the local share stream.
|
|
235
|
+
*
|
|
236
|
+
* @param {string} reason a {@link SHARE_STOPPED_REASON}
|
|
237
|
+
* @returns {undefined}
|
|
238
|
+
* @private
|
|
239
|
+
* @memberof ReconnectionManager
|
|
240
|
+
*/
|
|
241
|
+
private async stopLocalShareStream(reason: string) {
|
|
242
|
+
await this.meeting.unpublishStreams([
|
|
243
|
+
this.meeting.mediaProperties.shareVideoStream,
|
|
244
|
+
this.meeting.mediaProperties.shareAudioStream,
|
|
245
|
+
]);
|
|
246
|
+
Trigger.trigger(
|
|
247
|
+
this.meeting,
|
|
248
|
+
{
|
|
249
|
+
file: 'reconnection-manager/index',
|
|
250
|
+
function: 'stopLocalShareStream',
|
|
251
|
+
},
|
|
252
|
+
EVENT_TRIGGERS.MEETING_STOPPED_SHARING_LOCAL,
|
|
253
|
+
{
|
|
254
|
+
reason,
|
|
255
|
+
}
|
|
256
|
+
);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
/**
|
|
260
|
+
* @public
|
|
261
|
+
* @memberof ReconnectionManager
|
|
262
|
+
* @returns {Boolean} true if reconnection operation is in progress
|
|
263
|
+
*/
|
|
264
|
+
isReconnectInProgress() {
|
|
265
|
+
return this.status === RECONNECTION.STATE.IN_PROGRESS;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/**
|
|
269
|
+
* Sets the reconnection status
|
|
270
|
+
*
|
|
271
|
+
* @public
|
|
272
|
+
* @param {RECONNECTION_STATE} status
|
|
273
|
+
* @memberof ReconnectionManager
|
|
274
|
+
* @returns {undefined}
|
|
275
|
+
*/
|
|
276
|
+
public setStatus(status: RECONNECTION_STATE) {
|
|
277
|
+
this.status = status;
|
|
225
278
|
}
|
|
226
279
|
|
|
227
280
|
/**
|
|
@@ -286,72 +339,65 @@ export default class ReconnectionManager {
|
|
|
286
339
|
LoggerProxy.logger.info(
|
|
287
340
|
'ReconnectionManager:index#reconnect --> Sending reconnect start metric.'
|
|
288
341
|
);
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
342
|
+
|
|
343
|
+
// @ts-ignore
|
|
344
|
+
this.webex.internal.newMetrics.submitClientEvent({
|
|
345
|
+
name: 'client.media.reconnecting',
|
|
346
|
+
options: {
|
|
347
|
+
meetingId: this.meeting.id,
|
|
348
|
+
},
|
|
292
349
|
});
|
|
293
350
|
}
|
|
294
351
|
|
|
295
|
-
return this.executeReconnection({networkDisconnect})
|
|
296
|
-
|
|
297
|
-
LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Reconnection successful.');
|
|
352
|
+
return this.executeReconnection({networkDisconnect}).catch((reconnectError) => {
|
|
353
|
+
if (reconnectError instanceof NeedsRetryError) {
|
|
298
354
|
LoggerProxy.logger.info(
|
|
299
|
-
'ReconnectionManager:index#reconnect -->
|
|
355
|
+
'ReconnectionManager:index#reconnect --> Reconnection not successful, retrying.'
|
|
300
356
|
);
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
meeting: this.meeting,
|
|
304
|
-
data: {recoveredBy: reconnection.RECOVERED_BY_NEW},
|
|
305
|
-
});
|
|
306
|
-
})
|
|
307
|
-
.catch((reconnectError) => {
|
|
308
|
-
if (reconnectError instanceof NeedsRetryError) {
|
|
309
|
-
LoggerProxy.logger.info(
|
|
310
|
-
'ReconnectionManager:index#reconnect --> Reconnection not successful, retrying.'
|
|
311
|
-
);
|
|
312
|
-
// Reset our reconnect status since we are looping back to the beginning
|
|
313
|
-
this.status = RECONNECTION.STATE.DEFAULT_STATUS;
|
|
314
|
-
|
|
315
|
-
// This is a network retry, so we should not log START metrics again
|
|
316
|
-
return this.reconnect({networkDisconnect: true, networkRetry: true});
|
|
317
|
-
}
|
|
357
|
+
// Reset our reconnect status since we are looping back to the beginning
|
|
358
|
+
this.status = RECONNECTION.STATE.DEFAULT_STATUS;
|
|
318
359
|
|
|
319
|
-
//
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
reconnectError.message
|
|
323
|
-
);
|
|
324
|
-
LoggerProxy.logger.info(
|
|
325
|
-
'ReconnectionManager:index#reconnect --> Sending reconnect abort metric.'
|
|
326
|
-
);
|
|
360
|
+
// This is a network retry, so we should not log START metrics again
|
|
361
|
+
return this.reconnect({networkDisconnect: true, networkRetry: true});
|
|
362
|
+
}
|
|
327
363
|
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
fatal: true,
|
|
337
|
-
name: errorObjects.name.mediaEngine,
|
|
338
|
-
shownToUser: false,
|
|
339
|
-
},
|
|
340
|
-
],
|
|
341
|
-
},
|
|
342
|
-
};
|
|
343
|
-
|
|
344
|
-
Metrics.postEvent(reconnectMetric);
|
|
345
|
-
if (reconnectError instanceof NeedsRejoinError) {
|
|
346
|
-
// send call aborded event with catogery as expected as we are trying to rejoin
|
|
347
|
-
|
|
348
|
-
if (this.autoRejoinEnabled) {
|
|
349
|
-
return this.rejoinMeeting(reconnectError.wasSharing);
|
|
350
|
-
}
|
|
351
|
-
}
|
|
364
|
+
// Reconnect has failed
|
|
365
|
+
LoggerProxy.logger.error(
|
|
366
|
+
'ReconnectionManager:index#reconnect --> Reconnection failed.',
|
|
367
|
+
reconnectError.message
|
|
368
|
+
);
|
|
369
|
+
LoggerProxy.logger.info(
|
|
370
|
+
'ReconnectionManager:index#reconnect --> Sending reconnect abort metric.'
|
|
371
|
+
);
|
|
352
372
|
|
|
353
|
-
|
|
373
|
+
// @ts-ignore
|
|
374
|
+
this.webex.internal.newMetrics.submitClientEvent({
|
|
375
|
+
name: 'client.call.aborted',
|
|
376
|
+
payload: {
|
|
377
|
+
errors: [
|
|
378
|
+
{
|
|
379
|
+
category: 'expected',
|
|
380
|
+
errorCode: 2008,
|
|
381
|
+
fatal: true,
|
|
382
|
+
name: 'media-engine',
|
|
383
|
+
shownToUser: false,
|
|
384
|
+
},
|
|
385
|
+
],
|
|
386
|
+
},
|
|
387
|
+
options: {
|
|
388
|
+
meetingId: this.meeting.id,
|
|
389
|
+
},
|
|
354
390
|
});
|
|
391
|
+
if (reconnectError instanceof NeedsRejoinError) {
|
|
392
|
+
// send call aborded event with catogery as expected as we are trying to rejoin
|
|
393
|
+
|
|
394
|
+
if (this.autoRejoinEnabled) {
|
|
395
|
+
return this.rejoinMeeting(reconnectError.wasSharing);
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
throw reconnectError;
|
|
400
|
+
});
|
|
355
401
|
}
|
|
356
402
|
|
|
357
403
|
/**
|
|
@@ -369,6 +415,12 @@ export default class ReconnectionManager {
|
|
|
369
415
|
'ReconnectionManager:index#executeReconnection --> Attempting to reconnect to meeting.'
|
|
370
416
|
);
|
|
371
417
|
|
|
418
|
+
const wasSharing = this.meeting.shareStatus === SHARE_STATUS.LOCAL_SHARE_ACTIVE;
|
|
419
|
+
|
|
420
|
+
if (wasSharing) {
|
|
421
|
+
await this.stopLocalShareStream(SHARE_STOPPED_REASON.MEDIA_RECONNECTION);
|
|
422
|
+
}
|
|
423
|
+
|
|
372
424
|
if (networkDisconnect) {
|
|
373
425
|
try {
|
|
374
426
|
await this.reconnectMercuryWebSocket();
|
|
@@ -385,29 +437,29 @@ export default class ReconnectionManager {
|
|
|
385
437
|
}
|
|
386
438
|
}
|
|
387
439
|
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
440
|
+
if (!this.webex.credentials.isUnverifiedGuest) {
|
|
441
|
+
try {
|
|
442
|
+
LoggerProxy.logger.info(
|
|
443
|
+
'ReconnectionManager:index#executeReconnection --> Updating meeting data from server.'
|
|
444
|
+
);
|
|
445
|
+
await this.webex.meetings.syncMeetings({keepOnlyLocusMeetings: false});
|
|
446
|
+
} catch (syncError) {
|
|
447
|
+
LoggerProxy.logger.info(
|
|
448
|
+
'ReconnectionManager:index#executeReconnection --> Unable to sync meetings, reconnecting.',
|
|
449
|
+
syncError
|
|
450
|
+
);
|
|
451
|
+
throw new NeedsRetryError(syncError);
|
|
452
|
+
}
|
|
401
453
|
}
|
|
402
454
|
|
|
403
455
|
// TODO: try to improve this logic as the reconnection manager saves the instance of deleted meeting object
|
|
404
456
|
// So that on rejoin it known what parametrs it was using
|
|
405
457
|
if (!this.meeting || !this.webex.meetings.getMeetingByType(_ID_, this.meeting.id)) {
|
|
406
458
|
LoggerProxy.logger.info(
|
|
407
|
-
'ReconnectionManager:index#executeReconnection --> Meeting got deleted due to inactivity or ended remotely
|
|
459
|
+
'ReconnectionManager:index#executeReconnection --> Meeting got deleted due to inactivity or ended remotely.'
|
|
408
460
|
);
|
|
409
461
|
|
|
410
|
-
throw new Error('Unable to rejoin a meeting already ended or inactive
|
|
462
|
+
throw new Error('Unable to rejoin a meeting already ended or inactive.');
|
|
411
463
|
}
|
|
412
464
|
|
|
413
465
|
LoggerProxy.logger.info(
|
|
@@ -427,14 +479,13 @@ export default class ReconnectionManager {
|
|
|
427
479
|
const media = await this.reconnectMedia();
|
|
428
480
|
|
|
429
481
|
LoggerProxy.logger.log(
|
|
430
|
-
'ReconnectionManager:index#executeReconnection -->
|
|
482
|
+
'ReconnectionManager:index#executeReconnection --> webRTC media connection renewed and local sdp offer sent'
|
|
431
483
|
);
|
|
432
|
-
this.status = RECONNECTION.STATE.COMPLETE;
|
|
433
484
|
|
|
434
485
|
return media;
|
|
435
486
|
} catch (error) {
|
|
436
487
|
LoggerProxy.logger.error(
|
|
437
|
-
'ReconnectionManager:index#executeReconnection -->
|
|
488
|
+
'ReconnectionManager:index#executeReconnection --> failed to renew webRTC media connection or initiate offer'
|
|
438
489
|
);
|
|
439
490
|
this.status = RECONNECTION.STATE.FAILURE;
|
|
440
491
|
|
|
@@ -454,32 +505,12 @@ export default class ReconnectionManager {
|
|
|
454
505
|
LoggerProxy.logger.info(
|
|
455
506
|
'ReconnectionManager:index#rejoinMeeting --> attemping meeting rejoin'
|
|
456
507
|
);
|
|
457
|
-
const previousCorrelationId = this.meeting.correlationId;
|
|
458
508
|
|
|
459
509
|
await this.meeting.join({rejoin: true});
|
|
460
510
|
LoggerProxy.logger.info('ReconnectionManager:index#rejoinMeeting --> meeting rejoined');
|
|
461
511
|
|
|
462
|
-
RoapCollection.deleteSession(previousCorrelationId);
|
|
463
|
-
|
|
464
512
|
if (wasSharing) {
|
|
465
|
-
|
|
466
|
-
Media.stopTracks(this.meeting.mediaProperties.shareTrack);
|
|
467
|
-
this.meeting.isSharing = false;
|
|
468
|
-
if (this.shareStatus === SHARE_STATUS.LOCAL_SHARE_ACTIVE) {
|
|
469
|
-
this.meeting.shareStatus = SHARE_STATUS.NO_SHARE;
|
|
470
|
-
}
|
|
471
|
-
this.meeting.mediaProperties.mediaDirection.sendShare = false;
|
|
472
|
-
Trigger.trigger(
|
|
473
|
-
this.meeting,
|
|
474
|
-
{
|
|
475
|
-
file: 'reconnection-manager/index',
|
|
476
|
-
function: 'rejoinMeeting',
|
|
477
|
-
},
|
|
478
|
-
EVENT_TRIGGERS.MEETING_STOPPED_SHARING_LOCAL,
|
|
479
|
-
{
|
|
480
|
-
reason: SHARE_STOPPED_REASON.MEETING_REJOIN,
|
|
481
|
-
}
|
|
482
|
-
);
|
|
513
|
+
await this.stopLocalShareStream(SHARE_STOPPED_REASON.MEETING_REJOIN);
|
|
483
514
|
}
|
|
484
515
|
} catch (joinError) {
|
|
485
516
|
this.rejoinAttempts += 1;
|
|
@@ -520,33 +551,37 @@ export default class ReconnectionManager {
|
|
|
520
551
|
* @private
|
|
521
552
|
* @memberof ReconnectionManager
|
|
522
553
|
*/
|
|
523
|
-
reconnectMedia() {
|
|
554
|
+
async reconnectMedia() {
|
|
555
|
+
LoggerProxy.logger.log('ReconnectionManager:index#reconnectMedia --> do turn discovery');
|
|
556
|
+
|
|
557
|
+
// do the TURN server discovery again and ignore reachability results since the TURN server might change
|
|
558
|
+
const turnServerResult = await this.meeting.roap.doTurnDiscovery(this.meeting, true, true);
|
|
559
|
+
|
|
560
|
+
const iceServers = [];
|
|
561
|
+
|
|
562
|
+
if (turnServerResult.turnServerInfo) {
|
|
563
|
+
iceServers.push({
|
|
564
|
+
urls: turnServerResult.turnServerInfo.url,
|
|
565
|
+
username: turnServerResult.turnServerInfo.username || '',
|
|
566
|
+
credential: turnServerResult.turnServerInfo.password || '',
|
|
567
|
+
});
|
|
568
|
+
}
|
|
569
|
+
|
|
524
570
|
LoggerProxy.logger.log(
|
|
525
|
-
'ReconnectionManager:index#reconnectMedia -->
|
|
571
|
+
'ReconnectionManager:index#reconnectMedia --> renew webRTC media connection and send local sdp offer'
|
|
526
572
|
);
|
|
527
573
|
|
|
528
|
-
|
|
529
|
-
.then(() =>
|
|
530
|
-
Media.attachMedia(this.meeting.mediaProperties, {
|
|
531
|
-
meetingId: this.meeting.id,
|
|
532
|
-
remoteQualityLevel: this.meeting.mediaProperties.remoteQualityLevel,
|
|
533
|
-
enableRtx: this.meeting.config.enableRtx,
|
|
534
|
-
enableExtmap: this.meeting.config.enableExtmap,
|
|
535
|
-
})
|
|
536
|
-
)
|
|
537
|
-
.then((peerConnection) => this.meeting.setRemoteStream(peerConnection))
|
|
538
|
-
.then(() => {
|
|
539
|
-
LoggerProxy.logger.log(
|
|
540
|
-
'ReconnectionManager:index#reconnectMedia --> Sending ROAP media request'
|
|
541
|
-
);
|
|
574
|
+
await this.meeting.mediaProperties.webrtcMediaConnection.reconnect(iceServers);
|
|
542
575
|
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
576
|
+
// resend media requests
|
|
577
|
+
if (this.meeting.isMultistream) {
|
|
578
|
+
Object.values(this.meeting.mediaRequestManagers).forEach(
|
|
579
|
+
(mediaRequestManager: MediaRequestManager) => {
|
|
580
|
+
mediaRequestManager.clearPreviousRequests();
|
|
581
|
+
mediaRequestManager.commit();
|
|
582
|
+
}
|
|
583
|
+
);
|
|
584
|
+
}
|
|
550
585
|
}
|
|
551
586
|
|
|
552
587
|
/**
|
|
@@ -596,27 +631,4 @@ export default class ReconnectionManager {
|
|
|
596
631
|
throw connectError;
|
|
597
632
|
}
|
|
598
633
|
}
|
|
599
|
-
|
|
600
|
-
/**
|
|
601
|
-
* @param {Meeting} meeting
|
|
602
|
-
* @returns {undefined}
|
|
603
|
-
* @private
|
|
604
|
-
* @memberof ReconnectionManager
|
|
605
|
-
*/
|
|
606
|
-
private static async setupPeerConnection(meeting: Meeting) {
|
|
607
|
-
LoggerProxy.logger.log(
|
|
608
|
-
'ReconnectionManager:index#setupPeerConnection --> Begin resetting peer connection'
|
|
609
|
-
);
|
|
610
|
-
// close pcs, unset to null and create a new one with out closing any streams
|
|
611
|
-
PeerConnectionManager.close(meeting.mediaProperties.peerConnection);
|
|
612
|
-
meeting.mediaProperties.unsetPeerConnection();
|
|
613
|
-
|
|
614
|
-
const turnServerResult = await meeting.roap.doTurnDiscovery(meeting, true);
|
|
615
|
-
|
|
616
|
-
meeting.mediaProperties.reInitiatePeerconnection(turnServerResult.turnServerInfo);
|
|
617
|
-
PeerConnectionManager.setPeerConnectionEvents(meeting);
|
|
618
|
-
|
|
619
|
-
// update the peerconnection in the stats manager when ever we reconnect
|
|
620
|
-
meeting.statsAnalyzer.updatePeerconnection(meeting.mediaProperties.peerConnection);
|
|
621
|
-
}
|
|
622
634
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import PermissionError from '../common/errors/permission';
|
|
2
|
-
import {CONTROLS, HTTP_VERBS} from '../constants';
|
|
2
|
+
import {CONTROLS, HTTP_VERBS, SELF_POLICY} from '../constants';
|
|
3
3
|
import MeetingRequest from '../meeting/request';
|
|
4
4
|
import RecordingAction from './enums';
|
|
5
5
|
import Util from './util';
|
|
@@ -28,6 +28,14 @@ export default class RecordingController {
|
|
|
28
28
|
*/
|
|
29
29
|
private displayHints: Array<string> = [];
|
|
30
30
|
|
|
31
|
+
/**
|
|
32
|
+
* @instance
|
|
33
|
+
* @type {Object}
|
|
34
|
+
* @private
|
|
35
|
+
* @memberof RecordingInfo
|
|
36
|
+
*/
|
|
37
|
+
private selfUserPolicies: Record<SELF_POLICY, boolean>;
|
|
38
|
+
|
|
31
39
|
/**
|
|
32
40
|
* @instance
|
|
33
41
|
* @type {string}
|
|
@@ -81,7 +89,6 @@ export default class RecordingController {
|
|
|
81
89
|
|
|
82
90
|
/**
|
|
83
91
|
* @param {MeetingRequest} request
|
|
84
|
-
* @param {LocusInfo} info
|
|
85
92
|
* @returns {void}
|
|
86
93
|
* @private
|
|
87
94
|
* @memberof RecordingController
|
|
@@ -126,6 +133,16 @@ export default class RecordingController {
|
|
|
126
133
|
this.displayHints = hints;
|
|
127
134
|
}
|
|
128
135
|
|
|
136
|
+
/**
|
|
137
|
+
* @param {Object} selfUserPolicies
|
|
138
|
+
* @returns {void}
|
|
139
|
+
* @public
|
|
140
|
+
* @memberof RecordingController
|
|
141
|
+
*/
|
|
142
|
+
public setUserPolicy(selfUserPolicies: Record<SELF_POLICY, boolean>) {
|
|
143
|
+
this.selfUserPolicies = selfUserPolicies;
|
|
144
|
+
}
|
|
145
|
+
|
|
129
146
|
/**
|
|
130
147
|
* @param {string} id
|
|
131
148
|
* @returns {void}
|
|
@@ -264,7 +281,7 @@ export default class RecordingController {
|
|
|
264
281
|
);
|
|
265
282
|
|
|
266
283
|
// assumes action is proper cased (i.e., Example)
|
|
267
|
-
if (Util?.[`canUser${action}`](this.displayHints)) {
|
|
284
|
+
if (Util?.[`canUser${action}`](this.displayHints, this.selfUserPolicies)) {
|
|
268
285
|
if (this.serviceUrl) {
|
|
269
286
|
return this.recordingService(action);
|
|
270
287
|
}
|