@bigbinary/neeto-media-recorder 2.7.34 → 2.7.36

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":";;;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,mBAAmB,GAAG,KAAI;AAChC,IAAMC,eAAe,GAAG,MAAK;AAE7B,IAAMC,oBAAoB,GAAG;AAClCC,EAAAA,OAAO,EAAEJ,aAAa;AACtBK,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,GAAG5F,2BAA2B;IACjE6F,6BAA6B,GAAG,CAAC,GAAG5F,yBAAyB;;AAEnE,IAAM6F,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 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);
@@ -755,54 +745,74 @@ var buildRetryableApi = function buildRetryableApi(apiConnector) {
755
745
  retryDelay = _ref$retryDelay === void 0 ? INITIAL_RETRY_DELAY : _ref$retryDelay;
756
746
  return /*#__PURE__*/function () {
757
747
  var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(apiConnectorArgs) {
758
- var _config$signal;
748
+ var _config$signal, _config$signal2;
759
749
  var _apiConnectorArgs$con, config, remainingAttempts, shouldCancelRetries, _error$config, _error$response, _error$response2;
760
750
  return _regeneratorRuntime.wrap(function _callee$(_context) {
761
751
  while (1) switch (_context.prev = _context.next) {
762
752
  case 0:
763
- _apiConnectorArgs$con = apiConnectorArgs.config, config = _apiConnectorArgs$con === void 0 ? null : _apiConnectorArgs$con;
753
+ _apiConnectorArgs$con = apiConnectorArgs.config, config = _apiConnectorArgs$con === void 0 ? null : _apiConnectorArgs$con; // If the signal is already aborted before we start, addEventListener("abort")
754
+ // will never fire — so we'd otherwise run the full retry/backoff schedule
755
+ // against an aborted request.
756
+ if (!(config !== null && config !== void 0 && (_config$signal = config.signal) !== null && _config$signal !== void 0 && _config$signal.aborted)) {
757
+ _context.next = 3;
758
+ break;
759
+ }
760
+ throw new RetryError("Request cancelled or request retries exhausted");
761
+ case 3:
764
762
  remainingAttempts = retries + 1;
765
763
  shouldCancelRetries = false;
766
- config === null || config === void 0 ? void 0 : (_config$signal = config.signal) === null || _config$signal === void 0 ? void 0 : _config$signal.addEventListener("abort", function () {
764
+ config === null || config === void 0 ? void 0 : (_config$signal2 = config.signal) === null || _config$signal2 === void 0 ? void 0 : _config$signal2.addEventListener("abort", function () {
767
765
  shouldCancelRetries = true;
768
766
  });
769
- case 4:
767
+ case 6:
770
768
  if (!(remainingAttempts-- && !shouldCancelRetries)) {
771
- _context.next = 24;
769
+ _context.next = 30;
772
770
  break;
773
771
  }
774
- _context.prev = 5;
775
- _context.next = 8;
772
+ _context.prev = 7;
773
+ _context.next = 10;
776
774
  return apiConnector(apiConnectorArgs);
777
- case 8:
775
+ case 10:
778
776
  return _context.abrupt("return", _context.sent);
779
- case 11:
780
- _context.prev = 11;
781
- _context.t0 = _context["catch"](5);
777
+ case 13:
778
+ _context.prev = 13;
779
+ _context.t0 = _context["catch"](7);
780
+ if (!axios.isCancel(_context.t0)) {
781
+ _context.next = 17;
782
+ break;
783
+ }
784
+ throw _context.t0;
785
+ case 17:
782
786
  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);
783
787
  if (!(((_error$response2 = _context.t0.response) === null || _error$response2 === void 0 ? void 0 : _error$response2.status) !== 401 && remainingAttempts > 0)) {
784
- _context.next = 21;
788
+ _context.next = 27;
785
789
  break;
786
790
  }
787
791
  logger.info("buildRetryableApi -> Failed to connect -> retry in:", retryDelay);
788
- _context.next = 18;
792
+ _context.next = 22;
789
793
  return sleep(retryDelay);
790
- case 18:
794
+ case 22:
791
795
  retryDelay = min(retryDelay * 2, MAX_RETRY_DELAY);
792
- _context.next = 22;
796
+ if (!shouldCancelRetries) {
797
+ _context.next = 25;
798
+ break;
799
+ }
800
+ throw _context.t0;
801
+ case 25:
802
+ _context.next = 28;
793
803
  break;
794
- case 21:
804
+ case 27:
795
805
  throw _context.t0;
796
- case 22:
797
- _context.next = 4;
806
+ case 28:
807
+ _context.next = 6;
798
808
  break;
799
- case 24:
809
+ case 30:
800
810
  throw new RetryError("Request cancelled or request retries exhausted");
801
- case 25:
811
+ case 31:
802
812
  case "end":
803
813
  return _context.stop();
804
814
  }
805
- }, _callee, null, [[5, 11]]);
815
+ }, _callee, null, [[7, 13]]);
806
816
  }));
807
817
  return function (_x) {
808
818
  return _ref2.apply(this, arguments);
@@ -810,6 +820,20 @@ var buildRetryableApi = function buildRetryableApi(apiConnector) {
810
820
  }();
811
821
  };
812
822
 
823
+ var create$2 = function create(_ref) {
824
+ var recordingId = _ref.recordingId,
825
+ payload = _ref.payload;
826
+ return axios.post("/api/v1/recordings/".concat(recordingId, "/abort_upload"), {
827
+ abortUpload: payload
828
+ });
829
+ };
830
+ var retryableCreate$2 = buildRetryableApi(create$2, {
831
+ retries: ABORT_UPLOAD_RETRIES
832
+ });
833
+ var abortUploadApi = {
834
+ create: retryableCreate$2
835
+ };
836
+
813
837
  var create$1 = function create(_ref) {
814
838
  var recordingId = _ref.recordingId,
815
839
  payload = _ref.payload,
@@ -1003,10 +1027,15 @@ var _serializeUploadError = /*#__PURE__*/new WeakMap();
1003
1027
  var _uploadChunkToS = /*#__PURE__*/new WeakMap();
1004
1028
  var _getCurrentUnUploadedBlob = /*#__PURE__*/new WeakMap();
1005
1029
  var _isRecordingNotSet = /*#__PURE__*/new WeakMap();
1030
+ var _isTerminalStatus = /*#__PURE__*/new WeakMap();
1006
1031
  var MultipartS3Uploader = /*#__PURE__*/function () {
1007
1032
  function MultipartS3Uploader() {
1008
1033
  var _this = this;
1009
1034
  _classCallCheck(this, MultipartS3Uploader);
1035
+ _classPrivateFieldInitSpec$1(this, _isTerminalStatus, {
1036
+ get: _get_isTerminalStatus,
1037
+ set: void 0
1038
+ });
1010
1039
  _classPrivateFieldInitSpec$1(this, _isRecordingNotSet, {
1011
1040
  get: _get_isRecordingNotSet,
1012
1041
  set: void 0
@@ -1093,6 +1122,19 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
1093
1122
  _classPrivateFieldSet(_this, _abortController, new AbortController());
1094
1123
  });
1095
1124
  _defineProperty(this, "push", function (data) {
1125
+ // Once an uploader has been aborted, any further chunks belong to a
1126
+ // recording that no longer exists server-side. Drop them so we don't
1127
+ // spawn new part uploads against an aborted multipart upload (which
1128
+ // would otherwise loop on retries until the network gives up).
1129
+ if (_classPrivateFieldGet(_this, _isTerminalStatus)) {
1130
+ _classPrivateFieldGet(_this, _logger$1).warn("push -> uploader is no longer active, dropping chunk", {
1131
+ chunkBytes: data === null || data === void 0 ? void 0 : data.size,
1132
+ status: _classPrivateFieldGet(_this, _status),
1133
+ recordingId: _classPrivateFieldGet(_this, _recordingId)
1134
+ });
1135
+ _classPrivateFieldSet(_this, _unUploadedChunks, []);
1136
+ return;
1137
+ }
1096
1138
  if (data.size > 0) {
1097
1139
  _classPrivateFieldGet(_this, _unUploadedChunks).push(data);
1098
1140
  }
@@ -1276,6 +1318,8 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
1276
1318
  var forceAbort,
1277
1319
  sessionLogs,
1278
1320
  abortStartedAt,
1321
+ phase,
1322
+ _classPrivateFieldGet3,
1279
1323
  recordingId,
1280
1324
  uploadId,
1281
1325
  _args2 = arguments;
@@ -1285,24 +1329,25 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
1285
1329
  forceAbort = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : false;
1286
1330
  sessionLogs = _args2.length > 1 ? _args2[1] : undefined;
1287
1331
  abortStartedAt = Date.now();
1288
- _context2.prev = 3;
1332
+ phase = "init";
1333
+ _context2.prev = 4;
1289
1334
  if (!(_this.status === UPLOAD_STATUS.aborting && !forceAbort)) {
1290
- _context2.next = 7;
1335
+ _context2.next = 8;
1291
1336
  break;
1292
1337
  }
1293
1338
  _classPrivateFieldGet(_this, _logger$1).info("abortUpload -> already aborting", {
1294
1339
  forceAbort: forceAbort
1295
1340
  });
1296
1341
  return _context2.abrupt("return");
1297
- case 7:
1342
+ case 8:
1298
1343
  _classPrivateFieldSet(_this, _status2, UPLOAD_STATUS.aborting);
1299
1344
  if (!_classPrivateFieldGet(_this, _isRecordingNotSet)) {
1300
- _context2.next = 11;
1345
+ _context2.next = 12;
1301
1346
  break;
1302
1347
  }
1303
1348
  _classPrivateFieldGet(_this, _logger$1).info("abortUpload -> not initialized");
1304
1349
  return _context2.abrupt("return");
1305
- case 11:
1350
+ case 12:
1306
1351
  recordingId = _classPrivateFieldGet(_this, _recordingId);
1307
1352
  uploadId = _classPrivateFieldGet(_this, _uploadId);
1308
1353
  _classPrivateFieldGet(_this, _logger$1).info("abortUpload -> begin", {
@@ -1310,17 +1355,25 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
1310
1355
  uploadId: uploadId,
1311
1356
  forceAbort: forceAbort,
1312
1357
  partsStarted: _classPrivateFieldGet(_this, _partNumber) - 1,
1313
- pendingS3ChunkUploads: _classPrivateFieldGet(_this, _pendingS3ChunkUploads).length
1358
+ pendingS3ChunkUploads: _classPrivateFieldGet(_this, _pendingS3ChunkUploads).length,
1359
+ hasAbortController: Boolean(_classPrivateFieldGet(_this, _abortController))
1314
1360
  });
1315
1361
 
1316
1362
  // Don't let a rejected completeUpload stop us from issuing the abort API
1317
1363
  // call below — we still need to release the upload server-side.
1364
+ phase = "awaitCompleteUploadPromise";
1318
1365
  // eslint-disable-next-line promise/prefer-await-to-then
1319
- _context2.next = 16;
1366
+ _context2.next = 18;
1320
1367
  return Promise.resolve(_classPrivateFieldGet(_this, _completeUploadPromise))["catch"](function () {});
1321
- case 16:
1322
- _classPrivateFieldGet(_this, _abortController).abort();
1323
- _context2.next = 19;
1368
+ case 18:
1369
+ // Guard against a missing AbortController. If abortUpload is somehow
1370
+ // invoked twice, the second call would hit a null #abortController and
1371
+ // throw a TypeError into the outer catch — masking the real failure.
1372
+ phase = "abortInflight";
1373
+ (_classPrivateFieldGet3 = _classPrivateFieldGet(_this, _abortController)) === null || _classPrivateFieldGet3 === void 0 ? void 0 : _classPrivateFieldGet3.abort();
1374
+ phase = "abortUploadApi";
1375
+ _context2.prev = 21;
1376
+ _context2.next = 24;
1324
1377
  return abortUploadApi.create({
1325
1378
  recordingId: recordingId,
1326
1379
  payload: {
@@ -1329,29 +1382,45 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
1329
1382
  logs: sessionLogs
1330
1383
  }
1331
1384
  });
1332
- case 19:
1385
+ case 24:
1333
1386
  _classPrivateFieldGet(_this, _logger$1).info("abortUpload -> success", {
1334
1387
  durationMs: Date.now() - abortStartedAt
1335
1388
  });
1389
+ _context2.next = 30;
1390
+ break;
1391
+ case 27:
1392
+ _context2.prev = 27;
1393
+ _context2.t0 = _context2["catch"](21);
1394
+ // After retries are exhausted, proceed with local cleanup so the
1395
+ // caller can navigate away / close tab. The server-side upload
1396
+ // will be cleaned up by S3 lifecycle rules.
1397
+ _classPrivateFieldGet(_this, _logger$1).error("abortUpload -> mark as discarded failed", _objectSpread$2(_objectSpread$2({}, _classPrivateFieldGet(_this, _serializeUploadError).call(_this, _context2.t0)), {}, {
1398
+ durationMs: Date.now() - abortStartedAt
1399
+ }));
1400
+ case 30:
1401
+ phase = "fireOnAbort";
1336
1402
  _classPrivateFieldGet(_this, _fireCallbacks$1).call(_this, UPLOAD_EVENT.onAbort);
1403
+ phase = "cleanup";
1337
1404
  _classPrivateFieldSet(_this, _unUploadedChunks, []);
1338
1405
  _classPrivateFieldSet(_this, _partNumber, 1);
1339
1406
  _classPrivateFieldSet(_this, _s3PartUploadPromises, []);
1340
1407
  _classPrivateFieldSet(_this, _status2, "");
1341
1408
  _classPrivateFieldSet(_this, _abortController, null);
1342
- _context2.next = 31;
1409
+ _context2.next = 43;
1343
1410
  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)), {}, {
1411
+ case 40:
1412
+ _context2.prev = 40;
1413
+ _context2.t1 = _context2["catch"](4);
1414
+ _classPrivateFieldGet(_this, _logger$1).error("abortUpload -> failed", _objectSpread$2(_objectSpread$2({
1415
+ phase: phase
1416
+ }, _classPrivateFieldGet(_this, _serializeUploadError).call(_this, _context2.t1)), {}, {
1348
1417
  durationMs: Date.now() - abortStartedAt
1349
1418
  }));
1350
- case 31:
1419
+ case 43:
1351
1420
  case "end":
1352
1421
  return _context2.stop();
1353
1422
  }
1354
- }, _callee2, null, [[3, 28]]);
1423
+ }, _callee2, null, [[4, 40], [21, 27]]);
1355
1424
  })));
1356
1425
  _defineProperty(this, "resetState", function () {
1357
1426
  _classPrivateFieldSet(_this, _recordingId, "");
@@ -1367,22 +1436,22 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
1367
1436
  _classPrivateFieldSet(_this, _status2, "");
1368
1437
  });
1369
1438
  _defineProperty(this, "addCallback", function (event, callback) {
1370
- var _classPrivateFieldGet3;
1371
- var existingCallbacks = (_classPrivateFieldGet3 = _classPrivateFieldGet(_this, _callbacks$1)[event]) !== null && _classPrivateFieldGet3 !== void 0 ? _classPrivateFieldGet3 : [];
1439
+ var _classPrivateFieldGet4;
1440
+ var existingCallbacks = (_classPrivateFieldGet4 = _classPrivateFieldGet(_this, _callbacks$1)[event]) !== null && _classPrivateFieldGet4 !== void 0 ? _classPrivateFieldGet4 : [];
1372
1441
  _classPrivateFieldSet(_this, _callbacks$1, _objectSpread$2(_objectSpread$2({}, _classPrivateFieldGet(_this, _callbacks$1)), {}, _defineProperty({}, event, [].concat(_toConsumableArray(existingCallbacks), [callback]))));
1373
1442
  });
1374
1443
  _defineProperty(this, "removeCallback", function (event, callback) {
1375
- var _classPrivateFieldGet4;
1376
- var registeredCallbacks = (_classPrivateFieldGet4 = _classPrivateFieldGet(_this, _callbacks$1)[event]) !== null && _classPrivateFieldGet4 !== void 0 ? _classPrivateFieldGet4 : [];
1444
+ var _classPrivateFieldGet5;
1445
+ var registeredCallbacks = (_classPrivateFieldGet5 = _classPrivateFieldGet(_this, _callbacks$1)[event]) !== null && _classPrivateFieldGet5 !== void 0 ? _classPrivateFieldGet5 : [];
1377
1446
  var updatedCallbacks = registeredCallbacks.filter(isNot(callback));
1378
1447
  _classPrivateFieldSet(_this, _callbacks$1, _objectSpread$2(_objectSpread$2({}, _classPrivateFieldGet(_this, _callbacks$1)), {}, _defineProperty({}, event, updatedCallbacks)));
1379
1448
  });
1380
1449
  _classPrivateFieldInitSpec$1(this, _fireCallbacks$1, {
1381
1450
  writable: true,
1382
1451
  value: function value(event) {
1383
- var _classPrivateFieldGet5;
1452
+ var _classPrivateFieldGet6;
1384
1453
  var args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
1385
- (_classPrivateFieldGet5 = _classPrivateFieldGet(_this, _callbacks$1)[event]) === null || _classPrivateFieldGet5 === void 0 ? void 0 : _classPrivateFieldGet5.forEach(function (callback) {
1454
+ (_classPrivateFieldGet6 = _classPrivateFieldGet(_this, _callbacks$1)[event]) === null || _classPrivateFieldGet6 === void 0 ? void 0 : _classPrivateFieldGet6.forEach(function (callback) {
1386
1455
  callback.apply(void 0, _toConsumableArray(args));
1387
1456
  });
1388
1457
  }
@@ -1432,7 +1501,7 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
1432
1501
  }
1433
1502
  });
1434
1503
  _defineProperty(this, "generatePreSignedUrl", function (partNumber) {
1435
- var _classPrivateFieldGet6;
1504
+ var _classPrivateFieldGet7;
1436
1505
  return partPresignedUrlApi.create({
1437
1506
  recordingId: _classPrivateFieldGet(_this, _recordingId),
1438
1507
  payload: {
@@ -1441,7 +1510,7 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
1441
1510
  isMp4: _classPrivateFieldGet(_this, _mimeType$1).includes(MIME_TYPE.mp4)
1442
1511
  },
1443
1512
  config: {
1444
- signal: (_classPrivateFieldGet6 = _classPrivateFieldGet(_this, _abortController)) === null || _classPrivateFieldGet6 === void 0 ? void 0 : _classPrivateFieldGet6.signal
1513
+ signal: (_classPrivateFieldGet7 = _classPrivateFieldGet(_this, _abortController)) === null || _classPrivateFieldGet7 === void 0 ? void 0 : _classPrivateFieldGet7.signal
1445
1514
  }
1446
1515
  });
1447
1516
  });
@@ -1449,7 +1518,7 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
1449
1518
  writable: true,
1450
1519
  value: function () {
1451
1520
  var _value = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(chunks) {
1452
- var _this$partNumber, _classPrivateFieldGet7;
1521
+ var _this$partNumber, _classPrivateFieldGet8;
1453
1522
  var partNumber, partBlob, partBytes, presignStartedAt, presignedUrl, _yield$_this$generate, uploadStartedAt, s3PartUploadPromise;
1454
1523
  return _regeneratorRuntime.wrap(function _callee3$(_context3) {
1455
1524
  while (1) switch (_context3.prev = _context3.next) {
@@ -1503,7 +1572,7 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
1503
1572
  "Content-Type": _classPrivateFieldGet(_this, _mimeType$1)
1504
1573
  },
1505
1574
  includeMetadataInResponse: true,
1506
- signal: (_classPrivateFieldGet7 = _classPrivateFieldGet(_this, _abortController)) === null || _classPrivateFieldGet7 === void 0 ? void 0 : _classPrivateFieldGet7.signal,
1575
+ signal: (_classPrivateFieldGet8 = _classPrivateFieldGet(_this, _abortController)) === null || _classPrivateFieldGet8 === void 0 ? void 0 : _classPrivateFieldGet8.signal,
1507
1576
  onUploadProgress: function onUploadProgress(e) {
1508
1577
  _classPrivateFieldGet(_this, _uploadProgress)[partNumber] = {
1509
1578
  uploaded: e.loaded,
@@ -1604,6 +1673,9 @@ function _set_status(status) {
1604
1673
  function _get_isRecordingNotSet() {
1605
1674
  return isEmpty(_classPrivateFieldGet(this, _uploadId) + _classPrivateFieldGet(this, _recordingId));
1606
1675
  }
1676
+ function _get_isTerminalStatus() {
1677
+ return _classPrivateFieldGet(this, _status) === UPLOAD_STATUS.aborting || _classPrivateFieldGet(this, _status) === UPLOAD_STATUS.completed || _classPrivateFieldGet(this, _status) === UPLOAD_STATUS.error;
1678
+ }
1607
1679
  var multipartS3Uploader = new MultipartS3Uploader();
1608
1680
  var getMultipartS3Uploader = function getMultipartS3Uploader() {
1609
1681
  var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},