@bigbinary/neeto-media-recorder 2.7.41 → 2.7.43
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/constants.js +4 -1
- package/constants.js.map +1 -1
- package/core.js +1 -1
- package/core.js.map +1 -1
- package/index.js +4 -2
- package/index.js.map +1 -1
- package/package.json +35 -19
- package/src/constants.js +152 -0
- package/src/index.js +5 -0
- package/v2/index.js +2536 -0
- package/v2/index.js.map +1 -0
package/v2/index.js
ADDED
|
@@ -0,0 +1,2536 @@
|
|
|
1
|
+
import { shallow } from 'zustand/shallow';
|
|
2
|
+
import { useState, useRef, useCallback, useEffect, forwardRef, useImperativeHandle } from 'react';
|
|
3
|
+
import { Toastr, Typography, Spinner, Callout, Button, Progress, Alert } from '@bigbinary/neeto-atoms';
|
|
4
|
+
import { useMutation, isCancelledError } from '@tanstack/react-query';
|
|
5
|
+
import { noop } from '@bigbinary/neeto-cist';
|
|
6
|
+
import { ONE_SECOND_IN_MILLISECONDS as ONE_SECOND_IN_MILLISECONDS$1, SCREEN_RECORDER_STATUS, UPLOAD_STATUS as UPLOAD_STATUS$1, MIME_TYPE as MIME_TYPE$1, ONE_MINUTE_IN_MILLISECONDS as ONE_MINUTE_IN_MILLISECONDS$1, IS_EXTENSION as IS_EXTENSION$1, SCREEN_RECORDER_ERROR, IS_SAFARI_EXTENSION, COUNTDOWN_TIME, MIC_NOT_WORKING_SILENCE_TIMEOUT, SCREEN_RECORDER_EVENT, UPLOAD_EVENT } from '@bigbinary/neeto-media-recorder/constants';
|
|
7
|
+
import { screenRecorder, useMultipartS3UploadStatus, getMultipartS3Uploader } from '@bigbinary/neeto-media-recorder/core';
|
|
8
|
+
import PageLoader from '@bigbinary/neeto-molecules/v2/PageLoader';
|
|
9
|
+
import { Trans, useTranslation } from 'react-i18next';
|
|
10
|
+
import platform from 'platform';
|
|
11
|
+
import { isNotNil, min } from 'ramda';
|
|
12
|
+
import axios from 'axios';
|
|
13
|
+
import { copyToClipboard } from '@bigbinary/neeto-commons-frontend/v2/utils/general';
|
|
14
|
+
import withT from '@bigbinary/neeto-commons-frontend/v2/react-utils/withT';
|
|
15
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
16
|
+
import classNames from 'classnames';
|
|
17
|
+
import Computer from '@bigbinary/neeto-icons/Computer';
|
|
18
|
+
import Pause from '@bigbinary/neeto-icons/Pause';
|
|
19
|
+
import Unlock from '@bigbinary/neeto-icons/Unlock';
|
|
20
|
+
import Delete from '@bigbinary/neeto-icons/Delete';
|
|
21
|
+
import Browser from '@bigbinary/neeto-icons/Browser';
|
|
22
|
+
import Close from '@bigbinary/neeto-icons/Close';
|
|
23
|
+
import Download from '@bigbinary/neeto-icons/Download';
|
|
24
|
+
import Copy from '@bigbinary/neeto-icons/Copy';
|
|
25
|
+
import Refresh from '@bigbinary/neeto-icons/Refresh';
|
|
26
|
+
import CopyToClipboardButton from '@bigbinary/neeto-molecules/v2/CopyToClipboardButton';
|
|
27
|
+
|
|
28
|
+
var e=[],t=[];function n(n,r){if(n&&"undefined"!=typeof document){var a,s=!0===r.prepend?"prepend":"append",d=!0===r.singleTag,i="string"==typeof r.container?document.querySelector(r.container):document.getElementsByTagName("head")[0];if(d){var u=e.indexOf(i);-1===u&&(u=e.push(i)-1,t[u]={}),a=t[u]&&t[u][s]?t[u][s]:t[u][s]=c();}else a=c();65279===n.charCodeAt(0)&&(n=n.substring(1)),a.styleSheet?a.styleSheet.cssText+=n:a.appendChild(document.createTextNode(n));}function c(){var e=document.createElement("style");if(e.setAttribute("type","text/css"),r.attributes)for(var t=Object.keys(r.attributes),n=0;n<t.length;n++)e.setAttribute(t[n],r.attributes[t[n]]);var a="prepend"===s?"afterbegin":"beforeend";return i.insertAdjacentElement(a,e),e}}
|
|
29
|
+
|
|
30
|
+
var css = ".nrec-done-button{background-color:rgb(var(--neeto-ui-error-100));padding:8px 12px}.nrec-done-button:hover{box-shadow:0 0 0 3px rgba(var(--neeto-ui-error-500),15%)}body .neeto-ui-modal__wrapper .neeto-ui-btn--style-danger{background:rgb(var(--neeto-ui-error-500))}.nrec-media-upload-progress{margin:0 auto;max-width:480px}.nrec-media-upload-error{color:rgb(var(--neeto-ui-error-500))}.nrec-media-upload-loader{background:#d9d9d9;border-radius:14px;display:inline-block;height:10px;margin:0 auto;max-width:480px;overflow:hidden;position:relative;width:100%}.nrec-media-upload-loader:after{animation:movementLoader 3s linear infinite,barAnimation 1.5s linear infinite;background-color:#fff;background-image:linear-gradient(45deg,#268e6c 25%,#12805c 0,#12805c 50%,#268e6c 0,#268e6c 75%,#12805c 0,#12805c);background-size:1em 1em;border-radius:14px;box-sizing:border-box;content:\"\";height:10px;left:0;position:absolute;top:0;width:230px}@media only screen and (max-width:767px){.nrec-media-upload-loader:after{width:130px}}.nrec-grant-permission-callout{font-size:20px;left:50%;pointer-events:none;position:fixed;top:60vh;transform:translateX(-50%);width:min(640px,100vw - 32px);z-index:2147483000}@keyframes barAnimation{0%{background-position:1em 0}to{background-position:0 0}}@keyframes movementLoader{0%{left:0;transform:translateX(-100%)}to{left:100%;transform:translateX(0)}}";
|
|
31
|
+
n(css,{});
|
|
32
|
+
|
|
33
|
+
function _typeof$1(o) {
|
|
34
|
+
"@babel/helpers - typeof";
|
|
35
|
+
|
|
36
|
+
return _typeof$1 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
|
|
37
|
+
return typeof o;
|
|
38
|
+
} : function (o) {
|
|
39
|
+
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
|
|
40
|
+
}, _typeof$1(o);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function toPrimitive(t, r) {
|
|
44
|
+
if ("object" != _typeof$1(t) || !t) return t;
|
|
45
|
+
var e = t[Symbol.toPrimitive];
|
|
46
|
+
if (void 0 !== e) {
|
|
47
|
+
var i = e.call(t, r || "default");
|
|
48
|
+
if ("object" != _typeof$1(i)) return i;
|
|
49
|
+
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
50
|
+
}
|
|
51
|
+
return ("string" === r ? String : Number)(t);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function toPropertyKey(t) {
|
|
55
|
+
var i = toPrimitive(t, "string");
|
|
56
|
+
return "symbol" == _typeof$1(i) ? i : i + "";
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function _defineProperty(e, r, t) {
|
|
60
|
+
return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
|
|
61
|
+
value: t,
|
|
62
|
+
enumerable: !0,
|
|
63
|
+
configurable: !0,
|
|
64
|
+
writable: !0
|
|
65
|
+
}) : e[r] = t, e;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function asyncGeneratorStep(n, t, e, r, o, a, c) {
|
|
69
|
+
try {
|
|
70
|
+
var i = n[a](c),
|
|
71
|
+
u = i.value;
|
|
72
|
+
} catch (n) {
|
|
73
|
+
return void e(n);
|
|
74
|
+
}
|
|
75
|
+
i.done ? t(u) : Promise.resolve(u).then(r, o);
|
|
76
|
+
}
|
|
77
|
+
function _asyncToGenerator(n) {
|
|
78
|
+
return function () {
|
|
79
|
+
var t = this,
|
|
80
|
+
e = arguments;
|
|
81
|
+
return new Promise(function (r, o) {
|
|
82
|
+
var a = n.apply(t, e);
|
|
83
|
+
function _next(n) {
|
|
84
|
+
asyncGeneratorStep(a, r, o, _next, _throw, "next", n);
|
|
85
|
+
}
|
|
86
|
+
function _throw(n) {
|
|
87
|
+
asyncGeneratorStep(a, r, o, _next, _throw, "throw", n);
|
|
88
|
+
}
|
|
89
|
+
_next(void 0);
|
|
90
|
+
});
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function _arrayWithHoles(r) {
|
|
95
|
+
if (Array.isArray(r)) return r;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
function _iterableToArrayLimit(r, l) {
|
|
99
|
+
var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
|
|
100
|
+
if (null != t) {
|
|
101
|
+
var e,
|
|
102
|
+
n,
|
|
103
|
+
i,
|
|
104
|
+
u,
|
|
105
|
+
a = [],
|
|
106
|
+
f = !0,
|
|
107
|
+
o = !1;
|
|
108
|
+
try {
|
|
109
|
+
if (i = (t = t.call(r)).next, 0 === l) ; else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
|
|
110
|
+
} catch (r) {
|
|
111
|
+
o = !0, n = r;
|
|
112
|
+
} finally {
|
|
113
|
+
try {
|
|
114
|
+
if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return;
|
|
115
|
+
} finally {
|
|
116
|
+
if (o) throw n;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return a;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
function _arrayLikeToArray(r, a) {
|
|
124
|
+
(null == a || a > r.length) && (a = r.length);
|
|
125
|
+
for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
|
|
126
|
+
return n;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
function _unsupportedIterableToArray(r, a) {
|
|
130
|
+
if (r) {
|
|
131
|
+
if ("string" == typeof r) return _arrayLikeToArray(r, a);
|
|
132
|
+
var t = {}.toString.call(r).slice(8, -1);
|
|
133
|
+
return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
function _nonIterableRest() {
|
|
138
|
+
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
function _slicedToArray(r, e) {
|
|
142
|
+
return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
function getDefaultExportFromCjs (x) {
|
|
146
|
+
return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
var regeneratorRuntime$1 = {exports: {}};
|
|
150
|
+
|
|
151
|
+
var _typeof = {exports: {}};
|
|
152
|
+
|
|
153
|
+
(function (module) {
|
|
154
|
+
function _typeof(o) {
|
|
155
|
+
"@babel/helpers - typeof";
|
|
156
|
+
|
|
157
|
+
return module.exports = _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
|
|
158
|
+
return typeof o;
|
|
159
|
+
} : function (o) {
|
|
160
|
+
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
|
|
161
|
+
}, module.exports.__esModule = true, module.exports["default"] = module.exports, _typeof(o);
|
|
162
|
+
}
|
|
163
|
+
module.exports = _typeof, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
164
|
+
} (_typeof));
|
|
165
|
+
|
|
166
|
+
var _typeofExports = _typeof.exports;
|
|
167
|
+
|
|
168
|
+
(function (module) {
|
|
169
|
+
var _typeof = _typeofExports["default"];
|
|
170
|
+
function _regeneratorRuntime() {
|
|
171
|
+
module.exports = _regeneratorRuntime = function _regeneratorRuntime() {
|
|
172
|
+
return e;
|
|
173
|
+
}, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
174
|
+
var t,
|
|
175
|
+
e = {},
|
|
176
|
+
r = Object.prototype,
|
|
177
|
+
n = r.hasOwnProperty,
|
|
178
|
+
o = Object.defineProperty || function (t, e, r) {
|
|
179
|
+
t[e] = r.value;
|
|
180
|
+
},
|
|
181
|
+
i = "function" == typeof Symbol ? Symbol : {},
|
|
182
|
+
a = i.iterator || "@@iterator",
|
|
183
|
+
c = i.asyncIterator || "@@asyncIterator",
|
|
184
|
+
u = i.toStringTag || "@@toStringTag";
|
|
185
|
+
function define(t, e, r) {
|
|
186
|
+
return Object.defineProperty(t, e, {
|
|
187
|
+
value: r,
|
|
188
|
+
enumerable: !0,
|
|
189
|
+
configurable: !0,
|
|
190
|
+
writable: !0
|
|
191
|
+
}), t[e];
|
|
192
|
+
}
|
|
193
|
+
try {
|
|
194
|
+
define({}, "");
|
|
195
|
+
} catch (t) {
|
|
196
|
+
define = function define(t, e, r) {
|
|
197
|
+
return t[e] = r;
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
function wrap(t, e, r, n) {
|
|
201
|
+
var i = e && e.prototype instanceof Generator ? e : Generator,
|
|
202
|
+
a = Object.create(i.prototype),
|
|
203
|
+
c = new Context(n || []);
|
|
204
|
+
return o(a, "_invoke", {
|
|
205
|
+
value: makeInvokeMethod(t, r, c)
|
|
206
|
+
}), a;
|
|
207
|
+
}
|
|
208
|
+
function tryCatch(t, e, r) {
|
|
209
|
+
try {
|
|
210
|
+
return {
|
|
211
|
+
type: "normal",
|
|
212
|
+
arg: t.call(e, r)
|
|
213
|
+
};
|
|
214
|
+
} catch (t) {
|
|
215
|
+
return {
|
|
216
|
+
type: "throw",
|
|
217
|
+
arg: t
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
e.wrap = wrap;
|
|
222
|
+
var h = "suspendedStart",
|
|
223
|
+
l = "suspendedYield",
|
|
224
|
+
f = "executing",
|
|
225
|
+
s = "completed",
|
|
226
|
+
y = {};
|
|
227
|
+
function Generator() {}
|
|
228
|
+
function GeneratorFunction() {}
|
|
229
|
+
function GeneratorFunctionPrototype() {}
|
|
230
|
+
var p = {};
|
|
231
|
+
define(p, a, function () {
|
|
232
|
+
return this;
|
|
233
|
+
});
|
|
234
|
+
var d = Object.getPrototypeOf,
|
|
235
|
+
v = d && d(d(values([])));
|
|
236
|
+
v && v !== r && n.call(v, a) && (p = v);
|
|
237
|
+
var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p);
|
|
238
|
+
function defineIteratorMethods(t) {
|
|
239
|
+
["next", "throw", "return"].forEach(function (e) {
|
|
240
|
+
define(t, e, function (t) {
|
|
241
|
+
return this._invoke(e, t);
|
|
242
|
+
});
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
function AsyncIterator(t, e) {
|
|
246
|
+
function invoke(r, o, i, a) {
|
|
247
|
+
var c = tryCatch(t[r], t, o);
|
|
248
|
+
if ("throw" !== c.type) {
|
|
249
|
+
var u = c.arg,
|
|
250
|
+
h = u.value;
|
|
251
|
+
return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) {
|
|
252
|
+
invoke("next", t, i, a);
|
|
253
|
+
}, function (t) {
|
|
254
|
+
invoke("throw", t, i, a);
|
|
255
|
+
}) : e.resolve(h).then(function (t) {
|
|
256
|
+
u.value = t, i(u);
|
|
257
|
+
}, function (t) {
|
|
258
|
+
return invoke("throw", t, i, a);
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
a(c.arg);
|
|
262
|
+
}
|
|
263
|
+
var r;
|
|
264
|
+
o(this, "_invoke", {
|
|
265
|
+
value: function value(t, n) {
|
|
266
|
+
function callInvokeWithMethodAndArg() {
|
|
267
|
+
return new e(function (e, r) {
|
|
268
|
+
invoke(t, n, e, r);
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();
|
|
272
|
+
}
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
function makeInvokeMethod(e, r, n) {
|
|
276
|
+
var o = h;
|
|
277
|
+
return function (i, a) {
|
|
278
|
+
if (o === f) throw Error("Generator is already running");
|
|
279
|
+
if (o === s) {
|
|
280
|
+
if ("throw" === i) throw a;
|
|
281
|
+
return {
|
|
282
|
+
value: t,
|
|
283
|
+
done: !0
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
for (n.method = i, n.arg = a;;) {
|
|
287
|
+
var c = n.delegate;
|
|
288
|
+
if (c) {
|
|
289
|
+
var u = maybeInvokeDelegate(c, n);
|
|
290
|
+
if (u) {
|
|
291
|
+
if (u === y) continue;
|
|
292
|
+
return u;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) {
|
|
296
|
+
if (o === h) throw o = s, n.arg;
|
|
297
|
+
n.dispatchException(n.arg);
|
|
298
|
+
} else "return" === n.method && n.abrupt("return", n.arg);
|
|
299
|
+
o = f;
|
|
300
|
+
var p = tryCatch(e, r, n);
|
|
301
|
+
if ("normal" === p.type) {
|
|
302
|
+
if (o = n.done ? s : l, p.arg === y) continue;
|
|
303
|
+
return {
|
|
304
|
+
value: p.arg,
|
|
305
|
+
done: n.done
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
"throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg);
|
|
309
|
+
}
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
function maybeInvokeDelegate(e, r) {
|
|
313
|
+
var n = r.method,
|
|
314
|
+
o = e.iterator[n];
|
|
315
|
+
if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y;
|
|
316
|
+
var i = tryCatch(o, e.iterator, r.arg);
|
|
317
|
+
if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y;
|
|
318
|
+
var a = i.arg;
|
|
319
|
+
return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y);
|
|
320
|
+
}
|
|
321
|
+
function pushTryEntry(t) {
|
|
322
|
+
var e = {
|
|
323
|
+
tryLoc: t[0]
|
|
324
|
+
};
|
|
325
|
+
1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e);
|
|
326
|
+
}
|
|
327
|
+
function resetTryEntry(t) {
|
|
328
|
+
var e = t.completion || {};
|
|
329
|
+
e.type = "normal", delete e.arg, t.completion = e;
|
|
330
|
+
}
|
|
331
|
+
function Context(t) {
|
|
332
|
+
this.tryEntries = [{
|
|
333
|
+
tryLoc: "root"
|
|
334
|
+
}], t.forEach(pushTryEntry, this), this.reset(!0);
|
|
335
|
+
}
|
|
336
|
+
function values(e) {
|
|
337
|
+
if (e || "" === e) {
|
|
338
|
+
var r = e[a];
|
|
339
|
+
if (r) return r.call(e);
|
|
340
|
+
if ("function" == typeof e.next) return e;
|
|
341
|
+
if (!isNaN(e.length)) {
|
|
342
|
+
var o = -1,
|
|
343
|
+
i = function next() {
|
|
344
|
+
for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next;
|
|
345
|
+
return next.value = t, next.done = !0, next;
|
|
346
|
+
};
|
|
347
|
+
return i.next = i;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
throw new TypeError(_typeof(e) + " is not iterable");
|
|
351
|
+
}
|
|
352
|
+
return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", {
|
|
353
|
+
value: GeneratorFunctionPrototype,
|
|
354
|
+
configurable: !0
|
|
355
|
+
}), o(GeneratorFunctionPrototype, "constructor", {
|
|
356
|
+
value: GeneratorFunction,
|
|
357
|
+
configurable: !0
|
|
358
|
+
}), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) {
|
|
359
|
+
var e = "function" == typeof t && t.constructor;
|
|
360
|
+
return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name));
|
|
361
|
+
}, e.mark = function (t) {
|
|
362
|
+
return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t;
|
|
363
|
+
}, e.awrap = function (t) {
|
|
364
|
+
return {
|
|
365
|
+
__await: t
|
|
366
|
+
};
|
|
367
|
+
}, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () {
|
|
368
|
+
return this;
|
|
369
|
+
}), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) {
|
|
370
|
+
void 0 === i && (i = Promise);
|
|
371
|
+
var a = new AsyncIterator(wrap(t, r, n, o), i);
|
|
372
|
+
return e.isGeneratorFunction(r) ? a : a.next().then(function (t) {
|
|
373
|
+
return t.done ? t.value : a.next();
|
|
374
|
+
});
|
|
375
|
+
}, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () {
|
|
376
|
+
return this;
|
|
377
|
+
}), define(g, "toString", function () {
|
|
378
|
+
return "[object Generator]";
|
|
379
|
+
}), e.keys = function (t) {
|
|
380
|
+
var e = Object(t),
|
|
381
|
+
r = [];
|
|
382
|
+
for (var n in e) r.push(n);
|
|
383
|
+
return r.reverse(), function next() {
|
|
384
|
+
for (; r.length;) {
|
|
385
|
+
var t = r.pop();
|
|
386
|
+
if (t in e) return next.value = t, next.done = !1, next;
|
|
387
|
+
}
|
|
388
|
+
return next.done = !0, next;
|
|
389
|
+
};
|
|
390
|
+
}, e.values = values, Context.prototype = {
|
|
391
|
+
constructor: Context,
|
|
392
|
+
reset: function reset(e) {
|
|
393
|
+
if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t);
|
|
394
|
+
},
|
|
395
|
+
stop: function stop() {
|
|
396
|
+
this.done = !0;
|
|
397
|
+
var t = this.tryEntries[0].completion;
|
|
398
|
+
if ("throw" === t.type) throw t.arg;
|
|
399
|
+
return this.rval;
|
|
400
|
+
},
|
|
401
|
+
dispatchException: function dispatchException(e) {
|
|
402
|
+
if (this.done) throw e;
|
|
403
|
+
var r = this;
|
|
404
|
+
function handle(n, o) {
|
|
405
|
+
return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o;
|
|
406
|
+
}
|
|
407
|
+
for (var o = this.tryEntries.length - 1; o >= 0; --o) {
|
|
408
|
+
var i = this.tryEntries[o],
|
|
409
|
+
a = i.completion;
|
|
410
|
+
if ("root" === i.tryLoc) return handle("end");
|
|
411
|
+
if (i.tryLoc <= this.prev) {
|
|
412
|
+
var c = n.call(i, "catchLoc"),
|
|
413
|
+
u = n.call(i, "finallyLoc");
|
|
414
|
+
if (c && u) {
|
|
415
|
+
if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);
|
|
416
|
+
if (this.prev < i.finallyLoc) return handle(i.finallyLoc);
|
|
417
|
+
} else if (c) {
|
|
418
|
+
if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);
|
|
419
|
+
} else {
|
|
420
|
+
if (!u) throw Error("try statement without catch or finally");
|
|
421
|
+
if (this.prev < i.finallyLoc) return handle(i.finallyLoc);
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
},
|
|
426
|
+
abrupt: function abrupt(t, e) {
|
|
427
|
+
for (var r = this.tryEntries.length - 1; r >= 0; --r) {
|
|
428
|
+
var o = this.tryEntries[r];
|
|
429
|
+
if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) {
|
|
430
|
+
var i = o;
|
|
431
|
+
break;
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null);
|
|
435
|
+
var a = i ? i.completion : {};
|
|
436
|
+
return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a);
|
|
437
|
+
},
|
|
438
|
+
complete: function complete(t, e) {
|
|
439
|
+
if ("throw" === t.type) throw t.arg;
|
|
440
|
+
return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y;
|
|
441
|
+
},
|
|
442
|
+
finish: function finish(t) {
|
|
443
|
+
for (var e = this.tryEntries.length - 1; e >= 0; --e) {
|
|
444
|
+
var r = this.tryEntries[e];
|
|
445
|
+
if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y;
|
|
446
|
+
}
|
|
447
|
+
},
|
|
448
|
+
"catch": function _catch(t) {
|
|
449
|
+
for (var e = this.tryEntries.length - 1; e >= 0; --e) {
|
|
450
|
+
var r = this.tryEntries[e];
|
|
451
|
+
if (r.tryLoc === t) {
|
|
452
|
+
var n = r.completion;
|
|
453
|
+
if ("throw" === n.type) {
|
|
454
|
+
var o = n.arg;
|
|
455
|
+
resetTryEntry(r);
|
|
456
|
+
}
|
|
457
|
+
return o;
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
throw Error("illegal catch attempt");
|
|
461
|
+
},
|
|
462
|
+
delegateYield: function delegateYield(e, r, n) {
|
|
463
|
+
return this.delegate = {
|
|
464
|
+
iterator: values(e),
|
|
465
|
+
resultName: r,
|
|
466
|
+
nextLoc: n
|
|
467
|
+
}, "next" === this.method && (this.arg = t), y;
|
|
468
|
+
}
|
|
469
|
+
}, e;
|
|
470
|
+
}
|
|
471
|
+
module.exports = _regeneratorRuntime, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
472
|
+
} (regeneratorRuntime$1));
|
|
473
|
+
|
|
474
|
+
var regeneratorRuntimeExports = regeneratorRuntime$1.exports;
|
|
475
|
+
|
|
476
|
+
// TODO(Babel 8): Remove this file.
|
|
477
|
+
|
|
478
|
+
var runtime = regeneratorRuntimeExports();
|
|
479
|
+
var regenerator = runtime;
|
|
480
|
+
|
|
481
|
+
// Copied from https://github.com/facebook/regenerator/blob/main/packages/runtime/runtime.js#L736=
|
|
482
|
+
try {
|
|
483
|
+
regeneratorRuntime = runtime;
|
|
484
|
+
} catch (accidentalStrictMode) {
|
|
485
|
+
if (typeof globalThis === "object") {
|
|
486
|
+
globalThis.regeneratorRuntime = runtime;
|
|
487
|
+
} else {
|
|
488
|
+
Function("r", "regeneratorRuntime = r")(runtime);
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
var _regeneratorRuntime = /*@__PURE__*/getDefaultExportFromCjs(regenerator);
|
|
493
|
+
|
|
494
|
+
var ONE_SECOND_IN_MILLISECONDS = 1000;
|
|
495
|
+
var ONE_MINUTE_IN_MILLISECONDS = 60 * ONE_SECOND_IN_MILLISECONDS;
|
|
496
|
+
var ONE_HOUR_IN_MILLISECONDS = 60 * ONE_MINUTE_IN_MILLISECONDS;
|
|
497
|
+
var UPLOAD_STATUS = {
|
|
498
|
+
uploading: "uploading",
|
|
499
|
+
completed: "completed",
|
|
500
|
+
aborting: "aborting",
|
|
501
|
+
insufficient_data: "insufficient_data",
|
|
502
|
+
error: "error"
|
|
503
|
+
};
|
|
504
|
+
var TOTAL_RETRIES = 15;
|
|
505
|
+
var INITIAL_RETRY_DELAY = 4000;
|
|
506
|
+
var MAX_RETRY_DELAY = 16000;
|
|
507
|
+
var DEFAULT_RETRY_CONFIG = {
|
|
508
|
+
retries: TOTAL_RETRIES,
|
|
509
|
+
retryDelay: INITIAL_RETRY_DELAY,
|
|
510
|
+
retryableStatuses: []
|
|
511
|
+
};
|
|
512
|
+
var HAS_CHROME_NAMESPACE = (typeof chrome === "undefined" ? "undefined" : _typeof$1(chrome)) === "object";
|
|
513
|
+
var IS_EXTENSION = HAS_CHROME_NAMESPACE && isNotNil(chrome.extension);
|
|
514
|
+
var IS_SAFARI = platform.name === "Safari";
|
|
515
|
+
|
|
516
|
+
// Firefox refuses to start a MediaRecorder on a stream that has both audio and
|
|
517
|
+
// video tracks unless the MIME string declares the audio codec too. Chromium
|
|
518
|
+
// and Safari accept the video-only form and silently pick Opus/AAC. We keep
|
|
519
|
+
// both variants and always prefer the codec-complete ones in
|
|
520
|
+
// getSupportedMimeType so a single code path works across browsers.
|
|
521
|
+
var MIME_TYPE = {
|
|
522
|
+
mp4: "video/mp4",
|
|
523
|
+
webmH264Opus: "video/webm;codecs=h264,opus",
|
|
524
|
+
webmH264: "video/webm;codecs=h264",
|
|
525
|
+
webmVp9Opus: "video/webm;codecs=vp9,opus",
|
|
526
|
+
webmVp9: "video/webm;codecs=vp9",
|
|
527
|
+
webmVp8Opus: "video/webm;codecs=vp8,opus",
|
|
528
|
+
webmVp8: "video/webm;codecs=vp8",
|
|
529
|
+
webm: "video/webm"
|
|
530
|
+
};
|
|
531
|
+
|
|
532
|
+
// Picks the best MediaRecorder MIME type the current browser supports.
|
|
533
|
+
// Chromium produces H.264-in-WebM, Safari only produces MP4, and Firefox
|
|
534
|
+
// produces VP9/VP8-in-WebM. Returns null if none of the candidates are
|
|
535
|
+
// supported so callers can surface an "unsupported browser" state.
|
|
536
|
+
var getSupportedMimeType = function getSupportedMimeType() {
|
|
537
|
+
var _candidates$find;
|
|
538
|
+
if (typeof MediaRecorder === "undefined") return null;
|
|
539
|
+
|
|
540
|
+
// Safari only exposes a working MediaRecorder for MP4.
|
|
541
|
+
if (IS_SAFARI && MediaRecorder.isTypeSupported(MIME_TYPE.mp4)) {
|
|
542
|
+
return MIME_TYPE.mp4;
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
// Prefer types that declare the audio codec explicitly. Firefox requires
|
|
546
|
+
// this when the MediaStream has both audio and video tracks; Chromium and
|
|
547
|
+
// Safari are happy with either form.
|
|
548
|
+
var candidates = [MIME_TYPE.webmH264Opus, MIME_TYPE.webmVp9Opus, MIME_TYPE.webmVp8Opus, MIME_TYPE.webmH264, MIME_TYPE.webmVp9, MIME_TYPE.webmVp8, MIME_TYPE.webm, MIME_TYPE.mp4];
|
|
549
|
+
return (_candidates$find = candidates.find(function (type) {
|
|
550
|
+
return MediaRecorder.isTypeSupported(type);
|
|
551
|
+
})) !== null && _candidates$find !== void 0 ? _candidates$find : null;
|
|
552
|
+
};
|
|
553
|
+
|
|
554
|
+
var createPrefixedLogger = function createPrefixedLogger(prefix) {
|
|
555
|
+
return {
|
|
556
|
+
info: function info() {
|
|
557
|
+
var _logger;
|
|
558
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
559
|
+
args[_key] = arguments[_key];
|
|
560
|
+
}
|
|
561
|
+
return (_logger = logger).info.apply(_logger, [prefix].concat(args));
|
|
562
|
+
},
|
|
563
|
+
error: function error() {
|
|
564
|
+
var _logger2;
|
|
565
|
+
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
566
|
+
args[_key2] = arguments[_key2];
|
|
567
|
+
}
|
|
568
|
+
return (_logger2 = logger).error.apply(_logger2, [prefix].concat(args));
|
|
569
|
+
},
|
|
570
|
+
warn: function warn() {
|
|
571
|
+
var _logger3;
|
|
572
|
+
for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
|
|
573
|
+
args[_key3] = arguments[_key3];
|
|
574
|
+
}
|
|
575
|
+
return (_logger3 = logger).warn.apply(_logger3, [prefix].concat(args));
|
|
576
|
+
},
|
|
577
|
+
debug: function debug() {
|
|
578
|
+
var _logger4;
|
|
579
|
+
for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
|
|
580
|
+
args[_key4] = arguments[_key4];
|
|
581
|
+
}
|
|
582
|
+
return (_logger4 = logger).debug.apply(_logger4, [prefix].concat(args));
|
|
583
|
+
}
|
|
584
|
+
};
|
|
585
|
+
};
|
|
586
|
+
|
|
587
|
+
function _createClass(e, r, t) {
|
|
588
|
+
return Object.defineProperty(e, "prototype", {
|
|
589
|
+
writable: !1
|
|
590
|
+
}), e;
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
function _classCallCheck(a, n) {
|
|
594
|
+
if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function");
|
|
595
|
+
}
|
|
596
|
+
|
|
597
|
+
function _setPrototypeOf(t, e) {
|
|
598
|
+
return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {
|
|
599
|
+
return t.__proto__ = e, t;
|
|
600
|
+
}, _setPrototypeOf(t, e);
|
|
601
|
+
}
|
|
602
|
+
|
|
603
|
+
function _inherits(t, e) {
|
|
604
|
+
if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function");
|
|
605
|
+
t.prototype = Object.create(e && e.prototype, {
|
|
606
|
+
constructor: {
|
|
607
|
+
value: t,
|
|
608
|
+
writable: !0,
|
|
609
|
+
configurable: !0
|
|
610
|
+
}
|
|
611
|
+
}), Object.defineProperty(t, "prototype", {
|
|
612
|
+
writable: !1
|
|
613
|
+
}), e && _setPrototypeOf(t, e);
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
function _assertThisInitialized(e) {
|
|
617
|
+
if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
618
|
+
return e;
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
function _possibleConstructorReturn(t, e) {
|
|
622
|
+
if (e && ("object" == _typeof$1(e) || "function" == typeof e)) return e;
|
|
623
|
+
if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined");
|
|
624
|
+
return _assertThisInitialized(t);
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
function _getPrototypeOf(t) {
|
|
628
|
+
return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {
|
|
629
|
+
return t.__proto__ || Object.getPrototypeOf(t);
|
|
630
|
+
}, _getPrototypeOf(t);
|
|
631
|
+
}
|
|
632
|
+
|
|
633
|
+
function _isNativeFunction(t) {
|
|
634
|
+
try {
|
|
635
|
+
return -1 !== Function.toString.call(t).indexOf("[native code]");
|
|
636
|
+
} catch (n) {
|
|
637
|
+
return "function" == typeof t;
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
|
|
641
|
+
function _isNativeReflectConstruct$1() {
|
|
642
|
+
try {
|
|
643
|
+
var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
|
|
644
|
+
} catch (t) {}
|
|
645
|
+
return (_isNativeReflectConstruct$1 = function _isNativeReflectConstruct() {
|
|
646
|
+
return !!t;
|
|
647
|
+
})();
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
function _construct(t, e, r) {
|
|
651
|
+
if (_isNativeReflectConstruct$1()) return Reflect.construct.apply(null, arguments);
|
|
652
|
+
var o = [null];
|
|
653
|
+
o.push.apply(o, e);
|
|
654
|
+
var p = new (t.bind.apply(t, o))();
|
|
655
|
+
return r && _setPrototypeOf(p, r.prototype), p;
|
|
656
|
+
}
|
|
657
|
+
|
|
658
|
+
function _wrapNativeSuper(t) {
|
|
659
|
+
var r = "function" == typeof Map ? new Map() : void 0;
|
|
660
|
+
return _wrapNativeSuper = function _wrapNativeSuper(t) {
|
|
661
|
+
if (null === t || !_isNativeFunction(t)) return t;
|
|
662
|
+
if ("function" != typeof t) throw new TypeError("Super expression must either be null or a function");
|
|
663
|
+
if (void 0 !== r) {
|
|
664
|
+
if (r.has(t)) return r.get(t);
|
|
665
|
+
r.set(t, Wrapper);
|
|
666
|
+
}
|
|
667
|
+
function Wrapper() {
|
|
668
|
+
return _construct(t, arguments, _getPrototypeOf(this).constructor);
|
|
669
|
+
}
|
|
670
|
+
return Wrapper.prototype = Object.create(t.prototype, {
|
|
671
|
+
constructor: {
|
|
672
|
+
value: Wrapper,
|
|
673
|
+
enumerable: !1,
|
|
674
|
+
writable: !0,
|
|
675
|
+
configurable: !0
|
|
676
|
+
}
|
|
677
|
+
}), _setPrototypeOf(Wrapper, t);
|
|
678
|
+
}, _wrapNativeSuper(t);
|
|
679
|
+
}
|
|
680
|
+
|
|
681
|
+
var sleep = function sleep(delay) {
|
|
682
|
+
return new Promise(function (resolve) {
|
|
683
|
+
return setTimeout(resolve, delay);
|
|
684
|
+
});
|
|
685
|
+
};
|
|
686
|
+
var generatePublicUrl = function generatePublicUrl(recordingId) {
|
|
687
|
+
var baseURL = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : window.location.origin;
|
|
688
|
+
return "".concat(baseURL, "/watch/").concat(recordingId);
|
|
689
|
+
};
|
|
690
|
+
|
|
691
|
+
function _createSuper(t) { var r = _isNativeReflectConstruct(); return function () { var e, o = _getPrototypeOf(t); if (r) { var s = _getPrototypeOf(this).constructor; e = Reflect.construct(o, arguments, s); } else e = o.apply(this, arguments); return _possibleConstructorReturn(this, e); }; }
|
|
692
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
693
|
+
var RetryError = /*#__PURE__*/function (_Error) {
|
|
694
|
+
_inherits(RetryError, _Error);
|
|
695
|
+
var _super = _createSuper(RetryError);
|
|
696
|
+
function RetryError(message) {
|
|
697
|
+
_classCallCheck(this, RetryError);
|
|
698
|
+
return _super.call(this, message);
|
|
699
|
+
}
|
|
700
|
+
return _createClass(RetryError);
|
|
701
|
+
}( /*#__PURE__*/_wrapNativeSuper(Error));
|
|
702
|
+
var buildRetryableApi = function buildRetryableApi(apiConnector) {
|
|
703
|
+
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_RETRY_CONFIG,
|
|
704
|
+
_ref$retries = _ref.retries,
|
|
705
|
+
retries = _ref$retries === void 0 ? TOTAL_RETRIES : _ref$retries,
|
|
706
|
+
_ref$retryDelay = _ref.retryDelay,
|
|
707
|
+
retryDelay = _ref$retryDelay === void 0 ? INITIAL_RETRY_DELAY : _ref$retryDelay;
|
|
708
|
+
return /*#__PURE__*/function () {
|
|
709
|
+
var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(apiConnectorArgs) {
|
|
710
|
+
var _config$signal, _config$signal2;
|
|
711
|
+
var _apiConnectorArgs$con, config, remainingAttempts, shouldCancelRetries, _error$config, _error$response, _error$response2;
|
|
712
|
+
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
713
|
+
while (1) switch (_context.prev = _context.next) {
|
|
714
|
+
case 0:
|
|
715
|
+
_apiConnectorArgs$con = apiConnectorArgs.config, config = _apiConnectorArgs$con === void 0 ? null : _apiConnectorArgs$con; // If the signal is already aborted before we start, addEventListener("abort")
|
|
716
|
+
// will never fire — so we'd otherwise run the full retry/backoff schedule
|
|
717
|
+
// against an aborted request. Throw an axios CanceledError so callers'
|
|
718
|
+
// `axios.isCancel` checks treat this as cancellation instead of a real
|
|
719
|
+
// failure (e.g. completeUpload won't flip status to "error" while a
|
|
720
|
+
// parallel abortUpload is finishing).
|
|
721
|
+
if (!(config !== null && config !== void 0 && (_config$signal = config.signal) !== null && _config$signal !== void 0 && _config$signal.aborted)) {
|
|
722
|
+
_context.next = 3;
|
|
723
|
+
break;
|
|
724
|
+
}
|
|
725
|
+
throw new axios.CanceledError("Request cancelled");
|
|
726
|
+
case 3:
|
|
727
|
+
remainingAttempts = retries + 1;
|
|
728
|
+
shouldCancelRetries = false;
|
|
729
|
+
config === null || config === void 0 ? void 0 : (_config$signal2 = config.signal) === null || _config$signal2 === void 0 ? void 0 : _config$signal2.addEventListener("abort", function () {
|
|
730
|
+
shouldCancelRetries = true;
|
|
731
|
+
});
|
|
732
|
+
case 6:
|
|
733
|
+
if (!(remainingAttempts-- && !shouldCancelRetries)) {
|
|
734
|
+
_context.next = 30;
|
|
735
|
+
break;
|
|
736
|
+
}
|
|
737
|
+
_context.prev = 7;
|
|
738
|
+
_context.next = 10;
|
|
739
|
+
return apiConnector(apiConnectorArgs);
|
|
740
|
+
case 10:
|
|
741
|
+
return _context.abrupt("return", _context.sent);
|
|
742
|
+
case 13:
|
|
743
|
+
_context.prev = 13;
|
|
744
|
+
_context.t0 = _context["catch"](7);
|
|
745
|
+
if (!axios.isCancel(_context.t0)) {
|
|
746
|
+
_context.next = 17;
|
|
747
|
+
break;
|
|
748
|
+
}
|
|
749
|
+
throw _context.t0;
|
|
750
|
+
case 17:
|
|
751
|
+
logger.error("buildRetryableApi -> Failed to connect, remainingAttempts:", _context.t0 === null || _context.t0 === void 0 ? void 0 : (_error$config = _context.t0.config) === null || _error$config === void 0 ? void 0 : _error$config.url, (_error$response = _context.t0.response) === null || _error$response === void 0 ? void 0 : _error$response.status, remainingAttempts);
|
|
752
|
+
if (!(((_error$response2 = _context.t0.response) === null || _error$response2 === void 0 ? void 0 : _error$response2.status) !== 401 && remainingAttempts > 0)) {
|
|
753
|
+
_context.next = 27;
|
|
754
|
+
break;
|
|
755
|
+
}
|
|
756
|
+
logger.info("buildRetryableApi -> Failed to connect -> retry in:", retryDelay);
|
|
757
|
+
_context.next = 22;
|
|
758
|
+
return sleep(retryDelay);
|
|
759
|
+
case 22:
|
|
760
|
+
retryDelay = min(retryDelay * 2, MAX_RETRY_DELAY);
|
|
761
|
+
if (!shouldCancelRetries) {
|
|
762
|
+
_context.next = 25;
|
|
763
|
+
break;
|
|
764
|
+
}
|
|
765
|
+
throw _context.t0;
|
|
766
|
+
case 25:
|
|
767
|
+
_context.next = 28;
|
|
768
|
+
break;
|
|
769
|
+
case 27:
|
|
770
|
+
throw _context.t0;
|
|
771
|
+
case 28:
|
|
772
|
+
_context.next = 6;
|
|
773
|
+
break;
|
|
774
|
+
case 30:
|
|
775
|
+
throw new RetryError("Request cancelled or request retries exhausted");
|
|
776
|
+
case 31:
|
|
777
|
+
case "end":
|
|
778
|
+
return _context.stop();
|
|
779
|
+
}
|
|
780
|
+
}, _callee, null, [[7, 13]]);
|
|
781
|
+
}));
|
|
782
|
+
return function (_x) {
|
|
783
|
+
return _ref2.apply(this, arguments);
|
|
784
|
+
};
|
|
785
|
+
}();
|
|
786
|
+
};
|
|
787
|
+
|
|
788
|
+
var formatTime = function formatTime(time) {
|
|
789
|
+
return Math.floor(time).toString().padStart(2, "0");
|
|
790
|
+
};
|
|
791
|
+
var getTimeString = function getTimeString(date) {
|
|
792
|
+
var hours = formatTime(Math.floor(date / ONE_HOUR_IN_MILLISECONDS));
|
|
793
|
+
var minutes = formatTime(date % ONE_HOUR_IN_MILLISECONDS / ONE_MINUTE_IN_MILLISECONDS$1);
|
|
794
|
+
var seconds = formatTime(date % ONE_MINUTE_IN_MILLISECONDS$1 / ONE_SECOND_IN_MILLISECONDS$1);
|
|
795
|
+
if (hours > 0) {
|
|
796
|
+
return "".concat(hours, ":").concat(minutes, ":").concat(seconds);
|
|
797
|
+
}
|
|
798
|
+
return "".concat(minutes, ":").concat(seconds);
|
|
799
|
+
};
|
|
800
|
+
var downloadRecordingBlob = function downloadRecordingBlob(blob, name) {
|
|
801
|
+
var blobUrl = URL.createObjectURL(blob);
|
|
802
|
+
var linkElement = document.createElement("a");
|
|
803
|
+
linkElement.href = blobUrl;
|
|
804
|
+
linkElement.download = name;
|
|
805
|
+
document.body.appendChild(linkElement);
|
|
806
|
+
|
|
807
|
+
// Dispatch click event on the link
|
|
808
|
+
// This is necessary as link.click() does not work on the latest firefox
|
|
809
|
+
linkElement.dispatchEvent(new MouseEvent("click", {
|
|
810
|
+
bubbles: true,
|
|
811
|
+
cancelable: true,
|
|
812
|
+
view: window
|
|
813
|
+
}));
|
|
814
|
+
document.body.removeChild(linkElement);
|
|
815
|
+
URL.revokeObjectURL(blobUrl);
|
|
816
|
+
};
|
|
817
|
+
var hasRecordingDiscarded = function hasRecordingDiscarded(_ref) {
|
|
818
|
+
var recorderStatus = _ref.recorderStatus,
|
|
819
|
+
uploadStatus = _ref.uploadStatus;
|
|
820
|
+
return recorderStatus === SCREEN_RECORDER_STATUS.stopped && uploadStatus === UPLOAD_STATUS$1.aborting;
|
|
821
|
+
};
|
|
822
|
+
var getRecorderTimeLimitInHumanFormat = function getRecorderTimeLimitInHumanFormat(timeInMs) {
|
|
823
|
+
var minutes = Math.floor(timeInMs / (1000 * 60));
|
|
824
|
+
var hours = Math.floor(minutes / 60);
|
|
825
|
+
if (hours < 1) {
|
|
826
|
+
if (minutes < 1) {
|
|
827
|
+
return "".concat(Math.floor(timeInMs / ONE_SECOND_IN_MILLISECONDS$1), " seconds");
|
|
828
|
+
}
|
|
829
|
+
return "".concat(minutes, " minutes");
|
|
830
|
+
}
|
|
831
|
+
return "".concat(hours, " hours");
|
|
832
|
+
};
|
|
833
|
+
var getDeviceInfo = /*#__PURE__*/function () {
|
|
834
|
+
var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
835
|
+
var _yield$chrome$storage, _platform$os;
|
|
836
|
+
var mimeType,
|
|
837
|
+
isCameraEnabled,
|
|
838
|
+
_args = arguments;
|
|
839
|
+
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
840
|
+
while (1) switch (_context.prev = _context.next) {
|
|
841
|
+
case 0:
|
|
842
|
+
mimeType = _args.length > 0 && _args[0] !== undefined ? _args[0] : getSupportedMimeType();
|
|
843
|
+
if (!IS_EXTENSION$1) {
|
|
844
|
+
_context.next = 16;
|
|
845
|
+
break;
|
|
846
|
+
}
|
|
847
|
+
_context.next = 4;
|
|
848
|
+
return chrome.storage.local.get("isCameraOn");
|
|
849
|
+
case 4:
|
|
850
|
+
_context.t2 = _yield$chrome$storage = _context.sent;
|
|
851
|
+
_context.t1 = _context.t2 === null;
|
|
852
|
+
if (_context.t1) {
|
|
853
|
+
_context.next = 8;
|
|
854
|
+
break;
|
|
855
|
+
}
|
|
856
|
+
_context.t1 = _yield$chrome$storage === void 0;
|
|
857
|
+
case 8:
|
|
858
|
+
if (!_context.t1) {
|
|
859
|
+
_context.next = 12;
|
|
860
|
+
break;
|
|
861
|
+
}
|
|
862
|
+
_context.t3 = void 0;
|
|
863
|
+
_context.next = 13;
|
|
864
|
+
break;
|
|
865
|
+
case 12:
|
|
866
|
+
_context.t3 = _yield$chrome$storage.isCameraOn;
|
|
867
|
+
case 13:
|
|
868
|
+
_context.t0 = _context.t3;
|
|
869
|
+
_context.next = 17;
|
|
870
|
+
break;
|
|
871
|
+
case 16:
|
|
872
|
+
_context.t0 = false;
|
|
873
|
+
case 17:
|
|
874
|
+
isCameraEnabled = _context.t0;
|
|
875
|
+
return _context.abrupt("return", {
|
|
876
|
+
os: (_platform$os = platform.os) === null || _platform$os === void 0 ? void 0 : _platform$os.toString(),
|
|
877
|
+
app: IS_EXTENSION$1 ? "chrome extension v".concat(chrome.runtime.getManifest().version) : "web",
|
|
878
|
+
browser: "".concat(platform.name, " v").concat(platform.version),
|
|
879
|
+
isCameraEnabled: isCameraEnabled,
|
|
880
|
+
isMicEnabled: !!screenRecorder.audioConfiguration,
|
|
881
|
+
displaySurface: screenRecorder.displaySurface,
|
|
882
|
+
mimeType: mimeType
|
|
883
|
+
});
|
|
884
|
+
case 19:
|
|
885
|
+
case "end":
|
|
886
|
+
return _context.stop();
|
|
887
|
+
}
|
|
888
|
+
}, _callee);
|
|
889
|
+
}));
|
|
890
|
+
return function getDeviceInfo() {
|
|
891
|
+
return _ref2.apply(this, arguments);
|
|
892
|
+
};
|
|
893
|
+
}();
|
|
894
|
+
var isMp4Supported = function isMp4Supported() {
|
|
895
|
+
var mimeType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getSupportedMimeType();
|
|
896
|
+
return mimeType.includes(MIME_TYPE$1.mp4);
|
|
897
|
+
};
|
|
898
|
+
|
|
899
|
+
/**
|
|
900
|
+
* Copy a recording's public link to the clipboard while preserving Safari's
|
|
901
|
+
* transient user activation. Must be invoked synchronously inside a user
|
|
902
|
+
* gesture handler (e.g. button onClick).
|
|
903
|
+
*
|
|
904
|
+
* Safari (WebKit) refuses navigator.clipboard.write[Text] outside a user
|
|
905
|
+
* gesture, so the post-recording auto-copy cannot be done in a useEffect.
|
|
906
|
+
* Since `recording.id` is only known once the create-recording POST resolves,
|
|
907
|
+
* we keep the gesture alive across that wait by handing
|
|
908
|
+
* navigator.clipboard.write a ClipboardItem backed by a Promise<Blob>; Safari
|
|
909
|
+
* preserves the activation until the promise settles.
|
|
910
|
+
*
|
|
911
|
+
* @param {Object} params
|
|
912
|
+
* @param {React.RefObject<Promise<unknown> | null>} params.createRecordingPromise
|
|
913
|
+
* @param {React.RefObject<{ id?: string | number }>} params.recordingRef
|
|
914
|
+
* @param {React.RefObject<string>} params.baseURLRef
|
|
915
|
+
* @param {string} params.successMessage Toastr message shown on success.
|
|
916
|
+
*/
|
|
917
|
+
var copyRecordingLinkToClipboardOnStop = function copyRecordingLinkToClipboardOnStop(_ref3) {
|
|
918
|
+
var _navigator$clipboard;
|
|
919
|
+
var createRecordingPromise = _ref3.createRecordingPromise,
|
|
920
|
+
recordingRef = _ref3.recordingRef,
|
|
921
|
+
baseURLRef = _ref3.baseURLRef,
|
|
922
|
+
successMessage = _ref3.successMessage;
|
|
923
|
+
var resolveLink = /*#__PURE__*/function () {
|
|
924
|
+
var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
|
|
925
|
+
var _recordingRef$current;
|
|
926
|
+
var recordingId, baseURL;
|
|
927
|
+
return _regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
928
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
929
|
+
case 0:
|
|
930
|
+
if (!(createRecordingPromise !== null && createRecordingPromise !== void 0 && createRecordingPromise.current)) {
|
|
931
|
+
_context2.next = 3;
|
|
932
|
+
break;
|
|
933
|
+
}
|
|
934
|
+
_context2.next = 3;
|
|
935
|
+
return createRecordingPromise.current;
|
|
936
|
+
case 3:
|
|
937
|
+
recordingId = recordingRef === null || recordingRef === void 0 ? void 0 : (_recordingRef$current = recordingRef.current) === null || _recordingRef$current === void 0 ? void 0 : _recordingRef$current.id;
|
|
938
|
+
baseURL = baseURLRef === null || baseURLRef === void 0 ? void 0 : baseURLRef.current;
|
|
939
|
+
if (!(!recordingId || !baseURL)) {
|
|
940
|
+
_context2.next = 7;
|
|
941
|
+
break;
|
|
942
|
+
}
|
|
943
|
+
throw new Error("Recording id or base URL unavailable");
|
|
944
|
+
case 7:
|
|
945
|
+
return _context2.abrupt("return", generatePublicUrl(recordingId, baseURL));
|
|
946
|
+
case 8:
|
|
947
|
+
case "end":
|
|
948
|
+
return _context2.stop();
|
|
949
|
+
}
|
|
950
|
+
}, _callee2);
|
|
951
|
+
}));
|
|
952
|
+
return function resolveLink() {
|
|
953
|
+
return _ref4.apply(this, arguments);
|
|
954
|
+
};
|
|
955
|
+
}();
|
|
956
|
+
if (typeof window.ClipboardItem === "function" && (_navigator$clipboard = navigator.clipboard) !== null && _navigator$clipboard !== void 0 && _navigator$clipboard.write) {
|
|
957
|
+
var linkBlobPromise = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
|
|
958
|
+
return _regeneratorRuntime.wrap(function _callee3$(_context3) {
|
|
959
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
960
|
+
case 0:
|
|
961
|
+
_context3.t0 = Blob;
|
|
962
|
+
_context3.next = 3;
|
|
963
|
+
return resolveLink();
|
|
964
|
+
case 3:
|
|
965
|
+
_context3.t1 = _context3.sent;
|
|
966
|
+
_context3.t2 = [_context3.t1];
|
|
967
|
+
_context3.t3 = {
|
|
968
|
+
type: "text/plain"
|
|
969
|
+
};
|
|
970
|
+
return _context3.abrupt("return", new _context3.t0(_context3.t2, _context3.t3));
|
|
971
|
+
case 7:
|
|
972
|
+
case "end":
|
|
973
|
+
return _context3.stop();
|
|
974
|
+
}
|
|
975
|
+
}, _callee3);
|
|
976
|
+
}))();
|
|
977
|
+
|
|
978
|
+
// Synchronously initiate clipboard.write so Safari preserves the user
|
|
979
|
+
// activation across the wait for linkBlobPromise.
|
|
980
|
+
var writePromise = navigator.clipboard.write([new ClipboardItem({
|
|
981
|
+
"text/plain": linkBlobPromise
|
|
982
|
+
})]);
|
|
983
|
+
_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
|
|
984
|
+
return _regeneratorRuntime.wrap(function _callee4$(_context4) {
|
|
985
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
986
|
+
case 0:
|
|
987
|
+
_context4.prev = 0;
|
|
988
|
+
_context4.next = 3;
|
|
989
|
+
return writePromise;
|
|
990
|
+
case 3:
|
|
991
|
+
Toastr.success(successMessage);
|
|
992
|
+
_context4.next = 8;
|
|
993
|
+
break;
|
|
994
|
+
case 6:
|
|
995
|
+
_context4.prev = 6;
|
|
996
|
+
_context4.t0 = _context4["catch"](0);
|
|
997
|
+
case 8:
|
|
998
|
+
case "end":
|
|
999
|
+
return _context4.stop();
|
|
1000
|
+
}
|
|
1001
|
+
}, _callee4, null, [[0, 6]]);
|
|
1002
|
+
}))();
|
|
1003
|
+
return;
|
|
1004
|
+
}
|
|
1005
|
+
|
|
1006
|
+
// Legacy fallback for browsers without ClipboardItem (e.g. Firefox < 127).
|
|
1007
|
+
// These browsers don't enforce Safari's strict gesture requirement, so a
|
|
1008
|
+
// deferred async write is acceptable. copyToClipboard handles its own
|
|
1009
|
+
// success toastr and falls back to document.execCommand internally.
|
|
1010
|
+
_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee5() {
|
|
1011
|
+
var link;
|
|
1012
|
+
return _regeneratorRuntime.wrap(function _callee5$(_context5) {
|
|
1013
|
+
while (1) switch (_context5.prev = _context5.next) {
|
|
1014
|
+
case 0:
|
|
1015
|
+
_context5.prev = 0;
|
|
1016
|
+
_context5.next = 3;
|
|
1017
|
+
return resolveLink();
|
|
1018
|
+
case 3:
|
|
1019
|
+
link = _context5.sent;
|
|
1020
|
+
_context5.next = 6;
|
|
1021
|
+
return copyToClipboard(link, {
|
|
1022
|
+
message: successMessage
|
|
1023
|
+
});
|
|
1024
|
+
case 6:
|
|
1025
|
+
_context5.next = 10;
|
|
1026
|
+
break;
|
|
1027
|
+
case 8:
|
|
1028
|
+
_context5.prev = 8;
|
|
1029
|
+
_context5.t0 = _context5["catch"](0);
|
|
1030
|
+
case 10:
|
|
1031
|
+
case "end":
|
|
1032
|
+
return _context5.stop();
|
|
1033
|
+
}
|
|
1034
|
+
}, _callee5, null, [[0, 8]]);
|
|
1035
|
+
}))();
|
|
1036
|
+
};
|
|
1037
|
+
|
|
1038
|
+
function ownKeys$2(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
1039
|
+
function _objectSpread$2(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$2(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$2(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
1040
|
+
var baseUrl = "/api/v1/recordings";
|
|
1041
|
+
var create = function create() {
|
|
1042
|
+
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
|
1043
|
+
payload = _ref.payload,
|
|
1044
|
+
config = _ref.config;
|
|
1045
|
+
return axios.post(baseUrl, {
|
|
1046
|
+
recording: _objectSpread$2(_objectSpread$2({}, payload), {}, {
|
|
1047
|
+
isMp4: isMp4Supported(payload.deviceInfo.mimeType)
|
|
1048
|
+
})
|
|
1049
|
+
}, config);
|
|
1050
|
+
};
|
|
1051
|
+
var retryableCreate = buildRetryableApi(create);
|
|
1052
|
+
var recordingsApi = {
|
|
1053
|
+
create: retryableCreate
|
|
1054
|
+
};
|
|
1055
|
+
|
|
1056
|
+
function ownKeys$1(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
1057
|
+
function _objectSpread$1(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
1058
|
+
var useCreateRecording = function useCreateRecording(options) {
|
|
1059
|
+
return useMutation(_objectSpread$1({
|
|
1060
|
+
mutationFn: function mutationFn(payload) {
|
|
1061
|
+
return recordingsApi.create({
|
|
1062
|
+
payload: payload
|
|
1063
|
+
});
|
|
1064
|
+
}
|
|
1065
|
+
}, options));
|
|
1066
|
+
};
|
|
1067
|
+
|
|
1068
|
+
var AbortUpload = withT(function (_ref) {
|
|
1069
|
+
var t = _ref.t;
|
|
1070
|
+
return /*#__PURE__*/jsx("div", {
|
|
1071
|
+
className: "flex h-screen w-full flex-col items-center justify-center",
|
|
1072
|
+
children: /*#__PURE__*/jsx("div", {
|
|
1073
|
+
className: "flex h-full w-full flex-col items-center justify-start py-10 xl:py-14 2xl:py-20",
|
|
1074
|
+
children: /*#__PURE__*/jsxs("div", {
|
|
1075
|
+
className: "w-full space-y-2 text-center",
|
|
1076
|
+
children: [/*#__PURE__*/jsxs(Typography, {
|
|
1077
|
+
className: "select-none",
|
|
1078
|
+
"data-testid": "recorder-discarding-recording-message",
|
|
1079
|
+
variant: "h2",
|
|
1080
|
+
children: [t("neetoMediaRecorder.record.discardingVideo"), /*#__PURE__*/jsx(Spinner, {
|
|
1081
|
+
className: "ml-3"
|
|
1082
|
+
})]
|
|
1083
|
+
}), /*#__PURE__*/jsx(Typography, {
|
|
1084
|
+
className: "select-none",
|
|
1085
|
+
"data-testid": "recorder-do-not-leave-page-message",
|
|
1086
|
+
children: t("neetoMediaRecorder.record.doNotLeaveThePage")
|
|
1087
|
+
})]
|
|
1088
|
+
})
|
|
1089
|
+
})
|
|
1090
|
+
});
|
|
1091
|
+
});
|
|
1092
|
+
|
|
1093
|
+
var AllowMicAccess = function AllowMicAccess() {
|
|
1094
|
+
return /*#__PURE__*/jsxs("svg", {
|
|
1095
|
+
fill: "none",
|
|
1096
|
+
height: "255",
|
|
1097
|
+
viewBox: "0 0 400 255",
|
|
1098
|
+
width: "400",
|
|
1099
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
1100
|
+
xmlnsXlink: "http://www.w3.org/1999/xlink",
|
|
1101
|
+
children: [/*#__PURE__*/jsxs("g", {
|
|
1102
|
+
clipPath: "url(#clip0_5_55)",
|
|
1103
|
+
children: [/*#__PURE__*/jsx("rect", {
|
|
1104
|
+
fill: "#FBFBFB",
|
|
1105
|
+
height: "253.968",
|
|
1106
|
+
rx: "15.873",
|
|
1107
|
+
width: "400",
|
|
1108
|
+
y: "0.286"
|
|
1109
|
+
}), /*#__PURE__*/jsxs("g", {
|
|
1110
|
+
clipPath: "url(#clip1_5_55)",
|
|
1111
|
+
children: [/*#__PURE__*/jsx("mask", {
|
|
1112
|
+
fill: "#fff",
|
|
1113
|
+
id: "path-2-inside-1_5_55",
|
|
1114
|
+
children: /*#__PURE__*/jsx("path", {
|
|
1115
|
+
d: "M0 28.857h346.032c14.026 0 25.397 11.37 25.397 25.397v200H0V28.857z"
|
|
1116
|
+
})
|
|
1117
|
+
}), /*#__PURE__*/jsx("path", {
|
|
1118
|
+
d: "M0 28.857h346.032c14.026 0 25.397 11.37 25.397 25.397v200H0V28.857z",
|
|
1119
|
+
fill: "#FBFBFB"
|
|
1120
|
+
}), /*#__PURE__*/jsx("path", {
|
|
1121
|
+
d: "M0 28.857H371.429V92.34899999999999H0z",
|
|
1122
|
+
fill: "#DFE1E6"
|
|
1123
|
+
}), /*#__PURE__*/jsx("path", {
|
|
1124
|
+
d: "M0 0H371.429V115.873H0z",
|
|
1125
|
+
fill: "#F1F3F4",
|
|
1126
|
+
transform: "translate(0 92.35)"
|
|
1127
|
+
}), /*#__PURE__*/jsx("path", {
|
|
1128
|
+
d: "M0 108.222h202.381c23.231 0 42.063 18.833 42.063 42.064s-18.832 42.063-42.063 42.063H0v-84.127z",
|
|
1129
|
+
fill: "#fff"
|
|
1130
|
+
}), /*#__PURE__*/jsx("path", {
|
|
1131
|
+
d: "M180.714 157.151l5-3.016 5 3.055-1.309-5.714 4.405-3.809-5.794-.516-2.302-5.397-2.301 5.357-5.794.516 4.405 3.849-1.31 5.675zm-4.801 6.627l2.579-11.151-8.651-7.5 11.429-.992 4.444-10.516 4.445 10.516 11.428.992-8.65 7.5 2.579 11.151-9.802-5.913-9.801 5.913z",
|
|
1132
|
+
fill: "#626365"
|
|
1133
|
+
}), /*#__PURE__*/jsx("path", {
|
|
1134
|
+
d: "M279.365 124.095H330.159V174.889H279.365z",
|
|
1135
|
+
fill: "url(#pattern0_5_55)",
|
|
1136
|
+
opacity: "0.5"
|
|
1137
|
+
}), /*#__PURE__*/jsx("path", {
|
|
1138
|
+
d: "M122.047 115.246L122.047 82.963",
|
|
1139
|
+
stroke: "#4558F9",
|
|
1140
|
+
strokeWidth: "1.575"
|
|
1141
|
+
}), /*#__PURE__*/jsx("circle", {
|
|
1142
|
+
cx: "122.047",
|
|
1143
|
+
cy: "121.546",
|
|
1144
|
+
fill: "#4558F9",
|
|
1145
|
+
r: "6.299"
|
|
1146
|
+
}), /*#__PURE__*/jsx("circle", {
|
|
1147
|
+
cx: "122.047",
|
|
1148
|
+
cy: "121.546",
|
|
1149
|
+
r: "7.48",
|
|
1150
|
+
stroke: "#4558F9",
|
|
1151
|
+
strokeOpacity: "0.27",
|
|
1152
|
+
strokeWidth: "2.362"
|
|
1153
|
+
}), /*#__PURE__*/jsx("path", {
|
|
1154
|
+
d: "M44.403 67.892h-2.2l4.945-13.744h2.396l4.946 13.744h-2.202l-3.885-11.247h-.108l-3.892 11.247zm.37-5.382h7.14v1.745h-7.14V62.51zm13.547-8.362v13.744h-2.007V54.148h2.007zm4.706 0v13.744h-2.007V54.148h2.007zM70.067 68.1c-.966 0-1.81-.221-2.53-.664-.72-.443-1.28-1.063-1.678-1.86-.398-.796-.597-1.726-.597-2.79 0-1.07.2-2.005.597-2.806.398-.8.958-1.423 1.678-1.866.72-.442 1.564-.664 2.53-.664.966 0 1.81.221 2.53.664.72.443 1.28 1.065 1.678 1.866.398.8.597 1.736.597 2.805 0 1.065-.2 1.995-.597 2.792-.399.796-.958 1.416-1.678 1.859-.72.443-1.564.664-2.53.664zm.007-1.684c.626 0 1.145-.166 1.557-.497.411-.331.715-.772.912-1.322.202-.55.302-1.156.302-1.819 0-.657-.1-1.261-.302-1.811-.197-.555-.5-1-.912-1.336-.412-.336-.93-.503-1.557-.503-.631 0-1.154.167-1.57.503-.412.336-.719.78-.92 1.336a5.346 5.346 0 00-.295 1.811c0 .663.098 1.269.295 1.819.201.55.508.991.92 1.322.415.331.939.497 1.57.497zm8.959 1.476l-3.034-10.308h2.074l2.02 7.57h.1l2.027-7.57h2.074l2.013 7.536h.1l2.007-7.536h2.074l-3.027 10.308h-2.046L83.32 60.45h-.154l-2.094 7.442h-2.04zm21.36.228c-.653 0-1.244-.12-1.772-.362a2.985 2.985 0 01-1.254-1.067c-.305-.466-.457-1.036-.457-1.712 0-.581.112-1.06.336-1.436.224-.375.526-.673.906-.892a4.73 4.73 0 011.275-.497c.47-.112.948-.197 1.436-.255l1.503-.174c.385-.05.665-.128.839-.235.174-.108.262-.282.262-.523v-.047c0-.587-.166-1.04-.497-1.363-.326-.322-.814-.483-1.463-.483-.675 0-1.208.15-1.597.45-.385.295-.651.624-.799.986l-1.885-.43c.223-.626.55-1.131.98-1.516.433-.39.932-.671 1.496-.846a5.843 5.843 0 011.778-.268c.412 0 .848.05 1.309.148.465.094.899.268 1.302.523.407.255.74.62 1 1.094.259.47.389 1.08.389 1.832v6.845h-1.96v-1.41h-.08c-.13.26-.324.515-.584.766a3.1 3.1 0 01-1 .624c-.407.165-.895.248-1.463.248zm.436-1.61c.555 0 1.029-.11 1.423-.33.398-.219.7-.505.906-.858.21-.358.315-.74.315-1.148v-1.329c-.071.072-.21.14-.416.202-.201.058-.431.11-.691.154-.259.04-.512.078-.758.114a90.22 90.22 0 00-.618.08c-.389.05-.744.133-1.067.25a1.832 1.832 0 00-.765.502c-.188.215-.282.501-.282.86 0 .496.184.872.55 1.127.368.25.835.376 1.403.376zm11.665 1.59c-.997 0-1.856-.226-2.577-.678a4.486 4.486 0 01-1.65-1.885c-.385-.801-.578-1.718-.578-2.752 0-1.047.197-1.97.591-2.771.394-.806.948-1.434 1.664-1.886.716-.452 1.559-.678 2.53-.678.783 0 1.481.145 2.094.436a3.756 3.756 0 011.483 1.208c.38.52.606 1.125.678 1.819h-1.953a2.335 2.335 0 00-.738-1.248c-.38-.35-.89-.524-1.53-.524-.559 0-1.049.148-1.47.443-.416.29-.74.707-.973 1.248-.233.537-.349 1.172-.349 1.906 0 .752.114 1.4.342 1.946.229.546.551.969.967 1.269.42.3.915.45 1.483.45.38 0 .725-.07 1.033-.209.313-.143.575-.347.785-.61.215-.264.365-.582.45-.953h1.953a3.802 3.802 0 01-.651 1.785 3.745 3.745 0 01-1.456 1.234c-.604.3-1.313.45-2.128.45zm10.723 0c-.998 0-1.857-.226-2.577-.678a4.489 4.489 0 01-1.651-1.885c-.385-.801-.577-1.718-.577-2.752 0-1.047.197-1.97.59-2.771.394-.806.949-1.434 1.665-1.886.715-.452 1.559-.678 2.529-.678.783 0 1.481.145 2.094.436a3.75 3.75 0 011.483 1.208c.381.52.607 1.125.678 1.819h-1.953a2.335 2.335 0 00-.738-1.248c-.38-.35-.89-.524-1.53-.524-.559 0-1.049.148-1.47.443-.416.29-.74.707-.973 1.248-.232.537-.349 1.172-.349 1.906 0 .752.114 1.4.343 1.946.228.546.55.969.966 1.269.42.3.915.45 1.483.45.38 0 .725-.07 1.034-.209.313-.143.574-.347.785-.61.214-.264.364-.582.449-.953h1.953a3.781 3.781 0 01-.651 1.785 3.745 3.745 0 01-1.456 1.234c-.604.3-1.313.45-2.127.45zm10.822 0c-1.015 0-1.89-.217-2.623-.65a4.417 4.417 0 01-1.692-1.846c-.393-.797-.59-1.73-.59-2.799 0-1.056.197-1.986.59-2.791.399-.806.953-1.434 1.665-1.886.716-.452 1.552-.678 2.51-.678.581 0 1.145.096 1.691.289a4.1 4.1 0 011.469.906c.434.411.777.946 1.027 1.603.251.654.376 1.448.376 2.383v.711h-8.194V61.84h6.228c0-.528-.108-.996-.322-1.403a2.44 2.44 0 00-.906-.973c-.385-.237-.837-.355-1.356-.355-.564 0-1.056.138-1.476.416-.416.273-.739.63-.967 1.073a3.108 3.108 0 00-.335 1.43V63.2c0 .69.12 1.275.362 1.758.246.484.588.853 1.027 1.108.438.25.951.376 1.537.376.38 0 .727-.054 1.04-.162.313-.111.584-.277.812-.496.228-.22.402-.49.523-.812l1.899.342a3.444 3.444 0 01-.818 1.47c-.39.416-.879.74-1.47.973-.586.228-1.255.342-2.007.342zm14.373-8l-1.818.323a2.145 2.145 0 00-.363-.665 1.793 1.793 0 00-.657-.516c-.278-.134-.624-.201-1.041-.201-.568 0-1.042.127-1.422.382-.38.25-.571.575-.571.973 0 .344.128.622.383.832.255.21.667.383 1.235.517l1.637.376c.949.219 1.655.557 2.121 1.013.465.456.698 1.05.698 1.778 0 .618-.179 1.168-.537 1.651-.354.479-.848.855-1.483 1.128-.631.273-1.363.409-2.195.409-1.154 0-2.096-.246-2.825-.738-.729-.497-1.177-1.201-1.342-2.114l1.939-.295c.121.505.369.888.745 1.147.376.255.866.383 1.47.383.658 0 1.183-.137 1.577-.41.394-.277.59-.615.59-1.013 0-.322-.12-.593-.362-.812-.237-.22-.602-.385-1.094-.497l-1.745-.382c-.961-.22-1.673-.568-2.134-1.047-.456-.479-.684-1.085-.684-1.819 0-.608.17-1.14.51-1.597.34-.456.81-.812 1.409-1.067.6-.26 1.286-.389 2.06-.389 1.114 0 1.991.242 2.631.725.64.479 1.063 1.12 1.268 1.926zm10.132 0l-1.819.323a2.142 2.142 0 00-.362-.665 1.788 1.788 0 00-.658-.516c-.277-.134-.624-.201-1.04-.201-.568 0-1.042.127-1.423.382-.38.25-.57.575-.57.973 0 .344.128.622.383.832.255.21.666.383 1.234.517l1.638.376c.948.219 1.655.557 2.12 1.013.466.456.698 1.05.698 1.778 0 .618-.179 1.168-.537 1.651-.353.479-.847.855-1.483 1.128-.63.273-1.362.409-2.194.409-1.154 0-2.096-.246-2.825-.738-.73-.497-1.177-1.201-1.342-2.114l1.939-.295c.121.505.369.888.745 1.147.376.255.866.383 1.469.383.658 0 1.184-.137 1.578-.41.393-.277.59-.615.59-1.013 0-.322-.121-.593-.362-.812-.237-.22-.602-.385-1.094-.497l-1.745-.382c-.962-.22-1.673-.568-2.134-1.047-.456-.479-.685-1.085-.685-1.819 0-.608.171-1.14.511-1.597.34-.456.809-.812 1.409-1.067.599-.26 1.286-.389 2.06-.389 1.114 0 1.991.242 2.631.725.639.479 1.062 1.12 1.268 1.926zm9.415 1.672v6.12h-2.006V54.148h1.979v5.114h.128a2.962 2.962 0 011.107-1.322c.497-.327 1.146-.49 1.946-.49.707 0 1.325.145 1.853.436.532.291.943.725 1.234 1.302.296.573.443 1.289.443 2.148v6.556h-2.006v-6.315c0-.756-.195-1.342-.584-1.758-.389-.42-.931-.63-1.624-.63-.474 0-.899.1-1.275.301a2.169 2.169 0 00-.879.886c-.211.385-.316.85-.316 1.396zm13.804 6.328c-1.015 0-1.89-.217-2.624-.65a4.422 4.422 0 01-1.691-1.846c-.393-.797-.59-1.73-.59-2.799 0-1.056.197-1.986.59-2.791.399-.806.953-1.434 1.665-1.886.715-.452 1.552-.678 2.509-.678.582 0 1.146.096 1.692.289a4.1 4.1 0 011.469.906c.434.411.776.946 1.027 1.603.251.654.376 1.448.376 2.383v.711h-8.194V61.84h6.228c0-.528-.108-.996-.323-1.403a2.426 2.426 0 00-.906-.973c-.384-.237-.836-.355-1.355-.355-.564 0-1.056.138-1.477.416-.416.273-.738.63-.966 1.073a3.095 3.095 0 00-.335 1.43V63.2c0 .69.12 1.275.362 1.758.246.484.588.853 1.027 1.108.438.25.95.376 1.537.376.38 0 .727-.054 1.04-.162.313-.111.584-.277.812-.496.228-.22.402-.49.523-.812l1.899.342a3.444 3.444 0 01-.818 1.47c-.39.416-.88.74-1.47.973-.586.228-1.255.342-2.007.342zm6.649-.208V57.584h1.94v1.638h.107c.188-.555.519-.991.993-1.309a2.843 2.843 0 011.624-.483 8.527 8.527 0 01.852.047v1.92a3.583 3.583 0 00-.429-.075 4.105 4.105 0 00-.617-.047c-.475 0-.897.101-1.269.302a2.243 2.243 0 00-1.194 2.02v6.295h-2.007zm11.326.208c-1.015 0-1.89-.217-2.624-.65a4.415 4.415 0 01-1.691-1.846c-.393-.797-.59-1.73-.59-2.799 0-1.056.197-1.986.59-2.791.398-.806.953-1.434 1.665-1.886.715-.452 1.552-.678 2.509-.678.582 0 1.146.096 1.691.289a4.095 4.095 0 011.47.906c.434.411.776.946 1.027 1.603.25.654.376 1.448.376 2.383v.711h-8.194V61.84h6.227c0-.528-.107-.996-.322-1.403a2.426 2.426 0 00-.906-.973c-.384-.237-.836-.355-1.355-.355-.564 0-1.056.138-1.477.416-.416.273-.738.63-.966 1.073a3.095 3.095 0 00-.335 1.43V63.2c0 .69.12 1.275.362 1.758.246.484.588.853 1.027 1.108.438.25.95.376 1.536.376.381 0 .727-.054 1.041-.162.313-.111.583-.277.812-.496.228-.22.402-.49.523-.812l1.899.342a3.435 3.435 0 01-.819 1.47c-.389.416-.879.74-1.469.973-.586.228-1.255.342-2.007.342z",
|
|
1155
|
+
fill: "#000"
|
|
1156
|
+
})]
|
|
1157
|
+
}), /*#__PURE__*/jsx("path", {
|
|
1158
|
+
d: "M0 27.27h346.032c14.903 0 26.984 12.081 26.984 26.984h-3.175c0-13.15-10.66-23.81-23.809-23.81H0V27.27zm371.429 226.984H0h371.429zM0 254.254V28.857v225.397zM346.032 27.27c14.903 0 26.984 12.081 26.984 26.984v200h-3.175v-200c0-13.15-10.66-23.81-23.809-23.81V27.27z",
|
|
1159
|
+
fill: "#C2C8CC",
|
|
1160
|
+
mask: "url(#path-2-inside-1_5_55)"
|
|
1161
|
+
}), /*#__PURE__*/jsx("path", {
|
|
1162
|
+
d: "M132.178 157.733l-2.302-2.302a7.542 7.542 0 00.834-1.905 7.62 7.62 0 00.278-2.063h3.175c0 1.164-.172 2.268-.516 3.313a11.632 11.632 0 01-1.469 2.957zm-4.683-4.762l-2.857-2.858v-8.175c0-.45-.153-.827-.457-1.132a1.536 1.536 0 00-1.131-.456c-.45 0-.827.152-1.131.456a1.54 1.54 0 00-.456 1.132v5l-3.175-3.175v-1.825c0-1.323.463-2.448 1.389-3.374.926-.926 2.05-1.389 3.373-1.389 1.323 0 2.447.463 3.373 1.389.927.926 1.39 2.051 1.39 3.374v9.525c0 .291-.034.555-.1.793a14.98 14.98 0 01-.218.715zm-6.032 14.367v-4.882c-2.752-.37-5.028-1.601-6.827-3.691-1.799-2.09-2.698-4.524-2.698-7.302h3.175c0 2.196.76 4.067 2.282 5.615 1.521 1.548 3.406 2.322 5.655 2.322a7.803 7.803 0 004.763-1.587l2.262 2.262a12.602 12.602 0 01-2.52 1.548 9.883 9.883 0 01-2.917.833v4.882h-3.175zm13.97 2.54l-29.21-29.21 2.222-2.223 29.21 29.21-2.222 2.223z",
|
|
1163
|
+
fill: "#626365"
|
|
1164
|
+
})]
|
|
1165
|
+
}), /*#__PURE__*/jsxs("defs", {
|
|
1166
|
+
children: [/*#__PURE__*/jsx("pattern", {
|
|
1167
|
+
height: "1",
|
|
1168
|
+
id: "pattern0_5_55",
|
|
1169
|
+
patternContentUnits: "objectBoundingBox",
|
|
1170
|
+
width: "1",
|
|
1171
|
+
children: /*#__PURE__*/jsx("use", {
|
|
1172
|
+
transform: "scale(.00292)",
|
|
1173
|
+
xlinkHref: "#image0_5_55"
|
|
1174
|
+
})
|
|
1175
|
+
}), /*#__PURE__*/jsx("clipPath", {
|
|
1176
|
+
id: "clip0_5_55",
|
|
1177
|
+
children: /*#__PURE__*/jsx("rect", {
|
|
1178
|
+
fill: "#fff",
|
|
1179
|
+
height: "253.968",
|
|
1180
|
+
rx: "15.873",
|
|
1181
|
+
width: "400",
|
|
1182
|
+
y: "0.286"
|
|
1183
|
+
})
|
|
1184
|
+
}), /*#__PURE__*/jsx("clipPath", {
|
|
1185
|
+
id: "clip1_5_55",
|
|
1186
|
+
children: /*#__PURE__*/jsx("path", {
|
|
1187
|
+
d: "M0 28.857h346.032c14.026 0 25.397 11.37 25.397 25.397v200H0V28.857z",
|
|
1188
|
+
fill: "#fff"
|
|
1189
|
+
})
|
|
1190
|
+
}), /*#__PURE__*/jsx("image", {
|
|
1191
|
+
height: "342",
|
|
1192
|
+
id: "image0_5_55",
|
|
1193
|
+
width: "342",
|
|
1194
|
+
xlinkHref: "data:image/png;base64,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"
|
|
1195
|
+
})]
|
|
1196
|
+
})]
|
|
1197
|
+
});
|
|
1198
|
+
};
|
|
1199
|
+
|
|
1200
|
+
var DesktopAppCallout = function DesktopAppCallout() {
|
|
1201
|
+
return /*#__PURE__*/jsx(Callout, {
|
|
1202
|
+
className: "mb-3",
|
|
1203
|
+
variant: "info",
|
|
1204
|
+
children: /*#__PURE__*/jsx(Typography, {
|
|
1205
|
+
as: "span",
|
|
1206
|
+
variant: "h4",
|
|
1207
|
+
children: /*#__PURE__*/jsx(Trans, {
|
|
1208
|
+
i18nKey: "neetoMediaRecorder.useDesktopAppCallOut",
|
|
1209
|
+
values: {
|
|
1210
|
+
appName: IS_EXTENSION$1 ? "chrome extension" : "web"
|
|
1211
|
+
},
|
|
1212
|
+
components: {
|
|
1213
|
+
Download: /*#__PURE__*/jsx(Button, {
|
|
1214
|
+
href: "https://neeto.com/neetorecord/download",
|
|
1215
|
+
size: "lg",
|
|
1216
|
+
variant: "link"
|
|
1217
|
+
})
|
|
1218
|
+
}
|
|
1219
|
+
})
|
|
1220
|
+
})
|
|
1221
|
+
});
|
|
1222
|
+
};
|
|
1223
|
+
|
|
1224
|
+
var RequestRecordingCallout = function RequestRecordingCallout(_ref) {
|
|
1225
|
+
var _ref$requestedUser = _ref.requestedUser,
|
|
1226
|
+
requestedUser = _ref$requestedUser === void 0 ? "" : _ref$requestedUser;
|
|
1227
|
+
return /*#__PURE__*/jsx(Callout, {
|
|
1228
|
+
className: "mb-3 text-center",
|
|
1229
|
+
variant: "info",
|
|
1230
|
+
children: /*#__PURE__*/jsxs(Typography, {
|
|
1231
|
+
as: "span",
|
|
1232
|
+
variant: "h4",
|
|
1233
|
+
children: [requestedUser, " is asking you to send a screen recording."]
|
|
1234
|
+
})
|
|
1235
|
+
});
|
|
1236
|
+
};
|
|
1237
|
+
|
|
1238
|
+
var Callouts = withT(function (_ref) {
|
|
1239
|
+
var t = _ref.t,
|
|
1240
|
+
requested = _ref.requested,
|
|
1241
|
+
requestedUser = _ref.requestedUser,
|
|
1242
|
+
error = _ref.error,
|
|
1243
|
+
appName = _ref.appName,
|
|
1244
|
+
isRecorderStatus = _ref.isRecorderStatus,
|
|
1245
|
+
shouldShowSafariExtensionCalloutToStartRecording = _ref.shouldShowSafariExtensionCalloutToStartRecording,
|
|
1246
|
+
shouldShowTimeLimitWarning = _ref.shouldShowTimeLimitWarning,
|
|
1247
|
+
elapsedTime = _ref.elapsedTime;
|
|
1248
|
+
return /*#__PURE__*/jsxs(Fragment, {
|
|
1249
|
+
children: [requested ? /*#__PURE__*/jsx(RequestRecordingCallout, {
|
|
1250
|
+
requestedUser: requestedUser
|
|
1251
|
+
}) : /*#__PURE__*/jsx(DesktopAppCallout, {}), error === SCREEN_RECORDER_ERROR.InsufficientData && /*#__PURE__*/jsx(Callout, {
|
|
1252
|
+
className: "mb-2 p-3",
|
|
1253
|
+
"data-testid": "recorder-insufficient-data-error-callout",
|
|
1254
|
+
variant: "danger",
|
|
1255
|
+
children: t("neetoMediaRecorder.insufficientDataError")
|
|
1256
|
+
}), error === SCREEN_RECORDER_ERROR.MicPermissionDenied && /*#__PURE__*/jsxs("div", {
|
|
1257
|
+
className: "flex flex-col items-center",
|
|
1258
|
+
children: [/*#__PURE__*/jsx(Typography, {
|
|
1259
|
+
className: "mb-2",
|
|
1260
|
+
variant: "h3",
|
|
1261
|
+
children: t("neetoMediaRecorder.record.micPermissionDeniedTitle", {
|
|
1262
|
+
appName: appName
|
|
1263
|
+
})
|
|
1264
|
+
}), /*#__PURE__*/jsx(Typography, {
|
|
1265
|
+
children: t("neetoMediaRecorder.record.micPermissionDeniedMessage")
|
|
1266
|
+
}), /*#__PURE__*/jsx(AllowMicAccess, {})]
|
|
1267
|
+
}), isRecorderStatus(SCREEN_RECORDER_STATUS.acquiring_media) && /*#__PURE__*/jsx(Callout, {
|
|
1268
|
+
className: "nrec-grant-permission-callout p-3",
|
|
1269
|
+
"data-testid": "recorder-grant-permission-info-callout",
|
|
1270
|
+
variant: "info",
|
|
1271
|
+
children: t("neetoMediaRecorder.record.grantPermissionMessage")
|
|
1272
|
+
}), shouldShowSafariExtensionCalloutToStartRecording && /*#__PURE__*/jsx(Callout, {
|
|
1273
|
+
className: "mx-auto mb-2 w-1/2 p-3",
|
|
1274
|
+
"data-testid": "recorder-start-recording-info-callout",
|
|
1275
|
+
variant: "info",
|
|
1276
|
+
children: t("neetoMediaRecorder.record.clickToStartRecording")
|
|
1277
|
+
}), shouldShowTimeLimitWarning && /*#__PURE__*/jsx(Callout, {
|
|
1278
|
+
className: "mx-auto mb-2 w-1/2 p-3",
|
|
1279
|
+
"data-testid": "recorder-time-limit-warning-callout",
|
|
1280
|
+
variant: "warning",
|
|
1281
|
+
children: /*#__PURE__*/jsx(Typography, {
|
|
1282
|
+
as: "span",
|
|
1283
|
+
variant: "body2",
|
|
1284
|
+
children: /*#__PURE__*/jsx(Trans, {
|
|
1285
|
+
i18nKey: "neetoMediaRecorder.record.timeLimitWarning",
|
|
1286
|
+
components: {
|
|
1287
|
+
Bold: /*#__PURE__*/jsx(Typography, {
|
|
1288
|
+
as: "span",
|
|
1289
|
+
weight: "bold"
|
|
1290
|
+
})
|
|
1291
|
+
},
|
|
1292
|
+
values: {
|
|
1293
|
+
duration: getRecorderTimeLimitInHumanFormat(screenRecorder.timeLimit),
|
|
1294
|
+
endsIn: getRecorderTimeLimitInHumanFormat(screenRecorder.timeLimit - elapsedTime)
|
|
1295
|
+
}
|
|
1296
|
+
})
|
|
1297
|
+
})
|
|
1298
|
+
})]
|
|
1299
|
+
});
|
|
1300
|
+
});
|
|
1301
|
+
|
|
1302
|
+
function _objectWithoutPropertiesLoose(r, e) {
|
|
1303
|
+
if (null == r) return {};
|
|
1304
|
+
var t = {};
|
|
1305
|
+
for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
|
|
1306
|
+
if (-1 !== e.indexOf(n)) continue;
|
|
1307
|
+
t[n] = r[n];
|
|
1308
|
+
}
|
|
1309
|
+
return t;
|
|
1310
|
+
}
|
|
1311
|
+
|
|
1312
|
+
function _objectWithoutProperties(e, t) {
|
|
1313
|
+
if (null == e) return {};
|
|
1314
|
+
var o,
|
|
1315
|
+
r,
|
|
1316
|
+
i = _objectWithoutPropertiesLoose(e, t);
|
|
1317
|
+
if (Object.getOwnPropertySymbols) {
|
|
1318
|
+
var n = Object.getOwnPropertySymbols(e);
|
|
1319
|
+
for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);
|
|
1320
|
+
}
|
|
1321
|
+
return i;
|
|
1322
|
+
}
|
|
1323
|
+
|
|
1324
|
+
var _excluded = ["size"],
|
|
1325
|
+
_excluded2 = ["size"],
|
|
1326
|
+
_excluded3 = ["size"];
|
|
1327
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
1328
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
1329
|
+
var PlayIcon = function PlayIcon(_ref) {
|
|
1330
|
+
var _ref$size = _ref.size,
|
|
1331
|
+
size = _ref$size === void 0 ? 24 : _ref$size,
|
|
1332
|
+
other = _objectWithoutProperties(_ref, _excluded);
|
|
1333
|
+
return /*#__PURE__*/jsx("svg", _objectSpread(_objectSpread({
|
|
1334
|
+
height: size,
|
|
1335
|
+
viewBox: "0 0 20 20",
|
|
1336
|
+
width: size,
|
|
1337
|
+
xmlns: "http://www.w3.org/2000/svg"
|
|
1338
|
+
}, other), {}, {
|
|
1339
|
+
children: /*#__PURE__*/jsx("path", {
|
|
1340
|
+
d: "M4 18a1 1 0 01-1-1V3a1 1 0 011.5-.86l12 7a1 1 0 010 1.72l-12 7A1 1 0 014 18zM5 4.74v10.52L14 10z",
|
|
1341
|
+
fill: "currentColor"
|
|
1342
|
+
})
|
|
1343
|
+
}));
|
|
1344
|
+
};
|
|
1345
|
+
var StopIcon = function StopIcon(_ref2) {
|
|
1346
|
+
var _ref2$size = _ref2.size,
|
|
1347
|
+
size = _ref2$size === void 0 ? 24 : _ref2$size,
|
|
1348
|
+
other = _objectWithoutProperties(_ref2, _excluded2);
|
|
1349
|
+
return /*#__PURE__*/jsx("svg", _objectSpread(_objectSpread({
|
|
1350
|
+
height: size,
|
|
1351
|
+
viewBox: "0 0 64 64",
|
|
1352
|
+
width: size,
|
|
1353
|
+
xmlns: "http://www.w3.org/2000/svg"
|
|
1354
|
+
}, other), {}, {
|
|
1355
|
+
children: /*#__PURE__*/jsx("path", {
|
|
1356
|
+
d: "M10.667 16A5.333 5.333 0 0116 10.667h32A5.333 5.333 0 0153.333 16v32A5.333 5.333 0 0148 53.333H16A5.333 5.333 0 0110.667 48V16z",
|
|
1357
|
+
fill: "rgb(var(--neeto-ui-error-500))"
|
|
1358
|
+
})
|
|
1359
|
+
}));
|
|
1360
|
+
};
|
|
1361
|
+
var RestartIcon = function RestartIcon(_ref3) {
|
|
1362
|
+
var _ref3$size = _ref3.size,
|
|
1363
|
+
size = _ref3$size === void 0 ? 24 : _ref3$size,
|
|
1364
|
+
other = _objectWithoutProperties(_ref3, _excluded3);
|
|
1365
|
+
return /*#__PURE__*/jsx("svg", _objectSpread(_objectSpread({
|
|
1366
|
+
height: size,
|
|
1367
|
+
viewBox: "0 0 64 64",
|
|
1368
|
+
width: size,
|
|
1369
|
+
xmlns: "http://www.w3.org/2000/svg"
|
|
1370
|
+
}, other), {}, {
|
|
1371
|
+
children: /*#__PURE__*/jsx("path", {
|
|
1372
|
+
clipRule: "evenodd",
|
|
1373
|
+
d: "M21.333 21.333H10.667A2.667 2.667 0 018 18.667V8a2.667 2.667 0 015.333 0v4.956A26.58 26.58 0 0132 5.333c14.727 0 26.666 11.94 26.666 26.667 0 14.728-11.939 26.667-26.666 26.667-13.83 0-25.2-10.527-26.536-24.004C5.32 33.197 6.527 32 8 32c1.472 0 2.649 1.2 2.83 2.661C12.14 45.188 21.12 53.334 32 53.334c11.782 0 21.333-9.55 21.333-21.333 0-11.782-9.551-21.333-21.333-21.333-5.41 0-10.35 2.014-14.111 5.333h3.444a2.667 2.667 0 010 5.333z",
|
|
1374
|
+
fill: "currentColor",
|
|
1375
|
+
fillRule: "evenodd"
|
|
1376
|
+
})
|
|
1377
|
+
}));
|
|
1378
|
+
};
|
|
1379
|
+
|
|
1380
|
+
var GrantAccessMessage = withT(function (_ref) {
|
|
1381
|
+
var t = _ref.t,
|
|
1382
|
+
appName = _ref.appName;
|
|
1383
|
+
return /*#__PURE__*/jsxs("div", {
|
|
1384
|
+
className: "flex flex-col items-center pt-10",
|
|
1385
|
+
children: [/*#__PURE__*/jsx("div", {
|
|
1386
|
+
className: "mb-6 flex justify-center",
|
|
1387
|
+
children: /*#__PURE__*/jsx("div", {
|
|
1388
|
+
className: "neeto-ui-bg-gray-100 neeto-ui-rounded-full flex h-16 w-16 items-center justify-center",
|
|
1389
|
+
children: /*#__PURE__*/jsx(Browser, {
|
|
1390
|
+
className: "neeto-ui-text-gray-600",
|
|
1391
|
+
size: 40
|
|
1392
|
+
})
|
|
1393
|
+
})
|
|
1394
|
+
}), /*#__PURE__*/jsx(Typography, {
|
|
1395
|
+
className: "mb-3 text-center",
|
|
1396
|
+
variant: "h3",
|
|
1397
|
+
children: t("neetoMediaRecorder.record.screenSharePermissionDeniedTitle", {
|
|
1398
|
+
appName: appName
|
|
1399
|
+
})
|
|
1400
|
+
}), /*#__PURE__*/jsx(Typography, {
|
|
1401
|
+
className: "neeto-ui-text-gray-600 text-center leading-normal",
|
|
1402
|
+
children: /*#__PURE__*/jsx(Trans, {
|
|
1403
|
+
components: {
|
|
1404
|
+
Bold: /*#__PURE__*/jsx(Typography, {
|
|
1405
|
+
as: "span",
|
|
1406
|
+
weight: "bold"
|
|
1407
|
+
})
|
|
1408
|
+
},
|
|
1409
|
+
i18nKey: "neetoMediaRecorder.record.screenSharePermissionDenied"
|
|
1410
|
+
})
|
|
1411
|
+
})]
|
|
1412
|
+
});
|
|
1413
|
+
});
|
|
1414
|
+
|
|
1415
|
+
var useRecorderStatus = function useRecorderStatus() {
|
|
1416
|
+
var useRecorderStore = screenRecorder.useRecorderStore;
|
|
1417
|
+
var _useRecorderStore = useRecorderStore(function (store) {
|
|
1418
|
+
return {
|
|
1419
|
+
status: store["status"]
|
|
1420
|
+
};
|
|
1421
|
+
}, shallow),
|
|
1422
|
+
status = _useRecorderStore.status;
|
|
1423
|
+
var isStatus = function isStatus() {
|
|
1424
|
+
for (var _len = arguments.length, statuses = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
1425
|
+
statuses[_key] = arguments[_key];
|
|
1426
|
+
}
|
|
1427
|
+
return statuses.includes(status);
|
|
1428
|
+
};
|
|
1429
|
+
return {
|
|
1430
|
+
isStatus: isStatus,
|
|
1431
|
+
status: status
|
|
1432
|
+
};
|
|
1433
|
+
};
|
|
1434
|
+
|
|
1435
|
+
var Controls = function Controls(_ref) {
|
|
1436
|
+
var setIsRestartAlertOpen = _ref.setIsRestartAlertOpen,
|
|
1437
|
+
setIsDiscardAlertOpen = _ref.setIsDiscardAlertOpen,
|
|
1438
|
+
onDiscard = _ref.onDiscard,
|
|
1439
|
+
onStopRecording = _ref.onStopRecording,
|
|
1440
|
+
requested = _ref.requested,
|
|
1441
|
+
appName = _ref.appName;
|
|
1442
|
+
var _useTranslation = useTranslation(),
|
|
1443
|
+
t = _useTranslation.t;
|
|
1444
|
+
var startRecording = screenRecorder.startRecording,
|
|
1445
|
+
pauseRecording = screenRecorder.pauseRecording,
|
|
1446
|
+
resumeRecording = screenRecorder.resumeRecording,
|
|
1447
|
+
useRecorderStore = screenRecorder.useRecorderStore,
|
|
1448
|
+
setAudioConfiguration = screenRecorder.setAudioConfiguration;
|
|
1449
|
+
var _useRecorderStore = useRecorderStore(function (store) {
|
|
1450
|
+
return {
|
|
1451
|
+
error: store["error"]
|
|
1452
|
+
};
|
|
1453
|
+
}, shallow),
|
|
1454
|
+
error = _useRecorderStore.error;
|
|
1455
|
+
var _useRecorderStatus = useRecorderStatus(),
|
|
1456
|
+
isStatus = _useRecorderStatus.isStatus;
|
|
1457
|
+
var hasRecordingStarted = isStatus(SCREEN_RECORDER_STATUS.recording, SCREEN_RECORDER_STATUS.paused);
|
|
1458
|
+
var shouldShowSelectScreenButton = isStatus(SCREEN_RECORDER_STATUS.idle) && (requested || IS_SAFARI_EXTENSION || error === SCREEN_RECORDER_ERROR.NotAllowedError);
|
|
1459
|
+
var shouldShowGrantMicPermissionButton = error === SCREEN_RECORDER_ERROR.MicPermissionDenied;
|
|
1460
|
+
return /*#__PURE__*/jsxs("div", {
|
|
1461
|
+
className: classNames("mt-5 flex flex-row items-center gap-3 p-2", {
|
|
1462
|
+
"neeto-ui-rounded-lg neeto-ui-border-gray-200 border-2": hasRecordingStarted
|
|
1463
|
+
}),
|
|
1464
|
+
children: [shouldShowSelectScreenButton && /*#__PURE__*/jsxs("div", {
|
|
1465
|
+
className: "neeto-ui-rounded-md w-full max-w-3xl border p-5",
|
|
1466
|
+
children: [/*#__PURE__*/jsx(GrantAccessMessage, {
|
|
1467
|
+
appName: appName
|
|
1468
|
+
}), /*#__PURE__*/jsxs("div", {
|
|
1469
|
+
className: "mt-5 flex justify-center gap-4",
|
|
1470
|
+
children: [/*#__PURE__*/jsx(Button, {
|
|
1471
|
+
className: "flex-shrink-0",
|
|
1472
|
+
"data-testid": "media-recorder-record-button",
|
|
1473
|
+
icon: function icon() {
|
|
1474
|
+
return /*#__PURE__*/jsx(Computer, {
|
|
1475
|
+
size: 20
|
|
1476
|
+
});
|
|
1477
|
+
},
|
|
1478
|
+
iconPosition: "left",
|
|
1479
|
+
label: t("neetoMediaRecorder.record.selectScreen"),
|
|
1480
|
+
loading: isStatus(SCREEN_RECORDER_STATUS.acquiring_media),
|
|
1481
|
+
size: "lg",
|
|
1482
|
+
onClick: startRecording
|
|
1483
|
+
}), !requested && /*#__PURE__*/jsx(Button, {
|
|
1484
|
+
className: "flex-shrink-0",
|
|
1485
|
+
"data-testid": "media-recorder-discard-button",
|
|
1486
|
+
icon: function icon() {
|
|
1487
|
+
return /*#__PURE__*/jsx(Delete, {
|
|
1488
|
+
size: 20
|
|
1489
|
+
});
|
|
1490
|
+
},
|
|
1491
|
+
iconPosition: "left",
|
|
1492
|
+
label: t("neetoMediaRecorder.record.discard"),
|
|
1493
|
+
size: "lg",
|
|
1494
|
+
variant: "destructive",
|
|
1495
|
+
onClick: onDiscard
|
|
1496
|
+
})]
|
|
1497
|
+
})]
|
|
1498
|
+
}), shouldShowGrantMicPermissionButton && /*#__PURE__*/jsxs("div", {
|
|
1499
|
+
className: "flex gap-4",
|
|
1500
|
+
children: [/*#__PURE__*/jsx(Button, {
|
|
1501
|
+
className: "flex-shrink-0",
|
|
1502
|
+
"data-testid": "media-recorder-no-audio-button",
|
|
1503
|
+
label: t("neetoMediaRecorder.record.iDontNeedAudio"),
|
|
1504
|
+
size: "lg",
|
|
1505
|
+
variant: "destructive",
|
|
1506
|
+
onClick: function onClick() {
|
|
1507
|
+
setAudioConfiguration(false);
|
|
1508
|
+
useRecorderStore.setState({
|
|
1509
|
+
error: ""
|
|
1510
|
+
});
|
|
1511
|
+
}
|
|
1512
|
+
}), /*#__PURE__*/jsx(Button, {
|
|
1513
|
+
className: "flex-shrink-0",
|
|
1514
|
+
"data-testid": "media-recorder-grant-microphone-permission-button",
|
|
1515
|
+
icon: function icon() {
|
|
1516
|
+
return /*#__PURE__*/jsx(Unlock, {
|
|
1517
|
+
size: 20
|
|
1518
|
+
});
|
|
1519
|
+
},
|
|
1520
|
+
iconPosition: "left",
|
|
1521
|
+
label: t("neetoMediaRecorder.record.grantMicPermission"),
|
|
1522
|
+
size: "lg",
|
|
1523
|
+
onClick: startRecording
|
|
1524
|
+
})]
|
|
1525
|
+
}), hasRecordingStarted && /*#__PURE__*/jsxs("div", {
|
|
1526
|
+
className: "flex items-center gap-3",
|
|
1527
|
+
children: [/*#__PURE__*/jsx(Button, {
|
|
1528
|
+
className: "nrec-done-button flex-shrink-0",
|
|
1529
|
+
"data-testid": "media-recorder-stop-button",
|
|
1530
|
+
icon: function icon() {
|
|
1531
|
+
return /*#__PURE__*/jsx(StopIcon, {
|
|
1532
|
+
size: 28
|
|
1533
|
+
});
|
|
1534
|
+
},
|
|
1535
|
+
label: t("neetoMediaRecorder.record.done"),
|
|
1536
|
+
size: "lg",
|
|
1537
|
+
variant: "ghost",
|
|
1538
|
+
onClick: onStopRecording
|
|
1539
|
+
}), /*#__PURE__*/jsx("div", {
|
|
1540
|
+
className: "neeto-ui-bg-gray-200 h-10 w-0.5"
|
|
1541
|
+
})]
|
|
1542
|
+
}), isStatus(SCREEN_RECORDER_STATUS.recording) && /*#__PURE__*/jsx(Button, {
|
|
1543
|
+
className: "flex-shrink-0",
|
|
1544
|
+
"data-testid": "media-recorder-pause-button",
|
|
1545
|
+
variant: "ghost",
|
|
1546
|
+
tooltipProps: {
|
|
1547
|
+
content: t("neetoMediaRecorder.record.pause"),
|
|
1548
|
+
position: "top"
|
|
1549
|
+
},
|
|
1550
|
+
onClick: pauseRecording,
|
|
1551
|
+
children: /*#__PURE__*/jsx(Pause, {
|
|
1552
|
+
className: "nr-control-button__icon--neeto",
|
|
1553
|
+
size: 28
|
|
1554
|
+
})
|
|
1555
|
+
}), isStatus(SCREEN_RECORDER_STATUS.paused) && /*#__PURE__*/jsx(Button, {
|
|
1556
|
+
className: "flex-shrink-0",
|
|
1557
|
+
"data-testid": "media-recorder-play-button",
|
|
1558
|
+
variant: "ghost",
|
|
1559
|
+
tooltipProps: {
|
|
1560
|
+
content: t("neetoMediaRecorder.record.resume"),
|
|
1561
|
+
position: "top"
|
|
1562
|
+
},
|
|
1563
|
+
onClick: resumeRecording,
|
|
1564
|
+
children: /*#__PURE__*/jsx(PlayIcon, {
|
|
1565
|
+
size: 28
|
|
1566
|
+
})
|
|
1567
|
+
}), hasRecordingStarted && /*#__PURE__*/jsxs("div", {
|
|
1568
|
+
className: "flex items-center gap-3",
|
|
1569
|
+
children: [/*#__PURE__*/jsx(Button, {
|
|
1570
|
+
className: "flex-shrink-0",
|
|
1571
|
+
"data-testid": "media-recorder-restart-button",
|
|
1572
|
+
variant: "ghost",
|
|
1573
|
+
tooltipProps: {
|
|
1574
|
+
content: t("neetoMediaRecorder.record.restart"),
|
|
1575
|
+
position: "top"
|
|
1576
|
+
},
|
|
1577
|
+
onClick: function onClick() {
|
|
1578
|
+
return setIsRestartAlertOpen(true);
|
|
1579
|
+
},
|
|
1580
|
+
children: /*#__PURE__*/jsx(RestartIcon, {
|
|
1581
|
+
size: 28
|
|
1582
|
+
})
|
|
1583
|
+
}), /*#__PURE__*/jsx(Button, {
|
|
1584
|
+
className: "flex-shrink-0",
|
|
1585
|
+
"data-testid": "media-recorder-discard-button",
|
|
1586
|
+
variant: "ghost",
|
|
1587
|
+
tooltipProps: {
|
|
1588
|
+
content: t("neetoMediaRecorder.record.discard"),
|
|
1589
|
+
position: "top"
|
|
1590
|
+
},
|
|
1591
|
+
onClick: function onClick() {
|
|
1592
|
+
return setIsDiscardAlertOpen(true);
|
|
1593
|
+
},
|
|
1594
|
+
children: /*#__PURE__*/jsx(Delete, {
|
|
1595
|
+
className: "nr-control-button__icon--neeto",
|
|
1596
|
+
size: 28
|
|
1597
|
+
})
|
|
1598
|
+
})]
|
|
1599
|
+
})]
|
|
1600
|
+
});
|
|
1601
|
+
};
|
|
1602
|
+
|
|
1603
|
+
var Countdown = withT(function (_ref) {
|
|
1604
|
+
var t = _ref.t,
|
|
1605
|
+
countdownTimeLeft = _ref.countdownTimeLeft;
|
|
1606
|
+
return /*#__PURE__*/jsxs("div", {
|
|
1607
|
+
className: "neeto-ui-rounded-lg mx-auto mb-8 flex w-full max-w-4xl flex-col items-center justify-center p-12",
|
|
1608
|
+
"data-testid": "recorder-countdown-wrapper",
|
|
1609
|
+
children: [/*#__PURE__*/jsx("div", {
|
|
1610
|
+
className: "relative mb-8",
|
|
1611
|
+
children: /*#__PURE__*/jsxs("div", {
|
|
1612
|
+
className: "relative flex h-32 w-32 items-center justify-center",
|
|
1613
|
+
children: [/*#__PURE__*/jsxs("svg", {
|
|
1614
|
+
className: "absolute h-32 w-32 -rotate-90 transform",
|
|
1615
|
+
viewBox: "0 0 120 120",
|
|
1616
|
+
children: [/*#__PURE__*/jsx("circle", {
|
|
1617
|
+
cx: "60",
|
|
1618
|
+
cy: "60",
|
|
1619
|
+
fill: "transparent",
|
|
1620
|
+
r: "50",
|
|
1621
|
+
stroke: "rgba(2, 128, 105, 0.2)",
|
|
1622
|
+
strokeWidth: "4"
|
|
1623
|
+
}), /*#__PURE__*/jsx("circle", {
|
|
1624
|
+
className: "transition-all duration-1000 ease-linear",
|
|
1625
|
+
cx: "60",
|
|
1626
|
+
cy: "60",
|
|
1627
|
+
fill: "transparent",
|
|
1628
|
+
r: "50",
|
|
1629
|
+
stroke: "rgb(2, 128, 105)",
|
|
1630
|
+
strokeDasharray: 2 * Math.PI * 50,
|
|
1631
|
+
strokeLinecap: "round",
|
|
1632
|
+
strokeWidth: "4",
|
|
1633
|
+
strokeDashoffset: 2 * Math.PI * 50 * (countdownTimeLeft / COUNTDOWN_TIME)
|
|
1634
|
+
})]
|
|
1635
|
+
}), /*#__PURE__*/jsx(Typography, {
|
|
1636
|
+
className: " text-6xl font-bold",
|
|
1637
|
+
weight: "semibold",
|
|
1638
|
+
children: countdownTimeLeft
|
|
1639
|
+
})]
|
|
1640
|
+
})
|
|
1641
|
+
}), /*#__PURE__*/jsx(Typography, {
|
|
1642
|
+
className: "mb-4",
|
|
1643
|
+
variant: "h3",
|
|
1644
|
+
children: t("neetoMediaRecorder.record.startsIn")
|
|
1645
|
+
})]
|
|
1646
|
+
});
|
|
1647
|
+
});
|
|
1648
|
+
|
|
1649
|
+
var FailedToStart = withT(function (_ref) {
|
|
1650
|
+
var t = _ref.t;
|
|
1651
|
+
return /*#__PURE__*/jsxs("div", {
|
|
1652
|
+
className: "flex h-screen w-full flex-col items-center justify-center gap-4",
|
|
1653
|
+
children: [/*#__PURE__*/jsx(Callout, {
|
|
1654
|
+
className: "p-5",
|
|
1655
|
+
"data-testid": "recorder-unsupported-browser-callout",
|
|
1656
|
+
variant: "danger",
|
|
1657
|
+
children: t("neetoMediaRecorder.notSupportedError")
|
|
1658
|
+
}), /*#__PURE__*/jsx(Button, {
|
|
1659
|
+
label: t("neetoMediaRecorder.record.retry"),
|
|
1660
|
+
size: "lg",
|
|
1661
|
+
onClick: function onClick() {
|
|
1662
|
+
return window.location.reload();
|
|
1663
|
+
}
|
|
1664
|
+
})]
|
|
1665
|
+
});
|
|
1666
|
+
});
|
|
1667
|
+
|
|
1668
|
+
var getAnalyser = function getAnalyser() {
|
|
1669
|
+
var _screenRecorder$getAu;
|
|
1670
|
+
var stream = (_screenRecorder$getAu = screenRecorder.getAudioStream) === null || _screenRecorder$getAu === void 0 ? void 0 : _screenRecorder$getAu.call(screenRecorder);
|
|
1671
|
+
if (!stream) {
|
|
1672
|
+
return null;
|
|
1673
|
+
}
|
|
1674
|
+
var ctx = new (window.AudioContext || window.webkitAudioContext)();
|
|
1675
|
+
var source = ctx.createMediaStreamSource(stream);
|
|
1676
|
+
var analyser = ctx.createAnalyser();
|
|
1677
|
+
analyser.fftSize = 2048;
|
|
1678
|
+
source.connect(analyser);
|
|
1679
|
+
var data = new Uint8Array(analyser.fftSize);
|
|
1680
|
+
return {
|
|
1681
|
+
ctx: ctx,
|
|
1682
|
+
source: source,
|
|
1683
|
+
analyser: analyser,
|
|
1684
|
+
data: data
|
|
1685
|
+
};
|
|
1686
|
+
};
|
|
1687
|
+
var hasChrome = typeof chrome !== "undefined" && chrome.runtime && chrome.runtime.onMessage;
|
|
1688
|
+
var useAudioIsCapturing = function useAudioIsCapturing(_ref) {
|
|
1689
|
+
var isMicOn = _ref.isMicOn;
|
|
1690
|
+
var _useState = useState(true),
|
|
1691
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
1692
|
+
hasAudio = _useState2[0],
|
|
1693
|
+
setHasAudio = _useState2[1];
|
|
1694
|
+
var _useState3 = useState(false),
|
|
1695
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
1696
|
+
disable = _useState4[0],
|
|
1697
|
+
setDisable = _useState4[1];
|
|
1698
|
+
var _useState5 = useState(false),
|
|
1699
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
1700
|
+
timerStarted = _useState6[0],
|
|
1701
|
+
setTimerStarted = _useState6[1];
|
|
1702
|
+
var timerRef = useRef(null);
|
|
1703
|
+
var remainingRef = useRef(MIC_NOT_WORKING_SILENCE_TIMEOUT);
|
|
1704
|
+
var startedAtRef = useRef(null);
|
|
1705
|
+
var clearTimer = function clearTimer() {
|
|
1706
|
+
if (timerRef.current) clearTimeout(timerRef.current);
|
|
1707
|
+
timerRef.current = null;
|
|
1708
|
+
};
|
|
1709
|
+
var armTimer = function armTimer() {
|
|
1710
|
+
if (timerRef.current || !timerStarted) return;
|
|
1711
|
+
logger.info("useAudioIsCapturing new timer");
|
|
1712
|
+
startedAtRef.current = Date.now();
|
|
1713
|
+
timerRef.current = setTimeout(function () {
|
|
1714
|
+
return setHasAudio(false);
|
|
1715
|
+
}, remainingRef.current);
|
|
1716
|
+
};
|
|
1717
|
+
var pauseTimer = function pauseTimer() {
|
|
1718
|
+
if (!timerRef.current) return;
|
|
1719
|
+
var elapsed = Date.now() - startedAtRef.current;
|
|
1720
|
+
remainingRef.current = Math.max(0, remainingRef.current - elapsed);
|
|
1721
|
+
clearTimer();
|
|
1722
|
+
};
|
|
1723
|
+
var resumeTimer = function resumeTimer() {
|
|
1724
|
+
if (timerRef.current || !timerStarted || disable) return;
|
|
1725
|
+
logger.info("useAudioIsCapturing resumeTimer");
|
|
1726
|
+
armTimer();
|
|
1727
|
+
};
|
|
1728
|
+
var reset = useCallback(function () {
|
|
1729
|
+
logger.info("useAudioIsCapturing reset");
|
|
1730
|
+
clearTimer();
|
|
1731
|
+
remainingRef.current = MIC_NOT_WORKING_SILENCE_TIMEOUT;
|
|
1732
|
+
setTimerStarted(false);
|
|
1733
|
+
setHasAudio(true);
|
|
1734
|
+
}, []);
|
|
1735
|
+
|
|
1736
|
+
// Listen for Chrome extension messages
|
|
1737
|
+
useEffect(function () {
|
|
1738
|
+
var handleMessage = function handleMessage(message) {
|
|
1739
|
+
if (!(message.type === "IGNORE_AUDIO_NOT_CAPTURING")) return;
|
|
1740
|
+
logger.info("useAudioIsCapturing -> IGNORE_AUDIO_NOT_CAPTURING received");
|
|
1741
|
+
setDisable(true);
|
|
1742
|
+
};
|
|
1743
|
+
|
|
1744
|
+
// Check if we're in a Chrome extension context
|
|
1745
|
+
if (hasChrome) {
|
|
1746
|
+
var _chrome, _chrome$runtime, _chrome$runtime$onMes;
|
|
1747
|
+
(_chrome = chrome) === null || _chrome === void 0 ? void 0 : (_chrome$runtime = _chrome.runtime) === null || _chrome$runtime === void 0 ? void 0 : (_chrome$runtime$onMes = _chrome$runtime.onMessage) === null || _chrome$runtime$onMes === void 0 ? void 0 : _chrome$runtime$onMes.addListener(handleMessage);
|
|
1748
|
+
}
|
|
1749
|
+
return function () {
|
|
1750
|
+
if (hasChrome) {
|
|
1751
|
+
var _chrome2, _chrome2$runtime, _chrome2$runtime$onMe;
|
|
1752
|
+
(_chrome2 = chrome) === null || _chrome2 === void 0 ? void 0 : (_chrome2$runtime = _chrome2.runtime) === null || _chrome2$runtime === void 0 ? void 0 : (_chrome2$runtime$onMe = _chrome2$runtime.onMessage) === null || _chrome2$runtime$onMe === void 0 ? void 0 : _chrome2$runtime$onMe.removeListener(handleMessage);
|
|
1753
|
+
}
|
|
1754
|
+
};
|
|
1755
|
+
}, []);
|
|
1756
|
+
useEffect(function () {
|
|
1757
|
+
if (!isMicOn || !timerStarted || disable) return noop;
|
|
1758
|
+
var analyserObj = null;
|
|
1759
|
+
var checkAudio = function checkAudio() {
|
|
1760
|
+
if (!analyserObj) analyserObj = getAnalyser();
|
|
1761
|
+
// if no stream yet or analyser failed, treat as silence
|
|
1762
|
+
var isSilent = !analyserObj ? true : function () {
|
|
1763
|
+
analyserObj.analyser.getByteTimeDomainData(analyserObj.data);
|
|
1764
|
+
return analyserObj.data.every(function (v) {
|
|
1765
|
+
return v === 128;
|
|
1766
|
+
}); // absolute silence
|
|
1767
|
+
}();
|
|
1768
|
+
|
|
1769
|
+
if (isSilent) {
|
|
1770
|
+
armTimer();
|
|
1771
|
+
} else {
|
|
1772
|
+
clearTimer();
|
|
1773
|
+
remainingRef.current = MIC_NOT_WORKING_SILENCE_TIMEOUT;
|
|
1774
|
+
if (!hasAudio) setHasAudio(true);
|
|
1775
|
+
}
|
|
1776
|
+
};
|
|
1777
|
+
|
|
1778
|
+
// Use interval polling instead of rAF so this keeps running in inactive tabs.
|
|
1779
|
+
checkAudio();
|
|
1780
|
+
var intervalId = setInterval(checkAudio, 1000);
|
|
1781
|
+
return function () {
|
|
1782
|
+
clearInterval(intervalId);
|
|
1783
|
+
clearTimer();
|
|
1784
|
+
if (analyserObj) {
|
|
1785
|
+
analyserObj.source.disconnect();
|
|
1786
|
+
analyserObj.ctx.close();
|
|
1787
|
+
}
|
|
1788
|
+
};
|
|
1789
|
+
}, [timerStarted, hasAudio, isMicOn, disable]);
|
|
1790
|
+
useEffect(function () {
|
|
1791
|
+
var _callbacks;
|
|
1792
|
+
if (!isMicOn) return noop;
|
|
1793
|
+
var callbacks = (_callbacks = {}, _defineProperty(_callbacks, SCREEN_RECORDER_EVENT.onStart, function () {
|
|
1794
|
+
logger.info("useAudioIsCapturing onStart");
|
|
1795
|
+
reset();
|
|
1796
|
+
setTimerStarted(true);
|
|
1797
|
+
armTimer();
|
|
1798
|
+
}), _defineProperty(_callbacks, SCREEN_RECORDER_EVENT.onRestart, function () {
|
|
1799
|
+
reset();
|
|
1800
|
+
setTimerStarted(true);
|
|
1801
|
+
armTimer();
|
|
1802
|
+
}), _defineProperty(_callbacks, SCREEN_RECORDER_EVENT.onResume, function () {
|
|
1803
|
+
setTimerStarted(true);
|
|
1804
|
+
resumeTimer();
|
|
1805
|
+
}), _defineProperty(_callbacks, SCREEN_RECORDER_EVENT.onPause, function () {
|
|
1806
|
+
pauseTimer();
|
|
1807
|
+
}), _defineProperty(_callbacks, SCREEN_RECORDER_EVENT.onStop, function () {
|
|
1808
|
+
logger.info("useAudioIsCapturing onStop");
|
|
1809
|
+
clearTimer();
|
|
1810
|
+
reset();
|
|
1811
|
+
}), _defineProperty(_callbacks, "disable-mic-not-working-warning", function disableMicNotWorkingWarning() {
|
|
1812
|
+
logger.info("useAudioIsCapturing -> disable-mic-not-working-warning");
|
|
1813
|
+
setDisable(true);
|
|
1814
|
+
setTimeout(function () {
|
|
1815
|
+
clearTimer();
|
|
1816
|
+
reset();
|
|
1817
|
+
}, 500);
|
|
1818
|
+
}), _callbacks);
|
|
1819
|
+
Object.entries(callbacks).forEach(function (_ref2) {
|
|
1820
|
+
var _ref3 = _slicedToArray(_ref2, 2),
|
|
1821
|
+
ev = _ref3[0],
|
|
1822
|
+
fn = _ref3[1];
|
|
1823
|
+
return screenRecorder.addCallback(ev, fn);
|
|
1824
|
+
});
|
|
1825
|
+
return function () {
|
|
1826
|
+
Object.entries(callbacks).forEach(function (_ref4) {
|
|
1827
|
+
var _ref5 = _slicedToArray(_ref4, 2),
|
|
1828
|
+
ev = _ref5[0],
|
|
1829
|
+
fn = _ref5[1];
|
|
1830
|
+
return screenRecorder.removeCallback(ev, fn);
|
|
1831
|
+
});
|
|
1832
|
+
};
|
|
1833
|
+
}, [isMicOn, reset]);
|
|
1834
|
+
return {
|
|
1835
|
+
hasAudio: hasAudio,
|
|
1836
|
+
reset: reset
|
|
1837
|
+
};
|
|
1838
|
+
};
|
|
1839
|
+
|
|
1840
|
+
var useHandleErrors = function useHandleErrors(_ref) {
|
|
1841
|
+
var error = _ref.error,
|
|
1842
|
+
recorderStatus = _ref.recorderStatus,
|
|
1843
|
+
requested = _ref.requested;
|
|
1844
|
+
var _useRecorderStatus = useRecorderStatus(),
|
|
1845
|
+
isRecorderStatus = _useRecorderStatus.isStatus;
|
|
1846
|
+
useEffect(function () {
|
|
1847
|
+
if (error === SCREEN_RECORDER_ERROR.UnSupportedBrowser) return noop;
|
|
1848
|
+
if (error === SCREEN_RECORDER_ERROR.FailedToStart) return noop;
|
|
1849
|
+
if (!isRecorderStatus(SCREEN_RECORDER_STATUS.idle) || error === SCREEN_RECORDER_ERROR.NotAllowedError || error === SCREEN_RECORDER_ERROR.MicPermissionDenied || IS_SAFARI_EXTENSION) {
|
|
1850
|
+
if (error !== SCREEN_RECORDER_ERROR.MicPermissionDenied) return noop;
|
|
1851
|
+
var cleanupFunction = noop;
|
|
1852
|
+
|
|
1853
|
+
// eslint-disable-next-line promise/catch-or-return
|
|
1854
|
+
window.navigator.permissions.query({
|
|
1855
|
+
name: "microphone"
|
|
1856
|
+
})
|
|
1857
|
+
// eslint-disable-next-line promise/prefer-await-to-then, promise/always-return
|
|
1858
|
+
.then(function (micPermission) {
|
|
1859
|
+
var handleChange = function handleChange() {
|
|
1860
|
+
if (micPermission.state === "granted" && !requested) {
|
|
1861
|
+
screenRecorder.startRecording();
|
|
1862
|
+
}
|
|
1863
|
+
};
|
|
1864
|
+
micPermission.addEventListener("change", handleChange);
|
|
1865
|
+
cleanupFunction = function cleanupFunction() {
|
|
1866
|
+
return micPermission.removeEventListener("change", handleChange);
|
|
1867
|
+
};
|
|
1868
|
+
});
|
|
1869
|
+
return function () {
|
|
1870
|
+
cleanupFunction();
|
|
1871
|
+
};
|
|
1872
|
+
}
|
|
1873
|
+
if (!requested) {
|
|
1874
|
+
// This allow other settings to be set before getDisplay is called.
|
|
1875
|
+
setTimeout(function () {
|
|
1876
|
+
screenRecorder.startRecording();
|
|
1877
|
+
}, 200);
|
|
1878
|
+
}
|
|
1879
|
+
return noop;
|
|
1880
|
+
}, [recorderStatus, error]);
|
|
1881
|
+
};
|
|
1882
|
+
|
|
1883
|
+
var Timer = function Timer() {
|
|
1884
|
+
var _useTranslation = useTranslation(),
|
|
1885
|
+
t = _useTranslation.t;
|
|
1886
|
+
var useRecorderStore = screenRecorder.useRecorderStore;
|
|
1887
|
+
var _useRecorderStore = useRecorderStore(function (store) {
|
|
1888
|
+
return {
|
|
1889
|
+
elapsedTime: store["elapsedTime"]
|
|
1890
|
+
};
|
|
1891
|
+
}, shallow),
|
|
1892
|
+
elapsedTime = _useRecorderStore.elapsedTime;
|
|
1893
|
+
return /*#__PURE__*/jsxs("div", {
|
|
1894
|
+
className: "mb-4 flex flex-col items-center justify-center",
|
|
1895
|
+
"data-testid": "recorder-timer-wrapper",
|
|
1896
|
+
children: [/*#__PURE__*/jsx(Typography, {
|
|
1897
|
+
className: "neeto-ui-text-4xl mb-3 flex justify-center",
|
|
1898
|
+
"data-testid": "recorder-timer-elapsed-time",
|
|
1899
|
+
weight: "semibold",
|
|
1900
|
+
children: getTimeString(elapsedTime)
|
|
1901
|
+
}), /*#__PURE__*/jsx(Typography, {
|
|
1902
|
+
className: "mb-2",
|
|
1903
|
+
"data-testid": "recorder-recording-in-progress-message",
|
|
1904
|
+
variant: "h3",
|
|
1905
|
+
children: t("neetoMediaRecorder.record.inProgress")
|
|
1906
|
+
}), /*#__PURE__*/jsx(Typography, {
|
|
1907
|
+
"data-testid": "recorder-do-not-leave-page-message",
|
|
1908
|
+
variant: "body2",
|
|
1909
|
+
children: t("neetoMediaRecorder.record.doNotLeaveThePage")
|
|
1910
|
+
})]
|
|
1911
|
+
});
|
|
1912
|
+
};
|
|
1913
|
+
|
|
1914
|
+
var UnSupportedBrowser = withT(function (_ref) {
|
|
1915
|
+
var t = _ref.t;
|
|
1916
|
+
return /*#__PURE__*/jsx("div", {
|
|
1917
|
+
className: "flex h-screen w-full items-center justify-center",
|
|
1918
|
+
children: /*#__PURE__*/jsx(Callout, {
|
|
1919
|
+
className: "p-5",
|
|
1920
|
+
"data-testid": "recorder-unsupported-browser-callout",
|
|
1921
|
+
variant: "danger",
|
|
1922
|
+
children: t("neetoMediaRecorder.unsupportedBrowser")
|
|
1923
|
+
})
|
|
1924
|
+
});
|
|
1925
|
+
});
|
|
1926
|
+
|
|
1927
|
+
var UploadingInProgress = function UploadingInProgress(_ref) {
|
|
1928
|
+
var _ref$baseURL = _ref.baseURL,
|
|
1929
|
+
baseURL = _ref$baseURL === void 0 ? "" : _ref$baseURL,
|
|
1930
|
+
recording = _ref.recording,
|
|
1931
|
+
uploadProgress = _ref.uploadProgress,
|
|
1932
|
+
uploadStatus = _ref.uploadStatus,
|
|
1933
|
+
onDiscard = _ref.onDiscard,
|
|
1934
|
+
onRetryUpload = _ref.onRetryUpload,
|
|
1935
|
+
isRetryUpload = _ref.isRetryUpload;
|
|
1936
|
+
var _useState = useState(false),
|
|
1937
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
1938
|
+
isDiscardAlertOpen = _useState2[0],
|
|
1939
|
+
setIsDiscardAlertOpen = _useState2[1];
|
|
1940
|
+
var _useTranslation = useTranslation(),
|
|
1941
|
+
t = _useTranslation.t;
|
|
1942
|
+
var handleRecordingBlobDownload = function handleRecordingBlobDownload() {
|
|
1943
|
+
var _recording$title;
|
|
1944
|
+
downloadRecordingBlob(screenRecorder.getWebmMediaBlob(), (_recording$title = recording.title) !== null && _recording$title !== void 0 ? _recording$title : "NeetoRecord-recording");
|
|
1945
|
+
};
|
|
1946
|
+
return /*#__PURE__*/jsxs("div", {
|
|
1947
|
+
className: "flex h-screen w-full flex-col items-center justify-center",
|
|
1948
|
+
children: [/*#__PURE__*/jsxs("div", {
|
|
1949
|
+
className: "flex h-full w-full flex-col items-center justify-start py-14 lg:py-20 xl:py-28 2xl:py-36",
|
|
1950
|
+
children: [/*#__PURE__*/jsx(DesktopAppCallout, {}), /*#__PURE__*/jsxs("div", {
|
|
1951
|
+
className: "w-full pb-6 text-center",
|
|
1952
|
+
children: [/*#__PURE__*/jsx(Typography, {
|
|
1953
|
+
className: "select-none pb-6",
|
|
1954
|
+
"data-testid": "please-dont-close-this-tab",
|
|
1955
|
+
variant: "h1",
|
|
1956
|
+
children: t("neetoMediaRecorder.record.pleaseDontCloseThisTab")
|
|
1957
|
+
}), /*#__PURE__*/jsx(Typography, {
|
|
1958
|
+
className: "select-none pb-3",
|
|
1959
|
+
"data-testid": "recorder-uploading-recording-message",
|
|
1960
|
+
variant: "h2",
|
|
1961
|
+
weight: "normal",
|
|
1962
|
+
children: t("neetoMediaRecorder.record.uploadingRecording")
|
|
1963
|
+
}), /*#__PURE__*/jsx("div", {
|
|
1964
|
+
className: "nrec-media-upload-progress pb-3",
|
|
1965
|
+
children: uploadStatus === UPLOAD_STATUS.error ? /*#__PURE__*/jsx("div", {
|
|
1966
|
+
className: "nrec-media-upload-error",
|
|
1967
|
+
children: t("neetoMediaRecorder.common.uploadError")
|
|
1968
|
+
}) : /*#__PURE__*/jsx(Progress, {
|
|
1969
|
+
value: uploadProgress
|
|
1970
|
+
})
|
|
1971
|
+
}), /*#__PURE__*/jsx(Typography, {
|
|
1972
|
+
className: "select-none",
|
|
1973
|
+
"data-testid": "recorder-do-not-leave-page-message",
|
|
1974
|
+
variant: "body2",
|
|
1975
|
+
children: t("neetoMediaRecorder.record.copyLinkDescription")
|
|
1976
|
+
})]
|
|
1977
|
+
}), /*#__PURE__*/jsxs("div", {
|
|
1978
|
+
className: "flex flex-wrap items-center justify-center gap-3",
|
|
1979
|
+
children: [/*#__PURE__*/jsx(CopyToClipboardButton, {
|
|
1980
|
+
"data-testid": "recorder-copy-link-button",
|
|
1981
|
+
icon: Copy,
|
|
1982
|
+
label: t("neetoMediaRecorder.record.copyToClipboard"),
|
|
1983
|
+
value: generatePublicUrl(recording.id, baseURL),
|
|
1984
|
+
variant: "secondary"
|
|
1985
|
+
}), /*#__PURE__*/jsx(Button, {
|
|
1986
|
+
"data-testid": "recorder-download-webm-button",
|
|
1987
|
+
icon: Download,
|
|
1988
|
+
variant: "secondary",
|
|
1989
|
+
label: isMp4Supported() ? t("neetoMediaRecorder.record.downloadMp4") : t("neetoMediaRecorder.record.downloadWebm"),
|
|
1990
|
+
onClick: handleRecordingBlobDownload
|
|
1991
|
+
}), /*#__PURE__*/jsx(Button, {
|
|
1992
|
+
"data-testid": "recorder-retry-upload-button",
|
|
1993
|
+
disabled: isRetryUpload,
|
|
1994
|
+
icon: Refresh,
|
|
1995
|
+
label: t("neetoMediaRecorder.record.retry"),
|
|
1996
|
+
variant: "secondary",
|
|
1997
|
+
onClick: onRetryUpload
|
|
1998
|
+
}), /*#__PURE__*/jsx(Button, {
|
|
1999
|
+
"data-testid": "recorder-discard-recording-button",
|
|
2000
|
+
icon: Close,
|
|
2001
|
+
label: t("neetoMediaRecorder.record.discardRecording"),
|
|
2002
|
+
variant: "secondary",
|
|
2003
|
+
onClick: function onClick() {
|
|
2004
|
+
return setIsDiscardAlertOpen(true);
|
|
2005
|
+
}
|
|
2006
|
+
})]
|
|
2007
|
+
})]
|
|
2008
|
+
}), /*#__PURE__*/jsx(Alert, {
|
|
2009
|
+
isOpen: isDiscardAlertOpen,
|
|
2010
|
+
message: t("neetoMediaRecorder.record.discardConfirmation.message"),
|
|
2011
|
+
submitButtonLabel: t("neetoMediaRecorder.record.discard"),
|
|
2012
|
+
title: t("neetoMediaRecorder.record.discardConfirmation.title"),
|
|
2013
|
+
onClose: function onClose() {
|
|
2014
|
+
return setIsDiscardAlertOpen(false);
|
|
2015
|
+
},
|
|
2016
|
+
onSubmit: onDiscard
|
|
2017
|
+
})]
|
|
2018
|
+
});
|
|
2019
|
+
};
|
|
2020
|
+
|
|
2021
|
+
var _window;
|
|
2022
|
+
var recorderLogger = createPrefixedLogger("[MediaRecorder]");
|
|
2023
|
+
var useRecorderStore = screenRecorder.useRecorderStore,
|
|
2024
|
+
restartRecording = screenRecorder.restartRecording,
|
|
2025
|
+
discardRecording = screenRecorder.discardRecording;
|
|
2026
|
+
var globalProps = ((_window = window) === null || _window === void 0 ? void 0 : _window.globalProps) || {};
|
|
2027
|
+
var MediaRecorder$1 = function MediaRecorder(_ref, ref) {
|
|
2028
|
+
var _ref$onUploadComplete = _ref.onUploadComplete,
|
|
2029
|
+
onUploadComplete = _ref$onUploadComplete === void 0 ? noop : _ref$onUploadComplete,
|
|
2030
|
+
_ref$onDiscard = _ref.onDiscard,
|
|
2031
|
+
onDiscard = _ref$onDiscard === void 0 ? noop : _ref$onDiscard,
|
|
2032
|
+
_ref$appName = _ref.appName,
|
|
2033
|
+
appName = _ref$appName === void 0 ? globalProps.appName : _ref$appName,
|
|
2034
|
+
_ref$mimeType = _ref.mimeType,
|
|
2035
|
+
mimeType = _ref$mimeType === void 0 ? getSupportedMimeType() : _ref$mimeType,
|
|
2036
|
+
folderId = _ref.folderId,
|
|
2037
|
+
_ref$isMicOn = _ref.isMicOn,
|
|
2038
|
+
isMicOn = _ref$isMicOn === void 0 ? false : _ref$isMicOn,
|
|
2039
|
+
_ref$onAudioNotCaptur = _ref.onAudioNotCapturing,
|
|
2040
|
+
onAudioNotCapturing = _ref$onAudioNotCaptur === void 0 ? function () {} : _ref$onAudioNotCaptur,
|
|
2041
|
+
_ref$onError = _ref.onError,
|
|
2042
|
+
onError = _ref$onError === void 0 ? function () {} : _ref$onError,
|
|
2043
|
+
_ref$requested = _ref.requested,
|
|
2044
|
+
requested = _ref$requested === void 0 ? false : _ref$requested,
|
|
2045
|
+
_ref$onRecordingCompl = _ref.onRecordingCompleted,
|
|
2046
|
+
onRecordingCompleted = _ref$onRecordingCompl === void 0 ? function () {} : _ref$onRecordingCompl,
|
|
2047
|
+
_ref$requestedUser = _ref.requestedUser,
|
|
2048
|
+
requestedUser = _ref$requestedUser === void 0 ? "" : _ref$requestedUser,
|
|
2049
|
+
_ref$RequestedRecordi = _ref.RequestedRecordingCallback,
|
|
2050
|
+
RequestedRecordingCallback = _ref$RequestedRecordi === void 0 ? noop : _ref$RequestedRecordi;
|
|
2051
|
+
var _useTranslation = useTranslation(),
|
|
2052
|
+
t = _useTranslation.t;
|
|
2053
|
+
var upload = !requested; // For now, for requested recording we are uploading at the end.
|
|
2054
|
+
|
|
2055
|
+
var _useState = useState(false),
|
|
2056
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
2057
|
+
isDiscardAlertOpen = _useState2[0],
|
|
2058
|
+
setIsDiscardAlertOpen = _useState2[1];
|
|
2059
|
+
var _useState3 = useState(false),
|
|
2060
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
2061
|
+
isRestartAlertOpen = _useState4[0],
|
|
2062
|
+
setIsRestartAlertOpen = _useState4[1];
|
|
2063
|
+
var _useState5 = useState(0),
|
|
2064
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
2065
|
+
uploadProgress = _useState6[0],
|
|
2066
|
+
setUploadProgress = _useState6[1];
|
|
2067
|
+
var _useState7 = useState(false),
|
|
2068
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
2069
|
+
isRetryUpload = _useState8[0],
|
|
2070
|
+
setIsRetryUpload = _useState8[1];
|
|
2071
|
+
var _useState9 = useState(""),
|
|
2072
|
+
_useState10 = _slicedToArray(_useState9, 2),
|
|
2073
|
+
baseURL = _useState10[0],
|
|
2074
|
+
setBaseURL = _useState10[1];
|
|
2075
|
+
var recordingRef = useRef({});
|
|
2076
|
+
var baseURLRef = useRef("");
|
|
2077
|
+
// Cleanup tied to the current screenRecorder/multipartS3Uploader wiring.
|
|
2078
|
+
// Lifted out of the wiring useEffect so a restart can tear down the old
|
|
2079
|
+
// wiring synchronously instead of waiting on the aborted uploader's
|
|
2080
|
+
// onAbort callback (which can be 30+ seconds on a flaky network).
|
|
2081
|
+
var activeCleanupRef = useRef(noop);
|
|
2082
|
+
useEffect(function () {
|
|
2083
|
+
var fetchBaseURL = /*#__PURE__*/function () {
|
|
2084
|
+
var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
2085
|
+
var origin, _yield$chrome$storage, extensionBaseURL;
|
|
2086
|
+
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
2087
|
+
while (1) switch (_context.prev = _context.next) {
|
|
2088
|
+
case 0:
|
|
2089
|
+
if (IS_EXTENSION) {
|
|
2090
|
+
_context.next = 5;
|
|
2091
|
+
break;
|
|
2092
|
+
}
|
|
2093
|
+
origin = window.location.origin;
|
|
2094
|
+
baseURLRef.current = origin;
|
|
2095
|
+
setBaseURL(origin);
|
|
2096
|
+
return _context.abrupt("return");
|
|
2097
|
+
case 5:
|
|
2098
|
+
_context.next = 7;
|
|
2099
|
+
return chrome.storage.local.get("baseURL");
|
|
2100
|
+
case 7:
|
|
2101
|
+
_yield$chrome$storage = _context.sent;
|
|
2102
|
+
extensionBaseURL = _yield$chrome$storage.baseURL;
|
|
2103
|
+
baseURLRef.current = extensionBaseURL || "";
|
|
2104
|
+
setBaseURL(extensionBaseURL || "");
|
|
2105
|
+
case 11:
|
|
2106
|
+
case "end":
|
|
2107
|
+
return _context.stop();
|
|
2108
|
+
}
|
|
2109
|
+
}, _callee);
|
|
2110
|
+
}));
|
|
2111
|
+
return function fetchBaseURL() {
|
|
2112
|
+
return _ref2.apply(this, arguments);
|
|
2113
|
+
};
|
|
2114
|
+
}();
|
|
2115
|
+
fetchBaseURL();
|
|
2116
|
+
}, []);
|
|
2117
|
+
var _useAudioIsCapturing = useAudioIsCapturing({
|
|
2118
|
+
isMicOn: isMicOn
|
|
2119
|
+
}),
|
|
2120
|
+
hasAudio = _useAudioIsCapturing.hasAudio,
|
|
2121
|
+
reset = _useAudioIsCapturing.reset;
|
|
2122
|
+
useEffect(function () {
|
|
2123
|
+
if (hasAudio) return;
|
|
2124
|
+
onAudioNotCapturing();
|
|
2125
|
+
setTimeout(function () {
|
|
2126
|
+
reset();
|
|
2127
|
+
}, 1000);
|
|
2128
|
+
}, [hasAudio]);
|
|
2129
|
+
|
|
2130
|
+
/**
|
|
2131
|
+
* @type {React.RefObject<Promise<unknown> | null>}
|
|
2132
|
+
*/
|
|
2133
|
+
var createRecordingPromise = useRef(null);
|
|
2134
|
+
var _useRecorderStore = useRecorderStore(function (store) {
|
|
2135
|
+
return {
|
|
2136
|
+
status: store["status"],
|
|
2137
|
+
error: store["error"],
|
|
2138
|
+
countdownTimeLeft: store["countdownTimeLeft"],
|
|
2139
|
+
showTimeLimitWarning: store["showTimeLimitWarning"],
|
|
2140
|
+
elapsedTime: store["elapsedTime"]
|
|
2141
|
+
};
|
|
2142
|
+
}, shallow),
|
|
2143
|
+
recorderStatus = _useRecorderStore.status,
|
|
2144
|
+
error = _useRecorderStore.error,
|
|
2145
|
+
countdownTimeLeft = _useRecorderStore.countdownTimeLeft,
|
|
2146
|
+
showTimeLimitWarning = _useRecorderStore.showTimeLimitWarning,
|
|
2147
|
+
elapsedTime = _useRecorderStore.elapsedTime;
|
|
2148
|
+
var _useRecorderStatus = useRecorderStatus(),
|
|
2149
|
+
isRecorderStatus = _useRecorderStatus.isStatus;
|
|
2150
|
+
var _useMultipartS3Upload = useMultipartS3UploadStatus(),
|
|
2151
|
+
isUploadStatus = _useMultipartS3Upload.isStatus,
|
|
2152
|
+
uploadStatus = _useMultipartS3Upload.status;
|
|
2153
|
+
var shouldShowTimeLimitWarning = showTimeLimitWarning && isRecorderStatus(SCREEN_RECORDER_STATUS.recording, SCREEN_RECORDER_STATUS.paused);
|
|
2154
|
+
var _useCreateRecording = useCreateRecording({
|
|
2155
|
+
onSuccess: function onSuccess(_ref3) {
|
|
2156
|
+
var recording = _ref3.recording,
|
|
2157
|
+
uploadId = _ref3.uploadId;
|
|
2158
|
+
var multipartS3Uploader = getMultipartS3Uploader();
|
|
2159
|
+
multipartS3Uploader.setRecording(recording.id, uploadId);
|
|
2160
|
+
multipartS3Uploader.setMimeType(mimeType);
|
|
2161
|
+
var uploadStatus = multipartS3Uploader.status;
|
|
2162
|
+
var recorderStatus = useRecorderStore.getState().status;
|
|
2163
|
+
if (uploadStatus === UPLOAD_STATUS$1.uploading || isRetryUpload) {
|
|
2164
|
+
setIsRetryUpload(false);
|
|
2165
|
+
multipartS3Uploader.completeUpload();
|
|
2166
|
+
} else if (hasRecordingDiscarded({
|
|
2167
|
+
recorderStatus: recorderStatus,
|
|
2168
|
+
uploadStatus: uploadStatus
|
|
2169
|
+
})) {
|
|
2170
|
+
handleDiscardRecording({
|
|
2171
|
+
forceAbort: true
|
|
2172
|
+
});
|
|
2173
|
+
}
|
|
2174
|
+
},
|
|
2175
|
+
enabled: upload
|
|
2176
|
+
}),
|
|
2177
|
+
createRecording = _useCreateRecording.mutateAsync,
|
|
2178
|
+
isCreatingRecording = _useCreateRecording.isPending,
|
|
2179
|
+
_useCreateRecording$d = _useCreateRecording.data,
|
|
2180
|
+
_useCreateRecording$d2 = _useCreateRecording$d === void 0 ? {} : _useCreateRecording$d,
|
|
2181
|
+
_useCreateRecording$d3 = _useCreateRecording$d2.recording,
|
|
2182
|
+
recording = _useCreateRecording$d3 === void 0 ? {} : _useCreateRecording$d3;
|
|
2183
|
+
useEffect(function () {
|
|
2184
|
+
var elapsedTimeInSec = Math.round(elapsedTime / 1000);
|
|
2185
|
+
var checkDelay = 7; // we get data every 5 sec, 7 for safety
|
|
2186
|
+
// If data is insufficient after n secs, there is some issue with media recorder, discard.
|
|
2187
|
+
if (elapsedTimeInSec < checkDelay) return;
|
|
2188
|
+
if (!screenRecorder.hasData() && recorderStatus === SCREEN_RECORDER_STATUS.recording) {
|
|
2189
|
+
screenRecorder.setError(SCREEN_RECORDER_ERROR.InsufficientData);
|
|
2190
|
+
onError(SCREEN_RECORDER_ERROR.InsufficientData);
|
|
2191
|
+
}
|
|
2192
|
+
}, [elapsedTime]);
|
|
2193
|
+
var handleCreateRecordingError = function handleCreateRecordingError(error) {
|
|
2194
|
+
var _error$response, _error$response2;
|
|
2195
|
+
if (isCancelledError(error)) {
|
|
2196
|
+
recorderLogger.info("handleCreateRecording -> cancelled");
|
|
2197
|
+
return;
|
|
2198
|
+
}
|
|
2199
|
+
recorderLogger.error("handleCreateRecording -> failed", {
|
|
2200
|
+
name: error === null || error === void 0 ? void 0 : error.name,
|
|
2201
|
+
message: error === null || error === void 0 ? void 0 : error.message,
|
|
2202
|
+
code: error === null || error === void 0 ? void 0 : error.code,
|
|
2203
|
+
responseStatus: error === null || error === void 0 ? void 0 : (_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.status,
|
|
2204
|
+
responseStatusText: error === null || error === void 0 ? void 0 : (_error$response2 = error.response) === null || _error$response2 === void 0 ? void 0 : _error$response2.statusText,
|
|
2205
|
+
stack: error === null || error === void 0 ? void 0 : error.stack
|
|
2206
|
+
});
|
|
2207
|
+
screenRecorder.setError(SCREEN_RECORDER_ERROR.CreateRecordingError);
|
|
2208
|
+
onError(SCREEN_RECORDER_ERROR.CreateRecordingError);
|
|
2209
|
+
};
|
|
2210
|
+
var handleCreateRecording = function handleCreateRecording() {
|
|
2211
|
+
if (!upload) return;
|
|
2212
|
+
recordingRef.current = {};
|
|
2213
|
+
createRecordingPromise.current = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
|
|
2214
|
+
var payload, result;
|
|
2215
|
+
return _regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
2216
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
2217
|
+
case 0:
|
|
2218
|
+
_context2.prev = 0;
|
|
2219
|
+
payload = {
|
|
2220
|
+
folderId: folderId
|
|
2221
|
+
};
|
|
2222
|
+
_context2.next = 4;
|
|
2223
|
+
return getDeviceInfo(mimeType);
|
|
2224
|
+
case 4:
|
|
2225
|
+
payload.deviceInfo = _context2.sent;
|
|
2226
|
+
_context2.next = 7;
|
|
2227
|
+
return createRecording(payload);
|
|
2228
|
+
case 7:
|
|
2229
|
+
result = _context2.sent;
|
|
2230
|
+
if (result !== null && result !== void 0 && result.recording) recordingRef.current = result.recording;
|
|
2231
|
+
_context2.next = 14;
|
|
2232
|
+
break;
|
|
2233
|
+
case 11:
|
|
2234
|
+
_context2.prev = 11;
|
|
2235
|
+
_context2.t0 = _context2["catch"](0);
|
|
2236
|
+
handleCreateRecordingError(_context2.t0);
|
|
2237
|
+
case 14:
|
|
2238
|
+
case "end":
|
|
2239
|
+
return _context2.stop();
|
|
2240
|
+
}
|
|
2241
|
+
}, _callee2, null, [[0, 11]]);
|
|
2242
|
+
}))();
|
|
2243
|
+
};
|
|
2244
|
+
var handleStopRecording = function handleStopRecording() {
|
|
2245
|
+
if (upload) {
|
|
2246
|
+
copyRecordingLinkToClipboardOnStop({
|
|
2247
|
+
createRecordingPromise: createRecordingPromise,
|
|
2248
|
+
recordingRef: recordingRef,
|
|
2249
|
+
baseURLRef: baseURLRef,
|
|
2250
|
+
successMessage: t("neetoMediaRecorder.record.copyToClipboardToastrMessage")
|
|
2251
|
+
});
|
|
2252
|
+
}
|
|
2253
|
+
screenRecorder.stopRecording();
|
|
2254
|
+
};
|
|
2255
|
+
var handleUploadComplete = function handleUploadComplete() {
|
|
2256
|
+
var _recordingRef$current;
|
|
2257
|
+
return onUploadComplete((_recordingRef$current = recordingRef.current) === null || _recordingRef$current === void 0 ? void 0 : _recordingRef$current.id);
|
|
2258
|
+
};
|
|
2259
|
+
var handleDiscardRecording = /*#__PURE__*/function () {
|
|
2260
|
+
var _ref5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
|
|
2261
|
+
var _ref6,
|
|
2262
|
+
_ref6$forceAbort,
|
|
2263
|
+
forceAbort,
|
|
2264
|
+
multipartS3Uploader,
|
|
2265
|
+
_args3 = arguments;
|
|
2266
|
+
return _regeneratorRuntime.wrap(function _callee3$(_context3) {
|
|
2267
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
2268
|
+
case 0:
|
|
2269
|
+
_ref6 = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : {}, _ref6$forceAbort = _ref6.forceAbort, forceAbort = _ref6$forceAbort === void 0 ? false : _ref6$forceAbort;
|
|
2270
|
+
if (upload) {
|
|
2271
|
+
_context3.next = 4;
|
|
2272
|
+
break;
|
|
2273
|
+
}
|
|
2274
|
+
onDiscard();
|
|
2275
|
+
return _context3.abrupt("return");
|
|
2276
|
+
case 4:
|
|
2277
|
+
multipartS3Uploader = getMultipartS3Uploader();
|
|
2278
|
+
_context3.next = 7;
|
|
2279
|
+
return multipartS3Uploader.abortUpload(forceAbort);
|
|
2280
|
+
case 7:
|
|
2281
|
+
if (!(multipartS3Uploader.status === UPLOAD_STATUS$1.aborting)) {
|
|
2282
|
+
_context3.next = 9;
|
|
2283
|
+
break;
|
|
2284
|
+
}
|
|
2285
|
+
return _context3.abrupt("return");
|
|
2286
|
+
case 9:
|
|
2287
|
+
onDiscard();
|
|
2288
|
+
case 10:
|
|
2289
|
+
case "end":
|
|
2290
|
+
return _context3.stop();
|
|
2291
|
+
}
|
|
2292
|
+
}, _callee3);
|
|
2293
|
+
}));
|
|
2294
|
+
return function handleDiscardRecording() {
|
|
2295
|
+
return _ref5.apply(this, arguments);
|
|
2296
|
+
};
|
|
2297
|
+
}();
|
|
2298
|
+
var handleRestartRecording = function handleRestartRecording() {
|
|
2299
|
+
if (!upload) return;
|
|
2300
|
+
// Detach the old uploader's push/onStop/etc. from the screenRecorder
|
|
2301
|
+
// before abortUpload runs. Otherwise the restarted MediaRecorder's
|
|
2302
|
+
// chunks would fan out to both the aborting old uploader and the new
|
|
2303
|
+
// one — and the old uploader wouldn't release its push registration
|
|
2304
|
+
// until its onAbort callback fired.
|
|
2305
|
+
activeCleanupRef.current();
|
|
2306
|
+
activeCleanupRef.current = noop;
|
|
2307
|
+
getMultipartS3Uploader().abortUpload();
|
|
2308
|
+
};
|
|
2309
|
+
var onDiscardAlertClose = function onDiscardAlertClose() {
|
|
2310
|
+
return setIsDiscardAlertOpen(false);
|
|
2311
|
+
};
|
|
2312
|
+
var onRestartAlertClose = function onRestartAlertClose() {
|
|
2313
|
+
return setIsRestartAlertOpen(false);
|
|
2314
|
+
};
|
|
2315
|
+
var handleConfirmDiscard = function handleConfirmDiscard() {
|
|
2316
|
+
discardRecording();
|
|
2317
|
+
onDiscardAlertClose();
|
|
2318
|
+
};
|
|
2319
|
+
var handleConfirmRestart = function handleConfirmRestart() {
|
|
2320
|
+
restartRecording();
|
|
2321
|
+
onRestartAlertClose();
|
|
2322
|
+
};
|
|
2323
|
+
var handleUploadError = function handleUploadError() {
|
|
2324
|
+
setUploadProgress(0);
|
|
2325
|
+
};
|
|
2326
|
+
var handleUploadProgress = function handleUploadProgress(progress) {
|
|
2327
|
+
setUploadProgress(progress);
|
|
2328
|
+
};
|
|
2329
|
+
var handleReUpload = function handleReUpload() {
|
|
2330
|
+
var _uploaderCallbacks;
|
|
2331
|
+
if (!upload) return;
|
|
2332
|
+
var multipartS3Uploader = getMultipartS3Uploader();
|
|
2333
|
+
setIsRetryUpload(true);
|
|
2334
|
+
setUploadProgress(0);
|
|
2335
|
+
multipartS3Uploader.abortUpload();
|
|
2336
|
+
|
|
2337
|
+
// Create a new multipartS3Uploader instance to push the blob
|
|
2338
|
+
var newMultipartS3Uploader = getMultipartS3Uploader({
|
|
2339
|
+
initialize: true
|
|
2340
|
+
});
|
|
2341
|
+
newMultipartS3Uploader.push(screenRecorder.getWebmMediaBlob());
|
|
2342
|
+
|
|
2343
|
+
// Attach callbacks to the new multipartS3Uploader instance
|
|
2344
|
+
var uploaderCallbacks = (_uploaderCallbacks = {}, _defineProperty(_uploaderCallbacks, UPLOAD_EVENT.onComplete, handleUploadComplete), _defineProperty(_uploaderCallbacks, UPLOAD_EVENT.onError, handleUploadError), _defineProperty(_uploaderCallbacks, UPLOAD_EVENT.onProgress, handleUploadProgress), _defineProperty(_uploaderCallbacks, UPLOAD_EVENT.onAbort, function () {
|
|
2345
|
+
Object.keys(uploaderCallbacks).forEach(function (key) {
|
|
2346
|
+
multipartS3Uploader.removeCallback(key, uploaderCallbacks[key]);
|
|
2347
|
+
});
|
|
2348
|
+
multipartS3Uploader.removeCallback(UPLOAD_EVENT.onAbort, uploaderCallbacks[UPLOAD_EVENT.onAbort]);
|
|
2349
|
+
}), _uploaderCallbacks);
|
|
2350
|
+
Object.keys(uploaderCallbacks).forEach(function (key) {
|
|
2351
|
+
newMultipartS3Uploader.addCallback(key, uploaderCallbacks[key]);
|
|
2352
|
+
});
|
|
2353
|
+
handleCreateRecording();
|
|
2354
|
+
copyRecordingLinkToClipboardOnStop({
|
|
2355
|
+
createRecordingPromise: createRecordingPromise,
|
|
2356
|
+
recordingRef: recordingRef,
|
|
2357
|
+
baseURLRef: baseURLRef,
|
|
2358
|
+
successMessage: t("neetoMediaRecorder.record.copyToClipboardToastrMessage")
|
|
2359
|
+
});
|
|
2360
|
+
};
|
|
2361
|
+
useImperativeHandle(ref, function () {
|
|
2362
|
+
return {
|
|
2363
|
+
handleDiscardRecording: function handleDiscardRecording() {
|
|
2364
|
+
return setIsDiscardAlertOpen(true);
|
|
2365
|
+
},
|
|
2366
|
+
handleRestartRecording: function handleRestartRecording() {
|
|
2367
|
+
return setIsRestartAlertOpen(true);
|
|
2368
|
+
}
|
|
2369
|
+
};
|
|
2370
|
+
});
|
|
2371
|
+
useHandleErrors({
|
|
2372
|
+
error: error,
|
|
2373
|
+
recorderStatus: recorderStatus,
|
|
2374
|
+
requested: requested
|
|
2375
|
+
});
|
|
2376
|
+
useEffect(function () {
|
|
2377
|
+
var handleOnScreenRecorderStart = function handleOnScreenRecorderStart() {
|
|
2378
|
+
var _recorderCallbacks, _uploaderCallbacks2;
|
|
2379
|
+
// Tear down any wiring left over from a previous start before adding
|
|
2380
|
+
// a fresh set. Safe to call even on the very first start (noop).
|
|
2381
|
+
activeCleanupRef.current();
|
|
2382
|
+
var multipartS3Uploader = upload ? getMultipartS3Uploader({
|
|
2383
|
+
initialize: true
|
|
2384
|
+
}) : null;
|
|
2385
|
+
var recorderCallbacks = (_recorderCallbacks = {}, _defineProperty(_recorderCallbacks, SCREEN_RECORDER_EVENT.onDataAvailable, upload ? multipartS3Uploader.push : noop), _defineProperty(_recorderCallbacks, SCREEN_RECORDER_EVENT.onStop, _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
|
|
2386
|
+
var blob;
|
|
2387
|
+
return _regeneratorRuntime.wrap(function _callee4$(_context4) {
|
|
2388
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
2389
|
+
case 0:
|
|
2390
|
+
if (upload) {
|
|
2391
|
+
_context4.next = 5;
|
|
2392
|
+
break;
|
|
2393
|
+
}
|
|
2394
|
+
blob = screenRecorder.getWebmMediaBlob();
|
|
2395
|
+
RequestedRecordingCallback(blob);
|
|
2396
|
+
onRecordingCompleted(blob);
|
|
2397
|
+
return _context4.abrupt("return");
|
|
2398
|
+
case 5:
|
|
2399
|
+
if (!createRecordingPromise.current) {
|
|
2400
|
+
_context4.next = 9;
|
|
2401
|
+
break;
|
|
2402
|
+
}
|
|
2403
|
+
_context4.next = 8;
|
|
2404
|
+
return createRecordingPromise.current;
|
|
2405
|
+
case 8:
|
|
2406
|
+
createRecordingPromise.current = null;
|
|
2407
|
+
case 9:
|
|
2408
|
+
multipartS3Uploader.completeUpload();
|
|
2409
|
+
case 10:
|
|
2410
|
+
case "end":
|
|
2411
|
+
return _context4.stop();
|
|
2412
|
+
}
|
|
2413
|
+
}, _callee4);
|
|
2414
|
+
}))), _defineProperty(_recorderCallbacks, SCREEN_RECORDER_EVENT.onDiscard, handleDiscardRecording), _defineProperty(_recorderCallbacks, SCREEN_RECORDER_EVENT.onRestart, handleRestartRecording), _recorderCallbacks);
|
|
2415
|
+
Object.keys(recorderCallbacks).forEach(function (key) {
|
|
2416
|
+
screenRecorder.addCallback(key, recorderCallbacks[key]);
|
|
2417
|
+
});
|
|
2418
|
+
if (!upload) {
|
|
2419
|
+
activeCleanupRef.current = function () {
|
|
2420
|
+
Object.keys(recorderCallbacks).forEach(function (key) {
|
|
2421
|
+
screenRecorder.removeCallback(key, recorderCallbacks[key]);
|
|
2422
|
+
});
|
|
2423
|
+
activeCleanupRef.current = noop;
|
|
2424
|
+
};
|
|
2425
|
+
return;
|
|
2426
|
+
}
|
|
2427
|
+
var uploaderCallbacks = (_uploaderCallbacks2 = {}, _defineProperty(_uploaderCallbacks2, UPLOAD_EVENT.onComplete, handleUploadComplete), _defineProperty(_uploaderCallbacks2, UPLOAD_EVENT.onError, handleUploadError), _defineProperty(_uploaderCallbacks2, UPLOAD_EVENT.onProgress, handleUploadProgress), _uploaderCallbacks2);
|
|
2428
|
+
Object.keys(uploaderCallbacks).forEach(function (key) {
|
|
2429
|
+
multipartS3Uploader.addCallback(key, uploaderCallbacks[key]);
|
|
2430
|
+
});
|
|
2431
|
+
var cleanupFunction = function cleanupFunction() {
|
|
2432
|
+
Object.keys(recorderCallbacks).forEach(function (key) {
|
|
2433
|
+
screenRecorder.removeCallback(key, recorderCallbacks[key]);
|
|
2434
|
+
});
|
|
2435
|
+
Object.keys(uploaderCallbacks).forEach(function (key) {
|
|
2436
|
+
multipartS3Uploader.removeCallback(key, uploaderCallbacks[key]);
|
|
2437
|
+
});
|
|
2438
|
+
multipartS3Uploader.removeCallback(UPLOAD_EVENT.onAbort, cleanupFunction);
|
|
2439
|
+
if (activeCleanupRef.current === cleanupFunction) {
|
|
2440
|
+
activeCleanupRef.current = noop;
|
|
2441
|
+
}
|
|
2442
|
+
};
|
|
2443
|
+
activeCleanupRef.current = cleanupFunction;
|
|
2444
|
+
multipartS3Uploader.addCallback(UPLOAD_EVENT.onAbort, cleanupFunction);
|
|
2445
|
+
handleCreateRecording();
|
|
2446
|
+
};
|
|
2447
|
+
screenRecorder.addCallback(SCREEN_RECORDER_EVENT.onStart, handleOnScreenRecorderStart);
|
|
2448
|
+
screenRecorder.addCallback(SCREEN_RECORDER_EVENT.onDiscardDuringCountdown, onDiscard);
|
|
2449
|
+
return function () {
|
|
2450
|
+
screenRecorder.revokePermissions();
|
|
2451
|
+
screenRecorder.resetState();
|
|
2452
|
+
activeCleanupRef.current();
|
|
2453
|
+
};
|
|
2454
|
+
}, []);
|
|
2455
|
+
useEffect(function () {
|
|
2456
|
+
if (!isUploadStatus(UPLOAD_STATUS$1.insufficient_data)) return;
|
|
2457
|
+
handleDiscardRecording();
|
|
2458
|
+
}, [uploadStatus]);
|
|
2459
|
+
var shouldShowSafariExtensionCalloutToStartRecording = isRecorderStatus(SCREEN_RECORDER_STATUS.idle) && IS_SAFARI_EXTENSION && error === SCREEN_RECORDER_ERROR.None;
|
|
2460
|
+
var isBeingUploadedOrHasErrorUploading = isUploadStatus(UPLOAD_STATUS$1.uploading, UPLOAD_STATUS$1.error);
|
|
2461
|
+
|
|
2462
|
+
// --- jsx ---
|
|
2463
|
+
|
|
2464
|
+
if (error === SCREEN_RECORDER_ERROR.UnSupportedBrowser) {
|
|
2465
|
+
return /*#__PURE__*/jsx(UnSupportedBrowser, {});
|
|
2466
|
+
}
|
|
2467
|
+
if (error === SCREEN_RECORDER_ERROR.FailedToStart || error === SCREEN_RECORDER_ERROR.CreateRecordingError) {
|
|
2468
|
+
return /*#__PURE__*/jsx(FailedToStart, {});
|
|
2469
|
+
}
|
|
2470
|
+
if (hasRecordingDiscarded({
|
|
2471
|
+
recorderStatus: recorderStatus,
|
|
2472
|
+
uploadStatus: uploadStatus
|
|
2473
|
+
})) {
|
|
2474
|
+
return /*#__PURE__*/jsx(AbortUpload, {});
|
|
2475
|
+
}
|
|
2476
|
+
if (isRetryUpload || isRecorderStatus(SCREEN_RECORDER_STATUS.stopped) && (isCreatingRecording || isBeingUploadedOrHasErrorUploading)) {
|
|
2477
|
+
return /*#__PURE__*/jsx(UploadingInProgress, {
|
|
2478
|
+
baseURL: baseURL,
|
|
2479
|
+
isRetryUpload: isRetryUpload,
|
|
2480
|
+
recording: recording,
|
|
2481
|
+
uploadProgress: uploadProgress,
|
|
2482
|
+
uploadStatus: uploadStatus,
|
|
2483
|
+
onDiscard: handleDiscardRecording,
|
|
2484
|
+
onRetryUpload: handleReUpload
|
|
2485
|
+
});
|
|
2486
|
+
}
|
|
2487
|
+
if (isRecorderStatus(SCREEN_RECORDER_STATUS.stopped) && upload && isUploadStatus(UPLOAD_STATUS$1.completed)) {
|
|
2488
|
+
return /*#__PURE__*/jsxs("div", {
|
|
2489
|
+
className: "h-screen w-full",
|
|
2490
|
+
children: [/*#__PURE__*/jsx(DesktopAppCallout, {}), /*#__PURE__*/jsx(PageLoader, {})]
|
|
2491
|
+
});
|
|
2492
|
+
}
|
|
2493
|
+
return /*#__PURE__*/jsxs("div", {
|
|
2494
|
+
className: "flex h-screen w-full flex-col items-center justify-start py-10 xl:py-14 2xl:py-20",
|
|
2495
|
+
children: [/*#__PURE__*/jsxs("div", {
|
|
2496
|
+
className: "w-full max-w-3xl",
|
|
2497
|
+
children: [/*#__PURE__*/jsx(Callouts, {
|
|
2498
|
+
appName: appName,
|
|
2499
|
+
elapsedTime: elapsedTime,
|
|
2500
|
+
error: error,
|
|
2501
|
+
isRecorderStatus: isRecorderStatus,
|
|
2502
|
+
requested: requested,
|
|
2503
|
+
requestedUser: requestedUser,
|
|
2504
|
+
shouldShowSafariExtensionCalloutToStartRecording: shouldShowSafariExtensionCalloutToStartRecording,
|
|
2505
|
+
shouldShowTimeLimitWarning: shouldShowTimeLimitWarning
|
|
2506
|
+
}), isRecorderStatus(SCREEN_RECORDER_STATUS.media_acquired, SCREEN_RECORDER_STATUS.restarting) && /*#__PURE__*/jsx(Countdown, {
|
|
2507
|
+
countdownTimeLeft: countdownTimeLeft
|
|
2508
|
+
}), isRecorderStatus(SCREEN_RECORDER_STATUS.recording, SCREEN_RECORDER_STATUS.paused) && /*#__PURE__*/jsx(Timer, {})]
|
|
2509
|
+
}), /*#__PURE__*/jsx(Controls, {
|
|
2510
|
+
appName: appName,
|
|
2511
|
+
onDiscard: onDiscard,
|
|
2512
|
+
requested: requested,
|
|
2513
|
+
setIsDiscardAlertOpen: setIsDiscardAlertOpen,
|
|
2514
|
+
setIsRestartAlertOpen: setIsRestartAlertOpen,
|
|
2515
|
+
onStopRecording: handleStopRecording
|
|
2516
|
+
}), /*#__PURE__*/jsx(Alert, {
|
|
2517
|
+
isOpen: isDiscardAlertOpen,
|
|
2518
|
+
message: t("neetoMediaRecorder.record.discardConfirmation.message"),
|
|
2519
|
+
submitButtonLabel: t("neetoMediaRecorder.record.discard"),
|
|
2520
|
+
title: t("neetoMediaRecorder.record.discardConfirmation.title"),
|
|
2521
|
+
onClose: onDiscardAlertClose,
|
|
2522
|
+
onSubmit: handleConfirmDiscard
|
|
2523
|
+
}), /*#__PURE__*/jsx(Alert, {
|
|
2524
|
+
isOpen: isRestartAlertOpen,
|
|
2525
|
+
message: t("neetoMediaRecorder.record.restartConfirmation.message"),
|
|
2526
|
+
submitButtonLabel: t("neetoMediaRecorder.record.restart"),
|
|
2527
|
+
title: t("neetoMediaRecorder.record.restartConfirmation.title"),
|
|
2528
|
+
onClose: onRestartAlertClose,
|
|
2529
|
+
onSubmit: handleConfirmRestart
|
|
2530
|
+
})]
|
|
2531
|
+
});
|
|
2532
|
+
};
|
|
2533
|
+
var index = /*#__PURE__*/forwardRef(MediaRecorder$1);
|
|
2534
|
+
|
|
2535
|
+
export { index as MediaRecorder };
|
|
2536
|
+
//# sourceMappingURL=index.js.map
|