@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/esm/domain/Features.js
CHANGED
|
@@ -382,7 +382,7 @@ class IssueReporter {
|
|
|
382
382
|
payload._retry = retry + 1;
|
|
383
383
|
}
|
|
384
384
|
|
|
385
|
-
this._sendDebugToGrafana(
|
|
385
|
+
this._sendDebugToGrafana(payload, retry + 1);
|
|
386
386
|
}, 5000 + retry * 1000);
|
|
387
387
|
});
|
|
388
388
|
}
|
|
@@ -2585,7 +2585,8 @@ class ExternalApp {
|
|
|
2585
2585
|
|
|
2586
2586
|
|
|
2587
2587
|
|
|
2588
|
-
|
|
2588
|
+
|
|
2589
|
+
|
|
2589
2590
|
|
|
2590
2591
|
|
|
2591
2592
|
class Meeting {
|
|
@@ -2597,6 +2598,7 @@ class Meeting {
|
|
|
2597
2598
|
|
|
2598
2599
|
|
|
2599
2600
|
|
|
2601
|
+
|
|
2600
2602
|
|
|
2601
2603
|
|
|
2602
2604
|
static parse(plain ) {
|
|
@@ -2608,6 +2610,7 @@ class Meeting {
|
|
|
2608
2610
|
port: plain.port,
|
|
2609
2611
|
uuid: plain.uuid,
|
|
2610
2612
|
number: plain.number,
|
|
2613
|
+
persistent: plain.persistent,
|
|
2611
2614
|
});
|
|
2612
2615
|
}
|
|
2613
2616
|
|
|
@@ -2615,7 +2618,7 @@ class Meeting {
|
|
|
2615
2618
|
return newFrom(meeting, Meeting);
|
|
2616
2619
|
}
|
|
2617
2620
|
|
|
2618
|
-
constructor({ uuid, name, guestSipAuthorization, ownerUuids, port, uri, number } = {}) {
|
|
2621
|
+
constructor({ uuid, name, guestSipAuthorization, ownerUuids, port, uri, number, persistent } = {}) {
|
|
2619
2622
|
this.guestSipAuthorization = guestSipAuthorization;
|
|
2620
2623
|
this.uri = uri;
|
|
2621
2624
|
this.name = name;
|
|
@@ -2623,6 +2626,7 @@ class Meeting {
|
|
|
2623
2626
|
this.port = port;
|
|
2624
2627
|
this.uuid = uuid;
|
|
2625
2628
|
this.number = number;
|
|
2629
|
+
this.persistent = persistent;
|
|
2626
2630
|
|
|
2627
2631
|
// Useful to compare instead of instanceof with minified code
|
|
2628
2632
|
this.type = 'Meeting';
|
|
@@ -3186,7 +3190,7 @@ class Recording {
|
|
|
3186
3190
|
|
|
3187
3191
|
|
|
3188
3192
|
|
|
3189
|
-
static parseMany(recordings
|
|
3193
|
+
static parseMany(recordings = []) {
|
|
3190
3194
|
return recordings.map(item => Recording.parse(item));
|
|
3191
3195
|
}
|
|
3192
3196
|
|
|
@@ -3312,7 +3316,7 @@ class CallLog {
|
|
|
3312
3316
|
duration: (plain.duration || 0) * 1000, // duration is in seconds
|
|
3313
3317
|
start: moment(plain.start).toDate(),
|
|
3314
3318
|
end: plain.end ? moment(plain.end).toDate() : null,
|
|
3315
|
-
recordings: Recording.parseMany(plain.recordings),
|
|
3319
|
+
recordings: Recording.parseMany(plain.recordings || []),
|
|
3316
3320
|
});
|
|
3317
3321
|
}
|
|
3318
3322
|
|
package/esm/domain/Meeting.js
CHANGED
|
@@ -18,7 +18,8 @@ var newFrom = (instance , ToClass ) => {
|
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
|
|
22
|
+
|
|
22
23
|
|
|
23
24
|
|
|
24
25
|
class Meeting {
|
|
@@ -30,6 +31,7 @@ class Meeting {
|
|
|
30
31
|
|
|
31
32
|
|
|
32
33
|
|
|
34
|
+
|
|
33
35
|
|
|
34
36
|
|
|
35
37
|
static parse(plain ) {
|
|
@@ -41,6 +43,7 @@ class Meeting {
|
|
|
41
43
|
port: plain.port,
|
|
42
44
|
uuid: plain.uuid,
|
|
43
45
|
number: plain.number,
|
|
46
|
+
persistent: plain.persistent,
|
|
44
47
|
});
|
|
45
48
|
}
|
|
46
49
|
|
|
@@ -48,7 +51,7 @@ class Meeting {
|
|
|
48
51
|
return newFrom(meeting, Meeting);
|
|
49
52
|
}
|
|
50
53
|
|
|
51
|
-
constructor({ uuid, name, guestSipAuthorization, ownerUuids, port, uri, number } = {}) {
|
|
54
|
+
constructor({ uuid, name, guestSipAuthorization, ownerUuids, port, uri, number, persistent } = {}) {
|
|
52
55
|
this.guestSipAuthorization = guestSipAuthorization;
|
|
53
56
|
this.uri = uri;
|
|
54
57
|
this.name = name;
|
|
@@ -56,6 +59,7 @@ class Meeting {
|
|
|
56
59
|
this.port = port;
|
|
57
60
|
this.uuid = uuid;
|
|
58
61
|
this.number = number;
|
|
62
|
+
this.persistent = persistent;
|
|
59
63
|
|
|
60
64
|
// Useful to compare instead of instanceof with minified code
|
|
61
65
|
this.type = 'Meeting';
|
|
@@ -2092,7 +2092,7 @@ class Recording {
|
|
|
2092
2092
|
|
|
2093
2093
|
|
|
2094
2094
|
|
|
2095
|
-
static parseMany(recordings
|
|
2095
|
+
static parseMany(recordings = []) {
|
|
2096
2096
|
return recordings.map(item => Recording.parse(item));
|
|
2097
2097
|
}
|
|
2098
2098
|
|
|
@@ -2218,7 +2218,7 @@ class CallLog {
|
|
|
2218
2218
|
duration: (plain.duration || 0) * 1000, // duration is in seconds
|
|
2219
2219
|
start: moment(plain.start).toDate(),
|
|
2220
2220
|
end: plain.end ? moment(plain.end).toDate() : null,
|
|
2221
|
-
recordings: Recording.parseMany(plain.recordings),
|
|
2221
|
+
recordings: Recording.parseMany(plain.recordings || []),
|
|
2222
2222
|
});
|
|
2223
2223
|
}
|
|
2224
2224
|
|
|
@@ -2762,7 +2762,7 @@ class IssueReporter {
|
|
|
2762
2762
|
payload._retry = retry + 1;
|
|
2763
2763
|
}
|
|
2764
2764
|
|
|
2765
|
-
this._sendDebugToGrafana(
|
|
2765
|
+
this._sendDebugToGrafana(payload, retry + 1);
|
|
2766
2766
|
}, 5000 + retry * 1000);
|
|
2767
2767
|
});
|
|
2768
2768
|
}
|
|
@@ -3480,7 +3480,8 @@ class ExternalApp {
|
|
|
3480
3480
|
|
|
3481
3481
|
|
|
3482
3482
|
|
|
3483
|
-
|
|
3483
|
+
|
|
3484
|
+
|
|
3484
3485
|
|
|
3485
3486
|
|
|
3486
3487
|
class Meeting {
|
|
@@ -3492,6 +3493,7 @@ class Meeting {
|
|
|
3492
3493
|
|
|
3493
3494
|
|
|
3494
3495
|
|
|
3496
|
+
|
|
3495
3497
|
|
|
3496
3498
|
|
|
3497
3499
|
static parse(plain ) {
|
|
@@ -3503,6 +3505,7 @@ class Meeting {
|
|
|
3503
3505
|
port: plain.port,
|
|
3504
3506
|
uuid: plain.uuid,
|
|
3505
3507
|
number: plain.number,
|
|
3508
|
+
persistent: plain.persistent,
|
|
3506
3509
|
});
|
|
3507
3510
|
}
|
|
3508
3511
|
|
|
@@ -3510,7 +3513,7 @@ class Meeting {
|
|
|
3510
3513
|
return newFrom(meeting, Meeting);
|
|
3511
3514
|
}
|
|
3512
3515
|
|
|
3513
|
-
constructor({ uuid, name, guestSipAuthorization, ownerUuids, port, uri, number } = {}) {
|
|
3516
|
+
constructor({ uuid, name, guestSipAuthorization, ownerUuids, port, uri, number, persistent } = {}) {
|
|
3514
3517
|
this.guestSipAuthorization = guestSipAuthorization;
|
|
3515
3518
|
this.uri = uri;
|
|
3516
3519
|
this.name = name;
|
|
@@ -3518,6 +3521,7 @@ class Meeting {
|
|
|
3518
3521
|
this.port = port;
|
|
3519
3522
|
this.uuid = uuid;
|
|
3520
3523
|
this.number = number;
|
|
3524
|
+
this.persistent = persistent;
|
|
3521
3525
|
|
|
3522
3526
|
// Useful to compare instead of instanceof with minified code
|
|
3523
3527
|
this.type = 'Meeting';
|
|
@@ -739,7 +739,7 @@ class IssueReporter {
|
|
|
739
739
|
payload._retry = retry + 1;
|
|
740
740
|
}
|
|
741
741
|
|
|
742
|
-
this._sendDebugToGrafana(
|
|
742
|
+
this._sendDebugToGrafana(payload, retry + 1);
|
|
743
743
|
}, 5000 + retry * 1000);
|
|
744
744
|
});
|
|
745
745
|
}
|
|
@@ -877,6 +877,7 @@ const ON_MESSAGE_TRACK_UPDATED = 'onTrackUpdated';
|
|
|
877
877
|
const ON_NETWORK_STATS = 'onNetworkStats';
|
|
878
878
|
const ON_CHAT = 'phone/ON_CHAT';
|
|
879
879
|
const ON_SIGNAL = 'phone/ON_SIGNAL';
|
|
880
|
+
const ON_DISCONNECTED = 'onDisconnected';
|
|
880
881
|
|
|
881
882
|
const MESSAGE_TYPE_CHAT = 'message/TYPE_CHAT';
|
|
882
883
|
const MESSAGE_TYPE_SIGNAL = 'message/TYPE_SIGNAL';
|
|
@@ -916,6 +917,7 @@ const events = [
|
|
|
916
917
|
ON_CHAT,
|
|
917
918
|
ON_SIGNAL,
|
|
918
919
|
ON_NETWORK_STATS,
|
|
920
|
+
ON_DISCONNECTED,
|
|
919
921
|
];
|
|
920
922
|
|
|
921
923
|
const logger = IssueReporter$1.loggerFor('webrtc-phone');
|
|
@@ -2268,6 +2270,11 @@ class WebRTCPhone extends Emitter {
|
|
|
2268
2270
|
this.eventEmitter.emit(ON_UNREGISTERED);
|
|
2269
2271
|
});
|
|
2270
2272
|
|
|
2273
|
+
this.client.on(this.client.ON_DISCONNECTED, () => {
|
|
2274
|
+
logger.info('WebRTC disconnected');
|
|
2275
|
+
this.eventEmitter.emit(ON_DISCONNECTED);
|
|
2276
|
+
});
|
|
2277
|
+
|
|
2271
2278
|
this.client.on(this.client.REGISTERED, () => {
|
|
2272
2279
|
logger.info('WebRTC registered', {
|
|
2273
2280
|
shouldSendReinvite: this.shouldSendReinvite,
|
|
@@ -2484,4 +2491,4 @@ class WebRTCPhone extends Emitter {
|
|
|
2484
2491
|
}
|
|
2485
2492
|
|
|
2486
2493
|
export default WebRTCPhone;
|
|
2487
|
-
export { MESSAGE_TYPE_CHAT, MESSAGE_TYPE_SIGNAL, ON_AUDIO_STREAM, ON_CALL_ACCEPTED, ON_CALL_ANSWERED, ON_CALL_CANCELED, ON_CALL_ENDED, ON_CALL_ENDING, ON_CALL_ERROR, ON_CALL_FAILED, ON_CALL_HELD, ON_CALL_INCOMING, ON_CALL_MUTED, ON_CALL_OUTGOING, ON_CALL_RESUMED, ON_CALL_UNHELD, ON_CALL_UNMUTED, ON_CAMERA_DISABLED, ON_CAMERA_RESUMED, ON_CHAT, ON_MESSAGE, ON_MESSAGE_TRACK_UPDATED, ON_NETWORK_STATS, ON_PLAY_HANGUP_SOUND, ON_PLAY_INBOUND_CALL_SIGNAL_SOUND, ON_PLAY_PROGRESS_SOUND, ON_PLAY_RING_SOUND, ON_PROGRESS, ON_REGISTERED, ON_REINVITE, ON_REMOVE_STREAM, ON_SHARE_SCREEN_ENDED, ON_SHARE_SCREEN_ENDING, ON_SHARE_SCREEN_STARTED, ON_SIGNAL, ON_TERMINATE_SOUND, ON_TRACK, ON_UNREGISTERED, ON_USER_AGENT, ON_VIDEO_INPUT_CHANGE, ON_VIDEO_STREAM, events };
|
|
2494
|
+
export { MESSAGE_TYPE_CHAT, MESSAGE_TYPE_SIGNAL, ON_AUDIO_STREAM, ON_CALL_ACCEPTED, ON_CALL_ANSWERED, ON_CALL_CANCELED, ON_CALL_ENDED, ON_CALL_ENDING, ON_CALL_ERROR, ON_CALL_FAILED, ON_CALL_HELD, ON_CALL_INCOMING, ON_CALL_MUTED, ON_CALL_OUTGOING, ON_CALL_RESUMED, ON_CALL_UNHELD, ON_CALL_UNMUTED, ON_CAMERA_DISABLED, ON_CAMERA_RESUMED, ON_CHAT, ON_DISCONNECTED, ON_MESSAGE, ON_MESSAGE_TRACK_UPDATED, ON_NETWORK_STATS, ON_PLAY_HANGUP_SOUND, ON_PLAY_INBOUND_CALL_SIGNAL_SOUND, ON_PLAY_PROGRESS_SOUND, ON_PLAY_RING_SOUND, ON_PROGRESS, ON_REGISTERED, ON_REINVITE, ON_REMOVE_STREAM, ON_SHARE_SCREEN_ENDED, ON_SHARE_SCREEN_ENDING, ON_SHARE_SCREEN_STARTED, ON_SIGNAL, ON_TERMINATE_SOUND, ON_TRACK, ON_UNREGISTERED, ON_USER_AGENT, ON_VIDEO_INPUT_CHANGE, ON_VIDEO_STREAM, events };
|
package/esm/domain/Recording.js
CHANGED
|
@@ -53,7 +53,7 @@ class Recording {
|
|
|
53
53
|
|
|
54
54
|
|
|
55
55
|
|
|
56
|
-
static parseMany(recordings
|
|
56
|
+
static parseMany(recordings = []) {
|
|
57
57
|
return recordings.map(item => Recording.parse(item));
|
|
58
58
|
}
|
|
59
59
|
|
|
@@ -179,7 +179,7 @@ class CallLog {
|
|
|
179
179
|
duration: (plain.duration || 0) * 1000, // duration is in seconds
|
|
180
180
|
start: moment(plain.start).toDate(),
|
|
181
181
|
end: plain.end ? moment(plain.end).toDate() : null,
|
|
182
|
-
recordings: Recording.parseMany(plain.recordings),
|
|
182
|
+
recordings: Recording.parseMany(plain.recordings || []),
|
|
183
183
|
});
|
|
184
184
|
}
|
|
185
185
|
|
package/esm/index.js
CHANGED
|
@@ -402,7 +402,7 @@ class IssueReporter {
|
|
|
402
402
|
payload._retry = retry + 1;
|
|
403
403
|
}
|
|
404
404
|
|
|
405
|
-
this._sendDebugToGrafana(
|
|
405
|
+
this._sendDebugToGrafana(payload, retry + 1);
|
|
406
406
|
}, 5000 + retry * 1000);
|
|
407
407
|
});
|
|
408
408
|
}
|
|
@@ -2605,7 +2605,8 @@ class ExternalApp {
|
|
|
2605
2605
|
|
|
2606
2606
|
|
|
2607
2607
|
|
|
2608
|
-
|
|
2608
|
+
|
|
2609
|
+
|
|
2609
2610
|
|
|
2610
2611
|
|
|
2611
2612
|
class Meeting {
|
|
@@ -2617,6 +2618,7 @@ class Meeting {
|
|
|
2617
2618
|
|
|
2618
2619
|
|
|
2619
2620
|
|
|
2621
|
+
|
|
2620
2622
|
|
|
2621
2623
|
|
|
2622
2624
|
static parse(plain ) {
|
|
@@ -2628,6 +2630,7 @@ class Meeting {
|
|
|
2628
2630
|
port: plain.port,
|
|
2629
2631
|
uuid: plain.uuid,
|
|
2630
2632
|
number: plain.number,
|
|
2633
|
+
persistent: plain.persistent,
|
|
2631
2634
|
});
|
|
2632
2635
|
}
|
|
2633
2636
|
|
|
@@ -2635,7 +2638,7 @@ class Meeting {
|
|
|
2635
2638
|
return newFrom(meeting, Meeting);
|
|
2636
2639
|
}
|
|
2637
2640
|
|
|
2638
|
-
constructor({ uuid, name, guestSipAuthorization, ownerUuids, port, uri, number } = {}) {
|
|
2641
|
+
constructor({ uuid, name, guestSipAuthorization, ownerUuids, port, uri, number, persistent } = {}) {
|
|
2639
2642
|
this.guestSipAuthorization = guestSipAuthorization;
|
|
2640
2643
|
this.uri = uri;
|
|
2641
2644
|
this.name = name;
|
|
@@ -2643,6 +2646,7 @@ class Meeting {
|
|
|
2643
2646
|
this.port = port;
|
|
2644
2647
|
this.uuid = uuid;
|
|
2645
2648
|
this.number = number;
|
|
2649
|
+
this.persistent = persistent;
|
|
2646
2650
|
|
|
2647
2651
|
// Useful to compare instead of instanceof with minified code
|
|
2648
2652
|
this.type = 'Meeting';
|
|
@@ -3577,7 +3581,7 @@ class Recording {
|
|
|
3577
3581
|
|
|
3578
3582
|
|
|
3579
3583
|
|
|
3580
|
-
static parseMany(recordings
|
|
3584
|
+
static parseMany(recordings = []) {
|
|
3581
3585
|
return recordings.map(item => Recording.parse(item));
|
|
3582
3586
|
}
|
|
3583
3587
|
|
|
@@ -3703,7 +3707,7 @@ class CallLog {
|
|
|
3703
3707
|
duration: (plain.duration || 0) * 1000, // duration is in seconds
|
|
3704
3708
|
start: moment(plain.start).toDate(),
|
|
3705
3709
|
end: plain.end ? moment(plain.end).toDate() : null,
|
|
3706
|
-
recordings: Recording.parseMany(plain.recordings),
|
|
3710
|
+
recordings: Recording.parseMany(plain.recordings || []),
|
|
3707
3711
|
});
|
|
3708
3712
|
}
|
|
3709
3713
|
|
|
@@ -6109,6 +6113,7 @@ const ON_REINVITE$1 = 'reinvite';
|
|
|
6109
6113
|
const ON_ERROR = 'onError';
|
|
6110
6114
|
const ON_SCREEN_SHARING_REINVITE = 'onScreenSharingReinvite';
|
|
6111
6115
|
const ON_NETWORK_STATS$1 = 'onNetworkStats';
|
|
6116
|
+
const ON_DISCONNECTED$1 = 'onDisconnected';
|
|
6112
6117
|
|
|
6113
6118
|
const events$1 = [REGISTERED, UNREGISTERED, REGISTRATION_FAILED, INVITE];
|
|
6114
6119
|
const transportEvents = [CONNECTED, DISCONNECTED, TRANSPORT_ERROR, MESSAGE];
|
|
@@ -6185,6 +6190,7 @@ class WebRTCClient extends Emitter {
|
|
|
6185
6190
|
|
|
6186
6191
|
|
|
6187
6192
|
|
|
6193
|
+
|
|
6188
6194
|
|
|
6189
6195
|
static isAPrivateIp(ip ) {
|
|
6190
6196
|
const regex = /^(?:10|127|172\.(?:1[6-9]|2[0-9]|3[01])|192\.168)\..*/;
|
|
@@ -6250,6 +6256,7 @@ class WebRTCClient extends Emitter {
|
|
|
6250
6256
|
this.ON_ERROR = ON_ERROR;
|
|
6251
6257
|
this.ON_SCREEN_SHARING_REINVITE = ON_SCREEN_SHARING_REINVITE;
|
|
6252
6258
|
this.ON_NETWORK_STATS = ON_NETWORK_STATS$1;
|
|
6259
|
+
this.ON_DISCONNECTED = ON_DISCONNECTED$1;
|
|
6253
6260
|
}
|
|
6254
6261
|
|
|
6255
6262
|
configureMedia(media ) {
|
|
@@ -6851,7 +6858,7 @@ class WebRTCClient extends Emitter {
|
|
|
6851
6858
|
// We search for the last transceiver without `video-` in the mid (video- means remote transceiver)
|
|
6852
6859
|
const transceivers = pc.getTransceivers();
|
|
6853
6860
|
const transceiverIdx = lastIndexOf(transceivers, transceiver =>
|
|
6854
|
-
transceiver.sender.track === null && transceiver.mid.indexOf('video') === -1);
|
|
6861
|
+
transceiver.sender.track === null && transceiver.mid && transceiver.mid.indexOf('video') === -1);
|
|
6855
6862
|
|
|
6856
6863
|
videoSender = transceiverIdx !== -1 ? transceivers[transceiverIdx].sender : null;
|
|
6857
6864
|
} else {
|
|
@@ -7097,10 +7104,13 @@ class WebRTCClient extends Emitter {
|
|
|
7097
7104
|
return null;
|
|
7098
7105
|
}
|
|
7099
7106
|
|
|
7100
|
-
// let's update the local value
|
|
7101
|
-
if (this.audio
|
|
7102
|
-
|
|
7103
|
-
|
|
7107
|
+
// let's update the local audio value
|
|
7108
|
+
if (this.audio) {
|
|
7109
|
+
this.audio = {
|
|
7110
|
+
deviceId: {
|
|
7111
|
+
exact: id,
|
|
7112
|
+
},
|
|
7113
|
+
};
|
|
7104
7114
|
}
|
|
7105
7115
|
|
|
7106
7116
|
if (session) {
|
|
@@ -7113,6 +7123,9 @@ class WebRTCClient extends Emitter {
|
|
|
7113
7123
|
const sender = pc && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
|
|
7114
7124
|
|
|
7115
7125
|
if (sender) {
|
|
7126
|
+
if (sender.track) {
|
|
7127
|
+
audioTrack.enabled = sender.track.enabled;
|
|
7128
|
+
}
|
|
7116
7129
|
sender.replaceTrack(audioTrack);
|
|
7117
7130
|
}
|
|
7118
7131
|
|
|
@@ -7137,7 +7150,7 @@ class WebRTCClient extends Emitter {
|
|
|
7137
7150
|
return null;
|
|
7138
7151
|
}
|
|
7139
7152
|
|
|
7140
|
-
// let's update the local value
|
|
7153
|
+
// let's update the local video value
|
|
7141
7154
|
if (this.video) {
|
|
7142
7155
|
this.video = {
|
|
7143
7156
|
deviceId: {
|
|
@@ -7172,12 +7185,21 @@ class WebRTCClient extends Emitter {
|
|
|
7172
7185
|
return navigator.mediaDevices.getUserMedia(constraints).then(async stream => {
|
|
7173
7186
|
const videoTrack = stream.getVideoTracks()[0];
|
|
7174
7187
|
let sender = pc && pc.getSenders().find(s => videoTrack && s && s.track && s.track.kind === videoTrack.kind);
|
|
7188
|
+
let wasTrackEnabled = false;
|
|
7175
7189
|
if (!sender) {
|
|
7176
7190
|
sender = pc && pc.getSenders().find(s => !s.track);
|
|
7177
7191
|
}
|
|
7178
7192
|
|
|
7179
7193
|
if (sender) {
|
|
7180
|
-
|
|
7194
|
+
// No video track means video not enabled
|
|
7195
|
+
wasTrackEnabled = sender.track ? sender.track.enabled : false;
|
|
7196
|
+
videoTrack.enabled = wasTrackEnabled;
|
|
7197
|
+
|
|
7198
|
+
if (!wasTrackEnabled) {
|
|
7199
|
+
videoTrack.stop();
|
|
7200
|
+
}
|
|
7201
|
+
|
|
7202
|
+
sender.replaceTrack(wasTrackEnabled ? videoTrack : null);
|
|
7181
7203
|
}
|
|
7182
7204
|
|
|
7183
7205
|
// let's update the local stream
|
|
@@ -7861,6 +7883,7 @@ class WebRTCClient extends Emitter {
|
|
|
7861
7883
|
|
|
7862
7884
|
this.updateRemoteStream(this.getSipSessionId(session));
|
|
7863
7885
|
|
|
7886
|
+
const pc = session.sessionDescriptionHandler.peerConnection;
|
|
7864
7887
|
const onTrack = (event ) => {
|
|
7865
7888
|
const isAudioOnly = this._isAudioOnly(session);
|
|
7866
7889
|
const { kind, label, readyState, id, muted } = event.track;
|
|
@@ -7880,6 +7903,12 @@ class WebRTCClient extends Emitter {
|
|
|
7880
7903
|
|
|
7881
7904
|
session.sessionDescriptionHandler.remoteMediaStream.onaddtrack = onTrack;
|
|
7882
7905
|
|
|
7906
|
+
pc.oniceconnectionstatechange = () => {
|
|
7907
|
+
if (pc.iceConnectionState === 'disconnected') {
|
|
7908
|
+
this.eventEmitter.emit(ON_DISCONNECTED$1);
|
|
7909
|
+
}
|
|
7910
|
+
};
|
|
7911
|
+
|
|
7883
7912
|
if (withEvent) {
|
|
7884
7913
|
this.eventEmitter.emit(ACCEPTED, session, sessionDialog);
|
|
7885
7914
|
}
|
|
@@ -8075,24 +8104,89 @@ class WebRTCClient extends Emitter {
|
|
|
8075
8104
|
const session = this.getSipSession(sessionId);
|
|
8076
8105
|
|
|
8077
8106
|
const stats = session ? await this.getStats(session) : null;
|
|
8078
|
-
if (!stats) {
|
|
8107
|
+
if (!stats || !(sessionId in this.sessionNetworkStats)) {
|
|
8079
8108
|
return;
|
|
8080
8109
|
}
|
|
8081
8110
|
|
|
8082
|
-
|
|
8083
|
-
|
|
8084
|
-
|
|
8085
|
-
|
|
8086
|
-
|
|
8087
|
-
|
|
8088
|
-
|
|
8089
|
-
|
|
8111
|
+
const networkStats = {
|
|
8112
|
+
audioBytesSent: 0,
|
|
8113
|
+
videoBytesSent: 0,
|
|
8114
|
+
videoBytesReceived: 0,
|
|
8115
|
+
audioBytesReceived: 0,
|
|
8116
|
+
};
|
|
8117
|
+
const nbStats = this.sessionNetworkStats[sessionId].length;
|
|
8118
|
+
const lastNetworkStats = this.sessionNetworkStats[sessionId][nbStats - 1];
|
|
8119
|
+
const lastAudioSent = lastNetworkStats ? lastNetworkStats.audioBytesSent : 0;
|
|
8120
|
+
const lastVideoSent = lastNetworkStats ? lastNetworkStats.videoBytesSent : 0;
|
|
8121
|
+
const lastAudioReceived = lastNetworkStats ? lastNetworkStats.audioBytesReceived : 0;
|
|
8122
|
+
const lastVideoReceived = lastNetworkStats ? lastNetworkStats.videoBytesReceived : 0;
|
|
8123
|
+
const lastTransportSent = lastNetworkStats ? lastNetworkStats.transportSent : 0;
|
|
8124
|
+
const lastTransportReceived = lastNetworkStats ? lastNetworkStats.transportReceived : 0;
|
|
8125
|
+
let audioBytesSent = 0;
|
|
8126
|
+
let audioBytesReceived = 0;
|
|
8127
|
+
let videoBytesSent = 0;
|
|
8128
|
+
let videoBytesReceived = 0;
|
|
8129
|
+
let transportSent = 0;
|
|
8130
|
+
let transportReceived = 0;
|
|
8131
|
+
let packetsLost = 0;
|
|
8090
8132
|
|
|
8091
|
-
|
|
8092
|
-
|
|
8133
|
+
stats.forEach(report => {
|
|
8134
|
+
if (report.type === 'outbound-rtp' && report.kind === 'audio') {
|
|
8135
|
+
audioBytesSent += report.bytesSent + report.headerBytesSent;
|
|
8136
|
+
}
|
|
8137
|
+
if (report.type === 'remote-outbound-rtp' && report.kind === 'audio') {
|
|
8138
|
+
audioBytesSent += report.bytesSent;
|
|
8139
|
+
}
|
|
8140
|
+
if (report.type === 'outbound-rtp' && report.kind === 'video') {
|
|
8141
|
+
videoBytesSent += report.bytesSent + report.headerBytesSent;
|
|
8142
|
+
}
|
|
8143
|
+
if (report.type === 'inbound-rtp' && report.kind === 'audio') {
|
|
8144
|
+
packetsLost += report.packetsLost;
|
|
8145
|
+
networkStats.packetsReceived = report.packetsReceived;
|
|
8146
|
+
audioBytesReceived += report.bytesReceived + report.headerBytesReceived;
|
|
8147
|
+
}
|
|
8148
|
+
if (report.type === 'inbound-rtp' && report.kind === 'video') {
|
|
8149
|
+
videoBytesReceived += report.bytesReceived + report.headerBytesReceived;
|
|
8150
|
+
}
|
|
8151
|
+
if (report.type === 'outbound-rtp' && report.kind === 'video') {
|
|
8152
|
+
if ('framesPerSecond' in report) {
|
|
8153
|
+
networkStats.framesPerSecond = report.framesPerSecond;
|
|
8154
|
+
}
|
|
8155
|
+
if ('framerateMean' in report) {
|
|
8156
|
+
// framerateMean is only available in FF
|
|
8157
|
+
networkStats.framesPerSecond = Math.round(report.framerateMean);
|
|
8093
8158
|
}
|
|
8094
8159
|
}
|
|
8160
|
+
if (report.type === 'remote-inbound-rtp' && report.kind === 'audio') {
|
|
8161
|
+
packetsLost += report.packetsLost;
|
|
8162
|
+
networkStats.roundTripTime = report.roundTripTime;
|
|
8163
|
+
networkStats.jitter = report.jitter;
|
|
8164
|
+
}
|
|
8165
|
+
if (report.type === 'remote-inbound-rtp' && report.kind === 'video') {
|
|
8166
|
+
packetsLost += report.packetsLost;
|
|
8167
|
+
}
|
|
8168
|
+
if (report.type === 'transport') {
|
|
8169
|
+
transportSent += report.bytesSent;
|
|
8170
|
+
transportReceived += report.bytesReceived;
|
|
8171
|
+
}
|
|
8095
8172
|
});
|
|
8173
|
+
|
|
8174
|
+
networkStats.packetsLost = packetsLost;
|
|
8175
|
+
networkStats.audioBytesSent = audioBytesSent;
|
|
8176
|
+
networkStats.audioBytesReceived = audioBytesReceived;
|
|
8177
|
+
networkStats.videoBytesSent = videoBytesSent;
|
|
8178
|
+
networkStats.videoBytesReceived = videoBytesReceived;
|
|
8179
|
+
networkStats.transportSent = transportSent;
|
|
8180
|
+
networkStats.transportReceived = transportReceived;
|
|
8181
|
+
|
|
8182
|
+
const bandwidth = (networkStats.audioBytesSent - lastAudioSent) + (networkStats.videoBytesSent - lastVideoSent)
|
|
8183
|
+
+ (networkStats.audioBytesReceived - lastAudioReceived) + (networkStats.videoBytesReceived - lastVideoReceived)
|
|
8184
|
+
+ (networkStats.transportReceived - lastTransportReceived) + (networkStats.transportSent - lastTransportSent);
|
|
8185
|
+
|
|
8186
|
+
networkStats.bandwidth = bandwidth;
|
|
8187
|
+
|
|
8188
|
+
this.eventEmitter.emit(ON_NETWORK_STATS$1, session, networkStats, this.sessionNetworkStats[sessionId]);
|
|
8189
|
+
this.sessionNetworkStats[sessionId].push(networkStats);
|
|
8096
8190
|
}
|
|
8097
8191
|
|
|
8098
8192
|
}
|
|
@@ -9028,6 +9122,7 @@ const ON_MESSAGE_TRACK_UPDATED = 'onTrackUpdated';
|
|
|
9028
9122
|
const ON_NETWORK_STATS = 'onNetworkStats';
|
|
9029
9123
|
const ON_CHAT = 'phone/ON_CHAT';
|
|
9030
9124
|
const ON_SIGNAL = 'phone/ON_SIGNAL';
|
|
9125
|
+
const ON_DISCONNECTED = 'onDisconnected';
|
|
9031
9126
|
|
|
9032
9127
|
const MESSAGE_TYPE_CHAT = 'message/TYPE_CHAT';
|
|
9033
9128
|
const MESSAGE_TYPE_SIGNAL = 'message/TYPE_SIGNAL';
|
|
@@ -9067,6 +9162,7 @@ const events = [
|
|
|
9067
9162
|
ON_CHAT,
|
|
9068
9163
|
ON_SIGNAL,
|
|
9069
9164
|
ON_NETWORK_STATS,
|
|
9165
|
+
ON_DISCONNECTED,
|
|
9070
9166
|
];
|
|
9071
9167
|
|
|
9072
9168
|
const logger$7 = IssueReporter$1.loggerFor('webrtc-phone');
|
|
@@ -10419,6 +10515,11 @@ class WebRTCPhone extends Emitter {
|
|
|
10419
10515
|
this.eventEmitter.emit(ON_UNREGISTERED);
|
|
10420
10516
|
});
|
|
10421
10517
|
|
|
10518
|
+
this.client.on(this.client.ON_DISCONNECTED, () => {
|
|
10519
|
+
logger$7.info('WebRTC disconnected');
|
|
10520
|
+
this.eventEmitter.emit(ON_DISCONNECTED);
|
|
10521
|
+
});
|
|
10522
|
+
|
|
10422
10523
|
this.client.on(this.client.REGISTERED, () => {
|
|
10423
10524
|
logger$7.info('WebRTC registered', {
|
|
10424
10525
|
shouldSendReinvite: this.shouldSendReinvite,
|
|
@@ -10675,6 +10776,7 @@ var PHONE_EVENTS = /*#__PURE__*/Object.freeze({
|
|
|
10675
10776
|
ON_NETWORK_STATS: ON_NETWORK_STATS,
|
|
10676
10777
|
ON_CHAT: ON_CHAT,
|
|
10677
10778
|
ON_SIGNAL: ON_SIGNAL,
|
|
10779
|
+
ON_DISCONNECTED: ON_DISCONNECTED,
|
|
10678
10780
|
MESSAGE_TYPE_CHAT: MESSAGE_TYPE_CHAT,
|
|
10679
10781
|
MESSAGE_TYPE_SIGNAL: MESSAGE_TYPE_SIGNAL,
|
|
10680
10782
|
events: events,
|
package/esm/service/CallApi.js
CHANGED
|
@@ -1705,7 +1705,7 @@ class Recording {
|
|
|
1705
1705
|
|
|
1706
1706
|
|
|
1707
1707
|
|
|
1708
|
-
static parseMany(recordings
|
|
1708
|
+
static parseMany(recordings = []) {
|
|
1709
1709
|
return recordings.map(item => Recording.parse(item));
|
|
1710
1710
|
}
|
|
1711
1711
|
|
|
@@ -1831,7 +1831,7 @@ class CallLog {
|
|
|
1831
1831
|
duration: (plain.duration || 0) * 1000, // duration is in seconds
|
|
1832
1832
|
start: moment(plain.start).toDate(),
|
|
1833
1833
|
end: plain.end ? moment(plain.end).toDate() : null,
|
|
1834
|
-
recordings: Recording.parseMany(plain.recordings),
|
|
1834
|
+
recordings: Recording.parseMany(plain.recordings || []),
|
|
1835
1835
|
});
|
|
1836
1836
|
}
|
|
1837
1837
|
|
|
@@ -2391,7 +2391,7 @@ class IssueReporter {
|
|
|
2391
2391
|
payload._retry = retry + 1;
|
|
2392
2392
|
}
|
|
2393
2393
|
|
|
2394
|
-
this._sendDebugToGrafana(
|
|
2394
|
+
this._sendDebugToGrafana(payload, retry + 1);
|
|
2395
2395
|
}, 5000 + retry * 1000);
|
|
2396
2396
|
});
|
|
2397
2397
|
}
|
|
@@ -3109,7 +3109,8 @@ class ExternalApp {
|
|
|
3109
3109
|
|
|
3110
3110
|
|
|
3111
3111
|
|
|
3112
|
-
|
|
3112
|
+
|
|
3113
|
+
|
|
3113
3114
|
|
|
3114
3115
|
|
|
3115
3116
|
class Meeting {
|
|
@@ -3121,6 +3122,7 @@ class Meeting {
|
|
|
3121
3122
|
|
|
3122
3123
|
|
|
3123
3124
|
|
|
3125
|
+
|
|
3124
3126
|
|
|
3125
3127
|
|
|
3126
3128
|
static parse(plain ) {
|
|
@@ -3132,6 +3134,7 @@ class Meeting {
|
|
|
3132
3134
|
port: plain.port,
|
|
3133
3135
|
uuid: plain.uuid,
|
|
3134
3136
|
number: plain.number,
|
|
3137
|
+
persistent: plain.persistent,
|
|
3135
3138
|
});
|
|
3136
3139
|
}
|
|
3137
3140
|
|
|
@@ -3139,7 +3142,7 @@ class Meeting {
|
|
|
3139
3142
|
return newFrom(meeting, Meeting);
|
|
3140
3143
|
}
|
|
3141
3144
|
|
|
3142
|
-
constructor({ uuid, name, guestSipAuthorization, ownerUuids, port, uri, number } = {}) {
|
|
3145
|
+
constructor({ uuid, name, guestSipAuthorization, ownerUuids, port, uri, number, persistent } = {}) {
|
|
3143
3146
|
this.guestSipAuthorization = guestSipAuthorization;
|
|
3144
3147
|
this.uri = uri;
|
|
3145
3148
|
this.name = name;
|
|
@@ -3147,6 +3150,7 @@ class Meeting {
|
|
|
3147
3150
|
this.port = port;
|
|
3148
3151
|
this.uuid = uuid;
|
|
3149
3152
|
this.number = number;
|
|
3153
|
+
this.persistent = persistent;
|
|
3150
3154
|
|
|
3151
3155
|
// Useful to compare instead of instanceof with minified code
|
|
3152
3156
|
this.type = 'Meeting';
|