@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/dist/index.js CHANGED
@@ -147,31 +147,97 @@ function identity(obj) {
147
147
  const transformFile = identity;
148
148
  var getFormData = () => new NodeFormData();
149
149
 
150
- const isFileTuple = (tuple) => tuple[0] === 'file';
151
- function buildFormData(body) {
152
- const formData = getFormData();
153
- for (const tuple of body) {
154
- if (Array.isArray(tuple[1])) {
155
- // refactor this
156
- tuple[1].forEach((val) => val && formData.append(tuple[0] + '[]', `${val}`));
157
- }
158
- else if (isFileTuple(tuple)) {
159
- const name = tuple[2];
160
- const file = transformFile(tuple[1]); // lgtm[js/superfluous-trailing-arguments]
161
- formData.append(tuple[0], file, name);
162
- }
163
- else if (tuple[1] != null) {
164
- formData.append(tuple[0], `${tuple[1]}`);
150
+ /**
151
+ * FileData type guard.
152
+ */
153
+ const isFileData = (data) => {
154
+ return (data !== undefined &&
155
+ ((typeof Blob !== 'undefined' && data instanceof Blob) ||
156
+ (typeof File !== 'undefined' && data instanceof File) ||
157
+ (typeof Buffer !== 'undefined' && data instanceof Buffer)));
158
+ };
159
+ /**
160
+ * Uuid type guard.
161
+ */
162
+ const isUuid = (data) => {
163
+ const UUID_REGEX = '[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}';
164
+ const regExp = new RegExp(UUID_REGEX);
165
+ return !isFileData(data) && regExp.test(data);
166
+ };
167
+ /**
168
+ * Url type guard.
169
+ *
170
+ * @param {NodeFile | BrowserFile | Url | Uuid} data
171
+ */
172
+ const isUrl = (data) => {
173
+ const URL_REGEX = '^(?:\\w+:)?\\/\\/([^\\s\\.]+\\.\\S{2}|localhost[\\:?\\d]*)\\S*$';
174
+ const regExp = new RegExp(URL_REGEX);
175
+ return !isFileData(data) && regExp.test(data);
176
+ };
177
+
178
+ const isSimpleValue = (value) => {
179
+ return (typeof value === 'string' ||
180
+ typeof value === 'number' ||
181
+ typeof value === 'undefined');
182
+ };
183
+ const isObjectValue = (value) => {
184
+ return !!value && typeof value === 'object' && !Array.isArray(value);
185
+ };
186
+ const isFileValue = (value) => !!value &&
187
+ typeof value === 'object' &&
188
+ 'data' in value &&
189
+ isFileData(value.data);
190
+ function collectParams(params, inputKey, inputValue) {
191
+ if (isFileValue(inputValue)) {
192
+ const name = inputValue.name;
193
+ const file = transformFile(inputValue.data); // lgtm [js/superfluous-trailing-arguments]
194
+ params.push(name ? [inputKey, file, name] : [inputKey, file]);
195
+ }
196
+ else if (isObjectValue(inputValue)) {
197
+ for (const [key, value] of Object.entries(inputValue)) {
198
+ if (typeof value !== 'undefined') {
199
+ params.push([`${inputKey}[${key}]`, String(value)]);
200
+ }
165
201
  }
166
202
  }
203
+ else if (isSimpleValue(inputValue) && inputValue) {
204
+ params.push([inputKey, inputValue.toString()]);
205
+ }
206
+ }
207
+ function getFormDataParams(options) {
208
+ const params = [];
209
+ for (const [key, value] of Object.entries(options)) {
210
+ collectParams(params, key, value);
211
+ }
212
+ return params;
213
+ }
214
+ function buildFormData(options) {
215
+ const formData = getFormData();
216
+ const params = getFormDataParams(options);
217
+ for (const param of params) {
218
+ formData.append(...param);
219
+ }
167
220
  return formData;
168
221
  }
169
222
 
170
223
  const serializePair = (key, value) => typeof value !== 'undefined' ? `${key}=${encodeURIComponent(value)}` : null;
224
+ // TODO: generalize value transforming logic and use it here and inside `buildFormData`
171
225
  const createQuery = (query) => Object.entries(query)
172
- .reduce((params, [key, value]) => params.concat(Array.isArray(value)
173
- ? value.map((value) => serializePair(`${key}[]`, value))
174
- : serializePair(key, value)), [])
226
+ .reduce((params, [key, value]) => {
227
+ let param;
228
+ if (typeof value === 'object' && !Array.isArray(value)) {
229
+ param = Object.entries(value)
230
+ .filter((entry) => typeof entry[1] !== 'undefined')
231
+ .map((entry) => serializePair(`${key}[${entry[0]}]`, String(entry[1])));
232
+ }
233
+ else if (Array.isArray(value)) {
234
+ param = value.map((val) => serializePair(`${key}[]`, val));
235
+ }
236
+ else {
237
+ param = serializePair(key, value);
238
+ }
239
+ return params.concat(param);
240
+ }, [])
175
241
  .filter((x) => !!x)
176
242
  .join('&');
177
243
  const getUrl = (base, path, query) => [
@@ -203,7 +269,7 @@ const defaultSettings = {
203
269
  const defaultContentType = 'application/octet-stream';
204
270
  const defaultFilename = 'original';
205
271
 
206
- var version = '3.0.0';
272
+ var version = '3.1.0';
207
273
 
208
274
  /**
209
275
  * Returns User Agent based on version and settings.
@@ -303,11 +369,15 @@ function retryIfThrottled(fn, retryThrottledMaxTimes) {
303
369
  }));
304
370
  }
305
371
 
372
+ function getStoreValue(store) {
373
+ return typeof store === 'undefined' ? 'auto' : store ? '1' : '0';
374
+ }
375
+
306
376
  /**
307
377
  * Performs file uploading request to Uploadcare Upload API.
308
378
  * Can be canceled and has progress.
309
379
  */
310
- function base(file, { publicKey, fileName, baseURL = defaultSettings.baseURL, secureSignature, secureExpire, store, signal, onProgress, source = 'local', integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes }) {
380
+ function base(file, { publicKey, fileName, baseURL = defaultSettings.baseURL, secureSignature, secureExpire, store, signal, onProgress, source = 'local', integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes, metadata }) {
311
381
  return retryIfThrottled(() => {
312
382
  var _a;
313
383
  return request({
@@ -318,17 +388,18 @@ function base(file, { publicKey, fileName, baseURL = defaultSettings.baseURL, se
318
388
  headers: {
319
389
  'X-UC-User-Agent': getUserAgent({ publicKey, integration, userAgent })
320
390
  },
321
- data: buildFormData([
322
- ['file', file, (_a = fileName !== null && fileName !== void 0 ? fileName : file.name) !== null && _a !== void 0 ? _a : defaultFilename],
323
- ['UPLOADCARE_PUB_KEY', publicKey],
324
- [
325
- 'UPLOADCARE_STORE',
326
- typeof store === 'undefined' ? 'auto' : store ? 1 : 0
327
- ],
328
- ['signature', secureSignature],
329
- ['expire', secureExpire],
330
- ['source', source]
331
- ]),
391
+ data: buildFormData({
392
+ file: {
393
+ data: file,
394
+ name: (_a = fileName !== null && fileName !== void 0 ? fileName : file.name) !== null && _a !== void 0 ? _a : defaultFilename
395
+ },
396
+ UPLOADCARE_PUB_KEY: publicKey,
397
+ UPLOADCARE_STORE: getStoreValue(store),
398
+ signature: secureSignature,
399
+ expire: secureExpire,
400
+ source: source,
401
+ metadata
402
+ }),
332
403
  signal,
333
404
  onProgress
334
405
  }).then(({ data, headers, request }) => {
@@ -351,7 +422,7 @@ var TypeEnum;
351
422
  /**
352
423
  * Uploading files from URL.
353
424
  */
354
- function fromUrl(sourceUrl, { publicKey, baseURL = defaultSettings.baseURL, store, fileName, checkForUrlDuplicates, saveUrlForRecurrentUploads, secureSignature, secureExpire, source = 'url', signal, integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes }) {
425
+ function fromUrl(sourceUrl, { publicKey, baseURL = defaultSettings.baseURL, store, fileName, checkForUrlDuplicates, saveUrlForRecurrentUploads, secureSignature, secureExpire, source = 'url', signal, integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes, metadata }) {
355
426
  return retryIfThrottled(() => request({
356
427
  method: 'POST',
357
428
  headers: {
@@ -361,13 +432,14 @@ function fromUrl(sourceUrl, { publicKey, baseURL = defaultSettings.baseURL, stor
361
432
  jsonerrors: 1,
362
433
  pub_key: publicKey,
363
434
  source_url: sourceUrl,
364
- store: typeof store === 'undefined' ? 'auto' : store ? 1 : undefined,
435
+ store: getStoreValue(store),
365
436
  filename: fileName,
366
437
  check_URL_duplicates: checkForUrlDuplicates ? 1 : undefined,
367
438
  save_URL_duplicates: saveUrlForRecurrentUploads ? 1 : undefined,
368
439
  signature: secureSignature,
369
440
  expire: secureExpire,
370
- source: source
441
+ source: source,
442
+ metadata
371
443
  }),
372
444
  signal
373
445
  }).then(({ data, headers, request }) => {
@@ -510,24 +582,25 @@ function info(uuid, { publicKey, baseURL = defaultSettings.baseURL, signal, sour
510
582
  /**
511
583
  * Start multipart uploading.
512
584
  */
513
- function multipartStart(size, { publicKey, contentType, fileName, multipartChunkSize = defaultSettings.multipartChunkSize, baseURL = '', secureSignature, secureExpire, store, signal, source = 'local', integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes }) {
585
+ function multipartStart(size, { publicKey, contentType, fileName, multipartChunkSize = defaultSettings.multipartChunkSize, baseURL = '', secureSignature, secureExpire, store, signal, source = 'local', integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes, metadata }) {
514
586
  return retryIfThrottled(() => request({
515
587
  method: 'POST',
516
588
  url: getUrl(baseURL, '/multipart/start/', { jsonerrors: 1 }),
517
589
  headers: {
518
590
  'X-UC-User-Agent': getUserAgent({ publicKey, integration, userAgent })
519
591
  },
520
- data: buildFormData([
521
- ['filename', fileName !== null && fileName !== void 0 ? fileName : defaultFilename],
522
- ['size', size],
523
- ['content_type', contentType !== null && contentType !== void 0 ? contentType : defaultContentType],
524
- ['part_size', multipartChunkSize],
525
- ['UPLOADCARE_STORE', store ? '' : 'auto'],
526
- ['UPLOADCARE_PUB_KEY', publicKey],
527
- ['signature', secureSignature],
528
- ['expire', secureExpire],
529
- ['source', source]
530
- ]),
592
+ data: buildFormData({
593
+ filename: fileName !== null && fileName !== void 0 ? fileName : defaultFilename,
594
+ size: size,
595
+ content_type: contentType !== null && contentType !== void 0 ? contentType : defaultContentType,
596
+ part_size: multipartChunkSize,
597
+ UPLOADCARE_STORE: getStoreValue(store),
598
+ UPLOADCARE_PUB_KEY: publicKey,
599
+ signature: secureSignature,
600
+ expire: secureExpire,
601
+ source: source,
602
+ metadata
603
+ }),
531
604
  signal
532
605
  }).then(({ data, headers, request }) => {
533
606
  const response = camelizeKeys(JSON.parse(data));
@@ -576,11 +649,11 @@ function multipartComplete(uuid, { publicKey, baseURL = defaultSettings.baseURL,
576
649
  headers: {
577
650
  'X-UC-User-Agent': getUserAgent({ publicKey, integration, userAgent })
578
651
  },
579
- data: buildFormData([
580
- ['uuid', uuid],
581
- ['UPLOADCARE_PUB_KEY', publicKey],
582
- ['source', source]
583
- ]),
652
+ data: buildFormData({
653
+ uuid: uuid,
654
+ UPLOADCARE_PUB_KEY: publicKey,
655
+ source: source
656
+ }),
584
657
  signal
585
658
  }).then(({ data, headers, request }) => {
586
659
  const response = camelizeKeys(JSON.parse(data));
@@ -606,6 +679,8 @@ class UploadcareFile {
606
679
  this.originalFilename = null;
607
680
  this.imageInfo = null;
608
681
  this.videoInfo = null;
682
+ this.contentInfo = null;
683
+ this.metadata = null;
609
684
  const { uuid, s3Bucket } = fileInfo;
610
685
  const urlBase = s3Bucket
611
686
  ? `https://${s3Bucket}.s3.amazonaws.com/${uuid}/${fileInfo.filename}`
@@ -625,6 +700,8 @@ class UploadcareFile {
625
700
  this.originalFilename = fileInfo.originalFilename;
626
701
  this.imageInfo = camelizeKeys(fileInfo.imageInfo);
627
702
  this.videoInfo = camelizeKeys(fileInfo.videoInfo);
703
+ this.contentInfo = camelizeKeys(fileInfo.contentInfo);
704
+ this.metadata = fileInfo.metadata || null;
628
705
  }
629
706
  }
630
707
 
@@ -676,7 +753,7 @@ function isReadyPoll({ file, publicKey, baseURL, source, integration, userAgent,
676
753
  });
677
754
  }
678
755
 
679
- const uploadFromObject = (file, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, baseCDN }) => {
756
+ const uploadFromObject = (file, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, baseCDN, metadata }) => {
680
757
  return base(file, {
681
758
  publicKey,
682
759
  fileName,
@@ -689,7 +766,8 @@ const uploadFromObject = (file, { publicKey, fileName, baseURL, secureSignature,
689
766
  source,
690
767
  integration,
691
768
  userAgent,
692
- retryThrottledRequestMaxTimes
769
+ retryThrottledRequestMaxTimes,
770
+ metadata
693
771
  })
694
772
  .then(({ file }) => {
695
773
  return isReadyPoll({
@@ -982,7 +1060,7 @@ const pushStrategy = ({ token, pusherKey, signal, onProgress }) => new Promise((
982
1060
  }
983
1061
  });
984
1062
  });
985
- const uploadFromUrl = (sourceUrl, { publicKey, fileName, baseURL, baseCDN, checkForUrlDuplicates, saveUrlForRecurrentUploads, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, pusherKey = defaultSettings.pusherKey }) => Promise.resolve(preconnect(pusherKey))
1063
+ const uploadFromUrl = (sourceUrl, { publicKey, fileName, baseURL, baseCDN, checkForUrlDuplicates, saveUrlForRecurrentUploads, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, pusherKey = defaultSettings.pusherKey, metadata }) => Promise.resolve(preconnect(pusherKey))
986
1064
  .then(() => fromUrl(sourceUrl, {
987
1065
  publicKey,
988
1066
  fileName,
@@ -996,7 +1074,8 @@ const uploadFromUrl = (sourceUrl, { publicKey, fileName, baseURL, baseCDN, check
996
1074
  source,
997
1075
  integration,
998
1076
  userAgent,
999
- retryThrottledRequestMaxTimes
1077
+ retryThrottledRequestMaxTimes,
1078
+ metadata
1000
1079
  }))
1001
1080
  .catch((error) => {
1002
1081
  const pusher = getPusher(pusherKey);
@@ -1067,34 +1146,6 @@ const uploadFromUploaded = (uuid, { publicKey, fileName, baseURL, signal, onProg
1067
1146
  });
1068
1147
  };
1069
1148
 
1070
- /**
1071
- * FileData type guard.
1072
- */
1073
- const isFileData = (data) => {
1074
- return (data !== undefined &&
1075
- ((typeof Blob !== 'undefined' && data instanceof Blob) ||
1076
- (typeof File !== 'undefined' && data instanceof File) ||
1077
- (typeof Buffer !== 'undefined' && data instanceof Buffer)));
1078
- };
1079
- /**
1080
- * Uuid type guard.
1081
- */
1082
- const isUuid = (data) => {
1083
- const UUID_REGEX = '[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}';
1084
- const regExp = new RegExp(UUID_REGEX);
1085
- return !isFileData(data) && regExp.test(data);
1086
- };
1087
- /**
1088
- * Url type guard.
1089
- *
1090
- * @param {NodeFile | BrowserFile | Url | Uuid} data
1091
- */
1092
- const isUrl = (data) => {
1093
- const URL_REGEX = '^(?:\\w+:)?\\/\\/([^\\s\\.]+\\.\\S{2}|localhost[\\:?\\d]*)\\S*$';
1094
- const regExp = new RegExp(URL_REGEX);
1095
- return !isFileData(data) && regExp.test(data);
1096
- };
1097
-
1098
1149
  /**
1099
1150
  * Get file size.
1100
1151
  */
@@ -1164,7 +1215,7 @@ const uploadPartWithRetry = (chunk, url, { publicKey, onProgress, signal, integr
1164
1215
  }
1165
1216
  throw error;
1166
1217
  }));
1167
- const uploadMultipart = (file, { publicKey, fileName, fileSize, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, contentType, multipartChunkSize = defaultSettings.multipartChunkSize, maxConcurrentRequests = defaultSettings.maxConcurrentRequests, multipartMaxAttempts = defaultSettings.multipartMaxAttempts, baseCDN }) => {
1218
+ const uploadMultipart = (file, { publicKey, fileName, fileSize, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, contentType, multipartChunkSize = defaultSettings.multipartChunkSize, maxConcurrentRequests = defaultSettings.maxConcurrentRequests, multipartMaxAttempts = defaultSettings.multipartMaxAttempts, baseCDN, metadata }) => {
1168
1219
  const size = fileSize || getFileSize(file);
1169
1220
  let progressValues;
1170
1221
  const createProgressHandler = (totalChunks, chunkIdx) => {
@@ -1197,7 +1248,8 @@ const uploadMultipart = (file, { publicKey, fileName, fileSize, baseURL, secureS
1197
1248
  source,
1198
1249
  integration,
1199
1250
  userAgent,
1200
- retryThrottledRequestMaxTimes
1251
+ retryThrottledRequestMaxTimes,
1252
+ metadata
1201
1253
  })
1202
1254
  .then(({ uuid, parts }) => {
1203
1255
  const getChunk = prepareChunks(file, size, multipartChunkSize);
@@ -1244,10 +1296,10 @@ const uploadMultipart = (file, { publicKey, fileName, fileSize, baseURL, secureS
1244
1296
  /**
1245
1297
  * Uploads file from provided data.
1246
1298
  */
1247
- function uploadFile(data, { publicKey, fileName, baseURL = defaultSettings.baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, contentType, multipartChunkSize, multipartMaxAttempts, maxConcurrentRequests, baseCDN = defaultSettings.baseCDN, checkForUrlDuplicates, saveUrlForRecurrentUploads, pusherKey }) {
1299
+ function uploadFile(data, { publicKey, fileName, baseURL = defaultSettings.baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, contentType, multipartMinFileSize, multipartChunkSize, multipartMaxAttempts, maxConcurrentRequests, baseCDN = defaultSettings.baseCDN, checkForUrlDuplicates, saveUrlForRecurrentUploads, pusherKey, metadata }) {
1248
1300
  if (isFileData(data)) {
1249
1301
  const fileSize = getFileSize(data);
1250
- if (isMultipart(fileSize)) {
1302
+ if (isMultipart(fileSize, multipartMinFileSize)) {
1251
1303
  return uploadMultipart(data, {
1252
1304
  publicKey,
1253
1305
  contentType,
@@ -1265,7 +1317,8 @@ function uploadFile(data, { publicKey, fileName, baseURL = defaultSettings.baseU
1265
1317
  userAgent,
1266
1318
  maxConcurrentRequests,
1267
1319
  retryThrottledRequestMaxTimes,
1268
- baseCDN
1320
+ baseCDN,
1321
+ metadata
1269
1322
  });
1270
1323
  }
1271
1324
  return uploadFromObject(data, {
@@ -1281,7 +1334,8 @@ function uploadFile(data, { publicKey, fileName, baseURL = defaultSettings.baseU
1281
1334
  integration,
1282
1335
  userAgent,
1283
1336
  retryThrottledRequestMaxTimes,
1284
- baseCDN
1337
+ baseCDN,
1338
+ metadata
1285
1339
  });
1286
1340
  }
1287
1341
  if (isUrl(data)) {
@@ -1301,7 +1355,8 @@ function uploadFile(data, { publicKey, fileName, baseURL = defaultSettings.baseU
1301
1355
  integration,
1302
1356
  userAgent,
1303
1357
  retryThrottledRequestMaxTimes,
1304
- pusherKey
1358
+ pusherKey,
1359
+ metadata
1305
1360
  });
1306
1361
  }
1307
1362
  if (isUuid(data)) {
package/dist/types.d.ts CHANGED
@@ -41,6 +41,17 @@ export declare type VideoInfo = {
41
41
  codec: string;
42
42
  };
43
43
  };
44
+ export declare type ContentInfo = {
45
+ content_info: {
46
+ mime?: {
47
+ mime: string;
48
+ type: string;
49
+ subtype: string;
50
+ };
51
+ image?: ImageInfo;
52
+ video?: VideoInfo;
53
+ };
54
+ };
44
55
  export declare type FileInfo = {
45
56
  size: number;
46
57
  done: number;
@@ -55,7 +66,9 @@ export declare type FileInfo = {
55
66
  isReady: string;
56
67
  imageInfo: ImageInfo | null;
57
68
  videoInfo: VideoInfo | null;
58
- s3Bucket: string | null;
69
+ contentInfo: ContentInfo | null;
70
+ s3Bucket?: string;
71
+ metadata?: Metadata;
59
72
  };
60
73
  export declare type GroupInfo = {
61
74
  datetimeCreated: string;
@@ -78,6 +91,9 @@ export declare type UnknownProgressInfo = {
78
91
  isComputable: false;
79
92
  };
80
93
  export declare type ProgressCallback<T = ComputableProgressInfo | UnknownProgressInfo> = (arg: T) => void;
94
+ export declare type Metadata = {
95
+ [key: string]: string;
96
+ };
81
97
  export interface DefaultSettings {
82
98
  baseCDN: string;
83
99
  baseURL: string;
@@ -142,8 +158,9 @@ export declare type BaseOptions = {
142
158
  integration?: string;
143
159
  userAgent?: CustomUserAgent;
144
160
  retryThrottledRequestMaxTimes?: number;
161
+ metadata?: Metadata;
145
162
  };
146
- declare function base(file: NodeFile | BrowserFile, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes }: BaseOptions): Promise<BaseResponse>;
163
+ declare function base(file: NodeFile | BrowserFile, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, metadata }: BaseOptions): Promise<BaseResponse>;
147
164
  declare enum TypeEnum {
148
165
  Token = "token",
149
166
  FileInfo = "file_info"
@@ -171,8 +188,9 @@ export declare type FromUrlOptions = {
171
188
  integration?: string;
172
189
  userAgent?: CustomUserAgent;
173
190
  retryThrottledRequestMaxTimes?: number;
191
+ metadata?: Metadata;
174
192
  };
175
- declare function fromUrl(sourceUrl: Url, { publicKey, baseURL, store, fileName, checkForUrlDuplicates, saveUrlForRecurrentUploads, secureSignature, secureExpire, source, signal, integration, userAgent, retryThrottledRequestMaxTimes }: FromUrlOptions): Promise<FromUrlSuccessResponse>;
193
+ declare function fromUrl(sourceUrl: Url, { publicKey, baseURL, store, fileName, checkForUrlDuplicates, saveUrlForRecurrentUploads, secureSignature, secureExpire, source, signal, integration, userAgent, retryThrottledRequestMaxTimes, metadata }: FromUrlOptions): Promise<FromUrlSuccessResponse>;
176
194
  declare enum Status {
177
195
  Unknown = "unknown",
178
196
  Waiting = "waiting",
@@ -257,13 +275,14 @@ export declare type MultipartStartOptions = {
257
275
  integration?: string;
258
276
  userAgent?: CustomUserAgent;
259
277
  retryThrottledRequestMaxTimes?: number;
278
+ metadata?: Metadata;
260
279
  };
261
280
  export declare type MultipartPart = string;
262
281
  export declare type MultipartStartResponse = {
263
282
  parts: MultipartPart[];
264
283
  uuid: Uuid;
265
284
  };
266
- declare function multipartStart(size: number, { publicKey, contentType, fileName, multipartChunkSize, baseURL, secureSignature, secureExpire, store, signal, source, integration, userAgent, retryThrottledRequestMaxTimes }: MultipartStartOptions): Promise<MultipartStartResponse>;
285
+ declare function multipartStart(size: number, { publicKey, contentType, fileName, multipartChunkSize, baseURL, secureSignature, secureExpire, store, signal, source, integration, userAgent, retryThrottledRequestMaxTimes, metadata }: MultipartStartOptions): Promise<MultipartStartResponse>;
267
286
  export declare type MultipartUploadOptions = {
268
287
  publicKey?: string;
269
288
  signal?: AbortSignal;
@@ -298,6 +317,8 @@ export declare class UploadcareFile {
298
317
  readonly originalFilename: null | string;
299
318
  readonly imageInfo: null | ImageInfo;
300
319
  readonly videoInfo: null | VideoInfo;
320
+ readonly contentInfo: null | ContentInfo;
321
+ readonly metadata: null | Metadata;
301
322
  constructor(fileInfo: FileInfo, { baseCDN, defaultEffects, fileName }: {
302
323
  baseCDN?: string;
303
324
  defaultEffects?: string;
@@ -318,14 +339,15 @@ export declare type FromObjectOptions = {
318
339
  userAgent?: CustomUserAgent;
319
340
  retryThrottledRequestMaxTimes?: number;
320
341
  baseCDN?: string;
342
+ metadata?: Metadata;
321
343
  };
322
- declare const uploadFromObject: (file: NodeFile | BrowserFile, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, baseCDN }: FromObjectOptions) => Promise<UploadcareFile>;
344
+ declare const uploadFromObject: (file: NodeFile | BrowserFile, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, baseCDN, metadata }: FromObjectOptions) => Promise<UploadcareFile>;
323
345
  export declare type UploadFromUrlOptions = {
324
346
  baseCDN?: string;
325
347
  onProgress?: ProgressCallback;
326
348
  pusherKey?: string;
327
349
  } & FromUrlOptions;
328
- export declare const uploadFromUrl: (sourceUrl: string, { publicKey, fileName, baseURL, baseCDN, checkForUrlDuplicates, saveUrlForRecurrentUploads, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, pusherKey }: UploadFromUrlOptions) => Promise<UploadcareFile>;
350
+ export declare const uploadFromUrl: (sourceUrl: string, { publicKey, fileName, baseURL, baseCDN, checkForUrlDuplicates, saveUrlForRecurrentUploads, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, pusherKey, metadata }: UploadFromUrlOptions) => Promise<UploadcareFile>;
329
351
  export declare type FromUploadedOptions = {
330
352
  publicKey: string;
331
353
  fileName?: string;
@@ -358,8 +380,9 @@ export declare type MultipartOptions = {
358
380
  maxConcurrentRequests?: number;
359
381
  multipartMaxAttempts?: number;
360
382
  baseCDN?: string;
383
+ metadata?: Metadata;
361
384
  };
362
- export declare const uploadMultipart: (file: NodeFile | BrowserFile, { publicKey, fileName, fileSize, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, contentType, multipartChunkSize, maxConcurrentRequests, multipartMaxAttempts, baseCDN }: MultipartOptions) => Promise<UploadcareFile>;
385
+ export declare const uploadMultipart: (file: NodeFile | BrowserFile, { publicKey, fileName, fileSize, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, contentType, multipartChunkSize, maxConcurrentRequests, multipartMaxAttempts, baseCDN, metadata }: MultipartOptions) => Promise<UploadcareFile>;
363
386
  export declare type FileFromOptions = {
364
387
  publicKey: string;
365
388
  fileName?: string;
@@ -374,6 +397,7 @@ export declare type FileFromOptions = {
374
397
  userAgent?: CustomUserAgent;
375
398
  retryThrottledRequestMaxTimes?: number;
376
399
  contentType?: string;
400
+ multipartMinFileSize?: number;
377
401
  multipartChunkSize?: number;
378
402
  multipartMaxAttempts?: number;
379
403
  maxConcurrentRequests?: number;
@@ -381,11 +405,12 @@ export declare type FileFromOptions = {
381
405
  checkForUrlDuplicates?: boolean;
382
406
  saveUrlForRecurrentUploads?: boolean;
383
407
  pusherKey?: string;
408
+ metadata?: Metadata;
384
409
  };
385
410
  /**
386
411
  * Uploads file from provided data.
387
412
  */
388
- export declare function uploadFile(data: NodeFile | BrowserFile | Url | Uuid, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, contentType, multipartChunkSize, multipartMaxAttempts, maxConcurrentRequests, baseCDN, checkForUrlDuplicates, saveUrlForRecurrentUploads, pusherKey }: FileFromOptions): Promise<UploadcareFile>;
413
+ export declare function uploadFile(data: NodeFile | BrowserFile | Url | Uuid, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, contentType, multipartMinFileSize, multipartChunkSize, multipartMaxAttempts, maxConcurrentRequests, baseCDN, checkForUrlDuplicates, saveUrlForRecurrentUploads, pusherKey, metadata }: FileFromOptions): Promise<UploadcareFile>;
389
414
  export declare class UploadcareGroup {
390
415
  readonly uuid: GroupId;
391
416
  readonly filesCount: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uploadcare/upload-client",
3
- "version": "3.0.0",
3
+ "version": "3.1.0",
4
4
  "description": "Library for work with Uploadcare Upload API",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs",