@wazo/sdk 0.38.5 → 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/README.md +1 -1
- package/dist/wazo-sdk.js +2 -2
- package/esm/__tests__/api-client.test.js +148 -2
- package/esm/__tests__/web-rtc-client.test.js +303 -26
- package/esm/api/calld.js +14 -0
- package/esm/api/confd.js +134 -2
- package/esm/api/ctid-ng.js +6 -0
- package/esm/api-client.js +148 -2
- package/esm/checker/Checker.js +212 -26
- package/esm/checker/checks/aor.js +148 -2
- package/esm/checker/checks/api.js +148 -2
- package/esm/checker/checks/index.js +212 -26
- package/esm/checker/checks/wazo-websocket.js +2 -0
- package/esm/checker/checks/webrtc-transport.js +210 -26
- package/esm/checker/checks/webrtc.js +210 -26
- package/esm/domain/AdHocAPIConference.js +148 -2
- package/esm/domain/Call.js +6 -0
- package/esm/domain/CallSession.js +1 -1
- package/esm/domain/Features.js +148 -2
- package/esm/domain/Meeting.js +18 -0
- package/esm/domain/MeetingAuthorization.js +70 -0
- package/esm/domain/Phone/CTIPhone.js +149 -3
- package/esm/domain/Phone/WebRTCPhone.js +3 -3
- package/esm/domain/__tests__/Call.test.js +6 -0
- package/esm/domain/__tests__/CallSession.test.js +1 -1
- package/esm/domain/__tests__/IndirectTransfer.test.js +1 -1
- package/esm/domain/__tests__/Meeting.test.js +87 -1
- package/esm/domain/__tests__/MeetingAuthorization.test.js +109 -0
- package/esm/domain/__tests__/Room.test.js +1 -1
- package/esm/index.js +258 -32
- package/esm/lib/WazoSessionDescriptionHandler.js +22 -1
- package/esm/service/CallApi.js +148 -2
- package/esm/service/getApiClient.js +148 -2
- package/esm/simple/Auth.js +258 -32
- package/esm/simple/Configuration.js +258 -32
- package/esm/simple/Directory.js +148 -2
- package/esm/simple/Phone.js +258 -32
- package/esm/simple/Websocket.js +3 -0
- package/esm/simple/index.js +258 -32
- package/esm/simple/room/LocalParticipant.js +258 -32
- package/esm/simple/room/Participant.js +258 -32
- package/esm/simple/room/RemoteParticipant.js +258 -32
- package/esm/simple/room/Room.js +258 -32
- package/esm/simple/room/SipRoom.js +258 -32
- package/esm/simple/room/Stream.js +258 -32
- package/esm/simple/room/__tests__/Participant.test.js +14747 -0
- package/esm/simple/room/__tests__/RemoteParticipant.test.js +258 -32
- package/esm/simple/utils.js +258 -32
- 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 +210 -26
- package/esm/websocket-client.js +3 -1
- package/lib/__tests__/api-client.test.js +148 -2
- package/lib/__tests__/web-rtc-client.test.js +303 -26
- package/lib/api/calld.js +14 -0
- package/lib/api/confd.js +134 -2
- package/lib/api/ctid-ng.js +6 -0
- package/lib/api-client.js +148 -2
- package/lib/checker/Checker.js +212 -26
- package/lib/checker/checks/aor.js +148 -2
- package/lib/checker/checks/api.js +148 -2
- package/lib/checker/checks/index.js +212 -26
- package/lib/checker/checks/wazo-websocket.js +2 -0
- package/lib/checker/checks/webrtc-transport.js +210 -26
- package/lib/checker/checks/webrtc.js +210 -26
- package/lib/domain/AdHocAPIConference.js +148 -2
- package/lib/domain/Call.js +6 -0
- package/lib/domain/CallSession.js +1 -1
- package/lib/domain/Features.js +148 -2
- package/lib/domain/Meeting.js +18 -0
- package/lib/domain/MeetingAuthorization.js +79 -0
- package/lib/domain/Phone/CTIPhone.js +149 -3
- package/lib/domain/Phone/WebRTCPhone.js +3 -3
- package/lib/domain/__tests__/Call.test.js +6 -0
- package/lib/domain/__tests__/CallSession.test.js +1 -1
- package/lib/domain/__tests__/IndirectTransfer.test.js +1 -1
- package/lib/domain/__tests__/Meeting.test.js +87 -1
- package/lib/domain/__tests__/MeetingAuthorization.test.js +111 -0
- package/lib/domain/__tests__/Room.test.js +1 -1
- package/lib/index.js +258 -32
- package/lib/lib/WazoSessionDescriptionHandler.js +22 -1
- package/lib/service/CallApi.js +148 -2
- package/lib/service/getApiClient.js +148 -2
- package/lib/simple/Auth.js +258 -32
- package/lib/simple/Configuration.js +258 -32
- package/lib/simple/Directory.js +148 -2
- package/lib/simple/Phone.js +258 -32
- package/lib/simple/Websocket.js +3 -0
- package/lib/simple/index.js +258 -32
- package/lib/simple/room/LocalParticipant.js +258 -32
- package/lib/simple/room/Participant.js +258 -32
- package/lib/simple/room/RemoteParticipant.js +258 -32
- package/lib/simple/room/Room.js +258 -32
- package/lib/simple/room/SipRoom.js +258 -32
- package/lib/simple/room/Stream.js +258 -32
- package/lib/simple/room/__tests__/Participant.test.js +14757 -0
- package/lib/simple/room/__tests__/RemoteParticipant.test.js +258 -32
- package/lib/simple/utils.js +258 -32
- 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 +210 -26
- package/lib/websocket-client.js +3 -0
- package/package.json +2 -2
- package/src/__tests__/web-rtc-client.test.js +93 -0
- package/src/api/calld.js +8 -0
- package/src/api/confd.js +43 -2
- package/src/domain/Call.js +6 -0
- package/src/domain/CallSession.js +1 -1
- package/src/domain/Meeting.js +20 -0
- package/src/domain/MeetingAuthorization.js +67 -0
- package/src/domain/Phone/WebRTCPhone.js +2 -2
- 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 +40 -23
- package/src/websocket-client.js +2 -0
|
@@ -2625,6 +2625,70 @@ class ExternalApp {
|
|
|
2625
2625
|
|
|
2626
2626
|
//
|
|
2627
2627
|
|
|
2628
|
+
class MeetingAuthorization {
|
|
2629
|
+
|
|
2630
|
+
|
|
2631
|
+
|
|
2632
|
+
|
|
2633
|
+
|
|
2634
|
+
|
|
2635
|
+
constructor({
|
|
2636
|
+
meetingUuid,
|
|
2637
|
+
uuid,
|
|
2638
|
+
userUuid,
|
|
2639
|
+
userName,
|
|
2640
|
+
} = {}) {
|
|
2641
|
+
this.meetingUuid = meetingUuid;
|
|
2642
|
+
this.uuid = uuid;
|
|
2643
|
+
this.userUuid = userUuid;
|
|
2644
|
+
this.userName = userName;
|
|
2645
|
+
}
|
|
2646
|
+
|
|
2647
|
+
setStatus(status ) {
|
|
2648
|
+
this.status = status;
|
|
2649
|
+
}
|
|
2650
|
+
|
|
2651
|
+
getStatus() {
|
|
2652
|
+
return this.status;
|
|
2653
|
+
}
|
|
2654
|
+
|
|
2655
|
+
static parse(plain ) {
|
|
2656
|
+
const {
|
|
2657
|
+
meeting_uuid: meetingUuid,
|
|
2658
|
+
uuid,
|
|
2659
|
+
guest_uuid: userUuid,
|
|
2660
|
+
guest_name: userName,
|
|
2661
|
+
} = plain;
|
|
2662
|
+
|
|
2663
|
+
return new MeetingAuthorization({
|
|
2664
|
+
meetingUuid,
|
|
2665
|
+
uuid,
|
|
2666
|
+
userUuid,
|
|
2667
|
+
userName,
|
|
2668
|
+
});
|
|
2669
|
+
}
|
|
2670
|
+
|
|
2671
|
+
static parseMany(items ) {
|
|
2672
|
+
if (!items) {
|
|
2673
|
+
return [];
|
|
2674
|
+
}
|
|
2675
|
+
return items.map(MeetingAuthorization.parse);
|
|
2676
|
+
}
|
|
2677
|
+
}
|
|
2678
|
+
|
|
2679
|
+
//
|
|
2680
|
+
|
|
2681
|
+
|
|
2682
|
+
|
|
2683
|
+
|
|
2684
|
+
|
|
2685
|
+
|
|
2686
|
+
|
|
2687
|
+
|
|
2688
|
+
|
|
2689
|
+
|
|
2690
|
+
|
|
2691
|
+
|
|
2628
2692
|
|
|
2629
2693
|
|
|
2630
2694
|
|
|
@@ -2635,6 +2699,7 @@ class ExternalApp {
|
|
|
2635
2699
|
|
|
2636
2700
|
|
|
2637
2701
|
|
|
2702
|
+
|
|
2638
2703
|
|
|
2639
2704
|
|
|
2640
2705
|
class Meeting {
|
|
@@ -2649,6 +2714,8 @@ class Meeting {
|
|
|
2649
2714
|
|
|
2650
2715
|
|
|
2651
2716
|
|
|
2717
|
+
|
|
2718
|
+
|
|
2652
2719
|
|
|
2653
2720
|
static parse(plain ) {
|
|
2654
2721
|
return new Meeting({
|
|
@@ -2661,6 +2728,7 @@ class Meeting {
|
|
|
2661
2728
|
extension: plain.exten,
|
|
2662
2729
|
persistent: plain.persistent,
|
|
2663
2730
|
creationTime: moment(plain.creation_time).toDate(),
|
|
2731
|
+
requireAuthorization: plain.require_authorization,
|
|
2664
2732
|
});
|
|
2665
2733
|
}
|
|
2666
2734
|
|
|
@@ -2685,6 +2753,7 @@ class Meeting {
|
|
|
2685
2753
|
extension,
|
|
2686
2754
|
persistent,
|
|
2687
2755
|
creationTime,
|
|
2756
|
+
requireAuthorization,
|
|
2688
2757
|
} = {}) {
|
|
2689
2758
|
this.guestSipAuthorization = guestSipAuthorization;
|
|
2690
2759
|
this.uri = uri;
|
|
@@ -2695,6 +2764,7 @@ class Meeting {
|
|
|
2695
2764
|
this.extension = extension;
|
|
2696
2765
|
this.persistent = persistent;
|
|
2697
2766
|
this.creationTime = creationTime;
|
|
2767
|
+
this.requireAuthorization = requireAuthorization;
|
|
2698
2768
|
|
|
2699
2769
|
// Useful to compare instead of instanceof with minified code
|
|
2700
2770
|
this.type = 'Meeting';
|
|
@@ -2705,8 +2775,32 @@ class Meeting {
|
|
|
2705
2775
|
const [username, secret] = atob(this.guestSipAuthorization).split(':');
|
|
2706
2776
|
return { username, secret };
|
|
2707
2777
|
}
|
|
2778
|
+
|
|
2708
2779
|
}
|
|
2709
2780
|
|
|
2781
|
+
//
|
|
2782
|
+
|
|
2783
|
+
const camelToUnderscore = (key ) => {
|
|
2784
|
+
if (typeof key !== 'string') {
|
|
2785
|
+
throw new Error('Input is not a string');
|
|
2786
|
+
}
|
|
2787
|
+
return key.charAt(0).toLowerCase() + key.substring(1).replace(/([A-Z])/g, '_$1').toLowerCase();
|
|
2788
|
+
};
|
|
2789
|
+
|
|
2790
|
+
//
|
|
2791
|
+
|
|
2792
|
+
const convertKeysFromCamelToUnderscore = (args ) => {
|
|
2793
|
+
if (!args || typeof args !== 'object' || Array.isArray(args)) {
|
|
2794
|
+
throw new Error('Input is not an object');
|
|
2795
|
+
}
|
|
2796
|
+
|
|
2797
|
+
return Object.keys(args).reduce((acc, key) => {
|
|
2798
|
+
acc[camelToUnderscore(key)] = typeof args[key] === 'object' && !Array.isArray(args[key])
|
|
2799
|
+
? convertKeysFromCamelToUnderscore(args[key]) : args[key];
|
|
2800
|
+
return acc;
|
|
2801
|
+
}, {});
|
|
2802
|
+
};
|
|
2803
|
+
|
|
2710
2804
|
/* */
|
|
2711
2805
|
|
|
2712
2806
|
var confdMethods = (client , baseUrl ) => ({
|
|
@@ -2775,8 +2869,18 @@ var confdMethods = (client , baseUrl ) => ({
|
|
|
2775
2869
|
getMyMeetings: () =>
|
|
2776
2870
|
client.get(`${baseUrl}/users/me/meetings`).then(response => Meeting.parseMany(response.items)),
|
|
2777
2871
|
|
|
2778
|
-
createMyMeeting: (
|
|
2779
|
-
client
|
|
2872
|
+
createMyMeeting: (args ) =>
|
|
2873
|
+
client
|
|
2874
|
+
.post(`${baseUrl}/users/me/meetings`, convertKeysFromCamelToUnderscore(args))
|
|
2875
|
+
.then(Meeting.parse),
|
|
2876
|
+
|
|
2877
|
+
updateMyMeeting: (meetingUuid , data ) =>
|
|
2878
|
+
client.put(
|
|
2879
|
+
`${baseUrl}/users/me/meetings/${meetingUuid}`,
|
|
2880
|
+
convertKeysFromCamelToUnderscore(data),
|
|
2881
|
+
null,
|
|
2882
|
+
ApiRequester.successResponseParser,
|
|
2883
|
+
),
|
|
2780
2884
|
|
|
2781
2885
|
deleteMyMeeting: (meetingUuid ) =>
|
|
2782
2886
|
client.delete(`${baseUrl}/users/me/meetings/${meetingUuid}`, null),
|
|
@@ -2784,8 +2888,36 @@ var confdMethods = (client , baseUrl ) => ({
|
|
|
2784
2888
|
getMeeting: (meetingUuid ) =>
|
|
2785
2889
|
client.get(`${baseUrl}/meetings/${meetingUuid}`, null).then(Meeting.parse),
|
|
2786
2890
|
|
|
2891
|
+
meetingAuthorizations: (meetingUuid ) =>
|
|
2892
|
+
client.get(`${baseUrl}/users/me/meetings/${meetingUuid}/authorizations`, null).then(MeetingAuthorization.parseMany),
|
|
2893
|
+
|
|
2894
|
+
meetingAuthorizationReject: (meetingUuid , authorizationUuid ) =>
|
|
2895
|
+
client.put(
|
|
2896
|
+
`${baseUrl}/users/me/meetings/${meetingUuid}/authorizations/${authorizationUuid}/reject`,
|
|
2897
|
+
{},
|
|
2898
|
+
null,
|
|
2899
|
+
ApiRequester.successResponseParser,
|
|
2900
|
+
),
|
|
2901
|
+
|
|
2902
|
+
meetingAuthorizationAccept: (meetingUuid , authorizationUuid ) =>
|
|
2903
|
+
client.put(
|
|
2904
|
+
`${baseUrl}/users/me/meetings/${meetingUuid}/authorizations/${authorizationUuid}/accept`,
|
|
2905
|
+
{},
|
|
2906
|
+
null,
|
|
2907
|
+
ApiRequester.successResponseParser,
|
|
2908
|
+
),
|
|
2909
|
+
|
|
2787
2910
|
guestGetMeeting: (meetingUuid ) =>
|
|
2788
2911
|
client.get(`${baseUrl}/guests/me/meetings/${meetingUuid}`, null).then(Meeting.parse),
|
|
2912
|
+
|
|
2913
|
+
guestAuthorizationRequest: (userUuid , meetingUuid , username ) =>
|
|
2914
|
+
client
|
|
2915
|
+
.post(`${baseUrl}/guests/${userUuid}/meetings/${meetingUuid}/authorizations`, { guest_name: username })
|
|
2916
|
+
.then(MeetingAuthorization.parse),
|
|
2917
|
+
|
|
2918
|
+
guestAuthorizationCheck: (userUuid , meetingUuid , authorizationUuid ) =>
|
|
2919
|
+
client.get(`${baseUrl}/guests/${userUuid}/meetings/${meetingUuid}/authorizations/${authorizationUuid}`, null),
|
|
2920
|
+
|
|
2789
2921
|
});
|
|
2790
2922
|
|
|
2791
2923
|
//
|
|
@@ -3051,6 +3183,7 @@ const RECORD_STATE_ACTIVE = 'active';
|
|
|
3051
3183
|
|
|
3052
3184
|
|
|
3053
3185
|
|
|
3186
|
+
|
|
3054
3187
|
|
|
3055
3188
|
|
|
3056
3189
|
|
|
@@ -3061,6 +3194,7 @@ const RECORD_STATE_ACTIVE = 'active';
|
|
|
3061
3194
|
|
|
3062
3195
|
|
|
3063
3196
|
|
|
3197
|
+
|
|
3064
3198
|
|
|
3065
3199
|
|
|
3066
3200
|
|
|
@@ -3089,6 +3223,7 @@ class Call {
|
|
|
3089
3223
|
|
|
3090
3224
|
|
|
3091
3225
|
|
|
3226
|
+
|
|
3092
3227
|
|
|
3093
3228
|
|
|
3094
3229
|
|
|
@@ -3113,6 +3248,7 @@ class Call {
|
|
|
3113
3248
|
calleeNumber: plain.peer_caller_id_number,
|
|
3114
3249
|
dialedExtension: plain.dialed_extension,
|
|
3115
3250
|
isCaller: plain.is_caller,
|
|
3251
|
+
isVideo: plain.is_video,
|
|
3116
3252
|
muted: plain.muted,
|
|
3117
3253
|
onHold: plain.on_hold,
|
|
3118
3254
|
status: plain.status,
|
|
@@ -3136,6 +3272,7 @@ class Call {
|
|
|
3136
3272
|
calleeNumber,
|
|
3137
3273
|
dialedExtension,
|
|
3138
3274
|
isCaller,
|
|
3275
|
+
isVideo,
|
|
3139
3276
|
lineId,
|
|
3140
3277
|
muted,
|
|
3141
3278
|
onHold,
|
|
@@ -3159,6 +3296,7 @@ class Call {
|
|
|
3159
3296
|
this.startingTime = startingTime;
|
|
3160
3297
|
this.talkingToIds = talkingToIds || [];
|
|
3161
3298
|
this.recording = recording;
|
|
3299
|
+
this.isVideo = !!isVideo;
|
|
3162
3300
|
|
|
3163
3301
|
// Useful to compare instead of instanceof with minified code
|
|
3164
3302
|
this.type = 'Call';
|
|
@@ -4218,6 +4356,14 @@ var calldMethods = (client , baseUrl ) => ({
|
|
|
4218
4356
|
getMeetingParticipantsAsUser: async (meetingUuid ) =>
|
|
4219
4357
|
client.get(`${baseUrl}/users/me/meetings/${meetingUuid}/participants`),
|
|
4220
4358
|
|
|
4359
|
+
banMeetingParticipant: (meetingUuid , participantUuid ) =>
|
|
4360
|
+
client.delete(
|
|
4361
|
+
`${baseUrl}/users/me/meetings/${meetingUuid}/participants/${participantUuid}`,
|
|
4362
|
+
null,
|
|
4363
|
+
null,
|
|
4364
|
+
ApiRequester.successResponseParser,
|
|
4365
|
+
),
|
|
4366
|
+
|
|
4221
4367
|
listTrunks: () => client.get(`${baseUrl}/trunks`),
|
|
4222
4368
|
|
|
4223
4369
|
mute: (callId ) =>
|
|
@@ -2643,6 +2643,70 @@ class ExternalApp {
|
|
|
2643
2643
|
|
|
2644
2644
|
//
|
|
2645
2645
|
|
|
2646
|
+
class MeetingAuthorization {
|
|
2647
|
+
|
|
2648
|
+
|
|
2649
|
+
|
|
2650
|
+
|
|
2651
|
+
|
|
2652
|
+
|
|
2653
|
+
constructor({
|
|
2654
|
+
meetingUuid,
|
|
2655
|
+
uuid,
|
|
2656
|
+
userUuid,
|
|
2657
|
+
userName,
|
|
2658
|
+
} = {}) {
|
|
2659
|
+
this.meetingUuid = meetingUuid;
|
|
2660
|
+
this.uuid = uuid;
|
|
2661
|
+
this.userUuid = userUuid;
|
|
2662
|
+
this.userName = userName;
|
|
2663
|
+
}
|
|
2664
|
+
|
|
2665
|
+
setStatus(status ) {
|
|
2666
|
+
this.status = status;
|
|
2667
|
+
}
|
|
2668
|
+
|
|
2669
|
+
getStatus() {
|
|
2670
|
+
return this.status;
|
|
2671
|
+
}
|
|
2672
|
+
|
|
2673
|
+
static parse(plain ) {
|
|
2674
|
+
const {
|
|
2675
|
+
meeting_uuid: meetingUuid,
|
|
2676
|
+
uuid,
|
|
2677
|
+
guest_uuid: userUuid,
|
|
2678
|
+
guest_name: userName,
|
|
2679
|
+
} = plain;
|
|
2680
|
+
|
|
2681
|
+
return new MeetingAuthorization({
|
|
2682
|
+
meetingUuid,
|
|
2683
|
+
uuid,
|
|
2684
|
+
userUuid,
|
|
2685
|
+
userName,
|
|
2686
|
+
});
|
|
2687
|
+
}
|
|
2688
|
+
|
|
2689
|
+
static parseMany(items ) {
|
|
2690
|
+
if (!items) {
|
|
2691
|
+
return [];
|
|
2692
|
+
}
|
|
2693
|
+
return items.map(MeetingAuthorization.parse);
|
|
2694
|
+
}
|
|
2695
|
+
}
|
|
2696
|
+
|
|
2697
|
+
//
|
|
2698
|
+
|
|
2699
|
+
|
|
2700
|
+
|
|
2701
|
+
|
|
2702
|
+
|
|
2703
|
+
|
|
2704
|
+
|
|
2705
|
+
|
|
2706
|
+
|
|
2707
|
+
|
|
2708
|
+
|
|
2709
|
+
|
|
2646
2710
|
|
|
2647
2711
|
|
|
2648
2712
|
|
|
@@ -2653,6 +2717,7 @@ class ExternalApp {
|
|
|
2653
2717
|
|
|
2654
2718
|
|
|
2655
2719
|
|
|
2720
|
+
|
|
2656
2721
|
|
|
2657
2722
|
|
|
2658
2723
|
class Meeting {
|
|
@@ -2667,6 +2732,8 @@ class Meeting {
|
|
|
2667
2732
|
|
|
2668
2733
|
|
|
2669
2734
|
|
|
2735
|
+
|
|
2736
|
+
|
|
2670
2737
|
|
|
2671
2738
|
static parse(plain ) {
|
|
2672
2739
|
return new Meeting({
|
|
@@ -2679,6 +2746,7 @@ class Meeting {
|
|
|
2679
2746
|
extension: plain.exten,
|
|
2680
2747
|
persistent: plain.persistent,
|
|
2681
2748
|
creationTime: moment(plain.creation_time).toDate(),
|
|
2749
|
+
requireAuthorization: plain.require_authorization,
|
|
2682
2750
|
});
|
|
2683
2751
|
}
|
|
2684
2752
|
|
|
@@ -2703,6 +2771,7 @@ class Meeting {
|
|
|
2703
2771
|
extension,
|
|
2704
2772
|
persistent,
|
|
2705
2773
|
creationTime,
|
|
2774
|
+
requireAuthorization,
|
|
2706
2775
|
} = {}) {
|
|
2707
2776
|
this.guestSipAuthorization = guestSipAuthorization;
|
|
2708
2777
|
this.uri = uri;
|
|
@@ -2713,6 +2782,7 @@ class Meeting {
|
|
|
2713
2782
|
this.extension = extension;
|
|
2714
2783
|
this.persistent = persistent;
|
|
2715
2784
|
this.creationTime = creationTime;
|
|
2785
|
+
this.requireAuthorization = requireAuthorization;
|
|
2716
2786
|
|
|
2717
2787
|
// Useful to compare instead of instanceof with minified code
|
|
2718
2788
|
this.type = 'Meeting';
|
|
@@ -2723,8 +2793,32 @@ class Meeting {
|
|
|
2723
2793
|
const [username, secret] = atob(this.guestSipAuthorization).split(':');
|
|
2724
2794
|
return { username, secret };
|
|
2725
2795
|
}
|
|
2796
|
+
|
|
2726
2797
|
}
|
|
2727
2798
|
|
|
2799
|
+
//
|
|
2800
|
+
|
|
2801
|
+
const camelToUnderscore = (key ) => {
|
|
2802
|
+
if (typeof key !== 'string') {
|
|
2803
|
+
throw new Error('Input is not a string');
|
|
2804
|
+
}
|
|
2805
|
+
return key.charAt(0).toLowerCase() + key.substring(1).replace(/([A-Z])/g, '_$1').toLowerCase();
|
|
2806
|
+
};
|
|
2807
|
+
|
|
2808
|
+
//
|
|
2809
|
+
|
|
2810
|
+
const convertKeysFromCamelToUnderscore = (args ) => {
|
|
2811
|
+
if (!args || typeof args !== 'object' || Array.isArray(args)) {
|
|
2812
|
+
throw new Error('Input is not an object');
|
|
2813
|
+
}
|
|
2814
|
+
|
|
2815
|
+
return Object.keys(args).reduce((acc, key) => {
|
|
2816
|
+
acc[camelToUnderscore(key)] = typeof args[key] === 'object' && !Array.isArray(args[key])
|
|
2817
|
+
? convertKeysFromCamelToUnderscore(args[key]) : args[key];
|
|
2818
|
+
return acc;
|
|
2819
|
+
}, {});
|
|
2820
|
+
};
|
|
2821
|
+
|
|
2728
2822
|
/* */
|
|
2729
2823
|
|
|
2730
2824
|
var confdMethods = (client , baseUrl ) => ({
|
|
@@ -2793,8 +2887,18 @@ var confdMethods = (client , baseUrl ) => ({
|
|
|
2793
2887
|
getMyMeetings: () =>
|
|
2794
2888
|
client.get(`${baseUrl}/users/me/meetings`).then(response => Meeting.parseMany(response.items)),
|
|
2795
2889
|
|
|
2796
|
-
createMyMeeting: (
|
|
2797
|
-
client
|
|
2890
|
+
createMyMeeting: (args ) =>
|
|
2891
|
+
client
|
|
2892
|
+
.post(`${baseUrl}/users/me/meetings`, convertKeysFromCamelToUnderscore(args))
|
|
2893
|
+
.then(Meeting.parse),
|
|
2894
|
+
|
|
2895
|
+
updateMyMeeting: (meetingUuid , data ) =>
|
|
2896
|
+
client.put(
|
|
2897
|
+
`${baseUrl}/users/me/meetings/${meetingUuid}`,
|
|
2898
|
+
convertKeysFromCamelToUnderscore(data),
|
|
2899
|
+
null,
|
|
2900
|
+
ApiRequester.successResponseParser,
|
|
2901
|
+
),
|
|
2798
2902
|
|
|
2799
2903
|
deleteMyMeeting: (meetingUuid ) =>
|
|
2800
2904
|
client.delete(`${baseUrl}/users/me/meetings/${meetingUuid}`, null),
|
|
@@ -2802,8 +2906,36 @@ var confdMethods = (client , baseUrl ) => ({
|
|
|
2802
2906
|
getMeeting: (meetingUuid ) =>
|
|
2803
2907
|
client.get(`${baseUrl}/meetings/${meetingUuid}`, null).then(Meeting.parse),
|
|
2804
2908
|
|
|
2909
|
+
meetingAuthorizations: (meetingUuid ) =>
|
|
2910
|
+
client.get(`${baseUrl}/users/me/meetings/${meetingUuid}/authorizations`, null).then(MeetingAuthorization.parseMany),
|
|
2911
|
+
|
|
2912
|
+
meetingAuthorizationReject: (meetingUuid , authorizationUuid ) =>
|
|
2913
|
+
client.put(
|
|
2914
|
+
`${baseUrl}/users/me/meetings/${meetingUuid}/authorizations/${authorizationUuid}/reject`,
|
|
2915
|
+
{},
|
|
2916
|
+
null,
|
|
2917
|
+
ApiRequester.successResponseParser,
|
|
2918
|
+
),
|
|
2919
|
+
|
|
2920
|
+
meetingAuthorizationAccept: (meetingUuid , authorizationUuid ) =>
|
|
2921
|
+
client.put(
|
|
2922
|
+
`${baseUrl}/users/me/meetings/${meetingUuid}/authorizations/${authorizationUuid}/accept`,
|
|
2923
|
+
{},
|
|
2924
|
+
null,
|
|
2925
|
+
ApiRequester.successResponseParser,
|
|
2926
|
+
),
|
|
2927
|
+
|
|
2805
2928
|
guestGetMeeting: (meetingUuid ) =>
|
|
2806
2929
|
client.get(`${baseUrl}/guests/me/meetings/${meetingUuid}`, null).then(Meeting.parse),
|
|
2930
|
+
|
|
2931
|
+
guestAuthorizationRequest: (userUuid , meetingUuid , username ) =>
|
|
2932
|
+
client
|
|
2933
|
+
.post(`${baseUrl}/guests/${userUuid}/meetings/${meetingUuid}/authorizations`, { guest_name: username })
|
|
2934
|
+
.then(MeetingAuthorization.parse),
|
|
2935
|
+
|
|
2936
|
+
guestAuthorizationCheck: (userUuid , meetingUuid , authorizationUuid ) =>
|
|
2937
|
+
client.get(`${baseUrl}/guests/${userUuid}/meetings/${meetingUuid}/authorizations/${authorizationUuid}`, null),
|
|
2938
|
+
|
|
2807
2939
|
});
|
|
2808
2940
|
|
|
2809
2941
|
//
|
|
@@ -3069,6 +3201,7 @@ const RECORD_STATE_ACTIVE = 'active';
|
|
|
3069
3201
|
|
|
3070
3202
|
|
|
3071
3203
|
|
|
3204
|
+
|
|
3072
3205
|
|
|
3073
3206
|
|
|
3074
3207
|
|
|
@@ -3079,6 +3212,7 @@ const RECORD_STATE_ACTIVE = 'active';
|
|
|
3079
3212
|
|
|
3080
3213
|
|
|
3081
3214
|
|
|
3215
|
+
|
|
3082
3216
|
|
|
3083
3217
|
|
|
3084
3218
|
|
|
@@ -3107,6 +3241,7 @@ class Call {
|
|
|
3107
3241
|
|
|
3108
3242
|
|
|
3109
3243
|
|
|
3244
|
+
|
|
3110
3245
|
|
|
3111
3246
|
|
|
3112
3247
|
|
|
@@ -3131,6 +3266,7 @@ class Call {
|
|
|
3131
3266
|
calleeNumber: plain.peer_caller_id_number,
|
|
3132
3267
|
dialedExtension: plain.dialed_extension,
|
|
3133
3268
|
isCaller: plain.is_caller,
|
|
3269
|
+
isVideo: plain.is_video,
|
|
3134
3270
|
muted: plain.muted,
|
|
3135
3271
|
onHold: plain.on_hold,
|
|
3136
3272
|
status: plain.status,
|
|
@@ -3154,6 +3290,7 @@ class Call {
|
|
|
3154
3290
|
calleeNumber,
|
|
3155
3291
|
dialedExtension,
|
|
3156
3292
|
isCaller,
|
|
3293
|
+
isVideo,
|
|
3157
3294
|
lineId,
|
|
3158
3295
|
muted,
|
|
3159
3296
|
onHold,
|
|
@@ -3177,6 +3314,7 @@ class Call {
|
|
|
3177
3314
|
this.startingTime = startingTime;
|
|
3178
3315
|
this.talkingToIds = talkingToIds || [];
|
|
3179
3316
|
this.recording = recording;
|
|
3317
|
+
this.isVideo = !!isVideo;
|
|
3180
3318
|
|
|
3181
3319
|
// Useful to compare instead of instanceof with minified code
|
|
3182
3320
|
this.type = 'Call';
|
|
@@ -4262,6 +4400,14 @@ var calldMethods = (client , baseUrl ) => ({
|
|
|
4262
4400
|
getMeetingParticipantsAsUser: async (meetingUuid ) =>
|
|
4263
4401
|
client.get(`${baseUrl}/users/me/meetings/${meetingUuid}/participants`),
|
|
4264
4402
|
|
|
4403
|
+
banMeetingParticipant: (meetingUuid , participantUuid ) =>
|
|
4404
|
+
client.delete(
|
|
4405
|
+
`${baseUrl}/users/me/meetings/${meetingUuid}/participants/${participantUuid}`,
|
|
4406
|
+
null,
|
|
4407
|
+
null,
|
|
4408
|
+
ApiRequester.successResponseParser,
|
|
4409
|
+
),
|
|
4410
|
+
|
|
4265
4411
|
listTrunks: () => client.get(`${baseUrl}/trunks`),
|
|
4266
4412
|
|
|
4267
4413
|
mute: (callId ) =>
|
|
@@ -5053,6 +5199,7 @@ const AGENT_UNPAUSED = 'agent_unpaused';
|
|
|
5053
5199
|
const CONFERENCE_ADHOC_PARTICIPANT_LEFT = 'conference_adhoc_participant_left';
|
|
5054
5200
|
const CONFERENCE_ADHOC_DELETED = 'conference_adhoc_deleted';
|
|
5055
5201
|
const MEETING_USER_PROGRESS = 'meeting_user_progress';
|
|
5202
|
+
const MEETING_USER_GUEST_AUTHORIZATION_CREATED = 'meeting_user_guest_authorization_created';
|
|
5056
5203
|
|
|
5057
5204
|
const BLACKLIST_EVENTS = [
|
|
5058
5205
|
CHAT_MESSAGE_SENT,
|
|
@@ -5404,6 +5551,7 @@ WebSocketClient.eventLists = [
|
|
|
5404
5551
|
CONFERENCE_ADHOC_PARTICIPANT_LEFT,
|
|
5405
5552
|
CONFERENCE_ADHOC_DELETED,
|
|
5406
5553
|
MEETING_USER_PROGRESS,
|
|
5554
|
+
MEETING_USER_GUEST_AUTHORIZATION_CREATED,
|
|
5407
5555
|
];
|
|
5408
5556
|
|
|
5409
5557
|
var wazoWebsocket = {
|
|
@@ -5508,6 +5656,24 @@ const fixSdp = (sdp , candidates , forcePort = true)
|
|
|
5508
5656
|
return fixed;
|
|
5509
5657
|
};
|
|
5510
5658
|
|
|
5659
|
+
const addIcesInAllBundles = (sdp ) => {
|
|
5660
|
+
const parsedSdp = sdpParser.parse(sdp);
|
|
5661
|
+
|
|
5662
|
+
const mediaWithCandidate = parsedSdp.media.find(media => !!media.candidates);
|
|
5663
|
+
if (!mediaWithCandidate) {
|
|
5664
|
+
return sdp;
|
|
5665
|
+
}
|
|
5666
|
+
|
|
5667
|
+
const { candidates } = mediaWithCandidate;
|
|
5668
|
+
|
|
5669
|
+
parsedSdp.media = parsedSdp.media.map(media => ({
|
|
5670
|
+
...media,
|
|
5671
|
+
candidates: media.candidates || candidates,
|
|
5672
|
+
}));
|
|
5673
|
+
|
|
5674
|
+
return sdpParser.write(parsedSdp);
|
|
5675
|
+
};
|
|
5676
|
+
|
|
5511
5677
|
/* global RTCSessionDescriptionInit, navigator */
|
|
5512
5678
|
|
|
5513
5679
|
const wazoLogger = IssueReporter$1 ? IssueReporter$1.loggerFor('webrtc-sdh') : console;
|
|
@@ -5637,7 +5803,10 @@ class WazoSessionDescriptionHandler extends SessionDescriptionHandler {
|
|
|
5637
5803
|
|
|
5638
5804
|
// Check if we got ICEs
|
|
5639
5805
|
if (sdp.indexOf('a=candidate') !== -1) {
|
|
5640
|
-
return
|
|
5806
|
+
return {
|
|
5807
|
+
type: description.type,
|
|
5808
|
+
sdp: addIcesInAllBundles(sdp),
|
|
5809
|
+
};
|
|
5641
5810
|
}
|
|
5642
5811
|
|
|
5643
5812
|
wazoLogger.info('No ICE candidates found in SDP, fixing it with gathered ices', this.gatheredCandidates);
|
|
@@ -6999,41 +7168,58 @@ class WebRTCClient extends Emitter {
|
|
|
6999
7168
|
});
|
|
7000
7169
|
}
|
|
7001
7170
|
|
|
7002
|
-
changeAudioInputDevice(id , session ) {
|
|
7171
|
+
async changeAudioInputDevice(id , session , force ) {
|
|
7003
7172
|
const currentId = this.getAudioDeviceId();
|
|
7004
7173
|
logger.info('setting audio input device', { id, currentId, session: !!session });
|
|
7005
7174
|
|
|
7006
|
-
if (id === currentId) {
|
|
7175
|
+
if (!force && id === currentId) {
|
|
7007
7176
|
return null;
|
|
7008
7177
|
}
|
|
7009
7178
|
|
|
7179
|
+
// in order to handle an audio track change for default devices
|
|
7180
|
+
// we need the actual id of the device (not 'default')
|
|
7181
|
+
let deviceId = id;
|
|
7182
|
+
if (id === 'default' && navigator.mediaDevices) {
|
|
7183
|
+
const devices = await navigator.mediaDevices.enumerateDevices();
|
|
7184
|
+
const defaultDevice = devices.find(device => device.deviceId === 'default');
|
|
7185
|
+
if (defaultDevice) {
|
|
7186
|
+
const deviceLabel = defaultDevice.label.replace('Default - ', '');
|
|
7187
|
+
const targetDevice = devices.find(device => device.label === deviceLabel);
|
|
7188
|
+
if (targetDevice) {
|
|
7189
|
+
deviceId = targetDevice.deviceId;
|
|
7190
|
+
if (!force && deviceId === currentId) {
|
|
7191
|
+
return null;
|
|
7192
|
+
}
|
|
7193
|
+
}
|
|
7194
|
+
}
|
|
7195
|
+
}
|
|
7196
|
+
|
|
7010
7197
|
// let's update the local audio value
|
|
7011
7198
|
if (this.audio) {
|
|
7012
7199
|
this.audio = {
|
|
7013
7200
|
deviceId: {
|
|
7014
|
-
exact:
|
|
7201
|
+
exact: deviceId,
|
|
7015
7202
|
},
|
|
7016
7203
|
};
|
|
7017
7204
|
}
|
|
7018
7205
|
|
|
7019
|
-
if (session) {
|
|
7206
|
+
if (session && navigator.mediaDevices) {
|
|
7020
7207
|
const sdh = session.sessionDescriptionHandler;
|
|
7021
7208
|
const pc = sdh.peerConnection;
|
|
7022
7209
|
|
|
7023
|
-
|
|
7024
|
-
|
|
7025
|
-
|
|
7026
|
-
|
|
7210
|
+
const constraints = { audio: { deviceId: { exact: deviceId } } };
|
|
7211
|
+
const stream = await navigator.mediaDevices.getUserMedia(constraints);
|
|
7212
|
+
const audioTrack = stream.getAudioTracks()[0];
|
|
7213
|
+
const sender = pc && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
|
|
7027
7214
|
|
|
7028
|
-
|
|
7029
|
-
|
|
7030
|
-
|
|
7031
|
-
}
|
|
7032
|
-
sender.replaceTrack(audioTrack);
|
|
7215
|
+
if (sender) {
|
|
7216
|
+
if (sender.track) {
|
|
7217
|
+
audioTrack.enabled = sender.track.enabled;
|
|
7033
7218
|
}
|
|
7219
|
+
sender.replaceTrack(audioTrack);
|
|
7220
|
+
}
|
|
7034
7221
|
|
|
7035
|
-
|
|
7036
|
-
});
|
|
7222
|
+
return stream;
|
|
7037
7223
|
}
|
|
7038
7224
|
}
|
|
7039
7225
|
|
|
@@ -7053,14 +7239,14 @@ class WebRTCClient extends Emitter {
|
|
|
7053
7239
|
return null;
|
|
7054
7240
|
}
|
|
7055
7241
|
|
|
7056
|
-
// let's
|
|
7057
|
-
|
|
7058
|
-
|
|
7059
|
-
|
|
7060
|
-
|
|
7061
|
-
|
|
7062
|
-
}
|
|
7063
|
-
}
|
|
7242
|
+
// let's make sure we don't lose other video constraints settings -- width, height, frameRate...
|
|
7243
|
+
const videoObject = typeof this.video === 'object' ? this.video : {};
|
|
7244
|
+
this.video = {
|
|
7245
|
+
...videoObject,
|
|
7246
|
+
deviceId: {
|
|
7247
|
+
exact: id,
|
|
7248
|
+
},
|
|
7249
|
+
};
|
|
7064
7250
|
}
|
|
7065
7251
|
|
|
7066
7252
|
changeSessionVideoInputDevice(id , session ) {
|
|
@@ -607,6 +607,7 @@ const AGENT_UNPAUSED = 'agent_unpaused';
|
|
|
607
607
|
const CONFERENCE_ADHOC_PARTICIPANT_LEFT = 'conference_adhoc_participant_left';
|
|
608
608
|
const CONFERENCE_ADHOC_DELETED = 'conference_adhoc_deleted';
|
|
609
609
|
const MEETING_USER_PROGRESS = 'meeting_user_progress';
|
|
610
|
+
const MEETING_USER_GUEST_AUTHORIZATION_CREATED = 'meeting_user_guest_authorization_created';
|
|
610
611
|
|
|
611
612
|
const BLACKLIST_EVENTS = [
|
|
612
613
|
CHAT_MESSAGE_SENT,
|
|
@@ -958,6 +959,7 @@ WebSocketClient.eventLists = [
|
|
|
958
959
|
CONFERENCE_ADHOC_PARTICIPANT_LEFT,
|
|
959
960
|
CONFERENCE_ADHOC_DELETED,
|
|
960
961
|
MEETING_USER_PROGRESS,
|
|
962
|
+
MEETING_USER_GUEST_AUTHORIZATION_CREATED,
|
|
961
963
|
];
|
|
962
964
|
|
|
963
965
|
var wazoWebsocket = {
|