@wazo/sdk 0.37.18 → 0.37.19
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 +13 -5
- package/esm/__tests__/api-client.test.js +9 -5
- package/esm/__tests__/web-rtc-client.test.js +10 -6
- package/esm/api/agentd.js +2 -2
- package/esm/api/amid.js +2 -2
- package/esm/api/application.js +2 -2
- package/esm/api/auth.js +4 -3
- package/esm/api/call-logd.js +4 -4
- package/esm/api/calld.js +2 -2
- package/esm/api/chatd.js +2 -2
- package/esm/api/confd.js +8 -4
- package/esm/api/ctid-ng.js +2 -2
- package/esm/api/dird.js +2 -2
- package/esm/api/webhookd.js +2 -2
- package/esm/api-client.js +11 -7
- package/esm/checker/Checker.js +11 -7
- package/esm/checker/checks/aor.js +11 -7
- package/esm/checker/checks/api.js +11 -7
- package/esm/checker/checks/ice-ipv4.js +1 -1
- package/esm/checker/checks/index.js +12 -8
- package/esm/checker/checks/symmetric-nat.js +1 -1
- package/esm/checker/checks/wazo-websocket.js +2 -2
- package/esm/checker/checks/webrtc-transport.js +12 -8
- package/esm/checker/checks/webrtc.js +12 -8
- package/esm/domain/AdHocAPIConference.js +11 -7
- package/esm/domain/Agent.js +1 -1
- package/esm/domain/BadResponse.js +1 -1
- package/esm/domain/Call.js +1 -1
- package/esm/domain/CallLog.js +3 -3
- package/esm/domain/CallSession.js +1 -1
- package/esm/domain/ChatMessage.js +1 -1
- package/esm/domain/ChatRoom.js +1 -1
- package/esm/domain/Contact.js +2 -1
- package/esm/domain/Country.js +1 -1
- package/esm/domain/Device/DebugDevice.js +1 -1
- package/esm/domain/ExternalApp.js +1 -1
- package/esm/domain/Features.js +11 -6
- package/esm/domain/ForwardOption.js +2 -1
- package/esm/domain/IndirectTransfer.js +1 -1
- package/esm/domain/Line.js +1 -1
- package/esm/domain/Meeting.js +7 -3
- package/esm/domain/NotificationOptions.js +1 -1
- package/esm/domain/Phone/CTIPhone.js +12 -7
- package/esm/domain/Phone/WebRTCPhone.js +3 -2
- package/esm/domain/Profile.js +2 -1
- package/esm/domain/Recording.js +2 -2
- package/esm/domain/Relocation.js +1 -1
- package/esm/domain/Room.js +1 -1
- package/esm/domain/ServerError.js +1 -1
- package/esm/domain/Session.js +2 -2
- package/esm/domain/SipLine.js +1 -1
- package/esm/domain/Subscription.js +1 -1
- package/esm/domain/SwitchboardCall.js +1 -1
- package/esm/domain/Voicemail.js +1 -1
- package/esm/domain/__tests__/CallLog.test.js +2 -2
- package/esm/index.js +12 -8
- package/esm/lib/WazoSessionDescriptionHandler.js +3 -2
- package/esm/service/CallApi.js +11 -7
- package/esm/service/IssueReporter.js +2 -2
- package/esm/service/__tests__/IssueReporter.test.js +1 -1
- package/esm/service/getApiClient.js +12 -7
- package/esm/simple/Auth.js +12 -7
- package/esm/simple/Configuration.js +11 -7
- package/esm/simple/Directory.js +10 -6
- package/esm/simple/Phone.js +11 -7
- package/esm/simple/Websocket.js +2 -2
- package/esm/simple/index.js +11 -7
- package/esm/simple/room/LocalParticipant.js +24 -24
- package/esm/simple/room/Participant.js +23 -21
- package/esm/simple/room/RemoteParticipant.js +25 -25
- package/esm/simple/room/Room.js +24 -21
- package/esm/simple/room/SipRoom.js +12 -10
- package/esm/simple/room/Stream.js +12 -10
- package/esm/simple/room/__tests__/RemoteParticipant.test.js +10 -6
- package/esm/simple/utils.js +10 -6
- package/esm/utils/Emitter.js +1 -1
- package/esm/utils/Heartbeat.js +1 -1
- package/esm/utils/__tests__/api-requester.test.js +1 -1
- package/esm/utils/api-requester.js +3 -2
- package/esm/utils/compare-version.js +1 -1
- package/esm/utils/isMobile.js +1 -1
- package/esm/utils/new-from.js +1 -1
- package/esm/utils/once.js +1 -1
- package/esm/utils/update-from.js +1 -1
- package/esm/web-rtc-client.js +13 -8
- package/esm/websocket-client.js +3 -2
- package/lib/__tests__/api-client.test.js +18 -14
- package/lib/__tests__/web-rtc-client.test.js +27 -23
- package/lib/api/agentd.js +2 -2
- package/lib/api/amid.js +2 -2
- package/lib/api/application.js +2 -2
- package/lib/api/auth.js +3 -3
- package/lib/api/call-logd.js +9 -9
- package/lib/api/calld.js +5 -5
- package/lib/api/chatd.js +3 -3
- package/lib/api/confd.js +8 -4
- package/lib/api/ctid-ng.js +5 -5
- package/lib/api/dird.js +2 -2
- package/lib/api/webhookd.js +2 -2
- package/lib/api-client.js +18 -14
- package/lib/checker/Checker.js +28 -24
- package/lib/checker/checks/aor.js +18 -14
- package/lib/checker/checks/api.js +18 -14
- package/lib/checker/checks/index.js +28 -24
- package/lib/checker/checks/wazo-websocket.js +4 -4
- package/lib/checker/checks/webrtc-transport.js +27 -23
- package/lib/checker/checks/webrtc.js +27 -23
- package/lib/domain/AdHocAPIConference.js +18 -14
- package/lib/domain/Call.js +1 -1
- package/lib/domain/CallLog.js +7 -7
- package/lib/domain/ChatMessage.js +1 -1
- package/lib/domain/Contact.js +1 -1
- package/lib/domain/Features.js +19 -15
- package/lib/domain/ForwardOption.js +1 -1
- package/lib/domain/Meeting.js +6 -2
- package/lib/domain/Phone/CTIPhone.js +20 -16
- package/lib/domain/Phone/WebRTCPhone.js +4 -4
- package/lib/domain/Profile.js +1 -1
- package/lib/domain/Recording.js +3 -3
- package/lib/domain/Voicemail.js +1 -1
- package/lib/domain/__tests__/Call.test.js +1 -1
- package/lib/domain/__tests__/CallLog.test.js +13 -13
- package/lib/domain/__tests__/Voicemail.test.js +1 -1
- package/lib/index.js +31 -27
- package/lib/lib/WazoSessionDescriptionHandler.js +7 -7
- package/lib/service/CallApi.js +18 -14
- package/lib/service/IssueReporter.js +2 -2
- package/lib/service/__tests__/IssueReporter.test.js +2 -2
- package/lib/service/getApiClient.js +19 -15
- package/lib/simple/Auth.js +30 -26
- package/lib/simple/Configuration.js +29 -25
- package/lib/simple/Directory.js +18 -14
- package/lib/simple/Phone.js +29 -25
- package/lib/simple/Websocket.js +4 -4
- package/lib/simple/index.js +29 -25
- package/lib/simple/room/LocalParticipant.js +43 -43
- package/lib/simple/room/Participant.js +41 -39
- package/lib/simple/room/RemoteParticipant.js +44 -44
- package/lib/simple/room/Room.js +42 -40
- package/lib/simple/room/SipRoom.js +31 -29
- package/lib/simple/room/Stream.js +31 -29
- package/lib/simple/room/__tests__/RemoteParticipant.test.js +29 -25
- package/lib/simple/utils.js +29 -25
- package/lib/utils/Emitter.js +1 -1
- package/lib/utils/PhoneNumberUtil.js +2 -2
- package/lib/utils/__tests__/PhoneNumberUtil.test.js +2 -2
- package/lib/utils/__tests__/api-requester.test.js +2 -2
- package/lib/utils/__tests__/sdp.test.js +12 -12
- package/lib/utils/api-requester.js +3 -3
- package/lib/utils/sdp.js +10 -10
- package/lib/web-rtc-client.js +28 -24
- package/lib/websocket-client.js +5 -5
- package/package.json +1 -1
- package/src/domain/CallLog.js +1 -1
- package/src/domain/Meeting.js +6 -2
- package/src/domain/Recording.js +1 -1
- package/src/service/IssueReporter.js +1 -1
- package/src/web-rtc-client.js +1 -1
|
@@ -233,7 +233,7 @@ class IssueReporter {
|
|
|
233
233
|
args.splice(1, 1);
|
|
234
234
|
}
|
|
235
235
|
|
|
236
|
-
const date = moment__default[
|
|
236
|
+
const date = moment__default['default']().format('YYYY-MM-DD HH:mm:ss.SSS');
|
|
237
237
|
const message = args.join(', ');
|
|
238
238
|
let consoleMessage = message;
|
|
239
239
|
|
|
@@ -410,7 +410,7 @@ class IssueReporter {
|
|
|
410
410
|
payload._retry = retry + 1;
|
|
411
411
|
}
|
|
412
412
|
|
|
413
|
-
this._sendDebugToGrafana(
|
|
413
|
+
this._sendDebugToGrafana(payload, retry + 1);
|
|
414
414
|
}, 5000 + retry * 1000);
|
|
415
415
|
});
|
|
416
416
|
}
|
|
@@ -2613,7 +2613,8 @@ class ExternalApp {
|
|
|
2613
2613
|
|
|
2614
2614
|
|
|
2615
2615
|
|
|
2616
|
-
|
|
2616
|
+
|
|
2617
|
+
|
|
2617
2618
|
|
|
2618
2619
|
|
|
2619
2620
|
class Meeting {
|
|
@@ -2625,6 +2626,7 @@ class Meeting {
|
|
|
2625
2626
|
|
|
2626
2627
|
|
|
2627
2628
|
|
|
2629
|
+
|
|
2628
2630
|
|
|
2629
2631
|
|
|
2630
2632
|
static parse(plain ) {
|
|
@@ -2636,6 +2638,7 @@ class Meeting {
|
|
|
2636
2638
|
port: plain.port,
|
|
2637
2639
|
uuid: plain.uuid,
|
|
2638
2640
|
number: plain.number,
|
|
2641
|
+
persistent: plain.persistent,
|
|
2639
2642
|
});
|
|
2640
2643
|
}
|
|
2641
2644
|
|
|
@@ -2643,7 +2646,7 @@ class Meeting {
|
|
|
2643
2646
|
return newFrom(meeting, Meeting);
|
|
2644
2647
|
}
|
|
2645
2648
|
|
|
2646
|
-
constructor({ uuid, name, guestSipAuthorization, ownerUuids, port, uri, number } = {}) {
|
|
2649
|
+
constructor({ uuid, name, guestSipAuthorization, ownerUuids, port, uri, number, persistent } = {}) {
|
|
2647
2650
|
this.guestSipAuthorization = guestSipAuthorization;
|
|
2648
2651
|
this.uri = uri;
|
|
2649
2652
|
this.name = name;
|
|
@@ -2651,6 +2654,7 @@ class Meeting {
|
|
|
2651
2654
|
this.port = port;
|
|
2652
2655
|
this.uuid = uuid;
|
|
2653
2656
|
this.number = number;
|
|
2657
|
+
this.persistent = persistent;
|
|
2654
2658
|
|
|
2655
2659
|
// Useful to compare instead of instanceof with minified code
|
|
2656
2660
|
this.type = 'Meeting';
|
|
@@ -2831,7 +2835,7 @@ class ChatMessage {
|
|
|
2831
2835
|
static parse(plain ) {
|
|
2832
2836
|
return new ChatMessage({
|
|
2833
2837
|
uuid: plain.uuid,
|
|
2834
|
-
date: moment__default[
|
|
2838
|
+
date: moment__default['default'](plain.created_at).toDate(),
|
|
2835
2839
|
content: plain.content,
|
|
2836
2840
|
alias: plain.alias,
|
|
2837
2841
|
userUuid: plain.user_uuid,
|
|
@@ -2923,7 +2927,7 @@ class Voicemail {
|
|
|
2923
2927
|
static parse(plain ) {
|
|
2924
2928
|
return new Voicemail({
|
|
2925
2929
|
id: plain.id,
|
|
2926
|
-
date: moment__default[
|
|
2930
|
+
date: moment__default['default'](plain.timestamp * 1000).toDate(),
|
|
2927
2931
|
duration: plain.duration * 1000,
|
|
2928
2932
|
caller: {
|
|
2929
2933
|
name: plain.caller_id_name,
|
|
@@ -3060,7 +3064,7 @@ class Call {
|
|
|
3060
3064
|
onHold: plain.on_hold,
|
|
3061
3065
|
status: plain.status,
|
|
3062
3066
|
lineId: plain.line_id,
|
|
3063
|
-
startingTime: moment__default[
|
|
3067
|
+
startingTime: moment__default['default'](plain.creation_time).toDate(),
|
|
3064
3068
|
talkingToIds: Object.keys(plain.talking_to || {}),
|
|
3065
3069
|
recording: plain.record_state === RECORD_STATE_ACTIVE,
|
|
3066
3070
|
});
|
|
@@ -3195,7 +3199,7 @@ class Emitter {
|
|
|
3195
3199
|
|
|
3196
3200
|
|
|
3197
3201
|
constructor() {
|
|
3198
|
-
this.eventEmitter = new EventEmitter__default[
|
|
3202
|
+
this.eventEmitter = new EventEmitter__default['default']();
|
|
3199
3203
|
}
|
|
3200
3204
|
|
|
3201
3205
|
on(event , callback ) {
|
|
@@ -3240,7 +3244,7 @@ class Recording {
|
|
|
3240
3244
|
|
|
3241
3245
|
|
|
3242
3246
|
|
|
3243
|
-
static parseMany(recordings
|
|
3247
|
+
static parseMany(recordings = []) {
|
|
3244
3248
|
return recordings.map(item => Recording.parse(item));
|
|
3245
3249
|
}
|
|
3246
3250
|
|
|
@@ -3248,8 +3252,8 @@ class Recording {
|
|
|
3248
3252
|
return new Recording({
|
|
3249
3253
|
deleted: plain.deleted,
|
|
3250
3254
|
fileName: plain.filename,
|
|
3251
|
-
end: plain.end_time ? moment__default[
|
|
3252
|
-
start: moment__default[
|
|
3255
|
+
end: plain.end_time ? moment__default['default'](plain.end_time).toDate() : null,
|
|
3256
|
+
start: moment__default['default'](plain.start_time).toDate(),
|
|
3253
3257
|
uuid: plain.uuid,
|
|
3254
3258
|
});
|
|
3255
3259
|
}
|
|
@@ -3347,7 +3351,7 @@ class CallLog {
|
|
|
3347
3351
|
|
|
3348
3352
|
static parse(plain ) {
|
|
3349
3353
|
return new CallLog({
|
|
3350
|
-
answer: plain.answer ? moment__default[
|
|
3354
|
+
answer: plain.answer ? moment__default['default'](plain.answer).toDate() : null,
|
|
3351
3355
|
answered: plain.answered,
|
|
3352
3356
|
callDirection: plain.call_direction,
|
|
3353
3357
|
destination: {
|
|
@@ -3364,9 +3368,9 @@ class CallLog {
|
|
|
3364
3368
|
},
|
|
3365
3369
|
id: plain.id,
|
|
3366
3370
|
duration: (plain.duration || 0) * 1000, // duration is in seconds
|
|
3367
|
-
start: moment__default[
|
|
3368
|
-
end: plain.end ? moment__default[
|
|
3369
|
-
recordings: Recording.parseMany(plain.recordings),
|
|
3371
|
+
start: moment__default['default'](plain.start).toDate(),
|
|
3372
|
+
end: plain.end ? moment__default['default'](plain.end).toDate() : null,
|
|
3373
|
+
recordings: Recording.parseMany(plain.recordings || []),
|
|
3370
3374
|
});
|
|
3371
3375
|
}
|
|
3372
3376
|
|
|
@@ -4968,7 +4972,7 @@ class WebSocketClient extends Emitter {
|
|
|
4968
4972
|
|
|
4969
4973
|
connect() {
|
|
4970
4974
|
logger$1.info('connect method started', { host: this.host, token: this.token });
|
|
4971
|
-
this.socket = new ReconnectingWebSocket__default[
|
|
4975
|
+
this.socket = new ReconnectingWebSocket__default['default'](this._getUrl.bind(this), [], this.options);
|
|
4972
4976
|
if (this.options.binaryType) {
|
|
4973
4977
|
this.socket.binaryType = this.options.binaryType;
|
|
4974
4978
|
}
|
|
@@ -5305,7 +5309,7 @@ const parseCandidate$1 = (candidate ) => {
|
|
|
5305
5309
|
if (!candidate) {
|
|
5306
5310
|
return null;
|
|
5307
5311
|
}
|
|
5308
|
-
const result = sdpParser__default[
|
|
5312
|
+
const result = sdpParser__default['default'].parse(candidate.indexOf('a=') === 0 ? candidate : `a=${candidate}`);
|
|
5309
5313
|
|
|
5310
5314
|
return result.candidates ? result.candidates[0] : null;
|
|
5311
5315
|
};
|
|
@@ -5319,7 +5323,7 @@ const areCandidateValid = (candidates ) =>
|
|
|
5319
5323
|
.length > 0;
|
|
5320
5324
|
|
|
5321
5325
|
const getVideoDirection = (sdp ) => {
|
|
5322
|
-
const parsedSdp = sdpParser__default[
|
|
5326
|
+
const parsedSdp = sdpParser__default['default'].parse(sdp);
|
|
5323
5327
|
const videoMedia = parsedSdp.media.find(media => media.type === 'video');
|
|
5324
5328
|
if (!videoMedia) {
|
|
5325
5329
|
return null;
|
|
@@ -5333,14 +5337,14 @@ const hasAnActiveVideo = (sdp ) => {
|
|
|
5333
5337
|
return false;
|
|
5334
5338
|
}
|
|
5335
5339
|
|
|
5336
|
-
const parsedSdp = sdpParser__default[
|
|
5340
|
+
const parsedSdp = sdpParser__default['default'].parse(sdp);
|
|
5337
5341
|
|
|
5338
5342
|
return !!parsedSdp.media.find(media =>
|
|
5339
5343
|
media.type === 'video' && media.port > 10 && (!media.direction || media.direction !== 'inactive'));
|
|
5340
5344
|
};
|
|
5341
5345
|
|
|
5342
5346
|
const fixSdp = (sdp , candidates , forcePort = true) => {
|
|
5343
|
-
const parsedSdp = sdpParser__default[
|
|
5347
|
+
const parsedSdp = sdpParser__default['default'].parse(sdp);
|
|
5344
5348
|
const mainCandidate = getSrflxOrRelay(candidates)[0];
|
|
5345
5349
|
const ip = mainCandidate ? mainCandidate.ip : null;
|
|
5346
5350
|
|
|
@@ -5358,7 +5362,7 @@ const fixSdp = (sdp , candidates , forcePort = true)
|
|
|
5358
5362
|
};
|
|
5359
5363
|
});
|
|
5360
5364
|
|
|
5361
|
-
let fixed = sdpParser__default[
|
|
5365
|
+
let fixed = sdpParser__default['default'].write(parsedSdp);
|
|
5362
5366
|
|
|
5363
5367
|
if (ip) {
|
|
5364
5368
|
fixed = fixed.replace(/IN IP4 0.0.0.0/g, `IN IP4 ${ip}`);
|
|
@@ -5404,7 +5408,7 @@ class WazoSessionDescriptionHandler extends sessionDescriptionHandler.SessionDes
|
|
|
5404
5408
|
) {
|
|
5405
5409
|
super(logger, mediaStreamFactory, sessionDescriptionHandlerConfiguration);
|
|
5406
5410
|
|
|
5407
|
-
this.eventEmitter = new EventEmitter__default[
|
|
5411
|
+
this.eventEmitter = new EventEmitter__default['default']();
|
|
5408
5412
|
this.isWeb = isWeb;
|
|
5409
5413
|
this.session = session;
|
|
5410
5414
|
}
|
|
@@ -6623,7 +6627,7 @@ class WebRTCClient extends Emitter {
|
|
|
6623
6627
|
// We search for the last transceiver without `video-` in the mid (video- means remote transceiver)
|
|
6624
6628
|
const transceivers = pc.getTransceivers();
|
|
6625
6629
|
const transceiverIdx = lastIndexOf(transceivers, transceiver =>
|
|
6626
|
-
transceiver.sender.track === null && transceiver.mid.indexOf('video') === -1);
|
|
6630
|
+
transceiver.sender.track === null && transceiver.mid && transceiver.mid.indexOf('video') === -1);
|
|
6627
6631
|
|
|
6628
6632
|
videoSender = transceiverIdx !== -1 ? transceivers[transceiverIdx].sender : null;
|
|
6629
6633
|
} else {
|
|
@@ -7828,7 +7832,7 @@ class WebRTCClient extends Emitter {
|
|
|
7828
7832
|
}
|
|
7829
7833
|
const sessionId = this.getSipSessionId(session);
|
|
7830
7834
|
|
|
7831
|
-
getStats__default[
|
|
7835
|
+
getStats__default['default'](pc, (result ) => {
|
|
7832
7836
|
const { results, internal, nomore, ...stats } = result;
|
|
7833
7837
|
this.statsIntervals[sessionId] = nomore;
|
|
7834
7838
|
|
|
@@ -17,7 +17,7 @@ class Emitter {
|
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
constructor() {
|
|
20
|
-
this.eventEmitter = new EventEmitter__default[
|
|
20
|
+
this.eventEmitter = new EventEmitter__default['default']();
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
on(event , callback ) {
|
|
@@ -204,7 +204,7 @@ class IssueReporter {
|
|
|
204
204
|
args.splice(1, 1);
|
|
205
205
|
}
|
|
206
206
|
|
|
207
|
-
const date = moment__default[
|
|
207
|
+
const date = moment__default['default']().format('YYYY-MM-DD HH:mm:ss.SSS');
|
|
208
208
|
const message = args.join(', ');
|
|
209
209
|
let consoleMessage = message;
|
|
210
210
|
|
|
@@ -381,7 +381,7 @@ class IssueReporter {
|
|
|
381
381
|
payload._retry = retry + 1;
|
|
382
382
|
}
|
|
383
383
|
|
|
384
|
-
this._sendDebugToGrafana(
|
|
384
|
+
this._sendDebugToGrafana(payload, retry + 1);
|
|
385
385
|
}, 5000 + retry * 1000);
|
|
386
386
|
});
|
|
387
387
|
}
|
|
@@ -645,7 +645,7 @@ class WebSocketClient extends Emitter {
|
|
|
645
645
|
|
|
646
646
|
connect() {
|
|
647
647
|
logger.info('connect method started', { host: this.host, token: this.token });
|
|
648
|
-
this.socket = new ReconnectingWebSocket__default[
|
|
648
|
+
this.socket = new ReconnectingWebSocket__default['default'](this._getUrl.bind(this), [], this.options);
|
|
649
649
|
if (this.options.binaryType) {
|
|
650
650
|
this.socket.binaryType = this.options.binaryType;
|
|
651
651
|
}
|
|
@@ -496,7 +496,7 @@ class IssueReporter {
|
|
|
496
496
|
args.splice(1, 1);
|
|
497
497
|
}
|
|
498
498
|
|
|
499
|
-
const date = moment__default[
|
|
499
|
+
const date = moment__default['default']().format('YYYY-MM-DD HH:mm:ss.SSS');
|
|
500
500
|
const message = args.join(', ');
|
|
501
501
|
let consoleMessage = message;
|
|
502
502
|
|
|
@@ -673,7 +673,7 @@ class IssueReporter {
|
|
|
673
673
|
payload._retry = retry + 1;
|
|
674
674
|
}
|
|
675
675
|
|
|
676
|
-
this._sendDebugToGrafana(
|
|
676
|
+
this._sendDebugToGrafana(payload, retry + 1);
|
|
677
677
|
}, 5000 + retry * 1000);
|
|
678
678
|
});
|
|
679
679
|
}
|
|
@@ -701,7 +701,7 @@ const parseCandidate = (candidate ) => {
|
|
|
701
701
|
if (!candidate) {
|
|
702
702
|
return null;
|
|
703
703
|
}
|
|
704
|
-
const result = sdpParser__default[
|
|
704
|
+
const result = sdpParser__default['default'].parse(candidate.indexOf('a=') === 0 ? candidate : `a=${candidate}`);
|
|
705
705
|
|
|
706
706
|
return result.candidates ? result.candidates[0] : null;
|
|
707
707
|
};
|
|
@@ -715,7 +715,7 @@ const areCandidateValid = (candidates ) =>
|
|
|
715
715
|
.length > 0;
|
|
716
716
|
|
|
717
717
|
const getVideoDirection = (sdp ) => {
|
|
718
|
-
const parsedSdp = sdpParser__default[
|
|
718
|
+
const parsedSdp = sdpParser__default['default'].parse(sdp);
|
|
719
719
|
const videoMedia = parsedSdp.media.find(media => media.type === 'video');
|
|
720
720
|
if (!videoMedia) {
|
|
721
721
|
return null;
|
|
@@ -729,14 +729,14 @@ const hasAnActiveVideo = (sdp ) => {
|
|
|
729
729
|
return false;
|
|
730
730
|
}
|
|
731
731
|
|
|
732
|
-
const parsedSdp = sdpParser__default[
|
|
732
|
+
const parsedSdp = sdpParser__default['default'].parse(sdp);
|
|
733
733
|
|
|
734
734
|
return !!parsedSdp.media.find(media =>
|
|
735
735
|
media.type === 'video' && media.port > 10 && (!media.direction || media.direction !== 'inactive'));
|
|
736
736
|
};
|
|
737
737
|
|
|
738
738
|
const fixSdp = (sdp , candidates , forcePort = true) => {
|
|
739
|
-
const parsedSdp = sdpParser__default[
|
|
739
|
+
const parsedSdp = sdpParser__default['default'].parse(sdp);
|
|
740
740
|
const mainCandidate = getSrflxOrRelay(candidates)[0];
|
|
741
741
|
const ip = mainCandidate ? mainCandidate.ip : null;
|
|
742
742
|
|
|
@@ -754,7 +754,7 @@ const fixSdp = (sdp , candidates , forcePort = true)
|
|
|
754
754
|
};
|
|
755
755
|
});
|
|
756
756
|
|
|
757
|
-
let fixed = sdpParser__default[
|
|
757
|
+
let fixed = sdpParser__default['default'].write(parsedSdp);
|
|
758
758
|
|
|
759
759
|
if (ip) {
|
|
760
760
|
fixed = fixed.replace(/IN IP4 0.0.0.0/g, `IN IP4 ${ip}`);
|
|
@@ -800,7 +800,7 @@ class WazoSessionDescriptionHandler extends sessionDescriptionHandler.SessionDes
|
|
|
800
800
|
) {
|
|
801
801
|
super(logger, mediaStreamFactory, sessionDescriptionHandlerConfiguration);
|
|
802
802
|
|
|
803
|
-
this.eventEmitter = new EventEmitter__default[
|
|
803
|
+
this.eventEmitter = new EventEmitter__default['default']();
|
|
804
804
|
this.isWeb = isWeb;
|
|
805
805
|
this.session = session;
|
|
806
806
|
}
|
|
@@ -1239,7 +1239,7 @@ class Emitter {
|
|
|
1239
1239
|
|
|
1240
1240
|
|
|
1241
1241
|
constructor() {
|
|
1242
|
-
this.eventEmitter = new EventEmitter__default[
|
|
1242
|
+
this.eventEmitter = new EventEmitter__default['default']();
|
|
1243
1243
|
}
|
|
1244
1244
|
|
|
1245
1245
|
on(event , callback ) {
|
|
@@ -3175,7 +3175,8 @@ class ExternalApp {
|
|
|
3175
3175
|
|
|
3176
3176
|
|
|
3177
3177
|
|
|
3178
|
-
|
|
3178
|
+
|
|
3179
|
+
|
|
3179
3180
|
|
|
3180
3181
|
|
|
3181
3182
|
class Meeting {
|
|
@@ -3187,6 +3188,7 @@ class Meeting {
|
|
|
3187
3188
|
|
|
3188
3189
|
|
|
3189
3190
|
|
|
3191
|
+
|
|
3190
3192
|
|
|
3191
3193
|
|
|
3192
3194
|
static parse(plain ) {
|
|
@@ -3198,6 +3200,7 @@ class Meeting {
|
|
|
3198
3200
|
port: plain.port,
|
|
3199
3201
|
uuid: plain.uuid,
|
|
3200
3202
|
number: plain.number,
|
|
3203
|
+
persistent: plain.persistent,
|
|
3201
3204
|
});
|
|
3202
3205
|
}
|
|
3203
3206
|
|
|
@@ -3205,7 +3208,7 @@ class Meeting {
|
|
|
3205
3208
|
return newFrom(meeting, Meeting);
|
|
3206
3209
|
}
|
|
3207
3210
|
|
|
3208
|
-
constructor({ uuid, name, guestSipAuthorization, ownerUuids, port, uri, number } = {}) {
|
|
3211
|
+
constructor({ uuid, name, guestSipAuthorization, ownerUuids, port, uri, number, persistent } = {}) {
|
|
3209
3212
|
this.guestSipAuthorization = guestSipAuthorization;
|
|
3210
3213
|
this.uri = uri;
|
|
3211
3214
|
this.name = name;
|
|
@@ -3213,6 +3216,7 @@ class Meeting {
|
|
|
3213
3216
|
this.port = port;
|
|
3214
3217
|
this.uuid = uuid;
|
|
3215
3218
|
this.number = number;
|
|
3219
|
+
this.persistent = persistent;
|
|
3216
3220
|
|
|
3217
3221
|
// Useful to compare instead of instanceof with minified code
|
|
3218
3222
|
this.type = 'Meeting';
|
|
@@ -3393,7 +3397,7 @@ class ChatMessage {
|
|
|
3393
3397
|
static parse(plain ) {
|
|
3394
3398
|
return new ChatMessage({
|
|
3395
3399
|
uuid: plain.uuid,
|
|
3396
|
-
date: moment__default[
|
|
3400
|
+
date: moment__default['default'](plain.created_at).toDate(),
|
|
3397
3401
|
content: plain.content,
|
|
3398
3402
|
alias: plain.alias,
|
|
3399
3403
|
userUuid: plain.user_uuid,
|
|
@@ -3485,7 +3489,7 @@ class Voicemail {
|
|
|
3485
3489
|
static parse(plain ) {
|
|
3486
3490
|
return new Voicemail({
|
|
3487
3491
|
id: plain.id,
|
|
3488
|
-
date: moment__default[
|
|
3492
|
+
date: moment__default['default'](plain.timestamp * 1000).toDate(),
|
|
3489
3493
|
duration: plain.duration * 1000,
|
|
3490
3494
|
caller: {
|
|
3491
3495
|
name: plain.caller_id_name,
|
|
@@ -3622,7 +3626,7 @@ class Call {
|
|
|
3622
3626
|
onHold: plain.on_hold,
|
|
3623
3627
|
status: plain.status,
|
|
3624
3628
|
lineId: plain.line_id,
|
|
3625
|
-
startingTime: moment__default[
|
|
3629
|
+
startingTime: moment__default['default'](plain.creation_time).toDate(),
|
|
3626
3630
|
talkingToIds: Object.keys(plain.talking_to || {}),
|
|
3627
3631
|
recording: plain.record_state === RECORD_STATE_ACTIVE,
|
|
3628
3632
|
});
|
|
@@ -3776,7 +3780,7 @@ class Recording {
|
|
|
3776
3780
|
|
|
3777
3781
|
|
|
3778
3782
|
|
|
3779
|
-
static parseMany(recordings
|
|
3783
|
+
static parseMany(recordings = []) {
|
|
3780
3784
|
return recordings.map(item => Recording.parse(item));
|
|
3781
3785
|
}
|
|
3782
3786
|
|
|
@@ -3784,8 +3788,8 @@ class Recording {
|
|
|
3784
3788
|
return new Recording({
|
|
3785
3789
|
deleted: plain.deleted,
|
|
3786
3790
|
fileName: plain.filename,
|
|
3787
|
-
end: plain.end_time ? moment__default[
|
|
3788
|
-
start: moment__default[
|
|
3791
|
+
end: plain.end_time ? moment__default['default'](plain.end_time).toDate() : null,
|
|
3792
|
+
start: moment__default['default'](plain.start_time).toDate(),
|
|
3789
3793
|
uuid: plain.uuid,
|
|
3790
3794
|
});
|
|
3791
3795
|
}
|
|
@@ -3883,7 +3887,7 @@ class CallLog {
|
|
|
3883
3887
|
|
|
3884
3888
|
static parse(plain ) {
|
|
3885
3889
|
return new CallLog({
|
|
3886
|
-
answer: plain.answer ? moment__default[
|
|
3890
|
+
answer: plain.answer ? moment__default['default'](plain.answer).toDate() : null,
|
|
3887
3891
|
answered: plain.answered,
|
|
3888
3892
|
callDirection: plain.call_direction,
|
|
3889
3893
|
destination: {
|
|
@@ -3900,9 +3904,9 @@ class CallLog {
|
|
|
3900
3904
|
},
|
|
3901
3905
|
id: plain.id,
|
|
3902
3906
|
duration: (plain.duration || 0) * 1000, // duration is in seconds
|
|
3903
|
-
start: moment__default[
|
|
3904
|
-
end: plain.end ? moment__default[
|
|
3905
|
-
recordings: Recording.parseMany(plain.recordings),
|
|
3907
|
+
start: moment__default['default'](plain.start).toDate(),
|
|
3908
|
+
end: plain.end ? moment__default['default'](plain.end).toDate() : null,
|
|
3909
|
+
recordings: Recording.parseMany(plain.recordings || []),
|
|
3906
3910
|
});
|
|
3907
3911
|
}
|
|
3908
3912
|
|
|
@@ -6039,7 +6043,7 @@ class WebRTCClient extends Emitter {
|
|
|
6039
6043
|
// We search for the last transceiver without `video-` in the mid (video- means remote transceiver)
|
|
6040
6044
|
const transceivers = pc.getTransceivers();
|
|
6041
6045
|
const transceiverIdx = lastIndexOf(transceivers, transceiver =>
|
|
6042
|
-
transceiver.sender.track === null && transceiver.mid.indexOf('video') === -1);
|
|
6046
|
+
transceiver.sender.track === null && transceiver.mid && transceiver.mid.indexOf('video') === -1);
|
|
6043
6047
|
|
|
6044
6048
|
videoSender = transceiverIdx !== -1 ? transceivers[transceiverIdx].sender : null;
|
|
6045
6049
|
} else {
|
|
@@ -7244,7 +7248,7 @@ class WebRTCClient extends Emitter {
|
|
|
7244
7248
|
}
|
|
7245
7249
|
const sessionId = this.getSipSessionId(session);
|
|
7246
7250
|
|
|
7247
|
-
getStats__default[
|
|
7251
|
+
getStats__default['default'](pc, (result ) => {
|
|
7248
7252
|
const { results, internal, nomore, ...stats } = result;
|
|
7249
7253
|
this.statsIntervals[sessionId] = nomore;
|
|
7250
7254
|
|
|
@@ -496,7 +496,7 @@ class IssueReporter {
|
|
|
496
496
|
args.splice(1, 1);
|
|
497
497
|
}
|
|
498
498
|
|
|
499
|
-
const date = moment__default[
|
|
499
|
+
const date = moment__default['default']().format('YYYY-MM-DD HH:mm:ss.SSS');
|
|
500
500
|
const message = args.join(', ');
|
|
501
501
|
let consoleMessage = message;
|
|
502
502
|
|
|
@@ -673,7 +673,7 @@ class IssueReporter {
|
|
|
673
673
|
payload._retry = retry + 1;
|
|
674
674
|
}
|
|
675
675
|
|
|
676
|
-
this._sendDebugToGrafana(
|
|
676
|
+
this._sendDebugToGrafana(payload, retry + 1);
|
|
677
677
|
}, 5000 + retry * 1000);
|
|
678
678
|
});
|
|
679
679
|
}
|
|
@@ -701,7 +701,7 @@ const parseCandidate = (candidate ) => {
|
|
|
701
701
|
if (!candidate) {
|
|
702
702
|
return null;
|
|
703
703
|
}
|
|
704
|
-
const result = sdpParser__default[
|
|
704
|
+
const result = sdpParser__default['default'].parse(candidate.indexOf('a=') === 0 ? candidate : `a=${candidate}`);
|
|
705
705
|
|
|
706
706
|
return result.candidates ? result.candidates[0] : null;
|
|
707
707
|
};
|
|
@@ -715,7 +715,7 @@ const areCandidateValid = (candidates ) =>
|
|
|
715
715
|
.length > 0;
|
|
716
716
|
|
|
717
717
|
const getVideoDirection = (sdp ) => {
|
|
718
|
-
const parsedSdp = sdpParser__default[
|
|
718
|
+
const parsedSdp = sdpParser__default['default'].parse(sdp);
|
|
719
719
|
const videoMedia = parsedSdp.media.find(media => media.type === 'video');
|
|
720
720
|
if (!videoMedia) {
|
|
721
721
|
return null;
|
|
@@ -729,14 +729,14 @@ const hasAnActiveVideo = (sdp ) => {
|
|
|
729
729
|
return false;
|
|
730
730
|
}
|
|
731
731
|
|
|
732
|
-
const parsedSdp = sdpParser__default[
|
|
732
|
+
const parsedSdp = sdpParser__default['default'].parse(sdp);
|
|
733
733
|
|
|
734
734
|
return !!parsedSdp.media.find(media =>
|
|
735
735
|
media.type === 'video' && media.port > 10 && (!media.direction || media.direction !== 'inactive'));
|
|
736
736
|
};
|
|
737
737
|
|
|
738
738
|
const fixSdp = (sdp , candidates , forcePort = true) => {
|
|
739
|
-
const parsedSdp = sdpParser__default[
|
|
739
|
+
const parsedSdp = sdpParser__default['default'].parse(sdp);
|
|
740
740
|
const mainCandidate = getSrflxOrRelay(candidates)[0];
|
|
741
741
|
const ip = mainCandidate ? mainCandidate.ip : null;
|
|
742
742
|
|
|
@@ -754,7 +754,7 @@ const fixSdp = (sdp , candidates , forcePort = true)
|
|
|
754
754
|
};
|
|
755
755
|
});
|
|
756
756
|
|
|
757
|
-
let fixed = sdpParser__default[
|
|
757
|
+
let fixed = sdpParser__default['default'].write(parsedSdp);
|
|
758
758
|
|
|
759
759
|
if (ip) {
|
|
760
760
|
fixed = fixed.replace(/IN IP4 0.0.0.0/g, `IN IP4 ${ip}`);
|
|
@@ -800,7 +800,7 @@ class WazoSessionDescriptionHandler extends sessionDescriptionHandler.SessionDes
|
|
|
800
800
|
) {
|
|
801
801
|
super(logger, mediaStreamFactory, sessionDescriptionHandlerConfiguration);
|
|
802
802
|
|
|
803
|
-
this.eventEmitter = new EventEmitter__default[
|
|
803
|
+
this.eventEmitter = new EventEmitter__default['default']();
|
|
804
804
|
this.isWeb = isWeb;
|
|
805
805
|
this.session = session;
|
|
806
806
|
}
|
|
@@ -1239,7 +1239,7 @@ class Emitter {
|
|
|
1239
1239
|
|
|
1240
1240
|
|
|
1241
1241
|
constructor() {
|
|
1242
|
-
this.eventEmitter = new EventEmitter__default[
|
|
1242
|
+
this.eventEmitter = new EventEmitter__default['default']();
|
|
1243
1243
|
}
|
|
1244
1244
|
|
|
1245
1245
|
on(event , callback ) {
|
|
@@ -3175,7 +3175,8 @@ class ExternalApp {
|
|
|
3175
3175
|
|
|
3176
3176
|
|
|
3177
3177
|
|
|
3178
|
-
|
|
3178
|
+
|
|
3179
|
+
|
|
3179
3180
|
|
|
3180
3181
|
|
|
3181
3182
|
class Meeting {
|
|
@@ -3187,6 +3188,7 @@ class Meeting {
|
|
|
3187
3188
|
|
|
3188
3189
|
|
|
3189
3190
|
|
|
3191
|
+
|
|
3190
3192
|
|
|
3191
3193
|
|
|
3192
3194
|
static parse(plain ) {
|
|
@@ -3198,6 +3200,7 @@ class Meeting {
|
|
|
3198
3200
|
port: plain.port,
|
|
3199
3201
|
uuid: plain.uuid,
|
|
3200
3202
|
number: plain.number,
|
|
3203
|
+
persistent: plain.persistent,
|
|
3201
3204
|
});
|
|
3202
3205
|
}
|
|
3203
3206
|
|
|
@@ -3205,7 +3208,7 @@ class Meeting {
|
|
|
3205
3208
|
return newFrom(meeting, Meeting);
|
|
3206
3209
|
}
|
|
3207
3210
|
|
|
3208
|
-
constructor({ uuid, name, guestSipAuthorization, ownerUuids, port, uri, number } = {}) {
|
|
3211
|
+
constructor({ uuid, name, guestSipAuthorization, ownerUuids, port, uri, number, persistent } = {}) {
|
|
3209
3212
|
this.guestSipAuthorization = guestSipAuthorization;
|
|
3210
3213
|
this.uri = uri;
|
|
3211
3214
|
this.name = name;
|
|
@@ -3213,6 +3216,7 @@ class Meeting {
|
|
|
3213
3216
|
this.port = port;
|
|
3214
3217
|
this.uuid = uuid;
|
|
3215
3218
|
this.number = number;
|
|
3219
|
+
this.persistent = persistent;
|
|
3216
3220
|
|
|
3217
3221
|
// Useful to compare instead of instanceof with minified code
|
|
3218
3222
|
this.type = 'Meeting';
|
|
@@ -3393,7 +3397,7 @@ class ChatMessage {
|
|
|
3393
3397
|
static parse(plain ) {
|
|
3394
3398
|
return new ChatMessage({
|
|
3395
3399
|
uuid: plain.uuid,
|
|
3396
|
-
date: moment__default[
|
|
3400
|
+
date: moment__default['default'](plain.created_at).toDate(),
|
|
3397
3401
|
content: plain.content,
|
|
3398
3402
|
alias: plain.alias,
|
|
3399
3403
|
userUuid: plain.user_uuid,
|
|
@@ -3485,7 +3489,7 @@ class Voicemail {
|
|
|
3485
3489
|
static parse(plain ) {
|
|
3486
3490
|
return new Voicemail({
|
|
3487
3491
|
id: plain.id,
|
|
3488
|
-
date: moment__default[
|
|
3492
|
+
date: moment__default['default'](plain.timestamp * 1000).toDate(),
|
|
3489
3493
|
duration: plain.duration * 1000,
|
|
3490
3494
|
caller: {
|
|
3491
3495
|
name: plain.caller_id_name,
|
|
@@ -3622,7 +3626,7 @@ class Call {
|
|
|
3622
3626
|
onHold: plain.on_hold,
|
|
3623
3627
|
status: plain.status,
|
|
3624
3628
|
lineId: plain.line_id,
|
|
3625
|
-
startingTime: moment__default[
|
|
3629
|
+
startingTime: moment__default['default'](plain.creation_time).toDate(),
|
|
3626
3630
|
talkingToIds: Object.keys(plain.talking_to || {}),
|
|
3627
3631
|
recording: plain.record_state === RECORD_STATE_ACTIVE,
|
|
3628
3632
|
});
|
|
@@ -3776,7 +3780,7 @@ class Recording {
|
|
|
3776
3780
|
|
|
3777
3781
|
|
|
3778
3782
|
|
|
3779
|
-
static parseMany(recordings
|
|
3783
|
+
static parseMany(recordings = []) {
|
|
3780
3784
|
return recordings.map(item => Recording.parse(item));
|
|
3781
3785
|
}
|
|
3782
3786
|
|
|
@@ -3784,8 +3788,8 @@ class Recording {
|
|
|
3784
3788
|
return new Recording({
|
|
3785
3789
|
deleted: plain.deleted,
|
|
3786
3790
|
fileName: plain.filename,
|
|
3787
|
-
end: plain.end_time ? moment__default[
|
|
3788
|
-
start: moment__default[
|
|
3791
|
+
end: plain.end_time ? moment__default['default'](plain.end_time).toDate() : null,
|
|
3792
|
+
start: moment__default['default'](plain.start_time).toDate(),
|
|
3789
3793
|
uuid: plain.uuid,
|
|
3790
3794
|
});
|
|
3791
3795
|
}
|
|
@@ -3883,7 +3887,7 @@ class CallLog {
|
|
|
3883
3887
|
|
|
3884
3888
|
static parse(plain ) {
|
|
3885
3889
|
return new CallLog({
|
|
3886
|
-
answer: plain.answer ? moment__default[
|
|
3890
|
+
answer: plain.answer ? moment__default['default'](plain.answer).toDate() : null,
|
|
3887
3891
|
answered: plain.answered,
|
|
3888
3892
|
callDirection: plain.call_direction,
|
|
3889
3893
|
destination: {
|
|
@@ -3900,9 +3904,9 @@ class CallLog {
|
|
|
3900
3904
|
},
|
|
3901
3905
|
id: plain.id,
|
|
3902
3906
|
duration: (plain.duration || 0) * 1000, // duration is in seconds
|
|
3903
|
-
start: moment__default[
|
|
3904
|
-
end: plain.end ? moment__default[
|
|
3905
|
-
recordings: Recording.parseMany(plain.recordings),
|
|
3907
|
+
start: moment__default['default'](plain.start).toDate(),
|
|
3908
|
+
end: plain.end ? moment__default['default'](plain.end).toDate() : null,
|
|
3909
|
+
recordings: Recording.parseMany(plain.recordings || []),
|
|
3906
3910
|
});
|
|
3907
3911
|
}
|
|
3908
3912
|
|
|
@@ -6039,7 +6043,7 @@ class WebRTCClient extends Emitter {
|
|
|
6039
6043
|
// We search for the last transceiver without `video-` in the mid (video- means remote transceiver)
|
|
6040
6044
|
const transceivers = pc.getTransceivers();
|
|
6041
6045
|
const transceiverIdx = lastIndexOf(transceivers, transceiver =>
|
|
6042
|
-
transceiver.sender.track === null && transceiver.mid.indexOf('video') === -1);
|
|
6046
|
+
transceiver.sender.track === null && transceiver.mid && transceiver.mid.indexOf('video') === -1);
|
|
6043
6047
|
|
|
6044
6048
|
videoSender = transceiverIdx !== -1 ? transceivers[transceiverIdx].sender : null;
|
|
6045
6049
|
} else {
|
|
@@ -7244,7 +7248,7 @@ class WebRTCClient extends Emitter {
|
|
|
7244
7248
|
}
|
|
7245
7249
|
const sessionId = this.getSipSessionId(session);
|
|
7246
7250
|
|
|
7247
|
-
getStats__default[
|
|
7251
|
+
getStats__default['default'](pc, (result ) => {
|
|
7248
7252
|
const { results, internal, nomore, ...stats } = result;
|
|
7249
7253
|
this.statsIntervals[sessionId] = nomore;
|
|
7250
7254
|
|