react-native-compressor 1.8.17 → 1.8.19

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/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  <div align="center">
2
- <img height="150" src="/media/logo.png"></h2>
2
+ <img height="150" src="/media/logo.png" />
3
3
  </div>
4
+
4
5
  <br/>
5
6
 
6
7
  <div align="center">
@@ -15,6 +16,11 @@
15
16
 
16
17
  **REACT-NATIVE-COMPRESSOR** is a react-native package, which helps us to Compress `Image`, `Video`, and `Audio` before uploading, same like **Whatsapp** without knowing the compression `algorithm`
17
18
 
19
+ <div align="center">
20
+ <h4>Auto/Manual Compression | Background Upload | Download File | Create Video Thumbnail</h4>
21
+ </div>
22
+ <br/>
23
+
18
24
  <div align="center">
19
25
  <pre>
20
26
  <img height="90" src="/media/whatsapp_logo.png"/> <img height="90" src="/media/compress_media.png"/>
@@ -66,11 +72,13 @@ We should use **react-native-compressor** instead of **FFmpeg** because **react-
66
72
  - [Video Api Docs](#video-1)
67
73
  - [Audio](#audio)
68
74
  - [Background Upload](#background-upload)
75
+ - [Cancel Background Upload](#cancel-background-upload)
69
76
  - [Download File](#download)
70
77
  - [Create Video Thumbnail and Clear Cache](#create-video-thumbnail-and-clear-cache)
71
78
 
72
79
  * [Other Utilities](#api)
73
80
  - [Background Upload](#background-upload-1)
81
+ - [Cancel Background Upload](#cancel-background-upload-1)
74
82
  - [Get Metadata Of Video](#get-metadata-of-video)
75
83
  - [Get Real Path](#get-real-path)
76
84
  - [Get Temp file Path](#get-temp-file-path)
@@ -311,6 +319,53 @@ const uploadResult = await backgroundUpload(
311
319
  );
312
320
  ```
313
321
 
322
+ ### Cancel Background Upload
323
+ for cancellation Upload, there is two ways
324
+ 1. by calling, cancelUpload function
325
+ 2. by calling abort function
326
+
327
+ ##### cancelUpload (support single and all)
328
+ ```js
329
+ import { cancelUpload, backgroundUpload } from 'react-native-compressor';
330
+
331
+ // if we will call without passing any param then it will remove last pushed uploading
332
+ cancelUpload()
333
+
334
+ // if you pass true as second param then it will cancel all the uploading
335
+ cancelUpload("",true)
336
+
337
+ // if there is multiple files are uploading, and you wanna cancel specific uploading then you pass specific video id like this
338
+ let videoId=''
339
+ const uploadResult = await backgroundUpload(
340
+ url,
341
+ fileUrl,
342
+ { httpMethod: 'PUT', getCancellationId: (cancellationId) =>(videoId = cancellationId), },
343
+ (written, total) => {
344
+ console.log(written, total);
345
+ }
346
+ );
347
+ cancelUpload(videoId)
348
+ ```
349
+
350
+ ##### cancel by calling abort
351
+ ```js
352
+ import { backgroundUpload } from 'react-native-compressor';
353
+
354
+ const abortSignalRef = useRef(new AbortController());
355
+
356
+ const uploadResult = await backgroundUpload(
357
+ url,
358
+ fileUrl,
359
+ { httpMethod: 'PUT' },
360
+ (written, total) => {
361
+ console.log(written, total);
362
+ },
363
+ abortSignalRef.current.signal
364
+ );
365
+
366
+ abortSignalRef.current?.abort(); // this will cancel uploading
367
+ ```
368
+
314
369
  ### Download File
315
370
 
316
371
  ```js
@@ -487,12 +542,25 @@ export declare type UploaderOptions = (
487
542
  ) & {
488
543
  headers?: Record<string, string>;
489
544
  httpMethod?: UploaderHttpMethod;
545
+ getCancellationId?: (cancellationId: string) => void;
490
546
  };
491
547
  ```
492
548
 
493
549
  **Note:** some of the uploader code is borrowed from [Expo](https://github.com/expo/expo)
494
550
  I tested file uploader on this backend [Nodejs-File-Uploader](https://github.com/numandev1/nodejs-file-uploader)
495
551
 
552
+ ### Cancel Background Upload
553
+ for cancellation Upload, there is two ways, you can use one of it
554
+ - ##### cancelUpload: ( uuid?: string, shouldCancelAll?: boolean) => void
555
+ 1. If we call without passing any param then it will remove the last pushed uploading
556
+ 2. If you pass true as the second param then it will cancel all the uploading
557
+ 3. if there is multiple files are uploading, and you wanna cancel specific uploading then you pass a specific video ID like this
558
+
559
+ - ##### we can use [AbortController](https://github.com/facebook/react-native/blob/255fef5263afdf9933ba2f8a3dbcbca39ea9928a/packages/react-native/types/modules/globals.d.ts#L531) in backgroundUpload [Usage](#cancel-background-upload)
560
+ `const abortSignalRef = useRef(new AbortController());`
561
+
562
+ `abortSignalRef.current?.abort();`
563
+
496
564
  ### Download
497
565
 
498
566
  - ##### download: ( fileUrl: string, downloadProgress?: (progress: number) => void, progressDivider?: number ) => Promise< string >
@@ -78,8 +78,8 @@ android {
78
78
  }
79
79
 
80
80
  compileOptions {
81
- sourceCompatibility JavaVersion.VERSION_1_8
82
- targetCompatibility JavaVersion.VERSION_1_8
81
+ sourceCompatibility JavaVersion.VERSION_11
82
+ targetCompatibility JavaVersion.VERSION_11
83
83
  }
84
84
 
85
85
  sourceSets {
@@ -125,6 +125,11 @@ class CompressorModule(private val reactContext: ReactApplicationContext) : Comp
125
125
  uploader.upload(fileUrl, options, reactContext, promise)
126
126
  }
127
127
 
128
+ @ReactMethod
129
+ override fun cancelUpload(uuid: String,shouldCancelAll:Boolean) {
130
+ uploader.cancelUpload(uuid,shouldCancelAll)
131
+ }
132
+
128
133
  @ReactMethod
129
134
  override fun download(
130
135
  fileUrl: String,
@@ -0,0 +1,41 @@
1
+ package com.reactnativecompressor.Utils
2
+
3
+ import okhttp3.Call
4
+
5
+ class HttpCallManager {
6
+ private var resumableCalls: MutableMap<String, Call?> = HashMap()
7
+
8
+ fun registerTask(call: Call, uuid: String) {
9
+ resumableCalls[uuid] = call
10
+ }
11
+
12
+ fun taskForId(uuid: String): Call? {
13
+ return resumableCalls[uuid]
14
+ }
15
+
16
+ // will use in future
17
+ fun downloadTaskForId(uuid: String): Call? {
18
+ return taskForId(uuid)
19
+ }
20
+
21
+ fun uploadTaskForId(uuid: String): Call? {
22
+ return taskForId(uuid)
23
+ }
24
+
25
+ fun taskPop(): Call? {
26
+ val lastUuid = resumableCalls.keys.lastOrNull()
27
+ val lastCall = resumableCalls.remove(lastUuid)
28
+ return lastCall
29
+ }
30
+
31
+ fun unregisterTask(uuid: String) {
32
+ resumableCalls.remove(uuid)
33
+ }
34
+
35
+ fun cancelAllTasks() {
36
+ for ((_, call) in resumableCalls) {
37
+ call?.cancel()
38
+ }
39
+ resumableCalls.clear()
40
+ }
41
+ }
@@ -26,36 +26,45 @@ import java.net.URLConnection
26
26
  import java.util.concurrent.TimeUnit
27
27
 
28
28
  class Uploader(private val reactContext: ReactApplicationContext) {
29
- val TAG = "asyncTaskUploader"
30
- var client: OkHttpClient? = null
31
- val MIN_EVENT_DT_MS: Long = 100
32
-
33
- fun upload(fileUriString: String, _options: ReadableMap, reactContext: ReactApplicationContext, promise: Promise) {
34
- val options:UploaderOptions=convertReadableMapToUploaderOptions(_options)
35
- val url = options.url
36
- val uuid = options.uuid
37
- val progressListener: CountingRequestListener = object : CountingRequestListener {
38
- private var mLastUpdate: Long = -1
39
- override fun onProgress(bytesWritten: Long, contentLength: Long) {
40
- val currentTime = System.currentTimeMillis()
41
-
42
- // Throttle events. Sending too many events will block the JS event loop.
43
- // Make sure to send the last event when we're at 100%.
44
- if (currentTime > mLastUpdate + MIN_EVENT_DT_MS || bytesWritten == contentLength) {
45
- mLastUpdate = currentTime
46
- EventEmitterHandler.sendUploadProgressEvent(bytesWritten,contentLength,uuid)
47
- }
29
+ val TAG = "asyncTaskUploader"
30
+ var client: OkHttpClient? = null
31
+ val MIN_EVENT_DT_MS: Long = 100
32
+ val httpCallManager = HttpCallManager()
33
+
34
+ fun upload(
35
+ fileUriString: String,
36
+ _options: ReadableMap,
37
+ reactContext: ReactApplicationContext,
38
+ promise: Promise
39
+ ) {
40
+ val options: UploaderOptions = convertReadableMapToUploaderOptions(_options)
41
+ val url = options.url
42
+ val uuid = options.uuid
43
+ val progressListener: CountingRequestListener = object : CountingRequestListener {
44
+ private var mLastUpdate: Long = -1
45
+ override fun onProgress(bytesWritten: Long, contentLength: Long) {
46
+ val currentTime = System.currentTimeMillis()
47
+
48
+ // Throttle events. Sending too many events will block the JS event loop.
49
+ // Make sure to send the last event when we're at 100%.
50
+ if (currentTime > mLastUpdate + MIN_EVENT_DT_MS || bytesWritten == contentLength) {
51
+ mLastUpdate = currentTime
52
+ EventEmitterHandler.sendUploadProgressEvent(bytesWritten, contentLength, uuid)
48
53
  }
49
54
  }
50
- val request = createUploadRequest(
51
- url, fileUriString, options
52
- ) { requestBody -> CountingRequestBody(requestBody, progressListener) }
53
-
54
- okHttpClient?.let {
55
- it.newCall(request).enqueue(object : Callback {
55
+ }
56
+ val request = createUploadRequest(
57
+ url, fileUriString, options
58
+ ) { requestBody -> CountingRequestBody(requestBody, progressListener) }
59
+
60
+ okHttpClient?.let {
61
+ val call = it.newCall(request)
62
+ httpCallManager.registerTask(call,uuid)
63
+ call.enqueue(
64
+ object : Callback {
56
65
  override fun onFailure(call: Call, e: IOException) {
57
66
  Log.e(TAG, e.message.toString())
58
- promise.reject(TAG, e.message, e)
67
+ promise.reject(TAG, e.message)
59
68
  }
60
69
 
61
70
  override fun onResponse(call: Call, response: Response) {
@@ -67,12 +76,12 @@ class Uploader(private val reactContext: ReactApplicationContext) {
67
76
  promise.resolve(param)
68
77
  }
69
78
  })
70
- } ?: run {
71
- promise.reject(UploaderOkHttpNullException())
72
- }
73
-
79
+ } ?: run {
80
+ promise.reject(UploaderOkHttpNullException())
74
81
  }
75
82
 
83
+ }
84
+
76
85
  @get:Synchronized
77
86
  private val okHttpClient: OkHttpClient?
78
87
  get() {
@@ -87,7 +96,12 @@ class Uploader(private val reactContext: ReactApplicationContext) {
87
96
  }
88
97
 
89
98
  @Throws(IOException::class)
90
- private fun createUploadRequest(url: String, fileUriString: String, options: UploaderOptions, decorator: RequestBodyDecorator): Request {
99
+ private fun createUploadRequest(
100
+ url: String,
101
+ fileUriString: String,
102
+ options: UploaderOptions,
103
+ decorator: RequestBodyDecorator
104
+ ): Request {
91
105
  val fileUri = Uri.parse(slashifyFilePath(fileUriString))
92
106
  fileUri.checkIfFileExists()
93
107
 
@@ -101,7 +115,11 @@ class Uploader(private val reactContext: ReactApplicationContext) {
101
115
  }
102
116
 
103
117
  @SuppressLint("NewApi")
104
- private fun createRequestBody(options: UploaderOptions, decorator: RequestBodyDecorator, file: File): RequestBody {
118
+ private fun createRequestBody(
119
+ options: UploaderOptions,
120
+ decorator: RequestBodyDecorator,
121
+ file: File
122
+ ): RequestBody {
105
123
  return when (options.uploadType) {
106
124
  UploadType.BINARY_CONTENT -> {
107
125
  val mimeType: String? = if (options.mimeType?.isNotEmpty() == true) {
@@ -122,7 +140,11 @@ class Uploader(private val reactContext: ReactApplicationContext) {
122
140
  val mimeType: String = options.mimeType ?: URLConnection.guessContentTypeFromName(file.name)
123
141
 
124
142
  val fieldName = options.fieldName ?: file.name
125
- bodyBuilder.addFormDataPart(fieldName, file.name, decorator.decorate(file.asRequestBody(mimeType.toMediaTypeOrNull())))
143
+ bodyBuilder.addFormDataPart(
144
+ fieldName,
145
+ file.name,
146
+ decorator.decorate(file.asRequestBody(mimeType.toMediaTypeOrNull()))
147
+ )
126
148
  bodyBuilder.build()
127
149
  }
128
150
  }
@@ -175,4 +197,19 @@ class Uploader(private val reactContext: ReactApplicationContext) {
175
197
  }
176
198
  return responseHeaders
177
199
  }
200
+
201
+ fun cancelUpload(uuid:String,shouldCancelAll:Boolean) {
202
+ if(shouldCancelAll)
203
+ {
204
+ httpCallManager.cancelAllTasks()
205
+ }
206
+ else if(uuid=="")
207
+ {
208
+ httpCallManager.taskPop()?.cancel()
209
+ }
210
+ else
211
+ {
212
+ httpCallManager.uploadTaskForId(uuid)?.cancel()
213
+ }
214
+ }
178
215
  }
@@ -23,6 +23,7 @@ abstract class CompressorSpec(context: ReactApplicationContext?) : ReactContextB
23
23
  abstract fun compress(fileUrl: String, optionMap: ReadableMap, promise: Promise)
24
24
  abstract fun cancelCompression(uuid: String)
25
25
  abstract fun upload(fileUrl: String, options: ReadableMap, promise: Promise)
26
+ abstract fun cancelUpload(uuid: String, shouldCancelAll:Boolean)
26
27
 
27
28
  abstract fun download(fileUrl: String, options: ReadableMap, promise: Promise)
28
29
  abstract fun activateBackgroundTask(options: ReadableMap, promise: Promise)
package/ios/Compressor.mm CHANGED
@@ -39,7 +39,10 @@ RCT_EXTERN_METHOD(upload:(NSString *)fileUrl
39
39
  withResolver:(RCTPromiseResolveBlock)resolve
40
40
  withRejecter:(RCTPromiseRejectBlock)reject)
41
41
 
42
- RCT_EXTERN_METHOD(download:(NSString *)fileUrl
42
+ RCT_EXTERN_METHOD(cancelUpload:(NSString *)uuid
43
+ withShouldCancelAll:(BOOL*)shouldCancelAll)
44
+
45
+ RCT_EXTERN_METHOD(download:(NSString *)fileUrlu
43
46
  withOptions:(NSDictionary *)options
44
47
  withResolver:(RCTPromiseResolveBlock)resolve
45
48
  withRejecter:(RCTPromiseRejectBlock)reject)
@@ -86,6 +86,11 @@ class Compressor: RCTEventEmitter {
86
86
  uploader.upload(filePath: filePath, options: options, resolve: resolve, reject: reject)
87
87
  }
88
88
 
89
+ @objc(cancelUpload:withShouldCancelAll:)
90
+ func cancelUpload(uuid: String,shouldCancelAll:Bool) -> Void {
91
+ uploader.cancelUpload(uuid: uuid,shouldCancelAll: shouldCancelAll)
92
+ }
93
+
89
94
  @objc(download:withOptions:withResolver:withRejecter:)
90
95
  func download(filePath: String, options: [String: Any], resolve:@escaping RCTPromiseResolveBlock, reject:@escaping RCTPromiseRejectBlock) -> Void {
91
96
  Downloader.downloadFileAndSaveToCache(filePath, uuid: options["uuid"] as! String,progressDivider: options["progressDivider"] as? Int ?? 0) { downloadedPath in
@@ -29,6 +29,8 @@ struct UploadError: Error {
29
29
  class Uploader : NSObject, URLSessionTaskDelegate{
30
30
  var uploadResolvers: [String: RCTPromiseResolveBlock] = [:]
31
31
  var uploadRejectors: [String: RCTPromiseRejectBlock] = [:]
32
+ var currentTask: URLSessionDataTask?
33
+ private lazy var taskManager = UrlTaskManager()
32
34
 
33
35
  func upload(filePath: String, options: [String: Any], resolve:@escaping RCTPromiseResolveBlock, reject:@escaping RCTPromiseRejectBlock) -> Void {
34
36
  let fileUrl = Utils.makeValidUri(filePath: filePath)
@@ -97,10 +99,25 @@ class Uploader : NSObject, URLSessionTaskDelegate{
97
99
  let errorMessage = String(format: "Invalid upload type: '%@'.", options["uploadType"] as? String ?? "")
98
100
  reject("ERR_FILESYSTEM_INVALID_UPLOAD_TYPE", errorMessage, nil)
99
101
  }
100
-
102
+ taskManager.registerTask(task, uuid: uuid)
101
103
  task.resume()
102
104
 
103
105
  }
106
+
107
+ func cancelUpload(uuid:String,shouldCancelAll:Bool) {
108
+ if(shouldCancelAll==true)
109
+ {
110
+ taskManager.cancelAllTasks()
111
+ } else if(uuid=="")
112
+ {
113
+ taskManager.taskPop()?.cancel()
114
+ }
115
+ else
116
+ {
117
+ taskManager.uploadTaskForId(uuid)?.cancel()
118
+ }
119
+
120
+ }
104
121
 
105
122
  func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {
106
123
  guard let uuid = session.configuration.identifier else {return}
@@ -0,0 +1,58 @@
1
+ //
2
+ // UrlTaskManager.swift
3
+ // react-native-compressor
4
+ //
5
+ // Created by Numan on 14/11/2023.
6
+ //
7
+
8
+ import Foundation
9
+
10
+ class UrlTaskManager {
11
+ private var resumableDownloads:[String: URLSessionTask] = [:]
12
+
13
+ func registerTask(_ task: URLSessionTask, uuid: String) {
14
+ resumableDownloads[uuid] = task
15
+ }
16
+
17
+ func taskForId(_ uuid: String) -> URLSessionTask? {
18
+ return resumableDownloads[uuid]
19
+ }
20
+
21
+
22
+
23
+ // will use in future
24
+ func downloadTaskForId(_ uuid: String) -> URLSessionDownloadTask? {
25
+ let task = taskForId(uuid)
26
+ return task as? URLSessionDownloadTask
27
+ }
28
+
29
+ func uploadTaskForId(_ uuid: String) -> URLSessionUploadTask? {
30
+ let task = taskForId(uuid)
31
+ return task as? URLSessionUploadTask
32
+ }
33
+
34
+ func taskPop() -> URLSessionTask? {
35
+ if !resumableDownloads.isEmpty {
36
+ let uuids = Array(resumableDownloads.keys)
37
+ let lastUuid = uuids.last
38
+
39
+ if let lastTask = resumableDownloads[lastUuid!] {
40
+ resumableDownloads.removeValue(forKey: lastUuid!)
41
+ return lastTask
42
+ }
43
+ }
44
+
45
+ return nil
46
+ }
47
+
48
+ func unregisterTask(_ uuid: String) {
49
+ resumableDownloads.removeValue(forKey: uuid)
50
+ }
51
+
52
+ func cancelAllTasks() {
53
+ for (_, task) in resumableDownloads {
54
+ task.cancel()
55
+ }
56
+ resumableDownloads.removeAll()
57
+ }
58
+ }
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","_default","TurboModuleRegistry","getEnforcing","exports","default"],"sourceRoot":"../../../src","sources":["Spec/NativeCompressor.ts"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAAmD,IAAAC,QAAA,GAoCpCC,gCAAmB,CAACC,YAAY,CAAO,YAAY,CAAC;AAAAC,OAAA,CAAAC,OAAA,GAAAJ,QAAA"}
1
+ {"version":3,"names":["_reactNative","require","_default","TurboModuleRegistry","getEnforcing","exports","default"],"sourceRoot":"../../../src","sources":["Spec/NativeCompressor.ts"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAAmD,IAAAC,QAAA,GAsCpCC,gCAAmB,CAACC,YAAY,CAAO,YAAY,CAAC;AAAAC,OAAA,CAAAC,OAAA,GAAAJ,QAAA"}
@@ -39,6 +39,12 @@ Object.defineProperty(exports, "backgroundUpload", {
39
39
  return _utils.backgroundUpload;
40
40
  }
41
41
  });
42
+ Object.defineProperty(exports, "cancelUpload", {
43
+ enumerable: true,
44
+ get: function () {
45
+ return _utils.cancelUpload;
46
+ }
47
+ });
42
48
  Object.defineProperty(exports, "clearCache", {
43
49
  enumerable: true,
44
50
  get: function () {
@@ -1 +1 @@
1
- {"version":3,"names":["_Video","_interopRequireDefault","require","_Audio","_Image","_utils","obj","__esModule","default","_default","Video","Audio","Image","getDetails","uuidv4","generateFilePath","getRealPath","getVideoMetaData","getFileSize","backgroundUpload","createVideoThumbnail","clearCache","download","UploadType","UploaderHttpMethod","exports"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,MAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,MAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,MAAA,GAAAH,OAAA;AAaiB,SAAAD,uBAAAK,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAAA,IAAAG,QAAA,GAqBF;EACbC,KAAK,EAALA,cAAK;EACLC,KAAK,EAALA,cAAK;EACLC,KAAK,EAALA,cAAK;EACLC,UAAU,EAAVA,iBAAU;EACVC,MAAM,EAANA,aAAM;EACNC,gBAAgB,EAAhBA,uBAAgB;EAChBC,WAAW,EAAXA,kBAAW;EACXC,gBAAgB,EAAhBA,uBAAgB;EAChBC,WAAW,EAAXA,kBAAW;EACXC,gBAAgB,EAAhBA,uBAAgB;EAChBC,oBAAoB,EAApBA,2BAAoB;EACpBC,UAAU,EAAVA,iBAAU;EACVC,QAAQ,EAARA,eAAQ;EACRC,UAAU,EAAVA,iBAAU;EACVC,kBAAkB,EAAlBA;AACF,CAAC;AAAAC,OAAA,CAAAjB,OAAA,GAAAC,QAAA"}
1
+ {"version":3,"names":["_Video","_interopRequireDefault","require","_Audio","_Image","_utils","obj","__esModule","default","_default","Video","Audio","Image","getDetails","uuidv4","generateFilePath","getRealPath","getVideoMetaData","getFileSize","backgroundUpload","createVideoThumbnail","clearCache","download","UploadType","UploaderHttpMethod","exports"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,MAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,MAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,MAAA,GAAAH,OAAA;AAciB,SAAAD,uBAAAK,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAAA,IAAAG,QAAA,GAsBF;EACbC,KAAK,EAALA,cAAK;EACLC,KAAK,EAALA,cAAK;EACLC,KAAK,EAALA,cAAK;EACLC,UAAU,EAAVA,iBAAU;EACVC,MAAM,EAANA,aAAM;EACNC,gBAAgB,EAAhBA,uBAAgB;EAChBC,WAAW,EAAXA,kBAAW;EACXC,gBAAgB,EAAhBA,uBAAgB;EAChBC,WAAW,EAAXA,kBAAW;EACXC,gBAAgB,EAAhBA,uBAAgB;EAChBC,oBAAoB,EAApBA,2BAAoB;EACpBC,UAAU,EAAVA,iBAAU;EACVC,QAAQ,EAARA,eAAQ;EACRC,UAAU,EAAVA,iBAAU;EACVC,kBAAkB,EAAlBA;AACF,CAAC;AAAAC,OAAA,CAAAjB,OAAA,GAAAC,QAAA"}
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.backgroundUpload = exports.UploaderHttpMethod = exports.UploadType = void 0;
6
+ exports.cancelUpload = exports.backgroundUpload = exports.UploaderHttpMethod = exports.UploadType = void 0;
7
7
  var _reactNative = require("react-native");
8
8
  var _Main = require("../Main");
9
9
  var _index = require("./index");
@@ -21,7 +21,13 @@ let UploaderHttpMethod = /*#__PURE__*/function (UploaderHttpMethod) {
21
21
  return UploaderHttpMethod;
22
22
  }({});
23
23
  exports.UploaderHttpMethod = UploaderHttpMethod;
24
- const backgroundUpload = async (url, fileUrl, options, onProgress) => {
24
+ const cancelUpload = function () {
25
+ let uuid = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
26
+ let shouldCancelAll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
27
+ return _Main.Compressor.cancelUpload(uuid, shouldCancelAll);
28
+ };
29
+ exports.cancelUpload = cancelUpload;
30
+ const backgroundUpload = async (url, fileUrl, options, onProgress, abortSignal) => {
25
31
  const uuid = (0, _index.uuidv4)();
26
32
  let subscription;
27
33
  try {
@@ -35,6 +41,10 @@ const backgroundUpload = async (url, fileUrl, options, onProgress) => {
35
41
  if (_reactNative.Platform.OS === 'android' && fileUrl.includes('file://')) {
36
42
  fileUrl = fileUrl.replace('file://', '');
37
43
  }
44
+ if (options !== null && options !== void 0 && options.getCancellationId) {
45
+ options === null || options === void 0 ? void 0 : options.getCancellationId(uuid);
46
+ }
47
+ abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.addEventListener('abort', () => cancelUpload(uuid));
38
48
  const result = await _Main.Compressor.upload(fileUrl, {
39
49
  uuid,
40
50
  method: options.httpMethod,
@@ -49,6 +59,7 @@ const backgroundUpload = async (url, fileUrl, options, onProgress) => {
49
59
  if (subscription) {
50
60
  subscription.remove();
51
61
  }
62
+ abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.removeEventListener('abort', () => cancelUpload(uuid));
52
63
  }
53
64
  };
54
65
  exports.backgroundUpload = backgroundUpload;
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","_Main","_index","CompressEventEmitter","NativeEventEmitter","Compressor","UploadType","exports","UploaderHttpMethod","backgroundUpload","url","fileUrl","options","onProgress","uuid","uuidv4","subscription","addListener","event","data","written","total","Platform","OS","includes","replace","result","upload","method","httpMethod","headers","uploadType","remove"],"sourceRoot":"../../../src","sources":["utils/Uploader.tsx"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAEA,IAAAC,KAAA,GAAAD,OAAA;AAEA,IAAAE,MAAA,GAAAF,OAAA;AADA,MAAMG,oBAAoB,GAAG,IAAIC,+BAAkB,CAACC,gBAAU,CAAC;AAAC,IAEpDC,UAAU,0BAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAA,OAAVA,UAAU;AAAA;AAAAC,OAAA,CAAAD,UAAA,GAAAA,UAAA;AAAA,IAKVE,kBAAkB,0BAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAA,OAAlBA,kBAAkB;AAAA;AAAAD,OAAA,CAAAC,kBAAA,GAAAA,kBAAA;AA8BvB,MAAMC,gBAAgB,GAAG,MAAAA,CAC9BC,GAAW,EACXC,OAAe,EACfC,OAAwB,EACxBC,UAAqD,KACpC;EACjB,MAAMC,IAAI,GAAG,IAAAC,aAAM,EAAC,CAAC;EACrB,IAAIC,YAAqC;EACzC,IAAI;IACF,IAAIH,UAAU,EAAE;MACdG,YAAY,GAAGb,oBAAoB,CAACc,WAAW,CAC7C,gBAAgB,EACfC,KAAU,IAAK;QACd,IAAIA,KAAK,CAACJ,IAAI,KAAKA,IAAI,EAAE;UACvBD,UAAU,CAACK,KAAK,CAACC,IAAI,CAACC,OAAO,EAAEF,KAAK,CAACC,IAAI,CAACE,KAAK,CAAC;QAClD;MACF,CACF,CAAC;IACH;IACA,IAAIC,qBAAQ,CAACC,EAAE,KAAK,SAAS,IAAIZ,OAAO,CAACa,QAAQ,CAAC,SAAS,CAAC,EAAE;MAC5Db,OAAO,GAAGA,OAAO,CAACc,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;IAC1C;IACA,MAAMC,MAAM,GAAG,MAAMrB,gBAAU,CAACsB,MAAM,CAAChB,OAAO,EAAE;MAC9CG,IAAI;MACJc,MAAM,EAAEhB,OAAO,CAACiB,UAAU;MAC1BC,OAAO,EAAElB,OAAO,CAACkB,OAAO;MACxBC,UAAU,EAAEnB,OAAO,CAACmB,UAAU;MAC9B,GAAGnB,OAAO;MACVF;IACF,CAAC,CAAC;IACF,OAAOgB,MAAM;EACf,CAAC,SAAS;IACR;IACA,IAAIV,YAAY,EAAE;MAChBA,YAAY,CAACgB,MAAM,CAAC,CAAC;IACvB;EACF;AACF,CAAC;AAACzB,OAAA,CAAAE,gBAAA,GAAAA,gBAAA"}
1
+ {"version":3,"names":["_reactNative","require","_Main","_index","CompressEventEmitter","NativeEventEmitter","Compressor","UploadType","exports","UploaderHttpMethod","cancelUpload","uuid","arguments","length","undefined","shouldCancelAll","backgroundUpload","url","fileUrl","options","onProgress","abortSignal","uuidv4","subscription","addListener","event","data","written","total","Platform","OS","includes","replace","getCancellationId","addEventListener","result","upload","method","httpMethod","headers","uploadType","remove","removeEventListener"],"sourceRoot":"../../../src","sources":["utils/Uploader.tsx"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAEA,IAAAC,KAAA,GAAAD,OAAA;AAEA,IAAAE,MAAA,GAAAF,OAAA;AADA,MAAMG,oBAAoB,GAAG,IAAIC,+BAAkB,CAACC,gBAAU,CAAC;AAAC,IAEpDC,UAAU,0BAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAA,OAAVA,UAAU;AAAA;AAAAC,OAAA,CAAAD,UAAA,GAAAA,UAAA;AAAA,IAKVE,kBAAkB,0BAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAA,OAAlBA,kBAAkB;AAAA;AAAAD,OAAA,CAAAC,kBAAA,GAAAA,kBAAA;AA+BvB,MAAMC,YAGJ,GAAG,SAAAA,CAAA,EAAwC;EAAA,IAAvCC,IAAI,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,EAAE;EAAA,IAAEG,eAAe,GAAAH,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,KAAK;EAC7C,OAAON,gBAAU,CAACI,YAAY,CAACC,IAAI,EAAEI,eAAe,CAAC;AACvD,CAAC;AAACP,OAAA,CAAAE,YAAA,GAAAA,YAAA;AAEK,MAAMM,gBAAgB,GAAG,MAAAA,CAC9BC,GAAW,EACXC,OAAe,EACfC,OAAwB,EACxBC,UAAqD,EACrDC,WAAyB,KACR;EACjB,MAAMV,IAAI,GAAG,IAAAW,aAAM,EAAC,CAAC;EACrB,IAAIC,YAAqC;EACzC,IAAI;IACF,IAAIH,UAAU,EAAE;MACdG,YAAY,GAAGnB,oBAAoB,CAACoB,WAAW,CAC7C,gBAAgB,EACfC,KAAU,IAAK;QACd,IAAIA,KAAK,CAACd,IAAI,KAAKA,IAAI,EAAE;UACvBS,UAAU,CAACK,KAAK,CAACC,IAAI,CAACC,OAAO,EAAEF,KAAK,CAACC,IAAI,CAACE,KAAK,CAAC;QAClD;MACF,CACF,CAAC;IACH;IACA,IAAIC,qBAAQ,CAACC,EAAE,KAAK,SAAS,IAAIZ,OAAO,CAACa,QAAQ,CAAC,SAAS,CAAC,EAAE;MAC5Db,OAAO,GAAGA,OAAO,CAACc,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;IAC1C;IAEA,IAAIb,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAEc,iBAAiB,EAAE;MAC9Bd,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEc,iBAAiB,CAACtB,IAAI,CAAC;IAClC;IAEAU,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAEa,gBAAgB,CAAC,OAAO,EAAE,MAAMxB,YAAY,CAACC,IAAI,CAAC,CAAC;IAEhE,MAAMwB,MAAM,GAAG,MAAM7B,gBAAU,CAAC8B,MAAM,CAAClB,OAAO,EAAE;MAC9CP,IAAI;MACJ0B,MAAM,EAAElB,OAAO,CAACmB,UAAU;MAC1BC,OAAO,EAAEpB,OAAO,CAACoB,OAAO;MACxBC,UAAU,EAAErB,OAAO,CAACqB,UAAU;MAC9B,GAAGrB,OAAO;MACVF;IACF,CAAC,CAAC;IACF,OAAOkB,MAAM;EACf,CAAC,SAAS;IACR;IACA,IAAIZ,YAAY,EAAE;MAChBA,YAAY,CAACkB,MAAM,CAAC,CAAC;IACvB;IACApB,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAEqB,mBAAmB,CAAC,OAAO,EAAE,MAAMhC,YAAY,CAACC,IAAI,CAAC,CAAC;EACrE;AACF,CAAC;AAACH,OAAA,CAAAQ,gBAAA,GAAAA,gBAAA"}
@@ -1 +1 @@
1
- {"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../../src","sources":["Spec/NativeCompressor.ts"],"mappings":"AACA,SAASA,mBAAmB,QAAQ,cAAc;AAoClD,eAAeA,mBAAmB,CAACC,YAAY,CAAO,YAAY,CAAC"}
1
+ {"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../../src","sources":["Spec/NativeCompressor.ts"],"mappings":"AACA,SAASA,mBAAmB,QAAQ,cAAc;AAsClD,eAAeA,mBAAmB,CAACC,YAAY,CAAO,YAAY,CAAC"}
@@ -1,8 +1,8 @@
1
1
  import Video from './Video';
2
2
  import Audio from './Audio';
3
3
  import Image from './Image';
4
- import { getDetails, uuidv4, generateFilePath, getRealPath, getVideoMetaData, getFileSize, backgroundUpload, createVideoThumbnail, download, clearCache, UploadType, UploaderHttpMethod } from './utils';
5
- export { Video, Audio, Image, backgroundUpload, download,
4
+ import { getDetails, uuidv4, generateFilePath, getRealPath, getVideoMetaData, getFileSize, backgroundUpload, cancelUpload, createVideoThumbnail, download, clearCache, UploadType, UploaderHttpMethod } from './utils';
5
+ export { Video, Audio, Image, backgroundUpload, cancelUpload, download,
6
6
  //type
7
7
  getDetails, uuidv4, generateFilePath, getRealPath, getVideoMetaData, createVideoThumbnail, clearCache, getFileSize, UploadType, UploaderHttpMethod };
8
8
  export default {
@@ -1 +1 @@
1
- {"version":3,"names":["Video","Audio","Image","getDetails","uuidv4","generateFilePath","getRealPath","getVideoMetaData","getFileSize","backgroundUpload","createVideoThumbnail","download","clearCache","UploadType","UploaderHttpMethod"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"AAAA,OAAOA,KAAK,MAAM,SAAS;AAE3B,OAAOC,KAAK,MAAM,SAAS;AAC3B,OAAOC,KAAK,MAAM,SAAS;AAC3B,SACEC,UAAU,EACVC,MAAM,EACNC,gBAAgB,EAChBC,WAAW,EACXC,gBAAgB,EAChBC,WAAW,EACXC,gBAAgB,EAChBC,oBAAoB,EACpBC,QAAQ,EACRC,UAAU,EACVC,UAAU,EACVC,kBAAkB,QACb,SAAS;AAEhB,SACEd,KAAK,EACLC,KAAK,EACLC,KAAK,EACLO,gBAAgB,EAChBE,QAAQ;AACR;AACAR,UAAU,EACVC,MAAM,EACNC,gBAAgB,EAChBC,WAAW,EACXC,gBAAgB,EAChBG,oBAAoB,EACpBE,UAAU,EACVJ,WAAW,EACXK,UAAU,EACVC,kBAAkB;AAGpB,eAAe;EACbd,KAAK;EACLC,KAAK;EACLC,KAAK;EACLC,UAAU;EACVC,MAAM;EACNC,gBAAgB;EAChBC,WAAW;EACXC,gBAAgB;EAChBC,WAAW;EACXC,gBAAgB;EAChBC,oBAAoB;EACpBE,UAAU;EACVD,QAAQ;EACRE,UAAU;EACVC;AACF,CAAC"}
1
+ {"version":3,"names":["Video","Audio","Image","getDetails","uuidv4","generateFilePath","getRealPath","getVideoMetaData","getFileSize","backgroundUpload","cancelUpload","createVideoThumbnail","download","clearCache","UploadType","UploaderHttpMethod"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"AAAA,OAAOA,KAAK,MAAM,SAAS;AAE3B,OAAOC,KAAK,MAAM,SAAS;AAC3B,OAAOC,KAAK,MAAM,SAAS;AAC3B,SACEC,UAAU,EACVC,MAAM,EACNC,gBAAgB,EAChBC,WAAW,EACXC,gBAAgB,EAChBC,WAAW,EACXC,gBAAgB,EAChBC,YAAY,EACZC,oBAAoB,EACpBC,QAAQ,EACRC,UAAU,EACVC,UAAU,EACVC,kBAAkB,QACb,SAAS;AAEhB,SACEf,KAAK,EACLC,KAAK,EACLC,KAAK,EACLO,gBAAgB,EAChBC,YAAY,EACZE,QAAQ;AACR;AACAT,UAAU,EACVC,MAAM,EACNC,gBAAgB,EAChBC,WAAW,EACXC,gBAAgB,EAChBI,oBAAoB,EACpBE,UAAU,EACVL,WAAW,EACXM,UAAU,EACVC,kBAAkB;AAGpB,eAAe;EACbf,KAAK;EACLC,KAAK;EACLC,KAAK;EACLC,UAAU;EACVC,MAAM;EACNC,gBAAgB;EAChBC,WAAW;EACXC,gBAAgB;EAChBC,WAAW;EACXC,gBAAgB;EAChBE,oBAAoB;EACpBE,UAAU;EACVD,QAAQ;EACRE,UAAU;EACVC;AACF,CAAC"}
@@ -13,7 +13,12 @@ export let UploaderHttpMethod = /*#__PURE__*/function (UploaderHttpMethod) {
13
13
  UploaderHttpMethod["PATCH"] = "PATCH";
14
14
  return UploaderHttpMethod;
15
15
  }({});
16
- export const backgroundUpload = async (url, fileUrl, options, onProgress) => {
16
+ export const cancelUpload = function () {
17
+ let uuid = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
18
+ let shouldCancelAll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
19
+ return Compressor.cancelUpload(uuid, shouldCancelAll);
20
+ };
21
+ export const backgroundUpload = async (url, fileUrl, options, onProgress, abortSignal) => {
17
22
  const uuid = uuidv4();
18
23
  let subscription;
19
24
  try {
@@ -27,6 +32,10 @@ export const backgroundUpload = async (url, fileUrl, options, onProgress) => {
27
32
  if (Platform.OS === 'android' && fileUrl.includes('file://')) {
28
33
  fileUrl = fileUrl.replace('file://', '');
29
34
  }
35
+ if (options !== null && options !== void 0 && options.getCancellationId) {
36
+ options === null || options === void 0 ? void 0 : options.getCancellationId(uuid);
37
+ }
38
+ abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.addEventListener('abort', () => cancelUpload(uuid));
30
39
  const result = await Compressor.upload(fileUrl, {
31
40
  uuid,
32
41
  method: options.httpMethod,
@@ -41,6 +50,7 @@ export const backgroundUpload = async (url, fileUrl, options, onProgress) => {
41
50
  if (subscription) {
42
51
  subscription.remove();
43
52
  }
53
+ abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.removeEventListener('abort', () => cancelUpload(uuid));
44
54
  }
45
55
  };
46
56
  //# sourceMappingURL=Uploader.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["NativeEventEmitter","Platform","Compressor","CompressEventEmitter","uuidv4","UploadType","UploaderHttpMethod","backgroundUpload","url","fileUrl","options","onProgress","uuid","subscription","addListener","event","data","written","total","OS","includes","replace","result","upload","method","httpMethod","headers","uploadType","remove"],"sourceRoot":"../../../src","sources":["utils/Uploader.tsx"],"mappings":"AAAA,SAASA,kBAAkB,EAAEC,QAAQ,QAAQ,cAAc;AAE3D,SAASC,UAAU,QAAQ,SAAS;AACpC,MAAMC,oBAAoB,GAAG,IAAIH,kBAAkB,CAACE,UAAU,CAAC;AAC/D,SAASE,MAAM,QAAQ,SAAS;AAChC,WAAYC,UAAU,0BAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAA,OAAVA,UAAU;AAAA;AAKtB,WAAYC,kBAAkB,0BAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAA,OAAlBA,kBAAkB;AAAA;AA8B9B,OAAO,MAAMC,gBAAgB,GAAG,MAAAA,CAC9BC,GAAW,EACXC,OAAe,EACfC,OAAwB,EACxBC,UAAqD,KACpC;EACjB,MAAMC,IAAI,GAAGR,MAAM,CAAC,CAAC;EACrB,IAAIS,YAAqC;EACzC,IAAI;IACF,IAAIF,UAAU,EAAE;MACdE,YAAY,GAAGV,oBAAoB,CAACW,WAAW,CAC7C,gBAAgB,EACfC,KAAU,IAAK;QACd,IAAIA,KAAK,CAACH,IAAI,KAAKA,IAAI,EAAE;UACvBD,UAAU,CAACI,KAAK,CAACC,IAAI,CAACC,OAAO,EAAEF,KAAK,CAACC,IAAI,CAACE,KAAK,CAAC;QAClD;MACF,CACF,CAAC;IACH;IACA,IAAIjB,QAAQ,CAACkB,EAAE,KAAK,SAAS,IAAIV,OAAO,CAACW,QAAQ,CAAC,SAAS,CAAC,EAAE;MAC5DX,OAAO,GAAGA,OAAO,CAACY,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;IAC1C;IACA,MAAMC,MAAM,GAAG,MAAMpB,UAAU,CAACqB,MAAM,CAACd,OAAO,EAAE;MAC9CG,IAAI;MACJY,MAAM,EAAEd,OAAO,CAACe,UAAU;MAC1BC,OAAO,EAAEhB,OAAO,CAACgB,OAAO;MACxBC,UAAU,EAAEjB,OAAO,CAACiB,UAAU;MAC9B,GAAGjB,OAAO;MACVF;IACF,CAAC,CAAC;IACF,OAAOc,MAAM;EACf,CAAC,SAAS;IACR;IACA,IAAIT,YAAY,EAAE;MAChBA,YAAY,CAACe,MAAM,CAAC,CAAC;IACvB;EACF;AACF,CAAC"}
1
+ {"version":3,"names":["NativeEventEmitter","Platform","Compressor","CompressEventEmitter","uuidv4","UploadType","UploaderHttpMethod","cancelUpload","uuid","arguments","length","undefined","shouldCancelAll","backgroundUpload","url","fileUrl","options","onProgress","abortSignal","subscription","addListener","event","data","written","total","OS","includes","replace","getCancellationId","addEventListener","result","upload","method","httpMethod","headers","uploadType","remove","removeEventListener"],"sourceRoot":"../../../src","sources":["utils/Uploader.tsx"],"mappings":"AAAA,SAASA,kBAAkB,EAAEC,QAAQ,QAAQ,cAAc;AAE3D,SAASC,UAAU,QAAQ,SAAS;AACpC,MAAMC,oBAAoB,GAAG,IAAIH,kBAAkB,CAACE,UAAU,CAAC;AAC/D,SAASE,MAAM,QAAQ,SAAS;AAChC,WAAYC,UAAU,0BAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAA,OAAVA,UAAU;AAAA;AAKtB,WAAYC,kBAAkB,0BAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAA,OAAlBA,kBAAkB;AAAA;AA+B9B,OAAO,MAAMC,YAGJ,GAAG,SAAAA,CAAA,EAAwC;EAAA,IAAvCC,IAAI,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,EAAE;EAAA,IAAEG,eAAe,GAAAH,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,KAAK;EAC7C,OAAOP,UAAU,CAACK,YAAY,CAACC,IAAI,EAAEI,eAAe,CAAC;AACvD,CAAC;AAED,OAAO,MAAMC,gBAAgB,GAAG,MAAAA,CAC9BC,GAAW,EACXC,OAAe,EACfC,OAAwB,EACxBC,UAAqD,EACrDC,WAAyB,KACR;EACjB,MAAMV,IAAI,GAAGJ,MAAM,CAAC,CAAC;EACrB,IAAIe,YAAqC;EACzC,IAAI;IACF,IAAIF,UAAU,EAAE;MACdE,YAAY,GAAGhB,oBAAoB,CAACiB,WAAW,CAC7C,gBAAgB,EACfC,KAAU,IAAK;QACd,IAAIA,KAAK,CAACb,IAAI,KAAKA,IAAI,EAAE;UACvBS,UAAU,CAACI,KAAK,CAACC,IAAI,CAACC,OAAO,EAAEF,KAAK,CAACC,IAAI,CAACE,KAAK,CAAC;QAClD;MACF,CACF,CAAC;IACH;IACA,IAAIvB,QAAQ,CAACwB,EAAE,KAAK,SAAS,IAAIV,OAAO,CAACW,QAAQ,CAAC,SAAS,CAAC,EAAE;MAC5DX,OAAO,GAAGA,OAAO,CAACY,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;IAC1C;IAEA,IAAIX,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAEY,iBAAiB,EAAE;MAC9BZ,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEY,iBAAiB,CAACpB,IAAI,CAAC;IAClC;IAEAU,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAEW,gBAAgB,CAAC,OAAO,EAAE,MAAMtB,YAAY,CAACC,IAAI,CAAC,CAAC;IAEhE,MAAMsB,MAAM,GAAG,MAAM5B,UAAU,CAAC6B,MAAM,CAAChB,OAAO,EAAE;MAC9CP,IAAI;MACJwB,MAAM,EAAEhB,OAAO,CAACiB,UAAU;MAC1BC,OAAO,EAAElB,OAAO,CAACkB,OAAO;MACxBC,UAAU,EAAEnB,OAAO,CAACmB,UAAU;MAC9B,GAAGnB,OAAO;MACVF;IACF,CAAC,CAAC;IACF,OAAOgB,MAAM;EACf,CAAC,SAAS;IACR;IACA,IAAIX,YAAY,EAAE;MAChBA,YAAY,CAACiB,MAAM,CAAC,CAAC;IACvB;IACAlB,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAEmB,mBAAmB,CAAC,OAAO,EAAE,MAAM9B,YAAY,CAACC,IAAI,CAAC,CAAC;EACrE;AACF,CAAC"}
@@ -8,6 +8,7 @@ export interface Spec extends TurboModule {
8
8
  deactivateBackgroundTask(options: Object): Promise<string>;
9
9
  compress_audio(fileUrl: string, optionMap: Object): Promise<string>;
10
10
  upload(fileUrl: string, options: Object): Promise<string>;
11
+ cancelUpload(uuid: string, shouldCancelAll: boolean): void;
11
12
  download(fileUrl: string, options: Object): Promise<string>;
12
13
  generateFilePath(_extension: string): Promise<string>;
13
14
  getRealPath(path: string, type: string): Promise<string>;
@@ -1 +1 @@
1
- {"version":3,"file":"NativeCompressor.d.ts","sourceRoot":"","sources":["../../../src/Spec/NativeCompressor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,MAAM,WAAW,IAAK,SAAQ,WAAW;IAEvC,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEtE,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9D,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACpD,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACzD,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE3D,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEpE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE1D,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE5D,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACtD,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACzD,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/C,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,oBAAoB,CAClB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;QACT,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACtD;;AAED,wBAAoE"}
1
+ {"version":3,"file":"NativeCompressor.d.ts","sourceRoot":"","sources":["../../../src/Spec/NativeCompressor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,MAAM,WAAW,IAAK,SAAQ,WAAW;IAEvC,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEtE,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9D,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACpD,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACzD,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE3D,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEpE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE1D,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,GAAG,IAAI,CAAC;IAE3D,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE5D,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACtD,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACzD,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/C,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,oBAAoB,CAClB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;QACT,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACtD;;AAED,wBAAoE"}
@@ -2,8 +2,8 @@ import Video from './Video';
2
2
  import type { VideoCompressorType } from './Video';
3
3
  import Audio from './Audio';
4
4
  import Image from './Image';
5
- import { getDetails, uuidv4, generateFilePath, getRealPath, getVideoMetaData, getFileSize, backgroundUpload, createVideoThumbnail, download, clearCache, UploadType, UploaderHttpMethod } from './utils';
6
- export { Video, Audio, Image, backgroundUpload, download, getDetails, uuidv4, generateFilePath, getRealPath, getVideoMetaData, createVideoThumbnail, clearCache, getFileSize, UploadType, UploaderHttpMethod, };
5
+ import { getDetails, uuidv4, generateFilePath, getRealPath, getVideoMetaData, getFileSize, backgroundUpload, cancelUpload, createVideoThumbnail, download, clearCache, UploadType, UploaderHttpMethod } from './utils';
6
+ export { Video, Audio, Image, backgroundUpload, cancelUpload, download, getDetails, uuidv4, generateFilePath, getRealPath, getVideoMetaData, createVideoThumbnail, clearCache, getFileSize, UploadType, UploaderHttpMethod, };
7
7
  export type { VideoCompressorType };
8
8
  declare const _default: {
9
9
  Video: VideoCompressorType;
@@ -23,7 +23,7 @@ declare const _default: {
23
23
  height: number;
24
24
  }>;
25
25
  getFileSize: (filePath: string) => Promise<string>;
26
- backgroundUpload: (url: string, fileUrl: string, options: import("./utils").UploaderOptions, onProgress?: ((writtem: number, total: number) => void) | undefined) => Promise<any>;
26
+ backgroundUpload: (url: string, fileUrl: string, options: import("./utils").UploaderOptions, onProgress?: ((writtem: number, total: number) => void) | undefined, abortSignal?: AbortSignal | undefined) => Promise<any>;
27
27
  createVideoThumbnail: (fileUrl: string, options?: {
28
28
  headers?: {
29
29
  [key: string]: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,SAAS,CAAC;AAC5B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,KAAK,MAAM,SAAS,CAAC;AAC5B,OAAO,KAAK,MAAM,SAAS,CAAC;AAC5B,OAAO,EACL,UAAU,EACV,MAAM,EACN,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,oBAAoB,EACpB,QAAQ,EACR,UAAU,EACV,UAAU,EACV,kBAAkB,EACnB,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,gBAAgB,EAChB,QAAQ,EAER,UAAU,EACV,MAAM,EACN,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,oBAAoB,EACpB,UAAU,EACV,WAAW,EACX,UAAU,EACV,kBAAkB,GACnB,CAAC;AACF,YAAY,EAAE,mBAAmB,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACpC,wBAgBE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,SAAS,CAAC;AAC5B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,KAAK,MAAM,SAAS,CAAC;AAC5B,OAAO,KAAK,MAAM,SAAS,CAAC;AAC5B,OAAO,EACL,UAAU,EACV,MAAM,EACN,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,oBAAoB,EACpB,QAAQ,EACR,UAAU,EACV,UAAU,EACV,kBAAkB,EACnB,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,gBAAgB,EAChB,YAAY,EACZ,QAAQ,EAER,UAAU,EACV,MAAM,EACN,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,oBAAoB,EACpB,UAAU,EACV,WAAW,EACX,UAAU,EACV,kBAAkB,GACnB,CAAC;AACF,YAAY,EAAE,mBAAmB,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACpC,wBAgBE"}
@@ -24,6 +24,8 @@ export declare type UploaderOptions = ({
24
24
  }) & {
25
25
  headers?: Record<string, string>;
26
26
  httpMethod?: UploaderHttpMethod | HttpMethod;
27
+ getCancellationId?: (cancellationId: string) => void;
27
28
  };
28
- export declare const backgroundUpload: (url: string, fileUrl: string, options: UploaderOptions, onProgress?: ((writtem: number, total: number) => void) | undefined) => Promise<any>;
29
+ export declare const cancelUpload: (uuid?: string, shouldCancelAll?: boolean) => void;
30
+ export declare const backgroundUpload: (url: string, fileUrl: string, options: UploaderOptions, onProgress?: ((writtem: number, total: number) => void) | undefined, abortSignal?: AbortSignal) => Promise<any>;
29
31
  //# sourceMappingURL=Uploader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Uploader.d.ts","sourceRoot":"","sources":["../../../src/utils/Uploader.tsx"],"names":[],"mappings":"AAKA,oBAAY,UAAU;IACpB,cAAc,IAAI;IAClB,SAAS,IAAI;CACd;AAED,oBAAY,kBAAkB;IAC5B,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,KAAK,UAAU;CAChB;AAED,MAAM,CAAC,OAAO,MAAM,YAAY,GAAG;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,CAAC,OAAO,MAAM,UAAU,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,CAAC;AAE1D,MAAM,CAAC,OAAO,MAAM,eAAe,GAAG,CAClC;IACE,UAAU,CAAC,EAAE,UAAU,CAAC,cAAc,CAAC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GACD;IACE,UAAU,EAAE,UAAU,CAAC,SAAS,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC,CACJ,GAAG;IACF,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,UAAU,CAAC,EAAE,kBAAkB,GAAG,UAAU,CAAC;CAC9C,CAAC;AAEF,eAAO,MAAM,gBAAgB,QACtB,MAAM,WACF,MAAM,WACN,eAAe,0BACD,MAAM,SAAS,MAAM,KAAK,IAAI,kBACpD,QAAQ,GAAG,CAgCb,CAAC"}
1
+ {"version":3,"file":"Uploader.d.ts","sourceRoot":"","sources":["../../../src/utils/Uploader.tsx"],"names":[],"mappings":"AAKA,oBAAY,UAAU;IACpB,cAAc,IAAI;IAClB,SAAS,IAAI;CACd;AAED,oBAAY,kBAAkB;IAC5B,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,KAAK,UAAU;CAChB;AAED,MAAM,CAAC,OAAO,MAAM,YAAY,GAAG;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,CAAC,OAAO,MAAM,UAAU,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,CAAC;AAE1D,MAAM,CAAC,OAAO,MAAM,eAAe,GAAG,CAClC;IACE,UAAU,CAAC,EAAE,UAAU,CAAC,cAAc,CAAC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GACD;IACE,UAAU,EAAE,UAAU,CAAC,SAAS,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC,CACJ,GAAG;IACF,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,UAAU,CAAC,EAAE,kBAAkB,GAAG,UAAU,CAAC;IAC7C,iBAAiB,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;CACtD,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,CACzB,IAAI,CAAC,EAAE,MAAM,EACb,eAAe,CAAC,EAAE,OAAO,KACtB,IAEJ,CAAC;AAEF,eAAO,MAAM,gBAAgB,QACtB,MAAM,WACF,MAAM,WACN,eAAe,0BACD,MAAM,SAAS,MAAM,KAAK,IAAI,6BACvC,WAAW,KACxB,QAAQ,GAAG,CAwCb,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-compressor",
3
- "version": "1.8.17",
3
+ "version": "1.8.19",
4
4
  "description": "This library compress image, video and audio",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -55,7 +55,18 @@
55
55
  "react-native-compressor",
56
56
  "compress-audio",
57
57
  "whatsapp",
58
- "compressor"
58
+ "compressor",
59
+ "background",
60
+ "NSURLSession",
61
+ "uploader",
62
+ "upload",
63
+ "UploadService",
64
+ "downloader",
65
+ "download",
66
+ "thumbnail",
67
+ "create-thumbnail",
68
+ "video-metadata",
69
+ "media"
59
70
  ],
60
71
  "repository": "https://github.com/numandev1/react-native-compressor",
61
72
  "author": "numandev1 <muhammadnuman70@gmail.com> (https://github.com/numandev1)",
@@ -14,6 +14,8 @@ export interface Spec extends TurboModule {
14
14
  compress_audio(fileUrl: string, optionMap: Object): Promise<string>;
15
15
  // Upload
16
16
  upload(fileUrl: string, options: Object): Promise<string>;
17
+ // Cancel upload
18
+ cancelUpload(uuid: string, shouldCancelAll: boolean): void;
17
19
  // Download
18
20
  download(fileUrl: string, options: Object): Promise<string>;
19
21
  // Others
package/src/index.tsx CHANGED
@@ -10,6 +10,7 @@ import {
10
10
  getVideoMetaData,
11
11
  getFileSize,
12
12
  backgroundUpload,
13
+ cancelUpload,
13
14
  createVideoThumbnail,
14
15
  download,
15
16
  clearCache,
@@ -22,6 +23,7 @@ export {
22
23
  Audio,
23
24
  Image,
24
25
  backgroundUpload,
26
+ cancelUpload,
25
27
  download,
26
28
  //type
27
29
  getDetails,
@@ -36,13 +36,22 @@ export declare type UploaderOptions = (
36
36
  ) & {
37
37
  headers?: Record<string, string>;
38
38
  httpMethod?: UploaderHttpMethod | HttpMethod;
39
+ getCancellationId?: (cancellationId: string) => void;
40
+ };
41
+
42
+ export const cancelUpload: (
43
+ uuid?: string,
44
+ shouldCancelAll?: boolean
45
+ ) => void = (uuid = '', shouldCancelAll = false) => {
46
+ return Compressor.cancelUpload(uuid, shouldCancelAll);
39
47
  };
40
48
 
41
49
  export const backgroundUpload = async (
42
50
  url: string,
43
51
  fileUrl: string,
44
52
  options: UploaderOptions,
45
- onProgress?: (writtem: number, total: number) => void
53
+ onProgress?: (writtem: number, total: number) => void,
54
+ abortSignal?: AbortSignal
46
55
  ): Promise<any> => {
47
56
  const uuid = uuidv4();
48
57
  let subscription: NativeEventSubscription;
@@ -60,6 +69,13 @@ export const backgroundUpload = async (
60
69
  if (Platform.OS === 'android' && fileUrl.includes('file://')) {
61
70
  fileUrl = fileUrl.replace('file://', '');
62
71
  }
72
+
73
+ if (options?.getCancellationId) {
74
+ options?.getCancellationId(uuid);
75
+ }
76
+
77
+ abortSignal?.addEventListener('abort', () => cancelUpload(uuid));
78
+
63
79
  const result = await Compressor.upload(fileUrl, {
64
80
  uuid,
65
81
  method: options.httpMethod,
@@ -74,5 +90,6 @@ export const backgroundUpload = async (
74
90
  if (subscription) {
75
91
  subscription.remove();
76
92
  }
93
+ abortSignal?.removeEventListener('abort', () => cancelUpload(uuid));
77
94
  }
78
95
  };