@wazo/sdk 0.44.0 → 0.44.2

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 CHANGED
@@ -377,47 +377,34 @@
377
377
  })(void 0 !== __webpack_require__.g ? __webpack_require__.g : null);
378
378
  var RTCPeerConnection1 = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;
379
379
  if ('undefined' == typeof MediaStreamTrack) MediaStreamTrack = {};
380
- var systemNetworkType = ((navigator.connection || {}).type || 'unknown').toString().toLowerCase();
380
+ const systemNetworkType = ((navigator.connection || {}).type || 'unknown').toString().toLowerCase();
381
381
  var getStatsResult = {
382
382
  encryption: 'sha-256',
383
383
  audio: {
384
384
  send: {
385
385
  tracks: [],
386
386
  codecs: [],
387
- availableBandwidth: 0,
388
- streams: 0,
389
- framerateMean: 0,
390
- bitrateMean: 0
387
+ streams: 0
391
388
  },
392
389
  recv: {
393
390
  tracks: [],
394
391
  codecs: [],
395
- availableBandwidth: 0,
396
- streams: 0,
397
- framerateMean: 0,
398
- bitrateMean: 0
392
+ streams: 0
399
393
  },
400
394
  bytesSent: 0,
401
395
  bytesReceived: 0,
402
- latency: 0,
403
396
  packetsLost: 0
404
397
  },
405
398
  video: {
406
399
  send: {
407
400
  tracks: [],
408
401
  codecs: [],
409
- availableBandwidth: 0,
410
- streams: 0,
411
- framerateMean: 0,
412
- bitrateMean: 0
402
+ streams: 0
413
403
  },
414
404
  recv: {
415
405
  tracks: [],
416
406
  codecs: [],
417
- availableBandwidth: 0,
418
- streams: 0,
419
- framerateMean: 0,
420
- bitrateMean: 0
407
+ streams: 0
421
408
  },
422
409
  bytesSent: 0,
423
410
  bytesReceived: 0,
@@ -462,6 +449,9 @@
462
449
  }
463
450
  },
464
451
  internal: {
452
+ bandwidth: {
453
+ prevBytesReceived: 0
454
+ },
465
455
  audio: {
466
456
  send: {},
467
457
  recv: {}
@@ -487,12 +477,15 @@
487
477
  nomore = true;
488
478
  }
489
479
  };
490
- var getStatsParser = {
480
+ const getStatsParser = {
491
481
  checkIfOfferer: function(result) {
492
482
  if ('googLibjingleSession' === result.type) getStatsResult.isOfferer = result.googInitiator;
493
483
  }
494
484
  };
495
- var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
485
+ const getCodecResult = (results, codecId)=>results.find((result)=>'codec' === result.type && result.id === codecId);
486
+ const getCodecName = (mimeType)=>mimeType && mimeType.split('/')[1];
487
+ const getRtpResult = (results, directionType, kind)=>results.find((r)=>r.type === directionType && r.kind === kind);
488
+ const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
496
489
  var peer = this;
497
490
  if (!(arguments[0] instanceof RTCPeerConnection1)) throw '1st argument is not instance of RTCPeerConnection.';
498
491
  peer = arguments[0];
@@ -505,6 +498,7 @@
505
498
  function getStatsLooper() {
506
499
  getStatsWrapper(function(results) {
507
500
  if (!results || !results.forEach) return;
501
+ getStatsResult.results = results;
508
502
  results.forEach(function(result) {
509
503
  Object.keys(getStatsParser).forEach(function(key) {
510
504
  if ('function' == typeof getStatsParser[key]) try {
@@ -523,7 +517,6 @@
523
517
  if (getStatsResult.datachannel) getStatsResult.datachannel.state = 'close';
524
518
  getStatsResult.ended = true;
525
519
  }
526
- getStatsResult.results = results;
527
520
  if (getStatsResult.audio && getStatsResult.video) {
528
521
  getStatsResult.bandwidth.speed = getStatsResult.audio.bytesSent - getStatsResult.bandwidth.helper.audioBytesSent + (getStatsResult.video.bytesSent - getStatsResult.bandwidth.helper.videoBytesSent);
529
522
  getStatsResult.bandwidth.helper.audioBytesSent = getStatsResult.audio.bytesSent;
@@ -549,208 +542,164 @@
549
542
  };
550
543
  };
551
544
  getStatsParser.googCertificate = function(result) {
552
- if ('googCertificate' == result.type) getStatsResult.encryption = result.googFingerprintAlgorithm;
553
- if ('certificate' == result.type) getStatsResult.encryption = result.fingerprintAlgorithm;
545
+ if ('certificate' == result.type) {
546
+ const transportResult = getStatsResult.results.find((r)=>'transport' === r.type);
547
+ if (transportResult.localCertificateId === result.id) {
548
+ getStatsResult.encryption = result.fingerprintAlgorithm;
549
+ getStatsResult.encryptionLocal = result.fingerprintAlgorithm;
550
+ }
551
+ if (transportResult.remoteCertificateId === result.id) getStatsResult.encryptionRemote = result.fingerprintAlgorithm;
552
+ }
554
553
  };
555
554
  getStatsParser.checkAudioTracks = function(result) {
556
- if ('audio' !== result.mediaType) return;
557
- var sendrecvType = getStatsResult.internal.getSendrecvType(result);
555
+ if ('audio' !== result.kind || !result.remoteId) return;
556
+ const sendrecvType = getStatsResult.internal.getSendrecvType(result);
558
557
  if (!sendrecvType) return;
559
- if (-1 === getStatsResult.audio[sendrecvType].codecs.indexOf(result.googCodecName || 'opus')) getStatsResult.audio[sendrecvType].codecs.push(result.googCodecName || 'opus');
558
+ const rtpResult = getRtpResult(getStatsResult.results, result.type, 'audio');
559
+ if (!rtpResult) return;
560
+ const remoteRtpResult = getStatsResult.results.find((r)=>r.id === result.remoteId) || {};
561
+ const codecResult = getCodecResult(getStatsResult.results, rtpResult.codecId);
562
+ if (!codecResult) return;
563
+ const currentCodec = getCodecName(codecResult.mimeType) || 'opus';
564
+ if (-1 === getStatsResult.audio[sendrecvType].codecs.indexOf(currentCodec)) getStatsResult.audio[sendrecvType].codecs.push(currentCodec);
560
565
  if (!!result.bytesSent) {
561
- var kilobytes = 0;
562
566
  if (!getStatsResult.internal.audio[sendrecvType].prevBytesSent) getStatsResult.internal.audio[sendrecvType].prevBytesSent = result.bytesSent;
563
567
  var bytes = result.bytesSent - getStatsResult.internal.audio[sendrecvType].prevBytesSent;
564
568
  getStatsResult.internal.audio[sendrecvType].prevBytesSent = result.bytesSent;
565
- kilobytes = bytes / 1024;
566
- getStatsResult.audio[sendrecvType].availableBandwidth = kilobytes.toFixed(1);
567
- getStatsResult.audio.bytesSent = kilobytes.toFixed(1);
569
+ var kilobytes = bytes / 1024;
570
+ getStatsResult.audio[sendrecvType].bytesSent = kilobytes;
571
+ getStatsResult.audio.bytesSent = kilobytes;
568
572
  }
569
573
  if (!!result.bytesReceived) {
570
- var kilobytes = 0;
571
574
  if (!getStatsResult.internal.audio[sendrecvType].prevBytesReceived) getStatsResult.internal.audio[sendrecvType].prevBytesReceived = result.bytesReceived;
572
575
  var bytes = result.bytesReceived - getStatsResult.internal.audio[sendrecvType].prevBytesReceived;
573
576
  getStatsResult.internal.audio[sendrecvType].prevBytesReceived = result.bytesReceived;
574
- kilobytes = bytes / 1024;
575
- getStatsResult.audio.bytesReceived = kilobytes.toFixed(1);
576
- }
577
- if (result.googTrackId && -1 === getStatsResult.audio[sendrecvType].tracks.indexOf(result.googTrackId)) getStatsResult.audio[sendrecvType].tracks.push(result.googTrackId);
578
- if (!!result.googCurrentDelayMs) {
579
- var kilobytes = 0;
580
- if (!getStatsResult.internal.audio.prevGoogCurrentDelayMs) getStatsResult.internal.audio.prevGoogCurrentDelayMs = result.googCurrentDelayMs;
581
- var bytes = result.googCurrentDelayMs - getStatsResult.internal.audio.prevGoogCurrentDelayMs;
582
- getStatsResult.internal.audio.prevGoogCurrentDelayMs = result.googCurrentDelayMs;
583
- getStatsResult.audio.latency = bytes.toFixed(1);
584
- if (getStatsResult.audio.latency < 0) getStatsResult.audio.latency = 0;
585
- }
586
- if (!!result.packetsLost) {
587
- var kilobytes = 0;
588
- if (!getStatsResult.internal.audio.prevPacketsLost) getStatsResult.internal.audio.prevPacketsLost = result.packetsLost;
589
- var bytes = result.packetsLost - getStatsResult.internal.audio.prevPacketsLost;
590
- getStatsResult.internal.audio.prevPacketsLost = result.packetsLost;
591
- getStatsResult.audio.packetsLost = bytes.toFixed(1);
577
+ var kilobytes = bytes / 1024;
578
+ getStatsResult.audio.bytesReceived = bytes / 1024;
579
+ }
580
+ if (result.trackIdentifier && -1 === getStatsResult.audio[sendrecvType].tracks.indexOf(result.trackIdentifier)) getStatsResult.audio[sendrecvType].tracks.push(result.trackIdentifier);
581
+ getStatsResult.audio[sendrecvType].totalRoundTripTime = remoteRtpResult.totalRoundTripTime || 0;
582
+ getStatsResult.audio[sendrecvType].jitter = remoteRtpResult.jitter || 0;
583
+ getStatsResult.audio[sendrecvType].jitterBufferDelay = remoteRtpResult.jitterBufferDelay || 0;
584
+ getStatsResult.audio[sendrecvType].packetsLost = 'inbound-rtp' === result.type ? rtpResult.packetsLost : remoteRtpResult.packetsLost;
585
+ getStatsResult.audio[sendrecvType].packetsReceived = 'inbound-rtp' === result.type ? rtpResult.packetsReceived : 0;
586
+ if (remoteRtpResult.totalRoundTripTime) getStatsResult.audio.latency = remoteRtpResult.totalRoundTripTime;
587
+ if (Number.isInteger(rtpResult.packetsLost)) {
588
+ if (!getStatsResult.internal.audio.prevPacketsLost) getStatsResult.internal.audio.prevPacketsLost = rtpResult.packetsLost;
589
+ var diff = rtpResult.packetsLost - getStatsResult.internal.audio.prevPacketsLost;
590
+ getStatsResult.internal.audio.prevPacketsLost = rtpResult.packetsLost;
591
+ getStatsResult.audio.packetsLost = diff;
592
592
  if (getStatsResult.audio.packetsLost < 0) getStatsResult.audio.packetsLost = 0;
593
593
  }
594
594
  };
595
595
  getStatsParser.checkVideoTracks = function(result) {
596
- if ('video' !== result.mediaType) return;
596
+ if ('video' !== result.kind) return;
597
597
  var sendrecvType = getStatsResult.internal.getSendrecvType(result);
598
598
  if (!sendrecvType) return;
599
- if (-1 === getStatsResult.video[sendrecvType].codecs.indexOf(result.googCodecName || 'VP8')) getStatsResult.video[sendrecvType].codecs.push(result.googCodecName || 'VP8');
599
+ const rtpResult = getRtpResult(getStatsResult.results, result.type, 'video');
600
+ if (!rtpResult) return;
601
+ const remoteRtpResult = getStatsResult.results.find((r)=>r.id === result.remoteId) || {};
602
+ const codecResult = getCodecResult(getStatsResult.results, rtpResult.codecId);
603
+ if (!codecResult) return;
604
+ const currentCodec = getCodecName(codecResult.mimeType) || 'VP8';
605
+ if (-1 === getStatsResult.video[sendrecvType].codecs.indexOf(currentCodec)) getStatsResult.video[sendrecvType].codecs.push(currentCodec);
600
606
  if (!!result.bytesSent) {
601
- var kilobytes = 0;
602
607
  if (!getStatsResult.internal.video[sendrecvType].prevBytesSent) getStatsResult.internal.video[sendrecvType].prevBytesSent = result.bytesSent;
603
608
  var bytes = result.bytesSent - getStatsResult.internal.video[sendrecvType].prevBytesSent;
604
609
  getStatsResult.internal.video[sendrecvType].prevBytesSent = result.bytesSent;
605
- kilobytes = bytes / 1024;
606
- getStatsResult.video[sendrecvType].availableBandwidth = kilobytes.toFixed(1);
607
- getStatsResult.video.bytesSent = kilobytes.toFixed(1);
610
+ var kilobytes = bytes / 1024;
611
+ getStatsResult.video[sendrecvType].bytesSent = kilobytes;
612
+ getStatsResult.video.bytesSent = kilobytes;
608
613
  }
609
614
  if (!!result.bytesReceived) {
610
- var kilobytes = 0;
611
615
  if (!getStatsResult.internal.video[sendrecvType].prevBytesReceived) getStatsResult.internal.video[sendrecvType].prevBytesReceived = result.bytesReceived;
612
616
  var bytes = result.bytesReceived - getStatsResult.internal.video[sendrecvType].prevBytesReceived;
613
617
  getStatsResult.internal.video[sendrecvType].prevBytesReceived = result.bytesReceived;
614
- kilobytes = bytes / 1024;
615
- getStatsResult.video.bytesReceived = kilobytes.toFixed(1);
616
- }
617
- if (result.googFrameHeightReceived && result.googFrameWidthReceived) {
618
- getStatsResult.resolutions[sendrecvType].width = result.googFrameWidthReceived;
619
- getStatsResult.resolutions[sendrecvType].height = result.googFrameHeightReceived;
620
- }
621
- if (result.googFrameHeightSent && result.googFrameWidthSent) {
622
- getStatsResult.resolutions[sendrecvType].width = result.googFrameWidthSent;
623
- getStatsResult.resolutions[sendrecvType].height = result.googFrameHeightSent;
624
- }
625
- if (result.googTrackId && -1 === getStatsResult.video[sendrecvType].tracks.indexOf(result.googTrackId)) getStatsResult.video[sendrecvType].tracks.push(result.googTrackId);
626
- if (result.framerateMean) {
627
- getStatsResult.bandwidth.framerateMean = result.framerateMean;
628
- var kilobytes = 0;
629
- if (!getStatsResult.internal.video[sendrecvType].prevFramerateMean) getStatsResult.internal.video[sendrecvType].prevFramerateMean = result.bitrateMean;
630
- var bytes = result.bytesSent - getStatsResult.internal.video[sendrecvType].prevFramerateMean;
631
- getStatsResult.internal.video[sendrecvType].prevFramerateMean = result.framerateMean;
632
- kilobytes = bytes / 1024;
633
- getStatsResult.video[sendrecvType].framerateMean = bytes.toFixed(1);
634
- }
635
- if (result.bitrateMean) {
636
- getStatsResult.bandwidth.bitrateMean = result.bitrateMean;
637
- var kilobytes = 0;
638
- if (!getStatsResult.internal.video[sendrecvType].prevBitrateMean) getStatsResult.internal.video[sendrecvType].prevBitrateMean = result.bitrateMean;
639
- var bytes = result.bytesSent - getStatsResult.internal.video[sendrecvType].prevBitrateMean;
640
- getStatsResult.internal.video[sendrecvType].prevBitrateMean = result.bitrateMean;
641
- kilobytes = bytes / 1024;
642
- getStatsResult.video[sendrecvType].bitrateMean = bytes.toFixed(1);
643
- }
644
- if (!!result.googCurrentDelayMs) {
645
- var kilobytes = 0;
646
- if (!getStatsResult.internal.video.prevGoogCurrentDelayMs) getStatsResult.internal.video.prevGoogCurrentDelayMs = result.googCurrentDelayMs;
647
- var bytes = result.googCurrentDelayMs - getStatsResult.internal.video.prevGoogCurrentDelayMs;
648
- getStatsResult.internal.video.prevGoogCurrentDelayMs = result.googCurrentDelayMs;
649
- getStatsResult.video.latency = bytes.toFixed(1);
650
- if (getStatsResult.video.latency < 0) getStatsResult.video.latency = 0;
651
- }
652
- if (!!result.packetsLost) {
653
- var kilobytes = 0;
654
- if (!getStatsResult.internal.video.prevPacketsLost) getStatsResult.internal.video.prevPacketsLost = result.packetsLost;
655
- var bytes = result.packetsLost - getStatsResult.internal.video.prevPacketsLost;
656
- getStatsResult.internal.video.prevPacketsLost = result.packetsLost;
657
- getStatsResult.video.packetsLost = bytes.toFixed(1);
658
- if (getStatsResult.video.packetsLost < 0) getStatsResult.video.packetsLost = 0;
618
+ var kilobytes = bytes / 1024;
619
+ getStatsResult.video[sendrecvType].bytesReceived = kilobytes;
620
+ getStatsResult.video.bytesReceived = kilobytes;
621
+ }
622
+ if (rtpResult.frameHeight && result.frameWidth) {
623
+ getStatsResult.resolutions[sendrecvType].width = result.frameHeight;
624
+ getStatsResult.resolutions[sendrecvType].height = result.frameHeight;
659
625
  }
626
+ if (result.trackIdentifier && -1 === getStatsResult.video[sendrecvType].tracks.indexOf(result.trackIdentifier)) getStatsResult.video[sendrecvType].tracks.push(result.trackIdentifier);
627
+ if (result.framesPerSecond) getStatsResult.video[sendrecvType].framesPerSecond = result.framesPerSecond;
628
+ if (Number.isInteger(result.framesSent)) {
629
+ if (!getStatsResult.internal.video[sendrecvType].prevFramesSent) getStatsResult.internal.video[sendrecvType].prevFramesSent = result.framesSent;
630
+ var newFramesSent = result.framesSent - getStatsResult.internal.video[sendrecvType].prevFramesSent;
631
+ getStatsResult.internal.video[sendrecvType].prevFramesSent = result.framesSent;
632
+ getStatsResult.video[sendrecvType].framesSent = newFramesSent;
633
+ }
634
+ getStatsResult.video[sendrecvType].totalRoundTripTime = remoteRtpResult.totalRoundTripTime || 0;
635
+ getStatsResult.video[sendrecvType].jitter = remoteRtpResult.jitter || 0;
636
+ getStatsResult.video[sendrecvType].jitterBufferDelay = remoteRtpResult.jitterBufferDelay || 0;
637
+ getStatsResult.video[sendrecvType].packetsLost = 'inbound-rtp' === result.type ? rtpResult.packetsLost : remoteRtpResult.packetsLost;
638
+ getStatsResult.video[sendrecvType].packetsReceived = 'inbound-rtp' === result.type ? rtpResult.packetsReceived : 0;
639
+ if (remoteRtpResult.totalRoundTripTime) getStatsResult.video.latency = remoteRtpResult.totalRoundTripTime;
640
+ if (Number.isInteger(rtpResult.packetsLost)) getStatsResult.video.packetsLost = rtpResult.packetsLost;
660
641
  };
661
642
  getStatsParser.bweforvideo = function(result) {
662
- if ('VideoBwe' !== result.type) return;
663
- getStatsResult.bandwidth.availableSendBandwidth = result.googAvailableSendBandwidth;
664
- getStatsResult.bandwidth.googActualEncBitrate = result.googActualEncBitrate;
665
- getStatsResult.bandwidth.googAvailableSendBandwidth = result.googAvailableSendBandwidth;
666
- getStatsResult.bandwidth.googAvailableReceiveBandwidth = result.googAvailableReceiveBandwidth;
667
- getStatsResult.bandwidth.googRetransmitBitrate = result.googRetransmitBitrate;
668
- getStatsResult.bandwidth.googTargetEncBitrate = result.googTargetEncBitrate;
669
- getStatsResult.bandwidth.googBucketDelay = result.googBucketDelay;
670
- getStatsResult.bandwidth.googTransmitBitrate = result.googTransmitBitrate;
643
+ if ('candidate-pair' === result.type) getStatsResult.bandwidth.availableSendBandwidth = result.availableOutgoingBitrate || 0;
644
+ if ('outbound-rtp' === result.type) {
645
+ getStatsResult.bandwidth.transmitBitrate = result.headerBytesSent + result.bytesSent || 0;
646
+ getStatsResult.bandwidth.bucketDelay = result.packetsSent > 0 ? result.totalPacketSendDelay / result.packetsSent : 0;
647
+ getStatsResult.bandwidth.targetEncBitrate = result.targetBitrate;
648
+ getStatsResult.bandwidth.actualEncBitrate = result.bytesSent - result.retransmittedBytesSent;
649
+ getStatsResult.bandwidth.retransmitBitrate = result.retransmittedBytesSent;
650
+ }
671
651
  };
672
652
  getStatsParser.candidatePair = function(result) {
653
+ if (isSafari) return;
673
654
  if ('googCandidatePair' !== result.type && 'candidate-pair' !== result.type && 'local-candidate' !== result.type && 'remote-candidate' !== result.type) return;
674
- if ('true' == result.googActiveConnection) {
655
+ const transportResult = getStatsResult.results.find((result)=>'transport' === result.type);
656
+ const localCandidateResult = getStatsResult.results.find((result)=>'local-candidate' === result.type);
657
+ const isStunTurnUsed = transportResult && transportResult.selectedCandidatePairId === result.id;
658
+ var localCandidate;
659
+ var remoteCandidate;
660
+ if (isStunTurnUsed) {
675
661
  Object.keys(getStatsResult.internal.candidates).forEach(function(cid) {
676
- var candidate = getStatsResult.internal.candidates[cid];
677
- if (-1 !== candidate.ipAddress.indexOf(result.googLocalAddress)) {
662
+ const candidate = getStatsResult.internal.candidates[cid];
663
+ if (candidate.id === result.localCandidateId) {
678
664
  getStatsResult.connectionType.local.candidateType = candidate.candidateType;
679
665
  getStatsResult.connectionType.local.ipAddress = candidate.ipAddress;
680
666
  getStatsResult.connectionType.local.networkType = candidate.networkType;
681
667
  getStatsResult.connectionType.local.transport = candidate.transport;
682
668
  }
683
- if (-1 !== candidate.ipAddress.indexOf(result.googRemoteAddress)) {
669
+ if (candidate.id === result.remoteCandidateId) {
684
670
  getStatsResult.connectionType.remote.candidateType = candidate.candidateType;
685
671
  getStatsResult.connectionType.remote.ipAddress = candidate.ipAddress;
686
672
  getStatsResult.connectionType.remote.networkType = candidate.networkType;
687
673
  getStatsResult.connectionType.remote.transport = candidate.transport;
688
674
  }
689
675
  });
690
- getStatsResult.connectionType.transport = result.googTransportType;
691
- var localCandidate = getStatsResult.internal.candidates[result.localCandidateId];
676
+ getStatsResult.connectionType.transport = localCandidateResult.protocol;
677
+ localCandidate = getStatsResult.internal.candidates[result.localCandidateId];
692
678
  if (localCandidate) {
693
679
  if (localCandidate.ipAddress) getStatsResult.connectionType.systemIpAddress = localCandidate.ipAddress;
694
680
  }
695
- var remoteCandidate = getStatsResult.internal.candidates[result.remoteCandidateId];
681
+ remoteCandidate = getStatsResult.internal.candidates[result.remoteCandidateId];
696
682
  if (remoteCandidate) {
697
683
  if (remoteCandidate.ipAddress) getStatsResult.connectionType.systemIpAddress = remoteCandidate.ipAddress;
698
684
  }
699
685
  }
700
686
  if ('candidate-pair' === result.type) {
701
687
  if (true === result.selected && true === result.nominated && 'succeeded' === result.state) {
702
- var localCandidate = getStatsResult.internal.candidates[result.remoteCandidateId];
703
- var remoteCandidate = getStatsResult.internal.candidates[result.remoteCandidateId];
688
+ localCandidate = getStatsResult.internal.candidates[result.remoteCandidateId];
689
+ remoteCandidate = getStatsResult.internal.candidates[result.remoteCandidateId];
704
690
  }
705
691
  }
706
692
  if ('local-candidate' === result.type) {
707
693
  getStatsResult.connectionType.local.candidateType = result.candidateType;
708
- getStatsResult.connectionType.local.ipAddress = result.ipAddress;
694
+ getStatsResult.connectionType.local.ipAddress = result.adress;
709
695
  getStatsResult.connectionType.local.networkType = result.networkType;
710
- getStatsResult.connectionType.local.transport = result.mozLocalTransport || result.transport;
696
+ getStatsResult.connectionType.local.transport = result.protocol;
711
697
  }
712
698
  if ('remote-candidate' === result.type) {
713
699
  getStatsResult.connectionType.remote.candidateType = result.candidateType;
714
- getStatsResult.connectionType.remote.ipAddress = result.ipAddress;
700
+ getStatsResult.connectionType.remote.ipAddress = result.adress;
715
701
  getStatsResult.connectionType.remote.networkType = result.networkType;
716
- getStatsResult.connectionType.remote.transport = result.mozRemoteTransport || result.transport;
717
- }
718
- if (isSafari) {
719
- var sendrecvType = result.localCandidateId ? 'send' : 'recv';
720
- if (!sendrecvType) return;
721
- if (!!result.bytesSent) {
722
- var kilobytes = 0;
723
- if (!getStatsResult.internal.video[sendrecvType].prevBytesSent) getStatsResult.internal.video[sendrecvType].prevBytesSent = result.bytesSent;
724
- var bytes = result.bytesSent - getStatsResult.internal.video[sendrecvType].prevBytesSent;
725
- getStatsResult.internal.video[sendrecvType].prevBytesSent = result.bytesSent;
726
- kilobytes = bytes / 1024;
727
- getStatsResult.video[sendrecvType].availableBandwidth = kilobytes.toFixed(1);
728
- getStatsResult.video.bytesSent = kilobytes.toFixed(1);
729
- }
730
- if (!!result.bytesReceived) {
731
- var kilobytes = 0;
732
- if (!getStatsResult.internal.video[sendrecvType].prevBytesReceived) getStatsResult.internal.video[sendrecvType].prevBytesReceived = result.bytesReceived;
733
- var bytes = result.bytesReceived - getStatsResult.internal.video[sendrecvType].prevBytesReceived;
734
- getStatsResult.internal.video[sendrecvType].prevBytesReceived = result.bytesReceived;
735
- kilobytes = bytes / 1024;
736
- getStatsResult.video.bytesReceived = kilobytes.toFixed(1);
737
- }
738
- if (!!result.availableOutgoingBitrate) {
739
- var kilobytes = 0;
740
- if (!getStatsResult.internal.video[sendrecvType].prevAvailableOutgoingBitrate) getStatsResult.internal.video[sendrecvType].prevAvailableOutgoingBitrate = result.availableOutgoingBitrate;
741
- var bytes = result.availableOutgoingBitrate - getStatsResult.internal.video[sendrecvType].prevAvailableOutgoingBitrate;
742
- getStatsResult.internal.video[sendrecvType].prevAvailableOutgoingBitrate = result.availableOutgoingBitrate;
743
- kilobytes = bytes / 1024;
744
- getStatsResult.video.availableOutgoingBitrate = kilobytes.toFixed(1);
745
- }
746
- if (!!result.availableIncomingBitrate) {
747
- var kilobytes = 0;
748
- if (!getStatsResult.internal.video[sendrecvType].prevAvailableIncomingBitrate) getStatsResult.internal.video[sendrecvType].prevAvailableIncomingBitrate = result.availableIncomingBitrate;
749
- var bytes = result.availableIncomingBitrate - getStatsResult.internal.video[sendrecvType].prevAvailableIncomingBitrate;
750
- getStatsResult.internal.video[sendrecvType].prevAvailableIncomingBitrate = result.availableIncomingBitrate;
751
- kilobytes = bytes / 1024;
752
- getStatsResult.video.availableIncomingBitrate = kilobytes.toFixed(1);
753
- }
702
+ getStatsResult.connectionType.remote.transport = result.protocol;
754
703
  }
755
704
  };
756
705
  var LOCAL_candidateType = {};
@@ -765,13 +714,14 @@
765
714
  if (!LOCAL_ipAddress[result.id]) LOCAL_ipAddress[result.id] = [];
766
715
  if (!LOCAL_networkType[result.id]) LOCAL_networkType[result.id] = [];
767
716
  if (result.candidateType && -1 === LOCAL_candidateType[result.id].indexOf(result.candidateType)) LOCAL_candidateType[result.id].push(result.candidateType);
768
- if (result.transport && -1 === LOCAL_transport[result.id].indexOf(result.transport)) LOCAL_transport[result.id].push(result.transport);
769
- if (result.ipAddress && -1 === LOCAL_ipAddress[result.id].indexOf(result.ipAddress + ':' + result.portNumber)) LOCAL_ipAddress[result.id].push(result.ipAddress + ':' + result.portNumber);
717
+ if (result.protocol && -1 === LOCAL_transport[result.id].indexOf(result.protocol)) LOCAL_transport[result.id].push(result.protocol);
718
+ const resultIpAddress = `${result.address}:${result.port}`;
719
+ if (result.address && -1 === LOCAL_ipAddress[result.id].indexOf(resultIpAddress)) LOCAL_ipAddress[result.id].push(resultIpAddress);
770
720
  if (result.networkType && -1 === LOCAL_networkType[result.id].indexOf(result.networkType)) LOCAL_networkType[result.id].push(result.networkType);
771
721
  getStatsResult.internal.candidates[result.id] = {
772
722
  candidateType: LOCAL_candidateType[result.id],
773
723
  ipAddress: LOCAL_ipAddress[result.id],
774
- portNumber: result.portNumber,
724
+ portNumber: result.port,
775
725
  networkType: LOCAL_networkType[result.id],
776
726
  priority: result.priority,
777
727
  transport: LOCAL_transport[result.id],
@@ -796,13 +746,14 @@
796
746
  if (!REMOTE_ipAddress[result.id]) REMOTE_ipAddress[result.id] = [];
797
747
  if (!REMOTE_networkType[result.id]) REMOTE_networkType[result.id] = [];
798
748
  if (result.candidateType && -1 === REMOTE_candidateType[result.id].indexOf(result.candidateType)) REMOTE_candidateType[result.id].push(result.candidateType);
799
- if (result.transport && -1 === REMOTE_transport[result.id].indexOf(result.transport)) REMOTE_transport[result.id].push(result.transport);
800
- if (result.ipAddress && -1 === REMOTE_ipAddress[result.id].indexOf(result.ipAddress + ':' + result.portNumber)) REMOTE_ipAddress[result.id].push(result.ipAddress + ':' + result.portNumber);
749
+ if (result.protocol && -1 === REMOTE_transport[result.id].indexOf(result.protocol)) REMOTE_transport[result.id].push(result.protocol);
750
+ const resultIpAddress = `${result.address}:${result.port}`;
751
+ if (result.address && -1 === REMOTE_ipAddress[result.id].indexOf(resultIpAddress)) REMOTE_ipAddress[result.id].push(resultIpAddress);
801
752
  if (result.networkType && -1 === REMOTE_networkType[result.id].indexOf(result.networkType)) REMOTE_networkType[result.id].push(result.networkType);
802
753
  getStatsResult.internal.candidates[result.id] = {
803
754
  candidateType: REMOTE_candidateType[result.id],
804
755
  ipAddress: REMOTE_ipAddress[result.id],
805
- portNumber: result.portNumber,
756
+ portNumber: result.port,
806
757
  networkType: REMOTE_networkType[result.id],
807
758
  priority: result.priority,
808
759
  transport: REMOTE_transport[result.id],
@@ -816,56 +767,54 @@
816
767
  getStatsResult.connectionType.remote.transport = REMOTE_transport[result.id];
817
768
  };
818
769
  getStatsParser.dataSentReceived = function(result) {
819
- if (!result.googCodecName || 'video' !== result.mediaType && 'audio' !== result.mediaType) return;
820
- if (!!result.bytesSent) getStatsResult[result.mediaType].bytesSent = parseInt(result.bytesSent);
821
- if (!!result.bytesReceived) getStatsResult[result.mediaType].bytesReceived = parseInt(result.bytesReceived);
770
+ if ('remote-inbound-rtp' === result.type || 'video' !== result.kind && 'audio' !== result.kind) return;
771
+ if (!!result.bytesSent) getStatsResult[result.kind].bytesSent = parseInt(result.bytesSent);
772
+ if (!!result.bytesReceived) getStatsResult[result.kind].bytesReceived = parseInt(result.bytesReceived);
822
773
  };
823
774
  getStatsParser.inboundrtp = function(result) {
824
775
  if (!isSafari) return;
825
776
  if ('inbound-rtp' !== result.type) return;
826
- var mediaType = result.mediaType || 'audio';
777
+ var kind = result.kind || 'audio';
827
778
  var sendrecvType = result.isRemote ? 'recv' : 'send';
828
779
  if (!sendrecvType) return;
829
780
  if (!!result.bytesSent) {
830
- var kilobytes = 0;
831
- if (!getStatsResult.internal[mediaType][sendrecvType].prevBytesSent) getStatsResult.internal[mediaType][sendrecvType].prevBytesSent = result.bytesSent;
832
- var bytes = result.bytesSent - getStatsResult.internal[mediaType][sendrecvType].prevBytesSent;
833
- getStatsResult.internal[mediaType][sendrecvType].prevBytesSent = result.bytesSent;
834
- kilobytes = bytes / 1024;
835
- getStatsResult[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);
836
- getStatsResult[mediaType].bytesSent = kilobytes.toFixed(1);
781
+ if (!getStatsResult.internal[kind][sendrecvType].prevBytesSent) getStatsResult.internal[kind][sendrecvType].prevBytesSent = result.bytesSent;
782
+ var bytes = result.bytesSent - getStatsResult.internal[kind][sendrecvType].prevBytesSent;
783
+ getStatsResult.internal[kind][sendrecvType].prevBytesSent = result.bytesSent;
784
+ var kilobytes = bytes / 1024;
785
+ getStatsResult[kind][sendrecvType].bytesSent = kilobytes;
786
+ getStatsResult[kind].bytesSent = kilobytes;
837
787
  }
838
788
  if (!!result.bytesReceived) {
839
- var kilobytes = 0;
840
- if (!getStatsResult.internal[mediaType][sendrecvType].prevBytesReceived) getStatsResult.internal[mediaType][sendrecvType].prevBytesReceived = result.bytesReceived;
841
- var bytes = result.bytesReceived - getStatsResult.internal[mediaType][sendrecvType].prevBytesReceived;
842
- getStatsResult.internal[mediaType][sendrecvType].prevBytesReceived = result.bytesReceived;
843
- kilobytes = bytes / 1024;
844
- getStatsResult[mediaType].bytesReceived = kilobytes.toFixed(1);
789
+ if (!getStatsResult.internal[kind][sendrecvType].prevBytesReceived) getStatsResult.internal[kind][sendrecvType].prevBytesReceived = result.bytesReceived;
790
+ var bytes = result.bytesReceived - getStatsResult.internal[kind][sendrecvType].prevBytesReceived;
791
+ getStatsResult.internal[kind][sendrecvType].prevBytesReceived = result.bytesReceived;
792
+ var kilobytes = bytes / 1024;
793
+ getStatsResult[kind][sendrecvType].bytesSent = kilobytes;
794
+ getStatsResult[kind].bytesReceived = kilobytes;
845
795
  }
846
796
  };
847
797
  getStatsParser.outboundrtp = function(result) {
848
798
  if (!isSafari) return;
849
799
  if ('outbound-rtp' !== result.type) return;
850
- var mediaType = result.mediaType || 'audio';
800
+ var kind = result.kind || 'audio';
851
801
  var sendrecvType = result.isRemote ? 'recv' : 'send';
852
802
  if (!sendrecvType) return;
853
803
  if (!!result.bytesSent) {
854
- var kilobytes = 0;
855
- if (!getStatsResult.internal[mediaType][sendrecvType].prevBytesSent) getStatsResult.internal[mediaType][sendrecvType].prevBytesSent = result.bytesSent;
856
- var bytes = result.bytesSent - getStatsResult.internal[mediaType][sendrecvType].prevBytesSent;
857
- getStatsResult.internal[mediaType][sendrecvType].prevBytesSent = result.bytesSent;
858
- kilobytes = bytes / 1024;
859
- getStatsResult[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);
860
- getStatsResult[mediaType].bytesSent = kilobytes.toFixed(1);
804
+ if (!getStatsResult.internal[kind][sendrecvType].prevBytesSent) getStatsResult.internal[kind][sendrecvType].prevBytesSent = result.bytesSent;
805
+ var bytes = result.bytesSent - getStatsResult.internal[kind][sendrecvType].prevBytesSent;
806
+ getStatsResult.internal[kind][sendrecvType].prevBytesSent = result.bytesSent;
807
+ var kilobytes = bytes / 1024;
808
+ getStatsResult[kind][sendrecvType].bytesSent = kilobytes;
809
+ getStatsResult[kind].bytesSent = kilobytes;
861
810
  }
862
811
  if (!!result.bytesReceived) {
863
- var kilobytes = 0;
864
- if (!getStatsResult.internal[mediaType][sendrecvType].prevBytesReceived) getStatsResult.internal[mediaType][sendrecvType].prevBytesReceived = result.bytesReceived;
865
- var bytes = result.bytesReceived - getStatsResult.internal[mediaType][sendrecvType].prevBytesReceived;
866
- getStatsResult.internal[mediaType][sendrecvType].prevBytesReceived = result.bytesReceived;
867
- kilobytes = bytes / 1024;
868
- getStatsResult[mediaType].bytesReceived = kilobytes.toFixed(1);
812
+ if (!getStatsResult.internal[kind][sendrecvType].prevBytesReceived) getStatsResult.internal[kind][sendrecvType].prevBytesReceived = result.bytesReceived;
813
+ var bytes = result.bytesReceived - getStatsResult.internal[kind][sendrecvType].prevBytesReceived;
814
+ getStatsResult.internal[kind][sendrecvType].prevBytesReceived = result.bytesReceived;
815
+ var kilobytes = bytes / 1024;
816
+ getStatsResult[kind][sendrecvType].bytesSent = kilobytes;
817
+ getStatsResult[kind].bytesReceived = kilobytes;
869
818
  }
870
819
  };
871
820
  getStatsParser.track = function(result) {
@@ -888,11 +837,15 @@
888
837
  }
889
838
  };
890
839
  getStatsParser.ssrc = function(result) {
891
- if (!result.googCodecName || 'video' !== result.mediaType && 'audio' !== result.mediaType) return;
892
- if ('ssrc' !== result.type) return;
893
- var sendrecvType = result.id.split('_').pop();
894
- if (-1 === SSRC[result.mediaType][sendrecvType].indexOf(result.ssrc)) SSRC[result.mediaType][sendrecvType].push(result.ssrc);
895
- getStatsResult[result.mediaType][sendrecvType].streams = SSRC[result.mediaType][sendrecvType].length;
840
+ if ('video' !== result.kind && 'audio' !== result.kind) return;
841
+ if ('inbound-rtp' !== result.type && 'outbound-rtp' !== result.type) return;
842
+ const rtpResult = getRtpResult(getStatsResult.results, result.type, result.kind);
843
+ if (!rtpResult) return;
844
+ const codecResult = getCodecResult(getStatsResult.results, rtpResult.codecId);
845
+ if (!codecResult) return;
846
+ const sendrecvType = 'outbound-rtp' === result.type ? 'send' : 'recv';
847
+ if (-1 === SSRC[result.kind][sendrecvType].indexOf(result.ssrc)) SSRC[result.kind][sendrecvType].push(result.ssrc);
848
+ getStatsResult[result.kind][sendrecvType].streams = SSRC[result.kind][sendrecvType].length;
896
849
  };
897
850
  getStatsLooper();
898
851
  };
@@ -33210,6 +33163,7 @@
33210
33163
  Emitter: ()=>Emitter,
33211
33164
  Relocation: ()=>domain_Relocation,
33212
33165
  ChatMessage: ()=>ChatMessage,
33166
+ RECORDING_STATE: ()=>RECORDING_STATE,
33213
33167
  camelToUnderscore: ()=>camelToUnderscore,
33214
33168
  WazoApiClient: ()=>ApiClient,
33215
33169
  BadResponse: ()=>BadResponse,
@@ -34829,6 +34783,7 @@ BwIDAQAB
34829
34783
  profile;
34830
34784
  expiresAt;
34831
34785
  authorizations;
34786
+ metadata;
34832
34787
  static parse(plain) {
34833
34788
  const token = plain.data.metadata ? plain.data.metadata.jwt : null;
34834
34789
  let authorizations = [];
@@ -34854,13 +34809,14 @@ BwIDAQAB
34854
34809
  tenantUuid: plain.data.metadata ? plain.data.metadata.tenant_uuid : void 0,
34855
34810
  expiresAt: moment_default().utc(plain.data.utc_expires_at).toDate(),
34856
34811
  stackUuid: plain.data.xivo_uuid,
34812
+ metadata: plain.data.metadata,
34857
34813
  stackHostFromHeader: plain._headers?.get?.('wazo-stack-host')
34858
34814
  });
34859
34815
  }
34860
34816
  static newFrom(profile) {
34861
34817
  return new_from(profile, Session);
34862
34818
  }
34863
- constructor({ token, uuid, tenantUuid, profile, expiresAt, authorizations, acl, engineVersion, refreshToken, sessionUuid, stackUuid, stackHostFromHeader }){
34819
+ constructor({ token, uuid, tenantUuid, profile, expiresAt, authorizations, acl, engineVersion, refreshToken, sessionUuid, stackUuid, metadata, stackHostFromHeader }){
34864
34820
  this.token = token;
34865
34821
  this.uuid = uuid;
34866
34822
  this.tenantUuid = tenantUuid || null;
@@ -34872,6 +34828,7 @@ BwIDAQAB
34872
34828
  this.refreshToken = refreshToken;
34873
34829
  this.sessionUuid = sessionUuid;
34874
34830
  this.stackUuid = stackUuid;
34831
+ this.metadata = metadata;
34875
34832
  this._stackHostFromHeader = stackHostFromHeader;
34876
34833
  }
34877
34834
  hasExpired(date = new Date()) {
@@ -34988,7 +34945,8 @@ BwIDAQAB
34988
34945
  };
34989
34946
  const headers = {
34990
34947
  Authorization: `Basic ${ApiRequester.base64Encode(`${params.username}:${params.password}`)}`,
34991
- 'Content-Type': 'application/json'
34948
+ 'Content-Type': 'application/json',
34949
+ ...params.headers || {}
34992
34950
  };
34993
34951
  if (client.clientId) {
34994
34952
  body.access_type = 'offline';
@@ -35653,7 +35611,11 @@ BwIDAQAB
35653
35611
  return this.caller.name.toUpperCase().includes(query.toUpperCase()) || this.caller.number.includes(query);
35654
35612
  }
35655
35613
  }
35656
- const RECORD_STATE_ACTIVE = 'active';
35614
+ const RECORDING_STATE = {
35615
+ ACTIVE: 'active',
35616
+ INACTIVE: 'inactive',
35617
+ PAUSED: 'paused'
35618
+ };
35657
35619
  class Call {
35658
35620
  type;
35659
35621
  id;
@@ -35672,6 +35634,8 @@ BwIDAQAB
35672
35634
  startingTime;
35673
35635
  talkingToIds;
35674
35636
  recording;
35637
+ recordingPaused;
35638
+ recordingState;
35675
35639
  static parseMany(plain) {
35676
35640
  if (!plain) return [];
35677
35641
  return plain.map((plainCall)=>Call.parse(plainCall));
@@ -35693,13 +35657,15 @@ BwIDAQAB
35693
35657
  lineId: plain.line_id,
35694
35658
  startingTime: moment_default()(plain.creation_time).toDate(),
35695
35659
  talkingToIds: Object.keys(plain.talking_to || {}),
35696
- recording: plain.record_state === RECORD_STATE_ACTIVE
35660
+ recording: plain.record_state === RECORDING_STATE.ACTIVE,
35661
+ recordingPaused: plain.record_state === RECORDING_STATE.PAUSED,
35662
+ recordingState: plain.record_state
35697
35663
  });
35698
35664
  }
35699
35665
  static newFrom(call) {
35700
35666
  return new_from(call, Call);
35701
35667
  }
35702
- constructor({ id, sipCallId, callerName, callerNumber, calleeName, calleeNumber, dialedExtension, isCaller, isVideo, lineId, muted, onHold, status, startingTime, talkingToIds, recording }){
35668
+ constructor({ id, sipCallId, callerName, callerNumber, calleeName, calleeNumber, dialedExtension, isCaller, isVideo, lineId, muted, onHold, status, startingTime, talkingToIds, recording, recordingPaused, recordingState }){
35703
35669
  this.id = id;
35704
35670
  this.sipCallId = sipCallId;
35705
35671
  this.callerName = callerName;
@@ -35715,6 +35681,8 @@ BwIDAQAB
35715
35681
  this.startingTime = startingTime;
35716
35682
  this.talkingToIds = talkingToIds || [];
35717
35683
  this.recording = recording;
35684
+ this.recordingPaused = recordingPaused;
35685
+ this.recordingState = recordingState || RECORDING_STATE.INACTIVE;
35718
35686
  this.isVideo = !!isVideo;
35719
35687
  this.type = 'Call';
35720
35688
  }
@@ -35770,6 +35738,9 @@ BwIDAQAB
35770
35738
  isRecording() {
35771
35739
  return this.recording;
35772
35740
  }
35741
+ isRecordingPaused() {
35742
+ return !!this.recordingPaused;
35743
+ }
35773
35744
  }
35774
35745
  var session_state_SessionState;
35775
35746
  (function(SessionState) {
@@ -35813,9 +35784,10 @@ BwIDAQAB
35813
35784
  type;
35814
35785
  recording;
35815
35786
  recordingPaused;
35787
+ recordingState;
35816
35788
  sipSession;
35817
35789
  conference;
35818
- constructor({ answered, answeredBySystem, isCaller, displayName, callId, muted, videoMuted, number, paused, ringing, startTime, creationTime, endTime, cameraEnabled, dialedExtension, sipCallId, sipStatus, callerNumber, call, autoAnswer, ignored, screensharing, recording, recordingPaused, videoRemotelyDowngraded, sipSession, answerTime, conference }){
35790
+ constructor({ answered, answeredBySystem, isCaller, displayName, callId, muted, videoMuted, number, paused, ringing, startTime, creationTime, endTime, cameraEnabled, dialedExtension, sipCallId, sipStatus, callerNumber, call, autoAnswer, ignored, screensharing, recording, recordingPaused, recordingState, videoRemotelyDowngraded, sipSession, answerTime, conference }){
35819
35791
  this.callId = callId;
35820
35792
  this.sipCallId = sipCallId;
35821
35793
  this.displayName = displayName;
@@ -35840,6 +35812,7 @@ BwIDAQAB
35840
35812
  this.screensharing = screensharing || false;
35841
35813
  this.recording = recording || false;
35842
35814
  this.recordingPaused = recordingPaused || false;
35815
+ this.recordingState = recordingState || RECORDING_STATE.INACTIVE;
35843
35816
  this.videoRemotelyDowngraded = videoRemotelyDowngraded;
35844
35817
  this.sipSession = sipSession;
35845
35818
  this.answerTime = answerTime || this.answerTime;
@@ -35927,7 +35900,7 @@ BwIDAQAB
35927
35900
  isRecording() {
35928
35901
  return this.recording;
35929
35902
  }
35930
- recordingIsPaused() {
35903
+ isRecordingPaused() {
35931
35904
  return this.recordingPaused;
35932
35905
  }
35933
35906
  hasAnInitialInterceptionNumber() {
@@ -36013,7 +35986,8 @@ BwIDAQAB
36013
35986
  videoMuted: false,
36014
35987
  screensharing: false,
36015
35988
  recording: call.isRecording(),
36016
- recordingPaused: false,
35989
+ recordingPaused: call.isRecordingPaused(),
35990
+ recordingState: call.recordingState,
36017
35991
  ringing: call.isRinging(),
36018
35992
  answered: call.isUp(),
36019
35993
  answeredBySystem: call.isUp() && 0 === call.talkingToIds.length,
@@ -42829,7 +42803,8 @@ BwIDAQAB
42829
42803
  muted: fromSession ? fromSession.isMuted() : this.client.isAudioMuted(sipSession),
42830
42804
  videoMuted: !!fromSession && fromSession.isVideoMuted(),
42831
42805
  recording: !!fromSession && fromSession.isRecording(),
42832
- recordingPaused: false,
42806
+ recordingPaused: !!fromSession && fromSession.isRecordingPaused(),
42807
+ recordingState: fromSession ? fromSession.recordingState : RECORDING_STATE.INACTIVE,
42833
42808
  sipSession,
42834
42809
  conference: !!fromSession && fromSession.isConference(),
42835
42810
  ...extra