@uploadcare/upload-client 3.0.0 → 3.1.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,20 @@ 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
+ Metadata is additional, arbitrary data, associated with uploaded file.
408
+
409
+ Non-string values will be converted to `string`. `undefined` values will be ignored.
410
+
411
+ See [https://uploadcare.com/api-refs/rest-api/v0.7.0/#tag/File-Metadata][REST API reference] for details.
412
+
413
+
400
414
  ## Testing
401
415
 
402
416
  ```
@@ -179,28 +179,80 @@ function identity(obj) {
179
179
  var transformFile = identity;
180
180
  var getFormData = (function () { return new FormData(); });
181
181
 
182
- var isFileTuple = function (tuple) {
183
- return tuple[0] === 'file';
182
+ /**
183
+ * FileData type guard.
184
+ */
185
+ var isFileData = function (data) {
186
+ return (data !== undefined &&
187
+ ((typeof Blob !== 'undefined' && data instanceof Blob) ||
188
+ (typeof File !== 'undefined' && data instanceof File) ||
189
+ (typeof Buffer !== 'undefined' && data instanceof Buffer)));
184
190
  };
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]);
191
+ /**
192
+ * Uuid type guard.
193
+ */
194
+ var isUuid = function (data) {
195
+ var UUID_REGEX = '[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}';
196
+ var regExp = new RegExp(UUID_REGEX);
197
+ return !isFileData(data) && regExp.test(data);
198
+ };
199
+ /**
200
+ * Url type guard.
201
+ *
202
+ * @param {NodeFile | BrowserFile | Url | Uuid} data
203
+ */
204
+ var isUrl = function (data) {
205
+ var URL_REGEX = '^(?:\\w+:)?\\/\\/([^\\s\\.]+\\.\\S{2}|localhost[\\:?\\d]*)\\S*$';
206
+ var regExp = new RegExp(URL_REGEX);
207
+ return !isFileData(data) && regExp.test(data);
208
+ };
209
+
210
+ var isSimpleValue = function (value) {
211
+ return (typeof value === 'string' ||
212
+ typeof value === 'number' ||
213
+ typeof value === 'undefined');
214
+ };
215
+ var isObjectValue = function (value) {
216
+ return !!value && typeof value === 'object' && !Array.isArray(value);
217
+ };
218
+ var isFileValue = function (value) {
219
+ return !!value &&
220
+ typeof value === 'object' &&
221
+ 'data' in value &&
222
+ isFileData(value.data);
223
+ };
224
+ function collectParams(params, inputKey, inputValue) {
225
+ if (isFileValue(inputValue)) {
226
+ var name_1 = inputValue.name;
227
+ var file = transformFile(inputValue.data); // lgtm [js/superfluous-trailing-arguments]
228
+ params.push(name_1 ? [inputKey, file, name_1] : [inputKey, file]);
229
+ }
230
+ else if (isObjectValue(inputValue)) {
231
+ for (var _i = 0, _a = Object.entries(inputValue); _i < _a.length; _i++) {
232
+ var _b = _a[_i], key = _b[0], value = _b[1];
233
+ if (typeof value !== 'undefined') {
234
+ params.push([inputKey + "[" + key + "]", String(value)]);
235
+ }
199
236
  }
200
- };
201
- for (var _i = 0, body_1 = body; _i < body_1.length; _i++) {
202
- var tuple = body_1[_i];
203
- _loop_1(tuple);
237
+ }
238
+ else if (isSimpleValue(inputValue) && inputValue) {
239
+ params.push([inputKey, inputValue.toString()]);
240
+ }
241
+ }
242
+ function getFormDataParams(options) {
243
+ var params = [];
244
+ for (var _i = 0, _a = Object.entries(options); _i < _a.length; _i++) {
245
+ var _b = _a[_i], key = _b[0], value = _b[1];
246
+ collectParams(params, key, value);
247
+ }
248
+ return params;
249
+ }
250
+ function buildFormData(options) {
251
+ var formData = getFormData();
252
+ var params = getFormDataParams(options);
253
+ for (var _i = 0, params_1 = params; _i < params_1.length; _i++) {
254
+ var param = params_1[_i];
255
+ formData.append.apply(formData, param);
204
256
  }
205
257
  return formData;
206
258
  }
@@ -208,13 +260,26 @@ function buildFormData(body) {
208
260
  var serializePair = function (key, value) {
209
261
  return typeof value !== 'undefined' ? key + "=" + encodeURIComponent(value) : null;
210
262
  };
263
+ // TODO: generalize value transforming logic and use it here and inside `buildFormData`
211
264
  var createQuery = function (query) {
212
265
  return Object.entries(query)
213
266
  .reduce(function (params, _a) {
214
267
  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));
268
+ var param;
269
+ if (typeof value === 'object' && !Array.isArray(value)) {
270
+ param = Object.entries(value)
271
+ .filter(function (entry) { return typeof entry[1] !== 'undefined'; })
272
+ .map(function (entry) {
273
+ return serializePair(key + "[" + entry[0] + "]", String(entry[1]));
274
+ });
275
+ }
276
+ else if (Array.isArray(value)) {
277
+ param = value.map(function (val) { return serializePair(key + "[]", val); });
278
+ }
279
+ else {
280
+ param = serializePair(key, value);
281
+ }
282
+ return params.concat(param);
218
283
  }, [])
219
284
  .filter(function (x) { return !!x; })
220
285
  .join('&');
@@ -250,7 +315,7 @@ var defaultSettings = {
250
315
  var defaultContentType = 'application/octet-stream';
251
316
  var defaultFilename = 'original';
252
317
 
253
- var version = '3.0.0';
318
+ var version = '3.1.0';
254
319
 
255
320
  /**
256
321
  * Returns User Agent based on version and settings.
@@ -361,12 +426,16 @@ function retryIfThrottled(fn, retryThrottledMaxTimes) {
361
426
  });
362
427
  }
363
428
 
429
+ function getStoreValue(store) {
430
+ return typeof store === 'undefined' ? 'auto' : store ? '1' : '0';
431
+ }
432
+
364
433
  /**
365
434
  * Performs file uploading request to Uploadcare Upload API.
366
435
  * Can be canceled and has progress.
367
436
  */
368
437
  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;
438
+ 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, metadata = _a.metadata;
370
439
  return retryIfThrottled(function () {
371
440
  var _a;
372
441
  return request({
@@ -377,17 +446,18 @@ function base(file, _a) {
377
446
  headers: {
378
447
  'X-UC-User-Agent': getUserAgent({ publicKey: publicKey, integration: integration, userAgent: userAgent })
379
448
  },
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
- ]),
449
+ data: buildFormData({
450
+ file: {
451
+ data: file,
452
+ name: (_a = fileName !== null && fileName !== void 0 ? fileName : file.name) !== null && _a !== void 0 ? _a : defaultFilename
453
+ },
454
+ UPLOADCARE_PUB_KEY: publicKey,
455
+ UPLOADCARE_STORE: getStoreValue(store),
456
+ signature: secureSignature,
457
+ expire: secureExpire,
458
+ source: source,
459
+ metadata: metadata
460
+ }),
391
461
  signal: signal,
392
462
  onProgress: onProgress
393
463
  }).then(function (_a) {
@@ -412,7 +482,7 @@ var TypeEnum;
412
482
  * Uploading files from URL.
413
483
  */
414
484
  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;
485
+ 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
486
  return retryIfThrottled(function () {
417
487
  return request({
418
488
  method: 'POST',
@@ -423,13 +493,14 @@ function fromUrl(sourceUrl, _a) {
423
493
  jsonerrors: 1,
424
494
  pub_key: publicKey,
425
495
  source_url: sourceUrl,
426
- store: typeof store === 'undefined' ? 'auto' : store ? 1 : undefined,
496
+ store: getStoreValue(store),
427
497
  filename: fileName,
428
498
  check_URL_duplicates: checkForUrlDuplicates ? 1 : undefined,
429
499
  save_URL_duplicates: saveUrlForRecurrentUploads ? 1 : undefined,
430
500
  signature: secureSignature,
431
501
  expire: secureExpire,
432
- source: source
502
+ source: source,
503
+ metadata: metadata
433
504
  }),
434
505
  signal: signal
435
506
  }).then(function (_a) {
@@ -591,7 +662,7 @@ function info(uuid, _a) {
591
662
  * Start multipart uploading.
592
663
  */
593
664
  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;
665
+ 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
666
  return retryIfThrottled(function () {
596
667
  return request({
597
668
  method: 'POST',
@@ -599,17 +670,18 @@ function multipartStart(size, _a) {
599
670
  headers: {
600
671
  'X-UC-User-Agent': getUserAgent({ publicKey: publicKey, integration: integration, userAgent: userAgent })
601
672
  },
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
- ]),
673
+ data: buildFormData({
674
+ filename: fileName !== null && fileName !== void 0 ? fileName : defaultFilename,
675
+ size: size,
676
+ content_type: contentType !== null && contentType !== void 0 ? contentType : defaultContentType,
677
+ part_size: multipartChunkSize,
678
+ UPLOADCARE_STORE: getStoreValue(store),
679
+ UPLOADCARE_PUB_KEY: publicKey,
680
+ signature: secureSignature,
681
+ expire: secureExpire,
682
+ source: source,
683
+ metadata: metadata
684
+ }),
613
685
  signal: signal
614
686
  }).then(function (_a) {
615
687
  var data = _a.data, headers = _a.headers, request = _a.request;
@@ -666,11 +738,11 @@ function multipartComplete(uuid, _a) {
666
738
  headers: {
667
739
  'X-UC-User-Agent': getUserAgent({ publicKey: publicKey, integration: integration, userAgent: userAgent })
668
740
  },
669
- data: buildFormData([
670
- ['uuid', uuid],
671
- ['UPLOADCARE_PUB_KEY', publicKey],
672
- ['source', source]
673
- ]),
741
+ data: buildFormData({
742
+ uuid: uuid,
743
+ UPLOADCARE_PUB_KEY: publicKey,
744
+ source: source
745
+ }),
674
746
  signal: signal
675
747
  }).then(function (_a) {
676
748
  var data = _a.data, headers = _a.headers, request = _a.request;
@@ -699,6 +771,8 @@ var UploadcareFile = /** @class */ (function () {
699
771
  this.originalFilename = null;
700
772
  this.imageInfo = null;
701
773
  this.videoInfo = null;
774
+ this.contentInfo = null;
775
+ this.metadata = null;
702
776
  var uuid = fileInfo.uuid, s3Bucket = fileInfo.s3Bucket;
703
777
  var urlBase = s3Bucket
704
778
  ? "https://" + s3Bucket + ".s3.amazonaws.com/" + uuid + "/" + fileInfo.filename
@@ -718,6 +792,8 @@ var UploadcareFile = /** @class */ (function () {
718
792
  this.originalFilename = fileInfo.originalFilename;
719
793
  this.imageInfo = camelizeKeys(fileInfo.imageInfo);
720
794
  this.videoInfo = camelizeKeys(fileInfo.videoInfo);
795
+ this.contentInfo = camelizeKeys(fileInfo.contentInfo);
796
+ this.metadata = fileInfo.metadata || null;
721
797
  }
722
798
  return UploadcareFile;
723
799
  }());
@@ -777,7 +853,7 @@ function isReadyPoll(_a) {
777
853
  }
778
854
 
779
855
  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;
856
+ 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, metadata = _a.metadata;
781
857
  return base(file, {
782
858
  publicKey: publicKey,
783
859
  fileName: fileName,
@@ -790,7 +866,8 @@ var uploadFromObject = function (file, _a) {
790
866
  source: source,
791
867
  integration: integration,
792
868
  userAgent: userAgent,
793
- retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes
869
+ retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes,
870
+ metadata: metadata
794
871
  })
795
872
  .then(function (_a) {
796
873
  var file = _a.file;
@@ -1108,7 +1185,7 @@ var pushStrategy = function (_a) {
1108
1185
  });
1109
1186
  };
1110
1187
  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;
1188
+ 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
1189
  return Promise.resolve(preconnect(pusherKey))
1113
1190
  .then(function () {
1114
1191
  return fromUrl(sourceUrl, {
@@ -1124,7 +1201,8 @@ var uploadFromUrl = function (sourceUrl, _a) {
1124
1201
  source: source,
1125
1202
  integration: integration,
1126
1203
  userAgent: userAgent,
1127
- retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes
1204
+ retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes,
1205
+ metadata: metadata
1128
1206
  });
1129
1207
  })
1130
1208
  .catch(function (error) {
@@ -1206,34 +1284,6 @@ var uploadFromUploaded = function (uuid, _a) {
1206
1284
  });
1207
1285
  };
1208
1286
 
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
1287
  /**
1238
1288
  * Get file size.
1239
1289
  */
@@ -1313,7 +1363,7 @@ var uploadPartWithRetry = function (chunk, url, _a) {
1313
1363
  });
1314
1364
  };
1315
1365
  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;
1366
+ 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
1367
  var size = fileSize || getFileSize(file);
1318
1368
  var progressValues;
1319
1369
  var createProgressHandler = function (totalChunks, chunkIdx) {
@@ -1348,7 +1398,8 @@ var uploadMultipart = function (file, _a) {
1348
1398
  source: source,
1349
1399
  integration: integration,
1350
1400
  userAgent: userAgent,
1351
- retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes
1401
+ retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes,
1402
+ metadata: metadata
1352
1403
  })
1353
1404
  .then(function (_a) {
1354
1405
  var uuid = _a.uuid, parts = _a.parts;
@@ -1402,10 +1453,10 @@ var uploadMultipart = function (file, _a) {
1402
1453
  * Uploads file from provided data.
1403
1454
  */
1404
1455
  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;
1456
+ 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
1457
  if (isFileData(data)) {
1407
1458
  var fileSize = getFileSize(data);
1408
- if (isMultipart(fileSize)) {
1459
+ if (isMultipart(fileSize, multipartMinFileSize)) {
1409
1460
  return uploadMultipart(data, {
1410
1461
  publicKey: publicKey,
1411
1462
  contentType: contentType,
@@ -1423,7 +1474,8 @@ function uploadFile(data, _a) {
1423
1474
  userAgent: userAgent,
1424
1475
  maxConcurrentRequests: maxConcurrentRequests,
1425
1476
  retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes,
1426
- baseCDN: baseCDN
1477
+ baseCDN: baseCDN,
1478
+ metadata: metadata
1427
1479
  });
1428
1480
  }
1429
1481
  return uploadFromObject(data, {
@@ -1439,7 +1491,8 @@ function uploadFile(data, _a) {
1439
1491
  integration: integration,
1440
1492
  userAgent: userAgent,
1441
1493
  retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes,
1442
- baseCDN: baseCDN
1494
+ baseCDN: baseCDN,
1495
+ metadata: metadata
1443
1496
  });
1444
1497
  }
1445
1498
  if (isUrl(data)) {
@@ -1459,7 +1512,8 @@ function uploadFile(data, _a) {
1459
1512
  integration: integration,
1460
1513
  userAgent: userAgent,
1461
1514
  retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes,
1462
- pusherKey: pusherKey
1515
+ pusherKey: pusherKey,
1516
+ metadata: metadata
1463
1517
  });
1464
1518
  }
1465
1519
  if (isUuid(data)) {