@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
|
@@ -2671,6 +2671,70 @@ class ExternalApp {
|
|
|
2671
2671
|
|
|
2672
2672
|
//
|
|
2673
2673
|
|
|
2674
|
+
class MeetingAuthorization {
|
|
2675
|
+
|
|
2676
|
+
|
|
2677
|
+
|
|
2678
|
+
|
|
2679
|
+
|
|
2680
|
+
|
|
2681
|
+
constructor({
|
|
2682
|
+
meetingUuid,
|
|
2683
|
+
uuid,
|
|
2684
|
+
userUuid,
|
|
2685
|
+
userName,
|
|
2686
|
+
} = {}) {
|
|
2687
|
+
this.meetingUuid = meetingUuid;
|
|
2688
|
+
this.uuid = uuid;
|
|
2689
|
+
this.userUuid = userUuid;
|
|
2690
|
+
this.userName = userName;
|
|
2691
|
+
}
|
|
2692
|
+
|
|
2693
|
+
setStatus(status ) {
|
|
2694
|
+
this.status = status;
|
|
2695
|
+
}
|
|
2696
|
+
|
|
2697
|
+
getStatus() {
|
|
2698
|
+
return this.status;
|
|
2699
|
+
}
|
|
2700
|
+
|
|
2701
|
+
static parse(plain ) {
|
|
2702
|
+
const {
|
|
2703
|
+
meeting_uuid: meetingUuid,
|
|
2704
|
+
uuid,
|
|
2705
|
+
guest_uuid: userUuid,
|
|
2706
|
+
guest_name: userName,
|
|
2707
|
+
} = plain;
|
|
2708
|
+
|
|
2709
|
+
return new MeetingAuthorization({
|
|
2710
|
+
meetingUuid,
|
|
2711
|
+
uuid,
|
|
2712
|
+
userUuid,
|
|
2713
|
+
userName,
|
|
2714
|
+
});
|
|
2715
|
+
}
|
|
2716
|
+
|
|
2717
|
+
static parseMany(items ) {
|
|
2718
|
+
if (!items) {
|
|
2719
|
+
return [];
|
|
2720
|
+
}
|
|
2721
|
+
return items.map(MeetingAuthorization.parse);
|
|
2722
|
+
}
|
|
2723
|
+
}
|
|
2724
|
+
|
|
2725
|
+
//
|
|
2726
|
+
|
|
2727
|
+
|
|
2728
|
+
|
|
2729
|
+
|
|
2730
|
+
|
|
2731
|
+
|
|
2732
|
+
|
|
2733
|
+
|
|
2734
|
+
|
|
2735
|
+
|
|
2736
|
+
|
|
2737
|
+
|
|
2674
2738
|
|
|
2675
2739
|
|
|
2676
2740
|
|
|
@@ -2681,6 +2745,7 @@ class ExternalApp {
|
|
|
2681
2745
|
|
|
2682
2746
|
|
|
2683
2747
|
|
|
2748
|
+
|
|
2684
2749
|
|
|
2685
2750
|
|
|
2686
2751
|
class Meeting {
|
|
@@ -2695,6 +2760,8 @@ class Meeting {
|
|
|
2695
2760
|
|
|
2696
2761
|
|
|
2697
2762
|
|
|
2763
|
+
|
|
2764
|
+
|
|
2698
2765
|
|
|
2699
2766
|
static parse(plain ) {
|
|
2700
2767
|
return new Meeting({
|
|
@@ -2707,6 +2774,7 @@ class Meeting {
|
|
|
2707
2774
|
extension: plain.exten,
|
|
2708
2775
|
persistent: plain.persistent,
|
|
2709
2776
|
creationTime: moment(plain.creation_time).toDate(),
|
|
2777
|
+
requireAuthorization: plain.require_authorization,
|
|
2710
2778
|
});
|
|
2711
2779
|
}
|
|
2712
2780
|
|
|
@@ -2731,6 +2799,7 @@ class Meeting {
|
|
|
2731
2799
|
extension,
|
|
2732
2800
|
persistent,
|
|
2733
2801
|
creationTime,
|
|
2802
|
+
requireAuthorization,
|
|
2734
2803
|
} = {}) {
|
|
2735
2804
|
this.guestSipAuthorization = guestSipAuthorization;
|
|
2736
2805
|
this.uri = uri;
|
|
@@ -2741,6 +2810,7 @@ class Meeting {
|
|
|
2741
2810
|
this.extension = extension;
|
|
2742
2811
|
this.persistent = persistent;
|
|
2743
2812
|
this.creationTime = creationTime;
|
|
2813
|
+
this.requireAuthorization = requireAuthorization;
|
|
2744
2814
|
|
|
2745
2815
|
// Useful to compare instead of instanceof with minified code
|
|
2746
2816
|
this.type = 'Meeting';
|
|
@@ -2751,8 +2821,32 @@ class Meeting {
|
|
|
2751
2821
|
const [username, secret] = atob(this.guestSipAuthorization).split(':');
|
|
2752
2822
|
return { username, secret };
|
|
2753
2823
|
}
|
|
2824
|
+
|
|
2754
2825
|
}
|
|
2755
2826
|
|
|
2827
|
+
//
|
|
2828
|
+
|
|
2829
|
+
const camelToUnderscore = (key ) => {
|
|
2830
|
+
if (typeof key !== 'string') {
|
|
2831
|
+
throw new Error('Input is not a string');
|
|
2832
|
+
}
|
|
2833
|
+
return key.charAt(0).toLowerCase() + key.substring(1).replace(/([A-Z])/g, '_$1').toLowerCase();
|
|
2834
|
+
};
|
|
2835
|
+
|
|
2836
|
+
//
|
|
2837
|
+
|
|
2838
|
+
const convertKeysFromCamelToUnderscore = (args ) => {
|
|
2839
|
+
if (!args || typeof args !== 'object' || Array.isArray(args)) {
|
|
2840
|
+
throw new Error('Input is not an object');
|
|
2841
|
+
}
|
|
2842
|
+
|
|
2843
|
+
return Object.keys(args).reduce((acc, key) => {
|
|
2844
|
+
acc[camelToUnderscore(key)] = typeof args[key] === 'object' && !Array.isArray(args[key])
|
|
2845
|
+
? convertKeysFromCamelToUnderscore(args[key]) : args[key];
|
|
2846
|
+
return acc;
|
|
2847
|
+
}, {});
|
|
2848
|
+
};
|
|
2849
|
+
|
|
2756
2850
|
/* */
|
|
2757
2851
|
|
|
2758
2852
|
var confdMethods = (client , baseUrl ) => ({
|
|
@@ -2821,8 +2915,18 @@ var confdMethods = (client , baseUrl ) => ({
|
|
|
2821
2915
|
getMyMeetings: () =>
|
|
2822
2916
|
client.get(`${baseUrl}/users/me/meetings`).then(response => Meeting.parseMany(response.items)),
|
|
2823
2917
|
|
|
2824
|
-
createMyMeeting: (
|
|
2825
|
-
client
|
|
2918
|
+
createMyMeeting: (args ) =>
|
|
2919
|
+
client
|
|
2920
|
+
.post(`${baseUrl}/users/me/meetings`, convertKeysFromCamelToUnderscore(args))
|
|
2921
|
+
.then(Meeting.parse),
|
|
2922
|
+
|
|
2923
|
+
updateMyMeeting: (meetingUuid , data ) =>
|
|
2924
|
+
client.put(
|
|
2925
|
+
`${baseUrl}/users/me/meetings/${meetingUuid}`,
|
|
2926
|
+
convertKeysFromCamelToUnderscore(data),
|
|
2927
|
+
null,
|
|
2928
|
+
ApiRequester.successResponseParser,
|
|
2929
|
+
),
|
|
2826
2930
|
|
|
2827
2931
|
deleteMyMeeting: (meetingUuid ) =>
|
|
2828
2932
|
client.delete(`${baseUrl}/users/me/meetings/${meetingUuid}`, null),
|
|
@@ -2830,8 +2934,36 @@ var confdMethods = (client , baseUrl ) => ({
|
|
|
2830
2934
|
getMeeting: (meetingUuid ) =>
|
|
2831
2935
|
client.get(`${baseUrl}/meetings/${meetingUuid}`, null).then(Meeting.parse),
|
|
2832
2936
|
|
|
2937
|
+
meetingAuthorizations: (meetingUuid ) =>
|
|
2938
|
+
client.get(`${baseUrl}/users/me/meetings/${meetingUuid}/authorizations`, null).then(MeetingAuthorization.parseMany),
|
|
2939
|
+
|
|
2940
|
+
meetingAuthorizationReject: (meetingUuid , authorizationUuid ) =>
|
|
2941
|
+
client.put(
|
|
2942
|
+
`${baseUrl}/users/me/meetings/${meetingUuid}/authorizations/${authorizationUuid}/reject`,
|
|
2943
|
+
{},
|
|
2944
|
+
null,
|
|
2945
|
+
ApiRequester.successResponseParser,
|
|
2946
|
+
),
|
|
2947
|
+
|
|
2948
|
+
meetingAuthorizationAccept: (meetingUuid , authorizationUuid ) =>
|
|
2949
|
+
client.put(
|
|
2950
|
+
`${baseUrl}/users/me/meetings/${meetingUuid}/authorizations/${authorizationUuid}/accept`,
|
|
2951
|
+
{},
|
|
2952
|
+
null,
|
|
2953
|
+
ApiRequester.successResponseParser,
|
|
2954
|
+
),
|
|
2955
|
+
|
|
2833
2956
|
guestGetMeeting: (meetingUuid ) =>
|
|
2834
2957
|
client.get(`${baseUrl}/guests/me/meetings/${meetingUuid}`, null).then(Meeting.parse),
|
|
2958
|
+
|
|
2959
|
+
guestAuthorizationRequest: (userUuid , meetingUuid , username ) =>
|
|
2960
|
+
client
|
|
2961
|
+
.post(`${baseUrl}/guests/${userUuid}/meetings/${meetingUuid}/authorizations`, { guest_name: username })
|
|
2962
|
+
.then(MeetingAuthorization.parse),
|
|
2963
|
+
|
|
2964
|
+
guestAuthorizationCheck: (userUuid , meetingUuid , authorizationUuid ) =>
|
|
2965
|
+
client.get(`${baseUrl}/guests/${userUuid}/meetings/${meetingUuid}/authorizations/${authorizationUuid}`, null),
|
|
2966
|
+
|
|
2835
2967
|
});
|
|
2836
2968
|
|
|
2837
2969
|
//
|
|
@@ -5056,6 +5188,14 @@ var calldMethods = (client , baseUrl ) => ({
|
|
|
5056
5188
|
getMeetingParticipantsAsUser: async (meetingUuid ) =>
|
|
5057
5189
|
client.get(`${baseUrl}/users/me/meetings/${meetingUuid}/participants`),
|
|
5058
5190
|
|
|
5191
|
+
banMeetingParticipant: (meetingUuid , participantUuid ) =>
|
|
5192
|
+
client.delete(
|
|
5193
|
+
`${baseUrl}/users/me/meetings/${meetingUuid}/participants/${participantUuid}`,
|
|
5194
|
+
null,
|
|
5195
|
+
null,
|
|
5196
|
+
ApiRequester.successResponseParser,
|
|
5197
|
+
),
|
|
5198
|
+
|
|
5059
5199
|
listTrunks: () => client.get(`${baseUrl}/trunks`),
|
|
5060
5200
|
|
|
5061
5201
|
mute: (callId ) =>
|
|
@@ -6204,6 +6344,24 @@ const fixSdp = (sdp , candidates , forcePort = true)
|
|
|
6204
6344
|
return fixed;
|
|
6205
6345
|
};
|
|
6206
6346
|
|
|
6347
|
+
const addIcesInAllBundles = (sdp ) => {
|
|
6348
|
+
const parsedSdp = sdpParser.parse(sdp);
|
|
6349
|
+
|
|
6350
|
+
const mediaWithCandidate = parsedSdp.media.find(media => !!media.candidates);
|
|
6351
|
+
if (!mediaWithCandidate) {
|
|
6352
|
+
return sdp;
|
|
6353
|
+
}
|
|
6354
|
+
|
|
6355
|
+
const { candidates } = mediaWithCandidate;
|
|
6356
|
+
|
|
6357
|
+
parsedSdp.media = parsedSdp.media.map(media => ({
|
|
6358
|
+
...media,
|
|
6359
|
+
candidates: media.candidates || candidates,
|
|
6360
|
+
}));
|
|
6361
|
+
|
|
6362
|
+
return sdpParser.write(parsedSdp);
|
|
6363
|
+
};
|
|
6364
|
+
|
|
6207
6365
|
/* global RTCSessionDescriptionInit, navigator */
|
|
6208
6366
|
|
|
6209
6367
|
const wazoLogger = IssueReporter$1 ? IssueReporter$1.loggerFor('webrtc-sdh') : console;
|
|
@@ -6333,7 +6491,10 @@ class WazoSessionDescriptionHandler extends SessionDescriptionHandler {
|
|
|
6333
6491
|
|
|
6334
6492
|
// Check if we got ICEs
|
|
6335
6493
|
if (sdp.indexOf('a=candidate') !== -1) {
|
|
6336
|
-
return
|
|
6494
|
+
return {
|
|
6495
|
+
type: description.type,
|
|
6496
|
+
sdp: addIcesInAllBundles(sdp),
|
|
6497
|
+
};
|
|
6337
6498
|
}
|
|
6338
6499
|
|
|
6339
6500
|
wazoLogger.info('No ICE candidates found in SDP, fixing it with gathered ices', this.gatheredCandidates);
|
|
@@ -7793,7 +7954,7 @@ class WebRTCClient extends Emitter {
|
|
|
7793
7954
|
});
|
|
7794
7955
|
}
|
|
7795
7956
|
|
|
7796
|
-
changeAudioInputDevice(id , session , force ) {
|
|
7957
|
+
async changeAudioInputDevice(id , session , force ) {
|
|
7797
7958
|
const currentId = this.getAudioDeviceId();
|
|
7798
7959
|
logger$8.info('setting audio input device', { id, currentId, session: !!session });
|
|
7799
7960
|
|
|
@@ -7801,33 +7962,50 @@ class WebRTCClient extends Emitter {
|
|
|
7801
7962
|
return null;
|
|
7802
7963
|
}
|
|
7803
7964
|
|
|
7965
|
+
// in order to handle an audio track change for default devices
|
|
7966
|
+
// we need the actual id of the device (not 'default')
|
|
7967
|
+
let deviceId = id;
|
|
7968
|
+
if (id === 'default' && navigator.mediaDevices) {
|
|
7969
|
+
const devices = await navigator.mediaDevices.enumerateDevices();
|
|
7970
|
+
const defaultDevice = devices.find(device => device.deviceId === 'default');
|
|
7971
|
+
if (defaultDevice) {
|
|
7972
|
+
const deviceLabel = defaultDevice.label.replace('Default - ', '');
|
|
7973
|
+
const targetDevice = devices.find(device => device.label === deviceLabel);
|
|
7974
|
+
if (targetDevice) {
|
|
7975
|
+
deviceId = targetDevice.deviceId;
|
|
7976
|
+
if (!force && deviceId === currentId) {
|
|
7977
|
+
return null;
|
|
7978
|
+
}
|
|
7979
|
+
}
|
|
7980
|
+
}
|
|
7981
|
+
}
|
|
7982
|
+
|
|
7804
7983
|
// let's update the local audio value
|
|
7805
7984
|
if (this.audio) {
|
|
7806
7985
|
this.audio = {
|
|
7807
7986
|
deviceId: {
|
|
7808
|
-
exact:
|
|
7987
|
+
exact: deviceId,
|
|
7809
7988
|
},
|
|
7810
7989
|
};
|
|
7811
7990
|
}
|
|
7812
7991
|
|
|
7813
|
-
if (session) {
|
|
7992
|
+
if (session && navigator.mediaDevices) {
|
|
7814
7993
|
const sdh = session.sessionDescriptionHandler;
|
|
7815
7994
|
const pc = sdh.peerConnection;
|
|
7816
7995
|
|
|
7817
|
-
|
|
7818
|
-
|
|
7819
|
-
|
|
7820
|
-
|
|
7996
|
+
const constraints = { audio: { deviceId: { exact: deviceId } } };
|
|
7997
|
+
const stream = await navigator.mediaDevices.getUserMedia(constraints);
|
|
7998
|
+
const audioTrack = stream.getAudioTracks()[0];
|
|
7999
|
+
const sender = pc && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
|
|
7821
8000
|
|
|
7822
|
-
|
|
7823
|
-
|
|
7824
|
-
|
|
7825
|
-
}
|
|
7826
|
-
sender.replaceTrack(audioTrack);
|
|
8001
|
+
if (sender) {
|
|
8002
|
+
if (sender.track) {
|
|
8003
|
+
audioTrack.enabled = sender.track.enabled;
|
|
7827
8004
|
}
|
|
8005
|
+
sender.replaceTrack(audioTrack);
|
|
8006
|
+
}
|
|
7828
8007
|
|
|
7829
|
-
|
|
7830
|
-
});
|
|
8008
|
+
return stream;
|
|
7831
8009
|
}
|
|
7832
8010
|
}
|
|
7833
8011
|
|
|
@@ -7847,14 +8025,14 @@ class WebRTCClient extends Emitter {
|
|
|
7847
8025
|
return null;
|
|
7848
8026
|
}
|
|
7849
8027
|
|
|
7850
|
-
// let's
|
|
7851
|
-
|
|
7852
|
-
|
|
7853
|
-
|
|
7854
|
-
|
|
7855
|
-
|
|
7856
|
-
}
|
|
7857
|
-
}
|
|
8028
|
+
// let's make sure we don't lose other video constraints settings -- width, height, frameRate...
|
|
8029
|
+
const videoObject = typeof this.video === 'object' ? this.video : {};
|
|
8030
|
+
this.video = {
|
|
8031
|
+
...videoObject,
|
|
8032
|
+
deviceId: {
|
|
8033
|
+
exact: id,
|
|
8034
|
+
},
|
|
8035
|
+
};
|
|
7858
8036
|
}
|
|
7859
8037
|
|
|
7860
8038
|
changeSessionVideoInputDevice(id , session ) {
|
|
@@ -9456,9 +9634,7 @@ class WebRTCPhone extends Emitter {
|
|
|
9456
9634
|
|
|
9457
9635
|
try {
|
|
9458
9636
|
if (this.currentScreenShare.stream) {
|
|
9459
|
-
this.currentScreenShare.stream.getTracks()
|
|
9460
|
-
.filter(track => track.kind === 'video')
|
|
9461
|
-
.forEach(track => track.stop());
|
|
9637
|
+
this.currentScreenShare.stream.getTracks().forEach(track => track.stop());
|
|
9462
9638
|
}
|
|
9463
9639
|
|
|
9464
9640
|
if (restoreLocalStream) {
|
|
@@ -11249,6 +11425,7 @@ const AGENT_UNPAUSED = 'agent_unpaused';
|
|
|
11249
11425
|
const CONFERENCE_ADHOC_PARTICIPANT_LEFT = 'conference_adhoc_participant_left';
|
|
11250
11426
|
const CONFERENCE_ADHOC_DELETED = 'conference_adhoc_deleted';
|
|
11251
11427
|
const MEETING_USER_PROGRESS = 'meeting_user_progress';
|
|
11428
|
+
const MEETING_USER_GUEST_AUTHORIZATION_CREATED = 'meeting_user_guest_authorization_created';
|
|
11252
11429
|
|
|
11253
11430
|
const BLACKLIST_EVENTS = [
|
|
11254
11431
|
CHAT_MESSAGE_SENT,
|
|
@@ -11600,6 +11777,7 @@ WebSocketClient.eventLists = [
|
|
|
11600
11777
|
CONFERENCE_ADHOC_PARTICIPANT_LEFT,
|
|
11601
11778
|
CONFERENCE_ADHOC_DELETED,
|
|
11602
11779
|
MEETING_USER_PROGRESS,
|
|
11780
|
+
MEETING_USER_GUEST_AUTHORIZATION_CREATED,
|
|
11603
11781
|
];
|
|
11604
11782
|
|
|
11605
11783
|
var WebSocketClient$1 = /*#__PURE__*/Object.freeze({
|
|
@@ -11671,6 +11849,7 @@ var WebSocketClient$1 = /*#__PURE__*/Object.freeze({
|
|
|
11671
11849
|
CONFERENCE_ADHOC_PARTICIPANT_LEFT: CONFERENCE_ADHOC_PARTICIPANT_LEFT,
|
|
11672
11850
|
CONFERENCE_ADHOC_DELETED: CONFERENCE_ADHOC_DELETED,
|
|
11673
11851
|
MEETING_USER_PROGRESS: MEETING_USER_PROGRESS,
|
|
11852
|
+
MEETING_USER_GUEST_AUTHORIZATION_CREATED: MEETING_USER_GUEST_AUTHORIZATION_CREATED,
|
|
11674
11853
|
HEARTBEAT_ENGINE_VERSION: HEARTBEAT_ENGINE_VERSION,
|
|
11675
11854
|
'default': WebSocketClient
|
|
11676
11855
|
});
|
|
@@ -11768,7 +11947,7 @@ class SipRoom extends Room {
|
|
|
11768
11947
|
logger$3.info('connecting to sip room', { extension, audioOnly, room: !!room });
|
|
11769
11948
|
|
|
11770
11949
|
if (!room) {
|
|
11771
|
-
await Wazo.Phone.connect();
|
|
11950
|
+
await Wazo.Phone.connect({ media: constraints });
|
|
11772
11951
|
|
|
11773
11952
|
const withCamera = constraints && !!constraints.video;
|
|
11774
11953
|
|
|
@@ -13450,7 +13629,7 @@ class Room extends Emitter {
|
|
|
13450
13629
|
logger$1.info('connecting to room', { extension, audioOnly, room: !!room });
|
|
13451
13630
|
|
|
13452
13631
|
if (!room) {
|
|
13453
|
-
await Wazo.Phone.connect();
|
|
13632
|
+
await Wazo.Phone.connect({ media: constraints });
|
|
13454
13633
|
|
|
13455
13634
|
const withCamera = constraints && !!constraints.video;
|
|
13456
13635
|
|
|
@@ -13895,7 +14074,7 @@ class Room extends Emitter {
|
|
|
13895
14074
|
const participant = this._getParticipantFromCallId(status.callId);
|
|
13896
14075
|
|
|
13897
14076
|
if (participant) {
|
|
13898
|
-
// we're
|
|
14077
|
+
// we're receiving, so no need to broadcast
|
|
13899
14078
|
participant.updateStatus(status, false);
|
|
13900
14079
|
}
|
|
13901
14080
|
break;
|
|
@@ -14169,6 +14348,7 @@ class Participant extends Emitter {
|
|
|
14169
14348
|
|
|
14170
14349
|
|
|
14171
14350
|
|
|
14351
|
+
|
|
14172
14352
|
|
|
14173
14353
|
|
|
14174
14354
|
|
|
@@ -14186,6 +14366,7 @@ class Participant extends Emitter {
|
|
|
14186
14366
|
|
|
14187
14367
|
|
|
14188
14368
|
|
|
14369
|
+
|
|
14189
14370
|
|
|
14190
14371
|
/**
|
|
14191
14372
|
* @param room Room The room where the participant is
|
|
@@ -14209,6 +14390,7 @@ class Participant extends Emitter {
|
|
|
14209
14390
|
this.screensharing = false;
|
|
14210
14391
|
this.isOnHold = false;
|
|
14211
14392
|
this.extra = extra;
|
|
14393
|
+
this.banned = false;
|
|
14212
14394
|
|
|
14213
14395
|
this.ON_UPDATED = 'participant/ON_UPDATED';
|
|
14214
14396
|
this.ON_START_TALKING = 'participant/ON_START_TALKING';
|
|
@@ -14225,6 +14407,7 @@ class Participant extends Emitter {
|
|
|
14225
14407
|
this.ON_EXTRA_CHANGE = 'participant/ON_EXTRA_CHANGE';
|
|
14226
14408
|
this.ON_HOLD = 'participant/ON_HOLD';
|
|
14227
14409
|
this.ON_RESUME = 'participant/ON_RESUME';
|
|
14410
|
+
this.ON_BAN = 'participant/ON_BAN';
|
|
14228
14411
|
}
|
|
14229
14412
|
|
|
14230
14413
|
triggerEvent(name , ...args ) {
|
|
@@ -14265,6 +14448,10 @@ class Participant extends Emitter {
|
|
|
14265
14448
|
status.extra = this.extra;
|
|
14266
14449
|
break;
|
|
14267
14450
|
}
|
|
14451
|
+
case this.ON_BAN: {
|
|
14452
|
+
status.banned = true;
|
|
14453
|
+
break;
|
|
14454
|
+
}
|
|
14268
14455
|
}
|
|
14269
14456
|
|
|
14270
14457
|
if (broadcast) {
|
|
@@ -14367,6 +14554,11 @@ class Participant extends Emitter {
|
|
|
14367
14554
|
this.triggerUpdate(this.ON_RESUME, broadcast);
|
|
14368
14555
|
}
|
|
14369
14556
|
|
|
14557
|
+
onBan(broadcast = true) {
|
|
14558
|
+
this.banned = true;
|
|
14559
|
+
this.triggerUpdate(this.ON_BAN, broadcast);
|
|
14560
|
+
}
|
|
14561
|
+
|
|
14370
14562
|
getStatus() {
|
|
14371
14563
|
return {
|
|
14372
14564
|
callId: this.callId,
|
|
@@ -14413,6 +14605,10 @@ class Participant extends Emitter {
|
|
|
14413
14605
|
}
|
|
14414
14606
|
}
|
|
14415
14607
|
|
|
14608
|
+
if (status.banned) {
|
|
14609
|
+
this.onBan(false);
|
|
14610
|
+
}
|
|
14611
|
+
|
|
14416
14612
|
// Poor man's object comparison
|
|
14417
14613
|
if (typeof status.extra !== 'undefined' && JSON.stringify(this.extra) !== JSON.stringify(status.extra)) {
|
|
14418
14614
|
this.extra = { ...this.extra, ...status.extra };
|
|
@@ -14440,6 +14636,28 @@ class Participant extends Emitter {
|
|
|
14440
14636
|
this.streams = streams;
|
|
14441
14637
|
this.videoStreams = streams;
|
|
14442
14638
|
}
|
|
14639
|
+
|
|
14640
|
+
async ban(apiRequestDelay = null) {
|
|
14641
|
+
const { meetingUuid } = this.room;
|
|
14642
|
+
if (!meetingUuid) {
|
|
14643
|
+
throw new Error('Attempting to ban a participant without a `meetingUuid`');
|
|
14644
|
+
}
|
|
14645
|
+
|
|
14646
|
+
// this notifies all that someone is being banned
|
|
14647
|
+
this.onBan(true);
|
|
14648
|
+
|
|
14649
|
+
// this allows to delay the actual ban, in order for the banned participant as well as others to react to the situation
|
|
14650
|
+
if (apiRequestDelay) {
|
|
14651
|
+
await this.delay(apiRequestDelay);
|
|
14652
|
+
}
|
|
14653
|
+
|
|
14654
|
+
// proceed with the actual kick
|
|
14655
|
+
return getApiClient().calld.banMeetingParticipant(meetingUuid, this.callId);
|
|
14656
|
+
}
|
|
14657
|
+
|
|
14658
|
+
async delay(ms ) {
|
|
14659
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
14660
|
+
}
|
|
14443
14661
|
}
|
|
14444
14662
|
|
|
14445
14663
|
//
|