@bigbinary/neeto-media-recorder 2.1.6 → 2.2.0
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 +6 -3
- package/constants.js.map +1 -1
- package/core.js +120 -42
- package/core.js.map +1 -1
- package/index.js.map +1 -1
- package/package.json +1 -1
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",
|
|
@@ -65,9 +67,10 @@ var SCREEN_RECORDER_EVENT = {
|
|
|
65
67
|
onDiscard: "onDiscard",
|
|
66
68
|
onDataAvailable: "onDataAvailable",
|
|
67
69
|
onDiscardDuringCountdown: "onDiscardDuringCountdown",
|
|
68
|
-
onRestart: "onRestart"
|
|
70
|
+
onRestart: "onRestart",
|
|
71
|
+
onReUpload: "onReUpload"
|
|
69
72
|
};
|
|
70
|
-
var TOTAL_RETRIES =
|
|
73
|
+
var TOTAL_RETRIES = 15;
|
|
71
74
|
var INITIAL_RETRY_DELAY = 4000;
|
|
72
75
|
var MAX_RETRY_DELAY = 16000;
|
|
73
76
|
var DEFAULT_RETRY_CONFIG = {
|
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 = {
|
|
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 NotSupportedError: \"not_supported_error\",\n InvalidStateError: \"invalid_state_error\",\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 = 15;\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","NotSupportedError","InvalidStateError","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
|
@@ -629,7 +629,7 @@ function _wrapNativeSuper(Class) {
|
|
|
629
629
|
return _wrapNativeSuper(Class);
|
|
630
630
|
}
|
|
631
631
|
|
|
632
|
-
var TOTAL_RETRIES =
|
|
632
|
+
var TOTAL_RETRIES = 15;
|
|
633
633
|
var INITIAL_RETRY_DELAY = 4000;
|
|
634
634
|
var MAX_RETRY_DELAY = 16000;
|
|
635
635
|
var DEFAULT_RETRY_CONFIG = {
|
|
@@ -690,7 +690,7 @@ var buildRetryableApi = function buildRetryableApi(apiConnector) {
|
|
|
690
690
|
});
|
|
691
691
|
case 4:
|
|
692
692
|
if (!(remainingAttempts-- && !shouldCancelRetries)) {
|
|
693
|
-
_context.next =
|
|
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 =
|
|
708
|
+
_context.next = 23;
|
|
708
709
|
break;
|
|
709
710
|
}
|
|
710
|
-
|
|
711
|
+
logger.info("buildRetryableApi -> Failed to connect, retry in:", retryDelay);
|
|
712
|
+
_context.next = 20;
|
|
711
713
|
return sleep(retryDelay);
|
|
712
|
-
case
|
|
714
|
+
case 20:
|
|
713
715
|
retryDelay = min(retryDelay * 2, MAX_RETRY_DELAY);
|
|
714
|
-
_context.next =
|
|
716
|
+
_context.next = 24;
|
|
715
717
|
break;
|
|
716
|
-
case
|
|
718
|
+
case 23:
|
|
717
719
|
throw _context.t0;
|
|
718
|
-
case
|
|
720
|
+
case 24:
|
|
719
721
|
_context.next = 4;
|
|
720
722
|
break;
|
|
721
|
-
case
|
|
723
|
+
case 26:
|
|
722
724
|
throw new RetryError("Request cancelled or request retries exhausted");
|
|
723
|
-
case
|
|
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);
|
|
@@ -908,6 +929,7 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
|
|
|
908
929
|
case 4:
|
|
909
930
|
// Upload last chunk; only if last chunk has data
|
|
910
931
|
if (_classPrivateFieldGet(_this, _getCurrentUnUploadedBlob).call(_this).size > 0) {
|
|
932
|
+
logger.info("completeUpload -> need to upload last chunk");
|
|
911
933
|
uploadChunkToS3Promise = _classPrivateFieldGet(_this, _uploadChunkToS).call(_this, _classPrivateFieldGet(_this, _unUploadedChunks));
|
|
912
934
|
_classPrivateFieldGet(_this, _pendingS3ChunkUploads).push(uploadChunkToS3Promise);
|
|
913
935
|
}
|
|
@@ -920,22 +942,36 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
|
|
|
920
942
|
* adding the new presignedUrl part upload to s3PartUploadPromises.
|
|
921
943
|
* This results in incorrect partNumbers.
|
|
922
944
|
*/
|
|
923
|
-
|
|
945
|
+
logger.info("completeUpload -> uploading all pending chunks...", _classPrivateFieldGet(_this, _pendingS3ChunkUploads).length);
|
|
946
|
+
_context.next = 8;
|
|
924
947
|
return Promise.all(_classPrivateFieldGet(_this, _pendingS3ChunkUploads));
|
|
925
|
-
case
|
|
926
|
-
|
|
948
|
+
case 8:
|
|
949
|
+
logger.info("completeUpload -> finishing part uploads...");
|
|
950
|
+
_context.next = 11;
|
|
927
951
|
return Promise.all(_classPrivateFieldGet(_this, _s3PartUploadPromises));
|
|
928
|
-
case
|
|
952
|
+
case 11:
|
|
929
953
|
resolvedS3PartUploadPromises = _context.sent;
|
|
954
|
+
if (!isNotEmpty(_classPrivateFieldGet(_this, _failedUpload))) {
|
|
955
|
+
_context.next = 17;
|
|
956
|
+
break;
|
|
957
|
+
}
|
|
958
|
+
logger.info("completeUpload -> chunks with these partNumbers failed:", _classPrivateFieldGet(_this, _failedUpload));
|
|
959
|
+
_classPrivateFieldGet(_this, _fireCallbacks$1).call(_this, UPLOAD_EVENT.onError);
|
|
960
|
+
_classPrivateFieldGet(_this, _store$1).setState({
|
|
961
|
+
status: UPLOAD_STATUS.error
|
|
962
|
+
});
|
|
963
|
+
return _context.abrupt("return");
|
|
964
|
+
case 17:
|
|
930
965
|
if (!(resolvedS3PartUploadPromises.length === 0)) {
|
|
931
|
-
_context.next =
|
|
966
|
+
_context.next = 21;
|
|
932
967
|
break;
|
|
933
968
|
}
|
|
969
|
+
logger.info("completeUpload -> insufficient data");
|
|
934
970
|
_classPrivateFieldGet(_this, _store$1).setState({
|
|
935
971
|
status: UPLOAD_STATUS.insufficient_data
|
|
936
972
|
});
|
|
937
973
|
return _context.abrupt("return");
|
|
938
|
-
case
|
|
974
|
+
case 21:
|
|
939
975
|
parts = resolvedS3PartUploadPromises.filter(isNotCancelledRequest).map(function (resolvedResponse) {
|
|
940
976
|
return {
|
|
941
977
|
etag: resolvedResponse.headers.etag,
|
|
@@ -944,6 +980,7 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
|
|
|
944
980
|
}).toSorted(function (a, b) {
|
|
945
981
|
return Number(a.partNumber) - Number(b.partNumber);
|
|
946
982
|
});
|
|
983
|
+
logger.info("completeUpload -> uploaded parts: ", parts);
|
|
947
984
|
_classPrivateFieldSet(_this, _completeUploadPromise, completeUploadApi.create({
|
|
948
985
|
recordingId: _classPrivateFieldGet(_this, _recordingId),
|
|
949
986
|
payload: {
|
|
@@ -954,34 +991,44 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
|
|
|
954
991
|
signal: _classPrivateFieldGet(_this, _abortController).signal
|
|
955
992
|
}
|
|
956
993
|
}));
|
|
957
|
-
|
|
994
|
+
logger.info("completeUpload -> completing upload... ");
|
|
995
|
+
_context.next = 27;
|
|
958
996
|
return _classPrivateFieldGet(_this, _completeUploadPromise);
|
|
959
|
-
case
|
|
997
|
+
case 27:
|
|
998
|
+
logger.info("completeUpload -> upload completed");
|
|
960
999
|
if (!(_classPrivateFieldGet(_this, _store$1).getState().status === UPLOAD_STATUS.aborting)) {
|
|
961
|
-
_context.next =
|
|
1000
|
+
_context.next = 31;
|
|
962
1001
|
break;
|
|
963
1002
|
}
|
|
1003
|
+
logger.info("completeUpload -> upload was marked as aborted");
|
|
964
1004
|
return _context.abrupt("return");
|
|
965
|
-
case
|
|
1005
|
+
case 31:
|
|
966
1006
|
_classPrivateFieldGet(_this, _store$1).setState({
|
|
967
1007
|
status: UPLOAD_STATUS.completed
|
|
968
1008
|
});
|
|
969
1009
|
_classPrivateFieldGet(_this, _fireCallbacks$1).call(_this, UPLOAD_EVENT.onComplete);
|
|
970
|
-
_context.next =
|
|
1010
|
+
_context.next = 38;
|
|
971
1011
|
break;
|
|
972
|
-
case
|
|
973
|
-
_context.prev =
|
|
1012
|
+
case 35:
|
|
1013
|
+
_context.prev = 35;
|
|
974
1014
|
_context.t0 = _context["catch"](0);
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
1015
|
+
// ignore if aborted
|
|
1016
|
+
if (!axios.isCancel(_context.t0)) {
|
|
1017
|
+
_classPrivateFieldGet(_this, _store$1).setState({
|
|
1018
|
+
status: UPLOAD_STATUS.error
|
|
1019
|
+
});
|
|
1020
|
+
_classPrivateFieldGet(_this, _fireCallbacks$1).call(_this, UPLOAD_EVENT.onError);
|
|
1021
|
+
logger.error(_context.t0);
|
|
1022
|
+
}
|
|
1023
|
+
case 38:
|
|
1024
|
+
_context.prev = 38;
|
|
978
1025
|
_classPrivateFieldSet(_this, _completeUploadPromise, null);
|
|
979
|
-
return _context.finish(
|
|
980
|
-
case
|
|
1026
|
+
return _context.finish(38);
|
|
1027
|
+
case 41:
|
|
981
1028
|
case "end":
|
|
982
1029
|
return _context.stop();
|
|
983
1030
|
}
|
|
984
|
-
}, _callee, null, [[0,
|
|
1031
|
+
}, _callee, null, [[0, 35, 38, 41]]);
|
|
985
1032
|
})));
|
|
986
1033
|
_defineProperty(this, "abortUpload", /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
|
|
987
1034
|
return _regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
@@ -1035,6 +1082,8 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
|
|
|
1035
1082
|
_classPrivateFieldSet(_this, _partNumber, 1);
|
|
1036
1083
|
_classPrivateFieldSet(_this, _s3PartUploadPromises, []);
|
|
1037
1084
|
_classPrivateFieldSet(_this, _callbacks$1, {});
|
|
1085
|
+
_classPrivateFieldSet(_this, _failedUpload, []);
|
|
1086
|
+
_classPrivateFieldSet(_this, _uploadProgress, {});
|
|
1038
1087
|
_classPrivateFieldGet(_this, _store$1).setState({
|
|
1039
1088
|
status: ""
|
|
1040
1089
|
});
|
|
@@ -1064,26 +1113,36 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
|
|
|
1064
1113
|
writable: true,
|
|
1065
1114
|
value: function () {
|
|
1066
1115
|
var _value = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(chunks) {
|
|
1067
|
-
var _this$partNumber
|
|
1116
|
+
var _this$partNumber;
|
|
1117
|
+
var partNumber, _yield$partPresignedU, presignedUrl, s3PartUploadPromise;
|
|
1068
1118
|
return _regeneratorRuntime.wrap(function _callee3$(_context3) {
|
|
1069
1119
|
while (1) switch (_context3.prev = _context3.next) {
|
|
1070
1120
|
case 0:
|
|
1071
1121
|
logger.info("Part ready to be uploaded: ", _classPrivateFieldGet(_this, _partNumber));
|
|
1072
|
-
|
|
1073
|
-
|
|
1122
|
+
partNumber = _classPrivateFieldGet(_this, _partNumber);
|
|
1123
|
+
_classPrivateFieldSet(_this, _partNumber, (_this$partNumber = _classPrivateFieldGet(_this, _partNumber), _this$partNumber++, _this$partNumber));
|
|
1124
|
+
_classPrivateFieldGet(_this, _uploadProgress)[partNumber] = {
|
|
1125
|
+
uploaded: 0,
|
|
1126
|
+
total: new Blob(chunks, {
|
|
1127
|
+
type: MIME_TYPE.webmH264
|
|
1128
|
+
}).size
|
|
1129
|
+
};
|
|
1130
|
+
_context3.prev = 4;
|
|
1131
|
+
_context3.next = 7;
|
|
1074
1132
|
return partPresignedUrlApi.create({
|
|
1075
1133
|
recordingId: _classPrivateFieldGet(_this, _recordingId),
|
|
1076
1134
|
payload: {
|
|
1077
|
-
partNumber:
|
|
1135
|
+
partNumber: partNumber,
|
|
1078
1136
|
uploadId: _classPrivateFieldGet(_this, _uploadId)
|
|
1079
1137
|
},
|
|
1080
1138
|
config: {
|
|
1081
1139
|
signal: _classPrivateFieldGet(_this, _abortController).signal
|
|
1082
1140
|
}
|
|
1083
1141
|
});
|
|
1084
|
-
case
|
|
1142
|
+
case 7:
|
|
1085
1143
|
_yield$partPresignedU = _context3.sent;
|
|
1086
1144
|
presignedUrl = _yield$partPresignedU.presignedUrl;
|
|
1145
|
+
logger.info("Presigned url created for partNumber:", partNumber);
|
|
1087
1146
|
s3PartUploadPromise = s3Api.presignedUpload({
|
|
1088
1147
|
presignedUrl: presignedUrl,
|
|
1089
1148
|
blob: new Blob(chunks, {
|
|
@@ -1091,21 +1150,40 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
|
|
|
1091
1150
|
}),
|
|
1092
1151
|
config: {
|
|
1093
1152
|
includeMetadataInResponse: true,
|
|
1094
|
-
signal: _classPrivateFieldGet(_this, _abortController).signal
|
|
1153
|
+
signal: _classPrivateFieldGet(_this, _abortController).signal,
|
|
1154
|
+
onUploadProgress: function onUploadProgress(e) {
|
|
1155
|
+
_classPrivateFieldGet(_this, _uploadProgress)[partNumber] = {
|
|
1156
|
+
uploaded: e.loaded,
|
|
1157
|
+
total: e.total
|
|
1158
|
+
};
|
|
1159
|
+
if (_classPrivateFieldGet(_this, _store$1).getState().status === UPLOAD_STATUS.uploading) {
|
|
1160
|
+
var percentCompleted = calculateUploadProgress(_classPrivateFieldGet(_this, _uploadProgress));
|
|
1161
|
+
logger.info("Upload Progress: ".concat(percentCompleted, "%"));
|
|
1162
|
+
_classPrivateFieldGet(_this, _fireCallbacks$1).call(_this, UPLOAD_EVENT.onProgress, [percentCompleted]);
|
|
1163
|
+
}
|
|
1164
|
+
}
|
|
1095
1165
|
}
|
|
1096
1166
|
});
|
|
1097
1167
|
_classPrivateFieldGet(_this, _s3PartUploadPromises).push(s3PartUploadPromise);
|
|
1098
|
-
_context3.next =
|
|
1168
|
+
_context3.next = 17;
|
|
1099
1169
|
break;
|
|
1100
|
-
case
|
|
1101
|
-
_context3.prev =
|
|
1102
|
-
_context3.t0 = _context3["catch"](
|
|
1103
|
-
if
|
|
1104
|
-
|
|
1170
|
+
case 14:
|
|
1171
|
+
_context3.prev = 14;
|
|
1172
|
+
_context3.t0 = _context3["catch"](4);
|
|
1173
|
+
// ignore if aborted
|
|
1174
|
+
if (!axios.isCancel(_context3.t0)) {
|
|
1175
|
+
logger.error("Failed to upload partNumber:", partNumber);
|
|
1176
|
+
if (_classPrivateFieldGet(_this, _store$1).getState().status === UPLOAD_STATUS.uploading) {
|
|
1177
|
+
_classPrivateFieldGet(_this, _fireCallbacks$1).call(_this, UPLOAD_EVENT.onError);
|
|
1178
|
+
} else {
|
|
1179
|
+
_classPrivateFieldGet(_this, _failedUpload).push(partNumber);
|
|
1180
|
+
}
|
|
1181
|
+
}
|
|
1182
|
+
case 17:
|
|
1105
1183
|
case "end":
|
|
1106
1184
|
return _context3.stop();
|
|
1107
1185
|
}
|
|
1108
|
-
}, _callee3, null, [[
|
|
1186
|
+
}, _callee3, null, [[4, 14]]);
|
|
1109
1187
|
}));
|
|
1110
1188
|
function value(_x) {
|
|
1111
1189
|
return _value.apply(this, arguments);
|