@webex/plugin-meetings 3.0.0-test.1 → 3.1.0-next.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.js +6 -0
- package/babel.config.js +3 -0
- package/dist/annotation/constants.js +12 -20
- package/dist/annotation/constants.js.map +1 -1
- package/dist/annotation/index.js +25 -10
- package/dist/annotation/index.js.map +1 -1
- package/dist/breakouts/breakout.js +2 -3
- package/dist/breakouts/breakout.js.map +1 -1
- package/dist/breakouts/collection.js +1 -2
- package/dist/breakouts/collection.js.map +1 -1
- package/dist/breakouts/edit-lock-error.js +1 -2
- package/dist/breakouts/edit-lock-error.js.map +1 -1
- package/dist/breakouts/events.js +1 -2
- package/dist/breakouts/events.js.map +1 -1
- package/dist/breakouts/index.js +13 -14
- package/dist/breakouts/index.js.map +1 -1
- package/dist/breakouts/request.js +1 -2
- package/dist/breakouts/request.js.map +1 -1
- package/dist/breakouts/utils.js +3 -6
- package/dist/breakouts/utils.js.map +1 -1
- 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.js +1 -2
- package/dist/common/errors/no-meeting-info.js.map +1 -1
- 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-errors.js +6 -10
- package/dist/common/errors/reclaim-host-role-errors.js.map +1 -1
- 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.js +14 -15
- 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 +1 -2
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/logs/request.js +3 -4
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.js +2 -4
- package/dist/common/queue.js.map +1 -1
- package/dist/config.js +4 -3
- package/dist/config.js.map +1 -1
- package/dist/constants.js +207 -380
- 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.js +7 -10
- package/dist/controls-options-manager/enums.js.map +1 -1
- package/dist/controls-options-manager/index.js +27 -32
- package/dist/controls-options-manager/index.js.map +1 -1
- package/dist/controls-options-manager/util.js +1 -2
- package/dist/controls-options-manager/util.js.map +1 -1
- package/dist/index.js +71 -4
- package/dist/index.js.map +1 -1
- package/dist/interceptors/index.js.map +1 -1
- package/dist/interceptors/locusRetry.js +4 -3
- package/dist/interceptors/locusRetry.js.map +1 -1
- package/dist/interpretation/collection.js +1 -2
- package/dist/interpretation/collection.js.map +1 -1
- package/dist/interpretation/index.js +4 -5
- package/dist/interpretation/index.js.map +1 -1
- package/dist/interpretation/siLanguage.js +2 -3
- package/dist/interpretation/siLanguage.js.map +1 -1
- package/dist/locus-info/controlsUtils.js +12 -13
- 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.js +23 -27
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +3 -4
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +16 -3
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +6 -10
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +12 -6
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/MediaConnectionAwaiter.js +163 -0
- package/dist/media/MediaConnectionAwaiter.js.map +1 -0
- package/dist/media/index.js +9 -5
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +7 -28
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js +1 -2
- package/dist/media/util.js.map +1 -1
- package/dist/mediaQualityMetrics/config.js +9 -18
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +14 -2
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +1411 -1036
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.js +4 -5
- package/dist/meeting/locusMediaRequest.js.map +1 -1
- package/dist/meeting/muteState.js +2 -4
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +45 -36
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/state.js +1 -2
- package/dist/meeting/state.js.map +1 -1
- package/dist/meeting/util.js +13 -10
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting/voicea-meeting.js +169 -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.js +5 -4
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +27 -29
- 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 +306 -269
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +336 -294
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +5 -6
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +44 -17
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/request.js +2 -3
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +1 -4
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +1 -3
- package/dist/member/index.js.map +1 -1
- package/dist/member/types.js +6 -8
- package/dist/member/types.js.map +1 -1
- package/dist/member/util.js +1 -2
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +1 -2
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +8 -7
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +2 -3
- 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.js +3 -4
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.js +1 -2
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +3 -2
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +9 -11
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/receiveSlot.js +3 -5
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/multistream/receiveSlotManager.js +7 -9
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +3 -5
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.js +7 -6
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +32 -29
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/multistream/sendSlotManager.js +9 -6
- package/dist/multistream/sendSlotManager.js.map +1 -1
- package/dist/networkQualityMonitor/index.js +1 -2
- 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.js +35 -20
- package/dist/reachability/clusterReachability.js.map +1 -1
- package/dist/reachability/index.js +41 -12
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +25 -20
- package/dist/reachability/request.js.map +1 -1
- package/dist/reachability/util.js +19 -0
- package/dist/reachability/util.js.map +1 -1
- package/dist/reactions/constants.js +1 -2
- package/dist/reactions/constants.js.map +1 -1
- package/dist/reactions/reactions.js +2 -4
- package/dist/reactions/reactions.js.map +1 -1
- package/dist/reactions/reactions.type.js +6 -8
- package/dist/reactions/reactions.type.js.map +1 -1
- package/dist/reconnection-manager/index.js +18 -11
- 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.js +43 -51
- package/dist/recording-controller/index.js.map +1 -1
- package/dist/recording-controller/util.js +1 -2
- package/dist/recording-controller/util.js.map +1 -1
- package/dist/roap/index.js +17 -3
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +10 -10
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +316 -134
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/rtcMetrics/constants.js +1 -2
- package/dist/rtcMetrics/constants.js.map +1 -1
- package/dist/rtcMetrics/index.js +4 -6
- package/dist/rtcMetrics/index.js.map +1 -1
- package/dist/statsAnalyzer/global.js +1 -2
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.js +123 -96
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +24 -31
- 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/types/common/logs/request.d.ts +1 -1
- package/dist/types/config.d.ts +1 -0
- package/dist/types/constants.d.ts +10 -5
- package/dist/types/index.d.ts +11 -0
- package/dist/types/media/MediaConnectionAwaiter.d.ts +61 -0
- package/dist/types/meeting/index.d.ts +71 -16
- package/dist/types/meeting/request.d.ts +3 -0
- package/dist/types/meeting/util.d.ts +1 -0
- package/dist/types/meeting/voicea-meeting.d.ts +16 -0
- package/dist/types/meeting-info/index.d.ts +1 -1
- package/dist/types/meeting-info/meeting-info-v2.d.ts +1 -1
- package/dist/types/meeting-info/util.d.ts +49 -2
- package/dist/types/meeting-info/utilv2.d.ts +65 -2
- package/dist/types/meetings/index.d.ts +11 -2
- package/dist/types/members/util.d.ts +1 -1
- package/dist/types/multistream/mediaRequestManager.d.ts +1 -2
- package/dist/types/multistream/remoteMediaGroup.d.ts +1 -1
- package/dist/types/multistream/remoteMediaManager.d.ts +1 -2
- package/dist/types/multistream/sendSlotManager.d.ts +1 -2
- package/dist/types/reachability/clusterReachability.d.ts +1 -0
- package/dist/types/reachability/index.d.ts +4 -0
- package/dist/types/reachability/util.d.ts +7 -0
- package/dist/types/roap/index.d.ts +10 -2
- package/dist/types/roap/turnDiscovery.d.ts +64 -17
- package/dist/webinar/collection.js +1 -2
- package/dist/webinar/collection.js.map +1 -1
- package/dist/webinar/index.js +2 -3
- package/dist/webinar/index.js.map +1 -1
- package/jest.config.js +3 -0
- package/package.json +44 -25
- package/process +1 -0
- package/src/config.ts +3 -4
- package/src/constants.ts +13 -4
- package/src/index.ts +27 -0
- package/src/interpretation/index.ts +2 -2
- package/src/locus-info/mediaSharesUtils.ts +16 -0
- package/src/locus-info/selfUtils.ts +5 -0
- package/src/media/MediaConnectionAwaiter.ts +174 -0
- package/src/media/index.ts +3 -1
- package/src/media/properties.ts +6 -31
- package/src/meeting/index.ts +526 -227
- package/src/meeting/request.ts +18 -2
- package/src/meeting/util.ts +6 -1
- package/src/meeting/voicea-meeting.ts +122 -0
- package/src/meeting-info/meeting-info-v2.ts +5 -11
- package/src/meeting-info/util.ts +244 -233
- package/src/meeting-info/utilv2.ts +262 -245
- package/src/meetings/index.ts +18 -0
- package/src/member/index.ts +0 -1
- package/src/multistream/mediaRequestManager.ts +1 -1
- package/src/multistream/remoteMediaGroup.ts +1 -1
- package/src/multistream/remoteMediaManager.ts +1 -2
- package/src/multistream/sendSlotManager.ts +1 -2
- package/src/reachability/clusterReachability.ts +20 -5
- package/src/reachability/index.ts +24 -1
- package/src/reachability/request.ts +15 -11
- package/src/reachability/util.ts +21 -0
- package/src/reconnection-manager/index.ts +1 -1
- package/src/roap/index.ts +25 -3
- package/src/roap/request.ts +2 -2
- package/src/roap/turnDiscovery.ts +244 -78
- package/src/statsAnalyzer/index.ts +63 -27
- package/test/integration/spec/journey.js +2 -2
- package/test/unit/spec/breakouts/breakout.ts +2 -1
- package/test/unit/spec/breakouts/index.ts +7 -4
- package/test/unit/spec/interpretation/index.ts +4 -1
- package/test/unit/spec/locus-info/index.js +27 -18
- package/test/unit/spec/locus-info/mediaSharesUtils.ts +9 -0
- package/test/unit/spec/locus-info/selfUtils.js +41 -11
- package/test/unit/spec/media/MediaConnectionAwaiter.ts +344 -0
- package/test/unit/spec/media/index.ts +94 -78
- package/test/unit/spec/media/properties.ts +16 -70
- package/test/unit/spec/meeting/index.js +757 -141
- package/test/unit/spec/meeting/request.js +21 -0
- package/test/unit/spec/meeting/utils.js +58 -11
- package/test/unit/spec/meeting/voicea-meeting.ts +266 -0
- package/test/unit/spec/meeting-info/meetinginfov2.js +20 -15
- package/test/unit/spec/meeting-info/utilv2.js +6 -0
- package/test/unit/spec/meetings/index.js +101 -13
- package/test/unit/spec/metrics/index.js +1 -2
- package/test/unit/spec/multistream/mediaRequestManager.ts +1 -0
- package/test/unit/spec/multistream/remoteMediaGroup.ts +0 -1
- package/test/unit/spec/multistream/remoteMediaManager.ts +0 -1
- package/test/unit/spec/reachability/clusterReachability.ts +86 -22
- package/test/unit/spec/reachability/index.ts +197 -60
- package/test/unit/spec/reachability/request.js +15 -7
- package/test/unit/spec/reachability/util.ts +32 -2
- package/test/unit/spec/reconnection-manager/index.js +28 -0
- package/test/unit/spec/recording-controller/index.js +0 -1
- package/test/unit/spec/roap/index.ts +61 -6
- package/test/unit/spec/roap/turnDiscovery.ts +299 -17
- package/test/unit/spec/stats-analyzer/index.js +179 -0
package/src/constants.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// @ts-ignore
|
|
2
2
|
import {hydraTypes} from '@webex/common';
|
|
3
3
|
|
|
4
|
-
type Enum<T extends Record<string, unknown>> = T[keyof T];
|
|
4
|
+
export type Enum<T extends Record<string, unknown>> = T[keyof T];
|
|
5
5
|
|
|
6
6
|
// *********** LOWERCASE / CAMELCASE STRINGS ************
|
|
7
7
|
|
|
@@ -48,6 +48,8 @@ export const MEETINGINFO = 'meetingInfo';
|
|
|
48
48
|
export const MEET = 'meet';
|
|
49
49
|
export const MEET_M = 'm';
|
|
50
50
|
export const MEDIA = 'media';
|
|
51
|
+
export const MEET_CO = 'co';
|
|
52
|
+
export const MEET_CISCO = 'cisco';
|
|
51
53
|
|
|
52
54
|
export const OFFLINE = 'offline';
|
|
53
55
|
export const ONLINE = 'online';
|
|
@@ -70,6 +72,8 @@ export const TYPE = 'type';
|
|
|
70
72
|
export const VIDEO = 'video';
|
|
71
73
|
export const VIDEO_STATUS = 'videoStatus';
|
|
72
74
|
|
|
75
|
+
export const LANGUAGE_ENGLISH = 'en';
|
|
76
|
+
|
|
73
77
|
// *********** UPPERCASE ONLY STRINGS ************
|
|
74
78
|
// Please alphabetize
|
|
75
79
|
export const _ANSWER_ = 'ANSWER';
|
|
@@ -192,7 +196,7 @@ export const ICE_FAIL_TIMEOUT = 3000;
|
|
|
192
196
|
|
|
193
197
|
export const RETRY_TIMEOUT = 3000;
|
|
194
198
|
|
|
195
|
-
export const ICE_AND_DTLS_CONNECTION_TIMEOUT =
|
|
199
|
+
export const ICE_AND_DTLS_CONNECTION_TIMEOUT = 20000;
|
|
196
200
|
export const ROAP_OFFER_ANSWER_EXCHANGE_TIMEOUT = 35000;
|
|
197
201
|
|
|
198
202
|
// ******************** REGEX **********************
|
|
@@ -298,8 +302,6 @@ export const EVENT_TRIGGERS = {
|
|
|
298
302
|
MEETING_MEDIA_REMOTE_STARTED: 'meeting:media:remote:start',
|
|
299
303
|
MEETING_STARTED_RECORDING: 'meeting:recording:started',
|
|
300
304
|
MEETING_STOPPED_RECORDING: 'meeting:recording:stopped',
|
|
301
|
-
MEETING_STARTED_RECEIVING_TRANSCRIPTION: 'meeting:receiveTranscription:started',
|
|
302
|
-
MEETING_STOPPED_RECEIVING_TRANSCRIPTION: 'meeting:receiveTranscription:stopped',
|
|
303
305
|
MEETING_RECEIVE_REACTIONS: 'meeting:receiveReactions',
|
|
304
306
|
MEETING_PAUSED_RECORDING: 'meeting:recording:paused',
|
|
305
307
|
MEETING_RESUMED_RECORDING: 'meeting:recording:resumed',
|
|
@@ -374,6 +376,12 @@ export const EVENT_TRIGGERS = {
|
|
|
374
376
|
// Locus URL changed
|
|
375
377
|
MEETING_LOCUS_URL_UPDATE: 'meeting:locus:locusUrl:update',
|
|
376
378
|
MEETING_STREAM_PUBLISH_STATE_CHANGED: 'meeting:streamPublishStateChanged',
|
|
379
|
+
|
|
380
|
+
MEETING_TRANSCRIPTION_CONNECTED: 'meeting:transcription:connected',
|
|
381
|
+
MEETING_STARTED_RECEIVING_TRANSCRIPTION: 'meeting:receiveTranscription:started',
|
|
382
|
+
MEETING_STOPPED_RECEIVING_TRANSCRIPTION: 'meeting:receiveTranscription:stopped',
|
|
383
|
+
|
|
384
|
+
MEETING_CAPTION_RECEIVED: 'meeting:caption-received',
|
|
377
385
|
};
|
|
378
386
|
|
|
379
387
|
export const EVENT_TYPES = {
|
|
@@ -964,6 +972,7 @@ export const SELF_ROLES = {
|
|
|
964
972
|
COHOST: 'COHOST',
|
|
965
973
|
MODERATOR: 'MODERATOR',
|
|
966
974
|
ATTENDEE: 'ATTENDEE',
|
|
975
|
+
PANELIST: 'PANELIST',
|
|
967
976
|
};
|
|
968
977
|
|
|
969
978
|
export const MEETING_STATE = {
|
package/src/index.ts
CHANGED
|
@@ -4,6 +4,17 @@ import {registerPlugin} from '@webex/webex-core';
|
|
|
4
4
|
import Meetings from './meetings';
|
|
5
5
|
import config from './config';
|
|
6
6
|
import {LocusRetryStatusInterceptor} from './interceptors';
|
|
7
|
+
import CaptchaError from './common/errors/captcha-error';
|
|
8
|
+
import IntentToJoinError from './common/errors/intent-to-join';
|
|
9
|
+
import PasswordError from './common/errors/password-error';
|
|
10
|
+
import PermissionError from './common/errors/permission';
|
|
11
|
+
import {
|
|
12
|
+
ReclaimHostEmptyWrongKeyError,
|
|
13
|
+
ReclaimHostIsHostAlreadyError,
|
|
14
|
+
ReclaimHostNotAllowedError,
|
|
15
|
+
ReclaimHostNotSupportedError,
|
|
16
|
+
} from './common/errors/reclaim-host-role-errors';
|
|
17
|
+
import Meeting from './meeting';
|
|
7
18
|
|
|
8
19
|
registerPlugin('meetings', Meetings, {
|
|
9
20
|
config,
|
|
@@ -39,6 +50,22 @@ export default Meetings;
|
|
|
39
50
|
|
|
40
51
|
export * as CONSTANTS from './constants';
|
|
41
52
|
export * as REACTIONS from './reactions/reactions';
|
|
53
|
+
export * as sdkAnnotationTypes from './annotation/annotation.types';
|
|
54
|
+
export * as MeetingInfoUtil from './meeting-info/utilv2';
|
|
55
|
+
export * as MeetingInfoV2 from './meeting-info/meeting-info-v2';
|
|
56
|
+
export {type Reaction} from './reactions/reactions.type';
|
|
57
|
+
|
|
58
|
+
export {
|
|
59
|
+
CaptchaError,
|
|
60
|
+
IntentToJoinError,
|
|
61
|
+
PasswordError,
|
|
62
|
+
PermissionError,
|
|
63
|
+
ReclaimHostIsHostAlreadyError,
|
|
64
|
+
ReclaimHostNotAllowedError,
|
|
65
|
+
ReclaimHostNotSupportedError,
|
|
66
|
+
ReclaimHostEmptyWrongKeyError,
|
|
67
|
+
Meeting,
|
|
68
|
+
};
|
|
42
69
|
|
|
43
70
|
export {RemoteMedia} from './multistream/remoteMedia';
|
|
44
71
|
|
|
@@ -124,14 +124,14 @@ const SimultaneousInterpretation = WebexPlugin.extend({
|
|
|
124
124
|
* @returns {bool} is target language changed
|
|
125
125
|
*/
|
|
126
126
|
updateSelfInterpretation({interpretation, selfParticipantId}) {
|
|
127
|
-
this.set('selfIsInterpreter', true);
|
|
128
127
|
const preTargetLanguage = this.targetLanguage;
|
|
129
128
|
const {originalLanguage, sourceLanguage, order, isActive, targetLanguage, receiveLanguage} =
|
|
130
129
|
interpretation || {};
|
|
131
130
|
this.set({originalLanguage, sourceLanguage, order, isActive, targetLanguage, receiveLanguage});
|
|
132
131
|
this.set('selfParticipantId', selfParticipantId);
|
|
132
|
+
this.set('selfIsInterpreter', !!targetLanguage);
|
|
133
133
|
|
|
134
|
-
return !!(
|
|
134
|
+
return !!(preTargetLanguage !== targetLanguage);
|
|
135
135
|
},
|
|
136
136
|
|
|
137
137
|
/**
|
|
@@ -17,6 +17,7 @@ MediaSharesUtils.parse = (mediaShares: object) => {
|
|
|
17
17
|
url: MediaSharesUtils.getContentUrl(mediaShares),
|
|
18
18
|
shareInstanceId: MediaSharesUtils.getShareInstanceId(mediaShares),
|
|
19
19
|
deviceUrlSharing: MediaSharesUtils.getContentBeneficiaryDeviceUrl(mediaShares),
|
|
20
|
+
resourceType: MediaSharesUtils.getContentResourceType(mediaShares),
|
|
20
21
|
},
|
|
21
22
|
whiteboard: {
|
|
22
23
|
beneficiaryId: MediaSharesUtils.getWhiteboardBeneficiaryId(mediaShares),
|
|
@@ -159,6 +160,21 @@ MediaSharesUtils.getContentAnnotation = (mediaShares: object) => {
|
|
|
159
160
|
return extractContent.annotation;
|
|
160
161
|
};
|
|
161
162
|
|
|
163
|
+
/**
|
|
164
|
+
* get live resourceType is sharing from media shares (content)
|
|
165
|
+
* @param {Object} mediaShares
|
|
166
|
+
* @returns {Object}
|
|
167
|
+
*/
|
|
168
|
+
MediaSharesUtils.getContentResourceType = (mediaShares: object) => {
|
|
169
|
+
const extractContent = MediaSharesUtils.extractContent(mediaShares);
|
|
170
|
+
|
|
171
|
+
if (!extractContent || !extractContent.resourceType) {
|
|
172
|
+
return undefined;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
return extractContent.resourceType;
|
|
176
|
+
};
|
|
177
|
+
|
|
162
178
|
/**
|
|
163
179
|
* get url is sharing from media shares (content)
|
|
164
180
|
* @param {Object} mediaShares
|
|
@@ -428,6 +428,11 @@ SelfUtils.mutedByOthersChanged = (oldSelf, changedSelf) => {
|
|
|
428
428
|
return false;
|
|
429
429
|
}
|
|
430
430
|
|
|
431
|
+
// there is no need to trigger user update if no one muted user
|
|
432
|
+
if (changedSelf.selfIdentity === changedSelf.modifiedBy) {
|
|
433
|
+
return false;
|
|
434
|
+
}
|
|
435
|
+
|
|
431
436
|
return (
|
|
432
437
|
changedSelf.remoteMuted !== null &&
|
|
433
438
|
(oldSelf.remoteMuted !== changedSelf.remoteMuted ||
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import {Defer} from '@webex/common';
|
|
2
|
+
import {ConnectionState, Event} from '@webex/internal-media-core';
|
|
3
|
+
import LoggerProxy from '../common/logs/logger-proxy';
|
|
4
|
+
import {ICE_AND_DTLS_CONNECTION_TIMEOUT} from '../constants';
|
|
5
|
+
|
|
6
|
+
export interface MediaConnectionAwaiterProps {
|
|
7
|
+
webrtcMediaConnection: any;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @class MediaConnectionAwaiter
|
|
12
|
+
*/
|
|
13
|
+
export default class MediaConnectionAwaiter {
|
|
14
|
+
private webrtcMediaConnection: any;
|
|
15
|
+
private timer: any;
|
|
16
|
+
private defer: Defer;
|
|
17
|
+
private retried: boolean;
|
|
18
|
+
private onTimeoutCallback: () => void;
|
|
19
|
+
private connectionStateCallback: () => void;
|
|
20
|
+
private iceGatheringStateCallback: () => void;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* @param {MediaConnectionAwaiterProps} mediaConnectionAwaiterProps
|
|
24
|
+
*/
|
|
25
|
+
constructor({webrtcMediaConnection}: MediaConnectionAwaiterProps) {
|
|
26
|
+
this.webrtcMediaConnection = webrtcMediaConnection;
|
|
27
|
+
this.defer = new Defer();
|
|
28
|
+
this.retried = false;
|
|
29
|
+
this.onTimeoutCallback = this.onTimeout.bind(this);
|
|
30
|
+
this.connectionStateCallback = this.connectionStateListenerCallback.bind(this);
|
|
31
|
+
this.iceGatheringStateCallback = this.iceGatheringStateListenerCallback.bind(this);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Returns true if the connection is connected, false otherwise.
|
|
36
|
+
*
|
|
37
|
+
* @returns {boolean}
|
|
38
|
+
*/
|
|
39
|
+
private isConnected(): boolean {
|
|
40
|
+
return this.webrtcMediaConnection.getConnectionState() === ConnectionState.Connected;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Returns true if the ICE Gathering is completed, false otherwise.
|
|
45
|
+
*
|
|
46
|
+
* @returns {boolean}
|
|
47
|
+
*/
|
|
48
|
+
private isIceGatheringCompleted(): boolean {
|
|
49
|
+
return this.webrtcMediaConnection.getIceGatheringState() === 'complete';
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Clears the callbacks.
|
|
54
|
+
*
|
|
55
|
+
* @returns {void}
|
|
56
|
+
*/
|
|
57
|
+
private clearCallbacks(): void {
|
|
58
|
+
this.webrtcMediaConnection.off(
|
|
59
|
+
Event.ICE_GATHERING_STATE_CHANGED,
|
|
60
|
+
this.iceGatheringStateCallback
|
|
61
|
+
);
|
|
62
|
+
this.webrtcMediaConnection.off(Event.CONNECTION_STATE_CHANGED, this.connectionStateCallback);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Listener for connection state change.
|
|
67
|
+
*
|
|
68
|
+
* @returns {void}
|
|
69
|
+
*/
|
|
70
|
+
connectionStateListenerCallback(): void {
|
|
71
|
+
LoggerProxy.logger.log(
|
|
72
|
+
`Media:MediaConnectionAwaiter#connectionStateListenerCallback --> connection state: ${this.webrtcMediaConnection.getConnectionState()}`
|
|
73
|
+
);
|
|
74
|
+
|
|
75
|
+
if (!this.isConnected()) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
clearTimeout(this.timer);
|
|
80
|
+
|
|
81
|
+
this.clearCallbacks();
|
|
82
|
+
|
|
83
|
+
this.defer.resolve();
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Listener for ICE gathering state change.
|
|
88
|
+
*
|
|
89
|
+
* @returns {void}
|
|
90
|
+
*/
|
|
91
|
+
iceGatheringStateListenerCallback(): void {
|
|
92
|
+
const iceGatheringState = this.webrtcMediaConnection.getIceGatheringState();
|
|
93
|
+
|
|
94
|
+
LoggerProxy.logger.log(
|
|
95
|
+
`Media:MediaConnectionAwaiter#iceGatheringStateListenerCallback --> ICE gathering state change -> ${iceGatheringState}`
|
|
96
|
+
);
|
|
97
|
+
|
|
98
|
+
if (!this.isIceGatheringCompleted()) {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
if (this.isConnected()) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
clearTimeout(this.timer);
|
|
107
|
+
|
|
108
|
+
this.timer = setTimeout(this.onTimeoutCallback, ICE_AND_DTLS_CONNECTION_TIMEOUT);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Function called when the timeout is reached.
|
|
113
|
+
*
|
|
114
|
+
* @returns {void}
|
|
115
|
+
*/
|
|
116
|
+
onTimeout(): void {
|
|
117
|
+
if (this.isConnected()) {
|
|
118
|
+
this.clearCallbacks();
|
|
119
|
+
|
|
120
|
+
this.defer.resolve();
|
|
121
|
+
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
if (!this.isIceGatheringCompleted()) {
|
|
126
|
+
if (!this.retried) {
|
|
127
|
+
LoggerProxy.logger.warn(
|
|
128
|
+
'Media:MediaConnectionAwaiter#onTimeout --> ICE gathering did not complete within the timeout for the first time, retrying once'
|
|
129
|
+
);
|
|
130
|
+
|
|
131
|
+
// retry once if ICE gathering is not completed
|
|
132
|
+
this.retried = true;
|
|
133
|
+
clearTimeout(this.timer);
|
|
134
|
+
this.timer = setTimeout(this.onTimeoutCallback, ICE_AND_DTLS_CONNECTION_TIMEOUT);
|
|
135
|
+
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
LoggerProxy.logger.warn(
|
|
140
|
+
'Media:MediaConnectionAwaiter#onTimeout --> ICE gathering did not complete within the timeout for the second time, rejecting'
|
|
141
|
+
);
|
|
142
|
+
} else {
|
|
143
|
+
LoggerProxy.logger.warn(
|
|
144
|
+
'Media:MediaConnectionAwaiter#onTimeout --> ICE gathering completed, but connection state is not connected, rejecting'
|
|
145
|
+
);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
this.clearCallbacks();
|
|
149
|
+
|
|
150
|
+
this.defer.reject();
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Waits for the webrtc media connection to be connected.
|
|
155
|
+
*
|
|
156
|
+
* @returns {Promise}
|
|
157
|
+
*/
|
|
158
|
+
waitForMediaConnectionConnected(): Promise<void> {
|
|
159
|
+
if (this.isConnected()) {
|
|
160
|
+
return Promise.resolve();
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
this.webrtcMediaConnection.on(Event.CONNECTION_STATE_CHANGED, this.connectionStateCallback);
|
|
164
|
+
|
|
165
|
+
this.webrtcMediaConnection.on(
|
|
166
|
+
Event.ICE_GATHERING_STATE_CHANGED,
|
|
167
|
+
this.iceGatheringStateCallback
|
|
168
|
+
);
|
|
169
|
+
|
|
170
|
+
this.timer = setTimeout(this.onTimeoutCallback, ICE_AND_DTLS_CONNECTION_TIMEOUT);
|
|
171
|
+
|
|
172
|
+
return this.defer.promise;
|
|
173
|
+
}
|
|
174
|
+
}
|
package/src/media/index.ts
CHANGED
|
@@ -160,7 +160,9 @@ Media.createMediaConnection = (
|
|
|
160
160
|
|
|
161
161
|
const iceServers = [];
|
|
162
162
|
|
|
163
|
-
if
|
|
163
|
+
// we might not have any TURN server if TURN discovery failed or wasn't done or
|
|
164
|
+
// we might get an empty TURN url if we land on a video mesh node
|
|
165
|
+
if (turnServerInfo?.url) {
|
|
164
166
|
iceServers.push({
|
|
165
167
|
urls: turnServerInfo.url,
|
|
166
168
|
username: turnServerInfo.username || '',
|
package/src/media/properties.ts
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import {ConnectionState, Event} from '@webex/internal-media-core';
|
|
2
|
-
|
|
3
1
|
import {
|
|
4
2
|
LocalCameraStream,
|
|
5
3
|
LocalMicrophoneStream,
|
|
@@ -8,8 +6,9 @@ import {
|
|
|
8
6
|
RemoteStream,
|
|
9
7
|
} from '@webex/media-helpers';
|
|
10
8
|
|
|
11
|
-
import {MEETINGS,
|
|
9
|
+
import {MEETINGS, QUALITY_LEVELS} from '../constants';
|
|
12
10
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
11
|
+
import MediaConnectionAwaiter from './MediaConnectionAwaiter';
|
|
13
12
|
|
|
14
13
|
export type MediaDirection = {
|
|
15
14
|
sendAudio: boolean;
|
|
@@ -175,35 +174,11 @@ export default class MediaProperties {
|
|
|
175
174
|
* @returns {Promise<void>}
|
|
176
175
|
*/
|
|
177
176
|
waitForMediaConnectionConnected(): Promise<void> {
|
|
178
|
-
const
|
|
179
|
-
this.webrtcMediaConnection
|
|
180
|
-
|
|
181
|
-
if (isConnected()) {
|
|
182
|
-
return Promise.resolve();
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
return new Promise<void>((resolve, reject) => {
|
|
186
|
-
let timer;
|
|
187
|
-
|
|
188
|
-
const connectionStateListener = () => {
|
|
189
|
-
LoggerProxy.logger.log(
|
|
190
|
-
`Media:properties#waitForMediaConnectionConnected --> connection state: ${this.webrtcMediaConnection.getConnectionState()}`
|
|
191
|
-
);
|
|
192
|
-
|
|
193
|
-
if (isConnected()) {
|
|
194
|
-
clearTimeout(timer);
|
|
195
|
-
this.webrtcMediaConnection.off(Event.CONNECTION_STATE_CHANGED, connectionStateListener);
|
|
196
|
-
resolve();
|
|
197
|
-
}
|
|
198
|
-
};
|
|
199
|
-
|
|
200
|
-
timer = setTimeout(() => {
|
|
201
|
-
this.webrtcMediaConnection.off(Event.CONNECTION_STATE_CHANGED, connectionStateListener);
|
|
202
|
-
reject();
|
|
203
|
-
}, ICE_AND_DTLS_CONNECTION_TIMEOUT);
|
|
204
|
-
|
|
205
|
-
this.webrtcMediaConnection.on(Event.CONNECTION_STATE_CHANGED, connectionStateListener);
|
|
177
|
+
const mediaConnectionAwaiter = new MediaConnectionAwaiter({
|
|
178
|
+
webrtcMediaConnection: this.webrtcMediaConnection,
|
|
206
179
|
});
|
|
180
|
+
|
|
181
|
+
return mediaConnectionAwaiter.waitForMediaConnectionConnected();
|
|
207
182
|
}
|
|
208
183
|
|
|
209
184
|
/**
|