@wazo/sdk 0.37.35 → 0.37.36
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/README.md +1 -0
- package/dist/wazo-sdk.js +2 -2
- package/esm/__tests__/api-client.test.js +7 -1
- package/esm/__tests__/web-rtc-client.test.js +7 -1
- package/esm/api/call-logd.js +1 -1
- package/esm/api/chatd.js +6 -0
- package/esm/api/confd.js +6 -0
- package/esm/api-client.js +7 -1
- package/esm/checker/Checker.js +7 -1
- package/esm/checker/checks/aor.js +7 -1
- package/esm/checker/checks/api.js +7 -1
- package/esm/checker/checks/index.js +7 -1
- package/esm/checker/checks/webrtc-transport.js +7 -1
- package/esm/checker/checks/webrtc.js +7 -1
- package/esm/domain/AdHocAPIConference.js +11 -1
- package/esm/domain/CallLog.js +1 -1
- package/esm/domain/CallSession.js +14 -0
- package/esm/domain/Features.js +7 -1
- package/esm/domain/Phone/CTIPhone.js +21 -1
- package/esm/domain/Phone/WebRTCPhone.js +42 -11
- package/esm/domain/Profile.js +6 -0
- package/esm/domain/__tests__/CallLog.test.js +5 -1
- package/esm/domain/__tests__/CallSession.test.js +14 -0
- package/esm/domain/__tests__/IndirectTransfer.test.js +14 -0
- package/esm/domain/__tests__/Profile.test.js +6 -0
- package/esm/domain/__tests__/Room.test.js +14 -0
- package/esm/domain/__tests__/Session.test.js +6 -0
- package/esm/index.js +59 -18
- package/esm/service/CallApi.js +7 -1
- package/esm/service/getApiClient.js +7 -1
- package/esm/simple/Auth.js +59 -18
- package/esm/simple/Configuration.js +59 -18
- package/esm/simple/Directory.js +7 -1
- package/esm/simple/Phone.js +59 -18
- package/esm/simple/index.js +59 -18
- package/esm/simple/room/LocalParticipant.js +59 -18
- package/esm/simple/room/Participant.js +59 -18
- package/esm/simple/room/RemoteParticipant.js +59 -18
- package/esm/simple/room/Room.js +59 -18
- package/esm/simple/room/SipRoom.js +59 -18
- package/esm/simple/room/Stream.js +59 -18
- package/esm/simple/room/__tests__/RemoteParticipant.test.js +59 -18
- package/esm/simple/utils.js +59 -18
- package/esm/web-rtc-client.js +7 -1
- package/lib/__tests__/api-client.test.js +7 -1
- package/lib/__tests__/web-rtc-client.test.js +7 -1
- package/lib/api/call-logd.js +1 -1
- package/lib/api/chatd.js +6 -0
- package/lib/api/confd.js +6 -0
- package/lib/api-client.js +7 -1
- package/lib/checker/Checker.js +7 -1
- package/lib/checker/checks/aor.js +7 -1
- package/lib/checker/checks/api.js +7 -1
- package/lib/checker/checks/index.js +7 -1
- package/lib/checker/checks/webrtc-transport.js +7 -1
- package/lib/checker/checks/webrtc.js +7 -1
- package/lib/domain/AdHocAPIConference.js +11 -1
- package/lib/domain/CallLog.js +1 -1
- package/lib/domain/CallSession.js +14 -0
- package/lib/domain/Features.js +7 -1
- package/lib/domain/Phone/CTIPhone.js +21 -1
- package/lib/domain/Phone/WebRTCPhone.js +42 -11
- package/lib/domain/Profile.js +6 -0
- package/lib/domain/__tests__/CallLog.test.js +5 -1
- package/lib/domain/__tests__/CallSession.test.js +14 -0
- package/lib/domain/__tests__/IndirectTransfer.test.js +14 -0
- package/lib/domain/__tests__/Profile.test.js +6 -0
- package/lib/domain/__tests__/Room.test.js +14 -0
- package/lib/domain/__tests__/Session.test.js +6 -0
- package/lib/index.js +59 -18
- package/lib/service/CallApi.js +7 -1
- package/lib/service/getApiClient.js +7 -1
- package/lib/simple/Auth.js +59 -18
- package/lib/simple/Configuration.js +59 -18
- package/lib/simple/Directory.js +7 -1
- package/lib/simple/Phone.js +59 -18
- package/lib/simple/index.js +59 -18
- package/lib/simple/room/LocalParticipant.js +59 -18
- package/lib/simple/room/Participant.js +59 -18
- package/lib/simple/room/RemoteParticipant.js +59 -18
- package/lib/simple/room/Room.js +59 -18
- package/lib/simple/room/SipRoom.js +59 -18
- package/lib/simple/room/Stream.js +59 -18
- package/lib/simple/room/__tests__/RemoteParticipant.test.js +59 -18
- package/lib/simple/utils.js +59 -18
- package/lib/web-rtc-client.js +7 -1
- package/package.json +1 -1
- package/src/domain/AdHocAPIConference.js +4 -0
- package/src/domain/CallLog.js +1 -1
- package/src/domain/CallSession.js +14 -0
- package/src/domain/Phone/WebRTCPhone.js +28 -11
- package/src/domain/Profile.js +6 -0
- package/src/domain/__tests__/CallLog.test.js +4 -0
- package/src/simple/Phone.js +6 -6
|
@@ -384,6 +384,7 @@ const LINE_STATE = {
|
|
|
384
384
|
|
|
385
385
|
|
|
386
386
|
|
|
387
|
+
|
|
387
388
|
|
|
388
389
|
|
|
389
390
|
|
|
@@ -420,6 +421,7 @@ const LINE_STATE = {
|
|
|
420
421
|
|
|
421
422
|
|
|
422
423
|
|
|
424
|
+
|
|
423
425
|
|
|
424
426
|
|
|
425
427
|
|
|
@@ -451,6 +453,7 @@ class Profile {
|
|
|
451
453
|
|
|
452
454
|
|
|
453
455
|
|
|
456
|
+
|
|
454
457
|
|
|
455
458
|
|
|
456
459
|
|
|
@@ -467,6 +470,7 @@ class Profile {
|
|
|
467
470
|
lines: plain.lines.map(line => Line.parse(line)),
|
|
468
471
|
username: plain.username,
|
|
469
472
|
mobileNumber: plain.mobile_phone_number || '',
|
|
473
|
+
ringSeconds: plain.ring_seconds,
|
|
470
474
|
forwards: [
|
|
471
475
|
ForwardOption.parse(plain.forwards.unconditional, FORWARD_KEYS.UNCONDITIONAL),
|
|
472
476
|
ForwardOption.parse(plain.forwards.noanswer, FORWARD_KEYS.NO_ANSWER),
|
|
@@ -503,6 +507,7 @@ class Profile {
|
|
|
503
507
|
switchboards,
|
|
504
508
|
agent,
|
|
505
509
|
status,
|
|
510
|
+
ringSeconds,
|
|
506
511
|
sipLines,
|
|
507
512
|
callPickupTargetUsers,
|
|
508
513
|
onlineCallRecordEnabled,
|
|
@@ -524,6 +529,7 @@ class Profile {
|
|
|
524
529
|
this.status = status;
|
|
525
530
|
this.callPickupTargetUsers = callPickupTargetUsers;
|
|
526
531
|
this.onlineCallRecordEnabled = onlineCallRecordEnabled;
|
|
532
|
+
this.ringSeconds = ringSeconds;
|
|
527
533
|
|
|
528
534
|
this.sipLines = sipLines || [];
|
|
529
535
|
}
|
|
@@ -3280,6 +3286,7 @@ var updateFrom = (instance , from ) => {
|
|
|
3280
3286
|
|
|
3281
3287
|
|
|
3282
3288
|
|
|
3289
|
+
|
|
3283
3290
|
|
|
3284
3291
|
|
|
3285
3292
|
class CallSession {
|
|
@@ -3342,6 +3349,8 @@ class CallSession {
|
|
|
3342
3349
|
|
|
3343
3350
|
|
|
3344
3351
|
|
|
3352
|
+
|
|
3353
|
+
|
|
3345
3354
|
|
|
3346
3355
|
|
|
3347
3356
|
|
|
@@ -3373,6 +3382,7 @@ class CallSession {
|
|
|
3373
3382
|
videoRemotelyDowngraded,
|
|
3374
3383
|
sipSession,
|
|
3375
3384
|
answerTime,
|
|
3385
|
+
conference,
|
|
3376
3386
|
} ) {
|
|
3377
3387
|
this.callId = callId;
|
|
3378
3388
|
this.sipCallId = sipCallId;
|
|
@@ -3401,6 +3411,7 @@ class CallSession {
|
|
|
3401
3411
|
this.videoRemotelyDowngraded = videoRemotelyDowngraded;
|
|
3402
3412
|
this.sipSession = sipSession;
|
|
3403
3413
|
this.answerTime = answerTime || this.answerTime;
|
|
3414
|
+
this.conference = conference;
|
|
3404
3415
|
|
|
3405
3416
|
// Useful to compare instead of instanceof with minified code
|
|
3406
3417
|
this.type = 'CallSession';
|
|
@@ -3458,6 +3469,10 @@ class CallSession {
|
|
|
3458
3469
|
this.screensharing = false;
|
|
3459
3470
|
}
|
|
3460
3471
|
|
|
3472
|
+
setIsConference(conference ) {
|
|
3473
|
+
this.conference = conference;
|
|
3474
|
+
}
|
|
3475
|
+
|
|
3461
3476
|
isIncoming() {
|
|
3462
3477
|
return !this.isCaller && !this.answered;
|
|
3463
3478
|
}
|
|
@@ -3534,6 +3549,10 @@ class CallSession {
|
|
|
3534
3549
|
return this.sipStatus === SessionState.Terminated;
|
|
3535
3550
|
}
|
|
3536
3551
|
|
|
3552
|
+
isConference() {
|
|
3553
|
+
return this.conference;
|
|
3554
|
+
}
|
|
3555
|
+
|
|
3537
3556
|
getElapsedTimeInSeconds() {
|
|
3538
3557
|
if (!this.startTime) {
|
|
3539
3558
|
return 0;
|
|
@@ -3625,6 +3644,7 @@ class CallSession {
|
|
|
3625
3644
|
cameraEnabled: false,
|
|
3626
3645
|
dialedExtension: call.dialedExtension,
|
|
3627
3646
|
call,
|
|
3647
|
+
conference: false, // @FIXME?
|
|
3628
3648
|
});
|
|
3629
3649
|
}
|
|
3630
3650
|
}
|
|
@@ -3720,7 +3740,7 @@ class Recording {
|
|
|
3720
3740
|
|
|
3721
3741
|
|
|
3722
3742
|
|
|
3723
|
-
|
|
3743
|
+
|
|
3724
3744
|
|
|
3725
3745
|
|
|
3726
3746
|
|
|
@@ -5920,6 +5940,10 @@ class AdHocAPIConference {
|
|
|
5920
5940
|
this.conferenceId = conferenceId || '';
|
|
5921
5941
|
this.muted = muted || false;
|
|
5922
5942
|
this.paused = paused || false;
|
|
5943
|
+
|
|
5944
|
+
if (this.host) {
|
|
5945
|
+
this.host.setIsConference(true);
|
|
5946
|
+
}
|
|
5923
5947
|
}
|
|
5924
5948
|
|
|
5925
5949
|
async start() {
|
|
@@ -9629,7 +9653,11 @@ class WebRTCPhone extends Emitter {
|
|
|
9629
9653
|
accept(callSession , cameraEnabled ) {
|
|
9630
9654
|
logger$7.info('WebRTC phone - accept call', { id: callSession ? callSession.getId() : 'n/a', cameraEnabled });
|
|
9631
9655
|
if (this.currentSipSession) {
|
|
9632
|
-
this.holdSipSession(
|
|
9656
|
+
this.holdSipSession(
|
|
9657
|
+
this.currentSipSession,
|
|
9658
|
+
this.currentCallSession,
|
|
9659
|
+
true,
|
|
9660
|
+
);
|
|
9633
9661
|
}
|
|
9634
9662
|
|
|
9635
9663
|
if (!callSession) {
|
|
@@ -9722,22 +9750,22 @@ class WebRTCPhone extends Emitter {
|
|
|
9722
9750
|
}
|
|
9723
9751
|
}
|
|
9724
9752
|
|
|
9725
|
-
hold(callSession , withEvent = true
|
|
9753
|
+
hold(callSession , withEvent = true) {
|
|
9726
9754
|
logger$7.info('WebRTC hold', { id: callSession.getId() });
|
|
9727
9755
|
|
|
9728
9756
|
const sipSession = this.findSipSession(callSession);
|
|
9729
9757
|
|
|
9730
|
-
return sipSession ? this.holdSipSession(sipSession, callSession, withEvent
|
|
9758
|
+
return sipSession ? this.holdSipSession(sipSession, callSession, withEvent) : null;
|
|
9731
9759
|
}
|
|
9732
9760
|
|
|
9733
9761
|
// @Deprecated
|
|
9734
|
-
unhold(callSession , withEvent = true
|
|
9762
|
+
unhold(callSession , withEvent = true) {
|
|
9735
9763
|
console.warn('Please note that `phone.unhold()` is being deprecated; `phone.resume()` is the preferred method');
|
|
9736
9764
|
|
|
9737
|
-
return this.resume(callSession,
|
|
9765
|
+
return this.resume(callSession, withEvent);
|
|
9738
9766
|
}
|
|
9739
9767
|
|
|
9740
|
-
resume(callSession ,
|
|
9768
|
+
resume(callSession , withEvent = true) {
|
|
9741
9769
|
logger$7.info('WebRTC resume called', { id: callSession ? callSession.getId() : null });
|
|
9742
9770
|
|
|
9743
9771
|
const sipSession = this.findSipSession(callSession);
|
|
@@ -9750,10 +9778,14 @@ class WebRTCPhone extends Emitter {
|
|
|
9750
9778
|
// Hold current session if different from the current one (we don't want 2 sessions active at the same time).
|
|
9751
9779
|
if (this.currentSipSession && this.currentSipSession.id !== sipSession.id) {
|
|
9752
9780
|
logger$7.info('WebRTC hold call after resume', { id: this.currentSipSession.id });
|
|
9753
|
-
this.holdSipSession(
|
|
9781
|
+
this.holdSipSession(
|
|
9782
|
+
this.currentSipSession,
|
|
9783
|
+
this.currentCallSession,
|
|
9784
|
+
withEvent,
|
|
9785
|
+
);
|
|
9754
9786
|
}
|
|
9755
9787
|
|
|
9756
|
-
const promise = this.unholdSipSession(sipSession, callSession, withEvent
|
|
9788
|
+
const promise = this.unholdSipSession(sipSession, callSession, withEvent);
|
|
9757
9789
|
this.currentSipSession = sipSession;
|
|
9758
9790
|
if (callSession) {
|
|
9759
9791
|
this.currentCallSession = callSession;
|
|
@@ -9766,7 +9798,6 @@ class WebRTCPhone extends Emitter {
|
|
|
9766
9798
|
sipSession ,
|
|
9767
9799
|
callSession ,
|
|
9768
9800
|
withEvent = true,
|
|
9769
|
-
isConference = false,
|
|
9770
9801
|
) {
|
|
9771
9802
|
if (!sipSession) {
|
|
9772
9803
|
return new Promise((resolve, reject) => reject(new Error('No session to hold')));
|
|
@@ -9787,6 +9818,8 @@ class WebRTCPhone extends Emitter {
|
|
|
9787
9818
|
await this.client.downgradeToAudio(sipSession);
|
|
9788
9819
|
}
|
|
9789
9820
|
|
|
9821
|
+
const isConference = !!callSession && callSession.isConference();
|
|
9822
|
+
|
|
9790
9823
|
const promise = this.client.hold(sipSession, isConference, hasVideo);
|
|
9791
9824
|
if (withEvent) {
|
|
9792
9825
|
this.eventEmitter.emit(ON_CALL_HELD, this._createCallSession(sipSession, callSession));
|
|
@@ -9799,11 +9832,13 @@ class WebRTCPhone extends Emitter {
|
|
|
9799
9832
|
sipSession ,
|
|
9800
9833
|
callSession ,
|
|
9801
9834
|
withEvent = true,
|
|
9802
|
-
isConference = false,
|
|
9803
9835
|
) {
|
|
9804
9836
|
if (!sipSession) {
|
|
9805
9837
|
return new Promise((resolve, reject) => reject(new Error('No session to unhold')));
|
|
9806
9838
|
}
|
|
9839
|
+
|
|
9840
|
+
const isConference = !!callSession && callSession.isConference();
|
|
9841
|
+
|
|
9807
9842
|
const sessionId = this.getSipSessionId(sipSession);
|
|
9808
9843
|
logger$7.info('WebRTC unhold sip session', { sessionId, isConference });
|
|
9809
9844
|
|
|
@@ -9945,7 +9980,11 @@ class WebRTCPhone extends Emitter {
|
|
|
9945
9980
|
await this.client.register();
|
|
9946
9981
|
}
|
|
9947
9982
|
if (this.currentSipSession) {
|
|
9948
|
-
this.holdSipSession(
|
|
9983
|
+
this.holdSipSession(
|
|
9984
|
+
this.currentSipSession,
|
|
9985
|
+
this.currentCallSession,
|
|
9986
|
+
true,
|
|
9987
|
+
).catch(e => {
|
|
9949
9988
|
logger$7.warn('Unable to hold current session when making another call', e);
|
|
9950
9989
|
});
|
|
9951
9990
|
}
|
|
@@ -9960,6 +9999,7 @@ class WebRTCPhone extends Emitter {
|
|
|
9960
9999
|
return Promise.resolve(null);
|
|
9961
10000
|
}
|
|
9962
10001
|
const callSession = this._createOutgoingCallSession(sipSession, cameraEnabled || false);
|
|
10002
|
+
callSession.setIsConference(conference);
|
|
9963
10003
|
callSession.creationTime = new Date();
|
|
9964
10004
|
this._updateCallSession(callSession);
|
|
9965
10005
|
|
|
@@ -10538,6 +10578,7 @@ class WebRTCPhone extends Emitter {
|
|
|
10538
10578
|
recording: fromSession ? fromSession.isRecording() : false,
|
|
10539
10579
|
recordingPaused: false, // @TODO
|
|
10540
10580
|
sipSession,
|
|
10581
|
+
conference: !!fromSession && fromSession.isConference(),
|
|
10541
10582
|
...extra,
|
|
10542
10583
|
});
|
|
10543
10584
|
|
|
@@ -10794,16 +10835,16 @@ class Phone extends Emitter {
|
|
|
10794
10835
|
}
|
|
10795
10836
|
}
|
|
10796
10837
|
|
|
10797
|
-
hold(callSession
|
|
10798
|
-
return this.phone && this.phone.hold(callSession, true
|
|
10838
|
+
hold(callSession ) {
|
|
10839
|
+
return this.phone && this.phone.hold(callSession, true);
|
|
10799
10840
|
}
|
|
10800
10841
|
|
|
10801
|
-
unhold(callSession
|
|
10802
|
-
return this.phone && this.phone.unhold(callSession, true
|
|
10842
|
+
unhold(callSession ) {
|
|
10843
|
+
return this.phone && this.phone.unhold(callSession, true);
|
|
10803
10844
|
}
|
|
10804
10845
|
|
|
10805
|
-
resume(callSession
|
|
10806
|
-
return this.phone && this.phone.resume(callSession
|
|
10846
|
+
resume(callSession ) {
|
|
10847
|
+
return this.phone && this.phone.resume(callSession);
|
|
10807
10848
|
}
|
|
10808
10849
|
|
|
10809
10850
|
reject(callSession ) {
|
package/esm/simple/utils.js
CHANGED
|
@@ -384,6 +384,7 @@ const LINE_STATE = {
|
|
|
384
384
|
|
|
385
385
|
|
|
386
386
|
|
|
387
|
+
|
|
387
388
|
|
|
388
389
|
|
|
389
390
|
|
|
@@ -420,6 +421,7 @@ const LINE_STATE = {
|
|
|
420
421
|
|
|
421
422
|
|
|
422
423
|
|
|
424
|
+
|
|
423
425
|
|
|
424
426
|
|
|
425
427
|
|
|
@@ -451,6 +453,7 @@ class Profile {
|
|
|
451
453
|
|
|
452
454
|
|
|
453
455
|
|
|
456
|
+
|
|
454
457
|
|
|
455
458
|
|
|
456
459
|
|
|
@@ -467,6 +470,7 @@ class Profile {
|
|
|
467
470
|
lines: plain.lines.map(line => Line.parse(line)),
|
|
468
471
|
username: plain.username,
|
|
469
472
|
mobileNumber: plain.mobile_phone_number || '',
|
|
473
|
+
ringSeconds: plain.ring_seconds,
|
|
470
474
|
forwards: [
|
|
471
475
|
ForwardOption.parse(plain.forwards.unconditional, FORWARD_KEYS.UNCONDITIONAL),
|
|
472
476
|
ForwardOption.parse(plain.forwards.noanswer, FORWARD_KEYS.NO_ANSWER),
|
|
@@ -503,6 +507,7 @@ class Profile {
|
|
|
503
507
|
switchboards,
|
|
504
508
|
agent,
|
|
505
509
|
status,
|
|
510
|
+
ringSeconds,
|
|
506
511
|
sipLines,
|
|
507
512
|
callPickupTargetUsers,
|
|
508
513
|
onlineCallRecordEnabled,
|
|
@@ -524,6 +529,7 @@ class Profile {
|
|
|
524
529
|
this.status = status;
|
|
525
530
|
this.callPickupTargetUsers = callPickupTargetUsers;
|
|
526
531
|
this.onlineCallRecordEnabled = onlineCallRecordEnabled;
|
|
532
|
+
this.ringSeconds = ringSeconds;
|
|
527
533
|
|
|
528
534
|
this.sipLines = sipLines || [];
|
|
529
535
|
}
|
|
@@ -3280,6 +3286,7 @@ var updateFrom = (instance , from ) => {
|
|
|
3280
3286
|
|
|
3281
3287
|
|
|
3282
3288
|
|
|
3289
|
+
|
|
3283
3290
|
|
|
3284
3291
|
|
|
3285
3292
|
class CallSession {
|
|
@@ -3342,6 +3349,8 @@ class CallSession {
|
|
|
3342
3349
|
|
|
3343
3350
|
|
|
3344
3351
|
|
|
3352
|
+
|
|
3353
|
+
|
|
3345
3354
|
|
|
3346
3355
|
|
|
3347
3356
|
|
|
@@ -3373,6 +3382,7 @@ class CallSession {
|
|
|
3373
3382
|
videoRemotelyDowngraded,
|
|
3374
3383
|
sipSession,
|
|
3375
3384
|
answerTime,
|
|
3385
|
+
conference,
|
|
3376
3386
|
} ) {
|
|
3377
3387
|
this.callId = callId;
|
|
3378
3388
|
this.sipCallId = sipCallId;
|
|
@@ -3401,6 +3411,7 @@ class CallSession {
|
|
|
3401
3411
|
this.videoRemotelyDowngraded = videoRemotelyDowngraded;
|
|
3402
3412
|
this.sipSession = sipSession;
|
|
3403
3413
|
this.answerTime = answerTime || this.answerTime;
|
|
3414
|
+
this.conference = conference;
|
|
3404
3415
|
|
|
3405
3416
|
// Useful to compare instead of instanceof with minified code
|
|
3406
3417
|
this.type = 'CallSession';
|
|
@@ -3458,6 +3469,10 @@ class CallSession {
|
|
|
3458
3469
|
this.screensharing = false;
|
|
3459
3470
|
}
|
|
3460
3471
|
|
|
3472
|
+
setIsConference(conference ) {
|
|
3473
|
+
this.conference = conference;
|
|
3474
|
+
}
|
|
3475
|
+
|
|
3461
3476
|
isIncoming() {
|
|
3462
3477
|
return !this.isCaller && !this.answered;
|
|
3463
3478
|
}
|
|
@@ -3534,6 +3549,10 @@ class CallSession {
|
|
|
3534
3549
|
return this.sipStatus === SessionState.Terminated;
|
|
3535
3550
|
}
|
|
3536
3551
|
|
|
3552
|
+
isConference() {
|
|
3553
|
+
return this.conference;
|
|
3554
|
+
}
|
|
3555
|
+
|
|
3537
3556
|
getElapsedTimeInSeconds() {
|
|
3538
3557
|
if (!this.startTime) {
|
|
3539
3558
|
return 0;
|
|
@@ -3625,6 +3644,7 @@ class CallSession {
|
|
|
3625
3644
|
cameraEnabled: false,
|
|
3626
3645
|
dialedExtension: call.dialedExtension,
|
|
3627
3646
|
call,
|
|
3647
|
+
conference: false, // @FIXME?
|
|
3628
3648
|
});
|
|
3629
3649
|
}
|
|
3630
3650
|
}
|
|
@@ -3720,7 +3740,7 @@ class Recording {
|
|
|
3720
3740
|
|
|
3721
3741
|
|
|
3722
3742
|
|
|
3723
|
-
|
|
3743
|
+
|
|
3724
3744
|
|
|
3725
3745
|
|
|
3726
3746
|
|
|
@@ -5920,6 +5940,10 @@ class AdHocAPIConference {
|
|
|
5920
5940
|
this.conferenceId = conferenceId || '';
|
|
5921
5941
|
this.muted = muted || false;
|
|
5922
5942
|
this.paused = paused || false;
|
|
5943
|
+
|
|
5944
|
+
if (this.host) {
|
|
5945
|
+
this.host.setIsConference(true);
|
|
5946
|
+
}
|
|
5923
5947
|
}
|
|
5924
5948
|
|
|
5925
5949
|
async start() {
|
|
@@ -9629,7 +9653,11 @@ class WebRTCPhone extends Emitter {
|
|
|
9629
9653
|
accept(callSession , cameraEnabled ) {
|
|
9630
9654
|
logger$7.info('WebRTC phone - accept call', { id: callSession ? callSession.getId() : 'n/a', cameraEnabled });
|
|
9631
9655
|
if (this.currentSipSession) {
|
|
9632
|
-
this.holdSipSession(
|
|
9656
|
+
this.holdSipSession(
|
|
9657
|
+
this.currentSipSession,
|
|
9658
|
+
this.currentCallSession,
|
|
9659
|
+
true,
|
|
9660
|
+
);
|
|
9633
9661
|
}
|
|
9634
9662
|
|
|
9635
9663
|
if (!callSession) {
|
|
@@ -9722,22 +9750,22 @@ class WebRTCPhone extends Emitter {
|
|
|
9722
9750
|
}
|
|
9723
9751
|
}
|
|
9724
9752
|
|
|
9725
|
-
hold(callSession , withEvent = true
|
|
9753
|
+
hold(callSession , withEvent = true) {
|
|
9726
9754
|
logger$7.info('WebRTC hold', { id: callSession.getId() });
|
|
9727
9755
|
|
|
9728
9756
|
const sipSession = this.findSipSession(callSession);
|
|
9729
9757
|
|
|
9730
|
-
return sipSession ? this.holdSipSession(sipSession, callSession, withEvent
|
|
9758
|
+
return sipSession ? this.holdSipSession(sipSession, callSession, withEvent) : null;
|
|
9731
9759
|
}
|
|
9732
9760
|
|
|
9733
9761
|
// @Deprecated
|
|
9734
|
-
unhold(callSession , withEvent = true
|
|
9762
|
+
unhold(callSession , withEvent = true) {
|
|
9735
9763
|
console.warn('Please note that `phone.unhold()` is being deprecated; `phone.resume()` is the preferred method');
|
|
9736
9764
|
|
|
9737
|
-
return this.resume(callSession,
|
|
9765
|
+
return this.resume(callSession, withEvent);
|
|
9738
9766
|
}
|
|
9739
9767
|
|
|
9740
|
-
resume(callSession ,
|
|
9768
|
+
resume(callSession , withEvent = true) {
|
|
9741
9769
|
logger$7.info('WebRTC resume called', { id: callSession ? callSession.getId() : null });
|
|
9742
9770
|
|
|
9743
9771
|
const sipSession = this.findSipSession(callSession);
|
|
@@ -9750,10 +9778,14 @@ class WebRTCPhone extends Emitter {
|
|
|
9750
9778
|
// Hold current session if different from the current one (we don't want 2 sessions active at the same time).
|
|
9751
9779
|
if (this.currentSipSession && this.currentSipSession.id !== sipSession.id) {
|
|
9752
9780
|
logger$7.info('WebRTC hold call after resume', { id: this.currentSipSession.id });
|
|
9753
|
-
this.holdSipSession(
|
|
9781
|
+
this.holdSipSession(
|
|
9782
|
+
this.currentSipSession,
|
|
9783
|
+
this.currentCallSession,
|
|
9784
|
+
withEvent,
|
|
9785
|
+
);
|
|
9754
9786
|
}
|
|
9755
9787
|
|
|
9756
|
-
const promise = this.unholdSipSession(sipSession, callSession, withEvent
|
|
9788
|
+
const promise = this.unholdSipSession(sipSession, callSession, withEvent);
|
|
9757
9789
|
this.currentSipSession = sipSession;
|
|
9758
9790
|
if (callSession) {
|
|
9759
9791
|
this.currentCallSession = callSession;
|
|
@@ -9766,7 +9798,6 @@ class WebRTCPhone extends Emitter {
|
|
|
9766
9798
|
sipSession ,
|
|
9767
9799
|
callSession ,
|
|
9768
9800
|
withEvent = true,
|
|
9769
|
-
isConference = false,
|
|
9770
9801
|
) {
|
|
9771
9802
|
if (!sipSession) {
|
|
9772
9803
|
return new Promise((resolve, reject) => reject(new Error('No session to hold')));
|
|
@@ -9787,6 +9818,8 @@ class WebRTCPhone extends Emitter {
|
|
|
9787
9818
|
await this.client.downgradeToAudio(sipSession);
|
|
9788
9819
|
}
|
|
9789
9820
|
|
|
9821
|
+
const isConference = !!callSession && callSession.isConference();
|
|
9822
|
+
|
|
9790
9823
|
const promise = this.client.hold(sipSession, isConference, hasVideo);
|
|
9791
9824
|
if (withEvent) {
|
|
9792
9825
|
this.eventEmitter.emit(ON_CALL_HELD, this._createCallSession(sipSession, callSession));
|
|
@@ -9799,11 +9832,13 @@ class WebRTCPhone extends Emitter {
|
|
|
9799
9832
|
sipSession ,
|
|
9800
9833
|
callSession ,
|
|
9801
9834
|
withEvent = true,
|
|
9802
|
-
isConference = false,
|
|
9803
9835
|
) {
|
|
9804
9836
|
if (!sipSession) {
|
|
9805
9837
|
return new Promise((resolve, reject) => reject(new Error('No session to unhold')));
|
|
9806
9838
|
}
|
|
9839
|
+
|
|
9840
|
+
const isConference = !!callSession && callSession.isConference();
|
|
9841
|
+
|
|
9807
9842
|
const sessionId = this.getSipSessionId(sipSession);
|
|
9808
9843
|
logger$7.info('WebRTC unhold sip session', { sessionId, isConference });
|
|
9809
9844
|
|
|
@@ -9945,7 +9980,11 @@ class WebRTCPhone extends Emitter {
|
|
|
9945
9980
|
await this.client.register();
|
|
9946
9981
|
}
|
|
9947
9982
|
if (this.currentSipSession) {
|
|
9948
|
-
this.holdSipSession(
|
|
9983
|
+
this.holdSipSession(
|
|
9984
|
+
this.currentSipSession,
|
|
9985
|
+
this.currentCallSession,
|
|
9986
|
+
true,
|
|
9987
|
+
).catch(e => {
|
|
9949
9988
|
logger$7.warn('Unable to hold current session when making another call', e);
|
|
9950
9989
|
});
|
|
9951
9990
|
}
|
|
@@ -9960,6 +9999,7 @@ class WebRTCPhone extends Emitter {
|
|
|
9960
9999
|
return Promise.resolve(null);
|
|
9961
10000
|
}
|
|
9962
10001
|
const callSession = this._createOutgoingCallSession(sipSession, cameraEnabled || false);
|
|
10002
|
+
callSession.setIsConference(conference);
|
|
9963
10003
|
callSession.creationTime = new Date();
|
|
9964
10004
|
this._updateCallSession(callSession);
|
|
9965
10005
|
|
|
@@ -10538,6 +10578,7 @@ class WebRTCPhone extends Emitter {
|
|
|
10538
10578
|
recording: fromSession ? fromSession.isRecording() : false,
|
|
10539
10579
|
recordingPaused: false, // @TODO
|
|
10540
10580
|
sipSession,
|
|
10581
|
+
conference: !!fromSession && fromSession.isConference(),
|
|
10541
10582
|
...extra,
|
|
10542
10583
|
});
|
|
10543
10584
|
|
|
@@ -10794,16 +10835,16 @@ class Phone extends Emitter {
|
|
|
10794
10835
|
}
|
|
10795
10836
|
}
|
|
10796
10837
|
|
|
10797
|
-
hold(callSession
|
|
10798
|
-
return this.phone && this.phone.hold(callSession, true
|
|
10838
|
+
hold(callSession ) {
|
|
10839
|
+
return this.phone && this.phone.hold(callSession, true);
|
|
10799
10840
|
}
|
|
10800
10841
|
|
|
10801
|
-
unhold(callSession
|
|
10802
|
-
return this.phone && this.phone.unhold(callSession, true
|
|
10842
|
+
unhold(callSession ) {
|
|
10843
|
+
return this.phone && this.phone.unhold(callSession, true);
|
|
10803
10844
|
}
|
|
10804
10845
|
|
|
10805
|
-
resume(callSession
|
|
10806
|
-
return this.phone && this.phone.resume(callSession
|
|
10846
|
+
resume(callSession ) {
|
|
10847
|
+
return this.phone && this.phone.resume(callSession);
|
|
10807
10848
|
}
|
|
10808
10849
|
|
|
10809
10850
|
reject(callSession ) {
|
package/esm/web-rtc-client.js
CHANGED
|
@@ -1600,6 +1600,7 @@ const LINE_STATE = {
|
|
|
1600
1600
|
|
|
1601
1601
|
|
|
1602
1602
|
|
|
1603
|
+
|
|
1603
1604
|
|
|
1604
1605
|
|
|
1605
1606
|
|
|
@@ -1636,6 +1637,7 @@ const LINE_STATE = {
|
|
|
1636
1637
|
|
|
1637
1638
|
|
|
1638
1639
|
|
|
1640
|
+
|
|
1639
1641
|
|
|
1640
1642
|
|
|
1641
1643
|
|
|
@@ -1667,6 +1669,7 @@ class Profile {
|
|
|
1667
1669
|
|
|
1668
1670
|
|
|
1669
1671
|
|
|
1672
|
+
|
|
1670
1673
|
|
|
1671
1674
|
|
|
1672
1675
|
|
|
@@ -1683,6 +1686,7 @@ class Profile {
|
|
|
1683
1686
|
lines: plain.lines.map(line => Line.parse(line)),
|
|
1684
1687
|
username: plain.username,
|
|
1685
1688
|
mobileNumber: plain.mobile_phone_number || '',
|
|
1689
|
+
ringSeconds: plain.ring_seconds,
|
|
1686
1690
|
forwards: [
|
|
1687
1691
|
ForwardOption.parse(plain.forwards.unconditional, FORWARD_KEYS.UNCONDITIONAL),
|
|
1688
1692
|
ForwardOption.parse(plain.forwards.noanswer, FORWARD_KEYS.NO_ANSWER),
|
|
@@ -1719,6 +1723,7 @@ class Profile {
|
|
|
1719
1723
|
switchboards,
|
|
1720
1724
|
agent,
|
|
1721
1725
|
status,
|
|
1726
|
+
ringSeconds,
|
|
1722
1727
|
sipLines,
|
|
1723
1728
|
callPickupTargetUsers,
|
|
1724
1729
|
onlineCallRecordEnabled,
|
|
@@ -1740,6 +1745,7 @@ class Profile {
|
|
|
1740
1745
|
this.status = status;
|
|
1741
1746
|
this.callPickupTargetUsers = callPickupTargetUsers;
|
|
1742
1747
|
this.onlineCallRecordEnabled = onlineCallRecordEnabled;
|
|
1748
|
+
this.ringSeconds = ringSeconds;
|
|
1743
1749
|
|
|
1744
1750
|
this.sipLines = sipLines || [];
|
|
1745
1751
|
}
|
|
@@ -3843,7 +3849,7 @@ class Recording {
|
|
|
3843
3849
|
|
|
3844
3850
|
|
|
3845
3851
|
|
|
3846
|
-
|
|
3852
|
+
|
|
3847
3853
|
|
|
3848
3854
|
|
|
3849
3855
|
|
|
@@ -1058,6 +1058,7 @@ const LINE_STATE = {
|
|
|
1058
1058
|
|
|
1059
1059
|
|
|
1060
1060
|
|
|
1061
|
+
|
|
1061
1062
|
|
|
1062
1063
|
|
|
1063
1064
|
|
|
@@ -1094,6 +1095,7 @@ const LINE_STATE = {
|
|
|
1094
1095
|
|
|
1095
1096
|
|
|
1096
1097
|
|
|
1098
|
+
|
|
1097
1099
|
|
|
1098
1100
|
|
|
1099
1101
|
|
|
@@ -1125,6 +1127,7 @@ class Profile {
|
|
|
1125
1127
|
|
|
1126
1128
|
|
|
1127
1129
|
|
|
1130
|
+
|
|
1128
1131
|
|
|
1129
1132
|
|
|
1130
1133
|
|
|
@@ -1141,6 +1144,7 @@ class Profile {
|
|
|
1141
1144
|
lines: plain.lines.map(line => Line.parse(line)),
|
|
1142
1145
|
username: plain.username,
|
|
1143
1146
|
mobileNumber: plain.mobile_phone_number || '',
|
|
1147
|
+
ringSeconds: plain.ring_seconds,
|
|
1144
1148
|
forwards: [
|
|
1145
1149
|
ForwardOption.parse(plain.forwards.unconditional, FORWARD_KEYS.UNCONDITIONAL),
|
|
1146
1150
|
ForwardOption.parse(plain.forwards.noanswer, FORWARD_KEYS.NO_ANSWER),
|
|
@@ -1177,6 +1181,7 @@ class Profile {
|
|
|
1177
1181
|
switchboards,
|
|
1178
1182
|
agent,
|
|
1179
1183
|
status,
|
|
1184
|
+
ringSeconds,
|
|
1180
1185
|
sipLines,
|
|
1181
1186
|
callPickupTargetUsers,
|
|
1182
1187
|
onlineCallRecordEnabled,
|
|
@@ -1198,6 +1203,7 @@ class Profile {
|
|
|
1198
1203
|
this.status = status;
|
|
1199
1204
|
this.callPickupTargetUsers = callPickupTargetUsers;
|
|
1200
1205
|
this.onlineCallRecordEnabled = onlineCallRecordEnabled;
|
|
1206
|
+
this.ringSeconds = ringSeconds;
|
|
1201
1207
|
|
|
1202
1208
|
this.sipLines = sipLines || [];
|
|
1203
1209
|
}
|
|
@@ -3301,7 +3307,7 @@ class Recording {
|
|
|
3301
3307
|
|
|
3302
3308
|
|
|
3303
3309
|
|
|
3304
|
-
|
|
3310
|
+
|
|
3305
3311
|
|
|
3306
3312
|
|
|
3307
3313
|
|
|
@@ -1609,6 +1609,7 @@ const LINE_STATE = {
|
|
|
1609
1609
|
|
|
1610
1610
|
|
|
1611
1611
|
|
|
1612
|
+
|
|
1612
1613
|
|
|
1613
1614
|
|
|
1614
1615
|
|
|
@@ -1645,6 +1646,7 @@ const LINE_STATE = {
|
|
|
1645
1646
|
|
|
1646
1647
|
|
|
1647
1648
|
|
|
1649
|
+
|
|
1648
1650
|
|
|
1649
1651
|
|
|
1650
1652
|
|
|
@@ -1676,6 +1678,7 @@ class Profile {
|
|
|
1676
1678
|
|
|
1677
1679
|
|
|
1678
1680
|
|
|
1681
|
+
|
|
1679
1682
|
|
|
1680
1683
|
|
|
1681
1684
|
|
|
@@ -1692,6 +1695,7 @@ class Profile {
|
|
|
1692
1695
|
lines: plain.lines.map(line => Line.parse(line)),
|
|
1693
1696
|
username: plain.username,
|
|
1694
1697
|
mobileNumber: plain.mobile_phone_number || '',
|
|
1698
|
+
ringSeconds: plain.ring_seconds,
|
|
1695
1699
|
forwards: [
|
|
1696
1700
|
ForwardOption.parse(plain.forwards.unconditional, FORWARD_KEYS.UNCONDITIONAL),
|
|
1697
1701
|
ForwardOption.parse(plain.forwards.noanswer, FORWARD_KEYS.NO_ANSWER),
|
|
@@ -1728,6 +1732,7 @@ class Profile {
|
|
|
1728
1732
|
switchboards,
|
|
1729
1733
|
agent,
|
|
1730
1734
|
status,
|
|
1735
|
+
ringSeconds,
|
|
1731
1736
|
sipLines,
|
|
1732
1737
|
callPickupTargetUsers,
|
|
1733
1738
|
onlineCallRecordEnabled,
|
|
@@ -1749,6 +1754,7 @@ class Profile {
|
|
|
1749
1754
|
this.status = status;
|
|
1750
1755
|
this.callPickupTargetUsers = callPickupTargetUsers;
|
|
1751
1756
|
this.onlineCallRecordEnabled = onlineCallRecordEnabled;
|
|
1757
|
+
this.ringSeconds = ringSeconds;
|
|
1752
1758
|
|
|
1753
1759
|
this.sipLines = sipLines || [];
|
|
1754
1760
|
}
|
|
@@ -3852,7 +3858,7 @@ class Recording {
|
|
|
3852
3858
|
|
|
3853
3859
|
|
|
3854
3860
|
|
|
3855
|
-
|
|
3861
|
+
|
|
3856
3862
|
|
|
3857
3863
|
|
|
3858
3864
|
|