@wazo/sdk 0.38.7 → 0.38.8
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 +227 -27
- 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 +183 -24
- package/esm/checker/checks/aor.js +142 -2
- package/esm/checker/checks/api.js +142 -2
- package/esm/checker/checks/index.js +183 -24
- package/esm/checker/checks/wazo-websocket.js +2 -0
- package/esm/checker/checks/webrtc-transport.js +181 -24
- package/esm/checker/checks/webrtc.js +181 -24
- 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/__tests__/Meeting.test.js +87 -1
- package/esm/domain/__tests__/MeetingAuthorization.test.js +109 -0
- package/esm/index.js +226 -27
- package/esm/service/CallApi.js +142 -2
- package/esm/service/getApiClient.js +142 -2
- package/esm/simple/Auth.js +226 -27
- package/esm/simple/Configuration.js +226 -27
- package/esm/simple/Directory.js +142 -2
- package/esm/simple/Phone.js +226 -27
- package/esm/simple/Websocket.js +3 -0
- package/esm/simple/index.js +226 -27
- package/esm/simple/room/LocalParticipant.js +226 -27
- package/esm/simple/room/Participant.js +226 -27
- package/esm/simple/room/RemoteParticipant.js +226 -27
- package/esm/simple/room/Room.js +226 -27
- package/esm/simple/room/SipRoom.js +226 -27
- package/esm/simple/room/Stream.js +226 -27
- package/esm/simple/room/__tests__/Participant.test.js +14747 -0
- package/esm/simple/room/__tests__/RemoteParticipant.test.js +226 -27
- package/esm/simple/utils.js +226 -27
- package/esm/utils/__tests__/object.test.js +57 -0
- package/esm/utils/__tests__/string.test.js +30 -0
- package/esm/utils/object.js +24 -0
- package/esm/utils/string.js +10 -0
- package/esm/web-rtc-client.js +181 -24
- package/esm/websocket-client.js +3 -1
- package/lib/__tests__/api-client.test.js +142 -2
- package/lib/__tests__/web-rtc-client.test.js +227 -27
- 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 +183 -24
- package/lib/checker/checks/aor.js +142 -2
- package/lib/checker/checks/api.js +142 -2
- package/lib/checker/checks/index.js +183 -24
- package/lib/checker/checks/wazo-websocket.js +2 -0
- package/lib/checker/checks/webrtc-transport.js +181 -24
- package/lib/checker/checks/webrtc.js +181 -24
- 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/__tests__/Meeting.test.js +87 -1
- package/lib/domain/__tests__/MeetingAuthorization.test.js +111 -0
- package/lib/index.js +226 -27
- package/lib/service/CallApi.js +142 -2
- package/lib/service/getApiClient.js +142 -2
- package/lib/simple/Auth.js +226 -27
- package/lib/simple/Configuration.js +226 -27
- package/lib/simple/Directory.js +142 -2
- package/lib/simple/Phone.js +226 -27
- package/lib/simple/Websocket.js +3 -0
- package/lib/simple/index.js +226 -27
- package/lib/simple/room/LocalParticipant.js +226 -27
- package/lib/simple/room/Participant.js +226 -27
- package/lib/simple/room/RemoteParticipant.js +226 -27
- package/lib/simple/room/Room.js +226 -27
- package/lib/simple/room/SipRoom.js +226 -27
- package/lib/simple/room/Stream.js +226 -27
- package/lib/simple/room/__tests__/Participant.test.js +14757 -0
- package/lib/simple/room/__tests__/RemoteParticipant.test.js +226 -27
- package/lib/simple/utils.js +226 -27
- package/lib/utils/__tests__/object.test.js +59 -0
- package/lib/utils/__tests__/string.test.js +32 -0
- package/lib/utils/object.js +28 -0
- package/lib/utils/string.js +14 -0
- package/lib/web-rtc-client.js +181 -24
- 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/__tests__/Meeting.test.js +70 -1
- package/src/domain/__tests__/MeetingAuthorization.test.js +58 -0
- 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__/string.test.js +23 -0
- package/src/utils/object.js +15 -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 ) =>
|
|
@@ -7824,7 +7964,7 @@ class WebRTCClient extends Emitter {
|
|
|
7824
7964
|
});
|
|
7825
7965
|
}
|
|
7826
7966
|
|
|
7827
|
-
changeAudioInputDevice(id , session , force ) {
|
|
7967
|
+
async changeAudioInputDevice(id , session , force ) {
|
|
7828
7968
|
const currentId = this.getAudioDeviceId();
|
|
7829
7969
|
logger$8.info('setting audio input device', { id, currentId, session: !!session });
|
|
7830
7970
|
|
|
@@ -7832,33 +7972,50 @@ class WebRTCClient extends Emitter {
|
|
|
7832
7972
|
return null;
|
|
7833
7973
|
}
|
|
7834
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
|
+
|
|
7835
7993
|
// let's update the local audio value
|
|
7836
7994
|
if (this.audio) {
|
|
7837
7995
|
this.audio = {
|
|
7838
7996
|
deviceId: {
|
|
7839
|
-
exact:
|
|
7997
|
+
exact: deviceId,
|
|
7840
7998
|
},
|
|
7841
7999
|
};
|
|
7842
8000
|
}
|
|
7843
8001
|
|
|
7844
|
-
if (session) {
|
|
8002
|
+
if (session && navigator.mediaDevices) {
|
|
7845
8003
|
const sdh = session.sessionDescriptionHandler;
|
|
7846
8004
|
const pc = sdh.peerConnection;
|
|
7847
8005
|
|
|
7848
|
-
|
|
7849
|
-
|
|
7850
|
-
|
|
7851
|
-
|
|
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);
|
|
7852
8010
|
|
|
7853
|
-
|
|
7854
|
-
|
|
7855
|
-
|
|
7856
|
-
}
|
|
7857
|
-
sender.replaceTrack(audioTrack);
|
|
8011
|
+
if (sender) {
|
|
8012
|
+
if (sender.track) {
|
|
8013
|
+
audioTrack.enabled = sender.track.enabled;
|
|
7858
8014
|
}
|
|
8015
|
+
sender.replaceTrack(audioTrack);
|
|
8016
|
+
}
|
|
7859
8017
|
|
|
7860
|
-
|
|
7861
|
-
});
|
|
8018
|
+
return stream;
|
|
7862
8019
|
}
|
|
7863
8020
|
}
|
|
7864
8021
|
|
|
@@ -7878,14 +8035,14 @@ class WebRTCClient extends Emitter {
|
|
|
7878
8035
|
return null;
|
|
7879
8036
|
}
|
|
7880
8037
|
|
|
7881
|
-
// let's
|
|
7882
|
-
|
|
7883
|
-
|
|
7884
|
-
|
|
7885
|
-
|
|
7886
|
-
|
|
7887
|
-
}
|
|
7888
|
-
}
|
|
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
|
+
};
|
|
7889
8046
|
}
|
|
7890
8047
|
|
|
7891
8048
|
changeSessionVideoInputDevice(id , session ) {
|
|
@@ -11280,6 +11437,7 @@ const AGENT_UNPAUSED = 'agent_unpaused';
|
|
|
11280
11437
|
const CONFERENCE_ADHOC_PARTICIPANT_LEFT = 'conference_adhoc_participant_left';
|
|
11281
11438
|
const CONFERENCE_ADHOC_DELETED = 'conference_adhoc_deleted';
|
|
11282
11439
|
const MEETING_USER_PROGRESS = 'meeting_user_progress';
|
|
11440
|
+
const MEETING_USER_GUEST_AUTHORIZATION_CREATED = 'meeting_user_guest_authorization_created';
|
|
11283
11441
|
|
|
11284
11442
|
const BLACKLIST_EVENTS = [
|
|
11285
11443
|
CHAT_MESSAGE_SENT,
|
|
@@ -11631,6 +11789,7 @@ WebSocketClient.eventLists = [
|
|
|
11631
11789
|
CONFERENCE_ADHOC_PARTICIPANT_LEFT,
|
|
11632
11790
|
CONFERENCE_ADHOC_DELETED,
|
|
11633
11791
|
MEETING_USER_PROGRESS,
|
|
11792
|
+
MEETING_USER_GUEST_AUTHORIZATION_CREATED,
|
|
11634
11793
|
];
|
|
11635
11794
|
|
|
11636
11795
|
var WebSocketClient$1 = /*#__PURE__*/Object.freeze({
|
|
@@ -11702,6 +11861,7 @@ var WebSocketClient$1 = /*#__PURE__*/Object.freeze({
|
|
|
11702
11861
|
CONFERENCE_ADHOC_PARTICIPANT_LEFT: CONFERENCE_ADHOC_PARTICIPANT_LEFT,
|
|
11703
11862
|
CONFERENCE_ADHOC_DELETED: CONFERENCE_ADHOC_DELETED,
|
|
11704
11863
|
MEETING_USER_PROGRESS: MEETING_USER_PROGRESS,
|
|
11864
|
+
MEETING_USER_GUEST_AUTHORIZATION_CREATED: MEETING_USER_GUEST_AUTHORIZATION_CREATED,
|
|
11705
11865
|
HEARTBEAT_ENGINE_VERSION: HEARTBEAT_ENGINE_VERSION,
|
|
11706
11866
|
'default': WebSocketClient
|
|
11707
11867
|
});
|
|
@@ -11806,6 +11966,7 @@ class Participant extends Emitter {
|
|
|
11806
11966
|
|
|
11807
11967
|
|
|
11808
11968
|
|
|
11969
|
+
|
|
11809
11970
|
|
|
11810
11971
|
|
|
11811
11972
|
|
|
@@ -11823,6 +11984,7 @@ class Participant extends Emitter {
|
|
|
11823
11984
|
|
|
11824
11985
|
|
|
11825
11986
|
|
|
11987
|
+
|
|
11826
11988
|
|
|
11827
11989
|
/**
|
|
11828
11990
|
* @param room Room The room where the participant is
|
|
@@ -11846,6 +12008,7 @@ class Participant extends Emitter {
|
|
|
11846
12008
|
this.screensharing = false;
|
|
11847
12009
|
this.isOnHold = false;
|
|
11848
12010
|
this.extra = extra;
|
|
12011
|
+
this.banned = false;
|
|
11849
12012
|
|
|
11850
12013
|
this.ON_UPDATED = 'participant/ON_UPDATED';
|
|
11851
12014
|
this.ON_START_TALKING = 'participant/ON_START_TALKING';
|
|
@@ -11862,6 +12025,7 @@ class Participant extends Emitter {
|
|
|
11862
12025
|
this.ON_EXTRA_CHANGE = 'participant/ON_EXTRA_CHANGE';
|
|
11863
12026
|
this.ON_HOLD = 'participant/ON_HOLD';
|
|
11864
12027
|
this.ON_RESUME = 'participant/ON_RESUME';
|
|
12028
|
+
this.ON_BAN = 'participant/ON_BAN';
|
|
11865
12029
|
}
|
|
11866
12030
|
|
|
11867
12031
|
triggerEvent(name , ...args ) {
|
|
@@ -11902,6 +12066,10 @@ class Participant extends Emitter {
|
|
|
11902
12066
|
status.extra = this.extra;
|
|
11903
12067
|
break;
|
|
11904
12068
|
}
|
|
12069
|
+
case this.ON_BAN: {
|
|
12070
|
+
status.banned = true;
|
|
12071
|
+
break;
|
|
12072
|
+
}
|
|
11905
12073
|
}
|
|
11906
12074
|
|
|
11907
12075
|
if (broadcast) {
|
|
@@ -12004,6 +12172,11 @@ class Participant extends Emitter {
|
|
|
12004
12172
|
this.triggerUpdate(this.ON_RESUME, broadcast);
|
|
12005
12173
|
}
|
|
12006
12174
|
|
|
12175
|
+
onBan(broadcast = true) {
|
|
12176
|
+
this.banned = true;
|
|
12177
|
+
this.triggerUpdate(this.ON_BAN, broadcast);
|
|
12178
|
+
}
|
|
12179
|
+
|
|
12007
12180
|
getStatus() {
|
|
12008
12181
|
return {
|
|
12009
12182
|
callId: this.callId,
|
|
@@ -12050,6 +12223,10 @@ class Participant extends Emitter {
|
|
|
12050
12223
|
}
|
|
12051
12224
|
}
|
|
12052
12225
|
|
|
12226
|
+
if (status.banned) {
|
|
12227
|
+
this.onBan(false);
|
|
12228
|
+
}
|
|
12229
|
+
|
|
12053
12230
|
// Poor man's object comparison
|
|
12054
12231
|
if (typeof status.extra !== 'undefined' && JSON.stringify(this.extra) !== JSON.stringify(status.extra)) {
|
|
12055
12232
|
this.extra = { ...this.extra, ...status.extra };
|
|
@@ -12077,6 +12254,28 @@ class Participant extends Emitter {
|
|
|
12077
12254
|
this.streams = streams;
|
|
12078
12255
|
this.videoStreams = streams;
|
|
12079
12256
|
}
|
|
12257
|
+
|
|
12258
|
+
async ban(apiRequestDelay = null) {
|
|
12259
|
+
const { meetingUuid } = this.room;
|
|
12260
|
+
if (!meetingUuid) {
|
|
12261
|
+
throw new Error('Attempting to ban a participant without a `meetingUuid`');
|
|
12262
|
+
}
|
|
12263
|
+
|
|
12264
|
+
// this notifies all that someone is being banned
|
|
12265
|
+
this.onBan(true);
|
|
12266
|
+
|
|
12267
|
+
// this allows to delay the actual ban, in order for the banned participant as well as others to react to the situation
|
|
12268
|
+
if (apiRequestDelay) {
|
|
12269
|
+
await this.delay(apiRequestDelay);
|
|
12270
|
+
}
|
|
12271
|
+
|
|
12272
|
+
// proceed with the actual kick
|
|
12273
|
+
return getApiClient().calld.banMeetingParticipant(meetingUuid, this.callId);
|
|
12274
|
+
}
|
|
12275
|
+
|
|
12276
|
+
async delay(ms ) {
|
|
12277
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
12278
|
+
}
|
|
12080
12279
|
}
|
|
12081
12280
|
|
|
12082
12281
|
//
|
|
@@ -12229,7 +12428,7 @@ class Room$1 extends Emitter {
|
|
|
12229
12428
|
logger$2.info('connecting to room', { extension, audioOnly, room: !!room });
|
|
12230
12429
|
|
|
12231
12430
|
if (!room) {
|
|
12232
|
-
await Wazo.Phone.connect();
|
|
12431
|
+
await Wazo.Phone.connect({ media: constraints });
|
|
12233
12432
|
|
|
12234
12433
|
const withCamera = constraints && !!constraints.video;
|
|
12235
12434
|
|
|
@@ -12674,7 +12873,7 @@ class Room$1 extends Emitter {
|
|
|
12674
12873
|
const participant = this._getParticipantFromCallId(status.callId);
|
|
12675
12874
|
|
|
12676
12875
|
if (participant) {
|
|
12677
|
-
// we're
|
|
12876
|
+
// we're receiving, so no need to broadcast
|
|
12678
12877
|
participant.updateStatus(status, false);
|
|
12679
12878
|
}
|
|
12680
12879
|
break;
|
|
@@ -12941,7 +13140,7 @@ class SipRoom extends Room$1 {
|
|
|
12941
13140
|
logger$1.info('connecting to sip room', { extension, audioOnly, room: !!room });
|
|
12942
13141
|
|
|
12943
13142
|
if (!room) {
|
|
12944
|
-
await Wazo.Phone.connect();
|
|
13143
|
+
await Wazo.Phone.connect({ media: constraints });
|
|
12945
13144
|
|
|
12946
13145
|
const withCamera = constraints && !!constraints.video;
|
|
12947
13146
|
|