@uploadcare/upload-client 2.0.0-alpha.7 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -2,16 +2,21 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
6
-
7
5
  var http = require('http');
8
6
  var https = require('https');
9
7
  var url = require('url');
10
8
  var stream = require('stream');
11
- var NodeFormData = _interopDefault(require('form-data'));
9
+ var NodeFormData = require('form-data');
12
10
  var abortController = require('abort-controller');
13
11
  var WebSocket = require('ws');
14
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
+
15
20
  /*! *****************************************************************************
16
21
  Copyright (c) Microsoft Corporation. All rights reserved.
17
22
  Licensed under the Apache License, Version 2.0 (the "License"); you may not use
@@ -62,10 +67,11 @@ function __spreadArrays() {
62
67
 
63
68
  var UploadClientError = /** @class */ (function (_super) {
64
69
  __extends(UploadClientError, _super);
65
- function UploadClientError(message, request, response, headers) {
70
+ function UploadClientError(message, code, request, response, headers) {
66
71
  var _this = _super.call(this) || this;
67
72
  _this.name = 'UploadClientError';
68
73
  _this.message = message;
74
+ _this.code = code;
69
75
  _this.request = request;
70
76
  _this.response = response;
71
77
  _this.headers = headers;
@@ -158,8 +164,8 @@ var request = function (params) {
158
164
  length || data.length;
159
165
  }
160
166
  var req = options.protocol !== 'https:'
161
- ? http.request(options)
162
- : https.request(options);
167
+ ? http__default["default"].request(options)
168
+ : https__default["default"].request(options);
163
169
  onCancel(signal, function () {
164
170
  aborted = true;
165
171
  req.abort();
@@ -202,20 +208,27 @@ var request = function (params) {
202
208
  });
203
209
  };
204
210
 
205
- 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"](); });
206
217
 
218
+ var isFileTuple = function (tuple) {
219
+ return tuple[0] === 'file';
220
+ };
207
221
  function buildFormData(body) {
208
222
  var formData = getFormData();
209
- var isTriple = function (tuple) {
210
- return tuple[0] === 'file';
211
- };
212
223
  var _loop_1 = function (tuple) {
213
224
  if (Array.isArray(tuple[1])) {
214
225
  // refactor this
215
226
  tuple[1].forEach(function (val) { return val && formData.append(tuple[0] + '[]', "" + val); });
216
227
  }
217
- else if (isTriple(tuple)) {
218
- 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);
219
232
  }
220
233
  else if (tuple[1] != null) {
221
234
  formData.append(tuple[0], "" + tuple[1]);
@@ -273,16 +286,33 @@ var defaultSettings = {
273
286
  var defaultContentType = 'application/octet-stream';
274
287
  var defaultFilename = 'original';
275
288
 
276
- var version = '1.1.2';
289
+ var version = '2.1.0';
277
290
 
278
291
  /**
279
292
  * Returns User Agent based on version and settings.
280
293
  */
281
294
  function getUserAgent(_a) {
282
- var _b = _a === void 0 ? {} : _a, _c = _b.publicKey, publicKey = _c === void 0 ? '' : _c, _d = _b.integration, integration = _d === void 0 ? '' : _d;
283
- var mainInfo = [version, publicKey].filter(Boolean).join('/');
284
- var additionInfo = ['JavaScript', integration].filter(Boolean).join('; ');
285
- 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 + ")";
286
316
  }
287
317
 
288
318
  var SEPARATOR = /\W|_/g;
@@ -345,7 +375,7 @@ function retrier(fn, options) {
345
375
  return runAttempt(fn);
346
376
  }
347
377
 
348
- var REQUEST_WAS_THROTTLED_CODE = 429;
378
+ var REQUEST_WAS_THROTTLED_CODE = 'RequestThrottledError';
349
379
  var DEFAULT_RETRY_AFTER_TIMEOUT = 15000;
350
380
  function getTimeoutFromThrottledRequest(error) {
351
381
  var headers = (error || {}).headers;
@@ -357,9 +387,8 @@ function retryIfThrottled(fn, retryThrottledMaxTimes) {
357
387
  return retrier(function (_a) {
358
388
  var attempt = _a.attempt, retry = _a.retry;
359
389
  return fn().catch(function (error) {
360
- var _a;
361
390
  if ('response' in error &&
362
- ((_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 &&
363
392
  attempt < retryThrottledMaxTimes) {
364
393
  return retry(getTimeoutFromThrottledRequest(error));
365
394
  }
@@ -373,7 +402,7 @@ function retryIfThrottled(fn, retryThrottledMaxTimes) {
373
402
  * Can be canceled and has progress.
374
403
  */
375
404
  function base(file, _a) {
376
- 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;
377
406
  return retryIfThrottled(function () {
378
407
  var _a;
379
408
  return request({
@@ -382,7 +411,7 @@ function base(file, _a) {
382
411
  jsonerrors: 1
383
412
  }),
384
413
  headers: {
385
- 'X-UC-User-Agent': getUserAgent({ publicKey: publicKey, integration: integration })
414
+ 'X-UC-User-Agent': getUserAgent({ publicKey: publicKey, integration: integration, userAgent: userAgent })
386
415
  },
387
416
  data: buildFormData([
388
417
  ['file', file, (_a = fileName !== null && fileName !== void 0 ? fileName : file.name) !== null && _a !== void 0 ? _a : defaultFilename],
@@ -401,7 +430,7 @@ function base(file, _a) {
401
430
  var data = _a.data, headers = _a.headers, request = _a.request;
402
431
  var response = camelizeKeys(JSON.parse(data));
403
432
  if ('error' in response) {
404
- 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);
405
434
  }
406
435
  else {
407
436
  return response;
@@ -418,14 +447,13 @@ var TypeEnum;
418
447
  /**
419
448
  * Uploading files from URL.
420
449
  */
421
- /* eslint @typescript-eslint/camelcase: [2, {allow: ["pub_key", "source_url", "check_URL_duplicates", "save_URL_duplicates"]}] */
422
450
  function fromUrl(sourceUrl, _a) {
423
- 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;
424
452
  return retryIfThrottled(function () {
425
453
  return request({
426
454
  method: 'POST',
427
455
  headers: {
428
- 'X-UC-User-Agent': getUserAgent({ publicKey: publicKey, integration: integration })
456
+ 'X-UC-User-Agent': getUserAgent({ publicKey: publicKey, integration: integration, userAgent: userAgent })
429
457
  },
430
458
  url: getUrl(baseURL, '/from_url/', {
431
459
  jsonerrors: 1,
@@ -444,7 +472,7 @@ function fromUrl(sourceUrl, _a) {
444
472
  var data = _a.data, headers = _a.headers, request = _a.request;
445
473
  var response = camelizeKeys(JSON.parse(data));
446
474
  if ('error' in response) {
447
- 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);
448
476
  }
449
477
  else {
450
478
  return response;
@@ -468,12 +496,18 @@ var isErrorResponse = function (response) {
468
496
  * Checking upload status and working with file tokens.
469
497
  */
470
498
  function fromUrlStatus(token, _a) {
471
- 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;
472
500
  return retryIfThrottled(function () {
473
501
  return request({
474
502
  method: 'GET',
475
503
  headers: publicKey
476
- ? { '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
+ }
477
511
  : undefined,
478
512
  url: getUrl(baseURL, '/from_url/status/', {
479
513
  jsonerrors: 1,
@@ -484,7 +518,7 @@ function fromUrlStatus(token, _a) {
484
518
  var data = _a.data, headers = _a.headers, request = _a.request;
485
519
  var response = camelizeKeys(JSON.parse(data));
486
520
  if ('error' in response && !isErrorResponse(response)) {
487
- throw new UploadClientError("[" + response.error.statusCode + "] " + response.error.content, request, response.error, headers);
521
+ throw new UploadClientError(response.error.content, undefined, request, response, headers);
488
522
  }
489
523
  else {
490
524
  return response;
@@ -496,14 +530,13 @@ function fromUrlStatus(token, _a) {
496
530
  /**
497
531
  * Create files group.
498
532
  */
499
- /* eslint @typescript-eslint/camelcase: [2, {allow: ["pub_key"]}] */
500
533
  function group(uuids, _a) {
501
- 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;
502
535
  return retryIfThrottled(function () {
503
536
  return request({
504
537
  method: 'POST',
505
538
  headers: {
506
- 'X-UC-User-Agent': getUserAgent({ publicKey: publicKey, integration: integration })
539
+ 'X-UC-User-Agent': getUserAgent({ publicKey: publicKey, integration: integration, userAgent: userAgent })
507
540
  },
508
541
  url: getUrl(baseURL, '/group/', {
509
542
  jsonerrors: 1,
@@ -519,7 +552,7 @@ function group(uuids, _a) {
519
552
  var data = _a.data, headers = _a.headers, request = _a.request;
520
553
  var response = camelizeKeys(JSON.parse(data));
521
554
  if ('error' in response) {
522
- 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);
523
556
  }
524
557
  else {
525
558
  return response;
@@ -531,14 +564,13 @@ function group(uuids, _a) {
531
564
  /**
532
565
  * Get info about group.
533
566
  */
534
- /* eslint @typescript-eslint/camelcase: [2, {allow: ["pub_key", "group_id"]}] */
535
567
  function groupInfo(id, _a) {
536
- 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;
537
569
  return retryIfThrottled(function () {
538
570
  return request({
539
571
  method: 'GET',
540
572
  headers: {
541
- 'X-UC-User-Agent': getUserAgent({ publicKey: publicKey, integration: integration })
573
+ 'X-UC-User-Agent': getUserAgent({ publicKey: publicKey, integration: integration, userAgent: userAgent })
542
574
  },
543
575
  url: getUrl(baseURL, '/group/info/', {
544
576
  jsonerrors: 1,
@@ -551,7 +583,7 @@ function groupInfo(id, _a) {
551
583
  var data = _a.data, headers = _a.headers, request = _a.request;
552
584
  var response = camelizeKeys(JSON.parse(data));
553
585
  if ('error' in response) {
554
- 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);
555
587
  }
556
588
  else {
557
589
  return response;
@@ -563,14 +595,13 @@ function groupInfo(id, _a) {
563
595
  /**
564
596
  * Returns a JSON dictionary holding file info.
565
597
  */
566
- /* eslint @typescript-eslint/camelcase: [2, {allow: ["pub_key", "file_id"]}] */
567
598
  function info(uuid, _a) {
568
- 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;
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;
569
600
  return retryIfThrottled(function () {
570
601
  return request({
571
602
  method: 'GET',
572
603
  headers: {
573
- 'X-UC-User-Agent': getUserAgent({ publicKey: publicKey, integration: integration })
604
+ 'X-UC-User-Agent': getUserAgent({ publicKey: publicKey, integration: integration, userAgent: userAgent })
574
605
  },
575
606
  url: getUrl(baseURL, '/info/', {
576
607
  jsonerrors: 1,
@@ -583,7 +614,7 @@ function info(uuid, _a) {
583
614
  var data = _a.data, headers = _a.headers, request = _a.request;
584
615
  var response = camelizeKeys(JSON.parse(data));
585
616
  if ('error' in response) {
586
- 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);
587
618
  }
588
619
  else {
589
620
  return response;
@@ -596,13 +627,13 @@ function info(uuid, _a) {
596
627
  * Start multipart uploading.
597
628
  */
598
629
  function multipartStart(size, _a) {
599
- 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;
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;
600
631
  return retryIfThrottled(function () {
601
632
  return request({
602
633
  method: 'POST',
603
634
  url: getUrl(baseURL, '/multipart/start/', { jsonerrors: 1 }),
604
635
  headers: {
605
- 'X-UC-User-Agent': getUserAgent({ publicKey: publicKey, integration: integration })
636
+ 'X-UC-User-Agent': getUserAgent({ publicKey: publicKey, integration: integration, userAgent: userAgent })
606
637
  },
607
638
  data: buildFormData([
608
639
  ['filename', fileName !== null && fileName !== void 0 ? fileName : defaultFilename],
@@ -620,7 +651,7 @@ function multipartStart(size, _a) {
620
651
  var data = _a.data, headers = _a.headers, request = _a.request;
621
652
  var response = camelizeKeys(JSON.parse(data));
622
653
  if ('error' in response) {
623
- 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);
624
655
  }
625
656
  else {
626
657
  // convert to array
@@ -635,15 +666,10 @@ function multipartStart(size, _a) {
635
666
  * Complete multipart uploading.
636
667
  */
637
668
  function multipartUpload(part, url, _a) {
638
- var publicKey = _a.publicKey, signal = _a.signal, onProgress = _a.onProgress, integration = _a.integration;
669
+ var signal = _a.signal, onProgress = _a.onProgress;
639
670
  return request({
640
671
  method: 'PUT',
641
672
  url: url,
642
- headers: {
643
- 'X-UC-User-Agent': publicKey
644
- ? getUserAgent({ publicKey: publicKey, integration: integration })
645
- : undefined
646
- },
647
673
  data: part,
648
674
  onProgress: onProgress,
649
675
  signal: signal
@@ -664,13 +690,13 @@ function multipartUpload(part, url, _a) {
664
690
  * Complete multipart uploading.
665
691
  */
666
692
  function multipartComplete(uuid, _a) {
667
- 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;
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;
668
694
  return retryIfThrottled(function () {
669
695
  return request({
670
696
  method: 'POST',
671
697
  url: getUrl(baseURL, '/multipart/complete/', { jsonerrors: 1 }),
672
698
  headers: {
673
- 'X-UC-User-Agent': getUserAgent({ publicKey: publicKey, integration: integration })
699
+ 'X-UC-User-Agent': getUserAgent({ publicKey: publicKey, integration: integration, userAgent: userAgent })
674
700
  },
675
701
  data: buildFormData([
676
702
  ['uuid', uuid],
@@ -682,7 +708,7 @@ function multipartComplete(uuid, _a) {
682
708
  var data = _a.data, headers = _a.headers, request = _a.request;
683
709
  var response = camelizeKeys(JSON.parse(data));
684
710
  if ('error' in response) {
685
- throw new UploadClientError("[" + response.error.statusCode + "] " + response.error.content, request, response.error, headers);
711
+ throw new UploadClientError(response.error.content, response.error.errorCode, request, response, headers);
686
712
  }
687
713
  else {
688
714
  return response;
@@ -698,6 +724,7 @@ var UploadcareFile = /** @class */ (function () {
698
724
  this.size = null;
699
725
  this.isStored = null;
700
726
  this.isImage = null;
727
+ this.mimeType = null;
701
728
  this.cdnUrl = null;
702
729
  this.cdnUrlModifiers = null;
703
730
  this.originalUrl = null;
@@ -716,6 +743,7 @@ var UploadcareFile = /** @class */ (function () {
716
743
  this.size = fileInfo.size;
717
744
  this.isStored = fileInfo.isStored;
718
745
  this.isImage = fileInfo.isImage;
746
+ this.mimeType = fileInfo.mimeType;
719
747
  this.cdnUrl = cdnUrl;
720
748
  this.cdnUrlModifiers = cdnUrlModifiers;
721
749
  this.originalUrl = originalUrl;
@@ -757,7 +785,7 @@ var poll = function (_a) {
757
785
  };
758
786
 
759
787
  function isReadyPoll(_a) {
760
- 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;
761
789
  return poll({
762
790
  check: function (signal) {
763
791
  return info(file, {
@@ -766,6 +794,7 @@ function isReadyPoll(_a) {
766
794
  signal: signal,
767
795
  source: source,
768
796
  integration: integration,
797
+ userAgent: userAgent,
769
798
  retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes
770
799
  }).then(function (response) {
771
800
  if (response.isReady) {
@@ -780,7 +809,7 @@ function isReadyPoll(_a) {
780
809
  }
781
810
 
782
811
  var uploadFromObject = function (file, _a) {
783
- 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;
784
813
  return base(file, {
785
814
  publicKey: publicKey,
786
815
  fileName: fileName,
@@ -792,6 +821,7 @@ var uploadFromObject = function (file, _a) {
792
821
  onProgress: onProgress,
793
822
  source: source,
794
823
  integration: integration,
824
+ userAgent: userAgent,
795
825
  retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes
796
826
  })
797
827
  .then(function (_a) {
@@ -802,6 +832,7 @@ var uploadFromObject = function (file, _a) {
802
832
  baseURL: baseURL,
803
833
  source: source,
804
834
  integration: integration,
835
+ userAgent: userAgent,
805
836
  retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes,
806
837
  onProgress: onProgress,
807
838
  signal: signal
@@ -893,7 +924,7 @@ var Pusher = /** @class */ (function () {
893
924
  this.disconnectTimeoutId && clearTimeout(this.disconnectTimeoutId);
894
925
  if (!this.isConnected && !this.ws) {
895
926
  var pusherUrl = "wss://ws.pusherapp.com/app/" + this.key + "?protocol=5&client=js&version=1.12.2";
896
- this.ws = new WebSocket(pusherUrl);
927
+ this.ws = new WebSocket__default["default"](pusherUrl);
897
928
  this.ws.addEventListener('error', function (error) {
898
929
  _this.emmitter.emit('error', new Error(error.message));
899
930
  });
@@ -903,7 +934,7 @@ var Pusher = /** @class */ (function () {
903
934
  _this.queue = [];
904
935
  });
905
936
  this.ws.addEventListener('message', function (e) {
906
- var data = JSON.parse(e.data);
937
+ var data = JSON.parse(e.data.toString());
907
938
  switch (data.event) {
908
939
  case 'pusher:connection_established': {
909
940
  _this.emmitter.emit('connected', undefined);
@@ -999,19 +1030,20 @@ var preconnect = function (key) {
999
1030
  };
1000
1031
 
1001
1032
  function pollStrategy(_a) {
1002
- 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;
1003
1034
  return poll({
1004
1035
  check: function (signal) {
1005
1036
  return fromUrlStatus(token, {
1006
1037
  publicKey: publicKey,
1007
1038
  baseURL: baseURL,
1008
1039
  integration: integration,
1040
+ userAgent: userAgent,
1009
1041
  retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes,
1010
1042
  signal: signal
1011
1043
  }).then(function (response) {
1012
1044
  switch (response.status) {
1013
1045
  case Status.Error: {
1014
- return new UploadClientError(response.error);
1046
+ return new UploadClientError(response.error, response.errorCode);
1015
1047
  }
1016
1048
  case Status.Waiting: {
1017
1049
  return false;
@@ -1039,7 +1071,7 @@ function pollStrategy(_a) {
1039
1071
  });
1040
1072
  }
1041
1073
  var pushStrategy = function (_a) {
1042
- 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;
1043
1075
  return new Promise(function (resolve, reject) {
1044
1076
  var pusher = getPusher(pusherKey);
1045
1077
  var unsubErrorHandler = pusher.onError(reject);
@@ -1049,10 +1081,9 @@ var pushStrategy = function (_a) {
1049
1081
  };
1050
1082
  onCancel(signal, function () {
1051
1083
  destroy();
1052
- reject(cancelError('pisher cancelled'));
1084
+ reject(cancelError('pusher cancelled'));
1053
1085
  });
1054
1086
  pusher.subscribe(token, function (result) {
1055
- stopRace();
1056
1087
  switch (result.status) {
1057
1088
  case Status.Progress: {
1058
1089
  if (onProgress) {
@@ -1069,14 +1100,14 @@ var pushStrategy = function (_a) {
1069
1100
  }
1070
1101
  case Status.Error: {
1071
1102
  destroy();
1072
- reject(new UploadClientError(result.msg));
1103
+ reject(new UploadClientError(result.msg, result.error_code));
1073
1104
  }
1074
1105
  }
1075
1106
  });
1076
1107
  });
1077
1108
  };
1078
1109
  var uploadFromUrl = function (sourceUrl, _a) {
1079
- 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;
1080
1111
  return Promise.resolve(preconnect(pusherKey))
1081
1112
  .then(function () {
1082
1113
  return fromUrl(sourceUrl, {
@@ -1091,8 +1122,14 @@ var uploadFromUrl = function (sourceUrl, _a) {
1091
1122
  signal: signal,
1092
1123
  source: source,
1093
1124
  integration: integration,
1125
+ userAgent: userAgent,
1094
1126
  retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes
1095
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);
1096
1133
  })
1097
1134
  .then(function (urlResponse) {
1098
1135
  if (urlResponse.type === TypeEnum.FileInfo) {
@@ -1107,17 +1144,17 @@ var uploadFromUrl = function (sourceUrl, _a) {
1107
1144
  publicKey: publicKey,
1108
1145
  baseURL: baseURL,
1109
1146
  integration: integration,
1147
+ userAgent: userAgent,
1110
1148
  retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes,
1111
1149
  onProgress: onProgress,
1112
1150
  signal: signal
1113
1151
  });
1114
1152
  },
1115
1153
  function (_a) {
1116
- var stopRace = _a.stopRace, signal = _a.signal;
1154
+ var signal = _a.signal;
1117
1155
  return pushStrategy({
1118
1156
  token: urlResponse.token,
1119
1157
  pusherKey: pusherKey,
1120
- stopRace: stopRace,
1121
1158
  signal: signal,
1122
1159
  onProgress: onProgress
1123
1160
  });
@@ -1136,6 +1173,7 @@ var uploadFromUrl = function (sourceUrl, _a) {
1136
1173
  publicKey: publicKey,
1137
1174
  baseURL: baseURL,
1138
1175
  integration: integration,
1176
+ userAgent: userAgent,
1139
1177
  retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes,
1140
1178
  onProgress: onProgress,
1141
1179
  signal: signal
@@ -1145,13 +1183,14 @@ var uploadFromUrl = function (sourceUrl, _a) {
1145
1183
  };
1146
1184
 
1147
1185
  var uploadFromUploaded = function (uuid, _a) {
1148
- 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;
1149
1187
  return info(uuid, {
1150
1188
  publicKey: publicKey,
1151
1189
  baseURL: baseURL,
1152
1190
  signal: signal,
1153
1191
  source: source,
1154
1192
  integration: integration,
1193
+ userAgent: userAgent,
1155
1194
  retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes
1156
1195
  })
1157
1196
  .then(function (fileInfo) { return new UploadcareFile(fileInfo, { baseCDN: baseCDN, fileName: fileName }); })
@@ -1205,6 +1244,18 @@ var isMultipart = function (fileSize, multipartMinFileSize) {
1205
1244
  return fileSize >= multipartMinFileSize;
1206
1245
  };
1207
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
+
1208
1259
  var runWithConcurrency = function (concurrency, tasks) {
1209
1260
  return new Promise(function (resolve, reject) {
1210
1261
  var results = [];
@@ -1240,11 +1291,6 @@ var runWithConcurrency = function (concurrency, tasks) {
1240
1291
  });
1241
1292
  };
1242
1293
 
1243
- var getChunk = function (file, index, fileSize, chunkSize) {
1244
- var start = chunkSize * index;
1245
- var end = Math.min(start + chunkSize, fileSize);
1246
- return file.slice(start, end);
1247
- };
1248
1294
  var uploadPartWithRetry = function (chunk, url, _a) {
1249
1295
  var publicKey = _a.publicKey, onProgress = _a.onProgress, signal = _a.signal, integration = _a.integration, multipartMaxAttempts = _a.multipartMaxAttempts;
1250
1296
  return retrier(function (_a) {
@@ -1263,7 +1309,7 @@ var uploadPartWithRetry = function (chunk, url, _a) {
1263
1309
  });
1264
1310
  };
1265
1311
  var uploadMultipart = function (file, _a) {
1266
- 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;
1267
1313
  var size = fileSize || getFileSize(file);
1268
1314
  var progressValues;
1269
1315
  var createProgressHandler = function (size, index) {
@@ -1292,14 +1338,16 @@ var uploadMultipart = function (file, _a) {
1292
1338
  signal: signal,
1293
1339
  source: source,
1294
1340
  integration: integration,
1341
+ userAgent: userAgent,
1295
1342
  retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes
1296
1343
  })
1297
1344
  .then(function (_a) {
1298
1345
  var uuid = _a.uuid, parts = _a.parts;
1346
+ var getChunk = prepareChunks(file, size, multipartChunkSize);
1299
1347
  return Promise.all([
1300
1348
  uuid,
1301
1349
  runWithConcurrency(maxConcurrentRequests, parts.map(function (url, index) { return function () {
1302
- return uploadPartWithRetry(getChunk(file, index, size, multipartChunkSize), url, {
1350
+ return uploadPartWithRetry(getChunk(index), url, {
1303
1351
  publicKey: publicKey,
1304
1352
  onProgress: createProgressHandler(parts.length, index),
1305
1353
  signal: signal,
@@ -1316,6 +1364,7 @@ var uploadMultipart = function (file, _a) {
1316
1364
  baseURL: baseURL,
1317
1365
  source: source,
1318
1366
  integration: integration,
1367
+ userAgent: userAgent,
1319
1368
  retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes
1320
1369
  });
1321
1370
  })
@@ -1330,6 +1379,7 @@ var uploadMultipart = function (file, _a) {
1330
1379
  baseURL: baseURL,
1331
1380
  source: source,
1332
1381
  integration: integration,
1382
+ userAgent: userAgent,
1333
1383
  retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes,
1334
1384
  onProgress: onProgress,
1335
1385
  signal: signal
@@ -1343,7 +1393,7 @@ var uploadMultipart = function (file, _a) {
1343
1393
  * Uploads file from provided data.
1344
1394
  */
1345
1395
  function uploadFile(data, _a) {
1346
- 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;
1347
1397
  if (isFileData(data)) {
1348
1398
  var fileSize = getFileSize(data);
1349
1399
  if (isMultipart(fileSize)) {
@@ -1351,6 +1401,7 @@ function uploadFile(data, _a) {
1351
1401
  publicKey: publicKey,
1352
1402
  contentType: contentType,
1353
1403
  multipartChunkSize: multipartChunkSize,
1404
+ multipartMaxAttempts: multipartMaxAttempts,
1354
1405
  fileName: fileName,
1355
1406
  baseURL: baseURL,
1356
1407
  secureSignature: secureSignature,
@@ -1360,6 +1411,8 @@ function uploadFile(data, _a) {
1360
1411
  onProgress: onProgress,
1361
1412
  source: source,
1362
1413
  integration: integration,
1414
+ userAgent: userAgent,
1415
+ maxConcurrentRequests: maxConcurrentRequests,
1363
1416
  retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes,
1364
1417
  baseCDN: baseCDN
1365
1418
  });
@@ -1375,6 +1428,7 @@ function uploadFile(data, _a) {
1375
1428
  onProgress: onProgress,
1376
1429
  source: source,
1377
1430
  integration: integration,
1431
+ userAgent: userAgent,
1378
1432
  retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes,
1379
1433
  baseCDN: baseCDN
1380
1434
  });
@@ -1384,6 +1438,9 @@ function uploadFile(data, _a) {
1384
1438
  publicKey: publicKey,
1385
1439
  fileName: fileName,
1386
1440
  baseURL: baseURL,
1441
+ baseCDN: baseCDN,
1442
+ checkForUrlDuplicates: checkForUrlDuplicates,
1443
+ saveUrlForRecurrentUploads: saveUrlForRecurrentUploads,
1387
1444
  secureSignature: secureSignature,
1388
1445
  secureExpire: secureExpire,
1389
1446
  store: store,
@@ -1391,8 +1448,9 @@ function uploadFile(data, _a) {
1391
1448
  onProgress: onProgress,
1392
1449
  source: source,
1393
1450
  integration: integration,
1451
+ userAgent: userAgent,
1394
1452
  retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes,
1395
- baseCDN: baseCDN
1453
+ pusherKey: pusherKey
1396
1454
  });
1397
1455
  }
1398
1456
  if (isUuid(data)) {
@@ -1404,6 +1462,7 @@ function uploadFile(data, _a) {
1404
1462
  onProgress: onProgress,
1405
1463
  source: source,
1406
1464
  integration: integration,
1465
+ userAgent: userAgent,
1407
1466
  retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes,
1408
1467
  baseCDN: baseCDN
1409
1468
  });
@@ -1418,8 +1477,7 @@ var UploadcareGroup = /** @class */ (function () {
1418
1477
  this.filesCount = groupInfo.filesCount;
1419
1478
  this.totalSize = Object.values(groupInfo.files).reduce(function (acc, file) { return acc + file.size; }, 0);
1420
1479
  this.isStored = !!groupInfo.datetimeStored;
1421
- this.isImage = !!Object.values(groupInfo.files).filter(function (file) { return file.isImage; })
1422
- .length;
1480
+ this.isImage = !!Object.values(groupInfo.files).filter(function (file) { return file.isImage; }).length;
1423
1481
  this.cdnUrl = groupInfo.cdnUrl;
1424
1482
  this.files = files;
1425
1483
  this.createdAt = groupInfo.datetimeCreated;
@@ -1466,7 +1524,7 @@ var isUrlArray = function (data) {
1466
1524
  };
1467
1525
 
1468
1526
  function uploadFileGroup(data, _a) {
1469
- 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;
1470
1528
  if (!isFileDataArray(data) && !isUrlArray(data) && !isUuidArray(data)) {
1471
1529
  throw new TypeError("Group uploading from \"" + data + "\" is not supported");
1472
1530
  }
@@ -1499,6 +1557,7 @@ function uploadFileGroup(data, _a) {
1499
1557
  onProgress: createProgressHandler(filesCount, index),
1500
1558
  source: source,
1501
1559
  integration: integration,
1560
+ userAgent: userAgent,
1502
1561
  retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes,
1503
1562
  contentType: contentType,
1504
1563
  multipartChunkSize: multipartChunkSize,
@@ -1522,6 +1581,7 @@ function uploadFileGroup(data, _a) {
1522
1581
  signal: signal,
1523
1582
  source: source,
1524
1583
  integration: integration,
1584
+ userAgent: userAgent,
1525
1585
  retryThrottledRequestMaxTimes: retryThrottledRequestMaxTimes
1526
1586
  }).then(function (groupInfo) { return new UploadcareGroup(groupInfo, filesInGroup); });
1527
1587
  });
@@ -1590,11 +1650,11 @@ var UploadClient = /** @class */ (function () {
1590
1650
 
1591
1651
  Object.defineProperty(exports, 'AbortController', {
1592
1652
  enumerable: true,
1593
- get: function () {
1594
- return abortController.AbortController;
1595
- }
1653
+ get: function () { return abortController.AbortController; }
1596
1654
  });
1597
1655
  exports.UploadClient = UploadClient;
1656
+ exports.UploadcareFile = UploadcareFile;
1657
+ exports.UploadcareGroup = UploadcareGroup;
1598
1658
  exports.base = base;
1599
1659
  exports.fromUrl = fromUrl;
1600
1660
  exports.fromUrlStatus = fromUrlStatus;
@@ -1604,5 +1664,9 @@ exports.info = info;
1604
1664
  exports.multipartComplete = multipartComplete;
1605
1665
  exports.multipartStart = multipartStart;
1606
1666
  exports.multipartUpload = multipartUpload;
1667
+ exports.uploadBase = uploadFromObject;
1607
1668
  exports.uploadFile = uploadFile;
1608
1669
  exports.uploadFileGroup = uploadFileGroup;
1670
+ exports.uploadFromUploaded = uploadFromUploaded;
1671
+ exports.uploadFromUrl = uploadFromUrl;
1672
+ exports.uploadMultipart = uploadMultipart;