@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
|
@@ -2655,6 +2655,70 @@ class ExternalApp {
|
|
|
2655
2655
|
|
|
2656
2656
|
//
|
|
2657
2657
|
|
|
2658
|
+
class MeetingAuthorization {
|
|
2659
|
+
|
|
2660
|
+
|
|
2661
|
+
|
|
2662
|
+
|
|
2663
|
+
|
|
2664
|
+
|
|
2665
|
+
constructor({
|
|
2666
|
+
meetingUuid,
|
|
2667
|
+
uuid,
|
|
2668
|
+
userUuid,
|
|
2669
|
+
userName,
|
|
2670
|
+
} = {}) {
|
|
2671
|
+
this.meetingUuid = meetingUuid;
|
|
2672
|
+
this.uuid = uuid;
|
|
2673
|
+
this.userUuid = userUuid;
|
|
2674
|
+
this.userName = userName;
|
|
2675
|
+
}
|
|
2676
|
+
|
|
2677
|
+
setStatus(status ) {
|
|
2678
|
+
this.status = status;
|
|
2679
|
+
}
|
|
2680
|
+
|
|
2681
|
+
getStatus() {
|
|
2682
|
+
return this.status;
|
|
2683
|
+
}
|
|
2684
|
+
|
|
2685
|
+
static parse(plain ) {
|
|
2686
|
+
const {
|
|
2687
|
+
meeting_uuid: meetingUuid,
|
|
2688
|
+
uuid,
|
|
2689
|
+
guest_uuid: userUuid,
|
|
2690
|
+
guest_name: userName,
|
|
2691
|
+
} = plain;
|
|
2692
|
+
|
|
2693
|
+
return new MeetingAuthorization({
|
|
2694
|
+
meetingUuid,
|
|
2695
|
+
uuid,
|
|
2696
|
+
userUuid,
|
|
2697
|
+
userName,
|
|
2698
|
+
});
|
|
2699
|
+
}
|
|
2700
|
+
|
|
2701
|
+
static parseMany(items ) {
|
|
2702
|
+
if (!items) {
|
|
2703
|
+
return [];
|
|
2704
|
+
}
|
|
2705
|
+
return items.map(MeetingAuthorization.parse);
|
|
2706
|
+
}
|
|
2707
|
+
}
|
|
2708
|
+
|
|
2709
|
+
//
|
|
2710
|
+
|
|
2711
|
+
|
|
2712
|
+
|
|
2713
|
+
|
|
2714
|
+
|
|
2715
|
+
|
|
2716
|
+
|
|
2717
|
+
|
|
2718
|
+
|
|
2719
|
+
|
|
2720
|
+
|
|
2721
|
+
|
|
2658
2722
|
|
|
2659
2723
|
|
|
2660
2724
|
|
|
@@ -2665,6 +2729,7 @@ class ExternalApp {
|
|
|
2665
2729
|
|
|
2666
2730
|
|
|
2667
2731
|
|
|
2732
|
+
|
|
2668
2733
|
|
|
2669
2734
|
|
|
2670
2735
|
class Meeting {
|
|
@@ -2679,6 +2744,8 @@ class Meeting {
|
|
|
2679
2744
|
|
|
2680
2745
|
|
|
2681
2746
|
|
|
2747
|
+
|
|
2748
|
+
|
|
2682
2749
|
|
|
2683
2750
|
static parse(plain ) {
|
|
2684
2751
|
return new Meeting({
|
|
@@ -2691,6 +2758,7 @@ class Meeting {
|
|
|
2691
2758
|
extension: plain.exten,
|
|
2692
2759
|
persistent: plain.persistent,
|
|
2693
2760
|
creationTime: moment__default['default'](plain.creation_time).toDate(),
|
|
2761
|
+
requireAuthorization: plain.require_authorization,
|
|
2694
2762
|
});
|
|
2695
2763
|
}
|
|
2696
2764
|
|
|
@@ -2715,6 +2783,7 @@ class Meeting {
|
|
|
2715
2783
|
extension,
|
|
2716
2784
|
persistent,
|
|
2717
2785
|
creationTime,
|
|
2786
|
+
requireAuthorization,
|
|
2718
2787
|
} = {}) {
|
|
2719
2788
|
this.guestSipAuthorization = guestSipAuthorization;
|
|
2720
2789
|
this.uri = uri;
|
|
@@ -2725,6 +2794,7 @@ class Meeting {
|
|
|
2725
2794
|
this.extension = extension;
|
|
2726
2795
|
this.persistent = persistent;
|
|
2727
2796
|
this.creationTime = creationTime;
|
|
2797
|
+
this.requireAuthorization = requireAuthorization;
|
|
2728
2798
|
|
|
2729
2799
|
// Useful to compare instead of instanceof with minified code
|
|
2730
2800
|
this.type = 'Meeting';
|
|
@@ -2735,8 +2805,32 @@ class Meeting {
|
|
|
2735
2805
|
const [username, secret] = atob(this.guestSipAuthorization).split(':');
|
|
2736
2806
|
return { username, secret };
|
|
2737
2807
|
}
|
|
2808
|
+
|
|
2738
2809
|
}
|
|
2739
2810
|
|
|
2811
|
+
//
|
|
2812
|
+
|
|
2813
|
+
const camelToUnderscore = (key ) => {
|
|
2814
|
+
if (typeof key !== 'string') {
|
|
2815
|
+
throw new Error('Input is not a string');
|
|
2816
|
+
}
|
|
2817
|
+
return key.charAt(0).toLowerCase() + key.substring(1).replace(/([A-Z])/g, '_$1').toLowerCase();
|
|
2818
|
+
};
|
|
2819
|
+
|
|
2820
|
+
//
|
|
2821
|
+
|
|
2822
|
+
const convertKeysFromCamelToUnderscore = (args ) => {
|
|
2823
|
+
if (!args || typeof args !== 'object' || Array.isArray(args)) {
|
|
2824
|
+
throw new Error('Input is not an object');
|
|
2825
|
+
}
|
|
2826
|
+
|
|
2827
|
+
return Object.keys(args).reduce((acc, key) => {
|
|
2828
|
+
acc[camelToUnderscore(key)] = typeof args[key] === 'object' && !Array.isArray(args[key])
|
|
2829
|
+
? convertKeysFromCamelToUnderscore(args[key]) : args[key];
|
|
2830
|
+
return acc;
|
|
2831
|
+
}, {});
|
|
2832
|
+
};
|
|
2833
|
+
|
|
2740
2834
|
/* */
|
|
2741
2835
|
|
|
2742
2836
|
var confdMethods = (client , baseUrl ) => ({
|
|
@@ -2805,8 +2899,18 @@ var confdMethods = (client , baseUrl ) => ({
|
|
|
2805
2899
|
getMyMeetings: () =>
|
|
2806
2900
|
client.get(`${baseUrl}/users/me/meetings`).then(response => Meeting.parseMany(response.items)),
|
|
2807
2901
|
|
|
2808
|
-
createMyMeeting: (
|
|
2809
|
-
client
|
|
2902
|
+
createMyMeeting: (args ) =>
|
|
2903
|
+
client
|
|
2904
|
+
.post(`${baseUrl}/users/me/meetings`, convertKeysFromCamelToUnderscore(args))
|
|
2905
|
+
.then(Meeting.parse),
|
|
2906
|
+
|
|
2907
|
+
updateMyMeeting: (meetingUuid , data ) =>
|
|
2908
|
+
client.put(
|
|
2909
|
+
`${baseUrl}/users/me/meetings/${meetingUuid}`,
|
|
2910
|
+
convertKeysFromCamelToUnderscore(data),
|
|
2911
|
+
null,
|
|
2912
|
+
ApiRequester.successResponseParser,
|
|
2913
|
+
),
|
|
2810
2914
|
|
|
2811
2915
|
deleteMyMeeting: (meetingUuid ) =>
|
|
2812
2916
|
client.delete(`${baseUrl}/users/me/meetings/${meetingUuid}`, null),
|
|
@@ -2814,8 +2918,36 @@ var confdMethods = (client , baseUrl ) => ({
|
|
|
2814
2918
|
getMeeting: (meetingUuid ) =>
|
|
2815
2919
|
client.get(`${baseUrl}/meetings/${meetingUuid}`, null).then(Meeting.parse),
|
|
2816
2920
|
|
|
2921
|
+
meetingAuthorizations: (meetingUuid ) =>
|
|
2922
|
+
client.get(`${baseUrl}/users/me/meetings/${meetingUuid}/authorizations`, null).then(MeetingAuthorization.parseMany),
|
|
2923
|
+
|
|
2924
|
+
meetingAuthorizationReject: (meetingUuid , authorizationUuid ) =>
|
|
2925
|
+
client.put(
|
|
2926
|
+
`${baseUrl}/users/me/meetings/${meetingUuid}/authorizations/${authorizationUuid}/reject`,
|
|
2927
|
+
{},
|
|
2928
|
+
null,
|
|
2929
|
+
ApiRequester.successResponseParser,
|
|
2930
|
+
),
|
|
2931
|
+
|
|
2932
|
+
meetingAuthorizationAccept: (meetingUuid , authorizationUuid ) =>
|
|
2933
|
+
client.put(
|
|
2934
|
+
`${baseUrl}/users/me/meetings/${meetingUuid}/authorizations/${authorizationUuid}/accept`,
|
|
2935
|
+
{},
|
|
2936
|
+
null,
|
|
2937
|
+
ApiRequester.successResponseParser,
|
|
2938
|
+
),
|
|
2939
|
+
|
|
2817
2940
|
guestGetMeeting: (meetingUuid ) =>
|
|
2818
2941
|
client.get(`${baseUrl}/guests/me/meetings/${meetingUuid}`, null).then(Meeting.parse),
|
|
2942
|
+
|
|
2943
|
+
guestAuthorizationRequest: (userUuid , meetingUuid , username ) =>
|
|
2944
|
+
client
|
|
2945
|
+
.post(`${baseUrl}/guests/${userUuid}/meetings/${meetingUuid}/authorizations`, { guest_name: username })
|
|
2946
|
+
.then(MeetingAuthorization.parse),
|
|
2947
|
+
|
|
2948
|
+
guestAuthorizationCheck: (userUuid , meetingUuid , authorizationUuid ) =>
|
|
2949
|
+
client.get(`${baseUrl}/guests/${userUuid}/meetings/${meetingUuid}/authorizations/${authorizationUuid}`, null),
|
|
2950
|
+
|
|
2819
2951
|
});
|
|
2820
2952
|
|
|
2821
2953
|
//
|
|
@@ -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
|
|
|
@@ -11924,6 +12103,7 @@ class Participant extends Emitter {
|
|
|
11924
12103
|
|
|
11925
12104
|
|
|
11926
12105
|
|
|
12106
|
+
|
|
11927
12107
|
|
|
11928
12108
|
|
|
11929
12109
|
|
|
@@ -11941,6 +12121,7 @@ class Participant extends Emitter {
|
|
|
11941
12121
|
|
|
11942
12122
|
|
|
11943
12123
|
|
|
12124
|
+
|
|
11944
12125
|
|
|
11945
12126
|
/**
|
|
11946
12127
|
* @param room Room The room where the participant is
|
|
@@ -11964,6 +12145,7 @@ class Participant extends Emitter {
|
|
|
11964
12145
|
this.screensharing = false;
|
|
11965
12146
|
this.isOnHold = false;
|
|
11966
12147
|
this.extra = extra;
|
|
12148
|
+
this.banned = false;
|
|
11967
12149
|
|
|
11968
12150
|
this.ON_UPDATED = 'participant/ON_UPDATED';
|
|
11969
12151
|
this.ON_START_TALKING = 'participant/ON_START_TALKING';
|
|
@@ -11980,6 +12162,7 @@ class Participant extends Emitter {
|
|
|
11980
12162
|
this.ON_EXTRA_CHANGE = 'participant/ON_EXTRA_CHANGE';
|
|
11981
12163
|
this.ON_HOLD = 'participant/ON_HOLD';
|
|
11982
12164
|
this.ON_RESUME = 'participant/ON_RESUME';
|
|
12165
|
+
this.ON_BAN = 'participant/ON_BAN';
|
|
11983
12166
|
}
|
|
11984
12167
|
|
|
11985
12168
|
triggerEvent(name , ...args ) {
|
|
@@ -12020,6 +12203,10 @@ class Participant extends Emitter {
|
|
|
12020
12203
|
status.extra = this.extra;
|
|
12021
12204
|
break;
|
|
12022
12205
|
}
|
|
12206
|
+
case this.ON_BAN: {
|
|
12207
|
+
status.banned = true;
|
|
12208
|
+
break;
|
|
12209
|
+
}
|
|
12023
12210
|
}
|
|
12024
12211
|
|
|
12025
12212
|
if (broadcast) {
|
|
@@ -12122,6 +12309,11 @@ class Participant extends Emitter {
|
|
|
12122
12309
|
this.triggerUpdate(this.ON_RESUME, broadcast);
|
|
12123
12310
|
}
|
|
12124
12311
|
|
|
12312
|
+
onBan(broadcast = true) {
|
|
12313
|
+
this.banned = true;
|
|
12314
|
+
this.triggerUpdate(this.ON_BAN, broadcast);
|
|
12315
|
+
}
|
|
12316
|
+
|
|
12125
12317
|
getStatus() {
|
|
12126
12318
|
return {
|
|
12127
12319
|
callId: this.callId,
|
|
@@ -12168,6 +12360,10 @@ class Participant extends Emitter {
|
|
|
12168
12360
|
}
|
|
12169
12361
|
}
|
|
12170
12362
|
|
|
12363
|
+
if (status.banned) {
|
|
12364
|
+
this.onBan(false);
|
|
12365
|
+
}
|
|
12366
|
+
|
|
12171
12367
|
// Poor man's object comparison
|
|
12172
12368
|
if (typeof status.extra !== 'undefined' && JSON.stringify(this.extra) !== JSON.stringify(status.extra)) {
|
|
12173
12369
|
this.extra = { ...this.extra, ...status.extra };
|
|
@@ -12195,6 +12391,28 @@ class Participant extends Emitter {
|
|
|
12195
12391
|
this.streams = streams;
|
|
12196
12392
|
this.videoStreams = streams;
|
|
12197
12393
|
}
|
|
12394
|
+
|
|
12395
|
+
async ban(apiRequestDelay = null) {
|
|
12396
|
+
const { meetingUuid } = this.room;
|
|
12397
|
+
if (!meetingUuid) {
|
|
12398
|
+
throw new Error('Attempting to ban a participant without a `meetingUuid`');
|
|
12399
|
+
}
|
|
12400
|
+
|
|
12401
|
+
// this notifies all that someone is being banned
|
|
12402
|
+
this.onBan(true);
|
|
12403
|
+
|
|
12404
|
+
// this allows to delay the actual ban, in order for the banned participant as well as others to react to the situation
|
|
12405
|
+
if (apiRequestDelay) {
|
|
12406
|
+
await this.delay(apiRequestDelay);
|
|
12407
|
+
}
|
|
12408
|
+
|
|
12409
|
+
// proceed with the actual kick
|
|
12410
|
+
return getApiClient().calld.banMeetingParticipant(meetingUuid, this.callId);
|
|
12411
|
+
}
|
|
12412
|
+
|
|
12413
|
+
async delay(ms ) {
|
|
12414
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
12415
|
+
}
|
|
12198
12416
|
}
|
|
12199
12417
|
|
|
12200
12418
|
//
|
|
@@ -13744,7 +13962,7 @@ class Room extends Emitter {
|
|
|
13744
13962
|
logger.info('connecting to room', { extension, audioOnly, room: !!room });
|
|
13745
13963
|
|
|
13746
13964
|
if (!room) {
|
|
13747
|
-
await Wazo.Phone.connect();
|
|
13965
|
+
await Wazo.Phone.connect({ media: constraints });
|
|
13748
13966
|
|
|
13749
13967
|
const withCamera = constraints && !!constraints.video;
|
|
13750
13968
|
|
|
@@ -14189,7 +14407,7 @@ class Room extends Emitter {
|
|
|
14189
14407
|
const participant = this._getParticipantFromCallId(status.callId);
|
|
14190
14408
|
|
|
14191
14409
|
if (participant) {
|
|
14192
|
-
// we're
|
|
14410
|
+
// we're receiving, so no need to broadcast
|
|
14193
14411
|
participant.updateStatus(status, false);
|
|
14194
14412
|
}
|
|
14195
14413
|
break;
|