@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
package/lib/index.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
|
//
|
|
@@ -5169,6 +5301,14 @@ var calldMethods = (client , baseUrl ) => ({
|
|
|
5169
5301
|
getMeetingParticipantsAsUser: async (meetingUuid ) =>
|
|
5170
5302
|
client.get(`${baseUrl}/users/me/meetings/${meetingUuid}/participants`),
|
|
5171
5303
|
|
|
5304
|
+
banMeetingParticipant: (meetingUuid , participantUuid ) =>
|
|
5305
|
+
client.delete(
|
|
5306
|
+
`${baseUrl}/users/me/meetings/${meetingUuid}/participants/${participantUuid}`,
|
|
5307
|
+
null,
|
|
5308
|
+
null,
|
|
5309
|
+
ApiRequester.successResponseParser,
|
|
5310
|
+
),
|
|
5311
|
+
|
|
5172
5312
|
listTrunks: () => client.get(`${baseUrl}/trunks`),
|
|
5173
5313
|
|
|
5174
5314
|
mute: (callId ) =>
|
|
@@ -5736,6 +5876,24 @@ const fixSdp = (sdp , candidates , forcePort = true)
|
|
|
5736
5876
|
return fixed;
|
|
5737
5877
|
};
|
|
5738
5878
|
|
|
5879
|
+
const addIcesInAllBundles = (sdp ) => {
|
|
5880
|
+
const parsedSdp = sdpParser__default['default'].parse(sdp);
|
|
5881
|
+
|
|
5882
|
+
const mediaWithCandidate = parsedSdp.media.find(media => !!media.candidates);
|
|
5883
|
+
if (!mediaWithCandidate) {
|
|
5884
|
+
return sdp;
|
|
5885
|
+
}
|
|
5886
|
+
|
|
5887
|
+
const { candidates } = mediaWithCandidate;
|
|
5888
|
+
|
|
5889
|
+
parsedSdp.media = parsedSdp.media.map(media => ({
|
|
5890
|
+
...media,
|
|
5891
|
+
candidates: media.candidates || candidates,
|
|
5892
|
+
}));
|
|
5893
|
+
|
|
5894
|
+
return sdpParser__default['default'].write(parsedSdp);
|
|
5895
|
+
};
|
|
5896
|
+
|
|
5739
5897
|
/* global RTCSessionDescriptionInit, navigator */
|
|
5740
5898
|
|
|
5741
5899
|
const wazoLogger = IssueReporter$1 ? IssueReporter$1.loggerFor('webrtc-sdh') : console;
|
|
@@ -5865,7 +6023,10 @@ class WazoSessionDescriptionHandler extends sessionDescriptionHandler.SessionDes
|
|
|
5865
6023
|
|
|
5866
6024
|
// Check if we got ICEs
|
|
5867
6025
|
if (sdp.indexOf('a=candidate') !== -1) {
|
|
5868
|
-
return
|
|
6026
|
+
return {
|
|
6027
|
+
type: description.type,
|
|
6028
|
+
sdp: addIcesInAllBundles(sdp),
|
|
6029
|
+
};
|
|
5869
6030
|
}
|
|
5870
6031
|
|
|
5871
6032
|
wazoLogger.info('No ICE candidates found in SDP, fixing it with gathered ices', this.gatheredCandidates);
|
|
@@ -7325,7 +7486,7 @@ class WebRTCClient extends Emitter {
|
|
|
7325
7486
|
});
|
|
7326
7487
|
}
|
|
7327
7488
|
|
|
7328
|
-
changeAudioInputDevice(id , session , force ) {
|
|
7489
|
+
async changeAudioInputDevice(id , session , force ) {
|
|
7329
7490
|
const currentId = this.getAudioDeviceId();
|
|
7330
7491
|
logger$9.info('setting audio input device', { id, currentId, session: !!session });
|
|
7331
7492
|
|
|
@@ -7333,33 +7494,50 @@ class WebRTCClient extends Emitter {
|
|
|
7333
7494
|
return null;
|
|
7334
7495
|
}
|
|
7335
7496
|
|
|
7497
|
+
// in order to handle an audio track change for default devices
|
|
7498
|
+
// we need the actual id of the device (not 'default')
|
|
7499
|
+
let deviceId = id;
|
|
7500
|
+
if (id === 'default' && navigator.mediaDevices) {
|
|
7501
|
+
const devices = await navigator.mediaDevices.enumerateDevices();
|
|
7502
|
+
const defaultDevice = devices.find(device => device.deviceId === 'default');
|
|
7503
|
+
if (defaultDevice) {
|
|
7504
|
+
const deviceLabel = defaultDevice.label.replace('Default - ', '');
|
|
7505
|
+
const targetDevice = devices.find(device => device.label === deviceLabel);
|
|
7506
|
+
if (targetDevice) {
|
|
7507
|
+
deviceId = targetDevice.deviceId;
|
|
7508
|
+
if (!force && deviceId === currentId) {
|
|
7509
|
+
return null;
|
|
7510
|
+
}
|
|
7511
|
+
}
|
|
7512
|
+
}
|
|
7513
|
+
}
|
|
7514
|
+
|
|
7336
7515
|
// let's update the local audio value
|
|
7337
7516
|
if (this.audio) {
|
|
7338
7517
|
this.audio = {
|
|
7339
7518
|
deviceId: {
|
|
7340
|
-
exact:
|
|
7519
|
+
exact: deviceId,
|
|
7341
7520
|
},
|
|
7342
7521
|
};
|
|
7343
7522
|
}
|
|
7344
7523
|
|
|
7345
|
-
if (session) {
|
|
7524
|
+
if (session && navigator.mediaDevices) {
|
|
7346
7525
|
const sdh = session.sessionDescriptionHandler;
|
|
7347
7526
|
const pc = sdh.peerConnection;
|
|
7348
7527
|
|
|
7349
|
-
|
|
7350
|
-
|
|
7351
|
-
|
|
7352
|
-
|
|
7528
|
+
const constraints = { audio: { deviceId: { exact: deviceId } } };
|
|
7529
|
+
const stream = await navigator.mediaDevices.getUserMedia(constraints);
|
|
7530
|
+
const audioTrack = stream.getAudioTracks()[0];
|
|
7531
|
+
const sender = pc && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
|
|
7353
7532
|
|
|
7354
|
-
|
|
7355
|
-
|
|
7356
|
-
|
|
7357
|
-
}
|
|
7358
|
-
sender.replaceTrack(audioTrack);
|
|
7533
|
+
if (sender) {
|
|
7534
|
+
if (sender.track) {
|
|
7535
|
+
audioTrack.enabled = sender.track.enabled;
|
|
7359
7536
|
}
|
|
7537
|
+
sender.replaceTrack(audioTrack);
|
|
7538
|
+
}
|
|
7360
7539
|
|
|
7361
|
-
|
|
7362
|
-
});
|
|
7540
|
+
return stream;
|
|
7363
7541
|
}
|
|
7364
7542
|
}
|
|
7365
7543
|
|
|
@@ -7379,14 +7557,14 @@ class WebRTCClient extends Emitter {
|
|
|
7379
7557
|
return null;
|
|
7380
7558
|
}
|
|
7381
7559
|
|
|
7382
|
-
// let's
|
|
7383
|
-
|
|
7384
|
-
|
|
7385
|
-
|
|
7386
|
-
|
|
7387
|
-
|
|
7388
|
-
}
|
|
7389
|
-
}
|
|
7560
|
+
// let's make sure we don't lose other video constraints settings -- width, height, frameRate...
|
|
7561
|
+
const videoObject = typeof this.video === 'object' ? this.video : {};
|
|
7562
|
+
this.video = {
|
|
7563
|
+
...videoObject,
|
|
7564
|
+
deviceId: {
|
|
7565
|
+
exact: id,
|
|
7566
|
+
},
|
|
7567
|
+
};
|
|
7390
7568
|
}
|
|
7391
7569
|
|
|
7392
7570
|
changeSessionVideoInputDevice(id , session ) {
|
|
@@ -8559,6 +8737,7 @@ const AGENT_UNPAUSED = 'agent_unpaused';
|
|
|
8559
8737
|
const CONFERENCE_ADHOC_PARTICIPANT_LEFT = 'conference_adhoc_participant_left';
|
|
8560
8738
|
const CONFERENCE_ADHOC_DELETED = 'conference_adhoc_deleted';
|
|
8561
8739
|
const MEETING_USER_PROGRESS = 'meeting_user_progress';
|
|
8740
|
+
const MEETING_USER_GUEST_AUTHORIZATION_CREATED = 'meeting_user_guest_authorization_created';
|
|
8562
8741
|
|
|
8563
8742
|
const BLACKLIST_EVENTS = [
|
|
8564
8743
|
CHAT_MESSAGE_SENT,
|
|
@@ -8910,6 +9089,7 @@ WebSocketClient.eventLists = [
|
|
|
8910
9089
|
CONFERENCE_ADHOC_PARTICIPANT_LEFT,
|
|
8911
9090
|
CONFERENCE_ADHOC_DELETED,
|
|
8912
9091
|
MEETING_USER_PROGRESS,
|
|
9092
|
+
MEETING_USER_GUEST_AUTHORIZATION_CREATED,
|
|
8913
9093
|
];
|
|
8914
9094
|
|
|
8915
9095
|
var WebSocketClient$1 = /*#__PURE__*/Object.freeze({
|
|
@@ -8981,6 +9161,7 @@ var WebSocketClient$1 = /*#__PURE__*/Object.freeze({
|
|
|
8981
9161
|
CONFERENCE_ADHOC_PARTICIPANT_LEFT: CONFERENCE_ADHOC_PARTICIPANT_LEFT,
|
|
8982
9162
|
CONFERENCE_ADHOC_DELETED: CONFERENCE_ADHOC_DELETED,
|
|
8983
9163
|
MEETING_USER_PROGRESS: MEETING_USER_PROGRESS,
|
|
9164
|
+
MEETING_USER_GUEST_AUTHORIZATION_CREATED: MEETING_USER_GUEST_AUTHORIZATION_CREATED,
|
|
8984
9165
|
HEARTBEAT_ENGINE_VERSION: HEARTBEAT_ENGINE_VERSION,
|
|
8985
9166
|
'default': WebSocketClient
|
|
8986
9167
|
});
|
|
@@ -9889,9 +10070,7 @@ class WebRTCPhone extends Emitter {
|
|
|
9889
10070
|
|
|
9890
10071
|
try {
|
|
9891
10072
|
if (this.currentScreenShare.stream) {
|
|
9892
|
-
this.currentScreenShare.stream.getTracks()
|
|
9893
|
-
.filter(track => track.kind === 'video')
|
|
9894
|
-
.forEach(track => track.stop());
|
|
10073
|
+
this.currentScreenShare.stream.getTracks().forEach(track => track.stop());
|
|
9895
10074
|
}
|
|
9896
10075
|
|
|
9897
10076
|
if (restoreLocalStream) {
|
|
@@ -12761,6 +12940,7 @@ class Participant extends Emitter {
|
|
|
12761
12940
|
|
|
12762
12941
|
|
|
12763
12942
|
|
|
12943
|
+
|
|
12764
12944
|
|
|
12765
12945
|
|
|
12766
12946
|
|
|
@@ -12778,6 +12958,7 @@ class Participant extends Emitter {
|
|
|
12778
12958
|
|
|
12779
12959
|
|
|
12780
12960
|
|
|
12961
|
+
|
|
12781
12962
|
|
|
12782
12963
|
/**
|
|
12783
12964
|
* @param room Room The room where the participant is
|
|
@@ -12801,6 +12982,7 @@ class Participant extends Emitter {
|
|
|
12801
12982
|
this.screensharing = false;
|
|
12802
12983
|
this.isOnHold = false;
|
|
12803
12984
|
this.extra = extra;
|
|
12985
|
+
this.banned = false;
|
|
12804
12986
|
|
|
12805
12987
|
this.ON_UPDATED = 'participant/ON_UPDATED';
|
|
12806
12988
|
this.ON_START_TALKING = 'participant/ON_START_TALKING';
|
|
@@ -12817,6 +12999,7 @@ class Participant extends Emitter {
|
|
|
12817
12999
|
this.ON_EXTRA_CHANGE = 'participant/ON_EXTRA_CHANGE';
|
|
12818
13000
|
this.ON_HOLD = 'participant/ON_HOLD';
|
|
12819
13001
|
this.ON_RESUME = 'participant/ON_RESUME';
|
|
13002
|
+
this.ON_BAN = 'participant/ON_BAN';
|
|
12820
13003
|
}
|
|
12821
13004
|
|
|
12822
13005
|
triggerEvent(name , ...args ) {
|
|
@@ -12857,6 +13040,10 @@ class Participant extends Emitter {
|
|
|
12857
13040
|
status.extra = this.extra;
|
|
12858
13041
|
break;
|
|
12859
13042
|
}
|
|
13043
|
+
case this.ON_BAN: {
|
|
13044
|
+
status.banned = true;
|
|
13045
|
+
break;
|
|
13046
|
+
}
|
|
12860
13047
|
}
|
|
12861
13048
|
|
|
12862
13049
|
if (broadcast) {
|
|
@@ -12959,6 +13146,11 @@ class Participant extends Emitter {
|
|
|
12959
13146
|
this.triggerUpdate(this.ON_RESUME, broadcast);
|
|
12960
13147
|
}
|
|
12961
13148
|
|
|
13149
|
+
onBan(broadcast = true) {
|
|
13150
|
+
this.banned = true;
|
|
13151
|
+
this.triggerUpdate(this.ON_BAN, broadcast);
|
|
13152
|
+
}
|
|
13153
|
+
|
|
12962
13154
|
getStatus() {
|
|
12963
13155
|
return {
|
|
12964
13156
|
callId: this.callId,
|
|
@@ -13005,6 +13197,10 @@ class Participant extends Emitter {
|
|
|
13005
13197
|
}
|
|
13006
13198
|
}
|
|
13007
13199
|
|
|
13200
|
+
if (status.banned) {
|
|
13201
|
+
this.onBan(false);
|
|
13202
|
+
}
|
|
13203
|
+
|
|
13008
13204
|
// Poor man's object comparison
|
|
13009
13205
|
if (typeof status.extra !== 'undefined' && JSON.stringify(this.extra) !== JSON.stringify(status.extra)) {
|
|
13010
13206
|
this.extra = { ...this.extra, ...status.extra };
|
|
@@ -13032,6 +13228,28 @@ class Participant extends Emitter {
|
|
|
13032
13228
|
this.streams = streams;
|
|
13033
13229
|
this.videoStreams = streams;
|
|
13034
13230
|
}
|
|
13231
|
+
|
|
13232
|
+
async ban(apiRequestDelay = null) {
|
|
13233
|
+
const { meetingUuid } = this.room;
|
|
13234
|
+
if (!meetingUuid) {
|
|
13235
|
+
throw new Error('Attempting to ban a participant without a `meetingUuid`');
|
|
13236
|
+
}
|
|
13237
|
+
|
|
13238
|
+
// this notifies all that someone is being banned
|
|
13239
|
+
this.onBan(true);
|
|
13240
|
+
|
|
13241
|
+
// this allows to delay the actual ban, in order for the banned participant as well as others to react to the situation
|
|
13242
|
+
if (apiRequestDelay) {
|
|
13243
|
+
await this.delay(apiRequestDelay);
|
|
13244
|
+
}
|
|
13245
|
+
|
|
13246
|
+
// proceed with the actual kick
|
|
13247
|
+
return getApiClient().calld.banMeetingParticipant(meetingUuid, this.callId);
|
|
13248
|
+
}
|
|
13249
|
+
|
|
13250
|
+
async delay(ms ) {
|
|
13251
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
13252
|
+
}
|
|
13035
13253
|
}
|
|
13036
13254
|
|
|
13037
13255
|
//
|
|
@@ -13184,7 +13402,7 @@ class Room extends Emitter {
|
|
|
13184
13402
|
logger$1.info('connecting to room', { extension, audioOnly, room: !!room });
|
|
13185
13403
|
|
|
13186
13404
|
if (!room) {
|
|
13187
|
-
await Wazo.Phone.connect();
|
|
13405
|
+
await Wazo.Phone.connect({ media: constraints });
|
|
13188
13406
|
|
|
13189
13407
|
const withCamera = constraints && !!constraints.video;
|
|
13190
13408
|
|
|
@@ -13629,7 +13847,7 @@ class Room extends Emitter {
|
|
|
13629
13847
|
const participant = this._getParticipantFromCallId(status.callId);
|
|
13630
13848
|
|
|
13631
13849
|
if (participant) {
|
|
13632
|
-
// we're
|
|
13850
|
+
// we're receiving, so no need to broadcast
|
|
13633
13851
|
participant.updateStatus(status, false);
|
|
13634
13852
|
}
|
|
13635
13853
|
break;
|
|
@@ -13896,7 +14114,7 @@ class SipRoom extends Room {
|
|
|
13896
14114
|
logger.info('connecting to sip room', { extension, audioOnly, room: !!room });
|
|
13897
14115
|
|
|
13898
14116
|
if (!room) {
|
|
13899
|
-
await Wazo.Phone.connect();
|
|
14117
|
+
await Wazo.Phone.connect({ media: constraints });
|
|
13900
14118
|
|
|
13901
14119
|
const withCamera = constraints && !!constraints.video;
|
|
13902
14120
|
|
|
@@ -452,6 +452,24 @@ const fixSdp = (sdp , candidates , forcePort = true)
|
|
|
452
452
|
return fixed;
|
|
453
453
|
};
|
|
454
454
|
|
|
455
|
+
const addIcesInAllBundles = (sdp ) => {
|
|
456
|
+
const parsedSdp = sdpParser__default['default'].parse(sdp);
|
|
457
|
+
|
|
458
|
+
const mediaWithCandidate = parsedSdp.media.find(media => !!media.candidates);
|
|
459
|
+
if (!mediaWithCandidate) {
|
|
460
|
+
return sdp;
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
const { candidates } = mediaWithCandidate;
|
|
464
|
+
|
|
465
|
+
parsedSdp.media = parsedSdp.media.map(media => ({
|
|
466
|
+
...media,
|
|
467
|
+
candidates: media.candidates || candidates,
|
|
468
|
+
}));
|
|
469
|
+
|
|
470
|
+
return sdpParser__default['default'].write(parsedSdp);
|
|
471
|
+
};
|
|
472
|
+
|
|
455
473
|
/* global RTCSessionDescriptionInit, navigator */
|
|
456
474
|
|
|
457
475
|
const wazoLogger = IssueReporter$1 ? IssueReporter$1.loggerFor('webrtc-sdh') : console;
|
|
@@ -581,7 +599,10 @@ class WazoSessionDescriptionHandler extends sessionDescriptionHandler.SessionDes
|
|
|
581
599
|
|
|
582
600
|
// Check if we got ICEs
|
|
583
601
|
if (sdp.indexOf('a=candidate') !== -1) {
|
|
584
|
-
return
|
|
602
|
+
return {
|
|
603
|
+
type: description.type,
|
|
604
|
+
sdp: addIcesInAllBundles(sdp),
|
|
605
|
+
};
|
|
585
606
|
}
|
|
586
607
|
|
|
587
608
|
wazoLogger.info('No ICE candidates found in SDP, fixing it with gathered ices', this.gatheredCandidates);
|