@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/dist/index.js CHANGED
@@ -144,34 +144,109 @@ function identity(obj) {
144
144
  return obj;
145
145
  }
146
146
 
147
+ const getFileOptions = ({ name, contentType }) => [
148
+ {
149
+ filename: name,
150
+ contentType
151
+ }
152
+ ];
147
153
  const transformFile = identity;
148
154
  var getFormData = () => new NodeFormData();
149
155
 
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]}`);
156
+ /**
157
+ * FileData type guard.
158
+ */
159
+ const isFileData = (data) => {
160
+ return (data !== undefined &&
161
+ ((typeof Blob !== 'undefined' && data instanceof Blob) ||
162
+ (typeof File !== 'undefined' && data instanceof File) ||
163
+ (typeof Buffer !== 'undefined' && data instanceof Buffer)));
164
+ };
165
+ /**
166
+ * Uuid type guard.
167
+ */
168
+ const isUuid = (data) => {
169
+ const UUID_REGEX = '[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}';
170
+ const regExp = new RegExp(UUID_REGEX);
171
+ return !isFileData(data) && regExp.test(data);
172
+ };
173
+ /**
174
+ * Url type guard.
175
+ *
176
+ * @param {NodeFile | BrowserFile | Url | Uuid} data
177
+ */
178
+ const isUrl = (data) => {
179
+ const URL_REGEX = '^(?:\\w+:)?\\/\\/([^\\s\\.]+\\.\\S{2}|localhost[\\:?\\d]*)\\S*$';
180
+ const regExp = new RegExp(URL_REGEX);
181
+ return !isFileData(data) && regExp.test(data);
182
+ };
183
+
184
+ const isSimpleValue = (value) => {
185
+ return (typeof value === 'string' ||
186
+ typeof value === 'number' ||
187
+ typeof value === 'undefined');
188
+ };
189
+ const isObjectValue = (value) => {
190
+ return !!value && typeof value === 'object' && !Array.isArray(value);
191
+ };
192
+ const isFileValue = (value) => !!value &&
193
+ typeof value === 'object' &&
194
+ 'data' in value &&
195
+ isFileData(value.data);
196
+ function collectParams(params, inputKey, inputValue) {
197
+ if (isFileValue(inputValue)) {
198
+ const { name, contentType } = inputValue;
199
+ const file = transformFile(inputValue.data); // lgtm [js/superfluous-trailing-arguments]
200
+ const options = getFileOptions({ name, contentType });
201
+ params.push([inputKey, file, ...options]);
202
+ }
203
+ else if (isObjectValue(inputValue)) {
204
+ for (const [key, value] of Object.entries(inputValue)) {
205
+ if (typeof value !== 'undefined') {
206
+ params.push([`${inputKey}[${key}]`, String(value)]);
207
+ }
165
208
  }
166
209
  }
210
+ else if (isSimpleValue(inputValue) && inputValue) {
211
+ params.push([inputKey, inputValue.toString()]);
212
+ }
213
+ }
214
+ function getFormDataParams(options) {
215
+ const params = [];
216
+ for (const [key, value] of Object.entries(options)) {
217
+ collectParams(params, key, value);
218
+ }
219
+ return params;
220
+ }
221
+ function buildFormData(options) {
222
+ const formData = getFormData();
223
+ const paramsList = getFormDataParams(options);
224
+ for (const params of paramsList) {
225
+ const [key, value, ...options] = params;
226
+ // node form-data has another signature for append
227
+ formData.append(key, value, ...options);
228
+ }
167
229
  return formData;
168
230
  }
169
231
 
170
232
  const serializePair = (key, value) => typeof value !== 'undefined' ? `${key}=${encodeURIComponent(value)}` : null;
233
+ // TODO: generalize value transforming logic and use it here and inside `buildFormData`
171
234
  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)), [])
235
+ .reduce((params, [key, value]) => {
236
+ let param;
237
+ if (typeof value === 'object' && !Array.isArray(value)) {
238
+ param = Object.entries(value)
239
+ .filter((entry) => typeof entry[1] !== 'undefined')
240
+ .map((entry) => serializePair(`${key}[${entry[0]}]`, String(entry[1])));
241
+ }
242
+ else if (Array.isArray(value)) {
243
+ param = value.map((val) => serializePair(`${key}[]`, val));
244
+ }
245
+ else {
246
+ param = serializePair(key, value);
247
+ }
248
+ return params.concat(param);
249
+ }, [])
175
250
  .filter((x) => !!x)
176
251
  .join('&');
177
252
  const getUrl = (base, path, query) => [
@@ -203,7 +278,7 @@ const defaultSettings = {
203
278
  const defaultContentType = 'application/octet-stream';
204
279
  const defaultFilename = 'original';
205
280
 
206
- var version = '3.0.0';
281
+ var version = '3.1.1';
207
282
 
208
283
  /**
209
284
  * Returns User Agent based on version and settings.
@@ -303,11 +378,15 @@ function retryIfThrottled(fn, retryThrottledMaxTimes) {
303
378
  }));
304
379
  }
305
380
 
381
+ function getStoreValue(store) {
382
+ return typeof store === 'undefined' ? 'auto' : store ? '1' : '0';
383
+ }
384
+
306
385
  /**
307
386
  * Performs file uploading request to Uploadcare Upload API.
308
387
  * Can be canceled and has progress.
309
388
  */
310
- function base(file, { publicKey, fileName, baseURL = defaultSettings.baseURL, secureSignature, secureExpire, store, signal, onProgress, source = 'local', integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes }) {
389
+ function base(file, { publicKey, fileName, contentType, baseURL = defaultSettings.baseURL, secureSignature, secureExpire, store, signal, onProgress, source = 'local', integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes, metadata }) {
311
390
  return retryIfThrottled(() => {
312
391
  var _a;
313
392
  return request({
@@ -318,17 +397,19 @@ function base(file, { publicKey, fileName, baseURL = defaultSettings.baseURL, se
318
397
  headers: {
319
398
  'X-UC-User-Agent': getUserAgent({ publicKey, integration, userAgent })
320
399
  },
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
- ]),
400
+ data: buildFormData({
401
+ file: {
402
+ data: file,
403
+ name: (_a = fileName !== null && fileName !== void 0 ? fileName : file.name) !== null && _a !== void 0 ? _a : defaultFilename,
404
+ contentType
405
+ },
406
+ UPLOADCARE_PUB_KEY: publicKey,
407
+ UPLOADCARE_STORE: getStoreValue(store),
408
+ signature: secureSignature,
409
+ expire: secureExpire,
410
+ source: source,
411
+ metadata
412
+ }),
332
413
  signal,
333
414
  onProgress
334
415
  }).then(({ data, headers, request }) => {
@@ -351,7 +432,7 @@ var TypeEnum;
351
432
  /**
352
433
  * Uploading files from URL.
353
434
  */
354
- function fromUrl(sourceUrl, { publicKey, baseURL = defaultSettings.baseURL, store, fileName, checkForUrlDuplicates, saveUrlForRecurrentUploads, secureSignature, secureExpire, source = 'url', signal, integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes }) {
435
+ function fromUrl(sourceUrl, { publicKey, baseURL = defaultSettings.baseURL, store, fileName, checkForUrlDuplicates, saveUrlForRecurrentUploads, secureSignature, secureExpire, source = 'url', signal, integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes, metadata }) {
355
436
  return retryIfThrottled(() => request({
356
437
  method: 'POST',
357
438
  headers: {
@@ -361,13 +442,14 @@ function fromUrl(sourceUrl, { publicKey, baseURL = defaultSettings.baseURL, stor
361
442
  jsonerrors: 1,
362
443
  pub_key: publicKey,
363
444
  source_url: sourceUrl,
364
- store: typeof store === 'undefined' ? 'auto' : store ? 1 : undefined,
445
+ store: getStoreValue(store),
365
446
  filename: fileName,
366
447
  check_URL_duplicates: checkForUrlDuplicates ? 1 : undefined,
367
448
  save_URL_duplicates: saveUrlForRecurrentUploads ? 1 : undefined,
368
449
  signature: secureSignature,
369
450
  expire: secureExpire,
370
- source: source
451
+ source: source,
452
+ metadata
371
453
  }),
372
454
  signal
373
455
  }).then(({ data, headers, request }) => {
@@ -510,24 +592,25 @@ function info(uuid, { publicKey, baseURL = defaultSettings.baseURL, signal, sour
510
592
  /**
511
593
  * Start multipart uploading.
512
594
  */
513
- function multipartStart(size, { publicKey, contentType, fileName, multipartChunkSize = defaultSettings.multipartChunkSize, baseURL = '', secureSignature, secureExpire, store, signal, source = 'local', integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes }) {
595
+ function multipartStart(size, { publicKey, contentType, fileName, multipartChunkSize = defaultSettings.multipartChunkSize, baseURL = '', secureSignature, secureExpire, store, signal, source = 'local', integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes, metadata }) {
514
596
  return retryIfThrottled(() => request({
515
597
  method: 'POST',
516
598
  url: getUrl(baseURL, '/multipart/start/', { jsonerrors: 1 }),
517
599
  headers: {
518
600
  'X-UC-User-Agent': getUserAgent({ publicKey, integration, userAgent })
519
601
  },
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
- ]),
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: getStoreValue(store),
608
+ UPLOADCARE_PUB_KEY: publicKey,
609
+ signature: secureSignature,
610
+ expire: secureExpire,
611
+ source: source,
612
+ metadata
613
+ }),
531
614
  signal
532
615
  }).then(({ data, headers, request }) => {
533
616
  const response = camelizeKeys(JSON.parse(data));
@@ -576,11 +659,11 @@ function multipartComplete(uuid, { publicKey, baseURL = defaultSettings.baseURL,
576
659
  headers: {
577
660
  'X-UC-User-Agent': getUserAgent({ publicKey, integration, userAgent })
578
661
  },
579
- data: buildFormData([
580
- ['uuid', uuid],
581
- ['UPLOADCARE_PUB_KEY', publicKey],
582
- ['source', source]
583
- ]),
662
+ data: buildFormData({
663
+ uuid: uuid,
664
+ UPLOADCARE_PUB_KEY: publicKey,
665
+ source: source
666
+ }),
584
667
  signal
585
668
  }).then(({ data, headers, request }) => {
586
669
  const response = camelizeKeys(JSON.parse(data));
@@ -606,6 +689,8 @@ class UploadcareFile {
606
689
  this.originalFilename = null;
607
690
  this.imageInfo = null;
608
691
  this.videoInfo = null;
692
+ this.contentInfo = null;
693
+ this.metadata = null;
609
694
  const { uuid, s3Bucket } = fileInfo;
610
695
  const urlBase = s3Bucket
611
696
  ? `https://${s3Bucket}.s3.amazonaws.com/${uuid}/${fileInfo.filename}`
@@ -625,6 +710,8 @@ class UploadcareFile {
625
710
  this.originalFilename = fileInfo.originalFilename;
626
711
  this.imageInfo = camelizeKeys(fileInfo.imageInfo);
627
712
  this.videoInfo = camelizeKeys(fileInfo.videoInfo);
713
+ this.contentInfo = camelizeKeys(fileInfo.contentInfo);
714
+ this.metadata = fileInfo.metadata || null;
628
715
  }
629
716
  }
630
717
 
@@ -676,10 +763,11 @@ function isReadyPoll({ file, publicKey, baseURL, source, integration, userAgent,
676
763
  });
677
764
  }
678
765
 
679
- const uploadFromObject = (file, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, baseCDN }) => {
766
+ const uploadFromObject = (file, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, contentType, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, baseCDN, metadata }) => {
680
767
  return base(file, {
681
768
  publicKey,
682
769
  fileName,
770
+ contentType,
683
771
  baseURL,
684
772
  secureSignature,
685
773
  secureExpire,
@@ -689,7 +777,8 @@ const uploadFromObject = (file, { publicKey, fileName, baseURL, secureSignature,
689
777
  source,
690
778
  integration,
691
779
  userAgent,
692
- retryThrottledRequestMaxTimes
780
+ retryThrottledRequestMaxTimes,
781
+ metadata
693
782
  })
694
783
  .then(({ file }) => {
695
784
  return isReadyPoll({
@@ -982,7 +1071,7 @@ const pushStrategy = ({ token, pusherKey, signal, onProgress }) => new Promise((
982
1071
  }
983
1072
  });
984
1073
  });
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))
1074
+ 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
1075
  .then(() => fromUrl(sourceUrl, {
987
1076
  publicKey,
988
1077
  fileName,
@@ -996,7 +1085,8 @@ const uploadFromUrl = (sourceUrl, { publicKey, fileName, baseURL, baseCDN, check
996
1085
  source,
997
1086
  integration,
998
1087
  userAgent,
999
- retryThrottledRequestMaxTimes
1088
+ retryThrottledRequestMaxTimes,
1089
+ metadata
1000
1090
  }))
1001
1091
  .catch((error) => {
1002
1092
  const pusher = getPusher(pusherKey);
@@ -1067,34 +1157,6 @@ const uploadFromUploaded = (uuid, { publicKey, fileName, baseURL, signal, onProg
1067
1157
  });
1068
1158
  };
1069
1159
 
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
1160
  /**
1099
1161
  * Get file size.
1100
1162
  */
@@ -1164,7 +1226,7 @@ const uploadPartWithRetry = (chunk, url, { publicKey, onProgress, signal, integr
1164
1226
  }
1165
1227
  throw error;
1166
1228
  }));
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 }) => {
1229
+ 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
1230
  const size = fileSize || getFileSize(file);
1169
1231
  let progressValues;
1170
1232
  const createProgressHandler = (totalChunks, chunkIdx) => {
@@ -1197,7 +1259,8 @@ const uploadMultipart = (file, { publicKey, fileName, fileSize, baseURL, secureS
1197
1259
  source,
1198
1260
  integration,
1199
1261
  userAgent,
1200
- retryThrottledRequestMaxTimes
1262
+ retryThrottledRequestMaxTimes,
1263
+ metadata
1201
1264
  })
1202
1265
  .then(({ uuid, parts }) => {
1203
1266
  const getChunk = prepareChunks(file, size, multipartChunkSize);
@@ -1244,10 +1307,10 @@ const uploadMultipart = (file, { publicKey, fileName, fileSize, baseURL, secureS
1244
1307
  /**
1245
1308
  * Uploads file from provided data.
1246
1309
  */
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 }) {
1310
+ 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
1311
  if (isFileData(data)) {
1249
1312
  const fileSize = getFileSize(data);
1250
- if (isMultipart(fileSize)) {
1313
+ if (isMultipart(fileSize, multipartMinFileSize)) {
1251
1314
  return uploadMultipart(data, {
1252
1315
  publicKey,
1253
1316
  contentType,
@@ -1265,12 +1328,14 @@ function uploadFile(data, { publicKey, fileName, baseURL = defaultSettings.baseU
1265
1328
  userAgent,
1266
1329
  maxConcurrentRequests,
1267
1330
  retryThrottledRequestMaxTimes,
1268
- baseCDN
1331
+ baseCDN,
1332
+ metadata
1269
1333
  });
1270
1334
  }
1271
1335
  return uploadFromObject(data, {
1272
1336
  publicKey,
1273
1337
  fileName,
1338
+ contentType,
1274
1339
  baseURL,
1275
1340
  secureSignature,
1276
1341
  secureExpire,
@@ -1281,7 +1346,8 @@ function uploadFile(data, { publicKey, fileName, baseURL = defaultSettings.baseU
1281
1346
  integration,
1282
1347
  userAgent,
1283
1348
  retryThrottledRequestMaxTimes,
1284
- baseCDN
1349
+ baseCDN,
1350
+ metadata
1285
1351
  });
1286
1352
  }
1287
1353
  if (isUrl(data)) {
@@ -1301,7 +1367,8 @@ function uploadFile(data, { publicKey, fileName, baseURL = defaultSettings.baseU
1301
1367
  integration,
1302
1368
  userAgent,
1303
1369
  retryThrottledRequestMaxTimes,
1304
- pusherKey
1370
+ pusherKey,
1371
+ metadata
1305
1372
  });
1306
1373
  }
1307
1374
  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;
@@ -136,14 +152,16 @@ export declare type BaseOptions = {
136
152
  secureSignature?: string;
137
153
  secureExpire?: string;
138
154
  store?: boolean;
155
+ contentType?: string;
139
156
  signal?: AbortSignal;
140
157
  onProgress?: ProgressCallback;
141
158
  source?: string;
142
159
  integration?: string;
143
160
  userAgent?: CustomUserAgent;
144
161
  retryThrottledRequestMaxTimes?: number;
162
+ metadata?: Metadata;
145
163
  };
146
- declare function base(file: NodeFile | BrowserFile, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes }: BaseOptions): Promise<BaseResponse>;
164
+ declare function base(file: NodeFile | BrowserFile, { publicKey, fileName, contentType, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, metadata }: BaseOptions): Promise<BaseResponse>;
147
165
  declare enum TypeEnum {
148
166
  Token = "token",
149
167
  FileInfo = "file_info"
@@ -171,8 +189,9 @@ export declare type FromUrlOptions = {
171
189
  integration?: string;
172
190
  userAgent?: CustomUserAgent;
173
191
  retryThrottledRequestMaxTimes?: number;
192
+ metadata?: Metadata;
174
193
  };
175
- declare function fromUrl(sourceUrl: Url, { publicKey, baseURL, store, fileName, checkForUrlDuplicates, saveUrlForRecurrentUploads, secureSignature, secureExpire, source, signal, integration, userAgent, retryThrottledRequestMaxTimes }: FromUrlOptions): Promise<FromUrlSuccessResponse>;
194
+ declare function fromUrl(sourceUrl: Url, { publicKey, baseURL, store, fileName, checkForUrlDuplicates, saveUrlForRecurrentUploads, secureSignature, secureExpire, source, signal, integration, userAgent, retryThrottledRequestMaxTimes, metadata }: FromUrlOptions): Promise<FromUrlSuccessResponse>;
176
195
  declare enum Status {
177
196
  Unknown = "unknown",
178
197
  Waiting = "waiting",
@@ -257,13 +276,14 @@ export declare type MultipartStartOptions = {
257
276
  integration?: string;
258
277
  userAgent?: CustomUserAgent;
259
278
  retryThrottledRequestMaxTimes?: number;
279
+ metadata?: Metadata;
260
280
  };
261
281
  export declare type MultipartPart = string;
262
282
  export declare type MultipartStartResponse = {
263
283
  parts: MultipartPart[];
264
284
  uuid: Uuid;
265
285
  };
266
- declare function multipartStart(size: number, { publicKey, contentType, fileName, multipartChunkSize, baseURL, secureSignature, secureExpire, store, signal, source, integration, userAgent, retryThrottledRequestMaxTimes }: MultipartStartOptions): Promise<MultipartStartResponse>;
286
+ declare function multipartStart(size: number, { publicKey, contentType, fileName, multipartChunkSize, baseURL, secureSignature, secureExpire, store, signal, source, integration, userAgent, retryThrottledRequestMaxTimes, metadata }: MultipartStartOptions): Promise<MultipartStartResponse>;
267
287
  export declare type MultipartUploadOptions = {
268
288
  publicKey?: string;
269
289
  signal?: AbortSignal;
@@ -298,6 +318,8 @@ export declare class UploadcareFile {
298
318
  readonly originalFilename: null | string;
299
319
  readonly imageInfo: null | ImageInfo;
300
320
  readonly videoInfo: null | VideoInfo;
321
+ readonly contentInfo: null | ContentInfo;
322
+ readonly metadata: null | Metadata;
301
323
  constructor(fileInfo: FileInfo, { baseCDN, defaultEffects, fileName }: {
302
324
  baseCDN?: string;
303
325
  defaultEffects?: string;
@@ -311,6 +333,7 @@ export declare type FromObjectOptions = {
311
333
  secureSignature?: string;
312
334
  secureExpire?: string;
313
335
  store?: boolean;
336
+ contentType?: string;
314
337
  signal?: AbortSignal;
315
338
  onProgress?: ProgressCallback;
316
339
  source?: string;
@@ -318,14 +341,15 @@ export declare type FromObjectOptions = {
318
341
  userAgent?: CustomUserAgent;
319
342
  retryThrottledRequestMaxTimes?: number;
320
343
  baseCDN?: string;
344
+ metadata?: Metadata;
321
345
  };
322
- declare const uploadFromObject: (file: NodeFile | BrowserFile, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, baseCDN }: FromObjectOptions) => Promise<UploadcareFile>;
346
+ declare const uploadFromObject: (file: NodeFile | BrowserFile, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, contentType, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, baseCDN, metadata }: FromObjectOptions) => Promise<UploadcareFile>;
323
347
  export declare type UploadFromUrlOptions = {
324
348
  baseCDN?: string;
325
349
  onProgress?: ProgressCallback;
326
350
  pusherKey?: string;
327
351
  } & 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>;
352
+ 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
353
  export declare type FromUploadedOptions = {
330
354
  publicKey: string;
331
355
  fileName?: string;
@@ -358,8 +382,9 @@ export declare type MultipartOptions = {
358
382
  maxConcurrentRequests?: number;
359
383
  multipartMaxAttempts?: number;
360
384
  baseCDN?: string;
385
+ metadata?: Metadata;
361
386
  };
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>;
387
+ 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
388
  export declare type FileFromOptions = {
364
389
  publicKey: string;
365
390
  fileName?: string;
@@ -374,6 +399,7 @@ export declare type FileFromOptions = {
374
399
  userAgent?: CustomUserAgent;
375
400
  retryThrottledRequestMaxTimes?: number;
376
401
  contentType?: string;
402
+ multipartMinFileSize?: number;
377
403
  multipartChunkSize?: number;
378
404
  multipartMaxAttempts?: number;
379
405
  maxConcurrentRequests?: number;
@@ -381,11 +407,12 @@ export declare type FileFromOptions = {
381
407
  checkForUrlDuplicates?: boolean;
382
408
  saveUrlForRecurrentUploads?: boolean;
383
409
  pusherKey?: string;
410
+ metadata?: Metadata;
384
411
  };
385
412
  /**
386
413
  * Uploads file from provided data.
387
414
  */
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>;
415
+ 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
416
  export declare class UploadcareGroup {
390
417
  readonly uuid: GroupId;
391
418
  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.2-alpha.0",
4
4
  "description": "Library for work with Uploadcare Upload API",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs",