@uploadcare/upload-client 2.0.0-alpha.6 → 2.0.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/dist/index.cjs CHANGED
@@ -2,14 +2,21 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var abortController = require('abort-controller');
6
5
  var http = require('http');
7
6
  var https = require('https');
8
7
  var url = require('url');
9
8
  var stream = require('stream');
10
9
  var NodeFormData = require('form-data');
10
+ var abortController = require('abort-controller');
11
11
  var WebSocket = require('ws');
12
12
 
13
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
14
+
15
+ var http__default = /*#__PURE__*/_interopDefaultLegacy(http);
16
+ var https__default = /*#__PURE__*/_interopDefaultLegacy(https);
17
+ var NodeFormData__default = /*#__PURE__*/_interopDefaultLegacy(NodeFormData);
18
+ var WebSocket__default = /*#__PURE__*/_interopDefaultLegacy(WebSocket);
19
+
13
20
  /*! *****************************************************************************
14
21
  Copyright (c) Microsoft Corporation. All rights reserved.
15
22
  Licensed under the Apache License, Version 2.0 (the "License"); you may not use
@@ -58,32 +65,13 @@ function __spreadArrays() {
58
65
  return r;
59
66
  }
60
67
 
61
- /*
62
- Settings for future support:
63
- parallelDirectUploads: 10,
64
- */
65
- var defaultSettings = {
66
- baseCDN: 'https://ucarecdn.com',
67
- baseURL: 'https://upload.uploadcare.com',
68
- maxContentLength: 50 * 1024 * 1024,
69
- retryThrottledRequestMaxTimes: 1,
70
- multipartMinFileSize: 25 * 1024 * 1024,
71
- multipartChunkSize: 5 * 1024 * 1024,
72
- multipartMinLastPartSize: 1024 * 1024,
73
- maxConcurrentRequests: 4,
74
- multipartMaxAttempts: 3,
75
- pollingTimeoutMilliseconds: 10000,
76
- pusherKey: '79ae88bd931ea68464d9'
77
- };
78
- var defaultContentType = 'application/octet-stream';
79
- var defaultFilename = 'original';
80
-
81
68
  var UploadClientError = /** @class */ (function (_super) {
82
69
  __extends(UploadClientError, _super);
83
- function UploadClientError(message, request, response, headers) {
70
+ function UploadClientError(message, code, request, response, headers) {
84
71
  var _this = _super.call(this) || this;
85
72
  _this.name = 'UploadClientError';
86
73
  _this.message = message;
74
+ _this.code = code;
87
75
  _this.request = request;
88
76
  _this.response = response;
89
77
  _this.headers = headers;
@@ -176,8 +164,8 @@ var request = function (params) {
176
164
  length || data.length;
177
165
  }
178
166
  var req = options.protocol !== 'https:'
179
- ? http.request(options)
180
- : https.request(options);
167
+ ? http__default["default"].request(options)
168
+ : https__default["default"].request(options);
181
169
  onCancel(signal, function () {
182
170
  aborted = true;
183
171
  req.abort();
@@ -220,20 +208,27 @@ var request = function (params) {
220
208
  });
221
209
  };
222
210
 
223
- var getFormData = (function () { return new NodeFormData(); });
211
+ function identity(obj) {
212
+ return obj;
213
+ }
214
+
215
+ var transformFile = identity;
216
+ var getFormData = (function () { return new NodeFormData__default["default"](); });
224
217
 
218
+ var isFileTuple = function (tuple) {
219
+ return tuple[0] === 'file';
220
+ };
225
221
  function buildFormData(body) {
226
222
  var formData = getFormData();
227
- var isTriple = function (tuple) {
228
- return tuple[0] === 'file';
229
- };
230
223
  var _loop_1 = function (tuple) {
231
224
  if (Array.isArray(tuple[1])) {
232
225
  // refactor this
233
226
  tuple[1].forEach(function (val) { return val && formData.append(tuple[0] + '[]', "" + val); });
234
227
  }
235
- else if (isTriple(tuple)) {
236
- formData.append(tuple[0], tuple[1], tuple[2]);
228
+ else if (isFileTuple(tuple)) {
229
+ var name_1 = tuple[2];
230
+ var file = transformFile(tuple[1]); // lgtm[js/superfluous-trailing-arguments]
231
+ formData.append(tuple[0], file, name_1);
237
232
  }
238
233
  else if (tuple[1] != null) {
239
234
  formData.append(tuple[0], "" + tuple[1]);
@@ -271,16 +266,53 @@ var getUrl = function (base, path, query) {
271
266
  .join('');
272
267
  };
273
268
 
274
- var version = '2.0.0-alpha.6';
269
+ /*
270
+ Settings for future support:
271
+ parallelDirectUploads: 10,
272
+ */
273
+ var defaultSettings = {
274
+ baseCDN: 'https://ucarecdn.com',
275
+ baseURL: 'https://upload.uploadcare.com',
276
+ maxContentLength: 50 * 1024 * 1024,
277
+ retryThrottledRequestMaxTimes: 1,
278
+ multipartMinFileSize: 25 * 1024 * 1024,
279
+ multipartChunkSize: 5 * 1024 * 1024,
280
+ multipartMinLastPartSize: 1024 * 1024,
281
+ maxConcurrentRequests: 4,
282
+ multipartMaxAttempts: 3,
283
+ pollingTimeoutMilliseconds: 10000,
284
+ pusherKey: '79ae88bd931ea68464d9'
285
+ };
286
+ var defaultContentType = 'application/octet-stream';
287
+ var defaultFilename = 'original';
288
+
289
+ var version = '2.0.0';
275
290
 
276
291
  /**
277
292
  * Returns User Agent based on version and settings.
278
293
  */
279
294
  function getUserAgent(_a) {
280
- var _b = _a === void 0 ? {} : _a, _c = _b.publicKey, publicKey = _c === void 0 ? '' : _c, _d = _b.integration, integration = _d === void 0 ? '' : _d;
281
- var mainInfo = [version, publicKey].filter(Boolean).join('/');
282
- var additionInfo = ['JavaScript', integration].filter(Boolean).join('; ');
283
- return "UploadcareUploadClient/" + mainInfo + " (" + additionInfo + ")";
295
+ var _b = _a === void 0 ? {} : _a, userAgent = _b.userAgent, _c = _b.publicKey, publicKey = _c === void 0 ? '' : _c, _d = _b.integration, integration = _d === void 0 ? '' : _d;
296
+ var libraryName = 'UploadcareUploadClient';
297
+ var libraryVersion = version;
298
+ var languageName = 'JavaScript';
299
+ if (typeof userAgent === 'string') {
300
+ return userAgent;
301
+ }
302
+ if (typeof userAgent === 'function') {
303
+ return userAgent({
304
+ publicKey: publicKey,
305
+ libraryName: libraryName,
306
+ libraryVersion: libraryVersion,
307
+ languageName: languageName,
308
+ integration: integration
309
+ });
310
+ }
311
+ var mainInfo = [libraryName, libraryVersion, publicKey]
312
+ .filter(Boolean)
313
+ .join('/');
314
+ var additionInfo = [languageName, integration].filter(Boolean).join('; ');
315
+ return mainInfo + " (" + additionInfo + ")";
284
316
  }
285
317
 
286
318
  var SEPARATOR = /\W|_/g;
@@ -343,7 +375,7 @@ function retrier(fn, options) {
343
375
  return runAttempt(fn);
344
376
  }
345
377
 
346
- var REQUEST_WAS_THROTTLED_CODE = 429;
378
+ var REQUEST_WAS_THROTTLED_CODE = 'RequestThrottledError';
347
379
  var DEFAULT_RETRY_AFTER_TIMEOUT = 15000;
348
380
  function getTimeoutFromThrottledRequest(error) {
349
381
  var headers = (error || {}).headers;
@@ -355,9 +387,8 @@ function retryIfThrottled(fn, retryThrottledMaxTimes) {
355
387
  return retrier(function (_a) {
356
388
  var attempt = _a.attempt, retry = _a.retry;
357
389
  return fn().catch(function (error) {
358
- var _a;
359
390
  if ('response' in error &&
360
- ((_a = error === null || error === void 0 ? void 0 : error.response) === null || _a === void 0 ? void 0 : _a.statusCode) === REQUEST_WAS_THROTTLED_CODE &&
391
+ (error === null || error === void 0 ? void 0 : error.code) === REQUEST_WAS_THROTTLED_CODE &&
361
392
  attempt < retryThrottledMaxTimes) {
362
393
  return retry(getTimeoutFromThrottledRequest(error));
363
394
  }
@@ -371,7 +402,7 @@ function retryIfThrottled(fn, retryThrottledMaxTimes) {
371
402
  * Can be canceled and has progress.
372
403
  */
373
404
  function base(file, _a) {
374
- var publicKey = _a.publicKey, fileName = _a.fileName, _b = _a.baseURL, baseURL = _b === void 0 ? defaultSettings.baseURL : _b, secureSignature = _a.secureSignature, secureExpire = _a.secureExpire, store = _a.store, signal = _a.signal, onProgress = _a.onProgress, _c = _a.source, source = _c === void 0 ? 'local' : _c, integration = _a.integration, _d = _a.retryThrottledRequestMaxTimes, retryThrottledRequestMaxTimes = _d === void 0 ? defaultSettings.retryThrottledRequestMaxTimes : _d;
405
+ var publicKey = _a.publicKey, fileName = _a.fileName, _b = _a.baseURL, baseURL = _b === void 0 ? defaultSettings.baseURL : _b, secureSignature = _a.secureSignature, secureExpire = _a.secureExpire, store = _a.store, signal = _a.signal, onProgress = _a.onProgress, _c = _a.source, source = _c === void 0 ? 'local' : _c, integration = _a.integration, userAgent = _a.userAgent, _d = _a.retryThrottledRequestMaxTimes, retryThrottledRequestMaxTimes = _d === void 0 ? defaultSettings.retryThrottledRequestMaxTimes : _d;
375
406
  return retryIfThrottled(function () {
376
407
  var _a;
377
408
  return request({
@@ -380,7 +411,7 @@ function base(file, _a) {
380
411
  jsonerrors: 1
381
412
  }),
382
413
  headers: {
383
- 'X-UC-User-Agent': getUserAgent({ publicKey: publicKey, integration: integration })
414
+ 'X-UC-User-Agent': getUserAgent({ publicKey: publicKey, integration: integration, userAgent: userAgent })
384
415
  },
385
416
  data: buildFormData([
386
417
  ['file', file, (_a = fileName !== null && fileName !== void 0 ? fileName : file.name) !== null && _a !== void 0 ? _a : defaultFilename],
@@ -399,39 +430,7 @@ function base(file, _a) {
399
430
  var data = _a.data, headers = _a.headers, request = _a.request;
400
431
  var response = camelizeKeys(JSON.parse(data));
401
432
  if ('error' in response) {
402
- throw new UploadClientError("[" + response.error.statusCode + "] " + response.error.content, request, response.error, headers);
403
- }
404
- else {
405
- return response;
406
- }
407
- });
408
- }, retryThrottledRequestMaxTimes);
409
- }
410
-
411
- /**
412
- * Returns a JSON dictionary holding file info.
413
- */
414
- /* eslint @typescript-eslint/camelcase: [2, {allow: ["pub_key", "file_id"]}] */
415
- function info(uuid, _a) {
416
- var publicKey = _a.publicKey, _b = _a.baseURL, baseURL = _b === void 0 ? defaultSettings.baseURL : _b, signal = _a.signal, source = _a.source, integration = _a.integration, _c = _a.retryThrottledRequestMaxTimes, retryThrottledRequestMaxTimes = _c === void 0 ? defaultSettings.retryThrottledRequestMaxTimes : _c;
417
- return retryIfThrottled(function () {
418
- return request({
419
- method: 'GET',
420
- headers: {
421
- 'X-UC-User-Agent': getUserAgent({ publicKey: publicKey, integration: integration })
422
- },
423
- url: getUrl(baseURL, '/info/', {
424
- jsonerrors: 1,
425
- pub_key: publicKey,
426
- file_id: uuid,
427
- source: source
428
- }),
429
- signal: signal
430
- }).then(function (_a) {
431
- var data = _a.data, headers = _a.headers, request = _a.request;
432
- var response = camelizeKeys(JSON.parse(data));
433
- if ('error' in response) {
434
- throw new UploadClientError("[" + response.error.statusCode + "] " + response.error.content, request, response.error, headers);
433
+ throw new UploadClientError(response.error.content, response.error.errorCode, request, response, headers);
435
434
  }
436
435
  else {
437
436
  return response;
@@ -448,14 +447,13 @@ var TypeEnum;
448
447
  /**
449
448
  * Uploading files from URL.
450
449
  */
451
- /* eslint @typescript-eslint/camelcase: [2, {allow: ["pub_key", "source_url", "check_URL_duplicates", "save_URL_duplicates"]}] */
452
450
  function fromUrl(sourceUrl, _a) {
453
- var publicKey = _a.publicKey, _b = _a.baseURL, baseURL = _b === void 0 ? defaultSettings.baseURL : _b, store = _a.store, fileName = _a.fileName, checkForUrlDuplicates = _a.checkForUrlDuplicates, saveUrlForRecurrentUploads = _a.saveUrlForRecurrentUploads, secureSignature = _a.secureSignature, secureExpire = _a.secureExpire, _c = _a.source, source = _c === void 0 ? 'url' : _c, signal = _a.signal, integration = _a.integration, _d = _a.retryThrottledRequestMaxTimes, retryThrottledRequestMaxTimes = _d === void 0 ? defaultSettings.retryThrottledRequestMaxTimes : _d;
451
+ var publicKey = _a.publicKey, _b = _a.baseURL, baseURL = _b === void 0 ? defaultSettings.baseURL : _b, store = _a.store, fileName = _a.fileName, checkForUrlDuplicates = _a.checkForUrlDuplicates, saveUrlForRecurrentUploads = _a.saveUrlForRecurrentUploads, secureSignature = _a.secureSignature, secureExpire = _a.secureExpire, _c = _a.source, source = _c === void 0 ? 'url' : _c, signal = _a.signal, integration = _a.integration, userAgent = _a.userAgent, _d = _a.retryThrottledRequestMaxTimes, retryThrottledRequestMaxTimes = _d === void 0 ? defaultSettings.retryThrottledRequestMaxTimes : _d;
454
452
  return retryIfThrottled(function () {
455
453
  return request({
456
454
  method: 'POST',
457
455
  headers: {
458
- 'X-UC-User-Agent': getUserAgent({ publicKey: publicKey, integration: integration })
456
+ 'X-UC-User-Agent': getUserAgent({ publicKey: publicKey, integration: integration, userAgent: userAgent })
459
457
  },
460
458
  url: getUrl(baseURL, '/from_url/', {
461
459
  jsonerrors: 1,
@@ -474,7 +472,7 @@ function fromUrl(sourceUrl, _a) {
474
472
  var data = _a.data, headers = _a.headers, request = _a.request;
475
473
  var response = camelizeKeys(JSON.parse(data));
476
474
  if ('error' in response) {
477
- throw new UploadClientError("[" + response.error.statusCode + "] " + response.error.content, request, response.error, headers);
475
+ throw new UploadClientError(response.error.content, response.error.errorCode, request, response, headers);
478
476
  }
479
477
  else {
480
478
  return response;
@@ -498,12 +496,18 @@ var isErrorResponse = function (response) {
498
496
  * Checking upload status and working with file tokens.
499
497
  */
500
498
  function fromUrlStatus(token, _a) {
501
- var _b = _a === void 0 ? {} : _a, publicKey = _b.publicKey, _c = _b.baseURL, baseURL = _c === void 0 ? defaultSettings.baseURL : _c, signal = _b.signal, integration = _b.integration, _d = _b.retryThrottledRequestMaxTimes, retryThrottledRequestMaxTimes = _d === void 0 ? defaultSettings.retryThrottledRequestMaxTimes : _d;
499
+ var _b = _a === void 0 ? {} : _a, publicKey = _b.publicKey, _c = _b.baseURL, baseURL = _c === void 0 ? defaultSettings.baseURL : _c, signal = _b.signal, integration = _b.integration, userAgent = _b.userAgent, _d = _b.retryThrottledRequestMaxTimes, retryThrottledRequestMaxTimes = _d === void 0 ? defaultSettings.retryThrottledRequestMaxTimes : _d;
502
500
  return retryIfThrottled(function () {
503
501
  return request({
504
502
  method: 'GET',
505
503
  headers: publicKey
506
- ? { 'X-UC-User-Agent': getUserAgent({ publicKey: publicKey, integration: integration }) }
504
+ ? {
505
+ 'X-UC-User-Agent': getUserAgent({
506
+ publicKey: publicKey,
507
+ integration: integration,
508
+ userAgent: userAgent
509
+ })
510
+ }
507
511
  : undefined,
508
512
  url: getUrl(baseURL, '/from_url/status/', {
509
513
  jsonerrors: 1,
@@ -514,7 +518,7 @@ function fromUrlStatus(token, _a) {
514
518
  var data = _a.data, headers = _a.headers, request = _a.request;
515
519
  var response = camelizeKeys(JSON.parse(data));
516
520
  if ('error' in response && !isErrorResponse(response)) {
517
- throw new UploadClientError("[" + response.error.statusCode + "] " + response.error.content, request, response.error, headers);
521
+ throw new UploadClientError(response.error.content, undefined, request, response, headers);
518
522
  }
519
523
  else {
520
524
  return response;
@@ -526,14 +530,13 @@ function fromUrlStatus(token, _a) {
526
530
  /**
527
531
  * Create files group.
528
532
  */
529
- /* eslint @typescript-eslint/camelcase: [2, {allow: ["pub_key"]}] */
530
533
  function group(uuids, _a) {
531
- var publicKey = _a.publicKey, _b = _a.baseURL, baseURL = _b === void 0 ? defaultSettings.baseURL : _b, jsonpCallback = _a.jsonpCallback, secureSignature = _a.secureSignature, secureExpire = _a.secureExpire, signal = _a.signal, source = _a.source, integration = _a.integration, _c = _a.retryThrottledRequestMaxTimes, retryThrottledRequestMaxTimes = _c === void 0 ? defaultSettings.retryThrottledRequestMaxTimes : _c;
534
+ var publicKey = _a.publicKey, _b = _a.baseURL, baseURL = _b === void 0 ? defaultSettings.baseURL : _b, jsonpCallback = _a.jsonpCallback, secureSignature = _a.secureSignature, secureExpire = _a.secureExpire, signal = _a.signal, source = _a.source, integration = _a.integration, userAgent = _a.userAgent, _c = _a.retryThrottledRequestMaxTimes, retryThrottledRequestMaxTimes = _c === void 0 ? defaultSettings.retryThrottledRequestMaxTimes : _c;
532
535
  return retryIfThrottled(function () {
533
536
  return request({
534
537
  method: 'POST',
535
538
  headers: {
536
- 'X-UC-User-Agent': getUserAgent({ publicKey: publicKey, integration: integration })
539
+ 'X-UC-User-Agent': getUserAgent({ publicKey: publicKey, integration: integration, userAgent: userAgent })
537
540
  },
538
541
  url: getUrl(baseURL, '/group/', {
539
542
  jsonerrors: 1,
@@ -549,7 +552,7 @@ function group(uuids, _a) {
549
552
  var data = _a.data, headers = _a.headers, request = _a.request;
550
553
  var response = camelizeKeys(JSON.parse(data));
551
554
  if ('error' in response) {
552
- throw new UploadClientError("[" + response.error.statusCode + "] " + response.error.content, request, response.error, headers);
555
+ throw new UploadClientError(response.error.content, response.error.errorCode, request, response, headers);
553
556
  }
554
557
  else {
555
558
  return response;
@@ -561,14 +564,13 @@ function group(uuids, _a) {
561
564
  /**
562
565
  * Get info about group.
563
566
  */
564
- /* eslint @typescript-eslint/camelcase: [2, {allow: ["pub_key", "group_id"]}] */
565
567
  function groupInfo(id, _a) {
566
- var publicKey = _a.publicKey, _b = _a.baseURL, baseURL = _b === void 0 ? defaultSettings.baseURL : _b, signal = _a.signal, source = _a.source, integration = _a.integration, _c = _a.retryThrottledRequestMaxTimes, retryThrottledRequestMaxTimes = _c === void 0 ? defaultSettings.retryThrottledRequestMaxTimes : _c;
568
+ var publicKey = _a.publicKey, _b = _a.baseURL, baseURL = _b === void 0 ? defaultSettings.baseURL : _b, signal = _a.signal, source = _a.source, integration = _a.integration, userAgent = _a.userAgent, _c = _a.retryThrottledRequestMaxTimes, retryThrottledRequestMaxTimes = _c === void 0 ? defaultSettings.retryThrottledRequestMaxTimes : _c;
567
569
  return retryIfThrottled(function () {
568
570
  return request({
569
571
  method: 'GET',
570
572
  headers: {
571
- 'X-UC-User-Agent': getUserAgent({ publicKey: publicKey, integration: integration })
573
+ 'X-UC-User-Agent': getUserAgent({ publicKey: publicKey, integration: integration, userAgent: userAgent })
572
574
  },
573
575
  url: getUrl(baseURL, '/group/info/', {
574
576
  jsonerrors: 1,
@@ -581,7 +583,7 @@ function groupInfo(id, _a) {
581
583
  var data = _a.data, headers = _a.headers, request = _a.request;
582
584
  var response = camelizeKeys(JSON.parse(data));
583
585
  if ('error' in response) {
584
- throw new UploadClientError("[" + response.error.statusCode + "] " + response.error.content, request, response.error, headers);
586
+ throw new UploadClientError(response.error.content, response.error.errorCode, request, response, headers);
585
587
  }
586
588
  else {
587
589
  return response;
@@ -591,38 +593,30 @@ function groupInfo(id, _a) {
591
593
  }
592
594
 
593
595
  /**
594
- * Start multipart uploading.
596
+ * Returns a JSON dictionary holding file info.
595
597
  */
596
- function multipartStart(size, _a) {
597
- var publicKey = _a.publicKey, contentType = _a.contentType, fileName = _a.fileName, _b = _a.multipartChunkSize, multipartChunkSize = _b === void 0 ? defaultSettings.multipartChunkSize : _b, _c = _a.baseURL, baseURL = _c === void 0 ? '' : _c, secureSignature = _a.secureSignature, secureExpire = _a.secureExpire, store = _a.store, signal = _a.signal, _d = _a.source, source = _d === void 0 ? 'local' : _d, integration = _a.integration, _e = _a.retryThrottledRequestMaxTimes, retryThrottledRequestMaxTimes = _e === void 0 ? defaultSettings.retryThrottledRequestMaxTimes : _e;
598
+ function info(uuid, _a) {
599
+ var publicKey = _a.publicKey, _b = _a.baseURL, baseURL = _b === void 0 ? defaultSettings.baseURL : _b, signal = _a.signal, source = _a.source, integration = _a.integration, userAgent = _a.userAgent, _c = _a.retryThrottledRequestMaxTimes, retryThrottledRequestMaxTimes = _c === void 0 ? defaultSettings.retryThrottledRequestMaxTimes : _c;
598
600
  return retryIfThrottled(function () {
599
601
  return request({
600
- method: 'POST',
601
- url: getUrl(baseURL, '/multipart/start/', { jsonerrors: 1 }),
602
+ method: 'GET',
602
603
  headers: {
603
- 'X-UC-User-Agent': getUserAgent({ publicKey: publicKey, integration: integration })
604
+ 'X-UC-User-Agent': getUserAgent({ publicKey: publicKey, integration: integration, userAgent: userAgent })
604
605
  },
605
- data: buildFormData([
606
- ['filename', fileName !== null && fileName !== void 0 ? fileName : defaultFilename],
607
- ['size', size],
608
- ['content_type', contentType !== null && contentType !== void 0 ? contentType : defaultContentType],
609
- ['part_size', multipartChunkSize],
610
- ['UPLOADCARE_STORE', store ? '' : 'auto'],
611
- ['UPLOADCARE_PUB_KEY', publicKey],
612
- ['signature', secureSignature],
613
- ['expire', secureExpire],
614
- ['source', source]
615
- ]),
606
+ url: getUrl(baseURL, '/info/', {
607
+ jsonerrors: 1,
608
+ pub_key: publicKey,
609
+ file_id: uuid,
610
+ source: source
611
+ }),
616
612
  signal: signal
617
613
  }).then(function (_a) {
618
614
  var data = _a.data, headers = _a.headers, request = _a.request;
619
615
  var response = camelizeKeys(JSON.parse(data));
620
616
  if ('error' in response) {
621
- throw new UploadClientError("[" + response.error.statusCode + "] " + response.error.content, request, response.error, headers);
617
+ throw new UploadClientError(response.error.content, response.error.errorCode, request, response, headers);
622
618
  }
623
619
  else {
624
- // convert to array
625
- response.parts = Object.keys(response.parts).map(function (key) { return response.parts[key]; });
626
620
  return response;
627
621
  }
628
622
  });
@@ -630,20 +624,26 @@ function multipartStart(size, _a) {
630
624
  }
631
625
 
632
626
  /**
633
- * Complete multipart uploading.
627
+ * Start multipart uploading.
634
628
  */
635
- function multipartComplete(uuid, _a) {
636
- var publicKey = _a.publicKey, _b = _a.baseURL, baseURL = _b === void 0 ? defaultSettings.baseURL : _b, _c = _a.source, source = _c === void 0 ? 'local' : _c, signal = _a.signal, integration = _a.integration, _d = _a.retryThrottledRequestMaxTimes, retryThrottledRequestMaxTimes = _d === void 0 ? defaultSettings.retryThrottledRequestMaxTimes : _d;
629
+ function multipartStart(size, _a) {
630
+ var publicKey = _a.publicKey, contentType = _a.contentType, fileName = _a.fileName, _b = _a.multipartChunkSize, multipartChunkSize = _b === void 0 ? defaultSettings.multipartChunkSize : _b, _c = _a.baseURL, baseURL = _c === void 0 ? '' : _c, secureSignature = _a.secureSignature, secureExpire = _a.secureExpire, store = _a.store, signal = _a.signal, _d = _a.source, source = _d === void 0 ? 'local' : _d, integration = _a.integration, userAgent = _a.userAgent, _e = _a.retryThrottledRequestMaxTimes, retryThrottledRequestMaxTimes = _e === void 0 ? defaultSettings.retryThrottledRequestMaxTimes : _e;
637
631
  return retryIfThrottled(function () {
638
632
  return request({
639
633
  method: 'POST',
640
- url: getUrl(baseURL, '/multipart/complete/', { jsonerrors: 1 }),
634
+ url: getUrl(baseURL, '/multipart/start/', { jsonerrors: 1 }),
641
635
  headers: {
642
- 'X-UC-User-Agent': getUserAgent({ publicKey: publicKey, integration: integration })
636
+ 'X-UC-User-Agent': getUserAgent({ publicKey: publicKey, integration: integration, userAgent: userAgent })
643
637
  },
644
638
  data: buildFormData([
645
- ['uuid', uuid],
639
+ ['filename', fileName !== null && fileName !== void 0 ? fileName : defaultFilename],
640
+ ['size', size],
641
+ ['content_type', contentType !== null && contentType !== void 0 ? contentType : defaultContentType],
642
+ ['part_size', multipartChunkSize],
643
+ ['UPLOADCARE_STORE', store ? '' : 'auto'],
646
644
  ['UPLOADCARE_PUB_KEY', publicKey],
645
+ ['signature', secureSignature],
646
+ ['expire', secureExpire],
647
647
  ['source', source]
648
648
  ]),
649
649
  signal: signal
@@ -651,9 +651,11 @@ function multipartComplete(uuid, _a) {
651
651
  var data = _a.data, headers = _a.headers, request = _a.request;
652
652
  var response = camelizeKeys(JSON.parse(data));
653
653
  if ('error' in response) {
654
- throw new UploadClientError("[" + response.error.statusCode + "] " + response.error.content, request, response.error, headers);
654
+ throw new UploadClientError(response.error.content, response.error.errorCode, request, response, headers);
655
655
  }
656
656
  else {
657
+ // convert to array
658
+ response.parts = Object.keys(response.parts).map(function (key) { return response.parts[key]; });
657
659
  return response;
658
660
  }
659
661
  });
@@ -664,15 +666,10 @@ function multipartComplete(uuid, _a) {
664
666
  * Complete multipart uploading.
665
667
  */
666
668
  function multipartUpload(part, url, _a) {
667
- var publicKey = _a.publicKey, signal = _a.signal, onProgress = _a.onProgress, integration = _a.integration;
669
+ var signal = _a.signal, onProgress = _a.onProgress;
668
670
  return request({
669
671
  method: 'PUT',
670
672
  url: url,
671
- headers: {
672
- 'X-UC-User-Agent': publicKey
673
- ? getUserAgent({ publicKey: publicKey, integration: integration })
674
- : undefined
675
- },
676
673
  data: part,
677
674
  onProgress: onProgress,
678
675
  signal: signal
@@ -689,6 +686,37 @@ function multipartUpload(part, url, _a) {
689
686
  });
690
687
  }
691
688
 
689
+ /**
690
+ * Complete multipart uploading.
691
+ */
692
+ function multipartComplete(uuid, _a) {
693
+ var publicKey = _a.publicKey, _b = _a.baseURL, baseURL = _b === void 0 ? defaultSettings.baseURL : _b, _c = _a.source, source = _c === void 0 ? 'local' : _c, signal = _a.signal, integration = _a.integration, userAgent = _a.userAgent, _d = _a.retryThrottledRequestMaxTimes, retryThrottledRequestMaxTimes = _d === void 0 ? defaultSettings.retryThrottledRequestMaxTimes : _d;
694
+ return retryIfThrottled(function () {
695
+ return request({
696
+ method: 'POST',
697
+ url: getUrl(baseURL, '/multipart/complete/', { jsonerrors: 1 }),
698
+ headers: {
699
+ 'X-UC-User-Agent': getUserAgent({ publicKey: publicKey, integration: integration, userAgent: userAgent })
700
+ },
701
+ data: buildFormData([
702
+ ['uuid', uuid],
703
+ ['UPLOADCARE_PUB_KEY', publicKey],
704
+ ['source', source]
705
+ ]),
706
+ signal: signal
707
+ }).then(function (_a) {
708
+ var data = _a.data, headers = _a.headers, request = _a.request;
709
+ var response = camelizeKeys(JSON.parse(data));
710
+ if ('error' in response) {
711
+ throw new UploadClientError(response.error.content, response.error.errorCode, request, response, headers);
712
+ }
713
+ else {
714
+ return response;
715
+ }
716
+ });
717
+ }, retryThrottledRequestMaxTimes);
718
+ }
719
+
692
720
  var UploadcareFile = /** @class */ (function () {
693
721
  function UploadcareFile(fileInfo, _a) {
694
722
  var baseCDN = _a.baseCDN, defaultEffects = _a.defaultEffects, fileName = _a.fileName;
@@ -696,6 +724,7 @@ var UploadcareFile = /** @class */ (function () {
696
724
  this.size = null;
697
725
  this.isStored = null;
698
726
  this.isImage = null;
727
+ this.mimeType = null;
699
728
  this.cdnUrl = null;
700
729
  this.cdnUrlModifiers = null;
701
730
  this.originalUrl = null;
@@ -714,6 +743,7 @@ var UploadcareFile = /** @class */ (function () {
714
743
  this.size = fileInfo.size;
715
744
  this.isStored = fileInfo.isStored;
716
745
  this.isImage = fileInfo.isImage;
746
+ this.mimeType = fileInfo.mimeType;
717
747
  this.cdnUrl = cdnUrl;
718
748
  this.cdnUrlModifiers = cdnUrlModifiers;
719
749
  this.originalUrl = originalUrl;
@@ -755,7 +785,7 @@ var poll = function (_a) {
755
785
  };
756
786
 
757
787
  function isReadyPoll(_a) {
758
- var file = _a.file, publicKey = _a.publicKey, baseURL = _a.baseURL, source = _a.source, integration = _a.integration, retryThrottledRequestMaxTimes = _a.retryThrottledRequestMaxTimes, signal = _a.signal, onProgress = _a.onProgress;
788
+ var file = _a.file, publicKey = _a.publicKey, baseURL = _a.baseURL, source = _a.source, integration = _a.integration, userAgent = _a.userAgent, retryThrottledRequestMaxTimes = _a.retryThrottledRequestMaxTimes, signal = _a.signal, onProgress = _a.onProgress;
759
789
  return poll({
760
790
  check: function (signal) {
761
791
  return info(file, {
@@ -764,6 +794,7 @@ function isReadyPoll(_a) {
764
794
  signal: signal,
765
795
  source: source,
766
796
  integration: integration,
797
+ userAgent: userAgent,
767
798
  retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes
768
799
  }).then(function (response) {
769
800
  if (response.isReady) {
@@ -778,7 +809,7 @@ function isReadyPoll(_a) {
778
809
  }
779
810
 
780
811
  var uploadFromObject = function (file, _a) {
781
- var publicKey = _a.publicKey, fileName = _a.fileName, baseURL = _a.baseURL, secureSignature = _a.secureSignature, secureExpire = _a.secureExpire, store = _a.store, signal = _a.signal, onProgress = _a.onProgress, source = _a.source, integration = _a.integration, retryThrottledRequestMaxTimes = _a.retryThrottledRequestMaxTimes, baseCDN = _a.baseCDN;
812
+ var publicKey = _a.publicKey, fileName = _a.fileName, baseURL = _a.baseURL, secureSignature = _a.secureSignature, secureExpire = _a.secureExpire, store = _a.store, signal = _a.signal, onProgress = _a.onProgress, source = _a.source, integration = _a.integration, userAgent = _a.userAgent, retryThrottledRequestMaxTimes = _a.retryThrottledRequestMaxTimes, baseCDN = _a.baseCDN;
782
813
  return base(file, {
783
814
  publicKey: publicKey,
784
815
  fileName: fileName,
@@ -790,6 +821,7 @@ var uploadFromObject = function (file, _a) {
790
821
  onProgress: onProgress,
791
822
  source: source,
792
823
  integration: integration,
824
+ userAgent: userAgent,
793
825
  retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes
794
826
  })
795
827
  .then(function (_a) {
@@ -800,6 +832,7 @@ var uploadFromObject = function (file, _a) {
800
832
  baseURL: baseURL,
801
833
  source: source,
802
834
  integration: integration,
835
+ userAgent: userAgent,
803
836
  retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes,
804
837
  onProgress: onProgress,
805
838
  signal: signal
@@ -891,7 +924,7 @@ var Pusher = /** @class */ (function () {
891
924
  this.disconnectTimeoutId && clearTimeout(this.disconnectTimeoutId);
892
925
  if (!this.isConnected && !this.ws) {
893
926
  var pusherUrl = "wss://ws.pusherapp.com/app/" + this.key + "?protocol=5&client=js&version=1.12.2";
894
- this.ws = new WebSocket(pusherUrl);
927
+ this.ws = new WebSocket__default["default"](pusherUrl);
895
928
  this.ws.addEventListener('error', function (error) {
896
929
  _this.emmitter.emit('error', new Error(error.message));
897
930
  });
@@ -901,7 +934,7 @@ var Pusher = /** @class */ (function () {
901
934
  _this.queue = [];
902
935
  });
903
936
  this.ws.addEventListener('message', function (e) {
904
- var data = JSON.parse(e.data);
937
+ var data = JSON.parse(e.data.toString());
905
938
  switch (data.event) {
906
939
  case 'pusher:connection_established': {
907
940
  _this.emmitter.emit('connected', undefined);
@@ -997,19 +1030,20 @@ var preconnect = function (key) {
997
1030
  };
998
1031
 
999
1032
  function pollStrategy(_a) {
1000
- var token = _a.token, publicKey = _a.publicKey, baseURL = _a.baseURL, integration = _a.integration, retryThrottledRequestMaxTimes = _a.retryThrottledRequestMaxTimes, onProgress = _a.onProgress, signal = _a.signal;
1033
+ var token = _a.token, publicKey = _a.publicKey, baseURL = _a.baseURL, integration = _a.integration, userAgent = _a.userAgent, retryThrottledRequestMaxTimes = _a.retryThrottledRequestMaxTimes, onProgress = _a.onProgress, signal = _a.signal;
1001
1034
  return poll({
1002
1035
  check: function (signal) {
1003
1036
  return fromUrlStatus(token, {
1004
1037
  publicKey: publicKey,
1005
1038
  baseURL: baseURL,
1006
1039
  integration: integration,
1040
+ userAgent: userAgent,
1007
1041
  retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes,
1008
1042
  signal: signal
1009
1043
  }).then(function (response) {
1010
1044
  switch (response.status) {
1011
1045
  case Status.Error: {
1012
- return new UploadClientError(response.error);
1046
+ return new UploadClientError(response.error, response.errorCode);
1013
1047
  }
1014
1048
  case Status.Waiting: {
1015
1049
  return false;
@@ -1037,7 +1071,7 @@ function pollStrategy(_a) {
1037
1071
  });
1038
1072
  }
1039
1073
  var pushStrategy = function (_a) {
1040
- var token = _a.token, pusherKey = _a.pusherKey, signal = _a.signal, stopRace = _a.stopRace, onProgress = _a.onProgress;
1074
+ var token = _a.token, pusherKey = _a.pusherKey, signal = _a.signal, onProgress = _a.onProgress;
1041
1075
  return new Promise(function (resolve, reject) {
1042
1076
  var pusher = getPusher(pusherKey);
1043
1077
  var unsubErrorHandler = pusher.onError(reject);
@@ -1047,10 +1081,9 @@ var pushStrategy = function (_a) {
1047
1081
  };
1048
1082
  onCancel(signal, function () {
1049
1083
  destroy();
1050
- reject(cancelError('pisher cancelled'));
1084
+ reject(cancelError('pusher cancelled'));
1051
1085
  });
1052
1086
  pusher.subscribe(token, function (result) {
1053
- stopRace();
1054
1087
  switch (result.status) {
1055
1088
  case Status.Progress: {
1056
1089
  if (onProgress) {
@@ -1067,14 +1100,14 @@ var pushStrategy = function (_a) {
1067
1100
  }
1068
1101
  case Status.Error: {
1069
1102
  destroy();
1070
- reject(new UploadClientError(result.msg));
1103
+ reject(new UploadClientError(result.msg, result.error_code));
1071
1104
  }
1072
1105
  }
1073
1106
  });
1074
1107
  });
1075
1108
  };
1076
1109
  var uploadFromUrl = function (sourceUrl, _a) {
1077
- var publicKey = _a.publicKey, fileName = _a.fileName, baseURL = _a.baseURL, baseCDN = _a.baseCDN, checkForUrlDuplicates = _a.checkForUrlDuplicates, saveUrlForRecurrentUploads = _a.saveUrlForRecurrentUploads, secureSignature = _a.secureSignature, secureExpire = _a.secureExpire, store = _a.store, signal = _a.signal, onProgress = _a.onProgress, source = _a.source, integration = _a.integration, retryThrottledRequestMaxTimes = _a.retryThrottledRequestMaxTimes, _b = _a.pusherKey, pusherKey = _b === void 0 ? defaultSettings.pusherKey : _b;
1110
+ var publicKey = _a.publicKey, fileName = _a.fileName, baseURL = _a.baseURL, baseCDN = _a.baseCDN, checkForUrlDuplicates = _a.checkForUrlDuplicates, saveUrlForRecurrentUploads = _a.saveUrlForRecurrentUploads, secureSignature = _a.secureSignature, secureExpire = _a.secureExpire, store = _a.store, signal = _a.signal, onProgress = _a.onProgress, source = _a.source, integration = _a.integration, userAgent = _a.userAgent, retryThrottledRequestMaxTimes = _a.retryThrottledRequestMaxTimes, _b = _a.pusherKey, pusherKey = _b === void 0 ? defaultSettings.pusherKey : _b;
1078
1111
  return Promise.resolve(preconnect(pusherKey))
1079
1112
  .then(function () {
1080
1113
  return fromUrl(sourceUrl, {
@@ -1089,8 +1122,14 @@ var uploadFromUrl = function (sourceUrl, _a) {
1089
1122
  signal: signal,
1090
1123
  source: source,
1091
1124
  integration: integration,
1125
+ userAgent: userAgent,
1092
1126
  retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes
1093
1127
  });
1128
+ })
1129
+ .catch(function (error) {
1130
+ var pusher = getPusher(pusherKey);
1131
+ pusher === null || pusher === void 0 ? void 0 : pusher.disconnect();
1132
+ return Promise.reject(error);
1094
1133
  })
1095
1134
  .then(function (urlResponse) {
1096
1135
  if (urlResponse.type === TypeEnum.FileInfo) {
@@ -1105,17 +1144,17 @@ var uploadFromUrl = function (sourceUrl, _a) {
1105
1144
  publicKey: publicKey,
1106
1145
  baseURL: baseURL,
1107
1146
  integration: integration,
1147
+ userAgent: userAgent,
1108
1148
  retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes,
1109
1149
  onProgress: onProgress,
1110
1150
  signal: signal
1111
1151
  });
1112
1152
  },
1113
1153
  function (_a) {
1114
- var stopRace = _a.stopRace, signal = _a.signal;
1154
+ var signal = _a.signal;
1115
1155
  return pushStrategy({
1116
1156
  token: urlResponse.token,
1117
1157
  pusherKey: pusherKey,
1118
- stopRace: stopRace,
1119
1158
  signal: signal,
1120
1159
  onProgress: onProgress
1121
1160
  });
@@ -1134,6 +1173,7 @@ var uploadFromUrl = function (sourceUrl, _a) {
1134
1173
  publicKey: publicKey,
1135
1174
  baseURL: baseURL,
1136
1175
  integration: integration,
1176
+ userAgent: userAgent,
1137
1177
  retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes,
1138
1178
  onProgress: onProgress,
1139
1179
  signal: signal
@@ -1143,13 +1183,14 @@ var uploadFromUrl = function (sourceUrl, _a) {
1143
1183
  };
1144
1184
 
1145
1185
  var uploadFromUploaded = function (uuid, _a) {
1146
- var publicKey = _a.publicKey, fileName = _a.fileName, baseURL = _a.baseURL, signal = _a.signal, onProgress = _a.onProgress, source = _a.source, integration = _a.integration, retryThrottledRequestMaxTimes = _a.retryThrottledRequestMaxTimes, baseCDN = _a.baseCDN;
1186
+ var publicKey = _a.publicKey, fileName = _a.fileName, baseURL = _a.baseURL, signal = _a.signal, onProgress = _a.onProgress, source = _a.source, integration = _a.integration, userAgent = _a.userAgent, retryThrottledRequestMaxTimes = _a.retryThrottledRequestMaxTimes, baseCDN = _a.baseCDN;
1147
1187
  return info(uuid, {
1148
1188
  publicKey: publicKey,
1149
1189
  baseURL: baseURL,
1150
1190
  signal: signal,
1151
1191
  source: source,
1152
1192
  integration: integration,
1193
+ userAgent: userAgent,
1153
1194
  retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes
1154
1195
  })
1155
1196
  .then(function (fileInfo) { return new UploadcareFile(fileInfo, { baseCDN: baseCDN, fileName: fileName }); })
@@ -1203,6 +1244,18 @@ var isMultipart = function (fileSize, multipartMinFileSize) {
1203
1244
  return fileSize >= multipartMinFileSize;
1204
1245
  };
1205
1246
 
1247
+ var sliceChunk = function (file, index, fileSize, chunkSize) {
1248
+ var start = chunkSize * index;
1249
+ var end = Math.min(start + chunkSize, fileSize);
1250
+ return file.slice(start, end);
1251
+ };
1252
+
1253
+ function prepareChunks(file, fileSize, chunkSize) {
1254
+ return function (index) {
1255
+ return sliceChunk(file, index, fileSize, chunkSize);
1256
+ };
1257
+ }
1258
+
1206
1259
  var runWithConcurrency = function (concurrency, tasks) {
1207
1260
  return new Promise(function (resolve, reject) {
1208
1261
  var results = [];
@@ -1238,11 +1291,6 @@ var runWithConcurrency = function (concurrency, tasks) {
1238
1291
  });
1239
1292
  };
1240
1293
 
1241
- var getChunk = function (file, index, fileSize, chunkSize) {
1242
- var start = chunkSize * index;
1243
- var end = Math.min(start + chunkSize, fileSize);
1244
- return file.slice(start, end);
1245
- };
1246
1294
  var uploadPartWithRetry = function (chunk, url, _a) {
1247
1295
  var publicKey = _a.publicKey, onProgress = _a.onProgress, signal = _a.signal, integration = _a.integration, multipartMaxAttempts = _a.multipartMaxAttempts;
1248
1296
  return retrier(function (_a) {
@@ -1261,7 +1309,7 @@ var uploadPartWithRetry = function (chunk, url, _a) {
1261
1309
  });
1262
1310
  };
1263
1311
  var uploadMultipart = function (file, _a) {
1264
- var publicKey = _a.publicKey, fileName = _a.fileName, fileSize = _a.fileSize, baseURL = _a.baseURL, secureSignature = _a.secureSignature, secureExpire = _a.secureExpire, store = _a.store, signal = _a.signal, onProgress = _a.onProgress, source = _a.source, integration = _a.integration, retryThrottledRequestMaxTimes = _a.retryThrottledRequestMaxTimes, contentType = _a.contentType, _b = _a.multipartChunkSize, multipartChunkSize = _b === void 0 ? defaultSettings.multipartChunkSize : _b, _c = _a.maxConcurrentRequests, maxConcurrentRequests = _c === void 0 ? defaultSettings.maxConcurrentRequests : _c, _d = _a.multipartMaxAttempts, multipartMaxAttempts = _d === void 0 ? defaultSettings.multipartMaxAttempts : _d, baseCDN = _a.baseCDN;
1312
+ var publicKey = _a.publicKey, fileName = _a.fileName, fileSize = _a.fileSize, baseURL = _a.baseURL, secureSignature = _a.secureSignature, secureExpire = _a.secureExpire, store = _a.store, signal = _a.signal, onProgress = _a.onProgress, source = _a.source, integration = _a.integration, userAgent = _a.userAgent, retryThrottledRequestMaxTimes = _a.retryThrottledRequestMaxTimes, contentType = _a.contentType, _b = _a.multipartChunkSize, multipartChunkSize = _b === void 0 ? defaultSettings.multipartChunkSize : _b, _c = _a.maxConcurrentRequests, maxConcurrentRequests = _c === void 0 ? defaultSettings.maxConcurrentRequests : _c, _d = _a.multipartMaxAttempts, multipartMaxAttempts = _d === void 0 ? defaultSettings.multipartMaxAttempts : _d, baseCDN = _a.baseCDN;
1265
1313
  var size = fileSize || getFileSize(file);
1266
1314
  var progressValues;
1267
1315
  var createProgressHandler = function (size, index) {
@@ -1290,14 +1338,16 @@ var uploadMultipart = function (file, _a) {
1290
1338
  signal: signal,
1291
1339
  source: source,
1292
1340
  integration: integration,
1341
+ userAgent: userAgent,
1293
1342
  retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes
1294
1343
  })
1295
1344
  .then(function (_a) {
1296
1345
  var uuid = _a.uuid, parts = _a.parts;
1346
+ var getChunk = prepareChunks(file, size, multipartChunkSize);
1297
1347
  return Promise.all([
1298
1348
  uuid,
1299
1349
  runWithConcurrency(maxConcurrentRequests, parts.map(function (url, index) { return function () {
1300
- return uploadPartWithRetry(getChunk(file, index, size, multipartChunkSize), url, {
1350
+ return uploadPartWithRetry(getChunk(index), url, {
1301
1351
  publicKey: publicKey,
1302
1352
  onProgress: createProgressHandler(parts.length, index),
1303
1353
  signal: signal,
@@ -1314,6 +1364,7 @@ var uploadMultipart = function (file, _a) {
1314
1364
  baseURL: baseURL,
1315
1365
  source: source,
1316
1366
  integration: integration,
1367
+ userAgent: userAgent,
1317
1368
  retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes
1318
1369
  });
1319
1370
  })
@@ -1328,6 +1379,7 @@ var uploadMultipart = function (file, _a) {
1328
1379
  baseURL: baseURL,
1329
1380
  source: source,
1330
1381
  integration: integration,
1382
+ userAgent: userAgent,
1331
1383
  retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes,
1332
1384
  onProgress: onProgress,
1333
1385
  signal: signal
@@ -1341,7 +1393,7 @@ var uploadMultipart = function (file, _a) {
1341
1393
  * Uploads file from provided data.
1342
1394
  */
1343
1395
  function uploadFile(data, _a) {
1344
- var publicKey = _a.publicKey, fileName = _a.fileName, _b = _a.baseURL, baseURL = _b === void 0 ? defaultSettings.baseURL : _b, secureSignature = _a.secureSignature, secureExpire = _a.secureExpire, store = _a.store, signal = _a.signal, onProgress = _a.onProgress, source = _a.source, integration = _a.integration, retryThrottledRequestMaxTimes = _a.retryThrottledRequestMaxTimes, contentType = _a.contentType, _c = _a.multipartChunkSize, multipartChunkSize = _c === void 0 ? defaultSettings.multipartChunkSize : _c, _d = _a.baseCDN, baseCDN = _d === void 0 ? defaultSettings.baseCDN : _d;
1396
+ var publicKey = _a.publicKey, fileName = _a.fileName, _b = _a.baseURL, baseURL = _b === void 0 ? defaultSettings.baseURL : _b, secureSignature = _a.secureSignature, secureExpire = _a.secureExpire, store = _a.store, signal = _a.signal, onProgress = _a.onProgress, source = _a.source, integration = _a.integration, userAgent = _a.userAgent, retryThrottledRequestMaxTimes = _a.retryThrottledRequestMaxTimes, contentType = _a.contentType, multipartChunkSize = _a.multipartChunkSize, multipartMaxAttempts = _a.multipartMaxAttempts, maxConcurrentRequests = _a.maxConcurrentRequests, _c = _a.baseCDN, baseCDN = _c === void 0 ? defaultSettings.baseCDN : _c, checkForUrlDuplicates = _a.checkForUrlDuplicates, saveUrlForRecurrentUploads = _a.saveUrlForRecurrentUploads, pusherKey = _a.pusherKey;
1345
1397
  if (isFileData(data)) {
1346
1398
  var fileSize = getFileSize(data);
1347
1399
  if (isMultipart(fileSize)) {
@@ -1349,6 +1401,7 @@ function uploadFile(data, _a) {
1349
1401
  publicKey: publicKey,
1350
1402
  contentType: contentType,
1351
1403
  multipartChunkSize: multipartChunkSize,
1404
+ multipartMaxAttempts: multipartMaxAttempts,
1352
1405
  fileName: fileName,
1353
1406
  baseURL: baseURL,
1354
1407
  secureSignature: secureSignature,
@@ -1358,6 +1411,8 @@ function uploadFile(data, _a) {
1358
1411
  onProgress: onProgress,
1359
1412
  source: source,
1360
1413
  integration: integration,
1414
+ userAgent: userAgent,
1415
+ maxConcurrentRequests: maxConcurrentRequests,
1361
1416
  retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes,
1362
1417
  baseCDN: baseCDN
1363
1418
  });
@@ -1373,6 +1428,7 @@ function uploadFile(data, _a) {
1373
1428
  onProgress: onProgress,
1374
1429
  source: source,
1375
1430
  integration: integration,
1431
+ userAgent: userAgent,
1376
1432
  retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes,
1377
1433
  baseCDN: baseCDN
1378
1434
  });
@@ -1382,6 +1438,9 @@ function uploadFile(data, _a) {
1382
1438
  publicKey: publicKey,
1383
1439
  fileName: fileName,
1384
1440
  baseURL: baseURL,
1441
+ baseCDN: baseCDN,
1442
+ checkForUrlDuplicates: checkForUrlDuplicates,
1443
+ saveUrlForRecurrentUploads: saveUrlForRecurrentUploads,
1385
1444
  secureSignature: secureSignature,
1386
1445
  secureExpire: secureExpire,
1387
1446
  store: store,
@@ -1389,8 +1448,9 @@ function uploadFile(data, _a) {
1389
1448
  onProgress: onProgress,
1390
1449
  source: source,
1391
1450
  integration: integration,
1451
+ userAgent: userAgent,
1392
1452
  retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes,
1393
- baseCDN: baseCDN
1453
+ pusherKey: pusherKey
1394
1454
  });
1395
1455
  }
1396
1456
  if (isUuid(data)) {
@@ -1402,6 +1462,7 @@ function uploadFile(data, _a) {
1402
1462
  onProgress: onProgress,
1403
1463
  source: source,
1404
1464
  integration: integration,
1465
+ userAgent: userAgent,
1405
1466
  retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes,
1406
1467
  baseCDN: baseCDN
1407
1468
  });
@@ -1416,8 +1477,7 @@ var UploadcareGroup = /** @class */ (function () {
1416
1477
  this.filesCount = groupInfo.filesCount;
1417
1478
  this.totalSize = Object.values(groupInfo.files).reduce(function (acc, file) { return acc + file.size; }, 0);
1418
1479
  this.isStored = !!groupInfo.datetimeStored;
1419
- this.isImage = !!Object.values(groupInfo.files).filter(function (file) { return file.isImage; })
1420
- .length;
1480
+ this.isImage = !!Object.values(groupInfo.files).filter(function (file) { return file.isImage; }).length;
1421
1481
  this.cdnUrl = groupInfo.cdnUrl;
1422
1482
  this.files = files;
1423
1483
  this.createdAt = groupInfo.datetimeCreated;
@@ -1464,7 +1524,7 @@ var isUrlArray = function (data) {
1464
1524
  };
1465
1525
 
1466
1526
  function uploadFileGroup(data, _a) {
1467
- var publicKey = _a.publicKey, fileName = _a.fileName, _b = _a.baseURL, baseURL = _b === void 0 ? defaultSettings.baseURL : _b, secureSignature = _a.secureSignature, secureExpire = _a.secureExpire, store = _a.store, signal = _a.signal, onProgress = _a.onProgress, source = _a.source, integration = _a.integration, retryThrottledRequestMaxTimes = _a.retryThrottledRequestMaxTimes, contentType = _a.contentType, _c = _a.multipartChunkSize, multipartChunkSize = _c === void 0 ? defaultSettings.multipartChunkSize : _c, _d = _a.baseCDN, baseCDN = _d === void 0 ? defaultSettings.baseCDN : _d, jsonpCallback = _a.jsonpCallback, defaultEffects = _a.defaultEffects;
1527
+ var publicKey = _a.publicKey, fileName = _a.fileName, _b = _a.baseURL, baseURL = _b === void 0 ? defaultSettings.baseURL : _b, secureSignature = _a.secureSignature, secureExpire = _a.secureExpire, store = _a.store, signal = _a.signal, onProgress = _a.onProgress, source = _a.source, integration = _a.integration, userAgent = _a.userAgent, retryThrottledRequestMaxTimes = _a.retryThrottledRequestMaxTimes, contentType = _a.contentType, _c = _a.multipartChunkSize, multipartChunkSize = _c === void 0 ? defaultSettings.multipartChunkSize : _c, _d = _a.baseCDN, baseCDN = _d === void 0 ? defaultSettings.baseCDN : _d, jsonpCallback = _a.jsonpCallback, defaultEffects = _a.defaultEffects;
1468
1528
  if (!isFileDataArray(data) && !isUrlArray(data) && !isUuidArray(data)) {
1469
1529
  throw new TypeError("Group uploading from \"" + data + "\" is not supported");
1470
1530
  }
@@ -1497,6 +1557,7 @@ function uploadFileGroup(data, _a) {
1497
1557
  onProgress: createProgressHandler(filesCount, index),
1498
1558
  source: source,
1499
1559
  integration: integration,
1560
+ userAgent: userAgent,
1500
1561
  retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes,
1501
1562
  contentType: contentType,
1502
1563
  multipartChunkSize: multipartChunkSize,
@@ -1520,6 +1581,7 @@ function uploadFileGroup(data, _a) {
1520
1581
  signal: signal,
1521
1582
  source: source,
1522
1583
  integration: integration,
1584
+ userAgent: userAgent,
1523
1585
  retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes
1524
1586
  }).then(function (groupInfo) { return new UploadcareGroup(groupInfo, filesInGroup); });
1525
1587
  });
@@ -1588,9 +1650,7 @@ var UploadClient = /** @class */ (function () {
1588
1650
 
1589
1651
  Object.defineProperty(exports, 'AbortController', {
1590
1652
  enumerable: true,
1591
- get: function () {
1592
- return abortController.AbortController;
1593
- }
1653
+ get: function () { return abortController.AbortController; }
1594
1654
  });
1595
1655
  exports.UploadClient = UploadClient;
1596
1656
  exports.base = base;
@@ -1602,5 +1662,9 @@ exports.info = info;
1602
1662
  exports.multipartComplete = multipartComplete;
1603
1663
  exports.multipartStart = multipartStart;
1604
1664
  exports.multipartUpload = multipartUpload;
1665
+ exports.uploadBase = uploadFromObject;
1605
1666
  exports.uploadFile = uploadFile;
1606
1667
  exports.uploadFileGroup = uploadFileGroup;
1668
+ exports.uploadFromUploaded = uploadFromUploaded;
1669
+ exports.uploadFromUrl = uploadFromUrl;
1670
+ exports.uploadMultipart = uploadMultipart;