@uploadcare/upload-client 3.0.0 → 3.1.2-alpha.0

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
@@ -397,6 +397,21 @@ This setting is needed for correct multipart uploads.
397
397
 
398
398
  Defaults to `application/octet-stream`.
399
399
 
400
+ ### `metadata: Metadata`
401
+
402
+ ```typescript
403
+ type Metadata = {
404
+ [key: string]: string
405
+ }
406
+ ```
407
+
408
+ Metadata is additional, arbitrary data, associated with uploaded file.
409
+
410
+ Non-string values will be converted to `string`. `undefined` values will be ignored.
411
+
412
+ See [REST API reference][uc-docs-metadata] for details.
413
+
414
+
400
415
  ## Testing
401
416
 
402
417
  ```
@@ -458,3 +473,4 @@ request at [hello@uploadcare.com][uc-email-hello].
458
473
  [badge-build]: https://github.com/uploadcare/uploadcare-upload-client/actions/workflows/checks.yml/badge.svg
459
474
  [build-url]: https://github.com/uploadcare/uploadcare-upload-client/actions/workflows/checks.yml
460
475
  [uc-docs-upload-api]: https://uploadcare.com/docs/api_reference/upload/?utm_source=github&utm_campaign=uploadcare-upload-client
476
+ [uc-docs-metadata]: https://uploadcare.com/api-refs/rest-api/v0.7.0/#tag/File-Metadata
@@ -176,31 +176,90 @@ function identity(obj) {
176
176
  return obj;
177
177
  }
178
178
 
179
+ var getFileOptions = function (_a) {
180
+ var name = _a.name;
181
+ return name ? [name] : [];
182
+ };
179
183
  var transformFile = identity;
180
184
  var getFormData = (function () { return new FormData(); });
181
185
 
182
- var isFileTuple = function (tuple) {
183
- return tuple[0] === 'file';
186
+ /**
187
+ * FileData type guard.
188
+ */
189
+ var isFileData = function (data) {
190
+ return (data !== undefined &&
191
+ ((typeof Blob !== 'undefined' && data instanceof Blob) ||
192
+ (typeof File !== 'undefined' && data instanceof File) ||
193
+ (typeof Buffer !== 'undefined' && data instanceof Buffer)));
184
194
  };
185
- function buildFormData(body) {
186
- var formData = getFormData();
187
- var _loop_1 = function (tuple) {
188
- if (Array.isArray(tuple[1])) {
189
- // refactor this
190
- tuple[1].forEach(function (val) { return val && formData.append(tuple[0] + '[]', "" + val); });
191
- }
192
- else if (isFileTuple(tuple)) {
193
- var name_1 = tuple[2];
194
- var file = transformFile(tuple[1]); // lgtm[js/superfluous-trailing-arguments]
195
- formData.append(tuple[0], file, name_1);
196
- }
197
- else if (tuple[1] != null) {
198
- formData.append(tuple[0], "" + tuple[1]);
195
+ /**
196
+ * Uuid type guard.
197
+ */
198
+ var isUuid = function (data) {
199
+ var UUID_REGEX = '[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}';
200
+ var regExp = new RegExp(UUID_REGEX);
201
+ return !isFileData(data) && regExp.test(data);
202
+ };
203
+ /**
204
+ * Url type guard.
205
+ *
206
+ * @param {NodeFile | BrowserFile | Url | Uuid} data
207
+ */
208
+ var isUrl = function (data) {
209
+ var URL_REGEX = '^(?:\\w+:)?\\/\\/([^\\s\\.]+\\.\\S{2}|localhost[\\:?\\d]*)\\S*$';
210
+ var regExp = new RegExp(URL_REGEX);
211
+ return !isFileData(data) && regExp.test(data);
212
+ };
213
+
214
+ var isSimpleValue = function (value) {
215
+ return (typeof value === 'string' ||
216
+ typeof value === 'number' ||
217
+ typeof value === 'undefined');
218
+ };
219
+ var isObjectValue = function (value) {
220
+ return !!value && typeof value === 'object' && !Array.isArray(value);
221
+ };
222
+ var isFileValue = function (value) {
223
+ return !!value &&
224
+ typeof value === 'object' &&
225
+ 'data' in value &&
226
+ isFileData(value.data);
227
+ };
228
+ function collectParams(params, inputKey, inputValue) {
229
+ if (isFileValue(inputValue)) {
230
+ var name_1 = inputValue.name, contentType = inputValue.contentType;
231
+ var file = transformFile(inputValue.data); // lgtm [js/superfluous-trailing-arguments]
232
+ var options = getFileOptions({ name: name_1, contentType: contentType });
233
+ params.push(__spreadArrays([inputKey, file], options));
234
+ }
235
+ else if (isObjectValue(inputValue)) {
236
+ for (var _i = 0, _a = Object.entries(inputValue); _i < _a.length; _i++) {
237
+ var _b = _a[_i], key = _b[0], value = _b[1];
238
+ if (typeof value !== 'undefined') {
239
+ params.push([inputKey + "[" + key + "]", String(value)]);
240
+ }
199
241
  }
200
- };
201
- for (var _i = 0, body_1 = body; _i < body_1.length; _i++) {
202
- var tuple = body_1[_i];
203
- _loop_1(tuple);
242
+ }
243
+ else if (isSimpleValue(inputValue) && inputValue) {
244
+ params.push([inputKey, inputValue.toString()]);
245
+ }
246
+ }
247
+ function getFormDataParams(options) {
248
+ var params = [];
249
+ for (var _i = 0, _a = Object.entries(options); _i < _a.length; _i++) {
250
+ var _b = _a[_i], key = _b[0], value = _b[1];
251
+ collectParams(params, key, value);
252
+ }
253
+ return params;
254
+ }
255
+ function buildFormData(options) {
256
+ var formData = getFormData();
257
+ var paramsList = getFormDataParams(options);
258
+ for (var _i = 0, paramsList_1 = paramsList; _i < paramsList_1.length; _i++) {
259
+ var params = paramsList_1[_i];
260
+ var key = params[0], value = params[1], options_1 = params.slice(2);
261
+ // node form-data has another signature for append
262
+ formData.append.apply(formData, __spreadArrays([key, value], options_1));
204
263
  }
205
264
  return formData;
206
265
  }
@@ -208,13 +267,26 @@ function buildFormData(body) {
208
267
  var serializePair = function (key, value) {
209
268
  return typeof value !== 'undefined' ? key + "=" + encodeURIComponent(value) : null;
210
269
  };
270
+ // TODO: generalize value transforming logic and use it here and inside `buildFormData`
211
271
  var createQuery = function (query) {
212
272
  return Object.entries(query)
213
273
  .reduce(function (params, _a) {
214
274
  var key = _a[0], value = _a[1];
215
- return params.concat(Array.isArray(value)
216
- ? value.map(function (value) { return serializePair(key + "[]", value); })
217
- : serializePair(key, value));
275
+ var param;
276
+ if (typeof value === 'object' && !Array.isArray(value)) {
277
+ param = Object.entries(value)
278
+ .filter(function (entry) { return typeof entry[1] !== 'undefined'; })
279
+ .map(function (entry) {
280
+ return serializePair(key + "[" + entry[0] + "]", String(entry[1]));
281
+ });
282
+ }
283
+ else if (Array.isArray(value)) {
284
+ param = value.map(function (val) { return serializePair(key + "[]", val); });
285
+ }
286
+ else {
287
+ param = serializePair(key, value);
288
+ }
289
+ return params.concat(param);
218
290
  }, [])
219
291
  .filter(function (x) { return !!x; })
220
292
  .join('&');
@@ -250,7 +322,7 @@ var defaultSettings = {
250
322
  var defaultContentType = 'application/octet-stream';
251
323
  var defaultFilename = 'original';
252
324
 
253
- var version = '3.0.0';
325
+ var version = '3.1.1';
254
326
 
255
327
  /**
256
328
  * Returns User Agent based on version and settings.
@@ -361,12 +433,16 @@ function retryIfThrottled(fn, retryThrottledMaxTimes) {
361
433
  });
362
434
  }
363
435
 
436
+ function getStoreValue(store) {
437
+ return typeof store === 'undefined' ? 'auto' : store ? '1' : '0';
438
+ }
439
+
364
440
  /**
365
441
  * Performs file uploading request to Uploadcare Upload API.
366
442
  * Can be canceled and has progress.
367
443
  */
368
444
  function base(file, _a) {
369
- var publicKey = _a.publicKey, fileName = _a.fileName, _b = _a.baseURL, baseURL = _b === void 0 ? defaultSettings.baseURL : _b, secureSignature = _a.secureSignature, secureExpire = _a.secureExpire, store = _a.store, signal = _a.signal, onProgress = _a.onProgress, _c = _a.source, source = _c === void 0 ? 'local' : _c, integration = _a.integration, userAgent = _a.userAgent, _d = _a.retryThrottledRequestMaxTimes, retryThrottledRequestMaxTimes = _d === void 0 ? defaultSettings.retryThrottledRequestMaxTimes : _d;
445
+ var publicKey = _a.publicKey, fileName = _a.fileName, contentType = _a.contentType, _b = _a.baseURL, baseURL = _b === void 0 ? defaultSettings.baseURL : _b, secureSignature = _a.secureSignature, secureExpire = _a.secureExpire, store = _a.store, signal = _a.signal, onProgress = _a.onProgress, _c = _a.source, source = _c === void 0 ? 'local' : _c, integration = _a.integration, userAgent = _a.userAgent, _d = _a.retryThrottledRequestMaxTimes, retryThrottledRequestMaxTimes = _d === void 0 ? defaultSettings.retryThrottledRequestMaxTimes : _d, metadata = _a.metadata;
370
446
  return retryIfThrottled(function () {
371
447
  var _a;
372
448
  return request({
@@ -377,17 +453,19 @@ function base(file, _a) {
377
453
  headers: {
378
454
  'X-UC-User-Agent': getUserAgent({ publicKey: publicKey, integration: integration, userAgent: userAgent })
379
455
  },
380
- data: buildFormData([
381
- ['file', file, (_a = fileName !== null && fileName !== void 0 ? fileName : file.name) !== null && _a !== void 0 ? _a : defaultFilename],
382
- ['UPLOADCARE_PUB_KEY', publicKey],
383
- [
384
- 'UPLOADCARE_STORE',
385
- typeof store === 'undefined' ? 'auto' : store ? 1 : 0
386
- ],
387
- ['signature', secureSignature],
388
- ['expire', secureExpire],
389
- ['source', source]
390
- ]),
456
+ data: buildFormData({
457
+ file: {
458
+ data: file,
459
+ name: (_a = fileName !== null && fileName !== void 0 ? fileName : file.name) !== null && _a !== void 0 ? _a : defaultFilename,
460
+ contentType: contentType
461
+ },
462
+ UPLOADCARE_PUB_KEY: publicKey,
463
+ UPLOADCARE_STORE: getStoreValue(store),
464
+ signature: secureSignature,
465
+ expire: secureExpire,
466
+ source: source,
467
+ metadata: metadata
468
+ }),
391
469
  signal: signal,
392
470
  onProgress: onProgress
393
471
  }).then(function (_a) {
@@ -412,7 +490,7 @@ var TypeEnum;
412
490
  * Uploading files from URL.
413
491
  */
414
492
  function fromUrl(sourceUrl, _a) {
415
- var publicKey = _a.publicKey, _b = _a.baseURL, baseURL = _b === void 0 ? defaultSettings.baseURL : _b, store = _a.store, fileName = _a.fileName, checkForUrlDuplicates = _a.checkForUrlDuplicates, saveUrlForRecurrentUploads = _a.saveUrlForRecurrentUploads, secureSignature = _a.secureSignature, secureExpire = _a.secureExpire, _c = _a.source, source = _c === void 0 ? 'url' : _c, signal = _a.signal, integration = _a.integration, userAgent = _a.userAgent, _d = _a.retryThrottledRequestMaxTimes, retryThrottledRequestMaxTimes = _d === void 0 ? defaultSettings.retryThrottledRequestMaxTimes : _d;
493
+ var publicKey = _a.publicKey, _b = _a.baseURL, baseURL = _b === void 0 ? defaultSettings.baseURL : _b, store = _a.store, fileName = _a.fileName, checkForUrlDuplicates = _a.checkForUrlDuplicates, saveUrlForRecurrentUploads = _a.saveUrlForRecurrentUploads, secureSignature = _a.secureSignature, secureExpire = _a.secureExpire, _c = _a.source, source = _c === void 0 ? 'url' : _c, signal = _a.signal, integration = _a.integration, userAgent = _a.userAgent, _d = _a.retryThrottledRequestMaxTimes, retryThrottledRequestMaxTimes = _d === void 0 ? defaultSettings.retryThrottledRequestMaxTimes : _d, metadata = _a.metadata;
416
494
  return retryIfThrottled(function () {
417
495
  return request({
418
496
  method: 'POST',
@@ -423,13 +501,14 @@ function fromUrl(sourceUrl, _a) {
423
501
  jsonerrors: 1,
424
502
  pub_key: publicKey,
425
503
  source_url: sourceUrl,
426
- store: typeof store === 'undefined' ? 'auto' : store ? 1 : undefined,
504
+ store: getStoreValue(store),
427
505
  filename: fileName,
428
506
  check_URL_duplicates: checkForUrlDuplicates ? 1 : undefined,
429
507
  save_URL_duplicates: saveUrlForRecurrentUploads ? 1 : undefined,
430
508
  signature: secureSignature,
431
509
  expire: secureExpire,
432
- source: source
510
+ source: source,
511
+ metadata: metadata
433
512
  }),
434
513
  signal: signal
435
514
  }).then(function (_a) {
@@ -591,7 +670,7 @@ function info(uuid, _a) {
591
670
  * Start multipart uploading.
592
671
  */
593
672
  function multipartStart(size, _a) {
594
- var publicKey = _a.publicKey, contentType = _a.contentType, fileName = _a.fileName, _b = _a.multipartChunkSize, multipartChunkSize = _b === void 0 ? defaultSettings.multipartChunkSize : _b, _c = _a.baseURL, baseURL = _c === void 0 ? '' : _c, secureSignature = _a.secureSignature, secureExpire = _a.secureExpire, store = _a.store, signal = _a.signal, _d = _a.source, source = _d === void 0 ? 'local' : _d, integration = _a.integration, userAgent = _a.userAgent, _e = _a.retryThrottledRequestMaxTimes, retryThrottledRequestMaxTimes = _e === void 0 ? defaultSettings.retryThrottledRequestMaxTimes : _e;
673
+ var publicKey = _a.publicKey, contentType = _a.contentType, fileName = _a.fileName, _b = _a.multipartChunkSize, multipartChunkSize = _b === void 0 ? defaultSettings.multipartChunkSize : _b, _c = _a.baseURL, baseURL = _c === void 0 ? '' : _c, secureSignature = _a.secureSignature, secureExpire = _a.secureExpire, store = _a.store, signal = _a.signal, _d = _a.source, source = _d === void 0 ? 'local' : _d, integration = _a.integration, userAgent = _a.userAgent, _e = _a.retryThrottledRequestMaxTimes, retryThrottledRequestMaxTimes = _e === void 0 ? defaultSettings.retryThrottledRequestMaxTimes : _e, metadata = _a.metadata;
595
674
  return retryIfThrottled(function () {
596
675
  return request({
597
676
  method: 'POST',
@@ -599,17 +678,18 @@ function multipartStart(size, _a) {
599
678
  headers: {
600
679
  'X-UC-User-Agent': getUserAgent({ publicKey: publicKey, integration: integration, userAgent: userAgent })
601
680
  },
602
- data: buildFormData([
603
- ['filename', fileName !== null && fileName !== void 0 ? fileName : defaultFilename],
604
- ['size', size],
605
- ['content_type', contentType !== null && contentType !== void 0 ? contentType : defaultContentType],
606
- ['part_size', multipartChunkSize],
607
- ['UPLOADCARE_STORE', store ? '' : 'auto'],
608
- ['UPLOADCARE_PUB_KEY', publicKey],
609
- ['signature', secureSignature],
610
- ['expire', secureExpire],
611
- ['source', source]
612
- ]),
681
+ data: buildFormData({
682
+ filename: fileName !== null && fileName !== void 0 ? fileName : defaultFilename,
683
+ size: size,
684
+ content_type: contentType !== null && contentType !== void 0 ? contentType : defaultContentType,
685
+ part_size: multipartChunkSize,
686
+ UPLOADCARE_STORE: getStoreValue(store),
687
+ UPLOADCARE_PUB_KEY: publicKey,
688
+ signature: secureSignature,
689
+ expire: secureExpire,
690
+ source: source,
691
+ metadata: metadata
692
+ }),
613
693
  signal: signal
614
694
  }).then(function (_a) {
615
695
  var data = _a.data, headers = _a.headers, request = _a.request;
@@ -666,11 +746,11 @@ function multipartComplete(uuid, _a) {
666
746
  headers: {
667
747
  'X-UC-User-Agent': getUserAgent({ publicKey: publicKey, integration: integration, userAgent: userAgent })
668
748
  },
669
- data: buildFormData([
670
- ['uuid', uuid],
671
- ['UPLOADCARE_PUB_KEY', publicKey],
672
- ['source', source]
673
- ]),
749
+ data: buildFormData({
750
+ uuid: uuid,
751
+ UPLOADCARE_PUB_KEY: publicKey,
752
+ source: source
753
+ }),
674
754
  signal: signal
675
755
  }).then(function (_a) {
676
756
  var data = _a.data, headers = _a.headers, request = _a.request;
@@ -699,6 +779,8 @@ var UploadcareFile = /** @class */ (function () {
699
779
  this.originalFilename = null;
700
780
  this.imageInfo = null;
701
781
  this.videoInfo = null;
782
+ this.contentInfo = null;
783
+ this.metadata = null;
702
784
  var uuid = fileInfo.uuid, s3Bucket = fileInfo.s3Bucket;
703
785
  var urlBase = s3Bucket
704
786
  ? "https://" + s3Bucket + ".s3.amazonaws.com/" + uuid + "/" + fileInfo.filename
@@ -718,6 +800,8 @@ var UploadcareFile = /** @class */ (function () {
718
800
  this.originalFilename = fileInfo.originalFilename;
719
801
  this.imageInfo = camelizeKeys(fileInfo.imageInfo);
720
802
  this.videoInfo = camelizeKeys(fileInfo.videoInfo);
803
+ this.contentInfo = camelizeKeys(fileInfo.contentInfo);
804
+ this.metadata = fileInfo.metadata || null;
721
805
  }
722
806
  return UploadcareFile;
723
807
  }());
@@ -777,10 +861,11 @@ function isReadyPoll(_a) {
777
861
  }
778
862
 
779
863
  var uploadFromObject = function (file, _a) {
780
- var publicKey = _a.publicKey, fileName = _a.fileName, baseURL = _a.baseURL, secureSignature = _a.secureSignature, secureExpire = _a.secureExpire, store = _a.store, signal = _a.signal, onProgress = _a.onProgress, source = _a.source, integration = _a.integration, userAgent = _a.userAgent, retryThrottledRequestMaxTimes = _a.retryThrottledRequestMaxTimes, baseCDN = _a.baseCDN;
864
+ var publicKey = _a.publicKey, fileName = _a.fileName, baseURL = _a.baseURL, secureSignature = _a.secureSignature, secureExpire = _a.secureExpire, store = _a.store, contentType = _a.contentType, signal = _a.signal, onProgress = _a.onProgress, source = _a.source, integration = _a.integration, userAgent = _a.userAgent, retryThrottledRequestMaxTimes = _a.retryThrottledRequestMaxTimes, baseCDN = _a.baseCDN, metadata = _a.metadata;
781
865
  return base(file, {
782
866
  publicKey: publicKey,
783
867
  fileName: fileName,
868
+ contentType: contentType,
784
869
  baseURL: baseURL,
785
870
  secureSignature: secureSignature,
786
871
  secureExpire: secureExpire,
@@ -790,7 +875,8 @@ var uploadFromObject = function (file, _a) {
790
875
  source: source,
791
876
  integration: integration,
792
877
  userAgent: userAgent,
793
- retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes
878
+ retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes,
879
+ metadata: metadata
794
880
  })
795
881
  .then(function (_a) {
796
882
  var file = _a.file;
@@ -1108,7 +1194,7 @@ var pushStrategy = function (_a) {
1108
1194
  });
1109
1195
  };
1110
1196
  var uploadFromUrl = function (sourceUrl, _a) {
1111
- var publicKey = _a.publicKey, fileName = _a.fileName, baseURL = _a.baseURL, baseCDN = _a.baseCDN, checkForUrlDuplicates = _a.checkForUrlDuplicates, saveUrlForRecurrentUploads = _a.saveUrlForRecurrentUploads, secureSignature = _a.secureSignature, secureExpire = _a.secureExpire, store = _a.store, signal = _a.signal, onProgress = _a.onProgress, source = _a.source, integration = _a.integration, userAgent = _a.userAgent, retryThrottledRequestMaxTimes = _a.retryThrottledRequestMaxTimes, _b = _a.pusherKey, pusherKey = _b === void 0 ? defaultSettings.pusherKey : _b;
1197
+ var publicKey = _a.publicKey, fileName = _a.fileName, baseURL = _a.baseURL, baseCDN = _a.baseCDN, checkForUrlDuplicates = _a.checkForUrlDuplicates, saveUrlForRecurrentUploads = _a.saveUrlForRecurrentUploads, secureSignature = _a.secureSignature, secureExpire = _a.secureExpire, store = _a.store, signal = _a.signal, onProgress = _a.onProgress, source = _a.source, integration = _a.integration, userAgent = _a.userAgent, retryThrottledRequestMaxTimes = _a.retryThrottledRequestMaxTimes, _b = _a.pusherKey, pusherKey = _b === void 0 ? defaultSettings.pusherKey : _b, metadata = _a.metadata;
1112
1198
  return Promise.resolve(preconnect(pusherKey))
1113
1199
  .then(function () {
1114
1200
  return fromUrl(sourceUrl, {
@@ -1124,7 +1210,8 @@ var uploadFromUrl = function (sourceUrl, _a) {
1124
1210
  source: source,
1125
1211
  integration: integration,
1126
1212
  userAgent: userAgent,
1127
- retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes
1213
+ retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes,
1214
+ metadata: metadata
1128
1215
  });
1129
1216
  })
1130
1217
  .catch(function (error) {
@@ -1206,34 +1293,6 @@ var uploadFromUploaded = function (uuid, _a) {
1206
1293
  });
1207
1294
  };
1208
1295
 
1209
- /**
1210
- * FileData type guard.
1211
- */
1212
- var isFileData = function (data) {
1213
- return (data !== undefined &&
1214
- ((typeof Blob !== 'undefined' && data instanceof Blob) ||
1215
- (typeof File !== 'undefined' && data instanceof File) ||
1216
- (typeof Buffer !== 'undefined' && data instanceof Buffer)));
1217
- };
1218
- /**
1219
- * Uuid type guard.
1220
- */
1221
- var isUuid = function (data) {
1222
- var UUID_REGEX = '[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}';
1223
- var regExp = new RegExp(UUID_REGEX);
1224
- return !isFileData(data) && regExp.test(data);
1225
- };
1226
- /**
1227
- * Url type guard.
1228
- *
1229
- * @param {NodeFile | BrowserFile | Url | Uuid} data
1230
- */
1231
- var isUrl = function (data) {
1232
- var URL_REGEX = '^(?:\\w+:)?\\/\\/([^\\s\\.]+\\.\\S{2}|localhost[\\:?\\d]*)\\S*$';
1233
- var regExp = new RegExp(URL_REGEX);
1234
- return !isFileData(data) && regExp.test(data);
1235
- };
1236
-
1237
1296
  /**
1238
1297
  * Get file size.
1239
1298
  */
@@ -1313,7 +1372,7 @@ var uploadPartWithRetry = function (chunk, url, _a) {
1313
1372
  });
1314
1373
  };
1315
1374
  var uploadMultipart = function (file, _a) {
1316
- var publicKey = _a.publicKey, fileName = _a.fileName, fileSize = _a.fileSize, baseURL = _a.baseURL, secureSignature = _a.secureSignature, secureExpire = _a.secureExpire, store = _a.store, signal = _a.signal, onProgress = _a.onProgress, source = _a.source, integration = _a.integration, userAgent = _a.userAgent, retryThrottledRequestMaxTimes = _a.retryThrottledRequestMaxTimes, contentType = _a.contentType, _b = _a.multipartChunkSize, multipartChunkSize = _b === void 0 ? defaultSettings.multipartChunkSize : _b, _c = _a.maxConcurrentRequests, maxConcurrentRequests = _c === void 0 ? defaultSettings.maxConcurrentRequests : _c, _d = _a.multipartMaxAttempts, multipartMaxAttempts = _d === void 0 ? defaultSettings.multipartMaxAttempts : _d, baseCDN = _a.baseCDN;
1375
+ var publicKey = _a.publicKey, fileName = _a.fileName, fileSize = _a.fileSize, baseURL = _a.baseURL, secureSignature = _a.secureSignature, secureExpire = _a.secureExpire, store = _a.store, signal = _a.signal, onProgress = _a.onProgress, source = _a.source, integration = _a.integration, userAgent = _a.userAgent, retryThrottledRequestMaxTimes = _a.retryThrottledRequestMaxTimes, contentType = _a.contentType, _b = _a.multipartChunkSize, multipartChunkSize = _b === void 0 ? defaultSettings.multipartChunkSize : _b, _c = _a.maxConcurrentRequests, maxConcurrentRequests = _c === void 0 ? defaultSettings.maxConcurrentRequests : _c, _d = _a.multipartMaxAttempts, multipartMaxAttempts = _d === void 0 ? defaultSettings.multipartMaxAttempts : _d, baseCDN = _a.baseCDN, metadata = _a.metadata;
1317
1376
  var size = fileSize || getFileSize(file);
1318
1377
  var progressValues;
1319
1378
  var createProgressHandler = function (totalChunks, chunkIdx) {
@@ -1348,7 +1407,8 @@ var uploadMultipart = function (file, _a) {
1348
1407
  source: source,
1349
1408
  integration: integration,
1350
1409
  userAgent: userAgent,
1351
- retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes
1410
+ retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes,
1411
+ metadata: metadata
1352
1412
  })
1353
1413
  .then(function (_a) {
1354
1414
  var uuid = _a.uuid, parts = _a.parts;
@@ -1402,10 +1462,10 @@ var uploadMultipart = function (file, _a) {
1402
1462
  * Uploads file from provided data.
1403
1463
  */
1404
1464
  function uploadFile(data, _a) {
1405
- var publicKey = _a.publicKey, fileName = _a.fileName, _b = _a.baseURL, baseURL = _b === void 0 ? defaultSettings.baseURL : _b, secureSignature = _a.secureSignature, secureExpire = _a.secureExpire, store = _a.store, signal = _a.signal, onProgress = _a.onProgress, source = _a.source, integration = _a.integration, userAgent = _a.userAgent, retryThrottledRequestMaxTimes = _a.retryThrottledRequestMaxTimes, contentType = _a.contentType, multipartChunkSize = _a.multipartChunkSize, multipartMaxAttempts = _a.multipartMaxAttempts, maxConcurrentRequests = _a.maxConcurrentRequests, _c = _a.baseCDN, baseCDN = _c === void 0 ? defaultSettings.baseCDN : _c, checkForUrlDuplicates = _a.checkForUrlDuplicates, saveUrlForRecurrentUploads = _a.saveUrlForRecurrentUploads, pusherKey = _a.pusherKey;
1465
+ var publicKey = _a.publicKey, fileName = _a.fileName, _b = _a.baseURL, baseURL = _b === void 0 ? defaultSettings.baseURL : _b, secureSignature = _a.secureSignature, secureExpire = _a.secureExpire, store = _a.store, signal = _a.signal, onProgress = _a.onProgress, source = _a.source, integration = _a.integration, userAgent = _a.userAgent, retryThrottledRequestMaxTimes = _a.retryThrottledRequestMaxTimes, contentType = _a.contentType, multipartMinFileSize = _a.multipartMinFileSize, multipartChunkSize = _a.multipartChunkSize, multipartMaxAttempts = _a.multipartMaxAttempts, maxConcurrentRequests = _a.maxConcurrentRequests, _c = _a.baseCDN, baseCDN = _c === void 0 ? defaultSettings.baseCDN : _c, checkForUrlDuplicates = _a.checkForUrlDuplicates, saveUrlForRecurrentUploads = _a.saveUrlForRecurrentUploads, pusherKey = _a.pusherKey, metadata = _a.metadata;
1406
1466
  if (isFileData(data)) {
1407
1467
  var fileSize = getFileSize(data);
1408
- if (isMultipart(fileSize)) {
1468
+ if (isMultipart(fileSize, multipartMinFileSize)) {
1409
1469
  return uploadMultipart(data, {
1410
1470
  publicKey: publicKey,
1411
1471
  contentType: contentType,
@@ -1423,12 +1483,14 @@ function uploadFile(data, _a) {
1423
1483
  userAgent: userAgent,
1424
1484
  maxConcurrentRequests: maxConcurrentRequests,
1425
1485
  retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes,
1426
- baseCDN: baseCDN
1486
+ baseCDN: baseCDN,
1487
+ metadata: metadata
1427
1488
  });
1428
1489
  }
1429
1490
  return uploadFromObject(data, {
1430
1491
  publicKey: publicKey,
1431
1492
  fileName: fileName,
1493
+ contentType: contentType,
1432
1494
  baseURL: baseURL,
1433
1495
  secureSignature: secureSignature,
1434
1496
  secureExpire: secureExpire,
@@ -1439,7 +1501,8 @@ function uploadFile(data, _a) {
1439
1501
  integration: integration,
1440
1502
  userAgent: userAgent,
1441
1503
  retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes,
1442
- baseCDN: baseCDN
1504
+ baseCDN: baseCDN,
1505
+ metadata: metadata
1443
1506
  });
1444
1507
  }
1445
1508
  if (isUrl(data)) {
@@ -1459,7 +1522,8 @@ function uploadFile(data, _a) {
1459
1522
  integration: integration,
1460
1523
  userAgent: userAgent,
1461
1524
  retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes,
1462
- pusherKey: pusherKey
1525
+ pusherKey: pusherKey,
1526
+ metadata: metadata
1463
1527
  });
1464
1528
  }
1465
1529
  if (isUuid(data)) {