@bigbinary/neeto-media-recorder 2.1.6 → 2.3.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 +8 -5
- package/constants.js.map +1 -1
- package/core.js +184 -95
- package/core.js.map +1 -1
- package/index.js +132 -115
- package/index.js.map +1 -1
- package/package.json +1 -1
- package/src/translations/en.json +1 -0
package/constants.js
CHANGED
|
@@ -12,7 +12,7 @@ function _typeof(obj) {
|
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
// https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#ErrorCodeList
|
|
15
|
-
var
|
|
15
|
+
var RETRYABLE_ERRORS = [500, 503];
|
|
16
16
|
var ONE_SECOND_IN_MILLISECONDS = 1000;
|
|
17
17
|
var HALF_A_SECOND_IN_MILLISECONDS = 500;
|
|
18
18
|
var TWO_HUNDRED_MILLISECONDS = 200;
|
|
@@ -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 = {
|
|
@@ -95,5 +98,5 @@ var RECORDING_LIMIT_REACHED_WARNING_SOUND = "https://neeto-record-static-assets.
|
|
|
95
98
|
var RECORDING_TIME_LIMIT_FREE_PLAN = 15 * ONE_MINUTE_IN_MILLISECONDS; // 15 minutes
|
|
96
99
|
var RECORDING_TIME_LIMIT_PRO_PLAN = 2 * ONE_HOUR_IN_MILLISECONDS; // 2 hours
|
|
97
100
|
|
|
98
|
-
export { DEFAULT_RETRY_CONFIG, HALF_A_SECOND_IN_MILLISECONDS, HAS_CHROME_NAMESPACE, INITIAL_RETRY_DELAY, IS_EXTENSION, IS_SAFARI, IS_SAFARI_EXTENSION, MAX_RETRY_DELAY, MIME_TYPE, NETWORK_ERROR, ONE_HOUR_IN_MILLISECONDS, ONE_MINUTE_IN_MILLISECONDS, ONE_SECOND, ONE_SECOND_IN_MILLISECONDS, PERMISSIONS_HELP_DOC, RECORDING_LIMIT_REACHED_WARNING_SOUND, RECORDING_TIME_LIMIT_FREE_PLAN, RECORDING_TIME_LIMIT_PRO_PLAN,
|
|
101
|
+
export { DEFAULT_RETRY_CONFIG, HALF_A_SECOND_IN_MILLISECONDS, HAS_CHROME_NAMESPACE, INITIAL_RETRY_DELAY, IS_EXTENSION, IS_SAFARI, IS_SAFARI_EXTENSION, MAX_RETRY_DELAY, MIME_TYPE, NETWORK_ERROR, ONE_HOUR_IN_MILLISECONDS, ONE_MINUTE_IN_MILLISECONDS, ONE_SECOND, ONE_SECOND_IN_MILLISECONDS, PERMISSIONS_HELP_DOC, RECORDING_LIMIT_REACHED_WARNING_SOUND, RECORDING_TIME_LIMIT_FREE_PLAN, RECORDING_TIME_LIMIT_PRO_PLAN, RETRYABLE_ERRORS, SCREEN_RECORDER_ERROR, SCREEN_RECORDER_EVENT, SCREEN_RECORDER_STATUS, START_RECORDING_SOUND, STOP_RECORDING_DUE_TO_LIMIT_REACHED_SOUND, TIMEOUT_ERROR, TOTAL_RETRIES, TWO_HUNDRED_MILLISECONDS, UPLOAD_EVENT, UPLOAD_STATUS };
|
|
99
102
|
//# sourceMappingURL=constants.js.map
|
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
|
|
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 RETRYABLE_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":["RETRYABLE_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
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import axios from 'axios';
|
|
2
|
-
import { isPresent, isNotEmpty, isNot
|
|
3
|
-
import {
|
|
4
|
-
import { isNotNil, min, identity, isEmpty,
|
|
2
|
+
import { isPresent, existsBy, isNotEmpty, isNot } from '@bigbinary/neeto-cist';
|
|
3
|
+
import { MIME_TYPE as MIME_TYPE$1, RETRYABLE_ERRORS, 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 { isNotNil, min, isNil, identity, isEmpty, pick, equals, not } from 'ramda';
|
|
5
5
|
import platform from 'platform';
|
|
6
|
+
import '@bigbinary/neeto-media-recorder/core';
|
|
6
7
|
import withImmutableActions from '@bigbinary/neeto-commons-frontend/react-utils/withImmutableActions';
|
|
7
8
|
import { create as create$3 } from 'zustand';
|
|
8
9
|
|
|
@@ -629,7 +630,7 @@ function _wrapNativeSuper(Class) {
|
|
|
629
630
|
return _wrapNativeSuper(Class);
|
|
630
631
|
}
|
|
631
632
|
|
|
632
|
-
var TOTAL_RETRIES =
|
|
633
|
+
var TOTAL_RETRIES = 15;
|
|
633
634
|
var INITIAL_RETRY_DELAY = 4000;
|
|
634
635
|
var MAX_RETRY_DELAY = 16000;
|
|
635
636
|
var DEFAULT_RETRY_CONFIG = {
|
|
@@ -690,7 +691,7 @@ var buildRetryableApi = function buildRetryableApi(apiConnector) {
|
|
|
690
691
|
});
|
|
691
692
|
case 4:
|
|
692
693
|
if (!(remainingAttempts-- && !shouldCancelRetries)) {
|
|
693
|
-
_context.next =
|
|
694
|
+
_context.next = 26;
|
|
694
695
|
break;
|
|
695
696
|
}
|
|
696
697
|
_context.prev = 5;
|
|
@@ -701,26 +702,28 @@ var buildRetryableApi = function buildRetryableApi(apiConnector) {
|
|
|
701
702
|
case 11:
|
|
702
703
|
_context.prev = 11;
|
|
703
704
|
_context.t0 = _context["catch"](5);
|
|
705
|
+
logger.error("buildRetryableApi -> Failed to connect, remainingAttempts:", remainingAttempts);
|
|
704
706
|
isRetryableStatus = isPresent(retryableStatuses) && retryableStatuses.includes((_error$response = _context.t0.response) === null || _error$response === void 0 ? void 0 : _error$response.status);
|
|
705
707
|
isRetryableError = isRetryableStatus || _context.t0.message === NETWORK_ERROR || _context.t0.code === TIMEOUT_ERROR;
|
|
706
708
|
if (!(isRetryableError && remainingAttempts > 0)) {
|
|
707
|
-
_context.next =
|
|
709
|
+
_context.next = 23;
|
|
708
710
|
break;
|
|
709
711
|
}
|
|
710
|
-
|
|
712
|
+
logger.info("buildRetryableApi -> Failed to connect, retry in:", retryDelay);
|
|
713
|
+
_context.next = 20;
|
|
711
714
|
return sleep(retryDelay);
|
|
712
|
-
case
|
|
715
|
+
case 20:
|
|
713
716
|
retryDelay = min(retryDelay * 2, MAX_RETRY_DELAY);
|
|
714
|
-
_context.next =
|
|
717
|
+
_context.next = 24;
|
|
715
718
|
break;
|
|
716
|
-
case
|
|
719
|
+
case 23:
|
|
717
720
|
throw _context.t0;
|
|
718
|
-
case
|
|
721
|
+
case 24:
|
|
719
722
|
_context.next = 4;
|
|
720
723
|
break;
|
|
721
|
-
case
|
|
724
|
+
case 26:
|
|
722
725
|
throw new RetryError("Request cancelled or request retries exhausted");
|
|
723
|
-
case
|
|
726
|
+
case 27:
|
|
724
727
|
case "end":
|
|
725
728
|
return _context.stop();
|
|
726
729
|
}
|
|
@@ -770,9 +773,53 @@ var partPresignedUrlApi = {
|
|
|
770
773
|
create: retryableCreate
|
|
771
774
|
};
|
|
772
775
|
|
|
776
|
+
var getUnSupportedConstraints = function getUnSupportedConstraints(mediaType) {
|
|
777
|
+
var supportedMediaConstraints = navigator.mediaDevices.getSupportedConstraints();
|
|
778
|
+
return Object.keys(mediaType).filter(function (constraint) {
|
|
779
|
+
return !supportedMediaConstraints[constraint];
|
|
780
|
+
});
|
|
781
|
+
};
|
|
782
|
+
var checkConstraints = function checkConstraints() {
|
|
783
|
+
if (isNil(navigator.mediaDevices)) {
|
|
784
|
+
return;
|
|
785
|
+
}
|
|
786
|
+
for (var _len = arguments.length, mediaTypes = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
787
|
+
mediaTypes[_key] = arguments[_key];
|
|
788
|
+
}
|
|
789
|
+
var unSupportedConstraints = mediaTypes.filter(function (mediaType) {
|
|
790
|
+
return _typeof$1(mediaType) === "object";
|
|
791
|
+
}).map(getUnSupportedConstraints).flat();
|
|
792
|
+
if (isNotEmpty(unSupportedConstraints)) {
|
|
793
|
+
// eslint-disable-next-line no-console
|
|
794
|
+
console.error("The constraints ".concat(unSupportedConstraints.join(","), " doesn't support on this browser."));
|
|
795
|
+
}
|
|
796
|
+
};
|
|
797
|
+
var isStreamEnded = function isStreamEnded(mediaStream) {
|
|
798
|
+
return existsBy({
|
|
799
|
+
readyState: "ended"
|
|
800
|
+
}, mediaStream.getTracks());
|
|
801
|
+
};
|
|
802
|
+
var getSupportedMimeType = function getSupportedMimeType(fallback) {
|
|
803
|
+
if (MediaRecorder.isTypeSupported(MIME_TYPE.mp4)) {
|
|
804
|
+
return MIME_TYPE.mp4;
|
|
805
|
+
} else if (MediaRecorder.isTypeSupported(MIME_TYPE.webmH264)) {
|
|
806
|
+
return MIME_TYPE.webmH264;
|
|
807
|
+
}
|
|
808
|
+
return fallback;
|
|
809
|
+
};
|
|
810
|
+
|
|
811
|
+
// TODO: Support for mp4 in chrome version 126
|
|
812
|
+
var getMediaRecorderOptions = function getMediaRecorderOptions() {
|
|
813
|
+
var mimeType = getSupportedMimeType();
|
|
814
|
+
if (!mimeType) return {};
|
|
815
|
+
return {
|
|
816
|
+
mimeType: mimeType
|
|
817
|
+
};
|
|
818
|
+
};
|
|
819
|
+
|
|
773
820
|
var s3AxiosInstance = axios.create({
|
|
774
821
|
headers: {
|
|
775
|
-
"Content-Type": MIME_TYPE.webmH264
|
|
822
|
+
"Content-Type": getSupportedMimeType(MIME_TYPE$1.webmH264)
|
|
776
823
|
}
|
|
777
824
|
});
|
|
778
825
|
s3AxiosInstance.interceptors.response.use(identity, function (error) {
|
|
@@ -785,12 +832,16 @@ var presignedUpload = function presignedUpload(_ref) {
|
|
|
785
832
|
return s3AxiosInstance.put(presignedUrl, blob, config);
|
|
786
833
|
};
|
|
787
834
|
var retryablePresignedUpload = buildRetryableApi(presignedUpload, {
|
|
788
|
-
retryableStatuses:
|
|
835
|
+
retryableStatuses: RETRYABLE_ERRORS
|
|
789
836
|
});
|
|
790
837
|
var s3Api = {
|
|
791
838
|
presignedUpload: retryablePresignedUpload
|
|
792
839
|
};
|
|
793
840
|
|
|
841
|
+
var isMp4Supported = function isMp4Supported() {
|
|
842
|
+
return getSupportedMimeType() === MIME_TYPE$1.mp4;
|
|
843
|
+
};
|
|
844
|
+
|
|
794
845
|
var prepareStore$1 = function prepareStore() {
|
|
795
846
|
return create$3(withImmutableActions(function () {
|
|
796
847
|
return {
|
|
@@ -806,6 +857,15 @@ var prepareStore$1 = function prepareStore() {
|
|
|
806
857
|
var isNotCancelledRequest = function isNotCancelledRequest(resolvedResponse) {
|
|
807
858
|
return typeof resolvedResponse !== "boolean";
|
|
808
859
|
};
|
|
860
|
+
var calculateUploadProgress = function calculateUploadProgress(uploadProgress) {
|
|
861
|
+
var total = Object.values(uploadProgress).reduce(function (sum, part) {
|
|
862
|
+
return sum + part.total;
|
|
863
|
+
}, 0);
|
|
864
|
+
var uploaded = Object.values(uploadProgress).reduce(function (sum, part) {
|
|
865
|
+
return sum + part.uploaded;
|
|
866
|
+
}, 0);
|
|
867
|
+
return Math.round(uploaded * 100 / total);
|
|
868
|
+
};
|
|
809
869
|
|
|
810
870
|
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
871
|
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 +881,8 @@ var _store$1 = /*#__PURE__*/new WeakMap();
|
|
|
821
881
|
var _abortController = /*#__PURE__*/new WeakMap();
|
|
822
882
|
var _pendingS3ChunkUploads = /*#__PURE__*/new WeakMap();
|
|
823
883
|
var _completeUploadPromise = /*#__PURE__*/new WeakMap();
|
|
884
|
+
var _failedUpload = /*#__PURE__*/new WeakMap();
|
|
885
|
+
var _uploadProgress = /*#__PURE__*/new WeakMap();
|
|
824
886
|
var _fireCallbacks$1 = /*#__PURE__*/new WeakMap();
|
|
825
887
|
var _uploadChunkToS = /*#__PURE__*/new WeakMap();
|
|
826
888
|
var _getCurrentUnUploadedBlob = /*#__PURE__*/new WeakMap();
|
|
@@ -874,6 +936,14 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
|
|
|
874
936
|
writable: true,
|
|
875
937
|
value: void 0
|
|
876
938
|
});
|
|
939
|
+
_classPrivateFieldInitSpec$1(this, _failedUpload, {
|
|
940
|
+
writable: true,
|
|
941
|
+
value: []
|
|
942
|
+
});
|
|
943
|
+
_classPrivateFieldInitSpec$1(this, _uploadProgress, {
|
|
944
|
+
writable: true,
|
|
945
|
+
value: {}
|
|
946
|
+
});
|
|
877
947
|
_defineProperty(this, "initialize", function (recordingId, uploadId) {
|
|
878
948
|
_classPrivateFieldSet(_this, _recordingId, recordingId);
|
|
879
949
|
_classPrivateFieldSet(_this, _uploadId, uploadId);
|
|
@@ -908,6 +978,7 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
|
|
|
908
978
|
case 4:
|
|
909
979
|
// Upload last chunk; only if last chunk has data
|
|
910
980
|
if (_classPrivateFieldGet(_this, _getCurrentUnUploadedBlob).call(_this).size > 0) {
|
|
981
|
+
logger.info("completeUpload -> need to upload last chunk");
|
|
911
982
|
uploadChunkToS3Promise = _classPrivateFieldGet(_this, _uploadChunkToS).call(_this, _classPrivateFieldGet(_this, _unUploadedChunks));
|
|
912
983
|
_classPrivateFieldGet(_this, _pendingS3ChunkUploads).push(uploadChunkToS3Promise);
|
|
913
984
|
}
|
|
@@ -920,22 +991,36 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
|
|
|
920
991
|
* adding the new presignedUrl part upload to s3PartUploadPromises.
|
|
921
992
|
* This results in incorrect partNumbers.
|
|
922
993
|
*/
|
|
923
|
-
|
|
994
|
+
logger.info("completeUpload -> uploading all pending chunks...", _classPrivateFieldGet(_this, _pendingS3ChunkUploads).length);
|
|
995
|
+
_context.next = 8;
|
|
924
996
|
return Promise.all(_classPrivateFieldGet(_this, _pendingS3ChunkUploads));
|
|
925
|
-
case
|
|
926
|
-
|
|
997
|
+
case 8:
|
|
998
|
+
logger.info("completeUpload -> finishing part uploads...");
|
|
999
|
+
_context.next = 11;
|
|
927
1000
|
return Promise.all(_classPrivateFieldGet(_this, _s3PartUploadPromises));
|
|
928
|
-
case
|
|
1001
|
+
case 11:
|
|
929
1002
|
resolvedS3PartUploadPromises = _context.sent;
|
|
1003
|
+
if (!isNotEmpty(_classPrivateFieldGet(_this, _failedUpload))) {
|
|
1004
|
+
_context.next = 17;
|
|
1005
|
+
break;
|
|
1006
|
+
}
|
|
1007
|
+
logger.info("completeUpload -> chunks with these partNumbers failed:", _classPrivateFieldGet(_this, _failedUpload));
|
|
1008
|
+
_classPrivateFieldGet(_this, _fireCallbacks$1).call(_this, UPLOAD_EVENT.onError);
|
|
1009
|
+
_classPrivateFieldGet(_this, _store$1).setState({
|
|
1010
|
+
status: UPLOAD_STATUS.error
|
|
1011
|
+
});
|
|
1012
|
+
return _context.abrupt("return");
|
|
1013
|
+
case 17:
|
|
930
1014
|
if (!(resolvedS3PartUploadPromises.length === 0)) {
|
|
931
|
-
_context.next =
|
|
1015
|
+
_context.next = 21;
|
|
932
1016
|
break;
|
|
933
1017
|
}
|
|
1018
|
+
logger.info("completeUpload -> insufficient data");
|
|
934
1019
|
_classPrivateFieldGet(_this, _store$1).setState({
|
|
935
1020
|
status: UPLOAD_STATUS.insufficient_data
|
|
936
1021
|
});
|
|
937
1022
|
return _context.abrupt("return");
|
|
938
|
-
case
|
|
1023
|
+
case 21:
|
|
939
1024
|
parts = resolvedS3PartUploadPromises.filter(isNotCancelledRequest).map(function (resolvedResponse) {
|
|
940
1025
|
return {
|
|
941
1026
|
etag: resolvedResponse.headers.etag,
|
|
@@ -944,44 +1029,56 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
|
|
|
944
1029
|
}).toSorted(function (a, b) {
|
|
945
1030
|
return Number(a.partNumber) - Number(b.partNumber);
|
|
946
1031
|
});
|
|
1032
|
+
logger.info("completeUpload -> uploaded parts: ", parts);
|
|
947
1033
|
_classPrivateFieldSet(_this, _completeUploadPromise, completeUploadApi.create({
|
|
948
1034
|
recordingId: _classPrivateFieldGet(_this, _recordingId),
|
|
949
1035
|
payload: {
|
|
950
1036
|
parts: parts,
|
|
951
|
-
uploadId: _classPrivateFieldGet(_this, _uploadId)
|
|
1037
|
+
uploadId: _classPrivateFieldGet(_this, _uploadId),
|
|
1038
|
+
isMp4: isMp4Supported()
|
|
952
1039
|
},
|
|
953
1040
|
config: {
|
|
954
1041
|
signal: _classPrivateFieldGet(_this, _abortController).signal
|
|
955
1042
|
}
|
|
956
1043
|
}));
|
|
957
|
-
|
|
1044
|
+
logger.info("completeUpload -> completing upload... ");
|
|
1045
|
+
_context.next = 27;
|
|
958
1046
|
return _classPrivateFieldGet(_this, _completeUploadPromise);
|
|
959
|
-
case
|
|
1047
|
+
case 27:
|
|
1048
|
+
logger.info("completeUpload -> upload completed");
|
|
960
1049
|
if (!(_classPrivateFieldGet(_this, _store$1).getState().status === UPLOAD_STATUS.aborting)) {
|
|
961
|
-
_context.next =
|
|
1050
|
+
_context.next = 31;
|
|
962
1051
|
break;
|
|
963
1052
|
}
|
|
1053
|
+
logger.info("completeUpload -> upload was marked as aborted");
|
|
964
1054
|
return _context.abrupt("return");
|
|
965
|
-
case
|
|
1055
|
+
case 31:
|
|
966
1056
|
_classPrivateFieldGet(_this, _store$1).setState({
|
|
967
1057
|
status: UPLOAD_STATUS.completed
|
|
968
1058
|
});
|
|
969
1059
|
_classPrivateFieldGet(_this, _fireCallbacks$1).call(_this, UPLOAD_EVENT.onComplete);
|
|
970
|
-
_context.next =
|
|
1060
|
+
_context.next = 38;
|
|
971
1061
|
break;
|
|
972
|
-
case
|
|
973
|
-
_context.prev =
|
|
1062
|
+
case 35:
|
|
1063
|
+
_context.prev = 35;
|
|
974
1064
|
_context.t0 = _context["catch"](0);
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
1065
|
+
// ignore if aborted
|
|
1066
|
+
if (!axios.isCancel(_context.t0)) {
|
|
1067
|
+
_classPrivateFieldGet(_this, _store$1).setState({
|
|
1068
|
+
status: UPLOAD_STATUS.error
|
|
1069
|
+
});
|
|
1070
|
+
_classPrivateFieldGet(_this, _fireCallbacks$1).call(_this, UPLOAD_EVENT.onError);
|
|
1071
|
+
logger.error(_context.t0);
|
|
1072
|
+
}
|
|
1073
|
+
case 38:
|
|
1074
|
+
_context.prev = 38;
|
|
978
1075
|
_classPrivateFieldSet(_this, _completeUploadPromise, null);
|
|
979
|
-
return _context.finish(
|
|
980
|
-
case
|
|
1076
|
+
return _context.finish(38);
|
|
1077
|
+
case 41:
|
|
981
1078
|
case "end":
|
|
982
1079
|
return _context.stop();
|
|
983
1080
|
}
|
|
984
|
-
}, _callee, null, [[0,
|
|
1081
|
+
}, _callee, null, [[0, 35, 38, 41]]);
|
|
985
1082
|
})));
|
|
986
1083
|
_defineProperty(this, "abortUpload", /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
|
|
987
1084
|
return _regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
@@ -1005,7 +1102,8 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
|
|
|
1005
1102
|
return abortUploadApi.create({
|
|
1006
1103
|
recordingId: _classPrivateFieldGet(_this, _recordingId),
|
|
1007
1104
|
payload: {
|
|
1008
|
-
uploadId: _classPrivateFieldGet(_this, _uploadId)
|
|
1105
|
+
uploadId: _classPrivateFieldGet(_this, _uploadId),
|
|
1106
|
+
isMp4: isMp4Supported()
|
|
1009
1107
|
}
|
|
1010
1108
|
});
|
|
1011
1109
|
case 9:
|
|
@@ -1035,6 +1133,8 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
|
|
|
1035
1133
|
_classPrivateFieldSet(_this, _partNumber, 1);
|
|
1036
1134
|
_classPrivateFieldSet(_this, _s3PartUploadPromises, []);
|
|
1037
1135
|
_classPrivateFieldSet(_this, _callbacks$1, {});
|
|
1136
|
+
_classPrivateFieldSet(_this, _failedUpload, []);
|
|
1137
|
+
_classPrivateFieldSet(_this, _uploadProgress, {});
|
|
1038
1138
|
_classPrivateFieldGet(_this, _store$1).setState({
|
|
1039
1139
|
status: ""
|
|
1040
1140
|
});
|
|
@@ -1064,48 +1164,79 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
|
|
|
1064
1164
|
writable: true,
|
|
1065
1165
|
value: function () {
|
|
1066
1166
|
var _value = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(chunks) {
|
|
1067
|
-
var _this$partNumber
|
|
1167
|
+
var _this$partNumber;
|
|
1168
|
+
var partNumber, mimeType, _yield$partPresignedU, presignedUrl, s3PartUploadPromise;
|
|
1068
1169
|
return _regeneratorRuntime.wrap(function _callee3$(_context3) {
|
|
1069
1170
|
while (1) switch (_context3.prev = _context3.next) {
|
|
1070
1171
|
case 0:
|
|
1071
1172
|
logger.info("Part ready to be uploaded: ", _classPrivateFieldGet(_this, _partNumber));
|
|
1072
|
-
|
|
1073
|
-
|
|
1173
|
+
partNumber = _classPrivateFieldGet(_this, _partNumber);
|
|
1174
|
+
_classPrivateFieldSet(_this, _partNumber, (_this$partNumber = _classPrivateFieldGet(_this, _partNumber), _this$partNumber++, _this$partNumber));
|
|
1175
|
+
_classPrivateFieldGet(_this, _uploadProgress)[partNumber] = {
|
|
1176
|
+
uploaded: 0,
|
|
1177
|
+
total: new Blob(chunks, {
|
|
1178
|
+
type: MIME_TYPE.webmH264
|
|
1179
|
+
}).size
|
|
1180
|
+
};
|
|
1181
|
+
_context3.prev = 4;
|
|
1182
|
+
mimeType = getSupportedMimeType(MIME_TYPE.webmH264);
|
|
1183
|
+
_context3.next = 8;
|
|
1074
1184
|
return partPresignedUrlApi.create({
|
|
1075
1185
|
recordingId: _classPrivateFieldGet(_this, _recordingId),
|
|
1076
1186
|
payload: {
|
|
1077
|
-
partNumber:
|
|
1078
|
-
uploadId: _classPrivateFieldGet(_this, _uploadId)
|
|
1187
|
+
partNumber: partNumber,
|
|
1188
|
+
uploadId: _classPrivateFieldGet(_this, _uploadId),
|
|
1189
|
+
isMp4: mimeType === MIME_TYPE.mp4
|
|
1079
1190
|
},
|
|
1080
1191
|
config: {
|
|
1081
1192
|
signal: _classPrivateFieldGet(_this, _abortController).signal
|
|
1082
1193
|
}
|
|
1083
1194
|
});
|
|
1084
|
-
case
|
|
1195
|
+
case 8:
|
|
1085
1196
|
_yield$partPresignedU = _context3.sent;
|
|
1086
1197
|
presignedUrl = _yield$partPresignedU.presignedUrl;
|
|
1198
|
+
logger.info("Presigned url created for partNumber:", partNumber);
|
|
1087
1199
|
s3PartUploadPromise = s3Api.presignedUpload({
|
|
1088
1200
|
presignedUrl: presignedUrl,
|
|
1089
1201
|
blob: new Blob(chunks, {
|
|
1090
|
-
type:
|
|
1202
|
+
type: mimeType
|
|
1091
1203
|
}),
|
|
1092
1204
|
config: {
|
|
1093
1205
|
includeMetadataInResponse: true,
|
|
1094
|
-
signal: _classPrivateFieldGet(_this, _abortController).signal
|
|
1206
|
+
signal: _classPrivateFieldGet(_this, _abortController).signal,
|
|
1207
|
+
onUploadProgress: function onUploadProgress(e) {
|
|
1208
|
+
_classPrivateFieldGet(_this, _uploadProgress)[partNumber] = {
|
|
1209
|
+
uploaded: e.loaded,
|
|
1210
|
+
total: e.total
|
|
1211
|
+
};
|
|
1212
|
+
if (_classPrivateFieldGet(_this, _store$1).getState().status === UPLOAD_STATUS.uploading) {
|
|
1213
|
+
var percentCompleted = calculateUploadProgress(_classPrivateFieldGet(_this, _uploadProgress));
|
|
1214
|
+
logger.info("Upload Progress: ".concat(percentCompleted, "%"));
|
|
1215
|
+
_classPrivateFieldGet(_this, _fireCallbacks$1).call(_this, UPLOAD_EVENT.onProgress, [percentCompleted]);
|
|
1216
|
+
}
|
|
1217
|
+
}
|
|
1095
1218
|
}
|
|
1096
1219
|
});
|
|
1097
1220
|
_classPrivateFieldGet(_this, _s3PartUploadPromises).push(s3PartUploadPromise);
|
|
1098
|
-
_context3.next =
|
|
1221
|
+
_context3.next = 18;
|
|
1099
1222
|
break;
|
|
1100
|
-
case
|
|
1101
|
-
_context3.prev =
|
|
1102
|
-
_context3.t0 = _context3["catch"](
|
|
1103
|
-
if
|
|
1104
|
-
|
|
1223
|
+
case 15:
|
|
1224
|
+
_context3.prev = 15;
|
|
1225
|
+
_context3.t0 = _context3["catch"](4);
|
|
1226
|
+
// ignore if aborted
|
|
1227
|
+
if (!axios.isCancel(_context3.t0)) {
|
|
1228
|
+
logger.error("Failed to upload partNumber:", partNumber);
|
|
1229
|
+
if (_classPrivateFieldGet(_this, _store$1).getState().status === UPLOAD_STATUS.uploading) {
|
|
1230
|
+
_classPrivateFieldGet(_this, _fireCallbacks$1).call(_this, UPLOAD_EVENT.onError);
|
|
1231
|
+
} else {
|
|
1232
|
+
_classPrivateFieldGet(_this, _failedUpload).push(partNumber);
|
|
1233
|
+
}
|
|
1234
|
+
}
|
|
1235
|
+
case 18:
|
|
1105
1236
|
case "end":
|
|
1106
1237
|
return _context3.stop();
|
|
1107
1238
|
}
|
|
1108
|
-
}, _callee3, null, [[
|
|
1239
|
+
}, _callee3, null, [[4, 15]]);
|
|
1109
1240
|
}));
|
|
1110
1241
|
function value(_x) {
|
|
1111
1242
|
return _value.apply(this, arguments);
|
|
@@ -1117,7 +1248,7 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
|
|
|
1117
1248
|
writable: true,
|
|
1118
1249
|
value: function value() {
|
|
1119
1250
|
return new Blob(_classPrivateFieldGet(_this, _unUploadedChunks), {
|
|
1120
|
-
type: MIME_TYPE.webmH264
|
|
1251
|
+
type: getSupportedMimeType(MIME_TYPE.webmH264)
|
|
1121
1252
|
});
|
|
1122
1253
|
}
|
|
1123
1254
|
});
|
|
@@ -1210,47 +1341,6 @@ var prepareStore = function prepareStore() {
|
|
|
1210
1341
|
}));
|
|
1211
1342
|
};
|
|
1212
1343
|
|
|
1213
|
-
var getUnSupportedConstraints = function getUnSupportedConstraints(mediaType) {
|
|
1214
|
-
var supportedMediaConstraints = navigator.mediaDevices.getSupportedConstraints();
|
|
1215
|
-
return Object.keys(mediaType).filter(function (constraint) {
|
|
1216
|
-
return !supportedMediaConstraints[constraint];
|
|
1217
|
-
});
|
|
1218
|
-
};
|
|
1219
|
-
var checkConstraints = function checkConstraints() {
|
|
1220
|
-
if (isNil(navigator.mediaDevices)) {
|
|
1221
|
-
return;
|
|
1222
|
-
}
|
|
1223
|
-
for (var _len = arguments.length, mediaTypes = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
1224
|
-
mediaTypes[_key] = arguments[_key];
|
|
1225
|
-
}
|
|
1226
|
-
var unSupportedConstraints = mediaTypes.filter(function (mediaType) {
|
|
1227
|
-
return _typeof$1(mediaType) === "object";
|
|
1228
|
-
}).map(getUnSupportedConstraints).flat();
|
|
1229
|
-
if (isNotEmpty(unSupportedConstraints)) {
|
|
1230
|
-
// eslint-disable-next-line no-console
|
|
1231
|
-
console.error("The constraints ".concat(unSupportedConstraints.join(","), " doesn't support on this browser."));
|
|
1232
|
-
}
|
|
1233
|
-
};
|
|
1234
|
-
var isStreamEnded = function isStreamEnded(mediaStream) {
|
|
1235
|
-
return existsBy({
|
|
1236
|
-
readyState: "ended"
|
|
1237
|
-
}, mediaStream.getTracks());
|
|
1238
|
-
};
|
|
1239
|
-
|
|
1240
|
-
// TODO: Support for mp4 in chrome version 126
|
|
1241
|
-
var getMediaRecorderOptions = function getMediaRecorderOptions() {
|
|
1242
|
-
return {
|
|
1243
|
-
mimeType: MIME_TYPE.webmH264
|
|
1244
|
-
};
|
|
1245
|
-
};
|
|
1246
|
-
// Required for safari
|
|
1247
|
-
// if (MediaRecorder.isTypeSupported(MIME_TYPE.mp4)) {
|
|
1248
|
-
// return { mimeType: MIME_TYPE.mp4 };
|
|
1249
|
-
// } else if (MediaRecorder.isTypeSupported(MIME_TYPE.webmH264)) {
|
|
1250
|
-
// return { mimeType: MIME_TYPE.webmH264 };
|
|
1251
|
-
// }
|
|
1252
|
-
// return {};
|
|
1253
|
-
|
|
1254
1344
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
1255
1345
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
1256
1346
|
function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
|
|
@@ -1370,9 +1460,8 @@ var ScreenRecorder = /*#__PURE__*/function () {
|
|
|
1370
1460
|
return _classPrivateFieldSet(_this, _timeLimit, timeLimit);
|
|
1371
1461
|
});
|
|
1372
1462
|
_defineProperty(this, "getWebmMediaBlob", function () {
|
|
1373
|
-
var _getMediaRecorderOpti, _getMediaRecorderOpti2;
|
|
1374
1463
|
return new Blob(_classPrivateFieldGet(_this, _mediaChunks), {
|
|
1375
|
-
type: (
|
|
1464
|
+
type: getSupportedMimeType(MIME_TYPE$1.webmH264)
|
|
1376
1465
|
});
|
|
1377
1466
|
});
|
|
1378
1467
|
_defineProperty(this, "addCallback", function (event, callback) {
|