@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/simple/Phone.js
CHANGED
|
@@ -3264,6 +3264,70 @@ class ExternalApp {
|
|
|
3264
3264
|
|
|
3265
3265
|
//
|
|
3266
3266
|
|
|
3267
|
+
class MeetingAuthorization {
|
|
3268
|
+
|
|
3269
|
+
|
|
3270
|
+
|
|
3271
|
+
|
|
3272
|
+
|
|
3273
|
+
|
|
3274
|
+
constructor({
|
|
3275
|
+
meetingUuid,
|
|
3276
|
+
uuid,
|
|
3277
|
+
userUuid,
|
|
3278
|
+
userName,
|
|
3279
|
+
} = {}) {
|
|
3280
|
+
this.meetingUuid = meetingUuid;
|
|
3281
|
+
this.uuid = uuid;
|
|
3282
|
+
this.userUuid = userUuid;
|
|
3283
|
+
this.userName = userName;
|
|
3284
|
+
}
|
|
3285
|
+
|
|
3286
|
+
setStatus(status ) {
|
|
3287
|
+
this.status = status;
|
|
3288
|
+
}
|
|
3289
|
+
|
|
3290
|
+
getStatus() {
|
|
3291
|
+
return this.status;
|
|
3292
|
+
}
|
|
3293
|
+
|
|
3294
|
+
static parse(plain ) {
|
|
3295
|
+
const {
|
|
3296
|
+
meeting_uuid: meetingUuid,
|
|
3297
|
+
uuid,
|
|
3298
|
+
guest_uuid: userUuid,
|
|
3299
|
+
guest_name: userName,
|
|
3300
|
+
} = plain;
|
|
3301
|
+
|
|
3302
|
+
return new MeetingAuthorization({
|
|
3303
|
+
meetingUuid,
|
|
3304
|
+
uuid,
|
|
3305
|
+
userUuid,
|
|
3306
|
+
userName,
|
|
3307
|
+
});
|
|
3308
|
+
}
|
|
3309
|
+
|
|
3310
|
+
static parseMany(items ) {
|
|
3311
|
+
if (!items) {
|
|
3312
|
+
return [];
|
|
3313
|
+
}
|
|
3314
|
+
return items.map(MeetingAuthorization.parse);
|
|
3315
|
+
}
|
|
3316
|
+
}
|
|
3317
|
+
|
|
3318
|
+
//
|
|
3319
|
+
|
|
3320
|
+
|
|
3321
|
+
|
|
3322
|
+
|
|
3323
|
+
|
|
3324
|
+
|
|
3325
|
+
|
|
3326
|
+
|
|
3327
|
+
|
|
3328
|
+
|
|
3329
|
+
|
|
3330
|
+
|
|
3267
3331
|
|
|
3268
3332
|
|
|
3269
3333
|
|
|
@@ -3274,6 +3338,7 @@ class ExternalApp {
|
|
|
3274
3338
|
|
|
3275
3339
|
|
|
3276
3340
|
|
|
3341
|
+
|
|
3277
3342
|
|
|
3278
3343
|
|
|
3279
3344
|
class Meeting {
|
|
@@ -3288,6 +3353,8 @@ class Meeting {
|
|
|
3288
3353
|
|
|
3289
3354
|
|
|
3290
3355
|
|
|
3356
|
+
|
|
3357
|
+
|
|
3291
3358
|
|
|
3292
3359
|
static parse(plain ) {
|
|
3293
3360
|
return new Meeting({
|
|
@@ -3300,6 +3367,7 @@ class Meeting {
|
|
|
3300
3367
|
extension: plain.exten,
|
|
3301
3368
|
persistent: plain.persistent,
|
|
3302
3369
|
creationTime: moment__default['default'](plain.creation_time).toDate(),
|
|
3370
|
+
requireAuthorization: plain.require_authorization,
|
|
3303
3371
|
});
|
|
3304
3372
|
}
|
|
3305
3373
|
|
|
@@ -3324,6 +3392,7 @@ class Meeting {
|
|
|
3324
3392
|
extension,
|
|
3325
3393
|
persistent,
|
|
3326
3394
|
creationTime,
|
|
3395
|
+
requireAuthorization,
|
|
3327
3396
|
} = {}) {
|
|
3328
3397
|
this.guestSipAuthorization = guestSipAuthorization;
|
|
3329
3398
|
this.uri = uri;
|
|
@@ -3334,6 +3403,7 @@ class Meeting {
|
|
|
3334
3403
|
this.extension = extension;
|
|
3335
3404
|
this.persistent = persistent;
|
|
3336
3405
|
this.creationTime = creationTime;
|
|
3406
|
+
this.requireAuthorization = requireAuthorization;
|
|
3337
3407
|
|
|
3338
3408
|
// Useful to compare instead of instanceof with minified code
|
|
3339
3409
|
this.type = 'Meeting';
|
|
@@ -3344,8 +3414,32 @@ class Meeting {
|
|
|
3344
3414
|
const [username, secret] = atob(this.guestSipAuthorization).split(':');
|
|
3345
3415
|
return { username, secret };
|
|
3346
3416
|
}
|
|
3417
|
+
|
|
3347
3418
|
}
|
|
3348
3419
|
|
|
3420
|
+
//
|
|
3421
|
+
|
|
3422
|
+
const camelToUnderscore = (key ) => {
|
|
3423
|
+
if (typeof key !== 'string') {
|
|
3424
|
+
throw new Error('Input is not a string');
|
|
3425
|
+
}
|
|
3426
|
+
return key.charAt(0).toLowerCase() + key.substring(1).replace(/([A-Z])/g, '_$1').toLowerCase();
|
|
3427
|
+
};
|
|
3428
|
+
|
|
3429
|
+
//
|
|
3430
|
+
|
|
3431
|
+
const convertKeysFromCamelToUnderscore = (args ) => {
|
|
3432
|
+
if (!args || typeof args !== 'object' || Array.isArray(args)) {
|
|
3433
|
+
throw new Error('Input is not an object');
|
|
3434
|
+
}
|
|
3435
|
+
|
|
3436
|
+
return Object.keys(args).reduce((acc, key) => {
|
|
3437
|
+
acc[camelToUnderscore(key)] = typeof args[key] === 'object' && !Array.isArray(args[key])
|
|
3438
|
+
? convertKeysFromCamelToUnderscore(args[key]) : args[key];
|
|
3439
|
+
return acc;
|
|
3440
|
+
}, {});
|
|
3441
|
+
};
|
|
3442
|
+
|
|
3349
3443
|
/* */
|
|
3350
3444
|
|
|
3351
3445
|
var confdMethods = (client , baseUrl ) => ({
|
|
@@ -3414,8 +3508,18 @@ var confdMethods = (client , baseUrl ) => ({
|
|
|
3414
3508
|
getMyMeetings: () =>
|
|
3415
3509
|
client.get(`${baseUrl}/users/me/meetings`).then(response => Meeting.parseMany(response.items)),
|
|
3416
3510
|
|
|
3417
|
-
createMyMeeting: (
|
|
3418
|
-
client
|
|
3511
|
+
createMyMeeting: (args ) =>
|
|
3512
|
+
client
|
|
3513
|
+
.post(`${baseUrl}/users/me/meetings`, convertKeysFromCamelToUnderscore(args))
|
|
3514
|
+
.then(Meeting.parse),
|
|
3515
|
+
|
|
3516
|
+
updateMyMeeting: (meetingUuid , data ) =>
|
|
3517
|
+
client.put(
|
|
3518
|
+
`${baseUrl}/users/me/meetings/${meetingUuid}`,
|
|
3519
|
+
convertKeysFromCamelToUnderscore(data),
|
|
3520
|
+
null,
|
|
3521
|
+
ApiRequester.successResponseParser,
|
|
3522
|
+
),
|
|
3419
3523
|
|
|
3420
3524
|
deleteMyMeeting: (meetingUuid ) =>
|
|
3421
3525
|
client.delete(`${baseUrl}/users/me/meetings/${meetingUuid}`, null),
|
|
@@ -3423,8 +3527,36 @@ var confdMethods = (client , baseUrl ) => ({
|
|
|
3423
3527
|
getMeeting: (meetingUuid ) =>
|
|
3424
3528
|
client.get(`${baseUrl}/meetings/${meetingUuid}`, null).then(Meeting.parse),
|
|
3425
3529
|
|
|
3530
|
+
meetingAuthorizations: (meetingUuid ) =>
|
|
3531
|
+
client.get(`${baseUrl}/users/me/meetings/${meetingUuid}/authorizations`, null).then(MeetingAuthorization.parseMany),
|
|
3532
|
+
|
|
3533
|
+
meetingAuthorizationReject: (meetingUuid , authorizationUuid ) =>
|
|
3534
|
+
client.put(
|
|
3535
|
+
`${baseUrl}/users/me/meetings/${meetingUuid}/authorizations/${authorizationUuid}/reject`,
|
|
3536
|
+
{},
|
|
3537
|
+
null,
|
|
3538
|
+
ApiRequester.successResponseParser,
|
|
3539
|
+
),
|
|
3540
|
+
|
|
3541
|
+
meetingAuthorizationAccept: (meetingUuid , authorizationUuid ) =>
|
|
3542
|
+
client.put(
|
|
3543
|
+
`${baseUrl}/users/me/meetings/${meetingUuid}/authorizations/${authorizationUuid}/accept`,
|
|
3544
|
+
{},
|
|
3545
|
+
null,
|
|
3546
|
+
ApiRequester.successResponseParser,
|
|
3547
|
+
),
|
|
3548
|
+
|
|
3426
3549
|
guestGetMeeting: (meetingUuid ) =>
|
|
3427
3550
|
client.get(`${baseUrl}/guests/me/meetings/${meetingUuid}`, null).then(Meeting.parse),
|
|
3551
|
+
|
|
3552
|
+
guestAuthorizationRequest: (userUuid , meetingUuid , username ) =>
|
|
3553
|
+
client
|
|
3554
|
+
.post(`${baseUrl}/guests/${userUuid}/meetings/${meetingUuid}/authorizations`, { guest_name: username })
|
|
3555
|
+
.then(MeetingAuthorization.parse),
|
|
3556
|
+
|
|
3557
|
+
guestAuthorizationCheck: (userUuid , meetingUuid , authorizationUuid ) =>
|
|
3558
|
+
client.get(`${baseUrl}/guests/${userUuid}/meetings/${meetingUuid}/authorizations/${authorizationUuid}`, null),
|
|
3559
|
+
|
|
3428
3560
|
});
|
|
3429
3561
|
|
|
3430
3562
|
//
|
|
@@ -5066,6 +5198,14 @@ var calldMethods = (client , baseUrl ) => ({
|
|
|
5066
5198
|
getMeetingParticipantsAsUser: async (meetingUuid ) =>
|
|
5067
5199
|
client.get(`${baseUrl}/users/me/meetings/${meetingUuid}/participants`),
|
|
5068
5200
|
|
|
5201
|
+
banMeetingParticipant: (meetingUuid , participantUuid ) =>
|
|
5202
|
+
client.delete(
|
|
5203
|
+
`${baseUrl}/users/me/meetings/${meetingUuid}/participants/${participantUuid}`,
|
|
5204
|
+
null,
|
|
5205
|
+
null,
|
|
5206
|
+
ApiRequester.successResponseParser,
|
|
5207
|
+
),
|
|
5208
|
+
|
|
5069
5209
|
listTrunks: () => client.get(`${baseUrl}/trunks`),
|
|
5070
5210
|
|
|
5071
5211
|
mute: (callId ) =>
|
|
@@ -5913,6 +6053,24 @@ const fixSdp = (sdp , candidates , forcePort = true)
|
|
|
5913
6053
|
return fixed;
|
|
5914
6054
|
};
|
|
5915
6055
|
|
|
6056
|
+
const addIcesInAllBundles = (sdp ) => {
|
|
6057
|
+
const parsedSdp = sdpParser__default['default'].parse(sdp);
|
|
6058
|
+
|
|
6059
|
+
const mediaWithCandidate = parsedSdp.media.find(media => !!media.candidates);
|
|
6060
|
+
if (!mediaWithCandidate) {
|
|
6061
|
+
return sdp;
|
|
6062
|
+
}
|
|
6063
|
+
|
|
6064
|
+
const { candidates } = mediaWithCandidate;
|
|
6065
|
+
|
|
6066
|
+
parsedSdp.media = parsedSdp.media.map(media => ({
|
|
6067
|
+
...media,
|
|
6068
|
+
candidates: media.candidates || candidates,
|
|
6069
|
+
}));
|
|
6070
|
+
|
|
6071
|
+
return sdpParser__default['default'].write(parsedSdp);
|
|
6072
|
+
};
|
|
6073
|
+
|
|
5916
6074
|
/* global RTCSessionDescriptionInit, navigator */
|
|
5917
6075
|
|
|
5918
6076
|
const wazoLogger = IssueReporter$1 ? IssueReporter$1.loggerFor('webrtc-sdh') : console;
|
|
@@ -6042,7 +6200,10 @@ class WazoSessionDescriptionHandler extends sessionDescriptionHandler.SessionDes
|
|
|
6042
6200
|
|
|
6043
6201
|
// Check if we got ICEs
|
|
6044
6202
|
if (sdp.indexOf('a=candidate') !== -1) {
|
|
6045
|
-
return
|
|
6203
|
+
return {
|
|
6204
|
+
type: description.type,
|
|
6205
|
+
sdp: addIcesInAllBundles(sdp),
|
|
6206
|
+
};
|
|
6046
6207
|
}
|
|
6047
6208
|
|
|
6048
6209
|
wazoLogger.info('No ICE candidates found in SDP, fixing it with gathered ices', this.gatheredCandidates);
|
|
@@ -7502,7 +7663,7 @@ class WebRTCClient extends Emitter {
|
|
|
7502
7663
|
});
|
|
7503
7664
|
}
|
|
7504
7665
|
|
|
7505
|
-
changeAudioInputDevice(id , session , force ) {
|
|
7666
|
+
async changeAudioInputDevice(id , session , force ) {
|
|
7506
7667
|
const currentId = this.getAudioDeviceId();
|
|
7507
7668
|
logger$9.info('setting audio input device', { id, currentId, session: !!session });
|
|
7508
7669
|
|
|
@@ -7510,33 +7671,50 @@ class WebRTCClient extends Emitter {
|
|
|
7510
7671
|
return null;
|
|
7511
7672
|
}
|
|
7512
7673
|
|
|
7674
|
+
// in order to handle an audio track change for default devices
|
|
7675
|
+
// we need the actual id of the device (not 'default')
|
|
7676
|
+
let deviceId = id;
|
|
7677
|
+
if (id === 'default' && navigator.mediaDevices) {
|
|
7678
|
+
const devices = await navigator.mediaDevices.enumerateDevices();
|
|
7679
|
+
const defaultDevice = devices.find(device => device.deviceId === 'default');
|
|
7680
|
+
if (defaultDevice) {
|
|
7681
|
+
const deviceLabel = defaultDevice.label.replace('Default - ', '');
|
|
7682
|
+
const targetDevice = devices.find(device => device.label === deviceLabel);
|
|
7683
|
+
if (targetDevice) {
|
|
7684
|
+
deviceId = targetDevice.deviceId;
|
|
7685
|
+
if (!force && deviceId === currentId) {
|
|
7686
|
+
return null;
|
|
7687
|
+
}
|
|
7688
|
+
}
|
|
7689
|
+
}
|
|
7690
|
+
}
|
|
7691
|
+
|
|
7513
7692
|
// let's update the local audio value
|
|
7514
7693
|
if (this.audio) {
|
|
7515
7694
|
this.audio = {
|
|
7516
7695
|
deviceId: {
|
|
7517
|
-
exact:
|
|
7696
|
+
exact: deviceId,
|
|
7518
7697
|
},
|
|
7519
7698
|
};
|
|
7520
7699
|
}
|
|
7521
7700
|
|
|
7522
|
-
if (session) {
|
|
7701
|
+
if (session && navigator.mediaDevices) {
|
|
7523
7702
|
const sdh = session.sessionDescriptionHandler;
|
|
7524
7703
|
const pc = sdh.peerConnection;
|
|
7525
7704
|
|
|
7526
|
-
|
|
7527
|
-
|
|
7528
|
-
|
|
7529
|
-
|
|
7705
|
+
const constraints = { audio: { deviceId: { exact: deviceId } } };
|
|
7706
|
+
const stream = await navigator.mediaDevices.getUserMedia(constraints);
|
|
7707
|
+
const audioTrack = stream.getAudioTracks()[0];
|
|
7708
|
+
const sender = pc && pc.getSenders().find(s => audioTrack && s && s.track && s.track.kind === audioTrack.kind);
|
|
7530
7709
|
|
|
7531
|
-
|
|
7532
|
-
|
|
7533
|
-
|
|
7534
|
-
}
|
|
7535
|
-
sender.replaceTrack(audioTrack);
|
|
7710
|
+
if (sender) {
|
|
7711
|
+
if (sender.track) {
|
|
7712
|
+
audioTrack.enabled = sender.track.enabled;
|
|
7536
7713
|
}
|
|
7714
|
+
sender.replaceTrack(audioTrack);
|
|
7715
|
+
}
|
|
7537
7716
|
|
|
7538
|
-
|
|
7539
|
-
});
|
|
7717
|
+
return stream;
|
|
7540
7718
|
}
|
|
7541
7719
|
}
|
|
7542
7720
|
|
|
@@ -7556,14 +7734,14 @@ class WebRTCClient extends Emitter {
|
|
|
7556
7734
|
return null;
|
|
7557
7735
|
}
|
|
7558
7736
|
|
|
7559
|
-
// let's
|
|
7560
|
-
|
|
7561
|
-
|
|
7562
|
-
|
|
7563
|
-
|
|
7564
|
-
|
|
7565
|
-
}
|
|
7566
|
-
}
|
|
7737
|
+
// let's make sure we don't lose other video constraints settings -- width, height, frameRate...
|
|
7738
|
+
const videoObject = typeof this.video === 'object' ? this.video : {};
|
|
7739
|
+
this.video = {
|
|
7740
|
+
...videoObject,
|
|
7741
|
+
deviceId: {
|
|
7742
|
+
exact: id,
|
|
7743
|
+
},
|
|
7744
|
+
};
|
|
7567
7745
|
}
|
|
7568
7746
|
|
|
7569
7747
|
changeSessionVideoInputDevice(id , session ) {
|
|
@@ -9165,9 +9343,7 @@ class WebRTCPhone extends Emitter {
|
|
|
9165
9343
|
|
|
9166
9344
|
try {
|
|
9167
9345
|
if (this.currentScreenShare.stream) {
|
|
9168
|
-
this.currentScreenShare.stream.getTracks()
|
|
9169
|
-
.filter(track => track.kind === 'video')
|
|
9170
|
-
.forEach(track => track.stop());
|
|
9346
|
+
this.currentScreenShare.stream.getTracks().forEach(track => track.stop());
|
|
9171
9347
|
}
|
|
9172
9348
|
|
|
9173
9349
|
if (restoreLocalStream) {
|
|
@@ -10841,6 +11017,7 @@ const AGENT_UNPAUSED = 'agent_unpaused';
|
|
|
10841
11017
|
const CONFERENCE_ADHOC_PARTICIPANT_LEFT = 'conference_adhoc_participant_left';
|
|
10842
11018
|
const CONFERENCE_ADHOC_DELETED = 'conference_adhoc_deleted';
|
|
10843
11019
|
const MEETING_USER_PROGRESS = 'meeting_user_progress';
|
|
11020
|
+
const MEETING_USER_GUEST_AUTHORIZATION_CREATED = 'meeting_user_guest_authorization_created';
|
|
10844
11021
|
|
|
10845
11022
|
const BLACKLIST_EVENTS = [
|
|
10846
11023
|
CHAT_MESSAGE_SENT,
|
|
@@ -11192,6 +11369,7 @@ WebSocketClient.eventLists = [
|
|
|
11192
11369
|
CONFERENCE_ADHOC_PARTICIPANT_LEFT,
|
|
11193
11370
|
CONFERENCE_ADHOC_DELETED,
|
|
11194
11371
|
MEETING_USER_PROGRESS,
|
|
11372
|
+
MEETING_USER_GUEST_AUTHORIZATION_CREATED,
|
|
11195
11373
|
];
|
|
11196
11374
|
|
|
11197
11375
|
var WebSocketClient$1 = /*#__PURE__*/Object.freeze({
|
|
@@ -11263,6 +11441,7 @@ var WebSocketClient$1 = /*#__PURE__*/Object.freeze({
|
|
|
11263
11441
|
CONFERENCE_ADHOC_PARTICIPANT_LEFT: CONFERENCE_ADHOC_PARTICIPANT_LEFT,
|
|
11264
11442
|
CONFERENCE_ADHOC_DELETED: CONFERENCE_ADHOC_DELETED,
|
|
11265
11443
|
MEETING_USER_PROGRESS: MEETING_USER_PROGRESS,
|
|
11444
|
+
MEETING_USER_GUEST_AUTHORIZATION_CREATED: MEETING_USER_GUEST_AUTHORIZATION_CREATED,
|
|
11266
11445
|
HEARTBEAT_ENGINE_VERSION: HEARTBEAT_ENGINE_VERSION,
|
|
11267
11446
|
'default': WebSocketClient
|
|
11268
11447
|
});
|
|
@@ -11367,6 +11546,7 @@ class Participant extends Emitter {
|
|
|
11367
11546
|
|
|
11368
11547
|
|
|
11369
11548
|
|
|
11549
|
+
|
|
11370
11550
|
|
|
11371
11551
|
|
|
11372
11552
|
|
|
@@ -11384,6 +11564,7 @@ class Participant extends Emitter {
|
|
|
11384
11564
|
|
|
11385
11565
|
|
|
11386
11566
|
|
|
11567
|
+
|
|
11387
11568
|
|
|
11388
11569
|
/**
|
|
11389
11570
|
* @param room Room The room where the participant is
|
|
@@ -11407,6 +11588,7 @@ class Participant extends Emitter {
|
|
|
11407
11588
|
this.screensharing = false;
|
|
11408
11589
|
this.isOnHold = false;
|
|
11409
11590
|
this.extra = extra;
|
|
11591
|
+
this.banned = false;
|
|
11410
11592
|
|
|
11411
11593
|
this.ON_UPDATED = 'participant/ON_UPDATED';
|
|
11412
11594
|
this.ON_START_TALKING = 'participant/ON_START_TALKING';
|
|
@@ -11423,6 +11605,7 @@ class Participant extends Emitter {
|
|
|
11423
11605
|
this.ON_EXTRA_CHANGE = 'participant/ON_EXTRA_CHANGE';
|
|
11424
11606
|
this.ON_HOLD = 'participant/ON_HOLD';
|
|
11425
11607
|
this.ON_RESUME = 'participant/ON_RESUME';
|
|
11608
|
+
this.ON_BAN = 'participant/ON_BAN';
|
|
11426
11609
|
}
|
|
11427
11610
|
|
|
11428
11611
|
triggerEvent(name , ...args ) {
|
|
@@ -11463,6 +11646,10 @@ class Participant extends Emitter {
|
|
|
11463
11646
|
status.extra = this.extra;
|
|
11464
11647
|
break;
|
|
11465
11648
|
}
|
|
11649
|
+
case this.ON_BAN: {
|
|
11650
|
+
status.banned = true;
|
|
11651
|
+
break;
|
|
11652
|
+
}
|
|
11466
11653
|
}
|
|
11467
11654
|
|
|
11468
11655
|
if (broadcast) {
|
|
@@ -11565,6 +11752,11 @@ class Participant extends Emitter {
|
|
|
11565
11752
|
this.triggerUpdate(this.ON_RESUME, broadcast);
|
|
11566
11753
|
}
|
|
11567
11754
|
|
|
11755
|
+
onBan(broadcast = true) {
|
|
11756
|
+
this.banned = true;
|
|
11757
|
+
this.triggerUpdate(this.ON_BAN, broadcast);
|
|
11758
|
+
}
|
|
11759
|
+
|
|
11568
11760
|
getStatus() {
|
|
11569
11761
|
return {
|
|
11570
11762
|
callId: this.callId,
|
|
@@ -11611,6 +11803,10 @@ class Participant extends Emitter {
|
|
|
11611
11803
|
}
|
|
11612
11804
|
}
|
|
11613
11805
|
|
|
11806
|
+
if (status.banned) {
|
|
11807
|
+
this.onBan(false);
|
|
11808
|
+
}
|
|
11809
|
+
|
|
11614
11810
|
// Poor man's object comparison
|
|
11615
11811
|
if (typeof status.extra !== 'undefined' && JSON.stringify(this.extra) !== JSON.stringify(status.extra)) {
|
|
11616
11812
|
this.extra = { ...this.extra, ...status.extra };
|
|
@@ -11638,6 +11834,28 @@ class Participant extends Emitter {
|
|
|
11638
11834
|
this.streams = streams;
|
|
11639
11835
|
this.videoStreams = streams;
|
|
11640
11836
|
}
|
|
11837
|
+
|
|
11838
|
+
async ban(apiRequestDelay = null) {
|
|
11839
|
+
const { meetingUuid } = this.room;
|
|
11840
|
+
if (!meetingUuid) {
|
|
11841
|
+
throw new Error('Attempting to ban a participant without a `meetingUuid`');
|
|
11842
|
+
}
|
|
11843
|
+
|
|
11844
|
+
// this notifies all that someone is being banned
|
|
11845
|
+
this.onBan(true);
|
|
11846
|
+
|
|
11847
|
+
// this allows to delay the actual ban, in order for the banned participant as well as others to react to the situation
|
|
11848
|
+
if (apiRequestDelay) {
|
|
11849
|
+
await this.delay(apiRequestDelay);
|
|
11850
|
+
}
|
|
11851
|
+
|
|
11852
|
+
// proceed with the actual kick
|
|
11853
|
+
return getApiClient().calld.banMeetingParticipant(meetingUuid, this.callId);
|
|
11854
|
+
}
|
|
11855
|
+
|
|
11856
|
+
async delay(ms ) {
|
|
11857
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
11858
|
+
}
|
|
11641
11859
|
}
|
|
11642
11860
|
|
|
11643
11861
|
//
|
|
@@ -11790,7 +12008,7 @@ class Room$1 extends Emitter {
|
|
|
11790
12008
|
logger$3.info('connecting to room', { extension, audioOnly, room: !!room });
|
|
11791
12009
|
|
|
11792
12010
|
if (!room) {
|
|
11793
|
-
await Wazo.Phone.connect();
|
|
12011
|
+
await Wazo.Phone.connect({ media: constraints });
|
|
11794
12012
|
|
|
11795
12013
|
const withCamera = constraints && !!constraints.video;
|
|
11796
12014
|
|
|
@@ -12235,7 +12453,7 @@ class Room$1 extends Emitter {
|
|
|
12235
12453
|
const participant = this._getParticipantFromCallId(status.callId);
|
|
12236
12454
|
|
|
12237
12455
|
if (participant) {
|
|
12238
|
-
// we're
|
|
12456
|
+
// we're receiving, so no need to broadcast
|
|
12239
12457
|
participant.updateStatus(status, false);
|
|
12240
12458
|
}
|
|
12241
12459
|
break;
|
|
@@ -12502,7 +12720,7 @@ class SipRoom extends Room$1 {
|
|
|
12502
12720
|
logger$2.info('connecting to sip room', { extension, audioOnly, room: !!room });
|
|
12503
12721
|
|
|
12504
12722
|
if (!room) {
|
|
12505
|
-
await Wazo.Phone.connect();
|
|
12723
|
+
await Wazo.Phone.connect({ media: constraints });
|
|
12506
12724
|
|
|
12507
12725
|
const withCamera = constraints && !!constraints.video;
|
|
12508
12726
|
|
package/lib/simple/Websocket.js
CHANGED
|
@@ -615,6 +615,7 @@ const AGENT_UNPAUSED = 'agent_unpaused';
|
|
|
615
615
|
const CONFERENCE_ADHOC_PARTICIPANT_LEFT = 'conference_adhoc_participant_left';
|
|
616
616
|
const CONFERENCE_ADHOC_DELETED = 'conference_adhoc_deleted';
|
|
617
617
|
const MEETING_USER_PROGRESS = 'meeting_user_progress';
|
|
618
|
+
const MEETING_USER_GUEST_AUTHORIZATION_CREATED = 'meeting_user_guest_authorization_created';
|
|
618
619
|
|
|
619
620
|
const BLACKLIST_EVENTS = [
|
|
620
621
|
CHAT_MESSAGE_SENT,
|
|
@@ -966,6 +967,7 @@ WebSocketClient.eventLists = [
|
|
|
966
967
|
CONFERENCE_ADHOC_PARTICIPANT_LEFT,
|
|
967
968
|
CONFERENCE_ADHOC_DELETED,
|
|
968
969
|
MEETING_USER_PROGRESS,
|
|
970
|
+
MEETING_USER_GUEST_AUTHORIZATION_CREATED,
|
|
969
971
|
];
|
|
970
972
|
|
|
971
973
|
var WebSocketClient$1 = /*#__PURE__*/Object.freeze({
|
|
@@ -1037,6 +1039,7 @@ var WebSocketClient$1 = /*#__PURE__*/Object.freeze({
|
|
|
1037
1039
|
CONFERENCE_ADHOC_PARTICIPANT_LEFT: CONFERENCE_ADHOC_PARTICIPANT_LEFT,
|
|
1038
1040
|
CONFERENCE_ADHOC_DELETED: CONFERENCE_ADHOC_DELETED,
|
|
1039
1041
|
MEETING_USER_PROGRESS: MEETING_USER_PROGRESS,
|
|
1042
|
+
MEETING_USER_GUEST_AUTHORIZATION_CREATED: MEETING_USER_GUEST_AUTHORIZATION_CREATED,
|
|
1040
1043
|
HEARTBEAT_ENGINE_VERSION: HEARTBEAT_ENGINE_VERSION,
|
|
1041
1044
|
'default': WebSocketClient
|
|
1042
1045
|
});
|