@webex/plugin-meetings 3.8.0 → 3.8.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 +26 -13
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +70 -6
- package/dist/breakouts/index.js.map +1 -1
- package/dist/common/errors/webex-errors.js +12 -2
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/config.js +5 -1
- package/dist/config.js.map +1 -1
- package/dist/constants.js +28 -123
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/enums.js +3 -0
- package/dist/controls-options-manager/enums.js.map +1 -1
- package/dist/controls-options-manager/types.js.map +1 -1
- package/dist/controls-options-manager/util.js +78 -0
- package/dist/controls-options-manager/util.js.map +1 -1
- package/dist/interpretation/index.js +4 -4
- package/dist/interpretation/index.js.map +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/locus-info/controlsUtils.js +37 -11
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/index.js +92 -12
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/selfUtils.js +432 -418
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +17 -17
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +94 -6
- package/dist/media/properties.js.map +1 -1
- package/dist/meeting/brbState.js +9 -2
- package/dist/meeting/brbState.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +21 -1
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +678 -344
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.js +21 -22
- package/dist/meeting/locusMediaRequest.js.map +1 -1
- package/dist/meeting/muteState.js +4 -4
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +30 -0
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/request.type.js.map +1 -1
- package/dist/meeting/util.js +13 -2
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +373 -68
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/utilv2.js +5 -1
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/index.js +136 -1
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/util.js +14 -0
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +55 -9
- package/dist/member/index.js.map +1 -1
- package/dist/member/types.js +3 -0
- package/dist/member/types.js.map +1 -1
- package/dist/member/util.js +335 -353
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +137 -29
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +38 -0
- package/dist/members/request.js.map +1 -1
- package/dist/members/util.js +36 -1
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.js +10 -0
- package/dist/metrics/constants.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +40 -8
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/reachability/clusterReachability.js +63 -27
- package/dist/reachability/clusterReachability.js.map +1 -1
- package/dist/reachability/index.js +107 -47
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/reachability.types.js +14 -0
- package/dist/reachability/reachability.types.js.map +1 -1
- package/dist/reachability/request.js +19 -3
- package/dist/reachability/request.js.map +1 -1
- package/dist/reconnection-manager/index.js +2 -2
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/util.js +5 -5
- package/dist/recording-controller/util.js.map +1 -1
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/turnDiscovery.js +45 -27
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/roap/types.js +17 -0
- package/dist/roap/types.js.map +1 -0
- package/dist/types/common/errors/webex-errors.d.ts +7 -1
- package/dist/types/config.d.ts +3 -0
- package/dist/types/constants.d.ts +20 -85
- package/dist/types/controls-options-manager/enums.d.ts +4 -1
- package/dist/types/controls-options-manager/types.d.ts +10 -1
- package/dist/types/locus-info/index.d.ts +3 -3
- package/dist/types/locus-info/selfUtils.d.ts +216 -1
- package/dist/types/media/properties.d.ts +15 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +20 -0
- package/dist/types/meeting/index.d.ts +65 -1
- package/dist/types/meeting/muteState.d.ts +0 -1
- package/dist/types/meeting/request.d.ts +12 -1
- package/dist/types/meeting/request.type.d.ts +6 -0
- package/dist/types/meeting/util.d.ts +3 -1
- package/dist/types/meeting-info/meeting-info-v2.d.ts +82 -1
- package/dist/types/meetings/index.d.ts +57 -0
- package/dist/types/member/index.d.ts +21 -6
- package/dist/types/member/types.d.ts +73 -14
- package/dist/types/member/util.d.ts +156 -1
- package/dist/types/members/collection.d.ts +6 -5
- package/dist/types/members/index.d.ts +32 -43
- package/dist/types/members/request.d.ts +26 -0
- package/dist/types/members/util.d.ts +27 -0
- package/dist/types/metrics/constants.d.ts +10 -0
- package/dist/types/multistream/remoteMediaManager.d.ts +10 -1
- package/dist/types/reachability/clusterReachability.d.ts +15 -7
- package/dist/types/reachability/index.d.ts +10 -1
- package/dist/types/reachability/reachability.types.d.ts +5 -0
- package/dist/types/roap/index.d.ts +3 -2
- package/dist/types/roap/turnDiscovery.d.ts +5 -17
- package/dist/types/roap/types.d.ts +16 -0
- package/dist/webinar/index.js +2 -2
- package/dist/webinar/index.js.map +1 -1
- package/package.json +24 -23
- package/src/breakouts/index.ts +69 -0
- package/src/common/errors/webex-errors.ts +8 -1
- package/src/config.ts +3 -0
- package/src/constants.ts +30 -90
- package/src/controls-options-manager/enums.ts +3 -0
- package/src/controls-options-manager/types.ts +16 -1
- package/src/controls-options-manager/util.ts +93 -0
- package/src/interpretation/index.ts +3 -3
- package/src/locus-info/controlsUtils.ts +59 -14
- package/src/locus-info/index.ts +97 -13
- package/src/locus-info/selfUtils.ts +496 -442
- package/src/media/index.ts +23 -21
- package/src/media/properties.ts +96 -0
- package/src/meeting/brbState.ts +11 -2
- package/src/meeting/in-meeting-actions.ts +40 -0
- package/src/meeting/index.ts +470 -105
- package/src/meeting/locusMediaRequest.ts +27 -22
- package/src/meeting/muteState.ts +4 -4
- package/src/meeting/request.ts +36 -1
- package/src/meeting/request.type.ts +7 -0
- package/src/meeting/util.ts +11 -2
- package/src/meeting-info/meeting-info-v2.ts +254 -8
- package/src/meeting-info/utilv2.ts +5 -0
- package/src/meetings/index.ts +148 -1
- package/src/meetings/util.ts +18 -0
- package/src/member/index.ts +68 -22
- package/src/member/types.ts +82 -16
- package/src/member/util.ts +357 -350
- package/src/members/collection.ts +4 -3
- package/src/members/index.ts +137 -18
- package/src/members/request.ts +44 -0
- package/src/members/util.ts +43 -1
- package/src/metrics/constants.ts +10 -0
- package/src/multistream/remoteMediaManager.ts +32 -10
- package/src/reachability/clusterReachability.ts +73 -26
- package/src/reachability/index.ts +62 -1
- package/src/reachability/reachability.types.ts +6 -0
- package/src/reachability/request.ts +7 -0
- package/src/reconnection-manager/index.ts +2 -2
- package/src/recording-controller/util.ts +17 -13
- package/src/roap/index.ts +3 -7
- package/src/roap/turnDiscovery.ts +34 -39
- package/src/roap/types.ts +23 -0
- package/src/webinar/index.ts +1 -1
- package/test/unit/spec/breakouts/index.ts +167 -95
- package/test/unit/spec/controls-options-manager/util.js +178 -0
- package/test/unit/spec/interpretation/index.ts +39 -1
- package/test/unit/spec/locus-info/controlsUtils.js +155 -9
- package/test/unit/spec/locus-info/index.js +209 -73
- package/test/unit/spec/locus-info/selfUtils.js +98 -24
- package/test/unit/spec/media/index.ts +150 -18
- package/test/unit/spec/media/properties.ts +130 -0
- package/test/unit/spec/meeting/brbState.ts +40 -2
- package/test/unit/spec/meeting/in-meeting-actions.ts +23 -4
- package/test/unit/spec/meeting/index.js +804 -139
- package/test/unit/spec/meeting/locusMediaRequest.ts +95 -87
- package/test/unit/spec/meeting/muteState.js +73 -2
- package/test/unit/spec/meeting/request.js +32 -1
- package/test/unit/spec/meeting/utils.js +119 -18
- package/test/unit/spec/meeting-info/meetinginfov2.js +484 -114
- package/test/unit/spec/meeting-info/utilv2.js +19 -0
- package/test/unit/spec/meetings/index.js +146 -2
- package/test/unit/spec/member/index.js +7 -0
- package/test/unit/spec/member/util.js +24 -0
- package/test/unit/spec/members/index.js +304 -78
- package/test/unit/spec/members/request.js +68 -22
- package/test/unit/spec/members/utils.js +75 -0
- package/test/unit/spec/multistream/remoteMediaManager.ts +397 -118
- package/test/unit/spec/reachability/clusterReachability.ts +88 -56
- package/test/unit/spec/reachability/index.ts +97 -0
- package/test/unit/spec/reachability/request.js +47 -2
- package/test/unit/spec/reconnection-manager/index.js +4 -4
- package/test/unit/spec/roap/turnDiscovery.ts +110 -28
- package/test/unit/spec/webinar/index.ts +5 -0
- package/dist/annotation/annotation.types.d.ts +0 -42
- package/dist/annotation/constants.d.ts +0 -31
- package/dist/annotation/index.d.ts +0 -117
- package/dist/breakouts/breakout.d.ts +0 -8
- package/dist/breakouts/collection.d.ts +0 -5
- package/dist/breakouts/edit-lock-error.d.ts +0 -15
- package/dist/breakouts/events.d.ts +0 -8
- package/dist/breakouts/index.d.ts +0 -5
- package/dist/breakouts/request.d.ts +0 -22
- package/dist/breakouts/utils.d.ts +0 -15
- package/dist/common/browser-detection.d.ts +0 -9
- package/dist/common/collection.d.ts +0 -48
- package/dist/common/config.d.ts +0 -2
- package/dist/common/errors/captcha-error.d.ts +0 -15
- package/dist/common/errors/intent-to-join.d.ts +0 -16
- package/dist/common/errors/join-meeting.d.ts +0 -17
- package/dist/common/errors/media.d.ts +0 -15
- package/dist/common/errors/no-meeting-info.d.ts +0 -14
- package/dist/common/errors/parameter.d.ts +0 -15
- package/dist/common/errors/password-error.d.ts +0 -15
- package/dist/common/errors/permission.d.ts +0 -14
- package/dist/common/errors/reclaim-host-role-error.js +0 -149
- package/dist/common/errors/reclaim-host-role-error.js.map +0 -1
- package/dist/common/errors/reclaim-host-role-errors.d.ts +0 -60
- package/dist/common/errors/reconnection-in-progress.d.ts +0 -9
- package/dist/common/errors/reconnection-in-progress.js +0 -33
- package/dist/common/errors/reconnection-in-progress.js.map +0 -1
- package/dist/common/errors/reconnection.d.ts +0 -15
- package/dist/common/errors/stats.d.ts +0 -15
- package/dist/common/errors/webex-errors.d.ts +0 -93
- package/dist/common/errors/webex-meetings-error.d.ts +0 -20
- package/dist/common/events/events-scope.d.ts +0 -17
- package/dist/common/events/events.d.ts +0 -12
- package/dist/common/events/trigger-proxy.d.ts +0 -2
- package/dist/common/events/util.d.ts +0 -2
- package/dist/common/logs/logger-config.d.ts +0 -2
- package/dist/common/logs/logger-proxy.d.ts +0 -2
- package/dist/common/logs/request.d.ts +0 -36
- package/dist/common/queue.d.ts +0 -34
- package/dist/config.d.ts +0 -72
- package/dist/constants.d.ts +0 -1088
- package/dist/controls-options-manager/constants.d.ts +0 -4
- package/dist/controls-options-manager/enums.d.ts +0 -15
- package/dist/controls-options-manager/index.d.ts +0 -136
- package/dist/controls-options-manager/types.d.ts +0 -43
- package/dist/controls-options-manager/util.d.ts +0 -1
- package/dist/index.d.ts +0 -7
- package/dist/interceptors/index.d.ts +0 -2
- package/dist/interceptors/locusRetry.d.ts +0 -27
- package/dist/interpretation/collection.d.ts +0 -5
- package/dist/interpretation/index.d.ts +0 -5
- package/dist/interpretation/siLanguage.d.ts +0 -5
- package/dist/locus-info/controlsUtils.d.ts +0 -2
- package/dist/locus-info/embeddedAppsUtils.d.ts +0 -2
- package/dist/locus-info/fullState.d.ts +0 -2
- package/dist/locus-info/hostUtils.d.ts +0 -2
- package/dist/locus-info/index.d.ts +0 -322
- package/dist/locus-info/infoUtils.d.ts +0 -2
- package/dist/locus-info/mediaSharesUtils.d.ts +0 -2
- package/dist/locus-info/parser.d.ts +0 -272
- package/dist/locus-info/selfUtils.d.ts +0 -2
- package/dist/media/index.d.ts +0 -34
- package/dist/media/properties.d.ts +0 -93
- package/dist/media/util.d.ts +0 -2
- package/dist/mediaQualityMetrics/config.d.ts +0 -241
- package/dist/mediaQualityMetrics/config.js +0 -502
- package/dist/mediaQualityMetrics/config.js.map +0 -1
- package/dist/meeting/effectsState.js +0 -260
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/meeting/in-meeting-actions.d.ts +0 -167
- package/dist/meeting/index.d.ts +0 -1825
- package/dist/meeting/locusMediaRequest.d.ts +0 -74
- package/dist/meeting/muteState.d.ts +0 -178
- package/dist/meeting/request.d.ts +0 -295
- package/dist/meeting/request.type.d.ts +0 -11
- package/dist/meeting/state.d.ts +0 -9
- package/dist/meeting/util.d.ts +0 -119
- package/dist/meeting/voicea-meeting.d.ts +0 -16
- package/dist/meeting-info/collection.d.ts +0 -20
- package/dist/meeting-info/index.d.ts +0 -69
- package/dist/meeting-info/meeting-info-v2.d.ts +0 -123
- package/dist/meeting-info/request.d.ts +0 -22
- package/dist/meeting-info/util.d.ts +0 -2
- package/dist/meeting-info/utilv2.d.ts +0 -2
- package/dist/meetings/collection.d.ts +0 -40
- package/dist/meetings/index.d.ts +0 -390
- package/dist/meetings/meetings.types.d.ts +0 -4
- package/dist/meetings/request.d.ts +0 -27
- package/dist/meetings/util.d.ts +0 -18
- package/dist/member/index.d.ts +0 -160
- package/dist/member/member.types.js +0 -17
- package/dist/member/member.types.js.map +0 -1
- package/dist/member/types.d.ts +0 -32
- package/dist/member/util.d.ts +0 -2
- package/dist/members/collection.d.ts +0 -29
- package/dist/members/index.d.ts +0 -353
- package/dist/members/request.d.ts +0 -114
- package/dist/members/types.d.ts +0 -25
- package/dist/members/util.d.ts +0 -215
- package/dist/metrics/config.js +0 -276
- package/dist/metrics/config.js.map +0 -1
- package/dist/metrics/constants.d.ts +0 -70
- package/dist/metrics/index.d.ts +0 -45
- package/dist/multistream/mediaRequestManager.d.ts +0 -119
- package/dist/multistream/receiveSlot.d.ts +0 -68
- package/dist/multistream/receiveSlotManager.d.ts +0 -56
- package/dist/multistream/remoteMedia.d.ts +0 -72
- package/dist/multistream/remoteMediaGroup.d.ts +0 -49
- package/dist/multistream/remoteMediaManager.d.ts +0 -300
- package/dist/multistream/sendSlotManager.d.ts +0 -69
- package/dist/networkQualityMonitor/index.d.ts +0 -70
- package/dist/networkQualityMonitor/index.js +0 -221
- package/dist/networkQualityMonitor/index.js.map +0 -1
- package/dist/peer-connection-manager/index.js +0 -671
- package/dist/peer-connection-manager/index.js.map +0 -1
- package/dist/peer-connection-manager/util.js +0 -109
- package/dist/peer-connection-manager/util.js.map +0 -1
- package/dist/personal-meeting-room/index.d.ts +0 -47
- package/dist/personal-meeting-room/request.d.ts +0 -14
- package/dist/personal-meeting-room/util.d.ts +0 -2
- package/dist/reachability/clusterReachability.d.ts +0 -109
- package/dist/reachability/index.d.ts +0 -105
- package/dist/reachability/request.d.ts +0 -39
- package/dist/reachability/util.d.ts +0 -8
- package/dist/reactions/constants.d.ts +0 -3
- package/dist/reactions/reactions.d.ts +0 -4
- package/dist/reactions/reactions.type.d.ts +0 -52
- package/dist/reconnection-manager/index.d.ts +0 -136
- package/dist/recording-controller/enums.d.ts +0 -7
- package/dist/recording-controller/index.d.ts +0 -207
- package/dist/recording-controller/util.d.ts +0 -14
- package/dist/roap/collection.js +0 -62
- package/dist/roap/collection.js.map +0 -1
- package/dist/roap/handler.js +0 -275
- package/dist/roap/handler.js.map +0 -1
- package/dist/roap/index.d.ts +0 -86
- package/dist/roap/request.d.ts +0 -39
- package/dist/roap/state.js +0 -126
- package/dist/roap/state.js.map +0 -1
- package/dist/roap/turnDiscovery.d.ts +0 -155
- package/dist/roap/util.js +0 -75
- package/dist/roap/util.js.map +0 -1
- package/dist/rtcMetrics/constants.d.ts +0 -4
- package/dist/rtcMetrics/constants.js +0 -11
- package/dist/rtcMetrics/constants.js.map +0 -1
- package/dist/rtcMetrics/index.d.ts +0 -61
- package/dist/rtcMetrics/index.js +0 -197
- package/dist/rtcMetrics/index.js.map +0 -1
- package/dist/statsAnalyzer/global.d.ts +0 -36
- package/dist/statsAnalyzer/global.js +0 -126
- package/dist/statsAnalyzer/global.js.map +0 -1
- package/dist/statsAnalyzer/index.d.ts +0 -217
- package/dist/statsAnalyzer/index.js +0 -1013
- package/dist/statsAnalyzer/index.js.map +0 -1
- package/dist/statsAnalyzer/mqaUtil.d.ts +0 -48
- package/dist/statsAnalyzer/mqaUtil.js +0 -179
- package/dist/statsAnalyzer/mqaUtil.js.map +0 -1
- package/dist/transcription/index.d.ts +0 -64
- package/dist/types/common/errors/reconnection-in-progress.d.ts +0 -9
- package/dist/types/mediaQualityMetrics/config.d.ts +0 -241
- package/dist/types/networkQualityMonitor/index.d.ts +0 -70
- package/dist/types/rtcMetrics/constants.d.ts +0 -4
- package/dist/types/rtcMetrics/index.d.ts +0 -71
- package/dist/types/statsAnalyzer/global.d.ts +0 -36
- package/dist/types/statsAnalyzer/index.d.ts +0 -217
- package/dist/types/statsAnalyzer/mqaUtil.d.ts +0 -48
- package/dist/webinar/collection.d.ts +0 -16
- package/dist/webinar/index.d.ts +0 -5
package/src/meetings/index.ts
CHANGED
@@ -807,6 +807,67 @@ export default class Meetings extends WebexPlugin {
|
|
807
807
|
}
|
808
808
|
}
|
809
809
|
|
810
|
+
/**
|
811
|
+
* API to toggle usage of audio main DTX, needs to be called before webex.meetings.register()
|
812
|
+
*
|
813
|
+
* @param {Boolean} newValue
|
814
|
+
* @private
|
815
|
+
* @memberof Meetings
|
816
|
+
* @returns {undefined}
|
817
|
+
*/
|
818
|
+
private _toggleDisableAudioMainDtx(newValue: boolean) {
|
819
|
+
if (typeof newValue !== 'boolean') {
|
820
|
+
return;
|
821
|
+
}
|
822
|
+
|
823
|
+
// @ts-ignore
|
824
|
+
if (this.config.experimental.disableAudioMainDtx !== newValue) {
|
825
|
+
// @ts-ignore
|
826
|
+
this.config.experimental.disableAudioMainDtx = newValue;
|
827
|
+
}
|
828
|
+
}
|
829
|
+
|
830
|
+
/**
|
831
|
+
* API to toggle usage of audio twcc support
|
832
|
+
*
|
833
|
+
* @param {Boolean} newValue
|
834
|
+
* @private
|
835
|
+
* @memberof Meetings
|
836
|
+
* @returns {undefined}
|
837
|
+
*/
|
838
|
+
private _toggleEnableAudioTwccForMultistream(newValue: boolean) {
|
839
|
+
if (typeof newValue !== 'boolean') {
|
840
|
+
return;
|
841
|
+
}
|
842
|
+
|
843
|
+
// @ts-ignore
|
844
|
+
if (this.config.enableAudioTwccForMultistream !== newValue) {
|
845
|
+
// @ts-ignore
|
846
|
+
this.config.enableAudioTwccForMultistream = newValue;
|
847
|
+
}
|
848
|
+
}
|
849
|
+
|
850
|
+
/**
|
851
|
+
* API to toggle stopping ICE Candidates Gathering after first relay candidate,
|
852
|
+
* needs to be called before webex.meetings.joinWithMedia()
|
853
|
+
*
|
854
|
+
* @param {Boolean} newValue
|
855
|
+
* @private
|
856
|
+
* @memberof Meetings
|
857
|
+
* @returns {undefined}
|
858
|
+
*/
|
859
|
+
private _toggleStopIceGatheringAfterFirstRelayCandidate(newValue: boolean) {
|
860
|
+
if (typeof newValue !== 'boolean') {
|
861
|
+
return;
|
862
|
+
}
|
863
|
+
|
864
|
+
// @ts-ignore
|
865
|
+
if (this.config.stopIceGatheringAfterFirstRelayCandidate !== newValue) {
|
866
|
+
// @ts-ignore
|
867
|
+
this.config.stopIceGatheringAfterFirstRelayCandidate = newValue;
|
868
|
+
}
|
869
|
+
}
|
870
|
+
|
810
871
|
/**
|
811
872
|
* Executes a registration step and updates the registration status.
|
812
873
|
* @param {Function} step - The registration step to execute.
|
@@ -854,7 +915,7 @@ export default class Meetings extends WebexPlugin {
|
|
854
915
|
this.executeRegistrationStep(
|
855
916
|
() =>
|
856
917
|
this.startReachability('registration').catch((error) => {
|
857
|
-
LoggerProxy.logger.
|
918
|
+
LoggerProxy.logger.warn(`Meetings:index#register --> startReachability failed:`, error);
|
858
919
|
}),
|
859
920
|
'startReachability'
|
860
921
|
),
|
@@ -935,6 +996,21 @@ export default class Meetings extends WebexPlugin {
|
|
935
996
|
.disconnect()
|
936
997
|
// @ts-ignore
|
937
998
|
.then(() => this.webex.internal.device.unregister())
|
999
|
+
.catch((error) => {
|
1000
|
+
// If error status code is 404, continue the chain
|
1001
|
+
if (error.statusCode === 404) {
|
1002
|
+
LoggerProxy.logger.info(
|
1003
|
+
'Meetings:index#unregister --> 404 error during device unregister, proceeding normally'
|
1004
|
+
);
|
1005
|
+
|
1006
|
+
return; // returning undefined allows the chain to continue
|
1007
|
+
}
|
1008
|
+
// For any other status code, break the chain by rethrowing
|
1009
|
+
LoggerProxy.logger.error(
|
1010
|
+
`Meetings:index#unregister --> Failed to unregister device: ${error.message}`
|
1011
|
+
);
|
1012
|
+
throw error; // rethrow to break the promise chain
|
1013
|
+
})
|
938
1014
|
.then(() => {
|
939
1015
|
Trigger.trigger(
|
940
1016
|
this,
|
@@ -1217,6 +1293,29 @@ export default class Meetings extends WebexPlugin {
|
|
1217
1293
|
);
|
1218
1294
|
}
|
1219
1295
|
|
1296
|
+
/**
|
1297
|
+
* Fetch static meeting link for given conversation url.
|
1298
|
+
*
|
1299
|
+
* @param {string} conversationUrl - url for conversation
|
1300
|
+
* @returns {Promise}
|
1301
|
+
* @public
|
1302
|
+
* @memberof Meetings
|
1303
|
+
*/
|
1304
|
+
public fetchStaticMeetingLink(conversationUrl: string): Promise<any> {
|
1305
|
+
return (
|
1306
|
+
this.meetingInfo
|
1307
|
+
.fetchStaticMeetingLink(conversationUrl)
|
1308
|
+
// Catch a failure to fetch static meeting link.
|
1309
|
+
.catch((error) => {
|
1310
|
+
LoggerProxy.logger.error(
|
1311
|
+
`Meetings:index#fetchStaticMeetingLink --> ERROR, unable to fetch persistent meeting link: ${error.message}`
|
1312
|
+
);
|
1313
|
+
|
1314
|
+
return Promise.reject(error);
|
1315
|
+
})
|
1316
|
+
);
|
1317
|
+
}
|
1318
|
+
|
1220
1319
|
/**
|
1221
1320
|
* Create a meeting or return an existing meeting.
|
1222
1321
|
*
|
@@ -1369,6 +1468,54 @@ export default class Meetings extends WebexPlugin {
|
|
1369
1468
|
);
|
1370
1469
|
}
|
1371
1470
|
|
1471
|
+
/**
|
1472
|
+
* Enable static meeting links for given conversation url.
|
1473
|
+
*
|
1474
|
+
*
|
1475
|
+
* @param {string} conversationUrl - url for conversation
|
1476
|
+
* @returns {Promise}
|
1477
|
+
* @public
|
1478
|
+
* @memberof Meetings
|
1479
|
+
*/
|
1480
|
+
public enableStaticMeetingLink(conversationUrl: string): Promise<any> {
|
1481
|
+
return (
|
1482
|
+
this.meetingInfo
|
1483
|
+
.enableStaticMeetingLink(conversationUrl)
|
1484
|
+
// Catch a failure to enable static meeting link.
|
1485
|
+
.catch((error) => {
|
1486
|
+
LoggerProxy.logger.error(
|
1487
|
+
`Meetings:index#enableStaticMeetingLink --> ERROR, unable to enable static meeting link: ${error.message}`
|
1488
|
+
);
|
1489
|
+
|
1490
|
+
return Promise.reject(error);
|
1491
|
+
})
|
1492
|
+
);
|
1493
|
+
}
|
1494
|
+
|
1495
|
+
/**
|
1496
|
+
* Disable static meeting links for given conversation url.
|
1497
|
+
*
|
1498
|
+
*
|
1499
|
+
* @param {string} conversationUrl - url for conversation
|
1500
|
+
* @returns {Promise}
|
1501
|
+
* @public
|
1502
|
+
* @memberof Meetings
|
1503
|
+
*/
|
1504
|
+
public disableStaticMeetingLink(conversationUrl: string): Promise<any> {
|
1505
|
+
return (
|
1506
|
+
this.meetingInfo
|
1507
|
+
.disableStaticMeetingLink(conversationUrl)
|
1508
|
+
// Catch a failure to disable static meeting link.
|
1509
|
+
.catch((error) => {
|
1510
|
+
LoggerProxy.logger.error(
|
1511
|
+
`Meetings:index#disableStaticMeetingLink --> ERROR, unable to disable static meeting link: ${error.message}`
|
1512
|
+
);
|
1513
|
+
|
1514
|
+
return Promise.reject(error);
|
1515
|
+
})
|
1516
|
+
);
|
1517
|
+
}
|
1518
|
+
|
1372
1519
|
/**
|
1373
1520
|
* Create meeting
|
1374
1521
|
*
|
package/src/meetings/util.ts
CHANGED
@@ -99,6 +99,24 @@ MeetingsUtil.getMediaServer = (sdp) => {
|
|
99
99
|
return mediaServer;
|
100
100
|
};
|
101
101
|
|
102
|
+
MeetingsUtil.getMediaServerIp = (sdp) => {
|
103
|
+
let mediaServerIp;
|
104
|
+
|
105
|
+
// Attempt to collect the media server from the roap message.
|
106
|
+
try {
|
107
|
+
mediaServerIp = sdp
|
108
|
+
.split('\r\n')
|
109
|
+
.find((line) => line.startsWith('o='))
|
110
|
+
.match(/o=\S+ \d+ \d+ IN IP4 ([\d.]+)/)?.[1]
|
111
|
+
.toLowerCase()
|
112
|
+
.trim();
|
113
|
+
} catch {
|
114
|
+
mediaServerIp = undefined;
|
115
|
+
}
|
116
|
+
|
117
|
+
return mediaServerIp;
|
118
|
+
};
|
119
|
+
|
102
120
|
MeetingsUtil.checkForCorrelationId = (deviceUrl, locus) => {
|
103
121
|
let devices = [];
|
104
122
|
|
package/src/member/index.ts
CHANGED
@@ -1,18 +1,20 @@
|
|
1
1
|
/*!
|
2
2
|
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
3
3
|
*/
|
4
|
-
import {MEETINGS, _IN_LOBBY_, _NOT_IN_MEETING_, _IN_MEETING_} from '../constants';
|
5
|
-
import {IExternalRoles, IMediaStatus,
|
4
|
+
import {MEETINGS, _IN_LOBBY_, _NOT_IN_MEETING_, _IN_MEETING_, _OBSERVE_} from '../constants';
|
5
|
+
import {IExternalRoles, IMediaStatus, Participant, ParticipantUrl} from './types';
|
6
6
|
|
7
7
|
import MemberUtil from './util';
|
8
8
|
|
9
|
+
export type MemberId = string;
|
9
10
|
/**
|
10
11
|
* @class Member
|
11
12
|
*/
|
12
13
|
export default class Member {
|
13
|
-
associatedUser:
|
14
|
+
associatedUser: MemberId | null; // deprecated, use associatedUsers instead
|
15
|
+
associatedUsers: Set<MemberId>; // users associated with this device, empty if this member is not a device
|
14
16
|
canReclaimHost: boolean;
|
15
|
-
id:
|
17
|
+
id: MemberId;
|
16
18
|
isAudioMuted: any;
|
17
19
|
isContentSharing: any;
|
18
20
|
isDevice: any;
|
@@ -23,11 +25,13 @@ export default class Member {
|
|
23
25
|
isInMeeting: any;
|
24
26
|
isModerator: any;
|
25
27
|
isModeratorAssignmentProhibited: any;
|
28
|
+
isPresenterAssignmentProhibited: any;
|
26
29
|
isMutable: any;
|
27
30
|
isNotAdmitted: any;
|
28
31
|
isRecording: any;
|
29
32
|
isRemovable: any;
|
30
33
|
isSelf: any;
|
34
|
+
isPairedWithSelf: boolean; // true for a device that we are paired with
|
31
35
|
isBrb: boolean;
|
32
36
|
isUser: any;
|
33
37
|
isVideoMuted: any;
|
@@ -41,6 +45,10 @@ export default class Member {
|
|
41
45
|
supportLiveAnnotation: boolean;
|
42
46
|
type: any;
|
43
47
|
namespace = MEETINGS;
|
48
|
+
pairedWith: {
|
49
|
+
participantUrl?: ParticipantUrl;
|
50
|
+
memberId?: MemberId;
|
51
|
+
};
|
44
52
|
|
45
53
|
/**
|
46
54
|
* @param {Object} participant - the locus participant
|
@@ -53,7 +61,7 @@ export default class Member {
|
|
53
61
|
* @memberof Member
|
54
62
|
*/
|
55
63
|
constructor(
|
56
|
-
participant:
|
64
|
+
participant: Participant,
|
57
65
|
options:
|
58
66
|
| {
|
59
67
|
selfId: string;
|
@@ -200,13 +208,23 @@ export default class Member {
|
|
200
208
|
*/
|
201
209
|
this.isUser = null;
|
202
210
|
/**
|
211
|
+
* Deprecated: use associatedUsers instead
|
203
212
|
* Is this member associated to another user by way of pairing (typical of devices)
|
204
213
|
* @instance
|
205
|
-
* @type {
|
214
|
+
* @type {MemberId|null}
|
215
|
+
* @deprecated
|
206
216
|
* @public
|
207
217
|
* @memberof Member
|
208
218
|
*/
|
209
219
|
this.associatedUser = null;
|
220
|
+
/**
|
221
|
+
* Is this member associated to another user by way of pairing (typical of devices)
|
222
|
+
* @instance
|
223
|
+
* @type {String}
|
224
|
+
* @public
|
225
|
+
* @memberof Member
|
226
|
+
*/
|
227
|
+
this.associatedUsers = new Set<MemberId>();
|
210
228
|
/**
|
211
229
|
* @instance
|
212
230
|
* @type {Boolean}
|
@@ -257,6 +275,22 @@ export default class Member {
|
|
257
275
|
*/
|
258
276
|
this.isModeratorAssignmentProhibited = null;
|
259
277
|
|
278
|
+
/**
|
279
|
+
* @instance
|
280
|
+
* @type {Boolean}
|
281
|
+
* @public
|
282
|
+
* @memberof Member
|
283
|
+
*/
|
284
|
+
this.isPresenterAssignmentProhibited = null;
|
285
|
+
|
286
|
+
/**
|
287
|
+
* @instance
|
288
|
+
* @type {Boolean}
|
289
|
+
* @public
|
290
|
+
* @memberof Member
|
291
|
+
*/
|
292
|
+
this.isPairedWithSelf = false;
|
293
|
+
|
260
294
|
/**
|
261
295
|
* @instance
|
262
296
|
* @type {IExternalRoles}
|
@@ -265,6 +299,10 @@ export default class Member {
|
|
265
299
|
*/
|
266
300
|
this.roles = null;
|
267
301
|
|
302
|
+
this.pairedWith = {
|
303
|
+
participantUrl: undefined,
|
304
|
+
memberId: undefined,
|
305
|
+
};
|
268
306
|
/**
|
269
307
|
* @instance
|
270
308
|
* @type {IMediaStatus}
|
@@ -290,9 +328,10 @@ export default class Member {
|
|
290
328
|
* @private
|
291
329
|
* @memberof Member
|
292
330
|
*/
|
293
|
-
private processParticipant(participant:
|
331
|
+
private processParticipant(participant: Participant) {
|
294
332
|
this.participant = participant;
|
295
333
|
if (participant) {
|
334
|
+
this.processPairedDevice(participant);
|
296
335
|
this.canReclaimHost = MemberUtil.canReclaimHost(participant);
|
297
336
|
this.id = MemberUtil.extractId(participant);
|
298
337
|
this.name = MemberUtil.extractName(participant);
|
@@ -309,13 +348,27 @@ export default class Member {
|
|
309
348
|
this.isModerator = MemberUtil.isModerator(participant);
|
310
349
|
this.isModeratorAssignmentProhibited =
|
311
350
|
MemberUtil.isModeratorAssignmentProhibited(participant);
|
351
|
+
this.isPresenterAssignmentProhibited =
|
352
|
+
MemberUtil.isPresenterAssignmentProhibited(participant);
|
312
353
|
this.processStatus(participant);
|
313
|
-
this.processRoles(participant
|
354
|
+
this.processRoles(participant);
|
314
355
|
// must be done last
|
315
356
|
this.isNotAdmitted = MemberUtil.isNotAdmitted(participant, this.isGuest, this.status);
|
316
357
|
}
|
317
358
|
}
|
318
359
|
|
360
|
+
/**
|
361
|
+
* Checks if the participant is paired with another device
|
362
|
+
*
|
363
|
+
* @param {any} participant the locus participant object
|
364
|
+
* @returns {void}
|
365
|
+
*/
|
366
|
+
processPairedDevice(participant: Participant) {
|
367
|
+
// we can't populate this.pairedWith.memberId here because the member for that device might not yet exist
|
368
|
+
// so only populating the participantUrl and memberId will be set later
|
369
|
+
this.pairedWith.participantUrl = MemberUtil.extractPairedWithParticipantUrl(participant);
|
370
|
+
}
|
371
|
+
|
319
372
|
/**
|
320
373
|
* Use the members options and participant values to set on the member
|
321
374
|
* @param {Object} participant the locus participant object
|
@@ -324,7 +377,7 @@ export default class Member {
|
|
324
377
|
* @private
|
325
378
|
* @memberof Member
|
326
379
|
*/
|
327
|
-
private processParticipantOptions(participant:
|
380
|
+
private processParticipantOptions(participant: Participant, options: any) {
|
328
381
|
if (participant && options) {
|
329
382
|
this.processIsSelf(participant, options.selfId);
|
330
383
|
this.processIsHost(participant, options.hostId);
|
@@ -367,7 +420,7 @@ export default class Member {
|
|
367
420
|
* @private
|
368
421
|
* @memberof Member
|
369
422
|
*/
|
370
|
-
private processStatus(participant:
|
423
|
+
private processStatus(participant: Participant) {
|
371
424
|
this.status = MemberUtil.extractStatus(participant);
|
372
425
|
switch (this.status) {
|
373
426
|
case _IN_LOBBY_:
|
@@ -429,11 +482,9 @@ export default class Member {
|
|
429
482
|
* @public
|
430
483
|
* @memberof Member
|
431
484
|
*/
|
432
|
-
public processIsContentSharing(participant:
|
485
|
+
public processIsContentSharing(participant: Participant, sharingId: string) {
|
433
486
|
if (MemberUtil.isUser(participant)) {
|
434
487
|
this.isContentSharing = MemberUtil.isSame(participant, sharingId);
|
435
|
-
} else if (MemberUtil.isDevice(participant)) {
|
436
|
-
this.isContentSharing = MemberUtil.isAssociatedSame(participant, sharingId);
|
437
488
|
}
|
438
489
|
}
|
439
490
|
|
@@ -445,7 +496,7 @@ export default class Member {
|
|
445
496
|
* @public
|
446
497
|
* @memberof Member
|
447
498
|
*/
|
448
|
-
public processIsRecording(participant:
|
499
|
+
public processIsRecording(participant: Participant, recordingId: string) {
|
449
500
|
this.isRecording = MemberUtil.isSame(participant, recordingId);
|
450
501
|
}
|
451
502
|
|
@@ -457,12 +508,9 @@ export default class Member {
|
|
457
508
|
* @private
|
458
509
|
* @memberof Member
|
459
510
|
*/
|
460
|
-
private processIsSelf(participant:
|
511
|
+
private processIsSelf(participant: Participant, selfId: string) {
|
461
512
|
if (MemberUtil.isUser(participant)) {
|
462
513
|
this.isSelf = MemberUtil.isSame(participant, selfId);
|
463
|
-
} else if (MemberUtil.isDevice(participant)) {
|
464
|
-
this.isSelf = MemberUtil.isAssociatedSame(participant, selfId);
|
465
|
-
this.associatedUser = selfId;
|
466
514
|
}
|
467
515
|
}
|
468
516
|
|
@@ -474,11 +522,9 @@ export default class Member {
|
|
474
522
|
* @private
|
475
523
|
* @memberof Member
|
476
524
|
*/
|
477
|
-
private processIsHost(participant:
|
525
|
+
private processIsHost(participant: Participant, hostId: string) {
|
478
526
|
if (MemberUtil.isUser(participant)) {
|
479
527
|
this.isHost = MemberUtil.isSame(participant, hostId);
|
480
|
-
} else if (MemberUtil.isDevice(participant)) {
|
481
|
-
this.isHost = MemberUtil.isAssociatedSame(participant, hostId);
|
482
528
|
}
|
483
529
|
}
|
484
530
|
|
@@ -489,7 +535,7 @@ export default class Member {
|
|
489
535
|
* @private
|
490
536
|
* @memberof Member
|
491
537
|
*/
|
492
|
-
private processRoles(participant:
|
538
|
+
private processRoles(participant: Participant) {
|
493
539
|
this.roles = MemberUtil.extractControlRoles(participant);
|
494
540
|
}
|
495
541
|
|
package/src/member/types.ts
CHANGED
@@ -15,22 +15,6 @@ export type ServerRoleShape = {
|
|
15
15
|
hasRole: boolean;
|
16
16
|
};
|
17
17
|
|
18
|
-
export type ParticipantWithRoles = {
|
19
|
-
controls: {
|
20
|
-
role: {
|
21
|
-
roles: Array<ServerRoleShape>;
|
22
|
-
};
|
23
|
-
};
|
24
|
-
};
|
25
|
-
|
26
|
-
export type ParticipantWithBrb = {
|
27
|
-
controls: {
|
28
|
-
brb?: {
|
29
|
-
enabled: boolean;
|
30
|
-
};
|
31
|
-
};
|
32
|
-
};
|
33
|
-
|
34
18
|
// values are inherited from locus so don't update these
|
35
19
|
export enum MediaStatus {
|
36
20
|
RECVONLY = 'RECVONLY', // participant only receiving and not sending
|
@@ -44,3 +28,85 @@ export interface IMediaStatus {
|
|
44
28
|
audio: MediaStatus;
|
45
29
|
video: MediaStatus;
|
46
30
|
}
|
31
|
+
|
32
|
+
export type Csi = number;
|
33
|
+
export type Direction = 'inactive' | 'sendrecv' | 'sendonly' | 'recvonly';
|
34
|
+
export type ParticipantUrl = string;
|
35
|
+
export interface MediaSession {
|
36
|
+
csi: Csi;
|
37
|
+
direction: Direction;
|
38
|
+
mediaContent: 'main' | 'slides';
|
39
|
+
mediaType: 'audio' | 'video';
|
40
|
+
state: string;
|
41
|
+
}
|
42
|
+
|
43
|
+
export interface Intent {
|
44
|
+
associatedWith: ParticipantUrl;
|
45
|
+
id: string;
|
46
|
+
type: string; // could be "WAIT" or "OBSERVE" or other....
|
47
|
+
}
|
48
|
+
export interface ParticipantDevice {
|
49
|
+
correlationId: string;
|
50
|
+
csis: Csi[];
|
51
|
+
deviceType: string; // WDM device type, could be "WEB", "TP_ENDPOINT", "MAC" or other things, don't know the full list, so keeping it as string
|
52
|
+
intent?: Intent;
|
53
|
+
intents: Array<Intent | null>;
|
54
|
+
isVideoCallback: boolean;
|
55
|
+
mediaSessions: Array<MediaSession>;
|
56
|
+
mediaSessionsExternal: boolean;
|
57
|
+
state: string; // probably one of MEETING_STATE.STATES
|
58
|
+
}
|
59
|
+
|
60
|
+
// this is not a complete type, Locus may send more fields
|
61
|
+
export interface ParticipantPerson {
|
62
|
+
id: string;
|
63
|
+
isExternal: boolean;
|
64
|
+
name: string;
|
65
|
+
orgId: string;
|
66
|
+
}
|
67
|
+
|
68
|
+
export interface ParticipantMediaStatus {
|
69
|
+
audioStatus: MediaStatus;
|
70
|
+
videoStatus: MediaStatus;
|
71
|
+
audioSlidesStatus?: MediaStatus;
|
72
|
+
videoSlidesStatus?: MediaStatus;
|
73
|
+
csis: Csi[];
|
74
|
+
}
|
75
|
+
|
76
|
+
// this is not a complete type, Locus may send more fields
|
77
|
+
export interface ParticipantControls {
|
78
|
+
role: {
|
79
|
+
roles: Array<ServerRoleShape>;
|
80
|
+
};
|
81
|
+
brb?: {
|
82
|
+
enabled: boolean;
|
83
|
+
};
|
84
|
+
hand: {
|
85
|
+
raised: boolean;
|
86
|
+
};
|
87
|
+
localRecord: {
|
88
|
+
recording: boolean;
|
89
|
+
};
|
90
|
+
}
|
91
|
+
|
92
|
+
// this is not a complete type, Locus may send more fields
|
93
|
+
export interface Participant {
|
94
|
+
canBeController: boolean;
|
95
|
+
controls: ParticipantControls;
|
96
|
+
deviceUrl: string;
|
97
|
+
devices: Array<ParticipantDevice>;
|
98
|
+
guest: boolean;
|
99
|
+
id: string;
|
100
|
+
identity: string;
|
101
|
+
identityTrustLevel: string; // could be 'INTERNAL', 'EXTERNAL' or other....
|
102
|
+
isCreator: boolean;
|
103
|
+
moderator: boolean; // Locus docs say this is deprecated and role control should be used instead
|
104
|
+
moderatorAssignmentNotAllowed: boolean;
|
105
|
+
presenterAssignmentNotAllowed: boolean;
|
106
|
+
person: ParticipantPerson;
|
107
|
+
resourceGuest: boolean;
|
108
|
+
state: string; // probably one of MEETING_STATE.STATES
|
109
|
+
status: ParticipantMediaStatus;
|
110
|
+
type: string;
|
111
|
+
url: ParticipantUrl;
|
112
|
+
}
|