@uploadcare/upload-client 4.3.1-alpha.0 → 5.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -1
- package/dist/index.browser.js +182 -151
- package/dist/index.node.js +87 -57
- package/dist/index.react-native.js +182 -151
- package/dist/types.d.ts +32 -17
- package/package.json +4 -4
package/dist/index.node.js
CHANGED
|
@@ -255,7 +255,7 @@ const buildSearchParams = (query) => {
|
|
|
255
255
|
};
|
|
256
256
|
const getUrl = (base, path, query) => {
|
|
257
257
|
const url = new URL(base);
|
|
258
|
-
url.pathname = path;
|
|
258
|
+
url.pathname = (url.pathname + path).replace('//', '/');
|
|
259
259
|
if (query) {
|
|
260
260
|
url.search = buildSearchParams(query);
|
|
261
261
|
}
|
|
@@ -271,18 +271,18 @@ const defaultSettings = {
|
|
|
271
271
|
baseURL: 'https://upload.uploadcare.com',
|
|
272
272
|
maxContentLength: 50 * 1024 * 1024,
|
|
273
273
|
retryThrottledRequestMaxTimes: 1,
|
|
274
|
+
retryNetworkErrorMaxTimes: 3,
|
|
274
275
|
multipartMinFileSize: 25 * 1024 * 1024,
|
|
275
276
|
multipartChunkSize: 5 * 1024 * 1024,
|
|
276
277
|
multipartMinLastPartSize: 1024 * 1024,
|
|
277
278
|
maxConcurrentRequests: 4,
|
|
278
|
-
multipartMaxAttempts: 3,
|
|
279
279
|
pollingTimeoutMilliseconds: 10000,
|
|
280
280
|
pusherKey: '79ae88bd931ea68464d9'
|
|
281
281
|
};
|
|
282
282
|
const defaultContentType = 'application/octet-stream';
|
|
283
283
|
const defaultFilename = 'original';
|
|
284
284
|
|
|
285
|
-
var version = '
|
|
285
|
+
var version = '5.1.0';
|
|
286
286
|
|
|
287
287
|
function isObject(o) {
|
|
288
288
|
return Object.prototype.toString.call(o) === '[object Object]';
|
|
@@ -375,6 +375,16 @@ function retrier(fn, options = defaultOptions) {
|
|
|
375
375
|
return runAttempt(fn);
|
|
376
376
|
}
|
|
377
377
|
|
|
378
|
+
class UploadcareNetworkError extends Error {
|
|
379
|
+
constructor(progressEvent) {
|
|
380
|
+
super();
|
|
381
|
+
this.name = 'UploadcareNetworkError';
|
|
382
|
+
this.message = 'Network error';
|
|
383
|
+
Object.setPrototypeOf(this, UploadcareNetworkError.prototype);
|
|
384
|
+
this.originalProgressEvent = progressEvent;
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
|
|
378
388
|
const LIBRARY_NAME = 'UploadcareUploadClient';
|
|
379
389
|
const LIBRARY_VERSION = version;
|
|
380
390
|
function getUserAgent(options) {
|
|
@@ -386,20 +396,26 @@ function getUserAgent(options) {
|
|
|
386
396
|
}
|
|
387
397
|
|
|
388
398
|
const REQUEST_WAS_THROTTLED_CODE = 'RequestThrottledError';
|
|
389
|
-
const
|
|
399
|
+
const DEFAULT_THROTTLED_TIMEOUT = 15000;
|
|
400
|
+
const DEFAULT_NETWORK_ERROR_TIMEOUT = 1000;
|
|
390
401
|
function getTimeoutFromThrottledRequest(error) {
|
|
391
402
|
const { headers } = error || {};
|
|
392
403
|
return ((headers &&
|
|
393
404
|
Number.parseInt(headers['x-throttle-wait-seconds']) * 1000) ||
|
|
394
|
-
|
|
405
|
+
DEFAULT_THROTTLED_TIMEOUT);
|
|
395
406
|
}
|
|
396
|
-
function
|
|
407
|
+
function retryIfFailed(fn, options) {
|
|
408
|
+
const { retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes } = options;
|
|
397
409
|
return retrier(({ attempt, retry }) => fn().catch((error) => {
|
|
398
410
|
if ('response' in error &&
|
|
399
411
|
error?.code === REQUEST_WAS_THROTTLED_CODE &&
|
|
400
|
-
attempt <
|
|
412
|
+
attempt < retryThrottledRequestMaxTimes) {
|
|
401
413
|
return retry(getTimeoutFromThrottledRequest(error));
|
|
402
414
|
}
|
|
415
|
+
if (error instanceof UploadcareNetworkError &&
|
|
416
|
+
attempt < retryNetworkErrorMaxTimes) {
|
|
417
|
+
return retry((attempt + 1) * DEFAULT_NETWORK_ERROR_TIMEOUT);
|
|
418
|
+
}
|
|
403
419
|
throw error;
|
|
404
420
|
}));
|
|
405
421
|
}
|
|
@@ -412,8 +428,8 @@ function getStoreValue(store) {
|
|
|
412
428
|
* Performs file uploading request to Uploadcare Upload API.
|
|
413
429
|
* Can be canceled and has progress.
|
|
414
430
|
*/
|
|
415
|
-
function base(file, { publicKey, fileName, contentType, baseURL = defaultSettings.baseURL, secureSignature, secureExpire, store, signal, onProgress, source = 'local', integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes, metadata }) {
|
|
416
|
-
return
|
|
431
|
+
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 }) {
|
|
432
|
+
return retryIfFailed(() => request({
|
|
417
433
|
method: 'POST',
|
|
418
434
|
url: getUrl(baseURL, '/base/', {
|
|
419
435
|
jsonerrors: 1
|
|
@@ -444,7 +460,7 @@ function base(file, { publicKey, fileName, contentType, baseURL = defaultSetting
|
|
|
444
460
|
else {
|
|
445
461
|
return response;
|
|
446
462
|
}
|
|
447
|
-
}), retryThrottledRequestMaxTimes);
|
|
463
|
+
}), { retryNetworkErrorMaxTimes, retryThrottledRequestMaxTimes });
|
|
448
464
|
}
|
|
449
465
|
|
|
450
466
|
var TypeEnum;
|
|
@@ -455,8 +471,8 @@ var TypeEnum;
|
|
|
455
471
|
/**
|
|
456
472
|
* Uploading files from URL.
|
|
457
473
|
*/
|
|
458
|
-
function fromUrl(sourceUrl, { publicKey, baseURL = defaultSettings.baseURL, store, fileName, checkForUrlDuplicates, saveUrlForRecurrentUploads, secureSignature, secureExpire, source = 'url', signal, integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes, metadata }) {
|
|
459
|
-
return
|
|
474
|
+
function fromUrl(sourceUrl, { publicKey, baseURL = defaultSettings.baseURL, store, fileName, checkForUrlDuplicates, saveUrlForRecurrentUploads, secureSignature, secureExpire, source = 'url', signal, integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes = defaultSettings.retryNetworkErrorMaxTimes, metadata }) {
|
|
475
|
+
return retryIfFailed(() => request({
|
|
460
476
|
method: 'POST',
|
|
461
477
|
headers: {
|
|
462
478
|
'X-UC-User-Agent': getUserAgent({ publicKey, integration, userAgent })
|
|
@@ -483,7 +499,7 @@ function fromUrl(sourceUrl, { publicKey, baseURL = defaultSettings.baseURL, stor
|
|
|
483
499
|
else {
|
|
484
500
|
return response;
|
|
485
501
|
}
|
|
486
|
-
}), retryThrottledRequestMaxTimes);
|
|
502
|
+
}), { retryNetworkErrorMaxTimes, retryThrottledRequestMaxTimes });
|
|
487
503
|
}
|
|
488
504
|
|
|
489
505
|
var Status;
|
|
@@ -500,8 +516,8 @@ const isErrorResponse = (response) => {
|
|
|
500
516
|
/**
|
|
501
517
|
* Checking upload status and working with file tokens.
|
|
502
518
|
*/
|
|
503
|
-
function fromUrlStatus(token, { publicKey, baseURL = defaultSettings.baseURL, signal, integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes } = {}) {
|
|
504
|
-
return
|
|
519
|
+
function fromUrlStatus(token, { publicKey, baseURL = defaultSettings.baseURL, signal, integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes = defaultSettings.retryNetworkErrorMaxTimes } = {}) {
|
|
520
|
+
return retryIfFailed(() => request({
|
|
505
521
|
method: 'GET',
|
|
506
522
|
headers: publicKey
|
|
507
523
|
? {
|
|
@@ -525,14 +541,14 @@ function fromUrlStatus(token, { publicKey, baseURL = defaultSettings.baseURL, si
|
|
|
525
541
|
else {
|
|
526
542
|
return response;
|
|
527
543
|
}
|
|
528
|
-
}), retryThrottledRequestMaxTimes);
|
|
544
|
+
}), { retryNetworkErrorMaxTimes, retryThrottledRequestMaxTimes });
|
|
529
545
|
}
|
|
530
546
|
|
|
531
547
|
/**
|
|
532
548
|
* Create files group.
|
|
533
549
|
*/
|
|
534
|
-
function group(uuids, { publicKey, baseURL = defaultSettings.baseURL, jsonpCallback, secureSignature, secureExpire, signal, source, integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes }) {
|
|
535
|
-
return
|
|
550
|
+
function group(uuids, { publicKey, baseURL = defaultSettings.baseURL, jsonpCallback, secureSignature, secureExpire, signal, source, integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes = defaultSettings.retryNetworkErrorMaxTimes }) {
|
|
551
|
+
return retryIfFailed(() => request({
|
|
536
552
|
method: 'POST',
|
|
537
553
|
headers: {
|
|
538
554
|
'X-UC-User-Agent': getUserAgent({ publicKey, integration, userAgent })
|
|
@@ -555,14 +571,14 @@ function group(uuids, { publicKey, baseURL = defaultSettings.baseURL, jsonpCallb
|
|
|
555
571
|
else {
|
|
556
572
|
return response;
|
|
557
573
|
}
|
|
558
|
-
}), retryThrottledRequestMaxTimes);
|
|
574
|
+
}), { retryNetworkErrorMaxTimes, retryThrottledRequestMaxTimes });
|
|
559
575
|
}
|
|
560
576
|
|
|
561
577
|
/**
|
|
562
578
|
* Get info about group.
|
|
563
579
|
*/
|
|
564
|
-
function groupInfo(id, { publicKey, baseURL = defaultSettings.baseURL, signal, source, integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes }) {
|
|
565
|
-
return
|
|
580
|
+
function groupInfo(id, { publicKey, baseURL = defaultSettings.baseURL, signal, source, integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes = defaultSettings.retryNetworkErrorMaxTimes }) {
|
|
581
|
+
return retryIfFailed(() => request({
|
|
566
582
|
method: 'GET',
|
|
567
583
|
headers: {
|
|
568
584
|
'X-UC-User-Agent': getUserAgent({ publicKey, integration, userAgent })
|
|
@@ -582,14 +598,14 @@ function groupInfo(id, { publicKey, baseURL = defaultSettings.baseURL, signal, s
|
|
|
582
598
|
else {
|
|
583
599
|
return response;
|
|
584
600
|
}
|
|
585
|
-
}), retryThrottledRequestMaxTimes);
|
|
601
|
+
}), { retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes });
|
|
586
602
|
}
|
|
587
603
|
|
|
588
604
|
/**
|
|
589
605
|
* Returns a JSON dictionary holding file info.
|
|
590
606
|
*/
|
|
591
|
-
function info(uuid, { publicKey, baseURL = defaultSettings.baseURL, signal, source, integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes }) {
|
|
592
|
-
return
|
|
607
|
+
function info(uuid, { publicKey, baseURL = defaultSettings.baseURL, signal, source, integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes = defaultSettings.retryNetworkErrorMaxTimes }) {
|
|
608
|
+
return retryIfFailed(() => request({
|
|
593
609
|
method: 'GET',
|
|
594
610
|
headers: {
|
|
595
611
|
'X-UC-User-Agent': getUserAgent({ publicKey, integration, userAgent })
|
|
@@ -609,14 +625,14 @@ function info(uuid, { publicKey, baseURL = defaultSettings.baseURL, signal, sour
|
|
|
609
625
|
else {
|
|
610
626
|
return response;
|
|
611
627
|
}
|
|
612
|
-
}), retryThrottledRequestMaxTimes);
|
|
628
|
+
}), { retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes });
|
|
613
629
|
}
|
|
614
630
|
|
|
615
631
|
/**
|
|
616
632
|
* Start multipart uploading.
|
|
617
633
|
*/
|
|
618
|
-
function multipartStart(size, { publicKey, contentType, fileName, multipartChunkSize = defaultSettings.multipartChunkSize, baseURL = '', secureSignature, secureExpire, store, signal, source = 'local', integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes, metadata }) {
|
|
619
|
-
return
|
|
634
|
+
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 }) {
|
|
635
|
+
return retryIfFailed(() => request({
|
|
620
636
|
method: 'POST',
|
|
621
637
|
url: getUrl(baseURL, '/multipart/start/', { jsonerrors: 1 }),
|
|
622
638
|
headers: {
|
|
@@ -645,14 +661,14 @@ function multipartStart(size, { publicKey, contentType, fileName, multipartChunk
|
|
|
645
661
|
response.parts = Object.keys(response.parts).map((key) => response.parts[key]);
|
|
646
662
|
return response;
|
|
647
663
|
}
|
|
648
|
-
}), retryThrottledRequestMaxTimes);
|
|
664
|
+
}), { retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes });
|
|
649
665
|
}
|
|
650
666
|
|
|
651
667
|
/**
|
|
652
668
|
* Complete multipart uploading.
|
|
653
669
|
*/
|
|
654
|
-
function multipartUpload(part, url, { signal, onProgress }) {
|
|
655
|
-
return request({
|
|
670
|
+
function multipartUpload(part, url, { signal, onProgress, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes = defaultSettings.retryNetworkErrorMaxTimes }) {
|
|
671
|
+
return retryIfFailed(() => request({
|
|
656
672
|
method: 'PUT',
|
|
657
673
|
url,
|
|
658
674
|
data: part,
|
|
@@ -669,14 +685,17 @@ function multipartUpload(part, url, { signal, onProgress }) {
|
|
|
669
685
|
});
|
|
670
686
|
return result;
|
|
671
687
|
})
|
|
672
|
-
.then(({ status }) => ({ code: status }))
|
|
688
|
+
.then(({ status }) => ({ code: status })), {
|
|
689
|
+
retryThrottledRequestMaxTimes,
|
|
690
|
+
retryNetworkErrorMaxTimes
|
|
691
|
+
});
|
|
673
692
|
}
|
|
674
693
|
|
|
675
694
|
/**
|
|
676
695
|
* Complete multipart uploading.
|
|
677
696
|
*/
|
|
678
|
-
function multipartComplete(uuid, { publicKey, baseURL = defaultSettings.baseURL, source = 'local', signal, integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes }) {
|
|
679
|
-
return
|
|
697
|
+
function multipartComplete(uuid, { publicKey, baseURL = defaultSettings.baseURL, source = 'local', signal, integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes = defaultSettings.retryNetworkErrorMaxTimes }) {
|
|
698
|
+
return retryIfFailed(() => request({
|
|
680
699
|
method: 'POST',
|
|
681
700
|
url: getUrl(baseURL, '/multipart/complete/', { jsonerrors: 1 }),
|
|
682
701
|
headers: {
|
|
@@ -696,7 +715,7 @@ function multipartComplete(uuid, { publicKey, baseURL = defaultSettings.baseURL,
|
|
|
696
715
|
else {
|
|
697
716
|
return response;
|
|
698
717
|
}
|
|
699
|
-
}), retryThrottledRequestMaxTimes);
|
|
718
|
+
}), { retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes });
|
|
700
719
|
}
|
|
701
720
|
|
|
702
721
|
class UploadcareFile {
|
|
@@ -763,7 +782,7 @@ const poll = ({ check, interval = DEFAULT_INTERVAL, signal }) => new Promise((re
|
|
|
763
782
|
timeoutId = setTimeout(tick, 0);
|
|
764
783
|
});
|
|
765
784
|
|
|
766
|
-
function isReadyPoll({ file, publicKey, baseURL, source, integration, userAgent, retryThrottledRequestMaxTimes, signal, onProgress }) {
|
|
785
|
+
function isReadyPoll({ file, publicKey, baseURL, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, signal, onProgress }) {
|
|
767
786
|
return poll({
|
|
768
787
|
check: (signal) => info(file, {
|
|
769
788
|
publicKey,
|
|
@@ -772,7 +791,8 @@ function isReadyPoll({ file, publicKey, baseURL, source, integration, userAgent,
|
|
|
772
791
|
source,
|
|
773
792
|
integration,
|
|
774
793
|
userAgent,
|
|
775
|
-
retryThrottledRequestMaxTimes
|
|
794
|
+
retryThrottledRequestMaxTimes,
|
|
795
|
+
retryNetworkErrorMaxTimes
|
|
776
796
|
}).then((response) => {
|
|
777
797
|
if (response.isReady) {
|
|
778
798
|
return response;
|
|
@@ -784,7 +804,7 @@ function isReadyPoll({ file, publicKey, baseURL, source, integration, userAgent,
|
|
|
784
804
|
});
|
|
785
805
|
}
|
|
786
806
|
|
|
787
|
-
const uploadDirect = (file, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, contentType, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, baseCDN, metadata }) => {
|
|
807
|
+
const uploadDirect = (file, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, contentType, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, baseCDN, metadata }) => {
|
|
788
808
|
return base(file, {
|
|
789
809
|
publicKey,
|
|
790
810
|
fileName,
|
|
@@ -799,6 +819,7 @@ const uploadDirect = (file, { publicKey, fileName, baseURL, secureSignature, sec
|
|
|
799
819
|
integration,
|
|
800
820
|
userAgent,
|
|
801
821
|
retryThrottledRequestMaxTimes,
|
|
822
|
+
retryNetworkErrorMaxTimes,
|
|
802
823
|
metadata
|
|
803
824
|
})
|
|
804
825
|
.then(({ file }) => {
|
|
@@ -810,6 +831,7 @@ const uploadDirect = (file, { publicKey, fileName, baseURL, secureSignature, sec
|
|
|
810
831
|
integration,
|
|
811
832
|
userAgent,
|
|
812
833
|
retryThrottledRequestMaxTimes,
|
|
834
|
+
retryNetworkErrorMaxTimes,
|
|
813
835
|
onProgress,
|
|
814
836
|
signal
|
|
815
837
|
});
|
|
@@ -995,7 +1017,7 @@ const preconnect = (key) => {
|
|
|
995
1017
|
getPusher(key).connect();
|
|
996
1018
|
};
|
|
997
1019
|
|
|
998
|
-
function pollStrategy({ token, publicKey, baseURL, integration, userAgent, retryThrottledRequestMaxTimes, onProgress, signal }) {
|
|
1020
|
+
function pollStrategy({ token, publicKey, baseURL, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, onProgress, signal }) {
|
|
999
1021
|
return poll({
|
|
1000
1022
|
check: (signal) => fromUrlStatus(token, {
|
|
1001
1023
|
publicKey,
|
|
@@ -1003,6 +1025,7 @@ function pollStrategy({ token, publicKey, baseURL, integration, userAgent, retry
|
|
|
1003
1025
|
integration,
|
|
1004
1026
|
userAgent,
|
|
1005
1027
|
retryThrottledRequestMaxTimes,
|
|
1028
|
+
retryNetworkErrorMaxTimes,
|
|
1006
1029
|
signal
|
|
1007
1030
|
}).then((response) => {
|
|
1008
1031
|
switch (response.status) {
|
|
@@ -1153,7 +1176,7 @@ const uploadFromUrl = (sourceUrl, { publicKey, fileName, baseURL, baseCDN, check
|
|
|
1153
1176
|
}))
|
|
1154
1177
|
.then((fileInfo) => new UploadcareFile(fileInfo, { baseCDN }));
|
|
1155
1178
|
|
|
1156
|
-
const uploadFromUploaded = (uuid, { publicKey, fileName, baseURL, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, baseCDN }) => {
|
|
1179
|
+
const uploadFromUploaded = (uuid, { publicKey, fileName, baseURL, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, baseCDN }) => {
|
|
1157
1180
|
return info(uuid, {
|
|
1158
1181
|
publicKey,
|
|
1159
1182
|
baseURL,
|
|
@@ -1161,7 +1184,8 @@ const uploadFromUploaded = (uuid, { publicKey, fileName, baseURL, signal, onProg
|
|
|
1161
1184
|
source,
|
|
1162
1185
|
integration,
|
|
1163
1186
|
userAgent,
|
|
1164
|
-
retryThrottledRequestMaxTimes
|
|
1187
|
+
retryThrottledRequestMaxTimes,
|
|
1188
|
+
retryNetworkErrorMaxTimes
|
|
1165
1189
|
})
|
|
1166
1190
|
.then((fileInfo) => new UploadcareFile(fileInfo, { baseCDN, fileName }))
|
|
1167
1191
|
.then((result) => {
|
|
@@ -1233,18 +1257,15 @@ const runWithConcurrency = (concurrency, tasks) => {
|
|
|
1233
1257
|
});
|
|
1234
1258
|
};
|
|
1235
1259
|
|
|
1236
|
-
const
|
|
1260
|
+
const uploadPart = (chunk, url, { publicKey, onProgress, signal, integration, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes }) => multipartUpload(chunk, url, {
|
|
1237
1261
|
publicKey,
|
|
1238
1262
|
onProgress,
|
|
1239
1263
|
signal,
|
|
1240
|
-
integration
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
throw error;
|
|
1246
|
-
}));
|
|
1247
|
-
const uploadMultipart = (file, { publicKey, fileName, fileSize, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, contentType, multipartChunkSize = defaultSettings.multipartChunkSize, maxConcurrentRequests = defaultSettings.maxConcurrentRequests, multipartMaxAttempts = defaultSettings.multipartMaxAttempts, baseCDN, metadata }) => {
|
|
1264
|
+
integration,
|
|
1265
|
+
retryThrottledRequestMaxTimes,
|
|
1266
|
+
retryNetworkErrorMaxTimes
|
|
1267
|
+
});
|
|
1268
|
+
const uploadMultipart = (file, { publicKey, fileName, fileSize, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, contentType, multipartChunkSize = defaultSettings.multipartChunkSize, maxConcurrentRequests = defaultSettings.maxConcurrentRequests, baseCDN, metadata }) => {
|
|
1248
1269
|
const size = fileSize || getFileSize(file);
|
|
1249
1270
|
let progressValues;
|
|
1250
1271
|
const createProgressHandler = (totalChunks, chunkIdx) => {
|
|
@@ -1278,18 +1299,20 @@ const uploadMultipart = (file, { publicKey, fileName, fileSize, baseURL, secureS
|
|
|
1278
1299
|
integration,
|
|
1279
1300
|
userAgent,
|
|
1280
1301
|
retryThrottledRequestMaxTimes,
|
|
1302
|
+
retryNetworkErrorMaxTimes,
|
|
1281
1303
|
metadata
|
|
1282
1304
|
})
|
|
1283
1305
|
.then(({ uuid, parts }) => {
|
|
1284
1306
|
const getChunk = prepareChunks(file, size, multipartChunkSize);
|
|
1285
1307
|
return Promise.all([
|
|
1286
1308
|
uuid,
|
|
1287
|
-
runWithConcurrency(maxConcurrentRequests, parts.map((url, index) => () =>
|
|
1309
|
+
runWithConcurrency(maxConcurrentRequests, parts.map((url, index) => () => uploadPart(getChunk(index), url, {
|
|
1288
1310
|
publicKey,
|
|
1289
1311
|
onProgress: createProgressHandler(parts.length, index),
|
|
1290
1312
|
signal,
|
|
1291
1313
|
integration,
|
|
1292
|
-
|
|
1314
|
+
retryThrottledRequestMaxTimes,
|
|
1315
|
+
retryNetworkErrorMaxTimes
|
|
1293
1316
|
})))
|
|
1294
1317
|
]);
|
|
1295
1318
|
})
|
|
@@ -1299,7 +1322,8 @@ const uploadMultipart = (file, { publicKey, fileName, fileSize, baseURL, secureS
|
|
|
1299
1322
|
source,
|
|
1300
1323
|
integration,
|
|
1301
1324
|
userAgent,
|
|
1302
|
-
retryThrottledRequestMaxTimes
|
|
1325
|
+
retryThrottledRequestMaxTimes,
|
|
1326
|
+
retryNetworkErrorMaxTimes
|
|
1303
1327
|
}))
|
|
1304
1328
|
.then((fileInfo) => {
|
|
1305
1329
|
if (fileInfo.isReady) {
|
|
@@ -1314,6 +1338,7 @@ const uploadMultipart = (file, { publicKey, fileName, fileSize, baseURL, secureS
|
|
|
1314
1338
|
integration,
|
|
1315
1339
|
userAgent,
|
|
1316
1340
|
retryThrottledRequestMaxTimes,
|
|
1341
|
+
retryNetworkErrorMaxTimes,
|
|
1317
1342
|
onProgress,
|
|
1318
1343
|
signal
|
|
1319
1344
|
});
|
|
@@ -1325,7 +1350,7 @@ const uploadMultipart = (file, { publicKey, fileName, fileSize, baseURL, secureS
|
|
|
1325
1350
|
/**
|
|
1326
1351
|
* Uploads file from provided data.
|
|
1327
1352
|
*/
|
|
1328
|
-
function uploadFile(data, { publicKey, fileName, baseURL = defaultSettings.baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, contentType, multipartMinFileSize, multipartChunkSize,
|
|
1353
|
+
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 }) {
|
|
1329
1354
|
if (isFileData(data)) {
|
|
1330
1355
|
const fileSize = getFileSize(data);
|
|
1331
1356
|
if (isMultipart(fileSize, multipartMinFileSize)) {
|
|
@@ -1333,7 +1358,6 @@ function uploadFile(data, { publicKey, fileName, baseURL = defaultSettings.baseU
|
|
|
1333
1358
|
publicKey,
|
|
1334
1359
|
contentType,
|
|
1335
1360
|
multipartChunkSize,
|
|
1336
|
-
multipartMaxAttempts,
|
|
1337
1361
|
fileName,
|
|
1338
1362
|
baseURL,
|
|
1339
1363
|
secureSignature,
|
|
@@ -1346,6 +1370,7 @@ function uploadFile(data, { publicKey, fileName, baseURL = defaultSettings.baseU
|
|
|
1346
1370
|
userAgent,
|
|
1347
1371
|
maxConcurrentRequests,
|
|
1348
1372
|
retryThrottledRequestMaxTimes,
|
|
1373
|
+
retryNetworkErrorMaxTimes,
|
|
1349
1374
|
baseCDN,
|
|
1350
1375
|
metadata
|
|
1351
1376
|
});
|
|
@@ -1364,6 +1389,7 @@ function uploadFile(data, { publicKey, fileName, baseURL = defaultSettings.baseU
|
|
|
1364
1389
|
integration,
|
|
1365
1390
|
userAgent,
|
|
1366
1391
|
retryThrottledRequestMaxTimes,
|
|
1392
|
+
retryNetworkErrorMaxTimes,
|
|
1367
1393
|
baseCDN,
|
|
1368
1394
|
metadata
|
|
1369
1395
|
});
|
|
@@ -1385,6 +1411,7 @@ function uploadFile(data, { publicKey, fileName, baseURL = defaultSettings.baseU
|
|
|
1385
1411
|
integration,
|
|
1386
1412
|
userAgent,
|
|
1387
1413
|
retryThrottledRequestMaxTimes,
|
|
1414
|
+
retryNetworkErrorMaxTimes,
|
|
1388
1415
|
pusherKey,
|
|
1389
1416
|
metadata
|
|
1390
1417
|
});
|
|
@@ -1400,6 +1427,7 @@ function uploadFile(data, { publicKey, fileName, baseURL = defaultSettings.baseU
|
|
|
1400
1427
|
integration,
|
|
1401
1428
|
userAgent,
|
|
1402
1429
|
retryThrottledRequestMaxTimes,
|
|
1430
|
+
retryNetworkErrorMaxTimes,
|
|
1403
1431
|
baseCDN
|
|
1404
1432
|
});
|
|
1405
1433
|
}
|
|
@@ -1455,7 +1483,7 @@ const isUrlArray = (data) => {
|
|
|
1455
1483
|
return true;
|
|
1456
1484
|
};
|
|
1457
1485
|
|
|
1458
|
-
function uploadFileGroup(data, { publicKey, fileName, baseURL = defaultSettings.baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, contentType, multipartChunkSize = defaultSettings.multipartChunkSize, baseCDN = defaultSettings.baseCDN, jsonpCallback }) {
|
|
1486
|
+
function uploadFileGroup(data, { publicKey, fileName, baseURL = defaultSettings.baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, retryNetworkErrorMaxTimes, contentType, multipartChunkSize = defaultSettings.multipartChunkSize, baseCDN = defaultSettings.baseCDN, jsonpCallback }) {
|
|
1459
1487
|
if (!isFileDataArray(data) && !isUrlArray(data) && !isUuidArray(data)) {
|
|
1460
1488
|
throw new TypeError(`Group uploading from "${data}" is not supported`);
|
|
1461
1489
|
}
|
|
@@ -1492,6 +1520,7 @@ function uploadFileGroup(data, { publicKey, fileName, baseURL = defaultSettings.
|
|
|
1492
1520
|
integration,
|
|
1493
1521
|
userAgent,
|
|
1494
1522
|
retryThrottledRequestMaxTimes,
|
|
1523
|
+
retryNetworkErrorMaxTimes,
|
|
1495
1524
|
contentType,
|
|
1496
1525
|
multipartChunkSize,
|
|
1497
1526
|
baseCDN
|
|
@@ -1507,7 +1536,8 @@ function uploadFileGroup(data, { publicKey, fileName, baseURL = defaultSettings.
|
|
|
1507
1536
|
source,
|
|
1508
1537
|
integration,
|
|
1509
1538
|
userAgent,
|
|
1510
|
-
retryThrottledRequestMaxTimes
|
|
1539
|
+
retryThrottledRequestMaxTimes,
|
|
1540
|
+
retryNetworkErrorMaxTimes
|
|
1511
1541
|
})
|
|
1512
1542
|
.then((groupInfo) => new UploadcareGroup(groupInfo, files))
|
|
1513
1543
|
.then((group) => {
|
|
@@ -1580,4 +1610,4 @@ class UploadClient {
|
|
|
1580
1610
|
}
|
|
1581
1611
|
}
|
|
1582
1612
|
|
|
1583
|
-
export { UploadClient, UploadClientError, UploadcareFile, UploadcareGroup, base, fromUrl, fromUrlStatus, getUserAgent$1 as getUserAgent, group, groupInfo, info, multipartComplete, multipartStart, multipartUpload, uploadDirect, uploadFile, uploadFileGroup, uploadFromUploaded, uploadFromUrl, uploadMultipart };
|
|
1613
|
+
export { UploadClient, UploadClientError, UploadcareFile, UploadcareGroup, UploadcareNetworkError, base, fromUrl, fromUrlStatus, getUserAgent$1 as getUserAgent, group, groupInfo, info, multipartComplete, multipartStart, multipartUpload, uploadDirect, uploadFile, uploadFileGroup, uploadFromUploaded, uploadFromUrl, uploadMultipart };
|