@uploadcare/upload-client 6.14.1-alpha.1 → 6.14.2

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.
@@ -405,7 +405,7 @@ const getUrl = (base, path, query) => {
405
405
  return url.toString();
406
406
  };
407
407
 
408
- var version = '6.14.0';
408
+ var version = '6.14.2';
409
409
 
410
410
  const LIBRARY_NAME = 'UploadcareUploadClient';
411
411
  const LIBRARY_VERSION = version;
@@ -700,7 +700,7 @@ function multipartStart(size, { publicKey, contentType, fileName, multipartChunk
700
700
  }
701
701
  else {
702
702
  // convert to array
703
- response.parts = Object.keys(response.parts).map((key) => response.parts[key]);
703
+ response.parts = Object.keys(response.parts).map((key) => response.parts[Number(key)]);
704
704
  return response;
705
705
  }
706
706
  }), { retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes });
@@ -786,19 +786,19 @@ function isGroupFileInfo(fileInfo) {
786
786
  }
787
787
  class UploadcareFile {
788
788
  uuid;
789
- name = null;
790
- size = null;
791
- isStored = null;
792
- isImage = null;
793
- mimeType = null;
794
- cdnUrl = null;
795
- s3Url = null;
796
- originalFilename = null;
797
- imageInfo = null;
798
- videoInfo = null;
799
- contentInfo = null;
800
- metadata = null;
801
- s3Bucket = null;
789
+ name;
790
+ size;
791
+ isStored;
792
+ isImage;
793
+ mimeType;
794
+ cdnUrl;
795
+ s3Url;
796
+ originalFilename;
797
+ imageInfo;
798
+ videoInfo;
799
+ contentInfo;
800
+ metadata;
801
+ s3Bucket;
802
802
  defaultEffects = null;
803
803
  constructor(fileInfo, { baseCDN = defaultSettings.baseCDN, fileName } = {}) {
804
804
  const { uuid, s3Bucket } = fileInfo;
@@ -1306,9 +1306,7 @@ const sliceChunk = (file, index, fileSize, chunkSize) => {
1306
1306
  };
1307
1307
 
1308
1308
  const prepareChunks = async (file, fileSize, chunkSize) => {
1309
- return {
1310
- getChunk: (index) => sliceChunk(file, index, fileSize, chunkSize)
1311
- };
1309
+ return (index) => sliceChunk(file, index, fileSize, chunkSize);
1312
1310
  };
1313
1311
 
1314
1312
  const uploadPart = (chunk, url, { publicKey, contentType, onProgress, signal, integration, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes }) => multipartUpload(chunk, url, {
@@ -1359,10 +1357,10 @@ const uploadMultipart = async (file, { publicKey, fileName, fileSize, baseURL, s
1359
1357
  metadata
1360
1358
  })
1361
1359
  .then(async ({ uuid, parts }) => {
1362
- const { getChunk, disposeChunks } = await prepareChunks(file, size, multipartChunkSize);
1363
- await runWithConcurrency(maxConcurrentRequests, parts.map((url, index) => async () => {
1364
- const chunk = getChunk(index);
1365
- return uploadPart(chunk, url, {
1360
+ const getChunk = await prepareChunks(file, size, multipartChunkSize);
1361
+ return Promise.all([
1362
+ uuid,
1363
+ runWithConcurrency(maxConcurrentRequests, parts.map((url, index) => () => uploadPart(getChunk(index), url, {
1366
1364
  publicKey,
1367
1365
  contentType,
1368
1366
  onProgress: createProgressHandler(parts.length, index),
@@ -1370,11 +1368,10 @@ const uploadMultipart = async (file, { publicKey, fileName, fileSize, baseURL, s
1370
1368
  integration,
1371
1369
  retryThrottledRequestMaxTimes,
1372
1370
  retryNetworkErrorMaxTimes
1373
- });
1374
- })).finally(() => disposeChunks?.());
1375
- return uuid;
1371
+ })))
1372
+ ]);
1376
1373
  })
1377
- .then((uuid) => multipartComplete(uuid, {
1374
+ .then(([uuid]) => multipartComplete(uuid, {
1378
1375
  publicKey,
1379
1376
  baseURL,
1380
1377
  source,
@@ -345,19 +345,19 @@ export type MultipartCompleteOptions = {
345
345
  export function multipartComplete(uuid: Uuid, { publicKey, baseURL, source, signal, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes }: MultipartCompleteOptions): Promise<FileInfo>;
346
346
  export declare class UploadcareFile {
347
347
  readonly uuid: Uuid;
348
- readonly name: null | string;
349
- readonly size: null | number;
350
- readonly isStored: null | boolean;
351
- readonly isImage: null | boolean;
352
- readonly mimeType: null | string;
353
- readonly cdnUrl: null | string;
354
- readonly s3Url: null | string;
355
- readonly originalFilename: null | string;
356
- readonly imageInfo: null | ImageInfo;
357
- readonly videoInfo: null | VideoInfo;
358
- readonly contentInfo: null | ContentInfo;
359
- readonly metadata: null | Metadata;
360
- readonly s3Bucket: null | string;
348
+ readonly name: string;
349
+ readonly size: number;
350
+ readonly isStored: boolean;
351
+ readonly isImage: boolean;
352
+ readonly mimeType: string;
353
+ readonly cdnUrl: string;
354
+ readonly s3Url: string | null;
355
+ readonly originalFilename: string;
356
+ readonly imageInfo: ImageInfo | null;
357
+ readonly videoInfo: VideoInfo | null;
358
+ readonly contentInfo: ContentInfo | null;
359
+ readonly metadata: Metadata | null;
360
+ readonly s3Bucket: string | null;
361
361
  readonly defaultEffects: null | string;
362
362
  constructor(fileInfo: FileInfo | GroupFileInfo, { baseCDN, fileName }?: {
363
363
  baseCDN?: string;
@@ -267,7 +267,6 @@ const request = (params) => {
267
267
  req.on('response', (res) => {
268
268
  if (aborted)
269
269
  return;
270
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
271
270
  const resChunks = [];
272
271
  res.on('data', (data) => {
273
272
  resChunks.push(data);
@@ -436,7 +435,7 @@ const getUrl = (base, path, query) => {
436
435
  return url.toString();
437
436
  };
438
437
 
439
- var version = '6.14.0';
438
+ var version = '6.14.2';
440
439
 
441
440
  const LIBRARY_NAME = 'UploadcareUploadClient';
442
441
  const LIBRARY_VERSION = version;
@@ -731,7 +730,7 @@ function multipartStart(size, { publicKey, contentType, fileName, multipartChunk
731
730
  }
732
731
  else {
733
732
  // convert to array
734
- response.parts = Object.keys(response.parts).map((key) => response.parts[key]);
733
+ response.parts = Object.keys(response.parts).map((key) => response.parts[Number(key)]);
735
734
  return response;
736
735
  }
737
736
  }), { retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes });
@@ -817,19 +816,19 @@ function isGroupFileInfo(fileInfo) {
817
816
  }
818
817
  class UploadcareFile {
819
818
  uuid;
820
- name = null;
821
- size = null;
822
- isStored = null;
823
- isImage = null;
824
- mimeType = null;
825
- cdnUrl = null;
826
- s3Url = null;
827
- originalFilename = null;
828
- imageInfo = null;
829
- videoInfo = null;
830
- contentInfo = null;
831
- metadata = null;
832
- s3Bucket = null;
819
+ name;
820
+ size;
821
+ isStored;
822
+ isImage;
823
+ mimeType;
824
+ cdnUrl;
825
+ s3Url;
826
+ originalFilename;
827
+ imageInfo;
828
+ videoInfo;
829
+ contentInfo;
830
+ metadata;
831
+ s3Bucket;
833
832
  defaultEffects = null;
834
833
  constructor(fileInfo, { baseCDN = defaultSettings.baseCDN, fileName } = {}) {
835
834
  const { uuid, s3Bucket } = fileInfo;
@@ -1338,9 +1337,7 @@ const sliceChunk = (file, index, fileSize, chunkSize) => {
1338
1337
  };
1339
1338
 
1340
1339
  const prepareChunks = async (file, fileSize, chunkSize) => {
1341
- return {
1342
- getChunk: (index) => sliceChunk(file, index, fileSize, chunkSize)
1343
- };
1340
+ return (index) => sliceChunk(file, index, fileSize, chunkSize);
1344
1341
  };
1345
1342
 
1346
1343
  const uploadPart = (chunk, url, { publicKey, contentType, onProgress, signal, integration, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes }) => multipartUpload(chunk, url, {
@@ -1391,10 +1388,10 @@ const uploadMultipart = async (file, { publicKey, fileName, fileSize, baseURL, s
1391
1388
  metadata
1392
1389
  })
1393
1390
  .then(async ({ uuid, parts }) => {
1394
- const { getChunk, disposeChunks } = await prepareChunks(file, size, multipartChunkSize);
1395
- await runWithConcurrency(maxConcurrentRequests, parts.map((url, index) => async () => {
1396
- const chunk = getChunk(index);
1397
- return uploadPart(chunk, url, {
1391
+ const getChunk = await prepareChunks(file, size, multipartChunkSize);
1392
+ return Promise.all([
1393
+ uuid,
1394
+ runWithConcurrency(maxConcurrentRequests, parts.map((url, index) => () => uploadPart(getChunk(index), url, {
1398
1395
  publicKey,
1399
1396
  contentType,
1400
1397
  onProgress: createProgressHandler(parts.length, index),
@@ -1402,11 +1399,10 @@ const uploadMultipart = async (file, { publicKey, fileName, fileSize, baseURL, s
1402
1399
  integration,
1403
1400
  retryThrottledRequestMaxTimes,
1404
1401
  retryNetworkErrorMaxTimes
1405
- });
1406
- })).finally(() => disposeChunks?.());
1407
- return uuid;
1402
+ })))
1403
+ ]);
1408
1404
  })
1409
- .then((uuid) => multipartComplete(uuid, {
1405
+ .then(([uuid]) => multipartComplete(uuid, {
1410
1406
  publicKey,
1411
1407
  baseURL,
1412
1408
  source,
@@ -345,19 +345,19 @@ export type MultipartCompleteOptions = {
345
345
  export function multipartComplete(uuid: Uuid, { publicKey, baseURL, source, signal, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes }: MultipartCompleteOptions): Promise<FileInfo>;
346
346
  export declare class UploadcareFile {
347
347
  readonly uuid: Uuid;
348
- readonly name: null | string;
349
- readonly size: null | number;
350
- readonly isStored: null | boolean;
351
- readonly isImage: null | boolean;
352
- readonly mimeType: null | string;
353
- readonly cdnUrl: null | string;
354
- readonly s3Url: null | string;
355
- readonly originalFilename: null | string;
356
- readonly imageInfo: null | ImageInfo;
357
- readonly videoInfo: null | VideoInfo;
358
- readonly contentInfo: null | ContentInfo;
359
- readonly metadata: null | Metadata;
360
- readonly s3Bucket: null | string;
348
+ readonly name: string;
349
+ readonly size: number;
350
+ readonly isStored: boolean;
351
+ readonly isImage: boolean;
352
+ readonly mimeType: string;
353
+ readonly cdnUrl: string;
354
+ readonly s3Url: string | null;
355
+ readonly originalFilename: string;
356
+ readonly imageInfo: ImageInfo | null;
357
+ readonly videoInfo: VideoInfo | null;
358
+ readonly contentInfo: ContentInfo | null;
359
+ readonly metadata: Metadata | null;
360
+ readonly s3Bucket: string | null;
361
361
  readonly defaultEffects: null | string;
362
362
  constructor(fileInfo: FileInfo | GroupFileInfo, { baseCDN, fileName }?: {
363
363
  baseCDN?: string;
@@ -413,7 +413,7 @@ const getUrl = (base, path, query) => {
413
413
  return url.toString();
414
414
  };
415
415
 
416
- var version = '6.14.0';
416
+ var version = '6.14.2';
417
417
 
418
418
  const LIBRARY_NAME = 'UploadcareUploadClient';
419
419
  const LIBRARY_VERSION = version;
@@ -708,7 +708,7 @@ function multipartStart(size, { publicKey, contentType, fileName, multipartChunk
708
708
  }
709
709
  else {
710
710
  // convert to array
711
- response.parts = Object.keys(response.parts).map((key) => response.parts[key]);
711
+ response.parts = Object.keys(response.parts).map((key) => response.parts[Number(key)]);
712
712
  return response;
713
713
  }
714
714
  }), { retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes });
@@ -794,19 +794,19 @@ function isGroupFileInfo(fileInfo) {
794
794
  }
795
795
  class UploadcareFile {
796
796
  uuid;
797
- name = null;
798
- size = null;
799
- isStored = null;
800
- isImage = null;
801
- mimeType = null;
802
- cdnUrl = null;
803
- s3Url = null;
804
- originalFilename = null;
805
- imageInfo = null;
806
- videoInfo = null;
807
- contentInfo = null;
808
- metadata = null;
809
- s3Bucket = null;
797
+ name;
798
+ size;
799
+ isStored;
800
+ isImage;
801
+ mimeType;
802
+ cdnUrl;
803
+ s3Url;
804
+ originalFilename;
805
+ imageInfo;
806
+ videoInfo;
807
+ contentInfo;
808
+ metadata;
809
+ s3Bucket;
810
810
  defaultEffects = null;
811
811
  constructor(fileInfo, { baseCDN = defaultSettings.baseCDN, fileName } = {}) {
812
812
  const { uuid, s3Bucket } = fileInfo;
@@ -1331,20 +1331,9 @@ const prepareChunks = async (file, fileSize, chunkSize) => {
1331
1331
  else {
1332
1332
  blob = file;
1333
1333
  }
1334
- const chunks = new Set();
1335
- return {
1336
- getChunk: (index) => {
1337
- const chunk = sliceChunk(blob, index, fileSize, chunkSize);
1338
- chunks.add(chunk);
1339
- return chunk;
1340
- },
1341
- /**
1342
- * Remove references to all the chunks from the memory to make able
1343
- * react-native to deallocate it
1344
- */
1345
- disposeChunks: () => {
1346
- chunks.clear();
1347
- }
1334
+ return (index) => {
1335
+ const chunk = sliceChunk(blob, index, fileSize, chunkSize);
1336
+ return chunk;
1348
1337
  };
1349
1338
  };
1350
1339
 
@@ -1396,10 +1385,10 @@ const uploadMultipart = async (file, { publicKey, fileName, fileSize, baseURL, s
1396
1385
  metadata
1397
1386
  })
1398
1387
  .then(async ({ uuid, parts }) => {
1399
- const { getChunk, disposeChunks } = await prepareChunks(file, size, multipartChunkSize);
1400
- await runWithConcurrency(maxConcurrentRequests, parts.map((url, index) => async () => {
1401
- const chunk = getChunk(index);
1402
- return uploadPart(chunk, url, {
1388
+ const getChunk = await prepareChunks(file, size, multipartChunkSize);
1389
+ return Promise.all([
1390
+ uuid,
1391
+ runWithConcurrency(maxConcurrentRequests, parts.map((url, index) => () => uploadPart(getChunk(index), url, {
1403
1392
  publicKey,
1404
1393
  contentType,
1405
1394
  onProgress: createProgressHandler(parts.length, index),
@@ -1407,11 +1396,10 @@ const uploadMultipart = async (file, { publicKey, fileName, fileSize, baseURL, s
1407
1396
  integration,
1408
1397
  retryThrottledRequestMaxTimes,
1409
1398
  retryNetworkErrorMaxTimes
1410
- });
1411
- })).finally(() => disposeChunks?.());
1412
- return uuid;
1399
+ })))
1400
+ ]);
1413
1401
  })
1414
- .then((uuid) => multipartComplete(uuid, {
1402
+ .then(([uuid]) => multipartComplete(uuid, {
1415
1403
  publicKey,
1416
1404
  baseURL,
1417
1405
  source,
@@ -345,19 +345,19 @@ export type MultipartCompleteOptions = {
345
345
  export function multipartComplete(uuid: Uuid, { publicKey, baseURL, source, signal, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes }: MultipartCompleteOptions): Promise<FileInfo>;
346
346
  export declare class UploadcareFile {
347
347
  readonly uuid: Uuid;
348
- readonly name: null | string;
349
- readonly size: null | number;
350
- readonly isStored: null | boolean;
351
- readonly isImage: null | boolean;
352
- readonly mimeType: null | string;
353
- readonly cdnUrl: null | string;
354
- readonly s3Url: null | string;
355
- readonly originalFilename: null | string;
356
- readonly imageInfo: null | ImageInfo;
357
- readonly videoInfo: null | VideoInfo;
358
- readonly contentInfo: null | ContentInfo;
359
- readonly metadata: null | Metadata;
360
- readonly s3Bucket: null | string;
348
+ readonly name: string;
349
+ readonly size: number;
350
+ readonly isStored: boolean;
351
+ readonly isImage: boolean;
352
+ readonly mimeType: string;
353
+ readonly cdnUrl: string;
354
+ readonly s3Url: string | null;
355
+ readonly originalFilename: string;
356
+ readonly imageInfo: ImageInfo | null;
357
+ readonly videoInfo: VideoInfo | null;
358
+ readonly contentInfo: ContentInfo | null;
359
+ readonly metadata: Metadata | null;
360
+ readonly s3Bucket: string | null;
361
361
  readonly defaultEffects: null | string;
362
362
  constructor(fileInfo: FileInfo | GroupFileInfo, { baseCDN, fileName }?: {
363
363
  baseCDN?: string;
@@ -345,19 +345,19 @@ export type MultipartCompleteOptions = {
345
345
  export function multipartComplete(uuid: Uuid, { publicKey, baseURL, source, signal, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes }: MultipartCompleteOptions): Promise<FileInfo>;
346
346
  export declare class UploadcareFile {
347
347
  readonly uuid: Uuid;
348
- readonly name: null | string;
349
- readonly size: null | number;
350
- readonly isStored: null | boolean;
351
- readonly isImage: null | boolean;
352
- readonly mimeType: null | string;
353
- readonly cdnUrl: null | string;
354
- readonly s3Url: null | string;
355
- readonly originalFilename: null | string;
356
- readonly imageInfo: null | ImageInfo;
357
- readonly videoInfo: null | VideoInfo;
358
- readonly contentInfo: null | ContentInfo;
359
- readonly metadata: null | Metadata;
360
- readonly s3Bucket: null | string;
348
+ readonly name: string;
349
+ readonly size: number;
350
+ readonly isStored: boolean;
351
+ readonly isImage: boolean;
352
+ readonly mimeType: string;
353
+ readonly cdnUrl: string;
354
+ readonly s3Url: string | null;
355
+ readonly originalFilename: string;
356
+ readonly imageInfo: ImageInfo | null;
357
+ readonly videoInfo: VideoInfo | null;
358
+ readonly contentInfo: ContentInfo | null;
359
+ readonly metadata: Metadata | null;
360
+ readonly s3Bucket: string | null;
361
361
  readonly defaultEffects: null | string;
362
362
  constructor(fileInfo: FileInfo | GroupFileInfo, { baseCDN, fileName }?: {
363
363
  baseCDN?: string;
@@ -403,7 +403,7 @@ const getUrl = (base, path, query) => {
403
403
  return url.toString();
404
404
  };
405
405
 
406
- var version = '6.14.0';
406
+ var version = '6.14.2';
407
407
 
408
408
  const LIBRARY_NAME = 'UploadcareUploadClient';
409
409
  const LIBRARY_VERSION = version;
@@ -698,7 +698,7 @@ function multipartStart(size, { publicKey, contentType, fileName, multipartChunk
698
698
  }
699
699
  else {
700
700
  // convert to array
701
- response.parts = Object.keys(response.parts).map((key) => response.parts[key]);
701
+ response.parts = Object.keys(response.parts).map((key) => response.parts[Number(key)]);
702
702
  return response;
703
703
  }
704
704
  }), { retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes });
@@ -784,19 +784,19 @@ function isGroupFileInfo(fileInfo) {
784
784
  }
785
785
  class UploadcareFile {
786
786
  uuid;
787
- name = null;
788
- size = null;
789
- isStored = null;
790
- isImage = null;
791
- mimeType = null;
792
- cdnUrl = null;
793
- s3Url = null;
794
- originalFilename = null;
795
- imageInfo = null;
796
- videoInfo = null;
797
- contentInfo = null;
798
- metadata = null;
799
- s3Bucket = null;
787
+ name;
788
+ size;
789
+ isStored;
790
+ isImage;
791
+ mimeType;
792
+ cdnUrl;
793
+ s3Url;
794
+ originalFilename;
795
+ imageInfo;
796
+ videoInfo;
797
+ contentInfo;
798
+ metadata;
799
+ s3Bucket;
800
800
  defaultEffects = null;
801
801
  constructor(fileInfo, { baseCDN = defaultSettings.baseCDN, fileName } = {}) {
802
802
  const { uuid, s3Bucket } = fileInfo;
@@ -1304,9 +1304,7 @@ const sliceChunk = (file, index, fileSize, chunkSize) => {
1304
1304
  };
1305
1305
 
1306
1306
  const prepareChunks = async (file, fileSize, chunkSize) => {
1307
- return {
1308
- getChunk: (index) => sliceChunk(file, index, fileSize, chunkSize)
1309
- };
1307
+ return (index) => sliceChunk(file, index, fileSize, chunkSize);
1310
1308
  };
1311
1309
 
1312
1310
  const uploadPart = (chunk, url, { publicKey, contentType, onProgress, signal, integration, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes }) => multipartUpload(chunk, url, {
@@ -1357,10 +1355,10 @@ const uploadMultipart = async (file, { publicKey, fileName, fileSize, baseURL, s
1357
1355
  metadata
1358
1356
  })
1359
1357
  .then(async ({ uuid, parts }) => {
1360
- const { getChunk, disposeChunks } = await prepareChunks(file, size, multipartChunkSize);
1361
- await runWithConcurrency(maxConcurrentRequests, parts.map((url, index) => async () => {
1362
- const chunk = getChunk(index);
1363
- return uploadPart(chunk, url, {
1358
+ const getChunk = await prepareChunks(file, size, multipartChunkSize);
1359
+ return Promise.all([
1360
+ uuid,
1361
+ runWithConcurrency(maxConcurrentRequests, parts.map((url, index) => () => uploadPart(getChunk(index), url, {
1364
1362
  publicKey,
1365
1363
  contentType,
1366
1364
  onProgress: createProgressHandler(parts.length, index),
@@ -1368,11 +1366,10 @@ const uploadMultipart = async (file, { publicKey, fileName, fileSize, baseURL, s
1368
1366
  integration,
1369
1367
  retryThrottledRequestMaxTimes,
1370
1368
  retryNetworkErrorMaxTimes
1371
- });
1372
- })).finally(() => disposeChunks?.());
1373
- return uuid;
1369
+ })))
1370
+ ]);
1374
1371
  })
1375
- .then((uuid) => multipartComplete(uuid, {
1372
+ .then(([uuid]) => multipartComplete(uuid, {
1376
1373
  publicKey,
1377
1374
  baseURL,
1378
1375
  source,
@@ -345,19 +345,19 @@ export type MultipartCompleteOptions = {
345
345
  export function multipartComplete(uuid: Uuid, { publicKey, baseURL, source, signal, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes }: MultipartCompleteOptions): Promise<FileInfo>;
346
346
  export declare class UploadcareFile {
347
347
  readonly uuid: Uuid;
348
- readonly name: null | string;
349
- readonly size: null | number;
350
- readonly isStored: null | boolean;
351
- readonly isImage: null | boolean;
352
- readonly mimeType: null | string;
353
- readonly cdnUrl: null | string;
354
- readonly s3Url: null | string;
355
- readonly originalFilename: null | string;
356
- readonly imageInfo: null | ImageInfo;
357
- readonly videoInfo: null | VideoInfo;
358
- readonly contentInfo: null | ContentInfo;
359
- readonly metadata: null | Metadata;
360
- readonly s3Bucket: null | string;
348
+ readonly name: string;
349
+ readonly size: number;
350
+ readonly isStored: boolean;
351
+ readonly isImage: boolean;
352
+ readonly mimeType: string;
353
+ readonly cdnUrl: string;
354
+ readonly s3Url: string | null;
355
+ readonly originalFilename: string;
356
+ readonly imageInfo: ImageInfo | null;
357
+ readonly videoInfo: VideoInfo | null;
358
+ readonly contentInfo: ContentInfo | null;
359
+ readonly metadata: Metadata | null;
360
+ readonly s3Bucket: string | null;
361
361
  readonly defaultEffects: null | string;
362
362
  constructor(fileInfo: FileInfo | GroupFileInfo, { baseCDN, fileName }?: {
363
363
  baseCDN?: string;
@@ -265,7 +265,6 @@ const request = (params) => {
265
265
  req.on('response', (res) => {
266
266
  if (aborted)
267
267
  return;
268
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
269
268
  const resChunks = [];
270
269
  res.on('data', (data) => {
271
270
  resChunks.push(data);
@@ -434,7 +433,7 @@ const getUrl = (base, path, query) => {
434
433
  return url.toString();
435
434
  };
436
435
 
437
- var version = '6.14.0';
436
+ var version = '6.14.2';
438
437
 
439
438
  const LIBRARY_NAME = 'UploadcareUploadClient';
440
439
  const LIBRARY_VERSION = version;
@@ -729,7 +728,7 @@ function multipartStart(size, { publicKey, contentType, fileName, multipartChunk
729
728
  }
730
729
  else {
731
730
  // convert to array
732
- response.parts = Object.keys(response.parts).map((key) => response.parts[key]);
731
+ response.parts = Object.keys(response.parts).map((key) => response.parts[Number(key)]);
733
732
  return response;
734
733
  }
735
734
  }), { retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes });
@@ -815,19 +814,19 @@ function isGroupFileInfo(fileInfo) {
815
814
  }
816
815
  class UploadcareFile {
817
816
  uuid;
818
- name = null;
819
- size = null;
820
- isStored = null;
821
- isImage = null;
822
- mimeType = null;
823
- cdnUrl = null;
824
- s3Url = null;
825
- originalFilename = null;
826
- imageInfo = null;
827
- videoInfo = null;
828
- contentInfo = null;
829
- metadata = null;
830
- s3Bucket = null;
817
+ name;
818
+ size;
819
+ isStored;
820
+ isImage;
821
+ mimeType;
822
+ cdnUrl;
823
+ s3Url;
824
+ originalFilename;
825
+ imageInfo;
826
+ videoInfo;
827
+ contentInfo;
828
+ metadata;
829
+ s3Bucket;
831
830
  defaultEffects = null;
832
831
  constructor(fileInfo, { baseCDN = defaultSettings.baseCDN, fileName } = {}) {
833
832
  const { uuid, s3Bucket } = fileInfo;
@@ -1336,9 +1335,7 @@ const sliceChunk = (file, index, fileSize, chunkSize) => {
1336
1335
  };
1337
1336
 
1338
1337
  const prepareChunks = async (file, fileSize, chunkSize) => {
1339
- return {
1340
- getChunk: (index) => sliceChunk(file, index, fileSize, chunkSize)
1341
- };
1338
+ return (index) => sliceChunk(file, index, fileSize, chunkSize);
1342
1339
  };
1343
1340
 
1344
1341
  const uploadPart = (chunk, url, { publicKey, contentType, onProgress, signal, integration, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes }) => multipartUpload(chunk, url, {
@@ -1389,10 +1386,10 @@ const uploadMultipart = async (file, { publicKey, fileName, fileSize, baseURL, s
1389
1386
  metadata
1390
1387
  })
1391
1388
  .then(async ({ uuid, parts }) => {
1392
- const { getChunk, disposeChunks } = await prepareChunks(file, size, multipartChunkSize);
1393
- await runWithConcurrency(maxConcurrentRequests, parts.map((url, index) => async () => {
1394
- const chunk = getChunk(index);
1395
- return uploadPart(chunk, url, {
1389
+ const getChunk = await prepareChunks(file, size, multipartChunkSize);
1390
+ return Promise.all([
1391
+ uuid,
1392
+ runWithConcurrency(maxConcurrentRequests, parts.map((url, index) => () => uploadPart(getChunk(index), url, {
1396
1393
  publicKey,
1397
1394
  contentType,
1398
1395
  onProgress: createProgressHandler(parts.length, index),
@@ -1400,11 +1397,10 @@ const uploadMultipart = async (file, { publicKey, fileName, fileSize, baseURL, s
1400
1397
  integration,
1401
1398
  retryThrottledRequestMaxTimes,
1402
1399
  retryNetworkErrorMaxTimes
1403
- });
1404
- })).finally(() => disposeChunks?.());
1405
- return uuid;
1400
+ })))
1401
+ ]);
1406
1402
  })
1407
- .then((uuid) => multipartComplete(uuid, {
1403
+ .then(([uuid]) => multipartComplete(uuid, {
1408
1404
  publicKey,
1409
1405
  baseURL,
1410
1406
  source,
@@ -345,19 +345,19 @@ export type MultipartCompleteOptions = {
345
345
  export function multipartComplete(uuid: Uuid, { publicKey, baseURL, source, signal, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes }: MultipartCompleteOptions): Promise<FileInfo>;
346
346
  export declare class UploadcareFile {
347
347
  readonly uuid: Uuid;
348
- readonly name: null | string;
349
- readonly size: null | number;
350
- readonly isStored: null | boolean;
351
- readonly isImage: null | boolean;
352
- readonly mimeType: null | string;
353
- readonly cdnUrl: null | string;
354
- readonly s3Url: null | string;
355
- readonly originalFilename: null | string;
356
- readonly imageInfo: null | ImageInfo;
357
- readonly videoInfo: null | VideoInfo;
358
- readonly contentInfo: null | ContentInfo;
359
- readonly metadata: null | Metadata;
360
- readonly s3Bucket: null | string;
348
+ readonly name: string;
349
+ readonly size: number;
350
+ readonly isStored: boolean;
351
+ readonly isImage: boolean;
352
+ readonly mimeType: string;
353
+ readonly cdnUrl: string;
354
+ readonly s3Url: string | null;
355
+ readonly originalFilename: string;
356
+ readonly imageInfo: ImageInfo | null;
357
+ readonly videoInfo: VideoInfo | null;
358
+ readonly contentInfo: ContentInfo | null;
359
+ readonly metadata: Metadata | null;
360
+ readonly s3Bucket: string | null;
361
361
  readonly defaultEffects: null | string;
362
362
  constructor(fileInfo: FileInfo | GroupFileInfo, { baseCDN, fileName }?: {
363
363
  baseCDN?: string;
@@ -411,7 +411,7 @@ const getUrl = (base, path, query) => {
411
411
  return url.toString();
412
412
  };
413
413
 
414
- var version = '6.14.0';
414
+ var version = '6.14.2';
415
415
 
416
416
  const LIBRARY_NAME = 'UploadcareUploadClient';
417
417
  const LIBRARY_VERSION = version;
@@ -706,7 +706,7 @@ function multipartStart(size, { publicKey, contentType, fileName, multipartChunk
706
706
  }
707
707
  else {
708
708
  // convert to array
709
- response.parts = Object.keys(response.parts).map((key) => response.parts[key]);
709
+ response.parts = Object.keys(response.parts).map((key) => response.parts[Number(key)]);
710
710
  return response;
711
711
  }
712
712
  }), { retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes });
@@ -792,19 +792,19 @@ function isGroupFileInfo(fileInfo) {
792
792
  }
793
793
  class UploadcareFile {
794
794
  uuid;
795
- name = null;
796
- size = null;
797
- isStored = null;
798
- isImage = null;
799
- mimeType = null;
800
- cdnUrl = null;
801
- s3Url = null;
802
- originalFilename = null;
803
- imageInfo = null;
804
- videoInfo = null;
805
- contentInfo = null;
806
- metadata = null;
807
- s3Bucket = null;
795
+ name;
796
+ size;
797
+ isStored;
798
+ isImage;
799
+ mimeType;
800
+ cdnUrl;
801
+ s3Url;
802
+ originalFilename;
803
+ imageInfo;
804
+ videoInfo;
805
+ contentInfo;
806
+ metadata;
807
+ s3Bucket;
808
808
  defaultEffects = null;
809
809
  constructor(fileInfo, { baseCDN = defaultSettings.baseCDN, fileName } = {}) {
810
810
  const { uuid, s3Bucket } = fileInfo;
@@ -1329,20 +1329,9 @@ const prepareChunks = async (file, fileSize, chunkSize) => {
1329
1329
  else {
1330
1330
  blob = file;
1331
1331
  }
1332
- const chunks = new Set();
1333
- return {
1334
- getChunk: (index) => {
1335
- const chunk = sliceChunk(blob, index, fileSize, chunkSize);
1336
- chunks.add(chunk);
1337
- return chunk;
1338
- },
1339
- /**
1340
- * Remove references to all the chunks from the memory to make able
1341
- * react-native to deallocate it
1342
- */
1343
- disposeChunks: () => {
1344
- chunks.clear();
1345
- }
1332
+ return (index) => {
1333
+ const chunk = sliceChunk(blob, index, fileSize, chunkSize);
1334
+ return chunk;
1346
1335
  };
1347
1336
  };
1348
1337
 
@@ -1394,10 +1383,10 @@ const uploadMultipart = async (file, { publicKey, fileName, fileSize, baseURL, s
1394
1383
  metadata
1395
1384
  })
1396
1385
  .then(async ({ uuid, parts }) => {
1397
- const { getChunk, disposeChunks } = await prepareChunks(file, size, multipartChunkSize);
1398
- await runWithConcurrency(maxConcurrentRequests, parts.map((url, index) => async () => {
1399
- const chunk = getChunk(index);
1400
- return uploadPart(chunk, url, {
1386
+ const getChunk = await prepareChunks(file, size, multipartChunkSize);
1387
+ return Promise.all([
1388
+ uuid,
1389
+ runWithConcurrency(maxConcurrentRequests, parts.map((url, index) => () => uploadPart(getChunk(index), url, {
1401
1390
  publicKey,
1402
1391
  contentType,
1403
1392
  onProgress: createProgressHandler(parts.length, index),
@@ -1405,11 +1394,10 @@ const uploadMultipart = async (file, { publicKey, fileName, fileSize, baseURL, s
1405
1394
  integration,
1406
1395
  retryThrottledRequestMaxTimes,
1407
1396
  retryNetworkErrorMaxTimes
1408
- });
1409
- })).finally(() => disposeChunks?.());
1410
- return uuid;
1397
+ })))
1398
+ ]);
1411
1399
  })
1412
- .then((uuid) => multipartComplete(uuid, {
1400
+ .then(([uuid]) => multipartComplete(uuid, {
1413
1401
  publicKey,
1414
1402
  baseURL,
1415
1403
  source,
package/dist/index.d.ts CHANGED
@@ -345,19 +345,19 @@ export type MultipartCompleteOptions = {
345
345
  export function multipartComplete(uuid: Uuid, { publicKey, baseURL, source, signal, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes }: MultipartCompleteOptions): Promise<FileInfo>;
346
346
  export declare class UploadcareFile {
347
347
  readonly uuid: Uuid;
348
- readonly name: null | string;
349
- readonly size: null | number;
350
- readonly isStored: null | boolean;
351
- readonly isImage: null | boolean;
352
- readonly mimeType: null | string;
353
- readonly cdnUrl: null | string;
354
- readonly s3Url: null | string;
355
- readonly originalFilename: null | string;
356
- readonly imageInfo: null | ImageInfo;
357
- readonly videoInfo: null | VideoInfo;
358
- readonly contentInfo: null | ContentInfo;
359
- readonly metadata: null | Metadata;
360
- readonly s3Bucket: null | string;
348
+ readonly name: string;
349
+ readonly size: number;
350
+ readonly isStored: boolean;
351
+ readonly isImage: boolean;
352
+ readonly mimeType: string;
353
+ readonly cdnUrl: string;
354
+ readonly s3Url: string | null;
355
+ readonly originalFilename: string;
356
+ readonly imageInfo: ImageInfo | null;
357
+ readonly videoInfo: VideoInfo | null;
358
+ readonly contentInfo: ContentInfo | null;
359
+ readonly metadata: Metadata | null;
360
+ readonly s3Bucket: string | null;
361
361
  readonly defaultEffects: null | string;
362
362
  constructor(fileInfo: FileInfo | GroupFileInfo, { baseCDN, fileName }?: {
363
363
  baseCDN?: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uploadcare/upload-client",
3
- "version": "6.14.1-alpha.1",
3
+ "version": "6.14.2",
4
4
  "description": "Library for work with Uploadcare Upload API",
5
5
  "type": "module",
6
6
  "module": "./dist/esm/index.node.mjs",
@@ -80,7 +80,11 @@
80
80
  "@koa/router": "10.1.1",
81
81
  "@types/express-serve-static-core": "^4.17.28",
82
82
  "@types/koa": "2.13.4",
83
+ "@types/koa__cors": "^5.0.0",
84
+ "@types/koa__router": "^12.0.4",
83
85
  "@types/ws": "8.5.3",
86
+ "@uploadcare/api-client-utils": "^6.14.2",
87
+ "chalk": "^4.1.2",
84
88
  "data-uri-to-buffer": "3.0.1",
85
89
  "dataurl-to-blob": "0.0.1",
86
90
  "jest-environment-jsdom": "29.3.1",
@@ -89,9 +93,7 @@
89
93
  "koa-add-trailing-slashes": "2.0.1",
90
94
  "koa-body": "5.0.0",
91
95
  "mock-socket": "9.0.3",
92
- "start-server-and-test": "1.14.0",
93
- "@uploadcare/api-client-utils": "^6.14.0",
94
- "chalk": "^4.1.2"
96
+ "start-server-and-test": "1.14.0"
95
97
  },
96
98
  "dependencies": {
97
99
  "form-data": "^4.0.0",