@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/domain/Recording.js
CHANGED
|
@@ -31,7 +31,7 @@ class Recording {
|
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
|
|
34
|
-
static parseMany(recordings
|
|
34
|
+
static parseMany(recordings = []) {
|
|
35
35
|
return recordings.map(item => Recording.parse(item));
|
|
36
36
|
}
|
|
37
37
|
|
|
@@ -39,8 +39,8 @@ class Recording {
|
|
|
39
39
|
return new Recording({
|
|
40
40
|
deleted: plain.deleted,
|
|
41
41
|
fileName: plain.filename,
|
|
42
|
-
end: plain.end_time ? moment__default[
|
|
43
|
-
start: moment__default[
|
|
42
|
+
end: plain.end_time ? moment__default['default'](plain.end_time).toDate() : null,
|
|
43
|
+
start: moment__default['default'](plain.start_time).toDate(),
|
|
44
44
|
uuid: plain.uuid,
|
|
45
45
|
});
|
|
46
46
|
}
|
package/lib/domain/Voicemail.js
CHANGED
|
@@ -66,7 +66,7 @@ class Voicemail {
|
|
|
66
66
|
static parse(plain ) {
|
|
67
67
|
return new Voicemail({
|
|
68
68
|
id: plain.id,
|
|
69
|
-
date: moment__default[
|
|
69
|
+
date: moment__default['default'](plain.timestamp * 1000).toDate(),
|
|
70
70
|
duration: plain.duration * 1000,
|
|
71
71
|
caller: {
|
|
72
72
|
name: plain.caller_id_name,
|
|
@@ -94,7 +94,7 @@ class Call {
|
|
|
94
94
|
onHold: plain.on_hold,
|
|
95
95
|
status: plain.status,
|
|
96
96
|
lineId: plain.line_id,
|
|
97
|
-
startingTime: moment__default[
|
|
97
|
+
startingTime: moment__default['default'](plain.creation_time).toDate(),
|
|
98
98
|
talkingToIds: Object.keys(plain.talking_to || {}),
|
|
99
99
|
recording: plain.record_state === RECORD_STATE_ACTIVE,
|
|
100
100
|
});
|
|
@@ -59,7 +59,7 @@ class Recording {
|
|
|
59
59
|
|
|
60
60
|
|
|
61
61
|
|
|
62
|
-
static parseMany(recordings
|
|
62
|
+
static parseMany(recordings = []) {
|
|
63
63
|
return recordings.map(item => Recording.parse(item));
|
|
64
64
|
}
|
|
65
65
|
|
|
@@ -67,8 +67,8 @@ class Recording {
|
|
|
67
67
|
return new Recording({
|
|
68
68
|
deleted: plain.deleted,
|
|
69
69
|
fileName: plain.filename,
|
|
70
|
-
end: plain.end_time ? moment__default[
|
|
71
|
-
start: moment__default[
|
|
70
|
+
end: plain.end_time ? moment__default['default'](plain.end_time).toDate() : null,
|
|
71
|
+
start: moment__default['default'](plain.start_time).toDate(),
|
|
72
72
|
uuid: plain.uuid,
|
|
73
73
|
});
|
|
74
74
|
}
|
|
@@ -166,7 +166,7 @@ class CallLog {
|
|
|
166
166
|
|
|
167
167
|
static parse(plain ) {
|
|
168
168
|
return new CallLog({
|
|
169
|
-
answer: plain.answer ? moment__default[
|
|
169
|
+
answer: plain.answer ? moment__default['default'](plain.answer).toDate() : null,
|
|
170
170
|
answered: plain.answered,
|
|
171
171
|
callDirection: plain.call_direction,
|
|
172
172
|
destination: {
|
|
@@ -183,9 +183,9 @@ class CallLog {
|
|
|
183
183
|
},
|
|
184
184
|
id: plain.id,
|
|
185
185
|
duration: (plain.duration || 0) * 1000, // duration is in seconds
|
|
186
|
-
start: moment__default[
|
|
187
|
-
end: plain.end ? moment__default[
|
|
188
|
-
recordings: Recording.parseMany(plain.recordings),
|
|
186
|
+
start: moment__default['default'](plain.start).toDate(),
|
|
187
|
+
end: plain.end ? moment__default['default'](plain.end).toDate() : null,
|
|
188
|
+
recordings: Recording.parseMany(plain.recordings || []),
|
|
189
189
|
});
|
|
190
190
|
}
|
|
191
191
|
|
|
@@ -317,7 +317,7 @@ describe('CallLog domain', () => {
|
|
|
317
317
|
filtered: 6,
|
|
318
318
|
items: [
|
|
319
319
|
{
|
|
320
|
-
answer: moment__default[
|
|
320
|
+
answer: moment__default['default']('2017-08-07T13:51:18.892002+00:00').toDate(),
|
|
321
321
|
answered: true,
|
|
322
322
|
call_direction: 'outbound',
|
|
323
323
|
source_extension: '8020',
|
|
@@ -348,7 +348,7 @@ describe('CallLog domain', () => {
|
|
|
348
348
|
|
|
349
349
|
expect(logs).toEqual([
|
|
350
350
|
new CallLog({
|
|
351
|
-
answer: moment__default[
|
|
351
|
+
answer: moment__default['default']('2017-08-07T13:51:18.892002+00:00').toDate(),
|
|
352
352
|
answered: true,
|
|
353
353
|
callDirection: 'outbound',
|
|
354
354
|
destination: {
|
|
@@ -361,14 +361,14 @@ describe('CallLog domain', () => {
|
|
|
361
361
|
},
|
|
362
362
|
id: 215,
|
|
363
363
|
duration: 4000,
|
|
364
|
-
start: moment__default[
|
|
365
|
-
end: moment__default[
|
|
364
|
+
start: moment__default['default']('2017-08-06T13:50:55.819057+00:00').toDate(),
|
|
365
|
+
end: moment__default['default']('2017-08-08T13:51:23.822529+00:00').toDate(),
|
|
366
366
|
recordings: [
|
|
367
367
|
new Recording({
|
|
368
368
|
deleted: false,
|
|
369
|
-
end: moment__default[
|
|
369
|
+
end: moment__default['default']('2021-08-11T13:22:50.519733+00:00').toDate(),
|
|
370
370
|
fileName: '2021-08-11T13_22_45UTC-61886-xxxx-5c72-4072-8503-e3ad9a41c0a0.wav',
|
|
371
|
-
start: moment__default[
|
|
371
|
+
start: moment__default['default']('2021-08-11T13:22:45.161954+00:00').toDate(),
|
|
372
372
|
uuid: '0394ad6f-5c72-4072-8503-e3ad9a41c0a0',
|
|
373
373
|
}),
|
|
374
374
|
],
|
|
@@ -66,7 +66,7 @@ class Voicemail {
|
|
|
66
66
|
static parse(plain ) {
|
|
67
67
|
return new Voicemail({
|
|
68
68
|
id: plain.id,
|
|
69
|
-
date: moment__default[
|
|
69
|
+
date: moment__default['default'](plain.timestamp * 1000).toDate(),
|
|
70
70
|
duration: plain.duration * 1000,
|
|
71
71
|
caller: {
|
|
72
72
|
name: plain.caller_id_name,
|
package/lib/index.js
CHANGED
|
@@ -161,6 +161,7 @@ class IssueReporter {
|
|
|
161
161
|
|
|
162
162
|
|
|
163
163
|
|
|
164
|
+
|
|
164
165
|
|
|
165
166
|
constructor() {
|
|
166
167
|
addLevelsTo(this);
|
|
@@ -172,12 +173,17 @@ class IssueReporter {
|
|
|
172
173
|
this.bufferTimeout = null;
|
|
173
174
|
this._boundProcessBuffer = this._processBuffer.bind(this);
|
|
174
175
|
this._boundParseLoggerBody = this._parseLoggerBody.bind(this);
|
|
176
|
+
this._callback = null;
|
|
175
177
|
}
|
|
176
178
|
|
|
177
179
|
init() {
|
|
178
180
|
this._catchConsole();
|
|
179
181
|
}
|
|
180
182
|
|
|
183
|
+
setCallback(cb ) {
|
|
184
|
+
this._callback = cb;
|
|
185
|
+
}
|
|
186
|
+
|
|
181
187
|
configureRemoteClient(configuration = { tag: 'wazo-sdk', host: null, port: null, level: null, extra: {} }) {
|
|
182
188
|
this.remoteClientConfiguration = configuration;
|
|
183
189
|
}
|
|
@@ -213,6 +219,7 @@ class IssueReporter {
|
|
|
213
219
|
|
|
214
220
|
// Handle category label
|
|
215
221
|
let category = null;
|
|
222
|
+
let skipSendToRemote = false;
|
|
216
223
|
let extra = {};
|
|
217
224
|
if (args[0].indexOf(CATEGORY_PREFIX) === 0) {
|
|
218
225
|
category = args[0].split('=')[1];
|
|
@@ -228,6 +235,7 @@ class IssueReporter {
|
|
|
228
235
|
errorMessage: lastArg.message,
|
|
229
236
|
errorStack: lastArg.stack,
|
|
230
237
|
errorType: lastArg.constructor.name,
|
|
238
|
+
skipSendToRemote: lastArg.skipSendToRemote,
|
|
231
239
|
};
|
|
232
240
|
} else {
|
|
233
241
|
extra = lastArg;
|
|
@@ -236,7 +244,12 @@ class IssueReporter {
|
|
|
236
244
|
args.splice(1, 1);
|
|
237
245
|
}
|
|
238
246
|
|
|
239
|
-
|
|
247
|
+
if (extra.skipSendToRemote) {
|
|
248
|
+
skipSendToRemote = true;
|
|
249
|
+
delete extra.skipSendToRemote;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
const date = moment__default['default']().format('YYYY-MM-DD HH:mm:ss.SSS');
|
|
240
253
|
const message = args.join(', ');
|
|
241
254
|
let consoleMessage = message;
|
|
242
255
|
|
|
@@ -256,7 +269,13 @@ class IssueReporter {
|
|
|
256
269
|
const oldMethod = this.oldConsoleMethods[consoleLevel] || this.oldConsoleMethods.log;
|
|
257
270
|
oldMethod.apply(oldMethod, [date, consoleMessage]);
|
|
258
271
|
|
|
259
|
-
this.
|
|
272
|
+
if (this._callback) {
|
|
273
|
+
this._callback(level, consoleMessage);
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
if (!skipSendToRemote) {
|
|
277
|
+
this._sendToRemoteLogger(level, { date, message, category, ...extra });
|
|
278
|
+
}
|
|
260
279
|
}
|
|
261
280
|
|
|
262
281
|
logRequest(url , options , response , start ) {
|
|
@@ -401,7 +420,11 @@ class IssueReporter {
|
|
|
401
420
|
},
|
|
402
421
|
// $FlowFixMe
|
|
403
422
|
body,
|
|
404
|
-
}).catch(() => {
|
|
423
|
+
}).catch((e ) => {
|
|
424
|
+
// $FlowFixMe
|
|
425
|
+
e.skipSendToRemote = true;
|
|
426
|
+
this.log('error', this._makeCategory('grafana'), 'Sending log to grafana, error', e);
|
|
427
|
+
|
|
405
428
|
setTimeout(() => {
|
|
406
429
|
if (isArray) {
|
|
407
430
|
payload = payload.map(message => {
|
|
@@ -413,7 +436,7 @@ class IssueReporter {
|
|
|
413
436
|
payload._retry = retry + 1;
|
|
414
437
|
}
|
|
415
438
|
|
|
416
|
-
this._sendDebugToGrafana(
|
|
439
|
+
this._sendDebugToGrafana(payload, retry + 1);
|
|
417
440
|
}, 5000 + retry * 1000);
|
|
418
441
|
});
|
|
419
442
|
}
|
|
@@ -2616,7 +2639,8 @@ class ExternalApp {
|
|
|
2616
2639
|
|
|
2617
2640
|
|
|
2618
2641
|
|
|
2619
|
-
|
|
2642
|
+
|
|
2643
|
+
|
|
2620
2644
|
|
|
2621
2645
|
|
|
2622
2646
|
class Meeting {
|
|
@@ -2628,6 +2652,7 @@ class Meeting {
|
|
|
2628
2652
|
|
|
2629
2653
|
|
|
2630
2654
|
|
|
2655
|
+
|
|
2631
2656
|
|
|
2632
2657
|
|
|
2633
2658
|
static parse(plain ) {
|
|
@@ -2639,14 +2664,28 @@ class Meeting {
|
|
|
2639
2664
|
port: plain.port,
|
|
2640
2665
|
uuid: plain.uuid,
|
|
2641
2666
|
number: plain.number,
|
|
2667
|
+
persistent: plain.persistent,
|
|
2642
2668
|
});
|
|
2643
2669
|
}
|
|
2644
2670
|
|
|
2671
|
+
static parseMany(items ) {
|
|
2672
|
+
return items.map(plain => Meeting.parse(plain));
|
|
2673
|
+
}
|
|
2674
|
+
|
|
2645
2675
|
static newFrom(meeting ) {
|
|
2646
2676
|
return newFrom(meeting, Meeting);
|
|
2647
2677
|
}
|
|
2648
2678
|
|
|
2649
|
-
constructor({
|
|
2679
|
+
constructor({
|
|
2680
|
+
uuid,
|
|
2681
|
+
name,
|
|
2682
|
+
guestSipAuthorization,
|
|
2683
|
+
ownerUuids,
|
|
2684
|
+
port,
|
|
2685
|
+
uri,
|
|
2686
|
+
number,
|
|
2687
|
+
persistent,
|
|
2688
|
+
} = {}) {
|
|
2650
2689
|
this.guestSipAuthorization = guestSipAuthorization;
|
|
2651
2690
|
this.uri = uri;
|
|
2652
2691
|
this.name = name;
|
|
@@ -2654,6 +2693,7 @@ class Meeting {
|
|
|
2654
2693
|
this.port = port;
|
|
2655
2694
|
this.uuid = uuid;
|
|
2656
2695
|
this.number = number;
|
|
2696
|
+
this.persistent = persistent;
|
|
2657
2697
|
|
|
2658
2698
|
// Useful to compare instead of instanceof with minified code
|
|
2659
2699
|
this.type = 'Meeting';
|
|
@@ -2731,8 +2771,11 @@ var confdMethods = (client , baseUrl ) => ({
|
|
|
2731
2771
|
}
|
|
2732
2772
|
},
|
|
2733
2773
|
|
|
2734
|
-
|
|
2735
|
-
client.
|
|
2774
|
+
getMyMeetings: () =>
|
|
2775
|
+
client.get(`${baseUrl}/users/me/meetings`).then(response => Meeting.parseMany(response.items)),
|
|
2776
|
+
|
|
2777
|
+
createMyMeeting: (name , persistent ) =>
|
|
2778
|
+
client.post(`${baseUrl}/users/me/meetings`, { name, persistent }).then(Meeting.parse),
|
|
2736
2779
|
|
|
2737
2780
|
deleteMyMeeting: (meetingUuid ) =>
|
|
2738
2781
|
client.delete(`${baseUrl}/users/me/meetings/${meetingUuid}`, null),
|
|
@@ -2834,7 +2877,7 @@ class ChatMessage {
|
|
|
2834
2877
|
static parse(plain ) {
|
|
2835
2878
|
return new ChatMessage({
|
|
2836
2879
|
uuid: plain.uuid,
|
|
2837
|
-
date: moment__default[
|
|
2880
|
+
date: moment__default['default'](plain.created_at).toDate(),
|
|
2838
2881
|
content: plain.content,
|
|
2839
2882
|
alias: plain.alias,
|
|
2840
2883
|
userUuid: plain.user_uuid,
|
|
@@ -2926,7 +2969,7 @@ class Voicemail {
|
|
|
2926
2969
|
static parse(plain ) {
|
|
2927
2970
|
return new Voicemail({
|
|
2928
2971
|
id: plain.id,
|
|
2929
|
-
date: moment__default[
|
|
2972
|
+
date: moment__default['default'](plain.timestamp * 1000).toDate(),
|
|
2930
2973
|
duration: plain.duration * 1000,
|
|
2931
2974
|
caller: {
|
|
2932
2975
|
name: plain.caller_id_name,
|
|
@@ -3063,7 +3106,7 @@ class Call {
|
|
|
3063
3106
|
onHold: plain.on_hold,
|
|
3064
3107
|
status: plain.status,
|
|
3065
3108
|
lineId: plain.line_id,
|
|
3066
|
-
startingTime: moment__default[
|
|
3109
|
+
startingTime: moment__default['default'](plain.creation_time).toDate(),
|
|
3067
3110
|
talkingToIds: Object.keys(plain.talking_to || {}),
|
|
3068
3111
|
recording: plain.record_state === RECORD_STATE_ACTIVE,
|
|
3069
3112
|
});
|
|
@@ -3543,7 +3586,7 @@ class Emitter {
|
|
|
3543
3586
|
|
|
3544
3587
|
|
|
3545
3588
|
constructor() {
|
|
3546
|
-
this.eventEmitter = new EventEmitter__default[
|
|
3589
|
+
this.eventEmitter = new EventEmitter__default['default']();
|
|
3547
3590
|
}
|
|
3548
3591
|
|
|
3549
3592
|
on(event , callback ) {
|
|
@@ -3588,7 +3631,7 @@ class Recording {
|
|
|
3588
3631
|
|
|
3589
3632
|
|
|
3590
3633
|
|
|
3591
|
-
static parseMany(recordings
|
|
3634
|
+
static parseMany(recordings = []) {
|
|
3592
3635
|
return recordings.map(item => Recording.parse(item));
|
|
3593
3636
|
}
|
|
3594
3637
|
|
|
@@ -3596,8 +3639,8 @@ class Recording {
|
|
|
3596
3639
|
return new Recording({
|
|
3597
3640
|
deleted: plain.deleted,
|
|
3598
3641
|
fileName: plain.filename,
|
|
3599
|
-
end: plain.end_time ? moment__default[
|
|
3600
|
-
start: moment__default[
|
|
3642
|
+
end: plain.end_time ? moment__default['default'](plain.end_time).toDate() : null,
|
|
3643
|
+
start: moment__default['default'](plain.start_time).toDate(),
|
|
3601
3644
|
uuid: plain.uuid,
|
|
3602
3645
|
});
|
|
3603
3646
|
}
|
|
@@ -3695,7 +3738,7 @@ class CallLog {
|
|
|
3695
3738
|
|
|
3696
3739
|
static parse(plain ) {
|
|
3697
3740
|
return new CallLog({
|
|
3698
|
-
answer: plain.answer ? moment__default[
|
|
3741
|
+
answer: plain.answer ? moment__default['default'](plain.answer).toDate() : null,
|
|
3699
3742
|
answered: plain.answered,
|
|
3700
3743
|
callDirection: plain.call_direction,
|
|
3701
3744
|
destination: {
|
|
@@ -3712,9 +3755,9 @@ class CallLog {
|
|
|
3712
3755
|
},
|
|
3713
3756
|
id: plain.id,
|
|
3714
3757
|
duration: (plain.duration || 0) * 1000, // duration is in seconds
|
|
3715
|
-
start: moment__default[
|
|
3716
|
-
end: plain.end ? moment__default[
|
|
3717
|
-
recordings: Recording.parseMany(plain.recordings),
|
|
3758
|
+
start: moment__default['default'](plain.start).toDate(),
|
|
3759
|
+
end: plain.end ? moment__default['default'](plain.end).toDate() : null,
|
|
3760
|
+
recordings: Recording.parseMany(plain.recordings || []),
|
|
3718
3761
|
});
|
|
3719
3762
|
}
|
|
3720
3763
|
|
|
@@ -5449,7 +5492,7 @@ const parseCandidate$1 = (candidate ) => {
|
|
|
5449
5492
|
if (!candidate) {
|
|
5450
5493
|
return null;
|
|
5451
5494
|
}
|
|
5452
|
-
const result = sdpParser__default[
|
|
5495
|
+
const result = sdpParser__default['default'].parse(candidate.indexOf('a=') === 0 ? candidate : `a=${candidate}`);
|
|
5453
5496
|
|
|
5454
5497
|
return result.candidates ? result.candidates[0] : null;
|
|
5455
5498
|
};
|
|
@@ -5463,7 +5506,7 @@ const areCandidateValid = (candidates ) =>
|
|
|
5463
5506
|
.length > 0;
|
|
5464
5507
|
|
|
5465
5508
|
const getVideoDirection = (sdp ) => {
|
|
5466
|
-
const parsedSdp = sdpParser__default[
|
|
5509
|
+
const parsedSdp = sdpParser__default['default'].parse(sdp);
|
|
5467
5510
|
const videoMedia = parsedSdp.media.find(media => media.type === 'video');
|
|
5468
5511
|
if (!videoMedia) {
|
|
5469
5512
|
return null;
|
|
@@ -5477,14 +5520,14 @@ const hasAnActiveVideo = (sdp ) => {
|
|
|
5477
5520
|
return false;
|
|
5478
5521
|
}
|
|
5479
5522
|
|
|
5480
|
-
const parsedSdp = sdpParser__default[
|
|
5523
|
+
const parsedSdp = sdpParser__default['default'].parse(sdp);
|
|
5481
5524
|
|
|
5482
5525
|
return !!parsedSdp.media.find(media =>
|
|
5483
5526
|
media.type === 'video' && media.port > 10 && (!media.direction || media.direction !== 'inactive'));
|
|
5484
5527
|
};
|
|
5485
5528
|
|
|
5486
5529
|
const fixSdp = (sdp , candidates , forcePort = true) => {
|
|
5487
|
-
const parsedSdp = sdpParser__default[
|
|
5530
|
+
const parsedSdp = sdpParser__default['default'].parse(sdp);
|
|
5488
5531
|
const mainCandidate = getSrflxOrRelay(candidates)[0];
|
|
5489
5532
|
const ip = mainCandidate ? mainCandidate.ip : null;
|
|
5490
5533
|
|
|
@@ -5502,7 +5545,7 @@ const fixSdp = (sdp , candidates , forcePort = true)
|
|
|
5502
5545
|
};
|
|
5503
5546
|
});
|
|
5504
5547
|
|
|
5505
|
-
let fixed = sdpParser__default[
|
|
5548
|
+
let fixed = sdpParser__default['default'].write(parsedSdp);
|
|
5506
5549
|
|
|
5507
5550
|
if (ip) {
|
|
5508
5551
|
fixed = fixed.replace(/IN IP4 0.0.0.0/g, `IN IP4 ${ip}`);
|
|
@@ -5548,7 +5591,7 @@ class WazoSessionDescriptionHandler extends sessionDescriptionHandler.SessionDes
|
|
|
5548
5591
|
) {
|
|
5549
5592
|
super(logger, mediaStreamFactory, sessionDescriptionHandlerConfiguration);
|
|
5550
5593
|
|
|
5551
|
-
this.eventEmitter = new EventEmitter__default[
|
|
5594
|
+
this.eventEmitter = new EventEmitter__default['default']();
|
|
5552
5595
|
this.isWeb = isWeb;
|
|
5553
5596
|
this.session = session;
|
|
5554
5597
|
}
|
|
@@ -6529,7 +6572,9 @@ class WebRTCClient extends Emitter {
|
|
|
6529
6572
|
const inviteOptions = {
|
|
6530
6573
|
requestDelegate: {
|
|
6531
6574
|
onAccept: (response ) => {
|
|
6532
|
-
session.sessionDescriptionHandler.peerConnection
|
|
6575
|
+
if (session.sessionDescriptionHandler.peerConnection) {
|
|
6576
|
+
session.sessionDescriptionHandler.peerConnection.sfu = conference;
|
|
6577
|
+
}
|
|
6533
6578
|
this._onAccepted(session, response.session, true);
|
|
6534
6579
|
},
|
|
6535
6580
|
onReject: (response ) => {
|
|
@@ -6865,7 +6910,7 @@ class WebRTCClient extends Emitter {
|
|
|
6865
6910
|
// We search for the last transceiver without `video-` in the mid (video- means remote transceiver)
|
|
6866
6911
|
const transceivers = pc.getTransceivers();
|
|
6867
6912
|
const transceiverIdx = lastIndexOf(transceivers, transceiver =>
|
|
6868
|
-
transceiver.sender.track === null && transceiver.mid.indexOf('video') === -1);
|
|
6913
|
+
transceiver.sender.track === null && transceiver.mid && transceiver.mid.indexOf('video') === -1);
|
|
6869
6914
|
|
|
6870
6915
|
videoSender = transceiverIdx !== -1 ? transceivers[transceiverIdx].sender : null;
|
|
6871
6916
|
} else {
|
|
@@ -7401,6 +7446,16 @@ class WebRTCClient extends Emitter {
|
|
|
7401
7446
|
return this.hasRemoteVideo(sessionId) ? this.getRemoteStream(sessionId) : null;
|
|
7402
7447
|
}
|
|
7403
7448
|
|
|
7449
|
+
// Useful in a react-native environment when remoteMediaStream is not updated
|
|
7450
|
+
getRemoteVideoStreamFromPc(sessionId ) {
|
|
7451
|
+
const pc = this.getPeerConnection(sessionId);
|
|
7452
|
+
if (!pc) {
|
|
7453
|
+
return null;
|
|
7454
|
+
}
|
|
7455
|
+
|
|
7456
|
+
return pc.getRemoteStreams().find(stream => !!stream.getVideoTracks().length);
|
|
7457
|
+
}
|
|
7458
|
+
|
|
7404
7459
|
hasVideo(sessionId ) {
|
|
7405
7460
|
return this.hasLocalVideo(sessionId) || this.hasRemoteVideo(sessionId);
|
|
7406
7461
|
}
|
|
@@ -7911,6 +7966,7 @@ class WebRTCClient extends Emitter {
|
|
|
7911
7966
|
session.sessionDescriptionHandler.remoteMediaStream.onaddtrack = onTrack;
|
|
7912
7967
|
|
|
7913
7968
|
pc.oniceconnectionstatechange = () => {
|
|
7969
|
+
logger$9.info('on ice connection state changed', { state: pc.iceConnectionState });
|
|
7914
7970
|
if (pc.iceConnectionState === 'disconnected') {
|
|
7915
7971
|
this.eventEmitter.emit(ON_DISCONNECTED$1);
|
|
7916
7972
|
}
|
|
@@ -8070,7 +8126,7 @@ class WebRTCClient extends Emitter {
|
|
|
8070
8126
|
}
|
|
8071
8127
|
const sessionId = this.getSipSessionId(session);
|
|
8072
8128
|
|
|
8073
|
-
getStats__default[
|
|
8129
|
+
getStats__default['default'](pc, (result ) => {
|
|
8074
8130
|
const { results, internal, nomore, ...stats } = result;
|
|
8075
8131
|
this.statsIntervals[sessionId] = nomore;
|
|
8076
8132
|
|
|
@@ -8179,18 +8235,22 @@ class WebRTCClient extends Emitter {
|
|
|
8179
8235
|
});
|
|
8180
8236
|
|
|
8181
8237
|
networkStats.packetsLost = packetsLost;
|
|
8182
|
-
networkStats.
|
|
8238
|
+
networkStats.totalAudioBytesSent = audioBytesSent;
|
|
8239
|
+
networkStats.audioBytesSent = audioBytesSent - lastAudioSent;
|
|
8240
|
+
networkStats.totalAudioBytesReceived = audioBytesReceived - lastAudioReceived;
|
|
8183
8241
|
networkStats.audioBytesReceived = audioBytesReceived;
|
|
8184
|
-
networkStats.
|
|
8185
|
-
networkStats.
|
|
8242
|
+
networkStats.totalVideoBytesSent = videoBytesSent;
|
|
8243
|
+
networkStats.videoBytesSent = videoBytesSent - lastVideoSent;
|
|
8244
|
+
networkStats.totalVideoBytesReceived = videoBytesReceived;
|
|
8245
|
+
networkStats.videoBytesReceived = videoBytesReceived - lastVideoReceived;
|
|
8246
|
+
networkStats.totalTransportSent = transportSent - lastTransportSent;
|
|
8186
8247
|
networkStats.transportSent = transportSent;
|
|
8187
|
-
networkStats.
|
|
8188
|
-
|
|
8189
|
-
const bandwidth = (networkStats.audioBytesSent - lastAudioSent) + (networkStats.videoBytesSent - lastVideoSent)
|
|
8190
|
-
+ (networkStats.audioBytesReceived - lastAudioReceived) + (networkStats.videoBytesReceived - lastVideoReceived)
|
|
8191
|
-
+ (networkStats.transportReceived - lastTransportReceived) + (networkStats.transportSent - lastTransportSent);
|
|
8248
|
+
networkStats.totalTransportReceived = transportReceived;
|
|
8249
|
+
networkStats.transportReceived = transportReceived - lastTransportReceived;
|
|
8192
8250
|
|
|
8193
|
-
networkStats.bandwidth =
|
|
8251
|
+
networkStats.bandwidth = networkStats.audioBytesSent + networkStats.audioBytesReceived
|
|
8252
|
+
+ networkStats.videoBytesSent + networkStats.videoBytesReceived + networkStats.transportReceived
|
|
8253
|
+
+ networkStats.transportSent;
|
|
8194
8254
|
|
|
8195
8255
|
this.eventEmitter.emit(ON_NETWORK_STATS$1, session, networkStats, this.sessionNetworkStats[sessionId]);
|
|
8196
8256
|
this.sessionNetworkStats[sessionId].push(networkStats);
|
|
@@ -8286,6 +8346,7 @@ const AGENT_PAUSED = 'agent_paused';
|
|
|
8286
8346
|
const AGENT_UNPAUSED = 'agent_unpaused';
|
|
8287
8347
|
const CONFERENCE_ADHOC_PARTICIPANT_LEFT = 'conference_adhoc_participant_left';
|
|
8288
8348
|
const CONFERENCE_ADHOC_DELETED = 'conference_adhoc_deleted';
|
|
8349
|
+
const MEETING_USER_PROGRESS = 'meeting_user_progress';
|
|
8289
8350
|
|
|
8290
8351
|
const BLACKLIST_EVENTS = [
|
|
8291
8352
|
CHAT_MESSAGE_SENT,
|
|
@@ -8345,7 +8406,7 @@ class WebSocketClient extends Emitter {
|
|
|
8345
8406
|
|
|
8346
8407
|
connect() {
|
|
8347
8408
|
logger$8.info('connect method started', { host: this.host, token: this.token });
|
|
8348
|
-
this.socket = new ReconnectingWebSocket__default[
|
|
8409
|
+
this.socket = new ReconnectingWebSocket__default['default'](this._getUrl.bind(this), [], this.options);
|
|
8349
8410
|
if (this.options.binaryType) {
|
|
8350
8411
|
this.socket.binaryType = this.options.binaryType;
|
|
8351
8412
|
}
|
|
@@ -8636,6 +8697,7 @@ WebSocketClient.eventLists = [
|
|
|
8636
8697
|
AGENT_UNPAUSED,
|
|
8637
8698
|
CONFERENCE_ADHOC_PARTICIPANT_LEFT,
|
|
8638
8699
|
CONFERENCE_ADHOC_DELETED,
|
|
8700
|
+
MEETING_USER_PROGRESS,
|
|
8639
8701
|
];
|
|
8640
8702
|
|
|
8641
8703
|
var WebSocketClient$1 = /*#__PURE__*/Object.freeze({
|
|
@@ -8706,6 +8768,7 @@ var WebSocketClient$1 = /*#__PURE__*/Object.freeze({
|
|
|
8706
8768
|
AGENT_UNPAUSED: AGENT_UNPAUSED,
|
|
8707
8769
|
CONFERENCE_ADHOC_PARTICIPANT_LEFT: CONFERENCE_ADHOC_PARTICIPANT_LEFT,
|
|
8708
8770
|
CONFERENCE_ADHOC_DELETED: CONFERENCE_ADHOC_DELETED,
|
|
8771
|
+
MEETING_USER_PROGRESS: MEETING_USER_PROGRESS,
|
|
8709
8772
|
HEARTBEAT_ENGINE_VERSION: HEARTBEAT_ENGINE_VERSION,
|
|
8710
8773
|
'default': WebSocketClient
|
|
8711
8774
|
});
|
|
@@ -9462,7 +9525,10 @@ class WebRTCPhone extends Emitter {
|
|
|
9462
9525
|
|
|
9463
9526
|
onCancel(message);
|
|
9464
9527
|
const elsewhere = message.data.indexOf('cause=26') !== -1 && message.data.indexOf('completed elsewhere') !== -1;
|
|
9465
|
-
|
|
9528
|
+
const callSession = this._createCallSession(sipSession);
|
|
9529
|
+
delete this.callSessions[callSession.getId()];
|
|
9530
|
+
|
|
9531
|
+
this.eventEmitter.emit(ON_CALL_CANCELED, callSession, elsewhere);
|
|
9466
9532
|
};
|
|
9467
9533
|
} else if (sipSession instanceof invitation.Invitation) {
|
|
9468
9534
|
console.warn('sipSession._onCancel not found, please update the wazo SDK accordingly');
|
|
@@ -9491,9 +9557,11 @@ class WebRTCPhone extends Emitter {
|
|
|
9491
9557
|
case sessionState.SessionState.Terminated: {
|
|
9492
9558
|
logger$7.info('WebRTC phone - call terminated', { sipId: sipSession.id });
|
|
9493
9559
|
|
|
9560
|
+
// Should be called before `_onCallTerminated` or the callCount will not decrement...
|
|
9561
|
+
const callSession = this._createCallSession(sipSession);
|
|
9494
9562
|
const wasCurrentSession = this._onCallTerminated(sipSession);
|
|
9495
9563
|
|
|
9496
|
-
return this.eventEmitter.emit(ON_CALL_ENDED,
|
|
9564
|
+
return this.eventEmitter.emit(ON_CALL_ENDED, callSession, wasCurrentSession);
|
|
9497
9565
|
}
|
|
9498
9566
|
}
|
|
9499
9567
|
});
|
|
@@ -10441,6 +10509,10 @@ class WebRTCPhone extends Emitter {
|
|
|
10441
10509
|
return callSession ? this.client.getRemoteVideoStream(callSession.sipCallId) : null;
|
|
10442
10510
|
}
|
|
10443
10511
|
|
|
10512
|
+
getRemoteVideoStreamFromPc(callSession ) {
|
|
10513
|
+
return callSession ? this.client.getRemoteVideoStreamFromPc(callSession.sipCallId) : null;
|
|
10514
|
+
}
|
|
10515
|
+
|
|
10444
10516
|
hasRemoteVideo(callSession ) {
|
|
10445
10517
|
return callSession ? this.client.hasRemoteVideo(callSession.sipCallId) : false;
|
|
10446
10518
|
}
|
|
@@ -11317,8 +11389,8 @@ class Checker {
|
|
|
11317
11389
|
|
|
11318
11390
|
//
|
|
11319
11391
|
|
|
11320
|
-
const PhoneNumberUtil = LibPhoneNumber__default[
|
|
11321
|
-
const { PhoneNumberFormat, AsYouTypeFormatter } = LibPhoneNumber__default[
|
|
11392
|
+
const PhoneNumberUtil = LibPhoneNumber__default['default'].PhoneNumberUtil.getInstance();
|
|
11393
|
+
const { PhoneNumberFormat, AsYouTypeFormatter } = LibPhoneNumber__default['default'];
|
|
11322
11394
|
|
|
11323
11395
|
// eslint-disable-next-line
|
|
11324
11396
|
const EXTRA_CHAR_REGEXP = /[^+*\d]/g;
|
|
@@ -12159,6 +12231,11 @@ class Phone extends Emitter {
|
|
|
12159
12231
|
return this.getRemoteVideoStream(callSession);
|
|
12160
12232
|
}
|
|
12161
12233
|
|
|
12234
|
+
// Useful in a react-native environment when remoteMediaStream is not updated
|
|
12235
|
+
getRemoteVideoStreamFromPc(callSession ) {
|
|
12236
|
+
return this.phone ? this.phone.getRemoteVideoStreamFromPc(callSession) : false;
|
|
12237
|
+
}
|
|
12238
|
+
|
|
12162
12239
|
hasVideo(callSession ) {
|
|
12163
12240
|
return this.phone ? this.phone.hasVideo(callSession) : false;
|
|
12164
12241
|
}
|
|
@@ -13118,7 +13195,7 @@ class Room extends Emitter {
|
|
|
13118
13195
|
}
|
|
13119
13196
|
|
|
13120
13197
|
_mapMsid(rawSdp ) {
|
|
13121
|
-
const sdp = sdpParser__default[
|
|
13198
|
+
const sdp = sdpParser__default['default'].parse(rawSdp);
|
|
13122
13199
|
const labelMsidArray = sdp.media.filter(media => !!media.label).map(({ label, msid }) => ({
|
|
13123
13200
|
label: String(label),
|
|
13124
13201
|
streamId: msid.split(' ')[0],
|