@webex/plugin-meetings 3.1.0 → 3.2.0
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/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/common/errors/reconnection-not-started.js +46 -0
- package/dist/common/errors/reconnection-not-started.js.map +1 -0
- package/dist/constants.js +16 -5
- package/dist/constants.js.map +1 -1
- package/dist/index.js +80 -0
- package/dist/index.js.map +1 -1
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/locus-info/controlsUtils.js +7 -1
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/index.js +10 -0
- package/dist/locus-info/index.js.map +1 -1
- package/dist/media/properties.js +102 -57
- package/dist/media/properties.js.map +1 -1
- package/dist/mediaQualityMetrics/config.js +10 -10
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +6 -0
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +564 -475
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.js +27 -0
- package/dist/meeting/locusMediaRequest.js.map +1 -1
- package/dist/meeting/util.js +9 -16
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting/voicea-meeting.js +37 -49
- package/dist/meeting/voicea-meeting.js.map +1 -1
- package/dist/meeting-info/util.js +304 -267
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +334 -298
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/index.js +12 -28
- package/dist/meetings/index.js.map +1 -1
- package/dist/reachability/index.js +88 -9
- package/dist/reachability/index.js.map +1 -1
- package/dist/reconnection-manager/index.js +138 -109
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/roap/request.js +3 -27
- package/dist/roap/request.js.map +1 -1
- package/dist/statsAnalyzer/index.js +8 -2
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +17 -0
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/types/annotation/annotation.types.d.ts +42 -0
- package/dist/types/annotation/constants.d.ts +31 -0
- package/dist/types/annotation/index.d.ts +117 -0
- package/dist/types/breakouts/breakout.d.ts +8 -0
- package/dist/types/breakouts/collection.d.ts +5 -0
- package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
- package/dist/types/breakouts/events.d.ts +8 -0
- package/dist/types/breakouts/index.d.ts +5 -0
- package/dist/types/breakouts/request.d.ts +22 -0
- package/dist/types/breakouts/utils.d.ts +15 -0
- package/dist/types/common/browser-detection.d.ts +9 -0
- package/dist/types/common/collection.d.ts +48 -0
- package/dist/types/common/config.d.ts +2 -0
- package/dist/types/common/errors/captcha-error.d.ts +15 -0
- package/dist/types/common/errors/intent-to-join.d.ts +16 -0
- package/dist/types/common/errors/join-meeting.d.ts +17 -0
- package/dist/types/common/errors/media.d.ts +15 -0
- package/dist/types/common/errors/no-meeting-info.d.ts +14 -0
- package/dist/types/common/errors/parameter.d.ts +15 -0
- package/dist/types/common/errors/password-error.d.ts +15 -0
- package/dist/types/common/errors/permission.d.ts +14 -0
- package/dist/types/common/errors/reclaim-host-role-errors.d.ts +60 -0
- package/dist/types/common/errors/reconnection-not-started.d.ts +13 -0
- package/dist/types/common/errors/reconnection.d.ts +15 -0
- package/dist/types/common/errors/stats.d.ts +15 -0
- package/dist/types/common/errors/webex-errors.d.ts +93 -0
- package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
- package/dist/types/common/events/events-scope.d.ts +17 -0
- package/dist/types/common/events/events.d.ts +12 -0
- package/dist/types/common/events/trigger-proxy.d.ts +2 -0
- package/dist/types/common/events/util.d.ts +2 -0
- package/dist/types/common/logs/logger-config.d.ts +2 -0
- package/dist/types/common/logs/logger-proxy.d.ts +2 -0
- package/dist/types/common/logs/request.d.ts +36 -0
- package/dist/types/common/queue.d.ts +34 -0
- package/dist/types/config.d.ts +73 -0
- package/dist/types/constants.d.ts +1098 -0
- package/dist/types/controls-options-manager/constants.d.ts +4 -0
- package/dist/types/controls-options-manager/enums.d.ts +15 -0
- package/dist/types/controls-options-manager/index.d.ts +136 -0
- package/dist/types/controls-options-manager/types.d.ts +43 -0
- package/dist/types/controls-options-manager/util.d.ts +1 -0
- package/dist/types/index.d.ts +19 -0
- package/dist/types/interceptors/index.d.ts +2 -0
- package/dist/types/interceptors/locusRetry.d.ts +27 -0
- package/dist/types/interpretation/collection.d.ts +5 -0
- package/dist/types/interpretation/index.d.ts +5 -0
- package/dist/types/interpretation/siLanguage.d.ts +5 -0
- package/dist/types/locus-info/controlsUtils.d.ts +2 -0
- package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
- package/dist/types/locus-info/fullState.d.ts +2 -0
- package/dist/types/locus-info/hostUtils.d.ts +2 -0
- package/dist/types/locus-info/index.d.ts +322 -0
- package/dist/types/locus-info/infoUtils.d.ts +2 -0
- package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
- package/dist/types/locus-info/parser.d.ts +272 -0
- package/dist/types/locus-info/selfUtils.d.ts +2 -0
- package/dist/types/media/MediaConnectionAwaiter.d.ts +61 -0
- package/dist/types/media/index.d.ts +34 -0
- package/dist/types/media/properties.d.ts +117 -0
- package/dist/types/media/util.d.ts +2 -0
- package/dist/types/mediaQualityMetrics/config.d.ts +247 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +173 -0
- package/dist/types/meeting/index.d.ts +1832 -0
- package/dist/types/meeting/locusMediaRequest.d.ts +75 -0
- package/dist/types/meeting/muteState.d.ts +178 -0
- package/dist/types/meeting/request.d.ts +295 -0
- package/dist/types/meeting/request.type.d.ts +11 -0
- package/dist/types/meeting/state.d.ts +9 -0
- package/dist/types/meeting/util.d.ts +122 -0
- package/dist/types/meeting/voicea-meeting.d.ts +17 -0
- package/dist/types/meeting-info/collection.d.ts +20 -0
- package/dist/types/meeting-info/index.d.ts +69 -0
- package/dist/types/meeting-info/meeting-info-v2.d.ts +123 -0
- package/dist/types/meeting-info/request.d.ts +22 -0
- package/dist/types/meeting-info/util.d.ts +49 -0
- package/dist/types/meeting-info/utilv2.d.ts +65 -0
- package/dist/types/meetings/collection.d.ts +40 -0
- package/dist/types/meetings/index.d.ts +383 -0
- package/dist/types/meetings/meetings.types.d.ts +4 -0
- package/dist/types/meetings/request.d.ts +27 -0
- package/dist/types/meetings/util.d.ts +18 -0
- package/dist/types/member/index.d.ts +160 -0
- package/dist/types/member/types.d.ts +32 -0
- package/dist/types/member/util.d.ts +2 -0
- package/dist/types/members/collection.d.ts +29 -0
- package/dist/types/members/index.d.ts +353 -0
- package/dist/types/members/request.d.ts +114 -0
- package/dist/types/members/types.d.ts +25 -0
- package/dist/types/members/util.d.ts +215 -0
- package/dist/types/metrics/constants.d.ts +70 -0
- package/dist/types/metrics/index.d.ts +45 -0
- package/dist/types/multistream/mediaRequestManager.d.ts +119 -0
- package/dist/types/multistream/receiveSlot.d.ts +68 -0
- package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
- package/dist/types/multistream/remoteMedia.d.ts +72 -0
- package/dist/types/multistream/remoteMediaGroup.d.ts +49 -0
- package/dist/types/multistream/remoteMediaManager.d.ts +300 -0
- package/dist/types/multistream/sendSlotManager.d.ts +69 -0
- package/dist/types/networkQualityMonitor/index.d.ts +70 -0
- package/dist/types/personal-meeting-room/index.d.ts +47 -0
- package/dist/types/personal-meeting-room/request.d.ts +14 -0
- package/dist/types/personal-meeting-room/util.d.ts +2 -0
- package/dist/types/reachability/clusterReachability.d.ts +110 -0
- package/dist/types/reachability/index.d.ts +120 -0
- package/dist/types/reachability/request.d.ts +39 -0
- package/dist/types/reachability/util.d.ts +15 -0
- package/dist/types/reactions/constants.d.ts +3 -0
- package/dist/types/reactions/reactions.d.ts +4 -0
- package/dist/types/reactions/reactions.type.d.ts +52 -0
- package/dist/types/reconnection-manager/index.d.ts +126 -0
- package/dist/types/recording-controller/enums.d.ts +7 -0
- package/dist/types/recording-controller/index.d.ts +207 -0
- package/dist/types/recording-controller/util.d.ts +14 -0
- package/dist/types/roap/index.d.ts +86 -0
- package/dist/types/roap/request.d.ts +39 -0
- package/dist/types/roap/turnDiscovery.d.ts +155 -0
- package/dist/types/rtcMetrics/constants.d.ts +4 -0
- package/dist/types/rtcMetrics/index.d.ts +61 -0
- package/dist/types/statsAnalyzer/global.d.ts +36 -0
- package/dist/types/statsAnalyzer/index.d.ts +217 -0
- package/dist/types/statsAnalyzer/mqaUtil.d.ts +48 -0
- package/dist/types/transcription/index.d.ts +64 -0
- package/dist/types/webinar/collection.d.ts +16 -0
- package/dist/types/webinar/index.d.ts +5 -0
- package/dist/webinar/index.js +1 -1
- package/package.json +22 -22
- package/src/common/errors/reconnection-not-started.ts +25 -0
- package/src/constants.ts +14 -5
- package/src/index.ts +30 -0
- package/src/locus-info/controlsUtils.ts +11 -0
- package/src/locus-info/index.ts +16 -0
- package/src/media/properties.ts +67 -15
- package/src/mediaQualityMetrics/config.ts +13 -7
- package/src/meeting/in-meeting-actions.ts +12 -0
- package/src/meeting/index.ts +144 -107
- package/src/meeting/locusMediaRequest.ts +31 -0
- package/src/meeting/util.ts +9 -16
- package/src/meeting/voicea-meeting.ts +44 -46
- package/src/meeting-info/util.ts +241 -233
- package/src/meeting-info/utilv2.ts +250 -244
- package/src/meetings/index.ts +15 -27
- package/src/reachability/index.ts +60 -0
- package/src/reconnection-manager/index.ts +128 -105
- package/src/roap/request.ts +1 -24
- package/src/statsAnalyzer/index.ts +10 -3
- package/src/statsAnalyzer/mqaUtil.ts +23 -0
- package/test/unit/spec/locus-info/controlsUtils.js +20 -0
- package/test/unit/spec/locus-info/index.js +21 -0
- package/test/unit/spec/media/properties.ts +145 -140
- package/test/unit/spec/meeting/in-meeting-actions.ts +6 -0
- package/test/unit/spec/meeting/index.js +271 -105
- package/test/unit/spec/meeting/locusMediaRequest.ts +49 -0
- package/test/unit/spec/meeting/utils.js +3 -10
- package/test/unit/spec/meeting/voicea-meeting.ts +5 -14
- package/test/unit/spec/meetings/index.js +59 -17
- package/test/unit/spec/reachability/index.ts +266 -0
- package/test/unit/spec/reconnection-manager/index.js +127 -39
- package/test/unit/spec/roap/request.ts +0 -37
- package/test/unit/spec/stats-analyzer/index.js +100 -8
- package/src/common/errors/reconnection-in-progress.ts +0 -8
package/package.json
CHANGED
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
]
|
|
29
29
|
},
|
|
30
30
|
"scripts": {
|
|
31
|
-
"build": "yarn run -T tsc --declaration true --declarationDir ./dist",
|
|
31
|
+
"build": "yarn run -T tsc --declaration true --declarationDir ./dist/types",
|
|
32
32
|
"build:src": "webex-legacy-tools build -dest \"./dist\" -src \"./src\" -js -ts -maps && yarn build",
|
|
33
33
|
"deploy:npm": "yarn npm publish",
|
|
34
34
|
"test:broken": "yarn test:style && yarn test:unit && yarn test:integration && yarn test:browser",
|
|
@@ -43,13 +43,13 @@
|
|
|
43
43
|
"@webex/eslint-config-legacy": "0.0.0",
|
|
44
44
|
"@webex/jest-config-legacy": "0.0.0",
|
|
45
45
|
"@webex/legacy-tools": "0.0.0",
|
|
46
|
-
"@webex/plugin-meetings": "3.
|
|
47
|
-
"@webex/plugin-rooms": "3.
|
|
48
|
-
"@webex/test-helper-chai": "3.
|
|
49
|
-
"@webex/test-helper-mocha": "3.
|
|
50
|
-
"@webex/test-helper-mock-webex": "3.
|
|
51
|
-
"@webex/test-helper-retry": "3.
|
|
52
|
-
"@webex/test-helper-test-users": "3.
|
|
46
|
+
"@webex/plugin-meetings": "3.2.0",
|
|
47
|
+
"@webex/plugin-rooms": "3.2.0",
|
|
48
|
+
"@webex/test-helper-chai": "3.2.0",
|
|
49
|
+
"@webex/test-helper-mocha": "3.2.0",
|
|
50
|
+
"@webex/test-helper-mock-webex": "3.2.0",
|
|
51
|
+
"@webex/test-helper-retry": "3.2.0",
|
|
52
|
+
"@webex/test-helper-test-users": "3.2.0",
|
|
53
53
|
"chai": "^4.3.4",
|
|
54
54
|
"chai-as-promised": "^7.1.1",
|
|
55
55
|
"eslint": "^8.24.0",
|
|
@@ -61,20 +61,20 @@
|
|
|
61
61
|
"typescript": "^4.7.4"
|
|
62
62
|
},
|
|
63
63
|
"dependencies": {
|
|
64
|
-
"@webex/common": "3.
|
|
64
|
+
"@webex/common": "3.2.0",
|
|
65
65
|
"@webex/internal-media-core": "2.5.0",
|
|
66
|
-
"@webex/internal-plugin-conversation": "3.
|
|
67
|
-
"@webex/internal-plugin-device": "3.
|
|
68
|
-
"@webex/internal-plugin-llm": "3.
|
|
69
|
-
"@webex/internal-plugin-mercury": "3.
|
|
70
|
-
"@webex/internal-plugin-metrics": "3.
|
|
71
|
-
"@webex/internal-plugin-support": "3.
|
|
72
|
-
"@webex/internal-plugin-user": "3.
|
|
73
|
-
"@webex/internal-plugin-voicea": "3.
|
|
74
|
-
"@webex/media-helpers": "3.
|
|
75
|
-
"@webex/plugin-people": "3.
|
|
76
|
-
"@webex/plugin-rooms": "3.
|
|
77
|
-
"@webex/webex-core": "3.
|
|
66
|
+
"@webex/internal-plugin-conversation": "3.2.0",
|
|
67
|
+
"@webex/internal-plugin-device": "3.2.0",
|
|
68
|
+
"@webex/internal-plugin-llm": "3.2.0",
|
|
69
|
+
"@webex/internal-plugin-mercury": "3.2.0",
|
|
70
|
+
"@webex/internal-plugin-metrics": "3.2.0",
|
|
71
|
+
"@webex/internal-plugin-support": "3.2.0",
|
|
72
|
+
"@webex/internal-plugin-user": "3.2.0",
|
|
73
|
+
"@webex/internal-plugin-voicea": "3.2.0",
|
|
74
|
+
"@webex/media-helpers": "3.2.0",
|
|
75
|
+
"@webex/plugin-people": "3.2.0",
|
|
76
|
+
"@webex/plugin-rooms": "3.2.0",
|
|
77
|
+
"@webex/webex-core": "3.2.0",
|
|
78
78
|
"ampersand-collection": "^2.0.2",
|
|
79
79
|
"bowser": "^2.11.0",
|
|
80
80
|
"btoa": "^1.2.1",
|
|
@@ -91,5 +91,5 @@
|
|
|
91
91
|
"//": [
|
|
92
92
|
"TODO: upgrade jwt-decode when moving to node 18"
|
|
93
93
|
],
|
|
94
|
-
"version": "3.
|
|
94
|
+
"version": "3.2.0"
|
|
95
95
|
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import {ERROR_DICTIONARY} from '../../constants';
|
|
2
|
+
import ReconnectionError from './reconnection';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Error object for cases when new reconnection cannot be started
|
|
6
|
+
*/
|
|
7
|
+
export default class ReconnectionNotStartedError extends ReconnectionError {
|
|
8
|
+
/**
|
|
9
|
+
*
|
|
10
|
+
* @constructor
|
|
11
|
+
* @param {String} [message]
|
|
12
|
+
* @param {Object} [error]
|
|
13
|
+
*/
|
|
14
|
+
constructor(
|
|
15
|
+
message: string = ERROR_DICTIONARY.RECONNECTION_NOT_STARTED.MESSAGE,
|
|
16
|
+
error: any = null
|
|
17
|
+
) {
|
|
18
|
+
super(message, error);
|
|
19
|
+
this.name = ERROR_DICTIONARY.RECONNECTION_NOT_STARTED.NAME;
|
|
20
|
+
this.sdkMessage = ERROR_DICTIONARY.RECONNECTION_NOT_STARTED.MESSAGE;
|
|
21
|
+
this.error = error;
|
|
22
|
+
this.stack = error ? error.stack : new Error().stack;
|
|
23
|
+
this.code = ERROR_DICTIONARY.RECONNECTION_NOT_STARTED.CODE;
|
|
24
|
+
}
|
|
25
|
+
}
|
package/src/constants.ts
CHANGED
|
@@ -100,7 +100,7 @@ export const _JOINED_ = 'JOINED';
|
|
|
100
100
|
export const _LOCUS_ID_ = 'LOCUS_ID';
|
|
101
101
|
export const _LEFT_ = 'LEFT';
|
|
102
102
|
export const _MOVED_ = 'MOVED';
|
|
103
|
-
|
|
103
|
+
export const _ON_HOLD_LOBBY_ = 'ON_HOLD_LOBBY';
|
|
104
104
|
export const _MEETING_LINK_ = 'MEETING_LINK';
|
|
105
105
|
export const _MEETING_UUID_ = 'MEETING_UUID';
|
|
106
106
|
export const _MEETING_ = 'MEETING';
|
|
@@ -380,7 +380,7 @@ export const EVENT_TRIGGERS = {
|
|
|
380
380
|
MEETING_TRANSCRIPTION_CONNECTED: 'meeting:transcription:connected',
|
|
381
381
|
MEETING_STARTED_RECEIVING_TRANSCRIPTION: 'meeting:receiveTranscription:started',
|
|
382
382
|
MEETING_STOPPED_RECEIVING_TRANSCRIPTION: 'meeting:receiveTranscription:stopped',
|
|
383
|
-
|
|
383
|
+
MEETING_MANUAL_CAPTION_UPDATED: 'meeting:manualCaptionControl:updated',
|
|
384
384
|
MEETING_CAPTION_RECEIVED: 'meeting:caption-received',
|
|
385
385
|
};
|
|
386
386
|
|
|
@@ -535,6 +535,12 @@ export const ERROR_DICTIONARY = {
|
|
|
535
535
|
'Participant Having Host Role Already. Participant who sends request to reclaim host role has already a host role.',
|
|
536
536
|
CODE: 14,
|
|
537
537
|
},
|
|
538
|
+
RECONNECTION_NOT_STARTED: {
|
|
539
|
+
NAME: 'ReconnectionNotStartedError',
|
|
540
|
+
MESSAGE:
|
|
541
|
+
'Reconnection was not started, because there is one already in progress or reconnections are disabled in config.',
|
|
542
|
+
CODE: 15,
|
|
543
|
+
},
|
|
538
544
|
};
|
|
539
545
|
|
|
540
546
|
export const FLOOR_ACTION = {
|
|
@@ -671,6 +677,7 @@ export const LOCUSINFO = {
|
|
|
671
677
|
CONTROLS_MEETING_LAYOUT_UPDATED: 'CONTROLS_MEETING_LAYOUT_UPDATED',
|
|
672
678
|
CONTROLS_RECORDING_UPDATED: 'CONTROLS_RECORDING_UPDATED',
|
|
673
679
|
CONTROLS_MEETING_TRANSCRIBE_UPDATED: 'CONTROLS_MEETING_TRANSCRIBE_UPDATED',
|
|
680
|
+
CONTROLS_MEETING_MANUAL_CAPTION_UPDATED: 'CONTROLS_MEETING_MANUAL_CAPTION_UPDATED',
|
|
674
681
|
CONTROLS_MEETING_BREAKOUT_UPDATED: 'CONTROLS_MEETING_BREAKOUT_UPDATED',
|
|
675
682
|
CONTROLS_MEETING_CONTAINER_UPDATED: 'CONTROLS_MEETING_CONTAINER_UPDATED',
|
|
676
683
|
CONTROLS_MEETING_INTERPRETATION_UPDATED: 'CONTROLS_MEETING_INTERPRETATION_UPDATED',
|
|
@@ -909,6 +916,9 @@ export const DISPLAY_HINTS = {
|
|
|
909
916
|
LEAVE_END_MEETING: 'LEAVE_END_MEETING',
|
|
910
917
|
CAPTION_START: 'CAPTION_START',
|
|
911
918
|
CAPTION_STATUS_ACTIVE: 'CAPTION_STATUS_ACTIVE',
|
|
919
|
+
MANUAL_CAPTION_START: 'MANUAL_CAPTION_START',
|
|
920
|
+
MANUAL_CAPTION_STOP: 'MANUAL_CAPTION_STOP',
|
|
921
|
+
MANUAL_CAPTION_STATUS_ACTIVE: 'MANUAL_CAPTION_STATUS_ACTIVE',
|
|
912
922
|
DISPLAY_REAL_TIME_TRANSLATION: 'DISPLAY_REAL_TIME_TRANSLATION',
|
|
913
923
|
ENABLE_CAPTION_PANEL: 'ENABLE_CAPTION_PANEL',
|
|
914
924
|
DISPLAY_NON_ENGLISH_ASR: 'DISPLAY_NON_ENGLISH_ASR',
|
|
@@ -1043,9 +1053,7 @@ export const PEER_CONNECTION_STATE = {
|
|
|
1043
1053
|
export const RECONNECTION = {
|
|
1044
1054
|
STATE: {
|
|
1045
1055
|
IN_PROGRESS: 'IN_PROGRESS',
|
|
1046
|
-
COMPLETE: 'COMPLETE',
|
|
1047
1056
|
FAILURE: 'FAILURE',
|
|
1048
|
-
DEFAULT_TRY_COUNT: 0,
|
|
1049
1057
|
DEFAULT_STATUS: '',
|
|
1050
1058
|
},
|
|
1051
1059
|
} as const;
|
|
@@ -1114,6 +1122,8 @@ export const MQA_STATS = {
|
|
|
1114
1122
|
direction: 'sendrecv', // TODO: parse from SDP and save globally
|
|
1115
1123
|
isMain: false, // always true for share sender
|
|
1116
1124
|
mariFecEnabled: false, // unavailable
|
|
1125
|
+
mariRtxEnabled: false, // unavailable
|
|
1126
|
+
mariLiteEnabled: false, // unavailable
|
|
1117
1127
|
mariQosEnabled: false, // unavailable
|
|
1118
1128
|
multistreamEnabled: false, // unavailable
|
|
1119
1129
|
},
|
|
@@ -1126,7 +1136,6 @@ export const MQA_STATS = {
|
|
|
1126
1136
|
queueDelay: 0, // unavailable
|
|
1127
1137
|
remoteJitter: 0, // unavailable
|
|
1128
1138
|
remoteLossRate: 0,
|
|
1129
|
-
remoteReceiveRate: 0, // unavailable
|
|
1130
1139
|
roundTripTime: 0,
|
|
1131
1140
|
rtcpBitrate: 0, // unavailable
|
|
1132
1141
|
rtcpPackets: 0, // unavailable
|
package/src/index.ts
CHANGED
|
@@ -4,6 +4,19 @@ 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';
|
|
18
|
+
import MeetingInfoUtil from './meeting-info/utilv2';
|
|
19
|
+
import JoinMeetingError from './common/errors/join-meeting';
|
|
7
20
|
|
|
8
21
|
registerPlugin('meetings', Meetings, {
|
|
9
22
|
config,
|
|
@@ -39,6 +52,23 @@ export default Meetings;
|
|
|
39
52
|
|
|
40
53
|
export * as CONSTANTS from './constants';
|
|
41
54
|
export * as REACTIONS from './reactions/reactions';
|
|
55
|
+
export * as sdkAnnotationTypes from './annotation/annotation.types';
|
|
56
|
+
export * as MeetingInfoV2 from './meeting-info/meeting-info-v2';
|
|
57
|
+
export {type Reaction} from './reactions/reactions.type';
|
|
58
|
+
|
|
59
|
+
export {
|
|
60
|
+
CaptchaError,
|
|
61
|
+
IntentToJoinError,
|
|
62
|
+
JoinMeetingError,
|
|
63
|
+
PasswordError,
|
|
64
|
+
PermissionError,
|
|
65
|
+
ReclaimHostIsHostAlreadyError,
|
|
66
|
+
ReclaimHostNotAllowedError,
|
|
67
|
+
ReclaimHostNotSupportedError,
|
|
68
|
+
ReclaimHostEmptyWrongKeyError,
|
|
69
|
+
Meeting,
|
|
70
|
+
MeetingInfoUtil,
|
|
71
|
+
};
|
|
42
72
|
|
|
43
73
|
export {RemoteMedia} from './multistream/remoteMedia';
|
|
44
74
|
|
|
@@ -43,6 +43,12 @@ ControlsUtils.parse = (controls: any) => {
|
|
|
43
43
|
};
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
+
if (controls && controls.manualCaptionControl) {
|
|
47
|
+
parsedControls.manualCaptionControl = {
|
|
48
|
+
enabled: controls.manualCaptionControl.enabled,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
|
|
46
52
|
if (controls && controls.entryExitTone) {
|
|
47
53
|
parsedControls.entryExitTone = controls.entryExitTone.enabled
|
|
48
54
|
? controls.entryExitTone.mode
|
|
@@ -143,6 +149,11 @@ ControlsUtils.getControls = (oldControls: any, newControls: any) => {
|
|
|
143
149
|
!isEqual(previous?.transcribe?.transcribing, current?.transcribe?.transcribing) && // upon first join, previous?.record?.recording = undefined; thus, never going to be equal and will always return true
|
|
144
150
|
(previous?.transcribe?.transcribing || current?.transcribe?.transcribing), // therefore, condition added to prevent false firings of #meeting:recording:stopped upon first joining a meeting
|
|
145
151
|
|
|
152
|
+
hasManualCaptionChanged:
|
|
153
|
+
current?.manualCaptionControl &&
|
|
154
|
+
!isEqual(previous?.manualCaptionControl?.enabled, current?.manualCaptionControl?.enabled) &&
|
|
155
|
+
(previous?.manualCaptionControl?.enabled || current?.manualCaptionControl?.enabled),
|
|
156
|
+
|
|
146
157
|
hasEntryExitToneChanged: !!(
|
|
147
158
|
newControls.entryExitTone &&
|
|
148
159
|
!isEqual(previous?.entryExitTone, current?.entryExitTone) &&
|
package/src/locus-info/index.ts
CHANGED
|
@@ -792,6 +792,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
792
792
|
hasRecordingPausedChanged,
|
|
793
793
|
hasMeetingContainerChanged,
|
|
794
794
|
hasTranscribeChanged,
|
|
795
|
+
hasManualCaptionChanged,
|
|
795
796
|
hasEntryExitToneChanged,
|
|
796
797
|
hasBreakoutChanged,
|
|
797
798
|
hasVideoEnabledChanged,
|
|
@@ -923,6 +924,21 @@ export default class LocusInfo extends EventsScope {
|
|
|
923
924
|
);
|
|
924
925
|
}
|
|
925
926
|
|
|
927
|
+
if (hasManualCaptionChanged) {
|
|
928
|
+
const {enabled} = current.manualCaptionControl;
|
|
929
|
+
|
|
930
|
+
this.emitScoped(
|
|
931
|
+
{
|
|
932
|
+
file: 'locus-info',
|
|
933
|
+
function: 'updateControls',
|
|
934
|
+
},
|
|
935
|
+
LOCUSINFO.EVENTS.CONTROLS_MEETING_MANUAL_CAPTION_UPDATED,
|
|
936
|
+
{
|
|
937
|
+
enabled,
|
|
938
|
+
}
|
|
939
|
+
);
|
|
940
|
+
}
|
|
941
|
+
|
|
926
942
|
if (hasBreakoutChanged) {
|
|
927
943
|
const {breakout} = current;
|
|
928
944
|
breakout.breakoutMoveId = SelfUtils.getReplacedBreakoutMoveId(
|
package/src/media/properties.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/* eslint-disable class-methods-use-this */
|
|
1
2
|
import {
|
|
2
3
|
LocalCameraStream,
|
|
3
4
|
LocalMicrophoneStream,
|
|
@@ -182,25 +183,45 @@ export default class MediaProperties {
|
|
|
182
183
|
}
|
|
183
184
|
|
|
184
185
|
/**
|
|
185
|
-
* Returns
|
|
186
|
+
* Returns ICE transport information:
|
|
187
|
+
* - selectedCandidatePairChanges - number of times the selected candidate pair was changed, it should be at least 1 for successful connections
|
|
188
|
+
* it will be -1 if browser doesn't supply this information
|
|
189
|
+
* - numTransports - number of transports (should be 1 if we're using bundle)
|
|
186
190
|
*
|
|
187
|
-
* @
|
|
191
|
+
* @param {Array<any>} allStatsReports array of RTC stats reports
|
|
192
|
+
* @returns {Object}
|
|
188
193
|
*/
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
const
|
|
194
|
+
private getTransportInfo(allStatsReports: any[]): {
|
|
195
|
+
selectedCandidatePairChanges: number;
|
|
196
|
+
numTransports: number;
|
|
197
|
+
} {
|
|
198
|
+
const transports = allStatsReports.filter((report) => report.type === 'transport');
|
|
194
199
|
|
|
195
|
-
|
|
196
|
-
const statsResult = await this.webrtcMediaConnection.getStats();
|
|
197
|
-
statsResult.forEach((report) => allStatsReports.push(report));
|
|
198
|
-
} catch (error) {
|
|
200
|
+
if (transports.length > 1) {
|
|
199
201
|
LoggerProxy.logger.warn(
|
|
200
|
-
`Media:properties#
|
|
202
|
+
`Media:properties#getSelectedCandidatePairChanges --> found more than 1 transport: ${transports.length}`
|
|
201
203
|
);
|
|
202
204
|
}
|
|
203
205
|
|
|
206
|
+
return {
|
|
207
|
+
selectedCandidatePairChanges:
|
|
208
|
+
transports.length > 0 && transports[0].selectedCandidatePairChanges !== undefined
|
|
209
|
+
? transports[0].selectedCandidatePairChanges
|
|
210
|
+
: -1,
|
|
211
|
+
numTransports: transports.length,
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* Returns the type of a connection that has been established
|
|
217
|
+
* It should be 'UDP' | 'TCP' | 'TURN-TLS' | 'TURN-TCP' | 'TURN-UDP' | 'unknown'
|
|
218
|
+
*
|
|
219
|
+
* If connection was not established, it returns 'unknown'
|
|
220
|
+
*
|
|
221
|
+
* @param {Array<any>} allStatsReports array of RTC stats reports
|
|
222
|
+
* @returns {string}
|
|
223
|
+
*/
|
|
224
|
+
private getConnectionType(allStatsReports: any[]) {
|
|
204
225
|
const successfulCandidatePairs = allStatsReports.filter(
|
|
205
226
|
(report) => report.type === 'candidate-pair' && report.state?.toLowerCase() === 'succeeded'
|
|
206
227
|
);
|
|
@@ -215,7 +236,7 @@ export default class MediaProperties {
|
|
|
215
236
|
|
|
216
237
|
if (localCandidate === undefined) {
|
|
217
238
|
LoggerProxy.logger.warn(
|
|
218
|
-
`Media:properties#
|
|
239
|
+
`Media:properties#getConnectionType --> failed to find local candidate "${pair.localCandidateId}" in getStats() results`
|
|
219
240
|
);
|
|
220
241
|
|
|
221
242
|
return false;
|
|
@@ -235,7 +256,7 @@ export default class MediaProperties {
|
|
|
235
256
|
return true;
|
|
236
257
|
}
|
|
237
258
|
LoggerProxy.logger.warn(
|
|
238
|
-
`Media:properties#
|
|
259
|
+
`Media:properties#getConnectionType --> missing localCandidate.protocol, candidateType=${localCandidate.candidateType}`
|
|
239
260
|
);
|
|
240
261
|
|
|
241
262
|
return false;
|
|
@@ -247,7 +268,7 @@ export default class MediaProperties {
|
|
|
247
268
|
.map((report) => report.state);
|
|
248
269
|
|
|
249
270
|
LoggerProxy.logger.warn(
|
|
250
|
-
`Media:properties#
|
|
271
|
+
`Media:properties#getConnectionType --> all candidate pair states: ${JSON.stringify(
|
|
251
272
|
candidatePairStates
|
|
252
273
|
)}`
|
|
253
274
|
);
|
|
@@ -255,4 +276,35 @@ export default class MediaProperties {
|
|
|
255
276
|
|
|
256
277
|
return foundConnectionType;
|
|
257
278
|
}
|
|
279
|
+
|
|
280
|
+
/**
|
|
281
|
+
* Returns information about current webrtc media connection
|
|
282
|
+
*
|
|
283
|
+
* @returns {Promise<Object>}
|
|
284
|
+
*/
|
|
285
|
+
async getCurrentConnectionInfo(): Promise<{
|
|
286
|
+
connectionType: string;
|
|
287
|
+
selectedCandidatePairChanges: number;
|
|
288
|
+
numTransports: number;
|
|
289
|
+
}> {
|
|
290
|
+
const allStatsReports = [];
|
|
291
|
+
|
|
292
|
+
try {
|
|
293
|
+
const statsResult = await this.webrtcMediaConnection.getStats();
|
|
294
|
+
statsResult.forEach((report) => allStatsReports.push(report));
|
|
295
|
+
} catch (error) {
|
|
296
|
+
LoggerProxy.logger.warn(
|
|
297
|
+
`Media:properties#getCurrentConnectionInfo --> getStats() failed: ${error}`
|
|
298
|
+
);
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
const connectionType = this.getConnectionType(allStatsReports);
|
|
302
|
+
const {selectedCandidatePairChanges, numTransports} = this.getTransportInfo(allStatsReports);
|
|
303
|
+
|
|
304
|
+
return {
|
|
305
|
+
connectionType,
|
|
306
|
+
selectedCandidatePairChanges,
|
|
307
|
+
numTransports,
|
|
308
|
+
};
|
|
309
|
+
}
|
|
258
310
|
}
|
|
@@ -21,7 +21,9 @@ export const emptyAudioReceive = {
|
|
|
21
21
|
direction: 'inactive',
|
|
22
22
|
isMain: true,
|
|
23
23
|
mariFecEnabled: false,
|
|
24
|
+
mariRtxEnabled: false,
|
|
24
25
|
mariQosEnabled: false,
|
|
26
|
+
mariLiteEnabled: false,
|
|
25
27
|
multistreamEnabled: false,
|
|
26
28
|
},
|
|
27
29
|
dtlsBitrate: 0,
|
|
@@ -75,7 +77,9 @@ export const emptyAudioTransmit = {
|
|
|
75
77
|
direction: 'inactive',
|
|
76
78
|
isMain: true,
|
|
77
79
|
mariFecEnabled: false,
|
|
80
|
+
mariRtxEnabled: false,
|
|
78
81
|
mariQosEnabled: false,
|
|
82
|
+
mariLiteEnabled: false,
|
|
79
83
|
multistreamEnabled: false,
|
|
80
84
|
},
|
|
81
85
|
dtlsBitrate: 0,
|
|
@@ -86,7 +90,6 @@ export const emptyAudioTransmit = {
|
|
|
86
90
|
queueDelay: 0,
|
|
87
91
|
remoteJitter: 0,
|
|
88
92
|
remoteLossRate: 0,
|
|
89
|
-
remoteReceiveRate: 0,
|
|
90
93
|
roundTripTime: 0,
|
|
91
94
|
rtcpBitrate: 0,
|
|
92
95
|
rtcpPackets: 0,
|
|
@@ -119,8 +122,10 @@ export const emptyVideoReceive = {
|
|
|
119
122
|
common: {
|
|
120
123
|
direction: 'inactive',
|
|
121
124
|
isMain: true, // Not avaliable
|
|
122
|
-
mariFecEnabled:
|
|
123
|
-
|
|
125
|
+
mariFecEnabled: false,
|
|
126
|
+
mariRtxEnabled: false,
|
|
127
|
+
mariQosEnabled: false,
|
|
128
|
+
mariLiteEnabled: false,
|
|
124
129
|
multistreamEnabled: true, // Not avaliable
|
|
125
130
|
},
|
|
126
131
|
dtlsBitrate: 0, // Not avaliable
|
|
@@ -184,8 +189,10 @@ export const emptyVideoTransmit = {
|
|
|
184
189
|
common: {
|
|
185
190
|
direction: 'inactive',
|
|
186
191
|
isMain: true,
|
|
187
|
-
mariFecEnabled: false,
|
|
188
|
-
|
|
192
|
+
mariFecEnabled: false,
|
|
193
|
+
mariRtxEnabled: false,
|
|
194
|
+
mariQosEnabled: false,
|
|
195
|
+
mariLiteEnabled: false,
|
|
189
196
|
multistreamEnabled: false, // Not avaliable
|
|
190
197
|
},
|
|
191
198
|
dtlsBitrate: 0, // Not avaliable
|
|
@@ -193,10 +200,9 @@ export const emptyVideoTransmit = {
|
|
|
193
200
|
fecBitrate: 0, // Not avaliable
|
|
194
201
|
fecPackets: 0, // TODO: check inbound-rtp// Not avaliable
|
|
195
202
|
maxBitrate: 0, // Currently hardcoded
|
|
196
|
-
queueDelay: 0,
|
|
203
|
+
queueDelay: 0,
|
|
197
204
|
remoteJitter: 0, // remoteInboundRtp.jitter
|
|
198
205
|
remoteLossRate: 0, // comparedResults.lossRate
|
|
199
|
-
remoteReceiveRate: 0, // compareResults.packetsLost
|
|
200
206
|
roundTripTime: 0, // compareResults.roundTripTime
|
|
201
207
|
rtcpBitrate: 0, // Dont have access to it
|
|
202
208
|
rtcpPackets: 0, // Dont have access to rtcp
|
|
@@ -34,6 +34,9 @@ interface IInMeetingActions {
|
|
|
34
34
|
canStartTranscribing?: boolean;
|
|
35
35
|
canStopTranscribing?: boolean;
|
|
36
36
|
isClosedCaptionActive?: boolean;
|
|
37
|
+
canStartManualCaption?: boolean;
|
|
38
|
+
canStopManualCaption?: boolean;
|
|
39
|
+
isManualCaptionActive?: boolean;
|
|
37
40
|
isSaveTranscriptsEnabled?: boolean;
|
|
38
41
|
isWebexAssistantActive?: boolean;
|
|
39
42
|
canViewCaptionPanel?: boolean;
|
|
@@ -137,6 +140,12 @@ export default class InMeetingActions implements IInMeetingActions {
|
|
|
137
140
|
|
|
138
141
|
isClosedCaptionActive = null;
|
|
139
142
|
|
|
143
|
+
canStartManualCaption = null;
|
|
144
|
+
|
|
145
|
+
canStopManualCaption = null;
|
|
146
|
+
|
|
147
|
+
isManualCaptionActive = null;
|
|
148
|
+
|
|
140
149
|
isSaveTranscriptsEnabled = null;
|
|
141
150
|
|
|
142
151
|
isWebexAssistantActive = null;
|
|
@@ -257,6 +266,9 @@ export default class InMeetingActions implements IInMeetingActions {
|
|
|
257
266
|
canStartTranscribing: this.canStartTranscribing,
|
|
258
267
|
canStopTranscribing: this.canStopTranscribing,
|
|
259
268
|
isClosedCaptionActive: this.isClosedCaptionActive,
|
|
269
|
+
canStartManualCaption: this.canStartManualCaption,
|
|
270
|
+
canStopManualCaption: this.canStopManualCaption,
|
|
271
|
+
isManualCaptionActive: this.isManualCaptionActive,
|
|
260
272
|
isSaveTranscriptsEnabled: this.isSaveTranscriptsEnabled,
|
|
261
273
|
isWebexAssistantActive: this.isWebexAssistantActive,
|
|
262
274
|
canViewCaptionPanel: this.canViewCaptionPanel,
|