@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
|
@@ -130,6 +130,7 @@ class IssueReporter {
|
|
|
130
130
|
|
|
131
131
|
|
|
132
132
|
|
|
133
|
+
|
|
133
134
|
|
|
134
135
|
constructor() {
|
|
135
136
|
addLevelsTo(this);
|
|
@@ -141,12 +142,17 @@ class IssueReporter {
|
|
|
141
142
|
this.bufferTimeout = null;
|
|
142
143
|
this._boundProcessBuffer = this._processBuffer.bind(this);
|
|
143
144
|
this._boundParseLoggerBody = this._parseLoggerBody.bind(this);
|
|
145
|
+
this._callback = null;
|
|
144
146
|
}
|
|
145
147
|
|
|
146
148
|
init() {
|
|
147
149
|
this._catchConsole();
|
|
148
150
|
}
|
|
149
151
|
|
|
152
|
+
setCallback(cb ) {
|
|
153
|
+
this._callback = cb;
|
|
154
|
+
}
|
|
155
|
+
|
|
150
156
|
configureRemoteClient(configuration = { tag: 'wazo-sdk', host: null, port: null, level: null, extra: {} }) {
|
|
151
157
|
this.remoteClientConfiguration = configuration;
|
|
152
158
|
}
|
|
@@ -182,6 +188,7 @@ class IssueReporter {
|
|
|
182
188
|
|
|
183
189
|
// Handle category label
|
|
184
190
|
let category = null;
|
|
191
|
+
let skipSendToRemote = false;
|
|
185
192
|
let extra = {};
|
|
186
193
|
if (args[0].indexOf(CATEGORY_PREFIX) === 0) {
|
|
187
194
|
category = args[0].split('=')[1];
|
|
@@ -197,6 +204,7 @@ class IssueReporter {
|
|
|
197
204
|
errorMessage: lastArg.message,
|
|
198
205
|
errorStack: lastArg.stack,
|
|
199
206
|
errorType: lastArg.constructor.name,
|
|
207
|
+
skipSendToRemote: lastArg.skipSendToRemote,
|
|
200
208
|
};
|
|
201
209
|
} else {
|
|
202
210
|
extra = lastArg;
|
|
@@ -205,6 +213,11 @@ class IssueReporter {
|
|
|
205
213
|
args.splice(1, 1);
|
|
206
214
|
}
|
|
207
215
|
|
|
216
|
+
if (extra.skipSendToRemote) {
|
|
217
|
+
skipSendToRemote = true;
|
|
218
|
+
delete extra.skipSendToRemote;
|
|
219
|
+
}
|
|
220
|
+
|
|
208
221
|
const date = moment().format('YYYY-MM-DD HH:mm:ss.SSS');
|
|
209
222
|
const message = args.join(', ');
|
|
210
223
|
let consoleMessage = message;
|
|
@@ -225,7 +238,13 @@ class IssueReporter {
|
|
|
225
238
|
const oldMethod = this.oldConsoleMethods[consoleLevel] || this.oldConsoleMethods.log;
|
|
226
239
|
oldMethod.apply(oldMethod, [date, consoleMessage]);
|
|
227
240
|
|
|
228
|
-
this.
|
|
241
|
+
if (this._callback) {
|
|
242
|
+
this._callback(level, consoleMessage);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
if (!skipSendToRemote) {
|
|
246
|
+
this._sendToRemoteLogger(level, { date, message, category, ...extra });
|
|
247
|
+
}
|
|
229
248
|
}
|
|
230
249
|
|
|
231
250
|
logRequest(url , options , response , start ) {
|
|
@@ -370,7 +389,11 @@ class IssueReporter {
|
|
|
370
389
|
},
|
|
371
390
|
// $FlowFixMe
|
|
372
391
|
body,
|
|
373
|
-
}).catch(() => {
|
|
392
|
+
}).catch((e ) => {
|
|
393
|
+
// $FlowFixMe
|
|
394
|
+
e.skipSendToRemote = true;
|
|
395
|
+
this.log('error', this._makeCategory('grafana'), 'Sending log to grafana, error', e);
|
|
396
|
+
|
|
374
397
|
setTimeout(() => {
|
|
375
398
|
if (isArray) {
|
|
376
399
|
payload = payload.map(message => {
|
|
@@ -1508,6 +1531,9 @@ class Contact {
|
|
|
1508
1531
|
}
|
|
1509
1532
|
|
|
1510
1533
|
static parseMany(response ) {
|
|
1534
|
+
if (!response || !response.results) {
|
|
1535
|
+
return [];
|
|
1536
|
+
}
|
|
1511
1537
|
return response.results.map(r => Contact.parse(r, response.column_types));
|
|
1512
1538
|
}
|
|
1513
1539
|
|
|
@@ -2614,11 +2640,27 @@ class Meeting {
|
|
|
2614
2640
|
});
|
|
2615
2641
|
}
|
|
2616
2642
|
|
|
2643
|
+
static parseMany(items ) {
|
|
2644
|
+
if (!items) {
|
|
2645
|
+
return [];
|
|
2646
|
+
}
|
|
2647
|
+
return items.map(plain => Meeting.parse(plain));
|
|
2648
|
+
}
|
|
2649
|
+
|
|
2617
2650
|
static newFrom(meeting ) {
|
|
2618
2651
|
return newFrom(meeting, Meeting);
|
|
2619
2652
|
}
|
|
2620
2653
|
|
|
2621
|
-
constructor({
|
|
2654
|
+
constructor({
|
|
2655
|
+
uuid,
|
|
2656
|
+
name,
|
|
2657
|
+
guestSipAuthorization,
|
|
2658
|
+
ownerUuids,
|
|
2659
|
+
port,
|
|
2660
|
+
uri,
|
|
2661
|
+
number,
|
|
2662
|
+
persistent,
|
|
2663
|
+
} = {}) {
|
|
2622
2664
|
this.guestSipAuthorization = guestSipAuthorization;
|
|
2623
2665
|
this.uri = uri;
|
|
2624
2666
|
this.name = name;
|
|
@@ -2704,8 +2746,11 @@ var confdMethods = (client , baseUrl ) => ({
|
|
|
2704
2746
|
}
|
|
2705
2747
|
},
|
|
2706
2748
|
|
|
2707
|
-
|
|
2708
|
-
client.
|
|
2749
|
+
getMyMeetings: () =>
|
|
2750
|
+
client.get(`${baseUrl}/users/me/meetings`).then(response => Meeting.parseMany(response.items)),
|
|
2751
|
+
|
|
2752
|
+
createMyMeeting: (name , persistent ) =>
|
|
2753
|
+
client.post(`${baseUrl}/users/me/meetings`, { name, persistent }).then(Meeting.parse),
|
|
2709
2754
|
|
|
2710
2755
|
deleteMyMeeting: (meetingUuid ) =>
|
|
2711
2756
|
client.delete(`${baseUrl}/users/me/meetings/${meetingUuid}`, null),
|
|
@@ -2801,6 +2846,10 @@ class ChatMessage {
|
|
|
2801
2846
|
|
|
2802
2847
|
|
|
2803
2848
|
static parseMany(plain ) {
|
|
2849
|
+
if (!plain || !plain.items) {
|
|
2850
|
+
return [];
|
|
2851
|
+
}
|
|
2852
|
+
|
|
2804
2853
|
return plain.items.map(item => ChatMessage.parse(item));
|
|
2805
2854
|
}
|
|
2806
2855
|
|
|
@@ -2910,6 +2959,9 @@ class Voicemail {
|
|
|
2910
2959
|
}
|
|
2911
2960
|
|
|
2912
2961
|
static parseMany(plain ) {
|
|
2962
|
+
if (!plain) {
|
|
2963
|
+
return [];
|
|
2964
|
+
}
|
|
2913
2965
|
const plainUnread = plain.folders.filter(folder => folder.type === 'new')[0].messages;
|
|
2914
2966
|
const plainRead = plain.folders.filter(folder => folder.type === 'old')[0].messages;
|
|
2915
2967
|
|
|
@@ -3019,6 +3071,9 @@ class Call {
|
|
|
3019
3071
|
|
|
3020
3072
|
|
|
3021
3073
|
static parseMany(plain ) {
|
|
3074
|
+
if (!plain) {
|
|
3075
|
+
return [];
|
|
3076
|
+
}
|
|
3022
3077
|
return plain.map((plainCall ) => Call.parse(plainCall));
|
|
3023
3078
|
}
|
|
3024
3079
|
|
|
@@ -3191,6 +3246,9 @@ class Recording {
|
|
|
3191
3246
|
|
|
3192
3247
|
|
|
3193
3248
|
static parseMany(recordings = []) {
|
|
3249
|
+
if (!recordings) {
|
|
3250
|
+
return [];
|
|
3251
|
+
}
|
|
3194
3252
|
return recordings.map(item => Recording.parse(item));
|
|
3195
3253
|
}
|
|
3196
3254
|
|
|
@@ -3292,6 +3350,10 @@ class CallLog {
|
|
|
3292
3350
|
}
|
|
3293
3351
|
|
|
3294
3352
|
static parseMany(plain ) {
|
|
3353
|
+
if (!plain || !plain.items) {
|
|
3354
|
+
return [];
|
|
3355
|
+
}
|
|
3356
|
+
|
|
3295
3357
|
return plain.items.map(item => CallLog.parse(item));
|
|
3296
3358
|
}
|
|
3297
3359
|
|
|
@@ -3864,6 +3926,9 @@ class ChatRoom {
|
|
|
3864
3926
|
|
|
3865
3927
|
|
|
3866
3928
|
static parseMany(plain ) {
|
|
3929
|
+
if (!plain || !plain.items) {
|
|
3930
|
+
return [];
|
|
3931
|
+
}
|
|
3867
3932
|
return plain.items.map(item => ChatRoom.parse(item));
|
|
3868
3933
|
}
|
|
3869
3934
|
|
|
@@ -148,6 +148,7 @@ class IssueReporter {
|
|
|
148
148
|
|
|
149
149
|
|
|
150
150
|
|
|
151
|
+
|
|
151
152
|
|
|
152
153
|
constructor() {
|
|
153
154
|
addLevelsTo(this);
|
|
@@ -159,12 +160,17 @@ class IssueReporter {
|
|
|
159
160
|
this.bufferTimeout = null;
|
|
160
161
|
this._boundProcessBuffer = this._processBuffer.bind(this);
|
|
161
162
|
this._boundParseLoggerBody = this._parseLoggerBody.bind(this);
|
|
163
|
+
this._callback = null;
|
|
162
164
|
}
|
|
163
165
|
|
|
164
166
|
init() {
|
|
165
167
|
this._catchConsole();
|
|
166
168
|
}
|
|
167
169
|
|
|
170
|
+
setCallback(cb ) {
|
|
171
|
+
this._callback = cb;
|
|
172
|
+
}
|
|
173
|
+
|
|
168
174
|
configureRemoteClient(configuration = { tag: 'wazo-sdk', host: null, port: null, level: null, extra: {} }) {
|
|
169
175
|
this.remoteClientConfiguration = configuration;
|
|
170
176
|
}
|
|
@@ -200,6 +206,7 @@ class IssueReporter {
|
|
|
200
206
|
|
|
201
207
|
// Handle category label
|
|
202
208
|
let category = null;
|
|
209
|
+
let skipSendToRemote = false;
|
|
203
210
|
let extra = {};
|
|
204
211
|
if (args[0].indexOf(CATEGORY_PREFIX) === 0) {
|
|
205
212
|
category = args[0].split('=')[1];
|
|
@@ -215,6 +222,7 @@ class IssueReporter {
|
|
|
215
222
|
errorMessage: lastArg.message,
|
|
216
223
|
errorStack: lastArg.stack,
|
|
217
224
|
errorType: lastArg.constructor.name,
|
|
225
|
+
skipSendToRemote: lastArg.skipSendToRemote,
|
|
218
226
|
};
|
|
219
227
|
} else {
|
|
220
228
|
extra = lastArg;
|
|
@@ -223,6 +231,11 @@ class IssueReporter {
|
|
|
223
231
|
args.splice(1, 1);
|
|
224
232
|
}
|
|
225
233
|
|
|
234
|
+
if (extra.skipSendToRemote) {
|
|
235
|
+
skipSendToRemote = true;
|
|
236
|
+
delete extra.skipSendToRemote;
|
|
237
|
+
}
|
|
238
|
+
|
|
226
239
|
const date = moment().format('YYYY-MM-DD HH:mm:ss.SSS');
|
|
227
240
|
const message = args.join(', ');
|
|
228
241
|
let consoleMessage = message;
|
|
@@ -243,7 +256,13 @@ class IssueReporter {
|
|
|
243
256
|
const oldMethod = this.oldConsoleMethods[consoleLevel] || this.oldConsoleMethods.log;
|
|
244
257
|
oldMethod.apply(oldMethod, [date, consoleMessage]);
|
|
245
258
|
|
|
246
|
-
this.
|
|
259
|
+
if (this._callback) {
|
|
260
|
+
this._callback(level, consoleMessage);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
if (!skipSendToRemote) {
|
|
264
|
+
this._sendToRemoteLogger(level, { date, message, category, ...extra });
|
|
265
|
+
}
|
|
247
266
|
}
|
|
248
267
|
|
|
249
268
|
logRequest(url , options , response , start ) {
|
|
@@ -388,7 +407,11 @@ class IssueReporter {
|
|
|
388
407
|
},
|
|
389
408
|
// $FlowFixMe
|
|
390
409
|
body,
|
|
391
|
-
}).catch(() => {
|
|
410
|
+
}).catch((e ) => {
|
|
411
|
+
// $FlowFixMe
|
|
412
|
+
e.skipSendToRemote = true;
|
|
413
|
+
this.log('error', this._makeCategory('grafana'), 'Sending log to grafana, error', e);
|
|
414
|
+
|
|
392
415
|
setTimeout(() => {
|
|
393
416
|
if (isArray) {
|
|
394
417
|
payload = payload.map(message => {
|
|
@@ -1526,6 +1549,9 @@ class Contact {
|
|
|
1526
1549
|
}
|
|
1527
1550
|
|
|
1528
1551
|
static parseMany(response ) {
|
|
1552
|
+
if (!response || !response.results) {
|
|
1553
|
+
return [];
|
|
1554
|
+
}
|
|
1529
1555
|
return response.results.map(r => Contact.parse(r, response.column_types));
|
|
1530
1556
|
}
|
|
1531
1557
|
|
|
@@ -2632,11 +2658,27 @@ class Meeting {
|
|
|
2632
2658
|
});
|
|
2633
2659
|
}
|
|
2634
2660
|
|
|
2661
|
+
static parseMany(items ) {
|
|
2662
|
+
if (!items) {
|
|
2663
|
+
return [];
|
|
2664
|
+
}
|
|
2665
|
+
return items.map(plain => Meeting.parse(plain));
|
|
2666
|
+
}
|
|
2667
|
+
|
|
2635
2668
|
static newFrom(meeting ) {
|
|
2636
2669
|
return newFrom(meeting, Meeting);
|
|
2637
2670
|
}
|
|
2638
2671
|
|
|
2639
|
-
constructor({
|
|
2672
|
+
constructor({
|
|
2673
|
+
uuid,
|
|
2674
|
+
name,
|
|
2675
|
+
guestSipAuthorization,
|
|
2676
|
+
ownerUuids,
|
|
2677
|
+
port,
|
|
2678
|
+
uri,
|
|
2679
|
+
number,
|
|
2680
|
+
persistent,
|
|
2681
|
+
} = {}) {
|
|
2640
2682
|
this.guestSipAuthorization = guestSipAuthorization;
|
|
2641
2683
|
this.uri = uri;
|
|
2642
2684
|
this.name = name;
|
|
@@ -2722,8 +2764,11 @@ var confdMethods = (client , baseUrl ) => ({
|
|
|
2722
2764
|
}
|
|
2723
2765
|
},
|
|
2724
2766
|
|
|
2725
|
-
|
|
2726
|
-
client.
|
|
2767
|
+
getMyMeetings: () =>
|
|
2768
|
+
client.get(`${baseUrl}/users/me/meetings`).then(response => Meeting.parseMany(response.items)),
|
|
2769
|
+
|
|
2770
|
+
createMyMeeting: (name , persistent ) =>
|
|
2771
|
+
client.post(`${baseUrl}/users/me/meetings`, { name, persistent }).then(Meeting.parse),
|
|
2727
2772
|
|
|
2728
2773
|
deleteMyMeeting: (meetingUuid ) =>
|
|
2729
2774
|
client.delete(`${baseUrl}/users/me/meetings/${meetingUuid}`, null),
|
|
@@ -2819,6 +2864,10 @@ class ChatMessage {
|
|
|
2819
2864
|
|
|
2820
2865
|
|
|
2821
2866
|
static parseMany(plain ) {
|
|
2867
|
+
if (!plain || !plain.items) {
|
|
2868
|
+
return [];
|
|
2869
|
+
}
|
|
2870
|
+
|
|
2822
2871
|
return plain.items.map(item => ChatMessage.parse(item));
|
|
2823
2872
|
}
|
|
2824
2873
|
|
|
@@ -2928,6 +2977,9 @@ class Voicemail {
|
|
|
2928
2977
|
}
|
|
2929
2978
|
|
|
2930
2979
|
static parseMany(plain ) {
|
|
2980
|
+
if (!plain) {
|
|
2981
|
+
return [];
|
|
2982
|
+
}
|
|
2931
2983
|
const plainUnread = plain.folders.filter(folder => folder.type === 'new')[0].messages;
|
|
2932
2984
|
const plainRead = plain.folders.filter(folder => folder.type === 'old')[0].messages;
|
|
2933
2985
|
|
|
@@ -3037,6 +3089,9 @@ class Call {
|
|
|
3037
3089
|
|
|
3038
3090
|
|
|
3039
3091
|
static parseMany(plain ) {
|
|
3092
|
+
if (!plain) {
|
|
3093
|
+
return [];
|
|
3094
|
+
}
|
|
3040
3095
|
return plain.map((plainCall ) => Call.parse(plainCall));
|
|
3041
3096
|
}
|
|
3042
3097
|
|
|
@@ -3235,6 +3290,9 @@ class Recording {
|
|
|
3235
3290
|
|
|
3236
3291
|
|
|
3237
3292
|
static parseMany(recordings = []) {
|
|
3293
|
+
if (!recordings) {
|
|
3294
|
+
return [];
|
|
3295
|
+
}
|
|
3238
3296
|
return recordings.map(item => Recording.parse(item));
|
|
3239
3297
|
}
|
|
3240
3298
|
|
|
@@ -3336,6 +3394,10 @@ class CallLog {
|
|
|
3336
3394
|
}
|
|
3337
3395
|
|
|
3338
3396
|
static parseMany(plain ) {
|
|
3397
|
+
if (!plain || !plain.items) {
|
|
3398
|
+
return [];
|
|
3399
|
+
}
|
|
3400
|
+
|
|
3339
3401
|
return plain.items.map(item => CallLog.parse(item));
|
|
3340
3402
|
}
|
|
3341
3403
|
|
|
@@ -3908,6 +3970,9 @@ class ChatRoom {
|
|
|
3908
3970
|
|
|
3909
3971
|
|
|
3910
3972
|
static parseMany(plain ) {
|
|
3973
|
+
if (!plain || !plain.items) {
|
|
3974
|
+
return [];
|
|
3975
|
+
}
|
|
3911
3976
|
return plain.items.map(item => ChatRoom.parse(item));
|
|
3912
3977
|
}
|
|
3913
3978
|
|
|
@@ -4903,6 +4968,7 @@ const AGENT_PAUSED = 'agent_paused';
|
|
|
4903
4968
|
const AGENT_UNPAUSED = 'agent_unpaused';
|
|
4904
4969
|
const CONFERENCE_ADHOC_PARTICIPANT_LEFT = 'conference_adhoc_participant_left';
|
|
4905
4970
|
const CONFERENCE_ADHOC_DELETED = 'conference_adhoc_deleted';
|
|
4971
|
+
const MEETING_USER_PROGRESS = 'meeting_user_progress';
|
|
4906
4972
|
|
|
4907
4973
|
const BLACKLIST_EVENTS = [
|
|
4908
4974
|
CHAT_MESSAGE_SENT,
|
|
@@ -5253,6 +5319,7 @@ WebSocketClient.eventLists = [
|
|
|
5253
5319
|
AGENT_UNPAUSED,
|
|
5254
5320
|
CONFERENCE_ADHOC_PARTICIPANT_LEFT,
|
|
5255
5321
|
CONFERENCE_ADHOC_DELETED,
|
|
5322
|
+
MEETING_USER_PROGRESS,
|
|
5256
5323
|
];
|
|
5257
5324
|
|
|
5258
5325
|
var wazoWebsocket = {
|
|
@@ -5308,10 +5375,6 @@ const getSrflxOrRelay = (candidates ) =>
|
|
|
5308
5375
|
candidates
|
|
5309
5376
|
.filter(candidate => candidate && (candidate.type === 'srflx' || candidate.type === 'relay'));
|
|
5310
5377
|
|
|
5311
|
-
const areCandidateValid = (candidates ) =>
|
|
5312
|
-
getSrflxOrRelay(candidates)
|
|
5313
|
-
.length > 0;
|
|
5314
|
-
|
|
5315
5378
|
const getVideoDirection = (sdp ) => {
|
|
5316
5379
|
const parsedSdp = sdpParser.parse(sdp);
|
|
5317
5380
|
const videoMedia = parsedSdp.media.find(media => media.type === 'video');
|
|
@@ -5364,8 +5427,6 @@ const fixSdp = (sdp , candidates , forcePort = true)
|
|
|
5364
5427
|
/* global RTCSessionDescriptionInit, navigator */
|
|
5365
5428
|
|
|
5366
5429
|
const wazoLogger = IssueReporter$1 ? IssueReporter$1.loggerFor('webrtc-sdh') : console;
|
|
5367
|
-
const MAX_WAIT_FOR_ICE_TRIES = 20;
|
|
5368
|
-
const WAIT_FOR_ICE_TIMEOUT = 500;
|
|
5369
5430
|
|
|
5370
5431
|
// Customized mediaStreamFactory allowing to send screensharing stream directory when upgrading
|
|
5371
5432
|
const wazoMediaStreamFactory = (constraints ) => {
|
|
@@ -5555,38 +5616,6 @@ class WazoSessionDescriptionHandler extends SessionDescriptionHandler {
|
|
|
5555
5616
|
this._peerConnection = undefined;
|
|
5556
5617
|
}
|
|
5557
5618
|
|
|
5558
|
-
async _waitForValidGatheredIce() {
|
|
5559
|
-
let tries = 0;
|
|
5560
|
-
|
|
5561
|
-
while (!areCandidateValid(this.gatheredCandidates) && tries < MAX_WAIT_FOR_ICE_TRIES) {
|
|
5562
|
-
wazoLogger.trace('SessionDescriptionHandler._waitForValidGatheredIce, waiting for ice', {
|
|
5563
|
-
tries,
|
|
5564
|
-
max: MAX_WAIT_FOR_ICE_TRIES,
|
|
5565
|
-
});
|
|
5566
|
-
|
|
5567
|
-
tries++;
|
|
5568
|
-
|
|
5569
|
-
// eslint-disable-next-line no-await-in-loop
|
|
5570
|
-
await new Promise(resolve => setTimeout(resolve, WAIT_FOR_ICE_TIMEOUT));
|
|
5571
|
-
}
|
|
5572
|
-
|
|
5573
|
-
if (tries >= MAX_WAIT_FOR_ICE_TRIES) {
|
|
5574
|
-
const errorMsg = 'No valid candidates found, can\'t answer the call';
|
|
5575
|
-
const error = new Error(errorMsg);
|
|
5576
|
-
wazoLogger.error(errorMsg, { tries, max: MAX_WAIT_FOR_ICE_TRIES });
|
|
5577
|
-
|
|
5578
|
-
// Emit an error, because sip.js catches the exception and switch to status Terminated.
|
|
5579
|
-
this.eventEmitter.emit('error', error);
|
|
5580
|
-
|
|
5581
|
-
wazoLogger.error('No valid candidates found', { tries, candidates: JSON.stringify(this.gatheredCandidates) });
|
|
5582
|
-
}
|
|
5583
|
-
|
|
5584
|
-
// eslint-disable-next-line
|
|
5585
|
-
wazoLogger.trace('Found valid candidates', { tries, candidates: JSON.stringify(this.gatheredCandidates) });
|
|
5586
|
-
|
|
5587
|
-
return this.getLocalSessionDescription();
|
|
5588
|
-
}
|
|
5589
|
-
|
|
5590
5619
|
// Overridden to send `inactive` in conference
|
|
5591
5620
|
updateDirection(options , isConference = false,
|
|
5592
5621
|
audioOnly = false) {
|
|
@@ -6281,7 +6310,9 @@ class WebRTCClient extends Emitter {
|
|
|
6281
6310
|
const inviteOptions = {
|
|
6282
6311
|
requestDelegate: {
|
|
6283
6312
|
onAccept: (response ) => {
|
|
6284
|
-
session.sessionDescriptionHandler.peerConnection
|
|
6313
|
+
if (session.sessionDescriptionHandler.peerConnection) {
|
|
6314
|
+
session.sessionDescriptionHandler.peerConnection.sfu = conference;
|
|
6315
|
+
}
|
|
6285
6316
|
this._onAccepted(session, response.session, true);
|
|
6286
6317
|
},
|
|
6287
6318
|
onReject: (response ) => {
|
|
@@ -7153,6 +7184,16 @@ class WebRTCClient extends Emitter {
|
|
|
7153
7184
|
return this.hasRemoteVideo(sessionId) ? this.getRemoteStream(sessionId) : null;
|
|
7154
7185
|
}
|
|
7155
7186
|
|
|
7187
|
+
// Useful in a react-native environment when remoteMediaStream is not updated
|
|
7188
|
+
getRemoteVideoStreamFromPc(sessionId ) {
|
|
7189
|
+
const pc = this.getPeerConnection(sessionId);
|
|
7190
|
+
if (!pc) {
|
|
7191
|
+
return null;
|
|
7192
|
+
}
|
|
7193
|
+
|
|
7194
|
+
return pc.getRemoteStreams().find(stream => !!stream.getVideoTracks().length);
|
|
7195
|
+
}
|
|
7196
|
+
|
|
7156
7197
|
hasVideo(sessionId ) {
|
|
7157
7198
|
return this.hasLocalVideo(sessionId) || this.hasRemoteVideo(sessionId);
|
|
7158
7199
|
}
|
|
@@ -7663,6 +7704,7 @@ class WebRTCClient extends Emitter {
|
|
|
7663
7704
|
session.sessionDescriptionHandler.remoteMediaStream.onaddtrack = onTrack;
|
|
7664
7705
|
|
|
7665
7706
|
pc.oniceconnectionstatechange = () => {
|
|
7707
|
+
logger.info('on ice connection state changed', { state: pc.iceConnectionState });
|
|
7666
7708
|
if (pc.iceConnectionState === 'disconnected') {
|
|
7667
7709
|
this.eventEmitter.emit(ON_DISCONNECTED);
|
|
7668
7710
|
}
|
|
@@ -7891,25 +7933,25 @@ class WebRTCClient extends Emitter {
|
|
|
7891
7933
|
|
|
7892
7934
|
stats.forEach(report => {
|
|
7893
7935
|
if (report.type === 'outbound-rtp' && report.kind === 'audio') {
|
|
7894
|
-
audioBytesSent += report.bytesSent + report.headerBytesSent;
|
|
7936
|
+
audioBytesSent += Number(report.bytesSent) + Number(report.headerBytesSent);
|
|
7895
7937
|
}
|
|
7896
7938
|
if (report.type === 'remote-outbound-rtp' && report.kind === 'audio') {
|
|
7897
|
-
audioBytesSent += report.bytesSent;
|
|
7939
|
+
audioBytesSent += Number(report.bytesSent);
|
|
7898
7940
|
}
|
|
7899
7941
|
if (report.type === 'outbound-rtp' && report.kind === 'video') {
|
|
7900
|
-
videoBytesSent += report.bytesSent + report.headerBytesSent;
|
|
7942
|
+
videoBytesSent += Number(report.bytesSent) + Number(report.headerBytesSent);
|
|
7901
7943
|
}
|
|
7902
7944
|
if (report.type === 'inbound-rtp' && report.kind === 'audio') {
|
|
7903
|
-
packetsLost += report.packetsLost;
|
|
7904
|
-
networkStats.packetsReceived = report.packetsReceived;
|
|
7905
|
-
audioBytesReceived += report.bytesReceived + report.headerBytesReceived;
|
|
7945
|
+
packetsLost += Number(report.packetsLost);
|
|
7946
|
+
networkStats.packetsReceived = Number(report.packetsReceived);
|
|
7947
|
+
audioBytesReceived += Number(report.bytesReceived) + Number(report.headerBytesReceived);
|
|
7906
7948
|
}
|
|
7907
7949
|
if (report.type === 'inbound-rtp' && report.kind === 'video') {
|
|
7908
|
-
videoBytesReceived += report.bytesReceived + report.headerBytesReceived;
|
|
7950
|
+
videoBytesReceived += Number(report.bytesReceived) + Number(report.headerBytesReceived);
|
|
7909
7951
|
}
|
|
7910
7952
|
if (report.type === 'outbound-rtp' && report.kind === 'video') {
|
|
7911
7953
|
if ('framesPerSecond' in report) {
|
|
7912
|
-
networkStats.framesPerSecond = report.framesPerSecond;
|
|
7954
|
+
networkStats.framesPerSecond = Number(report.framesPerSecond);
|
|
7913
7955
|
}
|
|
7914
7956
|
if ('framerateMean' in report) {
|
|
7915
7957
|
// framerateMean is only available in FF
|
|
@@ -7917,32 +7959,36 @@ class WebRTCClient extends Emitter {
|
|
|
7917
7959
|
}
|
|
7918
7960
|
}
|
|
7919
7961
|
if (report.type === 'remote-inbound-rtp' && report.kind === 'audio') {
|
|
7920
|
-
packetsLost += report.packetsLost;
|
|
7921
|
-
networkStats.roundTripTime = report.roundTripTime;
|
|
7922
|
-
networkStats.jitter = report.jitter;
|
|
7962
|
+
packetsLost += Number(report.packetsLost);
|
|
7963
|
+
networkStats.roundTripTime = Number(report.roundTripTime);
|
|
7964
|
+
networkStats.jitter = Number(report.jitter);
|
|
7923
7965
|
}
|
|
7924
7966
|
if (report.type === 'remote-inbound-rtp' && report.kind === 'video') {
|
|
7925
|
-
packetsLost += report.packetsLost;
|
|
7967
|
+
packetsLost += Number(report.packetsLost);
|
|
7926
7968
|
}
|
|
7927
7969
|
if (report.type === 'transport') {
|
|
7928
|
-
transportSent += report.bytesSent;
|
|
7929
|
-
transportReceived += report.bytesReceived;
|
|
7970
|
+
transportSent += Number(report.bytesSent);
|
|
7971
|
+
transportReceived += Number(report.bytesReceived);
|
|
7930
7972
|
}
|
|
7931
7973
|
});
|
|
7932
7974
|
|
|
7933
7975
|
networkStats.packetsLost = packetsLost;
|
|
7934
|
-
networkStats.
|
|
7976
|
+
networkStats.totalAudioBytesSent = audioBytesSent;
|
|
7977
|
+
networkStats.audioBytesSent = audioBytesSent - lastAudioSent;
|
|
7978
|
+
networkStats.totalAudioBytesReceived = audioBytesReceived - lastAudioReceived;
|
|
7935
7979
|
networkStats.audioBytesReceived = audioBytesReceived;
|
|
7936
|
-
networkStats.
|
|
7937
|
-
networkStats.
|
|
7980
|
+
networkStats.totalVideoBytesSent = videoBytesSent;
|
|
7981
|
+
networkStats.videoBytesSent = videoBytesSent - lastVideoSent;
|
|
7982
|
+
networkStats.totalVideoBytesReceived = videoBytesReceived;
|
|
7983
|
+
networkStats.videoBytesReceived = videoBytesReceived - lastVideoReceived;
|
|
7984
|
+
networkStats.totalTransportSent = transportSent - lastTransportSent;
|
|
7938
7985
|
networkStats.transportSent = transportSent;
|
|
7939
|
-
networkStats.
|
|
7940
|
-
|
|
7941
|
-
const bandwidth = (networkStats.audioBytesSent - lastAudioSent) + (networkStats.videoBytesSent - lastVideoSent)
|
|
7942
|
-
+ (networkStats.audioBytesReceived - lastAudioReceived) + (networkStats.videoBytesReceived - lastVideoReceived)
|
|
7943
|
-
+ (networkStats.transportReceived - lastTransportReceived) + (networkStats.transportSent - lastTransportSent);
|
|
7986
|
+
networkStats.totalTransportReceived = transportReceived;
|
|
7987
|
+
networkStats.transportReceived = transportReceived - lastTransportReceived;
|
|
7944
7988
|
|
|
7945
|
-
networkStats.bandwidth =
|
|
7989
|
+
networkStats.bandwidth = networkStats.audioBytesSent + networkStats.audioBytesReceived
|
|
7990
|
+
+ networkStats.videoBytesSent + networkStats.videoBytesReceived + networkStats.transportReceived
|
|
7991
|
+
+ networkStats.transportSent;
|
|
7946
7992
|
|
|
7947
7993
|
this.eventEmitter.emit(ON_NETWORK_STATS, session, networkStats, this.sessionNetworkStats[sessionId]);
|
|
7948
7994
|
this.sessionNetworkStats[sessionId].push(networkStats);
|
|
@@ -121,6 +121,7 @@ class IssueReporter {
|
|
|
121
121
|
|
|
122
122
|
|
|
123
123
|
|
|
124
|
+
|
|
124
125
|
|
|
125
126
|
constructor() {
|
|
126
127
|
addLevelsTo(this);
|
|
@@ -132,12 +133,17 @@ class IssueReporter {
|
|
|
132
133
|
this.bufferTimeout = null;
|
|
133
134
|
this._boundProcessBuffer = this._processBuffer.bind(this);
|
|
134
135
|
this._boundParseLoggerBody = this._parseLoggerBody.bind(this);
|
|
136
|
+
this._callback = null;
|
|
135
137
|
}
|
|
136
138
|
|
|
137
139
|
init() {
|
|
138
140
|
this._catchConsole();
|
|
139
141
|
}
|
|
140
142
|
|
|
143
|
+
setCallback(cb ) {
|
|
144
|
+
this._callback = cb;
|
|
145
|
+
}
|
|
146
|
+
|
|
141
147
|
configureRemoteClient(configuration = { tag: 'wazo-sdk', host: null, port: null, level: null, extra: {} }) {
|
|
142
148
|
this.remoteClientConfiguration = configuration;
|
|
143
149
|
}
|
|
@@ -173,6 +179,7 @@ class IssueReporter {
|
|
|
173
179
|
|
|
174
180
|
// Handle category label
|
|
175
181
|
let category = null;
|
|
182
|
+
let skipSendToRemote = false;
|
|
176
183
|
let extra = {};
|
|
177
184
|
if (args[0].indexOf(CATEGORY_PREFIX) === 0) {
|
|
178
185
|
category = args[0].split('=')[1];
|
|
@@ -188,6 +195,7 @@ class IssueReporter {
|
|
|
188
195
|
errorMessage: lastArg.message,
|
|
189
196
|
errorStack: lastArg.stack,
|
|
190
197
|
errorType: lastArg.constructor.name,
|
|
198
|
+
skipSendToRemote: lastArg.skipSendToRemote,
|
|
191
199
|
};
|
|
192
200
|
} else {
|
|
193
201
|
extra = lastArg;
|
|
@@ -196,6 +204,11 @@ class IssueReporter {
|
|
|
196
204
|
args.splice(1, 1);
|
|
197
205
|
}
|
|
198
206
|
|
|
207
|
+
if (extra.skipSendToRemote) {
|
|
208
|
+
skipSendToRemote = true;
|
|
209
|
+
delete extra.skipSendToRemote;
|
|
210
|
+
}
|
|
211
|
+
|
|
199
212
|
const date = moment().format('YYYY-MM-DD HH:mm:ss.SSS');
|
|
200
213
|
const message = args.join(', ');
|
|
201
214
|
let consoleMessage = message;
|
|
@@ -216,7 +229,13 @@ class IssueReporter {
|
|
|
216
229
|
const oldMethod = this.oldConsoleMethods[consoleLevel] || this.oldConsoleMethods.log;
|
|
217
230
|
oldMethod.apply(oldMethod, [date, consoleMessage]);
|
|
218
231
|
|
|
219
|
-
this.
|
|
232
|
+
if (this._callback) {
|
|
233
|
+
this._callback(level, consoleMessage);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
if (!skipSendToRemote) {
|
|
237
|
+
this._sendToRemoteLogger(level, { date, message, category, ...extra });
|
|
238
|
+
}
|
|
220
239
|
}
|
|
221
240
|
|
|
222
241
|
logRequest(url , options , response , start ) {
|
|
@@ -361,7 +380,11 @@ class IssueReporter {
|
|
|
361
380
|
},
|
|
362
381
|
// $FlowFixMe
|
|
363
382
|
body,
|
|
364
|
-
}).catch(() => {
|
|
383
|
+
}).catch((e ) => {
|
|
384
|
+
// $FlowFixMe
|
|
385
|
+
e.skipSendToRemote = true;
|
|
386
|
+
this.log('error', this._makeCategory('grafana'), 'Sending log to grafana, error', e);
|
|
387
|
+
|
|
365
388
|
setTimeout(() => {
|
|
366
389
|
if (isArray) {
|
|
367
390
|
payload = payload.map(message => {
|
|
@@ -578,6 +601,7 @@ const AGENT_PAUSED = 'agent_paused';
|
|
|
578
601
|
const AGENT_UNPAUSED = 'agent_unpaused';
|
|
579
602
|
const CONFERENCE_ADHOC_PARTICIPANT_LEFT = 'conference_adhoc_participant_left';
|
|
580
603
|
const CONFERENCE_ADHOC_DELETED = 'conference_adhoc_deleted';
|
|
604
|
+
const MEETING_USER_PROGRESS = 'meeting_user_progress';
|
|
581
605
|
|
|
582
606
|
const BLACKLIST_EVENTS = [
|
|
583
607
|
CHAT_MESSAGE_SENT,
|
|
@@ -928,6 +952,7 @@ WebSocketClient.eventLists = [
|
|
|
928
952
|
AGENT_UNPAUSED,
|
|
929
953
|
CONFERENCE_ADHOC_PARTICIPANT_LEFT,
|
|
930
954
|
CONFERENCE_ADHOC_DELETED,
|
|
955
|
+
MEETING_USER_PROGRESS,
|
|
931
956
|
];
|
|
932
957
|
|
|
933
958
|
var wazoWebsocket = {
|