@bigbinary/neeto-media-recorder 2.5.4 → 2.5.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/core.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import axios from 'axios';
2
2
  import { isPresent, existsBy, isNotEmpty, isNot, noop } 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';
3
+ import { RETRYABLE_ERRORS, MIME_TYPE as MIME_TYPE$1, UPLOAD_STATUS, UPLOAD_EVENT, SCREEN_RECORDER_STATUS, START_RECORDING_SOUND, RECORDING_LIMIT_REACHED_WARNING_SOUND, SCREEN_RECORDER_ERROR, SCREEN_RECORDER_EVENT, RECORDING_TIME_LIMIT_FREE_PLAN, ONE_SECOND, HALF_A_SECOND_IN_MILLISECONDS, ONE_SECOND_IN_MILLISECONDS, TWO_HUNDRED_MILLISECONDS, ONE_MINUTE_IN_MILLISECONDS, STOP_RECORDING_DUE_TO_LIMIT_REACHED_SOUND, IS_EXTENSION } from '@bigbinary/neeto-media-recorder/constants';
4
4
  import { isNotNil, min, isNil, identity, isEmpty, pick, equals, not } from 'ramda';
5
5
  import platform from 'platform';
6
6
  import '@bigbinary/neeto-media-recorder/core';
@@ -679,7 +679,7 @@ var buildRetryableApi = function buildRetryableApi(apiConnector) {
679
679
  return /*#__PURE__*/function () {
680
680
  var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(apiConnectorArgs) {
681
681
  var _config$signal;
682
- var _apiConnectorArgs$con, config, remainingAttempts, shouldCancelRetries, _error$response, isRetryableStatus, isRetryableError;
682
+ var _apiConnectorArgs$con, config, remainingAttempts, shouldCancelRetries, _error$config, _error$response, isRetryableStatus, isRetryableError;
683
683
  return _regeneratorRuntime.wrap(function _callee$(_context) {
684
684
  while (1) switch (_context.prev = _context.next) {
685
685
  case 0:
@@ -702,7 +702,7 @@ var buildRetryableApi = function buildRetryableApi(apiConnector) {
702
702
  case 11:
703
703
  _context.prev = 11;
704
704
  _context.t0 = _context["catch"](5);
705
- logger.error("buildRetryableApi -> Failed to connect, remainingAttempts:", remainingAttempts);
705
+ logger.error("buildRetryableApi -> Failed to connect, remainingAttempts:", _context.t0 === null || _context.t0 === void 0 ? void 0 : (_error$config = _context.t0.config) === null || _error$config === void 0 ? void 0 : _error$config.url, remainingAttempts);
706
706
  isRetryableStatus = isPresent(retryableStatuses) && retryableStatuses.includes((_error$response = _context.t0.response) === null || _error$response === void 0 ? void 0 : _error$response.status);
707
707
  isRetryableError = isRetryableStatus || _context.t0.message === NETWORK_ERROR || _context.t0.code === TIMEOUT_ERROR;
708
708
  if (!(isRetryableError && remainingAttempts > 0)) {
@@ -773,14 +773,6 @@ var partPresignedUrlApi = {
773
773
  create: retryableCreate
774
774
  };
775
775
 
776
- // https://www.w3.org/TR/screen-capture/#displaycapturesurfacetype
777
- var DISPLAY_SURFACE = {
778
- monitor: "monitor",
779
- window: "window",
780
- browser: "browser"
781
- };
782
- var MINIMUM_CHROMIUM_VERSION_FOR_MP4 = "128.0.6613.85";
783
-
784
776
  var getUnSupportedConstraints = function getUnSupportedConstraints(mediaType) {
785
777
  var supportedMediaConstraints = navigator.mediaDevices.getSupportedConstraints();
786
778
  return Object.keys(mediaType).filter(function (constraint) {
@@ -807,51 +799,45 @@ var isStreamEnded = function isStreamEnded(mediaStream) {
807
799
  readyState: "ended"
808
800
  }, mediaStream.getTracks());
809
801
  };
810
- function getChromiumVersion() {
811
- var userAgent = navigator.userAgent;
812
- var match = userAgent.match(/Chrom(e|ium)\/(([0-9][.]?)+)/);
813
- if (match) {
814
- return match[2];
815
- }
816
- return null;
817
- }
818
- function compareChromiumVersions(version1, version2) {
819
- var v1Parts = version1.split(".").map(Number);
820
- var v2Parts = version2.split(".").map(Number);
821
- for (var i = 0; i < Math.max(v1Parts.length, v2Parts.length); i++) {
822
- var v1Part = v1Parts[i] || 0;
823
- var v2Part = v2Parts[i] || 0;
824
- if (v1Part > v2Part) return 1;
825
- if (v1Part < v2Part) return -1;
826
- }
827
- return 0;
828
- }
829
- var getSupportedMimeType = function getSupportedMimeType(fallback) {
830
- var _platform$os, _platform$os$family;
831
- var isWindows = (_platform$os = platform.os) === null || _platform$os === void 0 ? void 0 : (_platform$os$family = _platform$os.family) === null || _platform$os$family === void 0 ? void 0 : _platform$os$family.includes("Windows");
832
- if (MediaRecorder.isTypeSupported(MIME_TYPE.mp4) && !isWindows) {
833
- if (platform.name === "Safari") {
834
- return MIME_TYPE.mp4;
835
- }
836
- var chromiumVersion = getChromiumVersion();
837
- if (isNil(chromiumVersion)) {
838
- return MIME_TYPE.webmH264;
839
- }
840
- var isChromiumVersionSupported = compareChromiumVersions(chromiumVersion, MINIMUM_CHROMIUM_VERSION_FOR_MP4) >= 0;
841
- if (isChromiumVersionSupported) {
842
- return MIME_TYPE.mp4;
843
- }
844
- return MIME_TYPE.webmH264;
845
- } else if (MediaRecorder.isTypeSupported(MIME_TYPE.webmH264)) {
846
- return MIME_TYPE.webmH264;
847
- }
848
- return fallback;
802
+ var getSupportedMimeType = function getSupportedMimeType() {
803
+ return MIME_TYPE.webmH264;
849
804
  };
850
805
 
851
- // TODO: Support for mp4 in chrome version 126
806
+ // TODO: Uncomment this when mp4 is stable
807
+ // export const getSupportedMimeType = fallback => {
808
+ // const isWindows = platform.os?.family?.includes("Windows");
809
+
810
+ // if (MediaRecorder.isTypeSupported(MIME_TYPE.mp4) && !isWindows) {
811
+ // if (platform.name === "Safari") {
812
+ // return MIME_TYPE.mp4;
813
+ // }
814
+
815
+ // const chromiumVersion = getChromiumVersion();
816
+
817
+ // if (isNil(chromiumVersion)) {
818
+ // return MIME_TYPE.webmH264;
819
+ // }
820
+
821
+ // const isChromiumVersionSupported =
822
+ // compareChromiumVersions(
823
+ // chromiumVersion,
824
+ // MINIMUM_CHROMIUM_VERSION_FOR_MP4
825
+ // ) >= 0;
826
+
827
+ // if (isChromiumVersionSupported) {
828
+ // return MIME_TYPE.mp4;
829
+ // }
830
+
831
+ // return MIME_TYPE.webmH264;
832
+ // } else if (MediaRecorder.isTypeSupported(MIME_TYPE.webmH264)) {
833
+ // return MIME_TYPE.webmH264;
834
+ // }
835
+
836
+ // return fallback;
837
+ // };
838
+
852
839
  var getMediaRecorderOptions = function getMediaRecorderOptions() {
853
840
  var mimeType = getSupportedMimeType();
854
- if (!mimeType) return {};
855
841
  return {
856
842
  mimeType: mimeType
857
843
  };
@@ -859,7 +845,7 @@ var getMediaRecorderOptions = function getMediaRecorderOptions() {
859
845
 
860
846
  var s3AxiosInstance = axios.create({
861
847
  headers: {
862
- "Content-Type": getSupportedMimeType(MIME_TYPE$1.webmH264)
848
+ "Content-Type": getSupportedMimeType()
863
849
  }
864
850
  });
865
851
  s3AxiosInstance.interceptors.response.use(identity, function (error) {
@@ -1225,15 +1211,15 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
1225
1211
  case 0:
1226
1212
  logger.info("Part ready to be uploaded: ", _classPrivateFieldGet(_this, _partNumber));
1227
1213
  partNumber = _classPrivateFieldGet(_this, _partNumber);
1214
+ mimeType = getSupportedMimeType();
1228
1215
  _classPrivateFieldSet(_this, _partNumber, (_this$partNumber = _classPrivateFieldGet(_this, _partNumber), _this$partNumber++, _this$partNumber));
1229
1216
  _classPrivateFieldGet(_this, _uploadProgress)[partNumber] = {
1230
1217
  uploaded: 0,
1231
1218
  total: new Blob(chunks, {
1232
- type: MIME_TYPE.webmH264
1219
+ type: mimeType
1233
1220
  }).size
1234
1221
  };
1235
- _context3.prev = 4;
1236
- mimeType = getSupportedMimeType(MIME_TYPE.webmH264);
1222
+ _context3.prev = 5;
1237
1223
  _context3.next = 8;
1238
1224
  return partPresignedUrlApi.create({
1239
1225
  recordingId: _classPrivateFieldGet(_this, _recordingId),
@@ -1276,7 +1262,7 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
1276
1262
  break;
1277
1263
  case 15:
1278
1264
  _context3.prev = 15;
1279
- _context3.t0 = _context3["catch"](4);
1265
+ _context3.t0 = _context3["catch"](5);
1280
1266
  // ignore if aborted
1281
1267
  if (!axios.isCancel(_context3.t0)) {
1282
1268
  logger.error("Failed to upload partNumber:", partNumber);
@@ -1293,7 +1279,7 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
1293
1279
  case "end":
1294
1280
  return _context3.stop();
1295
1281
  }
1296
- }, _callee3, null, [[4, 15]]);
1282
+ }, _callee3, null, [[5, 15]]);
1297
1283
  }));
1298
1284
  function value(_x) {
1299
1285
  return _value.apply(this, arguments);
@@ -1305,7 +1291,7 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
1305
1291
  writable: true,
1306
1292
  value: function value() {
1307
1293
  return new Blob(_classPrivateFieldGet(_this, _unUploadedChunks), {
1308
- type: getSupportedMimeType(MIME_TYPE.webmH264)
1294
+ type: getSupportedMimeType()
1309
1295
  });
1310
1296
  }
1311
1297
  });
@@ -1371,6 +1357,13 @@ function _slicedToArray(arr, i) {
1371
1357
  return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
1372
1358
  }
1373
1359
 
1360
+ // https://www.w3.org/TR/screen-capture/#displaycapturesurfacetype
1361
+ var DISPLAY_SURFACE = {
1362
+ monitor: "monitor",
1363
+ window: "window",
1364
+ browser: "browser"
1365
+ };
1366
+
1374
1367
  function ownKeys$1(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; }
1375
1368
  function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$1(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$1(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1376
1369
  var initialState = {
@@ -1510,7 +1503,7 @@ var ScreenRecorder = /*#__PURE__*/function () {
1510
1503
  });
1511
1504
  _defineProperty(this, "getWebmMediaBlob", function () {
1512
1505
  return new Blob(_classPrivateFieldGet(_this, _mediaChunks), {
1513
- type: getSupportedMimeType(MIME_TYPE$1.webmH264)
1506
+ type: getSupportedMimeType()
1514
1507
  });
1515
1508
  });
1516
1509
  _defineProperty(this, "addCallback", function (event, callback) {
@@ -1890,6 +1883,7 @@ var ScreenRecorder = /*#__PURE__*/function () {
1890
1883
  _classPrivateFieldGet(_this, _mediaRecorder).start(5000);
1891
1884
  _classPrivateFieldGet(_this, _startTimer).call(_this);
1892
1885
  } catch (error) {
1886
+ clearInterval(_classPrivateFieldGet(_this, _timerId));
1893
1887
  _classPrivateFieldGet(_this, _store).setState({
1894
1888
  status: SCREEN_RECORDER_STATUS.idle,
1895
1889
  error: SCREEN_RECORDER_ERROR[error.name]
@@ -1898,8 +1892,9 @@ var ScreenRecorder = /*#__PURE__*/function () {
1898
1892
  // To prevent triggering #onRecordingStop when the mediaRecorder is failed to start.
1899
1893
  _classPrivateFieldGet(_this, _mediaRecorder).onstop = noop;
1900
1894
  if (_classPrivateFieldGet(_this, _mediaStream)) {
1901
- _classPrivateFieldGet(_this, _mediaStream).getVideoTracks()[0].stop();
1902
- _classPrivateFieldGet(_this, _mediaStream).getAudioTracks()[0].stop();
1895
+ _classPrivateFieldGet(_this, _mediaStream).getTracks().forEach(function (track) {
1896
+ return track.stop();
1897
+ });
1903
1898
  _classPrivateFieldSet(_this, _mediaStream, null);
1904
1899
  }
1905
1900
  _classPrivateFieldSet(_this, _stream, null);