@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
|
|
|
@@ -13465,7 +13644,7 @@ class Room extends Emitter {
|
|
|
13465
13644
|
logger$1.info('connecting to room', { extension, audioOnly, room: !!room });
|
|
13466
13645
|
|
|
13467
13646
|
if (!room) {
|
|
13468
|
-
await Wazo.Phone.connect();
|
|
13647
|
+
await Wazo.Phone.connect({ media: constraints });
|
|
13469
13648
|
|
|
13470
13649
|
const withCamera = constraints && !!constraints.video;
|
|
13471
13650
|
|
|
@@ -13910,7 +14089,7 @@ class Room extends Emitter {
|
|
|
13910
14089
|
const participant = this._getParticipantFromCallId(status.callId);
|
|
13911
14090
|
|
|
13912
14091
|
if (participant) {
|
|
13913
|
-
// we're
|
|
14092
|
+
// we're receiving, so no need to broadcast
|
|
13914
14093
|
participant.updateStatus(status, false);
|
|
13915
14094
|
}
|
|
13916
14095
|
break;
|
|
@@ -14184,6 +14363,7 @@ class Participant extends Emitter {
|
|
|
14184
14363
|
|
|
14185
14364
|
|
|
14186
14365
|
|
|
14366
|
+
|
|
14187
14367
|
|
|
14188
14368
|
|
|
14189
14369
|
|
|
@@ -14201,6 +14381,7 @@ class Participant extends Emitter {
|
|
|
14201
14381
|
|
|
14202
14382
|
|
|
14203
14383
|
|
|
14384
|
+
|
|
14204
14385
|
|
|
14205
14386
|
/**
|
|
14206
14387
|
* @param room Room The room where the participant is
|
|
@@ -14224,6 +14405,7 @@ class Participant extends Emitter {
|
|
|
14224
14405
|
this.screensharing = false;
|
|
14225
14406
|
this.isOnHold = false;
|
|
14226
14407
|
this.extra = extra;
|
|
14408
|
+
this.banned = false;
|
|
14227
14409
|
|
|
14228
14410
|
this.ON_UPDATED = 'participant/ON_UPDATED';
|
|
14229
14411
|
this.ON_START_TALKING = 'participant/ON_START_TALKING';
|
|
@@ -14240,6 +14422,7 @@ class Participant extends Emitter {
|
|
|
14240
14422
|
this.ON_EXTRA_CHANGE = 'participant/ON_EXTRA_CHANGE';
|
|
14241
14423
|
this.ON_HOLD = 'participant/ON_HOLD';
|
|
14242
14424
|
this.ON_RESUME = 'participant/ON_RESUME';
|
|
14425
|
+
this.ON_BAN = 'participant/ON_BAN';
|
|
14243
14426
|
}
|
|
14244
14427
|
|
|
14245
14428
|
triggerEvent(name , ...args ) {
|
|
@@ -14280,6 +14463,10 @@ class Participant extends Emitter {
|
|
|
14280
14463
|
status.extra = this.extra;
|
|
14281
14464
|
break;
|
|
14282
14465
|
}
|
|
14466
|
+
case this.ON_BAN: {
|
|
14467
|
+
status.banned = true;
|
|
14468
|
+
break;
|
|
14469
|
+
}
|
|
14283
14470
|
}
|
|
14284
14471
|
|
|
14285
14472
|
if (broadcast) {
|
|
@@ -14382,6 +14569,11 @@ class Participant extends Emitter {
|
|
|
14382
14569
|
this.triggerUpdate(this.ON_RESUME, broadcast);
|
|
14383
14570
|
}
|
|
14384
14571
|
|
|
14572
|
+
onBan(broadcast = true) {
|
|
14573
|
+
this.banned = true;
|
|
14574
|
+
this.triggerUpdate(this.ON_BAN, broadcast);
|
|
14575
|
+
}
|
|
14576
|
+
|
|
14385
14577
|
getStatus() {
|
|
14386
14578
|
return {
|
|
14387
14579
|
callId: this.callId,
|
|
@@ -14428,6 +14620,10 @@ class Participant extends Emitter {
|
|
|
14428
14620
|
}
|
|
14429
14621
|
}
|
|
14430
14622
|
|
|
14623
|
+
if (status.banned) {
|
|
14624
|
+
this.onBan(false);
|
|
14625
|
+
}
|
|
14626
|
+
|
|
14431
14627
|
// Poor man's object comparison
|
|
14432
14628
|
if (typeof status.extra !== 'undefined' && JSON.stringify(this.extra) !== JSON.stringify(status.extra)) {
|
|
14433
14629
|
this.extra = { ...this.extra, ...status.extra };
|
|
@@ -14455,6 +14651,28 @@ class Participant extends Emitter {
|
|
|
14455
14651
|
this.streams = streams;
|
|
14456
14652
|
this.videoStreams = streams;
|
|
14457
14653
|
}
|
|
14654
|
+
|
|
14655
|
+
async ban(apiRequestDelay = null) {
|
|
14656
|
+
const { meetingUuid } = this.room;
|
|
14657
|
+
if (!meetingUuid) {
|
|
14658
|
+
throw new Error('Attempting to ban a participant without a `meetingUuid`');
|
|
14659
|
+
}
|
|
14660
|
+
|
|
14661
|
+
// this notifies all that someone is being banned
|
|
14662
|
+
this.onBan(true);
|
|
14663
|
+
|
|
14664
|
+
// this allows to delay the actual ban, in order for the banned participant as well as others to react to the situation
|
|
14665
|
+
if (apiRequestDelay) {
|
|
14666
|
+
await this.delay(apiRequestDelay);
|
|
14667
|
+
}
|
|
14668
|
+
|
|
14669
|
+
// proceed with the actual kick
|
|
14670
|
+
return getApiClient().calld.banMeetingParticipant(meetingUuid, this.callId);
|
|
14671
|
+
}
|
|
14672
|
+
|
|
14673
|
+
async delay(ms ) {
|
|
14674
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
14675
|
+
}
|
|
14458
14676
|
}
|
|
14459
14677
|
|
|
14460
14678
|
module.exports = Participant;
|