@uploadcare/upload-client 3.0.0-alpha.0 → 3.1.1
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 +16 -0
- package/dist/index.browser.cjs +149 -95
- package/dist/index.browser.js +145 -90
- package/dist/index.cjs +149 -95
- package/dist/index.js +145 -90
- package/dist/types.d.ts +33 -8
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -147,31 +147,97 @@ function identity(obj) {
|
|
|
147
147
|
const transformFile = identity;
|
|
148
148
|
var getFormData = () => new NodeFormData();
|
|
149
149
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
150
|
+
/**
|
|
151
|
+
* FileData type guard.
|
|
152
|
+
*/
|
|
153
|
+
const isFileData = (data) => {
|
|
154
|
+
return (data !== undefined &&
|
|
155
|
+
((typeof Blob !== 'undefined' && data instanceof Blob) ||
|
|
156
|
+
(typeof File !== 'undefined' && data instanceof File) ||
|
|
157
|
+
(typeof Buffer !== 'undefined' && data instanceof Buffer)));
|
|
158
|
+
};
|
|
159
|
+
/**
|
|
160
|
+
* Uuid type guard.
|
|
161
|
+
*/
|
|
162
|
+
const isUuid = (data) => {
|
|
163
|
+
const UUID_REGEX = '[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}';
|
|
164
|
+
const regExp = new RegExp(UUID_REGEX);
|
|
165
|
+
return !isFileData(data) && regExp.test(data);
|
|
166
|
+
};
|
|
167
|
+
/**
|
|
168
|
+
* Url type guard.
|
|
169
|
+
*
|
|
170
|
+
* @param {NodeFile | BrowserFile | Url | Uuid} data
|
|
171
|
+
*/
|
|
172
|
+
const isUrl = (data) => {
|
|
173
|
+
const URL_REGEX = '^(?:\\w+:)?\\/\\/([^\\s\\.]+\\.\\S{2}|localhost[\\:?\\d]*)\\S*$';
|
|
174
|
+
const regExp = new RegExp(URL_REGEX);
|
|
175
|
+
return !isFileData(data) && regExp.test(data);
|
|
176
|
+
};
|
|
177
|
+
|
|
178
|
+
const isSimpleValue = (value) => {
|
|
179
|
+
return (typeof value === 'string' ||
|
|
180
|
+
typeof value === 'number' ||
|
|
181
|
+
typeof value === 'undefined');
|
|
182
|
+
};
|
|
183
|
+
const isObjectValue = (value) => {
|
|
184
|
+
return !!value && typeof value === 'object' && !Array.isArray(value);
|
|
185
|
+
};
|
|
186
|
+
const isFileValue = (value) => !!value &&
|
|
187
|
+
typeof value === 'object' &&
|
|
188
|
+
'data' in value &&
|
|
189
|
+
isFileData(value.data);
|
|
190
|
+
function collectParams(params, inputKey, inputValue) {
|
|
191
|
+
if (isFileValue(inputValue)) {
|
|
192
|
+
const name = inputValue.name;
|
|
193
|
+
const file = transformFile(inputValue.data); // lgtm [js/superfluous-trailing-arguments]
|
|
194
|
+
params.push(name ? [inputKey, file, name] : [inputKey, file]);
|
|
195
|
+
}
|
|
196
|
+
else if (isObjectValue(inputValue)) {
|
|
197
|
+
for (const [key, value] of Object.entries(inputValue)) {
|
|
198
|
+
if (typeof value !== 'undefined') {
|
|
199
|
+
params.push([`${inputKey}[${key}]`, String(value)]);
|
|
200
|
+
}
|
|
165
201
|
}
|
|
166
202
|
}
|
|
203
|
+
else if (isSimpleValue(inputValue) && inputValue) {
|
|
204
|
+
params.push([inputKey, inputValue.toString()]);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
function getFormDataParams(options) {
|
|
208
|
+
const params = [];
|
|
209
|
+
for (const [key, value] of Object.entries(options)) {
|
|
210
|
+
collectParams(params, key, value);
|
|
211
|
+
}
|
|
212
|
+
return params;
|
|
213
|
+
}
|
|
214
|
+
function buildFormData(options) {
|
|
215
|
+
const formData = getFormData();
|
|
216
|
+
const params = getFormDataParams(options);
|
|
217
|
+
for (const param of params) {
|
|
218
|
+
formData.append(...param);
|
|
219
|
+
}
|
|
167
220
|
return formData;
|
|
168
221
|
}
|
|
169
222
|
|
|
170
223
|
const serializePair = (key, value) => typeof value !== 'undefined' ? `${key}=${encodeURIComponent(value)}` : null;
|
|
224
|
+
// TODO: generalize value transforming logic and use it here and inside `buildFormData`
|
|
171
225
|
const createQuery = (query) => Object.entries(query)
|
|
172
|
-
.reduce((params, [key, value]) =>
|
|
173
|
-
|
|
174
|
-
|
|
226
|
+
.reduce((params, [key, value]) => {
|
|
227
|
+
let param;
|
|
228
|
+
if (typeof value === 'object' && !Array.isArray(value)) {
|
|
229
|
+
param = Object.entries(value)
|
|
230
|
+
.filter((entry) => typeof entry[1] !== 'undefined')
|
|
231
|
+
.map((entry) => serializePair(`${key}[${entry[0]}]`, String(entry[1])));
|
|
232
|
+
}
|
|
233
|
+
else if (Array.isArray(value)) {
|
|
234
|
+
param = value.map((val) => serializePair(`${key}[]`, val));
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
param = serializePair(key, value);
|
|
238
|
+
}
|
|
239
|
+
return params.concat(param);
|
|
240
|
+
}, [])
|
|
175
241
|
.filter((x) => !!x)
|
|
176
242
|
.join('&');
|
|
177
243
|
const getUrl = (base, path, query) => [
|
|
@@ -203,7 +269,7 @@ const defaultSettings = {
|
|
|
203
269
|
const defaultContentType = 'application/octet-stream';
|
|
204
270
|
const defaultFilename = 'original';
|
|
205
271
|
|
|
206
|
-
var version = '3.
|
|
272
|
+
var version = '3.1.1';
|
|
207
273
|
|
|
208
274
|
/**
|
|
209
275
|
* Returns User Agent based on version and settings.
|
|
@@ -303,11 +369,15 @@ function retryIfThrottled(fn, retryThrottledMaxTimes) {
|
|
|
303
369
|
}));
|
|
304
370
|
}
|
|
305
371
|
|
|
372
|
+
function getStoreValue(store) {
|
|
373
|
+
return typeof store === 'undefined' ? 'auto' : store ? '1' : '0';
|
|
374
|
+
}
|
|
375
|
+
|
|
306
376
|
/**
|
|
307
377
|
* Performs file uploading request to Uploadcare Upload API.
|
|
308
378
|
* Can be canceled and has progress.
|
|
309
379
|
*/
|
|
310
|
-
function base(file, { publicKey, fileName, baseURL = defaultSettings.baseURL, secureSignature, secureExpire, store, signal, onProgress, source = 'local', integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes }) {
|
|
380
|
+
function base(file, { publicKey, fileName, baseURL = defaultSettings.baseURL, secureSignature, secureExpire, store, signal, onProgress, source = 'local', integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes, metadata }) {
|
|
311
381
|
return retryIfThrottled(() => {
|
|
312
382
|
var _a;
|
|
313
383
|
return request({
|
|
@@ -318,17 +388,18 @@ function base(file, { publicKey, fileName, baseURL = defaultSettings.baseURL, se
|
|
|
318
388
|
headers: {
|
|
319
389
|
'X-UC-User-Agent': getUserAgent({ publicKey, integration, userAgent })
|
|
320
390
|
},
|
|
321
|
-
data: buildFormData(
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
391
|
+
data: buildFormData({
|
|
392
|
+
file: {
|
|
393
|
+
data: file,
|
|
394
|
+
name: (_a = fileName !== null && fileName !== void 0 ? fileName : file.name) !== null && _a !== void 0 ? _a : defaultFilename
|
|
395
|
+
},
|
|
396
|
+
UPLOADCARE_PUB_KEY: publicKey,
|
|
397
|
+
UPLOADCARE_STORE: getStoreValue(store),
|
|
398
|
+
signature: secureSignature,
|
|
399
|
+
expire: secureExpire,
|
|
400
|
+
source: source,
|
|
401
|
+
metadata
|
|
402
|
+
}),
|
|
332
403
|
signal,
|
|
333
404
|
onProgress
|
|
334
405
|
}).then(({ data, headers, request }) => {
|
|
@@ -351,7 +422,7 @@ var TypeEnum;
|
|
|
351
422
|
/**
|
|
352
423
|
* Uploading files from URL.
|
|
353
424
|
*/
|
|
354
|
-
function fromUrl(sourceUrl, { publicKey, baseURL = defaultSettings.baseURL, store, fileName, checkForUrlDuplicates, saveUrlForRecurrentUploads, secureSignature, secureExpire, source = 'url', signal, integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes }) {
|
|
425
|
+
function fromUrl(sourceUrl, { publicKey, baseURL = defaultSettings.baseURL, store, fileName, checkForUrlDuplicates, saveUrlForRecurrentUploads, secureSignature, secureExpire, source = 'url', signal, integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes, metadata }) {
|
|
355
426
|
return retryIfThrottled(() => request({
|
|
356
427
|
method: 'POST',
|
|
357
428
|
headers: {
|
|
@@ -361,13 +432,14 @@ function fromUrl(sourceUrl, { publicKey, baseURL = defaultSettings.baseURL, stor
|
|
|
361
432
|
jsonerrors: 1,
|
|
362
433
|
pub_key: publicKey,
|
|
363
434
|
source_url: sourceUrl,
|
|
364
|
-
store:
|
|
435
|
+
store: getStoreValue(store),
|
|
365
436
|
filename: fileName,
|
|
366
437
|
check_URL_duplicates: checkForUrlDuplicates ? 1 : undefined,
|
|
367
438
|
save_URL_duplicates: saveUrlForRecurrentUploads ? 1 : undefined,
|
|
368
439
|
signature: secureSignature,
|
|
369
440
|
expire: secureExpire,
|
|
370
|
-
source: source
|
|
441
|
+
source: source,
|
|
442
|
+
metadata
|
|
371
443
|
}),
|
|
372
444
|
signal
|
|
373
445
|
}).then(({ data, headers, request }) => {
|
|
@@ -510,24 +582,25 @@ function info(uuid, { publicKey, baseURL = defaultSettings.baseURL, signal, sour
|
|
|
510
582
|
/**
|
|
511
583
|
* Start multipart uploading.
|
|
512
584
|
*/
|
|
513
|
-
function multipartStart(size, { publicKey, contentType, fileName, multipartChunkSize = defaultSettings.multipartChunkSize, baseURL = '', secureSignature, secureExpire, store, signal, source = 'local', integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes }) {
|
|
585
|
+
function multipartStart(size, { publicKey, contentType, fileName, multipartChunkSize = defaultSettings.multipartChunkSize, baseURL = '', secureSignature, secureExpire, store, signal, source = 'local', integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes, metadata }) {
|
|
514
586
|
return retryIfThrottled(() => request({
|
|
515
587
|
method: 'POST',
|
|
516
588
|
url: getUrl(baseURL, '/multipart/start/', { jsonerrors: 1 }),
|
|
517
589
|
headers: {
|
|
518
590
|
'X-UC-User-Agent': getUserAgent({ publicKey, integration, userAgent })
|
|
519
591
|
},
|
|
520
|
-
data: buildFormData(
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
592
|
+
data: buildFormData({
|
|
593
|
+
filename: fileName !== null && fileName !== void 0 ? fileName : defaultFilename,
|
|
594
|
+
size: size,
|
|
595
|
+
content_type: contentType !== null && contentType !== void 0 ? contentType : defaultContentType,
|
|
596
|
+
part_size: multipartChunkSize,
|
|
597
|
+
UPLOADCARE_STORE: getStoreValue(store),
|
|
598
|
+
UPLOADCARE_PUB_KEY: publicKey,
|
|
599
|
+
signature: secureSignature,
|
|
600
|
+
expire: secureExpire,
|
|
601
|
+
source: source,
|
|
602
|
+
metadata
|
|
603
|
+
}),
|
|
531
604
|
signal
|
|
532
605
|
}).then(({ data, headers, request }) => {
|
|
533
606
|
const response = camelizeKeys(JSON.parse(data));
|
|
@@ -576,11 +649,11 @@ function multipartComplete(uuid, { publicKey, baseURL = defaultSettings.baseURL,
|
|
|
576
649
|
headers: {
|
|
577
650
|
'X-UC-User-Agent': getUserAgent({ publicKey, integration, userAgent })
|
|
578
651
|
},
|
|
579
|
-
data: buildFormData(
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
652
|
+
data: buildFormData({
|
|
653
|
+
uuid: uuid,
|
|
654
|
+
UPLOADCARE_PUB_KEY: publicKey,
|
|
655
|
+
source: source
|
|
656
|
+
}),
|
|
584
657
|
signal
|
|
585
658
|
}).then(({ data, headers, request }) => {
|
|
586
659
|
const response = camelizeKeys(JSON.parse(data));
|
|
@@ -606,6 +679,8 @@ class UploadcareFile {
|
|
|
606
679
|
this.originalFilename = null;
|
|
607
680
|
this.imageInfo = null;
|
|
608
681
|
this.videoInfo = null;
|
|
682
|
+
this.contentInfo = null;
|
|
683
|
+
this.metadata = null;
|
|
609
684
|
const { uuid, s3Bucket } = fileInfo;
|
|
610
685
|
const urlBase = s3Bucket
|
|
611
686
|
? `https://${s3Bucket}.s3.amazonaws.com/${uuid}/${fileInfo.filename}`
|
|
@@ -625,6 +700,8 @@ class UploadcareFile {
|
|
|
625
700
|
this.originalFilename = fileInfo.originalFilename;
|
|
626
701
|
this.imageInfo = camelizeKeys(fileInfo.imageInfo);
|
|
627
702
|
this.videoInfo = camelizeKeys(fileInfo.videoInfo);
|
|
703
|
+
this.contentInfo = camelizeKeys(fileInfo.contentInfo);
|
|
704
|
+
this.metadata = fileInfo.metadata || null;
|
|
628
705
|
}
|
|
629
706
|
}
|
|
630
707
|
|
|
@@ -676,7 +753,7 @@ function isReadyPoll({ file, publicKey, baseURL, source, integration, userAgent,
|
|
|
676
753
|
});
|
|
677
754
|
}
|
|
678
755
|
|
|
679
|
-
const uploadFromObject = (file, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, baseCDN }) => {
|
|
756
|
+
const uploadFromObject = (file, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, baseCDN, metadata }) => {
|
|
680
757
|
return base(file, {
|
|
681
758
|
publicKey,
|
|
682
759
|
fileName,
|
|
@@ -689,7 +766,8 @@ const uploadFromObject = (file, { publicKey, fileName, baseURL, secureSignature,
|
|
|
689
766
|
source,
|
|
690
767
|
integration,
|
|
691
768
|
userAgent,
|
|
692
|
-
retryThrottledRequestMaxTimes
|
|
769
|
+
retryThrottledRequestMaxTimes,
|
|
770
|
+
metadata
|
|
693
771
|
})
|
|
694
772
|
.then(({ file }) => {
|
|
695
773
|
return isReadyPoll({
|
|
@@ -982,7 +1060,7 @@ const pushStrategy = ({ token, pusherKey, signal, onProgress }) => new Promise((
|
|
|
982
1060
|
}
|
|
983
1061
|
});
|
|
984
1062
|
});
|
|
985
|
-
const uploadFromUrl = (sourceUrl, { publicKey, fileName, baseURL, baseCDN, checkForUrlDuplicates, saveUrlForRecurrentUploads, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, pusherKey = defaultSettings.pusherKey }) => Promise.resolve(preconnect(pusherKey))
|
|
1063
|
+
const uploadFromUrl = (sourceUrl, { publicKey, fileName, baseURL, baseCDN, checkForUrlDuplicates, saveUrlForRecurrentUploads, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, pusherKey = defaultSettings.pusherKey, metadata }) => Promise.resolve(preconnect(pusherKey))
|
|
986
1064
|
.then(() => fromUrl(sourceUrl, {
|
|
987
1065
|
publicKey,
|
|
988
1066
|
fileName,
|
|
@@ -996,7 +1074,8 @@ const uploadFromUrl = (sourceUrl, { publicKey, fileName, baseURL, baseCDN, check
|
|
|
996
1074
|
source,
|
|
997
1075
|
integration,
|
|
998
1076
|
userAgent,
|
|
999
|
-
retryThrottledRequestMaxTimes
|
|
1077
|
+
retryThrottledRequestMaxTimes,
|
|
1078
|
+
metadata
|
|
1000
1079
|
}))
|
|
1001
1080
|
.catch((error) => {
|
|
1002
1081
|
const pusher = getPusher(pusherKey);
|
|
@@ -1067,34 +1146,6 @@ const uploadFromUploaded = (uuid, { publicKey, fileName, baseURL, signal, onProg
|
|
|
1067
1146
|
});
|
|
1068
1147
|
};
|
|
1069
1148
|
|
|
1070
|
-
/**
|
|
1071
|
-
* FileData type guard.
|
|
1072
|
-
*/
|
|
1073
|
-
const isFileData = (data) => {
|
|
1074
|
-
return (data !== undefined &&
|
|
1075
|
-
((typeof Blob !== 'undefined' && data instanceof Blob) ||
|
|
1076
|
-
(typeof File !== 'undefined' && data instanceof File) ||
|
|
1077
|
-
(typeof Buffer !== 'undefined' && data instanceof Buffer)));
|
|
1078
|
-
};
|
|
1079
|
-
/**
|
|
1080
|
-
* Uuid type guard.
|
|
1081
|
-
*/
|
|
1082
|
-
const isUuid = (data) => {
|
|
1083
|
-
const UUID_REGEX = '[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}';
|
|
1084
|
-
const regExp = new RegExp(UUID_REGEX);
|
|
1085
|
-
return !isFileData(data) && regExp.test(data);
|
|
1086
|
-
};
|
|
1087
|
-
/**
|
|
1088
|
-
* Url type guard.
|
|
1089
|
-
*
|
|
1090
|
-
* @param {NodeFile | BrowserFile | Url | Uuid} data
|
|
1091
|
-
*/
|
|
1092
|
-
const isUrl = (data) => {
|
|
1093
|
-
const URL_REGEX = '^(?:\\w+:)?\\/\\/([^\\s\\.]+\\.\\S{2}|localhost[\\:?\\d]*)\\S*$';
|
|
1094
|
-
const regExp = new RegExp(URL_REGEX);
|
|
1095
|
-
return !isFileData(data) && regExp.test(data);
|
|
1096
|
-
};
|
|
1097
|
-
|
|
1098
1149
|
/**
|
|
1099
1150
|
* Get file size.
|
|
1100
1151
|
*/
|
|
@@ -1164,7 +1215,7 @@ const uploadPartWithRetry = (chunk, url, { publicKey, onProgress, signal, integr
|
|
|
1164
1215
|
}
|
|
1165
1216
|
throw error;
|
|
1166
1217
|
}));
|
|
1167
|
-
const uploadMultipart = (file, { publicKey, fileName, fileSize, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, contentType, multipartChunkSize = defaultSettings.multipartChunkSize, maxConcurrentRequests = defaultSettings.maxConcurrentRequests, multipartMaxAttempts = defaultSettings.multipartMaxAttempts, baseCDN }) => {
|
|
1218
|
+
const uploadMultipart = (file, { publicKey, fileName, fileSize, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, contentType, multipartChunkSize = defaultSettings.multipartChunkSize, maxConcurrentRequests = defaultSettings.maxConcurrentRequests, multipartMaxAttempts = defaultSettings.multipartMaxAttempts, baseCDN, metadata }) => {
|
|
1168
1219
|
const size = fileSize || getFileSize(file);
|
|
1169
1220
|
let progressValues;
|
|
1170
1221
|
const createProgressHandler = (totalChunks, chunkIdx) => {
|
|
@@ -1197,7 +1248,8 @@ const uploadMultipart = (file, { publicKey, fileName, fileSize, baseURL, secureS
|
|
|
1197
1248
|
source,
|
|
1198
1249
|
integration,
|
|
1199
1250
|
userAgent,
|
|
1200
|
-
retryThrottledRequestMaxTimes
|
|
1251
|
+
retryThrottledRequestMaxTimes,
|
|
1252
|
+
metadata
|
|
1201
1253
|
})
|
|
1202
1254
|
.then(({ uuid, parts }) => {
|
|
1203
1255
|
const getChunk = prepareChunks(file, size, multipartChunkSize);
|
|
@@ -1244,10 +1296,10 @@ const uploadMultipart = (file, { publicKey, fileName, fileSize, baseURL, secureS
|
|
|
1244
1296
|
/**
|
|
1245
1297
|
* Uploads file from provided data.
|
|
1246
1298
|
*/
|
|
1247
|
-
function uploadFile(data, { publicKey, fileName, baseURL = defaultSettings.baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, contentType, multipartChunkSize, multipartMaxAttempts, maxConcurrentRequests, baseCDN = defaultSettings.baseCDN, checkForUrlDuplicates, saveUrlForRecurrentUploads, pusherKey }) {
|
|
1299
|
+
function uploadFile(data, { publicKey, fileName, baseURL = defaultSettings.baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, contentType, multipartMinFileSize, multipartChunkSize, multipartMaxAttempts, maxConcurrentRequests, baseCDN = defaultSettings.baseCDN, checkForUrlDuplicates, saveUrlForRecurrentUploads, pusherKey, metadata }) {
|
|
1248
1300
|
if (isFileData(data)) {
|
|
1249
1301
|
const fileSize = getFileSize(data);
|
|
1250
|
-
if (isMultipart(fileSize)) {
|
|
1302
|
+
if (isMultipart(fileSize, multipartMinFileSize)) {
|
|
1251
1303
|
return uploadMultipart(data, {
|
|
1252
1304
|
publicKey,
|
|
1253
1305
|
contentType,
|
|
@@ -1265,7 +1317,8 @@ function uploadFile(data, { publicKey, fileName, baseURL = defaultSettings.baseU
|
|
|
1265
1317
|
userAgent,
|
|
1266
1318
|
maxConcurrentRequests,
|
|
1267
1319
|
retryThrottledRequestMaxTimes,
|
|
1268
|
-
baseCDN
|
|
1320
|
+
baseCDN,
|
|
1321
|
+
metadata
|
|
1269
1322
|
});
|
|
1270
1323
|
}
|
|
1271
1324
|
return uploadFromObject(data, {
|
|
@@ -1281,7 +1334,8 @@ function uploadFile(data, { publicKey, fileName, baseURL = defaultSettings.baseU
|
|
|
1281
1334
|
integration,
|
|
1282
1335
|
userAgent,
|
|
1283
1336
|
retryThrottledRequestMaxTimes,
|
|
1284
|
-
baseCDN
|
|
1337
|
+
baseCDN,
|
|
1338
|
+
metadata
|
|
1285
1339
|
});
|
|
1286
1340
|
}
|
|
1287
1341
|
if (isUrl(data)) {
|
|
@@ -1301,7 +1355,8 @@ function uploadFile(data, { publicKey, fileName, baseURL = defaultSettings.baseU
|
|
|
1301
1355
|
integration,
|
|
1302
1356
|
userAgent,
|
|
1303
1357
|
retryThrottledRequestMaxTimes,
|
|
1304
|
-
pusherKey
|
|
1358
|
+
pusherKey,
|
|
1359
|
+
metadata
|
|
1305
1360
|
});
|
|
1306
1361
|
}
|
|
1307
1362
|
if (isUuid(data)) {
|
package/dist/types.d.ts
CHANGED
|
@@ -41,6 +41,17 @@ export declare type VideoInfo = {
|
|
|
41
41
|
codec: string;
|
|
42
42
|
};
|
|
43
43
|
};
|
|
44
|
+
export declare type ContentInfo = {
|
|
45
|
+
content_info: {
|
|
46
|
+
mime?: {
|
|
47
|
+
mime: string;
|
|
48
|
+
type: string;
|
|
49
|
+
subtype: string;
|
|
50
|
+
};
|
|
51
|
+
image?: ImageInfo;
|
|
52
|
+
video?: VideoInfo;
|
|
53
|
+
};
|
|
54
|
+
};
|
|
44
55
|
export declare type FileInfo = {
|
|
45
56
|
size: number;
|
|
46
57
|
done: number;
|
|
@@ -55,7 +66,9 @@ export declare type FileInfo = {
|
|
|
55
66
|
isReady: string;
|
|
56
67
|
imageInfo: ImageInfo | null;
|
|
57
68
|
videoInfo: VideoInfo | null;
|
|
58
|
-
|
|
69
|
+
contentInfo: ContentInfo | null;
|
|
70
|
+
s3Bucket?: string;
|
|
71
|
+
metadata?: Metadata;
|
|
59
72
|
};
|
|
60
73
|
export declare type GroupInfo = {
|
|
61
74
|
datetimeCreated: string;
|
|
@@ -78,6 +91,9 @@ export declare type UnknownProgressInfo = {
|
|
|
78
91
|
isComputable: false;
|
|
79
92
|
};
|
|
80
93
|
export declare type ProgressCallback<T = ComputableProgressInfo | UnknownProgressInfo> = (arg: T) => void;
|
|
94
|
+
export declare type Metadata = {
|
|
95
|
+
[key: string]: string;
|
|
96
|
+
};
|
|
81
97
|
export interface DefaultSettings {
|
|
82
98
|
baseCDN: string;
|
|
83
99
|
baseURL: string;
|
|
@@ -142,8 +158,9 @@ export declare type BaseOptions = {
|
|
|
142
158
|
integration?: string;
|
|
143
159
|
userAgent?: CustomUserAgent;
|
|
144
160
|
retryThrottledRequestMaxTimes?: number;
|
|
161
|
+
metadata?: Metadata;
|
|
145
162
|
};
|
|
146
|
-
declare function base(file: NodeFile | BrowserFile, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes }: BaseOptions): Promise<BaseResponse>;
|
|
163
|
+
declare function base(file: NodeFile | BrowserFile, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, metadata }: BaseOptions): Promise<BaseResponse>;
|
|
147
164
|
declare enum TypeEnum {
|
|
148
165
|
Token = "token",
|
|
149
166
|
FileInfo = "file_info"
|
|
@@ -171,8 +188,9 @@ export declare type FromUrlOptions = {
|
|
|
171
188
|
integration?: string;
|
|
172
189
|
userAgent?: CustomUserAgent;
|
|
173
190
|
retryThrottledRequestMaxTimes?: number;
|
|
191
|
+
metadata?: Metadata;
|
|
174
192
|
};
|
|
175
|
-
declare function fromUrl(sourceUrl: Url, { publicKey, baseURL, store, fileName, checkForUrlDuplicates, saveUrlForRecurrentUploads, secureSignature, secureExpire, source, signal, integration, userAgent, retryThrottledRequestMaxTimes }: FromUrlOptions): Promise<FromUrlSuccessResponse>;
|
|
193
|
+
declare function fromUrl(sourceUrl: Url, { publicKey, baseURL, store, fileName, checkForUrlDuplicates, saveUrlForRecurrentUploads, secureSignature, secureExpire, source, signal, integration, userAgent, retryThrottledRequestMaxTimes, metadata }: FromUrlOptions): Promise<FromUrlSuccessResponse>;
|
|
176
194
|
declare enum Status {
|
|
177
195
|
Unknown = "unknown",
|
|
178
196
|
Waiting = "waiting",
|
|
@@ -257,13 +275,14 @@ export declare type MultipartStartOptions = {
|
|
|
257
275
|
integration?: string;
|
|
258
276
|
userAgent?: CustomUserAgent;
|
|
259
277
|
retryThrottledRequestMaxTimes?: number;
|
|
278
|
+
metadata?: Metadata;
|
|
260
279
|
};
|
|
261
280
|
export declare type MultipartPart = string;
|
|
262
281
|
export declare type MultipartStartResponse = {
|
|
263
282
|
parts: MultipartPart[];
|
|
264
283
|
uuid: Uuid;
|
|
265
284
|
};
|
|
266
|
-
declare function multipartStart(size: number, { publicKey, contentType, fileName, multipartChunkSize, baseURL, secureSignature, secureExpire, store, signal, source, integration, userAgent, retryThrottledRequestMaxTimes }: MultipartStartOptions): Promise<MultipartStartResponse>;
|
|
285
|
+
declare function multipartStart(size: number, { publicKey, contentType, fileName, multipartChunkSize, baseURL, secureSignature, secureExpire, store, signal, source, integration, userAgent, retryThrottledRequestMaxTimes, metadata }: MultipartStartOptions): Promise<MultipartStartResponse>;
|
|
267
286
|
export declare type MultipartUploadOptions = {
|
|
268
287
|
publicKey?: string;
|
|
269
288
|
signal?: AbortSignal;
|
|
@@ -298,6 +317,8 @@ export declare class UploadcareFile {
|
|
|
298
317
|
readonly originalFilename: null | string;
|
|
299
318
|
readonly imageInfo: null | ImageInfo;
|
|
300
319
|
readonly videoInfo: null | VideoInfo;
|
|
320
|
+
readonly contentInfo: null | ContentInfo;
|
|
321
|
+
readonly metadata: null | Metadata;
|
|
301
322
|
constructor(fileInfo: FileInfo, { baseCDN, defaultEffects, fileName }: {
|
|
302
323
|
baseCDN?: string;
|
|
303
324
|
defaultEffects?: string;
|
|
@@ -318,14 +339,15 @@ export declare type FromObjectOptions = {
|
|
|
318
339
|
userAgent?: CustomUserAgent;
|
|
319
340
|
retryThrottledRequestMaxTimes?: number;
|
|
320
341
|
baseCDN?: string;
|
|
342
|
+
metadata?: Metadata;
|
|
321
343
|
};
|
|
322
|
-
declare const uploadFromObject: (file: NodeFile | BrowserFile, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, baseCDN }: FromObjectOptions) => Promise<UploadcareFile>;
|
|
344
|
+
declare const uploadFromObject: (file: NodeFile | BrowserFile, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, baseCDN, metadata }: FromObjectOptions) => Promise<UploadcareFile>;
|
|
323
345
|
export declare type UploadFromUrlOptions = {
|
|
324
346
|
baseCDN?: string;
|
|
325
347
|
onProgress?: ProgressCallback;
|
|
326
348
|
pusherKey?: string;
|
|
327
349
|
} & FromUrlOptions;
|
|
328
|
-
export declare const uploadFromUrl: (sourceUrl: string, { publicKey, fileName, baseURL, baseCDN, checkForUrlDuplicates, saveUrlForRecurrentUploads, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, pusherKey }: UploadFromUrlOptions) => Promise<UploadcareFile>;
|
|
350
|
+
export declare const uploadFromUrl: (sourceUrl: string, { publicKey, fileName, baseURL, baseCDN, checkForUrlDuplicates, saveUrlForRecurrentUploads, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, pusherKey, metadata }: UploadFromUrlOptions) => Promise<UploadcareFile>;
|
|
329
351
|
export declare type FromUploadedOptions = {
|
|
330
352
|
publicKey: string;
|
|
331
353
|
fileName?: string;
|
|
@@ -358,8 +380,9 @@ export declare type MultipartOptions = {
|
|
|
358
380
|
maxConcurrentRequests?: number;
|
|
359
381
|
multipartMaxAttempts?: number;
|
|
360
382
|
baseCDN?: string;
|
|
383
|
+
metadata?: Metadata;
|
|
361
384
|
};
|
|
362
|
-
export declare const uploadMultipart: (file: NodeFile | BrowserFile, { publicKey, fileName, fileSize, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, contentType, multipartChunkSize, maxConcurrentRequests, multipartMaxAttempts, baseCDN }: MultipartOptions) => Promise<UploadcareFile>;
|
|
385
|
+
export declare const uploadMultipart: (file: NodeFile | BrowserFile, { publicKey, fileName, fileSize, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, contentType, multipartChunkSize, maxConcurrentRequests, multipartMaxAttempts, baseCDN, metadata }: MultipartOptions) => Promise<UploadcareFile>;
|
|
363
386
|
export declare type FileFromOptions = {
|
|
364
387
|
publicKey: string;
|
|
365
388
|
fileName?: string;
|
|
@@ -374,6 +397,7 @@ export declare type FileFromOptions = {
|
|
|
374
397
|
userAgent?: CustomUserAgent;
|
|
375
398
|
retryThrottledRequestMaxTimes?: number;
|
|
376
399
|
contentType?: string;
|
|
400
|
+
multipartMinFileSize?: number;
|
|
377
401
|
multipartChunkSize?: number;
|
|
378
402
|
multipartMaxAttempts?: number;
|
|
379
403
|
maxConcurrentRequests?: number;
|
|
@@ -381,11 +405,12 @@ export declare type FileFromOptions = {
|
|
|
381
405
|
checkForUrlDuplicates?: boolean;
|
|
382
406
|
saveUrlForRecurrentUploads?: boolean;
|
|
383
407
|
pusherKey?: string;
|
|
408
|
+
metadata?: Metadata;
|
|
384
409
|
};
|
|
385
410
|
/**
|
|
386
411
|
* Uploads file from provided data.
|
|
387
412
|
*/
|
|
388
|
-
export declare function uploadFile(data: NodeFile | BrowserFile | Url | Uuid, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, contentType, multipartChunkSize, multipartMaxAttempts, maxConcurrentRequests, baseCDN, checkForUrlDuplicates, saveUrlForRecurrentUploads, pusherKey }: FileFromOptions): Promise<UploadcareFile>;
|
|
413
|
+
export declare function uploadFile(data: NodeFile | BrowserFile | Url | Uuid, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, contentType, multipartMinFileSize, multipartChunkSize, multipartMaxAttempts, maxConcurrentRequests, baseCDN, checkForUrlDuplicates, saveUrlForRecurrentUploads, pusherKey, metadata }: FileFromOptions): Promise<UploadcareFile>;
|
|
389
414
|
export declare class UploadcareGroup {
|
|
390
415
|
readonly uuid: GroupId;
|
|
391
416
|
readonly filesCount: string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@uploadcare/upload-client",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.1.1",
|
|
4
4
|
"description": "Library for work with Uploadcare Upload API",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.cjs",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
},
|
|
23
23
|
"scripts": {
|
|
24
24
|
"check-env-vars": "node ./checkvars.js",
|
|
25
|
-
"mock:start": "node --loader ts-node/esm
|
|
25
|
+
"mock:start": "node --loader ts-node/esm ./mock-server/server.ts --silent",
|
|
26
26
|
"clean": "rimraf dist",
|
|
27
27
|
"lint": "eslint ./src ./mock-server --ext=ts",
|
|
28
28
|
"test": "start-server-and-test mock:start :3000 test:jest",
|
|
@@ -91,7 +91,7 @@
|
|
|
91
91
|
"shipjs": "0.24.0",
|
|
92
92
|
"start-server-and-test": "1.11.7",
|
|
93
93
|
"ts-jest": "26.4.1",
|
|
94
|
-
"ts-node": "
|
|
94
|
+
"ts-node": "10.5.0"
|
|
95
95
|
},
|
|
96
96
|
"dependencies": {
|
|
97
97
|
"abort-controller": "^3.0.0",
|