@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
package/lib/simple/room/Room.js
CHANGED
|
@@ -2657,6 +2657,70 @@ class ExternalApp {
|
|
|
2657
2657
|
|
|
2658
2658
|
//
|
|
2659
2659
|
|
|
2660
|
+
class MeetingAuthorization {
|
|
2661
|
+
|
|
2662
|
+
|
|
2663
|
+
|
|
2664
|
+
|
|
2665
|
+
|
|
2666
|
+
|
|
2667
|
+
constructor({
|
|
2668
|
+
meetingUuid,
|
|
2669
|
+
uuid,
|
|
2670
|
+
userUuid,
|
|
2671
|
+
userName,
|
|
2672
|
+
} = {}) {
|
|
2673
|
+
this.meetingUuid = meetingUuid;
|
|
2674
|
+
this.uuid = uuid;
|
|
2675
|
+
this.userUuid = userUuid;
|
|
2676
|
+
this.userName = userName;
|
|
2677
|
+
}
|
|
2678
|
+
|
|
2679
|
+
setStatus(status ) {
|
|
2680
|
+
this.status = status;
|
|
2681
|
+
}
|
|
2682
|
+
|
|
2683
|
+
getStatus() {
|
|
2684
|
+
return this.status;
|
|
2685
|
+
}
|
|
2686
|
+
|
|
2687
|
+
static parse(plain ) {
|
|
2688
|
+
const {
|
|
2689
|
+
meeting_uuid: meetingUuid,
|
|
2690
|
+
uuid,
|
|
2691
|
+
guest_uuid: userUuid,
|
|
2692
|
+
guest_name: userName,
|
|
2693
|
+
} = plain;
|
|
2694
|
+
|
|
2695
|
+
return new MeetingAuthorization({
|
|
2696
|
+
meetingUuid,
|
|
2697
|
+
uuid,
|
|
2698
|
+
userUuid,
|
|
2699
|
+
userName,
|
|
2700
|
+
});
|
|
2701
|
+
}
|
|
2702
|
+
|
|
2703
|
+
static parseMany(items ) {
|
|
2704
|
+
if (!items) {
|
|
2705
|
+
return [];
|
|
2706
|
+
}
|
|
2707
|
+
return items.map(MeetingAuthorization.parse);
|
|
2708
|
+
}
|
|
2709
|
+
}
|
|
2710
|
+
|
|
2711
|
+
//
|
|
2712
|
+
|
|
2713
|
+
|
|
2714
|
+
|
|
2715
|
+
|
|
2716
|
+
|
|
2717
|
+
|
|
2718
|
+
|
|
2719
|
+
|
|
2720
|
+
|
|
2721
|
+
|
|
2722
|
+
|
|
2723
|
+
|
|
2660
2724
|
|
|
2661
2725
|
|
|
2662
2726
|
|
|
@@ -2667,6 +2731,7 @@ class ExternalApp {
|
|
|
2667
2731
|
|
|
2668
2732
|
|
|
2669
2733
|
|
|
2734
|
+
|
|
2670
2735
|
|
|
2671
2736
|
|
|
2672
2737
|
class Meeting {
|
|
@@ -2681,6 +2746,8 @@ class Meeting {
|
|
|
2681
2746
|
|
|
2682
2747
|
|
|
2683
2748
|
|
|
2749
|
+
|
|
2750
|
+
|
|
2684
2751
|
|
|
2685
2752
|
static parse(plain ) {
|
|
2686
2753
|
return new Meeting({
|
|
@@ -2693,6 +2760,7 @@ class Meeting {
|
|
|
2693
2760
|
extension: plain.exten,
|
|
2694
2761
|
persistent: plain.persistent,
|
|
2695
2762
|
creationTime: moment__default['default'](plain.creation_time).toDate(),
|
|
2763
|
+
requireAuthorization: plain.require_authorization,
|
|
2696
2764
|
});
|
|
2697
2765
|
}
|
|
2698
2766
|
|
|
@@ -2717,6 +2785,7 @@ class Meeting {
|
|
|
2717
2785
|
extension,
|
|
2718
2786
|
persistent,
|
|
2719
2787
|
creationTime,
|
|
2788
|
+
requireAuthorization,
|
|
2720
2789
|
} = {}) {
|
|
2721
2790
|
this.guestSipAuthorization = guestSipAuthorization;
|
|
2722
2791
|
this.uri = uri;
|
|
@@ -2727,6 +2796,7 @@ class Meeting {
|
|
|
2727
2796
|
this.extension = extension;
|
|
2728
2797
|
this.persistent = persistent;
|
|
2729
2798
|
this.creationTime = creationTime;
|
|
2799
|
+
this.requireAuthorization = requireAuthorization;
|
|
2730
2800
|
|
|
2731
2801
|
// Useful to compare instead of instanceof with minified code
|
|
2732
2802
|
this.type = 'Meeting';
|
|
@@ -2737,8 +2807,32 @@ class Meeting {
|
|
|
2737
2807
|
const [username, secret] = atob(this.guestSipAuthorization).split(':');
|
|
2738
2808
|
return { username, secret };
|
|
2739
2809
|
}
|
|
2810
|
+
|
|
2740
2811
|
}
|
|
2741
2812
|
|
|
2813
|
+
//
|
|
2814
|
+
|
|
2815
|
+
const camelToUnderscore = (key ) => {
|
|
2816
|
+
if (typeof key !== 'string') {
|
|
2817
|
+
throw new Error('Input is not a string');
|
|
2818
|
+
}
|
|
2819
|
+
return key.charAt(0).toLowerCase() + key.substring(1).replace(/([A-Z])/g, '_$1').toLowerCase();
|
|
2820
|
+
};
|
|
2821
|
+
|
|
2822
|
+
//
|
|
2823
|
+
|
|
2824
|
+
const convertKeysFromCamelToUnderscore = (args ) => {
|
|
2825
|
+
if (!args || typeof args !== 'object' || Array.isArray(args)) {
|
|
2826
|
+
throw new Error('Input is not an object');
|
|
2827
|
+
}
|
|
2828
|
+
|
|
2829
|
+
return Object.keys(args).reduce((acc, key) => {
|
|
2830
|
+
acc[camelToUnderscore(key)] = typeof args[key] === 'object' && !Array.isArray(args[key])
|
|
2831
|
+
? convertKeysFromCamelToUnderscore(args[key]) : args[key];
|
|
2832
|
+
return acc;
|
|
2833
|
+
}, {});
|
|
2834
|
+
};
|
|
2835
|
+
|
|
2742
2836
|
/* */
|
|
2743
2837
|
|
|
2744
2838
|
var confdMethods = (client , baseUrl ) => ({
|
|
@@ -2807,8 +2901,18 @@ var confdMethods = (client , baseUrl ) => ({
|
|
|
2807
2901
|
getMyMeetings: () =>
|
|
2808
2902
|
client.get(`${baseUrl}/users/me/meetings`).then(response => Meeting.parseMany(response.items)),
|
|
2809
2903
|
|
|
2810
|
-
createMyMeeting: (
|
|
2811
|
-
client
|
|
2904
|
+
createMyMeeting: (args ) =>
|
|
2905
|
+
client
|
|
2906
|
+
.post(`${baseUrl}/users/me/meetings`, convertKeysFromCamelToUnderscore(args))
|
|
2907
|
+
.then(Meeting.parse),
|
|
2908
|
+
|
|
2909
|
+
updateMyMeeting: (meetingUuid , data ) =>
|
|
2910
|
+
client.put(
|
|
2911
|
+
`${baseUrl}/users/me/meetings/${meetingUuid}`,
|
|
2912
|
+
convertKeysFromCamelToUnderscore(data),
|
|
2913
|
+
null,
|
|
2914
|
+
ApiRequester.successResponseParser,
|
|
2915
|
+
),
|
|
2812
2916
|
|
|
2813
2917
|
deleteMyMeeting: (meetingUuid ) =>
|
|
2814
2918
|
client.delete(`${baseUrl}/users/me/meetings/${meetingUuid}`, null),
|
|
@@ -2816,8 +2920,36 @@ var confdMethods = (client , baseUrl ) => ({
|
|
|
2816
2920
|
getMeeting: (meetingUuid ) =>
|
|
2817
2921
|
client.get(`${baseUrl}/meetings/${meetingUuid}`, null).then(Meeting.parse),
|
|
2818
2922
|
|
|
2923
|
+
meetingAuthorizations: (meetingUuid ) =>
|
|
2924
|
+
client.get(`${baseUrl}/users/me/meetings/${meetingUuid}/authorizations`, null).then(MeetingAuthorization.parseMany),
|
|
2925
|
+
|
|
2926
|
+
meetingAuthorizationReject: (meetingUuid , authorizationUuid ) =>
|
|
2927
|
+
client.put(
|
|
2928
|
+
`${baseUrl}/users/me/meetings/${meetingUuid}/authorizations/${authorizationUuid}/reject`,
|
|
2929
|
+
{},
|
|
2930
|
+
null,
|
|
2931
|
+
ApiRequester.successResponseParser,
|
|
2932
|
+
),
|
|
2933
|
+
|
|
2934
|
+
meetingAuthorizationAccept: (meetingUuid , authorizationUuid ) =>
|
|
2935
|
+
client.put(
|
|
2936
|
+
`${baseUrl}/users/me/meetings/${meetingUuid}/authorizations/${authorizationUuid}/accept`,
|
|
2937
|
+
{},
|
|
2938
|
+
null,
|
|
2939
|
+
ApiRequester.successResponseParser,
|
|
2940
|
+
),
|
|
2941
|
+
|
|
2819
2942
|
guestGetMeeting: (meetingUuid ) =>
|
|
2820
2943
|
client.get(`${baseUrl}/guests/me/meetings/${meetingUuid}`, null).then(Meeting.parse),
|
|
2944
|
+
|
|
2945
|
+
guestAuthorizationRequest: (userUuid , meetingUuid , username ) =>
|
|
2946
|
+
client
|
|
2947
|
+
.post(`${baseUrl}/guests/${userUuid}/meetings/${meetingUuid}/authorizations`, { guest_name: username })
|
|
2948
|
+
.then(MeetingAuthorization.parse),
|
|
2949
|
+
|
|
2950
|
+
guestAuthorizationCheck: (userUuid , meetingUuid , authorizationUuid ) =>
|
|
2951
|
+
client.get(`${baseUrl}/guests/${userUuid}/meetings/${meetingUuid}/authorizations/${authorizationUuid}`, null),
|
|
2952
|
+
|
|
2821
2953
|
});
|
|
2822
2954
|
|
|
2823
2955
|
//
|
|
@@ -5068,6 +5200,14 @@ var calldMethods = (client , baseUrl ) => ({
|
|
|
5068
5200
|
getMeetingParticipantsAsUser: async (meetingUuid ) =>
|
|
5069
5201
|
client.get(`${baseUrl}/users/me/meetings/${meetingUuid}/participants`),
|
|
5070
5202
|
|
|
5203
|
+
banMeetingParticipant: (meetingUuid , participantUuid ) =>
|
|
5204
|
+
client.delete(
|
|
5205
|
+
`${baseUrl}/users/me/meetings/${meetingUuid}/participants/${participantUuid}`,
|
|
5206
|
+
null,
|
|
5207
|
+
null,
|
|
5208
|
+
ApiRequester.successResponseParser,
|
|
5209
|
+
),
|
|
5210
|
+
|
|
5071
5211
|
listTrunks: () => client.get(`${baseUrl}/trunks`),
|
|
5072
5212
|
|
|
5073
5213
|
mute: (callId ) =>
|
|
@@ -7826,7 +7966,7 @@ class WebRTCClient extends Emitter {
|
|
|
7826
7966
|
});
|
|
7827
7967
|
}
|
|
7828
7968
|
|
|
7829
|
-
changeAudioInputDevice(id , session , force ) {
|
|
7969
|
+
async changeAudioInputDevice(id , session , force ) {
|
|
7830
7970
|
const currentId = this.getAudioDeviceId();
|
|
7831
7971
|
logger$8.info('setting audio input device', { id, currentId, session: !!session });
|
|
7832
7972
|
|
|
@@ -7834,33 +7974,50 @@ class WebRTCClient extends Emitter {
|
|
|
7834
7974
|
return null;
|
|
7835
7975
|
}
|
|
7836
7976
|
|
|
7977
|
+
// in order to handle an audio track change for default devices
|
|
7978
|
+
// we need the actual id of the device (not 'default')
|
|
7979
|
+
let deviceId = id;
|
|
7980
|
+
if (id === 'default' && navigator.mediaDevices) {
|
|
7981
|
+
const devices = await navigator.mediaDevices.enumerateDevices();
|
|
7982
|
+
const defaultDevice = devices.find(device => device.deviceId === 'default');
|
|
7983
|
+
if (defaultDevice) {
|
|
7984
|
+
const deviceLabel = defaultDevice.label.replace('Default - ', '');
|
|
7985
|
+
const targetDevice = devices.find(device => device.label === deviceLabel);
|
|
7986
|
+
if (targetDevice) {
|
|
7987
|
+
deviceId = targetDevice.deviceId;
|
|
7988
|
+
if (!force && deviceId === currentId) {
|
|
7989
|
+
return null;
|
|
7990
|
+
}
|
|
7991
|
+
}
|
|
7992
|
+
}
|
|
7993
|
+
}
|
|
7994
|
+
|
|
7837
7995
|
// let's update the local audio value
|
|
7838
7996
|
if (this.audio) {
|
|
7839
7997
|
this.audio = {
|
|
7840
7998
|
deviceId: {
|
|
7841
|
-
exact:
|
|
7999
|
+
exact: deviceId,
|
|
7842
8000
|
},
|
|
7843
8001
|
};
|
|
7844
8002
|
}
|
|
7845
8003
|
|
|
7846
|
-
if (session) {
|
|
8004
|
+
if (session && navigator.mediaDevices) {
|
|
7847
8005
|
const sdh = session.sessionDescriptionHandler;
|
|
7848
8006
|
const pc = sdh.peerConnection;
|
|
7849
8007
|
|
|
7850
|
-
|
|
7851
|
-
|
|
7852
|
-
|
|
7853
|
-
|
|
8008
|
+
const constraints = { audio: { deviceId: { exact: deviceId } } };
|
|
8009
|
+
const stream = await navigator.mediaDevices.getUserMedia(constraints);
|
|
8010
|
+
const audioTrack = stream.getAudioTracks()[0];
|
|
8011
|
+
const sender = pc && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
|
|
7854
8012
|
|
|
7855
|
-
|
|
7856
|
-
|
|
7857
|
-
|
|
7858
|
-
}
|
|
7859
|
-
sender.replaceTrack(audioTrack);
|
|
8013
|
+
if (sender) {
|
|
8014
|
+
if (sender.track) {
|
|
8015
|
+
audioTrack.enabled = sender.track.enabled;
|
|
7860
8016
|
}
|
|
8017
|
+
sender.replaceTrack(audioTrack);
|
|
8018
|
+
}
|
|
7861
8019
|
|
|
7862
|
-
|
|
7863
|
-
});
|
|
8020
|
+
return stream;
|
|
7864
8021
|
}
|
|
7865
8022
|
}
|
|
7866
8023
|
|
|
@@ -7880,14 +8037,14 @@ class WebRTCClient extends Emitter {
|
|
|
7880
8037
|
return null;
|
|
7881
8038
|
}
|
|
7882
8039
|
|
|
7883
|
-
// let's
|
|
7884
|
-
|
|
7885
|
-
|
|
7886
|
-
|
|
7887
|
-
|
|
7888
|
-
|
|
7889
|
-
}
|
|
7890
|
-
}
|
|
8040
|
+
// let's make sure we don't lose other video constraints settings -- width, height, frameRate...
|
|
8041
|
+
const videoObject = typeof this.video === 'object' ? this.video : {};
|
|
8042
|
+
this.video = {
|
|
8043
|
+
...videoObject,
|
|
8044
|
+
deviceId: {
|
|
8045
|
+
exact: id,
|
|
8046
|
+
},
|
|
8047
|
+
};
|
|
7891
8048
|
}
|
|
7892
8049
|
|
|
7893
8050
|
changeSessionVideoInputDevice(id , session ) {
|
|
@@ -11282,6 +11439,7 @@ const AGENT_UNPAUSED = 'agent_unpaused';
|
|
|
11282
11439
|
const CONFERENCE_ADHOC_PARTICIPANT_LEFT = 'conference_adhoc_participant_left';
|
|
11283
11440
|
const CONFERENCE_ADHOC_DELETED = 'conference_adhoc_deleted';
|
|
11284
11441
|
const MEETING_USER_PROGRESS = 'meeting_user_progress';
|
|
11442
|
+
const MEETING_USER_GUEST_AUTHORIZATION_CREATED = 'meeting_user_guest_authorization_created';
|
|
11285
11443
|
|
|
11286
11444
|
const BLACKLIST_EVENTS = [
|
|
11287
11445
|
CHAT_MESSAGE_SENT,
|
|
@@ -11633,6 +11791,7 @@ WebSocketClient.eventLists = [
|
|
|
11633
11791
|
CONFERENCE_ADHOC_PARTICIPANT_LEFT,
|
|
11634
11792
|
CONFERENCE_ADHOC_DELETED,
|
|
11635
11793
|
MEETING_USER_PROGRESS,
|
|
11794
|
+
MEETING_USER_GUEST_AUTHORIZATION_CREATED,
|
|
11636
11795
|
];
|
|
11637
11796
|
|
|
11638
11797
|
var WebSocketClient$1 = /*#__PURE__*/Object.freeze({
|
|
@@ -11704,6 +11863,7 @@ var WebSocketClient$1 = /*#__PURE__*/Object.freeze({
|
|
|
11704
11863
|
CONFERENCE_ADHOC_PARTICIPANT_LEFT: CONFERENCE_ADHOC_PARTICIPANT_LEFT,
|
|
11705
11864
|
CONFERENCE_ADHOC_DELETED: CONFERENCE_ADHOC_DELETED,
|
|
11706
11865
|
MEETING_USER_PROGRESS: MEETING_USER_PROGRESS,
|
|
11866
|
+
MEETING_USER_GUEST_AUTHORIZATION_CREATED: MEETING_USER_GUEST_AUTHORIZATION_CREATED,
|
|
11707
11867
|
HEARTBEAT_ENGINE_VERSION: HEARTBEAT_ENGINE_VERSION,
|
|
11708
11868
|
'default': WebSocketClient
|
|
11709
11869
|
});
|
|
@@ -11801,7 +11961,7 @@ class SipRoom extends Room {
|
|
|
11801
11961
|
logger$3.info('connecting to sip room', { extension, audioOnly, room: !!room });
|
|
11802
11962
|
|
|
11803
11963
|
if (!room) {
|
|
11804
|
-
await Wazo.Phone.connect();
|
|
11964
|
+
await Wazo.Phone.connect({ media: constraints });
|
|
11805
11965
|
|
|
11806
11966
|
const withCamera = constraints && !!constraints.video;
|
|
11807
11967
|
|
|
@@ -11947,6 +12107,7 @@ class Participant extends Emitter {
|
|
|
11947
12107
|
|
|
11948
12108
|
|
|
11949
12109
|
|
|
12110
|
+
|
|
11950
12111
|
|
|
11951
12112
|
|
|
11952
12113
|
|
|
@@ -11964,6 +12125,7 @@ class Participant extends Emitter {
|
|
|
11964
12125
|
|
|
11965
12126
|
|
|
11966
12127
|
|
|
12128
|
+
|
|
11967
12129
|
|
|
11968
12130
|
/**
|
|
11969
12131
|
* @param room Room The room where the participant is
|
|
@@ -11987,6 +12149,7 @@ class Participant extends Emitter {
|
|
|
11987
12149
|
this.screensharing = false;
|
|
11988
12150
|
this.isOnHold = false;
|
|
11989
12151
|
this.extra = extra;
|
|
12152
|
+
this.banned = false;
|
|
11990
12153
|
|
|
11991
12154
|
this.ON_UPDATED = 'participant/ON_UPDATED';
|
|
11992
12155
|
this.ON_START_TALKING = 'participant/ON_START_TALKING';
|
|
@@ -12003,6 +12166,7 @@ class Participant extends Emitter {
|
|
|
12003
12166
|
this.ON_EXTRA_CHANGE = 'participant/ON_EXTRA_CHANGE';
|
|
12004
12167
|
this.ON_HOLD = 'participant/ON_HOLD';
|
|
12005
12168
|
this.ON_RESUME = 'participant/ON_RESUME';
|
|
12169
|
+
this.ON_BAN = 'participant/ON_BAN';
|
|
12006
12170
|
}
|
|
12007
12171
|
|
|
12008
12172
|
triggerEvent(name , ...args ) {
|
|
@@ -12043,6 +12207,10 @@ class Participant extends Emitter {
|
|
|
12043
12207
|
status.extra = this.extra;
|
|
12044
12208
|
break;
|
|
12045
12209
|
}
|
|
12210
|
+
case this.ON_BAN: {
|
|
12211
|
+
status.banned = true;
|
|
12212
|
+
break;
|
|
12213
|
+
}
|
|
12046
12214
|
}
|
|
12047
12215
|
|
|
12048
12216
|
if (broadcast) {
|
|
@@ -12145,6 +12313,11 @@ class Participant extends Emitter {
|
|
|
12145
12313
|
this.triggerUpdate(this.ON_RESUME, broadcast);
|
|
12146
12314
|
}
|
|
12147
12315
|
|
|
12316
|
+
onBan(broadcast = true) {
|
|
12317
|
+
this.banned = true;
|
|
12318
|
+
this.triggerUpdate(this.ON_BAN, broadcast);
|
|
12319
|
+
}
|
|
12320
|
+
|
|
12148
12321
|
getStatus() {
|
|
12149
12322
|
return {
|
|
12150
12323
|
callId: this.callId,
|
|
@@ -12191,6 +12364,10 @@ class Participant extends Emitter {
|
|
|
12191
12364
|
}
|
|
12192
12365
|
}
|
|
12193
12366
|
|
|
12367
|
+
if (status.banned) {
|
|
12368
|
+
this.onBan(false);
|
|
12369
|
+
}
|
|
12370
|
+
|
|
12194
12371
|
// Poor man's object comparison
|
|
12195
12372
|
if (typeof status.extra !== 'undefined' && JSON.stringify(this.extra) !== JSON.stringify(status.extra)) {
|
|
12196
12373
|
this.extra = { ...this.extra, ...status.extra };
|
|
@@ -12218,6 +12395,28 @@ class Participant extends Emitter {
|
|
|
12218
12395
|
this.streams = streams;
|
|
12219
12396
|
this.videoStreams = streams;
|
|
12220
12397
|
}
|
|
12398
|
+
|
|
12399
|
+
async ban(apiRequestDelay = null) {
|
|
12400
|
+
const { meetingUuid } = this.room;
|
|
12401
|
+
if (!meetingUuid) {
|
|
12402
|
+
throw new Error('Attempting to ban a participant without a `meetingUuid`');
|
|
12403
|
+
}
|
|
12404
|
+
|
|
12405
|
+
// this notifies all that someone is being banned
|
|
12406
|
+
this.onBan(true);
|
|
12407
|
+
|
|
12408
|
+
// this allows to delay the actual ban, in order for the banned participant as well as others to react to the situation
|
|
12409
|
+
if (apiRequestDelay) {
|
|
12410
|
+
await this.delay(apiRequestDelay);
|
|
12411
|
+
}
|
|
12412
|
+
|
|
12413
|
+
// proceed with the actual kick
|
|
12414
|
+
return getApiClient().calld.banMeetingParticipant(meetingUuid, this.callId);
|
|
12415
|
+
}
|
|
12416
|
+
|
|
12417
|
+
async delay(ms ) {
|
|
12418
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
12419
|
+
}
|
|
12221
12420
|
}
|
|
12222
12421
|
|
|
12223
12422
|
//
|
|
@@ -13778,7 +13977,7 @@ class Room extends Emitter {
|
|
|
13778
13977
|
logger.info('connecting to room', { extension, audioOnly, room: !!room });
|
|
13779
13978
|
|
|
13780
13979
|
if (!room) {
|
|
13781
|
-
await Wazo.Phone.connect();
|
|
13980
|
+
await Wazo.Phone.connect({ media: constraints });
|
|
13782
13981
|
|
|
13783
13982
|
const withCamera = constraints && !!constraints.video;
|
|
13784
13983
|
|
|
@@ -14223,7 +14422,7 @@ class Room extends Emitter {
|
|
|
14223
14422
|
const participant = this._getParticipantFromCallId(status.callId);
|
|
14224
14423
|
|
|
14225
14424
|
if (participant) {
|
|
14226
|
-
// we're
|
|
14425
|
+
// we're receiving, so no need to broadcast
|
|
14227
14426
|
participant.updateStatus(status, false);
|
|
14228
14427
|
}
|
|
14229
14428
|
break;
|