@bigbinary/neeto-media-recorder 2.5.8 → 2.6.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/core.js CHANGED
@@ -1,11 +1,12 @@
1
1
  import axios from 'axios';
2
2
  import { isPresent, existsBy, isNotEmpty, isNot, noop } from '@bigbinary/neeto-cist';
3
3
  import { RETRYABLE_ERRORS, MIME_TYPE as MIME_TYPE$1, UPLOAD_STATUS, UPLOAD_EVENT, SCREEN_RECORDER_STATUS, START_RECORDING_SOUND, RECORDING_LIMIT_REACHED_WARNING_SOUND, SCREEN_RECORDER_ERROR, SCREEN_RECORDER_EVENT, RECORDING_TIME_LIMIT_FREE_PLAN, ONE_SECOND, HALF_A_SECOND_IN_MILLISECONDS, ONE_SECOND_IN_MILLISECONDS, TWO_HUNDRED_MILLISECONDS, ONE_MINUTE_IN_MILLISECONDS, STOP_RECORDING_DUE_TO_LIMIT_REACHED_SOUND, IS_EXTENSION } from '@bigbinary/neeto-media-recorder/constants';
4
+ import { useMultipartS3UploadStatus as useMultipartS3UploadStatus$1, getMultipartS3Uploader as getMultipartS3Uploader$1 } from '@bigbinary/neeto-media-recorder/core';
4
5
  import { isNotNil, min, isNil, identity, isEmpty, pick, equals, not } from 'ramda';
5
6
  import platform from 'platform';
6
- import '@bigbinary/neeto-media-recorder/core';
7
7
  import withImmutableActions from '@bigbinary/neeto-commons-frontend/react-utils/withImmutableActions';
8
8
  import { create as create$3 } from 'zustand';
9
+ import { useSyncExternalStore } from 'react';
9
10
 
10
11
  function _arrayLikeToArray(arr, len) {
11
12
  if (len == null || len > arr.length) len = arr.length;
@@ -133,25 +134,6 @@ function _defineProperty(obj, key, value) {
133
134
  return obj;
134
135
  }
135
136
 
136
- function _classApplyDescriptorGet(receiver, descriptor) {
137
- if (descriptor.get) {
138
- return descriptor.get.call(receiver);
139
- }
140
- return descriptor.value;
141
- }
142
-
143
- function _classExtractFieldDescriptor(receiver, privateMap, action) {
144
- if (!privateMap.has(receiver)) {
145
- throw new TypeError("attempted to " + action + " private field on non-instance");
146
- }
147
- return privateMap.get(receiver);
148
- }
149
-
150
- function _classPrivateFieldGet(receiver, privateMap) {
151
- var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get");
152
- return _classApplyDescriptorGet(receiver, descriptor);
153
- }
154
-
155
137
  function _classApplyDescriptorSet(receiver, descriptor, value) {
156
138
  if (descriptor.set) {
157
139
  descriptor.set.call(receiver, value);
@@ -163,12 +145,31 @@ function _classApplyDescriptorSet(receiver, descriptor, value) {
163
145
  }
164
146
  }
165
147
 
148
+ function _classExtractFieldDescriptor(receiver, privateMap, action) {
149
+ if (!privateMap.has(receiver)) {
150
+ throw new TypeError("attempted to " + action + " private field on non-instance");
151
+ }
152
+ return privateMap.get(receiver);
153
+ }
154
+
166
155
  function _classPrivateFieldSet(receiver, privateMap, value) {
167
156
  var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set");
168
157
  _classApplyDescriptorSet(receiver, descriptor, value);
169
158
  return value;
170
159
  }
171
160
 
161
+ function _classApplyDescriptorGet(receiver, descriptor) {
162
+ if (descriptor.get) {
163
+ return descriptor.get.call(receiver);
164
+ }
165
+ return descriptor.value;
166
+ }
167
+
168
+ function _classPrivateFieldGet(receiver, privateMap) {
169
+ var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get");
170
+ return _classApplyDescriptorGet(receiver, descriptor);
171
+ }
172
+
172
173
  function getDefaultExportFromCjs (x) {
173
174
  return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
174
175
  }
@@ -518,6 +519,59 @@ try {
518
519
 
519
520
  var _regeneratorRuntime = /*@__PURE__*/getDefaultExportFromCjs(regenerator);
520
521
 
522
+ const byteToHex = [];
523
+ for (let i = 0; i < 256; ++i) {
524
+ byteToHex.push((i + 0x100).toString(16).slice(1));
525
+ }
526
+ function unsafeStringify(arr, offset = 0) {
527
+ return (byteToHex[arr[offset + 0]] +
528
+ byteToHex[arr[offset + 1]] +
529
+ byteToHex[arr[offset + 2]] +
530
+ byteToHex[arr[offset + 3]] +
531
+ '-' +
532
+ byteToHex[arr[offset + 4]] +
533
+ byteToHex[arr[offset + 5]] +
534
+ '-' +
535
+ byteToHex[arr[offset + 6]] +
536
+ byteToHex[arr[offset + 7]] +
537
+ '-' +
538
+ byteToHex[arr[offset + 8]] +
539
+ byteToHex[arr[offset + 9]] +
540
+ '-' +
541
+ byteToHex[arr[offset + 10]] +
542
+ byteToHex[arr[offset + 11]] +
543
+ byteToHex[arr[offset + 12]] +
544
+ byteToHex[arr[offset + 13]] +
545
+ byteToHex[arr[offset + 14]] +
546
+ byteToHex[arr[offset + 15]]).toLowerCase();
547
+ }
548
+
549
+ let getRandomValues;
550
+ const rnds8 = new Uint8Array(16);
551
+ function rng() {
552
+ if (!getRandomValues) {
553
+ if (typeof crypto === 'undefined' || !crypto.getRandomValues) {
554
+ throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');
555
+ }
556
+ getRandomValues = crypto.getRandomValues.bind(crypto);
557
+ }
558
+ return getRandomValues(rnds8);
559
+ }
560
+
561
+ const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);
562
+ var native = { randomUUID };
563
+
564
+ function v4(options, buf, offset) {
565
+ if (native.randomUUID && !buf && !options) {
566
+ return native.randomUUID();
567
+ }
568
+ options = options || {};
569
+ const rnds = options.random || (options.rng || rng)();
570
+ rnds[6] = (rnds[6] & 0x0f) | 0x40;
571
+ rnds[8] = (rnds[8] & 0x3f) | 0x80;
572
+ return unsafeStringify(rnds);
573
+ }
574
+
521
575
  function _setPrototypeOf(o, p) {
522
576
  _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {
523
577
  o.__proto__ = p;
@@ -863,12 +917,37 @@ var isMp4Supported = function isMp4Supported() {
863
917
  return getSupportedMimeType() === MIME_TYPE$1.mp4;
864
918
  };
865
919
 
866
- var prepareStore$1 = function prepareStore() {
867
- return create$3(withImmutableActions(function () {
868
- return {
869
- status: ""
870
- };
871
- }));
920
+ var createPrefixedLogger = function createPrefixedLogger(prefix) {
921
+ return {
922
+ info: function info() {
923
+ var _logger;
924
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
925
+ args[_key] = arguments[_key];
926
+ }
927
+ return (_logger = logger).info.apply(_logger, [prefix].concat(args));
928
+ },
929
+ error: function error() {
930
+ var _logger2;
931
+ for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
932
+ args[_key2] = arguments[_key2];
933
+ }
934
+ return (_logger2 = logger).error.apply(_logger2, [prefix].concat(args));
935
+ },
936
+ warn: function warn() {
937
+ var _logger3;
938
+ for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
939
+ args[_key3] = arguments[_key3];
940
+ }
941
+ return (_logger3 = logger).warn.apply(_logger3, [prefix].concat(args));
942
+ },
943
+ debug: function debug() {
944
+ var _logger4;
945
+ for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
946
+ args[_key4] = arguments[_key4];
947
+ }
948
+ return (_logger4 = logger).debug.apply(_logger4, [prefix].concat(args));
949
+ }
950
+ };
872
951
  };
873
952
 
874
953
  /**
@@ -898,24 +977,31 @@ var _unUploadedChunks = /*#__PURE__*/new WeakMap();
898
977
  var _partNumber = /*#__PURE__*/new WeakMap();
899
978
  var _s3PartUploadPromises = /*#__PURE__*/new WeakMap();
900
979
  var _callbacks$1 = /*#__PURE__*/new WeakMap();
901
- var _store$1 = /*#__PURE__*/new WeakMap();
902
980
  var _abortController = /*#__PURE__*/new WeakMap();
903
981
  var _pendingS3ChunkUploads = /*#__PURE__*/new WeakMap();
904
982
  var _completeUploadPromise = /*#__PURE__*/new WeakMap();
905
983
  var _failedUpload = /*#__PURE__*/new WeakMap();
906
984
  var _uploadProgress = /*#__PURE__*/new WeakMap();
985
+ var _status = /*#__PURE__*/new WeakMap();
986
+ var _id = /*#__PURE__*/new WeakMap();
987
+ var _logger$1 = /*#__PURE__*/new WeakMap();
988
+ var _status2 = /*#__PURE__*/new WeakMap();
907
989
  var _fireCallbacks$1 = /*#__PURE__*/new WeakMap();
908
990
  var _uploadChunkToS = /*#__PURE__*/new WeakMap();
909
991
  var _getCurrentUnUploadedBlob = /*#__PURE__*/new WeakMap();
910
- var _isNotInitialized = /*#__PURE__*/new WeakMap();
992
+ var _isRecordingNotSet = /*#__PURE__*/new WeakMap();
911
993
  var MultipartS3Uploader = /*#__PURE__*/function () {
912
994
  function MultipartS3Uploader() {
913
995
  var _this = this;
914
996
  _classCallCheck(this, MultipartS3Uploader);
915
- _classPrivateFieldInitSpec$1(this, _isNotInitialized, {
916
- get: _get_isNotInitialized,
997
+ _classPrivateFieldInitSpec$1(this, _isRecordingNotSet, {
998
+ get: _get_isRecordingNotSet,
917
999
  set: void 0
918
1000
  });
1001
+ _classPrivateFieldInitSpec$1(this, _status2, {
1002
+ get: void 0,
1003
+ set: _set_status
1004
+ });
919
1005
  _defineProperty(this, "MIN_UPLOAD_CHUNK_SIZE", 5 * 1024 * 1024);
920
1006
  _classPrivateFieldInitSpec$1(this, _recordingId, {
921
1007
  writable: true,
@@ -941,10 +1027,6 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
941
1027
  writable: true,
942
1028
  value: {}
943
1029
  });
944
- _classPrivateFieldInitSpec$1(this, _store$1, {
945
- writable: true,
946
- value: void 0
947
- });
948
1030
  _classPrivateFieldInitSpec$1(this, _abortController, {
949
1031
  writable: true,
950
1032
  value: void 0
@@ -965,7 +1047,19 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
965
1047
  writable: true,
966
1048
  value: {}
967
1049
  });
968
- _defineProperty(this, "initialize", function (recordingId, uploadId) {
1050
+ _classPrivateFieldInitSpec$1(this, _status, {
1051
+ writable: true,
1052
+ value: ""
1053
+ });
1054
+ _classPrivateFieldInitSpec$1(this, _id, {
1055
+ writable: true,
1056
+ value: v4()
1057
+ });
1058
+ _classPrivateFieldInitSpec$1(this, _logger$1, {
1059
+ writable: true,
1060
+ value: createPrefixedLogger("[".concat(_classPrivateFieldGet(this, _id), "]"))
1061
+ });
1062
+ _defineProperty(this, "setRecording", function (recordingId, uploadId) {
969
1063
  _classPrivateFieldSet(_this, _recordingId, recordingId);
970
1064
  _classPrivateFieldSet(_this, _uploadId, uploadId);
971
1065
  _classPrivateFieldSet(_this, _abortController, new AbortController());
@@ -974,8 +1068,8 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
974
1068
  if (data.size > 0) {
975
1069
  _classPrivateFieldGet(_this, _unUploadedChunks).push(data);
976
1070
  }
977
- if (_classPrivateFieldGet(_this, _isNotInitialized)) return;
978
- logger.info("Current unuploaded data size is ", _classPrivateFieldGet(_this, _getCurrentUnUploadedBlob).call(_this).size / 1024 / 1024, "MB");
1071
+ if (_classPrivateFieldGet(_this, _isRecordingNotSet)) return;
1072
+ _classPrivateFieldGet(_this, _logger$1).info("Current unuploaded data size is ", _classPrivateFieldGet(_this, _getCurrentUnUploadedBlob).call(_this).size / 1024 / 1024, "MB");
979
1073
  if (_classPrivateFieldGet(_this, _getCurrentUnUploadedBlob).call(_this).size > _this.MIN_UPLOAD_CHUNK_SIZE) {
980
1074
  var uploadChunkToS3Promise = _classPrivateFieldGet(_this, _uploadChunkToS).call(_this, _classPrivateFieldGet(_this, _unUploadedChunks));
981
1075
  _classPrivateFieldGet(_this, _pendingS3ChunkUploads).push(uploadChunkToS3Promise);
@@ -988,19 +1082,17 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
988
1082
  while (1) switch (_context.prev = _context.next) {
989
1083
  case 0:
990
1084
  _context.prev = 0;
991
- _classPrivateFieldGet(_this, _store$1).setState({
992
- status: UPLOAD_STATUS.uploading
993
- });
994
- if (!_classPrivateFieldGet(_this, _isNotInitialized)) {
1085
+ _classPrivateFieldSet(_this, _status2, UPLOAD_STATUS.uploading);
1086
+ if (!_classPrivateFieldGet(_this, _isRecordingNotSet)) {
995
1087
  _context.next = 5;
996
1088
  break;
997
1089
  }
998
- logger.error("completeUpload -> not initialized");
1090
+ _classPrivateFieldGet(_this, _logger$1).error("completeUpload -> not initialized");
999
1091
  return _context.abrupt("return");
1000
1092
  case 5:
1001
1093
  // Upload last chunk; only if last chunk has data
1002
1094
  if (_classPrivateFieldGet(_this, _getCurrentUnUploadedBlob).call(_this).size > 0) {
1003
- logger.info("completeUpload -> need to upload last chunk");
1095
+ _classPrivateFieldGet(_this, _logger$1).info("completeUpload -> need to upload last chunk");
1004
1096
  uploadChunkToS3Promise = _classPrivateFieldGet(_this, _uploadChunkToS).call(_this, _classPrivateFieldGet(_this, _unUploadedChunks));
1005
1097
  _classPrivateFieldGet(_this, _pendingS3ChunkUploads).push(uploadChunkToS3Promise);
1006
1098
  }
@@ -1013,39 +1105,32 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
1013
1105
  * adding the new presignedUrl part upload to s3PartUploadPromises.
1014
1106
  * This results in incorrect partNumbers.
1015
1107
  */
1016
- logger.info("completeUpload -> uploading all pending chunks...", _classPrivateFieldGet(_this, _pendingS3ChunkUploads).length);
1108
+ _classPrivateFieldGet(_this, _logger$1).info("completeUpload -> uploading all pending chunks...", _classPrivateFieldGet(_this, _pendingS3ChunkUploads).length);
1017
1109
  _context.next = 9;
1018
1110
  return Promise.all(_classPrivateFieldGet(_this, _pendingS3ChunkUploads));
1019
1111
  case 9:
1020
- logger.info("completeUpload -> finishing part uploads...");
1112
+ _classPrivateFieldGet(_this, _logger$1).info("completeUpload -> finishing part uploads...");
1021
1113
  _context.next = 12;
1022
1114
  return Promise.all(_classPrivateFieldGet(_this, _s3PartUploadPromises));
1023
1115
  case 12:
1024
1116
  resolvedS3PartUploadPromises = _context.sent;
1025
1117
  if (!isNotEmpty(_classPrivateFieldGet(_this, _failedUpload))) {
1026
- _context.next = 19;
1118
+ _context.next = 18;
1027
1119
  break;
1028
1120
  }
1029
- logger.info("completeUpload -> chunks with these partNumbers failed:", _classPrivateFieldGet(_this, _failedUpload));
1030
- _classPrivateFieldGet(_this, _store$1).setState({
1031
- status: UPLOAD_STATUS.error
1032
- });
1121
+ _classPrivateFieldGet(_this, _logger$1).info("completeUpload -> chunks with these partNumbers failed:", _classPrivateFieldGet(_this, _failedUpload));
1122
+ _classPrivateFieldSet(_this, _status2, UPLOAD_STATUS.error);
1033
1123
  _classPrivateFieldGet(_this, _fireCallbacks$1).call(_this, UPLOAD_EVENT.onError);
1034
- _classPrivateFieldGet(_this, _store$1).setState({
1035
- status: UPLOAD_STATUS.error
1036
- });
1037
1124
  return _context.abrupt("return");
1038
- case 19:
1125
+ case 18:
1039
1126
  if (!(resolvedS3PartUploadPromises.length === 0)) {
1040
- _context.next = 23;
1127
+ _context.next = 22;
1041
1128
  break;
1042
1129
  }
1043
- logger.info("completeUpload -> insufficient data");
1044
- _classPrivateFieldGet(_this, _store$1).setState({
1045
- status: UPLOAD_STATUS.insufficient_data
1046
- });
1130
+ _classPrivateFieldGet(_this, _logger$1).info("completeUpload -> insufficient data");
1131
+ _classPrivateFieldSet(_this, _status2, UPLOAD_STATUS.insufficient_data);
1047
1132
  return _context.abrupt("return");
1048
- case 23:
1133
+ case 22:
1049
1134
  parts = resolvedS3PartUploadPromises.filter(isNotCancelledRequest).map(function (resolvedResponse) {
1050
1135
  return {
1051
1136
  etag: resolvedResponse.headers.etag,
@@ -1054,7 +1139,7 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
1054
1139
  }).toSorted(function (a, b) {
1055
1140
  return Number(a.partNumber) - Number(b.partNumber);
1056
1141
  });
1057
- logger.info("completeUpload -> uploaded parts: ", parts);
1142
+ _classPrivateFieldGet(_this, _logger$1).info("completeUpload -> uploaded parts: ", parts);
1058
1143
  _classPrivateFieldSet(_this, _completeUploadPromise, completeUploadApi.create({
1059
1144
  recordingId: _classPrivateFieldGet(_this, _recordingId),
1060
1145
  payload: {
@@ -1066,75 +1151,73 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
1066
1151
  signal: _classPrivateFieldGet(_this, _abortController).signal
1067
1152
  }
1068
1153
  }));
1069
- logger.info("completeUpload -> completing upload... ");
1070
- _context.next = 29;
1154
+ _classPrivateFieldGet(_this, _logger$1).info("completeUpload -> completing upload... ");
1155
+ _context.next = 28;
1071
1156
  return _classPrivateFieldGet(_this, _completeUploadPromise);
1072
- case 29:
1073
- logger.info("completeUpload -> upload completed");
1074
- if (!(_classPrivateFieldGet(_this, _store$1).getState().status === UPLOAD_STATUS.aborting)) {
1075
- _context.next = 33;
1157
+ case 28:
1158
+ _classPrivateFieldGet(_this, _logger$1).info("completeUpload -> upload completed");
1159
+ if (!(_this.status === UPLOAD_STATUS.aborting)) {
1160
+ _context.next = 32;
1076
1161
  break;
1077
1162
  }
1078
- logger.info("completeUpload -> upload was marked as aborted");
1163
+ _classPrivateFieldGet(_this, _logger$1).info("completeUpload -> upload was marked as aborted");
1079
1164
  return _context.abrupt("return");
1080
- case 33:
1081
- _classPrivateFieldGet(_this, _store$1).setState({
1082
- status: UPLOAD_STATUS.completed
1083
- });
1165
+ case 32:
1166
+ _classPrivateFieldSet(_this, _status2, UPLOAD_STATUS.completed);
1084
1167
  _classPrivateFieldGet(_this, _fireCallbacks$1).call(_this, UPLOAD_EVENT.onComplete);
1085
- _context.next = 40;
1168
+ _context.next = 39;
1086
1169
  break;
1087
- case 37:
1088
- _context.prev = 37;
1170
+ case 36:
1171
+ _context.prev = 36;
1089
1172
  _context.t0 = _context["catch"](0);
1090
1173
  // ignore if aborted
1091
1174
  if (!axios.isCancel(_context.t0)) {
1092
- _classPrivateFieldGet(_this, _store$1).setState({
1093
- status: UPLOAD_STATUS.error
1094
- });
1175
+ _classPrivateFieldSet(_this, _status2, UPLOAD_STATUS.error);
1095
1176
  _classPrivateFieldGet(_this, _fireCallbacks$1).call(_this, UPLOAD_EVENT.onError);
1096
- logger.error(_context.t0);
1177
+ _classPrivateFieldGet(_this, _logger$1).error(_context.t0);
1097
1178
  }
1098
- case 40:
1099
- _context.prev = 40;
1179
+ case 39:
1180
+ _context.prev = 39;
1100
1181
  _classPrivateFieldSet(_this, _completeUploadPromise, null);
1101
- return _context.finish(40);
1102
- case 43:
1182
+ return _context.finish(39);
1183
+ case 42:
1103
1184
  case "end":
1104
1185
  return _context.stop();
1105
1186
  }
1106
- }, _callee, null, [[0, 37, 40, 43]]);
1187
+ }, _callee, null, [[0, 36, 39, 42]]);
1107
1188
  })));
1108
1189
  _defineProperty(this, "abortUpload", /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
1109
- var recordingId, uploadId;
1190
+ var forceAbort,
1191
+ recordingId,
1192
+ uploadId,
1193
+ _args2 = arguments;
1110
1194
  return _regeneratorRuntime.wrap(function _callee2$(_context2) {
1111
1195
  while (1) switch (_context2.prev = _context2.next) {
1112
1196
  case 0:
1113
- _context2.prev = 0;
1114
- if (!(_classPrivateFieldGet(_this, _store$1).getState().status === UPLOAD_STATUS.aborting)) {
1115
- _context2.next = 4;
1197
+ forceAbort = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : false;
1198
+ _context2.prev = 1;
1199
+ if (!(_this.status === UPLOAD_STATUS.aborting && !forceAbort)) {
1200
+ _context2.next = 5;
1116
1201
  break;
1117
1202
  }
1118
- logger.info("abortUpload -> already aborting");
1203
+ _classPrivateFieldGet(_this, _logger$1).info("abortUpload -> already aborting");
1119
1204
  return _context2.abrupt("return");
1120
- case 4:
1121
- _classPrivateFieldGet(_this, _store$1).setState({
1122
- status: UPLOAD_STATUS.aborting
1123
- });
1124
- if (!_classPrivateFieldGet(_this, _isNotInitialized)) {
1125
- _context2.next = 8;
1205
+ case 5:
1206
+ _classPrivateFieldSet(_this, _status2, UPLOAD_STATUS.aborting);
1207
+ if (!_classPrivateFieldGet(_this, _isRecordingNotSet)) {
1208
+ _context2.next = 9;
1126
1209
  break;
1127
1210
  }
1128
- logger.info("abortUpload -> not initialized");
1211
+ _classPrivateFieldGet(_this, _logger$1).info("abortUpload -> not initialized");
1129
1212
  return _context2.abrupt("return");
1130
- case 8:
1213
+ case 9:
1131
1214
  recordingId = _classPrivateFieldGet(_this, _recordingId);
1132
1215
  uploadId = _classPrivateFieldGet(_this, _uploadId);
1133
- _context2.next = 12;
1216
+ _context2.next = 13;
1134
1217
  return _classPrivateFieldGet(_this, _completeUploadPromise);
1135
- case 12:
1218
+ case 13:
1136
1219
  _classPrivateFieldGet(_this, _abortController).abort();
1137
- _context2.next = 15;
1220
+ _context2.next = 16;
1138
1221
  return abortUploadApi.create({
1139
1222
  recordingId: recordingId,
1140
1223
  payload: {
@@ -1142,26 +1225,25 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
1142
1225
  isMp4: isMp4Supported()
1143
1226
  }
1144
1227
  });
1145
- case 15:
1146
- logger.info("abortUpload -> abort successful");
1228
+ case 16:
1229
+ _classPrivateFieldGet(_this, _logger$1).info("abortUpload -> abort successful");
1230
+ _classPrivateFieldGet(_this, _fireCallbacks$1).call(_this, UPLOAD_EVENT.onAbort);
1147
1231
  _classPrivateFieldSet(_this, _unUploadedChunks, []);
1148
1232
  _classPrivateFieldSet(_this, _partNumber, 1);
1149
1233
  _classPrivateFieldSet(_this, _s3PartUploadPromises, []);
1150
- _classPrivateFieldGet(_this, _store$1).setState({
1151
- status: ""
1152
- });
1234
+ _classPrivateFieldSet(_this, _status2, "");
1153
1235
  _classPrivateFieldSet(_this, _abortController, null);
1154
- _context2.next = 26;
1236
+ _context2.next = 28;
1155
1237
  break;
1156
- case 23:
1157
- _context2.prev = 23;
1158
- _context2.t0 = _context2["catch"](0);
1159
- logger.error(_context2.t0);
1160
- case 26:
1238
+ case 25:
1239
+ _context2.prev = 25;
1240
+ _context2.t0 = _context2["catch"](1);
1241
+ _classPrivateFieldGet(_this, _logger$1).error(_context2.t0);
1242
+ case 28:
1161
1243
  case "end":
1162
1244
  return _context2.stop();
1163
1245
  }
1164
- }, _callee2, null, [[0, 23]]);
1246
+ }, _callee2, null, [[1, 25]]);
1165
1247
  })));
1166
1248
  _defineProperty(this, "resetState", function () {
1167
1249
  _classPrivateFieldSet(_this, _recordingId, "");
@@ -1173,9 +1255,7 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
1173
1255
  _classPrivateFieldSet(_this, _callbacks$1, {});
1174
1256
  _classPrivateFieldSet(_this, _failedUpload, []);
1175
1257
  _classPrivateFieldSet(_this, _uploadProgress, {});
1176
- _classPrivateFieldGet(_this, _store$1).setState({
1177
- status: ""
1178
- });
1258
+ _classPrivateFieldSet(_this, _status2, "");
1179
1259
  });
1180
1260
  _defineProperty(this, "addCallback", function (event, callback) {
1181
1261
  var _classPrivateFieldGet2;
@@ -1207,7 +1287,7 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
1207
1287
  return _regeneratorRuntime.wrap(function _callee3$(_context3) {
1208
1288
  while (1) switch (_context3.prev = _context3.next) {
1209
1289
  case 0:
1210
- logger.info("Part ready to be uploaded: ", _classPrivateFieldGet(_this, _partNumber));
1290
+ _classPrivateFieldGet(_this, _logger$1).info("Part ready to be uploaded: ", _classPrivateFieldGet(_this, _partNumber));
1211
1291
  partNumber = _classPrivateFieldGet(_this, _partNumber);
1212
1292
  mimeType = getSupportedMimeType();
1213
1293
  _classPrivateFieldSet(_this, _partNumber, (_this$partNumber = _classPrivateFieldGet(_this, _partNumber), _this$partNumber++, _this$partNumber));
@@ -1233,7 +1313,7 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
1233
1313
  case 8:
1234
1314
  _yield$partPresignedU = _context3.sent;
1235
1315
  presignedUrl = _yield$partPresignedU.presignedUrl;
1236
- logger.info("Presigned url created for partNumber:", partNumber);
1316
+ _classPrivateFieldGet(_this, _logger$1).info("Presigned url created for partNumber:", partNumber);
1237
1317
  s3PartUploadPromise = s3Api.presignedUpload({
1238
1318
  presignedUrl: presignedUrl,
1239
1319
  blob: new Blob(chunks, {
@@ -1247,9 +1327,9 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
1247
1327
  uploaded: e.loaded,
1248
1328
  total: e.total
1249
1329
  };
1250
- if (_classPrivateFieldGet(_this, _store$1).getState().status === UPLOAD_STATUS.uploading) {
1330
+ if (_this.status === UPLOAD_STATUS.uploading) {
1251
1331
  var percentCompleted = calculateUploadProgress(_classPrivateFieldGet(_this, _uploadProgress));
1252
- logger.info("Upload Progress: ".concat(percentCompleted, "%"));
1332
+ _classPrivateFieldGet(_this, _logger$1).info("Upload Progress: ".concat(percentCompleted, "%"));
1253
1333
  _classPrivateFieldGet(_this, _fireCallbacks$1).call(_this, UPLOAD_EVENT.onProgress, [percentCompleted]);
1254
1334
  }
1255
1335
  }
@@ -1263,11 +1343,9 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
1263
1343
  _context3.t0 = _context3["catch"](5);
1264
1344
  // ignore if aborted
1265
1345
  if (!axios.isCancel(_context3.t0)) {
1266
- logger.error("Failed to upload partNumber:", partNumber);
1267
- if (_classPrivateFieldGet(_this, _store$1).getState().status === UPLOAD_STATUS.uploading) {
1268
- _classPrivateFieldGet(_this, _store$1).setState({
1269
- status: UPLOAD_STATUS.error
1270
- });
1346
+ _classPrivateFieldGet(_this, _logger$1).error("Failed to upload partNumber:", partNumber);
1347
+ if (_this.status === UPLOAD_STATUS.uploading) {
1348
+ _classPrivateFieldSet(_this, _status2, UPLOAD_STATUS.error);
1271
1349
  _classPrivateFieldGet(_this, _fireCallbacks$1).call(_this, UPLOAD_EVENT.onError);
1272
1350
  } else {
1273
1351
  _classPrivateFieldGet(_this, _failedUpload).push(partNumber);
@@ -1293,14 +1371,12 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
1293
1371
  });
1294
1372
  }
1295
1373
  });
1296
- _classPrivateFieldSet(this, _store$1, prepareStore$1());
1374
+ _classPrivateFieldGet(this, _logger$1).info("Uploader initialized");
1297
1375
  }
1298
-
1299
- /** @type {import("neetocommons/react-utils").ZustandStoreHook} */
1300
1376
  _createClass(MultipartS3Uploader, [{
1301
- key: "useMultipartS3UploadStore",
1377
+ key: "status",
1302
1378
  get: function get() {
1303
- return _classPrivateFieldGet(this, _store$1);
1379
+ return _classPrivateFieldGet(this, _status);
1304
1380
  }
1305
1381
  }, {
1306
1382
  key: "hasSufficientData",
@@ -1310,10 +1386,24 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
1310
1386
  }]);
1311
1387
  return MultipartS3Uploader;
1312
1388
  }();
1313
- function _get_isNotInitialized() {
1389
+ function _set_status(status) {
1390
+ _classPrivateFieldSet(this, _status, status);
1391
+ useMultipartS3UploadStatus$1.triggerStatusChange();
1392
+ }
1393
+ function _get_isRecordingNotSet() {
1314
1394
  return isEmpty(_classPrivateFieldGet(this, _uploadId) + _classPrivateFieldGet(this, _recordingId));
1315
1395
  }
1316
1396
  var multipartS3Uploader = new MultipartS3Uploader();
1397
+ var getMultipartS3Uploader = function getMultipartS3Uploader() {
1398
+ var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
1399
+ _ref3$initialize = _ref3.initialize,
1400
+ initialize = _ref3$initialize === void 0 ? false : _ref3$initialize;
1401
+ if (!multipartS3Uploader || initialize) {
1402
+ multipartS3Uploader = new MultipartS3Uploader();
1403
+ useMultipartS3UploadStatus$1.triggerStatusChange();
1404
+ }
1405
+ return multipartS3Uploader;
1406
+ };
1317
1407
 
1318
1408
  function _arrayWithHoles(arr) {
1319
1409
  if (Array.isArray(arr)) return arr;
@@ -1387,6 +1477,7 @@ var _video = /*#__PURE__*/new WeakMap();
1387
1477
  var _mediaRecorder = /*#__PURE__*/new WeakMap();
1388
1478
  var _mediaStream = /*#__PURE__*/new WeakMap();
1389
1479
  var _store = /*#__PURE__*/new WeakMap();
1480
+ var _logger = /*#__PURE__*/new WeakMap();
1390
1481
  var _mediaChunks = /*#__PURE__*/new WeakMap();
1391
1482
  var _callbacks = /*#__PURE__*/new WeakMap();
1392
1483
  var _lastTimerUpdatedAt = /*#__PURE__*/new WeakMap();
@@ -1434,6 +1525,10 @@ var ScreenRecorder = /*#__PURE__*/function () {
1434
1525
  writable: true,
1435
1526
  value: void 0
1436
1527
  });
1528
+ _classPrivateFieldInitSpec(this, _logger, {
1529
+ writable: true,
1530
+ value: createPrefixedLogger("[ScreenRecorder]")
1531
+ });
1437
1532
  _classPrivateFieldInitSpec(this, _mediaChunks, {
1438
1533
  writable: true,
1439
1534
  value: []
@@ -1522,25 +1617,27 @@ var ScreenRecorder = /*#__PURE__*/function () {
1522
1617
  case 0:
1523
1618
  _classPrivateFieldGet(_this, _store).setState(pick(["error"], initialState));
1524
1619
  if (_classPrivateFieldGet(_this, _mediaStream)) {
1525
- _context.next = 4;
1620
+ _context.next = 5;
1526
1621
  break;
1527
1622
  }
1528
- _context.next = 4;
1623
+ _classPrivateFieldGet(_this, _logger).info("acquiring media stream");
1624
+ _context.next = 5;
1529
1625
  return _classPrivateFieldGet(_this, _acquireMediaStream).call(_this);
1530
- case 4:
1626
+ case 5:
1531
1627
  if (!(_classPrivateFieldGet(_this, _mediaStream) && isStreamEnded(_classPrivateFieldGet(_this, _mediaStream)))) {
1532
- _context.next = 7;
1628
+ _context.next = 9;
1533
1629
  break;
1534
1630
  }
1535
- _context.next = 7;
1631
+ _classPrivateFieldGet(_this, _logger).info("media stream ended, acquiring media stream again");
1632
+ _context.next = 9;
1536
1633
  return _classPrivateFieldGet(_this, _acquireMediaStream).call(_this);
1537
- case 7:
1634
+ case 9:
1538
1635
  if (!(!_classPrivateFieldGet(_this, _mediaStream) || isStreamEnded(_classPrivateFieldGet(_this, _mediaStream)))) {
1539
- _context.next = 9;
1636
+ _context.next = 11;
1540
1637
  break;
1541
1638
  }
1542
1639
  return _context.abrupt("return");
1543
- case 9:
1640
+ case 11:
1544
1641
  options = getMediaRecorderOptions();
1545
1642
  _classPrivateFieldSet(_this, _mediaChunks, []);
1546
1643
  _classPrivateFieldSet(_this, _mediaRecorder, new MediaRecorder(_classPrivateFieldGet(_this, _mediaStream), options));
@@ -1554,7 +1651,7 @@ var ScreenRecorder = /*#__PURE__*/function () {
1554
1651
  });
1555
1652
  };
1556
1653
  _classPrivateFieldGet(_this, _countdownAndStartRecording).call(_this);
1557
- case 17:
1654
+ case 19:
1558
1655
  case "end":
1559
1656
  return _context.stop();
1560
1657
  }
@@ -1793,7 +1890,7 @@ var ScreenRecorder = /*#__PURE__*/function () {
1793
1890
  error: SCREEN_RECORDER_ERROR.MicPermissionDenied,
1794
1891
  status: SCREEN_RECORDER_STATUS.idle
1795
1892
  });
1796
- } else if (!stream) {
1893
+ } else if (!_classPrivateFieldGet(_this, _mediaStream) || isStreamEnded(_classPrivateFieldGet(_this, _mediaStream))) {
1797
1894
  _classPrivateFieldGet(_this, _store).setState({
1798
1895
  error: SCREEN_RECORDER_ERROR[_context2.t1.name],
1799
1896
  status: SCREEN_RECORDER_STATUS.idle
@@ -1831,7 +1928,7 @@ var ScreenRecorder = /*#__PURE__*/function () {
1831
1928
  writable: true,
1832
1929
  value: function value(_ref2) {
1833
1930
  var data = _ref2.data;
1834
- logger.info("received data in onRecordingActive");
1931
+ _classPrivateFieldGet(_this, _logger).info("received data in onRecordingActive");
1835
1932
  if (data.size <= 0) return;
1836
1933
  _classPrivateFieldGet(_this, _mediaChunks).push(data);
1837
1934
  _classPrivateFieldGet(_this, _fireCallbacks).call(_this, SCREEN_RECORDER_EVENT.onDataAvailable, [data]);
@@ -1840,7 +1937,7 @@ var ScreenRecorder = /*#__PURE__*/function () {
1840
1937
  _classPrivateFieldInitSpec(this, _onRecordingStop, {
1841
1938
  writable: true,
1842
1939
  value: function value() {
1843
- logger.info("stopping recording in onRecordingStop");
1940
+ _classPrivateFieldGet(_this, _logger).info("stopping recording in onRecordingStop");
1844
1941
  _classPrivateFieldGet(_this, _store).setState({
1845
1942
  status: SCREEN_RECORDER_STATUS.stopped
1846
1943
  });
@@ -1858,6 +1955,7 @@ var ScreenRecorder = /*#__PURE__*/function () {
1858
1955
  _classPrivateFieldInitSpec(this, _countdownAndStartRecording, {
1859
1956
  writable: true,
1860
1957
  value: function value() {
1958
+ if (_classPrivateFieldGet(_this, _countdownTimerId)) return;
1861
1959
  _classPrivateFieldSet(_this, _countdownTimerId, setInterval(function () {
1862
1960
  _classPrivateFieldGet(_this, _store).setState(function (_ref3) {
1863
1961
  var countdownTimeLeft = _ref3.countdownTimeLeft;
@@ -1873,19 +1971,40 @@ var ScreenRecorder = /*#__PURE__*/function () {
1873
1971
  status: SCREEN_RECORDER_STATUS.recording
1874
1972
  });
1875
1973
  clearInterval(_classPrivateFieldGet(_this, _countdownTimerId));
1974
+ _classPrivateFieldSet(_this, _countdownTimerId, null);
1876
1975
  _classPrivateFieldSet(_this, _startRecordingTimeoutID, setTimeout(function () {
1877
1976
  try {
1977
+ _classPrivateFieldGet(_this, _logger).info("starting mediaRecorder");
1978
+ if (!_classPrivateFieldGet(_this, _mediaRecorder)) {
1979
+ _classPrivateFieldGet(_this, _logger).info("mediaRecorder is not defined");
1980
+ _classPrivateFieldGet(_this, _store).setState({
1981
+ status: SCREEN_RECORDER_STATUS.idle,
1982
+ error: SCREEN_RECORDER_ERROR.FailedToStart
1983
+ });
1984
+ return;
1985
+ }
1986
+ if (!_classPrivateFieldGet(_this, _mediaStream) || isStreamEnded(_classPrivateFieldGet(_this, _mediaStream))) {
1987
+ _classPrivateFieldGet(_this, _logger).info("media stream ended, not starting mediaRecorder");
1988
+ _classPrivateFieldGet(_this, _store).setState({
1989
+ status: SCREEN_RECORDER_STATUS.idle,
1990
+ error: SCREEN_RECORDER_ERROR.FailedToStart
1991
+ });
1992
+ return;
1993
+ }
1878
1994
  _classPrivateFieldGet(_this, _mediaRecorder).start(5000);
1995
+ _classPrivateFieldGet(_this, _logger).info("started mediaRecorder");
1879
1996
  _classPrivateFieldGet(_this, _startTimer).call(_this);
1880
1997
  } catch (error) {
1881
- clearInterval(_classPrivateFieldGet(_this, _timerId));
1998
+ _classPrivateFieldGet(_this, _logger).info("Failed to start mediaRecorder", error);
1882
1999
  _classPrivateFieldGet(_this, _store).setState({
1883
2000
  status: SCREEN_RECORDER_STATUS.idle,
1884
- error: SCREEN_RECORDER_ERROR[error.name]
2001
+ error: SCREEN_RECORDER_ERROR.FailedToStart
1885
2002
  });
1886
- _classPrivateFieldGet(_this, _fireCallbacks).call(_this, SCREEN_RECORDER_EVENT.onError, [error]);
2003
+
1887
2004
  // To prevent triggering #onRecordingStop when the mediaRecorder is failed to start.
1888
- _classPrivateFieldGet(_this, _mediaRecorder).onstop = noop;
2005
+ if (_classPrivateFieldGet(_this, _mediaRecorder)) {
2006
+ _classPrivateFieldGet(_this, _mediaRecorder).onstop = noop;
2007
+ }
1889
2008
  if (_classPrivateFieldGet(_this, _mediaStream)) {
1890
2009
  _classPrivateFieldGet(_this, _mediaStream).getTracks().forEach(function (track) {
1891
2010
  return track.stop();
@@ -1991,5 +2110,34 @@ var screenRecorder = new ScreenRecorder(true, {
1991
2110
  displaySurface: DISPLAY_SURFACE.monitor
1992
2111
  });
1993
2112
 
1994
- export { multipartS3Uploader, screenRecorder };
2113
+ var listeners = new Set();
2114
+ var subscribe = function subscribe(listener) {
2115
+ listeners.add(listener);
2116
+ return function () {
2117
+ return listeners["delete"](listener);
2118
+ };
2119
+ };
2120
+ var triggerStatusChange = function triggerStatusChange() {
2121
+ listeners.forEach(function (listener) {
2122
+ return listener();
2123
+ });
2124
+ };
2125
+ var getSnapshot = function getSnapshot() {
2126
+ return getMultipartS3Uploader$1().status;
2127
+ };
2128
+ var useMultipartS3UploadStatus = function useMultipartS3UploadStatus() {
2129
+ var status = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
2130
+ return {
2131
+ status: status,
2132
+ isStatus: function isStatus() {
2133
+ for (var _len = arguments.length, statuses = new Array(_len), _key = 0; _key < _len; _key++) {
2134
+ statuses[_key] = arguments[_key];
2135
+ }
2136
+ return statuses.includes(status);
2137
+ }
2138
+ };
2139
+ };
2140
+ useMultipartS3UploadStatus.triggerStatusChange = triggerStatusChange;
2141
+
2142
+ export { getMultipartS3Uploader, screenRecorder, useMultipartS3UploadStatus };
1995
2143
  //# sourceMappingURL=core.js.map