videomail-client 16.0.0 → 16.0.1

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 CHANGED
@@ -282,9 +282,7 @@ When the client sends the second, host-form request, enable `submitWithVideomail
282
282
 
283
283
  ## Privacy and error reporting
284
284
 
285
- Recording sends webcam frames, and audio samples when enabled, to the configured Videomail service for encoding. The package does not provide offline recording.
286
-
287
- The `reportErrors` option defaults to `true`. When an error occurs, the client can send the error, recent client logs, browser and operating-system details, page location, screen and orientation data, supported media constraints, and enumerated media-device information to the configured API. Set `reportErrors: false` if your privacy policy requires local-only error handling.
285
+ Read about our privacy and error reporting practices in [Privacy and error reporting](./docs/PRIVACY_ERROR_REPORTING.md).
288
286
 
289
287
  ## Whitelist
290
288
 
@@ -5977,9 +5977,57 @@ var __webpack_modules__ = {
5977
5977
  },
5978
5978
  s1 (module, __unused_rspack_exports, __webpack_require__) {
5979
5979
  "use strict";
5980
+ var getSideChannel = __webpack_require__("M");
5980
5981
  var utils = __webpack_require__("K0");
5981
5982
  var has = Object.prototype.hasOwnProperty;
5982
5983
  var isArray = Array.isArray;
5984
+ var getPrototypeOf = Object.getPrototypeOf;
5985
+ var isPlainContainer = function(value) {
5986
+ if (!value || 'object' != typeof value) return false;
5987
+ if (isArray(value)) return true;
5988
+ var proto = getPrototypeOf(value);
5989
+ return proto === Object.prototype || null === proto;
5990
+ };
5991
+ var emptyCopyOf = function(value) {
5992
+ if (isArray(value)) {
5993
+ var arr = [];
5994
+ arr.length = value.length;
5995
+ return arr;
5996
+ }
5997
+ return null === getPrototypeOf(value) ? {
5998
+ __proto__: null
5999
+ } : {};
6000
+ };
6001
+ var copyInput = function(input) {
6002
+ var copies = getSideChannel();
6003
+ var result = {};
6004
+ var queue = [
6005
+ {
6006
+ source: input,
6007
+ target: result
6008
+ }
6009
+ ];
6010
+ for(var i = 0; i < queue.length; ++i){
6011
+ var source = queue[i].source;
6012
+ var target = queue[i].target;
6013
+ var keys = Object.keys(source);
6014
+ for(var j = 0; j < keys.length; ++j){
6015
+ var value = source[keys[j]];
6016
+ if (isPlainContainer(value)) {
6017
+ if (!copies.has(value)) {
6018
+ var copy = emptyCopyOf(value);
6019
+ copies.set(value, copy);
6020
+ queue[queue.length] = {
6021
+ source: value,
6022
+ target: copy
6023
+ };
6024
+ }
6025
+ target[keys[j]] = copies.get(value);
6026
+ } else target[keys[j]] = value;
6027
+ }
6028
+ }
6029
+ return result;
6030
+ };
5983
6031
  var defaults = {
5984
6032
  allowDots: false,
5985
6033
  allowEmptyArrays: false,
@@ -6051,6 +6099,7 @@ var __webpack_modules__ = {
6051
6099
  var part = parts[i];
6052
6100
  var bracketEqualsPos = part.indexOf(']=');
6053
6101
  var pos = -1 === bracketEqualsPos ? part.indexOf('=') : bracketEqualsPos + 1;
6102
+ var isEmptyBracketKey = pos > 1 && '[]' === part.slice(pos - 2, pos);
6054
6103
  var key;
6055
6104
  var val;
6056
6105
  if (-1 === pos) {
@@ -6063,13 +6112,13 @@ var __webpack_modules__ = {
6063
6112
  });
6064
6113
  }
6065
6114
  if (val && options.interpretNumericEntities && 'iso-8859-1' === charset) val = interpretNumericEntities(String(val));
6066
- if (part.indexOf('[]=') > -1) val = isArray(val) ? [
6115
+ if (isEmptyBracketKey) val = isArray(val) ? [
6067
6116
  val
6068
6117
  ] : val;
6069
6118
  if (options.comma && isArray(val) && val.length > options.arrayLimit) val = utils.combine([], val, options.arrayLimit, options.plainObjects, options.throwOnLimitExceeded);
6070
6119
  if (null !== key) {
6071
6120
  var existing = has.call(obj, key);
6072
- if (existing && ('combine' === options.duplicates || part.indexOf('[]=') > -1)) obj[key] = utils.combine(obj[key], val, options.arrayLimit, options.plainObjects, options.throwOnLimitExceeded);
6121
+ if (existing && ('combine' === options.duplicates || isEmptyBracketKey)) obj[key] = utils.combine(obj[key], val, options.arrayLimit, options.plainObjects, options.throwOnLimitExceeded);
6073
6122
  else if (!existing || 'last' === options.duplicates) obj[key] = val;
6074
6123
  }
6075
6124
  }
@@ -6111,8 +6160,29 @@ var __webpack_modules__ = {
6111
6160
  }
6112
6161
  return leaf;
6113
6162
  };
6163
+ var topLevelDotsToBrackets = function(key) {
6164
+ var result = '';
6165
+ var depth = 0;
6166
+ for(var i = 0; i < key.length; i += 1){
6167
+ var cu = key.charCodeAt(i);
6168
+ if (0x5B === cu) {
6169
+ depth += 1;
6170
+ result += '[';
6171
+ } else if (0x5D === cu) {
6172
+ if (depth > 0) depth -= 1;
6173
+ result += ']';
6174
+ } else if (0x2E === cu && 0 === depth && i + 1 < key.length && 0x2E !== key.charCodeAt(i + 1) && 0x5B !== key.charCodeAt(i + 1)) {
6175
+ var start = i + 1;
6176
+ var j = start;
6177
+ while(j < key.length && 0x2E !== key.charCodeAt(j) && 0x5B !== key.charCodeAt(j))j += 1;
6178
+ result += '[' + key.slice(start, j) + ']';
6179
+ i = j - 1;
6180
+ } else result += key.charAt(i);
6181
+ }
6182
+ return result;
6183
+ };
6114
6184
  var splitKeyIntoSegments = function(originalKey, options) {
6115
- var key = options.allowDots ? originalKey.replace(/\.([^.[]+)/g, '[$1]') : originalKey;
6185
+ var key = options.allowDots ? topLevelDotsToBrackets(originalKey) : originalKey;
6116
6186
  if (options.depth <= 0) {
6117
6187
  if (!options.plainObjects && has.call(Object.prototype, key)) {
6118
6188
  if (!options.allowPrototypes) return;
@@ -6210,7 +6280,7 @@ var __webpack_modules__ = {
6210
6280
  if ('' === str || null == str) return options.plainObjects ? {
6211
6281
  __proto__: null
6212
6282
  } : {};
6213
- var tempObj = 'string' == typeof str ? parseValues(str, options) : str;
6283
+ var tempObj = 'string' == typeof str ? parseValues(str, options) : copyInput(str);
6214
6284
  var obj = options.plainObjects ? {
6215
6285
  __proto__: null
6216
6286
  } : {};
@@ -6318,11 +6388,11 @@ var __webpack_modules__ = {
6318
6388
  var objKeys;
6319
6389
  if ('comma' === generateArrayPrefix && isArray(obj)) {
6320
6390
  if (encodeValuesOnly && encoder) obj = utils.maybeMap(obj, function(v) {
6321
- return null == v ? v : encoder(v);
6391
+ return null == v ? v : encoder(v, defaults.encoder, charset, 'value', format);
6322
6392
  });
6323
6393
  objKeys = [
6324
6394
  {
6325
- value: obj.length > 0 ? obj.join(',') || null : void 0
6395
+ value: obj.length > 0 ? utils.toCoercible(obj).join(',') || null : void 0
6326
6396
  }
6327
6397
  ];
6328
6398
  } else if (isArray(filter)) objKeys = filter;
@@ -6330,7 +6400,7 @@ var __webpack_modules__ = {
6330
6400
  var keys = Object.keys(obj);
6331
6401
  objKeys = sort ? keys.sort(sort) : keys;
6332
6402
  }
6333
- var encodedPrefix = encodeDotInKeys ? String(prefix).replace(/\./g, '%2E') : String(prefix);
6403
+ var encodedPrefix = String(prefix);
6334
6404
  var adjustedPrefix = commaRoundTrip && isArray(obj) && 1 === obj.length ? encodedPrefix + '[]' : encodedPrefix;
6335
6405
  if (allowEmptyArrays && isArray(obj) && 0 === obj.length && 0 === Object.keys(obj).length) return adjustedPrefix + '[]';
6336
6406
  for(var j = 0; j < objKeys.length; ++j){
@@ -6363,7 +6433,7 @@ var __webpack_modules__ = {
6363
6433
  var filter = defaults.filter;
6364
6434
  if ('function' == typeof opts.filter || isArray(opts.filter)) filter = opts.filter;
6365
6435
  var arrayFormat;
6366
- arrayFormat = opts.arrayFormat in arrayPrefixGenerators ? opts.arrayFormat : 'indices' in opts ? opts.indices ? 'indices' : 'repeat' : defaults.arrayFormat;
6436
+ arrayFormat = has.call(arrayPrefixGenerators, opts.arrayFormat) ? opts.arrayFormat : 'indices' in opts ? opts.indices ? 'indices' : 'repeat' : defaults.arrayFormat;
6367
6437
  if ('commaRoundTrip' in opts && 'boolean' != typeof opts.commaRoundTrip) throw new TypeError('`commaRoundTrip` must be a boolean, or absent');
6368
6438
  var allowDots = void 0 === opts.allowDots ? true === opts.encodeDotInKeys ? true : defaults.allowDots : !!opts.allowDots;
6369
6439
  return {
@@ -6446,6 +6516,17 @@ var __webpack_modules__ = {
6446
6516
  var setMaxIndex = function(obj, maxIndex) {
6447
6517
  overflowChannel.set(obj, maxIndex);
6448
6518
  };
6519
+ var conflictChannel = getSideChannel();
6520
+ var markConflict = function(obj, maxIndex) {
6521
+ conflictChannel.set(obj, maxIndex);
6522
+ return obj;
6523
+ };
6524
+ var isConflict = function(obj) {
6525
+ return conflictChannel.has(obj);
6526
+ };
6527
+ var getConflictIndex = function(obj) {
6528
+ return conflictChannel.get(obj);
6529
+ };
6449
6530
  var hexTable = function() {
6450
6531
  var array = [];
6451
6532
  for(var i = 0; i < 256; ++i)array[array.length] = '%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase();
@@ -6478,6 +6559,26 @@ var __webpack_modules__ = {
6478
6559
  });
6479
6560
  else obj[key] = value;
6480
6561
  };
6562
+ var maxNumericIndex = function(obj, min) {
6563
+ var max = min;
6564
+ var keys = Object.keys(obj);
6565
+ for(var i = 0; i < keys.length; ++i){
6566
+ var num = parseInt(keys[i], 10);
6567
+ if (String(num) === keys[i] && num > max) max = num;
6568
+ }
6569
+ return max;
6570
+ };
6571
+ var limitedPair = function(first, second, options) {
6572
+ var pair = [
6573
+ first,
6574
+ second
6575
+ ];
6576
+ if (options && 'number' == typeof options.arrayLimit && pair.length > options.arrayLimit) {
6577
+ if (options.throwOnLimitExceeded) throw new RangeError('Array limit exceeded. Only ' + options.arrayLimit + ' element' + (1 === options.arrayLimit ? '' : 's') + ' allowed in an array.');
6578
+ return markOverflow(arrayToObject(pair, options), 1);
6579
+ }
6580
+ return pair;
6581
+ };
6481
6582
  var merge = function merge(target, source, options) {
6482
6583
  if (!source) return target;
6483
6584
  if ('object' != typeof source && 'function' != typeof source) {
@@ -6488,19 +6589,20 @@ var __webpack_modules__ = {
6488
6589
  return markOverflow(arrayToObject(target.concat(source), options), nextIndex);
6489
6590
  }
6490
6591
  target[nextIndex] = source;
6491
- } else if (!target || 'object' != typeof target) return [
6492
- target,
6493
- source
6494
- ];
6592
+ } else if (!target || 'object' != typeof target) return limitedPair(target, source, options);
6495
6593
  else if (isOverflow(target)) {
6496
6594
  var newIndex = getMaxIndex(target) + 1;
6497
6595
  target[newIndex] = source;
6498
6596
  setMaxIndex(target, newIndex);
6499
- } else if (options && options.strictMerge) return [
6500
- target,
6501
- source
6502
- ];
6503
- else if (options && (options.plainObjects || options.allowPrototypes) || !has.call(Object.prototype, source)) target[source] = true;
6597
+ } else if (options && options.strictMerge && isConflict(target)) {
6598
+ var nextConflict = getConflictIndex(target) + 1;
6599
+ if (options.throwOnLimitExceeded && 'number' == typeof options.arrayLimit && nextConflict >= options.arrayLimit) throw new RangeError('Array limit exceeded. Only ' + options.arrayLimit + ' element' + (1 === options.arrayLimit ? '' : 's') + ' allowed in an array.');
6600
+ target[nextConflict] = source;
6601
+ markConflict(target, nextConflict);
6602
+ } else if (options && options.strictMerge) {
6603
+ var conflict = limitedPair(target, source, options);
6604
+ return isArray(conflict) ? markConflict(conflict, 1) : conflict;
6605
+ } else if (options && (options.plainObjects || options.allowPrototypes) || !has.call(Object.prototype, source)) target[source] = true;
6504
6606
  return target;
6505
6607
  }
6506
6608
  if (!target || 'object' != typeof target) {
@@ -6528,7 +6630,10 @@ var __webpack_modules__ = {
6528
6630
  return combined;
6529
6631
  }
6530
6632
  var mergeTarget = target;
6531
- if (isArray(target) && !isArray(source)) mergeTarget = arrayToObject(target, options);
6633
+ if (isArray(target) && !isArray(source)) {
6634
+ mergeTarget = arrayToObject(target, options);
6635
+ if (isConflict(target)) markConflict(mergeTarget, target.length - 1);
6636
+ }
6532
6637
  if (isArray(target) && isArray(source)) {
6533
6638
  source.forEach(function(item, i) {
6534
6639
  if (has.call(target, i)) {
@@ -6546,11 +6651,15 @@ var __webpack_modules__ = {
6546
6651
  return Object.keys(source).reduce(function(acc, key) {
6547
6652
  var value = source[key];
6548
6653
  has.call(acc, key) ? setProperty(acc, key, merge(acc[key], value, options)) : setProperty(acc, key, value);
6549
- if (isOverflow(source) && !isOverflow(acc)) markOverflow(acc, getMaxIndex(source));
6654
+ if (isOverflow(source) && !isOverflow(acc)) markOverflow(acc, maxNumericIndex(acc, getMaxIndex(source)));
6550
6655
  if (isOverflow(acc)) {
6551
6656
  var keyNum = parseInt(key, 10);
6552
6657
  if (String(keyNum) === key && keyNum >= 0 && keyNum > getMaxIndex(acc)) setMaxIndex(acc, keyNum);
6553
6658
  }
6659
+ if (isConflict(acc)) {
6660
+ var conflictKey = parseInt(key, 10);
6661
+ if (String(conflictKey) === key && conflictKey > getConflictIndex(acc)) markConflict(acc, conflictKey);
6662
+ }
6554
6663
  return acc;
6555
6664
  }, mergeTarget);
6556
6665
  };
@@ -6561,6 +6670,7 @@ var __webpack_modules__ = {
6561
6670
  }, target);
6562
6671
  };
6563
6672
  var decode = function(str, defaultDecoder, charset) {
6673
+ if ('string' == typeof str && -1 === str.indexOf('%')) return -1 === str.indexOf('+') ? str : str.replace(/\+/g, ' ');
6564
6674
  var strWithoutPlus = str.replace(/\+/g, ' ');
6565
6675
  if ('iso-8859-1' === charset) return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);
6566
6676
  try {
@@ -6569,15 +6679,47 @@ var __webpack_modules__ = {
6569
6679
  return strWithoutPlus;
6570
6680
  }
6571
6681
  };
6682
+ var hasToPrimitive = 'function' == typeof Symbol && 'symbol' == typeof Symbol.toPrimitive;
6683
+ var arrayJoin = Array.prototype.join;
6684
+ var arrayToString = Array.prototype.toString;
6685
+ var objectToString = Object.prototype.toString;
6686
+ var toCoercible = function toCoercible(value, joining) {
6687
+ if (!value || 'object' != typeof value && 'function' != typeof value) return value;
6688
+ if (hasToPrimitive && null != value[Symbol.toPrimitive]) return value;
6689
+ if (isArray(value) && value.toString === arrayToString && value.join === arrayJoin) {
6690
+ var ancestors = joining || getSideChannel();
6691
+ if (ancestors.has(value)) return '';
6692
+ ancestors.set(value, true);
6693
+ var copy;
6694
+ for(var i = 0; i < value.length; i += 1){
6695
+ var item = value[i];
6696
+ var coerced = toCoercible(item, ancestors);
6697
+ if (!copy && coerced !== item) {
6698
+ copy = [];
6699
+ for(var j = 0; j < i; j += 1)copy[j] = value[j];
6700
+ }
6701
+ if (copy) copy[i] = coerced;
6702
+ }
6703
+ ancestors['delete'](value);
6704
+ return copy || value;
6705
+ }
6706
+ if ('function' == typeof value.toString) return value;
6707
+ var valueOf = value.valueOf;
6708
+ if ('function' == typeof valueOf) {
6709
+ var primitive = valueOf.call(value);
6710
+ if (!primitive || 'object' != typeof primitive && 'function' != typeof primitive) return String(primitive);
6711
+ }
6712
+ return objectToString.call(value);
6713
+ };
6572
6714
  var limit = 1024;
6573
6715
  var encode = function(str, defaultEncoder, charset, kind, format) {
6574
6716
  if (0 === str.length) return str;
6575
6717
  var string = str;
6576
6718
  if ('symbol' == typeof str) string = Symbol.prototype.toString.call(str);
6577
- else if ('string' != typeof str) string = String(str);
6719
+ else if ('string' != typeof str) string = String(toCoercible(str));
6578
6720
  if ('iso-8859-1' === charset) return escape(string).replace(/%u[0-9a-f]{4}/gi, function($0) {
6579
6721
  return '%26%23' + parseInt($0.slice(2), 16) + '%3B';
6580
- });
6722
+ }).replace(/\+/g, '%2B');
6581
6723
  var out = '';
6582
6724
  for(var j = 0; j < string.length; j += limit){
6583
6725
  var segment = string.length >= limit ? string.slice(j, j + limit) : string;
@@ -6694,7 +6836,8 @@ var __webpack_modules__ = {
6694
6836
  isRegExp: isRegExp,
6695
6837
  markOverflow: markOverflow,
6696
6838
  maybeMap: maybeMap,
6697
- merge: merge
6839
+ merge: merge,
6840
+ toCoercible: toCoercible
6698
6841
  };
6699
6842
  },
6700
6843
  jY (module, __unused_rspack_exports, __webpack_require__) {
@@ -8105,7 +8248,7 @@ var __webpack_modules__ = {
8105
8248
  });
8106
8249
  });
8107
8250
  },
8108
- S (__unused_rspack_module, exports1, __webpack_require__) {
8251
+ Sy (__unused_rspack_module, exports1, __webpack_require__) {
8109
8252
  var process = __webpack_require__("zT");
8110
8253
  var getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors || function(obj) {
8111
8254
  var keys = Object.keys(obj);
@@ -10471,7 +10614,7 @@ var __webpack_modules__ = {
10471
10614
  return i[1];
10472
10615
  };
10473
10616
  },
10474
- RR (module) {
10617
+ R (module) {
10475
10618
  "use strict";
10476
10619
  var stylesInDOM = [];
10477
10620
  function getIndexByIdentifier(identifier) {
@@ -10972,7 +11115,7 @@ var __webpack_exports__ = {};
10972
11115
  var client = __webpack_require__("Q");
10973
11116
  var client_default = /*#__PURE__*/ __webpack_require__.n(client);
10974
11117
  var package_namespaceObject = {
10975
- rE: "16.0.0"
11118
+ rE: "16.0.1"
10976
11119
  };
10977
11120
  function isAudioEnabled(options) {
10978
11121
  return Boolean(options.audio.enabled);
@@ -10984,7 +11127,7 @@ var __webpack_exports__ = {};
10984
11127
  function isAutoPauseEnabled(options) {
10985
11128
  return options.enableAutoPause && options.enablePause;
10986
11129
  }
10987
- var util = __webpack_require__("S");
11130
+ var util = __webpack_require__("Sy");
10988
11131
  var util_default = /*#__PURE__*/ __webpack_require__.n(util);
10989
11132
  function getEventDetails(event) {
10990
11133
  const eventWithErrorDetails = event;
@@ -14450,7 +14593,7 @@ var __webpack_exports__ = {};
14450
14593
  }
14451
14594
  constructor(message, options, classList, errData){
14452
14595
  var _ref;
14453
- super(message, errData), VideomailError_define_property(this, "title", "Error from videomail-client npm package"), VideomailError_define_property(this, "location", window.location.href), VideomailError_define_property(this, "logLines", void 0), VideomailError_define_property(this, "whitelistKey", void 0), VideomailError_define_property(this, "cookie", void 0), VideomailError_define_property(this, "err", void 0), VideomailError_define_property(this, "promise", void 0), VideomailError_define_property(this, "reason", void 0), VideomailError_define_property(this, "browser", void 0), VideomailError_define_property(this, "cpu", void 0), VideomailError_define_property(this, "device", void 0), VideomailError_define_property(this, "engine", void 0), VideomailError_define_property(this, "os", void 0), VideomailError_define_property(this, "screen", void 0), VideomailError_define_property(this, "orientation", void 0), VideomailError_define_property(this, "versions", void 0), VideomailError_define_property(this, "classList", void 0);
14596
+ super(message, errData), VideomailError_define_property(this, "title", "Error from videomail-client npm package"), VideomailError_define_property(this, "location", window.location.href), VideomailError_define_property(this, "logLines", void 0), VideomailError_define_property(this, "whitelistKey", void 0), VideomailError_define_property(this, "err", void 0), VideomailError_define_property(this, "promise", void 0), VideomailError_define_property(this, "reason", void 0), VideomailError_define_property(this, "browser", void 0), VideomailError_define_property(this, "cpu", void 0), VideomailError_define_property(this, "device", void 0), VideomailError_define_property(this, "engine", void 0), VideomailError_define_property(this, "os", void 0), VideomailError_define_property(this, "screen", void 0), VideomailError_define_property(this, "orientation", void 0), VideomailError_define_property(this, "versions", void 0), VideomailError_define_property(this, "classList", void 0);
14454
14597
  this.explanation = null == errData ? void 0 : errData.explanation;
14455
14598
  this.logLines = null == errData ? void 0 : errData.logLines;
14456
14599
  this.whitelistKey = options.whitelistKey;
@@ -14462,9 +14605,6 @@ var __webpack_exports__ = {};
14462
14605
  this.device = usefulClientData.device.type ? usefulClientData.device : void 0;
14463
14606
  this.engine = usefulClientData.engine;
14464
14607
  this.os = usefulClientData.os;
14465
- let cookie;
14466
- if (__webpack_require__.g.document.cookie.length > 0) cookie = __webpack_require__.g.document.cookie.split(",").map((c)=>c.trim());
14467
- this.cookie = cookie && cookie.length > 0 ? cookie : void 0;
14468
14608
  this.screen = [
14469
14609
  screen.width,
14470
14610
  screen.height,
@@ -14654,6 +14794,53 @@ var __webpack_exports__ = {};
14654
14794
  return exc;
14655
14795
  }
14656
14796
  const error_findOriginalExc = findOriginalExc;
14797
+ const REDACTED = "[redacted]";
14798
+ const PRIVATE_FIELDS = "cookies?|set[-_]?cookie|(?:proxy[-_]?)?authorization|pass(?:word|phrase|wd)|(?:client[-_]?)?secret|(?:x[-_]?)?api[-_]?key|(?:access|refresh|id|auth|session)[-_]?token|token|(?:x[-_]?)?(?:csrf|xsrf)(?:[-_]?token)?|session(?:[-_]?id)?|e[-_]?mail|from|to|cc|bcc|recipients?|sender";
14799
+ const PRIVATE_FIELD = new RegExp(`^(?:${PRIVATE_FIELDS})$`, "iu");
14800
+ const PRIVATE_CONTENT_FIELD = /^(?:subject|body)$/iu;
14801
+ const URL_FIELD = /^(?:url|uri|href|location|recordLocation|blockedURI|responseURL)$/iu;
14802
+ const LOG_ASSIGNMENT = String.raw`(["']?\b(?:${PRIVATE_FIELDS}|subject|body)["']?\s*[:=]\s*)`;
14803
+ const LOG_VALUES = [
14804
+ /"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'/u.source,
14805
+ /(?:Bearer|Basic)\s+[^\s,;}]+/u.source,
14806
+ /[^\s,;{}[\]]+/u.source
14807
+ ].join("|");
14808
+ const PRIVATE_LOG_VALUE = new RegExp(`${LOG_ASSIGNMENT}(?:${LOG_VALUES})`, "giu");
14809
+ function sanitizeUrl(value, base) {
14810
+ try {
14811
+ const url = new URL(value, base);
14812
+ url.username = "";
14813
+ url.password = "";
14814
+ url.search = "";
14815
+ url.hash = "";
14816
+ return url.href;
14817
+ } catch (unused) {
14818
+ return REDACTED;
14819
+ }
14820
+ }
14821
+ function sanitizeText(text) {
14822
+ return text.replace(/\b(?:https?|wss?):\/\/[^\s"'<>(){}]+/giu, (value)=>{
14823
+ var _ref;
14824
+ var _exec;
14825
+ const position = null != (_ref = null == (_exec = /:\d+:\d+$/u.exec(value)) ? void 0 : _exec[0]) ? _ref : "";
14826
+ const address = position ? value.slice(0, -position.length) : value;
14827
+ return `${sanitizeUrl(address)}${position}`;
14828
+ }).replace(PRIVATE_LOG_VALUE, `$1${REDACTED}`).replace(/\b(Bearer|Basic)\s+[\w.+/~=-]+/giu, `$1 ${REDACTED}`).replace(/\b[\w.%+-]+@[\w.-]+\.[a-z]{2,}\b/giu, REDACTED);
14829
+ }
14830
+ function sanitizeErrorReport(report) {
14831
+ function redactField(key, value) {
14832
+ if (PRIVATE_FIELD.test(key)) return REDACTED;
14833
+ if ("string" != typeof value) return value;
14834
+ if (PRIVATE_CONTENT_FIELD.test(key)) return REDACTED;
14835
+ const text = URL_FIELD.test(key) ? sanitizeUrl(value, report.location) : value;
14836
+ return sanitizeText(text);
14837
+ }
14838
+ const json = JSON.stringify(serializeError(report), redactField);
14839
+ const sanitized = JSON.parse(json);
14840
+ if (null === sanitized || "object" != typeof sanitized) throw new TypeError("An error report must serialize to an object.");
14841
+ return sanitized;
14842
+ }
14843
+ const error_sanitizeErrorReport = sanitizeErrorReport;
14657
14844
  function _extends() {
14658
14845
  _extends = Object.assign || function(target) {
14659
14846
  for(var i = 1; i < arguments.length; i++){
@@ -15312,7 +15499,6 @@ var __webpack_exports__ = {};
15312
15499
  },
15313
15500
  browser: err.browser,
15314
15501
  code: err.code,
15315
- cookie: err.cookie,
15316
15502
  cause: err.cause instanceof Error ? serializeError(err.cause) : err.cause,
15317
15503
  cpu: err.cpu,
15318
15504
  device: err.device,
@@ -15333,7 +15519,7 @@ var __webpack_exports__ = {};
15333
15519
  enumerateDevices,
15334
15520
  usedConstraints: err.usedConstraints
15335
15521
  };
15336
- yield client_default()(FormMethod.POST, url).query(queryParams).set("Timezone-Id", this.timezoneId).withCredentials().send(fullVideomailErrorData).timeout(this.options.timeouts.connection);
15522
+ yield client_default()(FormMethod.POST, url).query(queryParams).set("Timezone-Id", this.timezoneId).withCredentials().send(error_sanitizeErrorReport(fullVideomailErrorData)).timeout(this.options.timeouts.connection);
15337
15523
  }).call(this);
15338
15524
  }
15339
15525
  post(videomail) {
@@ -15602,7 +15788,7 @@ var __webpack_exports__ = {};
15602
15788
  return newOptions;
15603
15789
  }
15604
15790
  const options_mergeWithDefaultOptions = mergeWithDefaultOptions;
15605
- var injectStylesIntoStyleTag = __webpack_require__("RR");
15791
+ var injectStylesIntoStyleTag = __webpack_require__("R");
15606
15792
  var injectStylesIntoStyleTag_default = /*#__PURE__*/ __webpack_require__.n(injectStylesIntoStyleTag);
15607
15793
  var styleDomAPI = __webpack_require__("Bd");
15608
15794
  var styleDomAPI_default = /*#__PURE__*/ __webpack_require__.n(styleDomAPI);
package/dist/esm/index.js CHANGED
@@ -3620,7 +3620,7 @@ const constants = {
3620
3620
  }
3621
3621
  };
3622
3622
  var package_namespaceObject = {
3623
- rE: "16.0.0"
3623
+ rE: "16.0.1"
3624
3624
  };
3625
3625
  function isAudioEnabled(options) {
3626
3626
  return Boolean(options.audio.enabled);
@@ -3835,7 +3835,7 @@ class VideomailError extends error_HTTPVideomailError {
3835
3835
  return this.classList;
3836
3836
  }
3837
3837
  constructor(message, options, classList, errData){
3838
- super(message, errData), VideomailError_define_property(this, "title", "Error from videomail-client npm package"), VideomailError_define_property(this, "location", window.location.href), VideomailError_define_property(this, "logLines", void 0), VideomailError_define_property(this, "whitelistKey", void 0), VideomailError_define_property(this, "cookie", void 0), VideomailError_define_property(this, "err", void 0), VideomailError_define_property(this, "promise", void 0), VideomailError_define_property(this, "reason", void 0), VideomailError_define_property(this, "browser", void 0), VideomailError_define_property(this, "cpu", void 0), VideomailError_define_property(this, "device", void 0), VideomailError_define_property(this, "engine", void 0), VideomailError_define_property(this, "os", void 0), VideomailError_define_property(this, "screen", void 0), VideomailError_define_property(this, "orientation", void 0), VideomailError_define_property(this, "versions", void 0), VideomailError_define_property(this, "classList", void 0);
3838
+ super(message, errData), VideomailError_define_property(this, "title", "Error from videomail-client npm package"), VideomailError_define_property(this, "location", window.location.href), VideomailError_define_property(this, "logLines", void 0), VideomailError_define_property(this, "whitelistKey", void 0), VideomailError_define_property(this, "err", void 0), VideomailError_define_property(this, "promise", void 0), VideomailError_define_property(this, "reason", void 0), VideomailError_define_property(this, "browser", void 0), VideomailError_define_property(this, "cpu", void 0), VideomailError_define_property(this, "device", void 0), VideomailError_define_property(this, "engine", void 0), VideomailError_define_property(this, "os", void 0), VideomailError_define_property(this, "screen", void 0), VideomailError_define_property(this, "orientation", void 0), VideomailError_define_property(this, "versions", void 0), VideomailError_define_property(this, "classList", void 0);
3839
3839
  this.explanation = errData?.explanation;
3840
3840
  this.logLines = errData?.logLines;
3841
3841
  this.whitelistKey = options.whitelistKey;
@@ -3847,9 +3847,6 @@ class VideomailError extends error_HTTPVideomailError {
3847
3847
  this.device = usefulClientData.device.type ? usefulClientData.device : void 0;
3848
3848
  this.engine = usefulClientData.engine;
3849
3849
  this.os = usefulClientData.os;
3850
- let cookie;
3851
- if (__webpack_require__.g.document.cookie.length > 0) cookie = __webpack_require__.g.document.cookie.split(",").map((c)=>c.trim());
3852
- this.cookie = cookie && cookie.length > 0 ? cookie : void 0;
3853
3850
  this.screen = [
3854
3851
  screen.width,
3855
3852
  screen.height,
@@ -4037,6 +4034,51 @@ function findOriginalExc(exc) {
4037
4034
  return exc;
4038
4035
  }
4039
4036
  const error_findOriginalExc = findOriginalExc;
4037
+ const REDACTED = "[redacted]";
4038
+ const PRIVATE_FIELDS = "cookies?|set[-_]?cookie|(?:proxy[-_]?)?authorization|pass(?:word|phrase|wd)|(?:client[-_]?)?secret|(?:x[-_]?)?api[-_]?key|(?:access|refresh|id|auth|session)[-_]?token|token|(?:x[-_]?)?(?:csrf|xsrf)(?:[-_]?token)?|session(?:[-_]?id)?|e[-_]?mail|from|to|cc|bcc|recipients?|sender";
4039
+ const PRIVATE_FIELD = new RegExp(`^(?:${PRIVATE_FIELDS})$`, "iu");
4040
+ const PRIVATE_CONTENT_FIELD = /^(?:subject|body)$/iu;
4041
+ const URL_FIELD = /^(?:url|uri|href|location|recordLocation|blockedURI|responseURL)$/iu;
4042
+ const LOG_ASSIGNMENT = String.raw`(["']?\b(?:${PRIVATE_FIELDS}|subject|body)["']?\s*[:=]\s*)`;
4043
+ const LOG_VALUES = [
4044
+ /"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'/u.source,
4045
+ /(?:Bearer|Basic)\s+[^\s,;}]+/u.source,
4046
+ /[^\s,;{}[\]]+/u.source
4047
+ ].join("|");
4048
+ const PRIVATE_LOG_VALUE = new RegExp(`${LOG_ASSIGNMENT}(?:${LOG_VALUES})`, "giu");
4049
+ function sanitizeUrl(value, base) {
4050
+ try {
4051
+ const url = new URL(value, base);
4052
+ url.username = "";
4053
+ url.password = "";
4054
+ url.search = "";
4055
+ url.hash = "";
4056
+ return url.href;
4057
+ } catch {
4058
+ return REDACTED;
4059
+ }
4060
+ }
4061
+ function sanitizeText(text) {
4062
+ return text.replace(/\b(?:https?|wss?):\/\/[^\s"'<>(){}]+/giu, (value)=>{
4063
+ const position = /:\d+:\d+$/u.exec(value)?.[0] ?? "";
4064
+ const address = position ? value.slice(0, -position.length) : value;
4065
+ return `${sanitizeUrl(address)}${position}`;
4066
+ }).replace(PRIVATE_LOG_VALUE, `$1${REDACTED}`).replace(/\b(Bearer|Basic)\s+[\w.+/~=-]+/giu, `$1 ${REDACTED}`).replace(/\b[\w.%+-]+@[\w.-]+\.[a-z]{2,}\b/giu, REDACTED);
4067
+ }
4068
+ function sanitizeErrorReport(report) {
4069
+ function redactField(key, value) {
4070
+ if (PRIVATE_FIELD.test(key)) return REDACTED;
4071
+ if ("string" != typeof value) return value;
4072
+ if (PRIVATE_CONTENT_FIELD.test(key)) return REDACTED;
4073
+ const text = URL_FIELD.test(key) ? sanitizeUrl(value, report.location) : value;
4074
+ return sanitizeText(text);
4075
+ }
4076
+ const json = JSON.stringify(serializeError(report), redactField);
4077
+ const sanitized = JSON.parse(json);
4078
+ if (null === sanitized || "object" != typeof sanitized) throw new TypeError("An error report must serialize to an object.");
4079
+ return sanitized;
4080
+ }
4081
+ const error_sanitizeErrorReport = sanitizeErrorReport;
4040
4082
  function Despot_define_property(obj, key, value) {
4041
4083
  if (key in obj) Object.defineProperty(obj, key, {
4042
4084
  value: value,
@@ -4500,7 +4542,6 @@ class Resource {
4500
4542
  },
4501
4543
  browser: err.browser,
4502
4544
  code: err.code,
4503
- cookie: err.cookie,
4504
4545
  cause: err.cause instanceof Error ? serializeError(err.cause) : err.cause,
4505
4546
  cpu: err.cpu,
4506
4547
  device: err.device,
@@ -4521,7 +4562,7 @@ class Resource {
4521
4562
  enumerateDevices,
4522
4563
  usedConstraints: err.usedConstraints
4523
4564
  };
4524
- await superagent(FormMethod.POST, url).query(queryParams).set("Timezone-Id", this.timezoneId).withCredentials().send(fullVideomailErrorData).timeout(this.options.timeouts.connection);
4565
+ await superagent(FormMethod.POST, url).query(queryParams).set("Timezone-Id", this.timezoneId).withCredentials().send(error_sanitizeErrorReport(fullVideomailErrorData)).timeout(this.options.timeouts.connection);
4525
4566
  }
4526
4567
  async post(videomail) {
4527
4568
  const newVideomail = this.applyDefaultValues(videomail);
@@ -29,7 +29,6 @@ export interface VideomailErrorData {
29
29
  }
30
30
  export interface FullVideomailErrorData extends VideomailErrorData {
31
31
  browser: IBrowser;
32
- cookie?: string[] | undefined;
33
32
  cpu?: ICPU | undefined;
34
33
  device?: IDevice | undefined;
35
34
  engine: IEngine;
@@ -12,7 +12,6 @@ declare class VideomailError extends HTTPVideomailError {
12
12
  readonly location: string;
13
13
  logLines?: string[] | undefined;
14
14
  whitelistKey: string | undefined;
15
- cookie: string[] | undefined;
16
15
  err?: Error | undefined;
17
16
  promise?: Promise<any> | undefined;
18
17
  reason?: any;
@@ -0,0 +1,3 @@
1
+ import type { FullVideomailErrorData } from "../../types/error.js";
2
+ declare function sanitizeErrorReport(report: FullVideomailErrorData): object;
3
+ export default sanitizeErrorReport;
package/dist/umd/index.js CHANGED
@@ -5983,9 +5983,57 @@
5983
5983
  },
5984
5984
  s1 (module1, __unused_rspack_exports, __webpack_require__) {
5985
5985
  "use strict";
5986
+ var getSideChannel = __webpack_require__("M");
5986
5987
  var utils = __webpack_require__("K0");
5987
5988
  var has = Object.prototype.hasOwnProperty;
5988
5989
  var isArray = Array.isArray;
5990
+ var getPrototypeOf = Object.getPrototypeOf;
5991
+ var isPlainContainer = function(value) {
5992
+ if (!value || 'object' != typeof value) return false;
5993
+ if (isArray(value)) return true;
5994
+ var proto = getPrototypeOf(value);
5995
+ return proto === Object.prototype || null === proto;
5996
+ };
5997
+ var emptyCopyOf = function(value) {
5998
+ if (isArray(value)) {
5999
+ var arr = [];
6000
+ arr.length = value.length;
6001
+ return arr;
6002
+ }
6003
+ return null === getPrototypeOf(value) ? {
6004
+ __proto__: null
6005
+ } : {};
6006
+ };
6007
+ var copyInput = function(input) {
6008
+ var copies = getSideChannel();
6009
+ var result = {};
6010
+ var queue = [
6011
+ {
6012
+ source: input,
6013
+ target: result
6014
+ }
6015
+ ];
6016
+ for(var i = 0; i < queue.length; ++i){
6017
+ var source = queue[i].source;
6018
+ var target = queue[i].target;
6019
+ var keys = Object.keys(source);
6020
+ for(var j = 0; j < keys.length; ++j){
6021
+ var value = source[keys[j]];
6022
+ if (isPlainContainer(value)) {
6023
+ if (!copies.has(value)) {
6024
+ var copy = emptyCopyOf(value);
6025
+ copies.set(value, copy);
6026
+ queue[queue.length] = {
6027
+ source: value,
6028
+ target: copy
6029
+ };
6030
+ }
6031
+ target[keys[j]] = copies.get(value);
6032
+ } else target[keys[j]] = value;
6033
+ }
6034
+ }
6035
+ return result;
6036
+ };
5989
6037
  var defaults = {
5990
6038
  allowDots: false,
5991
6039
  allowEmptyArrays: false,
@@ -6057,6 +6105,7 @@
6057
6105
  var part = parts[i];
6058
6106
  var bracketEqualsPos = part.indexOf(']=');
6059
6107
  var pos = -1 === bracketEqualsPos ? part.indexOf('=') : bracketEqualsPos + 1;
6108
+ var isEmptyBracketKey = pos > 1 && '[]' === part.slice(pos - 2, pos);
6060
6109
  var key;
6061
6110
  var val;
6062
6111
  if (-1 === pos) {
@@ -6069,13 +6118,13 @@
6069
6118
  });
6070
6119
  }
6071
6120
  if (val && options.interpretNumericEntities && 'iso-8859-1' === charset) val = interpretNumericEntities(String(val));
6072
- if (part.indexOf('[]=') > -1) val = isArray(val) ? [
6121
+ if (isEmptyBracketKey) val = isArray(val) ? [
6073
6122
  val
6074
6123
  ] : val;
6075
6124
  if (options.comma && isArray(val) && val.length > options.arrayLimit) val = utils.combine([], val, options.arrayLimit, options.plainObjects, options.throwOnLimitExceeded);
6076
6125
  if (null !== key) {
6077
6126
  var existing = has.call(obj, key);
6078
- if (existing && ('combine' === options.duplicates || part.indexOf('[]=') > -1)) obj[key] = utils.combine(obj[key], val, options.arrayLimit, options.plainObjects, options.throwOnLimitExceeded);
6127
+ if (existing && ('combine' === options.duplicates || isEmptyBracketKey)) obj[key] = utils.combine(obj[key], val, options.arrayLimit, options.plainObjects, options.throwOnLimitExceeded);
6079
6128
  else if (!existing || 'last' === options.duplicates) obj[key] = val;
6080
6129
  }
6081
6130
  }
@@ -6117,8 +6166,29 @@
6117
6166
  }
6118
6167
  return leaf;
6119
6168
  };
6169
+ var topLevelDotsToBrackets = function(key) {
6170
+ var result = '';
6171
+ var depth = 0;
6172
+ for(var i = 0; i < key.length; i += 1){
6173
+ var cu = key.charCodeAt(i);
6174
+ if (0x5B === cu) {
6175
+ depth += 1;
6176
+ result += '[';
6177
+ } else if (0x5D === cu) {
6178
+ if (depth > 0) depth -= 1;
6179
+ result += ']';
6180
+ } else if (0x2E === cu && 0 === depth && i + 1 < key.length && 0x2E !== key.charCodeAt(i + 1) && 0x5B !== key.charCodeAt(i + 1)) {
6181
+ var start = i + 1;
6182
+ var j = start;
6183
+ while(j < key.length && 0x2E !== key.charCodeAt(j) && 0x5B !== key.charCodeAt(j))j += 1;
6184
+ result += '[' + key.slice(start, j) + ']';
6185
+ i = j - 1;
6186
+ } else result += key.charAt(i);
6187
+ }
6188
+ return result;
6189
+ };
6120
6190
  var splitKeyIntoSegments = function(originalKey, options) {
6121
- var key = options.allowDots ? originalKey.replace(/\.([^.[]+)/g, '[$1]') : originalKey;
6191
+ var key = options.allowDots ? topLevelDotsToBrackets(originalKey) : originalKey;
6122
6192
  if (options.depth <= 0) {
6123
6193
  if (!options.plainObjects && has.call(Object.prototype, key)) {
6124
6194
  if (!options.allowPrototypes) return;
@@ -6216,7 +6286,7 @@
6216
6286
  if ('' === str || null == str) return options.plainObjects ? {
6217
6287
  __proto__: null
6218
6288
  } : {};
6219
- var tempObj = 'string' == typeof str ? parseValues(str, options) : str;
6289
+ var tempObj = 'string' == typeof str ? parseValues(str, options) : copyInput(str);
6220
6290
  var obj = options.plainObjects ? {
6221
6291
  __proto__: null
6222
6292
  } : {};
@@ -6324,11 +6394,11 @@
6324
6394
  var objKeys;
6325
6395
  if ('comma' === generateArrayPrefix && isArray(obj)) {
6326
6396
  if (encodeValuesOnly && encoder) obj = utils.maybeMap(obj, function(v) {
6327
- return null == v ? v : encoder(v);
6397
+ return null == v ? v : encoder(v, defaults.encoder, charset, 'value', format);
6328
6398
  });
6329
6399
  objKeys = [
6330
6400
  {
6331
- value: obj.length > 0 ? obj.join(',') || null : void 0
6401
+ value: obj.length > 0 ? utils.toCoercible(obj).join(',') || null : void 0
6332
6402
  }
6333
6403
  ];
6334
6404
  } else if (isArray(filter)) objKeys = filter;
@@ -6336,7 +6406,7 @@
6336
6406
  var keys = Object.keys(obj);
6337
6407
  objKeys = sort ? keys.sort(sort) : keys;
6338
6408
  }
6339
- var encodedPrefix = encodeDotInKeys ? String(prefix).replace(/\./g, '%2E') : String(prefix);
6409
+ var encodedPrefix = String(prefix);
6340
6410
  var adjustedPrefix = commaRoundTrip && isArray(obj) && 1 === obj.length ? encodedPrefix + '[]' : encodedPrefix;
6341
6411
  if (allowEmptyArrays && isArray(obj) && 0 === obj.length && 0 === Object.keys(obj).length) return adjustedPrefix + '[]';
6342
6412
  for(var j = 0; j < objKeys.length; ++j){
@@ -6369,7 +6439,7 @@
6369
6439
  var filter = defaults.filter;
6370
6440
  if ('function' == typeof opts.filter || isArray(opts.filter)) filter = opts.filter;
6371
6441
  var arrayFormat;
6372
- arrayFormat = opts.arrayFormat in arrayPrefixGenerators ? opts.arrayFormat : 'indices' in opts ? opts.indices ? 'indices' : 'repeat' : defaults.arrayFormat;
6442
+ arrayFormat = has.call(arrayPrefixGenerators, opts.arrayFormat) ? opts.arrayFormat : 'indices' in opts ? opts.indices ? 'indices' : 'repeat' : defaults.arrayFormat;
6373
6443
  if ('commaRoundTrip' in opts && 'boolean' != typeof opts.commaRoundTrip) throw new TypeError('`commaRoundTrip` must be a boolean, or absent');
6374
6444
  var allowDots = void 0 === opts.allowDots ? true === opts.encodeDotInKeys ? true : defaults.allowDots : !!opts.allowDots;
6375
6445
  return {
@@ -6452,6 +6522,17 @@
6452
6522
  var setMaxIndex = function(obj, maxIndex) {
6453
6523
  overflowChannel.set(obj, maxIndex);
6454
6524
  };
6525
+ var conflictChannel = getSideChannel();
6526
+ var markConflict = function(obj, maxIndex) {
6527
+ conflictChannel.set(obj, maxIndex);
6528
+ return obj;
6529
+ };
6530
+ var isConflict = function(obj) {
6531
+ return conflictChannel.has(obj);
6532
+ };
6533
+ var getConflictIndex = function(obj) {
6534
+ return conflictChannel.get(obj);
6535
+ };
6455
6536
  var hexTable = function() {
6456
6537
  var array = [];
6457
6538
  for(var i = 0; i < 256; ++i)array[array.length] = '%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase();
@@ -6484,6 +6565,26 @@
6484
6565
  });
6485
6566
  else obj[key] = value;
6486
6567
  };
6568
+ var maxNumericIndex = function(obj, min) {
6569
+ var max = min;
6570
+ var keys = Object.keys(obj);
6571
+ for(var i = 0; i < keys.length; ++i){
6572
+ var num = parseInt(keys[i], 10);
6573
+ if (String(num) === keys[i] && num > max) max = num;
6574
+ }
6575
+ return max;
6576
+ };
6577
+ var limitedPair = function(first, second, options) {
6578
+ var pair = [
6579
+ first,
6580
+ second
6581
+ ];
6582
+ if (options && 'number' == typeof options.arrayLimit && pair.length > options.arrayLimit) {
6583
+ if (options.throwOnLimitExceeded) throw new RangeError('Array limit exceeded. Only ' + options.arrayLimit + ' element' + (1 === options.arrayLimit ? '' : 's') + ' allowed in an array.');
6584
+ return markOverflow(arrayToObject(pair, options), 1);
6585
+ }
6586
+ return pair;
6587
+ };
6487
6588
  var merge = function merge(target, source, options) {
6488
6589
  if (!source) return target;
6489
6590
  if ('object' != typeof source && 'function' != typeof source) {
@@ -6494,19 +6595,20 @@
6494
6595
  return markOverflow(arrayToObject(target.concat(source), options), nextIndex);
6495
6596
  }
6496
6597
  target[nextIndex] = source;
6497
- } else if (!target || 'object' != typeof target) return [
6498
- target,
6499
- source
6500
- ];
6598
+ } else if (!target || 'object' != typeof target) return limitedPair(target, source, options);
6501
6599
  else if (isOverflow(target)) {
6502
6600
  var newIndex = getMaxIndex(target) + 1;
6503
6601
  target[newIndex] = source;
6504
6602
  setMaxIndex(target, newIndex);
6505
- } else if (options && options.strictMerge) return [
6506
- target,
6507
- source
6508
- ];
6509
- else if (options && (options.plainObjects || options.allowPrototypes) || !has.call(Object.prototype, source)) target[source] = true;
6603
+ } else if (options && options.strictMerge && isConflict(target)) {
6604
+ var nextConflict = getConflictIndex(target) + 1;
6605
+ if (options.throwOnLimitExceeded && 'number' == typeof options.arrayLimit && nextConflict >= options.arrayLimit) throw new RangeError('Array limit exceeded. Only ' + options.arrayLimit + ' element' + (1 === options.arrayLimit ? '' : 's') + ' allowed in an array.');
6606
+ target[nextConflict] = source;
6607
+ markConflict(target, nextConflict);
6608
+ } else if (options && options.strictMerge) {
6609
+ var conflict = limitedPair(target, source, options);
6610
+ return isArray(conflict) ? markConflict(conflict, 1) : conflict;
6611
+ } else if (options && (options.plainObjects || options.allowPrototypes) || !has.call(Object.prototype, source)) target[source] = true;
6510
6612
  return target;
6511
6613
  }
6512
6614
  if (!target || 'object' != typeof target) {
@@ -6534,7 +6636,10 @@
6534
6636
  return combined;
6535
6637
  }
6536
6638
  var mergeTarget = target;
6537
- if (isArray(target) && !isArray(source)) mergeTarget = arrayToObject(target, options);
6639
+ if (isArray(target) && !isArray(source)) {
6640
+ mergeTarget = arrayToObject(target, options);
6641
+ if (isConflict(target)) markConflict(mergeTarget, target.length - 1);
6642
+ }
6538
6643
  if (isArray(target) && isArray(source)) {
6539
6644
  source.forEach(function(item, i) {
6540
6645
  if (has.call(target, i)) {
@@ -6552,11 +6657,15 @@
6552
6657
  return Object.keys(source).reduce(function(acc, key) {
6553
6658
  var value = source[key];
6554
6659
  has.call(acc, key) ? setProperty(acc, key, merge(acc[key], value, options)) : setProperty(acc, key, value);
6555
- if (isOverflow(source) && !isOverflow(acc)) markOverflow(acc, getMaxIndex(source));
6660
+ if (isOverflow(source) && !isOverflow(acc)) markOverflow(acc, maxNumericIndex(acc, getMaxIndex(source)));
6556
6661
  if (isOverflow(acc)) {
6557
6662
  var keyNum = parseInt(key, 10);
6558
6663
  if (String(keyNum) === key && keyNum >= 0 && keyNum > getMaxIndex(acc)) setMaxIndex(acc, keyNum);
6559
6664
  }
6665
+ if (isConflict(acc)) {
6666
+ var conflictKey = parseInt(key, 10);
6667
+ if (String(conflictKey) === key && conflictKey > getConflictIndex(acc)) markConflict(acc, conflictKey);
6668
+ }
6560
6669
  return acc;
6561
6670
  }, mergeTarget);
6562
6671
  };
@@ -6567,6 +6676,7 @@
6567
6676
  }, target);
6568
6677
  };
6569
6678
  var decode = function(str, defaultDecoder, charset) {
6679
+ if ('string' == typeof str && -1 === str.indexOf('%')) return -1 === str.indexOf('+') ? str : str.replace(/\+/g, ' ');
6570
6680
  var strWithoutPlus = str.replace(/\+/g, ' ');
6571
6681
  if ('iso-8859-1' === charset) return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);
6572
6682
  try {
@@ -6575,15 +6685,47 @@
6575
6685
  return strWithoutPlus;
6576
6686
  }
6577
6687
  };
6688
+ var hasToPrimitive = 'function' == typeof Symbol && 'symbol' == typeof Symbol.toPrimitive;
6689
+ var arrayJoin = Array.prototype.join;
6690
+ var arrayToString = Array.prototype.toString;
6691
+ var objectToString = Object.prototype.toString;
6692
+ var toCoercible = function toCoercible(value, joining) {
6693
+ if (!value || 'object' != typeof value && 'function' != typeof value) return value;
6694
+ if (hasToPrimitive && null != value[Symbol.toPrimitive]) return value;
6695
+ if (isArray(value) && value.toString === arrayToString && value.join === arrayJoin) {
6696
+ var ancestors = joining || getSideChannel();
6697
+ if (ancestors.has(value)) return '';
6698
+ ancestors.set(value, true);
6699
+ var copy;
6700
+ for(var i = 0; i < value.length; i += 1){
6701
+ var item = value[i];
6702
+ var coerced = toCoercible(item, ancestors);
6703
+ if (!copy && coerced !== item) {
6704
+ copy = [];
6705
+ for(var j = 0; j < i; j += 1)copy[j] = value[j];
6706
+ }
6707
+ if (copy) copy[i] = coerced;
6708
+ }
6709
+ ancestors['delete'](value);
6710
+ return copy || value;
6711
+ }
6712
+ if ('function' == typeof value.toString) return value;
6713
+ var valueOf = value.valueOf;
6714
+ if ('function' == typeof valueOf) {
6715
+ var primitive = valueOf.call(value);
6716
+ if (!primitive || 'object' != typeof primitive && 'function' != typeof primitive) return String(primitive);
6717
+ }
6718
+ return objectToString.call(value);
6719
+ };
6578
6720
  var limit = 1024;
6579
6721
  var encode = function(str, defaultEncoder, charset, kind, format) {
6580
6722
  if (0 === str.length) return str;
6581
6723
  var string = str;
6582
6724
  if ('symbol' == typeof str) string = Symbol.prototype.toString.call(str);
6583
- else if ('string' != typeof str) string = String(str);
6725
+ else if ('string' != typeof str) string = String(toCoercible(str));
6584
6726
  if ('iso-8859-1' === charset) return escape(string).replace(/%u[0-9a-f]{4}/gi, function($0) {
6585
6727
  return '%26%23' + parseInt($0.slice(2), 16) + '%3B';
6586
- });
6728
+ }).replace(/\+/g, '%2B');
6587
6729
  var out = '';
6588
6730
  for(var j = 0; j < string.length; j += limit){
6589
6731
  var segment = string.length >= limit ? string.slice(j, j + limit) : string;
@@ -6700,7 +6842,8 @@
6700
6842
  isRegExp: isRegExp,
6701
6843
  markOverflow: markOverflow,
6702
6844
  maybeMap: maybeMap,
6703
- merge: merge
6845
+ merge: merge,
6846
+ toCoercible: toCoercible
6704
6847
  };
6705
6848
  },
6706
6849
  jY (module1, __unused_rspack_exports, __webpack_require__) {
@@ -8111,7 +8254,7 @@
8111
8254
  });
8112
8255
  });
8113
8256
  },
8114
- S (__unused_rspack_module, exports1, __webpack_require__) {
8257
+ Sy (__unused_rspack_module, exports1, __webpack_require__) {
8115
8258
  var process = __webpack_require__("zT");
8116
8259
  var getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors || function(obj) {
8117
8260
  var keys = Object.keys(obj);
@@ -10477,7 +10620,7 @@
10477
10620
  return i[1];
10478
10621
  };
10479
10622
  },
10480
- RR (module1) {
10623
+ R (module1) {
10481
10624
  "use strict";
10482
10625
  var stylesInDOM = [];
10483
10626
  function getIndexByIdentifier(identifier) {
@@ -10978,7 +11121,7 @@
10978
11121
  var client = __webpack_require__("Q");
10979
11122
  var client_default = /*#__PURE__*/ __webpack_require__.n(client);
10980
11123
  var package_namespaceObject = {
10981
- rE: "16.0.0"
11124
+ rE: "16.0.1"
10982
11125
  };
10983
11126
  function isAudioEnabled(options) {
10984
11127
  return Boolean(options.audio.enabled);
@@ -10990,7 +11133,7 @@
10990
11133
  function isAutoPauseEnabled(options) {
10991
11134
  return options.enableAutoPause && options.enablePause;
10992
11135
  }
10993
- var util = __webpack_require__("S");
11136
+ var util = __webpack_require__("Sy");
10994
11137
  var util_default = /*#__PURE__*/ __webpack_require__.n(util);
10995
11138
  function getEventDetails(event) {
10996
11139
  const eventWithErrorDetails = event;
@@ -14421,7 +14564,6 @@
14421
14564
  location = window.location.href;
14422
14565
  logLines;
14423
14566
  whitelistKey;
14424
- cookie;
14425
14567
  err;
14426
14568
  promise;
14427
14569
  reason;
@@ -14459,9 +14601,6 @@
14459
14601
  this.device = usefulClientData.device.type ? usefulClientData.device : void 0;
14460
14602
  this.engine = usefulClientData.engine;
14461
14603
  this.os = usefulClientData.os;
14462
- let cookie;
14463
- if (__webpack_require__.g.document.cookie.length > 0) cookie = __webpack_require__.g.document.cookie.split(",").map((c)=>c.trim());
14464
- this.cookie = cookie && cookie.length > 0 ? cookie : void 0;
14465
14604
  this.screen = [
14466
14605
  screen.width,
14467
14606
  screen.height,
@@ -14646,6 +14785,51 @@
14646
14785
  return exc;
14647
14786
  }
14648
14787
  const error_findOriginalExc = findOriginalExc;
14788
+ const REDACTED = "[redacted]";
14789
+ const PRIVATE_FIELDS = "cookies?|set[-_]?cookie|(?:proxy[-_]?)?authorization|pass(?:word|phrase|wd)|(?:client[-_]?)?secret|(?:x[-_]?)?api[-_]?key|(?:access|refresh|id|auth|session)[-_]?token|token|(?:x[-_]?)?(?:csrf|xsrf)(?:[-_]?token)?|session(?:[-_]?id)?|e[-_]?mail|from|to|cc|bcc|recipients?|sender";
14790
+ const PRIVATE_FIELD = new RegExp(`^(?:${PRIVATE_FIELDS})$`, "iu");
14791
+ const PRIVATE_CONTENT_FIELD = /^(?:subject|body)$/iu;
14792
+ const URL_FIELD = /^(?:url|uri|href|location|recordLocation|blockedURI|responseURL)$/iu;
14793
+ const LOG_ASSIGNMENT = String.raw`(["']?\b(?:${PRIVATE_FIELDS}|subject|body)["']?\s*[:=]\s*)`;
14794
+ const LOG_VALUES = [
14795
+ /"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'/u.source,
14796
+ /(?:Bearer|Basic)\s+[^\s,;}]+/u.source,
14797
+ /[^\s,;{}[\]]+/u.source
14798
+ ].join("|");
14799
+ const PRIVATE_LOG_VALUE = new RegExp(`${LOG_ASSIGNMENT}(?:${LOG_VALUES})`, "giu");
14800
+ function sanitizeUrl(value, base) {
14801
+ try {
14802
+ const url = new URL(value, base);
14803
+ url.username = "";
14804
+ url.password = "";
14805
+ url.search = "";
14806
+ url.hash = "";
14807
+ return url.href;
14808
+ } catch {
14809
+ return REDACTED;
14810
+ }
14811
+ }
14812
+ function sanitizeText(text) {
14813
+ return text.replace(/\b(?:https?|wss?):\/\/[^\s"'<>(){}]+/giu, (value)=>{
14814
+ const position = /:\d+:\d+$/u.exec(value)?.[0] ?? "";
14815
+ const address = position ? value.slice(0, -position.length) : value;
14816
+ return `${sanitizeUrl(address)}${position}`;
14817
+ }).replace(PRIVATE_LOG_VALUE, `$1${REDACTED}`).replace(/\b(Bearer|Basic)\s+[\w.+/~=-]+/giu, `$1 ${REDACTED}`).replace(/\b[\w.%+-]+@[\w.-]+\.[a-z]{2,}\b/giu, REDACTED);
14818
+ }
14819
+ function sanitizeErrorReport(report) {
14820
+ function redactField(key, value) {
14821
+ if (PRIVATE_FIELD.test(key)) return REDACTED;
14822
+ if ("string" != typeof value) return value;
14823
+ if (PRIVATE_CONTENT_FIELD.test(key)) return REDACTED;
14824
+ const text = URL_FIELD.test(key) ? sanitizeUrl(value, report.location) : value;
14825
+ return sanitizeText(text);
14826
+ }
14827
+ const json = JSON.stringify(serializeError(report), redactField);
14828
+ const sanitized = JSON.parse(json);
14829
+ if (null === sanitized || "object" != typeof sanitized) throw new TypeError("An error report must serialize to an object.");
14830
+ return sanitized;
14831
+ }
14832
+ const error_sanitizeErrorReport = sanitizeErrorReport;
14649
14833
  function _extends() {
14650
14834
  _extends = Object.assign || function(target) {
14651
14835
  for(var i = 1; i < arguments.length; i++){
@@ -15203,7 +15387,6 @@
15203
15387
  },
15204
15388
  browser: err.browser,
15205
15389
  code: err.code,
15206
- cookie: err.cookie,
15207
15390
  cause: err.cause instanceof Error ? serializeError(err.cause) : err.cause,
15208
15391
  cpu: err.cpu,
15209
15392
  device: err.device,
@@ -15224,7 +15407,7 @@
15224
15407
  enumerateDevices,
15225
15408
  usedConstraints: err.usedConstraints
15226
15409
  };
15227
- await client_default()(FormMethod.POST, url).query(queryParams).set("Timezone-Id", this.timezoneId).withCredentials().send(fullVideomailErrorData).timeout(this.options.timeouts.connection);
15410
+ await client_default()(FormMethod.POST, url).query(queryParams).set("Timezone-Id", this.timezoneId).withCredentials().send(error_sanitizeErrorReport(fullVideomailErrorData)).timeout(this.options.timeouts.connection);
15228
15411
  }
15229
15412
  async post(videomail) {
15230
15413
  const newVideomail = this.applyDefaultValues(videomail);
@@ -15468,7 +15651,7 @@
15468
15651
  return newOptions;
15469
15652
  }
15470
15653
  const options_mergeWithDefaultOptions = mergeWithDefaultOptions;
15471
- var injectStylesIntoStyleTag = __webpack_require__("RR");
15654
+ var injectStylesIntoStyleTag = __webpack_require__("R");
15472
15655
  var injectStylesIntoStyleTag_default = /*#__PURE__*/ __webpack_require__.n(injectStylesIntoStyleTag);
15473
15656
  var styleDomAPI = __webpack_require__("Bd");
15474
15657
  var styleDomAPI_default = /*#__PURE__*/ __webpack_require__.n(styleDomAPI);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "videomail-client",
3
- "version": "16.0.0",
3
+ "version": "16.0.1",
4
4
  "description": "A wicked npm package to record videos directly in the browser, for Deaf and Sign Language!",
5
5
  "keywords": [
6
6
  "webcam",
@@ -101,9 +101,9 @@
101
101
  "@types/ua-parser-js": "0.7.39",
102
102
  "@vitest/eslint-plugin": "1.6.27",
103
103
  "audit-ci": "7.1.0",
104
- "chromatic": "18.12.1",
104
+ "chromatic": "18.13.0",
105
105
  "cross-env": "10.1.0",
106
- "eslint": "10.12.0",
106
+ "eslint": "10.13.0",
107
107
  "eslint-import-resolver-typescript": "4.4.5",
108
108
  "eslint-plugin-de-morgan": "2.2.1",
109
109
  "eslint-plugin-depend": "1.5.0",
@@ -112,7 +112,7 @@
112
112
  "eslint-plugin-regexp": "3.3.1",
113
113
  "eslint-plugin-simple-import-sort": "14.0.0",
114
114
  "globals": "17.13.0",
115
- "jsdom": "30.1.2",
115
+ "jsdom": "30.1.3",
116
116
  "msw": "2.15.0",
117
117
  "msw-storybook-addon": "3.0.3",
118
118
  "prettier": "3.9.10",
@@ -126,11 +126,11 @@
126
126
  "type-fest": "5.10.0",
127
127
  "typescript": "6.0.3",
128
128
  "typescript-eslint": "8.71.2",
129
- "vitest": "5.0.4"
129
+ "vitest": "5.0.5"
130
130
  },
131
131
  "engines": {
132
- "node": "^26.5.0",
133
- "npm": ">=11.16.0"
132
+ "node": "^26.12.0",
133
+ "npm": ">=11.20.0"
134
134
  },
135
135
  "msw": {
136
136
  "workerDirectory": [