@wazo/sdk 0.38.6 → 0.38.9
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 +142 -2
- package/esm/__tests__/web-rtc-client.test.js +249 -28
- package/esm/api/calld.js +8 -0
- package/esm/api/confd.js +134 -2
- package/esm/api-client.js +142 -2
- package/esm/checker/Checker.js +205 -25
- package/esm/checker/checks/aor.js +142 -2
- package/esm/checker/checks/api.js +142 -2
- package/esm/checker/checks/index.js +205 -25
- package/esm/checker/checks/wazo-websocket.js +2 -0
- package/esm/checker/checks/webrtc-transport.js +203 -25
- package/esm/checker/checks/webrtc.js +203 -25
- package/esm/domain/AdHocAPIConference.js +142 -2
- package/esm/domain/Features.js +142 -2
- package/esm/domain/Meeting.js +18 -0
- package/esm/domain/MeetingAuthorization.js +70 -0
- package/esm/domain/Phone/CTIPhone.js +142 -2
- package/esm/domain/Phone/WebRTCPhone.js +1 -3
- package/esm/domain/__tests__/Meeting.test.js +87 -1
- package/esm/domain/__tests__/MeetingAuthorization.test.js +109 -0
- package/esm/index.js +249 -31
- package/esm/lib/WazoSessionDescriptionHandler.js +22 -1
- package/esm/service/CallApi.js +142 -2
- package/esm/service/getApiClient.js +142 -2
- package/esm/simple/Auth.js +249 -31
- package/esm/simple/Configuration.js +249 -31
- package/esm/simple/Directory.js +142 -2
- package/esm/simple/Phone.js +249 -31
- package/esm/simple/Websocket.js +3 -0
- package/esm/simple/index.js +249 -31
- package/esm/simple/room/LocalParticipant.js +249 -31
- package/esm/simple/room/Participant.js +249 -31
- package/esm/simple/room/RemoteParticipant.js +249 -31
- package/esm/simple/room/Room.js +249 -31
- package/esm/simple/room/SipRoom.js +249 -31
- package/esm/simple/room/Stream.js +249 -31
- package/esm/simple/room/__tests__/Participant.test.js +14745 -0
- package/esm/simple/room/__tests__/RemoteParticipant.test.js +249 -31
- package/esm/simple/utils.js +249 -31
- package/esm/utils/__tests__/object.test.js +57 -0
- package/esm/utils/__tests__/sdp.test.js +50 -0
- package/esm/utils/__tests__/string.test.js +30 -0
- package/esm/utils/object.js +24 -0
- package/esm/utils/sdp.js +19 -1
- package/esm/utils/string.js +10 -0
- package/esm/web-rtc-client.js +203 -25
- package/esm/websocket-client.js +3 -1
- package/lib/__tests__/api-client.test.js +142 -2
- package/lib/__tests__/web-rtc-client.test.js +249 -28
- package/lib/api/calld.js +8 -0
- package/lib/api/confd.js +134 -2
- package/lib/api-client.js +142 -2
- package/lib/checker/Checker.js +205 -25
- package/lib/checker/checks/aor.js +142 -2
- package/lib/checker/checks/api.js +142 -2
- package/lib/checker/checks/index.js +205 -25
- package/lib/checker/checks/wazo-websocket.js +2 -0
- package/lib/checker/checks/webrtc-transport.js +203 -25
- package/lib/checker/checks/webrtc.js +203 -25
- package/lib/domain/AdHocAPIConference.js +142 -2
- package/lib/domain/Features.js +142 -2
- package/lib/domain/Meeting.js +18 -0
- package/lib/domain/MeetingAuthorization.js +79 -0
- package/lib/domain/Phone/CTIPhone.js +142 -2
- package/lib/domain/Phone/WebRTCPhone.js +1 -3
- package/lib/domain/__tests__/Meeting.test.js +87 -1
- package/lib/domain/__tests__/MeetingAuthorization.test.js +111 -0
- package/lib/index.js +249 -31
- package/lib/lib/WazoSessionDescriptionHandler.js +22 -1
- package/lib/service/CallApi.js +142 -2
- package/lib/service/getApiClient.js +142 -2
- package/lib/simple/Auth.js +249 -31
- package/lib/simple/Configuration.js +249 -31
- package/lib/simple/Directory.js +142 -2
- package/lib/simple/Phone.js +249 -31
- package/lib/simple/Websocket.js +3 -0
- package/lib/simple/index.js +249 -31
- package/lib/simple/room/LocalParticipant.js +249 -31
- package/lib/simple/room/Participant.js +249 -31
- package/lib/simple/room/RemoteParticipant.js +249 -31
- package/lib/simple/room/Room.js +249 -31
- package/lib/simple/room/SipRoom.js +249 -31
- package/lib/simple/room/Stream.js +249 -31
- package/lib/simple/room/__tests__/Participant.test.js +14755 -0
- package/lib/simple/room/__tests__/RemoteParticipant.test.js +249 -31
- package/lib/simple/utils.js +249 -31
- package/lib/utils/__tests__/object.test.js +59 -0
- package/lib/utils/__tests__/sdp.test.js +50 -0
- package/lib/utils/__tests__/string.test.js +32 -0
- package/lib/utils/object.js +28 -0
- package/lib/utils/sdp.js +19 -0
- package/lib/utils/string.js +14 -0
- package/lib/web-rtc-client.js +203 -25
- package/lib/websocket-client.js +3 -0
- package/package.json +2 -2
- package/src/__tests__/web-rtc-client.test.js +46 -3
- package/src/api/calld.js +8 -0
- package/src/api/confd.js +43 -2
- 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/lib/WazoSessionDescriptionHandler.js +5 -2
- 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__/sdp.test.js +33 -1
- package/src/utils/__tests__/string.test.js +23 -0
- package/src/utils/object.js +15 -0
- package/src/utils/sdp.js +18 -0
- package/src/utils/string.js +8 -0
- package/src/web-rtc-client.js +39 -22
- package/src/websocket-client.js +2 -0
|
@@ -2681,6 +2681,70 @@ class ExternalApp {
|
|
|
2681
2681
|
|
|
2682
2682
|
//
|
|
2683
2683
|
|
|
2684
|
+
class MeetingAuthorization {
|
|
2685
|
+
|
|
2686
|
+
|
|
2687
|
+
|
|
2688
|
+
|
|
2689
|
+
|
|
2690
|
+
|
|
2691
|
+
constructor({
|
|
2692
|
+
meetingUuid,
|
|
2693
|
+
uuid,
|
|
2694
|
+
userUuid,
|
|
2695
|
+
userName,
|
|
2696
|
+
} = {}) {
|
|
2697
|
+
this.meetingUuid = meetingUuid;
|
|
2698
|
+
this.uuid = uuid;
|
|
2699
|
+
this.userUuid = userUuid;
|
|
2700
|
+
this.userName = userName;
|
|
2701
|
+
}
|
|
2702
|
+
|
|
2703
|
+
setStatus(status ) {
|
|
2704
|
+
this.status = status;
|
|
2705
|
+
}
|
|
2706
|
+
|
|
2707
|
+
getStatus() {
|
|
2708
|
+
return this.status;
|
|
2709
|
+
}
|
|
2710
|
+
|
|
2711
|
+
static parse(plain ) {
|
|
2712
|
+
const {
|
|
2713
|
+
meeting_uuid: meetingUuid,
|
|
2714
|
+
uuid,
|
|
2715
|
+
guest_uuid: userUuid,
|
|
2716
|
+
guest_name: userName,
|
|
2717
|
+
} = plain;
|
|
2718
|
+
|
|
2719
|
+
return new MeetingAuthorization({
|
|
2720
|
+
meetingUuid,
|
|
2721
|
+
uuid,
|
|
2722
|
+
userUuid,
|
|
2723
|
+
userName,
|
|
2724
|
+
});
|
|
2725
|
+
}
|
|
2726
|
+
|
|
2727
|
+
static parseMany(items ) {
|
|
2728
|
+
if (!items) {
|
|
2729
|
+
return [];
|
|
2730
|
+
}
|
|
2731
|
+
return items.map(MeetingAuthorization.parse);
|
|
2732
|
+
}
|
|
2733
|
+
}
|
|
2734
|
+
|
|
2735
|
+
//
|
|
2736
|
+
|
|
2737
|
+
|
|
2738
|
+
|
|
2739
|
+
|
|
2740
|
+
|
|
2741
|
+
|
|
2742
|
+
|
|
2743
|
+
|
|
2744
|
+
|
|
2745
|
+
|
|
2746
|
+
|
|
2747
|
+
|
|
2684
2748
|
|
|
2685
2749
|
|
|
2686
2750
|
|
|
@@ -2691,6 +2755,7 @@ class ExternalApp {
|
|
|
2691
2755
|
|
|
2692
2756
|
|
|
2693
2757
|
|
|
2758
|
+
|
|
2694
2759
|
|
|
2695
2760
|
|
|
2696
2761
|
class Meeting {
|
|
@@ -2705,6 +2770,8 @@ class Meeting {
|
|
|
2705
2770
|
|
|
2706
2771
|
|
|
2707
2772
|
|
|
2773
|
+
|
|
2774
|
+
|
|
2708
2775
|
|
|
2709
2776
|
static parse(plain ) {
|
|
2710
2777
|
return new Meeting({
|
|
@@ -2717,6 +2784,7 @@ class Meeting {
|
|
|
2717
2784
|
extension: plain.exten,
|
|
2718
2785
|
persistent: plain.persistent,
|
|
2719
2786
|
creationTime: moment__default['default'](plain.creation_time).toDate(),
|
|
2787
|
+
requireAuthorization: plain.require_authorization,
|
|
2720
2788
|
});
|
|
2721
2789
|
}
|
|
2722
2790
|
|
|
@@ -2741,6 +2809,7 @@ class Meeting {
|
|
|
2741
2809
|
extension,
|
|
2742
2810
|
persistent,
|
|
2743
2811
|
creationTime,
|
|
2812
|
+
requireAuthorization,
|
|
2744
2813
|
} = {}) {
|
|
2745
2814
|
this.guestSipAuthorization = guestSipAuthorization;
|
|
2746
2815
|
this.uri = uri;
|
|
@@ -2751,6 +2820,7 @@ class Meeting {
|
|
|
2751
2820
|
this.extension = extension;
|
|
2752
2821
|
this.persistent = persistent;
|
|
2753
2822
|
this.creationTime = creationTime;
|
|
2823
|
+
this.requireAuthorization = requireAuthorization;
|
|
2754
2824
|
|
|
2755
2825
|
// Useful to compare instead of instanceof with minified code
|
|
2756
2826
|
this.type = 'Meeting';
|
|
@@ -2761,8 +2831,32 @@ class Meeting {
|
|
|
2761
2831
|
const [username, secret] = atob(this.guestSipAuthorization).split(':');
|
|
2762
2832
|
return { username, secret };
|
|
2763
2833
|
}
|
|
2834
|
+
|
|
2764
2835
|
}
|
|
2765
2836
|
|
|
2837
|
+
//
|
|
2838
|
+
|
|
2839
|
+
const camelToUnderscore = (key ) => {
|
|
2840
|
+
if (typeof key !== 'string') {
|
|
2841
|
+
throw new Error('Input is not a string');
|
|
2842
|
+
}
|
|
2843
|
+
return key.charAt(0).toLowerCase() + key.substring(1).replace(/([A-Z])/g, '_$1').toLowerCase();
|
|
2844
|
+
};
|
|
2845
|
+
|
|
2846
|
+
//
|
|
2847
|
+
|
|
2848
|
+
const convertKeysFromCamelToUnderscore = (args ) => {
|
|
2849
|
+
if (!args || typeof args !== 'object' || Array.isArray(args)) {
|
|
2850
|
+
throw new Error('Input is not an object');
|
|
2851
|
+
}
|
|
2852
|
+
|
|
2853
|
+
return Object.keys(args).reduce((acc, key) => {
|
|
2854
|
+
acc[camelToUnderscore(key)] = typeof args[key] === 'object' && !Array.isArray(args[key])
|
|
2855
|
+
? convertKeysFromCamelToUnderscore(args[key]) : args[key];
|
|
2856
|
+
return acc;
|
|
2857
|
+
}, {});
|
|
2858
|
+
};
|
|
2859
|
+
|
|
2766
2860
|
/* */
|
|
2767
2861
|
|
|
2768
2862
|
var confdMethods = (client , baseUrl ) => ({
|
|
@@ -2831,8 +2925,18 @@ var confdMethods = (client , baseUrl ) => ({
|
|
|
2831
2925
|
getMyMeetings: () =>
|
|
2832
2926
|
client.get(`${baseUrl}/users/me/meetings`).then(response => Meeting.parseMany(response.items)),
|
|
2833
2927
|
|
|
2834
|
-
createMyMeeting: (
|
|
2835
|
-
client
|
|
2928
|
+
createMyMeeting: (args ) =>
|
|
2929
|
+
client
|
|
2930
|
+
.post(`${baseUrl}/users/me/meetings`, convertKeysFromCamelToUnderscore(args))
|
|
2931
|
+
.then(Meeting.parse),
|
|
2932
|
+
|
|
2933
|
+
updateMyMeeting: (meetingUuid , data ) =>
|
|
2934
|
+
client.put(
|
|
2935
|
+
`${baseUrl}/users/me/meetings/${meetingUuid}`,
|
|
2936
|
+
convertKeysFromCamelToUnderscore(data),
|
|
2937
|
+
null,
|
|
2938
|
+
ApiRequester.successResponseParser,
|
|
2939
|
+
),
|
|
2836
2940
|
|
|
2837
2941
|
deleteMyMeeting: (meetingUuid ) =>
|
|
2838
2942
|
client.delete(`${baseUrl}/users/me/meetings/${meetingUuid}`, null),
|
|
@@ -2840,8 +2944,36 @@ var confdMethods = (client , baseUrl ) => ({
|
|
|
2840
2944
|
getMeeting: (meetingUuid ) =>
|
|
2841
2945
|
client.get(`${baseUrl}/meetings/${meetingUuid}`, null).then(Meeting.parse),
|
|
2842
2946
|
|
|
2947
|
+
meetingAuthorizations: (meetingUuid ) =>
|
|
2948
|
+
client.get(`${baseUrl}/users/me/meetings/${meetingUuid}/authorizations`, null).then(MeetingAuthorization.parseMany),
|
|
2949
|
+
|
|
2950
|
+
meetingAuthorizationReject: (meetingUuid , authorizationUuid ) =>
|
|
2951
|
+
client.put(
|
|
2952
|
+
`${baseUrl}/users/me/meetings/${meetingUuid}/authorizations/${authorizationUuid}/reject`,
|
|
2953
|
+
{},
|
|
2954
|
+
null,
|
|
2955
|
+
ApiRequester.successResponseParser,
|
|
2956
|
+
),
|
|
2957
|
+
|
|
2958
|
+
meetingAuthorizationAccept: (meetingUuid , authorizationUuid ) =>
|
|
2959
|
+
client.put(
|
|
2960
|
+
`${baseUrl}/users/me/meetings/${meetingUuid}/authorizations/${authorizationUuid}/accept`,
|
|
2961
|
+
{},
|
|
2962
|
+
null,
|
|
2963
|
+
ApiRequester.successResponseParser,
|
|
2964
|
+
),
|
|
2965
|
+
|
|
2843
2966
|
guestGetMeeting: (meetingUuid ) =>
|
|
2844
2967
|
client.get(`${baseUrl}/guests/me/meetings/${meetingUuid}`, null).then(Meeting.parse),
|
|
2968
|
+
|
|
2969
|
+
guestAuthorizationRequest: (userUuid , meetingUuid , username ) =>
|
|
2970
|
+
client
|
|
2971
|
+
.post(`${baseUrl}/guests/${userUuid}/meetings/${meetingUuid}/authorizations`, { guest_name: username })
|
|
2972
|
+
.then(MeetingAuthorization.parse),
|
|
2973
|
+
|
|
2974
|
+
guestAuthorizationCheck: (userUuid , meetingUuid , authorizationUuid ) =>
|
|
2975
|
+
client.get(`${baseUrl}/guests/${userUuid}/meetings/${meetingUuid}/authorizations/${authorizationUuid}`, null),
|
|
2976
|
+
|
|
2845
2977
|
});
|
|
2846
2978
|
|
|
2847
2979
|
//
|
|
@@ -5066,6 +5198,14 @@ var calldMethods = (client , baseUrl ) => ({
|
|
|
5066
5198
|
getMeetingParticipantsAsUser: async (meetingUuid ) =>
|
|
5067
5199
|
client.get(`${baseUrl}/users/me/meetings/${meetingUuid}/participants`),
|
|
5068
5200
|
|
|
5201
|
+
banMeetingParticipant: (meetingUuid , participantUuid ) =>
|
|
5202
|
+
client.delete(
|
|
5203
|
+
`${baseUrl}/users/me/meetings/${meetingUuid}/participants/${participantUuid}`,
|
|
5204
|
+
null,
|
|
5205
|
+
null,
|
|
5206
|
+
ApiRequester.successResponseParser,
|
|
5207
|
+
),
|
|
5208
|
+
|
|
5069
5209
|
listTrunks: () => client.get(`${baseUrl}/trunks`),
|
|
5070
5210
|
|
|
5071
5211
|
mute: (callId ) =>
|
|
@@ -6214,6 +6354,24 @@ const fixSdp = (sdp , candidates , forcePort = true)
|
|
|
6214
6354
|
return fixed;
|
|
6215
6355
|
};
|
|
6216
6356
|
|
|
6357
|
+
const addIcesInAllBundles = (sdp ) => {
|
|
6358
|
+
const parsedSdp = sdpParser__default['default'].parse(sdp);
|
|
6359
|
+
|
|
6360
|
+
const mediaWithCandidate = parsedSdp.media.find(media => !!media.candidates);
|
|
6361
|
+
if (!mediaWithCandidate) {
|
|
6362
|
+
return sdp;
|
|
6363
|
+
}
|
|
6364
|
+
|
|
6365
|
+
const { candidates } = mediaWithCandidate;
|
|
6366
|
+
|
|
6367
|
+
parsedSdp.media = parsedSdp.media.map(media => ({
|
|
6368
|
+
...media,
|
|
6369
|
+
candidates: media.candidates || candidates,
|
|
6370
|
+
}));
|
|
6371
|
+
|
|
6372
|
+
return sdpParser__default['default'].write(parsedSdp);
|
|
6373
|
+
};
|
|
6374
|
+
|
|
6217
6375
|
/* global RTCSessionDescriptionInit, navigator */
|
|
6218
6376
|
|
|
6219
6377
|
const wazoLogger = IssueReporter$1 ? IssueReporter$1.loggerFor('webrtc-sdh') : console;
|
|
@@ -6343,7 +6501,10 @@ class WazoSessionDescriptionHandler extends sessionDescriptionHandler.SessionDes
|
|
|
6343
6501
|
|
|
6344
6502
|
// Check if we got ICEs
|
|
6345
6503
|
if (sdp.indexOf('a=candidate') !== -1) {
|
|
6346
|
-
return
|
|
6504
|
+
return {
|
|
6505
|
+
type: description.type,
|
|
6506
|
+
sdp: addIcesInAllBundles(sdp),
|
|
6507
|
+
};
|
|
6347
6508
|
}
|
|
6348
6509
|
|
|
6349
6510
|
wazoLogger.info('No ICE candidates found in SDP, fixing it with gathered ices', this.gatheredCandidates);
|
|
@@ -7803,7 +7964,7 @@ class WebRTCClient extends Emitter {
|
|
|
7803
7964
|
});
|
|
7804
7965
|
}
|
|
7805
7966
|
|
|
7806
|
-
changeAudioInputDevice(id , session , force ) {
|
|
7967
|
+
async changeAudioInputDevice(id , session , force ) {
|
|
7807
7968
|
const currentId = this.getAudioDeviceId();
|
|
7808
7969
|
logger$8.info('setting audio input device', { id, currentId, session: !!session });
|
|
7809
7970
|
|
|
@@ -7811,33 +7972,50 @@ class WebRTCClient extends Emitter {
|
|
|
7811
7972
|
return null;
|
|
7812
7973
|
}
|
|
7813
7974
|
|
|
7975
|
+
// in order to handle an audio track change for default devices
|
|
7976
|
+
// we need the actual id of the device (not 'default')
|
|
7977
|
+
let deviceId = id;
|
|
7978
|
+
if (id === 'default' && navigator.mediaDevices) {
|
|
7979
|
+
const devices = await navigator.mediaDevices.enumerateDevices();
|
|
7980
|
+
const defaultDevice = devices.find(device => device.deviceId === 'default');
|
|
7981
|
+
if (defaultDevice) {
|
|
7982
|
+
const deviceLabel = defaultDevice.label.replace('Default - ', '');
|
|
7983
|
+
const targetDevice = devices.find(device => device.label === deviceLabel);
|
|
7984
|
+
if (targetDevice) {
|
|
7985
|
+
deviceId = targetDevice.deviceId;
|
|
7986
|
+
if (!force && deviceId === currentId) {
|
|
7987
|
+
return null;
|
|
7988
|
+
}
|
|
7989
|
+
}
|
|
7990
|
+
}
|
|
7991
|
+
}
|
|
7992
|
+
|
|
7814
7993
|
// let's update the local audio value
|
|
7815
7994
|
if (this.audio) {
|
|
7816
7995
|
this.audio = {
|
|
7817
7996
|
deviceId: {
|
|
7818
|
-
exact:
|
|
7997
|
+
exact: deviceId,
|
|
7819
7998
|
},
|
|
7820
7999
|
};
|
|
7821
8000
|
}
|
|
7822
8001
|
|
|
7823
|
-
if (session) {
|
|
8002
|
+
if (session && navigator.mediaDevices) {
|
|
7824
8003
|
const sdh = session.sessionDescriptionHandler;
|
|
7825
8004
|
const pc = sdh.peerConnection;
|
|
7826
8005
|
|
|
7827
|
-
|
|
7828
|
-
|
|
7829
|
-
|
|
7830
|
-
|
|
8006
|
+
const constraints = { audio: { deviceId: { exact: deviceId } } };
|
|
8007
|
+
const stream = await navigator.mediaDevices.getUserMedia(constraints);
|
|
8008
|
+
const audioTrack = stream.getAudioTracks()[0];
|
|
8009
|
+
const sender = pc && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
|
|
7831
8010
|
|
|
7832
|
-
|
|
7833
|
-
|
|
7834
|
-
|
|
7835
|
-
}
|
|
7836
|
-
sender.replaceTrack(audioTrack);
|
|
8011
|
+
if (sender) {
|
|
8012
|
+
if (sender.track) {
|
|
8013
|
+
audioTrack.enabled = sender.track.enabled;
|
|
7837
8014
|
}
|
|
8015
|
+
sender.replaceTrack(audioTrack);
|
|
8016
|
+
}
|
|
7838
8017
|
|
|
7839
|
-
|
|
7840
|
-
});
|
|
8018
|
+
return stream;
|
|
7841
8019
|
}
|
|
7842
8020
|
}
|
|
7843
8021
|
|
|
@@ -7857,14 +8035,14 @@ class WebRTCClient extends Emitter {
|
|
|
7857
8035
|
return null;
|
|
7858
8036
|
}
|
|
7859
8037
|
|
|
7860
|
-
// let's
|
|
7861
|
-
|
|
7862
|
-
|
|
7863
|
-
|
|
7864
|
-
|
|
7865
|
-
|
|
7866
|
-
}
|
|
7867
|
-
}
|
|
8038
|
+
// let's make sure we don't lose other video constraints settings -- width, height, frameRate...
|
|
8039
|
+
const videoObject = typeof this.video === 'object' ? this.video : {};
|
|
8040
|
+
this.video = {
|
|
8041
|
+
...videoObject,
|
|
8042
|
+
deviceId: {
|
|
8043
|
+
exact: id,
|
|
8044
|
+
},
|
|
8045
|
+
};
|
|
7868
8046
|
}
|
|
7869
8047
|
|
|
7870
8048
|
changeSessionVideoInputDevice(id , session ) {
|
|
@@ -9466,9 +9644,7 @@ class WebRTCPhone extends Emitter {
|
|
|
9466
9644
|
|
|
9467
9645
|
try {
|
|
9468
9646
|
if (this.currentScreenShare.stream) {
|
|
9469
|
-
this.currentScreenShare.stream.getTracks()
|
|
9470
|
-
.filter(track => track.kind === 'video')
|
|
9471
|
-
.forEach(track => track.stop());
|
|
9647
|
+
this.currentScreenShare.stream.getTracks().forEach(track => track.stop());
|
|
9472
9648
|
}
|
|
9473
9649
|
|
|
9474
9650
|
if (restoreLocalStream) {
|
|
@@ -11259,6 +11435,7 @@ const AGENT_UNPAUSED = 'agent_unpaused';
|
|
|
11259
11435
|
const CONFERENCE_ADHOC_PARTICIPANT_LEFT = 'conference_adhoc_participant_left';
|
|
11260
11436
|
const CONFERENCE_ADHOC_DELETED = 'conference_adhoc_deleted';
|
|
11261
11437
|
const MEETING_USER_PROGRESS = 'meeting_user_progress';
|
|
11438
|
+
const MEETING_USER_GUEST_AUTHORIZATION_CREATED = 'meeting_user_guest_authorization_created';
|
|
11262
11439
|
|
|
11263
11440
|
const BLACKLIST_EVENTS = [
|
|
11264
11441
|
CHAT_MESSAGE_SENT,
|
|
@@ -11610,6 +11787,7 @@ WebSocketClient.eventLists = [
|
|
|
11610
11787
|
CONFERENCE_ADHOC_PARTICIPANT_LEFT,
|
|
11611
11788
|
CONFERENCE_ADHOC_DELETED,
|
|
11612
11789
|
MEETING_USER_PROGRESS,
|
|
11790
|
+
MEETING_USER_GUEST_AUTHORIZATION_CREATED,
|
|
11613
11791
|
];
|
|
11614
11792
|
|
|
11615
11793
|
var WebSocketClient$1 = /*#__PURE__*/Object.freeze({
|
|
@@ -11681,6 +11859,7 @@ var WebSocketClient$1 = /*#__PURE__*/Object.freeze({
|
|
|
11681
11859
|
CONFERENCE_ADHOC_PARTICIPANT_LEFT: CONFERENCE_ADHOC_PARTICIPANT_LEFT,
|
|
11682
11860
|
CONFERENCE_ADHOC_DELETED: CONFERENCE_ADHOC_DELETED,
|
|
11683
11861
|
MEETING_USER_PROGRESS: MEETING_USER_PROGRESS,
|
|
11862
|
+
MEETING_USER_GUEST_AUTHORIZATION_CREATED: MEETING_USER_GUEST_AUTHORIZATION_CREATED,
|
|
11684
11863
|
HEARTBEAT_ENGINE_VERSION: HEARTBEAT_ENGINE_VERSION,
|
|
11685
11864
|
'default': WebSocketClient
|
|
11686
11865
|
});
|
|
@@ -11778,7 +11957,7 @@ class SipRoom extends Room {
|
|
|
11778
11957
|
logger$3.info('connecting to sip room', { extension, audioOnly, room: !!room });
|
|
11779
11958
|
|
|
11780
11959
|
if (!room) {
|
|
11781
|
-
await Wazo.Phone.connect();
|
|
11960
|
+
await Wazo.Phone.connect({ media: constraints });
|
|
11782
11961
|
|
|
11783
11962
|
const withCamera = constraints && !!constraints.video;
|
|
11784
11963
|
|
|
@@ -13460,7 +13639,7 @@ class Room extends Emitter {
|
|
|
13460
13639
|
logger$1.info('connecting to room', { extension, audioOnly, room: !!room });
|
|
13461
13640
|
|
|
13462
13641
|
if (!room) {
|
|
13463
|
-
await Wazo.Phone.connect();
|
|
13642
|
+
await Wazo.Phone.connect({ media: constraints });
|
|
13464
13643
|
|
|
13465
13644
|
const withCamera = constraints && !!constraints.video;
|
|
13466
13645
|
|
|
@@ -13905,7 +14084,7 @@ class Room extends Emitter {
|
|
|
13905
14084
|
const participant = this._getParticipantFromCallId(status.callId);
|
|
13906
14085
|
|
|
13907
14086
|
if (participant) {
|
|
13908
|
-
// we're
|
|
14087
|
+
// we're receiving, so no need to broadcast
|
|
13909
14088
|
participant.updateStatus(status, false);
|
|
13910
14089
|
}
|
|
13911
14090
|
break;
|
|
@@ -14179,6 +14358,7 @@ class Participant extends Emitter {
|
|
|
14179
14358
|
|
|
14180
14359
|
|
|
14181
14360
|
|
|
14361
|
+
|
|
14182
14362
|
|
|
14183
14363
|
|
|
14184
14364
|
|
|
@@ -14196,6 +14376,7 @@ class Participant extends Emitter {
|
|
|
14196
14376
|
|
|
14197
14377
|
|
|
14198
14378
|
|
|
14379
|
+
|
|
14199
14380
|
|
|
14200
14381
|
/**
|
|
14201
14382
|
* @param room Room The room where the participant is
|
|
@@ -14219,6 +14400,7 @@ class Participant extends Emitter {
|
|
|
14219
14400
|
this.screensharing = false;
|
|
14220
14401
|
this.isOnHold = false;
|
|
14221
14402
|
this.extra = extra;
|
|
14403
|
+
this.banned = false;
|
|
14222
14404
|
|
|
14223
14405
|
this.ON_UPDATED = 'participant/ON_UPDATED';
|
|
14224
14406
|
this.ON_START_TALKING = 'participant/ON_START_TALKING';
|
|
@@ -14235,6 +14417,7 @@ class Participant extends Emitter {
|
|
|
14235
14417
|
this.ON_EXTRA_CHANGE = 'participant/ON_EXTRA_CHANGE';
|
|
14236
14418
|
this.ON_HOLD = 'participant/ON_HOLD';
|
|
14237
14419
|
this.ON_RESUME = 'participant/ON_RESUME';
|
|
14420
|
+
this.ON_BAN = 'participant/ON_BAN';
|
|
14238
14421
|
}
|
|
14239
14422
|
|
|
14240
14423
|
triggerEvent(name , ...args ) {
|
|
@@ -14275,6 +14458,10 @@ class Participant extends Emitter {
|
|
|
14275
14458
|
status.extra = this.extra;
|
|
14276
14459
|
break;
|
|
14277
14460
|
}
|
|
14461
|
+
case this.ON_BAN: {
|
|
14462
|
+
status.banned = true;
|
|
14463
|
+
break;
|
|
14464
|
+
}
|
|
14278
14465
|
}
|
|
14279
14466
|
|
|
14280
14467
|
if (broadcast) {
|
|
@@ -14377,6 +14564,11 @@ class Participant extends Emitter {
|
|
|
14377
14564
|
this.triggerUpdate(this.ON_RESUME, broadcast);
|
|
14378
14565
|
}
|
|
14379
14566
|
|
|
14567
|
+
onBan(broadcast = true) {
|
|
14568
|
+
this.banned = true;
|
|
14569
|
+
this.triggerUpdate(this.ON_BAN, broadcast);
|
|
14570
|
+
}
|
|
14571
|
+
|
|
14380
14572
|
getStatus() {
|
|
14381
14573
|
return {
|
|
14382
14574
|
callId: this.callId,
|
|
@@ -14423,6 +14615,10 @@ class Participant extends Emitter {
|
|
|
14423
14615
|
}
|
|
14424
14616
|
}
|
|
14425
14617
|
|
|
14618
|
+
if (status.banned) {
|
|
14619
|
+
this.onBan(false);
|
|
14620
|
+
}
|
|
14621
|
+
|
|
14426
14622
|
// Poor man's object comparison
|
|
14427
14623
|
if (typeof status.extra !== 'undefined' && JSON.stringify(this.extra) !== JSON.stringify(status.extra)) {
|
|
14428
14624
|
this.extra = { ...this.extra, ...status.extra };
|
|
@@ -14450,6 +14646,28 @@ class Participant extends Emitter {
|
|
|
14450
14646
|
this.streams = streams;
|
|
14451
14647
|
this.videoStreams = streams;
|
|
14452
14648
|
}
|
|
14649
|
+
|
|
14650
|
+
async ban(apiRequestDelay = null) {
|
|
14651
|
+
const { meetingUuid } = this.room;
|
|
14652
|
+
if (!meetingUuid) {
|
|
14653
|
+
throw new Error('Attempting to ban a participant without a `meetingUuid`');
|
|
14654
|
+
}
|
|
14655
|
+
|
|
14656
|
+
// this notifies all that someone is being banned
|
|
14657
|
+
this.onBan(true);
|
|
14658
|
+
|
|
14659
|
+
// this allows to delay the actual ban, in order for the banned participant as well as others to react to the situation
|
|
14660
|
+
if (apiRequestDelay) {
|
|
14661
|
+
await this.delay(apiRequestDelay);
|
|
14662
|
+
}
|
|
14663
|
+
|
|
14664
|
+
// proceed with the actual kick
|
|
14665
|
+
return getApiClient().calld.banMeetingParticipant(meetingUuid, this.callId);
|
|
14666
|
+
}
|
|
14667
|
+
|
|
14668
|
+
async delay(ms ) {
|
|
14669
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
14670
|
+
}
|
|
14453
14671
|
}
|
|
14454
14672
|
|
|
14455
14673
|
//
|