@uploadcare/upload-client 3.0.0 → 3.1.2-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -0
- package/dist/index.browser.cjs +159 -95
- package/dist/index.browser.js +152 -90
- package/dist/index.cjs +164 -95
- package/dist/index.js +157 -90
- package/dist/types.d.ts +35 -8
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -144,34 +144,109 @@ function identity(obj) {
|
|
|
144
144
|
return obj;
|
|
145
145
|
}
|
|
146
146
|
|
|
147
|
+
const getFileOptions = ({ name, contentType }) => [
|
|
148
|
+
{
|
|
149
|
+
filename: name,
|
|
150
|
+
contentType
|
|
151
|
+
}
|
|
152
|
+
];
|
|
147
153
|
const transformFile = identity;
|
|
148
154
|
var getFormData = () => new NodeFormData();
|
|
149
155
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
156
|
+
/**
|
|
157
|
+
* FileData type guard.
|
|
158
|
+
*/
|
|
159
|
+
const isFileData = (data) => {
|
|
160
|
+
return (data !== undefined &&
|
|
161
|
+
((typeof Blob !== 'undefined' && data instanceof Blob) ||
|
|
162
|
+
(typeof File !== 'undefined' && data instanceof File) ||
|
|
163
|
+
(typeof Buffer !== 'undefined' && data instanceof Buffer)));
|
|
164
|
+
};
|
|
165
|
+
/**
|
|
166
|
+
* Uuid type guard.
|
|
167
|
+
*/
|
|
168
|
+
const isUuid = (data) => {
|
|
169
|
+
const UUID_REGEX = '[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}';
|
|
170
|
+
const regExp = new RegExp(UUID_REGEX);
|
|
171
|
+
return !isFileData(data) && regExp.test(data);
|
|
172
|
+
};
|
|
173
|
+
/**
|
|
174
|
+
* Url type guard.
|
|
175
|
+
*
|
|
176
|
+
* @param {NodeFile | BrowserFile | Url | Uuid} data
|
|
177
|
+
*/
|
|
178
|
+
const isUrl = (data) => {
|
|
179
|
+
const URL_REGEX = '^(?:\\w+:)?\\/\\/([^\\s\\.]+\\.\\S{2}|localhost[\\:?\\d]*)\\S*$';
|
|
180
|
+
const regExp = new RegExp(URL_REGEX);
|
|
181
|
+
return !isFileData(data) && regExp.test(data);
|
|
182
|
+
};
|
|
183
|
+
|
|
184
|
+
const isSimpleValue = (value) => {
|
|
185
|
+
return (typeof value === 'string' ||
|
|
186
|
+
typeof value === 'number' ||
|
|
187
|
+
typeof value === 'undefined');
|
|
188
|
+
};
|
|
189
|
+
const isObjectValue = (value) => {
|
|
190
|
+
return !!value && typeof value === 'object' && !Array.isArray(value);
|
|
191
|
+
};
|
|
192
|
+
const isFileValue = (value) => !!value &&
|
|
193
|
+
typeof value === 'object' &&
|
|
194
|
+
'data' in value &&
|
|
195
|
+
isFileData(value.data);
|
|
196
|
+
function collectParams(params, inputKey, inputValue) {
|
|
197
|
+
if (isFileValue(inputValue)) {
|
|
198
|
+
const { name, contentType } = inputValue;
|
|
199
|
+
const file = transformFile(inputValue.data); // lgtm [js/superfluous-trailing-arguments]
|
|
200
|
+
const options = getFileOptions({ name, contentType });
|
|
201
|
+
params.push([inputKey, file, ...options]);
|
|
202
|
+
}
|
|
203
|
+
else if (isObjectValue(inputValue)) {
|
|
204
|
+
for (const [key, value] of Object.entries(inputValue)) {
|
|
205
|
+
if (typeof value !== 'undefined') {
|
|
206
|
+
params.push([`${inputKey}[${key}]`, String(value)]);
|
|
207
|
+
}
|
|
165
208
|
}
|
|
166
209
|
}
|
|
210
|
+
else if (isSimpleValue(inputValue) && inputValue) {
|
|
211
|
+
params.push([inputKey, inputValue.toString()]);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
function getFormDataParams(options) {
|
|
215
|
+
const params = [];
|
|
216
|
+
for (const [key, value] of Object.entries(options)) {
|
|
217
|
+
collectParams(params, key, value);
|
|
218
|
+
}
|
|
219
|
+
return params;
|
|
220
|
+
}
|
|
221
|
+
function buildFormData(options) {
|
|
222
|
+
const formData = getFormData();
|
|
223
|
+
const paramsList = getFormDataParams(options);
|
|
224
|
+
for (const params of paramsList) {
|
|
225
|
+
const [key, value, ...options] = params;
|
|
226
|
+
// node form-data has another signature for append
|
|
227
|
+
formData.append(key, value, ...options);
|
|
228
|
+
}
|
|
167
229
|
return formData;
|
|
168
230
|
}
|
|
169
231
|
|
|
170
232
|
const serializePair = (key, value) => typeof value !== 'undefined' ? `${key}=${encodeURIComponent(value)}` : null;
|
|
233
|
+
// TODO: generalize value transforming logic and use it here and inside `buildFormData`
|
|
171
234
|
const createQuery = (query) => Object.entries(query)
|
|
172
|
-
.reduce((params, [key, value]) =>
|
|
173
|
-
|
|
174
|
-
|
|
235
|
+
.reduce((params, [key, value]) => {
|
|
236
|
+
let param;
|
|
237
|
+
if (typeof value === 'object' && !Array.isArray(value)) {
|
|
238
|
+
param = Object.entries(value)
|
|
239
|
+
.filter((entry) => typeof entry[1] !== 'undefined')
|
|
240
|
+
.map((entry) => serializePair(`${key}[${entry[0]}]`, String(entry[1])));
|
|
241
|
+
}
|
|
242
|
+
else if (Array.isArray(value)) {
|
|
243
|
+
param = value.map((val) => serializePair(`${key}[]`, val));
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
param = serializePair(key, value);
|
|
247
|
+
}
|
|
248
|
+
return params.concat(param);
|
|
249
|
+
}, [])
|
|
175
250
|
.filter((x) => !!x)
|
|
176
251
|
.join('&');
|
|
177
252
|
const getUrl = (base, path, query) => [
|
|
@@ -203,7 +278,7 @@ const defaultSettings = {
|
|
|
203
278
|
const defaultContentType = 'application/octet-stream';
|
|
204
279
|
const defaultFilename = 'original';
|
|
205
280
|
|
|
206
|
-
var version = '3.
|
|
281
|
+
var version = '3.1.1';
|
|
207
282
|
|
|
208
283
|
/**
|
|
209
284
|
* Returns User Agent based on version and settings.
|
|
@@ -303,11 +378,15 @@ function retryIfThrottled(fn, retryThrottledMaxTimes) {
|
|
|
303
378
|
}));
|
|
304
379
|
}
|
|
305
380
|
|
|
381
|
+
function getStoreValue(store) {
|
|
382
|
+
return typeof store === 'undefined' ? 'auto' : store ? '1' : '0';
|
|
383
|
+
}
|
|
384
|
+
|
|
306
385
|
/**
|
|
307
386
|
* Performs file uploading request to Uploadcare Upload API.
|
|
308
387
|
* Can be canceled and has progress.
|
|
309
388
|
*/
|
|
310
|
-
function base(file, { publicKey, fileName, baseURL = defaultSettings.baseURL, secureSignature, secureExpire, store, signal, onProgress, source = 'local', integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes }) {
|
|
389
|
+
function base(file, { publicKey, fileName, contentType, baseURL = defaultSettings.baseURL, secureSignature, secureExpire, store, signal, onProgress, source = 'local', integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes, metadata }) {
|
|
311
390
|
return retryIfThrottled(() => {
|
|
312
391
|
var _a;
|
|
313
392
|
return request({
|
|
@@ -318,17 +397,19 @@ function base(file, { publicKey, fileName, baseURL = defaultSettings.baseURL, se
|
|
|
318
397
|
headers: {
|
|
319
398
|
'X-UC-User-Agent': getUserAgent({ publicKey, integration, userAgent })
|
|
320
399
|
},
|
|
321
|
-
data: buildFormData(
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
400
|
+
data: buildFormData({
|
|
401
|
+
file: {
|
|
402
|
+
data: file,
|
|
403
|
+
name: (_a = fileName !== null && fileName !== void 0 ? fileName : file.name) !== null && _a !== void 0 ? _a : defaultFilename,
|
|
404
|
+
contentType
|
|
405
|
+
},
|
|
406
|
+
UPLOADCARE_PUB_KEY: publicKey,
|
|
407
|
+
UPLOADCARE_STORE: getStoreValue(store),
|
|
408
|
+
signature: secureSignature,
|
|
409
|
+
expire: secureExpire,
|
|
410
|
+
source: source,
|
|
411
|
+
metadata
|
|
412
|
+
}),
|
|
332
413
|
signal,
|
|
333
414
|
onProgress
|
|
334
415
|
}).then(({ data, headers, request }) => {
|
|
@@ -351,7 +432,7 @@ var TypeEnum;
|
|
|
351
432
|
/**
|
|
352
433
|
* Uploading files from URL.
|
|
353
434
|
*/
|
|
354
|
-
function fromUrl(sourceUrl, { publicKey, baseURL = defaultSettings.baseURL, store, fileName, checkForUrlDuplicates, saveUrlForRecurrentUploads, secureSignature, secureExpire, source = 'url', signal, integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes }) {
|
|
435
|
+
function fromUrl(sourceUrl, { publicKey, baseURL = defaultSettings.baseURL, store, fileName, checkForUrlDuplicates, saveUrlForRecurrentUploads, secureSignature, secureExpire, source = 'url', signal, integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes, metadata }) {
|
|
355
436
|
return retryIfThrottled(() => request({
|
|
356
437
|
method: 'POST',
|
|
357
438
|
headers: {
|
|
@@ -361,13 +442,14 @@ function fromUrl(sourceUrl, { publicKey, baseURL = defaultSettings.baseURL, stor
|
|
|
361
442
|
jsonerrors: 1,
|
|
362
443
|
pub_key: publicKey,
|
|
363
444
|
source_url: sourceUrl,
|
|
364
|
-
store:
|
|
445
|
+
store: getStoreValue(store),
|
|
365
446
|
filename: fileName,
|
|
366
447
|
check_URL_duplicates: checkForUrlDuplicates ? 1 : undefined,
|
|
367
448
|
save_URL_duplicates: saveUrlForRecurrentUploads ? 1 : undefined,
|
|
368
449
|
signature: secureSignature,
|
|
369
450
|
expire: secureExpire,
|
|
370
|
-
source: source
|
|
451
|
+
source: source,
|
|
452
|
+
metadata
|
|
371
453
|
}),
|
|
372
454
|
signal
|
|
373
455
|
}).then(({ data, headers, request }) => {
|
|
@@ -510,24 +592,25 @@ function info(uuid, { publicKey, baseURL = defaultSettings.baseURL, signal, sour
|
|
|
510
592
|
/**
|
|
511
593
|
* Start multipart uploading.
|
|
512
594
|
*/
|
|
513
|
-
function multipartStart(size, { publicKey, contentType, fileName, multipartChunkSize = defaultSettings.multipartChunkSize, baseURL = '', secureSignature, secureExpire, store, signal, source = 'local', integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes }) {
|
|
595
|
+
function multipartStart(size, { publicKey, contentType, fileName, multipartChunkSize = defaultSettings.multipartChunkSize, baseURL = '', secureSignature, secureExpire, store, signal, source = 'local', integration, userAgent, retryThrottledRequestMaxTimes = defaultSettings.retryThrottledRequestMaxTimes, metadata }) {
|
|
514
596
|
return retryIfThrottled(() => request({
|
|
515
597
|
method: 'POST',
|
|
516
598
|
url: getUrl(baseURL, '/multipart/start/', { jsonerrors: 1 }),
|
|
517
599
|
headers: {
|
|
518
600
|
'X-UC-User-Agent': getUserAgent({ publicKey, integration, userAgent })
|
|
519
601
|
},
|
|
520
|
-
data: buildFormData(
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
602
|
+
data: buildFormData({
|
|
603
|
+
filename: fileName !== null && fileName !== void 0 ? fileName : defaultFilename,
|
|
604
|
+
size: size,
|
|
605
|
+
content_type: contentType !== null && contentType !== void 0 ? contentType : defaultContentType,
|
|
606
|
+
part_size: multipartChunkSize,
|
|
607
|
+
UPLOADCARE_STORE: getStoreValue(store),
|
|
608
|
+
UPLOADCARE_PUB_KEY: publicKey,
|
|
609
|
+
signature: secureSignature,
|
|
610
|
+
expire: secureExpire,
|
|
611
|
+
source: source,
|
|
612
|
+
metadata
|
|
613
|
+
}),
|
|
531
614
|
signal
|
|
532
615
|
}).then(({ data, headers, request }) => {
|
|
533
616
|
const response = camelizeKeys(JSON.parse(data));
|
|
@@ -576,11 +659,11 @@ function multipartComplete(uuid, { publicKey, baseURL = defaultSettings.baseURL,
|
|
|
576
659
|
headers: {
|
|
577
660
|
'X-UC-User-Agent': getUserAgent({ publicKey, integration, userAgent })
|
|
578
661
|
},
|
|
579
|
-
data: buildFormData(
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
662
|
+
data: buildFormData({
|
|
663
|
+
uuid: uuid,
|
|
664
|
+
UPLOADCARE_PUB_KEY: publicKey,
|
|
665
|
+
source: source
|
|
666
|
+
}),
|
|
584
667
|
signal
|
|
585
668
|
}).then(({ data, headers, request }) => {
|
|
586
669
|
const response = camelizeKeys(JSON.parse(data));
|
|
@@ -606,6 +689,8 @@ class UploadcareFile {
|
|
|
606
689
|
this.originalFilename = null;
|
|
607
690
|
this.imageInfo = null;
|
|
608
691
|
this.videoInfo = null;
|
|
692
|
+
this.contentInfo = null;
|
|
693
|
+
this.metadata = null;
|
|
609
694
|
const { uuid, s3Bucket } = fileInfo;
|
|
610
695
|
const urlBase = s3Bucket
|
|
611
696
|
? `https://${s3Bucket}.s3.amazonaws.com/${uuid}/${fileInfo.filename}`
|
|
@@ -625,6 +710,8 @@ class UploadcareFile {
|
|
|
625
710
|
this.originalFilename = fileInfo.originalFilename;
|
|
626
711
|
this.imageInfo = camelizeKeys(fileInfo.imageInfo);
|
|
627
712
|
this.videoInfo = camelizeKeys(fileInfo.videoInfo);
|
|
713
|
+
this.contentInfo = camelizeKeys(fileInfo.contentInfo);
|
|
714
|
+
this.metadata = fileInfo.metadata || null;
|
|
628
715
|
}
|
|
629
716
|
}
|
|
630
717
|
|
|
@@ -676,10 +763,11 @@ function isReadyPoll({ file, publicKey, baseURL, source, integration, userAgent,
|
|
|
676
763
|
});
|
|
677
764
|
}
|
|
678
765
|
|
|
679
|
-
const uploadFromObject = (file, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, baseCDN }) => {
|
|
766
|
+
const uploadFromObject = (file, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, contentType, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, baseCDN, metadata }) => {
|
|
680
767
|
return base(file, {
|
|
681
768
|
publicKey,
|
|
682
769
|
fileName,
|
|
770
|
+
contentType,
|
|
683
771
|
baseURL,
|
|
684
772
|
secureSignature,
|
|
685
773
|
secureExpire,
|
|
@@ -689,7 +777,8 @@ const uploadFromObject = (file, { publicKey, fileName, baseURL, secureSignature,
|
|
|
689
777
|
source,
|
|
690
778
|
integration,
|
|
691
779
|
userAgent,
|
|
692
|
-
retryThrottledRequestMaxTimes
|
|
780
|
+
retryThrottledRequestMaxTimes,
|
|
781
|
+
metadata
|
|
693
782
|
})
|
|
694
783
|
.then(({ file }) => {
|
|
695
784
|
return isReadyPoll({
|
|
@@ -982,7 +1071,7 @@ const pushStrategy = ({ token, pusherKey, signal, onProgress }) => new Promise((
|
|
|
982
1071
|
}
|
|
983
1072
|
});
|
|
984
1073
|
});
|
|
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))
|
|
1074
|
+
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
1075
|
.then(() => fromUrl(sourceUrl, {
|
|
987
1076
|
publicKey,
|
|
988
1077
|
fileName,
|
|
@@ -996,7 +1085,8 @@ const uploadFromUrl = (sourceUrl, { publicKey, fileName, baseURL, baseCDN, check
|
|
|
996
1085
|
source,
|
|
997
1086
|
integration,
|
|
998
1087
|
userAgent,
|
|
999
|
-
retryThrottledRequestMaxTimes
|
|
1088
|
+
retryThrottledRequestMaxTimes,
|
|
1089
|
+
metadata
|
|
1000
1090
|
}))
|
|
1001
1091
|
.catch((error) => {
|
|
1002
1092
|
const pusher = getPusher(pusherKey);
|
|
@@ -1067,34 +1157,6 @@ const uploadFromUploaded = (uuid, { publicKey, fileName, baseURL, signal, onProg
|
|
|
1067
1157
|
});
|
|
1068
1158
|
};
|
|
1069
1159
|
|
|
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
1160
|
/**
|
|
1099
1161
|
* Get file size.
|
|
1100
1162
|
*/
|
|
@@ -1164,7 +1226,7 @@ const uploadPartWithRetry = (chunk, url, { publicKey, onProgress, signal, integr
|
|
|
1164
1226
|
}
|
|
1165
1227
|
throw error;
|
|
1166
1228
|
}));
|
|
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 }) => {
|
|
1229
|
+
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
1230
|
const size = fileSize || getFileSize(file);
|
|
1169
1231
|
let progressValues;
|
|
1170
1232
|
const createProgressHandler = (totalChunks, chunkIdx) => {
|
|
@@ -1197,7 +1259,8 @@ const uploadMultipart = (file, { publicKey, fileName, fileSize, baseURL, secureS
|
|
|
1197
1259
|
source,
|
|
1198
1260
|
integration,
|
|
1199
1261
|
userAgent,
|
|
1200
|
-
retryThrottledRequestMaxTimes
|
|
1262
|
+
retryThrottledRequestMaxTimes,
|
|
1263
|
+
metadata
|
|
1201
1264
|
})
|
|
1202
1265
|
.then(({ uuid, parts }) => {
|
|
1203
1266
|
const getChunk = prepareChunks(file, size, multipartChunkSize);
|
|
@@ -1244,10 +1307,10 @@ const uploadMultipart = (file, { publicKey, fileName, fileSize, baseURL, secureS
|
|
|
1244
1307
|
/**
|
|
1245
1308
|
* Uploads file from provided data.
|
|
1246
1309
|
*/
|
|
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 }) {
|
|
1310
|
+
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
1311
|
if (isFileData(data)) {
|
|
1249
1312
|
const fileSize = getFileSize(data);
|
|
1250
|
-
if (isMultipart(fileSize)) {
|
|
1313
|
+
if (isMultipart(fileSize, multipartMinFileSize)) {
|
|
1251
1314
|
return uploadMultipart(data, {
|
|
1252
1315
|
publicKey,
|
|
1253
1316
|
contentType,
|
|
@@ -1265,12 +1328,14 @@ function uploadFile(data, { publicKey, fileName, baseURL = defaultSettings.baseU
|
|
|
1265
1328
|
userAgent,
|
|
1266
1329
|
maxConcurrentRequests,
|
|
1267
1330
|
retryThrottledRequestMaxTimes,
|
|
1268
|
-
baseCDN
|
|
1331
|
+
baseCDN,
|
|
1332
|
+
metadata
|
|
1269
1333
|
});
|
|
1270
1334
|
}
|
|
1271
1335
|
return uploadFromObject(data, {
|
|
1272
1336
|
publicKey,
|
|
1273
1337
|
fileName,
|
|
1338
|
+
contentType,
|
|
1274
1339
|
baseURL,
|
|
1275
1340
|
secureSignature,
|
|
1276
1341
|
secureExpire,
|
|
@@ -1281,7 +1346,8 @@ function uploadFile(data, { publicKey, fileName, baseURL = defaultSettings.baseU
|
|
|
1281
1346
|
integration,
|
|
1282
1347
|
userAgent,
|
|
1283
1348
|
retryThrottledRequestMaxTimes,
|
|
1284
|
-
baseCDN
|
|
1349
|
+
baseCDN,
|
|
1350
|
+
metadata
|
|
1285
1351
|
});
|
|
1286
1352
|
}
|
|
1287
1353
|
if (isUrl(data)) {
|
|
@@ -1301,7 +1367,8 @@ function uploadFile(data, { publicKey, fileName, baseURL = defaultSettings.baseU
|
|
|
1301
1367
|
integration,
|
|
1302
1368
|
userAgent,
|
|
1303
1369
|
retryThrottledRequestMaxTimes,
|
|
1304
|
-
pusherKey
|
|
1370
|
+
pusherKey,
|
|
1371
|
+
metadata
|
|
1305
1372
|
});
|
|
1306
1373
|
}
|
|
1307
1374
|
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;
|
|
@@ -136,14 +152,16 @@ export declare type BaseOptions = {
|
|
|
136
152
|
secureSignature?: string;
|
|
137
153
|
secureExpire?: string;
|
|
138
154
|
store?: boolean;
|
|
155
|
+
contentType?: string;
|
|
139
156
|
signal?: AbortSignal;
|
|
140
157
|
onProgress?: ProgressCallback;
|
|
141
158
|
source?: string;
|
|
142
159
|
integration?: string;
|
|
143
160
|
userAgent?: CustomUserAgent;
|
|
144
161
|
retryThrottledRequestMaxTimes?: number;
|
|
162
|
+
metadata?: Metadata;
|
|
145
163
|
};
|
|
146
|
-
declare function base(file: NodeFile | BrowserFile, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes }: BaseOptions): Promise<BaseResponse>;
|
|
164
|
+
declare function base(file: NodeFile | BrowserFile, { publicKey, fileName, contentType, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, metadata }: BaseOptions): Promise<BaseResponse>;
|
|
147
165
|
declare enum TypeEnum {
|
|
148
166
|
Token = "token",
|
|
149
167
|
FileInfo = "file_info"
|
|
@@ -171,8 +189,9 @@ export declare type FromUrlOptions = {
|
|
|
171
189
|
integration?: string;
|
|
172
190
|
userAgent?: CustomUserAgent;
|
|
173
191
|
retryThrottledRequestMaxTimes?: number;
|
|
192
|
+
metadata?: Metadata;
|
|
174
193
|
};
|
|
175
|
-
declare function fromUrl(sourceUrl: Url, { publicKey, baseURL, store, fileName, checkForUrlDuplicates, saveUrlForRecurrentUploads, secureSignature, secureExpire, source, signal, integration, userAgent, retryThrottledRequestMaxTimes }: FromUrlOptions): Promise<FromUrlSuccessResponse>;
|
|
194
|
+
declare function fromUrl(sourceUrl: Url, { publicKey, baseURL, store, fileName, checkForUrlDuplicates, saveUrlForRecurrentUploads, secureSignature, secureExpire, source, signal, integration, userAgent, retryThrottledRequestMaxTimes, metadata }: FromUrlOptions): Promise<FromUrlSuccessResponse>;
|
|
176
195
|
declare enum Status {
|
|
177
196
|
Unknown = "unknown",
|
|
178
197
|
Waiting = "waiting",
|
|
@@ -257,13 +276,14 @@ export declare type MultipartStartOptions = {
|
|
|
257
276
|
integration?: string;
|
|
258
277
|
userAgent?: CustomUserAgent;
|
|
259
278
|
retryThrottledRequestMaxTimes?: number;
|
|
279
|
+
metadata?: Metadata;
|
|
260
280
|
};
|
|
261
281
|
export declare type MultipartPart = string;
|
|
262
282
|
export declare type MultipartStartResponse = {
|
|
263
283
|
parts: MultipartPart[];
|
|
264
284
|
uuid: Uuid;
|
|
265
285
|
};
|
|
266
|
-
declare function multipartStart(size: number, { publicKey, contentType, fileName, multipartChunkSize, baseURL, secureSignature, secureExpire, store, signal, source, integration, userAgent, retryThrottledRequestMaxTimes }: MultipartStartOptions): Promise<MultipartStartResponse>;
|
|
286
|
+
declare function multipartStart(size: number, { publicKey, contentType, fileName, multipartChunkSize, baseURL, secureSignature, secureExpire, store, signal, source, integration, userAgent, retryThrottledRequestMaxTimes, metadata }: MultipartStartOptions): Promise<MultipartStartResponse>;
|
|
267
287
|
export declare type MultipartUploadOptions = {
|
|
268
288
|
publicKey?: string;
|
|
269
289
|
signal?: AbortSignal;
|
|
@@ -298,6 +318,8 @@ export declare class UploadcareFile {
|
|
|
298
318
|
readonly originalFilename: null | string;
|
|
299
319
|
readonly imageInfo: null | ImageInfo;
|
|
300
320
|
readonly videoInfo: null | VideoInfo;
|
|
321
|
+
readonly contentInfo: null | ContentInfo;
|
|
322
|
+
readonly metadata: null | Metadata;
|
|
301
323
|
constructor(fileInfo: FileInfo, { baseCDN, defaultEffects, fileName }: {
|
|
302
324
|
baseCDN?: string;
|
|
303
325
|
defaultEffects?: string;
|
|
@@ -311,6 +333,7 @@ export declare type FromObjectOptions = {
|
|
|
311
333
|
secureSignature?: string;
|
|
312
334
|
secureExpire?: string;
|
|
313
335
|
store?: boolean;
|
|
336
|
+
contentType?: string;
|
|
314
337
|
signal?: AbortSignal;
|
|
315
338
|
onProgress?: ProgressCallback;
|
|
316
339
|
source?: string;
|
|
@@ -318,14 +341,15 @@ export declare type FromObjectOptions = {
|
|
|
318
341
|
userAgent?: CustomUserAgent;
|
|
319
342
|
retryThrottledRequestMaxTimes?: number;
|
|
320
343
|
baseCDN?: string;
|
|
344
|
+
metadata?: Metadata;
|
|
321
345
|
};
|
|
322
|
-
declare const uploadFromObject: (file: NodeFile | BrowserFile, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, baseCDN }: FromObjectOptions) => Promise<UploadcareFile>;
|
|
346
|
+
declare const uploadFromObject: (file: NodeFile | BrowserFile, { publicKey, fileName, baseURL, secureSignature, secureExpire, store, contentType, signal, onProgress, source, integration, userAgent, retryThrottledRequestMaxTimes, baseCDN, metadata }: FromObjectOptions) => Promise<UploadcareFile>;
|
|
323
347
|
export declare type UploadFromUrlOptions = {
|
|
324
348
|
baseCDN?: string;
|
|
325
349
|
onProgress?: ProgressCallback;
|
|
326
350
|
pusherKey?: string;
|
|
327
351
|
} & 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>;
|
|
352
|
+
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
353
|
export declare type FromUploadedOptions = {
|
|
330
354
|
publicKey: string;
|
|
331
355
|
fileName?: string;
|
|
@@ -358,8 +382,9 @@ export declare type MultipartOptions = {
|
|
|
358
382
|
maxConcurrentRequests?: number;
|
|
359
383
|
multipartMaxAttempts?: number;
|
|
360
384
|
baseCDN?: string;
|
|
385
|
+
metadata?: Metadata;
|
|
361
386
|
};
|
|
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>;
|
|
387
|
+
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
388
|
export declare type FileFromOptions = {
|
|
364
389
|
publicKey: string;
|
|
365
390
|
fileName?: string;
|
|
@@ -374,6 +399,7 @@ export declare type FileFromOptions = {
|
|
|
374
399
|
userAgent?: CustomUserAgent;
|
|
375
400
|
retryThrottledRequestMaxTimes?: number;
|
|
376
401
|
contentType?: string;
|
|
402
|
+
multipartMinFileSize?: number;
|
|
377
403
|
multipartChunkSize?: number;
|
|
378
404
|
multipartMaxAttempts?: number;
|
|
379
405
|
maxConcurrentRequests?: number;
|
|
@@ -381,11 +407,12 @@ export declare type FileFromOptions = {
|
|
|
381
407
|
checkForUrlDuplicates?: boolean;
|
|
382
408
|
saveUrlForRecurrentUploads?: boolean;
|
|
383
409
|
pusherKey?: string;
|
|
410
|
+
metadata?: Metadata;
|
|
384
411
|
};
|
|
385
412
|
/**
|
|
386
413
|
* Uploads file from provided data.
|
|
387
414
|
*/
|
|
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>;
|
|
415
|
+
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
416
|
export declare class UploadcareGroup {
|
|
390
417
|
readonly uuid: GroupId;
|
|
391
418
|
readonly filesCount: string;
|