@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.
- package/dist/wazo-sdk.js +2 -2
- package/esm/__tests__/api-client.test.js +163 -2
- package/esm/__tests__/web-rtc-client.test.js +248 -27
- package/esm/api/auth.js +12 -0
- package/esm/api/calld.js +8 -0
- package/esm/api/confd.js +134 -2
- package/esm/api/ctid-ng.js +1 -0
- package/esm/api-client.js +163 -2
- package/esm/checker/Checker.js +204 -24
- package/esm/checker/checks/aor.js +163 -2
- package/esm/checker/checks/api.js +163 -2
- package/esm/checker/checks/index.js +204 -24
- package/esm/checker/checks/wazo-websocket.js +2 -0
- package/esm/checker/checks/webrtc-transport.js +202 -24
- package/esm/checker/checks/webrtc.js +202 -24
- package/esm/domain/AdHocAPIConference.js +170 -4
- package/esm/domain/Features.js +170 -4
- package/esm/domain/Meeting.js +18 -0
- package/esm/domain/MeetingAuthorization.js +70 -0
- package/esm/domain/Phone/CTIPhone.js +170 -4
- package/esm/domain/Phone/WebRTCPhone.js +2 -3
- package/esm/domain/__tests__/Meeting.test.js +87 -1
- package/esm/domain/__tests__/MeetingAuthorization.test.js +109 -0
- package/esm/index.js +300 -36
- package/esm/service/CallApi.js +170 -4
- package/esm/service/getApiClient.js +176 -5
- package/esm/simple/Auth.js +301 -37
- package/esm/simple/Configuration.js +300 -36
- package/esm/simple/Directory.js +170 -4
- package/esm/simple/Phone.js +300 -36
- package/esm/simple/Softphone.js +5 -0
- package/esm/simple/Websocket.js +3 -0
- package/esm/simple/index.js +300 -36
- package/esm/simple/room/LocalParticipant.js +300 -36
- package/esm/simple/room/Participant.js +300 -36
- package/esm/simple/room/RemoteParticipant.js +300 -36
- package/esm/simple/room/Room.js +300 -36
- package/esm/simple/room/SipRoom.js +300 -36
- package/esm/simple/room/Stream.js +300 -36
- package/esm/simple/room/__tests__/Participant.test.js +14812 -0
- package/esm/simple/room/__tests__/RemoteParticipant.test.js +300 -36
- package/esm/simple/utils.js +300 -36
- package/esm/utils/__tests__/object.test.js +57 -0
- package/esm/utils/__tests__/string.test.js +30 -0
- package/esm/utils/object.js +24 -0
- package/esm/utils/string.js +10 -0
- package/esm/web-rtc-client.js +202 -24
- package/esm/websocket-client.js +3 -1
- package/lib/__tests__/api-client.test.js +163 -2
- package/lib/__tests__/web-rtc-client.test.js +248 -27
- package/lib/api/auth.js +12 -0
- package/lib/api/calld.js +8 -0
- package/lib/api/confd.js +134 -2
- package/lib/api/ctid-ng.js +1 -0
- package/lib/api-client.js +163 -2
- package/lib/checker/Checker.js +204 -24
- package/lib/checker/checks/aor.js +163 -2
- package/lib/checker/checks/api.js +163 -2
- package/lib/checker/checks/index.js +204 -24
- package/lib/checker/checks/wazo-websocket.js +2 -0
- package/lib/checker/checks/webrtc-transport.js +202 -24
- package/lib/checker/checks/webrtc.js +202 -24
- package/lib/domain/AdHocAPIConference.js +170 -4
- package/lib/domain/Features.js +170 -4
- package/lib/domain/Meeting.js +18 -0
- package/lib/domain/MeetingAuthorization.js +79 -0
- package/lib/domain/Phone/CTIPhone.js +170 -4
- package/lib/domain/Phone/WebRTCPhone.js +2 -3
- package/lib/domain/__tests__/Meeting.test.js +87 -1
- package/lib/domain/__tests__/MeetingAuthorization.test.js +111 -0
- package/lib/index.js +300 -36
- package/lib/service/CallApi.js +170 -4
- package/lib/service/getApiClient.js +176 -4
- package/lib/simple/Auth.js +301 -36
- package/lib/simple/Configuration.js +300 -36
- package/lib/simple/Directory.js +170 -4
- package/lib/simple/Phone.js +300 -36
- package/lib/simple/Softphone.js +5 -0
- package/lib/simple/Websocket.js +3 -0
- package/lib/simple/index.js +300 -36
- package/lib/simple/room/LocalParticipant.js +300 -36
- package/lib/simple/room/Participant.js +300 -36
- package/lib/simple/room/RemoteParticipant.js +300 -36
- package/lib/simple/room/Room.js +300 -36
- package/lib/simple/room/SipRoom.js +300 -36
- package/lib/simple/room/Stream.js +300 -36
- package/lib/simple/room/__tests__/Participant.test.js +14822 -0
- package/lib/simple/room/__tests__/RemoteParticipant.test.js +300 -36
- package/lib/simple/utils.js +300 -36
- package/lib/utils/__tests__/object.test.js +59 -0
- package/lib/utils/__tests__/string.test.js +32 -0
- package/lib/utils/object.js +28 -0
- package/lib/utils/string.js +14 -0
- package/lib/web-rtc-client.js +202 -24
- package/lib/websocket-client.js +3 -0
- package/package.json +1 -1
- package/src/__tests__/web-rtc-client.test.js +46 -3
- package/src/api/auth.js +12 -0
- package/src/api/calld.js +8 -0
- package/src/api/confd.js +43 -2
- package/src/api-client.js +8 -0
- package/src/domain/Meeting.js +20 -0
- package/src/domain/MeetingAuthorization.js +67 -0
- package/src/domain/Phone/WebRTCPhone.js +1 -3
- package/src/domain/__tests__/Meeting.test.js +70 -1
- package/src/domain/__tests__/MeetingAuthorization.test.js +58 -0
- package/src/service/getApiClient.js +13 -2
- package/src/simple/Auth.js +35 -4
- package/src/simple/Softphone.js +5 -0
- package/src/simple/index.js +2 -1
- package/src/simple/room/Participant.js +40 -0
- package/src/simple/room/Room.js +2 -2
- package/src/simple/room/SipRoom.js +1 -1
- package/src/simple/room/__tests__/Participant.test.js +81 -0
- package/src/types/WebSocketMessage.js +7 -1
- package/src/utils/__tests__/object.test.js +35 -0
- package/src/utils/__tests__/string.test.js +23 -0
- package/src/utils/object.js +15 -0
- package/src/utils/string.js +8 -0
- package/src/web-rtc-client.js +39 -22
- package/src/websocket-client.js +2 -0
package/esm/simple/room/Room.js
CHANGED
|
@@ -2229,6 +2229,7 @@ var authMethods = (client , baseUrl ) => ({
|
|
|
2229
2229
|
|
|
2230
2230
|
|
|
2231
2231
|
|
|
2232
|
+
|
|
2232
2233
|
) {
|
|
2233
2234
|
const body = {
|
|
2234
2235
|
backend: params.backend || DEFAULT_BACKEND_USER,
|
|
@@ -2249,9 +2250,14 @@ var authMethods = (client , baseUrl ) => ({
|
|
|
2249
2250
|
}
|
|
2250
2251
|
|
|
2251
2252
|
if (params.tenantId) {
|
|
2253
|
+
console.warn('Use of `tenantId` is deprecated when calling logIn() method, use `domainName` instead.');
|
|
2252
2254
|
body.tenant_id = params.tenantId;
|
|
2253
2255
|
}
|
|
2254
2256
|
|
|
2257
|
+
if (params.domainName) {
|
|
2258
|
+
body.domain_name = params.domainName;
|
|
2259
|
+
}
|
|
2260
|
+
|
|
2255
2261
|
return client.post(`${baseUrl}/token`, body, headers).then(response => Session.parse(response));
|
|
2256
2262
|
},
|
|
2257
2263
|
|
|
@@ -2264,6 +2270,7 @@ var authMethods = (client , baseUrl ) => ({
|
|
|
2264
2270
|
expiration ,
|
|
2265
2271
|
isMobile = false,
|
|
2266
2272
|
tenantId ,
|
|
2273
|
+
domainName ,
|
|
2267
2274
|
) => {
|
|
2268
2275
|
const body = {
|
|
2269
2276
|
backend: backend || DEFAULT_BACKEND_USER,
|
|
@@ -2273,9 +2280,14 @@ var authMethods = (client , baseUrl ) => ({
|
|
|
2273
2280
|
};
|
|
2274
2281
|
|
|
2275
2282
|
if (tenantId) {
|
|
2283
|
+
console.warn('Use of `tenantId` is deprecated when calling refreshToken() method, use `domainName` instead.');
|
|
2276
2284
|
body.tenant_id = tenantId;
|
|
2277
2285
|
}
|
|
2278
2286
|
|
|
2287
|
+
if (domainName) {
|
|
2288
|
+
body.domain_name = domainName;
|
|
2289
|
+
}
|
|
2290
|
+
|
|
2279
2291
|
const headers = {
|
|
2280
2292
|
'Content-Type': 'application/json',
|
|
2281
2293
|
...(isMobile ? { 'Wazo-Session-Type': 'mobile' } : {}),
|
|
@@ -2645,6 +2657,70 @@ class ExternalApp {
|
|
|
2645
2657
|
|
|
2646
2658
|
//
|
|
2647
2659
|
|
|
2660
|
+
class MeetingAuthorization {
|
|
2661
|
+
|
|
2662
|
+
|
|
2663
|
+
|
|
2664
|
+
|
|
2665
|
+
|
|
2666
|
+
|
|
2667
|
+
constructor({
|
|
2668
|
+
meetingUuid,
|
|
2669
|
+
uuid,
|
|
2670
|
+
userUuid,
|
|
2671
|
+
userName,
|
|
2672
|
+
} = {}) {
|
|
2673
|
+
this.meetingUuid = meetingUuid;
|
|
2674
|
+
this.uuid = uuid;
|
|
2675
|
+
this.userUuid = userUuid;
|
|
2676
|
+
this.userName = userName;
|
|
2677
|
+
}
|
|
2678
|
+
|
|
2679
|
+
setStatus(status ) {
|
|
2680
|
+
this.status = status;
|
|
2681
|
+
}
|
|
2682
|
+
|
|
2683
|
+
getStatus() {
|
|
2684
|
+
return this.status;
|
|
2685
|
+
}
|
|
2686
|
+
|
|
2687
|
+
static parse(plain ) {
|
|
2688
|
+
const {
|
|
2689
|
+
meeting_uuid: meetingUuid,
|
|
2690
|
+
uuid,
|
|
2691
|
+
guest_uuid: userUuid,
|
|
2692
|
+
guest_name: userName,
|
|
2693
|
+
} = plain;
|
|
2694
|
+
|
|
2695
|
+
return new MeetingAuthorization({
|
|
2696
|
+
meetingUuid,
|
|
2697
|
+
uuid,
|
|
2698
|
+
userUuid,
|
|
2699
|
+
userName,
|
|
2700
|
+
});
|
|
2701
|
+
}
|
|
2702
|
+
|
|
2703
|
+
static parseMany(items ) {
|
|
2704
|
+
if (!items) {
|
|
2705
|
+
return [];
|
|
2706
|
+
}
|
|
2707
|
+
return items.map(MeetingAuthorization.parse);
|
|
2708
|
+
}
|
|
2709
|
+
}
|
|
2710
|
+
|
|
2711
|
+
//
|
|
2712
|
+
|
|
2713
|
+
|
|
2714
|
+
|
|
2715
|
+
|
|
2716
|
+
|
|
2717
|
+
|
|
2718
|
+
|
|
2719
|
+
|
|
2720
|
+
|
|
2721
|
+
|
|
2722
|
+
|
|
2723
|
+
|
|
2648
2724
|
|
|
2649
2725
|
|
|
2650
2726
|
|
|
@@ -2655,6 +2731,7 @@ class ExternalApp {
|
|
|
2655
2731
|
|
|
2656
2732
|
|
|
2657
2733
|
|
|
2734
|
+
|
|
2658
2735
|
|
|
2659
2736
|
|
|
2660
2737
|
class Meeting {
|
|
@@ -2669,6 +2746,8 @@ class Meeting {
|
|
|
2669
2746
|
|
|
2670
2747
|
|
|
2671
2748
|
|
|
2749
|
+
|
|
2750
|
+
|
|
2672
2751
|
|
|
2673
2752
|
static parse(plain ) {
|
|
2674
2753
|
return new Meeting({
|
|
@@ -2681,6 +2760,7 @@ class Meeting {
|
|
|
2681
2760
|
extension: plain.exten,
|
|
2682
2761
|
persistent: plain.persistent,
|
|
2683
2762
|
creationTime: moment(plain.creation_time).toDate(),
|
|
2763
|
+
requireAuthorization: plain.require_authorization,
|
|
2684
2764
|
});
|
|
2685
2765
|
}
|
|
2686
2766
|
|
|
@@ -2705,6 +2785,7 @@ class Meeting {
|
|
|
2705
2785
|
extension,
|
|
2706
2786
|
persistent,
|
|
2707
2787
|
creationTime,
|
|
2788
|
+
requireAuthorization,
|
|
2708
2789
|
} = {}) {
|
|
2709
2790
|
this.guestSipAuthorization = guestSipAuthorization;
|
|
2710
2791
|
this.uri = uri;
|
|
@@ -2715,6 +2796,7 @@ class Meeting {
|
|
|
2715
2796
|
this.extension = extension;
|
|
2716
2797
|
this.persistent = persistent;
|
|
2717
2798
|
this.creationTime = creationTime;
|
|
2799
|
+
this.requireAuthorization = requireAuthorization;
|
|
2718
2800
|
|
|
2719
2801
|
// Useful to compare instead of instanceof with minified code
|
|
2720
2802
|
this.type = 'Meeting';
|
|
@@ -2725,8 +2807,32 @@ class Meeting {
|
|
|
2725
2807
|
const [username, secret] = atob(this.guestSipAuthorization).split(':');
|
|
2726
2808
|
return { username, secret };
|
|
2727
2809
|
}
|
|
2810
|
+
|
|
2728
2811
|
}
|
|
2729
2812
|
|
|
2813
|
+
//
|
|
2814
|
+
|
|
2815
|
+
const camelToUnderscore = (key ) => {
|
|
2816
|
+
if (typeof key !== 'string') {
|
|
2817
|
+
throw new Error('Input is not a string');
|
|
2818
|
+
}
|
|
2819
|
+
return key.charAt(0).toLowerCase() + key.substring(1).replace(/([A-Z])/g, '_$1').toLowerCase();
|
|
2820
|
+
};
|
|
2821
|
+
|
|
2822
|
+
//
|
|
2823
|
+
|
|
2824
|
+
const convertKeysFromCamelToUnderscore = (args ) => {
|
|
2825
|
+
if (!args || typeof args !== 'object' || Array.isArray(args)) {
|
|
2826
|
+
throw new Error('Input is not an object');
|
|
2827
|
+
}
|
|
2828
|
+
|
|
2829
|
+
return Object.keys(args).reduce((acc, key) => {
|
|
2830
|
+
acc[camelToUnderscore(key)] = typeof args[key] === 'object' && !Array.isArray(args[key])
|
|
2831
|
+
? convertKeysFromCamelToUnderscore(args[key]) : args[key];
|
|
2832
|
+
return acc;
|
|
2833
|
+
}, {});
|
|
2834
|
+
};
|
|
2835
|
+
|
|
2730
2836
|
/* */
|
|
2731
2837
|
|
|
2732
2838
|
var confdMethods = (client , baseUrl ) => ({
|
|
@@ -2795,8 +2901,18 @@ var confdMethods = (client , baseUrl ) => ({
|
|
|
2795
2901
|
getMyMeetings: () =>
|
|
2796
2902
|
client.get(`${baseUrl}/users/me/meetings`).then(response => Meeting.parseMany(response.items)),
|
|
2797
2903
|
|
|
2798
|
-
createMyMeeting: (
|
|
2799
|
-
client
|
|
2904
|
+
createMyMeeting: (args ) =>
|
|
2905
|
+
client
|
|
2906
|
+
.post(`${baseUrl}/users/me/meetings`, convertKeysFromCamelToUnderscore(args))
|
|
2907
|
+
.then(Meeting.parse),
|
|
2908
|
+
|
|
2909
|
+
updateMyMeeting: (meetingUuid , data ) =>
|
|
2910
|
+
client.put(
|
|
2911
|
+
`${baseUrl}/users/me/meetings/${meetingUuid}`,
|
|
2912
|
+
convertKeysFromCamelToUnderscore(data),
|
|
2913
|
+
null,
|
|
2914
|
+
ApiRequester.successResponseParser,
|
|
2915
|
+
),
|
|
2800
2916
|
|
|
2801
2917
|
deleteMyMeeting: (meetingUuid ) =>
|
|
2802
2918
|
client.delete(`${baseUrl}/users/me/meetings/${meetingUuid}`, null),
|
|
@@ -2804,8 +2920,36 @@ var confdMethods = (client , baseUrl ) => ({
|
|
|
2804
2920
|
getMeeting: (meetingUuid ) =>
|
|
2805
2921
|
client.get(`${baseUrl}/meetings/${meetingUuid}`, null).then(Meeting.parse),
|
|
2806
2922
|
|
|
2923
|
+
meetingAuthorizations: (meetingUuid ) =>
|
|
2924
|
+
client.get(`${baseUrl}/users/me/meetings/${meetingUuid}/authorizations`, null).then(MeetingAuthorization.parseMany),
|
|
2925
|
+
|
|
2926
|
+
meetingAuthorizationReject: (meetingUuid , authorizationUuid ) =>
|
|
2927
|
+
client.put(
|
|
2928
|
+
`${baseUrl}/users/me/meetings/${meetingUuid}/authorizations/${authorizationUuid}/reject`,
|
|
2929
|
+
{},
|
|
2930
|
+
null,
|
|
2931
|
+
ApiRequester.successResponseParser,
|
|
2932
|
+
),
|
|
2933
|
+
|
|
2934
|
+
meetingAuthorizationAccept: (meetingUuid , authorizationUuid ) =>
|
|
2935
|
+
client.put(
|
|
2936
|
+
`${baseUrl}/users/me/meetings/${meetingUuid}/authorizations/${authorizationUuid}/accept`,
|
|
2937
|
+
{},
|
|
2938
|
+
null,
|
|
2939
|
+
ApiRequester.successResponseParser,
|
|
2940
|
+
),
|
|
2941
|
+
|
|
2807
2942
|
guestGetMeeting: (meetingUuid ) =>
|
|
2808
2943
|
client.get(`${baseUrl}/guests/me/meetings/${meetingUuid}`, null).then(Meeting.parse),
|
|
2944
|
+
|
|
2945
|
+
guestAuthorizationRequest: (userUuid , meetingUuid , username ) =>
|
|
2946
|
+
client
|
|
2947
|
+
.post(`${baseUrl}/guests/${userUuid}/meetings/${meetingUuid}/authorizations`, { guest_name: username })
|
|
2948
|
+
.then(MeetingAuthorization.parse),
|
|
2949
|
+
|
|
2950
|
+
guestAuthorizationCheck: (userUuid , meetingUuid , authorizationUuid ) =>
|
|
2951
|
+
client.get(`${baseUrl}/guests/${userUuid}/meetings/${meetingUuid}/authorizations/${authorizationUuid}`, null),
|
|
2952
|
+
|
|
2809
2953
|
});
|
|
2810
2954
|
|
|
2811
2955
|
//
|
|
@@ -5056,6 +5200,14 @@ var calldMethods = (client , baseUrl ) => ({
|
|
|
5056
5200
|
getMeetingParticipantsAsUser: async (meetingUuid ) =>
|
|
5057
5201
|
client.get(`${baseUrl}/users/me/meetings/${meetingUuid}/participants`),
|
|
5058
5202
|
|
|
5203
|
+
banMeetingParticipant: (meetingUuid , participantUuid ) =>
|
|
5204
|
+
client.delete(
|
|
5205
|
+
`${baseUrl}/users/me/meetings/${meetingUuid}/participants/${participantUuid}`,
|
|
5206
|
+
null,
|
|
5207
|
+
null,
|
|
5208
|
+
ApiRequester.successResponseParser,
|
|
5209
|
+
),
|
|
5210
|
+
|
|
5059
5211
|
listTrunks: () => client.get(`${baseUrl}/trunks`),
|
|
5060
5212
|
|
|
5061
5213
|
mute: (callId ) =>
|
|
@@ -5433,6 +5585,7 @@ class ApiClient {
|
|
|
5433
5585
|
|
|
5434
5586
|
|
|
5435
5587
|
|
|
5588
|
+
|
|
5436
5589
|
|
|
5437
5590
|
|
|
5438
5591
|
|
|
@@ -5474,6 +5627,7 @@ class ApiClient {
|
|
|
5474
5627
|
refreshToken: this.refreshToken,
|
|
5475
5628
|
refreshBackend: this.refreshBackend,
|
|
5476
5629
|
refreshTenantId: this.refreshTenantId,
|
|
5630
|
+
refreshDomainName: this.refreshDomainName,
|
|
5477
5631
|
refreshExpiration: this.refreshExpiration,
|
|
5478
5632
|
isMobile: this.isMobile,
|
|
5479
5633
|
});
|
|
@@ -5489,6 +5643,7 @@ class ApiClient {
|
|
|
5489
5643
|
this.refreshExpiration,
|
|
5490
5644
|
this.isMobile,
|
|
5491
5645
|
this.refreshTenantId,
|
|
5646
|
+
this.refreshDomainName,
|
|
5492
5647
|
);
|
|
5493
5648
|
|
|
5494
5649
|
logger$a.info('token refreshed', { token: session.token });
|
|
@@ -5542,9 +5697,14 @@ class ApiClient {
|
|
|
5542
5697
|
}
|
|
5543
5698
|
|
|
5544
5699
|
setRefreshTenantId(tenantId ) {
|
|
5700
|
+
console.warn('Use of `setRefreshTenantId` is deprecated, use `setRefreshDomainName` instead');
|
|
5545
5701
|
this.refreshTenantId = tenantId;
|
|
5546
5702
|
}
|
|
5547
5703
|
|
|
5704
|
+
setRefreshDomainName(domainName ) {
|
|
5705
|
+
this.refreshDomainName = domainName;
|
|
5706
|
+
}
|
|
5707
|
+
|
|
5548
5708
|
setIsMobile(isMobile ) {
|
|
5549
5709
|
this.isMobile = isMobile;
|
|
5550
5710
|
}
|
|
@@ -5569,6 +5729,7 @@ global.wazoClientId = global.wazoClientId || {};
|
|
|
5569
5729
|
global.wazoClientToken = global.wazoClientToken || {};
|
|
5570
5730
|
global.wazoRefreshToken = global.wazoRefreshToken || {};
|
|
5571
5731
|
global.wazoRefreshTenantId = global.wazoRefreshTenantId || {};
|
|
5732
|
+
global.wazoRefreshDomainName = global.wazoRefreshDomainName || {};
|
|
5572
5733
|
global.wazoOnRefreshToken = global.wazoOnRefreshToken || {};
|
|
5573
5734
|
global.wazoOnRefreshTokenError = global.wazoOnRefreshTokenError || {};
|
|
5574
5735
|
global.wazoRefreshExpiration = global.wazoRefreshExpiration || {};
|
|
@@ -5593,9 +5754,14 @@ const setRefreshToken = (newRefreshToken , forServer = null) =>
|
|
|
5593
5754
|
};
|
|
5594
5755
|
|
|
5595
5756
|
const setRefreshTenantId = (refreshTenantId , forServer = null) => {
|
|
5757
|
+
console.warn('Use of `setRefreshTenantId` is deprecated, please use `setRefreshDomainName` instead');
|
|
5596
5758
|
global.wazoRefreshTenantId[forServer] = refreshTenantId;
|
|
5597
5759
|
};
|
|
5598
5760
|
|
|
5761
|
+
const setRefreshDomainName = (refreshDomainName , forServer = null) => {
|
|
5762
|
+
global.wazoRefreshDomainName[forServer] = refreshDomainName;
|
|
5763
|
+
};
|
|
5764
|
+
|
|
5599
5765
|
const setOnRefreshToken = (onRefreshToken , forServer = null) => {
|
|
5600
5766
|
global.wazoOnRefreshToken[forServer] = onRefreshToken;
|
|
5601
5767
|
};
|
|
@@ -5614,6 +5780,7 @@ const setFetchOptions = (fetchOptions , forServer = null) => {
|
|
|
5614
5780
|
|
|
5615
5781
|
const fillClient = (apiClient ) => {
|
|
5616
5782
|
const { server, token, clientId } = apiClient.client;
|
|
5783
|
+
const tenantId = global.wazoRefreshTenantId[server] || global.wazoRefreshTenantId[null] || apiClient.refreshTenantId;
|
|
5617
5784
|
|
|
5618
5785
|
// try with null server when dealing with non-related server info
|
|
5619
5786
|
apiClient.setToken(global.wazoClientToken[server] || global.wazoClientToken[null] || token);
|
|
@@ -5622,8 +5789,12 @@ const fillClient = (apiClient ) => {
|
|
|
5622
5789
|
|
|
5623
5790
|
apiClient.setRefreshToken(global.wazoRefreshToken[server] || global.wazoRefreshToken[null] || apiClient.refreshToken);
|
|
5624
5791
|
|
|
5625
|
-
|
|
5626
|
-
|
|
5792
|
+
if (tenantId) {
|
|
5793
|
+
apiClient.setRefreshTenantId(tenantId);
|
|
5794
|
+
}
|
|
5795
|
+
|
|
5796
|
+
apiClient.setRefreshDomainName(
|
|
5797
|
+
global.wazoRefreshDomainName[server] || global.wazoRefreshDomainName[null] || apiClient.refreshDomainName,
|
|
5627
5798
|
);
|
|
5628
5799
|
|
|
5629
5800
|
apiClient.setFetchOptions(global.wazoFetchOptions[server] || global.wazoFetchOptions[null] || apiClient.fetchOptions);
|
|
@@ -5665,6 +5836,7 @@ var getApiClient = (forServer = null) => {
|
|
|
5665
5836
|
class InvalidSubscription extends Error {}
|
|
5666
5837
|
class InvalidAuthorization extends Error {}
|
|
5667
5838
|
class NoTenantIdError extends Error {}
|
|
5839
|
+
class NoDomainNameError extends Error {}
|
|
5668
5840
|
|
|
5669
5841
|
const logger$9 = IssueReporter$1.loggerFor('simple-auth');
|
|
5670
5842
|
|
|
@@ -5728,9 +5900,24 @@ class Auth {
|
|
|
5728
5900
|
setFetchOptions(options);
|
|
5729
5901
|
}
|
|
5730
5902
|
|
|
5731
|
-
async logIn(username , password , backend ,
|
|
5732
|
-
|
|
5733
|
-
|
|
5903
|
+
async logIn(username , password , backend , extra ) {
|
|
5904
|
+
let tenantId = null;
|
|
5905
|
+
let domainName = null;
|
|
5906
|
+
if (typeof extra === 'string') {
|
|
5907
|
+
tenantId = extra;
|
|
5908
|
+
}
|
|
5909
|
+
if (extra && typeof extra === 'object') {
|
|
5910
|
+
domainName = extra.domainName;
|
|
5911
|
+
}
|
|
5912
|
+
|
|
5913
|
+
if (backend && backend !== this.BACKEND_WAZO && !tenantId && !domainName) {
|
|
5914
|
+
if (!tenantId) {
|
|
5915
|
+
throw new NoTenantIdError('No tenant id');
|
|
5916
|
+
}
|
|
5917
|
+
|
|
5918
|
+
if (!domainName) {
|
|
5919
|
+
throw new NoDomainNameError('No domain name');
|
|
5920
|
+
}
|
|
5734
5921
|
}
|
|
5735
5922
|
|
|
5736
5923
|
this.authenticated = false;
|
|
@@ -5740,6 +5927,7 @@ class Auth {
|
|
|
5740
5927
|
password,
|
|
5741
5928
|
backend,
|
|
5742
5929
|
tenantId,
|
|
5930
|
+
domainName,
|
|
5743
5931
|
expiration: this.expiration,
|
|
5744
5932
|
mobile: this.mobile,
|
|
5745
5933
|
});
|
|
@@ -5748,7 +5936,13 @@ class Auth {
|
|
|
5748
5936
|
getApiClient().setRefreshBackend(backend);
|
|
5749
5937
|
}
|
|
5750
5938
|
|
|
5751
|
-
|
|
5939
|
+
if (tenantId) {
|
|
5940
|
+
getApiClient().setRefreshTenantId(tenantId);
|
|
5941
|
+
}
|
|
5942
|
+
|
|
5943
|
+
if (domainName) {
|
|
5944
|
+
getApiClient().setRefreshDomainName(domainName);
|
|
5945
|
+
}
|
|
5752
5946
|
|
|
5753
5947
|
return this._onAuthenticated(rawSession);
|
|
5754
5948
|
}
|
|
@@ -5847,11 +6041,18 @@ class Auth {
|
|
|
5847
6041
|
}
|
|
5848
6042
|
|
|
5849
6043
|
setRefreshTenantId(refreshTenantId ) {
|
|
6044
|
+
console.warn('Use of `setRefreshTenantId` is deprecated, use `setRefreshDomainName` instead.');
|
|
5850
6045
|
setRefreshTenantId(refreshTenantId);
|
|
5851
6046
|
|
|
5852
6047
|
getApiClient().setRefreshTenantId(refreshTenantId);
|
|
5853
6048
|
}
|
|
5854
6049
|
|
|
6050
|
+
setRefreshDomainName(domainName ) {
|
|
6051
|
+
setRefreshDomainName(domainName);
|
|
6052
|
+
|
|
6053
|
+
getApiClient().setRefreshDomainName(domainName);
|
|
6054
|
+
}
|
|
6055
|
+
|
|
5855
6056
|
forceRefreshToken() {
|
|
5856
6057
|
getApiClient().forceRefreshToken();
|
|
5857
6058
|
}
|
|
@@ -7814,7 +8015,7 @@ class WebRTCClient extends Emitter {
|
|
|
7814
8015
|
});
|
|
7815
8016
|
}
|
|
7816
8017
|
|
|
7817
|
-
changeAudioInputDevice(id , session , force ) {
|
|
8018
|
+
async changeAudioInputDevice(id , session , force ) {
|
|
7818
8019
|
const currentId = this.getAudioDeviceId();
|
|
7819
8020
|
logger$8.info('setting audio input device', { id, currentId, session: !!session });
|
|
7820
8021
|
|
|
@@ -7822,33 +8023,50 @@ class WebRTCClient extends Emitter {
|
|
|
7822
8023
|
return null;
|
|
7823
8024
|
}
|
|
7824
8025
|
|
|
8026
|
+
// in order to handle an audio track change for default devices
|
|
8027
|
+
// we need the actual id of the device (not 'default')
|
|
8028
|
+
let deviceId = id;
|
|
8029
|
+
if (id === 'default' && navigator.mediaDevices) {
|
|
8030
|
+
const devices = await navigator.mediaDevices.enumerateDevices();
|
|
8031
|
+
const defaultDevice = devices.find(device => device.deviceId === 'default');
|
|
8032
|
+
if (defaultDevice) {
|
|
8033
|
+
const deviceLabel = defaultDevice.label.replace('Default - ', '');
|
|
8034
|
+
const targetDevice = devices.find(device => device.label === deviceLabel);
|
|
8035
|
+
if (targetDevice) {
|
|
8036
|
+
deviceId = targetDevice.deviceId;
|
|
8037
|
+
if (!force && deviceId === currentId) {
|
|
8038
|
+
return null;
|
|
8039
|
+
}
|
|
8040
|
+
}
|
|
8041
|
+
}
|
|
8042
|
+
}
|
|
8043
|
+
|
|
7825
8044
|
// let's update the local audio value
|
|
7826
8045
|
if (this.audio) {
|
|
7827
8046
|
this.audio = {
|
|
7828
8047
|
deviceId: {
|
|
7829
|
-
exact:
|
|
8048
|
+
exact: deviceId,
|
|
7830
8049
|
},
|
|
7831
8050
|
};
|
|
7832
8051
|
}
|
|
7833
8052
|
|
|
7834
|
-
if (session) {
|
|
8053
|
+
if (session && navigator.mediaDevices) {
|
|
7835
8054
|
const sdh = session.sessionDescriptionHandler;
|
|
7836
8055
|
const pc = sdh.peerConnection;
|
|
7837
8056
|
|
|
7838
|
-
|
|
7839
|
-
|
|
7840
|
-
|
|
7841
|
-
|
|
8057
|
+
const constraints = { audio: { deviceId: { exact: deviceId } } };
|
|
8058
|
+
const stream = await navigator.mediaDevices.getUserMedia(constraints);
|
|
8059
|
+
const audioTrack = stream.getAudioTracks()[0];
|
|
8060
|
+
const sender = pc && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
|
|
7842
8061
|
|
|
7843
|
-
|
|
7844
|
-
|
|
7845
|
-
|
|
7846
|
-
}
|
|
7847
|
-
sender.replaceTrack(audioTrack);
|
|
8062
|
+
if (sender) {
|
|
8063
|
+
if (sender.track) {
|
|
8064
|
+
audioTrack.enabled = sender.track.enabled;
|
|
7848
8065
|
}
|
|
8066
|
+
sender.replaceTrack(audioTrack);
|
|
8067
|
+
}
|
|
7849
8068
|
|
|
7850
|
-
|
|
7851
|
-
});
|
|
8069
|
+
return stream;
|
|
7852
8070
|
}
|
|
7853
8071
|
}
|
|
7854
8072
|
|
|
@@ -7868,14 +8086,14 @@ class WebRTCClient extends Emitter {
|
|
|
7868
8086
|
return null;
|
|
7869
8087
|
}
|
|
7870
8088
|
|
|
7871
|
-
// let's
|
|
7872
|
-
|
|
7873
|
-
|
|
7874
|
-
|
|
7875
|
-
|
|
7876
|
-
|
|
7877
|
-
}
|
|
7878
|
-
}
|
|
8089
|
+
// let's make sure we don't lose other video constraints settings -- width, height, frameRate...
|
|
8090
|
+
const videoObject = typeof this.video === 'object' ? this.video : {};
|
|
8091
|
+
this.video = {
|
|
8092
|
+
...videoObject,
|
|
8093
|
+
deviceId: {
|
|
8094
|
+
exact: id,
|
|
8095
|
+
},
|
|
8096
|
+
};
|
|
7879
8097
|
}
|
|
7880
8098
|
|
|
7881
8099
|
changeSessionVideoInputDevice(id , session ) {
|
|
@@ -9477,9 +9695,7 @@ class WebRTCPhone extends Emitter {
|
|
|
9477
9695
|
|
|
9478
9696
|
try {
|
|
9479
9697
|
if (this.currentScreenShare.stream) {
|
|
9480
|
-
this.currentScreenShare.stream.getTracks()
|
|
9481
|
-
.filter(track => track.kind === 'video')
|
|
9482
|
-
.forEach(track => track.stop());
|
|
9698
|
+
this.currentScreenShare.stream.getTracks().forEach(track => track.stop());
|
|
9483
9699
|
}
|
|
9484
9700
|
|
|
9485
9701
|
if (restoreLocalStream) {
|
|
@@ -11270,6 +11486,7 @@ const AGENT_UNPAUSED = 'agent_unpaused';
|
|
|
11270
11486
|
const CONFERENCE_ADHOC_PARTICIPANT_LEFT = 'conference_adhoc_participant_left';
|
|
11271
11487
|
const CONFERENCE_ADHOC_DELETED = 'conference_adhoc_deleted';
|
|
11272
11488
|
const MEETING_USER_PROGRESS = 'meeting_user_progress';
|
|
11489
|
+
const MEETING_USER_GUEST_AUTHORIZATION_CREATED = 'meeting_user_guest_authorization_created';
|
|
11273
11490
|
|
|
11274
11491
|
const BLACKLIST_EVENTS = [
|
|
11275
11492
|
CHAT_MESSAGE_SENT,
|
|
@@ -11621,6 +11838,7 @@ WebSocketClient.eventLists = [
|
|
|
11621
11838
|
CONFERENCE_ADHOC_PARTICIPANT_LEFT,
|
|
11622
11839
|
CONFERENCE_ADHOC_DELETED,
|
|
11623
11840
|
MEETING_USER_PROGRESS,
|
|
11841
|
+
MEETING_USER_GUEST_AUTHORIZATION_CREATED,
|
|
11624
11842
|
];
|
|
11625
11843
|
|
|
11626
11844
|
var WebSocketClient$1 = /*#__PURE__*/Object.freeze({
|
|
@@ -11692,6 +11910,7 @@ var WebSocketClient$1 = /*#__PURE__*/Object.freeze({
|
|
|
11692
11910
|
CONFERENCE_ADHOC_PARTICIPANT_LEFT: CONFERENCE_ADHOC_PARTICIPANT_LEFT,
|
|
11693
11911
|
CONFERENCE_ADHOC_DELETED: CONFERENCE_ADHOC_DELETED,
|
|
11694
11912
|
MEETING_USER_PROGRESS: MEETING_USER_PROGRESS,
|
|
11913
|
+
MEETING_USER_GUEST_AUTHORIZATION_CREATED: MEETING_USER_GUEST_AUTHORIZATION_CREATED,
|
|
11695
11914
|
HEARTBEAT_ENGINE_VERSION: HEARTBEAT_ENGINE_VERSION,
|
|
11696
11915
|
'default': WebSocketClient
|
|
11697
11916
|
});
|
|
@@ -11789,7 +12008,7 @@ class SipRoom extends Room {
|
|
|
11789
12008
|
logger$3.info('connecting to sip room', { extension, audioOnly, room: !!room });
|
|
11790
12009
|
|
|
11791
12010
|
if (!room) {
|
|
11792
|
-
await Wazo.Phone.connect();
|
|
12011
|
+
await Wazo.Phone.connect({ media: constraints });
|
|
11793
12012
|
|
|
11794
12013
|
const withCamera = constraints && !!constraints.video;
|
|
11795
12014
|
|
|
@@ -11935,6 +12154,7 @@ class Participant extends Emitter {
|
|
|
11935
12154
|
|
|
11936
12155
|
|
|
11937
12156
|
|
|
12157
|
+
|
|
11938
12158
|
|
|
11939
12159
|
|
|
11940
12160
|
|
|
@@ -11952,6 +12172,7 @@ class Participant extends Emitter {
|
|
|
11952
12172
|
|
|
11953
12173
|
|
|
11954
12174
|
|
|
12175
|
+
|
|
11955
12176
|
|
|
11956
12177
|
/**
|
|
11957
12178
|
* @param room Room The room where the participant is
|
|
@@ -11975,6 +12196,7 @@ class Participant extends Emitter {
|
|
|
11975
12196
|
this.screensharing = false;
|
|
11976
12197
|
this.isOnHold = false;
|
|
11977
12198
|
this.extra = extra;
|
|
12199
|
+
this.banned = false;
|
|
11978
12200
|
|
|
11979
12201
|
this.ON_UPDATED = 'participant/ON_UPDATED';
|
|
11980
12202
|
this.ON_START_TALKING = 'participant/ON_START_TALKING';
|
|
@@ -11991,6 +12213,7 @@ class Participant extends Emitter {
|
|
|
11991
12213
|
this.ON_EXTRA_CHANGE = 'participant/ON_EXTRA_CHANGE';
|
|
11992
12214
|
this.ON_HOLD = 'participant/ON_HOLD';
|
|
11993
12215
|
this.ON_RESUME = 'participant/ON_RESUME';
|
|
12216
|
+
this.ON_BAN = 'participant/ON_BAN';
|
|
11994
12217
|
}
|
|
11995
12218
|
|
|
11996
12219
|
triggerEvent(name , ...args ) {
|
|
@@ -12031,6 +12254,10 @@ class Participant extends Emitter {
|
|
|
12031
12254
|
status.extra = this.extra;
|
|
12032
12255
|
break;
|
|
12033
12256
|
}
|
|
12257
|
+
case this.ON_BAN: {
|
|
12258
|
+
status.banned = true;
|
|
12259
|
+
break;
|
|
12260
|
+
}
|
|
12034
12261
|
}
|
|
12035
12262
|
|
|
12036
12263
|
if (broadcast) {
|
|
@@ -12133,6 +12360,11 @@ class Participant extends Emitter {
|
|
|
12133
12360
|
this.triggerUpdate(this.ON_RESUME, broadcast);
|
|
12134
12361
|
}
|
|
12135
12362
|
|
|
12363
|
+
onBan(broadcast = true) {
|
|
12364
|
+
this.banned = true;
|
|
12365
|
+
this.triggerUpdate(this.ON_BAN, broadcast);
|
|
12366
|
+
}
|
|
12367
|
+
|
|
12136
12368
|
getStatus() {
|
|
12137
12369
|
return {
|
|
12138
12370
|
callId: this.callId,
|
|
@@ -12179,6 +12411,10 @@ class Participant extends Emitter {
|
|
|
12179
12411
|
}
|
|
12180
12412
|
}
|
|
12181
12413
|
|
|
12414
|
+
if (status.banned) {
|
|
12415
|
+
this.onBan(false);
|
|
12416
|
+
}
|
|
12417
|
+
|
|
12182
12418
|
// Poor man's object comparison
|
|
12183
12419
|
if (typeof status.extra !== 'undefined' && JSON.stringify(this.extra) !== JSON.stringify(status.extra)) {
|
|
12184
12420
|
this.extra = { ...this.extra, ...status.extra };
|
|
@@ -12206,6 +12442,28 @@ class Participant extends Emitter {
|
|
|
12206
12442
|
this.streams = streams;
|
|
12207
12443
|
this.videoStreams = streams;
|
|
12208
12444
|
}
|
|
12445
|
+
|
|
12446
|
+
async ban(apiRequestDelay = null) {
|
|
12447
|
+
const { meetingUuid } = this.room;
|
|
12448
|
+
if (!meetingUuid) {
|
|
12449
|
+
throw new Error('Attempting to ban a participant without a `meetingUuid`');
|
|
12450
|
+
}
|
|
12451
|
+
|
|
12452
|
+
// this notifies all that someone is being banned
|
|
12453
|
+
this.onBan(true);
|
|
12454
|
+
|
|
12455
|
+
// this allows to delay the actual ban, in order for the banned participant as well as others to react to the situation
|
|
12456
|
+
if (apiRequestDelay) {
|
|
12457
|
+
await this.delay(apiRequestDelay);
|
|
12458
|
+
}
|
|
12459
|
+
|
|
12460
|
+
// proceed with the actual kick
|
|
12461
|
+
return getApiClient().calld.banMeetingParticipant(meetingUuid, this.callId);
|
|
12462
|
+
}
|
|
12463
|
+
|
|
12464
|
+
async delay(ms ) {
|
|
12465
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
12466
|
+
}
|
|
12209
12467
|
}
|
|
12210
12468
|
|
|
12211
12469
|
//
|
|
@@ -13277,6 +13535,7 @@ class Softphone {
|
|
|
13277
13535
|
wrapUpDuration,
|
|
13278
13536
|
enableAgent = true,
|
|
13279
13537
|
tenantId,
|
|
13538
|
+
domainName,
|
|
13280
13539
|
debug = false,
|
|
13281
13540
|
} = {}) {
|
|
13282
13541
|
this.url = url || 'https://softphone.wazo.io';
|
|
@@ -13301,8 +13560,12 @@ class Softphone {
|
|
|
13301
13560
|
config.port = port;
|
|
13302
13561
|
}
|
|
13303
13562
|
if (tenantId) {
|
|
13563
|
+
console.warn('Use of `tenantId` is deprecated when calling `Softphone.init()`, use `domainName` instead');
|
|
13304
13564
|
config.tenantId = tenantId;
|
|
13305
13565
|
}
|
|
13566
|
+
if (domainName) {
|
|
13567
|
+
config.domainName = domainName;
|
|
13568
|
+
}
|
|
13306
13569
|
if (wrapUpDuration) {
|
|
13307
13570
|
config.wrapUpDuration = wrapUpDuration;
|
|
13308
13571
|
}
|
|
@@ -13623,6 +13886,7 @@ const Wazo = {
|
|
|
13623
13886
|
CanceledCallError,
|
|
13624
13887
|
SFUNotAvailableError,
|
|
13625
13888
|
NoTenantIdError,
|
|
13889
|
+
NoDomainNameError,
|
|
13626
13890
|
};
|
|
13627
13891
|
|
|
13628
13892
|
if (window) {
|
|
@@ -13766,7 +14030,7 @@ class Room extends Emitter {
|
|
|
13766
14030
|
logger.info('connecting to room', { extension, audioOnly, room: !!room });
|
|
13767
14031
|
|
|
13768
14032
|
if (!room) {
|
|
13769
|
-
await Wazo.Phone.connect();
|
|
14033
|
+
await Wazo.Phone.connect({ media: constraints });
|
|
13770
14034
|
|
|
13771
14035
|
const withCamera = constraints && !!constraints.video;
|
|
13772
14036
|
|
|
@@ -14211,7 +14475,7 @@ class Room extends Emitter {
|
|
|
14211
14475
|
const participant = this._getParticipantFromCallId(status.callId);
|
|
14212
14476
|
|
|
14213
14477
|
if (participant) {
|
|
14214
|
-
// we're
|
|
14478
|
+
// we're receiving, so no need to broadcast
|
|
14215
14479
|
participant.updateStatus(status, false);
|
|
14216
14480
|
}
|
|
14217
14481
|
break;
|