@wazo/sdk 0.38.7 → 0.38.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/wazo-sdk.js +2 -2
- package/esm/__tests__/api-client.test.js +142 -2
- package/esm/__tests__/web-rtc-client.test.js +227 -27
- package/esm/api/calld.js +8 -0
- package/esm/api/confd.js +134 -2
- package/esm/api-client.js +142 -2
- package/esm/checker/Checker.js +183 -24
- package/esm/checker/checks/aor.js +142 -2
- package/esm/checker/checks/api.js +142 -2
- package/esm/checker/checks/index.js +183 -24
- package/esm/checker/checks/wazo-websocket.js +2 -0
- package/esm/checker/checks/webrtc-transport.js +181 -24
- package/esm/checker/checks/webrtc.js +181 -24
- package/esm/domain/AdHocAPIConference.js +142 -2
- package/esm/domain/Features.js +142 -2
- package/esm/domain/Meeting.js +18 -0
- package/esm/domain/MeetingAuthorization.js +70 -0
- package/esm/domain/Phone/CTIPhone.js +142 -2
- package/esm/domain/__tests__/Meeting.test.js +87 -1
- package/esm/domain/__tests__/MeetingAuthorization.test.js +109 -0
- package/esm/index.js +226 -27
- package/esm/service/CallApi.js +142 -2
- package/esm/service/getApiClient.js +142 -2
- package/esm/simple/Auth.js +226 -27
- package/esm/simple/Configuration.js +226 -27
- package/esm/simple/Directory.js +142 -2
- package/esm/simple/Phone.js +226 -27
- package/esm/simple/Websocket.js +3 -0
- package/esm/simple/index.js +226 -27
- package/esm/simple/room/LocalParticipant.js +226 -27
- package/esm/simple/room/Participant.js +226 -27
- package/esm/simple/room/RemoteParticipant.js +226 -27
- package/esm/simple/room/Room.js +226 -27
- package/esm/simple/room/SipRoom.js +226 -27
- package/esm/simple/room/Stream.js +226 -27
- package/esm/simple/room/__tests__/Participant.test.js +14747 -0
- package/esm/simple/room/__tests__/RemoteParticipant.test.js +226 -27
- package/esm/simple/utils.js +226 -27
- package/esm/utils/__tests__/object.test.js +57 -0
- package/esm/utils/__tests__/string.test.js +30 -0
- package/esm/utils/object.js +24 -0
- package/esm/utils/string.js +10 -0
- package/esm/web-rtc-client.js +181 -24
- package/esm/websocket-client.js +3 -1
- package/lib/__tests__/api-client.test.js +142 -2
- package/lib/__tests__/web-rtc-client.test.js +227 -27
- package/lib/api/calld.js +8 -0
- package/lib/api/confd.js +134 -2
- package/lib/api-client.js +142 -2
- package/lib/checker/Checker.js +183 -24
- package/lib/checker/checks/aor.js +142 -2
- package/lib/checker/checks/api.js +142 -2
- package/lib/checker/checks/index.js +183 -24
- package/lib/checker/checks/wazo-websocket.js +2 -0
- package/lib/checker/checks/webrtc-transport.js +181 -24
- package/lib/checker/checks/webrtc.js +181 -24
- package/lib/domain/AdHocAPIConference.js +142 -2
- package/lib/domain/Features.js +142 -2
- package/lib/domain/Meeting.js +18 -0
- package/lib/domain/MeetingAuthorization.js +79 -0
- package/lib/domain/Phone/CTIPhone.js +142 -2
- package/lib/domain/__tests__/Meeting.test.js +87 -1
- package/lib/domain/__tests__/MeetingAuthorization.test.js +111 -0
- package/lib/index.js +226 -27
- package/lib/service/CallApi.js +142 -2
- package/lib/service/getApiClient.js +142 -2
- package/lib/simple/Auth.js +226 -27
- package/lib/simple/Configuration.js +226 -27
- package/lib/simple/Directory.js +142 -2
- package/lib/simple/Phone.js +226 -27
- package/lib/simple/Websocket.js +3 -0
- package/lib/simple/index.js +226 -27
- package/lib/simple/room/LocalParticipant.js +226 -27
- package/lib/simple/room/Participant.js +226 -27
- package/lib/simple/room/RemoteParticipant.js +226 -27
- package/lib/simple/room/Room.js +226 -27
- package/lib/simple/room/SipRoom.js +226 -27
- package/lib/simple/room/Stream.js +226 -27
- package/lib/simple/room/__tests__/Participant.test.js +14757 -0
- package/lib/simple/room/__tests__/RemoteParticipant.test.js +226 -27
- package/lib/simple/utils.js +226 -27
- package/lib/utils/__tests__/object.test.js +59 -0
- package/lib/utils/__tests__/string.test.js +32 -0
- package/lib/utils/object.js +28 -0
- package/lib/utils/string.js +14 -0
- package/lib/web-rtc-client.js +181 -24
- package/lib/websocket-client.js +3 -0
- package/package.json +2 -2
- package/src/__tests__/web-rtc-client.test.js +46 -3
- package/src/api/calld.js +8 -0
- package/src/api/confd.js +43 -2
- package/src/domain/Meeting.js +20 -0
- package/src/domain/MeetingAuthorization.js +67 -0
- package/src/domain/__tests__/Meeting.test.js +70 -1
- package/src/domain/__tests__/MeetingAuthorization.test.js +58 -0
- package/src/simple/room/Participant.js +40 -0
- package/src/simple/room/Room.js +2 -2
- package/src/simple/room/SipRoom.js +1 -1
- package/src/simple/room/__tests__/Participant.test.js +81 -0
- package/src/types/WebSocketMessage.js +7 -1
- package/src/utils/__tests__/object.test.js +35 -0
- package/src/utils/__tests__/string.test.js +23 -0
- package/src/utils/object.js +15 -0
- package/src/utils/string.js +8 -0
- package/src/web-rtc-client.js +39 -22
- package/src/websocket-client.js +2 -0
|
@@ -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
|
//
|
|
@@ -4224,6 +4356,14 @@ var calldMethods = (client , baseUrl ) => ({
|
|
|
4224
4356
|
getMeetingParticipantsAsUser: async (meetingUuid ) =>
|
|
4225
4357
|
client.get(`${baseUrl}/users/me/meetings/${meetingUuid}/participants`),
|
|
4226
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
|
+
|
|
4227
4367
|
listTrunks: () => client.get(`${baseUrl}/trunks`),
|
|
4228
4368
|
|
|
4229
4369
|
mute: (callId ) =>
|
|
@@ -3202,6 +3202,70 @@ class ExternalApp {
|
|
|
3202
3202
|
|
|
3203
3203
|
//
|
|
3204
3204
|
|
|
3205
|
+
class MeetingAuthorization {
|
|
3206
|
+
|
|
3207
|
+
|
|
3208
|
+
|
|
3209
|
+
|
|
3210
|
+
|
|
3211
|
+
|
|
3212
|
+
constructor({
|
|
3213
|
+
meetingUuid,
|
|
3214
|
+
uuid,
|
|
3215
|
+
userUuid,
|
|
3216
|
+
userName,
|
|
3217
|
+
} = {}) {
|
|
3218
|
+
this.meetingUuid = meetingUuid;
|
|
3219
|
+
this.uuid = uuid;
|
|
3220
|
+
this.userUuid = userUuid;
|
|
3221
|
+
this.userName = userName;
|
|
3222
|
+
}
|
|
3223
|
+
|
|
3224
|
+
setStatus(status ) {
|
|
3225
|
+
this.status = status;
|
|
3226
|
+
}
|
|
3227
|
+
|
|
3228
|
+
getStatus() {
|
|
3229
|
+
return this.status;
|
|
3230
|
+
}
|
|
3231
|
+
|
|
3232
|
+
static parse(plain ) {
|
|
3233
|
+
const {
|
|
3234
|
+
meeting_uuid: meetingUuid,
|
|
3235
|
+
uuid,
|
|
3236
|
+
guest_uuid: userUuid,
|
|
3237
|
+
guest_name: userName,
|
|
3238
|
+
} = plain;
|
|
3239
|
+
|
|
3240
|
+
return new MeetingAuthorization({
|
|
3241
|
+
meetingUuid,
|
|
3242
|
+
uuid,
|
|
3243
|
+
userUuid,
|
|
3244
|
+
userName,
|
|
3245
|
+
});
|
|
3246
|
+
}
|
|
3247
|
+
|
|
3248
|
+
static parseMany(items ) {
|
|
3249
|
+
if (!items) {
|
|
3250
|
+
return [];
|
|
3251
|
+
}
|
|
3252
|
+
return items.map(MeetingAuthorization.parse);
|
|
3253
|
+
}
|
|
3254
|
+
}
|
|
3255
|
+
|
|
3256
|
+
//
|
|
3257
|
+
|
|
3258
|
+
|
|
3259
|
+
|
|
3260
|
+
|
|
3261
|
+
|
|
3262
|
+
|
|
3263
|
+
|
|
3264
|
+
|
|
3265
|
+
|
|
3266
|
+
|
|
3267
|
+
|
|
3268
|
+
|
|
3205
3269
|
|
|
3206
3270
|
|
|
3207
3271
|
|
|
@@ -3212,6 +3276,7 @@ class ExternalApp {
|
|
|
3212
3276
|
|
|
3213
3277
|
|
|
3214
3278
|
|
|
3279
|
+
|
|
3215
3280
|
|
|
3216
3281
|
|
|
3217
3282
|
class Meeting {
|
|
@@ -3226,6 +3291,8 @@ class Meeting {
|
|
|
3226
3291
|
|
|
3227
3292
|
|
|
3228
3293
|
|
|
3294
|
+
|
|
3295
|
+
|
|
3229
3296
|
|
|
3230
3297
|
static parse(plain ) {
|
|
3231
3298
|
return new Meeting({
|
|
@@ -3238,6 +3305,7 @@ class Meeting {
|
|
|
3238
3305
|
extension: plain.exten,
|
|
3239
3306
|
persistent: plain.persistent,
|
|
3240
3307
|
creationTime: moment(plain.creation_time).toDate(),
|
|
3308
|
+
requireAuthorization: plain.require_authorization,
|
|
3241
3309
|
});
|
|
3242
3310
|
}
|
|
3243
3311
|
|
|
@@ -3262,6 +3330,7 @@ class Meeting {
|
|
|
3262
3330
|
extension,
|
|
3263
3331
|
persistent,
|
|
3264
3332
|
creationTime,
|
|
3333
|
+
requireAuthorization,
|
|
3265
3334
|
} = {}) {
|
|
3266
3335
|
this.guestSipAuthorization = guestSipAuthorization;
|
|
3267
3336
|
this.uri = uri;
|
|
@@ -3272,6 +3341,7 @@ class Meeting {
|
|
|
3272
3341
|
this.extension = extension;
|
|
3273
3342
|
this.persistent = persistent;
|
|
3274
3343
|
this.creationTime = creationTime;
|
|
3344
|
+
this.requireAuthorization = requireAuthorization;
|
|
3275
3345
|
|
|
3276
3346
|
// Useful to compare instead of instanceof with minified code
|
|
3277
3347
|
this.type = 'Meeting';
|
|
@@ -3282,8 +3352,32 @@ class Meeting {
|
|
|
3282
3352
|
const [username, secret] = atob(this.guestSipAuthorization).split(':');
|
|
3283
3353
|
return { username, secret };
|
|
3284
3354
|
}
|
|
3355
|
+
|
|
3285
3356
|
}
|
|
3286
3357
|
|
|
3358
|
+
//
|
|
3359
|
+
|
|
3360
|
+
const camelToUnderscore = (key ) => {
|
|
3361
|
+
if (typeof key !== 'string') {
|
|
3362
|
+
throw new Error('Input is not a string');
|
|
3363
|
+
}
|
|
3364
|
+
return key.charAt(0).toLowerCase() + key.substring(1).replace(/([A-Z])/g, '_$1').toLowerCase();
|
|
3365
|
+
};
|
|
3366
|
+
|
|
3367
|
+
//
|
|
3368
|
+
|
|
3369
|
+
const convertKeysFromCamelToUnderscore = (args ) => {
|
|
3370
|
+
if (!args || typeof args !== 'object' || Array.isArray(args)) {
|
|
3371
|
+
throw new Error('Input is not an object');
|
|
3372
|
+
}
|
|
3373
|
+
|
|
3374
|
+
return Object.keys(args).reduce((acc, key) => {
|
|
3375
|
+
acc[camelToUnderscore(key)] = typeof args[key] === 'object' && !Array.isArray(args[key])
|
|
3376
|
+
? convertKeysFromCamelToUnderscore(args[key]) : args[key];
|
|
3377
|
+
return acc;
|
|
3378
|
+
}, {});
|
|
3379
|
+
};
|
|
3380
|
+
|
|
3287
3381
|
/* */
|
|
3288
3382
|
|
|
3289
3383
|
var confdMethods = (client , baseUrl ) => ({
|
|
@@ -3352,8 +3446,18 @@ var confdMethods = (client , baseUrl ) => ({
|
|
|
3352
3446
|
getMyMeetings: () =>
|
|
3353
3447
|
client.get(`${baseUrl}/users/me/meetings`).then(response => Meeting.parseMany(response.items)),
|
|
3354
3448
|
|
|
3355
|
-
createMyMeeting: (
|
|
3356
|
-
client
|
|
3449
|
+
createMyMeeting: (args ) =>
|
|
3450
|
+
client
|
|
3451
|
+
.post(`${baseUrl}/users/me/meetings`, convertKeysFromCamelToUnderscore(args))
|
|
3452
|
+
.then(Meeting.parse),
|
|
3453
|
+
|
|
3454
|
+
updateMyMeeting: (meetingUuid , data ) =>
|
|
3455
|
+
client.put(
|
|
3456
|
+
`${baseUrl}/users/me/meetings/${meetingUuid}`,
|
|
3457
|
+
convertKeysFromCamelToUnderscore(data),
|
|
3458
|
+
null,
|
|
3459
|
+
ApiRequester.successResponseParser,
|
|
3460
|
+
),
|
|
3357
3461
|
|
|
3358
3462
|
deleteMyMeeting: (meetingUuid ) =>
|
|
3359
3463
|
client.delete(`${baseUrl}/users/me/meetings/${meetingUuid}`, null),
|
|
@@ -3361,8 +3465,36 @@ var confdMethods = (client , baseUrl ) => ({
|
|
|
3361
3465
|
getMeeting: (meetingUuid ) =>
|
|
3362
3466
|
client.get(`${baseUrl}/meetings/${meetingUuid}`, null).then(Meeting.parse),
|
|
3363
3467
|
|
|
3468
|
+
meetingAuthorizations: (meetingUuid ) =>
|
|
3469
|
+
client.get(`${baseUrl}/users/me/meetings/${meetingUuid}/authorizations`, null).then(MeetingAuthorization.parseMany),
|
|
3470
|
+
|
|
3471
|
+
meetingAuthorizationReject: (meetingUuid , authorizationUuid ) =>
|
|
3472
|
+
client.put(
|
|
3473
|
+
`${baseUrl}/users/me/meetings/${meetingUuid}/authorizations/${authorizationUuid}/reject`,
|
|
3474
|
+
{},
|
|
3475
|
+
null,
|
|
3476
|
+
ApiRequester.successResponseParser,
|
|
3477
|
+
),
|
|
3478
|
+
|
|
3479
|
+
meetingAuthorizationAccept: (meetingUuid , authorizationUuid ) =>
|
|
3480
|
+
client.put(
|
|
3481
|
+
`${baseUrl}/users/me/meetings/${meetingUuid}/authorizations/${authorizationUuid}/accept`,
|
|
3482
|
+
{},
|
|
3483
|
+
null,
|
|
3484
|
+
ApiRequester.successResponseParser,
|
|
3485
|
+
),
|
|
3486
|
+
|
|
3364
3487
|
guestGetMeeting: (meetingUuid ) =>
|
|
3365
3488
|
client.get(`${baseUrl}/guests/me/meetings/${meetingUuid}`, null).then(Meeting.parse),
|
|
3489
|
+
|
|
3490
|
+
guestAuthorizationRequest: (userUuid , meetingUuid , username ) =>
|
|
3491
|
+
client
|
|
3492
|
+
.post(`${baseUrl}/guests/${userUuid}/meetings/${meetingUuid}/authorizations`, { guest_name: username })
|
|
3493
|
+
.then(MeetingAuthorization.parse),
|
|
3494
|
+
|
|
3495
|
+
guestAuthorizationCheck: (userUuid , meetingUuid , authorizationUuid ) =>
|
|
3496
|
+
client.get(`${baseUrl}/guests/${userUuid}/meetings/${meetingUuid}/authorizations/${authorizationUuid}`, null),
|
|
3497
|
+
|
|
3366
3498
|
});
|
|
3367
3499
|
|
|
3368
3500
|
//
|
|
@@ -4801,6 +4933,14 @@ var calldMethods = (client , baseUrl ) => ({
|
|
|
4801
4933
|
getMeetingParticipantsAsUser: async (meetingUuid ) =>
|
|
4802
4934
|
client.get(`${baseUrl}/users/me/meetings/${meetingUuid}/participants`),
|
|
4803
4935
|
|
|
4936
|
+
banMeetingParticipant: (meetingUuid , participantUuid ) =>
|
|
4937
|
+
client.delete(
|
|
4938
|
+
`${baseUrl}/users/me/meetings/${meetingUuid}/participants/${participantUuid}`,
|
|
4939
|
+
null,
|
|
4940
|
+
null,
|
|
4941
|
+
ApiRequester.successResponseParser,
|
|
4942
|
+
),
|
|
4943
|
+
|
|
4804
4944
|
listTrunks: () => client.get(`${baseUrl}/trunks`),
|
|
4805
4945
|
|
|
4806
4946
|
mute: (callId ) =>
|
|
@@ -6441,7 +6581,7 @@ class WebRTCClient extends Emitter {
|
|
|
6441
6581
|
});
|
|
6442
6582
|
}
|
|
6443
6583
|
|
|
6444
|
-
changeAudioInputDevice(id , session , force ) {
|
|
6584
|
+
async changeAudioInputDevice(id , session , force ) {
|
|
6445
6585
|
const currentId = this.getAudioDeviceId();
|
|
6446
6586
|
logger.info('setting audio input device', { id, currentId, session: !!session });
|
|
6447
6587
|
|
|
@@ -6449,33 +6589,50 @@ class WebRTCClient extends Emitter {
|
|
|
6449
6589
|
return null;
|
|
6450
6590
|
}
|
|
6451
6591
|
|
|
6592
|
+
// in order to handle an audio track change for default devices
|
|
6593
|
+
// we need the actual id of the device (not 'default')
|
|
6594
|
+
let deviceId = id;
|
|
6595
|
+
if (id === 'default' && navigator.mediaDevices) {
|
|
6596
|
+
const devices = await navigator.mediaDevices.enumerateDevices();
|
|
6597
|
+
const defaultDevice = devices.find(device => device.deviceId === 'default');
|
|
6598
|
+
if (defaultDevice) {
|
|
6599
|
+
const deviceLabel = defaultDevice.label.replace('Default - ', '');
|
|
6600
|
+
const targetDevice = devices.find(device => device.label === deviceLabel);
|
|
6601
|
+
if (targetDevice) {
|
|
6602
|
+
deviceId = targetDevice.deviceId;
|
|
6603
|
+
if (!force && deviceId === currentId) {
|
|
6604
|
+
return null;
|
|
6605
|
+
}
|
|
6606
|
+
}
|
|
6607
|
+
}
|
|
6608
|
+
}
|
|
6609
|
+
|
|
6452
6610
|
// let's update the local audio value
|
|
6453
6611
|
if (this.audio) {
|
|
6454
6612
|
this.audio = {
|
|
6455
6613
|
deviceId: {
|
|
6456
|
-
exact:
|
|
6614
|
+
exact: deviceId,
|
|
6457
6615
|
},
|
|
6458
6616
|
};
|
|
6459
6617
|
}
|
|
6460
6618
|
|
|
6461
|
-
if (session) {
|
|
6619
|
+
if (session && navigator.mediaDevices) {
|
|
6462
6620
|
const sdh = session.sessionDescriptionHandler;
|
|
6463
6621
|
const pc = sdh.peerConnection;
|
|
6464
6622
|
|
|
6465
|
-
|
|
6466
|
-
|
|
6467
|
-
|
|
6468
|
-
|
|
6623
|
+
const constraints = { audio: { deviceId: { exact: deviceId } } };
|
|
6624
|
+
const stream = await navigator.mediaDevices.getUserMedia(constraints);
|
|
6625
|
+
const audioTrack = stream.getAudioTracks()[0];
|
|
6626
|
+
const sender = pc && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
|
|
6469
6627
|
|
|
6470
|
-
|
|
6471
|
-
|
|
6472
|
-
|
|
6473
|
-
}
|
|
6474
|
-
sender.replaceTrack(audioTrack);
|
|
6628
|
+
if (sender) {
|
|
6629
|
+
if (sender.track) {
|
|
6630
|
+
audioTrack.enabled = sender.track.enabled;
|
|
6475
6631
|
}
|
|
6632
|
+
sender.replaceTrack(audioTrack);
|
|
6633
|
+
}
|
|
6476
6634
|
|
|
6477
|
-
|
|
6478
|
-
});
|
|
6635
|
+
return stream;
|
|
6479
6636
|
}
|
|
6480
6637
|
}
|
|
6481
6638
|
|
|
@@ -6495,14 +6652,14 @@ class WebRTCClient extends Emitter {
|
|
|
6495
6652
|
return null;
|
|
6496
6653
|
}
|
|
6497
6654
|
|
|
6498
|
-
// let's
|
|
6499
|
-
|
|
6500
|
-
|
|
6501
|
-
|
|
6502
|
-
|
|
6503
|
-
|
|
6504
|
-
}
|
|
6505
|
-
}
|
|
6655
|
+
// let's make sure we don't lose other video constraints settings -- width, height, frameRate...
|
|
6656
|
+
const videoObject = typeof this.video === 'object' ? this.video : {};
|
|
6657
|
+
this.video = {
|
|
6658
|
+
...videoObject,
|
|
6659
|
+
deviceId: {
|
|
6660
|
+
exact: id,
|
|
6661
|
+
},
|
|
6662
|
+
};
|
|
6506
6663
|
}
|
|
6507
6664
|
|
|
6508
6665
|
changeSessionVideoInputDevice(id , session ) {
|
|
@@ -7655,27 +7812,70 @@ describe('changeAudioInputDevice', () => {
|
|
|
7655
7812
|
});
|
|
7656
7813
|
});
|
|
7657
7814
|
|
|
7815
|
+
const devices = [
|
|
7816
|
+
{ deviceId: 'default', kind: 'audioinput', label: 'Default - Fake Microphone', groupId: 'fak3Gr0up3' },
|
|
7817
|
+
{ deviceId: 'fak3d3v1c3', kind: 'audioinput', label: 'Fake Microphone', groupId: 'fak3Gr0up3' },
|
|
7818
|
+
];
|
|
7819
|
+
const enumerateDevicesMock = jest.fn(async () => {
|
|
7820
|
+
return new Promise(resolve => {
|
|
7821
|
+
resolve(devices);
|
|
7822
|
+
});
|
|
7823
|
+
});
|
|
7824
|
+
|
|
7658
7825
|
Object.defineProperty(global.navigator, 'mediaDevices', {
|
|
7659
7826
|
value: {
|
|
7660
7827
|
getUserMedia: getUserMediaMock,
|
|
7828
|
+
enumerateDevices: enumerateDevicesMock,
|
|
7661
7829
|
},
|
|
7662
7830
|
});
|
|
7663
7831
|
|
|
7664
7832
|
it('should change the audio input track if the provided id is different', async () => {
|
|
7665
7833
|
client.setMediaConstraints(constraints);
|
|
7666
7834
|
expect(client.getAudioDeviceId()).toBe(defaultId);
|
|
7667
|
-
|
|
7835
|
+
const result = await client.changeAudioInputDevice(deviceId, session);
|
|
7836
|
+
expect(result).toBeTruthy();
|
|
7668
7837
|
});
|
|
7669
7838
|
|
|
7670
7839
|
it('should NOT change the audio input track if the provided id is the same', async () => {
|
|
7671
7840
|
client.setMediaConstraints(constraints);
|
|
7672
7841
|
expect(client.getAudioDeviceId()).toBe(defaultId);
|
|
7673
|
-
|
|
7842
|
+
const result = await client.changeAudioInputDevice(defaultId, session);
|
|
7843
|
+
expect(result).toBeFalsy();
|
|
7674
7844
|
});
|
|
7675
7845
|
|
|
7676
7846
|
it('should change the audio input track if the provided id is the same and force param is TRUE', async () => {
|
|
7677
7847
|
client.setMediaConstraints(constraints);
|
|
7678
7848
|
expect(client.getAudioDeviceId()).toBe(defaultId);
|
|
7679
|
-
|
|
7849
|
+
const result = await client.changeAudioInputDevice(defaultId, session, true);
|
|
7850
|
+
expect(result).toBeTruthy();
|
|
7851
|
+
});
|
|
7852
|
+
|
|
7853
|
+
describe('setVideoInputDevice', () => {
|
|
7854
|
+
it('should retain its original video values', () => {
|
|
7855
|
+
const video = { height: { min: 480, max: 720 }, width: { min: 640, max: 1280 } };
|
|
7856
|
+
|
|
7857
|
+
client.video = video;
|
|
7858
|
+
client.setVideoInputDevice(deviceId);
|
|
7859
|
+
expect(client.video).toEqual({ ...video, deviceId: { exact: deviceId } });
|
|
7860
|
+
});
|
|
7861
|
+
|
|
7862
|
+
it('should set deviceId when video\'s original value is true', () => {
|
|
7863
|
+
client.video = true;
|
|
7864
|
+
client.setVideoInputDevice(deviceId);
|
|
7865
|
+
expect(client.video).toEqual({ deviceId: { exact: deviceId } });
|
|
7866
|
+
});
|
|
7867
|
+
|
|
7868
|
+
it('should set deviceId when video\'s original value is not set', () => {
|
|
7869
|
+
client.video = undefined;
|
|
7870
|
+
client.setVideoInputDevice(deviceId);
|
|
7871
|
+
expect(client.video).toEqual({ deviceId: { exact: deviceId } });
|
|
7872
|
+
});
|
|
7873
|
+
|
|
7874
|
+
it('should NOT set deviceId when its value does not change', () => {
|
|
7875
|
+
client.video = { deviceId: { exact: deviceId } };
|
|
7876
|
+
const result = client.setVideoInputDevice(deviceId);
|
|
7877
|
+
expect(result).toEqual(null);
|
|
7878
|
+
expect(client.video).toEqual({ deviceId: { exact: deviceId } });
|
|
7879
|
+
});
|
|
7680
7880
|
});
|
|
7681
7881
|
});
|
package/esm/api/calld.js
CHANGED
|
@@ -1395,6 +1395,14 @@ var calld = (client , baseUrl ) => ({
|
|
|
1395
1395
|
getMeetingParticipantsAsUser: async (meetingUuid ) =>
|
|
1396
1396
|
client.get(`${baseUrl}/users/me/meetings/${meetingUuid}/participants`),
|
|
1397
1397
|
|
|
1398
|
+
banMeetingParticipant: (meetingUuid , participantUuid ) =>
|
|
1399
|
+
client.delete(
|
|
1400
|
+
`${baseUrl}/users/me/meetings/${meetingUuid}/participants/${participantUuid}`,
|
|
1401
|
+
null,
|
|
1402
|
+
null,
|
|
1403
|
+
ApiRequester.successResponseParser,
|
|
1404
|
+
),
|
|
1405
|
+
|
|
1398
1406
|
listTrunks: () => client.get(`${baseUrl}/trunks`),
|
|
1399
1407
|
|
|
1400
1408
|
mute: (callId ) =>
|