@bigbinary/neeto-media-recorder 2.1.5 → 2.1.6-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/constants.js CHANGED
@@ -20,7 +20,9 @@ var ONE_MINUTE_IN_MILLISECONDS = 60 * ONE_SECOND_IN_MILLISECONDS;
20
20
  var ONE_HOUR_IN_MILLISECONDS = 60 * ONE_MINUTE_IN_MILLISECONDS;
21
21
  var ONE_SECOND = 1;
22
22
  var UPLOAD_EVENT = {
23
- onComplete: "onComplete"
23
+ onComplete: "onComplete",
24
+ onError: "onError",
25
+ onProgress: "onProgress"
24
26
  };
25
27
  var UPLOAD_STATUS = {
26
28
  uploading: "uploading",
@@ -63,7 +65,8 @@ var SCREEN_RECORDER_EVENT = {
63
65
  onDiscard: "onDiscard",
64
66
  onDataAvailable: "onDataAvailable",
65
67
  onDiscardDuringCountdown: "onDiscardDuringCountdown",
66
- onRestart: "onRestart"
68
+ onRestart: "onRestart",
69
+ onReUpload: "onReUpload"
67
70
  };
68
71
  var TOTAL_RETRIES = 30;
69
72
  var INITIAL_RETRY_DELAY = 4000;
package/constants.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sources":["node_modules/@babel/runtime/helpers/esm/typeof.js","src/constants.js"],"sourcesContent":["export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}","import platform from \"platform\";\nimport { isNotNil } from \"ramda\";\n\n// https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#ErrorCodeList\nexport const RETRIABLE_ERRORS = [500, 503];\n\nexport const ONE_SECOND_IN_MILLISECONDS = 1000;\nexport const HALF_A_SECOND_IN_MILLISECONDS = 500;\nexport const TWO_HUNDRED_MILLISECONDS = 200;\n\nexport const ONE_MINUTE_IN_MILLISECONDS = 60 * ONE_SECOND_IN_MILLISECONDS;\nexport const ONE_HOUR_IN_MILLISECONDS = 60 * ONE_MINUTE_IN_MILLISECONDS;\n\nexport const ONE_SECOND = 1;\n\nexport const UPLOAD_EVENT = { onComplete: \"onComplete\" };\n\nexport const UPLOAD_STATUS = {\n uploading: \"uploading\",\n completed: \"completed\",\n aborting: \"aborting\",\n insufficient_data: \"insufficient_data\",\n};\n\nexport const SCREEN_RECORDER_STATUS = {\n media_aborted: \"media_aborted\",\n permission_denied: \"permission_denied\",\n no_specified_media_found: \"no_specified_media_found\",\n media_in_use: \"media_in_use\",\n invalid_media_constraints: \"invalid_media_constraints\",\n no_chrome_flags_set: \"no_chrome_flags_set\",\n recorder_error: \"recorder_error\",\n idle: \"idle\",\n acquiring_media: \"acquiring_media\",\n media_acquired: \"media_acquired\",\n restarting: \"restarting\",\n recording: \"recording\",\n stopping: \"stopping\",\n stopped: \"stopped\",\n paused: \"paused\",\n};\n\nexport const SCREEN_RECORDER_ERROR = {\n MicPermissionDenied: \"mic_permission_denied\",\n AbortError: \"media_aborted\",\n NotAllowedError: \"permission_denied\",\n NotFoundError: \"no_specified_media_found\",\n NotReadableError: \"media_in_use\",\n OverconstrainedError: \"invalid_media_constraints\",\n TypeError: \"no_chrome_flags_set\",\n None: \"\",\n NoRecorder: \"recorder_error\",\n UnSupportedBrowser: \"unsupported_browser\",\n};\n\nexport const SCREEN_RECORDER_EVENT = {\n onStart: \"onStart\",\n onStop: \"onStop\",\n onDiscard: \"onDiscard\",\n onDataAvailable: \"onDataAvailable\",\n onDiscardDuringCountdown: \"onDiscardDuringCountdown\",\n onRestart: \"onRestart\",\n};\n\nexport const TOTAL_RETRIES = 30;\nexport const INITIAL_RETRY_DELAY = 4000;\nexport const MAX_RETRY_DELAY = 16000;\n\nexport const DEFAULT_RETRY_CONFIG = {\n retries: TOTAL_RETRIES,\n retryDelay: INITIAL_RETRY_DELAY,\n retryableStatuses: [],\n};\n\n// No need to localize this since it will only be used in the code\n// eslint-disable-next-line @bigbinary/neeto/hard-coded-strings-should-be-localized\nexport const NETWORK_ERROR = \"Network Error\";\nexport const TIMEOUT_ERROR = \"ECONNABORTED\";\n\nexport const HAS_CHROME_NAMESPACE = typeof chrome === \"object\";\n\nexport const IS_EXTENSION = HAS_CHROME_NAMESPACE && isNotNil(chrome.extension);\n\nexport const IS_SAFARI = platform.name === \"Safari\";\n\nexport const IS_SAFARI_EXTENSION = IS_SAFARI && IS_EXTENSION;\n\nexport const PERMISSIONS_HELP_DOC =\n \"https://neetorecordhelp.neetokb.com/p/a-10efcfd7\";\n\nexport const MIME_TYPE = {\n mp4: \"video/mp4\",\n webmH264: \"video/webm;codecs=h264\",\n};\n\nexport const START_RECORDING_SOUND =\n \"https://neeto-record-static-assets.s3.amazonaws.com/recording-start-sound-2.mp3\";\n\nexport const STOP_RECORDING_DUE_TO_LIMIT_REACHED_SOUND =\n \"https://neeto-record-static-assets.s3.amazonaws.com/recording-end-sound.mp3\";\n\nexport const RECORDING_LIMIT_REACHED_WARNING_SOUND =\n \"https://neeto-record-static-assets.s3.amazonaws.com/recording-warning-sound.mp3\";\n\nexport const RECORDING_TIME_LIMIT_FREE_PLAN = 15 * ONE_MINUTE_IN_MILLISECONDS; // 15 minutes\nexport const RECORDING_TIME_LIMIT_PRO_PLAN = 2 * ONE_HOUR_IN_MILLISECONDS; // 2 hours\n"],"names":["RETRIABLE_ERRORS","ONE_SECOND_IN_MILLISECONDS","HALF_A_SECOND_IN_MILLISECONDS","TWO_HUNDRED_MILLISECONDS","ONE_MINUTE_IN_MILLISECONDS","ONE_HOUR_IN_MILLISECONDS","ONE_SECOND","UPLOAD_EVENT","onComplete","UPLOAD_STATUS","uploading","completed","aborting","insufficient_data","SCREEN_RECORDER_STATUS","media_aborted","permission_denied","no_specified_media_found","media_in_use","invalid_media_constraints","no_chrome_flags_set","recorder_error","idle","acquiring_media","media_acquired","restarting","recording","stopping","stopped","paused","SCREEN_RECORDER_ERROR","MicPermissionDenied","AbortError","NotAllowedError","NotFoundError","NotReadableError","OverconstrainedError","TypeError","None","NoRecorder","UnSupportedBrowser","SCREEN_RECORDER_EVENT","onStart","onStop","onDiscard","onDataAvailable","onDiscardDuringCountdown","onRestart","TOTAL_RETRIES","INITIAL_RETRY_DELAY","MAX_RETRY_DELAY","DEFAULT_RETRY_CONFIG","retries","retryDelay","retryableStatuses","NETWORK_ERROR","TIMEOUT_ERROR","HAS_CHROME_NAMESPACE","chrome","_typeof","IS_EXTENSION","isNotNil","extension","IS_SAFARI","platform","name","IS_SAFARI_EXTENSION","PERMISSIONS_HELP_DOC","MIME_TYPE","mp4","webmH264","START_RECORDING_SOUND","STOP_RECORDING_DUE_TO_LIMIT_REACHED_SOUND","RECORDING_LIMIT_REACHED_WARNING_SOUND","RECORDING_TIME_LIMIT_FREE_PLAN","RECORDING_TIME_LIMIT_PRO_PLAN"],"mappings":"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"}
1
+ {"version":3,"file":"constants.js","sources":["node_modules/@babel/runtime/helpers/esm/typeof.js","src/constants.js"],"sourcesContent":["export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}","import platform from \"platform\";\nimport { isNotNil } from \"ramda\";\n\n// https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#ErrorCodeList\nexport const RETRIABLE_ERRORS = [500, 503];\n\nexport const ONE_SECOND_IN_MILLISECONDS = 1000;\nexport const HALF_A_SECOND_IN_MILLISECONDS = 500;\nexport const TWO_HUNDRED_MILLISECONDS = 200;\n\nexport const ONE_MINUTE_IN_MILLISECONDS = 60 * ONE_SECOND_IN_MILLISECONDS;\nexport const ONE_HOUR_IN_MILLISECONDS = 60 * ONE_MINUTE_IN_MILLISECONDS;\n\nexport const ONE_SECOND = 1;\n\nexport const UPLOAD_EVENT = {\n onComplete: \"onComplete\",\n onError: \"onError\",\n onProgress: \"onProgress\",\n};\n\nexport const UPLOAD_STATUS = {\n uploading: \"uploading\",\n completed: \"completed\",\n aborting: \"aborting\",\n insufficient_data: \"insufficient_data\",\n};\n\nexport const SCREEN_RECORDER_STATUS = {\n media_aborted: \"media_aborted\",\n permission_denied: \"permission_denied\",\n no_specified_media_found: \"no_specified_media_found\",\n media_in_use: \"media_in_use\",\n invalid_media_constraints: \"invalid_media_constraints\",\n no_chrome_flags_set: \"no_chrome_flags_set\",\n recorder_error: \"recorder_error\",\n idle: \"idle\",\n acquiring_media: \"acquiring_media\",\n media_acquired: \"media_acquired\",\n restarting: \"restarting\",\n recording: \"recording\",\n stopping: \"stopping\",\n stopped: \"stopped\",\n paused: \"paused\",\n};\n\nexport const SCREEN_RECORDER_ERROR = {\n MicPermissionDenied: \"mic_permission_denied\",\n AbortError: \"media_aborted\",\n NotAllowedError: \"permission_denied\",\n NotFoundError: \"no_specified_media_found\",\n NotReadableError: \"media_in_use\",\n OverconstrainedError: \"invalid_media_constraints\",\n TypeError: \"no_chrome_flags_set\",\n None: \"\",\n NoRecorder: \"recorder_error\",\n UnSupportedBrowser: \"unsupported_browser\",\n};\n\nexport const SCREEN_RECORDER_EVENT = {\n onStart: \"onStart\",\n onStop: \"onStop\",\n onDiscard: \"onDiscard\",\n onDataAvailable: \"onDataAvailable\",\n onDiscardDuringCountdown: \"onDiscardDuringCountdown\",\n onRestart: \"onRestart\",\n onReUpload: \"onReUpload\",\n};\n\nexport const TOTAL_RETRIES = 30;\nexport const INITIAL_RETRY_DELAY = 4000;\nexport const MAX_RETRY_DELAY = 16000;\n\nexport const DEFAULT_RETRY_CONFIG = {\n retries: TOTAL_RETRIES,\n retryDelay: INITIAL_RETRY_DELAY,\n retryableStatuses: [],\n};\n\n// No need to localize this since it will only be used in the code\n// eslint-disable-next-line @bigbinary/neeto/hard-coded-strings-should-be-localized\nexport const NETWORK_ERROR = \"Network Error\";\nexport const TIMEOUT_ERROR = \"ECONNABORTED\";\n\nexport const HAS_CHROME_NAMESPACE = typeof chrome === \"object\";\n\nexport const IS_EXTENSION = HAS_CHROME_NAMESPACE && isNotNil(chrome.extension);\n\nexport const IS_SAFARI = platform.name === \"Safari\";\n\nexport const IS_SAFARI_EXTENSION = IS_SAFARI && IS_EXTENSION;\n\nexport const PERMISSIONS_HELP_DOC =\n \"https://neetorecordhelp.neetokb.com/p/a-10efcfd7\";\n\nexport const MIME_TYPE = {\n mp4: \"video/mp4\",\n webmH264: \"video/webm;codecs=h264\",\n};\n\nexport const START_RECORDING_SOUND =\n \"https://neeto-record-static-assets.s3.amazonaws.com/recording-start-sound-2.mp3\";\n\nexport const STOP_RECORDING_DUE_TO_LIMIT_REACHED_SOUND =\n \"https://neeto-record-static-assets.s3.amazonaws.com/recording-end-sound.mp3\";\n\nexport const RECORDING_LIMIT_REACHED_WARNING_SOUND =\n \"https://neeto-record-static-assets.s3.amazonaws.com/recording-warning-sound.mp3\";\n\nexport const RECORDING_TIME_LIMIT_FREE_PLAN = 15 * ONE_MINUTE_IN_MILLISECONDS; // 15 minutes\nexport const RECORDING_TIME_LIMIT_PRO_PLAN = 2 * ONE_HOUR_IN_MILLISECONDS; // 2 hours\n"],"names":["RETRIABLE_ERRORS","ONE_SECOND_IN_MILLISECONDS","HALF_A_SECOND_IN_MILLISECONDS","TWO_HUNDRED_MILLISECONDS","ONE_MINUTE_IN_MILLISECONDS","ONE_HOUR_IN_MILLISECONDS","ONE_SECOND","UPLOAD_EVENT","onComplete","onError","onProgress","UPLOAD_STATUS","uploading","completed","aborting","insufficient_data","SCREEN_RECORDER_STATUS","media_aborted","permission_denied","no_specified_media_found","media_in_use","invalid_media_constraints","no_chrome_flags_set","recorder_error","idle","acquiring_media","media_acquired","restarting","recording","stopping","stopped","paused","SCREEN_RECORDER_ERROR","MicPermissionDenied","AbortError","NotAllowedError","NotFoundError","NotReadableError","OverconstrainedError","TypeError","None","NoRecorder","UnSupportedBrowser","SCREEN_RECORDER_EVENT","onStart","onStop","onDiscard","onDataAvailable","onDiscardDuringCountdown","onRestart","onReUpload","TOTAL_RETRIES","INITIAL_RETRY_DELAY","MAX_RETRY_DELAY","DEFAULT_RETRY_CONFIG","retries","retryDelay","retryableStatuses","NETWORK_ERROR","TIMEOUT_ERROR","HAS_CHROME_NAMESPACE","chrome","_typeof","IS_EXTENSION","isNotNil","extension","IS_SAFARI","platform","name","IS_SAFARI_EXTENSION","PERMISSIONS_HELP_DOC","MIME_TYPE","mp4","webmH264","START_RECORDING_SOUND","STOP_RECORDING_DUE_TO_LIMIT_REACHED_SOUND","RECORDING_LIMIT_REACHED_WARNING_SOUND","RECORDING_TIME_LIMIT_FREE_PLAN","RECORDING_TIME_LIMIT_PRO_PLAN"],"mappings":"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"}
package/core.js CHANGED
@@ -690,7 +690,7 @@ var buildRetryableApi = function buildRetryableApi(apiConnector) {
690
690
  });
691
691
  case 4:
692
692
  if (!(remainingAttempts-- && !shouldCancelRetries)) {
693
- _context.next = 24;
693
+ _context.next = 26;
694
694
  break;
695
695
  }
696
696
  _context.prev = 5;
@@ -701,26 +701,28 @@ var buildRetryableApi = function buildRetryableApi(apiConnector) {
701
701
  case 11:
702
702
  _context.prev = 11;
703
703
  _context.t0 = _context["catch"](5);
704
+ logger.error("buildRetryableApi -> Failed to connect, remainingAttempts:", remainingAttempts);
704
705
  isRetryableStatus = isPresent(retryableStatuses) && retryableStatuses.includes((_error$response = _context.t0.response) === null || _error$response === void 0 ? void 0 : _error$response.status);
705
706
  isRetryableError = isRetryableStatus || _context.t0.message === NETWORK_ERROR || _context.t0.code === TIMEOUT_ERROR;
706
707
  if (!(isRetryableError && remainingAttempts > 0)) {
707
- _context.next = 21;
708
+ _context.next = 23;
708
709
  break;
709
710
  }
710
- _context.next = 18;
711
+ logger.info("buildRetryableApi -> Failed to connect, retry in:", retryDelay);
712
+ _context.next = 20;
711
713
  return sleep(retryDelay);
712
- case 18:
714
+ case 20:
713
715
  retryDelay = min(retryDelay * 2, MAX_RETRY_DELAY);
714
- _context.next = 22;
716
+ _context.next = 24;
715
717
  break;
716
- case 21:
718
+ case 23:
717
719
  throw _context.t0;
718
- case 22:
720
+ case 24:
719
721
  _context.next = 4;
720
722
  break;
721
- case 24:
723
+ case 26:
722
724
  throw new RetryError("Request cancelled or request retries exhausted");
723
- case 25:
725
+ case 27:
724
726
  case "end":
725
727
  return _context.stop();
726
728
  }
@@ -806,6 +808,15 @@ var prepareStore$1 = function prepareStore() {
806
808
  var isNotCancelledRequest = function isNotCancelledRequest(resolvedResponse) {
807
809
  return typeof resolvedResponse !== "boolean";
808
810
  };
811
+ var calculateUploadProgress = function calculateUploadProgress(uploadProgress) {
812
+ var total = Object.values(uploadProgress).reduce(function (sum, part) {
813
+ return sum + part.total;
814
+ }, 0);
815
+ var uploaded = Object.values(uploadProgress).reduce(function (sum, part) {
816
+ return sum + part.uploaded;
817
+ }, 0);
818
+ return Math.round(uploaded * 100 / total);
819
+ };
809
820
 
810
821
  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; }
811
822
  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; }
@@ -821,6 +832,8 @@ var _store$1 = /*#__PURE__*/new WeakMap();
821
832
  var _abortController = /*#__PURE__*/new WeakMap();
822
833
  var _pendingS3ChunkUploads = /*#__PURE__*/new WeakMap();
823
834
  var _completeUploadPromise = /*#__PURE__*/new WeakMap();
835
+ var _failedUpload = /*#__PURE__*/new WeakMap();
836
+ var _uploadProgress = /*#__PURE__*/new WeakMap();
824
837
  var _fireCallbacks$1 = /*#__PURE__*/new WeakMap();
825
838
  var _uploadChunkToS = /*#__PURE__*/new WeakMap();
826
839
  var _getCurrentUnUploadedBlob = /*#__PURE__*/new WeakMap();
@@ -874,6 +887,14 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
874
887
  writable: true,
875
888
  value: void 0
876
889
  });
890
+ _classPrivateFieldInitSpec$1(this, _failedUpload, {
891
+ writable: true,
892
+ value: []
893
+ });
894
+ _classPrivateFieldInitSpec$1(this, _uploadProgress, {
895
+ writable: true,
896
+ value: {}
897
+ });
877
898
  _defineProperty(this, "initialize", function (recordingId, uploadId) {
878
899
  _classPrivateFieldSet(_this, _recordingId, recordingId);
879
900
  _classPrivateFieldSet(_this, _uploadId, uploadId);
@@ -883,7 +904,10 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
883
904
  if (data.size > 0) {
884
905
  _classPrivateFieldGet(_this, _unUploadedChunks).push(data);
885
906
  }
886
- if (_classPrivateFieldGet(_this, _isNotInitialized)) return;
907
+ if (_classPrivateFieldGet(_this, _isNotInitialized)) {
908
+ logger.info("upload push -> not initialized");
909
+ return;
910
+ }
887
911
  logger.info("Current unuploaded data size is ", _classPrivateFieldGet(_this, _getCurrentUnUploadedBlob).call(_this).size / 1024 / 1024, "MB");
888
912
  if (_classPrivateFieldGet(_this, _getCurrentUnUploadedBlob).call(_this).size > _this.MIN_UPLOAD_CHUNK_SIZE) {
889
913
  var uploadChunkToS3Promise = _classPrivateFieldGet(_this, _uploadChunkToS).call(_this, _classPrivateFieldGet(_this, _unUploadedChunks));
@@ -901,13 +925,15 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
901
925
  status: UPLOAD_STATUS.uploading
902
926
  });
903
927
  if (!_classPrivateFieldGet(_this, _isNotInitialized)) {
904
- _context.next = 4;
928
+ _context.next = 5;
905
929
  break;
906
930
  }
931
+ logger.error("completeUpload -> not initialized");
907
932
  return _context.abrupt("return");
908
- case 4:
933
+ case 5:
909
934
  // Upload last chunk; only if last chunk has data
910
935
  if (_classPrivateFieldGet(_this, _getCurrentUnUploadedBlob).call(_this).size > 0) {
936
+ logger.info("completeUpload -> need to upload last chunk");
911
937
  uploadChunkToS3Promise = _classPrivateFieldGet(_this, _uploadChunkToS).call(_this, _classPrivateFieldGet(_this, _unUploadedChunks));
912
938
  _classPrivateFieldGet(_this, _pendingS3ChunkUploads).push(uploadChunkToS3Promise);
913
939
  }
@@ -920,22 +946,36 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
920
946
  * adding the new presignedUrl part upload to s3PartUploadPromises.
921
947
  * This results in incorrect partNumbers.
922
948
  */
923
- _context.next = 7;
924
- return Promise.all(_classPrivateFieldGet(_this, _pendingS3ChunkUploads));
925
- case 7:
949
+ logger.info("completeUpload -> uploading all pending chunks...", _classPrivateFieldGet(_this, _pendingS3ChunkUploads).length);
926
950
  _context.next = 9;
927
- return Promise.all(_classPrivateFieldGet(_this, _s3PartUploadPromises));
951
+ return Promise.all(_classPrivateFieldGet(_this, _pendingS3ChunkUploads));
928
952
  case 9:
953
+ logger.info("completeUpload -> finishing part uploads...");
954
+ _context.next = 12;
955
+ return Promise.all(_classPrivateFieldGet(_this, _s3PartUploadPromises));
956
+ case 12:
929
957
  resolvedS3PartUploadPromises = _context.sent;
958
+ if (!isNotEmpty(_classPrivateFieldGet(_this, _failedUpload))) {
959
+ _context.next = 18;
960
+ break;
961
+ }
962
+ logger.info("completeUpload -> chunks with these partNumbers failed:", _classPrivateFieldGet(_this, _failedUpload));
963
+ _classPrivateFieldGet(_this, _fireCallbacks$1).call(_this, UPLOAD_EVENT.onError);
964
+ _classPrivateFieldGet(_this, _store$1).setState({
965
+ status: UPLOAD_STATUS.error
966
+ });
967
+ return _context.abrupt("return");
968
+ case 18:
930
969
  if (!(resolvedS3PartUploadPromises.length === 0)) {
931
- _context.next = 13;
970
+ _context.next = 22;
932
971
  break;
933
972
  }
973
+ logger.info("completeUpload -> insufficient data");
934
974
  _classPrivateFieldGet(_this, _store$1).setState({
935
975
  status: UPLOAD_STATUS.insufficient_data
936
976
  });
937
977
  return _context.abrupt("return");
938
- case 13:
978
+ case 22:
939
979
  parts = resolvedS3PartUploadPromises.filter(isNotCancelledRequest).map(function (resolvedResponse) {
940
980
  return {
941
981
  etag: resolvedResponse.headers.etag,
@@ -944,6 +984,7 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
944
984
  }).toSorted(function (a, b) {
945
985
  return Number(a.partNumber) - Number(b.partNumber);
946
986
  });
987
+ logger.info("completeUpload -> uploaded parts: ", parts);
947
988
  _classPrivateFieldSet(_this, _completeUploadPromise, completeUploadApi.create({
948
989
  recordingId: _classPrivateFieldGet(_this, _recordingId),
949
990
  payload: {
@@ -954,34 +995,41 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
954
995
  signal: _classPrivateFieldGet(_this, _abortController).signal
955
996
  }
956
997
  }));
957
- _context.next = 17;
998
+ logger.info("completeUpload -> completing upload... ");
999
+ _context.next = 28;
958
1000
  return _classPrivateFieldGet(_this, _completeUploadPromise);
959
- case 17:
1001
+ case 28:
1002
+ logger.info("completeUpload -> upload completed");
960
1003
  if (!(_classPrivateFieldGet(_this, _store$1).getState().status === UPLOAD_STATUS.aborting)) {
961
- _context.next = 19;
1004
+ _context.next = 32;
962
1005
  break;
963
1006
  }
1007
+ logger.info("completeUpload -> upload was marked as aborted");
964
1008
  return _context.abrupt("return");
965
- case 19:
1009
+ case 32:
966
1010
  _classPrivateFieldGet(_this, _store$1).setState({
967
1011
  status: UPLOAD_STATUS.completed
968
1012
  });
969
1013
  _classPrivateFieldGet(_this, _fireCallbacks$1).call(_this, UPLOAD_EVENT.onComplete);
970
- _context.next = 26;
1014
+ _context.next = 41;
971
1015
  break;
972
- case 23:
973
- _context.prev = 23;
1016
+ case 36:
1017
+ _context.prev = 36;
974
1018
  _context.t0 = _context["catch"](0);
1019
+ _classPrivateFieldGet(_this, _store$1).setState({
1020
+ status: UPLOAD_STATUS.error
1021
+ });
1022
+ _classPrivateFieldGet(_this, _fireCallbacks$1).call(_this, UPLOAD_EVENT.onError);
975
1023
  logger.error(_context.t0);
976
- case 26:
977
- _context.prev = 26;
1024
+ case 41:
1025
+ _context.prev = 41;
978
1026
  _classPrivateFieldSet(_this, _completeUploadPromise, null);
979
- return _context.finish(26);
980
- case 29:
1027
+ return _context.finish(41);
1028
+ case 44:
981
1029
  case "end":
982
1030
  return _context.stop();
983
1031
  }
984
- }, _callee, null, [[0, 23, 26, 29]]);
1032
+ }, _callee, null, [[0, 36, 41, 44]]);
985
1033
  })));
986
1034
  _defineProperty(this, "abortUpload", /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
987
1035
  return _regeneratorRuntime.wrap(function _callee2$(_context2) {
@@ -1035,6 +1083,8 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
1035
1083
  _classPrivateFieldSet(_this, _partNumber, 1);
1036
1084
  _classPrivateFieldSet(_this, _s3PartUploadPromises, []);
1037
1085
  _classPrivateFieldSet(_this, _callbacks$1, {});
1086
+ _classPrivateFieldSet(_this, _failedUpload, []);
1087
+ _classPrivateFieldSet(_this, _uploadProgress, {});
1038
1088
  _classPrivateFieldGet(_this, _store$1).setState({
1039
1089
  status: ""
1040
1090
  });
@@ -1064,26 +1114,36 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
1064
1114
  writable: true,
1065
1115
  value: function () {
1066
1116
  var _value = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(chunks) {
1067
- var _this$partNumber, _this$partNumber2, _yield$partPresignedU, presignedUrl, s3PartUploadPromise;
1117
+ var _this$partNumber;
1118
+ var partNumber, _yield$partPresignedU, presignedUrl, s3PartUploadPromise;
1068
1119
  return _regeneratorRuntime.wrap(function _callee3$(_context3) {
1069
1120
  while (1) switch (_context3.prev = _context3.next) {
1070
1121
  case 0:
1071
1122
  logger.info("Part ready to be uploaded: ", _classPrivateFieldGet(_this, _partNumber));
1072
- _context3.prev = 1;
1073
- _context3.next = 4;
1123
+ partNumber = _classPrivateFieldGet(_this, _partNumber);
1124
+ _classPrivateFieldSet(_this, _partNumber, (_this$partNumber = _classPrivateFieldGet(_this, _partNumber), _this$partNumber++, _this$partNumber));
1125
+ _classPrivateFieldGet(_this, _uploadProgress)[partNumber] = {
1126
+ uploaded: 0,
1127
+ total: new Blob(chunks, {
1128
+ type: MIME_TYPE.webmH264
1129
+ }).size
1130
+ };
1131
+ _context3.prev = 4;
1132
+ _context3.next = 7;
1074
1133
  return partPresignedUrlApi.create({
1075
1134
  recordingId: _classPrivateFieldGet(_this, _recordingId),
1076
1135
  payload: {
1077
- partNumber: (_classPrivateFieldSet(_this, _partNumber, (_this$partNumber = _classPrivateFieldGet(_this, _partNumber), _this$partNumber2 = _this$partNumber++, _this$partNumber)), _this$partNumber2),
1136
+ partNumber: partNumber,
1078
1137
  uploadId: _classPrivateFieldGet(_this, _uploadId)
1079
1138
  },
1080
1139
  config: {
1081
1140
  signal: _classPrivateFieldGet(_this, _abortController).signal
1082
1141
  }
1083
1142
  });
1084
- case 4:
1143
+ case 7:
1085
1144
  _yield$partPresignedU = _context3.sent;
1086
1145
  presignedUrl = _yield$partPresignedU.presignedUrl;
1146
+ logger.info("Presigned url created for partNumber:", partNumber);
1087
1147
  s3PartUploadPromise = s3Api.presignedUpload({
1088
1148
  presignedUrl: presignedUrl,
1089
1149
  blob: new Blob(chunks, {
@@ -1091,21 +1151,37 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
1091
1151
  }),
1092
1152
  config: {
1093
1153
  includeMetadataInResponse: true,
1094
- signal: _classPrivateFieldGet(_this, _abortController).signal
1154
+ signal: _classPrivateFieldGet(_this, _abortController).signal,
1155
+ onUploadProgress: function onUploadProgress(e) {
1156
+ _classPrivateFieldGet(_this, _uploadProgress)[partNumber] = {
1157
+ uploaded: e.loaded,
1158
+ total: e.total
1159
+ };
1160
+ if (_classPrivateFieldGet(_this, _store$1).getState().status === UPLOAD_STATUS.uploading) {
1161
+ var percentCompleted = calculateUploadProgress(_classPrivateFieldGet(_this, _uploadProgress));
1162
+ logger.info("Upload Progress: ".concat(percentCompleted, "%"));
1163
+ _classPrivateFieldGet(_this, _fireCallbacks$1).call(_this, UPLOAD_EVENT.onProgress, [percentCompleted]);
1164
+ }
1165
+ }
1095
1166
  }
1096
1167
  });
1168
+ s3PartUploadPromise.then(function () {
1169
+ logger.info("Chunk uploaded for partNumber:", partNumber);
1170
+ });
1097
1171
  _classPrivateFieldGet(_this, _s3PartUploadPromises).push(s3PartUploadPromise);
1098
- _context3.next = 13;
1172
+ _context3.next = 20;
1099
1173
  break;
1100
- case 10:
1101
- _context3.prev = 10;
1102
- _context3.t0 = _context3["catch"](1);
1174
+ case 15:
1175
+ _context3.prev = 15;
1176
+ _context3.t0 = _context3["catch"](4);
1177
+ logger.error("Failed to upload partNumber:", partNumber);
1178
+ _classPrivateFieldGet(_this, _failedUpload).push(partNumber);
1103
1179
  if (!axios.isCancel(_context3.t0)) logger.error(_context3.t0);
1104
- case 13:
1180
+ case 20:
1105
1181
  case "end":
1106
1182
  return _context3.stop();
1107
1183
  }
1108
- }, _callee3, null, [[1, 10]]);
1184
+ }, _callee3, null, [[4, 15]]);
1109
1185
  }));
1110
1186
  function value(_x) {
1111
1187
  return _value.apply(this, arguments);
@@ -1270,6 +1346,7 @@ var _recordingLimitWarningAudio = /*#__PURE__*/new WeakMap();
1270
1346
  var _stopRecordingDueToLimitReachedAudio = /*#__PURE__*/new WeakMap();
1271
1347
  var _stream = /*#__PURE__*/new WeakMap();
1272
1348
  var _audioStream = /*#__PURE__*/new WeakMap();
1349
+ var _audioContext = /*#__PURE__*/new WeakMap();
1273
1350
  var _timeLimit = /*#__PURE__*/new WeakMap();
1274
1351
  var _startRecordingTimeoutID = /*#__PURE__*/new WeakMap();
1275
1352
  var _enableNoiseCancellation = /*#__PURE__*/new WeakMap();
@@ -1347,6 +1424,10 @@ var ScreenRecorder = /*#__PURE__*/function () {
1347
1424
  writable: true,
1348
1425
  value: void 0
1349
1426
  });
1427
+ _classPrivateFieldInitSpec(this, _audioContext, {
1428
+ writable: true,
1429
+ value: void 0
1430
+ });
1350
1431
  _classPrivateFieldInitSpec(this, _timeLimit, {
1351
1432
  writable: true,
1352
1433
  value: RECORDING_TIME_LIMIT_FREE_PLAN
@@ -1576,56 +1657,56 @@ var ScreenRecorder = /*#__PURE__*/function () {
1576
1657
  writable: true,
1577
1658
  value: function () {
1578
1659
  var _value = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
1579
- var stream, audioStream, workletUrl, audioContext, audioStreamSource, destinationStream, noiseSuppressorNode, finalStream, _audioContext, desktopAudio, microphoneAudio, combinedAudio;
1660
+ var isAudioWorkletLoaded, stream, workletUrl, audioStream, audioStreamSource, destinationStream, noiseSuppressorNode, finalStream, audioContext, desktopAudio, microphoneAudio, combinedAudio;
1580
1661
  return _regeneratorRuntime.wrap(function _callee2$(_context2) {
1581
1662
  while (1) switch (_context2.prev = _context2.next) {
1582
1663
  case 0:
1583
1664
  _classPrivateFieldGet(_this, _store).setState({
1584
1665
  status: SCREEN_RECORDER_STATUS.acquiring_media
1585
1666
  });
1586
- _context2.prev = 1;
1667
+ isAudioWorkletLoaded = false;
1668
+ _context2.prev = 2;
1587
1669
  if (!_classPrivateFieldGet(_this, _audio)) {
1588
- _context2.next = 24;
1670
+ _context2.next = 19;
1589
1671
  break;
1590
1672
  }
1591
- _context2.next = 5;
1673
+ _classPrivateFieldSet(_this, _audioContext, new AudioContext());
1674
+ _context2.prev = 5;
1675
+ workletUrl = IS_EXTENSION ? chrome.runtime.getURL("public/NoiseSuppressorWorklet.js") : "NoiseSuppressorWorklet.js";
1676
+ _context2.next = 9;
1677
+ return _classPrivateFieldGet(_this, _audioContext).audioWorklet.addModule(workletUrl);
1678
+ case 9:
1679
+ isAudioWorkletLoaded = true;
1680
+ _context2.next = 15;
1681
+ break;
1682
+ case 12:
1683
+ _context2.prev = 12;
1684
+ _context2.t0 = _context2["catch"](5);
1685
+ console.error("Failed to load audio worklet:", _context2.t0);
1686
+ case 15:
1687
+ _context2.next = 17;
1592
1688
  return window.navigator.mediaDevices.getUserMedia({
1593
- audio: _classPrivateFieldGet(_this, _audio) ? _objectSpread({
1594
- echoCancellation: false
1595
- }, _classPrivateFieldGet(_this, _audio)) : false
1689
+ audio: _classPrivateFieldGet(_this, _audio) ? _classPrivateFieldGet(_this, _audio) : false
1596
1690
  });
1597
- case 5:
1691
+ case 17:
1598
1692
  audioStream = _context2.sent;
1599
- _classPrivateFieldSet(_this, _audioStream, audioStream);
1600
- if (!_classPrivateFieldGet(_this, _enableNoiseCancellation)) {
1601
- _context2.next = 24;
1602
- break;
1693
+ if (isAudioWorkletLoaded && _classPrivateFieldGet(_this, _enableNoiseCancellation)) {
1694
+ audioStreamSource = _classPrivateFieldGet(_this, _audioContext).createMediaStreamSource(audioStream);
1695
+ destinationStream = _classPrivateFieldGet(_this, _audioContext).createMediaStreamDestination();
1696
+ noiseSuppressorNode = new AudioWorkletNode(_classPrivateFieldGet(_this, _audioContext), "nn-suppressor-processor");
1697
+ audioStreamSource.connect(noiseSuppressorNode);
1698
+ noiseSuppressorNode.connect(destinationStream);
1699
+ _classPrivateFieldSet(_this, _audioStream, destinationStream.stream);
1700
+ } else {
1701
+ _classPrivateFieldSet(_this, _audioStream, audioStream);
1603
1702
  }
1604
- _context2.prev = 8;
1605
- workletUrl = IS_EXTENSION ? chrome.runtime.getURL("public/NoiseSuppressorWorklet.js") : "NoiseSuppressorWorklet.js";
1606
- audioContext = new AudioContext();
1607
- _context2.next = 13;
1608
- return audioContext.audioWorklet.addModule(workletUrl);
1609
- case 13:
1610
- audioStreamSource = audioContext.createMediaStreamSource(audioStream);
1611
- destinationStream = audioContext.createMediaStreamDestination();
1612
- noiseSuppressorNode = new AudioWorkletNode(audioContext, "nn-suppressor-processor");
1613
- audioStreamSource.connect(noiseSuppressorNode);
1614
- noiseSuppressorNode.connect(destinationStream);
1615
- _classPrivateFieldSet(_this, _audioStream, destinationStream.stream);
1616
- _context2.next = 24;
1617
- break;
1618
- case 21:
1619
- _context2.prev = 21;
1620
- _context2.t0 = _context2["catch"](8);
1621
- console.error("Failed to load audio worklet:", _context2.t0);
1622
- case 24:
1623
- _context2.next = 26;
1703
+ case 19:
1704
+ _context2.next = 21;
1624
1705
  return window.navigator.mediaDevices.getDisplayMedia({
1625
1706
  video: _classPrivateFieldGet(_this, _video) || true,
1626
1707
  audio: true
1627
1708
  });
1628
- case 26:
1709
+ case 21:
1629
1710
  stream = _context2.sent;
1630
1711
  // Event triggered when the user clicks on the stop sharing overlay button
1631
1712
  stream.getVideoTracks()[0].addEventListener("ended", function () {
@@ -1634,10 +1715,10 @@ var ScreenRecorder = /*#__PURE__*/function () {
1634
1715
  finalStream = new MediaStream();
1635
1716
  if (_classPrivateFieldGet(_this, _audio) && _classPrivateFieldGet(_this, _audioStream)) {
1636
1717
  if (isNotEmpty(stream.getAudioTracks())) {
1637
- _audioContext = new AudioContext();
1638
- desktopAudio = _audioContext.createMediaStreamSource(stream);
1639
- microphoneAudio = _audioContext.createMediaStreamSource(_classPrivateFieldGet(_this, _audioStream));
1640
- combinedAudio = _audioContext.createMediaStreamDestination();
1718
+ audioContext = new AudioContext();
1719
+ desktopAudio = audioContext.createMediaStreamSource(stream);
1720
+ microphoneAudio = audioContext.createMediaStreamSource(_classPrivateFieldGet(_this, _audioStream));
1721
+ combinedAudio = audioContext.createMediaStreamDestination();
1641
1722
  desktopAudio.connect(combinedAudio);
1642
1723
  microphoneAudio.connect(combinedAudio);
1643
1724
  combinedAudio.stream.getAudioTracks().forEach(function (track) {
@@ -1657,11 +1738,11 @@ var ScreenRecorder = /*#__PURE__*/function () {
1657
1738
  _classPrivateFieldGet(_this, _store).setState({
1658
1739
  status: SCREEN_RECORDER_STATUS.media_acquired
1659
1740
  });
1660
- _context2.next = 39;
1741
+ _context2.next = 34;
1661
1742
  break;
1662
- case 36:
1663
- _context2.prev = 36;
1664
- _context2.t1 = _context2["catch"](1);
1743
+ case 31:
1744
+ _context2.prev = 31;
1745
+ _context2.t1 = _context2["catch"](2);
1665
1746
  if (_classPrivateFieldGet(_this, _audio) && !_classPrivateFieldGet(_this, _audioStream)) {
1666
1747
  _classPrivateFieldGet(_this, _store).setState({
1667
1748
  error: SCREEN_RECORDER_ERROR.MicPermissionDenied,
@@ -1673,11 +1754,11 @@ var ScreenRecorder = /*#__PURE__*/function () {
1673
1754
  status: SCREEN_RECORDER_STATUS.idle
1674
1755
  });
1675
1756
  }
1676
- case 39:
1757
+ case 34:
1677
1758
  case "end":
1678
1759
  return _context2.stop();
1679
1760
  }
1680
- }, _callee2, null, [[1, 36], [8, 21]]);
1761
+ }, _callee2, null, [[2, 31], [5, 12]]);
1681
1762
  }));
1682
1763
  function value() {
1683
1764
  return _value.apply(this, arguments);