@webex/internal-media-core 0.0.16-beta → 0.0.17-beta
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/cjs/index.js +2251 -1993
- package/dist/esm/index.js +2251 -1993
- package/dist/types/MediaConnection/MultistreamRoapMediaConnection.d.ts +5 -4
- package/dist/types/MediaConnection/MultistreamRoapMediaConnection.d.ts.map +1 -1
- package/dist/types/MediaConnection/eventTypes.d.ts +2 -2
- package/dist/types/MediaConnection/eventTypes.d.ts.map +1 -1
- package/package.json +15 -7
package/dist/cjs/index.js
CHANGED
|
@@ -2533,7 +2533,8 @@ var getErrorDescription = error => {
|
|
|
2533
2533
|
};
|
|
2534
2534
|
|
|
2535
2535
|
var NUM$1 = '\\d+';
|
|
2536
|
-
var
|
|
2536
|
+
var SDP_TOKEN$1 = "[!#$%&'*+\\-.^_`{|}~a-zA-Z0-9]+";
|
|
2537
|
+
var ANY_NON_WS$1 = '\\S+';
|
|
2537
2538
|
var SP$1 = '\\s';
|
|
2538
2539
|
var REST$1 = '.+';
|
|
2539
2540
|
class Line$1 {}
|
|
@@ -2627,7 +2628,7 @@ class CandidateLine$1 extends Line$1 {
|
|
|
2627
2628
|
}
|
|
2628
2629
|
_a$4$1 = CandidateLine$1;
|
|
2629
2630
|
CandidateLine$1.ICE_CHARS = "[a-zA-Z0-9+/]+";
|
|
2630
|
-
CandidateLine$1.regex = new RegExp("^candidate:(".concat(_a$4$1.ICE_CHARS, ") (").concat(NUM$1, ") (").concat(
|
|
2631
|
+
CandidateLine$1.regex = new RegExp("^candidate:(".concat(_a$4$1.ICE_CHARS, ") (").concat(NUM$1, ") (").concat(ANY_NON_WS$1, ") (").concat(NUM$1, ") (").concat(ANY_NON_WS$1, ") (").concat(NUM$1, ") typ (").concat(ANY_NON_WS$1, ")(?: raddr (").concat(ANY_NON_WS$1, "))?(?: rport (").concat(NUM$1, "))?(?: (").concat(REST$1, "))?"));
|
|
2631
2632
|
class ConnectionLine$1 extends Line$1 {
|
|
2632
2633
|
constructor(netType, addrType, ipAddr) {
|
|
2633
2634
|
super();
|
|
@@ -2649,7 +2650,7 @@ class ConnectionLine$1 extends Line$1 {
|
|
|
2649
2650
|
return "c=".concat(this.netType, " ").concat(this.addrType, " ").concat(this.ipAddr);
|
|
2650
2651
|
}
|
|
2651
2652
|
}
|
|
2652
|
-
ConnectionLine$1.regex = new RegExp("^(".concat(
|
|
2653
|
+
ConnectionLine$1.regex = new RegExp("^(".concat(ANY_NON_WS$1, ") (").concat(ANY_NON_WS$1, ") (").concat(ANY_NON_WS$1, ")"));
|
|
2653
2654
|
class ContentLine$1 extends Line$1 {
|
|
2654
2655
|
constructor(values) {
|
|
2655
2656
|
super();
|
|
@@ -2721,7 +2722,7 @@ class ExtMapLine$1 extends Line$1 {
|
|
|
2721
2722
|
}
|
|
2722
2723
|
_a$3$1 = ExtMapLine$1;
|
|
2723
2724
|
ExtMapLine$1.EXTMAP_DIRECTION = "sendonly|recvonly|sendrecv|inactive";
|
|
2724
|
-
ExtMapLine$1.regex = new RegExp("^extmap:(".concat(NUM$1, ")(?:/(").concat(_a$3$1.EXTMAP_DIRECTION, "))? (").concat(
|
|
2725
|
+
ExtMapLine$1.regex = new RegExp("^extmap:(".concat(NUM$1, ")(?:/(").concat(_a$3$1.EXTMAP_DIRECTION, "))? (").concat(ANY_NON_WS$1, ")(?: (").concat(REST$1, "))?"));
|
|
2725
2726
|
class FingerprintLine$1 extends Line$1 {
|
|
2726
2727
|
constructor(fingerprint) {
|
|
2727
2728
|
super();
|
|
@@ -2795,7 +2796,7 @@ class IcePwdLine$1 extends Line$1 {
|
|
|
2795
2796
|
return "a=ice-pwd:".concat(this.pwd);
|
|
2796
2797
|
}
|
|
2797
2798
|
}
|
|
2798
|
-
IcePwdLine$1.regex = new RegExp("^ice-pwd:(".concat(
|
|
2799
|
+
IcePwdLine$1.regex = new RegExp("^ice-pwd:(".concat(ANY_NON_WS$1, ")$"));
|
|
2799
2800
|
class IceUfragLine$1 extends Line$1 {
|
|
2800
2801
|
constructor(ufrag) {
|
|
2801
2802
|
super();
|
|
@@ -2813,7 +2814,7 @@ class IceUfragLine$1 extends Line$1 {
|
|
|
2813
2814
|
return "a=ice-ufrag:".concat(this.ufrag);
|
|
2814
2815
|
}
|
|
2815
2816
|
}
|
|
2816
|
-
IceUfragLine$1.regex = new RegExp("^ice-ufrag:(".concat(
|
|
2817
|
+
IceUfragLine$1.regex = new RegExp("^ice-ufrag:(".concat(ANY_NON_WS$1, ")$"));
|
|
2817
2818
|
class MaxMessageSizeLine$1 extends Line$1 {
|
|
2818
2819
|
constructor(maxMessageSize) {
|
|
2819
2820
|
super();
|
|
@@ -2858,7 +2859,7 @@ class MediaLine$1 extends Line$1 {
|
|
|
2858
2859
|
}
|
|
2859
2860
|
_a$2$1 = MediaLine$1;
|
|
2860
2861
|
MediaLine$1.MEDIA_TYPE = 'audio|video|application';
|
|
2861
|
-
MediaLine$1.regex = new RegExp("^(".concat(_a$2$1.MEDIA_TYPE, ") (").concat(NUM$1, ") (").concat(
|
|
2862
|
+
MediaLine$1.regex = new RegExp("^(".concat(_a$2$1.MEDIA_TYPE, ") (").concat(NUM$1, ") (").concat(ANY_NON_WS$1, ") (").concat(REST$1, ")"));
|
|
2862
2863
|
class MidLine$1 extends Line$1 {
|
|
2863
2864
|
constructor(mid) {
|
|
2864
2865
|
super();
|
|
@@ -2876,7 +2877,7 @@ class MidLine$1 extends Line$1 {
|
|
|
2876
2877
|
return "a=mid:".concat(this.mid);
|
|
2877
2878
|
}
|
|
2878
2879
|
}
|
|
2879
|
-
MidLine$1.regex = new RegExp("^mid:(".concat(
|
|
2880
|
+
MidLine$1.regex = new RegExp("^mid:(".concat(ANY_NON_WS$1, ")$"));
|
|
2880
2881
|
class OriginLine$1 extends Line$1 {
|
|
2881
2882
|
constructor(username, sessionId, sessionVersion, netType, addrType, ipAddr) {
|
|
2882
2883
|
super();
|
|
@@ -2904,7 +2905,7 @@ class OriginLine$1 extends Line$1 {
|
|
|
2904
2905
|
return "o=".concat(this.username, " ").concat(this.sessionId, " ").concat(this.sessionVersion, " ").concat(this.netType, " ").concat(this.addrType, " ").concat(this.ipAddr);
|
|
2905
2906
|
}
|
|
2906
2907
|
}
|
|
2907
|
-
OriginLine$1.regex = new RegExp("^(".concat(
|
|
2908
|
+
OriginLine$1.regex = new RegExp("^(".concat(ANY_NON_WS$1, ") (").concat(ANY_NON_WS$1, ") (").concat(NUM$1, ") (").concat(ANY_NON_WS$1, ") (").concat(ANY_NON_WS$1, ") (").concat(ANY_NON_WS$1, ")"));
|
|
2908
2909
|
var _a$1$1;
|
|
2909
2910
|
class RidLine$1 extends Line$1 {
|
|
2910
2911
|
constructor(id, direction, params) {
|
|
@@ -3172,7 +3173,60 @@ class SimulcastLine$1 extends Line$1 {
|
|
|
3172
3173
|
return str;
|
|
3173
3174
|
}
|
|
3174
3175
|
}
|
|
3175
|
-
SimulcastLine$1.regex = new RegExp("^simulcast:(send|recv) (".concat(
|
|
3176
|
+
SimulcastLine$1.regex = new RegExp("^simulcast:(send|recv) (".concat(ANY_NON_WS$1, ")(?: (send|recv) (").concat(ANY_NON_WS$1, "))?"));
|
|
3177
|
+
class SsrcLine$1 extends Line$1 {
|
|
3178
|
+
constructor(ssrcId, attribute) {
|
|
3179
|
+
var attributeValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;
|
|
3180
|
+
var attributeData = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : undefined;
|
|
3181
|
+
super();
|
|
3182
|
+
this.ssrcId = ssrcId;
|
|
3183
|
+
this.attribute = attribute;
|
|
3184
|
+
this.attributeValue = attributeValue;
|
|
3185
|
+
this.attributeData = attributeData;
|
|
3186
|
+
}
|
|
3187
|
+
static fromSdpLine(line) {
|
|
3188
|
+
if (!SsrcLine$1.regex.test(line)) {
|
|
3189
|
+
return undefined;
|
|
3190
|
+
}
|
|
3191
|
+
var tokens = line.match(SsrcLine$1.regex);
|
|
3192
|
+
var ssrcId = parseInt(tokens[1], 10);
|
|
3193
|
+
var attribute = tokens[2];
|
|
3194
|
+
var attributeValue = tokens[3];
|
|
3195
|
+
var attributeData = tokens[4];
|
|
3196
|
+
return new SsrcLine$1(ssrcId, attribute, attributeValue, attributeData);
|
|
3197
|
+
}
|
|
3198
|
+
toSdpLine() {
|
|
3199
|
+
var str = "a=ssrc:".concat(this.ssrcId, " ").concat(this.attribute);
|
|
3200
|
+
if (this.attributeValue) {
|
|
3201
|
+
str += ":".concat(this.attributeValue);
|
|
3202
|
+
}
|
|
3203
|
+
if (this.attributeData) {
|
|
3204
|
+
str += " ".concat(this.attributeData);
|
|
3205
|
+
}
|
|
3206
|
+
return str;
|
|
3207
|
+
}
|
|
3208
|
+
}
|
|
3209
|
+
SsrcLine$1.regex = new RegExp("^ssrc:(".concat(NUM$1, ") (").concat(SDP_TOKEN$1, ")(?::(").concat(SDP_TOKEN$1, ")?(?: (").concat(ANY_NON_WS$1, "))?)?$"));
|
|
3210
|
+
class SsrcGroupLine$1 extends Line$1 {
|
|
3211
|
+
constructor(semantics, ssrcs) {
|
|
3212
|
+
super();
|
|
3213
|
+
this.semantics = semantics;
|
|
3214
|
+
this.ssrcs = ssrcs;
|
|
3215
|
+
}
|
|
3216
|
+
static fromSdpLine(line) {
|
|
3217
|
+
if (!SsrcGroupLine$1.regex.test(line)) {
|
|
3218
|
+
return undefined;
|
|
3219
|
+
}
|
|
3220
|
+
var tokens = line.match(SsrcGroupLine$1.regex);
|
|
3221
|
+
var semantics = tokens[1];
|
|
3222
|
+
var ssrcs = tokens[2].split(' ').map(ssrcStr => parseInt(ssrcStr, 10));
|
|
3223
|
+
return new SsrcGroupLine$1(semantics, ssrcs);
|
|
3224
|
+
}
|
|
3225
|
+
toSdpLine() {
|
|
3226
|
+
return "a=ssrc-group:".concat(this.semantics, " ").concat(this.ssrcs.join(' '));
|
|
3227
|
+
}
|
|
3228
|
+
}
|
|
3229
|
+
SsrcGroupLine$1.regex = new RegExp("^ssrc-group:(SIM|FID|FEC) ((?:".concat(NUM$1).concat(SP$1, "*)+)"));
|
|
3176
3230
|
class TimingLine$1 extends Line$1 {
|
|
3177
3231
|
constructor(startTime, stopTime) {
|
|
3178
3232
|
super();
|
|
@@ -3409,6 +3463,8 @@ class AvMediaDescription$1 extends MediaDescription$1 {
|
|
|
3409
3463
|
this.rids = [];
|
|
3410
3464
|
this.codecs = new Map();
|
|
3411
3465
|
this.rtcpMux = false;
|
|
3466
|
+
this.ssrcs = [];
|
|
3467
|
+
this.ssrcGroups = [];
|
|
3412
3468
|
this.pts = mediaLine.formats.map(fmt => {
|
|
3413
3469
|
return parseInt(fmt, 10);
|
|
3414
3470
|
});
|
|
@@ -3448,6 +3504,8 @@ class AvMediaDescription$1 extends MediaDescription$1 {
|
|
|
3448
3504
|
lines.push(new DirectionLine$1(this.direction));
|
|
3449
3505
|
}
|
|
3450
3506
|
this.codecs.forEach(codec => lines.push(...codec.toLines()));
|
|
3507
|
+
lines.push(...this.ssrcs);
|
|
3508
|
+
lines.push(...this.ssrcGroups);
|
|
3451
3509
|
lines.push(...this.otherLines);
|
|
3452
3510
|
return lines;
|
|
3453
3511
|
}
|
|
@@ -3486,6 +3544,14 @@ class AvMediaDescription$1 extends MediaDescription$1 {
|
|
|
3486
3544
|
codec.addLine(line);
|
|
3487
3545
|
return true;
|
|
3488
3546
|
}
|
|
3547
|
+
if (line instanceof SsrcLine$1) {
|
|
3548
|
+
this.ssrcs.push(line);
|
|
3549
|
+
return true;
|
|
3550
|
+
}
|
|
3551
|
+
if (line instanceof SsrcGroupLine$1) {
|
|
3552
|
+
this.ssrcGroups.push(line);
|
|
3553
|
+
return true;
|
|
3554
|
+
}
|
|
3489
3555
|
this.otherLines.push(line);
|
|
3490
3556
|
return true;
|
|
3491
3557
|
}
|
|
@@ -3630,6 +3696,8 @@ class SdpGrammar$1 extends Grammar$1 {
|
|
|
3630
3696
|
this.addParser('a', RidLine$1.fromSdpLine);
|
|
3631
3697
|
this.addParser('a', CandidateLine$1.fromSdpLine);
|
|
3632
3698
|
this.addParser('a', SimulcastLine$1.fromSdpLine);
|
|
3699
|
+
this.addParser('a', SsrcLine$1.fromSdpLine);
|
|
3700
|
+
this.addParser('a', SsrcGroupLine$1.fromSdpLine);
|
|
3633
3701
|
}
|
|
3634
3702
|
}
|
|
3635
3703
|
var DefaultSdpGrammar$1 = new SdpGrammar$1();
|
|
@@ -4857,7 +4925,12 @@ class LocalTrack extends EventEmitter$2 {
|
|
|
4857
4925
|
* Cleanup local microphone track.
|
|
4858
4926
|
*/
|
|
4859
4927
|
disposeEffects() {
|
|
4860
|
-
this.effects.
|
|
4928
|
+
if (this.effects.size > 0) {
|
|
4929
|
+
this.effects.forEach(effect => effect.dispose());
|
|
4930
|
+
this.effects.clear();
|
|
4931
|
+
this.underlyingStream = this.originalStream;
|
|
4932
|
+
this.emit(LocalTrackEvents.UnderlyingTrackChange);
|
|
4933
|
+
}
|
|
4861
4934
|
}
|
|
4862
4935
|
}
|
|
4863
4936
|
LocalTrack.Events = LocalTrackEvents;
|
|
@@ -8265,6 +8338,17 @@ class PeerConnection extends EventEmitter$2 {
|
|
|
8265
8338
|
getTransceivers() {
|
|
8266
8339
|
return this.pc.getTransceivers();
|
|
8267
8340
|
}
|
|
8341
|
+
/**
|
|
8342
|
+
* Get statistics about either the overall connection or about the specified MediaStreamTrack.
|
|
8343
|
+
*
|
|
8344
|
+
* @param selector - An optional MediaStreamTrack for which to gather statistics. If not provided,
|
|
8345
|
+
* statistics will be gathered for the entire underlying RTCPeerConnection.
|
|
8346
|
+
* @returns - A Promise which resolves with an RTCStatsReport object providing connection
|
|
8347
|
+
* statistics.
|
|
8348
|
+
*/
|
|
8349
|
+
getStats(selector) {
|
|
8350
|
+
return this.pc.getStats(selector);
|
|
8351
|
+
}
|
|
8268
8352
|
/**
|
|
8269
8353
|
* Returns a string that describes the connections' ICE gathering state.
|
|
8270
8354
|
*
|
|
@@ -8850,7 +8934,11 @@ class JmpSession extends EventEmitter$4 {
|
|
|
8850
8934
|
}
|
|
8851
8935
|
updateSourceIndication(numTotalSources, numLiveSources, sources) {
|
|
8852
8936
|
var _a;
|
|
8853
|
-
var
|
|
8937
|
+
var filteredSources = sources.filter(source => {
|
|
8938
|
+
var _a;
|
|
8939
|
+
return (_a = this.lastReceivedScr) === null || _a === void 0 ? void 0 : _a.requests.some(req => req.ids.find(streamId => compareStreamIds(streamId, source.id)));
|
|
8940
|
+
});
|
|
8941
|
+
var sourceIndicationMsg = new SourceIndicationMsg(this.currSourceIndicationSeqNum++, numTotalSources, numLiveSources, filteredSources);
|
|
8854
8942
|
var jmpMsg = new JmpMsg(this.mediaFamily, this.mediaContent, {
|
|
8855
8943
|
msgType: JmpMsgType$1.SourceIndication,
|
|
8856
8944
|
payload: sourceIndicationMsg
|
|
@@ -8995,94 +9083,12 @@ class JmpSession extends EventEmitter$4 {
|
|
|
8995
9083
|
(_a = this.txCallback) === null || _a === void 0 ? void 0 : _a.call(this, JSON.stringify(homerMsg));
|
|
8996
9084
|
}
|
|
8997
9085
|
}
|
|
8998
|
-
var MediaCodecMimeType;
|
|
8999
|
-
(function (MediaCodecMimeType) {
|
|
9000
|
-
MediaCodecMimeType["H264"] = "video/H264";
|
|
9001
|
-
MediaCodecMimeType["AV1"] = "video/AV1";
|
|
9002
|
-
MediaCodecMimeType["OPUS"] = "audio/opus";
|
|
9003
|
-
})(MediaCodecMimeType || (MediaCodecMimeType = {}));
|
|
9004
|
-
var defaultGlobalMaxVideoFrameSize = 8160;
|
|
9005
|
-
var defaultGlobalMaxVideoMbps = 244800;
|
|
9006
|
-
var defaultMaxFrameSize = 3600;
|
|
9007
|
-
var maxFrameSizeToMaxBitrateMap = new Map([[60, 99000], [240, 199000], [576, 300000], [920, 640000], [1296, 720000], [2304, 880000], [3600, 2500000], [8160, 4000000]]);
|
|
9008
|
-
function parseFmtpParams(fmtpParams) {
|
|
9009
|
-
fmtpParams = fmtpParams.replace(/^a=fmtp:\d+\x20/, '');
|
|
9010
|
-
var fmtpObj = {};
|
|
9011
|
-
fmtpParams.split(';').forEach(param => {
|
|
9012
|
-
var paramArr = param && param.split('=');
|
|
9013
|
-
if (paramArr.length !== 2 || !paramArr[0] || !paramArr[1]) {
|
|
9014
|
-
throw new Error("Fmtp params is invalid with ".concat(fmtpParams));
|
|
9015
|
-
}
|
|
9016
|
-
fmtpObj[paramArr[0]] = paramArr[1];
|
|
9017
|
-
});
|
|
9018
|
-
return fmtpObj;
|
|
9019
|
-
}
|
|
9020
|
-
function areProfileLevelIdsCompatible(senderProfileLevelId, receiverProfileLevelId, levelAsymmetryAllowed) {
|
|
9021
|
-
var senderProfile = Number.parseInt("0x".concat(senderProfileLevelId), 16);
|
|
9022
|
-
var recvProfile = Number.parseInt("0x".concat(receiverProfileLevelId), 16);
|
|
9023
|
-
var senderProfileIdc = senderProfile >> 16;
|
|
9024
|
-
var recvProfileIdc = recvProfile >> 16;
|
|
9025
|
-
var senderProfileIop = (senderProfile & 0x00ff00) >> 8;
|
|
9026
|
-
var recvProfileIop = (recvProfile & 0x00ff00) >> 8;
|
|
9027
|
-
var senderLevelIdc = senderProfile & 0x0000ff;
|
|
9028
|
-
var recvLevelIdc = recvProfile & 0x0000ff;
|
|
9029
|
-
var areProfileCompatible = senderProfileIdc === recvProfileIdc && senderProfileIop === recvProfileIop || senderProfileIdc === 0x42 && recvProfileIdc === 0x42 && (senderProfileIop & 0x40) === (recvProfileIop & 0x40);
|
|
9030
|
-
var isLevelIdcCompatible = levelAsymmetryAllowed ? true : senderLevelIdc <= recvLevelIdc;
|
|
9031
|
-
return areProfileCompatible && isLevelIdcCompatible;
|
|
9032
|
-
}
|
|
9033
|
-
function areCodecsCompatible(senderCodec, receiverCodec) {
|
|
9034
|
-
return Object.keys(receiverCodec).every(key => {
|
|
9035
|
-
if (!senderCodec[key] || !receiverCodec[key]) {
|
|
9036
|
-
return false;
|
|
9037
|
-
}
|
|
9038
|
-
if (key === 'payloadType') {
|
|
9039
|
-
return true;
|
|
9040
|
-
}
|
|
9041
|
-
if (key === 'sdpFmtpLine') {
|
|
9042
|
-
var fmtpForSender = parseFmtpParams(senderCodec[key]);
|
|
9043
|
-
var fmtpForReceiver = parseFmtpParams(receiverCodec[key]);
|
|
9044
|
-
var levelAsymmetryAllowed = Object.keys(fmtpForSender).some(senderFmtpParamKey => {
|
|
9045
|
-
return senderFmtpParamKey === 'level-asymmetry-allowed' && fmtpForReceiver[senderFmtpParamKey] === '1' && fmtpForSender[senderFmtpParamKey] === '1';
|
|
9046
|
-
});
|
|
9047
|
-
return Object.keys(fmtpForSender).every(senderFmtpParamKey => {
|
|
9048
|
-
if (fmtpForReceiver[senderFmtpParamKey]) {
|
|
9049
|
-
if (senderFmtpParamKey === 'profile-level-id') {
|
|
9050
|
-
return areProfileLevelIdsCompatible(fmtpForSender[senderFmtpParamKey], fmtpForReceiver[senderFmtpParamKey], levelAsymmetryAllowed);
|
|
9051
|
-
}
|
|
9052
|
-
}
|
|
9053
|
-
if (senderFmtpParamKey === 'packetization-mode') {
|
|
9054
|
-
return fmtpForSender[senderFmtpParamKey] === fmtpForReceiver[senderFmtpParamKey];
|
|
9055
|
-
}
|
|
9056
|
-
return true;
|
|
9057
|
-
});
|
|
9058
|
-
}
|
|
9059
|
-
return senderCodec[key] === receiverCodec[key];
|
|
9060
|
-
});
|
|
9061
|
-
}
|
|
9062
|
-
function gcd(a, b) {
|
|
9063
|
-
return b === 0 ? a : gcd(b, a % b);
|
|
9064
|
-
}
|
|
9065
|
-
function getFrameHeightByMaxFs(sourceAspectRatio, requestedMaxFs) {
|
|
9066
|
-
var _gcd = gcd(sourceAspectRatio[0], sourceAspectRatio[1]);
|
|
9067
|
-
var minNumberRatiosForWidth = sourceAspectRatio[0] / _gcd;
|
|
9068
|
-
var minNumberRatiosForHeight = sourceAspectRatio[1] / _gcd;
|
|
9069
|
-
return Math.floor(Math.sqrt(requestedMaxFs * 16 * 16 / (minNumberRatiosForWidth * minNumberRatiosForHeight))) * minNumberRatiosForHeight;
|
|
9070
|
-
}
|
|
9071
|
-
function getScaleDownRatio(sourceAspectRatio, sourceHeight, requestedMaxFs) {
|
|
9072
|
-
return sourceHeight / getFrameHeightByMaxFs(sourceAspectRatio, requestedMaxFs);
|
|
9073
|
-
}
|
|
9074
|
-
function getMaxBitrate(requestedMaxFs) {
|
|
9075
|
-
var maxFs = requestedMaxFs || defaultMaxFrameSize;
|
|
9076
|
-
var expectedHeight = [...maxFrameSizeToMaxBitrateMap.keys()].sort((a, b) => b - a).find(h => maxFs >= h);
|
|
9077
|
-
return maxFrameSizeToMaxBitrateMap.get(expectedHeight);
|
|
9078
|
-
}
|
|
9079
9086
|
class MediaRequest {
|
|
9080
|
-
constructor(policy, policySpecificInfo, receiveSlots, codecInfos) {
|
|
9081
|
-
var _a, _b;
|
|
9087
|
+
constructor(policy, policySpecificInfo, receiveSlots, maxPayloadBitsPerSecond, codecInfos) {
|
|
9082
9088
|
this.policy = policy;
|
|
9083
9089
|
this.policySpecificInfo = policySpecificInfo;
|
|
9084
9090
|
this.receiveSlots = receiveSlots;
|
|
9085
|
-
this.maxPayloadBitsPerSecond =
|
|
9091
|
+
this.maxPayloadBitsPerSecond = maxPayloadBitsPerSecond;
|
|
9086
9092
|
this.codecInfos = codecInfos;
|
|
9087
9093
|
}
|
|
9088
9094
|
_toJmpScrRequest() {
|
|
@@ -9682,6 +9688,41 @@ var uuid_1 = require$$0;
|
|
|
9682
9688
|
var deepCopy$1 = function deepCopy$1(value) {
|
|
9683
9689
|
return JSON.parse(JSON.stringify(value));
|
|
9684
9690
|
};
|
|
9691
|
+
/**
|
|
9692
|
+
* Check deep equality between two values.
|
|
9693
|
+
*
|
|
9694
|
+
* @param value1 - First value to check.
|
|
9695
|
+
* @param value2 - Second value to check.
|
|
9696
|
+
* @returns True if values are deeply equal, false otherwise.
|
|
9697
|
+
*/
|
|
9698
|
+
var deepEqual = function deepEqual(value1, value2) {
|
|
9699
|
+
// If both immutable values are equal, return true.
|
|
9700
|
+
if (value1 === value2) {
|
|
9701
|
+
return true;
|
|
9702
|
+
}
|
|
9703
|
+
// If both are objects, we check the length and properties of each.
|
|
9704
|
+
if (value1 && value2 && typeof value1 === 'object' && typeof value2 === 'object') {
|
|
9705
|
+
if (value1.constructor !== value2.constructor) return false;
|
|
9706
|
+
// Return false if the objects are of different sizes.
|
|
9707
|
+
if (Object.keys(value1).length !== Object.keys(value2).length) {
|
|
9708
|
+
return false;
|
|
9709
|
+
}
|
|
9710
|
+
// Deep equal check each property in the opject.
|
|
9711
|
+
for (var prop in value1) {
|
|
9712
|
+
if (value2.hasOwnProperty(prop)) {
|
|
9713
|
+
if (!deepEqual(value1[prop], value2[prop])) {
|
|
9714
|
+
return false;
|
|
9715
|
+
}
|
|
9716
|
+
} else {
|
|
9717
|
+
return false;
|
|
9718
|
+
}
|
|
9719
|
+
}
|
|
9720
|
+
// Return true if we found no differing properties.
|
|
9721
|
+
return true;
|
|
9722
|
+
}
|
|
9723
|
+
// Return false if no other conditions are met.
|
|
9724
|
+
return false;
|
|
9725
|
+
};
|
|
9685
9726
|
/**
|
|
9686
9727
|
* Translates a RTCStatsReport into an object.
|
|
9687
9728
|
*
|
|
@@ -9698,6 +9739,18 @@ var map2obj = function map2obj(report) {
|
|
|
9698
9739
|
});
|
|
9699
9740
|
return o;
|
|
9700
9741
|
};
|
|
9742
|
+
var persistedKeys = ['type', 'id', 'timestamp'];
|
|
9743
|
+
/**
|
|
9744
|
+
* Check to see if the report consists of more than just the persisted metadata.
|
|
9745
|
+
*
|
|
9746
|
+
* @param report - The report line being checked.
|
|
9747
|
+
* @returns True if the report item contains non-persisted keys, false otherwise.
|
|
9748
|
+
*/
|
|
9749
|
+
var hasNonMetadata = function hasNonMetadata(report) {
|
|
9750
|
+
return !!Object.keys(report).filter(function (key) {
|
|
9751
|
+
return !persistedKeys.includes(key);
|
|
9752
|
+
}).length;
|
|
9753
|
+
};
|
|
9701
9754
|
/**
|
|
9702
9755
|
* Apply a delta compression to the stats report. Reduces size by ~90%.
|
|
9703
9756
|
* To reduce further, report keys could be compressed.
|
|
@@ -9710,19 +9763,21 @@ var deltaCompression = function deltaCompression(oldStats, newStats) {
|
|
|
9710
9763
|
var updatedStats = deepCopy$1(newStats);
|
|
9711
9764
|
Object.keys(updatedStats).forEach(function (id) {
|
|
9712
9765
|
var report = updatedStats[id];
|
|
9713
|
-
delete report.id;
|
|
9714
9766
|
if (!oldStats[id]) {
|
|
9715
9767
|
return;
|
|
9716
9768
|
}
|
|
9769
|
+
// Persist specific values beyond delta compression, as long as they
|
|
9770
|
+
// aren't the only non-deduped keys.
|
|
9717
9771
|
Object.keys(report).forEach(function (name) {
|
|
9718
|
-
if (report[name]
|
|
9772
|
+
if (deepEqual(report[name], oldStats[id][name]) && !persistedKeys.includes(name)) {
|
|
9719
9773
|
delete updatedStats[id][name];
|
|
9720
9774
|
}
|
|
9721
|
-
if (
|
|
9775
|
+
if (!hasNonMetadata(report)) {
|
|
9722
9776
|
delete updatedStats[id];
|
|
9723
9777
|
}
|
|
9724
9778
|
});
|
|
9725
9779
|
});
|
|
9780
|
+
// Use the most recent timestamp.
|
|
9726
9781
|
var timestamp = -Infinity;
|
|
9727
9782
|
Object.keys(updatedStats).forEach(function (id) {
|
|
9728
9783
|
var report = updatedStats[id];
|
|
@@ -9730,15 +9785,42 @@ var deltaCompression = function deltaCompression(oldStats, newStats) {
|
|
|
9730
9785
|
timestamp = report.timestamp;
|
|
9731
9786
|
}
|
|
9732
9787
|
});
|
|
9788
|
+
// Delete the timestamps on each item.
|
|
9733
9789
|
Object.keys(updatedStats).forEach(function (id) {
|
|
9734
9790
|
var report = updatedStats[id];
|
|
9735
9791
|
if (report.timestamp === timestamp) {
|
|
9736
|
-
report.timestamp
|
|
9792
|
+
delete report.timestamp;
|
|
9737
9793
|
}
|
|
9738
9794
|
});
|
|
9739
9795
|
updatedStats.timestamp = timestamp;
|
|
9740
9796
|
return updatedStats;
|
|
9741
9797
|
};
|
|
9798
|
+
/**
|
|
9799
|
+
* Format the stats report into an array.
|
|
9800
|
+
*
|
|
9801
|
+
* @param report - A WebRTC stats report.
|
|
9802
|
+
* @returns - An array of Stats Report items.
|
|
9803
|
+
*/
|
|
9804
|
+
var formatStatsReport = function formatStatsReport(report) {
|
|
9805
|
+
return Object.keys(report).filter(function (name) {
|
|
9806
|
+
return name !== 'timestamp';
|
|
9807
|
+
}).map(function (name) {
|
|
9808
|
+
return report[name];
|
|
9809
|
+
});
|
|
9810
|
+
};
|
|
9811
|
+
/**
|
|
9812
|
+
* Parametrize a single string event to contain type and an (empty) id.
|
|
9813
|
+
*
|
|
9814
|
+
* @param value - The value to parametrize.
|
|
9815
|
+
* @returns An event object.
|
|
9816
|
+
*/
|
|
9817
|
+
var makeEvent = function makeEvent(value) {
|
|
9818
|
+
return [{
|
|
9819
|
+
value: value,
|
|
9820
|
+
type: 'string',
|
|
9821
|
+
id: ''
|
|
9822
|
+
}];
|
|
9823
|
+
};
|
|
9742
9824
|
/**
|
|
9743
9825
|
* Attach a Peer Connection to periodically get updated on events and stats.
|
|
9744
9826
|
*
|
|
@@ -9761,51 +9843,50 @@ var rtcStats = function rtcStats(pc, logger, intervalTime, id, statsPreProcessor
|
|
|
9761
9843
|
/**
|
|
9762
9844
|
* Log stats or event data with additional tracking information.
|
|
9763
9845
|
*
|
|
9764
|
-
* @param
|
|
9846
|
+
* @param name - Name of the event to log.
|
|
9847
|
+
* @param payload - Log data pertaining to the event.
|
|
9765
9848
|
*/
|
|
9766
|
-
var trace = function trace(
|
|
9849
|
+
var trace = function trace(name, payload, timestamp) {
|
|
9767
9850
|
logger({
|
|
9768
|
-
name: '[rtcstats]',
|
|
9769
9851
|
id: id,
|
|
9770
|
-
|
|
9771
|
-
|
|
9852
|
+
timestamp: timestamp ? Math.round(timestamp) : Date.now(),
|
|
9853
|
+
name: name,
|
|
9854
|
+
payload: payload
|
|
9772
9855
|
});
|
|
9773
9856
|
};
|
|
9774
|
-
trace('creating stats report');
|
|
9775
9857
|
pc.addEventListener('icecandidate', function (e) {
|
|
9776
|
-
|
|
9858
|
+
if (e.candidate) {
|
|
9859
|
+
trace('onicecandidate', makeEvent(JSON.stringify(e.candidate)));
|
|
9860
|
+
}
|
|
9777
9861
|
});
|
|
9778
9862
|
pc.addEventListener('icecandidateerror', function (event) {
|
|
9779
9863
|
var _a = event,
|
|
9780
9864
|
errorCode = _a.errorCode,
|
|
9781
9865
|
errorText = _a.errorText;
|
|
9782
|
-
trace('onicecandidateerror',
|
|
9783
|
-
errorText: errorText,
|
|
9784
|
-
errorCode: errorCode
|
|
9785
|
-
});
|
|
9866
|
+
trace('onicecandidateerror', makeEvent("".concat(errorCode, ": ").concat(errorText)));
|
|
9786
9867
|
});
|
|
9787
9868
|
pc.addEventListener('track', function (e) {
|
|
9788
|
-
trace('ontrack', "".concat(e.track.kind, ":").concat(e.track.id, " ").concat(e.streams.map(function (stream) {
|
|
9869
|
+
trace('ontrack', makeEvent("".concat(e.track.kind, ":").concat(e.track.id, " ").concat(e.streams.map(function (stream) {
|
|
9789
9870
|
return "stream:".concat(stream.id);
|
|
9790
|
-
})));
|
|
9871
|
+
}).join(' '))));
|
|
9791
9872
|
});
|
|
9792
9873
|
pc.addEventListener('signalingstatechange', function () {
|
|
9793
|
-
trace('onsignalingstatechange', pc.signalingState);
|
|
9874
|
+
trace('onsignalingstatechange', makeEvent(pc.signalingState));
|
|
9794
9875
|
});
|
|
9795
9876
|
pc.addEventListener('iceconnectionstatechange', function () {
|
|
9796
|
-
trace('oniceconnectionstatechange', pc.iceConnectionState);
|
|
9877
|
+
trace('oniceconnectionstatechange', makeEvent(pc.iceConnectionState));
|
|
9797
9878
|
});
|
|
9798
9879
|
pc.addEventListener('icegatheringstatechange', function () {
|
|
9799
|
-
trace('onicegatheringstatechange', pc.iceGatheringState);
|
|
9880
|
+
trace('onicegatheringstatechange', makeEvent(pc.iceGatheringState));
|
|
9800
9881
|
});
|
|
9801
9882
|
pc.addEventListener('connectionstatechange', function () {
|
|
9802
|
-
trace('onconnectionstatechange', pc.connectionState);
|
|
9883
|
+
trace('onconnectionstatechange', makeEvent(pc.connectionState));
|
|
9803
9884
|
});
|
|
9804
9885
|
pc.addEventListener('negotiationneeded', function () {
|
|
9805
|
-
trace('onnegotiationneeded');
|
|
9886
|
+
trace('onnegotiationneeded', makeEvent('negotiationneeded'));
|
|
9806
9887
|
});
|
|
9807
9888
|
pc.addEventListener('datachannel', function (event) {
|
|
9808
|
-
trace('ondatachannel',
|
|
9889
|
+
trace('ondatachannel', makeEvent("".concat(event.channel.id, ": ").concat(event.channel.label)));
|
|
9809
9890
|
});
|
|
9810
9891
|
var interval = window.setInterval(function () {
|
|
9811
9892
|
if (pc.signalingState === 'closed') {
|
|
@@ -9816,7 +9897,8 @@ var rtcStats = function rtcStats(pc, logger, intervalTime, id, statsPreProcessor
|
|
|
9816
9897
|
var now = map2obj(res);
|
|
9817
9898
|
statsPreProcessor(now).then(function () {
|
|
9818
9899
|
var base = deepCopy$1(now); // our new prev
|
|
9819
|
-
|
|
9900
|
+
var compressed = deltaCompression(prev, now);
|
|
9901
|
+
trace('stats-report', formatStatsReport(compressed), compressed.timestamp !== -Infinity ? compressed.timestamp : undefined);
|
|
9820
9902
|
prev = base;
|
|
9821
9903
|
});
|
|
9822
9904
|
});
|
|
@@ -11059,6 +11141,88 @@ function hasCodec(codecName, mLine) {
|
|
|
11059
11141
|
return ((_a = ci.name) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === codecName.toLowerCase();
|
|
11060
11142
|
});
|
|
11061
11143
|
}
|
|
11144
|
+
var MediaCodecMimeType;
|
|
11145
|
+
(function (MediaCodecMimeType) {
|
|
11146
|
+
MediaCodecMimeType["H264"] = "video/H264";
|
|
11147
|
+
MediaCodecMimeType["AV1"] = "video/AV1";
|
|
11148
|
+
MediaCodecMimeType["OPUS"] = "audio/opus";
|
|
11149
|
+
})(MediaCodecMimeType || (MediaCodecMimeType = {}));
|
|
11150
|
+
var defaultMaxVideoEncodeFrameSize = 8160;
|
|
11151
|
+
var defaultMaxVideoEncodeMbps = 244800;
|
|
11152
|
+
var RecommendedOpusBitrates;
|
|
11153
|
+
(function (RecommendedOpusBitrates) {
|
|
11154
|
+
RecommendedOpusBitrates[RecommendedOpusBitrates["NB"] = 12000] = "NB";
|
|
11155
|
+
RecommendedOpusBitrates[RecommendedOpusBitrates["WB"] = 20000] = "WB";
|
|
11156
|
+
RecommendedOpusBitrates[RecommendedOpusBitrates["FB"] = 40000] = "FB";
|
|
11157
|
+
RecommendedOpusBitrates[RecommendedOpusBitrates["FB_MONO_MUSIC"] = 64000] = "FB_MONO_MUSIC";
|
|
11158
|
+
RecommendedOpusBitrates[RecommendedOpusBitrates["FB_STEREO_MUSIC"] = 128000] = "FB_STEREO_MUSIC";
|
|
11159
|
+
})(RecommendedOpusBitrates || (RecommendedOpusBitrates = {}));
|
|
11160
|
+
function parseFmtpParams(fmtpParams) {
|
|
11161
|
+
fmtpParams = fmtpParams.replace(/^a=fmtp:\d+\x20/, '');
|
|
11162
|
+
var fmtpObj = {};
|
|
11163
|
+
fmtpParams.split(';').forEach(param => {
|
|
11164
|
+
var paramArr = param && param.split('=');
|
|
11165
|
+
if (paramArr.length !== 2 || !paramArr[0] || !paramArr[1]) {
|
|
11166
|
+
throw new Error("Fmtp params is invalid with ".concat(fmtpParams));
|
|
11167
|
+
}
|
|
11168
|
+
fmtpObj[paramArr[0]] = paramArr[1];
|
|
11169
|
+
});
|
|
11170
|
+
return fmtpObj;
|
|
11171
|
+
}
|
|
11172
|
+
function areProfileLevelIdsCompatible(senderProfileLevelId, receiverProfileLevelId, levelAsymmetryAllowed) {
|
|
11173
|
+
var senderProfile = Number.parseInt("0x".concat(senderProfileLevelId), 16);
|
|
11174
|
+
var recvProfile = Number.parseInt("0x".concat(receiverProfileLevelId), 16);
|
|
11175
|
+
var senderProfileIdc = senderProfile >> 16;
|
|
11176
|
+
var recvProfileIdc = recvProfile >> 16;
|
|
11177
|
+
var senderProfileIop = (senderProfile & 0x00ff00) >> 8;
|
|
11178
|
+
var recvProfileIop = (recvProfile & 0x00ff00) >> 8;
|
|
11179
|
+
var senderLevelIdc = senderProfile & 0x0000ff;
|
|
11180
|
+
var recvLevelIdc = recvProfile & 0x0000ff;
|
|
11181
|
+
var areProfileCompatible = senderProfileIdc === recvProfileIdc && senderProfileIop === recvProfileIop || senderProfileIdc === 0x42 && recvProfileIdc === 0x42 && (senderProfileIop & 0x40) === (recvProfileIop & 0x40);
|
|
11182
|
+
var isLevelIdcCompatible = levelAsymmetryAllowed ? true : senderLevelIdc <= recvLevelIdc;
|
|
11183
|
+
return areProfileCompatible && isLevelIdcCompatible;
|
|
11184
|
+
}
|
|
11185
|
+
function areCodecsCompatible(senderCodec, receiverCodec) {
|
|
11186
|
+
return Object.keys(receiverCodec).every(key => {
|
|
11187
|
+
if (!senderCodec[key] || !receiverCodec[key]) {
|
|
11188
|
+
return false;
|
|
11189
|
+
}
|
|
11190
|
+
if (key === 'payloadType') {
|
|
11191
|
+
return true;
|
|
11192
|
+
}
|
|
11193
|
+
if (key === 'sdpFmtpLine') {
|
|
11194
|
+
var fmtpForSender = parseFmtpParams(senderCodec[key]);
|
|
11195
|
+
var fmtpForReceiver = parseFmtpParams(receiverCodec[key]);
|
|
11196
|
+
var levelAsymmetryAllowed = Object.keys(fmtpForSender).some(senderFmtpParamKey => {
|
|
11197
|
+
return senderFmtpParamKey === 'level-asymmetry-allowed' && fmtpForReceiver[senderFmtpParamKey] === '1' && fmtpForSender[senderFmtpParamKey] === '1';
|
|
11198
|
+
});
|
|
11199
|
+
return Object.keys(fmtpForSender).every(senderFmtpParamKey => {
|
|
11200
|
+
if (fmtpForReceiver[senderFmtpParamKey]) {
|
|
11201
|
+
if (senderFmtpParamKey === 'profile-level-id') {
|
|
11202
|
+
return areProfileLevelIdsCompatible(fmtpForSender[senderFmtpParamKey], fmtpForReceiver[senderFmtpParamKey], levelAsymmetryAllowed);
|
|
11203
|
+
}
|
|
11204
|
+
}
|
|
11205
|
+
if (senderFmtpParamKey === 'packetization-mode') {
|
|
11206
|
+
return fmtpForSender[senderFmtpParamKey] === fmtpForReceiver[senderFmtpParamKey];
|
|
11207
|
+
}
|
|
11208
|
+
return true;
|
|
11209
|
+
});
|
|
11210
|
+
}
|
|
11211
|
+
return senderCodec[key] === receiverCodec[key];
|
|
11212
|
+
});
|
|
11213
|
+
}
|
|
11214
|
+
function gcd(a, b) {
|
|
11215
|
+
return b === 0 ? a : gcd(b, a % b);
|
|
11216
|
+
}
|
|
11217
|
+
function getFrameHeightByMaxFs(sourceAspectRatio, requestedMaxFs) {
|
|
11218
|
+
var _gcd = gcd(sourceAspectRatio[0], sourceAspectRatio[1]);
|
|
11219
|
+
var minNumberRatiosForWidth = sourceAspectRatio[0] / _gcd;
|
|
11220
|
+
var minNumberRatiosForHeight = sourceAspectRatio[1] / _gcd;
|
|
11221
|
+
return Math.floor(Math.sqrt(requestedMaxFs * 16 * 16 / (minNumberRatiosForWidth * minNumberRatiosForHeight))) * minNumberRatiosForHeight;
|
|
11222
|
+
}
|
|
11223
|
+
function getScaleDownRatio(sourceAspectRatio, sourceHeight, requestedMaxFs) {
|
|
11224
|
+
return sourceHeight / getFrameHeightByMaxFs(sourceAspectRatio, requestedMaxFs);
|
|
11225
|
+
}
|
|
11062
11226
|
var events = {
|
|
11063
11227
|
exports: {}
|
|
11064
11228
|
};
|
|
@@ -11448,1894 +11612,1944 @@ function eventTargetAgnosticAddListener(emitter, name, listener, flags) {
|
|
|
11448
11612
|
}
|
|
11449
11613
|
}
|
|
11450
11614
|
class EventEmitter extends events.exports.EventEmitter {}
|
|
11451
|
-
var
|
|
11452
|
-
|
|
11453
|
-
|
|
11454
|
-
|
|
11455
|
-
|
|
11456
|
-
|
|
11457
|
-
|
|
11458
|
-
|
|
11459
|
-
|
|
11460
|
-
|
|
11461
|
-
|
|
11462
|
-
|
|
11463
|
-
|
|
11464
|
-
|
|
11465
|
-
|
|
11466
|
-
|
|
11467
|
-
|
|
11615
|
+
var OveruseState;
|
|
11616
|
+
(function (OveruseState) {
|
|
11617
|
+
OveruseState[OveruseState["NOT_OVERUSED"] = 0] = "NOT_OVERUSED";
|
|
11618
|
+
OveruseState[OveruseState["OVERUSED"] = 1] = "OVERUSED";
|
|
11619
|
+
})(OveruseState || (OveruseState = {}));
|
|
11620
|
+
class OveruseStateManager {
|
|
11621
|
+
constructor(callback) {
|
|
11622
|
+
this.monitors = [];
|
|
11623
|
+
this.lastOverallOveruseState = OveruseState.NOT_OVERUSED;
|
|
11624
|
+
this.isRunning = false;
|
|
11625
|
+
this.overuseUpdateCallback = callback;
|
|
11626
|
+
}
|
|
11627
|
+
addMonitor(monitor) {
|
|
11628
|
+
this.monitors.push(monitor);
|
|
11629
|
+
if (this.isRunning) {
|
|
11630
|
+
monitor.startMonitoring(() => this.onMonitorOveruseUpdate());
|
|
11631
|
+
}
|
|
11632
|
+
}
|
|
11633
|
+
start() {
|
|
11634
|
+
this.isRunning = true;
|
|
11635
|
+
this.monitors.forEach(monitor => monitor.startMonitoring(() => this.onMonitorOveruseUpdate()));
|
|
11636
|
+
}
|
|
11637
|
+
stop() {
|
|
11638
|
+
this.isRunning = false;
|
|
11639
|
+
this.monitors.forEach(monitor => monitor.stopMonitoring());
|
|
11640
|
+
}
|
|
11641
|
+
onMonitorOveruseUpdate() {
|
|
11642
|
+
var overuseStates = this.monitors.map(monitor => monitor.getLastOveruseState());
|
|
11643
|
+
var overallOveruseState = overuseStates.some(overuseState => overuseState === OveruseState.OVERUSED) ? OveruseState.OVERUSED : OveruseState.NOT_OVERUSED;
|
|
11644
|
+
if (overallOveruseState !== this.lastOverallOveruseState) {
|
|
11645
|
+
this.lastOverallOveruseState = overallOveruseState;
|
|
11646
|
+
this.overuseUpdateCallback(overallOveruseState);
|
|
11647
|
+
}
|
|
11648
|
+
}
|
|
11649
|
+
}
|
|
11650
|
+
var ReceiveSlotEvents;
|
|
11651
|
+
(function (ReceiveSlotEvents) {
|
|
11652
|
+
ReceiveSlotEvents["MediaStarted"] = "media-started";
|
|
11653
|
+
ReceiveSlotEvents["MediaStopped"] = "media-stopped";
|
|
11654
|
+
ReceiveSlotEvents["SourceUpdate"] = "source-update";
|
|
11655
|
+
})(ReceiveSlotEvents || (ReceiveSlotEvents = {}));
|
|
11656
|
+
class ReceiveSlot extends EventEmitter {
|
|
11657
|
+
constructor(idGetter, track) {
|
|
11658
|
+
super();
|
|
11659
|
+
this._idGetter = idGetter;
|
|
11660
|
+
this.handleTrackMuted = this.handleTrackMuted.bind(this);
|
|
11661
|
+
this.handleTrackUnmuted = this.handleTrackUnmuted.bind(this);
|
|
11662
|
+
this._stream = new MediaStream([track]);
|
|
11663
|
+
this.addTrackHandlers(track);
|
|
11664
|
+
}
|
|
11665
|
+
addTrackHandlers(track) {
|
|
11666
|
+
track.addEventListener('mute', this.handleTrackMuted);
|
|
11667
|
+
track.addEventListener('unmute', this.handleTrackUnmuted);
|
|
11668
|
+
}
|
|
11669
|
+
handleTrackMuted() {
|
|
11670
|
+
this.emit(ReceiveSlotEvents.MediaStopped);
|
|
11671
|
+
}
|
|
11672
|
+
handleTrackUnmuted() {
|
|
11673
|
+
this.emit(ReceiveSlotEvents.MediaStarted);
|
|
11674
|
+
}
|
|
11675
|
+
removeTrackHandlers(track) {
|
|
11676
|
+
track.removeEventListener('mute', this.handleTrackMuted);
|
|
11677
|
+
track.removeEventListener('unmute', this.handleTrackUnmuted);
|
|
11678
|
+
}
|
|
11679
|
+
replaceTrack(newTrack) {
|
|
11680
|
+
var _a;
|
|
11681
|
+
var trackToRemove = (_a = this._stream.getTracks()) === null || _a === void 0 ? void 0 : _a[0];
|
|
11682
|
+
if (trackToRemove) {
|
|
11683
|
+
this._stream.removeTrack(trackToRemove);
|
|
11684
|
+
this.removeTrackHandlers(trackToRemove);
|
|
11685
|
+
}
|
|
11686
|
+
this.addTrackHandlers(newTrack);
|
|
11687
|
+
this._stream.addTrack(newTrack);
|
|
11688
|
+
}
|
|
11689
|
+
_updateSource(state, csi) {
|
|
11690
|
+
this.currentRxCsi = csi;
|
|
11691
|
+
this.emit(ReceiveSlotEvents.SourceUpdate, state, csi);
|
|
11692
|
+
}
|
|
11693
|
+
close() {
|
|
11694
|
+
this._stream.getTracks().forEach(t => {
|
|
11695
|
+
this.removeTrackHandlers(t);
|
|
11696
|
+
});
|
|
11697
|
+
}
|
|
11698
|
+
get id() {
|
|
11699
|
+
return this._idGetter();
|
|
11700
|
+
}
|
|
11701
|
+
get stream() {
|
|
11702
|
+
return this._stream;
|
|
11703
|
+
}
|
|
11704
|
+
}
|
|
11705
|
+
ReceiveSlot.Events = ReceiveSlotEvents;
|
|
11706
|
+
class Transceiver {
|
|
11707
|
+
constructor(rtcRtpTransceiver) {
|
|
11708
|
+
this._rtcRtpTransceiver = rtcRtpTransceiver;
|
|
11709
|
+
}
|
|
11710
|
+
replaceTransceiver(newRtcRtpTransceiver) {
|
|
11711
|
+
this._rtcRtpTransceiver = newRtcRtpTransceiver;
|
|
11712
|
+
}
|
|
11713
|
+
get receiver() {
|
|
11714
|
+
return this._rtcRtpTransceiver.receiver;
|
|
11715
|
+
}
|
|
11716
|
+
get sender() {
|
|
11717
|
+
return this._rtcRtpTransceiver.sender;
|
|
11718
|
+
}
|
|
11719
|
+
get mid() {
|
|
11720
|
+
return this._rtcRtpTransceiver.mid;
|
|
11721
|
+
}
|
|
11722
|
+
close() {
|
|
11723
|
+
this._rtcRtpTransceiver.stop();
|
|
11724
|
+
}
|
|
11725
|
+
}
|
|
11726
|
+
class ReceiveOnlyTransceiver extends Transceiver {
|
|
11727
|
+
constructor(rtcRtpTransceiver, idGetter) {
|
|
11728
|
+
super(rtcRtpTransceiver);
|
|
11729
|
+
this._receiveSlot = new ReceiveSlot(() => {
|
|
11730
|
+
if (!this._rtcRtpTransceiver.mid) {
|
|
11731
|
+
return null;
|
|
11468
11732
|
}
|
|
11469
|
-
return
|
|
11470
|
-
|
|
11471
|
-
|
|
11472
|
-
|
|
11473
|
-
|
|
11474
|
-
|
|
11475
|
-
|
|
11476
|
-
|
|
11477
|
-
|
|
11478
|
-
|
|
11733
|
+
return idGetter(this._rtcRtpTransceiver.mid);
|
|
11734
|
+
}, this._rtcRtpTransceiver.receiver.track);
|
|
11735
|
+
}
|
|
11736
|
+
replaceTransceiver(newRtcRtpTransceiver) {
|
|
11737
|
+
super.replaceTransceiver(newRtcRtpTransceiver);
|
|
11738
|
+
this._receiveSlot.replaceTrack(newRtcRtpTransceiver.receiver.track);
|
|
11739
|
+
}
|
|
11740
|
+
close() {
|
|
11741
|
+
super.close();
|
|
11742
|
+
this._receiveSlot.close();
|
|
11743
|
+
}
|
|
11744
|
+
get receiveSlot() {
|
|
11745
|
+
return this._receiveSlot;
|
|
11746
|
+
}
|
|
11747
|
+
getStats() {
|
|
11748
|
+
return this.receiver.getStats();
|
|
11749
|
+
}
|
|
11750
|
+
}
|
|
11751
|
+
ReceiveOnlyTransceiver.rid = '1';
|
|
11752
|
+
class JmpLine extends Line {
|
|
11753
|
+
static fromSdpLine(line) {
|
|
11754
|
+
if (!JmpLine.regex.test(line)) {
|
|
11755
|
+
return undefined;
|
|
11756
|
+
}
|
|
11757
|
+
return new JmpLine();
|
|
11758
|
+
}
|
|
11759
|
+
toSdpLine() {
|
|
11760
|
+
return "a=jmp";
|
|
11761
|
+
}
|
|
11762
|
+
}
|
|
11763
|
+
JmpLine.regex = /^jmp$/;
|
|
11764
|
+
class JmpStreamIdModeLine extends Line {
|
|
11765
|
+
constructor(streamIdMode) {
|
|
11766
|
+
super();
|
|
11767
|
+
this.streamIdMode = streamIdMode;
|
|
11768
|
+
}
|
|
11769
|
+
static fromSdpLine(line) {
|
|
11770
|
+
if (!JmpStreamIdModeLine.regex.test(line)) {
|
|
11771
|
+
return undefined;
|
|
11772
|
+
}
|
|
11773
|
+
var tokens = line.match(JmpStreamIdModeLine.regex);
|
|
11774
|
+
var mode = tokens[1];
|
|
11775
|
+
return new JmpStreamIdModeLine(mode);
|
|
11776
|
+
}
|
|
11777
|
+
toSdpLine() {
|
|
11778
|
+
return "a=jmp-stream-id-mode:".concat(this.streamIdMode);
|
|
11779
|
+
}
|
|
11780
|
+
}
|
|
11781
|
+
JmpStreamIdModeLine.regex = /^jmp-stream-id-mode:(MID-RID|SSRC)$/;
|
|
11782
|
+
class JmpSourceLine extends Line {
|
|
11783
|
+
constructor(source, csi) {
|
|
11784
|
+
super();
|
|
11785
|
+
this.source = source;
|
|
11786
|
+
this.csi = csi;
|
|
11787
|
+
}
|
|
11788
|
+
static fromSdpLine(line) {
|
|
11789
|
+
if (!JmpSourceLine.regex.test(line)) {
|
|
11790
|
+
return undefined;
|
|
11791
|
+
}
|
|
11792
|
+
var tokens = line.match(JmpSourceLine.regex);
|
|
11793
|
+
var source = tokens[1];
|
|
11794
|
+
var csi = tokens[2];
|
|
11795
|
+
return new JmpSourceLine(source, csi);
|
|
11796
|
+
}
|
|
11797
|
+
toSdpLine() {
|
|
11798
|
+
var line = "a=jmp-source:".concat(this.source);
|
|
11799
|
+
if (this.csi) {
|
|
11800
|
+
line += " csi=".concat(this.csi);
|
|
11801
|
+
}
|
|
11802
|
+
return line;
|
|
11803
|
+
}
|
|
11804
|
+
}
|
|
11805
|
+
JmpSourceLine.regex = new RegExp("^jmp-source:(".concat(ANY_NON_WS, ") (?:csi=(").concat(ANY_NON_WS, "))"));
|
|
11806
|
+
DefaultSdpGrammar.addParser('a', JmpLine.fromSdpLine);
|
|
11807
|
+
DefaultSdpGrammar.addParser('a', JmpSourceLine.fromSdpLine);
|
|
11808
|
+
DefaultSdpGrammar.addParser('a', JmpStreamIdModeLine.fromSdpLine);
|
|
11809
|
+
function deepCopy(source) {
|
|
11810
|
+
return Array.isArray(source) ? source.map(item => deepCopy(item)) : source instanceof Map ? new Map(source) : source instanceof Date ? new Date(source.getTime()) : source && typeof source === 'object' ? Object.getOwnPropertyNames(source).reduce((o, prop) => {
|
|
11811
|
+
Object.defineProperty(o, prop, Object.getOwnPropertyDescriptor(source, prop));
|
|
11812
|
+
o[prop] = deepCopy(source[prop]);
|
|
11813
|
+
return o;
|
|
11814
|
+
}, Object.create(Object.getPrototypeOf(source))) : source;
|
|
11815
|
+
}
|
|
11816
|
+
function getMediaTypeForMline(mLine) {
|
|
11817
|
+
var _a, _b;
|
|
11818
|
+
var mediaFamily;
|
|
11819
|
+
if (mLine.type.toLowerCase() === MediaFamily$1.Audio.toLowerCase()) {
|
|
11820
|
+
mediaFamily = MediaFamily$1.Audio;
|
|
11821
|
+
} else if (mLine.type.toLowerCase() === MediaFamily$1.Video.toLowerCase()) {
|
|
11822
|
+
mediaFamily = MediaFamily$1.Video;
|
|
11823
|
+
} else {
|
|
11824
|
+
throw Error("Mline type doesn't match any known MediaFamily: ".concat(mLine.type));
|
|
11825
|
+
}
|
|
11826
|
+
var mediaContent;
|
|
11827
|
+
if ((_b = (_a = mLine.content) === null || _a === void 0 ? void 0 : _a.values) === null || _b === void 0 ? void 0 : _b.some(v => v.toLowerCase() === 'slides')) {
|
|
11828
|
+
mediaContent = MediaContent$1.Slides;
|
|
11829
|
+
} else {
|
|
11830
|
+
mediaContent = MediaContent$1.Main;
|
|
11831
|
+
}
|
|
11832
|
+
return getMediaType(mediaFamily, mediaContent);
|
|
11833
|
+
}
|
|
11834
|
+
function filterCodecs(parsedSdp, allowedCodecs) {
|
|
11835
|
+
var allowedLowerCase = allowedCodecs.map(s => s.toLowerCase());
|
|
11836
|
+
parsedSdp.avMedia.map(m => [...m.codecs.values()].map(c => c.name)).flat().filter(codecName => !allowedLowerCase.includes(codecName.toLowerCase())).forEach(c => removeCodec(parsedSdp, c));
|
|
11837
|
+
}
|
|
11838
|
+
function setMaxBandwidth(parsedSdp, maxBandwidth) {
|
|
11839
|
+
parsedSdp.avMedia.forEach(mline => {
|
|
11840
|
+
mline.bandwidth = new BandwidthLine('TIAS', maxBandwidth);
|
|
11841
|
+
});
|
|
11842
|
+
}
|
|
11843
|
+
function setupBundle(parsedSdp, bundlePolicy) {
|
|
11844
|
+
if (bundlePolicy === 'compat') {
|
|
11845
|
+
var audioMids = parsedSdp.avMedia.filter(m => m.type === 'audio').map(m => m.mid);
|
|
11846
|
+
var videoMids = parsedSdp.avMedia.filter(m => m.type === 'video').map(m => m.mid);
|
|
11847
|
+
parsedSdp.session.groups.splice(0, parsedSdp.session.groups.length);
|
|
11848
|
+
parsedSdp.session.groups.push(new BundleGroupLine(audioMids));
|
|
11849
|
+
parsedSdp.session.groups.push(new BundleGroupLine(videoMids));
|
|
11850
|
+
}
|
|
11851
|
+
}
|
|
11852
|
+
function filterRecvOnlyMlines(parsedSdp) {
|
|
11853
|
+
var filteredMids = [];
|
|
11854
|
+
parsedSdp.media = parsedSdp.media.filter(mLine => {
|
|
11855
|
+
if (mLine instanceof ApplicationMediaDescription || mLine instanceof AvMediaDescription && mLine.direction !== 'recvonly') {
|
|
11856
|
+
filteredMids.push(mLine.mid);
|
|
11857
|
+
return true;
|
|
11858
|
+
}
|
|
11859
|
+
return false;
|
|
11860
|
+
});
|
|
11861
|
+
parsedSdp.session.groups.forEach(g => {
|
|
11862
|
+
g.mids = g.mids.filter(m => filteredMids.includes(m));
|
|
11863
|
+
});
|
|
11864
|
+
}
|
|
11865
|
+
function matchMlinesInAnswer(parsedOffer, parsedAnswer, streamSignalerManager) {
|
|
11866
|
+
parsedAnswer.session.groups = parsedOffer.session.groups;
|
|
11867
|
+
parsedAnswer.media = parsedOffer.media.map(offerMline => {
|
|
11868
|
+
if (!offerMline.mid) {
|
|
11869
|
+
throw new Error("Offer mline is missing MID");
|
|
11870
|
+
}
|
|
11871
|
+
var answerMline = parsedAnswer.media.find(m => m.mid === offerMline.mid);
|
|
11872
|
+
if (answerMline) {
|
|
11873
|
+
if (answerMline instanceof AvMediaDescription) {
|
|
11874
|
+
[...answerMline.codecs.values()].forEach(ci => {
|
|
11875
|
+
ci.fmtParams.push('x-google-start-bitrate=60000');
|
|
11479
11876
|
});
|
|
11480
|
-
}, r.t = function (e, t) {
|
|
11481
|
-
if (1 & t && (e = r(e)), 8 & t) return e;
|
|
11482
|
-
if (4 & t && "object" == typeof e && e && e.__esModule) return e;
|
|
11483
|
-
var n = Object.create(null);
|
|
11484
|
-
if (r.r(n), Object.defineProperty(n, "default", {
|
|
11485
|
-
enumerable: !0,
|
|
11486
|
-
value: e
|
|
11487
|
-
}), 2 & t && "string" != typeof e) for (var i in e) {
|
|
11488
|
-
r.d(n, i, function (t) {
|
|
11489
|
-
return e[t];
|
|
11490
|
-
}.bind(null, i));
|
|
11491
|
-
}
|
|
11492
|
-
return n;
|
|
11493
|
-
}, r.n = function (e) {
|
|
11494
|
-
var t = e && e.__esModule ? function () {
|
|
11495
|
-
return e.default;
|
|
11496
|
-
} : function () {
|
|
11497
|
-
return e;
|
|
11498
|
-
};
|
|
11499
|
-
return r.d(t, "a", t), t;
|
|
11500
|
-
}, r.o = function (e, t) {
|
|
11501
|
-
return Object.prototype.hasOwnProperty.call(e, t);
|
|
11502
|
-
}, r.p = "", r(r.s = 90);
|
|
11503
|
-
}({
|
|
11504
|
-
17: function _(e, t, r) {
|
|
11505
|
-
t.__esModule = !0, t.default = void 0;
|
|
11506
|
-
var n = r(18),
|
|
11507
|
-
i = function () {
|
|
11508
|
-
function e() {}
|
|
11509
|
-
return e.getFirstMatch = function (e, t) {
|
|
11510
|
-
var r = t.match(e);
|
|
11511
|
-
return r && r.length > 0 && r[1] || "";
|
|
11512
|
-
}, e.getSecondMatch = function (e, t) {
|
|
11513
|
-
var r = t.match(e);
|
|
11514
|
-
return r && r.length > 1 && r[2] || "";
|
|
11515
|
-
}, e.matchAndReturnConst = function (e, t, r) {
|
|
11516
|
-
if (e.test(t)) return r;
|
|
11517
|
-
}, e.getWindowsVersionName = function (e) {
|
|
11518
|
-
switch (e) {
|
|
11519
|
-
case "NT":
|
|
11520
|
-
return "NT";
|
|
11521
|
-
case "XP":
|
|
11522
|
-
return "XP";
|
|
11523
|
-
case "NT 5.0":
|
|
11524
|
-
return "2000";
|
|
11525
|
-
case "NT 5.1":
|
|
11526
|
-
return "XP";
|
|
11527
|
-
case "NT 5.2":
|
|
11528
|
-
return "2003";
|
|
11529
|
-
case "NT 6.0":
|
|
11530
|
-
return "Vista";
|
|
11531
|
-
case "NT 6.1":
|
|
11532
|
-
return "7";
|
|
11533
|
-
case "NT 6.2":
|
|
11534
|
-
return "8";
|
|
11535
|
-
case "NT 6.3":
|
|
11536
|
-
return "8.1";
|
|
11537
|
-
case "NT 10.0":
|
|
11538
|
-
return "10";
|
|
11539
|
-
default:
|
|
11540
|
-
return;
|
|
11541
|
-
}
|
|
11542
|
-
}, e.getMacOSVersionName = function (e) {
|
|
11543
|
-
var t = e.split(".").splice(0, 2).map(function (e) {
|
|
11544
|
-
return parseInt(e, 10) || 0;
|
|
11545
|
-
});
|
|
11546
|
-
if (t.push(0), 10 === t[0]) switch (t[1]) {
|
|
11547
|
-
case 5:
|
|
11548
|
-
return "Leopard";
|
|
11549
|
-
case 6:
|
|
11550
|
-
return "Snow Leopard";
|
|
11551
|
-
case 7:
|
|
11552
|
-
return "Lion";
|
|
11553
|
-
case 8:
|
|
11554
|
-
return "Mountain Lion";
|
|
11555
|
-
case 9:
|
|
11556
|
-
return "Mavericks";
|
|
11557
|
-
case 10:
|
|
11558
|
-
return "Yosemite";
|
|
11559
|
-
case 11:
|
|
11560
|
-
return "El Capitan";
|
|
11561
|
-
case 12:
|
|
11562
|
-
return "Sierra";
|
|
11563
|
-
case 13:
|
|
11564
|
-
return "High Sierra";
|
|
11565
|
-
case 14:
|
|
11566
|
-
return "Mojave";
|
|
11567
|
-
case 15:
|
|
11568
|
-
return "Catalina";
|
|
11569
|
-
default:
|
|
11570
|
-
return;
|
|
11571
|
-
}
|
|
11572
|
-
}, e.getAndroidVersionName = function (e) {
|
|
11573
|
-
var t = e.split(".").splice(0, 2).map(function (e) {
|
|
11574
|
-
return parseInt(e, 10) || 0;
|
|
11575
|
-
});
|
|
11576
|
-
if (t.push(0), !(1 === t[0] && t[1] < 5)) return 1 === t[0] && t[1] < 6 ? "Cupcake" : 1 === t[0] && t[1] >= 6 ? "Donut" : 2 === t[0] && t[1] < 2 ? "Eclair" : 2 === t[0] && 2 === t[1] ? "Froyo" : 2 === t[0] && t[1] > 2 ? "Gingerbread" : 3 === t[0] ? "Honeycomb" : 4 === t[0] && t[1] < 1 ? "Ice Cream Sandwich" : 4 === t[0] && t[1] < 4 ? "Jelly Bean" : 4 === t[0] && t[1] >= 4 ? "KitKat" : 5 === t[0] ? "Lollipop" : 6 === t[0] ? "Marshmallow" : 7 === t[0] ? "Nougat" : 8 === t[0] ? "Oreo" : 9 === t[0] ? "Pie" : void 0;
|
|
11577
|
-
}, e.getVersionPrecision = function (e) {
|
|
11578
|
-
return e.split(".").length;
|
|
11579
|
-
}, e.compareVersions = function (t, r, n) {
|
|
11580
|
-
void 0 === n && (n = !1);
|
|
11581
|
-
var i = e.getVersionPrecision(t),
|
|
11582
|
-
s = e.getVersionPrecision(r),
|
|
11583
|
-
a = Math.max(i, s),
|
|
11584
|
-
o = 0,
|
|
11585
|
-
u = e.map([t, r], function (t) {
|
|
11586
|
-
var r = a - e.getVersionPrecision(t),
|
|
11587
|
-
n = t + new Array(r + 1).join(".0");
|
|
11588
|
-
return e.map(n.split("."), function (e) {
|
|
11589
|
-
return new Array(20 - e.length).join("0") + e;
|
|
11590
|
-
}).reverse();
|
|
11591
|
-
});
|
|
11592
|
-
for (n && (o = a - Math.min(i, s)), a -= 1; a >= o;) {
|
|
11593
|
-
if (u[0][a] > u[1][a]) return 1;
|
|
11594
|
-
if (u[0][a] === u[1][a]) {
|
|
11595
|
-
if (a === o) return 0;
|
|
11596
|
-
a -= 1;
|
|
11597
|
-
} else if (u[0][a] < u[1][a]) return -1;
|
|
11598
|
-
}
|
|
11599
|
-
}, e.map = function (e, t) {
|
|
11600
|
-
var r,
|
|
11601
|
-
n = [];
|
|
11602
|
-
if (Array.prototype.map) return Array.prototype.map.call(e, t);
|
|
11603
|
-
for (r = 0; r < e.length; r += 1) {
|
|
11604
|
-
n.push(t(e[r]));
|
|
11605
|
-
}
|
|
11606
|
-
return n;
|
|
11607
|
-
}, e.find = function (e, t) {
|
|
11608
|
-
var r, n;
|
|
11609
|
-
if (Array.prototype.find) return Array.prototype.find.call(e, t);
|
|
11610
|
-
for (r = 0, n = e.length; r < n; r += 1) {
|
|
11611
|
-
var i = e[r];
|
|
11612
|
-
if (t(i, r)) return i;
|
|
11613
|
-
}
|
|
11614
|
-
}, e.assign = function (e) {
|
|
11615
|
-
for (var t, r, n = e, i = arguments.length, s = new Array(i > 1 ? i - 1 : 0), a = 1; a < i; a++) {
|
|
11616
|
-
s[a - 1] = arguments[a];
|
|
11617
|
-
}
|
|
11618
|
-
if (Object.assign) return Object.assign.apply(Object, [e].concat(s));
|
|
11619
|
-
var o = function o() {
|
|
11620
|
-
var e = s[t];
|
|
11621
|
-
"object" == typeof e && null !== e && Object.keys(e).forEach(function (t) {
|
|
11622
|
-
n[t] = e[t];
|
|
11623
|
-
});
|
|
11624
|
-
};
|
|
11625
|
-
for (t = 0, r = s.length; t < r; t += 1) {
|
|
11626
|
-
o();
|
|
11627
|
-
}
|
|
11628
|
-
return e;
|
|
11629
|
-
}, e.getBrowserAlias = function (e) {
|
|
11630
|
-
return n.BROWSER_ALIASES_MAP[e];
|
|
11631
|
-
}, e.getBrowserTypeByAlias = function (e) {
|
|
11632
|
-
return n.BROWSER_MAP[e] || "";
|
|
11633
|
-
}, e;
|
|
11634
|
-
}();
|
|
11635
|
-
t.default = i, e.exports = t.default;
|
|
11636
|
-
},
|
|
11637
|
-
18: function _(e, t, r) {
|
|
11638
|
-
t.__esModule = !0, t.ENGINE_MAP = t.OS_MAP = t.PLATFORMS_MAP = t.BROWSER_MAP = t.BROWSER_ALIASES_MAP = void 0;
|
|
11639
|
-
t.BROWSER_ALIASES_MAP = {
|
|
11640
|
-
"Amazon Silk": "amazon_silk",
|
|
11641
|
-
"Android Browser": "android",
|
|
11642
|
-
Bada: "bada",
|
|
11643
|
-
BlackBerry: "blackberry",
|
|
11644
|
-
Chrome: "chrome",
|
|
11645
|
-
Chromium: "chromium",
|
|
11646
|
-
Electron: "electron",
|
|
11647
|
-
Epiphany: "epiphany",
|
|
11648
|
-
Firefox: "firefox",
|
|
11649
|
-
Focus: "focus",
|
|
11650
|
-
Generic: "generic",
|
|
11651
|
-
"Google Search": "google_search",
|
|
11652
|
-
Googlebot: "googlebot",
|
|
11653
|
-
"Internet Explorer": "ie",
|
|
11654
|
-
"K-Meleon": "k_meleon",
|
|
11655
|
-
Maxthon: "maxthon",
|
|
11656
|
-
"Microsoft Edge": "edge",
|
|
11657
|
-
"MZ Browser": "mz",
|
|
11658
|
-
"NAVER Whale Browser": "naver",
|
|
11659
|
-
Opera: "opera",
|
|
11660
|
-
"Opera Coast": "opera_coast",
|
|
11661
|
-
PhantomJS: "phantomjs",
|
|
11662
|
-
Puffin: "puffin",
|
|
11663
|
-
QupZilla: "qupzilla",
|
|
11664
|
-
QQ: "qq",
|
|
11665
|
-
QQLite: "qqlite",
|
|
11666
|
-
Safari: "safari",
|
|
11667
|
-
Sailfish: "sailfish",
|
|
11668
|
-
"Samsung Internet for Android": "samsung_internet",
|
|
11669
|
-
SeaMonkey: "seamonkey",
|
|
11670
|
-
Sleipnir: "sleipnir",
|
|
11671
|
-
Swing: "swing",
|
|
11672
|
-
Tizen: "tizen",
|
|
11673
|
-
"UC Browser": "uc",
|
|
11674
|
-
Vivaldi: "vivaldi",
|
|
11675
|
-
"WebOS Browser": "webos",
|
|
11676
|
-
WeChat: "wechat",
|
|
11677
|
-
"Yandex Browser": "yandex",
|
|
11678
|
-
Roku: "roku"
|
|
11679
|
-
};
|
|
11680
|
-
t.BROWSER_MAP = {
|
|
11681
|
-
amazon_silk: "Amazon Silk",
|
|
11682
|
-
android: "Android Browser",
|
|
11683
|
-
bada: "Bada",
|
|
11684
|
-
blackberry: "BlackBerry",
|
|
11685
|
-
chrome: "Chrome",
|
|
11686
|
-
chromium: "Chromium",
|
|
11687
|
-
electron: "Electron",
|
|
11688
|
-
epiphany: "Epiphany",
|
|
11689
|
-
firefox: "Firefox",
|
|
11690
|
-
focus: "Focus",
|
|
11691
|
-
generic: "Generic",
|
|
11692
|
-
googlebot: "Googlebot",
|
|
11693
|
-
google_search: "Google Search",
|
|
11694
|
-
ie: "Internet Explorer",
|
|
11695
|
-
k_meleon: "K-Meleon",
|
|
11696
|
-
maxthon: "Maxthon",
|
|
11697
|
-
edge: "Microsoft Edge",
|
|
11698
|
-
mz: "MZ Browser",
|
|
11699
|
-
naver: "NAVER Whale Browser",
|
|
11700
|
-
opera: "Opera",
|
|
11701
|
-
opera_coast: "Opera Coast",
|
|
11702
|
-
phantomjs: "PhantomJS",
|
|
11703
|
-
puffin: "Puffin",
|
|
11704
|
-
qupzilla: "QupZilla",
|
|
11705
|
-
qq: "QQ Browser",
|
|
11706
|
-
qqlite: "QQ Browser Lite",
|
|
11707
|
-
safari: "Safari",
|
|
11708
|
-
sailfish: "Sailfish",
|
|
11709
|
-
samsung_internet: "Samsung Internet for Android",
|
|
11710
|
-
seamonkey: "SeaMonkey",
|
|
11711
|
-
sleipnir: "Sleipnir",
|
|
11712
|
-
swing: "Swing",
|
|
11713
|
-
tizen: "Tizen",
|
|
11714
|
-
uc: "UC Browser",
|
|
11715
|
-
vivaldi: "Vivaldi",
|
|
11716
|
-
webos: "WebOS Browser",
|
|
11717
|
-
wechat: "WeChat",
|
|
11718
|
-
yandex: "Yandex Browser"
|
|
11719
|
-
};
|
|
11720
|
-
t.PLATFORMS_MAP = {
|
|
11721
|
-
tablet: "tablet",
|
|
11722
|
-
mobile: "mobile",
|
|
11723
|
-
desktop: "desktop",
|
|
11724
|
-
tv: "tv"
|
|
11725
|
-
};
|
|
11726
|
-
t.OS_MAP = {
|
|
11727
|
-
WindowsPhone: "Windows Phone",
|
|
11728
|
-
Windows: "Windows",
|
|
11729
|
-
MacOS: "macOS",
|
|
11730
|
-
iOS: "iOS",
|
|
11731
|
-
Android: "Android",
|
|
11732
|
-
WebOS: "WebOS",
|
|
11733
|
-
BlackBerry: "BlackBerry",
|
|
11734
|
-
Bada: "Bada",
|
|
11735
|
-
Tizen: "Tizen",
|
|
11736
|
-
Linux: "Linux",
|
|
11737
|
-
ChromeOS: "Chrome OS",
|
|
11738
|
-
PlayStation4: "PlayStation 4",
|
|
11739
|
-
Roku: "Roku"
|
|
11740
|
-
};
|
|
11741
|
-
t.ENGINE_MAP = {
|
|
11742
|
-
EdgeHTML: "EdgeHTML",
|
|
11743
|
-
Blink: "Blink",
|
|
11744
|
-
Trident: "Trident",
|
|
11745
|
-
Presto: "Presto",
|
|
11746
|
-
Gecko: "Gecko",
|
|
11747
|
-
WebKit: "WebKit"
|
|
11748
|
-
};
|
|
11749
|
-
},
|
|
11750
|
-
90: function _(e, t, r) {
|
|
11751
|
-
t.__esModule = !0, t.default = void 0;
|
|
11752
|
-
var n,
|
|
11753
|
-
i = (n = r(91)) && n.__esModule ? n : {
|
|
11754
|
-
default: n
|
|
11755
|
-
},
|
|
11756
|
-
s = r(18);
|
|
11757
|
-
function a(e, t) {
|
|
11758
|
-
for (var r = 0; r < t.length; r++) {
|
|
11759
|
-
var n = t[r];
|
|
11760
|
-
n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(e, n.key, n);
|
|
11761
|
-
}
|
|
11762
|
-
}
|
|
11763
|
-
var o = function () {
|
|
11764
|
-
function e() {}
|
|
11765
|
-
var t, r, n;
|
|
11766
|
-
return e.getParser = function (e, t) {
|
|
11767
|
-
if (void 0 === t && (t = !1), "string" != typeof e) throw new Error("UserAgent should be a string");
|
|
11768
|
-
return new i.default(e, t);
|
|
11769
|
-
}, e.parse = function (e) {
|
|
11770
|
-
return new i.default(e).getResult();
|
|
11771
|
-
}, t = e, n = [{
|
|
11772
|
-
key: "BROWSER_MAP",
|
|
11773
|
-
get: function get() {
|
|
11774
|
-
return s.BROWSER_MAP;
|
|
11775
|
-
}
|
|
11776
|
-
}, {
|
|
11777
|
-
key: "ENGINE_MAP",
|
|
11778
|
-
get: function get() {
|
|
11779
|
-
return s.ENGINE_MAP;
|
|
11780
|
-
}
|
|
11781
|
-
}, {
|
|
11782
|
-
key: "OS_MAP",
|
|
11783
|
-
get: function get() {
|
|
11784
|
-
return s.OS_MAP;
|
|
11785
|
-
}
|
|
11786
|
-
}, {
|
|
11787
|
-
key: "PLATFORMS_MAP",
|
|
11788
|
-
get: function get() {
|
|
11789
|
-
return s.PLATFORMS_MAP;
|
|
11790
|
-
}
|
|
11791
|
-
}], (r = null) && a(t.prototype, r), n && a(t, n), e;
|
|
11792
|
-
}();
|
|
11793
|
-
t.default = o, e.exports = t.default;
|
|
11794
|
-
},
|
|
11795
|
-
91: function _(e, t, r) {
|
|
11796
|
-
t.__esModule = !0, t.default = void 0;
|
|
11797
|
-
var n = u(r(92)),
|
|
11798
|
-
i = u(r(93)),
|
|
11799
|
-
s = u(r(94)),
|
|
11800
|
-
a = u(r(95)),
|
|
11801
|
-
o = u(r(17));
|
|
11802
|
-
function u(e) {
|
|
11803
|
-
return e && e.__esModule ? e : {
|
|
11804
|
-
default: e
|
|
11805
|
-
};
|
|
11806
|
-
}
|
|
11807
|
-
var d = function () {
|
|
11808
|
-
function e(e, t) {
|
|
11809
|
-
if (void 0 === t && (t = !1), null == e || "" === e) throw new Error("UserAgent parameter can't be empty");
|
|
11810
|
-
this._ua = e, this.parsedResult = {}, !0 !== t && this.parse();
|
|
11811
|
-
}
|
|
11812
|
-
var t = e.prototype;
|
|
11813
|
-
return t.getUA = function () {
|
|
11814
|
-
return this._ua;
|
|
11815
|
-
}, t.test = function (e) {
|
|
11816
|
-
return e.test(this._ua);
|
|
11817
|
-
}, t.parseBrowser = function () {
|
|
11818
|
-
var e = this;
|
|
11819
|
-
this.parsedResult.browser = {};
|
|
11820
|
-
var t = o.default.find(n.default, function (t) {
|
|
11821
|
-
if ("function" == typeof t.test) return t.test(e);
|
|
11822
|
-
if (t.test instanceof Array) return t.test.some(function (t) {
|
|
11823
|
-
return e.test(t);
|
|
11824
|
-
});
|
|
11825
|
-
throw new Error("Browser's test function is not valid");
|
|
11826
|
-
});
|
|
11827
|
-
return t && (this.parsedResult.browser = t.describe(this.getUA())), this.parsedResult.browser;
|
|
11828
|
-
}, t.getBrowser = function () {
|
|
11829
|
-
return this.parsedResult.browser ? this.parsedResult.browser : this.parseBrowser();
|
|
11830
|
-
}, t.getBrowserName = function (e) {
|
|
11831
|
-
return e ? String(this.getBrowser().name).toLowerCase() || "" : this.getBrowser().name || "";
|
|
11832
|
-
}, t.getBrowserVersion = function () {
|
|
11833
|
-
return this.getBrowser().version;
|
|
11834
|
-
}, t.getOS = function () {
|
|
11835
|
-
return this.parsedResult.os ? this.parsedResult.os : this.parseOS();
|
|
11836
|
-
}, t.parseOS = function () {
|
|
11837
|
-
var e = this;
|
|
11838
|
-
this.parsedResult.os = {};
|
|
11839
|
-
var t = o.default.find(i.default, function (t) {
|
|
11840
|
-
if ("function" == typeof t.test) return t.test(e);
|
|
11841
|
-
if (t.test instanceof Array) return t.test.some(function (t) {
|
|
11842
|
-
return e.test(t);
|
|
11843
|
-
});
|
|
11844
|
-
throw new Error("Browser's test function is not valid");
|
|
11845
|
-
});
|
|
11846
|
-
return t && (this.parsedResult.os = t.describe(this.getUA())), this.parsedResult.os;
|
|
11847
|
-
}, t.getOSName = function (e) {
|
|
11848
|
-
var t = this.getOS().name;
|
|
11849
|
-
return e ? String(t).toLowerCase() || "" : t || "";
|
|
11850
|
-
}, t.getOSVersion = function () {
|
|
11851
|
-
return this.getOS().version;
|
|
11852
|
-
}, t.getPlatform = function () {
|
|
11853
|
-
return this.parsedResult.platform ? this.parsedResult.platform : this.parsePlatform();
|
|
11854
|
-
}, t.getPlatformType = function (e) {
|
|
11855
|
-
void 0 === e && (e = !1);
|
|
11856
|
-
var t = this.getPlatform().type;
|
|
11857
|
-
return e ? String(t).toLowerCase() || "" : t || "";
|
|
11858
|
-
}, t.parsePlatform = function () {
|
|
11859
|
-
var e = this;
|
|
11860
|
-
this.parsedResult.platform = {};
|
|
11861
|
-
var t = o.default.find(s.default, function (t) {
|
|
11862
|
-
if ("function" == typeof t.test) return t.test(e);
|
|
11863
|
-
if (t.test instanceof Array) return t.test.some(function (t) {
|
|
11864
|
-
return e.test(t);
|
|
11865
|
-
});
|
|
11866
|
-
throw new Error("Browser's test function is not valid");
|
|
11867
|
-
});
|
|
11868
|
-
return t && (this.parsedResult.platform = t.describe(this.getUA())), this.parsedResult.platform;
|
|
11869
|
-
}, t.getEngine = function () {
|
|
11870
|
-
return this.parsedResult.engine ? this.parsedResult.engine : this.parseEngine();
|
|
11871
|
-
}, t.getEngineName = function (e) {
|
|
11872
|
-
return e ? String(this.getEngine().name).toLowerCase() || "" : this.getEngine().name || "";
|
|
11873
|
-
}, t.parseEngine = function () {
|
|
11874
|
-
var e = this;
|
|
11875
|
-
this.parsedResult.engine = {};
|
|
11876
|
-
var t = o.default.find(a.default, function (t) {
|
|
11877
|
-
if ("function" == typeof t.test) return t.test(e);
|
|
11878
|
-
if (t.test instanceof Array) return t.test.some(function (t) {
|
|
11879
|
-
return e.test(t);
|
|
11880
|
-
});
|
|
11881
|
-
throw new Error("Browser's test function is not valid");
|
|
11882
|
-
});
|
|
11883
|
-
return t && (this.parsedResult.engine = t.describe(this.getUA())), this.parsedResult.engine;
|
|
11884
|
-
}, t.parse = function () {
|
|
11885
|
-
return this.parseBrowser(), this.parseOS(), this.parsePlatform(), this.parseEngine(), this;
|
|
11886
|
-
}, t.getResult = function () {
|
|
11887
|
-
return o.default.assign({}, this.parsedResult);
|
|
11888
|
-
}, t.satisfies = function (e) {
|
|
11889
|
-
var t = this,
|
|
11890
|
-
r = {},
|
|
11891
|
-
n = 0,
|
|
11892
|
-
i = {},
|
|
11893
|
-
s = 0;
|
|
11894
|
-
if (Object.keys(e).forEach(function (t) {
|
|
11895
|
-
var a = e[t];
|
|
11896
|
-
"string" == typeof a ? (i[t] = a, s += 1) : "object" == typeof a && (r[t] = a, n += 1);
|
|
11897
|
-
}), n > 0) {
|
|
11898
|
-
var a = Object.keys(r),
|
|
11899
|
-
u = o.default.find(a, function (e) {
|
|
11900
|
-
return t.isOS(e);
|
|
11901
|
-
});
|
|
11902
|
-
if (u) {
|
|
11903
|
-
var d = this.satisfies(r[u]);
|
|
11904
|
-
if (void 0 !== d) return d;
|
|
11905
|
-
}
|
|
11906
|
-
var c = o.default.find(a, function (e) {
|
|
11907
|
-
return t.isPlatform(e);
|
|
11908
|
-
});
|
|
11909
|
-
if (c) {
|
|
11910
|
-
var f = this.satisfies(r[c]);
|
|
11911
|
-
if (void 0 !== f) return f;
|
|
11912
|
-
}
|
|
11913
|
-
}
|
|
11914
|
-
if (s > 0) {
|
|
11915
|
-
var l = Object.keys(i),
|
|
11916
|
-
h = o.default.find(l, function (e) {
|
|
11917
|
-
return t.isBrowser(e, !0);
|
|
11918
|
-
});
|
|
11919
|
-
if (void 0 !== h) return this.compareVersion(i[h]);
|
|
11920
|
-
}
|
|
11921
|
-
}, t.isBrowser = function (e, t) {
|
|
11922
|
-
void 0 === t && (t = !1);
|
|
11923
|
-
var r = this.getBrowserName().toLowerCase(),
|
|
11924
|
-
n = e.toLowerCase(),
|
|
11925
|
-
i = o.default.getBrowserTypeByAlias(n);
|
|
11926
|
-
return t && i && (n = i.toLowerCase()), n === r;
|
|
11927
|
-
}, t.compareVersion = function (e) {
|
|
11928
|
-
var t = [0],
|
|
11929
|
-
r = e,
|
|
11930
|
-
n = !1,
|
|
11931
|
-
i = this.getBrowserVersion();
|
|
11932
|
-
if ("string" == typeof i) return ">" === e[0] || "<" === e[0] ? (r = e.substr(1), "=" === e[1] ? (n = !0, r = e.substr(2)) : t = [], ">" === e[0] ? t.push(1) : t.push(-1)) : "=" === e[0] ? r = e.substr(1) : "~" === e[0] && (n = !0, r = e.substr(1)), t.indexOf(o.default.compareVersions(i, r, n)) > -1;
|
|
11933
|
-
}, t.isOS = function (e) {
|
|
11934
|
-
return this.getOSName(!0) === String(e).toLowerCase();
|
|
11935
|
-
}, t.isPlatform = function (e) {
|
|
11936
|
-
return this.getPlatformType(!0) === String(e).toLowerCase();
|
|
11937
|
-
}, t.isEngine = function (e) {
|
|
11938
|
-
return this.getEngineName(!0) === String(e).toLowerCase();
|
|
11939
|
-
}, t.is = function (e, t) {
|
|
11940
|
-
return void 0 === t && (t = !1), this.isBrowser(e, t) || this.isOS(e) || this.isPlatform(e);
|
|
11941
|
-
}, t.some = function (e) {
|
|
11942
|
-
var t = this;
|
|
11943
|
-
return void 0 === e && (e = []), e.some(function (e) {
|
|
11944
|
-
return t.is(e);
|
|
11945
|
-
});
|
|
11946
|
-
}, e;
|
|
11947
|
-
}();
|
|
11948
|
-
t.default = d, e.exports = t.default;
|
|
11949
|
-
},
|
|
11950
|
-
92: function _(e, t, r) {
|
|
11951
|
-
t.__esModule = !0, t.default = void 0;
|
|
11952
|
-
var n,
|
|
11953
|
-
i = (n = r(17)) && n.__esModule ? n : {
|
|
11954
|
-
default: n
|
|
11955
|
-
};
|
|
11956
|
-
var s = /version\/(\d+(\.?_?\d+)+)/i,
|
|
11957
|
-
a = [{
|
|
11958
|
-
test: [/googlebot/i],
|
|
11959
|
-
describe: function describe(e) {
|
|
11960
|
-
var t = {
|
|
11961
|
-
name: "Googlebot"
|
|
11962
|
-
},
|
|
11963
|
-
r = i.default.getFirstMatch(/googlebot\/(\d+(\.\d+))/i, e) || i.default.getFirstMatch(s, e);
|
|
11964
|
-
return r && (t.version = r), t;
|
|
11965
|
-
}
|
|
11966
|
-
}, {
|
|
11967
|
-
test: [/opera/i],
|
|
11968
|
-
describe: function describe(e) {
|
|
11969
|
-
var t = {
|
|
11970
|
-
name: "Opera"
|
|
11971
|
-
},
|
|
11972
|
-
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
11973
|
-
return r && (t.version = r), t;
|
|
11974
|
-
}
|
|
11975
|
-
}, {
|
|
11976
|
-
test: [/opr\/|opios/i],
|
|
11977
|
-
describe: function describe(e) {
|
|
11978
|
-
var t = {
|
|
11979
|
-
name: "Opera"
|
|
11980
|
-
},
|
|
11981
|
-
r = i.default.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i, e) || i.default.getFirstMatch(s, e);
|
|
11982
|
-
return r && (t.version = r), t;
|
|
11983
|
-
}
|
|
11984
|
-
}, {
|
|
11985
|
-
test: [/SamsungBrowser/i],
|
|
11986
|
-
describe: function describe(e) {
|
|
11987
|
-
var t = {
|
|
11988
|
-
name: "Samsung Internet for Android"
|
|
11989
|
-
},
|
|
11990
|
-
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
11991
|
-
return r && (t.version = r), t;
|
|
11992
|
-
}
|
|
11993
|
-
}, {
|
|
11994
|
-
test: [/Whale/i],
|
|
11995
|
-
describe: function describe(e) {
|
|
11996
|
-
var t = {
|
|
11997
|
-
name: "NAVER Whale Browser"
|
|
11998
|
-
},
|
|
11999
|
-
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i, e);
|
|
12000
|
-
return r && (t.version = r), t;
|
|
12001
|
-
}
|
|
12002
|
-
}, {
|
|
12003
|
-
test: [/MZBrowser/i],
|
|
12004
|
-
describe: function describe(e) {
|
|
12005
|
-
var t = {
|
|
12006
|
-
name: "MZ Browser"
|
|
12007
|
-
},
|
|
12008
|
-
r = i.default.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
12009
|
-
return r && (t.version = r), t;
|
|
12010
|
-
}
|
|
12011
|
-
}, {
|
|
12012
|
-
test: [/focus/i],
|
|
12013
|
-
describe: function describe(e) {
|
|
12014
|
-
var t = {
|
|
12015
|
-
name: "Focus"
|
|
12016
|
-
},
|
|
12017
|
-
r = i.default.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
12018
|
-
return r && (t.version = r), t;
|
|
12019
|
-
}
|
|
12020
|
-
}, {
|
|
12021
|
-
test: [/swing/i],
|
|
12022
|
-
describe: function describe(e) {
|
|
12023
|
-
var t = {
|
|
12024
|
-
name: "Swing"
|
|
12025
|
-
},
|
|
12026
|
-
r = i.default.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
12027
|
-
return r && (t.version = r), t;
|
|
12028
|
-
}
|
|
12029
|
-
}, {
|
|
12030
|
-
test: [/coast/i],
|
|
12031
|
-
describe: function describe(e) {
|
|
12032
|
-
var t = {
|
|
12033
|
-
name: "Opera Coast"
|
|
12034
|
-
},
|
|
12035
|
-
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
12036
|
-
return r && (t.version = r), t;
|
|
12037
|
-
}
|
|
12038
|
-
}, {
|
|
12039
|
-
test: [/opt\/\d+(?:.?_?\d+)+/i],
|
|
12040
|
-
describe: function describe(e) {
|
|
12041
|
-
var t = {
|
|
12042
|
-
name: "Opera Touch"
|
|
12043
|
-
},
|
|
12044
|
-
r = i.default.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
12045
|
-
return r && (t.version = r), t;
|
|
12046
|
-
}
|
|
12047
|
-
}, {
|
|
12048
|
-
test: [/yabrowser/i],
|
|
12049
|
-
describe: function describe(e) {
|
|
12050
|
-
var t = {
|
|
12051
|
-
name: "Yandex Browser"
|
|
12052
|
-
},
|
|
12053
|
-
r = i.default.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
12054
|
-
return r && (t.version = r), t;
|
|
12055
|
-
}
|
|
12056
|
-
}, {
|
|
12057
|
-
test: [/ucbrowser/i],
|
|
12058
|
-
describe: function describe(e) {
|
|
12059
|
-
var t = {
|
|
12060
|
-
name: "UC Browser"
|
|
12061
|
-
},
|
|
12062
|
-
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
12063
|
-
return r && (t.version = r), t;
|
|
12064
|
-
}
|
|
12065
|
-
}, {
|
|
12066
|
-
test: [/Maxthon|mxios/i],
|
|
12067
|
-
describe: function describe(e) {
|
|
12068
|
-
var t = {
|
|
12069
|
-
name: "Maxthon"
|
|
12070
|
-
},
|
|
12071
|
-
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
12072
|
-
return r && (t.version = r), t;
|
|
12073
|
-
}
|
|
12074
|
-
}, {
|
|
12075
|
-
test: [/epiphany/i],
|
|
12076
|
-
describe: function describe(e) {
|
|
12077
|
-
var t = {
|
|
12078
|
-
name: "Epiphany"
|
|
12079
|
-
},
|
|
12080
|
-
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
12081
|
-
return r && (t.version = r), t;
|
|
12082
|
-
}
|
|
12083
|
-
}, {
|
|
12084
|
-
test: [/puffin/i],
|
|
12085
|
-
describe: function describe(e) {
|
|
12086
|
-
var t = {
|
|
12087
|
-
name: "Puffin"
|
|
12088
|
-
},
|
|
12089
|
-
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
12090
|
-
return r && (t.version = r), t;
|
|
12091
|
-
}
|
|
12092
|
-
}, {
|
|
12093
|
-
test: [/sleipnir/i],
|
|
12094
|
-
describe: function describe(e) {
|
|
12095
|
-
var t = {
|
|
12096
|
-
name: "Sleipnir"
|
|
12097
|
-
},
|
|
12098
|
-
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
12099
|
-
return r && (t.version = r), t;
|
|
12100
|
-
}
|
|
12101
|
-
}, {
|
|
12102
|
-
test: [/k-meleon/i],
|
|
12103
|
-
describe: function describe(e) {
|
|
12104
|
-
var t = {
|
|
12105
|
-
name: "K-Meleon"
|
|
12106
|
-
},
|
|
12107
|
-
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
12108
|
-
return r && (t.version = r), t;
|
|
12109
|
-
}
|
|
12110
|
-
}, {
|
|
12111
|
-
test: [/micromessenger/i],
|
|
12112
|
-
describe: function describe(e) {
|
|
12113
|
-
var t = {
|
|
12114
|
-
name: "WeChat"
|
|
12115
|
-
},
|
|
12116
|
-
r = i.default.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
12117
|
-
return r && (t.version = r), t;
|
|
12118
|
-
}
|
|
12119
|
-
}, {
|
|
12120
|
-
test: [/qqbrowser/i],
|
|
12121
|
-
describe: function describe(e) {
|
|
12122
|
-
var t = {
|
|
12123
|
-
name: /qqbrowserlite/i.test(e) ? "QQ Browser Lite" : "QQ Browser"
|
|
12124
|
-
},
|
|
12125
|
-
r = i.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
12126
|
-
return r && (t.version = r), t;
|
|
12127
|
-
}
|
|
12128
|
-
}, {
|
|
12129
|
-
test: [/msie|trident/i],
|
|
12130
|
-
describe: function describe(e) {
|
|
12131
|
-
var t = {
|
|
12132
|
-
name: "Internet Explorer"
|
|
12133
|
-
},
|
|
12134
|
-
r = i.default.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i, e);
|
|
12135
|
-
return r && (t.version = r), t;
|
|
12136
|
-
}
|
|
12137
|
-
}, {
|
|
12138
|
-
test: [/\sedg\//i],
|
|
12139
|
-
describe: function describe(e) {
|
|
12140
|
-
var t = {
|
|
12141
|
-
name: "Microsoft Edge"
|
|
12142
|
-
},
|
|
12143
|
-
r = i.default.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i, e);
|
|
12144
|
-
return r && (t.version = r), t;
|
|
12145
|
-
}
|
|
12146
|
-
}, {
|
|
12147
|
-
test: [/edg([ea]|ios)/i],
|
|
12148
|
-
describe: function describe(e) {
|
|
12149
|
-
var t = {
|
|
12150
|
-
name: "Microsoft Edge"
|
|
12151
|
-
},
|
|
12152
|
-
r = i.default.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i, e);
|
|
12153
|
-
return r && (t.version = r), t;
|
|
12154
|
-
}
|
|
12155
|
-
}, {
|
|
12156
|
-
test: [/vivaldi/i],
|
|
12157
|
-
describe: function describe(e) {
|
|
12158
|
-
var t = {
|
|
12159
|
-
name: "Vivaldi"
|
|
12160
|
-
},
|
|
12161
|
-
r = i.default.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i, e);
|
|
12162
|
-
return r && (t.version = r), t;
|
|
12163
|
-
}
|
|
12164
|
-
}, {
|
|
12165
|
-
test: [/seamonkey/i],
|
|
12166
|
-
describe: function describe(e) {
|
|
12167
|
-
var t = {
|
|
12168
|
-
name: "SeaMonkey"
|
|
12169
|
-
},
|
|
12170
|
-
r = i.default.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i, e);
|
|
12171
|
-
return r && (t.version = r), t;
|
|
12172
|
-
}
|
|
12173
|
-
}, {
|
|
12174
|
-
test: [/sailfish/i],
|
|
12175
|
-
describe: function describe(e) {
|
|
12176
|
-
var t = {
|
|
12177
|
-
name: "Sailfish"
|
|
12178
|
-
},
|
|
12179
|
-
r = i.default.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i, e);
|
|
12180
|
-
return r && (t.version = r), t;
|
|
12181
|
-
}
|
|
12182
|
-
}, {
|
|
12183
|
-
test: [/silk/i],
|
|
12184
|
-
describe: function describe(e) {
|
|
12185
|
-
var t = {
|
|
12186
|
-
name: "Amazon Silk"
|
|
12187
|
-
},
|
|
12188
|
-
r = i.default.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i, e);
|
|
12189
|
-
return r && (t.version = r), t;
|
|
12190
|
-
}
|
|
12191
|
-
}, {
|
|
12192
|
-
test: [/phantom/i],
|
|
12193
|
-
describe: function describe(e) {
|
|
12194
|
-
var t = {
|
|
12195
|
-
name: "PhantomJS"
|
|
12196
|
-
},
|
|
12197
|
-
r = i.default.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i, e);
|
|
12198
|
-
return r && (t.version = r), t;
|
|
12199
|
-
}
|
|
12200
|
-
}, {
|
|
12201
|
-
test: [/slimerjs/i],
|
|
12202
|
-
describe: function describe(e) {
|
|
12203
|
-
var t = {
|
|
12204
|
-
name: "SlimerJS"
|
|
12205
|
-
},
|
|
12206
|
-
r = i.default.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i, e);
|
|
12207
|
-
return r && (t.version = r), t;
|
|
12208
|
-
}
|
|
12209
|
-
}, {
|
|
12210
|
-
test: [/blackberry|\bbb\d+/i, /rim\stablet/i],
|
|
12211
|
-
describe: function describe(e) {
|
|
12212
|
-
var t = {
|
|
12213
|
-
name: "BlackBerry"
|
|
12214
|
-
},
|
|
12215
|
-
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i, e);
|
|
12216
|
-
return r && (t.version = r), t;
|
|
12217
|
-
}
|
|
12218
|
-
}, {
|
|
12219
|
-
test: [/(web|hpw)[o0]s/i],
|
|
12220
|
-
describe: function describe(e) {
|
|
12221
|
-
var t = {
|
|
12222
|
-
name: "WebOS Browser"
|
|
12223
|
-
},
|
|
12224
|
-
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i, e);
|
|
12225
|
-
return r && (t.version = r), t;
|
|
12226
|
-
}
|
|
12227
|
-
}, {
|
|
12228
|
-
test: [/bada/i],
|
|
12229
|
-
describe: function describe(e) {
|
|
12230
|
-
var t = {
|
|
12231
|
-
name: "Bada"
|
|
12232
|
-
},
|
|
12233
|
-
r = i.default.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i, e);
|
|
12234
|
-
return r && (t.version = r), t;
|
|
12235
|
-
}
|
|
12236
|
-
}, {
|
|
12237
|
-
test: [/tizen/i],
|
|
12238
|
-
describe: function describe(e) {
|
|
12239
|
-
var t = {
|
|
12240
|
-
name: "Tizen"
|
|
12241
|
-
},
|
|
12242
|
-
r = i.default.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
12243
|
-
return r && (t.version = r), t;
|
|
12244
|
-
}
|
|
12245
|
-
}, {
|
|
12246
|
-
test: [/qupzilla/i],
|
|
12247
|
-
describe: function describe(e) {
|
|
12248
|
-
var t = {
|
|
12249
|
-
name: "QupZilla"
|
|
12250
|
-
},
|
|
12251
|
-
r = i.default.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
12252
|
-
return r && (t.version = r), t;
|
|
12253
|
-
}
|
|
12254
|
-
}, {
|
|
12255
|
-
test: [/firefox|iceweasel|fxios/i],
|
|
12256
|
-
describe: function describe(e) {
|
|
12257
|
-
var t = {
|
|
12258
|
-
name: "Firefox"
|
|
12259
|
-
},
|
|
12260
|
-
r = i.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
12261
|
-
return r && (t.version = r), t;
|
|
12262
|
-
}
|
|
12263
|
-
}, {
|
|
12264
|
-
test: [/electron/i],
|
|
12265
|
-
describe: function describe(e) {
|
|
12266
|
-
var t = {
|
|
12267
|
-
name: "Electron"
|
|
12268
|
-
},
|
|
12269
|
-
r = i.default.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i, e);
|
|
12270
|
-
return r && (t.version = r), t;
|
|
12271
|
-
}
|
|
12272
|
-
}, {
|
|
12273
|
-
test: [/MiuiBrowser/i],
|
|
12274
|
-
describe: function describe(e) {
|
|
12275
|
-
var t = {
|
|
12276
|
-
name: "Miui"
|
|
12277
|
-
},
|
|
12278
|
-
r = i.default.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
12279
|
-
return r && (t.version = r), t;
|
|
12280
|
-
}
|
|
12281
|
-
}, {
|
|
12282
|
-
test: [/chromium/i],
|
|
12283
|
-
describe: function describe(e) {
|
|
12284
|
-
var t = {
|
|
12285
|
-
name: "Chromium"
|
|
12286
|
-
},
|
|
12287
|
-
r = i.default.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
12288
|
-
return r && (t.version = r), t;
|
|
12289
|
-
}
|
|
12290
|
-
}, {
|
|
12291
|
-
test: [/chrome|crios|crmo/i],
|
|
12292
|
-
describe: function describe(e) {
|
|
12293
|
-
var t = {
|
|
12294
|
-
name: "Chrome"
|
|
12295
|
-
},
|
|
12296
|
-
r = i.default.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i, e);
|
|
12297
|
-
return r && (t.version = r), t;
|
|
12298
|
-
}
|
|
12299
|
-
}, {
|
|
12300
|
-
test: [/GSA/i],
|
|
12301
|
-
describe: function describe(e) {
|
|
12302
|
-
var t = {
|
|
12303
|
-
name: "Google Search"
|
|
12304
|
-
},
|
|
12305
|
-
r = i.default.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i, e);
|
|
12306
|
-
return r && (t.version = r), t;
|
|
12307
|
-
}
|
|
12308
|
-
}, {
|
|
12309
|
-
test: function test(e) {
|
|
12310
|
-
var t = !e.test(/like android/i),
|
|
12311
|
-
r = e.test(/android/i);
|
|
12312
|
-
return t && r;
|
|
12313
|
-
},
|
|
12314
|
-
describe: function describe(e) {
|
|
12315
|
-
var t = {
|
|
12316
|
-
name: "Android Browser"
|
|
12317
|
-
},
|
|
12318
|
-
r = i.default.getFirstMatch(s, e);
|
|
12319
|
-
return r && (t.version = r), t;
|
|
12320
|
-
}
|
|
12321
|
-
}, {
|
|
12322
|
-
test: [/playstation 4/i],
|
|
12323
|
-
describe: function describe(e) {
|
|
12324
|
-
var t = {
|
|
12325
|
-
name: "PlayStation 4"
|
|
12326
|
-
},
|
|
12327
|
-
r = i.default.getFirstMatch(s, e);
|
|
12328
|
-
return r && (t.version = r), t;
|
|
12329
|
-
}
|
|
12330
|
-
}, {
|
|
12331
|
-
test: [/safari|applewebkit/i],
|
|
12332
|
-
describe: function describe(e) {
|
|
12333
|
-
var t = {
|
|
12334
|
-
name: "Safari"
|
|
12335
|
-
},
|
|
12336
|
-
r = i.default.getFirstMatch(s, e);
|
|
12337
|
-
return r && (t.version = r), t;
|
|
12338
|
-
}
|
|
12339
|
-
}, {
|
|
12340
|
-
test: [/.*/i],
|
|
12341
|
-
describe: function describe(e) {
|
|
12342
|
-
var t = -1 !== e.search("\\(") ? /^(.*)\/(.*)[ \t]\((.*)/ : /^(.*)\/(.*) /;
|
|
12343
|
-
return {
|
|
12344
|
-
name: i.default.getFirstMatch(t, e),
|
|
12345
|
-
version: i.default.getSecondMatch(t, e)
|
|
12346
|
-
};
|
|
12347
|
-
}
|
|
12348
|
-
}];
|
|
12349
|
-
t.default = a, e.exports = t.default;
|
|
12350
|
-
},
|
|
12351
|
-
93: function _(e, t, r) {
|
|
12352
|
-
t.__esModule = !0, t.default = void 0;
|
|
12353
|
-
var n,
|
|
12354
|
-
i = (n = r(17)) && n.__esModule ? n : {
|
|
12355
|
-
default: n
|
|
12356
|
-
},
|
|
12357
|
-
s = r(18);
|
|
12358
|
-
var a = [{
|
|
12359
|
-
test: [/Roku\/DVP/],
|
|
12360
|
-
describe: function describe(e) {
|
|
12361
|
-
var t = i.default.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i, e);
|
|
12362
|
-
return {
|
|
12363
|
-
name: s.OS_MAP.Roku,
|
|
12364
|
-
version: t
|
|
12365
|
-
};
|
|
12366
|
-
}
|
|
12367
|
-
}, {
|
|
12368
|
-
test: [/windows phone/i],
|
|
12369
|
-
describe: function describe(e) {
|
|
12370
|
-
var t = i.default.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i, e);
|
|
12371
|
-
return {
|
|
12372
|
-
name: s.OS_MAP.WindowsPhone,
|
|
12373
|
-
version: t
|
|
12374
|
-
};
|
|
12375
|
-
}
|
|
12376
|
-
}, {
|
|
12377
|
-
test: [/windows /i],
|
|
12378
|
-
describe: function describe(e) {
|
|
12379
|
-
var t = i.default.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i, e),
|
|
12380
|
-
r = i.default.getWindowsVersionName(t);
|
|
12381
|
-
return {
|
|
12382
|
-
name: s.OS_MAP.Windows,
|
|
12383
|
-
version: t,
|
|
12384
|
-
versionName: r
|
|
12385
|
-
};
|
|
12386
|
-
}
|
|
12387
|
-
}, {
|
|
12388
|
-
test: [/Macintosh(.*?) FxiOS(.*?)\//],
|
|
12389
|
-
describe: function describe(e) {
|
|
12390
|
-
var t = {
|
|
12391
|
-
name: s.OS_MAP.iOS
|
|
12392
|
-
},
|
|
12393
|
-
r = i.default.getSecondMatch(/(Version\/)(\d[\d.]+)/, e);
|
|
12394
|
-
return r && (t.version = r), t;
|
|
12395
|
-
}
|
|
12396
|
-
}, {
|
|
12397
|
-
test: [/macintosh/i],
|
|
12398
|
-
describe: function describe(e) {
|
|
12399
|
-
var t = i.default.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i, e).replace(/[_\s]/g, "."),
|
|
12400
|
-
r = i.default.getMacOSVersionName(t),
|
|
12401
|
-
n = {
|
|
12402
|
-
name: s.OS_MAP.MacOS,
|
|
12403
|
-
version: t
|
|
12404
|
-
};
|
|
12405
|
-
return r && (n.versionName = r), n;
|
|
12406
|
-
}
|
|
12407
|
-
}, {
|
|
12408
|
-
test: [/(ipod|iphone|ipad)/i],
|
|
12409
|
-
describe: function describe(e) {
|
|
12410
|
-
var t = i.default.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i, e).replace(/[_\s]/g, ".");
|
|
12411
|
-
return {
|
|
12412
|
-
name: s.OS_MAP.iOS,
|
|
12413
|
-
version: t
|
|
12414
|
-
};
|
|
12415
|
-
}
|
|
12416
|
-
}, {
|
|
12417
|
-
test: function test(e) {
|
|
12418
|
-
var t = !e.test(/like android/i),
|
|
12419
|
-
r = e.test(/android/i);
|
|
12420
|
-
return t && r;
|
|
12421
|
-
},
|
|
12422
|
-
describe: function describe(e) {
|
|
12423
|
-
var t = i.default.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i, e),
|
|
12424
|
-
r = i.default.getAndroidVersionName(t),
|
|
12425
|
-
n = {
|
|
12426
|
-
name: s.OS_MAP.Android,
|
|
12427
|
-
version: t
|
|
12428
|
-
};
|
|
12429
|
-
return r && (n.versionName = r), n;
|
|
12430
|
-
}
|
|
12431
|
-
}, {
|
|
12432
|
-
test: [/(web|hpw)[o0]s/i],
|
|
12433
|
-
describe: function describe(e) {
|
|
12434
|
-
var t = i.default.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i, e),
|
|
12435
|
-
r = {
|
|
12436
|
-
name: s.OS_MAP.WebOS
|
|
12437
|
-
};
|
|
12438
|
-
return t && t.length && (r.version = t), r;
|
|
12439
|
-
}
|
|
12440
|
-
}, {
|
|
12441
|
-
test: [/blackberry|\bbb\d+/i, /rim\stablet/i],
|
|
12442
|
-
describe: function describe(e) {
|
|
12443
|
-
var t = i.default.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i, e) || i.default.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i, e) || i.default.getFirstMatch(/\bbb(\d+)/i, e);
|
|
12444
|
-
return {
|
|
12445
|
-
name: s.OS_MAP.BlackBerry,
|
|
12446
|
-
version: t
|
|
12447
|
-
};
|
|
12448
|
-
}
|
|
12449
|
-
}, {
|
|
12450
|
-
test: [/bada/i],
|
|
12451
|
-
describe: function describe(e) {
|
|
12452
|
-
var t = i.default.getFirstMatch(/bada\/(\d+(\.\d+)*)/i, e);
|
|
12453
|
-
return {
|
|
12454
|
-
name: s.OS_MAP.Bada,
|
|
12455
|
-
version: t
|
|
12456
|
-
};
|
|
12457
|
-
}
|
|
12458
|
-
}, {
|
|
12459
|
-
test: [/tizen/i],
|
|
12460
|
-
describe: function describe(e) {
|
|
12461
|
-
var t = i.default.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i, e);
|
|
12462
|
-
return {
|
|
12463
|
-
name: s.OS_MAP.Tizen,
|
|
12464
|
-
version: t
|
|
12465
|
-
};
|
|
12466
|
-
}
|
|
12467
|
-
}, {
|
|
12468
|
-
test: [/linux/i],
|
|
12469
|
-
describe: function describe() {
|
|
12470
|
-
return {
|
|
12471
|
-
name: s.OS_MAP.Linux
|
|
12472
|
-
};
|
|
12473
|
-
}
|
|
12474
|
-
}, {
|
|
12475
|
-
test: [/CrOS/],
|
|
12476
|
-
describe: function describe() {
|
|
12477
|
-
return {
|
|
12478
|
-
name: s.OS_MAP.ChromeOS
|
|
12479
|
-
};
|
|
12480
|
-
}
|
|
12481
|
-
}, {
|
|
12482
|
-
test: [/PlayStation 4/],
|
|
12483
|
-
describe: function describe(e) {
|
|
12484
|
-
var t = i.default.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i, e);
|
|
12485
|
-
return {
|
|
12486
|
-
name: s.OS_MAP.PlayStation4,
|
|
12487
|
-
version: t
|
|
12488
|
-
};
|
|
12489
|
-
}
|
|
12490
|
-
}];
|
|
12491
|
-
t.default = a, e.exports = t.default;
|
|
12492
|
-
},
|
|
12493
|
-
94: function _(e, t, r) {
|
|
12494
|
-
t.__esModule = !0, t.default = void 0;
|
|
12495
|
-
var n,
|
|
12496
|
-
i = (n = r(17)) && n.__esModule ? n : {
|
|
12497
|
-
default: n
|
|
12498
|
-
},
|
|
12499
|
-
s = r(18);
|
|
12500
|
-
var a = [{
|
|
12501
|
-
test: [/googlebot/i],
|
|
12502
|
-
describe: function describe() {
|
|
12503
|
-
return {
|
|
12504
|
-
type: "bot",
|
|
12505
|
-
vendor: "Google"
|
|
12506
|
-
};
|
|
12507
|
-
}
|
|
12508
|
-
}, {
|
|
12509
|
-
test: [/huawei/i],
|
|
12510
|
-
describe: function describe(e) {
|
|
12511
|
-
var t = i.default.getFirstMatch(/(can-l01)/i, e) && "Nova",
|
|
12512
|
-
r = {
|
|
12513
|
-
type: s.PLATFORMS_MAP.mobile,
|
|
12514
|
-
vendor: "Huawei"
|
|
12515
|
-
};
|
|
12516
|
-
return t && (r.model = t), r;
|
|
12517
|
-
}
|
|
12518
|
-
}, {
|
|
12519
|
-
test: [/nexus\s*(?:7|8|9|10).*/i],
|
|
12520
|
-
describe: function describe() {
|
|
12521
|
-
return {
|
|
12522
|
-
type: s.PLATFORMS_MAP.tablet,
|
|
12523
|
-
vendor: "Nexus"
|
|
12524
|
-
};
|
|
12525
|
-
}
|
|
12526
|
-
}, {
|
|
12527
|
-
test: [/ipad/i],
|
|
12528
|
-
describe: function describe() {
|
|
12529
|
-
return {
|
|
12530
|
-
type: s.PLATFORMS_MAP.tablet,
|
|
12531
|
-
vendor: "Apple",
|
|
12532
|
-
model: "iPad"
|
|
12533
|
-
};
|
|
12534
|
-
}
|
|
12535
|
-
}, {
|
|
12536
|
-
test: [/Macintosh(.*?) FxiOS(.*?)\//],
|
|
12537
|
-
describe: function describe() {
|
|
12538
|
-
return {
|
|
12539
|
-
type: s.PLATFORMS_MAP.tablet,
|
|
12540
|
-
vendor: "Apple",
|
|
12541
|
-
model: "iPad"
|
|
12542
|
-
};
|
|
12543
|
-
}
|
|
12544
|
-
}, {
|
|
12545
|
-
test: [/kftt build/i],
|
|
12546
|
-
describe: function describe() {
|
|
12547
|
-
return {
|
|
12548
|
-
type: s.PLATFORMS_MAP.tablet,
|
|
12549
|
-
vendor: "Amazon",
|
|
12550
|
-
model: "Kindle Fire HD 7"
|
|
12551
|
-
};
|
|
12552
|
-
}
|
|
12553
|
-
}, {
|
|
12554
|
-
test: [/silk/i],
|
|
12555
|
-
describe: function describe() {
|
|
12556
|
-
return {
|
|
12557
|
-
type: s.PLATFORMS_MAP.tablet,
|
|
12558
|
-
vendor: "Amazon"
|
|
12559
|
-
};
|
|
12560
|
-
}
|
|
12561
|
-
}, {
|
|
12562
|
-
test: [/tablet(?! pc)/i],
|
|
12563
|
-
describe: function describe() {
|
|
12564
|
-
return {
|
|
12565
|
-
type: s.PLATFORMS_MAP.tablet
|
|
12566
|
-
};
|
|
12567
|
-
}
|
|
12568
|
-
}, {
|
|
12569
|
-
test: function test(e) {
|
|
12570
|
-
var t = e.test(/ipod|iphone/i),
|
|
12571
|
-
r = e.test(/like (ipod|iphone)/i);
|
|
12572
|
-
return t && !r;
|
|
12573
|
-
},
|
|
12574
|
-
describe: function describe(e) {
|
|
12575
|
-
var t = i.default.getFirstMatch(/(ipod|iphone)/i, e);
|
|
12576
|
-
return {
|
|
12577
|
-
type: s.PLATFORMS_MAP.mobile,
|
|
12578
|
-
vendor: "Apple",
|
|
12579
|
-
model: t
|
|
12580
|
-
};
|
|
12581
|
-
}
|
|
12582
|
-
}, {
|
|
12583
|
-
test: [/nexus\s*[0-6].*/i, /galaxy nexus/i],
|
|
12584
|
-
describe: function describe() {
|
|
12585
|
-
return {
|
|
12586
|
-
type: s.PLATFORMS_MAP.mobile,
|
|
12587
|
-
vendor: "Nexus"
|
|
12588
|
-
};
|
|
12589
|
-
}
|
|
12590
|
-
}, {
|
|
12591
|
-
test: [/[^-]mobi/i],
|
|
12592
|
-
describe: function describe() {
|
|
12593
|
-
return {
|
|
12594
|
-
type: s.PLATFORMS_MAP.mobile
|
|
12595
|
-
};
|
|
12596
|
-
}
|
|
12597
|
-
}, {
|
|
12598
|
-
test: function test(e) {
|
|
12599
|
-
return "blackberry" === e.getBrowserName(!0);
|
|
12600
|
-
},
|
|
12601
|
-
describe: function describe() {
|
|
12602
|
-
return {
|
|
12603
|
-
type: s.PLATFORMS_MAP.mobile,
|
|
12604
|
-
vendor: "BlackBerry"
|
|
12605
|
-
};
|
|
12606
|
-
}
|
|
12607
|
-
}, {
|
|
12608
|
-
test: function test(e) {
|
|
12609
|
-
return "bada" === e.getBrowserName(!0);
|
|
12610
|
-
},
|
|
12611
|
-
describe: function describe() {
|
|
12612
|
-
return {
|
|
12613
|
-
type: s.PLATFORMS_MAP.mobile
|
|
12614
|
-
};
|
|
12615
|
-
}
|
|
12616
|
-
}, {
|
|
12617
|
-
test: function test(e) {
|
|
12618
|
-
return "windows phone" === e.getBrowserName();
|
|
12619
|
-
},
|
|
12620
|
-
describe: function describe() {
|
|
12621
|
-
return {
|
|
12622
|
-
type: s.PLATFORMS_MAP.mobile,
|
|
12623
|
-
vendor: "Microsoft"
|
|
12624
|
-
};
|
|
12625
|
-
}
|
|
12626
|
-
}, {
|
|
12627
|
-
test: function test(e) {
|
|
12628
|
-
var t = Number(String(e.getOSVersion()).split(".")[0]);
|
|
12629
|
-
return "android" === e.getOSName(!0) && t >= 3;
|
|
12630
|
-
},
|
|
12631
|
-
describe: function describe() {
|
|
12632
|
-
return {
|
|
12633
|
-
type: s.PLATFORMS_MAP.tablet
|
|
12634
|
-
};
|
|
12635
|
-
}
|
|
12636
|
-
}, {
|
|
12637
|
-
test: function test(e) {
|
|
12638
|
-
return "android" === e.getOSName(!0);
|
|
12639
|
-
},
|
|
12640
|
-
describe: function describe() {
|
|
12641
|
-
return {
|
|
12642
|
-
type: s.PLATFORMS_MAP.mobile
|
|
12643
|
-
};
|
|
12644
|
-
}
|
|
12645
|
-
}, {
|
|
12646
|
-
test: function test(e) {
|
|
12647
|
-
return "macos" === e.getOSName(!0);
|
|
12648
|
-
},
|
|
12649
|
-
describe: function describe() {
|
|
12650
|
-
return {
|
|
12651
|
-
type: s.PLATFORMS_MAP.desktop,
|
|
12652
|
-
vendor: "Apple"
|
|
12653
|
-
};
|
|
12654
|
-
}
|
|
12655
|
-
}, {
|
|
12656
|
-
test: function test(e) {
|
|
12657
|
-
return "windows" === e.getOSName(!0);
|
|
12658
|
-
},
|
|
12659
|
-
describe: function describe() {
|
|
12660
|
-
return {
|
|
12661
|
-
type: s.PLATFORMS_MAP.desktop
|
|
12662
|
-
};
|
|
12663
|
-
}
|
|
12664
|
-
}, {
|
|
12665
|
-
test: function test(e) {
|
|
12666
|
-
return "linux" === e.getOSName(!0);
|
|
12667
|
-
},
|
|
12668
|
-
describe: function describe() {
|
|
12669
|
-
return {
|
|
12670
|
-
type: s.PLATFORMS_MAP.desktop
|
|
12671
|
-
};
|
|
12672
|
-
}
|
|
12673
|
-
}, {
|
|
12674
|
-
test: function test(e) {
|
|
12675
|
-
return "playstation 4" === e.getOSName(!0);
|
|
12676
|
-
},
|
|
12677
|
-
describe: function describe() {
|
|
12678
|
-
return {
|
|
12679
|
-
type: s.PLATFORMS_MAP.tv
|
|
12680
|
-
};
|
|
12681
|
-
}
|
|
12682
|
-
}, {
|
|
12683
|
-
test: function test(e) {
|
|
12684
|
-
return "roku" === e.getOSName(!0);
|
|
12685
|
-
},
|
|
12686
|
-
describe: function describe() {
|
|
12687
|
-
return {
|
|
12688
|
-
type: s.PLATFORMS_MAP.tv
|
|
12689
|
-
};
|
|
12690
|
-
}
|
|
12691
|
-
}];
|
|
12692
|
-
t.default = a, e.exports = t.default;
|
|
12693
|
-
},
|
|
12694
|
-
95: function _(e, t, r) {
|
|
12695
|
-
t.__esModule = !0, t.default = void 0;
|
|
12696
|
-
var n,
|
|
12697
|
-
i = (n = r(17)) && n.__esModule ? n : {
|
|
12698
|
-
default: n
|
|
12699
|
-
},
|
|
12700
|
-
s = r(18);
|
|
12701
|
-
var a = [{
|
|
12702
|
-
test: function test(e) {
|
|
12703
|
-
return "microsoft edge" === e.getBrowserName(!0);
|
|
12704
|
-
},
|
|
12705
|
-
describe: function describe(e) {
|
|
12706
|
-
if (/\sedg\//i.test(e)) return {
|
|
12707
|
-
name: s.ENGINE_MAP.Blink
|
|
12708
|
-
};
|
|
12709
|
-
var t = i.default.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i, e);
|
|
12710
|
-
return {
|
|
12711
|
-
name: s.ENGINE_MAP.EdgeHTML,
|
|
12712
|
-
version: t
|
|
12713
|
-
};
|
|
12714
|
-
}
|
|
12715
|
-
}, {
|
|
12716
|
-
test: [/trident/i],
|
|
12717
|
-
describe: function describe(e) {
|
|
12718
|
-
var t = {
|
|
12719
|
-
name: s.ENGINE_MAP.Trident
|
|
12720
|
-
},
|
|
12721
|
-
r = i.default.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i, e);
|
|
12722
|
-
return r && (t.version = r), t;
|
|
12723
|
-
}
|
|
12724
|
-
}, {
|
|
12725
|
-
test: function test(e) {
|
|
12726
|
-
return e.test(/presto/i);
|
|
12727
|
-
},
|
|
12728
|
-
describe: function describe(e) {
|
|
12729
|
-
var t = {
|
|
12730
|
-
name: s.ENGINE_MAP.Presto
|
|
12731
|
-
},
|
|
12732
|
-
r = i.default.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i, e);
|
|
12733
|
-
return r && (t.version = r), t;
|
|
12734
|
-
}
|
|
12735
|
-
}, {
|
|
12736
|
-
test: function test(e) {
|
|
12737
|
-
var t = e.test(/gecko/i),
|
|
12738
|
-
r = e.test(/like gecko/i);
|
|
12739
|
-
return t && !r;
|
|
12740
|
-
},
|
|
12741
|
-
describe: function describe(e) {
|
|
12742
|
-
var t = {
|
|
12743
|
-
name: s.ENGINE_MAP.Gecko
|
|
12744
|
-
},
|
|
12745
|
-
r = i.default.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i, e);
|
|
12746
|
-
return r && (t.version = r), t;
|
|
12747
|
-
}
|
|
12748
|
-
}, {
|
|
12749
|
-
test: [/(apple)?webkit\/537\.36/i],
|
|
12750
|
-
describe: function describe() {
|
|
12751
|
-
return {
|
|
12752
|
-
name: s.ENGINE_MAP.Blink
|
|
12753
|
-
};
|
|
12754
|
-
}
|
|
12755
|
-
}, {
|
|
12756
|
-
test: [/(apple)?webkit/i],
|
|
12757
|
-
describe: function describe(e) {
|
|
12758
|
-
var t = {
|
|
12759
|
-
name: s.ENGINE_MAP.WebKit
|
|
12760
|
-
},
|
|
12761
|
-
r = i.default.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i, e);
|
|
12762
|
-
return r && (t.version = r), t;
|
|
12763
|
-
}
|
|
12764
|
-
}];
|
|
12765
|
-
t.default = a, e.exports = t.default;
|
|
12766
11877
|
}
|
|
12767
|
-
|
|
11878
|
+
return answerMline;
|
|
11879
|
+
}
|
|
11880
|
+
if (!(offerMline instanceof AvMediaDescription)) {
|
|
11881
|
+
throw new Error("Answer is missing a non-media mline: ".concat(offerMline.mid));
|
|
11882
|
+
}
|
|
11883
|
+
var startingMline = parsedAnswer.avMedia.find(m => m.type === offerMline.type);
|
|
11884
|
+
if (!startingMline) {
|
|
11885
|
+
throw new Error("Answer has no mline of type ".concat(offerMline.type, ", can't generate synthetic answer mline for mid ").concat(offerMline.mid));
|
|
11886
|
+
}
|
|
11887
|
+
var fakeCorrespondingMline = deepCopy(startingMline);
|
|
11888
|
+
fakeCorrespondingMline.mid = offerMline.mid;
|
|
11889
|
+
fakeCorrespondingMline.simulcast = undefined;
|
|
11890
|
+
if (offerMline.direction === 'sendrecv' || offerMline.direction === 'sendonly') {
|
|
11891
|
+
fakeCorrespondingMline.direction = 'recvonly';
|
|
11892
|
+
}
|
|
11893
|
+
if (offerMline.direction === 'recvonly') {
|
|
11894
|
+
fakeCorrespondingMline.direction = 'sendonly';
|
|
11895
|
+
var ingressSignaler = streamSignalerManager.getIngressStreamSignalerOrThrow(offerMline.mid);
|
|
11896
|
+
ingressSignaler.signalRemoteStreams(fakeCorrespondingMline);
|
|
11897
|
+
}
|
|
11898
|
+
return fakeCorrespondingMline;
|
|
12768
11899
|
});
|
|
12769
|
-
})(es5);
|
|
12770
|
-
var Bowser = /*@__PURE__*/getDefaultExportFromCjs(es5.exports);
|
|
12771
|
-
function getBrowserDetails() {
|
|
12772
|
-
var browser = Bowser.getParser(window.navigator.userAgent);
|
|
12773
|
-
return browser.getBrowser();
|
|
12774
11900
|
}
|
|
12775
|
-
|
|
12776
|
-
(
|
|
12777
|
-
|
|
12778
|
-
|
|
12779
|
-
|
|
12780
|
-
})(ReceiveSlotEvents || (ReceiveSlotEvents = {}));
|
|
12781
|
-
class ReceiveSlot extends EventEmitter {
|
|
12782
|
-
constructor(idGetter, track) {
|
|
12783
|
-
super();
|
|
12784
|
-
this._idGetter = idGetter;
|
|
12785
|
-
this.handleTrackMuted = this.handleTrackMuted.bind(this);
|
|
12786
|
-
this.handleTrackUnmuted = this.handleTrackUnmuted.bind(this);
|
|
12787
|
-
this._stream = new MediaStream([track]);
|
|
12788
|
-
this.addTrackHandlers(track);
|
|
12789
|
-
}
|
|
12790
|
-
addTrackHandlers(track) {
|
|
12791
|
-
track.addEventListener('mute', this.handleTrackMuted);
|
|
12792
|
-
track.addEventListener('unmute', this.handleTrackUnmuted);
|
|
12793
|
-
}
|
|
12794
|
-
handleTrackMuted() {
|
|
12795
|
-
this.emit(ReceiveSlotEvents.MediaStopped);
|
|
12796
|
-
}
|
|
12797
|
-
handleTrackUnmuted() {
|
|
12798
|
-
this.emit(ReceiveSlotEvents.MediaStarted);
|
|
12799
|
-
}
|
|
12800
|
-
removeTrackHandlers(track) {
|
|
12801
|
-
track.removeEventListener('mute', this.handleTrackMuted);
|
|
12802
|
-
track.removeEventListener('unmute', this.handleTrackUnmuted);
|
|
12803
|
-
}
|
|
12804
|
-
replaceTrack(newTrack) {
|
|
12805
|
-
var _a;
|
|
12806
|
-
var trackToRemove = (_a = this._stream.getTracks()) === null || _a === void 0 ? void 0 : _a[0];
|
|
12807
|
-
if (trackToRemove) {
|
|
12808
|
-
this._stream.removeTrack(trackToRemove);
|
|
12809
|
-
this.removeTrackHandlers(trackToRemove);
|
|
11901
|
+
function injectContentTypes(sdp, contentTypeMap) {
|
|
11902
|
+
contentTypeMap.forEach((mediaContent, mid) => {
|
|
11903
|
+
var mline = sdp.media.find(m => m.mid === mid);
|
|
11904
|
+
if (!mline) {
|
|
11905
|
+
throw new Error("Error trying to set content type for mid ".concat(mid, ": not found in SDP"));
|
|
12810
11906
|
}
|
|
12811
|
-
|
|
12812
|
-
|
|
12813
|
-
|
|
12814
|
-
|
|
12815
|
-
this.currentRxCsi = csi;
|
|
12816
|
-
this.emit(ReceiveSlotEvents.SourceUpdate, state, csi);
|
|
12817
|
-
}
|
|
12818
|
-
close() {
|
|
12819
|
-
this._stream.getTracks().forEach(t => {
|
|
12820
|
-
this.removeTrackHandlers(t);
|
|
12821
|
-
});
|
|
12822
|
-
}
|
|
12823
|
-
get id() {
|
|
12824
|
-
return this._idGetter();
|
|
12825
|
-
}
|
|
12826
|
-
get stream() {
|
|
12827
|
-
return this._stream;
|
|
12828
|
-
}
|
|
11907
|
+
if (mediaContent === MediaContent$1.Slides) {
|
|
11908
|
+
mline.addLine(new ContentLine(['slides']));
|
|
11909
|
+
}
|
|
11910
|
+
});
|
|
12829
11911
|
}
|
|
12830
|
-
|
|
12831
|
-
|
|
12832
|
-
|
|
12833
|
-
|
|
12834
|
-
|
|
12835
|
-
|
|
12836
|
-
|
|
12837
|
-
|
|
12838
|
-
|
|
12839
|
-
|
|
12840
|
-
|
|
12841
|
-
|
|
12842
|
-
|
|
12843
|
-
|
|
12844
|
-
|
|
12845
|
-
|
|
12846
|
-
}
|
|
12847
|
-
get sender() {
|
|
12848
|
-
return this._rtcRtpTransceiver.sender;
|
|
12849
|
-
}
|
|
12850
|
-
get mid() {
|
|
12851
|
-
return this._rtcRtpTransceiver.mid;
|
|
12852
|
-
}
|
|
12853
|
-
close() {
|
|
12854
|
-
this._rtcRtpTransceiver.stop();
|
|
12855
|
-
}
|
|
11912
|
+
function injectJmpAttributes(parsedSdp, csiMap, streamSignalingMode) {
|
|
11913
|
+
parsedSdp.avMedia.filter(mLine => mLine.direction === 'sendrecv' || mLine.direction === 'sendonly').forEach(mLine => {
|
|
11914
|
+
if (!mLine.otherLines.find(line => line instanceof JmpLine)) {
|
|
11915
|
+
mLine.addLine(new JmpLine());
|
|
11916
|
+
}
|
|
11917
|
+
if (!mLine.otherLines.find(line => line instanceof JmpSourceLine)) {
|
|
11918
|
+
var mediaType = getMediaTypeForMline(mLine);
|
|
11919
|
+
var csi = csiMap.get(mediaType);
|
|
11920
|
+
if (!csi) {
|
|
11921
|
+
throw new Error("Unable to find CSI for MediaType ".concat(mediaType));
|
|
11922
|
+
}
|
|
11923
|
+
mLine.addLine(new JmpSourceLine(mLine.mid, csi.toString()));
|
|
11924
|
+
}
|
|
11925
|
+
if (!mLine.otherLines.find(line => line instanceof JmpStreamIdModeLine)) {
|
|
11926
|
+
mLine.addLine(new JmpStreamIdModeLine(streamSignalingMode));
|
|
11927
|
+
}
|
|
11928
|
+
});
|
|
12856
11929
|
}
|
|
12857
|
-
class
|
|
12858
|
-
constructor(
|
|
12859
|
-
super(
|
|
12860
|
-
this.
|
|
12861
|
-
|
|
12862
|
-
|
|
11930
|
+
class SendOnlyTransceiver extends Transceiver {
|
|
11931
|
+
constructor(rtcpRtpTransceiver, csi) {
|
|
11932
|
+
super(rtcpRtpTransceiver);
|
|
11933
|
+
this.requested = false;
|
|
11934
|
+
this.csi = csi;
|
|
11935
|
+
this.handleTrackChange = this.handleTrackChange.bind(this);
|
|
11936
|
+
}
|
|
11937
|
+
handleTrackChange() {
|
|
11938
|
+
var _a;
|
|
11939
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
11940
|
+
if (this.requested) {
|
|
11941
|
+
yield this.sender.replaceTrack(((_a = this.publishedTrack) === null || _a === void 0 ? void 0 : _a.underlyingTrack) || null);
|
|
12863
11942
|
}
|
|
12864
|
-
|
|
12865
|
-
}, this._rtcRtpTransceiver.receiver.track);
|
|
11943
|
+
});
|
|
12866
11944
|
}
|
|
12867
|
-
|
|
12868
|
-
|
|
12869
|
-
this
|
|
11945
|
+
replacePublishedTrack(newTrack) {
|
|
11946
|
+
var _a, _b;
|
|
11947
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
11948
|
+
(_a = this.publishedTrack) === null || _a === void 0 ? void 0 : _a.off(LocalTrackEvents.UnderlyingTrackChange, this.handleTrackChange);
|
|
11949
|
+
(_b = this.publishedTrack) === null || _b === void 0 ? void 0 : _b.setPublished(false);
|
|
11950
|
+
if (this.requested) {
|
|
11951
|
+
yield this.sender.replaceTrack((newTrack === null || newTrack === void 0 ? void 0 : newTrack.underlyingTrack) || null);
|
|
11952
|
+
}
|
|
11953
|
+
this.publishedTrack = newTrack;
|
|
11954
|
+
newTrack === null || newTrack === void 0 ? void 0 : newTrack.on(LocalTrackEvents.UnderlyingTrackChange, this.handleTrackChange);
|
|
11955
|
+
newTrack === null || newTrack === void 0 ? void 0 : newTrack.setPublished(true);
|
|
11956
|
+
});
|
|
12870
11957
|
}
|
|
12871
|
-
|
|
12872
|
-
|
|
12873
|
-
this
|
|
11958
|
+
setTrackRequested(requested) {
|
|
11959
|
+
var _a;
|
|
11960
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
11961
|
+
if (this.requested !== requested) {
|
|
11962
|
+
this.requested = requested;
|
|
11963
|
+
var newTrack = requested ? ((_a = this.publishedTrack) === null || _a === void 0 ? void 0 : _a.underlyingTrack) || null : null;
|
|
11964
|
+
yield this.sender.replaceTrack(newTrack);
|
|
11965
|
+
}
|
|
11966
|
+
});
|
|
12874
11967
|
}
|
|
12875
|
-
|
|
12876
|
-
return this
|
|
11968
|
+
updateSimulcastStreamStates(requestedIdEncodingParamsMap) {
|
|
11969
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
11970
|
+
var sendParameters = this.sender.getParameters();
|
|
11971
|
+
sendParameters.encodings.forEach((encoding, index) => {
|
|
11972
|
+
var encodingParams = requestedIdEncodingParamsMap.get(index);
|
|
11973
|
+
encoding.active = Boolean(encodingParams);
|
|
11974
|
+
if (encodingParams) {
|
|
11975
|
+
if (encodingParams.scaleDownRatio >= 1 && encoding.scaleResolutionDownBy !== encodingParams.scaleDownRatio) {
|
|
11976
|
+
encoding.scaleResolutionDownBy = encodingParams.scaleDownRatio;
|
|
11977
|
+
}
|
|
11978
|
+
if (encodingParams.maxPayloadBitsPerSecond) {
|
|
11979
|
+
encoding.maxBitrate = encodingParams.maxPayloadBitsPerSecond;
|
|
11980
|
+
}
|
|
11981
|
+
}
|
|
11982
|
+
});
|
|
11983
|
+
yield this.sender.setParameters(sendParameters);
|
|
11984
|
+
});
|
|
12877
11985
|
}
|
|
12878
|
-
|
|
12879
|
-
|
|
12880
|
-
|
|
12881
|
-
|
|
12882
|
-
if (!JmpLine.regex.test(line)) {
|
|
12883
|
-
return undefined;
|
|
11986
|
+
getScaleDownRatio(expectedMaxFs) {
|
|
11987
|
+
var _a;
|
|
11988
|
+
if (!expectedMaxFs) {
|
|
11989
|
+
return -1;
|
|
12884
11990
|
}
|
|
12885
|
-
|
|
11991
|
+
if (!this.publishedTrack) {
|
|
11992
|
+
return -1;
|
|
11993
|
+
}
|
|
11994
|
+
var setting = (_a = this.publishedTrack) === null || _a === void 0 ? void 0 : _a.underlyingTrack.getSettings();
|
|
11995
|
+
var sourceHeight = setting === null || setting === void 0 ? void 0 : setting.height;
|
|
11996
|
+
var sourceWidth = setting === null || setting === void 0 ? void 0 : setting.width;
|
|
11997
|
+
if (!sourceWidth || !sourceHeight) {
|
|
11998
|
+
return -1;
|
|
11999
|
+
}
|
|
12000
|
+
return Math.max(getScaleDownRatio([sourceWidth, sourceHeight], sourceHeight, expectedMaxFs), 1.0);
|
|
12886
12001
|
}
|
|
12887
|
-
|
|
12888
|
-
return
|
|
12002
|
+
publishTrack(track) {
|
|
12003
|
+
return this.replacePublishedTrack(track);
|
|
12889
12004
|
}
|
|
12890
|
-
|
|
12891
|
-
|
|
12892
|
-
class JmpStreamIdModeLine extends Line {
|
|
12893
|
-
constructor(streamIdMode) {
|
|
12894
|
-
super();
|
|
12895
|
-
this.streamIdMode = streamIdMode;
|
|
12005
|
+
unpublishTrack() {
|
|
12006
|
+
return this.replacePublishedTrack();
|
|
12896
12007
|
}
|
|
12897
|
-
|
|
12898
|
-
|
|
12899
|
-
|
|
12008
|
+
setActive(enabled) {
|
|
12009
|
+
var direction = enabled ? 'sendrecv' : 'inactive';
|
|
12010
|
+
this._rtcRtpTransceiver.direction = direction;
|
|
12011
|
+
return this._rtcRtpTransceiver.direction !== this._rtcRtpTransceiver.currentDirection;
|
|
12012
|
+
}
|
|
12013
|
+
getIngressPayloadType(mimeType) {
|
|
12014
|
+
var senderCodecs = this.sender.getParameters().codecs.filter(codec => codec.mimeType === mimeType);
|
|
12015
|
+
var receiverCodecs = this.receiver.getParameters().codecs.filter(codec => codec.mimeType === mimeType);
|
|
12016
|
+
if (!senderCodecs || !receiverCodecs || senderCodecs.length === 0 || receiverCodecs.length === 0) {
|
|
12017
|
+
throw new Error("sender codecs or receiver codecs is undefined or empty");
|
|
12900
12018
|
}
|
|
12901
|
-
var
|
|
12902
|
-
var
|
|
12903
|
-
|
|
12019
|
+
var senderCodec = senderCodecs[0];
|
|
12020
|
+
var targetCodec = receiverCodecs.find(receiverCodec => {
|
|
12021
|
+
return areCodecsCompatible(senderCodec, receiverCodec);
|
|
12022
|
+
});
|
|
12023
|
+
if (!targetCodec || !targetCodec.payloadType) {
|
|
12024
|
+
throw new Error("ingress payload type is not well defined in receiver codecs");
|
|
12025
|
+
}
|
|
12026
|
+
return targetCodec.payloadType;
|
|
12904
12027
|
}
|
|
12905
|
-
|
|
12906
|
-
return
|
|
12028
|
+
getStats() {
|
|
12029
|
+
return this.sender.getStats();
|
|
12907
12030
|
}
|
|
12908
12031
|
}
|
|
12909
|
-
|
|
12910
|
-
|
|
12911
|
-
|
|
12912
|
-
|
|
12913
|
-
this.
|
|
12914
|
-
this.csi = csi;
|
|
12915
|
-
}
|
|
12916
|
-
static fromSdpLine(line) {
|
|
12917
|
-
if (!JmpSourceLine.regex.test(line)) {
|
|
12918
|
-
return undefined;
|
|
12919
|
-
}
|
|
12920
|
-
var tokens = line.match(JmpSourceLine.regex);
|
|
12921
|
-
var source = tokens[1];
|
|
12922
|
-
var csi = tokens[2];
|
|
12923
|
-
return new JmpSourceLine(source, csi);
|
|
12032
|
+
class StatsManager {
|
|
12033
|
+
constructor(statsGetter) {
|
|
12034
|
+
var statsPreprocessor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : () => __awaiter(this, void 0, void 0, function* () {});
|
|
12035
|
+
this.statsGetter = statsGetter;
|
|
12036
|
+
this.statsPreProcessor = statsPreprocessor;
|
|
12924
12037
|
}
|
|
12925
|
-
|
|
12926
|
-
|
|
12927
|
-
|
|
12928
|
-
|
|
12929
|
-
|
|
12930
|
-
|
|
12038
|
+
getStats() {
|
|
12039
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
12040
|
+
var statsReport = yield this.statsGetter();
|
|
12041
|
+
var statsObject = {};
|
|
12042
|
+
statsReport.forEach((value, key) => {
|
|
12043
|
+
statsObject[key] = value;
|
|
12044
|
+
});
|
|
12045
|
+
yield this.statsPreProcessor(statsObject);
|
|
12046
|
+
return statsObject;
|
|
12047
|
+
});
|
|
12931
12048
|
}
|
|
12932
12049
|
}
|
|
12933
|
-
|
|
12934
|
-
|
|
12935
|
-
|
|
12936
|
-
|
|
12937
|
-
|
|
12938
|
-
|
|
12939
|
-
|
|
12940
|
-
|
|
12941
|
-
return o;
|
|
12942
|
-
}, Object.create(Object.getPrototypeOf(source))) : source;
|
|
12943
|
-
}
|
|
12944
|
-
function getMediaTypeForMline(mLine) {
|
|
12945
|
-
var _a, _b;
|
|
12946
|
-
var mediaFamily;
|
|
12947
|
-
if (mLine.type.toLowerCase() === MediaFamily$1.Audio.toLowerCase()) {
|
|
12948
|
-
mediaFamily = MediaFamily$1.Audio;
|
|
12949
|
-
} else if (mLine.type.toLowerCase() === MediaFamily$1.Video.toLowerCase()) {
|
|
12950
|
-
mediaFamily = MediaFamily$1.Video;
|
|
12951
|
-
} else {
|
|
12952
|
-
throw Error("Mline type doesn't match any known MediaFamily: ".concat(mLine.type));
|
|
12050
|
+
var simulcastMaxFrameSizes = {
|
|
12051
|
+
0: '240',
|
|
12052
|
+
1: '2304',
|
|
12053
|
+
2: '8160'
|
|
12054
|
+
};
|
|
12055
|
+
class RidIngressStreamSignaler {
|
|
12056
|
+
constructor(mid) {
|
|
12057
|
+
this.mid = mid;
|
|
12953
12058
|
}
|
|
12954
|
-
|
|
12955
|
-
|
|
12956
|
-
|
|
12957
|
-
|
|
12958
|
-
|
|
12059
|
+
getReceiverId() {
|
|
12060
|
+
return {
|
|
12061
|
+
mid: this.mid,
|
|
12062
|
+
rid: '1'
|
|
12063
|
+
};
|
|
12959
12064
|
}
|
|
12960
|
-
|
|
12961
|
-
}
|
|
12962
|
-
function filterCodecs(parsedSdp, allowedCodecs) {
|
|
12963
|
-
var allowedLowerCase = allowedCodecs.map(s => s.toLowerCase());
|
|
12964
|
-
parsedSdp.avMedia.map(m => [...m.codecs.values()].map(c => c.name)).flat().filter(codecName => !allowedLowerCase.includes(codecName.toLowerCase())).forEach(c => removeCodec(parsedSdp, c));
|
|
12965
|
-
}
|
|
12966
|
-
function setMaxBandwidth(parsedSdp, maxBandwidth) {
|
|
12967
|
-
parsedSdp.avMedia.forEach(mline => {
|
|
12968
|
-
mline.bandwidth = new BandwidthLine('TIAS', maxBandwidth);
|
|
12969
|
-
});
|
|
12065
|
+
signalLocalStreams(mLine) {}
|
|
12066
|
+
signalRemoteStreams(mLine) {}
|
|
12970
12067
|
}
|
|
12971
|
-
|
|
12972
|
-
|
|
12973
|
-
|
|
12974
|
-
|
|
12975
|
-
parsedSdp.session.groups.splice(0, parsedSdp.session.groups.length);
|
|
12976
|
-
parsedSdp.session.groups.push(new BundleGroupLine(audioMids));
|
|
12977
|
-
parsedSdp.session.groups.push(new BundleGroupLine(videoMids));
|
|
12068
|
+
class RidEgressStreamSignaler {
|
|
12069
|
+
constructor(mid) {
|
|
12070
|
+
this.streamIds = [];
|
|
12071
|
+
this.mid = mid;
|
|
12978
12072
|
}
|
|
12979
|
-
|
|
12980
|
-
|
|
12981
|
-
|
|
12982
|
-
|
|
12983
|
-
|
|
12984
|
-
|
|
12985
|
-
|
|
12986
|
-
|
|
12987
|
-
|
|
12988
|
-
|
|
12989
|
-
|
|
12990
|
-
|
|
12991
|
-
|
|
12992
|
-
}
|
|
12993
|
-
|
|
12994
|
-
|
|
12995
|
-
|
|
12996
|
-
|
|
12997
|
-
throw new Error("Offer mline is missing MID");
|
|
12998
|
-
}
|
|
12999
|
-
var answerMline = parsedAnswer.media.find(m => m.mid === offerMline.mid);
|
|
13000
|
-
if (answerMline) {
|
|
13001
|
-
if (answerMline instanceof AvMediaDescription) {
|
|
13002
|
-
[...answerMline.codecs.values()].forEach(ci => {
|
|
13003
|
-
ci.fmtParams.push('x-google-start-bitrate=60000');
|
|
13004
|
-
});
|
|
12073
|
+
signalStreams(simulcastEnabled, _rtxEnabled, mLine) {
|
|
12074
|
+
mLine.ssrcGroups = [];
|
|
12075
|
+
if (this.streamIds.length === 0) {
|
|
12076
|
+
if (simulcastEnabled) {
|
|
12077
|
+
this.streamIds = [{
|
|
12078
|
+
mid: this.mid,
|
|
12079
|
+
rid: 'low'
|
|
12080
|
+
}, {
|
|
12081
|
+
mid: this.mid,
|
|
12082
|
+
rid: 'medium'
|
|
12083
|
+
}, {
|
|
12084
|
+
mid: this.mid,
|
|
12085
|
+
rid: 'high'
|
|
12086
|
+
}];
|
|
12087
|
+
} else {
|
|
12088
|
+
this.streamIds = [{
|
|
12089
|
+
mid: this.mid
|
|
12090
|
+
}];
|
|
13005
12091
|
}
|
|
13006
|
-
return answerMline;
|
|
13007
12092
|
}
|
|
13008
|
-
if (
|
|
13009
|
-
|
|
12093
|
+
if (simulcastEnabled) {
|
|
12094
|
+
mLine.rids = this.streamIds.map((streamId, index) => new RidLine(streamId.rid, 'send', "max-fs=".concat(simulcastMaxFrameSizes[index])));
|
|
12095
|
+
mLine.simulcast = new SimulcastLine(SimulcastLayerList.fromString('low;medium;high'), new SimulcastLayerList());
|
|
13010
12096
|
}
|
|
13011
|
-
|
|
13012
|
-
|
|
13013
|
-
|
|
12097
|
+
}
|
|
12098
|
+
getSenderIds() {
|
|
12099
|
+
return this.streamIds;
|
|
12100
|
+
}
|
|
12101
|
+
getEncodingIndexForStreamId(streamId) {
|
|
12102
|
+
return this.streamIds.findIndex(currStreamId => compareStreamIds(currStreamId, streamId));
|
|
12103
|
+
}
|
|
12104
|
+
}
|
|
12105
|
+
function generateSsrc() {
|
|
12106
|
+
return Math.floor(Math.random() * 0xffffffff);
|
|
12107
|
+
}
|
|
12108
|
+
class SsrcIngressStreamSignaler {
|
|
12109
|
+
constructor() {
|
|
12110
|
+
this.ssrc = generateSsrc();
|
|
12111
|
+
}
|
|
12112
|
+
getReceiverId() {
|
|
12113
|
+
return Object.assign({
|
|
12114
|
+
ssrc: this.ssrc
|
|
12115
|
+
}, this.rtxSsrc ? {
|
|
12116
|
+
rtxSsrc: this.rtxSsrc
|
|
12117
|
+
} : {});
|
|
12118
|
+
}
|
|
12119
|
+
signalLocalStreams(_mLine) {}
|
|
12120
|
+
signalRemoteStreams(mLine) {
|
|
12121
|
+
mLine.addLine(new SsrcLine(this.ssrc, 'cname', "".concat(this.ssrc, "-cname")));
|
|
12122
|
+
mLine.addLine(new SsrcLine(this.ssrc, 'msid', '-', '1'));
|
|
12123
|
+
if (hasCodec('rtx', mLine)) {
|
|
12124
|
+
this.rtxSsrc = generateSsrc();
|
|
12125
|
+
mLine.addLine(new SsrcLine(this.rtxSsrc, 'cname', "".concat(this.ssrc, "-cname")));
|
|
12126
|
+
mLine.addLine(new SsrcLine(this.rtxSsrc, 'msid', '-', '1'));
|
|
12127
|
+
mLine.addLine(new SsrcGroupLine('FID', [this.ssrc, this.rtxSsrc]));
|
|
13014
12128
|
}
|
|
13015
|
-
|
|
13016
|
-
|
|
13017
|
-
|
|
13018
|
-
|
|
13019
|
-
|
|
12129
|
+
}
|
|
12130
|
+
}
|
|
12131
|
+
class SsrcEgressStreamSignaler {
|
|
12132
|
+
constructor() {
|
|
12133
|
+
this.streamIds = [];
|
|
12134
|
+
}
|
|
12135
|
+
signalStreams(simulcastEnabled, rtxEnabled, mLine) {
|
|
12136
|
+
mLine.rids = [];
|
|
12137
|
+
mLine.simulcast = undefined;
|
|
12138
|
+
mLine.ssrcs = [];
|
|
12139
|
+
mLine.ssrcGroups = [];
|
|
12140
|
+
if (this.streamIds.length === 0) {
|
|
12141
|
+
var numStreams = simulcastEnabled ? 3 : 1;
|
|
12142
|
+
[...Array(numStreams).keys()].forEach(() => {
|
|
12143
|
+
var newStreamId = {
|
|
12144
|
+
ssrc: generateSsrc()
|
|
12145
|
+
};
|
|
12146
|
+
if (rtxEnabled) {
|
|
12147
|
+
newStreamId.rtxSsrc = generateSsrc();
|
|
12148
|
+
}
|
|
12149
|
+
this.streamIds.push(newStreamId);
|
|
12150
|
+
});
|
|
13020
12151
|
}
|
|
13021
|
-
|
|
13022
|
-
|
|
13023
|
-
|
|
13024
|
-
|
|
12152
|
+
this.streamIds.forEach(streamId => {
|
|
12153
|
+
var rtpSsrc = streamId.ssrc;
|
|
12154
|
+
mLine.addLine(new SsrcLine(rtpSsrc, 'cname', "".concat(rtpSsrc, "-cname")));
|
|
12155
|
+
mLine.addLine(new SsrcLine(rtpSsrc, 'msid', '-', '1'));
|
|
12156
|
+
if (rtxEnabled) {
|
|
12157
|
+
var rtxSsrc = streamId.rtxSsrc;
|
|
12158
|
+
mLine.addLine(new SsrcLine(rtxSsrc, 'cname', "".concat(rtpSsrc, "-cname")));
|
|
12159
|
+
mLine.addLine(new SsrcLine(rtxSsrc, 'msid', '-', '1'));
|
|
12160
|
+
mLine.addLine(new SsrcGroupLine('FID', [rtpSsrc, rtxSsrc]));
|
|
12161
|
+
}
|
|
12162
|
+
});
|
|
12163
|
+
if (simulcastEnabled) {
|
|
12164
|
+
mLine.addLine(new SsrcGroupLine('SIM', this.streamIds.map(streamId => streamId.ssrc)));
|
|
13025
12165
|
}
|
|
13026
|
-
|
|
13027
|
-
|
|
12166
|
+
}
|
|
12167
|
+
getSenderIds() {
|
|
12168
|
+
return this.streamIds;
|
|
12169
|
+
}
|
|
12170
|
+
getEncodingIndexForStreamId(streamId) {
|
|
12171
|
+
return this.streamIds.findIndex(currStreamId => compareStreamIds(currStreamId, streamId));
|
|
12172
|
+
}
|
|
13028
12173
|
}
|
|
13029
|
-
|
|
13030
|
-
|
|
13031
|
-
|
|
13032
|
-
|
|
13033
|
-
|
|
12174
|
+
class StreamSignalerManager {
|
|
12175
|
+
constructor(streamSignalingMode) {
|
|
12176
|
+
this.egressStreamSignalersByMid = new Map();
|
|
12177
|
+
this.ingressStreamsSignalersByMid = new Map();
|
|
12178
|
+
this.ingressStreamSignalingMode = streamSignalingMode;
|
|
12179
|
+
this.egressStreamSignalingMode = streamSignalingMode;
|
|
12180
|
+
}
|
|
12181
|
+
getOrCreateEgressStreamSignaler(mid) {
|
|
12182
|
+
var existing = this.getEgressStreamSignaler(mid);
|
|
12183
|
+
if (existing) {
|
|
12184
|
+
return existing;
|
|
13034
12185
|
}
|
|
13035
|
-
|
|
13036
|
-
|
|
12186
|
+
var newSignaler;
|
|
12187
|
+
if (this.egressStreamSignalingMode === 'MID-RID') {
|
|
12188
|
+
newSignaler = new RidEgressStreamSignaler(mid);
|
|
12189
|
+
} else {
|
|
12190
|
+
newSignaler = new SsrcEgressStreamSignaler();
|
|
13037
12191
|
}
|
|
13038
|
-
|
|
13039
|
-
|
|
13040
|
-
|
|
13041
|
-
|
|
13042
|
-
|
|
13043
|
-
|
|
12192
|
+
this.egressStreamSignalersByMid.set(mid, newSignaler);
|
|
12193
|
+
return newSignaler;
|
|
12194
|
+
}
|
|
12195
|
+
getEgressStreamSignalerOrThrow(mid) {
|
|
12196
|
+
var existing = this.getEgressStreamSignaler(mid);
|
|
12197
|
+
if (!existing) {
|
|
12198
|
+
throw new Error("Couldn't find EgressStreamSignaler for mid ".concat(mid));
|
|
13044
12199
|
}
|
|
13045
|
-
|
|
13046
|
-
|
|
13047
|
-
|
|
13048
|
-
|
|
13049
|
-
|
|
13050
|
-
|
|
13051
|
-
|
|
12200
|
+
return existing;
|
|
12201
|
+
}
|
|
12202
|
+
getEgressStreamSignaler(mid) {
|
|
12203
|
+
return this.egressStreamSignalersByMid.get(mid);
|
|
12204
|
+
}
|
|
12205
|
+
getOrCreateIngressStreamSignaler(mid) {
|
|
12206
|
+
var existing = this.getIngressStreamSignaler(mid);
|
|
12207
|
+
if (existing) {
|
|
12208
|
+
return existing;
|
|
13052
12209
|
}
|
|
13053
|
-
|
|
13054
|
-
|
|
12210
|
+
var newSignaler;
|
|
12211
|
+
if (this.ingressStreamSignalingMode === 'MID-RID') {
|
|
12212
|
+
newSignaler = new RidIngressStreamSignaler(mid);
|
|
12213
|
+
} else {
|
|
12214
|
+
newSignaler = new SsrcIngressStreamSignaler();
|
|
13055
12215
|
}
|
|
13056
|
-
|
|
13057
|
-
|
|
13058
|
-
class SendOnlyTransceiver extends Transceiver {
|
|
13059
|
-
constructor(rtcpRtpTransceiver, csi) {
|
|
13060
|
-
super(rtcpRtpTransceiver);
|
|
13061
|
-
this.requested = false;
|
|
13062
|
-
this.csi = csi;
|
|
13063
|
-
this.handleTrackChange = this.handleTrackChange.bind(this);
|
|
12216
|
+
this.ingressStreamsSignalersByMid.set(mid, newSignaler);
|
|
12217
|
+
return newSignaler;
|
|
13064
12218
|
}
|
|
13065
|
-
|
|
13066
|
-
|
|
13067
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
13068
|
-
if (this.requested) {
|
|
13069
|
-
yield this.sender.replaceTrack(((_a = this.publishedTrack) === null || _a === void 0 ? void 0 : _a.underlyingTrack) || null);
|
|
13070
|
-
}
|
|
13071
|
-
});
|
|
12219
|
+
getIngressStreamSignaler(mid) {
|
|
12220
|
+
return this.ingressStreamsSignalersByMid.get(mid);
|
|
13072
12221
|
}
|
|
13073
|
-
|
|
13074
|
-
var
|
|
13075
|
-
|
|
13076
|
-
|
|
13077
|
-
|
|
13078
|
-
|
|
13079
|
-
yield this.sender.replaceTrack((newTrack === null || newTrack === void 0 ? void 0 : newTrack.underlyingTrack) || null);
|
|
13080
|
-
}
|
|
13081
|
-
this.publishedTrack = newTrack;
|
|
13082
|
-
newTrack === null || newTrack === void 0 ? void 0 : newTrack.on(LocalTrackEvents.UnderlyingTrackChange, this.handleTrackChange);
|
|
13083
|
-
newTrack === null || newTrack === void 0 ? void 0 : newTrack.setPublished(true);
|
|
13084
|
-
});
|
|
12222
|
+
getIngressStreamSignalerOrThrow(mid) {
|
|
12223
|
+
var existing = this.getIngressStreamSignaler(mid);
|
|
12224
|
+
if (!existing) {
|
|
12225
|
+
throw new Error("Couldn't find IngressStreamSignaler for mid ".concat(mid));
|
|
12226
|
+
}
|
|
12227
|
+
return existing;
|
|
13085
12228
|
}
|
|
13086
|
-
|
|
13087
|
-
|
|
13088
|
-
|
|
13089
|
-
|
|
13090
|
-
|
|
13091
|
-
|
|
13092
|
-
|
|
12229
|
+
}
|
|
12230
|
+
var es5 = {
|
|
12231
|
+
exports: {}
|
|
12232
|
+
};
|
|
12233
|
+
(function (module, exports) {
|
|
12234
|
+
!function (e, t) {
|
|
12235
|
+
module.exports = t();
|
|
12236
|
+
}(commonjsGlobal$3, function () {
|
|
12237
|
+
return function (e) {
|
|
12238
|
+
var t = {};
|
|
12239
|
+
function r(n) {
|
|
12240
|
+
if (t[n]) return t[n].exports;
|
|
12241
|
+
var i = t[n] = {
|
|
12242
|
+
i: n,
|
|
12243
|
+
l: !1,
|
|
12244
|
+
exports: {}
|
|
12245
|
+
};
|
|
12246
|
+
return e[n].call(i.exports, i, i.exports, r), i.l = !0, i.exports;
|
|
13093
12247
|
}
|
|
13094
|
-
|
|
13095
|
-
|
|
13096
|
-
|
|
13097
|
-
|
|
13098
|
-
|
|
13099
|
-
|
|
13100
|
-
|
|
13101
|
-
|
|
13102
|
-
|
|
13103
|
-
|
|
13104
|
-
|
|
12248
|
+
return r.m = e, r.c = t, r.d = function (e, t, n) {
|
|
12249
|
+
r.o(e, t) || Object.defineProperty(e, t, {
|
|
12250
|
+
enumerable: !0,
|
|
12251
|
+
get: n
|
|
12252
|
+
});
|
|
12253
|
+
}, r.r = function (e) {
|
|
12254
|
+
"undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, {
|
|
12255
|
+
value: "Module"
|
|
12256
|
+
}), Object.defineProperty(e, "__esModule", {
|
|
12257
|
+
value: !0
|
|
12258
|
+
});
|
|
12259
|
+
}, r.t = function (e, t) {
|
|
12260
|
+
if (1 & t && (e = r(e)), 8 & t) return e;
|
|
12261
|
+
if (4 & t && "object" == typeof e && e && e.__esModule) return e;
|
|
12262
|
+
var n = Object.create(null);
|
|
12263
|
+
if (r.r(n), Object.defineProperty(n, "default", {
|
|
12264
|
+
enumerable: !0,
|
|
12265
|
+
value: e
|
|
12266
|
+
}), 2 & t && "string" != typeof e) for (var i in e) {
|
|
12267
|
+
r.d(n, i, function (t) {
|
|
12268
|
+
return e[t];
|
|
12269
|
+
}.bind(null, i));
|
|
12270
|
+
}
|
|
12271
|
+
return n;
|
|
12272
|
+
}, r.n = function (e) {
|
|
12273
|
+
var t = e && e.__esModule ? function () {
|
|
12274
|
+
return e.default;
|
|
12275
|
+
} : function () {
|
|
12276
|
+
return e;
|
|
12277
|
+
};
|
|
12278
|
+
return r.d(t, "a", t), t;
|
|
12279
|
+
}, r.o = function (e, t) {
|
|
12280
|
+
return Object.prototype.hasOwnProperty.call(e, t);
|
|
12281
|
+
}, r.p = "", r(r.s = 90);
|
|
12282
|
+
}({
|
|
12283
|
+
17: function _(e, t, r) {
|
|
12284
|
+
t.__esModule = !0, t.default = void 0;
|
|
12285
|
+
var n = r(18),
|
|
12286
|
+
i = function () {
|
|
12287
|
+
function e() {}
|
|
12288
|
+
return e.getFirstMatch = function (e, t) {
|
|
12289
|
+
var r = t.match(e);
|
|
12290
|
+
return r && r.length > 0 && r[1] || "";
|
|
12291
|
+
}, e.getSecondMatch = function (e, t) {
|
|
12292
|
+
var r = t.match(e);
|
|
12293
|
+
return r && r.length > 1 && r[2] || "";
|
|
12294
|
+
}, e.matchAndReturnConst = function (e, t, r) {
|
|
12295
|
+
if (e.test(t)) return r;
|
|
12296
|
+
}, e.getWindowsVersionName = function (e) {
|
|
12297
|
+
switch (e) {
|
|
12298
|
+
case "NT":
|
|
12299
|
+
return "NT";
|
|
12300
|
+
case "XP":
|
|
12301
|
+
return "XP";
|
|
12302
|
+
case "NT 5.0":
|
|
12303
|
+
return "2000";
|
|
12304
|
+
case "NT 5.1":
|
|
12305
|
+
return "XP";
|
|
12306
|
+
case "NT 5.2":
|
|
12307
|
+
return "2003";
|
|
12308
|
+
case "NT 6.0":
|
|
12309
|
+
return "Vista";
|
|
12310
|
+
case "NT 6.1":
|
|
12311
|
+
return "7";
|
|
12312
|
+
case "NT 6.2":
|
|
12313
|
+
return "8";
|
|
12314
|
+
case "NT 6.3":
|
|
12315
|
+
return "8.1";
|
|
12316
|
+
case "NT 10.0":
|
|
12317
|
+
return "10";
|
|
12318
|
+
default:
|
|
12319
|
+
return;
|
|
12320
|
+
}
|
|
12321
|
+
}, e.getMacOSVersionName = function (e) {
|
|
12322
|
+
var t = e.split(".").splice(0, 2).map(function (e) {
|
|
12323
|
+
return parseInt(e, 10) || 0;
|
|
12324
|
+
});
|
|
12325
|
+
if (t.push(0), 10 === t[0]) switch (t[1]) {
|
|
12326
|
+
case 5:
|
|
12327
|
+
return "Leopard";
|
|
12328
|
+
case 6:
|
|
12329
|
+
return "Snow Leopard";
|
|
12330
|
+
case 7:
|
|
12331
|
+
return "Lion";
|
|
12332
|
+
case 8:
|
|
12333
|
+
return "Mountain Lion";
|
|
12334
|
+
case 9:
|
|
12335
|
+
return "Mavericks";
|
|
12336
|
+
case 10:
|
|
12337
|
+
return "Yosemite";
|
|
12338
|
+
case 11:
|
|
12339
|
+
return "El Capitan";
|
|
12340
|
+
case 12:
|
|
12341
|
+
return "Sierra";
|
|
12342
|
+
case 13:
|
|
12343
|
+
return "High Sierra";
|
|
12344
|
+
case 14:
|
|
12345
|
+
return "Mojave";
|
|
12346
|
+
case 15:
|
|
12347
|
+
return "Catalina";
|
|
12348
|
+
default:
|
|
12349
|
+
return;
|
|
12350
|
+
}
|
|
12351
|
+
}, e.getAndroidVersionName = function (e) {
|
|
12352
|
+
var t = e.split(".").splice(0, 2).map(function (e) {
|
|
12353
|
+
return parseInt(e, 10) || 0;
|
|
12354
|
+
});
|
|
12355
|
+
if (t.push(0), !(1 === t[0] && t[1] < 5)) return 1 === t[0] && t[1] < 6 ? "Cupcake" : 1 === t[0] && t[1] >= 6 ? "Donut" : 2 === t[0] && t[1] < 2 ? "Eclair" : 2 === t[0] && 2 === t[1] ? "Froyo" : 2 === t[0] && t[1] > 2 ? "Gingerbread" : 3 === t[0] ? "Honeycomb" : 4 === t[0] && t[1] < 1 ? "Ice Cream Sandwich" : 4 === t[0] && t[1] < 4 ? "Jelly Bean" : 4 === t[0] && t[1] >= 4 ? "KitKat" : 5 === t[0] ? "Lollipop" : 6 === t[0] ? "Marshmallow" : 7 === t[0] ? "Nougat" : 8 === t[0] ? "Oreo" : 9 === t[0] ? "Pie" : void 0;
|
|
12356
|
+
}, e.getVersionPrecision = function (e) {
|
|
12357
|
+
return e.split(".").length;
|
|
12358
|
+
}, e.compareVersions = function (t, r, n) {
|
|
12359
|
+
void 0 === n && (n = !1);
|
|
12360
|
+
var i = e.getVersionPrecision(t),
|
|
12361
|
+
s = e.getVersionPrecision(r),
|
|
12362
|
+
a = Math.max(i, s),
|
|
12363
|
+
o = 0,
|
|
12364
|
+
u = e.map([t, r], function (t) {
|
|
12365
|
+
var r = a - e.getVersionPrecision(t),
|
|
12366
|
+
n = t + new Array(r + 1).join(".0");
|
|
12367
|
+
return e.map(n.split("."), function (e) {
|
|
12368
|
+
return new Array(20 - e.length).join("0") + e;
|
|
12369
|
+
}).reverse();
|
|
12370
|
+
});
|
|
12371
|
+
for (n && (o = a - Math.min(i, s)), a -= 1; a >= o;) {
|
|
12372
|
+
if (u[0][a] > u[1][a]) return 1;
|
|
12373
|
+
if (u[0][a] === u[1][a]) {
|
|
12374
|
+
if (a === o) return 0;
|
|
12375
|
+
a -= 1;
|
|
12376
|
+
} else if (u[0][a] < u[1][a]) return -1;
|
|
12377
|
+
}
|
|
12378
|
+
}, e.map = function (e, t) {
|
|
12379
|
+
var r,
|
|
12380
|
+
n = [];
|
|
12381
|
+
if (Array.prototype.map) return Array.prototype.map.call(e, t);
|
|
12382
|
+
for (r = 0; r < e.length; r += 1) {
|
|
12383
|
+
n.push(t(e[r]));
|
|
12384
|
+
}
|
|
12385
|
+
return n;
|
|
12386
|
+
}, e.find = function (e, t) {
|
|
12387
|
+
var r, n;
|
|
12388
|
+
if (Array.prototype.find) return Array.prototype.find.call(e, t);
|
|
12389
|
+
for (r = 0, n = e.length; r < n; r += 1) {
|
|
12390
|
+
var i = e[r];
|
|
12391
|
+
if (t(i, r)) return i;
|
|
12392
|
+
}
|
|
12393
|
+
}, e.assign = function (e) {
|
|
12394
|
+
for (var t, r, n = e, i = arguments.length, s = new Array(i > 1 ? i - 1 : 0), a = 1; a < i; a++) {
|
|
12395
|
+
s[a - 1] = arguments[a];
|
|
12396
|
+
}
|
|
12397
|
+
if (Object.assign) return Object.assign.apply(Object, [e].concat(s));
|
|
12398
|
+
var o = function o() {
|
|
12399
|
+
var e = s[t];
|
|
12400
|
+
"object" == typeof e && null !== e && Object.keys(e).forEach(function (t) {
|
|
12401
|
+
n[t] = e[t];
|
|
12402
|
+
});
|
|
12403
|
+
};
|
|
12404
|
+
for (t = 0, r = s.length; t < r; t += 1) {
|
|
12405
|
+
o();
|
|
12406
|
+
}
|
|
12407
|
+
return e;
|
|
12408
|
+
}, e.getBrowserAlias = function (e) {
|
|
12409
|
+
return n.BROWSER_ALIASES_MAP[e];
|
|
12410
|
+
}, e.getBrowserTypeByAlias = function (e) {
|
|
12411
|
+
return n.BROWSER_MAP[e] || "";
|
|
12412
|
+
}, e;
|
|
12413
|
+
}();
|
|
12414
|
+
t.default = i, e.exports = t.default;
|
|
12415
|
+
},
|
|
12416
|
+
18: function _(e, t, r) {
|
|
12417
|
+
t.__esModule = !0, t.ENGINE_MAP = t.OS_MAP = t.PLATFORMS_MAP = t.BROWSER_MAP = t.BROWSER_ALIASES_MAP = void 0;
|
|
12418
|
+
t.BROWSER_ALIASES_MAP = {
|
|
12419
|
+
"Amazon Silk": "amazon_silk",
|
|
12420
|
+
"Android Browser": "android",
|
|
12421
|
+
Bada: "bada",
|
|
12422
|
+
BlackBerry: "blackberry",
|
|
12423
|
+
Chrome: "chrome",
|
|
12424
|
+
Chromium: "chromium",
|
|
12425
|
+
Electron: "electron",
|
|
12426
|
+
Epiphany: "epiphany",
|
|
12427
|
+
Firefox: "firefox",
|
|
12428
|
+
Focus: "focus",
|
|
12429
|
+
Generic: "generic",
|
|
12430
|
+
"Google Search": "google_search",
|
|
12431
|
+
Googlebot: "googlebot",
|
|
12432
|
+
"Internet Explorer": "ie",
|
|
12433
|
+
"K-Meleon": "k_meleon",
|
|
12434
|
+
Maxthon: "maxthon",
|
|
12435
|
+
"Microsoft Edge": "edge",
|
|
12436
|
+
"MZ Browser": "mz",
|
|
12437
|
+
"NAVER Whale Browser": "naver",
|
|
12438
|
+
Opera: "opera",
|
|
12439
|
+
"Opera Coast": "opera_coast",
|
|
12440
|
+
PhantomJS: "phantomjs",
|
|
12441
|
+
Puffin: "puffin",
|
|
12442
|
+
QupZilla: "qupzilla",
|
|
12443
|
+
QQ: "qq",
|
|
12444
|
+
QQLite: "qqlite",
|
|
12445
|
+
Safari: "safari",
|
|
12446
|
+
Sailfish: "sailfish",
|
|
12447
|
+
"Samsung Internet for Android": "samsung_internet",
|
|
12448
|
+
SeaMonkey: "seamonkey",
|
|
12449
|
+
Sleipnir: "sleipnir",
|
|
12450
|
+
Swing: "swing",
|
|
12451
|
+
Tizen: "tizen",
|
|
12452
|
+
"UC Browser": "uc",
|
|
12453
|
+
Vivaldi: "vivaldi",
|
|
12454
|
+
"WebOS Browser": "webos",
|
|
12455
|
+
WeChat: "wechat",
|
|
12456
|
+
"Yandex Browser": "yandex",
|
|
12457
|
+
Roku: "roku"
|
|
12458
|
+
};
|
|
12459
|
+
t.BROWSER_MAP = {
|
|
12460
|
+
amazon_silk: "Amazon Silk",
|
|
12461
|
+
android: "Android Browser",
|
|
12462
|
+
bada: "Bada",
|
|
12463
|
+
blackberry: "BlackBerry",
|
|
12464
|
+
chrome: "Chrome",
|
|
12465
|
+
chromium: "Chromium",
|
|
12466
|
+
electron: "Electron",
|
|
12467
|
+
epiphany: "Epiphany",
|
|
12468
|
+
firefox: "Firefox",
|
|
12469
|
+
focus: "Focus",
|
|
12470
|
+
generic: "Generic",
|
|
12471
|
+
googlebot: "Googlebot",
|
|
12472
|
+
google_search: "Google Search",
|
|
12473
|
+
ie: "Internet Explorer",
|
|
12474
|
+
k_meleon: "K-Meleon",
|
|
12475
|
+
maxthon: "Maxthon",
|
|
12476
|
+
edge: "Microsoft Edge",
|
|
12477
|
+
mz: "MZ Browser",
|
|
12478
|
+
naver: "NAVER Whale Browser",
|
|
12479
|
+
opera: "Opera",
|
|
12480
|
+
opera_coast: "Opera Coast",
|
|
12481
|
+
phantomjs: "PhantomJS",
|
|
12482
|
+
puffin: "Puffin",
|
|
12483
|
+
qupzilla: "QupZilla",
|
|
12484
|
+
qq: "QQ Browser",
|
|
12485
|
+
qqlite: "QQ Browser Lite",
|
|
12486
|
+
safari: "Safari",
|
|
12487
|
+
sailfish: "Sailfish",
|
|
12488
|
+
samsung_internet: "Samsung Internet for Android",
|
|
12489
|
+
seamonkey: "SeaMonkey",
|
|
12490
|
+
sleipnir: "Sleipnir",
|
|
12491
|
+
swing: "Swing",
|
|
12492
|
+
tizen: "Tizen",
|
|
12493
|
+
uc: "UC Browser",
|
|
12494
|
+
vivaldi: "Vivaldi",
|
|
12495
|
+
webos: "WebOS Browser",
|
|
12496
|
+
wechat: "WeChat",
|
|
12497
|
+
yandex: "Yandex Browser"
|
|
12498
|
+
};
|
|
12499
|
+
t.PLATFORMS_MAP = {
|
|
12500
|
+
tablet: "tablet",
|
|
12501
|
+
mobile: "mobile",
|
|
12502
|
+
desktop: "desktop",
|
|
12503
|
+
tv: "tv"
|
|
12504
|
+
};
|
|
12505
|
+
t.OS_MAP = {
|
|
12506
|
+
WindowsPhone: "Windows Phone",
|
|
12507
|
+
Windows: "Windows",
|
|
12508
|
+
MacOS: "macOS",
|
|
12509
|
+
iOS: "iOS",
|
|
12510
|
+
Android: "Android",
|
|
12511
|
+
WebOS: "WebOS",
|
|
12512
|
+
BlackBerry: "BlackBerry",
|
|
12513
|
+
Bada: "Bada",
|
|
12514
|
+
Tizen: "Tizen",
|
|
12515
|
+
Linux: "Linux",
|
|
12516
|
+
ChromeOS: "Chrome OS",
|
|
12517
|
+
PlayStation4: "PlayStation 4",
|
|
12518
|
+
Roku: "Roku"
|
|
12519
|
+
};
|
|
12520
|
+
t.ENGINE_MAP = {
|
|
12521
|
+
EdgeHTML: "EdgeHTML",
|
|
12522
|
+
Blink: "Blink",
|
|
12523
|
+
Trident: "Trident",
|
|
12524
|
+
Presto: "Presto",
|
|
12525
|
+
Gecko: "Gecko",
|
|
12526
|
+
WebKit: "WebKit"
|
|
12527
|
+
};
|
|
12528
|
+
},
|
|
12529
|
+
90: function _(e, t, r) {
|
|
12530
|
+
t.__esModule = !0, t.default = void 0;
|
|
12531
|
+
var n,
|
|
12532
|
+
i = (n = r(91)) && n.__esModule ? n : {
|
|
12533
|
+
default: n
|
|
12534
|
+
},
|
|
12535
|
+
s = r(18);
|
|
12536
|
+
function a(e, t) {
|
|
12537
|
+
for (var r = 0; r < t.length; r++) {
|
|
12538
|
+
var n = t[r];
|
|
12539
|
+
n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(e, n.key, n);
|
|
12540
|
+
}
|
|
12541
|
+
}
|
|
12542
|
+
var o = function () {
|
|
12543
|
+
function e() {}
|
|
12544
|
+
var t, r, n;
|
|
12545
|
+
return e.getParser = function (e, t) {
|
|
12546
|
+
if (void 0 === t && (t = !1), "string" != typeof e) throw new Error("UserAgent should be a string");
|
|
12547
|
+
return new i.default(e, t);
|
|
12548
|
+
}, e.parse = function (e) {
|
|
12549
|
+
return new i.default(e).getResult();
|
|
12550
|
+
}, t = e, n = [{
|
|
12551
|
+
key: "BROWSER_MAP",
|
|
12552
|
+
get: function get() {
|
|
12553
|
+
return s.BROWSER_MAP;
|
|
12554
|
+
}
|
|
12555
|
+
}, {
|
|
12556
|
+
key: "ENGINE_MAP",
|
|
12557
|
+
get: function get() {
|
|
12558
|
+
return s.ENGINE_MAP;
|
|
12559
|
+
}
|
|
12560
|
+
}, {
|
|
12561
|
+
key: "OS_MAP",
|
|
12562
|
+
get: function get() {
|
|
12563
|
+
return s.OS_MAP;
|
|
12564
|
+
}
|
|
12565
|
+
}, {
|
|
12566
|
+
key: "PLATFORMS_MAP",
|
|
12567
|
+
get: function get() {
|
|
12568
|
+
return s.PLATFORMS_MAP;
|
|
12569
|
+
}
|
|
12570
|
+
}], (r = null) && a(t.prototype, r), n && a(t, n), e;
|
|
12571
|
+
}();
|
|
12572
|
+
t.default = o, e.exports = t.default;
|
|
12573
|
+
},
|
|
12574
|
+
91: function _(e, t, r) {
|
|
12575
|
+
t.__esModule = !0, t.default = void 0;
|
|
12576
|
+
var n = u(r(92)),
|
|
12577
|
+
i = u(r(93)),
|
|
12578
|
+
s = u(r(94)),
|
|
12579
|
+
a = u(r(95)),
|
|
12580
|
+
o = u(r(17));
|
|
12581
|
+
function u(e) {
|
|
12582
|
+
return e && e.__esModule ? e : {
|
|
12583
|
+
default: e
|
|
12584
|
+
};
|
|
12585
|
+
}
|
|
12586
|
+
var d = function () {
|
|
12587
|
+
function e(e, t) {
|
|
12588
|
+
if (void 0 === t && (t = !1), null == e || "" === e) throw new Error("UserAgent parameter can't be empty");
|
|
12589
|
+
this._ua = e, this.parsedResult = {}, !0 !== t && this.parse();
|
|
12590
|
+
}
|
|
12591
|
+
var t = e.prototype;
|
|
12592
|
+
return t.getUA = function () {
|
|
12593
|
+
return this._ua;
|
|
12594
|
+
}, t.test = function (e) {
|
|
12595
|
+
return e.test(this._ua);
|
|
12596
|
+
}, t.parseBrowser = function () {
|
|
12597
|
+
var e = this;
|
|
12598
|
+
this.parsedResult.browser = {};
|
|
12599
|
+
var t = o.default.find(n.default, function (t) {
|
|
12600
|
+
if ("function" == typeof t.test) return t.test(e);
|
|
12601
|
+
if (t.test instanceof Array) return t.test.some(function (t) {
|
|
12602
|
+
return e.test(t);
|
|
12603
|
+
});
|
|
12604
|
+
throw new Error("Browser's test function is not valid");
|
|
12605
|
+
});
|
|
12606
|
+
return t && (this.parsedResult.browser = t.describe(this.getUA())), this.parsedResult.browser;
|
|
12607
|
+
}, t.getBrowser = function () {
|
|
12608
|
+
return this.parsedResult.browser ? this.parsedResult.browser : this.parseBrowser();
|
|
12609
|
+
}, t.getBrowserName = function (e) {
|
|
12610
|
+
return e ? String(this.getBrowser().name).toLowerCase() || "" : this.getBrowser().name || "";
|
|
12611
|
+
}, t.getBrowserVersion = function () {
|
|
12612
|
+
return this.getBrowser().version;
|
|
12613
|
+
}, t.getOS = function () {
|
|
12614
|
+
return this.parsedResult.os ? this.parsedResult.os : this.parseOS();
|
|
12615
|
+
}, t.parseOS = function () {
|
|
12616
|
+
var e = this;
|
|
12617
|
+
this.parsedResult.os = {};
|
|
12618
|
+
var t = o.default.find(i.default, function (t) {
|
|
12619
|
+
if ("function" == typeof t.test) return t.test(e);
|
|
12620
|
+
if (t.test instanceof Array) return t.test.some(function (t) {
|
|
12621
|
+
return e.test(t);
|
|
12622
|
+
});
|
|
12623
|
+
throw new Error("Browser's test function is not valid");
|
|
12624
|
+
});
|
|
12625
|
+
return t && (this.parsedResult.os = t.describe(this.getUA())), this.parsedResult.os;
|
|
12626
|
+
}, t.getOSName = function (e) {
|
|
12627
|
+
var t = this.getOS().name;
|
|
12628
|
+
return e ? String(t).toLowerCase() || "" : t || "";
|
|
12629
|
+
}, t.getOSVersion = function () {
|
|
12630
|
+
return this.getOS().version;
|
|
12631
|
+
}, t.getPlatform = function () {
|
|
12632
|
+
return this.parsedResult.platform ? this.parsedResult.platform : this.parsePlatform();
|
|
12633
|
+
}, t.getPlatformType = function (e) {
|
|
12634
|
+
void 0 === e && (e = !1);
|
|
12635
|
+
var t = this.getPlatform().type;
|
|
12636
|
+
return e ? String(t).toLowerCase() || "" : t || "";
|
|
12637
|
+
}, t.parsePlatform = function () {
|
|
12638
|
+
var e = this;
|
|
12639
|
+
this.parsedResult.platform = {};
|
|
12640
|
+
var t = o.default.find(s.default, function (t) {
|
|
12641
|
+
if ("function" == typeof t.test) return t.test(e);
|
|
12642
|
+
if (t.test instanceof Array) return t.test.some(function (t) {
|
|
12643
|
+
return e.test(t);
|
|
12644
|
+
});
|
|
12645
|
+
throw new Error("Browser's test function is not valid");
|
|
12646
|
+
});
|
|
12647
|
+
return t && (this.parsedResult.platform = t.describe(this.getUA())), this.parsedResult.platform;
|
|
12648
|
+
}, t.getEngine = function () {
|
|
12649
|
+
return this.parsedResult.engine ? this.parsedResult.engine : this.parseEngine();
|
|
12650
|
+
}, t.getEngineName = function (e) {
|
|
12651
|
+
return e ? String(this.getEngine().name).toLowerCase() || "" : this.getEngine().name || "";
|
|
12652
|
+
}, t.parseEngine = function () {
|
|
12653
|
+
var e = this;
|
|
12654
|
+
this.parsedResult.engine = {};
|
|
12655
|
+
var t = o.default.find(a.default, function (t) {
|
|
12656
|
+
if ("function" == typeof t.test) return t.test(e);
|
|
12657
|
+
if (t.test instanceof Array) return t.test.some(function (t) {
|
|
12658
|
+
return e.test(t);
|
|
12659
|
+
});
|
|
12660
|
+
throw new Error("Browser's test function is not valid");
|
|
12661
|
+
});
|
|
12662
|
+
return t && (this.parsedResult.engine = t.describe(this.getUA())), this.parsedResult.engine;
|
|
12663
|
+
}, t.parse = function () {
|
|
12664
|
+
return this.parseBrowser(), this.parseOS(), this.parsePlatform(), this.parseEngine(), this;
|
|
12665
|
+
}, t.getResult = function () {
|
|
12666
|
+
return o.default.assign({}, this.parsedResult);
|
|
12667
|
+
}, t.satisfies = function (e) {
|
|
12668
|
+
var t = this,
|
|
12669
|
+
r = {},
|
|
12670
|
+
n = 0,
|
|
12671
|
+
i = {},
|
|
12672
|
+
s = 0;
|
|
12673
|
+
if (Object.keys(e).forEach(function (t) {
|
|
12674
|
+
var a = e[t];
|
|
12675
|
+
"string" == typeof a ? (i[t] = a, s += 1) : "object" == typeof a && (r[t] = a, n += 1);
|
|
12676
|
+
}), n > 0) {
|
|
12677
|
+
var a = Object.keys(r),
|
|
12678
|
+
u = o.default.find(a, function (e) {
|
|
12679
|
+
return t.isOS(e);
|
|
12680
|
+
});
|
|
12681
|
+
if (u) {
|
|
12682
|
+
var d = this.satisfies(r[u]);
|
|
12683
|
+
if (void 0 !== d) return d;
|
|
12684
|
+
}
|
|
12685
|
+
var c = o.default.find(a, function (e) {
|
|
12686
|
+
return t.isPlatform(e);
|
|
12687
|
+
});
|
|
12688
|
+
if (c) {
|
|
12689
|
+
var f = this.satisfies(r[c]);
|
|
12690
|
+
if (void 0 !== f) return f;
|
|
12691
|
+
}
|
|
12692
|
+
}
|
|
12693
|
+
if (s > 0) {
|
|
12694
|
+
var l = Object.keys(i),
|
|
12695
|
+
h = o.default.find(l, function (e) {
|
|
12696
|
+
return t.isBrowser(e, !0);
|
|
12697
|
+
});
|
|
12698
|
+
if (void 0 !== h) return this.compareVersion(i[h]);
|
|
12699
|
+
}
|
|
12700
|
+
}, t.isBrowser = function (e, t) {
|
|
12701
|
+
void 0 === t && (t = !1);
|
|
12702
|
+
var r = this.getBrowserName().toLowerCase(),
|
|
12703
|
+
n = e.toLowerCase(),
|
|
12704
|
+
i = o.default.getBrowserTypeByAlias(n);
|
|
12705
|
+
return t && i && (n = i.toLowerCase()), n === r;
|
|
12706
|
+
}, t.compareVersion = function (e) {
|
|
12707
|
+
var t = [0],
|
|
12708
|
+
r = e,
|
|
12709
|
+
n = !1,
|
|
12710
|
+
i = this.getBrowserVersion();
|
|
12711
|
+
if ("string" == typeof i) return ">" === e[0] || "<" === e[0] ? (r = e.substr(1), "=" === e[1] ? (n = !0, r = e.substr(2)) : t = [], ">" === e[0] ? t.push(1) : t.push(-1)) : "=" === e[0] ? r = e.substr(1) : "~" === e[0] && (n = !0, r = e.substr(1)), t.indexOf(o.default.compareVersions(i, r, n)) > -1;
|
|
12712
|
+
}, t.isOS = function (e) {
|
|
12713
|
+
return this.getOSName(!0) === String(e).toLowerCase();
|
|
12714
|
+
}, t.isPlatform = function (e) {
|
|
12715
|
+
return this.getPlatformType(!0) === String(e).toLowerCase();
|
|
12716
|
+
}, t.isEngine = function (e) {
|
|
12717
|
+
return this.getEngineName(!0) === String(e).toLowerCase();
|
|
12718
|
+
}, t.is = function (e, t) {
|
|
12719
|
+
return void 0 === t && (t = !1), this.isBrowser(e, t) || this.isOS(e) || this.isPlatform(e);
|
|
12720
|
+
}, t.some = function (e) {
|
|
12721
|
+
var t = this;
|
|
12722
|
+
return void 0 === e && (e = []), e.some(function (e) {
|
|
12723
|
+
return t.is(e);
|
|
12724
|
+
});
|
|
12725
|
+
}, e;
|
|
12726
|
+
}();
|
|
12727
|
+
t.default = d, e.exports = t.default;
|
|
12728
|
+
},
|
|
12729
|
+
92: function _(e, t, r) {
|
|
12730
|
+
t.__esModule = !0, t.default = void 0;
|
|
12731
|
+
var n,
|
|
12732
|
+
i = (n = r(17)) && n.__esModule ? n : {
|
|
12733
|
+
default: n
|
|
12734
|
+
};
|
|
12735
|
+
var s = /version\/(\d+(\.?_?\d+)+)/i,
|
|
12736
|
+
a = [{
|
|
12737
|
+
test: [/googlebot/i],
|
|
12738
|
+
describe: function describe(e) {
|
|
12739
|
+
var t = {
|
|
12740
|
+
name: "Googlebot"
|
|
12741
|
+
},
|
|
12742
|
+
r = i.default.getFirstMatch(/googlebot\/(\d+(\.\d+))/i, e) || i.default.getFirstMatch(s, e);
|
|
12743
|
+
return r && (t.version = r), t;
|
|
12744
|
+
}
|
|
12745
|
+
}, {
|
|
12746
|
+
test: [/opera/i],
|
|
12747
|
+
describe: function describe(e) {
|
|
12748
|
+
var t = {
|
|
12749
|
+
name: "Opera"
|
|
12750
|
+
},
|
|
12751
|
+
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
12752
|
+
return r && (t.version = r), t;
|
|
12753
|
+
}
|
|
12754
|
+
}, {
|
|
12755
|
+
test: [/opr\/|opios/i],
|
|
12756
|
+
describe: function describe(e) {
|
|
12757
|
+
var t = {
|
|
12758
|
+
name: "Opera"
|
|
12759
|
+
},
|
|
12760
|
+
r = i.default.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i, e) || i.default.getFirstMatch(s, e);
|
|
12761
|
+
return r && (t.version = r), t;
|
|
12762
|
+
}
|
|
12763
|
+
}, {
|
|
12764
|
+
test: [/SamsungBrowser/i],
|
|
12765
|
+
describe: function describe(e) {
|
|
12766
|
+
var t = {
|
|
12767
|
+
name: "Samsung Internet for Android"
|
|
12768
|
+
},
|
|
12769
|
+
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
12770
|
+
return r && (t.version = r), t;
|
|
12771
|
+
}
|
|
12772
|
+
}, {
|
|
12773
|
+
test: [/Whale/i],
|
|
12774
|
+
describe: function describe(e) {
|
|
12775
|
+
var t = {
|
|
12776
|
+
name: "NAVER Whale Browser"
|
|
12777
|
+
},
|
|
12778
|
+
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i, e);
|
|
12779
|
+
return r && (t.version = r), t;
|
|
12780
|
+
}
|
|
12781
|
+
}, {
|
|
12782
|
+
test: [/MZBrowser/i],
|
|
12783
|
+
describe: function describe(e) {
|
|
12784
|
+
var t = {
|
|
12785
|
+
name: "MZ Browser"
|
|
12786
|
+
},
|
|
12787
|
+
r = i.default.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
12788
|
+
return r && (t.version = r), t;
|
|
12789
|
+
}
|
|
12790
|
+
}, {
|
|
12791
|
+
test: [/focus/i],
|
|
12792
|
+
describe: function describe(e) {
|
|
12793
|
+
var t = {
|
|
12794
|
+
name: "Focus"
|
|
12795
|
+
},
|
|
12796
|
+
r = i.default.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
12797
|
+
return r && (t.version = r), t;
|
|
12798
|
+
}
|
|
12799
|
+
}, {
|
|
12800
|
+
test: [/swing/i],
|
|
12801
|
+
describe: function describe(e) {
|
|
12802
|
+
var t = {
|
|
12803
|
+
name: "Swing"
|
|
12804
|
+
},
|
|
12805
|
+
r = i.default.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
12806
|
+
return r && (t.version = r), t;
|
|
12807
|
+
}
|
|
12808
|
+
}, {
|
|
12809
|
+
test: [/coast/i],
|
|
12810
|
+
describe: function describe(e) {
|
|
12811
|
+
var t = {
|
|
12812
|
+
name: "Opera Coast"
|
|
12813
|
+
},
|
|
12814
|
+
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
12815
|
+
return r && (t.version = r), t;
|
|
12816
|
+
}
|
|
12817
|
+
}, {
|
|
12818
|
+
test: [/opt\/\d+(?:.?_?\d+)+/i],
|
|
12819
|
+
describe: function describe(e) {
|
|
12820
|
+
var t = {
|
|
12821
|
+
name: "Opera Touch"
|
|
12822
|
+
},
|
|
12823
|
+
r = i.default.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
12824
|
+
return r && (t.version = r), t;
|
|
12825
|
+
}
|
|
12826
|
+
}, {
|
|
12827
|
+
test: [/yabrowser/i],
|
|
12828
|
+
describe: function describe(e) {
|
|
12829
|
+
var t = {
|
|
12830
|
+
name: "Yandex Browser"
|
|
12831
|
+
},
|
|
12832
|
+
r = i.default.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
12833
|
+
return r && (t.version = r), t;
|
|
12834
|
+
}
|
|
12835
|
+
}, {
|
|
12836
|
+
test: [/ucbrowser/i],
|
|
12837
|
+
describe: function describe(e) {
|
|
12838
|
+
var t = {
|
|
12839
|
+
name: "UC Browser"
|
|
12840
|
+
},
|
|
12841
|
+
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
12842
|
+
return r && (t.version = r), t;
|
|
12843
|
+
}
|
|
12844
|
+
}, {
|
|
12845
|
+
test: [/Maxthon|mxios/i],
|
|
12846
|
+
describe: function describe(e) {
|
|
12847
|
+
var t = {
|
|
12848
|
+
name: "Maxthon"
|
|
12849
|
+
},
|
|
12850
|
+
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
12851
|
+
return r && (t.version = r), t;
|
|
12852
|
+
}
|
|
12853
|
+
}, {
|
|
12854
|
+
test: [/epiphany/i],
|
|
12855
|
+
describe: function describe(e) {
|
|
12856
|
+
var t = {
|
|
12857
|
+
name: "Epiphany"
|
|
12858
|
+
},
|
|
12859
|
+
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
12860
|
+
return r && (t.version = r), t;
|
|
12861
|
+
}
|
|
12862
|
+
}, {
|
|
12863
|
+
test: [/puffin/i],
|
|
12864
|
+
describe: function describe(e) {
|
|
12865
|
+
var t = {
|
|
12866
|
+
name: "Puffin"
|
|
12867
|
+
},
|
|
12868
|
+
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
12869
|
+
return r && (t.version = r), t;
|
|
12870
|
+
}
|
|
12871
|
+
}, {
|
|
12872
|
+
test: [/sleipnir/i],
|
|
12873
|
+
describe: function describe(e) {
|
|
12874
|
+
var t = {
|
|
12875
|
+
name: "Sleipnir"
|
|
12876
|
+
},
|
|
12877
|
+
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
12878
|
+
return r && (t.version = r), t;
|
|
12879
|
+
}
|
|
12880
|
+
}, {
|
|
12881
|
+
test: [/k-meleon/i],
|
|
12882
|
+
describe: function describe(e) {
|
|
12883
|
+
var t = {
|
|
12884
|
+
name: "K-Meleon"
|
|
12885
|
+
},
|
|
12886
|
+
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
12887
|
+
return r && (t.version = r), t;
|
|
12888
|
+
}
|
|
12889
|
+
}, {
|
|
12890
|
+
test: [/micromessenger/i],
|
|
12891
|
+
describe: function describe(e) {
|
|
12892
|
+
var t = {
|
|
12893
|
+
name: "WeChat"
|
|
12894
|
+
},
|
|
12895
|
+
r = i.default.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
12896
|
+
return r && (t.version = r), t;
|
|
12897
|
+
}
|
|
12898
|
+
}, {
|
|
12899
|
+
test: [/qqbrowser/i],
|
|
12900
|
+
describe: function describe(e) {
|
|
12901
|
+
var t = {
|
|
12902
|
+
name: /qqbrowserlite/i.test(e) ? "QQ Browser Lite" : "QQ Browser"
|
|
12903
|
+
},
|
|
12904
|
+
r = i.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
12905
|
+
return r && (t.version = r), t;
|
|
12906
|
+
}
|
|
12907
|
+
}, {
|
|
12908
|
+
test: [/msie|trident/i],
|
|
12909
|
+
describe: function describe(e) {
|
|
12910
|
+
var t = {
|
|
12911
|
+
name: "Internet Explorer"
|
|
12912
|
+
},
|
|
12913
|
+
r = i.default.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i, e);
|
|
12914
|
+
return r && (t.version = r), t;
|
|
12915
|
+
}
|
|
12916
|
+
}, {
|
|
12917
|
+
test: [/\sedg\//i],
|
|
12918
|
+
describe: function describe(e) {
|
|
12919
|
+
var t = {
|
|
12920
|
+
name: "Microsoft Edge"
|
|
12921
|
+
},
|
|
12922
|
+
r = i.default.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i, e);
|
|
12923
|
+
return r && (t.version = r), t;
|
|
12924
|
+
}
|
|
12925
|
+
}, {
|
|
12926
|
+
test: [/edg([ea]|ios)/i],
|
|
12927
|
+
describe: function describe(e) {
|
|
12928
|
+
var t = {
|
|
12929
|
+
name: "Microsoft Edge"
|
|
12930
|
+
},
|
|
12931
|
+
r = i.default.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i, e);
|
|
12932
|
+
return r && (t.version = r), t;
|
|
12933
|
+
}
|
|
12934
|
+
}, {
|
|
12935
|
+
test: [/vivaldi/i],
|
|
12936
|
+
describe: function describe(e) {
|
|
12937
|
+
var t = {
|
|
12938
|
+
name: "Vivaldi"
|
|
12939
|
+
},
|
|
12940
|
+
r = i.default.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i, e);
|
|
12941
|
+
return r && (t.version = r), t;
|
|
12942
|
+
}
|
|
12943
|
+
}, {
|
|
12944
|
+
test: [/seamonkey/i],
|
|
12945
|
+
describe: function describe(e) {
|
|
12946
|
+
var t = {
|
|
12947
|
+
name: "SeaMonkey"
|
|
12948
|
+
},
|
|
12949
|
+
r = i.default.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i, e);
|
|
12950
|
+
return r && (t.version = r), t;
|
|
12951
|
+
}
|
|
12952
|
+
}, {
|
|
12953
|
+
test: [/sailfish/i],
|
|
12954
|
+
describe: function describe(e) {
|
|
12955
|
+
var t = {
|
|
12956
|
+
name: "Sailfish"
|
|
12957
|
+
},
|
|
12958
|
+
r = i.default.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i, e);
|
|
12959
|
+
return r && (t.version = r), t;
|
|
12960
|
+
}
|
|
12961
|
+
}, {
|
|
12962
|
+
test: [/silk/i],
|
|
12963
|
+
describe: function describe(e) {
|
|
12964
|
+
var t = {
|
|
12965
|
+
name: "Amazon Silk"
|
|
12966
|
+
},
|
|
12967
|
+
r = i.default.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i, e);
|
|
12968
|
+
return r && (t.version = r), t;
|
|
12969
|
+
}
|
|
12970
|
+
}, {
|
|
12971
|
+
test: [/phantom/i],
|
|
12972
|
+
describe: function describe(e) {
|
|
12973
|
+
var t = {
|
|
12974
|
+
name: "PhantomJS"
|
|
12975
|
+
},
|
|
12976
|
+
r = i.default.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i, e);
|
|
12977
|
+
return r && (t.version = r), t;
|
|
12978
|
+
}
|
|
12979
|
+
}, {
|
|
12980
|
+
test: [/slimerjs/i],
|
|
12981
|
+
describe: function describe(e) {
|
|
12982
|
+
var t = {
|
|
12983
|
+
name: "SlimerJS"
|
|
12984
|
+
},
|
|
12985
|
+
r = i.default.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i, e);
|
|
12986
|
+
return r && (t.version = r), t;
|
|
12987
|
+
}
|
|
12988
|
+
}, {
|
|
12989
|
+
test: [/blackberry|\bbb\d+/i, /rim\stablet/i],
|
|
12990
|
+
describe: function describe(e) {
|
|
12991
|
+
var t = {
|
|
12992
|
+
name: "BlackBerry"
|
|
12993
|
+
},
|
|
12994
|
+
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i, e);
|
|
12995
|
+
return r && (t.version = r), t;
|
|
12996
|
+
}
|
|
12997
|
+
}, {
|
|
12998
|
+
test: [/(web|hpw)[o0]s/i],
|
|
12999
|
+
describe: function describe(e) {
|
|
13000
|
+
var t = {
|
|
13001
|
+
name: "WebOS Browser"
|
|
13002
|
+
},
|
|
13003
|
+
r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i, e);
|
|
13004
|
+
return r && (t.version = r), t;
|
|
13005
|
+
}
|
|
13006
|
+
}, {
|
|
13007
|
+
test: [/bada/i],
|
|
13008
|
+
describe: function describe(e) {
|
|
13009
|
+
var t = {
|
|
13010
|
+
name: "Bada"
|
|
13011
|
+
},
|
|
13012
|
+
r = i.default.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i, e);
|
|
13013
|
+
return r && (t.version = r), t;
|
|
13014
|
+
}
|
|
13015
|
+
}, {
|
|
13016
|
+
test: [/tizen/i],
|
|
13017
|
+
describe: function describe(e) {
|
|
13018
|
+
var t = {
|
|
13019
|
+
name: "Tizen"
|
|
13020
|
+
},
|
|
13021
|
+
r = i.default.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
13022
|
+
return r && (t.version = r), t;
|
|
13023
|
+
}
|
|
13024
|
+
}, {
|
|
13025
|
+
test: [/qupzilla/i],
|
|
13026
|
+
describe: function describe(e) {
|
|
13027
|
+
var t = {
|
|
13028
|
+
name: "QupZilla"
|
|
13029
|
+
},
|
|
13030
|
+
r = i.default.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
13031
|
+
return r && (t.version = r), t;
|
|
13032
|
+
}
|
|
13033
|
+
}, {
|
|
13034
|
+
test: [/firefox|iceweasel|fxios/i],
|
|
13035
|
+
describe: function describe(e) {
|
|
13036
|
+
var t = {
|
|
13037
|
+
name: "Firefox"
|
|
13038
|
+
},
|
|
13039
|
+
r = i.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
13040
|
+
return r && (t.version = r), t;
|
|
13041
|
+
}
|
|
13042
|
+
}, {
|
|
13043
|
+
test: [/electron/i],
|
|
13044
|
+
describe: function describe(e) {
|
|
13045
|
+
var t = {
|
|
13046
|
+
name: "Electron"
|
|
13047
|
+
},
|
|
13048
|
+
r = i.default.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i, e);
|
|
13049
|
+
return r && (t.version = r), t;
|
|
13050
|
+
}
|
|
13051
|
+
}, {
|
|
13052
|
+
test: [/MiuiBrowser/i],
|
|
13053
|
+
describe: function describe(e) {
|
|
13054
|
+
var t = {
|
|
13055
|
+
name: "Miui"
|
|
13056
|
+
},
|
|
13057
|
+
r = i.default.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i, e);
|
|
13058
|
+
return r && (t.version = r), t;
|
|
13059
|
+
}
|
|
13060
|
+
}, {
|
|
13061
|
+
test: [/chromium/i],
|
|
13062
|
+
describe: function describe(e) {
|
|
13063
|
+
var t = {
|
|
13064
|
+
name: "Chromium"
|
|
13065
|
+
},
|
|
13066
|
+
r = i.default.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i, e) || i.default.getFirstMatch(s, e);
|
|
13067
|
+
return r && (t.version = r), t;
|
|
13068
|
+
}
|
|
13069
|
+
}, {
|
|
13070
|
+
test: [/chrome|crios|crmo/i],
|
|
13071
|
+
describe: function describe(e) {
|
|
13072
|
+
var t = {
|
|
13073
|
+
name: "Chrome"
|
|
13074
|
+
},
|
|
13075
|
+
r = i.default.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i, e);
|
|
13076
|
+
return r && (t.version = r), t;
|
|
13077
|
+
}
|
|
13078
|
+
}, {
|
|
13079
|
+
test: [/GSA/i],
|
|
13080
|
+
describe: function describe(e) {
|
|
13081
|
+
var t = {
|
|
13082
|
+
name: "Google Search"
|
|
13083
|
+
},
|
|
13084
|
+
r = i.default.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i, e);
|
|
13085
|
+
return r && (t.version = r), t;
|
|
13086
|
+
}
|
|
13087
|
+
}, {
|
|
13088
|
+
test: function test(e) {
|
|
13089
|
+
var t = !e.test(/like android/i),
|
|
13090
|
+
r = e.test(/android/i);
|
|
13091
|
+
return t && r;
|
|
13092
|
+
},
|
|
13093
|
+
describe: function describe(e) {
|
|
13094
|
+
var t = {
|
|
13095
|
+
name: "Android Browser"
|
|
13096
|
+
},
|
|
13097
|
+
r = i.default.getFirstMatch(s, e);
|
|
13098
|
+
return r && (t.version = r), t;
|
|
13099
|
+
}
|
|
13100
|
+
}, {
|
|
13101
|
+
test: [/playstation 4/i],
|
|
13102
|
+
describe: function describe(e) {
|
|
13103
|
+
var t = {
|
|
13104
|
+
name: "PlayStation 4"
|
|
13105
|
+
},
|
|
13106
|
+
r = i.default.getFirstMatch(s, e);
|
|
13107
|
+
return r && (t.version = r), t;
|
|
13108
|
+
}
|
|
13109
|
+
}, {
|
|
13110
|
+
test: [/safari|applewebkit/i],
|
|
13111
|
+
describe: function describe(e) {
|
|
13112
|
+
var t = {
|
|
13113
|
+
name: "Safari"
|
|
13114
|
+
},
|
|
13115
|
+
r = i.default.getFirstMatch(s, e);
|
|
13116
|
+
return r && (t.version = r), t;
|
|
13117
|
+
}
|
|
13118
|
+
}, {
|
|
13119
|
+
test: [/.*/i],
|
|
13120
|
+
describe: function describe(e) {
|
|
13121
|
+
var t = -1 !== e.search("\\(") ? /^(.*)\/(.*)[ \t]\((.*)/ : /^(.*)\/(.*) /;
|
|
13122
|
+
return {
|
|
13123
|
+
name: i.default.getFirstMatch(t, e),
|
|
13124
|
+
version: i.default.getSecondMatch(t, e)
|
|
13125
|
+
};
|
|
13126
|
+
}
|
|
13127
|
+
}];
|
|
13128
|
+
t.default = a, e.exports = t.default;
|
|
13129
|
+
},
|
|
13130
|
+
93: function _(e, t, r) {
|
|
13131
|
+
t.__esModule = !0, t.default = void 0;
|
|
13132
|
+
var n,
|
|
13133
|
+
i = (n = r(17)) && n.__esModule ? n : {
|
|
13134
|
+
default: n
|
|
13135
|
+
},
|
|
13136
|
+
s = r(18);
|
|
13137
|
+
var a = [{
|
|
13138
|
+
test: [/Roku\/DVP/],
|
|
13139
|
+
describe: function describe(e) {
|
|
13140
|
+
var t = i.default.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i, e);
|
|
13141
|
+
return {
|
|
13142
|
+
name: s.OS_MAP.Roku,
|
|
13143
|
+
version: t
|
|
13144
|
+
};
|
|
13145
|
+
}
|
|
13146
|
+
}, {
|
|
13147
|
+
test: [/windows phone/i],
|
|
13148
|
+
describe: function describe(e) {
|
|
13149
|
+
var t = i.default.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i, e);
|
|
13150
|
+
return {
|
|
13151
|
+
name: s.OS_MAP.WindowsPhone,
|
|
13152
|
+
version: t
|
|
13153
|
+
};
|
|
13154
|
+
}
|
|
13155
|
+
}, {
|
|
13156
|
+
test: [/windows /i],
|
|
13157
|
+
describe: function describe(e) {
|
|
13158
|
+
var t = i.default.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i, e),
|
|
13159
|
+
r = i.default.getWindowsVersionName(t);
|
|
13160
|
+
return {
|
|
13161
|
+
name: s.OS_MAP.Windows,
|
|
13162
|
+
version: t,
|
|
13163
|
+
versionName: r
|
|
13164
|
+
};
|
|
13165
|
+
}
|
|
13166
|
+
}, {
|
|
13167
|
+
test: [/Macintosh(.*?) FxiOS(.*?)\//],
|
|
13168
|
+
describe: function describe(e) {
|
|
13169
|
+
var t = {
|
|
13170
|
+
name: s.OS_MAP.iOS
|
|
13171
|
+
},
|
|
13172
|
+
r = i.default.getSecondMatch(/(Version\/)(\d[\d.]+)/, e);
|
|
13173
|
+
return r && (t.version = r), t;
|
|
13174
|
+
}
|
|
13175
|
+
}, {
|
|
13176
|
+
test: [/macintosh/i],
|
|
13177
|
+
describe: function describe(e) {
|
|
13178
|
+
var t = i.default.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i, e).replace(/[_\s]/g, "."),
|
|
13179
|
+
r = i.default.getMacOSVersionName(t),
|
|
13180
|
+
n = {
|
|
13181
|
+
name: s.OS_MAP.MacOS,
|
|
13182
|
+
version: t
|
|
13183
|
+
};
|
|
13184
|
+
return r && (n.versionName = r), n;
|
|
13185
|
+
}
|
|
13186
|
+
}, {
|
|
13187
|
+
test: [/(ipod|iphone|ipad)/i],
|
|
13188
|
+
describe: function describe(e) {
|
|
13189
|
+
var t = i.default.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i, e).replace(/[_\s]/g, ".");
|
|
13190
|
+
return {
|
|
13191
|
+
name: s.OS_MAP.iOS,
|
|
13192
|
+
version: t
|
|
13193
|
+
};
|
|
13194
|
+
}
|
|
13195
|
+
}, {
|
|
13196
|
+
test: function test(e) {
|
|
13197
|
+
var t = !e.test(/like android/i),
|
|
13198
|
+
r = e.test(/android/i);
|
|
13199
|
+
return t && r;
|
|
13200
|
+
},
|
|
13201
|
+
describe: function describe(e) {
|
|
13202
|
+
var t = i.default.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i, e),
|
|
13203
|
+
r = i.default.getAndroidVersionName(t),
|
|
13204
|
+
n = {
|
|
13205
|
+
name: s.OS_MAP.Android,
|
|
13206
|
+
version: t
|
|
13207
|
+
};
|
|
13208
|
+
return r && (n.versionName = r), n;
|
|
13209
|
+
}
|
|
13210
|
+
}, {
|
|
13211
|
+
test: [/(web|hpw)[o0]s/i],
|
|
13212
|
+
describe: function describe(e) {
|
|
13213
|
+
var t = i.default.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i, e),
|
|
13214
|
+
r = {
|
|
13215
|
+
name: s.OS_MAP.WebOS
|
|
13216
|
+
};
|
|
13217
|
+
return t && t.length && (r.version = t), r;
|
|
13218
|
+
}
|
|
13219
|
+
}, {
|
|
13220
|
+
test: [/blackberry|\bbb\d+/i, /rim\stablet/i],
|
|
13221
|
+
describe: function describe(e) {
|
|
13222
|
+
var t = i.default.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i, e) || i.default.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i, e) || i.default.getFirstMatch(/\bbb(\d+)/i, e);
|
|
13223
|
+
return {
|
|
13224
|
+
name: s.OS_MAP.BlackBerry,
|
|
13225
|
+
version: t
|
|
13226
|
+
};
|
|
13227
|
+
}
|
|
13228
|
+
}, {
|
|
13229
|
+
test: [/bada/i],
|
|
13230
|
+
describe: function describe(e) {
|
|
13231
|
+
var t = i.default.getFirstMatch(/bada\/(\d+(\.\d+)*)/i, e);
|
|
13232
|
+
return {
|
|
13233
|
+
name: s.OS_MAP.Bada,
|
|
13234
|
+
version: t
|
|
13235
|
+
};
|
|
13236
|
+
}
|
|
13237
|
+
}, {
|
|
13238
|
+
test: [/tizen/i],
|
|
13239
|
+
describe: function describe(e) {
|
|
13240
|
+
var t = i.default.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i, e);
|
|
13241
|
+
return {
|
|
13242
|
+
name: s.OS_MAP.Tizen,
|
|
13243
|
+
version: t
|
|
13244
|
+
};
|
|
13245
|
+
}
|
|
13246
|
+
}, {
|
|
13247
|
+
test: [/linux/i],
|
|
13248
|
+
describe: function describe() {
|
|
13249
|
+
return {
|
|
13250
|
+
name: s.OS_MAP.Linux
|
|
13251
|
+
};
|
|
13252
|
+
}
|
|
13253
|
+
}, {
|
|
13254
|
+
test: [/CrOS/],
|
|
13255
|
+
describe: function describe() {
|
|
13256
|
+
return {
|
|
13257
|
+
name: s.OS_MAP.ChromeOS
|
|
13258
|
+
};
|
|
13259
|
+
}
|
|
13260
|
+
}, {
|
|
13261
|
+
test: [/PlayStation 4/],
|
|
13262
|
+
describe: function describe(e) {
|
|
13263
|
+
var t = i.default.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i, e);
|
|
13264
|
+
return {
|
|
13265
|
+
name: s.OS_MAP.PlayStation4,
|
|
13266
|
+
version: t
|
|
13267
|
+
};
|
|
13268
|
+
}
|
|
13269
|
+
}];
|
|
13270
|
+
t.default = a, e.exports = t.default;
|
|
13271
|
+
},
|
|
13272
|
+
94: function _(e, t, r) {
|
|
13273
|
+
t.__esModule = !0, t.default = void 0;
|
|
13274
|
+
var n,
|
|
13275
|
+
i = (n = r(17)) && n.__esModule ? n : {
|
|
13276
|
+
default: n
|
|
13277
|
+
},
|
|
13278
|
+
s = r(18);
|
|
13279
|
+
var a = [{
|
|
13280
|
+
test: [/googlebot/i],
|
|
13281
|
+
describe: function describe() {
|
|
13282
|
+
return {
|
|
13283
|
+
type: "bot",
|
|
13284
|
+
vendor: "Google"
|
|
13285
|
+
};
|
|
13286
|
+
}
|
|
13287
|
+
}, {
|
|
13288
|
+
test: [/huawei/i],
|
|
13289
|
+
describe: function describe(e) {
|
|
13290
|
+
var t = i.default.getFirstMatch(/(can-l01)/i, e) && "Nova",
|
|
13291
|
+
r = {
|
|
13292
|
+
type: s.PLATFORMS_MAP.mobile,
|
|
13293
|
+
vendor: "Huawei"
|
|
13294
|
+
};
|
|
13295
|
+
return t && (r.model = t), r;
|
|
13296
|
+
}
|
|
13297
|
+
}, {
|
|
13298
|
+
test: [/nexus\s*(?:7|8|9|10).*/i],
|
|
13299
|
+
describe: function describe() {
|
|
13300
|
+
return {
|
|
13301
|
+
type: s.PLATFORMS_MAP.tablet,
|
|
13302
|
+
vendor: "Nexus"
|
|
13303
|
+
};
|
|
13105
13304
|
}
|
|
13106
|
-
|
|
13107
|
-
|
|
13305
|
+
}, {
|
|
13306
|
+
test: [/ipad/i],
|
|
13307
|
+
describe: function describe() {
|
|
13308
|
+
return {
|
|
13309
|
+
type: s.PLATFORMS_MAP.tablet,
|
|
13310
|
+
vendor: "Apple",
|
|
13311
|
+
model: "iPad"
|
|
13312
|
+
};
|
|
13313
|
+
}
|
|
13314
|
+
}, {
|
|
13315
|
+
test: [/Macintosh(.*?) FxiOS(.*?)\//],
|
|
13316
|
+
describe: function describe() {
|
|
13317
|
+
return {
|
|
13318
|
+
type: s.PLATFORMS_MAP.tablet,
|
|
13319
|
+
vendor: "Apple",
|
|
13320
|
+
model: "iPad"
|
|
13321
|
+
};
|
|
13322
|
+
}
|
|
13323
|
+
}, {
|
|
13324
|
+
test: [/kftt build/i],
|
|
13325
|
+
describe: function describe() {
|
|
13326
|
+
return {
|
|
13327
|
+
type: s.PLATFORMS_MAP.tablet,
|
|
13328
|
+
vendor: "Amazon",
|
|
13329
|
+
model: "Kindle Fire HD 7"
|
|
13330
|
+
};
|
|
13331
|
+
}
|
|
13332
|
+
}, {
|
|
13333
|
+
test: [/silk/i],
|
|
13334
|
+
describe: function describe() {
|
|
13335
|
+
return {
|
|
13336
|
+
type: s.PLATFORMS_MAP.tablet,
|
|
13337
|
+
vendor: "Amazon"
|
|
13338
|
+
};
|
|
13339
|
+
}
|
|
13340
|
+
}, {
|
|
13341
|
+
test: [/tablet(?! pc)/i],
|
|
13342
|
+
describe: function describe() {
|
|
13343
|
+
return {
|
|
13344
|
+
type: s.PLATFORMS_MAP.tablet
|
|
13345
|
+
};
|
|
13346
|
+
}
|
|
13347
|
+
}, {
|
|
13348
|
+
test: function test(e) {
|
|
13349
|
+
var t = e.test(/ipod|iphone/i),
|
|
13350
|
+
r = e.test(/like (ipod|iphone)/i);
|
|
13351
|
+
return t && !r;
|
|
13352
|
+
},
|
|
13353
|
+
describe: function describe(e) {
|
|
13354
|
+
var t = i.default.getFirstMatch(/(ipod|iphone)/i, e);
|
|
13355
|
+
return {
|
|
13356
|
+
type: s.PLATFORMS_MAP.mobile,
|
|
13357
|
+
vendor: "Apple",
|
|
13358
|
+
model: t
|
|
13359
|
+
};
|
|
13360
|
+
}
|
|
13361
|
+
}, {
|
|
13362
|
+
test: [/nexus\s*[0-6].*/i, /galaxy nexus/i],
|
|
13363
|
+
describe: function describe() {
|
|
13364
|
+
return {
|
|
13365
|
+
type: s.PLATFORMS_MAP.mobile,
|
|
13366
|
+
vendor: "Nexus"
|
|
13367
|
+
};
|
|
13368
|
+
}
|
|
13369
|
+
}, {
|
|
13370
|
+
test: [/[^-]mobi/i],
|
|
13371
|
+
describe: function describe() {
|
|
13372
|
+
return {
|
|
13373
|
+
type: s.PLATFORMS_MAP.mobile
|
|
13374
|
+
};
|
|
13375
|
+
}
|
|
13376
|
+
}, {
|
|
13377
|
+
test: function test(e) {
|
|
13378
|
+
return "blackberry" === e.getBrowserName(!0);
|
|
13379
|
+
},
|
|
13380
|
+
describe: function describe() {
|
|
13381
|
+
return {
|
|
13382
|
+
type: s.PLATFORMS_MAP.mobile,
|
|
13383
|
+
vendor: "BlackBerry"
|
|
13384
|
+
};
|
|
13385
|
+
}
|
|
13386
|
+
}, {
|
|
13387
|
+
test: function test(e) {
|
|
13388
|
+
return "bada" === e.getBrowserName(!0);
|
|
13389
|
+
},
|
|
13390
|
+
describe: function describe() {
|
|
13391
|
+
return {
|
|
13392
|
+
type: s.PLATFORMS_MAP.mobile
|
|
13393
|
+
};
|
|
13394
|
+
}
|
|
13395
|
+
}, {
|
|
13396
|
+
test: function test(e) {
|
|
13397
|
+
return "windows phone" === e.getBrowserName();
|
|
13398
|
+
},
|
|
13399
|
+
describe: function describe() {
|
|
13400
|
+
return {
|
|
13401
|
+
type: s.PLATFORMS_MAP.mobile,
|
|
13402
|
+
vendor: "Microsoft"
|
|
13403
|
+
};
|
|
13404
|
+
}
|
|
13405
|
+
}, {
|
|
13406
|
+
test: function test(e) {
|
|
13407
|
+
var t = Number(String(e.getOSVersion()).split(".")[0]);
|
|
13408
|
+
return "android" === e.getOSName(!0) && t >= 3;
|
|
13409
|
+
},
|
|
13410
|
+
describe: function describe() {
|
|
13411
|
+
return {
|
|
13412
|
+
type: s.PLATFORMS_MAP.tablet
|
|
13413
|
+
};
|
|
13414
|
+
}
|
|
13415
|
+
}, {
|
|
13416
|
+
test: function test(e) {
|
|
13417
|
+
return "android" === e.getOSName(!0);
|
|
13418
|
+
},
|
|
13419
|
+
describe: function describe() {
|
|
13420
|
+
return {
|
|
13421
|
+
type: s.PLATFORMS_MAP.mobile
|
|
13422
|
+
};
|
|
13423
|
+
}
|
|
13424
|
+
}, {
|
|
13425
|
+
test: function test(e) {
|
|
13426
|
+
return "macos" === e.getOSName(!0);
|
|
13427
|
+
},
|
|
13428
|
+
describe: function describe() {
|
|
13429
|
+
return {
|
|
13430
|
+
type: s.PLATFORMS_MAP.desktop,
|
|
13431
|
+
vendor: "Apple"
|
|
13432
|
+
};
|
|
13433
|
+
}
|
|
13434
|
+
}, {
|
|
13435
|
+
test: function test(e) {
|
|
13436
|
+
return "windows" === e.getOSName(!0);
|
|
13437
|
+
},
|
|
13438
|
+
describe: function describe() {
|
|
13439
|
+
return {
|
|
13440
|
+
type: s.PLATFORMS_MAP.desktop
|
|
13441
|
+
};
|
|
13442
|
+
}
|
|
13443
|
+
}, {
|
|
13444
|
+
test: function test(e) {
|
|
13445
|
+
return "linux" === e.getOSName(!0);
|
|
13446
|
+
},
|
|
13447
|
+
describe: function describe() {
|
|
13448
|
+
return {
|
|
13449
|
+
type: s.PLATFORMS_MAP.desktop
|
|
13450
|
+
};
|
|
13451
|
+
}
|
|
13452
|
+
}, {
|
|
13453
|
+
test: function test(e) {
|
|
13454
|
+
return "playstation 4" === e.getOSName(!0);
|
|
13455
|
+
},
|
|
13456
|
+
describe: function describe() {
|
|
13457
|
+
return {
|
|
13458
|
+
type: s.PLATFORMS_MAP.tv
|
|
13459
|
+
};
|
|
13460
|
+
}
|
|
13461
|
+
}, {
|
|
13462
|
+
test: function test(e) {
|
|
13463
|
+
return "roku" === e.getOSName(!0);
|
|
13464
|
+
},
|
|
13465
|
+
describe: function describe() {
|
|
13466
|
+
return {
|
|
13467
|
+
type: s.PLATFORMS_MAP.tv
|
|
13468
|
+
};
|
|
13469
|
+
}
|
|
13470
|
+
}];
|
|
13471
|
+
t.default = a, e.exports = t.default;
|
|
13472
|
+
},
|
|
13473
|
+
95: function _(e, t, r) {
|
|
13474
|
+
t.__esModule = !0, t.default = void 0;
|
|
13475
|
+
var n,
|
|
13476
|
+
i = (n = r(17)) && n.__esModule ? n : {
|
|
13477
|
+
default: n
|
|
13478
|
+
},
|
|
13479
|
+
s = r(18);
|
|
13480
|
+
var a = [{
|
|
13481
|
+
test: function test(e) {
|
|
13482
|
+
return "microsoft edge" === e.getBrowserName(!0);
|
|
13483
|
+
},
|
|
13484
|
+
describe: function describe(e) {
|
|
13485
|
+
if (/\sedg\//i.test(e)) return {
|
|
13486
|
+
name: s.ENGINE_MAP.Blink
|
|
13487
|
+
};
|
|
13488
|
+
var t = i.default.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i, e);
|
|
13489
|
+
return {
|
|
13490
|
+
name: s.ENGINE_MAP.EdgeHTML,
|
|
13491
|
+
version: t
|
|
13492
|
+
};
|
|
13108
13493
|
}
|
|
13109
|
-
}
|
|
13110
|
-
});
|
|
13111
|
-
yield this.sender.setParameters(sendParameters);
|
|
13112
|
-
});
|
|
13113
|
-
}
|
|
13114
|
-
getScaleDownRatio(expectedMaxFs) {
|
|
13115
|
-
var _a;
|
|
13116
|
-
if (!expectedMaxFs) {
|
|
13117
|
-
return -1;
|
|
13118
|
-
}
|
|
13119
|
-
if (!this.publishedTrack) {
|
|
13120
|
-
return -1;
|
|
13121
|
-
}
|
|
13122
|
-
var setting = (_a = this.publishedTrack) === null || _a === void 0 ? void 0 : _a.underlyingTrack.getSettings();
|
|
13123
|
-
var sourceHeight = setting === null || setting === void 0 ? void 0 : setting.height;
|
|
13124
|
-
var sourceWidth = setting === null || setting === void 0 ? void 0 : setting.width;
|
|
13125
|
-
if (!sourceWidth || !sourceHeight) {
|
|
13126
|
-
return -1;
|
|
13127
|
-
}
|
|
13128
|
-
return getScaleDownRatio([sourceWidth, sourceHeight], sourceHeight, expectedMaxFs);
|
|
13129
|
-
}
|
|
13130
|
-
publishTrack(track) {
|
|
13131
|
-
return this.replacePublishedTrack(track);
|
|
13132
|
-
}
|
|
13133
|
-
unpublishTrack() {
|
|
13134
|
-
return this.replacePublishedTrack();
|
|
13135
|
-
}
|
|
13136
|
-
setActive(enabled) {
|
|
13137
|
-
var direction = enabled ? 'sendrecv' : 'inactive';
|
|
13138
|
-
this._rtcRtpTransceiver.direction = direction;
|
|
13139
|
-
return this._rtcRtpTransceiver.direction !== this._rtcRtpTransceiver.currentDirection;
|
|
13140
|
-
}
|
|
13141
|
-
getIngressPayloadType(mimeType) {
|
|
13142
|
-
var senderCodecs = this.sender.getParameters().codecs.filter(codec => codec.mimeType === mimeType);
|
|
13143
|
-
var receiverCodecs = this.receiver.getParameters().codecs.filter(codec => codec.mimeType === mimeType);
|
|
13144
|
-
if (!senderCodecs || !receiverCodecs || senderCodecs.length === 0 || receiverCodecs.length === 0) {
|
|
13145
|
-
throw new Error("sender codecs or receiver codecs is undefined or empty");
|
|
13146
|
-
}
|
|
13147
|
-
var senderCodec = senderCodecs[0];
|
|
13148
|
-
var targetCodec = receiverCodecs.find(receiverCodec => {
|
|
13149
|
-
return areCodecsCompatible(senderCodec, receiverCodec);
|
|
13150
|
-
});
|
|
13151
|
-
if (!targetCodec || !targetCodec.payloadType) {
|
|
13152
|
-
throw new Error("ingress payload type is not well defined in receiver codecs");
|
|
13153
|
-
}
|
|
13154
|
-
return targetCodec.payloadType;
|
|
13155
|
-
}
|
|
13156
|
-
}
|
|
13157
|
-
var simulcastMaxFrameSizes = {
|
|
13158
|
-
0: '240',
|
|
13159
|
-
1: '2304',
|
|
13160
|
-
2: '8160'
|
|
13161
|
-
};
|
|
13162
|
-
class RidIngressStreamSignaler {
|
|
13163
|
-
constructor(mid) {
|
|
13164
|
-
this.mid = mid;
|
|
13165
|
-
}
|
|
13166
|
-
getReceiverId() {
|
|
13167
|
-
return {
|
|
13168
|
-
mid: this.mid,
|
|
13169
|
-
rid: '1'
|
|
13170
|
-
};
|
|
13171
|
-
}
|
|
13172
|
-
signalLocalStreams(mLine) {}
|
|
13173
|
-
signalRemoteStreams(mLine) {}
|
|
13174
|
-
}
|
|
13175
|
-
class RidEgressStreamSignaler {
|
|
13176
|
-
constructor(mid) {
|
|
13177
|
-
this.streamIds = [];
|
|
13178
|
-
this.mid = mid;
|
|
13179
|
-
}
|
|
13180
|
-
signalStreams(simulcastEnabled, _rtxEnabled, mLine) {
|
|
13181
|
-
mLine.ssrcGroups = [];
|
|
13182
|
-
if (this.streamIds.length === 0) {
|
|
13183
|
-
if (simulcastEnabled) {
|
|
13184
|
-
this.streamIds = [{
|
|
13185
|
-
mid: this.mid,
|
|
13186
|
-
rid: 'low'
|
|
13187
13494
|
}, {
|
|
13188
|
-
|
|
13189
|
-
|
|
13495
|
+
test: [/trident/i],
|
|
13496
|
+
describe: function describe(e) {
|
|
13497
|
+
var t = {
|
|
13498
|
+
name: s.ENGINE_MAP.Trident
|
|
13499
|
+
},
|
|
13500
|
+
r = i.default.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i, e);
|
|
13501
|
+
return r && (t.version = r), t;
|
|
13502
|
+
}
|
|
13190
13503
|
}, {
|
|
13191
|
-
|
|
13192
|
-
|
|
13193
|
-
|
|
13194
|
-
|
|
13195
|
-
|
|
13196
|
-
|
|
13504
|
+
test: function test(e) {
|
|
13505
|
+
return e.test(/presto/i);
|
|
13506
|
+
},
|
|
13507
|
+
describe: function describe(e) {
|
|
13508
|
+
var t = {
|
|
13509
|
+
name: s.ENGINE_MAP.Presto
|
|
13510
|
+
},
|
|
13511
|
+
r = i.default.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i, e);
|
|
13512
|
+
return r && (t.version = r), t;
|
|
13513
|
+
}
|
|
13514
|
+
}, {
|
|
13515
|
+
test: function test(e) {
|
|
13516
|
+
var t = e.test(/gecko/i),
|
|
13517
|
+
r = e.test(/like gecko/i);
|
|
13518
|
+
return t && !r;
|
|
13519
|
+
},
|
|
13520
|
+
describe: function describe(e) {
|
|
13521
|
+
var t = {
|
|
13522
|
+
name: s.ENGINE_MAP.Gecko
|
|
13523
|
+
},
|
|
13524
|
+
r = i.default.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i, e);
|
|
13525
|
+
return r && (t.version = r), t;
|
|
13526
|
+
}
|
|
13527
|
+
}, {
|
|
13528
|
+
test: [/(apple)?webkit\/537\.36/i],
|
|
13529
|
+
describe: function describe() {
|
|
13530
|
+
return {
|
|
13531
|
+
name: s.ENGINE_MAP.Blink
|
|
13532
|
+
};
|
|
13533
|
+
}
|
|
13534
|
+
}, {
|
|
13535
|
+
test: [/(apple)?webkit/i],
|
|
13536
|
+
describe: function describe(e) {
|
|
13537
|
+
var t = {
|
|
13538
|
+
name: s.ENGINE_MAP.WebKit
|
|
13539
|
+
},
|
|
13540
|
+
r = i.default.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i, e);
|
|
13541
|
+
return r && (t.version = r), t;
|
|
13542
|
+
}
|
|
13197
13543
|
}];
|
|
13198
|
-
|
|
13199
|
-
}
|
|
13200
|
-
if (simulcastEnabled) {
|
|
13201
|
-
mLine.rids = this.streamIds.map((streamId, index) => new RidLine(streamId.rid, 'send', "max-fs=".concat(simulcastMaxFrameSizes[index])));
|
|
13202
|
-
mLine.simulcast = new SimulcastLine(SimulcastLayerList.fromString('low;medium;high'), new SimulcastLayerList());
|
|
13203
|
-
}
|
|
13204
|
-
}
|
|
13205
|
-
getSenderIds() {
|
|
13206
|
-
return this.streamIds;
|
|
13207
|
-
}
|
|
13208
|
-
getEncodingIndexForStreamId(streamId) {
|
|
13209
|
-
return this.streamIds.findIndex(currStreamId => compareStreamIds(currStreamId, streamId));
|
|
13210
|
-
}
|
|
13211
|
-
}
|
|
13212
|
-
function generateSsrc() {
|
|
13213
|
-
return Math.floor(Math.random() * 0xffffffff);
|
|
13214
|
-
}
|
|
13215
|
-
class SsrcIngressStreamSignaler {
|
|
13216
|
-
constructor() {
|
|
13217
|
-
this.ssrc = generateSsrc();
|
|
13218
|
-
}
|
|
13219
|
-
getReceiverId() {
|
|
13220
|
-
return Object.assign({
|
|
13221
|
-
ssrc: this.ssrc
|
|
13222
|
-
}, this.rtxSsrc ? {
|
|
13223
|
-
rtxSsrc: this.rtxSsrc
|
|
13224
|
-
} : {});
|
|
13225
|
-
}
|
|
13226
|
-
signalLocalStreams(_mLine) {}
|
|
13227
|
-
signalRemoteStreams(mLine) {
|
|
13228
|
-
mLine.addLine(new SsrcLine(this.ssrc, 'cname', "".concat(this.ssrc, "-cname")));
|
|
13229
|
-
mLine.addLine(new SsrcLine(this.ssrc, 'msid', '-', '1'));
|
|
13230
|
-
if (hasCodec('rtx', mLine)) {
|
|
13231
|
-
this.rtxSsrc = generateSsrc();
|
|
13232
|
-
mLine.addLine(new SsrcLine(this.rtxSsrc, 'cname', "".concat(this.ssrc, "-cname")));
|
|
13233
|
-
mLine.addLine(new SsrcLine(this.rtxSsrc, 'msid', '-', '1'));
|
|
13234
|
-
mLine.addLine(new SsrcGroupLine('FID', [this.ssrc, this.rtxSsrc]));
|
|
13235
|
-
}
|
|
13236
|
-
}
|
|
13237
|
-
}
|
|
13238
|
-
class SsrcEgressStreamSignaler {
|
|
13239
|
-
constructor() {
|
|
13240
|
-
this.streamIds = [];
|
|
13241
|
-
}
|
|
13242
|
-
signalStreams(simulcastEnabled, rtxEnabled, mLine) {
|
|
13243
|
-
mLine.rids = [];
|
|
13244
|
-
mLine.simulcast = undefined;
|
|
13245
|
-
mLine.ssrcs = [];
|
|
13246
|
-
mLine.ssrcGroups = [];
|
|
13247
|
-
if (this.streamIds.length === 0) {
|
|
13248
|
-
var numStreams = simulcastEnabled ? 3 : 1;
|
|
13249
|
-
[...Array(numStreams).keys()].forEach(() => {
|
|
13250
|
-
var newStreamId = {
|
|
13251
|
-
ssrc: generateSsrc()
|
|
13252
|
-
};
|
|
13253
|
-
if (rtxEnabled) {
|
|
13254
|
-
newStreamId.rtxSsrc = generateSsrc();
|
|
13255
|
-
}
|
|
13256
|
-
this.streamIds.push(newStreamId);
|
|
13257
|
-
});
|
|
13258
|
-
}
|
|
13259
|
-
this.streamIds.forEach((streamId, index) => {
|
|
13260
|
-
var rtpSsrc = streamId.ssrc;
|
|
13261
|
-
mLine.addLine(new SsrcLine(rtpSsrc, 'cname', "".concat(rtpSsrc, "-cname")));
|
|
13262
|
-
mLine.addLine(new SsrcLine(rtpSsrc, 'msid', '-', '1'));
|
|
13263
|
-
if (simulcastEnabled) {
|
|
13264
|
-
mLine.addLine(new SsrcLine(rtpSsrc, 'fmtp', "* max-fs=".concat(simulcastMaxFrameSizes[index])));
|
|
13265
|
-
}
|
|
13266
|
-
if (rtxEnabled) {
|
|
13267
|
-
var rtxSsrc = streamId.rtxSsrc;
|
|
13268
|
-
mLine.addLine(new SsrcLine(rtxSsrc, 'cname', "".concat(rtpSsrc, "-cname")));
|
|
13269
|
-
mLine.addLine(new SsrcLine(rtxSsrc, 'msid', '-', '1'));
|
|
13270
|
-
mLine.addLine(new SsrcGroupLine('FID', [rtpSsrc, rtxSsrc]));
|
|
13544
|
+
t.default = a, e.exports = t.default;
|
|
13271
13545
|
}
|
|
13272
13546
|
});
|
|
13273
|
-
|
|
13274
|
-
|
|
13275
|
-
|
|
13276
|
-
|
|
13277
|
-
|
|
13278
|
-
|
|
13279
|
-
}
|
|
13280
|
-
getEncodingIndexForStreamId(streamId) {
|
|
13281
|
-
return this.streamIds.findIndex(currStreamId => compareStreamIds(currStreamId, streamId));
|
|
13282
|
-
}
|
|
13283
|
-
}
|
|
13284
|
-
class StreamSignalerManager {
|
|
13285
|
-
constructor(streamSignalingMode) {
|
|
13286
|
-
this.egressStreamSignalersByMid = new Map();
|
|
13287
|
-
this.ingressStreamsSignalersByMid = new Map();
|
|
13288
|
-
this.ingressStreamSignalingMode = streamSignalingMode;
|
|
13289
|
-
this.egressStreamSignalingMode = streamSignalingMode;
|
|
13290
|
-
}
|
|
13291
|
-
getOrCreateEgressStreamSignaler(mid) {
|
|
13292
|
-
var existing = this.getEgressStreamSignaler(mid);
|
|
13293
|
-
if (existing) {
|
|
13294
|
-
return existing;
|
|
13295
|
-
}
|
|
13296
|
-
var newSignaler;
|
|
13297
|
-
if (this.egressStreamSignalingMode === 'MID-RID') {
|
|
13298
|
-
newSignaler = new RidEgressStreamSignaler(mid);
|
|
13299
|
-
} else {
|
|
13300
|
-
newSignaler = new SsrcEgressStreamSignaler();
|
|
13301
|
-
}
|
|
13302
|
-
this.egressStreamSignalersByMid.set(mid, newSignaler);
|
|
13303
|
-
return newSignaler;
|
|
13304
|
-
}
|
|
13305
|
-
getEgressStreamSignalerOrThrow(mid) {
|
|
13306
|
-
var existing = this.getEgressStreamSignaler(mid);
|
|
13307
|
-
if (!existing) {
|
|
13308
|
-
throw new Error("Couldn't find EgressStreamSignaler for mid ".concat(mid));
|
|
13309
|
-
}
|
|
13310
|
-
return existing;
|
|
13311
|
-
}
|
|
13312
|
-
getEgressStreamSignaler(mid) {
|
|
13313
|
-
return this.egressStreamSignalersByMid.get(mid);
|
|
13314
|
-
}
|
|
13315
|
-
getOrCreateIngressStreamSignaler(mid) {
|
|
13316
|
-
var existing = this.getIngressStreamSignaler(mid);
|
|
13317
|
-
if (existing) {
|
|
13318
|
-
return existing;
|
|
13319
|
-
}
|
|
13320
|
-
var newSignaler;
|
|
13321
|
-
if (this.ingressStreamSignalingMode === 'MID-RID') {
|
|
13322
|
-
newSignaler = new RidIngressStreamSignaler(mid);
|
|
13323
|
-
} else {
|
|
13324
|
-
newSignaler = new SsrcIngressStreamSignaler();
|
|
13325
|
-
}
|
|
13326
|
-
this.ingressStreamsSignalersByMid.set(mid, newSignaler);
|
|
13327
|
-
return newSignaler;
|
|
13328
|
-
}
|
|
13329
|
-
getIngressStreamSignaler(mid) {
|
|
13330
|
-
return this.ingressStreamsSignalersByMid.get(mid);
|
|
13331
|
-
}
|
|
13332
|
-
getIngressStreamSignalerOrThrow(mid) {
|
|
13333
|
-
var existing = this.getIngressStreamSignaler(mid);
|
|
13334
|
-
if (!existing) {
|
|
13335
|
-
throw new Error("Couldn't find IngressStreamSignaler for mid ".concat(mid));
|
|
13336
|
-
}
|
|
13337
|
-
return existing;
|
|
13338
|
-
}
|
|
13547
|
+
});
|
|
13548
|
+
})(es5);
|
|
13549
|
+
var Bowser = /*@__PURE__*/getDefaultExportFromCjs(es5.exports);
|
|
13550
|
+
function getBrowserDetails() {
|
|
13551
|
+
var browser = Bowser.getParser(window.navigator.userAgent);
|
|
13552
|
+
return browser.getBrowser();
|
|
13339
13553
|
}
|
|
13340
13554
|
var logger$1 = {
|
|
13341
13555
|
exports: {}
|
|
@@ -13628,7 +13842,7 @@ var MultistreamConnectionEventNames;
|
|
|
13628
13842
|
var defaultMultistreamConnectionOptions = {
|
|
13629
13843
|
floorControlledPresentation: false,
|
|
13630
13844
|
disableSimulcast: false,
|
|
13631
|
-
streamSignalingMode: '
|
|
13845
|
+
streamSignalingMode: 'SSRC',
|
|
13632
13846
|
bundlePolicy: 'compat'
|
|
13633
13847
|
};
|
|
13634
13848
|
class MultistreamConnection extends EventEmitter {
|
|
@@ -13640,43 +13854,49 @@ class MultistreamConnection extends EventEmitter {
|
|
|
13640
13854
|
this.jmpSessions = new Map();
|
|
13641
13855
|
this.pendingJmpTasks = [];
|
|
13642
13856
|
this.metricsCallback = () => {};
|
|
13857
|
+
this.overuseUpdateCallback = () => {};
|
|
13643
13858
|
this.options = Object.assign(Object.assign({}, defaultMultistreamConnectionOptions), userOptions);
|
|
13644
13859
|
logger$4.info("Creating multistream connection with options ".concat(JSON.stringify(this.options)));
|
|
13645
|
-
this.
|
|
13646
|
-
this.pc.on(PeerConnection.Events.ConnectionStateChange, state => this.emit(MultistreamConnectionEventNames.ConnectionStateUpdate, state));
|
|
13860
|
+
this.initializePeerConnection();
|
|
13647
13861
|
this.streamSignalerManager = new StreamSignalerManager(this.options.streamSignalingMode);
|
|
13648
|
-
this.
|
|
13862
|
+
this.overuseStateManager = new OveruseStateManager(overuseState => this.overuseUpdateCallback(overuseState));
|
|
13863
|
+
this.overuseStateManager.start();
|
|
13864
|
+
this.statsManager = new StatsManager(() => this.pc.getStats(), stats => this.preProcessStats(stats));
|
|
13649
13865
|
var mainSceneId = generateSceneId();
|
|
13650
|
-
var videoMainEncodingOptions =
|
|
13651
|
-
scaleResolutionDownBy: 4,
|
|
13652
|
-
active: true
|
|
13653
|
-
}, {
|
|
13654
|
-
scaleResolutionDownBy: 2,
|
|
13655
|
-
active: true
|
|
13656
|
-
}, {
|
|
13657
|
-
active: true
|
|
13658
|
-
}] : [];
|
|
13866
|
+
var videoMainEncodingOptions = this.getVideoEncodingOptions();
|
|
13659
13867
|
this.createSendTransceiver(MediaType$1.VideoMain, mainSceneId, videoMainEncodingOptions);
|
|
13660
13868
|
this.createSendTransceiver(MediaType$1.AudioMain, mainSceneId);
|
|
13661
13869
|
if (this.options.floorControlledPresentation) {
|
|
13662
|
-
var videoPresentationEncodingOptions =
|
|
13663
|
-
scaleResolutionDownBy: 4,
|
|
13664
|
-
active: true
|
|
13665
|
-
}, {
|
|
13666
|
-
scaleResolutionDownBy: 2,
|
|
13667
|
-
active: true
|
|
13668
|
-
}, {
|
|
13669
|
-
active: true
|
|
13670
|
-
}] : [];
|
|
13870
|
+
var videoPresentationEncodingOptions = this.getVideoEncodingOptions();
|
|
13671
13871
|
var contentSceneId = generateSceneId();
|
|
13672
13872
|
this.createSendTransceiver(MediaType$1.VideoSlides, contentSceneId, videoPresentationEncodingOptions);
|
|
13673
13873
|
this.createSendTransceiver(MediaType$1.AudioSlides, contentSceneId);
|
|
13674
13874
|
}
|
|
13875
|
+
}
|
|
13876
|
+
initializePeerConnection() {
|
|
13877
|
+
var _a;
|
|
13878
|
+
(_a = this.pc) === null || _a === void 0 ? void 0 : _a.close();
|
|
13879
|
+
this.pc = new PeerConnection();
|
|
13880
|
+
this.pc.on(PeerConnection.Events.ConnectionStateChange, state => this.emit(MultistreamConnectionEventNames.ConnectionStateUpdate, state));
|
|
13881
|
+
this.attachMetricsObserver();
|
|
13675
13882
|
this.createDataChannel();
|
|
13676
13883
|
}
|
|
13677
13884
|
getConnectionState() {
|
|
13678
13885
|
return this.pc.getConnectionState();
|
|
13679
13886
|
}
|
|
13887
|
+
getVideoEncodingOptions() {
|
|
13888
|
+
return !this.options.disableSimulcast ? [{
|
|
13889
|
+
scaleResolutionDownBy: 4,
|
|
13890
|
+
active: false
|
|
13891
|
+
}, {
|
|
13892
|
+
scaleResolutionDownBy: 2,
|
|
13893
|
+
active: false
|
|
13894
|
+
}, {
|
|
13895
|
+
active: false
|
|
13896
|
+
}] : [{
|
|
13897
|
+
active: false
|
|
13898
|
+
}];
|
|
13899
|
+
}
|
|
13680
13900
|
createSendTransceiver(mediaType, sceneId, sendEncodingsOptions) {
|
|
13681
13901
|
var rtcTransceiver = this.pc.addTransceiver(toMediaStreamTrackKind(mediaType), {
|
|
13682
13902
|
direction: 'sendrecv',
|
|
@@ -13684,6 +13904,9 @@ class MultistreamConnection extends EventEmitter {
|
|
|
13684
13904
|
});
|
|
13685
13905
|
var csi = generateCsi(getMediaFamily(mediaType), sceneId);
|
|
13686
13906
|
this.sendTransceivers.set(mediaType, new SendOnlyTransceiver(rtcTransceiver, csi));
|
|
13907
|
+
this.createJmpSession(mediaType);
|
|
13908
|
+
}
|
|
13909
|
+
createJmpSession(mediaType) {
|
|
13687
13910
|
var jmpSession = new JmpSession(getMediaFamily(mediaType), getMediaContent(mediaType));
|
|
13688
13911
|
jmpSession.setTxCallback(msg => {
|
|
13689
13912
|
var _a;
|
|
@@ -13802,14 +14025,16 @@ class MultistreamConnection extends EventEmitter {
|
|
|
13802
14025
|
maxPayloadBitsPerSecond
|
|
13803
14026
|
});
|
|
13804
14027
|
} else {
|
|
13805
|
-
logger$4.warn("Unable to get encoding index for stream ID: ".concat(JSON.stringify(id)));
|
|
14028
|
+
logger$4.warn("".concat(mediaType, ": Unable to get encoding index for stream ID: ").concat(JSON.stringify(id)));
|
|
13806
14029
|
}
|
|
13807
14030
|
} else {
|
|
13808
|
-
logger$4.warn("Unable to find matching stream ID for requested ID: ".concat(JSON.stringify(id)));
|
|
14031
|
+
logger$4.warn("".concat(mediaType, ": Unable to find matching stream ID for requested ID: ").concat(JSON.stringify(id)));
|
|
13809
14032
|
}
|
|
13810
14033
|
});
|
|
13811
14034
|
sendTransceiver.setTrackRequested(requestedIdEncodingParamsMap.size > 0);
|
|
13812
|
-
|
|
14035
|
+
if (getMediaFamily(mediaType) === MediaFamily$1.Video) {
|
|
14036
|
+
sendTransceiver.updateSimulcastStreamStates(requestedIdEncodingParamsMap);
|
|
14037
|
+
}
|
|
13813
14038
|
}
|
|
13814
14039
|
createDataChannel() {
|
|
13815
14040
|
var dataChannel = this.pc.createDataChannel('datachannel', {});
|
|
@@ -14051,8 +14276,8 @@ class MultistreamConnection extends EventEmitter {
|
|
|
14051
14276
|
egressSignaler.signalStreams(simulcastEnabled, rtxEnabled, av);
|
|
14052
14277
|
if (av.type === 'video') {
|
|
14053
14278
|
[...av.codecs.values()].filter(ci => ci.name === 'H264').forEach(ci => {
|
|
14054
|
-
ci.fmtParams.push("max-mbps=".concat(
|
|
14055
|
-
ci.fmtParams.push("max-fs=".concat(
|
|
14279
|
+
ci.fmtParams.push("max-mbps=".concat(defaultMaxVideoEncodeMbps));
|
|
14280
|
+
ci.fmtParams.push("max-fs=".concat(defaultMaxVideoEncodeFrameSize));
|
|
14056
14281
|
});
|
|
14057
14282
|
}
|
|
14058
14283
|
});
|
|
@@ -14074,6 +14299,14 @@ class MultistreamConnection extends EventEmitter {
|
|
|
14074
14299
|
});
|
|
14075
14300
|
injectJmpAttributes(parsed, csiMap, this.options.streamSignalingMode);
|
|
14076
14301
|
filterRecvOnlyMlines(parsed);
|
|
14302
|
+
parsed.avMedia.filter(av => av.direction === 'sendrecv' && av.type === 'video').forEach(av => {
|
|
14303
|
+
var ssrcGroup = av.ssrcGroups.find(sg => sg.semantics === 'SIM');
|
|
14304
|
+
if (ssrcGroup) {
|
|
14305
|
+
ssrcGroup.ssrcs.forEach((ssrc, index) => {
|
|
14306
|
+
av.addLine(new SsrcLine(ssrc, 'fmtp', "* max-fs=".concat(simulcastMaxFrameSizes[index])));
|
|
14307
|
+
});
|
|
14308
|
+
}
|
|
14309
|
+
});
|
|
14077
14310
|
return parsed.toString();
|
|
14078
14311
|
}
|
|
14079
14312
|
preProcessRemoteAnswer(answer) {
|
|
@@ -14116,13 +14349,24 @@ class MultistreamConnection extends EventEmitter {
|
|
|
14116
14349
|
this.pendingJmpTasks.push(task);
|
|
14117
14350
|
}
|
|
14118
14351
|
}
|
|
14119
|
-
renewPeerConnection() {
|
|
14120
|
-
|
|
14121
|
-
|
|
14122
|
-
|
|
14123
|
-
this.
|
|
14124
|
-
this.
|
|
14125
|
-
this.
|
|
14352
|
+
renewPeerConnection(userOptions) {
|
|
14353
|
+
if (userOptions) {
|
|
14354
|
+
this.options = Object.assign(Object.assign({}, defaultMultistreamConnectionOptions), userOptions);
|
|
14355
|
+
}
|
|
14356
|
+
logger$4.info("Renewing multistream connection with options ".concat(JSON.stringify(this.options)));
|
|
14357
|
+
this.initializePeerConnection();
|
|
14358
|
+
this.streamSignalerManager = new StreamSignalerManager(this.options.streamSignalingMode);
|
|
14359
|
+
var mainSceneId = generateSceneId();
|
|
14360
|
+
this.sendTransceivers.forEach((transceiver, mediaType) => {
|
|
14361
|
+
var _a;
|
|
14362
|
+
transceiver.replaceTransceiver(this.pc.addTransceiver(toMediaStreamTrackKind(mediaType), {
|
|
14363
|
+
direction: 'sendrecv',
|
|
14364
|
+
sendEncodings: getMediaFamily(mediaType) === MediaFamily$1.Video ? this.getVideoEncodingOptions() : undefined
|
|
14365
|
+
}));
|
|
14366
|
+
transceiver.csi = generateCsi(getMediaFamily(mediaType), mainSceneId);
|
|
14367
|
+
(_a = this.jmpSessions.get(mediaType)) === null || _a === void 0 ? void 0 : _a.close();
|
|
14368
|
+
this.createJmpSession(mediaType);
|
|
14369
|
+
});
|
|
14126
14370
|
this.recvTransceivers.forEach((transceivers, mediaType) => {
|
|
14127
14371
|
transceivers.forEach(t => {
|
|
14128
14372
|
t.replaceTransceiver(this.pc.addTransceiver(toMediaStreamTrackKind(mediaType), {
|
|
@@ -14137,17 +14381,25 @@ class MultistreamConnection extends EventEmitter {
|
|
|
14137
14381
|
return Object.keys(receiveSlotId).length === Object.keys(id).length && Object.keys(receiveSlotId).every(key => Object.prototype.hasOwnProperty.call(id, key) && receiveSlotId[key] === id[key]);
|
|
14138
14382
|
});
|
|
14139
14383
|
}
|
|
14384
|
+
getStats() {
|
|
14385
|
+
return this.statsManager.getStats();
|
|
14386
|
+
}
|
|
14140
14387
|
preProcessStats(stats) {
|
|
14141
14388
|
return __awaiter(this, void 0, void 0, function* () {
|
|
14142
14389
|
yield Promise.all([...this.sendTransceivers.entries()].map(_ref5 => {
|
|
14143
14390
|
var [mediaType, transceiver] = _ref5;
|
|
14144
14391
|
return __awaiter(this, void 0, void 0, function* () {
|
|
14145
|
-
(yield transceiver.
|
|
14392
|
+
(yield transceiver.getStats()).forEach(senderStats => {
|
|
14393
|
+
var _a;
|
|
14146
14394
|
if (senderStats.type === 'outbound-rtp') {
|
|
14147
14395
|
var statsToModify = stats[senderStats.id];
|
|
14148
14396
|
statsToModify.mid = transceiver.mid;
|
|
14149
14397
|
statsToModify.csi = transceiver.csi;
|
|
14150
14398
|
statsToModify.mediaType = mediaType;
|
|
14399
|
+
var trackSettings = (_a = transceiver.publishedTrack) === null || _a === void 0 ? void 0 : _a.underlyingTrack.getSettings();
|
|
14400
|
+
if (trackSettings === null || trackSettings === void 0 ? void 0 : trackSettings.frameRate) {
|
|
14401
|
+
statsToModify.targetFrameRate = trackSettings === null || trackSettings === void 0 ? void 0 : trackSettings.frameRate;
|
|
14402
|
+
}
|
|
14151
14403
|
}
|
|
14152
14404
|
});
|
|
14153
14405
|
});
|
|
@@ -14156,7 +14408,7 @@ class MultistreamConnection extends EventEmitter {
|
|
|
14156
14408
|
var [mediaType, transceivers] = _ref6;
|
|
14157
14409
|
return __awaiter(this, void 0, void 0, function* () {
|
|
14158
14410
|
yield Promise.all(transceivers.map(transceiver => __awaiter(this, void 0, void 0, function* () {
|
|
14159
|
-
(yield transceiver.
|
|
14411
|
+
(yield transceiver.getStats()).forEach(receiverStats => {
|
|
14160
14412
|
var _a;
|
|
14161
14413
|
if (receiverStats.type === 'inbound-rtp') {
|
|
14162
14414
|
var statsToModify = stats[receiverStats.id];
|
|
@@ -14180,6 +14432,9 @@ class MultistreamConnection extends EventEmitter {
|
|
|
14180
14432
|
setMetricsCallback(callback) {
|
|
14181
14433
|
this.metricsCallback = callback;
|
|
14182
14434
|
}
|
|
14435
|
+
setOveruseUpdateCallback(callback) {
|
|
14436
|
+
this.overuseUpdateCallback = callback;
|
|
14437
|
+
}
|
|
14183
14438
|
getCsiByMediaType(mediaType) {
|
|
14184
14439
|
var _a;
|
|
14185
14440
|
return (_a = this.sendTransceivers.get(mediaType)) === null || _a === void 0 ? void 0 : _a.csi;
|
|
@@ -23213,6 +23468,9 @@ class MultistreamRoapMediaConnection extends EventEmitter$4 {
|
|
|
23213
23468
|
this.log('getConnectionState()', "called, returning ".concat(connectionState));
|
|
23214
23469
|
return connectionState;
|
|
23215
23470
|
}
|
|
23471
|
+
getStats() {
|
|
23472
|
+
return this.multistreamConnection.getStats();
|
|
23473
|
+
}
|
|
23216
23474
|
roapMessageReceived(roapMessage) {
|
|
23217
23475
|
this.log('roapMessageReceived()', "called with messageType=".concat(roapMessage.messageType, ", seq=").concat(roapMessage.seq));
|
|
23218
23476
|
if (!this.sdpNegotiationStarted && roapMessage.messageType === 'OFFER') {
|