@bigbinary/neeto-media-recorder 2.7.33 → 2.7.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/constants.js CHANGED
@@ -81,6 +81,7 @@ var SCREEN_RECORDER_EVENT = {
81
81
  onShareSelected: "onShareSelected"
82
82
  };
83
83
  var TOTAL_RETRIES = 15;
84
+ var ABORT_UPLOAD_RETRIES = 2;
84
85
  var INITIAL_RETRY_DELAY = 4000;
85
86
  var MAX_RETRY_DELAY = 16000;
86
87
  var DEFAULT_RETRY_CONFIG = {
@@ -124,5 +125,5 @@ var RECORDING_TIME_LIMIT_PRO_PLAN = 2 * ONE_HOUR_IN_MILLISECONDS; // 2 hours
124
125
  var MIC_NOT_WORKING_ALERT_TIME = 30;
125
126
  var MIC_NOT_WORKING_SILENCE_TIMEOUT = MIC_NOT_WORKING_ALERT_TIME * 1000;
126
127
 
127
- export { COUNTDOWN_TICK_SOUND, COUNTDOWN_TIME, DEFAULT_RETRY_CONFIG, HALF_A_SECOND_IN_MILLISECONDS, HAS_CHROME_NAMESPACE, INITIAL_RETRY_DELAY, IS_EXTENSION, IS_SAFARI, IS_SAFARI_EXTENSION, MAX_RETRY_DELAY, MIC_NOT_WORKING_ALERT_TIME, MIC_NOT_WORKING_SILENCE_TIMEOUT, 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 };
128
+ export { ABORT_UPLOAD_RETRIES, COUNTDOWN_TICK_SOUND, COUNTDOWN_TIME, DEFAULT_RETRY_CONFIG, HALF_A_SECOND_IN_MILLISECONDS, HAS_CHROME_NAMESPACE, INITIAL_RETRY_DELAY, IS_EXTENSION, IS_SAFARI, IS_SAFARI_EXTENSION, MAX_RETRY_DELAY, MIC_NOT_WORKING_ALERT_TIME, MIC_NOT_WORKING_SILENCE_TIMEOUT, 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 };
128
129
  //# 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":["function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nexport { _typeof as default };","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 COUNTDOWN_TIME = 3;\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 error: \"error\",\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 FailedToStart: \"failed_to_start\",\n CreateRecordingError: \"create_recording_error\",\n InsufficientData: \"insufficient_data\",\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 onReUploadFromDisk: \"onReUploadFromDisk\",\n onPause: \"onPause\",\n onResume: \"onResume\",\n onCountdownStart: \"onCountdownStart\",\n onCountdown: \"onCountDown\",\n onCountdownEnd: \"onCountdownEnd\",\n onShareSelected: \"onShareSelected\",\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\n// Firefox refuses to start a MediaRecorder on a stream that has both audio and\n// video tracks unless the MIME string declares the audio codec too. Chromium\n// and Safari accept the video-only form and silently pick Opus/AAC. We keep\n// both variants and always prefer the codec-complete ones in\n// getSupportedMimeType so a single code path works across browsers.\nexport const MIME_TYPE = {\n mp4: \"video/mp4\",\n webmH264Opus: \"video/webm;codecs=h264,opus\",\n webmH264: \"video/webm;codecs=h264\",\n webmVp9Opus: \"video/webm;codecs=vp9,opus\",\n webmVp9: \"video/webm;codecs=vp9\",\n webmVp8Opus: \"video/webm;codecs=vp8,opus\",\n webmVp8: \"video/webm;codecs=vp8\",\n webm: \"video/webm\",\n};\n\nexport const START_RECORDING_SOUND =\n \"https://neeto-record-static-assets.s3.amazonaws.com/recording-start-sound-2.mp3\";\n\nexport const COUNTDOWN_TICK_SOUND =\n \"https://neeto-record-static-assets.s3.us-east-1.amazonaws.com/recording-tick-sound.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\nexport const MIC_NOT_WORKING_ALERT_TIME = 30;\nexport const MIC_NOT_WORKING_SILENCE_TIMEOUT =\n MIC_NOT_WORKING_ALERT_TIME * 1000;\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","COUNTDOWN_TIME","UPLOAD_EVENT","onComplete","onError","onProgress","UPLOAD_STATUS","uploading","completed","aborting","insufficient_data","error","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","FailedToStart","CreateRecordingError","InsufficientData","SCREEN_RECORDER_EVENT","onStart","onStop","onDiscard","onDataAvailable","onDiscardDuringCountdown","onRestart","onReUpload","onReUploadFromDisk","onPause","onResume","onCountdownStart","onCountdown","onCountdownEnd","onShareSelected","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","webmH264Opus","webmH264","webmVp9Opus","webmVp9","webmVp8Opus","webmVp8","webm","START_RECORDING_SOUND","COUNTDOWN_TICK_SOUND","STOP_RECORDING_DUE_TO_LIMIT_REACHED_SOUND","RECORDING_LIMIT_REACHED_WARNING_SOUND","RECORDING_TIME_LIMIT_FREE_PLAN","RECORDING_TIME_LIMIT_PRO_PLAN","MIC_NOT_WORKING_ALERT_TIME","MIC_NOT_WORKING_SILENCE_TIMEOUT"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"constants.js","sources":["node_modules/@babel/runtime/helpers/esm/typeof.js","src/constants.js"],"sourcesContent":["function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nexport { _typeof as default };","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 COUNTDOWN_TIME = 3;\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 error: \"error\",\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 FailedToStart: \"failed_to_start\",\n CreateRecordingError: \"create_recording_error\",\n InsufficientData: \"insufficient_data\",\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 onReUploadFromDisk: \"onReUploadFromDisk\",\n onPause: \"onPause\",\n onResume: \"onResume\",\n onCountdownStart: \"onCountdownStart\",\n onCountdown: \"onCountDown\",\n onCountdownEnd: \"onCountdownEnd\",\n onShareSelected: \"onShareSelected\",\n};\n\nexport const TOTAL_RETRIES = 15;\nexport const ABORT_UPLOAD_RETRIES = 2;\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\n// Firefox refuses to start a MediaRecorder on a stream that has both audio and\n// video tracks unless the MIME string declares the audio codec too. Chromium\n// and Safari accept the video-only form and silently pick Opus/AAC. We keep\n// both variants and always prefer the codec-complete ones in\n// getSupportedMimeType so a single code path works across browsers.\nexport const MIME_TYPE = {\n mp4: \"video/mp4\",\n webmH264Opus: \"video/webm;codecs=h264,opus\",\n webmH264: \"video/webm;codecs=h264\",\n webmVp9Opus: \"video/webm;codecs=vp9,opus\",\n webmVp9: \"video/webm;codecs=vp9\",\n webmVp8Opus: \"video/webm;codecs=vp8,opus\",\n webmVp8: \"video/webm;codecs=vp8\",\n webm: \"video/webm\",\n};\n\nexport const START_RECORDING_SOUND =\n \"https://neeto-record-static-assets.s3.amazonaws.com/recording-start-sound-2.mp3\";\n\nexport const COUNTDOWN_TICK_SOUND =\n \"https://neeto-record-static-assets.s3.us-east-1.amazonaws.com/recording-tick-sound.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\nexport const MIC_NOT_WORKING_ALERT_TIME = 30;\nexport const MIC_NOT_WORKING_SILENCE_TIMEOUT =\n MIC_NOT_WORKING_ALERT_TIME * 1000;\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","COUNTDOWN_TIME","UPLOAD_EVENT","onComplete","onError","onProgress","UPLOAD_STATUS","uploading","completed","aborting","insufficient_data","error","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","FailedToStart","CreateRecordingError","InsufficientData","SCREEN_RECORDER_EVENT","onStart","onStop","onDiscard","onDataAvailable","onDiscardDuringCountdown","onRestart","onReUpload","onReUploadFromDisk","onPause","onResume","onCountdownStart","onCountdown","onCountdownEnd","onShareSelected","TOTAL_RETRIES","ABORT_UPLOAD_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","webmH264Opus","webmH264","webmVp9Opus","webmVp9","webmVp8Opus","webmVp8","webm","START_RECORDING_SOUND","COUNTDOWN_TICK_SOUND","STOP_RECORDING_DUE_TO_LIMIT_REACHED_SOUND","RECORDING_LIMIT_REACHED_WARNING_SOUND","RECORDING_TIME_LIMIT_FREE_PLAN","RECORDING_TIME_LIMIT_PRO_PLAN","MIC_NOT_WORKING_ALERT_TIME","MIC_NOT_WORKING_SILENCE_TIMEOUT"],"mappings":"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","x_google_ignoreList":[0]}
package/core.js CHANGED
@@ -549,16 +549,92 @@ function v4(options, buf, offset) {
549
549
  return unsafeStringify(rnds);
550
550
  }
551
551
 
552
- var create$2 = function create(_ref) {
553
- var recordingId = _ref.recordingId,
554
- payload = _ref.payload;
555
- return axios.post("/api/v1/recordings/".concat(recordingId, "/abort_upload"), {
556
- abortUpload: payload
557
- });
552
+ var ONE_SECOND_IN_MILLISECONDS = 1000;
553
+ var HALF_A_SECOND_IN_MILLISECONDS = 500;
554
+ var TWO_HUNDRED_MILLISECONDS = 200;
555
+ var ONE_MINUTE_IN_MILLISECONDS = 60 * ONE_SECOND_IN_MILLISECONDS;
556
+ var ONE_SECOND = 1;
557
+ var SCREEN_RECORDER_STATUS = {
558
+ media_aborted: "media_aborted",
559
+ permission_denied: "permission_denied",
560
+ no_specified_media_found: "no_specified_media_found",
561
+ media_in_use: "media_in_use",
562
+ invalid_media_constraints: "invalid_media_constraints",
563
+ no_chrome_flags_set: "no_chrome_flags_set",
564
+ recorder_error: "recorder_error",
565
+ idle: "idle",
566
+ acquiring_media: "acquiring_media",
567
+ media_acquired: "media_acquired",
568
+ restarting: "restarting",
569
+ recording: "recording",
570
+ stopping: "stopping",
571
+ stopped: "stopped",
572
+ paused: "paused"
558
573
  };
559
- var abortUploadApi = {
560
- create: create$2
574
+ var SCREEN_RECORDER_ERROR = {
575
+ MicPermissionDenied: "mic_permission_denied",
576
+ AbortError: "media_aborted",
577
+ NotAllowedError: "permission_denied",
578
+ NotFoundError: "no_specified_media_found",
579
+ NotReadableError: "media_in_use",
580
+ OverconstrainedError: "invalid_media_constraints",
581
+ TypeError: "no_chrome_flags_set",
582
+ None: "",
583
+ NoRecorder: "recorder_error",
584
+ UnSupportedBrowser: "unsupported_browser",
585
+ FailedToStart: "failed_to_start",
586
+ CreateRecordingError: "create_recording_error",
587
+ InsufficientData: "insufficient_data"
561
588
  };
589
+ var SCREEN_RECORDER_EVENT = {
590
+ onStart: "onStart",
591
+ onStop: "onStop",
592
+ onDiscard: "onDiscard",
593
+ onDataAvailable: "onDataAvailable",
594
+ onDiscardDuringCountdown: "onDiscardDuringCountdown",
595
+ onRestart: "onRestart",
596
+ onReUpload: "onReUpload",
597
+ onReUploadFromDisk: "onReUploadFromDisk",
598
+ onPause: "onPause",
599
+ onResume: "onResume",
600
+ onCountdownStart: "onCountdownStart",
601
+ onCountdown: "onCountDown",
602
+ onCountdownEnd: "onCountdownEnd",
603
+ onShareSelected: "onShareSelected"
604
+ };
605
+ var TOTAL_RETRIES = 15;
606
+ var ABORT_UPLOAD_RETRIES = 2;
607
+ var INITIAL_RETRY_DELAY = 4000;
608
+ var MAX_RETRY_DELAY = 16000;
609
+ var DEFAULT_RETRY_CONFIG = {
610
+ retries: TOTAL_RETRIES,
611
+ retryDelay: INITIAL_RETRY_DELAY,
612
+ retryableStatuses: []
613
+ };
614
+ var HAS_CHROME_NAMESPACE = (typeof chrome === "undefined" ? "undefined" : _typeof$1(chrome)) === "object";
615
+ var IS_EXTENSION = HAS_CHROME_NAMESPACE && isNotNil(chrome.extension);
616
+ var IS_SAFARI = platform.name === "Safari";
617
+
618
+ // Firefox refuses to start a MediaRecorder on a stream that has both audio and
619
+ // video tracks unless the MIME string declares the audio codec too. Chromium
620
+ // and Safari accept the video-only form and silently pick Opus/AAC. We keep
621
+ // both variants and always prefer the codec-complete ones in
622
+ // getSupportedMimeType so a single code path works across browsers.
623
+ var MIME_TYPE = {
624
+ mp4: "video/mp4",
625
+ webmH264Opus: "video/webm;codecs=h264,opus",
626
+ webmH264: "video/webm;codecs=h264",
627
+ webmVp9Opus: "video/webm;codecs=vp9,opus",
628
+ webmVp9: "video/webm;codecs=vp9",
629
+ webmVp8Opus: "video/webm;codecs=vp8,opus",
630
+ webmVp8: "video/webm;codecs=vp8",
631
+ webm: "video/webm"
632
+ };
633
+ var START_RECORDING_SOUND = "https://neeto-record-static-assets.s3.amazonaws.com/recording-start-sound-2.mp3";
634
+ var COUNTDOWN_TICK_SOUND = "https://neeto-record-static-assets.s3.us-east-1.amazonaws.com/recording-tick-sound.mp3";
635
+ var STOP_RECORDING_DUE_TO_LIMIT_REACHED_SOUND = "https://neeto-record-static-assets.s3.amazonaws.com/recording-end-sound.mp3";
636
+ var RECORDING_LIMIT_REACHED_WARNING_SOUND = "https://neeto-record-static-assets.s3.amazonaws.com/recording-warning-sound.mp3";
637
+ var RECORDING_TIME_LIMIT_FREE_PLAN = 15 * ONE_MINUTE_IN_MILLISECONDS; // 15 minutes
562
638
 
563
639
  function _setPrototypeOf(t, e) {
564
640
  return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {
@@ -644,92 +720,6 @@ function _wrapNativeSuper(t) {
644
720
  }, _wrapNativeSuper(t);
645
721
  }
646
722
 
647
- var ONE_SECOND_IN_MILLISECONDS = 1000;
648
- var HALF_A_SECOND_IN_MILLISECONDS = 500;
649
- var TWO_HUNDRED_MILLISECONDS = 200;
650
- var ONE_MINUTE_IN_MILLISECONDS = 60 * ONE_SECOND_IN_MILLISECONDS;
651
- var ONE_SECOND = 1;
652
- var SCREEN_RECORDER_STATUS = {
653
- media_aborted: "media_aborted",
654
- permission_denied: "permission_denied",
655
- no_specified_media_found: "no_specified_media_found",
656
- media_in_use: "media_in_use",
657
- invalid_media_constraints: "invalid_media_constraints",
658
- no_chrome_flags_set: "no_chrome_flags_set",
659
- recorder_error: "recorder_error",
660
- idle: "idle",
661
- acquiring_media: "acquiring_media",
662
- media_acquired: "media_acquired",
663
- restarting: "restarting",
664
- recording: "recording",
665
- stopping: "stopping",
666
- stopped: "stopped",
667
- paused: "paused"
668
- };
669
- var SCREEN_RECORDER_ERROR = {
670
- MicPermissionDenied: "mic_permission_denied",
671
- AbortError: "media_aborted",
672
- NotAllowedError: "permission_denied",
673
- NotFoundError: "no_specified_media_found",
674
- NotReadableError: "media_in_use",
675
- OverconstrainedError: "invalid_media_constraints",
676
- TypeError: "no_chrome_flags_set",
677
- None: "",
678
- NoRecorder: "recorder_error",
679
- UnSupportedBrowser: "unsupported_browser",
680
- FailedToStart: "failed_to_start",
681
- CreateRecordingError: "create_recording_error",
682
- InsufficientData: "insufficient_data"
683
- };
684
- var SCREEN_RECORDER_EVENT = {
685
- onStart: "onStart",
686
- onStop: "onStop",
687
- onDiscard: "onDiscard",
688
- onDataAvailable: "onDataAvailable",
689
- onDiscardDuringCountdown: "onDiscardDuringCountdown",
690
- onRestart: "onRestart",
691
- onReUpload: "onReUpload",
692
- onReUploadFromDisk: "onReUploadFromDisk",
693
- onPause: "onPause",
694
- onResume: "onResume",
695
- onCountdownStart: "onCountdownStart",
696
- onCountdown: "onCountDown",
697
- onCountdownEnd: "onCountdownEnd",
698
- onShareSelected: "onShareSelected"
699
- };
700
- var TOTAL_RETRIES = 15;
701
- var INITIAL_RETRY_DELAY = 4000;
702
- var MAX_RETRY_DELAY = 16000;
703
- var DEFAULT_RETRY_CONFIG = {
704
- retries: TOTAL_RETRIES,
705
- retryDelay: INITIAL_RETRY_DELAY,
706
- retryableStatuses: []
707
- };
708
- var HAS_CHROME_NAMESPACE = (typeof chrome === "undefined" ? "undefined" : _typeof$1(chrome)) === "object";
709
- var IS_EXTENSION = HAS_CHROME_NAMESPACE && isNotNil(chrome.extension);
710
- var IS_SAFARI = platform.name === "Safari";
711
-
712
- // Firefox refuses to start a MediaRecorder on a stream that has both audio and
713
- // video tracks unless the MIME string declares the audio codec too. Chromium
714
- // and Safari accept the video-only form and silently pick Opus/AAC. We keep
715
- // both variants and always prefer the codec-complete ones in
716
- // getSupportedMimeType so a single code path works across browsers.
717
- var MIME_TYPE = {
718
- mp4: "video/mp4",
719
- webmH264Opus: "video/webm;codecs=h264,opus",
720
- webmH264: "video/webm;codecs=h264",
721
- webmVp9Opus: "video/webm;codecs=vp9,opus",
722
- webmVp9: "video/webm;codecs=vp9",
723
- webmVp8Opus: "video/webm;codecs=vp8,opus",
724
- webmVp8: "video/webm;codecs=vp8",
725
- webm: "video/webm"
726
- };
727
- var START_RECORDING_SOUND = "https://neeto-record-static-assets.s3.amazonaws.com/recording-start-sound-2.mp3";
728
- var COUNTDOWN_TICK_SOUND = "https://neeto-record-static-assets.s3.us-east-1.amazonaws.com/recording-tick-sound.mp3";
729
- var STOP_RECORDING_DUE_TO_LIMIT_REACHED_SOUND = "https://neeto-record-static-assets.s3.amazonaws.com/recording-end-sound.mp3";
730
- var RECORDING_LIMIT_REACHED_WARNING_SOUND = "https://neeto-record-static-assets.s3.amazonaws.com/recording-warning-sound.mp3";
731
- var RECORDING_TIME_LIMIT_FREE_PLAN = 15 * ONE_MINUTE_IN_MILLISECONDS; // 15 minutes
732
-
733
723
  var sleep = function sleep(delay) {
734
724
  return new Promise(function (resolve) {
735
725
  return setTimeout(resolve, delay);
@@ -810,6 +800,20 @@ var buildRetryableApi = function buildRetryableApi(apiConnector) {
810
800
  }();
811
801
  };
812
802
 
803
+ var create$2 = function create(_ref) {
804
+ var recordingId = _ref.recordingId,
805
+ payload = _ref.payload;
806
+ return axios.post("/api/v1/recordings/".concat(recordingId, "/abort_upload"), {
807
+ abortUpload: payload
808
+ });
809
+ };
810
+ var retryableCreate$2 = buildRetryableApi(create$2, {
811
+ retries: ABORT_UPLOAD_RETRIES
812
+ });
813
+ var abortUploadApi = {
814
+ create: retryableCreate$2
815
+ };
816
+
813
817
  var create$1 = function create(_ref) {
814
818
  var recordingId = _ref.recordingId,
815
819
  payload = _ref.payload,
@@ -1320,7 +1324,8 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
1320
1324
  return Promise.resolve(_classPrivateFieldGet(_this, _completeUploadPromise))["catch"](function () {});
1321
1325
  case 16:
1322
1326
  _classPrivateFieldGet(_this, _abortController).abort();
1323
- _context2.next = 19;
1327
+ _context2.prev = 17;
1328
+ _context2.next = 20;
1324
1329
  return abortUploadApi.create({
1325
1330
  recordingId: recordingId,
1326
1331
  payload: {
@@ -1329,29 +1334,41 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
1329
1334
  logs: sessionLogs
1330
1335
  }
1331
1336
  });
1332
- case 19:
1337
+ case 20:
1333
1338
  _classPrivateFieldGet(_this, _logger$1).info("abortUpload -> success", {
1334
1339
  durationMs: Date.now() - abortStartedAt
1335
1340
  });
1341
+ _context2.next = 26;
1342
+ break;
1343
+ case 23:
1344
+ _context2.prev = 23;
1345
+ _context2.t0 = _context2["catch"](17);
1346
+ // After retries are exhausted, proceed with local cleanup so the
1347
+ // caller can navigate away / close tab. The server-side upload
1348
+ // will be cleaned up by S3 lifecycle rules.
1349
+ _classPrivateFieldGet(_this, _logger$1).error("abortUpload -> mark as discarded failed", _objectSpread$2(_objectSpread$2({}, _classPrivateFieldGet(_this, _serializeUploadError).call(_this, _context2.t0)), {}, {
1350
+ durationMs: Date.now() - abortStartedAt
1351
+ }));
1352
+ case 26:
1336
1353
  _classPrivateFieldGet(_this, _fireCallbacks$1).call(_this, UPLOAD_EVENT.onAbort);
1337
1354
  _classPrivateFieldSet(_this, _unUploadedChunks, []);
1338
1355
  _classPrivateFieldSet(_this, _partNumber, 1);
1339
1356
  _classPrivateFieldSet(_this, _s3PartUploadPromises, []);
1340
1357
  _classPrivateFieldSet(_this, _status2, "");
1341
1358
  _classPrivateFieldSet(_this, _abortController, null);
1342
- _context2.next = 31;
1359
+ _context2.next = 37;
1343
1360
  break;
1344
- case 28:
1345
- _context2.prev = 28;
1346
- _context2.t0 = _context2["catch"](3);
1347
- _classPrivateFieldGet(_this, _logger$1).error("abortUpload -> failed", _objectSpread$2(_objectSpread$2({}, _classPrivateFieldGet(_this, _serializeUploadError).call(_this, _context2.t0)), {}, {
1361
+ case 34:
1362
+ _context2.prev = 34;
1363
+ _context2.t1 = _context2["catch"](3);
1364
+ _classPrivateFieldGet(_this, _logger$1).error("abortUpload -> failed", _objectSpread$2(_objectSpread$2({}, _classPrivateFieldGet(_this, _serializeUploadError).call(_this, _context2.t1)), {}, {
1348
1365
  durationMs: Date.now() - abortStartedAt
1349
1366
  }));
1350
- case 31:
1367
+ case 37:
1351
1368
  case "end":
1352
1369
  return _context2.stop();
1353
1370
  }
1354
- }, _callee2, null, [[3, 28]]);
1371
+ }, _callee2, null, [[3, 34], [17, 23]]);
1355
1372
  })));
1356
1373
  _defineProperty(this, "resetState", function () {
1357
1374
  _classPrivateFieldSet(_this, _recordingId, "");
@@ -1719,6 +1736,7 @@ var _fireCallbacks = /*#__PURE__*/new WeakMap();
1719
1736
  var _onRecordingStart = /*#__PURE__*/new WeakMap();
1720
1737
  var _onRecordingActive = /*#__PURE__*/new WeakMap();
1721
1738
  var _onRecordingStop = /*#__PURE__*/new WeakMap();
1739
+ var _queryMicPermissionState = /*#__PURE__*/new WeakMap();
1722
1740
  var _serializeError = /*#__PURE__*/new WeakMap();
1723
1741
  var _summarizeStream = /*#__PURE__*/new WeakMap();
1724
1742
  var _summarizeRecorderState = /*#__PURE__*/new WeakMap();
@@ -2171,7 +2189,7 @@ var ScreenRecorder = /*#__PURE__*/function () {
2171
2189
  writable: true,
2172
2190
  value: function () {
2173
2191
  var _value = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
2174
- var acquireStartedAt, stream, constraints, displayMediaStartedAt, audioConfig, micStartedAt, audioStream, workletUrl, workletStartedAt, audioContext, audioStreamSource, destinationStream, noiseSuppressorNode, finalStream, _audioContext, desktopAudio, microphoneAudio, combinedAudio;
2192
+ var acquireStartedAt, micState, stream, constraints, displayMediaStartedAt, audioConfig, micStartedAt, audioStream, workletUrl, workletStartedAt, audioContext, audioStreamSource, destinationStream, noiseSuppressorNode, finalStream, _audioContext, desktopAudio, microphoneAudio, combinedAudio;
2175
2193
  return _regeneratorRuntime.wrap(function _callee2$(_context2) {
2176
2194
  while (1) switch (_context2.prev = _context2.next) {
2177
2195
  case 0:
@@ -2185,37 +2203,58 @@ var ScreenRecorder = /*#__PURE__*/function () {
2185
2203
  _classPrivateFieldGet(_this, _store).setState({
2186
2204
  status: SCREEN_RECORDER_STATUS.acquiring_media
2187
2205
  });
2188
- _context2.prev = 3;
2206
+ if (!(_classPrivateFieldGet(_this, _audio) && !_classPrivateFieldGet(_this, _videoStream))) {
2207
+ _context2.next = 11;
2208
+ break;
2209
+ }
2210
+ _context2.next = 6;
2211
+ return _classPrivateFieldGet(_this, _queryMicPermissionState).call(_this);
2212
+ case 6:
2213
+ micState = _context2.sent;
2214
+ if (!(micState === "denied")) {
2215
+ _context2.next = 11;
2216
+ break;
2217
+ }
2218
+ _classPrivateFieldGet(_this, _logger).warn("acquireMediaStream -> mic permission denied, skipping screen prompt", {
2219
+ micState: micState
2220
+ });
2221
+ _classPrivateFieldGet(_this, _store).setState({
2222
+ error: SCREEN_RECORDER_ERROR.MicPermissionDenied,
2223
+ status: SCREEN_RECORDER_STATUS.idle
2224
+ });
2225
+ return _context2.abrupt("return");
2226
+ case 11:
2227
+ _context2.prev = 11;
2189
2228
  if (!_classPrivateFieldGet(_this, _videoStream)) {
2190
- _context2.next = 9;
2229
+ _context2.next = 17;
2191
2230
  break;
2192
2231
  }
2193
2232
  _classPrivateFieldGet(_this, _logger).info("acquireMediaStream -> using injected videoStream", _classPrivateFieldGet(_this, _summarizeStream).call(_this, _classPrivateFieldGet(_this, _videoStream)));
2194
2233
  stream = _classPrivateFieldGet(_this, _videoStream);
2195
- _context2.next = 17;
2234
+ _context2.next = 25;
2196
2235
  break;
2197
- case 9:
2236
+ case 17:
2198
2237
  constraints = {
2199
2238
  video: _classPrivateFieldGet(_this, _video),
2200
2239
  audio: _classPrivateFieldGet(_this, _recordSystemAudio)
2201
2240
  };
2202
2241
  _classPrivateFieldGet(_this, _logger).info("acquireMediaStream -> getDisplayMedia constraints", constraints);
2203
2242
  displayMediaStartedAt = Date.now();
2204
- _context2.next = 14;
2243
+ _context2.next = 22;
2205
2244
  return window.navigator.mediaDevices.getDisplayMedia(constraints);
2206
- case 14:
2245
+ case 22:
2207
2246
  stream = _context2.sent;
2208
2247
  _classPrivateFieldGet(_this, _logger).info("acquireMediaStream -> getDisplayMedia resolved", {
2209
2248
  durationMs: Date.now() - displayMediaStartedAt,
2210
2249
  stream: _classPrivateFieldGet(_this, _summarizeStream).call(_this, stream)
2211
2250
  });
2212
2251
  _classPrivateFieldGet(_this, _fireCallbacks).call(_this, SCREEN_RECORDER_EVENT.onShareSelected);
2213
- case 17:
2252
+ case 25:
2214
2253
  if (!_classPrivateFieldGet(_this, _audio)) {
2215
- _context2.next = 57;
2254
+ _context2.next = 68;
2216
2255
  break;
2217
2256
  }
2218
- _context2.prev = 18;
2257
+ _context2.prev = 26;
2219
2258
  audioConfig = {
2220
2259
  audio: _objectSpread(_objectSpread({
2221
2260
  echoCancellation: false
@@ -2230,9 +2269,9 @@ var ScreenRecorder = /*#__PURE__*/function () {
2230
2269
  _context2.t0 = _classPrivateFieldSet;
2231
2270
  _context2.t1 = _this;
2232
2271
  _context2.t2 = _micAudioStream;
2233
- _context2.next = 27;
2272
+ _context2.next = 35;
2234
2273
  return window.navigator.mediaDevices.getUserMedia(audioConfig);
2235
- case 27:
2274
+ case 35:
2236
2275
  _context2.t3 = _context2.sent;
2237
2276
  (0, _context2.t0)(_context2.t1, _context2.t2, _context2.t3);
2238
2277
  _classPrivateFieldGet(_this, _logger).info("acquireMediaStream -> mic acquired", {
@@ -2242,10 +2281,10 @@ var ScreenRecorder = /*#__PURE__*/function () {
2242
2281
  audioStream = addGainNode(_classPrivateFieldGet(_this, _micAudioStream), 1.75); // Increase volume by 50%
2243
2282
  _classPrivateFieldSet(_this, _audioStream, audioStream);
2244
2283
  if (!_classPrivateFieldGet(_this, _enableNoiseCancellation)) {
2245
- _context2.next = 52;
2284
+ _context2.next = 60;
2246
2285
  break;
2247
2286
  }
2248
- _context2.prev = 33;
2287
+ _context2.prev = 41;
2249
2288
  workletUrl = IS_EXTENSION ?
2250
2289
  // eslint-disable-next-line no-undef
2251
2290
  chrome.runtime.getURL("public/NoiseSuppressorWorklet.js") : "NoiseSuppressorWorklet.js";
@@ -2254,9 +2293,9 @@ var ScreenRecorder = /*#__PURE__*/function () {
2254
2293
  });
2255
2294
  workletStartedAt = Date.now();
2256
2295
  audioContext = new AudioContext();
2257
- _context2.next = 40;
2296
+ _context2.next = 48;
2258
2297
  return audioContext.audioWorklet.addModule(workletUrl);
2259
- case 40:
2298
+ case 48:
2260
2299
  audioStreamSource = audioContext.createMediaStreamSource(audioStream);
2261
2300
  destinationStream = audioContext.createMediaStreamDestination();
2262
2301
  noiseSuppressorNode = new AudioWorkletNode(audioContext, "nn-suppressor-processor");
@@ -2266,26 +2305,38 @@ var ScreenRecorder = /*#__PURE__*/function () {
2266
2305
  _classPrivateFieldGet(_this, _logger).info("acquireMediaStream -> noise suppressor wired up", {
2267
2306
  durationMs: Date.now() - workletStartedAt
2268
2307
  });
2269
- _context2.next = 52;
2308
+ _context2.next = 60;
2270
2309
  break;
2271
- case 49:
2272
- _context2.prev = 49;
2273
- _context2.t4 = _context2["catch"](33);
2310
+ case 57:
2311
+ _context2.prev = 57;
2312
+ _context2.t4 = _context2["catch"](41);
2274
2313
  _classPrivateFieldGet(_this, _logger).error("acquireMediaStream -> failed to load audio worklet", _classPrivateFieldGet(_this, _serializeError).call(_this, _context2.t4));
2275
- case 52:
2276
- _context2.next = 57;
2314
+ case 60:
2315
+ _context2.next = 68;
2277
2316
  break;
2278
- case 54:
2279
- _context2.prev = 54;
2280
- _context2.t5 = _context2["catch"](18);
2317
+ case 62:
2318
+ _context2.prev = 62;
2319
+ _context2.t5 = _context2["catch"](26);
2281
2320
  // Mic access can fail independently of screen capture (OS-level
2282
- // block, no device, deviceId mismatch). Screen sharing already
2283
- // succeeded, so fall back to a video-only recording instead of
2284
- // surfacing the failure as a screen permission error.
2285
- _classPrivateFieldGet(_this, _logger).warn("acquireMediaStream -> mic unavailable, falling back to video-only", _classPrivateFieldGet(_this, _serializeError).call(_this, _context2.t5), {
2321
+ // block, no device, deviceId mismatch). Stop the screen stream and
2322
+ // surface a mic-only error so the user sees the proper callout
2323
+ // ("doesn't have access to your microphone" with Grant / I don't
2324
+ // need audio actions) instead of being misrouted to the screen
2325
+ // permission denied flow.
2326
+ _classPrivateFieldGet(_this, _logger).warn("acquireMediaStream -> mic unavailable", _classPrivateFieldGet(_this, _serializeError).call(_this, _context2.t5), {
2286
2327
  audioConfigRequested: _classPrivateFieldGet(_this, _audio)
2287
2328
  });
2288
- case 57:
2329
+ if (!_classPrivateFieldGet(_this, _videoStream)) {
2330
+ stream.getTracks().forEach(function (track) {
2331
+ return track.stop();
2332
+ });
2333
+ }
2334
+ _classPrivateFieldGet(_this, _store).setState({
2335
+ error: SCREEN_RECORDER_ERROR.MicPermissionDenied,
2336
+ status: SCREEN_RECORDER_STATUS.idle
2337
+ });
2338
+ return _context2.abrupt("return");
2339
+ case 68:
2289
2340
  // Event triggered when the user clicks on the stop sharing overlay button
2290
2341
  stream.getVideoTracks()[0].addEventListener("ended", function () {
2291
2342
  var _classPrivateFieldGet15;
@@ -2335,11 +2386,11 @@ var ScreenRecorder = /*#__PURE__*/function () {
2335
2386
  totalDurationMs: Date.now() - acquireStartedAt,
2336
2387
  finalStream: _classPrivateFieldGet(_this, _summarizeStream).call(_this, _classPrivateFieldGet(_this, _mediaStream))
2337
2388
  });
2338
- _context2.next = 71;
2389
+ _context2.next = 82;
2339
2390
  break;
2340
- case 67:
2341
- _context2.prev = 67;
2342
- _context2.t6 = _context2["catch"](3);
2391
+ case 78:
2392
+ _context2.prev = 78;
2393
+ _context2.t6 = _context2["catch"](11);
2343
2394
  _classPrivateFieldGet(_this, _logger).error("acquireMediaStream -> error", _classPrivateFieldGet(_this, _serializeError).call(_this, _context2.t6), {
2344
2395
  totalDurationMs: Date.now() - acquireStartedAt,
2345
2396
  hasAudio: Boolean(_classPrivateFieldGet(_this, _audio)),
@@ -2362,11 +2413,11 @@ var ScreenRecorder = /*#__PURE__*/function () {
2362
2413
  status: SCREEN_RECORDER_STATUS.idle
2363
2414
  });
2364
2415
  }
2365
- case 71:
2416
+ case 82:
2366
2417
  case "end":
2367
2418
  return _context2.stop();
2368
2419
  }
2369
- }, _callee2, null, [[3, 67], [18, 54], [33, 49]]);
2420
+ }, _callee2, null, [[11, 78], [26, 62], [41, 57]]);
2370
2421
  }));
2371
2422
  function value() {
2372
2423
  return _value.apply(this, arguments);
@@ -2445,6 +2496,41 @@ var ScreenRecorder = /*#__PURE__*/function () {
2445
2496
  }
2446
2497
  }
2447
2498
  });
2499
+ _classPrivateFieldInitSpec(this, _queryMicPermissionState, {
2500
+ writable: true,
2501
+ value: function () {
2502
+ var _value2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
2503
+ var result;
2504
+ return _regeneratorRuntime.wrap(function _callee3$(_context3) {
2505
+ while (1) switch (_context3.prev = _context3.next) {
2506
+ case 0:
2507
+ _context3.prev = 0;
2508
+ _context3.next = 3;
2509
+ return window.navigator.permissions.query({
2510
+ name: "microphone"
2511
+ });
2512
+ case 3:
2513
+ result = _context3.sent;
2514
+ return _context3.abrupt("return", result.state);
2515
+ case 7:
2516
+ _context3.prev = 7;
2517
+ _context3.t0 = _context3["catch"](0);
2518
+ // Permissions API or the "microphone" descriptor is unsupported
2519
+ // (e.g. Safari). Fall through to the live getUserMedia attempt.
2520
+ _classPrivateFieldGet(_this, _logger).info("queryMicPermissionState -> unsupported", _classPrivateFieldGet(_this, _serializeError).call(_this, _context3.t0));
2521
+ return _context3.abrupt("return", "prompt");
2522
+ case 11:
2523
+ case "end":
2524
+ return _context3.stop();
2525
+ }
2526
+ }, _callee3, null, [[0, 7]]);
2527
+ }));
2528
+ function value() {
2529
+ return _value2.apply(this, arguments);
2530
+ }
2531
+ return value;
2532
+ }()
2533
+ });
2448
2534
  _classPrivateFieldInitSpec(this, _serializeError, {
2449
2535
  writable: true,
2450
2536
  value: function value(error) {