@flashphoner/websdk 2.0.210 → 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.
@@ -11589,7 +11589,12 @@ var createConnection = function createConnection(options) {
11589
11589
  var id = options.id;
11590
11590
  var authToken = options.authToken;
11591
11591
  var display = options.display || options.localDisplay;
11592
- var flashBufferTime = options.flashBufferTime || 0;
11592
+ var flashBufferTime = options.flashBufferTime || 0; // Set connection logger #WCS-2434
11593
+
11594
+ if (options.logger) {
11595
+ logger = options.logger;
11596
+ }
11597
+
11593
11598
  var url = getConnectionUrl(options.mainUrl, options.flashProto, options.flashPort); //todo state from flash instance
11594
11599
 
11595
11600
  var state = function state() {
@@ -12210,8 +12215,9 @@ var constants = require("./constants");
12210
12215
 
12211
12216
  var util = require('./util');
12212
12217
 
12213
- var logger = require('./util').logger;
12218
+ var LoggerObject = require('./util').logger;
12214
12219
 
12220
+ var coreLogger;
12215
12221
  var loggerConf = {
12216
12222
  push: false,
12217
12223
  severity: "INFO"
@@ -12259,7 +12265,7 @@ var disableConnectionQualityCalculation;
12259
12265
  * @param {String=} options.decoderLocation Location of video-worker2.js file
12260
12266
  * @param {String=} options.screenSharingExtensionId Chrome screen sharing extension id
12261
12267
  * @param {Object=} options.constraints Default local media constraints
12262
- * @param {Object=} options.logger Enable logging
12268
+ * @param {Object=} options.logger Core logger options
12263
12269
  * @throws {Error} Error if none of MediaProviders available
12264
12270
  * @memberof Flashphoner
12265
12271
  */
@@ -12268,16 +12274,10 @@ var init = function init(options) {
12268
12274
  if (!initialized) {
12269
12275
  if (!options) {
12270
12276
  options = {};
12271
- }
12277
+ } // init global logger
12272
12278
 
12273
- loggerConf = options.logger || loggerConf;
12274
12279
 
12275
- if (options.logger !== null) {
12276
- loggerConf.enableLogs = true;
12277
- } // init logger
12278
-
12279
-
12280
- logger.init(loggerConf.severity || "INFO", loggerConf.push || false, loggerConf.customLogger, loggerConf.enableLogs);
12280
+ coreLogger = createLogger(options.logger);
12281
12281
  var waitingTemasys = false;
12282
12282
 
12283
12283
  try {
@@ -12298,7 +12298,7 @@ var init = function init(options) {
12298
12298
  constraints: options.constraints || getDefaultMediaConstraints(),
12299
12299
  extensionId: options.screenSharingExtensionId,
12300
12300
  audioContext: audioContext,
12301
- logger: logger,
12301
+ logger: coreLogger,
12302
12302
  createMicGainNode: enableGainNode
12303
12303
  };
12304
12304
  webRtcProvider.configure(webRtcConf);
@@ -12315,7 +12315,7 @@ var init = function init(options) {
12315
12315
  var webRtcConf = {
12316
12316
  constraints: options.constraints || getDefaultMediaConstraints(),
12317
12317
  extensionId: options.screenSharingExtensionId,
12318
- logger: logger
12318
+ logger: coreLogger
12319
12319
  };
12320
12320
  webRtcProvider.configure(webRtcConf); // Just reorder media provider list
12321
12321
 
@@ -12343,7 +12343,7 @@ var init = function init(options) {
12343
12343
  var flashConf = {
12344
12344
  constraints: options.constraints || getDefaultMediaConstraints(),
12345
12345
  flashMediaProviderSwfLocation: options.flashMediaProviderSwfLocation,
12346
- logger: logger
12346
+ logger: coreLogger
12347
12347
  };
12348
12348
  flashProvider.configure(flashConf);
12349
12349
  }
@@ -12367,7 +12367,7 @@ var init = function init(options) {
12367
12367
  receiverLocation: options.receiverLocation,
12368
12368
  decoderLocation: options.decoderLocation,
12369
12369
  audioContext: audioContext,
12370
- logger: logger
12370
+ logger: coreLogger
12371
12371
  };
12372
12372
  websocketProvider.configure(wsConf);
12373
12373
  } //check at least 1 provider available
@@ -12389,7 +12389,7 @@ var init = function init(options) {
12389
12389
  MediaProvider = _MediaProvider;
12390
12390
  }
12391
12391
  } else {
12392
- logger.warn(LOG_PREFIX, "Preferred media provider is not available.");
12392
+ corelogger.warn(LOG_PREFIX, "Preferred media provider is not available.");
12393
12393
  }
12394
12394
  }
12395
12395
 
@@ -12417,7 +12417,7 @@ var init = function init(options) {
12417
12417
  options.mediaProvidersReadyCallback(Object.keys(MediaProvider));
12418
12418
  }
12419
12419
 
12420
- logger.info(LOG_PREFIX, "Initialized");
12420
+ coreLogger.info(LOG_PREFIX, "Initialized");
12421
12421
  initialized = true;
12422
12422
  }
12423
12423
  };
@@ -12456,7 +12456,7 @@ var playFirstVideo = function playFirstVideo(display, isLocal, src) {
12456
12456
  }
12457
12457
  };
12458
12458
  /**
12459
- * Get logger
12459
+ * Get core logger
12460
12460
  *
12461
12461
  * @returns {Object} Logger
12462
12462
  * @memberof Flashphoner
@@ -12467,7 +12467,7 @@ var getLogger = function getLogger() {
12467
12467
  if (!initialized) {
12468
12468
  console.warn("Initialize API first.");
12469
12469
  } else {
12470
- return logger;
12470
+ return coreLogger;
12471
12471
  }
12472
12472
  };
12473
12473
  /**
@@ -12640,6 +12640,31 @@ var getSessions = function getSessions() {
12640
12640
 
12641
12641
  var getSession = function getSession(id) {
12642
12642
  return sessions[id];
12643
+ }; // Get logger configuration from options
12644
+
12645
+
12646
+ var getLoggerConf = function getLoggerConf(loggerOptions) {
12647
+ var conf = loggerOptions || loggerConf;
12648
+
12649
+ if (loggerOptions !== null) {
12650
+ conf.enableLogs = true;
12651
+ }
12652
+
12653
+ return conf;
12654
+ }; // Create a new logger object
12655
+
12656
+
12657
+ var createLogger = function createLogger(loggerOptions) {
12658
+ var parentLogger = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : coreLogger;
12659
+ var newLogger = parentLogger;
12660
+
12661
+ if (newLogger === undefined || loggerOptions != undefined) {
12662
+ var loggerConf = getLoggerConf(loggerOptions);
12663
+ newLogger = new LoggerObject();
12664
+ newLogger.init(loggerConf.severity || "INFO", loggerConf.push || false, loggerConf.customLogger, loggerConf.enableLogs);
12665
+ }
12666
+
12667
+ return newLogger;
12643
12668
  };
12644
12669
  /**
12645
12670
  * Create new session and connect to server.
@@ -12659,6 +12684,7 @@ var getSession = function getSession(id) {
12659
12684
  * @param {Integer=} options.pingInterval Server ping interval in milliseconds [0]
12660
12685
  * @param {Integer=} options.receiveProbes A maximum subsequental pings received missing count [0]
12661
12686
  * @param {Integer=} options.probesInterval Interval to check subsequental pings received [0]
12687
+ * @param {Object=} options.logger Session logger options
12662
12688
  * @returns {Session} Created session
12663
12689
  * @throws {Error} Error if API is not initialized
12664
12690
  * @throws {TypeError} Error if options.urlServer is not specified
@@ -12673,8 +12699,12 @@ var createSession = function createSession(options) {
12673
12699
 
12674
12700
  if (!options || !options.urlServer) {
12675
12701
  throw new TypeError("options.urlServer must be provided");
12676
- }
12702
+ } // Set session logger #WCS-2434
12677
12703
 
12704
+
12705
+ var sessionLogger = createLogger(options.logger); // Override logger for all low level operations
12706
+
12707
+ var logger = sessionLogger;
12678
12708
  var id_ = uuid_v1();
12679
12709
  var sessionStatus = SESSION_STATUS.PENDING;
12680
12710
  var urlServer = options.urlServer;
@@ -12780,7 +12810,7 @@ var createSession = function createSession(options) {
12780
12810
  if (timeout != undefined && timeout > 0) {
12781
12811
  connectionTimeout = setTimeout(function () {
12782
12812
  if (wsConnection.readyState == 0) {
12783
- console.log("WS connection timeout");
12813
+ logger.warn(LOG_PREFIX, "WS connection timeout");
12784
12814
  wsConnection.close();
12785
12815
  }
12786
12816
  }, timeout);
@@ -12804,7 +12834,7 @@ var createSession = function createSession(options) {
12804
12834
  mediaProviders: Object.keys(MediaProvider),
12805
12835
  keepAlive: keepAlive,
12806
12836
  authToken: authToken,
12807
- clientVersion: "2.0.210",
12837
+ clientVersion: "2.0.215",
12808
12838
  clientOSVersion: window.navigator.appVersion,
12809
12839
  clientBrowserVersion: window.navigator.userAgent,
12810
12840
  msePacketizationVersion: 2,
@@ -13110,6 +13140,7 @@ var createSession = function createSession(options) {
13110
13140
  * @param {Array<string>=} options.sipSDP Array of custom SDP params (ex. bandwidth (b=))
13111
13141
  * @param {Array<string>=} options.sipHeaders Array of custom SIP headers
13112
13142
  * @param {string=} options.videoContentHint Video content hint for browser ('detail' by default to maintain resolution), {@link Flashphoner.constants.CONTENT_HINT_TYPE}
13143
+ * @param {Object=} options.logger Call logger options
13113
13144
  * @param {sdpHook} sdpHook The callback that handles sdp from the server
13114
13145
  * @returns {Call} Call
13115
13146
  * @throws {TypeError} Error if no options provided
@@ -13122,15 +13153,18 @@ var createSession = function createSession(options) {
13122
13153
  var createCall = function createCall(options) {
13123
13154
  //check session state
13124
13155
  if (sessionStatus !== SESSION_STATUS.REGISTERED && sessionStatus !== SESSION_STATUS.ESTABLISHED) {
13125
- logger.info(LOG_PREFIX, "Status is " + sessionStatus);
13126
- throw new Error('Invalid session state');
13156
+ throw new Error('Invalid session state ' + sessionStatus);
13127
13157
  } //check options
13128
13158
 
13129
13159
 
13130
13160
  if (!options) {
13131
13161
  throw new TypeError("options must be provided");
13132
- }
13162
+ } // Set call logger #WCS-2434
13133
13163
 
13164
+
13165
+ var callLogger = createLogger(options.logger, sessionLogger); // Override logger for all low level operations
13166
+
13167
+ var logger = callLogger;
13134
13168
  var login = appKey == 'clickToCallApp' ? '' : cConfig.sipLogin;
13135
13169
  var caller_ = options.incoming ? options.caller : login;
13136
13170
  var callee_ = options.callee;
@@ -13276,7 +13310,8 @@ var createSession = function createSession(options) {
13276
13310
  constraints: constraints,
13277
13311
  connectionConfig: mediaOptions,
13278
13312
  audioOutputId: audioOutputId,
13279
- videoContentHint: videoContentHint
13313
+ videoContentHint: videoContentHint,
13314
+ logger: logger
13280
13315
  }).then(function (newConnection) {
13281
13316
  mediaConnection = newConnection;
13282
13317
  return mediaConnection.createOffer({
@@ -13862,7 +13897,7 @@ var createSession = function createSession(options) {
13862
13897
  /**
13863
13898
  * Get call info
13864
13899
  * @returns {string} Info
13865
- * @memberof Stream
13900
+ * @memberof Call
13866
13901
  * @inner
13867
13902
  */
13868
13903
 
@@ -13873,7 +13908,7 @@ var createSession = function createSession(options) {
13873
13908
  /**
13874
13909
  * Get stream error info
13875
13910
  * @returns {string} Error info
13876
- * @memberof Stream
13911
+ * @memberof Call
13877
13912
  * @inner
13878
13913
  */
13879
13914
 
@@ -13881,6 +13916,17 @@ var createSession = function createSession(options) {
13881
13916
  var getErrorInfo = function getErrorInfo() {
13882
13917
  return errorInfo_;
13883
13918
  };
13919
+ /**
13920
+ * Get call logger
13921
+ *
13922
+ * @returns {Object} Logger
13923
+ * @memberof Call
13924
+ */
13925
+
13926
+
13927
+ var getLogger = function getLogger() {
13928
+ return callLogger;
13929
+ };
13884
13930
 
13885
13931
  call.call = call_;
13886
13932
  call.answer = answer;
@@ -13912,6 +13958,7 @@ var createSession = function createSession(options) {
13912
13958
  call.switchMic = switchMic;
13913
13959
  call.switchToScreen = switchToScreen;
13914
13960
  call.switchToCam = switchToCam;
13961
+ call.getLogger = getLogger;
13915
13962
  calls[id_] = call;
13916
13963
  return call;
13917
13964
  };
@@ -13958,6 +14005,7 @@ var createSession = function createSession(options) {
13958
14005
  * @param {string=} options.useCanvasMediaStream EXPERIMENTAL: when publish bind browser's media stream to the canvas. It can be useful for image filtering
13959
14006
  * @param {string=} options.videoContentHint Video content hint for browser ('detail' by default to maintain resolution), {@link Flashphoner.constants.CONTENT_HINT_TYPE}
13960
14007
  * @param {Boolean=} options.unmutePlayOnStart Unmute playback on start. May be used after user gesture only, so set 'unmutePlayOnStart: false' for autoplay
14008
+ * @param {Object=} options.logger Stream logger options
13961
14009
  * @param {sdpHook} sdpHook The callback that handles sdp from the server
13962
14010
  * @returns {Stream} Stream
13963
14011
  * @throws {TypeError} Error if no options provided
@@ -13973,7 +14021,7 @@ var createSession = function createSession(options) {
13973
14021
  var availableCallbacks = []; //check session state
13974
14022
 
13975
14023
  if (sessionStatus !== SESSION_STATUS.ESTABLISHED) {
13976
- throw new Error('Invalid session state');
14024
+ throw new Error('Invalid session state ' + sessionStatus);
13977
14025
  } //check options
13978
14026
 
13979
14027
 
@@ -13983,8 +14031,12 @@ var createSession = function createSession(options) {
13983
14031
 
13984
14032
  if (!options.name) {
13985
14033
  throw new TypeError("options.name must be provided");
13986
- }
14034
+ } // Set stream logger #WCS-2434
14035
+
14036
+
14037
+ var streamLogger = createLogger(options.logger, sessionLogger); // Override logger for all low level operations
13987
14038
 
14039
+ var logger = streamLogger;
13988
14040
  var clientKf = new KalmanFilter();
13989
14041
  var serverKf = new KalmanFilter();
13990
14042
  var id_ = uuid_v1();
@@ -14228,7 +14280,7 @@ var createSession = function createSession(options) {
14228
14280
  logger.debug(LOG_PREFIX, "Play stream " + name_);
14229
14281
 
14230
14282
  if (status_ !== STREAM_STATUS.NEW) {
14231
- throw new Error("Invalid stream state");
14283
+ throw new Error("Invalid stream state " + status_);
14232
14284
  }
14233
14285
 
14234
14286
  status_ = STREAM_STATUS.PENDING; //create mediaProvider connection
@@ -14247,7 +14299,8 @@ var createSession = function createSession(options) {
14247
14299
  audioOutputId: audioOutputId,
14248
14300
  remoteVideo: remoteVideo,
14249
14301
  playoutDelay: playoutDelay,
14250
- unmutePlayOnStart: unmutePlayOnStart
14302
+ unmutePlayOnStart: unmutePlayOnStart,
14303
+ logger: logger
14251
14304
  }, streamRefreshHandlers[id_]).then(function (newConnection) {
14252
14305
  mediaConnection = newConnection;
14253
14306
 
@@ -14311,7 +14364,7 @@ var createSession = function createSession(options) {
14311
14364
  logger.debug(LOG_PREFIX, "Publish stream " + name_);
14312
14365
 
14313
14366
  if (status_ !== STREAM_STATUS.NEW) {
14314
- throw new Error("Invalid stream state");
14367
+ throw new Error("Invalid stream state " + status_);
14315
14368
  }
14316
14369
 
14317
14370
  status_ = STREAM_STATUS.PENDING;
@@ -14345,7 +14398,8 @@ var createSession = function createSession(options) {
14345
14398
  connectionConfig: mediaOptions,
14346
14399
  connectionConstraints: mediaConnectionConstraints,
14347
14400
  customStream: constraints && constraints.customStream ? constraints.customStream : false,
14348
- videoContentHint: videoContentHint
14401
+ videoContentHint: videoContentHint,
14402
+ logger: logger
14349
14403
  }).then(function (newConnection) {
14350
14404
  mediaConnection = newConnection;
14351
14405
  return mediaConnection.createOffer({
@@ -14975,6 +15029,17 @@ var createSession = function createSession(options) {
14975
15029
  availableCallbacks.push(promise);
14976
15030
  });
14977
15031
  };
15032
+ /**
15033
+ * Get stream logger
15034
+ *
15035
+ * @returns {Object} Logger
15036
+ * @memberof Stream
15037
+ */
15038
+
15039
+
15040
+ var getLogger = function getLogger() {
15041
+ return streamLogger;
15042
+ };
14978
15043
 
14979
15044
  stream.play = play;
14980
15045
  stream.publish = publish;
@@ -15014,6 +15079,7 @@ var createSession = function createSession(options) {
15014
15079
  stream.switchToScreen = switchToScreen;
15015
15080
  stream.switchToCam = switchToCam;
15016
15081
  stream.sendData = sendData;
15082
+ stream.getLogger = getLogger;
15017
15083
  streams[id_] = stream;
15018
15084
  return stream;
15019
15085
  };
@@ -15222,6 +15288,17 @@ var createSession = function createSession(options) {
15222
15288
  }
15223
15289
 
15224
15290
  return sdp;
15291
+ };
15292
+ /**
15293
+ * Get session logger
15294
+ *
15295
+ * @returns {Object} Logger
15296
+ * @memberof Session
15297
+ */
15298
+
15299
+
15300
+ var getLogger = function getLogger() {
15301
+ return sessionLogger;
15225
15302
  }; //export Session
15226
15303
 
15227
15304
 
@@ -15237,7 +15314,8 @@ var createSession = function createSession(options) {
15237
15314
  session.submitBugReport = submitBugReport;
15238
15315
  session.startDebug = startDebug;
15239
15316
  session.stopDebug = stopDebug;
15240
- session.on = on; //save interface to global map
15317
+ session.on = on;
15318
+ session.getLogger = getLogger; //save interface to global map
15241
15319
 
15242
15320
  sessions[id_] = session;
15243
15321
  return session;
@@ -15303,6 +15381,11 @@ var Promise = require('es6-promise').Promise;
15303
15381
 
15304
15382
  var createConnection = function createConnection(options) {
15305
15383
  return new Promise(function (resolve, reject) {
15384
+ // Set connection logger #WCS-2434
15385
+ if (options.logger) {
15386
+ logger = options.logger;
15387
+ }
15388
+
15306
15389
  var id = options.id;
15307
15390
  var connectionConfig = options.connectionConfig || {
15308
15391
  "iceServers": []
@@ -15938,165 +16021,168 @@ module.exports = {
15938
16021
  },{"./util":46,"es6-promise":2,"uuid":10,"webrtc-adapter":25}],46:[function(require,module,exports){
15939
16022
  'use strict';
15940
16023
 
15941
- module.exports = {
15942
- isEmptyObject: function isEmptyObject(obj) {
15943
- for (var name in obj) {
15944
- return false;
15945
- }
16024
+ var isEmptyObject = function isEmptyObject(obj) {
16025
+ for (var name in obj) {
16026
+ return false;
16027
+ }
15946
16028
 
15947
- return true;
15948
- },
16029
+ return true;
16030
+ };
16031
+ /**
16032
+ * Copy values of object own properties to array.
16033
+ *
16034
+ * @param obj
16035
+ * @returns {Array}
16036
+ */
15949
16037
 
15950
- /**
15951
- * Copy values of object own properties to array.
15952
- *
15953
- * @param obj
15954
- * @returns {Array}
15955
- */
15956
- copyObjectToArray: function copyObjectToArray(obj) {
15957
- var ret = [];
15958
16038
 
15959
- for (var prop in obj) {
15960
- if (obj.hasOwnProperty(prop)) {
15961
- ret.push(obj[prop]);
15962
- }
16039
+ var copyObjectToArray = function copyObjectToArray(obj) {
16040
+ var ret = [];
16041
+
16042
+ for (var prop in obj) {
16043
+ if (obj.hasOwnProperty(prop)) {
16044
+ ret.push(obj[prop]);
15963
16045
  }
16046
+ }
15964
16047
 
15965
- return ret;
15966
- },
16048
+ return ret;
16049
+ };
16050
+ /**
16051
+ * Copy src properties to dst object.
16052
+ * Will overwrite dst prop with src prop in case of dst prop exist.
16053
+ */
15967
16054
 
15968
- /**
15969
- * Copy src properties to dst object.
15970
- * Will overwrite dst prop with src prop in case of dst prop exist.
15971
- */
15972
- copyObjectPropsToAnotherObject: function copyObjectPropsToAnotherObject(src, dst) {
15973
- for (var prop in src) {
15974
- if (src.hasOwnProperty(prop)) {
15975
- dst[prop] = src[prop];
15976
- }
16055
+
16056
+ var copyObjectPropsToAnotherObject = function copyObjectPropsToAnotherObject(src, dst) {
16057
+ for (var prop in src) {
16058
+ if (src.hasOwnProperty(prop)) {
16059
+ dst[prop] = src[prop];
15977
16060
  }
15978
- },
15979
- processRtcStatsReport: function processRtcStatsReport(browser, report) {
15980
- var result = {};
15981
-
15982
- if (browser == "chrome") {
15983
- /**
15984
- * Report types: googComponent, googCandidatePair, googCertificate, googLibjingleSession, googTrack, ssrc
15985
- */
15986
- var gotResult = false;
15987
-
15988
- if (report.type && report.type == "googCandidatePair") {
15989
- //check if this is active pair
15990
- if (report.googActiveConnection == "true") {
15991
- gotResult = true;
15992
- }
15993
- }
16061
+ }
16062
+ };
15994
16063
 
15995
- if (report.type && report.type == "ssrc") {
16064
+ var processRtcStatsReport = function processRtcStatsReport(browser, report) {
16065
+ var result = {};
16066
+
16067
+ if (browser == "chrome") {
16068
+ /**
16069
+ * Report types: googComponent, googCandidatePair, googCertificate, googLibjingleSession, googTrack, ssrc
16070
+ */
16071
+ var gotResult = false;
16072
+
16073
+ if (report.type && report.type == "googCandidatePair") {
16074
+ //check if this is active pair
16075
+ if (report.googActiveConnection == "true") {
15996
16076
  gotResult = true;
15997
16077
  }
16078
+ }
15998
16079
 
15999
- if (gotResult) {
16000
- for (var k in report) {
16001
- if (report.hasOwnProperty(k)) {
16002
- result[k] = report[k];
16003
- }
16080
+ if (report.type && report.type == "ssrc") {
16081
+ gotResult = true;
16082
+ }
16083
+
16084
+ if (gotResult) {
16085
+ for (var k in report) {
16086
+ if (report.hasOwnProperty(k)) {
16087
+ result[k] = report[k];
16004
16088
  }
16005
16089
  }
16090
+ }
16006
16091
 
16007
- return result;
16008
- } else if (browser == "firefox") {
16009
- /**
16010
- * RTCStatsReport http://mxr.mozilla.org/mozilla-central/source/dom/webidl/RTCStatsReport.webidl
16011
- */
16012
- if (report.type && (report.type == "outboundrtp" || report.type == "inboundrtp") && report.id.indexOf("rtcp") == -1) {
16013
- result = {};
16092
+ return result;
16093
+ } else if (browser == "firefox") {
16094
+ /**
16095
+ * RTCStatsReport http://mxr.mozilla.org/mozilla-central/source/dom/webidl/RTCStatsReport.webidl
16096
+ */
16097
+ if (report.type && (report.type == "outboundrtp" || report.type == "inboundrtp") && report.id.indexOf("rtcp") == -1) {
16098
+ result = {};
16014
16099
 
16015
- for (var k in report) {
16016
- if (report.hasOwnProperty(k)) {
16017
- result[k] = report[k];
16018
- }
16100
+ for (var k in report) {
16101
+ if (report.hasOwnProperty(k)) {
16102
+ result[k] = report[k];
16019
16103
  }
16020
16104
  }
16021
-
16022
- return result;
16023
- } else {
16024
- return result;
16025
16105
  }
16026
16106
 
16027
- ;
16107
+ return result;
16108
+ } else {
16109
+ return result;
16110
+ }
16111
+ };
16112
+
16113
+ var Browser = {
16114
+ isIE: function isIE() {
16115
+ return (
16116
+ /*@cc_on!@*/
16117
+ false || !!document.documentMode
16118
+ );
16028
16119
  },
16029
- Browser: {
16030
- isIE: function isIE() {
16031
- return (
16032
- /*@cc_on!@*/
16033
- false || !!document.documentMode
16034
- );
16035
- },
16036
- isFirefox: function isFirefox() {
16037
- return typeof InstallTrigger !== 'undefined';
16038
- },
16039
- isChrome: function isChrome() {
16040
- return !!window.chrome && /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor) && !/OPR/.test(navigator.userAgent);
16041
- },
16042
- isEdge: function isEdge() {
16043
- return !isIE && !!window.StyleMedia;
16044
- },
16045
- isOpera: function isOpera() {
16046
- return !!window.opr && !!opr.addons || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
16047
- },
16048
- isiOS: function isiOS() {
16049
- return /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
16050
- },
16051
- isSafari: function isSafari() {
16052
- var userAgent = navigator.userAgent.toLowerCase();
16053
- return /(safari|applewebkit)/i.test(userAgent) && !userAgent.includes("chrome") && !userAgent.includes("android");
16054
- },
16055
- isAndroid: function isAndroid() {
16056
- return navigator.userAgent.toLowerCase().indexOf("android") > -1;
16057
- },
16058
- isSafariWebRTC: function isSafariWebRTC() {
16059
- return navigator.mediaDevices && this.isSafari();
16060
- },
16061
- isSamsungBrowser: function isSamsungBrowser() {
16062
- return /SamsungBrowser/i.test(navigator.userAgent);
16063
- },
16064
- isAndroidFirefox: function isAndroidFirefox() {
16065
- return this.isAndroid() && /Firefox/i.test(navigator.userAgent);
16066
- }
16120
+ isFirefox: function isFirefox() {
16121
+ return typeof InstallTrigger !== 'undefined';
16067
16122
  },
16068
- SDP: {
16069
- matchPrefix: function matchPrefix(sdp, prefix) {
16070
- var parts = sdp.trim().split('\n').map(function (line) {
16071
- return line.trim();
16072
- });
16073
- return parts.filter(function (line) {
16074
- return line.indexOf(prefix) === 0;
16075
- });
16076
- },
16077
- writeFmtp: function writeFmtp(sdp, param, codec) {
16078
- var sdpArray = sdp.split("\n");
16079
- var i;
16123
+ isChrome: function isChrome() {
16124
+ return !!window.chrome && /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor) && !/OPR/.test(navigator.userAgent);
16125
+ },
16126
+ isEdge: function isEdge() {
16127
+ return !isIE && !!window.StyleMedia;
16128
+ },
16129
+ isOpera: function isOpera() {
16130
+ return !!window.opr && !!opr.addons || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
16131
+ },
16132
+ isiOS: function isiOS() {
16133
+ return /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
16134
+ },
16135
+ isSafari: function isSafari() {
16136
+ var userAgent = navigator.userAgent.toLowerCase();
16137
+ return /(safari|applewebkit)/i.test(userAgent) && !userAgent.includes("chrome") && !userAgent.includes("android");
16138
+ },
16139
+ isAndroid: function isAndroid() {
16140
+ return navigator.userAgent.toLowerCase().indexOf("android") > -1;
16141
+ },
16142
+ isSafariWebRTC: function isSafariWebRTC() {
16143
+ return navigator.mediaDevices && this.isSafari();
16144
+ },
16145
+ isSamsungBrowser: function isSamsungBrowser() {
16146
+ return /SamsungBrowser/i.test(navigator.userAgent);
16147
+ },
16148
+ isAndroidFirefox: function isAndroidFirefox() {
16149
+ return this.isAndroid() && /Firefox/i.test(navigator.userAgent);
16150
+ }
16151
+ };
16152
+ var SDP = {
16153
+ matchPrefix: function matchPrefix(sdp, prefix) {
16154
+ var parts = sdp.trim().split('\n').map(function (line) {
16155
+ return line.trim();
16156
+ });
16157
+ return parts.filter(function (line) {
16158
+ return line.indexOf(prefix) === 0;
16159
+ });
16160
+ },
16161
+ writeFmtp: function writeFmtp(sdp, param, codec) {
16162
+ var sdpArray = sdp.split("\n");
16163
+ var i;
16080
16164
 
16081
- for (i = 0; i < sdpArray.length; i++) {
16082
- if (sdpArray[i].search(codec) != -1 && sdpArray[i].indexOf("a=rtpmap") == 0) {
16083
- sdpArray[i] += "\na=fmtp:" + sdpArray[i].match(/[0-9]+/)[0] + " " + param + "\r";
16084
- }
16085
- } //normalize sdp after modifications
16165
+ for (i = 0; i < sdpArray.length; i++) {
16166
+ if (sdpArray[i].search(codec) != -1 && sdpArray[i].indexOf("a=rtpmap") == 0) {
16167
+ sdpArray[i] += "\na=fmtp:" + sdpArray[i].match(/[0-9]+/)[0] + " " + param + "\r";
16168
+ }
16169
+ } //normalize sdp after modifications
16086
16170
 
16087
16171
 
16088
- var result = "";
16172
+ var result = "";
16089
16173
 
16090
- for (i = 0; i < sdpArray.length; i++) {
16091
- if (sdpArray[i] != "") {
16092
- result += sdpArray[i] + "\n";
16093
- }
16174
+ for (i = 0; i < sdpArray.length; i++) {
16175
+ if (sdpArray[i] != "") {
16176
+ result += sdpArray[i] + "\n";
16094
16177
  }
16095
-
16096
- return result;
16097
16178
  }
16098
- },
16099
- logger: {
16179
+
16180
+ return result;
16181
+ }
16182
+ };
16183
+
16184
+ var logger = function logger() {
16185
+ return {
16100
16186
  init: function init(verbosity, enablePushLogs, customLogger, enableLogs) {
16101
16187
  switch (verbosity.toUpperCase()) {
16102
16188
  case "DEBUG":
@@ -16277,92 +16363,104 @@ module.exports = {
16277
16363
  default:
16278
16364
  this.verbosity = 2;
16279
16365
  }
16280
-
16281
- ;
16282
16366
  }
16283
- },
16284
- stripCodecs: function stripCodecs(sdp, codecs) {
16285
- if (!codecs.length) return sdp;
16286
- var sdpArray = sdp.split("\n");
16287
- var codecsArray = codecs.split(","); //search and delete codecs line
16367
+ };
16368
+ };
16288
16369
 
16289
- var pt = [];
16290
- var i;
16370
+ var stripCodecs = function stripCodecs(sdp, codecs) {
16371
+ if (!codecs.length) return sdp;
16372
+ var sdpArray = sdp.split("\n");
16373
+ var codecsArray = codecs.split(","); //search and delete codecs line
16291
16374
 
16292
- for (var p = 0; p < codecsArray.length; p++) {
16293
- console.log("Searching for codec " + codecsArray[p]);
16375
+ var pt = [];
16376
+ var i;
16294
16377
 
16295
- for (i = 0; i < sdpArray.length; i++) {
16296
- if (sdpArray[i].search(new RegExp(codecsArray[p], 'i')) != -1 && sdpArray[i].indexOf("a=rtpmap") == 0) {
16297
- console.log(codecsArray[p] + " detected");
16298
- pt.push(sdpArray[i].match(/[0-9]+/)[0]);
16299
- sdpArray[i] = "";
16300
- }
16378
+ for (var p = 0; p < codecsArray.length; p++) {
16379
+ console.log("Searching for codec " + codecsArray[p]);
16380
+
16381
+ for (i = 0; i < sdpArray.length; i++) {
16382
+ if (sdpArray[i].search(new RegExp(codecsArray[p], 'i')) != -1 && sdpArray[i].indexOf("a=rtpmap") == 0) {
16383
+ console.log(codecsArray[p] + " detected");
16384
+ pt.push(sdpArray[i].match(/[0-9]+/)[0]);
16385
+ sdpArray[i] = "";
16301
16386
  }
16302
16387
  }
16388
+ }
16303
16389
 
16304
- if (pt.length) {
16305
- //searching for fmtp
16306
- for (p = 0; p < pt.length; p++) {
16307
- for (i = 0; i < sdpArray.length; i++) {
16308
- if (sdpArray[i].search("a=fmtp:" + pt[p]) != -1 || sdpArray[i].search("a=rtcp-fb:" + pt[p]) != -1) {
16309
- sdpArray[i] = "";
16310
- }
16390
+ if (pt.length) {
16391
+ //searching for fmtp
16392
+ for (p = 0; p < pt.length; p++) {
16393
+ for (i = 0; i < sdpArray.length; i++) {
16394
+ if (sdpArray[i].search("a=fmtp:" + pt[p]) != -1 || sdpArray[i].search("a=rtcp-fb:" + pt[p]) != -1) {
16395
+ sdpArray[i] = "";
16311
16396
  }
16312
- } //delete entries from m= line
16397
+ }
16398
+ } //delete entries from m= line
16313
16399
 
16314
16400
 
16315
- for (i = 0; i < sdpArray.length; i++) {
16316
- if (sdpArray[i].search("m=audio") != -1 || sdpArray[i].search("m=video") != -1) {
16317
- var mLineSplitted = sdpArray[i].split(" ");
16318
- var newMLine = "";
16401
+ for (i = 0; i < sdpArray.length; i++) {
16402
+ if (sdpArray[i].search("m=audio") != -1 || sdpArray[i].search("m=video") != -1) {
16403
+ var mLineSplitted = sdpArray[i].split(" ");
16404
+ var newMLine = "";
16319
16405
 
16320
- for (var m = 0; m < mLineSplitted.length; m++) {
16321
- if (pt.indexOf(mLineSplitted[m].trim()) == -1 || m <= 2) {
16322
- newMLine += mLineSplitted[m];
16406
+ for (var m = 0; m < mLineSplitted.length; m++) {
16407
+ if (pt.indexOf(mLineSplitted[m].trim()) == -1 || m <= 2) {
16408
+ newMLine += mLineSplitted[m];
16323
16409
 
16324
- if (m < mLineSplitted.length - 1) {
16325
- newMLine = newMLine + " ";
16326
- }
16410
+ if (m < mLineSplitted.length - 1) {
16411
+ newMLine = newMLine + " ";
16327
16412
  }
16328
16413
  }
16329
-
16330
- sdpArray[i] = newMLine;
16331
16414
  }
16415
+
16416
+ sdpArray[i] = newMLine;
16332
16417
  }
16333
- } //normalize sdp after modifications
16418
+ }
16419
+ } //normalize sdp after modifications
16334
16420
 
16335
16421
 
16336
- var result = "";
16422
+ var result = "";
16337
16423
 
16338
- for (i = 0; i < sdpArray.length; i++) {
16339
- if (sdpArray[i] != "") {
16340
- result += sdpArray[i] + "\n";
16341
- }
16424
+ for (i = 0; i < sdpArray.length; i++) {
16425
+ if (sdpArray[i] != "") {
16426
+ result += sdpArray[i] + "\n";
16342
16427
  }
16428
+ }
16343
16429
 
16344
- return result;
16345
- },
16346
- getCurrentCodecAndSampleRate: function getCurrentCodecAndSampleRate(sdp, mediaType) {
16347
- var rows = sdp.split("\n");
16348
- var codecPt;
16430
+ return result;
16431
+ };
16349
16432
 
16350
- for (var i = 0; i < rows.length; i++) {
16351
- if (codecPt && rows[i].indexOf("a=rtpmap:" + codecPt) != -1) {
16352
- var ret = {};
16353
- ret.name = rows[i].split(" ")[1].split("/")[0];
16354
- ret.sampleRate = rows[i].split(" ")[1].split("/")[1];
16355
- return ret;
16356
- } //WCS-2136. WebRTC statistics doesn't work for VP8
16433
+ var getCurrentCodecAndSampleRate = function getCurrentCodecAndSampleRate(sdp, mediaType) {
16434
+ var rows = sdp.split("\n");
16435
+ var codecPt;
16357
16436
 
16437
+ for (var i = 0; i < rows.length; i++) {
16438
+ if (codecPt && rows[i].indexOf("a=rtpmap:" + codecPt) != -1) {
16439
+ var ret = {};
16440
+ ret.name = rows[i].split(" ")[1].split("/")[0];
16441
+ ret.sampleRate = rows[i].split(" ")[1].split("/")[1];
16442
+ return ret;
16443
+ } //WCS-2136. WebRTC statistics doesn't work for VP8
16358
16444
 
16359
- if (rows[i].indexOf("m=" + mediaType) != -1) {
16360
- codecPt = rows[i].split(" ")[3].trim();
16361
- }
16445
+
16446
+ if (rows[i].indexOf("m=" + mediaType) != -1) {
16447
+ codecPt = rows[i].split(" ")[3].trim();
16362
16448
  }
16363
16449
  }
16364
16450
  };
16365
16451
 
16452
+ module.exports = {
16453
+ isEmptyObject: isEmptyObject,
16454
+ copyObjectToArray: copyObjectToArray,
16455
+ copyObjectPropsToAnotherObject: copyObjectPropsToAnotherObject,
16456
+ processRtcStatsReport: processRtcStatsReport,
16457
+ Browser: Browser,
16458
+ SDP: SDP,
16459
+ logger: logger,
16460
+ stripCodecs: stripCodecs,
16461
+ getCurrentCodecAndSampleRate: getCurrentCodecAndSampleRate
16462
+ };
16463
+
16366
16464
  },{}],47:[function(require,module,exports){
16367
16465
  'use strict';
16368
16466
 
@@ -16382,7 +16480,12 @@ var audioContext;
16382
16480
  var createConnection = function createConnection(options, handlers) {
16383
16481
  return new Promise(function (resolve, reject) {
16384
16482
  var id = options.id;
16385
- var display = options.display;
16483
+ var display = options.display; // Set connection logger #WCS-2434
16484
+
16485
+ if (options.logger) {
16486
+ logger = options.logger;
16487
+ }
16488
+
16386
16489
  var canvas = document.createElement("canvas");
16387
16490
  display.appendChild(canvas);
16388
16491
  canvas.id = id;