@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
|
@@ -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 ) =>
|
|
@@ -5903,6 +6043,24 @@ const fixSdp = (sdp , candidates , forcePort = true)
|
|
|
5903
6043
|
return fixed;
|
|
5904
6044
|
};
|
|
5905
6045
|
|
|
6046
|
+
const addIcesInAllBundles = (sdp ) => {
|
|
6047
|
+
const parsedSdp = sdpParser.parse(sdp);
|
|
6048
|
+
|
|
6049
|
+
const mediaWithCandidate = parsedSdp.media.find(media => !!media.candidates);
|
|
6050
|
+
if (!mediaWithCandidate) {
|
|
6051
|
+
return sdp;
|
|
6052
|
+
}
|
|
6053
|
+
|
|
6054
|
+
const { candidates } = mediaWithCandidate;
|
|
6055
|
+
|
|
6056
|
+
parsedSdp.media = parsedSdp.media.map(media => ({
|
|
6057
|
+
...media,
|
|
6058
|
+
candidates: media.candidates || candidates,
|
|
6059
|
+
}));
|
|
6060
|
+
|
|
6061
|
+
return sdpParser.write(parsedSdp);
|
|
6062
|
+
};
|
|
6063
|
+
|
|
5906
6064
|
/* global RTCSessionDescriptionInit, navigator */
|
|
5907
6065
|
|
|
5908
6066
|
const wazoLogger = IssueReporter$1 ? IssueReporter$1.loggerFor('webrtc-sdh') : console;
|
|
@@ -6032,7 +6190,10 @@ class WazoSessionDescriptionHandler extends SessionDescriptionHandler {
|
|
|
6032
6190
|
|
|
6033
6191
|
// Check if we got ICEs
|
|
6034
6192
|
if (sdp.indexOf('a=candidate') !== -1) {
|
|
6035
|
-
return
|
|
6193
|
+
return {
|
|
6194
|
+
type: description.type,
|
|
6195
|
+
sdp: addIcesInAllBundles(sdp),
|
|
6196
|
+
};
|
|
6036
6197
|
}
|
|
6037
6198
|
|
|
6038
6199
|
wazoLogger.info('No ICE candidates found in SDP, fixing it with gathered ices', this.gatheredCandidates);
|
|
@@ -7492,7 +7653,7 @@ class WebRTCClient extends Emitter {
|
|
|
7492
7653
|
});
|
|
7493
7654
|
}
|
|
7494
7655
|
|
|
7495
|
-
changeAudioInputDevice(id , session , force ) {
|
|
7656
|
+
async changeAudioInputDevice(id , session , force ) {
|
|
7496
7657
|
const currentId = this.getAudioDeviceId();
|
|
7497
7658
|
logger$9.info('setting audio input device', { id, currentId, session: !!session });
|
|
7498
7659
|
|
|
@@ -7500,33 +7661,50 @@ class WebRTCClient extends Emitter {
|
|
|
7500
7661
|
return null;
|
|
7501
7662
|
}
|
|
7502
7663
|
|
|
7664
|
+
// in order to handle an audio track change for default devices
|
|
7665
|
+
// we need the actual id of the device (not 'default')
|
|
7666
|
+
let deviceId = id;
|
|
7667
|
+
if (id === 'default' && navigator.mediaDevices) {
|
|
7668
|
+
const devices = await navigator.mediaDevices.enumerateDevices();
|
|
7669
|
+
const defaultDevice = devices.find(device => device.deviceId === 'default');
|
|
7670
|
+
if (defaultDevice) {
|
|
7671
|
+
const deviceLabel = defaultDevice.label.replace('Default - ', '');
|
|
7672
|
+
const targetDevice = devices.find(device => device.label === deviceLabel);
|
|
7673
|
+
if (targetDevice) {
|
|
7674
|
+
deviceId = targetDevice.deviceId;
|
|
7675
|
+
if (!force && deviceId === currentId) {
|
|
7676
|
+
return null;
|
|
7677
|
+
}
|
|
7678
|
+
}
|
|
7679
|
+
}
|
|
7680
|
+
}
|
|
7681
|
+
|
|
7503
7682
|
// let's update the local audio value
|
|
7504
7683
|
if (this.audio) {
|
|
7505
7684
|
this.audio = {
|
|
7506
7685
|
deviceId: {
|
|
7507
|
-
exact:
|
|
7686
|
+
exact: deviceId,
|
|
7508
7687
|
},
|
|
7509
7688
|
};
|
|
7510
7689
|
}
|
|
7511
7690
|
|
|
7512
|
-
if (session) {
|
|
7691
|
+
if (session && navigator.mediaDevices) {
|
|
7513
7692
|
const sdh = session.sessionDescriptionHandler;
|
|
7514
7693
|
const pc = sdh.peerConnection;
|
|
7515
7694
|
|
|
7516
|
-
|
|
7517
|
-
|
|
7518
|
-
|
|
7519
|
-
|
|
7695
|
+
const constraints = { audio: { deviceId: { exact: deviceId } } };
|
|
7696
|
+
const stream = await navigator.mediaDevices.getUserMedia(constraints);
|
|
7697
|
+
const audioTrack = stream.getAudioTracks()[0];
|
|
7698
|
+
const sender = pc && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
|
|
7520
7699
|
|
|
7521
|
-
|
|
7522
|
-
|
|
7523
|
-
|
|
7524
|
-
}
|
|
7525
|
-
sender.replaceTrack(audioTrack);
|
|
7700
|
+
if (sender) {
|
|
7701
|
+
if (sender.track) {
|
|
7702
|
+
audioTrack.enabled = sender.track.enabled;
|
|
7526
7703
|
}
|
|
7704
|
+
sender.replaceTrack(audioTrack);
|
|
7705
|
+
}
|
|
7527
7706
|
|
|
7528
|
-
|
|
7529
|
-
});
|
|
7707
|
+
return stream;
|
|
7530
7708
|
}
|
|
7531
7709
|
}
|
|
7532
7710
|
|
|
@@ -7546,14 +7724,14 @@ class WebRTCClient extends Emitter {
|
|
|
7546
7724
|
return null;
|
|
7547
7725
|
}
|
|
7548
7726
|
|
|
7549
|
-
// let's
|
|
7550
|
-
|
|
7551
|
-
|
|
7552
|
-
|
|
7553
|
-
|
|
7554
|
-
|
|
7555
|
-
}
|
|
7556
|
-
}
|
|
7727
|
+
// let's make sure we don't lose other video constraints settings -- width, height, frameRate...
|
|
7728
|
+
const videoObject = typeof this.video === 'object' ? this.video : {};
|
|
7729
|
+
this.video = {
|
|
7730
|
+
...videoObject,
|
|
7731
|
+
deviceId: {
|
|
7732
|
+
exact: id,
|
|
7733
|
+
},
|
|
7734
|
+
};
|
|
7557
7735
|
}
|
|
7558
7736
|
|
|
7559
7737
|
changeSessionVideoInputDevice(id , session ) {
|
|
@@ -9155,9 +9333,7 @@ class WebRTCPhone extends Emitter {
|
|
|
9155
9333
|
|
|
9156
9334
|
try {
|
|
9157
9335
|
if (this.currentScreenShare.stream) {
|
|
9158
|
-
this.currentScreenShare.stream.getTracks()
|
|
9159
|
-
.filter(track => track.kind === 'video')
|
|
9160
|
-
.forEach(track => track.stop());
|
|
9336
|
+
this.currentScreenShare.stream.getTracks().forEach(track => track.stop());
|
|
9161
9337
|
}
|
|
9162
9338
|
|
|
9163
9339
|
if (restoreLocalStream) {
|
|
@@ -10948,6 +11124,7 @@ const AGENT_UNPAUSED = 'agent_unpaused';
|
|
|
10948
11124
|
const CONFERENCE_ADHOC_PARTICIPANT_LEFT = 'conference_adhoc_participant_left';
|
|
10949
11125
|
const CONFERENCE_ADHOC_DELETED = 'conference_adhoc_deleted';
|
|
10950
11126
|
const MEETING_USER_PROGRESS = 'meeting_user_progress';
|
|
11127
|
+
const MEETING_USER_GUEST_AUTHORIZATION_CREATED = 'meeting_user_guest_authorization_created';
|
|
10951
11128
|
|
|
10952
11129
|
const BLACKLIST_EVENTS = [
|
|
10953
11130
|
CHAT_MESSAGE_SENT,
|
|
@@ -11299,6 +11476,7 @@ WebSocketClient.eventLists = [
|
|
|
11299
11476
|
CONFERENCE_ADHOC_PARTICIPANT_LEFT,
|
|
11300
11477
|
CONFERENCE_ADHOC_DELETED,
|
|
11301
11478
|
MEETING_USER_PROGRESS,
|
|
11479
|
+
MEETING_USER_GUEST_AUTHORIZATION_CREATED,
|
|
11302
11480
|
];
|
|
11303
11481
|
|
|
11304
11482
|
var WebSocketClient$1 = /*#__PURE__*/Object.freeze({
|
|
@@ -11370,6 +11548,7 @@ var WebSocketClient$1 = /*#__PURE__*/Object.freeze({
|
|
|
11370
11548
|
CONFERENCE_ADHOC_PARTICIPANT_LEFT: CONFERENCE_ADHOC_PARTICIPANT_LEFT,
|
|
11371
11549
|
CONFERENCE_ADHOC_DELETED: CONFERENCE_ADHOC_DELETED,
|
|
11372
11550
|
MEETING_USER_PROGRESS: MEETING_USER_PROGRESS,
|
|
11551
|
+
MEETING_USER_GUEST_AUTHORIZATION_CREATED: MEETING_USER_GUEST_AUTHORIZATION_CREATED,
|
|
11373
11552
|
HEARTBEAT_ENGINE_VERSION: HEARTBEAT_ENGINE_VERSION,
|
|
11374
11553
|
'default': WebSocketClient
|
|
11375
11554
|
});
|
|
@@ -11474,6 +11653,7 @@ class Participant extends Emitter {
|
|
|
11474
11653
|
|
|
11475
11654
|
|
|
11476
11655
|
|
|
11656
|
+
|
|
11477
11657
|
|
|
11478
11658
|
|
|
11479
11659
|
|
|
@@ -11491,6 +11671,7 @@ class Participant extends Emitter {
|
|
|
11491
11671
|
|
|
11492
11672
|
|
|
11493
11673
|
|
|
11674
|
+
|
|
11494
11675
|
|
|
11495
11676
|
/**
|
|
11496
11677
|
* @param room Room The room where the participant is
|
|
@@ -11514,6 +11695,7 @@ class Participant extends Emitter {
|
|
|
11514
11695
|
this.screensharing = false;
|
|
11515
11696
|
this.isOnHold = false;
|
|
11516
11697
|
this.extra = extra;
|
|
11698
|
+
this.banned = false;
|
|
11517
11699
|
|
|
11518
11700
|
this.ON_UPDATED = 'participant/ON_UPDATED';
|
|
11519
11701
|
this.ON_START_TALKING = 'participant/ON_START_TALKING';
|
|
@@ -11530,6 +11712,7 @@ class Participant extends Emitter {
|
|
|
11530
11712
|
this.ON_EXTRA_CHANGE = 'participant/ON_EXTRA_CHANGE';
|
|
11531
11713
|
this.ON_HOLD = 'participant/ON_HOLD';
|
|
11532
11714
|
this.ON_RESUME = 'participant/ON_RESUME';
|
|
11715
|
+
this.ON_BAN = 'participant/ON_BAN';
|
|
11533
11716
|
}
|
|
11534
11717
|
|
|
11535
11718
|
triggerEvent(name , ...args ) {
|
|
@@ -11570,6 +11753,10 @@ class Participant extends Emitter {
|
|
|
11570
11753
|
status.extra = this.extra;
|
|
11571
11754
|
break;
|
|
11572
11755
|
}
|
|
11756
|
+
case this.ON_BAN: {
|
|
11757
|
+
status.banned = true;
|
|
11758
|
+
break;
|
|
11759
|
+
}
|
|
11573
11760
|
}
|
|
11574
11761
|
|
|
11575
11762
|
if (broadcast) {
|
|
@@ -11672,6 +11859,11 @@ class Participant extends Emitter {
|
|
|
11672
11859
|
this.triggerUpdate(this.ON_RESUME, broadcast);
|
|
11673
11860
|
}
|
|
11674
11861
|
|
|
11862
|
+
onBan(broadcast = true) {
|
|
11863
|
+
this.banned = true;
|
|
11864
|
+
this.triggerUpdate(this.ON_BAN, broadcast);
|
|
11865
|
+
}
|
|
11866
|
+
|
|
11675
11867
|
getStatus() {
|
|
11676
11868
|
return {
|
|
11677
11869
|
callId: this.callId,
|
|
@@ -11718,6 +11910,10 @@ class Participant extends Emitter {
|
|
|
11718
11910
|
}
|
|
11719
11911
|
}
|
|
11720
11912
|
|
|
11913
|
+
if (status.banned) {
|
|
11914
|
+
this.onBan(false);
|
|
11915
|
+
}
|
|
11916
|
+
|
|
11721
11917
|
// Poor man's object comparison
|
|
11722
11918
|
if (typeof status.extra !== 'undefined' && JSON.stringify(this.extra) !== JSON.stringify(status.extra)) {
|
|
11723
11919
|
this.extra = { ...this.extra, ...status.extra };
|
|
@@ -11745,6 +11941,28 @@ class Participant extends Emitter {
|
|
|
11745
11941
|
this.streams = streams;
|
|
11746
11942
|
this.videoStreams = streams;
|
|
11747
11943
|
}
|
|
11944
|
+
|
|
11945
|
+
async ban(apiRequestDelay = null) {
|
|
11946
|
+
const { meetingUuid } = this.room;
|
|
11947
|
+
if (!meetingUuid) {
|
|
11948
|
+
throw new Error('Attempting to ban a participant without a `meetingUuid`');
|
|
11949
|
+
}
|
|
11950
|
+
|
|
11951
|
+
// this notifies all that someone is being banned
|
|
11952
|
+
this.onBan(true);
|
|
11953
|
+
|
|
11954
|
+
// this allows to delay the actual ban, in order for the banned participant as well as others to react to the situation
|
|
11955
|
+
if (apiRequestDelay) {
|
|
11956
|
+
await this.delay(apiRequestDelay);
|
|
11957
|
+
}
|
|
11958
|
+
|
|
11959
|
+
// proceed with the actual kick
|
|
11960
|
+
return getApiClient().calld.banMeetingParticipant(meetingUuid, this.callId);
|
|
11961
|
+
}
|
|
11962
|
+
|
|
11963
|
+
async delay(ms ) {
|
|
11964
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
11965
|
+
}
|
|
11748
11966
|
}
|
|
11749
11967
|
|
|
11750
11968
|
//
|
|
@@ -11897,7 +12115,7 @@ class Room$1 extends Emitter {
|
|
|
11897
12115
|
logger$3.info('connecting to room', { extension, audioOnly, room: !!room });
|
|
11898
12116
|
|
|
11899
12117
|
if (!room) {
|
|
11900
|
-
await Wazo.Phone.connect();
|
|
12118
|
+
await Wazo.Phone.connect({ media: constraints });
|
|
11901
12119
|
|
|
11902
12120
|
const withCamera = constraints && !!constraints.video;
|
|
11903
12121
|
|
|
@@ -12342,7 +12560,7 @@ class Room$1 extends Emitter {
|
|
|
12342
12560
|
const participant = this._getParticipantFromCallId(status.callId);
|
|
12343
12561
|
|
|
12344
12562
|
if (participant) {
|
|
12345
|
-
// we're
|
|
12563
|
+
// we're receiving, so no need to broadcast
|
|
12346
12564
|
participant.updateStatus(status, false);
|
|
12347
12565
|
}
|
|
12348
12566
|
break;
|
|
@@ -12609,7 +12827,7 @@ class SipRoom extends Room$1 {
|
|
|
12609
12827
|
logger$2.info('connecting to sip room', { extension, audioOnly, room: !!room });
|
|
12610
12828
|
|
|
12611
12829
|
if (!room) {
|
|
12612
|
-
await Wazo.Phone.connect();
|
|
12830
|
+
await Wazo.Phone.connect({ media: constraints });
|
|
12613
12831
|
|
|
12614
12832
|
const withCamera = constraints && !!constraints.video;
|
|
12615
12833
|
|