@flashphoner/websdk 2.0.212 → 2.0.215

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.
@@ -8452,8 +8452,9 @@ var constants = require("./constants");
8452
8452
 
8453
8453
  var util = require('./util');
8454
8454
 
8455
- var logger = require('./util').logger;
8455
+ var LoggerObject = require('./util').logger;
8456
8456
 
8457
+ var coreLogger;
8457
8458
  var loggerConf = {
8458
8459
  push: false,
8459
8460
  severity: "INFO"
@@ -8501,7 +8502,7 @@ var disableConnectionQualityCalculation;
8501
8502
  * @param {String=} options.decoderLocation Location of video-worker2.js file
8502
8503
  * @param {String=} options.screenSharingExtensionId Chrome screen sharing extension id
8503
8504
  * @param {Object=} options.constraints Default local media constraints
8504
- * @param {Object=} options.logger Enable logging
8505
+ * @param {Object=} options.logger Core logger options
8505
8506
  * @throws {Error} Error if none of MediaProviders available
8506
8507
  * @memberof Flashphoner
8507
8508
  */
@@ -8510,16 +8511,10 @@ var init = function init(options) {
8510
8511
  if (!initialized) {
8511
8512
  if (!options) {
8512
8513
  options = {};
8513
- }
8514
-
8515
- loggerConf = options.logger || loggerConf;
8514
+ } // init global logger
8516
8515
 
8517
- if (options.logger !== null) {
8518
- loggerConf.enableLogs = true;
8519
- } // init logger
8520
8516
 
8521
-
8522
- logger.init(loggerConf.severity || "INFO", loggerConf.push || false, loggerConf.customLogger, loggerConf.enableLogs);
8517
+ coreLogger = createLogger(options.logger);
8523
8518
  var waitingTemasys = false;
8524
8519
 
8525
8520
  try {
@@ -8540,7 +8535,7 @@ var init = function init(options) {
8540
8535
  constraints: options.constraints || getDefaultMediaConstraints(),
8541
8536
  extensionId: options.screenSharingExtensionId,
8542
8537
  audioContext: audioContext,
8543
- logger: logger,
8538
+ logger: coreLogger,
8544
8539
  createMicGainNode: enableGainNode
8545
8540
  };
8546
8541
  webRtcProvider.configure(webRtcConf);
@@ -8557,7 +8552,7 @@ var init = function init(options) {
8557
8552
  var webRtcConf = {
8558
8553
  constraints: options.constraints || getDefaultMediaConstraints(),
8559
8554
  extensionId: options.screenSharingExtensionId,
8560
- logger: logger
8555
+ logger: coreLogger
8561
8556
  };
8562
8557
  webRtcProvider.configure(webRtcConf); // Just reorder media provider list
8563
8558
 
@@ -8585,7 +8580,7 @@ var init = function init(options) {
8585
8580
  var flashConf = {
8586
8581
  constraints: options.constraints || getDefaultMediaConstraints(),
8587
8582
  flashMediaProviderSwfLocation: options.flashMediaProviderSwfLocation,
8588
- logger: logger
8583
+ logger: coreLogger
8589
8584
  };
8590
8585
  flashProvider.configure(flashConf);
8591
8586
  }
@@ -8609,7 +8604,7 @@ var init = function init(options) {
8609
8604
  receiverLocation: options.receiverLocation,
8610
8605
  decoderLocation: options.decoderLocation,
8611
8606
  audioContext: audioContext,
8612
- logger: logger
8607
+ logger: coreLogger
8613
8608
  };
8614
8609
  websocketProvider.configure(wsConf);
8615
8610
  } //check at least 1 provider available
@@ -8631,7 +8626,7 @@ var init = function init(options) {
8631
8626
  MediaProvider = _MediaProvider;
8632
8627
  }
8633
8628
  } else {
8634
- logger.warn(LOG_PREFIX, "Preferred media provider is not available.");
8629
+ corelogger.warn(LOG_PREFIX, "Preferred media provider is not available.");
8635
8630
  }
8636
8631
  }
8637
8632
 
@@ -8659,7 +8654,7 @@ var init = function init(options) {
8659
8654
  options.mediaProvidersReadyCallback(Object.keys(MediaProvider));
8660
8655
  }
8661
8656
 
8662
- logger.info(LOG_PREFIX, "Initialized");
8657
+ coreLogger.info(LOG_PREFIX, "Initialized");
8663
8658
  initialized = true;
8664
8659
  }
8665
8660
  };
@@ -8698,7 +8693,7 @@ var playFirstVideo = function playFirstVideo(display, isLocal, src) {
8698
8693
  }
8699
8694
  };
8700
8695
  /**
8701
- * Get logger
8696
+ * Get core logger
8702
8697
  *
8703
8698
  * @returns {Object} Logger
8704
8699
  * @memberof Flashphoner
@@ -8709,7 +8704,7 @@ var getLogger = function getLogger() {
8709
8704
  if (!initialized) {
8710
8705
  console.warn("Initialize API first.");
8711
8706
  } else {
8712
- return logger;
8707
+ return coreLogger;
8713
8708
  }
8714
8709
  };
8715
8710
  /**
@@ -8882,6 +8877,31 @@ var getSessions = function getSessions() {
8882
8877
 
8883
8878
  var getSession = function getSession(id) {
8884
8879
  return sessions[id];
8880
+ }; // Get logger configuration from options
8881
+
8882
+
8883
+ var getLoggerConf = function getLoggerConf(loggerOptions) {
8884
+ var conf = loggerOptions || loggerConf;
8885
+
8886
+ if (loggerOptions !== null) {
8887
+ conf.enableLogs = true;
8888
+ }
8889
+
8890
+ return conf;
8891
+ }; // Create a new logger object
8892
+
8893
+
8894
+ var createLogger = function createLogger(loggerOptions) {
8895
+ var parentLogger = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : coreLogger;
8896
+ var newLogger = parentLogger;
8897
+
8898
+ if (newLogger === undefined || loggerOptions != undefined) {
8899
+ var loggerConf = getLoggerConf(loggerOptions);
8900
+ newLogger = new LoggerObject();
8901
+ newLogger.init(loggerConf.severity || "INFO", loggerConf.push || false, loggerConf.customLogger, loggerConf.enableLogs);
8902
+ }
8903
+
8904
+ return newLogger;
8885
8905
  };
8886
8906
  /**
8887
8907
  * Create new session and connect to server.
@@ -8901,6 +8921,7 @@ var getSession = function getSession(id) {
8901
8921
  * @param {Integer=} options.pingInterval Server ping interval in milliseconds [0]
8902
8922
  * @param {Integer=} options.receiveProbes A maximum subsequental pings received missing count [0]
8903
8923
  * @param {Integer=} options.probesInterval Interval to check subsequental pings received [0]
8924
+ * @param {Object=} options.logger Session logger options
8904
8925
  * @returns {Session} Created session
8905
8926
  * @throws {Error} Error if API is not initialized
8906
8927
  * @throws {TypeError} Error if options.urlServer is not specified
@@ -8915,8 +8936,12 @@ var createSession = function createSession(options) {
8915
8936
 
8916
8937
  if (!options || !options.urlServer) {
8917
8938
  throw new TypeError("options.urlServer must be provided");
8918
- }
8939
+ } // Set session logger #WCS-2434
8940
+
8941
+
8942
+ var sessionLogger = createLogger(options.logger); // Override logger for all low level operations
8919
8943
 
8944
+ var logger = sessionLogger;
8920
8945
  var id_ = uuid_v1();
8921
8946
  var sessionStatus = SESSION_STATUS.PENDING;
8922
8947
  var urlServer = options.urlServer;
@@ -9022,7 +9047,7 @@ var createSession = function createSession(options) {
9022
9047
  if (timeout != undefined && timeout > 0) {
9023
9048
  connectionTimeout = setTimeout(function () {
9024
9049
  if (wsConnection.readyState == 0) {
9025
- console.log("WS connection timeout");
9050
+ logger.warn(LOG_PREFIX, "WS connection timeout");
9026
9051
  wsConnection.close();
9027
9052
  }
9028
9053
  }, timeout);
@@ -9046,7 +9071,7 @@ var createSession = function createSession(options) {
9046
9071
  mediaProviders: Object.keys(MediaProvider),
9047
9072
  keepAlive: keepAlive,
9048
9073
  authToken: authToken,
9049
- clientVersion: "2.0.212",
9074
+ clientVersion: "2.0.215",
9050
9075
  clientOSVersion: window.navigator.appVersion,
9051
9076
  clientBrowserVersion: window.navigator.userAgent,
9052
9077
  msePacketizationVersion: 2,
@@ -9352,6 +9377,7 @@ var createSession = function createSession(options) {
9352
9377
  * @param {Array<string>=} options.sipSDP Array of custom SDP params (ex. bandwidth (b=))
9353
9378
  * @param {Array<string>=} options.sipHeaders Array of custom SIP headers
9354
9379
  * @param {string=} options.videoContentHint Video content hint for browser ('detail' by default to maintain resolution), {@link Flashphoner.constants.CONTENT_HINT_TYPE}
9380
+ * @param {Object=} options.logger Call logger options
9355
9381
  * @param {sdpHook} sdpHook The callback that handles sdp from the server
9356
9382
  * @returns {Call} Call
9357
9383
  * @throws {TypeError} Error if no options provided
@@ -9364,15 +9390,18 @@ var createSession = function createSession(options) {
9364
9390
  var createCall = function createCall(options) {
9365
9391
  //check session state
9366
9392
  if (sessionStatus !== SESSION_STATUS.REGISTERED && sessionStatus !== SESSION_STATUS.ESTABLISHED) {
9367
- logger.info(LOG_PREFIX, "Status is " + sessionStatus);
9368
- throw new Error('Invalid session state');
9393
+ throw new Error('Invalid session state ' + sessionStatus);
9369
9394
  } //check options
9370
9395
 
9371
9396
 
9372
9397
  if (!options) {
9373
9398
  throw new TypeError("options must be provided");
9374
- }
9399
+ } // Set call logger #WCS-2434
9400
+
9401
+
9402
+ var callLogger = createLogger(options.logger, sessionLogger); // Override logger for all low level operations
9375
9403
 
9404
+ var logger = callLogger;
9376
9405
  var login = appKey == 'clickToCallApp' ? '' : cConfig.sipLogin;
9377
9406
  var caller_ = options.incoming ? options.caller : login;
9378
9407
  var callee_ = options.callee;
@@ -9518,7 +9547,8 @@ var createSession = function createSession(options) {
9518
9547
  constraints: constraints,
9519
9548
  connectionConfig: mediaOptions,
9520
9549
  audioOutputId: audioOutputId,
9521
- videoContentHint: videoContentHint
9550
+ videoContentHint: videoContentHint,
9551
+ logger: logger
9522
9552
  }).then(function (newConnection) {
9523
9553
  mediaConnection = newConnection;
9524
9554
  return mediaConnection.createOffer({
@@ -10104,7 +10134,7 @@ var createSession = function createSession(options) {
10104
10134
  /**
10105
10135
  * Get call info
10106
10136
  * @returns {string} Info
10107
- * @memberof Stream
10137
+ * @memberof Call
10108
10138
  * @inner
10109
10139
  */
10110
10140
 
@@ -10115,7 +10145,7 @@ var createSession = function createSession(options) {
10115
10145
  /**
10116
10146
  * Get stream error info
10117
10147
  * @returns {string} Error info
10118
- * @memberof Stream
10148
+ * @memberof Call
10119
10149
  * @inner
10120
10150
  */
10121
10151
 
@@ -10123,6 +10153,17 @@ var createSession = function createSession(options) {
10123
10153
  var getErrorInfo = function getErrorInfo() {
10124
10154
  return errorInfo_;
10125
10155
  };
10156
+ /**
10157
+ * Get call logger
10158
+ *
10159
+ * @returns {Object} Logger
10160
+ * @memberof Call
10161
+ */
10162
+
10163
+
10164
+ var getLogger = function getLogger() {
10165
+ return callLogger;
10166
+ };
10126
10167
 
10127
10168
  call.call = call_;
10128
10169
  call.answer = answer;
@@ -10154,6 +10195,7 @@ var createSession = function createSession(options) {
10154
10195
  call.switchMic = switchMic;
10155
10196
  call.switchToScreen = switchToScreen;
10156
10197
  call.switchToCam = switchToCam;
10198
+ call.getLogger = getLogger;
10157
10199
  calls[id_] = call;
10158
10200
  return call;
10159
10201
  };
@@ -10200,6 +10242,7 @@ var createSession = function createSession(options) {
10200
10242
  * @param {string=} options.useCanvasMediaStream EXPERIMENTAL: when publish bind browser's media stream to the canvas. It can be useful for image filtering
10201
10243
  * @param {string=} options.videoContentHint Video content hint for browser ('detail' by default to maintain resolution), {@link Flashphoner.constants.CONTENT_HINT_TYPE}
10202
10244
  * @param {Boolean=} options.unmutePlayOnStart Unmute playback on start. May be used after user gesture only, so set 'unmutePlayOnStart: false' for autoplay
10245
+ * @param {Object=} options.logger Stream logger options
10203
10246
  * @param {sdpHook} sdpHook The callback that handles sdp from the server
10204
10247
  * @returns {Stream} Stream
10205
10248
  * @throws {TypeError} Error if no options provided
@@ -10215,7 +10258,7 @@ var createSession = function createSession(options) {
10215
10258
  var availableCallbacks = []; //check session state
10216
10259
 
10217
10260
  if (sessionStatus !== SESSION_STATUS.ESTABLISHED) {
10218
- throw new Error('Invalid session state');
10261
+ throw new Error('Invalid session state ' + sessionStatus);
10219
10262
  } //check options
10220
10263
 
10221
10264
 
@@ -10225,8 +10268,12 @@ var createSession = function createSession(options) {
10225
10268
 
10226
10269
  if (!options.name) {
10227
10270
  throw new TypeError("options.name must be provided");
10228
- }
10271
+ } // Set stream logger #WCS-2434
10272
+
10229
10273
 
10274
+ var streamLogger = createLogger(options.logger, sessionLogger); // Override logger for all low level operations
10275
+
10276
+ var logger = streamLogger;
10230
10277
  var clientKf = new KalmanFilter();
10231
10278
  var serverKf = new KalmanFilter();
10232
10279
  var id_ = uuid_v1();
@@ -10470,7 +10517,7 @@ var createSession = function createSession(options) {
10470
10517
  logger.debug(LOG_PREFIX, "Play stream " + name_);
10471
10518
 
10472
10519
  if (status_ !== STREAM_STATUS.NEW) {
10473
- throw new Error("Invalid stream state");
10520
+ throw new Error("Invalid stream state " + status_);
10474
10521
  }
10475
10522
 
10476
10523
  status_ = STREAM_STATUS.PENDING; //create mediaProvider connection
@@ -10489,7 +10536,8 @@ var createSession = function createSession(options) {
10489
10536
  audioOutputId: audioOutputId,
10490
10537
  remoteVideo: remoteVideo,
10491
10538
  playoutDelay: playoutDelay,
10492
- unmutePlayOnStart: unmutePlayOnStart
10539
+ unmutePlayOnStart: unmutePlayOnStart,
10540
+ logger: logger
10493
10541
  }, streamRefreshHandlers[id_]).then(function (newConnection) {
10494
10542
  mediaConnection = newConnection;
10495
10543
 
@@ -10553,7 +10601,7 @@ var createSession = function createSession(options) {
10553
10601
  logger.debug(LOG_PREFIX, "Publish stream " + name_);
10554
10602
 
10555
10603
  if (status_ !== STREAM_STATUS.NEW) {
10556
- throw new Error("Invalid stream state");
10604
+ throw new Error("Invalid stream state " + status_);
10557
10605
  }
10558
10606
 
10559
10607
  status_ = STREAM_STATUS.PENDING;
@@ -10587,7 +10635,8 @@ var createSession = function createSession(options) {
10587
10635
  connectionConfig: mediaOptions,
10588
10636
  connectionConstraints: mediaConnectionConstraints,
10589
10637
  customStream: constraints && constraints.customStream ? constraints.customStream : false,
10590
- videoContentHint: videoContentHint
10638
+ videoContentHint: videoContentHint,
10639
+ logger: logger
10591
10640
  }).then(function (newConnection) {
10592
10641
  mediaConnection = newConnection;
10593
10642
  return mediaConnection.createOffer({
@@ -11217,6 +11266,17 @@ var createSession = function createSession(options) {
11217
11266
  availableCallbacks.push(promise);
11218
11267
  });
11219
11268
  };
11269
+ /**
11270
+ * Get stream logger
11271
+ *
11272
+ * @returns {Object} Logger
11273
+ * @memberof Stream
11274
+ */
11275
+
11276
+
11277
+ var getLogger = function getLogger() {
11278
+ return streamLogger;
11279
+ };
11220
11280
 
11221
11281
  stream.play = play;
11222
11282
  stream.publish = publish;
@@ -11256,6 +11316,7 @@ var createSession = function createSession(options) {
11256
11316
  stream.switchToScreen = switchToScreen;
11257
11317
  stream.switchToCam = switchToCam;
11258
11318
  stream.sendData = sendData;
11319
+ stream.getLogger = getLogger;
11259
11320
  streams[id_] = stream;
11260
11321
  return stream;
11261
11322
  };
@@ -11464,6 +11525,17 @@ var createSession = function createSession(options) {
11464
11525
  }
11465
11526
 
11466
11527
  return sdp;
11528
+ };
11529
+ /**
11530
+ * Get session logger
11531
+ *
11532
+ * @returns {Object} Logger
11533
+ * @memberof Session
11534
+ */
11535
+
11536
+
11537
+ var getLogger = function getLogger() {
11538
+ return sessionLogger;
11467
11539
  }; //export Session
11468
11540
 
11469
11541
 
@@ -11479,7 +11551,8 @@ var createSession = function createSession(options) {
11479
11551
  session.submitBugReport = submitBugReport;
11480
11552
  session.startDebug = startDebug;
11481
11553
  session.stopDebug = stopDebug;
11482
- session.on = on; //save interface to global map
11554
+ session.on = on;
11555
+ session.getLogger = getLogger; //save interface to global map
11483
11556
 
11484
11557
  sessions[id_] = session;
11485
11558
  return session;
@@ -11515,165 +11588,168 @@ module.exports = {
11515
11588
  },{"./constants":38,"./flash-media-provider":1,"./media-source-media-provider":1,"./temasys-media-provider":1,"./util":40,"./webrtc-media-provider":41,"./websocket-media-provider":1,"kalmanjs":2,"promise-polyfill":4,"uuid":8,"webrtc-adapter":23}],40:[function(require,module,exports){
11516
11589
  'use strict';
11517
11590
 
11518
- module.exports = {
11519
- isEmptyObject: function isEmptyObject(obj) {
11520
- for (var name in obj) {
11521
- return false;
11522
- }
11591
+ var isEmptyObject = function isEmptyObject(obj) {
11592
+ for (var name in obj) {
11593
+ return false;
11594
+ }
11523
11595
 
11524
- return true;
11525
- },
11596
+ return true;
11597
+ };
11598
+ /**
11599
+ * Copy values of object own properties to array.
11600
+ *
11601
+ * @param obj
11602
+ * @returns {Array}
11603
+ */
11526
11604
 
11527
- /**
11528
- * Copy values of object own properties to array.
11529
- *
11530
- * @param obj
11531
- * @returns {Array}
11532
- */
11533
- copyObjectToArray: function copyObjectToArray(obj) {
11534
- var ret = [];
11535
11605
 
11536
- for (var prop in obj) {
11537
- if (obj.hasOwnProperty(prop)) {
11538
- ret.push(obj[prop]);
11539
- }
11606
+ var copyObjectToArray = function copyObjectToArray(obj) {
11607
+ var ret = [];
11608
+
11609
+ for (var prop in obj) {
11610
+ if (obj.hasOwnProperty(prop)) {
11611
+ ret.push(obj[prop]);
11540
11612
  }
11613
+ }
11541
11614
 
11542
- return ret;
11543
- },
11615
+ return ret;
11616
+ };
11617
+ /**
11618
+ * Copy src properties to dst object.
11619
+ * Will overwrite dst prop with src prop in case of dst prop exist.
11620
+ */
11544
11621
 
11545
- /**
11546
- * Copy src properties to dst object.
11547
- * Will overwrite dst prop with src prop in case of dst prop exist.
11548
- */
11549
- copyObjectPropsToAnotherObject: function copyObjectPropsToAnotherObject(src, dst) {
11550
- for (var prop in src) {
11551
- if (src.hasOwnProperty(prop)) {
11552
- dst[prop] = src[prop];
11553
- }
11622
+
11623
+ var copyObjectPropsToAnotherObject = function copyObjectPropsToAnotherObject(src, dst) {
11624
+ for (var prop in src) {
11625
+ if (src.hasOwnProperty(prop)) {
11626
+ dst[prop] = src[prop];
11554
11627
  }
11555
- },
11556
- processRtcStatsReport: function processRtcStatsReport(browser, report) {
11557
- var result = {};
11628
+ }
11629
+ };
11558
11630
 
11559
- if (browser == "chrome") {
11560
- /**
11561
- * Report types: googComponent, googCandidatePair, googCertificate, googLibjingleSession, googTrack, ssrc
11562
- */
11563
- var gotResult = false;
11631
+ var processRtcStatsReport = function processRtcStatsReport(browser, report) {
11632
+ var result = {};
11564
11633
 
11565
- if (report.type && report.type == "googCandidatePair") {
11566
- //check if this is active pair
11567
- if (report.googActiveConnection == "true") {
11568
- gotResult = true;
11569
- }
11570
- }
11634
+ if (browser == "chrome") {
11635
+ /**
11636
+ * Report types: googComponent, googCandidatePair, googCertificate, googLibjingleSession, googTrack, ssrc
11637
+ */
11638
+ var gotResult = false;
11571
11639
 
11572
- if (report.type && report.type == "ssrc") {
11640
+ if (report.type && report.type == "googCandidatePair") {
11641
+ //check if this is active pair
11642
+ if (report.googActiveConnection == "true") {
11573
11643
  gotResult = true;
11574
11644
  }
11645
+ }
11575
11646
 
11576
- if (gotResult) {
11577
- for (var k in report) {
11578
- if (report.hasOwnProperty(k)) {
11579
- result[k] = report[k];
11580
- }
11647
+ if (report.type && report.type == "ssrc") {
11648
+ gotResult = true;
11649
+ }
11650
+
11651
+ if (gotResult) {
11652
+ for (var k in report) {
11653
+ if (report.hasOwnProperty(k)) {
11654
+ result[k] = report[k];
11581
11655
  }
11582
11656
  }
11657
+ }
11583
11658
 
11584
- return result;
11585
- } else if (browser == "firefox") {
11586
- /**
11587
- * RTCStatsReport http://mxr.mozilla.org/mozilla-central/source/dom/webidl/RTCStatsReport.webidl
11588
- */
11589
- if (report.type && (report.type == "outboundrtp" || report.type == "inboundrtp") && report.id.indexOf("rtcp") == -1) {
11590
- result = {};
11659
+ return result;
11660
+ } else if (browser == "firefox") {
11661
+ /**
11662
+ * RTCStatsReport http://mxr.mozilla.org/mozilla-central/source/dom/webidl/RTCStatsReport.webidl
11663
+ */
11664
+ if (report.type && (report.type == "outboundrtp" || report.type == "inboundrtp") && report.id.indexOf("rtcp") == -1) {
11665
+ result = {};
11591
11666
 
11592
- for (var k in report) {
11593
- if (report.hasOwnProperty(k)) {
11594
- result[k] = report[k];
11595
- }
11667
+ for (var k in report) {
11668
+ if (report.hasOwnProperty(k)) {
11669
+ result[k] = report[k];
11596
11670
  }
11597
11671
  }
11598
-
11599
- return result;
11600
- } else {
11601
- return result;
11602
11672
  }
11603
11673
 
11604
- ;
11674
+ return result;
11675
+ } else {
11676
+ return result;
11677
+ }
11678
+ };
11679
+
11680
+ var Browser = {
11681
+ isIE: function isIE() {
11682
+ return (
11683
+ /*@cc_on!@*/
11684
+ false || !!document.documentMode
11685
+ );
11605
11686
  },
11606
- Browser: {
11607
- isIE: function isIE() {
11608
- return (
11609
- /*@cc_on!@*/
11610
- false || !!document.documentMode
11611
- );
11612
- },
11613
- isFirefox: function isFirefox() {
11614
- return typeof InstallTrigger !== 'undefined';
11615
- },
11616
- isChrome: function isChrome() {
11617
- return !!window.chrome && /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor) && !/OPR/.test(navigator.userAgent);
11618
- },
11619
- isEdge: function isEdge() {
11620
- return !isIE && !!window.StyleMedia;
11621
- },
11622
- isOpera: function isOpera() {
11623
- return !!window.opr && !!opr.addons || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
11624
- },
11625
- isiOS: function isiOS() {
11626
- return /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
11627
- },
11628
- isSafari: function isSafari() {
11629
- var userAgent = navigator.userAgent.toLowerCase();
11630
- return /(safari|applewebkit)/i.test(userAgent) && !userAgent.includes("chrome") && !userAgent.includes("android");
11631
- },
11632
- isAndroid: function isAndroid() {
11633
- return navigator.userAgent.toLowerCase().indexOf("android") > -1;
11634
- },
11635
- isSafariWebRTC: function isSafariWebRTC() {
11636
- return navigator.mediaDevices && this.isSafari();
11637
- },
11638
- isSamsungBrowser: function isSamsungBrowser() {
11639
- return /SamsungBrowser/i.test(navigator.userAgent);
11640
- },
11641
- isAndroidFirefox: function isAndroidFirefox() {
11642
- return this.isAndroid() && /Firefox/i.test(navigator.userAgent);
11643
- }
11687
+ isFirefox: function isFirefox() {
11688
+ return typeof InstallTrigger !== 'undefined';
11644
11689
  },
11645
- SDP: {
11646
- matchPrefix: function matchPrefix(sdp, prefix) {
11647
- var parts = sdp.trim().split('\n').map(function (line) {
11648
- return line.trim();
11649
- });
11650
- return parts.filter(function (line) {
11651
- return line.indexOf(prefix) === 0;
11652
- });
11653
- },
11654
- writeFmtp: function writeFmtp(sdp, param, codec) {
11655
- var sdpArray = sdp.split("\n");
11656
- var i;
11690
+ isChrome: function isChrome() {
11691
+ return !!window.chrome && /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor) && !/OPR/.test(navigator.userAgent);
11692
+ },
11693
+ isEdge: function isEdge() {
11694
+ return !isIE && !!window.StyleMedia;
11695
+ },
11696
+ isOpera: function isOpera() {
11697
+ return !!window.opr && !!opr.addons || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
11698
+ },
11699
+ isiOS: function isiOS() {
11700
+ return /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
11701
+ },
11702
+ isSafari: function isSafari() {
11703
+ var userAgent = navigator.userAgent.toLowerCase();
11704
+ return /(safari|applewebkit)/i.test(userAgent) && !userAgent.includes("chrome") && !userAgent.includes("android");
11705
+ },
11706
+ isAndroid: function isAndroid() {
11707
+ return navigator.userAgent.toLowerCase().indexOf("android") > -1;
11708
+ },
11709
+ isSafariWebRTC: function isSafariWebRTC() {
11710
+ return navigator.mediaDevices && this.isSafari();
11711
+ },
11712
+ isSamsungBrowser: function isSamsungBrowser() {
11713
+ return /SamsungBrowser/i.test(navigator.userAgent);
11714
+ },
11715
+ isAndroidFirefox: function isAndroidFirefox() {
11716
+ return this.isAndroid() && /Firefox/i.test(navigator.userAgent);
11717
+ }
11718
+ };
11719
+ var SDP = {
11720
+ matchPrefix: function matchPrefix(sdp, prefix) {
11721
+ var parts = sdp.trim().split('\n').map(function (line) {
11722
+ return line.trim();
11723
+ });
11724
+ return parts.filter(function (line) {
11725
+ return line.indexOf(prefix) === 0;
11726
+ });
11727
+ },
11728
+ writeFmtp: function writeFmtp(sdp, param, codec) {
11729
+ var sdpArray = sdp.split("\n");
11730
+ var i;
11657
11731
 
11658
- for (i = 0; i < sdpArray.length; i++) {
11659
- if (sdpArray[i].search(codec) != -1 && sdpArray[i].indexOf("a=rtpmap") == 0) {
11660
- sdpArray[i] += "\na=fmtp:" + sdpArray[i].match(/[0-9]+/)[0] + " " + param + "\r";
11661
- }
11662
- } //normalize sdp after modifications
11732
+ for (i = 0; i < sdpArray.length; i++) {
11733
+ if (sdpArray[i].search(codec) != -1 && sdpArray[i].indexOf("a=rtpmap") == 0) {
11734
+ sdpArray[i] += "\na=fmtp:" + sdpArray[i].match(/[0-9]+/)[0] + " " + param + "\r";
11735
+ }
11736
+ } //normalize sdp after modifications
11663
11737
 
11664
11738
 
11665
- var result = "";
11739
+ var result = "";
11666
11740
 
11667
- for (i = 0; i < sdpArray.length; i++) {
11668
- if (sdpArray[i] != "") {
11669
- result += sdpArray[i] + "\n";
11670
- }
11741
+ for (i = 0; i < sdpArray.length; i++) {
11742
+ if (sdpArray[i] != "") {
11743
+ result += sdpArray[i] + "\n";
11671
11744
  }
11672
-
11673
- return result;
11674
11745
  }
11675
- },
11676
- logger: {
11746
+
11747
+ return result;
11748
+ }
11749
+ };
11750
+
11751
+ var logger = function logger() {
11752
+ return {
11677
11753
  init: function init(verbosity, enablePushLogs, customLogger, enableLogs) {
11678
11754
  switch (verbosity.toUpperCase()) {
11679
11755
  case "DEBUG":
@@ -11854,92 +11930,104 @@ module.exports = {
11854
11930
  default:
11855
11931
  this.verbosity = 2;
11856
11932
  }
11857
-
11858
- ;
11859
11933
  }
11860
- },
11861
- stripCodecs: function stripCodecs(sdp, codecs) {
11862
- if (!codecs.length) return sdp;
11863
- var sdpArray = sdp.split("\n");
11864
- var codecsArray = codecs.split(","); //search and delete codecs line
11934
+ };
11935
+ };
11865
11936
 
11866
- var pt = [];
11867
- var i;
11937
+ var stripCodecs = function stripCodecs(sdp, codecs) {
11938
+ if (!codecs.length) return sdp;
11939
+ var sdpArray = sdp.split("\n");
11940
+ var codecsArray = codecs.split(","); //search and delete codecs line
11868
11941
 
11869
- for (var p = 0; p < codecsArray.length; p++) {
11870
- console.log("Searching for codec " + codecsArray[p]);
11942
+ var pt = [];
11943
+ var i;
11871
11944
 
11872
- for (i = 0; i < sdpArray.length; i++) {
11873
- if (sdpArray[i].search(new RegExp(codecsArray[p], 'i')) != -1 && sdpArray[i].indexOf("a=rtpmap") == 0) {
11874
- console.log(codecsArray[p] + " detected");
11875
- pt.push(sdpArray[i].match(/[0-9]+/)[0]);
11876
- sdpArray[i] = "";
11877
- }
11945
+ for (var p = 0; p < codecsArray.length; p++) {
11946
+ console.log("Searching for codec " + codecsArray[p]);
11947
+
11948
+ for (i = 0; i < sdpArray.length; i++) {
11949
+ if (sdpArray[i].search(new RegExp(codecsArray[p], 'i')) != -1 && sdpArray[i].indexOf("a=rtpmap") == 0) {
11950
+ console.log(codecsArray[p] + " detected");
11951
+ pt.push(sdpArray[i].match(/[0-9]+/)[0]);
11952
+ sdpArray[i] = "";
11878
11953
  }
11879
11954
  }
11955
+ }
11880
11956
 
11881
- if (pt.length) {
11882
- //searching for fmtp
11883
- for (p = 0; p < pt.length; p++) {
11884
- for (i = 0; i < sdpArray.length; i++) {
11885
- if (sdpArray[i].search("a=fmtp:" + pt[p]) != -1 || sdpArray[i].search("a=rtcp-fb:" + pt[p]) != -1) {
11886
- sdpArray[i] = "";
11887
- }
11957
+ if (pt.length) {
11958
+ //searching for fmtp
11959
+ for (p = 0; p < pt.length; p++) {
11960
+ for (i = 0; i < sdpArray.length; i++) {
11961
+ if (sdpArray[i].search("a=fmtp:" + pt[p]) != -1 || sdpArray[i].search("a=rtcp-fb:" + pt[p]) != -1) {
11962
+ sdpArray[i] = "";
11888
11963
  }
11889
- } //delete entries from m= line
11964
+ }
11965
+ } //delete entries from m= line
11890
11966
 
11891
11967
 
11892
- for (i = 0; i < sdpArray.length; i++) {
11893
- if (sdpArray[i].search("m=audio") != -1 || sdpArray[i].search("m=video") != -1) {
11894
- var mLineSplitted = sdpArray[i].split(" ");
11895
- var newMLine = "";
11968
+ for (i = 0; i < sdpArray.length; i++) {
11969
+ if (sdpArray[i].search("m=audio") != -1 || sdpArray[i].search("m=video") != -1) {
11970
+ var mLineSplitted = sdpArray[i].split(" ");
11971
+ var newMLine = "";
11896
11972
 
11897
- for (var m = 0; m < mLineSplitted.length; m++) {
11898
- if (pt.indexOf(mLineSplitted[m].trim()) == -1 || m <= 2) {
11899
- newMLine += mLineSplitted[m];
11973
+ for (var m = 0; m < mLineSplitted.length; m++) {
11974
+ if (pt.indexOf(mLineSplitted[m].trim()) == -1 || m <= 2) {
11975
+ newMLine += mLineSplitted[m];
11900
11976
 
11901
- if (m < mLineSplitted.length - 1) {
11902
- newMLine = newMLine + " ";
11903
- }
11977
+ if (m < mLineSplitted.length - 1) {
11978
+ newMLine = newMLine + " ";
11904
11979
  }
11905
11980
  }
11906
-
11907
- sdpArray[i] = newMLine;
11908
11981
  }
11982
+
11983
+ sdpArray[i] = newMLine;
11909
11984
  }
11910
- } //normalize sdp after modifications
11985
+ }
11986
+ } //normalize sdp after modifications
11911
11987
 
11912
11988
 
11913
- var result = "";
11989
+ var result = "";
11914
11990
 
11915
- for (i = 0; i < sdpArray.length; i++) {
11916
- if (sdpArray[i] != "") {
11917
- result += sdpArray[i] + "\n";
11918
- }
11991
+ for (i = 0; i < sdpArray.length; i++) {
11992
+ if (sdpArray[i] != "") {
11993
+ result += sdpArray[i] + "\n";
11919
11994
  }
11995
+ }
11920
11996
 
11921
- return result;
11922
- },
11923
- getCurrentCodecAndSampleRate: function getCurrentCodecAndSampleRate(sdp, mediaType) {
11924
- var rows = sdp.split("\n");
11925
- var codecPt;
11997
+ return result;
11998
+ };
11926
11999
 
11927
- for (var i = 0; i < rows.length; i++) {
11928
- if (codecPt && rows[i].indexOf("a=rtpmap:" + codecPt) != -1) {
11929
- var ret = {};
11930
- ret.name = rows[i].split(" ")[1].split("/")[0];
11931
- ret.sampleRate = rows[i].split(" ")[1].split("/")[1];
11932
- return ret;
11933
- } //WCS-2136. WebRTC statistics doesn't work for VP8
12000
+ var getCurrentCodecAndSampleRate = function getCurrentCodecAndSampleRate(sdp, mediaType) {
12001
+ var rows = sdp.split("\n");
12002
+ var codecPt;
11934
12003
 
12004
+ for (var i = 0; i < rows.length; i++) {
12005
+ if (codecPt && rows[i].indexOf("a=rtpmap:" + codecPt) != -1) {
12006
+ var ret = {};
12007
+ ret.name = rows[i].split(" ")[1].split("/")[0];
12008
+ ret.sampleRate = rows[i].split(" ")[1].split("/")[1];
12009
+ return ret;
12010
+ } //WCS-2136. WebRTC statistics doesn't work for VP8
11935
12011
 
11936
- if (rows[i].indexOf("m=" + mediaType) != -1) {
11937
- codecPt = rows[i].split(" ")[3].trim();
11938
- }
12012
+
12013
+ if (rows[i].indexOf("m=" + mediaType) != -1) {
12014
+ codecPt = rows[i].split(" ")[3].trim();
11939
12015
  }
11940
12016
  }
11941
12017
  };
11942
12018
 
12019
+ module.exports = {
12020
+ isEmptyObject: isEmptyObject,
12021
+ copyObjectToArray: copyObjectToArray,
12022
+ copyObjectPropsToAnotherObject: copyObjectPropsToAnotherObject,
12023
+ processRtcStatsReport: processRtcStatsReport,
12024
+ Browser: Browser,
12025
+ SDP: SDP,
12026
+ logger: logger,
12027
+ stripCodecs: stripCodecs,
12028
+ getCurrentCodecAndSampleRate: getCurrentCodecAndSampleRate
12029
+ };
12030
+
11943
12031
  },{}],41:[function(require,module,exports){
11944
12032
  'use strict';
11945
12033
 
@@ -11973,6 +12061,11 @@ var mics = [];
11973
12061
 
11974
12062
  var createConnection = function createConnection(options) {
11975
12063
  return new Promise(function (resolve, reject) {
12064
+ // Set connection logger #WCS-2434
12065
+ if (options.logger) {
12066
+ logger = options.logger;
12067
+ }
12068
+
11976
12069
  var id = options.id;
11977
12070
  var connectionConfig = options.connectionConfig || {
11978
12071
  "iceServers": []
@@ -12103,9 +12196,9 @@ var createConnection = function createConnection(options) {
12103
12196
  function setContentHint(stream, hint) {
12104
12197
  stream.getVideoTracks().forEach(function (track) {
12105
12198
  if (track.contentHint === undefined) {
12106
- logger.warn("contentHint unsupported");
12199
+ logger.warn(LOG_PREFIX, "Track contentHint unsupported");
12107
12200
  } else {
12108
- logger.info("Set video track contentHint to " + hint);
12201
+ logger.info(LOG_PREFIX, "Set video track contentHint to " + hint);
12109
12202
  track.contentHint = hint;
12110
12203
  }
12111
12204
  });
@@ -12142,7 +12235,7 @@ var createConnection = function createConnection(options) {
12142
12235
  //WCS-2771 add playback delay
12143
12236
  connection.getReceivers().forEach(function (track) {
12144
12237
  if (track.playoutDelayHint === undefined) {
12145
- logger.warn("playout delay unsupported");
12238
+ logger.warn(LOG_PREFIX, "Playout delay unsupported");
12146
12239
  }
12147
12240
 
12148
12241
  track.playoutDelayHint = playoutDelay;
@@ -12535,7 +12628,7 @@ var createConnection = function createConnection(options) {
12535
12628
  localVideo.srcObject.addTrack(audioTrack);
12536
12629
  }
12537
12630
 
12538
- logger.info("Switch camera to " + cam);
12631
+ logger.info(LOG_PREFIX, "Switch camera to " + cam);
12539
12632
  resolve(cam);
12540
12633
  })["catch"](function (reason) {
12541
12634
  logger.error(LOG_PREFIX, reason);
@@ -12593,7 +12686,7 @@ var createConnection = function createConnection(options) {
12593
12686
  localVideo.srcObject.addTrack(videoTrack);
12594
12687
  }
12595
12688
 
12596
- logger.info("Switch mic to " + mic);
12689
+ logger.info(LOG_PREFIX, "Switch mic to " + mic);
12597
12690
  resolve(mic);
12598
12691
  })["catch"](function (reason) {
12599
12692
  logger.error(LOG_PREFIX, reason);
@@ -12687,7 +12780,7 @@ var createConnection = function createConnection(options) {
12687
12780
  localVideo.srcObject.addTrack(currentAudioTrack);
12688
12781
  }
12689
12782
  });
12690
- logger.info("Switch to screen");
12783
+ logger.info(LOG_PREFIX, "Switch to screen");
12691
12784
  screenShare = true;
12692
12785
  resolve();
12693
12786
  };
@@ -12719,7 +12812,7 @@ var createConnection = function createConnection(options) {
12719
12812
  });
12720
12813
  }
12721
12814
 
12722
- logger.info("Switch to cam");
12815
+ logger.info(LOG_PREFIX, "Switch to cam");
12723
12816
  screenShare = false;
12724
12817
  };
12725
12818