@atlaskit/media-client 28.5.0 → 29.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.
Files changed (58) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/cjs/client/file-fetcher/error.js +5 -7
  3. package/dist/cjs/client/file-fetcher/index.js +181 -71
  4. package/dist/cjs/client/media-client.js +1 -2
  5. package/dist/cjs/client/media-store/MediaStore.js +34 -24
  6. package/dist/cjs/client/media-store/error.js +5 -7
  7. package/dist/cjs/client/mobile-upload.js +1 -2
  8. package/dist/cjs/client/stargate-client.js +1 -2
  9. package/dist/cjs/file-streams-cache.js +1 -2
  10. package/dist/cjs/models/errors/index.js +6 -8
  11. package/dist/cjs/upload-controller.js +1 -2
  12. package/dist/cjs/uploader/error.js +5 -7
  13. package/dist/cjs/utils/createCopyIntentRegisterationBatcher.js +123 -0
  14. package/dist/cjs/utils/hashing/sha256SimpleHasher.js +1 -2
  15. package/dist/cjs/utils/hashing/simpleHasher.js +1 -2
  16. package/dist/cjs/utils/hashing/workerHasher.js +1 -2
  17. package/dist/cjs/utils/mobileUpload/error.js +5 -7
  18. package/dist/cjs/utils/polling/errors.js +5 -7
  19. package/dist/cjs/utils/polling/index.js +1 -2
  20. package/dist/cjs/utils/request/errors.js +5 -7
  21. package/dist/cjs/utils/request/helpers.js +10 -4
  22. package/dist/es2019/client/file-fetcher/index.js +60 -8
  23. package/dist/es2019/client/media-store/MediaStore.js +17 -14
  24. package/dist/es2019/utils/createCopyIntentRegisterationBatcher.js +75 -0
  25. package/dist/es2019/utils/request/helpers.js +7 -2
  26. package/dist/esm/client/file-fetcher/error.js +5 -7
  27. package/dist/esm/client/file-fetcher/index.js +181 -71
  28. package/dist/esm/client/media-client.js +1 -2
  29. package/dist/esm/client/media-store/MediaStore.js +36 -26
  30. package/dist/esm/client/media-store/error.js +5 -7
  31. package/dist/esm/client/mobile-upload.js +1 -2
  32. package/dist/esm/client/stargate-client.js +1 -2
  33. package/dist/esm/file-streams-cache.js +1 -2
  34. package/dist/esm/models/errors/index.js +6 -8
  35. package/dist/esm/upload-controller.js +1 -2
  36. package/dist/esm/uploader/error.js +5 -7
  37. package/dist/esm/utils/createCopyIntentRegisterationBatcher.js +115 -0
  38. package/dist/esm/utils/hashing/sha256SimpleHasher.js +1 -2
  39. package/dist/esm/utils/hashing/simpleHasher.js +1 -2
  40. package/dist/esm/utils/hashing/workerHasher.js +1 -2
  41. package/dist/esm/utils/mobileUpload/error.js +5 -7
  42. package/dist/esm/utils/polling/errors.js +5 -7
  43. package/dist/esm/utils/polling/index.js +1 -2
  44. package/dist/esm/utils/request/errors.js +5 -7
  45. package/dist/esm/utils/request/helpers.js +9 -4
  46. package/dist/types/client/file-fetcher/index.d.ts +7 -2
  47. package/dist/types/client/media-store/MediaStore.d.ts +4 -1
  48. package/dist/types/client/media-store/types.d.ts +5 -1
  49. package/dist/types/utils/createCopyIntentRegisterationBatcher.d.ts +20 -0
  50. package/dist/types/utils/request/helpers.d.ts +1 -0
  51. package/dist/types/utils/request/types.d.ts +1 -0
  52. package/dist/types-ts4.5/client/file-fetcher/index.d.ts +7 -2
  53. package/dist/types-ts4.5/client/media-store/MediaStore.d.ts +4 -1
  54. package/dist/types-ts4.5/client/media-store/types.d.ts +5 -1
  55. package/dist/types-ts4.5/utils/createCopyIntentRegisterationBatcher.d.ts +20 -0
  56. package/dist/types-ts4.5/utils/request/helpers.d.ts +1 -0
  57. package/dist/types-ts4.5/utils/request/types.d.ts +1 -0
  58. package/package.json +4 -4
@@ -19,34 +19,32 @@ Object.defineProperty(exports, "isMediaClientError", {
19
19
  });
20
20
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
21
21
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
22
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
23
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
24
22
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
25
23
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
24
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
26
25
  var _wrapNativeSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/wrapNativeSuper"));
27
26
  var _helpers = require("./helpers");
28
- function _createSuper(t) { var r = _isNativeReflectConstruct(); return function () { var e, o = (0, _getPrototypeOf2.default)(t); if (r) { var s = (0, _getPrototypeOf2.default)(this).constructor; e = Reflect.construct(o, arguments, s); } else e = o.apply(this, arguments); return (0, _possibleConstructorReturn2.default)(this, e); }; }
27
+ function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); }
29
28
  function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
30
29
  /**
31
30
  * Base class for media errors
32
31
  */
33
32
  var BaseMediaClientError = exports.BaseMediaClientError = /*#__PURE__*/function (_Error) {
34
- (0, _inherits2.default)(BaseMediaClientError, _Error);
35
- var _super = _createSuper(BaseMediaClientError);
36
33
  function BaseMediaClientError(message) {
37
34
  var _this;
38
35
  (0, _classCallCheck2.default)(this, BaseMediaClientError);
39
- _this = _super.call(this, message);
36
+ _this = _callSuper(this, BaseMediaClientError, [message]);
40
37
 
41
38
  // https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-2.html#support-for-newtarget
42
39
  _this.message = message;
43
- Object.setPrototypeOf((0, _assertThisInitialized2.default)(_this), (this instanceof BaseMediaClientError ? this.constructor : void 0).prototype);
40
+ Object.setPrototypeOf(_this, (this instanceof BaseMediaClientError ? this.constructor : void 0).prototype);
44
41
 
45
42
  // https://v8.dev/docs/stack-trace-api
46
43
  if ('captureStackTrace' in Error) {
47
- Error.captureStackTrace((0, _assertThisInitialized2.default)(_this), this instanceof BaseMediaClientError ? this.constructor : void 0);
44
+ Error.captureStackTrace(_this, this instanceof BaseMediaClientError ? this.constructor : void 0);
48
45
  }
49
46
  return _this;
50
47
  }
48
+ (0, _inherits2.default)(BaseMediaClientError, _Error);
51
49
  return (0, _createClass2.default)(BaseMediaClientError);
52
50
  }( /*#__PURE__*/(0, _wrapNativeSuper2.default)(Error));
@@ -11,7 +11,7 @@ var UploadController = exports.UploadController = /*#__PURE__*/function () {
11
11
  function UploadController() {
12
12
  (0, _classCallCheck2.default)(this, UploadController);
13
13
  }
14
- (0, _createClass2.default)(UploadController, [{
14
+ return (0, _createClass2.default)(UploadController, [{
15
15
  key: "setAbort",
16
16
  value: function setAbort(abortFunction) {
17
17
  this.abortFunction = abortFunction;
@@ -24,5 +24,4 @@ var UploadController = exports.UploadController = /*#__PURE__*/function () {
24
24
  }
25
25
  }
26
26
  }]);
27
- return UploadController;
28
27
  }();
@@ -8,25 +8,24 @@ exports.UploaderError = void 0;
8
8
  exports.isUploaderError = isUploaderError;
9
9
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
10
10
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
11
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
12
11
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
13
12
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
13
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
14
14
  var _errors = require("../models/errors");
15
- function _createSuper(t) { var r = _isNativeReflectConstruct(); return function () { var e, o = (0, _getPrototypeOf2.default)(t); if (r) { var s = (0, _getPrototypeOf2.default)(this).constructor; e = Reflect.construct(o, arguments, s); } else e = o.apply(this, arguments); return (0, _possibleConstructorReturn2.default)(this, e); }; }
15
+ function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); }
16
16
  function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
17
17
  var UploaderError = exports.UploaderError = /*#__PURE__*/function (_BaseMediaClientError) {
18
- (0, _inherits2.default)(UploaderError, _BaseMediaClientError);
19
- var _super = _createSuper(UploaderError);
20
18
  function UploaderError(reason, id, metadata) {
21
19
  var _this;
22
20
  (0, _classCallCheck2.default)(this, UploaderError);
23
- _this = _super.call(this, reason);
21
+ _this = _callSuper(this, UploaderError, [reason]);
24
22
  _this.reason = reason;
25
23
  _this.id = id;
26
24
  _this.metadata = metadata;
27
25
  return _this;
28
26
  }
29
- (0, _createClass2.default)(UploaderError, [{
27
+ (0, _inherits2.default)(UploaderError, _BaseMediaClientError);
28
+ return (0, _createClass2.default)(UploaderError, [{
30
29
  key: "attributes",
31
30
  get: function get() {
32
31
  var reason = this.reason,
@@ -43,7 +42,6 @@ var UploaderError = exports.UploaderError = /*#__PURE__*/function (_BaseMediaCli
43
42
  };
44
43
  }
45
44
  }]);
46
- return UploaderError;
47
45
  }(_errors.BaseMediaClientError);
48
46
  function isUploaderError(err) {
49
47
  return err instanceof UploaderError;
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.MAX_BATCH_SIZE = void 0;
8
+ exports.createCopyIntentRegisterationBatcher = createCopyIntentRegisterationBatcher;
9
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
10
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
11
+ var _dataloader = _interopRequireDefault(require("dataloader"));
12
+ var _mediaCommon = require("@atlaskit/media-common");
13
+ var MAX_BATCH_SIZE = exports.MAX_BATCH_SIZE = 100;
14
+ /**
15
+ * Returns a function that, given Array<DataloaderKey>, resolves to an array of same length containing either DataloaderResult or Error.
16
+ * Such contract is formalised by Dataloader 1.0, @see https://github.com/graphql/dataloader
17
+ *
18
+ * If an Error is resolved in the results, it must be at same position then their corresponding key:
19
+ * - Dataloader will re-throw that Error when accessing/loading that particular key
20
+ *
21
+ * @param mediaStore instance of MediaStore
22
+ */
23
+ function createBatchCopyIntentRegisterationFunc(mediaStore) {
24
+ return /*#__PURE__*/function () {
25
+ var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(keys) {
26
+ var keysByToken, items;
27
+ return _regenerator.default.wrap(function _callee2$(_context2) {
28
+ while (1) switch (_context2.prev = _context2.next) {
29
+ case 0:
30
+ keysByToken = keys.reduce(function (acc, key) {
31
+ var token = key.resolvedAuth.token;
32
+ acc[token] = acc[token] || [];
33
+
34
+ // de-duplicate ids in collection
35
+ var hasDuplicates = acc[token].some(function (_ref2) {
36
+ var id = _ref2.id,
37
+ collectionName = _ref2.collectionName;
38
+ return key.id === id && collectionName === key.collectionName;
39
+ });
40
+ if (!hasDuplicates) {
41
+ acc[token].push(key);
42
+ }
43
+ return acc;
44
+ }, {});
45
+ items = [];
46
+ _context2.next = 4;
47
+ return Promise.all(Object.keys(keysByToken).map( /*#__PURE__*/function () {
48
+ var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(batchKey) {
49
+ var metadataTraceContext, files, resolvedAuth;
50
+ return _regenerator.default.wrap(function _callee$(_context) {
51
+ while (1) switch (_context.prev = _context.next) {
52
+ case 0:
53
+ metadataTraceContext = {
54
+ traceId: (0, _mediaCommon.getRandomHex)(8),
55
+ spanId: (0, _mediaCommon.getRandomHex)(8)
56
+ };
57
+ files = keysByToken[batchKey].map(function (key) {
58
+ return {
59
+ id: key.id,
60
+ collection: key.collectionName
61
+ };
62
+ }); // given these are batched by the token the assumption is that they have the same details.
63
+ resolvedAuth = keysByToken[batchKey][0].resolvedAuth;
64
+ _context.prev = 3;
65
+ _context.next = 6;
66
+ return mediaStore.registerCopyIntents(files, metadataTraceContext, resolvedAuth);
67
+ case 6:
68
+ _context.next = 11;
69
+ break;
70
+ case 8:
71
+ _context.prev = 8;
72
+ _context.t0 = _context["catch"](3);
73
+ files.forEach(function (_ref4) {
74
+ var id = _ref4.id,
75
+ collection = _ref4.collection;
76
+ items.push({
77
+ id: id,
78
+ collection: collection,
79
+ error: _context.t0
80
+ });
81
+ });
82
+ case 11:
83
+ case "end":
84
+ return _context.stop();
85
+ }
86
+ }, _callee, null, [[3, 8]]);
87
+ }));
88
+ return function (_x2) {
89
+ return _ref3.apply(this, arguments);
90
+ };
91
+ }()));
92
+ case 4:
93
+ return _context2.abrupt("return", keys.map(function (_ref5) {
94
+ var _items$find;
95
+ var id = _ref5.id,
96
+ collectionName = _ref5.collectionName;
97
+ return (_items$find = items.find(function (item) {
98
+ return item.id === id && item.collection === collectionName;
99
+ })) === null || _items$find === void 0 ? void 0 : _items$find.error;
100
+ }));
101
+ case 5:
102
+ case "end":
103
+ return _context2.stop();
104
+ }
105
+ }, _callee2);
106
+ }));
107
+ return function (_x) {
108
+ return _ref.apply(this, arguments);
109
+ };
110
+ }();
111
+ }
112
+ function createCopyIntentRegisterationBatcher(mediaStore) {
113
+ return new _dataloader.default(createBatchCopyIntentRegisterationFunc(mediaStore), {
114
+ maxBatchSize: MAX_BATCH_SIZE,
115
+ cacheKeyFn: function cacheKeyFn(_ref6) {
116
+ var id = _ref6.id,
117
+ _ref6$collectionName = _ref6.collectionName,
118
+ collectionName = _ref6$collectionName === void 0 ? 'default' : _ref6$collectionName,
119
+ resolvedAuth = _ref6.resolvedAuth;
120
+ return "".concat(id, "-").concat(collectionName, "-").concat(resolvedAuth.token);
121
+ }
122
+ });
123
+ }
@@ -12,7 +12,7 @@ var SimpleHasher = exports.SimpleHasher = /*#__PURE__*/function () {
12
12
  function SimpleHasher() {
13
13
  (0, _classCallCheck2.default)(this, SimpleHasher);
14
14
  }
15
- (0, _createClass2.default)(SimpleHasher, [{
15
+ return (0, _createClass2.default)(SimpleHasher, [{
16
16
  key: "hash",
17
17
  value: function hash(blob) {
18
18
  return new Promise(function (resolve, reject) {
@@ -26,5 +26,4 @@ var SimpleHasher = exports.SimpleHasher = /*#__PURE__*/function () {
26
26
  });
27
27
  }
28
28
  }]);
29
- return SimpleHasher;
30
29
  }();
@@ -15,7 +15,7 @@ var SimpleHasher = exports.SimpleHasher = /*#__PURE__*/function () {
15
15
  function SimpleHasher() {
16
16
  (0, _classCallCheck2.default)(this, SimpleHasher);
17
17
  }
18
- (0, _createClass2.default)(SimpleHasher, [{
18
+ return (0, _createClass2.default)(SimpleHasher, [{
19
19
  key: "hash",
20
20
  value: function hash(blob) {
21
21
  return new Promise(function (resolve, reject) {
@@ -29,5 +29,4 @@ var SimpleHasher = exports.SimpleHasher = /*#__PURE__*/function () {
29
29
  });
30
30
  }
31
31
  }]);
32
- return SimpleHasher;
33
32
  }();
@@ -19,7 +19,7 @@ var WorkerHasher = exports.WorkerHasher = /*#__PURE__*/function () {
19
19
  this.workers.push(this.createWorker());
20
20
  }
21
21
  }
22
- (0, _createClass2.default)(WorkerHasher, [{
22
+ return (0, _createClass2.default)(WorkerHasher, [{
23
23
  key: "hash",
24
24
  value: function hash(chunk) {
25
25
  return this.calculateHashInWorker(chunk);
@@ -110,5 +110,4 @@ var WorkerHasher = exports.WorkerHasher = /*#__PURE__*/function () {
110
110
  }, this.workers[0]);
111
111
  }
112
112
  }]);
113
- return WorkerHasher;
114
113
  }();
@@ -8,25 +8,24 @@ exports.MobileUploadError = void 0;
8
8
  exports.isMobileUploadError = isMobileUploadError;
9
9
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
10
10
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
11
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
12
11
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
13
12
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
13
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
14
14
  var _errors = require("../../models/errors");
15
- function _createSuper(t) { var r = _isNativeReflectConstruct(); return function () { var e, o = (0, _getPrototypeOf2.default)(t); if (r) { var s = (0, _getPrototypeOf2.default)(this).constructor; e = Reflect.construct(o, arguments, s); } else e = o.apply(this, arguments); return (0, _possibleConstructorReturn2.default)(this, e); }; }
15
+ function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); }
16
16
  function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
17
17
  var MobileUploadError = exports.MobileUploadError = /*#__PURE__*/function (_BaseMediaClientError) {
18
- (0, _inherits2.default)(MobileUploadError, _BaseMediaClientError);
19
- var _super = _createSuper(MobileUploadError);
20
18
  function MobileUploadError(reason, id, metadata) {
21
19
  var _this;
22
20
  (0, _classCallCheck2.default)(this, MobileUploadError);
23
- _this = _super.call(this, reason);
21
+ _this = _callSuper(this, MobileUploadError, [reason]);
24
22
  _this.reason = reason;
25
23
  _this.id = id;
26
24
  _this.metadata = metadata;
27
25
  return _this;
28
26
  }
29
- (0, _createClass2.default)(MobileUploadError, [{
27
+ (0, _inherits2.default)(MobileUploadError, _BaseMediaClientError);
28
+ return (0, _createClass2.default)(MobileUploadError, [{
30
29
  key: "attributes",
31
30
  get: function get() {
32
31
  var reason = this.reason,
@@ -47,7 +46,6 @@ var MobileUploadError = exports.MobileUploadError = /*#__PURE__*/function (_Base
47
46
  };
48
47
  }
49
48
  }]);
50
- return MobileUploadError;
51
49
  }(_errors.BaseMediaClientError);
52
50
  function isMobileUploadError(err) {
53
51
  return err instanceof MobileUploadError;
@@ -8,24 +8,23 @@ exports.PollingError = void 0;
8
8
  exports.isPollingError = isPollingError;
9
9
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
10
10
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
11
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
12
11
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
13
12
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
13
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
14
14
  var _errors = require("../../models/errors");
15
- function _createSuper(t) { var r = _isNativeReflectConstruct(); return function () { var e, o = (0, _getPrototypeOf2.default)(t); if (r) { var s = (0, _getPrototypeOf2.default)(this).constructor; e = Reflect.construct(o, arguments, s); } else e = o.apply(this, arguments); return (0, _possibleConstructorReturn2.default)(this, e); }; }
15
+ function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); }
16
16
  function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
17
17
  var PollingError = exports.PollingError = /*#__PURE__*/function (_BaseMediaClientError) {
18
- (0, _inherits2.default)(PollingError, _BaseMediaClientError);
19
- var _super = _createSuper(PollingError);
20
18
  function PollingError(reason, attempts) {
21
19
  var _this;
22
20
  (0, _classCallCheck2.default)(this, PollingError);
23
- _this = _super.call(this, reason);
21
+ _this = _callSuper(this, PollingError, [reason]);
24
22
  _this.reason = reason;
25
23
  _this.attempts = attempts;
26
24
  return _this;
27
25
  }
28
- (0, _createClass2.default)(PollingError, [{
26
+ (0, _inherits2.default)(PollingError, _BaseMediaClientError);
27
+ return (0, _createClass2.default)(PollingError, [{
29
28
  key: "attributes",
30
29
  get: function get() {
31
30
  var reason = this.reason,
@@ -36,7 +35,6 @@ var PollingError = exports.PollingError = /*#__PURE__*/function (_BaseMediaClien
36
35
  };
37
36
  }
38
37
  }]);
39
- return PollingError;
40
38
  }(_errors.BaseMediaClientError);
41
39
  function isPollingError(err) {
42
40
  return err instanceof PollingError;
@@ -54,7 +54,7 @@ var PollingFunction = exports.PollingFunction = /*#__PURE__*/function () {
54
54
  this.options = _objectSpread(_objectSpread({}, defaultPollingOptions), options);
55
55
  this.poll_intervalMs = this.options.poll_intervalMs;
56
56
  }
57
- (0, _createClass2.default)(PollingFunction, [{
57
+ return (0, _createClass2.default)(PollingFunction, [{
58
58
  key: "execute",
59
59
  value: function () {
60
60
  var _execute = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(executor) {
@@ -141,5 +141,4 @@ var PollingFunction = exports.PollingFunction = /*#__PURE__*/function () {
141
141
  this.timeoutId = 0;
142
142
  }
143
143
  }]);
144
- return PollingFunction;
145
144
  }();
@@ -8,25 +8,24 @@ exports.RequestError = void 0;
8
8
  exports.isRequestError = isRequestError;
9
9
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
10
10
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
11
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
12
11
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
13
12
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
13
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
14
14
  var _errors = require("../../models/errors");
15
- function _createSuper(t) { var r = _isNativeReflectConstruct(); return function () { var e, o = (0, _getPrototypeOf2.default)(t); if (r) { var s = (0, _getPrototypeOf2.default)(this).constructor; e = Reflect.construct(o, arguments, s); } else e = o.apply(this, arguments); return (0, _possibleConstructorReturn2.default)(this, e); }; }
15
+ function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); }
16
16
  function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
17
17
  var RequestError = exports.RequestError = /*#__PURE__*/function (_BaseMediaClientError) {
18
- (0, _inherits2.default)(RequestError, _BaseMediaClientError);
19
- var _super = _createSuper(RequestError);
20
18
  function RequestError(reason, metadata, innerError) {
21
19
  var _this;
22
20
  (0, _classCallCheck2.default)(this, RequestError);
23
- _this = _super.call(this, reason);
21
+ _this = _callSuper(this, RequestError, [reason]);
24
22
  _this.reason = reason;
25
23
  _this.metadata = metadata;
26
24
  _this.innerError = innerError;
27
25
  return _this;
28
26
  }
29
- (0, _createClass2.default)(RequestError, [{
27
+ (0, _inherits2.default)(RequestError, _BaseMediaClientError);
28
+ return (0, _createClass2.default)(RequestError, [{
30
29
  key: "attributes",
31
30
  get: function get() {
32
31
  var reason = this.reason,
@@ -57,7 +56,6 @@ var RequestError = exports.RequestError = /*#__PURE__*/function (_BaseMediaClien
57
56
  };
58
57
  }
59
58
  }]);
60
- return RequestError;
61
59
  }(_errors.BaseMediaClientError);
62
60
  function isRequestError(err) {
63
61
  return err instanceof RequestError;
@@ -12,6 +12,7 @@ exports.createProcessFetchResponse = createProcessFetchResponse;
12
12
  exports.createRequestErrorFromResponse = createRequestErrorFromResponse;
13
13
  exports.createRequestErrorReason = createRequestErrorReason;
14
14
  exports.createUrl = createUrl;
15
+ exports.defaultShouldRetryError = void 0;
15
16
  exports.extendHeaders = extendHeaders;
16
17
  exports.extendTraceContext = void 0;
17
18
  exports.extractMediaHeaders = extractMediaHeaders;
@@ -61,8 +62,7 @@ var ZipkinHeaderKeys = exports.ZipkinHeaderKeys = {
61
62
  flags: 'x-b3-flags'
62
63
  };
63
64
  var mapTraceIdToRequestHeaders = function mapTraceIdToRequestHeaders(traceContext) {
64
- var _ref;
65
- return traceContext ? (_ref = {}, (0, _defineProperty2.default)(_ref, ZipkinHeaderKeys.traceId, traceContext.traceId), (0, _defineProperty2.default)(_ref, ZipkinHeaderKeys.spanId, traceContext.spanId), _ref) : {};
65
+ return traceContext ? (0, _defineProperty2.default)((0, _defineProperty2.default)({}, ZipkinHeaderKeys.traceId, traceContext.traceId), ZipkinHeaderKeys.spanId, traceContext.spanId) : {};
66
66
  };
67
67
  function mapAuthToRequestHeaders(auth) {
68
68
  if (!auth) {
@@ -159,6 +159,10 @@ function createMapResponseToBlob(metadata) {
159
159
  };
160
160
  }();
161
161
  }
162
+ var defaultShouldRetryError = exports.defaultShouldRetryError = function defaultShouldRetryError(err) {
163
+ var _err$metadata;
164
+ return isFetchNetworkError(err) || (0, _errors.isRequestError)(err) && !!(err !== null && err !== void 0 && (_err$metadata = err.metadata) !== null && _err$metadata !== void 0 && _err$metadata.statusCode) && err.metadata.statusCode >= 500;
165
+ };
162
166
  var DEFAULT_RETRY_OPTIONS = exports.DEFAULT_RETRY_OPTIONS = {
163
167
  startTimeoutInMs: 1000,
164
168
  // 1 second is generally a good timeout to start
@@ -182,6 +186,8 @@ function _fetchRetry() {
182
186
  startTimeoutInMs,
183
187
  maxAttempts,
184
188
  factor,
189
+ _options$shouldRetryE,
190
+ shouldRetryError,
185
191
  attempts,
186
192
  timeoutInMs,
187
193
  lastError,
@@ -192,7 +198,7 @@ function _fetchRetry() {
192
198
  case 0:
193
199
  overwriteOptions = _args4.length > 2 && _args4[2] !== undefined ? _args4[2] : {};
194
200
  options = _objectSpread(_objectSpread({}, DEFAULT_RETRY_OPTIONS), overwriteOptions);
195
- startTimeoutInMs = options.startTimeoutInMs, maxAttempts = options.maxAttempts, factor = options.factor;
201
+ startTimeoutInMs = options.startTimeoutInMs, maxAttempts = options.maxAttempts, factor = options.factor, _options$shouldRetryE = options.shouldRetryError, shouldRetryError = _options$shouldRetryE === void 0 ? defaultShouldRetryError : _options$shouldRetryE;
196
202
  attempts = 0;
197
203
  timeoutInMs = startTimeoutInMs;
198
204
  waitAndBumpTimeout = /*#__PURE__*/function () {
@@ -237,7 +243,7 @@ function _fetchRetry() {
237
243
  }
238
244
  throw new _errors.RequestError('clientAbortedRequest', metadata, _context4.t0);
239
245
  case 18:
240
- if (!(!isFetchNetworkError(_context4.t0) && !(0, _errors.isRequestError)(_context4.t0) || (0, _errors.isRequestError)(_context4.t0) && (!_context4.t0.metadata || !_context4.t0.metadata.statusCode || _context4.t0.metadata.statusCode < 500))) {
246
+ if (shouldRetryError(_context4.t0)) {
241
247
  _context4.next = 20;
242
248
  break;
243
249
  }
@@ -25,7 +25,11 @@ import { shouldFetchRemoteFileStates } from '../../utils/shouldFetchRemoteFileSt
25
25
  import { PollingFunction } from '../../utils/polling';
26
26
  import { isEmptyFile } from '../../utils/detectEmptyFile';
27
27
  import { mediaStore } from '@atlaskit/media-state';
28
+ import { createCopyIntentRegisterationBatcher } from '../../utils/createCopyIntentRegisterationBatcher';
29
+ import { defaultShouldRetryError } from '../../utils/request/helpers';
28
30
  export { isFileFetcherError, FileFetcherError } from './error';
31
+ const isCopySourceFileWithToken = token => !!token.authProvider;
32
+ const isCopyDestinationWithToken = token => !!token.authProvider;
29
33
  export class FileFetcherImpl {
30
34
  constructor(mediaApi, store = mediaStore) {
31
35
  _defineProperty(this, "getErrorFileState", (error, id, occurrenceKey) => {
@@ -139,6 +143,7 @@ export class FileFetcherImpl {
139
143
  this.mediaApi = mediaApi;
140
144
  this.store = store;
141
145
  this.dataloader = createFileDataloader(mediaApi);
146
+ this.copyIntentRegisterationBatcher = createCopyIntentRegisterationBatcher(mediaApi);
142
147
  }
143
148
  getFileState(id, options = {}) {
144
149
  const {
@@ -379,7 +384,26 @@ export class FileFetcherImpl {
379
384
  traceContext
380
385
  });
381
386
  }
382
- async copyFile(source, destination, options = {}, traceContext) {
387
+ async registerCopyIntent(id, collectionName) {
388
+ // pre-resolving auth to add it to the key
389
+ const auth = await this.mediaApi.resolveAuth({
390
+ collectionName
391
+ });
392
+ const key = {
393
+ id,
394
+ collectionName,
395
+ resolvedAuth: auth
396
+ };
397
+ const error = await this.copyIntentRegisterationBatcher.load(key);
398
+ if (error) {
399
+ // if the error is retryable then it should not be cached
400
+ if (defaultShouldRetryError(error)) {
401
+ this.copyIntentRegisterationBatcher.clear(key);
402
+ }
403
+ throw error;
404
+ }
405
+ }
406
+ async copyFileWithToken(source, destination, traceContext) {
383
407
  const {
384
408
  authProvider,
385
409
  collection: sourceCollection,
@@ -391,10 +415,6 @@ export class FileFetcherImpl {
391
415
  replaceFileId,
392
416
  occurrenceKey
393
417
  } = destination;
394
- const {
395
- preview,
396
- mimeType
397
- } = options;
398
418
  const mediaStore = destination.mediaStore || new MediaApi({
399
419
  authProvider: destinationAuthProvider
400
420
  });
@@ -413,12 +433,44 @@ export class FileFetcherImpl {
413
433
  replaceFileId,
414
434
  occurrenceKey
415
435
  };
436
+ const {
437
+ data
438
+ } = await mediaStore.copyFileWithToken(body, params, traceContext);
439
+ return data;
440
+ }
441
+ async copyFileWithIntent(source, destination, traceContext) {
442
+ const res = await this.mediaApi.copyFile(source.id, {
443
+ sourceCollection: source.collection,
444
+ collection: destination.collection,
445
+ replaceFileId: destination.replaceFileId
446
+ }, traceContext);
447
+ const {
448
+ data
449
+ } = res;
450
+ return data;
451
+ }
452
+ async copyFile(source, destination, options = {}, traceContext) {
453
+ const {
454
+ id
455
+ } = source;
456
+ const {
457
+ collection: destinationCollectionName,
458
+ replaceFileId,
459
+ occurrenceKey
460
+ } = destination;
461
+ const {
462
+ preview,
463
+ mimeType
464
+ } = options;
416
465
  const cache = getFileStreamsCache();
417
466
  let processingSubscription;
418
467
  try {
419
- const {
420
- data: copiedFile
421
- } = await mediaStore.copyFileWithToken(body, params, traceContext);
468
+ let copiedFile;
469
+ if (isCopySourceFileWithToken(source) && isCopyDestinationWithToken(destination)) {
470
+ copiedFile = await this.copyFileWithToken(source, destination, traceContext);
471
+ } else {
472
+ copiedFile = await this.copyFileWithIntent(source, destination, traceContext);
473
+ }
422
474
 
423
475
  // if we were passed a "mimeType", we propagate it into copiedFileWithMimeType
424
476
  const copiedFileWithMimeType = {
@@ -2,8 +2,8 @@ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
2
  import { isClientBasedAuth } from '@atlaskit/media-core';
3
3
  import { FILE_CACHE_MAX_AGE, MAX_RESOLUTION } from '../../constants';
4
4
  import { getArtifactUrl } from '../../models/artifacts';
5
- import { request } from '../../utils/request';
6
- import { createUrl, createMapResponseToJson, createMapResponseToBlob, extendTraceContext } from '../../utils/request/helpers';
5
+ import { isRequestError, request } from '../../utils/request';
6
+ import { createUrl, createMapResponseToJson, createMapResponseToBlob, defaultShouldRetryError, extendTraceContext } from '../../utils/request/helpers';
7
7
  import { mapToMediaCdnUrl } from '../../utils/mediaCdn';
8
8
  import { resolveAuth, resolveInitialAuth } from './resolveAuth';
9
9
  import { ChunkHashAlgorithm } from '@atlaskit/media-core';
@@ -365,29 +365,31 @@ export class MediaStore {
365
365
  body: JSON.stringify({
366
366
  id
367
367
  }),
368
- traceContext
368
+ traceContext,
369
+ clientOptions: {
370
+ retryOptions: {
371
+ shouldRetryError: err => {
372
+ var _err$metadata;
373
+ return defaultShouldRetryError(err) || isRequestError(err) && (err === null || err === void 0 ? void 0 : (_err$metadata = err.metadata) === null || _err$metadata === void 0 ? void 0 : _err$metadata.statusCode) === 401;
374
+ }
375
+ }
376
+ }
369
377
  };
370
378
  return this.request('/v2/file/copy', options).then(createMapResponseToJson(metadata));
371
379
  }
372
- async registerCopyIntents(ids, collectionName, traceContext) {
373
- const files = ids.map(id => ({
374
- id,
375
- collection: collectionName
376
- }));
380
+ async registerCopyIntents(files, traceContext, resolvedAuth) {
377
381
  const metadata = {
378
382
  method: 'POST',
379
383
  endpoint: '/file/copy/intents'
380
384
  };
381
385
  const options = {
382
386
  ...metadata,
383
- authContext: {
384
- collectionName
385
- },
386
387
  headers: jsonHeaders,
387
388
  body: JSON.stringify({
388
389
  files
389
390
  }),
390
- traceContext
391
+ traceContext,
392
+ resolvedAuth
391
393
  };
392
394
  await this.request('/file/copy/intents', options);
393
395
  }
@@ -405,9 +407,10 @@ export class MediaStore {
405
407
  body,
406
408
  clientOptions,
407
409
  traceContext,
408
- addMediaClientParam
410
+ addMediaClientParam,
411
+ resolvedAuth
409
412
  } = options;
410
- const auth = await this.resolveAuth(authContext);
413
+ const auth = resolvedAuth !== null && resolvedAuth !== void 0 ? resolvedAuth : await this.resolveAuth(authContext);
411
414
  const clientId = isClientBasedAuth(auth) ? auth.clientId : undefined;
412
415
  const extendedTraceContext = extendTraceContext(traceContext);
413
416
  const extendedParams = addMediaClientParam ? {