@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/esm/simple/room/Room.js
CHANGED
|
@@ -2645,6 +2645,70 @@ class ExternalApp {
|
|
|
2645
2645
|
|
|
2646
2646
|
//
|
|
2647
2647
|
|
|
2648
|
+
class MeetingAuthorization {
|
|
2649
|
+
|
|
2650
|
+
|
|
2651
|
+
|
|
2652
|
+
|
|
2653
|
+
|
|
2654
|
+
|
|
2655
|
+
constructor({
|
|
2656
|
+
meetingUuid,
|
|
2657
|
+
uuid,
|
|
2658
|
+
userUuid,
|
|
2659
|
+
userName,
|
|
2660
|
+
} = {}) {
|
|
2661
|
+
this.meetingUuid = meetingUuid;
|
|
2662
|
+
this.uuid = uuid;
|
|
2663
|
+
this.userUuid = userUuid;
|
|
2664
|
+
this.userName = userName;
|
|
2665
|
+
}
|
|
2666
|
+
|
|
2667
|
+
setStatus(status ) {
|
|
2668
|
+
this.status = status;
|
|
2669
|
+
}
|
|
2670
|
+
|
|
2671
|
+
getStatus() {
|
|
2672
|
+
return this.status;
|
|
2673
|
+
}
|
|
2674
|
+
|
|
2675
|
+
static parse(plain ) {
|
|
2676
|
+
const {
|
|
2677
|
+
meeting_uuid: meetingUuid,
|
|
2678
|
+
uuid,
|
|
2679
|
+
guest_uuid: userUuid,
|
|
2680
|
+
guest_name: userName,
|
|
2681
|
+
} = plain;
|
|
2682
|
+
|
|
2683
|
+
return new MeetingAuthorization({
|
|
2684
|
+
meetingUuid,
|
|
2685
|
+
uuid,
|
|
2686
|
+
userUuid,
|
|
2687
|
+
userName,
|
|
2688
|
+
});
|
|
2689
|
+
}
|
|
2690
|
+
|
|
2691
|
+
static parseMany(items ) {
|
|
2692
|
+
if (!items) {
|
|
2693
|
+
return [];
|
|
2694
|
+
}
|
|
2695
|
+
return items.map(MeetingAuthorization.parse);
|
|
2696
|
+
}
|
|
2697
|
+
}
|
|
2698
|
+
|
|
2699
|
+
//
|
|
2700
|
+
|
|
2701
|
+
|
|
2702
|
+
|
|
2703
|
+
|
|
2704
|
+
|
|
2705
|
+
|
|
2706
|
+
|
|
2707
|
+
|
|
2708
|
+
|
|
2709
|
+
|
|
2710
|
+
|
|
2711
|
+
|
|
2648
2712
|
|
|
2649
2713
|
|
|
2650
2714
|
|
|
@@ -2655,6 +2719,7 @@ class ExternalApp {
|
|
|
2655
2719
|
|
|
2656
2720
|
|
|
2657
2721
|
|
|
2722
|
+
|
|
2658
2723
|
|
|
2659
2724
|
|
|
2660
2725
|
class Meeting {
|
|
@@ -2669,6 +2734,8 @@ class Meeting {
|
|
|
2669
2734
|
|
|
2670
2735
|
|
|
2671
2736
|
|
|
2737
|
+
|
|
2738
|
+
|
|
2672
2739
|
|
|
2673
2740
|
static parse(plain ) {
|
|
2674
2741
|
return new Meeting({
|
|
@@ -2681,6 +2748,7 @@ class Meeting {
|
|
|
2681
2748
|
extension: plain.exten,
|
|
2682
2749
|
persistent: plain.persistent,
|
|
2683
2750
|
creationTime: moment(plain.creation_time).toDate(),
|
|
2751
|
+
requireAuthorization: plain.require_authorization,
|
|
2684
2752
|
});
|
|
2685
2753
|
}
|
|
2686
2754
|
|
|
@@ -2705,6 +2773,7 @@ class Meeting {
|
|
|
2705
2773
|
extension,
|
|
2706
2774
|
persistent,
|
|
2707
2775
|
creationTime,
|
|
2776
|
+
requireAuthorization,
|
|
2708
2777
|
} = {}) {
|
|
2709
2778
|
this.guestSipAuthorization = guestSipAuthorization;
|
|
2710
2779
|
this.uri = uri;
|
|
@@ -2715,6 +2784,7 @@ class Meeting {
|
|
|
2715
2784
|
this.extension = extension;
|
|
2716
2785
|
this.persistent = persistent;
|
|
2717
2786
|
this.creationTime = creationTime;
|
|
2787
|
+
this.requireAuthorization = requireAuthorization;
|
|
2718
2788
|
|
|
2719
2789
|
// Useful to compare instead of instanceof with minified code
|
|
2720
2790
|
this.type = 'Meeting';
|
|
@@ -2725,8 +2795,32 @@ class Meeting {
|
|
|
2725
2795
|
const [username, secret] = atob(this.guestSipAuthorization).split(':');
|
|
2726
2796
|
return { username, secret };
|
|
2727
2797
|
}
|
|
2798
|
+
|
|
2728
2799
|
}
|
|
2729
2800
|
|
|
2801
|
+
//
|
|
2802
|
+
|
|
2803
|
+
const camelToUnderscore = (key ) => {
|
|
2804
|
+
if (typeof key !== 'string') {
|
|
2805
|
+
throw new Error('Input is not a string');
|
|
2806
|
+
}
|
|
2807
|
+
return key.charAt(0).toLowerCase() + key.substring(1).replace(/([A-Z])/g, '_$1').toLowerCase();
|
|
2808
|
+
};
|
|
2809
|
+
|
|
2810
|
+
//
|
|
2811
|
+
|
|
2812
|
+
const convertKeysFromCamelToUnderscore = (args ) => {
|
|
2813
|
+
if (!args || typeof args !== 'object' || Array.isArray(args)) {
|
|
2814
|
+
throw new Error('Input is not an object');
|
|
2815
|
+
}
|
|
2816
|
+
|
|
2817
|
+
return Object.keys(args).reduce((acc, key) => {
|
|
2818
|
+
acc[camelToUnderscore(key)] = typeof args[key] === 'object' && !Array.isArray(args[key])
|
|
2819
|
+
? convertKeysFromCamelToUnderscore(args[key]) : args[key];
|
|
2820
|
+
return acc;
|
|
2821
|
+
}, {});
|
|
2822
|
+
};
|
|
2823
|
+
|
|
2730
2824
|
/* */
|
|
2731
2825
|
|
|
2732
2826
|
var confdMethods = (client , baseUrl ) => ({
|
|
@@ -2795,8 +2889,18 @@ var confdMethods = (client , baseUrl ) => ({
|
|
|
2795
2889
|
getMyMeetings: () =>
|
|
2796
2890
|
client.get(`${baseUrl}/users/me/meetings`).then(response => Meeting.parseMany(response.items)),
|
|
2797
2891
|
|
|
2798
|
-
createMyMeeting: (
|
|
2799
|
-
client
|
|
2892
|
+
createMyMeeting: (args ) =>
|
|
2893
|
+
client
|
|
2894
|
+
.post(`${baseUrl}/users/me/meetings`, convertKeysFromCamelToUnderscore(args))
|
|
2895
|
+
.then(Meeting.parse),
|
|
2896
|
+
|
|
2897
|
+
updateMyMeeting: (meetingUuid , data ) =>
|
|
2898
|
+
client.put(
|
|
2899
|
+
`${baseUrl}/users/me/meetings/${meetingUuid}`,
|
|
2900
|
+
convertKeysFromCamelToUnderscore(data),
|
|
2901
|
+
null,
|
|
2902
|
+
ApiRequester.successResponseParser,
|
|
2903
|
+
),
|
|
2800
2904
|
|
|
2801
2905
|
deleteMyMeeting: (meetingUuid ) =>
|
|
2802
2906
|
client.delete(`${baseUrl}/users/me/meetings/${meetingUuid}`, null),
|
|
@@ -2804,8 +2908,36 @@ var confdMethods = (client , baseUrl ) => ({
|
|
|
2804
2908
|
getMeeting: (meetingUuid ) =>
|
|
2805
2909
|
client.get(`${baseUrl}/meetings/${meetingUuid}`, null).then(Meeting.parse),
|
|
2806
2910
|
|
|
2911
|
+
meetingAuthorizations: (meetingUuid ) =>
|
|
2912
|
+
client.get(`${baseUrl}/users/me/meetings/${meetingUuid}/authorizations`, null).then(MeetingAuthorization.parseMany),
|
|
2913
|
+
|
|
2914
|
+
meetingAuthorizationReject: (meetingUuid , authorizationUuid ) =>
|
|
2915
|
+
client.put(
|
|
2916
|
+
`${baseUrl}/users/me/meetings/${meetingUuid}/authorizations/${authorizationUuid}/reject`,
|
|
2917
|
+
{},
|
|
2918
|
+
null,
|
|
2919
|
+
ApiRequester.successResponseParser,
|
|
2920
|
+
),
|
|
2921
|
+
|
|
2922
|
+
meetingAuthorizationAccept: (meetingUuid , authorizationUuid ) =>
|
|
2923
|
+
client.put(
|
|
2924
|
+
`${baseUrl}/users/me/meetings/${meetingUuid}/authorizations/${authorizationUuid}/accept`,
|
|
2925
|
+
{},
|
|
2926
|
+
null,
|
|
2927
|
+
ApiRequester.successResponseParser,
|
|
2928
|
+
),
|
|
2929
|
+
|
|
2807
2930
|
guestGetMeeting: (meetingUuid ) =>
|
|
2808
2931
|
client.get(`${baseUrl}/guests/me/meetings/${meetingUuid}`, null).then(Meeting.parse),
|
|
2932
|
+
|
|
2933
|
+
guestAuthorizationRequest: (userUuid , meetingUuid , username ) =>
|
|
2934
|
+
client
|
|
2935
|
+
.post(`${baseUrl}/guests/${userUuid}/meetings/${meetingUuid}/authorizations`, { guest_name: username })
|
|
2936
|
+
.then(MeetingAuthorization.parse),
|
|
2937
|
+
|
|
2938
|
+
guestAuthorizationCheck: (userUuid , meetingUuid , authorizationUuid ) =>
|
|
2939
|
+
client.get(`${baseUrl}/guests/${userUuid}/meetings/${meetingUuid}/authorizations/${authorizationUuid}`, null),
|
|
2940
|
+
|
|
2809
2941
|
});
|
|
2810
2942
|
|
|
2811
2943
|
//
|
|
@@ -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 ) =>
|
|
@@ -7814,7 +7954,7 @@ class WebRTCClient extends Emitter {
|
|
|
7814
7954
|
});
|
|
7815
7955
|
}
|
|
7816
7956
|
|
|
7817
|
-
changeAudioInputDevice(id , session , force ) {
|
|
7957
|
+
async changeAudioInputDevice(id , session , force ) {
|
|
7818
7958
|
const currentId = this.getAudioDeviceId();
|
|
7819
7959
|
logger$8.info('setting audio input device', { id, currentId, session: !!session });
|
|
7820
7960
|
|
|
@@ -7822,33 +7962,50 @@ class WebRTCClient extends Emitter {
|
|
|
7822
7962
|
return null;
|
|
7823
7963
|
}
|
|
7824
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
|
+
|
|
7825
7983
|
// let's update the local audio value
|
|
7826
7984
|
if (this.audio) {
|
|
7827
7985
|
this.audio = {
|
|
7828
7986
|
deviceId: {
|
|
7829
|
-
exact:
|
|
7987
|
+
exact: deviceId,
|
|
7830
7988
|
},
|
|
7831
7989
|
};
|
|
7832
7990
|
}
|
|
7833
7991
|
|
|
7834
|
-
if (session) {
|
|
7992
|
+
if (session && navigator.mediaDevices) {
|
|
7835
7993
|
const sdh = session.sessionDescriptionHandler;
|
|
7836
7994
|
const pc = sdh.peerConnection;
|
|
7837
7995
|
|
|
7838
|
-
|
|
7839
|
-
|
|
7840
|
-
|
|
7841
|
-
|
|
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);
|
|
7842
8000
|
|
|
7843
|
-
|
|
7844
|
-
|
|
7845
|
-
|
|
7846
|
-
}
|
|
7847
|
-
sender.replaceTrack(audioTrack);
|
|
8001
|
+
if (sender) {
|
|
8002
|
+
if (sender.track) {
|
|
8003
|
+
audioTrack.enabled = sender.track.enabled;
|
|
7848
8004
|
}
|
|
8005
|
+
sender.replaceTrack(audioTrack);
|
|
8006
|
+
}
|
|
7849
8007
|
|
|
7850
|
-
|
|
7851
|
-
});
|
|
8008
|
+
return stream;
|
|
7852
8009
|
}
|
|
7853
8010
|
}
|
|
7854
8011
|
|
|
@@ -7868,14 +8025,14 @@ class WebRTCClient extends Emitter {
|
|
|
7868
8025
|
return null;
|
|
7869
8026
|
}
|
|
7870
8027
|
|
|
7871
|
-
// let's
|
|
7872
|
-
|
|
7873
|
-
|
|
7874
|
-
|
|
7875
|
-
|
|
7876
|
-
|
|
7877
|
-
}
|
|
7878
|
-
}
|
|
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
|
+
};
|
|
7879
8036
|
}
|
|
7880
8037
|
|
|
7881
8038
|
changeSessionVideoInputDevice(id , session ) {
|
|
@@ -11270,6 +11427,7 @@ const AGENT_UNPAUSED = 'agent_unpaused';
|
|
|
11270
11427
|
const CONFERENCE_ADHOC_PARTICIPANT_LEFT = 'conference_adhoc_participant_left';
|
|
11271
11428
|
const CONFERENCE_ADHOC_DELETED = 'conference_adhoc_deleted';
|
|
11272
11429
|
const MEETING_USER_PROGRESS = 'meeting_user_progress';
|
|
11430
|
+
const MEETING_USER_GUEST_AUTHORIZATION_CREATED = 'meeting_user_guest_authorization_created';
|
|
11273
11431
|
|
|
11274
11432
|
const BLACKLIST_EVENTS = [
|
|
11275
11433
|
CHAT_MESSAGE_SENT,
|
|
@@ -11621,6 +11779,7 @@ WebSocketClient.eventLists = [
|
|
|
11621
11779
|
CONFERENCE_ADHOC_PARTICIPANT_LEFT,
|
|
11622
11780
|
CONFERENCE_ADHOC_DELETED,
|
|
11623
11781
|
MEETING_USER_PROGRESS,
|
|
11782
|
+
MEETING_USER_GUEST_AUTHORIZATION_CREATED,
|
|
11624
11783
|
];
|
|
11625
11784
|
|
|
11626
11785
|
var WebSocketClient$1 = /*#__PURE__*/Object.freeze({
|
|
@@ -11692,6 +11851,7 @@ var WebSocketClient$1 = /*#__PURE__*/Object.freeze({
|
|
|
11692
11851
|
CONFERENCE_ADHOC_PARTICIPANT_LEFT: CONFERENCE_ADHOC_PARTICIPANT_LEFT,
|
|
11693
11852
|
CONFERENCE_ADHOC_DELETED: CONFERENCE_ADHOC_DELETED,
|
|
11694
11853
|
MEETING_USER_PROGRESS: MEETING_USER_PROGRESS,
|
|
11854
|
+
MEETING_USER_GUEST_AUTHORIZATION_CREATED: MEETING_USER_GUEST_AUTHORIZATION_CREATED,
|
|
11695
11855
|
HEARTBEAT_ENGINE_VERSION: HEARTBEAT_ENGINE_VERSION,
|
|
11696
11856
|
'default': WebSocketClient
|
|
11697
11857
|
});
|
|
@@ -11789,7 +11949,7 @@ class SipRoom extends Room {
|
|
|
11789
11949
|
logger$3.info('connecting to sip room', { extension, audioOnly, room: !!room });
|
|
11790
11950
|
|
|
11791
11951
|
if (!room) {
|
|
11792
|
-
await Wazo.Phone.connect();
|
|
11952
|
+
await Wazo.Phone.connect({ media: constraints });
|
|
11793
11953
|
|
|
11794
11954
|
const withCamera = constraints && !!constraints.video;
|
|
11795
11955
|
|
|
@@ -11935,6 +12095,7 @@ class Participant extends Emitter {
|
|
|
11935
12095
|
|
|
11936
12096
|
|
|
11937
12097
|
|
|
12098
|
+
|
|
11938
12099
|
|
|
11939
12100
|
|
|
11940
12101
|
|
|
@@ -11952,6 +12113,7 @@ class Participant extends Emitter {
|
|
|
11952
12113
|
|
|
11953
12114
|
|
|
11954
12115
|
|
|
12116
|
+
|
|
11955
12117
|
|
|
11956
12118
|
/**
|
|
11957
12119
|
* @param room Room The room where the participant is
|
|
@@ -11975,6 +12137,7 @@ class Participant extends Emitter {
|
|
|
11975
12137
|
this.screensharing = false;
|
|
11976
12138
|
this.isOnHold = false;
|
|
11977
12139
|
this.extra = extra;
|
|
12140
|
+
this.banned = false;
|
|
11978
12141
|
|
|
11979
12142
|
this.ON_UPDATED = 'participant/ON_UPDATED';
|
|
11980
12143
|
this.ON_START_TALKING = 'participant/ON_START_TALKING';
|
|
@@ -11991,6 +12154,7 @@ class Participant extends Emitter {
|
|
|
11991
12154
|
this.ON_EXTRA_CHANGE = 'participant/ON_EXTRA_CHANGE';
|
|
11992
12155
|
this.ON_HOLD = 'participant/ON_HOLD';
|
|
11993
12156
|
this.ON_RESUME = 'participant/ON_RESUME';
|
|
12157
|
+
this.ON_BAN = 'participant/ON_BAN';
|
|
11994
12158
|
}
|
|
11995
12159
|
|
|
11996
12160
|
triggerEvent(name , ...args ) {
|
|
@@ -12031,6 +12195,10 @@ class Participant extends Emitter {
|
|
|
12031
12195
|
status.extra = this.extra;
|
|
12032
12196
|
break;
|
|
12033
12197
|
}
|
|
12198
|
+
case this.ON_BAN: {
|
|
12199
|
+
status.banned = true;
|
|
12200
|
+
break;
|
|
12201
|
+
}
|
|
12034
12202
|
}
|
|
12035
12203
|
|
|
12036
12204
|
if (broadcast) {
|
|
@@ -12133,6 +12301,11 @@ class Participant extends Emitter {
|
|
|
12133
12301
|
this.triggerUpdate(this.ON_RESUME, broadcast);
|
|
12134
12302
|
}
|
|
12135
12303
|
|
|
12304
|
+
onBan(broadcast = true) {
|
|
12305
|
+
this.banned = true;
|
|
12306
|
+
this.triggerUpdate(this.ON_BAN, broadcast);
|
|
12307
|
+
}
|
|
12308
|
+
|
|
12136
12309
|
getStatus() {
|
|
12137
12310
|
return {
|
|
12138
12311
|
callId: this.callId,
|
|
@@ -12179,6 +12352,10 @@ class Participant extends Emitter {
|
|
|
12179
12352
|
}
|
|
12180
12353
|
}
|
|
12181
12354
|
|
|
12355
|
+
if (status.banned) {
|
|
12356
|
+
this.onBan(false);
|
|
12357
|
+
}
|
|
12358
|
+
|
|
12182
12359
|
// Poor man's object comparison
|
|
12183
12360
|
if (typeof status.extra !== 'undefined' && JSON.stringify(this.extra) !== JSON.stringify(status.extra)) {
|
|
12184
12361
|
this.extra = { ...this.extra, ...status.extra };
|
|
@@ -12206,6 +12383,28 @@ class Participant extends Emitter {
|
|
|
12206
12383
|
this.streams = streams;
|
|
12207
12384
|
this.videoStreams = streams;
|
|
12208
12385
|
}
|
|
12386
|
+
|
|
12387
|
+
async ban(apiRequestDelay = null) {
|
|
12388
|
+
const { meetingUuid } = this.room;
|
|
12389
|
+
if (!meetingUuid) {
|
|
12390
|
+
throw new Error('Attempting to ban a participant without a `meetingUuid`');
|
|
12391
|
+
}
|
|
12392
|
+
|
|
12393
|
+
// this notifies all that someone is being banned
|
|
12394
|
+
this.onBan(true);
|
|
12395
|
+
|
|
12396
|
+
// this allows to delay the actual ban, in order for the banned participant as well as others to react to the situation
|
|
12397
|
+
if (apiRequestDelay) {
|
|
12398
|
+
await this.delay(apiRequestDelay);
|
|
12399
|
+
}
|
|
12400
|
+
|
|
12401
|
+
// proceed with the actual kick
|
|
12402
|
+
return getApiClient().calld.banMeetingParticipant(meetingUuid, this.callId);
|
|
12403
|
+
}
|
|
12404
|
+
|
|
12405
|
+
async delay(ms ) {
|
|
12406
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
12407
|
+
}
|
|
12209
12408
|
}
|
|
12210
12409
|
|
|
12211
12410
|
//
|
|
@@ -13766,7 +13965,7 @@ class Room extends Emitter {
|
|
|
13766
13965
|
logger.info('connecting to room', { extension, audioOnly, room: !!room });
|
|
13767
13966
|
|
|
13768
13967
|
if (!room) {
|
|
13769
|
-
await Wazo.Phone.connect();
|
|
13968
|
+
await Wazo.Phone.connect({ media: constraints });
|
|
13770
13969
|
|
|
13771
13970
|
const withCamera = constraints && !!constraints.video;
|
|
13772
13971
|
|
|
@@ -14211,7 +14410,7 @@ class Room extends Emitter {
|
|
|
14211
14410
|
const participant = this._getParticipantFromCallId(status.callId);
|
|
14212
14411
|
|
|
14213
14412
|
if (participant) {
|
|
14214
|
-
// we're
|
|
14413
|
+
// we're receiving, so no need to broadcast
|
|
14215
14414
|
participant.updateStatus(status, false);
|
|
14216
14415
|
}
|
|
14217
14416
|
break;
|