@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 ) =>
|
|
@@ -5913,6 +6053,24 @@ const fixSdp = (sdp , candidates , forcePort = true)
|
|
|
5913
6053
|
return fixed;
|
|
5914
6054
|
};
|
|
5915
6055
|
|
|
6056
|
+
const addIcesInAllBundles = (sdp ) => {
|
|
6057
|
+
const parsedSdp = sdpParser__default['default'].parse(sdp);
|
|
6058
|
+
|
|
6059
|
+
const mediaWithCandidate = parsedSdp.media.find(media => !!media.candidates);
|
|
6060
|
+
if (!mediaWithCandidate) {
|
|
6061
|
+
return sdp;
|
|
6062
|
+
}
|
|
6063
|
+
|
|
6064
|
+
const { candidates } = mediaWithCandidate;
|
|
6065
|
+
|
|
6066
|
+
parsedSdp.media = parsedSdp.media.map(media => ({
|
|
6067
|
+
...media,
|
|
6068
|
+
candidates: media.candidates || candidates,
|
|
6069
|
+
}));
|
|
6070
|
+
|
|
6071
|
+
return sdpParser__default['default'].write(parsedSdp);
|
|
6072
|
+
};
|
|
6073
|
+
|
|
5916
6074
|
/* global RTCSessionDescriptionInit, navigator */
|
|
5917
6075
|
|
|
5918
6076
|
const wazoLogger = IssueReporter$1 ? IssueReporter$1.loggerFor('webrtc-sdh') : console;
|
|
@@ -6042,7 +6200,10 @@ class WazoSessionDescriptionHandler extends sessionDescriptionHandler.SessionDes
|
|
|
6042
6200
|
|
|
6043
6201
|
// Check if we got ICEs
|
|
6044
6202
|
if (sdp.indexOf('a=candidate') !== -1) {
|
|
6045
|
-
return
|
|
6203
|
+
return {
|
|
6204
|
+
type: description.type,
|
|
6205
|
+
sdp: addIcesInAllBundles(sdp),
|
|
6206
|
+
};
|
|
6046
6207
|
}
|
|
6047
6208
|
|
|
6048
6209
|
wazoLogger.info('No ICE candidates found in SDP, fixing it with gathered ices', this.gatheredCandidates);
|
|
@@ -7502,7 +7663,7 @@ class WebRTCClient extends Emitter {
|
|
|
7502
7663
|
});
|
|
7503
7664
|
}
|
|
7504
7665
|
|
|
7505
|
-
changeAudioInputDevice(id , session , force ) {
|
|
7666
|
+
async changeAudioInputDevice(id , session , force ) {
|
|
7506
7667
|
const currentId = this.getAudioDeviceId();
|
|
7507
7668
|
logger$9.info('setting audio input device', { id, currentId, session: !!session });
|
|
7508
7669
|
|
|
@@ -7510,33 +7671,50 @@ class WebRTCClient extends Emitter {
|
|
|
7510
7671
|
return null;
|
|
7511
7672
|
}
|
|
7512
7673
|
|
|
7674
|
+
// in order to handle an audio track change for default devices
|
|
7675
|
+
// we need the actual id of the device (not 'default')
|
|
7676
|
+
let deviceId = id;
|
|
7677
|
+
if (id === 'default' && navigator.mediaDevices) {
|
|
7678
|
+
const devices = await navigator.mediaDevices.enumerateDevices();
|
|
7679
|
+
const defaultDevice = devices.find(device => device.deviceId === 'default');
|
|
7680
|
+
if (defaultDevice) {
|
|
7681
|
+
const deviceLabel = defaultDevice.label.replace('Default - ', '');
|
|
7682
|
+
const targetDevice = devices.find(device => device.label === deviceLabel);
|
|
7683
|
+
if (targetDevice) {
|
|
7684
|
+
deviceId = targetDevice.deviceId;
|
|
7685
|
+
if (!force && deviceId === currentId) {
|
|
7686
|
+
return null;
|
|
7687
|
+
}
|
|
7688
|
+
}
|
|
7689
|
+
}
|
|
7690
|
+
}
|
|
7691
|
+
|
|
7513
7692
|
// let's update the local audio value
|
|
7514
7693
|
if (this.audio) {
|
|
7515
7694
|
this.audio = {
|
|
7516
7695
|
deviceId: {
|
|
7517
|
-
exact:
|
|
7696
|
+
exact: deviceId,
|
|
7518
7697
|
},
|
|
7519
7698
|
};
|
|
7520
7699
|
}
|
|
7521
7700
|
|
|
7522
|
-
if (session) {
|
|
7701
|
+
if (session && navigator.mediaDevices) {
|
|
7523
7702
|
const sdh = session.sessionDescriptionHandler;
|
|
7524
7703
|
const pc = sdh.peerConnection;
|
|
7525
7704
|
|
|
7526
|
-
|
|
7527
|
-
|
|
7528
|
-
|
|
7529
|
-
|
|
7705
|
+
const constraints = { audio: { deviceId: { exact: deviceId } } };
|
|
7706
|
+
const stream = await navigator.mediaDevices.getUserMedia(constraints);
|
|
7707
|
+
const audioTrack = stream.getAudioTracks()[0];
|
|
7708
|
+
const sender = pc && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
|
|
7530
7709
|
|
|
7531
|
-
|
|
7532
|
-
|
|
7533
|
-
|
|
7534
|
-
}
|
|
7535
|
-
sender.replaceTrack(audioTrack);
|
|
7710
|
+
if (sender) {
|
|
7711
|
+
if (sender.track) {
|
|
7712
|
+
audioTrack.enabled = sender.track.enabled;
|
|
7536
7713
|
}
|
|
7714
|
+
sender.replaceTrack(audioTrack);
|
|
7715
|
+
}
|
|
7537
7716
|
|
|
7538
|
-
|
|
7539
|
-
});
|
|
7717
|
+
return stream;
|
|
7540
7718
|
}
|
|
7541
7719
|
}
|
|
7542
7720
|
|
|
@@ -7556,14 +7734,14 @@ class WebRTCClient extends Emitter {
|
|
|
7556
7734
|
return null;
|
|
7557
7735
|
}
|
|
7558
7736
|
|
|
7559
|
-
// let's
|
|
7560
|
-
|
|
7561
|
-
|
|
7562
|
-
|
|
7563
|
-
|
|
7564
|
-
|
|
7565
|
-
}
|
|
7566
|
-
}
|
|
7737
|
+
// let's make sure we don't lose other video constraints settings -- width, height, frameRate...
|
|
7738
|
+
const videoObject = typeof this.video === 'object' ? this.video : {};
|
|
7739
|
+
this.video = {
|
|
7740
|
+
...videoObject,
|
|
7741
|
+
deviceId: {
|
|
7742
|
+
exact: id,
|
|
7743
|
+
},
|
|
7744
|
+
};
|
|
7567
7745
|
}
|
|
7568
7746
|
|
|
7569
7747
|
changeSessionVideoInputDevice(id , session ) {
|
|
@@ -9165,9 +9343,7 @@ class WebRTCPhone extends Emitter {
|
|
|
9165
9343
|
|
|
9166
9344
|
try {
|
|
9167
9345
|
if (this.currentScreenShare.stream) {
|
|
9168
|
-
this.currentScreenShare.stream.getTracks()
|
|
9169
|
-
.filter(track => track.kind === 'video')
|
|
9170
|
-
.forEach(track => track.stop());
|
|
9346
|
+
this.currentScreenShare.stream.getTracks().forEach(track => track.stop());
|
|
9171
9347
|
}
|
|
9172
9348
|
|
|
9173
9349
|
if (restoreLocalStream) {
|
|
@@ -10958,6 +11134,7 @@ const AGENT_UNPAUSED = 'agent_unpaused';
|
|
|
10958
11134
|
const CONFERENCE_ADHOC_PARTICIPANT_LEFT = 'conference_adhoc_participant_left';
|
|
10959
11135
|
const CONFERENCE_ADHOC_DELETED = 'conference_adhoc_deleted';
|
|
10960
11136
|
const MEETING_USER_PROGRESS = 'meeting_user_progress';
|
|
11137
|
+
const MEETING_USER_GUEST_AUTHORIZATION_CREATED = 'meeting_user_guest_authorization_created';
|
|
10961
11138
|
|
|
10962
11139
|
const BLACKLIST_EVENTS = [
|
|
10963
11140
|
CHAT_MESSAGE_SENT,
|
|
@@ -11309,6 +11486,7 @@ WebSocketClient.eventLists = [
|
|
|
11309
11486
|
CONFERENCE_ADHOC_PARTICIPANT_LEFT,
|
|
11310
11487
|
CONFERENCE_ADHOC_DELETED,
|
|
11311
11488
|
MEETING_USER_PROGRESS,
|
|
11489
|
+
MEETING_USER_GUEST_AUTHORIZATION_CREATED,
|
|
11312
11490
|
];
|
|
11313
11491
|
|
|
11314
11492
|
var WebSocketClient$1 = /*#__PURE__*/Object.freeze({
|
|
@@ -11380,6 +11558,7 @@ var WebSocketClient$1 = /*#__PURE__*/Object.freeze({
|
|
|
11380
11558
|
CONFERENCE_ADHOC_PARTICIPANT_LEFT: CONFERENCE_ADHOC_PARTICIPANT_LEFT,
|
|
11381
11559
|
CONFERENCE_ADHOC_DELETED: CONFERENCE_ADHOC_DELETED,
|
|
11382
11560
|
MEETING_USER_PROGRESS: MEETING_USER_PROGRESS,
|
|
11561
|
+
MEETING_USER_GUEST_AUTHORIZATION_CREATED: MEETING_USER_GUEST_AUTHORIZATION_CREATED,
|
|
11383
11562
|
HEARTBEAT_ENGINE_VERSION: HEARTBEAT_ENGINE_VERSION,
|
|
11384
11563
|
'default': WebSocketClient
|
|
11385
11564
|
});
|
|
@@ -11484,6 +11663,7 @@ class Participant extends Emitter {
|
|
|
11484
11663
|
|
|
11485
11664
|
|
|
11486
11665
|
|
|
11666
|
+
|
|
11487
11667
|
|
|
11488
11668
|
|
|
11489
11669
|
|
|
@@ -11501,6 +11681,7 @@ class Participant extends Emitter {
|
|
|
11501
11681
|
|
|
11502
11682
|
|
|
11503
11683
|
|
|
11684
|
+
|
|
11504
11685
|
|
|
11505
11686
|
/**
|
|
11506
11687
|
* @param room Room The room where the participant is
|
|
@@ -11524,6 +11705,7 @@ class Participant extends Emitter {
|
|
|
11524
11705
|
this.screensharing = false;
|
|
11525
11706
|
this.isOnHold = false;
|
|
11526
11707
|
this.extra = extra;
|
|
11708
|
+
this.banned = false;
|
|
11527
11709
|
|
|
11528
11710
|
this.ON_UPDATED = 'participant/ON_UPDATED';
|
|
11529
11711
|
this.ON_START_TALKING = 'participant/ON_START_TALKING';
|
|
@@ -11540,6 +11722,7 @@ class Participant extends Emitter {
|
|
|
11540
11722
|
this.ON_EXTRA_CHANGE = 'participant/ON_EXTRA_CHANGE';
|
|
11541
11723
|
this.ON_HOLD = 'participant/ON_HOLD';
|
|
11542
11724
|
this.ON_RESUME = 'participant/ON_RESUME';
|
|
11725
|
+
this.ON_BAN = 'participant/ON_BAN';
|
|
11543
11726
|
}
|
|
11544
11727
|
|
|
11545
11728
|
triggerEvent(name , ...args ) {
|
|
@@ -11580,6 +11763,10 @@ class Participant extends Emitter {
|
|
|
11580
11763
|
status.extra = this.extra;
|
|
11581
11764
|
break;
|
|
11582
11765
|
}
|
|
11766
|
+
case this.ON_BAN: {
|
|
11767
|
+
status.banned = true;
|
|
11768
|
+
break;
|
|
11769
|
+
}
|
|
11583
11770
|
}
|
|
11584
11771
|
|
|
11585
11772
|
if (broadcast) {
|
|
@@ -11682,6 +11869,11 @@ class Participant extends Emitter {
|
|
|
11682
11869
|
this.triggerUpdate(this.ON_RESUME, broadcast);
|
|
11683
11870
|
}
|
|
11684
11871
|
|
|
11872
|
+
onBan(broadcast = true) {
|
|
11873
|
+
this.banned = true;
|
|
11874
|
+
this.triggerUpdate(this.ON_BAN, broadcast);
|
|
11875
|
+
}
|
|
11876
|
+
|
|
11685
11877
|
getStatus() {
|
|
11686
11878
|
return {
|
|
11687
11879
|
callId: this.callId,
|
|
@@ -11728,6 +11920,10 @@ class Participant extends Emitter {
|
|
|
11728
11920
|
}
|
|
11729
11921
|
}
|
|
11730
11922
|
|
|
11923
|
+
if (status.banned) {
|
|
11924
|
+
this.onBan(false);
|
|
11925
|
+
}
|
|
11926
|
+
|
|
11731
11927
|
// Poor man's object comparison
|
|
11732
11928
|
if (typeof status.extra !== 'undefined' && JSON.stringify(this.extra) !== JSON.stringify(status.extra)) {
|
|
11733
11929
|
this.extra = { ...this.extra, ...status.extra };
|
|
@@ -11755,6 +11951,28 @@ class Participant extends Emitter {
|
|
|
11755
11951
|
this.streams = streams;
|
|
11756
11952
|
this.videoStreams = streams;
|
|
11757
11953
|
}
|
|
11954
|
+
|
|
11955
|
+
async ban(apiRequestDelay = null) {
|
|
11956
|
+
const { meetingUuid } = this.room;
|
|
11957
|
+
if (!meetingUuid) {
|
|
11958
|
+
throw new Error('Attempting to ban a participant without a `meetingUuid`');
|
|
11959
|
+
}
|
|
11960
|
+
|
|
11961
|
+
// this notifies all that someone is being banned
|
|
11962
|
+
this.onBan(true);
|
|
11963
|
+
|
|
11964
|
+
// this allows to delay the actual ban, in order for the banned participant as well as others to react to the situation
|
|
11965
|
+
if (apiRequestDelay) {
|
|
11966
|
+
await this.delay(apiRequestDelay);
|
|
11967
|
+
}
|
|
11968
|
+
|
|
11969
|
+
// proceed with the actual kick
|
|
11970
|
+
return getApiClient().calld.banMeetingParticipant(meetingUuid, this.callId);
|
|
11971
|
+
}
|
|
11972
|
+
|
|
11973
|
+
async delay(ms ) {
|
|
11974
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
11975
|
+
}
|
|
11758
11976
|
}
|
|
11759
11977
|
|
|
11760
11978
|
//
|
|
@@ -11907,7 +12125,7 @@ class Room$1 extends Emitter {
|
|
|
11907
12125
|
logger$3.info('connecting to room', { extension, audioOnly, room: !!room });
|
|
11908
12126
|
|
|
11909
12127
|
if (!room) {
|
|
11910
|
-
await Wazo.Phone.connect();
|
|
12128
|
+
await Wazo.Phone.connect({ media: constraints });
|
|
11911
12129
|
|
|
11912
12130
|
const withCamera = constraints && !!constraints.video;
|
|
11913
12131
|
|
|
@@ -12352,7 +12570,7 @@ class Room$1 extends Emitter {
|
|
|
12352
12570
|
const participant = this._getParticipantFromCallId(status.callId);
|
|
12353
12571
|
|
|
12354
12572
|
if (participant) {
|
|
12355
|
-
// we're
|
|
12573
|
+
// we're receiving, so no need to broadcast
|
|
12356
12574
|
participant.updateStatus(status, false);
|
|
12357
12575
|
}
|
|
12358
12576
|
break;
|
|
@@ -12619,7 +12837,7 @@ class SipRoom extends Room$1 {
|
|
|
12619
12837
|
logger$2.info('connecting to sip room', { extension, audioOnly, room: !!room });
|
|
12620
12838
|
|
|
12621
12839
|
if (!room) {
|
|
12622
|
-
await Wazo.Phone.connect();
|
|
12840
|
+
await Wazo.Phone.connect({ media: constraints });
|
|
12623
12841
|
|
|
12624
12842
|
const withCamera = constraints && !!constraints.video;
|
|
12625
12843
|
|