@bigbinary/neeto-media-recorder 2.1.4 → 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 +5 -2
- package/constants.js.map +1 -1
- package/core.js +118 -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",
|
|
@@ -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 = {
|
|
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 =
|
|
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);
|
|
@@ -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))
|
|
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 =
|
|
928
|
+
_context.next = 5;
|
|
905
929
|
break;
|
|
906
930
|
}
|
|
931
|
+
logger.error("completeUpload -> not initialized");
|
|
907
932
|
return _context.abrupt("return");
|
|
908
|
-
case
|
|
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
|
-
|
|
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,
|
|
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 =
|
|
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
|
|
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
|
-
|
|
998
|
+
logger.info("completeUpload -> completing upload... ");
|
|
999
|
+
_context.next = 28;
|
|
958
1000
|
return _classPrivateFieldGet(_this, _completeUploadPromise);
|
|
959
|
-
case
|
|
1001
|
+
case 28:
|
|
1002
|
+
logger.info("completeUpload -> upload completed");
|
|
960
1003
|
if (!(_classPrivateFieldGet(_this, _store$1).getState().status === UPLOAD_STATUS.aborting)) {
|
|
961
|
-
_context.next =
|
|
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
|
|
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 =
|
|
1014
|
+
_context.next = 41;
|
|
971
1015
|
break;
|
|
972
|
-
case
|
|
973
|
-
_context.prev =
|
|
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
|
|
977
|
-
_context.prev =
|
|
1024
|
+
case 41:
|
|
1025
|
+
_context.prev = 41;
|
|
978
1026
|
_classPrivateFieldSet(_this, _completeUploadPromise, null);
|
|
979
|
-
return _context.finish(
|
|
980
|
-
case
|
|
1027
|
+
return _context.finish(41);
|
|
1028
|
+
case 44:
|
|
981
1029
|
case "end":
|
|
982
1030
|
return _context.stop();
|
|
983
1031
|
}
|
|
984
|
-
}, _callee, null, [[0,
|
|
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
|
|
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
|
-
|
|
1073
|
-
|
|
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:
|
|
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
|
|
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 =
|
|
1172
|
+
_context3.next = 20;
|
|
1099
1173
|
break;
|
|
1100
|
-
case
|
|
1101
|
-
_context3.prev =
|
|
1102
|
-
_context3.t0 = _context3["catch"](
|
|
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
|
|
1180
|
+
case 20:
|
|
1105
1181
|
case "end":
|
|
1106
1182
|
return _context3.stop();
|
|
1107
1183
|
}
|
|
1108
|
-
}, _callee3, null, [[
|
|
1184
|
+
}, _callee3, null, [[4, 15]]);
|
|
1109
1185
|
}));
|
|
1110
1186
|
function value(_x) {
|
|
1111
1187
|
return _value.apply(this, arguments);
|