@wazo/sdk 0.37.19 → 0.37.23
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/wazo-sdk.js +5 -5
- package/esm/__tests__/api-client.test.js +70 -5
- package/esm/__tests__/web-rtc-client.test.js +111 -67
- package/esm/api/agentd.js +25 -2
- package/esm/api/amid.js +25 -2
- package/esm/api/application.js +25 -2
- package/esm/api/auth.js +25 -2
- package/esm/api/call-logd.js +32 -2
- package/esm/api/calld.js +35 -2
- package/esm/api/chatd.js +32 -2
- package/esm/api/confd.js +47 -5
- package/esm/api/ctid-ng.js +35 -2
- package/esm/api/dird.js +28 -2
- package/esm/api/webhookd.js +25 -2
- package/esm/api-client.js +70 -5
- package/esm/checker/Checker.js +113 -67
- package/esm/checker/checks/aor.js +70 -5
- package/esm/checker/checks/api.js +70 -5
- package/esm/checker/checks/index.js +113 -67
- package/esm/checker/checks/wazo-websocket.js +27 -2
- package/esm/checker/checks/webrtc-transport.js +111 -67
- package/esm/checker/checks/webrtc.js +111 -67
- package/esm/domain/AdHocAPIConference.js +70 -5
- package/esm/domain/Call.js +3 -0
- package/esm/domain/CallLog.js +7 -0
- package/esm/domain/ChatMessage.js +4 -0
- package/esm/domain/ChatRoom.js +3 -0
- package/esm/domain/Contact.js +3 -0
- package/esm/domain/Features.js +70 -5
- package/esm/domain/Meeting.js +17 -1
- package/esm/domain/Phone/CTIPhone.js +74 -5
- package/esm/domain/Phone/WebRTCPhone.js +50 -16
- package/esm/domain/Recording.js +3 -0
- package/esm/domain/Voicemail.js +3 -0
- package/esm/domain/__tests__/Call.test.js +3 -0
- package/esm/domain/__tests__/CallLog.test.js +7 -0
- package/esm/domain/__tests__/Contact.test.js +3 -0
- package/esm/domain/__tests__/Voicemail.test.js +3 -0
- package/esm/index.js +147 -80
- package/esm/lib/WazoSessionDescriptionHandler.js +25 -40
- package/esm/service/CallApi.js +70 -5
- package/esm/service/IssueReporter.js +25 -2
- package/esm/service/__tests__/IssueReporter.test.js +25 -2
- package/esm/service/getApiClient.js +70 -5
- package/esm/simple/Auth.js +147 -80
- package/esm/simple/Configuration.js +147 -80
- package/esm/simple/Directory.js +70 -5
- package/esm/simple/Phone.js +147 -80
- package/esm/simple/Websocket.js +28 -2
- package/esm/simple/index.js +147 -80
- package/esm/simple/room/LocalParticipant.js +147 -80
- package/esm/simple/room/Participant.js +147 -80
- package/esm/simple/room/RemoteParticipant.js +147 -80
- package/esm/simple/room/Room.js +147 -80
- package/esm/simple/room/SipRoom.js +147 -80
- package/esm/simple/room/Stream.js +147 -80
- package/esm/simple/room/__tests__/RemoteParticipant.test.js +147 -80
- package/esm/simple/utils.js +147 -80
- package/esm/utils/__tests__/api-requester.test.js +25 -2
- package/esm/utils/api-requester.js +25 -2
- package/esm/web-rtc-client.js +111 -67
- package/esm/websocket-client.js +28 -3
- package/lib/__tests__/api-client.test.js +70 -5
- package/lib/__tests__/web-rtc-client.test.js +111 -67
- package/lib/api/agentd.js +25 -2
- package/lib/api/amid.js +25 -2
- package/lib/api/application.js +25 -2
- package/lib/api/auth.js +25 -2
- package/lib/api/call-logd.js +32 -2
- package/lib/api/calld.js +35 -2
- package/lib/api/chatd.js +32 -2
- package/lib/api/confd.js +47 -5
- package/lib/api/ctid-ng.js +35 -2
- package/lib/api/dird.js +28 -2
- package/lib/api/webhookd.js +25 -2
- package/lib/api-client.js +70 -5
- package/lib/checker/Checker.js +113 -67
- package/lib/checker/checks/aor.js +70 -5
- package/lib/checker/checks/api.js +70 -5
- package/lib/checker/checks/index.js +113 -67
- package/lib/checker/checks/wazo-websocket.js +27 -2
- package/lib/checker/checks/webrtc-transport.js +111 -67
- package/lib/checker/checks/webrtc.js +111 -67
- package/lib/domain/AdHocAPIConference.js +70 -5
- package/lib/domain/Call.js +3 -0
- package/lib/domain/CallLog.js +7 -0
- package/lib/domain/ChatMessage.js +4 -0
- package/lib/domain/ChatRoom.js +3 -0
- package/lib/domain/Contact.js +3 -0
- package/lib/domain/Features.js +70 -5
- package/lib/domain/Meeting.js +17 -1
- package/lib/domain/Phone/CTIPhone.js +74 -5
- package/lib/domain/Phone/WebRTCPhone.js +50 -16
- package/lib/domain/Recording.js +3 -0
- package/lib/domain/Voicemail.js +3 -0
- package/lib/domain/__tests__/Call.test.js +3 -0
- package/lib/domain/__tests__/CallLog.test.js +7 -0
- package/lib/domain/__tests__/Contact.test.js +3 -0
- package/lib/domain/__tests__/Voicemail.test.js +3 -0
- package/lib/index.js +147 -80
- package/lib/lib/WazoSessionDescriptionHandler.js +25 -40
- package/lib/service/CallApi.js +70 -5
- package/lib/service/IssueReporter.js +25 -2
- package/lib/service/__tests__/IssueReporter.test.js +25 -2
- package/lib/service/getApiClient.js +70 -5
- package/lib/simple/Auth.js +147 -80
- package/lib/simple/Configuration.js +147 -80
- package/lib/simple/Directory.js +70 -5
- package/lib/simple/Phone.js +147 -80
- package/lib/simple/Websocket.js +28 -2
- package/lib/simple/index.js +147 -80
- package/lib/simple/room/LocalParticipant.js +147 -80
- package/lib/simple/room/Participant.js +147 -80
- package/lib/simple/room/RemoteParticipant.js +147 -80
- package/lib/simple/room/Room.js +147 -80
- package/lib/simple/room/SipRoom.js +147 -80
- package/lib/simple/room/Stream.js +147 -80
- package/lib/simple/room/__tests__/RemoteParticipant.test.js +147 -80
- package/lib/simple/utils.js +147 -80
- package/lib/utils/__tests__/api-requester.test.js +25 -2
- package/lib/utils/api-requester.js +25 -2
- package/lib/web-rtc-client.js +111 -67
- package/lib/websocket-client.js +28 -2
- package/package.json +2 -2
- package/src/api/confd.js +5 -2
- package/src/domain/Call.js +3 -0
- package/src/domain/CallLog.js +4 -0
- package/src/domain/ChatMessage.js +4 -0
- package/src/domain/ChatRoom.js +3 -0
- package/src/domain/Contact.js +3 -0
- package/src/domain/Meeting.js +17 -1
- package/src/domain/Phone/CTIPhone.js +4 -0
- package/src/domain/Phone/Phone.js +2 -0
- package/src/domain/Phone/WebRTCPhone.js +25 -14
- package/src/domain/Recording.js +3 -0
- package/src/domain/Voicemail.js +3 -0
- package/src/lib/WazoSessionDescriptionHandler.js +1 -35
- package/src/service/IssueReporter.js +25 -2
- package/src/simple/Phone.js +5 -0
- package/src/types/WebSocketMessage.js +5 -1
- package/src/web-rtc-client.js +41 -24
- package/src/websocket-client.js +2 -0
|
@@ -450,6 +450,7 @@ class IssueReporter {
|
|
|
450
450
|
|
|
451
451
|
|
|
452
452
|
|
|
453
|
+
|
|
453
454
|
|
|
454
455
|
constructor() {
|
|
455
456
|
addLevelsTo(this);
|
|
@@ -461,12 +462,17 @@ class IssueReporter {
|
|
|
461
462
|
this.bufferTimeout = null;
|
|
462
463
|
this._boundProcessBuffer = this._processBuffer.bind(this);
|
|
463
464
|
this._boundParseLoggerBody = this._parseLoggerBody.bind(this);
|
|
465
|
+
this._callback = null;
|
|
464
466
|
}
|
|
465
467
|
|
|
466
468
|
init() {
|
|
467
469
|
this._catchConsole();
|
|
468
470
|
}
|
|
469
471
|
|
|
472
|
+
setCallback(cb ) {
|
|
473
|
+
this._callback = cb;
|
|
474
|
+
}
|
|
475
|
+
|
|
470
476
|
configureRemoteClient(configuration = { tag: 'wazo-sdk', host: null, port: null, level: null, extra: {} }) {
|
|
471
477
|
this.remoteClientConfiguration = configuration;
|
|
472
478
|
}
|
|
@@ -502,6 +508,7 @@ class IssueReporter {
|
|
|
502
508
|
|
|
503
509
|
// Handle category label
|
|
504
510
|
let category = null;
|
|
511
|
+
let skipSendToRemote = false;
|
|
505
512
|
let extra = {};
|
|
506
513
|
if (args[0].indexOf(CATEGORY_PREFIX) === 0) {
|
|
507
514
|
category = args[0].split('=')[1];
|
|
@@ -517,6 +524,7 @@ class IssueReporter {
|
|
|
517
524
|
errorMessage: lastArg.message,
|
|
518
525
|
errorStack: lastArg.stack,
|
|
519
526
|
errorType: lastArg.constructor.name,
|
|
527
|
+
skipSendToRemote: lastArg.skipSendToRemote,
|
|
520
528
|
};
|
|
521
529
|
} else {
|
|
522
530
|
extra = lastArg;
|
|
@@ -525,6 +533,11 @@ class IssueReporter {
|
|
|
525
533
|
args.splice(1, 1);
|
|
526
534
|
}
|
|
527
535
|
|
|
536
|
+
if (extra.skipSendToRemote) {
|
|
537
|
+
skipSendToRemote = true;
|
|
538
|
+
delete extra.skipSendToRemote;
|
|
539
|
+
}
|
|
540
|
+
|
|
528
541
|
const date = moment__default['default']().format('YYYY-MM-DD HH:mm:ss.SSS');
|
|
529
542
|
const message = args.join(', ');
|
|
530
543
|
let consoleMessage = message;
|
|
@@ -545,7 +558,13 @@ class IssueReporter {
|
|
|
545
558
|
const oldMethod = this.oldConsoleMethods[consoleLevel] || this.oldConsoleMethods.log;
|
|
546
559
|
oldMethod.apply(oldMethod, [date, consoleMessage]);
|
|
547
560
|
|
|
548
|
-
this.
|
|
561
|
+
if (this._callback) {
|
|
562
|
+
this._callback(level, consoleMessage);
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
if (!skipSendToRemote) {
|
|
566
|
+
this._sendToRemoteLogger(level, { date, message, category, ...extra });
|
|
567
|
+
}
|
|
549
568
|
}
|
|
550
569
|
|
|
551
570
|
logRequest(url , options , response , start ) {
|
|
@@ -690,7 +709,11 @@ class IssueReporter {
|
|
|
690
709
|
},
|
|
691
710
|
// $FlowFixMe
|
|
692
711
|
body,
|
|
693
|
-
}).catch(() => {
|
|
712
|
+
}).catch((e ) => {
|
|
713
|
+
// $FlowFixMe
|
|
714
|
+
e.skipSendToRemote = true;
|
|
715
|
+
this.log('error', this._makeCategory('grafana'), 'Sending log to grafana, error', e);
|
|
716
|
+
|
|
694
717
|
setTimeout(() => {
|
|
695
718
|
if (isArray) {
|
|
696
719
|
payload = payload.map(message => {
|
|
@@ -1563,6 +1586,9 @@ class Contact {
|
|
|
1563
1586
|
}
|
|
1564
1587
|
|
|
1565
1588
|
static parseMany(response ) {
|
|
1589
|
+
if (!response || !response.results) {
|
|
1590
|
+
return [];
|
|
1591
|
+
}
|
|
1566
1592
|
return response.results.map(r => Contact.parse(r, response.column_types));
|
|
1567
1593
|
}
|
|
1568
1594
|
|
|
@@ -2669,11 +2695,27 @@ class Meeting {
|
|
|
2669
2695
|
});
|
|
2670
2696
|
}
|
|
2671
2697
|
|
|
2698
|
+
static parseMany(items ) {
|
|
2699
|
+
if (!items) {
|
|
2700
|
+
return [];
|
|
2701
|
+
}
|
|
2702
|
+
return items.map(plain => Meeting.parse(plain));
|
|
2703
|
+
}
|
|
2704
|
+
|
|
2672
2705
|
static newFrom(meeting ) {
|
|
2673
2706
|
return newFrom(meeting, Meeting);
|
|
2674
2707
|
}
|
|
2675
2708
|
|
|
2676
|
-
constructor({
|
|
2709
|
+
constructor({
|
|
2710
|
+
uuid,
|
|
2711
|
+
name,
|
|
2712
|
+
guestSipAuthorization,
|
|
2713
|
+
ownerUuids,
|
|
2714
|
+
port,
|
|
2715
|
+
uri,
|
|
2716
|
+
number,
|
|
2717
|
+
persistent,
|
|
2718
|
+
} = {}) {
|
|
2677
2719
|
this.guestSipAuthorization = guestSipAuthorization;
|
|
2678
2720
|
this.uri = uri;
|
|
2679
2721
|
this.name = name;
|
|
@@ -2759,8 +2801,11 @@ var confdMethods = (client , baseUrl ) => ({
|
|
|
2759
2801
|
}
|
|
2760
2802
|
},
|
|
2761
2803
|
|
|
2762
|
-
|
|
2763
|
-
client.
|
|
2804
|
+
getMyMeetings: () =>
|
|
2805
|
+
client.get(`${baseUrl}/users/me/meetings`).then(response => Meeting.parseMany(response.items)),
|
|
2806
|
+
|
|
2807
|
+
createMyMeeting: (name , persistent ) =>
|
|
2808
|
+
client.post(`${baseUrl}/users/me/meetings`, { name, persistent }).then(Meeting.parse),
|
|
2764
2809
|
|
|
2765
2810
|
deleteMyMeeting: (meetingUuid ) =>
|
|
2766
2811
|
client.delete(`${baseUrl}/users/me/meetings/${meetingUuid}`, null),
|
|
@@ -2856,6 +2901,10 @@ class ChatMessage {
|
|
|
2856
2901
|
|
|
2857
2902
|
|
|
2858
2903
|
static parseMany(plain ) {
|
|
2904
|
+
if (!plain || !plain.items) {
|
|
2905
|
+
return [];
|
|
2906
|
+
}
|
|
2907
|
+
|
|
2859
2908
|
return plain.items.map(item => ChatMessage.parse(item));
|
|
2860
2909
|
}
|
|
2861
2910
|
|
|
@@ -2965,6 +3014,9 @@ class Voicemail {
|
|
|
2965
3014
|
}
|
|
2966
3015
|
|
|
2967
3016
|
static parseMany(plain ) {
|
|
3017
|
+
if (!plain) {
|
|
3018
|
+
return [];
|
|
3019
|
+
}
|
|
2968
3020
|
const plainUnread = plain.folders.filter(folder => folder.type === 'new')[0].messages;
|
|
2969
3021
|
const plainRead = plain.folders.filter(folder => folder.type === 'old')[0].messages;
|
|
2970
3022
|
|
|
@@ -3074,6 +3126,9 @@ class Call {
|
|
|
3074
3126
|
|
|
3075
3127
|
|
|
3076
3128
|
static parseMany(plain ) {
|
|
3129
|
+
if (!plain) {
|
|
3130
|
+
return [];
|
|
3131
|
+
}
|
|
3077
3132
|
return plain.map((plainCall ) => Call.parse(plainCall));
|
|
3078
3133
|
}
|
|
3079
3134
|
|
|
@@ -3591,6 +3646,9 @@ class Recording {
|
|
|
3591
3646
|
|
|
3592
3647
|
|
|
3593
3648
|
static parseMany(recordings = []) {
|
|
3649
|
+
if (!recordings) {
|
|
3650
|
+
return [];
|
|
3651
|
+
}
|
|
3594
3652
|
return recordings.map(item => Recording.parse(item));
|
|
3595
3653
|
}
|
|
3596
3654
|
|
|
@@ -3692,6 +3750,10 @@ class CallLog {
|
|
|
3692
3750
|
}
|
|
3693
3751
|
|
|
3694
3752
|
static parseMany(plain ) {
|
|
3753
|
+
if (!plain || !plain.items) {
|
|
3754
|
+
return [];
|
|
3755
|
+
}
|
|
3756
|
+
|
|
3695
3757
|
return plain.items.map(item => CallLog.parse(item));
|
|
3696
3758
|
}
|
|
3697
3759
|
|
|
@@ -4261,6 +4323,10 @@ class CTIPhone extends Emitter {
|
|
|
4261
4323
|
return false;
|
|
4262
4324
|
}
|
|
4263
4325
|
|
|
4326
|
+
hasAVideoTrack() {
|
|
4327
|
+
return false;
|
|
4328
|
+
}
|
|
4329
|
+
|
|
4264
4330
|
getLocalStreamForCall() {
|
|
4265
4331
|
return null;
|
|
4266
4332
|
}
|
|
@@ -4654,6 +4720,9 @@ class ChatRoom {
|
|
|
4654
4720
|
|
|
4655
4721
|
|
|
4656
4722
|
static parseMany(plain ) {
|
|
4723
|
+
if (!plain || !plain.items) {
|
|
4724
|
+
return [];
|
|
4725
|
+
}
|
|
4657
4726
|
return plain.items.map(item => ChatRoom.parse(item));
|
|
4658
4727
|
}
|
|
4659
4728
|
|
|
@@ -5899,10 +5968,6 @@ const getSrflxOrRelay = (candidates ) =>
|
|
|
5899
5968
|
candidates
|
|
5900
5969
|
.filter(candidate => candidate && (candidate.type === 'srflx' || candidate.type === 'relay'));
|
|
5901
5970
|
|
|
5902
|
-
const areCandidateValid = (candidates ) =>
|
|
5903
|
-
getSrflxOrRelay(candidates)
|
|
5904
|
-
.length > 0;
|
|
5905
|
-
|
|
5906
5971
|
const getVideoDirection = (sdp ) => {
|
|
5907
5972
|
const parsedSdp = sdpParser__default['default'].parse(sdp);
|
|
5908
5973
|
const videoMedia = parsedSdp.media.find(media => media.type === 'video');
|
|
@@ -5955,8 +6020,6 @@ const fixSdp = (sdp , candidates , forcePort = true)
|
|
|
5955
6020
|
/* global RTCSessionDescriptionInit, navigator */
|
|
5956
6021
|
|
|
5957
6022
|
const wazoLogger = IssueReporter$1 ? IssueReporter$1.loggerFor('webrtc-sdh') : console;
|
|
5958
|
-
const MAX_WAIT_FOR_ICE_TRIES = 20;
|
|
5959
|
-
const WAIT_FOR_ICE_TIMEOUT = 500;
|
|
5960
6023
|
|
|
5961
6024
|
// Customized mediaStreamFactory allowing to send screensharing stream directory when upgrading
|
|
5962
6025
|
const wazoMediaStreamFactory = (constraints ) => {
|
|
@@ -6146,38 +6209,6 @@ class WazoSessionDescriptionHandler extends sessionDescriptionHandler.SessionDes
|
|
|
6146
6209
|
this._peerConnection = undefined;
|
|
6147
6210
|
}
|
|
6148
6211
|
|
|
6149
|
-
async _waitForValidGatheredIce() {
|
|
6150
|
-
let tries = 0;
|
|
6151
|
-
|
|
6152
|
-
while (!areCandidateValid(this.gatheredCandidates) && tries < MAX_WAIT_FOR_ICE_TRIES) {
|
|
6153
|
-
wazoLogger.trace('SessionDescriptionHandler._waitForValidGatheredIce, waiting for ice', {
|
|
6154
|
-
tries,
|
|
6155
|
-
max: MAX_WAIT_FOR_ICE_TRIES,
|
|
6156
|
-
});
|
|
6157
|
-
|
|
6158
|
-
tries++;
|
|
6159
|
-
|
|
6160
|
-
// eslint-disable-next-line no-await-in-loop
|
|
6161
|
-
await new Promise(resolve => setTimeout(resolve, WAIT_FOR_ICE_TIMEOUT));
|
|
6162
|
-
}
|
|
6163
|
-
|
|
6164
|
-
if (tries >= MAX_WAIT_FOR_ICE_TRIES) {
|
|
6165
|
-
const errorMsg = 'No valid candidates found, can\'t answer the call';
|
|
6166
|
-
const error = new Error(errorMsg);
|
|
6167
|
-
wazoLogger.error(errorMsg, { tries, max: MAX_WAIT_FOR_ICE_TRIES });
|
|
6168
|
-
|
|
6169
|
-
// Emit an error, because sip.js catches the exception and switch to status Terminated.
|
|
6170
|
-
this.eventEmitter.emit('error', error);
|
|
6171
|
-
|
|
6172
|
-
wazoLogger.error('No valid candidates found', { tries, candidates: JSON.stringify(this.gatheredCandidates) });
|
|
6173
|
-
}
|
|
6174
|
-
|
|
6175
|
-
// eslint-disable-next-line
|
|
6176
|
-
wazoLogger.trace('Found valid candidates', { tries, candidates: JSON.stringify(this.gatheredCandidates) });
|
|
6177
|
-
|
|
6178
|
-
return this.getLocalSessionDescription();
|
|
6179
|
-
}
|
|
6180
|
-
|
|
6181
6212
|
// Overridden to send `inactive` in conference
|
|
6182
6213
|
updateDirection(options , isConference = false,
|
|
6183
6214
|
audioOnly = false) {
|
|
@@ -6970,7 +7001,9 @@ class WebRTCClient extends Emitter {
|
|
|
6970
7001
|
const inviteOptions = {
|
|
6971
7002
|
requestDelegate: {
|
|
6972
7003
|
onAccept: (response ) => {
|
|
6973
|
-
session.sessionDescriptionHandler.peerConnection
|
|
7004
|
+
if (session.sessionDescriptionHandler.peerConnection) {
|
|
7005
|
+
session.sessionDescriptionHandler.peerConnection.sfu = conference;
|
|
7006
|
+
}
|
|
6974
7007
|
this._onAccepted(session, response.session, true);
|
|
6975
7008
|
},
|
|
6976
7009
|
onReject: (response ) => {
|
|
@@ -7842,6 +7875,16 @@ class WebRTCClient extends Emitter {
|
|
|
7842
7875
|
return this.hasRemoteVideo(sessionId) ? this.getRemoteStream(sessionId) : null;
|
|
7843
7876
|
}
|
|
7844
7877
|
|
|
7878
|
+
// Useful in a react-native environment when remoteMediaStream is not updated
|
|
7879
|
+
getRemoteVideoStreamFromPc(sessionId ) {
|
|
7880
|
+
const pc = this.getPeerConnection(sessionId);
|
|
7881
|
+
if (!pc) {
|
|
7882
|
+
return null;
|
|
7883
|
+
}
|
|
7884
|
+
|
|
7885
|
+
return pc.getRemoteStreams().find(stream => !!stream.getVideoTracks().length);
|
|
7886
|
+
}
|
|
7887
|
+
|
|
7845
7888
|
hasVideo(sessionId ) {
|
|
7846
7889
|
return this.hasLocalVideo(sessionId) || this.hasRemoteVideo(sessionId);
|
|
7847
7890
|
}
|
|
@@ -8352,6 +8395,7 @@ class WebRTCClient extends Emitter {
|
|
|
8352
8395
|
session.sessionDescriptionHandler.remoteMediaStream.onaddtrack = onTrack;
|
|
8353
8396
|
|
|
8354
8397
|
pc.oniceconnectionstatechange = () => {
|
|
8398
|
+
logger$8.info('on ice connection state changed', { state: pc.iceConnectionState });
|
|
8355
8399
|
if (pc.iceConnectionState === 'disconnected') {
|
|
8356
8400
|
this.eventEmitter.emit(ON_DISCONNECTED$1);
|
|
8357
8401
|
}
|
|
@@ -8580,25 +8624,25 @@ class WebRTCClient extends Emitter {
|
|
|
8580
8624
|
|
|
8581
8625
|
stats.forEach(report => {
|
|
8582
8626
|
if (report.type === 'outbound-rtp' && report.kind === 'audio') {
|
|
8583
|
-
audioBytesSent += report.bytesSent + report.headerBytesSent;
|
|
8627
|
+
audioBytesSent += Number(report.bytesSent) + Number(report.headerBytesSent);
|
|
8584
8628
|
}
|
|
8585
8629
|
if (report.type === 'remote-outbound-rtp' && report.kind === 'audio') {
|
|
8586
|
-
audioBytesSent += report.bytesSent;
|
|
8630
|
+
audioBytesSent += Number(report.bytesSent);
|
|
8587
8631
|
}
|
|
8588
8632
|
if (report.type === 'outbound-rtp' && report.kind === 'video') {
|
|
8589
|
-
videoBytesSent += report.bytesSent + report.headerBytesSent;
|
|
8633
|
+
videoBytesSent += Number(report.bytesSent) + Number(report.headerBytesSent);
|
|
8590
8634
|
}
|
|
8591
8635
|
if (report.type === 'inbound-rtp' && report.kind === 'audio') {
|
|
8592
|
-
packetsLost += report.packetsLost;
|
|
8593
|
-
networkStats.packetsReceived = report.packetsReceived;
|
|
8594
|
-
audioBytesReceived += report.bytesReceived + report.headerBytesReceived;
|
|
8636
|
+
packetsLost += Number(report.packetsLost);
|
|
8637
|
+
networkStats.packetsReceived = Number(report.packetsReceived);
|
|
8638
|
+
audioBytesReceived += Number(report.bytesReceived) + Number(report.headerBytesReceived);
|
|
8595
8639
|
}
|
|
8596
8640
|
if (report.type === 'inbound-rtp' && report.kind === 'video') {
|
|
8597
|
-
videoBytesReceived += report.bytesReceived + report.headerBytesReceived;
|
|
8641
|
+
videoBytesReceived += Number(report.bytesReceived) + Number(report.headerBytesReceived);
|
|
8598
8642
|
}
|
|
8599
8643
|
if (report.type === 'outbound-rtp' && report.kind === 'video') {
|
|
8600
8644
|
if ('framesPerSecond' in report) {
|
|
8601
|
-
networkStats.framesPerSecond = report.framesPerSecond;
|
|
8645
|
+
networkStats.framesPerSecond = Number(report.framesPerSecond);
|
|
8602
8646
|
}
|
|
8603
8647
|
if ('framerateMean' in report) {
|
|
8604
8648
|
// framerateMean is only available in FF
|
|
@@ -8606,32 +8650,36 @@ class WebRTCClient extends Emitter {
|
|
|
8606
8650
|
}
|
|
8607
8651
|
}
|
|
8608
8652
|
if (report.type === 'remote-inbound-rtp' && report.kind === 'audio') {
|
|
8609
|
-
packetsLost += report.packetsLost;
|
|
8610
|
-
networkStats.roundTripTime = report.roundTripTime;
|
|
8611
|
-
networkStats.jitter = report.jitter;
|
|
8653
|
+
packetsLost += Number(report.packetsLost);
|
|
8654
|
+
networkStats.roundTripTime = Number(report.roundTripTime);
|
|
8655
|
+
networkStats.jitter = Number(report.jitter);
|
|
8612
8656
|
}
|
|
8613
8657
|
if (report.type === 'remote-inbound-rtp' && report.kind === 'video') {
|
|
8614
|
-
packetsLost += report.packetsLost;
|
|
8658
|
+
packetsLost += Number(report.packetsLost);
|
|
8615
8659
|
}
|
|
8616
8660
|
if (report.type === 'transport') {
|
|
8617
|
-
transportSent += report.bytesSent;
|
|
8618
|
-
transportReceived += report.bytesReceived;
|
|
8661
|
+
transportSent += Number(report.bytesSent);
|
|
8662
|
+
transportReceived += Number(report.bytesReceived);
|
|
8619
8663
|
}
|
|
8620
8664
|
});
|
|
8621
8665
|
|
|
8622
8666
|
networkStats.packetsLost = packetsLost;
|
|
8623
|
-
networkStats.
|
|
8667
|
+
networkStats.totalAudioBytesSent = audioBytesSent;
|
|
8668
|
+
networkStats.audioBytesSent = audioBytesSent - lastAudioSent;
|
|
8669
|
+
networkStats.totalAudioBytesReceived = audioBytesReceived - lastAudioReceived;
|
|
8624
8670
|
networkStats.audioBytesReceived = audioBytesReceived;
|
|
8625
|
-
networkStats.
|
|
8626
|
-
networkStats.
|
|
8671
|
+
networkStats.totalVideoBytesSent = videoBytesSent;
|
|
8672
|
+
networkStats.videoBytesSent = videoBytesSent - lastVideoSent;
|
|
8673
|
+
networkStats.totalVideoBytesReceived = videoBytesReceived;
|
|
8674
|
+
networkStats.videoBytesReceived = videoBytesReceived - lastVideoReceived;
|
|
8675
|
+
networkStats.totalTransportSent = transportSent - lastTransportSent;
|
|
8627
8676
|
networkStats.transportSent = transportSent;
|
|
8628
|
-
networkStats.
|
|
8677
|
+
networkStats.totalTransportReceived = transportReceived;
|
|
8678
|
+
networkStats.transportReceived = transportReceived - lastTransportReceived;
|
|
8629
8679
|
|
|
8630
|
-
|
|
8631
|
-
+
|
|
8632
|
-
+
|
|
8633
|
-
|
|
8634
|
-
networkStats.bandwidth = bandwidth;
|
|
8680
|
+
networkStats.bandwidth = networkStats.audioBytesSent + networkStats.audioBytesReceived
|
|
8681
|
+
+ networkStats.videoBytesSent + networkStats.videoBytesReceived + networkStats.transportReceived
|
|
8682
|
+
+ networkStats.transportSent;
|
|
8635
8683
|
|
|
8636
8684
|
this.eventEmitter.emit(ON_NETWORK_STATS$1, session, networkStats, this.sessionNetworkStats[sessionId]);
|
|
8637
8685
|
this.sessionNetworkStats[sessionId].push(networkStats);
|
|
@@ -9013,7 +9061,10 @@ class WebRTCPhone extends Emitter {
|
|
|
9013
9061
|
|
|
9014
9062
|
onCancel(message);
|
|
9015
9063
|
const elsewhere = message.data.indexOf('cause=26') !== -1 && message.data.indexOf('completed elsewhere') !== -1;
|
|
9016
|
-
|
|
9064
|
+
const callSession = this._createCallSession(sipSession);
|
|
9065
|
+
delete this.callSessions[callSession.getId()];
|
|
9066
|
+
|
|
9067
|
+
this.eventEmitter.emit(ON_CALL_CANCELED, callSession, elsewhere);
|
|
9017
9068
|
};
|
|
9018
9069
|
} else if (sipSession instanceof invitation.Invitation) {
|
|
9019
9070
|
console.warn('sipSession._onCancel not found, please update the wazo SDK accordingly');
|
|
@@ -9042,9 +9093,11 @@ class WebRTCPhone extends Emitter {
|
|
|
9042
9093
|
case sessionState.SessionState.Terminated: {
|
|
9043
9094
|
logger$7.info('WebRTC phone - call terminated', { sipId: sipSession.id });
|
|
9044
9095
|
|
|
9096
|
+
// Should be called before `_onCallTerminated` or the callCount will not decrement...
|
|
9097
|
+
const callSession = this._createCallSession(sipSession);
|
|
9045
9098
|
const wasCurrentSession = this._onCallTerminated(sipSession);
|
|
9046
9099
|
|
|
9047
|
-
return this.eventEmitter.emit(ON_CALL_ENDED,
|
|
9100
|
+
return this.eventEmitter.emit(ON_CALL_ENDED, callSession, wasCurrentSession);
|
|
9048
9101
|
}
|
|
9049
9102
|
}
|
|
9050
9103
|
});
|
|
@@ -9192,18 +9245,20 @@ class WebRTCPhone extends Emitter {
|
|
|
9192
9245
|
screenTrack,
|
|
9193
9246
|
});
|
|
9194
9247
|
|
|
9195
|
-
|
|
9196
|
-
|
|
9197
|
-
|
|
9198
|
-
|
|
9199
|
-
|
|
9200
|
-
|
|
9248
|
+
if (screenTrack) {
|
|
9249
|
+
screenTrack.onended = () => {
|
|
9250
|
+
logger$7.info('WebRTC phone - on screenshare ended', {
|
|
9251
|
+
hadVideo,
|
|
9252
|
+
id: this.getSipSessionId(sipSession),
|
|
9253
|
+
screenTrack,
|
|
9254
|
+
});
|
|
9201
9255
|
|
|
9202
|
-
|
|
9203
|
-
|
|
9204
|
-
|
|
9205
|
-
|
|
9206
|
-
|
|
9256
|
+
this.eventEmitter.emit(
|
|
9257
|
+
ON_SHARE_SCREEN_ENDING,
|
|
9258
|
+
this._createCallSession(sipSession, callSession),
|
|
9259
|
+
);
|
|
9260
|
+
};
|
|
9261
|
+
}
|
|
9207
9262
|
|
|
9208
9263
|
this.currentScreenShare = {
|
|
9209
9264
|
stream: screenStream,
|
|
@@ -9992,6 +10047,10 @@ class WebRTCPhone extends Emitter {
|
|
|
9992
10047
|
return callSession ? this.client.getRemoteVideoStream(callSession.sipCallId) : null;
|
|
9993
10048
|
}
|
|
9994
10049
|
|
|
10050
|
+
getRemoteVideoStreamFromPc(callSession ) {
|
|
10051
|
+
return callSession ? this.client.getRemoteVideoStreamFromPc(callSession.sipCallId) : null;
|
|
10052
|
+
}
|
|
10053
|
+
|
|
9995
10054
|
hasRemoteVideo(callSession ) {
|
|
9996
10055
|
return callSession ? this.client.hasRemoteVideo(callSession.sipCallId) : false;
|
|
9997
10056
|
}
|
|
@@ -10675,6 +10734,11 @@ class Phone extends Emitter {
|
|
|
10675
10734
|
return this.getRemoteVideoStream(callSession);
|
|
10676
10735
|
}
|
|
10677
10736
|
|
|
10737
|
+
// Useful in a react-native environment when remoteMediaStream is not updated
|
|
10738
|
+
getRemoteVideoStreamFromPc(callSession ) {
|
|
10739
|
+
return this.phone ? this.phone.getRemoteVideoStreamFromPc(callSession) : false;
|
|
10740
|
+
}
|
|
10741
|
+
|
|
10678
10742
|
hasVideo(callSession ) {
|
|
10679
10743
|
return this.phone ? this.phone.hasVideo(callSession) : false;
|
|
10680
10744
|
}
|
|
@@ -10834,6 +10898,7 @@ const AGENT_PAUSED = 'agent_paused';
|
|
|
10834
10898
|
const AGENT_UNPAUSED = 'agent_unpaused';
|
|
10835
10899
|
const CONFERENCE_ADHOC_PARTICIPANT_LEFT = 'conference_adhoc_participant_left';
|
|
10836
10900
|
const CONFERENCE_ADHOC_DELETED = 'conference_adhoc_deleted';
|
|
10901
|
+
const MEETING_USER_PROGRESS = 'meeting_user_progress';
|
|
10837
10902
|
|
|
10838
10903
|
const BLACKLIST_EVENTS = [
|
|
10839
10904
|
CHAT_MESSAGE_SENT,
|
|
@@ -11184,6 +11249,7 @@ WebSocketClient.eventLists = [
|
|
|
11184
11249
|
AGENT_UNPAUSED,
|
|
11185
11250
|
CONFERENCE_ADHOC_PARTICIPANT_LEFT,
|
|
11186
11251
|
CONFERENCE_ADHOC_DELETED,
|
|
11252
|
+
MEETING_USER_PROGRESS,
|
|
11187
11253
|
];
|
|
11188
11254
|
|
|
11189
11255
|
var WebSocketClient$1 = /*#__PURE__*/Object.freeze({
|
|
@@ -11254,6 +11320,7 @@ var WebSocketClient$1 = /*#__PURE__*/Object.freeze({
|
|
|
11254
11320
|
AGENT_UNPAUSED: AGENT_UNPAUSED,
|
|
11255
11321
|
CONFERENCE_ADHOC_PARTICIPANT_LEFT: CONFERENCE_ADHOC_PARTICIPANT_LEFT,
|
|
11256
11322
|
CONFERENCE_ADHOC_DELETED: CONFERENCE_ADHOC_DELETED,
|
|
11323
|
+
MEETING_USER_PROGRESS: MEETING_USER_PROGRESS,
|
|
11257
11324
|
HEARTBEAT_ENGINE_VERSION: HEARTBEAT_ENGINE_VERSION,
|
|
11258
11325
|
'default': WebSocketClient
|
|
11259
11326
|
});
|