videomail-client 9.3.1 → 9.3.3

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.
@@ -3,12 +3,10 @@
3
3
  "files.trimTrailingWhitespace": true,
4
4
  "editor.defaultFormatter": "esbenp.prettier-vscode",
5
5
  "editor.formatOnSave": true,
6
+ "editor.codeActionsOnSave": {
7
+ "source.fixAll.eslint": "always"
8
+ },
6
9
  "prettier.configPath": "./prettier.config.cjs",
7
- "editor.codeActionsOnSave": [
8
- // Sort package.json keys with
9
- // https://marketplace.visualstudio.com/items?itemName=unional.vscode-sort-package-json
10
- "source.sortPackageJson"
11
- ],
12
10
  "cSpell.words": [
13
11
  "animitter",
14
12
  "autobuffer",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "videomail-client",
3
- "version": "9.3.1",
3
+ "version": "9.3.3",
4
4
  "description": "A wicked npm package to record videos directly in the browser, wohooo!",
5
5
  "keywords": [
6
6
  "webcam",
@@ -68,8 +68,8 @@
68
68
  "number-is-integer": "2.0.0",
69
69
  "request-frame": "1.5.3",
70
70
  "safe-json-stringify": "1.2.0",
71
- "superagent": "8.1.2",
72
- "ua-parser-js": "1.0.38",
71
+ "superagent": "10.1.0",
72
+ "ua-parser-js": "1.0.39",
73
73
  "websocket-stream": "5.5.2"
74
74
  },
75
75
  "devDependencies": {
@@ -108,14 +108,14 @@
108
108
  "gulp-terser": "2.1.0",
109
109
  "minimist": "1.2.8",
110
110
  "nib": "1.2.0",
111
- "postcss": "8.4.45",
111
+ "postcss": "8.4.47",
112
112
  "prettier": "3.3.3",
113
113
  "prettier-plugin-curly": "0.2.2",
114
- "prettier-plugin-organize-imports": "4.0.0",
114
+ "prettier-plugin-organize-imports": "4.1.0",
115
115
  "prettier-plugin-packagejson": "2.5.2",
116
116
  "prettier-plugin-sh": "0.14.0",
117
117
  "router": "1.3.8",
118
- "tape": "5.8.1",
118
+ "tape": "5.9.0",
119
119
  "tape-catch": "1.0.6",
120
120
  "tape-run": "11.0.0",
121
121
  "vinyl-buffer": "1.0.1",
@@ -13762,14 +13762,18 @@ function getStateLength (state) {
13762
13762
  },{}],103:[function(_dereq_,module,exports){
13763
13763
  "use strict";
13764
13764
 
13765
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
13766
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
13767
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
13768
- function Agent() {
13769
- this._defaults = [];
13770
- }
13771
- for (var _i = 0, _arr = ['use', 'on', 'once', 'set', 'query', 'type', 'accept', 'auth', 'withCredentials', 'sortQuery', 'retry', 'ok', 'redirects', 'timeout', 'buffer', 'serialize', 'parse', 'ca', 'key', 'pfx', 'cert', 'disableTLSCerts']; _i < _arr.length; _i++) {
13772
- const fn = _arr[_i];
13765
+ const defaults = ['use', 'on', 'once', 'set', 'query', 'type', 'accept', 'auth', 'withCredentials', 'sortQuery', 'retry', 'ok', 'redirects', 'timeout', 'buffer', 'serialize', 'parse', 'ca', 'key', 'pfx', 'cert', 'disableTLSCerts'];
13766
+ class Agent {
13767
+ constructor() {
13768
+ this._defaults = [];
13769
+ }
13770
+ _setDefaults(request) {
13771
+ for (const def of this._defaults) {
13772
+ request[def.fn](...def.args);
13773
+ }
13774
+ }
13775
+ }
13776
+ for (const fn of defaults) {
13773
13777
  // Default setting for all requests from this agent
13774
13778
  Agent.prototype[fn] = function () {
13775
13779
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
@@ -13782,28 +13786,11 @@ for (var _i = 0, _arr = ['use', 'on', 'once', 'set', 'query', 'type', 'accept',
13782
13786
  return this;
13783
13787
  };
13784
13788
  }
13785
- Agent.prototype._setDefaults = function (request) {
13786
- var _iterator = _createForOfIteratorHelper(this._defaults),
13787
- _step;
13788
- try {
13789
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
13790
- const def = _step.value;
13791
- request[def.fn](...def.args);
13792
- }
13793
- } catch (err) {
13794
- _iterator.e(err);
13795
- } finally {
13796
- _iterator.f();
13797
- }
13798
- };
13799
13789
  module.exports = Agent;
13800
13790
 
13801
13791
  },{}],104:[function(_dereq_,module,exports){
13802
13792
  "use strict";
13803
13793
 
13804
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
13805
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
13806
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
13807
13794
  /**
13808
13795
  * Root reference for iframes.
13809
13796
  */
@@ -13824,10 +13811,11 @@ const Emitter = _dereq_('component-emitter');
13824
13811
  const safeStringify = _dereq_('fast-safe-stringify');
13825
13812
  const qs = _dereq_('qs');
13826
13813
  const RequestBase = _dereq_('./request-base');
13827
- const _require = _dereq_('./utils'),
13828
- isObject = _require.isObject,
13829
- mixin = _require.mixin,
13830
- hasOwn = _require.hasOwn;
13814
+ const {
13815
+ isObject,
13816
+ mixin,
13817
+ hasOwn
13818
+ } = _dereq_('./utils');
13831
13819
  const ResponseBase = _dereq_('./response-base');
13832
13820
  const Agent = _dereq_('./agent-base');
13833
13821
 
@@ -13911,17 +13899,8 @@ function pushEncodedKeyValuePair(pairs, key, value) {
13911
13899
  return;
13912
13900
  }
13913
13901
  if (Array.isArray(value)) {
13914
- var _iterator = _createForOfIteratorHelper(value),
13915
- _step;
13916
- try {
13917
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
13918
- const v = _step.value;
13919
- pushEncodedKeyValuePair(pairs, key, v);
13920
- }
13921
- } catch (err) {
13922
- _iterator.e(err);
13923
- } finally {
13924
- _iterator.f();
13902
+ for (const v of value) {
13903
+ pushEncodedKeyValuePair(pairs, key, v);
13925
13904
  }
13926
13905
  } else if (isObject(value)) {
13927
13906
  for (const subkey in value) {
@@ -13995,7 +13974,12 @@ request.types = {
13995
13974
  */
13996
13975
 
13997
13976
  request.serialize = {
13998
- 'application/x-www-form-urlencoded': qs.stringify,
13977
+ 'application/x-www-form-urlencoded': obj => {
13978
+ return qs.stringify(obj, {
13979
+ indices: false,
13980
+ strictNullHandling: true
13981
+ });
13982
+ },
13999
13983
  'application/json': safeStringify
14000
13984
  };
14001
13985
 
@@ -14109,7 +14093,9 @@ function Response(request_) {
14109
14093
  // responseText is accessible only if responseType is '' or 'text' and on older browsers
14110
14094
  this.text = this.req.method !== 'HEAD' && (this.xhr.responseType === '' || this.xhr.responseType === 'text') || typeof this.xhr.responseType === 'undefined' ? this.xhr.responseText : null;
14111
14095
  this.statusText = this.req.xhr.statusText;
14112
- let status = this.xhr.status;
14096
+ let {
14097
+ status
14098
+ } = this.xhr;
14113
14099
  // handle IE9 bug: http://stackoverflow.com/questions/10046972/msie-returns-status-code-of-1223-for-ajax-request
14114
14100
  if (status === 1223) {
14115
14101
  status = 204;
@@ -14160,9 +14146,15 @@ Response.prototype._parseBody = function (string_) {
14160
14146
  */
14161
14147
 
14162
14148
  Response.prototype.toError = function () {
14163
- const req = this.req;
14164
- const method = req.method;
14165
- const url = req.url;
14149
+ const {
14150
+ req
14151
+ } = this;
14152
+ const {
14153
+ method
14154
+ } = req;
14155
+ const {
14156
+ url
14157
+ } = req;
14166
14158
  const message = `cannot ${method} ${url} (${this.status})`;
14167
14159
  const error = new Error(message);
14168
14160
  error.status = this.status;
@@ -14482,13 +14474,17 @@ Request.prototype._end = function () {
14482
14474
  if (this._aborted) return this.callback(new Error('The request has been aborted even before .end() was called'));
14483
14475
  const self = this;
14484
14476
  this.xhr = request.getXHR();
14485
- const xhr = this.xhr;
14477
+ const {
14478
+ xhr
14479
+ } = this;
14486
14480
  let data = this._formData || this._data;
14487
14481
  this._setTimeouts();
14488
14482
 
14489
14483
  // state change
14490
14484
  xhr.addEventListener('readystatechange', () => {
14491
- const readyState = xhr.readyState;
14485
+ const {
14486
+ readyState
14487
+ } = xhr;
14492
14488
  if (readyState >= 2 && self._responseTimeoutTimer) {
14493
14489
  clearTimeout(self._responseTimeoutTimer);
14494
14490
  }
@@ -14581,8 +14577,7 @@ Request.prototype._end = function () {
14581
14577
  xhr.send(typeof data === 'undefined' ? null : data);
14582
14578
  };
14583
14579
  request.agent = () => new Agent();
14584
- for (var _i = 0, _arr = ['GET', 'POST', 'OPTIONS', 'PATCH', 'PUT', 'DELETE']; _i < _arr.length; _i++) {
14585
- const method = _arr[_i];
14580
+ for (const method of ['GET', 'POST', 'OPTIONS', 'PATCH', 'PUT', 'DELETE']) {
14586
14581
  Agent.prototype[method.toLowerCase()] = function (url, fn) {
14587
14582
  const request_ = new request.Request(method, url);
14588
14583
  this._setDefaults(request_);
@@ -14744,17 +14739,15 @@ request.put = (url, data, fn) => {
14744
14739
  };
14745
14740
 
14746
14741
  },{"./agent-base":103,"./request-base":105,"./response-base":106,"./utils":107,"component-emitter":24,"fast-safe-stringify":45,"qs":81}],105:[function(_dereq_,module,exports){
14747
- (function (process){(function (){
14748
14742
  "use strict";
14749
14743
 
14750
- const semver = _dereq_('semver');
14751
-
14752
14744
  /**
14753
14745
  * Module of mixed-in functions shared between node and client code
14754
14746
  */
14755
- const _require = _dereq_('./utils'),
14756
- isObject = _require.isObject,
14757
- hasOwn = _require.hasOwn;
14747
+ const {
14748
+ isObject,
14749
+ hasOwn
14750
+ } = _dereq_('./utils');
14758
14751
 
14759
14752
  /**
14760
14753
  * Expose `RequestBase`.
@@ -15189,25 +15182,8 @@ RequestBase.prototype.abort = function () {
15189
15182
  this._aborted = true;
15190
15183
  if (this.xhr) this.xhr.abort(); // browser
15191
15184
  if (this.req) {
15192
- // Node v13 has major differences in `abort()`
15193
- // https://github.com/nodejs/node/blob/v12.x/lib/internal/streams/end-of-stream.js
15194
- // https://github.com/nodejs/node/blob/v13.x/lib/internal/streams/end-of-stream.js
15195
- // https://github.com/nodejs/node/blob/v14.x/lib/internal/streams/end-of-stream.js
15196
- // (if you run a diff across these you will see the differences)
15197
- //
15198
- // References:
15199
- // <https://github.com/nodejs/node/issues/31630>
15200
- // <https://github.com/ladjs/superagent/pull/1084/commits/dc18679a7c5ccfc6046d882015e5126888973bc8>
15201
- //
15202
- // Thanks to @shadowgate15 and @niftylettuce
15203
- if (semver.gte(process.version, 'v13.0.0') && semver.lt(process.version, 'v14.0.0')) {
15204
- // Note that the reason this doesn't work is because in v13 as compared to v14
15205
- // there is no `callback = nop` set in end-of-stream.js above
15206
- throw new Error('Superagent does not work in v13 properly with abort() due to Node.js core changes');
15207
- }
15208
15185
  this.req.abort(); // node
15209
15186
  }
15210
-
15211
15187
  this.clearTimeout();
15212
15188
  this.emit('abort');
15213
15189
  return this;
@@ -15483,8 +15459,7 @@ RequestBase.prototype._setTimeouts = function () {
15483
15459
  }
15484
15460
  };
15485
15461
 
15486
- }).call(this)}).call(this,_dereq_('_process'))
15487
- },{"./utils":107,"_process":79,"semver":16}],106:[function(_dereq_,module,exports){
15462
+ },{"./utils":107}],106:[function(_dereq_,module,exports){
15488
15463
  "use strict";
15489
15464
 
15490
15465
  /**
@@ -15608,9 +15583,6 @@ ResponseBase.prototype._setStatusProperties = function (status) {
15608
15583
  },{"./utils":107}],107:[function(_dereq_,module,exports){
15609
15584
  "use strict";
15610
15585
 
15611
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
15612
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
15613
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
15614
15586
  /**
15615
15587
  * Return the mime type for the given `str`.
15616
15588
  *
@@ -15631,20 +15603,11 @@ exports.type = string_ => string_.split(/ *; */).shift();
15631
15603
 
15632
15604
  exports.params = value => {
15633
15605
  const object = {};
15634
- var _iterator = _createForOfIteratorHelper(value.split(/ *; */)),
15635
- _step;
15636
- try {
15637
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
15638
- const string_ = _step.value;
15639
- const parts = string_.split(/ *= */);
15640
- const key = parts.shift();
15641
- const value = parts.shift();
15642
- if (key && value) object[key] = value;
15643
- }
15644
- } catch (err) {
15645
- _iterator.e(err);
15646
- } finally {
15647
- _iterator.f();
15606
+ for (const string_ of value.split(/ *; */)) {
15607
+ const parts = string_.split(/ *= */);
15608
+ const key = parts.shift();
15609
+ const value = parts.shift();
15610
+ if (key && value) object[key] = value;
15648
15611
  }
15649
15612
  return object;
15650
15613
  };
@@ -15659,20 +15622,11 @@ exports.params = value => {
15659
15622
 
15660
15623
  exports.parseLinks = value => {
15661
15624
  const object = {};
15662
- var _iterator2 = _createForOfIteratorHelper(value.split(/ *, */)),
15663
- _step2;
15664
- try {
15665
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
15666
- const string_ = _step2.value;
15667
- const parts = string_.split(/ *; */);
15668
- const url = parts[0].slice(1, -1);
15669
- const rel = parts[1].split(/ *= */)[1].slice(1, -1);
15670
- object[rel] = url;
15671
- }
15672
- } catch (err) {
15673
- _iterator2.e(err);
15674
- } finally {
15675
- _iterator2.f();
15625
+ for (const string_ of value.split(/ *, */)) {
15626
+ const parts = string_.split(/ *; */);
15627
+ const url = parts[0].slice(1, -1);
15628
+ const rel = parts[1].split(/ *= */)[1].slice(1, -1);
15629
+ object[rel] = url;
15676
15630
  }
15677
15631
  return object;
15678
15632
  };
@@ -15729,6 +15683,26 @@ exports.mixin = (target, source) => {
15729
15683
  }
15730
15684
  };
15731
15685
 
15686
+ /**
15687
+ * Check if the response is compressed using Gzip or Deflate.
15688
+ * @param {Object} res
15689
+ * @return {Boolean}
15690
+ */
15691
+
15692
+ exports.isGzipOrDeflateEncoding = res => {
15693
+ return new RegExp(/^\s*(?:deflate|gzip)\s*$/).test(res.headers['content-encoding']);
15694
+ };
15695
+
15696
+ /**
15697
+ * Check if the response is compressed using Brotli.
15698
+ * @param {Object} res
15699
+ * @return {Boolean}
15700
+ */
15701
+
15702
+ exports.isBrotliEncoding = res => {
15703
+ return new RegExp(/^\s*(?:br)\s*$/).test(res.headers['content-encoding']);
15704
+ };
15705
+
15732
15706
  },{}],108:[function(_dereq_,module,exports){
15733
15707
  (function (setImmediate,clearImmediate){(function (){
15734
15708
  var nextTick = _dereq_('process/browser.js').nextTick;
@@ -15832,7 +15806,7 @@ module.exports = function typedarrayToBuffer (arr) {
15832
15806
  }).call(this)}).call(this,_dereq_("buffer").Buffer)
15833
15807
  },{"buffer":18}],110:[function(_dereq_,module,exports){
15834
15808
  /////////////////////////////////////////////////////////////////////////////////
15835
- /* UAParser.js v1.0.38
15809
+ /* UAParser.js v1.0.39
15836
15810
  Copyright © 2012-2021 Faisal Salman <f@faisalman.com>
15837
15811
  MIT License *//*
15838
15812
  Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.
@@ -15850,7 +15824,7 @@ module.exports = function typedarrayToBuffer (arr) {
15850
15824
  /////////////
15851
15825
 
15852
15826
 
15853
- var LIBVERSION = '1.0.38',
15827
+ var LIBVERSION = '1.0.39',
15854
15828
  EMPTY = '',
15855
15829
  UNKNOWN = '?',
15856
15830
  FUNC_TYPE = 'function',
@@ -15893,7 +15867,8 @@ module.exports = function typedarrayToBuffer (arr) {
15893
15867
  ZEBRA = 'Zebra',
15894
15868
  FACEBOOK = 'Facebook',
15895
15869
  CHROMIUM_OS = 'Chromium OS',
15896
- MAC_OS = 'Mac OS';
15870
+ MAC_OS = 'Mac OS',
15871
+ SUFFIX_BROWSER = ' Browser';
15897
15872
 
15898
15873
  ///////////
15899
15874
  // Helper
@@ -16004,7 +15979,7 @@ module.exports = function typedarrayToBuffer (arr) {
16004
15979
  return (i === UNKNOWN) ? undefined : i;
16005
15980
  }
16006
15981
  }
16007
- return str;
15982
+ return map.hasOwnProperty('*') ? map['*'] : str;
16008
15983
  };
16009
15984
 
16010
15985
  ///////////////
@@ -16065,17 +16040,20 @@ module.exports = function typedarrayToBuffer (arr) {
16065
16040
  /\bb[ai]*d(?:uhd|[ub]*[aekoprswx]{5,6})[\/ ]?([\w\.]+)/i // Baidu
16066
16041
  ], [VERSION, [NAME, 'Baidu']], [
16067
16042
  /(kindle)\/([\w\.]+)/i, // Kindle
16068
- /(lunascape|maxthon|netfront|jasmine|blazer)[\/ ]?([\w\.]*)/i, // Lunascape/Maxthon/Netfront/Jasmine/Blazer
16043
+ /(lunascape|maxthon|netfront|jasmine|blazer|sleipnir)[\/ ]?([\w\.]*)/i,
16044
+ // Lunascape/Maxthon/Netfront/Jasmine/Blazer/Sleipnir
16069
16045
  // Trident based
16070
16046
  /(avant|iemobile|slim)\s?(?:browser)?[\/ ]?([\w\.]*)/i, // Avant/IEMobile/SlimBrowser
16071
16047
  /(?:ms|\()(ie) ([\w\.]+)/i, // Internet Explorer
16072
16048
 
16073
16049
  // Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon
16074
- /(flock|rockmelt|midori|epiphany|silk|skyfire|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|qq|duckduckgo)\/([-\w\.]+)/i,
16075
- // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ, aka ShouQ
16076
- /(heytap|ovi)browser\/([\d\.]+)/i, // Heytap/Ovi
16050
+ /(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|duckduckgo|klar|helio)\/([-\w\.]+)/i,
16051
+ // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ//Vivaldi/DuckDuckGo/Klar/Helio
16052
+ /(heytap|ovi)browser\/([\d\.]+)/i, // HeyTap/Ovi
16077
16053
  /(weibo)__([\d\.]+)/i // Weibo
16078
16054
  ], [NAME, VERSION], [
16055
+ /quark(?:pc)?\/([-\w\.]+)/i // Quark
16056
+ ], [VERSION, [NAME, 'Quark']], [
16079
16057
  /\bddg\/([\w\.]+)/i // DuckDuckGo
16080
16058
  ], [VERSION, [NAME, 'DuckDuckGo']], [
16081
16059
  /(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i // UCBrowser
@@ -16109,9 +16087,11 @@ module.exports = function typedarrayToBuffer (arr) {
16109
16087
  /fxios\/([-\w\.]+)/i // Firefox for iOS
16110
16088
  ], [VERSION, [NAME, FIREFOX]], [
16111
16089
  /\bqihu|(qi?ho?o?|360)browser/i // 360
16112
- ], [[NAME, '360 ' + BROWSER]], [
16113
- /(oculus|sailfish|huawei|vivo)browser\/([\w\.]+)/i
16114
- ], [[NAME, /(.+)/, '$1 ' + BROWSER], VERSION], [ // Oculus/Sailfish/HuaweiBrowser/VivoBrowser
16090
+ ], [[NAME, '360' + SUFFIX_BROWSER]], [
16091
+ /\b(qq)\/([\w\.]+)/i // QQ
16092
+ ], [[NAME, /(.+)/, '$1Browser'], VERSION], [
16093
+ /(oculus|sailfish|huawei|vivo|pico)browser\/([\w\.]+)/i
16094
+ ], [[NAME, /(.+)/, '$1' + SUFFIX_BROWSER], VERSION], [ // Oculus/Sailfish/HuaweiBrowser/VivoBrowser/PicoBrowser
16115
16095
  /samsungbrowser\/([\w\.]+)/i // Samsung Internet
16116
16096
  ], [VERSION, [NAME, SAMSUNG + ' Internet']], [
16117
16097
  /(comodo_dragon)\/([\w\.]+)/i // Comodo Dragon
@@ -16124,7 +16104,7 @@ module.exports = function typedarrayToBuffer (arr) {
16124
16104
  /(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i, // Tesla
16125
16105
  /m?(qqbrowser|2345Explorer)[\/ ]?([\w\.]+)/i // QQBrowser/2345 Browser
16126
16106
  ], [NAME, VERSION], [
16127
- /(lbbrowser)/i, // LieBao Browser
16107
+ /(lbbrowser|rekonq)/i, // LieBao Browser/Rekonq
16128
16108
  /\[(linkedin)app\]/i // LinkedIn App for iOS & Android
16129
16109
  ], [NAME], [
16130
16110
 
@@ -16170,23 +16150,24 @@ module.exports = function typedarrayToBuffer (arr) {
16170
16150
  // Gecko based
16171
16151
  /(navigator|netscape\d?)\/([-\w\.]+)/i // Netscape
16172
16152
  ], [[NAME, 'Netscape'], VERSION], [
16153
+ /(wolvic)\/([\w\.]+)/i // Wolvic
16154
+ ], [NAME, VERSION], [
16173
16155
  /mobile vr; rv:([\w\.]+)\).+firefox/i // Firefox Reality
16174
16156
  ], [VERSION, [NAME, FIREFOX+' Reality']], [
16175
16157
  /ekiohf.+(flow)\/([\w\.]+)/i, // Flow
16176
16158
  /(swiftfox)/i, // Swiftfox
16177
- /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\/ ]?([\w\.\+]+)/i,
16178
- // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror/Klar
16159
+ /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror)[\/ ]?([\w\.\+]+)/i,
16160
+ // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror
16179
16161
  /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([-\w\.]+)$/i,
16180
16162
  // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix
16181
16163
  /(firefox)\/([\w\.]+)/i, // Other Firefox-based
16182
16164
  /(mozilla)\/([\w\.]+) .+rv\:.+gecko\/\d+/i, // Mozilla
16183
16165
 
16184
16166
  // Other
16185
- /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,
16186
- // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir/Obigo/Mosaic/Go/ICE/UP.Browser
16187
- /(links) \(([\w\.]+)/i, // Links
16188
- /panasonic;(viera)/i // Panasonic Viera
16189
- ], [NAME, VERSION], [
16167
+ /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|obigo|mosaic|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,
16168
+ // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Obigo/Mosaic/Go/ICE/UP.Browser
16169
+ /(links) \(([\w\.]+)/i // Links
16170
+ ], [NAME, [VERSION, /_/g, '.']], [
16190
16171
 
16191
16172
  /(cobalt)\/([\w\.]+)/i // Cobalt
16192
16173
  ], [NAME, [VERSION, /master.|lts./, ""]]
@@ -16233,8 +16214,8 @@ module.exports = function typedarrayToBuffer (arr) {
16233
16214
  // Samsung
16234
16215
  /\b(sch-i[89]0\d|shw-m380s|sm-[ptx]\w{2,4}|gt-[pn]\d{2,4}|sgh-t8[56]9|nexus 10)/i
16235
16216
  ], [MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]], [
16236
- /\b((?:s[cgp]h|gt|sm)-\w+|sc[g-]?[\d]+a?|galaxy nexus)/i,
16237
- /samsung[- ]([-\w]+)/i,
16217
+ /\b((?:s[cgp]h|gt|sm)-(?![lr])\w+|sc[g-]?[\d]+a?|galaxy nexus)/i,
16218
+ /samsung[- ]((?!sm-[lr])[-\w]+)/i,
16238
16219
  /sec-(sgh\w+)/i
16239
16220
  ], [MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]], [
16240
16221
 
@@ -16265,7 +16246,7 @@ module.exports = function typedarrayToBuffer (arr) {
16265
16246
  /\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i, // Xiaomi Hongmi
16266
16247
  /\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i, // Xiaomi Redmi
16267
16248
  /oid[^\)]+; (m?[12][0-389][01]\w{3,6}[c-y])( bui|; wv|\))/i, // Xiaomi Redmi 'numeric' models
16268
- /\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\))/i // Xiaomi Mi
16249
+ /\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite|pro)?)(?: bui|\))/i // Xiaomi Mi
16269
16250
  ], [[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, MOBILE]], [
16270
16251
  /oid[^\)]+; (2\d{4}(283|rpbf)[cgl])( bui|\))/i, // Redmi Pad
16271
16252
  /\b(mi[-_ ]?(?:pad)(?:[\w_ ]+))(?: bui|\))/i // Mi Pad tablets
@@ -16333,7 +16314,7 @@ module.exports = function typedarrayToBuffer (arr) {
16333
16314
 
16334
16315
  // Amazon
16335
16316
  /(alexa)webm/i,
16336
- /(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\))/i, // Kindle Fire without Silk / Echo Show
16317
+ /(kf[a-z]{2}wi|aeo(?!bc)\w\w)( bui|\))/i, // Kindle Fire without Silk / Echo Show
16337
16318
  /(kf[a-z]+)( bui|\)).+silk\//i // Kindle Fire HD
16338
16319
  ], [MODEL, [VENDOR, AMAZON], [TYPE, TABLET]], [
16339
16320
  /((?:sd|kf)[0349hijorstuw]+)( bui|\)).+silk\//i // Fire Phone
@@ -16362,6 +16343,14 @@ module.exports = function typedarrayToBuffer (arr) {
16362
16343
  /(alcatel|geeksphone|nexian|panasonic(?!(?:;|\.))|sony(?!-bra))[-_ ]?([-\w]*)/i // Alcatel/GeeksPhone/Nexian/Panasonic/Sony
16363
16344
  ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [
16364
16345
 
16346
+ // TCL
16347
+ /droid [\w\.]+; ((?:8[14]9[16]|9(?:0(?:48|60|8[01])|1(?:3[27]|66)|2(?:6[69]|9[56])|466))[gqswx])\w*(\)| bui)/i
16348
+ ], [MODEL, [VENDOR, 'TCL'], [TYPE, TABLET]], [
16349
+
16350
+ // itel
16351
+ /(itel) ((\w+))/i
16352
+ ], [[VENDOR, lowerize], MODEL, [TYPE, strMapper, { 'tablet' : ['p10001l', 'w7001'], '*' : 'mobile' }]], [
16353
+
16365
16354
  // Acer
16366
16355
  /droid.+; ([ab][1-7]-?[0178a]\d\d?)/i
16367
16356
  ], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [
@@ -16375,6 +16364,10 @@ module.exports = function typedarrayToBuffer (arr) {
16375
16364
  /; ((?:power )?armor(?:[\w ]{0,8}))(?: bui|\))/i
16376
16365
  ], [MODEL, [VENDOR, 'Ulefone'], [TYPE, MOBILE]], [
16377
16366
 
16367
+ // Nothing
16368
+ /droid.+; (a(?:015|06[35]|142p?))/i
16369
+ ], [MODEL, [VENDOR, 'Nothing'], [TYPE, MOBILE]], [
16370
+
16378
16371
  // MIXED
16379
16372
  /(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron|infinix|tecno)[-_ ]?([-\w]*)/i,
16380
16373
  // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron
@@ -16505,6 +16498,8 @@ module.exports = function typedarrayToBuffer (arr) {
16505
16498
  // WEARABLES
16506
16499
  ///////////////////
16507
16500
 
16501
+ /\b(sm-[lr]\d\d[05][fnuw]?s?)\b/i // Samsung Galaxy Watch
16502
+ ], [MODEL, [VENDOR, SAMSUNG], [TYPE, WEARABLE]], [
16508
16503
  /((pebble))app/i // Pebble
16509
16504
  ], [VENDOR, MODEL, [TYPE, WEARABLE]], [
16510
16505
  /(watch)(?: ?os[,\/]|\d,\d\/)[\d\.]+/i // Apple Watch
@@ -17339,7 +17334,7 @@ function wrappy (fn, cb) {
17339
17334
  },{}],116:[function(_dereq_,module,exports){
17340
17335
  module.exports={
17341
17336
  "name": "videomail-client",
17342
- "version": "9.3.1",
17337
+ "version": "9.3.3",
17343
17338
  "description": "A wicked npm package to record videos directly in the browser, wohooo!",
17344
17339
  "keywords": [
17345
17340
  "webcam",
@@ -17407,8 +17402,8 @@ module.exports={
17407
17402
  "number-is-integer": "2.0.0",
17408
17403
  "request-frame": "1.5.3",
17409
17404
  "safe-json-stringify": "1.2.0",
17410
- "superagent": "8.1.2",
17411
- "ua-parser-js": "1.0.38",
17405
+ "superagent": "10.1.0",
17406
+ "ua-parser-js": "1.0.39",
17412
17407
  "websocket-stream": "5.5.2"
17413
17408
  },
17414
17409
  "devDependencies": {
@@ -17447,14 +17442,14 @@ module.exports={
17447
17442
  "gulp-terser": "2.1.0",
17448
17443
  "minimist": "1.2.8",
17449
17444
  "nib": "1.2.0",
17450
- "postcss": "8.4.45",
17445
+ "postcss": "8.4.47",
17451
17446
  "prettier": "3.3.3",
17452
17447
  "prettier-plugin-curly": "0.2.2",
17453
- "prettier-plugin-organize-imports": "4.0.0",
17448
+ "prettier-plugin-organize-imports": "4.1.0",
17454
17449
  "prettier-plugin-packagejson": "2.5.2",
17455
17450
  "prettier-plugin-sh": "0.14.0",
17456
17451
  "router": "1.3.8",
17457
- "tape": "5.8.1",
17452
+ "tape": "5.9.0",
17458
17453
  "tape-catch": "1.0.6",
17459
17454
  "tape-run": "11.0.0",
17460
17455
  "vinyl-buffer": "1.0.1",
@@ -22737,6 +22732,10 @@ var Recorder = function Recorder(visuals, replay) {
22737
22732
  return getIntervalSum() / framesCount;
22738
22733
  }
22739
22734
  function getAvgFps() {
22735
+ var intervalSum = getIntervalSum();
22736
+ if (intervalSum === 0) {
22737
+ return undefined;
22738
+ }
22740
22739
  return framesCount / getIntervalSum() * 1000;
22741
22740
  }
22742
22741
  this.getRecordingStats = function () {
@@ -22984,9 +22983,14 @@ var Recorder = function Recorder(visuals, replay) {
22984
22983
 
22985
22984
  // see https://github.com/hapticdata/animitter/issues/3
22986
22985
  loop.on("update", function (_deltaTime, elapsedTime) {
22987
- // x1000 because of milliseconds
22988
- var avgFPS = framesCount / elapsedTime * 1000;
22989
- debug("Recorder: avgFps = ".concat(Math.round(avgFPS), ", framesCount = ").concat(framesCount));
22986
+ var avgFPS = undefined;
22987
+ if (elapsedTime !== 0) {
22988
+ // x1000 because of milliseconds
22989
+ avgFPS = Math.round(framesCount / elapsedTime * 1000);
22990
+ } else {
22991
+ avgFPS = undefined;
22992
+ }
22993
+ debug("Recorder: avgFps = ".concat(avgFPS, ", framesCount = ").concat(framesCount));
22990
22994
  });
22991
22995
  loop.start();
22992
22996
  };