@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/checker/Checker.js
CHANGED
|
@@ -158,6 +158,7 @@ class IssueReporter {
|
|
|
158
158
|
|
|
159
159
|
|
|
160
160
|
|
|
161
|
+
|
|
161
162
|
|
|
162
163
|
constructor() {
|
|
163
164
|
addLevelsTo(this);
|
|
@@ -169,12 +170,17 @@ class IssueReporter {
|
|
|
169
170
|
this.bufferTimeout = null;
|
|
170
171
|
this._boundProcessBuffer = this._processBuffer.bind(this);
|
|
171
172
|
this._boundParseLoggerBody = this._parseLoggerBody.bind(this);
|
|
173
|
+
this._callback = null;
|
|
172
174
|
}
|
|
173
175
|
|
|
174
176
|
init() {
|
|
175
177
|
this._catchConsole();
|
|
176
178
|
}
|
|
177
179
|
|
|
180
|
+
setCallback(cb ) {
|
|
181
|
+
this._callback = cb;
|
|
182
|
+
}
|
|
183
|
+
|
|
178
184
|
configureRemoteClient(configuration = { tag: 'wazo-sdk', host: null, port: null, level: null, extra: {} }) {
|
|
179
185
|
this.remoteClientConfiguration = configuration;
|
|
180
186
|
}
|
|
@@ -210,6 +216,7 @@ class IssueReporter {
|
|
|
210
216
|
|
|
211
217
|
// Handle category label
|
|
212
218
|
let category = null;
|
|
219
|
+
let skipSendToRemote = false;
|
|
213
220
|
let extra = {};
|
|
214
221
|
if (args[0].indexOf(CATEGORY_PREFIX) === 0) {
|
|
215
222
|
category = args[0].split('=')[1];
|
|
@@ -225,6 +232,7 @@ class IssueReporter {
|
|
|
225
232
|
errorMessage: lastArg.message,
|
|
226
233
|
errorStack: lastArg.stack,
|
|
227
234
|
errorType: lastArg.constructor.name,
|
|
235
|
+
skipSendToRemote: lastArg.skipSendToRemote,
|
|
228
236
|
};
|
|
229
237
|
} else {
|
|
230
238
|
extra = lastArg;
|
|
@@ -233,7 +241,12 @@ class IssueReporter {
|
|
|
233
241
|
args.splice(1, 1);
|
|
234
242
|
}
|
|
235
243
|
|
|
236
|
-
|
|
244
|
+
if (extra.skipSendToRemote) {
|
|
245
|
+
skipSendToRemote = true;
|
|
246
|
+
delete extra.skipSendToRemote;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
const date = moment__default['default']().format('YYYY-MM-DD HH:mm:ss.SSS');
|
|
237
250
|
const message = args.join(', ');
|
|
238
251
|
let consoleMessage = message;
|
|
239
252
|
|
|
@@ -253,7 +266,13 @@ class IssueReporter {
|
|
|
253
266
|
const oldMethod = this.oldConsoleMethods[consoleLevel] || this.oldConsoleMethods.log;
|
|
254
267
|
oldMethod.apply(oldMethod, [date, consoleMessage]);
|
|
255
268
|
|
|
256
|
-
this.
|
|
269
|
+
if (this._callback) {
|
|
270
|
+
this._callback(level, consoleMessage);
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
if (!skipSendToRemote) {
|
|
274
|
+
this._sendToRemoteLogger(level, { date, message, category, ...extra });
|
|
275
|
+
}
|
|
257
276
|
}
|
|
258
277
|
|
|
259
278
|
logRequest(url , options , response , start ) {
|
|
@@ -398,7 +417,11 @@ class IssueReporter {
|
|
|
398
417
|
},
|
|
399
418
|
// $FlowFixMe
|
|
400
419
|
body,
|
|
401
|
-
}).catch(() => {
|
|
420
|
+
}).catch((e ) => {
|
|
421
|
+
// $FlowFixMe
|
|
422
|
+
e.skipSendToRemote = true;
|
|
423
|
+
this.log('error', this._makeCategory('grafana'), 'Sending log to grafana, error', e);
|
|
424
|
+
|
|
402
425
|
setTimeout(() => {
|
|
403
426
|
if (isArray) {
|
|
404
427
|
payload = payload.map(message => {
|
|
@@ -410,7 +433,7 @@ class IssueReporter {
|
|
|
410
433
|
payload._retry = retry + 1;
|
|
411
434
|
}
|
|
412
435
|
|
|
413
|
-
this._sendDebugToGrafana(
|
|
436
|
+
this._sendDebugToGrafana(payload, retry + 1);
|
|
414
437
|
}, 5000 + retry * 1000);
|
|
415
438
|
});
|
|
416
439
|
}
|
|
@@ -2613,7 +2636,8 @@ class ExternalApp {
|
|
|
2613
2636
|
|
|
2614
2637
|
|
|
2615
2638
|
|
|
2616
|
-
|
|
2639
|
+
|
|
2640
|
+
|
|
2617
2641
|
|
|
2618
2642
|
|
|
2619
2643
|
class Meeting {
|
|
@@ -2625,6 +2649,7 @@ class Meeting {
|
|
|
2625
2649
|
|
|
2626
2650
|
|
|
2627
2651
|
|
|
2652
|
+
|
|
2628
2653
|
|
|
2629
2654
|
|
|
2630
2655
|
static parse(plain ) {
|
|
@@ -2636,14 +2661,28 @@ class Meeting {
|
|
|
2636
2661
|
port: plain.port,
|
|
2637
2662
|
uuid: plain.uuid,
|
|
2638
2663
|
number: plain.number,
|
|
2664
|
+
persistent: plain.persistent,
|
|
2639
2665
|
});
|
|
2640
2666
|
}
|
|
2641
2667
|
|
|
2668
|
+
static parseMany(items ) {
|
|
2669
|
+
return items.map(plain => Meeting.parse(plain));
|
|
2670
|
+
}
|
|
2671
|
+
|
|
2642
2672
|
static newFrom(meeting ) {
|
|
2643
2673
|
return newFrom(meeting, Meeting);
|
|
2644
2674
|
}
|
|
2645
2675
|
|
|
2646
|
-
constructor({
|
|
2676
|
+
constructor({
|
|
2677
|
+
uuid,
|
|
2678
|
+
name,
|
|
2679
|
+
guestSipAuthorization,
|
|
2680
|
+
ownerUuids,
|
|
2681
|
+
port,
|
|
2682
|
+
uri,
|
|
2683
|
+
number,
|
|
2684
|
+
persistent,
|
|
2685
|
+
} = {}) {
|
|
2647
2686
|
this.guestSipAuthorization = guestSipAuthorization;
|
|
2648
2687
|
this.uri = uri;
|
|
2649
2688
|
this.name = name;
|
|
@@ -2651,6 +2690,7 @@ class Meeting {
|
|
|
2651
2690
|
this.port = port;
|
|
2652
2691
|
this.uuid = uuid;
|
|
2653
2692
|
this.number = number;
|
|
2693
|
+
this.persistent = persistent;
|
|
2654
2694
|
|
|
2655
2695
|
// Useful to compare instead of instanceof with minified code
|
|
2656
2696
|
this.type = 'Meeting';
|
|
@@ -2728,8 +2768,11 @@ var confdMethods = (client , baseUrl ) => ({
|
|
|
2728
2768
|
}
|
|
2729
2769
|
},
|
|
2730
2770
|
|
|
2731
|
-
|
|
2732
|
-
client.
|
|
2771
|
+
getMyMeetings: () =>
|
|
2772
|
+
client.get(`${baseUrl}/users/me/meetings`).then(response => Meeting.parseMany(response.items)),
|
|
2773
|
+
|
|
2774
|
+
createMyMeeting: (name , persistent ) =>
|
|
2775
|
+
client.post(`${baseUrl}/users/me/meetings`, { name, persistent }).then(Meeting.parse),
|
|
2733
2776
|
|
|
2734
2777
|
deleteMyMeeting: (meetingUuid ) =>
|
|
2735
2778
|
client.delete(`${baseUrl}/users/me/meetings/${meetingUuid}`, null),
|
|
@@ -2831,7 +2874,7 @@ class ChatMessage {
|
|
|
2831
2874
|
static parse(plain ) {
|
|
2832
2875
|
return new ChatMessage({
|
|
2833
2876
|
uuid: plain.uuid,
|
|
2834
|
-
date: moment__default[
|
|
2877
|
+
date: moment__default['default'](plain.created_at).toDate(),
|
|
2835
2878
|
content: plain.content,
|
|
2836
2879
|
alias: plain.alias,
|
|
2837
2880
|
userUuid: plain.user_uuid,
|
|
@@ -2923,7 +2966,7 @@ class Voicemail {
|
|
|
2923
2966
|
static parse(plain ) {
|
|
2924
2967
|
return new Voicemail({
|
|
2925
2968
|
id: plain.id,
|
|
2926
|
-
date: moment__default[
|
|
2969
|
+
date: moment__default['default'](plain.timestamp * 1000).toDate(),
|
|
2927
2970
|
duration: plain.duration * 1000,
|
|
2928
2971
|
caller: {
|
|
2929
2972
|
name: plain.caller_id_name,
|
|
@@ -3060,7 +3103,7 @@ class Call {
|
|
|
3060
3103
|
onHold: plain.on_hold,
|
|
3061
3104
|
status: plain.status,
|
|
3062
3105
|
lineId: plain.line_id,
|
|
3063
|
-
startingTime: moment__default[
|
|
3106
|
+
startingTime: moment__default['default'](plain.creation_time).toDate(),
|
|
3064
3107
|
talkingToIds: Object.keys(plain.talking_to || {}),
|
|
3065
3108
|
recording: plain.record_state === RECORD_STATE_ACTIVE,
|
|
3066
3109
|
});
|
|
@@ -3195,7 +3238,7 @@ class Emitter {
|
|
|
3195
3238
|
|
|
3196
3239
|
|
|
3197
3240
|
constructor() {
|
|
3198
|
-
this.eventEmitter = new EventEmitter__default[
|
|
3241
|
+
this.eventEmitter = new EventEmitter__default['default']();
|
|
3199
3242
|
}
|
|
3200
3243
|
|
|
3201
3244
|
on(event , callback ) {
|
|
@@ -3240,7 +3283,7 @@ class Recording {
|
|
|
3240
3283
|
|
|
3241
3284
|
|
|
3242
3285
|
|
|
3243
|
-
static parseMany(recordings
|
|
3286
|
+
static parseMany(recordings = []) {
|
|
3244
3287
|
return recordings.map(item => Recording.parse(item));
|
|
3245
3288
|
}
|
|
3246
3289
|
|
|
@@ -3248,8 +3291,8 @@ class Recording {
|
|
|
3248
3291
|
return new Recording({
|
|
3249
3292
|
deleted: plain.deleted,
|
|
3250
3293
|
fileName: plain.filename,
|
|
3251
|
-
end: plain.end_time ? moment__default[
|
|
3252
|
-
start: moment__default[
|
|
3294
|
+
end: plain.end_time ? moment__default['default'](plain.end_time).toDate() : null,
|
|
3295
|
+
start: moment__default['default'](plain.start_time).toDate(),
|
|
3253
3296
|
uuid: plain.uuid,
|
|
3254
3297
|
});
|
|
3255
3298
|
}
|
|
@@ -3347,7 +3390,7 @@ class CallLog {
|
|
|
3347
3390
|
|
|
3348
3391
|
static parse(plain ) {
|
|
3349
3392
|
return new CallLog({
|
|
3350
|
-
answer: plain.answer ? moment__default[
|
|
3393
|
+
answer: plain.answer ? moment__default['default'](plain.answer).toDate() : null,
|
|
3351
3394
|
answered: plain.answered,
|
|
3352
3395
|
callDirection: plain.call_direction,
|
|
3353
3396
|
destination: {
|
|
@@ -3364,9 +3407,9 @@ class CallLog {
|
|
|
3364
3407
|
},
|
|
3365
3408
|
id: plain.id,
|
|
3366
3409
|
duration: (plain.duration || 0) * 1000, // duration is in seconds
|
|
3367
|
-
start: moment__default[
|
|
3368
|
-
end: plain.end ? moment__default[
|
|
3369
|
-
recordings: Recording.parseMany(plain.recordings),
|
|
3410
|
+
start: moment__default['default'](plain.start).toDate(),
|
|
3411
|
+
end: plain.end ? moment__default['default'](plain.end).toDate() : null,
|
|
3412
|
+
recordings: Recording.parseMany(plain.recordings || []),
|
|
3370
3413
|
});
|
|
3371
3414
|
}
|
|
3372
3415
|
|
|
@@ -4909,6 +4952,7 @@ const AGENT_PAUSED = 'agent_paused';
|
|
|
4909
4952
|
const AGENT_UNPAUSED = 'agent_unpaused';
|
|
4910
4953
|
const CONFERENCE_ADHOC_PARTICIPANT_LEFT = 'conference_adhoc_participant_left';
|
|
4911
4954
|
const CONFERENCE_ADHOC_DELETED = 'conference_adhoc_deleted';
|
|
4955
|
+
const MEETING_USER_PROGRESS = 'meeting_user_progress';
|
|
4912
4956
|
|
|
4913
4957
|
const BLACKLIST_EVENTS = [
|
|
4914
4958
|
CHAT_MESSAGE_SENT,
|
|
@@ -4968,7 +5012,7 @@ class WebSocketClient extends Emitter {
|
|
|
4968
5012
|
|
|
4969
5013
|
connect() {
|
|
4970
5014
|
logger$2.info('connect method started', { host: this.host, token: this.token });
|
|
4971
|
-
this.socket = new ReconnectingWebSocket__default[
|
|
5015
|
+
this.socket = new ReconnectingWebSocket__default['default'](this._getUrl.bind(this), [], this.options);
|
|
4972
5016
|
if (this.options.binaryType) {
|
|
4973
5017
|
this.socket.binaryType = this.options.binaryType;
|
|
4974
5018
|
}
|
|
@@ -5259,6 +5303,7 @@ WebSocketClient.eventLists = [
|
|
|
5259
5303
|
AGENT_UNPAUSED,
|
|
5260
5304
|
CONFERENCE_ADHOC_PARTICIPANT_LEFT,
|
|
5261
5305
|
CONFERENCE_ADHOC_DELETED,
|
|
5306
|
+
MEETING_USER_PROGRESS,
|
|
5262
5307
|
];
|
|
5263
5308
|
|
|
5264
5309
|
var wazoWebsocket = {
|
|
@@ -5305,7 +5350,7 @@ const parseCandidate$1 = (candidate ) => {
|
|
|
5305
5350
|
if (!candidate) {
|
|
5306
5351
|
return null;
|
|
5307
5352
|
}
|
|
5308
|
-
const result = sdpParser__default[
|
|
5353
|
+
const result = sdpParser__default['default'].parse(candidate.indexOf('a=') === 0 ? candidate : `a=${candidate}`);
|
|
5309
5354
|
|
|
5310
5355
|
return result.candidates ? result.candidates[0] : null;
|
|
5311
5356
|
};
|
|
@@ -5319,7 +5364,7 @@ const areCandidateValid = (candidates ) =>
|
|
|
5319
5364
|
.length > 0;
|
|
5320
5365
|
|
|
5321
5366
|
const getVideoDirection = (sdp ) => {
|
|
5322
|
-
const parsedSdp = sdpParser__default[
|
|
5367
|
+
const parsedSdp = sdpParser__default['default'].parse(sdp);
|
|
5323
5368
|
const videoMedia = parsedSdp.media.find(media => media.type === 'video');
|
|
5324
5369
|
if (!videoMedia) {
|
|
5325
5370
|
return null;
|
|
@@ -5333,14 +5378,14 @@ const hasAnActiveVideo = (sdp ) => {
|
|
|
5333
5378
|
return false;
|
|
5334
5379
|
}
|
|
5335
5380
|
|
|
5336
|
-
const parsedSdp = sdpParser__default[
|
|
5381
|
+
const parsedSdp = sdpParser__default['default'].parse(sdp);
|
|
5337
5382
|
|
|
5338
5383
|
return !!parsedSdp.media.find(media =>
|
|
5339
5384
|
media.type === 'video' && media.port > 10 && (!media.direction || media.direction !== 'inactive'));
|
|
5340
5385
|
};
|
|
5341
5386
|
|
|
5342
5387
|
const fixSdp = (sdp , candidates , forcePort = true) => {
|
|
5343
|
-
const parsedSdp = sdpParser__default[
|
|
5388
|
+
const parsedSdp = sdpParser__default['default'].parse(sdp);
|
|
5344
5389
|
const mainCandidate = getSrflxOrRelay(candidates)[0];
|
|
5345
5390
|
const ip = mainCandidate ? mainCandidate.ip : null;
|
|
5346
5391
|
|
|
@@ -5358,7 +5403,7 @@ const fixSdp = (sdp , candidates , forcePort = true)
|
|
|
5358
5403
|
};
|
|
5359
5404
|
});
|
|
5360
5405
|
|
|
5361
|
-
let fixed = sdpParser__default[
|
|
5406
|
+
let fixed = sdpParser__default['default'].write(parsedSdp);
|
|
5362
5407
|
|
|
5363
5408
|
if (ip) {
|
|
5364
5409
|
fixed = fixed.replace(/IN IP4 0.0.0.0/g, `IN IP4 ${ip}`);
|
|
@@ -5404,7 +5449,7 @@ class WazoSessionDescriptionHandler extends sessionDescriptionHandler.SessionDes
|
|
|
5404
5449
|
) {
|
|
5405
5450
|
super(logger, mediaStreamFactory, sessionDescriptionHandlerConfiguration);
|
|
5406
5451
|
|
|
5407
|
-
this.eventEmitter = new EventEmitter__default[
|
|
5452
|
+
this.eventEmitter = new EventEmitter__default['default']();
|
|
5408
5453
|
this.isWeb = isWeb;
|
|
5409
5454
|
this.session = session;
|
|
5410
5455
|
}
|
|
@@ -6287,7 +6332,9 @@ class WebRTCClient extends Emitter {
|
|
|
6287
6332
|
const inviteOptions = {
|
|
6288
6333
|
requestDelegate: {
|
|
6289
6334
|
onAccept: (response ) => {
|
|
6290
|
-
session.sessionDescriptionHandler.peerConnection
|
|
6335
|
+
if (session.sessionDescriptionHandler.peerConnection) {
|
|
6336
|
+
session.sessionDescriptionHandler.peerConnection.sfu = conference;
|
|
6337
|
+
}
|
|
6291
6338
|
this._onAccepted(session, response.session, true);
|
|
6292
6339
|
},
|
|
6293
6340
|
onReject: (response ) => {
|
|
@@ -6623,7 +6670,7 @@ class WebRTCClient extends Emitter {
|
|
|
6623
6670
|
// We search for the last transceiver without `video-` in the mid (video- means remote transceiver)
|
|
6624
6671
|
const transceivers = pc.getTransceivers();
|
|
6625
6672
|
const transceiverIdx = lastIndexOf(transceivers, transceiver =>
|
|
6626
|
-
transceiver.sender.track === null && transceiver.mid.indexOf('video') === -1);
|
|
6673
|
+
transceiver.sender.track === null && transceiver.mid && transceiver.mid.indexOf('video') === -1);
|
|
6627
6674
|
|
|
6628
6675
|
videoSender = transceiverIdx !== -1 ? transceivers[transceiverIdx].sender : null;
|
|
6629
6676
|
} else {
|
|
@@ -7159,6 +7206,16 @@ class WebRTCClient extends Emitter {
|
|
|
7159
7206
|
return this.hasRemoteVideo(sessionId) ? this.getRemoteStream(sessionId) : null;
|
|
7160
7207
|
}
|
|
7161
7208
|
|
|
7209
|
+
// Useful in a react-native environment when remoteMediaStream is not updated
|
|
7210
|
+
getRemoteVideoStreamFromPc(sessionId ) {
|
|
7211
|
+
const pc = this.getPeerConnection(sessionId);
|
|
7212
|
+
if (!pc) {
|
|
7213
|
+
return null;
|
|
7214
|
+
}
|
|
7215
|
+
|
|
7216
|
+
return pc.getRemoteStreams().find(stream => !!stream.getVideoTracks().length);
|
|
7217
|
+
}
|
|
7218
|
+
|
|
7162
7219
|
hasVideo(sessionId ) {
|
|
7163
7220
|
return this.hasLocalVideo(sessionId) || this.hasRemoteVideo(sessionId);
|
|
7164
7221
|
}
|
|
@@ -7669,6 +7726,7 @@ class WebRTCClient extends Emitter {
|
|
|
7669
7726
|
session.sessionDescriptionHandler.remoteMediaStream.onaddtrack = onTrack;
|
|
7670
7727
|
|
|
7671
7728
|
pc.oniceconnectionstatechange = () => {
|
|
7729
|
+
logger$1.info('on ice connection state changed', { state: pc.iceConnectionState });
|
|
7672
7730
|
if (pc.iceConnectionState === 'disconnected') {
|
|
7673
7731
|
this.eventEmitter.emit(ON_DISCONNECTED);
|
|
7674
7732
|
}
|
|
@@ -7828,7 +7886,7 @@ class WebRTCClient extends Emitter {
|
|
|
7828
7886
|
}
|
|
7829
7887
|
const sessionId = this.getSipSessionId(session);
|
|
7830
7888
|
|
|
7831
|
-
getStats__default[
|
|
7889
|
+
getStats__default['default'](pc, (result ) => {
|
|
7832
7890
|
const { results, internal, nomore, ...stats } = result;
|
|
7833
7891
|
this.statsIntervals[sessionId] = nomore;
|
|
7834
7892
|
|
|
@@ -7937,18 +7995,22 @@ class WebRTCClient extends Emitter {
|
|
|
7937
7995
|
});
|
|
7938
7996
|
|
|
7939
7997
|
networkStats.packetsLost = packetsLost;
|
|
7940
|
-
networkStats.
|
|
7998
|
+
networkStats.totalAudioBytesSent = audioBytesSent;
|
|
7999
|
+
networkStats.audioBytesSent = audioBytesSent - lastAudioSent;
|
|
8000
|
+
networkStats.totalAudioBytesReceived = audioBytesReceived - lastAudioReceived;
|
|
7941
8001
|
networkStats.audioBytesReceived = audioBytesReceived;
|
|
7942
|
-
networkStats.
|
|
7943
|
-
networkStats.
|
|
8002
|
+
networkStats.totalVideoBytesSent = videoBytesSent;
|
|
8003
|
+
networkStats.videoBytesSent = videoBytesSent - lastVideoSent;
|
|
8004
|
+
networkStats.totalVideoBytesReceived = videoBytesReceived;
|
|
8005
|
+
networkStats.videoBytesReceived = videoBytesReceived - lastVideoReceived;
|
|
8006
|
+
networkStats.totalTransportSent = transportSent - lastTransportSent;
|
|
7944
8007
|
networkStats.transportSent = transportSent;
|
|
7945
|
-
networkStats.
|
|
7946
|
-
|
|
7947
|
-
const bandwidth = (networkStats.audioBytesSent - lastAudioSent) + (networkStats.videoBytesSent - lastVideoSent)
|
|
7948
|
-
+ (networkStats.audioBytesReceived - lastAudioReceived) + (networkStats.videoBytesReceived - lastVideoReceived)
|
|
7949
|
-
+ (networkStats.transportReceived - lastTransportReceived) + (networkStats.transportSent - lastTransportSent);
|
|
8008
|
+
networkStats.totalTransportReceived = transportReceived;
|
|
8009
|
+
networkStats.transportReceived = transportReceived - lastTransportReceived;
|
|
7950
8010
|
|
|
7951
|
-
networkStats.bandwidth =
|
|
8011
|
+
networkStats.bandwidth = networkStats.audioBytesSent + networkStats.audioBytesReceived
|
|
8012
|
+
+ networkStats.videoBytesSent + networkStats.videoBytesReceived + networkStats.transportReceived
|
|
8013
|
+
+ networkStats.transportSent;
|
|
7952
8014
|
|
|
7953
8015
|
this.eventEmitter.emit(ON_NETWORK_STATS, session, networkStats, this.sessionNetworkStats[sessionId]);
|
|
7954
8016
|
this.sessionNetworkStats[sessionId].push(networkStats);
|
|
@@ -136,6 +136,7 @@ class IssueReporter {
|
|
|
136
136
|
|
|
137
137
|
|
|
138
138
|
|
|
139
|
+
|
|
139
140
|
|
|
140
141
|
constructor() {
|
|
141
142
|
addLevelsTo(this);
|
|
@@ -147,12 +148,17 @@ class IssueReporter {
|
|
|
147
148
|
this.bufferTimeout = null;
|
|
148
149
|
this._boundProcessBuffer = this._processBuffer.bind(this);
|
|
149
150
|
this._boundParseLoggerBody = this._parseLoggerBody.bind(this);
|
|
151
|
+
this._callback = null;
|
|
150
152
|
}
|
|
151
153
|
|
|
152
154
|
init() {
|
|
153
155
|
this._catchConsole();
|
|
154
156
|
}
|
|
155
157
|
|
|
158
|
+
setCallback(cb ) {
|
|
159
|
+
this._callback = cb;
|
|
160
|
+
}
|
|
161
|
+
|
|
156
162
|
configureRemoteClient(configuration = { tag: 'wazo-sdk', host: null, port: null, level: null, extra: {} }) {
|
|
157
163
|
this.remoteClientConfiguration = configuration;
|
|
158
164
|
}
|
|
@@ -188,6 +194,7 @@ class IssueReporter {
|
|
|
188
194
|
|
|
189
195
|
// Handle category label
|
|
190
196
|
let category = null;
|
|
197
|
+
let skipSendToRemote = false;
|
|
191
198
|
let extra = {};
|
|
192
199
|
if (args[0].indexOf(CATEGORY_PREFIX) === 0) {
|
|
193
200
|
category = args[0].split('=')[1];
|
|
@@ -203,6 +210,7 @@ class IssueReporter {
|
|
|
203
210
|
errorMessage: lastArg.message,
|
|
204
211
|
errorStack: lastArg.stack,
|
|
205
212
|
errorType: lastArg.constructor.name,
|
|
213
|
+
skipSendToRemote: lastArg.skipSendToRemote,
|
|
206
214
|
};
|
|
207
215
|
} else {
|
|
208
216
|
extra = lastArg;
|
|
@@ -211,7 +219,12 @@ class IssueReporter {
|
|
|
211
219
|
args.splice(1, 1);
|
|
212
220
|
}
|
|
213
221
|
|
|
214
|
-
|
|
222
|
+
if (extra.skipSendToRemote) {
|
|
223
|
+
skipSendToRemote = true;
|
|
224
|
+
delete extra.skipSendToRemote;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
const date = moment__default['default']().format('YYYY-MM-DD HH:mm:ss.SSS');
|
|
215
228
|
const message = args.join(', ');
|
|
216
229
|
let consoleMessage = message;
|
|
217
230
|
|
|
@@ -231,7 +244,13 @@ class IssueReporter {
|
|
|
231
244
|
const oldMethod = this.oldConsoleMethods[consoleLevel] || this.oldConsoleMethods.log;
|
|
232
245
|
oldMethod.apply(oldMethod, [date, consoleMessage]);
|
|
233
246
|
|
|
234
|
-
this.
|
|
247
|
+
if (this._callback) {
|
|
248
|
+
this._callback(level, consoleMessage);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
if (!skipSendToRemote) {
|
|
252
|
+
this._sendToRemoteLogger(level, { date, message, category, ...extra });
|
|
253
|
+
}
|
|
235
254
|
}
|
|
236
255
|
|
|
237
256
|
logRequest(url , options , response , start ) {
|
|
@@ -376,7 +395,11 @@ class IssueReporter {
|
|
|
376
395
|
},
|
|
377
396
|
// $FlowFixMe
|
|
378
397
|
body,
|
|
379
|
-
}).catch(() => {
|
|
398
|
+
}).catch((e ) => {
|
|
399
|
+
// $FlowFixMe
|
|
400
|
+
e.skipSendToRemote = true;
|
|
401
|
+
this.log('error', this._makeCategory('grafana'), 'Sending log to grafana, error', e);
|
|
402
|
+
|
|
380
403
|
setTimeout(() => {
|
|
381
404
|
if (isArray) {
|
|
382
405
|
payload = payload.map(message => {
|
|
@@ -388,7 +411,7 @@ class IssueReporter {
|
|
|
388
411
|
payload._retry = retry + 1;
|
|
389
412
|
}
|
|
390
413
|
|
|
391
|
-
this._sendDebugToGrafana(
|
|
414
|
+
this._sendDebugToGrafana(payload, retry + 1);
|
|
392
415
|
}, 5000 + retry * 1000);
|
|
393
416
|
});
|
|
394
417
|
}
|
|
@@ -2591,7 +2614,8 @@ class ExternalApp {
|
|
|
2591
2614
|
|
|
2592
2615
|
|
|
2593
2616
|
|
|
2594
|
-
|
|
2617
|
+
|
|
2618
|
+
|
|
2595
2619
|
|
|
2596
2620
|
|
|
2597
2621
|
class Meeting {
|
|
@@ -2603,6 +2627,7 @@ class Meeting {
|
|
|
2603
2627
|
|
|
2604
2628
|
|
|
2605
2629
|
|
|
2630
|
+
|
|
2606
2631
|
|
|
2607
2632
|
|
|
2608
2633
|
static parse(plain ) {
|
|
@@ -2614,14 +2639,28 @@ class Meeting {
|
|
|
2614
2639
|
port: plain.port,
|
|
2615
2640
|
uuid: plain.uuid,
|
|
2616
2641
|
number: plain.number,
|
|
2642
|
+
persistent: plain.persistent,
|
|
2617
2643
|
});
|
|
2618
2644
|
}
|
|
2619
2645
|
|
|
2646
|
+
static parseMany(items ) {
|
|
2647
|
+
return items.map(plain => Meeting.parse(plain));
|
|
2648
|
+
}
|
|
2649
|
+
|
|
2620
2650
|
static newFrom(meeting ) {
|
|
2621
2651
|
return newFrom(meeting, Meeting);
|
|
2622
2652
|
}
|
|
2623
2653
|
|
|
2624
|
-
constructor({
|
|
2654
|
+
constructor({
|
|
2655
|
+
uuid,
|
|
2656
|
+
name,
|
|
2657
|
+
guestSipAuthorization,
|
|
2658
|
+
ownerUuids,
|
|
2659
|
+
port,
|
|
2660
|
+
uri,
|
|
2661
|
+
number,
|
|
2662
|
+
persistent,
|
|
2663
|
+
} = {}) {
|
|
2625
2664
|
this.guestSipAuthorization = guestSipAuthorization;
|
|
2626
2665
|
this.uri = uri;
|
|
2627
2666
|
this.name = name;
|
|
@@ -2629,6 +2668,7 @@ class Meeting {
|
|
|
2629
2668
|
this.port = port;
|
|
2630
2669
|
this.uuid = uuid;
|
|
2631
2670
|
this.number = number;
|
|
2671
|
+
this.persistent = persistent;
|
|
2632
2672
|
|
|
2633
2673
|
// Useful to compare instead of instanceof with minified code
|
|
2634
2674
|
this.type = 'Meeting';
|
|
@@ -2706,8 +2746,11 @@ var confdMethods = (client , baseUrl ) => ({
|
|
|
2706
2746
|
}
|
|
2707
2747
|
},
|
|
2708
2748
|
|
|
2709
|
-
|
|
2710
|
-
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),
|
|
2711
2754
|
|
|
2712
2755
|
deleteMyMeeting: (meetingUuid ) =>
|
|
2713
2756
|
client.delete(`${baseUrl}/users/me/meetings/${meetingUuid}`, null),
|
|
@@ -2809,7 +2852,7 @@ class ChatMessage {
|
|
|
2809
2852
|
static parse(plain ) {
|
|
2810
2853
|
return new ChatMessage({
|
|
2811
2854
|
uuid: plain.uuid,
|
|
2812
|
-
date: moment__default[
|
|
2855
|
+
date: moment__default['default'](plain.created_at).toDate(),
|
|
2813
2856
|
content: plain.content,
|
|
2814
2857
|
alias: plain.alias,
|
|
2815
2858
|
userUuid: plain.user_uuid,
|
|
@@ -2901,7 +2944,7 @@ class Voicemail {
|
|
|
2901
2944
|
static parse(plain ) {
|
|
2902
2945
|
return new Voicemail({
|
|
2903
2946
|
id: plain.id,
|
|
2904
|
-
date: moment__default[
|
|
2947
|
+
date: moment__default['default'](plain.timestamp * 1000).toDate(),
|
|
2905
2948
|
duration: plain.duration * 1000,
|
|
2906
2949
|
caller: {
|
|
2907
2950
|
name: plain.caller_id_name,
|
|
@@ -3038,7 +3081,7 @@ class Call {
|
|
|
3038
3081
|
onHold: plain.on_hold,
|
|
3039
3082
|
status: plain.status,
|
|
3040
3083
|
lineId: plain.line_id,
|
|
3041
|
-
startingTime: moment__default[
|
|
3084
|
+
startingTime: moment__default['default'](plain.creation_time).toDate(),
|
|
3042
3085
|
talkingToIds: Object.keys(plain.talking_to || {}),
|
|
3043
3086
|
recording: plain.record_state === RECORD_STATE_ACTIVE,
|
|
3044
3087
|
});
|
|
@@ -3192,7 +3235,7 @@ class Recording {
|
|
|
3192
3235
|
|
|
3193
3236
|
|
|
3194
3237
|
|
|
3195
|
-
static parseMany(recordings
|
|
3238
|
+
static parseMany(recordings = []) {
|
|
3196
3239
|
return recordings.map(item => Recording.parse(item));
|
|
3197
3240
|
}
|
|
3198
3241
|
|
|
@@ -3200,8 +3243,8 @@ class Recording {
|
|
|
3200
3243
|
return new Recording({
|
|
3201
3244
|
deleted: plain.deleted,
|
|
3202
3245
|
fileName: plain.filename,
|
|
3203
|
-
end: plain.end_time ? moment__default[
|
|
3204
|
-
start: moment__default[
|
|
3246
|
+
end: plain.end_time ? moment__default['default'](plain.end_time).toDate() : null,
|
|
3247
|
+
start: moment__default['default'](plain.start_time).toDate(),
|
|
3205
3248
|
uuid: plain.uuid,
|
|
3206
3249
|
});
|
|
3207
3250
|
}
|
|
@@ -3299,7 +3342,7 @@ class CallLog {
|
|
|
3299
3342
|
|
|
3300
3343
|
static parse(plain ) {
|
|
3301
3344
|
return new CallLog({
|
|
3302
|
-
answer: plain.answer ? moment__default[
|
|
3345
|
+
answer: plain.answer ? moment__default['default'](plain.answer).toDate() : null,
|
|
3303
3346
|
answered: plain.answered,
|
|
3304
3347
|
callDirection: plain.call_direction,
|
|
3305
3348
|
destination: {
|
|
@@ -3316,9 +3359,9 @@ class CallLog {
|
|
|
3316
3359
|
},
|
|
3317
3360
|
id: plain.id,
|
|
3318
3361
|
duration: (plain.duration || 0) * 1000, // duration is in seconds
|
|
3319
|
-
start: moment__default[
|
|
3320
|
-
end: plain.end ? moment__default[
|
|
3321
|
-
recordings: Recording.parseMany(plain.recordings),
|
|
3362
|
+
start: moment__default['default'](plain.start).toDate(),
|
|
3363
|
+
end: plain.end ? moment__default['default'](plain.end).toDate() : null,
|
|
3364
|
+
recordings: Recording.parseMany(plain.recordings || []),
|
|
3322
3365
|
});
|
|
3323
3366
|
}
|
|
3324
3367
|
|