@bigbinary/neeto-media-recorder 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.js ADDED
@@ -0,0 +1,1422 @@
1
+ import axios from 'axios';
2
+ import { isNot, existsBy, isNotEmpty } from 'neetocist';
3
+ import { identity, isNil, pick } from 'ramda';
4
+ import { withImmutableActions } from 'neetocommons/react-utils';
5
+ import { create as create$3 } from 'zustand';
6
+
7
+ function _arrayLikeToArray(arr, len) {
8
+ if (len == null || len > arr.length) len = arr.length;
9
+ for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
10
+ return arr2;
11
+ }
12
+
13
+ function _arrayWithoutHoles(arr) {
14
+ if (Array.isArray(arr)) return _arrayLikeToArray(arr);
15
+ }
16
+
17
+ function _iterableToArray(iter) {
18
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
19
+ }
20
+
21
+ function _unsupportedIterableToArray(o, minLen) {
22
+ if (!o) return;
23
+ if (typeof o === "string") return _arrayLikeToArray(o, minLen);
24
+ var n = Object.prototype.toString.call(o).slice(8, -1);
25
+ if (n === "Object" && o.constructor) n = o.constructor.name;
26
+ if (n === "Map" || n === "Set") return Array.from(o);
27
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
28
+ }
29
+
30
+ function _nonIterableSpread() {
31
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
32
+ }
33
+
34
+ function _toConsumableArray(arr) {
35
+ return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
36
+ }
37
+
38
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
39
+ try {
40
+ var info = gen[key](arg);
41
+ var value = info.value;
42
+ } catch (error) {
43
+ reject(error);
44
+ return;
45
+ }
46
+ if (info.done) {
47
+ resolve(value);
48
+ } else {
49
+ Promise.resolve(value).then(_next, _throw);
50
+ }
51
+ }
52
+ function _asyncToGenerator(fn) {
53
+ return function () {
54
+ var self = this,
55
+ args = arguments;
56
+ return new Promise(function (resolve, reject) {
57
+ var gen = fn.apply(self, args);
58
+ function _next(value) {
59
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
60
+ }
61
+ function _throw(err) {
62
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
63
+ }
64
+ _next(undefined);
65
+ });
66
+ };
67
+ }
68
+
69
+ function _classCallCheck(instance, Constructor) {
70
+ if (!(instance instanceof Constructor)) {
71
+ throw new TypeError("Cannot call a class as a function");
72
+ }
73
+ }
74
+
75
+ function _typeof$1(obj) {
76
+ "@babel/helpers - typeof";
77
+
78
+ return _typeof$1 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
79
+ return typeof obj;
80
+ } : function (obj) {
81
+ return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
82
+ }, _typeof$1(obj);
83
+ }
84
+
85
+ function _toPrimitive(input, hint) {
86
+ if (_typeof$1(input) !== "object" || input === null) return input;
87
+ var prim = input[Symbol.toPrimitive];
88
+ if (prim !== undefined) {
89
+ var res = prim.call(input, hint || "default");
90
+ if (_typeof$1(res) !== "object") return res;
91
+ throw new TypeError("@@toPrimitive must return a primitive value.");
92
+ }
93
+ return (hint === "string" ? String : Number)(input);
94
+ }
95
+
96
+ function _toPropertyKey(arg) {
97
+ var key = _toPrimitive(arg, "string");
98
+ return _typeof$1(key) === "symbol" ? key : String(key);
99
+ }
100
+
101
+ function _defineProperties(target, props) {
102
+ for (var i = 0; i < props.length; i++) {
103
+ var descriptor = props[i];
104
+ descriptor.enumerable = descriptor.enumerable || false;
105
+ descriptor.configurable = true;
106
+ if ("value" in descriptor) descriptor.writable = true;
107
+ Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);
108
+ }
109
+ }
110
+ function _createClass(Constructor, protoProps, staticProps) {
111
+ if (protoProps) _defineProperties(Constructor.prototype, protoProps);
112
+ if (staticProps) _defineProperties(Constructor, staticProps);
113
+ Object.defineProperty(Constructor, "prototype", {
114
+ writable: false
115
+ });
116
+ return Constructor;
117
+ }
118
+
119
+ function _defineProperty(obj, key, value) {
120
+ key = _toPropertyKey(key);
121
+ if (key in obj) {
122
+ Object.defineProperty(obj, key, {
123
+ value: value,
124
+ enumerable: true,
125
+ configurable: true,
126
+ writable: true
127
+ });
128
+ } else {
129
+ obj[key] = value;
130
+ }
131
+ return obj;
132
+ }
133
+
134
+ function _classApplyDescriptorGet(receiver, descriptor) {
135
+ if (descriptor.get) {
136
+ return descriptor.get.call(receiver);
137
+ }
138
+ return descriptor.value;
139
+ }
140
+
141
+ function _classExtractFieldDescriptor(receiver, privateMap, action) {
142
+ if (!privateMap.has(receiver)) {
143
+ throw new TypeError("attempted to " + action + " private field on non-instance");
144
+ }
145
+ return privateMap.get(receiver);
146
+ }
147
+
148
+ function _classPrivateFieldGet(receiver, privateMap) {
149
+ var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get");
150
+ return _classApplyDescriptorGet(receiver, descriptor);
151
+ }
152
+
153
+ function _classApplyDescriptorSet(receiver, descriptor, value) {
154
+ if (descriptor.set) {
155
+ descriptor.set.call(receiver, value);
156
+ } else {
157
+ if (!descriptor.writable) {
158
+ throw new TypeError("attempted to set read only private field");
159
+ }
160
+ descriptor.value = value;
161
+ }
162
+ }
163
+
164
+ function _classPrivateFieldSet(receiver, privateMap, value) {
165
+ var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set");
166
+ _classApplyDescriptorSet(receiver, descriptor, value);
167
+ return value;
168
+ }
169
+
170
+ function getDefaultExportFromCjs (x) {
171
+ return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
172
+ }
173
+
174
+ var regeneratorRuntime$1 = {exports: {}};
175
+
176
+ var _typeof = {exports: {}};
177
+
178
+ _typeof.exports;
179
+
180
+ (function (module) {
181
+ function _typeof(obj) {
182
+ "@babel/helpers - typeof";
183
+
184
+ return (module.exports = _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
185
+ return typeof obj;
186
+ } : function (obj) {
187
+ return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
188
+ }, module.exports.__esModule = true, module.exports["default"] = module.exports), _typeof(obj);
189
+ }
190
+ module.exports = _typeof, module.exports.__esModule = true, module.exports["default"] = module.exports;
191
+ } (_typeof));
192
+
193
+ var _typeofExports = _typeof.exports;
194
+
195
+ regeneratorRuntime$1.exports;
196
+
197
+ (function (module) {
198
+ var _typeof = _typeofExports["default"];
199
+ function _regeneratorRuntime() {
200
+ module.exports = _regeneratorRuntime = function _regeneratorRuntime() {
201
+ return exports;
202
+ }, module.exports.__esModule = true, module.exports["default"] = module.exports;
203
+ var exports = {},
204
+ Op = Object.prototype,
205
+ hasOwn = Op.hasOwnProperty,
206
+ defineProperty = Object.defineProperty || function (obj, key, desc) {
207
+ obj[key] = desc.value;
208
+ },
209
+ $Symbol = "function" == typeof Symbol ? Symbol : {},
210
+ iteratorSymbol = $Symbol.iterator || "@@iterator",
211
+ asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator",
212
+ toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";
213
+ function define(obj, key, value) {
214
+ return Object.defineProperty(obj, key, {
215
+ value: value,
216
+ enumerable: !0,
217
+ configurable: !0,
218
+ writable: !0
219
+ }), obj[key];
220
+ }
221
+ try {
222
+ define({}, "");
223
+ } catch (err) {
224
+ define = function define(obj, key, value) {
225
+ return obj[key] = value;
226
+ };
227
+ }
228
+ function wrap(innerFn, outerFn, self, tryLocsList) {
229
+ var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator,
230
+ generator = Object.create(protoGenerator.prototype),
231
+ context = new Context(tryLocsList || []);
232
+ return defineProperty(generator, "_invoke", {
233
+ value: makeInvokeMethod(innerFn, self, context)
234
+ }), generator;
235
+ }
236
+ function tryCatch(fn, obj, arg) {
237
+ try {
238
+ return {
239
+ type: "normal",
240
+ arg: fn.call(obj, arg)
241
+ };
242
+ } catch (err) {
243
+ return {
244
+ type: "throw",
245
+ arg: err
246
+ };
247
+ }
248
+ }
249
+ exports.wrap = wrap;
250
+ var ContinueSentinel = {};
251
+ function Generator() {}
252
+ function GeneratorFunction() {}
253
+ function GeneratorFunctionPrototype() {}
254
+ var IteratorPrototype = {};
255
+ define(IteratorPrototype, iteratorSymbol, function () {
256
+ return this;
257
+ });
258
+ var getProto = Object.getPrototypeOf,
259
+ NativeIteratorPrototype = getProto && getProto(getProto(values([])));
260
+ NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype);
261
+ var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);
262
+ function defineIteratorMethods(prototype) {
263
+ ["next", "throw", "return"].forEach(function (method) {
264
+ define(prototype, method, function (arg) {
265
+ return this._invoke(method, arg);
266
+ });
267
+ });
268
+ }
269
+ function AsyncIterator(generator, PromiseImpl) {
270
+ function invoke(method, arg, resolve, reject) {
271
+ var record = tryCatch(generator[method], generator, arg);
272
+ if ("throw" !== record.type) {
273
+ var result = record.arg,
274
+ value = result.value;
275
+ return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) {
276
+ invoke("next", value, resolve, reject);
277
+ }, function (err) {
278
+ invoke("throw", err, resolve, reject);
279
+ }) : PromiseImpl.resolve(value).then(function (unwrapped) {
280
+ result.value = unwrapped, resolve(result);
281
+ }, function (error) {
282
+ return invoke("throw", error, resolve, reject);
283
+ });
284
+ }
285
+ reject(record.arg);
286
+ }
287
+ var previousPromise;
288
+ defineProperty(this, "_invoke", {
289
+ value: function value(method, arg) {
290
+ function callInvokeWithMethodAndArg() {
291
+ return new PromiseImpl(function (resolve, reject) {
292
+ invoke(method, arg, resolve, reject);
293
+ });
294
+ }
295
+ return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();
296
+ }
297
+ });
298
+ }
299
+ function makeInvokeMethod(innerFn, self, context) {
300
+ var state = "suspendedStart";
301
+ return function (method, arg) {
302
+ if ("executing" === state) throw new Error("Generator is already running");
303
+ if ("completed" === state) {
304
+ if ("throw" === method) throw arg;
305
+ return doneResult();
306
+ }
307
+ for (context.method = method, context.arg = arg;;) {
308
+ var delegate = context.delegate;
309
+ if (delegate) {
310
+ var delegateResult = maybeInvokeDelegate(delegate, context);
311
+ if (delegateResult) {
312
+ if (delegateResult === ContinueSentinel) continue;
313
+ return delegateResult;
314
+ }
315
+ }
316
+ if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) {
317
+ if ("suspendedStart" === state) throw state = "completed", context.arg;
318
+ context.dispatchException(context.arg);
319
+ } else "return" === context.method && context.abrupt("return", context.arg);
320
+ state = "executing";
321
+ var record = tryCatch(innerFn, self, context);
322
+ if ("normal" === record.type) {
323
+ if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue;
324
+ return {
325
+ value: record.arg,
326
+ done: context.done
327
+ };
328
+ }
329
+ "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg);
330
+ }
331
+ };
332
+ }
333
+ function maybeInvokeDelegate(delegate, context) {
334
+ var methodName = context.method,
335
+ method = delegate.iterator[methodName];
336
+ if (undefined === method) return context.delegate = null, "throw" === methodName && delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method) || "return" !== methodName && (context.method = "throw", context.arg = new TypeError("The iterator does not provide a '" + methodName + "' method")), ContinueSentinel;
337
+ var record = tryCatch(method, delegate.iterator, context.arg);
338
+ if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel;
339
+ var info = record.arg;
340
+ return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel);
341
+ }
342
+ function pushTryEntry(locs) {
343
+ var entry = {
344
+ tryLoc: locs[0]
345
+ };
346
+ 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry);
347
+ }
348
+ function resetTryEntry(entry) {
349
+ var record = entry.completion || {};
350
+ record.type = "normal", delete record.arg, entry.completion = record;
351
+ }
352
+ function Context(tryLocsList) {
353
+ this.tryEntries = [{
354
+ tryLoc: "root"
355
+ }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0);
356
+ }
357
+ function values(iterable) {
358
+ if (iterable) {
359
+ var iteratorMethod = iterable[iteratorSymbol];
360
+ if (iteratorMethod) return iteratorMethod.call(iterable);
361
+ if ("function" == typeof iterable.next) return iterable;
362
+ if (!isNaN(iterable.length)) {
363
+ var i = -1,
364
+ next = function next() {
365
+ for (; ++i < iterable.length;) if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next;
366
+ return next.value = undefined, next.done = !0, next;
367
+ };
368
+ return next.next = next;
369
+ }
370
+ }
371
+ return {
372
+ next: doneResult
373
+ };
374
+ }
375
+ function doneResult() {
376
+ return {
377
+ value: undefined,
378
+ done: !0
379
+ };
380
+ }
381
+ return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, "constructor", {
382
+ value: GeneratorFunctionPrototype,
383
+ configurable: !0
384
+ }), defineProperty(GeneratorFunctionPrototype, "constructor", {
385
+ value: GeneratorFunction,
386
+ configurable: !0
387
+ }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) {
388
+ var ctor = "function" == typeof genFun && genFun.constructor;
389
+ return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name));
390
+ }, exports.mark = function (genFun) {
391
+ return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun;
392
+ }, exports.awrap = function (arg) {
393
+ return {
394
+ __await: arg
395
+ };
396
+ }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () {
397
+ return this;
398
+ }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) {
399
+ void 0 === PromiseImpl && (PromiseImpl = Promise);
400
+ var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl);
401
+ return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) {
402
+ return result.done ? result.value : iter.next();
403
+ });
404
+ }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () {
405
+ return this;
406
+ }), define(Gp, "toString", function () {
407
+ return "[object Generator]";
408
+ }), exports.keys = function (val) {
409
+ var object = Object(val),
410
+ keys = [];
411
+ for (var key in object) keys.push(key);
412
+ return keys.reverse(), function next() {
413
+ for (; keys.length;) {
414
+ var key = keys.pop();
415
+ if (key in object) return next.value = key, next.done = !1, next;
416
+ }
417
+ return next.done = !0, next;
418
+ };
419
+ }, exports.values = values, Context.prototype = {
420
+ constructor: Context,
421
+ reset: function reset(skipTempReset) {
422
+ if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined);
423
+ },
424
+ stop: function stop() {
425
+ this.done = !0;
426
+ var rootRecord = this.tryEntries[0].completion;
427
+ if ("throw" === rootRecord.type) throw rootRecord.arg;
428
+ return this.rval;
429
+ },
430
+ dispatchException: function dispatchException(exception) {
431
+ if (this.done) throw exception;
432
+ var context = this;
433
+ function handle(loc, caught) {
434
+ return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught;
435
+ }
436
+ for (var i = this.tryEntries.length - 1; i >= 0; --i) {
437
+ var entry = this.tryEntries[i],
438
+ record = entry.completion;
439
+ if ("root" === entry.tryLoc) return handle("end");
440
+ if (entry.tryLoc <= this.prev) {
441
+ var hasCatch = hasOwn.call(entry, "catchLoc"),
442
+ hasFinally = hasOwn.call(entry, "finallyLoc");
443
+ if (hasCatch && hasFinally) {
444
+ if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);
445
+ if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);
446
+ } else if (hasCatch) {
447
+ if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);
448
+ } else {
449
+ if (!hasFinally) throw new Error("try statement without catch or finally");
450
+ if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);
451
+ }
452
+ }
453
+ }
454
+ },
455
+ abrupt: function abrupt(type, arg) {
456
+ for (var i = this.tryEntries.length - 1; i >= 0; --i) {
457
+ var entry = this.tryEntries[i];
458
+ if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) {
459
+ var finallyEntry = entry;
460
+ break;
461
+ }
462
+ }
463
+ finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null);
464
+ var record = finallyEntry ? finallyEntry.completion : {};
465
+ return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record);
466
+ },
467
+ complete: function complete(record, afterLoc) {
468
+ if ("throw" === record.type) throw record.arg;
469
+ return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel;
470
+ },
471
+ finish: function finish(finallyLoc) {
472
+ for (var i = this.tryEntries.length - 1; i >= 0; --i) {
473
+ var entry = this.tryEntries[i];
474
+ if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel;
475
+ }
476
+ },
477
+ "catch": function _catch(tryLoc) {
478
+ for (var i = this.tryEntries.length - 1; i >= 0; --i) {
479
+ var entry = this.tryEntries[i];
480
+ if (entry.tryLoc === tryLoc) {
481
+ var record = entry.completion;
482
+ if ("throw" === record.type) {
483
+ var thrown = record.arg;
484
+ resetTryEntry(entry);
485
+ }
486
+ return thrown;
487
+ }
488
+ }
489
+ throw new Error("illegal catch attempt");
490
+ },
491
+ delegateYield: function delegateYield(iterable, resultName, nextLoc) {
492
+ return this.delegate = {
493
+ iterator: values(iterable),
494
+ resultName: resultName,
495
+ nextLoc: nextLoc
496
+ }, "next" === this.method && (this.arg = undefined), ContinueSentinel;
497
+ }
498
+ }, exports;
499
+ }
500
+ module.exports = _regeneratorRuntime, module.exports.__esModule = true, module.exports["default"] = module.exports;
501
+ } (regeneratorRuntime$1));
502
+
503
+ var regeneratorRuntimeExports = regeneratorRuntime$1.exports;
504
+
505
+ // TODO(Babel 8): Remove this file.
506
+
507
+ var runtime = regeneratorRuntimeExports();
508
+ var regenerator = runtime;
509
+
510
+ // Copied from https://github.com/facebook/regenerator/blob/main/packages/runtime/runtime.js#L736=
511
+ try {
512
+ regeneratorRuntime = runtime;
513
+ } catch (accidentalStrictMode) {
514
+ if (typeof globalThis === "object") {
515
+ globalThis.regeneratorRuntime = runtime;
516
+ } else {
517
+ Function("r", "regeneratorRuntime = r")(runtime);
518
+ }
519
+ }
520
+
521
+ var _regeneratorRuntime = /*@__PURE__*/getDefaultExportFromCjs(regenerator);
522
+
523
+ var create$2 = function create(_ref) {
524
+ var recordingId = _ref.recordingId,
525
+ payload = _ref.payload;
526
+ return axios.post("/api/v1/recordings/".concat(recordingId, "/abort_upload"), {
527
+ abortUpload: payload
528
+ });
529
+ };
530
+ var abortUploadApi = {
531
+ create: create$2
532
+ };
533
+
534
+ var create$1 = function create(_ref) {
535
+ var recordingId = _ref.recordingId,
536
+ payload = _ref.payload;
537
+ return axios.post("/api/v1/recordings/".concat(recordingId, "/complete_upload"), {
538
+ completeUpload: payload
539
+ });
540
+ };
541
+ var completeUploadApi = {
542
+ create: create$1
543
+ };
544
+
545
+ var create = function create(_ref) {
546
+ var recordingId = _ref.recordingId,
547
+ payload = _ref.payload;
548
+ return axios.post("/api/v1/recordings/".concat(recordingId, "/part_presigned_url"), {
549
+ partPresignedUrl: payload
550
+ });
551
+ };
552
+ var partPresignedUrlApi = {
553
+ create: create
554
+ };
555
+
556
+ // https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#ErrorCodeList
557
+ var RETRIABLE_ERRORS = [500, 503];
558
+ var ONE_SECOND_IN_MILLISECONDS = 1000;
559
+ var ONE_SECOND = 1;
560
+ var UPLOAD_EVENT = {
561
+ onComplete: "onComplete"
562
+ };
563
+ var UPLOAD_STATUS = {
564
+ uploading: "uploading",
565
+ completed: "completed",
566
+ aborting: "aborting"
567
+ };
568
+ var SCREEN_RECORDER_STATUS = {
569
+ media_aborted: "media_aborted",
570
+ permission_denied: "permission_denied",
571
+ no_specified_media_found: "no_specified_media_found",
572
+ media_in_use: "media_in_use",
573
+ invalid_media_constraints: "invalid_media_constraints",
574
+ no_chrome_flags_set: "no_chrome_flags_set",
575
+ recorder_error: "recorder_error",
576
+ idle: "idle",
577
+ acquiring_media: "acquiring_media",
578
+ media_acquired: "media_acquired",
579
+ restarting: "restarting",
580
+ recording: "recording",
581
+ stopping: "stopping",
582
+ stopped: "stopped",
583
+ paused: "paused"
584
+ };
585
+ var SCREEN_RECORDER_ERROR = {
586
+ AbortError: "media_aborted",
587
+ NotAllowedError: "permission_denied",
588
+ NotFoundError: "no_specified_media_found",
589
+ NotReadableError: "media_in_use",
590
+ OverconstrainedError: "invalid_media_constraints",
591
+ TypeError: "no_chrome_flags_set",
592
+ None: "",
593
+ NoRecorder: "recorder_error",
594
+ UnSupportedBrowser: "unsupported_browser"
595
+ };
596
+ var SCREEN_RECORDER_EVENT = {
597
+ onStart: "onStart",
598
+ onStop: "onStop",
599
+ onDiscard: "onDiscard",
600
+ onDataAvailable: "onDataAvailable",
601
+ onDiscardDuringCountdown: "onDiscardDuringCountdown",
602
+ onRestart: "onRestart"
603
+ };
604
+
605
+ var sleep = function sleep(delay) {
606
+ return new Promise(function (resolve) {
607
+ return setTimeout(resolve, delay);
608
+ });
609
+ };
610
+
611
+ var s3AxiosInstance = axios.create({
612
+ headers: {
613
+ "Content-Type": 'video/webm;codecs="vp9"'
614
+ }
615
+ });
616
+ s3AxiosInstance.interceptors.response.use(identity, function (error) {
617
+ return !axios.isCancel(error) && Promise.reject(error);
618
+ });
619
+ var presignedUpload = /*#__PURE__*/function () {
620
+ var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(_ref) {
621
+ var presignedUrl, blob, config, _ref$retries, retries, _ref$retryDelay, retryDelay, remainingAttempts, _error$response;
622
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
623
+ while (1) switch (_context.prev = _context.next) {
624
+ case 0:
625
+ presignedUrl = _ref.presignedUrl, blob = _ref.blob, config = _ref.config, _ref$retries = _ref.retries, retries = _ref$retries === void 0 ? 3 : _ref$retries, _ref$retryDelay = _ref.retryDelay, retryDelay = _ref$retryDelay === void 0 ? 4000 : _ref$retryDelay;
626
+ remainingAttempts = retries + 1;
627
+ case 2:
628
+ if (!remainingAttempts--) {
629
+ _context.next = 20;
630
+ break;
631
+ }
632
+ _context.prev = 3;
633
+ _context.next = 6;
634
+ return s3AxiosInstance.put(presignedUrl, blob, config);
635
+ case 6:
636
+ return _context.abrupt("return", _context.sent);
637
+ case 9:
638
+ _context.prev = 9;
639
+ _context.t0 = _context["catch"](3);
640
+ if (!(RETRIABLE_ERRORS.includes((_error$response = _context.t0.response) === null || _error$response === void 0 ? void 0 : _error$response.status) && remainingAttempts > 0)) {
641
+ _context.next = 17;
642
+ break;
643
+ }
644
+ _context.next = 14;
645
+ return sleep(retryDelay);
646
+ case 14:
647
+ retryDelay *= 2;
648
+ _context.next = 18;
649
+ break;
650
+ case 17:
651
+ throw _context.t0;
652
+ case 18:
653
+ _context.next = 2;
654
+ break;
655
+ case 20:
656
+ return _context.abrupt("return", null);
657
+ case 21:
658
+ case "end":
659
+ return _context.stop();
660
+ }
661
+ }, _callee, null, [[3, 9]]);
662
+ }));
663
+ return function presignedUpload(_x) {
664
+ return _ref2.apply(this, arguments);
665
+ };
666
+ }();
667
+ var s3Api = {
668
+ presignedUpload: presignedUpload
669
+ };
670
+
671
+ var prepareStore$1 = function prepareStore() {
672
+ return create$3(withImmutableActions(function () {
673
+ return {
674
+ status: ""
675
+ };
676
+ }));
677
+ };
678
+
679
+ function ownKeys$2(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
680
+ function _objectSpread$2(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$2(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$2(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
681
+ function _classPrivateFieldInitSpec$1(obj, privateMap, value) { _checkPrivateRedeclaration$1(obj, privateMap); privateMap.set(obj, value); }
682
+ function _checkPrivateRedeclaration$1(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
683
+ var _recordingId = /*#__PURE__*/new WeakMap();
684
+ var _uploadId = /*#__PURE__*/new WeakMap();
685
+ var _unUploadedChunks = /*#__PURE__*/new WeakMap();
686
+ var _partNumber = /*#__PURE__*/new WeakMap();
687
+ var _s3PartUploadPromises = /*#__PURE__*/new WeakMap();
688
+ var _callbacks$1 = /*#__PURE__*/new WeakMap();
689
+ var _store$1 = /*#__PURE__*/new WeakMap();
690
+ var _abortController = /*#__PURE__*/new WeakMap();
691
+ var _pendingS3ChunkUploads = /*#__PURE__*/new WeakMap();
692
+ var _fireCallbacks$1 = /*#__PURE__*/new WeakMap();
693
+ var _uploadChunkToS = /*#__PURE__*/new WeakMap();
694
+ var _getCurrentUnUploadedBlob = /*#__PURE__*/new WeakMap();
695
+ var MultipartS3Upload = /*#__PURE__*/function () {
696
+ function MultipartS3Upload() {
697
+ var _this = this;
698
+ _classCallCheck(this, MultipartS3Upload);
699
+ _defineProperty(this, "MIN_UPLOAD_CHUNK_SIZE", 5 * 1024 * 1024);
700
+ _classPrivateFieldInitSpec$1(this, _recordingId, {
701
+ writable: true,
702
+ value: ""
703
+ });
704
+ _classPrivateFieldInitSpec$1(this, _uploadId, {
705
+ writable: true,
706
+ value: ""
707
+ });
708
+ _classPrivateFieldInitSpec$1(this, _unUploadedChunks, {
709
+ writable: true,
710
+ value: []
711
+ });
712
+ _classPrivateFieldInitSpec$1(this, _partNumber, {
713
+ writable: true,
714
+ value: 1
715
+ });
716
+ _classPrivateFieldInitSpec$1(this, _s3PartUploadPromises, {
717
+ writable: true,
718
+ value: []
719
+ });
720
+ _classPrivateFieldInitSpec$1(this, _callbacks$1, {
721
+ writable: true,
722
+ value: {}
723
+ });
724
+ _classPrivateFieldInitSpec$1(this, _store$1, {
725
+ writable: true,
726
+ value: void 0
727
+ });
728
+ _classPrivateFieldInitSpec$1(this, _abortController, {
729
+ writable: true,
730
+ value: void 0
731
+ });
732
+ _classPrivateFieldInitSpec$1(this, _pendingS3ChunkUploads, {
733
+ writable: true,
734
+ value: []
735
+ });
736
+ _defineProperty(this, "initialize", function (recordingId, uploadId) {
737
+ _classPrivateFieldSet(_this, _recordingId, recordingId);
738
+ _classPrivateFieldSet(_this, _uploadId, uploadId);
739
+ _classPrivateFieldSet(_this, _abortController, new AbortController());
740
+ });
741
+ _defineProperty(this, "push", function (data) {
742
+ if (data.size > 0) {
743
+ _classPrivateFieldGet(_this, _unUploadedChunks).push(data);
744
+ }
745
+ logger.info("Current unuploaded data size is ", _classPrivateFieldGet(_this, _getCurrentUnUploadedBlob).call(_this).size / 1024 / 1024, "MB");
746
+ if (_classPrivateFieldGet(_this, _getCurrentUnUploadedBlob).call(_this).size > _this.MIN_UPLOAD_CHUNK_SIZE) {
747
+ var uploadChunkToS3Promise = _classPrivateFieldGet(_this, _uploadChunkToS).call(_this, _classPrivateFieldGet(_this, _unUploadedChunks));
748
+ _classPrivateFieldGet(_this, _pendingS3ChunkUploads).push(uploadChunkToS3Promise);
749
+ _classPrivateFieldSet(_this, _unUploadedChunks, []);
750
+ }
751
+ });
752
+ _defineProperty(this, "completeUpload", /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
753
+ var uploadChunkToS3Promise, resolvedS3PartUploadPromises, parts;
754
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
755
+ while (1) switch (_context.prev = _context.next) {
756
+ case 0:
757
+ _context.prev = 0;
758
+ _classPrivateFieldGet(_this, _store$1).setState({
759
+ status: UPLOAD_STATUS.uploading
760
+ });
761
+
762
+ // Upload last chunk; only if last chunk has data
763
+ if (_classPrivateFieldGet(_this, _getCurrentUnUploadedBlob).call(_this).size > 0) {
764
+ uploadChunkToS3Promise = _classPrivateFieldGet(_this, _uploadChunkToS).call(_this, _classPrivateFieldGet(_this, _unUploadedChunks));
765
+ _classPrivateFieldGet(_this, _pendingS3ChunkUploads).push(uploadChunkToS3Promise);
766
+ }
767
+
768
+ /**
769
+ * Wait for all the pending uploadToS3Promises.
770
+ * Else we encounter a race condition where a new request is made for presignedUrl
771
+ * but at the same time we reach the resolvedS3PartUploadPromises line and await
772
+ * the s3PartUploadPromises. And the s3PartUploadPromises is resolved before
773
+ * adding the new presignedUrl part upload to s3PartUploadPromises.
774
+ * This results in incorrect partNumbers.
775
+ */
776
+ _context.next = 5;
777
+ return Promise.all(_classPrivateFieldGet(_this, _pendingS3ChunkUploads));
778
+ case 5:
779
+ _context.next = 7;
780
+ return Promise.all(_classPrivateFieldGet(_this, _s3PartUploadPromises));
781
+ case 7:
782
+ resolvedS3PartUploadPromises = _context.sent;
783
+ parts = resolvedS3PartUploadPromises.map(function (resolvedResponse) {
784
+ return {
785
+ etag: resolvedResponse.headers.etag,
786
+ partNumber: new URL(resolvedResponse.request.responseURL).searchParams.get("partNumber")
787
+ };
788
+ });
789
+ _context.next = 11;
790
+ return completeUploadApi.create({
791
+ recordingId: _classPrivateFieldGet(_this, _recordingId),
792
+ payload: {
793
+ parts: parts,
794
+ uploadId: _classPrivateFieldGet(_this, _uploadId)
795
+ }
796
+ });
797
+ case 11:
798
+ _context.next = 13;
799
+ return _classPrivateFieldGet(_this, _store$1).setState({
800
+ status: UPLOAD_STATUS.completed
801
+ });
802
+ case 13:
803
+ _classPrivateFieldGet(_this, _fireCallbacks$1).call(_this, UPLOAD_EVENT.onComplete);
804
+ _context.next = 19;
805
+ break;
806
+ case 16:
807
+ _context.prev = 16;
808
+ _context.t0 = _context["catch"](0);
809
+ logger.error(_context.t0);
810
+ case 19:
811
+ case "end":
812
+ return _context.stop();
813
+ }
814
+ }, _callee, null, [[0, 16]]);
815
+ })));
816
+ _defineProperty(this, "abortUpload", /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
817
+ return _regeneratorRuntime.wrap(function _callee2$(_context2) {
818
+ while (1) switch (_context2.prev = _context2.next) {
819
+ case 0:
820
+ _context2.prev = 0;
821
+ _classPrivateFieldGet(_this, _store$1).setState({
822
+ status: UPLOAD_STATUS.aborting
823
+ });
824
+ _classPrivateFieldGet(_this, _abortController).abort();
825
+ _context2.next = 5;
826
+ return abortUploadApi.create({
827
+ recordingId: _classPrivateFieldGet(_this, _recordingId),
828
+ payload: {
829
+ uploadId: _classPrivateFieldGet(_this, _uploadId)
830
+ }
831
+ });
832
+ case 5:
833
+ _classPrivateFieldSet(_this, _unUploadedChunks, []);
834
+ _classPrivateFieldSet(_this, _partNumber, 1);
835
+ _classPrivateFieldSet(_this, _s3PartUploadPromises, []);
836
+ _classPrivateFieldGet(_this, _store$1).setState({
837
+ status: ""
838
+ });
839
+ _classPrivateFieldSet(_this, _abortController, null);
840
+ _context2.next = 15;
841
+ break;
842
+ case 12:
843
+ _context2.prev = 12;
844
+ _context2.t0 = _context2["catch"](0);
845
+ logger.error(_context2.t0);
846
+ case 15:
847
+ case "end":
848
+ return _context2.stop();
849
+ }
850
+ }, _callee2, null, [[0, 12]]);
851
+ })));
852
+ _defineProperty(this, "resetState", function () {
853
+ _classPrivateFieldSet(_this, _recordingId, "");
854
+ _classPrivateFieldSet(_this, _uploadId, "");
855
+ _classPrivateFieldSet(_this, _unUploadedChunks, []);
856
+ _classPrivateFieldSet(_this, _partNumber, 1);
857
+ _classPrivateFieldSet(_this, _s3PartUploadPromises, []);
858
+ _classPrivateFieldSet(_this, _callbacks$1, {});
859
+ _classPrivateFieldGet(_this, _store$1).setState({
860
+ status: ""
861
+ });
862
+ });
863
+ _defineProperty(this, "addCallback", function (event, callback) {
864
+ var _classPrivateFieldGet2;
865
+ var existingCallbacks = (_classPrivateFieldGet2 = _classPrivateFieldGet(_this, _callbacks$1)[event]) !== null && _classPrivateFieldGet2 !== void 0 ? _classPrivateFieldGet2 : [];
866
+ _classPrivateFieldSet(_this, _callbacks$1, _objectSpread$2(_objectSpread$2({}, _classPrivateFieldGet(_this, _callbacks$1)), {}, _defineProperty({}, event, [].concat(_toConsumableArray(existingCallbacks), [callback]))));
867
+ });
868
+ _defineProperty(this, "removeCallback", function (event, callback) {
869
+ var _classPrivateFieldGet3;
870
+ var registeredCallbacks = (_classPrivateFieldGet3 = _classPrivateFieldGet(_this, _callbacks$1)[event]) !== null && _classPrivateFieldGet3 !== void 0 ? _classPrivateFieldGet3 : [];
871
+ var updatedCallbacks = registeredCallbacks.filter(isNot(callback));
872
+ _classPrivateFieldSet(_this, _callbacks$1, _objectSpread$2(_objectSpread$2({}, _classPrivateFieldGet(_this, _callbacks$1)), {}, _defineProperty({}, event, updatedCallbacks)));
873
+ });
874
+ _classPrivateFieldInitSpec$1(this, _fireCallbacks$1, {
875
+ writable: true,
876
+ value: function value(event) {
877
+ var _classPrivateFieldGet4;
878
+ var args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
879
+ (_classPrivateFieldGet4 = _classPrivateFieldGet(_this, _callbacks$1)[event]) === null || _classPrivateFieldGet4 === void 0 ? void 0 : _classPrivateFieldGet4.forEach(function (callback) {
880
+ callback.apply(void 0, _toConsumableArray(args));
881
+ });
882
+ }
883
+ });
884
+ _classPrivateFieldInitSpec$1(this, _uploadChunkToS, {
885
+ writable: true,
886
+ value: function () {
887
+ var _value = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(chunks) {
888
+ var _this$partNumber, _this$partNumber2, _yield$partPresignedU, presignedUrl, s3PartUploadPromise;
889
+ return _regeneratorRuntime.wrap(function _callee3$(_context3) {
890
+ while (1) switch (_context3.prev = _context3.next) {
891
+ case 0:
892
+ logger.info("Part ready to be uploaded: ", _classPrivateFieldGet(_this, _partNumber));
893
+ _context3.prev = 1;
894
+ _context3.next = 4;
895
+ return partPresignedUrlApi.create({
896
+ recordingId: _classPrivateFieldGet(_this, _recordingId),
897
+ payload: {
898
+ partNumber: (_classPrivateFieldSet(_this, _partNumber, (_this$partNumber = _classPrivateFieldGet(_this, _partNumber), _this$partNumber2 = _this$partNumber++, _this$partNumber)), _this$partNumber2),
899
+ uploadId: _classPrivateFieldGet(_this, _uploadId)
900
+ }
901
+ });
902
+ case 4:
903
+ _yield$partPresignedU = _context3.sent;
904
+ presignedUrl = _yield$partPresignedU.presignedUrl;
905
+ s3PartUploadPromise = s3Api.presignedUpload({
906
+ presignedUrl: presignedUrl,
907
+ blob: new Blob(chunks, {
908
+ type: 'video/webm;codecs="vp9"'
909
+ }),
910
+ config: {
911
+ includeMetadataInResponse: true,
912
+ signal: _classPrivateFieldGet(_this, _abortController).signal
913
+ }
914
+ });
915
+ _classPrivateFieldGet(_this, _s3PartUploadPromises).push(s3PartUploadPromise);
916
+ _context3.next = 13;
917
+ break;
918
+ case 10:
919
+ _context3.prev = 10;
920
+ _context3.t0 = _context3["catch"](1);
921
+ if (!axios.isCancel(_context3.t0)) logger.error(_context3.t0);
922
+ case 13:
923
+ return _context3.abrupt("return");
924
+ case 14:
925
+ case "end":
926
+ return _context3.stop();
927
+ }
928
+ }, _callee3, null, [[1, 10]]);
929
+ }));
930
+ function value(_x) {
931
+ return _value.apply(this, arguments);
932
+ }
933
+ return value;
934
+ }()
935
+ });
936
+ _classPrivateFieldInitSpec$1(this, _getCurrentUnUploadedBlob, {
937
+ writable: true,
938
+ value: function value() {
939
+ return new Blob(_classPrivateFieldGet(_this, _unUploadedChunks), {
940
+ type: 'video/webm;codecs="vp9"'
941
+ });
942
+ }
943
+ });
944
+ _classPrivateFieldSet(this, _store$1, prepareStore$1());
945
+ }
946
+
947
+ /** @type {import("neetocommons/react-utils").ZustandStoreHook} */
948
+ _createClass(MultipartS3Upload, [{
949
+ key: "useMultipartS3UploadStore",
950
+ get: function get() {
951
+ return _classPrivateFieldGet(this, _store$1);
952
+ }
953
+ }]);
954
+ return MultipartS3Upload;
955
+ }();
956
+ var multipartS3Upload = new MultipartS3Upload();
957
+
958
+ // https://www.w3.org/TR/screen-capture/#displaycapturesurfacetype
959
+ var DISPLAY_SURFACE = {
960
+ monitor: "monitor",
961
+ window: "window",
962
+ browser: "browser"
963
+ };
964
+
965
+ function ownKeys$1(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
966
+ function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$1(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$1(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
967
+ var initialState = {
968
+ status: SCREEN_RECORDER_STATUS.idle,
969
+ error: "",
970
+ elapsedTime: 0,
971
+ countdownTimeLeft: 3
972
+ };
973
+ var prepareStore = function prepareStore() {
974
+ return create$3(withImmutableActions(function (set) {
975
+ return _objectSpread$1(_objectSpread$1({}, initialState), {}, {
976
+ resetState: function resetState() {
977
+ return set(initialState);
978
+ }
979
+ });
980
+ }));
981
+ };
982
+
983
+ var getUnSupportedConstraints = function getUnSupportedConstraints(mediaType) {
984
+ var supportedMediaConstraints = navigator.mediaDevices.getSupportedConstraints();
985
+ return Object.keys(mediaType).filter(function (constraint) {
986
+ return !supportedMediaConstraints[constraint];
987
+ });
988
+ };
989
+ var checkConstraints = function checkConstraints() {
990
+ if (isNil(navigator.mediaDevices)) {
991
+ return;
992
+ }
993
+ for (var _len = arguments.length, mediaTypes = new Array(_len), _key = 0; _key < _len; _key++) {
994
+ mediaTypes[_key] = arguments[_key];
995
+ }
996
+ var unSupportedConstraints = mediaTypes.filter(function (mediaType) {
997
+ return _typeof$1(mediaType) === "object";
998
+ }).map(getUnSupportedConstraints).flat();
999
+ if (isNotEmpty(unSupportedConstraints)) {
1000
+ // eslint-disable-next-line no-console
1001
+ console.error("The constraints ".concat(unSupportedConstraints.join(","), " doesn't support on this browser."));
1002
+ }
1003
+ };
1004
+ var isStreamEnded = function isStreamEnded(mediaStream) {
1005
+ return existsBy({
1006
+ readyState: "ended"
1007
+ }, mediaStream.getTracks());
1008
+ };
1009
+
1010
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
1011
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1012
+ function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
1013
+ function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
1014
+ var _audio = /*#__PURE__*/new WeakMap();
1015
+ var _video = /*#__PURE__*/new WeakMap();
1016
+ var _mediaRecorder = /*#__PURE__*/new WeakMap();
1017
+ var _mediaStream = /*#__PURE__*/new WeakMap();
1018
+ var _store = /*#__PURE__*/new WeakMap();
1019
+ var _mediaChunks = /*#__PURE__*/new WeakMap();
1020
+ var _callbacks = /*#__PURE__*/new WeakMap();
1021
+ var _lastTimerUpdatedAt = /*#__PURE__*/new WeakMap();
1022
+ var _timerId = /*#__PURE__*/new WeakMap();
1023
+ var _countdownTimerId = /*#__PURE__*/new WeakMap();
1024
+ var _checkCompatibility = /*#__PURE__*/new WeakMap();
1025
+ var _acquireMediaStream = /*#__PURE__*/new WeakMap();
1026
+ var _fireCallbacks = /*#__PURE__*/new WeakMap();
1027
+ var _onRecordingStart = /*#__PURE__*/new WeakMap();
1028
+ var _onRecordingActive = /*#__PURE__*/new WeakMap();
1029
+ var _onRecordingStop = /*#__PURE__*/new WeakMap();
1030
+ var _countdownAndStartRecording = /*#__PURE__*/new WeakMap();
1031
+ var _startTimer = /*#__PURE__*/new WeakMap();
1032
+ var _stopTimer = /*#__PURE__*/new WeakMap();
1033
+ var ScreenRecorder = /*#__PURE__*/function () {
1034
+ function ScreenRecorder(audio, video) {
1035
+ var _this = this;
1036
+ _classCallCheck(this, ScreenRecorder);
1037
+ _classPrivateFieldInitSpec(this, _audio, {
1038
+ writable: true,
1039
+ value: void 0
1040
+ });
1041
+ _classPrivateFieldInitSpec(this, _video, {
1042
+ writable: true,
1043
+ value: void 0
1044
+ });
1045
+ _classPrivateFieldInitSpec(this, _mediaRecorder, {
1046
+ writable: true,
1047
+ value: void 0
1048
+ });
1049
+ _classPrivateFieldInitSpec(this, _mediaStream, {
1050
+ writable: true,
1051
+ value: void 0
1052
+ });
1053
+ _classPrivateFieldInitSpec(this, _store, {
1054
+ writable: true,
1055
+ value: void 0
1056
+ });
1057
+ _classPrivateFieldInitSpec(this, _mediaChunks, {
1058
+ writable: true,
1059
+ value: []
1060
+ });
1061
+ _classPrivateFieldInitSpec(this, _callbacks, {
1062
+ writable: true,
1063
+ value: {}
1064
+ });
1065
+ _classPrivateFieldInitSpec(this, _lastTimerUpdatedAt, {
1066
+ writable: true,
1067
+ value: 0
1068
+ });
1069
+ _classPrivateFieldInitSpec(this, _timerId, {
1070
+ writable: true,
1071
+ value: void 0
1072
+ });
1073
+ _classPrivateFieldInitSpec(this, _countdownTimerId, {
1074
+ writable: true,
1075
+ value: void 0
1076
+ });
1077
+ _defineProperty(this, "getPreviewStream", function () {
1078
+ return new MediaStream(_classPrivateFieldGet(_this, _mediaStream).getVideoTracks());
1079
+ });
1080
+ _defineProperty(this, "getMediaBlobUrl", function () {
1081
+ var blob = new Blob(_classPrivateFieldGet(_this, _mediaChunks), {
1082
+ type: 'video/webm;codecs="vp9"'
1083
+ });
1084
+
1085
+ // TODO: Revoke the object url
1086
+ return URL.createObjectURL(blob);
1087
+ });
1088
+ _defineProperty(this, "getWebmMediaBlob", function () {
1089
+ return new Blob(_classPrivateFieldGet(_this, _mediaChunks), {
1090
+ type: 'video/webm;codecs="vp9"'
1091
+ });
1092
+ });
1093
+ _defineProperty(this, "addCallback", function (event, callback) {
1094
+ var _classPrivateFieldGet2;
1095
+ var existingCallbacks = (_classPrivateFieldGet2 = _classPrivateFieldGet(_this, _callbacks)[event]) !== null && _classPrivateFieldGet2 !== void 0 ? _classPrivateFieldGet2 : [];
1096
+ _classPrivateFieldSet(_this, _callbacks, _objectSpread(_objectSpread({}, _classPrivateFieldGet(_this, _callbacks)), {}, _defineProperty({}, event, [].concat(_toConsumableArray(existingCallbacks), [callback]))));
1097
+ });
1098
+ _defineProperty(this, "removeCallback", function (event, callback) {
1099
+ var _classPrivateFieldGet3;
1100
+ var registeredCallbacks = (_classPrivateFieldGet3 = _classPrivateFieldGet(_this, _callbacks)[event]) !== null && _classPrivateFieldGet3 !== void 0 ? _classPrivateFieldGet3 : [];
1101
+ var updatedCallbacks = registeredCallbacks.filter(isNot(callback));
1102
+ _classPrivateFieldSet(_this, _callbacks, _objectSpread(_objectSpread({}, _classPrivateFieldGet(_this, _callbacks)), {}, _defineProperty({}, event, updatedCallbacks)));
1103
+ });
1104
+ _defineProperty(this, "removeAllCallbacksByEvent", function (event) {
1105
+ delete _classPrivateFieldGet(_this, _callbacks)[event];
1106
+ });
1107
+ _defineProperty(this, "startRecording", /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
1108
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
1109
+ while (1) switch (_context.prev = _context.next) {
1110
+ case 0:
1111
+ _classPrivateFieldGet(_this, _store).setState(pick(["error"], initialState));
1112
+ if (_classPrivateFieldGet(_this, _mediaStream)) {
1113
+ _context.next = 4;
1114
+ break;
1115
+ }
1116
+ _context.next = 4;
1117
+ return _classPrivateFieldGet(_this, _acquireMediaStream).call(_this);
1118
+ case 4:
1119
+ if (!(_classPrivateFieldGet(_this, _mediaStream) && isStreamEnded(_classPrivateFieldGet(_this, _mediaStream)))) {
1120
+ _context.next = 7;
1121
+ break;
1122
+ }
1123
+ _context.next = 7;
1124
+ return _classPrivateFieldGet(_this, _acquireMediaStream).call(_this);
1125
+ case 7:
1126
+ if (!(!_classPrivateFieldGet(_this, _mediaStream) || isStreamEnded(_classPrivateFieldGet(_this, _mediaStream)))) {
1127
+ _context.next = 9;
1128
+ break;
1129
+ }
1130
+ return _context.abrupt("return");
1131
+ case 9:
1132
+ _classPrivateFieldSet(_this, _mediaChunks, []);
1133
+ _classPrivateFieldSet(_this, _mediaRecorder, new MediaRecorder(_classPrivateFieldGet(_this, _mediaStream)));
1134
+ _classPrivateFieldGet(_this, _mediaRecorder).ondataavailable = _classPrivateFieldGet(_this, _onRecordingActive);
1135
+ _classPrivateFieldGet(_this, _mediaRecorder).onstart = _classPrivateFieldGet(_this, _onRecordingStart);
1136
+ _classPrivateFieldGet(_this, _mediaRecorder).onstop = _classPrivateFieldGet(_this, _onRecordingStop);
1137
+ _classPrivateFieldGet(_this, _mediaRecorder).onerror = function () {
1138
+ _classPrivateFieldGet(_this, _store).setState({
1139
+ status: SCREEN_RECORDER_STATUS.idle,
1140
+ error: SCREEN_RECORDER_ERROR.NoRecorder
1141
+ });
1142
+ };
1143
+ _classPrivateFieldGet(_this, _countdownAndStartRecording).call(_this);
1144
+ case 16:
1145
+ case "end":
1146
+ return _context.stop();
1147
+ }
1148
+ }, _callee);
1149
+ })));
1150
+ _defineProperty(this, "stopRecording", function () {
1151
+ var _classPrivateFieldGet4;
1152
+ if (((_classPrivateFieldGet4 = _classPrivateFieldGet(_this, _mediaRecorder)) === null || _classPrivateFieldGet4 === void 0 ? void 0 : _classPrivateFieldGet4.state) === "inactive") {
1153
+ // When recording is stopped from the 'Stop Sharing' overlay
1154
+ // before it even starts, i.e during the countdown.
1155
+ clearInterval(_classPrivateFieldGet(_this, _countdownTimerId));
1156
+ _classPrivateFieldGet(_this, _mediaStream).getTracks().forEach(function (track) {
1157
+ return track.stop();
1158
+ });
1159
+ _classPrivateFieldGet(_this, _fireCallbacks).call(_this, SCREEN_RECORDER_EVENT.onDiscardDuringCountdown);
1160
+ return;
1161
+ }
1162
+ _classPrivateFieldGet(_this, _store).setState({
1163
+ status: SCREEN_RECORDER_STATUS.stopping
1164
+ });
1165
+ _classPrivateFieldGet(_this, _mediaRecorder).stop();
1166
+ _classPrivateFieldGet(_this, _mediaStream) && _classPrivateFieldGet(_this, _mediaStream).getTracks().forEach(function (track) {
1167
+ return track.stop();
1168
+ });
1169
+ _classPrivateFieldGet(_this, _stopTimer).call(_this);
1170
+ });
1171
+ _defineProperty(this, "pauseRecording", function () {
1172
+ var _classPrivateFieldGet5;
1173
+ if (((_classPrivateFieldGet5 = _classPrivateFieldGet(_this, _mediaRecorder)) === null || _classPrivateFieldGet5 === void 0 ? void 0 : _classPrivateFieldGet5.state) === "recording") {
1174
+ _classPrivateFieldGet(_this, _store).setState({
1175
+ status: SCREEN_RECORDER_STATUS.paused
1176
+ });
1177
+ _classPrivateFieldGet(_this, _mediaRecorder).pause();
1178
+ }
1179
+ _classPrivateFieldGet(_this, _stopTimer).call(_this);
1180
+ });
1181
+ _defineProperty(this, "resumeRecording", function () {
1182
+ var _classPrivateFieldGet6;
1183
+ if (((_classPrivateFieldGet6 = _classPrivateFieldGet(_this, _mediaRecorder)) === null || _classPrivateFieldGet6 === void 0 ? void 0 : _classPrivateFieldGet6.state) === "paused") {
1184
+ _classPrivateFieldGet(_this, _store).setState({
1185
+ status: SCREEN_RECORDER_STATUS.recording
1186
+ });
1187
+ _classPrivateFieldGet(_this, _mediaRecorder).resume();
1188
+ }
1189
+ _classPrivateFieldGet(_this, _startTimer).call(_this);
1190
+ });
1191
+ _defineProperty(this, "discardRecording", function () {
1192
+ var _classPrivateFieldGet7;
1193
+ if (((_classPrivateFieldGet7 = _classPrivateFieldGet(_this, _mediaRecorder)) === null || _classPrivateFieldGet7 === void 0 ? void 0 : _classPrivateFieldGet7.state) === "inactive") return;
1194
+ _classPrivateFieldGet(_this, _store).setState({
1195
+ status: SCREEN_RECORDER_STATUS.stopping
1196
+ });
1197
+ _this.removeAllCallbacksByEvent(SCREEN_RECORDER_EVENT.onStop);
1198
+ _classPrivateFieldGet(_this, _mediaRecorder).stop();
1199
+ _classPrivateFieldGet(_this, _mediaStream) && _classPrivateFieldGet(_this, _mediaStream).getTracks().forEach(function (track) {
1200
+ return track.stop();
1201
+ });
1202
+ clearInterval(_classPrivateFieldGet(_this, _timerId));
1203
+ _classPrivateFieldGet(_this, _store).setState(pick(["elapsedTime"], initialState));
1204
+ _classPrivateFieldSet(_this, _mediaChunks, []);
1205
+ _classPrivateFieldGet(_this, _fireCallbacks).call(_this, SCREEN_RECORDER_EVENT.onDiscard);
1206
+ });
1207
+ _defineProperty(this, "restartRecording", function () {
1208
+ _classPrivateFieldGet(_this, _store).setState({
1209
+ status: SCREEN_RECORDER_STATUS.stopping
1210
+ });
1211
+ _this.removeAllCallbacksByEvent(SCREEN_RECORDER_EVENT.onStop);
1212
+ _classPrivateFieldGet(_this, _mediaRecorder).stop();
1213
+ clearInterval(_classPrivateFieldGet(_this, _timerId));
1214
+ _classPrivateFieldGet(_this, _store).setState(pick(["elapsedTime", "countdownTimeLeft"], initialState));
1215
+ _classPrivateFieldSet(_this, _mediaChunks, []);
1216
+ _classPrivateFieldGet(_this, _fireCallbacks).call(_this, SCREEN_RECORDER_EVENT.onRestart);
1217
+ _classPrivateFieldGet(_this, _countdownAndStartRecording).call(_this);
1218
+ });
1219
+ _defineProperty(this, "resetState", function () {
1220
+ _classPrivateFieldSet(_this, _mediaChunks, []);
1221
+ _classPrivateFieldSet(_this, _callbacks, {});
1222
+ clearInterval(_classPrivateFieldGet(_this, _timerId));
1223
+ clearInterval(_classPrivateFieldGet(_this, _countdownTimerId));
1224
+ _classPrivateFieldGet(_this, _store).getState().resetState();
1225
+ });
1226
+ _defineProperty(this, "revokePermissions", function () {
1227
+ if (!_classPrivateFieldGet(_this, _mediaRecorder)) return;
1228
+ _classPrivateFieldGet(_this, _mediaRecorder).onstop = null;
1229
+ _classPrivateFieldGet(_this, _mediaStream).getTracks().forEach(function (track) {
1230
+ return track.stop();
1231
+ });
1232
+ });
1233
+ _classPrivateFieldInitSpec(this, _checkCompatibility, {
1234
+ writable: true,
1235
+ value: function value() {
1236
+ var _navigator$mediaDevic;
1237
+ if (!((_navigator$mediaDevic = navigator.mediaDevices) !== null && _navigator$mediaDevic !== void 0 && _navigator$mediaDevic.getDisplayMedia)) {
1238
+ _classPrivateFieldGet(_this, _store).setState({
1239
+ error: SCREEN_RECORDER_ERROR.UnSupportedBrowser
1240
+ });
1241
+ }
1242
+ checkConstraints(_classPrivateFieldGet(_this, _audio), _classPrivateFieldGet(_this, _video));
1243
+ }
1244
+ });
1245
+ _classPrivateFieldInitSpec(this, _acquireMediaStream, {
1246
+ writable: true,
1247
+ value: function () {
1248
+ var _value = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
1249
+ var stream, audioStream;
1250
+ return _regeneratorRuntime.wrap(function _callee2$(_context2) {
1251
+ while (1) switch (_context2.prev = _context2.next) {
1252
+ case 0:
1253
+ _classPrivateFieldGet(_this, _store).setState({
1254
+ status: SCREEN_RECORDER_STATUS.acquiring_media
1255
+ });
1256
+ _context2.prev = 1;
1257
+ _context2.next = 4;
1258
+ return window.navigator.mediaDevices.getDisplayMedia({
1259
+ video: _classPrivateFieldGet(_this, _video) || true
1260
+ });
1261
+ case 4:
1262
+ stream = _context2.sent;
1263
+ // Event triggered when the user clicks on the stop sharing overlay button
1264
+ stream.getVideoTracks()[0].addEventListener("ended", function () {
1265
+ _this.stopRecording();
1266
+ });
1267
+ if (!_classPrivateFieldGet(_this, _audio)) {
1268
+ _context2.next = 11;
1269
+ break;
1270
+ }
1271
+ _context2.next = 9;
1272
+ return window.navigator.mediaDevices.getUserMedia({
1273
+ audio: _classPrivateFieldGet(_this, _audio)
1274
+ });
1275
+ case 9:
1276
+ audioStream = _context2.sent;
1277
+ audioStream.getAudioTracks().forEach(function (audioTrack) {
1278
+ return stream.addTrack(audioTrack);
1279
+ });
1280
+ case 11:
1281
+ _classPrivateFieldSet(_this, _mediaStream, stream);
1282
+ _classPrivateFieldGet(_this, _store).setState({
1283
+ status: SCREEN_RECORDER_STATUS.media_acquired
1284
+ });
1285
+ _context2.next = 18;
1286
+ break;
1287
+ case 15:
1288
+ _context2.prev = 15;
1289
+ _context2.t0 = _context2["catch"](1);
1290
+ _classPrivateFieldGet(_this, _store).setState({
1291
+ error: SCREEN_RECORDER_ERROR[_context2.t0.name],
1292
+ status: SCREEN_RECORDER_STATUS.idle
1293
+ });
1294
+ case 18:
1295
+ case "end":
1296
+ return _context2.stop();
1297
+ }
1298
+ }, _callee2, null, [[1, 15]]);
1299
+ }));
1300
+ function value() {
1301
+ return _value.apply(this, arguments);
1302
+ }
1303
+ return value;
1304
+ }()
1305
+ });
1306
+ _classPrivateFieldInitSpec(this, _fireCallbacks, {
1307
+ writable: true,
1308
+ value: function value(event) {
1309
+ var _classPrivateFieldGet8;
1310
+ var args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
1311
+ (_classPrivateFieldGet8 = _classPrivateFieldGet(_this, _callbacks)[event]) === null || _classPrivateFieldGet8 === void 0 ? void 0 : _classPrivateFieldGet8.forEach(function (callback) {
1312
+ callback.apply(void 0, _toConsumableArray(args));
1313
+ });
1314
+ }
1315
+ });
1316
+ _classPrivateFieldInitSpec(this, _onRecordingStart, {
1317
+ writable: true,
1318
+ value: function value() {
1319
+ _classPrivateFieldGet(_this, _fireCallbacks).call(_this, SCREEN_RECORDER_EVENT.onStart);
1320
+ }
1321
+ });
1322
+ _classPrivateFieldInitSpec(this, _onRecordingActive, {
1323
+ writable: true,
1324
+ value: function value(_ref2) {
1325
+ var data = _ref2.data;
1326
+ if (data.size <= 0) return;
1327
+ _classPrivateFieldGet(_this, _mediaChunks).push(data);
1328
+ _classPrivateFieldGet(_this, _fireCallbacks).call(_this, SCREEN_RECORDER_EVENT.onDataAvailable, [data]);
1329
+ }
1330
+ });
1331
+ _classPrivateFieldInitSpec(this, _onRecordingStop, {
1332
+ writable: true,
1333
+ value: function value() {
1334
+ _classPrivateFieldGet(_this, _store).setState({
1335
+ status: SCREEN_RECORDER_STATUS.stopped
1336
+ });
1337
+ _classPrivateFieldGet(_this, _fireCallbacks).call(_this, SCREEN_RECORDER_EVENT.onStop);
1338
+
1339
+ // If mediaStream is active after stopping mediaRecorder, then that means that
1340
+ // we are restarting and not stopping.
1341
+ if (_classPrivateFieldGet(_this, _mediaStream).active) {
1342
+ _classPrivateFieldGet(_this, _store).setState({
1343
+ status: SCREEN_RECORDER_STATUS.restarting
1344
+ });
1345
+ }
1346
+ }
1347
+ });
1348
+ _classPrivateFieldInitSpec(this, _countdownAndStartRecording, {
1349
+ writable: true,
1350
+ value: function value() {
1351
+ _classPrivateFieldSet(_this, _countdownTimerId, setInterval(function () {
1352
+ _classPrivateFieldGet(_this, _store).setState(function (_ref3) {
1353
+ var countdownTimeLeft = _ref3.countdownTimeLeft;
1354
+ if (countdownTimeLeft - ONE_SECOND > 0) {
1355
+ return {
1356
+ countdownTimeLeft: countdownTimeLeft - ONE_SECOND
1357
+ };
1358
+ }
1359
+ _classPrivateFieldGet(_this, _store).setState({
1360
+ status: SCREEN_RECORDER_STATUS.recording
1361
+ });
1362
+ _classPrivateFieldGet(_this, _mediaRecorder).start(5000);
1363
+ _classPrivateFieldGet(_this, _startTimer).call(_this);
1364
+ clearInterval(_classPrivateFieldGet(_this, _countdownTimerId));
1365
+ return {
1366
+ countdownTimeLeft: 0
1367
+ };
1368
+ });
1369
+ }, ONE_SECOND_IN_MILLISECONDS));
1370
+ }
1371
+ });
1372
+ _classPrivateFieldInitSpec(this, _startTimer, {
1373
+ writable: true,
1374
+ value: function value() {
1375
+ _classPrivateFieldSet(_this, _lastTimerUpdatedAt, Date.now());
1376
+ _classPrivateFieldSet(_this, _timerId, setInterval(function () {
1377
+ _classPrivateFieldGet(_this, _store).setState(function (_ref4) {
1378
+ var elapsedTime = _ref4.elapsedTime;
1379
+ var now = Date.now();
1380
+ var newElapsedTime = elapsedTime + (now - _classPrivateFieldGet(_this, _lastTimerUpdatedAt));
1381
+ _classPrivateFieldSet(_this, _lastTimerUpdatedAt, now);
1382
+ return {
1383
+ elapsedTime: newElapsedTime
1384
+ };
1385
+ });
1386
+ }, ONE_SECOND_IN_MILLISECONDS));
1387
+ }
1388
+ });
1389
+ _classPrivateFieldInitSpec(this, _stopTimer, {
1390
+ writable: true,
1391
+ value: function value() {
1392
+ clearInterval(_classPrivateFieldGet(_this, _timerId));
1393
+ var newElapsedTime = _classPrivateFieldGet(_this, _store).getState().elapsedTime + (Date.now() - _classPrivateFieldGet(_this, _lastTimerUpdatedAt));
1394
+ _classPrivateFieldGet(_this, _store).setState({
1395
+ elapsedTime: newElapsedTime
1396
+ });
1397
+ }
1398
+ });
1399
+ _classPrivateFieldSet(this, _audio, audio);
1400
+ _classPrivateFieldSet(this, _video, video);
1401
+ _classPrivateFieldSet(this, _store, prepareStore());
1402
+ _classPrivateFieldGet(this, _store).setState({
1403
+ status: SCREEN_RECORDER_STATUS.idle
1404
+ });
1405
+ _classPrivateFieldGet(this, _checkCompatibility).call(this);
1406
+ }
1407
+
1408
+ /** @type {import("neetocommons/react-utils").ZustandStoreHook} */
1409
+ _createClass(ScreenRecorder, [{
1410
+ key: "useRecorderStore",
1411
+ get: function get() {
1412
+ return _classPrivateFieldGet(this, _store);
1413
+ }
1414
+ }]);
1415
+ return ScreenRecorder;
1416
+ }();
1417
+ var screenRecorder = new ScreenRecorder(true, {
1418
+ displaySurface: DISPLAY_SURFACE.monitor
1419
+ });
1420
+
1421
+ export { multipartS3Upload, screenRecorder };
1422
+ //# sourceMappingURL=index.js.map