@webex/plugin-meetings 3.8.0-next.58 → 3.8.0-next.59
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/constants.js +1 -120
- package/dist/constants.js.map +1 -1
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/meeting/index.js +15 -13
- package/dist/meeting/index.js.map +1 -1
- package/dist/types/constants.d.ts +0 -85
- package/dist/webinar/index.js +1 -1
- package/package.json +5 -5
- package/src/constants.ts +0 -90
- package/src/meeting/index.ts +14 -15
- package/test/unit/spec/meeting/index.js +22 -25
@@ -956,91 +956,6 @@ export declare const NETWORK_STATUS: {
|
|
956
956
|
readonly CONNECTED: "CONNECTED";
|
957
957
|
};
|
958
958
|
export type NETWORK_STATUS = Enum<typeof NETWORK_STATUS>;
|
959
|
-
export declare const NETWORK_TYPE: {
|
960
|
-
VPN: string;
|
961
|
-
UNKNOWN: string;
|
962
|
-
WIFI: string;
|
963
|
-
ETHERNET: string;
|
964
|
-
};
|
965
|
-
export declare const STATS: {
|
966
|
-
SEND_DIRECTION: string;
|
967
|
-
RECEIVE_DIRECTION: string;
|
968
|
-
REMOTE: string;
|
969
|
-
LOCAL: string;
|
970
|
-
};
|
971
|
-
export declare const MQA_STATS: {
|
972
|
-
MQA_SIZE: number;
|
973
|
-
CA_TYPE: string;
|
974
|
-
DEFAULT_IP: string;
|
975
|
-
DEFAULT_SHARE_SENDER_STATS: {
|
976
|
-
common: {
|
977
|
-
common: {
|
978
|
-
direction: string;
|
979
|
-
isMain: boolean;
|
980
|
-
mariFecEnabled: boolean;
|
981
|
-
mariRtxEnabled: boolean;
|
982
|
-
mariLiteEnabled: boolean;
|
983
|
-
mariQosEnabled: boolean;
|
984
|
-
multistreamEnabled: boolean;
|
985
|
-
};
|
986
|
-
availableBitrate: number;
|
987
|
-
dtlsBitrate: number;
|
988
|
-
dtlsPackets: number;
|
989
|
-
fecBitrate: number;
|
990
|
-
fecPackets: number;
|
991
|
-
maxBitrate: number;
|
992
|
-
queueDelay: number;
|
993
|
-
remoteJitter: number;
|
994
|
-
remoteLossRate: number;
|
995
|
-
roundTripTime: number;
|
996
|
-
rtcpBitrate: number;
|
997
|
-
rtcpPackets: number;
|
998
|
-
rtpBitrate: number;
|
999
|
-
rtpPackets: number;
|
1000
|
-
stunBitrate: number;
|
1001
|
-
stunPackets: number;
|
1002
|
-
transportType: string;
|
1003
|
-
};
|
1004
|
-
streams: {
|
1005
|
-
common: {
|
1006
|
-
codec: string;
|
1007
|
-
duplicateSsci: number;
|
1008
|
-
requestedBitrate: number;
|
1009
|
-
requestedFrames: number;
|
1010
|
-
rtpPackets: number;
|
1011
|
-
ssci: number;
|
1012
|
-
transmittedBitrate: number;
|
1013
|
-
transmittedFrameRate: number;
|
1014
|
-
};
|
1015
|
-
h264CodecProfile: string;
|
1016
|
-
localConfigurationChanges: number;
|
1017
|
-
remoteConfigurationChanges: number;
|
1018
|
-
requestedFrameSize: number;
|
1019
|
-
requestedKeyFrames: number;
|
1020
|
-
transmittedFrameSize: number;
|
1021
|
-
transmittedHeight: number;
|
1022
|
-
transmittedKeyFrames: number;
|
1023
|
-
transmittedWidth: number;
|
1024
|
-
}[];
|
1025
|
-
};
|
1026
|
-
intervalMetadata: {
|
1027
|
-
memoryUsage: {
|
1028
|
-
cpuBitWidth: number;
|
1029
|
-
mainProcessMaximumMemoryBytes: number;
|
1030
|
-
osBitWidth: number;
|
1031
|
-
processAverageMemoryUsage: number;
|
1032
|
-
processMaximumMemoryBytes: number;
|
1033
|
-
processMaximumMemoryUsage: number;
|
1034
|
-
systemAverageMemoryUsage: number;
|
1035
|
-
systemMaximumMemoryUsage: number;
|
1036
|
-
};
|
1037
|
-
peerReflexiveIP: string;
|
1038
|
-
processAverageCPU: number;
|
1039
|
-
processMaximumCPU: number;
|
1040
|
-
systemAverageCPU: number;
|
1041
|
-
systemMaximumCPU: number;
|
1042
|
-
};
|
1043
|
-
};
|
1044
959
|
export declare const QUALITY_LEVELS: {
|
1045
960
|
LOW: string;
|
1046
961
|
MEDIUM: string;
|
package/dist/webinar/index.js
CHANGED
package/package.json
CHANGED
@@ -43,7 +43,7 @@
|
|
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.8.0-next.
|
46
|
+
"@webex/plugin-meetings": "3.8.0-next.59",
|
47
47
|
"@webex/plugin-rooms": "3.8.0-next.21",
|
48
48
|
"@webex/test-helper-chai": "3.8.0-next.17",
|
49
49
|
"@webex/test-helper-mocha": "3.8.0-next.17",
|
@@ -63,7 +63,7 @@
|
|
63
63
|
"dependencies": {
|
64
64
|
"@webex/common": "3.8.0-next.17",
|
65
65
|
"@webex/event-dictionary-ts": "^1.0.1753",
|
66
|
-
"@webex/internal-media-core": "2.
|
66
|
+
"@webex/internal-media-core": "2.16.0",
|
67
67
|
"@webex/internal-plugin-conversation": "3.8.0-next.21",
|
68
68
|
"@webex/internal-plugin-device": "3.8.0-next.17",
|
69
69
|
"@webex/internal-plugin-llm": "3.8.0-next.20",
|
@@ -71,8 +71,8 @@
|
|
71
71
|
"@webex/internal-plugin-metrics": "3.8.0-next.17",
|
72
72
|
"@webex/internal-plugin-support": "3.8.0-next.21",
|
73
73
|
"@webex/internal-plugin-user": "3.8.0-next.17",
|
74
|
-
"@webex/internal-plugin-voicea": "3.8.0-next.
|
75
|
-
"@webex/media-helpers": "3.8.0-next.
|
74
|
+
"@webex/internal-plugin-voicea": "3.8.0-next.59",
|
75
|
+
"@webex/media-helpers": "3.8.0-next.21",
|
76
76
|
"@webex/plugin-people": "3.8.0-next.19",
|
77
77
|
"@webex/plugin-rooms": "3.8.0-next.21",
|
78
78
|
"@webex/web-capabilities": "^1.4.0",
|
@@ -92,5 +92,5 @@
|
|
92
92
|
"//": [
|
93
93
|
"TODO: upgrade jwt-decode when moving to node 18"
|
94
94
|
],
|
95
|
-
"version": "3.8.0-next.
|
95
|
+
"version": "3.8.0-next.59"
|
96
96
|
}
|
package/src/constants.ts
CHANGED
@@ -1166,96 +1166,6 @@ export const NETWORK_STATUS = {
|
|
1166
1166
|
|
1167
1167
|
export type NETWORK_STATUS = Enum<typeof NETWORK_STATUS>;
|
1168
1168
|
|
1169
|
-
export const NETWORK_TYPE = {
|
1170
|
-
VPN: 'vpn',
|
1171
|
-
UNKNOWN: 'unknown',
|
1172
|
-
WIFI: 'wifi',
|
1173
|
-
ETHERNET: 'ethernet',
|
1174
|
-
};
|
1175
|
-
|
1176
|
-
export const STATS = {
|
1177
|
-
SEND_DIRECTION: 'send',
|
1178
|
-
RECEIVE_DIRECTION: 'recv',
|
1179
|
-
REMOTE: 'remote',
|
1180
|
-
LOCAL: 'local',
|
1181
|
-
};
|
1182
|
-
|
1183
|
-
export const MQA_STATS = {
|
1184
|
-
MQA_SIZE: 120, // MQA is done on 60 second intervals by server def, add a buffer for missed events
|
1185
|
-
CA_TYPE: 'MQA',
|
1186
|
-
DEFAULT_IP: '0.0.0.0',
|
1187
|
-
DEFAULT_SHARE_SENDER_STATS: {
|
1188
|
-
common: {
|
1189
|
-
common: {
|
1190
|
-
direction: 'sendrecv', // TODO: parse from SDP and save globally
|
1191
|
-
isMain: false, // always true for share sender
|
1192
|
-
mariFecEnabled: false, // unavailable
|
1193
|
-
mariRtxEnabled: false, // unavailable
|
1194
|
-
mariLiteEnabled: false, // unavailable
|
1195
|
-
mariQosEnabled: false, // unavailable
|
1196
|
-
multistreamEnabled: false, // unavailable
|
1197
|
-
},
|
1198
|
-
availableBitrate: 0,
|
1199
|
-
dtlsBitrate: 0, // unavailable
|
1200
|
-
dtlsPackets: 0, // unavailable
|
1201
|
-
fecBitrate: 0, // unavailable
|
1202
|
-
fecPackets: 0, // unavailable
|
1203
|
-
maxBitrate: 0, // unavailable
|
1204
|
-
queueDelay: 0, // unavailable
|
1205
|
-
remoteJitter: 0, // unavailable
|
1206
|
-
remoteLossRate: 0,
|
1207
|
-
roundTripTime: 0,
|
1208
|
-
rtcpBitrate: 0, // unavailable
|
1209
|
-
rtcpPackets: 0, // unavailable
|
1210
|
-
rtpBitrate: 0, // unavailable
|
1211
|
-
rtpPackets: 0,
|
1212
|
-
stunBitrate: 0, // unavailable
|
1213
|
-
stunPackets: 0, // unavailable
|
1214
|
-
transportType: 'UDP', // TODO: parse the transport type from the SDP and save globally
|
1215
|
-
},
|
1216
|
-
streams: [
|
1217
|
-
{
|
1218
|
-
common: {
|
1219
|
-
codec: 'H264', // TODO: parse the codec from the SDP and save globally
|
1220
|
-
duplicateSsci: 0, // unavailable
|
1221
|
-
requestedBitrate: 0, // unavailable
|
1222
|
-
requestedFrames: 0, // unavailable
|
1223
|
-
rtpPackets: 0,
|
1224
|
-
ssci: 0, // unavailable
|
1225
|
-
transmittedBitrate: 0,
|
1226
|
-
transmittedFrameRate: 0,
|
1227
|
-
},
|
1228
|
-
h264CodecProfile: 'BP', // TODO: parse the profile level from h264 in the SDP and save globally
|
1229
|
-
localConfigurationChanges: 0, // unavailable
|
1230
|
-
remoteConfigurationChanges: 0, // unavailable
|
1231
|
-
requestedFrameSize: 0, // unavailable
|
1232
|
-
requestedKeyFrames: 0, // unavailable
|
1233
|
-
transmittedFrameSize: 0, // unavailable
|
1234
|
-
transmittedHeight: 0,
|
1235
|
-
transmittedKeyFrames: 0,
|
1236
|
-
transmittedWidth: 0,
|
1237
|
-
},
|
1238
|
-
],
|
1239
|
-
},
|
1240
|
-
intervalMetadata: {
|
1241
|
-
memoryUsage: {
|
1242
|
-
cpuBitWidth: 0,
|
1243
|
-
mainProcessMaximumMemoryBytes: 0,
|
1244
|
-
osBitWidth: 0,
|
1245
|
-
processAverageMemoryUsage: 0,
|
1246
|
-
processMaximumMemoryBytes: 0,
|
1247
|
-
processMaximumMemoryUsage: 0,
|
1248
|
-
systemAverageMemoryUsage: 0,
|
1249
|
-
systemMaximumMemoryUsage: 0,
|
1250
|
-
},
|
1251
|
-
peerReflexiveIP: 'NULL', // TODO: save after ice trickling completes and use as a global variable
|
1252
|
-
processAverageCPU: 0,
|
1253
|
-
processMaximumCPU: 0,
|
1254
|
-
systemAverageCPU: 0,
|
1255
|
-
systemMaximumCPU: 0,
|
1256
|
-
},
|
1257
|
-
};
|
1258
|
-
|
1259
1169
|
// ****** MEDIA QUALITY CONSTANTS ****** //
|
1260
1170
|
|
1261
1171
|
// these values must match allowed values of RemoteQualityLevel from the @webex/internal-media-core lib
|
package/src/meeting/index.ts
CHANGED
@@ -100,7 +100,6 @@ import {
|
|
100
100
|
MEETING_STATE_MACHINE,
|
101
101
|
MEETING_STATE,
|
102
102
|
MEETINGS,
|
103
|
-
MQA_STATS,
|
104
103
|
NETWORK_STATUS,
|
105
104
|
ONLINE,
|
106
105
|
OFFLINE,
|
@@ -6822,20 +6821,20 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
6822
6821
|
* @memberof Meetings
|
6823
6822
|
*/
|
6824
6823
|
setupStatsAnalyzerEventHandlers = () => {
|
6825
|
-
this.statsAnalyzer.on(StatsAnalyzerEventNames.MEDIA_QUALITY, (
|
6826
|
-
//
|
6827
|
-
|
6828
|
-
|
6829
|
-
|
6830
|
-
|
6831
|
-
|
6832
|
-
|
6833
|
-
|
6824
|
+
this.statsAnalyzer.on(StatsAnalyzerEventNames.MEDIA_QUALITY, (event) => {
|
6825
|
+
// Add IP address from geoHintInfo if missing.
|
6826
|
+
if (event.data.intervalMetadata.maskedPeerReflexiveIP === '0.0.0.0') {
|
6827
|
+
// @ts-ignore fix type
|
6828
|
+
const clientAddressFromGeoHint = this.webex.meetings.geoHintInfo?.clientAddress;
|
6829
|
+
if (clientAddressFromGeoHint) {
|
6830
|
+
event.data.intervalMetadata.maskedPeerReflexiveIP =
|
6831
|
+
CallDiagnosticUtils.anonymizeIPAddress(clientAddressFromGeoHint);
|
6832
|
+
}
|
6833
|
+
}
|
6834
6834
|
|
6835
|
+
// Count members that are in the meeting.
|
6835
6836
|
const {members} = this.getMembers().membersCollection;
|
6836
|
-
|
6837
|
-
// Count members that are in the meeting
|
6838
|
-
options.data.intervalMetadata.meetingUserCount = Object.values(members).filter(
|
6837
|
+
event.data.intervalMetadata.meetingUserCount = Object.values(members).filter(
|
6839
6838
|
(member: Member) => member.isInMeeting
|
6840
6839
|
).length;
|
6841
6840
|
|
@@ -6844,10 +6843,10 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
6844
6843
|
name: 'client.mediaquality.event',
|
6845
6844
|
options: {
|
6846
6845
|
meetingId: this.id,
|
6847
|
-
networkType:
|
6846
|
+
networkType: this.statsAnalyzer.getNetworkType(),
|
6848
6847
|
},
|
6849
6848
|
payload: {
|
6850
|
-
intervals: [
|
6849
|
+
intervals: [event.data],
|
6851
6850
|
},
|
6852
6851
|
});
|
6853
6852
|
});
|
@@ -2762,7 +2762,7 @@ describe('plugin-meetings', () => {
|
|
2762
2762
|
turnDiscoverySkippedReason: undefined,
|
2763
2763
|
});
|
2764
2764
|
meeting.meetingState = 'ACTIVE';
|
2765
|
-
const error = {iceConnected: false}
|
2765
|
+
const error = {iceConnected: false};
|
2766
2766
|
meeting.mediaProperties.waitForMediaConnectionConnected.rejects(error);
|
2767
2767
|
|
2768
2768
|
const forceRtcMetricsSend = sinon.stub().resolves();
|
@@ -3435,28 +3435,23 @@ describe('plugin-meetings', () => {
|
|
3435
3435
|
on: sinon.stub(),
|
3436
3436
|
});
|
3437
3437
|
|
3438
|
-
await meeting
|
3439
|
-
|
3440
|
-
|
3441
|
-
});
|
3438
|
+
await meeting.addMedia({
|
3439
|
+
mediaSettings: {},
|
3440
|
+
});
|
3442
3441
|
|
3443
|
-
assert.calledWith(
|
3444
|
-
|
3445
|
-
|
3446
|
-
|
3447
|
-
|
3448
|
-
|
3449
|
-
|
3450
|
-
|
3451
|
-
|
3452
|
-
|
3453
|
-
|
3454
|
-
|
3455
|
-
|
3456
|
-
reachability_public_udp_success: 5,
|
3457
|
-
isSubnetReachable: false,
|
3458
|
-
}
|
3459
|
-
);
|
3442
|
+
assert.calledWith(Metrics.sendBehavioralMetric, BEHAVIORAL_METRICS.ADD_MEDIA_SUCCESS, {
|
3443
|
+
correlation_id: meeting.correlationId,
|
3444
|
+
locus_id: meeting.locusUrl.split('/').pop(),
|
3445
|
+
connectionType: 'udp',
|
3446
|
+
selectedCandidatePairChanges: 2,
|
3447
|
+
numTransports: 1,
|
3448
|
+
isMultistream: false,
|
3449
|
+
retriedWithTurnServer: false,
|
3450
|
+
isJoinWithMediaRetry: false,
|
3451
|
+
iceCandidatesCount: 0,
|
3452
|
+
reachability_public_udp_success: 5,
|
3453
|
+
isSubnetReachable: false,
|
3454
|
+
});
|
3460
3455
|
});
|
3461
3456
|
|
3462
3457
|
it('should send valid isSubnetReachability if media connection fails', async () => {
|
@@ -3536,6 +3531,8 @@ describe('plugin-meetings', () => {
|
|
3536
3531
|
meeting.config.stats.enableStatsAnalyzer = true;
|
3537
3532
|
|
3538
3533
|
statsAnalyzerStub = new EventsScope();
|
3534
|
+
statsAnalyzerStub.getNetworkType = sinon.stub().returns('wifi');
|
3535
|
+
|
3539
3536
|
// mock the StatsAnalyzer constructor
|
3540
3537
|
sinon.stub(InternalMediaCoreModule, 'StatsAnalyzer').returns(statsAnalyzerStub);
|
3541
3538
|
|
@@ -3830,7 +3827,7 @@ describe('plugin-meetings', () => {
|
|
3830
3827
|
},
|
3831
3828
|
};
|
3832
3829
|
sinon.stub(meeting, 'getMembers').returns({membersCollection: fakeMembersCollection});
|
3833
|
-
const fakeData = {intervalMetadata: {}
|
3830
|
+
const fakeData = {intervalMetadata: {}};
|
3834
3831
|
|
3835
3832
|
statsAnalyzerStub.emit(
|
3836
3833
|
{file: 'test', function: 'test'},
|
@@ -3871,7 +3868,7 @@ describe('plugin-meetings', () => {
|
|
3871
3868
|
});
|
3872
3869
|
|
3873
3870
|
it('calls submitMQE correctly', async () => {
|
3874
|
-
const fakeData = {intervalMetadata: {bla: 'bla'}
|
3871
|
+
const fakeData = {intervalMetadata: {bla: 'bla'}};
|
3875
3872
|
|
3876
3873
|
statsAnalyzerStub.emit(
|
3877
3874
|
{file: 'test', function: 'test'},
|
@@ -4081,7 +4078,7 @@ describe('plugin-meetings', () => {
|
|
4081
4078
|
meetingId: meeting.id,
|
4082
4079
|
rawError: {
|
4083
4080
|
iceConnected: false,
|
4084
|
-
}
|
4081
|
+
},
|
4085
4082
|
},
|
4086
4083
|
},
|
4087
4084
|
]);
|