@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
package/esm/simple/Phone.js
CHANGED
|
@@ -49,6 +49,7 @@ const RECORD_STATE_ACTIVE = 'active';
|
|
|
49
49
|
|
|
50
50
|
|
|
51
51
|
|
|
52
|
+
|
|
52
53
|
|
|
53
54
|
|
|
54
55
|
|
|
@@ -59,6 +60,7 @@ const RECORD_STATE_ACTIVE = 'active';
|
|
|
59
60
|
|
|
60
61
|
|
|
61
62
|
|
|
63
|
+
|
|
62
64
|
|
|
63
65
|
|
|
64
66
|
|
|
@@ -87,6 +89,7 @@ class Call {
|
|
|
87
89
|
|
|
88
90
|
|
|
89
91
|
|
|
92
|
+
|
|
90
93
|
|
|
91
94
|
|
|
92
95
|
|
|
@@ -111,6 +114,7 @@ class Call {
|
|
|
111
114
|
calleeNumber: plain.peer_caller_id_number,
|
|
112
115
|
dialedExtension: plain.dialed_extension,
|
|
113
116
|
isCaller: plain.is_caller,
|
|
117
|
+
isVideo: plain.is_video,
|
|
114
118
|
muted: plain.muted,
|
|
115
119
|
onHold: plain.on_hold,
|
|
116
120
|
status: plain.status,
|
|
@@ -134,6 +138,7 @@ class Call {
|
|
|
134
138
|
calleeNumber,
|
|
135
139
|
dialedExtension,
|
|
136
140
|
isCaller,
|
|
141
|
+
isVideo,
|
|
137
142
|
lineId,
|
|
138
143
|
muted,
|
|
139
144
|
onHold,
|
|
@@ -157,6 +162,7 @@ class Call {
|
|
|
157
162
|
this.startingTime = startingTime;
|
|
158
163
|
this.talkingToIds = talkingToIds || [];
|
|
159
164
|
this.recording = recording;
|
|
165
|
+
this.isVideo = !!isVideo;
|
|
160
166
|
|
|
161
167
|
// Useful to compare instead of instanceof with minified code
|
|
162
168
|
this.type = 'Call';
|
|
@@ -630,7 +636,7 @@ class CallSession {
|
|
|
630
636
|
ringing: call.isRinging(),
|
|
631
637
|
answered: call.isUp(),
|
|
632
638
|
answeredBySystem: call.isUp() && call.talkingToIds.length === 0,
|
|
633
|
-
cameraEnabled:
|
|
639
|
+
cameraEnabled: call.isVideo,
|
|
634
640
|
dialedExtension: call.dialedExtension,
|
|
635
641
|
call,
|
|
636
642
|
conference: false, // @FIXME?
|
|
@@ -3248,6 +3254,70 @@ class ExternalApp {
|
|
|
3248
3254
|
|
|
3249
3255
|
//
|
|
3250
3256
|
|
|
3257
|
+
class MeetingAuthorization {
|
|
3258
|
+
|
|
3259
|
+
|
|
3260
|
+
|
|
3261
|
+
|
|
3262
|
+
|
|
3263
|
+
|
|
3264
|
+
constructor({
|
|
3265
|
+
meetingUuid,
|
|
3266
|
+
uuid,
|
|
3267
|
+
userUuid,
|
|
3268
|
+
userName,
|
|
3269
|
+
} = {}) {
|
|
3270
|
+
this.meetingUuid = meetingUuid;
|
|
3271
|
+
this.uuid = uuid;
|
|
3272
|
+
this.userUuid = userUuid;
|
|
3273
|
+
this.userName = userName;
|
|
3274
|
+
}
|
|
3275
|
+
|
|
3276
|
+
setStatus(status ) {
|
|
3277
|
+
this.status = status;
|
|
3278
|
+
}
|
|
3279
|
+
|
|
3280
|
+
getStatus() {
|
|
3281
|
+
return this.status;
|
|
3282
|
+
}
|
|
3283
|
+
|
|
3284
|
+
static parse(plain ) {
|
|
3285
|
+
const {
|
|
3286
|
+
meeting_uuid: meetingUuid,
|
|
3287
|
+
uuid,
|
|
3288
|
+
guest_uuid: userUuid,
|
|
3289
|
+
guest_name: userName,
|
|
3290
|
+
} = plain;
|
|
3291
|
+
|
|
3292
|
+
return new MeetingAuthorization({
|
|
3293
|
+
meetingUuid,
|
|
3294
|
+
uuid,
|
|
3295
|
+
userUuid,
|
|
3296
|
+
userName,
|
|
3297
|
+
});
|
|
3298
|
+
}
|
|
3299
|
+
|
|
3300
|
+
static parseMany(items ) {
|
|
3301
|
+
if (!items) {
|
|
3302
|
+
return [];
|
|
3303
|
+
}
|
|
3304
|
+
return items.map(MeetingAuthorization.parse);
|
|
3305
|
+
}
|
|
3306
|
+
}
|
|
3307
|
+
|
|
3308
|
+
//
|
|
3309
|
+
|
|
3310
|
+
|
|
3311
|
+
|
|
3312
|
+
|
|
3313
|
+
|
|
3314
|
+
|
|
3315
|
+
|
|
3316
|
+
|
|
3317
|
+
|
|
3318
|
+
|
|
3319
|
+
|
|
3320
|
+
|
|
3251
3321
|
|
|
3252
3322
|
|
|
3253
3323
|
|
|
@@ -3258,6 +3328,7 @@ class ExternalApp {
|
|
|
3258
3328
|
|
|
3259
3329
|
|
|
3260
3330
|
|
|
3331
|
+
|
|
3261
3332
|
|
|
3262
3333
|
|
|
3263
3334
|
class Meeting {
|
|
@@ -3272,6 +3343,8 @@ class Meeting {
|
|
|
3272
3343
|
|
|
3273
3344
|
|
|
3274
3345
|
|
|
3346
|
+
|
|
3347
|
+
|
|
3275
3348
|
|
|
3276
3349
|
static parse(plain ) {
|
|
3277
3350
|
return new Meeting({
|
|
@@ -3284,6 +3357,7 @@ class Meeting {
|
|
|
3284
3357
|
extension: plain.exten,
|
|
3285
3358
|
persistent: plain.persistent,
|
|
3286
3359
|
creationTime: moment(plain.creation_time).toDate(),
|
|
3360
|
+
requireAuthorization: plain.require_authorization,
|
|
3287
3361
|
});
|
|
3288
3362
|
}
|
|
3289
3363
|
|
|
@@ -3308,6 +3382,7 @@ class Meeting {
|
|
|
3308
3382
|
extension,
|
|
3309
3383
|
persistent,
|
|
3310
3384
|
creationTime,
|
|
3385
|
+
requireAuthorization,
|
|
3311
3386
|
} = {}) {
|
|
3312
3387
|
this.guestSipAuthorization = guestSipAuthorization;
|
|
3313
3388
|
this.uri = uri;
|
|
@@ -3318,6 +3393,7 @@ class Meeting {
|
|
|
3318
3393
|
this.extension = extension;
|
|
3319
3394
|
this.persistent = persistent;
|
|
3320
3395
|
this.creationTime = creationTime;
|
|
3396
|
+
this.requireAuthorization = requireAuthorization;
|
|
3321
3397
|
|
|
3322
3398
|
// Useful to compare instead of instanceof with minified code
|
|
3323
3399
|
this.type = 'Meeting';
|
|
@@ -3328,8 +3404,32 @@ class Meeting {
|
|
|
3328
3404
|
const [username, secret] = atob(this.guestSipAuthorization).split(':');
|
|
3329
3405
|
return { username, secret };
|
|
3330
3406
|
}
|
|
3407
|
+
|
|
3331
3408
|
}
|
|
3332
3409
|
|
|
3410
|
+
//
|
|
3411
|
+
|
|
3412
|
+
const camelToUnderscore = (key ) => {
|
|
3413
|
+
if (typeof key !== 'string') {
|
|
3414
|
+
throw new Error('Input is not a string');
|
|
3415
|
+
}
|
|
3416
|
+
return key.charAt(0).toLowerCase() + key.substring(1).replace(/([A-Z])/g, '_$1').toLowerCase();
|
|
3417
|
+
};
|
|
3418
|
+
|
|
3419
|
+
//
|
|
3420
|
+
|
|
3421
|
+
const convertKeysFromCamelToUnderscore = (args ) => {
|
|
3422
|
+
if (!args || typeof args !== 'object' || Array.isArray(args)) {
|
|
3423
|
+
throw new Error('Input is not an object');
|
|
3424
|
+
}
|
|
3425
|
+
|
|
3426
|
+
return Object.keys(args).reduce((acc, key) => {
|
|
3427
|
+
acc[camelToUnderscore(key)] = typeof args[key] === 'object' && !Array.isArray(args[key])
|
|
3428
|
+
? convertKeysFromCamelToUnderscore(args[key]) : args[key];
|
|
3429
|
+
return acc;
|
|
3430
|
+
}, {});
|
|
3431
|
+
};
|
|
3432
|
+
|
|
3333
3433
|
/* */
|
|
3334
3434
|
|
|
3335
3435
|
var confdMethods = (client , baseUrl ) => ({
|
|
@@ -3398,8 +3498,18 @@ var confdMethods = (client , baseUrl ) => ({
|
|
|
3398
3498
|
getMyMeetings: () =>
|
|
3399
3499
|
client.get(`${baseUrl}/users/me/meetings`).then(response => Meeting.parseMany(response.items)),
|
|
3400
3500
|
|
|
3401
|
-
createMyMeeting: (
|
|
3402
|
-
client
|
|
3501
|
+
createMyMeeting: (args ) =>
|
|
3502
|
+
client
|
|
3503
|
+
.post(`${baseUrl}/users/me/meetings`, convertKeysFromCamelToUnderscore(args))
|
|
3504
|
+
.then(Meeting.parse),
|
|
3505
|
+
|
|
3506
|
+
updateMyMeeting: (meetingUuid , data ) =>
|
|
3507
|
+
client.put(
|
|
3508
|
+
`${baseUrl}/users/me/meetings/${meetingUuid}`,
|
|
3509
|
+
convertKeysFromCamelToUnderscore(data),
|
|
3510
|
+
null,
|
|
3511
|
+
ApiRequester.successResponseParser,
|
|
3512
|
+
),
|
|
3403
3513
|
|
|
3404
3514
|
deleteMyMeeting: (meetingUuid ) =>
|
|
3405
3515
|
client.delete(`${baseUrl}/users/me/meetings/${meetingUuid}`, null),
|
|
@@ -3407,8 +3517,36 @@ var confdMethods = (client , baseUrl ) => ({
|
|
|
3407
3517
|
getMeeting: (meetingUuid ) =>
|
|
3408
3518
|
client.get(`${baseUrl}/meetings/${meetingUuid}`, null).then(Meeting.parse),
|
|
3409
3519
|
|
|
3520
|
+
meetingAuthorizations: (meetingUuid ) =>
|
|
3521
|
+
client.get(`${baseUrl}/users/me/meetings/${meetingUuid}/authorizations`, null).then(MeetingAuthorization.parseMany),
|
|
3522
|
+
|
|
3523
|
+
meetingAuthorizationReject: (meetingUuid , authorizationUuid ) =>
|
|
3524
|
+
client.put(
|
|
3525
|
+
`${baseUrl}/users/me/meetings/${meetingUuid}/authorizations/${authorizationUuid}/reject`,
|
|
3526
|
+
{},
|
|
3527
|
+
null,
|
|
3528
|
+
ApiRequester.successResponseParser,
|
|
3529
|
+
),
|
|
3530
|
+
|
|
3531
|
+
meetingAuthorizationAccept: (meetingUuid , authorizationUuid ) =>
|
|
3532
|
+
client.put(
|
|
3533
|
+
`${baseUrl}/users/me/meetings/${meetingUuid}/authorizations/${authorizationUuid}/accept`,
|
|
3534
|
+
{},
|
|
3535
|
+
null,
|
|
3536
|
+
ApiRequester.successResponseParser,
|
|
3537
|
+
),
|
|
3538
|
+
|
|
3410
3539
|
guestGetMeeting: (meetingUuid ) =>
|
|
3411
3540
|
client.get(`${baseUrl}/guests/me/meetings/${meetingUuid}`, null).then(Meeting.parse),
|
|
3541
|
+
|
|
3542
|
+
guestAuthorizationRequest: (userUuid , meetingUuid , username ) =>
|
|
3543
|
+
client
|
|
3544
|
+
.post(`${baseUrl}/guests/${userUuid}/meetings/${meetingUuid}/authorizations`, { guest_name: username })
|
|
3545
|
+
.then(MeetingAuthorization.parse),
|
|
3546
|
+
|
|
3547
|
+
guestAuthorizationCheck: (userUuid , meetingUuid , authorizationUuid ) =>
|
|
3548
|
+
client.get(`${baseUrl}/guests/${userUuid}/meetings/${meetingUuid}/authorizations/${authorizationUuid}`, null),
|
|
3549
|
+
|
|
3412
3550
|
});
|
|
3413
3551
|
|
|
3414
3552
|
//
|
|
@@ -5050,6 +5188,14 @@ var calldMethods = (client , baseUrl ) => ({
|
|
|
5050
5188
|
getMeetingParticipantsAsUser: async (meetingUuid ) =>
|
|
5051
5189
|
client.get(`${baseUrl}/users/me/meetings/${meetingUuid}/participants`),
|
|
5052
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
|
+
|
|
5053
5199
|
listTrunks: () => client.get(`${baseUrl}/trunks`),
|
|
5054
5200
|
|
|
5055
5201
|
mute: (callId ) =>
|
|
@@ -5897,6 +6043,24 @@ const fixSdp = (sdp , candidates , forcePort = true)
|
|
|
5897
6043
|
return fixed;
|
|
5898
6044
|
};
|
|
5899
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
|
+
|
|
5900
6064
|
/* global RTCSessionDescriptionInit, navigator */
|
|
5901
6065
|
|
|
5902
6066
|
const wazoLogger = IssueReporter$1 ? IssueReporter$1.loggerFor('webrtc-sdh') : console;
|
|
@@ -6026,7 +6190,10 @@ class WazoSessionDescriptionHandler extends SessionDescriptionHandler {
|
|
|
6026
6190
|
|
|
6027
6191
|
// Check if we got ICEs
|
|
6028
6192
|
if (sdp.indexOf('a=candidate') !== -1) {
|
|
6029
|
-
return
|
|
6193
|
+
return {
|
|
6194
|
+
type: description.type,
|
|
6195
|
+
sdp: addIcesInAllBundles(sdp),
|
|
6196
|
+
};
|
|
6030
6197
|
}
|
|
6031
6198
|
|
|
6032
6199
|
wazoLogger.info('No ICE candidates found in SDP, fixing it with gathered ices', this.gatheredCandidates);
|
|
@@ -7486,41 +7653,58 @@ class WebRTCClient extends Emitter {
|
|
|
7486
7653
|
});
|
|
7487
7654
|
}
|
|
7488
7655
|
|
|
7489
|
-
changeAudioInputDevice(id , session ) {
|
|
7656
|
+
async changeAudioInputDevice(id , session , force ) {
|
|
7490
7657
|
const currentId = this.getAudioDeviceId();
|
|
7491
7658
|
logger$9.info('setting audio input device', { id, currentId, session: !!session });
|
|
7492
7659
|
|
|
7493
|
-
if (id === currentId) {
|
|
7660
|
+
if (!force && id === currentId) {
|
|
7494
7661
|
return null;
|
|
7495
7662
|
}
|
|
7496
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
|
+
|
|
7497
7682
|
// let's update the local audio value
|
|
7498
7683
|
if (this.audio) {
|
|
7499
7684
|
this.audio = {
|
|
7500
7685
|
deviceId: {
|
|
7501
|
-
exact:
|
|
7686
|
+
exact: deviceId,
|
|
7502
7687
|
},
|
|
7503
7688
|
};
|
|
7504
7689
|
}
|
|
7505
7690
|
|
|
7506
|
-
if (session) {
|
|
7691
|
+
if (session && navigator.mediaDevices) {
|
|
7507
7692
|
const sdh = session.sessionDescriptionHandler;
|
|
7508
7693
|
const pc = sdh.peerConnection;
|
|
7509
7694
|
|
|
7510
|
-
|
|
7511
|
-
|
|
7512
|
-
|
|
7513
|
-
|
|
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);
|
|
7514
7699
|
|
|
7515
|
-
|
|
7516
|
-
|
|
7517
|
-
|
|
7518
|
-
}
|
|
7519
|
-
sender.replaceTrack(audioTrack);
|
|
7700
|
+
if (sender) {
|
|
7701
|
+
if (sender.track) {
|
|
7702
|
+
audioTrack.enabled = sender.track.enabled;
|
|
7520
7703
|
}
|
|
7704
|
+
sender.replaceTrack(audioTrack);
|
|
7705
|
+
}
|
|
7521
7706
|
|
|
7522
|
-
|
|
7523
|
-
});
|
|
7707
|
+
return stream;
|
|
7524
7708
|
}
|
|
7525
7709
|
}
|
|
7526
7710
|
|
|
@@ -7540,14 +7724,14 @@ class WebRTCClient extends Emitter {
|
|
|
7540
7724
|
return null;
|
|
7541
7725
|
}
|
|
7542
7726
|
|
|
7543
|
-
// let's
|
|
7544
|
-
|
|
7545
|
-
|
|
7546
|
-
|
|
7547
|
-
|
|
7548
|
-
|
|
7549
|
-
}
|
|
7550
|
-
}
|
|
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
|
+
};
|
|
7551
7735
|
}
|
|
7552
7736
|
|
|
7553
7737
|
changeSessionVideoInputDevice(id , session ) {
|
|
@@ -9286,10 +9470,10 @@ class WebRTCPhone extends Emitter {
|
|
|
9286
9470
|
this.audioRingVolume = volume;
|
|
9287
9471
|
}
|
|
9288
9472
|
|
|
9289
|
-
changeAudioInputDevice(id ) {
|
|
9473
|
+
changeAudioInputDevice(id , force ) {
|
|
9290
9474
|
logger$8.info('WebRTC phone - changeAudio input device', { deviceId: id });
|
|
9291
9475
|
|
|
9292
|
-
return this.client.changeAudioInputDevice(id, this.currentSipSession);
|
|
9476
|
+
return this.client.changeAudioInputDevice(id, this.currentSipSession, force);
|
|
9293
9477
|
}
|
|
9294
9478
|
|
|
9295
9479
|
changeVideoInputDevice(id ) {
|
|
@@ -10825,6 +11009,7 @@ const AGENT_UNPAUSED = 'agent_unpaused';
|
|
|
10825
11009
|
const CONFERENCE_ADHOC_PARTICIPANT_LEFT = 'conference_adhoc_participant_left';
|
|
10826
11010
|
const CONFERENCE_ADHOC_DELETED = 'conference_adhoc_deleted';
|
|
10827
11011
|
const MEETING_USER_PROGRESS = 'meeting_user_progress';
|
|
11012
|
+
const MEETING_USER_GUEST_AUTHORIZATION_CREATED = 'meeting_user_guest_authorization_created';
|
|
10828
11013
|
|
|
10829
11014
|
const BLACKLIST_EVENTS = [
|
|
10830
11015
|
CHAT_MESSAGE_SENT,
|
|
@@ -11176,6 +11361,7 @@ WebSocketClient.eventLists = [
|
|
|
11176
11361
|
CONFERENCE_ADHOC_PARTICIPANT_LEFT,
|
|
11177
11362
|
CONFERENCE_ADHOC_DELETED,
|
|
11178
11363
|
MEETING_USER_PROGRESS,
|
|
11364
|
+
MEETING_USER_GUEST_AUTHORIZATION_CREATED,
|
|
11179
11365
|
];
|
|
11180
11366
|
|
|
11181
11367
|
var WebSocketClient$1 = /*#__PURE__*/Object.freeze({
|
|
@@ -11247,6 +11433,7 @@ var WebSocketClient$1 = /*#__PURE__*/Object.freeze({
|
|
|
11247
11433
|
CONFERENCE_ADHOC_PARTICIPANT_LEFT: CONFERENCE_ADHOC_PARTICIPANT_LEFT,
|
|
11248
11434
|
CONFERENCE_ADHOC_DELETED: CONFERENCE_ADHOC_DELETED,
|
|
11249
11435
|
MEETING_USER_PROGRESS: MEETING_USER_PROGRESS,
|
|
11436
|
+
MEETING_USER_GUEST_AUTHORIZATION_CREATED: MEETING_USER_GUEST_AUTHORIZATION_CREATED,
|
|
11250
11437
|
HEARTBEAT_ENGINE_VERSION: HEARTBEAT_ENGINE_VERSION,
|
|
11251
11438
|
'default': WebSocketClient
|
|
11252
11439
|
});
|
|
@@ -11351,6 +11538,7 @@ class Participant extends Emitter {
|
|
|
11351
11538
|
|
|
11352
11539
|
|
|
11353
11540
|
|
|
11541
|
+
|
|
11354
11542
|
|
|
11355
11543
|
|
|
11356
11544
|
|
|
@@ -11368,6 +11556,7 @@ class Participant extends Emitter {
|
|
|
11368
11556
|
|
|
11369
11557
|
|
|
11370
11558
|
|
|
11559
|
+
|
|
11371
11560
|
|
|
11372
11561
|
/**
|
|
11373
11562
|
* @param room Room The room where the participant is
|
|
@@ -11391,6 +11580,7 @@ class Participant extends Emitter {
|
|
|
11391
11580
|
this.screensharing = false;
|
|
11392
11581
|
this.isOnHold = false;
|
|
11393
11582
|
this.extra = extra;
|
|
11583
|
+
this.banned = false;
|
|
11394
11584
|
|
|
11395
11585
|
this.ON_UPDATED = 'participant/ON_UPDATED';
|
|
11396
11586
|
this.ON_START_TALKING = 'participant/ON_START_TALKING';
|
|
@@ -11407,6 +11597,7 @@ class Participant extends Emitter {
|
|
|
11407
11597
|
this.ON_EXTRA_CHANGE = 'participant/ON_EXTRA_CHANGE';
|
|
11408
11598
|
this.ON_HOLD = 'participant/ON_HOLD';
|
|
11409
11599
|
this.ON_RESUME = 'participant/ON_RESUME';
|
|
11600
|
+
this.ON_BAN = 'participant/ON_BAN';
|
|
11410
11601
|
}
|
|
11411
11602
|
|
|
11412
11603
|
triggerEvent(name , ...args ) {
|
|
@@ -11447,6 +11638,10 @@ class Participant extends Emitter {
|
|
|
11447
11638
|
status.extra = this.extra;
|
|
11448
11639
|
break;
|
|
11449
11640
|
}
|
|
11641
|
+
case this.ON_BAN: {
|
|
11642
|
+
status.banned = true;
|
|
11643
|
+
break;
|
|
11644
|
+
}
|
|
11450
11645
|
}
|
|
11451
11646
|
|
|
11452
11647
|
if (broadcast) {
|
|
@@ -11549,6 +11744,11 @@ class Participant extends Emitter {
|
|
|
11549
11744
|
this.triggerUpdate(this.ON_RESUME, broadcast);
|
|
11550
11745
|
}
|
|
11551
11746
|
|
|
11747
|
+
onBan(broadcast = true) {
|
|
11748
|
+
this.banned = true;
|
|
11749
|
+
this.triggerUpdate(this.ON_BAN, broadcast);
|
|
11750
|
+
}
|
|
11751
|
+
|
|
11552
11752
|
getStatus() {
|
|
11553
11753
|
return {
|
|
11554
11754
|
callId: this.callId,
|
|
@@ -11595,6 +11795,10 @@ class Participant extends Emitter {
|
|
|
11595
11795
|
}
|
|
11596
11796
|
}
|
|
11597
11797
|
|
|
11798
|
+
if (status.banned) {
|
|
11799
|
+
this.onBan(false);
|
|
11800
|
+
}
|
|
11801
|
+
|
|
11598
11802
|
// Poor man's object comparison
|
|
11599
11803
|
if (typeof status.extra !== 'undefined' && JSON.stringify(this.extra) !== JSON.stringify(status.extra)) {
|
|
11600
11804
|
this.extra = { ...this.extra, ...status.extra };
|
|
@@ -11622,6 +11826,28 @@ class Participant extends Emitter {
|
|
|
11622
11826
|
this.streams = streams;
|
|
11623
11827
|
this.videoStreams = streams;
|
|
11624
11828
|
}
|
|
11829
|
+
|
|
11830
|
+
async ban(apiRequestDelay = null) {
|
|
11831
|
+
const { meetingUuid } = this.room;
|
|
11832
|
+
if (!meetingUuid) {
|
|
11833
|
+
throw new Error('Attempting to ban a participant without a `meetingUuid`');
|
|
11834
|
+
}
|
|
11835
|
+
|
|
11836
|
+
// this notifies all that someone is being banned
|
|
11837
|
+
this.onBan(true);
|
|
11838
|
+
|
|
11839
|
+
// this allows to delay the actual ban, in order for the banned participant as well as others to react to the situation
|
|
11840
|
+
if (apiRequestDelay) {
|
|
11841
|
+
await this.delay(apiRequestDelay);
|
|
11842
|
+
}
|
|
11843
|
+
|
|
11844
|
+
// proceed with the actual kick
|
|
11845
|
+
return getApiClient().calld.banMeetingParticipant(meetingUuid, this.callId);
|
|
11846
|
+
}
|
|
11847
|
+
|
|
11848
|
+
async delay(ms ) {
|
|
11849
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
11850
|
+
}
|
|
11625
11851
|
}
|
|
11626
11852
|
|
|
11627
11853
|
//
|
|
@@ -11774,7 +12000,7 @@ class Room$1 extends Emitter {
|
|
|
11774
12000
|
logger$3.info('connecting to room', { extension, audioOnly, room: !!room });
|
|
11775
12001
|
|
|
11776
12002
|
if (!room) {
|
|
11777
|
-
await Wazo.Phone.connect();
|
|
12003
|
+
await Wazo.Phone.connect({ media: constraints });
|
|
11778
12004
|
|
|
11779
12005
|
const withCamera = constraints && !!constraints.video;
|
|
11780
12006
|
|
|
@@ -12219,7 +12445,7 @@ class Room$1 extends Emitter {
|
|
|
12219
12445
|
const participant = this._getParticipantFromCallId(status.callId);
|
|
12220
12446
|
|
|
12221
12447
|
if (participant) {
|
|
12222
|
-
// we're
|
|
12448
|
+
// we're receiving, so no need to broadcast
|
|
12223
12449
|
participant.updateStatus(status, false);
|
|
12224
12450
|
}
|
|
12225
12451
|
break;
|
|
@@ -12486,7 +12712,7 @@ class SipRoom extends Room$1 {
|
|
|
12486
12712
|
logger$2.info('connecting to sip room', { extension, audioOnly, room: !!room });
|
|
12487
12713
|
|
|
12488
12714
|
if (!room) {
|
|
12489
|
-
await Wazo.Phone.connect();
|
|
12715
|
+
await Wazo.Phone.connect({ media: constraints });
|
|
12490
12716
|
|
|
12491
12717
|
const withCamera = constraints && !!constraints.video;
|
|
12492
12718
|
|
package/esm/simple/Websocket.js
CHANGED
|
@@ -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 WebSocketClient$1 = /*#__PURE__*/Object.freeze({
|
|
@@ -1029,6 +1031,7 @@ var WebSocketClient$1 = /*#__PURE__*/Object.freeze({
|
|
|
1029
1031
|
CONFERENCE_ADHOC_PARTICIPANT_LEFT: CONFERENCE_ADHOC_PARTICIPANT_LEFT,
|
|
1030
1032
|
CONFERENCE_ADHOC_DELETED: CONFERENCE_ADHOC_DELETED,
|
|
1031
1033
|
MEETING_USER_PROGRESS: MEETING_USER_PROGRESS,
|
|
1034
|
+
MEETING_USER_GUEST_AUTHORIZATION_CREATED: MEETING_USER_GUEST_AUTHORIZATION_CREATED,
|
|
1032
1035
|
HEARTBEAT_ENGINE_VERSION: HEARTBEAT_ENGINE_VERSION,
|
|
1033
1036
|
'default': WebSocketClient
|
|
1034
1037
|
});
|