@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.
- package/CHANGELOG.md +17 -0
- package/dist/cjs/client/file-fetcher/error.js +5 -7
- package/dist/cjs/client/file-fetcher/index.js +181 -71
- package/dist/cjs/client/media-client.js +1 -2
- package/dist/cjs/client/media-store/MediaStore.js +34 -24
- package/dist/cjs/client/media-store/error.js +5 -7
- package/dist/cjs/client/mobile-upload.js +1 -2
- package/dist/cjs/client/stargate-client.js +1 -2
- package/dist/cjs/file-streams-cache.js +1 -2
- package/dist/cjs/models/errors/index.js +6 -8
- package/dist/cjs/upload-controller.js +1 -2
- package/dist/cjs/uploader/error.js +5 -7
- package/dist/cjs/utils/createCopyIntentRegisterationBatcher.js +123 -0
- package/dist/cjs/utils/hashing/sha256SimpleHasher.js +1 -2
- package/dist/cjs/utils/hashing/simpleHasher.js +1 -2
- package/dist/cjs/utils/hashing/workerHasher.js +1 -2
- package/dist/cjs/utils/mobileUpload/error.js +5 -7
- package/dist/cjs/utils/polling/errors.js +5 -7
- package/dist/cjs/utils/polling/index.js +1 -2
- package/dist/cjs/utils/request/errors.js +5 -7
- package/dist/cjs/utils/request/helpers.js +10 -4
- package/dist/es2019/client/file-fetcher/index.js +60 -8
- package/dist/es2019/client/media-store/MediaStore.js +17 -14
- package/dist/es2019/utils/createCopyIntentRegisterationBatcher.js +75 -0
- package/dist/es2019/utils/request/helpers.js +7 -2
- package/dist/esm/client/file-fetcher/error.js +5 -7
- package/dist/esm/client/file-fetcher/index.js +181 -71
- package/dist/esm/client/media-client.js +1 -2
- package/dist/esm/client/media-store/MediaStore.js +36 -26
- package/dist/esm/client/media-store/error.js +5 -7
- package/dist/esm/client/mobile-upload.js +1 -2
- package/dist/esm/client/stargate-client.js +1 -2
- package/dist/esm/file-streams-cache.js +1 -2
- package/dist/esm/models/errors/index.js +6 -8
- package/dist/esm/upload-controller.js +1 -2
- package/dist/esm/uploader/error.js +5 -7
- package/dist/esm/utils/createCopyIntentRegisterationBatcher.js +115 -0
- package/dist/esm/utils/hashing/sha256SimpleHasher.js +1 -2
- package/dist/esm/utils/hashing/simpleHasher.js +1 -2
- package/dist/esm/utils/hashing/workerHasher.js +1 -2
- package/dist/esm/utils/mobileUpload/error.js +5 -7
- package/dist/esm/utils/polling/errors.js +5 -7
- package/dist/esm/utils/polling/index.js +1 -2
- package/dist/esm/utils/request/errors.js +5 -7
- package/dist/esm/utils/request/helpers.js +9 -4
- package/dist/types/client/file-fetcher/index.d.ts +7 -2
- package/dist/types/client/media-store/MediaStore.d.ts +4 -1
- package/dist/types/client/media-store/types.d.ts +5 -1
- package/dist/types/utils/createCopyIntentRegisterationBatcher.d.ts +20 -0
- package/dist/types/utils/request/helpers.d.ts +1 -0
- package/dist/types/utils/request/types.d.ts +1 -0
- package/dist/types-ts4.5/client/file-fetcher/index.d.ts +7 -2
- package/dist/types-ts4.5/client/media-store/MediaStore.d.ts +4 -1
- package/dist/types-ts4.5/client/media-store/types.d.ts +5 -1
- package/dist/types-ts4.5/utils/createCopyIntentRegisterationBatcher.d.ts +20 -0
- package/dist/types-ts4.5/utils/request/helpers.d.ts +1 -0
- package/dist/types-ts4.5/utils/request/types.d.ts +1 -0
- 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
|
|
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 =
|
|
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(
|
|
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(
|
|
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
|
|
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 =
|
|
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,
|
|
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
|
|
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 =
|
|
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,
|
|
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
|
|
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 =
|
|
21
|
+
_this = _callSuper(this, PollingError, [reason]);
|
|
24
22
|
_this.reason = reason;
|
|
25
23
|
_this.attempts = attempts;
|
|
26
24
|
return _this;
|
|
27
25
|
}
|
|
28
|
-
(0,
|
|
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
|
|
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 =
|
|
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,
|
|
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
|
-
|
|
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 (
|
|
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
|
|
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
|
-
|
|
420
|
-
|
|
421
|
-
|
|
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(
|
|
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 ? {
|