@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
|
|
|
@@ -13455,7 +13634,7 @@ class Room extends Emitter {
|
|
|
13455
13634
|
logger$1.info('connecting to room', { extension, audioOnly, room: !!room });
|
|
13456
13635
|
|
|
13457
13636
|
if (!room) {
|
|
13458
|
-
await Wazo.Phone.connect();
|
|
13637
|
+
await Wazo.Phone.connect({ media: constraints });
|
|
13459
13638
|
|
|
13460
13639
|
const withCamera = constraints && !!constraints.video;
|
|
13461
13640
|
|
|
@@ -13900,7 +14079,7 @@ class Room extends Emitter {
|
|
|
13900
14079
|
const participant = this._getParticipantFromCallId(status.callId);
|
|
13901
14080
|
|
|
13902
14081
|
if (participant) {
|
|
13903
|
-
// we're
|
|
14082
|
+
// we're receiving, so no need to broadcast
|
|
13904
14083
|
participant.updateStatus(status, false);
|
|
13905
14084
|
}
|
|
13906
14085
|
break;
|
|
@@ -14174,6 +14353,7 @@ class Participant extends Emitter {
|
|
|
14174
14353
|
|
|
14175
14354
|
|
|
14176
14355
|
|
|
14356
|
+
|
|
14177
14357
|
|
|
14178
14358
|
|
|
14179
14359
|
|
|
@@ -14191,6 +14371,7 @@ class Participant extends Emitter {
|
|
|
14191
14371
|
|
|
14192
14372
|
|
|
14193
14373
|
|
|
14374
|
+
|
|
14194
14375
|
|
|
14195
14376
|
/**
|
|
14196
14377
|
* @param room Room The room where the participant is
|
|
@@ -14214,6 +14395,7 @@ class Participant extends Emitter {
|
|
|
14214
14395
|
this.screensharing = false;
|
|
14215
14396
|
this.isOnHold = false;
|
|
14216
14397
|
this.extra = extra;
|
|
14398
|
+
this.banned = false;
|
|
14217
14399
|
|
|
14218
14400
|
this.ON_UPDATED = 'participant/ON_UPDATED';
|
|
14219
14401
|
this.ON_START_TALKING = 'participant/ON_START_TALKING';
|
|
@@ -14230,6 +14412,7 @@ class Participant extends Emitter {
|
|
|
14230
14412
|
this.ON_EXTRA_CHANGE = 'participant/ON_EXTRA_CHANGE';
|
|
14231
14413
|
this.ON_HOLD = 'participant/ON_HOLD';
|
|
14232
14414
|
this.ON_RESUME = 'participant/ON_RESUME';
|
|
14415
|
+
this.ON_BAN = 'participant/ON_BAN';
|
|
14233
14416
|
}
|
|
14234
14417
|
|
|
14235
14418
|
triggerEvent(name , ...args ) {
|
|
@@ -14270,6 +14453,10 @@ class Participant extends Emitter {
|
|
|
14270
14453
|
status.extra = this.extra;
|
|
14271
14454
|
break;
|
|
14272
14455
|
}
|
|
14456
|
+
case this.ON_BAN: {
|
|
14457
|
+
status.banned = true;
|
|
14458
|
+
break;
|
|
14459
|
+
}
|
|
14273
14460
|
}
|
|
14274
14461
|
|
|
14275
14462
|
if (broadcast) {
|
|
@@ -14372,6 +14559,11 @@ class Participant extends Emitter {
|
|
|
14372
14559
|
this.triggerUpdate(this.ON_RESUME, broadcast);
|
|
14373
14560
|
}
|
|
14374
14561
|
|
|
14562
|
+
onBan(broadcast = true) {
|
|
14563
|
+
this.banned = true;
|
|
14564
|
+
this.triggerUpdate(this.ON_BAN, broadcast);
|
|
14565
|
+
}
|
|
14566
|
+
|
|
14375
14567
|
getStatus() {
|
|
14376
14568
|
return {
|
|
14377
14569
|
callId: this.callId,
|
|
@@ -14418,6 +14610,10 @@ class Participant extends Emitter {
|
|
|
14418
14610
|
}
|
|
14419
14611
|
}
|
|
14420
14612
|
|
|
14613
|
+
if (status.banned) {
|
|
14614
|
+
this.onBan(false);
|
|
14615
|
+
}
|
|
14616
|
+
|
|
14421
14617
|
// Poor man's object comparison
|
|
14422
14618
|
if (typeof status.extra !== 'undefined' && JSON.stringify(this.extra) !== JSON.stringify(status.extra)) {
|
|
14423
14619
|
this.extra = { ...this.extra, ...status.extra };
|
|
@@ -14445,6 +14641,28 @@ class Participant extends Emitter {
|
|
|
14445
14641
|
this.streams = streams;
|
|
14446
14642
|
this.videoStreams = streams;
|
|
14447
14643
|
}
|
|
14644
|
+
|
|
14645
|
+
async ban(apiRequestDelay = null) {
|
|
14646
|
+
const { meetingUuid } = this.room;
|
|
14647
|
+
if (!meetingUuid) {
|
|
14648
|
+
throw new Error('Attempting to ban a participant without a `meetingUuid`');
|
|
14649
|
+
}
|
|
14650
|
+
|
|
14651
|
+
// this notifies all that someone is being banned
|
|
14652
|
+
this.onBan(true);
|
|
14653
|
+
|
|
14654
|
+
// this allows to delay the actual ban, in order for the banned participant as well as others to react to the situation
|
|
14655
|
+
if (apiRequestDelay) {
|
|
14656
|
+
await this.delay(apiRequestDelay);
|
|
14657
|
+
}
|
|
14658
|
+
|
|
14659
|
+
// proceed with the actual kick
|
|
14660
|
+
return getApiClient().calld.banMeetingParticipant(meetingUuid, this.callId);
|
|
14661
|
+
}
|
|
14662
|
+
|
|
14663
|
+
async delay(ms ) {
|
|
14664
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
14665
|
+
}
|
|
14448
14666
|
}
|
|
14449
14667
|
|
|
14450
14668
|
export default Participant;
|