@webex/plugin-meetings 3.0.0-beta.26 → 3.0.0-beta.261
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 +46 -8
- package/dist/annotation/annotation.types.js +7 -0
- package/dist/annotation/annotation.types.js.map +1 -0
- package/dist/annotation/constants.js +49 -0
- package/dist/annotation/constants.js.map +1 -0
- package/dist/annotation/index.js +342 -0
- package/dist/annotation/index.js.map +1 -0
- package/dist/breakouts/breakout.js +114 -14
- package/dist/breakouts/breakout.js.map +1 -1
- package/dist/breakouts/edit-lock-error.js +52 -0
- package/dist/breakouts/edit-lock-error.js.map +1 -0
- package/dist/breakouts/events.js +45 -0
- package/dist/breakouts/events.js.map +1 -0
- package/dist/breakouts/index.js +841 -19
- package/dist/breakouts/index.js.map +1 -1
- package/dist/breakouts/request.js +78 -0
- package/dist/breakouts/request.js.map +1 -0
- package/dist/breakouts/utils.js +67 -0
- package/dist/breakouts/utils.js.map +1 -0
- package/dist/common/errors/webex-errors.js +28 -7
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/logs/logger-proxy.js +1 -1
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/queue.js +24 -9
- package/dist/common/queue.js.map +1 -1
- package/dist/config.js +5 -10
- package/dist/config.js.map +1 -1
- package/dist/constants.js +196 -28
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/enums.js +14 -2
- package/dist/controls-options-manager/enums.js.map +1 -1
- package/dist/controls-options-manager/index.js +109 -15
- package/dist/controls-options-manager/index.js.map +1 -1
- package/dist/controls-options-manager/types.js +7 -0
- package/dist/controls-options-manager/types.js.map +1 -0
- package/dist/controls-options-manager/util.js +309 -18
- package/dist/controls-options-manager/util.js.map +1 -1
- package/dist/index.js +112 -1
- package/dist/index.js.map +1 -1
- package/dist/interpretation/collection.js +23 -0
- package/dist/interpretation/collection.js.map +1 -0
- package/dist/interpretation/index.js +366 -0
- package/dist/interpretation/index.js.map +1 -0
- package/dist/interpretation/siLanguage.js +25 -0
- package/dist/interpretation/siLanguage.js.map +1 -0
- package/dist/locus-info/controlsUtils.js +91 -2
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/index.js +381 -62
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +7 -1
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +43 -1
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +224 -63
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +89 -14
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +58 -116
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +60 -121
- package/dist/media/properties.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +82 -2
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +3022 -2795
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.js +292 -0
- package/dist/meeting/locusMediaRequest.js.map +1 -0
- package/dist/meeting/muteState.js +230 -124
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +256 -196
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/util.js +601 -417
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/index.js +70 -7
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +189 -51
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/util.js +1 -1
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +36 -36
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +22 -0
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +372 -90
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/meetings.types.js +7 -0
- package/dist/meetings/meetings.types.js.map +1 -0
- package/dist/meetings/request.js +2 -0
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +88 -1
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +49 -0
- package/dist/member/index.js.map +1 -1
- package/dist/member/types.js +25 -0
- package/dist/member/types.js.map +1 -0
- package/dist/member/util.js +121 -25
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +10 -0
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +86 -5
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +106 -38
- package/dist/members/request.js.map +1 -1
- package/dist/members/types.js +15 -0
- package/dist/members/types.js.map +1 -0
- package/dist/members/util.js +316 -233
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.js +10 -5
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +1 -468
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +238 -49
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/receiveSlot.js +49 -16
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/multistream/receiveSlotManager.js +52 -34
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +44 -18
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.js +60 -3
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +209 -59
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/multistream/sendSlotManager.js +233 -0
- package/dist/multistream/sendSlotManager.js.map +1 -0
- package/dist/reachability/index.js +161 -57
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +17 -8
- package/dist/reachability/request.js.map +1 -1
- package/dist/reconnection-manager/index.js +199 -154
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/index.js +21 -2
- package/dist/recording-controller/index.js.map +1 -1
- package/dist/recording-controller/util.js +9 -8
- package/dist/recording-controller/util.js.map +1 -1
- package/dist/roap/index.js +23 -29
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +112 -97
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +96 -36
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/rtcMetrics/constants.js +12 -0
- package/dist/rtcMetrics/constants.js.map +1 -0
- package/dist/rtcMetrics/index.js +117 -0
- package/dist/rtcMetrics/index.js.map +1 -0
- package/dist/statsAnalyzer/index.js +51 -34
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +6 -6
- 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/edit-lock-error.d.ts +15 -0
- package/dist/types/breakouts/events.d.ts +8 -0
- package/dist/types/breakouts/request.d.ts +22 -0
- package/dist/types/breakouts/utils.d.ts +15 -0
- package/dist/types/common/errors/webex-errors.d.ts +13 -1
- package/dist/types/common/queue.d.ts +9 -7
- package/dist/types/config.d.ts +1 -6
- package/dist/types/constants.d.ts +155 -21
- package/dist/types/controls-options-manager/enums.d.ts +11 -1
- package/dist/types/controls-options-manager/index.d.ts +17 -1
- package/dist/types/controls-options-manager/types.d.ts +43 -0
- package/dist/types/controls-options-manager/util.d.ts +1 -7
- package/dist/types/index.d.ts +6 -4
- 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/index.d.ts +57 -4
- package/dist/types/locus-info/parser.d.ts +65 -6
- package/dist/types/media/index.d.ts +2 -0
- package/dist/types/media/properties.d.ts +34 -48
- package/dist/types/meeting/in-meeting-actions.d.ts +82 -2
- package/dist/types/meeting/index.d.ts +344 -506
- package/dist/types/meeting/locusMediaRequest.d.ts +74 -0
- package/dist/types/meeting/muteState.d.ts +99 -23
- package/dist/types/meeting/request.d.ts +72 -43
- package/dist/types/meeting/util.d.ts +101 -1
- package/dist/types/meeting-info/index.d.ts +13 -1
- package/dist/types/meeting-info/meeting-info-v2.d.ts +31 -1
- package/dist/types/meetings/collection.d.ts +8 -0
- package/dist/types/meetings/index.d.ts +86 -12
- package/dist/types/meetings/meetings.types.d.ts +4 -0
- package/dist/types/member/index.d.ts +13 -0
- package/dist/types/member/types.d.ts +32 -0
- package/dist/types/members/collection.d.ts +5 -0
- package/dist/types/members/index.d.ts +35 -2
- package/dist/types/members/request.d.ts +73 -9
- package/dist/types/members/types.d.ts +24 -0
- package/dist/types/members/util.d.ts +209 -1
- package/dist/types/metrics/constants.d.ts +9 -4
- package/dist/types/metrics/index.d.ts +4 -119
- package/dist/types/multistream/mediaRequestManager.d.ts +73 -5
- package/dist/types/multistream/receiveSlot.d.ts +16 -12
- package/dist/types/multistream/receiveSlotManager.d.ts +19 -4
- package/dist/types/multistream/remoteMedia.d.ts +8 -29
- package/dist/types/multistream/remoteMediaGroup.d.ts +0 -9
- package/dist/types/multistream/remoteMediaManager.d.ts +46 -2
- package/dist/types/multistream/sendSlotManager.d.ts +61 -0
- package/dist/types/reachability/index.d.ts +44 -7
- package/dist/types/reachability/request.d.ts +7 -3
- package/dist/types/reconnection-manager/index.d.ts +9 -0
- package/dist/types/recording-controller/index.d.ts +15 -1
- package/dist/types/recording-controller/util.d.ts +5 -4
- package/dist/types/roap/request.d.ts +15 -11
- package/dist/types/roap/turnDiscovery.d.ts +18 -1
- package/dist/types/rtcMetrics/constants.d.ts +4 -0
- package/dist/types/rtcMetrics/index.d.ts +47 -0
- package/dist/types/statsAnalyzer/index.d.ts +6 -1
- package/package.json +23 -20
- package/src/annotation/annotation.types.ts +50 -0
- package/src/annotation/constants.ts +36 -0
- package/src/annotation/index.ts +328 -0
- package/src/breakouts/README.md +44 -14
- package/src/breakouts/breakout.ts +87 -9
- package/src/breakouts/edit-lock-error.ts +25 -0
- package/src/breakouts/events.ts +56 -0
- package/src/breakouts/index.ts +710 -10
- package/src/breakouts/request.ts +55 -0
- package/src/breakouts/utils.ts +57 -0
- package/src/common/errors/webex-errors.ts +27 -2
- package/src/common/logs/logger-proxy.ts +1 -1
- package/src/common/queue.ts +22 -8
- package/src/config.ts +4 -9
- package/src/constants.ts +178 -18
- package/src/controls-options-manager/enums.ts +12 -0
- package/src/controls-options-manager/index.ts +116 -21
- package/src/controls-options-manager/types.ts +59 -0
- package/src/controls-options-manager/util.ts +294 -14
- package/src/index.ts +40 -0
- package/src/interpretation/README.md +60 -0
- package/src/interpretation/collection.ts +19 -0
- package/src/interpretation/index.ts +332 -0
- package/src/interpretation/siLanguage.ts +18 -0
- package/src/locus-info/controlsUtils.ts +108 -0
- package/src/locus-info/index.ts +412 -59
- package/src/locus-info/infoUtils.ts +10 -2
- package/src/locus-info/mediaSharesUtils.ts +48 -0
- package/src/locus-info/parser.ts +231 -39
- package/src/locus-info/selfUtils.ts +81 -5
- package/src/media/index.ts +100 -122
- package/src/media/properties.ts +70 -108
- package/src/meeting/in-meeting-actions.ts +163 -3
- package/src/meeting/index.ts +2471 -2306
- package/src/meeting/locusMediaRequest.ts +313 -0
- package/src/meeting/muteState.ts +229 -131
- package/src/meeting/request.ts +172 -121
- package/src/meeting/util.ts +588 -394
- package/src/meeting-info/index.ts +79 -8
- package/src/meeting-info/meeting-info-v2.ts +168 -14
- package/src/meeting-info/util.ts +1 -1
- package/src/meeting-info/utilv2.ts +23 -23
- package/src/meetings/collection.ts +20 -0
- package/src/meetings/index.ts +414 -108
- package/src/meetings/meetings.types.ts +12 -0
- package/src/meetings/request.ts +2 -0
- package/src/meetings/util.ts +103 -4
- package/src/member/index.ts +49 -0
- package/src/member/types.ts +38 -0
- package/src/member/util.ts +127 -25
- package/src/members/collection.ts +8 -0
- package/src/members/index.ts +107 -6
- package/src/members/request.ts +97 -17
- package/src/members/types.ts +28 -0
- package/src/members/util.ts +319 -240
- package/src/metrics/constants.ts +9 -4
- package/src/metrics/index.ts +1 -490
- package/src/multistream/mediaRequestManager.ts +289 -79
- package/src/multistream/receiveSlot.ts +55 -18
- package/src/multistream/receiveSlotManager.ts +46 -24
- package/src/multistream/remoteMedia.ts +27 -2
- package/src/multistream/remoteMediaGroup.ts +59 -0
- package/src/multistream/remoteMediaManager.ts +148 -30
- package/src/multistream/sendSlotManager.ts +170 -0
- package/src/reachability/index.ts +165 -37
- package/src/reachability/request.ts +17 -8
- package/src/reconnection-manager/index.ts +81 -54
- package/src/recording-controller/index.ts +20 -3
- package/src/recording-controller/util.ts +26 -9
- package/src/roap/index.ts +23 -30
- package/src/roap/request.ts +100 -104
- package/src/roap/turnDiscovery.ts +51 -25
- package/src/rtcMetrics/constants.ts +3 -0
- package/src/rtcMetrics/index.ts +100 -0
- package/src/statsAnalyzer/index.ts +73 -35
- package/src/statsAnalyzer/mqaUtil.ts +8 -10
- package/test/integration/spec/converged-space-meetings.js +233 -0
- package/test/integration/spec/journey.js +320 -261
- package/test/integration/spec/space-meeting.js +76 -3
- package/test/unit/spec/annotation/index.ts +418 -0
- package/test/unit/spec/breakouts/breakout.ts +142 -24
- package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
- package/test/unit/spec/breakouts/events.ts +89 -0
- package/test/unit/spec/breakouts/index.ts +1545 -48
- package/test/unit/spec/breakouts/request.ts +104 -0
- package/test/unit/spec/breakouts/utils.js +72 -0
- package/test/unit/spec/common/queue.js +31 -2
- package/test/unit/spec/controls-options-manager/index.js +163 -0
- package/test/unit/spec/controls-options-manager/util.js +576 -60
- package/test/unit/spec/fixture/locus.js +1 -0
- package/test/unit/spec/interpretation/collection.ts +15 -0
- package/test/unit/spec/interpretation/index.ts +589 -0
- package/test/unit/spec/interpretation/siLanguage.ts +28 -0
- package/test/unit/spec/locus-info/controlsUtils.js +316 -43
- package/test/unit/spec/locus-info/index.js +1283 -33
- package/test/unit/spec/locus-info/infoUtils.js +37 -15
- package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
- package/test/unit/spec/locus-info/parser.js +62 -22
- package/test/unit/spec/locus-info/selfConstant.js +27 -4
- package/test/unit/spec/locus-info/selfUtils.js +208 -17
- package/test/unit/spec/media/index.ts +104 -37
- package/test/unit/spec/meeting/in-meeting-actions.ts +81 -3
- package/test/unit/spec/meeting/index.js +4095 -1913
- package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
- package/test/unit/spec/meeting/muteState.js +408 -208
- package/test/unit/spec/meeting/request.js +440 -45
- package/test/unit/spec/meeting/utils.js +679 -64
- package/test/unit/spec/meeting-info/index.js +293 -0
- package/test/unit/spec/meeting-info/meetinginfov2.js +517 -5
- package/test/unit/spec/meeting-info/utilv2.js +21 -0
- package/test/unit/spec/meetings/collection.js +14 -0
- package/test/unit/spec/meetings/index.js +941 -151
- package/test/unit/spec/meetings/utils.js +206 -2
- package/test/unit/spec/member/index.js +58 -4
- package/test/unit/spec/member/util.js +479 -35
- package/test/unit/spec/members/index.js +319 -1
- package/test/unit/spec/members/request.js +206 -27
- package/test/unit/spec/members/utils.js +184 -0
- package/test/unit/spec/metrics/index.js +1 -50
- package/test/unit/spec/multistream/mediaRequestManager.ts +803 -162
- package/test/unit/spec/multistream/receiveSlot.ts +72 -13
- package/test/unit/spec/multistream/receiveSlotManager.ts +58 -28
- package/test/unit/spec/multistream/remoteMedia.ts +30 -0
- package/test/unit/spec/multistream/remoteMediaGroup.ts +266 -0
- package/test/unit/spec/multistream/remoteMediaManager.ts +326 -0
- package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
- package/test/unit/spec/reachability/index.ts +343 -9
- package/test/unit/spec/reachability/request.js +68 -0
- package/test/unit/spec/reconnection-manager/index.js +84 -9
- package/test/unit/spec/recording-controller/index.js +294 -218
- package/test/unit/spec/recording-controller/util.js +223 -96
- package/test/unit/spec/roap/index.ts +31 -51
- package/test/unit/spec/roap/request.ts +203 -85
- package/test/unit/spec/roap/turnDiscovery.ts +48 -13
- package/test/unit/spec/rtcMetrics/index.ts +68 -0
- package/test/unit/spec/stats-analyzer/index.js +29 -2
- package/test/utils/constants.js +9 -0
- package/test/utils/integrationTestUtils.js +46 -0
- package/test/utils/testUtils.js +0 -45
- package/test/utils/webex-config.js +4 -0
- package/test/utils/webex-test-users.js +6 -3
- package/dist/meeting/effectsState.js +0 -262
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/metrics/config.js +0 -299
- package/dist/metrics/config.js.map +0 -1
- package/dist/types/meeting/effectsState.d.ts +0 -42
- package/dist/types/metrics/config.d.ts +0 -178
- package/src/index.js +0 -16
- package/src/meeting/effectsState.ts +0 -211
- package/src/metrics/config.ts +0 -495
- package/test/unit/spec/meeting/effectsState.js +0 -285
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
NoiseReductionEffectOptions,
|
|
3
|
+
VirtualBackgroundEffectOptions,
|
|
4
|
+
} from '@webex/media-helpers';
|
|
5
|
+
|
|
6
|
+
type INoiseReductionEffect = Omit<
|
|
7
|
+
NoiseReductionEffectOptions,
|
|
8
|
+
'authToken' | 'workletProcessorUrl' | 'legacyProcessorUrl'
|
|
9
|
+
>;
|
|
10
|
+
type IVirtualBackgroundEffect = Omit<VirtualBackgroundEffectOptions, 'authToken'>;
|
|
11
|
+
|
|
12
|
+
export type {INoiseReductionEffect, IVirtualBackgroundEffect};
|
package/src/meetings/request.ts
CHANGED
|
@@ -23,6 +23,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
23
23
|
LoggerProxy.logger.error(
|
|
24
24
|
`Meetings:request#getActiveMeetings --> failed to get locus details, ${error}`
|
|
25
25
|
);
|
|
26
|
+
throw new Error(error);
|
|
26
27
|
});
|
|
27
28
|
}
|
|
28
29
|
|
|
@@ -71,6 +72,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
71
72
|
LoggerProxy.logger.error(
|
|
72
73
|
`Meetings:request#determineRedirections --> failed to get locus details from url: ${url}, reason: ${error}`
|
|
73
74
|
);
|
|
75
|
+
throw new Error(error);
|
|
74
76
|
})
|
|
75
77
|
)
|
|
76
78
|
).then(() => Promise.resolve(responseBody));
|
package/src/meetings/util.ts
CHANGED
|
@@ -1,16 +1,23 @@
|
|
|
1
1
|
/* globals window */
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
|
-
_LOCUS_ID_,
|
|
5
|
-
_INCOMING_,
|
|
6
4
|
_CREATED_,
|
|
7
|
-
|
|
5
|
+
_INCOMING_,
|
|
6
|
+
_JOINED_,
|
|
7
|
+
_LEFT_,
|
|
8
|
+
_LOCUS_ID_,
|
|
9
|
+
_MOVED_,
|
|
10
|
+
BREAKOUTS,
|
|
8
11
|
CORRELATION_ID,
|
|
9
12
|
EVENT_TRIGGERS,
|
|
13
|
+
LOCUS,
|
|
14
|
+
LOCUSEVENT,
|
|
10
15
|
ROAP,
|
|
11
16
|
} from '../constants';
|
|
12
17
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
13
18
|
import Trigger from '../common/events/trigger-proxy';
|
|
19
|
+
import BEHAVIORAL_METRICS from '../metrics/constants';
|
|
20
|
+
import Metrics from '../metrics';
|
|
14
21
|
|
|
15
22
|
/**
|
|
16
23
|
* Meetings Media Codec Missing Event
|
|
@@ -44,6 +51,14 @@ MeetingsUtil.handleRoapMercury = (envelope, meetingCollection) => {
|
|
|
44
51
|
if (meeting) {
|
|
45
52
|
const {seq, messageType, tieBreaker, errorType, errorCause} = data.message;
|
|
46
53
|
|
|
54
|
+
Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ROAP_MERCURY_EVENT_RECEIVED, {
|
|
55
|
+
correlation_id: data.correlationId,
|
|
56
|
+
seq,
|
|
57
|
+
message_type: messageType,
|
|
58
|
+
error_type: errorType,
|
|
59
|
+
error_cause: errorCause,
|
|
60
|
+
});
|
|
61
|
+
|
|
47
62
|
if (messageType === ROAP.ROAP_TYPES.TURN_DISCOVERY_RESPONSE) {
|
|
48
63
|
// turn discovery is not part of normal roap protocol and so we are not handling it
|
|
49
64
|
// through the usual roap state machine
|
|
@@ -58,12 +73,36 @@ MeetingsUtil.handleRoapMercury = (envelope, meetingCollection) => {
|
|
|
58
73
|
errorCause,
|
|
59
74
|
};
|
|
60
75
|
|
|
76
|
+
const mediaServer = MeetingsUtil.getMediaServer(roapMessage.sdp);
|
|
77
|
+
|
|
61
78
|
meeting.mediaProperties.webrtcMediaConnection.roapMessageReceived(roapMessage);
|
|
79
|
+
|
|
80
|
+
if (mediaServer) {
|
|
81
|
+
meeting.mediaProperties.webrtcMediaConnection.mediaServer = mediaServer;
|
|
82
|
+
}
|
|
62
83
|
}
|
|
63
84
|
}
|
|
64
85
|
}
|
|
65
86
|
};
|
|
66
87
|
|
|
88
|
+
MeetingsUtil.getMediaServer = (sdp) => {
|
|
89
|
+
let mediaServer;
|
|
90
|
+
|
|
91
|
+
// Attempt to collect the media server from the roap message.
|
|
92
|
+
try {
|
|
93
|
+
mediaServer = sdp
|
|
94
|
+
.split('\r\n')
|
|
95
|
+
.find((line) => line.startsWith('o='))
|
|
96
|
+
.split(' ')
|
|
97
|
+
.shift()
|
|
98
|
+
.replace('o=', '');
|
|
99
|
+
} catch {
|
|
100
|
+
mediaServer = undefined;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
return mediaServer;
|
|
104
|
+
};
|
|
105
|
+
|
|
67
106
|
MeetingsUtil.checkForCorrelationId = (deviceUrl, locus) => {
|
|
68
107
|
let devices = [];
|
|
69
108
|
|
|
@@ -85,11 +124,13 @@ MeetingsUtil.checkForCorrelationId = (deviceUrl, locus) => {
|
|
|
85
124
|
MeetingsUtil.parseDefaultSiteFromMeetingPreferences = (userPreferences) => {
|
|
86
125
|
let result = '';
|
|
87
126
|
|
|
88
|
-
if (userPreferences
|
|
127
|
+
if (userPreferences?.sites?.length) {
|
|
89
128
|
const defaultSite = userPreferences.sites.find((site) => site.default);
|
|
90
129
|
|
|
91
130
|
if (defaultSite) {
|
|
92
131
|
result = defaultSite.siteUrl;
|
|
132
|
+
} else {
|
|
133
|
+
result = userPreferences.sites[0].siteUrl;
|
|
93
134
|
}
|
|
94
135
|
}
|
|
95
136
|
|
|
@@ -196,4 +237,62 @@ MeetingsUtil.checkH264Support = async function checkH264Support(options: {
|
|
|
196
237
|
}, delay);
|
|
197
238
|
};
|
|
198
239
|
|
|
240
|
+
/**
|
|
241
|
+
* get device from locus data
|
|
242
|
+
* @param {Object} newLocus new locus data
|
|
243
|
+
* @param {String} deviceUrl current device url
|
|
244
|
+
* @returns {Object}
|
|
245
|
+
*/
|
|
246
|
+
MeetingsUtil.getThisDevice = (newLocus: any, deviceUrl: string) => {
|
|
247
|
+
if (newLocus?.self?.devices?.length > 0) {
|
|
248
|
+
return newLocus.self.devices.find((device) => device.url === deviceUrl);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
return null;
|
|
252
|
+
};
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* get self device joined status from locus data
|
|
256
|
+
* @param {Object} meeting current meeting data
|
|
257
|
+
* @param {Object} newLocus new locus data
|
|
258
|
+
* @param {String} deviceUrl current device url
|
|
259
|
+
* @returns {Object}
|
|
260
|
+
*/
|
|
261
|
+
MeetingsUtil.joinedOnThisDevice = (meeting: any, newLocus: any, deviceUrl: string) => {
|
|
262
|
+
const thisDevice = MeetingsUtil.getThisDevice(newLocus, deviceUrl);
|
|
263
|
+
if (thisDevice) {
|
|
264
|
+
if (!thisDevice.correlationId || meeting?.correlationId === thisDevice.correlationId) {
|
|
265
|
+
return (
|
|
266
|
+
thisDevice.state === _JOINED_ ||
|
|
267
|
+
(thisDevice.state === _LEFT_ && thisDevice.reason === _MOVED_)
|
|
268
|
+
);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
return false;
|
|
273
|
+
};
|
|
274
|
+
|
|
275
|
+
/**
|
|
276
|
+
* check the new locus is breakout session's one or not
|
|
277
|
+
* @param {Object} newLocus new locus data
|
|
278
|
+
* @returns {boolean}
|
|
279
|
+
* @private
|
|
280
|
+
*/
|
|
281
|
+
MeetingsUtil.isBreakoutLocusDTO = (newLocus: any) => {
|
|
282
|
+
return newLocus?.controls?.breakout?.sessionType === BREAKOUTS.SESSION_TYPES.BREAKOUT;
|
|
283
|
+
};
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* check the locus is valid breakout locus or not
|
|
287
|
+
* @param {Object} locus
|
|
288
|
+
* @returns {boolean}
|
|
289
|
+
* @private
|
|
290
|
+
*/
|
|
291
|
+
MeetingsUtil.isValidBreakoutLocus = (locus: any) => {
|
|
292
|
+
const inActiveStatus = locus?.fullState?.state === LOCUS.STATE.INACTIVE;
|
|
293
|
+
const isLocusAsBreakout = MeetingsUtil.isBreakoutLocusDTO(locus);
|
|
294
|
+
const selfJoined = locus.self?.state === _JOINED_;
|
|
295
|
+
|
|
296
|
+
return isLocusAsBreakout && !inActiveStatus && selfJoined;
|
|
297
|
+
};
|
|
199
298
|
export default MeetingsUtil;
|
package/src/member/index.ts
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
3
3
|
*/
|
|
4
4
|
import {MEETINGS, _IN_LOBBY_, _NOT_IN_MEETING_, _IN_MEETING_} from '../constants';
|
|
5
|
+
import {IExternalRoles, IMediaStatus, ParticipantWithRoles} from './types';
|
|
5
6
|
|
|
6
7
|
import MemberUtil from './util';
|
|
7
8
|
|
|
@@ -28,10 +29,14 @@ export default class Member {
|
|
|
28
29
|
isSelf: any;
|
|
29
30
|
isUser: any;
|
|
30
31
|
isVideoMuted: any;
|
|
32
|
+
roles: IExternalRoles;
|
|
33
|
+
mediaStatus: IMediaStatus;
|
|
31
34
|
name: any;
|
|
32
35
|
participant: any;
|
|
33
36
|
status: any;
|
|
34
37
|
supportsBreakouts: boolean;
|
|
38
|
+
supportsInterpretation: boolean;
|
|
39
|
+
supportLiveAnnotation: boolean;
|
|
35
40
|
type: any;
|
|
36
41
|
namespace = MEETINGS;
|
|
37
42
|
|
|
@@ -108,6 +113,13 @@ export default class Member {
|
|
|
108
113
|
* @memberof Member
|
|
109
114
|
*/
|
|
110
115
|
this.supportsBreakouts = null;
|
|
116
|
+
/**
|
|
117
|
+
* @instance
|
|
118
|
+
* @type {Boolean}
|
|
119
|
+
* @public
|
|
120
|
+
* @memberof Member
|
|
121
|
+
*/
|
|
122
|
+
this.supportLiveAnnotation = null;
|
|
111
123
|
/**
|
|
112
124
|
* @instance
|
|
113
125
|
* @type {Boolean}
|
|
@@ -228,6 +240,27 @@ export default class Member {
|
|
|
228
240
|
* @memberof Member
|
|
229
241
|
*/
|
|
230
242
|
this.isModeratorAssignmentProhibited = null;
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* @instance
|
|
246
|
+
* @type {IExternalRoles}
|
|
247
|
+
* @public
|
|
248
|
+
* @memberof Member
|
|
249
|
+
*/
|
|
250
|
+
this.roles = null;
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* @instance
|
|
254
|
+
* @type {IMediaStatus}
|
|
255
|
+
* @public
|
|
256
|
+
* @memberof Member
|
|
257
|
+
* @example {audio: MediaStatus.RECVONLY, video: MediaStatus.SENDRECV}
|
|
258
|
+
*/
|
|
259
|
+
this.mediaStatus = {
|
|
260
|
+
audio: null,
|
|
261
|
+
video: null,
|
|
262
|
+
};
|
|
263
|
+
|
|
231
264
|
// TODO: more participant types
|
|
232
265
|
// such as native client, web client, is a device, what type of phone, etc
|
|
233
266
|
this.processParticipant(participant);
|
|
@@ -251,6 +284,8 @@ export default class Member {
|
|
|
251
284
|
this.isVideoMuted = MemberUtil.isVideoMuted(participant);
|
|
252
285
|
this.isHandRaised = MemberUtil.isHandRaised(participant);
|
|
253
286
|
this.supportsBreakouts = MemberUtil.isBreakoutsSupported(participant);
|
|
287
|
+
this.supportsInterpretation = MemberUtil.isInterpretationSupported(participant);
|
|
288
|
+
this.supportLiveAnnotation = MemberUtil.isLiveAnnotationSupported(participant);
|
|
254
289
|
this.isGuest = MemberUtil.isGuest(participant);
|
|
255
290
|
this.isUser = MemberUtil.isUser(participant);
|
|
256
291
|
this.isDevice = MemberUtil.isDevice(participant);
|
|
@@ -258,6 +293,7 @@ export default class Member {
|
|
|
258
293
|
this.isModeratorAssignmentProhibited =
|
|
259
294
|
MemberUtil.isModeratorAssignmentProhibited(participant);
|
|
260
295
|
this.processStatus(participant);
|
|
296
|
+
this.processRoles(participant as ParticipantWithRoles);
|
|
261
297
|
// must be done last
|
|
262
298
|
this.isNotAdmitted = MemberUtil.isNotAdmitted(participant, this.isGuest, this.status);
|
|
263
299
|
}
|
|
@@ -303,6 +339,8 @@ export default class Member {
|
|
|
303
339
|
this.isAudioMuted,
|
|
304
340
|
this.type
|
|
305
341
|
);
|
|
342
|
+
|
|
343
|
+
this.mediaStatus = MemberUtil.extractMediaStatus(this.participant);
|
|
306
344
|
}
|
|
307
345
|
|
|
308
346
|
/**
|
|
@@ -427,6 +465,17 @@ export default class Member {
|
|
|
427
465
|
}
|
|
428
466
|
}
|
|
429
467
|
|
|
468
|
+
/**
|
|
469
|
+
* process the roles that have been applied to this member
|
|
470
|
+
* @param {Object} participant
|
|
471
|
+
* @returns {undefined}
|
|
472
|
+
* @private
|
|
473
|
+
* @memberof Member
|
|
474
|
+
*/
|
|
475
|
+
private processRoles(participant: ParticipantWithRoles) {
|
|
476
|
+
this.roles = MemberUtil.extractControlRoles(participant);
|
|
477
|
+
}
|
|
478
|
+
|
|
430
479
|
/**
|
|
431
480
|
* set the type for the member, could be MEETING or CALL
|
|
432
481
|
* @param {String} type
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export interface IExternalRoles {
|
|
2
|
+
cohost: boolean;
|
|
3
|
+
moderator: boolean;
|
|
4
|
+
presenter: boolean;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export enum ServerRoles {
|
|
8
|
+
Cohost = 'COHOST',
|
|
9
|
+
Moderator = 'MODERATOR',
|
|
10
|
+
Presenter = 'PRESENTER',
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export type ServerRoleShape = {
|
|
14
|
+
type: ServerRoles;
|
|
15
|
+
hasRole: boolean;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export type ParticipantWithRoles = {
|
|
19
|
+
controls: {
|
|
20
|
+
role: {
|
|
21
|
+
roles: Array<ServerRoleShape>;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
// values are inherited from locus so don't update these
|
|
27
|
+
export enum MediaStatus {
|
|
28
|
+
RECVONLY = 'RECVONLY', // participant only receiving and not sending
|
|
29
|
+
SENDONLY = 'SENDONLY', // participant only sending and not receiving
|
|
30
|
+
SENDRECV = 'SENDRECV', // participant both sending and receiving
|
|
31
|
+
INACTIVE = 'INACTIVE', // participant is not connected to media source
|
|
32
|
+
UNKNOWN = 'UNKNOWN', // participant has not added media in the meeting
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export interface IMediaStatus {
|
|
36
|
+
audio: MediaStatus;
|
|
37
|
+
video: MediaStatus;
|
|
38
|
+
}
|
package/src/member/util.ts
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
import {
|
|
2
|
+
IExternalRoles,
|
|
3
|
+
ParticipantWithRoles,
|
|
4
|
+
ServerRoles,
|
|
5
|
+
ServerRoleShape,
|
|
6
|
+
IMediaStatus,
|
|
7
|
+
} from './types';
|
|
1
8
|
import {
|
|
2
9
|
_USER_,
|
|
3
10
|
_RESOURCE_ROOM_,
|
|
@@ -14,11 +21,65 @@ import {
|
|
|
14
21
|
_SEND_RECEIVE_,
|
|
15
22
|
_RECEIVE_ONLY_,
|
|
16
23
|
_CALL_,
|
|
24
|
+
VIDEO,
|
|
25
|
+
AUDIO,
|
|
17
26
|
} from '../constants';
|
|
18
27
|
import ParameterError from '../common/errors/parameter';
|
|
19
28
|
|
|
20
29
|
const MemberUtil: any = {};
|
|
21
30
|
|
|
31
|
+
/**
|
|
32
|
+
* @param {Object} participant the locus participant
|
|
33
|
+
* @returns {[ServerRoleShape]}
|
|
34
|
+
*/
|
|
35
|
+
MemberUtil.getControlsRoles = (participant: ParticipantWithRoles): Array<ServerRoleShape> =>
|
|
36
|
+
participant?.controls?.role?.roles;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* @param {Object} participant the locus participant
|
|
40
|
+
* @param {ServerRoles} controlRole the search role
|
|
41
|
+
* @returns {Boolean}
|
|
42
|
+
*/
|
|
43
|
+
MemberUtil.hasRole = (participant: any, controlRole: ServerRoles): boolean =>
|
|
44
|
+
MemberUtil.getControlsRoles(participant)?.some(
|
|
45
|
+
(role) => role.type === controlRole && role.hasRole
|
|
46
|
+
);
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* @param {Object} participant the locus participant
|
|
50
|
+
* @returns {Boolean}
|
|
51
|
+
*/
|
|
52
|
+
MemberUtil.hasCohost = (participant: ParticipantWithRoles): boolean =>
|
|
53
|
+
MemberUtil.hasRole(participant, ServerRoles.Cohost) || false;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* @param {Object} participant the locus participant
|
|
57
|
+
* @returns {Boolean}
|
|
58
|
+
*/
|
|
59
|
+
MemberUtil.hasModerator = (participant: ParticipantWithRoles): boolean =>
|
|
60
|
+
MemberUtil.hasRole(participant, ServerRoles.Moderator) || false;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* @param {Object} participant the locus participant
|
|
64
|
+
* @returns {Boolean}
|
|
65
|
+
*/
|
|
66
|
+
MemberUtil.hasPresenter = (participant: ParticipantWithRoles): boolean =>
|
|
67
|
+
MemberUtil.hasRole(participant, ServerRoles.Presenter) || false;
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* @param {Object} participant the locus participant
|
|
71
|
+
* @returns {IExternalRoles}
|
|
72
|
+
*/
|
|
73
|
+
MemberUtil.extractControlRoles = (participant: ParticipantWithRoles): IExternalRoles => {
|
|
74
|
+
const roles = {
|
|
75
|
+
cohost: MemberUtil.hasCohost(participant),
|
|
76
|
+
moderator: MemberUtil.hasModerator(participant),
|
|
77
|
+
presenter: MemberUtil.hasPresenter(participant),
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
return roles;
|
|
81
|
+
};
|
|
82
|
+
|
|
22
83
|
/**
|
|
23
84
|
* @param {Object} participant the locus participant
|
|
24
85
|
* @returns {Boolean}
|
|
@@ -93,30 +154,20 @@ MemberUtil.isAudioMuted = (participant: any) => {
|
|
|
93
154
|
if (!participant) {
|
|
94
155
|
throw new ParameterError('Audio could not be processed, participant is undefined.');
|
|
95
156
|
}
|
|
96
|
-
const mutedStatus = MemberUtil.isMuted(participant.status, AUDIO_STATUS);
|
|
97
157
|
|
|
98
|
-
|
|
99
|
-
if (participant.controls.audio.muted) {
|
|
100
|
-
return true;
|
|
101
|
-
}
|
|
102
|
-
if (mutedStatus) {
|
|
103
|
-
return true;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
return false;
|
|
158
|
+
return MemberUtil.isMuted(participant, AUDIO_STATUS, AUDIO);
|
|
108
159
|
};
|
|
109
160
|
|
|
110
161
|
/**
|
|
111
162
|
* @param {Object} participant the locus participant
|
|
112
163
|
* @returns {Boolean}
|
|
113
164
|
*/
|
|
114
|
-
MemberUtil.isVideoMuted = (participant: any) => {
|
|
165
|
+
MemberUtil.isVideoMuted = (participant: any): boolean => {
|
|
115
166
|
if (!participant) {
|
|
116
167
|
throw new ParameterError('Video could not be processed, participant is undefined.');
|
|
117
168
|
}
|
|
118
169
|
|
|
119
|
-
return MemberUtil.isMuted(participant
|
|
170
|
+
return MemberUtil.isMuted(participant, VIDEO_STATUS, VIDEO);
|
|
120
171
|
};
|
|
121
172
|
|
|
122
173
|
/**
|
|
@@ -144,22 +195,57 @@ MemberUtil.isBreakoutsSupported = (participant) => {
|
|
|
144
195
|
};
|
|
145
196
|
|
|
146
197
|
/**
|
|
147
|
-
*
|
|
148
|
-
* @param {String} status
|
|
149
|
-
* @param {String} accessor
|
|
198
|
+
* @param {Object} participant the locus participant
|
|
150
199
|
* @returns {Boolean}
|
|
151
200
|
*/
|
|
152
|
-
MemberUtil.
|
|
153
|
-
if (
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
if (status[accessor] === _SEND_RECEIVE_) {
|
|
158
|
-
return false;
|
|
159
|
-
}
|
|
201
|
+
MemberUtil.isInterpretationSupported = (participant) => {
|
|
202
|
+
if (!participant) {
|
|
203
|
+
throw new ParameterError(
|
|
204
|
+
'Interpretation support could not be processed, participant is undefined.'
|
|
205
|
+
);
|
|
160
206
|
}
|
|
161
207
|
|
|
162
|
-
return
|
|
208
|
+
return !participant.doesNotSupportSiInterpreter;
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* @param {Object} participant the locus participant
|
|
213
|
+
* @returns {Boolean}
|
|
214
|
+
*/
|
|
215
|
+
MemberUtil.isLiveAnnotationSupported = (participant) => {
|
|
216
|
+
if (!participant) {
|
|
217
|
+
throw new ParameterError(
|
|
218
|
+
'LiveAnnotation support could not be processed, participant is undefined.'
|
|
219
|
+
);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
return !participant.annotatorAssignmentNotAllowed;
|
|
223
|
+
};
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* utility method for audio/video muted status
|
|
227
|
+
* @param {any} participant
|
|
228
|
+
* @param {String} statusAccessor
|
|
229
|
+
* @param {String} controlsAccessor
|
|
230
|
+
* @returns {Boolean | undefined}
|
|
231
|
+
*/
|
|
232
|
+
MemberUtil.isMuted = (participant: any, statusAccessor: string, controlsAccessor: string) => {
|
|
233
|
+
// check remote mute
|
|
234
|
+
const remoteMute = participant?.controls?.[controlsAccessor]?.muted;
|
|
235
|
+
if (remoteMute === true) {
|
|
236
|
+
return true;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
// check local mute
|
|
240
|
+
const localStatus = participant?.status?.[statusAccessor];
|
|
241
|
+
if (localStatus === _RECEIVE_ONLY_) {
|
|
242
|
+
return true;
|
|
243
|
+
}
|
|
244
|
+
if (localStatus === _SEND_RECEIVE_) {
|
|
245
|
+
return false;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
return remoteMute;
|
|
163
249
|
};
|
|
164
250
|
|
|
165
251
|
/**
|
|
@@ -266,6 +352,22 @@ MemberUtil.extractId = (participant: any) => {
|
|
|
266
352
|
return null;
|
|
267
353
|
};
|
|
268
354
|
|
|
355
|
+
/**
|
|
356
|
+
* extracts the media status from nested participant object
|
|
357
|
+
* @param {Object} participant the locus participant
|
|
358
|
+
* @returns {Object}
|
|
359
|
+
*/
|
|
360
|
+
MemberUtil.extractMediaStatus = (participant: any): IMediaStatus => {
|
|
361
|
+
if (!participant) {
|
|
362
|
+
throw new ParameterError('Media status could not be extracted, participant is undefined.');
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
return {
|
|
366
|
+
audio: participant.status?.audioStatus,
|
|
367
|
+
video: participant.status?.videoStatus,
|
|
368
|
+
};
|
|
369
|
+
};
|
|
370
|
+
|
|
269
371
|
/**
|
|
270
372
|
* @param {Object} participant the locus participant
|
|
271
373
|
* @returns {String}
|