@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.
@@ -413,7 +413,7 @@ const getUrl = (base, path, query) => {
413
413
  return url.toString();
414
414
  };
415
415
 
416
- var version = '6.18.3';
416
+ var version = '6.18.4';
417
417
 
418
418
  const LIBRARY_NAME = 'UploadcareUploadClient';
419
419
  const LIBRARY_VERSION = version;
@@ -488,7 +488,7 @@ function getStoreValue(store) {
488
488
  * Performs file uploading request to Uploadcare Upload API. Can be canceled and
489
489
  * has progress.
490
490
  */
491
- 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 }) {
491
+ 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 }) {
492
492
  return retryIfFailed(() => request({
493
493
  method: 'POST',
494
494
  url: getUrl(baseURL, '/base/', {
@@ -508,7 +508,8 @@ function base(file, { publicKey, fileName, contentType, baseURL = defaultSetting
508
508
  signature: secureSignature,
509
509
  expire: secureExpire,
510
510
  source: source,
511
- metadata
511
+ metadata,
512
+ tags: tags && tags.join(',')
512
513
  }),
513
514
  signal,
514
515
  onProgress
@@ -681,7 +682,7 @@ function info(uuid, { publicKey, baseURL = defaultSettings.baseURL, signal, sour
681
682
  }
682
683
 
683
684
  /** Start multipart uploading. */
684
- 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 }) {
685
+ 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 }) {
685
686
  return retryIfFailed(() => request({
686
687
  method: 'POST',
687
688
  url: getUrl(baseURL, '/multipart/start/', { jsonerrors: 1 }),
@@ -698,7 +699,8 @@ function multipartStart(size, { publicKey, contentType, fileName, multipartChunk
698
699
  signature: secureSignature,
699
700
  expire: secureExpire,
700
701
  source: source,
701
- metadata
702
+ metadata,
703
+ tags: tags && tags.join(',')
702
704
  }),
703
705
  signal
704
706
  }).then(({ data, headers, request }) => {
@@ -780,9 +782,9 @@ function isReadyPoll(uuid, { publicKey, baseURL, source, integration, userAgent,
780
782
  retryNetworkErrorMaxTimes
781
783
  }).then((response) => {
782
784
  if (response.isReady) {
785
+ onProgress && onProgress({ isComputable: true, value: 1 });
783
786
  return response;
784
787
  }
785
- onProgress && onProgress({ isComputable: true, value: 1 });
786
788
  return false;
787
789
  }),
788
790
  signal
@@ -806,6 +808,7 @@ class UploadcareFile {
806
808
  videoInfo;
807
809
  contentInfo;
808
810
  metadata;
811
+ tags;
809
812
  s3Bucket;
810
813
  defaultEffects = null;
811
814
  constructor(fileInfo, { baseCDN = defaultSettings.baseCDN, fileName } = {}) {
@@ -826,6 +829,7 @@ class UploadcareFile {
826
829
  this.videoInfo = fileInfo.videoInfo;
827
830
  this.contentInfo = fileInfo.contentInfo;
828
831
  this.metadata = fileInfo.metadata || null;
832
+ this.tags = fileInfo.tags || null;
829
833
  this.s3Bucket = s3Bucket || null;
830
834
  this.s3Url = s3Url;
831
835
  if (isGroupFileInfo(fileInfo)) {
@@ -834,7 +838,7 @@ class UploadcareFile {
834
838
  }
835
839
  }
836
840
 
837
- const uploadDirect = (file, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, contentType, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, baseCDN, metadata }) => {
841
+ const uploadDirect = (file, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, contentType, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, baseCDN, metadata, tags }) => {
838
842
  return base(file, {
839
843
  publicKey,
840
844
  fileName,
@@ -850,7 +854,8 @@ const uploadDirect = (file, { publicKey, fileName, baseURL, secureSignature, sec
850
854
  userAgent,
851
855
  retryThrottledRequestMaxTimes,
852
856
  retryNetworkErrorMaxTimes,
853
- metadata
857
+ metadata,
858
+ tags
854
859
  })
855
860
  .then(({ file }) => {
856
861
  return isReadyPoll(file, {
@@ -869,26 +874,17 @@ const uploadDirect = (file, { publicKey, fileName, baseURL, secureSignature, sec
869
874
  };
870
875
 
871
876
  const uploadFromUploaded = (uuid, { publicKey, fileName, baseURL, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, baseCDN }) => {
872
- return info(uuid, {
877
+ return isReadyPoll(uuid, {
873
878
  publicKey,
874
879
  baseURL,
875
880
  signal,
881
+ onProgress,
876
882
  source,
877
883
  integration,
878
884
  userAgent,
879
885
  retryThrottledRequestMaxTimes,
880
886
  retryNetworkErrorMaxTimes
881
- })
882
- .then((fileInfo) => new UploadcareFile(fileInfo, { baseCDN, fileName }))
883
- .then((result) => {
884
- // hack for node ¯\_(ツ)_/¯
885
- if (onProgress)
886
- onProgress({
887
- isComputable: true,
888
- value: 1
889
- });
890
- return result;
891
- });
887
+ }).then((fileInfo) => new UploadcareFile(fileInfo, { baseCDN, fileName }));
892
888
  };
893
889
 
894
890
  const race = (fns, { signal } = {}) => {
@@ -1218,15 +1214,20 @@ const uploadFromUrl = (sourceUrl, { publicKey, fileName, baseURL, baseCDN, check
1218
1214
  throw result;
1219
1215
  return result;
1220
1216
  })
1221
- .then((result) => isReadyPoll(result.uuid, {
1222
- publicKey,
1223
- baseURL,
1224
- integration,
1225
- userAgent,
1226
- retryThrottledRequestMaxTimes,
1227
- onProgress,
1228
- signal
1229
- }))
1217
+ .then((result) => {
1218
+ if (result.isReady) {
1219
+ return result;
1220
+ }
1221
+ return isReadyPoll(result.uuid, {
1222
+ publicKey,
1223
+ baseURL,
1224
+ integration,
1225
+ userAgent,
1226
+ retryThrottledRequestMaxTimes,
1227
+ onProgress,
1228
+ signal
1229
+ });
1230
+ })
1230
1231
  .then((fileInfo) => new UploadcareFile(fileInfo, { baseCDN }));
1231
1232
 
1232
1233
  const memo = new WeakMap();
@@ -1346,7 +1347,7 @@ const uploadPart = (chunk, url, { publicKey, contentType, onProgress, signal, in
1346
1347
  retryThrottledRequestMaxTimes,
1347
1348
  retryNetworkErrorMaxTimes
1348
1349
  });
1349
- 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 }) => {
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, tags }) => {
1350
1351
  const size = fileSize ?? (await getFileSize(file));
1351
1352
  let progressValues;
1352
1353
  const createProgressHandler = (totalChunks, chunkIdx) => {
@@ -1383,6 +1384,7 @@ const uploadMultipart = async (file, { publicKey, fileName, fileSize, baseURL, s
1383
1384
  retryThrottledRequestMaxTimes,
1384
1385
  retryNetworkErrorMaxTimes,
1385
1386
  metadata,
1387
+ tags,
1386
1388
  multipartChunkSize
1387
1389
  })
1388
1390
  .then(async ({ uuid, parts }) => {
@@ -1413,25 +1415,23 @@ const uploadMultipart = async (file, { publicKey, fileName, fileSize, baseURL, s
1413
1415
  if (fileInfo.isReady) {
1414
1416
  return fileInfo;
1415
1417
  }
1416
- else {
1417
- return isReadyPoll(fileInfo.uuid, {
1418
- publicKey,
1419
- baseURL,
1420
- source,
1421
- integration,
1422
- userAgent,
1423
- retryThrottledRequestMaxTimes,
1424
- retryNetworkErrorMaxTimes,
1425
- onProgress,
1426
- signal
1427
- });
1428
- }
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
1429
  })
1430
1430
  .then((fileInfo) => new UploadcareFile(fileInfo, { baseCDN }));
1431
1431
  };
1432
1432
 
1433
1433
  /** Uploads file from provided data. */
1434
- 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 }) {
1434
+ 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 }) {
1435
1435
  if (isFileData(data)) {
1436
1436
  const fileSize = await getFileSize(data);
1437
1437
  if (isMultipart(fileSize, multipartMinFileSize)) {
@@ -1454,7 +1454,8 @@ async function uploadFile(data, { publicKey, fileName, baseURL = defaultSettings
1454
1454
  retryThrottledRequestMaxTimes,
1455
1455
  retryNetworkErrorMaxTimes,
1456
1456
  baseCDN,
1457
- metadata
1457
+ metadata,
1458
+ tags
1458
1459
  });
1459
1460
  }
1460
1461
  return uploadDirect(data, {
@@ -1473,7 +1474,8 @@ async function uploadFile(data, { publicKey, fileName, baseURL = defaultSettings
1473
1474
  retryThrottledRequestMaxTimes,
1474
1475
  retryNetworkErrorMaxTimes,
1475
1476
  baseCDN,
1476
- metadata
1477
+ metadata,
1478
+ tags
1477
1479
  });
1478
1480
  }
1479
1481
  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;
@@ -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;
@@ -403,7 +403,7 @@ const getUrl = (base, path, query) => {
403
403
  return url.toString();
404
404
  };
405
405
 
406
- var version = '6.18.3';
406
+ var version = '6.18.4';
407
407
 
408
408
  const LIBRARY_NAME = 'UploadcareUploadClient';
409
409
  const LIBRARY_VERSION = version;
@@ -478,7 +478,7 @@ function getStoreValue(store) {
478
478
  * Performs file uploading request to Uploadcare Upload API. Can be canceled and
479
479
  * has progress.
480
480
  */
481
- 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 }) {
481
+ 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 }) {
482
482
  return retryIfFailed(() => request({
483
483
  method: 'POST',
484
484
  url: getUrl(baseURL, '/base/', {
@@ -498,7 +498,8 @@ function base(file, { publicKey, fileName, contentType, baseURL = defaultSetting
498
498
  signature: secureSignature,
499
499
  expire: secureExpire,
500
500
  source: source,
501
- metadata
501
+ metadata,
502
+ tags: tags && tags.join(',')
502
503
  }),
503
504
  signal,
504
505
  onProgress
@@ -671,7 +672,7 @@ function info(uuid, { publicKey, baseURL = defaultSettings.baseURL, signal, sour
671
672
  }
672
673
 
673
674
  /** Start multipart uploading. */
674
- 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 }) {
675
+ 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 }) {
675
676
  return retryIfFailed(() => request({
676
677
  method: 'POST',
677
678
  url: getUrl(baseURL, '/multipart/start/', { jsonerrors: 1 }),
@@ -688,7 +689,8 @@ function multipartStart(size, { publicKey, contentType, fileName, multipartChunk
688
689
  signature: secureSignature,
689
690
  expire: secureExpire,
690
691
  source: source,
691
- metadata
692
+ metadata,
693
+ tags: tags && tags.join(',')
692
694
  }),
693
695
  signal
694
696
  }).then(({ data, headers, request }) => {
@@ -770,9 +772,9 @@ function isReadyPoll(uuid, { publicKey, baseURL, source, integration, userAgent,
770
772
  retryNetworkErrorMaxTimes
771
773
  }).then((response) => {
772
774
  if (response.isReady) {
775
+ onProgress && onProgress({ isComputable: true, value: 1 });
773
776
  return response;
774
777
  }
775
- onProgress && onProgress({ isComputable: true, value: 1 });
776
778
  return false;
777
779
  }),
778
780
  signal
@@ -796,6 +798,7 @@ class UploadcareFile {
796
798
  videoInfo;
797
799
  contentInfo;
798
800
  metadata;
801
+ tags;
799
802
  s3Bucket;
800
803
  defaultEffects = null;
801
804
  constructor(fileInfo, { baseCDN = defaultSettings.baseCDN, fileName } = {}) {
@@ -816,6 +819,7 @@ class UploadcareFile {
816
819
  this.videoInfo = fileInfo.videoInfo;
817
820
  this.contentInfo = fileInfo.contentInfo;
818
821
  this.metadata = fileInfo.metadata || null;
822
+ this.tags = fileInfo.tags || null;
819
823
  this.s3Bucket = s3Bucket || null;
820
824
  this.s3Url = s3Url;
821
825
  if (isGroupFileInfo(fileInfo)) {
@@ -824,7 +828,7 @@ class UploadcareFile {
824
828
  }
825
829
  }
826
830
 
827
- const uploadDirect = (file, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, contentType, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, baseCDN, metadata }) => {
831
+ const uploadDirect = (file, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, contentType, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, baseCDN, metadata, tags }) => {
828
832
  return base(file, {
829
833
  publicKey,
830
834
  fileName,
@@ -840,7 +844,8 @@ const uploadDirect = (file, { publicKey, fileName, baseURL, secureSignature, sec
840
844
  userAgent,
841
845
  retryThrottledRequestMaxTimes,
842
846
  retryNetworkErrorMaxTimes,
843
- metadata
847
+ metadata,
848
+ tags
844
849
  })
845
850
  .then(({ file }) => {
846
851
  return isReadyPoll(file, {
@@ -859,26 +864,17 @@ const uploadDirect = (file, { publicKey, fileName, baseURL, secureSignature, sec
859
864
  };
860
865
 
861
866
  const uploadFromUploaded = (uuid, { publicKey, fileName, baseURL, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, baseCDN }) => {
862
- return info(uuid, {
867
+ return isReadyPoll(uuid, {
863
868
  publicKey,
864
869
  baseURL,
865
870
  signal,
871
+ onProgress,
866
872
  source,
867
873
  integration,
868
874
  userAgent,
869
875
  retryThrottledRequestMaxTimes,
870
876
  retryNetworkErrorMaxTimes
871
- })
872
- .then((fileInfo) => new UploadcareFile(fileInfo, { baseCDN, fileName }))
873
- .then((result) => {
874
- // hack for node ¯\_(ツ)_/¯
875
- if (onProgress)
876
- onProgress({
877
- isComputable: true,
878
- value: 1
879
- });
880
- return result;
881
- });
877
+ }).then((fileInfo) => new UploadcareFile(fileInfo, { baseCDN, fileName }));
882
878
  };
883
879
 
884
880
  const race = (fns, { signal } = {}) => {
@@ -1208,15 +1204,20 @@ const uploadFromUrl = (sourceUrl, { publicKey, fileName, baseURL, baseCDN, check
1208
1204
  throw result;
1209
1205
  return result;
1210
1206
  })
1211
- .then((result) => isReadyPoll(result.uuid, {
1212
- publicKey,
1213
- baseURL,
1214
- integration,
1215
- userAgent,
1216
- retryThrottledRequestMaxTimes,
1217
- onProgress,
1218
- signal
1219
- }))
1207
+ .then((result) => {
1208
+ if (result.isReady) {
1209
+ return result;
1210
+ }
1211
+ return isReadyPoll(result.uuid, {
1212
+ publicKey,
1213
+ baseURL,
1214
+ integration,
1215
+ userAgent,
1216
+ retryThrottledRequestMaxTimes,
1217
+ onProgress,
1218
+ signal
1219
+ });
1220
+ })
1220
1221
  .then((fileInfo) => new UploadcareFile(fileInfo, { baseCDN }));
1221
1222
 
1222
1223
  const memo = new WeakMap();
@@ -1316,7 +1317,7 @@ const uploadPart = (chunk, url, { publicKey, contentType, onProgress, signal, in
1316
1317
  retryThrottledRequestMaxTimes,
1317
1318
  retryNetworkErrorMaxTimes
1318
1319
  });
1319
- 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 }) => {
1320
+ 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 }) => {
1320
1321
  const size = fileSize ?? (await getFileSize(file));
1321
1322
  let progressValues;
1322
1323
  const createProgressHandler = (totalChunks, chunkIdx) => {
@@ -1353,6 +1354,7 @@ const uploadMultipart = async (file, { publicKey, fileName, fileSize, baseURL, s
1353
1354
  retryThrottledRequestMaxTimes,
1354
1355
  retryNetworkErrorMaxTimes,
1355
1356
  metadata,
1357
+ tags,
1356
1358
  multipartChunkSize
1357
1359
  })
1358
1360
  .then(async ({ uuid, parts }) => {
@@ -1383,25 +1385,23 @@ const uploadMultipart = async (file, { publicKey, fileName, fileSize, baseURL, s
1383
1385
  if (fileInfo.isReady) {
1384
1386
  return fileInfo;
1385
1387
  }
1386
- else {
1387
- return isReadyPoll(fileInfo.uuid, {
1388
- publicKey,
1389
- baseURL,
1390
- source,
1391
- integration,
1392
- userAgent,
1393
- retryThrottledRequestMaxTimes,
1394
- retryNetworkErrorMaxTimes,
1395
- onProgress,
1396
- signal
1397
- });
1398
- }
1388
+ return isReadyPoll(fileInfo.uuid, {
1389
+ publicKey,
1390
+ baseURL,
1391
+ source,
1392
+ integration,
1393
+ userAgent,
1394
+ retryThrottledRequestMaxTimes,
1395
+ retryNetworkErrorMaxTimes,
1396
+ onProgress,
1397
+ signal
1398
+ });
1399
1399
  })
1400
1400
  .then((fileInfo) => new UploadcareFile(fileInfo, { baseCDN }));
1401
1401
  };
1402
1402
 
1403
1403
  /** Uploads file from provided data. */
1404
- 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 }) {
1404
+ 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 }) {
1405
1405
  if (isFileData(data)) {
1406
1406
  const fileSize = await getFileSize(data);
1407
1407
  if (isMultipart(fileSize, multipartMinFileSize)) {
@@ -1424,7 +1424,8 @@ async function uploadFile(data, { publicKey, fileName, baseURL = defaultSettings
1424
1424
  retryThrottledRequestMaxTimes,
1425
1425
  retryNetworkErrorMaxTimes,
1426
1426
  baseCDN,
1427
- metadata
1427
+ metadata,
1428
+ tags
1428
1429
  });
1429
1430
  }
1430
1431
  return uploadDirect(data, {
@@ -1443,7 +1444,8 @@ async function uploadFile(data, { publicKey, fileName, baseURL = defaultSettings
1443
1444
  retryThrottledRequestMaxTimes,
1444
1445
  retryNetworkErrorMaxTimes,
1445
1446
  baseCDN,
1446
- metadata
1447
+ metadata,
1448
+ tags
1447
1449
  });
1448
1450
  }
1449
1451
  if (isUrl(data)) {