@bigbinary/neeto-media-recorder 2.7.35 → 2.7.37

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
@@ -78,6 +78,7 @@ var SCREEN_RECORDER_EVENT = {
78
78
  onCountdownStart: "onCountdownStart",
79
79
  onCountdown: "onCountDown",
80
80
  onCountdownEnd: "onCountdownEnd",
81
+ onCountdownSkip: "onCountdownSkip",
81
82
  onShareSelected: "onShareSelected"
82
83
  };
83
84
  var TOTAL_RETRIES = 15;
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 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":";;;AAAA,SAAS,OAAO,CAAC,CAAC,EAAE;AACpB,EAAE,yBAAyB,CAAC;AAC5B;AACA,EAAE,OAAO,OAAO,GAAG,UAAU,IAAI,OAAO,MAAM,IAAI,QAAQ,IAAI,OAAO,MAAM,CAAC,QAAQ,GAAG,UAAU,CAAC,EAAE;AACpG,IAAI,OAAO,OAAO,CAAC,CAAC;AACpB,GAAG,GAAG,UAAU,CAAC,EAAE;AACnB,IAAI,OAAO,CAAC,IAAI,UAAU,IAAI,OAAO,MAAM,IAAI,CAAC,CAAC,WAAW,KAAK,MAAM,IAAI,CAAC,KAAK,MAAM,CAAC,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC,CAAC;AACxH,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAChB;;ACLA;IACaA,gBAAgB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAC;AAEnC,IAAMC,0BAA0B,GAAG,KAAI;AACvC,IAAMC,6BAA6B,GAAG,IAAG;AACzC,IAAMC,wBAAwB,GAAG,IAAG;AAE9BC,IAAAA,0BAA0B,GAAG,EAAE,GAAGH,2BAA0B;AAC5DI,IAAAA,wBAAwB,GAAG,EAAE,GAAGD,2BAA0B;AAEhE,IAAME,UAAU,GAAG,EAAC;AAEpB,IAAMC,cAAc,GAAG,EAAC;AAExB,IAAMC,YAAY,GAAG;AAC1BC,EAAAA,UAAU,EAAE,YAAY;AACxBC,EAAAA,OAAO,EAAE,SAAS;AAClBC,EAAAA,UAAU,EAAE,YAAA;AACd,EAAC;AAEM,IAAMC,aAAa,GAAG;AAC3BC,EAAAA,SAAS,EAAE,WAAW;AACtBC,EAAAA,SAAS,EAAE,WAAW;AACtBC,EAAAA,QAAQ,EAAE,UAAU;AACpBC,EAAAA,iBAAiB,EAAE,mBAAmB;AACtCC,EAAAA,KAAK,EAAE,OAAA;AACT,EAAC;AAEM,IAAMC,sBAAsB,GAAG;AACpCC,EAAAA,aAAa,EAAE,eAAe;AAC9BC,EAAAA,iBAAiB,EAAE,mBAAmB;AACtCC,EAAAA,wBAAwB,EAAE,0BAA0B;AACpDC,EAAAA,YAAY,EAAE,cAAc;AAC5BC,EAAAA,yBAAyB,EAAE,2BAA2B;AACtDC,EAAAA,mBAAmB,EAAE,qBAAqB;AAC1CC,EAAAA,cAAc,EAAE,gBAAgB;AAChCC,EAAAA,IAAI,EAAE,MAAM;AACZC,EAAAA,eAAe,EAAE,iBAAiB;AAClCC,EAAAA,cAAc,EAAE,gBAAgB;AAChCC,EAAAA,UAAU,EAAE,YAAY;AACxBC,EAAAA,SAAS,EAAE,WAAW;AACtBC,EAAAA,QAAQ,EAAE,UAAU;AACpBC,EAAAA,OAAO,EAAE,SAAS;AAClBC,EAAAA,MAAM,EAAE,QAAA;AACV,EAAC;AAEM,IAAMC,qBAAqB,GAAG;AACnCC,EAAAA,mBAAmB,EAAE,uBAAuB;AAC5CC,EAAAA,UAAU,EAAE,eAAe;AAC3BC,EAAAA,eAAe,EAAE,mBAAmB;AACpCC,EAAAA,aAAa,EAAE,0BAA0B;AACzCC,EAAAA,gBAAgB,EAAE,cAAc;AAChCC,EAAAA,oBAAoB,EAAE,2BAA2B;AACjDC,EAAAA,SAAS,EAAE,qBAAqB;AAChCC,EAAAA,IAAI,EAAE,EAAE;AACRC,EAAAA,UAAU,EAAE,gBAAgB;AAC5BC,EAAAA,kBAAkB,EAAE,qBAAqB;AACzCC,EAAAA,aAAa,EAAE,iBAAiB;AAChCC,EAAAA,oBAAoB,EAAE,wBAAwB;AAC9CC,EAAAA,gBAAgB,EAAE,mBAAA;AACpB,EAAC;AAEM,IAAMC,qBAAqB,GAAG;AACnCC,EAAAA,OAAO,EAAE,SAAS;AAClBC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,SAAS,EAAE,WAAW;AACtBC,EAAAA,eAAe,EAAE,iBAAiB;AAClCC,EAAAA,wBAAwB,EAAE,0BAA0B;AACpDC,EAAAA,SAAS,EAAE,WAAW;AACtBC,EAAAA,UAAU,EAAE,YAAY;AACxBC,EAAAA,kBAAkB,EAAE,oBAAoB;AACxCC,EAAAA,OAAO,EAAE,SAAS;AAClBC,EAAAA,QAAQ,EAAE,UAAU;AACpBC,EAAAA,gBAAgB,EAAE,kBAAkB;AACpCC,EAAAA,WAAW,EAAE,aAAa;AAC1BC,EAAAA,cAAc,EAAE,gBAAgB;AAChCC,EAAAA,eAAe,EAAE,iBAAA;AACnB,EAAC;AAEM,IAAMC,aAAa,GAAG,GAAE;AACxB,IAAMC,oBAAoB,GAAG,EAAC;AAC9B,IAAMC,mBAAmB,GAAG,KAAI;AAChC,IAAMC,eAAe,GAAG,MAAK;AAE7B,IAAMC,oBAAoB,GAAG;AAClCC,EAAAA,OAAO,EAAEL,aAAa;AACtBM,EAAAA,UAAU,EAAEJ,mBAAmB;AAC/BK,EAAAA,iBAAiB,EAAE,EAAA;AACrB,EAAC;;AAED;AACA;AACO,IAAMC,aAAa,GAAG,gBAAe;AACrC,IAAMC,aAAa,GAAG,eAAc;AAEpC,IAAMC,oBAAoB,GAAG,CAAOC,OAAAA,MAAM,iCAAAC,OAAA,CAAND,MAAM,CAAA,MAAK,SAAQ;AAEvD,IAAME,YAAY,GAAGH,oBAAoB,IAAII,QAAQ,CAACH,MAAM,CAACI,SAAS,EAAC;IAEjEC,SAAS,GAAGC,QAAQ,CAACC,IAAI,KAAK,SAAQ;AAEtCC,IAAAA,mBAAmB,GAAGH,SAAS,IAAIH,aAAY;AAErD,IAAMO,oBAAoB,GAC/B,mDAAkD;;AAEpD;AACA;AACA;AACA;AACA;AACO,IAAMC,SAAS,GAAG;AACvBC,EAAAA,GAAG,EAAE,WAAW;AAChBC,EAAAA,YAAY,EAAE,6BAA6B;AAC3CC,EAAAA,QAAQ,EAAE,wBAAwB;AAClCC,EAAAA,WAAW,EAAE,4BAA4B;AACzCC,EAAAA,OAAO,EAAE,uBAAuB;AAChCC,EAAAA,WAAW,EAAE,4BAA4B;AACzCC,EAAAA,OAAO,EAAE,uBAAuB;AAChCC,EAAAA,IAAI,EAAE,YAAA;AACR,EAAC;AAEM,IAAMC,qBAAqB,GAChC,kFAAiF;AAE5E,IAAMC,oBAAoB,GAC/B,yFAAwF;AAEnF,IAAMC,yCAAyC,GACpD,8EAA6E;AAExE,IAAMC,qCAAqC,GAChD,kFAAiF;IAEtEC,8BAA8B,GAAG,EAAE,GAAG7F,2BAA2B;IACjE8F,6BAA6B,GAAG,CAAC,GAAG7F,yBAAyB;;AAEnE,IAAM8F,0BAA0B,GAAG,GAAE;AAC/BC,IAAAA,+BAA+B,GAC1CD,0BAA0B,GAAG;;;;","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 onCountdownSkip: \"onCountdownSkip\",\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","onCountdownSkip","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
@@ -600,6 +600,7 @@ var SCREEN_RECORDER_EVENT = {
600
600
  onCountdownStart: "onCountdownStart",
601
601
  onCountdown: "onCountDown",
602
602
  onCountdownEnd: "onCountdownEnd",
603
+ onCountdownSkip: "onCountdownSkip",
603
604
  onShareSelected: "onShareSelected"
604
605
  };
605
606
  var TOTAL_RETRIES = 15;
@@ -745,54 +746,74 @@ var buildRetryableApi = function buildRetryableApi(apiConnector) {
745
746
  retryDelay = _ref$retryDelay === void 0 ? INITIAL_RETRY_DELAY : _ref$retryDelay;
746
747
  return /*#__PURE__*/function () {
747
748
  var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(apiConnectorArgs) {
748
- var _config$signal;
749
+ var _config$signal, _config$signal2;
749
750
  var _apiConnectorArgs$con, config, remainingAttempts, shouldCancelRetries, _error$config, _error$response, _error$response2;
750
751
  return _regeneratorRuntime.wrap(function _callee$(_context) {
751
752
  while (1) switch (_context.prev = _context.next) {
752
753
  case 0:
753
- _apiConnectorArgs$con = apiConnectorArgs.config, config = _apiConnectorArgs$con === void 0 ? null : _apiConnectorArgs$con;
754
+ _apiConnectorArgs$con = apiConnectorArgs.config, config = _apiConnectorArgs$con === void 0 ? null : _apiConnectorArgs$con; // If the signal is already aborted before we start, addEventListener("abort")
755
+ // will never fire — so we'd otherwise run the full retry/backoff schedule
756
+ // against an aborted request.
757
+ if (!(config !== null && config !== void 0 && (_config$signal = config.signal) !== null && _config$signal !== void 0 && _config$signal.aborted)) {
758
+ _context.next = 3;
759
+ break;
760
+ }
761
+ throw new RetryError("Request cancelled or request retries exhausted");
762
+ case 3:
754
763
  remainingAttempts = retries + 1;
755
764
  shouldCancelRetries = false;
756
- config === null || config === void 0 ? void 0 : (_config$signal = config.signal) === null || _config$signal === void 0 ? void 0 : _config$signal.addEventListener("abort", function () {
765
+ config === null || config === void 0 ? void 0 : (_config$signal2 = config.signal) === null || _config$signal2 === void 0 ? void 0 : _config$signal2.addEventListener("abort", function () {
757
766
  shouldCancelRetries = true;
758
767
  });
759
- case 4:
768
+ case 6:
760
769
  if (!(remainingAttempts-- && !shouldCancelRetries)) {
761
- _context.next = 24;
770
+ _context.next = 30;
762
771
  break;
763
772
  }
764
- _context.prev = 5;
765
- _context.next = 8;
773
+ _context.prev = 7;
774
+ _context.next = 10;
766
775
  return apiConnector(apiConnectorArgs);
767
- case 8:
776
+ case 10:
768
777
  return _context.abrupt("return", _context.sent);
769
- case 11:
770
- _context.prev = 11;
771
- _context.t0 = _context["catch"](5);
778
+ case 13:
779
+ _context.prev = 13;
780
+ _context.t0 = _context["catch"](7);
781
+ if (!axios.isCancel(_context.t0)) {
782
+ _context.next = 17;
783
+ break;
784
+ }
785
+ throw _context.t0;
786
+ case 17:
772
787
  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, (_error$response = _context.t0.response) === null || _error$response === void 0 ? void 0 : _error$response.status, remainingAttempts);
773
788
  if (!(((_error$response2 = _context.t0.response) === null || _error$response2 === void 0 ? void 0 : _error$response2.status) !== 401 && remainingAttempts > 0)) {
774
- _context.next = 21;
789
+ _context.next = 27;
775
790
  break;
776
791
  }
777
792
  logger.info("buildRetryableApi -> Failed to connect -> retry in:", retryDelay);
778
- _context.next = 18;
793
+ _context.next = 22;
779
794
  return sleep(retryDelay);
780
- case 18:
795
+ case 22:
781
796
  retryDelay = min(retryDelay * 2, MAX_RETRY_DELAY);
782
- _context.next = 22;
797
+ if (!shouldCancelRetries) {
798
+ _context.next = 25;
799
+ break;
800
+ }
801
+ throw _context.t0;
802
+ case 25:
803
+ _context.next = 28;
783
804
  break;
784
- case 21:
805
+ case 27:
785
806
  throw _context.t0;
786
- case 22:
787
- _context.next = 4;
807
+ case 28:
808
+ _context.next = 6;
788
809
  break;
789
- case 24:
810
+ case 30:
790
811
  throw new RetryError("Request cancelled or request retries exhausted");
791
- case 25:
812
+ case 31:
792
813
  case "end":
793
814
  return _context.stop();
794
815
  }
795
- }, _callee, null, [[5, 11]]);
816
+ }, _callee, null, [[7, 13]]);
796
817
  }));
797
818
  return function (_x) {
798
819
  return _ref2.apply(this, arguments);
@@ -1007,10 +1028,15 @@ var _serializeUploadError = /*#__PURE__*/new WeakMap();
1007
1028
  var _uploadChunkToS = /*#__PURE__*/new WeakMap();
1008
1029
  var _getCurrentUnUploadedBlob = /*#__PURE__*/new WeakMap();
1009
1030
  var _isRecordingNotSet = /*#__PURE__*/new WeakMap();
1031
+ var _isTerminalStatus = /*#__PURE__*/new WeakMap();
1010
1032
  var MultipartS3Uploader = /*#__PURE__*/function () {
1011
1033
  function MultipartS3Uploader() {
1012
1034
  var _this = this;
1013
1035
  _classCallCheck(this, MultipartS3Uploader);
1036
+ _classPrivateFieldInitSpec$1(this, _isTerminalStatus, {
1037
+ get: _get_isTerminalStatus,
1038
+ set: void 0
1039
+ });
1014
1040
  _classPrivateFieldInitSpec$1(this, _isRecordingNotSet, {
1015
1041
  get: _get_isRecordingNotSet,
1016
1042
  set: void 0
@@ -1097,6 +1123,19 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
1097
1123
  _classPrivateFieldSet(_this, _abortController, new AbortController());
1098
1124
  });
1099
1125
  _defineProperty(this, "push", function (data) {
1126
+ // Once an uploader has been aborted, any further chunks belong to a
1127
+ // recording that no longer exists server-side. Drop them so we don't
1128
+ // spawn new part uploads against an aborted multipart upload (which
1129
+ // would otherwise loop on retries until the network gives up).
1130
+ if (_classPrivateFieldGet(_this, _isTerminalStatus)) {
1131
+ _classPrivateFieldGet(_this, _logger$1).warn("push -> uploader is no longer active, dropping chunk", {
1132
+ chunkBytes: data === null || data === void 0 ? void 0 : data.size,
1133
+ status: _classPrivateFieldGet(_this, _status),
1134
+ recordingId: _classPrivateFieldGet(_this, _recordingId)
1135
+ });
1136
+ _classPrivateFieldSet(_this, _unUploadedChunks, []);
1137
+ return;
1138
+ }
1100
1139
  if (data.size > 0) {
1101
1140
  _classPrivateFieldGet(_this, _unUploadedChunks).push(data);
1102
1141
  }
@@ -1280,6 +1319,8 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
1280
1319
  var forceAbort,
1281
1320
  sessionLogs,
1282
1321
  abortStartedAt,
1322
+ phase,
1323
+ _classPrivateFieldGet3,
1283
1324
  recordingId,
1284
1325
  uploadId,
1285
1326
  _args2 = arguments;
@@ -1289,24 +1330,25 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
1289
1330
  forceAbort = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : false;
1290
1331
  sessionLogs = _args2.length > 1 ? _args2[1] : undefined;
1291
1332
  abortStartedAt = Date.now();
1292
- _context2.prev = 3;
1333
+ phase = "init";
1334
+ _context2.prev = 4;
1293
1335
  if (!(_this.status === UPLOAD_STATUS.aborting && !forceAbort)) {
1294
- _context2.next = 7;
1336
+ _context2.next = 8;
1295
1337
  break;
1296
1338
  }
1297
1339
  _classPrivateFieldGet(_this, _logger$1).info("abortUpload -> already aborting", {
1298
1340
  forceAbort: forceAbort
1299
1341
  });
1300
1342
  return _context2.abrupt("return");
1301
- case 7:
1343
+ case 8:
1302
1344
  _classPrivateFieldSet(_this, _status2, UPLOAD_STATUS.aborting);
1303
1345
  if (!_classPrivateFieldGet(_this, _isRecordingNotSet)) {
1304
- _context2.next = 11;
1346
+ _context2.next = 12;
1305
1347
  break;
1306
1348
  }
1307
1349
  _classPrivateFieldGet(_this, _logger$1).info("abortUpload -> not initialized");
1308
1350
  return _context2.abrupt("return");
1309
- case 11:
1351
+ case 12:
1310
1352
  recordingId = _classPrivateFieldGet(_this, _recordingId);
1311
1353
  uploadId = _classPrivateFieldGet(_this, _uploadId);
1312
1354
  _classPrivateFieldGet(_this, _logger$1).info("abortUpload -> begin", {
@@ -1314,18 +1356,25 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
1314
1356
  uploadId: uploadId,
1315
1357
  forceAbort: forceAbort,
1316
1358
  partsStarted: _classPrivateFieldGet(_this, _partNumber) - 1,
1317
- pendingS3ChunkUploads: _classPrivateFieldGet(_this, _pendingS3ChunkUploads).length
1359
+ pendingS3ChunkUploads: _classPrivateFieldGet(_this, _pendingS3ChunkUploads).length,
1360
+ hasAbortController: Boolean(_classPrivateFieldGet(_this, _abortController))
1318
1361
  });
1319
1362
 
1320
1363
  // Don't let a rejected completeUpload stop us from issuing the abort API
1321
1364
  // call below — we still need to release the upload server-side.
1365
+ phase = "awaitCompleteUploadPromise";
1322
1366
  // eslint-disable-next-line promise/prefer-await-to-then
1323
- _context2.next = 16;
1367
+ _context2.next = 18;
1324
1368
  return Promise.resolve(_classPrivateFieldGet(_this, _completeUploadPromise))["catch"](function () {});
1325
- case 16:
1326
- _classPrivateFieldGet(_this, _abortController).abort();
1327
- _context2.prev = 17;
1328
- _context2.next = 20;
1369
+ case 18:
1370
+ // Guard against a missing AbortController. If abortUpload is somehow
1371
+ // invoked twice, the second call would hit a null #abortController and
1372
+ // throw a TypeError into the outer catch — masking the real failure.
1373
+ phase = "abortInflight";
1374
+ (_classPrivateFieldGet3 = _classPrivateFieldGet(_this, _abortController)) === null || _classPrivateFieldGet3 === void 0 ? void 0 : _classPrivateFieldGet3.abort();
1375
+ phase = "abortUploadApi";
1376
+ _context2.prev = 21;
1377
+ _context2.next = 24;
1329
1378
  return abortUploadApi.create({
1330
1379
  recordingId: recordingId,
1331
1380
  payload: {
@@ -1334,41 +1383,45 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
1334
1383
  logs: sessionLogs
1335
1384
  }
1336
1385
  });
1337
- case 20:
1386
+ case 24:
1338
1387
  _classPrivateFieldGet(_this, _logger$1).info("abortUpload -> success", {
1339
1388
  durationMs: Date.now() - abortStartedAt
1340
1389
  });
1341
- _context2.next = 26;
1390
+ _context2.next = 30;
1342
1391
  break;
1343
- case 23:
1344
- _context2.prev = 23;
1345
- _context2.t0 = _context2["catch"](17);
1392
+ case 27:
1393
+ _context2.prev = 27;
1394
+ _context2.t0 = _context2["catch"](21);
1346
1395
  // After retries are exhausted, proceed with local cleanup so the
1347
1396
  // caller can navigate away / close tab. The server-side upload
1348
1397
  // will be cleaned up by S3 lifecycle rules.
1349
1398
  _classPrivateFieldGet(_this, _logger$1).error("abortUpload -> mark as discarded failed", _objectSpread$2(_objectSpread$2({}, _classPrivateFieldGet(_this, _serializeUploadError).call(_this, _context2.t0)), {}, {
1350
1399
  durationMs: Date.now() - abortStartedAt
1351
1400
  }));
1352
- case 26:
1401
+ case 30:
1402
+ phase = "fireOnAbort";
1353
1403
  _classPrivateFieldGet(_this, _fireCallbacks$1).call(_this, UPLOAD_EVENT.onAbort);
1404
+ phase = "cleanup";
1354
1405
  _classPrivateFieldSet(_this, _unUploadedChunks, []);
1355
1406
  _classPrivateFieldSet(_this, _partNumber, 1);
1356
1407
  _classPrivateFieldSet(_this, _s3PartUploadPromises, []);
1357
1408
  _classPrivateFieldSet(_this, _status2, "");
1358
1409
  _classPrivateFieldSet(_this, _abortController, null);
1359
- _context2.next = 37;
1410
+ _context2.next = 43;
1360
1411
  break;
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)), {}, {
1412
+ case 40:
1413
+ _context2.prev = 40;
1414
+ _context2.t1 = _context2["catch"](4);
1415
+ _classPrivateFieldGet(_this, _logger$1).error("abortUpload -> failed", _objectSpread$2(_objectSpread$2({
1416
+ phase: phase
1417
+ }, _classPrivateFieldGet(_this, _serializeUploadError).call(_this, _context2.t1)), {}, {
1365
1418
  durationMs: Date.now() - abortStartedAt
1366
1419
  }));
1367
- case 37:
1420
+ case 43:
1368
1421
  case "end":
1369
1422
  return _context2.stop();
1370
1423
  }
1371
- }, _callee2, null, [[3, 34], [17, 23]]);
1424
+ }, _callee2, null, [[4, 40], [21, 27]]);
1372
1425
  })));
1373
1426
  _defineProperty(this, "resetState", function () {
1374
1427
  _classPrivateFieldSet(_this, _recordingId, "");
@@ -1384,22 +1437,22 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
1384
1437
  _classPrivateFieldSet(_this, _status2, "");
1385
1438
  });
1386
1439
  _defineProperty(this, "addCallback", function (event, callback) {
1387
- var _classPrivateFieldGet3;
1388
- var existingCallbacks = (_classPrivateFieldGet3 = _classPrivateFieldGet(_this, _callbacks$1)[event]) !== null && _classPrivateFieldGet3 !== void 0 ? _classPrivateFieldGet3 : [];
1440
+ var _classPrivateFieldGet4;
1441
+ var existingCallbacks = (_classPrivateFieldGet4 = _classPrivateFieldGet(_this, _callbacks$1)[event]) !== null && _classPrivateFieldGet4 !== void 0 ? _classPrivateFieldGet4 : [];
1389
1442
  _classPrivateFieldSet(_this, _callbacks$1, _objectSpread$2(_objectSpread$2({}, _classPrivateFieldGet(_this, _callbacks$1)), {}, _defineProperty({}, event, [].concat(_toConsumableArray(existingCallbacks), [callback]))));
1390
1443
  });
1391
1444
  _defineProperty(this, "removeCallback", function (event, callback) {
1392
- var _classPrivateFieldGet4;
1393
- var registeredCallbacks = (_classPrivateFieldGet4 = _classPrivateFieldGet(_this, _callbacks$1)[event]) !== null && _classPrivateFieldGet4 !== void 0 ? _classPrivateFieldGet4 : [];
1445
+ var _classPrivateFieldGet5;
1446
+ var registeredCallbacks = (_classPrivateFieldGet5 = _classPrivateFieldGet(_this, _callbacks$1)[event]) !== null && _classPrivateFieldGet5 !== void 0 ? _classPrivateFieldGet5 : [];
1394
1447
  var updatedCallbacks = registeredCallbacks.filter(isNot(callback));
1395
1448
  _classPrivateFieldSet(_this, _callbacks$1, _objectSpread$2(_objectSpread$2({}, _classPrivateFieldGet(_this, _callbacks$1)), {}, _defineProperty({}, event, updatedCallbacks)));
1396
1449
  });
1397
1450
  _classPrivateFieldInitSpec$1(this, _fireCallbacks$1, {
1398
1451
  writable: true,
1399
1452
  value: function value(event) {
1400
- var _classPrivateFieldGet5;
1453
+ var _classPrivateFieldGet6;
1401
1454
  var args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
1402
- (_classPrivateFieldGet5 = _classPrivateFieldGet(_this, _callbacks$1)[event]) === null || _classPrivateFieldGet5 === void 0 ? void 0 : _classPrivateFieldGet5.forEach(function (callback) {
1455
+ (_classPrivateFieldGet6 = _classPrivateFieldGet(_this, _callbacks$1)[event]) === null || _classPrivateFieldGet6 === void 0 ? void 0 : _classPrivateFieldGet6.forEach(function (callback) {
1403
1456
  callback.apply(void 0, _toConsumableArray(args));
1404
1457
  });
1405
1458
  }
@@ -1449,7 +1502,7 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
1449
1502
  }
1450
1503
  });
1451
1504
  _defineProperty(this, "generatePreSignedUrl", function (partNumber) {
1452
- var _classPrivateFieldGet6;
1505
+ var _classPrivateFieldGet7;
1453
1506
  return partPresignedUrlApi.create({
1454
1507
  recordingId: _classPrivateFieldGet(_this, _recordingId),
1455
1508
  payload: {
@@ -1458,7 +1511,7 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
1458
1511
  isMp4: _classPrivateFieldGet(_this, _mimeType$1).includes(MIME_TYPE.mp4)
1459
1512
  },
1460
1513
  config: {
1461
- signal: (_classPrivateFieldGet6 = _classPrivateFieldGet(_this, _abortController)) === null || _classPrivateFieldGet6 === void 0 ? void 0 : _classPrivateFieldGet6.signal
1514
+ signal: (_classPrivateFieldGet7 = _classPrivateFieldGet(_this, _abortController)) === null || _classPrivateFieldGet7 === void 0 ? void 0 : _classPrivateFieldGet7.signal
1462
1515
  }
1463
1516
  });
1464
1517
  });
@@ -1466,7 +1519,7 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
1466
1519
  writable: true,
1467
1520
  value: function () {
1468
1521
  var _value = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(chunks) {
1469
- var _this$partNumber, _classPrivateFieldGet7;
1522
+ var _this$partNumber, _classPrivateFieldGet8;
1470
1523
  var partNumber, partBlob, partBytes, presignStartedAt, presignedUrl, _yield$_this$generate, uploadStartedAt, s3PartUploadPromise;
1471
1524
  return _regeneratorRuntime.wrap(function _callee3$(_context3) {
1472
1525
  while (1) switch (_context3.prev = _context3.next) {
@@ -1520,7 +1573,7 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
1520
1573
  "Content-Type": _classPrivateFieldGet(_this, _mimeType$1)
1521
1574
  },
1522
1575
  includeMetadataInResponse: true,
1523
- signal: (_classPrivateFieldGet7 = _classPrivateFieldGet(_this, _abortController)) === null || _classPrivateFieldGet7 === void 0 ? void 0 : _classPrivateFieldGet7.signal,
1576
+ signal: (_classPrivateFieldGet8 = _classPrivateFieldGet(_this, _abortController)) === null || _classPrivateFieldGet8 === void 0 ? void 0 : _classPrivateFieldGet8.signal,
1524
1577
  onUploadProgress: function onUploadProgress(e) {
1525
1578
  _classPrivateFieldGet(_this, _uploadProgress)[partNumber] = {
1526
1579
  uploaded: e.loaded,
@@ -1621,6 +1674,9 @@ function _set_status(status) {
1621
1674
  function _get_isRecordingNotSet() {
1622
1675
  return isEmpty(_classPrivateFieldGet(this, _uploadId) + _classPrivateFieldGet(this, _recordingId));
1623
1676
  }
1677
+ function _get_isTerminalStatus() {
1678
+ return _classPrivateFieldGet(this, _status) === UPLOAD_STATUS.aborting || _classPrivateFieldGet(this, _status) === UPLOAD_STATUS.completed || _classPrivateFieldGet(this, _status) === UPLOAD_STATUS.error;
1679
+ }
1624
1680
  var multipartS3Uploader = new MultipartS3Uploader();
1625
1681
  var getMultipartS3Uploader = function getMultipartS3Uploader() {
1626
1682
  var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
@@ -2062,6 +2118,26 @@ var ScreenRecorder = /*#__PURE__*/function () {
2062
2118
  _classPrivateFieldGet(_this, _stopAllStreams).call(_this);
2063
2119
  _classPrivateFieldGet(_this, _stopTimer).call(_this);
2064
2120
  });
2121
+ _defineProperty(this, "skipCountdown", function () {
2122
+ if (!_classPrivateFieldGet(_this, _countdownTimerId)) {
2123
+ _classPrivateFieldGet(_this, _logger).warn("skipCountdown -> ignored, no countdown running", _classPrivateFieldGet(_this, _summarizeRecorderState).call(_this));
2124
+ return;
2125
+ }
2126
+ _classPrivateFieldGet(_this, _logger).info("skipCountdown", _classPrivateFieldGet(_this, _summarizeRecorderState).call(_this));
2127
+ clearInterval(_classPrivateFieldGet(_this, _countdownTimerId));
2128
+ _classPrivateFieldSet(_this, _countdownTimerId, null);
2129
+ _classPrivateFieldGet(_this, _fireCallbacks).call(_this, SCREEN_RECORDER_EVENT.onCountdown, [0]);
2130
+ _classPrivateFieldGet(_this, _fireCallbacks).call(_this, SCREEN_RECORDER_EVENT.onCountdownSkip);
2131
+ // onCountdownEnd is the canonical "countdown phase finished" hook —
2132
+ // listeners that just want to know the count-in is over shouldn't have
2133
+ // to subscribe to onCountdownSkip too.
2134
+ _classPrivateFieldGet(_this, _fireCallbacks).call(_this, SCREEN_RECORDER_EVENT.onCountdownEnd);
2135
+ _classPrivateFieldGet(_this, _store).setState({
2136
+ countdownTimeLeft: 0,
2137
+ status: SCREEN_RECORDER_STATUS.recording
2138
+ });
2139
+ _classPrivateFieldGet(_this, _startMediaRecorder).call(_this);
2140
+ });
2065
2141
  _defineProperty(this, "pauseRecording", function () {
2066
2142
  var _classPrivateFieldGet6;
2067
2143
  if (((_classPrivateFieldGet6 = _classPrivateFieldGet(_this, _mediaRecorder)) === null || _classPrivateFieldGet6 === void 0 ? void 0 : _classPrivateFieldGet6.state) === "recording") {
@@ -2787,6 +2863,11 @@ var ScreenRecorder = /*#__PURE__*/function () {
2787
2863
  set: function set(value) {
2788
2864
  _classPrivateFieldSet(this, _videoStream, value);
2789
2865
  }
2866
+
2867
+ // Skip the in-flight countdown and start the actual recording immediately.
2868
+ // The chime is suppressed (vs. natural completion which plays it) since the
2869
+ // user explicitly opted out of the count-in. Listeners hook onCountdownSkip
2870
+ // to clean up countdown-only side effects like scheduled beeps.
2790
2871
  }]);
2791
2872
  return ScreenRecorder;
2792
2873
  }();