@wazo/sdk 0.37.18 → 0.37.22
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 +13 -5
- package/esm/__tests__/api-client.test.js +52 -9
- package/esm/__tests__/web-rtc-client.test.js +80 -20
- package/esm/api/agentd.js +27 -4
- package/esm/api/amid.js +27 -4
- package/esm/api/application.js +27 -4
- package/esm/api/auth.js +29 -5
- package/esm/api/call-logd.js +29 -6
- package/esm/api/calld.js +27 -4
- package/esm/api/chatd.js +27 -4
- package/esm/api/confd.js +51 -8
- package/esm/api/ctid-ng.js +27 -4
- package/esm/api/dird.js +27 -4
- package/esm/api/webhookd.js +27 -4
- package/esm/api-client.js +54 -11
- package/esm/checker/Checker.js +83 -21
- package/esm/checker/checks/aor.js +54 -11
- package/esm/checker/checks/api.js +54 -11
- package/esm/checker/checks/ice-ipv4.js +1 -1
- package/esm/checker/checks/index.js +84 -22
- package/esm/checker/checks/symmetric-nat.js +1 -1
- package/esm/checker/checks/wazo-websocket.js +29 -4
- package/esm/checker/checks/webrtc-transport.js +82 -22
- package/esm/checker/checks/webrtc.js +82 -22
- package/esm/domain/AdHocAPIConference.js +54 -11
- package/esm/domain/Agent.js +1 -1
- package/esm/domain/BadResponse.js +1 -1
- package/esm/domain/Call.js +1 -1
- package/esm/domain/CallLog.js +3 -3
- package/esm/domain/CallSession.js +1 -1
- package/esm/domain/ChatMessage.js +1 -1
- package/esm/domain/ChatRoom.js +1 -1
- package/esm/domain/Contact.js +2 -1
- package/esm/domain/Country.js +1 -1
- package/esm/domain/Device/DebugDevice.js +1 -1
- package/esm/domain/ExternalApp.js +1 -1
- package/esm/domain/Features.js +54 -10
- package/esm/domain/ForwardOption.js +2 -1
- package/esm/domain/IndirectTransfer.js +1 -1
- package/esm/domain/Line.js +1 -1
- package/esm/domain/Meeting.js +20 -3
- package/esm/domain/NotificationOptions.js +1 -1
- package/esm/domain/Phone/CTIPhone.js +55 -11
- package/esm/domain/Phone/WebRTCPhone.js +39 -6
- package/esm/domain/Profile.js +2 -1
- package/esm/domain/Recording.js +2 -2
- package/esm/domain/Relocation.js +1 -1
- package/esm/domain/Room.js +1 -1
- package/esm/domain/ServerError.js +1 -1
- package/esm/domain/Session.js +2 -2
- package/esm/domain/SipLine.js +1 -1
- package/esm/domain/Subscription.js +1 -1
- package/esm/domain/SwitchboardCall.js +1 -1
- package/esm/domain/Voicemail.js +1 -1
- package/esm/domain/__tests__/CallLog.test.js +2 -2
- package/esm/index.js +101 -24
- package/esm/lib/WazoSessionDescriptionHandler.js +28 -4
- package/esm/service/CallApi.js +54 -11
- package/esm/service/IssueReporter.js +27 -4
- package/esm/service/__tests__/IssueReporter.test.js +26 -3
- package/esm/service/getApiClient.js +55 -11
- package/esm/simple/Auth.js +101 -23
- package/esm/simple/Configuration.js +100 -23
- package/esm/simple/Directory.js +53 -10
- package/esm/simple/Phone.js +100 -23
- package/esm/simple/Websocket.js +30 -4
- package/esm/simple/index.js +100 -23
- package/esm/simple/room/LocalParticipant.js +113 -40
- package/esm/simple/room/Participant.js +112 -37
- package/esm/simple/room/RemoteParticipant.js +114 -41
- package/esm/simple/room/Room.js +113 -37
- package/esm/simple/room/SipRoom.js +101 -26
- package/esm/simple/room/Stream.js +101 -26
- package/esm/simple/room/__tests__/RemoteParticipant.test.js +99 -22
- package/esm/simple/utils.js +99 -22
- package/esm/utils/Emitter.js +1 -1
- package/esm/utils/Heartbeat.js +1 -1
- package/esm/utils/__tests__/api-requester.test.js +26 -3
- package/esm/utils/api-requester.js +28 -4
- package/esm/utils/compare-version.js +1 -1
- package/esm/utils/isMobile.js +1 -1
- package/esm/utils/new-from.js +1 -1
- package/esm/utils/once.js +1 -1
- package/esm/utils/update-from.js +1 -1
- package/esm/web-rtc-client.js +83 -22
- package/esm/websocket-client.js +30 -4
- package/lib/__tests__/api-client.test.js +61 -18
- package/lib/__tests__/web-rtc-client.test.js +97 -37
- package/lib/api/agentd.js +27 -4
- package/lib/api/amid.js +27 -4
- package/lib/api/application.js +27 -4
- package/lib/api/auth.js +28 -5
- package/lib/api/call-logd.js +34 -11
- package/lib/api/calld.js +30 -7
- package/lib/api/chatd.js +28 -5
- package/lib/api/confd.js +51 -8
- package/lib/api/ctid-ng.js +30 -7
- package/lib/api/dird.js +27 -4
- package/lib/api/webhookd.js +27 -4
- package/lib/api-client.js +61 -18
- package/lib/checker/Checker.js +100 -38
- package/lib/checker/checks/aor.js +61 -18
- package/lib/checker/checks/api.js +61 -18
- package/lib/checker/checks/index.js +100 -38
- package/lib/checker/checks/wazo-websocket.js +31 -6
- package/lib/checker/checks/webrtc-transport.js +97 -37
- package/lib/checker/checks/webrtc.js +97 -37
- package/lib/domain/AdHocAPIConference.js +61 -18
- package/lib/domain/Call.js +1 -1
- package/lib/domain/CallLog.js +7 -7
- package/lib/domain/ChatMessage.js +1 -1
- package/lib/domain/Contact.js +1 -1
- package/lib/domain/Features.js +62 -19
- package/lib/domain/ForwardOption.js +1 -1
- package/lib/domain/Meeting.js +19 -2
- package/lib/domain/Phone/CTIPhone.js +63 -20
- package/lib/domain/Phone/WebRTCPhone.js +40 -8
- package/lib/domain/Profile.js +1 -1
- package/lib/domain/Recording.js +3 -3
- package/lib/domain/Voicemail.js +1 -1
- package/lib/domain/__tests__/Call.test.js +1 -1
- package/lib/domain/__tests__/CallLog.test.js +13 -13
- package/lib/domain/__tests__/Voicemail.test.js +1 -1
- package/lib/index.js +120 -43
- package/lib/lib/WazoSessionDescriptionHandler.js +32 -9
- package/lib/service/CallApi.js +61 -18
- package/lib/service/IssueReporter.js +27 -4
- package/lib/service/__tests__/IssueReporter.test.js +27 -4
- package/lib/service/getApiClient.js +62 -19
- package/lib/simple/Auth.js +119 -42
- package/lib/simple/Configuration.js +118 -41
- package/lib/simple/Directory.js +61 -18
- package/lib/simple/Phone.js +118 -41
- package/lib/simple/Websocket.js +32 -6
- package/lib/simple/index.js +118 -41
- package/lib/simple/room/LocalParticipant.js +132 -59
- package/lib/simple/room/Participant.js +130 -55
- package/lib/simple/room/RemoteParticipant.js +133 -60
- package/lib/simple/room/Room.js +131 -56
- package/lib/simple/room/SipRoom.js +120 -45
- package/lib/simple/room/Stream.js +120 -45
- package/lib/simple/room/__tests__/RemoteParticipant.test.js +118 -41
- package/lib/simple/utils.js +118 -41
- package/lib/utils/Emitter.js +1 -1
- package/lib/utils/PhoneNumberUtil.js +2 -2
- package/lib/utils/__tests__/PhoneNumberUtil.test.js +2 -2
- package/lib/utils/__tests__/api-requester.test.js +27 -4
- package/lib/utils/__tests__/sdp.test.js +12 -12
- package/lib/utils/api-requester.js +28 -5
- package/lib/utils/sdp.js +10 -10
- package/lib/web-rtc-client.js +98 -38
- package/lib/websocket-client.js +33 -7
- package/package.json +2 -2
- package/src/api/confd.js +5 -2
- package/src/domain/CallLog.js +1 -1
- package/src/domain/Meeting.js +19 -2
- package/src/domain/Phone/WebRTCPhone.js +11 -2
- package/src/domain/Recording.js +1 -1
- package/src/service/IssueReporter.js +26 -3
- package/src/simple/Phone.js +5 -0
- package/src/types/WebSocketMessage.js +5 -1
- package/src/web-rtc-client.js +28 -11
- package/src/websocket-client.js +2 -0
package/lib/simple/Phone.js
CHANGED
|
@@ -122,7 +122,7 @@ class Call {
|
|
|
122
122
|
onHold: plain.on_hold,
|
|
123
123
|
status: plain.status,
|
|
124
124
|
lineId: plain.line_id,
|
|
125
|
-
startingTime: moment__default[
|
|
125
|
+
startingTime: moment__default['default'](plain.creation_time).toDate(),
|
|
126
126
|
talkingToIds: Object.keys(plain.talking_to || {}),
|
|
127
127
|
recording: plain.record_state === RECORD_STATE_ACTIVE,
|
|
128
128
|
});
|
|
@@ -721,6 +721,7 @@ class IssueReporter {
|
|
|
721
721
|
|
|
722
722
|
|
|
723
723
|
|
|
724
|
+
|
|
724
725
|
|
|
725
726
|
constructor() {
|
|
726
727
|
addLevelsTo(this);
|
|
@@ -732,12 +733,17 @@ class IssueReporter {
|
|
|
732
733
|
this.bufferTimeout = null;
|
|
733
734
|
this._boundProcessBuffer = this._processBuffer.bind(this);
|
|
734
735
|
this._boundParseLoggerBody = this._parseLoggerBody.bind(this);
|
|
736
|
+
this._callback = null;
|
|
735
737
|
}
|
|
736
738
|
|
|
737
739
|
init() {
|
|
738
740
|
this._catchConsole();
|
|
739
741
|
}
|
|
740
742
|
|
|
743
|
+
setCallback(cb ) {
|
|
744
|
+
this._callback = cb;
|
|
745
|
+
}
|
|
746
|
+
|
|
741
747
|
configureRemoteClient(configuration = { tag: 'wazo-sdk', host: null, port: null, level: null, extra: {} }) {
|
|
742
748
|
this.remoteClientConfiguration = configuration;
|
|
743
749
|
}
|
|
@@ -773,6 +779,7 @@ class IssueReporter {
|
|
|
773
779
|
|
|
774
780
|
// Handle category label
|
|
775
781
|
let category = null;
|
|
782
|
+
let skipSendToRemote = false;
|
|
776
783
|
let extra = {};
|
|
777
784
|
if (args[0].indexOf(CATEGORY_PREFIX) === 0) {
|
|
778
785
|
category = args[0].split('=')[1];
|
|
@@ -788,6 +795,7 @@ class IssueReporter {
|
|
|
788
795
|
errorMessage: lastArg.message,
|
|
789
796
|
errorStack: lastArg.stack,
|
|
790
797
|
errorType: lastArg.constructor.name,
|
|
798
|
+
skipSendToRemote: lastArg.skipSendToRemote,
|
|
791
799
|
};
|
|
792
800
|
} else {
|
|
793
801
|
extra = lastArg;
|
|
@@ -796,7 +804,12 @@ class IssueReporter {
|
|
|
796
804
|
args.splice(1, 1);
|
|
797
805
|
}
|
|
798
806
|
|
|
799
|
-
|
|
807
|
+
if (extra.skipSendToRemote) {
|
|
808
|
+
skipSendToRemote = true;
|
|
809
|
+
delete extra.skipSendToRemote;
|
|
810
|
+
}
|
|
811
|
+
|
|
812
|
+
const date = moment__default['default']().format('YYYY-MM-DD HH:mm:ss.SSS');
|
|
800
813
|
const message = args.join(', ');
|
|
801
814
|
let consoleMessage = message;
|
|
802
815
|
|
|
@@ -816,7 +829,13 @@ class IssueReporter {
|
|
|
816
829
|
const oldMethod = this.oldConsoleMethods[consoleLevel] || this.oldConsoleMethods.log;
|
|
817
830
|
oldMethod.apply(oldMethod, [date, consoleMessage]);
|
|
818
831
|
|
|
819
|
-
this.
|
|
832
|
+
if (this._callback) {
|
|
833
|
+
this._callback(level, consoleMessage);
|
|
834
|
+
}
|
|
835
|
+
|
|
836
|
+
if (!skipSendToRemote) {
|
|
837
|
+
this._sendToRemoteLogger(level, { date, message, category, ...extra });
|
|
838
|
+
}
|
|
820
839
|
}
|
|
821
840
|
|
|
822
841
|
logRequest(url , options , response , start ) {
|
|
@@ -961,7 +980,11 @@ class IssueReporter {
|
|
|
961
980
|
},
|
|
962
981
|
// $FlowFixMe
|
|
963
982
|
body,
|
|
964
|
-
}).catch(() => {
|
|
983
|
+
}).catch((e ) => {
|
|
984
|
+
// $FlowFixMe
|
|
985
|
+
e.skipSendToRemote = true;
|
|
986
|
+
this.log('error', this._makeCategory('grafana'), 'Sending log to grafana, error', e);
|
|
987
|
+
|
|
965
988
|
setTimeout(() => {
|
|
966
989
|
if (isArray) {
|
|
967
990
|
payload = payload.map(message => {
|
|
@@ -973,7 +996,7 @@ class IssueReporter {
|
|
|
973
996
|
payload._retry = retry + 1;
|
|
974
997
|
}
|
|
975
998
|
|
|
976
|
-
this._sendDebugToGrafana(
|
|
999
|
+
this._sendDebugToGrafana(payload, retry + 1);
|
|
977
1000
|
}, 5000 + retry * 1000);
|
|
978
1001
|
});
|
|
979
1002
|
}
|
|
@@ -3165,7 +3188,8 @@ class ExternalApp {
|
|
|
3165
3188
|
|
|
3166
3189
|
|
|
3167
3190
|
|
|
3168
|
-
|
|
3191
|
+
|
|
3192
|
+
|
|
3169
3193
|
|
|
3170
3194
|
|
|
3171
3195
|
class Meeting {
|
|
@@ -3177,6 +3201,7 @@ class Meeting {
|
|
|
3177
3201
|
|
|
3178
3202
|
|
|
3179
3203
|
|
|
3204
|
+
|
|
3180
3205
|
|
|
3181
3206
|
|
|
3182
3207
|
static parse(plain ) {
|
|
@@ -3188,14 +3213,28 @@ class Meeting {
|
|
|
3188
3213
|
port: plain.port,
|
|
3189
3214
|
uuid: plain.uuid,
|
|
3190
3215
|
number: plain.number,
|
|
3216
|
+
persistent: plain.persistent,
|
|
3191
3217
|
});
|
|
3192
3218
|
}
|
|
3193
3219
|
|
|
3220
|
+
static parseMany(items ) {
|
|
3221
|
+
return items.map(plain => Meeting.parse(plain));
|
|
3222
|
+
}
|
|
3223
|
+
|
|
3194
3224
|
static newFrom(meeting ) {
|
|
3195
3225
|
return newFrom(meeting, Meeting);
|
|
3196
3226
|
}
|
|
3197
3227
|
|
|
3198
|
-
constructor({
|
|
3228
|
+
constructor({
|
|
3229
|
+
uuid,
|
|
3230
|
+
name,
|
|
3231
|
+
guestSipAuthorization,
|
|
3232
|
+
ownerUuids,
|
|
3233
|
+
port,
|
|
3234
|
+
uri,
|
|
3235
|
+
number,
|
|
3236
|
+
persistent,
|
|
3237
|
+
} = {}) {
|
|
3199
3238
|
this.guestSipAuthorization = guestSipAuthorization;
|
|
3200
3239
|
this.uri = uri;
|
|
3201
3240
|
this.name = name;
|
|
@@ -3203,6 +3242,7 @@ class Meeting {
|
|
|
3203
3242
|
this.port = port;
|
|
3204
3243
|
this.uuid = uuid;
|
|
3205
3244
|
this.number = number;
|
|
3245
|
+
this.persistent = persistent;
|
|
3206
3246
|
|
|
3207
3247
|
// Useful to compare instead of instanceof with minified code
|
|
3208
3248
|
this.type = 'Meeting';
|
|
@@ -3280,8 +3320,11 @@ var confdMethods = (client , baseUrl ) => ({
|
|
|
3280
3320
|
}
|
|
3281
3321
|
},
|
|
3282
3322
|
|
|
3283
|
-
|
|
3284
|
-
client.
|
|
3323
|
+
getMyMeetings: () =>
|
|
3324
|
+
client.get(`${baseUrl}/users/me/meetings`).then(response => Meeting.parseMany(response.items)),
|
|
3325
|
+
|
|
3326
|
+
createMyMeeting: (name , persistent ) =>
|
|
3327
|
+
client.post(`${baseUrl}/users/me/meetings`, { name, persistent }).then(Meeting.parse),
|
|
3285
3328
|
|
|
3286
3329
|
deleteMyMeeting: (meetingUuid ) =>
|
|
3287
3330
|
client.delete(`${baseUrl}/users/me/meetings/${meetingUuid}`, null),
|
|
@@ -3383,7 +3426,7 @@ class ChatMessage {
|
|
|
3383
3426
|
static parse(plain ) {
|
|
3384
3427
|
return new ChatMessage({
|
|
3385
3428
|
uuid: plain.uuid,
|
|
3386
|
-
date: moment__default[
|
|
3429
|
+
date: moment__default['default'](plain.created_at).toDate(),
|
|
3387
3430
|
content: plain.content,
|
|
3388
3431
|
alias: plain.alias,
|
|
3389
3432
|
userUuid: plain.user_uuid,
|
|
@@ -3475,7 +3518,7 @@ class Voicemail {
|
|
|
3475
3518
|
static parse(plain ) {
|
|
3476
3519
|
return new Voicemail({
|
|
3477
3520
|
id: plain.id,
|
|
3478
|
-
date: moment__default[
|
|
3521
|
+
date: moment__default['default'](plain.timestamp * 1000).toDate(),
|
|
3479
3522
|
duration: plain.duration * 1000,
|
|
3480
3523
|
caller: {
|
|
3481
3524
|
name: plain.caller_id_name,
|
|
@@ -3541,7 +3584,7 @@ class Emitter {
|
|
|
3541
3584
|
|
|
3542
3585
|
|
|
3543
3586
|
constructor() {
|
|
3544
|
-
this.eventEmitter = new EventEmitter__default[
|
|
3587
|
+
this.eventEmitter = new EventEmitter__default['default']();
|
|
3545
3588
|
}
|
|
3546
3589
|
|
|
3547
3590
|
on(event , callback ) {
|
|
@@ -3586,7 +3629,7 @@ class Recording {
|
|
|
3586
3629
|
|
|
3587
3630
|
|
|
3588
3631
|
|
|
3589
|
-
static parseMany(recordings
|
|
3632
|
+
static parseMany(recordings = []) {
|
|
3590
3633
|
return recordings.map(item => Recording.parse(item));
|
|
3591
3634
|
}
|
|
3592
3635
|
|
|
@@ -3594,8 +3637,8 @@ class Recording {
|
|
|
3594
3637
|
return new Recording({
|
|
3595
3638
|
deleted: plain.deleted,
|
|
3596
3639
|
fileName: plain.filename,
|
|
3597
|
-
end: plain.end_time ? moment__default[
|
|
3598
|
-
start: moment__default[
|
|
3640
|
+
end: plain.end_time ? moment__default['default'](plain.end_time).toDate() : null,
|
|
3641
|
+
start: moment__default['default'](plain.start_time).toDate(),
|
|
3599
3642
|
uuid: plain.uuid,
|
|
3600
3643
|
});
|
|
3601
3644
|
}
|
|
@@ -3693,7 +3736,7 @@ class CallLog {
|
|
|
3693
3736
|
|
|
3694
3737
|
static parse(plain ) {
|
|
3695
3738
|
return new CallLog({
|
|
3696
|
-
answer: plain.answer ? moment__default[
|
|
3739
|
+
answer: plain.answer ? moment__default['default'](plain.answer).toDate() : null,
|
|
3697
3740
|
answered: plain.answered,
|
|
3698
3741
|
callDirection: plain.call_direction,
|
|
3699
3742
|
destination: {
|
|
@@ -3710,9 +3753,9 @@ class CallLog {
|
|
|
3710
3753
|
},
|
|
3711
3754
|
id: plain.id,
|
|
3712
3755
|
duration: (plain.duration || 0) * 1000, // duration is in seconds
|
|
3713
|
-
start: moment__default[
|
|
3714
|
-
end: plain.end ? moment__default[
|
|
3715
|
-
recordings: Recording.parseMany(plain.recordings),
|
|
3756
|
+
start: moment__default['default'](plain.start).toDate(),
|
|
3757
|
+
end: plain.end ? moment__default['default'](plain.end).toDate() : null,
|
|
3758
|
+
recordings: Recording.parseMany(plain.recordings || []),
|
|
3716
3759
|
});
|
|
3717
3760
|
}
|
|
3718
3761
|
|
|
@@ -5622,7 +5665,7 @@ const parseCandidate$1 = (candidate ) => {
|
|
|
5622
5665
|
if (!candidate) {
|
|
5623
5666
|
return null;
|
|
5624
5667
|
}
|
|
5625
|
-
const result = sdpParser__default[
|
|
5668
|
+
const result = sdpParser__default['default'].parse(candidate.indexOf('a=') === 0 ? candidate : `a=${candidate}`);
|
|
5626
5669
|
|
|
5627
5670
|
return result.candidates ? result.candidates[0] : null;
|
|
5628
5671
|
};
|
|
@@ -5636,7 +5679,7 @@ const areCandidateValid = (candidates ) =>
|
|
|
5636
5679
|
.length > 0;
|
|
5637
5680
|
|
|
5638
5681
|
const getVideoDirection = (sdp ) => {
|
|
5639
|
-
const parsedSdp = sdpParser__default[
|
|
5682
|
+
const parsedSdp = sdpParser__default['default'].parse(sdp);
|
|
5640
5683
|
const videoMedia = parsedSdp.media.find(media => media.type === 'video');
|
|
5641
5684
|
if (!videoMedia) {
|
|
5642
5685
|
return null;
|
|
@@ -5650,14 +5693,14 @@ const hasAnActiveVideo = (sdp ) => {
|
|
|
5650
5693
|
return false;
|
|
5651
5694
|
}
|
|
5652
5695
|
|
|
5653
|
-
const parsedSdp = sdpParser__default[
|
|
5696
|
+
const parsedSdp = sdpParser__default['default'].parse(sdp);
|
|
5654
5697
|
|
|
5655
5698
|
return !!parsedSdp.media.find(media =>
|
|
5656
5699
|
media.type === 'video' && media.port > 10 && (!media.direction || media.direction !== 'inactive'));
|
|
5657
5700
|
};
|
|
5658
5701
|
|
|
5659
5702
|
const fixSdp = (sdp , candidates , forcePort = true) => {
|
|
5660
|
-
const parsedSdp = sdpParser__default[
|
|
5703
|
+
const parsedSdp = sdpParser__default['default'].parse(sdp);
|
|
5661
5704
|
const mainCandidate = getSrflxOrRelay(candidates)[0];
|
|
5662
5705
|
const ip = mainCandidate ? mainCandidate.ip : null;
|
|
5663
5706
|
|
|
@@ -5675,7 +5718,7 @@ const fixSdp = (sdp , candidates , forcePort = true)
|
|
|
5675
5718
|
};
|
|
5676
5719
|
});
|
|
5677
5720
|
|
|
5678
|
-
let fixed = sdpParser__default[
|
|
5721
|
+
let fixed = sdpParser__default['default'].write(parsedSdp);
|
|
5679
5722
|
|
|
5680
5723
|
if (ip) {
|
|
5681
5724
|
fixed = fixed.replace(/IN IP4 0.0.0.0/g, `IN IP4 ${ip}`);
|
|
@@ -5721,7 +5764,7 @@ class WazoSessionDescriptionHandler extends sessionDescriptionHandler.SessionDes
|
|
|
5721
5764
|
) {
|
|
5722
5765
|
super(logger, mediaStreamFactory, sessionDescriptionHandlerConfiguration);
|
|
5723
5766
|
|
|
5724
|
-
this.eventEmitter = new EventEmitter__default[
|
|
5767
|
+
this.eventEmitter = new EventEmitter__default['default']();
|
|
5725
5768
|
this.isWeb = isWeb;
|
|
5726
5769
|
this.session = session;
|
|
5727
5770
|
}
|
|
@@ -6702,7 +6745,9 @@ class WebRTCClient extends Emitter {
|
|
|
6702
6745
|
const inviteOptions = {
|
|
6703
6746
|
requestDelegate: {
|
|
6704
6747
|
onAccept: (response ) => {
|
|
6705
|
-
session.sessionDescriptionHandler.peerConnection
|
|
6748
|
+
if (session.sessionDescriptionHandler.peerConnection) {
|
|
6749
|
+
session.sessionDescriptionHandler.peerConnection.sfu = conference;
|
|
6750
|
+
}
|
|
6706
6751
|
this._onAccepted(session, response.session, true);
|
|
6707
6752
|
},
|
|
6708
6753
|
onReject: (response ) => {
|
|
@@ -7038,7 +7083,7 @@ class WebRTCClient extends Emitter {
|
|
|
7038
7083
|
// We search for the last transceiver without `video-` in the mid (video- means remote transceiver)
|
|
7039
7084
|
const transceivers = pc.getTransceivers();
|
|
7040
7085
|
const transceiverIdx = lastIndexOf(transceivers, transceiver =>
|
|
7041
|
-
transceiver.sender.track === null && transceiver.mid.indexOf('video') === -1);
|
|
7086
|
+
transceiver.sender.track === null && transceiver.mid && transceiver.mid.indexOf('video') === -1);
|
|
7042
7087
|
|
|
7043
7088
|
videoSender = transceiverIdx !== -1 ? transceivers[transceiverIdx].sender : null;
|
|
7044
7089
|
} else {
|
|
@@ -7574,6 +7619,16 @@ class WebRTCClient extends Emitter {
|
|
|
7574
7619
|
return this.hasRemoteVideo(sessionId) ? this.getRemoteStream(sessionId) : null;
|
|
7575
7620
|
}
|
|
7576
7621
|
|
|
7622
|
+
// Useful in a react-native environment when remoteMediaStream is not updated
|
|
7623
|
+
getRemoteVideoStreamFromPc(sessionId ) {
|
|
7624
|
+
const pc = this.getPeerConnection(sessionId);
|
|
7625
|
+
if (!pc) {
|
|
7626
|
+
return null;
|
|
7627
|
+
}
|
|
7628
|
+
|
|
7629
|
+
return pc.getRemoteStreams().find(stream => !!stream.getVideoTracks().length);
|
|
7630
|
+
}
|
|
7631
|
+
|
|
7577
7632
|
hasVideo(sessionId ) {
|
|
7578
7633
|
return this.hasLocalVideo(sessionId) || this.hasRemoteVideo(sessionId);
|
|
7579
7634
|
}
|
|
@@ -8084,6 +8139,7 @@ class WebRTCClient extends Emitter {
|
|
|
8084
8139
|
session.sessionDescriptionHandler.remoteMediaStream.onaddtrack = onTrack;
|
|
8085
8140
|
|
|
8086
8141
|
pc.oniceconnectionstatechange = () => {
|
|
8142
|
+
logger$9.info('on ice connection state changed', { state: pc.iceConnectionState });
|
|
8087
8143
|
if (pc.iceConnectionState === 'disconnected') {
|
|
8088
8144
|
this.eventEmitter.emit(ON_DISCONNECTED$1);
|
|
8089
8145
|
}
|
|
@@ -8243,7 +8299,7 @@ class WebRTCClient extends Emitter {
|
|
|
8243
8299
|
}
|
|
8244
8300
|
const sessionId = this.getSipSessionId(session);
|
|
8245
8301
|
|
|
8246
|
-
getStats__default[
|
|
8302
|
+
getStats__default['default'](pc, (result ) => {
|
|
8247
8303
|
const { results, internal, nomore, ...stats } = result;
|
|
8248
8304
|
this.statsIntervals[sessionId] = nomore;
|
|
8249
8305
|
|
|
@@ -8352,18 +8408,22 @@ class WebRTCClient extends Emitter {
|
|
|
8352
8408
|
});
|
|
8353
8409
|
|
|
8354
8410
|
networkStats.packetsLost = packetsLost;
|
|
8355
|
-
networkStats.
|
|
8411
|
+
networkStats.totalAudioBytesSent = audioBytesSent;
|
|
8412
|
+
networkStats.audioBytesSent = audioBytesSent - lastAudioSent;
|
|
8413
|
+
networkStats.totalAudioBytesReceived = audioBytesReceived - lastAudioReceived;
|
|
8356
8414
|
networkStats.audioBytesReceived = audioBytesReceived;
|
|
8357
|
-
networkStats.
|
|
8358
|
-
networkStats.
|
|
8415
|
+
networkStats.totalVideoBytesSent = videoBytesSent;
|
|
8416
|
+
networkStats.videoBytesSent = videoBytesSent - lastVideoSent;
|
|
8417
|
+
networkStats.totalVideoBytesReceived = videoBytesReceived;
|
|
8418
|
+
networkStats.videoBytesReceived = videoBytesReceived - lastVideoReceived;
|
|
8419
|
+
networkStats.totalTransportSent = transportSent - lastTransportSent;
|
|
8359
8420
|
networkStats.transportSent = transportSent;
|
|
8360
|
-
networkStats.
|
|
8361
|
-
|
|
8362
|
-
const bandwidth = (networkStats.audioBytesSent - lastAudioSent) + (networkStats.videoBytesSent - lastVideoSent)
|
|
8363
|
-
+ (networkStats.audioBytesReceived - lastAudioReceived) + (networkStats.videoBytesReceived - lastVideoReceived)
|
|
8364
|
-
+ (networkStats.transportReceived - lastTransportReceived) + (networkStats.transportSent - lastTransportSent);
|
|
8421
|
+
networkStats.totalTransportReceived = transportReceived;
|
|
8422
|
+
networkStats.transportReceived = transportReceived - lastTransportReceived;
|
|
8365
8423
|
|
|
8366
|
-
networkStats.bandwidth =
|
|
8424
|
+
networkStats.bandwidth = networkStats.audioBytesSent + networkStats.audioBytesReceived
|
|
8425
|
+
+ networkStats.videoBytesSent + networkStats.videoBytesReceived + networkStats.transportReceived
|
|
8426
|
+
+ networkStats.transportSent;
|
|
8367
8427
|
|
|
8368
8428
|
this.eventEmitter.emit(ON_NETWORK_STATS$1, session, networkStats, this.sessionNetworkStats[sessionId]);
|
|
8369
8429
|
this.sessionNetworkStats[sessionId].push(networkStats);
|
|
@@ -8745,7 +8805,10 @@ class WebRTCPhone extends Emitter {
|
|
|
8745
8805
|
|
|
8746
8806
|
onCancel(message);
|
|
8747
8807
|
const elsewhere = message.data.indexOf('cause=26') !== -1 && message.data.indexOf('completed elsewhere') !== -1;
|
|
8748
|
-
|
|
8808
|
+
const callSession = this._createCallSession(sipSession);
|
|
8809
|
+
delete this.callSessions[callSession.getId()];
|
|
8810
|
+
|
|
8811
|
+
this.eventEmitter.emit(ON_CALL_CANCELED, callSession, elsewhere);
|
|
8749
8812
|
};
|
|
8750
8813
|
} else if (sipSession instanceof invitation.Invitation) {
|
|
8751
8814
|
console.warn('sipSession._onCancel not found, please update the wazo SDK accordingly');
|
|
@@ -8774,9 +8837,11 @@ class WebRTCPhone extends Emitter {
|
|
|
8774
8837
|
case sessionState.SessionState.Terminated: {
|
|
8775
8838
|
logger$8.info('WebRTC phone - call terminated', { sipId: sipSession.id });
|
|
8776
8839
|
|
|
8840
|
+
// Should be called before `_onCallTerminated` or the callCount will not decrement...
|
|
8841
|
+
const callSession = this._createCallSession(sipSession);
|
|
8777
8842
|
const wasCurrentSession = this._onCallTerminated(sipSession);
|
|
8778
8843
|
|
|
8779
|
-
return this.eventEmitter.emit(ON_CALL_ENDED,
|
|
8844
|
+
return this.eventEmitter.emit(ON_CALL_ENDED, callSession, wasCurrentSession);
|
|
8780
8845
|
}
|
|
8781
8846
|
}
|
|
8782
8847
|
});
|
|
@@ -9724,6 +9789,10 @@ class WebRTCPhone extends Emitter {
|
|
|
9724
9789
|
return callSession ? this.client.getRemoteVideoStream(callSession.sipCallId) : null;
|
|
9725
9790
|
}
|
|
9726
9791
|
|
|
9792
|
+
getRemoteVideoStreamFromPc(callSession ) {
|
|
9793
|
+
return callSession ? this.client.getRemoteVideoStreamFromPc(callSession.sipCallId) : null;
|
|
9794
|
+
}
|
|
9795
|
+
|
|
9727
9796
|
hasRemoteVideo(callSession ) {
|
|
9728
9797
|
return callSession ? this.client.hasRemoteVideo(callSession.sipCallId) : false;
|
|
9729
9798
|
}
|
|
@@ -10425,6 +10494,7 @@ const AGENT_PAUSED = 'agent_paused';
|
|
|
10425
10494
|
const AGENT_UNPAUSED = 'agent_unpaused';
|
|
10426
10495
|
const CONFERENCE_ADHOC_PARTICIPANT_LEFT = 'conference_adhoc_participant_left';
|
|
10427
10496
|
const CONFERENCE_ADHOC_DELETED = 'conference_adhoc_deleted';
|
|
10497
|
+
const MEETING_USER_PROGRESS = 'meeting_user_progress';
|
|
10428
10498
|
|
|
10429
10499
|
const BLACKLIST_EVENTS = [
|
|
10430
10500
|
CHAT_MESSAGE_SENT,
|
|
@@ -10484,7 +10554,7 @@ class WebSocketClient extends Emitter {
|
|
|
10484
10554
|
|
|
10485
10555
|
connect() {
|
|
10486
10556
|
logger$6.info('connect method started', { host: this.host, token: this.token });
|
|
10487
|
-
this.socket = new ReconnectingWebSocket__default[
|
|
10557
|
+
this.socket = new ReconnectingWebSocket__default['default'](this._getUrl.bind(this), [], this.options);
|
|
10488
10558
|
if (this.options.binaryType) {
|
|
10489
10559
|
this.socket.binaryType = this.options.binaryType;
|
|
10490
10560
|
}
|
|
@@ -10775,6 +10845,7 @@ WebSocketClient.eventLists = [
|
|
|
10775
10845
|
AGENT_UNPAUSED,
|
|
10776
10846
|
CONFERENCE_ADHOC_PARTICIPANT_LEFT,
|
|
10777
10847
|
CONFERENCE_ADHOC_DELETED,
|
|
10848
|
+
MEETING_USER_PROGRESS,
|
|
10778
10849
|
];
|
|
10779
10850
|
|
|
10780
10851
|
var WebSocketClient$1 = /*#__PURE__*/Object.freeze({
|
|
@@ -10845,6 +10916,7 @@ var WebSocketClient$1 = /*#__PURE__*/Object.freeze({
|
|
|
10845
10916
|
AGENT_UNPAUSED: AGENT_UNPAUSED,
|
|
10846
10917
|
CONFERENCE_ADHOC_PARTICIPANT_LEFT: CONFERENCE_ADHOC_PARTICIPANT_LEFT,
|
|
10847
10918
|
CONFERENCE_ADHOC_DELETED: CONFERENCE_ADHOC_DELETED,
|
|
10919
|
+
MEETING_USER_PROGRESS: MEETING_USER_PROGRESS,
|
|
10848
10920
|
HEARTBEAT_ENGINE_VERSION: HEARTBEAT_ENGINE_VERSION,
|
|
10849
10921
|
'default': WebSocketClient
|
|
10850
10922
|
});
|
|
@@ -11737,7 +11809,7 @@ class Room$1 extends Emitter {
|
|
|
11737
11809
|
}
|
|
11738
11810
|
|
|
11739
11811
|
_mapMsid(rawSdp ) {
|
|
11740
|
-
const sdp = sdpParser__default[
|
|
11812
|
+
const sdp = sdpParser__default['default'].parse(rawSdp);
|
|
11741
11813
|
const labelMsidArray = sdp.media.filter(media => !!media.label).map(({ label, msid }) => ({
|
|
11742
11814
|
label: String(label),
|
|
11743
11815
|
streamId: msid.split(' ')[0],
|
|
@@ -13564,6 +13636,11 @@ class Phone extends Emitter {
|
|
|
13564
13636
|
return this.getRemoteVideoStream(callSession);
|
|
13565
13637
|
}
|
|
13566
13638
|
|
|
13639
|
+
// Useful in a react-native environment when remoteMediaStream is not updated
|
|
13640
|
+
getRemoteVideoStreamFromPc(callSession ) {
|
|
13641
|
+
return this.phone ? this.phone.getRemoteVideoStreamFromPc(callSession) : false;
|
|
13642
|
+
}
|
|
13643
|
+
|
|
13567
13644
|
hasVideo(callSession ) {
|
|
13568
13645
|
return this.phone ? this.phone.hasVideo(callSession) : false;
|
|
13569
13646
|
}
|
package/lib/simple/Websocket.js
CHANGED
|
@@ -17,7 +17,7 @@ class Emitter {
|
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
constructor() {
|
|
20
|
-
this.eventEmitter = new EventEmitter__default[
|
|
20
|
+
this.eventEmitter = new EventEmitter__default['default']();
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
on(event , callback ) {
|
|
@@ -129,6 +129,7 @@ class IssueReporter {
|
|
|
129
129
|
|
|
130
130
|
|
|
131
131
|
|
|
132
|
+
|
|
132
133
|
|
|
133
134
|
constructor() {
|
|
134
135
|
addLevelsTo(this);
|
|
@@ -140,12 +141,17 @@ class IssueReporter {
|
|
|
140
141
|
this.bufferTimeout = null;
|
|
141
142
|
this._boundProcessBuffer = this._processBuffer.bind(this);
|
|
142
143
|
this._boundParseLoggerBody = this._parseLoggerBody.bind(this);
|
|
144
|
+
this._callback = null;
|
|
143
145
|
}
|
|
144
146
|
|
|
145
147
|
init() {
|
|
146
148
|
this._catchConsole();
|
|
147
149
|
}
|
|
148
150
|
|
|
151
|
+
setCallback(cb ) {
|
|
152
|
+
this._callback = cb;
|
|
153
|
+
}
|
|
154
|
+
|
|
149
155
|
configureRemoteClient(configuration = { tag: 'wazo-sdk', host: null, port: null, level: null, extra: {} }) {
|
|
150
156
|
this.remoteClientConfiguration = configuration;
|
|
151
157
|
}
|
|
@@ -181,6 +187,7 @@ class IssueReporter {
|
|
|
181
187
|
|
|
182
188
|
// Handle category label
|
|
183
189
|
let category = null;
|
|
190
|
+
let skipSendToRemote = false;
|
|
184
191
|
let extra = {};
|
|
185
192
|
if (args[0].indexOf(CATEGORY_PREFIX) === 0) {
|
|
186
193
|
category = args[0].split('=')[1];
|
|
@@ -196,6 +203,7 @@ class IssueReporter {
|
|
|
196
203
|
errorMessage: lastArg.message,
|
|
197
204
|
errorStack: lastArg.stack,
|
|
198
205
|
errorType: lastArg.constructor.name,
|
|
206
|
+
skipSendToRemote: lastArg.skipSendToRemote,
|
|
199
207
|
};
|
|
200
208
|
} else {
|
|
201
209
|
extra = lastArg;
|
|
@@ -204,7 +212,12 @@ class IssueReporter {
|
|
|
204
212
|
args.splice(1, 1);
|
|
205
213
|
}
|
|
206
214
|
|
|
207
|
-
|
|
215
|
+
if (extra.skipSendToRemote) {
|
|
216
|
+
skipSendToRemote = true;
|
|
217
|
+
delete extra.skipSendToRemote;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
const date = moment__default['default']().format('YYYY-MM-DD HH:mm:ss.SSS');
|
|
208
221
|
const message = args.join(', ');
|
|
209
222
|
let consoleMessage = message;
|
|
210
223
|
|
|
@@ -224,7 +237,13 @@ class IssueReporter {
|
|
|
224
237
|
const oldMethod = this.oldConsoleMethods[consoleLevel] || this.oldConsoleMethods.log;
|
|
225
238
|
oldMethod.apply(oldMethod, [date, consoleMessage]);
|
|
226
239
|
|
|
227
|
-
this.
|
|
240
|
+
if (this._callback) {
|
|
241
|
+
this._callback(level, consoleMessage);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
if (!skipSendToRemote) {
|
|
245
|
+
this._sendToRemoteLogger(level, { date, message, category, ...extra });
|
|
246
|
+
}
|
|
228
247
|
}
|
|
229
248
|
|
|
230
249
|
logRequest(url , options , response , start ) {
|
|
@@ -369,7 +388,11 @@ class IssueReporter {
|
|
|
369
388
|
},
|
|
370
389
|
// $FlowFixMe
|
|
371
390
|
body,
|
|
372
|
-
}).catch(() => {
|
|
391
|
+
}).catch((e ) => {
|
|
392
|
+
// $FlowFixMe
|
|
393
|
+
e.skipSendToRemote = true;
|
|
394
|
+
this.log('error', this._makeCategory('grafana'), 'Sending log to grafana, error', e);
|
|
395
|
+
|
|
373
396
|
setTimeout(() => {
|
|
374
397
|
if (isArray) {
|
|
375
398
|
payload = payload.map(message => {
|
|
@@ -381,7 +404,7 @@ class IssueReporter {
|
|
|
381
404
|
payload._retry = retry + 1;
|
|
382
405
|
}
|
|
383
406
|
|
|
384
|
-
this._sendDebugToGrafana(
|
|
407
|
+
this._sendDebugToGrafana(payload, retry + 1);
|
|
385
408
|
}, 5000 + retry * 1000);
|
|
386
409
|
});
|
|
387
410
|
}
|
|
@@ -586,6 +609,7 @@ const AGENT_PAUSED = 'agent_paused';
|
|
|
586
609
|
const AGENT_UNPAUSED = 'agent_unpaused';
|
|
587
610
|
const CONFERENCE_ADHOC_PARTICIPANT_LEFT = 'conference_adhoc_participant_left';
|
|
588
611
|
const CONFERENCE_ADHOC_DELETED = 'conference_adhoc_deleted';
|
|
612
|
+
const MEETING_USER_PROGRESS = 'meeting_user_progress';
|
|
589
613
|
|
|
590
614
|
const BLACKLIST_EVENTS = [
|
|
591
615
|
CHAT_MESSAGE_SENT,
|
|
@@ -645,7 +669,7 @@ class WebSocketClient extends Emitter {
|
|
|
645
669
|
|
|
646
670
|
connect() {
|
|
647
671
|
logger$1.info('connect method started', { host: this.host, token: this.token });
|
|
648
|
-
this.socket = new ReconnectingWebSocket__default[
|
|
672
|
+
this.socket = new ReconnectingWebSocket__default['default'](this._getUrl.bind(this), [], this.options);
|
|
649
673
|
if (this.options.binaryType) {
|
|
650
674
|
this.socket.binaryType = this.options.binaryType;
|
|
651
675
|
}
|
|
@@ -936,6 +960,7 @@ WebSocketClient.eventLists = [
|
|
|
936
960
|
AGENT_UNPAUSED,
|
|
937
961
|
CONFERENCE_ADHOC_PARTICIPANT_LEFT,
|
|
938
962
|
CONFERENCE_ADHOC_DELETED,
|
|
963
|
+
MEETING_USER_PROGRESS,
|
|
939
964
|
];
|
|
940
965
|
|
|
941
966
|
var WebSocketClient$1 = /*#__PURE__*/Object.freeze({
|
|
@@ -1006,6 +1031,7 @@ var WebSocketClient$1 = /*#__PURE__*/Object.freeze({
|
|
|
1006
1031
|
AGENT_UNPAUSED: AGENT_UNPAUSED,
|
|
1007
1032
|
CONFERENCE_ADHOC_PARTICIPANT_LEFT: CONFERENCE_ADHOC_PARTICIPANT_LEFT,
|
|
1008
1033
|
CONFERENCE_ADHOC_DELETED: CONFERENCE_ADHOC_DELETED,
|
|
1034
|
+
MEETING_USER_PROGRESS: MEETING_USER_PROGRESS,
|
|
1009
1035
|
HEARTBEAT_ENGINE_VERSION: HEARTBEAT_ENGINE_VERSION,
|
|
1010
1036
|
'default': WebSocketClient
|
|
1011
1037
|
});
|