@wazo/sdk 0.38.7 → 0.38.10

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 (121) hide show
  1. package/dist/wazo-sdk.js +2 -2
  2. package/esm/__tests__/api-client.test.js +163 -2
  3. package/esm/__tests__/web-rtc-client.test.js +248 -27
  4. package/esm/api/auth.js +12 -0
  5. package/esm/api/calld.js +8 -0
  6. package/esm/api/confd.js +134 -2
  7. package/esm/api/ctid-ng.js +1 -0
  8. package/esm/api-client.js +163 -2
  9. package/esm/checker/Checker.js +204 -24
  10. package/esm/checker/checks/aor.js +163 -2
  11. package/esm/checker/checks/api.js +163 -2
  12. package/esm/checker/checks/index.js +204 -24
  13. package/esm/checker/checks/wazo-websocket.js +2 -0
  14. package/esm/checker/checks/webrtc-transport.js +202 -24
  15. package/esm/checker/checks/webrtc.js +202 -24
  16. package/esm/domain/AdHocAPIConference.js +170 -4
  17. package/esm/domain/Features.js +170 -4
  18. package/esm/domain/Meeting.js +18 -0
  19. package/esm/domain/MeetingAuthorization.js +70 -0
  20. package/esm/domain/Phone/CTIPhone.js +170 -4
  21. package/esm/domain/Phone/WebRTCPhone.js +2 -3
  22. package/esm/domain/__tests__/Meeting.test.js +87 -1
  23. package/esm/domain/__tests__/MeetingAuthorization.test.js +109 -0
  24. package/esm/index.js +300 -36
  25. package/esm/service/CallApi.js +170 -4
  26. package/esm/service/getApiClient.js +176 -5
  27. package/esm/simple/Auth.js +301 -37
  28. package/esm/simple/Configuration.js +300 -36
  29. package/esm/simple/Directory.js +170 -4
  30. package/esm/simple/Phone.js +300 -36
  31. package/esm/simple/Softphone.js +5 -0
  32. package/esm/simple/Websocket.js +3 -0
  33. package/esm/simple/index.js +300 -36
  34. package/esm/simple/room/LocalParticipant.js +300 -36
  35. package/esm/simple/room/Participant.js +300 -36
  36. package/esm/simple/room/RemoteParticipant.js +300 -36
  37. package/esm/simple/room/Room.js +300 -36
  38. package/esm/simple/room/SipRoom.js +300 -36
  39. package/esm/simple/room/Stream.js +300 -36
  40. package/esm/simple/room/__tests__/Participant.test.js +14812 -0
  41. package/esm/simple/room/__tests__/RemoteParticipant.test.js +300 -36
  42. package/esm/simple/utils.js +300 -36
  43. package/esm/utils/__tests__/object.test.js +57 -0
  44. package/esm/utils/__tests__/string.test.js +30 -0
  45. package/esm/utils/object.js +24 -0
  46. package/esm/utils/string.js +10 -0
  47. package/esm/web-rtc-client.js +202 -24
  48. package/esm/websocket-client.js +3 -1
  49. package/lib/__tests__/api-client.test.js +163 -2
  50. package/lib/__tests__/web-rtc-client.test.js +248 -27
  51. package/lib/api/auth.js +12 -0
  52. package/lib/api/calld.js +8 -0
  53. package/lib/api/confd.js +134 -2
  54. package/lib/api/ctid-ng.js +1 -0
  55. package/lib/api-client.js +163 -2
  56. package/lib/checker/Checker.js +204 -24
  57. package/lib/checker/checks/aor.js +163 -2
  58. package/lib/checker/checks/api.js +163 -2
  59. package/lib/checker/checks/index.js +204 -24
  60. package/lib/checker/checks/wazo-websocket.js +2 -0
  61. package/lib/checker/checks/webrtc-transport.js +202 -24
  62. package/lib/checker/checks/webrtc.js +202 -24
  63. package/lib/domain/AdHocAPIConference.js +170 -4
  64. package/lib/domain/Features.js +170 -4
  65. package/lib/domain/Meeting.js +18 -0
  66. package/lib/domain/MeetingAuthorization.js +79 -0
  67. package/lib/domain/Phone/CTIPhone.js +170 -4
  68. package/lib/domain/Phone/WebRTCPhone.js +2 -3
  69. package/lib/domain/__tests__/Meeting.test.js +87 -1
  70. package/lib/domain/__tests__/MeetingAuthorization.test.js +111 -0
  71. package/lib/index.js +300 -36
  72. package/lib/service/CallApi.js +170 -4
  73. package/lib/service/getApiClient.js +176 -4
  74. package/lib/simple/Auth.js +301 -36
  75. package/lib/simple/Configuration.js +300 -36
  76. package/lib/simple/Directory.js +170 -4
  77. package/lib/simple/Phone.js +300 -36
  78. package/lib/simple/Softphone.js +5 -0
  79. package/lib/simple/Websocket.js +3 -0
  80. package/lib/simple/index.js +300 -36
  81. package/lib/simple/room/LocalParticipant.js +300 -36
  82. package/lib/simple/room/Participant.js +300 -36
  83. package/lib/simple/room/RemoteParticipant.js +300 -36
  84. package/lib/simple/room/Room.js +300 -36
  85. package/lib/simple/room/SipRoom.js +300 -36
  86. package/lib/simple/room/Stream.js +300 -36
  87. package/lib/simple/room/__tests__/Participant.test.js +14822 -0
  88. package/lib/simple/room/__tests__/RemoteParticipant.test.js +300 -36
  89. package/lib/simple/utils.js +300 -36
  90. package/lib/utils/__tests__/object.test.js +59 -0
  91. package/lib/utils/__tests__/string.test.js +32 -0
  92. package/lib/utils/object.js +28 -0
  93. package/lib/utils/string.js +14 -0
  94. package/lib/web-rtc-client.js +202 -24
  95. package/lib/websocket-client.js +3 -0
  96. package/package.json +1 -1
  97. package/src/__tests__/web-rtc-client.test.js +46 -3
  98. package/src/api/auth.js +12 -0
  99. package/src/api/calld.js +8 -0
  100. package/src/api/confd.js +43 -2
  101. package/src/api-client.js +8 -0
  102. package/src/domain/Meeting.js +20 -0
  103. package/src/domain/MeetingAuthorization.js +67 -0
  104. package/src/domain/Phone/WebRTCPhone.js +1 -3
  105. package/src/domain/__tests__/Meeting.test.js +70 -1
  106. package/src/domain/__tests__/MeetingAuthorization.test.js +58 -0
  107. package/src/service/getApiClient.js +13 -2
  108. package/src/simple/Auth.js +35 -4
  109. package/src/simple/Softphone.js +5 -0
  110. package/src/simple/index.js +2 -1
  111. package/src/simple/room/Participant.js +40 -0
  112. package/src/simple/room/Room.js +2 -2
  113. package/src/simple/room/SipRoom.js +1 -1
  114. package/src/simple/room/__tests__/Participant.test.js +81 -0
  115. package/src/types/WebSocketMessage.js +7 -1
  116. package/src/utils/__tests__/object.test.js +35 -0
  117. package/src/utils/__tests__/string.test.js +23 -0
  118. package/src/utils/object.js +15 -0
  119. package/src/utils/string.js +8 -0
  120. package/src/web-rtc-client.js +39 -22
  121. package/src/websocket-client.js +2 -0
@@ -19,6 +19,17 @@ var newFrom = (instance , ToClass ) => {
19
19
 
20
20
  //
21
21
 
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+
32
+
22
33
 
23
34
 
24
35
 
@@ -29,6 +40,7 @@ var newFrom = (instance , ToClass ) => {
29
40
 
30
41
 
31
42
 
43
+
32
44
 
33
45
 
34
46
  class Meeting {
@@ -43,6 +55,8 @@ class Meeting {
43
55
 
44
56
 
45
57
 
58
+
59
+
46
60
 
47
61
  static parse(plain ) {
48
62
  return new Meeting({
@@ -55,6 +69,7 @@ class Meeting {
55
69
  extension: plain.exten,
56
70
  persistent: plain.persistent,
57
71
  creationTime: moment__default['default'](plain.creation_time).toDate(),
72
+ requireAuthorization: plain.require_authorization,
58
73
  });
59
74
  }
60
75
 
@@ -79,6 +94,7 @@ class Meeting {
79
94
  extension,
80
95
  persistent,
81
96
  creationTime,
97
+ requireAuthorization,
82
98
  } = {}) {
83
99
  this.guestSipAuthorization = guestSipAuthorization;
84
100
  this.uri = uri;
@@ -89,6 +105,7 @@ class Meeting {
89
105
  this.extension = extension;
90
106
  this.persistent = persistent;
91
107
  this.creationTime = creationTime;
108
+ this.requireAuthorization = requireAuthorization;
92
109
 
93
110
  // Useful to compare instead of instanceof with minified code
94
111
  this.type = 'Meeting';
@@ -99,6 +116,7 @@ class Meeting {
99
116
  const [username, secret] = atob(this.guestSipAuthorization).split(':');
100
117
  return { username, secret };
101
118
  }
119
+
102
120
  }
103
121
 
104
122
  module.exports = Meeting;
@@ -0,0 +1,79 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ //
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+ const PENDING = 'pending';
16
+ const ACCEPTED = 'accepted';
17
+ const REJECTED = 'rejected';
18
+ const POST_PROCESSING = 'post_processing';
19
+ const POST_PROCESSED_SUCCESS = 'post_processed_success';
20
+ const POST_PROCESSED_ERROR = 'post_processed_error';
21
+
22
+ class MeetingAuthorization {
23
+
24
+
25
+
26
+
27
+
28
+
29
+ constructor({
30
+ meetingUuid,
31
+ uuid,
32
+ userUuid,
33
+ userName,
34
+ } = {}) {
35
+ this.meetingUuid = meetingUuid;
36
+ this.uuid = uuid;
37
+ this.userUuid = userUuid;
38
+ this.userName = userName;
39
+ }
40
+
41
+ setStatus(status ) {
42
+ this.status = status;
43
+ }
44
+
45
+ getStatus() {
46
+ return this.status;
47
+ }
48
+
49
+ static parse(plain ) {
50
+ const {
51
+ meeting_uuid: meetingUuid,
52
+ uuid,
53
+ guest_uuid: userUuid,
54
+ guest_name: userName,
55
+ } = plain;
56
+
57
+ return new MeetingAuthorization({
58
+ meetingUuid,
59
+ uuid,
60
+ userUuid,
61
+ userName,
62
+ });
63
+ }
64
+
65
+ static parseMany(items ) {
66
+ if (!items) {
67
+ return [];
68
+ }
69
+ return items.map(MeetingAuthorization.parse);
70
+ }
71
+ }
72
+
73
+ exports.ACCEPTED = ACCEPTED;
74
+ exports.PENDING = PENDING;
75
+ exports.POST_PROCESSED_ERROR = POST_PROCESSED_ERROR;
76
+ exports.POST_PROCESSED_SUCCESS = POST_PROCESSED_SUCCESS;
77
+ exports.POST_PROCESSING = POST_PROCESSING;
78
+ exports.REJECTED = REJECTED;
79
+ exports.default = MeetingAuthorization;
@@ -3184,6 +3184,7 @@ var authMethods = (client , baseUrl ) => ({
3184
3184
 
3185
3185
 
3186
3186
 
3187
+
3187
3188
  ) {
3188
3189
  const body = {
3189
3190
  backend: params.backend || DEFAULT_BACKEND_USER,
@@ -3204,9 +3205,14 @@ var authMethods = (client , baseUrl ) => ({
3204
3205
  }
3205
3206
 
3206
3207
  if (params.tenantId) {
3208
+ console.warn('Use of `tenantId` is deprecated when calling logIn() method, use `domainName` instead.');
3207
3209
  body.tenant_id = params.tenantId;
3208
3210
  }
3209
3211
 
3212
+ if (params.domainName) {
3213
+ body.domain_name = params.domainName;
3214
+ }
3215
+
3210
3216
  return client.post(`${baseUrl}/token`, body, headers).then(response => Session.parse(response));
3211
3217
  },
3212
3218
 
@@ -3219,6 +3225,7 @@ var authMethods = (client , baseUrl ) => ({
3219
3225
  expiration ,
3220
3226
  isMobile = false,
3221
3227
  tenantId ,
3228
+ domainName ,
3222
3229
  ) => {
3223
3230
  const body = {
3224
3231
  backend: backend || DEFAULT_BACKEND_USER,
@@ -3228,9 +3235,14 @@ var authMethods = (client , baseUrl ) => ({
3228
3235
  };
3229
3236
 
3230
3237
  if (tenantId) {
3238
+ console.warn('Use of `tenantId` is deprecated when calling refreshToken() method, use `domainName` instead.');
3231
3239
  body.tenant_id = tenantId;
3232
3240
  }
3233
3241
 
3242
+ if (domainName) {
3243
+ body.domain_name = domainName;
3244
+ }
3245
+
3234
3246
  const headers = {
3235
3247
  'Content-Type': 'application/json',
3236
3248
  ...(isMobile ? { 'Wazo-Session-Type': 'mobile' } : {}),
@@ -3600,6 +3612,70 @@ class ExternalApp {
3600
3612
 
3601
3613
  //
3602
3614
 
3615
+ class MeetingAuthorization {
3616
+
3617
+
3618
+
3619
+
3620
+
3621
+
3622
+ constructor({
3623
+ meetingUuid,
3624
+ uuid,
3625
+ userUuid,
3626
+ userName,
3627
+ } = {}) {
3628
+ this.meetingUuid = meetingUuid;
3629
+ this.uuid = uuid;
3630
+ this.userUuid = userUuid;
3631
+ this.userName = userName;
3632
+ }
3633
+
3634
+ setStatus(status ) {
3635
+ this.status = status;
3636
+ }
3637
+
3638
+ getStatus() {
3639
+ return this.status;
3640
+ }
3641
+
3642
+ static parse(plain ) {
3643
+ const {
3644
+ meeting_uuid: meetingUuid,
3645
+ uuid,
3646
+ guest_uuid: userUuid,
3647
+ guest_name: userName,
3648
+ } = plain;
3649
+
3650
+ return new MeetingAuthorization({
3651
+ meetingUuid,
3652
+ uuid,
3653
+ userUuid,
3654
+ userName,
3655
+ });
3656
+ }
3657
+
3658
+ static parseMany(items ) {
3659
+ if (!items) {
3660
+ return [];
3661
+ }
3662
+ return items.map(MeetingAuthorization.parse);
3663
+ }
3664
+ }
3665
+
3666
+ //
3667
+
3668
+
3669
+
3670
+
3671
+
3672
+
3673
+
3674
+
3675
+
3676
+
3677
+
3678
+
3603
3679
 
3604
3680
 
3605
3681
 
@@ -3610,6 +3686,7 @@ class ExternalApp {
3610
3686
 
3611
3687
 
3612
3688
 
3689
+
3613
3690
 
3614
3691
 
3615
3692
  class Meeting {
@@ -3624,6 +3701,8 @@ class Meeting {
3624
3701
 
3625
3702
 
3626
3703
 
3704
+
3705
+
3627
3706
 
3628
3707
  static parse(plain ) {
3629
3708
  return new Meeting({
@@ -3636,6 +3715,7 @@ class Meeting {
3636
3715
  extension: plain.exten,
3637
3716
  persistent: plain.persistent,
3638
3717
  creationTime: moment__default['default'](plain.creation_time).toDate(),
3718
+ requireAuthorization: plain.require_authorization,
3639
3719
  });
3640
3720
  }
3641
3721
 
@@ -3660,6 +3740,7 @@ class Meeting {
3660
3740
  extension,
3661
3741
  persistent,
3662
3742
  creationTime,
3743
+ requireAuthorization,
3663
3744
  } = {}) {
3664
3745
  this.guestSipAuthorization = guestSipAuthorization;
3665
3746
  this.uri = uri;
@@ -3670,6 +3751,7 @@ class Meeting {
3670
3751
  this.extension = extension;
3671
3752
  this.persistent = persistent;
3672
3753
  this.creationTime = creationTime;
3754
+ this.requireAuthorization = requireAuthorization;
3673
3755
 
3674
3756
  // Useful to compare instead of instanceof with minified code
3675
3757
  this.type = 'Meeting';
@@ -3680,8 +3762,32 @@ class Meeting {
3680
3762
  const [username, secret] = atob(this.guestSipAuthorization).split(':');
3681
3763
  return { username, secret };
3682
3764
  }
3765
+
3683
3766
  }
3684
3767
 
3768
+ //
3769
+
3770
+ const camelToUnderscore = (key ) => {
3771
+ if (typeof key !== 'string') {
3772
+ throw new Error('Input is not a string');
3773
+ }
3774
+ return key.charAt(0).toLowerCase() + key.substring(1).replace(/([A-Z])/g, '_$1').toLowerCase();
3775
+ };
3776
+
3777
+ //
3778
+
3779
+ const convertKeysFromCamelToUnderscore = (args ) => {
3780
+ if (!args || typeof args !== 'object' || Array.isArray(args)) {
3781
+ throw new Error('Input is not an object');
3782
+ }
3783
+
3784
+ return Object.keys(args).reduce((acc, key) => {
3785
+ acc[camelToUnderscore(key)] = typeof args[key] === 'object' && !Array.isArray(args[key])
3786
+ ? convertKeysFromCamelToUnderscore(args[key]) : args[key];
3787
+ return acc;
3788
+ }, {});
3789
+ };
3790
+
3685
3791
  /* */
3686
3792
 
3687
3793
  var confdMethods = (client , baseUrl ) => ({
@@ -3750,8 +3856,18 @@ var confdMethods = (client , baseUrl ) => ({
3750
3856
  getMyMeetings: () =>
3751
3857
  client.get(`${baseUrl}/users/me/meetings`).then(response => Meeting.parseMany(response.items)),
3752
3858
 
3753
- createMyMeeting: (name , persistent ) =>
3754
- client.post(`${baseUrl}/users/me/meetings`, { name, persistent }).then(Meeting.parse),
3859
+ createMyMeeting: (args ) =>
3860
+ client
3861
+ .post(`${baseUrl}/users/me/meetings`, convertKeysFromCamelToUnderscore(args))
3862
+ .then(Meeting.parse),
3863
+
3864
+ updateMyMeeting: (meetingUuid , data ) =>
3865
+ client.put(
3866
+ `${baseUrl}/users/me/meetings/${meetingUuid}`,
3867
+ convertKeysFromCamelToUnderscore(data),
3868
+ null,
3869
+ ApiRequester.successResponseParser,
3870
+ ),
3755
3871
 
3756
3872
  deleteMyMeeting: (meetingUuid ) =>
3757
3873
  client.delete(`${baseUrl}/users/me/meetings/${meetingUuid}`, null),
@@ -3759,8 +3875,36 @@ var confdMethods = (client , baseUrl ) => ({
3759
3875
  getMeeting: (meetingUuid ) =>
3760
3876
  client.get(`${baseUrl}/meetings/${meetingUuid}`, null).then(Meeting.parse),
3761
3877
 
3878
+ meetingAuthorizations: (meetingUuid ) =>
3879
+ client.get(`${baseUrl}/users/me/meetings/${meetingUuid}/authorizations`, null).then(MeetingAuthorization.parseMany),
3880
+
3881
+ meetingAuthorizationReject: (meetingUuid , authorizationUuid ) =>
3882
+ client.put(
3883
+ `${baseUrl}/users/me/meetings/${meetingUuid}/authorizations/${authorizationUuid}/reject`,
3884
+ {},
3885
+ null,
3886
+ ApiRequester.successResponseParser,
3887
+ ),
3888
+
3889
+ meetingAuthorizationAccept: (meetingUuid , authorizationUuid ) =>
3890
+ client.put(
3891
+ `${baseUrl}/users/me/meetings/${meetingUuid}/authorizations/${authorizationUuid}/accept`,
3892
+ {},
3893
+ null,
3894
+ ApiRequester.successResponseParser,
3895
+ ),
3896
+
3762
3897
  guestGetMeeting: (meetingUuid ) =>
3763
3898
  client.get(`${baseUrl}/guests/me/meetings/${meetingUuid}`, null).then(Meeting.parse),
3899
+
3900
+ guestAuthorizationRequest: (userUuid , meetingUuid , username ) =>
3901
+ client
3902
+ .post(`${baseUrl}/guests/${userUuid}/meetings/${meetingUuid}/authorizations`, { guest_name: username })
3903
+ .then(MeetingAuthorization.parse),
3904
+
3905
+ guestAuthorizationCheck: (userUuid , meetingUuid , authorizationUuid ) =>
3906
+ client.get(`${baseUrl}/guests/${userUuid}/meetings/${meetingUuid}/authorizations/${authorizationUuid}`, null),
3907
+
3764
3908
  });
3765
3909
 
3766
3910
  //
@@ -4629,6 +4773,14 @@ var calldMethods = (client , baseUrl ) => ({
4629
4773
  getMeetingParticipantsAsUser: async (meetingUuid ) =>
4630
4774
  client.get(`${baseUrl}/users/me/meetings/${meetingUuid}/participants`),
4631
4775
 
4776
+ banMeetingParticipant: (meetingUuid , participantUuid ) =>
4777
+ client.delete(
4778
+ `${baseUrl}/users/me/meetings/${meetingUuid}/participants/${participantUuid}`,
4779
+ null,
4780
+ null,
4781
+ ApiRequester.successResponseParser,
4782
+ ),
4783
+
4632
4784
  listTrunks: () => client.get(`${baseUrl}/trunks`),
4633
4785
 
4634
4786
  mute: (callId ) =>
@@ -5006,6 +5158,7 @@ class ApiClient {
5006
5158
 
5007
5159
 
5008
5160
 
5161
+
5009
5162
 
5010
5163
 
5011
5164
 
@@ -5047,6 +5200,7 @@ class ApiClient {
5047
5200
  refreshToken: this.refreshToken,
5048
5201
  refreshBackend: this.refreshBackend,
5049
5202
  refreshTenantId: this.refreshTenantId,
5203
+ refreshDomainName: this.refreshDomainName,
5050
5204
  refreshExpiration: this.refreshExpiration,
5051
5205
  isMobile: this.isMobile,
5052
5206
  });
@@ -5062,6 +5216,7 @@ class ApiClient {
5062
5216
  this.refreshExpiration,
5063
5217
  this.isMobile,
5064
5218
  this.refreshTenantId,
5219
+ this.refreshDomainName,
5065
5220
  );
5066
5221
 
5067
5222
  logger$1.info('token refreshed', { token: session.token });
@@ -5115,9 +5270,14 @@ class ApiClient {
5115
5270
  }
5116
5271
 
5117
5272
  setRefreshTenantId(tenantId ) {
5273
+ console.warn('Use of `setRefreshTenantId` is deprecated, use `setRefreshDomainName` instead');
5118
5274
  this.refreshTenantId = tenantId;
5119
5275
  }
5120
5276
 
5277
+ setRefreshDomainName(domainName ) {
5278
+ this.refreshDomainName = domainName;
5279
+ }
5280
+
5121
5281
  setIsMobile(isMobile ) {
5122
5282
  this.isMobile = isMobile;
5123
5283
  }
@@ -5142,6 +5302,7 @@ global.wazoClientId = global.wazoClientId || {};
5142
5302
  global.wazoClientToken = global.wazoClientToken || {};
5143
5303
  global.wazoRefreshToken = global.wazoRefreshToken || {};
5144
5304
  global.wazoRefreshTenantId = global.wazoRefreshTenantId || {};
5305
+ global.wazoRefreshDomainName = global.wazoRefreshDomainName || {};
5145
5306
  global.wazoOnRefreshToken = global.wazoOnRefreshToken || {};
5146
5307
  global.wazoOnRefreshTokenError = global.wazoOnRefreshTokenError || {};
5147
5308
  global.wazoRefreshExpiration = global.wazoRefreshExpiration || {};
@@ -5151,6 +5312,7 @@ global.wazoFetchOptions = global.wazoFetchOptions || {};
5151
5312
 
5152
5313
  const fillClient = (apiClient ) => {
5153
5314
  const { server, token, clientId } = apiClient.client;
5315
+ const tenantId = global.wazoRefreshTenantId[server] || global.wazoRefreshTenantId[null] || apiClient.refreshTenantId;
5154
5316
 
5155
5317
  // try with null server when dealing with non-related server info
5156
5318
  apiClient.setToken(global.wazoClientToken[server] || global.wazoClientToken[null] || token);
@@ -5159,8 +5321,12 @@ const fillClient = (apiClient ) => {
5159
5321
 
5160
5322
  apiClient.setRefreshToken(global.wazoRefreshToken[server] || global.wazoRefreshToken[null] || apiClient.refreshToken);
5161
5323
 
5162
- apiClient.setRefreshTenantId(
5163
- global.wazoRefreshTenantId[server] || global.wazoRefreshTenantId[null] || apiClient.refreshTenantId,
5324
+ if (tenantId) {
5325
+ apiClient.setRefreshTenantId(tenantId);
5326
+ }
5327
+
5328
+ apiClient.setRefreshDomainName(
5329
+ global.wazoRefreshDomainName[server] || global.wazoRefreshDomainName[null] || apiClient.refreshDomainName,
5164
5330
  );
5165
5331
 
5166
5332
  apiClient.setFetchOptions(global.wazoFetchOptions[server] || global.wazoFetchOptions[null] || apiClient.fetchOptions);
@@ -903,6 +903,7 @@ global.wazoClientId = global.wazoClientId || {};
903
903
  global.wazoClientToken = global.wazoClientToken || {};
904
904
  global.wazoRefreshToken = global.wazoRefreshToken || {};
905
905
  global.wazoRefreshTenantId = global.wazoRefreshTenantId || {};
906
+ global.wazoRefreshDomainName = global.wazoRefreshDomainName || {};
906
907
  global.wazoOnRefreshToken = global.wazoOnRefreshToken || {};
907
908
  global.wazoOnRefreshTokenError = global.wazoOnRefreshTokenError || {};
908
909
  global.wazoRefreshExpiration = global.wazoRefreshExpiration || {};
@@ -1442,9 +1443,7 @@ class WebRTCPhone extends Emitter {
1442
1443
 
1443
1444
  try {
1444
1445
  if (this.currentScreenShare.stream) {
1445
- this.currentScreenShare.stream.getTracks()
1446
- .filter(track => track.kind === 'video')
1447
- .forEach(track => track.stop());
1446
+ this.currentScreenShare.stream.getTracks().forEach(track => track.stop());
1448
1447
  }
1449
1448
 
1450
1449
  if (restoreLocalStream) {
@@ -19,6 +19,17 @@ var newFrom = (instance , ToClass ) => {
19
19
 
20
20
  //
21
21
 
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+
32
+
22
33
 
23
34
 
24
35
 
@@ -29,6 +40,7 @@ var newFrom = (instance , ToClass ) => {
29
40
 
30
41
 
31
42
 
43
+
32
44
 
33
45
 
34
46
  class Meeting {
@@ -43,6 +55,8 @@ class Meeting {
43
55
 
44
56
 
45
57
 
58
+
59
+
46
60
 
47
61
  static parse(plain ) {
48
62
  return new Meeting({
@@ -55,6 +69,7 @@ class Meeting {
55
69
  extension: plain.exten,
56
70
  persistent: plain.persistent,
57
71
  creationTime: moment__default['default'](plain.creation_time).toDate(),
72
+ requireAuthorization: plain.require_authorization,
58
73
  });
59
74
  }
60
75
 
@@ -79,6 +94,7 @@ class Meeting {
79
94
  extension,
80
95
  persistent,
81
96
  creationTime,
97
+ requireAuthorization,
82
98
  } = {}) {
83
99
  this.guestSipAuthorization = guestSipAuthorization;
84
100
  this.uri = uri;
@@ -89,6 +105,7 @@ class Meeting {
89
105
  this.extension = extension;
90
106
  this.persistent = persistent;
91
107
  this.creationTime = creationTime;
108
+ this.requireAuthorization = requireAuthorization;
92
109
 
93
110
  // Useful to compare instead of instanceof with minified code
94
111
  this.type = 'Meeting';
@@ -99,11 +116,78 @@ class Meeting {
99
116
  const [username, secret] = atob(this.guestSipAuthorization).split(':');
100
117
  return { username, secret };
101
118
  }
119
+
102
120
  }
103
121
 
104
122
  //
105
123
 
124
+ const rawCreationTime = '2021-12-21T15:56:42.880Z';
125
+
106
126
  describe('Meeting domain', () => {
127
+ it('should retain its values when parsed', () => {
128
+ const args = {
129
+ guest_sip_authorization: 'some-guest-sip-authorization',
130
+ ingress_http_uri: 'some-uri',
131
+ name: 'some-name',
132
+ owner_uuids: ['some-owner-uuid'],
133
+ port: 'some-port',
134
+ uuid: 'some-uuid',
135
+ exten: 'some-exten',
136
+ persistent: true,
137
+ creation_time: rawCreationTime,
138
+ require_authorization: true,
139
+ };
140
+
141
+ const meeting = Meeting.parse(args);
142
+ const {
143
+ uri,
144
+ uuid,
145
+ name,
146
+ port,
147
+ extension,
148
+ persistent,
149
+ ownerUuids,
150
+ creationTime,
151
+ requireAuthorization,
152
+ } = meeting;
153
+
154
+ expect(uri).toEqual(args.ingress_http_uri);
155
+ expect(uuid).toEqual(args.uuid);
156
+ expect(name).toEqual(args.name);
157
+ expect(port).toEqual(args.port);
158
+ expect(extension).toEqual(args.exten);
159
+ expect(persistent).toEqual(args.persistent);
160
+ expect(ownerUuids).toEqual(args.owner_uuids);
161
+ expect(creationTime).toEqual(moment__default['default'](rawCreationTime).toDate());
162
+ expect(requireAuthorization).toEqual(args.require_authorization);
163
+ });
164
+
165
+ it('should retain its values when instantiated', () => {
166
+ const keys = [
167
+ 'uuid',
168
+ 'name',
169
+ 'guestSipAuthorization',
170
+ 'ownerUuids',
171
+ 'port',
172
+ 'uri',
173
+ 'extension',
174
+ 'persistent',
175
+ 'creationTime',
176
+ 'requireAuthorization',
177
+ ];
178
+
179
+ const args = keys.reduce((acc, key) => {
180
+ acc[key] = `some-${key}`;
181
+ return acc;
182
+ }, {});
183
+
184
+ const meeting = new Meeting(args);
185
+
186
+ keys.forEach(key =>
187
+ // $FlowFixMe
188
+ expect(meeting[key]).toEqual(`some-${key}`));
189
+ });
190
+
107
191
  it('can return username and secret from an base64 encrypted string', () => {
108
192
  const USERNAME = 'username';
109
193
  const SECRET = 'secret';
@@ -118,6 +202,7 @@ describe('Meeting domain', () => {
118
202
  uuid: '',
119
203
  exten: '',
120
204
  persistent: false,
205
+ require_authorization: false,
121
206
  };
122
207
 
123
208
  const meeting = Meeting.parse(args);
@@ -130,7 +215,7 @@ describe('Meeting domain', () => {
130
215
 
131
216
  it('should return a date from a string', () => {
132
217
  const args = {
133
- creation_time: '2021-12-21T15:56:42.880Z',
218
+ creation_time: rawCreationTime,
134
219
  guest_sip_authorization: '',
135
220
  ingress_http_uri: '',
136
221
  name: '',
@@ -139,6 +224,7 @@ describe('Meeting domain', () => {
139
224
  uuid: '',
140
225
  exten: '',
141
226
  persistent: false,
227
+ require_authorization: false,
142
228
  };
143
229
 
144
230
  const { creationTime } = Meeting.parse(args);