@uploadcare/upload-client 6.18.3 → 6.19.0-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.
@@ -73,6 +73,7 @@ export type ContentInfo = {
73
73
  video?: VideoInfo;
74
74
  };
75
75
  export type Metadata = Record<string, string>;
76
+ export type Tags = string[];
76
77
  export type StoreValue = "auto" | boolean;
77
78
  export declare class CancelError extends UploadcareError {
78
79
  isCancel: boolean;
@@ -125,12 +126,13 @@ export type FileInfo = {
125
126
  mimeType: string;
126
127
  isImage: boolean;
127
128
  isStored: boolean;
128
- isReady: string;
129
+ isReady: boolean;
129
130
  imageInfo: ImageInfo | null;
130
131
  videoInfo: VideoInfo | null;
131
132
  contentInfo: ContentInfo | null;
132
133
  s3Bucket?: string;
133
134
  metadata?: Metadata;
135
+ tags?: Tags;
134
136
  };
135
137
  export type GroupFileInfo = FileInfo & {
136
138
  defaultEffects: string;
@@ -175,12 +177,13 @@ export type BaseOptions = {
175
177
  retryThrottledRequestMaxTimes?: number;
176
178
  retryNetworkErrorMaxTimes?: number;
177
179
  metadata?: Metadata;
180
+ tags?: Tags;
178
181
  };
179
182
  /**
180
183
  * Performs file uploading request to Uploadcare Upload API. Can be canceled and
181
184
  * has progress.
182
185
  */
183
- export function base(file: SupportedFileInput, { publicKey, fileName, contentType, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, metadata }: BaseOptions): Promise<BaseResponse>;
186
+ export function base(file: SupportedFileInput, { publicKey, fileName, contentType, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, metadata, tags }: BaseOptions): Promise<BaseResponse>;
184
187
  export declare enum TypeEnum {
185
188
  Token = "token",
186
189
  FileInfo = "file_info"
@@ -309,6 +312,7 @@ export type MultipartStartOptions = {
309
312
  retryThrottledRequestMaxTimes?: number;
310
313
  retryNetworkErrorMaxTimes?: number;
311
314
  metadata?: Metadata;
315
+ tags?: Tags;
312
316
  };
313
317
  export type MultipartPart = string;
314
318
  export type MultipartStartResponse = {
@@ -316,7 +320,7 @@ export type MultipartStartResponse = {
316
320
  uuid: Uuid;
317
321
  };
318
322
  /** Start multipart uploading. */
319
- export function multipartStart(size: number, { publicKey, contentType, fileName, multipartChunkSize, baseURL, secureSignature, secureExpire, store, signal, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, metadata }: MultipartStartOptions): Promise<MultipartStartResponse>;
323
+ export function multipartStart(size: number, { publicKey, contentType, fileName, multipartChunkSize, baseURL, secureSignature, secureExpire, store, signal, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, metadata, tags }: MultipartStartOptions): Promise<MultipartStartResponse>;
320
324
  export type MultipartUploadOptions = {
321
325
  publicKey?: string;
322
326
  contentType?: string;
@@ -357,6 +361,7 @@ export declare class UploadcareFile {
357
361
  readonly videoInfo: VideoInfo | null;
358
362
  readonly contentInfo: ContentInfo | null;
359
363
  readonly metadata: Metadata | null;
364
+ readonly tags: Tags | null;
360
365
  readonly s3Bucket: string | null;
361
366
  readonly defaultEffects: null | string;
362
367
  constructor(fileInfo: FileInfo | GroupFileInfo, { baseCDN, fileName }?: {
@@ -387,9 +392,10 @@ export type FileFromOptions = {
387
392
  saveUrlForRecurrentUploads?: boolean;
388
393
  pusherKey?: string;
389
394
  metadata?: Metadata;
395
+ tags?: Tags;
390
396
  };
391
397
  /** Uploads file from provided data. */
392
- export declare function uploadFile(data: SupportedFileInput | Url | Uuid, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, contentType, multipartMinFileSize, multipartChunkSize, maxConcurrentRequests, baseCDN, checkForUrlDuplicates, saveUrlForRecurrentUploads, pusherKey, metadata }: FileFromOptions): Promise<UploadcareFile>;
398
+ export declare function uploadFile(data: SupportedFileInput | Url | Uuid, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, contentType, multipartMinFileSize, multipartChunkSize, maxConcurrentRequests, baseCDN, checkForUrlDuplicates, saveUrlForRecurrentUploads, pusherKey, metadata, tags }: FileFromOptions): Promise<UploadcareFile>;
393
399
  export type DirectOptions = {
394
400
  publicKey: string;
395
401
  fileName?: string;
@@ -407,8 +413,9 @@ export type DirectOptions = {
407
413
  retryNetworkErrorMaxTimes?: number;
408
414
  baseCDN?: string;
409
415
  metadata?: Metadata;
416
+ tags?: Tags;
410
417
  };
411
- export declare const uploadDirect: (file: SupportedFileInput, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, contentType, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, baseCDN, metadata }: DirectOptions) => Promise<UploadcareFile>;
418
+ export declare const uploadDirect: (file: SupportedFileInput, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, contentType, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, baseCDN, metadata, tags }: DirectOptions) => Promise<UploadcareFile>;
412
419
  export type FromUploadedOptions = {
413
420
  publicKey: string;
414
421
  fileName?: string;
@@ -449,8 +456,9 @@ export type MultipartOptions = {
449
456
  maxConcurrentRequests?: number;
450
457
  baseCDN?: string;
451
458
  metadata?: Metadata;
459
+ tags?: Tags;
452
460
  };
453
- export declare const uploadMultipart: (file: SupportedFileInput, { publicKey, fileName, fileSize, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, contentType, multipartChunkSize, maxConcurrentRequests, baseCDN, metadata }: MultipartOptions) => Promise<UploadcareFile>;
461
+ export declare const uploadMultipart: (file: SupportedFileInput, { publicKey, fileName, fileSize, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, contentType, multipartChunkSize, maxConcurrentRequests, baseCDN, metadata, tags }: MultipartOptions) => Promise<UploadcareFile>;
454
462
  export declare class UploadcareGroup {
455
463
  readonly uuid: GroupId;
456
464
  readonly filesCount: string;
@@ -433,7 +433,7 @@ const getUrl = (base, path, query) => {
433
433
  return url.toString();
434
434
  };
435
435
 
436
- var version = '6.18.3';
436
+ var version = '6.18.4';
437
437
 
438
438
  const LIBRARY_NAME = 'UploadcareUploadClient';
439
439
  const LIBRARY_VERSION = version;
@@ -508,7 +508,7 @@ function getStoreValue(store) {
508
508
  * Performs file uploading request to Uploadcare Upload API. Can be canceled and
509
509
  * has progress.
510
510
  */
511
- function base(file, { publicKey, fileName, contentType, baseURL = defaultSettings.baseURL, secureSignature, secureExpire, store, signal, onProgress, source = 'local', integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes = defaultSettings.retryNetworkErrorMaxTimes, metadata }) {
511
+ function base(file, { publicKey, fileName, contentType, baseURL = defaultSettings.baseURL, secureSignature, secureExpire, store, signal, onProgress, source = 'local', integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes = defaultSettings.retryNetworkErrorMaxTimes, metadata, tags }) {
512
512
  return retryIfFailed(() => request({
513
513
  method: 'POST',
514
514
  url: getUrl(baseURL, '/base/', {
@@ -528,7 +528,8 @@ function base(file, { publicKey, fileName, contentType, baseURL = defaultSetting
528
528
  signature: secureSignature,
529
529
  expire: secureExpire,
530
530
  source: source,
531
- metadata
531
+ metadata,
532
+ tags: tags && tags.join(',')
532
533
  }),
533
534
  signal,
534
535
  onProgress
@@ -701,7 +702,7 @@ function info(uuid, { publicKey, baseURL = defaultSettings.baseURL, signal, sour
701
702
  }
702
703
 
703
704
  /** Start multipart uploading. */
704
- function multipartStart(size, { publicKey, contentType, fileName, multipartChunkSize = defaultSettings.multipartChunkSize, baseURL = '', secureSignature, secureExpire, store, signal, source = 'local', integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes = defaultSettings.retryNetworkErrorMaxTimes, metadata }) {
705
+ function multipartStart(size, { publicKey, contentType, fileName, multipartChunkSize = defaultSettings.multipartChunkSize, baseURL = '', secureSignature, secureExpire, store, signal, source = 'local', integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes = defaultSettings.retryNetworkErrorMaxTimes, metadata, tags }) {
705
706
  return retryIfFailed(() => request({
706
707
  method: 'POST',
707
708
  url: getUrl(baseURL, '/multipart/start/', { jsonerrors: 1 }),
@@ -718,7 +719,8 @@ function multipartStart(size, { publicKey, contentType, fileName, multipartChunk
718
719
  signature: secureSignature,
719
720
  expire: secureExpire,
720
721
  source: source,
721
- metadata
722
+ metadata,
723
+ tags: tags && tags.join(',')
722
724
  }),
723
725
  signal
724
726
  }).then(({ data, headers, request }) => {
@@ -800,9 +802,9 @@ function isReadyPoll(uuid, { publicKey, baseURL, source, integration, userAgent,
800
802
  retryNetworkErrorMaxTimes
801
803
  }).then((response) => {
802
804
  if (response.isReady) {
805
+ onProgress && onProgress({ isComputable: true, value: 1 });
803
806
  return response;
804
807
  }
805
- onProgress && onProgress({ isComputable: true, value: 1 });
806
808
  return false;
807
809
  }),
808
810
  signal
@@ -826,6 +828,7 @@ class UploadcareFile {
826
828
  videoInfo;
827
829
  contentInfo;
828
830
  metadata;
831
+ tags;
829
832
  s3Bucket;
830
833
  defaultEffects = null;
831
834
  constructor(fileInfo, { baseCDN = defaultSettings.baseCDN, fileName } = {}) {
@@ -846,6 +849,7 @@ class UploadcareFile {
846
849
  this.videoInfo = fileInfo.videoInfo;
847
850
  this.contentInfo = fileInfo.contentInfo;
848
851
  this.metadata = fileInfo.metadata || null;
852
+ this.tags = fileInfo.tags || null;
849
853
  this.s3Bucket = s3Bucket || null;
850
854
  this.s3Url = s3Url;
851
855
  if (isGroupFileInfo(fileInfo)) {
@@ -854,7 +858,7 @@ class UploadcareFile {
854
858
  }
855
859
  }
856
860
 
857
- const uploadDirect = (file, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, contentType, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, baseCDN, metadata }) => {
861
+ const uploadDirect = (file, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, contentType, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, baseCDN, metadata, tags }) => {
858
862
  return base(file, {
859
863
  publicKey,
860
864
  fileName,
@@ -870,7 +874,8 @@ const uploadDirect = (file, { publicKey, fileName, baseURL, secureSignature, sec
870
874
  userAgent,
871
875
  retryThrottledRequestMaxTimes,
872
876
  retryNetworkErrorMaxTimes,
873
- metadata
877
+ metadata,
878
+ tags
874
879
  })
875
880
  .then(({ file }) => {
876
881
  return isReadyPoll(file, {
@@ -889,26 +894,17 @@ const uploadDirect = (file, { publicKey, fileName, baseURL, secureSignature, sec
889
894
  };
890
895
 
891
896
  const uploadFromUploaded = (uuid, { publicKey, fileName, baseURL, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, baseCDN }) => {
892
- return info(uuid, {
897
+ return isReadyPoll(uuid, {
893
898
  publicKey,
894
899
  baseURL,
895
900
  signal,
901
+ onProgress,
896
902
  source,
897
903
  integration,
898
904
  userAgent,
899
905
  retryThrottledRequestMaxTimes,
900
906
  retryNetworkErrorMaxTimes
901
- })
902
- .then((fileInfo) => new UploadcareFile(fileInfo, { baseCDN, fileName }))
903
- .then((result) => {
904
- // hack for node ¯\_(ツ)_/¯
905
- if (onProgress)
906
- onProgress({
907
- isComputable: true,
908
- value: 1
909
- });
910
- return result;
911
- });
907
+ }).then((fileInfo) => new UploadcareFile(fileInfo, { baseCDN, fileName }));
912
908
  };
913
909
 
914
910
  const race = (fns, { signal } = {}) => {
@@ -1236,15 +1232,20 @@ const uploadFromUrl = (sourceUrl, { publicKey, fileName, baseURL, baseCDN, check
1236
1232
  throw result;
1237
1233
  return result;
1238
1234
  })
1239
- .then((result) => isReadyPoll(result.uuid, {
1240
- publicKey,
1241
- baseURL,
1242
- integration,
1243
- userAgent,
1244
- retryThrottledRequestMaxTimes,
1245
- onProgress,
1246
- signal
1247
- }))
1235
+ .then((result) => {
1236
+ if (result.isReady) {
1237
+ return result;
1238
+ }
1239
+ return isReadyPoll(result.uuid, {
1240
+ publicKey,
1241
+ baseURL,
1242
+ integration,
1243
+ userAgent,
1244
+ retryThrottledRequestMaxTimes,
1245
+ onProgress,
1246
+ signal
1247
+ });
1248
+ })
1248
1249
  .then((fileInfo) => new UploadcareFile(fileInfo, { baseCDN }));
1249
1250
 
1250
1251
  const memo = new WeakMap();
@@ -1347,7 +1348,7 @@ const uploadPart = (chunk, url, { publicKey, contentType, onProgress, signal, in
1347
1348
  retryThrottledRequestMaxTimes,
1348
1349
  retryNetworkErrorMaxTimes
1349
1350
  });
1350
- const uploadMultipart = async (file, { publicKey, fileName, fileSize, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, contentType, multipartChunkSize = defaultSettings.multipartChunkSize, maxConcurrentRequests = defaultSettings.maxConcurrentRequests, baseCDN, metadata }) => {
1351
+ const uploadMultipart = async (file, { publicKey, fileName, fileSize, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, contentType, multipartChunkSize = defaultSettings.multipartChunkSize, maxConcurrentRequests = defaultSettings.maxConcurrentRequests, baseCDN, metadata, tags }) => {
1351
1352
  const size = fileSize ?? (await getFileSize(file));
1352
1353
  let progressValues;
1353
1354
  const createProgressHandler = (totalChunks, chunkIdx) => {
@@ -1384,6 +1385,7 @@ const uploadMultipart = async (file, { publicKey, fileName, fileSize, baseURL, s
1384
1385
  retryThrottledRequestMaxTimes,
1385
1386
  retryNetworkErrorMaxTimes,
1386
1387
  metadata,
1388
+ tags,
1387
1389
  multipartChunkSize
1388
1390
  })
1389
1391
  .then(async ({ uuid, parts }) => {
@@ -1414,25 +1416,23 @@ const uploadMultipart = async (file, { publicKey, fileName, fileSize, baseURL, s
1414
1416
  if (fileInfo.isReady) {
1415
1417
  return fileInfo;
1416
1418
  }
1417
- else {
1418
- return isReadyPoll(fileInfo.uuid, {
1419
- publicKey,
1420
- baseURL,
1421
- source,
1422
- integration,
1423
- userAgent,
1424
- retryThrottledRequestMaxTimes,
1425
- retryNetworkErrorMaxTimes,
1426
- onProgress,
1427
- signal
1428
- });
1429
- }
1419
+ return isReadyPoll(fileInfo.uuid, {
1420
+ publicKey,
1421
+ baseURL,
1422
+ source,
1423
+ integration,
1424
+ userAgent,
1425
+ retryThrottledRequestMaxTimes,
1426
+ retryNetworkErrorMaxTimes,
1427
+ onProgress,
1428
+ signal
1429
+ });
1430
1430
  })
1431
1431
  .then((fileInfo) => new UploadcareFile(fileInfo, { baseCDN }));
1432
1432
  };
1433
1433
 
1434
1434
  /** Uploads file from provided data. */
1435
- async function uploadFile(data, { publicKey, fileName, baseURL = defaultSettings.baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, contentType, multipartMinFileSize, multipartChunkSize, maxConcurrentRequests, baseCDN = defaultSettings.baseCDN, checkForUrlDuplicates, saveUrlForRecurrentUploads, pusherKey, metadata }) {
1435
+ async function uploadFile(data, { publicKey, fileName, baseURL = defaultSettings.baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, contentType, multipartMinFileSize, multipartChunkSize, maxConcurrentRequests, baseCDN = defaultSettings.baseCDN, checkForUrlDuplicates, saveUrlForRecurrentUploads, pusherKey, metadata, tags }) {
1436
1436
  if (isFileData(data)) {
1437
1437
  const fileSize = await getFileSize(data);
1438
1438
  if (isMultipart(fileSize, multipartMinFileSize)) {
@@ -1455,7 +1455,8 @@ async function uploadFile(data, { publicKey, fileName, baseURL = defaultSettings
1455
1455
  retryThrottledRequestMaxTimes,
1456
1456
  retryNetworkErrorMaxTimes,
1457
1457
  baseCDN,
1458
- metadata
1458
+ metadata,
1459
+ tags
1459
1460
  });
1460
1461
  }
1461
1462
  return uploadDirect(data, {
@@ -1474,7 +1475,8 @@ async function uploadFile(data, { publicKey, fileName, baseURL = defaultSettings
1474
1475
  retryThrottledRequestMaxTimes,
1475
1476
  retryNetworkErrorMaxTimes,
1476
1477
  baseCDN,
1477
- metadata
1478
+ metadata,
1479
+ tags
1478
1480
  });
1479
1481
  }
1480
1482
  if (isUrl(data)) {
@@ -73,6 +73,7 @@ export type ContentInfo = {
73
73
  video?: VideoInfo;
74
74
  };
75
75
  export type Metadata = Record<string, string>;
76
+ export type Tags = string[];
76
77
  export type StoreValue = "auto" | boolean;
77
78
  export declare class CancelError extends UploadcareError {
78
79
  isCancel: boolean;
@@ -125,12 +126,13 @@ export type FileInfo = {
125
126
  mimeType: string;
126
127
  isImage: boolean;
127
128
  isStored: boolean;
128
- isReady: string;
129
+ isReady: boolean;
129
130
  imageInfo: ImageInfo | null;
130
131
  videoInfo: VideoInfo | null;
131
132
  contentInfo: ContentInfo | null;
132
133
  s3Bucket?: string;
133
134
  metadata?: Metadata;
135
+ tags?: Tags;
134
136
  };
135
137
  export type GroupFileInfo = FileInfo & {
136
138
  defaultEffects: string;
@@ -175,12 +177,13 @@ export type BaseOptions = {
175
177
  retryThrottledRequestMaxTimes?: number;
176
178
  retryNetworkErrorMaxTimes?: number;
177
179
  metadata?: Metadata;
180
+ tags?: Tags;
178
181
  };
179
182
  /**
180
183
  * Performs file uploading request to Uploadcare Upload API. Can be canceled and
181
184
  * has progress.
182
185
  */
183
- export function base(file: SupportedFileInput, { publicKey, fileName, contentType, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, metadata }: BaseOptions): Promise<BaseResponse>;
186
+ export function base(file: SupportedFileInput, { publicKey, fileName, contentType, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, metadata, tags }: BaseOptions): Promise<BaseResponse>;
184
187
  export declare enum TypeEnum {
185
188
  Token = "token",
186
189
  FileInfo = "file_info"
@@ -309,6 +312,7 @@ export type MultipartStartOptions = {
309
312
  retryThrottledRequestMaxTimes?: number;
310
313
  retryNetworkErrorMaxTimes?: number;
311
314
  metadata?: Metadata;
315
+ tags?: Tags;
312
316
  };
313
317
  export type MultipartPart = string;
314
318
  export type MultipartStartResponse = {
@@ -316,7 +320,7 @@ export type MultipartStartResponse = {
316
320
  uuid: Uuid;
317
321
  };
318
322
  /** Start multipart uploading. */
319
- export function multipartStart(size: number, { publicKey, contentType, fileName, multipartChunkSize, baseURL, secureSignature, secureExpire, store, signal, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, metadata }: MultipartStartOptions): Promise<MultipartStartResponse>;
323
+ export function multipartStart(size: number, { publicKey, contentType, fileName, multipartChunkSize, baseURL, secureSignature, secureExpire, store, signal, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, metadata, tags }: MultipartStartOptions): Promise<MultipartStartResponse>;
320
324
  export type MultipartUploadOptions = {
321
325
  publicKey?: string;
322
326
  contentType?: string;
@@ -357,6 +361,7 @@ export declare class UploadcareFile {
357
361
  readonly videoInfo: VideoInfo | null;
358
362
  readonly contentInfo: ContentInfo | null;
359
363
  readonly metadata: Metadata | null;
364
+ readonly tags: Tags | null;
360
365
  readonly s3Bucket: string | null;
361
366
  readonly defaultEffects: null | string;
362
367
  constructor(fileInfo: FileInfo | GroupFileInfo, { baseCDN, fileName }?: {
@@ -387,9 +392,10 @@ export type FileFromOptions = {
387
392
  saveUrlForRecurrentUploads?: boolean;
388
393
  pusherKey?: string;
389
394
  metadata?: Metadata;
395
+ tags?: Tags;
390
396
  };
391
397
  /** Uploads file from provided data. */
392
- export declare function uploadFile(data: SupportedFileInput | Url | Uuid, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, contentType, multipartMinFileSize, multipartChunkSize, maxConcurrentRequests, baseCDN, checkForUrlDuplicates, saveUrlForRecurrentUploads, pusherKey, metadata }: FileFromOptions): Promise<UploadcareFile>;
398
+ export declare function uploadFile(data: SupportedFileInput | Url | Uuid, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, contentType, multipartMinFileSize, multipartChunkSize, maxConcurrentRequests, baseCDN, checkForUrlDuplicates, saveUrlForRecurrentUploads, pusherKey, metadata, tags }: FileFromOptions): Promise<UploadcareFile>;
393
399
  export type DirectOptions = {
394
400
  publicKey: string;
395
401
  fileName?: string;
@@ -407,8 +413,9 @@ export type DirectOptions = {
407
413
  retryNetworkErrorMaxTimes?: number;
408
414
  baseCDN?: string;
409
415
  metadata?: Metadata;
416
+ tags?: Tags;
410
417
  };
411
- export declare const uploadDirect: (file: SupportedFileInput, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, contentType, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, baseCDN, metadata }: DirectOptions) => Promise<UploadcareFile>;
418
+ export declare const uploadDirect: (file: SupportedFileInput, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, contentType, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, baseCDN, metadata, tags }: DirectOptions) => Promise<UploadcareFile>;
412
419
  export type FromUploadedOptions = {
413
420
  publicKey: string;
414
421
  fileName?: string;
@@ -449,8 +456,9 @@ export type MultipartOptions = {
449
456
  maxConcurrentRequests?: number;
450
457
  baseCDN?: string;
451
458
  metadata?: Metadata;
459
+ tags?: Tags;
452
460
  };
453
- export declare const uploadMultipart: (file: SupportedFileInput, { publicKey, fileName, fileSize, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, contentType, multipartChunkSize, maxConcurrentRequests, baseCDN, metadata }: MultipartOptions) => Promise<UploadcareFile>;
461
+ export declare const uploadMultipart: (file: SupportedFileInput, { publicKey, fileName, fileSize, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, contentType, multipartChunkSize, maxConcurrentRequests, baseCDN, metadata, tags }: MultipartOptions) => Promise<UploadcareFile>;
454
462
  export declare class UploadcareGroup {
455
463
  readonly uuid: GroupId;
456
464
  readonly filesCount: string;
@@ -411,7 +411,7 @@ const getUrl = (base, path, query) => {
411
411
  return url.toString();
412
412
  };
413
413
 
414
- var version = '6.18.3';
414
+ var version = '6.18.4';
415
415
 
416
416
  const LIBRARY_NAME = 'UploadcareUploadClient';
417
417
  const LIBRARY_VERSION = version;
@@ -486,7 +486,7 @@ function getStoreValue(store) {
486
486
  * Performs file uploading request to Uploadcare Upload API. Can be canceled and
487
487
  * has progress.
488
488
  */
489
- function base(file, { publicKey, fileName, contentType, baseURL = defaultSettings.baseURL, secureSignature, secureExpire, store, signal, onProgress, source = 'local', integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes = defaultSettings.retryNetworkErrorMaxTimes, metadata }) {
489
+ function base(file, { publicKey, fileName, contentType, baseURL = defaultSettings.baseURL, secureSignature, secureExpire, store, signal, onProgress, source = 'local', integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes = defaultSettings.retryNetworkErrorMaxTimes, metadata, tags }) {
490
490
  return retryIfFailed(() => request({
491
491
  method: 'POST',
492
492
  url: getUrl(baseURL, '/base/', {
@@ -506,7 +506,8 @@ function base(file, { publicKey, fileName, contentType, baseURL = defaultSetting
506
506
  signature: secureSignature,
507
507
  expire: secureExpire,
508
508
  source: source,
509
- metadata
509
+ metadata,
510
+ tags: tags && tags.join(',')
510
511
  }),
511
512
  signal,
512
513
  onProgress
@@ -679,7 +680,7 @@ function info(uuid, { publicKey, baseURL = defaultSettings.baseURL, signal, sour
679
680
  }
680
681
 
681
682
  /** Start multipart uploading. */
682
- function multipartStart(size, { publicKey, contentType, fileName, multipartChunkSize = defaultSettings.multipartChunkSize, baseURL = '', secureSignature, secureExpire, store, signal, source = 'local', integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes = defaultSettings.retryNetworkErrorMaxTimes, metadata }) {
683
+ function multipartStart(size, { publicKey, contentType, fileName, multipartChunkSize = defaultSettings.multipartChunkSize, baseURL = '', secureSignature, secureExpire, store, signal, source = 'local', integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes = defaultSettings.retryNetworkErrorMaxTimes, metadata, tags }) {
683
684
  return retryIfFailed(() => request({
684
685
  method: 'POST',
685
686
  url: getUrl(baseURL, '/multipart/start/', { jsonerrors: 1 }),
@@ -696,7 +697,8 @@ function multipartStart(size, { publicKey, contentType, fileName, multipartChunk
696
697
  signature: secureSignature,
697
698
  expire: secureExpire,
698
699
  source: source,
699
- metadata
700
+ metadata,
701
+ tags: tags && tags.join(',')
700
702
  }),
701
703
  signal
702
704
  }).then(({ data, headers, request }) => {
@@ -778,9 +780,9 @@ function isReadyPoll(uuid, { publicKey, baseURL, source, integration, userAgent,
778
780
  retryNetworkErrorMaxTimes
779
781
  }).then((response) => {
780
782
  if (response.isReady) {
783
+ onProgress && onProgress({ isComputable: true, value: 1 });
781
784
  return response;
782
785
  }
783
- onProgress && onProgress({ isComputable: true, value: 1 });
784
786
  return false;
785
787
  }),
786
788
  signal
@@ -804,6 +806,7 @@ class UploadcareFile {
804
806
  videoInfo;
805
807
  contentInfo;
806
808
  metadata;
809
+ tags;
807
810
  s3Bucket;
808
811
  defaultEffects = null;
809
812
  constructor(fileInfo, { baseCDN = defaultSettings.baseCDN, fileName } = {}) {
@@ -824,6 +827,7 @@ class UploadcareFile {
824
827
  this.videoInfo = fileInfo.videoInfo;
825
828
  this.contentInfo = fileInfo.contentInfo;
826
829
  this.metadata = fileInfo.metadata || null;
830
+ this.tags = fileInfo.tags || null;
827
831
  this.s3Bucket = s3Bucket || null;
828
832
  this.s3Url = s3Url;
829
833
  if (isGroupFileInfo(fileInfo)) {
@@ -832,7 +836,7 @@ class UploadcareFile {
832
836
  }
833
837
  }
834
838
 
835
- const uploadDirect = (file, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, contentType, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, baseCDN, metadata }) => {
839
+ const uploadDirect = (file, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, contentType, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, baseCDN, metadata, tags }) => {
836
840
  return base(file, {
837
841
  publicKey,
838
842
  fileName,
@@ -848,7 +852,8 @@ const uploadDirect = (file, { publicKey, fileName, baseURL, secureSignature, sec
848
852
  userAgent,
849
853
  retryThrottledRequestMaxTimes,
850
854
  retryNetworkErrorMaxTimes,
851
- metadata
855
+ metadata,
856
+ tags
852
857
  })
853
858
  .then(({ file }) => {
854
859
  return isReadyPoll(file, {
@@ -867,26 +872,17 @@ const uploadDirect = (file, { publicKey, fileName, baseURL, secureSignature, sec
867
872
  };
868
873
 
869
874
  const uploadFromUploaded = (uuid, { publicKey, fileName, baseURL, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, baseCDN }) => {
870
- return info(uuid, {
875
+ return isReadyPoll(uuid, {
871
876
  publicKey,
872
877
  baseURL,
873
878
  signal,
879
+ onProgress,
874
880
  source,
875
881
  integration,
876
882
  userAgent,
877
883
  retryThrottledRequestMaxTimes,
878
884
  retryNetworkErrorMaxTimes
879
- })
880
- .then((fileInfo) => new UploadcareFile(fileInfo, { baseCDN, fileName }))
881
- .then((result) => {
882
- // hack for node ¯\_(ツ)_/¯
883
- if (onProgress)
884
- onProgress({
885
- isComputable: true,
886
- value: 1
887
- });
888
- return result;
889
- });
885
+ }).then((fileInfo) => new UploadcareFile(fileInfo, { baseCDN, fileName }));
890
886
  };
891
887
 
892
888
  const race = (fns, { signal } = {}) => {
@@ -1216,15 +1212,20 @@ const uploadFromUrl = (sourceUrl, { publicKey, fileName, baseURL, baseCDN, check
1216
1212
  throw result;
1217
1213
  return result;
1218
1214
  })
1219
- .then((result) => isReadyPoll(result.uuid, {
1220
- publicKey,
1221
- baseURL,
1222
- integration,
1223
- userAgent,
1224
- retryThrottledRequestMaxTimes,
1225
- onProgress,
1226
- signal
1227
- }))
1215
+ .then((result) => {
1216
+ if (result.isReady) {
1217
+ return result;
1218
+ }
1219
+ return isReadyPoll(result.uuid, {
1220
+ publicKey,
1221
+ baseURL,
1222
+ integration,
1223
+ userAgent,
1224
+ retryThrottledRequestMaxTimes,
1225
+ onProgress,
1226
+ signal
1227
+ });
1228
+ })
1228
1229
  .then((fileInfo) => new UploadcareFile(fileInfo, { baseCDN }));
1229
1230
 
1230
1231
  const memo = new WeakMap();
@@ -1344,7 +1345,7 @@ const uploadPart = (chunk, url, { publicKey, contentType, onProgress, signal, in
1344
1345
  retryThrottledRequestMaxTimes,
1345
1346
  retryNetworkErrorMaxTimes
1346
1347
  });
1347
- const uploadMultipart = async (file, { publicKey, fileName, fileSize, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, contentType, multipartChunkSize = defaultSettings.multipartChunkSize, maxConcurrentRequests = defaultSettings.maxConcurrentRequests, baseCDN, metadata }) => {
1348
+ const uploadMultipart = async (file, { publicKey, fileName, fileSize, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, contentType, multipartChunkSize = defaultSettings.multipartChunkSize, maxConcurrentRequests = defaultSettings.maxConcurrentRequests, baseCDN, metadata, tags }) => {
1348
1349
  const size = fileSize ?? (await getFileSize(file));
1349
1350
  let progressValues;
1350
1351
  const createProgressHandler = (totalChunks, chunkIdx) => {
@@ -1381,6 +1382,7 @@ const uploadMultipart = async (file, { publicKey, fileName, fileSize, baseURL, s
1381
1382
  retryThrottledRequestMaxTimes,
1382
1383
  retryNetworkErrorMaxTimes,
1383
1384
  metadata,
1385
+ tags,
1384
1386
  multipartChunkSize
1385
1387
  })
1386
1388
  .then(async ({ uuid, parts }) => {
@@ -1411,25 +1413,23 @@ const uploadMultipart = async (file, { publicKey, fileName, fileSize, baseURL, s
1411
1413
  if (fileInfo.isReady) {
1412
1414
  return fileInfo;
1413
1415
  }
1414
- else {
1415
- return isReadyPoll(fileInfo.uuid, {
1416
- publicKey,
1417
- baseURL,
1418
- source,
1419
- integration,
1420
- userAgent,
1421
- retryThrottledRequestMaxTimes,
1422
- retryNetworkErrorMaxTimes,
1423
- onProgress,
1424
- signal
1425
- });
1426
- }
1416
+ return isReadyPoll(fileInfo.uuid, {
1417
+ publicKey,
1418
+ baseURL,
1419
+ source,
1420
+ integration,
1421
+ userAgent,
1422
+ retryThrottledRequestMaxTimes,
1423
+ retryNetworkErrorMaxTimes,
1424
+ onProgress,
1425
+ signal
1426
+ });
1427
1427
  })
1428
1428
  .then((fileInfo) => new UploadcareFile(fileInfo, { baseCDN }));
1429
1429
  };
1430
1430
 
1431
1431
  /** Uploads file from provided data. */
1432
- async function uploadFile(data, { publicKey, fileName, baseURL = defaultSettings.baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, contentType, multipartMinFileSize, multipartChunkSize, maxConcurrentRequests, baseCDN = defaultSettings.baseCDN, checkForUrlDuplicates, saveUrlForRecurrentUploads, pusherKey, metadata }) {
1432
+ async function uploadFile(data, { publicKey, fileName, baseURL = defaultSettings.baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, contentType, multipartMinFileSize, multipartChunkSize, maxConcurrentRequests, baseCDN = defaultSettings.baseCDN, checkForUrlDuplicates, saveUrlForRecurrentUploads, pusherKey, metadata, tags }) {
1433
1433
  if (isFileData(data)) {
1434
1434
  const fileSize = await getFileSize(data);
1435
1435
  if (isMultipart(fileSize, multipartMinFileSize)) {
@@ -1452,7 +1452,8 @@ async function uploadFile(data, { publicKey, fileName, baseURL = defaultSettings
1452
1452
  retryThrottledRequestMaxTimes,
1453
1453
  retryNetworkErrorMaxTimes,
1454
1454
  baseCDN,
1455
- metadata
1455
+ metadata,
1456
+ tags
1456
1457
  });
1457
1458
  }
1458
1459
  return uploadDirect(data, {
@@ -1471,7 +1472,8 @@ async function uploadFile(data, { publicKey, fileName, baseURL = defaultSettings
1471
1472
  retryThrottledRequestMaxTimes,
1472
1473
  retryNetworkErrorMaxTimes,
1473
1474
  baseCDN,
1474
- metadata
1475
+ metadata,
1476
+ tags
1475
1477
  });
1476
1478
  }
1477
1479
  if (isUrl(data)) {