@wazo/sdk 0.37.15 → 0.37.19
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 +3 -3
- package/esm/__tests__/api-client.test.js +9 -5
- package/esm/__tests__/web-rtc-client.test.js +117 -23
- package/esm/api/agentd.js +1 -1
- package/esm/api/amid.js +1 -1
- package/esm/api/application.js +1 -1
- package/esm/api/auth.js +1 -1
- package/esm/api/call-logd.js +3 -3
- package/esm/api/calld.js +1 -1
- package/esm/api/chatd.js +1 -1
- package/esm/api/confd.js +7 -3
- package/esm/api/ctid-ng.js +1 -1
- package/esm/api/dird.js +1 -1
- package/esm/api/webhookd.js +1 -1
- package/esm/api-client.js +9 -5
- package/esm/checker/Checker.js +117 -23
- package/esm/checker/checks/aor.js +9 -5
- package/esm/checker/checks/api.js +9 -5
- package/esm/checker/checks/index.js +117 -23
- package/esm/checker/checks/wazo-websocket.js +1 -1
- package/esm/checker/checks/webrtc-transport.js +117 -23
- package/esm/checker/checks/webrtc.js +117 -23
- package/esm/domain/AdHocAPIConference.js +9 -5
- package/esm/domain/CallLog.js +2 -2
- package/esm/domain/Features.js +9 -5
- package/esm/domain/Meeting.js +6 -2
- package/esm/domain/Phone/CTIPhone.js +9 -5
- package/esm/domain/Phone/WebRTCPhone.js +9 -2
- package/esm/domain/Recording.js +1 -1
- package/esm/domain/__tests__/CallLog.test.js +2 -2
- package/esm/index.js +125 -23
- package/esm/lib/WazoSessionDescriptionHandler.js +1 -1
- package/esm/service/CallApi.js +9 -5
- package/esm/service/IssueReporter.js +1 -1
- package/esm/service/__tests__/IssueReporter.test.js +1 -1
- package/esm/service/getApiClient.js +9 -5
- package/esm/simple/Auth.js +125 -23
- package/esm/simple/Configuration.js +125 -23
- package/esm/simple/Directory.js +9 -5
- package/esm/simple/Phone.js +125 -23
- package/esm/simple/Websocket.js +1 -1
- package/esm/simple/index.js +125 -23
- package/esm/simple/room/LocalParticipant.js +125 -23
- package/esm/simple/room/Participant.js +125 -23
- package/esm/simple/room/RemoteParticipant.js +125 -23
- package/esm/simple/room/Room.js +125 -23
- package/esm/simple/room/SipRoom.js +125 -23
- package/esm/simple/room/Stream.js +125 -23
- package/esm/simple/room/__tests__/RemoteParticipant.test.js +125 -23
- package/esm/simple/utils.js +125 -23
- package/esm/utils/__tests__/api-requester.test.js +1 -1
- package/esm/utils/api-requester.js +1 -1
- package/esm/web-rtc-client.js +117 -23
- package/esm/websocket-client.js +1 -1
- package/lib/__tests__/api-client.test.js +9 -5
- package/lib/__tests__/web-rtc-client.test.js +117 -23
- package/lib/api/agentd.js +1 -1
- package/lib/api/amid.js +1 -1
- package/lib/api/application.js +1 -1
- package/lib/api/auth.js +1 -1
- package/lib/api/call-logd.js +3 -3
- package/lib/api/calld.js +1 -1
- package/lib/api/chatd.js +1 -1
- package/lib/api/confd.js +7 -3
- package/lib/api/ctid-ng.js +1 -1
- package/lib/api/dird.js +1 -1
- package/lib/api/webhookd.js +1 -1
- package/lib/api-client.js +9 -5
- package/lib/checker/Checker.js +117 -23
- package/lib/checker/checks/aor.js +9 -5
- package/lib/checker/checks/api.js +9 -5
- package/lib/checker/checks/index.js +117 -23
- package/lib/checker/checks/wazo-websocket.js +1 -1
- package/lib/checker/checks/webrtc-transport.js +117 -23
- package/lib/checker/checks/webrtc.js +117 -23
- package/lib/domain/AdHocAPIConference.js +9 -5
- package/lib/domain/CallLog.js +2 -2
- package/lib/domain/Features.js +9 -5
- package/lib/domain/Meeting.js +6 -2
- package/lib/domain/Phone/CTIPhone.js +9 -5
- package/lib/domain/Phone/WebRTCPhone.js +9 -1
- package/lib/domain/Recording.js +1 -1
- package/lib/domain/__tests__/CallLog.test.js +2 -2
- package/lib/index.js +125 -23
- package/lib/lib/WazoSessionDescriptionHandler.js +1 -1
- package/lib/service/CallApi.js +9 -5
- package/lib/service/IssueReporter.js +1 -1
- package/lib/service/__tests__/IssueReporter.test.js +1 -1
- package/lib/service/getApiClient.js +9 -5
- package/lib/simple/Auth.js +125 -23
- package/lib/simple/Configuration.js +125 -23
- package/lib/simple/Directory.js +9 -5
- package/lib/simple/Phone.js +125 -23
- package/lib/simple/Websocket.js +1 -1
- package/lib/simple/index.js +125 -23
- package/lib/simple/room/LocalParticipant.js +125 -23
- package/lib/simple/room/Participant.js +125 -23
- package/lib/simple/room/RemoteParticipant.js +125 -23
- package/lib/simple/room/Room.js +125 -23
- package/lib/simple/room/SipRoom.js +125 -23
- package/lib/simple/room/Stream.js +125 -23
- package/lib/simple/room/__tests__/RemoteParticipant.test.js +125 -23
- package/lib/simple/utils.js +125 -23
- package/lib/utils/__tests__/api-requester.test.js +1 -1
- package/lib/utils/api-requester.js +1 -1
- package/lib/web-rtc-client.js +117 -23
- package/lib/websocket-client.js +1 -1
- package/package.json +1 -1
- package/src/domain/CallLog.js +1 -1
- package/src/domain/Meeting.js +6 -2
- package/src/domain/Phone/WebRTCPhone.js +7 -0
- package/src/domain/Recording.js +1 -1
- package/src/service/IssueReporter.js +1 -1
- package/src/web-rtc-client.js +108 -18
package/lib/domain/Features.js
CHANGED
|
@@ -390,7 +390,7 @@ class IssueReporter {
|
|
|
390
390
|
payload._retry = retry + 1;
|
|
391
391
|
}
|
|
392
392
|
|
|
393
|
-
this._sendDebugToGrafana(
|
|
393
|
+
this._sendDebugToGrafana(payload, retry + 1);
|
|
394
394
|
}, 5000 + retry * 1000);
|
|
395
395
|
});
|
|
396
396
|
}
|
|
@@ -2593,7 +2593,8 @@ class ExternalApp {
|
|
|
2593
2593
|
|
|
2594
2594
|
|
|
2595
2595
|
|
|
2596
|
-
|
|
2596
|
+
|
|
2597
|
+
|
|
2597
2598
|
|
|
2598
2599
|
|
|
2599
2600
|
class Meeting {
|
|
@@ -2605,6 +2606,7 @@ class Meeting {
|
|
|
2605
2606
|
|
|
2606
2607
|
|
|
2607
2608
|
|
|
2609
|
+
|
|
2608
2610
|
|
|
2609
2611
|
|
|
2610
2612
|
static parse(plain ) {
|
|
@@ -2616,6 +2618,7 @@ class Meeting {
|
|
|
2616
2618
|
port: plain.port,
|
|
2617
2619
|
uuid: plain.uuid,
|
|
2618
2620
|
number: plain.number,
|
|
2621
|
+
persistent: plain.persistent,
|
|
2619
2622
|
});
|
|
2620
2623
|
}
|
|
2621
2624
|
|
|
@@ -2623,7 +2626,7 @@ class Meeting {
|
|
|
2623
2626
|
return newFrom(meeting, Meeting);
|
|
2624
2627
|
}
|
|
2625
2628
|
|
|
2626
|
-
constructor({ uuid, name, guestSipAuthorization, ownerUuids, port, uri, number } = {}) {
|
|
2629
|
+
constructor({ uuid, name, guestSipAuthorization, ownerUuids, port, uri, number, persistent } = {}) {
|
|
2627
2630
|
this.guestSipAuthorization = guestSipAuthorization;
|
|
2628
2631
|
this.uri = uri;
|
|
2629
2632
|
this.name = name;
|
|
@@ -2631,6 +2634,7 @@ class Meeting {
|
|
|
2631
2634
|
this.port = port;
|
|
2632
2635
|
this.uuid = uuid;
|
|
2633
2636
|
this.number = number;
|
|
2637
|
+
this.persistent = persistent;
|
|
2634
2638
|
|
|
2635
2639
|
// Useful to compare instead of instanceof with minified code
|
|
2636
2640
|
this.type = 'Meeting';
|
|
@@ -3194,7 +3198,7 @@ class Recording {
|
|
|
3194
3198
|
|
|
3195
3199
|
|
|
3196
3200
|
|
|
3197
|
-
static parseMany(recordings
|
|
3201
|
+
static parseMany(recordings = []) {
|
|
3198
3202
|
return recordings.map(item => Recording.parse(item));
|
|
3199
3203
|
}
|
|
3200
3204
|
|
|
@@ -3320,7 +3324,7 @@ class CallLog {
|
|
|
3320
3324
|
duration: (plain.duration || 0) * 1000, // duration is in seconds
|
|
3321
3325
|
start: moment__default['default'](plain.start).toDate(),
|
|
3322
3326
|
end: plain.end ? moment__default['default'](plain.end).toDate() : null,
|
|
3323
|
-
recordings: Recording.parseMany(plain.recordings),
|
|
3327
|
+
recordings: Recording.parseMany(plain.recordings || []),
|
|
3324
3328
|
});
|
|
3325
3329
|
}
|
|
3326
3330
|
|
package/lib/domain/Meeting.js
CHANGED
|
@@ -20,7 +20,8 @@ var newFrom = (instance , ToClass ) => {
|
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
|
|
24
|
+
|
|
24
25
|
|
|
25
26
|
|
|
26
27
|
class Meeting {
|
|
@@ -32,6 +33,7 @@ class Meeting {
|
|
|
32
33
|
|
|
33
34
|
|
|
34
35
|
|
|
36
|
+
|
|
35
37
|
|
|
36
38
|
|
|
37
39
|
static parse(plain ) {
|
|
@@ -43,6 +45,7 @@ class Meeting {
|
|
|
43
45
|
port: plain.port,
|
|
44
46
|
uuid: plain.uuid,
|
|
45
47
|
number: plain.number,
|
|
48
|
+
persistent: plain.persistent,
|
|
46
49
|
});
|
|
47
50
|
}
|
|
48
51
|
|
|
@@ -50,7 +53,7 @@ class Meeting {
|
|
|
50
53
|
return newFrom(meeting, Meeting);
|
|
51
54
|
}
|
|
52
55
|
|
|
53
|
-
constructor({ uuid, name, guestSipAuthorization, ownerUuids, port, uri, number } = {}) {
|
|
56
|
+
constructor({ uuid, name, guestSipAuthorization, ownerUuids, port, uri, number, persistent } = {}) {
|
|
54
57
|
this.guestSipAuthorization = guestSipAuthorization;
|
|
55
58
|
this.uri = uri;
|
|
56
59
|
this.name = name;
|
|
@@ -58,6 +61,7 @@ class Meeting {
|
|
|
58
61
|
this.port = port;
|
|
59
62
|
this.uuid = uuid;
|
|
60
63
|
this.number = number;
|
|
64
|
+
this.persistent = persistent;
|
|
61
65
|
|
|
62
66
|
// Useful to compare instead of instanceof with minified code
|
|
63
67
|
this.type = 'Meeting';
|
|
@@ -2101,7 +2101,7 @@ class Recording {
|
|
|
2101
2101
|
|
|
2102
2102
|
|
|
2103
2103
|
|
|
2104
|
-
static parseMany(recordings
|
|
2104
|
+
static parseMany(recordings = []) {
|
|
2105
2105
|
return recordings.map(item => Recording.parse(item));
|
|
2106
2106
|
}
|
|
2107
2107
|
|
|
@@ -2227,7 +2227,7 @@ class CallLog {
|
|
|
2227
2227
|
duration: (plain.duration || 0) * 1000, // duration is in seconds
|
|
2228
2228
|
start: moment__default['default'](plain.start).toDate(),
|
|
2229
2229
|
end: plain.end ? moment__default['default'](plain.end).toDate() : null,
|
|
2230
|
-
recordings: Recording.parseMany(plain.recordings),
|
|
2230
|
+
recordings: Recording.parseMany(plain.recordings || []),
|
|
2231
2231
|
});
|
|
2232
2232
|
}
|
|
2233
2233
|
|
|
@@ -2771,7 +2771,7 @@ class IssueReporter {
|
|
|
2771
2771
|
payload._retry = retry + 1;
|
|
2772
2772
|
}
|
|
2773
2773
|
|
|
2774
|
-
this._sendDebugToGrafana(
|
|
2774
|
+
this._sendDebugToGrafana(payload, retry + 1);
|
|
2775
2775
|
}, 5000 + retry * 1000);
|
|
2776
2776
|
});
|
|
2777
2777
|
}
|
|
@@ -3489,7 +3489,8 @@ class ExternalApp {
|
|
|
3489
3489
|
|
|
3490
3490
|
|
|
3491
3491
|
|
|
3492
|
-
|
|
3492
|
+
|
|
3493
|
+
|
|
3493
3494
|
|
|
3494
3495
|
|
|
3495
3496
|
class Meeting {
|
|
@@ -3501,6 +3502,7 @@ class Meeting {
|
|
|
3501
3502
|
|
|
3502
3503
|
|
|
3503
3504
|
|
|
3505
|
+
|
|
3504
3506
|
|
|
3505
3507
|
|
|
3506
3508
|
static parse(plain ) {
|
|
@@ -3512,6 +3514,7 @@ class Meeting {
|
|
|
3512
3514
|
port: plain.port,
|
|
3513
3515
|
uuid: plain.uuid,
|
|
3514
3516
|
number: plain.number,
|
|
3517
|
+
persistent: plain.persistent,
|
|
3515
3518
|
});
|
|
3516
3519
|
}
|
|
3517
3520
|
|
|
@@ -3519,7 +3522,7 @@ class Meeting {
|
|
|
3519
3522
|
return newFrom(meeting, Meeting);
|
|
3520
3523
|
}
|
|
3521
3524
|
|
|
3522
|
-
constructor({ uuid, name, guestSipAuthorization, ownerUuids, port, uri, number } = {}) {
|
|
3525
|
+
constructor({ uuid, name, guestSipAuthorization, ownerUuids, port, uri, number, persistent } = {}) {
|
|
3523
3526
|
this.guestSipAuthorization = guestSipAuthorization;
|
|
3524
3527
|
this.uri = uri;
|
|
3525
3528
|
this.name = name;
|
|
@@ -3527,6 +3530,7 @@ class Meeting {
|
|
|
3527
3530
|
this.port = port;
|
|
3528
3531
|
this.uuid = uuid;
|
|
3529
3532
|
this.number = number;
|
|
3533
|
+
this.persistent = persistent;
|
|
3530
3534
|
|
|
3531
3535
|
// Useful to compare instead of instanceof with minified code
|
|
3532
3536
|
this.type = 'Meeting';
|
|
@@ -748,7 +748,7 @@ class IssueReporter {
|
|
|
748
748
|
payload._retry = retry + 1;
|
|
749
749
|
}
|
|
750
750
|
|
|
751
|
-
this._sendDebugToGrafana(
|
|
751
|
+
this._sendDebugToGrafana(payload, retry + 1);
|
|
752
752
|
}, 5000 + retry * 1000);
|
|
753
753
|
});
|
|
754
754
|
}
|
|
@@ -886,6 +886,7 @@ const ON_MESSAGE_TRACK_UPDATED = 'onTrackUpdated';
|
|
|
886
886
|
const ON_NETWORK_STATS = 'onNetworkStats';
|
|
887
887
|
const ON_CHAT = 'phone/ON_CHAT';
|
|
888
888
|
const ON_SIGNAL = 'phone/ON_SIGNAL';
|
|
889
|
+
const ON_DISCONNECTED = 'onDisconnected';
|
|
889
890
|
|
|
890
891
|
const MESSAGE_TYPE_CHAT = 'message/TYPE_CHAT';
|
|
891
892
|
const MESSAGE_TYPE_SIGNAL = 'message/TYPE_SIGNAL';
|
|
@@ -925,6 +926,7 @@ const events = [
|
|
|
925
926
|
ON_CHAT,
|
|
926
927
|
ON_SIGNAL,
|
|
927
928
|
ON_NETWORK_STATS,
|
|
929
|
+
ON_DISCONNECTED,
|
|
928
930
|
];
|
|
929
931
|
|
|
930
932
|
const logger = IssueReporter$1.loggerFor('webrtc-phone');
|
|
@@ -2277,6 +2279,11 @@ class WebRTCPhone extends Emitter {
|
|
|
2277
2279
|
this.eventEmitter.emit(ON_UNREGISTERED);
|
|
2278
2280
|
});
|
|
2279
2281
|
|
|
2282
|
+
this.client.on(this.client.ON_DISCONNECTED, () => {
|
|
2283
|
+
logger.info('WebRTC disconnected');
|
|
2284
|
+
this.eventEmitter.emit(ON_DISCONNECTED);
|
|
2285
|
+
});
|
|
2286
|
+
|
|
2280
2287
|
this.client.on(this.client.REGISTERED, () => {
|
|
2281
2288
|
logger.info('WebRTC registered', {
|
|
2282
2289
|
shouldSendReinvite: this.shouldSendReinvite,
|
|
@@ -2512,6 +2519,7 @@ exports.ON_CALL_UNMUTED = ON_CALL_UNMUTED;
|
|
|
2512
2519
|
exports.ON_CAMERA_DISABLED = ON_CAMERA_DISABLED;
|
|
2513
2520
|
exports.ON_CAMERA_RESUMED = ON_CAMERA_RESUMED;
|
|
2514
2521
|
exports.ON_CHAT = ON_CHAT;
|
|
2522
|
+
exports.ON_DISCONNECTED = ON_DISCONNECTED;
|
|
2515
2523
|
exports.ON_MESSAGE = ON_MESSAGE;
|
|
2516
2524
|
exports.ON_MESSAGE_TRACK_UPDATED = ON_MESSAGE_TRACK_UPDATED;
|
|
2517
2525
|
exports.ON_NETWORK_STATS = ON_NETWORK_STATS;
|
package/lib/domain/Recording.js
CHANGED
|
@@ -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
|
|
|
@@ -185,7 +185,7 @@ class CallLog {
|
|
|
185
185
|
duration: (plain.duration || 0) * 1000, // duration is in seconds
|
|
186
186
|
start: moment__default['default'](plain.start).toDate(),
|
|
187
187
|
end: plain.end ? moment__default['default'](plain.end).toDate() : null,
|
|
188
|
-
recordings: Recording.parseMany(plain.recordings),
|
|
188
|
+
recordings: Recording.parseMany(plain.recordings || []),
|
|
189
189
|
});
|
|
190
190
|
}
|
|
191
191
|
|
package/lib/index.js
CHANGED
|
@@ -413,7 +413,7 @@ class IssueReporter {
|
|
|
413
413
|
payload._retry = retry + 1;
|
|
414
414
|
}
|
|
415
415
|
|
|
416
|
-
this._sendDebugToGrafana(
|
|
416
|
+
this._sendDebugToGrafana(payload, retry + 1);
|
|
417
417
|
}, 5000 + retry * 1000);
|
|
418
418
|
});
|
|
419
419
|
}
|
|
@@ -2616,7 +2616,8 @@ class ExternalApp {
|
|
|
2616
2616
|
|
|
2617
2617
|
|
|
2618
2618
|
|
|
2619
|
-
|
|
2619
|
+
|
|
2620
|
+
|
|
2620
2621
|
|
|
2621
2622
|
|
|
2622
2623
|
class Meeting {
|
|
@@ -2628,6 +2629,7 @@ class Meeting {
|
|
|
2628
2629
|
|
|
2629
2630
|
|
|
2630
2631
|
|
|
2632
|
+
|
|
2631
2633
|
|
|
2632
2634
|
|
|
2633
2635
|
static parse(plain ) {
|
|
@@ -2639,6 +2641,7 @@ class Meeting {
|
|
|
2639
2641
|
port: plain.port,
|
|
2640
2642
|
uuid: plain.uuid,
|
|
2641
2643
|
number: plain.number,
|
|
2644
|
+
persistent: plain.persistent,
|
|
2642
2645
|
});
|
|
2643
2646
|
}
|
|
2644
2647
|
|
|
@@ -2646,7 +2649,7 @@ class Meeting {
|
|
|
2646
2649
|
return newFrom(meeting, Meeting);
|
|
2647
2650
|
}
|
|
2648
2651
|
|
|
2649
|
-
constructor({ uuid, name, guestSipAuthorization, ownerUuids, port, uri, number } = {}) {
|
|
2652
|
+
constructor({ uuid, name, guestSipAuthorization, ownerUuids, port, uri, number, persistent } = {}) {
|
|
2650
2653
|
this.guestSipAuthorization = guestSipAuthorization;
|
|
2651
2654
|
this.uri = uri;
|
|
2652
2655
|
this.name = name;
|
|
@@ -2654,6 +2657,7 @@ class Meeting {
|
|
|
2654
2657
|
this.port = port;
|
|
2655
2658
|
this.uuid = uuid;
|
|
2656
2659
|
this.number = number;
|
|
2660
|
+
this.persistent = persistent;
|
|
2657
2661
|
|
|
2658
2662
|
// Useful to compare instead of instanceof with minified code
|
|
2659
2663
|
this.type = 'Meeting';
|
|
@@ -3588,7 +3592,7 @@ class Recording {
|
|
|
3588
3592
|
|
|
3589
3593
|
|
|
3590
3594
|
|
|
3591
|
-
static parseMany(recordings
|
|
3595
|
+
static parseMany(recordings = []) {
|
|
3592
3596
|
return recordings.map(item => Recording.parse(item));
|
|
3593
3597
|
}
|
|
3594
3598
|
|
|
@@ -3714,7 +3718,7 @@ class CallLog {
|
|
|
3714
3718
|
duration: (plain.duration || 0) * 1000, // duration is in seconds
|
|
3715
3719
|
start: moment__default['default'](plain.start).toDate(),
|
|
3716
3720
|
end: plain.end ? moment__default['default'](plain.end).toDate() : null,
|
|
3717
|
-
recordings: Recording.parseMany(plain.recordings),
|
|
3721
|
+
recordings: Recording.parseMany(plain.recordings || []),
|
|
3718
3722
|
});
|
|
3719
3723
|
}
|
|
3720
3724
|
|
|
@@ -6120,6 +6124,7 @@ const ON_REINVITE$1 = 'reinvite';
|
|
|
6120
6124
|
const ON_ERROR = 'onError';
|
|
6121
6125
|
const ON_SCREEN_SHARING_REINVITE = 'onScreenSharingReinvite';
|
|
6122
6126
|
const ON_NETWORK_STATS$1 = 'onNetworkStats';
|
|
6127
|
+
const ON_DISCONNECTED$1 = 'onDisconnected';
|
|
6123
6128
|
|
|
6124
6129
|
const events$1 = [REGISTERED, UNREGISTERED, REGISTRATION_FAILED, INVITE];
|
|
6125
6130
|
const transportEvents = [CONNECTED, DISCONNECTED, TRANSPORT_ERROR, MESSAGE];
|
|
@@ -6196,6 +6201,7 @@ class WebRTCClient extends Emitter {
|
|
|
6196
6201
|
|
|
6197
6202
|
|
|
6198
6203
|
|
|
6204
|
+
|
|
6199
6205
|
|
|
6200
6206
|
static isAPrivateIp(ip ) {
|
|
6201
6207
|
const regex = /^(?:10|127|172\.(?:1[6-9]|2[0-9]|3[01])|192\.168)\..*/;
|
|
@@ -6261,6 +6267,7 @@ class WebRTCClient extends Emitter {
|
|
|
6261
6267
|
this.ON_ERROR = ON_ERROR;
|
|
6262
6268
|
this.ON_SCREEN_SHARING_REINVITE = ON_SCREEN_SHARING_REINVITE;
|
|
6263
6269
|
this.ON_NETWORK_STATS = ON_NETWORK_STATS$1;
|
|
6270
|
+
this.ON_DISCONNECTED = ON_DISCONNECTED$1;
|
|
6264
6271
|
}
|
|
6265
6272
|
|
|
6266
6273
|
configureMedia(media ) {
|
|
@@ -6862,7 +6869,7 @@ class WebRTCClient extends Emitter {
|
|
|
6862
6869
|
// We search for the last transceiver without `video-` in the mid (video- means remote transceiver)
|
|
6863
6870
|
const transceivers = pc.getTransceivers();
|
|
6864
6871
|
const transceiverIdx = lastIndexOf(transceivers, transceiver =>
|
|
6865
|
-
transceiver.sender.track === null && transceiver.mid.indexOf('video') === -1);
|
|
6872
|
+
transceiver.sender.track === null && transceiver.mid && transceiver.mid.indexOf('video') === -1);
|
|
6866
6873
|
|
|
6867
6874
|
videoSender = transceiverIdx !== -1 ? transceivers[transceiverIdx].sender : null;
|
|
6868
6875
|
} else {
|
|
@@ -7108,10 +7115,13 @@ class WebRTCClient extends Emitter {
|
|
|
7108
7115
|
return null;
|
|
7109
7116
|
}
|
|
7110
7117
|
|
|
7111
|
-
// let's update the local value
|
|
7112
|
-
if (this.audio
|
|
7113
|
-
|
|
7114
|
-
|
|
7118
|
+
// let's update the local audio value
|
|
7119
|
+
if (this.audio) {
|
|
7120
|
+
this.audio = {
|
|
7121
|
+
deviceId: {
|
|
7122
|
+
exact: id,
|
|
7123
|
+
},
|
|
7124
|
+
};
|
|
7115
7125
|
}
|
|
7116
7126
|
|
|
7117
7127
|
if (session) {
|
|
@@ -7124,6 +7134,9 @@ class WebRTCClient extends Emitter {
|
|
|
7124
7134
|
const sender = pc && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
|
|
7125
7135
|
|
|
7126
7136
|
if (sender) {
|
|
7137
|
+
if (sender.track) {
|
|
7138
|
+
audioTrack.enabled = sender.track.enabled;
|
|
7139
|
+
}
|
|
7127
7140
|
sender.replaceTrack(audioTrack);
|
|
7128
7141
|
}
|
|
7129
7142
|
|
|
@@ -7148,7 +7161,7 @@ class WebRTCClient extends Emitter {
|
|
|
7148
7161
|
return null;
|
|
7149
7162
|
}
|
|
7150
7163
|
|
|
7151
|
-
// let's update the local value
|
|
7164
|
+
// let's update the local video value
|
|
7152
7165
|
if (this.video) {
|
|
7153
7166
|
this.video = {
|
|
7154
7167
|
deviceId: {
|
|
@@ -7183,12 +7196,21 @@ class WebRTCClient extends Emitter {
|
|
|
7183
7196
|
return navigator.mediaDevices.getUserMedia(constraints).then(async stream => {
|
|
7184
7197
|
const videoTrack = stream.getVideoTracks()[0];
|
|
7185
7198
|
let sender = pc && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
|
|
7199
|
+
let wasTrackEnabled = false;
|
|
7186
7200
|
if (!sender) {
|
|
7187
7201
|
sender = pc && pc.getSenders().find(s => !s.track);
|
|
7188
7202
|
}
|
|
7189
7203
|
|
|
7190
7204
|
if (sender) {
|
|
7191
|
-
|
|
7205
|
+
// No video track means video not enabled
|
|
7206
|
+
wasTrackEnabled = sender.track ? sender.track.enabled : false;
|
|
7207
|
+
videoTrack.enabled = wasTrackEnabled;
|
|
7208
|
+
|
|
7209
|
+
if (!wasTrackEnabled) {
|
|
7210
|
+
videoTrack.stop();
|
|
7211
|
+
}
|
|
7212
|
+
|
|
7213
|
+
sender.replaceTrack(wasTrackEnabled ? videoTrack : null);
|
|
7192
7214
|
}
|
|
7193
7215
|
|
|
7194
7216
|
// let's update the local stream
|
|
@@ -7872,6 +7894,7 @@ class WebRTCClient extends Emitter {
|
|
|
7872
7894
|
|
|
7873
7895
|
this.updateRemoteStream(this.getSipSessionId(session));
|
|
7874
7896
|
|
|
7897
|
+
const pc = session.sessionDescriptionHandler.peerConnection;
|
|
7875
7898
|
const onTrack = (event ) => {
|
|
7876
7899
|
const isAudioOnly = this._isAudioOnly(session);
|
|
7877
7900
|
const { kind, label, readyState, id, muted } = event.track;
|
|
@@ -7891,6 +7914,12 @@ class WebRTCClient extends Emitter {
|
|
|
7891
7914
|
|
|
7892
7915
|
session.sessionDescriptionHandler.remoteMediaStream.onaddtrack = onTrack;
|
|
7893
7916
|
|
|
7917
|
+
pc.oniceconnectionstatechange = () => {
|
|
7918
|
+
if (pc.iceConnectionState === 'disconnected') {
|
|
7919
|
+
this.eventEmitter.emit(ON_DISCONNECTED$1);
|
|
7920
|
+
}
|
|
7921
|
+
};
|
|
7922
|
+
|
|
7894
7923
|
if (withEvent) {
|
|
7895
7924
|
this.eventEmitter.emit(ACCEPTED, session, sessionDialog);
|
|
7896
7925
|
}
|
|
@@ -8086,24 +8115,89 @@ class WebRTCClient extends Emitter {
|
|
|
8086
8115
|
const session = this.getSipSession(sessionId);
|
|
8087
8116
|
|
|
8088
8117
|
const stats = session ? await this.getStats(session) : null;
|
|
8089
|
-
if (!stats) {
|
|
8118
|
+
if (!stats || !(sessionId in this.sessionNetworkStats)) {
|
|
8090
8119
|
return;
|
|
8091
8120
|
}
|
|
8092
8121
|
|
|
8093
|
-
|
|
8094
|
-
|
|
8095
|
-
|
|
8096
|
-
|
|
8097
|
-
|
|
8098
|
-
|
|
8099
|
-
|
|
8100
|
-
|
|
8122
|
+
const networkStats = {
|
|
8123
|
+
audioBytesSent: 0,
|
|
8124
|
+
videoBytesSent: 0,
|
|
8125
|
+
videoBytesReceived: 0,
|
|
8126
|
+
audioBytesReceived: 0,
|
|
8127
|
+
};
|
|
8128
|
+
const nbStats = this.sessionNetworkStats[sessionId].length;
|
|
8129
|
+
const lastNetworkStats = this.sessionNetworkStats[sessionId][nbStats - 1];
|
|
8130
|
+
const lastAudioSent = lastNetworkStats ? lastNetworkStats.audioBytesSent : 0;
|
|
8131
|
+
const lastVideoSent = lastNetworkStats ? lastNetworkStats.videoBytesSent : 0;
|
|
8132
|
+
const lastAudioReceived = lastNetworkStats ? lastNetworkStats.audioBytesReceived : 0;
|
|
8133
|
+
const lastVideoReceived = lastNetworkStats ? lastNetworkStats.videoBytesReceived : 0;
|
|
8134
|
+
const lastTransportSent = lastNetworkStats ? lastNetworkStats.transportSent : 0;
|
|
8135
|
+
const lastTransportReceived = lastNetworkStats ? lastNetworkStats.transportReceived : 0;
|
|
8136
|
+
let audioBytesSent = 0;
|
|
8137
|
+
let audioBytesReceived = 0;
|
|
8138
|
+
let videoBytesSent = 0;
|
|
8139
|
+
let videoBytesReceived = 0;
|
|
8140
|
+
let transportSent = 0;
|
|
8141
|
+
let transportReceived = 0;
|
|
8142
|
+
let packetsLost = 0;
|
|
8101
8143
|
|
|
8102
|
-
|
|
8103
|
-
|
|
8144
|
+
stats.forEach(report => {
|
|
8145
|
+
if (report.type === 'outbound-rtp' && report.kind === 'audio') {
|
|
8146
|
+
audioBytesSent += report.bytesSent + report.headerBytesSent;
|
|
8147
|
+
}
|
|
8148
|
+
if (report.type === 'remote-outbound-rtp' && report.kind === 'audio') {
|
|
8149
|
+
audioBytesSent += report.bytesSent;
|
|
8150
|
+
}
|
|
8151
|
+
if (report.type === 'outbound-rtp' && report.kind === 'video') {
|
|
8152
|
+
videoBytesSent += report.bytesSent + report.headerBytesSent;
|
|
8153
|
+
}
|
|
8154
|
+
if (report.type === 'inbound-rtp' && report.kind === 'audio') {
|
|
8155
|
+
packetsLost += report.packetsLost;
|
|
8156
|
+
networkStats.packetsReceived = report.packetsReceived;
|
|
8157
|
+
audioBytesReceived += report.bytesReceived + report.headerBytesReceived;
|
|
8158
|
+
}
|
|
8159
|
+
if (report.type === 'inbound-rtp' && report.kind === 'video') {
|
|
8160
|
+
videoBytesReceived += report.bytesReceived + report.headerBytesReceived;
|
|
8161
|
+
}
|
|
8162
|
+
if (report.type === 'outbound-rtp' && report.kind === 'video') {
|
|
8163
|
+
if ('framesPerSecond' in report) {
|
|
8164
|
+
networkStats.framesPerSecond = report.framesPerSecond;
|
|
8165
|
+
}
|
|
8166
|
+
if ('framerateMean' in report) {
|
|
8167
|
+
// framerateMean is only available in FF
|
|
8168
|
+
networkStats.framesPerSecond = Math.round(report.framerateMean);
|
|
8104
8169
|
}
|
|
8105
8170
|
}
|
|
8171
|
+
if (report.type === 'remote-inbound-rtp' && report.kind === 'audio') {
|
|
8172
|
+
packetsLost += report.packetsLost;
|
|
8173
|
+
networkStats.roundTripTime = report.roundTripTime;
|
|
8174
|
+
networkStats.jitter = report.jitter;
|
|
8175
|
+
}
|
|
8176
|
+
if (report.type === 'remote-inbound-rtp' && report.kind === 'video') {
|
|
8177
|
+
packetsLost += report.packetsLost;
|
|
8178
|
+
}
|
|
8179
|
+
if (report.type === 'transport') {
|
|
8180
|
+
transportSent += report.bytesSent;
|
|
8181
|
+
transportReceived += report.bytesReceived;
|
|
8182
|
+
}
|
|
8106
8183
|
});
|
|
8184
|
+
|
|
8185
|
+
networkStats.packetsLost = packetsLost;
|
|
8186
|
+
networkStats.audioBytesSent = audioBytesSent;
|
|
8187
|
+
networkStats.audioBytesReceived = audioBytesReceived;
|
|
8188
|
+
networkStats.videoBytesSent = videoBytesSent;
|
|
8189
|
+
networkStats.videoBytesReceived = videoBytesReceived;
|
|
8190
|
+
networkStats.transportSent = transportSent;
|
|
8191
|
+
networkStats.transportReceived = transportReceived;
|
|
8192
|
+
|
|
8193
|
+
const bandwidth = (networkStats.audioBytesSent - lastAudioSent) + (networkStats.videoBytesSent - lastVideoSent)
|
|
8194
|
+
+ (networkStats.audioBytesReceived - lastAudioReceived) + (networkStats.videoBytesReceived - lastVideoReceived)
|
|
8195
|
+
+ (networkStats.transportReceived - lastTransportReceived) + (networkStats.transportSent - lastTransportSent);
|
|
8196
|
+
|
|
8197
|
+
networkStats.bandwidth = bandwidth;
|
|
8198
|
+
|
|
8199
|
+
this.eventEmitter.emit(ON_NETWORK_STATS$1, session, networkStats, this.sessionNetworkStats[sessionId]);
|
|
8200
|
+
this.sessionNetworkStats[sessionId].push(networkStats);
|
|
8107
8201
|
}
|
|
8108
8202
|
|
|
8109
8203
|
}
|
|
@@ -9039,6 +9133,7 @@ const ON_MESSAGE_TRACK_UPDATED = 'onTrackUpdated';
|
|
|
9039
9133
|
const ON_NETWORK_STATS = 'onNetworkStats';
|
|
9040
9134
|
const ON_CHAT = 'phone/ON_CHAT';
|
|
9041
9135
|
const ON_SIGNAL = 'phone/ON_SIGNAL';
|
|
9136
|
+
const ON_DISCONNECTED = 'onDisconnected';
|
|
9042
9137
|
|
|
9043
9138
|
const MESSAGE_TYPE_CHAT = 'message/TYPE_CHAT';
|
|
9044
9139
|
const MESSAGE_TYPE_SIGNAL = 'message/TYPE_SIGNAL';
|
|
@@ -9078,6 +9173,7 @@ const events = [
|
|
|
9078
9173
|
ON_CHAT,
|
|
9079
9174
|
ON_SIGNAL,
|
|
9080
9175
|
ON_NETWORK_STATS,
|
|
9176
|
+
ON_DISCONNECTED,
|
|
9081
9177
|
];
|
|
9082
9178
|
|
|
9083
9179
|
const logger$7 = IssueReporter$1.loggerFor('webrtc-phone');
|
|
@@ -10430,6 +10526,11 @@ class WebRTCPhone extends Emitter {
|
|
|
10430
10526
|
this.eventEmitter.emit(ON_UNREGISTERED);
|
|
10431
10527
|
});
|
|
10432
10528
|
|
|
10529
|
+
this.client.on(this.client.ON_DISCONNECTED, () => {
|
|
10530
|
+
logger$7.info('WebRTC disconnected');
|
|
10531
|
+
this.eventEmitter.emit(ON_DISCONNECTED);
|
|
10532
|
+
});
|
|
10533
|
+
|
|
10433
10534
|
this.client.on(this.client.REGISTERED, () => {
|
|
10434
10535
|
logger$7.info('WebRTC registered', {
|
|
10435
10536
|
shouldSendReinvite: this.shouldSendReinvite,
|
|
@@ -10686,6 +10787,7 @@ var PHONE_EVENTS = /*#__PURE__*/Object.freeze({
|
|
|
10686
10787
|
ON_NETWORK_STATS: ON_NETWORK_STATS,
|
|
10687
10788
|
ON_CHAT: ON_CHAT,
|
|
10688
10789
|
ON_SIGNAL: ON_SIGNAL,
|
|
10790
|
+
ON_DISCONNECTED: ON_DISCONNECTED,
|
|
10689
10791
|
MESSAGE_TYPE_CHAT: MESSAGE_TYPE_CHAT,
|
|
10690
10792
|
MESSAGE_TYPE_SIGNAL: MESSAGE_TYPE_SIGNAL,
|
|
10691
10793
|
events: events,
|
package/lib/service/CallApi.js
CHANGED
|
@@ -1711,7 +1711,7 @@ class Recording {
|
|
|
1711
1711
|
|
|
1712
1712
|
|
|
1713
1713
|
|
|
1714
|
-
static parseMany(recordings
|
|
1714
|
+
static parseMany(recordings = []) {
|
|
1715
1715
|
return recordings.map(item => Recording.parse(item));
|
|
1716
1716
|
}
|
|
1717
1717
|
|
|
@@ -1837,7 +1837,7 @@ class CallLog {
|
|
|
1837
1837
|
duration: (plain.duration || 0) * 1000, // duration is in seconds
|
|
1838
1838
|
start: moment__default['default'](plain.start).toDate(),
|
|
1839
1839
|
end: plain.end ? moment__default['default'](plain.end).toDate() : null,
|
|
1840
|
-
recordings: Recording.parseMany(plain.recordings),
|
|
1840
|
+
recordings: Recording.parseMany(plain.recordings || []),
|
|
1841
1841
|
});
|
|
1842
1842
|
}
|
|
1843
1843
|
|
|
@@ -2397,7 +2397,7 @@ class IssueReporter {
|
|
|
2397
2397
|
payload._retry = retry + 1;
|
|
2398
2398
|
}
|
|
2399
2399
|
|
|
2400
|
-
this._sendDebugToGrafana(
|
|
2400
|
+
this._sendDebugToGrafana(payload, retry + 1);
|
|
2401
2401
|
}, 5000 + retry * 1000);
|
|
2402
2402
|
});
|
|
2403
2403
|
}
|
|
@@ -3115,7 +3115,8 @@ class ExternalApp {
|
|
|
3115
3115
|
|
|
3116
3116
|
|
|
3117
3117
|
|
|
3118
|
-
|
|
3118
|
+
|
|
3119
|
+
|
|
3119
3120
|
|
|
3120
3121
|
|
|
3121
3122
|
class Meeting {
|
|
@@ -3127,6 +3128,7 @@ class Meeting {
|
|
|
3127
3128
|
|
|
3128
3129
|
|
|
3129
3130
|
|
|
3131
|
+
|
|
3130
3132
|
|
|
3131
3133
|
|
|
3132
3134
|
static parse(plain ) {
|
|
@@ -3138,6 +3140,7 @@ class Meeting {
|
|
|
3138
3140
|
port: plain.port,
|
|
3139
3141
|
uuid: plain.uuid,
|
|
3140
3142
|
number: plain.number,
|
|
3143
|
+
persistent: plain.persistent,
|
|
3141
3144
|
});
|
|
3142
3145
|
}
|
|
3143
3146
|
|
|
@@ -3145,7 +3148,7 @@ class Meeting {
|
|
|
3145
3148
|
return newFrom(meeting, Meeting);
|
|
3146
3149
|
}
|
|
3147
3150
|
|
|
3148
|
-
constructor({ uuid, name, guestSipAuthorization, ownerUuids, port, uri, number } = {}) {
|
|
3151
|
+
constructor({ uuid, name, guestSipAuthorization, ownerUuids, port, uri, number, persistent } = {}) {
|
|
3149
3152
|
this.guestSipAuthorization = guestSipAuthorization;
|
|
3150
3153
|
this.uri = uri;
|
|
3151
3154
|
this.name = name;
|
|
@@ -3153,6 +3156,7 @@ class Meeting {
|
|
|
3153
3156
|
this.port = port;
|
|
3154
3157
|
this.uuid = uuid;
|
|
3155
3158
|
this.number = number;
|
|
3159
|
+
this.persistent = persistent;
|
|
3156
3160
|
|
|
3157
3161
|
// Useful to compare instead of instanceof with minified code
|
|
3158
3162
|
this.type = 'Meeting';
|