@wazo/sdk 0.37.34 → 0.37.37

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.
Files changed (99) hide show
  1. package/README.md +8 -2
  2. package/dist/wazo-sdk.js +2 -2
  3. package/esm/__tests__/api-client.test.js +17 -0
  4. package/esm/__tests__/web-rtc-client.test.js +17 -0
  5. package/esm/api/auth.js +7 -1
  6. package/esm/api/call-logd.js +6 -0
  7. package/esm/api/chatd.js +6 -0
  8. package/esm/api/confd.js +6 -0
  9. package/esm/api-client.js +17 -0
  10. package/esm/checker/Checker.js +17 -0
  11. package/esm/checker/checks/aor.js +17 -0
  12. package/esm/checker/checks/api.js +17 -0
  13. package/esm/checker/checks/index.js +17 -0
  14. package/esm/checker/checks/webrtc-transport.js +17 -0
  15. package/esm/checker/checks/webrtc.js +17 -0
  16. package/esm/domain/AdHocAPIConference.js +21 -0
  17. package/esm/domain/CallLog.js +6 -0
  18. package/esm/domain/CallSession.js +14 -0
  19. package/esm/domain/Features.js +17 -0
  20. package/esm/domain/Phone/CTIPhone.js +31 -0
  21. package/esm/domain/Phone/WebRTCPhone.js +42 -11
  22. package/esm/domain/Profile.js +6 -0
  23. package/esm/domain/__tests__/CallLog.test.js +10 -0
  24. package/esm/domain/__tests__/CallSession.test.js +14 -0
  25. package/esm/domain/__tests__/IndirectTransfer.test.js +14 -0
  26. package/esm/domain/__tests__/Profile.test.js +6 -0
  27. package/esm/domain/__tests__/Room.test.js +14 -0
  28. package/esm/domain/__tests__/Session.test.js +6 -0
  29. package/esm/index.js +83 -18
  30. package/esm/service/CallApi.js +17 -0
  31. package/esm/service/getApiClient.js +17 -0
  32. package/esm/simple/Auth.js +84 -19
  33. package/esm/simple/Configuration.js +83 -18
  34. package/esm/simple/Directory.js +17 -0
  35. package/esm/simple/Phone.js +83 -18
  36. package/esm/simple/index.js +83 -18
  37. package/esm/simple/room/LocalParticipant.js +83 -18
  38. package/esm/simple/room/Participant.js +83 -18
  39. package/esm/simple/room/RemoteParticipant.js +83 -18
  40. package/esm/simple/room/Room.js +83 -18
  41. package/esm/simple/room/SipRoom.js +83 -18
  42. package/esm/simple/room/Stream.js +83 -18
  43. package/esm/simple/room/__tests__/RemoteParticipant.test.js +83 -18
  44. package/esm/simple/utils.js +83 -18
  45. package/esm/web-rtc-client.js +17 -0
  46. package/lib/__tests__/api-client.test.js +17 -0
  47. package/lib/__tests__/web-rtc-client.test.js +17 -0
  48. package/lib/api/auth.js +8 -0
  49. package/lib/api/call-logd.js +6 -0
  50. package/lib/api/chatd.js +6 -0
  51. package/lib/api/confd.js +6 -0
  52. package/lib/api-client.js +17 -0
  53. package/lib/checker/Checker.js +17 -0
  54. package/lib/checker/checks/aor.js +17 -0
  55. package/lib/checker/checks/api.js +17 -0
  56. package/lib/checker/checks/index.js +17 -0
  57. package/lib/checker/checks/webrtc-transport.js +17 -0
  58. package/lib/checker/checks/webrtc.js +17 -0
  59. package/lib/domain/AdHocAPIConference.js +21 -0
  60. package/lib/domain/CallLog.js +6 -0
  61. package/lib/domain/CallSession.js +14 -0
  62. package/lib/domain/Features.js +17 -0
  63. package/lib/domain/Phone/CTIPhone.js +31 -0
  64. package/lib/domain/Phone/WebRTCPhone.js +42 -11
  65. package/lib/domain/Profile.js +6 -0
  66. package/lib/domain/__tests__/CallLog.test.js +10 -0
  67. package/lib/domain/__tests__/CallSession.test.js +14 -0
  68. package/lib/domain/__tests__/IndirectTransfer.test.js +14 -0
  69. package/lib/domain/__tests__/Profile.test.js +6 -0
  70. package/lib/domain/__tests__/Room.test.js +14 -0
  71. package/lib/domain/__tests__/Session.test.js +6 -0
  72. package/lib/index.js +83 -18
  73. package/lib/service/CallApi.js +17 -0
  74. package/lib/service/getApiClient.js +17 -0
  75. package/lib/simple/Auth.js +84 -18
  76. package/lib/simple/Configuration.js +83 -18
  77. package/lib/simple/Directory.js +17 -0
  78. package/lib/simple/Phone.js +83 -18
  79. package/lib/simple/index.js +83 -18
  80. package/lib/simple/room/LocalParticipant.js +83 -18
  81. package/lib/simple/room/Participant.js +83 -18
  82. package/lib/simple/room/RemoteParticipant.js +83 -18
  83. package/lib/simple/room/Room.js +83 -18
  84. package/lib/simple/room/SipRoom.js +83 -18
  85. package/lib/simple/room/Stream.js +83 -18
  86. package/lib/simple/room/__tests__/RemoteParticipant.test.js +83 -18
  87. package/lib/simple/utils.js +83 -18
  88. package/lib/web-rtc-client.js +17 -0
  89. package/package.json +1 -1
  90. package/src/api/auth.js +7 -1
  91. package/src/domain/AdHocAPIConference.js +4 -0
  92. package/src/domain/CallLog.js +6 -0
  93. package/src/domain/CallSession.js +14 -0
  94. package/src/domain/Phone/WebRTCPhone.js +28 -11
  95. package/src/domain/Profile.js +6 -0
  96. package/src/domain/__tests__/CallLog.test.js +4 -0
  97. package/src/simple/Auth.js +13 -2
  98. package/src/simple/Phone.js +6 -6
  99. package/src/simple/index.js +2 -1
@@ -275,6 +275,7 @@ var updateFrom = (instance , from ) => {
275
275
 
276
276
 
277
277
 
278
+
278
279
 
279
280
 
280
281
  class CallSession {
@@ -337,6 +338,8 @@ class CallSession {
337
338
 
338
339
 
339
340
 
341
+
342
+
340
343
 
341
344
 
342
345
 
@@ -368,6 +371,7 @@ class CallSession {
368
371
  videoRemotelyDowngraded,
369
372
  sipSession,
370
373
  answerTime,
374
+ conference,
371
375
  } ) {
372
376
  this.callId = callId;
373
377
  this.sipCallId = sipCallId;
@@ -396,6 +400,7 @@ class CallSession {
396
400
  this.videoRemotelyDowngraded = videoRemotelyDowngraded;
397
401
  this.sipSession = sipSession;
398
402
  this.answerTime = answerTime || this.answerTime;
403
+ this.conference = conference;
399
404
 
400
405
  // Useful to compare instead of instanceof with minified code
401
406
  this.type = 'CallSession';
@@ -453,6 +458,10 @@ class CallSession {
453
458
  this.screensharing = false;
454
459
  }
455
460
 
461
+ setIsConference(conference ) {
462
+ this.conference = conference;
463
+ }
464
+
456
465
  isIncoming() {
457
466
  return !this.isCaller && !this.answered;
458
467
  }
@@ -529,6 +538,10 @@ class CallSession {
529
538
  return this.sipStatus === SessionState.Terminated;
530
539
  }
531
540
 
541
+ isConference() {
542
+ return this.conference;
543
+ }
544
+
532
545
  getElapsedTimeInSeconds() {
533
546
  if (!this.startTime) {
534
547
  return 0;
@@ -620,6 +633,7 @@ class CallSession {
620
633
  cameraEnabled: false,
621
634
  dialedExtension: call.dialedExtension,
622
635
  call,
636
+ conference: false, // @FIXME?
623
637
  });
624
638
  }
625
639
  }
@@ -1660,6 +1674,7 @@ const LINE_STATE = {
1660
1674
 
1661
1675
 
1662
1676
 
1677
+
1663
1678
 
1664
1679
 
1665
1680
 
@@ -1696,6 +1711,7 @@ const LINE_STATE = {
1696
1711
 
1697
1712
 
1698
1713
 
1714
+
1699
1715
 
1700
1716
 
1701
1717
 
@@ -1727,6 +1743,7 @@ class Profile {
1727
1743
 
1728
1744
 
1729
1745
 
1746
+
1730
1747
 
1731
1748
 
1732
1749
 
@@ -1743,6 +1760,7 @@ class Profile {
1743
1760
  lines: plain.lines.map(line => Line.parse(line)),
1744
1761
  username: plain.username,
1745
1762
  mobileNumber: plain.mobile_phone_number || '',
1763
+ ringSeconds: plain.ring_seconds,
1746
1764
  forwards: [
1747
1765
  ForwardOption.parse(plain.forwards.unconditional, FORWARD_KEYS.UNCONDITIONAL),
1748
1766
  ForwardOption.parse(plain.forwards.noanswer, FORWARD_KEYS.NO_ANSWER),
@@ -1779,6 +1797,7 @@ class Profile {
1779
1797
  switchboards,
1780
1798
  agent,
1781
1799
  status,
1800
+ ringSeconds,
1782
1801
  sipLines,
1783
1802
  callPickupTargetUsers,
1784
1803
  onlineCallRecordEnabled,
@@ -1800,6 +1819,7 @@ class Profile {
1800
1819
  this.status = status;
1801
1820
  this.callPickupTargetUsers = callPickupTargetUsers;
1802
1821
  this.onlineCallRecordEnabled = onlineCallRecordEnabled;
1822
+ this.ringSeconds = ringSeconds;
1803
1823
 
1804
1824
  this.sipLines = sipLines || [];
1805
1825
  }
@@ -2791,6 +2811,7 @@ class Session {
2791
2811
  /* */
2792
2812
 
2793
2813
  const DEFAULT_BACKEND_USER = 'wazo_user';
2814
+ const BACKEND_LDAP_USER = 'ldap_user';
2794
2815
  const DETAULT_EXPIRATION = 3600;
2795
2816
 
2796
2817
  var authMethods = (client , baseUrl ) => ({
@@ -2805,6 +2826,7 @@ var authMethods = (client , baseUrl ) => ({
2805
2826
 
2806
2827
 
2807
2828
 
2829
+
2808
2830
  ) {
2809
2831
  const body = {
2810
2832
  backend: params.backend || DEFAULT_BACKEND_USER,
@@ -2824,6 +2846,10 @@ var authMethods = (client , baseUrl ) => ({
2824
2846
  headers['Wazo-Session-Type'] = 'mobile';
2825
2847
  }
2826
2848
 
2849
+ if (params.tenantId) {
2850
+ body.tenant_id = params.tenantId;
2851
+ }
2852
+
2827
2853
  return client.post(`${baseUrl}/token`, body, headers).then(response => Session.parse(response));
2828
2854
  },
2829
2855
 
@@ -3709,11 +3735,13 @@ class Recording {
3709
3735
 
3710
3736
 
3711
3737
 
3738
+
3712
3739
 
3713
3740
 
3714
3741
 
3715
3742
 
3716
3743
 
3744
+
3717
3745
 
3718
3746
 
3719
3747
 
@@ -3734,10 +3762,12 @@ class Recording {
3734
3762
 
3735
3763
 
3736
3764
 
3765
+
3737
3766
 
3738
3767
 
3739
3768
 
3740
3769
 
3770
+
3741
3771
 
3742
3772
 
3743
3773
 
@@ -3799,10 +3829,12 @@ class CallLog {
3799
3829
  || plain.destination_extension
3800
3830
  || `meeting-${plain.requested_name || plain.destination_name || ''}`,
3801
3831
  name: plain.requested_name || plain.destination_name || '',
3832
+ uuid: plain.destination_user_uuid,
3802
3833
  },
3803
3834
  source: {
3804
3835
  extension: plain.source_extension,
3805
3836
  name: plain.source_name,
3837
+ uuid: plain.source_user_uuid,
3806
3838
  },
3807
3839
  id: plain.id,
3808
3840
  duration: (plain.duration || 0) * 1000, // duration is in seconds
@@ -5645,6 +5677,10 @@ class AdHocAPIConference {
5645
5677
  this.conferenceId = conferenceId || '';
5646
5678
  this.muted = muted || false;
5647
5679
  this.paused = paused || false;
5680
+
5681
+ if (this.host) {
5682
+ this.host.setIsConference(true);
5683
+ }
5648
5684
  }
5649
5685
 
5650
5686
  async start() {
@@ -9354,7 +9390,11 @@ class WebRTCPhone extends Emitter {
9354
9390
  accept(callSession , cameraEnabled ) {
9355
9391
  logger$8.info('WebRTC phone - accept call', { id: callSession ? callSession.getId() : 'n/a', cameraEnabled });
9356
9392
  if (this.currentSipSession) {
9357
- this.holdSipSession(this.currentSipSession, this.currentCallSession, true);
9393
+ this.holdSipSession(
9394
+ this.currentSipSession,
9395
+ this.currentCallSession,
9396
+ true,
9397
+ );
9358
9398
  }
9359
9399
 
9360
9400
  if (!callSession) {
@@ -9447,22 +9487,22 @@ class WebRTCPhone extends Emitter {
9447
9487
  }
9448
9488
  }
9449
9489
 
9450
- hold(callSession , withEvent = true, isConference = false) {
9490
+ hold(callSession , withEvent = true) {
9451
9491
  logger$8.info('WebRTC hold', { id: callSession.getId() });
9452
9492
 
9453
9493
  const sipSession = this.findSipSession(callSession);
9454
9494
 
9455
- return sipSession ? this.holdSipSession(sipSession, callSession, withEvent, isConference) : null;
9495
+ return sipSession ? this.holdSipSession(sipSession, callSession, withEvent) : null;
9456
9496
  }
9457
9497
 
9458
9498
  // @Deprecated
9459
- unhold(callSession , withEvent = true, isConference = false) {
9499
+ unhold(callSession , withEvent = true) {
9460
9500
  console.warn('Please note that `phone.unhold()` is being deprecated; `phone.resume()` is the preferred method');
9461
9501
 
9462
- return this.resume(callSession, isConference, withEvent);
9502
+ return this.resume(callSession, withEvent);
9463
9503
  }
9464
9504
 
9465
- resume(callSession , isConference = false, withEvent = true) {
9505
+ resume(callSession , withEvent = true) {
9466
9506
  logger$8.info('WebRTC resume called', { id: callSession ? callSession.getId() : null });
9467
9507
 
9468
9508
  const sipSession = this.findSipSession(callSession);
@@ -9475,10 +9515,14 @@ class WebRTCPhone extends Emitter {
9475
9515
  // Hold current session if different from the current one (we don't want 2 sessions active at the same time).
9476
9516
  if (this.currentSipSession && this.currentSipSession.id !== sipSession.id) {
9477
9517
  logger$8.info('WebRTC hold call after resume', { id: this.currentSipSession.id });
9478
- this.holdSipSession(this.currentSipSession, this.currentCallSession);
9518
+ this.holdSipSession(
9519
+ this.currentSipSession,
9520
+ this.currentCallSession,
9521
+ withEvent,
9522
+ );
9479
9523
  }
9480
9524
 
9481
- const promise = this.unholdSipSession(sipSession, callSession, withEvent, isConference);
9525
+ const promise = this.unholdSipSession(sipSession, callSession, withEvent);
9482
9526
  this.currentSipSession = sipSession;
9483
9527
  if (callSession) {
9484
9528
  this.currentCallSession = callSession;
@@ -9491,7 +9535,6 @@ class WebRTCPhone extends Emitter {
9491
9535
  sipSession ,
9492
9536
  callSession ,
9493
9537
  withEvent = true,
9494
- isConference = false,
9495
9538
  ) {
9496
9539
  if (!sipSession) {
9497
9540
  return new Promise((resolve, reject) => reject(new Error('No session to hold')));
@@ -9512,6 +9555,8 @@ class WebRTCPhone extends Emitter {
9512
9555
  await this.client.downgradeToAudio(sipSession);
9513
9556
  }
9514
9557
 
9558
+ const isConference = !!callSession && callSession.isConference();
9559
+
9515
9560
  const promise = this.client.hold(sipSession, isConference, hasVideo);
9516
9561
  if (withEvent) {
9517
9562
  this.eventEmitter.emit(ON_CALL_HELD, this._createCallSession(sipSession, callSession));
@@ -9524,11 +9569,13 @@ class WebRTCPhone extends Emitter {
9524
9569
  sipSession ,
9525
9570
  callSession ,
9526
9571
  withEvent = true,
9527
- isConference = false,
9528
9572
  ) {
9529
9573
  if (!sipSession) {
9530
9574
  return new Promise((resolve, reject) => reject(new Error('No session to unhold')));
9531
9575
  }
9576
+
9577
+ const isConference = !!callSession && callSession.isConference();
9578
+
9532
9579
  const sessionId = this.getSipSessionId(sipSession);
9533
9580
  logger$8.info('WebRTC unhold sip session', { sessionId, isConference });
9534
9581
 
@@ -9670,7 +9717,11 @@ class WebRTCPhone extends Emitter {
9670
9717
  await this.client.register();
9671
9718
  }
9672
9719
  if (this.currentSipSession) {
9673
- this.holdSipSession(this.currentSipSession, this.currentCallSession, true).catch(e => {
9720
+ this.holdSipSession(
9721
+ this.currentSipSession,
9722
+ this.currentCallSession,
9723
+ true,
9724
+ ).catch(e => {
9674
9725
  logger$8.warn('Unable to hold current session when making another call', e);
9675
9726
  });
9676
9727
  }
@@ -9685,6 +9736,7 @@ class WebRTCPhone extends Emitter {
9685
9736
  return Promise.resolve(null);
9686
9737
  }
9687
9738
  const callSession = this._createOutgoingCallSession(sipSession, cameraEnabled || false);
9739
+ callSession.setIsConference(conference);
9688
9740
  callSession.creationTime = new Date();
9689
9741
  this._updateCallSession(callSession);
9690
9742
 
@@ -10263,6 +10315,7 @@ class WebRTCPhone extends Emitter {
10263
10315
  recording: fromSession ? fromSession.isRecording() : false,
10264
10316
  recordingPaused: false, // @TODO
10265
10317
  sipSession,
10318
+ conference: !!fromSession && fromSession.isConference(),
10266
10319
  ...extra,
10267
10320
  });
10268
10321
 
@@ -10325,6 +10378,7 @@ var PHONE_EVENTS = /*#__PURE__*/Object.freeze({
10325
10378
 
10326
10379
  class InvalidSubscription extends Error {}
10327
10380
  class InvalidAuthorization extends Error {}
10381
+ class NoTenantIdError extends Error {}
10328
10382
 
10329
10383
  const logger$7 = IssueReporter$1.loggerFor('simple-auth');
10330
10384
 
@@ -10338,11 +10392,15 @@ class Auth {
10338
10392
 
10339
10393
 
10340
10394
 
10395
+
10396
+
10341
10397
 
10342
10398
  constructor() {
10343
10399
  this.expiration = DETAULT_EXPIRATION;
10344
10400
  this.authenticated = false;
10345
10401
  this.minSubscriptionType = null;
10402
+ this.BACKEND_WAZO = DEFAULT_BACKEND_USER;
10403
+ this.BACKEND_LDAP = BACKEND_LDAP_USER;
10346
10404
  }
10347
10405
 
10348
10406
  init(clientId ,
@@ -10375,12 +10433,18 @@ class Auth {
10375
10433
  setFetchOptions(options);
10376
10434
  }
10377
10435
 
10378
- async logIn(username , password ) {
10436
+ async logIn(username , password , backend , tenantId ) {
10437
+ if (backend && backend !== this.BACKEND_WAZO && !tenantId) {
10438
+ throw new NoTenantIdError('No tenant id');
10439
+ }
10440
+
10379
10441
  this.authenticated = false;
10380
10442
  this.session = null;
10381
10443
  const rawSession = await getApiClient().auth.logIn({
10382
10444
  username,
10383
10445
  password,
10446
+ backend,
10447
+ tenantId,
10384
10448
  expiration: this.expiration,
10385
10449
  mobile: this.mobile,
10386
10450
  });
@@ -13481,6 +13545,7 @@ const Wazo = {
13481
13545
  InvalidAuthorization,
13482
13546
  CanceledCallError,
13483
13547
  SFUNotAvailableError,
13548
+ NoTenantIdError,
13484
13549
  };
13485
13550
 
13486
13551
  if (window) {
@@ -13680,16 +13745,16 @@ class Phone extends Emitter {
13680
13745
  }
13681
13746
  }
13682
13747
 
13683
- hold(callSession , isConference = false) {
13684
- return this.phone && this.phone.hold(callSession, true, isConference);
13748
+ hold(callSession ) {
13749
+ return this.phone && this.phone.hold(callSession, true);
13685
13750
  }
13686
13751
 
13687
- unhold(callSession , isConference = false) {
13688
- return this.phone && this.phone.unhold(callSession, true, isConference);
13752
+ unhold(callSession ) {
13753
+ return this.phone && this.phone.unhold(callSession, true);
13689
13754
  }
13690
13755
 
13691
- resume(callSession , isConference = false) {
13692
- return this.phone && this.phone.resume(callSession, isConference);
13756
+ resume(callSession ) {
13757
+ return this.phone && this.phone.resume(callSession);
13693
13758
  }
13694
13759
 
13695
13760
  reject(callSession ) {