videomail-client 15.7.6 → 15.7.8
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/dist/cjs/index.cjs +119 -38
- package/dist/esm/index.js +53 -9
- package/dist/esm/wrappers/visuals/recorder.d.ts +4 -0
- package/dist/umd/index.js +120 -37
- package/package.json +15 -15
package/dist/cjs/index.cjs
CHANGED
|
@@ -7045,7 +7045,7 @@ var __webpack_modules__ = {
|
|
|
7045
7045
|
const safeStringify = __webpack_require__("X");
|
|
7046
7046
|
const qs = __webpack_require__("b");
|
|
7047
7047
|
const RequestBase = __webpack_require__("d");
|
|
7048
|
-
const { isObject, mixin, hasOwn } = __webpack_require__("Dp");
|
|
7048
|
+
const { isObject, mixin, hasOwn, isSafeKey } = __webpack_require__("Dp");
|
|
7049
7049
|
const ResponseBase = __webpack_require__("e");
|
|
7050
7050
|
const Agent = __webpack_require__("pf");
|
|
7051
7051
|
function noop() {}
|
|
@@ -7099,12 +7099,18 @@ var __webpack_modules__ = {
|
|
|
7099
7099
|
form: 'application/x-www-form-urlencoded',
|
|
7100
7100
|
'form-data': 'application/x-www-form-urlencoded'
|
|
7101
7101
|
};
|
|
7102
|
+
function lookupType(type) {
|
|
7103
|
+
return hasOwn(request.types, type) && request.types[type] || type;
|
|
7104
|
+
}
|
|
7102
7105
|
request.serialize = {
|
|
7103
|
-
'application/x-www-form-urlencoded'
|
|
7106
|
+
'application/x-www-form-urlencoded' (object) {
|
|
7107
|
+
return qs.stringify(object, {
|
|
7104
7108
|
indices: false,
|
|
7105
7109
|
strictNullHandling: true
|
|
7106
|
-
})
|
|
7107
|
-
|
|
7110
|
+
});
|
|
7111
|
+
},
|
|
7112
|
+
'application/json': safeStringify,
|
|
7113
|
+
'application/csp-report': safeStringify
|
|
7108
7114
|
};
|
|
7109
7115
|
request.parse = {
|
|
7110
7116
|
'application/x-www-form-urlencoded': parseString,
|
|
@@ -7122,8 +7128,10 @@ var __webpack_modules__ = {
|
|
|
7122
7128
|
index = line.indexOf(':');
|
|
7123
7129
|
if (-1 !== index) {
|
|
7124
7130
|
field = line.slice(0, index).toLowerCase();
|
|
7125
|
-
|
|
7126
|
-
|
|
7131
|
+
if (isSafeKey(field)) {
|
|
7132
|
+
value = trim(line.slice(index + 1));
|
|
7133
|
+
fields[field] = value;
|
|
7134
|
+
}
|
|
7127
7135
|
}
|
|
7128
7136
|
}
|
|
7129
7137
|
return fields;
|
|
@@ -7144,11 +7152,12 @@ var __webpack_modules__ = {
|
|
|
7144
7152
|
this.header['content-type'] = this.xhr.getResponseHeader('content-type');
|
|
7145
7153
|
this._setHeaderProperties(this.header);
|
|
7146
7154
|
if (null === this.text && request_._responseType) this.body = this.xhr.response;
|
|
7147
|
-
else
|
|
7155
|
+
else if ('HEAD' === this.req.method) this.body = null;
|
|
7156
|
+
else this.body = this._parseBody(this.text || this.xhr.response);
|
|
7148
7157
|
}
|
|
7149
7158
|
mixin(Response.prototype, ResponseBase.prototype);
|
|
7150
7159
|
Response.prototype._parseBody = function(string_) {
|
|
7151
|
-
let parse = request.parse[this.type];
|
|
7160
|
+
let parse = hasOwn(request.parse, this.type) ? request.parse[this.type] : void 0;
|
|
7152
7161
|
if (this.req._parser) return this.req._parser(this, string_);
|
|
7153
7162
|
if (!parse && isJSON(this.type)) parse = request.parse['application/json'];
|
|
7154
7163
|
return parse && string_ && (string_.length > 0 || string_ instanceof Object) ? parse(string_) : null;
|
|
@@ -7183,7 +7192,7 @@ var __webpack_modules__ = {
|
|
|
7183
7192
|
error.original = err;
|
|
7184
7193
|
if (self1.xhr) {
|
|
7185
7194
|
error.rawResponse = void 0 === self1.xhr.responseType ? self1.xhr.responseText : self1.xhr.response;
|
|
7186
|
-
error.status = self1.xhr.status
|
|
7195
|
+
error.status = self1.xhr.status || null;
|
|
7187
7196
|
error.statusCode = error.status;
|
|
7188
7197
|
} else {
|
|
7189
7198
|
error.rawResponse = null;
|
|
@@ -7209,11 +7218,11 @@ var __webpack_modules__ = {
|
|
|
7209
7218
|
Emitter(Request.prototype);
|
|
7210
7219
|
mixin(Request.prototype, RequestBase.prototype);
|
|
7211
7220
|
Request.prototype.type = function(type) {
|
|
7212
|
-
this.set('Content-Type',
|
|
7221
|
+
this.set('Content-Type', lookupType(type));
|
|
7213
7222
|
return this;
|
|
7214
7223
|
};
|
|
7215
7224
|
Request.prototype.accept = function(type) {
|
|
7216
|
-
this.set('Accept',
|
|
7225
|
+
this.set('Accept', lookupType(type));
|
|
7217
7226
|
return this;
|
|
7218
7227
|
};
|
|
7219
7228
|
Request.prototype.auth = function(user, pass, options) {
|
|
@@ -7225,7 +7234,8 @@ var __webpack_modules__ = {
|
|
|
7225
7234
|
if (!options) options = {
|
|
7226
7235
|
type: 'function' == typeof btoa ? 'basic' : 'auto'
|
|
7227
7236
|
};
|
|
7228
|
-
|
|
7237
|
+
let { encoder } = options;
|
|
7238
|
+
if (!encoder) encoder = (string)=>{
|
|
7229
7239
|
if ('function' == typeof btoa) return btoa(string);
|
|
7230
7240
|
throw new Error('Cannot use basic auth, btoa is not a function');
|
|
7231
7241
|
};
|
|
@@ -7336,16 +7346,24 @@ var __webpack_modules__ = {
|
|
|
7336
7346
|
if (this._withCredentials) xhr.withCredentials = true;
|
|
7337
7347
|
if (!this._formData && 'GET' !== this.method && 'HEAD' !== this.method && 'string' != typeof data && !this._isHost(data)) {
|
|
7338
7348
|
const contentType = this._header['content-type'];
|
|
7339
|
-
|
|
7349
|
+
const serializeType = contentType ? contentType.split(';')[0] : '';
|
|
7350
|
+
let serialize = this._serializer || (hasOwn(request.serialize, serializeType) ? request.serialize[serializeType] : void 0);
|
|
7340
7351
|
if (!serialize && isJSON(contentType)) serialize = request.serialize['application/json'];
|
|
7341
7352
|
if (serialize) data = serialize(data);
|
|
7342
7353
|
}
|
|
7343
|
-
|
|
7344
|
-
|
|
7354
|
+
try {
|
|
7355
|
+
for(const field in this.header)if (null !== this.header[field]) {
|
|
7356
|
+
if (hasOwn(this.header, field)) xhr.setRequestHeader(field, this.header[field]);
|
|
7357
|
+
}
|
|
7358
|
+
if (this._responseType) xhr.responseType = this._responseType;
|
|
7359
|
+
this.emit('request', this);
|
|
7360
|
+
xhr.send(void 0 === data ? null : data);
|
|
7361
|
+
} catch (err) {
|
|
7362
|
+
try {
|
|
7363
|
+
xhr.abort();
|
|
7364
|
+
} catch (err) {}
|
|
7365
|
+
return this.callback(err);
|
|
7345
7366
|
}
|
|
7346
|
-
if (this._responseType) xhr.responseType = this._responseType;
|
|
7347
|
-
this.emit('request', this);
|
|
7348
|
-
xhr.send(void 0 === data ? null : data);
|
|
7349
7367
|
};
|
|
7350
7368
|
const proxyAgent = new Proxy(Agent, {
|
|
7351
7369
|
apply (target, thisArg, argumentsList) {
|
|
@@ -7355,6 +7373,7 @@ var __webpack_modules__ = {
|
|
|
7355
7373
|
request.agent = proxyAgent;
|
|
7356
7374
|
for (const method of [
|
|
7357
7375
|
'GET',
|
|
7376
|
+
'HEAD',
|
|
7358
7377
|
'POST',
|
|
7359
7378
|
'OPTIONS',
|
|
7360
7379
|
'PATCH',
|
|
@@ -7442,7 +7461,7 @@ var __webpack_modules__ = {
|
|
|
7442
7461
|
},
|
|
7443
7462
|
d (module, __unused_rspack_exports, __webpack_require__) {
|
|
7444
7463
|
"use strict";
|
|
7445
|
-
const { isObject, hasOwn } = __webpack_require__("Dp");
|
|
7464
|
+
const { isObject, hasOwn, isSafeKey } = __webpack_require__("Dp");
|
|
7446
7465
|
module.exports = RequestBase;
|
|
7447
7466
|
function RequestBase() {}
|
|
7448
7467
|
RequestBase.prototype.clearTimeout = function() {
|
|
@@ -7552,7 +7571,7 @@ var __webpack_modules__ = {
|
|
|
7552
7571
|
if (this._endCalled) console.warn('Warning: superagent request was sent twice, because both .end() and .then() were called. Never call .end() if you use promises');
|
|
7553
7572
|
this._fullfilledPromise = new Promise((resolve, reject)=>{
|
|
7554
7573
|
self1.on('abort', ()=>{
|
|
7555
|
-
if (this._maxRetries && this._maxRetries > this._retries) return;
|
|
7574
|
+
if (this.timedout && this._maxRetries && this._maxRetries > this._retries) return;
|
|
7556
7575
|
if (this.timedout && this.timedoutError) return void reject(this.timedoutError);
|
|
7557
7576
|
const error = new Error('Aborted');
|
|
7558
7577
|
error.code = 'ABORTED';
|
|
@@ -7679,7 +7698,13 @@ var __webpack_modules__ = {
|
|
|
7679
7698
|
} else if (data && this._data && this._isHost(this._data)) throw new Error("Can't merge these send calls");
|
|
7680
7699
|
if (isObject_ && isObject(this._data)) for(const key in data){
|
|
7681
7700
|
if ('bigint' == typeof data[key] && !data[key].toJSON) throw new Error('Cannot serialize BigInt value to json');
|
|
7682
|
-
if (hasOwn(data, key)) this._data[key] = data[key];
|
|
7701
|
+
if (hasOwn(data, key)) if (isSafeKey(key)) this._data[key] = data[key];
|
|
7702
|
+
else Object.defineProperty(this._data, key, {
|
|
7703
|
+
value: data[key],
|
|
7704
|
+
enumerable: true,
|
|
7705
|
+
writable: true,
|
|
7706
|
+
configurable: true
|
|
7707
|
+
});
|
|
7683
7708
|
}
|
|
7684
7709
|
else if ('bigint' == typeof data) throw new Error("Cannot send value of type BigInt");
|
|
7685
7710
|
else if ('string' == typeof data) {
|
|
@@ -7747,7 +7772,7 @@ var __webpack_modules__ = {
|
|
|
7747
7772
|
const ct = header['content-type'] || '';
|
|
7748
7773
|
this.type = utils.type(ct);
|
|
7749
7774
|
const parameters = utils.params(ct);
|
|
7750
|
-
for(const key in parameters)if (Object.prototype.hasOwnProperty.call(parameters, key)) this[key] = parameters[key];
|
|
7775
|
+
for(const key in parameters)if (Object.prototype.hasOwnProperty.call(parameters, key) && !(key in this)) this[key] = parameters[key];
|
|
7751
7776
|
this.links = {};
|
|
7752
7777
|
try {
|
|
7753
7778
|
if (header.link) this.links = utils.parseLinks(header.link);
|
|
@@ -7778,13 +7803,19 @@ var __webpack_modules__ = {
|
|
|
7778
7803
|
Dp (__unused_rspack_module, exports1) {
|
|
7779
7804
|
"use strict";
|
|
7780
7805
|
exports1.type = (string_)=>string_.split(/ *; */).shift();
|
|
7806
|
+
const UNSAFE_KEYS = new Set([
|
|
7807
|
+
'__proto__',
|
|
7808
|
+
'constructor',
|
|
7809
|
+
'prototype'
|
|
7810
|
+
]);
|
|
7811
|
+
exports1.isSafeKey = (key)=>!UNSAFE_KEYS.has(key);
|
|
7781
7812
|
exports1.params = (value)=>{
|
|
7782
7813
|
const object = {};
|
|
7783
7814
|
for (const string_ of value.split(/ *; */)){
|
|
7784
7815
|
const parts = string_.split(/ *= */);
|
|
7785
7816
|
const key = parts.shift();
|
|
7786
7817
|
const value = parts.shift();
|
|
7787
|
-
if (key && value) object[key] = value;
|
|
7818
|
+
if (key && value && exports1.isSafeKey(key)) object[key] = value;
|
|
7788
7819
|
}
|
|
7789
7820
|
return object;
|
|
7790
7821
|
};
|
|
@@ -7793,8 +7824,14 @@ var __webpack_modules__ = {
|
|
|
7793
7824
|
for (const string_ of value.split(/ *, */)){
|
|
7794
7825
|
const parts = string_.split(/ *; */);
|
|
7795
7826
|
const url = parts[0].slice(1, -1);
|
|
7796
|
-
const
|
|
7797
|
-
|
|
7827
|
+
for (const part of parts.slice(1)){
|
|
7828
|
+
const [key, keyValue] = part.split(/ *= */, 2);
|
|
7829
|
+
if (key && 'rel' === key.toLowerCase() && keyValue) {
|
|
7830
|
+
const relationship = keyValue.replace(/^"|"$/g, '');
|
|
7831
|
+
if (relationship && exports1.isSafeKey(relationship)) object[relationship] = url;
|
|
7832
|
+
break;
|
|
7833
|
+
}
|
|
7834
|
+
}
|
|
7798
7835
|
}
|
|
7799
7836
|
return object;
|
|
7800
7837
|
};
|
|
@@ -7810,19 +7847,19 @@ var __webpack_modules__ = {
|
|
|
7810
7847
|
return header;
|
|
7811
7848
|
};
|
|
7812
7849
|
exports1.normalizeHostname = (hostname)=>{
|
|
7813
|
-
const [, normalized] = hostname.match(/^\[([^\]]+)
|
|
7850
|
+
const [, normalized] = hostname.match(/^\[([^\]]+)]$/) || [];
|
|
7814
7851
|
return normalized || hostname;
|
|
7815
7852
|
};
|
|
7816
7853
|
exports1.isObject = (object)=>null !== object && 'object' == typeof object;
|
|
7817
7854
|
exports1.hasOwn = Object.hasOwn || function(object, property) {
|
|
7818
7855
|
if (null == object) throw new TypeError('Cannot convert undefined or null to object');
|
|
7819
|
-
return Object.prototype.hasOwnProperty.call(
|
|
7856
|
+
return Object.prototype.hasOwnProperty.call(Object(object), property);
|
|
7820
7857
|
};
|
|
7821
7858
|
exports1.mixin = (target, source)=>{
|
|
7822
7859
|
for(const key in source)if (exports1.hasOwn(source, key)) target[key] = source[key];
|
|
7823
7860
|
};
|
|
7824
|
-
exports1.isGzipOrDeflateEncoding = (res)
|
|
7825
|
-
exports1.isBrotliEncoding = (res)
|
|
7861
|
+
exports1.isGzipOrDeflateEncoding = (res)=>/^\s*(?:deflate|gzip)\s*$/i.test(res.headers['content-encoding']);
|
|
7862
|
+
exports1.isBrotliEncoding = (res)=>/^\s*br\s*$/i.test(res.headers['content-encoding']);
|
|
7826
7863
|
},
|
|
7827
7864
|
E (module, __unused_rspack_exports, __webpack_require__) {
|
|
7828
7865
|
var Buffer = __webpack_require__("dY").Buffer;
|
|
@@ -10334,7 +10371,7 @@ var __webpack_modules__ = {
|
|
|
10334
10371
|
function isTATag(tag) {
|
|
10335
10372
|
return $indexOf(typedArrays, tag) > -1;
|
|
10336
10373
|
}
|
|
10337
|
-
|
|
10374
|
+
function whichTypedArray(value) {
|
|
10338
10375
|
if (!value || 'object' != typeof value) return false;
|
|
10339
10376
|
if (!hasToStringTag) {
|
|
10340
10377
|
var tag = $slice($toString(value), 8, -1);
|
|
@@ -10344,7 +10381,8 @@ var __webpack_modules__ = {
|
|
|
10344
10381
|
}
|
|
10345
10382
|
if (!gOPD) return null;
|
|
10346
10383
|
return tryTypedArrays(value);
|
|
10347
|
-
}
|
|
10384
|
+
}
|
|
10385
|
+
module.exports = whichTypedArray;
|
|
10348
10386
|
},
|
|
10349
10387
|
T2 (module) {
|
|
10350
10388
|
module.exports = wrappy;
|
|
@@ -10932,7 +10970,7 @@ var __webpack_exports__ = {};
|
|
|
10932
10970
|
var client = __webpack_require__("Q");
|
|
10933
10971
|
var client_default = /*#__PURE__*/ __webpack_require__.n(client);
|
|
10934
10972
|
var package_namespaceObject = {
|
|
10935
|
-
rE: "15.7.
|
|
10973
|
+
rE: "15.7.8"
|
|
10936
10974
|
};
|
|
10937
10975
|
function isAudioEnabled(options) {
|
|
10938
10976
|
return Boolean(options.audio.enabled);
|
|
@@ -15184,8 +15222,17 @@ var __webpack_exports__ = {};
|
|
|
15184
15222
|
[constants.WHITELIST_KEY_LABEL]: this.options.whitelistKey
|
|
15185
15223
|
};
|
|
15186
15224
|
const url = `${this.options.apiUrl}/client-error/`;
|
|
15187
|
-
|
|
15188
|
-
|
|
15225
|
+
let supportedConstraints;
|
|
15226
|
+
let enumerateDevices;
|
|
15227
|
+
try {
|
|
15228
|
+
if (navigator.mediaDevices) {
|
|
15229
|
+
supportedConstraints = navigator.mediaDevices.getSupportedConstraints();
|
|
15230
|
+
enumerateDevices = yield navigator.mediaDevices.enumerateDevices();
|
|
15231
|
+
}
|
|
15232
|
+
} catch (unused) {
|
|
15233
|
+
supportedConstraints = void 0;
|
|
15234
|
+
enumerateDevices = void 0;
|
|
15235
|
+
}
|
|
15189
15236
|
const fullVideomailErrorData = {
|
|
15190
15237
|
browser: err.browser,
|
|
15191
15238
|
code: err.code,
|
|
@@ -17450,6 +17497,7 @@ var __webpack_exports__ = {};
|
|
|
17450
17497
|
return obj;
|
|
17451
17498
|
}
|
|
17452
17499
|
const PIPE_SYMBOL = "°º¤ø,¸¸,ø¤º°`°º¤ø,¸,ø¤°º¤ø,¸¸,ø¤º°`°º¤ø,¸ ";
|
|
17500
|
+
const INITIAL_CONNECTION_RETRY_DELAY = 1e3;
|
|
17453
17501
|
class Recorder extends util_Despot {
|
|
17454
17502
|
writeStream(buffer, opts) {
|
|
17455
17503
|
if (this.stream) if (this.stream.destroyed) {
|
|
@@ -17543,13 +17591,41 @@ var __webpack_exports__ = {};
|
|
|
17543
17591
|
window.clearTimeout(this.connectionTimeout);
|
|
17544
17592
|
this.connectionTimeout = void 0;
|
|
17545
17593
|
}
|
|
17594
|
+
clearConnectionRetryTimeout() {
|
|
17595
|
+
if (!this.connectionRetryTimeout) return;
|
|
17596
|
+
this.options.logger.debug("Recorder: clearConnectionRetryTimeout()");
|
|
17597
|
+
window.clearTimeout(this.connectionRetryTimeout);
|
|
17598
|
+
this.connectionRetryTimeout = void 0;
|
|
17599
|
+
}
|
|
17600
|
+
retryInitialConnection(url2Connect) {
|
|
17601
|
+
const retryStartedAt = this.connectionRetryStartedAt;
|
|
17602
|
+
if (!retryStartedAt) return false;
|
|
17603
|
+
const retryElapsedMs = Date.now() - retryStartedAt;
|
|
17604
|
+
if (retryElapsedMs >= this.options.timeouts.connection) {
|
|
17605
|
+
this.connectionRetryStartedAt = void 0;
|
|
17606
|
+
return false;
|
|
17607
|
+
}
|
|
17608
|
+
const retryRemainingMs = this.options.timeouts.connection - retryElapsedMs;
|
|
17609
|
+
this.options.logger.debug(`Recorder: retrying initial web socket connection to ${url2Connect}`);
|
|
17610
|
+
this.connecting = false;
|
|
17611
|
+
if (this.stream) {
|
|
17612
|
+
this.stream.destroy();
|
|
17613
|
+
this.stream = void 0;
|
|
17614
|
+
}
|
|
17615
|
+
this.connectionRetryTimeout = window.setTimeout(()=>{
|
|
17616
|
+
this.connectionRetryTimeout = void 0;
|
|
17617
|
+
this.initSocket();
|
|
17618
|
+
}, Math.min(INITIAL_CONNECTION_RETRY_DELAY, retryRemainingMs));
|
|
17619
|
+
return true;
|
|
17620
|
+
}
|
|
17546
17621
|
failConnection(params) {
|
|
17547
17622
|
var _ref, _ref1;
|
|
17548
17623
|
if (this.connectionFailed || this.connected || this.unloaded) return;
|
|
17549
|
-
this.connectionFailed = true;
|
|
17550
|
-
this.connecting = false;
|
|
17551
17624
|
this.clearConnectionTimeout();
|
|
17552
17625
|
const { url2Connect, cause } = params;
|
|
17626
|
+
if (this.retryInitialConnection(url2Connect)) return;
|
|
17627
|
+
this.connectionFailed = true;
|
|
17628
|
+
this.connecting = false;
|
|
17553
17629
|
const online = navigator.onLine;
|
|
17554
17630
|
const elapsedMs = this.connectingStartedAt ? Date.now() - this.connectingStartedAt : void 0;
|
|
17555
17631
|
const closeEvent = this.lastCloseEvent;
|
|
@@ -17716,7 +17792,9 @@ var __webpack_exports__ = {};
|
|
|
17716
17792
|
});
|
|
17717
17793
|
}
|
|
17718
17794
|
if (this.stream) {
|
|
17719
|
-
|
|
17795
|
+
if (!this.userMediaLoaded && !this.connectionRetryStartedAt) this.connectionRetryStartedAt = Date.now();
|
|
17796
|
+
const connectionRetryElapsedMs = this.connectionRetryStartedAt ? Date.now() - this.connectionRetryStartedAt : 0;
|
|
17797
|
+
const connectionTimeoutMs = this.connectionRetryStartedAt ? Math.max(0, this.options.timeouts.connection - connectionRetryElapsedMs) : this.options.timeouts.connection;
|
|
17720
17798
|
this.connectionTimeout = window.setTimeout(()=>{
|
|
17721
17799
|
this.failConnection({
|
|
17722
17800
|
url2Connect,
|
|
@@ -17744,6 +17822,7 @@ var __webpack_exports__ = {};
|
|
|
17744
17822
|
if (!this.connected && !isClosing && !this.unloaded) {
|
|
17745
17823
|
this.connected = true;
|
|
17746
17824
|
this.connecting = this.unloaded = false;
|
|
17825
|
+
this.connectionRetryStartedAt = void 0;
|
|
17747
17826
|
this.emit("CONNECTED");
|
|
17748
17827
|
null == cb || cb();
|
|
17749
17828
|
}
|
|
@@ -18104,6 +18183,8 @@ var __webpack_exports__ = {};
|
|
|
18104
18183
|
this.reset();
|
|
18105
18184
|
this.clearUserMediaTimeout();
|
|
18106
18185
|
this.clearConnectionTimeout();
|
|
18186
|
+
this.clearConnectionRetryTimeout();
|
|
18187
|
+
this.connectionRetryStartedAt = void 0;
|
|
18107
18188
|
this.connecting = false;
|
|
18108
18189
|
if (this.userMedia) this.userMedia.unloadRemainingEventListeners();
|
|
18109
18190
|
if (this.submitting) ;
|
|
@@ -18516,7 +18597,7 @@ var __webpack_exports__ = {};
|
|
|
18516
18597
|
return this.userMediaLoaded;
|
|
18517
18598
|
}
|
|
18518
18599
|
constructor(visuals, replay, options){
|
|
18519
|
-
super("Recorder", options), recorder_define_property(this, "visuals", void 0), recorder_define_property(this, "replay", void 0), recorder_define_property(this, "loop", void 0), recorder_define_property(this, "originalAnimationFrameObject", void 0), recorder_define_property(this, "samplesCount", 0), recorder_define_property(this, "framesCount", 0), recorder_define_property(this, "recordingStats", void 0), recorder_define_property(this, "confirmedFrameNumber", 0), recorder_define_property(this, "confirmedSampleNumber", 0), recorder_define_property(this, "recorderElement", void 0), recorder_define_property(this, "userMedia", void 0), recorder_define_property(this, "userMediaTimeout", void 0), recorder_define_property(this, "retryTimeout", void 0), recorder_define_property(this, "connectionTimeout", void 0), recorder_define_property(this, "frameProgress", void 0), recorder_define_property(this, "sampleProgress", void 0), recorder_define_property(this, "canvas", void 0), recorder_define_property(this, "ctx", void 0), recorder_define_property(this, "userMediaLoaded", void 0), recorder_define_property(this, "userMediaLoading", false), recorder_define_property(this, "submitting", false), recorder_define_property(this, "unloaded", void 0), recorder_define_property(this, "stopTime", void 0), recorder_define_property(this, "stream", void 0), recorder_define_property(this, "connecting", false), recorder_define_property(this, "connected", false), recorder_define_property(this, "connectionFailed", false), recorder_define_property(this, "blocking", false), recorder_define_property(this, "built", false), recorder_define_property(this, "key", void 0), recorder_define_property(this, "waitingTime", void 0), recorder_define_property(this, "connectingStartedAt", void 0), recorder_define_property(this, "lastCloseEvent", void 0), recorder_define_property(this, "pingInterval", void 0), recorder_define_property(this, "frame", void 0), recorder_define_property(this, "recordingBuffer", void 0), recorder_define_property(this, "facingMode", void 0);
|
|
18600
|
+
super("Recorder", options), recorder_define_property(this, "visuals", void 0), recorder_define_property(this, "replay", void 0), recorder_define_property(this, "loop", void 0), recorder_define_property(this, "originalAnimationFrameObject", void 0), recorder_define_property(this, "samplesCount", 0), recorder_define_property(this, "framesCount", 0), recorder_define_property(this, "recordingStats", void 0), recorder_define_property(this, "confirmedFrameNumber", 0), recorder_define_property(this, "confirmedSampleNumber", 0), recorder_define_property(this, "recorderElement", void 0), recorder_define_property(this, "userMedia", void 0), recorder_define_property(this, "userMediaTimeout", void 0), recorder_define_property(this, "retryTimeout", void 0), recorder_define_property(this, "connectionTimeout", void 0), recorder_define_property(this, "connectionRetryTimeout", void 0), recorder_define_property(this, "frameProgress", void 0), recorder_define_property(this, "sampleProgress", void 0), recorder_define_property(this, "canvas", void 0), recorder_define_property(this, "ctx", void 0), recorder_define_property(this, "userMediaLoaded", void 0), recorder_define_property(this, "userMediaLoading", false), recorder_define_property(this, "submitting", false), recorder_define_property(this, "unloaded", void 0), recorder_define_property(this, "stopTime", void 0), recorder_define_property(this, "stream", void 0), recorder_define_property(this, "connecting", false), recorder_define_property(this, "connected", false), recorder_define_property(this, "connectionFailed", false), recorder_define_property(this, "blocking", false), recorder_define_property(this, "built", false), recorder_define_property(this, "key", void 0), recorder_define_property(this, "waitingTime", void 0), recorder_define_property(this, "connectingStartedAt", void 0), recorder_define_property(this, "connectionRetryStartedAt", void 0), recorder_define_property(this, "lastCloseEvent", void 0), recorder_define_property(this, "pingInterval", void 0), recorder_define_property(this, "frame", void 0), recorder_define_property(this, "recordingBuffer", void 0), recorder_define_property(this, "facingMode", void 0);
|
|
18520
18601
|
this.visuals = visuals;
|
|
18521
18602
|
this.replay = replay;
|
|
18522
18603
|
this.facingMode = options.video.facingMode;
|
package/dist/esm/index.js
CHANGED
|
@@ -3364,7 +3364,7 @@ __webpack_require__.add({
|
|
|
3364
3364
|
function isTATag(tag) {
|
|
3365
3365
|
return $indexOf(typedArrays, tag) > -1;
|
|
3366
3366
|
}
|
|
3367
|
-
|
|
3367
|
+
function whichTypedArray(value) {
|
|
3368
3368
|
if (!value || 'object' != typeof value) return false;
|
|
3369
3369
|
if (!hasToStringTag) {
|
|
3370
3370
|
var tag = $slice($toString(value), 8, -1);
|
|
@@ -3374,7 +3374,8 @@ __webpack_require__.add({
|
|
|
3374
3374
|
}
|
|
3375
3375
|
if (!gOPD) return null;
|
|
3376
3376
|
return tryTypedArrays(value);
|
|
3377
|
-
}
|
|
3377
|
+
}
|
|
3378
|
+
module.exports = whichTypedArray;
|
|
3378
3379
|
},
|
|
3379
3380
|
zm (module) {
|
|
3380
3381
|
module.exports = function(cssWithMappingToString) {
|
|
@@ -3618,7 +3619,7 @@ const constants = {
|
|
|
3618
3619
|
}
|
|
3619
3620
|
};
|
|
3620
3621
|
var package_namespaceObject = {
|
|
3621
|
-
rE: "15.7.
|
|
3622
|
+
rE: "15.7.8"
|
|
3622
3623
|
};
|
|
3623
3624
|
function isAudioEnabled(options) {
|
|
3624
3625
|
return Boolean(options.audio.enabled);
|
|
@@ -4411,8 +4412,17 @@ class Resource {
|
|
|
4411
4412
|
[constants.WHITELIST_KEY_LABEL]: this.options.whitelistKey
|
|
4412
4413
|
};
|
|
4413
4414
|
const url = `${this.options.apiUrl}/client-error/`;
|
|
4414
|
-
|
|
4415
|
-
|
|
4415
|
+
let supportedConstraints;
|
|
4416
|
+
let enumerateDevices;
|
|
4417
|
+
try {
|
|
4418
|
+
if (navigator.mediaDevices) {
|
|
4419
|
+
supportedConstraints = navigator.mediaDevices.getSupportedConstraints();
|
|
4420
|
+
enumerateDevices = await navigator.mediaDevices.enumerateDevices();
|
|
4421
|
+
}
|
|
4422
|
+
} catch {
|
|
4423
|
+
supportedConstraints = void 0;
|
|
4424
|
+
enumerateDevices = void 0;
|
|
4425
|
+
}
|
|
4416
4426
|
const fullVideomailErrorData = {
|
|
4417
4427
|
browser: err.browser,
|
|
4418
4428
|
code: err.code,
|
|
@@ -6511,6 +6521,7 @@ function recorder_define_property(obj, key, value) {
|
|
|
6511
6521
|
return obj;
|
|
6512
6522
|
}
|
|
6513
6523
|
const PIPE_SYMBOL = "°º¤ø,¸¸,ø¤º°`°º¤ø,¸,ø¤°º¤ø,¸¸,ø¤º°`°º¤ø,¸ ";
|
|
6524
|
+
const INITIAL_CONNECTION_RETRY_DELAY = 1e3;
|
|
6514
6525
|
class Recorder extends util_Despot {
|
|
6515
6526
|
writeStream(buffer, opts) {
|
|
6516
6527
|
if (this.stream) if (this.stream.destroyed) {
|
|
@@ -6604,12 +6615,40 @@ class Recorder extends util_Despot {
|
|
|
6604
6615
|
window.clearTimeout(this.connectionTimeout);
|
|
6605
6616
|
this.connectionTimeout = void 0;
|
|
6606
6617
|
}
|
|
6618
|
+
clearConnectionRetryTimeout() {
|
|
6619
|
+
if (!this.connectionRetryTimeout) return;
|
|
6620
|
+
this.options.logger.debug("Recorder: clearConnectionRetryTimeout()");
|
|
6621
|
+
window.clearTimeout(this.connectionRetryTimeout);
|
|
6622
|
+
this.connectionRetryTimeout = void 0;
|
|
6623
|
+
}
|
|
6624
|
+
retryInitialConnection(url2Connect) {
|
|
6625
|
+
const retryStartedAt = this.connectionRetryStartedAt;
|
|
6626
|
+
if (!retryStartedAt) return false;
|
|
6627
|
+
const retryElapsedMs = Date.now() - retryStartedAt;
|
|
6628
|
+
if (retryElapsedMs >= this.options.timeouts.connection) {
|
|
6629
|
+
this.connectionRetryStartedAt = void 0;
|
|
6630
|
+
return false;
|
|
6631
|
+
}
|
|
6632
|
+
const retryRemainingMs = this.options.timeouts.connection - retryElapsedMs;
|
|
6633
|
+
this.options.logger.debug(`Recorder: retrying initial web socket connection to ${url2Connect}`);
|
|
6634
|
+
this.connecting = false;
|
|
6635
|
+
if (this.stream) {
|
|
6636
|
+
this.stream.destroy();
|
|
6637
|
+
this.stream = void 0;
|
|
6638
|
+
}
|
|
6639
|
+
this.connectionRetryTimeout = window.setTimeout(()=>{
|
|
6640
|
+
this.connectionRetryTimeout = void 0;
|
|
6641
|
+
this.initSocket();
|
|
6642
|
+
}, Math.min(INITIAL_CONNECTION_RETRY_DELAY, retryRemainingMs));
|
|
6643
|
+
return true;
|
|
6644
|
+
}
|
|
6607
6645
|
failConnection(params) {
|
|
6608
6646
|
if (this.connectionFailed || this.connected || this.unloaded) return;
|
|
6609
|
-
this.connectionFailed = true;
|
|
6610
|
-
this.connecting = false;
|
|
6611
6647
|
this.clearConnectionTimeout();
|
|
6612
6648
|
const { url2Connect, cause } = params;
|
|
6649
|
+
if (this.retryInitialConnection(url2Connect)) return;
|
|
6650
|
+
this.connectionFailed = true;
|
|
6651
|
+
this.connecting = false;
|
|
6613
6652
|
const online = navigator.onLine;
|
|
6614
6653
|
const elapsedMs = this.connectingStartedAt ? Date.now() - this.connectingStartedAt : void 0;
|
|
6615
6654
|
const closeEvent = this.lastCloseEvent;
|
|
@@ -6775,7 +6814,9 @@ class Recorder extends util_Despot {
|
|
|
6775
6814
|
});
|
|
6776
6815
|
}
|
|
6777
6816
|
if (this.stream) {
|
|
6778
|
-
|
|
6817
|
+
if (!this.userMediaLoaded && !this.connectionRetryStartedAt) this.connectionRetryStartedAt = Date.now();
|
|
6818
|
+
const connectionRetryElapsedMs = this.connectionRetryStartedAt ? Date.now() - this.connectionRetryStartedAt : 0;
|
|
6819
|
+
const connectionTimeoutMs = this.connectionRetryStartedAt ? Math.max(0, this.options.timeouts.connection - connectionRetryElapsedMs) : this.options.timeouts.connection;
|
|
6779
6820
|
this.connectionTimeout = window.setTimeout(()=>{
|
|
6780
6821
|
this.failConnection({
|
|
6781
6822
|
url2Connect,
|
|
@@ -6802,6 +6843,7 @@ class Recorder extends util_Despot {
|
|
|
6802
6843
|
if (!this.connected && !isClosing && !this.unloaded) {
|
|
6803
6844
|
this.connected = true;
|
|
6804
6845
|
this.connecting = this.unloaded = false;
|
|
6846
|
+
this.connectionRetryStartedAt = void 0;
|
|
6805
6847
|
this.emit("CONNECTED");
|
|
6806
6848
|
cb?.();
|
|
6807
6849
|
}
|
|
@@ -7156,6 +7198,8 @@ class Recorder extends util_Despot {
|
|
|
7156
7198
|
this.reset();
|
|
7157
7199
|
this.clearUserMediaTimeout();
|
|
7158
7200
|
this.clearConnectionTimeout();
|
|
7201
|
+
this.clearConnectionRetryTimeout();
|
|
7202
|
+
this.connectionRetryStartedAt = void 0;
|
|
7159
7203
|
this.connecting = false;
|
|
7160
7204
|
if (this.userMedia) this.userMedia.unloadRemainingEventListeners();
|
|
7161
7205
|
if (this.submitting) ;
|
|
@@ -7559,7 +7603,7 @@ class Recorder extends util_Despot {
|
|
|
7559
7603
|
return this.userMediaLoaded;
|
|
7560
7604
|
}
|
|
7561
7605
|
constructor(visuals, replay, options){
|
|
7562
|
-
super("Recorder", options), recorder_define_property(this, "visuals", void 0), recorder_define_property(this, "replay", void 0), recorder_define_property(this, "loop", void 0), recorder_define_property(this, "originalAnimationFrameObject", void 0), recorder_define_property(this, "samplesCount", 0), recorder_define_property(this, "framesCount", 0), recorder_define_property(this, "recordingStats", void 0), recorder_define_property(this, "confirmedFrameNumber", 0), recorder_define_property(this, "confirmedSampleNumber", 0), recorder_define_property(this, "recorderElement", void 0), recorder_define_property(this, "userMedia", void 0), recorder_define_property(this, "userMediaTimeout", void 0), recorder_define_property(this, "retryTimeout", void 0), recorder_define_property(this, "connectionTimeout", void 0), recorder_define_property(this, "frameProgress", void 0), recorder_define_property(this, "sampleProgress", void 0), recorder_define_property(this, "canvas", void 0), recorder_define_property(this, "ctx", void 0), recorder_define_property(this, "userMediaLoaded", void 0), recorder_define_property(this, "userMediaLoading", false), recorder_define_property(this, "submitting", false), recorder_define_property(this, "unloaded", void 0), recorder_define_property(this, "stopTime", void 0), recorder_define_property(this, "stream", void 0), recorder_define_property(this, "connecting", false), recorder_define_property(this, "connected", false), recorder_define_property(this, "connectionFailed", false), recorder_define_property(this, "blocking", false), recorder_define_property(this, "built", false), recorder_define_property(this, "key", void 0), recorder_define_property(this, "waitingTime", void 0), recorder_define_property(this, "connectingStartedAt", void 0), recorder_define_property(this, "lastCloseEvent", void 0), recorder_define_property(this, "pingInterval", void 0), recorder_define_property(this, "frame", void 0), recorder_define_property(this, "recordingBuffer", void 0), recorder_define_property(this, "facingMode", void 0);
|
|
7606
|
+
super("Recorder", options), recorder_define_property(this, "visuals", void 0), recorder_define_property(this, "replay", void 0), recorder_define_property(this, "loop", void 0), recorder_define_property(this, "originalAnimationFrameObject", void 0), recorder_define_property(this, "samplesCount", 0), recorder_define_property(this, "framesCount", 0), recorder_define_property(this, "recordingStats", void 0), recorder_define_property(this, "confirmedFrameNumber", 0), recorder_define_property(this, "confirmedSampleNumber", 0), recorder_define_property(this, "recorderElement", void 0), recorder_define_property(this, "userMedia", void 0), recorder_define_property(this, "userMediaTimeout", void 0), recorder_define_property(this, "retryTimeout", void 0), recorder_define_property(this, "connectionTimeout", void 0), recorder_define_property(this, "connectionRetryTimeout", void 0), recorder_define_property(this, "frameProgress", void 0), recorder_define_property(this, "sampleProgress", void 0), recorder_define_property(this, "canvas", void 0), recorder_define_property(this, "ctx", void 0), recorder_define_property(this, "userMediaLoaded", void 0), recorder_define_property(this, "userMediaLoading", false), recorder_define_property(this, "submitting", false), recorder_define_property(this, "unloaded", void 0), recorder_define_property(this, "stopTime", void 0), recorder_define_property(this, "stream", void 0), recorder_define_property(this, "connecting", false), recorder_define_property(this, "connected", false), recorder_define_property(this, "connectionFailed", false), recorder_define_property(this, "blocking", false), recorder_define_property(this, "built", false), recorder_define_property(this, "key", void 0), recorder_define_property(this, "waitingTime", void 0), recorder_define_property(this, "connectingStartedAt", void 0), recorder_define_property(this, "connectionRetryStartedAt", void 0), recorder_define_property(this, "lastCloseEvent", void 0), recorder_define_property(this, "pingInterval", void 0), recorder_define_property(this, "frame", void 0), recorder_define_property(this, "recordingBuffer", void 0), recorder_define_property(this, "facingMode", void 0);
|
|
7563
7607
|
this.visuals = visuals;
|
|
7564
7608
|
this.replay = replay;
|
|
7565
7609
|
this.facingMode = options.video.facingMode;
|
|
@@ -26,6 +26,7 @@ declare class Recorder extends Despot {
|
|
|
26
26
|
private userMediaTimeout?;
|
|
27
27
|
private retryTimeout?;
|
|
28
28
|
private connectionTimeout?;
|
|
29
|
+
private connectionRetryTimeout?;
|
|
29
30
|
private frameProgress?;
|
|
30
31
|
private sampleProgress?;
|
|
31
32
|
private canvas?;
|
|
@@ -44,6 +45,7 @@ declare class Recorder extends Despot {
|
|
|
44
45
|
private key?;
|
|
45
46
|
private waitingTime?;
|
|
46
47
|
private connectingStartedAt?;
|
|
48
|
+
private connectionRetryStartedAt?;
|
|
47
49
|
private lastCloseEvent?;
|
|
48
50
|
private pingInterval?;
|
|
49
51
|
private frame?;
|
|
@@ -58,6 +60,8 @@ declare class Recorder extends Despot {
|
|
|
58
60
|
private onUserMediaReady;
|
|
59
61
|
private clearRetryTimeout;
|
|
60
62
|
private clearConnectionTimeout;
|
|
63
|
+
private clearConnectionRetryTimeout;
|
|
64
|
+
private retryInitialConnection;
|
|
61
65
|
private failConnection;
|
|
62
66
|
private calculateFrameProgress;
|
|
63
67
|
private calculateSampleProgress;
|
package/dist/umd/index.js
CHANGED
|
@@ -7051,7 +7051,7 @@
|
|
|
7051
7051
|
const safeStringify = __webpack_require__("X");
|
|
7052
7052
|
const qs = __webpack_require__("b");
|
|
7053
7053
|
const RequestBase = __webpack_require__("d");
|
|
7054
|
-
const { isObject, mixin, hasOwn } = __webpack_require__("Dp");
|
|
7054
|
+
const { isObject, mixin, hasOwn, isSafeKey } = __webpack_require__("Dp");
|
|
7055
7055
|
const ResponseBase = __webpack_require__("e");
|
|
7056
7056
|
const Agent = __webpack_require__("pf");
|
|
7057
7057
|
function noop() {}
|
|
@@ -7105,12 +7105,18 @@
|
|
|
7105
7105
|
form: 'application/x-www-form-urlencoded',
|
|
7106
7106
|
'form-data': 'application/x-www-form-urlencoded'
|
|
7107
7107
|
};
|
|
7108
|
+
function lookupType(type) {
|
|
7109
|
+
return hasOwn(request.types, type) && request.types[type] || type;
|
|
7110
|
+
}
|
|
7108
7111
|
request.serialize = {
|
|
7109
|
-
'application/x-www-form-urlencoded'
|
|
7112
|
+
'application/x-www-form-urlencoded' (object) {
|
|
7113
|
+
return qs.stringify(object, {
|
|
7110
7114
|
indices: false,
|
|
7111
7115
|
strictNullHandling: true
|
|
7112
|
-
})
|
|
7113
|
-
|
|
7116
|
+
});
|
|
7117
|
+
},
|
|
7118
|
+
'application/json': safeStringify,
|
|
7119
|
+
'application/csp-report': safeStringify
|
|
7114
7120
|
};
|
|
7115
7121
|
request.parse = {
|
|
7116
7122
|
'application/x-www-form-urlencoded': parseString,
|
|
@@ -7128,8 +7134,10 @@
|
|
|
7128
7134
|
index = line.indexOf(':');
|
|
7129
7135
|
if (-1 !== index) {
|
|
7130
7136
|
field = line.slice(0, index).toLowerCase();
|
|
7131
|
-
|
|
7132
|
-
|
|
7137
|
+
if (isSafeKey(field)) {
|
|
7138
|
+
value = trim(line.slice(index + 1));
|
|
7139
|
+
fields[field] = value;
|
|
7140
|
+
}
|
|
7133
7141
|
}
|
|
7134
7142
|
}
|
|
7135
7143
|
return fields;
|
|
@@ -7150,11 +7158,12 @@
|
|
|
7150
7158
|
this.header['content-type'] = this.xhr.getResponseHeader('content-type');
|
|
7151
7159
|
this._setHeaderProperties(this.header);
|
|
7152
7160
|
if (null === this.text && request_._responseType) this.body = this.xhr.response;
|
|
7153
|
-
else
|
|
7161
|
+
else if ('HEAD' === this.req.method) this.body = null;
|
|
7162
|
+
else this.body = this._parseBody(this.text || this.xhr.response);
|
|
7154
7163
|
}
|
|
7155
7164
|
mixin(Response.prototype, ResponseBase.prototype);
|
|
7156
7165
|
Response.prototype._parseBody = function(string_) {
|
|
7157
|
-
let parse = request.parse[this.type];
|
|
7166
|
+
let parse = hasOwn(request.parse, this.type) ? request.parse[this.type] : void 0;
|
|
7158
7167
|
if (this.req._parser) return this.req._parser(this, string_);
|
|
7159
7168
|
if (!parse && isJSON(this.type)) parse = request.parse['application/json'];
|
|
7160
7169
|
return parse && string_ && (string_.length > 0 || string_ instanceof Object) ? parse(string_) : null;
|
|
@@ -7189,7 +7198,7 @@
|
|
|
7189
7198
|
error.original = err;
|
|
7190
7199
|
if (self1.xhr) {
|
|
7191
7200
|
error.rawResponse = void 0 === self1.xhr.responseType ? self1.xhr.responseText : self1.xhr.response;
|
|
7192
|
-
error.status = self1.xhr.status
|
|
7201
|
+
error.status = self1.xhr.status || null;
|
|
7193
7202
|
error.statusCode = error.status;
|
|
7194
7203
|
} else {
|
|
7195
7204
|
error.rawResponse = null;
|
|
@@ -7215,11 +7224,11 @@
|
|
|
7215
7224
|
Emitter(Request.prototype);
|
|
7216
7225
|
mixin(Request.prototype, RequestBase.prototype);
|
|
7217
7226
|
Request.prototype.type = function(type) {
|
|
7218
|
-
this.set('Content-Type',
|
|
7227
|
+
this.set('Content-Type', lookupType(type));
|
|
7219
7228
|
return this;
|
|
7220
7229
|
};
|
|
7221
7230
|
Request.prototype.accept = function(type) {
|
|
7222
|
-
this.set('Accept',
|
|
7231
|
+
this.set('Accept', lookupType(type));
|
|
7223
7232
|
return this;
|
|
7224
7233
|
};
|
|
7225
7234
|
Request.prototype.auth = function(user, pass, options) {
|
|
@@ -7231,7 +7240,8 @@
|
|
|
7231
7240
|
if (!options) options = {
|
|
7232
7241
|
type: 'function' == typeof btoa ? 'basic' : 'auto'
|
|
7233
7242
|
};
|
|
7234
|
-
|
|
7243
|
+
let { encoder } = options;
|
|
7244
|
+
if (!encoder) encoder = (string)=>{
|
|
7235
7245
|
if ('function' == typeof btoa) return btoa(string);
|
|
7236
7246
|
throw new Error('Cannot use basic auth, btoa is not a function');
|
|
7237
7247
|
};
|
|
@@ -7342,16 +7352,24 @@
|
|
|
7342
7352
|
if (this._withCredentials) xhr.withCredentials = true;
|
|
7343
7353
|
if (!this._formData && 'GET' !== this.method && 'HEAD' !== this.method && 'string' != typeof data && !this._isHost(data)) {
|
|
7344
7354
|
const contentType = this._header['content-type'];
|
|
7345
|
-
|
|
7355
|
+
const serializeType = contentType ? contentType.split(';')[0] : '';
|
|
7356
|
+
let serialize = this._serializer || (hasOwn(request.serialize, serializeType) ? request.serialize[serializeType] : void 0);
|
|
7346
7357
|
if (!serialize && isJSON(contentType)) serialize = request.serialize['application/json'];
|
|
7347
7358
|
if (serialize) data = serialize(data);
|
|
7348
7359
|
}
|
|
7349
|
-
|
|
7350
|
-
|
|
7360
|
+
try {
|
|
7361
|
+
for(const field in this.header)if (null !== this.header[field]) {
|
|
7362
|
+
if (hasOwn(this.header, field)) xhr.setRequestHeader(field, this.header[field]);
|
|
7363
|
+
}
|
|
7364
|
+
if (this._responseType) xhr.responseType = this._responseType;
|
|
7365
|
+
this.emit('request', this);
|
|
7366
|
+
xhr.send(void 0 === data ? null : data);
|
|
7367
|
+
} catch (err) {
|
|
7368
|
+
try {
|
|
7369
|
+
xhr.abort();
|
|
7370
|
+
} catch (err) {}
|
|
7371
|
+
return this.callback(err);
|
|
7351
7372
|
}
|
|
7352
|
-
if (this._responseType) xhr.responseType = this._responseType;
|
|
7353
|
-
this.emit('request', this);
|
|
7354
|
-
xhr.send(void 0 === data ? null : data);
|
|
7355
7373
|
};
|
|
7356
7374
|
const proxyAgent = new Proxy(Agent, {
|
|
7357
7375
|
apply (target, thisArg, argumentsList) {
|
|
@@ -7361,6 +7379,7 @@
|
|
|
7361
7379
|
request.agent = proxyAgent;
|
|
7362
7380
|
for (const method of [
|
|
7363
7381
|
'GET',
|
|
7382
|
+
'HEAD',
|
|
7364
7383
|
'POST',
|
|
7365
7384
|
'OPTIONS',
|
|
7366
7385
|
'PATCH',
|
|
@@ -7448,7 +7467,7 @@
|
|
|
7448
7467
|
},
|
|
7449
7468
|
d (module1, __unused_rspack_exports, __webpack_require__) {
|
|
7450
7469
|
"use strict";
|
|
7451
|
-
const { isObject, hasOwn } = __webpack_require__("Dp");
|
|
7470
|
+
const { isObject, hasOwn, isSafeKey } = __webpack_require__("Dp");
|
|
7452
7471
|
module1.exports = RequestBase;
|
|
7453
7472
|
function RequestBase() {}
|
|
7454
7473
|
RequestBase.prototype.clearTimeout = function() {
|
|
@@ -7558,7 +7577,7 @@
|
|
|
7558
7577
|
if (this._endCalled) console.warn('Warning: superagent request was sent twice, because both .end() and .then() were called. Never call .end() if you use promises');
|
|
7559
7578
|
this._fullfilledPromise = new Promise((resolve, reject)=>{
|
|
7560
7579
|
self1.on('abort', ()=>{
|
|
7561
|
-
if (this._maxRetries && this._maxRetries > this._retries) return;
|
|
7580
|
+
if (this.timedout && this._maxRetries && this._maxRetries > this._retries) return;
|
|
7562
7581
|
if (this.timedout && this.timedoutError) return void reject(this.timedoutError);
|
|
7563
7582
|
const error = new Error('Aborted');
|
|
7564
7583
|
error.code = 'ABORTED';
|
|
@@ -7685,7 +7704,13 @@
|
|
|
7685
7704
|
} else if (data && this._data && this._isHost(this._data)) throw new Error("Can't merge these send calls");
|
|
7686
7705
|
if (isObject_ && isObject(this._data)) for(const key in data){
|
|
7687
7706
|
if ('bigint' == typeof data[key] && !data[key].toJSON) throw new Error('Cannot serialize BigInt value to json');
|
|
7688
|
-
if (hasOwn(data, key)) this._data[key] = data[key];
|
|
7707
|
+
if (hasOwn(data, key)) if (isSafeKey(key)) this._data[key] = data[key];
|
|
7708
|
+
else Object.defineProperty(this._data, key, {
|
|
7709
|
+
value: data[key],
|
|
7710
|
+
enumerable: true,
|
|
7711
|
+
writable: true,
|
|
7712
|
+
configurable: true
|
|
7713
|
+
});
|
|
7689
7714
|
}
|
|
7690
7715
|
else if ('bigint' == typeof data) throw new Error("Cannot send value of type BigInt");
|
|
7691
7716
|
else if ('string' == typeof data) {
|
|
@@ -7753,7 +7778,7 @@
|
|
|
7753
7778
|
const ct = header['content-type'] || '';
|
|
7754
7779
|
this.type = utils.type(ct);
|
|
7755
7780
|
const parameters = utils.params(ct);
|
|
7756
|
-
for(const key in parameters)if (Object.prototype.hasOwnProperty.call(parameters, key)) this[key] = parameters[key];
|
|
7781
|
+
for(const key in parameters)if (Object.prototype.hasOwnProperty.call(parameters, key) && !(key in this)) this[key] = parameters[key];
|
|
7757
7782
|
this.links = {};
|
|
7758
7783
|
try {
|
|
7759
7784
|
if (header.link) this.links = utils.parseLinks(header.link);
|
|
@@ -7784,13 +7809,19 @@
|
|
|
7784
7809
|
Dp (__unused_rspack_module, exports1) {
|
|
7785
7810
|
"use strict";
|
|
7786
7811
|
exports1.type = (string_)=>string_.split(/ *; */).shift();
|
|
7812
|
+
const UNSAFE_KEYS = new Set([
|
|
7813
|
+
'__proto__',
|
|
7814
|
+
'constructor',
|
|
7815
|
+
'prototype'
|
|
7816
|
+
]);
|
|
7817
|
+
exports1.isSafeKey = (key)=>!UNSAFE_KEYS.has(key);
|
|
7787
7818
|
exports1.params = (value)=>{
|
|
7788
7819
|
const object = {};
|
|
7789
7820
|
for (const string_ of value.split(/ *; */)){
|
|
7790
7821
|
const parts = string_.split(/ *= */);
|
|
7791
7822
|
const key = parts.shift();
|
|
7792
7823
|
const value = parts.shift();
|
|
7793
|
-
if (key && value) object[key] = value;
|
|
7824
|
+
if (key && value && exports1.isSafeKey(key)) object[key] = value;
|
|
7794
7825
|
}
|
|
7795
7826
|
return object;
|
|
7796
7827
|
};
|
|
@@ -7799,8 +7830,14 @@
|
|
|
7799
7830
|
for (const string_ of value.split(/ *, */)){
|
|
7800
7831
|
const parts = string_.split(/ *; */);
|
|
7801
7832
|
const url = parts[0].slice(1, -1);
|
|
7802
|
-
const
|
|
7803
|
-
|
|
7833
|
+
for (const part of parts.slice(1)){
|
|
7834
|
+
const [key, keyValue] = part.split(/ *= */, 2);
|
|
7835
|
+
if (key && 'rel' === key.toLowerCase() && keyValue) {
|
|
7836
|
+
const relationship = keyValue.replace(/^"|"$/g, '');
|
|
7837
|
+
if (relationship && exports1.isSafeKey(relationship)) object[relationship] = url;
|
|
7838
|
+
break;
|
|
7839
|
+
}
|
|
7840
|
+
}
|
|
7804
7841
|
}
|
|
7805
7842
|
return object;
|
|
7806
7843
|
};
|
|
@@ -7816,19 +7853,19 @@
|
|
|
7816
7853
|
return header;
|
|
7817
7854
|
};
|
|
7818
7855
|
exports1.normalizeHostname = (hostname)=>{
|
|
7819
|
-
const [, normalized] = hostname.match(/^\[([^\]]+)
|
|
7856
|
+
const [, normalized] = hostname.match(/^\[([^\]]+)]$/) || [];
|
|
7820
7857
|
return normalized || hostname;
|
|
7821
7858
|
};
|
|
7822
7859
|
exports1.isObject = (object)=>null !== object && 'object' == typeof object;
|
|
7823
7860
|
exports1.hasOwn = Object.hasOwn || function(object, property) {
|
|
7824
7861
|
if (null == object) throw new TypeError('Cannot convert undefined or null to object');
|
|
7825
|
-
return Object.prototype.hasOwnProperty.call(
|
|
7862
|
+
return Object.prototype.hasOwnProperty.call(Object(object), property);
|
|
7826
7863
|
};
|
|
7827
7864
|
exports1.mixin = (target, source)=>{
|
|
7828
7865
|
for(const key in source)if (exports1.hasOwn(source, key)) target[key] = source[key];
|
|
7829
7866
|
};
|
|
7830
|
-
exports1.isGzipOrDeflateEncoding = (res)
|
|
7831
|
-
exports1.isBrotliEncoding = (res)
|
|
7867
|
+
exports1.isGzipOrDeflateEncoding = (res)=>/^\s*(?:deflate|gzip)\s*$/i.test(res.headers['content-encoding']);
|
|
7868
|
+
exports1.isBrotliEncoding = (res)=>/^\s*br\s*$/i.test(res.headers['content-encoding']);
|
|
7832
7869
|
},
|
|
7833
7870
|
E (module1, __unused_rspack_exports, __webpack_require__) {
|
|
7834
7871
|
var Buffer = __webpack_require__("dY").Buffer;
|
|
@@ -10340,7 +10377,7 @@
|
|
|
10340
10377
|
function isTATag(tag) {
|
|
10341
10378
|
return $indexOf(typedArrays, tag) > -1;
|
|
10342
10379
|
}
|
|
10343
|
-
|
|
10380
|
+
function whichTypedArray(value) {
|
|
10344
10381
|
if (!value || 'object' != typeof value) return false;
|
|
10345
10382
|
if (!hasToStringTag) {
|
|
10346
10383
|
var tag = $slice($toString(value), 8, -1);
|
|
@@ -10350,7 +10387,8 @@
|
|
|
10350
10387
|
}
|
|
10351
10388
|
if (!gOPD) return null;
|
|
10352
10389
|
return tryTypedArrays(value);
|
|
10353
|
-
}
|
|
10390
|
+
}
|
|
10391
|
+
module1.exports = whichTypedArray;
|
|
10354
10392
|
},
|
|
10355
10393
|
T2 (module1) {
|
|
10356
10394
|
module1.exports = wrappy;
|
|
@@ -10938,7 +10976,7 @@
|
|
|
10938
10976
|
var client = __webpack_require__("Q");
|
|
10939
10977
|
var client_default = /*#__PURE__*/ __webpack_require__.n(client);
|
|
10940
10978
|
var package_namespaceObject = {
|
|
10941
|
-
rE: "15.7.
|
|
10979
|
+
rE: "15.7.8"
|
|
10942
10980
|
};
|
|
10943
10981
|
function isAudioEnabled(options) {
|
|
10944
10982
|
return Boolean(options.audio.enabled);
|
|
@@ -15075,8 +15113,17 @@
|
|
|
15075
15113
|
[constants.WHITELIST_KEY_LABEL]: this.options.whitelistKey
|
|
15076
15114
|
};
|
|
15077
15115
|
const url = `${this.options.apiUrl}/client-error/`;
|
|
15078
|
-
|
|
15079
|
-
|
|
15116
|
+
let supportedConstraints;
|
|
15117
|
+
let enumerateDevices;
|
|
15118
|
+
try {
|
|
15119
|
+
if (navigator.mediaDevices) {
|
|
15120
|
+
supportedConstraints = navigator.mediaDevices.getSupportedConstraints();
|
|
15121
|
+
enumerateDevices = await navigator.mediaDevices.enumerateDevices();
|
|
15122
|
+
}
|
|
15123
|
+
} catch {
|
|
15124
|
+
supportedConstraints = void 0;
|
|
15125
|
+
enumerateDevices = void 0;
|
|
15126
|
+
}
|
|
15080
15127
|
const fullVideomailErrorData = {
|
|
15081
15128
|
browser: err.browser,
|
|
15082
15129
|
code: err.code,
|
|
@@ -17180,6 +17227,7 @@
|
|
|
17180
17227
|
const visuals_userMedia = UserMedia;
|
|
17181
17228
|
var Buffer = __webpack_require__("dY").Buffer;
|
|
17182
17229
|
const PIPE_SYMBOL = "°º¤ø,¸¸,ø¤º°`°º¤ø,¸,ø¤°º¤ø,¸¸,ø¤º°`°º¤ø,¸ ";
|
|
17230
|
+
const INITIAL_CONNECTION_RETRY_DELAY = 1e3;
|
|
17183
17231
|
class Recorder extends util_Despot {
|
|
17184
17232
|
visuals;
|
|
17185
17233
|
replay;
|
|
@@ -17195,6 +17243,7 @@
|
|
|
17195
17243
|
userMediaTimeout;
|
|
17196
17244
|
retryTimeout;
|
|
17197
17245
|
connectionTimeout;
|
|
17246
|
+
connectionRetryTimeout;
|
|
17198
17247
|
frameProgress;
|
|
17199
17248
|
sampleProgress;
|
|
17200
17249
|
canvas;
|
|
@@ -17213,6 +17262,7 @@
|
|
|
17213
17262
|
key;
|
|
17214
17263
|
waitingTime;
|
|
17215
17264
|
connectingStartedAt;
|
|
17265
|
+
connectionRetryStartedAt;
|
|
17216
17266
|
lastCloseEvent;
|
|
17217
17267
|
pingInterval;
|
|
17218
17268
|
frame;
|
|
@@ -17316,12 +17366,40 @@
|
|
|
17316
17366
|
window.clearTimeout(this.connectionTimeout);
|
|
17317
17367
|
this.connectionTimeout = void 0;
|
|
17318
17368
|
}
|
|
17369
|
+
clearConnectionRetryTimeout() {
|
|
17370
|
+
if (!this.connectionRetryTimeout) return;
|
|
17371
|
+
this.options.logger.debug("Recorder: clearConnectionRetryTimeout()");
|
|
17372
|
+
window.clearTimeout(this.connectionRetryTimeout);
|
|
17373
|
+
this.connectionRetryTimeout = void 0;
|
|
17374
|
+
}
|
|
17375
|
+
retryInitialConnection(url2Connect) {
|
|
17376
|
+
const retryStartedAt = this.connectionRetryStartedAt;
|
|
17377
|
+
if (!retryStartedAt) return false;
|
|
17378
|
+
const retryElapsedMs = Date.now() - retryStartedAt;
|
|
17379
|
+
if (retryElapsedMs >= this.options.timeouts.connection) {
|
|
17380
|
+
this.connectionRetryStartedAt = void 0;
|
|
17381
|
+
return false;
|
|
17382
|
+
}
|
|
17383
|
+
const retryRemainingMs = this.options.timeouts.connection - retryElapsedMs;
|
|
17384
|
+
this.options.logger.debug(`Recorder: retrying initial web socket connection to ${url2Connect}`);
|
|
17385
|
+
this.connecting = false;
|
|
17386
|
+
if (this.stream) {
|
|
17387
|
+
this.stream.destroy();
|
|
17388
|
+
this.stream = void 0;
|
|
17389
|
+
}
|
|
17390
|
+
this.connectionRetryTimeout = window.setTimeout(()=>{
|
|
17391
|
+
this.connectionRetryTimeout = void 0;
|
|
17392
|
+
this.initSocket();
|
|
17393
|
+
}, Math.min(INITIAL_CONNECTION_RETRY_DELAY, retryRemainingMs));
|
|
17394
|
+
return true;
|
|
17395
|
+
}
|
|
17319
17396
|
failConnection(params) {
|
|
17320
17397
|
if (this.connectionFailed || this.connected || this.unloaded) return;
|
|
17321
|
-
this.connectionFailed = true;
|
|
17322
|
-
this.connecting = false;
|
|
17323
17398
|
this.clearConnectionTimeout();
|
|
17324
17399
|
const { url2Connect, cause } = params;
|
|
17400
|
+
if (this.retryInitialConnection(url2Connect)) return;
|
|
17401
|
+
this.connectionFailed = true;
|
|
17402
|
+
this.connecting = false;
|
|
17325
17403
|
const online = navigator.onLine;
|
|
17326
17404
|
const elapsedMs = this.connectingStartedAt ? Date.now() - this.connectingStartedAt : void 0;
|
|
17327
17405
|
const closeEvent = this.lastCloseEvent;
|
|
@@ -17487,7 +17565,9 @@
|
|
|
17487
17565
|
});
|
|
17488
17566
|
}
|
|
17489
17567
|
if (this.stream) {
|
|
17490
|
-
|
|
17568
|
+
if (!this.userMediaLoaded && !this.connectionRetryStartedAt) this.connectionRetryStartedAt = Date.now();
|
|
17569
|
+
const connectionRetryElapsedMs = this.connectionRetryStartedAt ? Date.now() - this.connectionRetryStartedAt : 0;
|
|
17570
|
+
const connectionTimeoutMs = this.connectionRetryStartedAt ? Math.max(0, this.options.timeouts.connection - connectionRetryElapsedMs) : this.options.timeouts.connection;
|
|
17491
17571
|
this.connectionTimeout = window.setTimeout(()=>{
|
|
17492
17572
|
this.failConnection({
|
|
17493
17573
|
url2Connect,
|
|
@@ -17514,6 +17594,7 @@
|
|
|
17514
17594
|
if (!this.connected && !isClosing && !this.unloaded) {
|
|
17515
17595
|
this.connected = true;
|
|
17516
17596
|
this.connecting = this.unloaded = false;
|
|
17597
|
+
this.connectionRetryStartedAt = void 0;
|
|
17517
17598
|
this.emit("CONNECTED");
|
|
17518
17599
|
cb?.();
|
|
17519
17600
|
}
|
|
@@ -17868,6 +17949,8 @@
|
|
|
17868
17949
|
this.reset();
|
|
17869
17950
|
this.clearUserMediaTimeout();
|
|
17870
17951
|
this.clearConnectionTimeout();
|
|
17952
|
+
this.clearConnectionRetryTimeout();
|
|
17953
|
+
this.connectionRetryStartedAt = void 0;
|
|
17871
17954
|
this.connecting = false;
|
|
17872
17955
|
if (this.userMedia) this.userMedia.unloadRemainingEventListeners();
|
|
17873
17956
|
if (this.submitting) ;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "videomail-client",
|
|
3
|
-
"version": "15.7.
|
|
3
|
+
"version": "15.7.8",
|
|
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",
|
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
"is-power-of-two": "1.0.0",
|
|
71
71
|
"nanoevents": "10.0.0",
|
|
72
72
|
"serialize-error": "13.0.1",
|
|
73
|
-
"superagent": "10.
|
|
73
|
+
"superagent": "10.4.1",
|
|
74
74
|
"ua-parser-js": "2.0.10",
|
|
75
75
|
"websocket-stream": "5.5.2"
|
|
76
76
|
},
|
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
"@rsbuild/plugin-node-polyfill": "1.4.6",
|
|
82
82
|
"@rsbuild/plugin-stylus": "2.0.1",
|
|
83
83
|
"@rsdoctor/rspack-plugin": "1.6.4",
|
|
84
|
-
"@rslib/core": "1.0.
|
|
84
|
+
"@rslib/core": "1.0.2",
|
|
85
85
|
"@storybook/addon-a11y": "10.6.0",
|
|
86
86
|
"@storybook/addon-docs": "10.6.0",
|
|
87
87
|
"@storybook/addon-links": "10.6.0",
|
|
@@ -89,37 +89,37 @@
|
|
|
89
89
|
"@tsconfig/node26": "26.0.1",
|
|
90
90
|
"@tsconfig/strictest": "2.0.8",
|
|
91
91
|
"@types/defined": "1.0.2",
|
|
92
|
-
"@types/node": "26.6.
|
|
92
|
+
"@types/node": "26.6.3",
|
|
93
93
|
"@types/superagent": "8.1.11",
|
|
94
94
|
"@types/ua-parser-js": "0.7.39",
|
|
95
95
|
"@vitest/eslint-plugin": "1.6.27",
|
|
96
96
|
"audit-ci": "7.1.0",
|
|
97
|
-
"chromatic": "18.9.
|
|
97
|
+
"chromatic": "18.9.5",
|
|
98
98
|
"cross-env": "10.1.0",
|
|
99
|
-
"eslint": "10.
|
|
99
|
+
"eslint": "10.11.0",
|
|
100
100
|
"eslint-import-resolver-typescript": "4.4.5",
|
|
101
|
-
"eslint-plugin-de-morgan": "2.
|
|
101
|
+
"eslint-plugin-de-morgan": "2.2.0",
|
|
102
102
|
"eslint-plugin-depend": "1.5.0",
|
|
103
103
|
"eslint-plugin-import-x": "4.17.1",
|
|
104
|
-
"eslint-plugin-package-json": "1.
|
|
105
|
-
"eslint-plugin-regexp": "3.3.
|
|
104
|
+
"eslint-plugin-package-json": "1.10.0",
|
|
105
|
+
"eslint-plugin-regexp": "3.3.1",
|
|
106
106
|
"eslint-plugin-simple-import-sort": "14.0.0",
|
|
107
107
|
"globals": "17.12.0",
|
|
108
|
-
"jsdom": "30.1.
|
|
108
|
+
"jsdom": "30.1.1",
|
|
109
109
|
"msw": "2.15.0",
|
|
110
110
|
"msw-storybook-addon": "3.0.3",
|
|
111
|
-
"prettier": "3.9.
|
|
111
|
+
"prettier": "3.9.9",
|
|
112
112
|
"prettier-plugin-curly": "0.4.1",
|
|
113
113
|
"prettier-plugin-jsdoc": "1.8.1",
|
|
114
114
|
"prettier-plugin-packagejson": "3.0.2",
|
|
115
|
-
"prettier-plugin-sh": "0.
|
|
115
|
+
"prettier-plugin-sh": "0.20.2",
|
|
116
116
|
"release-it": "21.1.0",
|
|
117
117
|
"storybook": "10.6.0",
|
|
118
|
-
"storybook-html-rsbuild": "3.
|
|
118
|
+
"storybook-html-rsbuild": "3.6.0",
|
|
119
119
|
"type-fest": "5.10.0",
|
|
120
120
|
"typescript": "6.0.3",
|
|
121
|
-
"typescript-eslint": "8.70.
|
|
122
|
-
"vitest": "
|
|
121
|
+
"typescript-eslint": "8.70.1",
|
|
122
|
+
"vitest": "5.0.2"
|
|
123
123
|
},
|
|
124
124
|
"engines": {
|
|
125
125
|
"node": "^26.5.0",
|